来源 | Giacomo Zucco
译者 | 天道酬勤 责编 | 徐威龙
出品 | 区块链大本营(blockchain_camp)
本文将以数字签名和CoinJoin范例的使用为基础,探索独特时间顺序,挖矿费用和场外交易的概念。
证明单一性:时间链
我们最后结束时的探索计划,再次回来这个问题“什么时候?”从这里开始。
这是一个重要的问题,因为它证明了所谓的“区块链技术”的引入是合理的,这是一个明显被滥用的表达方式,在其最初的含义中,它只是为一个独特时间顺序问题的答案贴上了标签。(有趣的是,在这方面,中本聪本人将此结构称为“时间链”,这也是我们将在此处使用的术语)。
回到我们的小故事,让我们尝试了解它解决了什么问题。你设计了一个数字现金系统,在该系统中,发行和所有权都是分散的,巧妙地将难题和签名结合在一起。
但是,我们如何防止用户两次花相同的UTXO呢?如果一个不诚实的用户Carol将sat转移到Daniel所控制的地址,然后签署另一笔交易,将同样的sat重传到她所控制的地址,那么网络将执行哪个交易?从签名和脚本链的角度来看,它们都将是“有效的”,并且都将指向有效的初始发行,并且具有正确的PoW难度。
在你之前的电子黄金实验中,你值得信赖的时间戳服务器轻松地解决了这两个问题。但是现在没有中央服务器,那么谁来定义事件的独特时间顺序呢?
如果网络可以以某种方式投票,就可以对此达成民主共识。但是投票程序虽然在具有固定数量的已知参与者(通常称为“联盟”)的系统中可行,但无法在未知的匿名参与者的动态集合中起作用。
你不能简单地使用“节点数”作为投票权的代理,因为每个用户都可以假装在“ Sybil攻击”中“假装”数百万个不同的节点。你需要另一种“抵抗Sybil攻击”的方式来推动所有节点在一个单一的、一致的、不变的历史中找到(并保持)共识。
不幸的是,基于数学的确定性和最终解决方案在理论上是不可能的。但是基于经济学的统计和渐近解决方案实际上是可行的,并且你足够聪明,可以找到它。这是一个主意:每次矿工试图解决PoW难题时,他们都应该在消息中包含当前交易时间轴的及时快照!
他们不应该只传递发布消息,而应该通过散列函数传递更复杂的信息块,每个块包含(连同所述发布消息,时间戳和以正确难度解决难题所需的随机数)的解决方案。上一个区块(其他矿工在大约10分钟之前发现的区块)以及其他用户最近进行的交易列表。
包含先前块中已经包含的交易块被认为是无效的。带有与前一个时间戳明显不兼容的时间戳的块也被释放。
使用这个技巧,所有参与者都被激励去向相同时间序列的一致版本聚合。 Minnie可能会包含与先前确认的交易相抵触(双花)的有效交易,或者更改时间戳以欺骗难度调整,但随后其他节点会拒绝此类交易,从而浪费了新发行的价值,白白浪费了时间和精力。
矿工们花钱来解决难题,因此,至少在某些情况下,他们仅遵循系统内在的经济激励机制,就可以假设他们想要享受相关的奖励,创建不会被拒绝的区块是相当安全的。
挖矿费用
这种解决方案虽然出色,但仍缺乏激励矿工参与他人交易的机制。他们可能只是选择节省验证脚本和签名所需的计算能力(虽然没有散列冲突所需的计算能力,但仍然是相关的),但仍将自己的有效签发包含在其他空块中发布。
此外,由于控制供应模式,此类发行中允许的sat数量的减少,将降低(甚至为sat的购买力的增加打折)解决障碍的动机,最终在最后一个时代结束时完全取消 ,那时将不会出现通货膨胀。
你可以通过引入挖矿费用来解决此问题:用户可以在交易中附加一小笔额外费用,来激励矿工把他们包括进来。
它的工作原理是这样的:该系统允许矿工将其奖励交易包括在内,以及发行新“挖出的”sat(与当前时代兼容),在块中还包括的所有有效交易的已创建和已消费的UTXO之间的sat余额。费用从不取决于交易量,而仅取决于交易规模(脚本复杂性,签名数量等)以及块内所需的优先级。
可伸缩性(和耐用性)问题
包含在区块中的交易所需的最低挖矿费根据“区块空间”的供求而变化。在供应方面,可以添加到时间链的事务数受最大块大小(每个块小于4兆字节)和最大块速率(每10分钟大约一个)的限制。
在需求方面,每个用户都有不同的约束和偏好(有些用户可以等待更多的时间来支付更少的费用,有些用户可以支付更多的费用来减少等待的时间,有些用户使用具有出色的动态费用估算功能的钱包,有些则不使用)。一般来说,对区块空间的需求增加将暗示挖矿费用的增加。
这显然限制了系统的可扩展性(特别是,由于矿工费用与转让的价值量无关,我们可以说它实际上降低了可分割性)。
一般而言,使用时间链还意味着,网络中的每个节点都必须永远监听所有事情:每一个链上交易都必须由每个参与者下载和验证,这些参与者将使用该系统的整个历史,甚至在很久时间以后。这样的系统显然是不可伸缩的。它也缺乏耐用性,因为每个人都必须永远保留每笔交易的副本,从而可以进行任何形式的取证分析和去匿名化尝试。
对于某些用户来说,可以使情况看起来更好,但代价是创建另一个更“有特权”的用户类别。例如,如果你增加块的大小和频率,那么块空间的供应就会增加,其价格就会下降。但是,运行节点的成本(能够独立验证事务和块的有效性)的增长速度远远快于上述供应,从而集中了整个系统的拓扑结构。
当然,一种新的专门节点可以作为某种“签名消息”提供给非验证的低级用户,从而为他们提供事务有效的某种保证。毕竟,引入货币是为了将验证贵金属硬币的昂贵任务委托给少数几个专门的可信实体。但是,就像造币一样,这种策略(被称为“SPV”)意味着一种强大的中央集权,伴随着马洛里(Mallory)等人所带来的政治干预或审查的风险。
一个新范例:“ Off-Chain”
有一种聪明的方法可以减轻全球共识系统的基本规模限制,而又不会牺牲其分散性。我们将其称为“链下范式”。
这个想法很简单:只要在绝对必要之前就不要将每笔交易都提交到一个交易块中,就可以将大部分流量都置于公共时间链之外(其昂贵的全球共识),仅将其用于解决冲突和定期解决。
这种演变类似于人们在普通法系统中使用法院和合同的方式:法院可以创建具有公共约束力的先例,达成某种“法律上的全球共识”,但是相对而言它既缓慢又昂贵,因此大多数交易方通常只签署私人双向合同,要求法院仅在发生冲突或需要定期解决时才进行验证和执行。
可以使用高级智能合约来使这种“追索权”的信任度最小化:与实际的法律系统不同,分散的时间链可以避免人为的偏见和腐败,主要依靠密码和代码。与在虚拟化环境中讨论的信用证书不同,脱链交易不是“虚拟”的。它们是实际有效的交易,无论涉及的各方是否诚实,都极有可能被系统强制执行。
你很快就会意识到,这种范例也可以极大地改善系统的耐用性。并非让所有节点永久注册所有交易,这些交易中的大多数将仅在感兴趣的各方之间私下交换,从而使恶意窃听者的取证分析变得更加困难、昂贵、不完整和不可靠。
这种策略的主要实现是由预先资助的双边“支付渠道”组成的辅助网络,该网络可以以信任最小化的原子方式跨多个跃点路由交易。用户用一个极富诗意的名称来称呼它:“闪电网络”(其缩写通常包含在系统的整个协议套件的标签中,名为“ LNP / BP”,类似于历史上的“ TCP / IP” )。
但是,还有其他一些较小的例子存在于同一范例中。例如,有几种技术可以使实际脚本不在需要的时间范围之内,同时还可以节省块空间和隐私。(人们给这些技术取了很多奇怪的名称,例如“ Taproot”,“ Graftroot”,“ g * root”,“Scriptless Script”等。)
通过引入这些最终技术,你的用户最终将拥有在现实生活中使用该系统所需的一切,以便收回一些最重要的货币功能。
希望这篇文章对你有用,欢迎评论区和我们讨论。
原文:https://bitcoinmagazine.com/articles/discovering-bitcoin-part-7-missing-pieces
为了让大家更好地了解开发者,CSDN特发起“开发者与AI大调查”活动。 点击阅读原文,填写调查问卷,您将获得价值299元的「2020 AI 开发者万人大会」在线直播门票一张哟~
推荐阅读
万字好文:智能合约编写之Solidity的编程攻略,建议收藏!
人人都能读懂的「以太坊2.0分片设计」
开源的未来 10 年:中国开源社区建立是关键
DDoS 攻击爆发!医疗在线教育成重点,代理攻击成常态
从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了
老板不让走,程序员机智提加薪 50 %,都学着点!
老铁们求在看!????