Fabric中的txid exists问题

news2024/11/16 0:46:14

Fabric 默认配置中tls证书有效期为一年,相信挖了不少的坑,我前段时间写了篇文章介绍了下解决的思路,但是自己真解决起来还是没解决问题,这种分布式企业架构太复杂。

最近有遇到一个奇怪的问题,小伙伴写的存证数据,在上链时,10条数据中只能上链2-3条,总是会遇到txid exists问题,而且这个问题似乎只在他的批量程序中出现。

 大过年的遇到这种问题真是让人大为光火,但是一点解决思路都没有。

憋了几天之后,只能继续往下查业务问题,结果发现,业务层因为存储时间精度问题,导致了链上数据每个客户每秒中只能存一条数据,这是因为智能合约中,设置CompositeKey是这么设置的:

key, err := ctx.GetStub().CreateCompositeKey(OwnerId, []string{
		strconv.FormatInt(ExecAt, 10),
	})

我们知道Fabric是用键值对的形式存储数据,而上面这个key是由ownerid和时间戳构成的,原本以为业务层的时间戳是到毫秒级别,对于小型业务还没有问题,但是却发现因为MySQL中的默认的datatime类型所控制的精度是不包含到毫秒,导致传入的其实只有秒。

而开发测试的数据又是由几个样本数据复制出来的,导致大量key值重复。

这个问题解决了之后,txid exists的问题也没有了……

由此我怀疑是不是txid是由交易导致的数据变化hash出来的,查了下fabric sdk java

TransactionContext.java里txid是由一个随机的nonce拼接后缀生成的,按道理应该是每次交易随机的。

 //TODO right now the server does not care need to figure out
private final ByteString nonce = ByteString.copyFrom(Utils.generateNonce());


……

ByteString no = getNonce();

ByteString comp = no.concat(identity.toByteString());

byte[] txh = cryptoPrimitives.hash(comp.toByteArray());

//    txID = Hex.encodeHexString(txh);
txID = new String(Utils.toHexString(txh));

但是这个随机数上面的注释说:TODO right now the server does not care need to figure out(服务器不care这个信息,需要解决。

难道服务器的id生成有我说的问题?我没有继续往下查,项目组都在TODO状态,我们也没法查下去了,如果有遇到txid exists问题的小伙伴记得查一下合约有没有数据重复问题,如果也有,可能还真有这个问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/173783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

plt自定义水平线和垂直线、水平区域和垂直区域

一、添加x轴y轴垂直辅助线 1、函数 axvline函数:绘制垂直线。axhline函数:绘制水平线。 2、参数 plt.axvline(x0, ymin0, ymax1, c"g", ls"--", lw2, labelNone)。axhline类似 x:垂直线在x轴上的位置。浮点数&#xf…

AcWing1227.分巧克力——学习笔记

目录 题目 代码 AC结果 思路: 一、设置全局变量 二、获取数据 三、当前大小可得到的巧克力数是否满足每个小朋友至少分到一块 四、二分法找每个小朋友可得到的最大大小 题目 1227. 分巧克力 - AcWing题库https://www.acwing.com/problem/content/descripti…

Python---函数相关知识

专栏:python 个人主页:HaiFan. 专栏简介:本专栏主要更新一些python的基础知识,也会实现一些小游戏和通讯录,学时管理系统之类的,有兴趣的朋友可以关注一下。 函数前言函数的使用函数的语法格式函数的参数函…

Python脚本集成SQLite3数据库

文章目录一、Sqlite3数据库的基本使用1.数据库是什么2.数据库分类二、正式开始使用SQLite3(Python)1.基础sql命令2.Python连接SQLite3①查询②增加③更新一、Sqlite3数据库的基本使用 1.数据库是什么 借用百科上的话,数据库是“按照数据结构…

yolo v8 解决了 v5 的问题嘛?

文章大纲 yolo v8 简介网络结构yolo v8 准确率的提升yolo v8 的速度提升参考文献与学习路径yolo v8 简介 官网: https://ultralytics.com/yolov8https://github.com/triple-Mu/YOLOv8-TensorRT详细介绍: https://learnopencv.com/ultralytics-yolov8/网络结构 yolo v8 准确率…

I.MX6ULL裸机开发笔记3:SDK烧录镜像

目录 一、获取NXP官方SDK 二、Linux安装SDK 三、SDK中相关工具 四、烧录工具 一、获取NXP官方SDK 官方网站MCIMX6ULL-EVK_i.MX6ULL评估套件_NXP 半导体 二、Linux安装SDK ./XXX.run 这里如果提示sudo ./XXX.run 找不到命令,就可以用ls -l查看当前文件夹文件的…

VVDocumenter-Xcode github README.md 中英文翻译

最近在学习 Xcode 的使用,查到有一款用于生成注释文档的插件:VVDocumenter-Xcode 进入其 github 页面之后看 README,看到两句话: 1. Goodbye World: 再不更新了? 2. 从 Xcode 8 之后Apple官方提供了插件做…

Python爬虫---爬虫介绍,实战案例

目录标题1、爬虫介绍1.1 爬虫的合法性1.2 网络爬虫的尺寸1.3 robots.txt协议1.4 http&https协议1.5 requests模块1.5.1 request库的异常2、实战案例2.1 百度页面2.2 爬取京东商品页面2.3 爬取亚马逊商品页面-更改headers2.4 百度/360搜索关键词提交-params2.5 网络图片的爬…

Nacos 报Statement cancelled due to timeout or client request

1. 问题:nacos 启动报错,启动失败,全部报错下面贴出。 2. 结论:排查结果为服务器带宽不够,mysql 查询的数量量太大,传输时间损坏在网络io上! 3. 下面开始回溯事故起因: 前期config…

2022年一年级入学小结

2022年即将过去,在这里,简单回顾一下Richard同学进入小学一学期后的成长经历和小结。先说说学校生活Richard很喜欢目前的学校,喜爱给他授课的每一位老师,也和老师和同学们相处得不错,自诩自己现在的”粉丝“蛮多。从我…

C++设计模式(6)——适配器模式

亦称: 封装器模式、Wrapper、Adapter 意图 适配器模式是一种结构型设计模式, 它能使接口不兼容的对象能够相互合作。 问题 假如你正在开发一款股票市场监测程序, 它会从不同来源下载 XML 格式的股票数据, 然后向用户呈现出美…

9.框架SpringMVC

一、基本概念 Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet。Spring MVC 使用 MVC 架构模式的思想,将 Web 应用进行职责解构,把一个复杂的 Web 应用划分成模型(Model&#xff09…

HashMap的使用:put、remove和get方法原理

关联项目需求进行FeatureAB上报的时候,我们使用HashSet的add方法存key值,如果key已存在,则add失败,返回false,如果key不存在,add成功,返回true。看源码中HashSet的add(E e)方法实现:…

【Git】IDEA 集成 GitHub

8、IDEA 集成 GitHub 8.1、设置 GitHub 账号 如果出现 401 等情况连接不上的,是因为网络原因,可以使用以下方式连接: 然后去 GitHub 账户上设置 token。 点击生成 token。 复制红框中的字符串到 idea 中。 点击登录。 8.2、分享工程到 GitHu…

【甄选靶场】Vulnhub百个项目渗透——项目五十五:SP-LEOPOLD v1.2(beef联动msf,脏牛提权)

Vulnhub百个项目渗透 Vulnhub百个项目渗透——项目五十五:SP-LEOPOLD v1.2(beef联动msf,脏牛提权) 🔥系列专栏:Vulnhub百个项目渗透 🎉欢迎关注🔎点赞👍收藏⭐️留言&am…

ZooKeeper-集群搭建

5)ZooKeeper 集群搭建 5.1)Zookeeper集群介绍 Leader选举: •Serverid:服务器ID 比如有三台服务器,编号分别是1,2,3。 编号越大在选择算法中的权重越大。 •Zxid:数据ID 服务器中存放的最大数据ID.值越大说明数据 越新&…

剑指offer—day1.用两个栈实现队列、包含min函数的栈

1.用两个栈实现队列 本题来源:力扣 剑指 Offer 09. 用两个栈实现队列 - 力扣(LeetCode)https://leetcode.cn/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/题目描述 用两个栈实现一个队列。队列的声明如下,请实现它的两…

IP-guard如何映射到外网登录访问管理

终端安全管理(endpoint security management)是一种保护网络安全的策略式方法,它需要终端设备在得到访问网络资源的许可之前遵从特定的标准。随着企业信息化发展,终端安全管理系统需求不断扩大,相关系统软件被广泛应用。 IPguard即IP-guard&a…

线段树(重要!多加理解懒惰标记!)

基础概念: 线段(区间)[L,R] 所对应的线段树是由区间 [L,R] 及其子区间构成的二叉树(如下图所示) 线段树具有的特性: (1)线段树的叶结点为只有一个元素的区间,因此长度为…

最新版海豚调度dolphinscheduler-3.1.3安装部署详细教程

0 背景 本文基于Ambari集群搭建最新版本的海豚调度dolphinscheduler-3.1.3版本,后续会尝试整合到Ambari中。 1 安装准备 安装dolphinscheduler需要在环境中安装如下依赖 ① JDK8 下载JDK (1.8),安装并配置 JAVA_HOME 环境变量,并将其下的 …