php小編百草將為你詳細解析Ordinal銘文協定的原理與技術細節。 Ordinal銘文協議是一種用於保護資料傳輸的加密協議,它採用了先進的加密演算法和認證機制,確保資料在傳輸過程中的安全性和完整性。本文將介紹Ordinal銘文協定的基本原理,包括金鑰交換、加密演算法、訊息認證碼等核心技術,並深入探討其在網路通訊中的應用。無論你是初學者還是專業人士,閱讀本文都將對你深入了解Ordinal銘文協議提供協助。
區塊鏈是一種多用戶記帳技術,也可稱為分散式資料庫。它將記錄按時間順序組成區塊,並擴展帳本。
我們用excel做了表格來說明區塊鏈的工作原理。一份excel文件代表了一個區塊鏈,其中每一個單獨表格表示一個個區塊,區塊按照時間順序從560331,560332.一直到最新的560336. 560336會在區塊內打包最近的交易。區塊內部主體部分就是我們在會計領域最常見的複式記帳法,一邊地址記做借出(debit)就是inputs from,另一邊地址記做貸入(credit)就是outputs to。 Value對應相應地址的BTC數量。 Inputs的幣的數量會大於Outputs幣的數量,差額就是用戶層面的轉帳費,也是礦工(記帳人)的取得的手續費。區塊頭部會取得上一個區塊高度,上一個區塊的雜湊值,本區塊的建立時間(時間戳記),和隨機數。那麼做為去中心化的記帳技術,到底是誰來搶到下一個區塊的記帳權呢?靠的就是這個隨機數和與之對應的雜湊值。擁有算力的礦工透過對目前區塊的隨機數進行哈希計算,最先得到符合條件哈希值的礦工擁有下一個區塊的記帳權並且贏得區塊獎勵和轉帳費。最後是腳本區域,可以用來做一些擴充應用,例如腳本op_return可以當做附言欄。需要注意的是,在實際的區塊中,腳本區是附著在input和output資訊中的,而不是真的另外單獨一個區域。例如附著在input的腳本是解鎖腳本(ScriptSig),需要錢包位址進行私鑰簽章授權允許轉出,而附著在output的腳本是鎖定腳本(ScriptPubKey),用來設定收到該BTC的解鎖條件(一般情況條件就是「有對應私鑰的人才能消費」)。
原始的input和output的資料結構表展示了交易資訊的附帶參數。其中,解鎖腳本(ScriptSig)作為私鑰授權的一部分,也被稱為「見證資料」(witness data)。
雖然比特幣網路已經運行了超過10年,但並未發生過顯著事件,但交易成本多次飆升到不再可行的高點。因此,比特幣開發人員一直在討論如何最佳擴展網絡,以處理未來不斷增長的交易量。
2017年,比特幣開發社群分為兩派,一派支援軟分叉的SegWit功能,另一派則主張直接擴大區塊大小,被稱為「大區塊」派。這一分裂引發了激烈的辯論。
我們在上文提到了解鎖腳本需要用到私鑰授權生成“見證數據”,那麼是不是可以把這個見證數據從區塊中分離,從而變相增加每個區塊可容納的交易數呢?隔離見證(Segregated Witness)在2017年8月啟動正式啟動。它的實作方式正是將所有的交易資料分成兩部分,一部分是交易的基本資訊(Transaction Data),另一部分是交易的簽章資訊(Witness Data),並把簽章資訊保存在一個新的資料結構中,是被稱為「隔離見證(witness)」的新區塊中,並與原始交易分開傳輸。
在技術上,SegWit的實作意味著交易不再需要包含見證資料(不會佔用比特幣原本為區塊安排的 1MB 空間)。取而代之的是,在一個區塊的末尾,為見證數據創建了一個額外獨立的空間。它支援任意的數據轉賬,並有一個折扣的 "區塊重量(block weight)",巧妙地將大量的數據保持在比特幣的區塊大小限制內,以避免硬分叉的需要。這樣,比特幣交易的交易資料大小提高了上限,同時降低了簽名資料的交易費用。在SegWit升級之前,比特幣的容量上限是1MB,而SegWit之後,雖然單純交易的容量上限仍舊是1M,但隔離見證空間的大小達到了4MB。
Taproot 於2021年11月實施,由 3 項不同的比特幣改進提案 (BIP) 組成,其中包括:Taproot、Tapscript 及其名為「Schnorr 簽署」的全新數位簽章方案。 Taproot 旨在為比特幣用戶帶來許多好處,例如提升交易隱私和降低交易費用。也將讓比特幣執行更多複雜的交易,從而拓寬應用場景(新增加了一些操作碼opcodes)。
這些更新是 Ordinals NFT的關鍵推動因素,它將NFT資料儲存在 Taproot 腳本路徑的花費腳本(spent script)中(見證資料空間)。這次升級使得結構化和儲存任意的見證資料變得更加容易,為 "ord" 標準奠定了基礎。隨著資料要求的放寬,假設一個交易可以用其交易和見證資料填滿整個區塊-- 達到4MB的區塊大小(見證資料空間)限制-- 大大擴展了可以放在鏈上的媒體類型。
也許有人會問,既然在腳本中放入一些字串,那對這些字串沒有限制條件嗎?萬一真的執行這些腳本呢?如果隨便放內容,那會不會出現錯誤代碼拒絕出塊呢?這就要提到 OP_FALSE指令。 OP_FALSE(在比特幣腳本中也表示為「0」)確保腳本語言中的執行路徑永遠不會進入OP_IF分支,並保持未執行狀態。它充當腳本中的佔位符或空操作(No Operation),類似於高級語言中的“註釋”,來保證後續的程式碼不會執行。
以上是Ordinal銘文協議的原理與技術細節討論的詳細內容。更多資訊請關注PHP中文網其他相關文章!