隨著 Ordinals 協議誕生,比特幣生態迎來新的活力與熱潮。本文將深度介紹 Ordinals 協議的細節。
(前情提要:V神大讚比特幣Ordinals:建設文化回來了!BRC-20發展真的有做事 )
(背景補充:比特幣新FT協議「Rune符文」問世,Ordinals創辦人對BRC忍無可忍 )
一、比特幣背景
比特幣採用了一個類似於現金的交易模型(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 這兩個變數分別代表著比特幣交易的 「輸入」 與 「輸出」。比特幣的交易並不像傳統的帳戶餘額模型記錄帳戶形的資料變化,而是通過輸入和輸出來表示。
const std::vector vin;
const std::vector vout;
const int32_t nVersion;
const uint32_t nLockTime;
我們可以在 blockchain.com 隨機選一個交易記錄來分析,下圖展示了 Hash ID 為 0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2 的交易。其包含了一個輸入和兩個輸出。
通過使用 bitcoin-cli 的命令 getrawtransaction 和 decoderawtransaction,我們可以檢視上述交易的底層結構:
在比特幣網路中,交易輸出包含兩個重要資訊:地址(公鑰hash)和 金額(以比特幣為單位)。如果一個交易的輸出沒有在其他交易的輸入中使用,那麼這個交易輸出就被稱為未消費交易輸出(UTXO)。誰擁有 UTXO 中公鑰對應的私鑰,誰就有權使用(即花費)這個 UTXO。
我們觀察一下上面程式碼中的 「vin」 中的資訊,它表示這個交易所花費的 UTXO 來自於另外一個交易(其 id 為 7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18 )的第 0 個輸出(一個交易的輸出可以有多個,索引從 0 開始編號),我們可以從歷史交易中查找出這個 UTXO 的金額(比如為 0.1),所以這個交易中這個使用者花費了 0.1 BTC,數值 0.1 不需要顯式地寫在 交易中,而是通過查詢 UTXO 資訊來得到的。這個交易的 「vout」 有兩個輸出,這兩個輸出為兩個新的 UTXO,對應了新的餘額以及持有人,直到有另外的交易把它們作為輸入消費掉。
支付模型
為了更好地理解比特幣網路的支付模型,我們通過一個例子介紹由 A 支付給 B 金額為 n 的比特幣的支付流程。下圖展示了使用者 A 傳送 3 個比特幣給使用者 B 的過程。
- 對於使用者 A,首先需要確定其擁有的所有 UTXO 集合,即使用者 A 可以支配的所有比特幣;
- A 從這個集合中選取一個或者多個 UTXO 作為交易的輸入,這些輸入的金額之和為 m (2+0.8+0.5=3.3 BTC) 要大於需要支付的金額 n (3 BTC);
- 使用者 A 為交易設定兩個輸出,一個輸出支付給 B 的地址,金額是 n (3 BTC),另一個輸出支付給 A 自己的一個 找零地址 ,金額為 m-n-fee (3.3-3-0.001=0.299 BTC)。使用者的錢包通常由多個地址組成,一般情況下每個地址只使用一次,找零預設返回給一個新的地址;
- 等礦工將這筆交易打包上鏈進行確認後,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 個聰的表示方式。
對於聰的表達方式有多種:
- 整數符號 :例如 2099994106992659,表示該聰按照挖掘順序所分配的序號。
- 十進位制符號 :例如 3891094.16797,第一個數位表示挖掘該聰的區塊高度,第二個數位表示聰在區塊中的編號。
- 度數符號 :例如 3°111094′214″16797‴,第一個數位是週期,從 0 開始編號,第二個數位是減半紀元的區塊索引,第三個數位是難度調整期間的區塊索引,最後一個數位是區塊中 sat 的索引。
- 百分比符號 :例如 99.99971949060254%,表示該聰在比特幣供應量中的位置,以百分比表示。
- 名稱 :例如 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 個聰的流轉路徑為:
- 挖礦產生 10 個聰,編號是 [100 *, 110)。* 其表示編號為第 100 到第 109 個聰存放在 id 為 abc123 的 UTXO 中,其所有者為使用者 A。
- 在 A 進行轉帳時,10 個聰分成兩份,每份 5 個聰。這裡採用 「先進先出」 的原則,即聰的編號排序是按照它們在交易輸出中的索引決定的。假設輸出的順序先是使用者 A,然後是使用者 B,那麼使用者 A 剩餘 5 個聰的序號是 [100, 105),存放在 id 為 abc456 的 UTXO 中,而使用者 B 的 5 個聰的序號是 [105, 110),存放在 id 為 abc789 的 UTXO 中。
稀有度(Rare Satoshi)
作為 Ordinals 協議的衍生玩法,聰的稀有度可以根據它們的挖掘順序來定義。這將導致一些特殊的聰具有不同的稀有度。以下是不同聰的稀有程度:
- common 普通級:除區塊第一個聰外的任何聰(總供應量為 2100 兆)
- uncommon 優良級:每個區塊的第一個聰(總供應量為 6929999)
- rare 稀有級:每個難度調整期的第一個聰(總供應量為 3437)
- epic 史詩級:每次減半後的第一個聰(總供應量為 32)
- legendary 傳奇級:每個週期的第一個聰(總供應量為 5)
- 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 是什麼,以及他們在銘文中扮演什麼角色。最後我們會介紹銘文的方式。
延伸閱讀:馬斯克狠酸NFT:圖片沒上區塊鏈!比特幣社群超譯「他看好Ordinals」
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 是將某些交易簽名資料 (見證資料) 與交易分開。
延伸閱讀:詳解》比特幣隔離見證 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 集需要更多的資源,因此這種做法可以節省大量資源。
延伸閱讀:造就最純粹密碼學貨幣》比特幣 Taproot 比你想的還寬
銘文
Ordinals 協議利用了 SegWit 放寬了對寫入比特幣網路內容的大小限制,將銘文內容儲存在見證資料中。使其可以儲存最大 4MB 的元資料。Taproot 使得在比特幣交易中儲存任意見證資料變得更加容易,允許 Ordinals 開發人員 Casey Rodarmor 將舊操作碼(OP_FALSE、OP_IF、OP_PUSH)重新用於他所描述的「信封」為被稱為「銘文」儲存任意資料。
鑄造銘文的流程包含以下兩個步驟:
- 首先,需要在提交交易中建立一個承諾到包含銘文內容的指令碼的 Taproot 輸出。儲存的格式是 Taproot,即前一筆交易的輸出是 P2TR (Pay-To-Taproot),後一筆交易的輸入,在見證的 Taproot script 中嵌入特定格式的內容;首先將字串 ordn入棧,以消除銘文有其他用途的歧義。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 用科學計數法表示約為:
這個範圍是極大的,我們是幾乎無法猜出其他人的私鑰的。這個隨機整數私鑰可以用 256 位元位表示,存在多種編碼方式。如果使用 WIF、WIF-compressed 形式的私鑰是沒有加密的,可以解碼得到原始的那個 「隨機整數」。另一種方式是 BIP38 ,提議用 AES 演算法對私鑰進行加密,這種方案得到的私鑰以字元 6P 開頭,這種私鑰必須輸入密碼才能匯入到各種比特幣錢包中,這就是我們平時常用的私鑰。
隨後我們會利用橢圓曲線公式 K = kG,由私鑰 k 來生成比特幣的公鑰 K,G 為 Base Point,它是 secp256k1 的一個引數。可以得到 K 的兩個座標,就是公鑰的兩種表達方式,分別為 「Uncompressed format」 和 「Compressed format」。
- Uncompressed 形式,就是把兩個座標 x 和 y 直接連線在一起,再在前面加個 0x04 字首即可;
- Compressed 形式,就是當 y 為偶數時,編碼為 02 x,當 y 為奇數時,編碼為 03 x;
比特幣地址
比特幣各種型別的地址如下圖可示,共有四種表示方法:
1. Legacy (P2PKH) 格式
範例:1Fh7ajXabJBpZPZw8bjD3QU4CuQ3pRty9u
地址以 「1」 開頭,是比特幣最初的地址格式,至今仍在使用。由公鑰通過 Hash 計算後得到,也被稱為 P2PKH 是 Pay To PubKey Hash(付款至公鑰hash)的縮寫。
2. Nested SegWit (P2SH) 格式
範例:3KF9nXowQ4asSGxRRzeiTpDjMuwM2nypAN
地址以 “3” 開頭,P2SH 是 Pay To Script Hash(支付至指令碼hash)的縮寫,它支援比 Legacy 地址更復雜的功能。Nested P2SH,獲取現有的 P2SH 地址 (以 「3」 開頭),並與 SegWit 地址一起封裝。
3. Native SegWit (Bech32) 格式
範例:bc1qf3uwcxaz779nxedw0wry89v9cjh9w2xylnmqc3
在 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 地址:
- 對於版本為 0 的原生隔離見證地址,使用以前的 Bech32;
- 對於版本為 1(或者更高)的原生隔離見證地址,則使用新的 Bech32m。
對於 Bech32m 地址,當版本為 1 時,它們總是以 bc1p 開頭(即 Taproot 地址)。具體來說,就像本地隔離見證一樣,錢包可以由種子短語和密碼短語組成。這些用於生成擴充套件的公鑰和私鑰,用於在分層確定性錢包中派生任意路徑的地址。主要是儲存 BRC-20 以及 BTC 的 NFT 等。
📍相關報導📍
可在比特幣網路發穩定幣!閃電網路Taproot Assest如何實現真BRC-20