[英]Function declared as view error in solidity
pragma solidity >=0.4.16 <0.9.0;
contract Wallet {
uint balance = 0;
bool a = true;
function deposit(uint dep_amt) public {
balance += dep_amt;
}
function withdraw (uint wdraw_amt) public view returns(string memory error){
if(wdraw_amt<=balance){
balance -= wdraw_amt;
}
else{
error = "Insufficient Balance";
return error;
}
}
function getBalnce() public view returns (uint) {
return balance;
}
}
我对solidity非常陌生,我正在尝试编写一个简单的银行系统,该系统显示余额并根据存款和取款更新余额。 当要提取的金额大于余额时,我想在提取功能中显示错误,但它显示一条错误消息:
TypeError: Function declared as view, but this expression (potentially) modifies the state and thus requires non-payable (the default) or payable.
有没有办法可能显示来自同一函数的错误?
如果没有,请让我知道替代方案。
提前致谢!!。
view
函数承诺不修改合约状态——例如不修改存储变量。 有关更多信息,请参阅文档。
但是您的代码修改了balance
变量,这是一个存储变量。
function withdraw (uint wdraw_amt) public view returns(string memory error){
if(wdraw_amt<=balance){
balance -= wdraw_amt; // <-- here
}
并根据存取款更新余额
由于您的要求之一是实际更新存储变量,因此您需要删除view
修饰符才能做到这一点。
function withdraw (uint wdraw_amt) public returns(string memory error){
然后用户需要发送交易(而不是调用)来执行withdraw()
函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.