ERC-20 토큰 브릿징하기
이더리움에서 GIWA로, GIWA에서 이더리움으로 ERC-20 토큰(Token)을 브릿징해요.
요구사항
아래 항목들이 설치되어 있어야해요.
개발 환경 세팅
이 튜토리얼에서는 viem을 사용해요. Viem은 Node.js 라이브러리이기 때문에 Node.js 프로젝트로 생성합니다.
지갑 준비
ERC-20 토큰 브릿징을 위해 지갑이 필요해요.
세폴리아 ETH 준비
토큰 브릿징을 위해 이더리움 세폴리아 네트워크 및 GIWA 세폴리아 네트워크에서 ETH가 필요해요.
Chain Client 설정
ERC-20 토큰 브릿징을 위해 chain client를 설정합니다.
컨트랙트 주소 및 ABI 설정
토큰 브릿징을 바로 테스트할 수 있도록 이더리움과 GIWA에 테스트용 ERC-20 토큰을 배포해두었어요. 아래에 정의된 레이어 2 토큰은 레이어 1 토큰의 브릿지된 버전이에요.
ERC-20 토큰 브릿징은 L1StandardBridge 컨트랙트를 통해 이루어져요. 이를 위해 필요한 함수 ABI들도 같이 정의해요.
L1 faucet 토큰 받기
Deposit (이더리움 -> GIWA) 을 위해 이더리움 세폴리아 네트워크에서 faucet 토큰이 필요해요. 위에서 정의한 레이어 1 토큰에는 claimFaucet 함수가 구현되어있어요. 아래 코드를 실행해서 claimFaucet 을 실행하고 레이어 1 facuet 토큰을 받으세요.
Deposit ERC-20 Token (이더리움 -> GIWA)
이제 이더리움에서 GIWA로 위에서 받은 Faucet 토큰을 브릿징 해볼까요?
아래 코드를 실행하면 이더리움에 있던 여러분의 Faucet 토큰이 실제로는 L1StandardBridge 컨트랙트로 전송되고, 전송한 수량만큼 여러분의 GIWA 지갑으로 전송되는 것을 확인할 수 있어요. 이러한 방식을 Lock-and-Mint 라고 해요.
구성
L1StandardBridge 컨트랙트가 ERC-20 토큰을 전송할 수 있도록 권한 부여
레이어 1에서 deposit 트랜잭션 전송
이에 대응되는 레이어 2 deposit 트랜잭션이 sequencer에 의해 생성
Deposit 완료
Withdraw ERC-20 Token (GIWA -> 이더리움)
이더리움에서 GIWA로 ERC-20 토큰이 잘 전송되었나요? 이제 반대로 GIWA에서 이더리움으로 ERC-20 토큰을 브릿징해요.
아래 코드를 실행하면 GIWA에 있던 여러분의 ERC-20 토큰이 소각(burn)되고, 전송한 수량만큼 여러분의 이더리움 지갑으로 전송되는 것을 확인할 수 있어요. 이때는 Deposit에 의해 L1StandardBridge 컨트랙트에 Lock되어있던 ERC-20 토큰이 다시 Unlock되는 형태에요. 이러한 방식을 Burn-and-Unlock 이라고 합니다.
더 알아보기
ETH, ERC-20 토큰과 같은 자산 외에도 데이터를 브릿징하고 싶나요? OP 스택 문서를 읽고 여러분이 직접 구현해보세요.
Last updated