返回介绍

2.交易

发布于 2024-12-29 22:37:17 字数 3228 浏览 0 评论 0 收藏 0

在开始前,记住要创建一个新章节的类。

交易是比特币的传输。一个交易可能没有接受者,或者有好几个。发送者也一样。在区块链上,发送者和接受者总是被抽象为 ScriptPubKey,就像我们在第 10 章演示的一样。假设你已经学习完了第 4 课以及相关的练习,我们继续向前。如果你没有完成练习,继续前请向先前你生成的地址汇款。

如果你使用 Bitcoin Core,你的交易标签页将如下显示交易信息:

现在我们关注一下交易 ID。这里它就是:f13dc48fb035bbf0a6e989a26b3ecb57b84f85e0836e777d6edf60d87a4a2d94

交易 ID 由 SHA256 定义。

不要使用交易 ID 处理未经确认的交易。在正式确认前交易 ID 是可以被更改的,叫做 交易可塑性

你可以在类似 Blockchain.info 这样网站上检查交易,但是作为一个开发人员,你将需要一个易于查询分析的服务。截止本文时,我们发现 Blockr.io 是一个不错的服务。

如果你上 http://btc.blockr.io/api/v1/tx/raw/f13dc48fb035bbf0a6e989a26b3ecb57b84f85e0836e777d6edf60d

87a4a2d94 看看,就可以看到交易的原始字节。

NBitcoin 查询 blockr,为你分析信息,所以你就不需要手工来做了。

public void Lesson1()
{
    var blockr = new BlockrTransactionRepository();
    Transaction transaction =
    blockr.Get("4ebf7f7ca0a5dafd10b9bd74d8cb93a6eb0831bcb637fec8e8aabf8
        42f1c2688");
    Console.WriteLine(transaction.ToString());
}
"hash": "4ebf7f7ca0a5dafd10b9bd74d8cb93a6eb0831bcb637fec8e8aabf842f1c2688",
"ver": 1,
"vin_sz": 1,
"vout_sz": 2,
"lock_time": 0,
"size": 225,
"in": [
{
    "prev_out": {
        "hash": "bf7d91ac70917f98b497927e1b07267507652b206df14ecdba2e9390b9bffc65",
        "n": 0
    },
    "scriptSig":
    "3044022069b6b0f1a8d453bdb89e3ad475232b8e01d2851e7b53acab3f830f40e80b3b5102203c049
    867975360020293c735d48b4a2dda003aa781c1d8ccd2c7af290dcd11de01
    02e3538427350039e67ea99e935cefb740badf3d09ebc301b0bc9d1bb0301a3417"
}
],
"out": [
{
    "value": "0.08990000",
    "scriptPubKey": "OP_DUP OP_HASH160 5b1d720daf0e95e37d0eaedd282b6ed9a40bab71
    OP_EQUALVERIFY OP_CHECKSIG"
},
{
    "value": "0.01000000",
    "scriptPubKey": "OP_DUP OP_HASH160 71049fd47ba2107db70d53b127cae4ff0a37b4ab
    OP_EQUALVERIFY OP_CHECKSIG"
}
]

现在相关部分包括 in 和 out。你可以看到 0.0899 比特币被发送给 ScriptPubKey,0.01 比特币被发送到另外一个地方。(练习:验证 ScriptPubKey 中的公钥是否与你付款地址相关联的一样)

如果你注意一下 in,你就发现 prev_out(先前的 out)被引用了。每一个 in 都告诉你先前的哪一个 out 被使用了,这样就可以为交易付款。术语 TxOut 和 Output 对 Out 是匿名的。

总的来说,TxOut 代表一定数量的比特币和一个 ScriptPubKey。(接收端)

每一个 out 都有一个由交易 ID 和索引定义的地址,叫做 Outpoint。比如,在我的这次交易中 0.01 比特币的 out 对应的 Outpoint 就是(71049fd47ba2107db70d53b127cae4ff0a37b4ab, 1).

现在让我们看看交易中的 in(也叫 TxIn、Inputs)

TxIn 包含正在花出去的 prev_out 的出口、以及同时被叫做 所有权证明 的 ScriptSig。在我的例子里,prev_out 的出口是(7def8a69a7a2c14948f3c4b9033b7b30f230308b, 0)

我们代换第一课代码中的交易 ID,就可以检查交易相关的信息。我们可以继续按此方法追踪这个交易 ID 到比特币的 coinbase,也就是他们被挖出来时所在的区块。

在我们的例子里,prev_out 总使用量为 0.1BTC。在这次交易中,0.0899BTC 和 0.01BTC 都被发出去了。意味着还有 0.0001BTC 没有下落。发送和收到之间的差额被称之为交易费用或者挖矿费用。矿工将指定的交易包含在区块里面,因此需要收费。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文