被调用合约使用该操作码
发起调用合约使用该操作码
风险 1 :
相比于传统的SSTORE和SLOAD,新增的瞬态存储主要改变了数据的存储期限,tstore 存储的数据通过 tload 进行读取,在一笔交易执行结束后该数据将会被释放,而不是同 sstore 一样写入合约被永久性的记录。开发者在使用该操作码时应该认清该操作码的特性,以免错误的使用导致数据不能正确的写入到合约中而造成损失。另外,tstore 的数据属于私有变量,仅合约本身可以访问。如果想要外部使用该数据只能通过参数的形式进行传递或暂存到一个 publicstroage 变量中。
风险 2 :
另一个潜在风险是,如果智能合约开发人员不正确管理瞬态存储变量的生命周期,可能导致数据在不应该的时间被清除或错误地保留。如果合约期望在事务的后续调用中使用存储在瞬态存储中的数据,但未能适当地管理这些数据的生命周期,可能会在不同调用之间错误地共享或丢失数据,从而导致逻辑错误或安全漏洞。考虑到类似于 Token 项目的 balance 或者 allowance 数据未能正确的存储将会导致合约逻辑的错误,造成损失。或在对 owner 地址进行设置时使用了该操作码将会导致特权地址不能正确的被记录从而丢失对合约重要参数的修改。
考虑一个智能合约,该合约使用瞬态存储来临时记录一个加密货币交易平台上的交易价格。该合约在每笔交易完成时更新价格,并允许用户在短时间内查询最新价格。然而,如果合约设计没有考虑到瞬态存储在交易结束时被自动清除的特性,那么在一笔交易结束后到下一笔交易开始之前的这段时间内,用户可能会得到一个错误或过时的价格。这不仅可能导致用户做出基于错误信息的决策,还可能被恶意利用,影响平台的信誉和用户的资产安全。
该提案改变了之前 selfdestruct 操作码的行为,不销毁合约,仅转移 token,仅与自毁同一交易中创建的合约才会被销毁。这个 EIP 的影响相对较大。
用 create 2 在同一地址重新部署合约,以使合合约升级。不再支持此功能,应改用ERC-2535或其他类型的代理合约。(这可能会影响到使用 create 2 实现可升级合约的链上合约的安全性)
智能合约中的 SELFDESTRUCT 操作允许合约销毁,并将合约余额发送给指定的目标地址。在这种情况下,合约使用 SELFDESTRUCT 销毁以太币,并将销毁的以太币发送给了合约。但是该合约仅能是在同一笔交易中创建的合约(同一笔交易中由本合约或其他合约创建的合约)。否则将仅转账以太而不销毁合约(例如自毁且受益者为自毁合约,这将会不产生任何改变)。这将会影响一切依赖于 selfdestruct 进行提款或其他操作的合约。
一种类似于1inchCHIToken 的 GasToken 的工作原理:保持一个偏移量,始终在此偏移量处执行CREATE 2或SELFDESTRUCT。在此更新之后,如果当前偏移量的合约尚未正确自毁,则之后的 CREATE 2将不能成功的部署合约。
该提案实施并不能导致直接对合约进行攻击,但会损害原有已部署的依赖 selfdestruct 操作的合约的正常逻辑(仅依赖自毁进行资金转移的合约不受到影响,如果后续操作必须要求自毁的合约被删除,则受到影响),导致合约非预期工作,仅对合约以及用户而言,可能导致合约的罢工,损失资金等危害(例如原本利用 create 2 在原地址部署新合约,自毁原合约进行升级的合约,不再能够成功部署)。长远来看,修改某项操作码的功能可能会带来中心化的问题。
例如现有一个金库合约 vault 进行更新:
create 2 临时存储合约用来临时储备 vault 的资金
自毁 vault 合约,资金转账到临时合约(仅转移了资金而没有销毁合约)
在原地址 create 2 新的 vault 合约(失败,因为原有 vault 合约没有被销毁)
自毁临时合约将资金还给 vault(资金损失,vault 合约没有被创建)
坎昆升级将进一步增强以太坊的竞争优势。但此次升级对核心智能合约层的改动带来了风险,这会影响现有的 DApps 的安全运行。在进行智能合约开发的过程中,这些改变以及可能引发的风险同样需要被高度关注。您可以与Salus联系获得风险检查或审计支持,也可以通过进一步阅读相关内容以了解变化。
CancunNetworkUpgradeSpecification
EIP-1153
EIP-4788
EIP-4844
EIP-5656
EIP-6780
EIP-7516
Metapodcontract
GasToken 2contract
以上就是以太坊坎昆升级前,项目开发者必看的几项安全检查的全部内容,望能这篇以太坊坎昆升级前,项目开发者必看的几项安全检查可以帮助您解决问题,能够解决大家的实际问题是非常好学习网一直努力的方向和目标。