主页 > imtoken苹果手机 > 比特币挖矿其实就是数据的存储

比特币挖矿其实就是数据的存储

imtoken苹果手机 2024-01-20 05:12:47

网上很多人分析了一堆,但很少有人分析具体的交易过程和它是如何运作的。现在我试着把过程解释清楚,更适合技术人员查看,废话不说

交易挖掘的整体流程

在这里插入图片描述

交易者使用钱包客户端生成交易,然后选择自己的节点或公共节点peerA发送自己的交易过去,peerA在获得交易信息后,进行了一长串的验证。验证通过后,加入本地未确认交易池,并广播给所有与其连接的节点peerB、peerCpeerB和peerC。收到交易后,验证并通过后,加入交易池,同时判断交易池中的交易数量是否超过1000,如果超过,所有完整的交易数据将根据交易池中的交易哈希批量获取。同时,经过验证的交易会继续向与其连接的所有节点广播,并且在瞬间,获得所有交易数据后,交易会传播到所有节点,并从交易中选择一部分交易池形成一个新的块。在块头中添加一个 32 位的随机数 Nonce,范围从 0 到 2^32,并不断改变随机数。同时,需要更改造币交易中的附带消息,使默克尔根也发生变化,从而使最终的区块哈希以低难度目标值(如0xb4796ec3),一旦挖矿完成,将这个区块链接到本地​​链的末端,然后将此区块发送给所有连接的节点peerB收到这个新区块后,立即停止自己的挖矿工作,然后验证新区块是否合法。合法且本地链没有此块,将其添加到自己的链中,并将此块转发给与自己连接的所有节点,例如peerA以生成交易UTXO

UTXO 很容易理解,说它就像一个账户的余额。它是比特币交易的基本单位,是一种未使用的交易输出。 Unspent Transaction Output,简称UTXO,“未花费交易输出”。UTXO不能再分,1个UTXO可以是1个“sat”的任意倍数2009年挖比特币速度,就像美元可以分“cents”、“cents”不能再分割了。UTXO记录在区块链上,比特币网络监控着所有可用的UTXO以百万计。

假设此时glowd有2个比特币,当glowd收到0.3个比特币时,这个数量作为UTXO记录在区块链中,现在glowd拥有的2.3个比特币总数为也作为 UTXO 分布在数百个交易和数百个区块中。事实上,并没有地方可以存储比特币地址或账户余额,只有被 Glowd(所有者)锁定的去中心化 UTXO。

因此,“glowd的比特币余额”的概念是通过扫描区块链并聚合所有属于用户的UTXO来计算用户的余额。

交易输出

比特币交易是具有输入值和输出值的数据结构,其中包含将资金从初始地址(输入)转移到目标地址(输出)的代码信息:版本规则、输入及其数量、输出及其数量,时间戳。

每笔比特币交易都会产生一个输出,输出记录在比特币账本中。所有输出都可以创建一定数量的比特币(即UTXO),用于支付。这些 UTXO 将被全网识别和记录,它们的所有它们都可以在未来的交易中使用。发送比特币实际上是在创建可用于新支付的新 UTXO。

交易输入

09年挖比特币容易吗_2009年挖比特币速度_2009年比特币在哪里挖

交易输入是一个指向UTXO的指针,当用户支付时,他的钱包通过选择可用的UTXO来构造一笔交易。

示例:要支付0.015 BTC,钱包应用会选择一个0.01 UTXO和一个0.005 UTXO,并一起使用以获得想要的支付金额作为交易输入

交易费用

大多数交易都包含交易费用,这是对比特币矿工的一种激励。大多数钱包会自动计算并计算交易费用,该费用由开采区块的矿工赚取并记录在区块链中以进行交易。交易数据结构没有交易费用字段,也就是说你不能直接从交易信息中看到交易费用金额。

例如:glowd想要支付0.25个比特币,他愿意支付0.01个比特币作为交易费用,以便他的交易被矿工优先考虑,那么钱包需要在至少从区块链记录中集成一个至少 0.26 BTC 的 UTXO。假设他的钱包有 1 个比特币的 UTXO 可用,那么这个新交易将有 1 个比特币的输入,以及两个输出:一个是消费量 0.25 个比特币支付到目标地址,另一个输出是0.74比特币作为找零支付到glowd的钱包地址,其中0.01比特币没有分配,这是“隐藏”的交易费用。

值得注意的是:一定要明确定义0.74比特币是指向自己钱包的输出,这样零钱就会有效地“返还”到glowd的钱包,否则0. 74比特币也将变成交易手续费,矿工们会发现这个惊喜的“红包”。

签名加密

一旦创建了比特币交易,它就会由资金的所有者签署(可能有多个所有者)。如果它是合法创建并签署的,则该交易现在有效。它包含转移资金所需的所有信息。用户的私钥用于生成支付比特币所需的签名,以证明资金的所有权。这样的签名加密是为了保证交易内容不被篡改。

网络中的节点收到交易信息后,会检查交易的合法性。资金所有人的签名加密是重要的验证依据。交易在网络上广播之前得到确认。

私钥

比特币钱包包含一系列密钥对,每个密钥对包括一个私钥和一个公钥。私钥是一个数字,通常是随机生成的。对比特币地址中所有资金的控制取决于相应私钥的所有权和控制权。私钥必须保密,因为一旦泄露,受私钥保护的比特币就会丢失。

2009年挖比特币速度_2009年比特币在哪里挖_09年挖比特币容易吗

通过从加密安全的随机源中取出一串随机字节,并使用 SHA256 哈希算法对其进行计算,生成一个 256 位的数字,这样的数字可以用作私有数字。钥匙。表示一个随机生成的十六进制格式的私钥,即:

DEA94FBC4ED27612315A2616A2B0E9E52CED330AC530EDCB32C8FFC6A526AEDD

公钥

在这里插入图片描述

可以通过椭圆曲线算法从私钥计算出公钥,这是一个不可逆的过程。公钥通过单向加密哈希算法生成的比特币地址以数字“1”开头,比特币地址是交易中的接收者地址。用于比特币地址的算法是安全哈希算法 (SHA) 和 RACE 完整性原语评估消息摘要 (RIPEMD),特别是 SHA256 和 RIPEMD160。

以公钥K为输入,计算其SHA256哈希,再计算RIPEMD160哈希。生成的 160 位(20 字节)数字就是比特币地址。

A = RIPEMD160(SHA256(K))  //其中K是公钥,A是比特币地址

peerA 验证交易 peerA 广播交易哈希 peerC 选择交易形成新区块

在这里插入图片描述

节点需要为交易池中的每笔交易分配一个优先级,并选择优先级更高的交易记录来构建候选区块。交易的优先级由用于交易输入的UTXO的“区块年龄”决定(币在区块中存在的时间,在区块中频繁转账的时间越短),交易输入值越高, “区块年龄”越大。事务的优先级高于那些较新的事务,具有较小的输入值。如果区块中有足够的空间,高优先级的交易将不需要矿工费。金额越大,币龄越高,优先级越高。小额转账或挖矿后转账不是免费的。

一笔交易的优先级由输入值与输入的“区块年龄”的乘积之和除以交易的总长度得到:

2009年比特币在哪里挖_2009年挖比特币速度_09年挖比特币容易吗

Priority = Sum (Value of input * Input Age) / Transaction Size

优先级 在这个等式中,交易输入的价值由比特币单位“satoshi”(比特币的百万分之一)表示。一个 UTXO 的“区块年龄”是自 UTXO 被记录在区块链中以来所经历的区块数,即 UTXO 在区块链中的深度。交易记录的大小以字节表示。

一笔交易要成为“更高优先级”,必须满足的条件:优先级值大于57,600,000,相当于一个比特币(即1亿聪),年龄为一天( 144 块),交易大小为 250 字节:

High Priority > 100,000,000 satoshis * 144 blocks / 250 bytes = 57,600,000

用于在块中存储交易的前 50K 字节 (1/20 * 1M) 保留用于更高优先级的交易。节点在填充 50K 字节时会优先处理这些最高优先级的交易,无论是否包含矿工费。即使矿工费用为零,这种机制也允许首先处理高优先级交易。

然后挖矿节点会选择矿工费最小的交易,按照“每千字节的矿工费”进行排序,优先选择矿工费较高的交易来填充剩余的区块,最大区块大小为MAX_BLOCK_SIZE=1M。

如果区块中还有剩余空间,挖矿节点可以选择那些不收取矿工费的交易。一些矿工会竭尽全力将不包含费用的交易合并到区块中,而另一些矿工可能会选择忽略它们。

块被填充后,内存池中剩余的交易成为下一个块的候选者。因为这些交易保留在内存池中,随着新块被添加到链中,这些交易作为输入引用的 UTXO 的深度(交易“块年龄”)也会增加。由于一笔交易的优先级值取决于其交易输入的“区块年龄”,因此该笔交易的优先级值相应增加。最后,零费用交易的优先级值有可能达到高优先级阈值,免费入块。

比特币交易中没有到期或超时的概念。如果交易现在有效,它将永远有效。但是,如果一笔交易在全网只广播一次,那么它只会存储在一个挖矿节点的内存中。因为mempool是以非持久化的方式存储在挖矿节点存储中的,一旦节点重启,mempool中的数据就会被彻底擦除。而且,即使一个有效的交易传播到全网,如果长时间不处理,也会从挖矿节点的内存池中消失。如果某笔交易本应处理一段时间但未处理,则钱包软件应重新发送交易或重新支付更高的矿工费。

阻止

在这里插入图片描述

09年挖比特币容易吗_2009年挖比特币速度_2009年比特币在哪里挖

1个块最大1M空间,块头80字节

磁盘恢复空间默克尔树

如果硬币最近的交易发生在足够多的区块之前,那么可以丢弃硬币之前的交易记录 - 以节省磁盘空间。为了在不破坏区块哈希的情况下做到这一点,交易的哈希将包含在默克尔树 [7、2、5] 中,并且只有树的根会包含在块的哈希。通过切割树枝,可以压缩旧块。内部哈希不需要保存。

没有任何交易记录的区块头大约是 80 字节。假设每十分钟生成一个块,80 字节乘以 6 乘以 24 乘以 365 等于每年 4.2M。截至 2008 年,大多数销售的计算机都配备了 2GB 的 RAM,摩尔定律预测每年增加 1.2 GB,即使块头必须存储在 RAM 中。

区块生成

通过创建新区块,比特币以确定性但稳步下降的速度发行。大约每十分钟产生一个新区块,每个新区块都伴随着一定数量的全新比特币,这些比特币是从零开始创建的。每挖出 210,000 个区块,大约需要 4 年,货币发行率下降 50%。

在 2016 年的某个时候,在第 420,000 个区块被“开采”后,它下降到 12.5 BTC/区块。在第 13,230,000 个区块(大约在 2137 年开采)之前,新币的发行率呈指数级“减半”64 倍。届时,每块发行的比特币数量成为比特币的最小货币单位——1聪。最终,在 1344 万个区块之后,所有 20,999,999.9769 亿 satoshis 将被发行。换句话说,到 2140 年左右,将有接近 2100 万比特币。之后,新区块不再包含比特币奖励,矿工的所有收入都来自交易费用。

创世区块

区块中的第一笔交易是特殊交易,称为 Coinbase 交易或 Coinbase 交易

Coinbase 交易输入:coin 交易与其他交易的区别在于交易输入没有UTXO,也没有“输入脚本”。该字段被 Coinbase 数据取代。除了前几个字节2009年挖比特币速度,矿工可以使用 Coinbase 的其他部分,随意填写任何数据。因此,中本聪在创世区块的 Coinbase 中填写了“The Times 03/Jan/ 2009 Chancellor on brink of secondbailout for banks”的数据。

区块链中的第一个区块创建于 2009 年,称为创世区块。它是区块链中所有区块的共同祖先,这意味着如果你从任何一个区块往回走,你最终会到达创世区块。

2009年挖比特币速度_2009年比特币在哪里挖_09年挖比特币容易吗

创世块的哈希值为:000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

矿工

矿工是指设置为挖矿状态的节点(见比特币节点),处于挖矿状态的节点需要贡献算力并可能获得写块的权利来获得比特币。

比特币链要正常增长,理论上只有一个节点处于挖矿状态。事实上,维持比特币网络的长期正常运行需要多个挖矿节点来保持链的正常增长。当多个节点处于挖矿状态时,多个节点竞争出块权。每个区块的生成是随机的,但贡献的工作量/计算能力决定了你获得权利的概率。

难度调整

比特币区块平均每 10 分钟生成一次。这是比特币发行和交易费率的基础,并且必须始终保持不变。随着技术的发展,计算机的性能将迅速提高。此外,参与挖矿的人和计算机也在不断变化。为了保持 10 分钟的出块率,必须根据这些变化调整挖矿难度。

2009 年 12 月 30 日,比特币挖矿难度首次增加。寻找一个比特币区块需要全网处理大约 10 分钟,难度会根据前 2016 个区块完成的时间每找到 2016 个区块进行调整。

New Difficulty = Old Difficulty * (Actual Time of Last 2016 Blocks / 20160 minutes)

区块链的分叉

分叉发生在两个矿工之间相对较短的时间内,每个矿工都算作工作量证明解决方案。一旦两个矿工在各自的候选区块中找到解决方案,他们就会立即将他们的“获胜”区块传播到网络,首先传播到相邻节点,然后传播到整个网络。

由于每个矿工的区块数据不同,解决问题得到的结果也不同。他们都是正确的答案,但块是不同的。此时在区块链中,有两个不同的区块都满足要求。不同的矿工依次看到这两个区块。通常,矿工会先复制他们看到的区块,然后在这个区块中开始新的挖矿工作。这就是分叉发生的地方。

从分叉区块来看,由于分叉链上的矿工数量不同,算力也不同,两条链的增长率也不同。总有一条链的长度超过另一个。当矿工发现全网有更长的链时,他会放弃当前的分叉链,继续在更长的主链上挖矿。