コンテンツへスキップ
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メインネットのスループットをスケールさせるものである。この2つの技術を統合することで、zkSync EraはよりTPSが高く、より安全なEthereumトランザクションを可能にする。

完全なEVM互換に加えて、EraはEIP-4337で当初提案されたアカウント抽象化のコンセプトをEthereumスタックに導入している。

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

zkSync Era上での開発の始め方

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

前提条件

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

  • Ethereumウォレットの秘密鍵
  • テスト用のether
  • 必要なプラグインを備えたHardhat Integrated Development Environment(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. スマートコントラクトを作成する

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

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

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

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

npx hardhat compile

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

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

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

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

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

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

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

  • そのためには、AlchemyのGoerliフォーセットに移動し、Goerliテストネット上でetherを取得する。

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

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

  • Goerliフォーセットのウェブサイトで、ウォレットアドレスを貼り付け、Send Me ETHをクリックする。

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

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

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

MAXをクリックする(または任意の金額を入力してもよいが、最低でも0.1 gETHであることを確認する)、その後Depositをクリックする。

:右下のフィールドが「zkSync Era Goerli」と表示されていることを確認する。

ブリッジが完了するのを待つ間に、デプロイスクリプトを作成してデプロイを仕上げる。

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 VersionSolc 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つの新しいフィールドが表示される - 1つは人物の名前を、もう1つは年齢を定義するためのものである。

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

トランザクションが確認されたら、personInfoをクリックし、先ほど追加した人物の名前を入力する。

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

Background gradient

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

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