Solidity编译报错:Expected ';' but got '(' 排查与修复求助
Solidity编译错误解析与提现合约修复
1. 解析"ParserError: Expected ';' but got '('"错误
该错误属于Solidity语法解析错误,意味着编译器在处理代码时,预期当前位置应该是分号;来结束一条语句,但实际却遇到了左括号(。这种情况通常由以下原因引发:
- 关键字拼写错误(比如函数定义的
function写错),导致编译器无法识别合法的语句结构,误将后续内容判定为非法语法 - 语句结尾遗漏分号,却在错误位置出现了括号,打破了语法规则
2. 提现合约代码修复
原合约存在多处语法拼写错误和逻辑错误,以下是修复后的完整代码:
//SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; contract Withdraw{ constructor() payable {} function withdrawByTransfer() public { payable(msg.sender).transfer(1 ether); } function withdrawBySend() public { bool success = payable(msg.sender).send(1 ether); require(success); } function withdrawByCall() public returns(bytes memory){ (bool success, bytes memory result) = payable(msg.sender).call{value: 1 ether}(""); require(success); return result; } }
关键修改点说明:
- 修正函数关键字拼写:
fucntion→function(共三处) - 修正 payable 拼写错误:
paybale→payable(共三处) - 修正以太单位写法:
1 eth→1 ether(Solidity中合法的以太单位是ether) - 修正变量名拼写错误:
succeess→success(共两处) - 修复
withdrawByCall的逻辑错误:- 原代码中
call{value: require(success)}完全不符合语法,改为call{value: 1 ether}("")指定转账金额并调用空函数 - 添加
require(success)校验调用是否成功,确保转账逻辑可靠
- 原代码中
内容的提问来源于stack exchange,提问作者Williams
相关产品推荐
相关产品推荐

