我正在尝试使用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。
有人可以解释我做错了什么或者我的理解是否有任何差距?
您可能想在构造函数中执行类似minApprovers = _minApprovers
的操作。否则minApprovers
总是0
,你的==
检查将永远失败,因为第一次成功调用approve
将使currentApprovals == 1
。