主页 > imtoken官网下载1.0安卓 > 挖矿后如何取款

挖矿后如何取款

imtoken官网下载1.0安卓 2023-07-12 05:11:03

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

交易挖矿全流程

在这里插入图片描述

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

UTXO 很容易理解,就像账户的余额。它是比特币交易的基本单位,未使用的交易输出,Unspent Transaction Output,简称UTXO,“未使用的交易输出”。UTXO 不能再分了,1 个 UTXO 可以是 1 个“聪”的任意倍数,就像美元可以分“分”一样,“分”不能分。UTXO 记录在区块链中,比特币网络监控所有可用的 UTXO 数以百万计。

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

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

交易输出

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

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

交易输入

交易输入是指向 UTXO 的指针,当用户付款时,他的钱包通过选择可用的 UTXO 来构建交易。

例如:支付0.015 BTC,钱包应用会选择一个0.01 UTXO和一个0.005 UTXO,并使用它们一起获得所需的支付金额作为交易输入

手续费

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

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

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

签名加密

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

网络中的节点收到交易信息后,会检查交易的合法性。资金所有人的签名加密是重要的验证依据。检查通过后,该笔交易将被标记为合法未确认交易,并在网络上展示。广播进来。

私钥

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

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

DEA94FBC4ED27612315A2616A2B0E9E52CED330AC530EDCB32C8FFC6A526AEDD

公钥

在这里插入图片描述

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

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

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

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

在这里插入图片描述

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

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

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

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

一笔交易要成为“更高优先级”,必须满足的条件:优先级值大于 57,600,000,相当于一个比特币(即 1 亿聪),年龄为 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中的数据就会被彻底擦除。而且,即使一个有效的交易传播到全网,如果长时间不处理,也会从挖矿节点的内存池中消失。如果一笔交易应该已经处理了一段时间而没有处理为什么不用显卡挖比特币,那么钱包软件应该重新发送交易或重新支付更高的矿工费。

堵塞

在这里插入图片描述

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

回收磁盘空间 Merkle 树

如果最近的硬币交易发生在足够多的区块之前,则可以丢弃在交易之前花费的硬币的交易记录 - 以节省磁盘空间。为了在不破坏区块哈希的情况下做到这一点,交易的哈希将包含在默克尔树 [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 交易

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

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

创世块的哈希值为:000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

矿工

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

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

难度调整

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

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

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

区块链的分叉

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

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

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