숨겨진 메시지들 중 가장 유명한 것을 말해보라 하면 Genesis Block 속 메시지일 것이다.
많은 사람들이 Genesis Block에 적힌 메시지를 찾는 방법을 친절하게 다뤄주고 있다.
그러나 그것 말고도 블록체인 내부엔 발견되지 않은 수많은 메시지들이 숨어 있다는 사실을 알고 있는가?
한번 차근차근 파헤쳐나가보자. 필자처럼 코딩을 모르는 사람도 상관없다!!
1. Genesis Block 메시지
일단 Genesis Block의 메시지는 이 글을 보는 사람들이라면 대부분 알고 있을 것이다.
pruned(용량절약)하지 않은 풀노드를 운영하고 있다면 bitcoind로 직접, 그것도 매우 쉽게 찾아볼 수 있다.
cmd에다가 다음 명령어를 한줄한줄 넣고 엔터를 쳐가며 Genesis Block의 메시지를 찾아보자.
물론 컴퓨터에 비트코인 풀노드 프로그램이 설치되어 있어야 작동한다. (맨뒤 *기호는 포함시키지 않는다.)
bitcoin-cli getblockhash 0 *
bitcoin-cli getblock 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f 2 **
getblockhash 명령어 사용법 getblock 명령어 사용법
길게 출력된 값들 중 coinbase라는 항목이 보인다.
04ffff어쩌구 하고 쓰여진 이 숫자들은 16진법으로 쓰여진 텍스트, 짧게 Hex라고 한다.
이걸 hex to text변환기에 넣어서 아스키코드로 전환하면...
ÿÿEThe Times 03/Jan/2009 Chancellor on brink of second bailout for banks
이는 비트코인이 처음 생성된 날짜의 타임지 헤드라인이라고 한다. 일종의 이스터에그인 셈이다.
*명령어를 실행하면 blockhash(블록의 생성순서)가 0인 블록의 해시값(블록의 이름)이 나온다.
**명령어를 실행하면 해당 해시값을 가진 블록의 정보가 나온다.
2. Transaction 메시지
비트코인 전송(트랜잭션)에 사용되는 ScriptSig* 와 ScriptPubKey** 일부에는 메시지를 담을 수 있는 구간이 있다.
앞에서 다룬 Genesis Block의 경우도 사실 ScriptSig안에 메시지를 담은 케이스 중 하나이다.
Genesis Block 메시지를 찾았던 방법을 응용해서 다른 메시지들을 찾아내보자.
*ScriptSig: 블록에 암호화된 상태로 기록된 거래내역을 풀 때 쓰이는 복호화 코드가 ScriptSig.
**ScriptPubKey: 비트코인 전송내역을 암호화하여 블록에 기록할 때 쓰이는 암호화 코드를 ScriptPubKey라고 한다.
자세한 것은 https://learnmeabitcoin.com/를 참고하라.
2.1 ScriptSig안에 담긴 메시지 찾아내기
2.1.1 Coinbase Transaction
앞서 보았듯이 getblock 명령어로 해당 블록의 Coinbase 값을 알아낼 수 있다. 제네시스 블록에 숨겨진 메시지는 Coinbase 데이터의 일부였으니, 다른 블록들의 Coinbase 데이터에도 숨겨진 텍스트가 있는지 찾아보면 되겠다.
그러나 블록들 중 99%는 045e1081a처럼 의미없는 코인베이스 값을 가진다.
무엇보다도 24년 현재까지 생성된 블록의 갯수는 80만개이다.
80만개.
getblockhash와 getblock RPC를 일일이 80만번 타이핑하여 coinbase를 직접 확인하기는 불가능할 것이다.
그래서 코딩이라고는 전혀 모르는 필자의 경우엔 아주 간단한 배치파일을 제작하여 모종의 자동화를 꾀해보았다.
필자도 이 블로그 글을 쓰면서 처음 배워 만든 것이니 누구나 할 수 있다!
위 예시 링크에서 설명한 채굴용 배치파일과 크게 다르지 않다.
배치파일에 coinbase값 탐색을 시작하고 싶은 블록의 hash값을 넣으면,
해당 블록 이후 순서대로 5000개쯤 되는 블록의 coinbase값만 쏙 골라서 해시값과 coinbase값을 출력하도록 만든 결과다.
Genesis block부터 십만개쯤까지 탐색해보았을때 별다른 특이사항은 없었으나
139509번째 블록에서 처음으로 위 스크린샷과 비슷하게 긴 코인베이스 값이 출력된 것을 확인하였다.
해당 블록의 숨겨진 메시지는 다음과 같다.
Block 139509 hash: 00000000000002f06dbd8d46d9169ef3e831bc4ba43840b4afbf068b62716d93
"coinbase": "07456c6967697573047465737402b630"
Hex to ASCII: Eligiustest¶0
test라는 메시지로 봐서는 시험삼아 채굴해보고 메시지를 넣은듯하다.
Block 139525에서 한번 더 테스트가 이뤄졌고,
그 후 Block 139690에 기록된 메시지를 해독해보면 다음과 같았다.
Eligius/Benedictus Deus. Benedictum Nomen Sanctum eius.
딱봐도 라틴어다. 뜻은 '하느님께 찬미를 드립니다. 그의 거룩하신 이름을 찬송할지어다.' 라고.
이러한 방식으로 쭉 Coinbase에 숨겨진 메시지를 찾아나갈 수 있다!!!
와~~~~~~
2.1.2 Typical ScriptSig
트랜잭션이 수천건인 블록의 ScriptSig를 조회하는 일은 조금 어렵다.
그리고 무엇보다도 코인베이스가 아닌 ScriptSig엔 유의미한 텍스트가 기록되어 있지도 않다고 판단된다.
물론 필자는 비트코인, 코딩에 대해 일자무식이므로 사실과 다르다면 언제든지 수정하도록 하겠다.
2.2 ScriptPubKey안에 담긴 메시지 찾아내기
2.2.1 Standard ScriptPubKey
비트코인의 모든 정보는 블록에 기록되어 있다. ScriptPubKey라고 별반 다르진 않다.
앞서 코인베이스 메시지를 찾는 방법을 또 우려먹기 한것에 지나지 않으니, 그냥 대충 훑어만 보자.
1. getblock 명령어 변수인 verbosity=2로 설정해서 상세정보를 전부 출력(하고 .txt파일로 저장)
2. 원하는 트랜잭션의 scriptPubKey 값 추출후 나온 Hex값을 ASCII text로 해독하기
전부 찾아내보는 일은 조금 난해할 것이다. 대략 20만번째 이후 블록의 경우 블록당 트랜잭션이 수천개이기 때문이다.
(ScriptPubKey는 트랜잭션당 하나가 존재한다. 즉, 블록 한개당 ScriptPubKey가 수천개란 소리.
코인베이스는 그래도 블록당 단 한개인데 말이다.)
그래서 getblock명령어를 쓰면 수많은 트랜잭션 데이터와 cmd스크롤 제한때문에 정보를 효과적으로 찾을 수 없다.
필자같은 무식쟁이는 배치파일을 사용해 정보를 출력후 저장하여 따로 찾을수밖에 없다. 프로그래밍에 무지한 죄
트랜잭션이 이뤄지지 않은 초기 블록들의 경우는 그래도 찾아봄직하다. 2.1.1 Coinbase transaction에서 getblock으로 조회한 상세정보 중 coinbase값만 쏙 빼서 특이사항을 찾아낸것과 같이, "scriptPubKey" : { 아래 "desc": 옆에 적힌 문자열에 특이한 점이 있는지 쏙 빼내는 일을 자동화하여 조회하면 된다.
물론 스크린샷을 포함해서 99.99%의 ScriptPubKey정보는 무의미하지만 분명 해당 스크립트에 숨겨진 메시지들은 존재한다. 후술할 OP_RETURN이 개발되기 전까지는 이게 블록체인 낙서장으로 쓰였기 때문에...
2.2.2 OP_RETURN
기본적으로 앞에서 다룬내용들과 매우 유사하다. 다만 OP_RETURN을 따로 2.2.2항목으로 빼내어 만든 이유는, OP_RETURN이 만들어진 경위가 좀 독특하기 때문이다. OP_RETURN은 P2PKH와 같은 standard script로 사람들이 쓸데없는 정보를 너무 많이 주고받고 기록하며 블록체인의 저장공간을 낭비하는 일이 발생하자 따로 만들어진 스크립트다. 스탠다드 스크립트와 같이 똑같이 블록체인에 영구히 기록되지만, standard script보다 훨씬 짧아서 저장공간을 덜 먹는다. 한마디로 낙서장 스크립트.
3. 결론
비트코인 블록체인 안에 숨어있는 다양한 메시지들의 종류와 찾아내는 방법을 알아보았다.
이제 열심히 숨겨진 메시지들을 찾아보자!
와~~~
'취미 > 비트코인 풀노드 운영' 카테고리의 다른 글
블록체인에 기록된 가톨릭 고해성사문 (0) | 2024.05.29 |
---|---|
블록체인에 숨겨져있는 가톨릭 기도문 (0) | 2024.05.29 |
decodescript-bitcoind RPC별 사용법 정리 (0) | 2024.05.27 |
getrawtransaction-bitcoind RPC별 사용법 정리 (0) | 2024.05.26 |
초창기에 채굴된 비트코인들은 어디로 갔을까? 직접 확인해보자. (0) | 2024.05.26 |