LoginSignup
3
1

More than 5 years have passed since last update.

Gethにおけるコントラクトのデプロイ、実行

Last updated at Posted at 2018-03-03

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])

参考

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1