比特币中最吸引人的应该就是去中心化了,而交易是比特币系统中最重要的部分,先看下中心化的交易和去中心化的交易的区别。
中心化的转账流程:Alice需要转账给Bob200人民币。由A银行计算手续费和检查Alice的状态并查看Alice的账户余额是否大于200+手续费接着A银行扣除手续费后将200人民币转到人行,由人行将钱转到B银行,接着B银行检查B的账户状态正常之后转账给Bob。下面再看看去中心化的比特币的转账。
首先Alice向运行在全球众多节点上的区块链网络发送请求,矿工进行交易验证并打包在一个区块内,通过算力竞争,矿工Tom获得了记账权。接着由其他矿工对Tom的工作量进行确认,当多数矿工确认Tom就会获得比特币的奖励,Alice的交易就会连接到区块链上,最后Bob就会收到转账的比特币。接下来再具体看看比特币的交易
比特币交易的本质是数据结构,这些数据结构中含有比特币交易参与者价值转移的相关信息。比特币区块链是全球分布式记账总账簿,每个比特币交易都是在比特币区块链上的一个公开记录。不管是支付宝还是其他的一些支付工具都仅仅是信息的交换,而比特币算是真正实现了价值在互联网上的流动。
交易结构
比特币交易是一个含有输入值和输出值的数据结构,比特币交易的基本单位是未经使用的一个交易输出(Unspent Transaction Output),简称UTXO。在比特币的世界里既没有账户,也没有余额,只有分散到区块链里的UTXO。当一个用户接收比特币时,金额被当作UTXO记录到区块链里。这样,一个用户的比特币会被当作UTXO分散到数百个交易和数百个区块中。而需要支付时钱包就会扫描区块链并合并所有用户的 UTXO。 前面已经说了UTXO是不可分割的,这就表明了在支付时UTXO会被当做一个整体消费掉。这时多余的比特币就会产生找零。比如你有20比特币的UTXO,去购买1比特币的咖啡,这笔交易必须消耗掉整个20比特币的UTXO并且产生两个输出:一个是支付了1比特币购买咖啡,另一个是支付19比特币的找零。被交易消耗的UTXO被称为交易输入,由交易创建的UTXO被称为交易输出。通过这种方式,一定量的比特币在不同所有者之间转移,并在交易链中消耗和创建UTXO。通过这种输入输出的方式就形成了交易链。下图的vin便是输入,vout就是输出。输入中的txid是指向交易包含的被花费的UTXO的哈希指针,scriptsig是解锁脚本,输出中的value代表了输出到这个地址的比特币的金额。scriptPubkey是锁定脚本。
大多数交易包含交易费,交易费基于交易的尺寸,用千字节来计算,而不是比特币的价值。交易费高的交易,会有更高的交易处理的优先级。而交易费不足或者没有交易费的交易可能会被推迟,但交易费不是强制的。
所以,其实并没有什么比特币,只有 UTXO。当我们说 Alice有20 个比特币的时候,实际上是说,当前区块链账本中,有若干笔交易的 UTXO 项收款人写的是Alice的地址,而这些 UTXO 项的数额总和是 20。