自分を攻略していく記録

自分がやりたいことを達成するには何をすればいいのか、その攻略していく過程をつらつらと

Ethereumにコマンドラインからスマートコントラクトをデプロイする

f:id:ngo275:20180821093307p:plain

はじめに

最近Parity v2がリリースされた。以前までParityは、 http://localhost:8545 でアクセスするとウェブのUIが出てきて、そこでコントラクトの実行やデプロイもできたのだが、v1.10からはそれ用のアプリを落として来る必要が出てきた(もちろんウォレットの互換性はある)。しかも監視しているコントラクト一覧のタブが消えてまったく違うところに移動していたり、謎のバグに遭遇したりとかなり辛い...。

簡単なコントラクトであればParityのUI上でデプロイしても問題ないと思うが、がっつり開発していくとなると、コマンドラインからtestnetやmainnetにデプロイしたくなる。ここではParityを使ってkovanにコントラクトをデプロイしていく(mainnetもkovanも基本的にやり方は変わらない)。

github.com

Parity側の準備

以下Macを想定する。

# Parityをインストールしていなかった場合
$ brew install parity --devel

# Parityのv1系がすでにインストールしてあった場合
$ brew upgrade parity --devel

次に以下のリンクからParity UIをインストールする。すでにインストールしてあったものとコンフリクトする場合は、 sudo rm -rf /Applications/Parity\ UI.app を実行してからインストールする。すでにインストールしてある場合はスキップして問題ない。ただし、バージョンの互換性が著しくひどいので、もしその場合はアップグレードしておく。

github.com

Parityの起動

$ parity --chain kovan --jsonrpc-apis "eth,net,web3,personal,parity" --geth

上記のコマンドでParityが起動する。 --chain kovan と指定することで、テストネットのkovanにつながる。初めて実行する場合、ブロックの同期に数時間はかかるので注意が必要。

f:id:ngo275:20180821092714p:plain

コントラクト側の準備

簡単なコントラクトをTruffleを使って作成する。

github.com

[Ethereum]$ mkdir deploy-sample
[Ethereum]$ cd deploy-sample/
[deploy-sample]$ truffle init
Downloading...
Unpacking...
Setting up...
Unbox successful. Sweet!

Commands:

  Compile:        truffle compile
  Migrate:        truffle migrate
  Test contracts: truffle test
[deploy-sample]$
[deploy-sample]$ truffle create contract Sample

truffle.js にnetworkの設定を書いておく。

// truffle.js

module.exports = {
  // See <http://truffleframework.com/docs/advanced/configuration>
  // to customize your Truffle configuration!
  networks: {
    development: {
      host: "127.0.0.1",
      port: 8545,
      network_id: 42,
      from: "0x002fA73D59421a7ec5525821c9C9f6BfCbf634E9", // replace this with your address
      gas: 5000000
    }
  }
};

デプロイする

web3.toHex(180) で180秒間このアカウントをアンロックしている(手元で確認した時は、アンロック状態でParityを触るとなぜかうまくコントラクトが実行できなかったので180くらいがいいかもしれない)。

$ truffle console

> web3.personal.unlockAccount('0x002fA73D59421a7ec5525821c9C9f6BfCbf634E9', 'YOUR_PASSWORD', web3.toHex(180));
> true
# コントロール+Cで抜ける

$ truffle migrate --reset

これでコントラクトがkovanにデプロイされているはず。