TW202409862A - 用於緊密腳本交易之傳訊協定 - Google Patents

用於緊密腳本交易之傳訊協定 Download PDF

Info

Publication number
TW202409862A
TW202409862A TW112112083A TW112112083A TW202409862A TW 202409862 A TW202409862 A TW 202409862A TW 112112083 A TW112112083 A TW 112112083A TW 112112083 A TW112112083 A TW 112112083A TW 202409862 A TW202409862 A TW 202409862A
Authority
TW
Taiwan
Prior art keywords
transaction
transactions
node
compact
blockchain
Prior art date
Application number
TW112112083A
Other languages
English (en)
Inventor
帕特里克 考格蘭
張衛
阿萊西奧 帕加尼
巴席姆 阿瑪爾
Original Assignee
瑞士商區塊鏈授權股份有限公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 瑞士商區塊鏈授權股份有限公司 filed Critical 瑞士商區塊鏈授權股份有限公司
Publication of TW202409862A publication Critical patent/TW202409862A/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/12Applying verification of the received information
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3247Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/56Financial cryptography, e.g. electronic payment or e-cash

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Technology Law (AREA)
  • Multimedia (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Document Processing Apparatus (AREA)
  • Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本案提供一種將區塊鏈交易傳輸至一區塊鏈網路之節點的電腦實施方法,其中一緊密交易為一區塊鏈交易,該區塊鏈交易包含i)至少部分地以一高階(HL)腳本語言編寫之一CS,其中該CS經組配以執行等效於以LL腳本語言編寫之一擴展腳本(ES)的一操作,且其中該方法包含:獲得緊密交易之一集合;將緊密交易之該集合中之一或多者傳輸至至少一個其他CS啟用節點;將緊密交易之該集合中之一或多者轉換成一或多個各別擴展交易,其中該轉換包含針對一給定緊密交易,以一等效ES來替換彼緊密交易之該CS;以及將該一或多個擴展交易傳輸至至少一個CS停用節點。

Description

用於緊密腳本交易之傳訊協定
發明領域
本揭露內容係關於一種將區塊鏈交易傳輸至區塊鏈網路之節點的方法。
發明背景
區塊鏈係指一種形式之分散式資料結構,其中在分散式同級間(P2P)網路(在下文被稱作「區塊鏈網路」)中之多個節點中之各者處維護區塊鏈之複本且廣泛地發布該等複本。區塊鏈包含資料區塊鏈,其中各區塊包含一或多個交易。除所謂的「比特幣基地(coinbase)交易」以外,各交易亦指回至序列中之先前交易,該序列可向上橫跨一或多個區塊,直至一或多個coinbase交易。下文論述coinbase交易。經提交至區塊鏈網路之交易包括於新區塊中。新區塊係藉由常常被稱作「挖掘(mining)」之程序創建,該程序涉及多個節點中之各者競爭執行「工作量證明」,亦即,基於等待包括於區塊鏈之新區塊中的有序及經驗核之未決交易之所定義集合的表示而解決密碼編譯難題。應注意,可在一節點處修剪區塊鏈,且可經由僅發布區塊標頭來達成區塊之發布。
區塊鏈中之交易用以執行以下操作中之一或多者:轉移數位資產(亦即,數個數位符記);對虛擬化分類帳或註冊表中之一組日記條目進行排序;接收及處理時戳條目;及/或按時間對索引指標進行排序。亦可利用區塊鏈以便對區塊鏈之上的額外功能性進行分層。區塊鏈協定可允許將額外使用者資料或資料之索引儲存於交易中。對於可儲存於單個交易內之最大資料容量不存在預先指定之限制,且因此可併入愈來愈複雜之資料。舉例而言,此可用於將電子文件或音訊或視訊資料儲存於區塊鏈中。
區塊鏈網路之節點(其常常被稱作「挖掘者」)執行下文將詳細描述之分散式交易註冊及驗證程序。總體而言,在此程序期間,節點驗核交易且將其插入至區塊範本中,針對該區塊範本,該等交易嘗試識別有效的工作量證明解決方案。一旦找到有效解決方案,便將新區塊傳播至網路之其他節點,因此使得各節點能夠在區塊鏈上記錄新區塊。為了使交易記錄於區塊鏈中,使用者(例如,區塊鏈用戶端應用程式)將交易發送至網路之節點中之一者以供傳播。接收交易之節點可競相尋找將經驗核交易併入至新區塊中之工作量證明解決方案。各節點經組配以強制實行同一節點協定,其將包括交易有效之一或多個條件。無效交易將不被傳播或併入至區塊中。假定交易經驗核且藉此經接受至區塊鏈上,則交易(包括任何使用者資料)將因此作為不可變的公用記錄在區塊鏈網路中之節點中之各者處保持註冊及編索引。
成功地解決工作量證明難題以創建最新區塊之節點通常獲得被稱為「coinbase交易」之新交易的獎勵,該新交易分發一定金額之數位資產,亦即,數個符記。對無效交易之偵測及拒絕係藉由競爭節點之動作強制實行,該等競爭節點充當網路之代理且經激勵以報告及阻止非法行為。資訊之廣泛發布允許使用者連續地稽核節點之效能。對僅區塊標頭之發布允許參與者確保區塊鏈之持續完整性。
在「基於輸出」之模型(有時被稱作基於UTXO之模型)中,給定交易之資料結構包含一或多個輸入及一或多個輸出。任何可支出輸出皆包含一元素,該元素指定可自進行中之交易序列導出的數位資產之金額。可支出輸出有時被稱作UTXO (「未支出交易輸出」)。該輸出可進一步包含指定用於未來兌換該輸出之條件的鎖定腳本。鎖定腳本係定義驗核及轉移數位符記或資產所必需之條件的述詞。交易(除coinbase交易以外)之各輸入包含指向先前交易中之此輸出的指標(亦即,參考),且可進一步包含用於解除鎖定所指向輸出之鎖定腳本的解除鎖定腳本。因此,考慮一對交易,將其稱為第一交易及第二交易(或「目標」交易)。第一交易包含至少一個輸出,該至少一個輸出指定數位資產之金額且包含定義解除鎖定該輸出之一或多個條件的鎖定腳本。第二目標交易包含至少一個輸入,該至少一個輸入包含指向第一交易之輸出的指標及用於解除鎖定第一交易之輸出的解除鎖定腳本。
在此模型中,當將第二目標交易發送至區塊鏈網路以在區塊鏈中傳播及記錄時,在各節點處應用之有效性準則中之一者將為解除鎖定腳本符合第一交易之鎖定腳本中所定義的所有一或多個條件。另一準則將為第一交易之輸出尚未由另一較早有效交易兌換。根據此等條件中之任一者發現目標交易為無效的任何節點將不會傳播該目標交易(作為有效交易,但可能註冊無效交易),亦不將該目標交易包括於待記錄於區塊鏈中之新區塊中。
發明概要
區塊鏈通常使用腳本語言來設定鎖定條件,該鎖定條件鎖定交易之特定輸出。類似地,以相同腳本語言編寫對應解除鎖定條件。腳本語言通常由資料(例如,公開金鑰及數位簽章)及對資料操作之函式構成。此腳本語言可被稱作低階腳本語言或原生腳本語言。作為特定實例,比特幣區塊鏈之原生腳本語言被稱為腳本(Script)。在Script中,函式被稱為「作業碼(opcode)」,其為「作業碼(operation code)」之縮寫。
在產生方(例如,使用者或機器)至網路之節點之間傳輸含有腳本之交易以供交易驗核。取決於使用案例,亦可在鏈外傳輸交易,例如使用者至使用者,或機器至機器。此外,亦藉由節點自身在整個區塊鏈網路中傳播交易。此外,需要(或至少選擇)至少一些節點以將交易儲存為區塊鏈之部分。
隨著區塊鏈技術之使用持續增加,需要分別降低傳輸及儲存交易之頻寬及儲存空間要求。此通常適用於所有區塊鏈。一些區塊鏈對交易之大小、交易內之腳本的大小及區塊之大小進行限制。相比之下,至少一個區塊鏈(例如,比特幣SV)允許交易具有無限的腳本大小且並不對區塊大小進行限制。此使得能夠建構複雜的鎖定腳本(諸如,智慧型合約),其可具有相當大的大小。此亦允許區塊鏈節點建構及發布接著需要儲存之大區塊。因此,當作為此特定區塊鏈之部分來傳輸及儲存交易時,甚至更需要節省頻寬及儲存空間。
迄今為止,鎖定腳本及解除鎖定腳本皆係以低階(亦即,原生)腳本語言編寫(亦即,表述或表示)。接著將含有此等腳本之交易提交至區塊鏈網路,且若有效,則將該等交易儲存於區塊鏈上。現在,替代以低階腳本語言編寫腳本(鎖定或解除鎖定),腳本可替代地以高階腳本語言編寫。如低階語言,高階語言包含資料及函式。然而,此等「高階函式」中之至少一些經組配以在一起執行時執行與由多個「低階函式」執行之操作相同的操作。換言之,一個高階函式可執行將通常需要多於一個低階函式之相同操作。此導致相較於以低階語言編寫之等效鎖定腳本,以高階語言編寫之腳本更緊密(亦即,大小減小)。
由於相較於現被稱作「擴展腳本」之以原生低階語言編寫之腳本,以高階語言編寫之腳本具有更緊密性質,因此該腳本被稱作「緊密腳本」。舉例而言,以高階語言編寫之鎖定腳本及解除鎖定腳本分別被稱作「緊密鎖定腳本」及「緊密解除鎖定腳本」。
應注意,對以特定程式設計語言「編寫」之腳本的任何參考可被視為意謂該腳本係以彼程式設計語言「表示」或「表述」。因此,除非上下文另外要求,否則對「編寫」之任何提及可用「表示」或「表述」替換。
通常將需要大型擴展腳本(在許多低階函式之意義上為大型的)之複雜鎖定或解除鎖定條件現可使用高階語言編寫為較小型緊密腳本。含有緊密腳本之交易的頻寬及儲存空間要求因此低於含有擴展腳本之交易的彼等要求。
以比特幣SV區塊鏈為特定實例。由於區塊大小不存在限制,因此區塊可含有數十億個交易。在交易大小不受限制之情況下,各交易可含有數百萬個低階函式(亦即,作業碼)。若各作業碼之大小為一個位元組,則彼等交易中之各者將為大約幾百萬個位元組。此會導致當將交易傳輸至區塊鏈網路時及當在網路上傳播交易及區塊時出現頻寬問題。節點亦會在儲存區塊鏈時面臨儲存負擔。單個高階函式可經組配以執行與數百萬個低階函式相同的操作。因此,若使用高階語言編寫各交易,則交易將具有大約幾百個位元組之大小,因此提供顯著的頻寬及儲存空間節省。若區塊鏈技術將繼續擴展,則此亦為至關重要的。
下文為可如何使用所描述技術達成儲存空間及頻寬節省之說明性實例。單個高階函式Z可執行與三個低階函式ABC相同的操作。傳輸至區塊鏈之包含函式ABC的十個交易將花費30個「字元」,亦即,儲存單元。使用高階腳本語言,傳輸至區塊鏈之包含等效函式Z的十個交易將花費10個字元。將Z=ABC之映射儲存於鏈上將花費5個字元,從而導致總計15個字元。各交易可使用映射自Z擴展至ABC。
吾人可將原生區塊鏈腳本視為組合語言。例如,Script語言包含大約100個作業碼。以組合語言編寫程式對於開發者而言為艱巨的任務,且所得程式碼常常為長的且難以理解。高階語言由於其緊密性及可讀性而常常被其他技術領域中之開發者使用。所得程式碼接著被轉換成電腦能讀取的組合語言。本申請案認識到,可藉由利用高階腳本語言將相同方法用於區塊鏈腳本。此高階語言可包括原生腳本語言之低階函式以及新的高階函式中之一些或全部,或其可完全獨立於此等函式且僅包括高階函式。
如下文所解釋,使用大型腳本之交易現可以更緊密形式傳播及儲存。此外,當執行區塊鏈腳本時,節點可選擇運行最高效的實施方案,該實施方案達成與低階函式(例如,作業碼)之對應清單相同的結果。最重要地,此在不改變原生區塊鏈協定之情況下達成。
在一些實例中,單個高階(HL)函式與單個低階(LL)函式之間可存在一對一映射。在此狀況下,HL函式仍可具有比對應LL函式小的大小,且因此仍提供頻寬及儲存空間節省。
在一些實施例中,HL語言可為甚至更高階語言(亦即,第二層高階語言)與LL語言之間的中階(IL)語言。此較高階語言為面向使用者之語言,亦即,使用者編寫腳本之語言。使用者(或其他類型之一方或實體)可以面向使用者之語言產生腳本,且彼腳本接著被轉換(例如,編譯)成中間語言。相較於LL語言,中間語言仍為高階語言。面向使用者之語言可為人類可讀語言,從而使其對使用者友好且允許使用者更易於寫出等效於LL語言之複雜腳本的腳本。可用Java原始程式碼(面向使用者)、Java位元組程式碼(中階)及機器可讀程式碼(低階)在面向使用者之語言、中階語言及低階語言之間進行類比。Java原始程式碼經編譯成Java位元組程式碼,其接著擴展成機器可讀程式碼。等效地,面向使用者之語言可經編譯成中階語言,其可接著擴展成低階語言。
取決於實施方案,相比以中階語言編寫之腳本,最高階語言(或確切而言,以最高階語言編寫之腳本,該最高階語言為面向使用者之語言)可更緊密。引入中階語言之優勢為在擴展至低階語言時節省了運算。亦即,替代將最高階直接擴展至低階,區塊鏈節點僅必須自中階語言擴展至低階語言。此運算節省進一步減輕區塊鏈節點上之負擔。
用於產生及傳播以緊密腳本語言(亦即,高於低階、原生腳本語言之腳本語言)表示之交易的例示性協定描述於GB2019748.9中。GB2019748.9提供將原生作業碼編碼成被稱作緊密腳本之壓縮(亦即,緊密)形式的高效方法。此使得能夠以使用者友好之方式表示複雜鎖定腳本,同時維持區塊鏈之安全性。使用描述於GB2019748.9中之技術或等效技術的區塊鏈節點將極大地受益於運算效率增益及顯著降低之頻寬及儲存空間要求。
當然,除非所有區塊鏈節點皆採用此協定,否則區塊鏈網路將包含經組配以處理包含緊密腳本之交易之一些節點及未經組配以處理此等交易之一些節點。此外,即使最終所有節點皆採用該協定,仍將至少存在期間一些但並非全部節點已採用該協定且組配其系統以處理緊密腳本交易之初始時段。
具有以緊密腳本表示之至少一個腳本(亦即,鎖定或解除鎖定)的交易在下文將被稱作緊密交易。在一些地點,其亦可被稱作呈元腳本(MS)形式之交易。包含以作業碼表示之腳本(或其他低階函式)的交易被稱作擴展交易。其亦被稱作呈規範形式之交易。應注意,所有緊密交易皆將具有對應規範形式,而規範交易可能未必具有緊密形式。緊密腳本(CS)啟用區塊鏈節點為可處理(例如,驗核)緊密交易之節點。其亦縮寫為MS節點。相反地,緊密腳本停用節點為無法處理緊密交易之節點。其亦被稱作規範節點。
緊密交易可能被CS停用節點拒絕(例如,失效),此係因為彼等節點無法處理且因此無法驗核緊密交易。此因為在區塊鏈網路上傳播且在區塊中發布之交易必須由其他節點驗核而引起問題。此為大部分區塊鏈之基本要求。因此,若CS停用節點無法驗核交易,則整個網路將受損。因此,需要解決此問題。
根據本文中所揭露之一個態樣,提供一種將區塊鏈交易傳輸至區塊鏈網路之節點的電腦實施方法,其中該區塊鏈網路包含一或多個緊密腳本(CS)啟用節點及一或多個CS停用節點,其中各CS啟用節點係經組配以處理緊密交易且各CS停用節點係未經組配以處理緊密交易,其中緊密交易為區塊鏈交易,該區塊鏈交易包含i)至少部分地以高階(HL)腳本語言編寫且包含一或多個HL函式之CS及/或ii)參考包含CS之輸出的輸入,其中在經執行時,各HL函式係經組配以執行等效於由低階(LL)腳本語言之一或多個LL函式所執行之操作的操作,其中該CS係經組配以執行等效於以LL腳本語言所編寫之擴展腳本(ES)的操作,且其中該方法係由第一CS啟用節點所執行且包含:獲得緊密交易之集合;將緊密交易之集合中之一或多者傳輸至至少一個其他CS啟用節點;將緊密交易之集合中之一或多者轉換成一或多個各別擴展交易,其中該轉換包含:針對給定緊密交易,以等效ES來替換彼緊密交易之CS;以及將一或多個擴展交易傳輸至至少一個CS停用節點。
根據本文中所揭露之一個態樣,提供一種自區塊鏈網路之節點接收區塊鏈交易的電腦實施方法,其中該區塊鏈網路包含一或多個緊密腳本(CS)啟用節點及一或多個CS停用節點,其中各CS啟用節點係經組配以處理緊密交易且各CS停用節點係未經組配以處理緊密交易,其中緊密交易為i)區塊鏈交易,該區塊鏈交易包含至少部分地以高階(HL)腳本語言編寫且包含一或多個HL函式之CS及/或ii)及/或ii)參考包含CS之輸出的輸入,其中在經執行時,各HL函式係經組配以執行等效於由低階(LL)腳本語言之一或多個LL函式所執行之操作的操作,其中該CS係經組配以執行等效於以LL腳本語言所編寫之擴展腳本(ES)的操作,且其中該方法係由CS停用節點所執行且包含:獲得緊密交易或緊密交易為緊密交易之指示;基於所獲得之緊密交易或其指示而判定緊密交易無法由CS停用節點所處理;將針對對應於緊密交易之擴展交易的請求傳輸至CS啟用節點;以及自CS啟用節點接收擴展交易,其中該擴展交易包含等效於緊密交易之CS的ES。
CS啟用節點例如自終端使用者獲得緊密交易。CS啟用節點將緊密交易中之一些或全部直接發送至其他CS啟用節點,亦即,以其緊密形式。相較於將緊密交易以其對應擴展形式傳輸,此節省了頻寬。
CS啟用節點亦將緊密交易中之一些或全部轉換成其擴展形式。亦即,用對應擴展腳本,亦即,完全以低階腳本語言編寫之腳本,替換給定緊密交易之緊密腳本。接著將擴展交易發送至CS停用節點,從而允許CS停用節點根據習知處理協定處理(例如,驗核)交易。
在一些實施例中,CS啟用節點可在接收到緊密交易(例如,自使用者或其他CS啟用節點)後,亦即,自動地將緊密交易及/或擴展交易發送至適當節點。替代地,可根據請求將緊密交易及/或擴展交易發送至適當節點。此減小跨區塊鏈網路發送之交易的數目,此係因為僅將交易發送至需要該等交易之彼等節點,例如因為彼等節點尚未看到網路上之交易或自其他節點接收到交易。
較佳實施例之詳細說明 1.   例示性系統綜述
圖1展示用於實施區塊鏈150之例示性系統100。系統100可包含封包交換網路101,其通常為諸如網際網路之廣域網際網路。封包交換網路101包含多個區塊鏈節點104,該等區塊鏈節點可經配置以在封包交換網路101內形成同級間(P2P)網路106。雖然未繪示,但區塊鏈節點104可經配置為接近完整的圖。各區塊鏈節點104因此高度連接至其他區塊鏈節點104。
各區塊鏈節點104包含同級者之電腦裝備,其中節點104中之不同節點屬於不同同級者。各區塊鏈節點104包含:處理設備,其包含一或多個處理器,例如一或多個中央處理單元(CPU)、加速器處理器、特殊應用處理器及/或場可規劃閘陣列(FPGA);以及其他裝備,諸如特殊應用積體電路(ASIC)。各節點亦包含記憶體,亦即,呈一或多個非暫時性電腦可讀媒體之形式的電腦可讀儲存器。記憶體可包含一或多個記憶體單元,其使用一或多個記憶體媒體,例如,諸如硬碟之磁性媒體;諸如固態硬碟(SSD)、快閃記憶體或EEPROM之電子媒體;及/或諸如光碟機之光學媒體。
區塊鏈150包含資料區塊鏈151,其中在分散式或區塊鏈網路106中之多個區塊鏈節點104中之各者處維護區塊鏈150之各別複本。如上文所提及,維護區塊鏈150之複本未必意謂儲存整個區塊鏈150。實情為,只要各區塊鏈節點150儲存各區塊151之區塊標頭(下文所論述),即可修剪區塊鏈150之資料。該鏈中之各區塊151包含一或多個交易152,其中在此上下文中之交易係指一種資料結構。該資料結構之性質將取決於用作交易模型或方案之部分的交易協定之類型。給定區塊鏈將始終使用一個特定交易協定。在一種常見類型之交易協定中,各交易152之資料結構包含至少一個輸入及至少一個輸出。各輸出指定表示作為財產之數位資產之數量的金額,其實例為輸出以密碼編譯方式被鎖定至的使用者103 (需要彼使用者之簽章或其他解決方案以便解除鎖定且藉此兌換或支出)。各輸入均指回至先前交易152之輸出,藉此連結交易。
各區塊151亦包含區塊指標155,該區塊指標指回至該鏈中之先前創建區塊151以便界定區塊151之順序次序。各交易152 (除了coinbase交易以外)包含指回至先前交易之指標,以便界定交易序列之次序(注意:允許交易152之序列進行分支)。區塊151之鏈一直追溯至起源區塊(Gb) 153,該起源區塊為該鏈中之第一區塊。鏈150中早期之一或多個原始交易152指向起源區塊153,而非先前交易。
區塊鏈節點104中之各者經組配以將交易152轉遞至其他區塊鏈節點104,且藉此使交易152在整個網路106中傳播。各區塊鏈節點104經組配以創建區塊151,且將同一區塊鏈150之各別複本儲存於其各別記憶體中。各區塊鏈節點104亦維護等待併入至區塊151中之交易152的有序集合(或「池」) 154。有序池154常常被稱作「記憶體池」。本文中之此術語並不意欲限於任何特定區塊鏈、協定或模型。該術語係指節點104已接受為有效的交易之有序集合,且對於該有序集合,節點104不必接受嘗試支出相同輸出之任何其他交易。
在給定的目前交易152j中,該(或各)輸入包含參考交易序列中之先前交易152i之輸出的指標,指定此輸出待在目前交易152j中兌換或「支出」。一般而言,先前交易可為有序集合154或任何區塊151中之任何交易。在目前交易152j經創建或甚至發送至網路106時,先前交易152i不一定存在,但先前交易152i將需要存在且經驗核以使目前交易有效。因此,本文中的「先前」係指藉由指標連結之邏輯序列中的前置者,未必為時間序列中之創建或發送時間,且因此,其未必排除無序地創建或發送交易152i、152j (參見下文關於孤立交易之論述)。先前交易152i同樣可被稱為前期或前置交易。
目前交易152j之輸入亦包含輸入授權,例如先前交易152i之輸出被鎖定至的使用者103a之簽章。又,目前交易152j之輸出可以密碼編譯方式鎖定至新使用者或實體103b。目前交易152j因此可將先前交易152i之輸入中所定義的金額轉移至如目前交易152j之輸出中定義的新使用者或實體103b。在一些狀況下,交易152可具有多個輸出以在多個使用者或實體(多個使用者或實體中之一者可為原始使用者或實體103a以便找零)間劃分輸入金額。在一些狀況下,交易亦可具有多個輸入以將來自一或多個先前交易之多個輸出的金額搜集在一起,且重新分發給當前交易之一或多個輸出。
根據基於輸出之交易協定,諸如比特幣,當諸如個別使用者或組織之一方103希望制定新交易152j (手動地或藉由該方所使用之自動化程序)時,則制定方將新交易自其電腦終端機102發送至接收者。該制定方或接收者將最終發送此交易至網路106之區塊鏈節點104中之一或多者(該等區塊鏈節點現今通常為伺服器或資料中心,但原則上可為其他使用者終端機)。亦不排除制定新交易152j之該方103可將交易直接發送至區塊鏈節點104中之一或多者,且在一些實例中不發送至接收者。接收交易之區塊鏈節點104根據應用於區塊鏈節點104中之各者處之區塊鏈節點協定而檢查該交易是否有效。區塊鏈節點協定通常需要區塊鏈節點104檢查新交易152j中之密碼編譯簽章是否匹配預期簽章,此取決於交易152之有序序列中的先前交易152i。在此基於輸出之交易協定中,此可包含檢查包括於新交易152j之輸入中的該方103之密碼編譯簽章或其他授權是否匹配定義於新交易指派之先前交易152i之輸出中的條件,其中此條件通常包含至少檢查新交易152j之輸入中的密碼編譯簽章或其他授權是否解除鎖定新交易之輸入所連結至的先前交易152i之輸出。該條件可至少部分地由包括於先前交易152i之輸出中的腳本定義。替代地,其可簡單地由區塊鏈節點協定單獨確定,或其由此等協定之組合確定。無論如何,若新交易152j有效,則區塊鏈節點104將其轉遞至區塊鏈網路106中之一或多個其他區塊鏈節點104。此等其他區塊鏈節點104根據相同區塊鏈節點協定應用相同測試,且因此將新交易152j轉遞至一或多個其他節點104,等等。以此方式,新交易在區塊鏈節點104之整個網路中傳播。
在基於輸出之模型中,是否指派(例如,支出)給定輸出(例如,UTXO)之定義為其是否已根據區塊鏈節點協定而由另一後繼交易152j之輸入有效地兌換。使交易有效之另一條件為該交易嘗試兌換之先前交易152i之輸出尚未由另一交易兌換。再次,若並非有效的,則將不在區塊鏈150中傳播(除非經標記為無效,且經傳播以用於警示)或記錄交易152j。此防止雙重支出,由此交易者試圖將同一交易之輸出指派多於一次。另一方面,基於帳戶之模型藉由維持帳戶餘額來防止雙重支出。因為同樣存在所定義之交易次序,所以帳戶餘額在任一時間皆具有單個所定義狀態。
除了驗核交易以外,區塊鏈節點104亦競相率先在通常被稱作挖掘之程序中創建交易區塊,該程序由「工作量證明」支援。在區塊鏈節點104處,將新交易增添至有效交易之有序池154,該等新交易尚未出現在記錄於區塊鏈150上之區塊151中。區塊鏈節點接著競相藉由嘗試解決密碼編譯難題而自交易之有序集合154組裝交易152之新有效區塊151。通常,此包含搜尋「臨時亂數」值,使得當臨時亂數與未決交易之有序池154的表示序連且經雜湊時,雜湊之輸出接著符合預定條件。例如,預定條件可為雜湊之輸出具有某一預定數目個前導零。應注意,此僅為一個特定類型之工作量證明難題,且不排除其他類型。雜湊函數之屬性為其輸出相對於其輸入為不可預測的。因此,此搜尋可僅藉由蠻力執行,因此在正試圖解決難題之各區塊鏈節點104處耗用大量處理資源。
解決難題之第一區塊鏈節點104向網路106宣佈此點,從而提供解決方案作為證明,該解決方案接著可由網路中之其他區塊鏈節點104容易地檢查(一旦給定雜湊之解決方案,便直接檢查其是否使得雜湊之輸出符合條件)。第一區塊鏈節點104將區塊傳播至接受該區塊且因此強制實行協定規則之其他節點的臨限共識。交易之有序集合154接著藉由區塊鏈節點104中之各者而記錄為區塊鏈150中之新區塊151。區塊指標155亦經指派給新區塊151n,該指標指回至鏈中之先前創建區塊151n-1。創建工作量證明解決方案所需之例如呈雜湊形式的大量工作量發信第一節點104遵循區塊鏈協定之規則的意圖。此等規則包括若交易指派與先前驗核之交易相同的輸出,則不接受該交易為有效的,否則被稱為雙重支出。一旦經創建,區塊151便無法被修改,此係因為在區塊鏈網路106中之區塊鏈節點104中之各者處辨識及維護該區塊。區塊指標155亦向區塊151強加順序次序。由於交易152記錄於網路106中之各區塊鏈節點104處的有序區塊中,因此,此提供交易的不可變公共分類帳。
應注意,在任何給定時間競相解決難題之不同區塊鏈節點104可基於在任何給定時間尚待發布之交易的池154的不同快照而如此操作,此取決於該等節點何時開始搜尋解決方案或接收該等交易之次序。不論誰首先解決其各別難題皆定義哪些交易152且以哪一次序包括於下一新區塊151n中,且更新未發布交易之當前池154。區塊鏈節點104接著繼續競相自未發布交易之新定義有序池154創建區塊,等等。亦存在用於解決可能出現的任何「分叉」之協定,分叉為二個區塊鏈節點104彼此在極短的時間內解決其難題之情況,使得區塊鏈的衝突觀點在節點104之間傳播。簡言之,無論分叉之哪個支叉生長得最長,皆成為決定性區塊鏈150。應注意,此不應影響網路之使用者或代理,此係因為相同交易將出現在二個分叉中。
根據比特幣區塊鏈(及大部分其他區塊鏈),成功地建構新區塊之節點104被授予在新特殊種類之交易中新指派額外接受金額之數位資產的能力,該新特殊種類之交易分發額外定義數量之數位資產(相較於代理間或使用者間交易,其將一定金額之數位資產自一個代理或使用者轉移至另一代理或使用者)。此特殊類型之交易通常被稱作「coinbase交易」,但亦可被稱為「起始交易」或「產生交易」。其通常形成新區塊151n之第一交易。工作量證明發信建構新區塊之節點遵循協定規則的意圖,從而允許稍後兌換此特殊交易。在可兌換此特殊交易之前,區塊鏈協定規則可能需要成熟期,例如100個區塊。常常,常規(非產生)交易152亦將在其輸出中之一者中指定額外交易費用,以進一步獎勵創建了發布彼交易之區塊151n的區塊鏈節點104。此費用通常被稱作「交易費用」,且在下文論述。
由於交易驗核及發布中所涉及之資源,區塊鏈節點104中之至少各者通常採用伺服器之形式,該伺服器包含一或多個實體伺服器單元或甚至整個資料中心。然而,原則上,任何給定區塊鏈節點104可採用使用者終端機或經網路連接在一起之使用者終端機之群組的形式。
各區塊鏈節點104之記憶體儲存軟體,該軟體經組配以在區塊鏈節點104之處理設備上運行以便根據區塊鏈節點協定執行其各別的一或多個角色且處置交易152。應理解,本文中歸於區塊鏈節點104之任何動作可由在各別電腦裝備之處理設備上運行的軟體執行。節點軟體可以一或多個應用程式實施於應用層或諸如作業系統層或協定層之下部層或此等層之任何組合處。
充當消費使用者之角色的多方103中之各者的電腦裝備102亦連接至網路101。此等使用者可與區塊鏈網路106互動,但不參與驗核交易或建構區塊。此等使用者或代理103中之一些可在交易中充當發送者及接收者。其他使用者可與區塊鏈150互動,而未必充當發送者或接收者。舉例而言,一些方可充當儲存實體,其儲存區塊鏈150之複本(例如,已自區塊鏈節點104獲得區塊鏈之複本)。
一些或所有方103可作為不同網路(例如,覆疊於區塊鏈網路106之上的網路)之部分而連接。區塊鏈網路之使用者(常常被稱作「用戶端」)可據稱為包括區塊鏈網路106之系統的部分;然而,此等使用者並非區塊鏈節點104,此係因為其不執行區塊鏈節點所需的角色。替代地,各方103可與區塊鏈網路106互動,且藉此,藉由連接至區塊鏈節點106 (亦即,與該區塊鏈節點通訊)而利用區塊鏈150。出於繪示之目的而展示二方103及其各別裝備102:第一方103a及其各別電腦裝備102a,以及第二方103b及其各別電腦裝備102b。應理解,更多此類方103及其各別電腦裝備102可存在且參與系統100,但為方便起見而未繪示。各方103可為個人或組織。僅作為說明,第一方103a在本文中被稱作愛麗絲,且第二方103b被稱作鮑勃,但應瞭解,此不具限制性,且在本文中對愛麗絲或鮑勃之任何提及皆可分別用「第一方」及「第二方」替換。
各方103之電腦裝備102包含各別處理設備,該處理設備包含一或多個處理器,例如一或多個CPU、GPU、其他加速器處理器、特殊應用處理器及/或FPGA。各方103之電腦裝備102進一步包含記憶體,亦即,呈一或多個非暫時性電腦可讀媒體之形式的電腦可讀儲存器。此記憶體可包含一或多個記憶體單元,其使用一或多個記憶體媒體,例如,諸如硬碟之磁性媒體;諸如SSD、快閃記憶體或EEPROM之電子媒體;及/或諸如光碟機之光學媒體。各方103之電腦裝備102上的記憶體儲存軟體,該軟體包含經配置以在處理設備上運行之至少一個用戶端應用程式105的各別執行個體。應理解,可使用在各別電腦裝備102之處理設備上運行的軟體來執行本文中歸於給定方103之任何動作。各方103之電腦裝備102包含至少一個使用者終端機,例如桌上型或膝上型電腦、平板電腦、智慧型手機或諸如智慧型手錶之可穿戴式裝置。給定方103之電腦裝備102亦可包含一或多個其他網路連接資源,諸如經由使用者終端機存取之運算計算資源。
用戶端應用程式105最初可在合適的一或多個電腦可讀儲存媒體上經提供至任何給定方103之電腦裝備102,例如自伺服器下載,或經提供於抽取式儲存裝置上,該抽取式儲存裝置諸如抽取式SSD、快閃記憶體鑰匙、抽取式EEPROM、抽取式磁碟機、磁性軟碟或磁帶、諸如CD或DVD ROM之光碟,或抽取式光碟機等。
用戶端應用程式105包含至少一「錢包」功能。此具有二個主要功能性。此等功能性中之一者為使得各別方103能夠創建、授權(例如,簽章)及發送交易152至一或多個比特幣節點104,以接著在區塊鏈節點104之整個網路中傳播且藉此包括於區塊鏈150中。另一功能性為將其當前擁有之數位資產的金額報告給各別方。在基於輸出之系統中,此第二功能性包含核對散佈在整個區塊鏈150中屬於所討論的一方之各種交易152之輸出中所定義的金額。
應注意:雖然各種用戶端功能性可描述為整合至給定用戶端應用程式105中,但此未必為限制性的,且實情為,本文中所描述之任何用戶端功能性可替代地實施於二個或多於二個相異應用程式之套件中,例如經由API介接,或一個應用程式為另一應用程式之外掛程式。更一般而言,用戶端功能性可實施於應用層或諸如作業系統之下部層或此等層之任何組合處。下文將關於用戶端應用程式105進行描述,但應瞭解,此並非限制性的。
各電腦裝備102上之用戶端應用程式或軟體105的執行個體操作性地耦接至網路106之區塊鏈節點104中之至少一者。此使得用戶端105之錢包功能能夠將交易152發送至網路106。用戶端105亦能夠聯繫區塊鏈節點104以便查詢區塊鏈150以詢問各別方103為接收者之任何交易(或實際上檢測區塊鏈150中之其他方的交易,此係因為在實施例中,區塊鏈150為公共設施,其部分地經由其公共可見性而在交易中提供信任)。各電腦裝備102上之錢包功能經組配以根據交易協定來制訂及發送交易152。如上文所闡述,各區塊鏈節點104運行軟體,該軟體經組配以根據區塊鏈節點協定來驗核交易152,且轉遞交易152以便在整個區塊鏈網路106中傳播該等交易。交易協定及節點協定彼此對應,且給定交易協定與給定節點協定相配,其一起實施給定交易模型。相同交易協定用於區塊鏈150中之所有交易152。相同節點協定由網路106中之所有節點104使用。
當給定方103,比如Alice,希望發送新交易152j以包括於區塊鏈150中時,其接著根據相關交易協定來制訂新交易(使用其用戶端應用程式105中之錢包功能)。其接著將交易152自用戶端應用程式105發送至與其連接的一或多個區塊鏈節點104。例如,此可為最佳地連接至愛麗絲之電腦102的區塊鏈節點104。當任何給定區塊鏈節點104接收新交易152j時,該區塊鏈節點根據區塊鏈節點協定及其各別角色來處置該新交易。此包含首先檢查新接收交易152j是否符合「有效」的某一條件,稍後將更詳細地論述該條件之實例。在一些交易協定中,可藉由包括於交易152中之腳本基於各交易來組配驗核條件。替代地,該條件可簡單地為節點協定之內置特徵,或可由腳本及節點協定之組合來定義。
若新接收交易152j通過被視為有效的測試(亦即,若其「經驗核」),則接收交易152j之任何區塊鏈節點104將增添新的經驗核交易152至在彼區塊鏈節點104處維護的交易之有序集合154。另外,接收交易152j之任何區塊鏈節點104將經驗核交易152向前傳播至網路106中之一或多個其他區塊鏈節點104。由於各區塊鏈節點104應用相同協定,因此接著假設交易152j有效,此意謂該交易將很快在整個網路106中傳播。
一旦被接納至在給定區塊鏈節點104處維護之未決交易的有序池154,彼區塊鏈節點104便將開始競爭解決其關於包括新交易152之交易的各別池154之最新版本的工作量證明難題(前已述及,其他區塊鏈節點104可能正試圖基於交易之不同池154來解決難題,但不論誰率先完成皆將定義包括於最新區塊151中之交易的集合。最終,區塊鏈節點104將解決包括愛麗絲之交易152j的有序池154之一部分的難題)。一旦已針對包括新交易152j之池154完成工作量證明,則其不可變地成為區塊鏈150中之區塊151中之一者的部分。各交易152包含指回至較早交易之指標,因此亦不變地記錄交易之次序。
不同區塊鏈節點104可首先接收給定交易之不同例項,且因此在新區塊151中發布一個例項之前對於哪個例項「有效」具有衝突的觀點,此時,所有區塊鏈節點104同意所發布例項為唯一有效例項。若區塊鏈節點104將一個例項接受為有效的且接著發現第二例項已記錄於區塊鏈150中,則彼區塊鏈節點104必須接受此例項且將捨棄(亦即,視為無效)其最初接受之例項(亦即,尚未在區塊151中發布之例項)。
作為基於帳戶之交易模型之部分,由一些區塊鏈網路操作之交易協定之替代類型可被稱作「基於帳戶」之協定。在基於帳戶之狀況下,各交易皆不會藉由返回參考過去交易序列中之先前交易之UTXO來定義待轉移的金額,而是參考絕對帳戶餘額。所有帳戶之當前狀態由彼網路之節點與區塊鏈分離地儲存且不斷更新。在此系統中,使用帳戶(亦被稱作「頭寸」)之運行交易計數來對交易進行排序。此值由發送者進行簽章,作為其密碼編譯簽章之部分,且作為交易參考計算之部分而經雜湊。此外,任擇資料欄位亦可對交易進行簽章。舉例而言,若先前交易ID包括於資料欄位中,則此資料欄位可指回至先前交易。 2.   基於UTXO之模型
圖2繪示例示性交易協定。此為基於UTXO之協定的實例。交易152 (簡稱為「Tx」)為區塊鏈150之基本資料結構(各區塊151包含一或多個交易152)。下文將參考基於輸出或基於「UTXO」之協定來描述。然而,此並不限於所有可能實施例。應注意,雖然參考比特幣描述基於UTXO之例示性協定,但其可同樣地實施於其他例示性區塊鏈網路上。
在基於UTXO之模型中,各交易(「Tx」) 152包含資料結構,該資料結構包含一或多個輸入202及一或多個輸出203。各輸出203可包含未支出交易輸出(UTXO),其可用作另一新交易之輸入202的來源(若尚未兌換該UTXO)。UTXO包括指定數位資產之金額的值。此表示分散式分類帳上之代幣的設定數目。UTXO亦可含有其所來自的交易之交易ID以及其他資訊。交易資料結構亦可包含標頭201,該標頭可包含輸入欄位202及輸出欄位203之大小的指示符。標頭201亦可包括交易之ID。在實施例中,交易ID為交易資料(不包括交易ID自身)之雜湊,且儲存於提交至節點104之原始交易152的標頭201中。
假設愛麗絲103a希望創建將所討論的一定金額之數位資產轉移至鮑勃103b的交易152j。在圖2中,愛麗絲之新交易152j經標示為「 Tx 1 」。該交易獲取在序列中之先前交易152i之輸出203中鎖定至愛麗絲的一定金額之數位資產且將此數位資產中之至少一些轉移至鮑勃。先前交易152i在圖2中經標示為「 Tx 0 」。 Tx 0 Tx 1 僅為任意標籤。其未必意謂 Tx 0 為區塊鏈151中之第一交易,亦不意謂 Tx 1 為池154中緊接著的下一交易。 Tx 1 可指回至仍具有鎖定至愛麗絲之未支出輸出203的任何先前(亦即,前期)交易。
在愛麗絲創建其新交易 Tx 1 時,或至少至其將新交易發送至網路106時,先前交易 Tx 0 可能已經驗核且包括於區塊鏈150之區塊151中。該交易彼時可能已包括於區塊151中之一者中,或其可能仍在有序集合154中等待,在此狀況下,該交易將很快包括於新區塊151中。替代地,可創建 Tx 0 Tx 1 且將其一起發送至網路106,或若節點協定允許緩衝「孤立」交易,則 Tx 0 甚至可在 Tx 1 之後發送。如本文中所使用之「先前」及「後續」二個詞在交易序列之上下文中係指如由交易中指定之交易指標所定義的序列中之交易的次序(哪一交易指回至哪一其他交易,等等)。該等詞同樣地可用「前置」及「後置」或「前期」及「後期」、「親代」及「子代」或其類似者來替換。其未必暗示該等交易經創建、發送至網路106或到達任何給定區塊鏈節點104之次序。然而,直至且除非親代交易經驗核,否則將不驗核指向先前交易(前期交易或「親代」)之後續交易(後期交易或「子代」)。在親代之前到達區塊鏈節點104之子代被視為孤立的。取決於節點協定及/或節點行為,子代可被捨棄或緩衝一段時間以等待親代。
先前交易 Tx 0 之一或多個輸出203中之一者包含特定UTXO,其在此處標示為 UTXO 0 。各UTXO包含指定由UTXO表示之一定金額之數位資產的值;以及鎖定腳本,其定義後續交易之輸入202中之解除鎖定腳本必須符合的條件,以便驗核後續交易且因此成功地兌換UTXO。通常,鎖定腳本將金額鎖定至特定方(包括該金額之交易的受益人)。亦即,鎖定腳本定義解除鎖定條件,通常包含如下條件:後續交易之輸入中的解除鎖定腳本包含先前交易經鎖定至的一方之密碼編譯簽章。
鎖定腳本(亦稱為scriptPubKey)為以節點協定所辨識之網域特定語言編寫的一段程式碼。此語言之特定實例被稱為「Script」(S為大寫),其由區塊鏈網路使用。鎖定腳本指定需要何資訊來支出交易輸出203,例如愛麗絲之簽章的要求。解除鎖定腳本出現在交易之輸出中。解除鎖定腳本(亦稱為scriptSig)為用網域特定語言編寫的一段程式碼,其提供滿足鎖定腳本準則所需的資訊。舉例而言,其可含有鮑勃之簽章。解除鎖定腳本出現在交易之輸入202中。
因此,在所繪示之實例中, Tx 0 之輸出203中的 UTXO 0 包含鎖定腳本[Checksig P A ],該鎖定腳本需要愛麗絲之簽章Sig P A 以便兌換 UTXO 0 (嚴格而言,以便使嘗試兌換 UTXO 0 之後續交易有效)。[Checksig P A ]含有來自愛麗絲之公用-私密金鑰對之公開金鑰 P A 的表示(亦即,雜湊)。 Tx 1 之輸入202包含指回至 Tx 1 之指標(例如,藉助於其交易ID TxID 0 ,其在實施例中為整個交易 Tx 0 之雜湊)。 Tx 1 之輸入202包含識別 Tx 0 內之 UTXO 0 的索引,以在 Tx 0 之任何其他可能輸出中識別 UTXO 0 Tx 1 之輸入202進一步包含解除鎖定腳本<Sig P A >,其包含愛麗絲之密碼編譯簽章,該密碼編譯簽章係藉由愛麗絲將其來自金鑰對之私密金鑰應用於資料(在密碼學中有時被稱為「訊息」)之預定義部分而創建。需要由愛麗絲簽章以提供有效簽章之資料(或「訊息」)可由鎖定腳本或由節點協定或由此等之組合來定義。
當新交易 Tx 1 到達區塊鏈節點104時,該節點應用節點協定。此包含一起運行鎖定腳本及解除鎖定腳本以檢查解除鎖定腳本是否符合鎖定腳本中所定義之條件(其中此條件可包含一或多個準則)。在實施例中,此涉及序連二個腳本: <Sig P A > < P A > || [Checksig P A ] 其中「||」表示序連,且「<…>」意謂將資料置放於堆疊上,且「[…]」為鎖定腳本(在此實例中為基於堆疊之語言)所包含之函式。等效地,腳本可使用共同堆疊一個接一個地運行,而非序連腳本。無論如何,當一起運行時,腳本使用如包括於 Tx 0 之輸出中之鎖定腳本中的愛麗絲之公開金鑰 P A ,以鑑認 Tx 1 之輸入中的解除鎖定腳本含有對資料之預期部分進行簽章的愛麗絲之簽章。亦需要包括資料自身(「訊息」)之預期部分,以便執行此鑑認。在實施例中,經簽章資料包含整個 Tx 1 (因此不需要包括分離的元素來以明文指定資料之經簽章部分,此係因為其已固有地存在)。
藉由公開-私密密碼學進行鑑認之細節將為熟習此項技術者所熟悉的。基本上,若愛麗絲已使用其私密金鑰對訊息進行簽章,則在以明文給出愛麗絲之公開金鑰及訊息的情況下,諸如節點104之另一實體能夠鑑認該訊息必須已由愛麗絲進行簽章。簽章通常包含對訊息進行雜湊、對雜湊進行簽章及將此標誌至訊息上作為簽章,因此使得公開金鑰之任何持有者能夠鑑認該簽章。因此,應注意,本文中對特定資料片段或交易之部分或其類似者之簽章的任何提及在實施例中可意謂對彼資料片段或交易之部分的雜湊進行簽章。
Tx 1 中之解除鎖定腳本符合 Tx 0 之鎖定腳本中所指定的一或多個條件(因此在所展示之實例中,若愛麗絲之簽章經提供於 Tx 1 中且經鑑認),則區塊鏈節點104將 Tx 1 視為有效的。此意謂區塊鏈節點104將增添 Tx 1 至未決交易之有序池154。區塊鏈節點104將亦轉遞交易 Tx 1 至網路106中之一或多個其他區塊鏈節點104,使得該交易將在整個網路106中傳播。一旦 Tx 1 已經驗核且包括於區塊鏈150中,則此將來自 Tx 0 UTXO 0 定義為已支出。應注意, Tx 1 可僅在其支出未支出交易輸出203之情況下為有效的。若其嘗試支出已由另一交易152支出之輸出,則 Tx 1 將為無效的,即使符合所有其他條件亦如此。因此,區塊鏈節點104亦需要檢查是否已支出先前交易 Tx 0 中所參考之UTXO (亦即,其是否已形成另一有效交易之有效輸入)。此為區塊鏈150將所定義次序強加於交易152上很重要的一個原因。實務上,給定區塊鏈節點104可維護分離的資料庫,其標記已支出哪些交易152中之哪些UTXO 203,但最終定義是否已支出UTXO的係其是否已形成區塊鏈150中之另一有效交易的有效輸入。
若給定交易152之所有輸出203中所指定的總金額大於由所有其輸入202所指向之總金額,則此為大多數交易模型中無效之另一基礎。因此,此類交易將不被傳播,亦不包括於區塊151中。
應注意,在基於UTXO之交易模型中,需要將給定UTXO整個支出。其不能「留下」在UTXO中定義為支出之一小部分金額,而另一小部分已支出。然而,來自UTXO之金額可在下一交易之多個輸出之間劃分。例如, Tx 0 中之 UTXO 0 中所定義的金額可在 Tx 1 中之多個UTXO之間劃分。因此,若愛麗絲不想將 UTXO 0 中所定義之所有金額皆給予鮑勃,則其可使用剩餘金額在 Tx 1 之第二輸出中給自身找零,或支付給另一方。
實務上,愛麗絲通常亦將需要包括比特幣節點104之費用,該比特幣節點成功地將愛麗絲之交易104包括於區塊151中。若愛麗絲不包括此費用,則區塊鏈節點104可拒絕 Tx 0 ,且因此儘管技術上有效,但 Tx 0 可能不會被傳播且包括於區塊鏈150中(若區塊鏈節點104不想接受交易152,則節點協定不會強迫區塊鏈節點接受)。在一些協定中,交易費用不需要其自身的分離輸出203 (亦即,不需要分離的UTXO)。實情為,由給定交易152之輸入202所指向的總金額與給定交易之輸出203中所指定的總金額之間的任何差額被自動地給予發布該交易之區塊鏈節點104。例如,假設指向 UTXO 0 之指標為 Tx 1 之唯一輸入,且 Tx 1 僅具有一個輸出 UTXO 1 。若 UTXO 0 中所指定之數位資產的金額大於 UTXO 1 中所指定之金額,則差額可由贏得工作量證明競賽之節點104指派以創建含有 UTXO 1 之區塊。然而,替代地或另外,未必排除可在交易152之其自身的UTXO 203中之一者中明確地指定交易費用。
愛麗絲及鮑勃之數位資產由在區塊鏈150中任何位置處之任何交易152中鎖定至愛麗絲及鮑勃的UTXO組成。因此,給定方103之資產通常遍及整個區塊鏈150中之各種交易152的UTXO而散佈。區塊鏈150中之任何位置處皆未儲存定義給定方103之總餘額的一個數字。用戶端應用程式105中之錢包功能的作用為將鎖定至各別方且尚未在另一後繼交易中支出之所有各種UTXO的值一起核對。其可藉由查詢如儲存於比特幣節點104中之任一者處的區塊鏈150之複本來實現此操作。
應注意,常常示意性地表示腳本(亦即,不使用確切語言)。舉例而言,吾人可使用操作碼(作業碼)來表示特定函式。「OP_…」係指Script語言之特定作業碼。作為實例,OP_RETURN為Script語言之作業碼,當在鎖定腳本之開頭加上OP_FALSE時,該作業碼創建交易之不可支出輸出,該輸出可儲存交易內之資料,且藉此將資料不可變地記錄於區塊鏈150中。例如,資料可包含需要儲存於區塊鏈中之文件。
通常,交易之輸入含有對應於公開金鑰 P A 之數位簽章。在實施例中,此係基於使用橢圓曲線secp256k1之ECDSA。數位簽章對特定資料片段進行簽章。在一些實施例中,對於給定交易,簽章將對交易輸入之部分及交易輸出中之一些或全部進行簽章。數位簽章所簽章之輸出之特定部分取決於SIGHASH旗標。SIGHASH旗標通常為4位元組碼,其被包括在簽章之末尾,以選擇對哪些輸出進行簽章(且因此在簽章時固定)。
鎖定腳本有時被稱為「scriptPubKey」,其係指其通常包含各別交易被鎖定至的一方之公開金鑰。解除鎖定腳本有時被稱為「scriptSig」,其係指其通常供應對應簽章。然而,更一般而言,在區塊鏈150之所有應用中,兌換UTXO之條件不一定包含鑑認簽章。更一般而言,腳本語言可用於定義任何一或多個條件。因此,「鎖定腳本」及「解除鎖定腳本」二個更一般的詞可為較佳的。 3.   旁側通道
如圖1中所展示,愛麗絲及鮑勃之電腦裝備102a、120b中之各者上的用戶端應用程式可分別包含額外通訊功能性。此額外功能性使得愛麗絲103a能夠與鮑勃103b建立分離的旁側通道107 (在任一方或第三方之推動下)。旁側通道107使得能夠與區塊鏈網路分離地進行資料交換。此通訊有時被稱作「鏈外」通訊。舉例而言,此可用於在愛麗絲與鮑勃之間交換交易152,而無需(尚未)將交易註冊至區塊鏈網路106上或使其進入鏈150,直至多方中之一者選擇將其廣播至網路106。以此方式共用交易有時被稱作共用「交易範本」。交易範本可能缺乏形成完整交易所需之一或多個輸入及/或輸出。替代地或另外,旁側通道107可用於交換任何其他交易相關資料,諸如金鑰、協商的金額或條款、資料內容等。
可經由與區塊鏈網路106相同之封包交換網路101建立旁側通道107。替代地或另外,可經由諸如行動蜂巢式網路之不同網路或諸如區域無線網路之區域網路或甚至愛麗絲之裝置102a與鮑勃之裝置102b之間的直接有線或無線鏈路來建立旁側通道301。通常,在本文中任何位置處被提及之旁側通道107可包含經由一或多個網路連接技術或通訊媒體之任何一或多個鏈路,以用於「鏈外」(亦即,與區塊鏈網路106分離地)交換資料。在使用多於一個鏈路的情況下,鏈外鏈路之集束或集合作為整體可被稱作旁側通道107。因此,應注意,若據稱愛麗絲及鮑勃經由旁側通道107交換某些資訊或資料片段或其類似者,則此未必暗示必須經由完全相同的鏈路或甚至相同類型之網路來發送所有此等資料片段。 4.   用戶端軟體
圖3A繪示用於實施本發明所揭露方案之實施例的用戶端應用程式105之例示性實施方案。用戶端應用程式105包含交易引擎401及使用者介面(UI)層402。交易引擎401經組配以根據上文所論述且稍後將進一步詳細論述之方案來實施用戶端105之底層的交易相關功能性,諸如制定交易152、經由旁側通道301接收及/或發送交易及/或其他資料,及/或將交易發送至一或多個節點104以經由區塊鏈網路106進行傳播。根據本文中所揭露之實施例,各用戶端105之交易引擎401包含經組配為以高階腳本語言編寫鎖定腳本且在高階腳本語言與低階腳本語言之間轉換的函式403。換言之,以高階語言編寫之鎖定腳本可映射至以低階語言編寫之等效鎖定腳本。例如,愛麗絲103a可使用高階語言建構緊密鎖定腳本,且接著交易引擎401可產生對應的擴展鎖定腳本。
UI層402經組配以經由各別使用者之電腦裝備102之使用者輸入/輸出(I/O)構件來呈現使用者介面,包括經由裝備102之使用者輸出構件將資訊輸出至各別使用者103,及經由裝備102之使用者輸入構件自各別使用者103接收回輸入。舉例而言,使用者輸出構件可包含用於提供視覺輸出之一或多個顯示螢幕(觸控式或非觸控式螢幕)、用於提供音訊輸出之一或多個揚聲器,及/或用於提供觸覺輸出之一或多個觸覺輸出裝置等。使用者輸入構件可包含例如以下各者之輸入陣列:一或多個觸控式螢幕(與用於輸出構件之彼/彼等觸控式螢幕相同或不同);一或多個基於游標之裝置,諸如滑鼠、軌跡墊或軌跡球;一或多個麥克風及語音或話音辨識演算法,其用於接收語音或聲音輸入;一或多個基於示意動作之輸入裝置,其用於接收呈手勢或身體示意動作之形式的輸入;或一或多個機械按鈕、開關或操縱桿等。
應注意:雖然本文中之各種功能性可描述為整合至同一用戶端應用程式105中,但此未必為限制性的,且實情為,該等功能性可實施於二個或多於二個相異應用程式之套件中,例如一個應用程式為另一應用程式之外掛程式或經由應用程式設計介面(API)介接。舉例而言,交易引擎401之功能性可實施於與UI層402分離之應用程式中,或諸如交易引擎401之給定模組之功能性可在多於一個應用程式之間進行劃分。亦不排除可在比如作業系統層處實施所描述功能性中之一些或全部。在本文中任何位置提及單個或給定應用程式105或其類似者的情況下,應瞭解,此僅作為實例,且更一般而言,所描述功能性可以任何形式之軟體實施。
圖3B提供使用者介面(UI) 500之實例的模型,該使用者介面可由愛麗絲之裝備102a上之用戶端應用程式105a的UI層402呈現。應瞭解,類似UI可由鮑勃之裝備102b或任何其他方之裝備上的用戶端105b呈現。
作為繪示,圖3B自愛麗絲之視角展示UI 500。UI 500可包含經由使用者輸出構件呈現為相異UI元素之一或多個UI元素501、502、502。
舉例而言,UI元素可包含一或多個使用者可選擇元素501,其可諸如不同螢幕上按鈕或選單中之不同選項或其類似者。使用者輸入構件經配置以使得使用者103 (在此狀況下為愛麗絲103a)能夠選擇或以其他方式操作選項中之一者,諸如藉由點選或觸碰螢幕上的UI元素,或說出所要選項的名稱(注意:如本文中所使用之「手動」一詞僅意謂與自動相對,且未必限於使用手)。該等選項使得使用者(愛麗絲)能夠選擇高階腳本語言之一或多個高階函式,例如經組配以執行複雜數學運算之函式。選項亦可允許使用者自緊密鎖定腳本轉換成擴展鎖定腳本,例如以基於含有擴展鎖定腳本而非緊密鎖定腳本之交易的版本而產生簽章。
替代地或另外,UI元素可包含一或多個資料鍵入欄位502,使用者可經由該一或多個資料鍵入欄位寫出一或多個高階函式。此等資料鍵入欄位經由使用者輸出構件例如在螢幕上呈現,且資料可經由例如鍵盤或觸控式螢幕之使用者輸入構件鍵入至欄位中。替代地,可例如基於語音辨識而口頭接收資料。
替代地或另外,UI元素可包含一或多個資訊元素503,其經輸出以將資訊輸出至使用者。例如,可在螢幕上或有聲地呈現此/此等元素。
應瞭解,呈現各種UI元素、選擇選項以及鍵入資料之特定方式並不重要。稍後將更詳細地論述此等UI元素之功能性。亦應瞭解,圖3中所展示之UI 500僅為示意性模型,且實務上,其可包含出於簡明起見而未繪示之一或多個其他UI元素。 5.   節點軟體
圖4繪示在基於UTXO或基於輸出之模型之實例中的在網路106之各區塊鏈節點104上運行的節點軟體450之實例。應注意,另一實體可運行節點軟體450,而不被分類為網路106上之節點104,亦即,不執行節點104所需的動作。節點軟體450可含有但不限於協定引擎451、腳本引擎452、堆疊453、應用程式層級決策引擎454,及一或多個區塊鏈相關功能模組455之集合。各節點104可運行節點軟體,該節點軟體含有但不限於所有以下三者:共識模組455C (例如,工作量證明)、傳播模組455P及儲存模組455S (例如,資料庫)。協定引擎401通常經組配以辨識交易152之不同欄位,且根據節點協定處理該等欄位。當接收到具有指向另一先前交易152i ( )之輸出(例如,UTXO)之輸入的交易152j ( )時,協定引擎451接著識別 中之解除鎖定腳本且將其傳遞至腳本引擎452。協定引擎451亦基於 之輸入中的指標而識別及擷取 。可在區塊鏈150上發布 ,在此狀況下,協定引擎可自儲存於節點104處之區塊鏈150的區塊151之複本擷取 。替代地, 可能尚未在區塊鏈150上發布。在彼狀況下,協定引擎451可自藉由節點104維護之未發布交易的有序集合154擷取 。無論如何,腳本引擎451皆會識別 之參考輸出中的鎖定腳本且將此傳遞至腳本引擎452。
腳本引擎452因此具有 之鎖定腳本及來自 之對應輸入的解除鎖定腳本。舉例而言,圖2中繪示標示為 之交易,但此可適用於任一對交易。腳本引擎452如先前所論述一起運行二個腳本,其將包括根據正使用之基於堆疊之腳本語言(例如,Script)而將資料置放至堆疊453上及自該堆疊擷取資料。
藉由一起運行該等腳本,腳本引擎452判定解除鎖定腳本是否符合鎖定腳本中所定義之一或多個準則,亦即,其是否「解除鎖定」包括鎖定腳本之輸出?腳本引擎452將此判定之結果傳回至協定引擎451。若腳本引擎452判定解除鎖定腳本符合對應鎖定腳本中所指定之一或多個準則,則其傳回結果「真」。否則,其傳回結果「假」。
在基於輸出之模型中,來自腳本引擎452之結果「真」為交易有效條件中之一者。通常,亦存在藉由協定引擎451評估的亦必須符合之一或多個其他協定層級條件;諸如 之輸出中指定之數位資產的總金額不超過由其輸入指向的總金額,及 之所指向輸出尚未由另一有效交易支出。協定引擎451評估來自腳本引擎452之結果連同一或多個協定層級條件,且其僅在該結果及該等條件皆為真之情況下驗核交易 。協定引擎451將交易是否有效的指示輸出至應用程式層級決策引擎454。僅在確實驗核了 之條件下,決策引擎454才可選擇控制共識模組455C及傳播模組455P二者以執行其關於 之各別區塊鏈相關功能。此包含共識模組455C將 增添至節點之交易的各別有序集合154以用於併入區塊151中,及傳播模組455P將 轉遞至網路106中之另一區塊鏈節點104。任擇地,在實施例中,應用程式層級決策引擎454可在觸發此等功能中之任一者或二者之前應用一或多個額外條件。例如,決策引擎可僅在交易有效且留下足夠交易費用之條件下選擇發布交易。
亦應注意,本文中之「真」及「假」二個詞未必限於傳回以僅單個二進位數字(位元)之形式表示的結果,但當然此為一個可能的實施方案。更一般而言,「真」可指指示成功或肯定結果之任何狀態,且「假」可指指示不成功或非肯定結果之任何狀態。舉例而言,在基於帳戶之模型中,結果「真」可由簽章之隱式協定層級驗核及智慧型合約之額外肯定輸出之組合指示(若二個個別結果為真,則總體結果被視為發信真)。 6.   高階腳本語言
圖5繪示用於在使用者與節點之間發送交易的例示性系統500。系統500包含一或多個產生方(亦即,產生區塊鏈交易之方)。為簡單起見,圖5中僅展示二個產生方:愛麗絲103a及鮑勃103b。應注意,產生方無需為使用者且可替代地為機器。系統500亦包含以區塊鏈節點104之形式展示的驗核實體,及區塊鏈網路106之一或多個節點。
產生方,例如愛麗絲103a,經組配以產生第一區塊鏈交易 。第一區塊鏈交易 包含一或多個輸出。第一交易為緊密交易。輸出中之至少一者(第一輸出)包含緊密鎖定腳本(CLS),其通篇亦被稱作緊密腳本(CS)。應注意,第一輸出無需在邏輯上首先出現在交易中。實情為,「第一」僅用作此特定輸出之標籤。CLS係以高階(HL)腳本語言編寫且包含一或多個高階(HL)函式。各高階函式經組配以執行等效於區塊鏈150之低階(LL)腳本語言(亦即,原生腳本語言)之一或多個低階(LL)函式(例如,作業碼)的操作。CLS經組配以執行等效於僅使用LL腳本語言編寫之擴展鎖定腳本(ELS)的操作(亦即,定義鎖定條件)。ELS通篇亦被稱作擴展腳本(ES)。舉例而言,CLS及ELS二者可定義得出數字之模逆(modular inverse)的鎖定腳本。替代需要大量LL函式來執行彼運算,CLS可包含單個HL函式,該函式經組配以得出數字之模逆,因此相較於ELS,減小了CLS之大小。換言之,以HL腳本語言編寫的CLS可編譯成以LL語言編寫的ELS。
在一些實例中,單個高階函式與單個LL函式之間可存在一對一映射。舉例而言,HL函式「ADD」或「+」可執行例如OP_ADD之對應LL函式的運算。類似地,符號「-」、「*」及「/」可分別用以執行減法、乘法及除法。此相比於由特定LL腳本語言Script使用之諸如OP_SUB、OP_MUL及OP_DIV的LL函式提供了節省。
在一些實例中,HL函式中之至少一些映射至多於一個LL函式。例如,單個HL函式可對資料項目執行多個依序操作(例如,參見下文)。在一些實例中,各HL函式映射至多於一個LL函式。
第一交易 可包含多於一個輸出,例如第二輸出。第二輸出亦可包含各別CLS。一般而言,第一交易 之輸出中之一些或全部可包含各別CLS。
愛麗絲103a亦經組配以使第一交易 以HL語言可用於區塊鏈網路106。舉例而言,愛麗絲103a可將第一交易直接地或經由例如鮑勃103b之不同方間接地發送至區塊鏈節點104。舉例而言,愛麗絲103a可經由旁側通道107將交易 發送至鮑勃103b。在接收到交易後,鮑勃103b可包括對交易 進行簽章之簽章。鮑勃103b可接著將交易 發送至網路106。當傳輸第一交易時存在頻寬節省,此係因為第一CLS小於對應的第一ELS。愛麗絲103a可將第一交易 儲存於其運算裝置102a之記憶體中。
在一些實例中,愛麗絲103a可為第一交易 產生交易識別符 。交易識別符通常為原始交易資料之雜湊或雙雜湊。愛麗絲103a首先產生第一交易之修改版本 ,該修改版本不含有任何CLS,而是含有對應ELS。亦即,第一輸出含有第一ELS而非第一CLS。類似地,若第一交易 含有多個CLS,則修改版本替代地含有多個ELS。接著基於第一交易之修改版本 產生交易識別符 ,例如藉由獲取第一交易之修改版本 的雜湊(例如,SHA-256)或雙雜湊(例如,雙SHA-256)。愛麗絲103a使交易識別符 可用於區塊鏈網路106,例如藉由隨同第一交易 發送至區塊鏈節點104。
在一些實例中,愛麗絲103a首先產生含有CLS之第一交易 之版本,且接著產生第一交易之修改版本 。亦即,藉由用對應ELS替換任何CLS。換言之,函式403可藉由HL語言之HL函式與LL語言之LL函式之間的映射而將第一CLS轉換成第一ELS,亦即,將第一CLS編譯成第一ELS。接著產生交易識別符
產生第一交易之修改版本 可簡單地意謂用第一ELS替換第一CLS。可接著在已產生交易識別符 之後用第一CLS替換第一ELS,使得可將含有第一CLS之第一交易 之版本發送至區塊鏈網路106。
亦不排除愛麗絲103a可在第一執行個體中產生第一交易之修改版本 ,亦即,含有第一ELS之交易。此允許愛麗絲103a產生交易識別符 。愛麗絲103a可接著用對應CLS替換ELS。亦即,函式403可藉由LL語言之LL函式與HL語言之HL函式之間的映射而將第一ELS轉換成第一CLS。
區塊鏈交易常常在交易之輸入中包括用於解除鎖定先前交易之所參考輸出的簽章。若需要愛麗絲130a包括簽章作為第一交易 之輸入之部分以用於解除鎖定先前交易之輸出,則愛麗絲103a可包括簽章作為第一交易之修改版本 之部分。換言之,愛麗絲之簽章對含有第一ELS而非第一CLS之第一交易之修改版本 進行簽章。可接著基於包括愛麗絲之簽章的修改版本而產生交易識別符 。提交至網路106之交易之版本亦包括愛麗絲之簽章。然而,當使用第一交易 作為訊息進行驗核時,簽章將並非有效簽章。僅當使用第一交易之修改版本 作為訊息時,該簽章才為有效簽章。
應注意,用第一ELS替換第一CLS可取決於對由愛麗絲103a選擇之簽章旗標(例如,SIGHASH旗標)的選擇。舉例而言,愛麗絲103a可選擇簽章旗標(例如,SIGHASH_NONE),使得簽章不應用於交易輸出中之任一者。在彼狀況下,愛麗絲103a不必用第一ELS替換第一CLS。作為另一實例,愛麗絲103a可選擇簽章旗標(例如,SIGHAHS_SINGLE),使得簽章僅應用於一個輸出。在彼狀況下,若簽章應用於不含第一CLS (或任何其他CLS)之輸出,則愛麗絲103a不需要用第一ELS (或對應ELS)替換第一CLS。此外,在此狀況下,若CLS存在於除由簽章進行簽章之輸出以外的輸出中,則愛麗絲103a不需要替換彼CLS。然而,若由簽章進行簽章之單個輸出確實含有第一CLS,則愛麗絲103a必須用第一ELS替換第一CLS。最後,愛麗絲103a可選擇簽章旗標(例如,SIGHASH_ALL),使得該簽章對所有輸出進行簽章。在彼狀況下,愛麗絲130a必須用第一ELS替換第一CLS。此同樣適用於含有各別CLS之任何其他輸出。
在一些實例中,愛麗絲103a可產生一或多個次要交易識別符。此等次要識別符類似於上文所論述之交易識別符 ,此係因為該等次要識別符可為資料之雜湊或雙雜湊,但所雜湊資料不同。舉例而言,可基於以下各者中之一或多者產生次要交易識別符:第一交易 之版本號碼、第一交易 之鎖定時間、第一交易 之一或多個輸入及/或第一交易 之一或多個輸出。作為特定實例,次要交易識別符可基於版本號碼及鎖定時間。另外或替代地,次要交易識別符可基於包含各別CLS之輸出。
交易之輸入可含有三個部分: 1. 與索引(指示待支出哪一交易輸出)串連之交易識別符, 2. 解除鎖定腳本,以及 3. 序號。
解除鎖定腳本可含有對次要交易識別符進行簽章的數位簽章。因此,應排除含有可對次要交易進行簽章之數位簽章的解除鎖定腳本之部分。當次要交易識別符係基於一或多個輸入時,可排除彼輸入之解除鎖定腳本之部分或全部以便避免循環參考。換言之,交易識別符可僅基於與索引串連之交易識別符及/或序號,而非基於完整的解除鎖定腳本。
次要交易識別符可包括於第一交易 之輸出中,例如不可支出輸出。第一交易之修改版本 亦可含有次要交易識別符。因此,在此等實例中,「主要」交易識別符 及簽章為次要交易識別符之函數。
在一些實施例中,上文所論述之HL腳本語言雖然相較於LL腳本語言為較高階語言,但相較於甚至更高階腳本語言亦可為較低階語言。亦即,HL語言可為LL語言與第二層HL語言之間的中階語言。第二層HL語言為面向使用者之語言。換言之,面向使用者之語言可為可由使用者(或其他方或實體,包括裝置)編寫之腳本語言。可將以面向使用者之語言編寫的腳本編譯(其可意謂壓縮)成以例如第一CLS之中間語言編寫的腳本。又,可將以中間語言編寫之腳本擴展(例如,藉由映射)成以LL語言編寫之腳本。亦不排除可將以面向使用者之語言編寫的腳本直接轉換成以低階語言編寫之腳本。
換言之,在一些實施例中,僅存在二個階之腳本語言:高階語言及低階語言,但在其他實施例中,存在三個階之腳本語言:面向使用者(最高)階、中間語言階及低階語言。在例示性實施方案中,面向使用者之語言可被稱作SDL語言,中間語言可被稱作元腳本語言且低階語言可被稱作規範(例如,原生)語言。
返回至以上實例,愛麗絲103a可產生交易,該交易包含以面向使用者之語言編寫的鎖定腳本,亦即,面向使用者(UF)之鎖定腳本。接著,在提交至網路106之前,將UF鎖定腳本轉換(例如,編譯)成以中間語言編寫之第一CLS。可接著將包含第一CLS之交易提交至網路106。換言之,在此等實例中,面向使用者之語言僅在最初產生交易時由愛麗絲103a使用。提交具有呈CLS之更緊密形式之鎖定腳本的交易。
以上教示不僅適用於鎖定腳本,而且適用於解除鎖定腳本。亦即,除了產生被轉換成擴展鎖定腳本之緊密鎖定腳本以外或替代產生該緊密鎖定腳本,愛麗絲之交易可包含緊密解除鎖定腳本。可以中間語言或面向使用者之語言編寫緊密解除鎖定腳本。
如圖5中所展示,區塊鏈節點104獲得第一交易 。第一交易 包括第一CLS (且可能包括一或多個額外CLS)。可直接自愛麗絲103a或自例如鮑勃103b之不同實體獲得第一交易 。亦不排除節點104可自不同節點104獲得第一交易
節點104經組配以驗核第一交易 。在一些實施例中,第一交易 係基於其交易識別符來驗核。在此等實施例中,節點104例如自愛麗絲103a、鮑勃103b或不同實體獲得候選交易識別符 。預期交易產生方,亦即,愛麗絲103a,將隨同第一交易 一起發送候選交易識別符
節點104藉由用對應ELS替換第一CLS來產生第一交易之修改版本 ,亦即,將第一CLS編譯成第一ELS。換言之,節點104經組配以將第一CLS轉換成第一ELS。此可藉由節點之腳本引擎452或藉由不同功能455執行。在已產生第一交易之修改版本 後,節點104基於第一交易之修改版本 產生交易識別符 。例如,可藉由對第一交易之修改版本 進行雜湊或雙雜湊來產生交易識別符
為了使第一交易 被視為有效的,所獲得的候選交易識別符 必須匹配所產生的交易識別符 。因此,節點104執行交易識別符之比較且判定其是否相等。若交易識別符不匹配,則第一交易 被視為無效且可被忽略。
若交易識別符確實匹配,則節點104可繼續根據區塊鏈協定驗核交易。此包括執行第一交易 之輸入連同先前交易之其各別參考輸出。
若根據區塊鏈協定,交易 為有效的,則節點104可將交易 發送至網路106之其他節點104及/或嘗試基於第一交易之修改版本 建構區塊。換言之,區塊將包括默克爾(Merkle)樹之默克爾根,該默克爾樹具有修改交易 之交易識別符 作為包含第一ELS之修改交易的其葉(亦即,(雙)雜湊)中之一者。此可包括將第一交易 及/或第一交易之修改版本 儲存於記憶體中。
在一些實例中,交易之修改版本可能不包括第一CLS。在其他實例中,交易之修改版本可包括第一ELS及第一CLS二者。舉例而言,修改交易之第一輸出可包括第一CLS,其方式為使得在交易驗核期間不執行第一CLS。舉例而言,第一CLS可遵循OP_RETURN作業碼:<ELS> OP_RETURN <CLS>。在此狀況下,交易識別符係基於第一ELS及第一CLS二者。
在一些實例中,節點104可回應於接收到請求而將第一交易之修改版本 發送至另一節點104。舉例而言,可在區塊鏈150上發布含有第一交易 之區塊151。請求節點104可能未經組配以驗核含有以HL語言編寫之腳本的交易。因此,節點104將第一交易之修改版本 發送至請求節點,使得請求節點104可驗核第一交易,如同其將通常驗核僅含有LL腳本語言之交易一樣。
至此,驗核交易之以上描述已集中於驗核含有CLS但未必含有意欲解除鎖定CLS之輸入的交易。舉例而言,第一交易 可包括解除鎖定僅使用LL語言編寫之先前交易之輸出的輸入。
假定第一交易 為有效交易,則其將在區塊151中發布。區塊鏈節點104 (未必為發布彼區塊151之同一節點104,但不排除為同一節點)可接著接收包括輸入之第二交易 ,該輸入參考第一交易 之第一輸出,亦即,含有第一CLS之輸出。第二交易 可由例如鮑勃103b之第二方產生。鮑勃103b可直接地或經由例如第三使用者夏娃(Eve)之不同實體將第二交易發送至節點104。
節點104接著繼續驗核第二交易 。為了驗核第二交易 ,節點104必須例如自記憶體或自區塊鏈150獲得第一交易。節點104接著具有用於驗核第二交易 之二個選項。作為第一選項,節點104可用第一ELS替換第一CLS (亦即,將第一CLS編譯成第一ELS)且接著針對第一ELS執行第二交易之輸入。為了使第二交易有效,執行必須成功。換言之,第二交易之輸入必須成功地解除鎖定第一ELS。作為第二選項,節點104不需要用第一ELS替換第一CLS,且替代地,節點104可針對第一CLS執行第二交易 之輸入。同樣,為了使第二交易有效,執行必須成功。換言之,第二交易 之輸入必須成功地解除鎖定第一CLS。
由於第一CLS等效於第一ELS,因此同一輸入將解除鎖定第一CLS及第一ELS二者。作為簡單實例,假設第一ELS包含多個LL函式,該等函式經組配以自第二交易 之輸入獲取數字,對數字執行數學運算且檢查其是否匹配包括於第一ELS中之數字。第一CLS經組配以執行相同操作,但大小小於第一ELS。例如,第一CLS可包括該數字及單個HL函式,而第一ELS可包括該數字,但包括許多LL函式。由於第一ELS與第一CLS之總體操作相同,因此相同輸入將導致相同結果,亦即,成功或不成功的執行。
若第二交易 有效,亦即,若第二交易之解除鎖定腳本成功地解除鎖定第一ELS或第一CLS且區塊鏈協定之任何其他條件皆符合,則節點104可將第二交易 發送至區塊鏈網路106之其他節點104。節點104亦可儲存第二交易 ,例如以便建構含有第二交易 之區塊151。
可能有如下狀況:第二交易 包含含有各別CLS之一或多個輸出。在彼狀況下,作為驗核第二交易 之部分,節點104可在論述第一交易 之驗核時執行上文所描述之相同操作,亦即,獲得候選交易識別符 ,產生第二交易之修改版本,產生交易識別符 ,以及執行所獲得之交易識別符與所產生之交易識別符的比較。為了提高效率,可在執行輸入及輸出腳本之前執行比較。
交易驗核之以上論述主要集中於驗核包含緊密鎖定腳本之交易。節點104亦可驗核包含緊密解除鎖定腳本之交易(除了緊密鎖定腳本以外或替代緊密鎖定腳本)。節點104可在交易驗核期間直接執行緊密解除鎖定腳本,亦即,緊密解除鎖定腳本係以HL腳本語言(其可為面向使用者之語言或中間語言)直接執行。替代地,節點104可在執行之前將緊密解除鎖定腳本轉換成以LL腳本語言編寫之擴展解除鎖定腳本。
出於產生簽章及/或交易識別符之目的而產生交易之修改版本的描述同樣適用於交易包含緊密解除鎖定腳本之情境。
圖9繪示三種類型之語言之間的關係。如所展示,在最低階處為LL語言,亦即,區塊鏈之原生腳本語言(例如,Script語言之作業碼)。在較高階處為中間語言。在中間語言上方之階級為面向使用者之語言。
此規劃架構經設計以使區塊鏈腳本更可存取、在運算及空間上更高效且對智慧型合約更友好。
交易之生命週期至少包含以下階段: 1.   創建-一個交易(所創建之交易);腳本可呈面向使用者、中階或低階腳本語言。 2.   傳播-一個交易(所傳輸之交易);腳本可呈中階語言以達成緊密性且在節點側快速擴展成LL語言(相較於面向使用者之語言)。 3.   儲存-一個交易(所儲存之交易);腳本可呈中階語言以達成緊密性。 4.   驗核-二個交易(被支出之交易提供鎖定腳本且支出交易提供解除鎖定腳本)。在創建、傳播或儲存期間不進行驗核。在經執行時,交易可以其緊密形式或以其擴展形式或以在執行之前將緊密腳本中之一些但並非全部轉換成原生腳本的混合方式排他地執行。
在一些實例中,當執行緊密腳本(鎖定或解除鎖定)時,函式表可由不同方(亦即,愛麗絲103a及節點104)使用。函式表含有HL函式及對應LL函式之清單。換言之,HL函式經映射至對應LL函式。HL函式經編譯(亦即,轉譯)成對應LL函式且儲存於函式表中。函式表使得能夠將緊密腳本轉換成擴展腳本,且反之亦然。
函式表可完全或部分地由愛麗絲103a創建且分發給一或多個節點104,或函式表可完全或部分地由另一實體創建,例如由節點104中之一者創建。
在利用三層架構(亦即,面向使用者之語言、中階語言及低階語言)之實施例中,函式表可用以自IL語言映射至LL語言。函式表為來自編譯UF語言之輸出。當函式係以UF語言編寫時,將該函式編譯(亦即,轉譯)成對應IL函式。彼對應IL經映射至一或多個其他(亦即,不同)IL函式及/或一或多個LL函式,亦即,一個IL函式(例如,在以下例示性章節中之「reverse」)經映射至一起執行等效於IL函式之操作的較低階函式之集合。此處,「較低階」意謂低於面向使用者階的階級。較低階函式之集合儲存於與IL函式相關聯之函式表中(在以下例示性章節中,「length」為不同IL函式之實例)。
函式表可接著用以產生及/或執行IL腳本。舉例而言,對IL函式之參考或IL函式之識別符可包括於IL腳本中,使得在經執行時,可執行較低階函式之映射集合。換言之,使用識別符/參考來查找較低階函式之集合。在此實例中,參考或識別符自身為IL函式,該函式經組配以便在經執行時執行等效於一或多個LL函式之操作且同樣地,執行等效於經識別/參考函式之操作。IL腳本自身可擴展至對應的原生腳本。同樣,可自函式表獲得較低階函式之集合且接著將其擴展至僅LL (亦即,原生)函式。應注意,定義一個IL函式之較低階函式之集合自身可包括不同IL函式或彼不同IL函式之識別符或參考。
如上文所提到,可能存在可編譯成相同IL語言之多種不同UF語言(例如,Python及Java)。較佳地,以不同UF語言編寫之相同UF函式(亦即,經組配以執行相同操作但以不同語言編寫之函式)編譯成函式表之較低階函式之相同集合,但此並非必需的,只要其在給定相同輸入時產生相同輸出即可。
節點104可基於若干較小函式表,例如由不同方(例如,使用者或節點)產生之函式表而產生較大函式表。總表可由集中方儲存,且節點104可藉由請求總表來不時地更新其表。
面向使用者之語言為人類可讀的、對開發者友好的、可擴充的,且可編譯成中階語言。下文提供面向使用者之語言的實例。然而,可能存在可編譯成相同的中階語言之多種不同的面向使用者之語言。現有語言,諸如Java、JavaScript或Python,亦可調適成用於創建區塊鏈交易之高階語言。
中階語言將較高階語言連接至低階語言(例如,作業碼)以達成頻寬、儲存空間及運算之效率增益。在下文中,此通用的中階語言將被稱為 元腳本( meta script)。元腳本之特性可概述為: 1. 空間高效-在大小上比高階及低階語言更緊密; 2. 可執行-可由相容腳本引擎直接執行(應注意,此為任擇的,且在一些狀況下,元腳本不可執行,除非擴展至低階語言); 3. 可擴展-可擴展至低階語言(原生腳本);以及 4. 判定性的-相同的元腳本將始終擴展至相同的原生腳本。
此外,當給定相同輸入且直接執行時,元腳本將產生與藉由執行自元腳本擴展之原生腳本產生之輸出相同的輸出。
開發者可用面向使用者之語言編寫腳本,該等腳本接著被編譯成中階語言腳本(元腳本)。交易可以其元腳本版本傳輸及儲存。交易係以元腳本或以原生腳本或以混合方式進行驗核(亦即,執行解除鎖定腳本及鎖定腳本)。亦即,區塊鏈節點104之元腳本引擎可與原生腳本引擎互動以獲得更多功能性及效率。
面向使用者之語言腳本可直接轉換成低階語言腳本(原生腳本)。然而,藉由引入中階語言腳本(元腳本),對於區塊鏈節點104,吾人儘可能多地減少在將面向使用者之語言腳本轉換成原生腳本時的工作。此允許節點104將其資源集中於諸如產生區塊(挖掘)之其他更重要的活動。實例繪示面向使用者之語言腳本、中階語言腳本及低階語言腳本彼此的差異,且在各種態樣中改善區塊鏈腳本。
下文提供本發明之一些實施例的特定實例。此等實例涉及比特幣區塊鏈,但應注意,該等實例通常適用於其他區塊鏈。
亦應注意,以下實例描述具有三個語言階之架構:面向使用者、中間及低。在此等實例中,智慧型合約係以面向使用者之語言編寫,該面向使用者之語言被轉換成以中階語言編寫之元腳本,該中階語言又被轉換成比特幣作業碼(亦即,低階語言)。
愛麗絲可使用面向使用者階的腳本語言來創建鎖定腳本[高階腳本B]。接著將鎖定腳本編譯成中間語言之元腳本且嵌入於交易中。
版本 1 鎖定時間 0
輸入計數 1 輸出計數 1
輸入清單 輸出清單
輸出點 解除鎖定腳本 序號 鎖定腳本
愛麗絲之輸出點 0xFFFFFFFF [元腳本B]
此處存在幾個備註。 1. 鎖定腳本[高階腳本B]為以面向使用者之腳本語言編寫的腳本。吾人將其稱作面向使用者之鎖定腳本。 2. 面向使用者之鎖定腳本被編譯成元腳本[元腳本B]。 3. 對於各元腳本,存在包含原生比特幣作業碼且等效於元腳本之原生鎖定腳本。亦即,在執行時給定相同的解除鎖定腳本,其始終產生相同結果。可經由測試及可驗證運算來達成此判定性行為及其等效性。 4. 原生鎖定腳本可為幾百萬個位元組或甚至更大,而其緊密形式可小至幾個位元組。當傳播及儲存交易時,大小的顯著差異有益於比特幣節點。 5. 首先建構未簽章交易(表1)。當對交易進行簽章時,將緊密鎖定腳本擴展至低階語言鎖定腳本(表2)。
版本 1 鎖定時間 0
輸入計數 1 輸出計數 1
輸入清單 輸出清單
輸出點 解除鎖定腳本 序號 鎖定腳本
愛麗絲之輸出點 0xFFFFFFFF [元腳本B]
表1:呈元腳本之未簽章交易
版本 1 鎖定時間 0
輸入計數 1 輸出計數 1
輸入清單 輸出清單
輸出點 解除鎖定腳本 序號 鎖定腳本
愛麗絲之輸出點 0xFFFFFFFF [自元腳本B擴展之比特幣作業碼]
表2:未簽章擴展交易
版本 1 鎖定時間 0
輸入計數 1 輸出計數 1
輸入清單 輸出清單
輸出點 解除鎖定腳本 序號 鎖定腳本
愛麗絲之輸出點 0xFFFFFFFF [自元腳本B擴展之比特幣作業碼]
表3:經簽章擴展交易 6. 在對交易進行簽章之後,雖然原生鎖定腳本仍存在於交易中,但交易經串列化及雙雜湊以獲得其交易ID。亦即,基於擴展鎖定腳本而非緊密鎖定腳本運算 。此達成無分叉性,亦即,防止區塊鏈中之分叉,此係因為TxID被定義為基於原生比特幣腳本。
版本 1 鎖定時間 0
輸入計數 1 輸出計數 1
輸入清單 輸出清單
輸出點 解除鎖定腳本 序號 鎖定腳本
愛麗絲之輸出點 0xFFFFFFFF [自元腳本B擴展之比特幣作業碼]
表4:經簽章擴展交易,其中已運算交易ID 7. 為了易於在一些情境下進行完整性驗證,可在對交易進行簽章之前將用於緊密鎖定腳本之次要交易ID嵌入於交易中。例如, 可定義為雜湊值,其原像包含以下各者中之一者: a. 版本及鎖定時間, b. 不具有解除鎖定腳本之輸入,以及 c. 具有呈緊密形式之鎖定腳本的輸出。
此展示於表5至8中。
版本 1 鎖定時間 0
輸入計數 1 輸出計數 1
輸入清單 輸出清單
輸出點 解除鎖定腳本 序號 鎖定腳本
愛麗絲之輸出點 0xFFFFFFFF [元腳本B]
0 OP_FALSE OP_RETURN <
表5:在創建未簽章緊密交易時嵌入次要交易ID
版本 1 鎖定時間 0
輸入計數 1 輸出計數 1
輸入清單 輸出清單
輸出點 解除鎖定腳本 序號 鎖定腳本
愛麗絲之輸出點 0xFFFFFFFF [自元腳本B擴展之比特幣作業碼]
0 OP_FALSE OP_RETURN <
表6:簽章在擴展交易及次要交易ID上
版本 1 鎖定時間 0
輸入計數 1 輸出計數 1
輸入清單 輸出清單
輸出點 解除鎖定腳本 序號 鎖定腳本
愛麗絲之輸出點 0xFFFFFFFF [自元腳本B擴展之比特幣作業碼]
0 OP_FALSE OP_RETURN <
表7:在包括次要交易ID之擴展交易上運算原生交易ID
版本 1 鎖定時間 0
輸入計數 1 輸出計數 1
輸入清單 輸出清單
輸出點 解除鎖定腳本 序號 鎖定腳本
愛麗絲之輸出點 0xFFFFFFFF [元腳本B]
0 OP_FALSE OP_RETURN <
表8:用緊密腳本替換擴展腳本
上文由愛麗絲103a創建之交易將以其緊密形成(元腳本)傳播,以節省頻寬。如早先所提及,相較於擴展鎖定腳本,其緊密形式可小幾個數量級。此與比特幣SV生態系統尤其相關,在該生態系統中,腳本之大小不受限制,且各區塊可含有數十億個交易(大約每10分鐘)。
目前,吾人假定存在二種類型之節點104:經組配以執行HL腳本語言之HL啟用比特幣節點;以及未經組配以執行HL腳本語言之HL停用比特幣節點。應注意,相比於感知到HL語言且僅被選擇以停用特徵之節點,HL停用節點為無視HL腳本語言且未經組配以使用HL語言之現有節點。
取決於用以對交易之輸入進行簽章的簽章旗標(參見上文的論述),HL停用節點可將含有CLS之交易視為無效。亦即,當HL停用節點接收到交易時,該等節點將交易視為無效且捨棄交易,此係因為其不具有擷取具有擴展鎖定腳本之原始交易的機制。因為在支出交易之解除鎖定腳本的簽章驗核期間,經簽章訊息應包括ELS (HL停用節點無法自CLS再生ELS),所以交易被視為無效。此為其接收交易ID但未接收到交易資料之相同情境。然而,當HL啟用比特幣節點發現區塊時,可解決此等節點不接受之問題。HL停用節點接收含有愛麗絲之交易的區塊。其交易被視為不存在,此係因為HL停用節點不儲存交易。HL停用節點可接著向HL啟用節點請求交易。HL啟用節點發送無緊密鎖定腳本之整個交易。HL停用節點可接著驗核整個交易。然而,若大多數節點啟用HL,則HL啟用節點可選擇忽略此類請求,此係因為愛麗絲之交易將被網路106之大多數節點接受。
在一些實例中,若簽章不對所有交易輸出進行簽章,則HL停用節點可能夠在未對含有CLS之輸出進行簽章的情況下將HL交易視為有效。在彼狀況下,HL停用節點可實際上用交易之CLS來驗核該交易。然而,此漏洞並非本發明所特定的,且一般而言,不具有簽章之任何交易的輸出皆易於被修改,該簽章具有對所有輸出進行簽章之簽章旗標(例如,SIGHASH_ALL)。
當HL啟用節點接收到交易時,其將進行以下操作: 1. 使用庫暫存器或參考表將元鎖定腳本轉換成對應的原生鎖定腳本,以獲得:
版本 1 鎖定時間 0
輸入計數 1 輸出計數 1
輸入清單 輸出清單
輸出點 解除鎖定腳本 序號 鎖定腳本
愛麗絲之輸出點 0xFFFFFFFF [自元腳本B擴展之比特幣作業碼]
2. 對交易資料進行雜湊以獲得其交易ID且檢查其是否與 相同。 3. 若相同,則通常繼續簽章驗證或腳本驗核。應注意,可替代地在接收到交易時開始腳本驗核。 4. 若交易有效,則HL啟用節點將交易以其緊密形式傳播至其同級者。
當HL停用節點驗證由HL啟用比特幣節點發現的區塊時,其將請求具有緊密鎖定腳本之交易的完整交易資料,或自其視角僅丟失交易。在此狀況下,HL啟用節點將發送具有擴展鎖定腳本之彼等交易。此將允許HL停用節點驗證彼等交易。由於各緊密鎖定腳本等效於擴展鎖定腳本,因此由HL啟用節點成功地驗核之交易亦將對HL停用節點有效。
假設使用者,比如鮑勃103b,將支出由愛麗絲103a創建之交易。其創建支出交易:
版本 1 鎖定時間 0
輸入計數 1 輸出計數 1
輸入清單 輸出清單
輸出點 解除鎖定腳本 序號 鎖定腳本
0xFFFFFFFF [元腳本C]
吾人假定 解除鎖定[元腳本B],其中 可含有來自鮑勃的關於公開金鑰 之數位簽章
作為HL啟用節點,其可選擇以下選項中之一者來驗核支出交易,或更精確地,驗核腳本「< >>[元腳本B]」: 1. 使用SDL獲得經編譯鎖定腳本且使用原生腳本引擎運行< > [比特幣作業碼中之擴展元腳本B] 2. 使用SDL運行< > [元腳本B]且獲得與選項1中相同的結果。
選項2提供HL啟用節點優於HL停用節點之運算優勢。考慮存在二腳本引擎 之情境,其中 1. 給定引擎之相同輸入, 二者產生相同結果;且 2. 更高效(當給定相同輸入時,花費更少時間來產生結果)。
作為節點, 之間的切換將不會影響區塊鏈協定。
鑒於上述理由,HL啟用節點可在原生腳本引擎(作為 )與HL引擎(作為 )之間切換以最佳化其腳本驗核程序。
作為HL啟用節點,其可儲存具有緊密鎖定腳本之交易以節省空間。在不失一般性的情況下,吾人假定交易存在,如表10中。
版本 1 鎖定時間 0
輸入計數 1 輸出計數 1
輸入清單 輸出清單
輸出點 解除鎖定腳本 序號 鎖定腳本
愛麗絲之輸出點 0xFFFFFFFF [元腳本B]
0 OP_FALSE OP_RETURN <
表10:儲存具有次要交易ID之緊密交易
可替代地將次要識別符附加至第一輸出,例如 [智慧型合約] OP_FALSE OP_RETURN >。
應注意,當擴展成原生作業碼時,鎖定腳本[自元腳本B擴展之比特幣作業碼]可為幾百萬個位元組,而在其緊密形式(元腳本)中,鎖定腳本可小至幾個位元組。當在一個區塊中(大約每10分鐘)存在數十億個此類交易時,儲存空間之節省變得顯著。
此外,在包括完整性由數位簽章保護之次要交易ID的情況下,假定對應簽章者受信任,則吾人可在不編譯緊密鎖定腳本之情況下驗證該腳本之完整性。
圖6繪示交易自產生至驗核之例示性流程。首先,使用HL腳本語言產生交易 。接著HL腳本語言轉換成LL腳本語言,從而產生 。接著基於 產生交易識別符 。將交易識別符 及HL交易 發送至區塊鏈節點104。節點104接收交易識別符 及HL交易 。可將HL腳本語言轉換成LL腳本語言,且可接著使用所得交易產生交易識別符 。在此任擇流程中,比較所接收之交易識別符與所產生之交易識別符。若其匹配,則節點104繼續驗核交易,且反之亦然。然而,應注意,交易識別符之產生及比較為任擇的,可跳過。亦即,節點104可直接繼續驗核交易。
之發送充當任擇的錯誤檢查機制,其使得節點104能夠偵測由交易產生者(例如,愛麗絲130a)與交易驗核節點104使用之映射(CLS至/自ELS)之間的任何差異。然而,亦可使用替代錯誤檢查機制。 之包括亦允許節點104快速開始挖掘操作(例如,基於 建構默克爾樹),同時仍運行交易映射及驗核。
圖7繪示經簽章交易自產生至驗核之另一例示性流程。該流程類似於圖6之流程,其中增添了在將HL腳本語言轉換成LL腳本語言之後對交易進行簽章的步驟。交易識別符係基於經簽章交易。首先,藉由交易引擎功能產生且以HL語言編寫交易鎖定腳本。此輸出具有緊密鎖定腳本之交易 ,該交易尚未經簽章。通常,交易中之解除鎖定腳本將需要對交易進行簽章。對於待簽章之交易,必須用LL函式之等效集合替換HL函式。將 傳遞至用例如作業碼之原生LL函式替換HL函式的映射模組。映射模組獲取 且輸出 ,該輸出被傳遞簽章模組。交易簽章模組獲取 且輸出經簽章交易 用以產生交易識別符 。再次將 傳遞至用HL函式替換LL函式之映射模組。任擇地,發送者接著串連 且將其發送至區塊鏈。實情為,交易可單獨地發送。任擇地,為了檢查由接收者之映射是否與由發送者使用之映射相同,接收者將 映射至 ,產生 且檢查其是否等於 。若其相同,則接收者可繼續交易驗核。在此執行個體中, 用作同位檢查。應再次注意,TxID之此驗證為任擇的,且實情為,節點104可直接繼續交易驗核。
圖8繪示在發送及驗核交易時之例示性資料流。HL啟用交易創建者(例如,愛麗絲130a)產生具有緊密鎖定腳本之交易。此時,交易未經簽章。用擴展腳本替換緊密鎖定腳本且接著對其進行簽章。對經簽章交易進行雜湊以產生交易識別符。用緊密鎖定腳本替換擴展鎖定腳本,且將二者發送至區塊鏈網路106 (交易識別符可包括於交易中,而非與交易串連,如描述於圖8中)。HL啟用交易驗核者(例如,節點104)接收交易及交易識別符。用擴展鎖定腳本替換緊密鎖定腳本,且接著任擇地,對交易進行雜湊以產生候選交易識別符。在此選項中,將候選交易識別符與所接收之交易識別符進行比較,且若其匹配,則驗核者繼續驗核交易。若其不匹配,則驗核者捨棄交易。作為替代選項,可能不需要HL啟用節點來驗核交易識別符。亦展示HL停用交易驗核者。若僅接收到交易之緊密版本,則HL停用交易驗核者無法驗核交易。另一方面,若接收到擴展交易,則HL停用交易驗核者可驗核交易。當在區塊鏈上發布交易時,HL停用驗核者需要經編譯交易來驗核交易。 7.   傳訊協定
上文關於圖5至圖9之描述描述了用於產生緊密交易及將緊密交易轉換成擴展交易之協定。參看此等圖所描述之特徵中之一些或全部可適用於圖10至圖13之實施例。
圖10自接收交易之CS啟用節點104a之視角概述協定。如所展示,CS啟用節點104a接收區塊鏈交易。若區塊鏈交易為緊密交易,則緊密交易以其緊密形式進行處理及驗核。應注意,此可包括將緊密交易轉換成其擴展(規範)形式。緊密交易為具有至少一個緊密輸出(亦即,包含緊密腳本之輸出)及/或參考不同交易之緊密輸出之至少一個輸入的交易。
若區塊鏈交易為擴展交易(亦即,以原生低階腳本語言編寫),則擴展交易以其擴展形式進行處理及驗核。識別可藉由檢查交易中是否存在顯式協定旗標或諸如一些HL函式(亦被稱作元作業碼)之任何隱式指示符來進行。顯式旗標可為預定且商定之交易版本號碼或在鎖定腳本或解除鎖定腳本之開頭的位元組。隱式指示符可為鎖定腳本之格式。舉例而言,若鎖定腳本以已知HL函式(例如,MOP_LIBLOAD)開始,則對應交易可識別為緊密交易。
圖11繪示例示性腳本執行程序。CS啟用節點104a包含經組配以將腳本以其緊密腳本形式進行處理之腳本引擎,該處理可涉及將緊密腳本擴展至擴展腳本。如圖11展示,存在二個選項。一個選項為將腳本以其緊密腳本形式執行且另一選項為將腳本以其擴展形式執行。
圖12示意性地繪示CS啟用節點104a與CS停用節點104b之間的相容性。CS啟用節點104a應僅將緊密交易廣播至能夠程序該等交易之節點。CS啟用節點104a可自其他CS啟用節點104a及CS停用節點104b二者接收交易。另一方面,CS停用節點104b不具有直接處理緊密交易(其需要預先轉換成規範腳本)之能力。當CS啟用節點104a將緊密交易發送至CS停用節點104b時,可能會出現問題。實際上,緊密腳本無法由CS停用節點104b解譯。舉例而言,CS停用節點可能無法使用緊密腳本驗核交易(其他細節參見下文),最終拒絕緊密交易。
圖13示意性地繪示用於實施本發明之實施例的系統1300。系統1300包含若干CS啟用節點104a及若干CS停用節點104b。應瞭解,系統1300可包含任何數目個CS啟用節點104a及CS停用節點104b。在此實例中,系統亦包含使用者愛麗絲103a。
CS啟用節點104a (為方便起見,在下文被稱作查理104a)獲得區塊鏈交易之集合。舉例而言,一或多個交易可自愛麗絲103a發送至查理104a。查理104a可自例如鮑勃103b之另一使用者接收一或多個交易。查理104a可另外或替代地自其他節點104接收一或多個交易。交易中之至少一些為緊密交易,亦即,包含緊密腳本之交易。
在某一時刻,查理104a需要與其他節點共用緊密交易中之至少一者,該等其他節點包括其他CS啟用節點104a及CS停用節點。取決於情形,查理104a可能需要與其他節點發送多於一個(例如,所有)緊密交易。
鑒於其他CS啟用節點104a可處理緊密交易,查理104a將緊密交易直接傳輸至其他CS啟用節點104a,亦即,緊密交易係以其緊密形式發送。其他CS啟用節點104a可接著將緊密交易以其緊密形式執行,或選擇將緊密交易之緊密腳本擴展至其擴展形式,且接著執行擴展腳本(參見例如圖12)。
另一方面,鑒於CS停用節點104b無法將緊密交易以其緊密形式進行處理,查理104a必須將緊密交易轉換成其擴展形式,且將擴展交易發送至CS停用節點。如上文所提及,擴展交易為包含緊密腳本之擴展形式而非緊密腳本的交易。擴展腳本僅包含低階腳本,亦即,區塊鏈之原生腳本。
查理104a可選擇自動地將緊密交易發送至其他CS啟用節點104a,亦即,不要求如此操作。替代地,查理104a可僅將緊密交易發送至已請求緊密交易之CS啟用節點104a。另外或替代地,查理104a可自動地或回應於來自彼等CS停用節點之請求將擴展交易發送至CS停用節點104b。
由查理104a獲得之緊密交易可能尚未在區塊鏈150之區塊151中發布。在彼狀況下,查理104a可向區塊鏈150發布包含緊密交易之新區塊151。向區塊鏈發布區塊151可包含將區塊151傳播至其他節點104以供驗核。查理104a可在發布區塊151之前或之後將緊密交易及擴展交易分別發送至CS啟用節點104a及CS停用節點。在一些狀況下,區塊151之發布為與將緊密交易發送至CS啟用節點104a相同的動作。
CS啟用節點104a可向查理104a請求含於區塊151中之緊密交易中之一些或全部。舉例而言,CS啟用節點104a可能已接收到區塊151中之緊密交易中之一或多者。類似地,在判定無法處理區塊151中之緊密交易中之一或多者後,CS停用節點可將對彼等交易之擴展版本的請求發送至查理104a。查理104a接著將對應擴展交易發送至CS停用節點。
各緊密交易與交易識別符(TxID)相關聯。交易識別符係基於緊密交易之擴展版本,亦即,對應擴展交易。舉例而言,TxID可為擴展交易之雜湊(例如,雙雜湊)。下文進一步提供TxID之論述。在一些實施例中,查理104a可首先將與緊密交易相關聯之TxID發送至CS啟用及/或CS停用節點。查理104a可發布TxID而非或以及將其發送至節點。舉例而言,由查理104a發布之區塊151可包含TxID。在一些實例中,由查理104a發布之區塊151可包含緊密交易之TxID,但不包含緊密交易自身。
替代發送或發布完整的TxID,查理104a可發送或發布TxID之緊密版本,例如TxID之前n個位元組。此可為例如TxID之前四個前置位元組。
CS啟用及/或CS停用可使用與緊密交易相關聯之TxID (或壓緊版本),以分別判定彼節點需要緊密交易抑或對應擴展交易。若CS啟用節點104a因為其尚未接收到緊密交易而需要該緊密交易,則CS啟用節點104a向查理104a請求緊密交易。作為回報,查理104a將所請求之緊密交易發送至CS啟用節點。類似地,若CS停用節點因為節點無法處理緊密形式而需要緊密交易之擴展形式,則CS停用節點向查理104a請求緊密交易之擴展形式。作為回報,查理104a將所請求之擴展交易發送至CS停用節點。
在一些實例中,與緊密交易相關聯之TxID或TxID之緊密版本(「緊密TxID」)可包含相關聯交易為緊密交易之指示。此使得其他節點能夠快速判定其需要請求交易之緊密版本抑或擴展版本。
該指示可為與初始TxID組合之額外位元。亦即,各TxID可具有相同預定長度(例如,256個位元)。若節點接收具有額外位元之TxID (例如,長度為257個位元),則該節點可將彼TxID解譯為與緊密交易相關聯。相同情形適用於緊密TxID。
作為另一實例,與緊密交易相關聯之TxID可與工作量證明一起嵌入。亦即,初始交易之一部分(例如,臨時亂數)可改變直至交易之雜湊產生滿足例如最小數目個前置零之目標困難的TxID。若節點接收具有某數目個前置零之TxID,則該節點可將彼TxID解譯為與緊密交易相關聯。相同情形適用於緊密TxID。
替代使用TxID或緊密TxID來指示交易是否為緊密交易,查理104a可替代地將緊密交易與指示交易為緊密交易之旗標一起發送至其他節點。舉例而言,若干緊密交易可分組在一起且與旗標一起發送。
用於判定交易是否為緊密交易之另一選項係經由使用隱式指示符,如上文參看圖11所論述。
在一些實施例中,查理104a可在同級探索程序期間判定節點為CS啟用節點104a抑或CS停用節點。同級探索程序可涉及交握程序,在此期間交換關於節點的資訊。替代地,查理104a可自別處獲得資訊,例如自諸如區塊鏈自身或網頁之公開可用源。
圖13主要係自CS啟用節點(查理104a)之視角進行描述。現將出於方便起見自CS停用節點(被稱作丹妮絲(Denise))之視角簡要地描述圖13。丹妮絲例如自查理104a、使用者或自發布區塊151獲得(例如,接收)緊密交易。替代地,丹妮絲可獲得指示彼交易為緊密交易之指示符。可能已獲得或可能尚未獲得交易自身。丹妮絲判定其無法處理緊密交易或與指示符相關聯之交易。作為回應,丹妮絲將對緊密交易之擴展版本的請求發送至查理104a。在一些實例中,丹妮絲可首先在發送請求之前將交易視為無效。舉例而言,丹妮絲可首先嘗試處理交易,此將導致丹妮絲將交易視為無效。丹妮絲可接著發送請求。查理104a接著將對應擴展交易發送至丹妮絲。丹妮絲可接著處理(例如,驗核)擴展交易,或儲存擴展交易以供稍後處理。如上文所論述,指示符可為與緊密交易相關聯之TxID或緊密TxID或與緊密交易相關聯之旗標的部分。
現提供其他特定實例。
CS停用節點可僅處理規範腳本,而CS啟用節點104a可處理緊密腳本及規範腳本二者。出於此原因,CS啟用節點104a需要知曉其相鄰者是否能夠處理緊密交易。區塊鏈節點可在同級探索程序期間發信其是否為CS啟用節點104a。新節點執行個體及已離線片刻之節點必須在網路中查找其他同級者。當節點啟動時,其連接至一或多個已知同級者(例如,提供為靜態清單)。一旦創建了連接,此等二個節點便使用addr訊息交換其相鄰者之清單。一般而言,二個節點之間的連接可涉及交握程序,其中其可交換一些識別資訊。此資訊可包括以下各者中之一些或全部:nVersion、nLocalServer、nTime、addrYou、addrMe、subvert及BestHeight。特定而言,subver欄位(4個位元組)指示所執行之節點軟體之類型(例如,v.1.0.6)。節點可因此使用此欄位來亦發信其是否經啟用以接收CS作業碼。舉例而言,若規範版本為v1.0.6,則CS啟用可為v1.0.6cs或v1.0.6.1。此實施為有效且簡單的,此係因為其不需要當前交握程序中之任何改變。
CS啟用節點104a可採用可在節點軟體組態檔案中設定之用於廣播緊密交易的五個策略中之一者。此等策略為: 1.   預防性CS轉換(廣播至每個節點) 2.   按需CS轉換(廣播至CS節點,對每個節點作出回應) 3.   無CS轉換(廣播至CS節點,對CS節點作出回應) 4.   無CS轉換(不廣播,對每個節點作出回應) 5.   無CS轉換(不廣播,對CS節點作出回應)
一般而言,CS啟用節點104a可選擇僅廣播TxID,且若接收節點不具有用於彼TxID之交易,則接收節點可請求所需交易資料。
經組配以執行「預防性MS轉換」之CS啟用節點104a首先將緊密交易傳輸至其他CS啟用(例如,根據其subver)。接著將緊密交易轉換成其規範形式且傳輸至規範節點。此方法對於規範節點為完全透明的,該等節點從未看到緊密腳本且繼續與其他節點交換交易(自其視角,其皆為規範節點)。
經組配以「按需」傳輸MS交易之CS啟用節點104a僅將緊密交易傳輸至其他CS啟用節點104a (例如,根據其subvert)。當CS啟用節點104a發布含有緊密交易之區塊時,規範節點可發現丟失或對於其無效之一些交易(除非其自使用預防性CS轉換之節點或自另一規範節點接收到規範版本)。此時,規範節點向網路請求丟失交易且僅在此時,設定為按需轉換之CS啟用節點104a傳輸規範腳本。換言之,此類型之CS啟用節點104a並不主動地將緊密交易傳播至規範節點,但其在發布區塊之後按需將該等交易轉換成規範交易。
此方法對於無法驗核及「挖掘」緊密交易之規範節點並不透明。然而,此組態改善僅廣播各交易之最高效版本且僅按需將其轉換成規範形式的CS啟用節點104a之效率。
經組配為「無CS轉換」之MS節點僅將緊密交易傳輸至CS啟用節點104a。其從不為規範節點轉換緊密交易。此解決方案經設計用於小型玩家及具有低頻寬之節點(例如,商店)。其仍將規範交易廣播至規範節點/自規範節點接收規範交易,但當其必須傳播區塊時可能較慢,此係因為規範節點將無法接受該等交易(直至另一節點為其轉換緊密交易)。最終,規範節點可與此等節點斷開連接(此係因為其看起來傳輸無效區塊或廣播無效交易)。此可減少此類型之節點的連接性,因此在與可代表此類型之節點廣播區塊的其他CS啟用節點104a存在高連接性時應使用該連接性。值得注意地,若CS啟用節點104a有意地或錯誤地將緊密交易發送至規範節點,則不會對網路或對接收節點自身造成問題。規範節點將簡單地使用緊密腳本運算交易ID且驗證其不匹配所傳輸之交易ID。此時,規範節點將假定在交易之創建或傳輸中存在錯誤且將拒絕該交易。
區塊鏈節點可選擇遷移至CS啟用軟體,此係因為其在儲存空間及頻寬方面提供明顯的優勢。實際上,對於CS啟用節點104a,發布及接收具有若干緊密交易之區塊更快,從而使其比規範節點具有競爭優勢(其愈早接收到區塊,則其愈早開始在新節點上挖掘)。對於在發布區塊之後執行轉換的「按需轉換」節點且對於僅將所發布區塊傳輸至其他CS啟用節點104a之「無CS轉換」節點尤係如此。
隨著區塊大小增加,在儘可能快的時間內傳輸區塊係有利的。為此,一個選項為僅傳輸交易ID或甚至其緊密版本(例如,僅前6個位元組)。在此情境下,知曉交易ID是否參考緊密交易係有用的。由於正傳輸之僅有資訊為ID,因此此資訊可嵌入於其中。達成此情形之一個選項為修改交易ID,例如,此可藉由將PoW增添至此等ID來達成(改變交易之部分直至發現有效ID)。舉例而言,緊密交易ID可必須以「000」(機率為1/4,096)或「0000」(機率為1/65,536)開始,替代地,可將額外位元增添至ID。替代方法涉及將緊密交易分組,此群組接著用特殊旗標進行廣播。
識別緊密交易可為有用的,此係因為規範軟體可決定使用第三方預處理服務來轉換緊密交易而非拒絕該等交易。 8.   實例
此章節提供繪示所揭露架構可如何工作之三個實例集合。第一集合集中於在自最高階(面向使用者)語言轉換成中階(元腳本)語言時使用函式表的實用性及運算效率優勢。第二集合集中於元腳本語言之緊密性。第三集合提供對更複雜之一些腳本的見解。第三集合亦繪示可如何將以高階語言編寫之腳本直接轉換成低階原生腳本語言。 8.1 例示性集合1:
此實例繪示可如何使用函式表將以最高階語言編寫之腳本轉換成緊密元腳本。例示性腳本反轉輸入字串之字元。 最高階語言word length(value) {value OP_SIZE OP_NIP} word reverse(value){             let l = length(value)-1         value         loop (l) { OP_1 OP_SPLIT }         loop (l) { OP_SWAP OP_CAT } } reverse('I am fish')
接著將最高階語言編譯成中階語言,其中參考或創建函式表及變數表。分發且可在本端儲存函式表及變數表。在一些實例中,一旦創建,變數表便可讀取及可寫入,而函式表僅可讀取。作為實例,吾人具有以下函式表:
函式表
ID 名稱 輸入數目 實施方案
0 length 1 OP_SIZE OP_NIP
1 reverse 1 $0 0 MOP_FN_CALL 1 OP_SUB 0 MOP_SET_VAR 0 MOP_GET_VAR MOP_LOOP OP_1 OP_SPLIT MOP_END_BLOCK 0 MOP_GET_VAR MOP_LOOP OP_SWAP OP_CAT MOP_END_BLOCK
變數表
ID
0
1
在此例示性函式表中存在具有函式ID 0及1之二個函式。第一函式運算輸入字串之大小,而第二函式呼叫第一函式且接著反轉字串。下文給出函式1之描述:
$0參考尚未提供之腳本之第一輸入。其可為堆疊上之頂部項目。0 MOP_FN_CALL為呼叫函式表中具有函式ID 0之函式的語法。在執行$0 0 MOP_FN_CALL之後,輸入之長度將保留在堆疊之頂部上。1 OP_SUB自堆疊頂部上之值減去1且將結果保留在堆疊之頂部上。0 MOP_SET_VAR將指派堆疊上之頂部元素給變數表中具有索引0之變數。此變數將可用於執行之其餘部分。0 MOP_GET_VAR將推送變數表中具有索引0之變數的值至堆疊之頂部。此為自變數表擷取變數之語法。MOP_LOOP OP_1 OP_SPLIT MOP_END_BLOCK消耗堆疊上之第一值,且在MOP_LOOP與MOP_END_BLOCK之間多次進行命令迴圈。在執行0 MOP_GET_VAR MOP_LOOP OP_1 OP_SPLIT MOP_END_BLOCK之後,將字串分成一位元組子串。類似地,0 MOP_GET_VAR MOP_LOOP OP_SWAP OP_CAT MOP_END_BLOCK將調換子串之次序且將其串連以形成為輸入字串之反轉的字串。
應注意,變數表在創建時不一定必須填充有值。其如同函式執行之替代符號。其允許在執行期間儲存及傳遞值。
可使用「while」迴圈達成相同結果。 word length(value){value OP_SIZE OP_NIP;} word onesplit(){OP_1 OP_SPLIT;} word swcat(){OP_SWAP OP_CAT;} word reverse(value){         value;         let l = length(value)-1;         let counter = 0;         while (l, counter < l) {  //「while」可獲取二個參數                 onesplit;           //最大迴圈數目及條件                 counter = counter + 1;         }         let counter = 0;         while (counter <l) {      //若未設定最大數目,則採用預設最大數目                 swcat;           //可應用。                 counter = counter + 1;         } } reverse('I am fish')
函式表
ID 名稱 輸入數目 實施方案
0 length 1 OP_SIZE OP_NIP
1 reverse 1 $0 0 MOP_FN_CALL 1 OP_SUB 0 MOP_SET_VAR MOP_LOOP_IF COUNTER 1 MOP_GET_VAR LESSTHAN MOP_END_BLOCK OP_1 OP_SPLIT MOP_END_BLOCK MOP_LOOP_IF COUNTER 1 MOP_GET_VAR LESSTHAN MOP_END_BLOCK OP_SWAP OP_CAT MOP_END_BLOCK
變數表
ID
0
1
吾人在此處具有二個變數l及COUNTER。吾人建議COUNTER可為具有預設值之保留變數。亦即,吾人可在元腳本中直接呼叫COUNTER。當其在「while」迴圈中被呼叫,其以值0開始,且在各迴圈之後遞增1。
吾人現描述「while」迴圈如何工作: 若計數器小於具有索引0之變數,則MOP_LOOP_IF COUNTER 0 MOP_GET_VAR LESSTHAN MOP_END_BLOCK開始迴圈。計數器為具有預設值之保留變數。亦即,吾人可在元腳本中直接呼叫COUNTER。其隱含地對已執行之迴圈進行計數。其以0開始且每次遞增1。當計數器達到由高階語言設定之最大值或預設值,或條件不符合時,執行將退出「while」迴圈。在此狀況下,具有索引0之變數為輸入字串之長度。一般而言,MOP_LOOP_IF可繼之以任何條件且該條件由MOP_END_BLOCK結束。若符合條件,則重複執行OP_1 OP_SPLIT。應注意,吾人不將其包括於函式表中以展示此處存在不包括定義於高階語言中之每個字語的選項。一般的實踐可為:若將頻繁地參考函式,則其將包括於函式表中。MOP_END_BLOCK標記待重複之程式碼的結束。在執行MOP_LOOP_IF COUNTER 1 MOP_GET_VAR LESSTHAN MOP_END_BLOCK OP_1 OP_SPLIT MOP_END_BLOCK之後,字串將分成一位元組子串。類似地,MOP_LOOP_IF COUNTER 1 MOP_GET_VAR LESSTHAN MOP_END_BLOCK OP_SWAP OP_CAT MOP_END_BLOCK將調換子串中之另一者,且將其串連以形成字串,該字串為輸入字串之反轉。 中階語言 ( 元腳本 )
假設吾人已將字串「我係魚(I am fish)」輸入至reverse函式,元腳本將如下所示: 'I am fish' 1 MOP_FN_CALL
元腳本接著嵌入於交易中(作為鎖定腳本)。交易係以其元腳本形式傳輸及儲存。
元腳本可藉由元腳本引擎直接執行,如描述於函式表章節中。MOP_FN_CALL 1呼叫函式表中之函式1。「I am fish」為函式之輸入。輸出將為輸入字串之反轉。
給定函式表,元腳本亦可擴展至其原生形式以產生交易ID、驗證簽章或待藉由原生腳本引擎執行。
當擴展此例示性腳本時,吾人假定腳本之創建者已知輸入(解除鎖定腳本),或迴圈之某一最大計數器由腳本之創建者設定以便防止無限迴圈。 低階語言 ( 例如 比特幣作業碼 )
當擴展元腳本時,將展開所有迴圈且僅允許原生作業碼。作為實例,吾人具有對應於先前例示性元腳本之以下原生腳本。 <I am fish> // 堆疊以字串「 I am fish 」開始op_1 op_split //<I>< am fish>-- 該字串分裂成二個字串「 I 」及「 am fish 其中最右方的「 am fish 」在堆疊之頂部上op_1 op_split //<I>< ><am fish> op_1 op_split //<I>< ><a><m fish> op_1 op_split //<I>< ><a><m>< fish> op_1 op_split //<I>< ><a><m>< ><fish> op_1 op_split //<I>< ><a><m>< ><f><ish> op_1 op_split //<I>< ><a><m>< ><f><i><sh> op_1 op_split //<I>< ><a><m>< ><f><i><s><h> op_swap op_cat //<I>< ><a><m>< ><f><i><hs> op_swap op_cat //<I>< ><a><m>< ><f><hsi> op_swap op_cat //<I>< ><a><m>< ><hsif> op_swap op_cat //<I>< ><a><m><hsif > op_swap op_cat //<I>< ><a><hsif m> op_swap op_cat //<I>< ><hsif ma> op_swap op_cat //<I><hsif ma > op_swap op_cat //<hsif ma I>
應注意,規範腳本之大小隨著輸入字串之大小線性地增加。然而,元腳本之大小幾乎恆定且獨立於輸入字串之大小。此證明元腳本架構在儲存空間及頻寬上的顯著節省。 8.2 實例集合2:
此部分中之第一實例亦反轉輸入字串中之字元。此實例展示可如何在不使用所描述之函式表的情況下達成相同功能。在此實例中,將高階反轉函式編譯成元腳本。例如,編譯器經組配以讀取函式「reverse()」且編譯對應元腳本。作為特定實例,高階函式至元腳本之映射可儲存於編譯器可存取之記憶體中。 高階語言 ( 亦即 面向使用者之語言 ) //reverse()獲取字串作為輸入,且輸出反轉輸入字串中之字元的字串。 return reverse(“I am fish”) //輸出:「hsif ma I」 當保存為txt檔案(原始程式碼)時,31個位元組 中階語言 (腳本 ) <I am fish> 8 meta_loop one_split 8 meta_loop swap_cat 76 09 49 20 61 6d 20 66 69 73 68 08 c0 d1 8 c0 e2
作為實例,吾人將c0用於meta_loop,將d1用於one_split且將e2用於swap_cat。
應注意,「76 09」待將9個位元組之資料推送至堆疊之頂部。 2 (推送資料) + 9 (資料) + 6 = 元腳本中之17個位元組
當自高階語言編譯時,元腳本自編譯器獲得反轉字串所需的迴圈之數目。在此狀況下,迴圈之數目為 低階語言 ( 比特幣作業碼 / 原生腳本 ) <I am fish> op_1 op_split //頂部< am fish> <I> op_1 op_split //<am fish> < > <I> op_1 op_split //<m fish> <a> < > <I> op_1 op_split //< fish> <m> <a> < > <I> op_1 op_split //<fish> < > <m> <a> < > <I> op_1 op_split //<ish> <f> < > <m> <a> < > <I> op_1 op_split //<sh> <i> <f> < > <m> <a> < > <I> op_1 op_split //<h> <s> <i> <f> < > <m> <a> < > <I> op_swap op_cat //<hs> <i> <f> < > <m> <a> < > <I> op_swap op_cat //<hsi> <f> < > <m> <a> < > <I> op_swap op_cat //<hsif> < > <m> <a> < > <I> op_swap op_cat //<hsif > <m> <a> < > <I> op_swap op_cat //<hsif m> <a> < > <I> op_swap op_cat //<hsif ma> < > <I> op_swap op_cat //<hsif ma > <I> op_swap op_cat //<hsif ma I> 2 (op_pushdata及資料大小) + 9 (資料) + 32 = 43個位元組
當在編譯時函式之輸入不可用時,迴圈之數目亦可能不可用。在此狀況下,元腳本將經設計以自解除鎖定腳本獲取資訊或假定預設最大值。舉例而言: 呈高階語言之鎖定腳本(函式):reverse() 呈元腳本之鎖定腳本(函式):meta_var meta_assignVar meta_var meta_loop one_split meta_var meta_loop swap_cat 解除鎖定腳本(函式之輸入)可為<I am fish> 8。
在轉換成比特幣作業碼(原生腳本)之前,「8 meta_var meta_assignVar」將值「8」指派給具有名稱「meta_var」之變數。在此指派之後,每當「meta_var」出現時,其由「8」替換。因此,一旦給定輸入,吾人便將具有與吾人在上文所具有相同的元腳本。應注意,吾人僅引入2個額外位元組用於指派變數。
在此實例中,函式求出二個整數之最大公約數(GCD)。 高階語言 //gcd(a,b)為獲取二個整數 作為輸入且輸出 之最大公約數的函式。 return gcd(42,17) //輸出:1 17個位元組 中階語言 17 42 meta_SWAPIFGREATERTHAN OP_OVER meta_DUPIF OP_MOD 6 meta_NESTEDDUPIF OP_SWAP OP_OVER OP_MOD meta_ENDNESTEDDUPIF meta_ENDDUPIF 11 2a f0 78 c7 97 06 fa 7c 78 97 fb f1 13個位元組 低階語言 17 42 OP_2DUP // [17] [42] [17] [42] TOP OP_GREATERTHAN // [17] [42] [0] OP_IF         OP_SWAP OP_ENDIF OP_OVER // [17] [42] [17] OP_DUP // [17] [42] [17] [17] OP_IF // [17] [42] [17]         OP_MOD // [17] [8]         OP_DUP // [17] [8] [8]         OP_IF // [17] [8]                 OP_SWAP // [8] [17]                 OP_OVER // [8] [17] [8]                 OP_MOD // [8] [1]                 OP_DUP // [8] [1] [1]                 OP_IF // [8] [1]                          OP_SWAP // [1] [8]                           OP_OVER // [1] [8] [1]                          OP_MOD // [1] [0]                           OP_DUP // [1] [0] [0]                          OP_IF // [1] [0]                                   OP_SWAP                                   OP_OVER                                   OP_MOD                                   OP_DUP                                   OP_IF                                           OP_SWAP                                           OP_OVER                                           OP_MOD                                           OP_DUP                                           OP_IF                                                   OP_SWAP                                                   OP_OVER                                                   OP_MOD                                                   OP_DUP                                                   OP_IF                                                           OP_SWAP                                                           OP_OVER                                                           OP_MOD                                                   OP_ENDIF                                           OP_ENDIF                                   OP_ENDIF                           OP_ENDIF                 OP_ENDIF         OP_ENDIF OP_ENDIF OP_DROP //[1] 49個位元組
當吾人具有大數字時,節省變得更加顯著。
此外,當吾人具有諸如橢圓曲線點相加及純量乘法之複雜函式時,元腳本(中階語言)將處於10個位元組之規模,而原生腳本(低階語言)將處於百萬位元組之規模。
吾人簡要地描述如何在元腳本中指派元變數。在此章節中,吾人引入在原生腳本中指派變數之機制。 高階語言 var = 5 return var + var 中階語言 5 var meta_assign var var op_add 低階語言 5 OP_TOALTSTACK OP_FROMALTSTACK OP_DUP OP_TOALTSTACK OP_FROMALTSTACK OP_DUP OP_TOALTSTACK OP_ADD
當轉換成原生腳本(例如,比特幣作業碼)時,「5 var meta_assign」變為「5 OP_TOALTSTACK」且將值「5」指派給具有名稱「var」之變數。在此指派之後,每當「var」出現時,其被轉換成「OP_FROMALTSTACK OP_DUP OP_TOALTSTACK」。alt堆疊變為用於儲存所有變數之堆疊(作為有序清單)。 8.3 實例集合3:
在以下實例中,將HL腳本直接轉換成LL腳本,亦即,僅存在腳本語言之二個階:高及低。
GCD為獲取二個整數 作為輸入且輸出 之函式。此係使用可由以下操作描述之歐氏演算法達成: 1. 令 2. 給定 ,使用除法演算法以寫入 3. 若 ,則停止且輸出 ;此為 之gcd。 4. 若 ,則用 替換 。轉至步驟2。
以上演算法可易於使用高階程式設計語言編寫及執行。然而,使用比特幣作業碼腳本運行歐氏演算法並非容易的任務。由於擴展腳本不允許迴圈,因此吾人將必須使用重複的OP_IF陳述式寫下各迴圈。
以下腳本獲取主堆疊中之二個最頂部數位 ,其中 在頂部且在堆疊中保留 ,其中 OP_IFDUP OP_IF OP_TUCK OP_MOD OP_ENDIF
演算法可寫成 OP_IFDUP OP_IF OP_TUCK OP_MOD         OP_IFDUP OP_IF OP_TUCK OP_MOD                   OP_IFDUP OP_IF OP_TUCK OP_MOD                   OP_ENDIF           OP_ENDIF OP_ENDIF
若可在3個迴圈中計算二個正整數之GCD,則以上實例將求出該GCD。若輸入需要更多迴圈,則吾人將必須編寫更多if陳述式。此意謂若愛麗絲希望運行演算法且其預先並不知曉輸入,則其將必須定義IF陳述式之最大數目,該數目足夠大以容納其輸入之範圍。若其希望將彼數目設定為100或更大,則將以經編譯腳本產生極大交易。
在此實例中,愛麗絲將需要指定反覆之最大數目,且SDL啟用節點將能夠以擴展腳本產生其準確交易。
當以上演算法定義為 函式 / 庫函式/forth 字語時,吾人描述 堆疊初始狀態: 堆疊最終狀態: , Altstack初始狀態:未使用 Altstack最終狀態:未使用 計算: ,或 FUNCTION_1-獲取<a>、<b>,傳回<r><q>,其中a=b*q+r         堆疊初始狀態:<a> <b> //<b> 為堆疊之頂部堆疊最終狀態:<q>         Altstack初始狀態:未使用         Altstack最終狀態:<d><b>// b 為altstack 之頂部OP_TUCK OP_2DUP OP_MOD OP_DUP OP_TOALTSTACK OP_SWAP OP_TOALTSTACK OP_SUB OP_SWAP OP_DIV
以上操作可如下以HL語言編寫為HL函式: HL函式qr() { TUCK 2DUP MOD DUP TAS SWAP TAS - SWAP / }
HL腳本語言允許吾人定義HL函式。其亦允許吾人以使用者友好且高效的方式編寫OP_CODES。對於以上實例,TUCK DUP SWAP等效於OP_TUCK OP_DUP OP_SWAP,FAS及TAS等效於OP_FROMALTSTACK及OP_TOALTSTACK,+ - * / %等效於OP_ADD OP_SUB OP_MUL OP_DIV及OP_MOD,等等。
HL函式qr()獲取主堆疊上之頂部二個值且傳回商及餘數,亦即,其獲取<a>及<b>且計算<q>及<r>,其中a = b*q + r */。
FUNCTION_2-用以計算擴展歐氏演算法之參數 的一個迴圈。實例以具有 之初始值的堆疊開始。演算法以 開始,其中 堆疊初始狀態: // 為堆疊之頂部堆疊最終狀態: Altstack初始狀態:未使用         Altstack最終狀態:未使用 OP_DUP 3 OP_PICK OP_MUL 5 OP_ROLL OP_SWAP OP_SUB OP_SWAP 2 OP_PICK OP_MUL 4 OP_ROLL OP_SWAP OP_SUB
以上操作可以HL語言編寫為: HL函式st() { DUP 3 PICK * 5 ROLL SWAP - SWAP 2 PICK * 4 ROLL SWAP - }
HL函式st()計算在計算以下擴展歐氏演算法時使用的參數s及t。
以下實例展示可如何實施擴展歐氏演算法。
此函式獲取<a> <b>且計算 ,其中 堆疊初始狀態:<a> <b> // <b> 為堆疊之頂部 二者均為正整數堆疊最終狀態: // 在堆疊之頂部上  Altstack初始狀態:未使用 Altstack最終狀態:… <a><b> FUNCTION_1 1 0 0 1 4 OP_ROLL FUNCTION_2 OP_FROMALTSTACK OP_FROMALTSTACK OP_DUP OP_IF           FUNCTION_1 FUNCTION_2 OP_FROMALTSTACK OP_FROMALTSTACK OP_DUP OP_IF           FUNCTION_1 FUNCTION_2 OP_FROMALTSTACK OP_FROMALTSTACK OP_DUP OP_IF           FUNCTION_1 FUNCTION_2              …                  …                  OP_ENDIF                  OP_ENDIF                  OP_ENDIF OP_DROP OP_NIP OP_NIP
HL函式EEA為擴展歐氏演算法。其在此實例中將迴圈中之字語qr()及字語st()運行25次: HL函式qr() { TUCK 2DUP MOD DUP TAS SWAP TAS - SWAP / } HL函式st() { DUP 3 PICK * 5 ROLL SWAP - SWAP 2 PICK * 4 ROLL SWAP - } HL函式EEA(a, b) {                a  b   qr()  1  0  0  1 4 ROLL st() FAS FAS                let l = 25                loop (l) { DUP IF qr() st() FAS FAS ENDIF }                DROP NIP NIP } EEA (in1 , in2)
此為HL腳本語言程式碼之實例。其使用迴圈來重複函式最多25次。此可藉由簡單地改變變數l而設定成更多。舉例而言,l可視需要設定成100次或1000次之數目。CLS大小將不改變,而對應ELS之大小將為百萬位元組。 9.   其他備註
一旦給定本文中之揭露內容,所揭露技術之其他變體或使用狀況對於熟習此項技術者可變得顯而易見。本揭露內容之範圍不受所描述實施例限制而僅受隨附申請專利範圍限制。
舉例而言,上文的一些實施例已關於比特幣網路106、比特幣區塊鏈150及比特幣節點104進行了描述。然而,應瞭解,比特幣區塊鏈為區塊鏈150之一個特定實例,且以上描述通常可適用於任何區塊鏈。亦即,本發明絕不限於比特幣區塊鏈。更一般而言,上文對比特幣網路106、比特幣區塊鏈150及比特幣節點104之任何提及皆可分別用對區塊鏈網路106、區塊鏈150及區塊鏈節點104之提及來替換。區塊鏈、區塊鏈網路及/或區塊鏈節點可共用如上文所描述之比特幣區塊鏈150、比特幣網路106及比特幣節點104之所描述屬性中之一些或全部。
在本發明之較佳實施例中,區塊鏈網路106為比特幣網路,且比特幣節點104執行創建、發布、傳播及儲存區塊鏈150之區塊151的所描述功能中之至少全部。不排除可存在僅執行此等功能中之一者或一些而非全部的其他網路實體(或網路元件)。亦即,網路實體可執行傳播及/或儲存區塊而不創建及發布區塊之功能(前已述及,此等實體不被視為較佳比特幣網路106之節點)。
在本發明之其他實施例中,區塊鏈網路106可能並非比特幣網路。在此等實施例中,不排除節點可執行創建、發布、傳播及儲存區塊鏈150之區塊151的功能中之至少一者或一些而非全部。舉例而言,在彼等其他區塊鏈網路上,「節點」可用於指網路實體,該網路實體經組配以創建及發布區塊151,而非儲存及/或傳播彼等區塊151至其他節點。
甚至更一般而言,對上文「比特幣節點」 104一詞之任何提及可用「網路實體」或「網路元件」一詞來替換,其中此實體/元件經組配以執行創建、發布、傳播及儲存區塊之角色中之一些或全部。此網路實體/元件之功能可以上文參考區塊鏈節點104所描述之相同方式實施於硬體中。
應瞭解,已僅作為實例來描述以上實施例。更一般而言,可提供根據以下陳述項中之任何一或多者的方法、設備或程式。
陳述項1。一種將區塊鏈交易傳輸至區塊鏈網路之節點的電腦實施方法,其中該區塊鏈網路包含一或多個緊密腳本(CS)啟用節點及一或多個CS停用節點,其中各CS啟用節點係經組配以處理緊密交易且各CS停用節點係未經組配以處理緊密交易,其中緊密交易為區塊鏈交易,該區塊鏈交易包含i)至少部分地以高階(HL)腳本語言編寫且包含一或多個HL函式之CS及/或ii)參考包含CS之輸出的輸入,其中在經執行時,各HL函式係經組配以執行等效於由低階(LL)腳本語言之一或多個LL函式所執行之操作的操作,其中該CS係經組配以執行等效於以LL腳本語言所編寫之擴展腳本(ES)的操作,且其中該方法係由第一CS啟用節點所執行且包含: 獲得緊密交易之集合; 將緊密交易之集合中之一或多者傳輸至至少一個其他CS啟用節點; 將緊密交易之集合中之一或多者轉換成一或多個各別擴展交易,其中該轉換包含針對給定緊密交易,以等效ES來替換彼緊密交易之CS;以及 將一或多個擴展交易傳輸至至少一個CS停用節點。
該LL腳本語言為原生區塊鏈腳本語言。CS可完全以HL腳本語言編寫。替代地,CS可部分地以HL腳本語言且部分地以例如LL腳本語言之另一腳本語言編寫。該HL腳本語言及該LL腳本語言中之一者或二者可為基於堆疊之腳本語言。
陳述項2。如陳述項1之方法,其包含自至少一個CS停用節點接收針對對應於一或多個緊密交易之一或多個擴展交易的第一請求,且其中一或多個擴展交易至該至少一個CS停用節點之該傳輸係回應於接收到第一請求。
陳述項3。如陳述項1或陳述項2之方法,其包含自至少一個CS啟用節點接收對一或多個緊密交易之第二請求,且其中一或多個緊密交易至該至少一個CS啟用節點之該傳輸係回應於接收到第二請求。
陳述項4。如前述陳述項中任一項之方法,其包含將區塊發布至區塊鏈網路,其中該區塊包含緊密交易之集合。
陳述項5。如陳述項4之方法,當取決於陳述項2時,其中區塊之該發布係在第一請求之該接收及一或多個擴展交易之傳輸之前執行。
陳述項6。如陳述項4之方法,當取決於陳述項3時,其中區塊之該發布係在第二請求之該接收及一或多個緊密交易之傳輸之前執行。
陳述項7。如陳述項1至3中任一項之方法,其中各緊密交易係與基於對應的擴展交易之各別交易識別符相關聯,且其中該方法包含使緊密交易之集合中的各別交易識別符可用於至少一個CS啟用節點及/或至少一個CS停用節點。
陳述項8。如陳述項7之方法,當取決於陳述項2時,其中該使各別交易識別符可用係在第一請求之該接收及一或多個擴展交易之傳輸之前執行。
陳述項9。如陳述項7之方法,當取決於陳述項3時,其中該使各別交易識別符可用係在第二請求之該接收及一或多個緊密交易之傳輸之前執行。
陳述項10。如陳述項7至9中任一項之方法,其中該使各別交易識別符可用包含將各別交易識別符傳輸至至少一個CS啟用節點及/或至少一個CS停用節點。
陳述項11。如陳述項7至10中任一項之方法,其中該使各別交易識別符可用包含將區塊發布至區塊鏈網路,其中該區塊包含緊密交易之集合的各別交易識別符,但不包含緊密交易自身。
陳述項12。如陳述項7至11中任一項之方法,其中該使各別交易識別符可用包含使各別交易識別符之各別緊密版本可用。
陳述項13。如陳述項12之方法,其中各別交易識別符之各別緊密版本包含各別交易識別符中之一些但並非全部。
陳述項14。如陳述項7至13中任一項之方法,其中緊密交易之各別交易識別符包含各別緊密交易為緊密交易之指示。
陳述項15。如陳述項14之方法,其中該指示為與各別緊密交易之各別交易識別符組合的額外位元。
陳述項16。如陳述項15之方法,其中該指示為藉由改變各別緊密交易之部分而嵌入於各別交易識別符中的最小量之工作量證明。
陳述項17。如前述陳述項中任一項之方法,其中一或多個緊密交易係連同旗標一起傳輸至至少一個其他CS啟用節點,該旗標指示一或多個緊密交易為緊密交易。
陳述項18。如前述陳述項中任一項之方法,其包含自至少一個CS啟用節點接收至少一個CS啟用節點為CS啟用節點之指示。
陳述項19。如陳述項17之方法,其中指示之該接收係在交握程序期間進行。
陳述項20。如陳述項16之方法,其包含基於不存在未接收到至少一個CS停用節點為CS啟用節點之指示而判定CS停用節點並非CS啟用節點。
陳述項21。如前述陳述項中任一項之方法,其中CS交易之集合的該獲得包含自使用者接收至少一個緊密交易及/或自不同CS啟用節點接收至少一個緊密交易。
陳述項22。一種電腦裝備,其包含: 記憶體,其包含一或多個記憶體單元;以及 處理設備,其包含一或多個處理單元,其中該記憶體儲存經配置以在該處理設備上運行之程式碼,該程式碼係經組配以便在於該處理設備上時執行如陳述項1至21中任一項之方法。
陳述項23。  一種電腦程式,其體現於電腦可讀儲存器上且經組配以便在運行於一或多個處理器上時執行如陳述項1至21中任一項之方法。
陳述項24。一種自區塊鏈網路之節點接收區塊鏈交易的電腦實施方法,其中該區塊鏈網路包含一或多個緊密腳本(CS)啟用節點及一或多個CS停用節點,其中各CS啟用節點係經組配以處理緊密交易且各CS停用節點係未經組配以處理緊密交易,其中緊密交易為i)區塊鏈交易,該區塊鏈交易包含至少部分地以高階(HL)腳本語言編寫且包含一或多個HL函式之CS及/或ii)及/或ii)參考包含CS之輸出的輸入,其中在經執行時,各HL函式係經組配以執行等效於由低階(LL)腳本語言之一或多個LL函式所執行之操作的操作,其中該CS係經組配以執行等效於以LL腳本語言所編寫之擴展腳本(ES)的操作,且其中該方法係由CS停用節點所執行且包含: 獲得緊密交易或緊密交易為緊密交易之指示; 基於所獲得之緊密交易或其指示而判定緊密交易無法由CS停用節點所處理; 將針對對應於緊密交易之擴展交易的請求傳輸至CS啟用節點;以及 自CS啟用節點接收擴展交易,其中該擴展交易包含等效於緊密交易之CS的ES。
陳述項25。如陳述項24之方法,其包含執行自CS啟用節點接收到之擴展交易的ES。
陳述項26。如陳述項24或陳述項25之方法,其中該緊密交易或其指示係直接自CS啟用節點獲得。
陳述項27。如陳述項24至26中任一項之方法,其中該緊密交易或其指示係自區塊鏈之所發布區塊獲得。
陳述項28。如陳述項24至27中任一項之方法,其中該指示為與緊密交易相關聯之交易識別符或與緊密交易相關聯之旗標。
陳述項28。如陳述項28之方法,其中交易識別符之該獲得包含獲得交易識別符之緊密版本。
陳述項29。一種電腦裝備,其包含: 記憶體,其包含一或多個記憶體單元;以及 處理設備,其包含一或多個處理單元,其中該記憶體儲存經配置以在該處理設備上運行之程式碼,該程式碼係經組配以便在於該處理設備上時執行如陳述項24至28中任一項之方法。
陳述項30。一種電腦程式,其體現於電腦可讀儲存器上且經組配以便在運行於一或多個處理器上時執行如陳述項24至28中任一項之方法。
100:系統 101:封包交換網路 102a:電腦裝備/運算裝置 102b:電腦裝備/裝置 103:使用者/給定方/代理 103a:使用者/實體/愛麗絲/第一方 103b:新使用者/實體/鮑勃/第二方 104:第一區塊鏈節點/比特幣節點/請求節點/交易驗核節點 104a:CS啟用節點/查理 104b:CS停用節點 105:用戶端應用程式/軟體/用戶端 105a:用戶端應用程式 105b:用戶端 106:分散式或區塊鏈網路/同級間(P2P)網路/比特幣網路 107:旁側通道 150:比特幣區塊鏈 151:資料區塊/新區塊 151n-1:先前創建區塊 151n:新區塊 152:先前交易/原始交易/給定交易/新交易 152i:先前交易 152j:目前交易/新接收交易/後繼交易 153:起源區塊(Gb) 154:有序集合/有序池 155:區塊指標 201:標頭 202:輸入/輸入欄位 203:輸出欄位/未支出交易輸出 401:交易引擎/協定引擎 402:使用者介面(UI)層 403:函式 450:節點軟體 451:協定引擎 452:腳本引擎 453:堆疊 454:應用程式層級決策引擎 455:區塊鏈相關功能模組 455C:共識模組 455P:傳播模組 455S:儲存模組 500:使用者介面(UI)/系統 501:UI元素/使用者可選擇元素 502:UI元素/資料鍵入欄位 503:UI元素/資訊元素
為了輔助理解本揭露內容之實施例且展示此等實施例可如何付諸實施,僅作為實例參看附圖,在附圖中: 圖1為用於實施區塊鏈之系統的示意性方塊圖, 圖2示意性地繪示可記錄於區塊鏈中之交易的一些實例, 圖3A為用戶端應用程式之示意性方塊圖, 圖3B為可藉由圖3A之用戶端應用程式呈現之例示性使用者介面的示意性模型, 圖4為用於處理交易之某一節點軟體的示意性方塊圖, 圖5為用於傳輸區塊鏈交易之例示性系統的示意性方塊圖, 圖6為繪示用於發送及驗核區塊鏈交易之例示性方法的流程圖, 圖7為繪示用於發送及驗核區塊鏈交易之另一例示性方法的流程圖, 圖8示意性地繪示用於發送及驗核區塊鏈交易之另一例示性方法, 圖9示意性地繪示腳本語言之例示性階層, 圖10示意性地繪示接收交易之緊密腳本啟用節點, 圖11示意性地繪示用於緊密支出交易之例示性腳本執行, 圖12示意性地繪示緊密腳本啟用節點與緊密腳本停用節點之間的相容性,以及 圖13示意性地繪示根據本發明之一些實施例的例示性系統。

Claims (31)

  1. 一種將區塊鏈交易傳輸至一區塊鏈網路之節點的電腦實施方法,其中該區塊鏈網路包含一或多個緊密腳本(CS)啟用節點及一或多個CS停用節點,其中各CS啟用節點係經組配以處理緊密交易且各CS停用節點係未經組配以處理緊密交易,其中一緊密交易為一區塊鏈交易,該區塊鏈交易包含i)至少部分地以一高階(HL)腳本語言編寫且包含一或多個HL函式之一CS,及/或ii)參考包含一CS之一輸出的一輸入,其中在經執行時,各HL函式係經組配以執行等效於由一低階(LL)腳本語言之一或多個LL函式所執行之一操作的一操作,其中該CS係經組配以執行等效於以該LL腳本語言所編寫之一擴展腳本(ES)的一操作,且其中該方法係由一第一CS啟用節點所執行且包含: 獲得緊密交易之一集合; 將緊密交易之該集合中之一或多者傳輸至至少一個其他CS啟用節點; 將緊密交易之該集合中之一或多者轉換成一或多個各別擴展交易,其中該轉換包含針對一給定緊密交易,以一等效ES來替換彼緊密交易之該CS;以及 將該一或多個擴展交易傳輸至至少一個CS停用節點。
  2. 如請求項1之方法,其包含自該至少一個CS停用節點接收針對對應於該一或多個緊密交易之該一或多個擴展交易的一第一請求,且其中該一或多個擴展交易至該至少一個CS停用節點之該傳輸係回應於接收到該第一請求。
  3. 如請求項1或請求項2之方法,其包含自該至少一個CS啟用節點接收對該一或多個緊密交易之一第二請求,且其中該一或多個緊密交易至該至少一個CS啟用節點之該傳輸係回應於接收到該第二請求。
  4. 如前述請求項中任一項之方法,其包含將一區塊發布至該區塊鏈網路,其中該區塊包含緊密交易之該集合。
  5. 如請求項4之方法,當依附於請求項2時,其中該區塊之該發布係在該第一請求之該接收及該一或多個擴展交易之傳輸之前執行。
  6. 如請求項4之方法,當依附於請求項3時,其中該區塊之該發布係在該第二請求之該接收及該一或多個擴展交易之傳輸之前執行。
  7. 如請求項1至3中任一項之方法,其中各緊密交易係與基於對應的擴展交易之一各別交易識別符相關聯,且其中該方法包含使緊密交易之該集合的該等各別交易識別符可用於該至少一個CS啟用節點及/或該至少一個CS停用節點。
  8. 如請求項7之方法,當依附於請求項2時,其中該使該等各別交易識別符可用係在該第一請求之該接收及該一或多個擴展交易之傳輸之前執行。
  9. 如請求項7之方法,當依附於請求項3時,其中該使該等各別交易識別符可用係在該第二請求之該接收及該一或多個緊密交易之傳輸之前執行。
  10. 如請求項7至9中任一項之方法,其中該使該等各別交易識別符可用包含將該等各別交易識別符傳輸至該至少一個CS啟用節點及/或該至少一個CS停用節點。
  11. 如請求項7至10中任一項之方法,其中該使該等各別交易識別符可用包含將一區塊發布至該區塊鏈網路,其中該區塊包含緊密交易之該集合的該等各別交易識別符,但不包含該等緊密交易自身。
  12. 如請求項7至11中任一項之方法,其中該使該等各別交易識別符可用包含使該等各別交易識別符之各別緊密版本可用。
  13. 如請求項12之方法,其中一各別交易識別符之一各別緊密版本包含各別交易識別符中之一些但並非全部。
  14. 如請求項7至13中任一項之方法,其中該等緊密交易之該等各別交易識別符包含該各別緊密交易為緊密交易之一指示。
  15. 如請求項14之方法,其中該指示為與該各別緊密交易之該各別交易識別符組合的一額外位元。
  16. 如請求項15之方法,其中該指示為藉由改變該各別緊密交易之部分而嵌入於該各別交易識別符中的一最小量之工作量證明。
  17. 如前述請求項中任一項之方法,其中該一或多個緊密交易係連同一旗標一起傳輸至該至少一個其他CS啟用節點,該旗標指示該一或多個緊密交易為緊密交易。
  18. 如前述請求項中任一項之方法,其包含自該至少一個CS啟用節點接收該至少一個CS啟用節點為一CS啟用節點之一指示。
  19. 如請求項18之方法,其中該指示之該接收係在一交握程序期間進行。
  20. 如請求項18之方法,其包含基於不存在未接收到該至少一個CS停用節點為一CS啟用節點之一指示而判定該CS停用節點並非一CS啟用節點。
  21. 如前述請求項中任一項之方法,其中CS交易之該集合的該獲得包含自一使用者接收至少一個緊密交易及/或自一不同CS啟用節點接收至少一個緊密交易。
  22. 一種電腦裝備,其包含: 記憶體,其包含一或多個記憶體單元;以及 處理設備,其包含一或多個處理單元,其中該記憶體儲存經配置以在該處理設備上運行之程式碼,該程式碼係經組配以便在於該處理設備上時執行如請求項1至21中任一項之方法。
  23. 一種電腦程式,其體現於電腦可讀儲存器上且經組配以便在運行於一或多個處理器上時執行如請求項1至21中任一項之方法。
  24. 一種自一區塊鏈網路之節點接收區塊鏈交易的電腦實施方法,其中該區塊鏈網路包含一或多個緊密腳本(CS)啟用節點及一或多個CS停用節點,其中各CS啟用節點係經組配以處理緊密交易且各CS停用節點係未經組配以處理緊密交易,其中一緊密交易為i)一區塊鏈交易,該區塊鏈交易包含至少部分地以一高階(HL)腳本語言編寫且包含一或多個HL函式之一CS及/或ii)及/或ii)參考包含一CS之一輸出的一輸入,其中在經執行時,各HL函式係經組配以執行等效於由一低階(LL)腳本語言之一或多個LL函式所執行之一操作的一操作,其中該CS係經組配以執行等效於以該LL腳本語言所編寫之一擴展腳本(ES)的一操作,且其中該方法係由一CS停用節點所執行且包含: 獲得一緊密交易或一緊密交易為緊密交易之一指示; 基於所獲得之該緊密交易或其指示而判定該緊密交易無法由該CS停用節點所處理; 將針對對應於該緊密交易之一擴展交易的一請求傳輸至一CS啟用節點;以及 自該CS啟用節點接收該擴展交易,其中該擴展交易包含等效於該緊密交易之一CS的一ES。
  25. 如請求項24之方法,其包含執行自該CS啟用節點接收到之該擴展交易的該ES。
  26. 如請求項24或請求項25之方法,其中該緊密交易或其指示係直接自該CS啟用節點獲得。
  27. 如請求項24至26中任一項之方法,其中該緊密交易或其指示係自該區塊鏈之一所發布區塊獲得。
  28. 如請求項24至27中任一項之方法,其中該指示為與該緊密交易相關聯之一交易識別符或與該緊密交易相關聯之一旗標。
  29. 如請求項28之方法,其中該交易識別符之該獲得包含獲得該交易識別符之一緊密版本。
  30. 一種電腦裝備,其包含: 記憶體,其包含一或多個記憶體單元;以及 處理設備,其包含一或多個處理單元,其中該記憶體儲存經配置以在該處理設備上運行之程式碼,該程式碼係經組配以便在於該處理設備上時執行如請求項24至29中任一項之方法。
  31. 一種電腦程式,其體現於電腦可讀儲存器上且經組配以便在運行於一或多個處理器上時執行如請求項24至29中任一項之方法。
TW112112083A 2022-04-27 2023-03-29 用於緊密腳本交易之傳訊協定 TW202409862A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB2206122.0A GB2618106A (en) 2022-04-27 2022-04-27 Messaging protocol for compact script transactions
GB2206122.0 2022-04-27

Publications (1)

Publication Number Publication Date
TW202409862A true TW202409862A (zh) 2024-03-01

Family

ID=81851831

Family Applications (1)

Application Number Title Priority Date Filing Date
TW112112083A TW202409862A (zh) 2022-04-27 2023-03-29 用於緊密腳本交易之傳訊協定

Country Status (3)

Country Link
GB (1) GB2618106A (zh)
TW (1) TW202409862A (zh)
WO (1) WO2023208495A1 (zh)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB201713046D0 (en) * 2017-08-15 2017-09-27 Nchain Holdings Ltd Computer-implemented system and method
SG11202004147RA (en) * 2017-11-09 2020-06-29 Nchain Holdings Ltd System for securing verification key from alteration and verifying validity of a proof of correctness
CN113872948A (zh) * 2020-08-31 2021-12-31 支付宝(杭州)信息技术有限公司 一种执行智能合约的方法、区块链节点和节点设备

Also Published As

Publication number Publication date
GB2618106A (en) 2023-11-01
GB202206122D0 (en) 2022-06-08
WO2023208495A1 (en) 2023-11-02

Similar Documents

Publication Publication Date Title
JP2023531048A (ja) ブロックチェーンネットワークにおけるデータを妥当性確認する方法及び装置
US20240103815A1 (en) Generating and validating blockchain transactions
US20240320667A1 (en) Blockchain blocks & proof-of-existence
JP2024518079A (ja) マルチパーティブロックチェーンアドレス方式
TW202409862A (zh) 用於緊密腳本交易之傳訊協定
TW202344030A (zh) 用於通訊緊密腳本之協定
US20240333503A1 (en) Enforcing conditions on blockchain transactions
US20240305488A1 (en) Blockchain blocks & proof-of-existence
JP2024524652A (ja) ブロックチェーン・ブロック及び存在証明
JP2024524687A (ja) ブロックチェーンブロックおよびプルーフオブイグジスタンス
TW202306368A (zh) 對區塊鏈交易施行條件之技術(一)
JP2024540127A (ja) 分散型ブロックチェーン機能のための方法およびシステム
JP2024516895A (ja) マルチパーティブロックチェーンアドレス方式
JP2024540124A (ja) コンピュータ実装システムおよび方法