Skip to content

Commit

Permalink
<fix>(abi): fix bytes decode to hex string bug. (#785)
Browse files Browse the repository at this point in the history
  • Loading branch information
kyonRay authored Jun 14, 2023
1 parent 912b5ab commit a913c30
Show file tree
Hide file tree
Showing 9 changed files with 459 additions and 17 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-18.04, ubuntu-20.04, macos-latest]
os: [ubuntu-20.04, ubuntu-22.04, macos-latest]
steps:
- uses: actions/checkout@v2
with:
Expand Down
7 changes: 0 additions & 7 deletions sdk-abi/src/main/java/org/fisco/bcos/sdk/abi/ABICodec.java
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,6 @@ public String encodeMethodFromString(String ABI, String methodName, List<String>
for (ABIDefinition abiDefinition : methods) {
if (abiDefinition.getInputs().size() == params.size()) {
ABIObject inputABIObject = abiObjectFactory.createInputObject(abiDefinition);
ABICodecJsonWrapper abiCodecJsonWrapper = new ABICodecJsonWrapper();
try {
String methodId = abiDefinition.getMethodId(cryptoSuite);
return methodId + abiCodecJsonWrapper.encode(inputABIObject, params).encode();
Expand All @@ -242,7 +241,6 @@ public String encodeMethodByIdFromString(String ABI, String methodId, List<Strin
throw new ABICodecException(errorMsg);
}
ABIObject inputABIObject = abiObjectFactory.createInputObject(abiDefinition);
ABICodecJsonWrapper abiCodecJsonWrapper = new ABICodecJsonWrapper();
try {
return methodId + abiCodecJsonWrapper.encode(inputABIObject, params).encode();
} catch (IOException e) {
Expand All @@ -261,7 +259,6 @@ public String encodeMethodByInterfaceFromString(String methodInterface, List<Str
if (abiDefinition.getInputs().size() == params.size()) {
@SuppressWarnings("static-access")
ABIObject inputABIObject = abiObjectFactory.createInputObject(abiDefinition);
ABICodecJsonWrapper abiCodecJsonWrapper = new ABICodecJsonWrapper();
try {
String methodId = abiDefinition.getMethodId(cryptoSuite);
return methodId + abiCodecJsonWrapper.encode(inputABIObject, params).encode();
Expand Down Expand Up @@ -440,7 +437,6 @@ public List<String> decodeMethodToString(String ABI, String methodName, String o
}
for (ABIDefinition abiDefinition : methods) {
ABIObject outputABIObject = abiObjectFactory.createOutputObject(abiDefinition);
ABICodecJsonWrapper abiCodecJsonWrapper = new ABICodecJsonWrapper();
try {
return abiCodecJsonWrapper.decode(outputABIObject, output);
} catch (Exception e) {
Expand Down Expand Up @@ -473,7 +469,6 @@ public List<String> decodeMethodByIdToString(
} else {
outputABIObject = abiObjectFactory.createInputObject(abiDefinition);
}
ABICodecJsonWrapper abiCodecJsonWrapper = new ABICodecJsonWrapper();
try {
return abiCodecJsonWrapper.decode(outputABIObject, data);
} catch (UnsupportedOperationException e) {
Expand Down Expand Up @@ -568,7 +563,6 @@ public List<String> decodeEventToString(String ABI, String eventName, EventLog l
}
for (ABIDefinition abiDefinition : events) {
ABIObject inputObject = abiObjectFactory.createEventInputObject(abiDefinition);
ABICodecJsonWrapper abiCodecJsonWrapper = new ABICodecJsonWrapper();
try {
List<String> params = new ArrayList<>();
if (!log.getData().equals("0x")) {
Expand All @@ -592,7 +586,6 @@ public List<String> decodeEventByTopicToString(String ABI, String eventTopic, Ev
ABIDefinition abiDefinition =
contractABIDefinition.getABIDefinitionByEventTopic(eventTopic);
ABIObject inputObject = abiObjectFactory.createEventInputObject(abiDefinition);
ABICodecJsonWrapper abiCodecJsonWrapper = new ABICodecJsonWrapper();
try {
List<String> params = new ArrayList<>();
if (!log.getData().equals("0x")) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -312,8 +312,13 @@ public static byte[] tryDecodeInputData(String inputData) {
}
} else if (inputData.startsWith("0x")) {
return Hex.decode(inputData.substring(2));
} else {
try {
return Hex.decode(inputData);
} catch (Exception ignored) {
return null;
}
}
return null;
}

public ABIObject encode(ABIObject template, List<String> inputs) throws IOException {
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.model.ConstantConfig;
import org.fisco.bcos.sdk.transaction.model.dto.TransactionResponse;
import org.fisco.bcos.sdk.transaction.tools.JsonUtils;
import org.junit.Assert;
import org.junit.Test;

Expand All @@ -31,22 +32,20 @@ public void test2ComplexDeploy() throws Exception {
client, cryptoKeyPair, abiFile, binFile);
// deploy
List<Object> params = Lists.newArrayList();
params.add("1");
params.add(1);
params.add("2");
params.add("3");
params.add("4");

String abi = FileUtils.readFileToString(new File(abiFile + "CheckInfoManager.abi"));
String bin = FileUtils.readFileToString(new File(binFile + "CheckInfoManager.bin"));
String abi = FileUtils.readFileToString(new File(abiFile + "ComplexSol.abi"));
String bin = FileUtils.readFileToString(new File(binFile + "ComplexSol.bin"));

TransactionResponse txResponse =
transactionProcessor.deployAndGetResponse(abi, bin, params);
// System.out.println(JsonUtils.toJson(txResponse));
System.out.println(JsonUtils.toJson(txResponse));
Assert.assertEquals("0x0", txResponse.getTransactionReceipt().getStatus());

TransactionResponse response =
transactionProcessor.deployByContractLoader("CheckInfoManager", params);
// System.out.println(JsonUtils.toJson(response));
transactionProcessor.deployByContractLoader("ComplexSol", params);
System.out.println(JsonUtils.toJson(response));
Assert.assertEquals("0x0", response.getTransactionReceipt().getStatus());
}
}
1 change: 1 addition & 0 deletions src/test/resources/ecdsa/abi/ComplexCodecTest.abi
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"inputs":[{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA","name":"a","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"b32_array_array","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"b32_s_array_array","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"b_array_array","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"b_s_array_array","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"int128","name":"i1","type":"int128"},{"internalType":"uint128","name":"u1","type":"uint128"},{"internalType":"int32[1]","name":"b1","type":"int32[1]"}],"internalType":"struct StaticStruct","name":"b","type":"tuple"}],"name":"buildStaticStruct","outputs":[{"components":[{"internalType":"int128","name":"i1","type":"int128"},{"internalType":"uint128","name":"u1","type":"uint128"},{"internalType":"int32[1]","name":"b1","type":"int32[1]"}],"internalType":"struct StaticStruct","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int128","name":"i1","type":"int128"},{"internalType":"uint128","name":"u1","type":"uint128"}],"name":"buildStaticStruct","outputs":[{"components":[{"internalType":"int128","name":"i1","type":"int128"},{"internalType":"uint128","name":"u1","type":"uint128"},{"internalType":"int32[1]","name":"b1","type":"int32[1]"}],"internalType":"struct StaticStruct[]","name":"","type":"tuple[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"value_str","type":"string"},{"internalType":"bytes32[]","name":"_b","type":"bytes32[]"}],"name":"buildStructA","outputs":[{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"value_str","type":"string"},{"internalType":"bytes32[]","name":"_b","type":"bytes32[]"},{"internalType":"uint8","name":"size","type":"uint8"}],"name":"buildStructA","outputs":[{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA[]","name":"","type":"tuple[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA","name":"a","type":"tuple"}],"name":"buildStructB","outputs":[{"components":[{"internalType":"string[]","name":"d_str","type":"string[]"},{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA[]","name":"a_struct","type":"tuple[]"}],"internalType":"struct StructB","name":"","type":"tuple"},{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA[]","name":"","type":"tuple[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getStructA","outputs":[{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA","name":"a","type":"tuple"}],"name":"getStructA","outputs":[{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"string[]","name":"d_str","type":"string[]"},{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA[]","name":"a_struct","type":"tuple[]"}],"internalType":"struct StructB","name":"b","type":"tuple"}],"name":"getStructAInStructB","outputs":[{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[][]","name":"b","type":"bytes32[][]"}],"name":"setBytes32ArrayArray","outputs":[{"internalType":"bytes32[][]","name":"","type":"bytes32[][]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[2][]","name":"b","type":"bytes32[2][]"}],"name":"setBytes32StaticArrayArray","outputs":[{"internalType":"bytes32[2][]","name":"","type":"bytes32[2][]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[][]","name":"b","type":"bytes[][]"}],"name":"setBytesArrayArray","outputs":[{"internalType":"bytes[][]","name":"","type":"bytes[][]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[2][]","name":"b","type":"bytes[2][]"}],"name":"setBytesStaticArrayArray","outputs":[{"internalType":"bytes[2][]","name":"","type":"bytes[2][]"}],"stateMutability":"nonpayable","type":"function"}]
1 change: 1 addition & 0 deletions src/test/resources/ecdsa/bin/ComplexCodecTest.bin

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions src/test/resources/gm/abi/ComplexCodecTest.abi
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"inputs":[{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA","name":"a","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"b32_array_array","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"b32_s_array_array","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"b_array_array","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"b_s_array_array","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"int128","name":"i1","type":"int128"},{"internalType":"uint128","name":"u1","type":"uint128"},{"internalType":"int32[1]","name":"b1","type":"int32[1]"}],"internalType":"struct StaticStruct","name":"b","type":"tuple"}],"name":"buildStaticStruct","outputs":[{"components":[{"internalType":"int128","name":"i1","type":"int128"},{"internalType":"uint128","name":"u1","type":"uint128"},{"internalType":"int32[1]","name":"b1","type":"int32[1]"}],"internalType":"struct StaticStruct","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int128","name":"i1","type":"int128"},{"internalType":"uint128","name":"u1","type":"uint128"}],"name":"buildStaticStruct","outputs":[{"components":[{"internalType":"int128","name":"i1","type":"int128"},{"internalType":"uint128","name":"u1","type":"uint128"},{"internalType":"int32[1]","name":"b1","type":"int32[1]"}],"internalType":"struct StaticStruct[]","name":"","type":"tuple[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"value_str","type":"string"},{"internalType":"bytes32[]","name":"_b","type":"bytes32[]"}],"name":"buildStructA","outputs":[{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"value_str","type":"string"},{"internalType":"bytes32[]","name":"_b","type":"bytes32[]"},{"internalType":"uint8","name":"size","type":"uint8"}],"name":"buildStructA","outputs":[{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA[]","name":"","type":"tuple[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA","name":"a","type":"tuple"}],"name":"buildStructB","outputs":[{"components":[{"internalType":"string[]","name":"d_str","type":"string[]"},{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA[]","name":"a_struct","type":"tuple[]"}],"internalType":"struct StructB","name":"","type":"tuple"},{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA[]","name":"","type":"tuple[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getStructA","outputs":[{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA","name":"a","type":"tuple"}],"name":"getStructA","outputs":[{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"string[]","name":"d_str","type":"string[]"},{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA[]","name":"a_struct","type":"tuple[]"}],"internalType":"struct StructB","name":"b","type":"tuple"}],"name":"getStructAInStructB","outputs":[{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[][]","name":"b","type":"bytes32[][]"}],"name":"setBytes32ArrayArray","outputs":[{"internalType":"bytes32[][]","name":"","type":"bytes32[][]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[2][]","name":"b","type":"bytes32[2][]"}],"name":"setBytes32StaticArrayArray","outputs":[{"internalType":"bytes32[2][]","name":"","type":"bytes32[2][]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[][]","name":"b","type":"bytes[][]"}],"name":"setBytesArrayArray","outputs":[{"internalType":"bytes[][]","name":"","type":"bytes[][]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[2][]","name":"b","type":"bytes[2][]"}],"name":"setBytesStaticArrayArray","outputs":[{"internalType":"bytes[2][]","name":"","type":"bytes[2][]"}],"stateMutability":"nonpayable","type":"function"}]
1 change: 1 addition & 0 deletions src/test/resources/gm/bin/ComplexCodecTest.bin

Large diffs are not rendered by default.

0 comments on commit a913c30

Please sign in to comment.