どうも、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用エクスプローラーで
見てみましょう!
発行されてますね!
お疲れさまでした!
無事にコントラクトの発行まで出来ましたね🚀
次回は、
発行したコントラクトを
簡単なフロントエンド(ホームページ)を作って
動かして遊んでみましょう!
ここまで読んでくださったあなた、本当にありがとうございます!
それではまた、お会いしましょう!
ウホウホ
🦍
コメント