区块链V4版本交易理论
作者:互联网
传统转账:
传统银行的每个账户都会有一个数据库表来存储用户的信息,包括姓名,卡号,余额等基本信息,每产生一笔交易后,最终都会更新这个余额字段,这个数据表就是这个账户的存储结构。
转账成功与否只看这个字段的金额是否足够即可,不用把整个钱的来源检验一遍。
比特币转账:
比特币的数据库中只有交易,没有这个用来集中保存用户基本信息的数据表,也就是没有地方存储账户,没有地方存储余额。
那么比特币系统如何维护我们的钱呢?请看面这张图。
每个交易要以以前的交易为基础,而不是以特定字段记录的余额为基础,而是一切都在交易记录中。
比特币找零:
李四的钱从哪里来??张三!那张三的钱如何扣除呢?去上笔交易中修改数据么?比特币是防篡改的,那怎么办?
解决办法:把上笔交易中张三的钱全部花掉,扣除转给李四的钱,余额转给自己,对,就是自己转给自己。
这类似于我们现实生活中的找零机制!
一对一转账
手续费
大多数交易包含交易费(矿工费),这是为了确保网络安全而给比特币矿工的一种补偿。费用本身也作为一个安全机制,使经济上不利于攻击者通过交易来淹没网络。
交易费作为矿工打包(挖矿)一笔交易到下一个区块中的一种激励;同时作为一种抑制因素,通过对每一笔交易收取小额费用来防止对系统的滥用。成功挖到某区块的矿工将得到该区内包含的矿工费,并将该区块添加至区块链中。
交易费是基于交易的千字节规模来计算的,而不是比特币交易的价值。
交易的数据结构没有交易费的字段。相替代地,交易费是指输入和输出之间的差值。从所有输入中扣掉所有输出之后的多余的量会被矿工作为矿工费收集走。
交易费即输入总和减输出总和的余量:交易费=求和(所有输入)-求和(所有输出)
多对一转账
交易输出(output)如何产生
输出产生流程
先从张三给李四转账开始说起,张三给李四转账时,比特币系统会生成一个output,这个output里面包括两个东西:
- 转账金额,例如120
- 一个锁定脚本,使用李四的公钥哈希对转账金额120进行锁定,可以理解为用公钥哈希加密了。
两个注意点:
- 是公钥哈希,不是李四的地址,地址可以推出来公钥哈希(忘记请回顾第一天课件)。
- 不用关心锁定脚本是什么,目前只要理解为这个钱被李四的公钥加密了,只有李四能解开支配。
交易输入(input)如何产生
与output对应的是input结构,每一个input都源自一个output,在李四对王五进行转账时,系统会创建input,为了定位这笔钱的来源,这个input结构包含以下内容:
- 在哪一笔交易中,即需要张三à李四这笔转账的交易ID(hash)
- 所引用交易的那个output,所以需要一个output的索引(int)
- 定位到了这个output,如何证明能支配呢,所以需要一个张三的签名。(解锁脚本,包括签名和自己的公钥)
注意一个点:
- 不用关心这个解锁脚本原理,只需记得这个能解开用我公钥加密的比特币即可。
- 挖矿奖励不需要引用任何output,相当于有一个特殊的input。
解锁脚本:
脚本步骤:
- 获取B输入的签名和公钥(上图中的X)
- 将获取B的公钥做哈希运算得到一个hash值
- 将计算得到的hash值与上次交易记录中的hash值做比较(上图中的Y),判断是否相同,如果相同,表明B确实花的自己的钱。
- 检查B的公钥与签名是否匹配(上图中X传入的参数),如何不匹配,说明付款人没有B的私钥,交易失败。
未消费输出(UTXO)
我们看到当Tom给Divid转账的时候,已经花掉了Lily和jim转给他的钱,当完成给Divid的转账后,他还有找零得到的0.5btc,那这里就会涉及到output的消费问题,我们把尚未使用的output有个专用的名字,叫做未消费输出(unspent transaction output,UTXO)
- UTXO:unspent transaction output,是比特币交易中最小的支付单元,不可分割,每一个UTXO必须一次性消耗完,然后生成新的UTXO,存放在比特币网络的UTXO池中。
- UTXO是不能再分割、被所有者锁住或记录于区块链中的并被整个网络识别成货币单位的一定量的比特币货币。
- 比特币网络监测着以百万为单位的所有可用的(未花费的)UTXO。当一个用户接收比特币时,金额被当作UTXO记录到区块链里。这样,一个用户的比特币会被当作UTXO分散到数百个交易和数百个区块中。
- 实际上,并不存在储存比特币地址或账户余额的地点,只有被所有者锁住的、分散的UTXO。
- “一个用户的比特币余额”,这个概念是一个通过比特币钱包应用创建的派生之物。比特币钱包通过扫描区块链并聚合所有属于该用户的UTXO来计算该用户的余额。
- UTXO被每一个全节点比特币客户端在一个储存于内存中的数据库所追踪,该数据库也被称为“UTXO集”或者“UTXO池”。新的交易从UTXO集中消耗(支付)一个或多个输出。
标签:UTXO,转账,比特,李四,V4,版本,output,区块,交易 来源: https://www.cnblogs.com/shizhe99/p/14117992.html