Ordinals銘文最完整指南:看完這篇,認知將超過99%的人

作者:Ash Li, Noah Ho

來源:Spectrum Lab

一、比特幣背景

比特幣採用了一個類似於現金的交易模型(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,我們可以查看上述交易的底層結構:

{ “version”: 1, “locktime”: 0, “vin”: [
{
“txid”: “7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18”,
“vout”: 0,
“scriptSig” : “3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813[ALL] 0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04496789d172787ec3457eee41c04490380 : 4294967295 } ], “vout”: [
{
“value”: 0.01500000,
“scriptPubKey”: “OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG”
},
{
“value”: 0.08450000,
“scriptPubKey”: “OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG”,
}
]
}

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

我們觀察一下上面程式碼中的「vin」中的信息,它表示這個交易所花費的UTXO 來自於另外一個交易(其id 為7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a99fd8149a41d81de548f0a65a8a99f065a 0 開始編號),所以這個交易中這個用戶花費了0.1 BTC,數值0.1 不需要顯式地寫在交易中,而是透過查找UTXO 資訊來得到的。這個交易的「vout」有兩個輸出,這兩個輸出為兩個新的UTXO,對應了新的餘額以及持有人,直到有另外的交易把它們作為輸入消費掉。

支付模型

為了更好地理解比特幣網路的支付模型,我們透過一個例子介紹由A支付給B金額為n的比特幣的支付流程。下圖展示了用戶A發送3個比特幣給用戶B的過程。

Ordinals銘文最完整指南:看完這篇,認知將超過99%的人

  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自己的一個找零地址,金額為mn-fee(3.3-3-0.001= 0.299 BTC)。用戶的錢包通常由多個位址組成,一般情況下每個位址只使用一次,找零預設回傳給一個新的位址;
  4. 等礦工將這筆交易打包上鍊確認後,B就可以收到這筆交易資訊。因為區塊的大小有上限(約1 MB),所以礦工會優先確認交易費率(fee_rate=fee/size )高的交易,以獲得最高的手續費回報。我們可以在mempool看到即時的挖礦transaction fee 的情況。如果我們在轉帳過程中如果想要最快進行確認,就可以選擇高優先權(High Priority)或自訂(custom)一個適當的交易費率;

Ordinals銘文最完整指南:看完這篇,認知將超過99%的人

二、聰的編號與追蹤

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

聰的編號

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

Ordinals銘文最完整指南:看完這篇,認知將超過99%的人

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

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

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

Ordinals銘文最完整指南:看完這篇,認知將超過99%的人

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

Ordinals銘文最完整指南:看完這篇,認知將超過99%的人

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

Ordinals銘文最完整指南:看完這篇,認知將超過99%的人

聰的流轉

因為每個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也並非以此形式表達。

Ordinals銘文最完整指南:看完這篇,認知將超過99%的人

在上述的交易中,用戶A的10個聰的流轉路徑為:

  1. 挖礦產生10個聰,編號是[100*110)。*其表示編號為第100到第109個聰存放在id為abc123的UTXO中,其所有者為用戶A。[100*110)。*其表示编号为第100到第109个聪存放在id为abc123的UTXO中,其所有者为用户A。

  2. 在A進行轉帳時,10個聰分成兩份,每份5個聰。這裡採用「先進先出」的原則,即聰的編號排序是按照它們在交易輸出中的索引決定的。假設輸出的順序先是用戶A,然後是用戶B,那麼用戶A剩餘5個聰的序號是[100105),存放在id為abc456的UTXO中,而用戶B的5個聰的序號是[105110),存放在id為abc789的UTXO中。[100105),存放在id为abc456的UTXO中,而用户B的5个聪的序号是[105110),存放在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是什麼,以及他們在銘文中扮演什麼角色。最後我們會介紹銘文的方式。

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 升級在交易輸出中引入了一個新的見證字段,以確保隱私和效能。雖然見證資料不是為了資料儲存而設計的,但它實際上給了我們一個儲存銘文元資料等內容的機會。我們透過下圖更形像地理解隔離見證:

Ordinals銘文最完整指南:看完這篇,認知將超過99%的人

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)重新用於他所描述的“信封”為被稱為“銘文”存儲任意數據。

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

  1. 首先,需要在提交交易中建立一個承諾到包含銘文內容的腳本的Taproot輸出。儲存的格式是Taproot,即前一筆交易的輸出是P2TR (Pay-To-Taproot),後一筆交易的輸入,在見證的Taproot script中嵌入特定格式的內容;首先將字串ord 入棧,以消除銘文有其他用途的歧義。 OP_PUSH 1指示下次推送包含內容類型,並OP_PUSH 0指示後續資料推送包含內容本身。大型銘文必須使用多次資料推送,因為taproot 的少數限制之一是單一資料推送不得大於520 位元組。此時銘文的資料已對應到交易輸出的UTXO上,但未被公開。
  2. 其次,需要在揭示交易中消費提交交易所創造的那個輸出。在這個階段,透過將那筆銘文對應的UTXO作為輸入,發起交易。此時,其對應的銘文內容被公開至全網。

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

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

Ordinals銘文最完整指南:看完這篇,認知將超過99%的人

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

Ordinals銘文最完整指南:看完這篇,認知將超過99%的人

Ordinals銘文最完整指南:看完這篇,認知將超過99%的人

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

Ordinals銘文最完整指南:看完這篇,認知將超過99%的人

四、 比特幣錢包

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

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

比特幣私鑰和公鑰

比特幣採用橢圓曲線Secp256k1,「私鑰」是1到n−1之間的隨機數,n是個很大的數(256 個比特位),n 用科學計數法表示約為:

Ordinals銘文最完整指南:看完這篇,認知將超過99%的人

這個範圍是極大的,我們是幾乎無法猜出其他人的私鑰的。這個隨機整數私鑰可以用256 位元位表示,有許多編碼方式。如果使用WIF、WIF-compressed 形式的私鑰是沒有加密的,可以解碼得到原始的那個「隨機整數」。另一種方式是BIP38,提議用AES 演算法對私鑰進行加密,這種方案得到的私鑰以字元6P 開頭,這種私鑰必須輸入密碼才能導入到各種比特幣錢包中,這就是我們平時常用的私鑰。

接著我們會利用橢圓曲線公式K = kG,由私鑰k 來產生比特幣的公鑰K,G為Base Point,它是secp256k1 的一個參數。可以得到K 的兩個座標,就是公鑰的兩種表達方式,分別為「Uncompressed format」和「Compressed format」。

Ordinals銘文最完整指南:看完這篇,認知將超過99%的人

  • Uncompressed 形式,就是把兩個座標x 和y 直接連結在一起,再在前面加個0x04 字首即可;
  • Compressed 形式,就是當y 為偶數時,編碼為02 x,當y 為奇數時,編碼為03 x;

比特幣地址

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

Ordinals銘文最完整指南:看完這篇,認知將超過99%的人Reference: https://en.bitcoin.it/wiki/Invoice_address

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)格式

範例: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等。

Total
0
Shares
Related Posts