网赚论坛

 找回密码
 免费注册
查看: 334|回复: 0
打印 上一主题 下一主题

BitcoinX—彩色币 白皮书(更新版)

[复制链接]

16

主题

16

帖子

64

积分

Ⅰ级财主

Rank: 1

积分
64
跳转到指定楼层
楼主
发表于 2017-10-20 23:18:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
作者:阳丹•阿茜娅(Yoni Assia) 维塔赖克•布特林( Vitalik Buterin )
洛尔•哈基姆(Leor Hakim)美尼•罗森菲尔德(Meni Rosenfeld)

翻译:Really

摘要

比特币是世界上第一个去中性化的数字货币,用加密令牌可以轻松实现存储和转移,用一个点对点的网络承载信息,对同步数据进行散列处理来防止双重支付,和强有力的脚本处理系统来判别令牌的所有权。不断成长的技术和商业基础支持着比特币的发展。

比特币被设计成一个中性的交换媒介,它是可替代的。尽管如此,通过仔细跟踪一些特定比特币的来龙去脉,可以将它们与其他的比特币区分开来,这些特定比特币就叫作彩色币。它们具有一些发行机构或公共协议所支撑的特殊属性,从而具有与比特币面值无关的价值。彩色币可以用作替代货币、商品证书、智能财产以及其他金融工具,如股票和债券等。

彩色币本身就是比特币,存储和转移不需要第三方,可以利用已经存在的比特币的基础,因此彩色币可以为现实世界中难以通过传统方法去中心化的事物铺平道路。本文将要讨论彩色币的实现细则及他们的用途。

背景

2009年中本聪创造的比特币的出现,从根本上扩大了密码学的使用范围。在比特币之前,任何一种没有中央权威的在线数字资产总是要面临一个根本性的棘手问题:双重支付的威胁。如果数字资产只是由0和1组成的文件,理论上,如何阻止任何人复制成百上千的那个文件以此来增加他自己的财富呢?在中央集权下,这个问题很简单,中央权威可以轻松追踪谁持有多少数量的数字资产。尽管如此,中央集权下一样问题重重:中央服务器容易被侵入,由于监管压力关闭,甚至扩大自己的特权来损害社区利益而图利自己。戴伟、尼克•萨博分别在1998年和2005年进行了数字资产的失败的尝试,以及亚当•贝克的哈希现金(hashcash)。比特币创造了历史,人们第一次可以创建了一个功能强大的可行的去中心化解决方案:这个解决方案在全世界迅速流行并迅速获得主流社会的认同。

由于比特币的完全数字化和去中心化设计,比特币相对现存的支付系统有一些优点。它的交易不可逆转为系统提供了高度的安全性,让商人在高风险的产业相当地精简成本。由于比特币没有中央权威,这让它在“财务审查制度”(比如2011年银行和信用卡公司对维基解密实行的财务封锁)前无懈可击。由于封锁导致维基解密通过传统的财务系统获得的捐助减少了95%,比特币作为一个完整的通道仍然让维基解密获得了大量的捐赠。比特币的技术上的易用性允许全世界的创业家以0启动成本及数周的开发时间就可以创立预测市场、证书服务、博彩网站、网站的付费门槛以及其他很多类型的商业。最后,最有趣的是,比特币交易的公开性在某种程度上允许商业运营和非盈利组织的彻底透明,这以其他任何方式均做不到。当然实际这个领域并没有被完全开发,目前采用这种系统的一个早期的例子被现实中实践的是“可证明的公平的赌博”系统,比如在线博彩网站“中本聪骰子”,它允许用户进行密码验证网站没有在赌博上作弊。基于以上优点,自然的问题是:对其他应用也采用同样的功能是否可能?

答案是肯定的。比特币背后根本的创新:用密码学的工作量证明机制来维护分布式数据库的安全,不止对中本聪所设想的这个总量有限的货币有益。完全一样的技术可以用在维护公司股权的所有权,“智能资产”,竞争币,银行存款以及其他方面。可以用数字资产代表的以及具有竞争性的任何东西(意味着在某一时刻只能有一人拥有它)用比特币区块链来代表潜在是公平的。仅管如此,比特币默认并不包含这些功能。想达到任何上诉的一种功能,我们需要另外一个协议。BitcoinX正好打算实现这些功能。

概述

设想是将我们熟知的比特币开发成两个单独的协议层,这就是,底层基于密码学技术的交易网络,和上层的我们称为彩色币的独特工具的发行网络的设计。

如果我们能在比特币生态系统内发布许多独特的工具,这里是潜在的使用案例:
◆公司可能采用彩色币发行股份,利用比特币的基础设施让人们持有公司股份,交易股份,甚至基于比特币区块链进行投票和分红。
◆智能资产 假设这里有一个汽车租赁公司,公司可以用彩色币代表每一辆汽车,然后只有当汽车接收到当时拥有彩色币的人利用其私钥进行签署的信息后才能启动汽车。然后可以发布一个智能手机应用,任何人可以用它来广播用他所有的私钥签署过的信息,以及在交易平台上出售自己的彩色币。任何人可以去购买彩色币,把这个手机应用当成汽车钥匙来使用,随意使用这辆汽车,闲暇后再次售出这些彩色币。(译注:汽车产权智能化为彩色币的所有权)
◆本地社区可能想创建自己的货币,用比特币基础设施来保证储备资金的安全。
◆企业可以创建企业货币,比如航空里程的奖励点数甚至是普通的优惠券。
◆发行者可能想发布彩色币来代表储蓄,允许人们进行交易,比如“币邮-美元(Bitstamp-USD)币”或者是某些黄金存储公司发行的“金币”。
◆分布式管理数字收藏品的所有权,比如原创艺术品。就像今天艺术品收藏者买卖价值数百万美元的原创油画作品一样,彩色币允许我们同样的买卖纯数字艺术品,比如歌曲、电影、电子书和软件,同样利用彩色币在比特币区块链上保存这些创作的所有权。
◆利用彩色币来进行交易和管理访问和订阅服务。比如,博物馆、地铁或像Netflix一样的在线服务可以发布基于彩色币的智能手机应用软件来提供人们的门票的所有权的数字签名,来保证这些门票同时是可转移的、纯数字的和安全的不可复制的。

创世交易

为了发行新的彩色币,必须通过创世交易来对新币染色。彩色币的创世交易必须满足特定的输入和输出规则。


输入


创世交易的输入需要考虑以下两点:


  • 不能重新发行的染色 这种情况下输入是不相关的,一旦交易发生,发行者再无任何权力,所有的事情是交易本身(特别是交易的输出)可重新发行的染色 这种情况下发行者需选择一个安全地址作为“发行地址”,并将来源于该地址的交易的输出设置为0。随后发行者可以在输出0时用同一个地址创造另外一个创世交易来创造更多单位的彩色币。创世交易的输入1+总是与彩色币协议的预期是不相关的。增加额外输入的唯一目的是你没有足够的支付彩色币创世本身所需的输入。同样请注意,一个发行地址最多为一个可重新发行的染色负责,而且一个发行地址为可重新发行的染色负责的话就不能为不能重新发行的染色负责。



输出

彩色币创世的输出由一组输出组成:发送彩色币给初始的所有者,跟随着一个OP_RETURN数据输出,然后是一个或者多个返回给发行者的多余的未染色的比特币的找零输出。一个OP_RETURN数据输出作为一个标准的输出将被允许存储80字节的数据,标识出这个交易为彩色币交易的所有数据都将被包含在这个数据区域内。该数据区域组织如下:
[0...4]: [0,67,67,80,0] (两边用0填补的“关键控制点”)
[5...6]: 协议版本号 (当前为 0)
[7...8]: 染色规则(0代表不能重新发行的染色, 65535代表可以从创世地址随意重新发行的染色)
[9..79]: 可选 (关于染色的数据)
该方案旨在协议分层级;未来“颜色”将永远留在字节0…4,版本号将永远留在字节5…6,但是未来的版本里7-79字节可能包含不同的意图而不只是染色规则和可选数据。即使在版本0里,未来的染色规则可能在9-79字节指定一些数据。目前9-79字节中的数据可以是任何格式,一种潜在的可能是让发行者在其中包含他发行的彩色币的名字及网址。

注意,对于可重新发行的染色,创世地址需要高度的安全性,因为一旦攻击者获得了该地址的私钥将拥有无限发行那种颜色的彩色币的权力。因此,强烈推荐该创世地址采用至少2-of-3的多重签署,甚至3-of-5多重签署并冷存储的私钥保存。对于不可重新发行的染色,除非发行人打算持有一部分发行的彩色币否则不需要额外的安全防护,在这种情况下,同样的安全注意事项适用于任何其他数字资产。

下载所有区块链数据的完整的客户端将尝试处理每一个创世进程,并尽可能多的保存染色的信息。轻客户端,包括在线客户端,需要用户通过提交创世交易的哈希值来导入颜色,此时用户查询服务器获得关于染色的创世交易的准确信息。

例子inputs: [
17ztLiaGdWcWFX8CgYqWGQPEizepPLsSrb : 500000,
19GAFukX9ixSDLy1p2UEed2mpDQ69QPUXr : 2125735,
1MyK5te6U6zGoom68nVEzTU2x949ReNySN : 2500000

outputs: [
1LQhUnH2UY9cuLh8qvHUNPL3GgLVWU5ziD : 1000000,
1PEFUd66e2Q7w4w4KisZRSaupNJz7K7dpL : 1000000,
1PmqmJGRxpKx45FHLTBmteKQxViHgm4Mxi : 1000000,
1DCo3v1gSqU6g2GGDz9d4BD35h9cARe5dy : 2000000,
OP_RETURN : [ 0 67 67 80 0 0 0 255 255 ] + [0] * 71
1MyK5te6U6zGoom68nVEzTU2x949ReNySN : 115735

首先我们来看这笔交易的输出。注意输出第五行的OP_RETURN输出,它的前5个字节是协议指定的[ 0 67 67 80 0 ],因此该笔交易是彩色币创世交易,输出的前0-4行都是彩色币输出。因此地址1LQhU, 1PEFU, 和1Pmqm 将拥有990000的彩色值,而地址1DCo3将有1990000的彩色值。(从每个彩色值减去10000的原因是作为转账交易部分的证据,在这里每个输出所需的10000聪作为“填充”的规则)接下来,看下OP_RETURN本身,7-8字节是[ 255 255 ],,因此这是可重新发行的染色。输入第0行的地址是17ztLiaGdWcWFX8CgYqWGQPEizepPLsSrb,因此对于任何未来的含有输入0为17ztLiaGdWcWFX8CgYqWGQPEizepPLsSrb地址的创世交易所发行的彩色币是可以重新发行的。


转账交易


为了转移彩色币,必须创建转账交易。转账交易将彩色币从一个地址发送到另一个地址,但是转账交易可以更复杂,可以在一个交易中包含不同颜色的彩色币和未染色的比特币。这种版本的协议将把转账算法定义成基于标签的染色算法,使用每个输入里的序列号作为“标签”来筛选从那个输入的来的输出的币。具体说来,底部的二进制数字序列号被处理成位域;比如,如果扩张的二进制序列号的第三位是1,那么从这个输入的彩色值将归于输出2,否则就不会。这样,每一个输入最终与输出的子集相关。算法让彩色值从每一个输入“流动”到每一个相关的输出上。如果一个输出最终完全被某种颜色的彩色值注满,那么这个输出就是彩色的,否则则不是彩色的。


基于标签的染色算法同样利用“填充”(一个潜在的可调参数默认为10000)的概念。填充背后的想法是,每个输出的前10000聪不是彩色币,其余的是彩色币。这是由于比特币的防尘规则阻止交易输出低于一个确认值。


准确的算法规则如下:


padding = 10000
for output in outputs:
output.colorvalue = 0
output.space = output.value - padding


for i in [0 ... length(inputs) - 1]:
inputs.space = inputs.value - padding
if inputs[j].sequence < 4294967295:
for j in [0 ... length(outputs) - 1]:
if [inputs.sequence / (2 ^ j)] % 2 == 1:
transfer = min(inputs.space,outputs[j].space)
if inputs.colored:
outputs[j].colorvalue += transfer
outputs[j].space -= transfer
inputs.space -= transfer


for output in outputs:
if outputs[j].colorvalue == outputs[j].value - padding:
outputs[j].colored = true
else:
outputs[j].colored = false

Examples:


inputs: [
{ value: 10005, seq: 2, colored: true },
{ value: 10010, seq: 6, colored: true },
{ value: 10020, seq: 1, colored: false },
{ value: 100000, seq: 4294967295, colored: false }

outputs: [
{ value: 10020 },
{ value: 10010 },
{ value: 10005 },
{ value: 90000 }

为了提高人们对代码的直观可读性,我们并不是完全按照算法的代码进行,取而代之的是我们将过程分解成两个部分。第一步,我们将把所有的空间和彩色值变量初始化,并基于序列号决定每个输入到输出的路径。空间总是被初始化成值减去填充以备输入和输出,所有的输出的彩色值初始化为0。为了显示如何将系列号变成输出集,看下例子中的输入1。输入1的序列号,用二进制表示是:00000000 00000000 00000000 00000110, 这里只有字节1和2被设为1。如果序列号是4294967295,我们将之等于序列号0(没有输出)。添加这条特殊的规则的意义在于,序列号总是临近4294967295的未染色的比特币的交易可以完全被协议忽视。
inputs: [
{ space: 5, outputs: [1], colored: true },
{ space: 10, outputs: [1, 2], colored: ture },
{ space: 20, outputs: [0], colored: false },
{ space: 90000, outputs: [0, 1, 2, 3], colored: false }

outputs: [
{ space: 20, cv: 0 },
{ space: 10, cv: 0 },
{ space: 5, cv: 0 },
{ space: 80000, cv: 0 }

现在,我们处理输入0。对于输入0,只需要考虑输出1.对于这个输入/输出对,我们发现min(inputs[0].space,outputs[1].space)=5,因此我们从输入输出中减去5个空域并对于输入1增加5的彩色值。为了简洁,我们将用更多的压缩格式展示中间状态:

inputs: [ (0,[1],t) (10,[1,2],t) (20,[0],f) (90000,[0,1,2,3],f) ]
outputs: [ (20, 0) (5, 5) (5, 0) (80000, 0) ]

接下来我们处理输入1,对于输入1,我们先处理输出1.min(inputs[1].space, outputs[1].space)= 5 ,因此我们将状态改变为:
inputs: [ (0,[1],t) (5,[1,2],t) (20,[0],f) (90000,[0,1,2,3],f) ]
outputs: [ (20, 0) (0, 10) (5, 0) (80000, 0) ]

对于输出2,我们发现输入和输出均有5空域,因此我们转到:

inputs: [ (0,[1],t) (0,[1,2],t) (20,[0],f) (90000,[0,1,2,3],f) ]
outputs: [ (20, 0) (0, 10) (0, 5) (80000, 0) ]

现在,对于输入2,输入2有20空域,输出0有20空域,因此我们从它们两上均减去20空域。因为,输入2不是染色的,所以对输出0不添加任何彩色值。

inputs: [ (0,[1],t) (0,[1,2],t) (0,[0],f) (90000,[0,1,2,3],f) ]
outputs: [ (0, 0) (0, 10) (0, 5) (80000, 0) ]

输入3有90000空域,由于其序列号是4294967295,它与任何输出均不匹配,因此我们跳过它。这下我们就完成了运算,现在看下输出:

outputs: [
{ value: 10020, colorvalue: 0 },
{ value: 10010, colorvalue: 10 },
{ value: 10005, colorvalue: 5 },
{ value: 90000, colorvalue: 0 }

输出1和输出2满足数值-填充公式,有彩色值,因此是彩色币。输出0和输出3没有彩色值,因此它们不是彩色币。幸运的是,这里没有输出被彩色值部分填充—如果这里有的话,那个彩色值将被摧毁。因此,这是什么交易?从我们的观点看来,我们看到彩色值从输入0和输入1转移到输出1和输出2.我们同样还看到空域从输入2转移到输出0,担不是彩色值。我们还看到输入3中的空域没有移动。这个转账实际上是一个交易,我们看到彩色币从输入0和输入1的所有者转移到输出1和输出2的所有者,还有我们没有察觉到得从输入2到输出0的其他彩色币。为了更加清楚的认识这一点,我们可以尝试采用只让输入2染色的算法。从输入3消失的空域是垃圾;这个输入存在的目的只是为了支付交易费,同时输出3存在的目的只是找零。

选择基于标签的染色的理由

基于标签的染色算法有一些优点:

1、每笔交易的元数据最小化:对于每一笔交易的输出,不必单独保存每笔交易的彩色值,因为彩色值要么是数值和填充(如果输出是染色的),要么是0(如果输出是没有染色的)。另外,在多种染色背景下,算法被设计成一个输出永远不会多于1个色彩。因此,每笔交易输出所保存的唯一元数据就是它的色彩(或者潜在的可能是没有色彩)
2、支持多种色彩:可以创建含有多种色彩的彩色币交易,即使在你没有意识到在交易中包含有其他色彩的交易也可以被处理。事实上,还可能用反向扫描(见下节)基于一个含有这些色彩的交易来自动检测和导入新的色彩
3、没有最低的发送数量限制:由于填充参数,绕开了比特币的防尘规则,如果需要甚至可以发送1彩色值得交易。
4、效率:如果某人打算在没有任何数据的情况下确定一个输出的色彩,那么他需要使用向后扫描算法,潜在的指数增长的输出需要进行扫描。由于基于序列的染色算法忽略了所有的默认的未非染色交易,这个进程将大大加快。

弱点:

1、效率:虽然这种算法比更幼稚的方法比如基于顺序的染色有巨大的改进,向后扫描的效率理论上仍然是指数的(因为一个输出可以有多个输入),因此一个安全的“轻客户端”处理彩色币的效率比处理比特币低得多。我们只知道两个缓解这个问题的方法。第一个,可以采用一个染色规则:让输出分裂而不是重新组合起来,依靠一个活跃的发行者重新组合起来。通过限制每一个输出都有一个输入为其根源,这解决了反向扫描难度指数级增长的问题。第二个,可以将彩色币移植到一个单独的专用网络,最有可能的是与比特币合并采矿的一个替代币。
2、SIGHASH_ANYONECANPAY不起作用:SIGHASH_ANYONECANPAY是一个输入的签名者可以添加大致如下内容的“操作码”,我同意在包含在这个输入到指定输出的交易中发送资金,如果输入足够支付输出,我不在乎其他输入在哪里。通常,一个签名标示整个交易,包括特定的输入和输出。对于彩色币,SIGHASH_ANYONECANPAY不起作用,因为比特币的脚本语言不是色彩敏感模式,因此没有办法要求其他交易输出是任何指定的色彩。这是彩色币的一个基本限制。
3、每笔交易最多31个输出:技术上看,32个输出是可行的,但是为了避免意外用序列号4294967295 (二进制表示: 11111111 11111111 11111111 11111111)作为输入发送给所有的输出,代码将会更复杂一些。

反向扫描:

利用彩色币的分布式交易

彩色币的一个有益的特性是能够轻易的做原子互换:用X单位的A币换Y单位的B币不需要双方互信。这背后的想法很简单:用来至1的X单位的A币的输入和来至2的Y单位的B币的输入组成多重染色交易,输出为X单位的A币给2,Y单位的B币给1。对于基于订单的染色或者填补的基于订单的染色,这只是包含整理输入和输出:A币的输入0和输出0,B币的输入1和输出1。







这里是一个更精确的普通基于订单染色的例子,其中包括一笔10000聪的交易费:

{
inputs: [
{ color: 'green', address: [A], value: 60000 },
{ color: 'blue', address: [B], value: 20000 },
{ color: 'uncolored', address: [B], value: 70000 }
],
outputs: [
{ color: 'green', address: [B], value: 60000 },
{ color: 'blue', address: [A], value: 20000 }
{ color: 'uncolored', address: [B], value: 60000 }

}


尽管如此,要做一个完整的交易平台这还不够,一个完整的交易平台需要拥有用户发布订单的能力(比如“我想至少以3.3Y换1X的比率卖50X”),并且这些订单是可执行的。如果某订单是不可执行的,那么任何人可以通过虚假命令让订单薄充满垃圾信息,进而可以要么操纵市场,要么完全关闭市场。非常不幸,对于彩色币来说,订单是可以不可执行的:任何人都可以创建订单并拒绝签署任何特定的交易。在大多数情况下采用SIGHASH_ANYONECANPAY命令的部分签署交易无力解决这个问题。如果你打算卖出彩色币换取比特币,这是一个可行的解决方案,因为比特币区块链不能区分彩色币。因此,仍然需要一个中心化的,至少是半中心化的服务器来充当垃圾邮件过滤器让彩色币交易平台成为可能。尽管如此在比特币和其他货币之间,这种中心化的程度更低,因为中心化的服务器不需要存储任何资金,它唯一的任务是审查是否有用户发布的虚假订单,如果有的话禁止他们发布更多的虚假订单。


参考文献:
1. http://yoniassia.com/coloredbitcoin/
2. https://bitcointalk.org/index.php?topic=101197.0 https://bitcoil.co.il/BitcoinX.pdf 彩色币概述-美尼•罗森菲尔德
3. http://nwotruth.com/wikileaks-bo ... -fail-with-bitcoin/ 维基解密的抵制:比特币大到不能倒
4. https://github.com/bitcoin/bitcoin/pull/2738 比特币0.9版本的改变
5. https://github.com/bitcoinx/colo ... colored_coins_intro 彩色币介绍 (描述 基于订单的染色[OBC] 和填补的基于订单的染色[ POBC])
6. https://coloredcoins.org
7. https://github.com/killerstorm/B ... b/color/p2ptrade.py 点对点交易
8. https://bitcointalk.org/index.php?topic=112007.0 https://en.bitcoin.it/wiki/Smart_Property 智能资产
9. http://brownzings.blogspot.com/2 ... implementation.html 另一种更简单的彩色币实现, 保罗斯•诺
10. http://vbuterin.com/coloredcoins/valuecalc.py 在基于值得染色下发送一笔指定数目的比特币的动态算法
11. order-based weak coloring Overview and call for ideas:
12. Alex’s order-based weak coloring:
13. https://github.com/killerstorm/BitcoinArmory 支持彩色币的军械库版本
14. http://www.bitcoinx.org
15. http://szabo.best.vwh.net/idea.html
16. https://www.usenix.org/legacy/pu ... /ec98/fujimura.html
17. http://szabo.best.vwh.net/idea.html
18.在bitcoinjs上一个chrome插件基于订单的弱染色的实现的尝试
https://github.com/0i0/bitcoinjs-color
https://github.com/0i0/bitcolor-chrome-ex





原文链接:
https://docs.google.com/document/d/1AnkP_cVZTCMLIzw4DvsW6M8Q2JC0lIzrTLuoWu2z1BE/edit

苦逼翻译,求打赏,BTC地址 1PsCnPbZJjpSK8PQvn2yqikN6pMqWJYAmK
本文翻译为巴比特约稿

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

广告合作|Archiver|手机版|小黑屋|财富吧

GMT+8, 2026-6-25 21:46 , Processed in 0.702001 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.1

© 2014-2021 财富吧

快速回复 返回顶部 返回列表