链资讯 链资讯
Ctrl+D收藏链资讯

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

作者:

时间:

——导读——

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

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

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

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

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

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

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

衍生品交易平台Syndr成为首个Arbitrum Orbit Chain生态DeFi协议:6月26日消息,衍生品交易平台Syndr日前宣布基于Arbitrum Layer3 Orbit Chain推出测试网,并成为首个Arbitrum Orbit Chain生态DeFi协议。Syndr将利用L3 Rollup链具有的高性能,高扩展性为用户提供低延迟的衍生品交易平台。[2023/6/26 22:00:14]

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

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

▲Java合约开发

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

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

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

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

亚特兰大比特币大会允许通过GitHub提交演讲者或主题推荐:金色财经报道,亚特兰大比特币开发者大会(TABConf 2023)联创 Brandon Iglesias 表示,任何人都可以通过会议的 GitHub 存储库提交其对演讲者或主题的推荐,这使其成为一个开源比特币会议。目前,已有 20 余人提交了提案。TABConf 2023 将于 9 月举行。[2023/4/1 13:38:43]

▲Java合约部署

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

▲Java合约调用

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

尼日尼亚交易所:比特币价格现报1706万奈拉,约36600美元:2月6日消息,尼日尼亚交易所nairaex数据显示,比特币价格现报1706万奈拉,约36600美元。

此前报道,在尼日利亚央行不断努力推动其公民使用数字现金的情况下,当地比特币价格已经飙升至远高于市场水平,比特币溢价高达60%。[2023/2/6 11:49:51]

——HVM详解——

▲JVM接入区块链

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

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

超过2.87万亿枚SHIB从未知地址转至另一未知地址:金色财经报道,Whale Alert监测数据显示,2,871,107,065,000枚SHIB(价值26,374,252美元)从未知钱包地址(0x1b...8cfa)转移至另一未知钱包地址(0x80...a0a0)。

据此前报道,Etherscan数据显示,北京时间12月5日12:24:23,超过1,060,594,914,048.89枚Shiba Inu(SHIB)从0xaeb9ec开头地址转入0xcf3910开头地址。大约5分钟后,0xcf3910开头地址将这些SHIB转移至Coinbase 10地址。[2022/12/9 21:34:23]

▲虚拟机安全适配

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

1)禁用”不安全”类和方法:在智能合约引擎中,可能引起执行结果不一致的方法是”不安全“的。比如Java中生成的随机数方法,其执行结果是不确定的,区块链中的Java合约引擎会禁用这些”不安全”的类和方法。

BIS报告:MEV对新DeFi应用构成威胁,未来还可能加剧:6月17日消息,根据国际清算银行(BIS)一份关注加密挖矿行业常见不当行为的新报告,自2020年以来,以太坊区块链上的矿工已经从其他投资者那里“提取”了约6亿美元。该报告得出了三个关键结论:

1. 基于以太坊的DeFi协议和ETH“依赖于验证器或‘矿工’作为中介来验证交易和更新分类账。

2. MEV类似于传统市场中券商的抢先交易,但与这种做法不同,它本身并不违法。

3. MEV是伪匿名区块链的一个内在缺陷,因此没有简单的方法来摆脱它。根据BIS的说法,这对一系列新的DeFi应用构成了威胁,并可能在未来加剧,使其不可避免。

尽管如此,该报告也推荐了一种解决MEV的方法,即基于身份公开的可信中介网络的许可分布式账本技术,但这也意味着放弃区块链匿名的核心价值。(Cointelegraph)[2022/6/17 4:35:53]

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区块链JDKMAPAVA币什么是区块链技术MAPS币

欧易交易所app下载热门资讯
NFT:Arbitrum上线了,Layer2 Summer还远吗?|响指研究所周报#10-ODAILY_RUM

08/30-09/0510期英文版本请关注Medium@snapfingers 本期要点 截至9月6日,所有二层网络锁仓量超过10亿美元,8月上涨79%.

BIT:7月分析:趋势证明了今年的区块链行业发展注定“无史可鉴”-ODAILY_Arbitrum

本报告内容由ULink与BytesIO共同制作完成七月注定是一个关键的转折,在刚刚结束上半年的征程之后,七月迎来了众多年中总结会议,而这些会议无时无刻不在影响着整个区块链行业的发展与变化.

加密货币:解析央行数字货币(CBDC)问世会影响比特币市值吗-ODAILY_CBD

前言: 本文翻译整理来源于韩国新闻网Hankyungeconomy,Decenter,讨论了对于央行数字货币问世后,比特币市值是否会下降的问题,各方的不同观点.

AVA:纳斯达克解码:NFT和CBDC碰撞出金融的未来,美国是否有相应的加密法规?-ODAILY_加密货币是什么意思图

从今年年初开始,不可替代代币(NFT)市场一直在扩张,数字表明该领域的总资本目前可能在10-500亿美元之间.

FIL:Filecoin与NEAR达成合作,促进Web3生态稳定发展-ODAILY_DaleCoin

1、去中心化存储SDK+Demo应用,申请者需开发一套SDK,以方便NEAR用户使用Filecoin去中心化存储网络,同时提供一款Demo应用.

CRYPT:你以为我们只是词汇课?我们是Moonbeam宇宙大百科-ODAILY_Traxia

事实上已经有很多关于波卡、Substrate和新兴的Parity/Web3生态系统的专业术语。我们对此进行了汇总,助您更好地理解Moonbeam文档、项目计划和操作教程.