コントラクトをデプロイしよう🚀

どうも、Mejikaです!

 

コントラクトのテストは

無事に出来たでしょうか?😌

 

できた方は

いよいよデプロイです🚀

 

 

テストと本番はなにがちがうの❓🤣

 

主に3つです。

 ①コントラクト発行者のウォレットが必要

 ②ウォレットにはガス代(イーサ)が入っていること

 ③ブロックチェーン上のノードに接続できること

 

今回、イーサリウムのテストネット(Rinkeby)上に

デプロイします。

 

 

以下の手順でやっていきましょう。

 ①をメタマスクで作成

 ②テストネット用のイーサを入手する

 ③Infura APIを使って Infuraのノードに接続する

 

このようなイメージです。

 

 

メタマスクでウォレット作成は

もはや説明は不要ですよねw

 

ここでは、注意事項だけお伝えします。

 

⚠ 超重要 ⚠ 超重要 ⚠ 超重要 ⚠

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

 必ずテスト専用アカウントを作成して使ってください。

 作成したウォレットにはテスト用のイーサのみ入れてください。

 間違っても、本物のお金を入れないでください。

 Infuraにウォレットの秘密鍵などの情報を提供し

 テストネットのノードに送付します。

 万が一にもハッキングされたら終わりです。

 繰り返します。

 

 必ずテスト専用アカウントを作成して使ってください。

 作成したウォレットにはテスト用のイーサのみ入れてください。

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

⚠ 超重要 ⚠ 超重要 ⚠ 超重要 ⚠

 

メタマスクでテストネット(Rinkeby)に接続します。

 

テストネット用のイーサを入手します。

 

 

Infuraに登録しましょう。 

コチラ です

 

 

2段階認証の設定もお忘れなく😌

 

ログインしたら

CREATE NEW KEYで新規作成します

 

 

 

次に、下の画面になったら

イーサリウムを選択します。

 

Projectの名前を任意に設定します。

(今回は message とでもしておきましょう)

 

イーサリウムのテストネット(Rinkeby)を選択します。

  

 

アドレス表示されましたでしょうか?

 

あとでコードに貼り付ける時は、ここからコピーします。

 

 

ノードとは

 ブロックチェーン上のP2P通信に参加する全てのPC

のことです。

 

ノードの役割は主に4つです。

 ・ルーティング → 他のPCと手を繋ぎ続ける

 ・マイニング  → ノンス(数字)をひたすら計算して当てる

 ・ブロックチェーン情報の保管 → トランザクション情報など

 ・ウォレット管理 → アカウント情報など

 

ちなみに、ノードの中でも2つあります。

 SPVノード ←渡すだけ

 フルノード ←受け取ったり渡したりする

 

……ノードにトランザクションを送付するのって

なんだか大変そうだなぁ……🙄

 

 

そこでInfuraさんの出番です。

 

Infuraは、既にイーサリアム上のノードを持っています。

そのノードに、InfuraのAPIを通して接続するわけです

 

 ^^^^^^

API は、Application Program Interface の略ですね。

ノードに接続してくれるサービス、ということです。

Infuraのエンドポイントのアドレスは、

API  key で指定されてるんですね。

 ^^^^^^

 

さて、ここまで準備が整えば、

あとはデプロイです!

 

 deploy.js

を使います。

 

あ、ちょっと待ってください!

デプロイの前にHDwalletProviderをInstallしておきましょう。

 

HDwalletProviderは、

12文字の言葉からウォレットの秘密鍵を生成してくれます。

 

それを、Infuraさんに情報提供するわけですね。

 

そうしたら、Infuraさんがノードに

ウォレット情報を提供するわけですね。

そう、秘密鍵の情報もです。

 

npm install します。

 

エンターして、インストール!

 

出来ましたか?

 

ではコードの中身をみてみましょう😌

 

 

const HDWalletProvider = require('@truffle/hdwallet-provider');
const Web3 = require('web3');

const { interface, bytecode } = require('./compile');

provider = new HDWalletProvider(
  'amused peanut keen bid brand spawn meat harsh copper stage lemon clump',
  'https://rinkeby.infura.io/v3/f008c732a6ba49bcbb63a56ac6745f53  '
);

const web3 = new Web3(provider);

const deploy = async () => {
  const accounts = await web3.eth.getAccounts();

  console.log('Attempting to deploy from account', accounts[0]);

  const result = await new web3.eth.Contract(JSON.parse(interface))
    .deploy({ data: bytecode, arguments: [''] })
    .send({ gas: '1000000', from: accounts[0] });

  console.log('Contract deployed to', result.options.address);
  provider.engine.stop();
};
deploy();

 

 

1つ1つ見ていきましょう

 

 

 

 

  

 

 

 

それではいよいよデプロイ!

 

もうすこし……あとすこし 

 

 

出来たー!! デプロイ完了!

 

……っとここであせってはいけません。

深呼吸しましょう😤

 

デプロイされたコントラクトアドレスを

コピペしてください。

 

上記だと

  0x297e215A84C722D1c9B6c9400E00f3F0aAC90333

ですねw

 

こちらを、Rinkeby用エクスプローラー

見てみましょう! 

発行されてますね! 

 

 

 

お疲れさまでした!

無事にコントラクトの発行まで出来ましたね🚀

 

次回は、

発行したコントラクトを

簡単なフロントエンド(ホームページ)を作って

動かして遊んでみましょう!

 

ここまで読んでくださったあなた、本当にありがとうございます!

それではまた、お会いしましょう!

 

ウホウホ

🦍

コメント

タイトルとURLをコピーしました