宇宙链 宇宙链
Ctrl+D收藏宇宙链
首页 > 屎币 > 正文

【虚拟机专栏】一文了解ava智能合约- 链上JVM-ODAILY

作者:

时间:1900/1/1 0:00:00

——导读——

前文,我们介绍了对虚拟机的历史、特点、发展以及Solidity和EVM进行详细介绍。Solidity和EVM的出现为区块链的应用场景打开了新的大门,但是合约开发者使用Solidity进行智能合约的开发,不可避免地存在着新语言的学习成本问题。

那么,是否有这样一位老朋友,能让「合约开发者」和「区块链」快速打成一片呢?

众所周知,Java是一种被广泛使用的、面向对象的编程语言,具有“一次编写,处处执行”的跨平台特性。于是,我们将Java请到了我们的区块链平台,自研了一套可以执行Java智能合约的执行引擎HVM。将Java智能合约引入区块链,主要有以下目的:

*降低智能合约开发的成本,让合约开发者能专注于合约逻辑本身而不是语法细节。

*为开发者提供熟悉的、适合区块链场景的工具类和方法,避免重复“造轮子”。

*解决传统智能合约与账本交互模式单一的问题,提供多种更方便、更灵活的账本交互的数据结构和方法,更好地满足业务场景的需要。

本文将主要讲解如何让Java编写的智能合约运行在区块链上,不会涉及大量JVM细节。从Java合约使用、虚拟机适配、账本交互机制三个方面进行介绍。

Coinbase NFT推出创作者中心“Creator Hub”:3月17日消息,Coinbase NFT宣布推出创作者中心“Creator Hub”,旨在简化启动NFT集合和构建Web3社区的过程。“Creator Hub”将扮演创作者工具一站店的角色,用户使用这些工具只需三步即可启动NFT藏品,包括选择合约、铸币偏好、以及自定义图像、描述、定价和铸币时间,然后添加钱包即可在市场上列出。此外,创作者中心还可以帮助用户创建Discord机器人来追踪NFT销售情况、查询下载NFT持有者明细列表,以及在个人网站上嵌入NFT藏品并创建代币门控体验。[2023/3/17 13:10:01]

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

从合约开发者的角度来看,Java智能合约的使用流程通常包括以下三个步骤:合约开发、合约部署、合约调用。

▲Java合约开发

相比传统智能合约,Java智能合约的开发和使用更为简单方便,主要体现在:

1)项目搭建快:开发者只需要在本地IDE中新建Java项目,引入合约开发依赖包,便可以开发合约。完成编码后,将代码打包成合约Jar文件即可用于部署上链。

2)工具方法多:开发者可以使用JDK中的类和方法,避免重复”造轮子“的麻烦。

CoinEx将停止为所有美国客户提供服务:金色财经报道,根据用户收到的一封邮件,加密货币交易所CoinEx将停止为美国用户提供服务。该消息的部分内容是,\"由于监管要求,CoinEx不能再向美国公民或居民提供服务\"。

CoinEx要求美国用户在60个工作日内(4月24日之前)提取他们的资产,并表示在那之后将 \"逐步禁止相关账户\"。[2023/2/26 12:30:03]

3)学习成本低:Java语言使用广泛,大部分开发者只需要了解合约开发依赖包的接口,便能熟练使用Java智能合约。

▲Java合约部署

对于Java智能合约的部署,开发者通过一笔交易将合约Jar包上传到链上,区块链会对合约进行初始化,生成一个唯一的合约地址,并通过交易回执将合约地址给开发者。

▲Java合约调用

开发者可以通过指定合约地址,并输入合约方法名和参数,构造并发送一笔合约调用交易。区块链平台收到交易以后,获取一个JVM实例,将合约地址对应的合约Jar中的类文件加载JVM中,创建一个合约类的实例并调用指定方法,得到执行结果并通过交易回执返回给开发者。

ARK Innovation ETF 股价年内下跌近63%降至2017年底水平:金色财经报道,Cathie Wood(木头姐)创立的ARK Innovation ETF(ARKK)股价今年已下跌近63%,目前 ARKK 股价已降至2017年底水平,其持有的几乎每支股票均跌至历史低点。有分析显示,加密敞口是导致 ARK Investment 暴跌的主要原因之一,尤其是该基金将大量头寸押注到 Coinbase和 GBTC 上,ARK持有超过615万股GBTC,而Coinbase股价则暴跌约80%。

此外,由于市场表现不佳,自年初以来,持有 ARK Investment 基金的账户数量已减少8%,11月中旬,持有 ARKK 的账户总量触及年底新低。(Cryptoslate)[2022/12/21 21:58:22]

——HVM详解——

▲JVM接入区块链

ConsenSys与StarkWare扩大合作伙伴关系,向StarkWare提供Web3开发堆栈:9月21日消息,以太坊基础设施开发公司ConsenSys宣布向StarkWare提供Web3开发堆栈,包括Infura为开发人员连接和部署到StarkNet提供可靠的节点支持和高可用性API;Diligence为Cairo智能合约提供安全审计服务;开发人员可以通过联合使用InfuraAPI和MetaMask的StarkNetSnap来构建直观的用户体验。此外,StarkNet的Truffle Box即将推出,将提供代码模板和说明来加速dApp的创建。[2022/9/21 7:10:37]

要实现一个Java智能合约执行引擎,一定绕不开将JVM接入区块链的问题。目前大部分区块链系统使用Golang开发,而大部分开源的JVM通常是C++编写。如果想要快速地将JVM接入到区块链系统中,可以通过CGO将Golang和C++打通。但考虑到在区块链系统中对JVM内部优化的需要,HVM选择了通过Golang实现了JVM。虽然自己实现JVM会引入大量的开发成本,但是极大地方便了后续针对区块链场景进行性能优化和功能拓展工作的开展。

“当区块链中接入JVM后,还需要做些什么让JVM成为区块链中的Java合约执行引擎呢?”

足球NFT平台Aera宣布与意甲联赛达成合作,将发行相关主题NFT:7月21日消息,足球NFT平台Aera宣布与意大利足球甲级联赛官方达成合作关系,将发行相关主题NFT。该NFT将以联赛中的经典时刻为题材,采取视频形式,首次发行日期定为9月22日,并将贯穿整个联赛赛季。

此前消息,4月13日,足球媒体平台OneFootball宣布将与Animoca Brands和Dapper Labs合作推出NFT平台Aera。该平台基于Flow网络,旨在通过区块链技术创造一种新的球迷体验,将足球粉丝群体带入Web3。[2022/7/21 2:27:35]

▲虚拟机安全适配

前文中提到,我们在区块链的Java合约引擎中支持用户使用JDK中的类和方法。考虑到区块链上的合约执行引擎需要满足执行环境的隔离以及执行结果的确定性,我们需要对JDK和JVM进行安全适配。其中包括以下几点:

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虚拟机规范.

标签:AVA区块链ARKNFTSAVANTAI区块链域名谁在管理Shark CoinHALO NFT OFFICIAL

屎币热门资讯
超话社区132期 | Portal:Layer2+跨链 DEX,将 DeFi 引入比特币-ODAILY

12月7日晚上8点,Odaily星球日报邀请到了PORTALCo-FounderGeorgeBurke&B21CapitalPartnerHanson为我们带来分享:Portal|Layer2+跨链DEX.

1900/1/1 0:00:00
Nova钱包宣布获得DFG资金捐赠,用以支付该项目过渡期间花销-ODAILY

Nova基金团队十分荣幸地宣布其团队在项目过渡期间将由DFG提供资金支持。这将使得团队可以更加专注于为波卡生态和Kusama生态开发高质量的应用产品;同时得益于DFG的资金捐赠,团队也有了充足的经费开展一个全新的项目,并在初始阶段为新.

1900/1/1 0:00:00
以太坊域名系统(ENS)价值分析-ODAILY

大概北京时间11月9号,圈内瞩目的顶流项目ENS空投代币了。ENS的英文全称是EthereumNameService。它是以太坊生态提供地址解析的一种服务,通俗的说就是可以把以太坊的地址映射为一个好记的字母组合.

1900/1/1 0:00:00
为什么说NFT将引领牛市下半场?-ODAILY

“5.19”加密市场遭遇血洗,很多币圈投资者都悲观的认为本轮牛市已经走完,而笔者却一直在坚定的唱多.

1900/1/1 0:00:00
Rust智能合约养成日记(1)-ODAILY

1.EVMorWASM?随着Ethereum的普及,我们在谈论智能合约时,往往默认都是利用Solidity语言开发,基于EVM的智能合约.

1900/1/1 0:00:00
DAO:多元化的思考-ODAILY

原地址:https://twitter.com/chaserchapman/status/1457032028667453447?s=21作者:ChaseChapman 翻译:DRD 翻译机构:DAOSquareChaseChapma.

1900/1/1 0:00:00