devops

Optimism Opstack의 Deposit 플로우 본문

Layer2

Optimism Opstack의 Deposit 플로우

vata500 2023. 7. 16. 15:23
반응형

Deposit을 L1의 거래 혹은 이벤트에 의해서 트리거되는 모든 L2거래를 의미한다고 한다.

Deposit Flow

대부분의 Layer2는 Layer1의 네이티브 코인을 가스비로 사용하기 때문에 이 브릿지 과정인 Deposit과 Withdraw 프로세스를 아는 것은 아주 중요하다. (Deposit에는 ETH 혹은 토큰과 같은 자산이 포함되는 것이 보통이지만, 포함되지 않을 수 도 있다)

Deposit, Withdraw 프로세스는 약간 Network stack이 작동하는 방식과 유사하다. 정보가 송신의 하위 계층에서 캡슐화되고 수신 측의 같은 하위 계층에서 수신하여 어플리케이션 계층으로 올라간다.

L1 프로세스

1) L1의 컨트랙트 혹은 EOA(개인 계정)은 sendMessage 함수를 이용하여 L1CrossDomainMessenger에 Desposit 트랜잭션을 전송한다.

이 sendMessage 함수에는 여러 파라미터가 있다.

  • _target : 타겟으로 정할 L2 주소
  • _message : 타겟 계정의 ABI에 따라서 포맷팅된 L2 트랜잭션의 calldata
  • _minGasLimit : L2 트랜잭션에 허용된 최소 가스 리밋. 이 최소값은 L2에 제공되는 실제 가스 리밋보다 높을 수 있지만 낮을 수 없음

2) L1CrossDomainMessenger는 컨트랙트의 _sendMessage 함수를 호출한다.

이 _sendMessage 함수의 파라미터는 다음과 같다.

  • _to : messenger의 목적지가 될 주소를 의미하며 이 값은 0x4200000000000000000000000000000000000007로 설정되어 있음
  • _gasLimit : baseGas 함수에 의해서 계산되는 가스리밋
  • _value : 메시지와 함께 전송될 ETH 수량으로 transacion value값에서 차감됨
  • _data : L2 위에 호출되는 콜데이터로 이것은 메시지 릴레이를 위해 필요하다. 이 값은 ABI 인코딩으로 relayMessage를 호출한다.

3) _sendMessage는 포탈의 depositTransaction 함수를 호출한다.

다른 컨트랙트가 직접 depositTransaction을 직접 호출할 수 있지만, 옵티미즘이 나름 정해진 안전장치를 우회하는 것이기 때문에 추천하진 않는다.

4) depositTransaction 은 몇가지 검사를 거친다음 TransactionDeposited 이벤트를 보낸다.

 L2 프로세스

1) op-node는 Layer 1에서 발생한 TransactionDeposited을 체크한다. 만약 이벤트가 존재하면 파싱한다.

2) op-node는 TransactionDeposited 이벤트를 deposit transaction으로 변환한다.

3) 대부분의 user deposit 트랜잭션은 L2CrossDomainMessenger의 relayMessage 함수를 호출한다.

4) 이 relayMessage 함수는 검사를 거친 후, 정상인 경우엔 relayed calldata와 함께 실제 타겟 컨트랙트를 호출한다.


 

반응형
Comments