Skip to content

Commit b7a4010

Browse files
committed
return transaction hash when sending transctions (#292)
1 parent cf862e5 commit b7a4010

File tree

7 files changed

+74
-14
lines changed

7 files changed

+74
-14
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ ext {
3636
// integrationTest.mustRunAfter test
3737
allprojects {
3838
group = 'org.fisco-bcos.java-sdk'
39-
version = '2.7.2'
39+
version = '2.8.0-SNAPSHOT'
4040
apply plugin: 'maven'
4141
apply plugin: 'maven-publish'
4242
apply plugin: 'idea'

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -926,7 +926,8 @@ private void buildTransactionFunctionWithCallback(
926926
throws ClassNotFoundException {
927927
String functionName = functionDefinition.getName();
928928

929-
methodBuilder.returns(TypeName.VOID);
929+
TypeName returnType = TypeName.get(byte[].class);
930+
methodBuilder.returns(returnType);
930931

931932
methodBuilder.addStatement(
932933
"final $T function = new $T(\n$N, \n$T.<$T>asList($L), \n$T"
@@ -939,7 +940,7 @@ private void buildTransactionFunctionWithCallback(
939940
inputParams,
940941
Collections.class,
941942
TypeReference.class);
942-
methodBuilder.addStatement("asyncExecuteTransaction(function, callback)");
943+
methodBuilder.addStatement("return asyncExecuteTransaction(function, callback)");
943944
}
944945

945946
private void buildTransactionFunctionSeq(

sdk-transaction/src/main/java/org/fisco/bcos/sdk/contract/Contract.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -274,13 +274,15 @@ protected List<Type> executeCallWithMultipleValueReturn(Function function)
274274
return executeCall(function);
275275
}
276276

277-
protected void asyncExecuteTransaction(
277+
protected byte[] asyncExecuteTransaction(
278278
String data, String funName, TransactionCallback callback) {
279-
transactionProcessor.sendTransactionAsync(contractAddress, data, credential, callback);
279+
return transactionProcessor.sendTransactionAsyncAndGetHash(
280+
contractAddress, data, credential, callback);
280281
}
281282

282-
protected void asyncExecuteTransaction(Function function, TransactionCallback callback) {
283-
asyncExecuteTransaction(functionEncoder.encode(function), function.getName(), callback);
283+
protected byte[] asyncExecuteTransaction(Function function, TransactionCallback callback) {
284+
return asyncExecuteTransaction(
285+
functionEncoder.encode(function), function.getName(), callback);
284286
}
285287

286288
protected TransactionReceipt executeTransaction(Function function) {

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
import org.fisco.bcos.sdk.transaction.model.dto.CallRequest;
3030
import org.fisco.bcos.sdk.transaction.model.gas.DefaultGasProvider;
3131
import org.fisco.bcos.sdk.transaction.model.po.RawTransaction;
32+
import org.fisco.bcos.sdk.utils.Hex;
33+
import org.fisco.bcos.sdk.utils.Numeric;
3234
import org.slf4j.Logger;
3335
import org.slf4j.LoggerFactory;
3436

@@ -67,6 +69,15 @@ public void sendTransactionAsync(
6769
client.sendRawTransactionAndGetReceiptAsync(signedData, callback);
6870
}
6971

72+
@Override
73+
public byte[] sendTransactionAsyncAndGetHash(
74+
String to, String data, CryptoKeyPair cryptoKeyPair, TransactionCallback callback) {
75+
String signedData = createSignedTransaction(to, data, cryptoKeyPair);
76+
client.sendRawTransactionAndGetReceiptAsync(signedData, callback);
77+
byte[] transactionHash = cryptoSuite.hash(Hex.decode(Numeric.cleanHexPrefix(signedData)));
78+
return transactionHash;
79+
}
80+
7081
@Override
7182
public Call executeCall(CallRequest callRequest) {
7283
return executeCall(

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ public TransactionReceipt sendTransactionAndGetReceipt(
4949
public void sendTransactionAsync(
5050
String to, String data, CryptoKeyPair cryptoKeyPair, TransactionCallback callback);
5151

52+
public byte[] sendTransactionAsyncAndGetHash(
53+
String to, String data, CryptoKeyPair cryptoKeyPair, TransactionCallback callback);
5254
/**
5355
* send call to fisco bcos node and receive call response.
5456
*

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

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import java.math.BigInteger;
2121
import java.security.SecureRandom;
22+
import java.util.concurrent.Semaphore;
2223
import org.fisco.bcos.sdk.channel.model.ChannelPrococolExceiption;
2324
import org.fisco.bcos.sdk.channel.model.EnumNodeVersion;
2425
import org.fisco.bcos.sdk.client.Client;
@@ -48,8 +49,10 @@
4849
import org.fisco.bcos.sdk.model.CryptoType;
4950
import org.fisco.bcos.sdk.model.NodeVersion;
5051
import org.fisco.bcos.sdk.model.TransactionReceipt;
52+
import org.fisco.bcos.sdk.model.callback.TransactionCallback;
5153
import org.fisco.bcos.sdk.service.GroupManagerService;
5254
import org.fisco.bcos.sdk.transaction.model.exception.ContractException;
55+
import org.fisco.bcos.sdk.utils.Hex;
5356
import org.fisco.bcos.sdk.utils.Numeric;
5457
import org.junit.Assert;
5558
import org.junit.Test;
@@ -262,6 +265,32 @@ private void checkReceipt(
262265
}
263266
}
264267

268+
class TransactionCallbackTest extends TransactionCallback {
269+
public TransactionReceipt receipt;
270+
public Semaphore semaphore = new Semaphore(1, true);
271+
272+
TransactionCallbackTest() {
273+
try {
274+
semaphore.acquire(1);
275+
} catch (InterruptedException e) {
276+
Thread.currentThread().interrupt();
277+
}
278+
}
279+
280+
@Override
281+
public void onTimeout() {
282+
super.onTimeout();
283+
semaphore.release();
284+
}
285+
286+
// wait until get the transactionReceipt
287+
@Override
288+
public void onResponse(TransactionReceipt receipt) {
289+
this.receipt = receipt;
290+
semaphore.release();
291+
}
292+
}
293+
265294
public void testSendTransactions() throws ConfigException, ContractException {
266295
try {
267296
BcosSDK sdk = BcosSDK.build(configFile);
@@ -294,6 +323,19 @@ public void testSendTransactions() throws ConfigException, ContractException {
294323
String settedString = "Hello, FISCO";
295324
TransactionReceipt receipt = helloWorld.set(settedString);
296325
Assert.assertTrue(receipt != null);
326+
TransactionCallbackTest callback = new TransactionCallbackTest();
327+
byte[] transactionHash = helloWorld.set(settedString, callback);
328+
// wait here
329+
try {
330+
callback.semaphore.acquire(1);
331+
callback.semaphore.release();
332+
} catch (InterruptedException e) {
333+
Thread.currentThread().interrupt();
334+
}
335+
// check the hash
336+
Assert.assertEquals(
337+
"0x" + Hex.toHexString(transactionHash), callback.receipt.getTransactionHash());
338+
297339
checkReceipt(helloWorld, client, blockNumber.add(BigInteger.valueOf(2)), receipt, true);
298340
// wait the blocknumber notification
299341
Thread.sleep(1000);

src/integration-test/java/org/fisco/bcos/sdk/contract/HelloWorld.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,24 @@
2020
@SuppressWarnings("unchecked")
2121
public class HelloWorld extends Contract {
2222
public static final String[] BINARY_ARRAY = {
23-
"608060405234801561001057600080fd5b506040805190810160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061005c929190610062565b50610107565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b61010491905b808211156101005760008160009055506001016100e8565b5090565b90565b6102d7806101166000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680634ed3885e146100515780636d4ce63c146100ba575b600080fd5b34801561005d57600080fd5b506100b8600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061014a565b005b3480156100c657600080fd5b506100cf610164565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010f5780820151818401526020810190506100f4565b50505050905090810190601f16801561013c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b8060009080519060200190610160929190610206565b5050565b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101fc5780601f106101d1576101008083540402835291602001916101fc565b820191906000526020600020905b8154815290600101906020018083116101df57829003601f168201915b5050505050905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061024757805160ff1916838001178555610275565b82800160010185558215610275579182015b82811115610274578251825591602001919060010190610259565b5b5090506102829190610286565b5090565b6102a891905b808211156102a457600081600090555060010161028c565b5090565b905600a165627a7a7230582035f32cd11f4fdc4d12abab1850ea5b401f853d9ef91e913e4e82d34efa18a2210029"
23+
"608060405234801561001057600080fd5b506040805190810160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061005c929190610062565b50610107565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b61010491905b808211156101005760008160009055506001016100e8565b5090565b90565b6102d7806101166000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680634ed3885e146100515780636d4ce63c146100ba575b600080fd5b34801561005d57600080fd5b506100b8600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061014a565b005b3480156100c657600080fd5b506100cf610164565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010f5780820151818401526020810190506100f4565b50505050905090810190601f16801561013c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b8060009080519060200190610160929190610206565b5050565b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101fc5780601f106101d1576101008083540402835291602001916101fc565b820191906000526020600020905b8154815290600101906020018083116101df57829003601f168201915b5050505050905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061024757805160ff1916838001178555610275565b82800160010185558215610275579182015b82811115610274578251825591602001919060010190610259565b5b5090506102829190610286565b5090565b6102a891905b808211156102a457600081600090555060010161028c565b5090565b905600a165627a7a7230582008fe55c303745b7afae99b9a0f7ea33e2ed648c8374ac46a8508b64ece95ad780029"
2424
};
2525

26-
public static final String BINARY = String.join("", BINARY_ARRAY);
26+
public static final String BINARY =
27+
org.fisco.bcos.sdk.utils.StringUtils.joinAll("", BINARY_ARRAY);
2728

2829
public static final String[] SM_BINARY_ARRAY = {
29-
"608060405234801561001057600080fd5b506040805190810160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061005c929190610062565b50610107565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b61010491905b808211156101005760008160009055506001016100e8565b5090565b90565b6102d7806101166000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063299f7f9d146100515780633590b49f146100e1575b600080fd5b34801561005d57600080fd5b5061006661014a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100a657808201518184015260208101905061008b565b50505050905090810190601f1680156100d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156100ed57600080fd5b50610148600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506101ec565b005b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b5050505050905090565b8060009080519060200190610202929190610206565b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061024757805160ff1916838001178555610275565b82800160010185558215610275579182015b82811115610274578251825591602001919060010190610259565b5b5090506102829190610286565b5090565b6102a891905b808211156102a457600081600090555060010161028c565b5090565b905600a165627a7a72305820ddb4a8b4c62e003ac9d6ca2396325dcea3b9441c5d2af668d4ccb883a9af271b0029"
30+
"608060405234801561001057600080fd5b506040805190810160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061005c929190610062565b50610107565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b61010491905b808211156101005760008160009055506001016100e8565b5090565b90565b6102d7806101166000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063299f7f9d146100515780633590b49f146100e1575b600080fd5b34801561005d57600080fd5b5061006661014a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100a657808201518184015260208101905061008b565b50505050905090810190601f1680156100d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156100ed57600080fd5b50610148600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506101ec565b005b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b5050505050905090565b8060009080519060200190610202929190610206565b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061024757805160ff1916838001178555610275565b82800160010185558215610275579182015b82811115610274578251825591602001919060010190610259565b5b5090506102829190610286565b5090565b6102a891905b808211156102a457600081600090555060010161028c565b5090565b905600a165627a7a72305820c4d9285b30f267b565e87bd59f4e9da60a57023c73900638eea3f3f0694968cc0029"
3031
};
3132

32-
public static final String SM_BINARY = String.join("", SM_BINARY_ARRAY);
33+
public static final String SM_BINARY =
34+
org.fisco.bcos.sdk.utils.StringUtils.joinAll("", SM_BINARY_ARRAY);
3335

3436
public static final String[] ABI_ARRAY = {
3537
"[{\"constant\":false,\"inputs\":[{\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}]"
3638
};
3739

38-
public static final String ABI = String.join("", ABI_ARRAY);
40+
public static final String ABI = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", ABI_ARRAY);
3941

4042
public static final String FUNC_SET = "set";
4143

@@ -58,13 +60,13 @@ public TransactionReceipt set(String n) {
5860
return executeTransaction(function);
5961
}
6062

61-
public void set(String n, TransactionCallback callback) {
63+
public byte[] set(String n, TransactionCallback callback) {
6264
final Function function =
6365
new Function(
6466
FUNC_SET,
6567
Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(n)),
6668
Collections.<TypeReference<?>>emptyList());
67-
asyncExecuteTransaction(function, callback);
69+
return asyncExecuteTransaction(function, callback);
6870
}
6971

7072
public String getSignedTransactionForSet(String n) {

0 commit comments

Comments
 (0)