Abstract:在本章中, 我们将从一个较高层面检视比特币, 通过追踪一笔比特币系统中的单独交易(以Alice买咖啡为例),来看看它在比特币分布式共识机制中变得“被信任”和“被接受”的情形, 以及最终成功地被存储到区块链。
1. 比特币交易
简单来说,通过交易告知全网:
<1>比特币的持有者已授权把比特币转账给其他人。
<2>新持有者能够再次授权, 转移给该比特币所有权链中的其他人
交易是将钱从交易输入移至输出。
输入是指钱币的来源, 通常是之前一笔交易的输出。
交易的输出则是通过关联一个密钥的方式将钱赋予一个新的所有者。
这样,就给资金强加了一个要求: 有签名才能在以后的交易中赎回资金。 一笔交易的输出可以被当做另一笔新交易的输入, 这样随着钱从一个地址被移动到另一个地址的同时形成了一条所有权链。
Alice和她的朋友会面时, 用现金换取了比特币。
由此产生的这笔交易使得Alice的钱包拥有了0.10比特币。
现在Alice将第一次使用比特币在加利福尼亚州帕罗奥图的Bob咖啡店买一杯0.0150比特币的咖啡。
2.常见的交易形式(3种)
a.简单支付 :买咖啡
b. 零钱兑换大额钞票
c. 雇主给多个雇员发工资
3. 交易的构建
• 通过钱包应用 指定目标地址和金额,其余的细节钱包应用会在后台自动完成
• 通过钱包应用 进行比特币交易建立和签名时不用连接比特币网络。
• 只有在执行交易时才需要将交易发送到网络。
构建一笔交易的要点:
1.获取正确的输入
2.创建交易输出
3.将交易放到总账簿中
3.1获取正确的输入
• 构建一笔交易,首先需要通过钱包应用找到一些足够支付的输入。
• 大多数钱包应用维护着一个含有用钱包密钥锁定的“未消费交易输出”小型数据库。 即钱包客户端需含有用户未消费交易输出
• 可以从比特币网络中拿到某未消费交易输出
例如
https://blockchain.info/unspent?active=1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK
响应数据显示了在Alice的地址 1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK 上面有一个未消费输出(还未被兑换) 。根据这个信息, 就可以通过钱包应用创建新的交易将钱转账到新地址。
3.2创建交易输出
交易的输出会被创建成为一个包含这笔数额的脚本的形式, 只能被引入这个脚本的一个解答后才能兑换。
简单点说就是,Alice的交易输出会包含一个脚本,这个脚本要求 “签名和Bob的公开地址匹配上,才可进行支付”。
因为只有Bob的钱包的私钥可以匹配这个地址,所以只有Bob的钱包可以提供这个签名以兑换这笔输出。
因此Alice需用Bob的签名来包装一个输出。
就像透明的存钱罐一样,谁都可以看见。但是需要有密钥才可以取出来
可以从比特币区块浏览器获得刚才买咖啡的交易记录,如下图所示:
3.3.将交易放到总账簿中
交易被传送到比特币网络中之后成为分布式账簿(区块链)的一部分
其中:比特币网络是由参与的比特币客户端联接几个其他比特币客户端组成的P2P网络。
比特币网络的目的是将交易和区块传播给所有参与者。
任何比特币网络节点(其它客户端) 收到一个之前没见过的有效交易时会立刻将它转发给联接到自身的其它节点。
4.比特币挖矿
交易在比特币网络上传播后,只有被一个称为挖矿的过程验证且加到一个区块中之后, 这个交易才会成为这个共享账簿(区块链) 的一部分,此时才可被确认为有效交易。
• 挖矿在比特币系统中起着两个作用:
<1> 挖矿在构建区块时会创造新的比特币
<2> 挖矿创建信任。挖矿保证了交易的确认基于足够的计算量。区块越多,花费的计算量越大,意味着更多的信任。
描述挖矿的一个好方法是将之类比为一个巨大的多人数独谜题游戏。 一旦有人发现正解之后, 这个数独游戏会自动调整困难度以使游戏每次需要大约10分钟解决。
<1>比特币中的 “谜题” 是基于哈希加密算法的,它解起来困难而验证很容易, 并且它的困难度可以调整。
<2>用SHA256加密算法不断地对区块头和一个随机数字进行哈希计算, 直到出现一个和预设值相匹配的解。
<3>第一个找到这个解的矿工会赢得这局竞赛并会将此区块发布到区块链中。
5.区块中的挖矿交易记录
网络中产生的一笔交易直到成为整个比特币大账簿——区块链的一部分时才会被确认有效。
当比特币网络上的节点看到这些交易时, 会先将它们放到各自节点维护的一个临时的未经验证的交易池中。
当矿工构建一个新区块时,会将这些交易从这个交易池中拿出来放到这个新区块中, 然后通过尝试解决一个非常困难的问题(也叫工作量证明) 以证明这个新区块的合法性。
TIPS:
• 每个矿工会在他的区块中包含一个特殊的交易, 将新生成的比特币(当前每区块为12.5比特币) 作为报酬支付到他自己的比特币地址。
• 如果他找到了使得新区块有效的解法, 他就会得到这笔报酬,
• 因为这个新区块被加入到了总区块链中, 他添加的这笔报酬交易也会变成可消费的。
随着时间变长, 这个区块链的高度也随之增长, 每个区块和整个链的计算复杂度也随之增加。
当区块一个个堆上来时, 这个交易变得指数级地越来越难被推翻, 因此它在网络中得到更多信任。
按惯例来说, 一个区块获得六次以上“证明”时就被认为是不可撤销的了, 因为要撤销和重建六个区块需要巨量的计算。
6.消费这笔交易
• 可将相关交易的结果信息作为输入,进行新的交易
这样就实现了对此交易的消费。
• 通过进行不断的交易,形成一条区块交易链