2021-08-19 02:05 | 出处: ECN以太坊中文社区
以太七日谈 • 三十八
EIP-1559
➤ 伦敦升级后以太坊链上 gas 使用量增加了约 9%
8 月 15 日,Vitalik 在 Reddit 论坛发帖分析了为什么“伦敦升级之后以太坊链上 gas 使用量增加了 9% 左右”。根据伦敦升级之后的每日 gas 使用情况,每天的 gas 使用量提升了 9%。
Vitalik 认为其中有三个原因:1. 冰河世纪推迟,出块时间缩短 0.4 秒左右;2. 伦敦前的区块未满,约有 2-3% 的未使用空间;3. EIP-1559 basefee 的调整公式存在缺陷 (在当前的机制下,要使 basefee 趋于稳定,平均使用率需要略高于 50%)。
“目前看来,用户不需要为此担忧,但是要确保我们能安全地应对状态增长,客户端团队仍需要继续攻克无状态性/状态休眠机制 (statelessness/state expiry) 的工作。”在回帖中有用户追问为何伦敦升级后 gas 费上涨了近乎两倍,Vitalik 回复称根据 gas 费的数据来看,这种情况似乎只是一个月以来 gas 上涨趋势的延续。其他参与讨论的用户也猜测到这是由于大量 NFT 的交易需求,在去年 DeFi 大热期间,即使在 gas limit 提升 25% 之后,gas 费依然上涨了 1000%。此外,Vitalik 还在回帖中提及,EIP-1559 在测试网中关于挖矿和交易表现与实际生产环境大相径庭。
来源:https://www.reddit.com/r/ethereum/comments/p4nloh/why_has_the_chain_capacity_increased_by_9_after/
➤ EIP-1559 上线后的一些数据
Blocknative 分享了 EIP-1559 上线后它的交易池数据存档里的一些最新结果。
在过去两天,类型 2 的交易平均占以太坊交易总数接近 21%,与 8 月 13 日查看的 17% 增长了 23%。
不同交易类型比例
随着钱包推出 EIP-1559 支持,类型2 交易量继续增加成为主要交易类型。
类型2 交易的数量
如预期般,EIP-1559 的基本费用继续基于对打包到区块的需求浮动。
平均基本费用
来源:https://twitter.com/blocknative/status/1427433075231793175?s=20
coinmonks 的 @takenstheorem 在推特上也分享了根据 100,000 个区块预估以太坊伦敦升级后的 gas 价格的数据对比分析图:
他表示,EIP-1559 上线后 gas 价格的更稳定了,但也意味着周末低 gas 价格机会变更少了。
评论区也有人讨论,面对这个变化,你是宁愿烧毁 gas 费还是拥有突然的低 gas 开销机会?有人回复说持币者与用户会在这个问题上出现分歧。
大家怎么看?
来源:
https://twitter.com/takenstheorem/status/1427130936940851201?s=20➤ 矿工更愿意打包 EIP-1559 式交易?
Yearn 的 banteg 发推表示,他即使以 1-2 gwei 的小费发送的 1559 式交易都在下一个区块就被打包了,而遗留交易即使支付更多的 gas 也要在交易池里等待 5-10 分钟,他发出矿工是否更愿意打包 1559 式交易的疑问。
MyCrypto 钱包的创始人 Taylor Monahan 在推特上给出了详细的解释,以下为其解释的编译:
根据 Blocknative 的数据,EIP-1559 上线主网后,即使当区块几乎是空的时候也有大量交易在交易池里等待。
很多人可能会觉得很惊讶,是不是出漏洞了?
不是的,这是 EIP-1559 的机制设计。
首先请知悉,类型2 是 EIP-1559 式交易;类型 0 是发送 gas 价格的遗留交易;有效费用 (Effective Fee) 即有效小费 (effective tip)——矿工将从交易里获得的收入。交易如何在节点交易池里分类即交易被打包的顺序。交易在交易池里是按有效小费来分类的。
根据 Blocknative 的数据,类型 2 交易的打包速度比类型 0 快20%,但类型 0 的有效小费比类型 2 高 23.5%。
更令人惊讶的是 Blocknative 上周提供的数据显示即使类型 2 交易的有效小费仅比类型 0 的高 6%,打包速度却高 24%。
这是否就表明矿工更愿意打包类型 2 交易,类型 2 交易有更快的打包速度呢?
硬分叉前后的一个区别在于“等待打包的时间“的数据点其实有一点不一样了。硬分叉之前,每笔交易都可能被打包到区块里,无法被打包或延迟打包的情况取决于价格竞争。
现在只有有效小费大于 0 的交易才会被打包。换句话说,如果交易的费用上限或 gas 价格低于当前基本费用,交易就无法被打包。
类型 2 交易可能更快被打包的一个原因是因为钱包、代码和给类型 2 交易定价格的人已经把基本费用考虑了 (例如,把费用上限设为当前基本费用的2倍)
而类型 0 的定价策略更可能是约等于当前基本费用。
例子:
当前基本费用=40,当你在发送交易时升到到 42
类型 2:价格上限=80,小费=1 -> 有效价格=1
类型 0:gas 价格=40 ->价格上限=40,小费=40 ->0,即无法被打包
其实这里“小费=40”其实是没有意义的,因此实际上这些类型 0 的出价是低于基本费用的,也就不会被打包了。
来源:https://twitter.com/tayvano_/status/1427388820517883926?s=20
Eth2
➤ 客户端发布用于测试网 Altair 升级的版本
Prysm 客户端发布了用于 Pyrmont 测试网进行 Altair 升级的版本 V2.0.0-rc.0。
详情:https://github.com/prysmaticlabs/prysm/releases/tag/v2.0.0-rc.0
Lighthouse 也更新了预发布版本,他们要求所有 Pyrmont 测试网用户在 Altair 分叉前 48 小时升级到此版本。
详情:https://github.com/sigp/lighthouse/releases/tag/v1.5.0-rc.1
其他关于 Eth2 的最新消息请看最新一期 What‘s New in Eth2
Layer2
➤ 以太坊扩容解决方案 Polygon 收购 L2 解决方案 Hermez Network,以扩展其 zk-Rollup 蓝图
8 月 13 日,Polygon 宣布基于 zk-Rollups 技术的解决方案 Hermez Network 将加入 Polygon 的生态中。Hermez Network 将更名为 Polygon Hermez,其将成为 Polygon 套件的一部分 (包括 Polygon PoS、Polygon SDK、Polygon Avail 等解决方案)。Polygon 表示将最多提供价值为 2.5 亿美元的 MATIC 代币收购 Hermez Network,届时将发布一个智能合约,将两个项目的代币 MATIC 和 HEZ 合并,合并以 1 HEZ : 3.5 MATIC 的比例进行。
cr:Polygon
Polygon Hermez 将在 Polygon 的支持下继续开发,Hermez 项目的所有组件 (技术、已上线的解决方案、团队、HEZ 代币) 都将集成至 Polygon 的生态系统中。目前,Polygon Hermez 的主要项目是 Hermez zkEVM 的开发。
来源:
https://blog.hermez.io/polygon-hermez-merge/
https://blog.polygon.technology/hermez-network-is-joining-polygon-and-becoming-polygon-hermez-via-the-first-full-blown-merger-of-8cfc9f22a6fd
➤ L2 扩容解决方案发布 Arbitrum One 生态门户
此前,Arbitrum 于 8 月 7 日发布的公告中,Arbitrum 的研发团队 Offchain Labs 表示 Arbitrum One 将于 2021 年 8 月末面向所有终端用户开放,届时每一个在 Arbitrum 上部署了的项目都会向其用户开放二层。
8 月 12 日,Arbitrum 推出 Arbitrum One 生态门户,其中包含 70 个 DApp、钱包以及工具 (包括 Aave、Alchemy、CREAM Finance、Celer cBridge、Chainink、Coinbase Wallet、Connext、Curve、Etherscan、Hop Protocol、imToken、Infura、Loopring、MCDEX、MakerDAO、MetaMask、SushiSwap、The Graph、Uniswap 等)。8 月末 Arbitrum 向公众开放时,它们将是首批在 Arbitrum One 上运行的项目以及工具。
来源:https://portal.arbitrum.one/
➤ L2 去中心化交易所 DeversiFi 更新了以太坊 L2 生态系统图
DeversiFi 在推特更新了以太坊 L2 生态系统图,图中总计 162 个项目,其中包括扩容、NFT、游戏、隐私、借贷、衍生品、交易所、桥接项目等。
来源:https://twitter.com/deversifi/status/1424732007431643137
生态
➤ 跨链互操作协议 Poly Network 遭受攻击,被盗取超 6 亿美元资产
8 月 10 日,Poly Network 称其协议遭受到了攻击,总计超 6.1 亿美元的资产被攻击者分别转至以太坊、BSC 和 Polygon 的地址。
@kelvinfichter 在推特上总结了此次攻击的完整过程,以下为其推文翻译:
Poly 有一个合约 “EthCrossChainManager”。这基本上是一个特许合约 (privileged contract),它有权触发来自另一条链的信息。这是跨链项目的标准逻辑。
合约中有一个函数 verifyHeaderAndExecuteTx,任何人都可以调用它来执行跨链交易。基本上它 (1) 通过检查签名 (似乎另一条链是 PoA 侧链或是其他链) 来验证区块头的有效性;然后 (2) 用 默克尔证明 (Merkle proof) 检查该交易是否打包进该区块内。代码非常简单:https://github.com/polynetwork/eth-contracts/blob/d16252b2b857eecf8e558bd3e1f3bb14cff30e9b/contracts/core/cross_chain_manager/logic/EthCrossChainManager.sol#L127
该函数执行的最后一件事是调用 _executeCrossChainTx,它实际调用的是目标合约。这就是关键的缺陷所在。Poly 检查目标是否为合约,但是 Poly 忘记阻止用户调用一个非常重要的目标合约 “EthCrossChainData” 合约:https://github.com/polynetwork/eth-contracts/blob/master/contracts/core/cross_chain_manager/data/EthCrossChainData.sol
为什么这个目标这么重要?它追踪了用于验证来自另一条链的数据的公钥列表。这意味着,如果你能修改这个列表,你甚至不需要破解私钥。只需将公钥设置为与自己的私钥相匹配。查看了解跟踪该列表的位置:https://github.com/polynetwork/eth-contracts/blob/d16252b2b857eecf8e558bd3e1f3bb14cff30e9b/contracts/core/cross_chain_manager/data/EthCrossChainData.sol#L22
于是有人意识到他们可以直接向 EthCrossChainData 合约发送一条跨链信息。这对他们有什么好处?好吧,猜猜谁拥有 EthCrossChainData 合约......没错,是 EthCrossChainManager。
通过发送这条跨链信息,用户可以欺骗 EthCrossChainManager 调用 EthCrossChainData 合约,由此通过 onlyOwner 的检查。现在,用户只需要制作正确的数据即可触发更改公钥的函数......该函数的链接:https://github.com/polynetwork/eth-contracts/blob/d16252b2b857eecf8e558bd3e1f3bb14cff30e9b/contracts/core/cross_chain_manager/data/EthCrossChainData.sol#L45
剩下的唯一挑战是弄清楚如何让 EthCrossChainManager 调用正确的函数。接下来的内容较复杂,关于 Solidity 如何选择你试图调用的函数。
交易输入数据的前四个字节称为“签名哈希” (signature hash) 或简称“sighash”。这是一条简短的信息,告诉 Solidity 合约你要做什么。
函数的 sighash 是通过取 “<function name>(<function input types>)” 哈希的前四个字节来计算的。例如,ERC20 转移函数的 sighash 是 “transfer(address,uint256)” 哈希的前四个字节。
Poly 的合约愿意调用任何合约。但是,它只会调用与以下 sighash 对应的合约函数:
等等...这里的 “_method” 为用户输入。要调用正确的函数,攻击者必须做的就是找出 “ _method” 的一些值,当与其他值结合时,它具有与目标函数的 sighash 相同的前四个字节。
只需稍加研究,你就可以轻松地找到一些可以产生正确 sighash 的输入。你不需要找到完整的哈希碰撞 (hash collision),只需检查前四个字节。那么这个理论正确吗?
嗯……这是目标函数的实际 sighash:
>http://ethers.utils.id(‘putCurEpochConPubKeyBytes(bytes)‘).slice(0, 10) ‘0 x41973cd9‘
这是攻击者制作的 sighash:
>http://ethers.utils.id(‘f1121318093(bytes,bytes,uint64)‘).slice(0, 10) ‘0 x41973cd9‘
太神奇了。不需要私钥!只要制作出正确的数据,然后合约会自动破解!
该攻击事件带给我们最大的教训就是:如果你有像这样的跨链中继合约,请确保它们不能用于调用特殊合约。EthCrossDomainManager 就不应该拥有 EthCrossDomainData 合约。
额外提醒一句。如果你的合约确实需要这样的特殊权限,请确保用户不能使用跨链信息调用那些特殊合约。
为了让大家更好的衡量,这里列出了触发跨链信息的函数:https://github.com/polynetwork/eth-con