Geth と Truffle を使って、パブリックなテストネットにアカウントを作成し、Ether 取得するところまでやってみました。
テストネットとは、開発者がテストのために使うパブリックなイーサリアムブロックチェーンで、本番稼働しているメインネットとほぼ同様の仕組みを持ち、メインネットのように送金もマイニングも行うことができます。
パブリックなテストネットはいくつもあるようですが、今回は ROPSTEN で試してみました。
環境
- Geth: 1.8.2-stable
テストネットに接続
geth コマンドを実行し、テストネットに接続します。
$ geth --testnet --syncmode "fast" --rpc --rpcapi db,eth,net,web3,personal --cache=1024 --rpcport 8545 --rpcaddr 127.0.0.1 --rpccorsdomain "*" --bootnodes "enode://20c9ad97c081d63397d7b685a412227a40e23c8bdc6688c6f37e97cfbc22d2b4d1db1510d8f61e6a8866ad7f0e17c02b14182d37ea7c3c8b9c2683aeb6b733a1@52.169.14.227:30303,enode://6ce05930c72abc632c58e2e4324f7c7ea478cec0ed4fa2528982cf34483094e9cbc9216e7aa349691242576d552a2a56aaeae426c5303ded677ce455ba1acd9d@13.84.180.240:30303"
コマンドを実行すると、他のノードと接続され、ブロックチェーンの同期が始まります。
INFO [03-11|09:10:00] Imported new chain segment blocks=1 txs=131 mgas=4.646 elapsed=76.028ms mgasps=61.110 number=2810959 hash=9328d0…879510 cache=41.83mB INFO [03-11|09:10:03] Imported new chain segment blocks=1 txs=30 mgas=1.168 elapsed=27.840ms mgasps=41.964 number=2810960 hash=36d21d…04ba18 cache=41.84mB INFO [03-11|09:10:03] Mining too far in the future wait=5s INFO [03-11|09:10:17] Imported new chain segment blocks=1 txs=18 mgas=2.131 elapsed=26.228ms mgasps=81.242 number=2810961 hash=7b2a75…1154a4 cache=41.93mB INFO [03-11|09:10:19] Imported new chain segment blocks=1 txs=0 mgas=0.000 elapsed=5.079ms mgasps=0.000 number=2810962 hash=ed320f…38e1ac cache=41.83mB INFO [03-11|09:10:19] Imported new chain segment blocks=1 txs=63 mgas=4.652 elapsed=50.821ms mgasps=91.529 number=2810962 hash=cad7ee…9dbd01 cache=42.06mB INFO [03-11|09:10:20] Imported new chain segment blocks=1 txs=3 mgas=0.686 elapsed=9.096ms mgasps=75.461 number=2810963 hash=1a9b4c…c04208 cache=41.92mB
表示されている number と ROPSTEN の Web サイト上に表示されている Block の数字が一致してきたらほぼ同期が完了したと思って良いようです。
ブロックチェーンの同期は、私の場合 30 分くらいかかったので、気長に待ちましょう。
Truffle をインストール
Trulffle をインストールします。
$ npm install -g truffle
インストールが完了したらバージョンを表示して、インストールできているか確認します。
$ truffle version Truffle v4.1.3 (core: 4.1.3) Solidity v0.4.19 (solc-js)
Truffle でプロジェクトを作成
Truffle は truffle unbox
コマンドで DApp のサンプルテンプレートを色々と作成することができるのですが、今回は truffle init
コマンドで初期状態のテンプレートを展開してみたいと思います。
$ mkdir test $ cd test $ truffle init Downloading... Unpacking... Setting up... Unbox successful. Sweet! Commands: Compile: truffle compile Migrate: truffle migrate Test contracts: truffle test
展開されたファイルを確認してみます。
$ tree . . ├── contracts │ └── Migrations.sol ├── migrations │ └── 1_initial_migration.js ├── test ├── truffle-config.js └── truffle.js 3 directories, 4 files
展開されたファイルが確認できたので、truffle.js
にブロックチェーンへの接続情報を記述します。
truffle.js
module.exports = { networks: { development: { host: "127.0.0.1", port: 8545, network_id: "*" } } };
テストネットにアカウントを作成する
アカウントの作成方法も色々あるようですが、ここでは Truffle のコンソールを利用して CLI でアカウントを作成したいと思います。
$ truffle console truffle(development)> web3.eth.newAccount('ここにアカウントのパスワードを設定') '0xe818b04b53b16f2ce9f27fe04be0b015687b6228'
web3.eth.newAccount()
を実行すると新しくアカウントが作成され、アカウントのアドレスが取得できます。
※ テストネットですがパスワードはきちんと設定しましょう
アカウントの保有している Ether を確認してみます。
truffle(development)> web3.eth.getBalance('0xe818b04b53b16f2ce9f27fe04be0b015687b6228').toLocaleString() '0'
もちろん 0
ですね!
ROPSTEN の Web サイト上でもアカウントのアドレスで検索すると、保有 Ether などのアカウントの状態を確認することができます。
アカウントの作成が終わったので、一旦 Truffle のコンソールから抜けます。
truffle(development)> .exit
テストネットでイーサリアムを取得する
ROPSTEN では、Ether 取得用に API を公開しているので、その API を Curl で叩きます。
$ curl -X POST -H "Content-Type: application/json" -d '{"toWhom":"アカウントのアドレス"}' https://ropsten.faucet.b9lab.com/tap
実行すると
{ "txHash" : "0xbabe3bd79df83928a91f2ec33b7ac30a0803940ced9a10aa420308dcc4e29d3b" }
このような形でトランザクションのアドレスが返ってくるので、ROPSTEN の Web サイトでアドレスを検索します。
TxReceipt Status
が Success
になったらブロックチェーン上に取り込まれたことになるので、アカウントの保有イーサリアムを確認してみます。
ETH Balance
が 0.5 Ether
になっていることが確認できました!
コントラクトをテストネットにデプロイする
先ほど、API を叩いて Ether を取得できたので、テストネットに truffle init
して展開されたコントラクトをデプロイしてみたいと思います。
※ イーサリアムではデプロイするのに Ether が必要です。
まずは、コントラクトをデプロイするにあたり、どのアカウントがデプロイするのかと Gas の量をそれぞれ from
, gas
に記述します。
- truffle.js
module.exports = { networks: { development: { host: "127.0.0.1", port: 8545, network_id: "*", from: "自分のアカウントのアドレス", gas: 470000 } } };
初期テンプレートでマイグレーションファイルしかないので、適当にコントラクトファイルと、マイグレーションファイルを追加しておきます。
- contracts/Test.sol
pragma solidity ^0.4.17; contract Test { address public owner; function Test() public { owner = msg.sender; } }
- migrations/2_deploy_test.js
var Test = artifacts.require("./Test.sol"); module.exports = function(deployer) { deployer.deploy(Test); };
ファイルを追加したら、デプロイする際に Ether を消費するので、Truffle のコンソールからアカウントをアンロックします。
$ truffle console truffle(development)> web3.personal.unlockAccount('自分のアカウントのアドレス', '設定したパスワード', 1800) true truffle(development)> .exit
※ 第3引数にはアンロックする時間を秒単位で設定できるようです。(ここでは 30 分に設定しました)
アカウントのアンロックができたので、コントラクトをデプロイします。
デプロイにはだいたい 1 分ほどかかりました。
$ truffle migrate Compiling ./contracts/Migrations.sol... Compiling ./contracts/Test.sol... Writing artifacts to ./build/contracts Using network 'development'. Running migration: 1_initial_migration.js Deploying Migrations... ... 0x5b1389de71421cb1f31702de77bcb0fa51f539efc6e3f7bdb5c0d8a812a3de1b Migrations: 0xfe23a9f6287c53fa9ab529f6057f09611e61fe6e Saving successful migration to network... ... 0x6b2557ab1feb459bd6aaee98fc872d7ed2a8029e685e992fb2231057d98c7dcf Saving artifacts... Running migration: 2_deploy_test.js Deploying Test... ... 0x949a75cc5157bccb505bcf332f4969419fe5656c101b3bd4672c1067c3b3cec0 Test: 0x0eb4ef05ea371ba59fa8152342954588385617b3 Saving successful migration to network... ... 0xda5aee9f79b40ee472983e798527c460af7e7204e23a3606cb3f8a2092f25c23 Saving artifacts...
出力を見てみると、デプロイする際にコンパイルも自動的に行ってくれているのが確認できると思います。
デプロイが無事成功すると、それぞれのトランザクションのアドレスが返されます。
ROPSTEN の Web サイトでアカウントを確認するとトランザクションがブロックチェーンに取り込まれ、Ether の残高も減っていることが確認できると思います。
まとめ
Geth + Truffle でテストネットに新しくアカウントを作成しデプロイするところまでやってみました。
Truffle を使うと面倒なコンパイルやデプロイが簡単にできました!
まだまだ手探り状態ですが、DApps 周りを引き続き勉強していきたいと思います。
- 作者: 加嵜長門,篠原航,丸山弘詩
- 出版社/メーカー: マイナビ出版
- 発売日: 2018/02/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
お金2.0 新しい経済のルールと生き方 (NewsPicks Book)
- 作者: 佐藤航陽
- 出版社/メーカー: 幻冬舎
- 発売日: 2017/11/30
- メディア: 単行本
- この商品を含むブログ (2件) を見る