Ошибка при попытке развернуть стандартный контракт OpenZeppelin ERC777 в ganache-cli с использованием платформы brownie

#ethereum #ganache #openzeppelin #brownie

Вопрос:

Я знакомлюсь с разработкой смарт-контрактов с использованием brownie framework и solidity. Для начала я использовал brownie console для развертывания некоторых стандартных контрактов на токены OpenZeppelin.

Я сделал это, скопировав код прямо из их документации и настроив импорт для работы с brownie, как на этой странице: https://docs.openzeppelin.com/contracts/3.x/erc777

Он отлично работает для контрактов ERC20 и ERC721. Однако ERC777 всегда возвращается и выдает мне транзакцию без сообщения об ошибке, где ни один из методов отслеживания не работает, поскольку они не реализованы для транзакции развертывания.

Код для токена ERC777 (не работает)

 // contracts/GLDToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;

import "OpenZeppelin/openzeppelin-contracts@3.0.0/contracts/token/ERC777/ERC777.sol";

contract GLDToken is ERC777 {
    constructor(uint256 initialSupply, address[] memory defaultOperators)
        public
        ERC777("Gold", "GLD", defaultOperators)
    {
        _mint(msg.sender, initialSupply, "", "");
    }
}
 

Код для токена ERC20 (рабочий)

 // contracts/TestToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;

import "OpenZeppelin/openzeppelin-contracts@3.0.0/contracts/token/ERC20/ERC20.sol";

contract TestToken is ERC20 {
    constructor(uint256 initialSupply) public ERC20("Gold", "GLD") {
        _mint(msg.sender, initialSupply);
    }
}
 

Вывод в консоль Brownie

 >>> t1 = TestToken.deploy(1e21, {'from': accounts[0]})
Transaction sent: 0x33de3fadb7ccf2dd8b3841365ad88190c3486a803f6ea30c04ef8c0111ec9cbd
  Gas price: 0.0 gwei   Gas limit: 6721975   Nonce: 2
  TestToken.constructor confirmed   Block: 4   Gas used: 721166 (10.73%)
  TestToken deployed at: 0x8c81630387e9507739fCeB6cbB14Ea1Da11D2339

>>> t2 = GLDToken.deploy(1e21, [], {'from': accounts[1]})
Transaction sent: 0xca91d510e7a54099182fe218ff0ec55c62ccb06227afbe9d9497790e35776651
  Gas price: 0.0 gwei   Gas limit: 6721975   Nonce: 0
  GLDToken.constructor confirmed (reverted)   Block: 5   Gas used: 260948 (3.88%)

 

Я также попытался ввести действительный адрес (контракта развернутого оператора) в списке для оператора токена по умолчанию, который передается в качестве второго параметра функции развертывания GLDToken. К сожалению, это не имело никакого значения.

Я исчерпал все возможности с помощью функции deploy и не получаю никакой дополнительной отладочной информации. Кто-нибудь сталкивался с подобной проблемой или знает, как отладить это дальше? Любая помощь будет высоко оценена!

Комментарии:

1. такая же проблема. Вы нашли решение?

2. Я тоже такой… есть какие-нибудь успехи?

Ответ №1:

У меня была аналогичная проблема с контрактом ERC777 от openzeppelin. Я не смог найти достаточного ответа в Интернете, поэтому я хотел поделиться тем, что сработало для меня. Я визуализировал плоский файл контракта. На моей линии 772: IERC1820Registry internal constant _ERC1820_REGISTRY = IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24);

Я локально развернул реестр ERC1820 и заменил этот адрес.

Реестр

Затем я смог развернуть ERC777.

Надеюсь, это сработает и поможет.

Комментарии:

1. Неясно, для чего предназначена ссылка. Если это изображение, используйте imgur от stackoverflow. Если это код, используйте markdown.

2. Ссылка указывает на договор регистрации на etherscan.io это может быть развернуто локально.