Skip to content

Commit f093840

Browse files
committed
<fix>(codec,crypto): deprecated Codec unnecessarily depends CryptoSuite.
1 parent bb91f71 commit f093840

File tree

22 files changed

+439
-181
lines changed

22 files changed

+439
-181
lines changed

.ci/ci_check.sh

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -170,28 +170,39 @@ LOG_INFO "------ download_binary: v3.1.0---------"
170170
download_build_chain "v3.1.0"
171171
download_binary "v3.1.0"
172172
LOG_INFO "------ check_standard_node---------"
173-
check_standard_node
173+
check_standard_node "true" "normal" "-A"
174174
rm -rf ./bin
175175

176-
LOG_INFO "------ download_binary: v3.2.0---------"
177-
download_build_chain "v3.2.0"
178-
download_binary "v3.2.0"
176+
LOG_INFO "------ download_binary: v3.2.3---------"
177+
download_build_chain "v3.2.3"
178+
download_binary "v3.2.3"
179179
LOG_INFO "------ check_standard_node---------"
180+
check_standard_node "false" "normal" "-A"
181+
LOG_INFO "------ check_sm_node---------"
180182
check_standard_node "true" "sm" "-s -A"
181183
rm -rf ./bin
182184

183185
LOG_INFO "------ download_build_chain: v3.3.0---------"
184186
download_binary "v3.3.0"
185187
download_build_chain "v3.3.0"
186188
LOG_INFO "------ check_standard_node---------"
187-
check_standard_node "true" "sm" "-s"
189+
check_standard_node "true"
188190
rm -rf ./bin
189191

190192
LOG_INFO "------ download_build_chain: v3.4.0---------"
191193
download_binary "v3.4.0"
192194
download_build_chain "v3.4.0"
195+
LOG_INFO "------ check_standard_node---------"
196+
check_standard_node "true"
197+
rm -rf ./bin
198+
199+
LOG_INFO "------ download_build_chain: v3.5.0---------"
200+
download_binary "v3.5.0"
201+
download_build_chain "v3.5.0"
193202
LOG_INFO "------ check_wasm_node---------"
194203
check_wasm_node "false"
195204
LOG_INFO "------ check_standard_node---------"
205+
check_standard_node "false" "normal"
206+
LOG_INFO "------ check_standard_node---------"
196207
check_standard_node "true" "sm" "-s"
197208
rm -rf ./bin

.github/workflows/workflow.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ jobs:
5151
run: ./gradlew.bat build
5252
- name: run integration testing
5353
# FIXME: macOS WASM integration testing failed
54-
if: runner.os != 'Windows' && runner.os != 'macOS'
54+
if: runner.os != 'Windows'
5555
run: /bin/bash .ci/ci_check.sh
5656

5757
build-centos:

src/integration-test/java/org/fisco/bcos/sdk/v3/test/BcosSDKTest.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -93,28 +93,26 @@ public void testClient() {
9393

9494
// test getBlockNumber
9595
BlockNumber blockNumber = client.getBlockNumber();
96-
System.out.println("blockNumber=" + blockNumber.getBlockNumber());
96+
Assert.assertTrue(blockNumber.getBlockNumber().compareTo(BigInteger.ZERO) >= 0);
9797

9898
BlockHash blockHashByNumber = client.getBlockHashByNumber(blockNumber.getBlockNumber());
99-
System.out.println("blockHash=" + blockHashByNumber.getBlockHashByNumber());
99+
Assert.assertNotNull(blockHashByNumber.getBlockHashByNumber());
100100

101101
// test getBlockByNumber only header
102-
BcosBlock onlyHeader = client.getBlockByNumber(blockNumber.getBlockNumber(), false, false);
103-
System.out.println("block header=" + onlyHeader.getBlock());
102+
BcosBlock onlyHeader = client.getBlockByNumber(blockNumber.getBlockNumber(), true, false);
104103
Assert.assertEquals(onlyHeader.getBlock().getHash(), blockHashByNumber.getBlockHashByNumber());
105104

106105
// test getBlockByNumber
107106
BcosBlock block = client.getBlockByNumber(blockNumber.getBlockNumber(), false, false);
108-
System.out.println("block block=" + block.getBlock());
107+
Assert.assertEquals(block.getBlock().getHash(), blockHashByNumber.getBlockHashByNumber());
109108
// getBlockByHash
110109

111110
BcosBlock block0 = client.getBlockByHash(block.getBlock().getHash(), false, false);
112-
System.out.println("block block=" + block0.getBlock());
113111
Assert.assertEquals(block.getBlock(), block0.getBlock());
114112

115113
// get SealerList
116114
SealerList sealerList = client.getSealerList();
117-
System.out.println(sealerList.getSealerList());
115+
Assert.assertFalse(sealerList.getSealerList().isEmpty());
118116

119117
// get observerList
120118
ObserverList observerList = client.getObserverList();
@@ -134,7 +132,7 @@ public void testClient() {
134132

135133
// get getTotalTransactionCount
136134
TotalTransactionCount totalTransactionCount = client.getTotalTransactionCount();
137-
System.out.println(totalTransactionCount.getTotalTransactionCount());
135+
Assert.assertTrue(Integer.parseInt(totalTransactionCount.getTotalTransactionCount().getTransactionCount()) >= 0);
138136

139137
// get getPeers
140138
Peers peers = client.getPeers();
@@ -248,7 +246,7 @@ public void onError(Response errorResponse) {
248246

249247
// get getTotalTransactionCount
250248
TotalTransactionCount totalTransactionCount = client.getTotalTransactionCount();
251-
System.out.println(totalTransactionCount.getTotalTransactionCount());
249+
Assert.assertTrue(Integer.parseInt(totalTransactionCount.getTotalTransactionCount().getTransactionCount()) >= 0);
252250

253251
// get getPeers
254252
Peers peers = client.getPeers();
@@ -261,7 +259,7 @@ public void onError(Response errorResponse) {
261259
client.getTotalTransactionCountAsync(new RespCallback<TotalTransactionCount>() {
262260
@Override
263261
public void onResponse(TotalTransactionCount totalTransactionCount) {
264-
System.out.println("totalTransactionCount=" + totalTransactionCount.getTotalTransactionCount());
262+
Assert.assertTrue(Integer.parseInt(totalTransactionCount.getTotalTransactionCount().getTransactionCount()) >= 0);
265263
}
266264

267265
@Override

src/integration-test/java/org/fisco/bcos/sdk/v3/test/transaction/manager/AssembleTransactionWithRemoteSignProcessorTest.java

Lines changed: 40 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,24 @@
1818
import java.util.Collections;
1919
import java.util.List;
2020
import java.util.concurrent.CompletableFuture;
21+
2122
import org.apache.commons.lang3.StringUtils;
23+
import org.fisco.bcos.sdk.jni.utilities.tx.TransactionBuilderJniObj;
2224
import org.fisco.bcos.sdk.v3.BcosSDK;
2325
import org.fisco.bcos.sdk.v3.client.Client;
26+
import org.fisco.bcos.sdk.v3.codec.ContractCodec;
2427
import org.fisco.bcos.sdk.v3.crypto.keypair.CryptoKeyPair;
28+
import org.fisco.bcos.sdk.v3.crypto.signature.SignatureResult;
2529
import org.fisco.bcos.sdk.v3.model.ConstantConfig;
2630
import org.fisco.bcos.sdk.v3.model.TransactionReceipt;
31+
import org.fisco.bcos.sdk.v3.model.callback.TransactionCallback;
2732
import org.fisco.bcos.sdk.v3.test.transaction.mock.RemoteSignCallbackMock;
2833
import org.fisco.bcos.sdk.v3.test.transaction.mock.RemoteSignProviderMock;
2934
import org.fisco.bcos.sdk.v3.transaction.manager.AssembleTransactionWithRemoteSignProcessor;
3035
import org.fisco.bcos.sdk.v3.transaction.manager.TransactionProcessorFactory;
31-
import org.fisco.bcos.sdk.v3.transaction.model.dto.CallResponse;
3236
import org.fisco.bcos.sdk.v3.transaction.model.dto.TransactionResponse;
3337
import org.fisco.bcos.sdk.v3.transaction.signer.RemoteSignProviderInterface;
38+
import org.fisco.bcos.sdk.v3.utils.Hex;
3439
import org.junit.Assert;
3540
import org.junit.FixMethodOrder;
3641
import org.junit.Test;
@@ -60,7 +65,8 @@ public class AssembleTransactionWithRemoteSignProcessorTest {
6065
private RemoteSignProviderInterface remoteSignProviderMock =
6166
new RemoteSignProviderMock(this.client.getCryptoSuite());
6267

63-
public AssembleTransactionWithRemoteSignProcessorTest() {}
68+
public AssembleTransactionWithRemoteSignProcessorTest() {
69+
}
6470

6571
@Test
6672
public void test1HelloWorldSync() throws Exception {
@@ -77,32 +83,38 @@ public void test1HelloWorldSync() throws Exception {
7783
assembleTransactionWithRemoteSignProcessor
7884
.getContractLoader()
7985
.getABIByContractName("HelloWorld");
80-
// function1: deploy sync
81-
TransactionResponse response =
82-
assembleTransactionWithRemoteSignProcessor.deployByContractLoader(
83-
"HelloWorld", new ArrayList<>());
84-
System.out.println("--- finish deploy with sync ---");
85-
Assert.assertEquals(response.getTransactionReceipt().getStatus(), 0);
86-
Assert.assertEquals(0, response.getReturnCode());
87-
Assert.assertEquals(0, response.getTransactionReceipt().getStatus());
88-
String helloWorldAddress = response.getContractAddress();
89-
Assert.assertTrue(
90-
StringUtils.isNotBlank(response.getContractAddress())
91-
&& !StringUtils.equalsIgnoreCase(
92-
helloWorldAddress,
93-
"0x0000000000000000000000000000000000000000000000000000000000000000"));
86+
String bin = assembleTransactionWithRemoteSignProcessor.getContractLoader().getBinaryByContractName("HelloWorld");
9487

95-
// function2: send transaction `HelloWorld.set("test")` sync
96-
TransactionResponse transactionResponse2 =
97-
assembleTransactionWithRemoteSignProcessor.sendTransactionAndGetResponse(
98-
helloWorldAddress, abi, "set", this.params);
99-
Assert.assertEquals(0, transactionResponse2.getTransactionReceipt().getStatus());
88+
ContractCodec contractCodec = new ContractCodec(client.getCryptoSuite().getHashImpl(), client.isWASM());
89+
90+
long transactionData = TransactionBuilderJniObj.createTransactionData(
91+
"group0",
92+
"chain0",
93+
"",
94+
Hex.toHexString(contractCodec.encodeConstructor(abi, bin, params)),
95+
abi,
96+
client.getBlockLimit().longValue());
97+
98+
String rawTxHash = TransactionBuilderJniObj.calcTransactionDataHash(client.getCryptoSuite().cryptoTypeConfig, transactionData);
99+
100+
SignatureResult signatureResult = remoteSignProviderMock.requestForSign(Hex.decode(rawTxHash), this.client.getCryptoSuite().cryptoTypeConfig);
101+
102+
String signedTransaction = TransactionBuilderJniObj.createSignedTransaction(transactionData, Hex.toHexString(signatureResult.encode()), rawTxHash, 0);
103+
104+
CompletableFuture<TransactionReceipt> receiptCompletableFuture = new CompletableFuture<>();
105+
assembleTransactionWithRemoteSignProcessor.sendTransactionAsync(signedTransaction, new TransactionCallback() {
106+
@Override
107+
public void onResponse(TransactionReceipt receipt) {
108+
receiptCompletableFuture.complete(receipt);
109+
}
110+
});
111+
112+
TransactionReceipt transactionReceipt = receiptCompletableFuture.get();
100113

101-
// function3: call, which only support sync mode.
102-
CallResponse callResponse1 =
103-
assembleTransactionWithRemoteSignProcessor.sendCallByContractLoader(
104-
"HelloWorld", helloWorldAddress, "get", new ArrayList<>());
105-
Assert.assertEquals("test", callResponse1.getResults().get(0).getValue());
114+
Assert.assertEquals(transactionReceipt.getStatus(), 0);
115+
Assert.assertFalse(transactionReceipt.getContractAddress().isEmpty());
116+
String abi1 = client.getABI(transactionReceipt.getContractAddress()).getABI();
117+
Assert.assertEquals(abi1, abi);
106118
}
107119

108120
@Test
@@ -135,8 +147,8 @@ public void test2HelloWorldAsync() throws Exception {
135147
Assert.assertTrue(
136148
StringUtils.isNotBlank(response.getContractAddress())
137149
&& !StringUtils.equalsIgnoreCase(
138-
helloWorldAddress,
139-
"0x0000000000000000000000000000000000000000000000000000000000000000"));
150+
helloWorldAddress,
151+
"0x0000000000000000000000000000000000000000000000000000000000000000"));
140152

141153
// function2: deploy async with callback
142154
long transactionData =

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

Lines changed: 46 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -239,45 +239,52 @@ public int hashCode() {
239239

240240
@Override
241241
public String toString() {
242-
return "{"
243-
+ "version='"
244-
+ this.version
245-
+ '\''
246-
+ ", from='"
247-
+ this.from
248-
+ '\''
249-
+ ", hash='"
250-
+ this.hash
251-
+ '\''
252-
+ ", input='"
253-
+ this.input
254-
+ '\''
255-
+ ", nonce='"
256-
+ this.nonce
257-
+ '\''
258-
+ ", to='"
259-
+ this.getTo()
260-
+ '\''
261-
+ ", abi='"
262-
+ this.abi
263-
+ '\''
264-
+ ", blockLimit='"
265-
+ this.blockLimit
266-
+ '\''
267-
+ ", chainId='"
268-
+ this.chainID
269-
+ '\''
270-
+ ", groupID='"
271-
+ this.groupID
272-
+ '\''
273-
+ ", txProof='"
274-
+ this.txProof
275-
+ '\''
276-
+ ", signature="
277-
+ this.signature
278-
+ ", extraData="
279-
+ this.extraData
280-
+ '}';
242+
try {
243+
return ObjectMapperFactory.getObjectMapper().writeValueAsString(this);
244+
} catch (Exception ignored) {
245+
return "JsonTransactionResponse{"
246+
+ "version="
247+
+ version
248+
+ ", hash='"
249+
+ hash
250+
+ '\''
251+
+ ", nonce='"
252+
+ nonce
253+
+ '\''
254+
+ ", blockLimit="
255+
+ blockLimit
256+
+ ", to='"
257+
+ to
258+
+ '\''
259+
+ ", from='"
260+
+ from
261+
+ '\''
262+
+ ", abi='"
263+
+ abi
264+
+ '\''
265+
+ ", input='"
266+
+ input
267+
+ '\''
268+
+ ", chainID='"
269+
+ chainID
270+
+ '\''
271+
+ ", groupID='"
272+
+ groupID
273+
+ '\''
274+
+ ", extraData='"
275+
+ extraData
276+
+ '\''
277+
+ ", signature='"
278+
+ signature
279+
+ '\''
280+
+ ", importTime="
281+
+ importTime
282+
+ ", transactionProof="
283+
+ transactionProof
284+
+ ", txProof="
285+
+ txProof
286+
+ '}';
287+
}
281288
}
282289

283290
public String getExtraData() {

src/main/java/org/fisco/bcos/sdk/v3/codec/ContractCodec.java

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@
4848
import org.fisco.bcos.sdk.v3.codec.wrapper.ContractCodecJsonWrapper;
4949
import org.fisco.bcos.sdk.v3.codec.wrapper.ContractCodecTools;
5050
import org.fisco.bcos.sdk.v3.crypto.CryptoSuite;
51+
import org.fisco.bcos.sdk.v3.crypto.hash.Hash;
52+
import org.fisco.bcos.sdk.v3.crypto.hash.Keccak256;
53+
import org.fisco.bcos.sdk.v3.crypto.hash.SM3Hash;
54+
import org.fisco.bcos.sdk.v3.model.CryptoType;
5155
import org.fisco.bcos.sdk.v3.model.EventLog;
5256
import org.fisco.bcos.sdk.v3.utils.Hex;
5357
import org.fisco.bcos.sdk.v3.utils.Numeric;
@@ -61,6 +65,7 @@ public class ContractCodec {
6165
private static final Logger logger = LoggerFactory.getLogger(ContractCodec.class);
6266

6367
private final CryptoSuite cryptoSuite;
68+
private final Hash hashImpl;
6469
private final boolean isWasm;
6570
private final ObjectMapper objectMapper = ObjectMapperFactory.getObjectMapper();
6671
private FunctionEncoderInterface functionEncoder = null;
@@ -69,25 +74,53 @@ public class ContractCodec {
6974
private final ContractCodecJsonWrapper contractCodecJsonWrapper =
7075
new ContractCodecJsonWrapper();
7176

77+
@Deprecated
7278
public ContractCodec(CryptoSuite cryptoSuite, boolean isWasm) {
7379
this.cryptoSuite = cryptoSuite;
80+
this.hashImpl = cryptoSuite.getHashImpl();
81+
this.isWasm = isWasm;
82+
if (isWasm) {
83+
this.functionEncoder =
84+
new org.fisco.bcos.sdk.v3.codec.scale.FunctionEncoder(this.hashImpl);
85+
this.functionReturnDecoder = new FunctionReturnDecoder();
86+
} else {
87+
this.functionEncoder =
88+
new org.fisco.bcos.sdk.v3.codec.abi.FunctionEncoder(this.hashImpl);
89+
this.functionReturnDecoder =
90+
new org.fisco.bcos.sdk.v3.codec.abi.FunctionReturnDecoder();
91+
}
92+
this.abiDefinitionFactory = new ABIDefinitionFactory(hashImpl);
93+
}
94+
95+
public ContractCodec(Hash hashImpl, boolean isWasm) {
96+
this.hashImpl = hashImpl;
7497
this.isWasm = isWasm;
7598
if (isWasm) {
7699
this.functionEncoder =
77-
new org.fisco.bcos.sdk.v3.codec.scale.FunctionEncoder(cryptoSuite);
100+
new org.fisco.bcos.sdk.v3.codec.scale.FunctionEncoder(this.hashImpl);
78101
this.functionReturnDecoder = new FunctionReturnDecoder();
79102
} else {
80-
this.functionEncoder = new org.fisco.bcos.sdk.v3.codec.abi.FunctionEncoder(cryptoSuite);
103+
this.functionEncoder =
104+
new org.fisco.bcos.sdk.v3.codec.abi.FunctionEncoder(this.hashImpl);
81105
this.functionReturnDecoder =
82106
new org.fisco.bcos.sdk.v3.codec.abi.FunctionReturnDecoder();
83107
}
84-
this.abiDefinitionFactory = new ABIDefinitionFactory(cryptoSuite);
108+
this.abiDefinitionFactory = new ABIDefinitionFactory(this.hashImpl);
109+
// for compatibility
110+
if (this.hashImpl instanceof SM3Hash) {
111+
this.cryptoSuite = new CryptoSuite(CryptoType.SM_TYPE);
112+
} else if (this.hashImpl instanceof Keccak256) {
113+
this.cryptoSuite = new CryptoSuite(CryptoType.ECDSA_TYPE);
114+
} else {
115+
this.cryptoSuite = null;
116+
}
85117
}
86118

87119
public boolean isWasm() {
88120
return isWasm;
89121
}
90122

123+
@Deprecated
91124
public CryptoSuite getCryptoSuite() {
92125
return this.cryptoSuite;
93126
}

0 commit comments

Comments
 (0)