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 条交易,那么比特币系统会出现交易混乱,必须防止此类双花的出现。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。