Ethereum上のコントラクトにメッセージを送信する方法

コントラクトを実際に使用する際には一般的に Web3.js とブラウザの拡張機能で提供されるウォレット Metamask 等を接続し,ウォレットプロバイダを通してトランザクションの作成,送信を行います.

ただ,DApp を作成していないときにはテストネット上のコントラクトにトランザクションを送って動作確認ができないので,このようなときには Truffle のコンソール機能や Remix の機能を使うと良いでしょう.

今回は Ethereum Rinkeby テストネットに接続してみます.

Truffleを利用する方法

terminal
$ truffle console --network rinkeby 
truffle-config.js
module.exports = {
  networks: {
    ...,

    rinkeby: {
      provider: () => new HDWalletProvider(mnemonic, `https://rinkeby.infura.io/v3/${infuraKey}`),
      network_id: 4, // Rinkeby's ID
      gas: 5500000,
      confirmations: 2,
      timeoutBlocks: 200,
      skipDryRun: true,
    },

    ...
  }
}

コンソールが有効になればコントラクトに対してメッセージが送れる…はずですが,うまくいきませんでした.

エラーの感じでは Infura を使用するとできないかもしれません.

Remixを利用する方法

Remix のメジャーな使用方法としては,Solidity ファイルをエディタで編集してコンパイル&デプロイし,コントラクトにメッセージを送るという流れになりますが,テストネットにデプロイ済みのコントラクトアドレスを入力することでメッセージを送ることもできます.

普通にエディタを開いた状態では [At Address] が非アクティブになっているため,以下の操作を行います.

まず,Remix エディタの新規タブに ABI をコピペし,<filename>.abi としてファイルを作成します.

ABI はコントラクトのルートディレクトリ以下の build/contracts/<contract name>.json 内部に記載されています.

次に,ABI ファイルがアクティブタブにした状態で Remix の [DEPLOY & RUN TRANSACTION] ページに移動します.

これで [At Address] が入力可能になります.

ここにデプロイ済みのコントラクトアドレスを入力すると,コントラクトとインタラクションを行うことができるようになります,

参考: Deploy & Run — Remix - Ethereum IDE 1 documentation