长枪如龙9星评价
2021-04-20 16:58:49
1.比特币交易链条
比特币不是基于账户的密码货币,而是基于交易的密码货币。在基于账户的货币中,我们可以通过账户直接查询余额;但在比特币系统中,我们需要通过未花费交易输出(UTXO)来统计该地址余额。
每一笔交易都是由交易输入和交易输出构成。交易输入里面的字段主要是脚本签名(包含本次交易的签名和付款人公钥)、UTXO的索引,该字段表明了付款人信息和付款人的金额来源。其中,数字签名使用ECDSA,付款人先将本次交易关键数据(例如:UTXO索引、交易金额和收款人公钥)作为哈希函数的输入,计算相应的哈希值,再使用私钥对哈希值签名;交易输出里面的字段主要是脚本公钥(包含若干个脚本指令和收款人公钥地址的哈希值)、地址和金额。该字段主要表明收款人的地址和收款金额。
2.比特币交易步骤
(1)验证本次交易是否是可支付的。比特币的所有交易记录提供了比特币UTXO查询,只有当本次交易的UTXO对应的金额大于或等于收款金额时,该笔交易才是可支付的。
(2)用私钥签署这笔交易,并将签名放置在交易的脚本签名中。
(3)将该交易单广播出去,寻求其他实体的认可。所有合法的比特币交易最终都会被封装在历史区块之中。但是上述转账过程存在一个问题:收款人很难确认比特币所有者是否对该比特币进行双重支付。
3.双重支付
(1)无双重支付的情形。假设A有1枚比特币,要将其转给B。A首先构造一笔交易Tx1:使用私钥签署该笔交易,并将交易单Tx1广播出去。其他实体收到信息后,通过UTXO索引计算A是否有能力支付1枚比特币,如果有能力支付,则认为此次交易是合法。最后,A的钱包地址减少1枚比特币,B的钱包地址增加1枚比特币。
(2)有双重支付的情形。如果A利用同一个UTXO构造2笔交易(Tx1:从A地址转1枚比特币给B地址;Tx2:从A地址转1枚比特币给C地址),并用私钥分别签署这2笔交易。由于消息传送具有随机性与先后性,有些实体先收到第1条交易,而有些实体会先收到第2条交易,那么比特币系统会出现交易混乱,必须防止此类双花的出现。