在Xuper链上部署Java语言智能合约和分析存证合约的实现逻辑(1)

简介: 在Xuper链上部署Java语言智能合约和分析存证合约的实现逻辑(1)

前言


这篇文章咱们先简单的叙述下官方刚发布的最新版本中的native部署java语言编写的智能合约的过程然后再说下存证合约的代码实现逻辑,下一篇文章咱们说下如何根据自己公司的业务逻辑定义合约里面的数据结构来实现智能合约


先简单说下关于文档访问慢的问题


官方文档是 https://xuperchain.readthedocs.io/zh/latest/design_documents/XuperModel.html

该文档是在国外部署的,所以国内访问的话,如果自己所在的网络不太好的情况下,打开网页是很慢的,这种情况大家可以将相应版本的文档下载到自己的本地,这样的话 就不会受网速的影响了


下载地址:


https://readthedocs.org/projects/xuperchain/downloads/

选择相应的版本即可


image.png


版本升级已支持java语言编写的智能合约


大概2020年7月13号左右的时候 官方更新了一版本 在master分支上 该版本已支持了java语言编写的智能合约


接下来咱们首先下拉下最新的代码、然后编译、运行下,这个过程咱之前发过的文章也已经很详细的描述过了,这里就不再赘述了,感兴趣的朋友 可以看下这2篇文章


在百度超级链Xuper上部署智能合约并实现存证功能对百度超级链Xuper使用过程中的进一步理解


native模式下java智能合约的部署


java智能合约是native部署的方式,所以首先需要修改下配置文件以开启native合约部署


vim 每个节点路径/conf/xchain.yaml
# 管理native合约的配置
native:
    enable: true


启动命令


nohup ./xchain & 
这里没有加--vm ixvm 这个是wasm合约部署的方式


因为这里修改了配置 所以需要先删除数据,再启动 我这是在本地环境搭建的,所以节点数据都不太重要,要是公司的数据,那么就不需要轻易的修改配置了


编译环境



编译Java sdk:Java版本不低于Java1.8版本


包管理器:maven,mvn版本3.6+


配置maven环境


vim /etc/profile
export M2_HOME=/Users/mengfanxiao/Documents/third_software/maven/apache-maven-3.6.2
export PATH=$PATH:$M2_HOME/bin
source /etc/profile
mvn -v


编译合约sdk


cd xuperchain/core/contractsdk/java
mvn install -f pom.xml


产出二进制文件target/java-contract-sdk-0.1.0.jar,并自动安装到mvn本地仓库下

编译native合约时,以contractsdk/java/example中的counter合约为例


cd contractsdk/java/example/counter
mvn package -f pom.xml


产出二进制文件target/counter-0.1.0-jar-with-dependencies.jar,用于合约部署


合约部署


./xchain-cli native deploy --account XC1111111111111111@xuper --fee 15587517 --runtime java xuperchain/data/javacontract/counter-0.1.0-jar-with-dependencies.jar --cname javacounter


合约调用




  • 命令行调用


./xchain-cli native invoke --method Increase -a '{"key":"test"}' javacounter --fee 10


  • 通过java sdk 发起合约交易


@Test
public void invokeContract() throws Exception {
    Map<String, byte[]> args = new HashMap<>();
    args.put("key", "icexin".getBytes());
    Transaction tx = client.invokeContract(account, "native", "javacounter", "increase", args);
    System.out.println("invoke txid: " + tx.getTxid());
    System.out.println("response: " + tx.getContractResponse().getBodyStr());
    System.out.println("gas: " + tx.getGasUsed());
}


注意这里一定要是native模式


合约查询


  • 通过Java sdk 查询


@Test
public void queryContractJava() throws Exception {
    Map<String, byte[]> args = new HashMap<>();
    args.put("key", "icexin".getBytes());
    Transaction tx = client.queryContract(account, "native", "javacounter", "get", args);
    System.out.println("response: " + tx.getContractResponse().getBodyStr());
    System.out.println("gas: " + tx.getGasUsed());
}
相关文章
|
1月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
70 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
1月前
|
存储 Java
【编程基础知识】 分析学生成绩:用Java二维数组存储与输出
本文介绍如何使用Java二维数组存储和处理多个学生的各科成绩,包括成绩的输入、存储及格式化输出,适合初学者实践Java基础知识。
72 1
|
13天前
|
SQL 安全 Java
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
26 4
|
20天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
39 2
|
22天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
14 2
|
27天前
|
SQL IDE Java
入门Cloud Toolkit:简化你的Java应用开发与部署流程
【10月更文挑战第19天】作为一名长期从事Java开发的程序员,我一直致力于寻找能够简化日常开发工作的工具。在众多工具中,阿里巴巴推出的Cloud Toolkit引起了我的注意。这款免费的插件旨在帮助开发者更轻松地进行开发、测试及部署工作,尤其是在与云服务交互时表现尤为出色。本文将从个人的角度出发,介绍Cloud Toolkit的基本功能及其使用技巧,希望能帮助初学者快速上手这款实用工具。
20 1
|
1月前
|
Java 程序员 编译器
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。本文通过示例详细解析了保留字的定义、作用及与自定义标识符的区别,帮助开发者避免因误用保留字而导致的编译错误,确保代码的正确性和可读性。
44 3
|
1月前
|
移动开发 Java 大数据
深入探索Java语言的核心优势与现代应用实践
【10月更文挑战第10天】深入探索Java语言的核心优势与现代应用实践
52 4
|
1月前
|
Java
让星星⭐月亮告诉你,Java synchronized(*.class) synchronized 方法 synchronized(this)分析
本文通过Java代码示例,介绍了`synchronized`关键字在类和实例方法上的使用。总结了三种情况:1) 类级别的锁,多个实例对象在同一时刻只能有一个获取锁;2) 实例方法级别的锁,多个实例对象可以同时执行;3) 同一实例对象的多个线程,同一时刻只能有一个线程执行同步方法。
19 1
|
1月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
44 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
下一篇
无影云桌面