Skip to content

Commit

Permalink
Merge pull request #908 from kyonRay/master
Browse files Browse the repository at this point in the history
Release v3.7.0
  • Loading branch information
kyonRay authored Mar 25, 2024
2 parents b765754 + 3685137 commit ff40618
Show file tree
Hide file tree
Showing 39 changed files with 1,622 additions and 519 deletions.
21 changes: 14 additions & 7 deletions .ci/ci_check.sh
Original file line number Diff line number Diff line change
Expand Up @@ -138,10 +138,8 @@ check_standard_node()
prepare_environment "${2}"
## run integration test
bash gradlew clean integrationTest --info
# if $? is not 0, then exit
if [ ${?} -ne 0 ]; then
cat log/*.log
fi
# if hs_err log exist, print it
(cat hs_err_pid*.log) || true
## clean
clean_node "${1}"
}
Expand All @@ -153,6 +151,8 @@ check_wasm_node()
prepare_wasm_environment
## run integration test
bash gradlew clean integrationWasmTest --info
(cat hs_err_pid*.log) || true

## clean
clean_node "${1}"
}
Expand All @@ -177,9 +177,9 @@ LOG_INFO "------ check_standard_node---------"
check_standard_node "true" "normal" "-A"
rm -rf ./bin

LOG_INFO "------ download_binary: v3.2.3---------"
download_build_chain "v3.2.3"
download_binary "v3.2.3"
LOG_INFO "------ download_binary: v3.2.6---------"
download_build_chain "v3.2.6"
download_binary "v3.2.6"
LOG_INFO "------ check_standard_node---------"
check_standard_node "false" "normal" "-A"
LOG_INFO "------ check_sm_node---------"
Expand All @@ -203,6 +203,13 @@ rm -rf ./bin
LOG_INFO "------ download_build_chain: v3.5.0---------"
download_binary "v3.5.0"
download_build_chain "v3.5.0"
LOG_INFO "------ check_standard_node---------"
check_standard_node "true"
rm -rf ./bin

LOG_INFO "------ download_build_chain: v3.6.0---------"
download_binary "v3.6.0"
download_build_chain "v3.6.0"
LOG_INFO "------ check_wasm_node---------"
check_wasm_node "false"
LOG_INFO "------ check_standard_node---------"
Expand Down
1 change: 0 additions & 1 deletion .github/workflows/workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ jobs:
if: runner.os == 'Windows'
run: ./gradlew.bat build
- name: run integration testing
# FIXME: macOS WASM integration testing failed
if: runner.os != 'Windows'
run: /bin/bash .ci/ci_check.sh

Expand Down
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ ext {
webankJavaCryptoVersion = "1.0.3"
junitVersion = '4.13.2'
commonsCollections4Version = "4.4"
bcosSdkJniVersion = "3.6.0"
bcosSdkJniVersion = "3.7.0-SNAPSHOT"
slf4jApiVerison = '1.7.36'
mockitoVersion = '4.8.0'
gsonVersion = '2.10.1'
Expand All @@ -35,7 +35,7 @@ ext {
// integrationTest.mustRunAfter test
allprojects {
group = 'org.fisco-bcos.java-sdk'
version = '3.6.0'
version = '3.7.0-SNAPSHOT'

apply plugin: 'maven-publish'
apply plugin: 'idea'
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package org.fisco.bcos.sdk.v3.test.contract;

import org.fisco.bcos.sdk.v3.BcosSDK;
import org.fisco.bcos.sdk.v3.client.Client;
import org.fisco.bcos.sdk.v3.client.protocol.model.JsonTransactionResponse;
import org.fisco.bcos.sdk.v3.model.ConstantConfig;
import org.fisco.bcos.sdk.v3.model.TransactionReceipt;
import org.fisco.bcos.sdk.v3.test.contract.solidity.Incremental;
import org.fisco.bcos.sdk.v3.transaction.model.exception.ContractException;
import org.fisco.bcos.sdk.v3.transaction.nonce.DefaultNonceAndBlockLimitProvider;
import org.fisco.bcos.sdk.v3.transaction.nonce.NonceAndBlockLimitProvider;
import org.fisco.bcos.sdk.v3.utils.Hex;
import org.junit.Assert;
import org.junit.Test;

import java.math.BigInteger;
import java.util.UUID;

public class ContractTest {
private static final String CONFIG_FILE =
"src/integration-test/resources/" + ConstantConfig.CONFIG_FILE_NAME;
private static final String GROUP = "group0";
private final Client client;
private Incremental incremental;
private final NonceAndBlockLimitProvider nonceAndBlockLimitProvider =
new DefaultNonceAndBlockLimitProvider();

public ContractTest() throws ContractException {
// init the sdk, and set the config options.
BcosSDK sdk = BcosSDK.build(CONFIG_FILE);
// group
client = sdk.getClient("group0");
}

void deployContract() throws ContractException {
incremental = Incremental.deploy(client, client.getCryptoSuite().getCryptoKeyPair());
}

@Test
public void testV2Contract() throws ContractException {
if (!client.isSupportTransactionV2()) {
return;
}
deployContract();
String uuid = UUID.randomUUID().toString().replace("-", "");
BigInteger blockLimit = nonceAndBlockLimitProvider.getBlockLimit(client);
TransactionReceipt receipt =
incremental
.buildMethodInc(uuid)
.setNonce(null)
.setBlockLimit(blockLimit)
.setExtension(uuid.getBytes())
.send();
Assert.assertTrue(receipt.isStatusOK());
String msg = incremental.getIncEventEvents(receipt).get(0).msg;
Assert.assertEquals(msg, uuid);

JsonTransactionResponse jsonTransactionResponse =
client.getTransaction(receipt.getTransactionHash(), true).getTransaction().get();
Assert.assertFalse(jsonTransactionResponse.getNonce().isEmpty());
Assert.assertEquals(jsonTransactionResponse.getBlockLimit(), blockLimit.longValue());

String nonce = nonceAndBlockLimitProvider.getNonce();
TransactionReceipt receipt1 = incremental
.buildMethodInc(nonce)
.setNonce(nonce)
.setBlockLimit(blockLimit)
.setExtension("hello".getBytes())
.send();
Assert.assertTrue(receipt1.isStatusOK());
JsonTransactionResponse jsonTransactionResponse1 = client.getTransaction(receipt1.getTransactionHash(), true).getTransaction().get();
Assert.assertEquals(jsonTransactionResponse1.getNonce(), Hex.toHexString(nonce.getBytes()));
Assert.assertEquals(jsonTransactionResponse1.getBlockLimit(), blockLimit.longValue());
Assert.assertEquals(new String(jsonTransactionResponse1.getExtension()), "hello");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,224 @@
package org.fisco.bcos.sdk.v3.test.contract.solidity;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.fisco.bcos.sdk.v3.client.Client;
import org.fisco.bcos.sdk.v3.codec.datatypes.Event;
import org.fisco.bcos.sdk.v3.codec.datatypes.Function;
import org.fisco.bcos.sdk.v3.codec.datatypes.Type;
import org.fisco.bcos.sdk.v3.codec.datatypes.TypeReference;
import org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple1;
import org.fisco.bcos.sdk.v3.contract.Contract;
import org.fisco.bcos.sdk.v3.contract.FunctionWrapper;
import org.fisco.bcos.sdk.v3.crypto.CryptoSuite;
import org.fisco.bcos.sdk.v3.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.v3.eventsub.EventSubCallback;
import org.fisco.bcos.sdk.v3.model.CryptoType;
import org.fisco.bcos.sdk.v3.model.TransactionReceipt;
import org.fisco.bcos.sdk.v3.model.callback.TransactionCallback;
import org.fisco.bcos.sdk.v3.transaction.manager.transactionv1.ProxySignTransactionManager;
import org.fisco.bcos.sdk.v3.transaction.manager.transactionv1.TransactionManager;
import org.fisco.bcos.sdk.v3.transaction.model.exception.ContractException;

@SuppressWarnings("unchecked")
public class Incremental extends Contract {
public static final String[] BINARY_ARRAY = {
"60806040526000805534801561001457600080fd5b50610235806100246000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80633fa4f2451461003b578063bdcbbf5414610056575b600080fd5b61004460005481565b60405190815260200160405180910390f35b6100446100643660046100d3565b600060016000808282546100789190610184565b90915550506040517f7ed53cbadbbc7d8800605823ac88c67b7d9c9fa9d54d45a68d221760e0a86552906100ad9084906101aa565b60405180910390a1505060005490565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156100e557600080fd5b813567ffffffffffffffff808211156100fd57600080fd5b818401915084601f83011261011157600080fd5b813581811115610123576101236100bd565b604051601f8201601f19908116603f0116810190838211818310171561014b5761014b6100bd565b8160405282815287602084870101111561016457600080fd5b826020860160208301376000928101602001929092525095945050505050565b600082198211156101a557634e487b7160e01b600052601160045260246000fd5b500190565b600060208083528351808285015260005b818110156101d7578581018301518582016040015282016101bb565b818111156101e9576000604083870101525b50601f01601f191692909201604001939250505056fea26469706673582212204f4929b54be1544a8e77f16102dc301071ee72f711fad9923c31e0e272bc48d164736f6c634300080b0033"
};

public static final String BINARY =
org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", BINARY_ARRAY);

public static final String[] SM_BINARY_ARRAY = {
"60806040526000805534801561001457600080fd5b50610235806100246000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80632d92c59d1461003b57806386ff705814610056575b600080fd5b61004460005481565b60405190815260200160405180910390f35b6100446100643660046100d3565b600060016000808282546100789190610184565b90915550506040517f7d280234d3c48f94f1914a272412c3e0030dd7a5841f7933ab1e45658bfaabbe906100ad9084906101aa565b60405180910390a1505060005490565b63b95aa35560e01b600052604160045260246000fd5b6000602082840312156100e557600080fd5b813567ffffffffffffffff808211156100fd57600080fd5b818401915084601f83011261011157600080fd5b813581811115610123576101236100bd565b604051601f8201601f19908116603f0116810190838211818310171561014b5761014b6100bd565b8160405282815287602084870101111561016457600080fd5b826020860160208301376000928101602001929092525095945050505050565b600082198211156101a55763b95aa35560e01b600052601160045260246000fd5b500190565b600060208083528351808285015260005b818110156101d7578581018301518582016040015282016101bb565b818111156101e9576000604083870101525b50601f01601f191692909201604001939250505056fea26469706673582212203b3bc5791505a1493d2d8c6acd87f26438a740b84bb247353830397fa78e254264736f6c634300080b0033"
};

public static final String SM_BINARY =
org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", SM_BINARY_ARRAY);

public static final String[] ABI_ARRAY = {
"[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"msg\",\"type\":\"string\"}],\"name\":\"incEvent\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"msg\",\"type\":\"string\"}],\"name\":\"inc\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"value\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]"
};

public static final String ABI = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", ABI_ARRAY);

public static final String FUNC_INC = "inc";

public static final String FUNC_VALUE = "value";

public static final Event INCEVENT_EVENT =
new Event(
"incEvent",
Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));;

protected Incremental(String contractAddress, Client client, CryptoKeyPair credential) {
super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
this.transactionManager = new ProxySignTransactionManager(client);
}

protected Incremental(
String contractAddress, Client client, TransactionManager transactionManager) {
super(getBinary(client.getCryptoSuite()), contractAddress, client, transactionManager);
}

public static String getBinary(CryptoSuite cryptoSuite) {
return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
}

public static String getABI() {
return ABI;
}

public List<IncEventEventResponse> getIncEventEvents(TransactionReceipt transactionReceipt) {
List<EventValuesWithLog> valueList =
extractEventParametersWithLog(INCEVENT_EVENT, transactionReceipt);
ArrayList<IncEventEventResponse> responses =
new ArrayList<IncEventEventResponse>(valueList.size());
for (EventValuesWithLog eventValues : valueList) {
IncEventEventResponse typedResponse = new IncEventEventResponse();
typedResponse.log = eventValues.getLog();
typedResponse.msg = (String) eventValues.getNonIndexedValues().get(0).getValue();
responses.add(typedResponse);
}
return responses;
}

public void subscribeIncEventEvent(
BigInteger fromBlock,
BigInteger toBlock,
List<String> otherTopics,
EventSubCallback callback) {
String topic0 = eventEncoder.encode(INCEVENT_EVENT);
subscribeEvent(topic0, otherTopics, fromBlock, toBlock, callback);
}

public void subscribeIncEventEvent(EventSubCallback callback) {
String topic0 = eventEncoder.encode(INCEVENT_EVENT);
subscribeEvent(topic0, callback);
}

public TransactionReceipt inc(String msg) {
final Function function =
new Function(
FUNC_INC,
Arrays.<Type>asList(new Utf8String(msg)),
Collections.<TypeReference<?>>emptyList(),
0);
return executeTransaction(function);
}

public Function getMethodIncRawFunction(String msg) throws ContractException {
final Function function =
new Function(
FUNC_INC,
Arrays.<Type>asList(new Utf8String(msg)),
Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
return function;
}

public FunctionWrapper buildMethodInc(String msg) throws ContractException {
final Function function =
new Function(
FUNC_INC,
Arrays.<Type>asList(new Utf8String(msg)),
Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
return new FunctionWrapper(this, function);
}

public String getSignedTransactionForInc(String msg) {
final Function function =
new Function(
FUNC_INC,
Arrays.<Type>asList(new Utf8String(msg)),
Collections.<TypeReference<?>>emptyList(),
0);
return createSignedTransaction(function);
}

public String inc(String msg, TransactionCallback callback) {
final Function function =
new Function(
FUNC_INC,
Arrays.<Type>asList(new Utf8String(msg)),
Collections.<TypeReference<?>>emptyList(),
0);
return asyncExecuteTransaction(function, callback);
}

public Tuple1<String> getIncInput(TransactionReceipt transactionReceipt) {
String data = transactionReceipt.getInput().substring(10);
final Function function =
new Function(
FUNC_INC,
Arrays.<Type>asList(),
Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
List<Type> results =
this.functionReturnDecoder.decode(data, function.getOutputParameters());
return new Tuple1<String>((String) results.get(0).getValue());
}

public Tuple1<BigInteger> getIncOutput(TransactionReceipt transactionReceipt) {
String data = transactionReceipt.getOutput();
final Function function =
new Function(
FUNC_INC,
Arrays.<Type>asList(),
Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
List<Type> results =
this.functionReturnDecoder.decode(data, function.getOutputParameters());
return new Tuple1<BigInteger>((BigInteger) results.get(0).getValue());
}

public BigInteger value() throws ContractException {
final Function function =
new Function(
FUNC_VALUE,
Arrays.<Type>asList(),
Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
return executeCallWithSingleValueReturn(function, BigInteger.class);
}

public Function getMethodValueRawFunction() throws ContractException {
final Function function =
new Function(
FUNC_VALUE,
Arrays.<Type>asList(),
Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
return function;
}

public static Incremental load(
String contractAddress, Client client, TransactionManager transactionManager) {
return new Incremental(contractAddress, client, transactionManager);
}

public static Incremental load(String contractAddress, Client client) {
return new Incremental(contractAddress, client, new ProxySignTransactionManager(client));
}

public static Incremental deploy(Client client, CryptoKeyPair credential)
throws ContractException {
Incremental contract =
deploy(
Incremental.class,
client,
credential,
getBinary(client.getCryptoSuite()),
getABI(),
null,
null);
contract.setTransactionManager(new ProxySignTransactionManager(client));
return contract;
}

public static class IncEventEventResponse {
public TransactionReceipt.Logs log;

public String msg;
}
}
Loading

0 comments on commit ff40618

Please sign in to comment.