비트코인/비트코인 구조

[비트코인 구조] 0x4c 이상 크기의 데이터를 스크립트에 저장하는 방법

라이튼 2022. 11. 15. 00:24

미리 알아야 할 내용들


 

[비트코인 구조] 트랜잭션 기본 규칙

미리 알아야 할 내용들 [비트코인 구조] 비트코인 트랜잭션(Transaction) 기초 미리 알면 좋은 내용들 [블록체인 용어] 블록체인(Block Chain) 블록체인이란 발생한 거래들을 블록에 담고 블록들을 연결

kwjdnjs.tistory.com


0x4c 이상 크기의 데이터를 스크립트에 저장하는 방법

 

 지금까지 알아본 바에 따르면 OP_0를 제외한 모든 opcode는 0x4c 이상의 16진수부터 시작합니다. 즉, 스크립트를 불러오는 과정에서 0x4c보다 작은 값이 오는 경우 이후에 이어지는 값들을 불러오고, 0x4c 이상의 값이 오는 경우 opcode로 받아들여 스크립트를 실행하게 됩니다. 문제는 이 방식을 이용할 경우 0x4c 이상의 데이터 값을 불러올 수 없다는 점에 있습니다. 예를 들어 P2SH 스크립트의 경우 해제 스크립트 내부에 리딤 스크립트 전체를 포함하게 됩니다. 만약 이 리딤 스크립트가 매우 큰 경우 지금 방식으로는 리딤 스크립트를 스크립트 내부에 포함시키는 것이 불가능합니다. 비트코인은 이 문제점을 해결하기 위해 다음과 같은 opcode를 미리 정해놓았습니다.

 

단어 16진수 설명
OP_PUSHDATA1 0x4c 이어지는 1바이트의 값 만큼 데이터 읽기
OP_PUSHDATA2 0x4d 이어지는 2바이트의 값(리틀 엔디안) 만큼 데이터 읽기
OP_PUSHDATA4 0x4e 이어지는 4바이트의 값(리틀 엔디안) 만큼 데이터 읽기

 

 예를들어 2000 바이트 길이의 데이터(16진수 4000자리)를 스크립트에 저장한다고 한다면 다음과 같이 작성하면 됩니다.

 

4dd007[2000 바이트 데이터]

 

 4d는 OP_PUSHDATA2 입니다. 따라서 이어지는 2바이트의 값만큼 데이터를 읽습니다. 읽어 들인 값은 d007, 빅 엔디안으로 07d0입니다. 0x07d0은 10진수로 2000이므로 이어지는 2000 바이트의 데이터를 읽어 들입니다.

 

 물론 위의 내용은 실제로 적용 가능한 내용이 아닙니다. 비트코인은 최대 520바이트 크기(0x0208)의 데이터까지 만을 지원하고 있습니다. 따라서 이 이상의 값을 다루는 OP_PUSHDATA4의 경우 실제로는 사용되지 않습니다.