主页 > imtoken官网安卓下载 > 普林斯顿大学课程 (三) - 比特币如何运作

普林斯顿大学课程 (三) - 比特币如何运作

imtoken官网安卓下载 2023-01-16 23:44:43

原文链接:

版权归作者所有。商业转载请联系作者授权,非商业转载请注明出处。

本文约3500字+,阅读需要21分钟(观看)

3.1 比特币交易

将 17 个硬币从 Alice 的账户转移给 Bob:

交易 1 是铸造新硬币的交易,没有输入,只有输出。交易 1 的输出是向 Alice 转移 25 个硬币。现在,Alice 想给 Bob 转账一些币,她创建了一个新的交易,在交易中她必须清楚地指出要转移的币的来源(引用之前的交易),在这个交易中,Alice 需要指定接收者 -输出的地址。在这个例子中,有两个输出,一个是给 Bob 转 17 个币,另一个是给 Alice 自己转 8 个币。

从上图中可以看出,一笔比特币交易分为三部分:元数据、一系列输入和一系列输出。元数据:这里是一些内部处理信息:包括交易的大小,输入的数量,输出的数量,以及这个交易的哈希值,也就是这个交易的唯一ID。我们可以使用一个哈希指针来指向这个 ID。最后比特币怎么运行的,如果有“锁定时间”超时,事务将不会建立。

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

输出:所有输出都按顺序排列。每个输出的内容分为两部分。所有输出量的总和必须小于或等于输入量的总和。当输出总量小于输入量时,将输出总量与输入总量的差额支付给记录该交易的矿工作为交易费用。每个输出必须对应一个特定的公钥(地址)。

比特币平台关闭后比特币怎么办_比特币现金和比特币区别_比特币怎么运行的

3.2 比特币脚本

每个交易输出不仅确定一个公钥,还指定一个脚本。一个是输入脚本,另一个是输出脚本。

简单脚本示例:

脚本的前两条指令是数据指令,它们是输入脚本中的签名(包含在交易的输入中)和用于验证签名的公钥。一旦它看到一条数据指令,系统就会将它堆叠在堆栈的顶部。首先,我们复制指令 OP_DUP。这一步只是复制栈顶的公钥,放到栈顶。下一条指令是 OP_HASH160。该指令取栈顶的数据,计算其哈希值,然后将结果入栈到栈顶。当指令执行时,我们将栈顶的公钥替换为公钥的哈希值。

接下来,我们需要在战斗的顶部推送一些数据:本次交易的发送者指定的公钥的哈希值,以及对应的私钥,这样就可以完成签名并获得资金。

此时,栈顶有两个值,一个是发送方指定的公钥的哈希值,另一个是接收方想要获取的时候提交的公钥的哈希值资金。

这时候我们会执行EQUALVERIFY命令,用来检查栈顶的两个值是否相等。如果它们不相等,则会抛出失败信号并停止脚本执行。假设它们相等,则意味着接收者使用了正确的公钥。该指令删除栈顶的两条数据。此时,堆栈上还剩下两条数据:公钥和签名。

我们已经验证了接收方使用的公钥确实是交易中指定的公钥,但是现在我们需要证明签名是真实的。在这种情况下,请使用 OP_CHECKSIC 指令。

比特币平台关闭后比特币怎么办_比特币怎么运行的_比特币现金和比特币区别

从堆栈中取出两个值,然后使用公钥验证整个交易的签名是真实的。

3.3 比特币脚本应用程序

第三方配送交易:网上购物可以使用第三方支付交易。第三方支付交易可以使用“MULTISIC”(多重签名)来实现。爱丽丝不直接付款

相反,对于 Bob,发起一个多重签名交易,并规定在三个人中的两个签名之前不能提取资金。三人分别是 Alice、Bob 和第三方

仲裁人。

区块链的一个众所周知的应用是智能合约,可以使用技术手段来执行。

3.4 个比特币块

比特币的区块链结构:

比特币现金和比特币区别_比特币平台关闭后比特币怎么办_比特币怎么运行的

一个是将区块链链接在一起的哈希链,另一个是区块内部交易哈希值的默克尔树

区块头的哈希函数必须以一串零开头才有效,并且区块头还包括一个矿工可以修改的“临时随机数”、一个时间戳和一个点(该点用来表示块被发现。)块的难度)块头在挖掘过程中是唯一的哈希,所以要验证一个块的链,只需检查块头。区块头中唯一的交易数据是交易树的根——“mrkl_root”

每个区块的默克尔树上都有一个特殊的交易——coinbase 交易(coinage)

1.每 4 年减半(奖励为每 210000) 产生 12.5 个比特币

2.平均每10分钟产生一个区块,挖矿难度每2016个区块(2周)变化一次

3.没有“1比特币”这样的东西,最小值是0.00000001BTC(中本聪)

2009 年 1 月 3 日,比特币创始人中本聪(Satoshi Nakamoto)在创世区块(coinbase 中)留下了不可改变的一句话:“TheTimes 03/Jan/2009 Chancellor on bilout of second bailout for banks (2009 The Chancellor was on the verge) 2009 年 1 月 3 日实施第二次银行救助)。” 就在那时,英国财政大臣达林被迫考虑对银行业危机进行第二次救助,泰晤士河的话是当天头版文章的标题。

因此我们可以将信息存储在 coinbase 中以供将来检测,因为它无法更改。

比特币平台关闭后比特币怎么办_比特币怎么运行的_比特币现金和比特币区别

3.5比特币网络

比特币如何运作:

1)新交易向全网广播;

2)每个节点将收到的交易信息合并到一个块中;

3)每个节点都试图在自己的区块中找到足够难度的工作量证明;

4)当节点找到工作量证明时,将其广播到全网;

5)当且仅当区块中包含的所有交易均有效且之前不存在时,其他节点才会认可该区块的有效性;

6)其他节点表示接受该块,接受的方法是跟随块的末尾,做一个新的块来扩展链,接受块的随机哈希值是被视为新区域之前的随机哈希值。

比特币平台关闭后比特币怎么办_比特币怎么运行的_比特币现金和比特币区别

节点总是认为最长的链是正确的链并继续工作和扩展它。

比特币网络是一个点对点网络。在比特币网络中,所有节点都是平等的,没有层次结构,也没有特殊的节点,也就是所谓的主节点。它运行在具有随机拓扑的 TCP 网络上,其中每个节点都连接到其他随机节点。也可以随时添加新节点。只要一个节点连续三个小时没有音频,就会被其他节点慢慢遗忘。加入比特币网络就是维护区块链。当我们发起一笔交易时,我们需要使用“泛滥”算法,让全网知道会有相应的机制防止它在网络中流通,浪费网络资源。

当节点接收到新的交易信息时,有四个检查点:第一个也是最重要的一个是交易验证,即验证交易在当前区块链中是否有效,节点会检查之前的每一笔交易。对脚本的输出运行验证脚本,保证脚本的返回值为真;第二,检查是否存在重复付款;第三,节点会检查该节点是否已经收到交易信息;第四,节点只会接收白名单上通过的标准脚本。

验证区块的过程更加复杂。除了确认区块头并确保其中的哈希值在可接受的范围内之外,节点还必须确认区块中的每笔交易。最后,节点传播出去的块必须是区块链中心添加的最长块。只有这样,才能防止区块链分叉。

简单付款验证 (SPV)

付款也可以在不运行完整网络节点的情况下进行验证。用户需要保留最长工作量证明链的区块头副本,它可以不断询问网络,直到确信它拥有最长的链,并可以通过 merkle 的分叉将其引向时间戳和时间戳。包含在区块中的交易。节点自己无法验证交易的有效性,但是通过回溯到链上的某个点,可以看到一个节点已经接受了它,并且它后面附加的区块是进一步证明整个网络一旦接受它。(节点都是诚实的)

3.6限制和优化

我们无法改变比特币的总量和记账奖励(改变太多),但我们可以改变比特币的交易能力。修改比特币的协议可能会导致硬分叉和软分叉。硬分叉是指通过修改协议引入新功能,这可能会使之前的协议版本失效。即运行新版本协议的节点认为有效的区块会被运行旧版本协议的节点认为无效,并不是所有节点都会更新新协议比特币怎么运行的,老节点会考虑其他分支(在这个分支中,所有新节点都认为要排除的有效块)是区块链中最长、最有效的分叉,并继续扩展这个分叉,直到它们更新它们的版本。软分支是在修订中添加新功能,使现有审计规则更加严格。在这种情况下,旧节点仍然会接受所有块,而新节点会拒绝一些。这避免了由硬分叉引起的永久分裂。运行新版本协议的节点使用一些更严格的规则。现在,假设绝大多数节点会更新新版本的协议并执行新规则(这是软分叉的关键,因为旧节点不会执行新规则,而新节点的数量足够大竞争最长的链条)。在这种情况下,旧节点可能会挖出一些无效区块——因为这些区块包含一些在新规则下无法验证的交易,然后旧节点会知道他们验证为有效的块不会被其他人验证。旧节点的节点收到它,这使得旧节点的矿工更新协议。而且,如果老节点使用自己的区块来扩展老节点的分支,那么老节点也会依次展开这个分支,因为是新节点验证的区块,老节点也必须通过验证。