본문으로 건너뛰기
0%

zkSync 개발 시작하는 방법 (2025)

Petar Todorov headshot

작성자 Petar Todorov

2023년 5월 5일에 게시됨4분 읽기

Matter Labs가 이제 세계 최초의 zero-knowledge EVM인 zkSync Era로 Scroll, Polygon과의 경쟁에 참전했다.

2023년 3월 출시된 zkSync Era는 zero-knowledge proofs를 활용해 Ethereum 네트워크의 속도와 처리 능력을 확장하는 EVM 호환 ZK Rollup이다.

zkSync에서 개발하면 ETH와 ERC20 토큰의 낮은 가스비, 그리고 atomic swap, limit order, 네이티브 Layer-2 NFT 지원 등의 이점이 있다.

이 글에서는 zkSync Era가 무엇인지, 그리고 5단계로 zkSync 퍼블릭 테스트넷에 스마트 컨트랙트를 배포하는 방법을 설명한다.

zkSync era란 무엇인가?

zkSync Era는 Matter Labs가 만든 새로운 Layer-2 솔루션으로, ZK-Proofs와 Ethereum Virtual Machine 기술을 결합하여 Ethereum 메인넷의 처리량을 확장한다. 두 기술을 결합함으로써 zkSync Era는 더 빠르고 안전한 Ethereum 트랜잭션을 가능하게 한다.

완전한 EVM 호환성에 더해, Era는 EIP-4337에서 처음 제안된 계정 추상화(account abstraction) 개념을 Ethereum 스택에 도입한다.

계정 추상화를 사용하면 지갑이 스마트 컨트랙트가 되어 커스텀 서명 알고리즘, 스폰서 트랜잭션, 2단계 인증 같은 기능을 가질 수 있다.

zkSync era 개발을 시작하는 방법

zkSync Era 개발은 Ethereum에 컨트랙트를 배포할 때 web3 개발자가 사용하는 것과 대체로 동일한 도구를 사용한다. 이 튜토리얼에서는 zkSync 퍼블릭 테스트넷에 스마트 컨트랙트를 배포하는 방법을 다룬다.

사전 준비 사항

이 튜토리얼을 진행하려면 다음이 필요하다:

  • Ethereum 지갑의 프라이빗 키
  • 테스트 이더
  • 필요한 플러그인이 포함된 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: 컨트랙트 배포 및 상호작용에 도움이 되는 두 개의 라이브러리.
  • $ hardhat: 사용 중인 IDE.
  • $ @matterlabs/hardhat-zksync-solc @matterlabs/hardhat-zksync-deploy: 스마트 컨트랙트 컴파일과 배포에 도움이 되는 두 개의 Hardhat 플러그인.

다음은 Hardhat 프로젝트 초기화다.‍

터미널에서 다음을 입력한다:

npx hardhat init

'Create a TypeScript Project'를 선택하고 엔터를 눌러 다음 필드들을 기본값으로 미리 채운다.

프로젝트 폴더 구조는 다음과 같아야 한다:

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. 테스트 Sepolia ETH를 받아 zkSync era로 브리지하기

컨트랙트를 배포하려면 zkSync Era 테스트넷에서 테스트 이더가 필요할 수 있다.

테스트 이더를 받으려면, 배포자 지갑에서 zkSync Era의 인스턴스로 Sepolia ETH를 브리지한다.

  • 이를 위해 Alchemy의 Sepolia faucet으로 이동해 Sepolia에서 이더를 받는다.

  • 진행하기 전에 무료 Alchemy 계정을 만든다.

  • 그런 다음 Metamask를 열고 지갑 주소를 클릭해 복사한다.

  • faucet 페이지에서 지갑 주소를 붙여넣고 Sepolia ETH를 요청한다.

다음으로 zkSync Era의 현재 Sepolia bridge로 이동한다.

"Connect via a browser wallet Metamask"를 클릭한다.

컨트랙트 배포에 사용할 지갑을 선택한다.

MAX를 클릭하거나(또는 원하는 금액을 입력하되 최소 0.1 ETH 이상이어야 함) Deposit을 클릭한다.

참고: 대상 네트워크가 zkSync Era의 현재 Sepolia 테스트넷인지 확인한다.

브리징이 완료되기를 기다리는 동안, 배포 스크립트를 만들어 배포를 마무리한다.

5. 배포자 스크립트 생성 및 프라이빗 키 내보내기

다음으로 배포자 스크립트를 만들고 Metamask에서 프라이빗 키를 내보낸 뒤, 프라이빗 키를 복사해 스마트 컨트랙트를 배포한다.

방법은 다음과 같다:

배포자 스크립트 생성

다시 VSCode로 돌아가, scripts 폴더의 이름을 deploy로 바꾸고, 그 안에 deploy.ts라는 파일을 만든다.

그런 다음 다음 코드를 파일에 복사한다:

"//"로 표시된 주석은 코드의 로직을 설명한다.

MetaMask에서 프라이빗 키 내보내기

Metamask에서 브리징에 사용했던 지갑을 열고 프라이빗 키를 내보낸다.

세로 점 세 개를 클릭한 다음 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 테스트넷 블록 익스플로러를 사용해 배포된 컨트랙트를 검증한다.

block explorer로 이동한다. 검색창에 배포된 컨트랙트의 주소를 붙여넣는다.

컨트랙트를 찾으면 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 탭을 클릭한다.

이번에는 블록 익스플로러가 두 개의 새 필드를 보여줄 것이다:

  1. getter 함수를 위한 Read
  2. setter 함수를 위한 Write

personInfo 매핑의 가시성이 _public_으로 정의되어 있으므로, 이에 대한 getter 메서드가 자동으로 생성된다.

배포자 지갑이 익스플로러에 연결되어 있는지 확인한다. addPerson을 클릭한다.

섹션이 확장되면서 두 개의 새 필드가 나타난다 - 하나는 사람의 이름을, 다른 하나는 나이를 정의하는 필드다.‍

입력을 마친 후 Write를 클릭하고 트랜잭션을 확인한다.

트랜잭션이 확인되면 personInfo를 클릭하고 방금 추가한 사람의 이름을 입력한다.

GUI가 추가된 사람의 나이를 반환할 것이다.‍

Background gradient

블록체인 매직을 만드세요

Alchemy는 가장 강력한 Web3 개발자 제품 및 도구를 리소스, 커뮤니티, 그리고 전설적인 지원과 결합합니다.