gethとsolcをインストールしておく。
solcのパスを通す。
commandprompt
set PATH=%PATH%;(solc.exeが存在するフォルダのパス)
デプロイするコントラクトは以下。
addition.sol
contract Addition{
int num = 0;
function add(int a){
num += a;
}
function get() returns(int){
return num;
}
}
コンパイルする。
commandprompt
echo var additionOutput= >>addition.js
solc --optimize --combined-json abi,bin,interface addition.sol >> addition.js
gethを起動
geth
geth --networkid '33' --nodiscover --datadir ../ --rpc --rpcaddr "localhost" --rpcport "8545" --rpccorsdomain "*" console 2>> err.log
スクリプトを読み込む
geth
loadScript('addition.js')
abiを取り出す
geth
var additionContractAbi = additionOutput.contracts['addition.sol:Addition'].abi
contractオブジェクトを作成
geth
var additionContrat = eth.contract(JSON.parse(additonContractAbi))
binの頭に0xを追加(コンパイル済みであることを示す)
geth
var additionBinCode = "0x"+additionOutput.contracts['addition.sol:Addition'].bin
マイニングの開始とコントラクトを送信するアカウントのアンロック
miner.start()
personal.unlockAccount(eth.accounts[0])
コントラクタの送信、コントラクタインスタンスが返ってくる
geth
var deployTransactionObject = {from:eth.accounts[0],data:additionBinCode,gas:1000000}
var additionInstance = additionContract.new(deployTransactionObject)
コントラクトのアドレスを取り出し コントラクトオブジェクトにセット
geth
var additionAddress = eth.getTransactionReceipt(additionInstance.transactionHash).contractAddress
var addition = additionContract.at(additionAddress)
コントラクトの実行
getは読み込みのみなのでcall()
addは状態を変化させるのでsendTransaction()
geth
addition.get.call()
addition.add.sendTransaction(36,{from:eth.accounts[0],gas:1000000])