主页 > 华为手机如何下载imtoken钱包 > 比特币的原理是什么,它是如何产生的,又是如何交易的?

比特币的原理是什么,它是如何产生的,又是如何交易的?

我们先来看看比特币交易。比特币交易的过程实际上就是不断创建区块的过程。为了方便理解,我们先来看一个简单的模型账本。在这本账簿中,每笔交易都按顺序添加到账本中。

那么我们如何使用这个账本来创建货币呢?您可能会想到的第一件事(以及许多人将其误认为比特币的方式):建立一个以帐户为中心的系统比特币是怎么生成的,可以创建新硬币并将其放入某人的帐户,然后转移给其他人。一笔交易的消息是这样的:“将 17 个硬币从 Alice 的账户转移给 Bob”,然后由 Alice 签名。从图3.1我们可以看到Alice在第一笔交易中收到

25 个币,然后把 17 个币转给 Bob,她的账户里应该还有 8 个币。

图 3.1 基于账户的账本

这样做的不便之处在于,任何想要确认交易真实性的人都必须跟踪每个账户的余额。再看图3.1,爱丽丝想把15个币转给大卫的时候,真的有15个币吗?为了弄清楚这一点,我们必须回过头来查看与 Alice 相关的所有交易,并加起来以确认当时的余额。当然,我们可以有一些更有效的方法,比如在每次交易后增加一个数据字段来更新账户余额,但这也增加了记账的工作量。

因此,比特币并没有采用这种记账方式,而是采用类似的方式来记录与我们在第一章1.5中提到的“奴隶币”的交易。

这种方法就像Scrooge中的支付硬币,每笔交易都有一个输入值和一个输出值。输入值可以看成是要消耗的币(这些币是之前交易创造的),输出值可以看成是本次交易创造的币。铸造新币时,只创造新币,不消耗旧币(就像Scrooge币中的铸币一样,只有输出,没有输入)。每笔交易都有一个唯一的 ID。每个事务中可能有多个输出,输出的索引从 0 开始,所以我们称第一个输出为“输出 0”。

我们现在看图 3.2。交易1是铸造新币的交易,所以没有输入,也没有签名;交易 1 的输出是向 Alice 转移 25 个硬币。现在,Alice 想向 Bob 转账一些硬币,她创建了一个新交易,即图 3.2 中的交易 2。在交易中,她必须清楚地表明要转移的硬币的来源(引用之前的交易)。Alice 指出,本次交易的币来自交易 1 的输出 0(也是交易 1 的唯一输出),即 25 个币转给了 Alice。在交易中,Alice 还需要指定收款人——即输出的地址。在这个例子中,有两个输出,一个是给 Bob 转 17 个币,另一个是给 Alice 自己转 8 个币。. 当然,

图3.2 类似​​于比特币的基于交易的账本

地址翻译。在这个例子中,爱丽丝为什么要将硬币转移给自己?事实上,比特币就像 Scrooge Coin 中描述的货币。一笔交易输出的币要么在另一笔交易中被完全消耗掉,要么都没有被消耗掉,不会出现只消耗一部分币的情况。Alice 只需要付给 Bob 17 个币,但 Alice 在之前的交易中实际上收到了 25 个币,而为了花掉所有这些币,她必须将 8 个币转给自己。

这 8 个币可以转移到另一个地址(不同于交易 1 中获得 25 个币的地址),但前提是该地址为 Alice 拥有,这称为地址转移。

有效验证。当新交易添加到账本时,它的有效性是否容易验证?在此示例中,我们要检查 Alice 引用的交易输出,以确认她确实有 25 个硬币尚未使用。因为我们使用的是哈希指针,所以验证速度很快。为了确认这 25 个币没有被花掉,我们只需要从 Alice 引用的交易开始,继续检查直到账本上记录的最新交易——而不是从创建账本时的交易开始。此外,这种方法不需要添加额外的数据结构(当然,正如我们将看到的,添加新的数据结构将进一步提高速度)。

资金整合。与 Scroogecoin 一样,比特币交易可以有许多输入和输出,并且资金很容易分离和合并。假设 Bob 在两次不同的交易中收到了 17 个币和 2 个币,现在他想把这两个币结合起来消费,这很容易,他只需要发起一笔交易,这笔交易有两个 Input 和一个 output,地址为输出是他自己的地址,所以 Bob 将两个交易合二为一。

共同支付。同样,共同支付很容易做到。如果 Carol 和 Bob 想一起给 David 付款,他们可以发起一个同样有两个输入和一个输出的交易比特币是怎么生成的,唯一的区别是两个输入指的是“最后一个交易”的输出地址不同,因此,这个交易需要两个签名: 卡罗尔和鲍勃的。

事务语法。比特币交易中涉及的概念

就是这样。让我们看看比特币交易是如何在幕后实现的。事实上,比特币在网络上传输的数据结构是一串字符。图3.3 展示了一个真实的程序,它将被编译成二进制代码供机器执行。

图3.3 一个真实的比特币交易程序段

从图3.3可以看出,上面是一笔比特币交易。让我们看看比特币交易是如何在幕后实现的。事实上,比特币在网络上传输的数据结构是一串字符。图3.3 展示了一个真实的程序,它将被编译成二进制代码供机器执行。

分为三部分:元数据、一系列输入和一系列输出。

● 元数据。这里存储了一些内部处理信息:包括交易的大小,输入的数量,输出的数量,以及这个交易的哈希值,也就是这个交易的唯一ID。我们可以使用一个哈希指针来指向这个 ID。最后还有一个“锁定时间”(lock_time),我们后面会讲到。

● 输入。所有输入都按顺序排列,每个输入的格式都相同。输入需要显式声明先前交易的某些输出,因此它包含该先前交易的哈希,使其成为指向该特定交易的哈希指针。这个输入部分包含之前交易输出的索引和一个签名:我们必须有一个签名来证明我们有权控制比特

货币。

● 输出。所有输出也按顺序排列。每个输出的内容分为两部分。所有输出量的总和必须小于或等于输入量的总和。当产出总量小于投入总量时,产出总量与投入总量的差额作为交易费用支付给记账该交易的矿工。

一长串有趣的字符,看起来像一个接收地址。实际上,每一个输出都对应一个特定的公钥(地址),所以这长串字符的一部分看起来确实像公钥的哈希值,但一部分看起来像指令集什么的,它实际上是一个比特币脚本