アプリケーション開発ポータルサイト
ServerNote.NET
ServerNote.NET厳選キャンペーン・クーポンはこちら!
カテゴリー【JavaScript仮想通貨
【MetaMask】window.ethereumのeth_callで任意のコントラクト関数を呼ぶ
POSTED BY
2022-06-26

MetaMask公式ドキュメント

https://docs.metamask.io/guide/

によると、もうWeb3.js(web3.eth)は古いものであり、順次window.ethereumへ置き換えられ、すでに置き換えが完了している機能はweb3.ethでは動かない。

以前の記事ブラウザのJavaScriptのみでMetaMaskと連携しトランザクションを実行するでは、window.ethereumのみを用いて、任意のアドレスにトランザクション送金を行った。

トランザクションは、window.ethereum.request eth_sendTransactionで行え、他サイトのサンプルも豊富にある。

var send_params = {
    nonce: '0x00',
    gasPrice: '', 
    gas: '',
    to: $("#to_address_txt").val(),
    from: window.ethereum.selectedAddress,
    value: send_wei_str,
    data: to_data_txt,
    chainId: '',
};
 
var transaction_id = await window.ethereum.request({
    method: 'eth_sendTransaction',
    params: [send_params],
});

しかしトランザクションeth_sendTransactionはコントラクトへお金を送りトークンをもらうなど、「状態を書き換える関数を呼ぶ時」しか使用しない

コントラクトの状態のみを取得する場合はトランザクションは不要であり、単発の関数を呼ぶだけである。これはつまりeth_sendTransactionではなくeth_callを使うことに他ならない。が、

windows.ethereumにてeth_callを使うサンプルが絶望的に出回っておらず苦労した。ものすごく良く使うであろうに、何故だろうか?

色々調べた結果、答えは以下のようになる。

var send_params = {
    to: $("#to_address_txt").val(),
    data: to_data_txt,
};
 
var return_value = await window.ethereum.request({
    method: 'eth_call',
    params: [send_params, "latest"],
});

toに取得先コントラクトアドレス文字列、dataにABIエンコードされた関数名およびパラメータ文字列を指定し、eth_callとする。

ハマった最大のポイントは[send_params, "latest"],とすることである。latestが無いと、

RPC Error: missing value for required argument 1

というエラーで処理してもらえない。

コントラクトの状態データを取得する関数であるので、戻り値はドランザクションIDでなく状態データそのものとなる。たとえば以下ページで作成した、

【Solidity】Remix IDEを使用してサーバー不要のコントラクト開発&デバッグ【Ethereum】

Storageコントラクトのretrieve関数を呼んだ場合、戻りはコントラクト変数のnumber数値になる。

ところで、eth_sendTransactionやeth_callで指定するdataフィールド=ABIエンコードされた関数名およびパラメータ文字列=を作る機能はまだwindow.ethereumには未実装である。

よって、これはWeb3.jsの機能を使って作ることになる。別ページにまとめたので参照されたい。

window.etereum.requestに渡すdataフィールドをABIエンコードで作成する

あなたの切手、あなたが満足する価格で買い取ります。 不要な切手の買い取りならバイセルがおすすめ。
◆バイセルとは?◆ 「早く、高く、出張買取」をモットーに 着物や切手、ブランド品などお客様が使わなくな...READ MORE
ガス会社の乗り換えで、ガス料金が安くなる!【ガス屋の窓口】
【圧倒的安さ・保証・実績が強みです】 グループ全体で「100,000世帯(業界最大級)」のガス会社変更実績! ...READ MORE
一番安い価格が見つかる外壁塗装の一括見積りサイト【外壁広場】
外壁塗装の相見積もりが出来る為、一番安い塗装会社を選べるというメリットがあります。 サイト自体も一括見...READ MORE
※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【webmaster/管理人】
自営業プログラマー
ご連絡は以下アドレスまで★

☆ServerNote.NETショッピング↓
ShoppingNote
☆お仲間ブログ↓
一人社長の不動産業務日誌
【キーワード検索】