Denen blog

株式会社電縁の社員によるブログです。

便利なEthereumウォレット「MetaMask」

こんにちは

イノベーションオフィスの吉田です。

 

皆さんは「MetaMask」というツールをご存知でしょうか?

metamask.io

MetaMaskはChromeFirefoxOperaなどの拡張機能としてインストールして使うEthereum向けのウォレットです。

基本的な使い方は詳しく解説されている方が既にいらっしゃるのでそちらをご覧いただければと思います。

coin-textbook.com

 

このMetaMask、もちろん普通にウォレットとして使っても便利なのですが、ブラウザの拡張機能としてインストールしておくと、JavaScriptから送金処理などを呼び出すことが可能になるんです!

なので、ユーザがMetaMaskをインストールしていてくれれば、HTML+JavaScriptだけでスマートコントラクトと連携したアプリの作成が可能になるというところです!

例えば、ブロックチェーンネットワークへの接続は以下の感じで出来ちゃいます。

window.addEventListener('load', function() {
  if (typeof web3 !== 'undefined') {
    window.web3 = new Web3(web3.currentProvider);
    checkNetwork();
  } else {
    console.log("MetaMaskがインストールされていません。);
  }
});

さらにスマートコントラクトへトランザクションを投げるには以下の感じです。

web3.eth.sendTransaction({
  "from" : web3.eth.defaultAccount,
  "to"   : contractAddress,
  "data" : "0xaabb1122" + // ファンクションハッシュ
           "0000...1234"  // パラメータ
}, function(err, ret) {
  if (err) {
    console.log("トランザクションの送信に失敗しました。\n" + err)
  } else {
    console.log("トランザクションを送信しました。\n" + ret);
  }
});

さらにさらにスマートコントラクトのイベントをウォッチしたい場合は以下になります。

var contract = web3.eth.contract(abiArray).at(contractAddress);
watchEvent = contract.EventName();
watchEvent.watch(function(err, ret) {
  if (err) {
    console.log("エラーが発生しました。\n" + err);
  } else {
    console.log("イベントを受信しました。\n" + ret);
  }
});

簡単ですね。

※contractAddressやabiArrayはSolidityなどから取得してください。

 

これだけでアプリが作れちゃいそうですね。

ちなみに、送金処理を叩いても無断で送金はされず、以下の様にMetaMaskの確認画面が表示されますのでご安心ください。

f:id:yasuaki-sakai:20180426184609j:plain

 

はい、こんな便利なMetaMaskですが、たまに挙動が怪しくなります。

※私の環境だけかもしれませんが・・・

そんな時は大体削除⇒再インストールで直ります。

ただ、削除をすると秘密鍵とかも全て消えるので、必ずニーモニックフレーズはメモっておいてくださいね!

MetaMaskではSettings⇒Reveal Seed Wordsから確認できます。

 

そして、今も開発が進んでいる関係から挙動がおかしくなる場合も有ります。

そんな時は以下から過去のバージョンが落とせるので、バージョンを戻してみるのもいいかもしれません。

github.com

 

非常に便利なツールなのでご存知ない方は是非触ってみてください!

それでは!

 

書いた人:イノベーションオフィス 室長 吉田

f:id:yasuaki-sakai:20171204190702j:plain