首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有事务恢复错误的ERC777部署

带有事务恢复错误的ERC777部署
EN

Stack Overflow用户
提问于 2022-02-28 01:15:38
回答 2查看 350关注 0票数 1

我正在努力部署一个ERC777令牌,使用的是类型记录中的“硬帽子”( hardhat )。我的部署脚本如下

代码语言:javascript
复制
import { MarketSvc, ProductSvc } from '../libs/deployment-service/src';
import hre from 'hardhat';
async function main() {
    const marketAddress = await MarketSvc.deployContract(contractType);
    const productAddress =  await ProductSvc.deployContract(contractType, marketAddress);
}

我的执行功能如下所示

代码语言:javascript
复制
async deployContract(
    contractType: ContractType,
    ...args: any[]
): Promise<string> {
const contractFactory = await hre.ethers.getContractFactory(contractType);
    const contract =
  args === undefined
            ? await contractFactory.deploy()
            : await contractFactory.deploy(...args);
    await contract.deployed();
    console.log(contractType + ' Contract deployed to:', contract.address);
    return contract.address;
}

第一个部署成功。第二个部署失败,并出现错误。

代码语言:javascript
复制
MarketContract Contract deployed to: 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512
ProviderError: Error: Transaction reverted: function call to a non-contract account       
at HttpProvider.request (C:\src\trae\gbc\exchange\exchange_ui\node_modules\hardhat\src\internal\core\providers\http.ts:49:19)
at GanacheGasMultiplierProvider.request (C:\src\trae\gbc\exchange\exchange_ui\node_modules\hardhat\src\internal\core\providers\gas-providers.ts:312:34)
at processTicksAndRejections (node:internal/process/task_queues:96:5)

在(@openzeppelin\contracts\token\ERC777\ERC777.sol:75)下面的ERC777契约中,它失败了

代码语言:javascript
复制
  /**
 * @dev `defaultOperators` may be an empty array.
 */
constructor(
    string memory name_,
    string memory symbol_,
    address[] memory defaultOperators_
) {
    _name = name_;
    _symbol = symbol_;

    _defaultOperatorsArray = defaultOperators_;
    for (uint256 i = 0; i < defaultOperators_.length; i++) {
        _defaultOperators[defaultOperators_[i]] = true;
    }

    console.log("added operators");

    // register interfaces - It is failing here
    _ERC1820_REGISTRY.setInterfaceImplementer(address(this), keccak256("ERC777Token"), address(this));
    console.log("registered ERC777");
    _ERC1820_REGISTRY.setInterfaceImplementer(address(this), keccak256("ERC20Token"), address(this));
}

我的合同的构造函数是

代码语言:javascript
复制
    constructor(address defaultOperator)
    ERC777("SOMEtoken", "TKN", _defaultOps(defaultOperator)) {
        console.log(defaultOperator);
        _mint(_msgSender(), 1000000, "Initial Mint", "defaultOps");
}

我的坚固日志是

代码语言:javascript
复制
Error: Transaction reverted: function call to a non-contract account
  at GParticle.constructor (@openzeppelin/contracts/token/ERC777/ERC777.sol:75)       
  at EthModule._estimateGasAction (C:\src\trae\gbc\exchange\exchange_ui\node_modules\hardhat\src\internal\hardhat-network\provider\modules\eth.ts:425:7)
  at HardhatNetworkProvider._sendWithLogging (C:\src\trae\gbc\exchange\exchange_ui\node_modules\hardhat\src\internal\hardhat-network\provider\provider.ts:138:22)
  at HardhatNetworkProvider.request (C:\src\trae\gbc\exchange\exchange_ui\node_modules\hardhat\src\internal\hardhat-network\provider\provider.ts:115:18)
  at JsonRpcHandler._handleRequest (C:\src\trae\gbc\exchange\exchange_ui\node_modules\hardhat\src\internal\hardhat-network\jsonrpc\handler.ts:188:20)
  at JsonRpcHandler._handleSingleRequest (C:\src\trae\gbc\exchange\exchange_ui\node_modules\hardhat\src\internal\hardhat-network\jsonrpc\handler.ts:167:17)
  at Server.JsonRpcHandler.handleHttp (C:\src\trae\gbc\exchange\exchange_ui\node_modules\hardhat\src\internal\hardhat-network\jsonrpc\handler.ts:52:21)

我给出的接线员地址,是违抗部署的,是一份合同。但是我对777合同中可能发生的事情感到有点困惑。我有一个ERC20和1155,部署完美.

如果任何人有任何洞察力,所有的信息都会被感激。

EN

回答 2

Stack Overflow用户

发布于 2022-02-28 02:13:03

问题的根源是,如果你在做一个本地化的网站,比如草帽.您必须部署您自己的ERC1820_REGISTRY,因为它不存在。

openzepplin有一些实用程序,您可以使用它来启用这个非常简单的。

代码语言:javascript
复制
const { singletons } = require('@openzeppelin/test-helpers');
require('@openzeppelin/test-helpers/configure')

async function main() {
    const signers = await hre.ethers.getSigners();
    const address = signers[0].address;
    const erc1820 = await singletons.ERC1820Registry(address);

    ... deploy your ERC777
}
票数 1
EN

Stack Overflow用户

发布于 2022-08-15 07:36:53

我实现了ERC1820 & ERC777的完整部署,我的代码检查它是否不是,部署它,然后部署ERC777和注册接收者,它是用硬帽子实现的,我把指南放到了readme.md中

这是我的回购:

https://github.com/EhsanParsania/ERC777

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71289722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档