용어집 / 개발자 참고 자료
OP_RETURN
- OP_RETURN이란 무엇입니까?
- OP_RETURN은 트랜잭션 출력을 증명 가능하게 사용 불가능한 상태로 만드는 오피코드이며, 이를 통해 유통 중인 코인의 집합을 비대하게 만들지 않으면서 소량의 임의 데이터를 블록체인에 기록할 수 있습니다.
스크립트가 0x6a로 시작하는 출력은 누구도 지출할 수 없으므로, 풀 노드는 항상 보관해야 하는 UTXO 집합에서 이 출력을 제외합니다. Bitcoin Core 0.9.0은 2014년 3월에 40바이트 한도를 두어 이런 출력을 표준으로 만들었고, 이 한도는 0.11.0에 페이로드 기준 80바이트로 늘어났습니다. 비트코인을 사서 보유하는 입장이라면 이런 출력을 직접 만들 일은 없지만, 다른 사람의 출력 비용은 수수료 시장을 통해 지불하게 됩니다.
작동 방식
OP_RETURN은 실행이 도달하는 순간 스크립트를 실패시킵니다. 그런 식으로 잠긴 출력은 어떤 것으로도 충족할 수 없으며, 아무도 키를 갖지 못하는 해시로 코인을 보내는 소각 주소와 달리 불가능성이 단지 개연적인 것이 아니라 소프트웨어에 보입니다. 이 가시성이 핵심입니다. 노드는 지출 가능한 모든 출력의 인덱스를 유지하며, 죽었다고 증명할 수 있는 출력은 그 인덱스에 들어갈 필요가 없습니다.
이런 출력을 만드는 지갑은 그 값을 0으로 설정하고 페이로드를 오피코드 뒤에, 보통 하나의 푸시로 넣습니다. 그 결과는 누군가에게 지불하는 정상 출력과 바이트만 담고 돈은 담지 않은 두 번째 출력으로 이루어진 트랜잭션입니다.
이 오피코드의 첫 버전은 재앙이었습니다. 2010년에는 입력 스크립트와 출력 스크립트가 이어 붙여 실행되었고, OP_RETURN은 성공을 보고하며 평가를 끝냈기 때문에 지출자가 이를 덧붙여 다른 사람의 코인을 가져갈 수 있었습니다. 그해의 수정은 실행의 두 부분을 분리하고 오피코드를 무조건적인 실패로 바꾸었습니다. 데이터 운반체로서의 현대적 용도는 4년 뒤에 나타났는데, 그때 개발자들은 이미 노드가 정리할 수 없는 가짜 공개 키에 데이터를 밀어 넣고 있었습니다.
그 뒤에 중계 한도가 뒤따랐으며, 그중 어느 것도 합의 규칙은 아니었습니다. Bitcoin Core는 버전 0.9.0에 표준 40바이트 운반체를 도입했고, 2015년 7월에 0.11.0에서 허용량을 80바이트로 두 배로 늘렸으며, 트랜잭션당 이런 출력 하나만 허용했습니다. 버전 30.0은 길고 격렬했던 공개 논쟁 끝에 기본 크기 상한과 출력 하나 규칙을 없앴는데, 그 한도는 손쉽게 우회되어 데이터를 더 나쁜 곳으로 밀어낸다는 것이 그 이유였습니다. Bitcoin Knots는 더 엄격한 기본값을 유지했으며, 노드 정책의 이 분열은 오늘날 비트코인의 살아 있는 이견 가운데 하나입니다.
비트코인을 살 때 이것이 중요한 이유
OP_RETURN 출력을 만들라는 요구를 받는 일은 없을 것이며, 어떤 웹사이트가 비트코인을 그런 출력으로 보내라고 한다면 그것은 사기입니다. 보낼 대상이 없기 때문입니다. 일부 거래소와 체인은 메모 필드를 사용하지만, 비트코인 출금에는 메모 필드가 결코 필요하지 않습니다.
이용자에게 실제로 영향을 주는 것은 수수료입니다. 온체인에 기록되는 데이터는 같은 한정된 공간을 두고 이용자의 출금과 경쟁하며, 그 효과는 측정 가능합니다. 2024년 4월 20일에 채굴된 840,000번 블록은 약 37.6 BTC를 수수료로 거두었는데, 이는 지금까지 어떤 블록보다 많은 양이었습니다. 새로운 토큰 프로토콜이 바로 그 높이에서 활성화되어 수천 명이 그 안에 기록하려고 경쟁했기 때문입니다. 그날 오후 우연히 거래소에서 출금한 사람은 그 대가로 통상 요율의 몇 배를 지불했습니다.
방어책은 분노가 아니라 시점입니다. 수수료는 한 주 안에서도 10배가량 출렁이므로, 코인을 통합하거나 거래소에서 빼내거나 급하지 않은 이체를 한산한 주말에 하면 같은 이체가 데이터 몰림 때 드는 비용의 일부만 치르게 됩니다. 이용자를 대신해 추측하지 않고 수수료율을 직접 설정하게 해 주는 지갑을 선호할 만한 이유가 바로 여기에 있습니다. 이 정책 문제에 강한 생각이 있다면 Bitcoin Core 대신 Bitcoin Knots를 실행하는 것이 그것을 표명하는 직접적인 방법입니다. 중계 정책은 노드 운영자 각자가 개별적으로 선택하기 때문입니다.
예시: 80바이트의 비용
최대 크기의 레거시 운반체 출력은 네트워크상에서 92바이트입니다. 0으로 설정된 값의 8바이트, 스크립트 길이를 위한 1바이트, 그리고 오피코드, 푸시 명령, 길이 바이트, 80바이트의 페이로드로 이루어진 스크립트 83바이트입니다. 이 중 어느 것도 위트니스 데이터가 아니므로 각 바이트는 4개의 가중치 단위를 차지하며, 368 가중치 단위, 즉 92 가상 바이트가 됩니다. 가상 바이트당 10사토시라면 트랜잭션의 나머지 부분을 세기 전에 920사토시입니다.
비교하자면 일반적인 네이티브 SegWit 출력은 31바이트, 즉 31 가상 바이트이므로, 데이터 출력은 누군가에게 지불하는 것보다 세 배의 비용이 듭니다. 데이터는 결코 무료였던 적이 없으며, 수수료 시장은 비트코인이 가진 유일한 배분 기제입니다.
OP_RETURN vs 널 데이터 트랜잭션
OP_RETURN은 오피코드이고, 널 데이터 트랜잭션은 이런 출력이 트랜잭션에 나타났을 때 Bitcoin Core가 트랜잭션 전체 패턴을 부르는 이름입니다. 소프트웨어는 디코딩된 JSON에서 출력 유형을 "nulldata"로 보고하며, 블록 탐색기가 보통 표시하는 문자열이 바로 이것입니다. 구분은 작지만 흔한 오독을 막아 줍니다. 널 데이터 트랜잭션은 돈을 옮기지 않는 트랜잭션이 아닙니다. 거의 항상 누군가에게도 지불하며, 데이터는 두 번째 출력에 실려 갑니다.
OP_RETURN vs 인스크립션
인스크립션은 OP_RETURN을 전혀 사용하지 않으며, 비트코인 데이터 저장에 관한 끝없는 혼란의 근원이 여기에 있습니다. 2023년 1월에 공개된 ordinals 방식은 실행되지 않는 Taproot 스크립트 분기 안에 내용을 숨기며, 그 분기는 바이트당 4개가 아니라 1개의 가중치 단위만 드는 위트니스에 존재합니다. 실질적인 결과는 규모입니다. OP_RETURN 페이로드는 중계 정책상 10년 동안 80바이트로 제한되었지만, 인스크립션 하나는 바이트당 4분의 1의 가중치 비용으로 블록 전체 크기에 가까워질 수 있습니다. 2024년 4월에 출시된 Runes는 반대 방향으로 가서 프로토콜 메시지를 의도적으로 OP_RETURN에 인코딩하며, 비트코인의 데이터에 관한 두 논쟁이 사실상 서로 다른 두 기제에 관한 논쟁인 이유가 여기에 있습니다.