亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種面向區(qū)塊鏈全局智能合約業(yè)務數據解析方法與流程

文檔序號:11582960閱讀:1699來源:國知局
一種面向區(qū)塊鏈全局智能合約業(yè)務數據解析方法與流程

本發(fā)明涉及區(qū)塊鏈技術、智能合約、abi數據解碼,尤其涉及一種區(qū)塊鏈上持久化后的交易數據按照智能合約邏輯解析的方法。



背景技術:

區(qū)塊鏈技術,區(qū)塊鏈是一種新型去中心化分布式賬本技術,能安全地存儲數字貨幣交易或其他數據,特點是存儲在區(qū)塊鏈上的信息不可偽造和篡改,區(qū)塊鏈共識算法驅動區(qū)塊鏈上的每個節(jié)點都參與到交易的驗證過程中,保證區(qū)塊鏈上交易都是經過確認可信的,區(qū)塊鏈上每個節(jié)點都維護一個公共的賬本,用于存儲區(qū)塊鏈網絡上所有用戶的余額和智能合約數據,任何一個節(jié)點對自己所維護的賬本的修改都將不被其他節(jié)點所承認,從而保證公共賬本不可被偽造和篡改。

智能合約,區(qū)塊鏈上的智能合約是指由solidity編寫和編譯并運行在區(qū)塊鏈上的一串二進制代碼,智能合約函數的調用將在區(qū)塊鏈上生成一次調用記錄,并以交易的形式永久存儲于區(qū)塊鏈,我們可以通過智能合約實現在區(qū)塊鏈上的數據存儲、讀寫以及一些邏輯操作,因此一些基于區(qū)塊鏈的應用是利用智能合約完成的。



技術實現要素:

本發(fā)明的目的是針對現有區(qū)塊鏈技術的不足,提供一種面向區(qū)塊鏈全局智能合約業(yè)務數據解析方法。

由于區(qū)塊鏈本身的隱私保護特性,一般存儲于區(qū)塊鏈上的數據無法被自然語言解讀,區(qū)塊鏈會將智能合約的變量狀態(tài)持久化到區(qū)塊鏈賬本中,想要獲得已部署智能合約在區(qū)塊鏈上的調用記錄,必須在區(qū)塊鏈之上的業(yè)務層實現調用歷史的存儲,且這些存儲信息是不受區(qū)塊鏈不可篡改性保護的。

本發(fā)明的目的是通過以下技術方案來實現:一種面向區(qū)塊鏈全局智能合約的業(yè)務數據解析方法,其特征在于,包括如下步驟:

1)準備合約源代碼,經過編譯處理后,獲取源代碼對應的智能合約abi;

2)獲得智能合約地址,指定區(qū)塊號范圍,通過區(qū)塊鏈接口,獲得智能合約地址所對應的合約在調用過程中生成的區(qū)塊和交易,過濾掉不相關的區(qū)塊和交易;

3)取得交易,對交易中包含的payload進行解析,獲得函數名,確定生成該交易所調用的函數;

4)從步驟1)中的abi里找到步驟3)中解析出的函數名對應的函數描述,其中包括對參數和返回值數據類型的描述;

5)將步驟3)中payload去除函數名后的部分,按照步驟4)中的函數參數和返回值描述進行解析,獲得該函數的調用參數列表以及返回值列表;

6)重復步驟3)-步驟5)直至處理完區(qū)塊中的所有交易,最終得到指定區(qū)塊范圍內所有交易中解析出來的合約調用記錄。

進一步的,所述的步驟1)中,合約源代碼是預先編寫完成,不包含語法錯誤,可經編譯器成功編譯的,且區(qū)塊鏈上應已成功部署過一份該合約。

進一步的,所述的步驟1)中abi是對智能合約函數的描述,包括智能合約中所定義函數的函數名、函數參數數量和每個參數的數據類型、函數返回值數量和每個返回值的數據類型。

進一步的,所述的步驟2)指定的區(qū)塊號范圍和智能合約地址是對智能合約函數在調用完成后生成的區(qū)塊和交易的過濾,兩者共同決定了最終需要處理的數據的范圍。所述的步驟2)中所獲得的智能合約地址,該地址指向一個合約二進制碼,該二進制碼是由步驟1)中合約編譯而來,應確保步驟1)中合約邏輯與步驟2)中合約地址所指向的智能合約邏輯相一致。通過區(qū)塊鏈服務可以獲得由調用該合約中包含的函數所生成的所有交易,這些交易只與該地址所指向的智能合約相關。

進一步的,步驟3)中的payload為無意義的二進制碼,其編排規(guī)則由abi中描述的數據類型所約束,通過abi規(guī)則可以解析出payload中包含的實際函數調用參數和返回值。

進一步的,所述payload是一串二進制碼,有兩種類型:一種記錄智能合約的部署操作,包含智能合約可執(zhí)行二進制碼和函數調用信息,其中除非定義了帶參構造函數,否則不包含函數名;另一種記錄了智能合約的調用操作,包含智能合約可執(zhí)行二進制碼,且包含函數名,參數列表這些函數調用信息。所述步驟3)中對函數名的解析,payload中函數名信息由payload的前4個字節(jié)描述,從第5個字節(jié)開始,跟著的是參數編碼,要解析參數編碼,需要先確定該參數編碼是由什么規(guī)則生成,因此需要解析出函數名之后在abi中找到適用于該函數名的參數規(guī)則,即步驟4)中所指對參數和返回值數據類型的描述。

進一步地,所述步驟6)中,單個交易payload的解析可以獲得一次函數調用的輸入和輸出信息,對所有相關交易進行payload解析完成后,即可獲得所有與該合約相關的調用歷史,從而完成全局智能合約業(yè)務數據的解析。

本發(fā)明的有益效果是:本發(fā)明從區(qū)塊鏈中獲取與合約地址所指向的智能合約相關的原始數據,并通過abi規(guī)則解析payload,獲得智能合約在區(qū)塊鏈上的調用記錄。對于傳統(tǒng)的智能合約調用歷史的查詢,需要區(qū)塊鏈使用者在區(qū)塊鏈上層實現調用歷史的保存,或在智能合約中實現相關的調用歷史查詢方法,并在實際需要獲取該類信息時再調用一次智能合約的查詢方法,本發(fā)明有效地解決了在不用實現上層業(yè)務數據存儲的基礎上,僅通過從區(qū)塊鏈中獲取與合約相關的的原始數據,來獲得智能合約在區(qū)塊鏈上的業(yè)務數據。

附圖說明

圖1是智能合約全局業(yè)務數據解析的步驟流程;

圖2是單個交易payload解析流程。

具體實施方式

下面根據附圖和具體實施例詳細描述本發(fā)明,本發(fā)明的目的和效果將變得更加明顯。

如圖1所示,本發(fā)明方法,包括如下步驟:

1)準備合約源代碼,經過編譯處理后,獲取源代碼對應的智能合約abi,abi是對智能合約函數的json格式描述。

2)獲得智能合約地址,指定區(qū)塊號范圍,通過區(qū)塊鏈接口,獲得智能合約地址所對應的合約在調用過程中生成的區(qū)塊和交易,過濾掉不相關的區(qū)塊和交易。

3)取得交易,對交易中包含的payload進行解析,獲得函數名,確定生成該交易所調用的函數。payload是一串二進制碼,有兩種類型:一種記錄智能合約的部署操作,包含智能合約可執(zhí)行二進制碼,除非定義了帶參構造函數,否則不包含函數函數調用信息(函數名,參數列表);一種記錄了智能合約的調用操作,包含智能合約可執(zhí)行二進制碼,切不論如何都包含函數調用信息(函數名,參數列表);

4)從步驟1)中的abi里找到步驟3)中解析出的函數名對應的函數描述,其中包括對參數和返回值數據類型的描述。

5)將步驟3)中payload去除函數名后的部分,按照步驟4)中的函數參數和返回值描述進行解析,獲得該函數的調用參數列表以及返回值列表。

6)重復步驟3)-步驟5)直至處理完區(qū)塊中的所有交易,最終得到指定區(qū)塊范圍內所有交易中解析出來的合約調用記錄。

進一步的,所述的步驟1)中,合約源代碼是預先編寫完成,不包含語法錯誤,可經編譯器成功編譯的,且區(qū)塊鏈上應已成功部署過一份該合約。

進一步的,所述的步驟1)中abi是對智能合約函數的描述,包括智能合約中所定義函數的函數名、函數參數數量和每個參數的數據類型、函數返回值數量和每個返回值的數據類型。

進一步的,所述的步驟2)指定的區(qū)塊號范圍和智能合約地址是對智能合約函數在調用完成后生成的區(qū)塊和交易的過濾,兩者共同決定了最終需要處理的數據的范圍。所述的步驟2)中所獲得的智能合約地址,該地址指向一個合約二進制碼,該二進制碼是由步驟1)中合約編譯而來,應確保步驟1)中合約邏輯與步驟2)中合約地址所指向的智能合約邏輯相一致。通過區(qū)塊鏈服務可以獲得由調用該合約中包含的函數所生成的所有交易,這些交易只與該地址所指向的智能合約相關。

進一步的,步驟3)中的payload為無意義的二進制碼,其編排規(guī)則由abi中描述的數據類型所約束,通過abi規(guī)則可以解析出payload中包含的實際函數調用參數和返回值。

進一步的,所述payload是一串二進制碼,有兩種類型:一種記錄智能合約的部署操作,包含智能合約可執(zhí)行二進制碼和函數調用信息,其中除非定義了帶參構造函數,否則不包含函數名;另一種記錄了智能合約的調用操作,包含智能合約可執(zhí)行二進制碼,且包含函數名,參數列表這些函數調用信息。所述步驟3)中對函數名的解析,payload中函數名信息由payload的前4個字節(jié)描述,從第5個字節(jié)開始,跟著的是參數編碼,要解析參數編碼,需要先確定該參數編碼是由什么規(guī)則生成,因此需要解析出函數名之后在abi中找到適用于該函數名的參數規(guī)則,即步驟4)中所指對參數和返回值數據類型的描述。

下面用一個具體的全局智能合約解析實例來說明具體的實施方式:

模擬一個面向區(qū)塊鏈進行全局智能合約業(yè)務數據解析的流程,如圖1所示,步驟的輸入有兩個:一是要解析的區(qū)塊的范圍,指定了起始區(qū)塊號和結束區(qū)塊號;二是已部署的智能合約在區(qū)塊鏈上的地址,在部署智能合約時獲得。

在首先獲得指定區(qū)塊范圍后,根據區(qū)塊鏈服務查詢到范圍內的區(qū)塊,指定區(qū)塊范圍有助于只獲取關鍵范圍內的區(qū)塊和交易,可以減少查詢不需要的信息而消耗的資源和等待時間。

拿到區(qū)塊后,便可取得區(qū)塊中的所有交易,交易信息中包含一個to字段,表明該交易的目標地址,根據該字段可以確定該交易是否是調用制定地址的智能合約而生成的,借此可以過濾掉與指定合約地址無關的交易,拿到目標交易信息。

選取一個未解析過的交易,進行解析。重復直到所有交易均解析完成。

對單個交易的解析步驟,如圖2所示,步驟的輸入有兩個:一是未處理過的交易,進一步地為了取得交易payload;二是智能合約源代碼,進一步地為了取得源碼編譯后的abi。

在首先取得payload后,根據payload前4個字節(jié)解析出函數名,使用該函數名在abi中查找到函數名對應的函數參數和返回值解析規(guī)則;使用payload前4個字節(jié)以外的部分,按照函數參數和返回值解析規(guī)則,解析出函數實際調用時候的傳入參數和返回值,完成解析。

當前第1頁1 2 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1