MasterCoin vs. 1.0 (第一版完整说明书)
作者:JR Willet 译者:Really
摘要:我认为现存的比特币网络可以作为一个底层协议使用,在这个协议之上可以构建采用新的规则的新的货币而不用改变比特币协议的基础。
在这个文件中,我会进一步描述这个新协议层:
1、 它将修补被广泛认可的比特币的接纳的两个最大的障碍:不稳定性和不安全性。
2、 它将在财务上使整个比特币社区获益,包括那些不使用这个新协议的人。
3、 它可以为在新协议层上开发软件的个人或企业提供初始资金,并维持资金来支付对软件的维护费用。
4、 它会为早期的参与者提供丰厚的奖励,奖励的多寡取决于该新协议层的成功程度。
假定我们的主张是建立在以下假定基础之上:
山寨币与比特币在财务上的竞争,向世界传递了使人困惑的信息,并稀释了我们的付出。这阻碍了接纳比特币的势头,也阻碍了山寨币的接纳势头,不管其规则多么严密。
基于比特币协议的新协议会增加比特币的价值,增强我们对世界的声音,集中我们的精力,同时允许个人和团队去尝试新的规则下的新货币。任何成功的新尝试都会加强底层比特币协议的价值,让比特币更成功。
比特币社区的共识和广泛采纳的意见是不需要增加新的协议层,因而不需要对比特币协议做任何改变。
微小的比特币交易可以被编码进区块链,用来支持和代表高一级协议层的交易。
协议层可以支持自己拥有的软件的发展,自己涌现出来并利用一个可靠的实体去持有资本并雇佣开发者。
可以创造工具让终端用户创造通货协议层,该协议层拥有稳定的价值,与外部的货币或商品挂钩。通过这些货币用户可以持有价值稳定的与美元、欧元、黄金、石油等等挂钩的虚拟货币。
用户可以通过简单的规则和去中心的交易平台去交换彼此持有的新货币。
形象化这种协议可以通过下图展示,箭头代表用户在不同货币之间的交易。
注意:所有的交易都被记录在比特币的区块链里面,但是更高层的协议赋予一些交易额外的意义。
文档历史Version 0.5 发布于2012年6月1日
Version 0.7发布于2013年7月29日
早期的该文档的版本可以通过下面链接找到
https://sites.google.com/site/2ndbtcwpaper/MasterCoin的设计MasterCoin协议层在已存在的比特币协议层和用户定义的货币协议层之间,它准备作为任何人可以构建的私人货币的基础。MasterCoin将含有通用的工具软件,该软件可以允许任何人设计和发布基于其自有规则的私人货币,而不用自己开发软件。
Exodus 公匙地址
也许你听说过启动比特币协议的“创世块”,MasterCoin有一个类似的在区块链的起点,被称为Exodus 公匙地址。第一个MasterCoin将会通过这个地址发售。Exodus 公匙地址是:
1EXoDusjGwvnjZUyKkxZ4UHEf77z6A5S4P
(在往该地址发送比特币前请先阅读下面的避免无效交易的注意事项一节)
初始的 MasterCoins的分配实质上等于用来支付开发者编写软件发展拓展协议层的资金的募集。资金的募集方式很简单,将按以下规则执行:
1、任何人在2013年8月31日前发送比特币到 Exodus地址将拥有100倍的比特币发送量的 MasterCoins。比如:如果你在2013年8月31日前发送了100个比特币到Exodus地址,我的比特币地址将在2013年8月31日后拥有10000 个MasterCoins。
2、越早的购买者将获得额外的MasterCoins的奖励。为了鼓励购买热情,如果购买者在截止日期前一周购买将获得额外10%的 MasterCoins奖励;在截止日期前两周购买将获得额外20%的 MasterCoins奖励,以此类推。因此,如果我在截止日期前1.5周发送了100比特币到 exodus地址,规则将认为我的比特币地址拥有11500 MasterCoins。(10000+15%奖励)
3、在2013年9月1日和之后尝试发送比特币到 Exodus地址(由区块链记录的交易),将不被确认为MasterCoin购买。
注意:任何购买MasterCoins的人将会收到同样数目的测试用 MasterCoins,在它们可以在 MasterCoin协议层上使用前,它将用来测试 MasterCoins的新特性。
刚开始,只有有效的MasterCoin交易将被认为是“simple transfer”(本文后面会有定义),进过充分测试后,本文所描述的额外的特性在未来(特殊的提前宣布的里程碑时刻)同样是有效的。
MasterCoins奖励每10个MasterCoins售出的同时,额外的MasterCoins奖励将被创造出来。它将在接下来的数年里缓慢的被发送到 Exodus地址。这些被推迟发布的MasterCoins将用来保证我们对增加MasterCoins 的价值保持足够的动力,以此来完善用户对MasterCoin的需求。额外的奖励的结构设置跟比特币的发行机制类似,初始销售后的第一年将发布50%的额外奖励;第二年一共75%;第三年一共87.5%,以此类推。
额外奖励的MasterCoins在某年占全部奖励的数量百分比=1-0.5y
y:MasterCoins首次发布后的年数
隐藏MasterCoin协议层的数据在比特币区块链中
比特币拥有一些少为人知的高级特性(比如脚本处理),很多人猜想这在未来可以用来执行有想象力的新玩法。MasterCoin没有使用任何这种高级特性,因为支持它们在未来是没有担保的,MasterCoin本来也不需要它们。
MasterCoin交易本来就是一系列的比特币地址之间的比特币交易,它符合以下模式:
1、对另一个比特币地址(被称为相关地址)的一比相关的任意数量的比特币支付,就像一个人被支付了一比MasterCoins
2、一比或更多的任意数量的对一个伪造的比特币地址的支付数据,这就是该协议层使用的数据,比如一个地址被支付的MasterCoins的数量。
3、一比任意数量的对Exodus的被标识的支付,将被认为这笔支付是一次MasterCoin交易。
这些支付有可能是一次一个或者多个同时发生或者任何次序(通过比特币的“sendmany”功能)。(即使我们发送的顺序是特殊的,也没有办法强迫矿工记账时保持这个顺序)唯一的要求是这些支付之间不能有长时间的缺口(不能超过6个区块链的时间),这些支付要能与其他的采用6个区块链的间隔时间的或“sendmany”功能的MasterCoin交易相区别。
对交易数据包排序由于这些数据包的存储是无序的,必须考虑如何区分这些交易并把数据包进行适当的排序。
为了对交易数据包排序,每20字节的有效载荷[译者注:在因特网上,“有效载荷”指的是:在一个数据包或者其它传输单元中运载的基本必要数据。有效载荷不包括使得数据包到达目的地所要求的“管理的”数据。记录那些构成有效载荷的东西依赖的观点。通信层需要一些管理数据进行这个工作,有时有效载荷认为包括了这个层处理中的管理数据部分。然而,在多数的应用中,有效载荷是那些传送到目的地终端用户手上的“位”。]开头为1字节的顺序号,这个顺序号随着数据包的增加而增加。
为了区分出从参考地址流出的数据包,数据包的顺序数从n+1开始,新增的数据包接着从n+2,n+3等等依次编号直到所有的顺序号被使用除了n-1。n是参考数据包的顺序号。
用一个例子来展示这是如何执行的,假设一比MasterCoin的交易有两个数据包,如果参考地址正好有62这个顺序号,那么第一个数据包的顺序号是63,第二个数据包的顺序号是64。注意顺序号255之后是0。
理论上一次MasterCoin交易能存储的数据的大小不能超过254(数据支付)*19字节,也就是4826字节,但是我们认为最常见的交易只需要1或2的数据支付。所有的数字采用big-endian的方法保存(最重要的数字优先)
[译者注:Big-endian是一种大值的一端(序列中更典型值)存在前面(在最小的存储地址)的顺序。Little-endian是一种小值的一端(序列中较不典型的值)存储在前的顺序。比如,在Big-endian的电脑中,需要两个字节把十六位数4F52当作4F52存在存储器中(如果4F存在存储地址1000中,比如说,52将存在1001中)。在little-endian系统里,将被存为524F(52存在存储地址1000中,比如说,4F将存在1001中)]
避免无效交易的注意事项当你使用比特币进行一次支付的时候,并不是所有的钱包软件都可以让你通过自己掌控的地址发送。MasterCoin的交易必须来自持有MasterCoins的地址。如果一个钱包的比特币存储在多个地址里,必须先把钱包里的比特币都发到一个地址上,再用这个地址把比特币发送到Exodus地址形成初始的MasterCoins。这样所有的与MasterCoins相关的比特币都是从那个地址发送出来的。不能实现上述功能的钱包比如在线钱包,将不能用来购买MasterCoin。因此,尝试用在线钱包来购买MasterCoin将失去这些MasterCoins。
所有的交易在数量上要大于“dust”的临界值,而且需要给予适当的费用让矿工及时将交易记录加入区块链中。如果不执行以上建议,这样的MasterCoin交易将是畸形的,因此也是无效的。
MasterCoins的转移当你将1个 MasterCoin转移到另外一个地址的时候,对应一个单独的数据支付只需要16字节的数据。存储的数据如下:
1、交易类型=0,简单转移(32位无符号整数,4字节)
2、货币标识符=1,MasterCoin(32位无符号整数,4字节)
3、转账金额= 100,000,000(1.00000000 MasterCoins)(64位无符号整数,8字节)
注意在存储数据前转账金额是乘以了100,000,000的,这允许MasterCoins可以与比特币有同样的转移精度(精确到小数点后八位)。前面提及的参考支付决定了MasterCoins的接收地址。
如果转账来自于被标示为“储蓄”的地址,这里将会有一个时间窗口,在这个时间窗口内的转账可以被取消。超过这个时间窗口,MasterCoin的交易是不可逆的。
将一个地址打上“储蓄”标签当你将储蓄钱包备份在云端,如果有人成功黑进了你的钱包,然后转移了你的货币,你可以取消这些在被盗后30天内发生的转账。做到这些对应一个单独的数据支付只需要8字节的数据。存储的数据如下:
1、交易类型=10,标示储蓄钱包(32位无符号整数,4字节)
2、可逆转周期= 2,592,000秒(30天)(32位无符号整数,4字节)
最大的可逆转周期是365天(1,892,160,000 秒)以避免将一个地址永久标识成一直可逆转的储蓄地址。如果一个地址被标识成储蓄地址,可逆转规则不止适用于存储于该地址的MasterCoins,还适用于存储于该地址的基于MasterCoin协议层上的子货币。
当使用标示储蓄地址功能时,相关的支付需要指向一个用来为可能发生的欺诈性交易做担保的“担保者”地址。“担保者”地址最好是来自未使用的离线钱包或纸钱包。
当欺诈交易被逆转,任何支出的资金都将被转移到担保者地址而不是相关联的储蓄地址。同样任何存留在关联地址的资金也将被转移至担保者地址。被标识的储蓄钱包的地址只能进行普通转账(交易类型=0)。其他类型的交易都不具有可逆转的时间窗口。
标示被盗的储蓄地址当你发现你标示的储蓄地址已经被盗,你想将已经发生的交易逆转并将地址其余的钱都转移到担保地址。做到这些对应一个单独的数据支付只需要4字节的数据。存储的数据如下:
1、交易类型=11,标示被盗的储蓄地址(32位无符号整数,4字节)
这个交易必须来自于担保地址,涉及的交易必须属于被盗的储蓄地址。被盗的储蓄地址的MasterCoins以及基于MasterCoin的子货币,已经发生交易的资金以及存留于该地址的资金都将被发送到担保地址。
储蓄/担保模式的优点储蓄/担保模式意在让用户对储蓄地址的意外丢失(比如备份多个钱包,包括在云端的)做好足够的安全措施,尤其需要加强担保地址的防盗。因此采取了合理的预防措施,如果储蓄地址被黑或担保地址搞丢了或被销毁了,这些币依然可以找回。
这种模式可以帮助财产的传承。你可以把储蓄地址的私匙给你的财产继承人,但是自己保留担保地址的私匙。如果你死了,你的继承人可以将储蓄地址的资金转出(他们需要等到可逆转周期结束),但是当你活着的时候他们无法盗取你的资金,因为你是担保地址私匙的唯一拥有者,如果继承人尝试盗取资金,你可以将该交易逆转。
任何人应该明白在接受MasterCoins以及基于MasterCoin协议的子货币支付的时候,在交易前,应该先检查该比支付是否是不可逆的。
出售MasterCoins获取Bitcoins如果你想出售1.5MasterCoins换取1000 Bitcoins,做到这些对应两个数据支付,需要33字节的数据。
1. 交易类型=20,货币交易获取比特币(32位无符号整数,4字节)
2.出售的货币的标识=1,MasterCoin(32位无符号整数,4字节)
3.出售的货币的数量= 150,000,000,1.5 MasterCoin(64位无符号整数,8字节)
4.想获取的Bitcoin的数量= 100,000,000,000,1000 Bitcoins(64位无符号整数,8字节)
5.时间限制= 10,订约方接受这些条款后付款的时限(10个区块的时间)(8位无符号整数,1字节)
6.最低的比特币交易费用=10,000,000,需要买方支付一个多达0.1BTC的交易费给矿工,以便区分虚假买家(64位无符号整数,8字节)
出售MasterCoins获取其他基于MasterCoin协议的子货币
你想发布一个出售2.5MasterCoins获取50GoldCoins的交易,我们将给GoldCoins 标识符3。做到这些对应两个数据支付,需要28字节的数据。
1个GoldCoin代表1盎司的黄金,GoldCoin是基于MasterCoin协议的子货币,详情请见后文。
1、 交易类型=21,出售MasterCoins获取其他基于MasterCoin协议的子货币(32位无符号整数,4字节)
2、 出售的货币的标识=1,MasterCoin(32位无符号整数,4字节)
3、 出售的货币的数量= 250,000,000,2.5 MasterCoins(64位无符号整数,8字节)
4、 获取的货币的标识=3,GoldCoin(32位无符号整数,4字节)
5、 获取的货币的数量= 5,000,000,000,50 GoldCoins(64位无符号整数,8字节)
改变已发布的交易你决定改变已发布的出售货币的数量或改变售价,只需要重新发布新的交易细节,在旧的交易成交并记录进区块链前,旧的交易自动升级成新的交易。
如果你想取消已发布的交易,只需要重新发布交易,将交易货币的数量修改为0即可。
购买待售的货币你发现了上述的一个交易,你想接受这个交易。做到这些对应一个数据支付,需要16字节的数据。
1、交易类型=22,接受发布的货币交易(32位无符号整数,4字节)
2、购买的货币的标识=1,MasterCoin(32位无符号整数,4字节)
3、购买的货币的数量=130,000,000,1.3MasterCoins(64位无符号整数,8字节)(不能超出该交易售出的货币数额,如果超出了意味着买家购买该交易的所有货币)
使用的地址应该指向你所接纳的卖家的地址,用来区分你接纳的是谁发布的交易。
如果你打算用比特币购买,你所有的开支金额应包含最小的手续费用的需要。你需要在交易期待时间限制前,发送适当的金额的比特币完成购买。注意你需要从你发起购买的地址发送比特币,发送多少数量的比特币就购买对应多少数量待售货币。
如果你使用MasterCoin或者基于MasterCoin协议的子货币比如GoldCoin购买该发售货币,假设你是第一个接受被区块链记录该交易的人,当你接受这个交易时,购买就完成了。发送多少数量的MasterCoin或GoldCoin就购买对应多少数量待售货币。
当售出一部分货币后,剩下的货币仍然按同样的条款销售。
注册数据流你决定开始在区块链中发布黄金的价格。你注册的数据流由于使用以null结尾的字符串含有数量变化的字节数。做到这些对应3个数据支付,需要57字节的数据。
1、交易类型=30,注册数据流(32位无符号整数,4字节)
2、依托的货币的标识=1,MasterCoin(32位无符号整数,4字节)(意味着发布的黄金价格将用MasterCoin作为计量单位)
3、类别=“商品”(12字节)
4、子类别=“金属”(7字节)
5、标签=“黄金” (5字节) (如果在子类别注册第二个“黄金”,它将被显示成“黄金-2”)
6、说明书/备注=“tinyurl.com/kwejgoig”(22字节) (说明书链接越短越好,节约区块链的空间)
7、显示乘数 = 10,000 (如果播报发布是0.00150000, 那么一盎司黄金的价格是 15.0000 MasterCoins. (32位无符号整数,4字节)
涉及的支付必须来自于发布数据的比特币地址。只有在约定的某一天来自于那个地址的的第一笔支付将被视为播报数据。
每一个数据流将拥有一个独一无二的标识符,这取决于数据流被注册的顺序。比如,如果你注册的数据流是第三个被注册的,你的数据流的标识符就是3。
由于任何人可以廉价的注册数据流,并同时创造出我们可以使用的类别和子类别,因此这将会带来很多垃圾数据流。任何程序员在编写代码展示数据流分类时应该注意到哪些数据流是被经常使用的,并按照使用频率对这些类别和子类别降位排序,将没被使用的数据流排在列表的最底部。
如果你想改变你的数据流的说明书\备注,只需要用原来的地址、原来的类别、子类别和标签重新注册数据流。当你重新注册的时候,你可以通过选择一个不同的地址用来做相关支付,来改变播报地址或改变显示乘数。(比如,你的播报地址被盗了)
开出赌约你想用USDCoins(基于MasterCoin的子货币,1USDCoin等于1美元)来赌200美元,黄金的价格在接下来得30天内不会上涨超过20 MasterCoins每盎司,赔率2:1。举个例子,我们将给USDCoin赋予货币标识符5。创造这个赌约对应2个数据支付,需要36字节的数据。
1. 交易类型=40,创建赌约 (32位无符号整数,4字节)
2. 赌注的货币的标识符= 5,USDCoin (32位无符号整数,4字节)
3. 数据流的标识符=3 ,黄金价格的数据流 (32位无符号整数,4字节)
4. 赌约类型=35, “在约定的时刻或之前不高于” (详见下表) (16位无符号整数,2字节)
5. 赌约限值=200,000 (0.00200000 BTC,等于20 MasterCoins每盎司) (32位无符号整数,4字节)
6 天数期限=30 (16位无符号整数,2字节)
7. 下赌注额=20,000,000,000 (200.00000000 USDCoins) (64位无符号整数,8字节)
8. 陪赌注额=10,000,000,000 (100.00000000 USDCoins) (64位无符号整数,8字节)
意思是用200美元的赌100美元的利润,赔率是2:1.不能修改赌约,你只有取消原赌约,发布新赌约。取消原赌约,你只需要在原有赌约上修改下赌注额为0,然后重新发布即可。
赌约类型表接受赌约 当你发现一个赌约你打算接受,你只需要发布相反的采用相同的赔率的赌约,MasterCoin协议层会自动匹配两张赌约。(意思是,任何人解析MasterCoin数据都会将这两张赌约视为已经互相接受赌约)下面是接受上面例子的赌约的样子,该赌约已经发布5天,还有25天的时间。
1. 交易类型=40,创建赌约 (32位无符号整数,4字节)
2. 赌注的货币的标识符=5 ,USDCoin (32位无符号整数,4字节)
3. 数据流的标识符=3 ,黄金价格的数据流 (32位无符号整数,4字节)
4. 赌约类型=34, “在约定的时刻或之前高于” (详见上表) (16位无符号整数,2字节)
5. 赌约限值=200,000 (0.00200000 BTC,等于20 MasterCoins每盎司) (32位无符号整数,4字节)
6.天数期限=25 (16位无符号整数,2字节)
7. 下赌注额=5,000,000,000 (50.00000000 USDCoins) (64位无符号整数,8字节)
8. 陪赌注额=10,000,000,000 (100.00000000 USDCoins) (64位无符号整数,8字节)
注意,因为赔率匹配(2:1 vs. 1:2),这个赌约金额只能匹配前面赌约的一半。这个赌约只出50美元,所以如果它赢的话只会赢100美元而不是所有200美元。一旦这两张赌约匹配,第一张赌约仍然还有100美元来与其他某个人的50美元对赌。一旦GoldCoins达到20MasterCoins每盎司的价格或者赌约期限到期,赢家将获得99.5%的赌注,余下的0.5%归于该数据流的创建者。
用户自定义货币MasterCoin的最重要的特性在于内置支持用户基于已经存在的MasterCoins创建自己的货币。为了演示用户自定义货币如何运转,我们使用“GoldCoins”作为例子,它被用来追踪一盎司黄金的价值,它同样可以像MasterCoin一样被存储、转移、购买和售出。
稳定性概念当对GoldCoins的需求激增和暴跌的时候,我们如何将GoldCoins的价值与黄金挂钩?GoldCoins的价格取决于其自身的供给和需求。由于我们不能控制GoldCoins的需求,因此我们要控制其供给,完成这个的关键是通过持有MasterCoins的代管基金,如下图所示。
这个代管基金运转起来就像是电力网上的电池,当存在过剩能量时进行充电,当能量不足时进行放电。当市场上的GoldCoins太少(GoldCoins价格过高),代管基金卖出新的GoldCoins,买进MasterCoins,就像电池充电。当市场上有过多的GoldCoins(GoldCoins价格过低),代管基金买入过多的GoldCoins,卖出MasterCoins,就像电池放电。采用上述方法通过GoldCoins来锚定黄金价值。
创造新货币你想通过我们定义的黄金数据流来创建一个如前文所述的GoldCoin货币。做这个由于使用以null结尾的字符串含有数量变化的字节数。做到这些对应2个数据支付,需要22字节的数据。
1. 交易类型 = 100 ,创造基于Mastercoin协议的子货币(32位无符号整数,4字节)
2. 数据流的标识符 = 3 ,黄金价格的数据流 (32位无符号整数,4字节)
3. 代管基金延期 = 4 ,4 天 (看下文) (8位无符号整数,1字节)
4. 代管基金激进度 = 1,000,000 ,1% (看下文) (32位无符号整数,4字节)
5. 货币名称= “GoldCoin” (9 字节)
在数据流模型中,货币被按照它们的创造顺序给予了货币标识符。Bitcoin的标识符为0,MasterCoin的标识符为1,因此如果GoldCoin是基于MasterCoin协议的第一个子货币,那么GoldCoin货币标识符将会是3。
代管基金持有的货币是数据流模型所支持的母货币。在这个例子中,代管基金持有的是MasterCoins,但是也可以是基于MasterCoins协议的任何子货币。比如,代管基金可以持有GoldCoin来支持用GoldCoin作为母货币的新的数据流支持的子货币。
代管基金延期4天的意思是,如果GoldCoins超过4天维持在过高或者过低的位置,代管基金将采取行动。
当GoldCoins的价格背离其锚定物黄金的价值时,代管基金将采取上文提及的行动来纠正GoldCoins的价格,代管基金激进度决定这种纠正行为的激进程度。如果代管基金激进度为0,那么它将不会采取任何行动;如果代管基金激进度为100%,它将尽全力纠正价格背离。
(买光所有在目标价以上出售的GoldCoin,或者卖出新GoldCoins在目标价以下的每一个买家)
[译者注:作者这里搞反了,当GoldCoin价格严重高于目标价时,代管基金应该卖出GoldCoin平抑价格;当GoldCoin价格严重低于目标价时,代管基金应该买入GoldCoin直到推升其价格到目标价格]
上例中代管基金激进度为1%,意味着代管基金的第一次行动将纠正1%的错误。如果第二条这个错误仍然沿着原来的方向变化,代管基金将会纠正2%的错误,第三条3%,直到达到100%或者错误改变方向。一旦错误改变方向,代管基金完成了其任务,重新从0开始计数。
不健康的代管基金
如果MasterCoins的价格暴跌95%,而代管基金持有的资产只有所有GoldCoins锚定物价值的5%怎么办?用电池来对比就是,代管基金现在电量不够,没有足够的能力干预市场价格。
MasterCoin协议解决这个问题的方法是相应调整代管基金的激进度。如上文的GoldCoins的例子,激进度将乘以5%变成0.05%,意味着调整将会有更低的量级,将需要更长的时间达到100%的激进度。
注意,代管基金持有的货币越多并不表示它将有更高的激进度。比如GoldCoins代管基金持有2倍的所有GoldCoins的价值,但是其激进度仍然为1%