部署ERC20至Moonbeam Alpha测试网导入及交易报错如何解决
问题1:OpenZeppelin依赖导入错误解决方案
该错误是因为原生solc编译器默认不会自动解析node_modules目录下的模块路径,无法识别@openzeppelin开头的导入语句,按以下步骤修改即可:
- 修正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()); } }
- 修改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万),节点判定交易会耗尽区块资源直接拒绝,按以下步骤修改:
- 修正deploy.js中的gas配置,部署ERC20合约所需gas通常不超过300万,修改后的交易参数如下:
const createTransaction = await web3.eth.accounts.signTransaction( { from: address, data: cexampletokenTx.encodeABI(), // 也可以先调用cexampletokenTx.estimateGas()动态获取准确gas值 gas: '3000000' }, privKey );
- 确认部署地址已经领取了足够的Moonbase测试网DEV代币作为gas费。
- 如果你已经将OpenZeppelin代码直接复制到合约文件中,还要检查复制的代码语法是否和你的Solidity版本匹配,避免编译出异常字节码导致gas消耗异常。
内容的提问来源于stack exchange,提问作者ChristianOConnor
相关产品推荐
相关产品推荐

