课程链接 https://www.coursera.org/learn/blockchain-platforms/home/week/3
为自己学习记的笔记,翻译可能存在问题,望谅解。
目录
共识 Consensus
可扩展性 Scalability
隐私与保密 Privacy & Confidentiality
托管和多重签名 Escrow & Multi-sig
任何新兴技术都会日趋成熟。 区块链也不例外。 为了推动区块链技术的持续改进,该领域正在开展各种活动和计划。 阻碍其广泛发展的挑战很多。 我们将探讨不断创新这项新兴技术的一些重要挑战和解决方案。 完成模块后,您将能够:描述共识问题和一些现有解决方案,解释区块链和可能解决方案的可扩展性,在智能合约的背景下解释托管和多同步解决方案,并讨论隐私和机密性及其解决方案。
共识是指 “普遍同意”。 在区块链操作的上下文中,共识是整个节点之间关于要添加到链中的下一个区块的协议。 这确保了链的完整性。 即使在已知的许可实体中,我们也需要达成共识。 在各种区块链中使用了不同的共识协议。
比特币使用工作量证明达成共识。 它占用大量计算资源,并且会在解决POW难题的大规模ASIC计算机机架中产生巨大的功耗,从而拥有开采下一个区块的权利。据估计,比特币开采每天消耗的能源与爱尔兰国家一样多。这就是问题所在,POW开采一个区块需要消耗巨大的能量。
学习目标:包括解释共识的重要性,列出工作量证明共识算法的两种替代方法以及解释权益证明。
什么是工作证明 Proof of Work?
计算固定的区块头元素和变量nonce的哈希值。H是标头和随机数的哈希值。 如果计算的哈希值小于2的128次幂,并且小于以太坊的难度函数,那么矿工就解决了这个难题。否则,请更改 nonce 值并重复上述步骤。 虽然很难找到解决我们描述的问题的区块头和 nonce 值的组合,但很容易验证。
您如何验证哈希值小于或等于2的128的幂? 检查哈希H的前128位是否为0。
比特币使用工作量证明(Proof of Work,POW),以太坊对其进行了一些修改。 在当前版本的 Ethereum Metropolis 中,它仍然使用工作量证明。 但是, Ethereum Metropolis 协议使用的是基于内存的工作量证明,该工作量不是高能耗的。
在即将到来的 Ethereum Constantinople 分叉中,计划是转向权益证明(Proof of Stake, POS )。
什么是权益证明 POS?
在权益证明中,选择最大权益 the most at stake 或货币最多的完整节点来添加下一个区块。这就是为什么它被称为 Proof of Stake。 这个想法是,拥有最大利益的节点不会是恶意的,并且冒着其利益进行网络分叉的风险。
为了避免被拥有最大权益的节点所垄断,除了基本POS外,还使用了基于年龄的轮循策略 age based round robin policy。
矿工费用 The minter fee 由交易费用 transaction fees 支付,并且不会有任何小费用,例如在POW中。 实际上,随着以太坊向其POS迁移,矿工费用已从5 以太币降低到3以太币。 POS方式对环境友好且高效,并且已被许多区块链平台广泛采用。
我们将介绍的下一个共识算法是实用拜占庭容错 PBFT。 事实证明,该算法可以容忍随机或拜占庭式节点故障,包括恶意节点。
在PBFT中,节点投票选举一个领导者,领导者将下一个区块添加到链中。
这是经过验证的事务块。每个节点都维护网络状态。 节点交换消息。 在存在随机独立故障或错误节点的情况下,将消息以及保存的状态用于达成共识。 所选节点将添加下一个已验证交易的块。
PBFT在许可区块链(例如超级账本结构)中很流行。
在课程的稍后部分,我们将学习一种新兴的共识算法,称为Hashgraph,它是拜占庭容错功能的一种变体。 这称为异步拜占庭容错或ABFT。
总结:共识是区块链协议的核心组件,高效的算法对于区块链的完整性和可扩展性至关重要。针对区块链正在探索许多共识算法。 我们只讲了其中三个。
阅读材料:
Basic Primer: Blockchain Consensus Protocol
Consensus Achieved Using Proof-of-Work
Consensus and Mining on the Blockchain
How nodes reach a consensus on a blockchain
让我们将去中心化的区块链系统与集中式系统进行比较。 区块链承担了中介机构的责任,包括验证,核实和记录交易,当然还有确保链完整性的共识过程。 与集中式系统相比,所有这些功能都需要花费时间,并导致交易确认时间的大量开销。例如,以太坊中的事务在所有节点上执行,然后顺序执行,而不是并行执行。 每个完整节点都存储整个块链。 所有这些都阻碍了区块链应用程序的可扩展性。与当前的集中式应用程序相比,事务处理率不令人满意。 这是挑战。 在本课程中,我们将研究一些解决可伸缩性的解决方案。
什么是可扩展性 Scalability?
可扩展性是系统在所有实际负载水平下 practical levels of load 都能令人满意地运行的能力。
区块链上下文中的负载可以是交易,节点数量,参与者和帐户数量以及区块链的其他属性。 在区块链的情况下,从业者担心每秒的交易速率。对于从支付系统到供应链管理的许多应用来说,这是至关重要的指标,以确保其性能良好。 因此,我们将每秒事务数作为可伸缩性的指标。
学习目标:
讨论使用更大的可变块大小来提高可伸缩性的链上解决方案,并探索状态通道中的脱链事务以提高可伸缩性。
提高交易率最明显的方法是增加每个区块的交易数量。 比特币以两种方式解决它,隔离见证 segregated witness 和 增加区块大小限制 increase in block size limit 。
在隔离见证 (segregated witness ,SegWit) 中,交易和签名被隔离,以允许每个块进行更多交易。这是在2017年实现的一个软分叉。它正在当前版本的比特币区块链中运行。但是,在当前版本中,块大小限制固定为1 MB。 关于可扩展性的第二个建议是将块大小限制增加到更大的2 MB。在这种情况下,原始块将保存发送者和接收者的数据和交易,新块结构将保留签名和脚本或见证。 因此,改进的名称称为 SegWit2X 或 “Witness 2X” 。 这是计划中的硬分叉,原定于2017年11月进行,但没有通过。这时,比特币已经实现了其可扩展性的一项改进,即SegWit,但由于SegWit 2X而失败。
现在,让我们探索以太坊如何解决区块大小。 在以太坊中,区块大小可以变化,并受区块标题中指定的 gas limits 的限制。 矿工工作可以增加它。 块中的交易数量决定了块的大小。
在这里,我们看到四个区块,分别是30个交易,294个交易,55个交易和183个交易,平均阻塞时间为8秒。 此可变块大小以及ASIC-resistant 的 POW 共识算法提高了事务处理速率。当以太坊在2018年即将到来的硬分叉中转为状态共识协议的证明时,有望进一步改善。
我们刚刚讨论了提高交易速率的链上解决方案。 接下来,我们将讨论链下方法。 解决交易速率的解决方案之一是将某些交易从链下卸载 unload some of the transactions off-chain。 这是在受信任的交易方之间执行的。 卸载结束后,将确认此链下活动的交易记录在区块链 DLT 的链上。 比特币中的此功能称为支付通道 payment channel。受托方之间可以以极低的费用 minimal fees 以较高的汇率higher rates 进行支付交易。 这种杠杆作用是我们之前讨论的SegWit改进。闪电网络 Lightning network 是实现此协议的知名区块链。
以太坊解决方案将此支付通道 payment channel 的概念扩展到了智能合约。 状态通道 State Channel 是支付通道概念在任意应用程序级别交易的扩展。之所以称为状态通道,是因为在进行脱链交易时,主链上节点的状态被锁定,并且与主链上的相关更新定期同步。 链下通道的交易速度比区块链网络快得多,因为不需要共识或DLT下的记录。 因此,提供了可扩展的解决方案。 雷达网络 Radar network 是基于以太坊的主链的链下解决方案。
流行的 Grid+ 能源平台使用此链下支付渠道从智能合约向 Grid+ 零售商智能合约的实时能源支付。 在这种情况下,已经建立了安全通道的两个已知方之间存在一对一的信任事务。
在本课程中,我们研究了两种用于扩展的解决方案,一种是在链上调整块大小,另一种是在链外使用解决方案,即状态通道。 这两种方法都旨在提高区块链的可扩展性。 其他解决方案包括分片 sharding 和面板处理 panel processing。 现在,在研究区块链时要问的问题是,采用了哪些方法来提高可扩展性?
阅读材料
Blockchain Scalability: When, Where, How?
Scalability Tradeoffs: Why “The Ethereum Killer” Hasn’t Arrived Yet
Can Blockchain Solve Its Scalability Problem?
Brock Pierce from Blockchain Capital explains the scalability problems for Bitcoin
隐私权 Privacy 是保护实体的数据,属性和资产不受未经同意的各方观察的权利。数据的机密性确保只有授权实体才能访问数据。 这是两个重要的概念,尤其是对于区块链来说,可以使用定制工具查看和分析交易。
学习目标:将讨论处理隐私和机密性的方法。
到目前为止,我们都非常清楚比特币是一个公共区块链。 您可以看到在比特币区块链上发生的所有交易。 包括企业以太坊 Enterprise Ethereum 和 Hyperledger Fabric 在内的许多区块链都是许可的区块链。他们将对区块链的访问仅限于许可实体。 这在很大程度上确保了网络的私密性。
在网络内,将数据访问权限(例如创建 create,读取 read ,更新 update )分配给各个实体。 这些都会在每笔交易中强制执行。这增加了许可网络提供的基本隐私。 诸如MultiChain之类的某些区块链平台可确保交易节点确实在许可列表中。它还为每个交易使用密钥交换对发送方和接收方进行身份验证。
保密性confidentiality.
为了保密起见,一种简单的方法是对交易的数据进行加密并进行数字签名。 也可以通过添加额外的元素来混淆 obfuscate 数据。
我们用智能合约数据 blindedBid 演示了加密和混淆,其中盲拍 blind auction 智能合约的实际出价是价值,但我们又添加了两个参数,分别为 fake 和 secret。在这种情况下,将使用 fake 值和值机密 value secret 作为参数来混淆投标人发送的 blindedBid,然后使用 keccak 安全哈希算法对其进行加密。这在一个盲拍卖应用程序中提供了竞标的机密性。
我们在较高级别上探索了一些确保隐私和机密性的简单方法。 关于隐私的研究包括零知识证明 zero knowledge proofs 和同态加密算法 homomorphic encryption algorithms 。 您可以使用参考资料部分中的链接进行探索。 现在,当您设计应用程序时,要问的问题是,您在设计中使用的加密和混淆方法是什么?
阅读材料
SOLVING BLOCKCHAIN'S PRIVACY PROBLEM
Smart Contracts: Privacy vs Confidentiality
Can This Man Build a Better Bitcoin?
在本节课中,我们将讨论两个相关的概念,它们已经在分散应用程序和智能合约上下文中得到了应用。
许多合同和法律文件,包括数字文件,都容易出错。 例如,错误地将一个逗号放在书面合同中,对罗杰斯电信公司造成了100万美元的损失。托管和多重签名是在解决与业务合同有关的问题以转换业务流程方面具有巨大潜力的两种技术。
完成本课程后,您将能够解释智能联系人中的托管特征和 multi-sig 的特征。
维基百科将托管定义为一种合同协议,其中第三方接收并支付主要交易方的款项或文件,支出取决于交易方同意的条件。
“ A contractual agreement in which a third party receives and disburses money or document for a primary transacting parties, with the disbursement dependent on conditions agreed to by the transacting parties. ”
智能合约可以完成所有这一切。 它可以将金钱和所有文物保存在托管中,并允许交易各方进行协商,并在支付托管中的物品之前验证要满足的条件。 创新的是,它可以在分散的世界中超越信任边界运作的各方之间完成。回想一下,智能合约的地址可以保持余额。 您可以从智能合约进行交易,发送或接收加密货币。
您可以使用智能合约的三个特定功能来开发基于托管的应用程序。
1) 包括一个托管量作为状态变量,例如; 您和托管金额。
2) 使用修饰符指定代管付款的条件。
3) 定义应用修饰符的函数,以验证金额支付条件。
回到 grid 平台。 grid 能源应用平台用户,将这两个硬币作为托管合同中的托管押金补充,用于根据用户消耗的能量进行付款。基于能量消耗,智能代理仅将为此消耗的付款发送给 grid 商店。grid 商业模式还要求消费者每月支付押金。如果智能代理用尽了支付能源消耗的债券,额外的金额将从托管中扣除。这是智能合约托管的另一种用法。 它有助于避免电力服务中断。持有托管资金通常与多个签名一起使用。 这称为多重信号特征 multiple signatures。
许多现实世界中的合约如何使多个签署人对合同中涉及的资产,企业和个人进行安全性,验证和保护。 在许多情况下,法律可能要求多方签署文件。
加密世界中的签名是地址的私钥,交易用该地址签名,以验证发送者的真实性。此地址所拥有资产的安全性仅与私钥的安全性一样好。 如果密钥被盗用,则拥有私钥的任何人都可以在相应的地址上耗尽资金。这些问题可以通过执行多个签名来执行某些重要交易来解决。 多键 multikey 或多重签名 multisig 的想法并不新鲜。我们已经在银行保险箱中看到了两键式解决方案。 您需要两个键才能打开它。 一个由您持有,第二个由银行持有。 如果没有盗用两个钥匙,小偷就无法进入保险箱的内容。
同样,自2012年以来,比特币已成功采用了这一想法。我们研究了比特币multi-sig解决方案。 比特币可以替代单个密钥地址。 这由地址的类型定义。这是由一种称为pay to script hash的地址类型(multi-sig 地址)定义的。 比特币交易中的 Multi-sig 地址以数字3开头,而常规地址以数字1开头。脚本哈希地址的付费可以支持一组n个密钥,而m个密钥中的任何一个都必须进行m个n的事务处理。 实际上,大多数 multi-sig 是三分之二,二分之二,尽管 m 和 n 的较大值可用于诸如法律文件之类的用例。
您如何使用multi-sig? 生成一个多重签名地址,它具有n个键,其中m个键触发一个动作。然后通过存款为新的multi-sig地址提供资金。 现在,您可以进行交易了。 创建一个多重签名交易。此事务将使用第一个签名MS1进行签名,从而产生十六进制字符串HS1。 然后,它们可以由第二个签名MS2进行签名,从而产生十六进制字符串HS2。对m签名重复m次,产生HSm。 这是必需的多符号密钥。通过协议进行验证并转移资金。这解释了multi-sig 操作。
我们了解了区块链的两个紧密相关的功能,它们对于区块链的业务采用至关重要,即托管和多重签名。 我们研究了实现共识,可伸缩性,隐私和机密性的一些方法。 我们还探索了智能合约中的托管和多重签名方法,使它们与现实世界的合约保持一致。 现在,您可以在分散的应用程序中使用它们,并为区块链协议的实现做出贡献。
阅读材料
Two party contracts
How A Smart Contract replaced An Escrow Company in a $60k deal
Ultimate Intro to Ethereum Ðapp Development [Part 8] - Smart Contracts - Escrow
BURST Decentralize Escrow Service Smart Contracts
Toward an Ethereum Multisig Standard