主页 > 什么是imtoken钱包 > 区块链那些事儿——关于激励机制和激励层的Race-To-Empty攻击

区块链那些事儿——关于激励机制和激励层的Race-To-Empty攻击

什么是imtoken钱包 2023-03-02 05:48:58

本稿件首次投在先知上,这次拿到自己的博客中,原稿为:https://xz.aliyun.com/t/2904`

最近对区块链的“币圈”进行了小范围的资料阅读和研究,学习和总结了一些安全知识。 通过对“币圈”一些重大安全事件的研究,我也接触到了很多关于“激励层”的知识。 我希望能简单概括一下这里的内容。

`

通过这几个月对区块链知识的学习,我摘录了前辈的话,对区块链做一个简单的总结——简单来说,区块链是“去中心化”+“Token机制”的结合体。 这里先不谈去中心化,主要讨论一下这个Token机制(激励机制)包含的思想。

接下来我将从比特币和以太坊入手,介绍一种与激励层相关的安全攻击——Race To Empty。

一、激励机制的价值

区块链的本质是分布式共识与价值激励相结合的产物。 一方面,它通过密码学等数学运算提供每个节点的共识; 另一方面通过激励机制保证区块链生态系统的均衡发展。 大家都知道区块链的核心概念是去中心化(即所有节点遵循相同的共识,对任何事情达成共识)。 而通过对区块链的了解,我们也发现区块链的每一个节点就像社会中的一个个体。 只有有了“人”,整个社会才能繁荣。 如何提高整个社会的运行效率,如何让人们更愿意工作、愿意付出,是我们不得不考虑的事情。 对于社会来说,金钱(虽然粗俗但确实是最好的方法)是推动人们实现价值的最好动力。 区块链的小社区也是如此,它借鉴了人类社会的发展模式,提供一些奖励让每个节点更加努力地工作(下面会针对不同的币种进行解释)。

在去中心化系统中,共识节点本身就有机会获得相应的奖励,各节点消耗自身资源参与数据校验和记账的根本目的是为了自身利益最大化。 为保证去中心化系统安全、有效、健康运行,必须引入符合经济模型的激励机制,让各方跨越组织信任边界,建立无界、协同发展的生产关系,让更多的节点加入进来,共同维护系统的正常运行。

对此,区块链的设计理念引入了数字代币(Token)作为激励。 由于没有中心节点,维护账本就成了每个节点的义务比特币的发行量是由什么决定的,我们可以用相应的币值奖励节点,促进生态的稳定发展。

2.什么是Token? 1 Token 借助密码学共识机制(区块链)发行和流通。

密码学共识机制是比特币实现去中心化所依赖的一套技术和协议,也被称为“区块链”。 实际的区块链只是这个机制中的辅助技术。 比特币和以太坊是基于密码共识机制设计的去中心化密码共识平台。 Token是这些密码学共识平台的产物,是通过比特币或以太坊等公链提供的协议、脚本、节点、软件等设计、创建、发行和流通的信用凭证。 比特币或以太坊平台的密码学共识机制虽然没有改变代币的信用属性,但却使得整个发行流通过程公开透明,更具公信力。 没有通过密码学共识机制建立的去中心化平台,代币与游戏金币、Q币、商城积分等无异。

2 代币的价值取决于加密货币。

为什么借助以太坊和比特币发行的代币比传统代币具有更大的影响力? 关键是,这些代币一旦发行,就可以通过几乎完全免费的比特币和以太坊,在完全开放的比特币和以太坊平台上进行交易,很容易进入中心化交易平台进行大规模的撮合交易。 也就是说,借助其所依附的更为成熟的加密货币体系,该代币获得了传统代币难以获得的巨大流动性。

3 Token使用密码学技术确认所有权

从技术细节来看,代币与传统代币的一个重要区别是新代币使用非对称密码学的公钥和私钥来确认所有权。 公钥记录了密码学共识系统中代币的数量及其传输方向。 用户持有的私钥决定了公钥对应代币的归属,并在不依赖第三方见证和确认的情况下对转账进行签名和授权。 可以说是“脱媒”。 但是,在没有“共识”(即分布式共识)的情况下,单纯的“密码学”应用无法让代币获得上述自由发行和强大流动性的便利。 “加密共识”是令牌(比特币或以太坊)的基础。

详见token解读

三、比特币激励交易中的激励概念

比特币、以太币以及其他各种虚拟代币(代币)是区块链激励功能的体现。 中本聪设计的区块链是一个实验比特币的发行量是由什么决定的,本身没有商业价值。 为了吸引注意力,发展连接点,鼓励参与者通过“挖矿”计算不断创造新的区块,共同维护链条存在的延伸,他必须给予为此付出努力的人“奖励”。 因此,每次“挖矿”成功并得到确认后,就会形成一个新的区块,被认定为获胜者的“挖矿”获得代币,并记录在公共账本中。 中本聪将这种本质上是一段计算机程序的奖励命名为“比特币(Bitcoin)”。 作为一种创造货币的计算机程序,比特币风靡全球,也催生了一波虚拟货币热潮。

比特币系统是一个典型的通过经济激励的自驱动系统。 它的可靠性依赖于整个系统中所有节点的共同计算能力。 因此,比特币系统不需要任何中央机构来维护其信用,而只需要技术手段来创造共识。

首先,我们可以总结一下挖矿节点收取的费用。 打包交易产生的激励是一个区块中包含的所有交易费用。 具体来说,比特币交易的手续费不根据交易金额而定,而是按照每千字节的用户交易收取0.0001 BTC(比特币)的价格。 此外,为了防止通货膨胀,比特币的发行量每4年减半,总量为2100万枚。 当数量达到(预计为2140)时,矿工将无法通过获取系统的记账奖励获得比特币,只能通过系统中的手续费生存。

除了发币激励外,系统中还有交易规则。 首先,矿工将优先处理高优先级的交易。 块的前 50kb 保留给高优先级交易。 那么如何判断优先级高低呢? 由新旧币、交易字节数、交易币数之和决定(有点像操作系统中的进程管理算法)。 具体计算公式为:priority = sum(input_value_in_units * input_age) / size_in_bytes。 如果该值大于 0.576,则为高优先级。 简而言之,随着新区块的产生,内存池中未打包的交易越来越旧,最终它们的优先级会增加。 然后按矿工费用对交易进行排序。 从最高到最低排序。

4. 以太坊的激励

与所有基于区块链技术的去中心化系统一样,以太坊也有自己的激励机制,鼓励矿工将计算资源用于挖矿,而这个机制就是以太坊。

以太坊的最小货币单位是wei,以太币与它的兑换率是1Ether = 10^18wei。 每挖出一个区块,对应的矿​​工都会得到一定的奖励,奖励由两部分组成:

① 矿工获得记账权后可以获得5 ETH奖励。

②除了上面的静态奖励,我们还有动态奖励。 最先入账的区块内所有交易手续费归矿工所有。 此外,矿工还可以从每个叔块中获得1/32 ETH的额外奖励。

那么以太坊和比特币有什么区别呢? 我们先来看看“叔块”的概念。

在这里,叔块是指那些不在最长链上但在分叉链上的有效块。 由于每个节点都是独立工作的,所以有可能两个独立的矿工发现了两个不同的符合要求的区块,称为临时分叉。 以太坊利用这种机制去中心化挖矿(即最大的矿池垄断出块,导致单个矿工始终滞后于矿池的区块信息)。 有了这个机制,即使单个去中心化节点的速度不如大型矿池,也会有相应的奖励。

比如下图中,block 2先被挖到2,而block 1较慢。 但是当区块3产生时,黄色和红色都会被记录在区块3中(黄色是叔块)。

比特币的发行量是由什么决定的_比特币量子量微博_比特币几时发行

图片.png

例如:

比特币的发行量是由什么决定的_比特币量子量微博_比特币几时发行

图片.png

如上图,打包102的时候发现还有一个黄色的101指向我的(102)爷爷(100),那么这个黄色的101就是一个叔块(当然这是最高级别的叔块,如果你打包102的时候没有黄色101,而黄色101是在打包103的时候发现的,那么黄色101也会被打包成103作为一个块,不同的是黄色101块的生产者得到奖励不同)

为什么我们会有叔块的概念?

比特币中没有叔块的概念。 叔块是在以太坊中引入的。 至于为什么引入叔块的概念,与以太坊缩短出块时间有关。 比特币的平均出块时间间隔为10分钟,出现叔块的概率比较小。 当时中本聪在本案中设置的叔块是无用功,不会获得任何奖励。 但是以太坊为了将出块时间缩短到10s出头,产生叔块的概率比较高。 如果设计类似于比特币,很多矿工将不会因为生产叔块而获得任何回报,矿工的积极性会降低。 减量不利于以太坊生态发展,所以V神引入了叔块的概念。 在这种情况下,矿工将叔块打包成块,叔块生产者和打包叔块的矿工将获得一定的奖励。

具体叔块的介绍,我们参考以太坊叔块(包括叔块的特性、奖励金额等)

1 气体简介

描述完上面提到的以太坊的激励机制,我们现在可以想象一下,因为以太坊授权用户使用solidity来编写自己的智能合约。 如果有一天恶意用户部署无限循环运行的合约,我们的系统将不得不承受巨大的流量。 那么如何解决这个问题呢? 所以我们引入了gas机制。

如果我们让程序的每条指令都消耗一点“资源”,“资源”用完了,不管程序执行与否,都会被强行终止,所以不管是不是一个无限循环与否。 这是不是利用外力来限制恶意节点?

具体来说,部署合约每一步需要支付1 Gas,停止合约不需要支付,创建合约需要100 Gas,合约交易需要支付500 Gas。 因此,Gas 相当于部署和执行智能合约所需的燃料,没有 gas 就无法使用智能合约。

2 气体激励

在以太坊中,每一次操作所需的Gas由以太坊的设计者决定,以保证系统的正常运行。 但是,每份合同所需的费用并不是完全固定的。 不同的用户有不同的需求。 有的希望交易能够快速确认(优先概念),有的希望使用较少的以太坊来执行合约。 因此,“Gas 价格”与“Ether”具有相应的汇率。 Gas 价格可以由用户定义。 价格越高,交易确认的速度越快。 通过这种方式,Gas作为激励与以太坊挂钩,赋予用户DIY的权利,维护以太坊生态的顺利进行。

对于复杂的计算,需要消耗的Gas越多,只要给程序加上一个Gas消耗的上限,就可以防止程序出现死循环,无法停止。 同时,以太坊还对每个区块包含的程序所消耗的Gas总量设置了一个上限,以防止区块包含的程序过多影响到一些性能相对较弱的节点。 每个区块可以消耗的Gas上限也可以调整,由矿工投票决定。每个程序需要支付Gas的以太坊可以通过以下公式计算:Gas成本=消耗的Gas量x Gas价格

gas机制减少了以太坊恶意情况的发生,但仍然存在恶意攻击绕过gas机制并带来严重后果的情况。后面我将基于激励层机制分析相关的恶意事件。 下面将简单介绍一下区块链中Race-to-empty攻击的类型

5. 抢空攻击

对于Race-To-Empty攻击,我们简单的从字面上分析。

比特币的发行量是由什么决定的_比特币量子量微博_比特币几时发行

图片.png

简单来说,race就是一个快速的动作,to empty就是放空。 而我对这种攻击的理解是——利用一种攻击方式,快速多次调用某个代码,使被攻击账户中的有用资产清空。

这里简单介绍一下相关的攻击方法。 我们举一个简单的例子来说明。 (保持简单易懂)

function getBalance(address user) constant returns(uint) {
  return userBalances[user];
}
function addToBalance() {
  userBalances[msg.sender] += msg.amount;
}
function withdrawBalance() {
  amountToWithdraw = userBalances[msg.sender];
  if (!(msg.sender.call.value(amountToWithdraw)())) { throw; }
  userBalances[msg.sender] = 0;
}

我们可以暂时规定,调用msg.sender.call.value()函数时,系统会默认执行一个默认函数Function。 我们定义如下:

function () {
  vulnerableContract v;
  uint times;
  if (times == 0 && attackModeIsOn) {
    times = 1;
    v.withdraw();
   
   } else { times = 0; }
}

从上面的内容我们可以发现,执行withdrawBalance()方法的时候,我们会执行msg.sender.call.value(amountToWithdraw)()),默认会执行function()方法。 添加我们函数方法中定义的withdraw()方法(也就是我做了一个回调)。 这时候类似于递归的感觉,这也是攻击成功的原因之一。

函数栈如下:

    withdraw run 1st
      attacker function run 1st
        withdraw run 2rd
          attacker function run 2rd
              .........(后面会无限执行这两个方法,这也就是为什么叫race的原因)

在大家了解了这种攻击方式之后,我会在后续的文章中介绍这种攻击的具体例子。

这里感谢参考race-to-empty

6.参考链接