Solidity编写ERC20合约出现ParserError: Expected ';' but got 'is'错误如何解决
ParserError: Expected ';' but got 'is' --> GToken.sol:7:21: | 7 | Contract GToken is ERC20 { | ^^
报错产生原因
- 核心语法错误:Solidity 中合约定义的关键字为全小写的
contract,你代码中误写为大写首字母的Contract,编译器会将其识别为普通自定义标识符而非合约声明关键字,按照语法规则认为此处应该是变量声明需要加分号,后续遇到is关键字就会抛出解析错误。 - 额外潜在语法问题:你的代码还存在构造函数缺少闭合大括号、导入了未使用的
IERC20依赖、构造函数入参与父类初始化硬编码值冗余的问题,虽然这些不是本次报错的直接诱因,但也会导致后续编译或使用异常。
修复方案
修复后的完整合约代码
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol"; contract GToken is ERC20 { // 若要固定代币名称符号,可删除构造函数的name、symbol入参 constructor(string memory name, string memory symbol) ERC20(name, symbol) public { _mint(msg.sender, 1000000 * 10 ** decimals()); } }
调整说明
- 把首字母大写的
Contract修改为全小写的contract即可解决本次报错 - 补全了构造函数的闭合大括号
- 移除了无用的
IERC20导入语句 - 把原代码中
uint(decimals)调整为直接调用decimals()函数,0.8.x版本的OpenZeppelin ERC20实现中decimals是公开函数无需额外转类型 - 可选调整:如果你不需要自定义代币名称符号,直接固定为GToken和GTKN,可以把构造函数的入参删掉,父类初始化保持
ERC20("GToken", "GTKN")即可
内容的提问来源于stack exchange,提问作者Tarxan
相关产品推荐
相关产品推荐

