>

Javascript VM 환경을 사용하여 리믹스 IDE에서 테스트 에테르를 한 계정에서 다른 계정으로 전송하는 프로그램을 사용하려고합니다. 수취인 계좌로 자금이 이체되는 것을 볼 수 없습니다.

계약 코드를 인쇄하는 진단 코드도 있지만 항상 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으로 제공하고 값 필드에 10 개의 에테르를 넣어 a4로 생성자를 호출하면 a4 균형에서 10 개의 에테르 감소를 볼 수 있습니다.

다음으로 계좌 a2, a3에서 승인 한 후, a1의 잔액이 10 개의 에테르로 부풀어 오르고 계약 잔액이 0이 될 것으로 예상됩니다.

a1 잔액 및 계약 잔액의 변경이 표시되지 않는 경우는 항상 0입니다.

누군가 내가 잘못한 것을 설명 할 수 있습니까, 아니면 이해에 차이가 있다면 설명해 주실 수 있나요?

  • 답변 # 1

    아마도 minApprovers = _minApprovers 와 같은 것을하고 싶을 것입니다  생성자에서. 그렇지 않으면 minApprovers  항상 0 입니다 와 당신의 ==   approve 에 대한 첫 번째 성공적인 호출로 인해 확인이 항상 실패합니다   currentApprovals == 1 를 만들 것입니다 .

  • 이전 arrays - Java 및 Kotlin의 바이트 (또는 비트) 시퀀스
  • 다음 bigdata - Cassandra, 하위 쿼리를 실행하는 효율적인 방법은 무엇입니까