《精通比特币》学习:深度剖析比特币的交易过程

1、比特币交易是比特币系统中最重要的部分。根据比特币系统的设计原理,系统中任何其他的部分都是为了确保比特币交易可以被生成、能在比特币网络中得以传播和通过验证,并最终添加入全球比特币交易总账簿(比特币区块链)。

2、比特币交易的生命周期:起始于比特币交易被创建,随后交易被一个或多个签名加密,接下来交易被广播到比特币网络,网络中每一个节点验证再广播,直到被大多数节点接受,最后比特币交易被一个挖矿节点验证,并被添加到区块链上一个记录着许多交易的区块中。一笔比特币交易被记录到区块链上以后,被超过6次后续区块的确认证明,就成为区块链总账簿的一部分。这笔交易分配的比特币资金到了新的所有者名下(交易的输出),可以在新的交易中被使用(作为新交易的输入),进入下一个周期。

所以比特币交易的生命周期包含以下环节:创建交易----》广播交易至网络----》交易在网络中传播----》交易被打包进区块,挖矿验证----》交易所属区块被加入区块链----》被后续区块证明达到6次----》成为总账簿的一部分,确认为有效交易----》交易完成,比特币到了新的所有者名下----》开始新的交易,进入新的周期。

3、创建比特币交易:任何人都可以创意比特币交易,创建交易的人不一定是签署这笔交易的人,比如公司的业务员可以发起一笔交易,然后让CEO来签字。一旦一笔比特币交易被创建,它会被资金所有者(们)签名。

4、一笔比特币交易只是300-400个字节的数据,这个数据主要是根据典型的交易场景得来的,根据交易输入和输出的数量不同,交易数据量大小都会不同,比如你发表一篇文章在网上让读者打赏,那么你的得到交易输出就全部是小额的,用这些输出作为下一笔交易的输入时,可能需要很多的交易输入才足够支付一笔交易。

延伸资料:比特币交易的交易费用不是根据金额决定的,而是根据交易的数据大小,1000个字节的交易费用0.0001BTC,不够1000字节按1000字节收取,比如1200字节的交易费就是0.0002BTC,交易大小的关键因素是输入的数量,输入数量越大交易大小越大,交易费越高。但是符合一些条件的话,可以免收交易费,大概要求是“小于1000字节; 所有输出大于10 mBTC; 输入值大且时间久”。这样使得交易额度大价值高的交易有机会免交易费,只要交易间隔时间足够长,交易输入越大等待时间越短。大概是接收到一笔1比特币的交易,等一天再支付出去可以免手续费。后续我想专门用一篇文章来学习了解这个问题,今天先不展开了。

5、广播交易至网络:比特币交易能在任意网络环境被发送,只要这笔交易能到达能将它传播到比特币网络的那一个比特币节点就行,如何到达的并不重要,所以比特币交易可以通过未加密网络发送,比如wifi、蓝牙、二维码,甚至发布到论坛。

6、一旦一笔比特币交易被发送到任意一个连接至比特币网络的节点,这笔交易将会被该节点验证,验证有效后,该节点会继续传播到所连接的其他节点,以此类推。同时交易发起者会收到一条表示交易有效并被接受的返回信息,如果交易无效,就会被拒绝并返回信息给交易发起者。一笔刚通过验证并被传递到比特币网络中任意节点的交易会被发送到三到四个相邻节点,而每一个相邻节点又会将交易发送到三至四个与它们相邻的节点。以此类推,在几秒钟之内,一笔有效的交易就会像指数级扩散的波一样在网络中传播,直到所有连接到网络的节点都接收到它。

《精通比特币》学习:深度剖析比特币的交易过程

7、一个交易的数据结构包含信息有:版本、输入总数、输入数据(1或N个)、输出总数、输出数据(1或N个)、时钟时间(一个UNIX时间戳或区块号)。从这个数据结构可以看出,一个交易主要包含输入和输出的数据,与账号身份无关

8、交易锁定时间:交易锁定时间是指交易能加到区块链里的最早交易时间,相当于定时生效的意思,如果锁定时间是0代表立即执行,如果不是0且小余5亿,就被视为区块高度(最长链条的长度),意思是说没达到这个区块高度之前就不包含在区块链里。如果锁定时间大于5亿,就被视为是一个UNIX纪元时间戳(从1970年1月1日开始到5亿秒的时间),没达到这个时间点之前交易不包含在区块链里面。

9、比特币交易的最小单位是未消费的交易输出,即UTXO。重点:一笔比特币交易可以有任意数值,但必须从用户可用的UTXO中创建出来,这样就真正把交易有效的链接起来,每一个交易每一个币都可追溯都有源头。这里要搞清楚比特币的一个概念,比特币网络是不存在比特币余额这个说法的,就是说没有地方存储比特币余额的数据,比特币余额是比特币钱包应用软件创建的派生之物。那账户拥有多少比特币是怎么体现的呢,就是通过UTXO,举个例子,A用户接收了一笔1BTC的比特币,那么这个1BTC就被当做未消费的交易输出记录在区块链里面,用户每接收一笔都会被记录。注意A用户如果用这笔钱再支付给B一部分,剩余的币会当做零钱返回给A,这笔零钱也是未消费的输出,举例:A有一个1BTC的未消费交易输出,然后他把此交易输出当做输入,支付给B用户0.5BTC,假设没有交易费,那么这个交易就会产生两个交易输出,一个是支付给B用户0.5BTC(对于A用户来讲,这0.5BTC是已消费的),一个是找零0.5BTC给A用户(对于A用户这一笔是未消费的),那么这时A用户的UTXO还有0.5BTC,把A用户的所有UTXO累加起来就是比特币的余额。

10、对于输出和输入链来说,有一个例外,它是一种特殊的交易类型,称为Coinbase交易。这是每个区块中的首个交易。这种交易存在的原因是作为对挖矿的奖励而产生全新的可用于支付的比特币给“赢家”矿工,现在简单理解是:区块的首个交易是矿工添加的比特币奖励,如果挖矿成功则通过此交易将比特币奖励支付给自己,这个过程就是比特币发行的过程,无中生有的创造输出。

11、既然比特币交易中没有账户的概念,就是说没有转账到账一说,那么怎么来用户怎么来控制和使用比特币呢?一笔比特币交易通过使用所有者的签名来解锁UTXO,并通过使用新的所有者的比特币地址来锁定并创建UTXO。怎么理解,先看一下交易输出的数据结构如下:

《精通比特币》学习:深度剖析比特币的交易过程

这里关键问题是什么是锁定脚本?锁定脚本,也被当作是“障碍”,提出支付输出所必须被满足的条件以“锁住”这笔总额。举例:A创建了一笔交易,支付B用户0.1BTC,从而创造了一个0.1BTC的输出,B作为新的拥有者,此输出就被锁定在B的比特币地址上。B在选用此输出来支付时,通过一个包含B的私钥的解锁脚本来解锁输出,障碍被释放。个人理解:比特币没有账户一说,只有交易和流通,交易输出代表的就是这一次有多少钱流转到你这里了,暂时这笔钱被锁定在这里,有一些障碍,如果你要用就用密钥签名来解锁释放障碍。

12、关于交易输入,首先要明白交易输入都是对应之前一笔未消费的交易输出(UTXO),而且UTXO有锁定脚本,那么一个交易输入也要有解锁脚本,用来满足支付条件,解锁脚本通常是一个签名,用来证明锁定脚本中的比特币地址是属于你的;然后要清楚UTXO的选择一般是钱包软件来自动选择,比如要支付0.15比特币,钱包软件会选择一个0.1和0.05的UTXO来满足付款额。交易输入的数据结构如下:

《精通比特币》学习:深度剖析比特币的交易过程

解读这个数据结构就是:本输入对应哪一个交易的第几个输出,还有本输入的解锁脚本是什么,以及解锁脚本有多长。

13、提醒特别注意交易费,交易费是“交易输入总和-交易输出总和”,在支付构建的时候,多余的币一定要找零回来,否则就会被矿工当奖励拿走了。比如:A消耗一个20比特币的UTXO来支付1比特币给B,如果A不小心没有把19个比特币找零回来,那么这19个比特币就给了矿工当小费了。另外注意交易费越高就会被矿工优先处理,当然符合条件的交易可以免交易费,具体后续再详细了解。

14、比特币交易不只是“A转给B”这么简单的形式,由脚本的存在,让比特币交易成为可编程的货币,可以支持多到数不清的条件变种。个人理解:锁定输出和解锁输入是强关联的,锁定设定条件,符合条件就让你解开,那么这个条件谁说一定只是简单的签名验证呢,是不是可以更加复杂?

15、比特币脚本语言包含许多操作,但是故意限定没有循环或者复杂流控制功能以外的其他条件的流控制(后面这段我还没完全理解,55555)。总的来说,我理解就是脚本语言的复杂性和能力受到限制,不能干很复杂的事,这样就降低被黑客利用攻击的风险。


分享到:


相關文章: