精力有限,后期修订以github为主,建议大家移步github链接阅读更新版本,感谢理解:
https://github.com/tianmingyun/MasterBitcoin2CN
本文4600字。
现在,让我们从比特币作为一个应用平台的角度来看,进一步加强理解。 现在很多人使用“blockchain”(区块链)这个词来表示任何共享了比特币设计原则的应用平台。 该术语经常被滥用,并被应用于许多不能提供比特币区块链主要功能的事情。
在本章中,我们将介绍比特币区块链作为应用平台所提供的功能。 我们将考虑应用程序构建原语,即构成任何区块链应用程序的构建块。 我们将研究使用这些原语的几个重要应用程序,例如彩色币,付款(状态)渠道和路由支付渠道(闪电网络)。
12.1介绍
比特币系统被设计为一个分布式的货币及支付系统。 然而,它的大部分功能源于可用于更广泛应用中的较低级别的结构。 比特币不是由帐户,用户,余额和付款等组件构建的。 相反的,我们在[交易]章节中看到,它使用的是具有低级加密功能的交易脚本语言。 就像账户,余额和付款的更高层次的概念可以从基本原语中衍生出来一样,许多其他复杂的应用也是如此。 因此,比特币区块链可以成为一个向诸如智能合同等应用程序提供信任服务的应用平台,远远超出了作为数字货币和支付的原始目的。
12.2构建块(原语)
当运行正常且长期运行时,比特币系统提供了一定的保证,可以作为构建块来创建应用程序。 这些包括:
没有杜绝双重支出
比特币分布式共识算法的最根本保证是确保UTXO不会花费两次。
不可改变性
一旦交易被记录在区块中,并且随后的区块中添加了足够的工作,交易数据就变得不可篡改。 不可改变性是由能源进行承保的,因为重写区块链需要消耗能源才能产生工作证明。 所需的能源以及由此带来的不可变性的程度随着在包含交易的区块之后被提交的工作量而增加。
中立
去中心化的比特币网络传播有效的交易,而不管这些交易的来源或内容如何。 这意味着任何人都可以支付足够的费用
来
创建有效的交易,并相信他们可以随时传输该交易并使其包含在区块链中。
安全时间戳
共识规则拒绝任何时间戳距离现在太远(过去和将来)的块。 这可以确保块上的时间戳可以被信任。 块上的时间戳意味着对所有其包含的交易的输入之前从未被花过的保证。
授权
被去中心化网络中验证过的数字签名可提供授权保证。没有脚本中指定的私钥的持有人的授权,包含数字签名要求的脚本就不能被执行。
审计能力
所有交易都是公开的,可以被审计。 所有的交易和交易所属的区块都可以以一个不间断的区块链链接起来并最终链接到创始区块。
会计
在任何交易中(coinbase交易除外),输入的金额等于输出的金额加上交易费用。 在交易中不可能创建或销毁比特币价值数值。 输出不能超过输入。
永不过期
有效的交易永远不会过期。 如果今天有效,它将在不久的将来仍然有效,只要输入仍然没有被花费,共识规则没有改变。
完整性公正性
使用SIGHASH_ALL签名的比特币交易或由另一个部分由SIGHASH类型签署的交易,不能在签名还有效的情况下被修改,从而导致交易本身无效。
交易原子性
比特币交易是原子的(译者注:原子性是指交易要么全部执行,要么完全不执行,不存在中间状态)。 它们要么是有效的并且经过确认的(挖矿),要么不是。 不存在挖矿出交易的一部分,交易也不存在中间状态。 在任何时间点,交易要么被挖出,要么没有被挖,不存在中间状态。
离散(不可分割)价值单位
交易输出是离散和不可分割的价值单位。 他们要么整体被花费要么整体没有花费。 他们不能被分割或者部分被花费。
法定人数(注:让任何预定事物有效的最低参与人数)
脚本中的多重签名限制规定了多重签名方案中的预定义的法定权限。 M-of-N要求由共识规则执行。
时间锁/老化
包含相对或绝对时间锁的任何脚本语句只能在其时间超过指定时间后执行。
复制
区块链的去中心化存储确保了在交易在被开采之后,经过充分的确认,它被复制到整个网络上,并且变得可以耐受得起电力损失,数据丢失等的影响。
伪造保护
每笔交易只能花费现有的经过验证的输出。不可能创建或伪造价值。
一致性
在没有矿工分区的情况下,根据记录的深度,记录在区块链中的块可能会被从新组织或者被不认可的可能性将呈指数级下降。一旦被记录在深层,改变所需的计算和能量将大到不可行的程度。
记录外部状态
每个交易可以通过OP_RETURN提交一个值,表示外部状态机中的状态转换。
可预测发行量
总计不到2100万比特币将会以可以预测的速度发行。
上述构建块区的列表并不完整,还会有新功能都被介绍添加到比特币中。
12.3源于构建区块的应用
由比特币提供的构建区块是可信平台的组成部分,可用于构成各种应用程序。 以下是今天在用的应用程序及其使用的构建区块的一些示例:
Proof-of-Existence(Digital Notary)数字公证
不可篡改性+时间戳+永久性。数字指纹可以通过一个交易提交给区块链,以证明文件在此存档的时间内是存在的(Timestamp安全时间戳)。数字指纹不能在事后修改(Immutability不可改变性),证据将被永久存储(Durability耐久性)。
Kickstarter(Lighthouse)
一致性+原子性+可信。如果您发起众筹活动的一个输入和输出(Integrity公正性),别人可以参与众筹,但在目标(output value输出值)完成之前(Consistency一致性),这笔钱不能被花费出去(Atomicity交易原子性 )。
Payment Channels
控制法定人数+时间锁+杜绝双重支付+永不过期+耐审查+授权。一个带有时间锁(Timelock时间锁)的法定人数为2-2的(Quorum法定人数)多重签名被作为付款渠道的“结算”交易时,可以被持有(Nonexpiration永不过期)或者可以在任何时间由任何一方授权(Authorization授权)的情况下(Censorship Resistance耐审查)进行花费。然后双方可以在更短的时间锁(Timelock)创建双重支出(No Double-Spend)结算的确认交易。
(译者注:本段原文如下:Quorum of Control + Timelock + No Double Spend + Nonexpiration + Censorship Resistance + Authorization. A multisig 2-of-2 (Quorum) with a timelock (Timelock) used as the "settlement" transaction of a payment channel can be held (Nonexpiration) and spent whenever (Censorship Resistance) by either party (Authorization). The two parties can then create commitment transactions that double-spend (No Double-Spend) the settlement on a shorter timelock (Timelock).)
12.4染色币(Colored Coins)
我们将讨论的第一个区块链应用是染色币。
染色币是指利用比特币交易来记录除比特币之外的外部资产的创建,所有权和转让的这类技术。 “外在”外部资产我们是指这些资产不直接存储在比特币区块上,而不是指比特币本身,因为比特币是本身就是这个区块链的固有资产。
染色币用于跟踪第三方持有的数字资产和实物资产,并通过染色币所有权证书来进行交易。 数字资产染色币可以代表无形资产,如股票证书,许可证,虚拟财产(游戏装备)或大多数任何形式的许可知识产权(商标,版权等)。 有形资产染色币可以代表商品(黄金,白银,石油),土地所有权,汽车,船只,飞机等所有权。
该术语源于“着色”或标记某名义金额的比特币的想法,例如,1聪,用来表示比特币价值本身以外的东西。打个比方,我们给一美元的钞票标上一行信息说:“这是ACME的股票证书”,或者“这张钞票可以兑换1盎司的银”,然后使用这个1美元钞票与作为其他资产权益证明来进行交易。染色币的第一次实施,名为“基于增强填充订单的着色”或“EPOBC”,将外部资产标记于1聪输出上。这样,它就成了一个真正的“染色币”,因为每个资产作为1聪的属性(颜色)被添加。
染色币的最新实施使用OP_RETURN脚本操作码将交易中的元数据与将元数据与特定资产相关联的外部数据存储结合在一起。
今天染色币的两个最突出的实现是 Open Assets和Colu的染色币。这两个系统使用不同的方法来染色,并不兼容。在一个系统中创建的染色币在其他系统中无法看到或被使用。
12.4.1使用染色币
染色币被创建,转移,并且通常用特殊的可以理解含有染色币协议元数据的比特币交易的钱包来查看。 必须特别注意避免在常规的比特币钱包中使用染色币相关的密钥,因为常规钱包可能会破坏元数据。 同样地,染色币也不应该被发送到由常规钱包管理的地址,而只能发送到由染色币能够识别的钱包管理的地址。Colu和Open Assets这两个系统都使用特殊的染色币地址来减轻这种风险,并确保染色币不会发送到不能识别的钱包。
染色币对大多数通用的blockchain浏览器也是不可见的。 相反,您必须使用染色币浏览器来阐释染色币交易的元数据。
Open Assets兼容的钱包应用程序和区块链浏览器可以在
coinprism
查找。
Colu染色币兼容的钱包应用程序和区块链探索器可以在
Blockchain Explorer
中找到。
Copay钱包插件可以在
Colored Coins Copay Addon
中找到。
12.4.2发行染色币
每个染色币的实现都通过不同的方法创造染色币,但它们都提供类似的功能。创造染色币资产的过程称为
发行
作为初始交易,发行交易将资产登记在比特币区块链上,并创建用于引用资产的资产ID。一旦发行,资产可以使用转账交易在地址之间传递。
作为染色币发行的资产可以有多种属性。它们可以是可分割的或不可分割的,这意味着转账中的资产量可以是整数(比如5)或具有十进制细分(比如4.321)。资产也可以
固定发行
意思是一定数量的资产只可以发行一次,或者可以被再次发行,后者意味着原始发行人在初始发行后可以发行新资产单位。
最后,一些染色币启用分红,即允许按照拥有权成比例分配比特币付款给染色币资产的所有者。
12.4.3染色币交易
给染色币交易提供意义的元数据通常使用OP_RETURN操作码存储在其中一个输出中。不同颜色的硬币协议对OP_RETURN数据的内容使用不同的编码。包含OP_RETURN的输出称为
标记输出
输出的顺序和标记输出的位置在染色币协议中可能具有特殊含义。例如,在Open Assets中,标记输出之前的任何输出都代表资产发行。标记输出后的任何输出表示资产转账。通过参考各个输出在转账中的顺序标记输出将特定值和颜色分配给其他输出。
在Colored Coins (Colu)中,通过比较,标记输出编码一个定义元数据该如何被理解的操作码。操作码0x01至0x0F表示发行交易。发行操作码通常后面是资产ID或可用于从外部来源(例如bittorrent)取得资产信息的其他标识符。操作码0x10到0x1F表示转账交易。转账交易元数据包含简单的脚本,通过参考输入输出的索引(顺序),将特定数量的资产从输入转账到输出。因此,输入和输出的排序对脚本的解释很重要。
如果元数据太长而不能放入OP_RETURN,则染色币协议可能会使用其他“技巧”在交易中存储元数据。示例包括将元数据放在兑换脚本中,紧接着OP_DROP操作码,以确保脚本忽略元数据。另一种被使用的机制是1-N 多重签名脚本,其中只有第一个公钥是可以花费输出的真实公钥,随后的“密钥”则用被编码的元数据替代。
为了正确解释染色币交易中的元数据,您必须使用兼容的钱包或块资源浏览器。否则,该交易会看起来像一个具有OP_RETURN输出的“正常”比特币交易。
例如,我使用染色币创建并发行了MasterBTC资产。 “MasterBTC”代表了可以获取本书免费拷贝的兑换券。这些兑换券可以使用染色币兼容的钱包进行转让,交易和兑换。
对于这个特定的例子,我使用了
https://coinprism.info
的钱包和浏览器,它使用了Open Assets染色币协议。
下图12-1
在coinprism.info上查看的发行交易
显示使用Coinprism块浏览器的发行交易:[(
https://www.coinprism.info/tx/10d7c4e022f35288779be6713471151ede967caaa39eecd35296aa36d9c109ec
)
正如你所看到的那样,coinprism显示了发行的20个“精通比特币的免费拷贝”,简称为MasterBTC的资产,发给了一个特殊的彩色币地址:
akTnsDt5uzpioRST76VFRQM8q8sBFnQiwcx
警告发送到该地址的任何资金或染色币将永远丢失。 不要发送到这个示例地址!
发行交易的交易ID是“正常”比特币交易ID。
下图12-2
不对染色币进行解码的区块链浏览器中看到的发行交易
显示同一笔交易(和12.1同一笔)在不会对区块链解码的区块浏览器中的样子。 我们将使用blockchain.info:
https://blockchain.info/tx/10d7c4e022f35288779be6713471151ede967caaa39eecd35296aa36d9c109ec
正如你所看到的,blockchain.info不认为这是一个染色币交易。 事实上,它以红色字母表示第二个输出“无法解码输出地址”。
如果您在该屏幕上选择“显示脚本和coinbase”,可以看到有关交易的更多详细信息(下图12-3发行交易的脚本
再次,blockchain.info并不能理解第二个输出。 它以红色字母表示“奇怪”。 但是,我们可以看到,标记输出中的一些元数据是可读的:
OP_RETURN 4f41010001141b753d68747470733a2f2f6370722e736d2f466f796b777248365559(decoded) "OAu=https://cpr.sm/FoykwrH6UY
让我们使用bitcoin-cli检索交易:
$ bitcoin-cli decoderawtransaction`bitcoin-cli getrawtransaction 10d7c4e022f35288779be6713471151ede967caaa39eecd35296aa36d9c109ec
剥离其余的交易,第二个输出如下所示:
{
"value": 0.00000000,
"n": 1,
"scriptPubKey": "OP_RETURN 4f41010001141b753d68747470733a2f2f6370722e736d2f466f796b777248365559"
}
前缀4F41表示字母“OA”,代表“Open Assets”,并帮助我们确定以下元数据是由Open Assets协议定义的紧接着的ASCII编码的字符串是指向资产定义的链接:
u=https://cpr.sm/FoykwrH6UY
如果我们检索此URL,我们将获得JSON编码的资产定义,如下所示:
{
"asset_ids": [
"AcuRVsoa81hoLHmVTNXrRD8KpTqUXeqwgH"
],
"contract_url": null,
"name_short": "MasterBTC",
"name": "Free copy of "Mastering Bitcoin"",
"issuer": "Andreas M. Antonopoulos",
"description": "This token is redeemable for a free copy of the book "Mastering Bitcoin"",
"description_mime": "text/x-markdown; charset=UTF-8",
"type": "Other",
"divisibility": 0,
"link_to_website": false,
"icon_url": null,
"image_url": null,
"version": "1.0"
}
本章未完。
参考内容:
1、本文部分内容摘自《精通比特币》第一版中译本,特此说明并致谢。
我正在发起“和我一起研读《精通比特币第二版》”活动。
我声明,这不是讲课,是讨论,是研读学习,所以需要你的加入,更需要你的参与。
我把这种学习方式作为一次认知学习法[注]的实践。
我希望大家可以和我一起通过将认知学习法与《精通比特币第二版》的研读结合起来,尝试总结出一套可行的区块链知识技能快速入门的方法。
尝试,反思,总结,生成以及组合进行的实践、检验并逐步迭代升级,这是我们的经历也是我们的结果。
这个结果也将成为我们大家一起合作编写的一本书《认知学习比特币》的雏形(所有有价值的讨论都将成为这本书的素材)。
我更希望大家通过本次认知学习方法论的实践以及迭代升级,将这种经过实践的学习方法迁移到更多领域的学习中。
所以希望我们携手走入第二季,第三季......
欢迎扫描二维码加入。