在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天前
|
JavaScript 前端开发 Java
java项目的打包将vue放到.jar里面部署
java项目的打包将vue放到.jar里面部署
|
3天前
|
Java
【Java多线程】分析线程加锁导致的死锁问题以及解决方案
【Java多线程】分析线程加锁导致的死锁问题以及解决方案
11 1
|
5天前
|
传感器 人工智能 前端开发
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
智慧校园电子班牌,坐落于班级的门口,适合于各类型学校的场景应用,班级学校日常内容更新可由班级自行管理,也可由学校统一管理。让我们一起看看,电子班牌有哪些功能呢?
46 4
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
|
5天前
|
网络协议 Java 数据库连接
Java语言的特点
【5月更文挑战第7天】Java是一种面向对象的编程语言,强调数据和操作的封装,具备平台独立性,能“一次编写,到处运行”。它有自动垃圾收集机制,消除手动内存管理。Java是强类型语言,注重安全性,并支持多线程编程。其丰富的API库和对网络编程的良好支持增强了功能。此外,Java的可扩展性使其能轻松适应新需求和扩展。
17 4
|
5天前
|
分布式计算 Java 大数据
Java语言主要应用领域
【5月更文挑战第7天】Java在嵌入式系统中以低至130KB的占用展现可靠性,实现“一次编写,到处运行”。在大数据领域,Java通过Hadoop、Hbase、Accumulo和ElasticSearch等工具发挥关键作用。Java也是Eclipse、IntelliJ IDEA和NetBeans等开发工具的基础。广泛应用于电商网站和金融服务器系统,即便在J2ME式微后,仍能在部分低端手机中找到其踪影。
16 4
|
8天前
|
消息中间件 缓存 Java
java基于云部署的SaaS医院云HIS系统源码 心理CT、B超 lis、电子病历
云HIS系统是一款满足基层医院各类业务需要的健康云产品。该产品能帮助基层医院完成日常各类业务,提供病患预约挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生工作站和护士工作站等一系列常规功能,还能与公卫、PACS等各类外部系统融合,实现多层机构之间的融合管理。
42 12
|
10天前
|
Java
如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?
如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?
46 0
|
12天前
|
Java
JAVA循环结构分析与设计
JAVA循环结构分析与设计
20 1
|
13天前
|
Java
Java语言---面向对象的三大特征之继承
Java语言---面向对象的三大特征之继承
|
19小时前
|
Java
Java一分钟:线程协作:wait(), notify(), notifyAll()
【5月更文挑战第11天】本文介绍了Java多线程编程中的`wait()`, `notify()`, `notifyAll()`方法,它们用于线程间通信和同步。这些方法在`synchronized`代码块中使用,控制线程执行和资源访问。文章讨论了常见问题,如死锁、未捕获异常、同步使用错误及通知错误,并提供了生产者-消费者模型的示例代码,强调理解并正确使用这些方法对实现线程协作的重要性。
9 3