演習 - Ropsten テスト ネットワークにデプロイする

完了

スマート コントラクトを作成し、 それを開発ネットワークに正常にデプロイできました。 次に、Ropsten テスト ネットワークへのデプロイを重点的に取り上げます。

演習の概要

このチュートリアルでは、MetaMask とテスト Ether を使用して Ropsten にデプロイします。 デプロイ プロセスでは、Ropsten Testnet に接続してデプロイするように Infura アカウントを設定する必要があります。 デプロイ後、Ropsten Testnet Explorer を使用して、Testnet にデプロイされたブロックを確認することができます。

演習の設定

演習を設定するには、次の手順を実行します。

  1. MetaMask をインストールして設定します。
  2. テスト Ether を取得します。
  3. HDWallet-Provider と fs をインストールします。
  4. Infura をインストールし、エンドポイントを Ropsten テスト ネットワークにリンクします。

MetaMask を設定する

まだ MetaMask をインストールして設定していない場合は、それを行います。 次に、ブラウザーで、ご使用のアカウントにサインインします。

Ether を MetaMask Ropsten テスト ネットワークに追加する

MetaMask アカウントを使用して、Ropsten テスト ネットワークに接続します。 まず、Ropsten Test Faucet からテスト Ether を取得します。

  1. MetaMask を開きます。

  2. Ropsten に接続します。

  3. ご使用のアカウントのアドレスをコピーします。

    アカウントのアドレスをコピーできる MetaMask ブラウザー拡張機能を示すスクリーンショット。

  4. ブラウザー ウィンドウまたはタブを開き、Ropsten Faucet にアクセスします。

  5. Ether を要求するには、ご使用の Testnet アカウントのアドレスを入力し、[Send me test Ether](テスト Ether を送信してください) を選択します。

    Ropsten Faucet でテスト Ether を要求する方法を示すスクリーンショット。

  6. MetaMask で、ご使用のアカウントに Ether があることを確認します。

    MetaMask ブラウザー拡張機能を示すスクリーンショット。アカウントの Ether の数量が表示されます。

HDWallet-Provider と fs をインストールする

次に、HDWallet-Provider が必要です。 このウォレット対応 Web3 プロバイダーにより、シークレット ニーモニックと接続ネットワーク アドレスが作成されます。 さらに、ファイル システムから読み取るための fs も必要です。

両方のツールをインストールするには、Visual Studio Code で todolist プロジェクトに戻ります。 ターミナル ウィンドウを開き、次のコマンドを実行します。

  1. npm init
  2. npm install fs
  3. npm install @truffle/hdwallet-provider

fs と HDWallet-Provider のインストールが完了するまで待ちます。 いくつかの警告が表示される場合があります。 これらの警告は、エラーでない限り無視することができます。

Infura 開発スイートを使用すると、Ethereum ネットワークへの即時のスケーラブルな API アクセスが提供されます。 Infura は、ユーザーがパブリック ネットワーク上でアプリケーションを実行できるようにするホスト型 Ethereum ノード クラスターです。 Infura を使用して、パブリック ネットワークにデプロイし、ネットワークとやり取りします。

アカウントを設定するには、Infura Web サイトにアクセスし、次の手順に従います。

  1. アカウントを設定し、メール アドレスを確認します。
  2. [Ethereum]>[Create new project]\(新しいプロジェクトの作成\) を選択します。 プロジェクトに TodoList という名前を付けます。
  3. [キー] で、エンドポイントを [Ropsten] に変更します。

ビューは、次のテスト プロジェクトのようになります。

Infura プロジェクトの作成プロセスを示すスクリーンショット。

Ropsten に接続する

Visual Studio Code で todolist プロジェクト フォルダーに戻ります。

  1. Truffle 構成ファイル ./truffle-config.js で、hdwallet-providerinfuraKeyfsmnemonic の行のコメントを解除します。

     const HDWalletProvider = require('@truffle/hdwallet-provider');
     const infuraKey = "fj4jll3k.....";
    
     const fs = require('fs');
     const mnemonic = fs.readFileSync(".secret").toString().trim();
    
  2. Infura アカウントに移動し、infuraKey 値を取得します。 Infura では、これは、プロジェクト ID と呼ばれます。 これは、Ropsten エンドポイントで表示できます。

    コピーする Ropsten エンドポイントを示すスクリーンショット。

  3. [プロジェクト ID] の横にあるクリップボード アイコンを選択して ID をコピーします。 ./truffle-config.js に戻り、infuraKey 値に貼り付けます。

    次の図は、貼り付けるキーの例を示しています。 サンプル キーはプレースホルダーとして使用できますが、キーはここに表示されるものとは異なり、独自の infuraKey を使用する必要があります。

    const infuraKey = "f6bfe21890a84b9fa27def74bafb0b1b";
    
  4. .secret という名前のファイルを作成します。 ニーモニックを新しいファイルにコピーします。

    ニーモニックを取得するには、MetaMask で、[Settings]\(設定\)>[Security & Privacy]\(セキュリティとプライバシー\) の順に移動します。 [Reveal Seed Phrase](シード フレーズを表示) を選択します。 MetaMask パスワードを入力して、本人確認を行います。 次に、[クリップボードにコピー] を選択します。

    重要

    ニーモニックを他の人に教えないでください。自分のアカウントにアクセスされる危険性があります。 Git を使用する場合、必ず .gitignore ファイルに .secret を含めるようにしてください。

     MetaMask でシード フレーズを表示する方法を示すスクリーンショット。

  5. 次のコードを使用して、.secret ファイルからシード フレーズを読み取り、すべての空白をトリミングします。

    const mnemonic = fs.readFileSync(".secret").toString().trim();
    
  6. truffle-config.js 内の Ropsten ネットワーク設定のコメントを解除して、ネットワークを定義します。 構成が次のコードのようになっていることを確認します。

    ropsten: {
       provider: () => new HDWalletProvider(mnemonic, `https://ropsten.infura.io/v3/${infuraKey}`),
       network_id: 3,       // Ropsten's id
       gas: 5500000,        // Ropsten has a lower block limit than mainnet
       confirmations: 2,    // # of confs to wait between deployments. (default: 0)
       timeoutBlocks: 200,  // # of blocks before a deployment times out (minimum/default: 50)
       skipDryRun: true     // Skip dry run before migrations? (default: false for public nets )
     },
    

Ropsten にデプロイする

Ropsten にデプロイするには、Visual Studio Code ターミナルから次のコマンドを実行します。

truffle migrate --network ropsten

接続に成功すると、次の出力が表示されます。

Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.

Warning: Both truffle-config.js and truffle.js were found. Using truffle-config.js.

Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.


Starting migrations...
======================
> Network name:    'ropsten'
> Network id:      3
> Block gas limit: 8000029 (0x7a121d)


1_initial_migration.js
======================

   Deploying 'Migrations'
   ----------------------
   > transaction hash:    0x2f456acc5f842ddf0eb151742e47dd6e8ec5e48d73b1f150e2908cb56e0bf174
   > Blocks: 1            Seconds: 29
   > contract address:    0x789101d0B0Ffa4f8f87E67AF8ff8F84bD519752D
   > block number:        9398701
   > block timestamp:     1609784599
   > account:             0x896587D82C895F30433cade401068C2791A6936F
   > balance:             0.99616138
   > gas used:            191931 (0x2edbb)
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.00383862 ETH

   Pausing for 2 confirmations...
   ------------------------------
   > confirmation number: 1 (block: 9398702)
   > confirmation number: 2 (block: 9398703)

   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:          0.00383862 ETH


2_deploy_contracts.js
=====================

   Deploying 'TodoList'
   --------------------
   > transaction hash:    0xad8066308e9cc8503400c86a43674d856a71e02696e2c21b3e55f566df5afc36
   > Blocks: 0            Seconds: 8
   > contract address:    0x48112BE8d0E6e7bA892aFa2d4Ab58e9c43dd37De
   > block number:        9398706
   > block timestamp:     1609784870
   > account:             0x896587D82C895F30433cade401068C2791A6936F
   > balance:             0.98513544
   > gas used:            508959 (0x7c41f)
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.01017918 ETH

   Pausing for 2 confirmations...
   ------------------------------
   > confirmation number: 1 (block: 9398707)
   > confirmation number: 2 (block: 9398708)

   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:          0.01017918 ETH


Summary
=======
> Total deployments:   2
> Final cost:          0.0140178 ETH

コントラクトのデプロイを確認する

以降のセクションの手順に従って、コントラクトがデプロイされたことを確認します。

MetaMask での確認

MetaMask をチェックして、Ether を使用してコントラクトがデプロイされたことを確認します。

Ropsten にデプロイした後の MetaMask の残高を示すスクリーンショット。

Ropsten Etherscan での確認

Ropsten Etherscan で、コントラクトのアドレスを入力します。 次に、コントラクトを確認します。

Etherscan にデプロイされたコントラクトを示すスクリーンショット。

Visual Studio Code 内で新しいターミナル ウィンドウを開いてデプロイを確認することもできます。 コントラクトとやり取りするには、Ganache 開発ブロックチェーンの場合と同様に Truffle コンソールを使用します。