Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .ci/ci_check.sh
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,8 @@ build_node()
{
local node_type="${1}"
local sed_cmd=$(get_sed_cmd)
curl -LO https://raw.githubusercontent.com/FISCO-BCOS/console/master/tools/get_account.sh
curl -LO https://raw.githubusercontent.com/FISCO-BCOS/console/master/tools/get_gm_account.sh
if [ "${node_type}" == "wasm" ];then
bash build_chain.sh -l 127.0.0.1:4 -e ./fisco-bcos -w "${2}"
else
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
package org.fisco.bcos.sdk.v3.test.transaction.codec;

import org.apache.commons.lang3.StringUtils;
import org.checkerframework.checker.units.qual.C;
import org.fisco.bcos.sdk.v3.BcosSDK;
import org.fisco.bcos.sdk.v3.client.Client;
import org.fisco.bcos.sdk.v3.crypto.CryptoSuite;
import org.fisco.bcos.sdk.v3.model.ConstantConfig;
import org.fisco.bcos.sdk.v3.model.CryptoType;
import org.fisco.bcos.sdk.v3.model.TransactionReceipt;
import org.fisco.bcos.sdk.v3.test.contract.solidity.EventSubDemo;
import org.fisco.bcos.sdk.v3.utils.Hex;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package org.fisco.bcos.sdk.v3.contract.auth.manager;

import static org.fisco.bcos.sdk.v3.contract.precompiled.sysconfig.SystemConfigService.COMPATIBILITY_VERSION;
import static org.fisco.bcos.sdk.v3.contract.precompiled.sysconfig.SystemConfigService.checkCompatibilityVersion;
import static org.fisco.bcos.sdk.v3.model.PrecompiledConstant.SYNC_KEEP_UP_THRESHOLD;

import java.math.BigInteger;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.fisco.bcos.sdk.v3.client.Client;
import org.fisco.bcos.sdk.v3.client.protocol.response.BcosGroupInfo;
import org.fisco.bcos.sdk.v3.client.protocol.response.SyncStatus;
Expand Down Expand Up @@ -348,6 +351,18 @@ public BigInteger createSetSysConfigProposal(String key, String value)
throw new ContractException(
"Invalid value \"" + value + "\" for " + key + ", please check valid range.");
}
if (COMPATIBILITY_VERSION.equals(key) && !checkCompatibilityVersion(client, value)) {
String nodeVersionString =
client.getGroupInfo().getResult().getNodeList().stream()
.map(node -> node.getIniConfig().getBinaryInfo().getVersion())
.collect(Collectors.joining(","));
throw new ContractException(
"The compatibility version "
+ value
+ " is not supported, please check the version of the chain. (The version of the chain is "
+ nodeVersionString
+ ")");
}
TransactionReceipt tr =
committeeManager.createSetSysConfigProposal(
key, value, DEFAULT_BLOCK_NUMBER_INTERVAL);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,28 @@

import java.math.BigInteger;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import org.fisco.bcos.sdk.v3.client.Client;
import org.fisco.bcos.sdk.v3.client.protocol.response.BcosGroupNodeInfo;
import org.fisco.bcos.sdk.v3.contract.precompiled.model.PrecompiledAddress;
import org.fisco.bcos.sdk.v3.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.v3.model.EnumNodeVersion;
import org.fisco.bcos.sdk.v3.model.RetCode;
import org.fisco.bcos.sdk.v3.model.TransactionReceipt;
import org.fisco.bcos.sdk.v3.transaction.codec.decode.ReceiptParser;
import org.fisco.bcos.sdk.v3.transaction.model.exception.ContractException;

public class SystemConfigService {
private final SystemConfigPrecompiled systemConfigPrecompiled;
private final Client client;
public static final String TX_COUNT_LIMIT = "tx_count_limit";
public static final String TX_GAS_LIMIT = "tx_gas_limit";
public static final String CONSENSUS_PERIOD = "consensus_leader_period";
public static final String AUTH_STATUS = "auth_check_status";
public static final String COMPATIBILITY_VERSION = "compatibility_version";
public static final int TX_GAS_LIMIT_MIN = 100000;
private static final Map<String, Predicate<BigInteger>> predicateMap = new HashMap<>();

Expand All @@ -44,6 +50,7 @@ public class SystemConfigService {
}

public SystemConfigService(Client client, CryptoKeyPair credential) {
this.client = client;
this.systemConfigPrecompiled =
SystemConfigPrecompiled.load(
client.isWASM()
Expand All @@ -54,6 +61,18 @@ public SystemConfigService(Client client, CryptoKeyPair credential) {
}

public RetCode setValueByKey(String key, String value) throws ContractException {
if (COMPATIBILITY_VERSION.equals(key) && !checkCompatibilityVersion(client, value)) {
String nodeVersionString =
client.getGroupInfo().getResult().getNodeList().stream()
.map(node -> node.getIniConfig().getBinaryInfo().getVersion())
.collect(Collectors.joining(","));
throw new ContractException(
"The compatibility version "
+ value
+ " is not supported, please check the version of the chain. (The version of the chain is "
+ nodeVersionString
+ ")");
}
TransactionReceipt receipt = systemConfigPrecompiled.setValueByKey(key, value);
return ReceiptParser.parseTransactionReceipt(
receipt, tr -> systemConfigPrecompiled.getSetValueByKeyOutput(receipt).getValue1());
Expand All @@ -76,4 +95,23 @@ public static boolean checkSysNumberValueValidation(String key, String value) {
public static boolean isCheckableInValueValidation(String key) {
return predicateMap.containsKey(key);
}

public static boolean checkCompatibilityVersion(Client client, String version) {
try {
EnumNodeVersion.Version setVersion = EnumNodeVersion.getClassVersion(version);
List<BcosGroupNodeInfo.GroupNodeInfo> nodeList =
client.getGroupInfo().getResult().getNodeList();
return nodeList.stream()
.allMatch(
node ->
setVersion.compareTo(
EnumNodeVersion.getClassVersion(
node.getIniConfig()
.getBinaryInfo()
.getVersion()))
<= 0);
} catch (Exception e) {
return false;
}
}
}