主页 > 苹果怎么下载imtoken > 我写的越多,“掌握比特币”的交易阅读笔记就越开心

我写的越多,“掌握比特币”的交易阅读笔记就越开心

苹果怎么下载imtoken 2023-01-17 01:43:32

精通比特币-图片来自简书App

今天越来越开心的系列为大家带来《精通比特币》阅读笔记交易章节分享。

简介

比特币交易是比特币系统中最重要的部分。根据比特币系统的设计原则,系统的任何其他部分都是为了保证比特币交易能够在比特币网络中产生、传播和验证,并最终加入全球比特币交易账本。比特币的本质是包含比特币交易参与者价值转移信息的数据结构。比特币区块链是全球复式账本,每一笔比特币交易都是比特币区块链上的公开记录。

如果没有交易,就不会有价值转移。没有价值转移就没有共识,没有共识就没有价值信任。

交易详情

爱丽丝和鲍勃的交易摘要-图片来自简书App

比特币交易怎么收费

实际交易 看起来与典型区块浏览器非常不同的交易。事实上,我们在各种比特币应用程序的用户界面中看到的大多数高级结构实际上并不存在于比特币系统中。我们可以使用 Bitcoin Core 的命令行界面来检索 Alice 的“原始”交易,对其进行解码,然后查看其中包含的内容。

{
  "version": 1,
  "locktime": 0,
  "vin": [
    {
     "txid":"7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18",
      "vout": 0,
      "scriptSig": "3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813[ALL] 0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf",
      "sequence": 4294967295
    }
 ],
  "vout": [
    {
      "value": 0.01500000,
      "scriptPubKey": "OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG"
    },
    {
      "value": 0.08450000,
      "scriptPubKey": "OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG",
    }
  ]
}

你有什么发现吗?还是缺乏实际交易双方的细节?

交易输入输出

比特币交易的基本组成部分是交易输出。交易输出是比特币不可分割的基本组成,以区块形式记录,被全网认可为有效。比特币全节点跟踪所有可找到和可用的输出,称为“未使用的交易输出”或 UTXO。所有 UTXO 的集合称为 UTXO 集,目前有数百万个 UTXO。当创建新的 UTXO 时,UTXO 集会变大,而当 UTXO 被消耗时,UTXO 集会缩小。每笔交易都代表 UTXO 集的一次变化(状态转移)。

一个交易消耗之前记录的(现有的)UTXO,并为未来的交易消耗创建新的UTXO。通过这种方式,一定数量的比特币价值在不同的所有者之间转移,UTXO在交易链中被消费和创造。比特币交易使用所有者的签名解锁UTXO,并使用新所有者的比特币地址锁定和创建UTXO。

交易输出

比特币交易怎么收费

UTXO 由 UTXO 集 (UTXOset) 中的每个全节点比特币客户端跟踪。一个新的交易消耗(花费)来自 UTXO 集合的一个或多个输出。交易输出由两部分组成:

这个密码谜题也被称为锁脚本。现在,让我们看看 Alice 的交易,看看我们是否可以找到并识别输出。

"vout": [
  {
    "value": 0.01500000,
    "scriptPubKey": "OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY
OP_CHECKSIG"
  },
  {
    "value": 0.08450000,
    "scriptPubKey": "OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG",
  }
]

如您所见,交易包含两个输出。每个输出都由一个值和一个密码谜题定义。在Bitcoin Core显示的编码中,价值以比特币显示,但在交易本身中,它被记录为以satoshis为单位的整数。每个输出的第二部分是一个设置支出条件的密码谜题。 Bitcoin Core 将其显示为 scriptPubKey 并向我们展示了脚本的可读表示。锁定和解锁 UTXO 的主题将在后面的脚本构建(锁定 + 解锁)中讨论。用于在 ScriptPubKey 中编辑脚本的脚本语言在事务脚本和脚本语言一章中讨论。但在深入探讨这些主题之前,我们需要了解交易输入和输出的整体结构。

交易输出的序列化格式-图片来自简书App

大多数比特币函数库和架构不会将内部事务存储为字节流,因为每次需要访问单个字段时都需要进行复杂的解析。为了方便和可读性,比特币库内部将交易存储在数据结构(通常是面向对象的结构)中。

比特币交易怎么收费

将事务的字节流表示转换为库的内部数据结构表示的过程称为反序列化或事务解析。转换回字节流以通过网络传输、散列或存储在磁盘上的过程称为序列化。大多数比特币函数库都内置了用于交易序列化和反序列化的函数。

交易输入

交易输入将 UTXO(通过引用)标记为被使用,并通过解锁脚本提供所有权证明。为了构建交易,钱包从它控制的 UTXO 中选择足够的值来执行请求的支付。有时一个 UTXO 就足够了,有时不止一个。对于将用于进行此付款的每个 UTXO,钱包将创建一个指向 UTXO 的输入并使用解锁脚本将其解锁。

让我们更详细地看一下输入组件。输入的第一部分是指向 UTXO 的指针,通过指向区块链中记录 UTXO 的交易的哈希和序列号来实现。第二部分是解锁脚本,钱包构建该脚本以满足 UTXO 中设置的消费条件。在大多数情况下,解锁脚本是证明比特币所有权的数字签名和公钥,但并非所有解锁脚本都包含签名。第三部分是序列号比特币交易怎么收费,后面会讲到。考虑我们在上一章中提到的幕后交易的例子。交易输入是一个名为 vin 的数组:

"vin": [
  {
    "txid": "7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18",
    "vout": 0,
    "scriptSig" : "3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813[ALL] 0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf",
    "sequence": 4294967295
  }
]

如你所见,列表中只有一个输入(因为一个UTXO包含足够的值来做这个支付)。输入包含四个元素:

仅查看此输入,您可能已经注意到,除了包含其引用的交易外,我们无法了解有关此 UTXO 的任何信息。我们不知道它的价值(多少 satoshi 数量),我们不知道设置支出条件的锁定脚本。要查找此信息,我们必须通过检索整个事务来检索引用的 UTXO。请注意,由于没有明确说明输入的值,因此我们还必须使用引用的 UTXO 来计算在此交易中支付的费用(请参阅后面的交易费用部分)。

比特币交易怎么收费

不仅仅是 Alice 的钱包需要检索输入中引用的 UTXO。一旦交易被广播到网络,每个验证节点还需要检索交易输入中引用的 UTXO 以验证交易。

当交易被序列化以通过网络传输时,它们的输入被编码成字节流,如下表所示

交易输入的序列化格式-图片来自简书App

交易费

大部分交易都包含交易费(矿工费),这是为了保证网络安全而给予比特币矿工的一种补偿。费用本身也作为一种安全机制,使攻击者在网络上充斥交易在经济上是不利的。

交易费作为激励矿工将交易打包(挖掘)到下一个区块;它还通过对每笔交易收取少量费用来防止滥用系统,从而起到抑制作用。成功挖出一个区块的矿工将获得该区块所包含的挖矿费,并将该区块加入区块链。

比特币交易怎么收费

交易费用是根据交易的千字节大小计算的,而不是比特币交易的价值。一般来说,交易费用是根据比特币网络中的市场力量确定的。矿工根据许多不同的标准(包括费用)对交易进行优先级排序,在某些特定情况下,他们甚至可以免费处理交易。但在大多数情况下,交易费用会影响处理优先级,这意味着具有足够费用的交易更有可能被包含在下一个挖出的区块中;否则,交易费用不足或没有交易费用的交易可能会被延迟。 , 尽最大努力在几个块之后处理,或者甚至可能根本不处理。交易费用不是强制性的,没有交易费用的交易最终可能会被处理,但是,交易费用将提高处理优先级。

随着时间的推移,交易费用的计算方式及其对交易处理优先级的影响发生了变化。最初,交易费用是固定的,是网络中的一个固定常数。逐渐地,随着网络容量和交易量的不断变化,并可能受到市场力量的影响,费用结构开始放松。至少从 2016 年初开始,比特币网络容量限制造成交易之间的竞争,导致更高的费用,免费交易完全成为过去。零费用或极低费用的交易很少得到处理,有时甚至不会在网络上传播。

将交易费用添加到交易中

交易数据结构没有交易费用字段。相反,交易费用是指输入和输出之间的差异。所有输入减去所有输出后的剩余部分将由矿工收取作为矿工费:

交易费用是输入总和减去输出总和的余数:交易费用 = sum(所有输入)- Summation(所有输出)

正确理解交易很困难,但很重要。因为如果你要构建自己的交易,你必须确保你没有通过在交易中增加大笔交易费用而无意中减少了输入的可花费金额。这意味着您必须计算所有输入并在必要时添加更改,否则您最终会向矿工支付可观的人工费用!

交易费用可以看作是现实生活中的交易费用。

个人印象

交易是比特币系统的核心组成部分。结合交易脚本和比特币函数库可以完成整个交易过程,包括交易发起。交易签名,交易验证,最后加入区块链账本。交易脚本类似于计算机中的汇编语言,可以直接执行计算机的指令,也就是说,交易脚本可以直接在比特币系统中执行,无需额外的处理和解析。那么UTXO的不断增加和消耗伴随着比特币价值在不同所有者之间的转移。到目前为止,比特币系统没有出现重大系统漏洞和安全事件比特币交易怎么收费,这说明它对于比特币底层系统的构建和设计来说是一个非常成功的区块链应用。对于其他基于区块链技术的区块链平台来说,也是一种有意义的实践。我相信这只是一个开始。未来会出现更多区块链平台,承载更丰富的区块链应用场景,引入更多技术解决生活痛点,让更多人意识到区块链技术给我们带来的便利。相信会有越来越多的人加入到这个巨大的变革中来,只有每个人都起来了,我们才能繁荣和推广这种已经成熟的技术。如果我的文章能给您带来启发,那将是我的荣幸。