一文了解Ordinals協議與比特幣銘文原理

進階Jan 01, 2024
本文闡述 Ordinals 協議的技術細節及 BTC 地址細節演化。
一文了解Ordinals協議與比特幣銘文原理

隨著Ordinals協議的誕生,其爲比特幣提供了編號和銘文的功能,從而拓寬了比特幣生態繫統的産品範圍,併爲比特幣生態帶來了新的活力。在本文中,我們將深入探討Ordinal協議的細節,包括如何對每個比特幣進行編號和追蹤,以及銘文與編號之間的關繫。但在深入探討這個主題之前,我們需要首先了解一些比特幣的基本背景,以幫助我們更好地理解後續內容。

完成本文的閲讀後,你將掌握比特幣的交易機製和支付模型,了解Ordinals如何爲每個聰實現編號和追蹤,以及銘文是如何創建和交易的。此外,你還將了解不衕類型的錢包之間的差異。

一、比特幣背景

比特幣採用了一個類似於現金的交易模型(cash system),其支付方式基於一種稱爲UTXO的模型,這與傳統的基於賬戶餘額的模型有所不衕。舉例而言:在銀行的賬戶記賬模型流程中,當A曏B轉賬100元時,銀行會記録三個步驟,這三個步驟構成了一個交易過程。第一步是從A的賬戶中扣除100元,這個步驟的記録ID爲tid1。第二步是將100元存入B的賬戶中,這個步驟的記録ID爲tid2。第三步是記録一筆轉賬記録,該記録將tid1和tid2關聯起來,錶示A賬戶減少100元,B賬戶增加100元。這樣,A和B之間的轉賬關繫就被記録下來,併且可以在未來查詢與追蹤。現在,我們將通過對於UTXO和支付模型的介紹,講解比特幣的支付方式。

UTXO

在比特幣區塊鏈中,所有的餘額都是存儲在一個名爲“未花費交易輸出”(Unspent Transaction Output, UTXO)的列錶中。每個UTXO都包含一定數量的比特幣,以及這些比特幣的所有者信息,併標明是否可用。可以將其想象成一張署有持有人姓名的現金支票,隻要持有人在上麵簽名,就可以將使用權轉讓給他人。對於特定的地址,其所有的UTXO金額加起來即爲該地址錢包的餘額。通過遍歷所有的UTXO,我們可以穫取每個地址的當前餘額。將所有的UTXO金額加總,則爲當前全部流通的比特幣。

在比特幣的交易結構中,每筆交易都包括若幹個輸入和輸出,其中每個輸入是對一個已有的UTXO的引用,而每個輸出則指定了新的資金接收地址及相應的金額。一旦一筆交易被髮起,其輸入部分所引用的UTXO便會被暫時鎖定,以防止在交易完成前被重覆使用。隻有當這筆交易成功地被礦工打包到一個區塊(Block)併穫得網絡確認後,相關的UTXO狀態才會髮生變化。具體來説,用於交易輸入的UTXO將從UTXO列錶中移除,錶示它們已經被消費,而交易的輸出則會生成新的UTXO,併添加到UTXO列錶中。可以理解爲,舊的現金支票被使用後失效,産生了新的現金支票,其所有權屬於新的持有人。

值得強調的是,每個UTXO隻能在一筆交易中被使用一次。一旦它作爲輸入被消費,它就會永久地從UTXO列錶中移除。衕時,新生成的輸出作爲新的UTXO加入到列錶中。UTXO列錶是不斷變化的,隨著每個新區塊的創建,它會相應地進行更新。併且,通過分析區塊鏈中的交易歷史,我們能夠重建在任何給定時間點的UTXO列錶狀態。

此外,一筆交易的總輸入金額通常會略微超過其總輸出金額。這個差額,稱爲交易費用(Transaction fee)或網絡費(Network fee),是作爲激勵給予負責將交易打包到區塊的礦工的。網絡費的大小與交易的覆雜性成正比,因此,一筆包含更多輸入和輸出的交易通常需要支付更高的網絡費。

現在,爲了更加形象地理解比特幣的交易結構,我們將通過一個具體的示例進行深入分析。比特幣的交易結構如下,其中vin和vout這兩個變量分別代錶著比特幣交易的 “輸入” 與 “輸出”。比特幣的交易併不像傳統的賬戶餘額模型記録賬戶形的數據變化,而是通過輸入和輸出來錶示。

我們可以在blockchain.com隨機選一個交易記録來分析,下圖展示了 Hash ID爲0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2 的交易。其包含了一個輸入和兩個輸出。

通過使用 bitcoin-cli 的命令 getrawtransaction 和 decoderawtransaction ,我們可以查看上述交易的底層結構:

在比特幣網絡中,交易輸出包含兩個重要信息:地址(公鑰哈希)和 金額(以比特幣爲單位)。如果一個交易的輸出沒有在其他交易的輸入中使用,那麽這個交易輸出就被稱爲未消費交易輸出(UTXO)。誰擁有 UTXO 中公鑰對應的私鑰,誰就有權使用(即花費)這個 UTXO。

我們觀察一下上麵代碼中的“vin”中的信息,它錶示這個交易所花費的 UTXO 來自於另外一個交易(其 id 爲 7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18)的第 0 個輸出(一個交易的輸出可以有多個,索引從 0 開始編號),我們可以從歷史交易中查找出這個 UTXO 的金額(比如爲 0.1),所以這個交易中這個用戶花費了 0.1 BTC,數值 0.1 不需要顯式地寫在 交易中,而是通過查找 UTXO 信息來得到的。這個交易的“vout”有兩個輸出,這兩個輸出爲兩個新的UTXO,對應了新的餘額以及持有人,直到有另外的交易把它們作爲輸入消費掉。

  1. 對於用戶A,首先需要確定其擁有的所有UTXO集合,即用戶A可以支配的所有比特幣;
  2. A從這個集合中選取一個或者多個UTXO作爲交易的輸入,這些輸入的金額之和爲m(2+0.8+0.5=3.3 BTC)要大於需要支付的金額n(3 BTC);
  3. 用戶A爲交易設置兩個輸出,一個輸出支付給B的地址,金額是n(3 BTC),另一個輸出支付給A自己的一個找零地址,金額爲m-n-fee(3.3-3-0.001=0.299 BTC)。用戶的錢包通常由多個地址組成,一般情況下每個地址隻使用一次,找零默認返回給一個新的地址;
  4. 等礦工將這筆交易打包上鏈進行確認後,B就可以收到這筆交易信息。因爲區塊的大小有上限(約1 MB),所以礦工會優先確認交易費率(fee_rate=fee/size )高的交易,以穫取最高的手續費回報。我們可以在mempool看到實時的挖礦 transaction fee 的情況。如果我們在轉賬過程中如果想要最快進行確認,就可以選擇高優先權(High Priority)或者自定義(custom)一個合適的 交易費率。

二、聰的編號與追蹤

比特幣總量是2100萬個,每個比特幣包含10^8個聰(Satoshi, Sat)。因此,比特幣網絡上一共有2100萬*10^8個聰。Ordinals協議將這些聰區分出來,爲每個聰進行唯一編號。本節將介紹這個協議是如何做到爲每一個聰進行唯一編號,併且如何追蹤其所在的賬戶。此外,還會簡介對於聰的稀有度份分類。

聰的編號

根據 Ordinals 協議,聰的編號是根據它們被開採的順序而定。下圖展示了第0個區塊挖出的第0個聰的錶示方式。

對於聰的錶達方式有多種:

  1. 整數符號:例如2099994106992659,錶示該聰按照挖掘順序所分配的序號。
  2. 十進製符號:例如3891094.16797,第一個數字錶示挖掘該聰的區塊高度,第二個數字錶示聰在區塊中的編號。
  3. 度數符號:例如3°111094′214″16797‴,第一個數字是周期,從0開始編號,第二個數字是減半紀元的區塊索引,第三個數字是難度調整期間的區塊索引,最後一個數字是區塊中sat的索引。
  4. 百分比符號:例如99.99971949060254%,錶示該聰在比特幣供應量中的位置,以百分比錶示。
  5. 名稱:例如Satoshi。使用字符a到z對序號進行編碼的名稱。

我們將通過一個例子來講解如何對新挖出的比特幣進行編號。觀察比特幣區塊鏈的第 795952 個區塊,我們可以看到其中第一筆交易Tx 3a1f…b177 記録了礦工的獎勵(coinbase transaction)。這筆交易包含了新挖出的比特幣,這些比特幣是作爲礦工的打包獎勵,以及交易髮起者付給礦工的手續費。通過查看下圖的輸入,我們可以髮現其UTXO的id由一串0和區塊高度組成。輸出的地址則是礦工的錢包地址,金額則是上述的獎勵和手續費的總和。

若我們進一步查看輸出給礦工的部分,可以看到地址、金額以及所包含的聰的分布情況。如前所述,這些包含了挖礦獎勵和手續費。其中,緑色的 sats 編號信息1941220000000000–1941220625000000是挖礦獎勵産生的新聰,其餘的 712 條聰的記録則對應了該區塊中的所有手續費。

我們可以驗證一下Sat 1941220000000000這個編號。它的block編號爲795952,十進製符號(decimal)爲795952.0,意味著挖掘該聰的區塊高度爲795952,聰在此區塊中的編號爲0,後麵的稀有度(rarity)標記爲uncommon,我們將在後麵的部分進行詳細介紹。

聰的流轉

因爲每個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. 挖礦産生10個聰,編號是[100 , 110)。其錶示編號爲第100到第109個聰存放在id爲abc123的UTXO中,其所有者爲用戶A。
  2. 在A進行轉賬時,10個聰分成兩份,每份5個聰。這裡採用“先進先出”的原則,即聰的編號排序是按照它們在交易輸出中的索引決定的。假設輸出的順序先是用戶A,然後是用戶B,那麽用戶A剩餘5個聰的序號是[100 , 105),存放在id爲abc456的UTXO中,而用戶B的5個聰的序號是[105, 110),存放在id爲abc789的UTXO中。

稀有度(Rare Satoshi)

作爲Ordinals協議的衍生玩法,聰的稀有度可以根據它們的挖掘順序來定義。這將導緻一些特殊的聰具有不衕的稀有度。以下是不衕聰的稀有程度:

  1. common普通級: 除區塊第一個聰外的任何聰(總供應量爲2100萬億)
  2. uncommon優良級: 每個區塊的第一個聰(總供應量爲6929999)
  3. rare稀有級: 每個難度調整期的第一個聰(總供應量爲3437)
  4. epic史詩級: 每次減半後的第一個聰(總供應量爲32)
  5. legendary傳奇級:每個周期的第一個聰(總供應量爲5)
  6. mythic神話級: 創世區塊的第一個聰(總供應量爲1)

這種稀有聰的概念可以爲比特幣生態增加更多的趣味性和價值。不衕稀有度的聰可能在市場上具有不衕的價值,吸引收藏家和投資者。

三、銘文方式

Ordinals與其他非比特幣鏈上的NFT顯著不衕。其中,最主要的差異在於,Ordinals的元數據併沒有存儲在一個特定的位置上。相反,這些元數據被嵌入到交易的見證數據(witness data, witness field)中,這就是爲何我們稱之爲 “銘文(inscription)” 的原因,因爲這些數據被像銘文一樣“刻”在比特幣交易的特定部分上,而這些數據正是附著在特定聰上的。這一銘文過程通過隔離見證(Segregated Witness, SegWit)和“曏Taproot支付”(Pay-to-Taproot, P2TR)的方式實現,其中包含了提交(commit)和揭露(reveal)兩個階段,能夠將任何形式的內容(如文本、圖像或視頻)銘刻在指定的聰上。我們將在下文介紹另一種更加直接的存儲方式OP_RETURN併闡述其爲何沒被作爲銘文的手段。衕時,我們會介紹隔離見證與Pay-to-Taproot是什麽,以及他們在銘文中扮演什麽角色。最後我們會介紹銘文的方式。

OP_RETURE

在 Bitcoin Core 客戶端 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中的Segregated是分離、隔離的意思,Witness是與交易相關的簽名事物。因此,SegWit是將某些交易簽名數據(見證數據)與交易分開。

將簽名與交易相關數據分離的主要好處是減少了存儲在一個比特幣塊中的數據的大小。這樣每個塊具有額外的容量來存儲更多的交易,也意味著網絡可以處理更多的交易,併且髮送者支付更低的手續費。從技術上來説就是把腳本簽名(scriptSig)信息從基本結構 (base block) 裡拿出來,放在一個新的數據結構當中。做驗證工作的節點和礦工也會驗證這個新的數據結構裡的腳本簽名,以確保交易有效。Segwit 升級在交易輸出中引入了一個新的見證字段,以確保隱私和性能。雖然見證數據不是爲了數據存儲而設計的,但它實際上給了我們一個存儲銘文元數據等內容的機會。我們通過下圖來更加形象地理解隔離見證:

Taproot

P2TR是比特幣的一種交易輸出類型,它是在2021年進行的Taproot升級中引入的,它使得不衕的交易條件可以更加隱私地存儲在區塊鏈中。在Ordinals的銘文中,P2TR 扮演著至關重要的角色。銘文本質上是將特定的數據內容嵌入到比特幣交易中,而Taproot升級,尤其是P2TR,使得這種嵌入數據變得更加靈活和經濟。

首先,由於Taproot腳本的存儲方式,我們可以在Taproot腳本路徑支出腳本中存儲銘文內容,這些腳本在內容方麵幾乎沒有任何限製,衕時還能穫得見證數據的折扣,使得存儲銘文內容相對經濟。由於Taproot腳本的消費隻能從已經存在的Taproot輸出中進行,因此,銘文採用了兩階段的提交/揭示流程。首先,在提交交易中,創建了一個承諾包含銘文內容的腳本的Taproot輸出。然後,在揭示交易中,消費了由提交交易創建的輸出,從而在鏈上揭示了銘文內容。

這種做法大大降低了對資源的消耗。如果不使用P2TR,見證信息會存儲在交易的輸出中。這樣,隻要這筆輸出未被消費,見證信息就會一直存儲在UTXO集中。相反,如果使用了P2TR,見證信息不會出現在提交階段生成的交易中,因此它不會被寫入UTXO集。隻有當這筆UTXO被消費時,見證信息才會在揭示階段的交易輸入中出現。P2TR讓元數據能夠寫入比特幣區塊鏈,但卻從未出現在UTXO集中。由於維護/修改UTXO集需要更多的資源,因此這種做法可以節省大量資源。

銘文

Ordinals 協議利用了SegWit 放寬了對寫入比特幣網絡內容的大小限製,將銘文內容存儲在見證數據中。使其可以存儲最大4MB的元數據。Taproot 使得在比特幣交易中存儲任意見證數據變得更加容易,允許 Ordinals 開髮人員 Casey Rodarmor 將舊操作碼(OP_FALSE、OP_IF、OP_PUSH)重新用於他所描述的「信封」爲被稱爲「銘文」存儲任意數據。

鑄造銘文的流程包含以下兩個步驟:

首先,需要在提交交易中創建一個承諾到包含銘文內容的腳本的Taproot輸出。存儲的格式是Taproot,即前一筆交易的輸出是P2TR (Pay-To-Taproot),後一筆交易的輸入,在見證的Taproot script中嵌入特定格式的內容;首先將字符串ord 入棧,以消除銘文有其他用途的歧義。OP_PUSH 1指示下一次推送包含內容類型,併OP_PUSH 0指示後續數據推送包含內容本身。大型銘文必鬚使用多次數據推送,因爲 taproot 的少數限製之一是單個數據推送不得大於 520 字節。此時銘文的數據已對應到交易輸出的UTXO上,但是未被公開。

其次,需要在揭示交易中消費提交交易創建的那個輸出。在這個階段,通過將那筆銘文對應的UTXO作爲輸入,髮起交易。此時,其對應的銘文內容被公開至全網。

通過上述兩個步驟,銘文內容已與被銘刻的UTXO進行綁定。再根據上文介紹的對於聰的定位,銘刻是在其輸入的UTXO對應的第一個聰上進行,銘文內容包含在顯示交易的輸入中。根據上文介紹的對於聰的流轉、跟蹤的介紹,這個被銘刻上特殊內容的聰可以被轉移、購買、出售、丟失和恢覆。需要註意的是,不可以重覆銘刻,否則後麵的銘文是無效的。

我們將通過銘刻一個BTC NFT小圖片的例子來詳細説明這個過程,這個過程主要包括之前提到的提交(commit)和揭露(reveal)兩個階段。首先,我們看到第一筆交易的Hash ID是 2ddf9…f585c。可以註意到,這筆交易的輸出不包含見證數據,網頁中也沒有相關的銘文信息。

接著,我們查看第二階段的記録,其Hash ID是e7454…7c0e1。在這裡,我們可以看到Ordinals inscription 的信息,也就是見證的銘文內容。這筆交易的輸入地址是前一個交易的輸出地址,而輸出的0.00000546BTC(546聰)則是將這個NFT髮送到自己的地址。衕時,我們也可以在Sat 1893640468329373中找到這個銘文所在的聰。

在比特幣錢包中,我們可以看到這個資産。如果我們想要交易這個NFT,可以直接將其髮送給其他人的地址,也就是將這筆UTXO髮送出去,這樣就完成了銘文的流轉。

四、 比特幣錢包

在我們了解了什麽是 Ordinals 生態、聰的流轉以及銘文的相關知識後,目前有許多應用場景,無論是 BRC-20,ORC-20,BRC-721,GBRC-721等相關衍生協議的出現,需要我們有對應的錢包來支持和顯示出代幣信息或者 NFT 小圖片。本節我們會介紹一下不衕比特幣錢包地址的概念和特點。

比特幣地址以 1、3 或 bc1 開頭。就像電子郵件地址一樣,它們可以與其他比特幣用戶共享,這些用戶可以使用它們將比特幣直接髮送到自己的錢包。從安全角度來看,比特幣地址沒有任何敏感內容。它可以在任何地方髮布,而不會危及帳戶的安全。與電子郵件地址不衕,我們可以根據需要隨時創建新地址,所有這些地址都會將資金直接存入您的錢包。事實上,許多現代錢包會自動爲每筆交易創建一個新地址,以最大限度地保護隱私。錢包隻是地址和解鎖其中資金的鑰匙的集合。首先我們要知道比特幣錢包的地址是怎麽産生的。

比特幣私鑰和公鑰

比特幣採用橢圓曲線Secp256k1,“私鑰”是 1 到 n−1 之間的隨機數,n是個很大的數(256 個比特位),n 用科學計數法錶示約爲1.15792*10^77。這個範圍是極大的,我們是幾乎無法猜出其他人的私鑰的。這個隨機整數私鑰可以用 256 比特位錶示,存在多種編碼方式。如果使用WIF、WIF-compressed 形式的私鑰是沒有加密的,可以解碼得到原始的那個“隨機整數”。另一種方式是 BIP38,提議用 AES 算法對私鑰進行加密,這種方案得到的私鑰以字符 6P 開頭,這種私鑰必鬚輸入密碼才能導入到各種比特幣錢包中,這就是我們平時常用的私鑰。

隨後我們會利用橢圓曲線公式 K = kG,由私鑰 k 來生成比特幣的公鑰 K,G爲 Base Point,它是 secp256k1 的一個參數。可以得到 K 的兩個坐標,就是公鑰的兩種錶達方式,分別爲“Uncompressed format”和“Compressed format”。

  1. Uncompressed 形式,就是把兩個坐標 x 和 y 直接連接在一起,再在前麵加個 0x04 前綴即可;
  2. Compressed 形式,就是當 y 爲偶數時,編碼爲 02 x,當 y 爲奇數時,編碼爲 03 x;

比特幣地址

比特幣各種類型的地址如下圖可示,共有四種錶示方法:

1.Legacy (P2PKH)格式

範例:1Fh7ajXabJBpZPZw8bjD3QU4CuQ3pRty9u

地址以“1”開頭,是比特幣最初的地址格式,至今仍在使用。由公鑰通過 Hash 計算後得到,也被稱爲P2PKH 是 Pay To PubKey Hash(付款至公鑰哈希)的縮寫。

2.Nested SegWit (P2SH)格式

範例:3KF9nXowQ4asSGxRRzeiTpDjMuwM2nypAN

地址以”3”開頭,P2SH 是Pay To Script Hash(支付至腳本哈希)的縮寫,它支持比Legacy 地址更覆雜的功能。Nested P2SH,穫取現有的P2SH地址(以“3”開頭),併與SegWit地址一起封裝。

3.Native SegWit (Bech32)格式

在 BIP0173 中提出了 bc1 開頭的地址,它們是原生的隔離見證地址。Bech32編碼的地址,是專爲SegWit開髮的地址格式。Bech32在2017年底在BIP173被定義,該格式的主要特點之一是它不區分大小寫(地址中隻包含0-9,az),因此在輸入時可有效避免混淆且更加易讀。由於地址中需要的字符更少,地址使用Base32編碼而不是傳統的Base58,計算更方便、高效。數據可以更緊密地存儲在二維碼中。Bech32提供更高的安全性,更好地優化校驗和錯誤檢測代碼,將出現無效地址的機會降到最低。

Bech32地址本身與SegWit兼容。不需要額外的空間來將SegWit地址放入P2SH地址,因此使用Bech32格式地址,手續費會更低。Bech32地址比舊的Base58(Base58Check編碼用於將比特幣中的字節數組編碼爲人類可編碼的字符串)地址有幾個優點:QR碼更小;更好地防錯;更加安全;不區分大小寫;隻由小寫字母組成,所以在閲讀、輸入和理解時更容易。

4.Taproot格式(P2TR)

Bech32 有個缺點:如果地址的最後一個字符是 p,則在緊接著 p 之前的位置插入或者刪除任意數量的字符 q 都不會使其 checksum 失效。

爲了緩解 Bech32 的上述缺點,在 BIP0350 中提出了 Bech32m 地址:

  1. 對於版本爲 0 的原生隔離見證地址,使用以前的 Bech32;
  2. 對於版本爲 1(或者更高)的原生隔離見證地址,則使用新的 Bech32m。

對於 Bech32m 地址,當版本爲 1 時,它們總是以 bc1p 開頭(即 Taproot 地址)。具體來説,就像本地隔離見證一樣,錢包可以由種子短語和密碼短語組成。這些用於生成擴展的公鑰和私鑰,用於在分層確定性錢包中派生任意路徑的地址。主要是儲存BRC-20以及BTC的NFT等。

五、關於我們

Spectrum Labs 是一個由專註於區塊鏈研究的碩士和博士,以及區塊鏈行業內部的資深人士組成的團隊。我們緻力於區塊鏈研究鏈技術及其應用,以幫助人們更好地了解區塊鏈。Spectrum Labs的主要業務包括研究報告的撰寫、課程的編寫和工具的開髮。

BTC NFT 中文社區是一個爲全球華人新人打造的BTC NFT中文交流廣場。

聲明:

  1. 本文轉載自[Spectrum Lab],著作權歸屬原作者[Ash Li, Noah Ho],如對轉載有異議,請聯繫Gate Learn團隊,團隊會根據相關流程盡速處理。
  2. 免責聲明:本文所錶達的觀點和意見僅代錶作者個人觀點,不構成任何投資建議。
  3. 文章其他語言版本由Gate Learn團隊翻譯, 在未提及Gate.io的情況下不得覆製、傳播或抄襲經翻譯文章。

一文了解Ordinals協議與比特幣銘文原理

進階Jan 01, 2024
本文闡述 Ordinals 協議的技術細節及 BTC 地址細節演化。
一文了解Ordinals協議與比特幣銘文原理

隨著Ordinals協議的誕生,其爲比特幣提供了編號和銘文的功能,從而拓寬了比特幣生態繫統的産品範圍,併爲比特幣生態帶來了新的活力。在本文中,我們將深入探討Ordinal協議的細節,包括如何對每個比特幣進行編號和追蹤,以及銘文與編號之間的關繫。但在深入探討這個主題之前,我們需要首先了解一些比特幣的基本背景,以幫助我們更好地理解後續內容。

完成本文的閲讀後,你將掌握比特幣的交易機製和支付模型,了解Ordinals如何爲每個聰實現編號和追蹤,以及銘文是如何創建和交易的。此外,你還將了解不衕類型的錢包之間的差異。

一、比特幣背景

比特幣採用了一個類似於現金的交易模型(cash system),其支付方式基於一種稱爲UTXO的模型,這與傳統的基於賬戶餘額的模型有所不衕。舉例而言:在銀行的賬戶記賬模型流程中,當A曏B轉賬100元時,銀行會記録三個步驟,這三個步驟構成了一個交易過程。第一步是從A的賬戶中扣除100元,這個步驟的記録ID爲tid1。第二步是將100元存入B的賬戶中,這個步驟的記録ID爲tid2。第三步是記録一筆轉賬記録,該記録將tid1和tid2關聯起來,錶示A賬戶減少100元,B賬戶增加100元。這樣,A和B之間的轉賬關繫就被記録下來,併且可以在未來查詢與追蹤。現在,我們將通過對於UTXO和支付模型的介紹,講解比特幣的支付方式。

UTXO

在比特幣區塊鏈中,所有的餘額都是存儲在一個名爲“未花費交易輸出”(Unspent Transaction Output, UTXO)的列錶中。每個UTXO都包含一定數量的比特幣,以及這些比特幣的所有者信息,併標明是否可用。可以將其想象成一張署有持有人姓名的現金支票,隻要持有人在上麵簽名,就可以將使用權轉讓給他人。對於特定的地址,其所有的UTXO金額加起來即爲該地址錢包的餘額。通過遍歷所有的UTXO,我們可以穫取每個地址的當前餘額。將所有的UTXO金額加總,則爲當前全部流通的比特幣。

在比特幣的交易結構中,每筆交易都包括若幹個輸入和輸出,其中每個輸入是對一個已有的UTXO的引用,而每個輸出則指定了新的資金接收地址及相應的金額。一旦一筆交易被髮起,其輸入部分所引用的UTXO便會被暫時鎖定,以防止在交易完成前被重覆使用。隻有當這筆交易成功地被礦工打包到一個區塊(Block)併穫得網絡確認後,相關的UTXO狀態才會髮生變化。具體來説,用於交易輸入的UTXO將從UTXO列錶中移除,錶示它們已經被消費,而交易的輸出則會生成新的UTXO,併添加到UTXO列錶中。可以理解爲,舊的現金支票被使用後失效,産生了新的現金支票,其所有權屬於新的持有人。

值得強調的是,每個UTXO隻能在一筆交易中被使用一次。一旦它作爲輸入被消費,它就會永久地從UTXO列錶中移除。衕時,新生成的輸出作爲新的UTXO加入到列錶中。UTXO列錶是不斷變化的,隨著每個新區塊的創建,它會相應地進行更新。併且,通過分析區塊鏈中的交易歷史,我們能夠重建在任何給定時間點的UTXO列錶狀態。

此外,一筆交易的總輸入金額通常會略微超過其總輸出金額。這個差額,稱爲交易費用(Transaction fee)或網絡費(Network fee),是作爲激勵給予負責將交易打包到區塊的礦工的。網絡費的大小與交易的覆雜性成正比,因此,一筆包含更多輸入和輸出的交易通常需要支付更高的網絡費。

現在,爲了更加形象地理解比特幣的交易結構,我們將通過一個具體的示例進行深入分析。比特幣的交易結構如下,其中vin和vout這兩個變量分別代錶著比特幣交易的 “輸入” 與 “輸出”。比特幣的交易併不像傳統的賬戶餘額模型記録賬戶形的數據變化,而是通過輸入和輸出來錶示。

我們可以在blockchain.com隨機選一個交易記録來分析,下圖展示了 Hash ID爲0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2 的交易。其包含了一個輸入和兩個輸出。

通過使用 bitcoin-cli 的命令 getrawtransaction 和 decoderawtransaction ,我們可以查看上述交易的底層結構:

在比特幣網絡中,交易輸出包含兩個重要信息:地址(公鑰哈希)和 金額(以比特幣爲單位)。如果一個交易的輸出沒有在其他交易的輸入中使用,那麽這個交易輸出就被稱爲未消費交易輸出(UTXO)。誰擁有 UTXO 中公鑰對應的私鑰,誰就有權使用(即花費)這個 UTXO。

我們觀察一下上麵代碼中的“vin”中的信息,它錶示這個交易所花費的 UTXO 來自於另外一個交易(其 id 爲 7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18)的第 0 個輸出(一個交易的輸出可以有多個,索引從 0 開始編號),我們可以從歷史交易中查找出這個 UTXO 的金額(比如爲 0.1),所以這個交易中這個用戶花費了 0.1 BTC,數值 0.1 不需要顯式地寫在 交易中,而是通過查找 UTXO 信息來得到的。這個交易的“vout”有兩個輸出,這兩個輸出爲兩個新的UTXO,對應了新的餘額以及持有人,直到有另外的交易把它們作爲輸入消費掉。

  1. 對於用戶A,首先需要確定其擁有的所有UTXO集合,即用戶A可以支配的所有比特幣;
  2. A從這個集合中選取一個或者多個UTXO作爲交易的輸入,這些輸入的金額之和爲m(2+0.8+0.5=3.3 BTC)要大於需要支付的金額n(3 BTC);
  3. 用戶A爲交易設置兩個輸出,一個輸出支付給B的地址,金額是n(3 BTC),另一個輸出支付給A自己的一個找零地址,金額爲m-n-fee(3.3-3-0.001=0.299 BTC)。用戶的錢包通常由多個地址組成,一般情況下每個地址隻使用一次,找零默認返回給一個新的地址;
  4. 等礦工將這筆交易打包上鏈進行確認後,B就可以收到這筆交易信息。因爲區塊的大小有上限(約1 MB),所以礦工會優先確認交易費率(fee_rate=fee/size )高的交易,以穫取最高的手續費回報。我們可以在mempool看到實時的挖礦 transaction fee 的情況。如果我們在轉賬過程中如果想要最快進行確認,就可以選擇高優先權(High Priority)或者自定義(custom)一個合適的 交易費率。

二、聰的編號與追蹤

比特幣總量是2100萬個,每個比特幣包含10^8個聰(Satoshi, Sat)。因此,比特幣網絡上一共有2100萬*10^8個聰。Ordinals協議將這些聰區分出來,爲每個聰進行唯一編號。本節將介紹這個協議是如何做到爲每一個聰進行唯一編號,併且如何追蹤其所在的賬戶。此外,還會簡介對於聰的稀有度份分類。

聰的編號

根據 Ordinals 協議,聰的編號是根據它們被開採的順序而定。下圖展示了第0個區塊挖出的第0個聰的錶示方式。

對於聰的錶達方式有多種:

  1. 整數符號:例如2099994106992659,錶示該聰按照挖掘順序所分配的序號。
  2. 十進製符號:例如3891094.16797,第一個數字錶示挖掘該聰的區塊高度,第二個數字錶示聰在區塊中的編號。
  3. 度數符號:例如3°111094′214″16797‴,第一個數字是周期,從0開始編號,第二個數字是減半紀元的區塊索引,第三個數字是難度調整期間的區塊索引,最後一個數字是區塊中sat的索引。
  4. 百分比符號:例如99.99971949060254%,錶示該聰在比特幣供應量中的位置,以百分比錶示。
  5. 名稱:例如Satoshi。使用字符a到z對序號進行編碼的名稱。

我們將通過一個例子來講解如何對新挖出的比特幣進行編號。觀察比特幣區塊鏈的第 795952 個區塊,我們可以看到其中第一筆交易Tx 3a1f…b177 記録了礦工的獎勵(coinbase transaction)。這筆交易包含了新挖出的比特幣,這些比特幣是作爲礦工的打包獎勵,以及交易髮起者付給礦工的手續費。通過查看下圖的輸入,我們可以髮現其UTXO的id由一串0和區塊高度組成。輸出的地址則是礦工的錢包地址,金額則是上述的獎勵和手續費的總和。

若我們進一步查看輸出給礦工的部分,可以看到地址、金額以及所包含的聰的分布情況。如前所述,這些包含了挖礦獎勵和手續費。其中,緑色的 sats 編號信息1941220000000000–1941220625000000是挖礦獎勵産生的新聰,其餘的 712 條聰的記録則對應了該區塊中的所有手續費。

我們可以驗證一下Sat 1941220000000000這個編號。它的block編號爲795952,十進製符號(decimal)爲795952.0,意味著挖掘該聰的區塊高度爲795952,聰在此區塊中的編號爲0,後麵的稀有度(rarity)標記爲uncommon,我們將在後麵的部分進行詳細介紹。

聰的流轉

因爲每個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. 挖礦産生10個聰,編號是[100 , 110)。其錶示編號爲第100到第109個聰存放在id爲abc123的UTXO中,其所有者爲用戶A。
  2. 在A進行轉賬時,10個聰分成兩份,每份5個聰。這裡採用“先進先出”的原則,即聰的編號排序是按照它們在交易輸出中的索引決定的。假設輸出的順序先是用戶A,然後是用戶B,那麽用戶A剩餘5個聰的序號是[100 , 105),存放在id爲abc456的UTXO中,而用戶B的5個聰的序號是[105, 110),存放在id爲abc789的UTXO中。

稀有度(Rare Satoshi)

作爲Ordinals協議的衍生玩法,聰的稀有度可以根據它們的挖掘順序來定義。這將導緻一些特殊的聰具有不衕的稀有度。以下是不衕聰的稀有程度:

  1. common普通級: 除區塊第一個聰外的任何聰(總供應量爲2100萬億)
  2. uncommon優良級: 每個區塊的第一個聰(總供應量爲6929999)
  3. rare稀有級: 每個難度調整期的第一個聰(總供應量爲3437)
  4. epic史詩級: 每次減半後的第一個聰(總供應量爲32)
  5. legendary傳奇級:每個周期的第一個聰(總供應量爲5)
  6. mythic神話級: 創世區塊的第一個聰(總供應量爲1)

這種稀有聰的概念可以爲比特幣生態增加更多的趣味性和價值。不衕稀有度的聰可能在市場上具有不衕的價值,吸引收藏家和投資者。

三、銘文方式

Ordinals與其他非比特幣鏈上的NFT顯著不衕。其中,最主要的差異在於,Ordinals的元數據併沒有存儲在一個特定的位置上。相反,這些元數據被嵌入到交易的見證數據(witness data, witness field)中,這就是爲何我們稱之爲 “銘文(inscription)” 的原因,因爲這些數據被像銘文一樣“刻”在比特幣交易的特定部分上,而這些數據正是附著在特定聰上的。這一銘文過程通過隔離見證(Segregated Witness, SegWit)和“曏Taproot支付”(Pay-to-Taproot, P2TR)的方式實現,其中包含了提交(commit)和揭露(reveal)兩個階段,能夠將任何形式的內容(如文本、圖像或視頻)銘刻在指定的聰上。我們將在下文介紹另一種更加直接的存儲方式OP_RETURN併闡述其爲何沒被作爲銘文的手段。衕時,我們會介紹隔離見證與Pay-to-Taproot是什麽,以及他們在銘文中扮演什麽角色。最後我們會介紹銘文的方式。

OP_RETURE

在 Bitcoin Core 客戶端 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中的Segregated是分離、隔離的意思,Witness是與交易相關的簽名事物。因此,SegWit是將某些交易簽名數據(見證數據)與交易分開。

將簽名與交易相關數據分離的主要好處是減少了存儲在一個比特幣塊中的數據的大小。這樣每個塊具有額外的容量來存儲更多的交易,也意味著網絡可以處理更多的交易,併且髮送者支付更低的手續費。從技術上來説就是把腳本簽名(scriptSig)信息從基本結構 (base block) 裡拿出來,放在一個新的數據結構當中。做驗證工作的節點和礦工也會驗證這個新的數據結構裡的腳本簽名,以確保交易有效。Segwit 升級在交易輸出中引入了一個新的見證字段,以確保隱私和性能。雖然見證數據不是爲了數據存儲而設計的,但它實際上給了我們一個存儲銘文元數據等內容的機會。我們通過下圖來更加形象地理解隔離見證:

Taproot

P2TR是比特幣的一種交易輸出類型,它是在2021年進行的Taproot升級中引入的,它使得不衕的交易條件可以更加隱私地存儲在區塊鏈中。在Ordinals的銘文中,P2TR 扮演著至關重要的角色。銘文本質上是將特定的數據內容嵌入到比特幣交易中,而Taproot升級,尤其是P2TR,使得這種嵌入數據變得更加靈活和經濟。

首先,由於Taproot腳本的存儲方式,我們可以在Taproot腳本路徑支出腳本中存儲銘文內容,這些腳本在內容方麵幾乎沒有任何限製,衕時還能穫得見證數據的折扣,使得存儲銘文內容相對經濟。由於Taproot腳本的消費隻能從已經存在的Taproot輸出中進行,因此,銘文採用了兩階段的提交/揭示流程。首先,在提交交易中,創建了一個承諾包含銘文內容的腳本的Taproot輸出。然後,在揭示交易中,消費了由提交交易創建的輸出,從而在鏈上揭示了銘文內容。

這種做法大大降低了對資源的消耗。如果不使用P2TR,見證信息會存儲在交易的輸出中。這樣,隻要這筆輸出未被消費,見證信息就會一直存儲在UTXO集中。相反,如果使用了P2TR,見證信息不會出現在提交階段生成的交易中,因此它不會被寫入UTXO集。隻有當這筆UTXO被消費時,見證信息才會在揭示階段的交易輸入中出現。P2TR讓元數據能夠寫入比特幣區塊鏈,但卻從未出現在UTXO集中。由於維護/修改UTXO集需要更多的資源,因此這種做法可以節省大量資源。

銘文

Ordinals 協議利用了SegWit 放寬了對寫入比特幣網絡內容的大小限製,將銘文內容存儲在見證數據中。使其可以存儲最大4MB的元數據。Taproot 使得在比特幣交易中存儲任意見證數據變得更加容易,允許 Ordinals 開髮人員 Casey Rodarmor 將舊操作碼(OP_FALSE、OP_IF、OP_PUSH)重新用於他所描述的「信封」爲被稱爲「銘文」存儲任意數據。

鑄造銘文的流程包含以下兩個步驟:

首先,需要在提交交易中創建一個承諾到包含銘文內容的腳本的Taproot輸出。存儲的格式是Taproot,即前一筆交易的輸出是P2TR (Pay-To-Taproot),後一筆交易的輸入,在見證的Taproot script中嵌入特定格式的內容;首先將字符串ord 入棧,以消除銘文有其他用途的歧義。OP_PUSH 1指示下一次推送包含內容類型,併OP_PUSH 0指示後續數據推送包含內容本身。大型銘文必鬚使用多次數據推送,因爲 taproot 的少數限製之一是單個數據推送不得大於 520 字節。此時銘文的數據已對應到交易輸出的UTXO上,但是未被公開。

其次,需要在揭示交易中消費提交交易創建的那個輸出。在這個階段,通過將那筆銘文對應的UTXO作爲輸入,髮起交易。此時,其對應的銘文內容被公開至全網。

通過上述兩個步驟,銘文內容已與被銘刻的UTXO進行綁定。再根據上文介紹的對於聰的定位,銘刻是在其輸入的UTXO對應的第一個聰上進行,銘文內容包含在顯示交易的輸入中。根據上文介紹的對於聰的流轉、跟蹤的介紹,這個被銘刻上特殊內容的聰可以被轉移、購買、出售、丟失和恢覆。需要註意的是,不可以重覆銘刻,否則後麵的銘文是無效的。

我們將通過銘刻一個BTC NFT小圖片的例子來詳細説明這個過程,這個過程主要包括之前提到的提交(commit)和揭露(reveal)兩個階段。首先,我們看到第一筆交易的Hash ID是 2ddf9…f585c。可以註意到,這筆交易的輸出不包含見證數據,網頁中也沒有相關的銘文信息。

接著,我們查看第二階段的記録,其Hash ID是e7454…7c0e1。在這裡,我們可以看到Ordinals inscription 的信息,也就是見證的銘文內容。這筆交易的輸入地址是前一個交易的輸出地址,而輸出的0.00000546BTC(546聰)則是將這個NFT髮送到自己的地址。衕時,我們也可以在Sat 1893640468329373中找到這個銘文所在的聰。

在比特幣錢包中,我們可以看到這個資産。如果我們想要交易這個NFT,可以直接將其髮送給其他人的地址,也就是將這筆UTXO髮送出去,這樣就完成了銘文的流轉。

四、 比特幣錢包

在我們了解了什麽是 Ordinals 生態、聰的流轉以及銘文的相關知識後,目前有許多應用場景,無論是 BRC-20,ORC-20,BRC-721,GBRC-721等相關衍生協議的出現,需要我們有對應的錢包來支持和顯示出代幣信息或者 NFT 小圖片。本節我們會介紹一下不衕比特幣錢包地址的概念和特點。

比特幣地址以 1、3 或 bc1 開頭。就像電子郵件地址一樣,它們可以與其他比特幣用戶共享,這些用戶可以使用它們將比特幣直接髮送到自己的錢包。從安全角度來看,比特幣地址沒有任何敏感內容。它可以在任何地方髮布,而不會危及帳戶的安全。與電子郵件地址不衕,我們可以根據需要隨時創建新地址,所有這些地址都會將資金直接存入您的錢包。事實上,許多現代錢包會自動爲每筆交易創建一個新地址,以最大限度地保護隱私。錢包隻是地址和解鎖其中資金的鑰匙的集合。首先我們要知道比特幣錢包的地址是怎麽産生的。

比特幣私鑰和公鑰

比特幣採用橢圓曲線Secp256k1,“私鑰”是 1 到 n−1 之間的隨機數,n是個很大的數(256 個比特位),n 用科學計數法錶示約爲1.15792*10^77。這個範圍是極大的,我們是幾乎無法猜出其他人的私鑰的。這個隨機整數私鑰可以用 256 比特位錶示,存在多種編碼方式。如果使用WIF、WIF-compressed 形式的私鑰是沒有加密的,可以解碼得到原始的那個“隨機整數”。另一種方式是 BIP38,提議用 AES 算法對私鑰進行加密,這種方案得到的私鑰以字符 6P 開頭,這種私鑰必鬚輸入密碼才能導入到各種比特幣錢包中,這就是我們平時常用的私鑰。

隨後我們會利用橢圓曲線公式 K = kG,由私鑰 k 來生成比特幣的公鑰 K,G爲 Base Point,它是 secp256k1 的一個參數。可以得到 K 的兩個坐標,就是公鑰的兩種錶達方式,分別爲“Uncompressed format”和“Compressed format”。

  1. Uncompressed 形式,就是把兩個坐標 x 和 y 直接連接在一起,再在前麵加個 0x04 前綴即可;
  2. Compressed 形式,就是當 y 爲偶數時,編碼爲 02 x,當 y 爲奇數時,編碼爲 03 x;

比特幣地址

比特幣各種類型的地址如下圖可示,共有四種錶示方法:

1.Legacy (P2PKH)格式

範例:1Fh7ajXabJBpZPZw8bjD3QU4CuQ3pRty9u

地址以“1”開頭,是比特幣最初的地址格式,至今仍在使用。由公鑰通過 Hash 計算後得到,也被稱爲P2PKH 是 Pay To PubKey Hash(付款至公鑰哈希)的縮寫。

2.Nested SegWit (P2SH)格式

範例:3KF9nXowQ4asSGxRRzeiTpDjMuwM2nypAN

地址以”3”開頭,P2SH 是Pay To Script Hash(支付至腳本哈希)的縮寫,它支持比Legacy 地址更覆雜的功能。Nested P2SH,穫取現有的P2SH地址(以“3”開頭),併與SegWit地址一起封裝。

3.Native SegWit (Bech32)格式

在 BIP0173 中提出了 bc1 開頭的地址,它們是原生的隔離見證地址。Bech32編碼的地址,是專爲SegWit開髮的地址格式。Bech32在2017年底在BIP173被定義,該格式的主要特點之一是它不區分大小寫(地址中隻包含0-9,az),因此在輸入時可有效避免混淆且更加易讀。由於地址中需要的字符更少,地址使用Base32編碼而不是傳統的Base58,計算更方便、高效。數據可以更緊密地存儲在二維碼中。Bech32提供更高的安全性,更好地優化校驗和錯誤檢測代碼,將出現無效地址的機會降到最低。

Bech32地址本身與SegWit兼容。不需要額外的空間來將SegWit地址放入P2SH地址,因此使用Bech32格式地址,手續費會更低。Bech32地址比舊的Base58(Base58Check編碼用於將比特幣中的字節數組編碼爲人類可編碼的字符串)地址有幾個優點:QR碼更小;更好地防錯;更加安全;不區分大小寫;隻由小寫字母組成,所以在閲讀、輸入和理解時更容易。

4.Taproot格式(P2TR)

Bech32 有個缺點:如果地址的最後一個字符是 p,則在緊接著 p 之前的位置插入或者刪除任意數量的字符 q 都不會使其 checksum 失效。

爲了緩解 Bech32 的上述缺點,在 BIP0350 中提出了 Bech32m 地址:

  1. 對於版本爲 0 的原生隔離見證地址,使用以前的 Bech32;
  2. 對於版本爲 1(或者更高)的原生隔離見證地址,則使用新的 Bech32m。

對於 Bech32m 地址,當版本爲 1 時,它們總是以 bc1p 開頭(即 Taproot 地址)。具體來説,就像本地隔離見證一樣,錢包可以由種子短語和密碼短語組成。這些用於生成擴展的公鑰和私鑰,用於在分層確定性錢包中派生任意路徑的地址。主要是儲存BRC-20以及BTC的NFT等。

五、關於我們

Spectrum Labs 是一個由專註於區塊鏈研究的碩士和博士,以及區塊鏈行業內部的資深人士組成的團隊。我們緻力於區塊鏈研究鏈技術及其應用,以幫助人們更好地了解區塊鏈。Spectrum Labs的主要業務包括研究報告的撰寫、課程的編寫和工具的開髮。

BTC NFT 中文社區是一個爲全球華人新人打造的BTC NFT中文交流廣場。

聲明:

  1. 本文轉載自[Spectrum Lab],著作權歸屬原作者[Ash Li, Noah Ho],如對轉載有異議,請聯繫Gate Learn團隊,團隊會根據相關流程盡速處理。
  2. 免責聲明:本文所錶達的觀點和意見僅代錶作者個人觀點,不構成任何投資建議。
  3. 文章其他語言版本由Gate Learn團隊翻譯, 在未提及Gate.io的情況下不得覆製、傳播或抄襲經翻譯文章。
即刻開始交易
註冊並交易即可獲得
$100
和價值
$5500
理財體驗金獎勵!