※ 本記事は2022/12/1時点での筆者の知る範囲での情報の公開であり、再現性や結果を保証するものではありません。当記事の内容を応用する場合は、ご自身でもDYORの精神で情報収集することを推奨します。
この記事では既にEthereum上で動作している, または動作するよう作成したスマートコントラクトをAvalanche上へデプロイし,あなたのスマートコントラクトをAvalancheへ移行する際の要点をまとめます。
AvalancheのC-ChainはEVM互換であるため, Solidityで記述したスマートコントラクトをAvalanche上にそのままデプロイすることができます。
スマートコントラクトをEthereumのネットワーク(testnet or mainnet)にデプロイしたことがある
MetaMaskを使用したことがある
開発環境によって多少違いはあると思いますが, デプロイ先を変更することでAvalancheへデプロイすることができます。
ここではhardhatを例にします。 以下のhardhat.config.ts
の参考例です。
import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";
import * as dotenv from "dotenv";
// .envファイルから環境変数をロードします。
dotenv.config();
if (process.env.TEST_ACCOUNT_PRIVATE_KEY === undefined) {
console.log("private key is missing");
}
const config: HardhatUserConfig = {
solidity: "0.8.9",
networks: {
fuji: {
url: "https://api.avax-test.network/ext/bc/C/rpc",
chainId: 43113,
accounts:
process.env.TEST_ACCOUNT_PRIVATE_KEY !== undefined
? [process.env.TEST_ACCOUNT_PRIVATE_KEY]
: [],
},
mainnet: {
url: "https://api.avax.network/ext/bc/C/rpc",
chainId: 43114,
accounts: [`0x${process.env.MAIN_ACCOUNT_PRIVATE_KEY}`],
},
},
};
export default config;
ここでわかるように, networks
の部分に fuji
や mainnet
を用意し,AvalancheのRPCを記述します。
また, デプロイをする前にMetaMaskにAvalancheのネットワークを追加し, 接続しておきます。
fuji (C-Chainのtestnet) を使用する場合, 以下の情報でネットワークを追加できます
Network Name: Avalanche FUJI C-Chain
New RPC URL: https://api.avax-test.network/ext/bc/C/rpc ChainID: 43113
Symbol: AVAX
Explorer: https://testnet.snowtrace.io/
faucetからAVAXを取得します。
MetaMaskで使用しているアカウントの秘密鍵を hardhat.config.ts
内で使えるようにします(ファイル内に直接記述, またはdotenvパッケージを使用し.envファイル内に記述)。
以上でデプロイスクリプトを走らせるとAvalancheへデプロイすることができます。
実行例
npx hardhat run scripts/deploy.ts --network fuji
個人でRPCを用意することも可能です。 DataHub や QuickNode などがあるでしょう。
Dappのクライアントサイドのコードにおいて,スマートコントラクトの情報(コントラクトのアドレスやABI情報)と使用方法はEthereumの時と基本的に変わりません。
しかし, ネイティブトークンの扱いは違いがあるので最後のセクションでお話しします。
Ethereum において, アカウントはトランザクションを送信でき, ETH を持つ存在です。
ユーザが管理することも, スマートコントラクトとして展開することもできます。
ユーザによって管理されるアカウントは, 秘密鍵と公開鍵により構成されます。
この2つの鍵のペアは取引が実際に送信者によって署名されたことを証明し、偽造を防止するのに役立ちます。
そして Ethereum 上でアカウントを判別する仕組みとしてアドレスがあります。
Ethereum では, アドレスはアカウントの公開鍵の最後の20バイトが使われます。
そしてユーザがアカウントとやり取りするためのインターフェースとしてウォレットがあります。
MetaMask は Ethereum アカウントとやり取りができるウォレットです。
Avalanche も同じように秘密鍵と公開鍵の仕組みを取り入れており,C-Chain は EVM のアドレスシステムを採用しています。
そのためC-Chain上での取引には,(例えばMetaMaskで作成した)既存のアカウントを使用することができます。
参考リンク
C-Chainのネイティブトークンのシンボルは AVAX
なので, コントラクト内でネイティブトークンを使用している部分はAVAX
が使用されることになります。