2

我希望有人可以帮助解决这个问题。我一直在尝试使用 Solidity 和 tronbox 在 Tron 上学习智能合约,但在尝试创建 ERC721 代币时遇到了问题。

我使用 openzeppelin 文档创建了非常简单的 ERC20.sol 合约,但是在 openzeppelin 文档中发现 ERC721 合约出现错误。

https://docs.openzeppelin.com/contracts/4.x/erc721

TypeError: Member "isContract" not unique after argument-dependent lookup in address.
   --> @openzeppelin/contracts/token/ERC721/ERC721.sol:375:13:
    |
375 |         if (to.isContract()) {
    |             ^^^^^^^^^^^^^
Compilation failed. See above.

我最初认为这可能是因为 Solidity 版本,但我已经更改了solidity 并多次安装了适当的 openzeppelin 版本,并且其他版本的 openzeppelin 存在相同的错误。

当前设置:

Ubuntu 20.04
tronbox version
Tronbox v2.7.23
Solidity v0.8.0 (tron-solc)
@openzeppelin/contracts  4.2.0
tronbox$ tail -n7  tronbox.js 
    compilers: {
      solc: {
        version: '0.8.0'
      }
    }
  }
}

完整输出:

tronbox$  tronbox compile --network development
Compiling ./contracts/GameItem.sol...
Compiling ./contracts/Migrations.sol...
Compiling @openzeppelin/contracts/token/ERC721/ERC721.sol...
Compiling @openzeppelin/contracts/token/ERC721/IERC721.sol...
Compiling @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol...
Compiling @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol...
Compiling @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol...
Compiling @openzeppelin/contracts/utils/Address.sol...
Compiling @openzeppelin/contracts/utils/Context.sol...
Compiling @openzeppelin/contracts/utils/Counters.sol...
Compiling @openzeppelin/contracts/utils/Strings.sol...
Compiling @openzeppelin/contracts/utils/introspection/ERC165.sol...
Compiling @openzeppelin/contracts/utils/introspection/IERC165.sol...

TypeError: Member "isContract" not unique after argument-dependent lookup in address.
   --> @openzeppelin/contracts/token/ERC721/ERC721.sol:375:13:
    |
375 |         if (to.isContract()) {
    |             ^^^^^^^^^^^^^
Compilation failed. See above.
4

2 回答 2

0

我将 Address.sol 和 ERC721.sol 中的方法重命名为 isContractTron 并编译。我不知道功能是否仍然存在!!!!

于 2021-12-01T15:24:23.770 回答
0

Tron VM 已经有Address.isContract( ISCONTRACT) 指令。并且 ERC721 合约将库与另一个isContract(). 这是我的 tronbox 问题,来自开发人员https://github.com/tronprotocol/tronbox/issues/136的回答。

有一个包含 TVM/EVM 差异的页面:https ://developers.tron.network/docs/vm-vs-evm 。

于 2022-01-17T12:22:29.963 回答