Ethereumウォレット < MetaMask >
Ethereumウォレット
Ethereumウォレットは、Ethereumアカウントを管理するためのアプリです.
このアプリを使用することで、アカウントの残高の取得やトランザクションの送信をおこなうことが可能になります.
単一のウォレットで、複数のアカウントを管理することもできます.
また、ウォレットを使用することで、dappsに接続することもできます.
ウォレットには、いくつかのタイプがあります.
モバイルアプリ
スマートフォンのアプリ形式のウォレット.
ex) MyEtherWalletブラウザ
ウォレット機能を搭載したブラウザ.
ex) Brave Browserブラウザ・エクステンション (プラグイン)
ブラウザにインストールして、ブラウザ経由で、Ethereumブロックチェーンと対話する.
ex) MetaMask
MetaMask
ブラウザ・エクステンションとして利用可能なウォレットです.
MetaMaskは、接続するEthereumネットワークを選択することができます.
Ganacheのようなテスト用のブロックチェーンに接続することもできます.
デフォルトでは、メインネットに接続されています.
ブラウザにMetaMaskがインストールされている場合、以下のオブジェクトから、Ethereumプロバイダーにアクセスできます.
window.ethereum
MetaMaskと接続する
以下のメソッドで、Ethereumのアカウント情報の取得をリクエストします.
ethereum.request({ method: 'eth_requestAccounts' });
このメソッドが実行すると、Ethereumアカウントを選択するポップアップが表示されます.
ブラウザコンソールから、上記のメソッドを呼び出した例
返り値は、選択したアカウントのアドレスの配列
> await ethereum.request({ method: 'eth_requestAccounts' }); ['0xd12ee6b1663f0eb7194402c902fe69b3c8c0179a']
コントラクトと対話する
デプロイしたコントラクトにトランザクションを送るには、以下の点に気をつける必要があります.
接続しているネットワークが正しいこと
コントラクトをデプロイしたネットワークと同じネットワークに接続している必要があります.コントラクトアカウントのアドレスが正しいこと
トランザクションを送りたいコントラクトのアドレスを正しく指定する必要があります.コントラクトABIが正しいこと
コントラクトABIは、スマートコントラクタのインタフェースをエンコードしたものです.
ethres, web3jsといったEthereumのライブラリにコントラクトのABIを与えることで、そのコントラクトが提供しているメソッドの情報を与えることができます.
トランザクションを送る
request
メソッド呼び出し時に、引数の method
に eth_sendTransaction
を指定することで、トランザクションを送信できます.
今回は、Ganacheを利用して、シンプルな送金を試してみます.
事前にいくつか準備をしておきます.
Ganacheを起動して、アカウントを用意しておきます.
MetaMaskのネットワークに、Ganacheを追加しておきます
先頭のアカウント(0x0658..2
) をMetaMaskにインポートしておきます.
Ganacheで、先頭のアカウント(0x0658...2
)から、2番目のアカウント(0x538...1
) に 1 ETH 送金してみましょう.
ブラウザのコンソールで、トランザクションのパラメータを定義します.
※ここでは、必要最低限のパラメータのみ定義します.
> const params = { to: '0x538434931f9fe66431Ebf1De29B67CfF36323DC1', from: '0x0658e418b08dCe59e42d7c5127421560B6081c22', value: '0x92342a2', }
パラメータ名 | 説明 |
---|---|
to | 送金先のアカウントのアドレス. コントラクト作成の場合は、不要. |
from | トランザクションを開始するアカウントのアドレス. MetaMaskに接続しているアカウントと一致してる必要がある. |
value | ETHを送金する場合は、送金するETHを指定する.(単位: wei) 16進数でエンコードする必要がある. |
※ 他には、Gas PriceやGas Limit等を指定することができます.
コンソールから、先ほどのパラメータを引数に、トランザクションを送信してみます.
> await ethereum.request({ method: 'eth_sendTransaction', params: [params] });
確認のダイアログが表示されるので、Confirmをクリックします.
コンソールに、トランザクションのハッシュが出力されます.
> await ethereum.request({ method: 'eth_sendTransaction', params: [params] }); 0xc91a894985e5df6e212337ff3dd2f4fba56e27eae70388ca85ab89eb2ae77f8a'
Ganacheからもトランザクションが完了したことを確認できます.