CN120260659A 與用于串行化算術(shù)電路的算術(shù)編碼有關(guān)的計算機實現(xiàn)的方法和系統(tǒng) (區(qū)塊鏈控股有限公司)_第1頁
CN120260659A 與用于串行化算術(shù)電路的算術(shù)編碼有關(guān)的計算機實現(xiàn)的方法和系統(tǒng) (區(qū)塊鏈控股有限公司)_第2頁
CN120260659A 與用于串行化算術(shù)電路的算術(shù)編碼有關(guān)的計算機實現(xiàn)的方法和系統(tǒng) (區(qū)塊鏈控股有限公司)_第3頁
CN120260659A 與用于串行化算術(shù)電路的算術(shù)編碼有關(guān)的計算機實現(xiàn)的方法和系統(tǒng) (區(qū)塊鏈控股有限公司)_第4頁
CN120260659A 與用于串行化算術(shù)電路的算術(shù)編碼有關(guān)的計算機實現(xiàn)的方法和系統(tǒng) (區(qū)塊鏈控股有限公司)_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

(19)國家知識產(chǎn)權(quán)局與用于串行化算術(shù)電路的算術(shù)編碼有關(guān)的可以利用本文描述的技術(shù)來實現(xiàn)用于使用諸如算術(shù)編碼等壓縮技術(shù)將算術(shù)電路無損壓縮的計算資源相比,可以使用更少的計算資源(例如,數(shù)據(jù)存儲資源)來將該壓縮的算術(shù)電路存儲率(例如,算術(shù)運算符類型),可以使用熵編碼有21.一種計算機實現(xiàn)的方法,用于使用緩沖器來管理算術(shù)電路的串行化過程,所述方法接收對表示智能合約的算術(shù)電路進行串行化的命令,其中,所述命令是包含對數(shù)據(jù)文件的引用的應(yīng)用程序編程接口(API)命令,所述數(shù)據(jù)文件包括待要串行化的所述算術(shù)電路:(i)掃描包括所述算術(shù)電路的所述數(shù)據(jù)文件的第一行,其中,讀取的所述數(shù)據(jù)文件的每一行對應(yīng)于與一個或多個可執(zhí)行指令相對應(yīng)的命令;(ii)通過確定與所述命令相關(guān)聯(lián)的類型化的運算來確定映射;(iii)基于類型對變量進行編碼,其中,使用不同數(shù)量的比特位來編碼不同類型的變(iv)將已編碼的變量插入到緩沖器;順序地掃描所述數(shù)據(jù)文件以獲得所述數(shù)據(jù)文件的其他行,并根據(jù)步驟(i)至(iv)處理所述其他行,直到檢測到所述數(shù)據(jù)文件的最后一行;以及沖刷所述緩沖器以將數(shù)據(jù)轉(zhuǎn)移到輸出流或文件,從而生成串行化電路。2.根據(jù)權(quán)利要求1所述的計算機實現(xiàn)的方法,其中,掃描所述文件包括:從所述數(shù)據(jù)文件的第一行或下一行獲得命令,并將所述命令映射到底層方法。3.根據(jù)權(quán)利要求1或2所述的計算機實現(xiàn)的方法,其中,將所述已編碼的變量插入到所述緩沖器是如下命令:將數(shù)據(jù)的特定數(shù)量的比特位寫入到所述輸出流。4.根據(jù)前述權(quán)利要求中任一項所述的計算機實現(xiàn)的方法,其中,檢測所述數(shù)據(jù)文件的所述最后一行包括:通過檢測是否已經(jīng)到達特定的文件結(jié)尾的比特或字符序列,來確定是否已經(jīng)到達文件的結(jié)尾。5.根據(jù)前述權(quán)利要求中任一項所述的計算機實現(xiàn)的方法,其中,至少部分地基于編碼器的設(shè)置,使用不同數(shù)量的比特位來編碼不同類型的變量。6.根據(jù)前述權(quán)利要求中任一項所述的計算機實現(xiàn)的方法,其中,頭部數(shù)據(jù)、運算符數(shù)據(jù)和線標(biāo)識符數(shù)據(jù)的編碼各自利用諸如算術(shù)編碼技術(shù)的不同技術(shù)來進行數(shù)據(jù)編碼。7.根據(jù)前述權(quán)利要求中任一項所述的計算機實現(xiàn)的方法,其中,所述數(shù)據(jù)文件是未壓縮的數(shù)據(jù)文件。8.根據(jù)前述權(quán)利要求中任一項所述的計算機實現(xiàn)的方法,其中,所述命令標(biāo)識用于存儲算術(shù)電路的串行化結(jié)果的所述輸出流。9.根據(jù)前述權(quán)利要求中任一項所述的計算機實現(xiàn)的方法,其中,所述智能合約包括條件集合以及一個或多個結(jié)果,其履行至少部分取決于基于一個或多個輸入而對條件集合進行的評估。10.根據(jù)前述權(quán)利要求中任一項所述的計算機實現(xiàn)的方法,其中,所述智能合約由領(lǐng)域?qū)S谜Z言(DSL)代碼編寫,所述DSL代碼被轉(zhuǎn)換為通用語言(GPL)代碼。包括可執(zhí)行指令的存儲器,所述可執(zhí)行指令由于被處理器執(zhí)行,使系統(tǒng)執(zhí)行權(quán)利要求1至10中的任一項所述的計算機實現(xiàn)的方法。12.一種其上存儲有可執(zhí)行指令的非瞬時性計算機可讀存儲介質(zhì),所述可執(zhí)行指令由于被計算機系統(tǒng)的處理器執(zhí)行,使計算機系統(tǒng)至少執(zhí)行權(quán)利要求1至10中的任一項所述的3計算機實現(xiàn)的方法。4與用于串行化算術(shù)電路的算術(shù)編碼有關(guān)的計算機實現(xiàn)的方法和系統(tǒng)[0001]本申請為中國申請?zhí)枮?01980022069.5(PCT國際申請?zhí)朠CT/IB2019/052112),申請日為2019年03月15日,名稱為“與用于串行化算術(shù)電路的算術(shù)編碼有關(guān)的計算機實現(xiàn)的方法和系統(tǒng)”的專利申請的分案申請。技術(shù)領(lǐng)域如,當(dāng)算術(shù)電路被存儲在磁盤上或存儲器中時)的技術(shù),并且更具體地涉及通過利用壓縮技術(shù)(即,這里描述的算術(shù)編碼技術(shù))來生成串行化電路的技術(shù)??梢砸詿o損方式壓縮算術(shù)電路以產(chǎn)生串行化電路,該串行化電路可以在以后的時間點被用來完美地再造原始電路。算術(shù)電路可以用于產(chǎn)生程序(program),該程序的執(zhí)行可以被委托給分布式計算環(huán)境的一個或多個節(jié)點??梢允褂脜f(xié)議來確保程序的正確執(zhí)行,其中,第一計算機系統(tǒng)將程序的執(zhí)行委托給第二計算機系統(tǒng)。本發(fā)明特別適合于但不限于在區(qū)塊鏈網(wǎng)絡(luò)中使用。背景技術(shù)[0003]在本文檔中,我們使用術(shù)語“區(qū)塊鏈”來包括所有形式的電子的基于計算機的分布式賬本(ledger)。這些包括基于共識的區(qū)塊鏈和交易鏈技術(shù)、許可的和未被許可的賬本、共享賬本及其變型。盡管為了方便和說明的目的在本文中可能提及特定區(qū)塊鏈,但是應(yīng)當(dāng)注意,本發(fā)明不限于與特定區(qū)塊鏈一起使用,并且替代的區(qū)塊鏈實現(xiàn)和協(xié)議落入本發(fā)明的范[0004]區(qū)塊鏈?zhǔn)且环N點對點的電子賬本,其被實現(xiàn)為基于計算機的去中心化的分布式系統(tǒng),該系統(tǒng)由區(qū)塊組成,而區(qū)塊又由交易(tr該數(shù)據(jù)結(jié)構(gòu)對區(qū)塊鏈系統(tǒng)中參與者之間的數(shù)字資產(chǎn)控制權(quán)的轉(zhuǎn)移進行編碼,并包括至少一個輸入和至少一個輸出。每個區(qū)塊都包含前一個區(qū)塊的哈希值,此外區(qū)塊被鏈接在一起來創(chuàng)建所有交易的永久、不可更改的記錄,這些交易自其開始就已經(jīng)被寫入?yún)^(qū)塊鏈。交易包含嵌入到其輸入和輸出中的被稱為腳本的小程序,這些小程序指定如何以及由誰可以訪問交易的輸出。在一些平臺上,這些腳本是使用基于堆棧的腳本語言編寫的。[0005]為了將交易寫入?yún)^(qū)塊鏈,必須對其進行“驗證”。網(wǎng)絡(luò)節(jié)點(挖掘節(jié)點)執(zhí)行工作以確保每個交易有效,而無效交易則被網(wǎng)絡(luò)拒絕。安裝在節(jié)點上的軟件客戶端通過執(zhí)行其鎖定腳本和解鎖腳本來對未花費的交易輸出(unspenttransaction,UTXO)執(zhí)行該驗證工作。如果鎖定腳本和解鎖腳本的執(zhí)行評估為真(TRUE),則該交易有效,并將該交易寫入?yún)^(qū)塊鏈。因此,為了將交易寫入?yún)^(qū)塊鏈,必須:i)由接收交易的第一節(jié)點驗證該交易-如果交易經(jīng)過驗證,則該節(jié)點將其中繼到網(wǎng)絡(luò)中的其他節(jié)點;ii)將該交易添加到由挖掘節(jié)點建造的新區(qū)[0006]數(shù)字企業(yè)家已經(jīng)開始探索使用加密安全系統(tǒng)以及可以存儲在區(qū)塊鏈上的數(shù)據(jù)這兩者以實現(xiàn)新系統(tǒng)。如果區(qū)塊鏈可以用于自動化任務(wù)和過程,那將是非常有利的。這樣的方5案將能夠利用區(qū)塊鏈的好處(例如,事件的永久性、防篡改記錄、分布式處理等),同時在其應(yīng)用中具有更多用途。[0007]當(dāng)前研究的一個領(lǐng)域是使用區(qū)塊鏈來實現(xiàn)“智能合約”。這些是設(shè)計為自動執(zhí)行機器可讀合約或協(xié)議條款的計算機程序。與以自然語言編寫的傳統(tǒng)合約不同,智能合約是一種機器可執(zhí)行程序,其包括可以處理輸入以便產(chǎn)生結(jié)果的規(guī)則,然后可根據(jù)這些結(jié)果來促使動作被執(zhí)行。發(fā)明內(nèi)容[0008]因此,期望實現(xiàn)一種可驗證的計算框架,在該計算框架中,客戶端計算機系統(tǒng)生成被表示為算術(shù)電路的智能合約,并使用編碼技術(shù)(即算術(shù)編碼)來壓縮算術(shù)電路,從而生成壓縮的算術(shù)電路,其可用于減少存儲和/或執(zhí)行智能合約的存儲空間需求。進而,該壓縮的算術(shù)電路可以被廣播到區(qū)塊鏈網(wǎng)絡(luò),并代替未壓縮的算術(shù)電路而被存儲(例如,存儲在區(qū)塊鏈網(wǎng)絡(luò)的節(jié)點中)。工作者計算機系統(tǒng)可以獲取壓縮的算術(shù)電路并獲得智能合約的可執(zhí)行版本(例如,通過解壓縮壓縮的算術(shù)電路),并根據(jù)各種可驗證的計算協(xié)議代表客戶端計算機系統(tǒng)執(zhí)行智能合約。[0009]現(xiàn)在已經(jīng)設(shè)計出這種改進的方案。[0011]根據(jù)本發(fā)明,可以提供一種用于區(qū)塊鏈網(wǎng)絡(luò)的節(jié)點的計算機實現(xiàn)的方法,該計算機實現(xiàn)的方法包括:基于表示智能合約的算術(shù)電路獲得符號集;通過至少以下步驟來減少用于存儲算術(shù)電路的數(shù)據(jù)量:將符號集的子集映射到編碼值的范圍,選擇該編碼值的范圍內(nèi)的編碼值,以及在壓縮的算術(shù)電路中用編碼值來表示符號集的第一子集;以及使壓縮的算術(shù)電路存儲在區(qū)塊鏈網(wǎng)絡(luò)的節(jié)點上。[0012]優(yōu)選地,壓縮的算術(shù)電路包括頭部,其中,頭部對可用于將符號集的集合映射到編碼值的不同范圍的信息進行編碼—例如,第一符號映射到范圍(0-0.3),第二符號映射到范圍(0.3,0.7),且第三符號映射到范圍(0.7,1)。不同范圍可以是非重疊范圍,使得特定編碼值恰好對應(yīng)于一個符號或符號集。[0013]優(yōu)選地,編碼值是二進制小數(shù)(binaryfraction),例如大于或等于零且還小于一的二進制值。[0014]編碼值可以基于由閾值比特數(shù)表示的編碼值來選擇。例如,在范圍內(nèi)的兩個不同的二進制小數(shù)之間,可以將利用更少的比特表示的二進制小數(shù)選擇作為編碼值。[0015]選擇編碼值可以包括:將符號集的不同子集映射到編碼值的范圍的子范圍;從編碼值的范圍的子范圍內(nèi)選擇編碼值;并且其中,符號的第一子集和第二子集兩者都由壓縮的算術(shù)電路中的編碼值表示。[0016]該方法還可以包括:基于表示智能合約的算術(shù)電路來獲得符號集;接收串行化輸入文件的請求,該輸入文件包括表示算術(shù)電路的多行碼;掃描所述多行碼中的至少一部分,并將符號集中的符號添加到數(shù)據(jù)結(jié)構(gòu);并且其中,該符號集是從數(shù)據(jù)結(jié)構(gòu)獲得的。[0017]該方法還可以包括:將符號集的符號編碼為該符號與該符號集的另一符號之間的[0018]優(yōu)選地,該算術(shù)電路包括運算符和線(wire)標(biāo)識符,進一步地,其中,該符號集是6運算符,并且該線標(biāo)識符根據(jù)算術(shù)編碼方案被分別編碼。[0019]該方法還可以包括:通過解析對算術(shù)電路進行編碼的文件來獲得符號集,以獲取對運算符集和針對該運算符集的至少一部分的參數(shù)集的標(biāo)識。[0020]優(yōu)選地,編碼值的范圍對應(yīng)于子集以某一模式出現(xiàn)的概率。例如,在兩個符號集之間,具有較大出現(xiàn)概率的符號集具有相對而言較大的對應(yīng)的編碼值的范圍。[0021]優(yōu)選地,該符號集的子集是一個符號。[0022]優(yōu)選地,壓縮的算術(shù)電路代替算術(shù)電路被廣播到區(qū)塊鏈網(wǎng)絡(luò)。[0023]優(yōu)選地,接收壓縮的算術(shù)電路的區(qū)塊鏈網(wǎng)絡(luò)的節(jié)點能夠從壓縮的算術(shù)電路確定算術(shù)電路。[0024]根據(jù)本發(fā)明,可以提供一種計算機實現(xiàn)的方法,用于使用緩沖器來管理算術(shù)電路的串行化過程,所述方法包括:接收對表示智能合約的算術(shù)電路進行串行化的命令,其中,所述命令是應(yīng)用程序編程接口(API)命令,所述命令包含對數(shù)據(jù)文件的引用,所述數(shù)據(jù)文件包括待要串行化的所述算術(shù)電路:(i)掃描包括所述算術(shù)電路的所述數(shù)據(jù)文件的第一行,其中,讀取的所述數(shù)據(jù)文件的每一行對應(yīng)于與一個或多個可執(zhí)行指令相對應(yīng)的命令,(ii)通過確定與所述命令相關(guān)聯(lián)的類型化(typed)的運算來確定映射,(iii)基于類型對變量進行編碼,其中,使用不同數(shù)量的比特位來編碼不同類型的變量,和,(iv)將已編碼的變量插入到緩沖器;順序地掃描所述數(shù)據(jù)文件以獲得所述數(shù)據(jù)文件的其他行,并根據(jù)步驟(i)至(iv)處理所述其他行,直到檢測到所述數(shù)據(jù)文件的最后一行;以及,沖刷(flush)所述緩沖器以將數(shù)據(jù)轉(zhuǎn)移到輸出流或文件,從而生成串行化電路。[0025]可選地,掃描所述文件包括:從所述數(shù)據(jù)文件的第一行或下一行獲得命令,并將所述命令映射到底層方法。[0026]可選地,將所述已編碼的變量插入到所述緩沖器是如下命令:將數(shù)據(jù)的特定數(shù)量的比特位寫入到所述輸出流。[0027]可選地,檢測所述數(shù)據(jù)文件的所述最后一行包括:通過檢測是否已經(jīng)到達特定的文件結(jié)尾的比特或字符序列,來確定是否已經(jīng)到達文件的結(jié)尾。[0028]可選地,至少部分地基于編碼器的設(shè)置,使用不同數(shù)量的比特位來編碼不同類型的變量。[0029]可選地,頭部數(shù)據(jù)、運算符數(shù)據(jù)和線標(biāo)識符數(shù)據(jù)的編碼各自利用(諸如算術(shù)編碼技術(shù)的)不同技術(shù)來進行數(shù)據(jù)編碼。[0031]可選地,所述命令標(biāo)識用于存儲算術(shù)電路的串行化結(jié)果的所述輸出流。[0032]可選地,所述智能合約包括條件集合以及一個或多個結(jié)果,其履行至少部分取決于基于一個或多個輸入而對條件集合進行的評估。[0033]可選地,所述智能合約由領(lǐng)域?qū)S谜Z言(DSL)代碼編寫,所述DSL代碼被轉(zhuǎn)換為通用語言(GPL)代碼。[0034]還期望提供一種系統(tǒng),該系統(tǒng)包括:處理器;以及包括可執(zhí)行指令的存儲器,該可執(zhí)行指令由于被處理器執(zhí)行而促使系統(tǒng)執(zhí)行要求保護的方法中的任一個。[0035]還期望提供一種其上存儲有可執(zhí)行指令的非瞬時性計算機可讀存儲介質(zhì),該可執(zhí)行指令由于被計算機系統(tǒng)的一個或多個處理器執(zhí)行而促使計算機系統(tǒng)至少執(zhí)行要求保護7的方法中的任一個。附圖說明[0036]本發(fā)明的這些和其他方面將從本文描述的實施例變得顯而易見并參考這些實施例而闡明。現(xiàn)在將僅通過示例的方式并參考附圖來描述本發(fā)明的實施例,附圖中:[0037]圖1示出了在本公開的實施例中的算術(shù)電路的串行化和解串行化;[0038]圖2示出了示意圖,該示意圖示出了在本公開的實施例中涉及的可驗證計算和行動者(actor)的游動圖(swimdiagram)的示例;[0039]圖3示出了根據(jù)本公開實施例的從領(lǐng)域?qū)S谜Z言(DSL)碼到二次算術(shù)程序(QAP)的工作流程的示例;[0040]圖4示出了根據(jù)本公開的實施例的對符號序列的算術(shù)編碼進行可視化的圖;[0041]圖5示出了根據(jù)本公開實施例的使用算術(shù)編碼來壓縮算術(shù)電路的過程的說明性示[0042]圖6根據(jù)至少一個實施例示出了實施例中可以實現(xiàn)對基于算術(shù)編碼的壓縮性質(zhì)的算術(shù)電路的串行化的各種方案的圖;[0043]圖7示出了根據(jù)實施例的用于使用緩沖器(buffer)來管理算術(shù)電路的串行化的過程的說明性示例;[0044]圖8示出了根據(jù)實施例的可視化符號序列的多符號表示的圖,該符號序列利用基于算術(shù)電路的字典(dictionary)的性質(zhì);[0045]圖9示出了根據(jù)實施例的多符號編碼的圖;以及[0046]圖10示出了通過聚合標(biāo)識符來壓縮算術(shù)電路從而導(dǎo)致生成了可以被進一步壓縮的串行化電路的圖。具體實施方式[0047]現(xiàn)在我們提供根據(jù)一個實施例的如何將本發(fā)明付諸實踐的說明。本發(fā)明可以在分布式計算環(huán)境的背景下實現(xiàn),其中,第一計算實體利用算術(shù)電路來生成程序,該程序的執(zhí)行可以被委托給分布式計算環(huán)境的計算實體(例如,區(qū)塊鏈網(wǎng)絡(luò)的節(jié)點)。此外,程序的正確執(zhí)行是計算上可驗證的,使得客戶端計算實體能夠委托至少部分地基于算術(shù)電路而生成的程序的執(zhí)行,該客戶端計算實體能夠驗證該程序由工作者計算實體正確地執(zhí)行。以此方式,可以實現(xiàn)分布式計算環(huán)境的各種效率,包括使得客戶端計算實體能夠?qū)⒊绦虻膱?zhí)行委托給計算機系統(tǒng)并在另一實體的控制下驗證程序的執(zhí)行。[0048]如下面更詳細描述的,我們描述了一種使用算術(shù)編碼將算術(shù)電路壓縮和串行化為數(shù)據(jù)的二進制流的可能實現(xiàn)。數(shù)據(jù)的二進制流可以以無損方式被解串行化和解壓縮??梢詫崿F(xiàn)串行化電路的各種優(yōu)點,例如減少電路的數(shù)據(jù)存儲足跡(例如,通過存儲串行話電路來代替存儲算術(shù)電路)。例如,在區(qū)塊鏈網(wǎng)絡(luò)的背景下,算術(shù)電路或從該算術(shù)電路派生的程序可以至少部分地編碼到區(qū)塊鏈網(wǎng)絡(luò)的賬本中。通過使用本文描述的技術(shù)來減少算術(shù)電路的數(shù)據(jù)存儲足跡,可以減少存儲到區(qū)塊鏈賬本的數(shù)據(jù)量。即使對存儲在區(qū)塊鏈中的數(shù)據(jù)的數(shù)據(jù)存儲足跡的減少很小也是值得贊賞的,因為可以通過區(qū)塊鏈網(wǎng)絡(luò)的某些或者甚至所有節(jié)點來再造區(qū)塊鏈賬本。8[0049]特定的結(jié)構(gòu)或構(gòu)造塊(buildingblock)可以用來促進這種轉(zhuǎn)換。在一個或多個實施例中,該表示可以被視為構(gòu)建能夠提供分布式可驗證計算的綜合管線的第一步。在該示例中呈現(xiàn)的構(gòu)造塊并不旨在是本發(fā)明的實施例處理的所有可能的高級語言構(gòu)造的詳盡列[0050]現(xiàn)在我們提供本發(fā)明的說明性實施例。然而,重要的是要注意,這是可以使用本發(fā)明的應(yīng)用的示例。技術(shù)人員將理解,可以在其他背景和應(yīng)用中有利地使用本發(fā)明。[0051]對于我們的示例,請考慮允許用戶使用領(lǐng)域?qū)S谜Z言(DSL)生成應(yīng)用程序的協(xié)議。一旦已經(jīng)生成了應(yīng)用程序,就可以將其執(zhí)行外包給不可信的各方(稱為“工作者”或“證明者”),同時可以公開地驗證其正確性。該協(xié)議利用確保以下各項的加密原語(primitive):[0053]·穩(wěn)固性(soundness),即作弊的證明者無法說服誠實的驗證者相信輸出的真實[0054]·零知識,即除輸出的有效性外,作弊的驗證者不會學(xué)到任何一些好處可以包括:[0058]·合約生效并不意味著碼被重新執(zhí)行。計算不會通過網(wǎng)絡(luò)中的每個節(jié)點來重做[0059]這樣的系統(tǒng)將能夠處理對應(yīng)于各種任務(wù)和產(chǎn)品的各種類型的應(yīng)用程序。由于其去中心化和分散式的性質(zhì),區(qū)塊鏈為解決兩個(或更多個)各方之間的協(xié)定提供了合適的環(huán)[0060]這樣的系統(tǒng)需要在去中心化的系統(tǒng)中提供并促進可編程性。然而,在本領(lǐng)域中已經(jīng)認識到智能合約編程是容易出錯的過程。參見Delmolino,K.,等人(2015),StepbyStepTowardsCreatingaSafeSmartContract(逐步創(chuàng)建安全智能合約),以及Juels,A.,等人(2013),TheRing合約進行犯罪)。[0061]因此,能夠使用使應(yīng)用程序更易于由程序員編寫和讀取的DSL,從而減少錯誤、減少編程過程期間的時間、精力、成本和資源將是有利的。理想情況下,非專業(yè)程序員在無需實現(xiàn)加密的情況下就可以編寫各種類型的應(yīng)用程序。相反,編譯器/解釋器將自動將源代碼編譯為用戶和區(qū)塊鏈之間的加密協(xié)議。這些在本發(fā)明解決的技術(shù)問題中。[0062]圖1是可以根據(jù)本公開實現(xiàn)的實施例的說明圖100.本文描述的技術(shù)可以被用于對在計算機程序的執(zhí)行中使用的算術(shù)電路進行串行化和解串行化。根據(jù)實施例,算術(shù)電路可以被用來構(gòu)建二次算術(shù)問題(QAP),該二次算術(shù)問題被編譯成用于客戶端(例如,密鑰生成和驗證)和證明者(例如,計算和證據(jù)生成)的加密例程的集合??蛻舳撕妥C明者可以以允許客戶端有效地驗證證明者正確地執(zhí)行程序的方式利用協(xié)議將程序的執(zhí)行委托給證明者。通過減少與算術(shù)電路有關(guān)的所需計算資源(例如,硬盤空間),可以利用串行化電路來改善計算機系統(tǒng)的操作。在實施例中,算術(shù)電路包括被表示為符號集(例如,算術(shù)門和值)的信息,該信息被壓縮以產(chǎn)生包括碼集的串行化電路,其中該符號集可以以無損的方式從碼集導(dǎo)9出。壓縮電路的傳輸可以通過使得更多數(shù)量的電路能夠被傳輸來改善計算機系統(tǒng)的有效數(shù)據(jù)傳輸帶寬。例如,如果壓縮的電路將算術(shù)電路的大小減少50%,則有效數(shù)據(jù)傳輸帶寬可以被翻倍,因為使用相同的字節(jié)數(shù)可以傳輸多達兩倍的壓縮的算術(shù)電路(應(yīng)該注意,實際數(shù)據(jù)傳輸帶寬的改善可能不到兩倍,因為考慮了諸如可能未被壓縮的分組頭部等數(shù)據(jù)開銷)。減少算術(shù)電路的數(shù)據(jù)足跡可以減少與算術(shù)電路的使用相關(guān)聯(lián)的計算機硬件要求(例如,減少短期存儲器(例如,RAM)數(shù)據(jù)存儲量)和/或計算機系統(tǒng)利用的數(shù)據(jù)帶寬,該計算機系統(tǒng)使用、存儲本文所述的電路或以其他方式與本文所述的電路進行交互。壓縮電路的傳輸可以通過使得更多數(shù)量的電路能夠被傳輸來改善計算機系統(tǒng)的有效數(shù)據(jù)傳輸帶寬。例如,如果壓縮的電路將算術(shù)電路的大小減少50%,則有效數(shù)據(jù)傳輸帶寬可以被翻倍,因為使用相同的字節(jié)數(shù)可以傳輸多達兩倍的壓縮的算術(shù)電路(應(yīng)該注意,實際數(shù)據(jù)傳輸帶寬的改善可能不到兩倍,因為考慮了諸如可能未被壓縮的分組頭部等數(shù)據(jù)開銷)。減少算術(shù)電路的數(shù)據(jù)足跡可以減少與算術(shù)電路的使用相關(guān)聯(lián)的計算機硬件要求(例如,減少短期存儲器(例如,RAM)數(shù)據(jù)存儲量)和/或計算機系統(tǒng)利用的數(shù)據(jù)帶寬,該計算機系統(tǒng)使用、存儲本文所述的電路或以其他方式與本文所述的電路進行交互。[0063]通常,算術(shù)電路C包括攜帶來自字段(field)F的值并連接到邏輯和/或算術(shù)門的和輸出線。該電路還可以包括頭部,該頭部包括諸如版本號、線的總數(shù)以及允許根據(jù)目標(biāo)執(zhí)行環(huán)境(例如,處理器架構(gòu))來執(zhí)行優(yōu)化的位寬(bit-width)nit的信息。算術(shù)電路的壓縮可以通過以下方式實現(xiàn):去除根據(jù)其他字段可確定的數(shù)據(jù)字段、應(yīng)用熵編碼方案、以及其組合。各種類型的簡化規(guī)則可以用作基于編碼算術(shù)電路的格式的壓縮例程的一部分。例如,可能不需要某些信息,例如針對輸入的線標(biāo)識符、輸出門的線標(biāo)識符、第一門的第一輸入以及可以被壓縮(例如,未明確編碼為串行化電路的一部分)的最后的輸出線標(biāo)識符、或其任何組合。[0064]在各種實施例中,將熵編碼或編碼方案應(yīng)用于算術(shù)電路或其一部分(例如,基于上述簡化規(guī)則)。可以利用熵編碼來產(chǎn)生可變長度碼表,以用于源符號的串行化?;舴蚵幋a可用于生成碼表,在該碼表中使用較短的碼對出現(xiàn)頻率較高的源符號進行編碼,且使用較長的碼對出現(xiàn)頻率較低的源符號進行編碼—碼的長度可以與源符號或序列出現(xiàn)的頻率成反比。使用這些技術(shù),算術(shù)電路可以被壓縮為就長期數(shù)據(jù)存儲介質(zhì)(例如,硬盤驅(qū)動器)和短期數(shù)據(jù)存儲(例如,隨機存取存儲器)中的存儲而言需要較少計算資源的串行化電路。[0065]如上所述,霍夫曼碼可以被用來生成碼表。霍夫曼碼是指可用于實現(xiàn)無損數(shù)據(jù)壓縮的特定類型的最優(yōu)前綴碼。霍夫曼算法的輸出可以是可變長度碼表(例如,碼本),用于對文件中的源符號(例如,字符或命令)進行編碼。在實施例中,該算法從估計或測得的來自源符號的每個可能值出現(xiàn)的概率或頻率(權(quán)重)導(dǎo)出表:與不常見的符號相比,通常使用較少的比特來表示更常見的符號。在實施例中,霍夫曼編碼可以被有效地實現(xiàn)為以與輸入權(quán)重的數(shù)量成線性關(guān)系的時間來找到碼,其中輸入權(quán)重是按排序的順序。在單獨對符號進行編碼的方法之中,此策略可能是最佳的?;舴蚵幋a可以使用為每個符號選取表示的特定方法,從而產(chǎn)生前綴碼,即,表示某個特定符號的位串絕不是表示任何其他符號的位串的前[0066]給定來自字母表(alphabet)A的、尺寸為n并且其權(quán)重{p?,p?,…,P?-}通常與概率為單位)為h(a)=log?(1/p)。熵H(以比特為單位)是跨具有非零概率p的所有符號a的每[0070]串行化電路可用于以無損方式使用擴展或解壓縮例程導(dǎo)出原始算術(shù)電路。應(yīng)注出。在數(shù)字壓縮的背景下,無損壓縮可以指源比特流的每個比特[0071]圖2是示出了本公開的實施例中涉及的可驗證計算和行動者的游動圖200的示例[0072]在實施例中,建立階段涉及以領(lǐng)域?qū)S谜Z言(DSL)編寫合約??梢允强蛻舳斯?jié)點為y○在一些實施例中,期望工作者節(jié)點250(即,證明者)獲得{C,x,y}的有效副本門的正確運算,并且分配給(一個或多個)輸出線的值是y;如果聲稱的輸出不正確(即,y≠P(x)),則{C,x,y}的有效副本不存戶端節(jié)點240或從客戶端節(jié)點240選擇的秘密值s來導(dǎo)出公共評估密鑰EK和公共驗證密鑰11VK。在實施例中,工作者節(jié)點250使用這些公共密鑰來評估對特定輸入x的計算。在實施例以存儲在區(qū)塊鏈上并由多方(例如,驗證者節(jié)點260)驗證,而無需工作者節(jié)點250分別與多方進行交互。以這種方式,驗證者節(jié)點260可以使用公共驗證密鑰VK和證明[0076]可驗證的計算是一種允許生成計算證明的技術(shù)。在實施例中,客戶端利用這種技術(shù)來將評估有關(guān)輸入x的函數(shù)f外包給另一計算實體(本文中稱為工作者)。在某些情況下,客戶端在計算上受到限制,因此客戶端執(zhí)行函數(shù)的評估是不可行的(例如,使用客戶端可用的計算資源進行計算的預(yù)期運行時間超過了最大可接受閾值),盡管事實不一定如此,但是通常來講,客戶端可以基于任何適當(dāng)?shù)臏?zhǔn)則(例如,計算運行時間、計算成本(例如,分配計算資源以執(zhí)行函數(shù)的評估的財務(wù)成本)等等)來委托有關(guān)輸入x的函數(shù)f的評估。[0077]在實施例中,工作者是任何合適的計算實體,例如本公開的其他地方更詳細描述的區(qū)塊鏈節(jié)點。在實施例中,工作者(例如,區(qū)塊鏈節(jié)點)評估有關(guān)輸入x的函數(shù)f并生成輸出y和輸出y的正確性的證明π,該證明π可由其他計算實體(例如,如上所述的客戶端和/或區(qū)塊鏈網(wǎng)絡(luò)的其他節(jié)點)驗證。與進行實際計算相比,證明(其也可以稱為論據(jù))可以被更快地驗證一因此,通過驗證證明的正確性而不是重新計算輸入X上的函數(shù)f以確定上述工作者生成的輸出的正確性,可以減少計算開銷(例如,減少功率開銷以及與向計算資源供電和運行計算資源相關(guān)聯(lián)的成本)。在零知識可驗證的計算中,工作者向客戶端提供鑒證(attestation):該工作者知道具有特定性質(zhì)的輸入。[0078]知識的零知識證明的有效變型是zk-SNARK(簡潔的非交互式知識論證)。在實施例中,所有基于配對的zkSNARK都包括以下過程:工作者使用通用的組運算來計算多個組元素(groupelement),并且驗證者使用多個配對乘積等式來檢查證明。在實施例中,線性交互式證明在有限字段上起作用,并且工作者的消息和驗證者的消息包括、編碼、參考或另外包括可用于確定字段元素的矢量的信息。[0079]在實施例中,本文描述的系統(tǒng)和方法允許區(qū)塊鏈的節(jié)點(例如,挖掘節(jié)點)執(zhí)行一次計算(例如,評估有關(guān)輸入x的函數(shù)f),并生成可用于驗證輸出的正確性的證明,其中評估證明的正確性在計算上比評估函數(shù)便宜。在這種背景下,運算和任務(wù)的成本(即,多昂貴)可以指執(zhí)行運算或任務(wù)的計算復(fù)雜性。在實施例中,計算復(fù)雜度是指執(zhí)行排序算法的平均計算成本或最壞情況的計算成本一例如,堆排序算法和快速排序算法二者均具有0(nlogn)的平均計算成本,但是快速排序的最壞情況計算成本為0(n2),而堆排序的最壞情況計算成本為0(nlogn)。在實施例中,與評估證明的正確性相比,評估有關(guān)輸入x的函數(shù)f的平均計算成本和/或最壞情況的計算成本更差。因此,本文描述的系統(tǒng)和方法的使用是高度有利的,并且例如可以允許運行更多計算上昂貴的合約,因為這樣的合約不會按比例增加驗證區(qū)塊鏈所需的時間。進一步的優(yōu)點可以包括減少驗證者系統(tǒng)的功率消耗,從而提高驗證者計算機系統(tǒng)的效率,并減少在評估證明的正確性時與運行這種驗證者計算機系統(tǒng)相關(guān)聯(lián)的能源成本。[0080]在實施例中,驗證密鑰V或其一部分可以從公共參數(shù)以及輸入/輸出數(shù)據(jù)中提取,該公共參數(shù)是在零知識協(xié)議的設(shè)置階段中生成的并與證明π一起使用,該輸入/輸出數(shù)據(jù)用來驗證工作者提供的所謂的正確性計算的證明。例如,如以上和以下更詳細地描述的,允許鎖定腳本的系統(tǒng)和方法防止驗證密鑰V被更改并檢查證明π的有效性,從而允許在交易驗證期間在區(qū)塊鏈上執(zhí)行零知識協(xié)議。因此,本公開提出了使用區(qū)塊鏈腳本來執(zhí)行驗證階段的系統(tǒng)和方法,該區(qū)塊鏈腳本用于存儲在計算的驗證中使用的元素。[0081]圖3示出了根據(jù)本公開實施例的從領(lǐng)域?qū)S谜Z言(DSL)碼到二次算術(shù)程序(QAP)的工作流程的示例300。具體而言,圖3描繪了由轉(zhuǎn)換器304轉(zhuǎn)換為GPL碼306的DSL碼302.GPL預(yù)編譯器308(也稱為預(yù)處理器)合并由GPL碼306引用的外部庫310,以產(chǎn)生GPL預(yù)處理的碼312.GPL預(yù)處理的碼312被轉(zhuǎn)換為算術(shù)電路314,該算術(shù)電路314被優(yōu)化以產(chǎn)生簡化的算術(shù)電路316,該簡化的算術(shù)電路316被壓縮以產(chǎn)生從其導(dǎo)出QAP多項式318的串行化電路320。[0082]在實施例中,領(lǐng)域?qū)S谜Z言(DSL)碼302是用具有精確語義的形式語言編寫的應(yīng)用程序。在實施例中,DSL碼302包括條件集合,并且DSL碼302的結(jié)果取決于該條件集合的履行。應(yīng)用程序(例如,智能合約)的示例是保險合約,該保險合約以被保險人的保險費和保險人對被保險人的潛在補償作為輸入。如果被保險人在智能合約期內(nèi)遭受損失(例如,履行第一條件),則智能合約的執(zhí)行會將保險費分配給保險人,并將針對該損失的賠償分配給被保險人。另一方面,如果被保險人在智能合約期內(nèi)沒有遭受損失,則智能合約的執(zhí)行會將保險費分配給保險人,并將潛在的賠償返還給保險人。[0083]在實施例中,轉(zhuǎn)換器304是軟件程序,該軟件程序由于執(zhí)行而接收條件的集合(例碼306是GPL程序(例如,C++程序),其包含DSL碼302中限定的碼。在一些示例中,與DSL相比,通用編程語言或“通用語言”(GPL)廣泛適用。通用編程語言的示例包括Ada、ALGOL、匯編語Swift和Tcl。在本公開的實施例中可能被引用的C++是具有命令式、面向?qū)ο蟮暮屯ㄓ镁幊烫卣鞯耐ㄓ镁幊陶Z言,同時還提供了用于低級存儲器操縱的設(shè)施。應(yīng)注意,在圖3的背景下,“碼”基于所描述的上下文可替代地指代可執(zhí)行碼(例如,任一個或其組合。[0084]在實施例中,GPL預(yù)編譯器308是計算機可執(zhí)行程序,其處理GPL碼306和所需的外部庫310以產(chǎn)生獨立的GPL預(yù)處理的碼312。在實施例中,GPL預(yù)編譯器308評估常數(shù)表達式,并且登記在GPL碼306中找到的符號。器(container)、值和/或變量類型的集合。例如,通過調(diào)用外部庫310,GPL碼306獲得[0086]在實施例中,GPL預(yù)處理的碼312包括表達式和運算符的集合。運算符可以包括算術(shù)運算符(例如,加法(+)、乘法(*)等)、比較運算符(例如,小于(<)、等于(==)、大于或等于(>=)等)、條件語句(例如,如果-則(?,:))或邏輯運算符(例如,與(&&)、或(|I)、非(!)、異或(田)等)。在一些實施例中,主函數(shù)被產(chǎn)生為具有預(yù)定名稱和格式。門(+)或乘法門(×)。在實施例中,每個門(節(jié)點)的出度(out-degree)為1,因此基本圖(underlyinggraph)是有向樹。在實施例中,算術(shù)電路314具有兩個復(fù)雜度的量度:大小和術(shù)電路的“深度”基于算術(shù)電路內(nèi)的最長有向[0088]在實施例中,簡化的算術(shù)電路316是簡化或最小化的有向無環(huán)圖(DAG),其可以用于在給定的輸入集合的情況下確定條件集合(例如,在DSL碼302中指定的那些)的結(jié)果。在一些實施例中,簡化的算術(shù)電路316是最小化(即,減小到最小程度)的算術(shù)電路。在一些實施例中,最優(yōu)算術(shù)電路可能不一定是最小算術(shù)電路(例如,取決于電路中算術(shù)運算的數(shù)量和類型,某些較大的算術(shù)電路可以比較大的算術(shù)電路更快地被評估),并且在這樣的實施例中,簡化的算術(shù)電路316是優(yōu)化的(例如,對于最大速度、更少的存儲器使用、最有效的處理器利用等),但不一定是最小化的算術(shù)電路??梢允褂糜鴮@暾?zhí)朑B1718505.9中描述的技術(shù)來生成簡化的算術(shù)電路316。[0089]諸如簡化的算術(shù)電路316之類的算術(shù)電路可以根據(jù)本文所述的技術(shù)來壓縮,以生成串行化電路320。串行化電路320可以在需要被存儲和檢索的碼模板或標(biāo)準(zhǔn)應(yīng)用程序的情況下使用。通過利用串行化電路320,各方可以避免在每次創(chuàng)建新應(yīng)用程序時從GPL創(chuàng)建電路實例的需要,從而提高了協(xié)議的效率,在該協(xié)議中,客戶端和證明者再使用某些碼模板或其一部分。可以使用對數(shù)據(jù)結(jié)構(gòu)中最頻繁的元素(例如,算術(shù)運算符類型)進行熵編碼來生成串行化電路320。用于解串行化和解壓縮的指令(例如,用于將串行化的碼映射到源符號的碼本)可以被嵌入串行化的比特流中,該串行化的比特流使得串行化電路的接收者能夠重構(gòu)源電路。[0090]在實施例中,QAP多項式318是以數(shù)學(xué)公式表示的包括變量和系數(shù)的一個或多個表達式,該數(shù)學(xué)公式提供了對原始算術(shù)電路(例如,圖3的算術(shù)電路314)的完整描述。在實施例中,QAP多項式的多項式是根據(jù)它們在算術(shù)電路的根部處的評估來限定的,例如在以下文獻withoutPCPs(二次張成程序和沒有PCP的簡潔NIZK)(2013)。在實施例中,QAP多項式被編碼到區(qū)塊鏈交易的鎖定腳本中,作為智能合約的表示。在實施例中,鎖定腳本在執(zhí)行時接收參數(shù)值的集合(例如,作為執(zhí)行鎖定腳本的結(jié)果),這些參數(shù)值作為變量被輸入到QAP多項式中以導(dǎo)致確定智能合約的結(jié)果。[0091]在實施例中,GPL預(yù)編譯器308產(chǎn)生GPL預(yù)處理的碼312,其可以是包括算術(shù)門的算術(shù)電路。但是,請注意,由于條件和流控制語句的原因,復(fù)雜的算術(shù)電路也嵌入了邏輯子模[0092]圖4示出了根據(jù)本公開的實施例的可視化符號序列的算術(shù)編碼的圖400。在實施例中,可以結(jié)合圖4所示的圖來執(zhí)行用于生成針對符號序列的算術(shù)編碼的過程。算術(shù)編碼是在無損數(shù)據(jù)壓縮中使用的一種類型的熵編碼。符號集通常使用每個符號的固定數(shù)目的比特表示,如在ASCII碼中那樣,并且經(jīng)常使用的符號可以用較少的比特存儲。與霍夫曼編碼不同,算術(shù)編碼將整個消息編碼為任意精度范圍(x,y),例如,介于零和一之間的范圍(0≤x<y<[0093]例如,圖4示出了符號序列{a?,a?,a?}的算術(shù)編碼,可以使用任意精度范圍對其進行編碼。在實施例中,符號被編碼在0和1之間的范圍內(nèi)(例如,包括端點和/或不包括端點)。在實施例中,符號被編碼在0和2"之間的范圍內(nèi),包括端點和/或不包括端點。根據(jù)圖4,示例[0095]在各種實施例中,對于來自字母表A的、尺寸為n的、具有概率p的任意給定符號集每個步驟處,可以使用當(dāng)前區(qū)間(interval)[x,y;]和當(dāng)前的概率p3對新符號進行編碼(如的概率成比例的當(dāng)前區(qū)間的一部分。具有概率p3(a)的輸入符號a的子區(qū)間變?yōu)楦碌膮^(qū)[0101]此外,應(yīng)注意,圖4中所示的區(qū)間或值范圍不一定按比例,圖4也不暗示某些區(qū)間與入值(roundingvalue)而與某一精度閾值成比例)。在實施例中,在步驟j+1處符號的概率十進制小數(shù)二進制小數(shù)0.1010011001100110011001100[0104]因此,在實施例中,利用技術(shù)來減少(或最小化)用于編碼符號二進制區(qū)間(ψ=8)編碼范圍低熵(p?=0.95,p?=0.05)的符號{0,1}。盡管霍夫曼編碼為每個值分配1比特位,從而產(chǎn)生的碼的長度與輸入相同,但是算術(shù)編碼接近最佳壓縮率:[0114]圖5示出了根據(jù)本公開的實施例的用于使用算術(shù)編碼來壓縮算術(shù)電路的過程500的說明性示例??梢愿鶕?jù)結(jié)合圖4描述的技術(shù)來執(zhí)行過程500中的一些或全部(或本文描述的任何其他過程,或它們的變型和/或組合)。過程500說明了可以被實現(xiàn)以從算術(shù)電路生成串行化電路步驟。使用本文所述的算術(shù)編碼技術(shù)對算術(shù)電路進行串行化的結(jié)果是,可以存儲算術(shù)電路的壓縮表示而不是存儲算術(shù)電路一例如,在實施例中,將串行化電路廣播到區(qū)塊鏈網(wǎng)絡(luò)的節(jié)點,而不是將算術(shù)電路廣播到區(qū)塊鏈網(wǎng)絡(luò)的節(jié)點,從而減少了對區(qū)塊鏈網(wǎng)絡(luò)的節(jié)點(例如,保留區(qū)塊鏈賬本的副本的那些節(jié)點)的數(shù)據(jù)存儲需求。[0115]在實施例中,系統(tǒng)獲得算術(shù)電路(例如,在數(shù)據(jù)文件中表示為行碼)并解析該算術(shù)電路以標(biāo)識運算符和作為運算符的輸入和/或輸出的線標(biāo)識符。在實施例中,運算符和標(biāo)識符被推入并存儲在不同的數(shù)據(jù)結(jié)構(gòu)中。如上所述,圖5所示的過程500可以適合于對不同類型的電路數(shù)據(jù)進行編碼。在實施例中,針對運算符和標(biāo)識符(例如,輸入標(biāo)識符)分別執(zhí)行過程500。[0116]在實施例中,系統(tǒng)獲得502表示智能合約的算術(shù)電路的最前面的(first)一個或多個符號。在某些情況下,該過程涉及一次選擇一個符號并將單個符號映射到一個范圍,而在其他情況下,則收集多個符號并將該多個符號共同映射到特定的區(qū)間范圍。在實施例中,符[0117]在實施例中,系統(tǒng)獲得504符號到區(qū)間范圍的子范圍的映射。初始區(qū)間范圍可以跨越全局最小值和全局最大值(例如,所有編碼符號都落在全局最小值/最大值之內(nèi))。除非另有說明,否則本文上面和下面結(jié)合圖5所描述的端點可以是包括在內(nèi)的或者是不包括在內(nèi)的(例如,范圍可以包括下界并且不包括上界)。在實施例中,全局最小值是0(包括),而全局最大值是1(不包括),以使得值的整個范圍可以由具有小于1的值的二進制小數(shù)來表示。映射可以參考映射表,該映射表將初始區(qū)間范圍劃分為不重疊的子范圍的集合,以使這些子范圍共同覆蓋整個初始區(qū)間范圍。在實施例中,每一個子范圍被映射到符號或符號集。在實施例中,系統(tǒng)基于映射和前面的一個或多個符號來確定506下一區(qū)間范圍。在實施例中,該系統(tǒng)通過找到對應(yīng)于前面的一個或多個符號的映射表條目來進行確定,并選擇與前面的一個或多個符號相對應(yīng)的子范圍作為下一區(qū)間范圍。在實施例中,如果映射失敗(例如,沒有對于前面的一個或多個符號的映射表條目),則該過程以錯誤提前終止。例如,如果全局范圍是(0,1),則對于符號集可能存在以下映射表:否存在更多要編碼的符號。在實施例中,通過確定數(shù)據(jù)結(jié)構(gòu)中是否存在附加符號來進行確定(例如,在從數(shù)據(jù)結(jié)構(gòu)彈出前面的一個或多個符號之后)。如果存在附加符號,則在實施例中,系統(tǒng)獲得符號到先前確定的子范圍的映射。在實施例中,子范圍與先前的范圍成比例地[0121]在實施例中,系統(tǒng)使用該第二映射來為一個或多個符號的第止經(jīng)過處理的符號相對應(yīng)的區(qū)間范圍。在實施例中,重復(fù)這些步驟,直到不再剩余符號為止(存儲符號的數(shù)據(jù)結(jié)構(gòu)為空,到達文件末尾等),使得最后的子范圍被保留并用于對值進行編碼。例如,繼續(xù)前面的示例,如果整個符號集是a?a?,則最后的區(qū)間范圍是(0.7,0.8)。因此,在該示例中,可以使用介于0.7(包含在內(nèi))和0.8(不包含在內(nèi))之間的任何二進制十進制值來表示符號a?a?。[0122]一旦獲得最后的區(qū)間范圍,系統(tǒng)就使用最后的區(qū)間范圍內(nèi)的值對符號進行編碼512。區(qū)間范圍內(nèi)的任何值都適用于對符號進行編碼一例如,繼續(xù)前面的示例,用于對a?a?進行編碼的有效值的示例包括:0.7、0.75和0.7979。用于對a?a?進行編碼的無效值的示例包括:0.6969、0.8。由于可能存在用于對符號集進行編碼的多個合適的值,因此可以選擇具有較少比特位的二進制表示來最大化壓縮因子。[0123]在實施例中,運算符和/或線標(biāo)識符(或其一部分)可以如根據(jù)圖5所描述的那樣被串行化。結(jié)果得到的串行化電路可以被存儲514在例如區(qū)塊鏈賬本上,而不是算術(shù)電路被存儲在例如區(qū)塊鏈賬本上,從而減少了對表示的智能合約進行編碼的存儲需求。[0124]在實施例中,圖6示出了根據(jù)至少一個實施例的可以實現(xiàn)對基于算術(shù)編碼的壓縮性質(zhì)的算術(shù)電路的串行化的各種方案的圖600。在實施例中,串行化過程由提供逐位運算的緩沖器(在圖6中稱為位緩沖器(bitbuffer))來管理。在實施例中,在數(shù)據(jù)被轉(zhuǎn)移到永久存儲支持件或通過網(wǎng)絡(luò)發(fā)送之前位緩沖器臨時存儲該數(shù)據(jù)。如圖6所示,可使用(至少)以下方法來訪問緩沖器:put()函數(shù),其用于將輸入數(shù)據(jù)x插入緩沖器中,特位來存儲x;send()函數(shù),其用于沖刷緩沖器并將數(shù)據(jù)轉(zhuǎn)移到輸出流out。[0125]用作抽象層的一個或多個接口可以被提供給類型化的運算(typedoperation)。在實施例中,低級方法put()可以由諸如writeInt()、writeUint()和writeStr()之類的不同的高級方法調(diào)用,這些高級方法可以被利用來分別寫入(例如,寫入到緩沖器)整數(shù)、無符號整數(shù)和字符串。[0126]在實施例中,由諸如scan()之類的函數(shù)來提供第三抽象層,該函數(shù)逐行從輸入(例如,圖6中示出的輸入文件602)讀取數(shù)據(jù)并調(diào)用底層(underlying)方法來寫入類型化的數(shù)據(jù)。在實施例中,圖6所示的scan()函數(shù)對應(yīng)于以下例程:該例程如果被調(diào)用,則檢查文件中的每個命令是否可以被映射到底層方法中的一個。在實施例中,映射中的錯誤(例如,由于檢測到無法識別的命令、不正確的簽名格式、不正確的(例如,不推薦使用的)函數(shù)版本等而導(dǎo)致的)會引起整個編碼過程的失敗。[0127]在實施例中,最高抽象層的serialise()函數(shù)從包括電路信息的輸入文件中讀取壓縮的信息并將壓縮的信息發(fā)送到輸出流。在實施例中,輸出流是文件或網(wǎng)絡(luò)資源。[0128]在實施例中,包括電路的文件的行具有以下格式,其中P是用于運算符OP的參數(shù)的數(shù)量。在實施例中,運算符需要特定數(shù)量的參數(shù)。在實施例中,參入?yún)?shù))、出參數(shù)(輸出參數(shù))、入出參數(shù)(向運算提供輸入值并用作運算的存儲結(jié)果的參數(shù))等等。在實施例中,單獨的數(shù)據(jù)結(jié)構(gòu)被用于壓縮運算符和參數(shù)。在實施例中,不同的壓縮技術(shù)被用于不同的數(shù)據(jù)結(jié)構(gòu)。在實施例中,可以使用任何適當(dāng)?shù)臄?shù)據(jù)(例如隊列、堆棧、向量等)來實現(xiàn)數(shù)據(jù)結(jié)構(gòu)。在實施例中,要求運算符隊列中的運算符具有固定數(shù)量的參數(shù)和/或固定大小的參數(shù)(例如,不支持可變長度的數(shù)據(jù)大對象(blobs))。例如,存儲在數(shù)據(jù)結(jié)構(gòu)上的“加法(ADD)”運算可能恰好需要兩個輸入?yún)?shù)和一個輸出參數(shù)。應(yīng)該注意的是,存儲在隊列中的運算可能與較高抽象級別的那些不同,例如,并且一般來說,可以對任意數(shù)量的輸入?yún)?shù)進行加法運算(例如,a+b+c+...)。在實施例中,數(shù)據(jù)結(jié)構(gòu)具有運算的多個變型以適應(yīng)不同的函數(shù)簽名一例如,數(shù)據(jù)結(jié)構(gòu)可以支持“加法2(ADD2)”運算和“加法3(ADD3)”運算,該針對三個輸入之和的輸出參數(shù),依此類推。因此,在實施例中,可以使用具有固定數(shù)目的輸入的多個加法運算將任意數(shù)目的輸入的求和鏈接在一起。[0129]在實施例中,可以將具有動態(tài)(例如,可變)尺寸的數(shù)據(jù)字段嵌入串行化分組中。作為說明性示例,考慮將具有相同尺寸(16比特位)的4個壓縮的數(shù)據(jù)塊[data?,data?,data?,data?]串行化的情況。在實施例中,可以使用以下編碼方案來壓縮數(shù)據(jù)塊:具有恒定尺寸的第一字段,其包括為有效載荷中的數(shù)據(jù)分組的數(shù)量保留的字段的尺寸(例如,以比特位為單位);具有恒定尺寸(例如,與第一字段相同或不同的尺寸)的第二字段,其包括為有效載荷中的數(shù)據(jù)分組保留的字段的以比特位為單位的尺寸;第三字段,其包括有效載荷中的數(shù)據(jù)分組的數(shù)量;其余字段,其包括數(shù)據(jù)分組。這僅僅是關(guān)于如何嵌入動態(tài)數(shù)據(jù)字段的說明性示例。在實施例中,以嵌套和/或順序模式,第一數(shù)據(jù)字段對跟隨在第一數(shù)據(jù)字段之后的第一數(shù)據(jù)結(jié)構(gòu)的尺寸進行編碼,其中,該數(shù)據(jù)結(jié)構(gòu)又可以包括第二數(shù)據(jù)字段,其對在第二數(shù)據(jù)字段之后的第二數(shù)據(jù)結(jié)構(gòu)的尺寸進行編碼,以此類推。[0130]在實施例中,串行化電路的頭部包括一個或多個經(jīng)編碼的字段,諸如下面詳細描述的那些。在實施例中,版本字段提供關(guān)于如何解釋和/或構(gòu)建頭部的其余部分的信息,并且可以具有固定尺寸(例如,1字節(jié))。在實施例中,頭部包括參數(shù)M,該參數(shù)指示用于運算的符號的數(shù)量。在實施例中,使用固定數(shù)量的比特位來編碼該參數(shù),該固定數(shù)量的比特位是基于由串行化電路支持的最大數(shù)量的運算符確定的。在實施例中,例如通過使用硬編碼的比特位的數(shù)量來對輸入線的數(shù)量(IN)、輸出線的數(shù)量(OUT)、線標(biāo)識符的編碼的尺寸(n)和參的是,頭部不必一定位于串行化電路數(shù)據(jù)文件的開頭或頭部處。在實施例中,頭部僅需要位于串行化電路中的與頭部信息有關(guān)的數(shù)據(jù)之前的某個點處一例如,如果頭部包括用于線總數(shù)N的參數(shù),則在實施例中,頭部信息N在串行化電路中的任何合適的點處被編碼,使得它在對線標(biāo)識符進行編碼的數(shù)據(jù)之前被讀取。[0131]在實施例中,頭部包括嵌入式字典。在實施例中,首先添加對于霍夫曼編碼的符號的最大編碼尺寸,然后使用各對(符號尺寸、符號)的第一元素的最大編碼尺寸來添加每一對。在使用算術(shù)編碼的實施例中,nparam是頭部的可選參數(shù)(例如,可以被省略)。在實施例中,可以直接對各個符號概率(使用編碼尺寸可以使用乘法系數(shù)來表示整個集合。例如,考慮使用4個符號并具有以下概率的情況:p?=0.1、p?=0.4、p?=0.1、p?=0.4,則可以使用乘法系數(shù)來表示整個集合[1,4,1,4]。在實施例中,這些系數(shù)被單獨編碼(例如,使用編碼尺寸ncoefe)或被表示為具有唯一標(biāo)識符的方案模板(例如,使用編碼尺寸npi)。在實施例中,頭部還對nprob和/或?qū)⒎栍成涞綐?biāo)識符的表進行編碼。[0132]在實施例中,算術(shù)編碼根據(jù)頭部中編碼的概率來使用值的范圍以表示運算符序列。在實施例中,可以如本公開的其他地方所描述的那樣,例如結(jié)合與圖4相關(guān)聯(lián)的描述來計算編碼范圍的精度。在實施例中,例如使用霍夫曼編碼的那些,與運算符相對應(yīng)的每個壓縮的符號被順序地添加到有效載荷中。[0133]在實施例中,諸如在使用霍夫曼編碼的情況下,每個線標(biāo)識符被順序地添加到有效載荷。在實施例中,可以利用不同的策略來使用算術(shù)編碼對線標(biāo)識符進行編碼,例如以下的聚合(例如,如以下結(jié)合圖8更詳細描述的)。[0134]圖7示出了根據(jù)實施例的用于使用緩沖器來管理算術(shù)電路的串行化的過程700的說明性示例??梢愿鶕?jù)結(jié)合圖5和圖6描述的技術(shù)來執(zhí)行過程700中的一些或全部(或本文描述的任何其他過程、或其變型和/或組合)。[0135]在實施例中,使用接口的集合來管理串行化過程700,該接口的集合在不同運算和運算類型之間提供抽象層。在實施例中,在第一抽象層,執(zhí)行過程700的計算機系統(tǒng)接收702對表示智能合約的算術(shù)電路進行串行化的命令。在實施例中,該命令是應(yīng)用程序編程接口 (API)命令,其包括對數(shù)據(jù)文件的引用,該數(shù)據(jù)文件包括要串行化的算術(shù)電路。在實施例中,數(shù)據(jù)文件是未壓縮的數(shù)據(jù)文件(例如,未使用算術(shù)編碼技術(shù)壓縮的)。在實施例中,該命令還標(biāo)識用于存儲算術(shù)電路的串行化結(jié)果的輸出流。[0136]在實施例中,用具有精確語義的領(lǐng)域?qū)S谜Z言(DSL)代碼編寫智能合約一在實施例中,智能合約包括條件集合和一個或多個結(jié)果,其履行至少部分取決于基于一個或多個輸入而對條件集合進行的評估。在實施例中,DSL代碼被轉(zhuǎn)換成通用語言(GPL)代碼。通用語編譯器使用外部庫來處理GPL代碼以產(chǎn)生獨立的GPL預(yù)處理的智能合約。在實施例中,通過利用連接到基本算術(shù)門的線表示符號來構(gòu)建算術(shù)電路。[0137]在實施例中,系統(tǒng)掃描704包括算術(shù)電路的輸入文件的第一行。在實施例中,讀取的輸入文件的每一行對應(yīng)于一個命令,該命令可以對應(yīng)于一個或多個可執(zhí)行指令(例如,匯編指令)。在實施例中,掃描文件包括從文件的第一行或下一行獲得命令,并將該命令映射到底層方法。在實施例中,系統(tǒng)通過確定706與命令相關(guān)聯(lián)的類型化的運算來確定映射。在實施例中,所支持的不同類型的數(shù)據(jù)包括:整數(shù)、無符號殊字符結(jié)尾的字符數(shù)組)。[0138]在實施例中,取決于編碼器的特定設(shè)置,可以使用不同數(shù)量的比特位來編碼708不數(shù)據(jù)和線標(biāo)識符數(shù)據(jù)的編碼可以各自利用諸如算術(shù)編碼技術(shù)之類的不同技術(shù)來進行數(shù)據(jù)編碼。不同的編碼技術(shù)可用于不同類型化的運算。在實施例中,一旦數(shù)據(jù)已經(jīng)被編碼,數(shù)據(jù)就被插入到緩沖器中。在實施例中,用于將數(shù)據(jù)插入710到緩沖器的命令是將數(shù)據(jù)的特定數(shù)量的比特位寫入到輸出流的命令。然后,系統(tǒng)可以確定712是否已經(jīng)到達文件的結(jié)尾(例如,通過檢測是否已經(jīng)到達特定文件結(jié)尾的比特或字符序列)。在實施例中,如果存在要處理的文件的更多命令,則系統(tǒng)順序地掃描文件以獲得文件的第二行、第三行、第四行等,并根據(jù)上述步驟704-710對其進行處理。可以重復(fù)這些步驟,直到檢測到文件的末尾為止,這時系統(tǒng)可以沖刷714緩沖器并將所有數(shù)據(jù)轉(zhuǎn)移到輸出流或文件,從而生成串行化電路。[0139]圖8示出了對符號序列的多符號表示進行可視化的圖800,該符號序列利用基于算術(shù)電路的字典的性質(zhì),并且可以與本文所述的其他壓縮技術(shù)結(jié)合使用以減小存儲在計算機系統(tǒng)或計算機網(wǎng)絡(luò)上的算術(shù)電路的尺寸。[0140]在實施例中,字典的尺寸是受限的(例如,由于可用計算資源的限制),并且符號的出現(xiàn)是相關(guān)的(例如,缺乏獨立的概率性質(zhì))。因此,在實施例中,用于壓縮的算術(shù)范圍包括[0141]作為說明性示例,考慮以下電路或電路的一部分(例如,子電路),其中,每個運算的前兩個參數(shù)是輸入標(biāo)識符,并且最后的參數(shù)是輸出標(biāo)識符:[0145]在實施例中,數(shù)據(jù)可以被壓縮的程度受到各種因素影響,例如字典尺寸是否受到限制和/或字典尺寸受到何種程度的限制(概率范圍碎片不便于小數(shù)的二進制表示的優(yōu)化);是否對原語進行單獨編碼(分配給聚合符號的概率范圍);提供最小數(shù)量的聚合符號(較少的聚合符號與更有效的概率范圍分配相關(guān))。在實施例中,可以基于所有算術(shù)運算具有相同數(shù)量的輸入(例如,α)的假設(shè)來確定對壓縮性能的估計。在實施例中,建立在N個原語運算符上的聚合符號OP以比對應(yīng)的原語運算符慢N倍的平均速率為壓縮的輸出流生成新的比特。此外,可以抽出(spare)N-1個輸入標(biāo)識符。如果用于運算和標(biāo)識為sizeops+sizeps,則最佳壓縮方式如下給出:[0147]聚合符號的概率范圍可以固定,或者也可以根據(jù)之前的符號自動調(diào)整。在固定概率的情況下,我們?yōu)榉栃蛄衶s?,S?,…s}限定以下聚合概率P(s?,S?,…s[0149]要注意的,β個連續(xù)符號的β!(即,β的階乘(factorial))個不同置換(permutation)是可用的(請注意,符號序列可能包含一個或多個符號的重復(fù))。由于乘法的可交換性質(zhì),每個置換通過相同的聚合符號概率來表征。[0150]在實施例中,根據(jù)輸入流的內(nèi)容,在編碼階段期間動態(tài)地修改符號深度β。在實施例中,多個發(fā)出符號(emittedsymbol)N*被用于確立何時執(zhí)行新的范圍分配。在實施例中,限定的n*個多符號范圍的每一個限定不同的聚合符號深度(1≤i≤n*),如圖9所示。在實被表示為前一步驟βj-1(s)與前j-2個步驟中的平均符號深度之間的加權(quán)和的最接近的整聚合符號組合0123……[0159]圖10示出了圖1000,在其中使用算術(shù)編碼技術(shù)壓縮算術(shù)電路1002以聚合標(biāo)識符,編碼是一種無損壓縮,其如果被應(yīng)用于算術(shù)電路1002,則通過應(yīng)用無損解壓縮例程來產(chǎn)生可以完美地再現(xiàn)(例如,逐位精度)算術(shù)電路1002的結(jié)果(即,串行化電路1004)。[0160]在實施例中,基于數(shù)據(jù)如何產(chǎn)生、符號的尺寸或其組合來確定是否利用熵方案來對電路或電路的一部分進行編碼(例如,是否對標(biāo)識符進行編碼、是否對運算符進行編碼)。例如,在一些實施例中,由于標(biāo)識符生成的隨機性和/或符號的尺寸,所以不使用熵方案來對標(biāo)識符進行編碼。一般而言,較大的電路具有更多的標(biāo)識符,從而增加了符號的尺寸。[0161]在實施例中,標(biāo)識符的聚合可以利用標(biāo)識符的局部性作為壓縮方案的一部分,這可以適合于基于數(shù)據(jù)局部性來使用,也就是說,在電路的相同部分中使用的標(biāo)識符傾向于具有相似的值。應(yīng)當(dāng)注意,并非所有電路都如此,并且標(biāo)識符的聚合可以基于對是否執(zhí)行下面更詳細描述的聚合技術(shù)所做的確定來執(zhí)行(例如,在串行化之前對電路的分析)。[0162]作為聚合技術(shù)的一部分,對兩個標(biāo)識符而非絕對值之間的差進行編碼。在實施例中,該方案應(yīng)用于輸入標(biāo)識符,而不應(yīng)用于輸出標(biāo)識符。在實施例中,輸出標(biāo)識符是增量的(incremental),并且在編碼過程中不是必需的,并且可以基于操作被串行化的順序來移除和重建輸出標(biāo)識符。[0165]標(biāo)識符可以被如下編碼:[0167]第一輸入(4)通常被

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論