ERC20のトークンを交換できるDEXであるEtherdeltaについて、ropstenネットワークにデプロイして遊んでみます。 他のチェーンを触ることが多く、Ethereumからしばらく離れてしまっていたので手触り感を掴んでおく趣旨です。
この記事では、macOS High Sierra 10.13.4、node.jsをv9.4.0を使っています。
Etherdeltaの環境構築
# Etherdeltaのスマートコントラクトを落としてくる git clone https://github.com/etherdelta/smart_contract # pythonは2.xに変更しておく(pyenvなど) # cloneしたフォルダに移動する cd smart_contract #node.jsの関連パッケージをインストール npm install
ローカルでgethを立ち上げてデプロイ
ローカルでネットワークを立ち上げてにデプロイしてみます。gethを起動します。 ropstenネットワークにいきなりデプロイしたい人は飛ばして構いません。
gethの起動
gethの環境構築はこちら参考に。
# geth起動 # テストなのでrpcaddrなどは適当だが、セキュリティ的に実際の環境ではきちんと設定する事 geth --networkid 42 --nodiscover --maxpeers 0 --datadir test_dir/ --rpc --rpcport 8545 --rpcapi "web3,eth,net,personal" -rpccorsdomain "*" --rpcaddr "0.0.0.0" console # gethでアドレス作成 personal.newAccount("XXX") # マイニングスタート miner.start(1)
deploy.js変更
deploy.jsではsolidityFileの場所が異なるので変更します。
# deploy.js書き換え - const solidityFile = './smart_contract/etherdelta.sol'; + const solidityFile = './etherdelta.sol';
web3.providers.HttpProviderの向き先が「localhost:8545」になっている事を確認して、node.jsでdeploy.jsを動かします。
# localhostにdeploy # deployのlocal addressにはgethで作成したアドレスを設定する事 node deploy.js --address="local address" --admin="local address" --feeAccount="local address" --accountLevelsAddr="local address" --sendImmediately=True
ropstenネットワークへのデプロイ
ropstenネットワークのデプロイには、HDWalletProviderを使いました。 HDWalletProviderは、
mnemonic(ニーモニック)からウォレットを作成し、そのウォレットのアカウントを使ってプログラム上から簡単にトランザクションを発行できる仕組み
です。
(参考)
事前準備
- あらかじめ、ropstenネットワークでEthereumのアドレスを作っておく
- 作ったアドレスにropstenネットワークのEtherを貯めておく(デプロイのgas代として)
- アドレスのニーモニックフレーズを出力しておく
- INFURAのアクセストークンを取得しておく
- truffle-hdwallet-providerのインストール
が必要になります。上3件は検索すればすぐ出て来るので割愛します。
4件目のINFURAについては公式サイトの指示に従って登録すればアクセストークンを出力できます。 5件目はpackage.jsonに以下を書き足してnpm installをします。
+ "truffle": "^4.1.11", + "truffle-hdwallet-provider": "0.0.5",
deploy.jsのデプロイ先を変更
deploy.jsのデプロイ先をローカルホストからropstenに変更します。 変更内容はgitに載せていますのでこちら。
「var mnemonic」と「var accessToken」は自身のものに変更します。
ropstenにデプロイ
デプロイコマンドはこちら
# deployのyour addressにはropsetenで作成したアドレスを設定する事 node deploy.js --address="your address" --admin="your address" --feeAccount="your address" --accountLevelsAddr="your address" --sendImmediately=True
こちらでデプロイした結果を見ることができます。
https://ropsten.etherscan.io/address/0x120f7826d29e414d8a47c19d5d2576c72f44eafe
トランザクションが生まれていれば成功です。
コントラクトアドレスも生まれており、
デプロイしたsolidityのコードも確認できます。
まとめ
HDWalletProviderでropstenネットワークへのデプロイを一通り実施しました。 デプロイは他にも楽な方法がありそうなので、色々試してみます。 また、Etherdeltaのソースコードを見て思いましたが、solidityよりも連携するフロントエンドの部分がかなり特殊に作り込まれており、こちらも合わせて開発して見る必要があるように思いました。