999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于腳本解釋器的區塊鏈交易合約原理與實踐

2020-09-26 09:32:33郭倩王中豪王晟典林映春
網絡空間安全 2020年9期
關鍵詞:比特幣運行機制

郭倩 王中豪 王晟典 林映春

摘 ? 要:基于腳本解釋器的區塊鏈交易合約架構是目前最簡潔且高效的智能合約設計之一,它具有去中心化、總量固定、可自由兌換、匿名性等特點,也有利于密碼技術在區塊鏈中的靈活應用與實現。文章在整體介紹比特幣腳本系統交易結構的基礎上,闡述了面向未花費交易(UTXO)的輸入交易、輸出交易的結構,并詳細地給出了比特幣腳本指令系統及其執行過程和驗證機制,從而實現了區塊鏈交易合約中基于腳本解釋器的公鑰支付方案。

關鍵詞:智能合約;比特幣;運行機制

中圖分類號: TP312 ? ? ? ? ?文獻標識碼:A

Abstract: The blockchain transaction contract architecture based on the script interpreter is one of the most concise and efficient smart contract designs at present. It has the characteristics of decentralization, fixed total amount, free exchange, and anonymity. It is also conducive to the flexible application and implementation of cryptography in the blockchain. Based on the overall introduction of the transaction structure of the Bitcoin script system, this paper explains the structure of input transactions and output transactions for unspent transactions (UTXO). In addition, this paper details the Bitcoin script instruction system and its execution process and verification mechanism, so as to implement the public key payment scheme based on the script interpreter in the blockchain transaction contract.

Key words: smart contracts; bitcoin; operating mechanism

1 引言

智能合約(Smart Contracts)在廣義上講是指任何符合多方之間約定的計算機協議,現多指運行在區塊鏈上的一個程序或者腳本,具有自動執行、不可篡改、可回溯等特性。Nick Szabo在1994年提出“智能合約”的概念[1],并將其定義為一個使用計算機處理執行合約條款的交易協議。其目的在于以最小化惡意或意外的異常情況,以及最大限度減少對第三方中介需求的前提下,簡化合約的執行和減少合約的執行成本來完成一些常見合約條件。但由于當時缺乏一個可信的第三方平臺,加上合約在社會生活中的重要性,智能合約未能真正成為主流合約指定方式。

2008年,學者Satoshi Nakamoto發表了題為《Bitcoin: A Peer-to-Peer Electronic Cash System》的研究報告[2],并在此基礎上設計并實現了比特幣這種新型數字貨幣。比特幣在對等網絡的基礎上使用了大量密碼學技術[3],并使用工作量證明作為一致性共識算法解決了數字貨幣面臨的“雙花”問題。其核心區塊鏈提供了一個以鏈式數據結構和全網共識為主要特征的分布式數據存儲平臺[4],由此又獲得了去信任和不可篡改等重要特征,從而改變了傳統網絡交易的固定模式,受到了全社會各界人士的廣泛關注。

更為重要的是,比特幣系統采用了一種基于腳本解釋器的區塊鏈交易合約架構。該腳本解釋器采用了一種含有一百多條指令的新計算機指令系統,并采用“棧結構”構造了腳本指令的運行環境。盡管不支持循環和遞歸機制,但是其腳本易于編寫和閱讀,并支持密碼協議設計,因此它是目前最簡潔且高效的智能合約設計之一。它具有去中心化、總量固定、可自由兌換、匿名性等特點,也有利于密碼技術在區塊鏈中的靈活應用與實現。

雖然基于腳本解釋器的區塊鏈交易構架是非圖靈完備的,但它的交易表示結構、指令系統為區塊鏈智能合約的出現奠定了基礎[5],并已具有智能合約的雛形,因此理解比特幣中的交易系統對于理解并發展智能合約具有重要的借鑒價值。本文在整體介紹比特幣腳本系統交易結構的基礎上,闡述了面向未花費交易(UTXO)的輸入交易、輸出交易的結構,并詳細地給出了比特幣腳本指令系統及其執行過程和驗證機制,從而實現了區塊鏈交易合約中基于腳本解釋器的公鑰支付方案。

2 比特幣的交易結構

比特幣中交易(Transaction)結構適用于存儲每一筆交易的數據結構[6],交易在比特幣系統中以tx進行簡寫。由于比特幣是一種數字貨幣系統,它的交易也只用來記錄交易中的貨幣交換,因此它的交易結構比較簡單。具體而言,它的交易內容主要包含交易輸入方(購買者)資金的來源和交易輸出方(銷售者)資金的去處與金額分配。注意,交易輸入的總貨幣量與輸出的總貨幣量是相等的。此外,比特幣系統為每個交易添加簡單的控制字段。

表1展示了比特幣中交易格式的一般結構,并對交易結構中的每個字段的類型和長度(B表示字節)和功能加以描述。一個交易通常包含四方面的信息。

(1)版本號(Version No):交易結構內部編號,用以明確一筆交易參照的規則;

(2)交易輸入(tx_in):本次交易中資金的來源,可以含多項,其中,第一個字段為輸入項個數,其后跟隨輸入項列表;

(3)交易輸出(tx_out):本次交易后資金的去處,可以含多項,其結構與交易輸入相同;

(4)補助信息(Aux):保證交易的補助信息,包括:交易驗證、時間鎖等。

在四種信息中,輸入交易和輸出交易是兩個列表結構,可以包含一或多個交易項。對輸入交易而言,它包含多個輸入交易組成的列表,每個交易含有一個交易地址,用于指向以前的交易輸出,所有以前交易的貨幣量總和構成了本次交易的輸入貨幣總量。對于輸出交易而言,它也包含輸出交易組成的列表,每個交易包含使用該貨幣的打開方式并給出了新的貨幣分配量,同樣地,所有輸出交易的貨幣量總和應與輸出貨幣量相同。

圖1展示了交易之間的相互關系。圖中包括了4個交易,交易1輸出貨幣量為100單位的貨幣,交易2則輸出50個單位貨幣。交易3含有兩個交易輸入,分別指向前述交易1和交易2,這意味著交易3輸入貨幣量為150個單位。交易3則有2個輸出,并將150貨幣單位中的70單位給輸出1和80單位給輸出2。交易4則以交易3中的交易輸出2的80貨幣單位為輸入,交易輸出則分別將30和50貨幣單位分配給兩個交易輸出。由此可知,利用交易輸入和輸出列表可有效而靈活的實現各種貨幣分配策略。

注意,比特幣系統中交易并不直接包含購買者和銷售者的信息,而是采用密碼學中基于公鑰密碼的身份認證方式進行貨幣所有權的宣稱與驗證。所采用的具體原理和方法將在后續第5節加以介紹。

此外,比特幣交易中也包含一些補助信息。例如,版本號用于向系統告知交易結構的版本,系統可對不同版本采取針對性地處理。時間鎖(Lock Time)定義了交易放入區塊中的時刻(由Unix時間指定),也可表示延遲交易被批準的時間(可看作是一種塊高度表示)。具體而言,時間鎖中的時間是該交易被加到區塊的最早時間,在大多數的情況下它的值都是0,表示需要立即被加入區塊中。如果鎖定時間大于0而小于5億(5*108),它的值就表示區塊高度;如果大于5億就表示一個Unix時間戳。

2.1 交易輸入的結構

比特幣中交易輸入列表中每個交易輸入的結構由五個字段構成,分別是哈希索引、輸出索引、以及簽名腳本的長度、腳本本體和序號。表2給出了每一個字段的詳細類型與長度以及描述。

哈希索引包含了購買者在上次交易的256-比特的交易標識(txID),利用該標識能夠迅速定位到貨幣資金的來源交易。由于該標識是之前交易經過兩次嵌套SHA-256哈希運算后的輸出,因此被叫作Hash索引。

輸出索引進一步給出了前述交易標識所指交易中的第幾個輸出,這里要求該輸出是未被鎖定(花費)的,其中,輸出索引是從0開始編號的。

輸入結構中最后部分是簽名腳本,該腳本是用來證明本次交易中的購買者是前述交易輸出貨幣資金的擁有者。由于腳本長度可變,因此首先由長度字段告知腳本長度,然后緊跟著簽名腳本序列本身,最后是簽名腳本序號,它對于不同交易具有不同的意義,因此是交易結構所特指的。通常,當序號為0xFFFFFFFF時,該字段被忽略;否則,該字段被用于設置交易輸出的鎖定時間。

2.2 輸出交易的結構

比特幣中交易輸出列表中每個交易輸出的結構由三個字段構成,分別是分配的貨幣量、公鑰腳本的長度和腳本本體。表3給出了每一個字段的詳細類型與長度以及描述。

輸出項中第一項是貨幣量,它以satoshis為單位進行表示,其中,1BTC=108 satoshis,即1satoshis為1個比特幣的1億分之一。輸出交易中其它兩個字段分別用于存儲公鑰腳本長度和公鑰腳本本身,其中,公鑰腳本是指用交易輸出方(銷售者)所擁有公鑰生成的檢驗下次交易輸入中簽名的驗證腳本。

圖2顯示了一個比特幣交易中的輸入和輸出部分,并省略了兩部分中腳本的長度等信息。可以看出比特幣交易結構具有簡潔和精煉的特點。

除了上述介紹的比特幣交易結構,比特幣系統還存在其它交易結構用于實現其它一些功能。例如,創幣交易(也被稱為coinbase交易)是一種可以由礦工創建的獨特類型的比特幣交易,礦工使用它來收取他們工作的區塊獎勵。

3 比特幣腳本與指令系統

存儲在交易中的公鑰腳本(scriptPubkey)和簽名腳本(scriptSig)字段中的挑戰和響應腳本使用專門為比特幣開發的腳本語言進行編碼。該語言簡稱為腳本(Script),是一種基于棧的語言,即它使用棧結構實現腳本輸入參數的存儲和運算。

比特幣腳本被構建在一種特有的指令系統之上。在計算機系統中,指令系統通常是計算機硬件的語言系統,也叫機器語言,指機器所具有的全部指令的集合,它是軟件和硬件的主要界面,反映了計算機所擁有的基本功能。因此,擁有指令系統的比特幣腳本也趨于成為一種獨立的計算機系統[7]。

不同計算機的指令系統包含的指令種類和數目也不同。一般均包含算術運算型、邏輯運算型、數據傳送型、判定和控制型、移位操作型、位(位串)操作型、輸入和輸出型等指令[8,9]。比特幣中腳本系統的指令采用后綴表達式,即將運算符寫在操作數之后,因此指令格式可表示為:

操作數1 操作數2 ……操作數n 操作指令

操作指令由“OP_”開頭后面接英文操作名構成,例如:OP_ADD、OP_AND。操作指令將被編碼為一個字節,例如,字節0x93用于表示加法運算符OP_ADD,該字節值稱為運算符的操作碼。在操作指令之前的是操作數列表,根據指令不同它可包含零個或多個操作數,例如:OP_NOP是無操作數的空指令、 OP_ADD是雙操作數加法指令等。操作數尋址方式只支持立即尋址方式。

在比特幣腳本系統中常用的指令包括:

(1)堆棧處理指令:

OP_DUP(數據復制操作)、OP_DROP(刪除棧頂元素)、OP_SWAP(棧頂的兩個元素進行交換)等;

(2)流程控制指令:

OP_RETURN(標記交易無效)、

OP_VERIFY(如果棧頂元素為false,標識交易無效。如果為true,則交易有效)等;

(3)加密簽名指令:

OP_HASH256(進行hash散列計算)、

OP_CHECKSIGVERIFY(進行簽名驗證)等;

(4)邏輯操作指令:

OP_EQUAL(判斷是否相等)、

OP_EQUALVERIFY(判斷是否相等后進行腳本流程控制判斷,如果棧頂元素為false就標識交易無效)等。

(5)算術操作指令:

OP_ADD(加)、OP_SUB(減)、

OP_MAX(取最大值)、OP_MIN(取最小值)等。

比特幣指令系統內容已較為豐富,可以支持大多數業務的編程需要,也為智能合約的實現創造了基礎。

4 比特幣腳本執行過程

比特幣腳本的執行系統是一種簡單的、基于棧結構的、從左到右處理的腳本執行系統[10,11]。下面將從腳本構造和腳本執行過程兩個方面加以介紹。

比特幣腳本是由若干指令組成的指令序列。例如,判定等式2+3=5的腳本可表示為:

<2> <3> OP_ADD <5> OP_EQUAL

其中,<>中的值為操作數,并且腳本采用了逆波蘭式(Reverse Polish notation,RPN)的表達形式。

該腳本將在棧(Stack)結構中被腳本解釋器執行,其中,棧是一種具有“先入后出”性質的數據結構表示。腳本解釋器要執行一個包含n個參數的腳本指令,首先將參數推送到堆棧上,然后根據讀取的操作碼,解釋器通過直接從堆棧讀取這n個值來執行計算,并將返回值存儲在堆棧上。因此,這種棧運行方式不需要變量來存儲參數或返回值。

表4中,本文給出了前述腳本的運行過程。首先,腳本解釋器將操作數<2>和<3>壓入到棧中;其次,腳本解釋器在接收到OP_ADD指令后將兩個棧頂操作數相加,得到結果<5>被置于棧頂;然后,操作數<5>壓入到棧中;最后,腳本解釋器在接收到OP_EQUAL指令后將兩個棧頂元素進行比較,并將結果“真”值置于棧頂,運算結束。因此,5步運算后腳本解釋器即可輸出最終結果。

與通用語言相比,腳本運行方式具有功能有限的缺點,例如,它不支持循環。但它也有實現方便、便于編程、靈活性強等優點,而且不存在腳本執行不停機等異常現象,因此易于被比特幣等輕量級區塊鏈系統所采用。總之,比特幣腳本特點可歸納為三點:腳本內存訪問采用棧結構、腳本不含有循環、腳本執行總能終止。

5 密碼腳本執行與驗證

腳本系統在比特幣區塊鏈中的直接應用就是密碼功能的實現。由于區塊鏈中大量使用了密碼技術,而且密碼技術在不同的合約中使用方法多樣,因而需要一種靈活的方法來支持密碼技術在不同合約的使用。由于用戶能夠在交易中通過靈活而短小的腳本指令對密碼操作指令進行編程,因此腳本系統較好地解決了上述問題。

比特幣區塊鏈中密碼技術的使用是多樣的,例如,需要幾個簽名來解鎖這些比特幣、除有效簽名外還需要提供密碼來解鎖特定貨幣。目前,比特幣區塊鏈常見的密碼腳本有四種類型:

(1)類型1:公鑰支付

pay-to-public-key (P2PK):

scriptPubKey: OPCHECKSIG

scriptSig:

(2)類型2:付款到公用密鑰哈希

pay-to-public-key-hash (P2PKH):

scriptPubKey: OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG

scriptSig:

(3)類型3:按腳本哈希支付

pay-to-script-hash (P2SH):

scriptPubKey: OP_HASH160 OP_EQUAL

scriptSig:

主站蜘蛛池模板: 亚洲免费播放| 精品国产电影久久九九| 91美女视频在线| 欧美日韩午夜| 日韩在线播放欧美字幕| 日韩成人在线网站| 国产午夜精品一区二区三区软件| 国产一在线观看| 在线无码私拍| 波多野衣结在线精品二区| 国产精品冒白浆免费视频| 亚洲精品无码久久毛片波多野吉| 99999久久久久久亚洲| 亚洲精选高清无码| 园内精品自拍视频在线播放| 在线a视频免费观看| 亚洲欧美国产视频| 成人国产精品网站在线看| 久久无码高潮喷水| 欧美国产在线看| 久视频免费精品6| 久久国产精品波多野结衣| 毛片卡一卡二| 午夜无码一区二区三区在线app| 亚洲丝袜第一页| 亚洲中文字幕23页在线| 久久国产精品无码hdav| 国产精品免费入口视频| 国产91高跟丝袜| 国产性猛交XXXX免费看| 国产小视频a在线观看| 日本黄色a视频| 九九九国产| 丁香综合在线| 日本国产在线| 日韩在线网址| 夜色爽爽影院18禁妓女影院| 日韩亚洲综合在线| 欧美五月婷婷| 青青青草国产| 亚洲中文字幕在线精品一区| 欧美亚洲一区二区三区在线| 国产欧美日韩视频怡春院| 久久久受www免费人成| 成人韩免费网站| 亚洲av无码成人专区| 亚洲无码精彩视频在线观看| 无码免费的亚洲视频| 国产96在线 | 久久久久国产精品熟女影院| 欧美精品高清| 在线观看精品国产入口| 国产日韩精品欧美一区灰| 亚洲第一中文字幕| 久久国产精品麻豆系列| 高清欧美性猛交XXXX黑人猛交| 国产精品欧美在线观看| 色噜噜在线观看| 国产女人在线视频| 超碰免费91| 国产精品女熟高潮视频| 亚洲Va中文字幕久久一区| 亚洲综合天堂网| 日韩国产精品无码一区二区三区 | 国产无码制服丝袜| 国产国模一区二区三区四区| 国产人成在线视频| 国产18在线| 无码内射中文字幕岛国片 | 日韩黄色大片免费看| 久久久黄色片| 青青热久麻豆精品视频在线观看| 国产在线高清一级毛片| 老司机午夜精品网站在线观看| 香蕉伊思人视频| 黄色福利在线| 国产97视频在线| 毛片视频网| 啪啪国产视频| 国产日韩欧美中文| 幺女国产一级毛片| 久久综合色88|