使用maven导入依赖
<dependency>
<groupId>com.alaya.client</groupId>
<artifactId>alaya-core</artifactId>
<version>0.15.0.0-SNAPSHOT</version>
</dependency>
在DelegateContract
中调用无gas设置的委托,方法如下:
public RemoteCall<TransactionResponse> delegate(String nodeId, StakingAmountType stakingAmountType, BigInteger amount) {
Function function = createDelegateFunction(nodeId, stakingAmountType, amount);
return executeRemoteCallTransaction(function);
}
protected RemoteCall<TransactionResponse> executeRemoteCallTransaction(Function function) {
return new RemoteCall<>(() -> executeTransaction(function, BigInteger.ZERO, getDefaultGasProvider(function)));
}
此处的getDefaultGasProvider(function)
一定会产生NoSupportFunctionType
异常
原因getDefaultGasProvider(function)
只会调用getDefaultGasProviderRemote(function)
,而在getDefaultGasProviderRemote(function)
中调用的 EstimateGasUtil.getGasLimit(function)
由于不支持委托类型的function,会抛出NoSupportFunctionType
异常。
public static BigInteger getGasLimit(Function function) throws NoSupportFunctionType {
if(isSupportLocal(function.getType())){
return BASE_DEFAULT_GAS_LIMIT
.add(getContractGasLimit(function.getType()))
.add(getFunctionGasLimit(function.getType()))
.add(getInterfaceDynamicGasLimit(function.getType(),function.getInputParameters()))
.add(getDataGasLimit(EncoderUtils.functionEncoder(function)));
} else {
throw new NoSupportFunctionType(function.getType());
}
}
因此只要是在
public static boolean isSupportLocal(int type) {
switch (type) {
case FunctionType.STAKING_FUNC_TYPE:
case FunctionType.UPDATE_STAKING_INFO_FUNC_TYPE:
case FunctionType.ADD_STAKING_FUNC_TYPE:
case FunctionType.WITHDREW_STAKING_FUNC_TYPE:
case FunctionType.SUBMIT_TEXT_FUNC_TYPE:
case FunctionType.SUBMIT_VERSION_FUNC_TYPE:
case FunctionType.SUBMIR_PARAM_FUNCTION_TYPE:
case FunctionType.SUBMIT_CANCEL_FUNC_TYPE:
case FunctionType.VOTE_FUNC_TYPE:
case FunctionType.DECLARE_VERSION_FUNC_TYPE:
case FunctionType.REPORT_DOUBLESIGN_FUNC_TYPE:
case FunctionType.CREATE_RESTRICTINGPLAN_FUNC_TYPE:
return true;
default:
return false;
}
}
中未出现的function类型,调用了无gas参数设置的方法,一定会抛出NoSupportFunctionType
异常。
已知存在的问题存在于DelegateContract
,RewardContract
。