java调试生命周期,一种基于JAVA的智能合约生命周期的管理方法与流程
本發(fā)明涉及區(qū)塊鏈技術(shù),尤其涉及一種基于JAVA的智能合約生命周期的管理方法。
背景技術(shù):
區(qū)塊鏈技術(shù),區(qū)塊鏈?zhǔn)且环N新型去中心化協(xié)議,能安全地存儲(chǔ)數(shù)字貨幣交易或其他數(shù)據(jù),信息不可偽造和篡改,區(qū)塊鏈上的交易確認(rèn)由區(qū)塊鏈上的所有節(jié)點(diǎn)共同完成,由共識(shí)算法保證其一致性,區(qū)塊鏈上維護(hù)一個(gè)公共的賬本,公共賬本位于存儲(chǔ)區(qū)塊上任何節(jié)點(diǎn)可見(jiàn),從而保證其不可偽造和篡改。
智能合約是編程在區(qū)塊鏈上的匯編語(yǔ)言,該術(shù)語(yǔ)是跨領(lǐng)域法律學(xué)者尼克·薩博提出來(lái)的,他對(duì)智能合約的定義是“一個(gè)智能合約是一套以數(shù)字形式定義的承諾,包括合約參與方可以在上面執(zhí)行這些承諾的協(xié)議”,換句話(huà)說(shuō),智能合約就是一個(gè)在計(jì)算機(jī)系統(tǒng)上,當(dāng)一定條件被滿(mǎn)足后,可以被自動(dòng)執(zhí)行的合約。通常人們不會(huì)自己寫(xiě)字節(jié)碼,但是會(huì)從更高級(jí)的語(yǔ)言來(lái)編譯它,例如用Solidity等類(lèi)似的專(zhuān)用語(yǔ)言。
區(qū)塊鏈的去中心化與不可篡改的特性給智能合約提供了一個(gè)很好的發(fā)展環(huán)境,因此近年來(lái),比特幣網(wǎng)絡(luò)、以太坊網(wǎng)絡(luò)等一系列區(qū)塊鏈社區(qū)都陸續(xù)開(kāi)始提供了公開(kāi)的智能合約編程的接口。但是在智能合約的開(kāi)發(fā)過(guò)程中,一直缺少一個(gè)完善的生命周期的管理方法,尤其缺少一種基于當(dāng)前主流編程語(yǔ)言的智能合約管理方法。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)的不足,本發(fā)明提出了一種基于JAVA的智能合約管理方法,從智能合約的部署、調(diào)用、升級(jí)、凍結(jié)、解凍等方面的管理來(lái)實(shí)現(xiàn)整個(gè)智能合約生命周期的管理,具體技術(shù)方案如下:
一種基于JAVA的智能合約生命周期的管理方法,包括如下步驟:
步驟一:合約部署;
基于JAVA虛擬機(jī)的智能合約執(zhí)行引擎(JAVA based Contract Execution Engine,以下簡(jiǎn)稱(chēng)JCEE)的客戶(hù)端接收用戶(hù)輸入的壓縮過(guò)的類(lèi)文件,隨后解壓類(lèi)文件并持久化后,生成合約的唯一標(biāo)識(shí)合約地址ContractAddress,連同類(lèi)文件的地址向JCEE服務(wù)器端發(fā)送部署請(qǐng)求;JCEE服務(wù)器端通過(guò)監(jiān)聽(tīng)指定端口收到JCEE客戶(hù)端發(fā)送過(guò)來(lái)的合約部署請(qǐng)求,首先對(duì)合約進(jìn)行安全性檢查,如果檢查通過(guò),則將合約持久化到元數(shù)據(jù)庫(kù)中,隨后即可將類(lèi)文件裝載到內(nèi)存中進(jìn)行合約的部署;如果檢查不通過(guò),直接退出本次的合約部署,并向JCEE客戶(hù)端返回錯(cuò)誤信息;
步驟二:根據(jù)用戶(hù)需求對(duì)合約執(zhí)行對(duì)應(yīng)的操作:
(1)當(dāng)需要調(diào)用合約時(shí):JCEE客戶(hù)端接收用戶(hù)輸入的調(diào)用invoke請(qǐng)求,解析出調(diào)用合約的唯一標(biāo)識(shí)ContractAddress、合約調(diào)用的方法名與參數(shù),向JCEE服務(wù)器端發(fā)送合約調(diào)用invoke請(qǐng)求;JCEE服務(wù)器端通過(guò)監(jiān)聽(tīng)指定端口收到JCEE客戶(hù)端發(fā)送過(guò)來(lái)的合約調(diào)用請(qǐng)求,首先對(duì)合約進(jìn)行安全性檢查,如果檢查通過(guò),則調(diào)用指定合約地址的指定方法并同步賬本信息到JCEE客戶(hù)端,實(shí)現(xiàn)合約的調(diào)用,如果檢查不通過(guò),則終止本次的合約調(diào)用,并向JCEE客戶(hù)端返回錯(cuò)誤信息;
(2)當(dāng)需要升級(jí)合約時(shí):JCEE客戶(hù)端接收用戶(hù)輸入的升級(jí)update請(qǐng)求,解析出舊合約的唯一標(biāo)識(shí)ContractAddress、連同新合約的類(lèi)文件地址向JCEE服務(wù)器端發(fā)送update請(qǐng)求;JCEE服務(wù)器端通過(guò)監(jiān)聽(tīng)指定端口收到JCEE客戶(hù)端發(fā)送過(guò)來(lái)的合約升級(jí)請(qǐng)求,首先對(duì)合約進(jìn)行安全性檢查,如果檢查不通過(guò),則直接退出本次的合約升級(jí),并返回錯(cuò)誤信息到JCEE客戶(hù)端;如果檢查通過(guò),則進(jìn)行舊合約的查詢(xún),如果能夠查詢(xún)到舊合約,則先摧毀舊合約,然后持久化新合約并裝載新合約的類(lèi)文件到內(nèi)存中完成合約的升級(jí),如果不能查到舊合約,則直接進(jìn)行新合約的持久化與裝載,完成合約的升級(jí);
(3)當(dāng)需要凍結(jié)合約時(shí):JCEE客戶(hù)端接收用戶(hù)輸入的凍結(jié)frozen請(qǐng)求,解析出所要凍結(jié)合約的唯一標(biāo)識(shí)ContractAddress、連同合約的新?tīng)顟B(tài)位向JCEE服務(wù)器端發(fā)送凍結(jié)請(qǐng)求;JCEE服務(wù)器端通過(guò)監(jiān)聽(tīng)指定端口收到JCEE客戶(hù)端發(fā)送過(guò)來(lái)的合約凍結(jié)請(qǐng)求,首先對(duì)合約進(jìn)行安全性檢查,如果檢查通過(guò),則更新合約的狀態(tài)位為frozen狀態(tài),實(shí)現(xiàn)合約的凍結(jié);如果檢查不通過(guò),則退出本次的合約凍結(jié),并向JCEE客戶(hù)端返回錯(cuò)誤信息;
(4)當(dāng)需要解凍合約時(shí):JCEE客戶(hù)端接收用戶(hù)輸入的解凍unfrozen請(qǐng)求,解析出所要解凍合約的唯一標(biāo)識(shí)ContractAddress、連同合約的新?tīng)顟B(tài)位向JCEE服務(wù)器端發(fā)送解凍請(qǐng)求;JCEE服務(wù)器端通過(guò)監(jiān)聽(tīng)指定端口收到JCEE客戶(hù)端發(fā)送過(guò)來(lái)的合約解凍請(qǐng)求,首先對(duì)合約進(jìn)行安全性檢查,如果檢查通過(guò),則更新合約的狀態(tài)位為unfrozen狀態(tài),實(shí)現(xiàn)合約的解凍;如果檢查不通過(guò),則退出本次的合約解凍,并向JCEE客戶(hù)端返回錯(cuò)誤信息;
進(jìn)一步地,所述的步驟一中,JCEE服務(wù)器統(tǒng)一管理所有智能合約,每一次的合約部署都只是一次向JCEE服務(wù)器的調(diào)用,而不用為每一個(gè)智能合約單起一個(gè)線(xiàn)程去維護(hù),方便了整個(gè)平臺(tái)的合約管理,也減少了系統(tǒng)資源的浪費(fèi)。
進(jìn)一步地,所述的步驟一中,JCEE服務(wù)器通過(guò)遠(yuǎn)程過(guò)程調(diào)用協(xié)議RPC與JCEE客戶(hù)端進(jìn)行通信,所述的合約的安全性檢查包括檢查合約字節(jié)碼是否合法和檢查合約信息中是否包含合約地址。
本發(fā)明的有益效果:本發(fā)明應(yīng)用于區(qū)塊鏈平臺(tái)上,提供了一套全新的智能合約生命周期的管理,實(shí)現(xiàn)了合約的部署、調(diào)用、升級(jí)、凍結(jié)、解凍,為區(qū)塊鏈平臺(tái)的合約管理提供了便捷。同時(shí),在合約生命周期的每一個(gè)階段,本產(chǎn)品都會(huì)進(jìn)行安全性檢查,提升了合約生命周期的安全性。
附圖說(shuō)明
圖1是部署合約狀態(tài)圖;
圖2是升級(jí)合約狀態(tài)圖。
具體實(shí)施方式
下面根據(jù)附圖和具體實(shí)施例詳細(xì)描述本發(fā)明,本發(fā)明的目的和效果將變得更加明顯。
本發(fā)明是一種基于JAVA的智能合約生命周期管理方法,包括如下步驟:
步驟一:合約部署;
基于JAVA虛擬機(jī)的智能合約執(zhí)行引擎JCEE的客戶(hù)端接收用戶(hù)輸入的壓縮過(guò)的類(lèi)文件,隨后解壓類(lèi)文件并持久化后,生成合約的唯一標(biāo)識(shí)合約地址ContractAddress,連同類(lèi)文件的地址向JCEE服務(wù)器端發(fā)送部署請(qǐng)求;JCEE服務(wù)器端通過(guò)監(jiān)聽(tīng)指定端口收到JCEE客戶(hù)端發(fā)送過(guò)來(lái)的合約部署請(qǐng)求,首先對(duì)合約進(jìn)行安全性檢查,如果檢查通過(guò),則將合約持久化到元數(shù)據(jù)庫(kù)中,隨后即可將類(lèi)文件裝載到內(nèi)存中進(jìn)行合約的部署;如果檢查不通過(guò),直接退出本次的合約部署,并向JCEE客戶(hù)端返回錯(cuò)誤信息;
步驟二:根據(jù)用戶(hù)需求對(duì)合約執(zhí)行對(duì)應(yīng)的操作:
(1)當(dāng)需要調(diào)用合約時(shí):JCEE客戶(hù)端接收用戶(hù)輸入的調(diào)用invoke請(qǐng)求,解析出調(diào)用合約的唯一標(biāo)識(shí)ContractAddress、合約調(diào)用的方法名與參數(shù),向JCEE服務(wù)器端發(fā)送合約調(diào)用invoke請(qǐng)求;JCEE服務(wù)器端通過(guò)監(jiān)聽(tīng)指定端口收到JCEE客戶(hù)端發(fā)送過(guò)來(lái)的合約調(diào)用請(qǐng)求,首先對(duì)合約進(jìn)行安全性檢查,如果檢查通過(guò),則調(diào)用指定合約地址的指定方法并同步賬本信息到JCEE客戶(hù)端,實(shí)現(xiàn)合約的調(diào)用,如果檢查不通過(guò),則終止本次的合約調(diào)用,并向JCEE客戶(hù)端返回錯(cuò)誤信息;
(2)當(dāng)需要升級(jí)合約時(shí):JCEE客戶(hù)端接收用戶(hù)輸入的升級(jí)update請(qǐng)求,解析出舊合約的唯一標(biāo)識(shí)ContractAddress、連同新合約的類(lèi)文件地址向JCEE服務(wù)器端發(fā)送update請(qǐng)求;JCEE服務(wù)器端通過(guò)監(jiān)聽(tīng)指定端口收到JCEE客戶(hù)端發(fā)送過(guò)來(lái)的合約升級(jí)請(qǐng)求,首先對(duì)合約進(jìn)行安全性檢查,如果檢查不通過(guò),則直接退出本次的合約升級(jí),并返回錯(cuò)誤信息到JCEE客戶(hù)端;如果檢查通過(guò),則進(jìn)行舊合約的查詢(xún),如果能夠查詢(xún)到舊合約,則先摧毀舊合約,然后持久化新合約并裝載新合約的類(lèi)文件到內(nèi)存中完成合約的升級(jí),如果不能查到舊合約,則直接進(jìn)行新合約的持久化與裝載,完成合約的升級(jí);
(3)當(dāng)需要凍結(jié)合約時(shí):JCEE客戶(hù)端接收用戶(hù)輸入的凍結(jié)frozen請(qǐng)求,解析出所要凍結(jié)合約的唯一標(biāo)識(shí)ContractAddress、連同合約的新?tīng)顟B(tài)位向JCEE服務(wù)器端發(fā)送凍結(jié)請(qǐng)求;JCEE服務(wù)器端通過(guò)監(jiān)聽(tīng)指定端口收到JCEE客戶(hù)端發(fā)送過(guò)來(lái)的合約凍結(jié)請(qǐng)求,首先對(duì)合約進(jìn)行安全性檢查,如果檢查通過(guò),則更新合約的狀態(tài)位為frozen狀態(tài),實(shí)現(xiàn)合約的凍結(jié);如果檢查不通過(guò),則退出本次的合約凍結(jié),并向JCEE客戶(hù)端返回錯(cuò)誤信息;
(4)當(dāng)需要解凍合約時(shí):JCEE客戶(hù)端接收用戶(hù)輸入的解凍unfrozen請(qǐng)求,解析出所要解凍合約的唯一標(biāo)識(shí)ContractAddress、連同合約的新?tīng)顟B(tài)位向JCEE服務(wù)器端發(fā)送解凍請(qǐng)求;JCEE服務(wù)器端通過(guò)監(jiān)聽(tīng)指定端口收到JCEE客戶(hù)端發(fā)送過(guò)來(lái)的合約解凍請(qǐng)求,首先對(duì)合約進(jìn)行安全性檢查,如果檢查通過(guò),則更新合約的狀態(tài)位為unfrozen狀態(tài),實(shí)現(xiàn)合約的解凍;如果檢查不通過(guò),則退出本次的合約解凍,并向JCEE客戶(hù)端返回錯(cuò)誤信息。
所述的步驟一中,JCEE服務(wù)器統(tǒng)一管理所有智能合約,每一次的合約部署都只是一次向JCEE服務(wù)器的調(diào)用,而不用為每一個(gè)智能合約單起一個(gè)線(xiàn)程去維護(hù)。
所述的步驟一中,用戶(hù)端指定的類(lèi)文件的同時(shí)還需要提供該合約的一些屬性信息,方便JCEE客戶(hù)端定位類(lèi)文件的位置,JCEE客戶(hù)端通過(guò)區(qū)塊鏈平臺(tái)生成唯一的合約地址后,才能夠向JCEE服務(wù)器發(fā)送部署合約的請(qǐng)求,該請(qǐng)求中需要帶上合約地址與合約的相關(guān)信息,如合約類(lèi)文件的位置等,JCEE服務(wù)器可以與JCEE客戶(hù)端可設(shè)置同一臺(tái)主機(jī)上,也可以設(shè)置在不同主機(jī)上,JCEE服務(wù)器端通過(guò)遠(yuǎn)程過(guò)程調(diào)用協(xié)議RPC與JCEE客戶(hù)端進(jìn)行通信,獲取到了JCEE客戶(hù)端的請(qǐng)求后,會(huì)進(jìn)行合約安全性的檢查,檢查合約字節(jié)碼是否合法等,檢查通過(guò)后,還會(huì)進(jìn)行合約完備性的檢查,具體包括檢查合約信息中是否包含了合約地址等,完成了兩項(xiàng)檢查后,才會(huì)進(jìn)行合約的持久化,將新合約存儲(chǔ)到元數(shù)據(jù)庫(kù)中,完成后才會(huì)真正的進(jìn)行合約的部署,即將合約裝載到內(nèi)存中。
所述的步驟二中,合約的調(diào)用是用戶(hù)使用智能合約最直觀的感受,用戶(hù)通過(guò)輸入合約的方法名、參數(shù),并指定所要調(diào)用合約的地址后,向JCEE客戶(hù)端發(fā)送JSON-RPC請(qǐng)求,JCEE客戶(hù)端僅僅將相關(guān)參數(shù)封裝后就可以轉(zhuǎn)發(fā)給JCEE服務(wù)器端,JCEE服務(wù)器同樣會(huì)進(jìn)行安全性與完備性的檢查,檢查通過(guò)后才會(huì)進(jìn)入相應(yīng)的執(zhí)行流程。
所述的步驟二中,合約的升級(jí)需要用戶(hù)提供新的合約類(lèi)文件以及舊的合約地址,舊合約地址用于定位摧毀原先的合約,并在該地址上新建一條新的合約,因此合約升級(jí)后,合約地址是不變的。
所述的步驟二中,合約的凍結(jié)只是對(duì)合約狀態(tài)位的進(jìn)行更改,凍結(jié)后的合約不能再進(jìn)行調(diào)用、更新等操作。
所述的步驟二中,合約的解凍需要提供已凍結(jié)合約的合約地址,同樣的,合約解凍也只是對(duì)合約狀態(tài)位的進(jìn)行更改,解凍后的合約可以繼續(xù)進(jìn)行調(diào)用、更新等操作。
總結(jié)
以上是生活随笔為你收集整理的java调试生命周期,一种基于JAVA的智能合约生命周期的管理方法与流程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php7 passthru,认识PHP
- 下一篇: matlab对一行矩阵fft,MATLA