From 759dfca194e1ab6b4640c3b64520d1707b9ef8ef Mon Sep 17 00:00:00 2001 From: kyonRay Date: Thu, 29 Feb 2024 19:54:01 +0800 Subject: [PATCH] (v2,v3): fix static struct static array bug. --- build.gradle | 4 ++-- .../bcos/codegen/v2/wrapper/SolidityContractWrapper.java | 5 +++++ .../org/fisco/bcos/codegen/v3/wrapper/ContractWrapper.java | 5 +++++ .../java/org/fisco/bcos/codegen/v2/test/CodeGenV2Test.java | 7 +++++++ .../java/org/fisco/bcos/codegen/v3/test/CodeGenV3Test.java | 7 +++++++ src/test/resources/ComplexCodecTest2.abi | 1 + 6 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 src/test/resources/ComplexCodecTest2.abi diff --git a/build.gradle b/build.gradle index 3beec0f..065c847 100644 --- a/build.gradle +++ b/build.gradle @@ -31,7 +31,7 @@ ext { commonsLang3Version = '3.12.0' javaSDKVersion3 = "3.6.0" - javaSDKVersion2 = "2.9.1" + javaSDKVersion2 = "2.10.0-SNAPSHOT" slf4jVersion = "1.7.32" } @@ -50,7 +50,7 @@ sourceSets { // integrationTest.mustRunAfter test allprojects { group = 'org.fisco-bcos.code-generator' - version = '1.3.0' + version = '1.4.0-SNAPSHOT' apply plugin: 'maven-publish' apply plugin: 'idea' apply plugin: 'eclipse' diff --git a/src/main/java/org/fisco/bcos/codegen/v2/wrapper/SolidityContractWrapper.java b/src/main/java/org/fisco/bcos/codegen/v2/wrapper/SolidityContractWrapper.java index eb97518..bb375fc 100644 --- a/src/main/java/org/fisco/bcos/codegen/v2/wrapper/SolidityContractWrapper.java +++ b/src/main/java/org/fisco/bcos/codegen/v2/wrapper/SolidityContractWrapper.java @@ -1651,6 +1651,11 @@ private List buildStructTypes(List functionDefinitions) if (namedType.getType().equals("tuple[]") && internalType.endsWith("[]")) { internalType = internalType.substring(0, internalType.lastIndexOf("[")); } + if (namedType.getType().matches("tuple\\[\\d+\\]") + && internalType.endsWith("]") + && internalType.matches(".*\\[\\d+\\]")) { + internalType = internalType.substring(0, internalType.lastIndexOf("[")); + } if (internalType.contains(".")) { structName = internalType.substring(internalType.lastIndexOf(".") + 1); } else { diff --git a/src/main/java/org/fisco/bcos/codegen/v3/wrapper/ContractWrapper.java b/src/main/java/org/fisco/bcos/codegen/v3/wrapper/ContractWrapper.java index b9a0edb..f9bbbf0 100644 --- a/src/main/java/org/fisco/bcos/codegen/v3/wrapper/ContractWrapper.java +++ b/src/main/java/org/fisco/bcos/codegen/v3/wrapper/ContractWrapper.java @@ -416,6 +416,11 @@ private List buildStructTypes(List functionDefinitions) if (namedType.getType().equals("tuple[]") && internalType.endsWith("[]")) { internalType = internalType.substring(0, internalType.lastIndexOf("[")); } + if (namedType.getType().matches("tuple\\[\\d+\\]") + && internalType.endsWith("]") + && internalType.matches(".*\\[\\d+\\]")) { + internalType = internalType.substring(0, internalType.lastIndexOf("[")); + } if (isWasm) { structName = internalType.substring(internalType.lastIndexOf(".") + 1); } else { diff --git a/src/test/java/org/fisco/bcos/codegen/v2/test/CodeGenV2Test.java b/src/test/java/org/fisco/bcos/codegen/v2/test/CodeGenV2Test.java index 6e76193..5c52ce0 100644 --- a/src/test/java/org/fisco/bcos/codegen/v2/test/CodeGenV2Test.java +++ b/src/test/java/org/fisco/bcos/codegen/v2/test/CodeGenV2Test.java @@ -72,6 +72,13 @@ public void complexABICodeGen() throws IOException { codeGenTest(COMPLEX_ABI_FILE, COMPLEX_NAME); } + @Test + public void complexABICodeGen2() throws IOException { + final String COMPLEX_ABI_FILE = "ComplexCodecTest2.abi"; + final String COMPLEX_NAME = "ComplexCodecTest"; + codeGenTest(COMPLEX_ABI_FILE, COMPLEX_NAME); + } + @Test public void tableABICodeGen() throws IOException { final String ABI_FILE = "Table.abi"; diff --git a/src/test/java/org/fisco/bcos/codegen/v3/test/CodeGenV3Test.java b/src/test/java/org/fisco/bcos/codegen/v3/test/CodeGenV3Test.java index f3b1ba5..8e09bfa 100644 --- a/src/test/java/org/fisco/bcos/codegen/v3/test/CodeGenV3Test.java +++ b/src/test/java/org/fisco/bcos/codegen/v3/test/CodeGenV3Test.java @@ -88,6 +88,13 @@ public void complexABICodeGen() throws IOException { codeGenTest(COMPLEX_ABI_FILE, COMPLEX_NAME); } + @Test + public void complexABICodeGen2() throws IOException { + final String COMPLEX_ABI_FILE = "ComplexCodecTest2.abi"; + final String COMPLEX_NAME = "ComplexCodecTest"; + codeGenTest(COMPLEX_ABI_FILE, COMPLEX_NAME); + } + @Test public void tableABICodeGen() throws IOException { final String ABI_FILE = "Table.abi"; diff --git a/src/test/resources/ComplexCodecTest2.abi b/src/test/resources/ComplexCodecTest2.abi new file mode 100644 index 0000000..99bf5e6 --- /dev/null +++ b/src/test/resources/ComplexCodecTest2.abi @@ -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"},{"anonymous":false,"inputs":[{"components":[{"internalType":"int128","name":"i1","type":"int128"},{"internalType":"uint128","name":"u1","type":"uint128"},{"internalType":"int32[1]","name":"b1","type":"int32[1]"}],"indexed":false,"internalType":"struct StaticStruct","name":"s_static","type":"tuple"}],"name":"BuildStaticStructEvent","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"indexed":false,"internalType":"struct StructA","name":"s_a","type":"tuple"}],"name":"BuildStructAEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string[]","name":"ss","type":"string[]"},{"indexed":false,"internalType":"string[2]","name":"ss_2_array","type":"string[2]"},{"indexed":false,"internalType":"bytes[]","name":"b1","type":"bytes[]"},{"indexed":false,"internalType":"bytes[2]","name":"b2","type":"bytes[2]"},{"indexed":false,"internalType":"bytes[][]","name":"b3","type":"bytes[][]"},{"indexed":false,"internalType":"bytes32[2][3]","name":"b4","type":"bytes32[2][3]"}],"name":"BuildStructCEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string[]","name":"s1","type":"string[]"},{"indexed":false,"internalType":"string[2]","name":"s2","type":"string[2]"}],"name":"StringArrayEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string[][]","name":"s1","type":"string[][]"},{"indexed":false,"internalType":"string[2][]","name":"s2","type":"string[2][]"}],"name":"StringArrayEvent","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"b32_2_array","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"b32_array","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"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_s2_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"}],"name":"b_2_array","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"b_array","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"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":[{"components":[{"internalType":"int128","name":"i1","type":"int128"},{"internalType":"uint128","name":"u1","type":"uint128"},{"internalType":"int32[1]","name":"b1","type":"int32[1]"}],"internalType":"struct StaticStruct[2]","name":"b","type":"tuple[2]"}],"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":[{"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":[{"components":[{"internalType":"string[]","name":"value_str","type":"string[]"},{"internalType":"bytes32[]","name":"bytes32_in_struct","type":"bytes32[]"}],"internalType":"struct StructA","name":"s","type":"tuple"}],"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[]"}],"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[2]","name":"s","type":"tuple[2]"}],"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":"s","type":"tuple[][]"}],"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":[{"internalType":"string","name":"value_str","type":"string"},{"internalType":"bytes[]","name":"b1","type":"bytes[]"},{"internalType":"bytes[2]","name":"b2","type":"bytes[2]"},{"internalType":"bytes[][]","name":"b3","type":"bytes[][]"},{"internalType":"bytes32[2][3]","name":"b4","type":"bytes32[2][3]"}],"name":"buildStructC","outputs":[{"components":[{"internalType":"string[]","name":"d_str","type":"string[]"},{"internalType":"string[2]","name":"d_2_str","type":"string[2]"},{"internalType":"bytes[]","name":"b100","type":"bytes[]"},{"internalType":"bytes[2]","name":"b101","type":"bytes[2]"},{"internalType":"bytes[][]","name":"b102","type":"bytes[][]"},{"internalType":"bytes32[2][3]","name":"b103","type":"bytes32[2][3]"}],"internalType":"struct StructC","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"a","type":"bytes[]"},{"internalType":"bytes32[2]","name":"b","type":"bytes32[2]"}],"name":"getByteArray","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"},{"internalType":"bytes32[2]","name":"","type":"bytes32[2]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[][]","name":"a","type":"bytes[][]"},{"internalType":"bytes32[2][]","name":"b","type":"bytes32[2][]"},{"internalType":"bytes32[2][3]","name":"c","type":"bytes32[2][3]"}],"name":"getByteArrayArray","outputs":[{"internalType":"bytes[][]","name":"","type":"bytes[][]"},{"internalType":"bytes32[2][]","name":"","type":"bytes32[2][]"},{"internalType":"bytes32[2][3]","name":"","type":"bytes32[2][3]"}],"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":"a","type":"tuple"}],"name":"getStaticStruct","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":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"a","type":"string[]"},{"internalType":"string[2]","name":"b","type":"string[2]"}],"name":"getStringArray","outputs":[{"internalType":"string[]","name":"","type":"string[]"},{"internalType":"string[2]","name":"","type":"string[2]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[][]","name":"a","type":"string[][]"},{"internalType":"string[2][]","name":"b","type":"string[2][]"}],"name":"getStringArrayArray","outputs":[{"internalType":"string[][]","name":"","type":"string[][]"},{"internalType":"string[2][]","name":"","type":"string[2][]"}],"stateMutability":"view","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":"uint256","name":"","type":"uint256"}],"name":"s_2_array","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"s_2_array_array","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"s_array","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"s_array_array","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"b1","type":"bytes[][]"},{"internalType":"bytes32[][]","name":"b2","type":"bytes32[][]"},{"internalType":"bytes[2][]","name":"b3","type":"bytes[2][]"}],"name":"setBytesArray","outputs":[{"internalType":"bytes[][]","name":"","type":"bytes[][]"},{"internalType":"bytes32[][]","name":"","type":"bytes32[][]"},{"internalType":"bytes[2][]","name":"","type":"bytes[2][]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"b1","type":"bytes[]"},{"internalType":"bytes32[]","name":"b2","type":"bytes32[]"},{"internalType":"bytes[2]","name":"b3","type":"bytes[2]"}],"name":"setBytesArray","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"},{"internalType":"bytes32[]","name":"","type":"bytes32[]"},{"internalType":"bytes[2]","name":"","type":"bytes[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"},{"inputs":[{"internalType":"string[]","name":"s1","type":"string[]"},{"internalType":"string[2]","name":"s2","type":"string[2]"}],"name":"setStringArray","outputs":[{"internalType":"string[]","name":"","type":"string[]"},{"internalType":"string[2]","name":"","type":"string[2]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[][]","name":"s1","type":"string[][]"},{"internalType":"string[2][]","name":"s2","type":"string[2][]"}],"name":"setStringArray","outputs":[{"internalType":"string[][]","name":"","type":"string[][]"},{"internalType":"string[2][]","name":"","type":"string[2][]"}],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file