You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署ERC20至Moonbeam Alpha测试网导入及交易报错如何解决

问题1:OpenZeppelin依赖导入错误解决方案

该错误是因为原生solc编译器默认不会自动解析node_modules目录下的模块路径,无法识别@openzeppelin开头的导入语句,按以下步骤修改即可:

  1. 修正CExampleToken.sol的冗余导入:Solidity 0.8版本对应的OpenZeppelin合约已经将ERC20Detailed的功能整合到ERC20合约中,无需单独导入,修改后的合约代码如下:
// 补充SPDX声明解决警告
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.9;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract CExampleToken is ERC20 {
    constructor() ERC20("CExample", "CEXT") {
      // 注意ERC20默认18位小数,这里要乘10^18才能得到2500万枚实际代币
      _mint(msg.sender, 25000000 * 10 ** decimals());
    }
}
  1. 修改compile.js,新增node_modules路径解析逻辑,修改后的代码如下:
const path = require('path');
const fs = require('fs');
const solc = require('solc');

function findImports(importPath) {
  // 解析@openzeppelin开头的导入路径
  if (importPath.startsWith('@openzeppelin')) {
    const fullPath = path.resolve(__dirname, 'node_modules', importPath);
    return { contents: fs.readFileSync(fullPath, 'utf8') };
  }
  // 解析其他相对路径导入
  const fullPath = path.resolve(__dirname, importPath);
  return { contents: fs.readFileSync(fullPath, 'utf8') };
}

const contractPath = path.resolve(__dirname, 'CExampleToken.sol');
const source = fs.readFileSync(contractPath, 'utf8');
const input = {
    language: "Solidity",
    sources: {
        'CExampleToken.sol': {
            content: source,
        },
    },
    settings: {
        outputSelection: {
            '*': {
                '*': ['*']
            },
        },
    },
};
// 编译时传入findImports回调
const tempFile = JSON.parse(solc.compile(JSON.stringify(input), { import: findImports }));
const contractFile = tempFile.contracts['CExampleToken.sol']['CExampleToken'];
module.exports = contractFile;

问题2:交易提交报错ExhaustsResources解决方案

该错误是因为你在deploy.js中设置的gas值4294967295远高于Moonbase Alpha测试网的单区块gas上限(约1500万),节点判定交易会耗尽区块资源直接拒绝,按以下步骤修改:

  1. 修正deploy.js中的gas配置,部署ERC20合约所需gas通常不超过300万,修改后的交易参数如下:
const createTransaction = await web3.eth.accounts.signTransaction(
    {
        from: address,
        data: cexampletokenTx.encodeABI(),
        // 也可以先调用cexampletokenTx.estimateGas()动态获取准确gas值
        gas: '3000000'
    },
    privKey
);
  1. 确认部署地址已经领取了足够的Moonbase测试网DEV代币作为gas费。
  2. 如果你已经将OpenZeppelin代码直接复制到合约文件中,还要检查复制的代码语法是否和你的Solidity版本匹配,避免编译出异常字节码导致gas消耗异常。

内容的提问来源于stack exchange,提问作者ChristianOConnor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:09:04