OP Stack 배우기 — 14개 단계 중 4단계.
지금까지 OP Stack이 무엇이며 그 배경이 되는 원칙을 알아보았습니다. 이 페이지에서는
“EVM 동등성”이 실제로 무엇을 의미하는지, 즉 OP Stack 체인이 Ethereum과 다르게
동작하는 소수의 동작을 구체적으로 설명합니다. 다 읽은 후에는
OP Stack 구성 요소로 이어서 진행하십시오.
Bridge
Bridge - 입금 트랜잭션
입금(디파짓) 트랜잭션은 L1에는 존재하지 않으며, L1에서 L2 트랜잭션을 시작하는 방법입니다. 중요한 점은 bridge 애플리케이션이 이 방법을 통해 L1 ETH 또는 토큰을 L2 OP Stack 체인으로 가져올 수 있다는 것입니다. 입금 트랜잭션에 대한 자세한 내용은 여기를 참조하십시오.Bridge - 출금 트랜잭션과 결함 증명
출금 트랜잭션은 L2 rollup의 상태를 L1에 증명하는 방법입니다. 대개 사용자가 토큰이나 ETH를 L1으로 출금하는 경우가 이에 해당합니다. 결함 증명(fault proof)은 현재 출금 트랜잭션을 L1에 증명하는 메커니즘입니다. 결함 증명에 대한 자세한 내용은 여기를 참조하십시오.Opcode
주소 별칭(Address aliasing)
주소 별칭은 스마트 컨트랙트가 L1에서 L2로 보내는 트랜잭션의 동작에 영향을 미치는 중요한 보안 기능입니다.
크로스체인 트랜잭션을 다루는 경우 이 섹션을 주의 깊게 읽으십시오.
CrossChainMessenger 컨트랙트는 주소 별칭을 내부적으로 대신 처리합니다.CREATE opcode의 동작 때문에 L1과 L2에서 동일한 주소를 공유하지만 bytecode가 다른 컨트랙트를 생성할 수 있습니다.
이러한 컨트랙트는 주소가 같더라도 근본적으로 서로 다른 두 개의 스마트 컨트랙트이며, 같은 컨트랙트로 취급할 수 없습니다.
따라서 스마트 컨트랙트가 L1에서 L2로 보낸 트랜잭션의 발신자는 L1 스마트 컨트랙트의 주소가 될 수 없습니다. 그렇지 않으면 (두 컨트랙트가 같은 주소를 공유하므로) L1 스마트 컨트랙트가 L2 스마트 컨트랙트인 것처럼 행동할 수 있기 때문입니다.
이러한 사칭을 방지하기 위해, 스마트 컨트랙트가 depositTransaction을 호출하여 L1에서 L2로 트랜잭션을 보낼 때 OptimismPortal이 트랜잭션 발신자를 약간 수정합니다.
이 별칭은 호출자에게 코드가 있고, 그 코드가 유효한 EIP-7702 위임이 아닌 경우에 적용됩니다.
주소에 코드가 없거나, 주소에 있는 코드가 유효한 EIP-7702 위임인 경우에는 발신자가 수정되지 않습니다.
임시 컨트랙트(동일한 트랜잭션 내에서 생성되고 self-destruct되는 컨트랙트)는 트랜잭션 실행 시작이나 종료 시점에 코드가 없더라도 별칭이 적용된다는 점에 유의하십시오.
L2 트랜잭션은 실제 L1 컨트랙트 주소에서 보낸 것처럼 보이는 대신, L1 컨트랙트 주소의 “별칭” 버전에서 전송됩니다.
이 별칭 주소는 주소를 160비트 정수로 취급하여 오버플로를 허용하면서 상수 오프셋을 더한 다음, 결과를 20바이트 주소로 잘라 내어 생성됩니다.
이 주소 해싱 함수는 별칭 주소가 L2의 다른 어떤 주소와도 충돌하지 않도록 보장합니다.
단순한 오프셋 방식이므로 별칭 주소에서 원래 L1 주소를 쉽게 복원할 수 있습니다.
OptimismPortal은 L1 스마트 컨트랙트가 보낸 L2 트랜잭션에만 이 변경을 적용합니다.
그 외의 모든 경우에는 Ethereum에서 사용하는 것과 동일한 규칙에 따라 트랜잭션 발신자 주소가 설정됩니다.