主页 > imtoken苹果版下载官网 > 了解比特币交易

了解比特币交易

imtoken苹果版下载官网 2023-12-29 05:07:09

一般的电子支付平台是集中的和基于账户的。我们必须先开立账户,然后才能进行存款、取款和转账。比特币在这方面非常不同。它是一个完全基于交易数据的分布式账本。形式更类似于现金交易,在中心化平台下直接转账,而不是改变账户余额的金额。让我们解释一下这个机制的内部原理以及采用它的原因。

交易格式

在古装剧中,我们经常看到人们用几块银子付账:挑一块或几块银子,凑够钱,付给店家;如果你找不到钱,你可以把银子切成碎片。比特币与使用白银的方式非常相似。在交易过程中,钱包软件会从钱包中选择一个或几个适当数量的比特币,打包生成交易数据,通过分割实现找零。

在代码层面,Transaction代表交易,TxIn代表交易的输入,即支付,TxOut代表交易的输出,即支付。 Transaction 包含一个 TxIn 数组和一个 TxOut 数组。 TxOut 对象包含金额信息和用于验证交易的脚本(称为锁定脚本)。它类似于碎银,这是我们在交易时实际使用的货币。它在比特币中被称为 Coin(也称为 UTXO:Unspent Transaction Output)。锁定脚本代表所有者的身份令牌。以后在消费此币时,将通过脚本验证交易者的身份信息,确认币的所有权。 TxIn 对象包含前一个 TxOut 对象的索引和交易发起者的身份信息(称为解锁脚本)。

在每笔交易中,原Coin经过等量的变换(可能被拆分或重组)转化为新的Coin,并标明收款人的身份。交易信息被打包成区块,组装成区块链,形成比特币账本。

硬币

碎银来自银锭,通常由政府铸造。铸造比特币的过程称为挖矿。矿工通过哈希碰撞获得铸币的权利,然后创建一个比特币,记录在区块链中,让这个币开始进入比特币流通系统。

由于比特币的账本是基于交易信息的,因此挖矿作为一种特殊的“无中生有”交易(Coinbase 交易)被记录到区块链中。该事务不需要实际输入,它的 TxIn 是虚拟的,不需要指向之前的 TxOut 对象。与普通交易一样,CoinBase 交易的输出是最终生成的新 Coin,并会打上矿工的身份标记以表明所有权。此外,矿工负责将交易信息打包成区块并广播到 P2P 网络。在此过程中,矿工将统计并收取打包交易中的交易费用,作为自己的挖矿奖励的一部分,计入挖出的Coin数量中。

交易验证

因为碎银子是真品,所以它的归属一般没有争议,谁持有就可以认为谁持有。虽然比特币是一种数字货币和资产,但需要一种机制来识别和验证所有权。比特币实际上使用了 secp256k1 椭圆曲线加密算法和基于脚本的自定义验证过程。前者为比特币的交易安全奠定了坚实的基础,而后者则允许上层应用灵活定制和扩展交易方式,如基于多重签名的中介担保、联名账户等。

对于数字内容和数字资产的识别,一般使用数字签名。基于非对称加密算法,私钥用于对数据进行签名,公钥用于验证签名。比特币也是如此。交易发起者使用自己的私钥对交易核心信息的哈希进行签名,并将签名数据放入TxIn的解锁脚本中。收款人的公钥数据和验证指令放在交易的TxOut的lock脚本中,在以后使用时验证这个TxOut的有效性。

这里有两个 TxOut 对象,注意不要混淆它们。一个是当前事务的接收方TxOut,另一个是之前接收到的与当前事务的TxIn相对应的TxOut。请记住,TxIn 只是前一个 TxOut 对象的索引加上用户在使用它时的签名。验证交易时,使用的是 TxIn 及其对应的之前的 TxOut,而不是当前交易收款人的 TxOut。如果说 TxOut 就像一块银子锁在一个锁着的盒子里,那么 TxIn 就相当于提供了一个盒子位置的地图和解锁它的钥匙。

上述验证过程是比特币钱包普遍使用的方法。 Bitcoin Core 只提供了一套基于脚本的自定义验证机制。具体操作可以由上层钱包应用独立选择。以下是一些常用的脚本模板:

最简单的验证脚本(在早期版本中使用)

Pubkey script:  OP_CHECKSIG
Signature script: 

通用 P2KH 验证脚本

Pubkey script: OP_DUP OP_HASH160  OP_EQUALVERIFY OP_CHECKSIG
Signature script:  

P2SH 验证脚本

Pubkey script: OP_HASH160  OP_EQUAL
Signature script:  [sig] [sig...] 

多重签名验证脚本

2-3 P2SH多重签名验证脚本

Pubkey script: OP_HASH160  OP_EQUAL
Redeem script:      OP_CHECKMULTISIG
Signature script: OP_0   

账户和钱包

比特币的核心没有账户的概念,只有公钥和私钥对可以进行交易。在上层应用中,会将公私钥对打包成一个账户,方便用户使用。因此,无需在任何地方申请比特币账户。个人可以随意创造,也可以创造很多。

比特币钱包是普通用户满足用户转账和消费需求的上层应用。钱包可以创建一个或多个账户,钱包的余额就是钱包里所有账户名下的Coin/UTXO的总和,就像古人的钱袋子一样。

原因

为什么比特币不使用基于账户的簿记?原因仍然是去中心化。

在基于账户的支付系统中,交易是严格有序的,每一笔交易都对应着账户余额的相应变化。只有中心化的服务器才能保证交易的顺序和数据的一致性。

但是比特币是完全去中心化的,没有中央服务器来控制交易的顺序。例如比特币账户怎么开通,可能同时有多人向同一个账户转账。这时,不同的节点以不同的顺序接收到这些交易信息,他们看到账户余额的方式也不同。这样比特币账户怎么开通,账户余额信息就无法保持不同节点的数据一致性。再比如,一个账户连续发起多笔交易。尽管这些交易是本地有序的,但是当它们在 P2P 网络中传播时,不能保证它们以相同的顺序传输到所有节点。在这种情况下,基于账户和余额的交易可能会出现问题,无法正确验证。

因此,比特币选择了传统的货币交易方式,直接跟踪记录货币本身的转移,而不是记录账户余额的变化,从而绕过了上面列出的问题。

结论

去中心化很棒,但它也限制了比特币的功能和性能。但这激发了业内人士的创造力和想象力。通过他们的不断努力,他们设计了各种巧妙的解决方案来改进现有系统并扩展新的应用,这也是区块链技术特别有吸引力的一个方面。