首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

比特币交易的形成过程

今天主要讲一下一笔交易是如何形成的。

当张三在比特币钱包里要给李四转比特币时,钱包按照如下流程执行:

1、生成交易

找到张三所持有比特币的地址,根据张三想给李四转的数量,找出一个或多个地址,所包含的比特币数量的总和略多于这个数量,并写入刚才所建立的空白交易中。

2、签名

由于张三的私钥是保存在钱包里的,所以钱包直接调用张三的私钥对刚才的半成型的交易签名。签名结束后,将签名的数据填写到这笔交易中。

3、广播交易

钱包现在将这笔包含了所有信息数据(一般称做hex)发送到网络中即可,交易id号是基于这笔交易的所有信息进行双重SHA256哈希加密生成的。不用包含在发送网络中的hex里。

此时一笔完整的交易信息就已经生成好了,矿工收到这笔交易并进行验证了。

我们根据上述的流程,用上文提到的JSON格式来重现那笔交易的生成过程。

1、生成交易

首先找到张三合适的有币的地址,发现1APcBuxCZxDeH1TB6huk9h1jE2YENBTxkF、

1G2Wo8kEjW8vRSdYtHEqqqdMyxvQFi1dj5这两个地址的比特币数量加和会比要比发币数量多,于是用此两个地址作为发币地址。

其次,将李四的地址1CgyFugseQMNQAQEr2cW6UcunQZSWTk4Ms也记录到这笔交易中,放在输出交易里,并写明收币数量。

最后,剩余的金额需要存到张三的找零地址中,找零地址也是钱包准备好的,找零地址是3PauLgPVQu2r6QnvWvK1GDGXdeB3ouCdqw,找零的比特币数量并不是发币地址中的数量减去收币地址的数量,而是,需要再减去一小点矿工费用。

在本例子中,需要在找零地址中的收币数量里写0.1788。交易中并不记录矿工费用,而是通过发币地址总数量减去收币地址总数量计算出来的。

此时,JSON格式的交易信息如下:

此时,我们可以发现,inputs里的script仍然为空、hash里的值仍然不是最终的值。

2、私钥签名

钱包掌管了张三的私钥,故用张三的私钥对这笔交易签名,签名的过程先不赘述,签名的结果如下:

· 用1APcBuxCZxDeH1TB6huk9h1jE2YENBTxkF地址所对应的私钥,对这笔交易签名:

· 用1G2Wo8kEjW8vRSdYtHEqqqdMyxvQFi1dj5地址所对应的私钥,对这笔交易签名:

将签名的结果写入交易中:

3、广播交易

此时,将这笔完整的交易去掉大括号、中括号、逗号、英文名称、双引号,按照大家都遵守的交易格式将值都写到一起,最终汇成一个很长的字符串:

02000000026ebf6b8ddbb4536d4a2dfeed534b65d902f794a5214e02fe68b1b4123ee3cb03010000006a473044022033653d8ab7ad772c6521c346315a0e69464701a4bd3eba466af52f1bdd5dbb05022071f800db91a49f004a5d61ea5e220e52ba970b3f4c5ec79ac1b5d106d9ab1f9f0121037497fa7d8ed26caef4b313998e79fa60d7e97a78a4b1d25cef3caa5c803bd8bcfeffffffcb11692c5b206eacb63e68ca4b9e5bd82ba4f03399ad109c8eb2376016af5787000000006b483045022100e49bc68ca3d0a84021c5a55c206c61e7db8cf441c12ee36217334bd6a295dea602200a8474cfe5b5804834fd9a76dac8a55f70b48eea16eb91d538c4e709782ba874012102c3c940a918bd2a1654c3dbc790d10944d09f597a63f91a13b73d7d87fd96f972feffffff0272f20e00000000001976a91480389130638c5ac5b4fdb15e65fa821f023bd3c788acc0d310010000000017a914f02ac68a03871c6b7d04d9632ec941ad3de2f62d8723c90700

这就是这笔交易的完整信息,也就是上面提到的hex。将这个数据广播到网络中,矿工接收到数据后就可以开始对这笔交易进行验证了。

关注【通俗易懂区块链】,学懂区块链

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180222G14GEC00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券