텍스트/OP 스택, 번역/골든 금융 xiaozou
2023년 2월 23일, 코인베이스는 OP 스택을 기반으로 한 기본 테스트 네트워크 출시를 발표했습니다. 동시에 Optimism Collective (Optimism을 관리하는 DAO )는 Optimism 슈퍼 체인으로 업그레이드될 것이라고 발표했습니다.
그러나 기본 테스트 네트워크와 Optimism 슈퍼 체인은 모두 OP 스택을 기반으로 합니다. 그렇다면 OP Stack과 Ethereum 메인넷의 차이점은 무엇입니까?
현재 OP Stack 버전은 Bedrock이며, OP Stack 공식 웹사이트 문서에는 Bedrock과 Ethereum 메인넷 간의 차이점이 자세히 설명되어 있습니다. Golden Finance xiaozou는 이 문서를 다음과 같이 번역했습니다.
Optimism과 Ethereum의 동작 사이에는 다양한 사소한 차이점이 있다는 점은 주목할 가치가 있습니다. Optimism 또는 OP Stack 코드 기반에서 애플리케이션을 구축할 때 이러한 차이점을 알고 있어야 합니다.
Opcode 차이점
`tx.origin == msg.sender`
Ethereum L1에서 tx.origin은 스마트 계약이 외부 계정(EOA)에서 직접 호출되는 경우에만 msg.sender와 동일합니다. 그러나 Optimism에서는 tx.origin이 Optimism의 원점이며 EOA일 수도 있습니다. 그러나 L1의 메시지의 경우 tx.origin == msg.origin인 경우 L1의 스마트 계약의 메시지가 L2에 나타날 수 있습니다. L1 스마트 계약은 L2 상태를 직접 조작할 수 없기 때문에 이는 눈에 띄는 차이를 만들지 않을 것입니다. 그러나 우리가 고려하지 않은 극단적인 경우가 있을 수 있습니다.
L1 정보 얻기
최신 L1 블록에 대한 동등한 정보가 필요한 경우 L1Block 계약에서 얻을 수 있습니다. 배포 전 계약의 주소는 0×4200000000000000000000000000000000000000015입니다. getter 함수를 사용하여 다음 매개변수를 얻을 수 있습니다.
number: L2에 알려진 최신 L1 블록 번호입니다.
타임스탬프: 최신 L1 블록의 타임스탬프입니다.
basefee: 최신 L1 블록의 기본 수수료입니다.
해시: 최신 L1 블록의 해시 값입니다.
SequenceNumber: 에포크의 L2 블록 수입니다(새로운 L1 블록이 있으면 그에 따라 에포크가 변경됩니다).
주소 앨리어싱
CREATE opcode의 동작을 통해 사용자는 동일한 주소를 공유하지만 바이트코드가 다른 L1 및 L2에 계약을 생성할 수 있습니다. 한 계약은 신뢰할 수 있지만 다른 계약은 그렇지 않을 수 있으므로 이는 신뢰 가정을 위반할 수 있습니다(아래 참조). 이 문제를 방지하기 위해 ORIGIN 및 CALLER opcode(tx.origin 및 msg.sender)의 동작은 L1과 L2에서 약간 다릅니다.
tx.origin 값은 다음과 같이 결정됩니다.
최상위(첫 번째 계약 호출) msg.sender 값은 항상 tx.origin과 같습니다. 따라서 위에서 정의한 규칙에 따라 tx.origin 값이 영향을 받으면 msg.sender의 최상위 값도 영향을 받게 됩니다.
일반적으로 tx.origin을 인증에 사용하면 안 됩니다. 그러나 주소 별칭은 msg.sender에도 영향을 미치므로 이는 주소 별칭과 다른 문제입니다.
주소 별칭이 문제가 되는 이유는 무엇입니까?
두 개의 동일한 소스 주소(L1 계약 및 L2 계약)의 문제점은 주소를 기반으로 신뢰를 확장한다는 것입니다. 계약 중 하나만 신뢰하고 다른 계약은 신뢰하지 않을 수도 있습니다.
(1) Helena Hacker는 Uniswap을 포크하여 Hackswap이라는 자신의 거래소(L2에)를 만들었습니다.
참고: 실제로 Uniswap에는 여러 계약이 있으므로 이 설명은 단순화된 것입니다.
(2) Helena Hacker는 수익성 있는 재정 거래 기회를 제공하는 것으로 보이는 Hackswap에 유동성을 제공합니다. 예를 들어 1 DAI에 1.1 USDT를 구매할 수 있습니다. 두 동전 모두 1달러의 가치가 있습니다.
(3) Nimrod Naive는 어떤 것이 사실이라고 믿기에는 너무 좋아 보인다면 아마도 사실일 것임을 알고 있습니다. 그러나 그는 Hackswap 계약의 바이트코드를 확인하여 Uniswap과 정확히 동일한 것을 확인했습니다. 그는 이것을 계약이 Uniswap과 똑같이 작동하도록 신뢰할 수 있다는 의미로 받아들였습니다.
(4) Nimrod는 Hackswap 계약에 대한 1000 DAI 거래를 승인했습니다. Nimrod는 Hackswap에서 스왑 기능을 호출하고 싶었고 거의 1100 USDT를 받았습니다.
(5) Nimrod의 스왑 트랜잭션이 블록체인으로 전송되기 전에 Helena Hacker는 동일한 Hackswap 주소를 사용하여 L1 계약에서 트랜잭션을 보냈습니다. 이 거래는 1000 DAI를 Nimrod의 주소에서 Helena Hacker의 주소로 이동합니다. 이 거래가 L2의 Hackswap과 동일한 주소에서 발생하는 경우 Nimrod가 이전 단계에서 Hackswap의 토큰 스왑을 승인했기 때문에 해당 1000 DAI를 전송할 수 있습니다.
Nimrod의 순진함에도 불구하고 Optimism이 트랜잭션의 tx.origin(초기 msg.sender이기도 함)을 수정했기 때문에 그는 보호를 받았습니다. 이 거래는 승인되지 않은 다른 주소에서 이루어졌습니다.
참고: 서로 다른 체인에서 동일한 주소로 두 개의 서로 다른 계약을 만드는 것은 쉽습니다. 그러나 동일한 금액으로 서로 다른 두 개의 계약을 생성하는 것은 거의 불가능하므로 Helena Hacker는 이를 수행할 수 없습니다.
차단하다
L1 Ethereum과 Optimism Bedrock 사이에는 블록이 생성되는 방식에 몇 가지 차이점이 있습니다.
(1) 이상적인 상태입니다. 청크가 누락된 경우 24초, 36초 등과 같은 정수 배수일 수 있습니다.
참고: L1 Ethereum 매개변수 값은 ethereum.org에서 가져옵니다. Optimism Bedrock 값은 Optimism 매개변수에서 가져옵니다.
네트워크 사양
JSON-RPC 차이점
OP Stack 코드베이스는 Ethereum과 동일한 JSON-RPC API를 사용합니다. 몇 가지 추가 OP 스택 관련 메서드를 도입했습니다.
Pre-EIP-155 지원 여부
EIP-155 이전 거래에는 체인 ID가 없습니다. 이는 하나의 Ethereum 블록체인의 거래가 다른 Ethereum 블록체인에서 재생될 수 있음을 의미합니다. 이는 보안 위험이므로 OP Stack은 기본적으로 Pre-EIP-155 트랜잭션을 지원하지 않습니다.
거래 비용
기본적으로 OP Stack 체인의 거래 비용에는 L2 실행 수수료와 L1 데이터 수수료가 포함됩니다.