Skip to content

Commit 940ec1d

Browse files
committed
<fix>(transaction): fix JsonTransactionResponse decode bug.
1 parent dd8a41a commit 940ec1d

File tree

5 files changed

+206
-58
lines changed

5 files changed

+206
-58
lines changed

src/main/java/org/fisco/bcos/sdk/v3/client/protocol/model/JsonTransactionResponse.java

Lines changed: 34 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@
2727
import org.fisco.bcos.sdk.jni.utilities.tx.Transaction;
2828
import org.fisco.bcos.sdk.jni.utilities.tx.TransactionBuilderJniObj;
2929
import org.fisco.bcos.sdk.jni.utilities.tx.TransactionBuilderV2JniObj;
30+
import org.fisco.bcos.sdk.jni.utilities.tx.TransactionData;
31+
import org.fisco.bcos.sdk.jni.utilities.tx.TransactionDataV2;
3032
import org.fisco.bcos.sdk.jni.utilities.tx.TransactionStructBuilderJniObj;
31-
import org.fisco.bcos.sdk.jni.utilities.tx.TransactionStructBuilderV2JniObj;
32-
import org.fisco.bcos.sdk.jni.utilities.tx.TransactionV2;
3333
import org.fisco.bcos.sdk.jni.utilities.tx.TransactionVersion;
3434
import org.fisco.bcos.sdk.v3.client.exceptions.ClientException;
3535
import org.fisco.bcos.sdk.v3.crypto.CryptoSuite;
@@ -383,52 +383,60 @@ public byte[] encodeTransactionData() throws IOException {
383383

384384
public static JsonTransactionResponse decodeTransactionV1(String hexString)
385385
throws JniException {
386-
TransactionV2 transactionV2 =
387-
TransactionStructBuilderV2JniObj.decodeTransactionStructV2(hexString);
386+
Transaction transactionV2 =
387+
TransactionStructBuilderJniObj.decodeTransactionStructV2(hexString);
388+
TransactionData transactionData = transactionV2.getTransactionData();
388389
JsonTransactionResponse jsonTransactionResponse = new JsonTransactionResponse();
389-
jsonTransactionResponse.setVersion(transactionV2.getTransactionData().getVersion());
390-
jsonTransactionResponse.setHash(Hex.toHexString(transactionV2.getDataHash().getBuffer()));
391-
jsonTransactionResponse.setNonce(transactionV2.getTransactionData().getNonce());
392-
jsonTransactionResponse.setBlockLimit(transactionV2.getTransactionData().getBlockLimit());
393-
jsonTransactionResponse.setTo(transactionV2.getTransactionData().getTo());
394-
// jsonTransactionResponse.setFrom(Hex.toHexString(transactionV2.getSender().getBuffer()));
395-
jsonTransactionResponse.setAbi(transactionV2.getTransactionData().getAbi());
390+
jsonTransactionResponse.setVersion(transactionData.getVersion());
391+
jsonTransactionResponse.setHash(
392+
Hex.toHexStringWithPrefixNullable(transactionV2.getDataHash(), ""));
393+
jsonTransactionResponse.setNonce(transactionData.getNonce());
394+
jsonTransactionResponse.setBlockLimit(transactionData.getBlockLimit());
395+
jsonTransactionResponse.setTo(transactionData.getTo());
396+
jsonTransactionResponse.setFrom(
397+
Hex.toHexStringWithPrefixNullable(transactionV2.getSender(), ""));
398+
jsonTransactionResponse.setAbi(transactionData.getAbi());
396399
jsonTransactionResponse.setInput(
397-
Hex.toHexString(transactionV2.getTransactionData().getInput().getBuffer()));
398-
jsonTransactionResponse.setChainID(transactionV2.getTransactionData().getChainId());
399-
jsonTransactionResponse.setGroupID(transactionV2.getTransactionData().getGroupId());
400+
Hex.toHexStringWithPrefixNullable(transactionData.getInput(), ""));
401+
jsonTransactionResponse.setChainID(transactionData.getChainId());
402+
jsonTransactionResponse.setGroupID(transactionData.getGroupId());
400403
jsonTransactionResponse.setExtraData(transactionV2.getExtraData());
401404
jsonTransactionResponse.setSignature(
402-
Hex.toHexString(transactionV2.getSignature().getBuffer()));
405+
Hex.toHexStringWithPrefixNullable(transactionV2.getSignature(), ""));
403406
jsonTransactionResponse.setImportTime(transactionV2.getImportTime());
404407

405-
jsonTransactionResponse.setValue(transactionV2.getTransactionData().getValue());
406-
jsonTransactionResponse.setGasPrice(transactionV2.getTransactionData().getGasPrice());
407-
jsonTransactionResponse.setGasLimit(transactionV2.getTransactionData().getGasLimit());
408-
jsonTransactionResponse.setMaxFeePerGas(
409-
transactionV2.getTransactionData().getMaxFeePerGas());
410-
jsonTransactionResponse.setMaxPriorityFeePerGas(
411-
transactionV2.getTransactionData().getMaxPriorityFeePerGas());
408+
if (transactionData instanceof TransactionDataV2
409+
&& transactionData.getVersion() == TransactionVersion.V1.getValue()) {
410+
TransactionDataV2 transactionDataV2 = (TransactionDataV2) transactionData;
411+
jsonTransactionResponse.setValue(transactionDataV2.getValue());
412+
jsonTransactionResponse.setGasPrice(transactionDataV2.getGasPrice());
413+
jsonTransactionResponse.setGasLimit(transactionDataV2.getGasLimit());
414+
jsonTransactionResponse.setMaxFeePerGas(transactionDataV2.getMaxFeePerGas());
415+
jsonTransactionResponse.setMaxPriorityFeePerGas(
416+
transactionDataV2.getMaxPriorityFeePerGas());
417+
}
412418
return jsonTransactionResponse;
413419
}
414420

415421
public static JsonTransactionResponse decodeTransaction(String hexString) throws JniException {
416422
Transaction transaction = TransactionStructBuilderJniObj.decodeTransactionStruct(hexString);
417423
JsonTransactionResponse jsonTransactionResponse = new JsonTransactionResponse();
418424
jsonTransactionResponse.setVersion(transaction.getTransactionData().getVersion());
419-
jsonTransactionResponse.setHash(Hex.toHexString(transaction.getDataHash().getBuffer()));
425+
jsonTransactionResponse.setHash(
426+
Hex.toHexStringWithPrefixNullable(transaction.getDataHash(), ""));
420427
jsonTransactionResponse.setNonce(transaction.getTransactionData().getNonce());
421428
jsonTransactionResponse.setBlockLimit(transaction.getTransactionData().getBlockLimit());
422429
jsonTransactionResponse.setTo(transaction.getTransactionData().getTo());
423-
// jsonTransactionResponse.setFrom(Hex.toHexString(transactionV2.getSender().getBuffer()));
430+
jsonTransactionResponse.setFrom(
431+
Hex.toHexStringWithPrefixNullable(transaction.getSender(), ""));
424432
jsonTransactionResponse.setAbi(transaction.getTransactionData().getAbi());
425433
jsonTransactionResponse.setInput(
426-
Hex.toHexString(transaction.getTransactionData().getInput().getBuffer()));
434+
Hex.toHexStringWithPrefixNullable(transaction.getTransactionData().getInput(), ""));
427435
jsonTransactionResponse.setChainID(transaction.getTransactionData().getChainId());
428436
jsonTransactionResponse.setGroupID(transaction.getTransactionData().getGroupId());
429437
jsonTransactionResponse.setExtraData(transaction.getExtraData());
430438
jsonTransactionResponse.setSignature(
431-
Hex.toHexString(transaction.getSignature().getBuffer()));
439+
Hex.toHexStringWithPrefixNullable(transaction.getSignature(), ""));
432440
jsonTransactionResponse.setImportTime(transaction.getImportTime());
433441

434442
return jsonTransactionResponse;

src/main/java/org/fisco/bcos/sdk/v3/config/Config.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,16 @@
1919
import java.io.File;
2020
import org.fisco.bcos.sdk.v3.config.exceptions.ConfigException;
2121
import org.fisco.bcos.sdk.v3.config.model.ConfigProperty;
22+
import org.slf4j.Logger;
23+
import org.slf4j.LoggerFactory;
2224

2325
/**
2426
* Config is to load config file and verify.
2527
*
2628
* @author Maggie
2729
*/
2830
public class Config {
31+
private static final Logger logger = LoggerFactory.getLogger(Config.class);
2932
/**
3033
* @param tomlConfigFile the toml configuration file path
3134
* @return ConfigOption the configuration object
@@ -38,8 +41,10 @@ public static ConfigOption load(String tomlConfigFile) throws ConfigException {
3841
ConfigProperty configProperty = new Toml().read(configFile).to(ConfigProperty.class);
3942
return new ConfigOption(configProperty);
4043
} catch (Exception e) {
44+
logger.error(
45+
"parse Config {} failed, error info: {}", tomlConfigFile, e.getMessage(), e);
4146
throw new ConfigException(
42-
"parse Config " + tomlConfigFile + " failed, error info: " + e.getMessage(), e);
47+
"parse Config " + tomlConfigFile + " failed, please check the config file.");
4348
}
4449
}
4550
}

src/main/java/org/fisco/bcos/sdk/v3/transaction/manager/transactionv2/ProxySignTransactionManager.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,12 @@ public ProxySignTransactionManager(Client client) {
5555
asyncTxSigner = new TransactionJniSignerService(client.getCryptoSuite().getCryptoKeyPair());
5656
}
5757

58+
public ProxySignTransactionManager(
59+
Client client, AsyncTransactionSignercInterface asyncTxSigner) {
60+
this(client);
61+
this.asyncTxSigner = asyncTxSigner;
62+
}
63+
5864
@Override
5965
public ContractGasProvider getGasProvider() {
6066
return contractGasProvider;
@@ -75,12 +81,6 @@ public void setNonceProvider(NonceAndBlockLimitProvider nonceProvider) {
7581
this.nonceProvider = nonceProvider;
7682
}
7783

78-
public ProxySignTransactionManager(
79-
Client client, AsyncTransactionSignercInterface asyncTxSigner) {
80-
super(client);
81-
this.asyncTxSigner = asyncTxSigner;
82-
}
83-
8484
public void setAsyncTransactionSigner(AsyncTransactionSignercInterface asyncTxSigner) {
8585
this.asyncTxSigner = asyncTxSigner;
8686
}

src/main/java/org/fisco/bcos/sdk/v3/utils/Hex.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,17 @@ public static String toHexStringWithPrefix(byte[] data) {
5353
return addPrefix(toHexString(data, 0, data.length));
5454
}
5555

56+
public static String toHexStringWithPrefixNullable(byte[] data, String defaultValue) {
57+
return addPrefix(toHexStringMaybeNullData(data, defaultValue));
58+
}
59+
60+
public static String toHexStringMaybeNullData(byte[] data, String defaultValue) {
61+
if (Objects.isNull(data)) {
62+
return defaultValue;
63+
}
64+
return toHexString(data, 0, data.length);
65+
}
66+
5667
public static String toHexString(byte[] data) {
5768
return toHexString(data, 0, data.length);
5869
}

0 commit comments

Comments
 (0)