Posts
驱动链
英文原文
翻译:DeepL,Google translate,校对:李林
理解Drivechain需要改变大多数比特币玩家习惯的范式。它不是关于 “无需信任 “或 “数学上的确定性”,而是关于博弈论和激励。(好吧,一般来说比特币也是这样的,但是人们更愿意忽略它,而把注意力放在数学提供的一些无信任的假象上)。
这里我们将描述算力托管的(简单)基本机制和(复杂)激励机制,以及它如何实现主链(比特币)和各种侧链之间的双向挂钩。
“驱动链 “的完整概念还涉及盲目合并挖矿(即侧链通过向主链发布其区块哈希值来自行挖矿,矿工无需运行侧链软件),但这更容易理解,可以通过BIP-301机制或Spacechains机制来完成。
从比特币的角度来看,算力托管是如何运作的? 创建一个新的地址类型。任何进入该地址的东西都会被锁定,只有在所有矿工都同意提款交易(WT^)的情况下才能花掉,而提款交易将花掉6个月。每个侧链都有一个这样的特殊地址。
为了收集矿工的同意,bitcoind会跟踪所有可能从该地址支出的交易的 “分数”。在每一个区块的开采中,对于每一个侧链,矿工可以使用他们coinbase的一部分来增加一个WT^的分数1,同时减少所有其他的分数1;或者他们可以减少所有WT^的分数1;或者他们什么都不做。
一旦一笔交易得到了足够高的分数,它就会被公布,资金就会有效地从侧链转移到提款用户手中。
如果6个月后超时了,分数没有达到阈值,该WT^就会被丢弃。
上述程序是什么意思? 这意味着,人们可以通过向特殊地址存款,将硬币从主链转移到侧链。然后,他们可以通过在侧链上进行特殊的提款交易来从侧链上提款。
特殊交易在某种程度上冻结了侧链中的资金,而将所有提款汇总到一个主链WT^的交易,然后提交给主链矿工,让他们开始投票,最后在几个月后公布。
现在最关键的部分是:比特币主链不会验证WT^的有效性,也就是说,如果Bob要求从侧链提现到他的主链地址,但有人发布了一个错误的WT^,把Bob的资金送到了Alice的主链地址,主链不可能知道这一点。矿工的投票分数决定了WT^是否"有效性"的,也只有这个。矿工的工作是正确的投票–为此他们可能想在SPV模式下运行侧链节点,这样他们就可以证明侧链区块链中存在对WT^交易的引用(这样就可以确保它是正确的),或者通过一些其他手段进行这些检查。
什么?6个月才能拿回我的钱? 是的,也不是,在实践中,任何想要回自己钱的人都可以使用原子互换、潜艇互换或其他类似服务,将资金从侧链转移到主链,反之亦然。长时间延迟提款的成本将由少数流动性提供者承担,他们将从中获得一些小的利润。
为什么要费这个劲呢?? 驱动链可以解决许多不同的问题:
它使比特币的实验和新用例成为可能 发行资产、完全私密的交易、有状态的区块链合约、图灵完备、去中心化的游戏、一些 “DeFi “方面、预测市场、Futarchy、去中心化但有意义的人类可读名称、有大量正常交易的大区块、只为在其上建立Lighting网络而优化的链。
这些是一些可能有价值的想法,但从来没有真正尝试过,因为他们不能用真正的比特币尝试或与真正的比特币交互。他们要么被归入屎币领域,要么被归入Liquid或RSK这样的托管方案,可能因此而无法获得网络效应。
它解决了冲突和内讧 有些人希望在UTXO模式下进行完全私密的交易,有些人则希望 “账户"可以与他们的名字绑定,并在上面建立声誉;有些人希望有简单的多签解决方案,有些人则希望有复杂代码能读取大量变量;有些人希望每隔10分钟将所有交易分批次放在全球链上,有些人则希望在链外进行即时交易,并由之前锁定在渠道的资金支持;有些人想消费,有些人则只想持有;有些人想用区块链技术解决世界上的所有问题,有些人只想解决钱。
有了基于Drivechain的侧链,所有这些群体都可以同时快乐地生活,不会打架。同时,他们都会使用同样的钱,并为对方的生态系统做出贡献,即使是不情愿的,他们以后改变自己的团体归属也是很容易和自由的,这就减少了认知上的不协调。
它解决了"扩容"问题 像上面描述的那样的多条链,肯定会做很多事情来容纳更多的交易,比目前的比特币多的多。我们可以有特殊的闪电网络链,但即使只是大块链或大块-匿名链或其他什么,也可能做得很好。或者甚至是一些不那么酷的东西,比如200条独立的链,就像今天的比特币一样,无需额外的功能(你可以称之为 “分片”),就可以将目前的总容量放大200倍。
发挥想象力。
它解决了区块链的安保预算问题 计算方法很简单:你想象一下在一个没有区块补贴的世界里,每个区块的安全预算是多少,然后把它除以一个区块所能容纳的字节数:这就是每个字节所要支付的价格,以聪计算。在合理的估计中,每笔比特币交易所需的价格会达到非常大的数额,这样一来,不仅任何日常的交易都有疯狂的成本,而且闪电通道的打开和关闭也是不可行的。
因此,如果没有像Drivechain这样的解决方案,你将只剩下一个选择:将比特币的使用推给Liquid和RSK等可信的服务或托管的Lightning钱包。不过,有了Drivechain,可能会有成千上万的交易发生在侧链上,并被全部汇总到一个侧链区块中,然后支付非常大的费用被发布到主链上(通过盲目合并采矿)。比特币的安全性得到保证。
它保持了比特币的分散性 一旦我们有了侧链来容纳正常的交易,主链的功能就可以减少,只作为侧链来往的 “枢纽”,然后主链的最大区块大小可以减少到,比如说,100kb,这将使运行一个完整的节点非常非常容易。
矿工有能力偷窃吗? 是的,如果一组协调的矿工能够确保大多数的算力,并保持他们的协调6个月,他们可以发布一个WT^,从侧链上取钱并支付给自己。
矿工会偷窃么? 不,因为激励机制使他们不会这样做。
虽然一开始看起来,偷窃是矿工的明显策略,因为它是免费的钱,但其中涉及许多成本:
停止盲目合并挖矿回报的成本–因为偷窃将杀死一个侧链,矿工在未来几年内有望从中获得的所有费用都会消失。; 社区善意的代价–当参与偷窃行动时,矿工将遭受来自社区的大量反击,这是不容忽视的。如果他们是公共实体,他们可能会受到人身骚扰,收到死亡威胁,或受到国家司法系统的迫害; 协调的成本–假设矿工只是正常的企业,他们只想做自己的工作并获得报酬,但从驱动链上偷窃需要与其他矿工协调,以一种有很多隐患的方式进行不道德的行为,而且很可能在几个月内被打破; 矿工离开你的矿池的成本:当我们在上面谈到 “矿工 “时,我们实际上是在谈论矿池运营商,因此他们也必须考虑矿工从他们的矿池迁移到其他矿池的风险,因为他们开始了偷窃过程; 比特币价格下跌的代价。如果偷窃成功,就意味着驱动链不安全,因此比特币的作用就会降低,矿工的信誉也会受到伤害,这些都有可能导致比特币价格下跌,而这又可能扼杀矿工的生意和储蓄; 社区的善意最终会影响到自利的矿工的另一个小方法是,如果他们试图偷窃,即使最后失败了,这将促使人们对矿工对比特币生态系统的权力越来越担心,这可能最终导致社区同意在未来改变挖矿算法的硬分叉,或做一些事情来增加更多实体参与挖矿过程(如开发或便宜的新ASIC),这有可能减少当前矿工的利润。 另一点需要考虑的是,人们可能会倾向于认为一个新创建的侧链或使用率相对较低的侧链可能更容易被盗,因为它的盲目合并挖矿收益(上述第1点)会很小–但事实也是,一个使用率低的侧链也会有较少的钱被盗,由于除了1之外的其他成本在最后的弹性较小,所以也不值得从这些地方盗取。
所有上述考虑只有在矿工从好的侧链中偷窃时才有效。例如,如果有一个侧链正在做错事,骗人,根本不被使用,或者充满了bug,这将被视为一个坏的侧链,然后矿工可以而且会安全地从它那里偷东西并杀死它,这将被所有人视为一件好事。
如果矿工真的偷窃,我们该怎么办? 软分叉可以防止矿工偷窃,也就是说,大多数比特币用户和节点发布一个与此类似的规则类似,认定有问题的WT^无效,从而导致任何将其包含在区块中的矿工被归入他们自己的比特币分叉,其他节点不会接受。
这个建议让人们认为Drivechain是一个侧链解决方案,由用户行为的软叉来支持安全,这与事实相差甚远。驱动链绝不能也不会依赖这种软叉,尽管它们是可能的,因为协调成本太高,没有人应该期待这些事情的发生。
如果矿工们在所有的激励措施下(见上文)仍然从一个好的侧链中偷窃,这将意味着Drivechain实验的失败。这也很可能意味着比特币实验的失败,因为它将被证明,矿工可以在很长一段时间内协调恶意行为,而不考虑经济和社会激励,这意味着他们可能只是为了攻击比特币,得到民族国家或其他东西的支持,因此主链上的任何比特币交易都将不再安全。
为什么要使用这个而不是一个完整的无信任和开放的侧链技术? 因为这是不可能的。
如果你曾经听到有人说 “只要使用侧链”,“在侧链中做这个 “或类似的话,请注意,这些人要么是在谈论 “联合 “侧链(即资金由一群实体保管),要么是在谈论Drivechain,要么是幻想破灭,认为以任何其他方式做侧链都是可能的。.
Posts
平行链
英文原文
翻译:DeepL,Google Translate,校对:李林
我们想要合并开采的区块链。我们想要它们,因为有可能在其中做一些在普通的比特币区块链中无法做到的事情,因为它理所当然地太昂贵了,但是在世界货币之外,还有其他东西可以从 “分布式账本 “中受益–就像人们在2013年相信的那样–比如发行的资产和域名(只是最明显的例子)。
另一方面,我们不能像2013年人们所相信的那样,为每一个微不足道的想法都弄一个比特币的副本,有自己的原生代币,通过工作证明来挖矿,并且重现比特币这种从完全没有价值变成有一些价值神迹。
自定义的合并挖矿协议的区块链(如Namecoin和Rootstock),要求比特币矿工运行他们的软件,成为比特币之外的那个其他网络的积极参与者和矿工,这也不是一个好主意,因为这对所有人来说都太麻烦了。
幸运的是Ruben Somsen发明了这个盲目合并开采的协议,解决了上述问题。虽然它没有解决每个平行链仍然需要某种形式的 “原生 “代币来支付矿工–或者它必须使用另一种不使用原生代币的方法,比如链外的可信支付。
怎么工作的 有了SIGHASH_NOINPUT/SIGHASH_ANYPREVOUT软分叉1,就有可能创建与之前任何UTXO无关的预签名事务。
然后你创建一个长的交易序列(足以持续很多很多年),每个交易的nLockTime为1,每个交易都会花费下一个交易(你从上一个交易创建到第一个交易)。由于他们的scriptSig(解锁脚本)将使用SIGHASH_ANYPREVOUT,你可以获得一个不包括前一个TXO的交易ID/Hash,你可以,例如,在一个交易序列A0–>B(B花了A的输出0)中,在 “A0 “的scriptPubKey(锁定脚本)里面包括 “花A0在B “的签名。
有了上面描述的装置,就有可能做出那一长串大家都会知道(并且知道如何产生)的交易,但每笔交易只能由之前决定的下一笔交易支出,不管任何人做什么,而且它们之间总是必须有至少一个区块的差异。
然后你把它与RBF、SIGHASH_SINGLE和SIGHASH_ANYONECANPAY结合起来,这样平行链矿工就可以增加输入和输出,能够通过包括他们自己的输出并获得找零的回报来竞争费用,同时在找零输出中写入平行区块的哈希值,完美的机制:每个人都试图从长字符串中花费相同的输出,每个人都有不同的平行区块哈希值,只有最高出价者才能得到比特币链上包括的交易,因此只有一个平行区块被开采。
扩展阅读 Drivechain Eltoo也用了这个东西 ↩︎
Posts
Bitcoin_Optech_170中的多个拟议的LN改进
英文原文
翻译:DeepL,Google Translate,校对:李林
多个拟议的LN改进: Anthony Towns 在Lightning-Dev邮件列表中发布了一个详细的建议,并附有一些示例代码,描述了如何减少支付延迟,提高备份弹性,并允许在签名密钥离线时接收LN付款。该提案提供了一些与eltoo相同的好处,除了将在区块高度709,632激活的taproot软分叉,不需要SIGHASH_ANYPREVOUT软分叉或任何其他共识变化。因此,它可以在LN开发人员实施和测试后立即部署。看一下主要的特性。
减少支付延迟:处理支付所需的一些细节,但不是具体的支付细节,可以由渠道伙伴提前交换,允许节点只需向渠道伙伴发送支付和支付的签名,就可以启动或路由支付。在关键路径上不需要往返通信,允许付款以接近LN节点之间基础链接的速度在网络上传播。在发生故障的情况下,退还付款的速度会比较慢,但不会比这个变化之前慢。这个功能是开发者ZmnSCPxj之前提出的想法的延伸(见Newsletter #152),他在本周也写了一篇相关的文章,基于他与Towns的一些带外的讨论。
改进的备份弹性:目前LN要求信道各方和他们使用的任何瞭望台存储关于信道的每一个先前状态的信息,以防止企图偷窃的发生。Towns的提议对大多数关于通道状态的信息使用确定性推导,并在每个交易中编码一个状态号码,以允许恢复必要的信息(在某些情况下需要一些少量的暴力破解)。这允许一个节点在创建通道时备份所有与密钥有关的信息。任何其他所需的信息应该可以从区块链(在企图盗窃的情况下)或从通道伙伴(在节点丢失自己的数据的情况下)获得。改进的备份弹性:目前LN要求通道双方和他们使用的任何瞭望台存储关于通道的每个先前状态的信息,以防企图盗窃的情况。Towns的提议对大多数关于通道状态的信息使用确定性推导,并在每个交易中编码一个状态号码,以允许恢复必要的信息(在某些情况下需要一些少量的蛮力研磨)。这允许一个节点在创建通道时备份所有与密钥有关的信息。任何其他所需的信息应该可以从区块链(在企图盗窃的情况下)或渠道伙伴(在一个节点丢失自己的数据的情况下)获得。
用离线密钥接收付款:在线(热)密钥是LN中发送或路由付款的基本要求,但目前的协议也需要一个在线密钥来接收付款。基于Lloyd Fournier对ZmnSCPxj之前提到的想法的改编(在Newsletter #152中也有涉及),接收节点有可能只需要将其密钥在线,以便打开一个通道,关闭一个通道,或重新平衡其通道。这可以提高商家节点的安全性。
该提案还将提供更知名的隐私和效率的优势,将LN升级为使用taproot和PTLCs。这个想法在邮件列表中得到了很好的讨论,在写这篇文章的时候,讨论还在进行。
Posts
解释Eltoo提案
英文原文
翻译:DeepL,Google Translate, 校对: 李林
阅读论文,它实际上很好,而且很小。你只读第4.2节的所有内容就足够了。
好吧,你不想这样做。或者你试过了,但仍然想读本文。
Eltoo是一种保持支付通道状态的方法,比Lightning中使用的原始方案效果更好。由于Lightning是一堆不同的协议粘在一起的,它可以只取代以前处理保持支付通道的部分。
Eltoo是这样工作的。A和B想要一个支付渠道,所以他们创建了一个多签的交易,有来自双方的存款–或者只有来自一方的存款,都无所谓。该交易只有在双方合作的情况下才可以使用。因此,如果其中一个人没有反应或不合作,另一个人必须有办法拿回他的资金,所以他们也创建了一个更新交易,但没有发布到区块链上。该更新交易花费到一个结算交易,然后按照他们的余额将钱分配回给A和B。
如果他们合作,他们可以改变渠道的余额,只需创建新的更新交易和结算交易,并对其进行编号,如1、2、3、4等。
实心的箭头意味着一个交易被预设为只能花掉之前的那个其他交易;虚线的箭头意味着它是一个浮动的交易,可以花掉之前的任何交易。
他们为什么需要和更新和结算交易?? 因为如果B发布了更新2(他的余额更多),A需要一些时间来发布更新4(最新的,持有正确余额的状态)。
每个更新交易可以被任何较新的更新交易立即花费,或在一段时间后–或一些区块后,才被其自己的特定结算交易花费。
希望你能懂。
他们是如何关闭通道的? 如果他们是合作的,他们就可以同意把资金交易,也就是我提到的第一个多义词交易,花到他们想去的任何地方。如果一方不合作,另一方可以直接发布最新的更新交易,等待一段时间,然后发布其结算交易。
这比以前保持通道状态的方式有什么好处?? Eltoo更好,因为节点只需要保留最后一组更新和结算交易。之前他们不得不保留所有的中间状态更新。
如果它是如此的好,为什么他们不早做呢? 因为他们没想到。还因为他们需要对比特币协议进行更新,允许预签的更新交易花费之前的任何更新交易。这个协议更新被称为SIGHASH_NOINPUT1,你已经在外面看到这个名字。通过用SIGHASH_NOINPUT标记一个交易,它就进入了一个神秘的状态,成为一个浮动的交易,只要它的解锁脚本与锁定脚本匹配,就可以与任何其他交易绑定。
为什么update2不能将自己绑定到update4上,并花掉它? 好问题。它可以。但后来就不能了,因为Eltoo使用OP_CHECKLOCKTIMEVERIFY来确保它实际上不是检查锁定时间,而是检查一个序列。这都是很神秘的东西。
然后Eltoo 更新交易是有编号的,它们的锁/解锁脚本只有在一个交易被另一个比它大的交易花费时才会匹配。
渠道是否会过期? 不
他们在论文中谈到的 “链上协议 “是什么?? 这只是一个例子,用来指导你了解链外协议的工作方式。仔细阅读或根本不读。链外机制与链上机制是不同的。重复一遍:链上协议在现实世界中是没有用的,它只是一个说教的工具。
译者注:在BitcoinOPcode中有一个提案(译),通过活用taproot实现了一部分这个文章的功能,但是不需要引入新的操作码。
后来SIGHASH_NOINPUT被修改,以更好地适应Taproot和Schnorr的签名,并改名为SIGHASH_ANYPREVOUT。 ↩︎
Posts
解释比特币交易
英文原文
翻译:DeepL,Google transalte 校对:李林
交易是一块数据,它接受输入,产生输出。忘记区块链的事情,比特币实际上只是一棵大的交易树。区块链只是一种保持交易秩序的方式。
想象一下,你有10个聪。这意味着你把它们放在一个未花费的交易输出(UTXO)中。你想花掉它们,所以你创建了一个交易。该交易应该引用未花费的输出作为其输入。每个事务都有一个不可变的ID,所以你用这个ID加上输出的索引(因为事务可以有多个输出)。然后你指定一个脚本来解锁该交易和相关的签名,然后你指定输出,以及一个脚本来锁住这些输出。
正如你所看到的,有这个锁/解锁的东西,有输入和输出。输入必须通过满足创建交易的人所指定的条件才能解锁。而产出必须被锁定,所以任何想花这些产出的人都需要解锁。
在大多数情况下,锁定和解锁意味着指定一个公钥,其控制者(拥有相应私钥的人)将能够花费。其他花哨的东西也是可能的,但我们现在可以忽略它们。
回到你想花的10个聪。由于你已经成功地引用了10个聪并解锁了它们,现在你可以指定输出(这都是在一个步骤中完成的)。你可以指定一个10聪的输出,两个5的输出,一个3和一个7的输出,三个3的输出,以此类推。输出之和不能超过10。如果输出的总和小于10,那么差额就会变成费用。在比特币的初期,你不需要任何费用,但现在你需要,否则你的交易不会被纳入任何区块。
举个例子,一个交易向2个产出支出,其中一个被一个向另一个产出支出的交易选中,另一个被向另外2个产出支出的交易选中,然后第四个交易选中2个输入并将其合并,它可以将它们的总和用于一个单一的产出或多个产出。
如果你仍然对交易感兴趣,也许你可以看看Andreas Antonopoulos那本书的这个小章。
如果你讨厌Andreas Antonopoulos,因为他是一个共产主义的屎壳郎,或者不想读超过半页,请到这里。
Posts
用电子现金来想象比特币
英文原文
翻译:DeepL,Google transalte 校对:李林
虽然开始使用比特币相对容易,但理解它可能需要一些时间。许多初级和中级用户都在挣扎,因为他们没有找到一个合适的方式来思考比特币。这个问题不仅仅是理论上的–使用错误的思维模式会让你损失金钱。从积极的方面来看,一个坚实的心理模型可以更清楚地了解比特币当前的潜力和未来的机会。
这篇文章介绍了一种简单而有力的比特币思维方式,将帮助你掌握比特币的复杂性。
当心先入为主的观念 多年来使用电子支付系统,使商家和消费者都以同样狭隘的方式思考电子支付。比特币的工作原理完全不同,与电子银行或信用卡关系不大。
如果你认为比特币的工作方式与你以前可能使用过的电子支付系统一样,那先把这种想法放一边。
现金系统 尽管比特币与信用卡和网上银行没什么共同之处,但它与一种更古老的货币形式密切相关:现金。中本聪本人在其白皮书的标题中使用了 “电子现金系统 “这一短语来描述比特币。比特币与现金的密切关系决定了它的许多关键优势和限制。要了解比特币,首先要回想一下你对现金的个人体验。
现金系统使用可交易的代币作为交换媒介。根据日常经验,我们知道这些代币是金属硬币和纸币。现金代币有四个重要特性:
固定面值 具有防止复制的安全特性 有限供应 支付不需要可信的调解人 正如我们将看到的,比特币使用的数字代币也具有金属硬币和纸币的这些和许多其他属性。
数字王国的硬币 比特币是建立在数字硬币的概念上。把硬币想象成金属硬币的数字等价物。
术语 “硬币 “和 “比特币 “的含义有时令人困惑。硬币 “是一种用于比特币的数字代币。相比之下,“比特币 “是硬币的面值单位。例如,美国的四分之一美元是一种面值为25美分的实物代币。“美分 “不是代币本身的名字,而是代币面值的单位。同样,“比特币 “不是数字代币本身的名称,而是代币面值的计价单位。
代币与面值单位。两种硬币–一种实物(左),一种数字(右)。每枚硬币都有一个以特定货币单位计价的数字面值。
大量生产四分之一美元等金属硬币的高成本限制了面额的数量–1美分、5美分、10美分,等等。
由于没有材料加工成本或运输开销,数字硬币可以以任意的面值铸造。例如,一个数字硬币可能标有1.344455比特币的面值。另一个硬币的面值可能正好是1.00比特币。第三种硬币的面值可能是0.00001431比特币,以此类推。
多面值。由于制造和处理成本,美国纸币和硬币的面值范围有限。电子硬币在面值上没有这种限制。
纯粹由数字数据组成的硬币可以起到与金属硬币或纸币相同的作用的想法似乎有些牵强。 政府花费大量时间和精力来确保货币不易被伪造。 考虑到复制数字数据的如此容易,比特币如何运作?
密码学的安全性 当代币的所有者将其交给收款人时,就会发生现金支付。例如,您可以将一张钞票交给商家作为产品付款。 商家可以在接受之前检查钞票是否有伪造迹象。 比特币使用交易来代表传输不可伪造的数字代币的相同过程。
交易是重新分配硬币所有权的安全消息。当下,将交易视为一种特殊格式的数字文档,付款人在其中转移硬币所有权。
交易通过称为公钥加密的系统进行保护。该系统解决了数字代币交易中的三个重要问题:(1)识别当事人;(二)防伪;(3) 验证付款人。公钥密码学是一个深刻而复杂的话题。幸运的是,不需要了解细节。 有兴趣了解更多信息的人可以阅读椭圆曲线密码学。
目前,假设公钥加密使每个比特币用户都可以做三件事:
使用私钥对任何数字文档生成不可伪造的数字签名。 生成一个唯一标识符(公钥)来链接到所有签名都。 给定原始文档和公钥验证任何签名。 想象一下,爱丽丝拥有一枚面值为两个比特币 (฿2) 的数字硬币,她想送给鲍勃。 她首先询问 Bob 的公钥。 收到它后,爱丽丝准备了一笔交易,通过他们各自的公钥将鲍勃识别为硬币的接收者,并将她自己识别为所有者。 然后 Alice 使用她的私钥签署交易并将其转发给 Bob。 一个简单的交易。 Alice 给 Bob 一枚面值为 ฿2 的硬币。
Posts
我个人关于2017年区块大小辩论的体验
英文原文
翻译:DeepL,Google Translate 校对: 李林
在2017年初,我不知道比特币正在进行一场 “区块大小辩论”。我在2014年读完Tim Swanson关于狗屎工厂的书后,就不再关注比特币了,我很惊讶在以太坊和其他花哨的东西出现时,人们竟然还关心比特币。
我了解这一主题了解是从对Bitcoin Unlimited的Andrew Stone和Andrew Clifford的采访开始的(仍然不知道这些人是谁)。我听了之后,有点喜欢关于 “一群开发者试图,抵制矿工和用户,通过禁止扩大区块来控制整个生态系统 “的阴谋论(实际上,如果你听了这个宣布创建Blockstream和侧链白皮书的采访,听起来确实像一个政府特工在贿赂所有Core开发者,让他们组成一个财团,将比特币变成他们控制下的类似以太坊的狗屎币–但这只是一个无用的题外话)。
后来,我听了Jimmy Song的这个采访,并知道了两个硬分叉和阴谋以及纽约协议,我很兴奋,因为我并不关心比特币(我很羞于回忆这种感觉),希望看到事情发生变化,人们争吵,比特币交易火热,毫无理由。奇怪的是,我从采访中掌握的情况是,吉米-宋在为协议辩护,并期望每个人都能履行协议。
当这一天真正到来,“比特币现金 “分叉时,我带着怜悯的眼光看着它,因为它从一开始就明显是个失败者,但我还是为它欢呼了一下,除了BCH上的区块更大这一事实,我仍然对辩论一无所知,这看起来是一个非常简化的解释。
我想,“当然,这不仅仅是把块做大,那就太简单了,他们可能有一个非常复杂的计划,我可能理解不了。“
令我惊讶的是,整个争论实际上只是:更大的块更大的块。我是通过收听tomwoods.com/1064得出这个结论的,在这场辩论中,合理的论点面对幼稚的主张。那场辩论给了我视角,是Jameson Lopp对Roger Ver的明显、无可争议的胜利。
其实在这之前的一段时间,我听了另一集Tom Woods Show,以为会是关于比特币的一集,但事实上只是宣传了一场我几乎忘记的辩论。而且没有关于比特币的内容,都是关于 “比特币现金 “以及如何有两个比特币,一个是合法的,另一个是不合法的。
因此,作为一个完全陌生的人来听辩论,只听了很长时间的大区块论调的人来看,他们仍然不能说服有一些常识的人(就像我自己想的那样),他们只是听起来像疯狗,一切都和自己作对。
快进到当下,在对问题有了更多的了解后,我开始挖掘2016-2017年关于辩论的一些材料,试图了解更多的背景,并发现了这个对Mike Hearn)的可笑的采访。如果你不熟悉当时的辩论,听一听也不枉费时间。
正如我在Epicenter.tv的经历中可能预料到的那样,两位采访者都同意Mike Hearn的荒谬说法,即(不是他说的)我们必须通过防止费用增加来补贴目前几千名比特币用户,这样做没有任何好处–即使所有人都觉得他们很蠢。在整个采访中,没有一句话是值得辩护的,没有任何批评是有意义的,我为这个人感到难过,因为他觉得自己是那么的自信和正确。
知道了比特币世界里的大V蠢人试图把他们的愚蠢强加给别人的冒险之后,竟然发现比特币还在正确的轨道上,感觉更加奇怪和意外。一般来说,在政治中,最愚蠢的人获胜,但显然在比特币中不是。
比特币是一个奇迹。
Posts
解释CTV, BIP119
英文原文
翻译:DeepL,Google Translate 校对: 李林
CheckTemplateVerify (CTV)是一个提议中的比特币软分叉提案。它的目的是通过增加一个基本类型的 “契约 “或智能合约,为网络实现新的用例,这比目前比特币脚本能实现的要多。
为什么需要契约? 比特币,就目前而言,在交易的基础层面上,它的可编程性并不具备很大的灵活性–当然也不像它在用于签署交易的公钥和私钥层面上那样灵活。
目前,程序员可以用比特币脚本控制交易的输入,限制在交易花费前可以做什么,但他们不能控制允许签署什么类型的交易。换句话说,在今天大多数比特币智能合约中,用户可以通过定义必要的限制条件来控制一个币的解锁方式。但他们不能很好地控制一旦该币被解锁后可以做什么。
例如,人们可以用timelock定义一个交易可以花费的一定时间,有效地锁定了该交易,直到达到指定的块高度。在这种情况下,对资金的使用时间进行了限制,防止正确的钥匙解锁这些资金并使用它们。然而,在时间过后,在比特币区块链上达到区块高度时,钥匙可以解锁这些资金并自由使用。何时被限制,但不是什么或如何被限制。
因此,契约有能力为比特币的编程方式释放一系列新的可能性,通过预先定义哪些输出是可接受的,而不仅仅是控制输入。虽然复杂的契约有无限的可能性,可能会给网络带来安全风险,因为可能会产生意想不到的或意外的后果,但CTV的方案在大多数情况下是简单的。
什么是CTV? 简而言之,CTV允许比特币用户限制他们花费比特币的方式,即使他们拥有想要花费的比特币的密钥。
更重要的是,CTV允许这些支出限制以非交互方式执行。由CTV实现的一些用例今天可以实现,但大多数时候,参与智能合约安排的一组用户需要在线并手动互动以协调支出规则,这并不总是可能的。CTV使这些限制能够以编程方式执行,而不需要参与者的手动互动,因此提高了契约的可靠性。
今天,你可以随心所欲地花费你的UTXO。在一个后CTV世界中,你可以对你的UTXO制定规则,以控制或限制你花这些币的可能方式。不是什么时候花,而是如何花。通过将这些类型的新功能引入比特币,可以启用一个更多样化的使用案例集,出现一个新的应用生态系统。
CTV可以为比特币带来的一些功能包括加强安全、隐私和可扩展性。随着CTV的激活,用户将能够创建更复杂的托管解决方案,如金库,可以让比特币用户预先定义比特币从冷库到热库的预定和有限的支出,从而限制潜在黑客的破坏。CTV还可以带来支付池,这是一种安排,一群人可以共享一个UTXO,并在他们之间无信任地重新平衡资金,不仅增加了他们的隐私,还使比特币有更好的扩展机会。此外,CTV可以通过改进通道创建和赎回,以及哈希时间锁定合约(HTLCs)为闪电网络增压,从而提高比特币第二层协议的效率和流动性。
CTV是如何工作的? 在引擎盖下,CTV为比特币带来了一个新的opcode,这是对Bitcoin Script中可用操作集的新补充。
BIP119通过OP_NOP4向比特币添加了新的操作码OP_CHECKTEMPLATEVERIFY,通过软分叉实现协议的共识变化。
目前,编号的OP_NOP(OP_NOP1和OP_NOP4到OP_NOP10)在使用时被忽略,同时不会使交易无效;更值得注意的是,它们是预留操作码,可以利用它们来为协议添加新的操作码。然而,这对OP_NOP本身并不成立(没有数字),因为它是一个 “非操作 “操作码。
BIP119试图以OP_CHECKTEMPLATEVERIFY取代OP_NOP4,来承担验证作用。这个流程也被用于为协议增加OP_CHECKLOCKTIMEVERIFY和OP_CHECKSEQUENCEVERIFY,分别取代OP_NOP2和OP_NOP3。
OP_CHECKTEMPLATEVERIFY在运行时做三个检查。首先,自然是检查堆栈中是否有至少一个元素。如果有,它就会检查这个元素是否正好有32个字节–SHA-256哈希值的大小。如果堆栈上有一个项目,并且它有32个字节,那么CTV将检查它是否与当前输入索引处的事务的哈希值相匹配。
这一步–检查元素是否与哈希值匹配–正是执行的地方。在这里,程序正在验证传递给它的交易是否是合同(或契约)先前指定的 “可能的 “交易集的一部分–那些将获得批准的交易。这组交易将由用户在合同中事先定义。
尽管对于建立可以用CTV执行的合约来说不是必须的,Sapio还是一种专门为此目的设计开发中的编程语言。它抽象了低级别的编程细节,以方便建立比特币的智能合约,例如,组件–可重复使用的代码片断,以提高程序的可读性和可用性。
程序员首先用Sapio建立一个模板,指定一些条件,然后输出一个部分签名的比特币交易(PSBT)的列表,可以利用它来定义一个详尽的交易支出集–允许我们将交易中允许的输出集限制在一个小于所有可能输出集的集合。
CHECKTEMPLATEVERIFY通过约束大部分的数据,提前决定了所有可能的交易ID(TXID),从而对一个交易进行预承诺。这意味着,给定一个特定的UTXO和一个合同,你通常可以预先计算出所有的TXIDs。虽然是限制性的,但假设通过提前知道TXIDs,契约更容易被执行,因为要检查的交易范围受到了限制。
被操作码DefaultCheckTemplateVerifyHash分析的具体散列函数以串行方式散列交易的部分,从版本和锁定时间开始。接下来,如果交易不是SegWit交易,该函数会散列scriptSig散列,然后散列输入的数量、序列的散列和输出的数量。最后,该函数对输出的哈希值和输入索引进行哈希。
通过事先承诺(或确定)其中的大部分,不仅可以事先确定TXID,而且还可以在以后只设置其中的少数几个(可塑性强),并使验证更加有效,因为大量的字段已经被哈希化了。
BIP119的作者Jeremy Rubin告诉比特币杂志:“以特定方式排列字段的想法是,如果在未来的某个时间点,你在比特币中有OP_CAT这样的东西,你可能会在堆栈中操作这些字段,"。“按照你可能以编程方式改变它们的可能性的顺序,对它们有一些好处。”
“因此,部分想法是,nVersion是最不可能被改变的,输入索引是最可能被改变的,而其他一切都属于这个顺序的中间部分,“Rubin补充说。
我们的假设是,比特币开发者在编程时更有可能以编程的方式改变关于输出的信息,而不是输入的信息,因为一个契约试图限制一个币如何被花费。
因此,OP_CHECKTEMPLATEVERIFY所做的是检查该交易是否被允许。换句话说,它执行了用Sapio编程的契约所规定的限制。
但这种检查只发生在堆栈上的元素大小为32字节的情况下。如果不是,CTV将OP_NOP堆栈上的元素,这意味着它将不会执行失败,而是 “什么都不做”。
这种微妙的差别是为了适应未来在CTV之后的发展,例如,“CTV第二版 “在其中增加了一个标志字节–使该元素成为33字节。然后,由于CTV只检查32字节的元素,而不是用CTV来检查,该元素将被检查33字节的 “CTV第二版 “检查。而这是可能的,因为OP_NOP使脚本的评估得以继续。如果它失败了,评估就不会继续,因此这个元素就不会被 “CTV版本2 “检查。
“根据标准规则,带有33字节CTV的交易在这些变化下仍会被网络拒绝,但如果矿工将其放入区块中,则会有效,“Rubin解释说。“这确保了人们对它在未来被赋予特定含义的期望,阻止了不小心的使用。”
CTV将成为比特币的下一次升级? 比特币的升级过程以其有条不紊和谨慎的方式而闻名,这是网络生存的重要特征,也是确保每一个新加入的代码的正确性。因此,CTV是否可能很快被添加到比特币中,目前还很不清楚。
虽然不是一个新的建议–BIP是在2020年1月创建的–但著名的比特币开发者认为,需要围绕建议的变化进行更广泛的测试和讨论,特别是当它涉及到可能的优化和对替代方案的更详细考虑。
在撰写本文时,CTV将为比特币增加一套有限的新的可能性,因为它寻求在协议中实施一种低风险的契约形式。鲁宾告诉《比特币杂志》,我们的目标是为比特币提供新的功能,同时 “就对比特币验证的影响而言,很可能是我们做过的最简单的软分叉之一。”
“例如CLTV或CSV等升级,既需要一个软分叉来添加操作码,也需要一个软分叉来共识强化nLockTime和nSequence字段(上下文数据),而CTV的有效性只检查交易固有的属性,“Rubin补充说。
鲁宾还说,他觉得开发者社区在审查他的提案时,“有一点儿双重标准”。
“他对《比特币杂志》说:“CTV被要求达到的标准比我们以前做的任何事情都要高得多。“虽然我们应该一直寻求提高标准,“鲁宾澄清说,“但不应该不承认CTV已经达到或超过了以前分叉的测试和应用水平。”
本月早些时候,Spiral的比特币和闪电网络开发人员Matthew Corallo在推特说,“在比特币的历史上,没有任何时候可以提出把东西弄进共识……而不考虑替代方案。” Corallo声称,Rubin,以及那些从事和支持CTV的人,在过去的几年里,没有显示出 “一个更正式的方法,将其与替代方案进行比较”。
“强推CTV的感觉……几乎在所有方面都是错误的,“科拉罗补充。“与其说是合作工程,不如说是’我造了这个,我们来做吧',而忽略了任何反馈。”
Blockstream的研究总监Andrew Poelstra也有进一步实验和分析的愿望。当被问及CTV是否是比特币目前扩展功能以支持契约的最好机会时,他告诉《比特币杂志》,他 “建议不是”,并补充说,“CTV并不是在比特币中实现契约的唯一建议方式–它在安全性和通用性之间做了权衡,在任何一个方向都有空间。”
“这可能的一种方式是,CTV可能是实现’减法契约’的最有效方式,即用户限制大部分交易数据,而只留下一小部分自由,“Poelstra说。“同时,其他建议,如自省操作码可能最适合’加法契约',即大部分交易数据是自由的,只有少量的数据被限制。如果这是真的,而且社区需要更多的时间来探索,那么我们实际上会想要APO和CTV以及通用契约。”
APO,即SIGHASH_ANYPREVOUT,是另一个为比特币添加新功能的建议,在BIP118中指定。它的作者Christian Decker是Blockstream的研究员,专注于比特币的扩展解决方案,他告诉比特币杂志,他也认为APO和CTV是对比特币的 “补充而不是竞争 “的补充。
Posts
IPFS问题:动态链接
英文原文
翻译:DeepL,Google Translate 校对: 李林
内容可寻址性很酷,我们都喜欢它,但我们也都知道我们不能生活在一个没有可读和可记的名字的世界里。IPFS从一开始就提出了IPNS,即星际名称系统(这个名字确实非常酷)(或者也许是在IPFS的第一个想法之后的几个月,这将表明这个问题是事后才想到的)。
有人说IPNS的工作方式类似于Git头和分支(这可能是Juan Benet在最初几年大量重复的营销宣传的一部分,即IPFS是Torrents、Git和其他一些很酷的技术的混合)。然而,这仍然是一个遥远的承诺。在过去的几年里,IPNS一直是一种非常缓慢的、不被他们自己的开发者所推荐的、无法使用的处理内容的方式,基本上只是一个从公钥到对象哈希的指针。
建议使用域名和dnslink,这是告诉IPFS节点你拥有一个域名的方法,可以用来识别一个对象哈希值。这很有效,但它不是承诺的去中心化的奇迹,而且仍然只是一个指针。任何键值存储、文件系统的数据库都可以做指针。
我并不是说,像互联网上许多愚蠢的人那样,IPFS应该支持动态链接,这样我们就可以在它上面建立网络应用。不,我认为静态内容只需要静态链接就可以了,而需要动态的东西则继续使用其他互联网协议。
Posts
IPFS问题:低效
英文原文
翻译:DeepL,Google Translate 校对: 李林
想象一下,你有两个IPFS节点,在第一个节点上有你创建的独特内容。从第二个节点,你可以连接到第一个节点,一切看起来都很正常。然后你试图获取这些内容。几秒钟后,内容开始出现,进度条开始移动,这很慢,非常慢,做rsync会快20倍。
进度条停止了。你调查了一下,第二个节点没有再连接到第一个节点。为什么,如果那是我们试图获取的文件的唯一来源?这至今仍是个谜。你手动重新连接,进度条再次移动,停止了,你又被断开了。你没有重新连接,而是决定将第二个节点添加到第一个节点的 “Bootstrap “列表中。
我曾经试图在VPS上运行一个IPFS节点,并在S3上存储内容。有两个S3数据存储插件可用。在修复了其中一个的一些问题后,重新编译go-ipfs,弄清楚如何从IPFS配置文件中读取设置,创建一个init profile并再次重新编译,我得到了节点的运行。它成功了。我的想法是在该节点上托管一堆数据。数据将按需从S3获取,所以从任何IPFS节点或网关都可以廉价而快速地访问它。
IPFS开始每分钟对S3进行数百次调用–如果我没有在插件代码中插入一些日志语句,我是说在AWS的巨额账单到来之前,我不会知道这件事。很明显,这是参与DHT的一部分。调整一些设置后,我的节点按照我的意图变成了一个只听不看的东西,但我不能100%肯定它能作为一个有效的内容提供者工作,而且我永远不会知道,因为内存和CPU的使用率对我简陋的VPS来说太高了,我不得不把它关掉。