BIP300-Hashrate Escrows 算力托管_中文

作者:Paul Sztorc & CryptAxe
译者:Jack3.14
来源:https://github.com/bitcoin/BIPs/blob/master/BIP-0301.mediawiki
BIP: 300
Layer: Consensus (soft fork)
Title: Hashrate Escrows (Consensus layer)
Author: Paul Sztorc <truthcoin@gmail.com>
CryptAxe <cryptaxe@gmail.com>
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/BIPs/wiki/Comments:BIP-0300
Status: Draft
Type: Standards Track
Created: 2017–08–14
License: BSD-2-Clause
Post-History:
https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-May/014364.html
摘要
在BIP300中,txns不通过加密密钥签名。相反,随着时间的推移,它们由hashpower“签名”。就像一个大的多重签名,13150-of-26300,其中每个块都是一个新的“签名”。
BIP300强调缓慢、透明、可审计的交易,诚实的用户很容易做对,不诚实的用户很难滥用。BIP300的主要设计目标是分区 — — 如果用户愿意(或完全忽略BIP300),他们可以安全地忽略BIP300 txns。
查看本网站了解更多信息。
动机
正如里德·霍夫曼在2014年写道的那样:“侧链允许开发人员在不实际修改比特币核心代码的情况下为比特币世界添加特性和功能…因此,创新可以更快、更灵活和分布式的方式发生,而不会失去单一货币共同平台的协同作用。”
如今,Namecoin、Monero、ZCash和Sia等硬币提供了比特币使用者无法访问的功能 — — 除非出售他们的BTC以投资于竞争对手的货币单位。根据coinmarketcap.com,现在BTC协议之外的价值比其内部更大。根据cryptofees.info,BTC协议之外支付的txn费用是其内部的15倍。
比特币的软件改进依赖于开发者的共识 — — 如果一个好主意有一点点争议,BTC就会把它传递出去。开发很慢:我们现在平均每5年开发一个主要功能。
侧链允许竞争性的“仁慈独裁者”随时创建新的侧链。这些独裁者只对他们的用户负责,而且(至关重要的)他们受到保护,免受竞争独裁者的侵害。用户可以在这些不同的软件之间移动他们自己认为合适的BTC。
BTC可以复制每一种有用的技术,一旦它被发明出来;scamcoin失去了它们的正当性,变得过时了;社区可以支持创造力,知道Layer1受到保护,免受有害变化的影响。
规格说明
概述
BIP300允许六个新的区块链消息(这些具有共识意义):
- M1. 提出新的侧链
- M2. 确认字符提案
- M3. 提案包
- M4. 确认字符包
- M5. 存款 — — BTC从主链到侧链的转移
- M6. 取款 — — BTC从侧链到主链的转移
节点将这些消息组织到两个缓存中:
- D1. 侧链列表,跟踪256个哈希率托管(托管是侧链所在的插槽)。
- D2. 提款列表,跟踪提款捆绑包(离开侧链的 Coins )。
D1(侧链列表)
D1是活跃的侧链的列表。D1通过M1和M2更新。

D2(提款名单)
D2列出了提款尝试。如果这些尝试成功,他们将“从”一个锁定BIP300的UTXO向提款用户控制的新UTXO支付 coins 。每次尝试都会支付许多用户,因此我们将这些提款尝试称为“捆绑包”。
D2由M3、M4、M5和M6驱动。这些消息遵循以下原则:
- 捆绑包有一个规范的顺序(先到先得)。
- 从一个块到下一个块,每个“剩余块”字段减少1。
- 当“剩余块”达到零时,捆绑包被移除。
- 从一个块到下一个块,ACK中的值可以增加或减少,最多为1(参见M4)。
- 如果Bundle的“ACK”达到13150或更高,则它“成功”并且其对应的M6消息可以包含在一个块中。
- 如果Bundle的M6被支付,它也会被移除。
- 如果捆绑包不可能成功(13500-”ACK”>”Block Remaining”),则立即将其删除。

六个新的BIP300消息
首先,新的侧链是如何创建的?
它们首先被-Proposed/提出(使用M1),然后被-Acked/使用(使用M2)。这个过程类似于BIP9软分叉激活。
M1 — 提出侧链
M1是一个coinbase OP返回输出,包含以下内容:
1字节-OP_RETURN(0x6a)
4字节-消息头(0xD5E0C4AF)
N-byte-侧链的序列化
1字节nSidechain
4字节nVersion
x字节strKeyID
x字节strPrivate Key
x字节脚本PubKey
x字节标题
x字节描述
32字节hashID1
20字节hashID2
例子
M2 — 确认侧链请求
M2是一个coinbase OP返回输出,包含以下内容:
1字节-OP_RETURN(0x6a)
4字节-消息头(0xD6E1C5BF)
32字节-sha256D侧链序列化的哈希
注释
新的M1/M2验证规则是:
- 任何矿工都可以随时提出新的侧链(M1)。这个过程类似于BIP 9软分叉激活:网络必须看到格式正确的M1,然后在接下来的2016个区块的90%中“确认”侧链(M2)。
- BIP300只有256个侧链插槽。如果全部使用,则可以“覆盖”侧链。这需要更多的M2 ACK — — 以下26300个区块中的50%必须包含M2。覆盖的可能性不会改变BIP300的安全假设(因为我们已经假设侧链容易受到矿工的攻击,每13150个区块发生1次灾难)。
提取硬币注意事项
BIP300提款(“M6”)非常重要。
要使M6有效,它必须首先由一个M3“准备”,然后是13,150+M4。M3和M4大约是“捆绑包”。
什么是捆绑包?
侧链提款采用“Bundles。捆绑”的形式 — — 之所以命名,是因为它们将许多单独的提款请求“捆绑”到一个罕见的第1层事务中。
侧链全节点将提款请求聚合成一个大集合。侧链计算M6的样子,以支付所有这些提款请求。最后,侧链计算这个M6的哈希值。这个32字节的哈希标识Bundle。
这个32字节的哈希是矿工将在3–6个月内慢慢ACKing的,而不是M6本身(当然也不是任何侧链数据)。
捆绑包要么支付所有提款(通过M6),要么失败(并且不支付任何费用)。
捆绑哈希=M6的盲TxID
Bundle哈希是静态的,因为它被ACKed。不幸的是,M6 TxID将不断变化 — — 随着用户存入侧链,M6的输入将发生变化。
为了解决这个问题,我们做了一些概念上类似于AnyPrevOut(BIP 118)的事情。我们将“盲TxID”定义为对txn进行散列的一种方式,其中一些字节首先用零覆盖。这些是:第一个输入和第一个输出。通过前者,侧链可以接受存款,即使我们正在ack一个稍后从中支出的TxID。通过后者,我们可以强制将所有未提取的硬币返回给侧链(即使我们还不知道这将是多少硬币)。
M3 — 提案包 Bundle(s)
M3是一个coinbase OP返回输出,包含以下内容:
1字节-OP_RETURN(0x6a)
4字节-承诺标头(0xD45AA943)
32字节-Bundle哈希,用于填充新的D2条目
与M3相关的新验证规则是:
- 如果网络检测到格式正确的M3,它必须在下一个块中向D2添加一个条目。起始“剩余块”值为26,299。起始ACK计数为1。
- 每个块每个侧链只能包含一个M3。
一旦Bundle在D2中,我们如何给它足够的ACK来使其有效?
M4 — 确认包 Bundle(s)
M4是一个coinbase OP返回输出,包含以下内容:
1字节-OP_RETURN(0x6a)
4字节-承诺标头(0xD77D1776)
1字节-版本
n-byte-描述每个侧链的“上投票”捆绑选择的向量。
版本0x01每个侧链使用一个字节,适用于大多数情况。版本0x02每个侧链使用两个字节,适用于至少一个侧链同时进行超过256个不同的提款包的异常情况。其他有趣的版本是可能的:0x03可能会说“完全按照前一个块中的操作执行”(这可能总共消耗固定的6个字节,无论有多少侧链)。0x04可能会说“支持所有明显领先的人”(这也只需要6个字节),等等。
如果侧链没有挂起的包,则在创建和解析M4时跳过它。
赞成向量将把“abstain/弃权”编码为0xFF(或0xFFFF);它将把“alarm/警报”编码为0xFE(或0xFFFE)。否则,它只是指示列表中的哪个提款包是要“赞成”的。例如,如果有两个侧链,我们希望对侧链#1上的第7个包和侧链#2上的第4个包进行赞成,那么向量将是0x0704。
M4消息将无效(并使块无效),如果它尝试对一个不存在的Bundle进行投票(例如,尝试对侧链#2上的第7个Bundle进行投票,而侧链#2只有三个Bundle)。如果根本没有Bundles(没有人试图从任何侧链中取款),那么存在于coinbase中的任何M4消息都将无效。如果M4不存在于一个块中,那么它被视为“abstain/弃权”。
ACKed提款将为其确认字符字段获得一分。因此,任何Bundle的确认字符计数器只能更改(-1,0,+1)。
在侧链组中,对一个Bundle(”+1")投赞成票要求您对该组中的所有其他Bundle投反对票。但是,最小确认字符计数器为零。虽然一次只能对一个Bundle投赞成票;整个组可以同时保持不变(“abstain/弃权”),也可以一次全部投反对票(“alarm/警报”)。
最后,我们描述了存款和取款。
M5-将BTC存入侧链
M5和M6都是常规比特币txns。当它们选择一种特殊的BIP300 CTIP UTXO作为其输入时,它们与常规txns(non-M5 non-M6 txns)区分开来(参见D1)。
所有侧链的 Coins 都存储在一个UTXO中,称为“CTIP”。每次存款或取款时,CTIP都会发生变化。每次存款/取款都会选择侧链CTIP,并生成一个新的CTIP。(存款/取款永远不会导致UTXO膨胀。)当前的CTIP缓存在D1中(上图)。
如果从CTIP到CTIP交易中的 Coins 数量上升,(即,如果用户正在添加 Coins ),则txn被视为存款(M5)。否则它被视为提款(M6)。见这里。
就主链共识而言,侧链的所有存款始终有效。
M6 — 从侧链中提取BTC
最后,我们来到了关键问题:用户可以从侧链中取出他们的钱。
首先,M6必须遵守与M5相同的CTIP规则(见上文)。
其次,如果M6的盲TxID与“批准的”Bundle哈希(即确认字符分数为13150+的哈希)匹配,则M6仅对包含在区块中有效。换句话说,在3个多月(13150块)仪式之后,M6只能包含在一个区块中。
第三,M6必须满足两个会计准则,以免无效:
- “将零钱返还给托管” — — 第一个输出TxOut0必须返还给侧链的BIP300脚本。换句话说,所有未提取的硬币都必须返还给侧链。
- “没有传统的txn费用” — — 对于这个txn,所有输入的总和必须等于所有输出的总和。没有传统的tx费用是可能的。(当然,矿工仍然有txn费用:它是通过捆绑包中的OP TRUE输出支付的。)我们希望提款者在捆绑包“内部”设置费用,并像其他事情一样在3个月内确认字符。
向后兼容
作为软分叉,旧软件将继续运行而无需修改。未升级的节点将看到许多他们不理解的现象 — — 带有non-txn 数据的coinbase txn,任何人都可以使用的UTXO中的价值,一次累积数月,然后随机金额以单次、不频繁的爆发离开这些UTXO。然而,这些现象不会影响他们,也不会影响他们收到的钱的有效性。
(作为一个很好的奖励,请注意侧链本身继承了对硬分叉的抵抗。保证所有不同侧链节点始终报告相同Bundle的唯一方法是通过自身的软分叉升级侧链。)
部署
此BIP将通过UASF-style 的块高度激活进行部署。块高度TBD。
参考实施
见:https://github.com/drivechain-project/mainchain
另外,有关兴趣,请参阅此处的示例侧链:https://github.com/drivechain-project/sidechains/tree/testchain
参考文献
https://github.com/drivechain-project/mainchain https://github.com/drivechain-project/sidechains/tree/testchain看http://www.drivechain.info/literature/index.html
贡献者
感谢所有为讨论做出贡献的人,特别是:ZmnSCPxj, Adam Back, Peter Todd, Dan Anderson, Sergio Demian Lerner, Chris Stewart, Matt Corallo, Sjors Provoost, Tier Nolan, Erik Aronesty, Jason Dreyzehner, Joe Miyamoto, Ben Goldhaber.
版权
该BIP根据BSD2条款许可证获得许可。
关于 LayerTwo Labs
LayerTwo Labs 是一家比特币软件开发公司。我们技术堆栈的核心是 Drivechain(BIP300 和 BIP301),它在激活后赋予比特币支持 sidechains 的能力。这些 sidechains 能够为比特币提供无限的用例和功能,同时为矿工提供更多的收入。
更多频道请访问:
Website | Twitter (Global) | Twitter (Asia) | Telegram (Global) | Telegram (Asia) | Discord | Reddit | YouTube | LinkedIn | TikTok | Instagram | Facebook | GitHub | Medium (Asia)