FISCO-BCOS/web3sdk

合约调用完,获取TransactionReceipt 中的blockNumber获取报错

Closed this issue · 3 comments

合约调用完毕,获取 回执中的blockNumber,报org.bcos.web3j.protocol.exceptions.MessageDecodingException: Value must be in format 0x[1-9]+[0-9]* or 0x0

查看源码中Numeric.decodeQuantity 有校验是否数据为0x的判断,但是我debug发现 blockNumber本身就是一个数值,没有0x前缀,是否为BUG?

谢谢反馈,确实有多种返回类型,后续版本解决。建议先使用getBlockNumberRaw,自己判断类型避免这个问题

上述问题,经debug,应该是误用decodeQuantity这个函数造成的,这个函数按理说是给16进制用的,但这里调用则是用于10进制的,因此可以采用如下方式解决
public static BigInteger decodeQuantity(String value) {
if (!isValidHexQuantity(value)) {
try {
return new BigInteger(value);
} catch (NumberFormatException e) {
throw new MessageDecodingException("value is not a hex number or a decimal number");
}
}else{
try {
return new BigInteger(value.substring(2), 16);
} catch (NumberFormatException e) {
throw new MessageDecodingException("Negative ", e);
}
}
}

thx