diff --git a/build.gradle b/build.gradle index 69bd4b127..b1c142e3a 100644 --- a/build.gradle +++ b/build.gradle @@ -230,7 +230,7 @@ publishing { pom { name = 'fisco-bcos' description = 'fisco-bcos java-sdk' - url = 'http://www.fisco-bcos.org' + url = 'https://github.com/FISCO-BCOS/java-sdk' licenses { license { diff --git a/src/main/java/org/fisco/bcos/sdk/v3/codec/ContractCodec.java b/src/main/java/org/fisco/bcos/sdk/v3/codec/ContractCodec.java index 3e21e854c..d433e4bb1 100644 --- a/src/main/java/org/fisco/bcos/sdk/v3/codec/ContractCodec.java +++ b/src/main/java/org/fisco/bcos/sdk/v3/codec/ContractCodec.java @@ -680,7 +680,15 @@ public List decodeConstructorInput(String abi, String bin, String input) ContractABIDefinition contractABIDefinition = this.abiDefinitionFactory.loadABI(abi); ABIDefinition abiDefinition = contractABIDefinition.getConstructor(); - return this.decodeMethodAndGetInputObject(abiDefinition, paramsInput).getLeft(); + ABIObject inputObject = ABIObjectFactory.createInputObject(abiDefinition); + try { + return ContractCodecTools.decodeJavaObject(inputObject, paramsInput, isWasm); + } catch (Exception e) { + logger.error(" exception in decodeConstructorInput : {}", e.getMessage()); + } + String errorMsg = " cannot decode in decodeConstructorInput with appropriate interface ABI"; + logger.error(errorMsg); + throw new ContractCodecException(errorMsg); } public List decodeConstructorInputToString(String abi, String bin, String input) diff --git a/src/test/java/org/fisco/bcos/sdk/v3/test/codec/ABICodecTest.java b/src/test/java/org/fisco/bcos/sdk/v3/test/codec/ABICodecTest.java index dae84e153..d930899d6 100644 --- a/src/test/java/org/fisco/bcos/sdk/v3/test/codec/ABICodecTest.java +++ b/src/test/java/org/fisco/bcos/sdk/v3/test/codec/ABICodecTest.java @@ -377,6 +377,31 @@ public void testEncodeConstructor() { } } + @Test + public void testDecodeConstructorInputWithParams() { + String constructorAbi = + "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"b\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}]"; + List args = new ArrayList(); + args.add("4660"); + args.add("hello constructor"); + ContractCodec abiCodec = new ContractCodec(TestUtils.getCryptoSuite(), false); + try { + byte[] constructorEncode = + abiCodec.encodeConstructorFromString(constructorAbi, "0xaaaaaaaa", args); + String input = "0x" + Hex.toHexString(constructorEncode); + List decoded = + abiCodec.decodeConstructorInput(constructorAbi, "0xaaaaaaaa", input); + List decodedString = + abiCodec.decodeConstructorInputToString(constructorAbi, "0xaaaaaaaa", input); + Assert.assertEquals(args.size(), decoded.size()); + Assert.assertEquals(new BigInteger(args.get(0)), decoded.get(0)); + Assert.assertEquals(args.get(1), decoded.get(1)); + Assert.assertEquals(args, decodedString); + } catch (Exception e) { + Assert.fail(e.getMessage()); + } + } + @Test public void testEncodeConstructorWithInvalidParams() { List args = new ArrayList();