v2.1.0 升级 v2.3.1 合约执行结果与升级 v2.3.0 结果不一致
【问题分类】
- bug
- P2P网络相关(包含libp2p,liquid)
- 链账户身份与权限相关(证书问题、public、多签投票问题)
- 核心交易引擎相关(交易池、DAG)
- 共识相关
- 智能合约相关
- 存储相关
- SDK相关
- 长安链CMC工具
- 长安链管理台
- 长安链浏览器
- 长安链合约IDE
- 长安链web签名插件
- 跨链相关
- 轻节点相关
- 隐私计算相关
- 密码学相关
- 环境依赖
- 其他补充:
【问题描述】(请对问题进行描述,方便定位问题)
4个节点v2.1.0 停机升级,分别用v2.3.0 和 v2.3.1 版本替换二进制,和lib库。执行合约结果不一致。 v2.3.0结果正确, v2.3.1和v2.1.0结果一致但是都不正确
升级前v2.1.0:
metod: charCodeAt args: [0] result: [48] txid: 174cc6f172895830ca109de92b000e6ce6455331137d41ff9e4b8890be01eced
metod: int2str args: [22] result: [] txid: 174cc6f19773c0e0ca38ec0c81b7e54c4ec20cb526dd43dfb036cd1cc7341be0
metod: tokenURI args: [22] result: [hello world] txid: 174cc6f1bb2937b8cad6ccae6a37d9cabc80535cca6d4f08af0e4e081b3479ed
升级后 v2.3.0
metod: charCodeAt args: [0] result: [48] txid: 174cc72f65992108ca088d36f7f8da2aad359630562a4374b009f2c8bb0bef94
metod: int2str args: [22] result: [2] txid: 174cc72f8f989fd8ca22740c5c0132745a264e57ae864973a39cd50caa6f7405
metod: tokenURI args: [22] result: [hello world2] txid: 174cc72f938ac198cac36fbccebf6ffb4f24844258b94da6908ddd9d577ee07f
清空清空所有数据和进程重新部署v2.1.0 进行升级操作
升级后 v2.3.1
metod: charCodeAt args: [0] result: [48] txid: 174cc7b4d718cd80caaf716212b16e9fe0e353d486cf42e79a7cd30bc8006b6d
metod: int2str args: [22] result: [] txid: 174cc7b4f7753a00ca8b7c71e8aaefda681ad900cd204a41b31fd131a70ee053
metod: tokenURI args: [22] result: [hello world] txid: 174cc7b503a2e318ca235fe13b881f508ba16ac320be450781d76861ce9baa00
另外如果部署的是v2.3.0停机升级为 v2.3.1 ,结果是正确的。
附测试合约:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract BugSimple {
string public _tokenURI = "hello world";
// value < 10
function int2str(uint256 value) public pure returns (string memory) {
bytes memory buffer = new bytes(1);
buffer[0] = bytes1(uint8(48 + uint256(value % 10)));
return string(buffer);
}
function tokenURI(uint256 tokenId) public view returns (string memory) {
return string(abi.encodePacked(_tokenURI, int2str(tokenId)));
}
function baseURI() public view returns (string memory) {
return _tokenURI;
}
function charCodeAt(string memory str) public pure returns (uint256) {
bytes memory b = bytes(str);
return uint256(uint8(b[0]));
}
}
具体的现象,操作步骤,前置条件等,尽可能描述清楚,有截图说明更佳
【相关日志文件】(如果有报错日志请贴图,或者上传附件)
chainmaker-go 的 log/system.log & bin/panic.log file *
SDK 的 sdk.log file
【系统信息】(请填写系统信息,方便定位问题)
- chainmaker-go version * : [v2.1.0]
- OS & version * :
- docker镜像 version:
-
管理台 version:
- 如果是管理台的相关问题,请附带管理台版本,如果不是可忽略。
-
区块浏览器 version:
- 如果是浏览器的相关问题,请附带浏览器版本,如果不是可忽略。
-
合约IDE version:
- 如果是合约IDE的相关问题,请附带合约IDE版本,如果不是可忽略。
-
web签名插件 version:
- 如果是web签名插件的相关问题,请附带web签名插件版本,如果不是可忽略。
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information