主页 > imtoken国际版 > 区块链百讲:以比特币为例,5点讲解数字货币交易全过程

区块链百讲:以比特币为例,5点讲解数字货币交易全过程

imtoken国际版 2023-10-27 05:08:56

申图青年主编

编宋博、张鹏、王晓明、纪周东、左传敏

本文选题与组织:Cynthia

比特币2020减半时间_比特币减半时间查询_比特币2020年减半时间

上期《区块链百讲》介绍了哈希、挖矿、算力、加密算法等,本期重点介绍“交易与交易链”。

交易是经过签名的数据结构,在区块链网络中广播并收集到区块中。 它引用之前的一笔交易,其中特定数量的比特币被发送到一个或多个公钥(即比特币地址),并且交易未加密(比特币系统中没有数据加密)。 多个交易可以形成一个区块,这些区块也会在区块链网络中传播。 一个块将引用前一个块。 简而言之,区块链是由区块组成的。 ) 在以某种方式组织的链中。 区块链包括数以万计的区块,一个区块包含一笔或多笔交易。 上下关联交易形成一条交易链,一条交易链可能包含多笔交易。 后面的章节将对这些知识点进行详细的讲解。

1个

比特币地址

比特币地址是一串数字和字母,可以与任何想给你比特币的人共享。 从公钥(也是一串数字和字母)生成的比特币地址以数字“1”开头。 以下是比特币地址的示例:

1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy

在一次交易中,比特币地址通常以收款人的形式出现。 如果把一笔比特币交易比作一张支票,那么比特币地址就是收款人,也就是我们要在“收款人”一栏写的内容。 支票的收款人可以是银行账户、公司、机构,甚至是现金支票。 支票可以支付给一个通用名称,而不是指定一个特定的帐户,从而使其成为一种相当灵活的支付工具。 同样,比特币地址的使用也使得比特币交易变得灵活。 比特币地址可以代表一对公钥和私钥的所有者,也可以代表其他东西。

比特币地址是由公钥通过单向哈希函数生成的。 用户通常看到的比特币地址是通过“Base58Check”编码的,它使用58个字符(一种Base58数字系统)和校验和来提高可读性,避免歧义,并有效地防止地址转录和输入错误。 Base58Check编码也用在比特币的其他地方,如私钥、加密密钥、脚本Hash等,以提高可读性和入口的正确性。 图 1-1 描述了如何从公钥生成比特币地址。

比特币2020减半时间_比特币2020年减半时间_比特币减半时间查询

2个

交易的性质

交易本质上是一个包含一组输入列表和输出列表的数据结构,也可以称为转账记录,其中包括交易金额、来源、收款人等信息。 表 1-1 是比特币交易数据格式。

比特币减半时间查询_比特币2020年减半时间_比特币2020减半时间

下面通过一个具体的例子来说明区块链上的交易构成。 假设有一笔交易A,一笔交易,一笔输出,输入列表和输出列表如下:

输入:

上一个交易:f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a6

指数:0

脚本签名:304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d10

90db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b241501

输出:

价值:5000000000

scriptPubKey:OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35549d

OP_EQUALVERIFY OP_CHECKSIG

上文表示,交易A的输入0从交易f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a6的0号输出中导入了50个比特币,然后该输出发送50个比特币到一个比特币地址的公钥Hash值(404371705fa9bd789a2fcd52d2c580b65d35549d,该公钥Hash值是十六进制表示比特币减半时间查询,而不是正常的 base58 表示)。

如果收款人要花钱,他必须先创建自己的交易B,然后引用交易A的第0个输出作为交易B的输入。

3个

输入输出

输入是对其他交易输出的引用,一个交易中通常会列出多个输入。 将所有引用的输出值相加,得到的和将用于本次交易A的输出。Previous tx为上次交易的Hash值,Index为引用交易的具体输出编号,ScriptSig为脚本的前半部分(稍后将详细讨论脚本)。

该脚本包含两部分,签名和公钥。 公钥属于交易输出的收款人,表示交易创建者允许收款人获得的输出金额; 另一部分是ECDSA签名,通过交易的Hash值通过ECDSA签名获得。 签名和公钥一起证明原始地址的真正所有者创建了支付交易。

输出包含发送比特币的指令,金额(Value)是中本聪的一个值(Satoshi,1BTC = 100?000?000 Satoshi)。 ScriptPubKey是脚本的另一半(这个后面会详细讲),可以有多个输出,它们共享输入量。 交易中的每个输出只能被后续交易引用一次作为输入。 如果你不想丢币,你需要将所有输入值的总和发送到一个输出地址。 如果输入是 50BTC,但你只想发送 25BTC,那么比特币将创建 2 个 25BTC 的输出:一个到目标地址,一个返回到你的地址(称为“更改”,见 1.1. 第 5 节)。 交易过程中会产生一笔交易手续费,任何作为交易手续费支付的比特币都不能赎回,产生这个区块的矿工将收到这笔交易手续费。

为了验证某个交易的输入是否已被授权,可以收集参考输出中的所有金额。 比特币系统使用类似于 Forth 的脚本系统。 其目的是验证从某个地址发出的比特币是否真的属于该地址的所有者。 输入 scriptSig 和引用的输出 scriptPubKey 将按顺序运行。 如果 scriptPubKey 返回 true,则输入被授权,证明地址所有者发行了比特币。 通过脚本系统,发送者可以创建非常复杂的发送条件,必须首先满足这些条件才能让人们收到金额。 例如,可以创建任何人无需授权即可兑换的输出,需要 10 个不同签名的输入,或无需公钥即可仅通过密码兑换的输出。

4个

交易类型

根据目的地址的不同,交易可以分为以下几种类型。

(1)支付给公钥Hash

scriptPubKey:OP_DUP OP_HASH160

OP_EQUALVERIFY OP_CHECKSIG

脚本签名:

一个比特币地址只是一个Hash值,发送方无法在scriptPubKey中提供完整的公钥。 兑换比特币时,接收方需要同时提供签名scriptSig和公钥scriptPubKey。 脚本系统将验证公钥的哈希值。 该值是否匹配scriptPubKey中的Hash值,同时检查公钥和签名是否匹配。 检查过程见4.2.5节。

(2) 支付给脚本Hash

这种交易很有意义,以后在某些场合应该经常使用。 这类交易的接受地址不是通常意义上的地址,而是3开头的多重签名地址。例如,三对公钥可以生成一个多重签名地址。 生成过程中需要指定n in n of 3。 n的范围是[1, 3]。 如果n = 1,则只需要一个私钥签名就可以花费该地址的币。 如果n=3,则需要三个私钥依次签名。

地址以3开头,可以实现资产的多方管理,大大提高安全性,也可以轻松实现基于比特币原生的三方交易担保支付。 m-of-n 模式如下:

m {pubkey}...{pubkey} n OP_CHECKMULTISIG

其中,m和n需要满足:1≤n≤20,m≤n。

m和n可以是1 of 1、1 of 2、2 of 3等的组合,通常选择n=3。

多重签名地址的交易构造、签名和发送过程与普通交易类似。

(3) 矿业交易

挖矿(coinbase)交易用于凭空生成比特币。 一个挖矿交易只有一个输入,它有一个“coinbase”参数,没有scriptSig,“coinbase”中的数据可以是任何东西,它不会被使用。 比特币在这里存储了压缩后的当前目标哈希值和任意精度的“extraNonce”。 每次区块头中的 Nonce 溢出时,它们都会增加。 extraNonce有助于扩大工作量证明功能的范围,矿工可以轻松修改Nonce(4字节)、timestamp和extraNonce(2~100字节)。

挖矿交易的产出量在一段时间内是一个固定值,最初是50个比特币,每210,000个区块减半,目前已经减半两次,所以是12.5个比特币。 输出地址可以是任意地址,一般为矿工或矿池的比特币地址。

Nonce溢出是指在对一个区块进行哈希运算时,Nonce从0开始,每计算一次Hash就会增加一次,因此可能会超出数值范围。 这时extraNonce会相应增加,用来存储Nonce。

5个

更换地址

在实际的区块链交易中,假设A有一个比特币地址,里面有10个比特币还没有被花掉。 B 也有一个没有钱的比特币地址。 当A要付给B 10个比特币时,A的地址中未花费的输出变为零,B的将变为10 BTC。 如果A要支付的金额与他拥有的金额相同,自然不存在需要找零的问题。 但是,当手头的金额大于要支付的金额时,找零是很自然的。

假设A的地址上有35个比特币(如图1-2所示),当A想支付8个比特币给B时,如图1-2所示,只需要使用包含20个比特币的地址未消费的支出并且可以设置支持的数量,剩下的12个比特币会返还给A,以便A以后继续使用。

比特币减半时间查询_比特币2020减半时间_比特币2020年减半时间

这样就有了变化机制。 事实上,比特币在交易过程中会将用于消费的地址(消费地址)的余额置零。 当要支付的金额小于可用余额时,交易消息必须告诉比特币网络找零将发送到哪个地址,即“找零地址”。 更改地址可能是也可能不是原始发送地址。 除此之外,发送地址剩余的资金将由网络作为交易费用支付给矿工。 在上面的例子中,A可以选择将找回的找零发送到新创建的找零地址,或者将原发送地址设置为找零地址并返回找零。 虽然A将发送地址作为找零地址进行管理很方便,但也可能降低A的隐私性,也可能在一定程度上影响B的匿名性。

按照设计,每笔比特币交易都将在称为“区块链”的全球公共分类账上永久可见,这意味着任何人都可以随时跟踪它。 通过将比特币地址与其用户相关联,任何人都可以使用它来创建该人与其他人之间的汇款图表。 但如果恢复的更改被发送到新创建的地址,那么这可能会更难跟踪。

要理解这一点,请参阅图 1-3。 假设从地址A向地址B发送比特币后,找零的返回地址为A,那么区块链会显示地址A向地址B支付了一笔钱。同理,如果涉及两个或多个地址比特币减半时间查询,任何涉及接收找零的找零地址都会显示 A 是交易的付款人。 如果控制任何接收或支付地址的人的身份已知,则也可以推断出与之进行交易的其他方的身份。

现在假设地址 A 向地址 B 发起支付,但是这次将找零地址更改为新生成的地址 C,如图 1-4 所示。 没有进一步的信息,其他人只能知道有一笔交易将地址 A 的余额拆分到地址 B 和 C。地址 B 或 C 的所有者可能是也可能不是 A。由于添加了新地址C、整个交易的真相变得更加扑朔迷离:哪个地址代表收款人,哪个地址代表退回的零钱?

比特币减半时间查询_比特币2020年减半时间_比特币2020减半时间

当各方将更改发送到新创建的地址时,必须收集更多信息并消耗更多资源,以将个人身份与地址相关联。