本發(fā)明涉及互聯(lián)網(wǎng)上量子鏈上區(qū)塊鏈的合約連接,為一種utxo模型與合約之間的搭橋方法。
背景技術(shù):
在比特幣的網(wǎng)絡(luò)中,utxo模型為(unspenttransactionoutput,未花費交易輸出)是比特幣交易的基本單位。通過交易的輸入和輸出,比特幣網(wǎng)絡(luò)將資金變化成一段數(shù)據(jù)結(jié)構(gòu)。區(qū)別于信用卡支付必須在加密安全網(wǎng)絡(luò)中傳輸,比特幣的數(shù)據(jù)可以在任何不一定安全的網(wǎng)絡(luò)中傳輸。utx0模型可以看做被私鑰的擁有者鎖定的、并被整個比特幣網(wǎng)絡(luò)識別的比特幣貨幣單位。在utxo模型中,被某一個交易消耗的utxo被稱為交易輸入,由交易創(chuàng)建的utxo被稱為交易輸出。通過這種方式,一定量的比特幣在不同的私鑰所有者之間轉(zhuǎn)移,并在交易鏈條中不斷消耗和創(chuàng)建新的utxo。一筆比特幣交易通過所有者的私鑰簽名來解鎖utxo,并通過使用新的所有者的比特幣地址來鎖定并創(chuàng)建utxo。但是utxo本身是無狀態(tài)的,必須將通過一系列的創(chuàng)新的設(shè)計,實現(xiàn)基于utxo類型的合約之間的搭橋。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明提供一種解決或部分解決上述問題的utxo模型與合約之間的搭橋方法。
為達(dá)到上述技術(shù)方案的效果,本發(fā)明的技術(shù)方案為:一種utxo模型與合約之間的搭橋方法,包含以下步驟:
utxo模型為比特幣交易的基本單位,包含交易的輸入、比特幣銷毀和交易輸出、由交易產(chǎn)生的比特幣;比特幣在不同的的私鑰所有者之間傳輸,并且在交易組成的鏈條中新的utxo模型也被消費和創(chuàng)建;在utxo模型中,對比特幣交易進(jìn)行解鎖中對私鑰進(jìn)行簽名,私鑰是通過公鑰地址的接收者來創(chuàng)造;使用腳本語言來描述比特幣交易;在utxo模型中,使用公共賬本來追溯每個交易的歷史,具有并行處理能力以初始化在多個指示可擴展的地址之間的交易;
搭橋方法的具體實現(xiàn)為量子鏈帳目抽象層,量子鏈帳目抽象層將utxo模型轉(zhuǎn)換成以賬本為基礎(chǔ)的接口以供以太坊虛擬機使用,并且在以太坊運行的合約使用以太坊虛擬機來保證其的執(zhí)行;utxo模型、合約、量子鏈帳目抽象層都應(yīng)用于量子鏈;
量子鏈賬目抽象層,允許以太坊虛擬機作用在量子鏈中區(qū)塊鏈,并且同時不會對以太坊虛擬機或現(xiàn)有的以太坊合約進(jìn)行重大修改;
通過量子鏈賬目抽象層可以檢查當(dāng)前合約的余額和在區(qū)塊鏈上的其他合約,通過將資金附加到數(shù)據(jù)發(fā)送到其他合約上;
量子鏈賬目抽象層的操作還包含op_exec_assign操作碼,op_exec_assign操作碼用于發(fā)送資金到合約;
op_exec_assign操作碼的作用為:合約被部署到在量子鏈中區(qū)塊時,能被交易哈希值分配和調(diào)用,新部署的合約的余額也為零;在量子鏈中沒有協(xié)議允許一個帶有一個非零余額的合約被部署,op_exec_assign操作碼為了發(fā)送資金到合約,使合約的余額不為零;
用于衡量資金的數(shù)值為氣體模型,氣體模型被包含在以太坊虛擬機中;
量子鏈賬目抽象層包含預(yù)期合約交易,預(yù)期合約交易,是一個工作機制,工作機制的工作背景為當(dāng)合約希望將資金發(fā)送到另一個合約或者公鑰哈希值地址時,需要消費合約中包含的一個所擁有的輸出;預(yù)期合約交易存在于同一個區(qū)塊中,由礦工在驗證和執(zhí)行交易時產(chǎn)生,不在p2p網(wǎng)絡(luò)上廣播;預(yù)期合約交易包含新的操作碼op_txhash,用于傳遞交易哈希值;
op_exec操作碼和op_exec_assign操作碼都有兩種不同的工作模式:當(dāng)它們被執(zhí)行時作為輸出腳本處理的一部分,以太坊虛擬機將被執(zhí)行;為了避免雙重執(zhí)行,當(dāng)它們被執(zhí)行時作為輸入腳本處理的一部分,以太坊虛擬機不被執(zhí)行;基于給予它們的交易哈希值,它們將返回1或0,分別表示可消費或未消費;
當(dāng)op_exec操作碼和op_exec_assign操作碼處于嘗試消費的一個狀態(tài),將檢查預(yù)期合約交易列表;如果交易哈希值通過在從正常情況下從op_txhash操作碼在預(yù)期合約交易列表中傳遞,得到的結(jié)果將為1或已經(jīng)消費,否則,它將返回0或未消費;經(jīng)過上述過程,虛擬輸出的op_exec操作碼和op_exec_assign操作碼可以消費,用于滿足量子鏈賬目抽象層需要虛擬輸出被消費的情況;允許合約的資金只由該合約消費;
在量子鏈賬目抽象層包含關(guān)鍵的共識硬幣選取算法,用于解決合約中存在一個以上的輸出可以花費,量子鏈中每個節(jié)點可以選擇不同的輸出,從而完成不同的交易花費op_exec_assign操作碼的問題;
關(guān)鍵的共識硬幣選取算法中通過一個合約選取不同的硬幣來消費,為了消除量子鏈中選取節(jié)點的分歧,當(dāng)一個以太坊虛擬機的合約需要發(fā)送錢給一個公鑰哈希值地址或者是另一個合約,創(chuàng)建一個新的交易;此時,關(guān)鍵的共識硬幣選取算法將會從擁有的合約池的輸出中選取最好的輸出,輸出將會以帶有輸入腳本的輸入的形式進(jìn)行消費,在輸入中包含有一個簡單的op_txhash操作碼;一個輸出的變化發(fā)送給一個交易的剩余資金,并會返回到合約,并且交易的哈希值將會加入到一個期望合約交易列表;在合約執(zhí)行交易后,交易本身將會立刻被加入到區(qū)塊中,經(jīng)過在期望合約交易列表檢查、確認(rèn)交易的哈希值的正確性,移除交易的哈希值;通過提供一個作為輸入腳本的硬代碼哈希值,代替了op_txhash操作碼的使用。
本發(fā)明的有益成果為:本發(fā)明提供的量子鏈賬目抽象層在utxo模型與合約之間建立橋梁,從而保證了合約的執(zhí)行;使以太坊虛擬機無視硬幣選取和特定輸出,只需關(guān)注合約以及虛擬機中是否存在余額,以及資金是否能被發(fā)送到這些合約、通過合約系統(tǒng)的外部到公鑰哈希值地址,從而提高了量子鏈和以太坊的復(fù)合性,減少修改以太坊合約到量子鏈的端口的難度。
具體實施方式
為了使本發(fā)明所要解決的技術(shù)問題、技術(shù)方案及有益效果更加清楚明白,以下結(jié)合實施例,對本發(fā)明進(jìn)行詳細(xì)的說明。應(yīng)當(dāng)說明的是,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明,能實現(xiàn)同樣功能的產(chǎn)品屬于等同替換和改進(jìn),均包含在本發(fā)明的保護(hù)范圍之內(nèi)。具體方法如下:
實施例1:量子鏈最主要的目標(biāo)是重建第一個共識模型的基于合約平臺utxo模型。這個平臺將比特幣和以太坊生態(tài)系統(tǒng)相結(jié)合。量子鏈目標(biāo)是把握與以太坊虛擬機結(jié)合的比特幣的變化。經(jīng)過實際設(shè)計,量子鏈希望推送到帶有移動端策略的工業(yè)用例上;這也能夠幫助量子鏈促進(jìn)區(qū)塊鏈技術(shù)推廣到一系列的互聯(lián)網(wǎng)用戶之中。在utxo模型中有交易的輸入、比特幣銷毀和交易輸出、由交易產(chǎn)生的比特幣。以這種方式,一定量的比特幣在不同的私鑰所有者之間傳輸,并且在交易鏈中新的utxo也被消費和創(chuàng)建。
在比特幣網(wǎng)絡(luò)中,礦工產(chǎn)生比特幣時伴隨著一個被稱為一個幣基礎(chǔ)交易的過程,這個過程中并且不包含任何輸入;比特幣使用一個腳本語言用于描述交易;在比特幣網(wǎng)絡(luò)中,腳本系統(tǒng)使用棧(主棧和alt棧)來處理數(shù)據(jù),棧是一個帶有后進(jìn)先出特征的抽象數(shù)據(jù)類型,擁有后進(jìn)、先出兩個特征。
在比特幣客戶端,開發(fā)者使用標(biāo)準(zhǔn)函數(shù)去概述腳本類型,比特幣客戶端提供:包含支付給公共密鑰哈希值(p2pkh)、支付給公共密鑰(p2pk)、多重簽名(小于15個私鑰簽名),支付給腳本哈希值(p2sh)和返回操作op_return。
除此之外,僅僅是在必須有一個礦工能封裝非標(biāo)準(zhǔn)交易的條件下,一個非標(biāo)準(zhǔn)腳本也能被創(chuàng)建和執(zhí)行。
舉個例子:支付給公共密鑰哈希值用于解釋腳本創(chuàng)建和執(zhí)行的過程。假定我們需要支付0.01比特幣給面包商店去購買一些面包,那么商店的比特幣地址為面包地址。
所以,這次交易的輸出是:op_dupop_hash160<breadpublickeyhash>op_equalop_checksig。
根據(jù)鎖定腳本,開鎖腳本描述如下:
<breadsignature><breadpublickey><bread簽名><bread公鑰>
結(jié)合上面兩個腳本的描述如下:
<breadsignature><breadpublickey>op_dupop_hash160
<breadpublickeyhash>op_equalop_checksig
只有當(dāng)開鎖腳本和鎖定腳本已經(jīng)匹配預(yù)定義條件時,腳本組合的執(zhí)行為真。
這意味著bread簽名必須是一個帶有匹配有bread地址的私鑰的簽名,它是bread地址的有效簽名,然后結(jié)果也將為真。
即使比特幣的腳本語言包含許多字符,但仍然不是圖靈完備的。這里沒有循環(huán)功能,意味著交易的執(zhí)行數(shù)量是有限的,也意味著交易的并發(fā)是有限的。這個腳本語言不是常用的編程語言。這些限制通過復(fù)雜的付款條件去以防止安全風(fēng)險的發(fā)生,在安全風(fēng)險中會產(chǎn)生無限循環(huán)或其它復(fù)雜的邏輯循環(huán)漏洞。
在utxo模型中,我們能通過公共帳本追溯每個交易的歷史,并且這個過程是完全透明的。utxo模型具有并行處理能力以初始化在多個指示可擴展的地址之間的交易。最后但同樣重要的,utxo模型具有一定的隱私級別。用戶可以使用改變地址以作為utxo的輸出。然而,除了utxo模型本身的研究,量子鏈的目標(biāo)是實現(xiàn)基于utxo模型的創(chuàng)新設(shè)計的合約。
實施例2:以太坊虛擬機被設(shè)計在作用在帳目為基礎(chǔ)的區(qū)塊鏈上;然而,量子鏈?zhǔn)腔诒忍貛?、并且使用utxo模型為基礎(chǔ)的區(qū)塊鏈。
為了處理這種情況,量子鏈包含一個帳目抽象層,其允許以太坊虛擬機作用在量子鏈塊鏈,并且同時不會對虛擬機或現(xiàn)有的以太坊合約進(jìn)行重大修改。
以太坊虛擬機的帳目模型暴露給合約程序員的非常簡單;這里操作可以檢查當(dāng)前合約的余額和在區(qū)塊鏈上的其他合約,可以將錢(附加到數(shù)據(jù))發(fā)送到其他合約上。因此,帳目抽象層這些操作實現(xiàn)可能比預(yù)期更復(fù)雜。
首先,當(dāng)合約被部署到量子鏈塊鏈時,它能被交易哈希值分配和調(diào)用。新部署的合約的余額也為零。目前在量子鏈中沒有協(xié)議允許一個帶有一個非零余額的合約被部署。為了發(fā)送資金到合約,一個使用op_exec_assign操作碼的交易將被創(chuàng)建。
向合約發(fā)送錢的輸出腳本也類似于以下過程:
1;theversionofthevm
10000;gaslimitforthetransaction
100;gaspriceinqtumsatoshis
0xf012;datatosendthecontract(usuallyusingthesolidityabi)
0x1452b22265803b201ac1f8bb25840cb70afe3303;ripemd-160hashofcontracttxid
op_exec_assign
這個交易腳本相當(dāng)簡單,并且將大部分的交易處理交給op_exec_assign操作碼。
給予合約的實際值(假設(shè)這里沒有一個燃?xì)廨敵鰲l件)是一個輸出值-燃料限制。
當(dāng)此輸出添加到塊鏈時,它將成為一個屬于合約帳目的輸出。這輸出值將會反映在合約的余額中。余額只是一個輸出的總額,這個總額是通過合約進(jìn)行消費的。
當(dāng)合約希望將資金發(fā)送到另一個合約或者公鑰哈希值地址時,它需要消費合約中包含的一個所擁有的輸出。涉及的這種機制將會被稱為預(yù)期合約交易。這些交易是特殊的,必須存在于一個區(qū)塊中以便該塊能更好地被量子鏈網(wǎng)絡(luò)驗證。預(yù)期合約交易由礦工在驗證和執(zhí)行交易時產(chǎn)生,而不是由消費者生成。正如此,它們不在p2p網(wǎng)絡(luò)上廣播。
使預(yù)期合約交易工作的主要機制是新的操作碼:op_txhash。
在內(nèi)部,op_exec和op_exec_assign都有兩種不同的模式:當(dāng)它們被執(zhí)行時作為輸出腳本處理的一部分,以太坊虛擬機將被執(zhí)行;當(dāng)它們被執(zhí)行時作為輸入腳本處理的一部分,然而,以太坊虛擬機不被執(zhí)行(因為這將導(dǎo)致雙重執(zhí)行)。
反而,op_exec和op_exec_assign操作碼將在行為上類似無操作no-ops。它們將返回1或0,分別表示可消費或未消費,這個過程基于給予它們的交易哈希值。
當(dāng)op_exec和op_exec_assign操作碼處于嘗試消費的一個狀態(tài),將檢查預(yù)期合約交易列表。如果交易哈希值通過在(從正常情況下從op_txhash)在預(yù)期合約交易列表中傳遞,得到的結(jié)果將為1或已經(jīng)消費。否則,它將返回0或未消費;以這種方式,使用虛擬輸出的op_exec和op_exec_assign可以消費,當(dāng)一個合約需要,并且因此帳戶抽象層需要虛擬輸出被消費(即當(dāng)合約試圖發(fā)送錢到某處)。這個邏輯會陷入循環(huán),但是會導(dǎo)致以一個安全和可靠的方式,允許合約的資金只由該合約消費,并且從行為上更象是一個普通的utxo模型交易。
一個尚未觸及的問題是,如果合約中存在一個以上的輸出可以花費,每個節(jié)點可以選擇不同的輸出,從而完全不同的交易花費op_exec_assign交易。
在量子鏈中的解決的方式是通過一個關(guān)鍵的共識硬幣選取算法。這個硬幣選取算法相似于通常用于用戶的錢包的標(biāo)準(zhǔn)硬幣選取算法。然而,它能很大簡化以避免dos攻擊向量的風(fēng)險,并且使共識規(guī)則盡可能地簡單。在關(guān)鍵的共識硬幣選取算法中,現(xiàn)在這里不存在不同節(jié)點,以通過一個合約選取不同的硬幣去消費。在量子鏈網(wǎng)絡(luò)中,任何選取不同輸出的礦工/節(jié)點將會存在分歧,它們的區(qū)塊鏈也將不會是有效的。為了消除結(jié)點之間的分歧,當(dāng)一個量子鏈虛擬機的合約需要發(fā)送錢給一個公鑰哈希值地址或者是另一個合約,將導(dǎo)致一個新的交易被構(gòu)建。關(guān)鍵共識硬幣選取算法將會從擁有的合約池的輸出中選取最好的輸出。這些輸出將會以帶有輸入腳本的輸入的形式進(jìn)行消費,這種輸入中包含有一個簡單的op_txhash操作碼。輸出的目的是用于資金;一個改變的輸出發(fā)送給一個交易的剩余資金,并會返回到合約。這個交易的哈希值將會加入到一個期望合約交易列表;在合約執(zhí)行交易后,交易自己將會立刻被加入到區(qū)塊中。然后,當(dāng)這個合約交易是有效和可執(zhí)行的,期望合約交易列表將會檢查、確認(rèn)它的正確性,然后這個交易哈希值將會從期望合約交易列表中被移除。使用這個模型,這里沒有方法欺騙交易以使它們消費,通過提供一個作為輸入腳本的硬代碼哈希值,代替了op_txhash的使用。
這個抽象層使以太坊虛擬機無視硬幣選取和特定輸出,只能知道它們和其他合約中是否存在余額,和錢能被發(fā)送到這些合約以及通過合約系統(tǒng)的外部到公鑰哈希值地址;這樣,量子鏈和以太坊復(fù)合性將會變強,很少需要修改以太坊合約到量子鏈塊的端口。
以上所述僅為本發(fā)明之較佳實施例,并非用以限定本發(fā)明的權(quán)利要求保護(hù)范圍。同時以上說明,對于相關(guān)技術(shù)領(lǐng)域的技術(shù)人員應(yīng)可以理解及實施,因此其他基于本發(fā)明所揭示內(nèi)容所完成的等同改變,均應(yīng)包含在本權(quán)利要求書的涵蓋范圍內(nèi)。
本發(fā)明的有益成果為:本發(fā)明提供的量子鏈賬目抽象層在utxo模型與合約之間建立橋梁,從而保證了合約的執(zhí)行;使以太坊虛擬機無視硬幣選取和特定輸出,只需關(guān)注合約以及虛擬機中是否存在余額,以及資金是否能被發(fā)送到這些合約、通過合約系統(tǒng)的外部到公鑰哈希值地址,從而提高了量子鏈和以太坊的復(fù)合性,減少修改以太坊合約到量子鏈的端口的難度。