- 모든 온체인 호출을 먼저 시뮬레이션 환경에서 실행하므로, gas 비용이 발생하기 전에 온체인 호출의 효과를 검증할 수 있습니다.
- Foundry cheatcode를 제공하여 EVM 환경을 깊이 있게 계측하고 사용자 지정할 수 있습니다. 이러한 cheatcode 덕분에 OP Deployer가 Solidity 스크립트를 호출할 수 있습니다.
- 기존 Solidity 기반 도구와의 손쉬운 통합.
- 배포 실패 시 상세한 스택 트레이스.
- 실패할 수 있는 온체인 트랜잭션 전송을 방지하는 빠른 피드백 루프.
- 라이브 체인 포킹.
vm.broadcast를 사용하여 온체인으로 전송해야 할 트랜잭션을 알립니다.
Solidity 스크립트를 사용하는 이유
복잡한 온체인 상호작용에서는 Solidity 스크립트가 Go 코드보다 훨씬 사용하기 편리합니다. Solidity 스크립트는 다음을 가능하게 합니다.- 기존 Solidity 기반 도구 및 라이브러리와의 손쉬운 통합.
- 간단한 ABI 인코딩/디코딩.
- 컨트랙트 간 호출과 이를 구동하는 기반 RPC 호출 간의 명확한 관심사 분리.
엔진 구현
스크립팅 엔진은op-chain-ops/script 패키지에 구현되어 있습니다. Geth의 EVM 구현을 Forge cheatcode로
확장하고, Go 구조체를 EVM 메모리에 etch할 수 있는 몇 가지 도구를 정의합니다. 엔진 동작의 대부분은 Geth가
제공하는 hook에 의해 구동됩니다. 이를 더 깊이 이해하는 가장 좋은 방법은 코드를 읽는 것입니다.
엔진 사용
OP Deployer는 위에서 설명한 etching 도구를 사용하여 OP Deployer와 스크립팅 엔진 간에 통신합니다. 대부분의 Solidity 스크립트는 입력 컨트랙트, 출력 컨트랙트, 그리고 스크립트 자체를 정의합니다. 스크립트는 실행되면서 입력 컨트랙트의 필드에서 데이터를 읽고 출력 컨트랙트의 필드를 설정합니다. OP Deployer는 입력 및 출력 컨트랙트를 다음과 같이 Go 구조체로 정의합니다.evm: 구조체 태그를 사용하여 이러한 getter와 setter의 동작을 사용자 지정할 수 있습니다.
마지막으로 스크립트 자체가 다음과 같이 EVM 메모리에 etch되어 실행됩니다.