昨天晚上有朋友发消息给我,钱锁到智能合约里提不出来了。
image.png大多数情况下,如果用户误操作把钱打到了一个智能合约地址,基本上就是有去无回了。但万事都没那么绝对,昨天碰到的情况,这个合约是他们自己可以控制的,并且合约含有取款方法,只是由于逻辑写的有问题,导致取款失败。下面是出问题的代码片段:
function withdraw(address receiver, uint256 amount) external onlyOwner returns (uint256) {
require(amount > 0, 'Amount should be larger than 0');
require(address(this).balance >= amount, 'Balance insufficient');
_token.transfer(receiver, amount);
return _token.balanceOf(address(this));
}
}
问题就出在 require(address(this).balance >= amount, 'Balance insufficient');
这一行,这里本意是判断 _token
余额的,却写成了判断主链币余额,而这个智能合约并没有payable
方法去接受主链币打款,导致 address(this).balance
的值始终为 0。
这种情况下,只要想办法往智能合约充值,使 address(this).balance
具有某个数量的值就好了。
经过一番操作,最终问题得到解决。
网友评论