출처: 류자오리안
목요일, BTC는 86,000~87,000 범위 내에서 약간 변동했습니다. 2025년 3월이 거의 끝나가고 있습니다. 3월이 끝났고 1분기도 곧 끝나갑니다. Today’s Teaching Chain에서 말했듯이, 이 1분기는 2018년 이후 최악의 분기가 될 수도 있습니다.
시간은 물과 같고 세월은 노래와 같다. BTC는 시간이 연주하는 음악이다. 하지만 초창기, 특히 2013년 이전에는 운동에 불협화음이 몇 가지 있었습니다. 이러한 불일치한 음표는 반복된 코인 기반 거래(코인 주조 거래)입니다.
코인베이스 거래(코인 주조 거래) 또는 코인베이스 거래라고도 불리는 거래는 새로 생성된 각 BTC 블록의 첫 번째 거래입니다. 블록을 채굴하는 채굴자는 일반적으로 이 거래를 사용하여 블록 보상을 자신의 주소로 보냅니다.
우리가 아는 것처럼 일반적인 BTC 거래는 반복될 수 없습니다. 일반적인 거래는 기존 거래의 사용되지 않은 출력, 즉 UTXO를 사용해야 하며, 이를 "코인"에 비유합니다. 이들 코인은 다르므로, 이들 코인을 사용하는 거래도 달라야 합니다. 한 코인이 두 번의 거래에 사용될 경우, 이는 소위 "이중 사용"이 되며, BTC에서는 이를 엄격히 금지하고 있습니다.
하지만 예외가 있었습니다. 이것이 코인베이스 거래입니다. 코인베이스 거래는 채굴 거래이므로 UTXO 코인을 사용하는 대신 채굴자에게 보상으로 새로운 BTC를 직접 생성할 수 있습니다.
채굴자가 연속으로 여러 블록을 채굴하고 코인베이스 거래 데이터를 구성할 때 수신 주소 및 기타 추가 정보 등 정확히 동일한 정보를 사용하면 정확히 동일한 두 거래를 구성할 수 있습니다. 이는 블록체인에서 서로 다른 블록에 위치하지만 동일한 거래 데이터와 해시 값을 갖는 두 개의 코인 기반 거래로 반영됩니다.
이는 반복된 코인베이스 거래입니다.
이 비트코인 버그는 진짜입니다. 두 가지 실제 사례를 들어보겠습니다. 모든 BTC 블록체인 브라우저를 열어서 다음을 확인할 수 있습니다.
블록 높이 91812와 블록 높이 91842에는 정확히 동일한 해시 값을 가진 두 개의 코인베이스 거래가 있습니다.
블록 높이 91722와 블록 높이 91880에는 정확히 동일한 해시 값을 가진 두 개의 코인베이스 거래가 있습니다.
좋은 소식은 아무도 그런 중복된 코인베이스 거래를 사용해 그것을 지출하고 그 이후에 동일한 일반 거래를 구성함으로써 전체 UTXO 공간을 오염시킨 적이 없다는 것입니다. 2012년 3월 15일 소프트 포크를 통해 BIP-30이 구현된 이후 이러한 유형의 중복 거래는 더 이상 사용할 수 없게 되었습니다.
또한 2013년 3월에는 BIP-34 소프트 포크가 활성화되어 코인베이스 거래 구성에 블록 높이 정보를 '버전 번호'로 추가하여 코인베이스 거래의 해시 값이 반복되는 것이 불가능해졌습니다.
구체적으로, 기술적 관점에서 보면 블록 높이는 코인베이스 거래의 scriptSig 시작 부분에 추가됩니다. 첫 번째 바이트는 블록 높이 값의 바이트 수입니다. 현재는 0x03이며, 이는 이후 3바이트가 코인베이스 거래의 블록 높이를 나타낸다는 것을 의미합니다. 코인베이스 거래의 scriptSig는 코인베이스 스크립트라고도 합니다. 채굴자들이 자유롭게 커스터마이징할 수 있는 분야입니다. 초기에는 임의의 데이터를 쓰는 것이 허용되었습니다. 예를 들어, 사토시 나카모토는 이 분야에서 타임즈라는 제목을 썼습니다.
좀 더 직관적인 비교. 먼저 중복된 코인베이스 거래 문제가 발생한 블록 #91812의 코인베이스 거래의 scriptSig를 살펴보겠습니다: 0456720e1b00 (OP_PUSHBYTES_4 56720e1b OP_0).
이 글을 쓰고 있는 현재, Jiaolian이 방금 생성한 블록 #889678의 coinbase 거래 scriptSig는 다음과 같습니다: 034e930d044260e5672f466f756e6472792055534120506f6f6c202364726f70676f6c642f23648154608b1500000000000 (OP_PUSHBYTES_3 4e930d OP_PUSHBYTES_4 4260e567 OP_PUSHBYTES_47).
0x03으로 시작하고, 그 뒤의 세 바이트는 43930d인데, 이는 블록 높이가 16진수로 0x0d934e이고, 10진수로 889678임을 의미합니다.
나쁜 소식은 2013년 수정 이전에 생성된 일부 코인베이스 거래가 0x03으로 시작했다는 것입니다! 이를 악용해 미래의 채굴자가 의도적으로 중복된 코인베이스 거래를 생성할 수 있게 됩니다.
구체적인 예를 하나 들어보겠습니다. 블록 #164384의 코인베이스 스크립트는 0x03: 03d6441e014b0136 (OP_PUSHBYTES_3 d6441e OP_PUSHBYTES_1 4b OP_PUSHBYTES_1 36)으로 시작합니다.
광부가 이 대본을 썼을 때 어떤 의도가 있었는지는 알 수 없습니다. 하지만 우리가 확실히 아는 것은 그가 이 취약점을 악용하여 앞으로 완전히 동일한 코인베이스 거래를 구성할 기회가 있다는 것입니다.
정확한 시간은 언제인가요? 간단한 계산을 해야 합니다.
BIP-34의 정의에 따르면 0x03 다음의 3바이트는 블록 높이를 나타냅니다. 위의 예에서 이는 d6441e이고, 16진수로는 0x1e44d6이고, 10진수로는 1983702입니다.
블록 #1983702는 언제 생산되나요? BTC는 약 10분마다 블록을 생성하므로 현재 블록 #889678에서 미래의 블록 #1983702까지 생성되는 데 걸리는 시간은 (1983072 - 889678)/6/24/365 = 20.8년, 즉 약 2046년이라고 쉽게 추정할 수 있습니다.
나쁜 소식은 그런 블록이 아직도 많이 있다는 것이다. 전체 표는 다음과 같습니다.
블록 높이, 코인베이스 높이, 동일
164384,1983702,참
169895,3708179,참
170307,3709183,참
171896,3712990,참
172069,3713413,참
172357,3714082,참
172428,3714265,참
174151,5208854,참
176684,490897,참
183669,3761471,참
196988,4275806,참
201577,5327833,참
206039,7299941,참
206354,7299941,참
209920,209921,참

위의 막대 그래프에서 볼 수 있듯이, 위험이 가장 큰 시기는 2078년경입니다.
위의 막대 그래프에서 볼 수 있듯이, 위험이 가장 큰 시기는 2078년경입니다.
좋은 소식은 현재 거대하고 미래에는 훨씬 더 강력해질 네트워크 컴퓨팅 파워를 고려하면 당시 채굴자들이 이런 아이디어를 가지고 있었다 하더라도 그 높이에서 블록의 패키징 권한(생성 권한, 채굴 권한)을 차지하기 어려웠을 것이라는 점입니다.
게다가 채굴권을 얻기 위해 이렇게 많은 노력을 한 다음, 다시는 사용될 수 없는 거래를 구성하고 이전 연도의 데이터를 모방하여 헛된 손실을 입는다면 광부들은 얼마나 지루할까요?
따라서 코인베이스 중복거래 버그가 100% 완벽하게 해결됐다고 할 수는 없지만, 큰 파장을 일으킬 가능성은 낮다는 결론을 내릴 수 있습니다.
모든 댓글