OP Stack 상호운용성(interop)은 Lagoon 하드포크와 함께 활성화됩니다.
interop devnet에서는 메시지가 자동으로 릴레이됩니다.
개요
올바른 트랜잭션을 전송하여 트랜잭션을 직접 릴레이하는 방법을 알아봅니다.이 튜토리얼 소개
이 튜토리얼 소개
필요한 사전 기술 지식
- 블록체인 개념에 대한 이해
- Foundry, 특히
cast에 대한 이해
- autorelay가 작동하지 않을 때
cast를 사용하여 트랜잭션을 릴레이하는 방법 - JavaScript를 사용하여 트랜잭션을 릴레이하는 방법
- Unix 계열 운영 체제(Linux, macOS 또는 Windows용 WSL)
- Node.js 버전 16 이상
- 버전 관리를 위한 Git
- 구성되어 실행 중인 Supersim 환경
- 설치된 Foundry 도구(forge, cast, anvil)
빌드할 내용
- JavaScript 라이브러리를 사용하여 메시지를 릴레이하는 프로그램
cast를 사용하여 메시지를 릴레이하는 셸 스크립트
설정
다음 단계는cast를 사용하든 JavaScript API를 사용하든 관계없이 튜토리얼을 실행하는 데 필요합니다.
1
Supersim 실행하기
이 실습은 Supersim에서 수행해야 합니다.
devnet에서는 autorelay를 비활성화할 수 없으므로 devnet을 사용할 수 없습니다.
- Supersim 설치하기를 따릅니다.
--interop.relay없이 Supersim을 실행합니다.
2
메시지 릴레이를 위한 상태 생성하기
이 단계의 결과는 autorelay를 켜지 않은 상태에서 메시지 전달 튜토리얼을 실행했을 때의 결과와 유사합니다.다음 스크립트를 실행합니다.이 스크립트는 chain B에
Greeter.sol을, chain A에 GreetingSender.sol을 설치합니다.
이 스마트 컨트랙트를 사용하면 chain A에서 chain B로 릴레이되어야 하는 메시지를 보낼 수 있습니다.그런 다음 스크립트는 chain A에서 chain B로 메시지를 수동으로 릴레이하기 위한 ./manual-relay/sendAndRelay.sh를 생성합니다.
해당 스크립트는 아래에서 설명합니다.마지막으로, 이 스크립트는 계속 진행하기 전에 메인 셸에서 실행해야 하는 몇 가지 파라미터 설정 줄을 출력합니다.
새로 시작한 Supersim에서는 다음과 같아야 합니다.API를 사용한 수동 릴레이
1
설정
2
수동 릴레이 앱
다음 내용으로
JavaScript 프로그램을 실행합니다.
manual-relay.mjs 파일을 생성합니다.설명
설명
3
디버깅
특정 트랜잭션에 의해 어떤 메시지가 릴레이되었는지 확인하려면 다음을 사용합니다.
Manual relay using cast
manual-relay/sendAndRelay.sh에서 cast를 사용하여 수동으로 릴레이하는 예제를 확인할 수 있습니다.
이 과정은 다소 복잡하므로, 설정 단계에서 사용자 환경에 맞춘 스크립트를 생성합니다.
스크립트를 실행합니다.
-
구성 파라미터
이것은 구성입니다. 사용자 주소의 nonce가 두 체인에서 동일하므로 greeter 주소도 동일합니다.
-
릴레이가 필요한 메시지 보내기
chain A에서 chain B로 메시지를 보냅니다.
$$는 프로세스 ID이므로, 스크립트를 다시 실행하면 정보가 바뀌는 것을 확인할 수 있습니다. -
릴레이할 로그 항목 찾기
L2ToL2CrossDomainMessenger는 다른 블록체인으로 메시지를 보낼 때마다SentMessage이벤트를 발생시킵니다. 로그에서 최신SendMessage이벤트만 추출합니다.log-entry예시 -
로그 항목을 가공하여 정보 얻기
로그 topic을 하나의 16진수 문자열로 통합합니다.로그 항목에서 추가 필드를 읽습니다.전체 로그 항목을 통합합니다.
- 실행 메시지(executing message)를 위한 액세스 리스트 생성하기
CrossL2Inbox에서) 액세스 리스트를 계산하는 알고리즘은 다소 복잡하지만, 이에 대해 걱정할 필요는 없습니다.
Supersim은 포트 8420에서 이를 계산해 주는 RPC 호출을 제공합니다.
위 코드는 autorelay가 작동하지 않는 다른 interop 클러스터를 사용하는 경우에도 올바른 액세스 리스트를 계산합니다.
이는 이 코드가 외부 상태와 관계없이 일관된 결과를 생성하는 순수 함수(pure function)를 구현하기 때문입니다.
반면 admin_getAccessListByMsgHash RPC 호출은 순수 함수가 아니며, 시스템 상태에 의존하므로 이러한 상황에서는 유연성이 떨어집니다.
-
수동 릴레이가 필요함을 확인하기
현재 인사말을 표시합니다. 메시지가 아직 릴레이되지 않았으므로 여전히 이전 인사말입니다.
-
실제로 메시지 릴레이하기
L2ToL2CrossDomainMessenger에서relayMessage를 호출하여 메시지를 릴레이합니다. -
릴레이 결과 확인하기
다시 현재 인사말을 표시합니다. 이제 새 인사말이 표시됩니다.
다음 단계
- 상호운용성에 관한 일반적인 질문에 대한 답변은 OP Stack interop 설명을 검토하십시오.
- 내부적으로 어떤 일이 일어나는지 이해하려면 메시지 전달 설명을 읽어 보십시오.
- OP Stack 생태계 내에서 여러 블록체인을 사용하는 혁신적인 앱을 작성해 보십시오.