Компиляция openzeppelin ERC721 с ошибкой tron ​​и tronbox

Я надеюсь, что кто-то может помочь с этим. Я пытался изучить смарт-контракты на Tron с Solidity и tronbox, но у меня возникают проблемы при попытке создать токен ERC721.

Я создал очень простые контракты ERC20.sol, используя документы openzeppelin, но получаю ошибку для контракта ERC721, найденного в документах openzeppelin.

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, но я несколько раз изменил твердость и установил соответствующую версию 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.

2 ответа

Я переименовал метод в Address.sol и ERC721.sol в isContractTron, и он скомпилировался. Не знаю, сохранился ли функционал!!!!

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 .

Другие вопросы по тегам