TW202344030A - 用於通訊緊密腳本之協定 - Google Patents

用於通訊緊密腳本之協定 Download PDF

Info

Publication number
TW202344030A
TW202344030A TW112114082A TW112114082A TW202344030A TW 202344030 A TW202344030 A TW 202344030A TW 112114082 A TW112114082 A TW 112114082A TW 112114082 A TW112114082 A TW 112114082A TW 202344030 A TW202344030 A TW 202344030A
Authority
TW
Taiwan
Prior art keywords
transaction
function
library
script
functions
Prior art date
Application number
TW112114082A
Other languages
English (en)
Inventor
帕特里克 S 考格蘭
張衛
阿萊西奧 帕加尼
巴席姆 阿瑪爾
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 TW202344030A publication Critical patent/TW202344030A/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
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • 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/3236Cryptographic 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 using cryptographic hash functions
    • H04L9/3239Cryptographic 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 using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Computer And Data Communications (AREA)

Abstract

本案提供一種傳輸緊密交易之電腦實施方法,其中一緊密交易為一區塊鏈交易,該區塊鏈交易包含至少部分地以一中階腳本語言編寫之一緊密腳本,該方法包含:產生包含一第一CS之一第一緊密交易,其中該第一CS包含一第一高階參考函式庫之一第一函式庫識別符,該第一HL參考函式庫包含以一HL腳本語言編寫之HL函式之一第一集合,各HL函式經組配以執行等效於由一或多個LL函式之一各別集合執行之一操作的一操作;HL函式之該第一集合中之一或多者的一各別函式識別符;以及經組配以在腳本執行期間呼叫該一或多個HL函式的至少一個IL函式;以及將該第一緊密交易傳輸至至少一個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節點。相反地,緊密腳本停用節點為無法處理緊密交易之節點。其亦被稱作規範節點。
根據本文中所揭露之一個態樣,提供一種將緊密交易傳輸至區塊鏈網路之節點的電腦實施方法,其中緊密交易為區塊鏈交易,該區塊鏈交易包含至少部分地以中階(IL)腳本語言編寫且包含一或多個IL函式之緊密腳本(CS),其中在執行時,各IL函式經組配以執行等效於由低階(LL)腳本語言之一或多個LL函式執行之操作的操作,其中該CS經組配以執行等效於以LL腳本語言編寫之擴展腳本(ES)的操作,且其中該方法由第一方執行且包含:產生包含第一CS之第一緊密交易,其中該第一CS包含i)第一高階(HL)參考函式庫之第一函式庫識別符,該第一HL參考函式庫包含以HL腳本語言編寫之HL函式之第一集合,各HL函式經組配以執行等效於由一或多個LL函式之各別集合執行之操作的操作;ii)HL函式之第一集合中之一或多者的各別函式識別符;以及iii)經組配以在腳本執行期間呼叫一或多個HL函式之至少一個IL函式;以及將第一緊密交易傳輸至至少一個CS啟用節點,其中各CS啟用節點經組配以驗核緊密交易。
根據本文中所揭露之一個態樣,提供一種處理緊密交易之電腦實施方法,其中緊密交易為區塊鏈交易,該區塊鏈交易包含至少部分地以中階(IL)腳本語言編寫且包含一或多個IL函式之緊密腳本(CS),其中在執行時,各IL函式經組配以執行等效於由低階(LL)腳本語言之一或多個LL函式執行之操作的操作,其中該CS經組配以執行等效於以LL腳本語言編寫之擴展腳本(ES)的操作,且其中該方法由經組配以驗核緊密交易之CS啟用節點執行且包含:獲得包含第一CS之第一緊密交易,其中該第一CS包含i)第一高階(HL)參考函式庫之第一函式庫識別符,該第一HL參考函式庫包含以HL腳本語言編寫之HL函式之第一集合,各HL函式經組配以執行等效於由一或多個LL函式之各別集合執行之操作的操作;ii)HL函式之第一集合中之一或多者的各別函式識別符;以及iii)經組配以在腳本執行期間呼叫一或多個HL函式之至少一個IL函式;獲得第一HL參考函式庫;以及處理第一緊密交易,其中該處理包含:藉由將第一CS轉換為第一ES來產生第一緊密交易之擴展版本,該轉換包含用經組配以執行與各別HL函式相同之操作的一或多個LL函式之各別集合替換各函式識別符。
第一方(例如,使用者、機器、智慧型合約等)創建包含緊密腳本之緊密交易。出於方便起見,第一方被稱作愛麗絲。愛麗絲可存取高階(HL)參考函式庫,亦即,以HL腳本語言(例如,上文所提及之面向使用者之語言)編寫之HL函式之集合。應注意,對HL腳本語言之參考為對最高階腳本語言之參考。給定函式庫之HL函式可為相關的,此係因為該等函式與相同目的相關或與其他函式互動以達成共同目標。然而,此並非必需的。舉例而言,給定函式庫可包含由例如愛麗絲之特定方創建的HL函式之集合。愛麗絲在緊密腳本中包括對HL參考函式庫之參考或該參考函式庫之識別符。愛麗絲亦在緊密腳本中包括儲存於HL參考函式庫中之一或多個HL函式的各別函式識別符。
各HL函式可擴展為LL函式(例如,作業碼)。因此,各HL函式經組配以執行等效於由LL函式之群組執行之操作的操作。使用LL函式之至少一各別集合在函式庫中定義各HL函式。可僅使用LL函式之各別集合來定義HL函式。舉例而言,對於簡單的HL函式可為如此狀況。在其他實例中,可使用LL函式之各別集合以及一或多個額外HL函式來定義HL函式。亦即,給定HL函式可參考(亦即,需要或以其他方式利用)其他HL函式。對於更複雜函式可為如此狀況。在彼狀況下,參考函式庫可包括其他HL函式之各別定義。亦可為如下狀況:一個、一些或各CS啟用節點已知一或多個HL函式之定義。對於共同或標準HL函式可為如此狀況,該等函式可由各CS啟用節點所運行之共同協定定義。
函式庫參考及函式識別符之組合允許CS啟用節點及其他方識別待在緊密交易之處理(例如,驗核)期間使用哪些HL函式。亦即,CS啟用節點可識別對應於函式庫參考之函式庫,且接著自彼函式庫識別所需HL函式。
緊密腳本亦包括經組配以呼叫所識別之HL函式的一或多個IL函式。緊密腳本可包括用於此目的之單個「呼叫函式」,或針對各HL函式包括單獨的呼叫函式。
CS啟用節點能夠產生緊密交易之擴展版本,亦即,擴展交易。具體而言,CS啟用節點能夠產生緊密腳本之擴展版本,亦即,擴展腳本。藉由用LL函式之集合替換各函式識別符來將緊密腳本轉換成等效擴展腳本,該等LL函式經組配以執行與由各別函式識別符所識別之HL函式相同的操作。此可涉及函式表之使用。因此,使用參考函式庫以便獲得所需LL函式。舉例而言,可能需要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語言編寫之腳本。亦不排除可將以面向使用者之語言編寫的腳本直接轉換成以低階語言編寫之腳本。
換言之,在一些實施例中,僅存在二個階之腳本語言:高階語言及低階語言,但在其他實施例中,存在三個階之腳本語言:面向使用者(最高)階、中間語言階及低階語言。
返回至以上實例,愛麗絲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.   驗核-二個交易(被支出之交易提供鎖定腳本且支出交易提供解除鎖定腳本)。在創建、傳播或儲存期間不進行驗核。在執行時,交易可以其緊密形式或以其擴展形式或以在執行之前將緊密腳本中之一些但並非全部轉換成原生腳本的混合方式排他地執行。
面向使用者之語言為人類可讀的、對開發者友好的、可擴充的,且可編譯成中階語言。下文提供面向使用者之語言的實例。然而,可能存在可編譯成相同的中階語言之多種不同的面向使用者之語言。現有語言,諸如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腳本語言轉換成語言,從而產生 。接著基於 產生交易識別符 。將交易識別符 及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至圖25之實施例。
圖10自接收交易之CS啟用節點104a之視角概述協定。如所展示,CS啟用節點104a接收區塊鏈交易。若區塊鏈交易為緊密交易,則緊密交易以其緊密形式進行處理及驗核。應注意,此可包括將緊密交易轉換成其擴展(規範)形式。若區塊鏈交易為擴展交易(亦即,以原生低階腳本語言編寫),則擴展交易以其擴展形式進行處理及驗核。識別可藉由檢查交易中是否存在顯式協定旗標或諸如一些HL函式(亦被稱作元作業碼)之任何隱式指示符來進行。顯式旗標可為預定且商定之交易版本號碼或在鎖定腳本或解除鎖定腳本之開頭的位元組。隱式指示符可為鎖定腳本之格式。舉例而言,若鎖定腳本以已知HL函式(例如,MOP_LIBLOAD)開始,則對應交易可識別為緊密交易。
圖11繪示例示性腳本執行程序。CS啟用節點104a包含經組配以將腳本以其緊密腳本形式進行處理之腳本引擎,該處理可涉及將緊密腳本擴展至擴展腳本。如圖11展示,存在二個選項。一個選項為將腳本以其緊密腳本形式執行且另一選項為將腳本以其擴展形式執行。
圖12繪示用於通訊緊密腳本之例示性系統。該系統包含一或多個使用者103及一或多個CS啟用節點104a。為簡單起見,僅展示一個使用者:愛麗絲103a。類似地,僅展示二個CS啟用節點104a,但一般而言,該系統可包含任何數目個CS啟用節點。區塊鏈網路106亦展示於圖12中。雖然展示為不同於CS啟用節點104a,但應瞭解,區塊鏈網路106包含CS啟用節點。區塊鏈網路106亦可包含一或多個CS停用節點。
愛麗絲103a產生緊密交易(緊密Tx)且將其發送至CS啟用節點104。CS啟用節點104a處理緊密Tx及/或將緊密Tx轉遞至一或多個不同CS啟用節點104a以供處理。處理緊密Tx可包括驗核緊密Tx。下文將論述此情形。
愛麗絲103a可存取一或多個HL函式庫,其各自含有一或多個HL函式。HL函式為以HL腳本語言編寫之函式,亦即,可轉換成以LL腳本語言(其他細節參見下文)編寫之函式的腳本語言。HL函式對於HL參考函式庫可能但未必為唯一的。HL參考函式庫可包含相關的一些HL函式(亦即,至少意欲彼此互補及/或一起使用之函式)。另外或替代地,HL參考函式庫可包含不相關的一些HL函式。
HL參考函式庫可儲存於一或多個CS啟用節點之記憶體中。另外或替代地,HL參考函式庫可在區塊鏈上儲存於「函式庫交易」中,亦即,區塊鏈交易,其包含HL參考函式庫,例如在交易之輸出中。作為另一實例,HL參考函式庫可儲存於鏈外位置處,例如在網頁處或在雲端中。
圖13A展示例示性HL參考函式庫。在此實例中,HL函式之前為指示下一項為HL函式的術語「word」。HL參考函式庫包含若干HL函式,包括「counter」、「length」及「reverse」。如所展示,counter函式經組配以遞增計數之當前值。length函式經組配以輸出值(例如,字串)之長度。reverse函式經組配以反轉值之次序(例如,反轉字串之字母排序)。
愛麗絲130a創建緊密交易。緊密交易包含緊密腳本。緊密腳本可為緊密鎖定腳本或緊密解除鎖定腳本。緊密腳本包含HL參考函式庫之函式庫識別符(或函式庫參考)。函式庫識別符可為例如HL參考函式庫之原始程式碼的雜湊或其修剪版本(例如,雜湊之前n個前導位元組)。函式庫識別符使得包括CS啟用節點之其他方能夠例如自記憶體獲得所需HL參考函式庫。
在一些實例中,函式庫識別符為包含HL參考函式庫之函式庫交易的交易識別符(TxID)。替代TxID,函式庫識別符可為區塊高度及位置對,其中區塊高度指示包含函式庫交易之區塊且位置指示彼區塊中之函式庫交易的位置。此等函式庫識別符唯一地識別函式庫交易且使得CS啟用節點能夠獲得正確的參考函式庫。在此等實例中,HL參考函式庫可能已由愛麗絲103a或由區塊鏈節點104 (例如,CS啟用節點104a)儲存於鏈上。
作為選項,若HL參考函式庫儲存於鏈外,則函式庫識別符可包括至鏈外資源之鏈接(例如,URL)。替代地,愛麗絲103a鏈接可與函式庫識別符分離。若若干HL函式庫儲存於同一鏈外資源處,則此可為有用的。
在一些實例中,函式庫識別符識別由愛麗絲103a創建之HL函式。亦即,愛麗絲103a創建使用其自身函式庫中之一或多個HL函式的緊密腳本。在其他實例中,函式庫識別符識別由不同實體(例如,不同使用者103或CS啟用節點104a)創建之HL函式。
緊密腳本亦包含一或多個函式識別符,該一或多個函式識別符識別儲存於所識別之HL參考函式庫中的各別HL函式。舉例而言,HL函式可儲存於序列中,且給定函式識別符可基於序列中之HL函式的位置來識別該HL函式。替代地,HL函式可以其他方式與其各別函式識別符相關聯,例如,函式識別符可為函式之縮寫。
緊密腳本亦包含至少一個IL函式(「呼叫函式」),該至少一個IL函式經組配以在執行時呼叫由各別函式識別符所識別之HL函式。舉例而言,單個呼叫函式可經組配以呼叫所識別函式中之各者。替代地,對於各所識別函式,可在緊密腳本中包括單獨呼叫函式。在一些實例中,呼叫函式亦經組配以呼叫(亦即,載入)HL參考函式庫。舉例而言,緊密腳本可採用以下形式: 12ab.0 MOP_FN_CALL, 其中12ab為函式庫識別符,0為函式識別符且MOP_FN_CALL經組配以自參考函式庫12ab呼叫對應於函式識別符0之HL函式。替代地,緊密腳本可包含IL函式(「函式庫載入函式」),該IL函式經組配以在執行時呼叫(亦即,載入)所識別之參考函式庫。舉例而言,緊密腳本可採用以下形式: 12ab MOP_LIB 0 MOP_FN_CALL, 其中MOP_LIB為經組配以載入參考函式庫12ab之函式庫載入函式。
在創建緊密交易後,愛麗絲103a將緊密交易發送至一或多個CS啟用節點104a。愛麗絲103a可將緊密交易發送至特定節點104a,例如其知曉可存取所需參考函式庫之節點。可將緊密交易發送至任何CS啟用節點104a。愛麗絲可將緊密交易連同所需參考函式庫一起發送,或其可能已將所需參考函式庫發送至節點104a。若可以其他方式獲得參考函式庫,例如自函式庫交易,則不需要發送參考函式庫。
在一些實施例中,需要愛麗絲103a產生緊密交易之擴展版本(亦即,對應擴展交易)以便基於擴展交易產生交易識別符,亦即,包括執行等效於所識別HL函式之彼等操作之操作所需的LL函式之緊密交易的版本。愛麗絲103a將所需LL函式(例如,作業碼)插入至擴展交易中。換言之,其用所需LL函式替換函式識別符。所得擴展交易僅含有LL函式及資料。接著對擴展交易進行雜湊以得到交易識別符。愛麗絲103a接著能夠將交易識別符插入至緊密交易中,且將緊密交易(包含交易識別符)發送至CS啟用節點104a。
愛麗絲103a可使用HL函式表來產生擴展交易。HL函式特定於特定參考函式庫且將HL函式之各別函式識別符儲存於彼參考函式庫中。各函式識別符連同實施各別HL函式所需之LL函式(且任擇地,IL函式)之各別集合一起儲存(亦即,映射至LL函式之各別集合)。愛麗絲103a可產生HL函式表或其可載入HL函式表,例如自記憶體。舉例而言,愛麗絲103a可能先前已使用同一參考函式庫且因此已創建或載入函式表。
愛麗絲103a藉由用LL函式(且任擇地,IL函式)之各別集合替換函式識別符來將緊密腳本轉換成擴展版本(擴展腳本),該等LL函式經映射至函式表中之各別函式識別符。若函式識別符僅映射至LL函式,則僅用彼等LL函式替換函式識別符。若函式識別符映射至LL函式及IL函式二者,則用LL函式及IL函式替換函式識別符,且用實施彼IL函式所需之LL函式之各別集合替換IL函式。此可在一個動作中發生,亦即,所有的所需LL函式同時插入至擴展腳本中,或在二個動作中發生,亦即,插入IL函式且接著用所需LL函式替換。可預定義對應於IL函式之LL函式之集合。在此意義上,IL函式係可為所有CS啟用節點已知且執行預定義操作之預定義函式。
圖13B繪示圖13A之參考函式庫的例示性函式表。如所展示,各函式識別符映射至IL及LL函式之對應集合,其中IL函式以「MOP」開始且LL函式以「OP」開始。應瞭解,此僅為繪示性實例,且可用不同方式區分IL函式與LL函式。在圖13B之實例中,HL函式之名稱包括於函式表中。在其他實例中,可省略函式名稱。
在圖13A及圖13B之實例中,一些HL函式參考,亦即,使用不同HL函式。舉例而言,reverse函式使用length函式。作為reverse函式之映射的部分,函式表包含length函式之各別函式識別符。當將緊密腳本轉換為擴展腳本時,愛麗絲103a使用函式表以用實施length函式所需之IL及LL函式替換length函式之函式識別符。換言之,reverse函式之函式識別符係用reverse函式之「實施方案」替換,且形成彼實施方案之部分的length函式之函式識別符係用length函式之實施方案替換。HL函式之實施方案係指映射至彼HL函式之函式識別符的LL及/或LL函式。
在一些實施例中,如圖13B中所展示,HL函式之實施方案可包含待由HL函式使用之各別變數的一或多個變數識別符。如同函式識別符,變數識別符可基於函式庫中之各別變數的位置。在圖13B之實例中,變數識別符之前為錢幣記號$。可使用指示變數識別符之其他方式,例如使用變數之名稱。在此等實施例中,實施方案亦包含經組配以在被呼叫(亦即,執行)時自記憶體擷取所識別變數之各別IL函式(「獲取變數函式」)。單個獲取變數函式可用於整個實施方案,或可針對實施方案之各變數識別符使用單獨的獲取變數函式。舉例而言,在圖13B之實例中,IL函式MOP_GET_VAR跟在各變數識別符(例如,$1)之後。實施方案亦可包含經組配以在被呼叫時將所識別變數輸出至記憶體之IL函式(「設定變數函式」)。
給定參考函式庫中之HL函式所需的變數可儲存於變數表中,其中獲取變數函式及設定變數函式分別經組配以自變數表獲得變數及將變數輸出至變數表。圖13A之函式表的例示性變數表展示於圖13C中。變數表包含各別變數識別符及對應變數值。若變數值在創建或載入變數表時為未知的(例如,因為其取決於當前未知輸入),則可使用預留位置值(例如,「空值」)。當將緊密腳本轉換為擴展腳本時,創建或載入參考函式庫之變數表,且將用所識別變數之值替換形成給定HL函式之實施方案之部分的變數識別符及相關聯之IL函式(例如,獲取變數函式)。
在一些實例中,可將變數分類(例如,規劃)為全域變數。將全域變數解譯為可用於整個腳本。亦即,緊密腳本之任何函式可利用全域變數。替代地,可將變數分類為區域變數。將區域變數解譯為僅可用於參考函式庫中區域變數所屬之函式。
在一些實例中,可將變數表解譯為常數表,且可僅自常數表讀取變數而不將變數寫入至常數表。
雖然以上描述已參考單個參考函式庫,但亦不排除緊密腳本可包含第二參考函式庫之函式庫識別符。一般而言,緊密腳本可包含任何數目個不同函式庫之各別函式庫識別符。此允許愛麗絲103a使用來自不同函式庫之函式來產生所要緊密腳本(例如,所要鎖定條件)。在此等實施例中,愛麗絲103a可針對在緊密腳本中所識別之各參考函式庫而創建或載入各別函式表。類似地,愛麗絲103a可針對在緊密腳本中所識別之各參考函式庫而創建或載入各別變數表。
亦應注意,可例如藉由愛麗絲103a更新參考函式庫。此包括在參考參考函式庫之緊密交易發佈於區塊鏈上之後更新參考函式庫。舉例而言,若參考函式庫在區塊鏈上儲存於函式庫交易中,則愛麗絲103a (不同實體之,諸如CS啟用節點104a)可將支出先前函式庫交易之輸出的經更新函式庫交易提交至區塊鏈,且包括經更新函式庫。下文進一步提供更新函式庫之更多細節。
如上文所提及,愛麗絲103a將緊密交易發送至CS啟用節點104a。CS啟用節點104a藉由將緊密交易轉換為擴展版本(亦即,對應擴展交易)來處理該緊密交易。亦即,將緊密腳本轉換為擴展腳本。此程序與愛麗絲103a執行以產生擴展交易之程序基本上相同。因此,上文所描述的與產生擴展交易相關之實施例中之任一者,包括函式表及變數表之使用,可同樣適用於CS啟用節點104a。
愛麗絲103a及CS啟用節點104a之各別運算裝備可各自包含用於將緊密腳本轉換為擴展腳本之一或多個編譯器。舉例而言,運算裝備可包含(例如,作為腳本引擎之部分)HL (或SDL)編譯器、IL (或元腳本)編譯器及LL (或交易)編譯器,該等編譯器在下文更詳細地論述。
更詳細地,CS啟用節點104a獲得(例如,自愛麗絲103a接收)緊密交易。CS啟用節點104a亦獲得在緊密交易之緊密腳本中所識別的一或多個函式庫。此可涉及自以下各者中之任一者擷取函式庫中之一或多者:愛麗絲103a、不同CS啟用節點104a、各別區塊鏈交易、鏈外資源(例如,雲端伺服器),或CS啟用節點104a之記憶體。在一些實例中,函式庫識別符(例如,函式庫之雜湊)可用作用於自例如儲存於存放庫中之複數個函式庫當中找到對應參考函式庫的查找項。
CS啟用節點104a處理緊密交易,其包括產生緊密交易之擴展版本。如同愛麗絲103a,CS啟用節點藉由用執行與所識別HL函式相同之操作所需的LL函式替換HL函式識別符來進行此操作。CS啟用節點104a可藉由以與上文針對愛麗絲103a所描述相同之方式創建或載入一或多個HL函式來進行此操作。CS啟用節點亦可以與上文針對愛麗絲103a所描述相同之方式創建或載入一或多個HL變數表。
CS啟用節點104a可處理緊密交易以便基於擴展交易產生交易識別符。CS啟用節點104a可比較該交易識別符與形成緊密交易之部分的交易識別符,亦即,藉由愛麗絲103a包括於緊密交易中之交易識別符。若二個交易識別符不匹配,則CS啟用節點可拒絕緊密交易(亦即,使緊密交易失效)。拒絕緊密交易包括不將緊密交易包括於新區塊151中,且亦可包括不將緊密交易廣播至其他節點104。
在緊密腳本為鎖定腳本之狀況下,處理緊密交易可包括執行緊密腳本連同支出交易之解除鎖定腳本,例如以便驗核支出交易。相反地,若緊密腳本為解除鎖定腳本,則處理緊密交易可包括執行緊密腳本連同先前交易之鎖定腳本,例如以便驗核緊密交易。應注意,緊密交易可以緊密形式或以擴展形式執行,此取決於另一交易是否為緊密交易。
為避免疑問,對執行動作之愛麗絲103a或CS啟用節點104a的任何參考意謂該動作由其各別運算裝備執行,例如經組配以處理緊密腳本之腳本引擎。
下文提供以上實施例之其他實例。儘管依據比特幣區塊鏈進行描述,但以下實例可在具有所需能力之任何區塊鏈上實施。 7.1 函式庫
所描述協定允許使用迴圈及類似函式,諸如for、while及do while。此極大地增強了腳本壓縮且允許先前不可能的應用程式。任何鎖定腳本必須具有包含比特幣作業碼之判定性規範(亦即,低階)形式,且在理想情況下,其在交易被提交至比特幣網路時應為已知的。因此,建議在將緊密交易提交至比特幣網路之前測試腳本執行。函式庫用以使得能夠重複使用所測試元腳本且允許參考該等元腳本之高效方式。下文描述函式庫之若干態樣。
1)函式庫創建及測試。開發者愛麗絲103a想要編寫智慧型鎖定腳本,同時利用SDL特徵(亦即,HL腳本語言)及元腳本(亦即,IL腳本語言)。邁克(Mike)為接受緊密交易且允許函式庫上傳之區塊鏈節點104a。其為愛麗絲103a提供測試及上傳其函式庫之互動式介面。愛麗絲使用互動式服務來上傳其函式庫且編譯所上傳程式碼。若編譯為成功的,則向愛麗絲103a給定函式庫識別符,愛麗絲將在參考函式庫時使用該函式庫識別符。
2)在創建鎖定腳本時的函式庫使用。愛麗絲103a在交易之鎖定腳本中使用函式庫識別符且將交易發送至邁克104a以挖掘。愛麗絲103a再次使用鮑勃之互動式服務中之另一者以檢查其緊密腳本(「tx-緊密」)是否由邁克104a正確地編譯。若tx-緊密被鮑勃接受,則愛麗絲將交易提交至區塊鏈150。邁克104a使用函式庫識別符以在交易驗核及TxID產生期間定位函式庫。啟用CS且接受邁克之編譯器結果的其他節點將能夠使用函式庫識別符獲得函式庫。其他開發者亦可藉由使用函式庫ID來使用愛麗絲之函式庫。
3)函式庫更新。可更新及版本設定函式庫。可能有必要保留所有版本歷史以用於擷取歷史交易之規範形式。若改變不會導致不同規範形式,則可在任何時間更新緊密交易中之函式庫參考。舉例而言,若函式庫之新版本更新函式庫中未由緊密交易使用的函式,則可為如此狀況。
4)函式庫相依性。函式庫可使用來自其他函式庫之函式。
5)函式庫上傳及使用的幕後作業。在函式庫編譯期間,可產生變數表。通常,不在此時設定變數之值。當愛麗絲103a在其鎖定腳本中使用函式庫時,可能需要設定一些變數。準則為應在彼階段判定鎖定腳本之規範形式。舉例而言,若在鎖定腳本中使用迴圈,則迴圈之數目應在此階段判定且不能取決於解除鎖定腳本。出於此原因,愛麗絲及邁克可具有互動式會話以測試鎖定腳本中對函式庫函式之使用且起始所需變數表值。CS啟用節點104a可就測試及準則之共同集合達成一致以將函式庫增添至共同存放庫。雖然並非強制的,但其最大化效率且改良系統之穩健性及安全性。
6)參考外部函式庫。函式庫之使用允許儲存及參考資料及程式碼而無需明確地包括於腳本中。函式庫可直接由CS啟用節點代管或擷取,且因此此等函式庫無需與MS交易一起傳播,從而節省儲存空間及頻寬。新的元作業碼(亦即,IL函式) MOP_LIB可用以參考元腳本中之函式庫,例如使用雜湊( 函式庫之原始程式碼) MOP_LIB或lib_ref MOP_LIB。應注意,可使用其他元作業碼,例如MOP_LIBLOAD或MOP_LOADLIB。對函式庫之參考可為其程式碼之雜湊。因此,函式庫之任何改變(包括更新)皆使參考無效。出於此原因,可儲存函式庫之所有版本的複本。
7)函式庫註冊表。一或多個函式庫註冊表可由節點使用以擷取所參考函式庫。此等函式庫可使用由標準主體維護之共用共同註冊表來儲存。註冊表可由基於區塊鏈中函式庫之使用頻率的共識機制或判定性規則集來定義。替代地,節點可分離地發佈金鑰至規範參考之其自身映射,且使用者可使用短金鑰將其交易提交至相容節點。若節點支援緊密腳本但並不知曉所參考之函式庫,則其可在公用函式庫註冊表中搜尋函式庫或其可查詢其他節點以檢查其是否知曉參考。若探究不成功,則節點104a可向交易之發送者請求完整的函式庫原始程式碼。替代地,若其他選項失敗,則節點可向發送者請求規範形式。
8)函式庫總和檢查碼。若緊密交易參考不正確函式庫(例如,使用同一金鑰之不同函式庫),則所產生之交易ID將無效。此確保僅可使用預期函式庫。
在緊密交易中參考外部函式庫暗示此函式庫之準確複本必須在未來任何時間可用。此可能會導致問題:若出於任何原因,在某一時刻在交易中參考之函式庫不可用,則節點將不能夠驗證交易,因此彼交易及所有後續交易皆變得無效。出於此原因,擁有取決於使用外部函式庫之交易(或具有取決於該交易之親代交易)的聰、符記或其他UTXO之使用者可保留在任何相依之已發佈MS交易中使用的任何函式庫之複本。節點104a或其他方可提供此服務。
替代方法為強制支出一或多個緊密交易之交易增添所有所需函式庫作為額外輸出(例如,在交易之不可支出(OP_RETURN)輸出中)。此方法保留了廣播包括對函式庫之參考的緊密交易所獲得的頻寬增益及在緊密交易處於記憶體池中時的儲存增益。然而,當交易插入於所發佈區塊中時,所需之儲存空間增加(此係因為支出交易包括整個函式庫程式碼)。
替代且更高效的方法為使用區塊鏈自身作為儲存器來將函式庫程式碼儲存於所發佈交易中。元作業碼(例如,MOP_LIBTX)可參考包括函式庫之交易(例如,具有OP_RETURN,其後接著資料及函式之集合的交易)。若所參考之交易不存在或其不含有具有有效(元)腳本之OP_RETURN,則使用MOP_LIBTX之緊密交易可被視為無效的。含有函式庫之交易可使用其交易ID (32個位元組)或其緊密版本(例如,前4個位元組)來參考。當使用緊密版本時,可能會發生衝突。在此狀況下,緊密交易之交易ID可用作總和檢查碼(僅正確的函式庫將導致正確的交易ID)。MPO_LIBTX之語法可採用以下形式中之一者: TxID libraryMOP_LIBTX 或 shorten 4-bytes(TxID library)MOP_LIBTX
替代地,可參考區塊中之區塊高度及交易位置而非交易ID。在此狀況下,語法可為: BlockHeight libraryPosition libraryMOP_LIBTX
9)內建式函式庫。區塊鏈節點可提供預設可用之共同函式之集合,從而創建內建式函式之 de facto函式庫。節點可藉由在與其節點版本號碼相關聯之交易或網站中發佈其正提供之函式的描述及實施方案來公告該等函式。緊密交易可在不指定函式庫而僅指定函式編號之情況下參考此等函式庫。作為實例: node_verOP_VERNOTIF    MOP_LIB 12ab 指定僅當 node_ver與節點的版本號碼不同時,才必須搜尋及載入函式庫。具有內建式函式可能會導致最佳程式碼以及函式之標準程式碼基底。 7.2 變數表
變數表可用以儲存區域變數及全域變數。區域變數僅在特定函式庫之範疇內有效,而全域變數對整個腳本有效,亦即,在交易輸入層級處(亦即,各交易輸入具有其自身的全域空間)。
變數表使得能夠在可重複使用的緊密腳本及外部函式庫中使用變數,從而允許為在編寫程式碼或鎖定腳本時未知之資訊(亦即,僅在創建解除鎖定腳本時提供之資訊)插入預留位置。在緊密腳本之上下文中,變數為參考指向變數表之指標的符號索引。一旦使用特定索引(「變數識別符」)將變數儲存於變數表中,便可使用相同索引在鎖定腳本中再次參考該變數。變數表映射索引與相對變數值。在一些實例中,可在執行腳本時(亦即,正驗核或支出交易)多次寫入及讀取變數。當腳本終止時(當交易被視為有效或無效時),解除分配變數表。
用以儲存變數之元作業碼可為MOP_SET_VAR,其之前為變數表之變數值及索引。類似地,用以自變數表讀取之元作業碼可為MOP_GET_VAR,其之前為變數表之索引。變數表之索引之前可為錢幣字元(例如,對於索引0為$0)。
可定義二種類型之變數表: 全域變數表函式庫變數表。當MOP_GET_VAR及MOP_SET_VAR直接用於鎖定腳本中時,其係自全域變數表讀取及寫入至全域變數表。當MOP_GET_VAR及MOP_SET_VAR用於外部函式庫中時,其係自函式庫變數表讀取及寫入至函式庫變數表。載入鎖定腳本中之各函式庫具有其自身的私密函式庫變數表。
當載入鎖定腳本時分配全域變數表,以用於產生交易ID (當創建交易時)或用於支出交易。創建緊密交易之使用者103可使用全域變數表來宣告及儲存變數,例如當值在編寫鎖定腳本時未知時。
具有二個未初始化索引之全域變數表的實例展示於圖14A中。作為實例,緊密腳本 ‘hello’ $0 MOP_SET_VAR 將變數表中以0為索引之列設定為「hello」(如圖14B中所展示),而緊密腳本 $0 MOP_GET_VAR 自變數表讀取具有索引0之變數且將其值插入鎖定腳本中(亦即,其將值推入至堆疊)。
當在腳本執行期間第一次將函式庫載入鎖定腳本中時分配及初始化新的函式庫變數表(將同一函式庫重新載入同一腳本內並不會重新初始化其變數表)。此表具有二個主要目的:第一目的為儲存在函式庫中初始化且因此不可直接自鎖定腳本存取之變數。第二目的為儲存及追蹤函式參數(亦即,各函式之輸入)。函式庫中之各函式可具有變數之集合,該等變數預分配有其相對索引,各參數一個索引。當在鎖定腳本中呼叫函式時,藉由設定函式庫變數表中之相對變數而將輸入參數傳遞至函式。函式庫變數表可具有區域(在函式之範疇內)及函式庫(在函式庫之範疇內)變數。區域變數在函式庫變數表中具有為該等變數保留且在函式表(參見下文的「函式表」章節)中指定的索引,該等變數在每次呼叫函式時皆被重新初始化。函式庫變數在同一函式庫中之不同函式當中共用同一索引。僅在第一次將函式載入鎖定腳本中式初始化該等變數。
全域變數表可與函式庫表分離,此係因為函式庫變數表可儲存不應由使用者存取之變數,該等使用者在其鎖定腳本中匯入函式庫。舉例而言,含有橢圓曲線(例如,secp256k1)之參數的函式庫可將該等參數儲存於函式庫變數表中。確保使用者不能修改來自鎖定腳本之彼等值(例如,使用具有不同值之MOP_SET_VAR)可為有益的。在一些實施方案中,函式庫內部之區域及全域變數可儲存於單獨的表(全域函式庫變數表及區域函式庫變數表)中。當將函式庫載入鎖定腳本中時初始化全域函式庫變數表,且當腳本執行結束時解除分配全域函式庫變數表。每次呼叫函式時皆初始化區域函式庫變數,且在函式結束時解除分配區域函式庫變數。
變數表可為動態類型或靜態類型。在後一狀況下,變數類型由腳本引擎檢查,且若最初指派有變數類型之變數稍後被指派不同類型,則會引起錯誤。此類型之錯誤導致無效腳本(等效於堆疊頂部以OP_FALSE結束之腳本)。使用靜態類型變數表之緊密腳本的編寫通常更複雜。然而,在編譯時更嚴重及結構化的錯誤(error)偵測允許偵測錯誤(bug),因此減小發佈含有錯誤之腳本的機率。此等錯誤可潛在地導致發佈具有不可支出鎖定腳本或可在與吾人所預期條件不同之條件下支出的交易。若使用靜態類型之變數表,則可連同索引及變數值一起儲存變數類型,如圖14C中所展示。
MOP_SET_VAR及MOP_GET_VAR為用以使得能夠在緊密腳本中使用變數的元作業碼。應注意,此等僅為例示性標籤,且可替代地使用執行相同操作之其他元作業碼。可使用alt堆疊將變數作業碼擴展至規範腳本以儲存變數。MOP_SET_VAR根據變數值之索引將該等變數值推入alt堆疊。MOP_GET_VAR根據變數值之索引自alt堆疊複製該等變數值。繪示變數之位置的例示性alt堆疊展示於圖15中。MOP_SET_VAR及MOP_GET_VAR至其相對規範作業碼之擴展描述於WPxxxx (由Wei參考)中。由於其擴展極長,因此剩餘描述使用MOP_SET_VAR及MOP_GET_VAR之相對元作業碼來參考MOP_SET_VAR及MOP_GET_VAR,甚至在緊密腳本擴展至其規範形式時亦如此。替代地,若可在編譯時運算變數值,則在腳本編譯或擴展期間用變數之實際值替換變數。
例示性腳本緊密展示於圖16A中且如下轉換。列1使得將「hello」以索引0插入變數表中。變數表之狀態展示於圖16B中。列2使得自變數表讀取「hello」且對字元之數目進行計數。變數表之狀態展示於圖16C中。最後,其以索引1將值儲存於變數表中。列3使得自變數表讀取變數1 (其為5)且將其與5進行比較,將結果寫入於堆疊之頂部上。
擴展之規範腳本展示於圖16D中。對應alt堆疊展示於圖16E中。 7.3 函式表
在腳本執行期間每次呼叫參考函式庫時,皆可創建或載入函式表。函式表由腳本引擎創建且儲存於記憶體(亦即,愛麗絲103a或CS啟用節點104a之記憶體)中。函式表映射數值索引(「函式識別符」)與函式之標頭,及任擇地,其在元或規範腳本中之實施方案。
可使用元作業碼MOP_FN_CALL在交易鎖定腳本中呼叫在外部函式庫中宣告之函式,該元作業碼之前為函式之索引。舉例而言,以下鎖定腳本: 012ab MOP_LIB 0 MOP_FN_CALL 翻譯為:自具有ID 012ab之函式庫載入(或產生)函式表且接著在鎖定腳本中插入函式表中具有索引0之函式的元或規範腳本。在載入函式表之後呼叫多於一個函式。舉例而言,以下鎖定腳本: 012ab MOP_LIB 0 MOP_FN_CALL 1 MOP_FN_CALL 翻譯為:自具有ID 012ab之函式庫載入(或產生)函式表且接著在鎖定腳本中插入函式表中具有索引0之函式繼之以具有索引1之函式的函式主體。
當需要在同一鎖定腳本中使用多個函式庫時,可在每次所參考函式庫改變時皆指定所需函式庫。舉例而言,為了自函式庫012ab呼叫函式0,接著自函式庫567cf呼叫函式0及1且最後自函式庫012ab再次呼叫函式1,可使用以下結構: 012ab MOP_LIB 0 MOP_FN_CALL 567cd MOP_LIB 0 MOP_FN_CALL 1 MOP_FN_CALL 012ab MOP_LIB 1 MOP_FN_CALL
值得注意地,僅在所參考函式庫改變時必須呼叫MOP_LIB。
可使用更緊密形式。舉例而言,在(腳本引擎之)一些實施方案中,可在函式呼叫期間直接指定函式庫ID,以點(「.」)將函式庫ID與函式索引分離。根據此語法,鎖定腳本: 012ab MOP_LIB 0 MOP_FN_CALL
變為: 012ab.0 MOP_FN_CALL
且使用2個函式庫之實例變為: 012ab.0 MOP_FN_CALL 567cd.0 MOP_FN_CALL 1 MOP_FN_CALL 012ab.1 MOP_FN_CALL
當正支出緊密交易時,產生鎖定腳本之規範形式,由此將函式主體插入於腳本中。此使得能夠驗證交易ID且充當正參考之函式庫為正確函式庫的有效總和檢查碼。省略此步驟可允許創建腳本,其中所參考函式庫不同於預期函式庫(例如,其可能共用同一短ID且節點104a可能正使用錯誤的ID),從而導致鎖定腳本具有出人意料的行為。此對比特幣網路106無害,此係因為使用具有錯誤函式庫之交易產生的區塊將被所有其他節點104拒絕(該等其他節點將最終使用正確函式庫達成共識),然而,節點104a發佈無效區塊將會產生經濟損失。
圖13A、圖13B及圖13C已在上文進行描述且分別繪示參考函式庫、函式表及變數表之實例。將變數 count指派給表中之$0 (索引0)且將其初始化為0。每次呼叫函式 counter時,其皆將$0遞增1且更新$0。使用者無法自鎖定腳本直接修改計數器(無法存取函式庫變數表),唯一允許的方法為呼叫 counter函式。將函式 length之參數指派給$1。當呼叫 length時,將輸入參數插入$1中且每次在函式內部需要輸入參數時皆讀取該輸入參數。就此而言,函式 reverse為類似的。在函式 reverse中,宣告變數 len。將此變數指派給$2,每次修改該變數時皆在函式庫變數表中更新$2中之值(使用 $2 MOP_SET_VAR),且每次使用該變數時,皆自函式庫變數表擷取該變數(使用$2 MOP_GET_VAR)。應注意,每次呼叫 reverse時皆重新初始化 len
另一例示性參考函式庫繪示於圖17A中。當將使用外部函式庫之鎖定腳本轉換為其規範形式時,用正被呼叫之函式的實際程式碼替換對外部函式庫之所有參考,且將元作業碼擴展至規範版本。對應於圖17A之參考函式庫的函式表展示於圖17B中。應注意,輸入計數以$1開始,此係因為$0由函式庫全域變數 global_var使用。
交易可具有以下鎖定腳本: ‘hello’ 12ab.0 MOP_FN_CALL
為了發佈含有此鎖定腳本之交易,第一步驟為驗證交易ID。因此,元腳本藉由腳本引擎擴展至其規範形式。其首先轉換為: 12ab.$1 MOP_GET_VAR OP_SIZE OP_NIP
圖17C中所展示之變數表接著用以將腳本擴展為: OP_TOALTSTACK 10 7 OP_ADD OP_FROMALTSTACK OP_DUP OP_TOALTSTACK OP_ADD 8.   例示性工作流程
此章節描述使用緊密腳本之例示性開發者工作流程。隨著在SV之創世紀升級中移除了腳本大小限制,應用程式現有可能創建具有長且複雜之腳本的交易。此呈現數個問題: 1.開發、測試及在交易中使用複雜腳本之複雜度。 2.廣播現大得多之交易所需的額外頻寬。 3.交易一旦由交易處理器或區塊鏈節點驗證,其儲存要求提高。
引入元腳本(緊密腳本之例示性實施方案)以解決此等問題。元腳本為比特幣腳本之擴展,其具有包括函式呼叫及迴圈之額外功能性。元腳本不執行,亦不促成比特幣之共識規則,亦即,交易ID產生或簽章雜湊計算。挖掘者節點在執行時將元腳本編譯為規範比特幣腳本。
元腳本為開發者提供了建置函式庫且將其分發給挖掘者的可能性,此等函式可接著由元腳本交易使用。下文論述此程序之工作流程。
圖18提供例示性工作流程之高階綜述。圖18展示在工作流程階段期間存在與此系統互動之二個關鍵使用者:函式庫開發者,其負責開發及發佈待由交易使用之函式庫的;以及交易開發者,其負責探索所發佈函式庫且在其交易中使用該等函式庫。
元腳本為彼此互動之三種程式設計語言中之一者:SDL-用於開發元腳本函式庫之高階語言;元腳本-比特幣腳本之擴展以使得能夠進行函式呼叫及迴圈建構;以及比特幣腳本-基礎語言,當自元腳本產生時亦被稱作規範腳本。應注意,規範腳本為經雜湊以產生交易ID之腳本的形式。 8.1 元腳本開發工具
圖19展示用以開發元腳本之工具的例示性綜述。圖19展示如何使用編譯器:SDL/函式庫編譯器用以自SDL產生函式庫函式表;元腳本編譯器參考函式庫函式表將文字形式之元腳本轉換為位元組陣列形式;以及交易編譯器自元腳本(呈位元組陣列形式)及函式表產生規範腳本。 8.2 SDL編譯器
SDL編譯器獲取作為輸入且產生函式表作為輸出。由於SDL為用於開發函式庫之語言且因而,SDL提供以下特徵:函式定義;函式呼叫;不可變變數宣告;for迴圈;while迴圈;單元測試構架;以及函式庫文件產生。現將描述此等特徵。
可如下定義函式: pub fn function_name(arg1 :type) { }
呈文字形式之SDL及元腳本使用library_name與function_name之組合以指示其希望進行之函式庫函式呼叫。舉例而言,腳本可含有: use library_name; 1 OP_DUP MOP_FNCALL library_name::function_name
應注意,在二個函式庫具有所定義之相同函式名稱的狀況下,整個library_name及function_name組合可用以防止名稱衝突。函式庫可匯入至腳本命名空間中: use library_name::*; 1 OP_DUP MOP_FNCALL function_name
特定函式庫函式可匯入至腳本命名空間中: use library_name::{function1, function2}; 1 OP_DUP MOP_FNCALL function1
至腳本命名空間中之匯入將檢查函式庫函式名稱衝突,且若發生衝突,則會引起錯誤。
應注意,不可變變數宣告係基於函式定義,當轉譯此等函式時,用堆疊上之值替換函式呼叫,例如 pub const LARGEST_PRIME_UNDER_100 = 97;
應注意,若常數為公共的,則用函式定義替換值,此將被其他函式庫或腳本呼叫。當轉譯此等函式時,用堆疊上之值替換函式呼叫。若常數為私密(非「公開」)的,則存在關於此可如何實施之選擇:將常數置放於函式中,如在公開狀況下(若函式庫大小為關注點且常數為大的(大小為許多位元組),則此可能更高效);或在用於函式庫之情況下取代常數。
如圖20中所展示,SDL編譯器可任擇地輸出單元測試。執行此等測試以提供函式庫如預期起作用的證據。
圖21繪示包含函式表之函式庫的例示性建構。各函式庫可包含以下各者中之一或多者:entity_name-此函式庫之發佈者,此可為幫助探索函式庫所需的;library_name-函式庫之文字名稱;library_id-基於交易ID識別此函式庫之唯一id;library_version-此函式庫之版本,使得交易能夠釘選至特定函式庫發行版本;相依性-此函式庫所取決於、使用library_id識別之函式庫的清單;以及函式-描述各函式之函式表條目(FunctionTableEntry)的清單。應注意,library_id係藉由對具有設定為零之library_id欄位的整個函式庫進行雜湊而計算。FunctionTableEntry包含以下各者中之一或多者:function_name-函式庫之文字名稱;function_signature-此指示函式預期之引數;Is_private-指示函式是否為私密之旗標,參見下文的論述;以及byte_code-作為位元組陣列之元腳本函式。
函式庫函式可為公開或私密的。公開函式將可供腳本或其他函式庫使用。私密函式可僅由函式庫自身使用。
為了確保私密函式保持私密,存在可使用的至少二種方法:1)在剖析程序期間,私密函式呼叫將擴展成公開函式(此增加所發佈函式庫檔案之大小,但減小轉譯函式庫之額外負荷);或2)使用「is_private」欄位以指示函式為私密的且不應被其他腳本或函式庫呼叫。後者減小了所發佈函式庫之大小,但增加了轉譯函式庫之額外負荷。此亦提高了以下風險:節點實施方案可忽略此旗標且執行其不應執行的程式碼,從而潛在地產生漏洞。
作為處理SDL之部分,可藉由SDL編譯器執行以下檢查中之一些:所有函式庫欄位是否存在?;library_name是否匹配所產生的函式表名稱?;library_id是否唯一?;之前是否已使用過此版本號碼?(重複使用同一版本號碼可能會導致嚴重的問題);函式庫中之函式名稱是否唯一?;library_index欄位是否唯一?;函式庫相依性是否有效且最新?;各函式是否具有函式簽章? 8.3 元腳本編譯器
下文描述元腳本編譯器創建元腳本交易之操作。如所提到,元腳本為比特幣腳本之擴展,其具有以下額外特徵:for迴圈、while迴圈;以及呼叫(函式庫)函式定義-包括參數取代。應注意,元腳本迴圈建構(while及for迴圈)限於所定義數目個反覆。此限制之目的為限制交易之運行時間且提供腳本將完整之證據,以及確保元腳本始終產生相同規範腳本。此保證腳本始終產生相同雜湊摘要,且因此產生相同交易ID。
元腳本操作(MOP)為以「MOP_」為首碼之額外操作,而現有比特幣腳本操作以「OP_」為首碼。迴圈建構包括: ●   MOP_DO (限制開始---)-標記迴圈之開始,自堆疊獲取開始及限制值 ●   MOP_I (---索引)-將當前索引置放於堆疊上 ●   MOP_LOOP (---)-標記迴圈之結束 ●   MOP_IFLEAVE (條件---)-若堆疊上之條件為真,則離開當前(最內)迴圈。
應注意(n---)-指示自堆疊擷取引數。
額外函式包括: ●   MOP_FNCALL <short_id> <arg1> <arg2>-將控制轉移至由short_id識別之函式。函式使用當前狀態下之堆疊且將傳回值置放於堆疊上。 ●   MOP_ARG <n>-此為函式簽章中第n個引數的佔位符,將此等佔位符置放於函式庫程式碼中且在呼叫程式碼時取代傳入值。應注意,<arg1, arg2>指示在操作清單中之操作之後置放引數。
元腳本需要識別其使用哪些函式庫,為此其使用MOP_LOADLIB MOP程式碼: ●   MOP_LOADLIB <n_libs> <lib1> <lib2>-在MOP_LOADLIB操作之後的第一參數判定待載入之函式庫的數目,且以下參數為函式庫之library_id。
圖22展示元腳本在開發期間呈文字形式及一旦其作為交易發行呈位元組陣列的格式。二種格式之間的轉換由元腳本編譯器執行。如圖22中所展示,開發元腳本含有:使用(uses)-腳本使用之函式庫的清單;以及腳本(script)-元腳本源。應注意,當腳本參考函式庫函式時,其經由library_name及function_name組合來進行參考。此由圖21中之字串函式(StringFunction)結構展示。呈位元組形式之元腳本亦展示於圖21中,其含有source_code-作為位元組陣列之腳本。
如引言中所提到的,元腳本並不促成比特幣共識規則,包括交易ID產生。交易ID為規範腳本之雜湊。因此,為了創建元腳本交易ID,必須首先將交易轉換為規範腳本且對此腳本進行雜湊。此暗示元腳本編譯器亦將必須包括交易編譯器之功能性。應注意,數個欄位存在於元腳本中,而不存在於比特幣腳本中,且因此並不促成雜湊。然而,因為交易之驗核將產生相同雜湊,所以此不成問題。 8.4 腳本/交易編譯器
圖22展示節點104a接收元腳本交易且使用函式表將其轉換成規範腳本。此為參數被代入至所呼叫之函式庫函式中的時刻。 8.5 函式庫發佈、分發及探索
函式庫開發者負責在區塊鏈上發佈函式庫。函式庫可接著藉由其交易ID在區塊鏈上找到。函式庫之未來版本可藉由在區塊鏈上支出與函式庫相關聯之交易來指示。該支出可接著提供函式庫之新版本。可存在中央存放庫,其列出函式庫及其相關聯之交易ID,使得其可自區塊鏈進行擷取。此將使得節點能夠在啟動時快速地探索函式庫且在接收取決於函式庫之交易之前先發制人地載入該等函式庫。 8.6 節點處理交易
節點104a將需要將腳本識別為含有元腳本或不含有元腳本。可能無法檢查腳本以MOP_LOADLIB開始,此係因為該腳本可能未載入函式庫。因此,節點104a將必須掃描腳本以查看其是否含有任何MOP_操作。元腳本交易編譯器程序之細節展示於圖24中。為了處理元腳本交易,節點需要存取能夠處理元腳本交易之節點軟體、元腳本函式庫源以及含有元腳本之交易。
節點將需要: 1.   獲得所需函式庫。應注意,函式庫可能又對將需要解析之其他函式庫具有相依性。 2.   將元腳本轉換為規範腳本。 a.    MOP_FNCALLS將擴展至所呼叫之函式庫程式碼。 b.   MOP_LOOP將在必要時展開至其所識別限制(以確保規範形式始終相同)。 3.   執行規範腳本。 4.   驗核腳本。 8.7 節點驗核交易
應注意,並非所有節點皆將理解元腳本,因此並非所有節點皆可驗核含有元腳本之交易。此藉由同級間傳訊來處置,從而確保僅理解元腳本之同級節點發送元腳本交易以處理及驗核。圖25展示使用與用以處理交易相同之「轉譯元腳本」階段的例示性驗核程序。 8.8 節點轉送交易
一旦含有元腳本之交易已被挖掘者接受及驗核,其便必須在網路上轉送(或至少轉送至其連接至的同級者)。問題為腳本應採用何種形式。存在二個選擇:a)將元腳本擴展至規範形式且按照當前程序進行傳輸;或b)將其以元腳本形式保留且僅將其傳輸至元腳本啟用挖掘者。為了實現元腳本概念之潛力,第二選項為較佳選項。在此狀況下,接收交易之節點所需的處理與以上圖24中所展示的相同,除了檢查理解元腳本之能力以外。在同級者探索期間,節點將發信其是否能夠處理元腳本以及規範腳本。 8.9 節點啟動
在啟動時,元腳本啟用節點將需要探索函式庫。如上文所提到,函式庫可儲存於區塊鏈上。節點可保留其最近使用之函式庫的持續記錄。此清單可用以對在本端快取以加速交易處理之函式庫進行優先排序。為輔助節點探索函式庫,可存在中央存放庫。此存放庫將列出函式庫及其相關聯之交易ID,使得其可自區塊鏈進行擷取。此將使得節點能夠在接收利用函式庫之交易之前主動地快取該等函式庫。 9.   實例
此章節提供繪示所揭露架構可如何工作之三個實例集合。第一集合集中於在自最高階(面向使用者)語言轉換成中階(元腳本)語言時使用函式表的實用性及運算效率優勢。第二集合集中於元腳本語言之緊密性。第三集合提供對更複雜之一些腳本的見解。第三集合亦繪示可如何將以高階語言編寫之腳本直接轉換成低階原生腳本語言。 9.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>
應注意,規範腳本之大小隨著輸入字串之大小線性地增加。然而,元腳本之大小幾乎恆定且獨立於輸入字串之大小。此證明元腳本架構在儲存空間及頻寬上的顯著節省。 9.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堆疊變為用於儲存所有變數之堆疊(作為有序清單)。 9.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之大小將為百萬位元組。 10. 其他備註
一旦給定本文中之揭露內容,所揭露技術之其他變體或使用狀況對於熟習此項技術者可變得顯而易見。本揭露內容之範圍不受所描述實施例限制而僅受隨附申請專利範圍限制。
舉例而言,上文的一些實施例已關於比特幣網路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。   一種將緊密交易傳輸至區塊鏈網路之節點的電腦實施方法,其中緊密交易為區塊鏈交易,該區塊鏈交易包含至少部分地以中階(IL)腳本語言編寫且包含一或多個IL函式之緊密腳本(CS),其中在執行時,各IL函式經組配以執行等效於由低階(LL)腳本語言之一或多個LL函式執行之操作的操作,其中該CS經組配以執行等效於以LL腳本語言編寫之擴展腳本(ES)的操作,且其中該方法由第一方執行且包含: 產生包含第一CS之第一緊密交易,其中該第一CS包含i)第一高階(HL)參考函式庫之第一函式庫識別符,該第一HL參考函式庫包含以HL腳本語言編寫之HL函式之第一集合,各HL函式經組配以執行等效於由一或多個LL函式之各別集合執行之操作的操作;ii)HL函式之第一集合中之一或多者的各別函式識別符;以及iii)經組配以在腳本執行期間呼叫一或多個HL函式之至少一個IL函式;以及 將第一緊密交易傳輸至至少一個CS啟用節點,其中各CS啟用節點經組配以驗核緊密交易。
陳述項2。   如陳述項1之方法,其包含創建第一HL參考函式庫。替代地,第一HL參考函式庫可由不同方創建。
陳述項3。   如陳述項1或陳述項2之方法,其包含使第一HL參考函式庫可用於至少一個CS啟用節點。
陳述項4。   如陳述項3之方法,其中該使第一HL參考函式庫可用於至少一個CS啟用節點包含將第一HL參考函式庫發送至至少一個CS啟用節點。
陳述項5。   如陳述項3之方法,其中第一HL參考函式庫儲存於公開可存取源處,且其中該使第一HL參考函式庫可用於至少一個CS啟用節點包含將對公開可存取源之參考發送至至少一個CS啟用節點。
陳述項6。   如陳述項5之方法,其中公開可存取源為儲存於區塊鏈上之函式庫交易,且其中該第一函式庫識別符為a)函式庫交易之交易識別符,或b)包含函式庫交易之區塊的區塊高度及區塊中之函式庫交易的位置。
陳述項7。   如陳述項6之方法,其包含: 創建該函式庫交易;以及 將函式庫交易傳輸至至少一個區塊鏈節點。
陳述項8。   如陳述項6之方法,其包含藉由以下步驟更新函式庫: 創建包含經更新函式庫之經更新函式庫交易;以及 將經更新函式庫交易傳輸至至少一個區塊鏈節點。
陳述項9。   如前述陳述項中任一項之方法,其中第一函式庫識別符為第一HL參考函式庫之雜湊值。
陳述項10。 如前述陳述項中任一項之方法,其中緊密交易包含第一交易識別符,且其中該方法包含: 藉由將第一CS轉換為第一ES來產生第一緊密交易之擴展版本,該轉換包含用經組配以執行與各別HL函式相同之操作的一或多個LL函式之各別集合替換各函式識別符;以及 基於第一緊密交易之擴展版本產生第一交易識別符。
陳述項11。 如陳述項10之方法,其包含: 為第一HL參考函式庫創建或載入第一HL函式表,其中該第一HL函式表包含i)各第一HL函式之各別函式識別符,其映射至ii)用於實施各別HL函式之一或多個IL函式及/或一或多個LL函式;且 該將第一CS轉換為第一ES包含:獲得一或多個LL函式之各別集合,該一或多個LL函式經組配以基於第一HL函式表中之映射而執行與各別HL函式相同之操作。
函式識別符可為對應於HL參考函式庫中之HL函式之位置的索引。第一HL參考函式庫可包含第一HL函式表。
陳述項12。 如陳述項11之方法,其中至少一個HL函式使用不同HL函式,且其中作為該映射之部分,第一HL函式表包含不同HL函式之各別函式識別符。
陳述項13。 如前述陳述項中任一項之方法,其中第一CS包含第二HL參考函式庫之第二函式庫識別符,第二HL參考函式庫包含HL函式之第二集合,且其中第一CS包含HL函式之第二集合中之一或多者的各別函式識別符。
陳述項14。 如陳述項13之方法,當依附於陳述項11或陳述項12時,其包含: 為第二HL參考函式庫創建或載入第二HL函式表,其中該第二HL函式表包含i)各第二HL函式之各別函式識別符,其映射至ii)用於實施各別HL函式之一或多個IL函式及/或一或多個LL函式;且 該將第一CS轉換為第一ES包含:獲得一或多個LL函式之各別集合,該一或多個LL函式經組配以基於第一HL函式表中之映射而執行與各別HL函式相同之操作。
第二HL參考函式庫可包含第二HL函式表。
陳述項15。 如陳述項11或依附於其之陳述項中任一項之方法,其中作為各別HL函式之該映射之部分,第一HL函式表包含待由各別HL函式使用之一或多個第一HL變數之各別變數識別符,以及經組配以在腳本執行期間呼叫一或多個第一HL變數之至少一個IL函式。
陳述項16。 如陳述項15之方法,其包含: 為第一HL參考函式庫創建或載入第一HL變數表,其中該第一HL變數表包含i)各第一HL變數之各別變數識別符,其映射至ii)各別第一HL變數之值或彼第一HL變數之佔位符;且 該將第一CS轉換為第一ES包含使用第一HL變數表以用各別第一HL變數之值或其佔位符替換各各別變數識別符。
第一HL參考函式庫可包含第一HL變數表。
陳述項17。 如陳述項16之方法,其中第一HL變數包含可用於整個的第一緊密腳本之各別全域變數之一或多個變數識別符,及/或其中第一HL變數表包含僅可用於第一HL參考函式庫之第一HL函式的各別區域變數之一或多個變數識別符。
第一HL變數表可分裂成二個單獨的子表,一個用於全域變數且一個用於區域變數。
陳述項18。 如陳述項16或陳述項17之方法,其中該將第一CS轉換為第一ES包含將各別第一HL變數之各別值寫入至第一HL變數表。
陳述項19。 如陳述項16或陳述項17之方法,其中第一HL變數表中之各第一HL變數為在第一CS之處理期間不改變的常數值。
陳述項20。 一種處理緊密交易之電腦實施方法,其中緊密交易為區塊鏈交易,該區塊鏈交易包含至少部分地以中階(IL)腳本語言編寫且包含一或多個IL函式之緊密腳本(CS),其中在執行時,各IL函式經組配以執行等效於由低階(LL)腳本語言之一或多個LL函式執行之操作的操作,其中該CS經組配以執行等效於以LL腳本語言編寫之擴展腳本(ES)的操作,且其中該方法由經組配以驗核緊密交易之CS啟用節點執行且包含: 獲得包含第一CS之第一緊密交易,其中該第一CS包含i)第一高階(HL)參考函式庫之第一函式庫識別符,該第一HL參考函式庫包含以HL腳本語言編寫之HL函式之第一集合,各HL函式經組配以執行等效於由一或多個LL函式之各別集合執行之操作的操作;ii)HL函式之第一集合中之一或多者的各別函式識別符;以及iii)經組配以在腳本執行期間呼叫一或多個HL函式之至少一個IL函式; 獲得第一HL參考函式庫;以及 處理第一緊密交易,其中該處理包含: 藉由將第一CS轉換為第一ES來產生第一緊密交易之擴展版本,該轉換包含用經組配以執行與各別HL函式相同之操作的一或多個LL函式之各別集合替換各函式識別符。
陳述項21。 如陳述項20之方法,其中緊密交易包含第一交易識別符,且其中第一緊密交易之該處理包含: 基於第一緊密交易之擴展版本產生候選交易識別符; 判定候選交易識別符是否匹配第一交易識別符;以及 若候選交易識別符不匹配第一交易識別符,則拒絕第一緊密交易。
陳述項22。 如陳述項20或陳述項21之方法,其中第一CS為鎖定腳本,且其中第一緊密交易之該處理包含執行第一ES連同第二區塊鏈交易之解除鎖定腳本。
陳述項23。 如陳述項20或陳述項21之方法,其中第一CS為解除鎖定腳本且其中第一緊密交易之該處理包含執行第一ES連同第三區塊鏈交易之鎖定腳本。
陳述項24。 如陳述項20至23中任一項之方法,其中該獲得第一緊密交易包含自第一方或另一CS啟用節點接收第一緊密交易。
陳述項25。 如陳述項24之方法,其中該獲得第一HL參考函式庫包含自第一方或另一CS啟用節點接收第一HL參考函式庫。
陳述項26。 如陳述項20至25中任一項之方法,其中該獲得第一HL參考函式庫包含: 獲得對公開可存取源之參考,第一HL參考函式庫儲存於該公開可存取源處;以及 自公開可存取源獲得第一HL參考函式庫。
陳述項27。 如陳述項26之方法,其中公開可存取源為儲存於區塊鏈上之儲存交易,且其中對公開可存取源之該參考為儲存交易之交易識別符。
陳述項28。 如陳述項26之方法,其包含: 創建該儲存交易;以及 將儲存交易傳輸至至少一個區塊鏈節點。
陳述項29。 如陳述項20至24中任一項之方法,其中該獲得第一HL參考函式庫包含自記憶體存取第一HL參考函式庫。
陳述項30。 如陳述項21至30中任一項之方法,其中第一HL參考函式庫之第一函式庫識別符為第一HL參考函式庫之雜湊,且其中獲得第一HL參考函式庫係基於該雜湊。
陳述項31。 如陳述項20至29中任一項之方法,其包含: 為第一HL參考函式庫創建或載入第一HL函式表,其中該第一HL函式表包含i)各第一HL函式之各別函式識別符,其映射至ii)用於實施各別HL函式之一或多個IL函式及/或一或多個LL函式;且 該將第一CS轉換為第一ES包含:獲得一或多個LL函式之各別集合,該一或多個LL函式經組配以基於第一HL函式表中之映射而執行與各別HL函式相同之操作。
函式識別符可為對應於HL參考函式庫中之HL函式之位置的索引。
陳述項32。 如陳述項31之方法,其中至少一個HL函式使用不同HL函式,且其中作為該映射之部分,第一HL函式表包含不同HL函式之各別函式識別符。
陳述項33。 如陳述項32之方法,其中第一CS包含第二HL參考函式庫之第二函式庫識別符,第二HL參考函式庫包含HL函式之第二集合,其中第一CS包含HL函式之第二集合中之一或多者的各別函式識別符,且其中該方法包含獲得第二HL參考函式庫。
陳述項34。 如陳述項33之方法,當依附於陳述項31或陳述項32時,其包含: 為第二HL參考函式庫創建或載入第二HL函式表,其中該第二HL函式表包含i)各第二HL函式之各別函式識別符,其映射至ii)用於實施各別HL函式之一或多個IL函式及/或一或多個LL函式;且 該將第一CS轉換為第一ES包含:獲得一或多個LL函式之各別集合,該一或多個LL函式經組配以基於第一HL函式表中之映射而執行與各別HL函式相同之操作。
陳述項35。 如陳述項31或依附於其之陳述項中任一項之方法,其中作為各別HL函式之該映射之部分,第一HL函式表包含待由各別HL函式使用之一或多個第一HL變數之各別變數識別符;以及經組配以在腳本執行期間呼叫一或多個第一HL變數之至少一個IL函式。
陳述項36。 如陳述項35之方法,其包含: 為第一HL參考函式庫創建或載入第一HL變數表,其中該第一HL變數表包含i)各第一HL變數之各別變數識別符,其映射至ii)各別第一HL變數之值或彼第一HL變數之佔位符;且 該將第一CS轉換為第一ES包含使用第一HL變數表以用各別第一HL變數之值或其佔位符替換各各別變數識別符。
陳述項37。 如陳述項36之方法,其中第一HL變數包含可用於整個的第一緊密腳本之各別全域變數之一或多個變數識別符,及/或其中第一HL變數表包含僅可用於第一HL參考函式庫之第一HL函式的各別區域變數之一或多個變數識別符。
陳述項38。 如陳述項36或陳述項37之方法,其中該將第一CS轉換為第一ES包含將各別第一HL變數之各別值寫入至第一HL變數表。
陳述項39。 如陳述項36或陳述項37之方法,其中第一HL變數表之各第一HL變數為在第一CS之處理期間不改變的常數值。
陳述項40。 一種電腦裝備,其包含: 記憶體,其包含一或多個記憶體單元;以及 處理設備,其包含一或多個處理單元,其中該記憶體儲存經配置以在處理設備上運行之程式碼,該程式碼經組配以便在處於處理設備上時執行如前述陳述項中任一項之方法。
陳述項41。 一種電腦程式,其體現於電腦可讀儲存器上且經組配以便在運行於一或多個處理器上時執行如陳述項1至39中任一項之方法。
100:系統 101:封包交換網路 102a:電腦裝備/運算裝置 102b:電腦裝備/裝置 103:使用者/給定方/代理 103a:使用者/實體/愛麗絲/第一方 103b:新使用者/實體/鮑勃/第二方 104:第一區塊鏈節點/比特幣節點/請求節點/交易驗核節點/CS啟用節點 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示意性地繪示用於發送參考參考函式庫之緊密交易的例示性系統, 圖13A至圖13C分別示意性地繪示例示性參考函式庫、函式表及變數表, 圖14A至圖14C示意性地繪示正被填入之變數表, 圖15示意性地繪示記憶體堆疊, 圖16A至圖16E示意性地繪示IL腳本至LL腳本之擴展, 圖17A至圖17D分別示意性地繪示例示性參考函式庫、函式表及變數表, 圖18示意性地繪示用於創建、發送及驗核緊密腳本之工作流程的例示性綜述, 圖19示意性地繪示用以開發緊密交易之例示性工具, 圖20示意性地繪示將參考函式庫編譯為函式表, 圖21示意性地繪示例示性參考函式庫,該參考函式庫包含具有參數之函式表, 圖22示意性地繪示在開發期間呈文字形式及一旦其作為交易發行呈位元組陣列之緊密腳本的例示性格式, 圖23示意性地繪示節點接收緊密交易且將其轉換成擴展交易, 圖24示意性地繪示由接收緊密交易之節點執行的例示性程序,以及 圖25示意性地繪示由接收緊密交易之節點執行的另一例示性程序。
103a:使用者/實體/愛麗絲/第一方
104a:CS啟用節點
106:分散式或區塊鏈網路/同級間(P2P)網路/比特幣網路

Claims (41)

  1. 一種將緊密交易傳輸至一區塊鏈網路之一節點的電腦實施方法,其中一緊密交易為一區塊鏈交易,該區塊鏈交易包含至少部分地以一中階(IL)腳本語言所編寫且包含一或多個IL函式之一緊密腳本(CS),其中在執行時,各IL函式係經組配以執行等效於由一低階(LL)腳本語言之一或多個LL函式所執行之一操作的一操作,其中該CS係經組配以執行等效於以該LL腳本語言所編寫之一擴展腳本(ES)的一操作,且其中該方法係由一第一方所執行且包含: 產生包含一第一CS之一第一緊密交易,其中該第一CS包含i)一第一高階(HL)參考函式庫之一第一函式庫識別符,該第一HL參考函式庫包含以一HL腳本語言所編寫之HL函式之一第一集合,各HL函式係經組配以執行等效於由一或多個LL函式之一各別集合所執行之一操作的一操作,ii)HL函式之該第一集合中之一或多者的一各別函式識別符,及iii)經組配以在腳本執行期間呼叫該一或多個HL函式之至少一個IL函式;以及 將該第一緊密交易傳輸至至少一個CS啟用節點,其中各CS啟用節點係經組配以驗核緊密交易。
  2. 如請求項1之方法,其包含創建該第一HL參考函式庫。
  3. 如請求項1或請求項2之方法,其包含使該第一HL參考函式庫可用於該至少一個CS啟用節點。
  4. 如請求項3之方法,其中該使該第一HL參考函式庫可用於該至少一個CS啟用節點包含將該第一HL參考函式庫發送至該至少一個CS啟用節點。
  5. 如請求項3之方法,其中該第一HL參考函式庫係儲存於一公開可存取源處,且其中該使該第一HL參考函式庫可用於該至少一個CS啟用節點包含將對該公開可存取源之一參考發送至該至少一個CS啟用節點。
  6. 如請求項5之方法,其中該公開可存取源為儲存於區塊鏈上之一函式庫交易,且其中該第一函式庫識別符為a)該函式庫交易之一交易識別符,或b)包含該函式庫交易之一區塊的一區塊高度及該區塊中之該函式庫交易的一位置。
  7. 如請求項6之方法,其包含: 創建該函式庫交易;以及 將該函式庫交易傳輸至至少一個區塊鏈節點。
  8. 如請求項6之方法,其包含藉由以下步驟更新該函式庫: 創建包含經更新之該函式庫之一經更新函式庫交易;以及 將該經更新函式庫交易傳輸至至少一個區塊鏈節點。
  9. 如前述請求項中任一項之方法,其中該第一函式庫識別符為該第一HL參考函式庫之雜湊值。
  10. 如前述請求項中任一項之方法,其中該緊密交易包含一第一交易識別符,且其中該方法包含: 藉由將該第一CS轉換為一第一ES來產生該第一緊密交易之一擴展版本,該轉換包含用經組配以執行與各別HL函式相同之操作的一或多個LL函式之一各別集合來替換各函式識別符;以及 基於該第一緊密交易之該擴展版本產生該第一交易識別符。
  11. 如請求項10之方法,其包含: 針對該第一HL參考函式庫創建或載入一第一HL函式表,其中該第一HL函式表包含i)各第一HL函式之該各別函式識別符,其映射至ii)用於實施該各別HL函式之一或多個IL函式及/或一或多個LL函式;且 該將該第一CS轉換為該第一ES包含:獲得一或多個LL函式之該各別集合,該一或多個LL函式經組配以基於該第一HL函式表中之該等映射而執行與該各別HL函式相同之操作。
  12. 如請求項11之方法,其中至少一個HL函式使用一不同HL函式,且其中作為該映射之部分,該第一HL函式表包含該不同HL函式之該各別函式識別符。
  13. 如前述請求項中任一項之方法,其中該第一CS包含一第二HL參考函式庫之一第二函式庫識別符,該第二HL參考函式庫包含HL函式之一第二集合,且其中該第一CS包含HL函式之該第二集合中之一或多者的一各別函式識別符。
  14. 如請求項13之方法,當依附於請求項11或請求項12時,其包含: 針對該第二HL參考函式庫創建或載入一第二HL函式表,其中該第二HL函式表包含i)各第二HL函式之該各別函式識別符,其映射至ii)用於實施該各別HL函式之一或多個IL函式及/或一或多個LL函式;且 該將該第一CS轉換為該第一ES包含:獲得一或多個LL函式之該各別集合,該一或多個LL函式經組配以基於該第一HL函式表中之該等映射而執行與該各別HL函式相同之操作。
  15. 如請求項11或依附於其之請求項中任一項之方法,其中作為一各別HL函式之該映射之部分,該第一HL函式表包含要被由該各別HL函式使用之一或多個第一HL變數之一各別變數識別符,且至少一個IL函式經組配以在腳本執行期間呼叫該一或多個第一HL變數。
  16. 如請求項15之方法,其包含: 針對該第一HL參考函式庫創建或載入一第一HL變數表,其中該第一HL變數表包含i)各第一HL變數之該各別變數識別符,其映射至ii)該各別第一HL變數之一值或彼第一HL變數之一佔位符;且 該將該第一CS轉換為該第一ES包含使用該第一HL變數表以用該各別第一HL變數之該值或其佔位符替換各各別變數識別符。
  17. 如請求項16之方法,其中該第一HL變數包含可用於整個的第一緊密腳本之各別全域變數之一或多個變數識別符,及/或其中該第一HL變數表包含僅可用於該第一HL參考函式庫之該等第一HL函式的各別區域變數之一或多個變數識別符。
  18. 如請求項16或請求項17之方法,其中該將該第一CS轉換為該第一ES包含將各別第一HL變數之各別值寫入至該第一HL變數表。
  19. 如請求項16或請求項17之方法,其中該第一HL變數表之各第一HL變數為在該第一CS之處理期間不改變的一常數值。
  20. 一種處理緊密交易之電腦實施方法,其中一緊密交易為一區塊鏈交易,該區塊鏈交易包含至少部分地以一中階(IL)腳本語言所編寫且包含一或多個IL函式之一緊密腳本(CS),其中在執行時,各IL函式係經組配以執行等效於由一低階(LL)腳本語言之一或多個LL函式所執行之一操作的一操作,其中該CS係經組配以執行等效於以該LL腳本語言所編寫之一擴展腳本(ES)的一操作,且其中該方法係由經組配以驗核緊密交易之一CS啟用節點所執行且包含: 獲得包含一第一CS之一第一緊密交易,其中該第一CS包含i)一第一高階(HL)參考函式庫之一第一函式庫識別符,該第一HL參考函式庫包含以一HL腳本語言所編寫之HL函式之一第一集合,各HL函式係經組配以執行等效於由一或多個LL函式之一各別集合所執行之一操作的一操作,ii)HL函式之該第一集合中之一或多者的一各別函式識別符,及iii)經組配以在腳本執行期間呼叫該一或多個HL函式之至少一個IL函式; 獲得該第一HL參考函式庫;以及 處理該第一緊密交易,其中該處理包含: 藉由將該第一CS轉換為一第一ES來產生該第一緊密交易之一擴展版本,該轉換包含用經組配以執行與各別HL函式相同之操作的一或多個LL函式之一各別集合來替換各函式識別符。
  21. 如請求項20之方法,其中該緊密交易包含一第一交易識別符,且其中該第一緊密交易之該處理包含: 基於該第一緊密交易之該擴展版本產生一候選交易識別符; 判定該候選交易識別符匹配該第一交易識別符;以及 若該候選交易識別符不匹配該第一交易識別符,則拒絕該第一緊密交易。
  22. 如請求項20或請求項21之方法,其中該第一CS為一鎖定腳本,且其中該第一緊密交易之該處理包含執行該第一ES連同一第二區塊鏈交易之一解除鎖定腳本。
  23. 如請求項20或請求項21之方法,其中該第一CS為一解除鎖定腳本,且其中該第一緊密交易之該處理包含執行該第一ES連同一第三區塊鏈交易之一鎖定腳本。
  24. 如請求項20至23中任一項之方法,其中該獲得該第一緊密交易包含自一第一方或另一CS啟用節點接收該第一緊密交易。
  25. 如請求項24之方法,其中該獲得該第一HL參考函式庫包含自該第一方或該另一CS啟用節點接收該第一HL參考函式庫。
  26. 如請求項20至25中任一項之方法,其中該獲得該第一HL參考函式庫包含: 獲得對一公開可存取源之一參考,該第一HL參考函式庫係儲存於該公開可存取源處;以及 自該公開可存取源獲得該第一HL參考函式庫。
  27. 如請求項26之方法,其中該公開可存取源為儲存於區塊鏈上之一儲存交易,且其中對該公開可存取源之該參考為該儲存交易之一交易識別符。
  28. 如請求項26之方法,其包含: 創建該儲存交易;以及 將該儲存交易傳輸至至少一個區塊鏈節點。
  29. 如請求項20至24中任一項之方法,其中該獲得該第一HL參考函式庫包含自記憶體存取該第一HL參考函式庫。
  30. 如請求項21至30中任一項之方法,其中該第一HL參考函式庫之該第一函式庫識別符為該第一HL參考函式庫之一雜湊,且其中獲得該第一HL參考函式庫係基於該雜湊。
  31. 如請求項20至29中任一項之方法,其包含: 針對該第一HL參考函式庫創建或載入一第一HL函式表,其中該第一HL函式表包含i)各第一HL函式之該各別函式識別符,其映射至ii)用於實施該各別HL函式之一或多個IL函式及/或一或多個LL函式;且 該將該第一CS轉換為該第一ES包含:獲得一或多個LL函式之該各別集合,該一或多個LL函式經組配以基於該第一HL函式表中之該等映射而執行與該各別HL函式相同之操作。
  32. 如請求項31之方法,其中至少一個HL函式使用一不同HL函式,且其中作為該映射之部分,該第一HL函式表包含該不同HL函式之該各別函式識別符。
  33. 如請求項32之方法,其中該第一CS包含一第二HL參考函式庫之一第二函式庫識別符,該第二HL參考函式庫包含HL函式之一第二集合,其中該第一CS包含HL函式之該第二集合中之一或多者的一各別函式識別符,且其中該方法包含獲得該第二HL參考函式庫。
  34. 如請求項33之方法,當依附於請求項31或請求項32時,其包含: 針對該第二HL參考函式庫創建或載入一第二HL函式表,其中該第二HL函式表包含i)各第二HL函式之該各別函式識別符,其映射至ii)用於實施該各別HL函式之一或多個IL函式及/或一或多個LL函式;且 該將該第一CS轉換為該第一ES包含:獲得一或多個LL函式之該各別集合,該一或多個LL函式經組配以基於該第一HL函式表中之該等映射而執行與該各別HL函式相同之操作。
  35. 如請求項31或依附於其之請求項中任一項之方法,其中作為一各別HL函式之該映射之部分,該第一HL函式表包含要被由該各別HL函式使用之一或多個第一HL變數之一各別變數識別符,且至少一個IL函式經組配以在腳本執行期間呼叫該一或多個第一HL變數。
  36. 如請求項35之方法,其包含: 針對該第一HL參考函式庫創建或載入一第一HL變數表,其中該第一HL變數表包含i)各第一HL變數之該各別變數識別符,其映射至ii)該各別第一HL變數之一值或彼第一HL變數之一佔位符;且 該將該第一CS轉換為該第一ES包含使用該第一HL變數表以用該各別第一HL變數之該值或其佔位符替換各各別變數識別符。
  37. 如請求項36之方法,其中該第一HL變數包含可用於整個的第一緊密腳本之各別全域變數之一或多個變數識別符,及/或其中該第一HL變數表包含僅可用於該第一HL參考函式庫之該等第一HL函式的各別區域變數之一或多個變數識別符。
  38. 如請求項36或請求項37之方法,其中該將該第一CS轉換為該第一ES包含將各別第一HL變數之各別值寫入至該第一HL變數表。
  39. 如請求項36或請求項37之方法,其中該第一HL變數表之各第一HL變數為在該第一CS之處理期間不改變的一常數值。
  40. 一種電腦裝備,其包含: 記憶體,其包含一或多個記憶體單元;以及 處理設備,其包含一或多個處理單元,其中該記憶體儲存經配置以在該處理設備上運行之程式碼,該程式碼係經組配以便在於該處理設備上時執行如前述請求項中任一項之方法。
  41. 一種電腦程式,其體現於電腦可讀儲存器上且經組配以便在運行於一或多個處理器上時執行如請求項1至39中任一項之方法。
TW112114082A 2022-04-27 2023-04-14 用於通訊緊密腳本之協定 TW202344030A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB2206120.4A GB2618105A (en) 2022-04-27 2022-04-27 Protocol for communicating compact scripts
GB2206120.4 2022-04-27

Publications (1)

Publication Number Publication Date
TW202344030A true TW202344030A (zh) 2023-11-01

Family

ID=81851827

Family Applications (1)

Application Number Title Priority Date Filing Date
TW112114082A TW202344030A (zh) 2022-04-27 2023-04-14 用於通訊緊密腳本之協定

Country Status (3)

Country Link
GB (1) GB2618105A (zh)
TW (1) TW202344030A (zh)
WO (1) WO2023208547A1 (zh)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109783077B (zh) * 2018-12-14 2023-07-11 平安科技(深圳)有限公司 区块链系统及其中间件系统、数据上链方法、存储介质
WO2019072310A2 (en) * 2018-12-29 2019-04-18 Alibaba Group Holding Limited SYSTEM AND METHOD FOR IMPLEMENTING NATIVE CONTRACT ON BLOCK CHAIN
GB201913143D0 (en) * 2019-09-12 2019-10-30 Nchain Holdings Ltd Running a program from a blockchain
CN112308716B (zh) * 2020-10-28 2024-02-20 深圳前海微众银行股份有限公司 区块链智能合约执行方法、装置、设备及计算机存储介质

Also Published As

Publication number Publication date
GB202206120D0 (en) 2022-06-08
GB2618105A (en) 2023-11-01
WO2023208547A1 (en) 2023-11-02

Similar Documents

Publication Publication Date Title
JP2023531048A (ja) ブロックチェーンネットワークにおけるデータを妥当性確認する方法及び装置
US20220300257A1 (en) In-Script Functions Within a Blockchain Transaction
US20240103815A1 (en) Generating and validating blockchain transactions
WO2023073105A1 (en) Methods and systems for distributed blockchain functionalities
TW202145039A (zh) 用以經由區塊鏈有效且安全地處理、存取及傳輸資料之電腦實行系統及方法
WO2023072959A1 (en) Methods and systems for distributed blockchain functionalities
JP2024518079A (ja) マルチパーティブロックチェーンアドレス方式
TW202344030A (zh) 用於通訊緊密腳本之協定
JP2023550401A (ja) ノードのバージョン管理
TW202409862A (zh) 用於緊密腳本交易之傳訊協定
WO2023208495A1 (en) Messaging protocol for compact script transactions
TW202306368A (zh) 對區塊鏈交易施行條件之技術(一)
Patel SCIP 2.0: horizontally extending the Smart Contract Invocation Protocol
JP2024516895A (ja) マルチパーティブロックチェーンアドレス方式
TW202318444A (zh) 對區塊鏈交易施行條件之技術(二)
EP4371271A1 (en) Blockchain blocks & proof-of-existence
WO2023072774A1 (en) Methods and systems for distributed blockchain functionalities
WO2023072955A1 (en) Methods and systems for distributed blockchain functionalities
WO2023072948A1 (en) Methods and systems for distributed blockchain functionalities
EP4371269A1 (en) Blockchain blocks & proof-of-existence
EP4371270A1 (en) Blockchain blocks & proof-of-existence
GB2618380A (en) Computer-implemented system and method
GB2619745A (en) Computer-implemented system and method
JP2024516894A (ja) マルチパーティブロックチェーンアドレス方式
TW202329668A (zh) 證明及驗證有序事件序列之技術