智能合约中如何通过EXTCODECOPY读取数据
智能合约中通过EXTCODECOPY操作码可高效读取存储为合约代码的数据,适用于需多次读取的场景。该方法成本较低,但需满足特定条件,如合约代码不以0xEF开头,并且仅在数据频繁访问时经济可行。
智能合约中如何通过EXTCODECOPY读取数据
在智能合约中,若数据仅需写入一次、不会被覆盖且需在链上可用,可将其存储为合约代码。通过EXTCODECOPY操作码,可从其他合约中读取该数据。这种方式的优势在于,复制代码的成本相对较低,尤其适用于需要多次读取相同数据的场景。
EXTCODECOPY的执行成本与适用场景
EXTCODECOPY的首次访问成本为2600 gas,后续访问成本为100 gas加上每32字节3 gas。相比calldata的15.95 gas/字节,当数据量超过约200字节时,EXTCODECOPY更具成本优势。但此方法仅在数据需被多次读取时才经济可行。
合约代码存储的限制与要求
存储为合约代码的数据需满足特定条件,例如合约代码不能以0xEF开头,否则会被解释为以太坊对象格式(EOA),并受到更严格的限制。此外,合约代码的创建成本较高,约为32,000 gas加上每字节200 gas,因此仅适用于高频读取的场景。
EXTCODECOPY与链上数据可用性的关系
EXTCODECOPY读取的数据作为合约代码的一部分,具有链上永久可用性。但其可用性依赖于合约地址的正确性,且数据无法被修改。这种方式适用于需要长期存储且无需更新的数据,如静态配置或元数据。
资料与延伸阅读
你可以通过以下原始资料核对文中概念,并继续深入阅读。