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

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

native模式下go语言编写的智能合约部署



还是以counter合约文件为例


cd contractsdk/go/example/counter
go build counter.go


部署合约文件


./xchain-cli native deploy --account XC1111111111111111@xuper -a '{"creator":"XC1111111111111111@xuper"}' --fee 15587517 --runtime go xuperchain/data/gocontract/counter --cname golangcounter


调用合约文件


  • 命令行调用


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


  • Javasdk调用


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


查询合约文件


通过Javasdk查询


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


分别部署完了java和go语言写的counter合约之后 咱们其实就知道了 流程都是一模一样的




可能出现的异常信息



  • 如果报 contract type native not found 说明没有开启native合约配置


  • 如果报 context deadline exceeded 说明 你可能用的是旧版本的合约文件 所以需要重新编译下新版本的合约源码生成合约文件

上面简单描述了截止目前7月15号基于最新版本部署的过程以及通过native合约部署的方式分别部署和使用go和java2种语言编写的智能合约的过程,下面结合公司的业务来描述下存证智能合约的实现逻辑




存证智能合约目前版本还没有java语言编写的合约模版,大概2周之后才会有




下面咱分析下go语言版本的存证合约的逻辑




先简单说下数据结构



user对象的数据结构
{
"Owner":"xiaoming" , # 这个表示用户名
"UserFiles":{ # 这个是一个map集合
               "filehash":{ # map集合的key是文件hash
                            "Timestamp":"" # 时间戳
                            "Hashval":""  # []byte(filehash) 其实也是hash值
                           }
            }
}
相关文章
|
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 的使用
下一篇
无影云桌面