在 erc721/erc20 代币之间共享 ABI?

时间:2021-03-22 08:18:54

标签: javascript node.js solidity web3

假设我有一个使用 erc721 协议的以太坊合约。 当我使用 web3 创建一个新的合约对象时。

 const contract = new web3.eth.contract(contractABI, contractAddress);

是否可以只包含父 erc721 合约的 abi,​​只要我只使用 erc721 范围内的函数?还是 web3 需要完整的 abi?

我想知道我是否可以调用共享一个 abi 的多个 erc721 令牌。谢谢!

1 个答案:

答案 0 :(得分:0)

是的,您可以对多个合同使用通用 ABI。限制是您只能使用 ABI 中定义的方法和属性。

反之亦然:如果您调用在 ABI 中定义但未在实际合约中定义的方法,则合约将尝试运行回退函数。


web3 需要 ABI 才能知道如何对函数参数和返回值进行编码。因此,如果您调用 foo(1, 2),它应该编码为 foo(uint8 1, uint64 2) 还是 foo(bool true, uint256 2)

但它实际上“只是”在 contract.methods.* 列表及其编码映射中生成正确函数的助手。因此,如果您不需要其中的一些,则可以通过不在 ABI 中定义它们来跳过此步骤。