比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads

【虛擬機專欄】一文了解ava智能合約- 鏈上JVM-ODAILY_區塊鏈

Author:

Time:1900/1/1 0:00:00

——導讀——

前文,我們介紹了對虛擬機的歷史、特點、發展以及Solidity和EVM進行詳細介紹。Solidity和EVM的出現為區塊鏈的應用場景打開了新的大門,但是合約開發者使用Solidity進行智能合約的開發,不可避免地存在著新語言的學習成本問題。

那么,是否有這樣一位老朋友,能讓「合約開發者」和「區塊鏈」快速打成一片呢?

眾所周知,Java是一種被廣泛使用的、面向對象的編程語言,具有“一次編寫,處處執行”的跨平臺特性。于是,我們將Java請到了我們的區塊鏈平臺,自研了一套可以執行Java智能合約的執行引擎HVM。將Java智能合約引入區塊鏈,主要有以下目的:

*降低智能合約開發的成本,讓合約開發者能專注于合約邏輯本身而不是語法細節。

*為開發者提供熟悉的、適合區塊鏈場景的工具類和方法,避免重復“造輪子”。

*解決傳統智能合約與賬本交互模式單一的問題,提供多種更方便、更靈活的賬本交互的數據結構和方法,更好地滿足業務場景的需要。

本文將主要講解如何讓Java編寫的智能合約運行在區塊鏈上,不會涉及大量JVM細節。從Java合約使用、虛擬機適配、賬本交互機制三個方面進行介紹。

Rocket Pool創始人:Coinbase Ventures將加入Oracle DAO,負責協議部分治理職責:1月13日消息,Rocket Pool 創始人在官方社區發布公告稱,Coinbase Ventures 和加密節點運營商 Unit 410 將加入 Rocket Pool Oracle DAO,負責協議部分治理職責。

Oracle DAO 是一組特殊 Rocket Pool 節點,負責協議所需的部分管理職責,由于技術限制,這些職責暫時無法通過智能合約實現,包括根據質押量計算當前獎勵、向執行層傳遞信標鏈狀態等。[2023/1/13 11:10:26]

——Java智能合約的使用——

從合約開發者的角度來看,Java智能合約的使用流程通常包括以下三個步驟:合約開發、合約部署、合約調用。

▲Java合約開發

相比傳統智能合約,Java智能合約的開發和使用更為簡單方便,主要體現在:

1)項目搭建快:開發者只需要在本地IDE中新建Java項目,引入合約開發依賴包,便可以開發合約。完成編碼后,將代碼打包成合約Jar文件即可用于部署上鏈。

美國反壟斷監管機構 FTC 起訴 Meta 以阻止其壟斷元宇宙市場:7月28日消息,美國反壟斷監管機構聯邦貿易委員會 (FTC) 于7月27日對 Meta 提起訴訟,以阻止 Facebook 收購 Unlimited 及其虛擬現實健身應用 Supernatural。FTC 聲稱:Meta 和扎克伯格正計劃擴大 Meta 的虛擬現實帝國,企圖非法收購一款向用戶證明虛擬現實價值的專用健身應用程序。該機構詳細說明了Facebook收購虛擬現實公司的情況,最早可以追溯到2014年收購Oculus。

FTC 表示,Facebook 的母公司正在尋求壟斷整個行業,Meta將更接近其擁有整個元宇宙市場的最終目標。[2022/7/28 2:42:29]

2)工具方法多:開發者可以使用JDK中的類和方法,避免重復”造輪子“的麻煩。

3)學習成本低:Java語言使用廣泛,大部分開發者只需要了解合約開發依賴包的接口,便能熟練使用Java智能合約。

▲Java合約部署

對于Java智能合約的部署,開發者通過一筆交易將合約Jar包上傳到鏈上,區塊鏈會對合約進行初始化,生成一個唯一的合約地址,并通過交易回執將合約地址給開發者。

Curve上stETH與ETH兌換比例升至0.9800:7月22日消息,據Curve數據顯示,stETH與ETH流動性池比例傾斜程度緩和,兌換比例回升至1:0.9800。當前池內擁有216,291.68枚ETH(占比30.74%),487,214.1枚stETH(占比69.26%)[2022/7/22 2:31:46]

▲Java合約調用

開發者可以通過指定合約地址,并輸入合約方法名和參數,構造并發送一筆合約調用交易。區塊鏈平臺收到交易以后,獲取一個JVM實例,將合約地址對應的合約Jar中的類文件加載JVM中,創建一個合約類的實例并調用指定方法,得到執行結果并通過交易回執返回給開發者。

——HVM詳解——

▲JVM接入區塊鏈

要實現一個Java智能合約執行引擎,一定繞不開將JVM接入區塊鏈的問題。目前大部分區塊鏈系統使用Golang開發,而大部分開源的JVM通常是C++編寫。如果想要快速地將JVM接入到區塊鏈系統中,可以通過CGO將Golang和C++打通。但考慮到在區塊鏈系統中對JVM內部優化的需要,HVM選擇了通過Golang實現了JVM。雖然自己實現JVM會引入大量的開發成本,但是極大地方便了后續針對區塊鏈場景進行性能優化和功能拓展工作的開展。

Okay Bear市值突破100萬SOL,已成為Solana鏈上第三大NFT系列:7月8日消息,鏈上分析公司Nansen在社交媒體上對NFT系列Okay Bear進行了分析,數據顯示當前Okay Bear市值已達到1,052,607SOL,成為Solana鏈上第三大NFT系列。不過自四月下旬以來,Okay Bear日均交易量已從峰值166,022SOL(1630萬美元)大幅下降至目前的1,468SOL(54.3萬美元),但仍然是MagicEden上交易量最大的前5名NFT系列之一,而且平均交易價格一直保持良好。此外,Okay Bear持有者中有61%在兩個月內沒有拋售行為,在持有5枚+OkayBear NFT的用戶中,有99位從未賣出過一只。[2022/7/8 1:59:41]

“當區塊鏈中接入JVM后,還需要做些什么讓JVM成為區塊鏈中的Java合約執行引擎呢?”

▲虛擬機安全適配

前文中提到,我們在區塊鏈的Java合約引擎中支持用戶使用JDK中的類和方法。考慮到區塊鏈上的合約執行引擎需要滿足執行環境的隔離以及執行結果的確定性,我們需要對JDK和JVM進行安全適配。其中包括以下幾點:

Mirror Protocol再次遭受攻擊,剩余資金池面臨枯竭風險:5月31日消息,Terra區塊鏈上的DeFi應用Mirror Protocol再次遭受攻擊,已有超過200萬美元資金損失,比特幣、以太坊和波卡的資金池已經枯竭,剩余的資金池與股票掛鉤,若該漏洞在美國東部時間4:00(北京時間16:00)開市前交易時沒有被修復,其所有的代幣資產池都將面臨風險。Mirror Protocol允許用戶使用合成資產對科技股進行多頭或空頭操作,它運行在舊的Terra鏈(現稱為TerraClassic)上。驗證器節點BlockPane創始人ToddGarrison表示,問題是在Terra Classic鏈上運行節點的大多數驗證器都在運行過時的價格預言機版本,這些節點給Mirror Protocol的LUNC價格仍為5UST。ToddGarrison表示,請修復LUNC價格預言機,因為在短時間內,所有流動性池將耗盡,Mirror將產生無法彌補的壞賬,系統將自行崩潰。(The Block)[2022/5/31 3:52:16]

1)禁用”不安全”類和方法:在智能合約引擎中,可能引起執行結果不一致的方法是”不安全“的。比如Java中生成的隨機數方法,其執行結果是不確定的,區塊鏈中的Java合約引擎會禁用這些”不安全”的類和方法。

2)隔離合約的執行環境:區塊鏈平臺中的Java智能合約需要一個隔離的執行環境,即Java智能合約無法像普通的Java程序使用線程、網絡、訪問系統時間等功能。此外,我們在JDK中實現了一部分與區塊鏈相關的方法,部分方法不允許被Java合約調用。因此,我們在HVM內部實現了方法調用過濾器,攔截不被允許的方法調用。

3)確定邏輯執行順序:同EVM一樣,我們在HVM內部實現了一套Gas機制,對合約執行進行代價計算。指令執行的不同,會引起不同節點計算的Gas值不同。在原始的JDK中,部分方法在兩次調用時,雖然其結果一致,其邏輯執行的代碼路徑不同。以使用單例模式的類為例,首次調用這個類的實例方法時,需要創建這個類的實例;之后調用其方法時,不再需要創建實例。這種邏輯的差異,會導致新啟動的節點與其他節點的執行的Gas值不一致。因此,我們需要對JDK中這類邏輯進行適配,保證邏輯執行順序始終一致。

▲賬本交互機制

將JVM接入區塊鏈,還需要保證合約與賬本數據交互的功能。EVM中存在賬本交互的指令,但是在JVM規范中不存在用于賬本交互的指令,所以我們需要提供一套賬本數據交互機制,讓Java智能合約能夠操作區塊鏈上的賬本數據。

實現賬本交互機制可以有兩種方案:

1)在JVM中實現一套賬本交互的自定義指令集。同時提供一種Java合約的編譯器或插件,在合約字節碼中生成專用于區塊鏈中賬本交互的自定義指令。

2)在JDK中實現一套讀寫賬本數據的工具類和方法,在合約執行過程中,由合約執行引擎來調用這些方法,負責合約持久化字段的讀寫操作。

HVM在實現的過程中,選擇了第二種方案。在合約執行的過程中,如果使用到合約的持久化字段,合約執行引擎會調用賬本讀取的方法從賬本中獲取其數據。對于賬本寫入操作,執行引擎會先進行緩存,待合約執行結束后,掃描合約中有數據更新的持久化字段,將字段更新的數據統一刷入到賬本中。

相比指令的方法,使用Java方法來實現賬本數據交互的功能雖然會有更多的指令開銷,但是能夠為用戶提供更友好地方式操作持久化字段。以Map為例,我們在Java智能合約中為Map提供了除Get和Put以外的方法,允許用戶使用迭代器等方法方便地操作Map。考慮到讀寫Map的復雜場景,維護一個可靠的迭代器邏輯較為復雜。而以指令的方式操作賬本數據,那么勢必要實現一套復雜的賬本交互指令集。顯然工具類和方法更適合完成這些復雜的邏輯操作,并更容易支持合約數據結構功能的拓展。

通過這種方案,用戶在編寫Java智能合約時,能夠選用功能強大的數據結構類操作賬本。這些數據結構類,將賬本交互的Java方法進行封裝,使用戶無法感知,并盡可能實現JDK中的接口。如HVMMap、HVMList等數據結構,分別實現了JDK中的Map和List接口,使用起來與JDK提供的其他Map、List幾乎一致。

▲虛擬機對比分析

除了HVM合約以外,常見的合約還有EVM的Solidity合約、Fabric的Chaincode等等。

EVM提供了沙盒化的、完全隔離的合約執行環境。Solidity從設計初就作為智能合約語言來考慮,其在賬本操作上有較大優勢。

Fabric的Chaincode支持多種語言編寫。Chaincode運行在一個受保護的Docker容器中,在接收到客戶端發送的調用請求后,會在容器中模擬執行出對賬本的讀寫集并返回給客戶端,最后由客戶端再次發起將模擬交易產生讀寫集寫入賬本的請求。

HVM相比與其他的執行引擎,主要以下特性:

*HVM合約是在安全的封閉式沙箱環境執行,安全性高

*執行引擎內嵌于平臺,無網絡依賴

*HVM提供完整的合約生命周期管理機制,只需通過sdk、api調用就可進行合約的升級

*提供豐富的內置功能,例如日志輸出、密碼套件、多樣化調用合約

除了Java語言JDK本身提供的功能外,HVM提供多種基于區塊鏈賬本數據操作的數據結構

——小結——

本文首先從開發者的角度,介紹Java智能合約的開發及使用流程,再講解了在區塊鏈中接入JVM的技術方案,探討了對JDK的代碼改造以及賬本交互機制的實現。HVM始終向著更好的性能和更友好的使用體驗目標摸索前進。與此同時,行業內的合約執行引擎正處于百花齊放的狀態,接下來我們還會對支持Rust等語言編寫智能合約的FVM以及支持區塊鏈上SQL執行的KVSQL進行詳細介紹,敬請期待!

對于虛擬機感興趣的小伙伴,可以添加小助手桔子加入技術交流群,歡迎您和我們共享觀點,共論區塊鏈的無限未來~

作者簡介

盧益銘、姚兵

趣鏈科技基礎平臺部區塊鏈虛擬機研究小組

參考文獻

Java虛擬機規范.

Tags:AVA區塊鏈JDKSOLTRAVA價格區塊鏈運用的技術中不包括哪一項基本技術sol幣是什么幣種

比特幣行情
NFT主導的藝術革命-ODAILY_區塊鏈

什么是NFT? 如果你的實物收藏可以擴展到數字虛擬世界當中會發生什么事情呢?在過去的幾個月里,NFT一直被人們在全球范圍內討論,人們相信NFT會在2021年的加密世界中占據一席之地.

1900/1/1 0:00:00
Twitter的比特幣和以太坊小費功能將帶來什么? | 區塊鏈頭條觀察-ODAILY_WIT

今年5月份,Twitter官方曾表示,希望讓用戶在互相關注、轉發、點贊之外能夠更好地互相支持,因此平臺將引入TipJar功能——讓用戶能夠互相發送和接收小費。現在,此事又有了最新的進展.

1900/1/1 0:00:00
Polkadot的機制和多鏈未來將賦能下一代創新者和企業家-ODAILY_POL

Web3.0時代中替代加速器的機制將為下一代企業家及其區塊鏈項目賦能。我的同事EliasSimos喜歡說我們正在經歷數字資產、包括非數字資產價值的數字化的文藝復興.

1900/1/1 0:00:00
YGG:Axies 背后來自菲律賓的神秘加密力量-ODAILY_YGG

GameFi走紅,菲律賓社區點火DapperLabs前產品經理近期在推特發布了一項有趣的觀點:在牛市中,投機者玩的是投機游戲,到了熊市,投機者正轉向玩NFT游戲.

1900/1/1 0:00:00
羅永浩暗示上車元宇宙,向下一個債點進發-ODAILY_PUR

11月5日,羅永浩轉發了ShaanPuri關于元宇宙的一些觀點,表示該觀點非常深刻,并請求網友轉發擴散.

1900/1/1 0:00:00
比特幣Taproot升級將帶來什么改變-ODAILY_APR

近期比特幣市場波動頻繁,上下浮動活躍,日均漲幅0.87%,僅僅一個月已整體最高漲幅22.3%;直至2021年10月12日凌晨,比特幣持續上拉至最高57824.6美元,后又波動至56000點上下.

1900/1/1 0:00:00
ads