ERC-20 토큰 브릿징하기

이더리움에서 GIWA로, GIWA에서 이더리움으로 ERC-20 토큰(Token)을 브릿징해요.

요구사항

아래 항목들이 설치되어 있어야해요.

개발 환경 세팅

이 튜토리얼에서는 viem을 사용해요. Viem은 Node.js 라이브러리이기 때문에 Node.js 프로젝트로 생성합니다.

1

프로젝트 폴더 생성

mkdir giwa-bridging-erc20
cd giwa-bridging-erc20
2

프로젝트 초기화

pnpm init
3

Dependencies 설치

pnpm add -D tsx @types/node
pnpm add viem@^2.38.0

지갑 준비

ERC-20 토큰 브릿징을 위해 지갑이 필요해요.

1

세폴리아 ETH 준비

토큰 브릿징을 위해 이더리움 세폴리아 네트워크 및 GIWA 세폴리아 네트워크에서 ETH가 필요해요.

아직 지갑이 없나요? cast 커맨드로 지갑을 생성하세요.

2

Private Key 환경변수 세팅

이 튜토리얼에서는 여러 번의 트랜잭션 서명이 필요해요. 이를 위해 지갑 private key 환경변수를 세팅해야합니다.

export TEST_PRIVATE_KEY=0x...

Chain Client 설정

ERC-20 토큰 브릿징을 위해 chain client를 설정합니다.

컨트랙트 주소 및 ABI 설정

토큰 브릿징을 바로 테스트할 수 있도록 이더리움과 GIWA에 테스트용 ERC-20 토큰을 배포해두었어요. 아래에 정의된 레이어 2 토큰은 레이어 1 토큰의 브릿지된 버전이에요.

ERC-20 토큰 브릿징은 L1StandardBridge 컨트랙트를 통해 이루어져요. 이를 위해 필요한 함수 ABI들도 같이 정의해요.

ABI가 뭔가요?

ABI(Application Binary Interface)는 스마트 컨트랙트와 상호작용할 때 필요한 인터페이스에요. 특정 스마트 컨트랙트의 함수 이름, 파라미터, 반환값 등이 포함되어 있어요. Client나 SDK 등에서 컨트랙트를 호출할 때 ABI를 사용해 정확한 호출을 수행할 수 있습니다.

L1 faucet 토큰 받기

Deposit (이더리움 -> GIWA) 을 위해 이더리움 세폴리아 네트워크에서 faucet 토큰이 필요해요. 위에서 정의한 레이어 1 토큰에는 claimFaucet 함수가 구현되어있어요. 아래 코드를 실행해서 claimFaucet 을 실행하고 레이어 1 facuet 토큰을 받으세요.

1

코드 작성하기

2

실행하기

Deposit ERC-20 Token (이더리움 -> GIWA)

이제 이더리움에서 GIWA로 위에서 받은 Faucet 토큰을 브릿징 해볼까요?

아래 코드를 실행하면 이더리움에 있던 여러분의 Faucet 토큰이 실제로는 L1StandardBridge 컨트랙트로 전송되고, 전송한 수량만큼 여러분의 GIWA 지갑으로 전송되는 것을 확인할 수 있어요. 이러한 방식을 Lock-and-Mint 라고 해요.

1

구성

  1. L1StandardBridge 컨트랙트가 ERC-20 토큰을 전송할 수 있도록 권한 부여

  2. 레이어 1에서 deposit 트랜잭션 전송

  3. 이에 대응되는 레이어 2 deposit 트랜잭션이 sequencer에 의해 생성

  4. Deposit 완료

2

코드 작성하기

3

실행하기

Withdraw ERC-20 Token (GIWA -> 이더리움)

이더리움에서 GIWA로 ERC-20 토큰이 잘 전송되었나요? 이제 반대로 GIWA에서 이더리움으로 ERC-20 토큰을 브릿징해요.

아래 코드를 실행하면 GIWA에 있던 여러분의 ERC-20 토큰이 소각(burn)되고, 전송한 수량만큼 여러분의 이더리움 지갑으로 전송되는 것을 확인할 수 있어요. 이때는 Deposit에 의해 L1StandardBridge 컨트랙트에 Lock되어있던 ERC-20 토큰이 다시 Unlock되는 형태에요. 이러한 방식을 Burn-and-Unlock 이라고 합니다.

1

구성

  1. 레이어 2에서 withdrawal 개시 트랜잭션 전송

  2. 레이어 1에서 withdrawal 증명 트랜잭션 전송

  3. 레이어 1에서 withdrawal 완료 트랜잭션 전송

  4. Withdrawal 완료

2

코드 작성하기

3

실행하기

더 알아보기

ETH, ERC-20 토큰과 같은 자산 외에도 데이터를 브릿징하고 싶나요? OP 스택 문서를 읽고 여러분이 직접 구현해보세요.

Last updated