2017-11-16 13 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 

と、私が言います

$("#button").click(function() { 
     Exchange.transfer(receiver.toString(), 2); 
     // $("#loader").show(); 
    }); 
:ソリディティのファイル構造は

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ジャバスクリプト、私は関数を呼び出すことを試みた「転送(UINT値、へのアドレス)であります210

このExchange.transfer()メソッドにいくつかのガス値パラメータを追加すると、VMは「ベース料金がガス制限を超えています」を返します。

+0

あなたのクライアントにgas/gasPriceを使ってトランザクションオプションを送信していないようです。あなたはそれを提供できますか?リミックスで契約がうまく動いているように見えます(私はデフォルトの3000000ガス制限を使いました) –

答えて

0

各チェーンにはガス制限がありますあなたの行動は鉱夫によって完了されるべきです。だからあなたは、あなたの行動を実行するために供給されているガスの量が私が説明した限界以上であるという「基本料金がガスの限界を超えています」というエラーを受け取ったとき。この制限は手動で変更することができます。

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

あなたはすでに知っているかもしれませんが、私の推測では、あまりにも多くを供給していると思われます。

リミックスでのエラーについては、何が起こっているのか正確に伝えるのは難しいですが、あなたが供給しているガスと類似のパラメータで遊んでいることは間違いないでしょう。

関連する問題