use of io.nuls.contract.rpc.form.ContractCall in project nuls by nuls-io.
the class CallContractProcessor method execute.
@Override
public CommandResult execute(String[] args) {
ContractCall form = paramsData.get();
if (null == form) {
form = getContractCall(args);
}
if (null == form) {
return CommandResult.getFailed("parameter error.");
}
String sender = form.getSender();
RpcClientResult res = CommandHelper.getPassword(sender, restFul);
if (!res.isSuccess()) {
return CommandResult.getFailed(res);
}
String password = (String) res.getData();
res = getContractCallArgsJson();
if (!res.isSuccess()) {
return CommandResult.getFailed(res);
}
Object[] contractArgs = (Object[]) res.getData();
Map<String, Object> parameters = new HashMap<>();
parameters.put("sender", sender);
parameters.put("gasLimit", form.getGasLimit());
parameters.put("price", form.getPrice());
parameters.put("password", password);
parameters.put("remark", form.getRemark());
parameters.put("contractAddress", form.getContractAddress());
parameters.put("value", form.getValue());
parameters.put("methodName", form.getMethodName());
parameters.put("methodDesc", form.getMethodDesc());
parameters.put("args", contractArgs);
RpcClientResult result = restFul.post("/contract/call", parameters);
if (result.isFailed()) {
return CommandResult.getFailed(result);
}
return CommandResult.getResult(result);
}
use of io.nuls.contract.rpc.form.ContractCall in project nuls by nuls-io.
the class CallContractProcessor method getContractCall.
private ContractCall getContractCall(String[] args) {
ContractCall call = null;
try {
call = new ContractCall();
call.setSender(args[1].trim());
call.setGasLimit(Long.valueOf(args[2].trim()));
call.setPrice(Long.valueOf(args[3].trim()));
call.setContractAddress(args[4].trim());
call.setMethodName(args[5].trim());
long naValue = 0L;
Na na = Na.parseNuls(args[6].trim());
if (na != null) {
naValue = na.getValue();
}
call.setValue(naValue);
if (args.length == 9) {
String argType = args[7].trim();
if (argType.equals("-d")) {
call.setMethodDesc(args[8].trim());
} else if (argType.equals("-r")) {
call.setRemark(args[8].trim());
} else {
return null;
}
} else if (args.length == 11) {
String argType0 = args[7].trim();
String argType1 = args[9].trim();
boolean isType0D = argType0.equals("-d");
boolean isType1D = argType1.equals("-d");
boolean isType0R = argType0.equals("-r");
boolean isType1R = argType1.equals("-r");
if ((isType0D && isType1D) || (isType0R && isType1R)) {
// 不能同时为-d或-r
return null;
}
if (isType0D) {
call.setMethodDesc(args[8].trim());
}
if (isType0R) {
call.setRemark(args[8].trim());
}
if (isType1D) {
call.setMethodDesc(args[10].trim());
}
if (isType1R) {
call.setRemark(args[10].trim());
}
}
return call;
} catch (Exception e) {
e.fillInStackTrace();
return null;
}
}
use of io.nuls.contract.rpc.form.ContractCall in project nuls by nuls-io.
the class CallContractProcessor method argsValidate.
@Override
public boolean argsValidate(String[] args) {
boolean result;
do {
int length = args.length;
if (length != 7 && length != 9 && length != 11) {
result = false;
break;
}
if (!CommandHelper.checkArgsIsNull(args)) {
result = false;
break;
}
// gasLimit
if (!StringUtils.isNumeric(args[2])) {
result = false;
break;
}
// price
if (!StringUtils.isNumeric(args[3])) {
result = false;
break;
}
// value
if (!StringUtils.isNumeric(args[6])) {
result = false;
break;
}
ContractCall form = getContractCall(args);
if (null == form) {
result = false;
break;
}
paramsData.set(form);
result = form.getValue() >= 0;
} while (false);
return result;
}
Aggregations