Компиляция 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 .