繁体   English   中英

在solidity中声明为视图错误的函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM