1

https://github.com/eris-ltd/eris-contracts.jsに示されているコード例を見てい ます

var myAbi = [...];
var myCompiledCode = "...";

// Create a factory for the contract with the JSON interface 'myAbi'.
var myContractFactory = contractManager.newContractFactory(myAbi);

// To create a new instance and simultaneously deploy a contract use `new`:
var myNewContract;
myContractFactory.new({data: myCompiledCode}, function(error, contract){
     if (error) {
            // Something.
            throw error;
        }
     myNewContract = contract;
});

しかし、私はコンパイルを行う方法がわかりません。eris-contracts.js が web3.js に基づいて構築されていることは理解していますが、web3 オブジェクトをインスタンス化するときにどのプロバイダーを入力する必要があるかわかりません。

var edbFactory = require('eris-db');
var Web3 = require('web3');
var web3 = new Web3();
web3.setProvider(new web3.providers.HttpProvider('http://simplechain:1337/rpc'));

var edb = edbFactory.createInstance("http://simplechain:1337/rpc");

var source = "" +
    "contract test {\n" +
    "   function multiply(uint a) returns(uint d) {\n" +
    "       return a * 7;\n" +
    "   }\n" +
    "}\n";

var compiled = web3.eth.compile.solidity(source);
console.log(compiled);
4

3 に答える 3

3

私はエリス出身です。申し訳ありませんが、私たちのドキュメントはより明確ではありません。

Solidity をコンパイルする最も簡単な方法は、Solidity コンパイラの JavaScript バインディングを使用することです。

$ npm install solc --save

const Solidity = require('solc')

var source = "" +
    "contract test {\n" +
    "   function multiply(uint a) returns(uint d) {\n" +
    "       return a * 7;\n" +
    "   }\n" +
    "}\n";

const compiled = Solidity.compile(source, 1).contracts.test
const abi = JSON.parse(compiled.interface)
const contractFactory = contractManager.newContractFactory(abi)

contractFactory.new({data: compiled.bytecode}, (error, contract) => {
  // use contract here
})
于 2016-10-11T18:10:48.507 に答える
1

私は eris を使用したことはありませんが、javascript を使用してこのコントラクトをコンパイルする方法について質問がある場合:

pragma solidity ^0.4.0;

contract test {
   function multiply(uint a) returns(uint d) {
       return a * 7;
   }
}

browser-solidityを試しましたか?ブラウザで堅牢性コードを即座にコンパイルします。上記のソリディティ コードのコンパイル済みコントラクトは次のとおりです。

606060405260788060106000396000f360606040526000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa1146039576035565b6002565b34600257605160048080359060200190919050506067565b6040518082815260200191505060405180910390f35b60006007820290506073565b91905056

そしてインターフェース(ABI):

[{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"payable":false,"type":"function"}]

web3js でデプロイするには、次のコードを使用します。

/* the test contract interface */
var testContract = web3.eth.contract([{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"payable":false,"type":"function"}]);

/* deploy it with web3, here: on ethereum */
var test = testContract.new(
   {
     from: web3.eth.accounts[0], 
     data: '606060405260788060106000396000f360606040526000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa1146039576035565b6002565b34600257605160048080359060200190919050506067565b6040518082815260200191505060405180910390f35b60006007820290506073565b91905056', 
     gas: 4700000
   }, function (e, contract){
    console.log(e, contract);
    if (typeof contract.address !== 'undefined') {
         console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
    }
 })

あなたの質問にボトムアップで答えたかどうかはわかりません。有効な JSON-HTTP プロバイダーが必要であるという問題がある場合は、ローカルのgethノードを実行して、デフォルトである RPC ポートを指すことができlocalhost:8545ます。

erisに合わせてお答えできず申し訳ありませんが、web3jsでSolidityをコンパイルしたい場合はこれでうまくいくはずです。

于 2016-10-10T15:49:26.127 に答える