主页 > 官网最新版imtoken钱包 > 走进区块链(四)

走进区块链(四)

官网最新版imtoken钱包 2023-04-10 06:03:39

4 区块链难度设计

戈登·摩尔(英特尔创始人)曾说过:集成电路上可容纳的晶体管数量大约每 24 个月就会翻一番。 翻译成通俗的说法:计算机的性能每18个月就会翻一番(18个月是David House提出的)。 在第三章中,我们了解到挖矿所需的时间主要体现在算力上。 随着计算机运算性能的不断提高,如果不做任何处理比特币算力难度查询,挖矿所需的时间会越来越短。 难度设计是为了平衡摩尔定律的影响,将挖矿时间控制在10分钟左右。

区块链的工作量证明是找到一个幸运数,使得一些输入和幸运数的双SHA256值小于难度目标(DIFF_TARGET,区块头中的一个字段,详见第2章区块链结构). 因此,难度目标越大,难度越低,越容易找到符合要求的幸运数字,需要尝试的次数也越少。 创世块存储最大难度目标(DIFF_TARGET_MAX):0x1d00ffffff,这是一种特殊的浮点压缩格式。 实际值是以最后三个字节为基数、以前一个字节为指数的字符串。 即:0x00ffff*2^(8*(0x1d-3)),计算结果为256位二进制数,前面有32个0。 一般我们简单的用前面几个0来代表难度目标。

区块链中的难度目标由难度系数(DIFF)决定。 难度目标的计算公式为:

DIFF_TARGET=DIFF_TARGET_MAX/DIFF

创世区块的DIFF=1,所以难度目标等于最大难度目标值。 DIFF 每 2016 个区块调整一次。 注意调整前的难度系数为DIFF_OLD,调整后的难度系数为DIFF_NEW,则:

DIFF_NEW=DIFF_OLD*(20160/最近的2016区块计算所需分钟数)

可以看出,如果最近缩短2016年区块的生成时间,相应的难度系数会增加,难度目标值会降低。 这样,区块链动态调整难度目标,保证10分钟的计算时间。 最新难度系数为2,874,674,234,415。 下图展示了难度系数的变化历史:

比特币算力计算_比特币算力难度查询_比特币矿池算力排名

5 比特币算力问题

5.1 算力与增长

比特币算力难度查询_比特币矿池算力排名_比特币算力计算

计算能力代表节点的计算能力,以哈希率衡量。 通常用hash/s表示,缩写为H/S。 目前全网算力约为20.70EH/S(1E=1000P,1P=1000T,1T=1000G,1G=1000M,1M=1000K,1K=1000)。 下图是全网当前算力的具体分布:

比特币算力计算_比特币算力难度查询_比特币矿池算力排名

算力的提升,一方面得益于比特币挖矿收益递减的设计。 随着奖励越来越少,矿工越早进入,收益越大。 因此,比特币早期吸引了大量矿工参与,扩大了全网的算力,一定程度上维护了区块链的稳定性。 另一方面,从最早的全能CPU,到支持简单计算的GPU,再到ASIC、矿池等硬件设备的迭代更新,算力也呈指数级增长。

5.2 计算作弊

通常用算力占全网的比例来衡量一个节点获得记账权的概率。 比如上图中的BTC.com,有33.6%的概率率先获得记账权。 目前,矿工的主要收入来自挖矿奖励。 单个矿工的算力很低,能够赢得记账权的概率几乎为零。 这使得单个矿工的投入产出比极不稳定,大部分的投入将没有产出。 为了解决这个问题,一些矿工加入了矿池,矿池的算力高,挖到的概率也高。 矿工加入矿池后,由矿池统一分配任务,争取记账权。 矿池挖矿时,会按照算力比例将奖励分配给每个矿工。 这样虽然每次挖矿可以获得的奖励变小了,但是投入产出比变得稳定了,所以很多矿工选择这种方式进行投资。 因为矿池的存在,算力已经集中,使得一些恶意攻击成为可能。 以下是两种常见的恶意攻击:

5.2.1 阻塞交易

一笔交易只有被封装成一个区块,记录在最长的链上,才会被认可。 如果一个组织不想确认某类交易,当发现这些交易包含在最新的第 n 个区块中时,它可以恶意阻止。 在第n-1块,新建一个分支,自己挖矿。 当恶意分支的长度比正常分支长时,正常分支上的所有区块都将失效,第n个区块以上的交易将不会被确认。 从理论上讲,无论一个组织拥有多少计算能力,都可以发起这种攻击,只是成功的概率不同。 如果失败,则恶意分支上的所有工作都被视为无效,从而导致损失。

5.2.2 逆向交易

当一笔交易被记录在第n个区块并确认6次后,交易双方完成了物质交换。 此时,交易发起者开始从区块n-1开始生成恶意分支比特币算力难度查询,擦除之前的交易,并自行维护该分支。 经过多个区块的生成博弈,恶意分支比原来的分支长,交易逆转。 这种攻击比阻塞更昂贵,因为它需要 6 个块才能赶上。 如果一个组织拥有51%的算力,这种攻击是完全有可能的,而且从概率上来说,它最终会成功。 但在追赶的过程中,不会得到其他任何组织的认可,也不会得到奖励。 与需要转回的交易收益相比,收益往往是得不偿失的。

5.2.3 作弊成本

假设全网算力为:ALL(算力)=20EH/S,更先进的蚂蚁S9矿机单台矿机算力约为E(算力)=13.5TH/S,其需要掌握51%的算力。 power,需要的矿机数量:

比特币算力计算_比特币矿池算力排名_比特币算力难度查询

N(矿机)=ALL(算力)*0.51/E(算力)

单台蚂蚁S9矿机的成本为CE(mining machine)=10900元,所以矿机的总成本为:

CA(矿机) = CE(矿机) * N(矿机) ≈ 82亿(元)

蚂蚁S9矿机功耗1300w,1KWh电费0.35元。 按24小时计算,单台矿机24小时电费:

CE(电费)=1.3*24*0.35=10.92(元)

24小时内,所有矿机的电费为:

CA(电费)=N(矿机)*CE(电费)≈825万(元)

目前10分钟产出12.5个BTC,24小时可以产出1800个BTC。 每个BTC PE(BTC)的价格=6万元。 24小时51%算力可产出的BTC约为:1800*51% = 918 BTC。 这笔收入大约是:

P(BTC) = 918 *60000 = 5508万

对于矿工:

挖矿成本=矿机成本+电费+维护费和人工费+矿山折旧费等。

比特币算力计算_比特币矿池算力排名_比特币算力难度查询

不包括维护费、折旧费等,一个拥有51%算力的机构每天需要825万电来维护矿机,初始投资82亿,每天正常工作收入5508万。 如果不老老实实干活,想着倒转交易,每天就要承担825万的电费。 赶上正常支线,还要承受多少天的用电,82亿的投资可能会亏本。 因此,虽然可以作弊,但基本没有实施,成本也难以支撑。

网上有很多利润计算工具,下图就是其中之一。 可以看到,目前投资一台蚂蚁S9矿机,设备投资CE(矿机)=10900元,每天电费10.92元。 大约需要216天才能产生回本,这个计算及其对BTC价格波动和全网算力的依赖:

比特币算力计算_比特币矿池算力排名_比特币算力难度查询

6 区块链脚本设计

6.1 脚本介绍

在比特币网络中,没有账户余额的概念。 交易主要由输入和输出组成(参考第二章的数据结构)。 每个输入数据分为两部分,一部分用于解释对应UTXO位置的哈希地址和索引号,另一部分用于解锁对应的UTXO脚本; 每个输出数据也可以分为两部分,一部分是解释这个UTXO中包含的币值,另一部分是锁定UTXO的脚本。 当一个UTXO需要花费时,需要提供一个输入脚本,输入脚本连接到UTXO的输出脚本,执行脚本语言。 如果结果不为 0,则验证通过。

比特币的脚本语言是一种基于逆波兰表示法(后缀表示法)的栈式执行语言,包括256条指令(因为用一个字节表示,0X00-0XFF,最多可以表示256种含义),虽然这些指令可以以多种方式编程,没有循环或复杂的条件控制。 这种脚本设计主要是出于安全考虑,可以避免一些逻辑炸弹攻击。 它是一种图灵不完备的语言,在以太坊中得到了升级。 下表显示了一些比较常用的指令和下面使用的变量的含义:

比特币算力计算_比特币算力难度查询_比特币矿池算力排名

6.2 脚本分类

从描述中可以看出交易输出中的锁定脚本是可编程的,任何可以使脚本运行结果不为0(false)的解锁脚本都可以使用这个UTXO。 锁定脚本一般需要数字签名验证才能解锁,针对的是特定的授权方,可以是一个人(P2PK),也可以是多人(MS)。 一些锁定脚本会设置一个难题,网络中的所有参与者都可以通过解决这个难题来争夺这个UTXO。 有些锁定脚本不设置门槛,就像在屋顶上砸钱一样,任何人都可以使用。 一些锁定脚本用于销毁UTXO,任何人都无法解锁和使用。 有些锁定脚本会设置时间限制,延迟使用……下表整理了这些常用脚本的信息,结合上面的指令变量信息可以理解:

比特币算力计算_比特币算力难度查询_比特币矿池算力排名

比特币算力计算_比特币算力难度查询_比特币矿池算力排名

6.3 实例分析

这里是比特币网络上第一笔实物交易的原始数据——披萨交易,以及这种基于逆波兰表示法(后缀表示法)的栈式执行语言的例子,这是一个典型的 P2PHK 交易。

首先从任意节点拉取哈希值为:cca7507897abc89628f450e8b1e0c6fca4ec3f7b34cccf55f3f531c659ff4d79的交易数据:

根据第2章的数据结构,分析如下:

比特币算力计算_比特币矿池算力排名_比特币算力难度查询

根据脚本的分类信息,不难看出这笔交易的第一个输出是P2PKH脚本,第二个输出是P2PK脚本。 这个交易的输入对应的输出应该是一个P2PKH脚本。 根据输入提供的索引号,拉出相应的交易数据。 这笔交易的输入太多,对应的数据量很大。 有兴趣的可以自己看一下: ,这里需要最后一段输出数据:010010a5d4e80000001976a91446af3fb481837fadbb421727f9959c2d32a3682988ac00000000,我们分析如下:

比特币矿池算力排名_比特币算力难度查询_比特币算力计算

将解锁脚本与锁定脚本链接起来,形成这样一个执行流程:

比特币算力难度查询_比特币算力计算_比特币矿池算力排名

由于栈顶不为0,所以解锁成功。 花了10000个BTC(现在近7亿人民币),买了2块pizza。 真是个天才! ! !

7 分布式共识问题

比特币算力难度查询_比特币矿池算力排名_比特币算力计算

分布式共识问题可以简单描述为如何保证分布式网络中的所有节点对某个提案达成共识,即达成共识的问题。 在分布式网络中,造成不一致的原因大致可以分为两类:拜占庭错误和非拜占庭错误。 非拜占庭错误是指节点宕机、延迟响应和其他可预测结果等问题。 拜占庭错误是指节点会出现信息伪造等不可预知结果的问题。 非拜占庭问题是拜占庭问题的一个子集。 区块链是一种去中心化的产品。 在比特币网络中,不存在可以检测网络中货币所有权或交易顺序的中心化权力机构。 每个节点都可能伪造信息,所以区块链必须解决拜占庭错误导致的分布式共识问题。

非拜占庭错误导致的分布式一致性问题包括Paxos、Raft等算法,这里不再详述。 目前区块链的共识问题主要有PoW、PoS、DPoS等方式。

7.1 工作量证明

工作证明,工作量证明。 区块链每产生一个区块,都需要进行一定的计算工作,才能找到一个合法的随机数来争取记账权。 同时约定全网只认可最长链。 当网络中存在恶意节点篡改数据时,需要一定的工作量。 作弊成功的概率与恶意节点拥有的算力比例有关,这在上一篇文章中有详细说明。

随着全网算力的不断增长,作弊的成本会越来越高。 但是,这种算力密集型的工作,会让算力越来越集中。 目前全网算力基本已经被几个大型矿池占据。 这种情况违背了去中心化的设计初衷。 另外,除了最长链路上的区块,其他分支区块上的算力都会被浪费,而且随着算力的增加,这种损失会越来越严重。 为了解决这些问题,PoS 被提出。

7.2 权益证明

股权证明,股权证明。 在区块链中,一定数量的代币用于证明记账权。 代币与持币量和持有时间有关。 拥有更多代币的人更有可能获得记账权。 网络中的恶意节点要想作弊,必须拥有相当数量的代币。 作弊被发现后,将被罚款相当数额的货币,以增加作弊成本。 由于记账权与持币量密切相关,对于持币量大的矿工来说,系统的稳定和健康更为重要。 因此,按照利益导向,财富越多的人,也就是会计权越多的人,越不容易出轨。

与 PoW 相比,PoS 不会浪费算力。 在作弊成本方面,需要大量的货币。 相比PoW的算力,作弊的门槛更高,作弊的可能性更小。 但是,PoS会导致记账权被少数富有的矿工控制,这也在一定程度上违背了去中心化的设计初衷。 为此,有人提出了一种改进的 DPoS。

7.3 DPoS

Delegated Proof of Stake,共享授权证明机制。 与 PoS 相比,只有成功竞选受托人的矿工才有记账权。 持有币种的矿工可以参与投票。 投票权重与矿工持币量成正比。 矿工可以随时投票或撤回投票。 矿工通过一定的机制成为候选人,在全网拉票,通过一定比例的选票成为受托人。 区块链网络可以确定受托人的数量。 受托人之间没有体重差异。 选举后秩序将被打乱,投票将获得参与区块建设的记账权。 一定时间后,全网将进行新一轮的选举,确定新的受托人。

在该机制中,投票比例越大的矿工持有的币越多,从利益导向的角度,他们希望区块健康发展。 矿工跑去当受托人,如果不称职就会被淘汰,从而失去成为受托人后出块的好处。 虽然块创建发生在一个中心区域,但这种中心化是受到控制的。 网络中的每个节点都有能力确定受托人,因此可以保证一定程度的去中心化。