在Javascript VM环境中不传输以太网的Solidity代码

问题描述 投票:0回答:1

我正在尝试使用javascript VM环境将测试醚从一个帐户转移到另一个帐户上的程序。我无法看到资金转移到受益人帐户。

我也放了诊断代码,打印合约当前余额,但总是打印0。

pragma solidity <=0.5.7;
contract MultiSigWallet{
    address payable private owner;
    address payable private  beneficiary;
    uint private minApprovers ;
    uint private currentApprovals;
    mapping(address => bool) approvedBy;
    mapping(address =>bool) isApprover;
    uint public contractBalance;

    constructor  (address payable _beneficiary, address [] memory  _approvers, int32 _minApprovers) public payable{
        require(_approvers.length > 0 && _minApprovers > 0,"At least one approver is required!");
        require(_approvers.length >= minApprovers,"Number of minimum approvers cannot be more than total approvers count");
        owner   = msg.sender;
        beneficiary = _beneficiary;
        for(uint i = 0;i<_approvers.length;i++){
            isApprover[_approvers[i]]= true;
        }

    }

    function approve () public{
        require(isApprover[msg.sender],"Not an Approver");
        if(!approvedBy[msg.sender]){
         approvedBy[msg.sender] = true;
         currentApprovals++;
        }
        if(currentApprovals== minApprovers){
            beneficiary.send(address(this).balance);
            selfdestruct(owner);
        }
    }

    function getContractBalance () public payable returns( uint){
       contractBalance =  address(this).balance;
    }
    function reject() public {
        require(isApprover[msg.sender],"Not an approver!");
        selfdestruct(owner);
    }


}

如果我提供受益人地址为a1,批准者列表为a2,a3和i通过在值字段中放入10个醚来调用带有a4的构造函数,我可以看到a4余额中的10减少。

接下来从账户a2,a3批准后,我预计a1的余额将增加10个醚,合约余额变为0。

但是我没有看到a1余额的变化,合同余额总是为0。

有人可以解释我做错了什么或者我的理解是否有任何差距?

solidity
1个回答
0
投票

您可能想在构造函数中执行类似minApprovers = _minApprovers的操作。否则minApprovers总是0,你的==检查将永远失败,因为第一次成功调用approve将使currentApprovals == 1

© www.soinside.com 2019 - 2024. All rights reserved.