假设我有一个使用 erc721 协议的以太坊合约。 当我使用 web3 创建一个新的合约对象时。
const contract = new web3.eth.contract(contractABI, contractAddress);
是否可以只包含父 erc721 合约的 abi,只要我只使用 erc721 范围内的函数?还是 web3 需要完整的 abi?
我想知道我是否可以调用共享一个 abi 的多个 erc721 令牌。谢谢!
答案 0 :(得分:0)
是的,您可以对多个合同使用通用 ABI。限制是您只能使用 ABI 中定义的方法和属性。
反之亦然:如果您调用在 ABI 中定义但未在实际合约中定义的方法,则合约将尝试运行回退函数。
web3
需要 ABI 才能知道如何对函数参数和返回值进行编码。因此,如果您调用 foo(1, 2)
,它应该编码为 foo(uint8 1, uint64 2)
还是 foo(bool true, uint256 2)
?
但它实际上“只是”在 contract.methods.*
列表及其编码映射中生成正确函数的助手。因此,如果您不需要其中的一些,则可以通过不在 ABI 中定义它们来跳过此步骤。