2017-11-16 29 views
0
내가 (다른 사람의 에테르를 이동) 간단한 전송 방법을 테스트하기 위해 노력하고있어

하지만 리믹스 (견고 웹 컴파일러)web3 오류 : VM이 실행 eth_estimateGas 예외 상태 : 유효하지 않은 연산 코드

transact to browser/Exchange.sol:Exchange.transfer pending ... 
transact to browser/Exchange.sol:Exchange.transfer errored: Error: VM Exception while executing eth_estimateGas: invalid opcode 
at /Users/strender/.nvm/versions/node/v8.8.1/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:59368:17 
at /Users/strender/.nvm/versions/node/v8.8.1/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:69306:5 
at /Users/strender/.nvm/versions/node/v8.8.1/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:11335:9 
at /Users/strender/.nvm/versions/node/v8.8.1/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:7895:16 
at replenish (/Users/strender/.nvm/versions/node/v8.8.1/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:8415:25) 
at iterateeCallback (/Users/strender/.nvm/versions/node/v8.8.1/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:8405:17) 
at /Users/strender/.nvm/versions/node/v8.8.1/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:8380:16 
at /Users/strender/.nvm/versions/node/v8.8.1/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:11332:13 
at /Users/strender/.nvm/versions/node/v8.8.1/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:69302:9 
at /Users/strender/.nvm/versions/node/v8.8.1/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:63982:7 

하고 말한다 내 견고성 파일 구조

pragma solidity ^0.4.18; 

contract Exchange { 
    mapping (address => uint256) public balances; 
    string public helloworld; 

    event LogDeposit(address sender, uint amount); 
    event LogWithdraw(address receiver, uint amount); 
    event LogTransfer(address sender, address receiver, uint amount); 
    event HelloworldEvent(string helloworld); 


    function Exchange() { 
    helloworld = "helloworld!"; 
    } 

    function helloWorld() returns (string) { 
    return helloworld; 
    } 

    function deposit() payable returns(bool success) { 
    balances[msg.sender] += msg.value; 
    LogDeposit(msg.sender, msg.value); 
    return true; 
    } 

    function withdraw(uint value) returns (bool success) { 
    if (balances[msg.sender] < value) throw; 
    balances[msg.sender] -= value; 
    msg.sender.transfer(value); 
    LogWithdraw(msg.sender, value); 
    return true; 
    } 

    function transfer(address to, uint value) payable returns (bool success) { 
    if (balances[msg.sender] < value) throw; 
    balances[msg.sender] -= value; 
    to.transfer(value); 
    LogTransfer(msg.sender, to, value); 
    return true; 
    } 

} 

이고 상기 web3 자바 스크립트,이 같은 기능 "전송 (행 어드레스 단위 값)를 호출하려고 :

$("#button").click(function() { 
     Exchange.transfer(receiver.toString(), 2); 
     // $("#loader").show(); 
    }); 
,691,363을210

이 Exchange.transfer() 메서드에 일부 가스, 값 매개 변수를 추가하면 VM이 "기본 요금 초과 가스 한도"를 반환합니다

+0

고객이 gas/gasPrice를 사용하여 거래 옵션을 보내지 않는 것 같습니다. 그걸 제공 할 수 있니? Remix에서 계약서가 정상적으로 작동하는 것처럼 보입니다 (기본 3000000 가스 한도 사용) –

답변

0

각 체인의 가스 한도 즉, 제공 할 수있는 최대 가스량 당신의 행동은 광부에 의해 완료되어야합니다. 따라서 "기본 요금이 가스 한도를 초과합니다"라는 오류가 발생하면 귀하의 조치를 실행하기 위해 공급되는 가스의 양이 설명했던 한계 이상입니다. 이 한도는 다음과 같이 수동으로 변경할 수 있습니다.

Exchange.transfer (receiver.toString(), 2, {gas : 'amount here'}));

당신은 아마 이미 알고있을 것입니다. 그러나 제 생각에 당신은 너무 많은 것을 공급할 것입니다.

리믹스에서의 오류에 관해서는 무엇이 진행되고 있는지 정확하게 말하기는 어렵지만 의심 할 여지없이 당신이 공급하는 가스 및 이와 유사한 매개 변수를 가지고 노는 것은 아마도 트릭을 할 것입니다.