本ドキュメントではテストネットへのデプロイ方法を説明しますが、メインネットへのデプロイもほとんど同じようにできます。
MintRally では現在ガス代を主催者が負担するメタトランザクションに Openzellelin が提供する Defender というサービスを用いています。
Defenderにアクセスして、新規ユーザー登録をしてください。
デプロイ対象のネットワーク(Mumbai もしくは Polygon)を選択して、Relayer を作成してください。この Relayer からガス代が支払われます。
Relayer にガス代となる MATIC を追加するときは、Metamask などから Relayer のアドレスに向けて送金してください。引き出すときには Withdraw funds のボタンから引き出すことができます。
Autotask はフロントエンドからリクエストを行う API です。Autotask を介して Relayer への接続が行われます。
Name には任意の名前、Trigger には Webhook、Connect to relayer は 1.2 で作成した Relayer を設定します。Code は後ほどアップデートするので操作する必要はありません
Autotask が作成されたら、Autotask の詳細ページにいき URL の末尾にあるユニーク ID を手元にコピーしておいてください、後ほど使います。
このような URLhttps://defender.openzeppelin.com/#/autotask/14645a02-f98e-0000-a659-000000000
の場合、14645a02-f98e-0000-a659-000000000
をコピーしてください。
CLI から Autotask のコードをアップデートするために、Defender の TeamAPI キーを発行します。この API キーは Github などに公開しないでください。
TeamAPIKeysにアクセスし、Create Team API Keys ボタンから ManageRelayers と ManageAutotasks を選択してキーを生成してください。
キーが生成されたら、API Key と Secret Key を手元にコピーしてください。
.env ファイルに以下の変数をセットしてください。Testnet へのデプロイでは MUMBAI から始まる変数、Mainnet へのデプロイでは POLYGON から始まる変数をセットしてください。
Key | Value |
---|---|
TEAM_API_KEY | 1.4 で入手した API KEY |
TEAM_API_SECRET | 1.4 で入手した SECRE TKEY |
MUMBAI_AUTOTASK_ID | 1.3 で入手した AutotaskID。メインネットにはデプロイする際はPOLYGON_AUTOTASK_ID にセットしてください。 |
MUMBAI_RELAYER_ADDRESS | 1.2 で入手した RelayerAddress。メインネットにはデプロイする際はPOLYGON_RELAYER_ADDRESS にセットしてください。 |
ETHERSCAN_API_KEY | Contract を Verify するときに使います。デプロイ対象のネットワークの scan サービスから発行してください。Polygonscan |
STAGING_ALCHEMY_KEY | デプロイ時にブロックチェーンと通信するためにつかいます。Alchemyこちらから対象ネットワークを選択して発行してください。 https://polygon-mumbai.g.alchemy.com/v2/vGk7cESxz のような URL を入力します。メインネットにはデプロイする際はMAINNET_ALCHEMY_KEY にセットしてください。 |
PRIVATE_KEY | コントラクト作成者となるウォレットのプライベートキーをセットしてください。メインネットにはデプロイする際はMAINNET_PRIVATE_KEY にセットしてください。 |
// move to contract directory
$ cd hardhat
// deploy
$ yarn deploy:stg
メインネットに Deploy するときはyarn deploy:main
テストネットへのデプロイが完了するとコントラクトのアドレスがログにでます。
forwarder address: 0x20a83f857c3632408486xxxxxxxxxx
mintNFT address: 0x51A0B20f98676f5EadB08870d0xxxxxxxxxx
eventManager address: 0xe26Df05190CD0f50c85C05Cb1B62xxxxxxxxxx
----------
For frontEnd
----------
NEXT_PUBLIC_FORWARDER_ADDRESS=0x20a83f857c3632408486b703036xxxxxxxxxx
NEXT_PUBLIC_CONTRACT_MINT_NFT_MANAGER=0x51A0B20f98676f5EadB08870xxxxxxxxxx
NEXT_PUBLIC_CONTRACT_EVENT_MANAGER=0xe26Df05190CD0f50c85C05Cb1B6268xxxxxxxxxx
Contract を Verify(検証)してスキャンサイトからどんなコントラクトなのかを見られるようにします。しなくても MintRally は使えますが、これをすることでどんなコントラクトかがわかりやすくなり、ユーザーは信頼しやすくなります。
<address>
を 3.1 で得られたコントラクトアドレスに変えて、MintNFT、EventManager、Forwarder の 3 回実行します。
$ yarn verify --network mumbai <address>
メタトランザクションを仲介する Openzeppelin の Autotask にソースコードをアップロードします。
// build autotask script
$ yarn build
// upload script
$ yarn upload:stg
メインネットにデプロイする際はyarn upload:prd
Vercel でアカウント作成したら、Add New
、Project
で新規プロジェクト作成画面に入ってください。
MintRally のレポジトリを選択して、Import
してください。
任意のプロジェクト名を決めたら、Framework Preset でNext.js
を選択します。
RootDirectory からEdit
画面を開き、frontend のディレクトリを選択してContinue
します。
Environment Variables の欄に以下の環境変数をセットしてください。
環境変数をセットしたら Deploy
ボタンを押して完了です。
Key | Value |
---|---|
NEXT_PUBLIC_FORWARDER_ADDRESS | A forwarder contract address created by step 3.1 |
NEXT_PUBLIC_CONTRACT_EVENT_MANAGER | A event manager contract address created step 3.1 |
NEXT_PUBLIC_CONTRACT_MINT_NFT_MANAGER | A mint NFT manager contract address step 3.1 |
NEXT_PUBLIC_PROVIDER_RPC | Alchemyこちらから対象ネットワークを選択して発行してください。 コントラクトデプロイ時につかったものと同じでも大丈夫です。 |
NEXT_PUBLIC_CHAIN_ID | Testnet: 80001 , Mainnet: 137 . |
NEXT_PUBLIC_CHAIN_NAME | A chain name: Polygon Testnet or Polygon Mainnet . |
NEXT_PUBLIC_BLOCK_EXPLORER_URL | A Block Explorer URL. Testnet: https://mumbai.polygonscan.com/ Mainnet: https://polygonscan.com . |
NEXT_PUBLIC_METAMASK_RPC_URL | A PRC URL for the wallet Testnet: https://matic-mumbai.chainstacklabs.com , Mainnet: https://polygon-rpc.com . |
NEXT_PUBLIC_PINATA_JWT | following instraction describing how to get pinata jwt. link |
NEXT_PUBLIC_PINATA_GATEWAY | A general gateway uri is gateway.pinata.cloud . If you want to use your own gateway please refer pinata doc |