1.准備一個已編寫的合約:
——該合約是用solidity語言編寫
pragma solidity ^0.4.0; contract test { function multiply(uint a) returns(uint d) { return a * 7; } }
- 編譯合約
想要部署合約需要得到合約代碼的ABI和EVM code。
一個編譯合約的在線編譯網站:
http://chriseth.github.io/browser-solidity/#version=soljson-latest.js
圖中Bytecode和interface就是我們需要的結果。
- 部署合約
在部署合約前,我們要明確需要以下幾項條件:
一個有幣的賬戶;
該賬戶已解鎖;
編譯合約得到的abi(interface)和code(bytecode)。
//定義abi
>abi=[{constant:false,inputs:[{name:'a',type:'uint256'}],name:'multiply',outputs:[{name:'d',type:'uint256'}],type:'function'}]
//創建合約
>multiplyContract = web3.eth.contract(abi)
//解鎖賬戶
>personal.unlockAccount(eth.coinbase, '123', 10000)
第一個參數是賬戶地址.
第二個參數:賬戶密碼.
第三個參數:賬戶解鎖持續的時間, 以毫秒為單位
//部署合約。data為上述編譯得到的Bytecode
>multiply=multiplyContract.new({from:eth.coinbase,data:"0x60606040523415600b57fe5b5b60788061001a6000396000f300606060405263ffffffff60e060020a600035041663c6888fa181146020575bfe5b3415602757fe5b60306004356042565b60408051918252519081900360200190f35b600781025b9190505600a165627a7a7230582007a6259ba3d57941abda2e261e9a67958a3eda78b779d9dd8d42518791fddd590029"})
//我們知道部署合約的過程實際也是由創建合約的賬戶發送的一筆交易(即eth.coinbase賬戶)。需要挖礦進行確認。
>miner.start(4);admin.sleepBlocks(2);miner.stop();
- 與合約交互
//獲取合約對象
>MyContract = eth.contract(abi)
//實例化合約
>myContract = MyContract.at(multiply.address)
//調用合約
>myContract.multiply.call(5)