智能合约中如何通过EXTCODECOPY读取存储在合约代码中的数据
智能合约中可通过EXTCODECOPY操作码读取存储在合约代码中的数据。该操作码首次访问时成本较高,但后续访问成本较低,适合数据被多次读取的场景。
EXTCODECOPY操作码的读取机制
EXTCODECOPY是EVM中用于从其他合约中复制代码的指令。当数据存储在合约代码中时,可通过EXTCODECOPY读取。该操作码首次访问时需要支付2600 gas,后续访问则只需100 gas加上每32字节3 gas的费用。
EXTCODECOPY的适用场景
EXTCODECOPY适用于数据需要被多次读取的场景。由于首次访问成本较高,只有当数据在多个交易中被重复读取时,该方法才具有经济性。对于一次性读取的数据,使用calldata可能更划算。
EXTCODECOPY的限制与注意事项
EXTCODECOPY读取的数据必须存储在合约代码中,且合约代码不能以0xEF开头,否则会被解释为以太坊对象格式,导致读取失败。此外,EXTCODECOPY仅能读取代码,不能直接访问存储变量。
EXTCODECOPY与其他存储方式的对比
与calldata相比,EXTCODECOPY在数据量较大时更具成本优势。当数据量超过约200字节时,EXTCODECOPY的读取成本低于calldata。但EXTCODECOPY的部署成本较高,需支付32,000 gas加上每字节200 gas的费用。
资料与延伸阅读
你可以通过以下原始资料核对文中概念,并继续深入阅读。