BTC源码分析 交易

Posted 十年区块链

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BTC源码分析 交易相关的知识,希望对你有一定的参考价值。

概念

在《比特币:一种点对点的电子现金系统》中,电子货币被定义为:每一位所有者通过对前一次交易和下一位拥有者的公钥(Public key) 签署一个随机散列的数字签名,并将这个签名附加在这枚电子货币的末尾,电子货币就发送给了下一位所有者。

据此,我们可以理解到,电子货币被设计成以交易为载体表现,而实际上,在源码中,电子货币确实无实体类。
交易拥有交易输入交易输出两个重要的属性。交易输入包含着上一笔交易的信息,及所有者的所有权证明。交易输出则包含着接收者的信息,以及转账数量。
电子货币的所有者发起一笔交易时,可在交易输入使用此前收到交易信息、附上所有权证明,并在交易输出中填写转账数量及接收者的信息。输入数量与输出数量相比,多的部分则被当作手续费(Fee)。

疑问

  1. 为何电子货币不以实体类进行表示,而要间接通过交易表示?

数据结构

在bitcoin-0.1.5中,与交易相关的数据结构主要集中在main.h文件中,类图如下:

CTransaction int nVersion vector<CTxIn> vin; vector<CTxOut> vout; int nLockTime CTxIn COutPoint prevout CScript scriptSig unsigned int CTxOut int64 nValue CScript scriptPubKey COutPoint uint256 hash unsigned int

CScript是脚本类,可暂时抽象理解为存放所有权证明。
CTransaction包含一组CTxIn及一组CTxOut。CTxOut较为简单,仅包含数量和凭证。而CTxIn同样包含凭证,但却用COutPoint定位到属于自己的交易输出
COutPoint仅包含一份哈希值及非负整数n,其中哈希值是交易哈希,而非负整数n则用于定位交易输出中的第n个输出。

链上数据

Block 170中,有一份交易
f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16,是传说中2009 年1月12日,中本聪发送了 10 个比特币给密码学专家哈尔芬尼。
在区块链浏览器中,我们可以看到这比交易的详细情况。

该笔交易有一个输入,两个输出,其中第二个输出地址与输入地址相同,手续费为0BTC,而顺着输入地址往上溯源,最终可发现12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S用于交易的BTC源自Block9的挖矿收入。

以上是关于BTC源码分析 交易的主要内容,如果未能解决你的问题,请参考以下文章

BTC源码分析 准备

比特币创建交易源码分析

[Fabric/源码分析] Proposal 消息处理流程(v1.0)

精解EOS标准货币体系与源码实现分析

Fabric源码分析之Peer链码安装

数字藏品NFT交易平台系统开发-流程分析-数字藏品交易平台现成源码案例