如何用Ethers.js访问智能合约外部定义的常量MAX_TARGETS
能否用Ethers.js访问合约外定义的MAX_TARGETS常量?
不能直接访问,原因如下:
- 你定义的
MAX_TARGETS是合约外部的全局常量,不属于Dummy合约的范畴。Solidity编译时,这个常量会被直接替换成字面量256,不会被写入合约的字节码或ABI中。 - 部署
Dummy合约后,链上的合约实例里没有这个常量的相关数据,合约ABI也不会包含它的信息,自然没法用Ethers.js读取到。
如果想让这个常量能通过Ethers.js访问,需要把它放到合约内部并加上public修饰符:
pragma solidity ^0.8.0; contract Dummy { uint256 public constant MAX_TARGETS = 256; }
这样编译后,Solidity会自动为该常量生成一个public的getter方法,ABI里也会包含这个方法的定义。部署后用Ethers.js可以这样读取:
const dummyContract = new ethers.Contract(合约地址, ABI, 提供者); const maxTargets = await dummyContract.MAX_TARGETS();
内容的提问来源于stack exchange,提问作者Louis Law
相关产品推荐
相关产品推荐

