Skip to content

Commit c01efd5

Browse files
authored
Merge pull request #646 from kyonRay/dev
<fix>(transaction): add async call interface in transaction process.
2 parents 2cb48df + 664978a commit c01efd5

File tree

5 files changed

+144
-3
lines changed

5 files changed

+144
-3
lines changed

build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,14 @@ ext {
2727
guavaVersion = '30.1.1-jre'
2828
bcosSdkJniVersion = "3.0.0"
2929
slf4jApiVerison = "1.7.36"
30-
mockitoVersion = "4.6.1"
30+
mockitoVersion = '4.7.0'
3131
}
3232

3333
// check.dependsOn integrationTest
3434
// integrationTest.mustRunAfter test
3535
allprojects {
3636
group = 'org.fisco-bcos.java-sdk'
37-
version = '3.0.0'
37+
version = '3.0.1-SNAPSHOT'
3838
apply plugin: 'maven-publish'
3939
apply plugin: 'idea'
4040
apply plugin: 'eclipse'
@@ -71,7 +71,7 @@ allprojects {
7171
api("org.slf4j:slf4j-api:${slf4jApiVerison}")
7272
testImplementation("junit:junit:${junitVersion}")
7373
testImplementation("org.apache.commons:commons-collections4:${commonsCollections4Version}")
74-
testImplementation("com.google.guava:guava:${guavaVersion}")
74+
// testImplementation("com.google.guava:guava:${guavaVersion}")
7575
testImplementation("org.mockito:mockito-core:${mockitoVersion}")
7676
}
7777

sdk-transaction/src/main/java/org/fisco/bcos/sdk/v3/transaction/manager/AssembleTransactionProcessor.java

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,15 @@
2626
import org.fisco.bcos.sdk.jni.utilities.tx.TransactionBuilderJniObj;
2727
import org.fisco.bcos.sdk.jni.utilities.tx.TxPair;
2828
import org.fisco.bcos.sdk.v3.client.Client;
29+
import org.fisco.bcos.sdk.v3.client.RespCallback;
2930
import org.fisco.bcos.sdk.v3.client.protocol.response.Call;
3031
import org.fisco.bcos.sdk.v3.codec.ContractCodec;
3132
import org.fisco.bcos.sdk.v3.codec.ContractCodecException;
3233
import org.fisco.bcos.sdk.v3.codec.datatypes.Type;
3334
import org.fisco.bcos.sdk.v3.codec.wrapper.ABIObject;
3435
import org.fisco.bcos.sdk.v3.crypto.keypair.CryptoKeyPair;
3536
import org.fisco.bcos.sdk.v3.model.PrecompiledRetCode;
37+
import org.fisco.bcos.sdk.v3.model.Response;
3638
import org.fisco.bcos.sdk.v3.model.RetCode;
3739
import org.fisco.bcos.sdk.v3.model.TransactionReceipt;
3840
import org.fisco.bcos.sdk.v3.model.callback.TransactionCallback;
@@ -434,6 +436,52 @@ public CallResponse sendCall(CallRequest callRequest)
434436
return callResponse;
435437
}
436438

439+
@Override
440+
public void sendCallAsync(
441+
String from,
442+
String to,
443+
String abi,
444+
String functionName,
445+
List<Object> params,
446+
RespCallback<CallResponse> callback)
447+
throws ContractCodecException {
448+
byte[] data = this.contractCodec.encodeMethod(abi, functionName, params);
449+
callAndGetResponseAsync(from, to, abi, functionName, data, callback);
450+
}
451+
452+
@Override
453+
public void sendCallAsync(CallRequest callRequest, RespCallback<CallResponse> callback) {
454+
this.asyncExecuteCall(
455+
callRequest,
456+
new RespCallback<Call>() {
457+
@Override
458+
public void onResponse(Call call) {
459+
try {
460+
CallResponse callResponse =
461+
parseCallResponseStatus(call.getCallResult());
462+
String callOutput = call.getCallResult().getOutput();
463+
Pair<List<Object>, List<ABIObject>> results =
464+
contractCodec.decodeMethodAndGetOutputObject(
465+
callRequest.getAbi(), callOutput);
466+
callResponse.setValues(JsonUtils.toJson(results.getLeft()));
467+
callResponse.setReturnObject(results.getLeft());
468+
callResponse.setReturnABIObject(results.getRight());
469+
callback.onResponse(callResponse);
470+
} catch (TransactionBaseException | ContractCodecException e) {
471+
Response response = new Response();
472+
response.setErrorMessage(e.getMessage());
473+
response.setErrorCode(-5000);
474+
callback.onError(response);
475+
}
476+
}
477+
478+
@Override
479+
public void onError(Response errorResponse) {
480+
callback.onError(errorResponse);
481+
}
482+
});
483+
}
484+
437485
@Override
438486
public CallResponse sendCallWithStringParams(
439487
String from, String to, String abi, String functionName, List<String> paramsList)
@@ -442,6 +490,56 @@ public CallResponse sendCallWithStringParams(
442490
return this.callAndGetResponse(from, to, abi, functionName, data);
443491
}
444492

493+
@Override
494+
public void sendCallWithStringParamsAsync(
495+
String from,
496+
String to,
497+
String abi,
498+
String functionName,
499+
List<String> params,
500+
RespCallback<CallResponse> callback)
501+
throws TransactionBaseException, ContractCodecException {
502+
byte[] data = this.contractCodec.encodeMethodFromString(abi, functionName, params);
503+
callAndGetResponseAsync(from, to, abi, functionName, data, callback);
504+
}
505+
506+
private void callAndGetResponseAsync(
507+
String from,
508+
String to,
509+
String abi,
510+
String functionName,
511+
byte[] data,
512+
RespCallback<CallResponse> callback) {
513+
this.asyncExecuteCall(
514+
from,
515+
to,
516+
data,
517+
new RespCallback<Call>() {
518+
@Override
519+
public void onResponse(Call call) {
520+
try {
521+
CallResponse callResponse =
522+
parseCallResponseStatus(call.getCallResult());
523+
List<Type> decodedResult =
524+
contractCodec.decodeMethodAndGetOutputObject(
525+
abi, functionName, call.getCallResult().getOutput());
526+
callResponse.setResults(decodedResult);
527+
callback.onResponse(callResponse);
528+
} catch (TransactionBaseException | ContractCodecException e) {
529+
Response response = new Response();
530+
response.setErrorMessage(e.getMessage());
531+
response.setErrorCode(-5000);
532+
callback.onError(response);
533+
}
534+
}
535+
536+
@Override
537+
public void onError(Response errorResponse) {
538+
callback.onError(errorResponse);
539+
}
540+
});
541+
}
542+
445543
public CallResponse callAndGetResponse(
446544
String from, String to, String abi, String functionName, byte[] data)
447545
throws ContractCodecException, TransactionBaseException {

sdk-transaction/src/main/java/org/fisco/bcos/sdk/v3/transaction/manager/AssembleTransactionProcessorInterface.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.concurrent.CompletableFuture;
2020
import org.fisco.bcos.sdk.jni.common.JniException;
2121
import org.fisco.bcos.sdk.jni.utilities.tx.TxPair;
22+
import org.fisco.bcos.sdk.v3.client.RespCallback;
2223
import org.fisco.bcos.sdk.v3.codec.ContractCodecException;
2324
import org.fisco.bcos.sdk.v3.crypto.keypair.CryptoKeyPair;
2425
import org.fisco.bcos.sdk.v3.model.TransactionReceipt;
@@ -421,6 +422,17 @@ CallResponse sendCall(
421422
CallResponse sendCall(CallRequest callRequest)
422423
throws ContractCodecException, TransactionBaseException;
423424

425+
void sendCallAsync(
426+
String from,
427+
String to,
428+
String abi,
429+
String functionName,
430+
List<Object> params,
431+
RespCallback<CallResponse> callback)
432+
throws ContractCodecException;
433+
434+
void sendCallAsync(CallRequest callRequest, RespCallback<CallResponse> callback);
435+
424436
/**
425437
* send call to fisco bcos node and get call response
426438
*
@@ -437,6 +449,15 @@ CallResponse sendCallWithStringParams(
437449
String from, String to, String abi, String functionName, List<String> params)
438450
throws TransactionBaseException, ContractCodecException;
439451

452+
void sendCallWithStringParamsAsync(
453+
String from,
454+
String to,
455+
String abi,
456+
String functionName,
457+
List<String> params,
458+
RespCallback<CallResponse> callback)
459+
throws TransactionBaseException, ContractCodecException;
460+
440461
/**
441462
* create signed constructor.
442463
*

sdk-transaction/src/main/java/org/fisco/bcos/sdk/v3/transaction/manager/TransactionProcessor.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.fisco.bcos.sdk.jni.utilities.tx.TransactionBuilderJniObj;
2020
import org.fisco.bcos.sdk.jni.utilities.tx.TxPair;
2121
import org.fisco.bcos.sdk.v3.client.Client;
22+
import org.fisco.bcos.sdk.v3.client.RespCallback;
2223
import org.fisco.bcos.sdk.v3.client.protocol.request.Transaction;
2324
import org.fisco.bcos.sdk.v3.client.protocol.response.Call;
2425
import org.fisco.bcos.sdk.v3.crypto.CryptoSuite;
@@ -139,6 +140,21 @@ public Call executeCall(String from, String to, byte[] encodedFunction) {
139140
return this.client.call(new Transaction(from, to, encodedFunction));
140141
}
141142

143+
@Override
144+
public void asyncExecuteCall(
145+
String from, String to, byte[] encodedFunction, RespCallback<Call> callback) {
146+
this.client.callAsync(new Transaction(from, to, encodedFunction), callback);
147+
}
148+
149+
@Override
150+
public void asyncExecuteCall(CallRequest callRequest, RespCallback<Call> callback) {
151+
this.asyncExecuteCall(
152+
callRequest.getFrom(),
153+
callRequest.getTo(),
154+
callRequest.getEncodedFunction(),
155+
callback);
156+
}
157+
142158
@Override
143159
public TxPair createDeploySignedTransaction(
144160
String to, byte[] data, String abi, CryptoKeyPair cryptoKeyPair, int txAttribute) {

sdk-transaction/src/main/java/org/fisco/bcos/sdk/v3/transaction/manager/TransactionProcessorInterface.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import org.fisco.bcos.sdk.jni.common.JniException;
1818
import org.fisco.bcos.sdk.jni.utilities.tx.TxPair;
19+
import org.fisco.bcos.sdk.v3.client.RespCallback;
1920
import org.fisco.bcos.sdk.v3.client.protocol.response.Call;
2021
import org.fisco.bcos.sdk.v3.crypto.keypair.CryptoKeyPair;
2122
import org.fisco.bcos.sdk.v3.model.TransactionReceipt;
@@ -139,6 +140,11 @@ String sendTransactionAsync(
139140
*/
140141
Call executeCall(String from, String to, byte[] encodedFunction);
141142

143+
void asyncExecuteCall(CallRequest callRequest, RespCallback<Call> callback);
144+
145+
void asyncExecuteCall(
146+
String from, String to, byte[] encodedFunction, RespCallback<Call> callback);
147+
142148
/**
143149
* create deploy signed transaction
144150
*

0 commit comments

Comments
 (0)