Skip to content

Commit 7234978

Browse files
authored
Merge pull request #678 from FISCO-BCOS/release-2.9.2
sync code 2.9.2
2 parents 782a2a1 + f29bbb9 commit 7234978

File tree

14 files changed

+734
-63
lines changed

14 files changed

+734
-63
lines changed

.ci/ci_check.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/bin/bash
22

33
set -e
4-
tag="v2.7.2"
4+
tag="v2.9.1"
55
LOG_INFO() {
66
local content=${1}
77
echo -e "\033[32m ${content}\033[0m"
@@ -76,11 +76,11 @@ build_node()
7676
{
7777
local node_type="${1}"
7878
if [ "${node_type}" == "sm" ];then
79-
bash -x build_chain.sh -l 127.0.0.1:4 -g
79+
bash build_chain.sh -l 127.0.0.1:4 -g
8080
sed_cmd=$(get_sed_cmd)
8181
$sed_cmd 's/sm_crypto_channel=false/sm_crypto_channel=true/g' nodes/127.0.0.1/node*/config.ini
8282
else
83-
bash -x build_chain.sh -l 127.0.0.1:4
83+
bash build_chain.sh -l 127.0.0.1:4
8484
fi
8585
./nodes/127.0.0.1/fisco-bcos -v
8686
./nodes/127.0.0.1/start_all.sh

Changelog.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,25 @@
1+
## v2.9.2
2+
3+
(2022-10-31)
4+
5+
Please read documentation of Java SDK.
6+
7+
* [English User Handbook](https://fisco-bcos-documentation.readthedocs.io/en/latest/docs/sdk/java_sdk/index.html)
8+
* [Chinese User Handbook](https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/sdk/java_sdk/index.html#)
9+
* [Chinese WIKI](https://github.com/FISCO-BCOS/java-sdk/wiki)
10+
11+
Fix:
12+
13+
* Fixed an issue where 'solidity' generated 'Java' contract code could not compile
14+
* Fix null pointer exception on class TransactionPusherService method pushOnly
15+
16+
----
17+
18+
修复:
19+
20+
* TransactionEncoderInterface添加decode接口
21+
* 修复`solidity`生成`Java`合约代码,合约包含复杂类型时,无法编译的问题
22+
123
## v2.9.1
224

325
(2022-06-15)

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ ext {
1515
ossrhPassword="xxx"
1616
}
1717
// jackson version
18-
jacksonVersion = "2.13.2.2"
18+
jacksonVersion = "2.13.4.2"
1919
commonsIOVersion = "2.4"
2020
commonsLang3Version = "3.1"
2121
javapoetVersion = "1.7.0"
@@ -36,7 +36,7 @@ ext {
3636
// integrationTest.mustRunAfter test
3737
allprojects {
3838
group = 'org.fisco-bcos.java-sdk'
39-
version = '2.9.1'
39+
version = '2.9.2'
4040
apply plugin: 'maven'
4141
apply plugin: 'maven-publish'
4242
apply plugin: 'idea'

sdk-abi/src/main/java/org/fisco/bcos/sdk/abi/TypeDecoder.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -435,9 +435,10 @@ private static <T extends Type> T decodeDynamicStructElements(
435435
int dynamicParametersToProcess =
436436
getDynamicStructDynamicParametersCount(constructor.getParameterTypes());
437437
for (int i = 0; i < length; ++i) {
438+
java.lang.reflect.Type genericParameterType =
439+
constructor.getGenericParameterTypes()[i];
438440
TypeReference<T> typeReferenceElement =
439-
TypeReference.create(
440-
Utils.getClassType(constructor.getGenericParameterTypes()[i]));
441+
TypeReference.create(Utils.getClassType(genericParameterType));
441442
if (isDynamic(typeReferenceElement.getClassType())) {
442443
final boolean isLastParameterInStruct =
443444
dynamicParametersProcessed == (dynamicParametersToProcess - 1);
@@ -453,7 +454,8 @@ private static <T extends Type> T decodeDynamicStructElements(
453454
input,
454455
parameterOffsets.get(dynamicParametersProcessed),
455456
parameterLength,
456-
typeReferenceElement));
457+
typeReferenceElement,
458+
genericParameterType));
457459
dynamicParametersProcessed++;
458460
}
459461
}
@@ -571,7 +573,8 @@ private static <T extends Type> T decodeDynamicParameterFromStruct(
571573
final String input,
572574
final int parameterOffset,
573575
final int parameterLength,
574-
TypeReference<T> typeReference)
576+
TypeReference<T> typeReference,
577+
java.lang.reflect.Type genericParameterType)
575578
throws ClassNotFoundException {
576579
final String dynamicElementData =
577580
input.substring(parameterOffset, parameterOffset + parameterLength);
@@ -580,7 +583,7 @@ private static <T extends Type> T decodeDynamicParameterFromStruct(
580583
if (DynamicStruct.class.isAssignableFrom(typeReference.getClassType())) {
581584
value = decodeDynamicStruct(dynamicElementData, 0, typeReference);
582585
} else if (DynamicArray.class.isAssignableFrom(typeReference.getClassType())) {
583-
value = decodeDynamicArray(dynamicElementData, 0, typeReference.getType());
586+
value = decodeDynamicArray(dynamicElementData, 0, genericParameterType);
584587
} else {
585588
value = decode(dynamicElementData, 0, typeReference.getClassType());
586589
}

sdk-abi/src/main/java/org/fisco/bcos/sdk/abi/datatypes/Array.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.fisco.bcos.sdk.abi.datatypes;
22

3+
import java.util.ArrayList;
34
import java.util.Arrays;
45
import java.util.Collections;
56
import java.util.List;
@@ -41,6 +42,15 @@ public List<T> getValue() {
4142
return value;
4243
}
4344

45+
public List getNativeValue() {
46+
List list = new ArrayList(value.size());
47+
for (T t : value) {
48+
list.add(t.getValue());
49+
}
50+
51+
return list;
52+
}
53+
4454
@Override
4555
public String getTypeAsString() {
4656
return type;

sdk-codegen/src/main/java/org/fisco/bcos/sdk/codegen/SolidityContractWrapper.java

Lines changed: 86 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -136,36 +136,37 @@ public void generateJavaFiles(
136136
classBuilder.addMethod(buildConstructor(CryptoKeyPair.class, CREDENTIAL));
137137

138138
classBuilder.addFields(buildFuncNameConstants(abiDefinitions));
139+
scanABIDefinitions(abiDefinitions);
139140
classBuilder.addTypes(this.buildStructTypes(abiDefinitions));
140-
structsNamedTypeList.addAll(
141-
abiDefinitions
142-
.stream()
143-
.flatMap(
144-
definition -> {
145-
List<ABIDefinition.NamedType> parameters = new ArrayList<>();
146-
if (definition.getInputs() != null) {
147-
parameters.addAll(definition.getInputs());
148-
}
149-
150-
if (definition.getOutputs() != null) {
151-
parameters.addAll(definition.getOutputs());
152-
}
153-
return parameters
154-
.stream()
155-
.filter(
156-
namedType ->
157-
namedType
158-
.getType()
159-
.startsWith("tuple"));
160-
})
161-
.collect(Collectors.toList()));
162141
classBuilder.addMethods(buildFunctionDefinitions(classBuilder, abiDefinitions));
163142
classBuilder.addMethod(buildLoad(className, CryptoKeyPair.class, CREDENTIAL));
164143
classBuilder.addMethods(buildDeployMethods(className, abiDefinitions));
165144

166145
write(basePackageName, classBuilder.build(), destinationDir);
167146
}
168147

148+
private void scanABIDefinitions(List<ABIDefinition> abiDefinitions) {
149+
for (ABIDefinition abiDefinition : abiDefinitions) {
150+
scanParameters(abiDefinition.getInputs());
151+
scanParameters(abiDefinition.getOutputs());
152+
}
153+
}
154+
155+
private void scanParameters(List<ABIDefinition.NamedType> parameters) {
156+
if (parameters != null) {
157+
for (ABIDefinition.NamedType namedType : parameters) {
158+
scanNameType(namedType);
159+
}
160+
}
161+
}
162+
163+
private void scanNameType(ABIDefinition.NamedType namedType) {
164+
if (namedType.getType().startsWith("tuple")) {
165+
structsNamedTypeList.add(namedType);
166+
}
167+
scanParameters(namedType.getComponents());
168+
}
169+
169170
protected void write(String packageName, TypeSpec typeSpec, String destinationDir)
170171
throws IOException {
171172
JavaFile javaFile =
@@ -571,10 +572,7 @@ private String createMappedParameterTypes(ParameterSpec parameterSpec) {
571572
return "new "
572573
+ parameterSpecType
573574
+ "(\n"
574-
+ " "
575-
+ componentType
576-
+ ".class,\n"
577-
+ " org.fisco.bcos.sdk.codec.Utils.typeMap("
575+
+ "org.fisco.bcos.sdk.abi.Utils.typeMap("
578576
+ parameterSpec.name
579577
+ ", "
580578
+ typeMapInput
@@ -621,6 +619,8 @@ protected static TypeName getNativeType(TypeName typeName) {
621619
return TypeName.get(byte[].class);
622620
} else if (simpleName.startsWith(Bool.class.getSimpleName())) {
623621
return TypeName.get(Boolean.class); // boolean cannot be a parameterized type
622+
} else if (simpleName.startsWith("Struct")) {
623+
return typeName;
624624
} else {
625625
throw new UnsupportedOperationException(
626626
"Unsupported type: " + typeName + ", no native type mapping exists.");
@@ -1383,7 +1383,7 @@ private void buildTupleResultContainer(
13831383
.add("$>$>");
13841384

13851385
String resultStringSimple = "\n($T) results.get($L)";
1386-
resultStringSimple += ".getValue()";
1386+
String resultGetValue = ".getValue()";
13871387

13881388
String resultStringNativeList = "\nconvertToNative(($T) results.get($L).getValue())";
13891389

@@ -1394,11 +1394,14 @@ private void buildTupleResultContainer(
13941394
TypeName param = outputParameterTypes.get(i);
13951395
TypeName convertTo = typeArguments.get(i);
13961396

1397-
String resultString = resultStringSimple;
1397+
String resultString = resultStringSimple + resultGetValue;
13981398

1399-
// If we use native java types we need to convert
1400-
// elements of arrays to native java types too
1399+
if (param.equals(convertTo)) {
1400+
resultString = resultStringSimple;
1401+
}
14011402
if (param instanceof ParameterizedTypeName) {
1403+
// If we use native java types we need to convert
1404+
// elements of arrays to native java types too
14021405
ParameterizedTypeName oldContainer = (ParameterizedTypeName) param;
14031406
ParameterizedTypeName newContainer = (ParameterizedTypeName) convertTo;
14041407
if (newContainer.rawType.compareTo(classList) == 0
@@ -1439,11 +1442,11 @@ private void buildTupleResultContainer0(
14391442

14401443
String resultString = resultStringSimple + resultGetValue;
14411444

1442-
// If we use native java types we need to convert
1443-
// elements of arrays to native java types too
14441445
if (param.equals(convertTo)) {
14451446
resultString = resultStringSimple;
14461447
} else if (param instanceof ParameterizedTypeName) {
1448+
// If we use native java types we need to convert
1449+
// elements of arrays to native java types too
14471450
ParameterizedTypeName oldContainer = (ParameterizedTypeName) param;
14481451
ParameterizedTypeName newContainer = (ParameterizedTypeName) convertTo;
14491452
if (newContainer.rawType.compareTo(classList) == 0
@@ -1597,32 +1600,47 @@ private List<TypeSpec> buildStructTypes(List<ABIDefinition> functionDefinitions)
15971600
builder.addField(typeName, component.getName(), Modifier.PUBLIC);
15981601
constructorBuilder.addParameter(typeName, component.getName());
15991602
nativeConstructorBuilder.addParameter(typeName, component.getName());
1603+
1604+
nativeConstructorBuilder.addStatement(
1605+
"this." + component.getName() + " = " + component.getName());
1606+
constructorBuilder.addStatement(
1607+
"this." + component.getName() + " = " + component.getName());
16001608
} else if (component.getType().startsWith("tuple")
16011609
&& component.getType().endsWith("[]")) {
16021610
final TypeName typeName = buildStructArrayTypeName(component);
16031611
builder.addField(typeName, component.getName(), Modifier.PUBLIC);
16041612
constructorBuilder.addParameter(typeName, component.getName());
16051613
nativeConstructorBuilder.addParameter(typeName, component.getName());
1614+
1615+
nativeConstructorBuilder.addStatement(
1616+
"this." + component.getName() + " = " + component.getName());
1617+
constructorBuilder.addStatement(
1618+
"this." + component.getName() + " = " + component.getName());
16061619
} else {
16071620
final TypeName typeName = buildTypeName(component.getType());
16081621
final TypeName nativeTypeName = getNativeType(typeName);
16091622
builder.addField(nativeTypeName, component.getName(), Modifier.PUBLIC);
16101623
constructorBuilder.addParameter(typeName, component.getName());
16111624
nativeConstructorBuilder.addParameter(nativeTypeName, component.getName());
1625+
1626+
nativeConstructorBuilder.addStatement(
1627+
"this." + component.getName() + " = " + component.getName());
1628+
if (component.getType().endsWith("[]")) {
1629+
constructorBuilder.addStatement(
1630+
"this."
1631+
+ component.getName()
1632+
+ " = "
1633+
+ component.getName()
1634+
+ ".getNativeValue()");
1635+
} else {
1636+
constructorBuilder.addStatement(
1637+
"this."
1638+
+ component.getName()
1639+
+ " = "
1640+
+ component.getName()
1641+
+ ".getValue()");
1642+
}
16121643
}
1613-
nativeConstructorBuilder.addStatement(
1614-
"this." + component.getName() + " = " + component.getName());
1615-
constructorBuilder.addStatement(
1616-
"this."
1617-
+ component.getName()
1618-
+ " = "
1619-
+ component.getName()
1620-
+ (structClassNameMap
1621-
.keySet()
1622-
.stream()
1623-
.noneMatch(i -> i == component.structIdentifier())
1624-
? ".getValue()"
1625-
: ""));
16261644
}
16271645

16281646
builder.superclass(namedType.isDynamic() ? DynamicStruct.class : StaticStruct.class);
@@ -1744,14 +1762,29 @@ private String buildStructConstructorParameterDefinition(
17441762
final ABIDefinition.NamedType component = components.get(i);
17451763
stringBuilder.append(i > 0 ? "," : "");
17461764
if (useNativeJavaTypes) {
1747-
stringBuilder.append(
1748-
!component.getType().startsWith("tuple")
1749-
? "new "
1750-
+ buildTypeName(component.getType())
1751-
+ "("
1752-
+ component.getName()
1753-
+ ")"
1754-
: component.getName());
1765+
if (component.getType().startsWith("tuple")) {
1766+
stringBuilder.append(component.getName());
1767+
} else if (component.getType().endsWith("[]")) {
1768+
TypeName typeName = buildTypeName(component.getType());
1769+
TypeName baseType = ((ParameterizedTypeName) typeName).typeArguments.get(0);
1770+
1771+
stringBuilder.append(
1772+
"new "
1773+
+ buildTypeName(component.getType())
1774+
+ "("
1775+
+ component.getName()
1776+
+ ".stream().map(obj -> new "
1777+
+ baseType
1778+
+ "(obj)).collect(java.util.stream.Collectors.toList())"
1779+
+ ")");
1780+
} else {
1781+
stringBuilder.append(
1782+
"new "
1783+
+ buildTypeName(component.getType())
1784+
+ "("
1785+
+ component.getName()
1786+
+ ")");
1787+
}
17551788
} else {
17561789
stringBuilder.append(component.getName());
17571790
}

sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/codec/decode/TransactionDecoderInterface.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.fisco.bcos.sdk.model.TransactionReceipt.Logs;
2323
import org.fisco.bcos.sdk.transaction.model.dto.TransactionResponse;
2424
import org.fisco.bcos.sdk.transaction.model.exception.TransactionException;
25+
import org.fisco.bcos.sdk.transaction.model.po.RawTransaction;
2526

2627
/**
2728
* TransactionDecoderInterface @Description: TransactionDecoderInterface
@@ -30,6 +31,12 @@
3031
*/
3132
public interface TransactionDecoderInterface {
3233

34+
/**
35+
* @param encodedTx
36+
* @return
37+
*/
38+
RawTransaction decode(byte[] encodedTx);
39+
3340
/**
3441
* parse revert message from receipt
3542
*

0 commit comments

Comments
 (0)