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

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

image.png



在合约部署的时候会调用Initialize方法


首先获取到部署命令中的owner参数表示用户名 然后调用链上的方法GetObject来查询该用户名对应的value


智能合约调用的链上的方法就2个 一个是PutObject 将key-value保存到链上


另外一个是GetObject 根据key获取对应的value


如果value为空的话 则初始化一个空的user对象 并转换成json字符串上链保存


合约上链交易的方法


image.png


这个方法首先根据owner(代表用户名称)去链上查询对应的value 根据上面的分析 该value保存着一个用户对象,第一次调用的时候该用户对象是里面的属性都没有进行初始化呢 然后调用putFile方法


image.png


首先初始化一个UserFile对象 这里面保存了一条上链的信息


将该对象作为一个元素 保存到 user对象里面的userfiles这个map集合中 key是filehash value是userFile


然后将用户对象转换成json字符串保存到链上


合约交易查询


image.png


根据filehash遍历该用户对象的userfiles这个map集合 找到对应的userfile元素


截止到这里 是不是发现了 这个存证合约模版的逻辑其实很简单


总结下上面的逻辑


智能合约调用链上的2个方法


  • PutObject 将k-v上链保存


  • GetObject 通过k查询v


一个数据结构


  • 一个user对象 里面有一个map集合 里面的元素是每次上链的数据 可以通过map的key来定位到那一条上链数据


问题发现


filehash重复


大家看过上面的代码有没有发现一个问题


image.png


圈红的地方是将单次上链数据userFile 放入map集合中 ,key是filehash,如果2次上传的filehash相同,那么就会把之前的filehash对应的value值给替换掉


但是呢 相同的上链数据却返回不同的交易id,内部实现机制是怎样的和如果根据公司的业务来定义数据结构以实现智能合约等下一篇文章咱们再分析下。


相关文章
|
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
|
21天前
|
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文件。
43 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
下一篇
无影云桌面