JavaScript API部署调用智能合约

合约:

contract SimpleTest {
    uint data;
    function set(uint n) public {
        data = n*3;
    }
    function get() public returns (uint) {
        return data;
    }
}

编译合约

var source = 'contract SimpleTest {uint data;function set(uint n) public {data = n*3;}function get() public returns (uint) {return data;}}'

JavaScript API部署调用智能合约

调用web3中的方法编译上面的source变量:

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

JavaScript API部署调用智能合约

Geth1.8没有eth_compileSolidity方法。所以采用在线编译进行合约的编译https://ethereum.github.io/browser-solidity/#version=soljson-v0.4.9+commit.364da425.js&optimize=false

编译结果:

var code = '0x608060405234801561001057600080fd5b5060e28061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806360fe47b114604e5780636d4ce63c146078575b600080fd5b348015605957600080fd5b5060766004803603810190808035906020019092919050505060a0565b005b348015608357600080fd5b50608a60ad565b6040518082815260200191505060405180910390f35b6003810260008190555050565b600080549050905600a165627a7a7230582010be0b1da73b1ecf4cbced8c6ff8eb9b29d01034260ab552932800bd69a575fa0029'

var abi = '[ { "constant": true, "inputs": [], "name": "get", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "n", "type": "uint256" } ], "name": "set", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" } ]'

JavaScript API部署调用智能合约

 

部署合约

使用上述生成的code和abi把合约部署到以太坊上。需要挖矿来确认该笔交易。

web3.eth.contract(abi).new({from:"0x6815515f32312f65718bc0b1ee8d900c27167d85",data:code})

JavaScript API部署调用智能合约

这个方法也被废除,故而我们采取web3deploy进行部署:

var simpletestContract = web3.eth.contract([{"constant":false,"inputs":[{"name":"n","type":"uint256"}],"name":"set","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":false,"inputs":[],"name":"get","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"nonpayable"}]); 
var simpletest = simpletestContract.new( { from: web3.eth.accounts[0], data: '0x6060604052341561000c57fe5b5b60c98061001b6000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806360fe47b11460445780636d4ce63c146061575bfe5b3415604b57fe5b605f60048080359060200190919050506084565b005b3415606857fe5b606e6092565b6040518082815260200191505060405180910390f35b600381026000819055505b50565b600060005490505b905600a165627a7a723058208181481e86008df4345b2647d9ae52b4f3506a91e10859601bcf04d2a0ef30660029', gas: '4700000' }, function (e, contract){ console.log(e, contract); if (typeof contract.address !== 'undefined') { console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash); } })

JavaScript API部署调用智能合约

JavaScript API部署调用智能合约

JavaScript API部署调用智能合约

JavaScript API部署调用智能合约

 

部署成功,合约地址为:0x9149894f935571995aee5fdf0dbe4cc9d6743624

 

调用合约的set方法:

simpletest.set.sendTransaction(22,{from:eth.accounts[0]})

JavaScript API部署调用智能合约

 

调用get方法查看结果:

simpletest.get.call()

JavaScript API部署调用智能合约