TWI730654B - 部署和執行智能合約的方法及裝置 - Google Patents
部署和執行智能合約的方法及裝置 Download PDFInfo
- Publication number
- TWI730654B TWI730654B TW109107265A TW109107265A TWI730654B TW I730654 B TWI730654 B TW I730654B TW 109107265 A TW109107265 A TW 109107265A TW 109107265 A TW109107265 A TW 109107265A TW I730654 B TWI730654 B TW I730654B
- Authority
- TW
- Taiwan
- Prior art keywords
- function
- index table
- contract
- internal memory
- code
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Business, Economics & Management (AREA)
- Finance (AREA)
- General Physics & Mathematics (AREA)
- Accounting & Taxation (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- General Business, Economics & Management (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本說明書實施例提供一種部署和執行智能合約的方法和裝置,根據實施例的方法,在部署智能合約的階段,獲取該合約對應的合約模組中包含的位元組碼;然後將位元組碼解析處理為可執行的指令代碼,並將其儲存在內部記憶體中。進一步的,針對位元組碼中的導入和導出函數,確定函數索引表,該函數索引表用於指示各個導入和導出函數對應的指令代碼的內部記憶體位址;並在內部記憶體中暫存該函數索引表。在智能合約執行階段,可以直接基於內部記憶體中儲存的可執行指令代碼和函數索引表,執行智能合約的呼叫函數。
Description
本說明書一個或多個實施例涉及區塊鏈技術領域,尤其涉及在區塊鏈中部署和執行智能合約的方法及裝置。
目前,越來越多的區塊鏈平台支持智能合約,來執行更為豐富的交易。智能合約是一種可以自動執行的交易合約,它以數位化的形式寫入區塊鏈中,由區塊鏈技術的特性保障儲存、讀取、執行整個過程透明可跟蹤、不可竄改。同時,由區塊鏈自帶的共識演算法構建出一套狀態機系統,使得智能合約能夠高效地運行。例如,以太坊提供了一種開源的區塊鏈底層系統,通過提供諸多介面,允許開發人員在此基礎上開發各種區塊鏈應用,編寫智能合約。
如此,區塊鏈平台允許用戶進行內容更加豐富的交易,從而提供更加豐富的功能。相應的,越來越多的資料儲存、程式應用(例如分布式應用Dapp),通過區塊鏈實現。相應地,在區塊鏈的各個節點中提供有虛擬機,用於執行區塊鏈中的智能合約,並通過共識機制,保證各個節點中的虛擬機具有相同的執行狀態和執行結果。因此,智能合約的執行效率,成為區塊鏈平台的主要性能指標。
因此,希望提供有效的方案,提高區塊鏈中智能合約的執行效率,改進區塊鏈平台的性能。
本說明書一個或多個實施例描述了一種部署和執行智能合約的方法和裝置,通過在部署階段對智能合約的位元組碼進行預處理,加快合約呼叫和執行階段的執行效率,提升平台性能。
根據第一方面,提供了一種部署智能合約的方法,該方法通過區塊鏈網路中任意節點中的虛擬機執行,包括:
回應於部署第一合約的請求,獲取該第一合約對應的合約模組中包含的位元組碼;
將該位元組碼解析處理為可執行的指令代碼,並將其儲存在內部記憶體中;
針對該位元組碼中的導入和導出函數,確定函數索引表,該函數索引表用於指示各個導入和導出函數對應的指令代碼的內部記憶體位址;
在內部記憶體中暫存該函數索引表。
在一個實施例中,該部署第一合約的請求為,創建第一合約的第一交易;該獲取該第一合約對應的合約模組中包含的位元組碼包括,從該第一交易的資料欄位中提取該位元組碼。
根據一種實施方式,該位元組碼通過第一編碼協議進行編碼;該第一編碼協議為可變長編碼協議;
在這樣的情況下,解析處理過程可以包括:利用與該第一編碼協議對應的解碼協議,解碼該位元組碼,將可變長指令轉換為內部記憶體對齊的定長指令。
根據一個具體實施例,該合約模組為WASM模組,該第一編碼協議為leb 128編碼協議。
在一個實施例中,在可變長編碼協議的情況下,解析處理過程還包括,根據內部記憶體對齊後的指令儲存位置,修改轉移指令中的目標位址。
在一個實施例中,上述函數索引表包括第一索引表和第二索引表,該第一索引表包括各個導入和導出函數的函數名與函數索引編碼的對應關係,該第二索引表包括該函數索引編碼與內部記憶體位址的對應關係。
根據第二方面,提供一種執行智能合約的方法,該方法通過區塊鏈網路中任意節點中的虛擬機執行,包括:
接收呼叫第一合約的交易請求,其中包括第一合約的合約位址和呼叫函數;
從內部記憶體中獲取在部署該第一合約階段暫存的該第一合約對應的指令代碼和函數索引表,該函數索引表用於指示第一合約中各個導入和導出函數對應的指令代碼的內部記憶體位址;
根據該函數索引表,確定該呼叫函數對應的內部記憶體位址;
按照所確定出的內部記憶體位址,執行其中的指令代碼。
在一個實施例中,該函數索引表包括第一索引表和第二索引表,其中第一索引表包括各個導入和導出函數的函數名與函數索引編碼的對應關係,第二索引表包括函數索引編碼與內部記憶體位址的對應關係;
在這樣的情況下,通過以下方式確定呼叫函數對應的內部記憶體位址:
基於該呼叫函數的函數名,查找第一索引表,確定出呼叫函數對應的索引編號;
利用確定出的索引編號查找第二索引表,確定出對應的內部記憶體位址。
根據第三方面,提供了一種部署智能合約的裝置,該裝置部署在區塊鏈網路任意節點的虛擬機中,該裝置包括:
位元組碼獲取單元,配置為回應於部署第一合約的請求,獲取該第一合約對應的合約模組中包含的位元組碼;
解析處理單元,配置為將該位元組碼解析處理為可執行的指令代碼,並將其儲存在內部記憶體中;
索引表確定單元,配置為針對該位元組碼中的導入和導出函數,確定函數索引表,該函數索引表用於指示各個導入和導出函數對應的指令代碼的內部記憶體位址;
索引表暫存單元,配置為在內部記憶體中暫存該函數索引表。
根據第四方面,提供了一種執行智能合約的裝置,該裝置部署在區塊鏈網路任意節點的虛擬機中,包括:
請求接收單元,配置為接收呼叫第一合約的交易請求,其中包括第一合約的合約位址和呼叫函數;
獲取單元,配置為從內部記憶體中獲取在部署該第一合約階段暫存的該第一合約對應的指令代碼和函數索引表,該函數索引表用於指示第一合約中各個導入和導出函數對應的指令代碼的內部記憶體位址;
確定單元,配置為根據該函數索引表,確定該呼叫函數對應的內部記憶體位址;
執行單元,配置為按照所確定出的內部記憶體位址,執行其中的指令代碼。
根據第五方面,提供了一種電腦可讀取儲存媒體,其上儲存有電腦程式,當該電腦程式在電腦中執行時,令電腦執行第一方面和第二方面的方法。
根據第六方面,提供了一種計算設備,包括記憶體和處理器,其特徵在於,該記憶體中儲存有可執行代碼,該處理器執行該可執行代碼時,實現第一方面和第二方面的方法。
根據本說明書一個實施例提供的方法和裝置,在智能合約部署階段,對相應的位元組碼進行預處理,該預處理包括解析解碼,以及導入導出函數的編排,從而產生運行時所需的資料結構。在呼叫智能合約時,就可以直接基於上述資料結構進行執行,不需要進行解析、解碼、目標位址修正等等操作,極大地提升執行效率。並且,許多智能合約會反復被呼叫和執行,採用上述預處理方案,可以複用部署產生的資料結構,也就是,在部署時進行一次解析,後續可以多次執行,而不必每呼叫一次智能合約就重新進行一次解析執行。如此,更進一步地提升合約執行效率,也提高區塊鏈平台的整體性能。
下面結合圖式,對本說明書提供的方案進行描述。
如本領域技術人員所知,區塊鏈網路中包含若干節點,各個節點之間可以進行通信。用戶可以借由外部帳戶通過上述節點發起交易,交易既可以是普通的轉帳交易,也可以用於創建智能合約或呼叫智能合約。
圖1是在區塊鏈網路中創建智能合約的過程示意圖。更具體的,圖1結合以太坊進行描述。假定在網路中某個節點處,Bob想要發佈這樣一段智能合約:
根據以上合約,獲取一段字元串s作為要發佈的資料postData。
Bob可以以高階語言的形式編寫上述智能合約,然後通過編譯器將高階語言編譯為位元組碼(bytecode)文件的形式,再以交易的形式,發佈該合約。具體的,Bob可以發起一筆交易,交易內容中發起方from欄位即為Bob(更具體為Bob的位址),接收方to欄位設為空值;並且,該交易內容中還包括Data欄位,其中包含將上述智能合約編譯為位元組碼之後的代碼。
在Bob把這樣一條交易發佈到區塊鏈網路之後,區塊鏈網路中的各個節點均可以獲取到上述智能合約的位元組碼,於是,上述智能合約就部署到了區塊鏈網路的各個節點中。如常規交易類似的,記帳節點會對該交易進行驗證、打包等操作,將其記錄在區塊中,並通過共識機制,添加到區塊鏈上。在這個過程中,還會根據一定演算法,例如基於發佈者位址進行雜湊等,為上述智能合約賦予一個合約位址,例如0x6f…。如此,一個智能合約對應一個合約位址,與用戶的外部帳戶位址在形式上沒有區別。
以上智能合約經過打包上鏈之後,區塊鏈網路中的任意用戶均可以呼叫該智能合約。圖2是在區塊鏈網路中呼叫圖1創建的智能合約的過程示意圖。假定區塊鏈網路中的節點Alice想要呼叫以上智能合約,那麼該節點可以發起一筆交易,進行合約呼叫。
具體而言,在交易內容中,from欄位可以是呼叫者Alice的位址,to欄位即為上述PostingData合約的合約位址0x6f…,表示該交易所呼叫的智能合約。在Data欄位,包含要呼叫的合約中的方法或函數名稱(set)和傳入的參數(“螞蟻森林,綠色公益”)。
其他節點收到這條交易後,通過以太坊虛擬機EVM執行合約邏輯對應的操作,並通過共識機制實現網路上合約狀態的改變。之後,網路中的任意節點查看這個合約的變量時,就會發現這個合約中postData的值變成了“螞蟻森林,綠色公益”。
通過以上過程可以看到,在智能合約發佈的時候,部署到各個節點的是智能合約經過編譯後的位元組碼。位元組碼是一種中間碼格式,包括一序列opcode代碼(操作碼)/資料對組成的二進制字元編碼。在有帳戶呼叫智能合約時,虛擬機就會加載並運行上述位元組碼,更具體而言,虛擬機中的解釋器對位元組碼代表的指令流進行解釋和執行,從而執行智能合約,改變合約中參數的狀態。因此,虛擬機對位元組碼文件的解釋執行效率決定了智能合約的執行效率,進而決定了區塊鏈平台的性能。
為了提高智能合約的執行效率,在本說明書的一個實施例中,在智能合約部署階段,各個節點就對合約模組文件進行預處理和解析,產生運行時所需的資料結構,並將其暫存到內部記憶體中。當需要執行該智能合約時,就可以直接從內部記憶體暫存中獲得已經經過解析的資料結構,於是可以直接基於該資料結構執行智能合約,極大加快智能合約的執行效率。下面描述以上構思的具體實現。
圖3示出根據一個實施例的部署智能合約的方法流程圖。該方法通過區塊鏈網路中任意節點中的虛擬機執行,其中區塊鏈網路可以是公有鏈、私有鏈、聯盟鏈,在此不做限制。如圖3所示,部署智能合約的方法可以包括,步驟31,回應於部署第一合約的請求,獲取該第一合約對應的合約模組中包含的位元組碼;步驟33,將位元組碼解析處理為可執行的指令代碼,並儲存在內部記憶體中;步驟35,針對位元組碼中的導入和導出函數,確定函數索引表,該函數索引表用於指示各個導入和導出函數對應的指令代碼的內部記憶體位址;步驟37,在內部記憶體中暫存該函數索引表。以下結合具體例子描述上述各個步驟的執行過程。
首先,在步驟31,回應於部署第一合約的請求,獲取該第一合約對應的合約模組中包含的位元組碼。
可以理解,上述第一合約可以是有待部署的任意內容的智能合約。一般地,該智能合約可以採用高階語言編寫,經過編譯器編譯為位元組碼。編譯器在編譯時,可以針對一個智能合約產生一個合約模組或合約文件,其中包含上述位元組碼以及相關的其他資料資訊。如前所述,位元組碼是一種介於高階語言和機器碼之間的中間碼,需要對應的虛擬機進行解析才能執行。
如圖1所示,在發佈智能合約時,將該智能合約對應的位元組碼包含在創建智能合約的交易中,傳播到區塊鏈網路的各個節點。於是,在步驟31,區塊鏈網路中各個節點接收到創建第一合約的交易,將該交易作為部署第一合約的請求,獲取第一合約對應的合約模組中包含的位元組碼。具體的,可以從創建合約的交易的data欄位,獲取到合約編譯後的位元組碼。
更具體地,在一個實施例中,步驟31中的第一合約可以採用Solidity語言編寫,並編譯為相應的位元組碼。相應的,圖3的方法通過Solidity虛擬機執行。在另一例子中,上述第一合約採用與Python類似的Serpent語言編寫,通過對應的虛擬機執行。
在一個實施例中,上述第一合約採用C/C++等高階語言編寫,並編譯為WASM位元組碼。WASM即WebAssembly,是由W3C社區組開發的開放標準,是一種新的編碼方式,它是一種低階的類匯編語言,具有緊湊的二進制格式,可以以接近原生的性能在Web上高效運行,因此,近來作為區塊鏈中智能合約的編譯目標。在這樣的情況下,智能合約可以編譯為WASM模組或WASM文件,其中包含WASM位元組碼。
在獲取到待部署的第一合約對應的位元組碼之後,在步驟33,將位元組碼處理為可執行的指令代碼,並將其儲存在內部記憶體中。具體的,在該步驟中,加載上述位元組碼,並對其進行解析、解碼,從而將其轉換為可執行的指令代碼,並且將可執行的指令代碼儲存在內部記憶體中。
在一個實施例中,可以在加載位元組碼之後,對其進行解析。或者,在另一實施例中,可以一邊加載一邊對位元組碼進行解析。解析操作可以包括,識別其中的操作碼(opcode),並獲取實現該操作碼所代表的指令操作的模擬函數或機器指令。
例如,在一個具體例子中,一個Solidity智能合約對應的位元組碼包括:60 60 60 40 52 60 04 36 10 60 3f 57 60 00 35 7c…
可以看到,這是一串十六進制數位編碼的數組,每個數組2位,占一個位元組,每個位元組表示一個操作碼(opcode)或操作資料。相應地,對於位元組碼文件,可以以位元組為單位依次進行解析,轉換為例如彙編指令操作。
具體地,對於以上的位元組碼,首先解析第一個位元組"60",從彙編指令集中查詢該值對應的指令。60對應的指令是"push",因為push指令後需要一個輸入參數,因此後面的位元組"60"是該push指令的參數,於是得到一條彙編指令“PUSH 60”(將60壓入堆疊中)。然後繼續解析第三個位元組"60"和第四個位元組,得到指令“PUSH 40”。繼續解析下一個位元組“52”,得到操作指令“MSTORE”,表示開闢內部記憶體空間,儲存之前壓入堆疊中的資料。如此依次解析,得到彙編指令。進一步地,在一個實施例中,還可以將上述彙編指令進一步轉換為機器指令。
對於解析得到的可執行代碼,為其分配內部記憶體空間,依次儲存各條指令的指令代碼。
在一個例子中,位元組碼採用可變長編碼方式進行編碼,這就使得指令為長度不一的不定長指令。例如,WASM位元組碼採用leb 128可變長編碼方式進行編碼,以減小文件體積,更好利用儲存空間。其他位元組碼也有可能採用其他編碼方式產生。
Leb 128即"Little-Endian Base 128",是對任意有符號或者無符號整型數的可變長度的編碼,因此,用Leb128編碼的整數,會根據數字的大小改變所占位元組數。根據leb 128的編碼方式,每個位元組的8位(8個bits)中,較低的7位為有效資料部分,最高位用於指示當前位元組是否為最後一個位元組,1表示最後一個位元組,0表示不是最後一個位元組,也就是需要接續後續位元組。如此,可以採用不同位元組數編碼不同大小的整數。
相應地,對於leb編碼的WASM位元組碼,在解碼資料時,先將各個位元組還原為8位,通過最高位判斷是否要接續後面的位元組,共同形成目標資料。因此,對WASM位元組碼進行解析和解碼,會得到不定長的指令。為了對這些指令進行儲存,可以將可變長指令轉換為內部記憶體對齊的定長指令。這個過程中,按照定長指令分配的內部記憶體空間需要進行調整。相應地,對於位元組碼解析得到的指令中包含目標位址的一部分轉移指令,例如跳轉指令,需要修改其目標位址。
具體地,在位元組碼解析過程中,首先按照預定默認值為每條指令分配一定內部記憶體空間,例如為m。轉移指令,例如跳轉指令Jump,呼叫指令Call,中會包含目標位址,該目標位址一般表示為相對於某條指令(一般是起始指令)儲存位置的偏移值。當由於指令的不定長而調整指令的內部記憶體儲存位置時,就可以按照調整後的內部記憶體儲存位置修改轉移指令中的目標位址。
例如,對於一段位元組碼進行解析後,得到以下指令序列:
假定第一條指令為起始指令,其內部記憶體位置記為0。之後的跳轉指令JUMP 12,表示跳轉到相對起始指令偏移12個內部記憶體單位(即大小m)處的指令。假定在該跳轉指令前,有2條指令被解碼為較長指令。在將該較長指令與內部記憶體對齊後,可以確定每個較長指令需要2個內部記憶體單位來儲存,也即將該每個較長指令轉換為與內部記憶體對其的2個定長指令,如此,所需內部記憶體發生了膨脹。那麼,可以相應地將跳轉指令的目標位址修改為14。
如此,將位元組碼解析處理為可執行的指令代碼,並儲存到內部記憶體中。
此外,在步驟35,針對位元組碼中包含的導入和導出函數,確定函數索引表,該函數索引表用於指示各個導入和導出函數對應的指令代碼的內部記憶體位址。
需要理解,智能合約中一般會包含若干導入和導出函數,其中導入函數是智能合約呼叫系統平台或第三方提供的函數庫中的函數,導出函數是智能合約提供的、作為介面供其他使用者呼叫的函數。特別是,當另一方想要呼叫智能合約時,可以通過呼叫合約中的導出函數來傳入參數。
如前所述,在一個實施例中,智能合約被編譯為WASM模組或WASM文件。WASM文件包含多個區段,其中包含有導入區段和導出區段,導入區段定義本模組從其它模組中導入的函數、表、內部記憶體、全局變量等,而導出區段定義本模組中導出的函數、表、內部記憶體、全局變量等。根據這些區塊中的內容,可以確定出智能合約對應的位元組碼中的導入和導出函數。
在一個實施例中,將確定出的導入和導出函數進行統一編排,並確定導入和導出函數解析之後的可執行指令代碼的內部記憶體位址,由此構建函數索引表。
在一個實施例中,函數索引表可以是一個二級索引表,包括第一索引表和第二索引表,其中第一索引表包括各個導入和導出函數的函數名與函數索引編碼的對應關係,第二索引表包括函數索引編碼與內部記憶體位址的對應關係。
圖4示出根據一個實施例的函數索引表的示意圖。在圖4的示例中,函數索引表構建為包含表A和表B的二級索引表,其中表A中示出一些導入導出函數的函數名與索引編號的對應,例如函數Str_length對應於編號01,函數Func_mode對應於編號02,等等。表B示出索引編號和內部記憶體位址的對應關係,例如編號01對應於內部記憶體位址Add1,編號02對應於內部記憶體位址02。可以理解的是,內部記憶體位址Add1中儲存的是,函數Str_length解析之後的可執行指令,內部記憶體位址Add2中儲存的是,函數Func_mode解析之後的可執行指令。
在另一實施例中,也可以直接構建函數名與內部記憶體位址之間的對應關係,由此形成函數索引表。
可以理解,在如前所述的不定長指令的情況下,函數索引表中的內部記憶體位址為與內部記憶體對齊調整之後的內部記憶體位址。
在步驟37,將上述函數索引表暫存在內部記憶體中。
通過以上過程可以看到,在智能合約部署階段,就對相應的位元組碼進行預處理,該預處理包括解析解碼,以及導入導出函數的編排,從而產生運行時所需的資料結構,即上述函數索引表。如此,就可以加速智能合約的執行過程。
圖5示出根據一個實施例的執行智能合約的方法流程圖。類似的,該方法通過區塊鏈網路中任意節點中的虛擬機執行。如圖5所示,該方法包括以下步驟。
在步驟51,接收呼叫第一合約的交易請求,其中包括第一合約的合約位址和呼叫函數。
在步驟51之前,假定已經創建了第一合約,並通過圖3的方法部署了第一合約。那麼如圖2所示,當某個節點處的某個帳戶(例如Alice)想要呼叫已經創建的第一合約時,他可以發起一個呼叫該第一合約的交易,將該交易的to欄位指向要呼叫的第一合約的合約位址,並在該交易的data欄位包含要呼叫的合約中的函數。通常,在多數情況下,在呼叫合約中函數時還會傳入一些參數,但是這並不是必須的。
相應地,任何接收到該交易的節點中的虛擬機,均可以通過to欄位確定出要呼叫的合約,並通過data欄位,確定要呼叫的合約函數。
接著,在步驟53,虛擬機從內部記憶體中獲取在部署該第一合約階段中暫存的第一合約對應的指令代碼和函數索引表。可以理解,與圖3的流程相對應,第一合約對應的可執行指令代碼和函數索引表是第一合約部署階段已經解析產生,並暫存在內部記憶體中的,在執行階段可以直接獲取。
於是,在步驟55,根據函數索引表,確定呼叫函數對應的內部記憶體位址。
在一個實施例中,函數索引表包括函數名與內部記憶體位址之間的對應關係。如此,可以直接通過函數名,確定出儲存該函數對應的可執行指令代碼的內部記憶體位址。
在另一實施例中,函數索引表是一個二級索引表,包括第一索引表和第二索引表,其中第一索引表包括各個導入和導出函數的函數名與函數索引編碼的對應關係,第二索引表包括函數索引編碼與內部記憶體位址的對應關係。在這樣的情況下,可以基於呼叫函數的函數名,查找第一索引表,確定出呼叫函數對應的索引編號;然後利用該索引編號查找第二索引表,確定出對應的內部記憶體位址。
進而,在步驟57,按照所確定出的內部記憶體位址,執行其中的指令代碼。由於上述內部記憶體位址中儲存的是已經解析得到的可執行指令代碼,因此,在該步驟中,可以直接進行執行,不需再次進行解析。
通過以上過程可以看到,通過在部署階段將智能合約位元組碼預處理為運行時所需的資料結構,在呼叫智能合約時,就可以直接進行執行,不需要進行解析、解碼、目標位址修正等等操作,極大地提升執行效率。並且,許多智能合約會反復被呼叫和執行,採用上述預處理方案,可以複用部署產生的資料結構,也就是,在部署時進行一次解析,後續可以多次執行,而不必每呼叫一次智能合約就重新進行一次解析執行。如此,更進一步地提升合約執行效率,也提高區塊鏈平台的整體性能。
根據另一方面的實施例,提供了一種部署智能合約的裝置,該裝置部署在區塊鏈網路任意節點的虛擬機中,該任意節點可以體現為任何具有計算、處理能力的設備、平台或設備叢集,該虛擬機可以是與智能合約格式相適應的虛擬機,例如Solidity虛擬機,WASM虛擬機等。圖6示出根據一個實施例的合約部署裝置的示意性方塊圖。如圖6所示,該部署裝置600包括:
位元組碼獲取單元61,配置為回應於部署第一合約的請求,獲取該第一合約對應的合約模組中包含的位元組碼;
解析處理單元63,配置為將該位元組碼解析處理為可執行的指令代碼,並將其儲存在內部記憶體中;
索引表確定單元65,配置為針對該位元組碼中的導入和導出函數,確定函數索引表,該函數索引表用於指示各個導入和導出函數對應的指令代碼的內部記憶體位址;
索引表暫存單元67,配置為在內部記憶體中暫存該函數索引表。
根據一個實施例,該部署第一合約的請求為,創建第一合約的第一交易;相應的,該位元組碼獲取單元61配置為,從該第一交易的資料欄位中提取該位元組碼。
在一個具體實施例中,該位元組碼通過第一編碼協議進行編碼;該第一編碼協議為可變長編碼協議;在這樣的情況下,該解析處理單元63配置為:利用與該第一編碼協議對應的解碼協議,解碼該位元組碼,將可變長指令轉換為內部記憶體對齊的定長指令。
進一步的,在一個具體例子中,該合約模組為WASM模組,該第一編碼協議為leb 128編碼協議。
根據一個實施例,在可變長編碼協議的情況下,該解析處理單元63還配置為,根據內部記憶體對齊後的指令儲存位置,修改轉移指令中的目標位址。
根據一種實施方式,該函數索引表包括第一索引表和第二索引表,該第一索引表包括各個導入和導出函數的函數名與函數索引編碼的對應關係,該第二索引表包括該函數索引編碼與內部記憶體位址的對應關係。
根據又一方面的實施例,提供了一種執行智能合約的裝置,該裝置部署在區塊鏈網路任意節點的虛擬機中,該任意節點可以體現為任何具有計算、處理能力的設備、平台或設備叢集,該虛擬機可以是與智能合約格式相適應的虛擬機,例如Solidity虛擬機,WASM虛擬機等。圖7示出根據一個實施例的合約執行裝置的示意性方塊圖。如圖7所示,該執行裝置700包括:
請求接收單元71,配置為接收呼叫第一合約的交易請求,其中包括第一合約的合約位址和呼叫函數;
獲取單元73,配置為從內部記憶體中獲取在部署該第一合約階段暫存的該第一合約對應的指令代碼和函數索引表,該函數索引表用於指示第一合約中各個導入和導出函數對應的指令代碼的內部記憶體位址;
確定單元75,配置為根據該函數索引表,確定該呼叫函數對應的內部記憶體位址;
執行單元77,配置為按照所確定出的內部記憶體位址,執行其中的指令代碼。
在一個實施例中,該函數索引表包括第一索引表和第二索引表,其中第一索引表包括各個導入和導出函數的函數名與函數索引編碼的對應關係,第二索引表包括函數索引編碼與內部記憶體位址的對應關係;在這樣的情況下,該確定單元75配置為:基於該呼叫函數的函數名,查找第一索引表,確定出呼叫函數對應的索引編號;利用確定出的索引編號查找第二索引表,確定出對應的內部記憶體位址。
通過以上幾個方面的裝置,可以在智能合約部署階段,對相應的位元組碼進行預處理,從而產生運行時所需的資料結構。在呼叫智能合約時,就可以直接基於上述資料結構進行執行,不需要進行解析、解碼、目標位址修正等等操作,極大地提升執行效率。
根據另一方面的實施例,還提供一種電腦可讀取儲存媒體,其上儲存有電腦程式,當該電腦程式在電腦中執行時,令電腦執行結合圖4所描述的方法。
根據再一方面的實施例,還提供一種計算設備,包括記憶體和處理器,該記憶體中儲存有可執行代碼,該處理器執行該可執行代碼時,實現結合圖4所述的方法。
本領域技術人員應該可以意識到,在上述一個或多個示例中,本發明所描述的功能可以用硬體、軟體、韌體或它們的任意組合來實現。當使用軟體實現時,可以將這些功能儲存在電腦可讀取媒體中或者作為電腦可讀取媒體上的一個或多個指令或代碼進行傳輸。
以上所述的具體實施方式,對本發明的目的、技術方案和有益效果進行了進一步詳細說明,所應理解的是,以上所述僅為本發明的具體實施方式而已,並不用於限定本發明的保護範圍,凡在本發明的技術方案的基礎之上,所做的任何修改、等同替換、改進等,均應包括在本發明的保護範圍之內。
31~37:步驟
51~57:步驟
600:部署裝置
61:位元組碼獲取單元
63:解析處理單元
65:索引表確定單元
67:索引表暫存單元
700:執行裝置
71:請求接收單元
73:獲取單元
75:確定單元
77:執行單元
為了更清楚地說明本發明實施例的技術方案,下面將對實施例描述中所需要使用的圖式作簡單地介紹,顯而易見地,下面描述中的圖式僅僅是本發明的一些實施例,對於本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些圖式獲得其它的圖式。
[圖1]是在區塊鏈網路中創建智能合約的過程示意圖;
[圖2]是在區塊鏈網路中呼叫圖1創建的智能合約的過程示意圖;
[圖3]示出根據一個實施例的部署智能合約的方法流程圖;
[圖4]示出根據一個實施例的函數索引表的示意圖;
[圖5]示出根據一個實施例的執行智能合約的方法流程圖;
[圖6]示出根據一個實施例的合約部署裝置的示意性方塊圖;
[圖7]示出根據一個實施例的合約執行裝置的示意性方塊圖。
Claims (18)
- 一種部署智能合約的方法,該方法通過區塊鏈網路中任意節點中的虛擬機執行,包括: 回應於部署第一合約的請求,獲取該第一合約對應的合約模組中包含的位元組碼; 將該位元組碼解析處理為可執行的指令代碼,並將其儲存在內部記憶體中; 針對該位元組碼中的導入和導出函數,確定函數索引表,該函數索引表用於指示各個導入和導出函數對應的指令代碼的內部記憶體位址; 在內部記憶體中暫存該函數索引表。
- 根據請求項1所述的方法,其中,該部署第一合約的請求為,創建第一合約的第一交易; 該獲取該第一合約對應的合約模組中包含的位元組碼包括,從該第一交易的資料欄位中提取該位元組碼。
- 根據請求項1所述的方法,其中,該位元組碼通過第一編碼協議進行編碼;該第一編碼協議為可變長編碼協議; 該將該位元組碼解析處理為可執行的指令代碼,包括: 利用與該第一編碼協議對應的解碼協議,解碼該位元組碼,將可變長指令轉換為內部記憶體對齊的定長指令。
- 根據請求項3所述的方法,其中,該合約模組為WASM模組,該第一編碼協議為leb128編碼協議。
- 根據請求項3所述的方法,其中,該將該位元組碼解析處理為可執行的指令代碼還包括,根據內部記憶體對齊後的指令儲存位置,修改轉移指令中的目標位址。
- 根據請求項1所述的方法,其中,該函數索引表包括第一索引表和第二索引表,該第一索引表包括各個導入和導出函數的函數名與函數索引編碼的對應關係,該第二索引表包括該函數索引編碼與內部記憶體位址的對應關係。
- 一種執行智能合約的方法,該方法通過區塊鏈網路中任意節點中的虛擬機執行,包括: 接收呼叫第一合約的交易請求,其中包括第一合約的合約位址和呼叫函數; 從內部記憶體中獲取在部署該第一合約階段暫存的該第一合約對應的指令代碼和函數索引表,該函數索引表用於指示第一合約中各個導入和導出函數對應的指令代碼的內部記憶體位址; 根據該函數索引表,確定該呼叫函數對應的內部記憶體位址; 按照所確定出的內部記憶體位址,執行其中的指令代碼。
- 根據請求項7所述的方法,其中,該函數索引表包括第一索引表和第二索引表,其中第一索引表包括各個導入和導出函數的函數名與函數索引編碼的對應關係,第二索引表包括函數索引編碼與內部記憶體位址的對應關係; 該根據該函數索引表,確定該呼叫函數對應的內部記憶體位址包括: 基於該呼叫函數的函數名,查找第一索引表,確定出呼叫函數對應的索引編號; 利用確定出的索引編號查找第二索引表,確定出對應的內部記憶體位址。
- 一種部署智能合約的裝置,該裝置部署在區塊鏈網路任意節點的虛擬機中,該裝置包括: 位元組碼獲取單元,配置為回應於部署第一合約的請求,獲取該第一合約對應的合約模組中包含的位元組碼; 解析處理單元,配置為將該位元組碼解析處理為可執行的指令代碼,並將其儲存在內部記憶體中; 索引表確定單元,配置為針對該位元組碼中的導入和導出函數,確定函數索引表,該函數索引表用於指示各個導入和導出函數對應的指令代碼的內部記憶體位址; 索引表暫存單元,配置為在內部記憶體中暫存該函數索引表。
- 根據請求項9所述的裝置,其中,該部署第一合約的請求為,創建第一合約的第一交易; 該位元組碼獲取單元配置為,從該第一交易的資料欄位中提取該位元組碼。
- 根據請求項9所述的裝置,其中,該位元組碼通過第一編碼協議進行編碼;該第一編碼協議為可變長編碼協議; 該解析處理單元配置為:利用與該第一編碼協議對應的解碼協議,解碼該位元組碼,將可變長指令轉換為內部記憶體對齊的定長指令。
- 根據請求項11所述的裝置,其中,該合約模組為WASM模組,該第一編碼協議為leb128編碼協議。
- 根據請求項11所述的裝置,其中,該解析處理單元還配置為,根據內部記憶體對齊後的指令儲存位置,修改轉移指令中的目標位址。
- 根據請求項11所述的裝置,其中,該函數索引表包括第一索引表和第二索引表,該第一索引表包括各個導入和導出函數的函數名與函數索引編碼的對應關係,該第二索引表包括該函數索引編碼與內部記憶體位址的對應關係。
- 一種執行智能合約的裝置,該裝置部署在區塊鏈網路任意節點的虛擬機中,包括: 請求接收單元,配置為接收呼叫第一合約的交易請求,其中包括第一合約的合約位址和呼叫函數; 獲取單元,配置為從內部記憶體中獲取在部署該第一合約階段暫存的該第一合約對應的指令代碼和函數索引表,該函數索引表用於指示第一合約中各個導入和導出函數對應的指令代碼的內部記憶體位址; 確定單元,配置為根據該函數索引表,確定該呼叫函數對應的內部記憶體位址; 執行單元,配置為按照所確定出的內部記憶體位址,執行其中的指令代碼。
- 根據請求項15所述的裝置,其中,該函數索引表包括第一索引表和第二索引表,其中第一索引表包括各個導入和導出函數的函數名與函數索引編碼的對應關係,第二索引表包括函數索引編碼與內部記憶體位址的對應關係; 該確定單元配置為: 基於該呼叫函數的函數名,查找第一索引表,確定出呼叫函數對應的索引編號; 利用確定出的索引編號查找第二索引表,確定出對應的內部記憶體位址。
- 一種電腦可讀取儲存媒體,其上儲存有電腦程式,當該電腦程式在電腦中執行時,令電腦執行請求項1-8中任一項的所述的方法。
- 一種計算設備,包括記憶體和處理器,其特徵在於,該記憶體中儲存有可執行代碼,該處理器執行該可執行代碼時,實現請求項1-8中任一項所述的方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910818254.7 | 2019-08-30 | ||
CN201910818254.7A CN110675256B (zh) | 2019-08-30 | 2019-08-30 | 部署和执行智能合约的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW202109428A TW202109428A (zh) | 2021-03-01 |
TWI730654B true TWI730654B (zh) | 2021-06-11 |
Family
ID=69075823
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW109107265A TWI730654B (zh) | 2019-08-30 | 2020-03-05 | 部署和執行智能合約的方法及裝置 |
Country Status (3)
Country | Link |
---|---|
CN (1) | CN110675256B (zh) |
TW (1) | TWI730654B (zh) |
WO (1) | WO2021036174A1 (zh) |
Families Citing this family (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10783082B2 (en) | 2019-08-30 | 2020-09-22 | Alibaba Group Holding Limited | Deploying a smart contract |
CN110675256B (zh) * | 2019-08-30 | 2020-08-21 | 阿里巴巴集团控股有限公司 | 部署和执行智能合约的方法及装置 |
CN111008067B (zh) * | 2020-03-05 | 2020-06-09 | 支付宝(杭州)信息技术有限公司 | 一种在虚拟机中执行功能模块的方法和装置 |
CN111045792A (zh) * | 2020-03-13 | 2020-04-21 | 支付宝(杭州)信息技术有限公司 | 缓存和执行智能合约的方法和装置 |
CN111045793A (zh) * | 2020-03-13 | 2020-04-21 | 支付宝(杭州)信息技术有限公司 | 一种在虚拟机中执行功能模块的方法和装置 |
CN111324396B (zh) * | 2020-03-19 | 2023-09-15 | 深圳市迅雷网络技术有限公司 | 一种区块链智能合约执行方法、装置及设备 |
CN111523784A (zh) * | 2020-04-16 | 2020-08-11 | 广州拉卡拉信息技术有限公司 | 自动执行路径的监控方法及装置 |
CN111381938B (zh) * | 2020-05-29 | 2020-09-25 | 支付宝(杭州)信息技术有限公司 | 一种基于基础指令集执行区块链中智能合约的方法及系统 |
CN111859860A (zh) * | 2020-07-21 | 2020-10-30 | 国家计算机网络与信息安全管理中心 | 数据解析方法以及装置、存储介质、电子装置 |
CN111770116B (zh) * | 2020-08-31 | 2020-12-15 | 支付宝(杭州)信息技术有限公司 | 一种执行智能合约的方法、区块链节点、存储介质 |
CN111815310B (zh) * | 2020-08-31 | 2021-08-17 | 支付宝(杭州)信息技术有限公司 | 一种执行智能合约的方法、区块链节点和存储介质 |
CN111770202B (zh) | 2020-08-31 | 2021-10-29 | 支付宝(杭州)信息技术有限公司 | 一种执行智能合约的方法、区块链节点和存储介质 |
CN111770204B (zh) | 2020-08-31 | 2021-10-22 | 支付宝(杭州)信息技术有限公司 | 一种执行智能合约的方法、区块链节点和存储介质 |
CN111768183B (zh) | 2020-08-31 | 2024-04-19 | 支付宝(杭州)信息技术有限公司 | 一种执行智能合约的方法、区块链节点和存储介质 |
CN113872948A (zh) * | 2020-08-31 | 2021-12-31 | 支付宝(杭州)信息技术有限公司 | 一种执行智能合约的方法、区块链节点和节点设备 |
CN111768187A (zh) | 2020-08-31 | 2020-10-13 | 支付宝(杭州)信息技术有限公司 | 一种部署智能合约的方法、区块链节点和存储介质 |
CN111768184A (zh) * | 2020-08-31 | 2020-10-13 | 支付宝(杭州)信息技术有限公司 | 一种执行智能合约的方法及区块链节点 |
CN111815330A (zh) * | 2020-08-31 | 2020-10-23 | 支付宝(杭州)信息技术有限公司 | 一种部署智能合约的方法、区块链节点和存储介质 |
CN112308716B (zh) * | 2020-10-28 | 2024-02-20 | 深圳前海微众银行股份有限公司 | 区块链智能合约执行方法、装置、设备及计算机存储介质 |
CN112199221B (zh) * | 2020-12-04 | 2021-03-30 | 杭州趣链科技有限公司 | 事件推送方法、系统、区块链平台、合约调用端及介质 |
CN112632121B (zh) * | 2020-12-15 | 2024-04-16 | 京东科技控股股份有限公司 | 区块链数据获取方法和装置 |
CN112631729A (zh) * | 2020-12-28 | 2021-04-09 | 杭州趣链科技有限公司 | 智能合约的部署方法、执行方法、装置及终端设备 |
CN112631613A (zh) * | 2020-12-29 | 2021-04-09 | 杭州趣链科技有限公司 | 基于区块链平台的智能合约部署和调用方法及相关设备 |
CN112967011A (zh) * | 2021-02-19 | 2021-06-15 | 浙江焕链科技有限公司 | 一种合约自动化部署方法及系统 |
CN114745260B (zh) * | 2022-03-09 | 2024-04-02 | 优刻得科技股份有限公司 | 内容分发网络的计算力增强方法、装置、设备及存储介质 |
US20240143347A1 (en) * | 2022-10-31 | 2024-05-02 | Bitdrift, Inc. | Systems and methods for encoding and rendering generic visualizations of a gui of a client application |
CN116680015B (zh) * | 2023-08-03 | 2023-09-26 | 北京中电华大电子设计有限责任公司 | 函数调用方法、装置、电子设备及可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180123779A1 (en) * | 2016-11-01 | 2018-05-03 | Jiangang Zhang | Flexible Blockchain Smart-Contract Deployment |
US20180227116A1 (en) * | 2017-02-06 | 2018-08-09 | Northern Trust Corporation | Systems and methods for generating, uploading, and executing code blocks within distributed network nodes |
TW201911032A (zh) * | 2017-07-31 | 2019-03-16 | 大陸商眾安信息技術服務有限公司 | 智慧合約處理方法及裝置 |
CN109508432A (zh) * | 2018-11-28 | 2019-03-22 | 段红 | 一种基于区块链的高性能faas系统 |
CN109949156A (zh) * | 2019-02-28 | 2019-06-28 | 矩阵元技术(深圳)有限公司 | 一种区块链合约的数据处理方法及服务器 |
Family Cites Families (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6865659B2 (en) * | 2002-06-07 | 2005-03-08 | Sun Microsystems, Inc. | Using short references to access program elements in a large address space |
KR100763177B1 (ko) * | 2005-04-21 | 2007-10-04 | 삼성전자주식회사 | 자바 가상 머신의 명령어 수행 방법 및 그 장치 |
KR101407629B1 (ko) * | 2007-06-04 | 2014-06-13 | 더 보드 오브 리젠츠 오브 더 유니버시티 오브 텍사스 시스템 | 자바 변환 가속 장치 및 방법 |
CN101425052B (zh) * | 2008-12-04 | 2010-06-09 | 中国科学院计算技术研究所 | 一种事务性内存的实现方法 |
US20110191752A1 (en) * | 2010-01-29 | 2011-08-04 | Christophe Cleraux | Method and System for Debugging of Software on Target Devices |
CN102023843B (zh) * | 2010-11-24 | 2014-04-23 | 北京握奇数据系统有限公司 | 函数的调用方法、装置及智能卡 |
CN104182267B (zh) * | 2013-05-21 | 2019-10-25 | 南京中兴新软件有限责任公司 | 编译方法、解释方法、装置及用户设备 |
CN103530171A (zh) * | 2013-10-25 | 2014-01-22 | 大唐微电子技术有限公司 | 一种智能卡虚拟机及其实现方法 |
CN106020920A (zh) * | 2016-05-11 | 2016-10-12 | 广州新诚芯信息科技有限公司 | 一种jcvm解释器的预处理方法及系统 |
CN106201893B (zh) * | 2016-07-21 | 2018-11-06 | 恒宝股份有限公司 | 一种Java字节码调试器及调试方法 |
CN108337092B (zh) * | 2017-01-17 | 2021-02-12 | 华为国际有限公司 | 用于在通信网络中执行集体认证的方法和系统 |
CN107133502B (zh) * | 2017-04-14 | 2019-10-15 | 北京梆梆安全科技有限公司 | 一种应用程序的处理方法及装置 |
CN108733988B (zh) * | 2017-04-19 | 2023-01-24 | 北京梆梆安全科技有限公司 | 安卓平台上可执行程序的保护方法 |
CN108932406B (zh) * | 2017-05-18 | 2021-12-17 | 北京梆梆安全科技有限公司 | 虚拟化软件保护方法和装置 |
CN109214179B (zh) * | 2017-06-30 | 2021-04-27 | 武汉斗鱼网络科技有限公司 | 一种程序模块安全检测方法及装置 |
CN108153518B (zh) * | 2017-12-25 | 2021-02-26 | 厦门市美亚柏科信息股份有限公司 | 一种java程序反混淆方法及终端 |
CN108021370B (zh) * | 2017-12-26 | 2020-05-12 | 网易(杭州)网络有限公司 | 字节码的优化方法、装置、存储介质、处理器及终端 |
CN110162306B (zh) * | 2018-02-14 | 2023-06-23 | 斑马智行网络(香港)有限公司 | 系统的提前编译方法和装置 |
CN108765158B (zh) * | 2018-05-31 | 2020-11-24 | 杭州溪塔科技有限公司 | 一种基于区块链的智能合约引擎系统及其合约执行方法 |
CN109101237A (zh) * | 2018-08-01 | 2018-12-28 | 北京顶象技术有限公司 | 代码的加密编译方法及装置 |
CN109034814B (zh) * | 2018-09-14 | 2020-10-16 | 百度在线网络技术(北京)有限公司 | 基于以太坊虚拟机的智能合约处理方法和装置 |
CN109542455B (zh) * | 2018-11-29 | 2021-08-06 | 杭州复杂美科技有限公司 | 合约执行方法、合约精简方法、设备和存储介质 |
CN109976871B (zh) * | 2018-12-28 | 2023-07-07 | 无锡井通网络科技有限公司 | 智能合约部署方法、装置、电子设备及存储介质 |
CN109710385A (zh) * | 2018-12-29 | 2019-05-03 | 杭州趣链科技有限公司 | 一种基于Java虚拟机的智能合约复杂度限制方法 |
CN109710680A (zh) * | 2018-12-29 | 2019-05-03 | 杭州趣链科技有限公司 | 一种区块链数据处理引擎及操作方法 |
CN109711119A (zh) * | 2018-12-29 | 2019-05-03 | 360企业安全技术(珠海)有限公司 | 加密代码的运行方法及装置、存储介质、终端 |
CN109710384B (zh) * | 2018-12-29 | 2021-02-23 | 杭州趣链科技有限公司 | 一种安全的Java智能合约解释执行引擎及方法 |
CN109840429B (zh) * | 2019-01-08 | 2020-04-14 | 北京众享比特科技有限公司 | 智能合约部署、调用方法和装置 |
CN109901841B (zh) * | 2019-03-01 | 2022-02-18 | 太仓市同维电子有限公司 | 一种查看java字节码时显示方法调用关系图的方法 |
CN110032838B (zh) * | 2019-03-21 | 2023-05-12 | 深圳市腾讯信息技术有限公司 | 一种脚本文件加固方法、装置及设备 |
CN109933410B (zh) * | 2019-03-22 | 2021-06-01 | 北京智游网安科技有限公司 | 一种基于虚拟化技术的虚拟指令下发方法及系统 |
CN110175454B (zh) * | 2019-04-19 | 2021-03-26 | 佛山市微风科技有限公司 | 一种基于人工智能的智能合约安全漏洞挖掘方法及系统 |
CN110096338B (zh) * | 2019-05-10 | 2021-12-14 | 百度在线网络技术(北京)有限公司 | 智能合约执行方法、装置、设备及介质 |
CN110675256B (zh) * | 2019-08-30 | 2020-08-21 | 阿里巴巴集团控股有限公司 | 部署和执行智能合约的方法及装置 |
-
2019
- 2019-08-30 CN CN201910818254.7A patent/CN110675256B/zh active Active
-
2020
- 2020-01-11 WO PCT/CN2020/071571 patent/WO2021036174A1/zh active Application Filing
- 2020-03-05 TW TW109107265A patent/TWI730654B/zh active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180123779A1 (en) * | 2016-11-01 | 2018-05-03 | Jiangang Zhang | Flexible Blockchain Smart-Contract Deployment |
US20180227116A1 (en) * | 2017-02-06 | 2018-08-09 | Northern Trust Corporation | Systems and methods for generating, uploading, and executing code blocks within distributed network nodes |
TW201911032A (zh) * | 2017-07-31 | 2019-03-16 | 大陸商眾安信息技術服務有限公司 | 智慧合約處理方法及裝置 |
CN109508432A (zh) * | 2018-11-28 | 2019-03-22 | 段红 | 一种基于区块链的高性能faas系统 |
CN109949156A (zh) * | 2019-02-28 | 2019-06-28 | 矩阵元技术(深圳)有限公司 | 一种区块链合约的数据处理方法及服务器 |
Also Published As
Publication number | Publication date |
---|---|
CN110675256B (zh) | 2020-08-21 |
WO2021036174A1 (zh) | 2021-03-04 |
TW202109428A (zh) | 2021-03-01 |
CN110675256A (zh) | 2020-01-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI730654B (zh) | 部署和執行智能合約的方法及裝置 | |
US11307990B2 (en) | Deploying a smart contract | |
US8904347B2 (en) | Apparatus, method and system for building software by composition | |
US10877899B2 (en) | System and method for data processing | |
CN110704063B (zh) | 编译和执行智能合约的方法及装置 | |
CN110688122B (zh) | 编译和执行智能合约的方法及装置 | |
US6151618A (en) | Safe general purpose virtual machine computing system | |
WO2022033229A1 (zh) | 一种软件代码编译方法及系统 | |
CN110704064B (zh) | 编译和执行智能合约的方法及装置 | |
US8464232B2 (en) | Compiler compiler system with syntax-controlled runtime and binary application programming interfaces | |
US10303449B2 (en) | Compiling non-native constants | |
WO2021175053A1 (zh) | 一种在虚拟机中执行功能模块的方法和装置 | |
CN110264361A (zh) | 一种区块链的数据解析方法及装置 | |
CN112308716A (zh) | 区块链智能合约执行方法、装置、设备及计算机存储介质 | |
US7197600B2 (en) | Transferring data along with code for program overlays | |
CN114327477A (zh) | 智能合约执行方法、装置、电子装置和存储介质 | |
KR20080021071A (ko) | 컴퓨팅 환경에서 표현식을 번역하는 방법, 소프트웨어 및시스템 | |
CN113849781B (zh) | Go语言源代码混淆方法、系统、终端及存储介质 | |
CN115599394A (zh) | 序列化和反序列化方法、装置、计算机设备及存储介质 | |
US12066984B2 (en) | Method of creating and using an executable file format with a dynamic extensible header | |
CN112765676B (zh) | 一种智能合约执行方法、智能合约执行装置及节点设备 | |
CN100430896C (zh) | 硬件解析器加速器 | |
CN115114890A (zh) | 数据解析方法及装置、电子设备及可读介质 |