智能合约的事件中发送当前系统时间的话,会导致区块反复校验
【问题分类】
- bug
- P2P网络相关(包含libp2p,liquid)
- 链账户身份与权限相关(证书问题、public、多签投票问题)
- 核心交易引擎相关(交易池、DAG)
- 共识相关
- 智能合约相关
- 存储相关
- SDK相关
- 长安链CMC工具
- 长安链管理台
- 长安链浏览器
- 长安链合约IDE
- 长安链web签名插件
- 跨链相关
- 轻节点相关
- 隐私计算相关
- 密码学相关
- 环境依赖
- 其他补充:
【问题描述】(请对问题进行描述,方便定位问题)
在用长安链2.2的时候,在智能合约的事件里获取并发送当前时间会造成交易和区块不停校验,此时继续调用合约在同步模式下会返回错误,区块链浏览器的订阅也停了。
后来换了v2.3.0_alpha,在system日志里仍然可以看到有校验失败,但过几分钟就不校验了,下面的日志和合约附件都是是2.3的,不过如果短时间内调用智能合约次数过多,我是调了1000次,仍然会造成长时间不能通过SDK的同步模式获取调用结果,SDK调用系统合约比如增加trustroot,也会返回错误(根据查询结果,其实成功添加了trustroot),如果是调用只查询的系统合约则不返回错误(这时没有生成新区块),能正常返回数据。
现在把智能合约里获取系统时间和遍历map取第一个元素地逻辑(在go里遍历map每次第一个元素可能不同)去掉,就没有错误了,但对于这种问题仍然很顾忌,因为一旦不小心加入了在不同节点会有不同结果的数据会造成链在一定时间内不可用,在2.2版本更是永远不可恢复,只能弃链。
按群里“华金”的说法,“这种问题应该要解决的,必须要严格的校验和交易验证机制,不能让这种不一致的交易写到区块里面, fabric就没有这种问题,背书不会通过,不会写区块”
save_bak.go
【相关日志文件】(如果有报错日志请贴图,或者上传附件)
由于不停校验,这一小时有170多MB日志 system.log.2022101717
【系统信息】(请填写系统信息,方便定位问题)
- chainmaker-go version * : [v2.3.0_alpha]
- OS & version * : centos7.8
- docker镜像 version:
-
管理台 version:
- 如果是管理台的相关问题,请附带管理台版本,如果不是可忽略。
-
区块浏览器 version:
- 如果是浏览器的相关问题,请附带浏览器版本,如果不是可忽略。
-
合约IDE version: go合约2.3
- 如果是合约IDE的相关问题,请附带合约IDE版本,如果不是可忽略。
-
web签名插件 version:
- 如果是web签名插件的相关问题,请附带web签名插件版本,如果不是可忽略。
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information