原文地址:Maat: Analyzing and Optimizing Overcharge on Blockchain Storage | USENIX

第一遍阅读后 (5-10 分钟)

这篇文章,大概是关于什么的?

这篇文章主要讲的是作者团队开发了一个叫做 Maat 的工具,用来解决 Ethereum 中存储过度收费的问题。

这个 Maat 有三大好处:

  1. 能在更精细的颗粒度上识别存储收费情况。(fine-grained)
  2. 基于共识开发,具有节点之间的连续性。(consensus-oriented)
  3. 实现资源的预分配。(resource pre-allocation)

以及,使用 Maat 的额外开销很小,且具有扩展性。

第二遍阅读后 (约 1 小时)

【论文核心问题】: 这篇文章想要解决的核心问题是?

Three overcharge issues:

  • Continuous access to the same object within a block
  • Conitnuous access to the same object across a limited number of blocks
  • The deployment of duplicate contracts

【它的解决方案】: 作者提出的核心方法/模型是?

作者构建了一个工具:hzysvilla/Maat。它主要采用下面三种作用:

  • 能在更精细的颗粒度上识别存储收费情况。(fine-grained)
  • 基于共识开发,具有节点之间的连续性。(consensus-oriented)
  • 实现资源的预分配。(resource pre-allocation)

【我最大的疑问/不理解的地方】: 我目前最不明白的是?

“收到过高的交易费困扰,因此需要解决这个交易费过高的问题。”对交易者来说,tx fee 是经济损失,但是对于区块的发布者而言,tx fee 应该是赚的钱吧。那为什么只说是损失呢?还是说,这里有一部分的 tx fee 实际上被销毁了,这部分钱就没了?

从用户的角度来说,都是损失。

基础费总是被销毁的。

而且,费用太高会降低社区活跃度,不利于发展。


经常看到 EIP 后面跟一个数字,这似乎是 ETH 的一些版本协议。这些协议是什么?它们是怎么命名的?

EIP 的全称是“以太坊改进提案(Ethereum Improvement Proposal)”,它是一个标准化的设计文档,任何社区成员(包括开发者、研究者、用户等)都可以通过它来提出对以太坊网络的新功能、更改或改进。

EIP 的命名方式就是“EIP+提案编号”。


怎么理解 World State (世界状态)?

  • 整个 ETH 的链就是一个巨大的账本,且处于不断变化中,而世界状态就是这个账本在某一时刻的“快照”。
  • 世界状态是一个 MPT of Accounts (账户组成的默克尔树,一种特殊的数据结构),这棵树的每一个叶子节点都代表一个账户。
  • 这些账户有两种类型:
    • EOA (Externally Owned Account) 外部账户,主要记录余额 (balance)
    • CA (Contract Account) 合约账户,代表一个已经部署的智能合约,主要有下面的状态。
      • 余额 (Balance):该合约账户持有的以太币余额。
      • 字节码哈希 (Bytecode Hash):一个指向该合约程序代码的指针(我们可以简单把哈希理解为一种特殊的指针)
      • 存储树根 (Storage Root):一个指向另一棵独立的 MPT 的指针,这棵 MPT 为 MPT of Contract Storage,专门用来存储该合约内部的变量和数据。
  • 与区块的关系:
    • 以太坊网络通过不断处理交易来更新世界状态。例如,一笔转账交易会修改 EOA 的余额,一次合约调用可能会修改 CA 的存储数据。
    • 每当一个区块(Block)被打包,其中包含的所有交易(Transactions)都会被执行,从而将世界状态从一个版本更新到下一个版本。
    • 区块头里包含一个非常重要的值——状态树根(State Root)。这个“树根”是整个世界状态数据结构经过哈希计算后得到的唯一指纹。它将区块与该区块执行完毕后的“世界状态快照”牢牢地绑定在一起,确保了数据的完整性和可验证性。(也就是说,如果 world state 不是该区块执行后的状态,那么就无法通过验证。保证共识机制)

我有几个问题:

  1. 为什么存储会需要收费?(防止 DoS 攻击)
  2. 为什么存储会过度收费?(收费不精细)
  3. 为什么存储过度收费的问题这么严重,以太坊的开发者自己却不管呢?(管了,提出了三种优化方式,但是没彻底解决)
  4. 为什么作者团队的成果这么好,以太坊却没有使用?(需要经理完整的流程,通过 EIP 后才能使用。)