Ethereumホスティングサービス「Infura」の使い方とは?

Ethereum(イーサリアム)

Truffleを最近使っていてInfuraというEthereumとIPFSノードホスティングサービスを少し触ってみました。

カタカナで「インフラ」とサイトに書かれていて「ゴジラ」を連想できる背景など何気に好感が持てます。けして、自動翻訳ではないですよ。

それでは、今回はこのホスティングサービスの特徴と、このホスティングサービスを使って何ができるかをご紹介します。

Sponsored Link


概要

https://infura.io/

Ethereumブロックチェーンノードの実行と同期は時間がかかり、大量のストレージを必要とします。開発とかでEthereumノードをたてようとすると、クライアントの同期をするのがとても面倒で、無駄に容量食うのであまり好ましくありません。
ただ、このInfuraを使うと、dappに集中できるように信頼性の高いトランザクション処理を持つ開発者をサポートしてくれます。

EthereumクライアントのP2Pは個々人が運用してたりする場合も多く信頼性が低く、新しいトランザクションやブロックの同期や可視性に問題がありますが、Infuraがそれらをフォローすることで、新しい取引やブロックを即座に認識することを目指しています。世界中のクライアントネットワークを維持し、ネットワーク上で最高のピアリングを実現しています。

特徴

以下は公式サイトをFeaturesを翻訳したものです。

– TLS対応のEthereumエンドポイント
  Ethereum Mainnetとすべてのテストネットの公開エンドポイント
– TLS対応のIPFSゲートウェイ
 カスタムの信頼性機能を備えた分散ストレージ用
– ポータブルEthereumインターフェース
 標準のJSON-RPC APIおよび一般的なweb3ライブラリと完全互換
– “Ferryman”サービス層
 スケーリングと信頼性に役立つリバースプロキシ
– マルチクライアントEthereumバックエンド
 GethとParity – 堅牢性のために最も人気のあるクライアント
– 利用可能なプライベートインストール
 組織に許可されたプライベートインフラストラクチャを設定することができます

ネットワークごとの稼働状況

http://status.infura.io/

Infuraではmainnet, testnetごとの稼働状況を見える化しています。

Infuraで使えるJSON-RPC一覧

private keyを使用するRPC(例えばsendTransaction)は使えず、それ以外のRPCは使えます。以下に使えるRPCを列挙致します。

– web3_clientVersion
– web3_sha3
– net_version
– net_listening
– net_peerCount
– eth_protocolVersion
– eth_syncing
– eth_mining
– eth_hashrate
– eth_gasPrice
– eth_accounts
– eth_blockNumber
– eth_getBalance
– eth_getStorageAt
– eth_getTransactionCount
– eth_getBlockTransactionCountByHash
– eth_getBlockTransactionCountByNumber
– eth_getUncleCountByBlockHash
– eth_getUncleCountByBlockNumber
– eth_getCode
– eth_sendRawTransaction
– eth_call
– eth_estimateGas
– eth_getBlockByHash
– eth_getBlockByNumber
– eth_getTransactionByHash
– eth_getTransactionByBlockHashAndIndex
– eth_getTransactionByBlockNumberAndIndex
– eth_getTransactionReceipt
– eth_getUncleByBlockHashAndIndex
– eth_getUncleByBlockNumberAndIndex
– eth_getCompilers
– eth_compileSolidity
– eth_compileLLL
– eth_compileSerpent
– eth_getLogs
– eth_getWork
– eth_submitWork
– eth_submitHashrate
– shh_version
– shh_post
– shh_newIdentity
– shh_hasIdentity
– shh_newGroup
– shh_addToGroup
– shh_newFilter
– shh_uninstallFilter
– shh_getFilterChanges
– shh_getMessages

https://infura.io/docs/#supported-json-rpc-methods

MEW(MyEtherWallet)サービスとの連携

https://www.myetherwallet.comにアクセスすると右上リストボックスからネットワークが選べるのですが、infura.ioのtestnetを選ぶことができます。これによりInfuraでdeployしたコントラクトがすぐにinfura.io上に反映されるのでコイン送金テストなどがしやすくなりますね。

使い方

自分としては、自分でEthereumノードを持ちたくない人がこのホスティングサービスを使ってコントラクトをdeployして、色々テストだったり、運用をしてみる使い方がよいのではと思っています。

自分のローカルPCにEthereumノード立てて、同期させておくのも面倒だし、どこかにサーバー立ててそこでEthereumノードを起動するのも面倒なので。

実際にtest運用できるか試してみました。

testnetのコインを入手する

以前紹介した記事にtestnetのコイン入手方法を記載しておきました。
ここで自分のWalletに1Ether程度手に入れておきます。

この記事では、今回はMyEtherWallet (MEW) とMetaMaskというWalletアプリを使います。

Ropsten(infra.io)を選んでおき、パスワードに何か文字列を入れwalletを作っておきます。優先するノードをinfra.ioにしているため、infra.ioでdeployすればすぐにアカウント等が同期されやすくなります。

deployする

ここからは以前書いた記事の手順にもとづいて実際に同じようにコインを送金してみます。

$ docker-compose build
$ docker-compose up -d
$ docker exec -it ico /bin/sh
# truffle compile
# truffle migrate --network ropsten
Using network 'ropsten'.
Running migration: 1_initial_migration.js
  Deploying Migrations...
  ... 0x614bd9f523ee003b695f17542a55d7d511d151c145bff1bc746fc8b7012033d3
  Migrations: 0xa77570fc365e960865653f4212ea63f34126e9bc
Saving successful migration to network...
  ... 0xa6bc6b57b8eac13ea943c81eec4c30b50d9bd7581ce01a2528b23fc497cc754a
Saving artifacts...
Running migration: 2_deploy_contracts.js
  Deploying WakuWakuCoinCrowdsale...
  ... 0x336f11fabfa4d2375ffe62c7959669410f7ea915550f6d354341094ad4bf75e4
  WakuWakuCoinCrowdsale: 0x12dd38f94f37d8994aa72810dbcdec5be0f91697
Saving successful migration to network...
  ... 0x09d4f9d6395419b16bc98a78c42f55b77f3810dd9d09d96cf6fddaade7b8ddc8
Saving artifacts...

コントラクトアドレスを把握する

# truffle console --network ropsten
> WakuWakuCoinCrowdsale.deployed().then(inst => { crowdsale = inst })
> crowdsale.token().then(addr => { tokenAddress = addr } )
> crowdsale
 :
 :
  allEvents: [Function: bound ],
  address: '0xXXXXXXX・・・',   <<------------- このアドレス!!!
  transactionHash: null }

あとで、testnetコインを取得したWalletから送信する先のアドレスを取得します。

今回はMyEtherWalletで作成したWAKコインの数を確認

> account1 = '0x3bd394990052bDb116690d820E2e9a7004408C01'
'0x3bd394990052bDb116690d820E2e9a7004408C01'
> wakuwakuCoinInstance = WakuWakuCoin.at(tokenAddress)
> wakuwakuCoinInstance.balanceOf(account1).then(balance => balance.toString(10))
'0'

もちろんここでは0です。

送金してみる

MyEtherWalletと連携できるMetaMaskというWalletアプリを使って送金します。ICOのときなどにGas Limitを設定できるのでよく使われます。
まずSENDボタンを押します。

先ほど取得したコントラクトアドレスを入れNEXTボタンを押します。

Gas Limitの最低金額である21000を入れて、送信してみたところ

失敗しちゃいました・・・orz

再度Gas Limitを高くしてTryしてみます。すると・・・

今度は成功しました!これでクラウドセールに参加できたはずです。
では、docker上のtruffleコンソールからこのアドレスにコインが割り振られているか確認してみます。

そして自分のコイン確認

# truffle console –network ropstenを実施したターミナル上で先ほどのアドレスのbalanceを確認してみると・・・

> account1 = '0x3bd394990052bDb116690d820E2e9a7004408C01'
'0x3bd394990052bDb116690d820E2e9a7004408C01'
> wakuwakuCoinInstance = WakuWakuCoin.at(tokenAddress)
> wakuwakuCoinInstance.balanceOf(account1).then(balance => balance.toString(10))
'5000000000000000000'

Infura使ってETHの送金ができました!!!

まとめ

自分は主に開発者としてですが、Infuraはgethなどのノードたてずに済むので非常に便利だと感じました。
最初のDAGファイル作るのに時間とられなかったり、同期するためにずっとまってなければいけなかったり、自分のコントラクトがいつ反映されるのかしばらくまったりという今までの不満がなくなるためです。

一通りInfuraとTruffleが使えるようになってきたので、もう少しクラウドセールを現在行われているICOに機能を寄せていって、何かできないか考えてみようと思います。

今回のソースは以下gitコマンドで落とせます。

git clone --depth 1 -b infura-v0.1 https://github.com/todoroki-yudai/zeppelin-crowdsale-sample.git
Sponsored Link

ビットコイン(Bitcoin)、イーサリアム(Ethereum)、リップル(Ripple)、ネム(NEM)などの仮想通貨を買うならコインチェックがおすすめです。

※アプリは指値売買ができず手数料が高いので、アプリをダウンロードするのではなくメール&パスワード登録へ!まずは5万円ほど入金して仮想通貨とブロックチェーンの世界を楽しんでください!

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin

コメントはまだありません

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


NEM
[memo] NEMを送金しようとするとFAILURE_TIMESTAMP_TOO_FAR_IN_FUTUREが出る

Docker上のコンテナで、NEM-libraryを使ってmosaicの送金を試していたところ FA …

NEM
NEMのテストネットワークで独自通貨を試す

NEMアプリケーションを作る際にテストネットワークでのテスト非常に重要になってきます。 このため今回 …

Ethereum(イーサリアム)
Ethereumのテストネット(testnet)用のコインを入手する方法とは?

Ethereumでスマートコントラクトで作成したものを、ローカル環境ではなくて実際のノードでテストす …