比特币代码研读笔记(4)---交易原理

2018-03-18  本文已影响0人  Saiwaimuma

上篇介绍了交易过程中用到的数据结构,这一篇 介绍下交易的原理,关于交易的代码细节方面还没有看的特别明白,只写写交易的原理吧,代码级别的放到下一篇中。一个交易要被创建,广播出去,然后进行验证。上篇写到了,交易的数据结构,其实交易建立的过程就是在填充这样的数据结构。 以A给B转账说明整个过程,假如A已经获得了B的地址:

(1)A要查看自己的CWalletTx ,所谓自己的WalletTx 是指,out是指向自己的Tx,也即out 的scriptPubkey中的地址是自己的公钥生成的

  (2)  然后在所有的这样的out中选择value大于或是几个之和大于转账金额的out

(3)根据选择的Out所在的Tx开始创建创建交易

 根据B的地址生成的scriptPubkey和转账的金额,生成Txout,填充到vout的第一个元素中

如果选择的out的金额大于转账的金额,此时会有找零情况的发生。此种情况发生时,需要再生成一个Txout,该Txout的值为找零,scriptPubkey则是根据自己的地址生成的。然后将该Txout填充到下一个Txout中。

(4)根据在(3)所有选择的out来创建Txin,对于每一个out,使用out所在的Tx的hash,和位于Tx的index作为参数构建Txin,将该Txin添加到Vin中,

  (5)  对每一个out都构建完Txin之后,需要生成Txin的scriptSig,由于每一个out的scriptPubkey(即锁定脚本) 是由自己的地址构成的,所以此时的解锁脚本可以由自己的私钥来生成签名。

由于交易费用是由交易的大小决定的,所以当交易创建好后,需要验证加上交易费用之后是否超过提供的金额,如果超过了,那么把添加交易费用后的金额作为需要转账的金额,重新开始计算。

上一篇下一篇

猜你喜欢

热点阅读