コンテンツへスキップ
0%

zkSyncで開発を始める方法(2025)

Petar Todorov headshot

執筆者 Petar Todorov

2023年5月5日 公開読了時間 1 分

Matter Labsが、Scroll、Polygonと世界初のゼロ知識EVMの座を競うレースに参戦した。zkSync Eraだ。

2023年3月にローンチされたzkSync Eraは、ゼロ知識証明を利用してEthereumネットワークの速度と処理能力をスケールするEVM互換のZK Rollupである。

zkSync上での開発には、ETHおよびERC20トークンの低いガス代に加え、アトミックスワップ、指値注文、ネイティブなLayer-2 NFTサポートといった利点がある。

この記事では、zkSync Eraとは何か、そしてzkSync公開テストネット上でスマートコントラクトをデプロイする方法を5つのステップで説明する。

zkSync Eraとは何か

zkSync Eraは、Matter Labsによる新しいLayer-2ソリューションで、ZK-ProofsとEthereum Virtual Machine技術を組み合わせてEthereumメインネットのスループットをスケールする。両方の技術を組み合わせることで、zkSync Eraはより高速で安全なEthereumトランザクションを可能にする。

完全なEVM互換性に加え、EraはEthereumスタックにアカウント抽象化の概念を導入している。これは元々EIP-4337で提案されたものだ。

アカウント抽象化により、ウォレットはスマートコントラクトとなり、カスタム署名アルゴリズム、スポンサー付きトランザクション、2要素認証といった機能を持つことができる。

zkSync Era上での開発を始める方法

zkSync Era上での開発は、Ethereum上でコントラクトをデプロイする際にweb3開発者が使用するのとほぼ同じツールを使用する。このチュートリアルでは、zkSync公開テストネット上でスマートコントラクトをデプロイする方法を扱う。

前提条件

このチュートリアルには、以下が必要となる:

  • Ethereumウォレットの秘密鍵
  • テスト用のether
  • 必要なプラグインを含むHardhat統合開発環境(IDE)
  • パッケージマネージャー(NPMまたはYarn)
  • VScode
  • Typescriptの基本的な理解

1. zkSync Era用のIDEをセットアップする

まず、プロジェクト用のフォルダを作成する。

VScode(またはマシンのターミナル)を開き、以下を入力する:

次に、以下のコマンドでnpmを初期化する:npm init -y

-yフラグは、package.jsonファイルのすべての入力フィールドをデフォルト値で事前に埋めることで時間を節約する。

npmとプロジェクトのフォルダのセットアップが完了したので、必要な依存関係をインストールする。

VScodeのターミナルで、以下を入力する:

コマンドの内訳は以下の通り:

  • $ npm i -D:installコマンドのエイリアス。-Dフラグは、すべてのパッケージを開発者依存関係として保存する。
  • $ typescript ts-node:TypescriptとNode.js用のTypescript実行エンジンのインストール。
  • $ ethers@^5.7.2 zksync-web3@^0.13.1:コントラクトのデプロイと操作を支援する2つのライブラリ。
  • $ hardhat:使用するIDE。
  • $ @matterlabs/hardhat-zksync-solc @matterlabs/hardhat-zksync-deploy:スマートコントラクトのコンパイルとデプロイを支援する2つのHardhatプラグイン。

次は、Hardhatプロジェクトの初期化である。

ターミナルで、以下を入力する:

npx hardhat init

「Create a TypeScript Project」を選択し、Enterキーを押して次のフィールドをデフォルト値で事前に埋める。

プロジェクトのフォルダ構造は以下のようになるはずである:

contractsフォルダ内で、自動生成されているLock.solコントラクトを削除する。これは不要なためである。

IDEセットアップの最後のステップは、hardhat.config.tsファイルに移ることである。

hardhat.config.tsファイルは、デプロイのために以下のパラメータを定義する「コマンドセンター」である:

  • zkSyncコンパイラのバージョン
  • コントラクトがデプロイされるチェーン
  • コントラクトが記述されるSolidityコンパイラのバージョン

hardhat.config.tsファイルの内容を削除し、以下に置き換える:

これでIDEのセットアップが完了し、次のステップはスマートコントラクトの作成である。

2. スマートコントラクトを作成する

このコントラクトは、人物の名前と年齢を登録するものである。

プロジェクトディレクトリ内のcontractsフォルダに移動し、Registry.solという新しいファイルを作成する。

次に、以下のスマートコントラクトのコードをコピーしてファイルに貼り付ける:

コントラクトはデプロイの前にコンパイルする必要がある。ターミナルで、以下を入力する:

npx hardhat compile

3. zkSync Era用のウォレットをセットアップする

zkSync Eraは既存のEthereumウォレットをサポートしているため、新しいウォレットを作成する必要はない。

したがって、Metamaskのような既存のウォレットを使用できる。

注:デプロイ手順では秘密鍵のエクスポートが必要となるため、投資や貯蓄を保管している個人用のEthereumウォレットの使用は推奨されない。

4. テスト用のSepolia ETHを取得しzkSync Eraにブリッジする

コントラクトをデプロイするためには、zkSync Eraテストネット上のテスト用etherが必要となる場合がある。

テスト用のetherを取得するには、デプロイ用ウォレットからSepolia ETHをzkSync Era上のインスタンスにブリッジする。

  • これを行うには、AlchemyのSepolia faucetにアクセスし、Sepolia上でetherを取得する。

  • 進める前に、無料のAlchemyアカウントを作成する。

  • 次に、Metamaskを開き、ウォレットアドレスをクリックしてコピーする。

  • faucetのページで、ウォレットアドレスを貼り付け、Sepolia ETHをリクエストする。

次に、zkSync Eraの現行のSepoliaブリッジに移動する。

「Connect via a browser wallet Metamask」をクリックする。

コントラクトのデプロイに使用するウォレットを選択する。

MAXをクリックする(または任意の額を入力してもよいが、少なくとも0.1 ETHであることを確認する)、そしてDepositをクリックする。

注:送信先ネットワークがzkSync Eraの現行のSepoliaテストネットであることを確認する。

ブリッジが完了するのを待つ間、デプロイスクリプトを作成してデプロイの準備を完了させる。

5. デプロイスクリプトを作成し、秘密鍵をエクスポートする

次に、デプロイスクリプトを作成し、Metamaskから秘密鍵をエクスポートし、秘密鍵をコピーしてスマートコントラクトをデプロイする。

その方法は以下の通りである:

デプロイスクリプトを作成する

VSCodeに戻り、scriptsフォルダの名前をdeployに変更し、その中にdeploy.tsというファイルを作成する。

その後、以下のコードをファイルにコピーする:

「//」でマークされたコメントは、コードのロジックを説明している。

MetaMaskから秘密鍵をエクスポートする

Metamaskで、ブリッジの際に使用したウォレットを開き、その秘密鍵をエクスポートする。

縦に並んだ3つの点をクリックし、次にAccount detailsをクリックし、Export private keyをクリックする。

パスワードを入力し、表示された文字列をコピーする。

秘密鍵を貼り付けてスマートコントラクトをデプロイする

deploy.tsファイルに戻り、以下の行を見つける:

** const wallet = new Wallet("<WALLET-PRIVATE-KEY>");**

**<WALLET-PRIVATE-KEY>**の部分に秘密鍵を貼り付ける。

二重引用符を削除しないよう注意すること。

最後に、VScodeのターミナルに移動し、以下を入力する:npx hardhat deploy-zksync

6. ブロックエクスプローラーでスマートコントラクトを検証する

zkSync Eraのテストネットブロックエクスプローラーを使用して、デプロイしたコントラクトを検証する。

ブロックエクスプローラーにアクセスする。検索バーに、デプロイしたコントラクトのアドレスを貼り付ける。

コントラクトが見つかったら、Contractタブをクリックし、次にVerify Smart Contractをクリックする。

次に、必要な詳細を入力する:

Contract Nameは**「Registry」**とする。

Zksolc version - v1.3。

Solc version - 0.8.17。

Zksolc VersionとSolc Versionはどちらも、hardhat.config.tsファイルから取得できる。

Enter the Solidity Contract Codeフィールドに、Registry.solファイルの内容を貼り付ける。

Verify Smart Contractをクリックして処理を完了させる。

7. ZkSync Era上でデプロイしたコントラクトを操作する

ブロックエクスプローラーで、再びアドレスによりコントラクトを見つけ、Contractタブをクリックする。

今回は、ブロックエクスプローラーに2つの新しいフィールドが表示されるはずである:

  1. ゲッター関数用のRead
  2. セッター関数用のWrite

personInfoマッピングの可視性は_public_として定義されているため、そのゲッターメソッドは自動的に生成される。

デプロイ用ウォレットがエクスプローラーに接続されていることを確認する。addPersonをクリックする。

セクションが展開され、2つの新しいフィールドが表示される。一つは人物の名前を定義するもの、もう一つはその年齢を定義するものである。

これらを入力した後、Writeをクリックしてトランザクションを確認する。

トランザクションが確認された後、personInfoをクリックし、追加したばかりの人物の名前を入力する。

GUIは、追加された人物の年齢を返すはずである。

Background gradient

ブロックチェーンで魔法を生み出す

Alchemyは、最も強力なweb3開発者向けプロダクトとツールを、豊富なリソース、コミュニティ、そして卓越したサポートと組み合わせて提供します。