演習 - Ropsten テスト ネットワークにデプロイする
スマート コントラクトを作成し、 それを開発ネットワークに正常にデプロイできました。 次に、Ropsten テスト ネットワークへのデプロイを重点的に取り上げます。
演習の概要
このチュートリアルでは、MetaMask とテスト Ether を使用して Ropsten にデプロイします。 デプロイ プロセスでは、Ropsten Testnet に接続してデプロイするように Infura アカウントを設定する必要があります。 デプロイ後、Ropsten Testnet Explorer を使用して、Testnet にデプロイされたブロックを確認することができます。
演習の設定
演習を設定するには、次の手順を実行します。
- MetaMask をインストールして設定します。
- テスト Ether を取得します。
- HDWallet-Provider と fs をインストールします。
- Infura をインストールし、エンドポイントを Ropsten テスト ネットワークにリンクします。
MetaMask を設定する
まだ MetaMask をインストールして設定していない場合は、それを行います。 次に、ブラウザーで、ご使用のアカウントにサインインします。
Ether を MetaMask Ropsten テスト ネットワークに追加する
MetaMask アカウントを使用して、Ropsten テスト ネットワークに接続します。 まず、Ropsten Test Faucet からテスト Ether を取得します。
MetaMask を開きます。
Ropsten に接続します。
ご使用のアカウントのアドレスをコピーします。
ブラウザー ウィンドウまたはタブを開き、Ropsten Faucet にアクセスします。
Ether を要求するには、ご使用の Testnet アカウントのアドレスを入力し、[Send me test Ether](テスト Ether を送信してください) を選択します。
MetaMask で、ご使用のアカウントに Ether があることを確認します。
HDWallet-Provider と fs をインストールする
次に、HDWallet-Provider が必要です。 このウォレット対応 Web3 プロバイダーにより、シークレット ニーモニックと接続ネットワーク アドレスが作成されます。 さらに、ファイル システムから読み取るための fs も必要です。
両方のツールをインストールするには、Visual Studio Code で todolist プロジェクトに戻ります。 ターミナル ウィンドウを開き、次のコマンドを実行します。
npm init
npm install fs
npm install @truffle/hdwallet-provider
fs と HDWallet-Provider のインストールが完了するまで待ちます。 いくつかの警告が表示される場合があります。 これらの警告は、エラーでない限り無視することができます。
Infura を設定し、エンドポイントを Ropsten テスト ネットワークにリンクする
Infura 開発スイートを使用すると、Ethereum ネットワークへの即時のスケーラブルな API アクセスが提供されます。 Infura は、ユーザーがパブリック ネットワーク上でアプリケーションを実行できるようにするホスト型 Ethereum ノード クラスターです。 Infura を使用して、パブリック ネットワークにデプロイし、ネットワークとやり取りします。
アカウントを設定するには、Infura Web サイトにアクセスし、次の手順に従います。
- アカウントを設定し、メール アドレスを確認します。
- [Ethereum]>[Create new project]\(新しいプロジェクトの作成\) を選択します。 プロジェクトに TodoList という名前を付けます。
- [キー] で、エンドポイントを [Ropsten] に変更します。
ビューは、次のテスト プロジェクトのようになります。
Ropsten に接続する
Visual Studio Code で todolist プロジェクト フォルダーに戻ります。
Truffle 構成ファイル ./truffle-config.js で、
hdwallet-provider
、infuraKey
、fs
、mnemonic
の行のコメントを解除します。const HDWalletProvider = require('@truffle/hdwallet-provider'); const infuraKey = "fj4jll3k....."; const fs = require('fs'); const mnemonic = fs.readFileSync(".secret").toString().trim();
Infura アカウントに移動し、
infuraKey
値を取得します。 Infura では、これは、プロジェクト ID と呼ばれます。 これは、Ropsten エンドポイントで表示できます。[プロジェクト ID] の横にあるクリップボード アイコンを選択して ID をコピーします。 ./truffle-config.js に戻り、
infuraKey
値に貼り付けます。次の図は、貼り付けるキーの例を示しています。 サンプル キーはプレースホルダーとして使用できますが、キーはここに表示されるものとは異なり、独自の infuraKey を使用する必要があります。
const infuraKey = "f6bfe21890a84b9fa27def74bafb0b1b";
.secret という名前のファイルを作成します。 ニーモニックを新しいファイルにコピーします。
ニーモニックを取得するには、MetaMask で、[Settings]\(設定\)>[Security & Privacy]\(セキュリティとプライバシー\) の順に移動します。 [Reveal Seed Phrase](シード フレーズを表示) を選択します。 MetaMask パスワードを入力して、本人確認を行います。 次に、[クリップボードにコピー] を選択します。
重要
ニーモニックを他の人に教えないでください。自分のアカウントにアクセスされる危険性があります。 Git を使用する場合、必ず .gitignore ファイルに .secret を含めるようにしてください。
次のコードを使用して、.secret ファイルからシード フレーズを読み取り、すべての空白をトリミングします。
const mnemonic = fs.readFileSync(".secret").toString().trim();
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 Etherscan での確認
Ropsten Etherscan で、コントラクトのアドレスを入力します。 次に、コントラクトを確認します。
Visual Studio Code 内で新しいターミナル ウィンドウを開いてデプロイを確認することもできます。 コントラクトとやり取りするには、Ganache 開発ブロックチェーンの場合と同様に Truffle コンソールを使用します。