원작자: Ash Li, Noah Ho
원본출처: 노션
Ordinals 프로토콜의 탄생과 함께 비트코인에 번호 부여 및 비문 기능을 제공함으로써 비트코인 생태계의 제품 범위를 확장하고 비트코인 생태계에 새로운 활력을 불어넣습니다. 이 기사에서는 각 비트코인에 번호를 매기고 추적하는 방법, 비문과 숫자 간의 관계를 포함하여 Ordinal 프로토콜의 세부 사항을 자세히 살펴보겠습니다. 하지만 이 주제를 자세히 알아보기 전에 먼저 비트코인에 대한 몇 가지 기본 배경을 이해해야 다음 내용을 더 잘 이해할 수 있습니다.
이 기사를 읽은 후에는 비트코인의 거래 메커니즘과 결제 모델을 마스터하고 Ordinals가 각 사토시에 대해 번호 매기기 및 추적을 구현하는 방법과 비문이 생성 및 거래되는 방법을 이해하게 됩니다. 또한 다양한 유형의 지갑 간의 차이점을 배우게 됩니다.
1. 비트코인 배경
비트코인은 현금과 유사한 거래 모델(현금 시스템)을 채택하고 있으며, 결제 방식은 전통적인 계좌 잔액 기반 모델과 다른 UTXO라는 모델을 기반으로 합니다. 예: 은행의 계좌 회계 모델 프로세스에서 A가 B에게 100위안을 이체하면 은행은 거래 프로세스를 구성하는 세 단계를 기록합니다. 첫 번째 단계는 A의 계좌에서 100위안을 차감하는 것이며, 이 단계의 레코드 ID는 tid1이다. 두 번째 단계는 B의 계좌에 100위안을 입금하는 것이며, 이 단계의 기록 ID는 tid2이다. 세 번째 단계는 tid1과 tid2를 연결하는 이체 기록을 기록하는 것으로, A 계좌는 100위안 감소하고 B 계좌는 100위안 증가했음을 나타냅니다. 이러한 방식으로 A와 B 간의 이체 관계가 기록되고 향후 쿼리 및 추적이 가능합니다. 이제 UTXO의 도입과 결제 모델을 통해 비트코인의 결제 방식을 설명하겠습니다.
UTXO
비트코인 블록체인에서 모든 잔액은 "미사용 거래 출력"(UTXO)이라는 목록에 저장됩니다. 각 UTXO에는 특정 수의 비트코인과 이러한 비트코인 소유자에 대한 정보가 포함되어 있으며 사용 가능 여부를 나타냅니다. 소유자의 이름이 적힌 현금 수표라고 생각하면 되며, 소유자가 서명만 하면 사용 권한이 다른 사람에게 양도될 수 있습니다. 특정 주소의 경우 모든 UTXO 금액의 합계가 해당 주소 지갑의 잔액입니다. 모든 UTXO를 반복함으로써 각 주소의 현재 잔액을 얻을 수 있습니다. 현재 유통되고 있는 모든 비트코인을 얻으려면 모든 UTXO의 총량을 더하세요.
비트코인 거래 구조에서 각 거래에는 여러 입력과 출력이 포함되며, 각 입력은 기존 UTXO에 대한 참조이고 각 출력은 새로운 자금 수신 주소와 해당 금액을 지정합니다. 트랜잭션이 시작되면 입력 부분에서 참조하는 UTXO는 트랜잭션이 완료될 때까지 재사용을 방지하기 위해 일시적으로 잠깁니다. 거래가 채굴자에 의해 블록으로 성공적으로 패키징되고 네트워크에서 확인된 경우에만 관련 UTXO 상태가 변경됩니다. 구체적으로, 트랜잭션의 입력으로 사용된 UTXO는 UTXO 목록에서 제거되어 소비되었음을 나타내며, 트랜잭션의 출력은 새로운 UTXO를 생성하여 UTXO 목록에 추가됩니다. 이전 현금 수표를 사용한 후에는 무효화되고 새로운 현금 수표가 생성되며 그 소유권은 새 보유자에게 귀속된다는 것을 이해할 수 있습니다.
각 UTXO는 거래에서 한 번만 사용할 수 있다는 점을 강조할 가치가 있습니다. 입력으로 사용되면 UTXO 목록에서 영구적으로 제거됩니다. 동시에 새로 생성된 출력이 새 UTXO로 목록에 추가됩니다. UTXO 목록은 지속적으로 변경되며, 새로운 블록이 생성될 때마다 그에 따라 업데이트됩니다. 그리고 블록체인의 거래 내역을 분석하여 특정 시점의 UTXO 목록 상태를 재구성할 수 있습니다.
또한 거래의 총 입력 금액은 일반적으로 총 출력 금액을 약간 초과합니다. 거래 수수료 또는 네트워크 수수료라고 불리는 이 차액은 거래를 블록으로 패키징하는 채굴자에게 인센티브로 제공됩니다. 네트워크 수수료의 규모는 거래의 복잡성에 직접적으로 비례하므로 입력 및 출력이 더 많은 거래에는 일반적으로 더 높은 네트워크 수수료가 필요합니다.
이제 비트코인의 거래 구조를 보다 생생하게 이해하기 위해 구체적인 사례를 통해 심층적인 분석을 진행하겠습니다. 비트코인의 트랜잭션 구조는 다음과 같습니다. 여기서 두 변수 vin과 vout은 각각 비트코인 트랜잭션의 "입력"과 "출력"을 나타냅니다. 비트코인 거래는 기존 계정 잔액 모델처럼 계정 형태의 데이터 변경 사항을 기록하지 않고 입력과 출력으로 표시됩니다.
출처: https://github.com/bitcoin/bitcoin/blob/v22.0/src/primitives/transaction.h#L270
Blockchain.com 에서 무작위로 거래 기록을 선택하여 분석할 수 있으며, 아래 그림은 **해시 ID** **0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2**인 거래를 보여줍니다. 여기에는 하나의 입력과 두 개의 출력이 포함됩니다.
bitcoin-cli 명령 `getrawtransaction` 및 `decoderawtransaction`을 사용하면 위 트랜잭션의 기본 구조를 볼 수 있습니다.
비트코인 네트워크에서 거래 출력에는 주소(공개 키 해시)와 금액(비트코인)이라는 두 가지 중요한 정보가 포함됩니다. 트랜잭션의 출력이 다른 트랜잭션의 입력에 사용되지 않는 경우 트랜잭션 출력을 사용되지 않은 트랜잭션 출력(UTXO)이라고 합니다. UTXO의 공개키에 해당하는 개인키를 소유한 사람은 누구나 이 UTXO를 사용할(즉, 소비할) 권리가 있습니다.
위 코드의 “vin”에 있는 정보를 살펴보면 이 트랜잭션에 소비된 UTXO가 다른 트랜잭션에서 온 것임을 나타냅니다(해당 ID는 [7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18](https://www.blockchain.com/btc/tx/7957a)입니다. 35페 64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18 )) (트랜잭션은 여러 개의 출력을 가질 수 있으며 인덱스는 0부터 시작함), 과거 트랜잭션(예: 0.1)에서 이 UTXO의 양을 찾을 수 있으므로 사용자는 이 트랜잭션에 0.1 BTC, 값은 0.1을 소비했습니다. 트랜잭션에 명시적으로 작성할 필요는 없으며 UTXO 정보를 조회하여 얻습니다. 이 트랜잭션의 "vout"에는 두 개의 출력이 있습니다. 이 두 개의 출력은 다른 트랜잭션이 입력으로 사용할 때까지 새 잔고 및 보유자에 해당하는 두 개의 새로운 UTXO입니다.
결제 모델
비트코인 네트워크의 지불 모델을 더 잘 이해하기 위해 A가 B에게 n 비트코인을 지불하는 지불 프로세스를 소개하는 예를 사용합니다. 아래 그림은 사용자 A가 사용자 B에게 비트코인 3개를 보내는 과정을 보여줍니다.
1. 사용자 A의 경우 먼저 그가 소유한 모든 UTXO 세트, 즉 사용자 A가 제어할 수 있는 모든 비트코인을 결정해야 합니다.
2. A는 이 세트에서 하나 이상의 UTXO를 거래 입력으로 선택합니다. 이 입력 금액의 합은 m(2+0.8+0.5=3.3 BTC)이며, 이는 지불할 금액 n( 3 BTC);
3. 사용자 A는 거래에 대해 2개의 출력을 설정합니다. 하나의 출력은 B의 주소로 지급되며 금액은 n(3 BTC)이고 다른 출력은 A의 **변경 주소**로 지급되며 금액은 mn-fee입니다. (3.3-3-0.001=0.299 BTC). 사용자의 지갑은 일반적으로 여러 개의 주소로 구성되며, 일반적으로 각 주소는 한 번만 사용되며 변경 사항은 기본적으로 새 주소로 반환됩니다.
4. 채굴자가 거래를 패키징하고 확인을 위해 체인에 업로드한 후 B는 거래 정보를 받을 수 있습니다. 블록 크기에는 상한(약 1MB)이 있으므로 채굴자는 가장 높은 수수료 수익을 얻기 위해 거래율이 높은 거래(`fee_rate=fee/size`)에 우선순위를 둡니다. 실시간 마이닝 거래수수료 현황은 [mempool](https://mempool.space/)에서 확인하실 수 있습니다. 전송 과정에서 가장 빠른 확인을 원할 경우 높은 우선 순위를 선택하거나 적절한 거래 속도를 맞춤 설정할 수 있습니다.
2. 콩 번호 매기기 및 추적
비트코인의 총 개수는 2,100만 개이며, 각 비트코인에는 10^8 사토시(Satoshi, Sat)가 포함됩니다. 따라서 비트코인 네트워크에는 총 2,100만*10^8개의 사토시가 있습니다. Ordinals 프로토콜은 이러한 사토시를 구별하고 각 사토시에게 고유한 번호를 부여합니다. 이 섹션에서는 이 프로토콜이 각 사토시에게 고유한 번호를 부여하는 방법과 해당 사토시가 속한 계정을 추적하는 방법을 소개합니다. 또한, 사토시의 레어리티 분류도 소개됩니다.
사토시의 번호
Ordinals 프로토콜에 따르면, 사토시는 채굴된 순서에 따라 번호가 매겨집니다. 아래 그림은 0번째 블록에서 채굴된 0번째 사토시를 표현한 것입니다.
출처: https://ordinals.com/sat/0
사토시를 표현하는 방법에는 여러 가지가 있습니다.
- **정수 표기**: 예를 들어 2099994106992659는 채굴 순서에 따라 Satoshi에 할당된 일련 번호를 나타냅니다.
- **십진법**: 예를 들어 3891094.16797, 첫 번째 숫자는 사토시가 채굴되는 블록 높이를 나타내고 두 번째 숫자는 블록의 사토시 숫자를 나타냅니다.
- **도 기호**: 예를 들어 3°111094′214″16797‴, 첫 번째 숫자는 기간이며 0부터 시작하는 번호, 두 번째 숫자는 반감기의 블록 인덱스, 세 번째 숫자는 난이도 조정 해당 기간의 블록 지수, 마지막 숫자는 블록 내 토의 지수입니다.
- **퍼센트 기호**: 예를 들어 99.99971949060254%는 비트코인 공급량에서 이 사토시의 위치를 백분율로 표시합니다.
- **이름**: 예: Satoshi. a부터 z까지의 문자를 사용하여 시퀀스 번호를 인코딩하는 이름입니다.
새로 채굴된 비트코인의 번호를 매기는 방법을 설명하기 위해 예를 사용하겠습니다. 비트코인 블록체인의 블록 795952를 살펴보면 첫 번째 거래 **[Tx 3a1f...b177](https://ordinals.com/tx/3a1fdea5953faea184e0303774ea234533aa58979a4d9a4f1c0de0d9b2efb177)**가 채굴자 보상(코인베이스 거래)을 기록한 것을 확인할 수 있습니다. 이 거래에는 채굴자를 위한 패키징 보상으로 사용되는 새로 채굴된 비트코인과 거래 개시자가 채굴자에게 지불하는 처리 수수료가 포함됩니다. 아래 그림의 입력을 보면 UTXO ID가 0의 문자열과 블록 높이로 구성되어 있음을 알 수 있습니다. 출력 주소는 채굴자의 지갑 주소이며, 금액은 위의 보상과 처리 수수료를 합한 금액입니다.
출처: https://ordinals.com/tx/3a1fdea5953faea184e0303774ea234533aa58979a4d9a4f1c0de0d9b2efb177
채굴자에 대한 출력을 더 자세히 살펴보면 주소, 금액 및 포함된 사토시의 분포를 볼 수 있습니다. 앞서 언급했듯이 여기에는 채굴 보상과 수수료가 포함됩니다. 그 중 Green Sats 번호 정보 [1941220000000000~1941220625000000](https://ordinals.com/range/1941220000000000/1941220625000000)은 채굴 보상으로 생성된 새로운 사토시이며, 나머지 712개의 사토시 레코드는 해당 블록에 해당한다. 수수료.
출처: https://ordinals.com/output/3a1fdea5953faea184e0303774ea234533aa58979a4d9a4f1c0de0d9b2efb177:0
숫자 Sat 1941220000000000을 확인할 수 있습니다. 블록 번호는 795952, 십진수 표기법(십진수)은 795952.0으로, 이 사토시를 채굴하는 블록 높이가 795952, 이 블록에 포함된 사토시 개수는 0이며, 이후의 레어리티(rarity) 표시는 흔하지 않다는 뜻이다. 이에 대해서는 이후 섹션에서 자세히 설명하겠습니다.
출처: https://ordinals.com/sat/1941220000000000
콩의 순환
모든 BTC는 채굴 보상을 통해 생성되므로 모두 추적 가능합니다. 비트코인 계정은 UTXO 모델을 사용합니다. 사용자 A가 채굴을 통해 100~110번째 사토시를 획득했다고 가정합니다(10개의 사토시는 ID adc123으로 동일한 UTXO에 전체적으로 저장됩니다). 사용자 A가 사용자 B에게 5 사토시를 지불하려고 할 때 그는 ID abc123을 거래 입력으로 사용하기로 선택합니다. 이 중 5 사토시는 사용자 B에게 주어지고 5 사토시는 거스름돈으로 사용자 A에게 반환됩니다. 5개 사토시의 이 두 복사본은 전체이며 각각 ID가 abc456 및 abc789인 두 개의 UTXO에 저장됩니다. 위의 UTXO id와 사토시 수는 예시일 뿐이며, 실제 상황에서 전송되는 최소 사토시 수는 546개로 제한되며 UTXO id는 이 형식으로 표현되지 않습니다.
위 거래에서 사용자 A의 10개 사토시의 유통 경로는 다음과 같습니다.
1. 채굴을 하면 [100 *, 110]이라는 번호가 붙은 10개의 사토시가 생성됩니다. *100번째부터 109번째 사토시가 ID abc123으로 UTXO에 저장되어 있고 그 소유자는 사용자 A라는 뜻입니다.
2. A가 송금할 때 10개의 사토시는 2개의 부분으로 나누어 각각 5개의 사토시를 가집니다. 여기서는 "선입선출" 원칙이 사용됩니다. 즉, 사토시의 번호 순서는 거래 출력의 색인에 따라 결정됩니다. 출력 순서가 사용자 A가 먼저이고 그 다음이 사용자 B라고 가정하면 사용자 A의 나머지 5개 사토시의 시퀀스 번호는 [100, 105)이며 이는 ID abc456으로 UTXO에 저장되고 사용자 B의 시퀀스 번호는 5입니다. satoshis는 [ 105, 110)이며 ID가 abc789인 UTXO에 저장됩니다.
레어 사토시
Ordinals 프로토콜의 파생물로서, 사토시의 희귀성은 채굴되는 순서에 따라 정의될 수 있습니다. 이로 인해 희귀도가 다른 특별한 사토시가 탄생하게 됩니다. 다양한 사토시의 희귀도 수준은 다음과 같습니다.
- `공통`: 블록의 첫 번째 사토시를 제외한 모든 사토시(총 공급량은 2100조)
- 'Uncommon' 프리미엄 레벨: 각 블록의 첫 번째 사토시(총 공급량은 6929999)
- '희귀' 희귀도: 각 난이도 조정 기간의 첫 번째 사토시(총 공급량 3437)
- `에픽`: 각 반감기 이후 첫 번째 사토시(총 공급량은 32개)
- `전설`: 매 사이클마다 첫 번째 사토시(총 공급량은 5개)
- '신화': 제네시스 블록의 첫 번째 사토시(총 공급량은 1)
희귀한 사토시라는 개념은 비트코인 생태계에 더 많은 관심과 가치를 더할 수 있습니다. 다양한 희귀도를 지닌 사토시는 시장에서 다양한 가치를 갖고 있어 수집가와 투자자의 관심을 끌 수 있습니다.
3. 기재방법
서수는 비트코인이 아닌 다른 체인의 NFT와 크게 다릅니다. 주요 차이점은 Ordinals 메타데이터가 특정 위치에 저장되지 않는다는 것입니다. 대신 이 메타데이터는 거래의 증인 데이터(증인 데이터, 증인 필드)에 내장되어 있으며, 이 데이터가 비문처럼 비트코인에 "새겨져" 있기 때문에 이를 "비문"이라고 부르는 것입니다. 거래의 특정 부분에서, 데이터는 특정 Satoshi에 첨부됩니다. 이 비문 프로세스는 SegWit(Segregated Witness) 및 P2TR(Pay-to-Taproot)을 통해 구현됩니다. 여기에는 커밋과 공개의 두 단계가 포함됩니다. 모든 형태의 콘텐츠(예: 텍스트, 이미지 또는 비디오)가 지정된 문서에 새겨질 수 있습니다. 사토시. 아래에서는 좀 더 직접적인 또 다른 저장 방식인 OP_RETURN을 소개하고 이것이 각인의 수단으로 사용되지 않는 이유를 설명하겠습니다. 동시에 Segregated Witness와 Pay-to-Taproot가 무엇인지, Inscription에서 어떤 역할을 하는지 소개하겠습니다. 마지막으로 표기 방법을 소개하겠습니다.
OP_RETURE
비트코인 코어 클라이언트 버전 0.9에서는 RETURN 연산자의 채택을 통해 마침내 타협이 이루어졌습니다. **RETURN을 사용하면 개발자가 거래 출력에 80바이트의 미결제 데이터를 추가할 수 있습니다**. 의사 결제와 달리 RETURN은 명확하고 검증 가능하며 소모 불가능한 출력을 생성하며 이러한 데이터는 UTXO 세트에 저장될 필요가 없습니다. **RETURN 출력은 블록체인에 기록되며 디스크 공간을 소비하고 블록체인 크기를 증가시키나 UTXO 세트에 저장되지 않으므로 UTXO 메모리 풀을 늘리는 것은 물론 확장하지 않습니다. 비싼 메모리 비용. **
OP_RETURN은 비트코인 블록체인에 정보를 저장하는 매우 간단한 수단이지만 잠재적인 정보 입력 방법이기도 합니다. 그러나 OP_RETURN의 한계로 인해 메타데이터 저장을 처리할 때 몇 가지 문제에 직면하게 됩니다. 우선, OP_RETURN은 80바이트의 데이터만 저장할 수 있는데, 더 많은 양의 데이터를 저장해야 하는 상황에서는 이 제한이 확실히 만족스럽지 않습니다. 둘째, OP_RETURN 데이터는 트랜잭션 출력 부분에 저장되는데, 이 데이터는 UTXO 세트에 저장되지 않지만 블록체인의 저장 공간을 차지하므로 블록체인의 크기가 증가하게 된다. 마지막으로 OP_RETURN을 사용하면 이러한 거래를 게시하는 데 더 많은 비용을 지불해야 하기 때문에 거래 수수료가 높아집니다.
분리된 증인
반면, SegWit이 제공하는 새로운 방법은 위의 문제점을 극복할 수 있습니다. SegWit은 비트코인의 중요한 프로토콜 업그레이드로, 비트코인 핵심 개발자인 Pieter Wuille이 2015년에 제안했으며 2017년 0.16.0 버전에서 공식적으로 채택되었습니다. 분리된 증인(Segregated Witness)은 분리와 격리를 의미하며, 증인은 거래와 관련된 서명 사항입니다. 따라서 SegWit은 특정 거래 서명 데이터(증인 데이터)를 거래에서 분리합니다.
거래 관련 데이터에서 서명을 분리하는 주요 이점은 비트코인 블록에 저장된 데이터의 크기를 줄이는 것입니다. 이는 더 많은 거래를 저장할 수 있는 블록당 추가 용량을 가지며, 이는 또한 네트워크가 더 많은 거래를 처리할 수 있고 발신자가 더 낮은 수수료를 지불할 수 있음을 의미합니다. 기술적으로 말하면 기본 구조(기본 블록)에서 스크립트 서명(scriptSig) 정보를 가져와 새 데이터 구조에 배치하는 것을 의미합니다. 검증 작업을 수행하는 노드와 채굴자는 거래가 유효한지 확인하기 위해 이 새로운 데이터 구조의 스크립트 서명도 검증합니다. Segwit 업그레이드는 개인정보 보호와 성능을 보장하기 위해 거래 출력에 새로운 감시 필드를 도입합니다. 증인 데이터는 데이터 저장용으로 설계되지 않았지만 실제로 비문 메타데이터와 같은 것을 저장할 수 있는 기회를 제공합니다. 우리는 분리된 증인을 더욱 생생하게 이해하기 위해 다음 그림을 사용합니다.
***Pre-SegWit – 거래 구조 설명(데이터 점유율)***
***Post-SegWit – 거래 구조 설명(데이터 점유율)***
***SegWit 전후의 거래 데이터 구조***
직근
P2TR은 2021년 Taproot 업그레이드에 도입된 비트코인의 거래 출력 유형으로, 다양한 거래 조건을 보다 비공개적으로 블록체인에 저장할 수 있습니다. Ordinals의 비문에서 P2TR은 중요한 역할을 합니다. Inscription은 기본적으로 특정 데이터 콘텐츠를 비트코인 거래에 포함시키며, Taproot 업그레이드, 특히 P2TR은 이러한 데이터 포함을 더욱 유연하고 경제적으로 만듭니다.
첫째, Taproot 스크립트가 저장되는 방식으로 인해 Taproot 스크립트 경로 지출 스크립트에 비문 콘텐츠를 저장할 수 있어 콘텐츠에 대한 제한이 거의 없으며 증인 데이터에 대한 할인도 받을 수 있어 비문 콘텐츠를 상대적으로 경제적으로 저장할 수 있습니다. Taproot 스크립트 사용은 기존 Taproot 출력에서만 수행될 수 있으므로 Inscription은 2단계 커밋/공개 프로세스를 사용합니다. 먼저 커밋 트랜잭션에서 비문 콘텐츠가 포함된 스크립트를 약속하는 Taproot 출력이 생성됩니다. 그런 다음 공개 트랜잭션에서 커밋 트랜잭션에 의해 생성된 출력이 소비되어 온체인 비문 콘텐츠가 공개됩니다.
이 접근 방식은 리소스 소비를 크게 줄입니다. P2TR을 사용하지 않으면 증인 정보가 트랜잭션 출력에 저장됩니다. 이런 방식으로 이 출력이 소비되지 않는 한 증인 정보는 항상 UTXO 세트에 저장됩니다. 반면, P2TR을 사용하면 커밋 단계에서 생성된 트랜잭션에 증인 정보가 나타나지 않으므로 UTXO 세트에 기록되지 않습니다. 이 UTXO가 소비되는 경우에만 공개 단계에서 트랜잭션 입력에 증인 정보가 나타납니다. P2TR을 사용하면 메타데이터를 비트코인 블록체인에 쓸 수 있지만 UTXO 세트에는 표시되지 않습니다. UTXO 세트를 유지/수정하려면 더 많은 리소스가 필요하므로 이 접근 방식을 사용하면 많은 리소스를 절약할 수 있습니다.
명
Ordinals 프로토콜은 SegWit을 활용하여 비트코인 네트워크에 기록된 콘텐츠의 크기 제한을 완화하고 증인 데이터에 비문 콘텐츠를 저장합니다. 최대 4MB의 메타데이터를 저장할 수 있습니다. Taproot를 사용하면 비트코인 거래에서 임의의 증인 데이터를 더 쉽게 저장할 수 있으므로 Ordinals 개발자 Casey Rodarmor는 오래된 opcode(OP_FALSE, OP_IF, OP_PUSH)를 "비문" 저장소 임의 데이터라고 알려진 "봉투"로 설명하는 용도로 변경할 수 있습니다.
비문을 주조하는 과정은 다음 두 단계로 구성됩니다.
1. 먼저 비문 콘텐츠가 포함된 스크립트에 커밋되는 커밋 트랜잭션에서 Taproot 출력을 생성해야 합니다. 저장 형식은 Taproot, 즉 이전 트랜잭션의 출력은 P2TR(Pay-To-Taproot)이고, 다음 트랜잭션의 입력은 감시된 Taproot 스크립트에 특정 형식으로 내장되어 있습니다. `가 입력되었습니다. 다른 용도로 사용되는 비문을 구별하기 위해 스택을 쌓으세요. 'OP_PUSH 1'은 다음 푸시에 콘텐츠 유형이 포함됨을 나타내고, 'OP_PUSH 0'은 후속 데이터 푸시에 콘텐츠 자체가 포함됨을 나타냅니다. 큰 비문은 여러 데이터 푸시를 사용해야 합니다. taproot의 몇 가지 제한 사항 중 하나는 단일 데이터 푸시가 520바이트보다 클 수 없다는 것입니다. 이때 비문 데이터는 거래 출력의 UTXO에 매핑되었지만 공개되지는 않았습니다.
SegWit 이후 – 거래 구조 설명(데이터 점유율)
1. 둘째, 커밋 트랜잭션에 의해 생성된 출력은 공개 트랜잭션에서 소비되어야 합니다. 이 단계에서는 해당 비문에 해당하는 UTXO를 입력으로 사용하여 트랜잭션이 시작됩니다. 이때 해당 비문 내용이 인터넷 전체에 공개됐다.
위의 두 단계를 통해 비문 콘텐츠가 새겨진 UTXO에 바인딩되었습니다. 위에서 소개한 사토시의 포지셔닝에 따르면 UTXO 입력에 해당하는 첫 번째 사토시에 비문이 수행되고, 비문의 내용이 표시된 트랜잭션의 입력에 포함됩니다. 위에서 소개한 사토시 유통 및 추적에 대한 소개에 따르면 특별한 내용이 새겨진 이 사토시를 양도, 구매, 판매, 분실 및 복구할 수 있습니다. 반복되는 비문은 허용되지 않으며, 그렇지 않으면 후속 비문은 유효하지 않습니다.
작은 BTC NFT 이미지를 조각하는 예를 통해 이 과정을 자세히 설명하겠습니다. 이 과정은 주로 앞서 언급한 커밋과 공개의 두 단계로 구성됩니다. 먼저 첫 번째 트랜잭션의 해시 ID가 **[2ddf9...f585c](https://www.blockchain.com/explorer/transactions/btc/2ddf90ddf7c929c8038888fc2b7591fb999c3ba3c3c7b49d54d01f8db4af585c)**임을 알 수 있습니다. 이 거래의 출력에는 증인 데이터가 포함되어 있지 않으며 웹 페이지에 관련 비문 정보가 없다는 점을 알 수 있습니다.
출처: https://www.blockchain.com/explorer/transactions/btc/2ddf90ddf7c929c8038888fc2b7591fb999c3ba3c3c7b49d54d01f8db4af585c
다음으로 두 번째 단계의 기록을 확인합니다. 해당 해시 ID는 [e7454...7c0e1](https://www.blockchain.com/explorer/transactions/btc/e7454db518ca3910d2f17f41c7b215d6cba00f29bd186ae77d4fcd7f0ba7c0e1)입니다. 여기에서 증언의 비문 내용인 서수 비문의 내용을 확인할 수 있다. 이 트랜잭션의 입력 주소는 이전 트랜잭션의 출력 주소이고 출력 0.00000546BTC(546 Satoshi)는 이 NFT를 자신의 주소로 보내는 것입니다. 동시에, 우리는 [Sat 1893640468329373](https://ordinals.com/sat/1893640468329373)에서 이 비문이 위치한 사토시를 찾을 수도 있습니다.
출처: https://www.blockchain.com/explorer/transactions/btc/e7454db518ca3910d2f17f41c7b215d6cba00f29bd186ae77d4fcd7f0ba7c0e1
출처: https://www.blockchain.com/explorer/transactions/btc/e7454db518ca3910d2f17f41c7b215d6cba00f29bd186ae77d4fcd7f0ba7c0e1
비트코인 지갑에서 이 자산을 볼 수 있습니다. 이 NFT를 거래하려면 다른 사람의 주소로 직접 보내면 됩니다. 즉, 이 UTXO를 보내면 비문 전송이 완료됩니다.
4. 비트코인 지갑
Ordinals 생태, 사토시 순환 및 비문 관련 지식이 무엇인지 이해한 후에는 현재 BRC-20, ORC-20, BRC-721, GBRC-721 및 토큰 정보 또는 NFT 작은 그림을 지원하고 표시하기 위해 해당 지갑이 필요한 기타 관련 파생 프로토콜. 이 섹션에서는 다양한 비트코인 지갑 주소의 개념과 특징을 소개합니다.
비트코인 주소는 1, 3 또는 bc1로 시작합니다. 이메일 주소와 마찬가지로 다른 Bitcoin 사용자와 공유하여 Bitcoin을 자신의 지갑으로 직접 보낼 수 있습니다. 보안 관점에서 볼 때 비트코인 주소에는 민감한 내용이 포함되어 있지 않습니다. 계정 보안을 침해하지 않고 어디든 게시할 수 있습니다. 이메일 주소와 달리 필요에 따라 언제든지 새 주소를 생성할 수 있으며, 이 모든 주소는 지갑에 직접 자금을 입금합니다. 실제로 많은 최신 지갑은 개인 정보 보호를 극대화하기 위해 모든 거래에 대해 자동으로 새 주소를 생성합니다. 지갑은 단순히 그 안에 있는 자금을 잠금 해제하는 주소와 키의 모음입니다. 먼저 비트코인 지갑 주소가 어떻게 생성되는지 알아야 합니다.
비트코인 개인 키와 공개 키
비트코인은 타원곡선 [Secp256k1](https://en.bitcoin.it/wiki/Secp256k1)을 사용합니다. **"개인키"는 1과 n-1 사이의 임의의 숫자이며, n**은 매우 큰 숫자입니다 .(256비트), 과학적 표기법으로 표현된 n은 대략 다음과 같습니다.
이 범위는 매우 커서 우리가 다른 사람의 개인 키를 추측하는 것은 거의 불가능합니다. 이 임의의 정수 개인키는 256비트로 표현될 수 있으며, 인코딩 방법은 여러 가지가 있습니다. WIF 또는 WIF 압축 형식의 개인 키가 암호화되지 않은 경우 이를 디코딩하여 원래의 "임의의 정수"를 얻을 수 있습니다. 또 다른 방법은 AES 알고리즘을 사용하여 개인 키를 암호화하는 것을 제안하는 [BIP38](https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki)입니다. 이 방식으로 얻은 개인 키는 6P라는 문자로 시작하는 이런 종류의 개인키는 비밀번호를 입력해야 다양한 비트코인 지갑으로 가져올 수 있는데, 이것이 우리가 일반적으로 사용하는 개인키입니다.
그런 다음 타원 곡선 공식 K = kG를 사용하여 개인 키 k에서 비트코인 공개 키 K를 생성합니다. G는 secp256k1의 매개변수인 기준점입니다. 공개키의 두 가지 표현인 "비압축 형식"과 "압축 형식"인 K의 두 좌표를 얻을 수 있습니다.
- 압축되지 않은 형식은 두 좌표 x와 y를 직접 연결한 다음 앞에 0x04 접두사를 추가하는 것입니다.
- 압축 형식, 즉 y가 짝수일 때 코드는 02x이고, y가 홀수일 때 코드는 03x입니다.
비트코인 주소
아래 그림은 다양한 종류의 비트코인 주소를 보여주고 있으며, 표현 방법에는 4가지가 있습니다.
참조: https://en.bitcoin.it/wiki/Invoice_address
1. **레거시(P2PKH) 형식**
예: 1Fh7ajXabJBpZPZw8bjD3QU4CuQ3pRty9u
"1"로 시작하는 주소는 비트코인의 원래 주소 형식이며 오늘날에도 여전히 사용되고 있습니다. Pay To PubKey Hash(Pay To PubKey Hash)의 약자인 P2PKH라고도 하는 Hash를 통해 공개 키로부터 계산됩니다.
1. **중첩된 SegWit(P2SH) 형식**
예: 3KF9nXowQ4asSGxRRzeiTpDjMuwM2nypAN
주소는 "3"으로 시작하며 P2SH는 Pay To Script Hash의 약어로 Legacy 주소보다 더 복잡한 기능을 지원합니다. 중첩된 P2SH는 기존 P2SH 주소("3"으로 시작)를 가져와 SegWit 주소로 캡슐화합니다.
1. **기본 SegWit(Bech32) 형식**
예: bc1qf3uwcxaz779nxedw0wry89v9cjh9w2xylnmqc3
bc1로 시작하는 주소는 기본 SegWit 주소인 [BIP0173](https://en.bitcoin.it/wiki/BIP_0173)에서 제안됩니다. Bech32로 인코딩된 주소는 SegWit용으로 특별히 개발된 주소 형식입니다. Bech32는 2017년 말 BIP173에서 정의되었습니다. 이 형식의 주요 특징 중 하나는 대소문자를 구분하지 않는다는 것입니다(주소에는 0-9, a-z만 포함됨). 따라서 입력 시 혼동을 효과적으로 방지할 수 있고 더 읽기 쉽습니다. . 주소에 필요한 문자 수가 적기 때문에 주소는 기존 Base58 대신 Base32 인코딩을 사용하므로 계산이 더 편리하고 효율적입니다. 데이터는 QR 코드에 더욱 긴밀하게 저장될 수 있습니다. Bech32는 더 강력한 보안, 더 최적화된 체크섬 오류 감지 코드를 제공하고 잘못된 주소가 발생할 가능성을 최소화합니다.
Bech32 주소 자체는 SegWit과 호환됩니다. SegWit 주소를 P2SH 주소에 넣는 데 추가 공간이 필요하지 않으므로 Bech32 형식 주소를 사용하면 처리 수수료가 더 낮아집니다. Bech32 주소는 이전 Base58(Base58Check 인코딩은 비트코인의 바이트 배열을 인간이 인코딩할 수 있는 문자열로 인코딩하는 데 사용됨) 주소에 비해 여러 가지 장점이 있습니다. QR 코드는 더 작고, 오류 방지 기능이 뛰어나고, 더 안전하며, 대문자와 소문자를 구별할 수 없으며, 소문자로만 구성됩니다. 을 사용하면 읽고, 입력하고, 이해하기가 더 쉽습니다.
1. **탭루트 형식(P2TR)**
Bech32에는 단점이 있습니다. 주소의 마지막 문자가 p인 경우 p 바로 앞에 문자 q를 삽입하거나 삭제해도 체크섬이 무효화되지 않습니다.
위와 같은 Bech32의 단점을 완화하기 위해 [BIP0350](https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki)에서 Bech32m 주소를 제안합니다.
- 버전 0 기본 Segwit 주소의 경우 이전 Bech32를 사용합니다.
- 버전 1(또는 그 이상) 기본 Segwit 주소의 경우 새로운 Bech32m을 사용하세요.
Bech32m 주소의 경우 버전 1에서는 항상 **bc1p**(즉, Taproot 주소)로 시작합니다. 특히 기본 SegWit과 마찬가지로 지갑은 시드 문구와 암호 문구로 구성될 수 있습니다. 이는 계층적 결정론적 지갑에서 임의 경로에 대한 주소를 파생하는 데 사용되는 확장 공개 및 개인 키를 생성하는 데 사용됩니다. 주로 BRC-20, BTC NFT 등을 저장합니다.