
io.eosif.lib.Rpc Maven / Gradle / Ivy
package io.eosif.lib;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.eosif.lib.esc.Action;
import io.eosif.lib.esc.DataParam;
import io.eosif.lib.esc.DataType;
import io.eosif.lib.esc.Ese;
import io.eosif.lib.rpc.service.RpcService;
import io.eosif.lib.rpc.utils.Generator;
import io.eosif.lib.rpc.vo.*;
import io.eosif.lib.rpc.vo.account.Account;
import io.eosif.lib.rpc.vo.transaction.Transaction;
import io.eosif.lib.rpc.vo.transaction.push.Tx;
import io.eosif.lib.rpc.vo.transaction.push.TxAction;
import io.eosif.lib.rpc.vo.transaction.push.TxRequest;
import io.eosif.lib.rpc.vo.transaction.push.TxSign;
import java.text.SimpleDateFormat;
import java.util.*;
public class Rpc {
private final RpcService rpcService;
SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
public Rpc(String baseUrl) {
dateFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
rpcService = Generator.createService(RpcService.class, baseUrl);
}
public ChainInfo getChainInfo() {
return Generator.executeSync(rpcService.getChainInfo());
}
public Block getBlock(String blockNumberOrId) {
return Generator.executeSync(rpcService.getBlock(Collections.singletonMap("block_num_or_id", blockNumberOrId)));
}
public Account getAccount(String account) {
return Generator.executeSync(rpcService.getAccount(Collections.singletonMap("account_name", account)));
}
public TableRows getTableRows(TableRowsReq req) {
return Generator.executeSync(rpcService.getTableRows(req));
}
public Transaction pushTransaction(String compression, Tx pushTransaction, String[] signatures) throws Exception {
ObjectMapper mapper = new ObjectMapper();
String mapJakcson = mapper.writeValueAsString(new TxRequest(compression, pushTransaction, signatures));
System.out.println(mapJakcson);
return Generator
.executeSync(rpcService.pushTransaction(new TxRequest(compression, pushTransaction, signatures)));
}
public Transaction pushTransaction(String tx) throws Exception {
ObjectMapper mapper = new ObjectMapper();
TxRequest txObj = mapper.readValue(tx, TxRequest.class);
return Generator.executeSync(rpcService.pushTransaction(txObj));
}
public SignParam getOfflineSignParams(Long exp) {
SignParam params = new SignParam();
ChainInfo info = getChainInfo();
Block block = getBlock(info.getLastIrreversibleBlockId());
params.setChainId(info.getChainId());
params.setHeadBlockTime(info.getHeadBlockTime());
params.setLastIrreversibleBlockNum(block.getBlockNum());
params.setRefBlockPrefix(block.getRefBlockPrefix());
params.setExp(exp);
return params;
}
public Transaction transfer(String pk, String contractAccount, String from, String to, String quantity, String memo)
throws Exception {
// get chain info
ChainInfo info = getChainInfo();
// info.setChainId("cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f");
// info.setLastIrreversibleBlockNum(826366l);
// info.setHeadBlockTime(dateFormatter.parse("2018-08-22T09:19:01.000"));
// get block info
Block block = getBlock(info.getLastIrreversibleBlockNum().toString());
// block.setRefBlockPrefix(2919590658l);
// tx
Tx tx = new Tx();
tx.setExpiration(info.getHeadBlockTime().getTime() / 1000 + 60);
tx.setRef_block_num(38741l);
tx.setRef_block_prefix(3908847134l);
tx.setNet_usage_words(0l);
tx.setMax_cpu_usage_ms(0l);
tx.setDelay_sec(0l);
// actions
List actions = new ArrayList();
// data
Map dataMap = new LinkedHashMap();
dataMap.put("from", from);
dataMap.put("to", to);
dataMap.put("quantity", new DataParam(quantity, DataType.asset, Action.transfer).getValue());
dataMap.put("memo", memo);
// action
TxAction action = new TxAction(from, contractAccount, "transfer", dataMap);
actions.add(action);
tx.setActions(actions);
// sgin
String sign = Ecc.signTransaction(pk, new TxSign(info.getChainId(), tx));
// data parse
String data = Ecc.parseTransferData(from, to, quantity, memo);
// reset data
action.setData(data);
// reset expiration
tx.setExpiration(dateFormatter.format(new Date(1000 * Long.parseLong(tx.getExpiration().toString()))));
return pushTransaction("none", tx, new String[] { sign });
}
public Transaction createAccount(String pk, String creator, String newAccount, String owner, String active,
Long buyRam) throws Exception {
// get chain info
ChainInfo info = getChainInfo();
// get block info
Block block = getBlock(info.getLastIrreversibleBlockNum().toString());
// tx
Tx tx = new Tx();
tx.setExpiration(info.getHeadBlockTime().getTime() / 1000 + 60);
tx.setRef_block_num(info.getLastIrreversibleBlockNum());
tx.setRef_block_prefix(block.getRefBlockPrefix());
tx.setNet_usage_words(0l);
tx.setMax_cpu_usage_ms(0l);
tx.setDelay_sec(0l);
// actions
List actions = new ArrayList();
tx.setActions(actions);
// create
Map createMap = new LinkedHashMap();
createMap.put("creator", creator);
createMap.put("name", newAccount);
createMap.put("owner", owner);
createMap.put("active", active);
TxAction createAction = new TxAction(creator, "eosio", "newaccount", createMap);
actions.add(createAction);
// buyrap
Map buyMap = new LinkedHashMap();
buyMap.put("payer", creator);
buyMap.put("receiver", newAccount);
buyMap.put("bytes", buyRam);
TxAction buyAction = new TxAction(creator, "eosio", "buyrambytes", buyMap);
actions.add(buyAction);
// sgin
String sign = Ecc.signTransaction(pk, new TxSign(info.getChainId(), tx));
// data parse
String accountData = Ese.parseAccountData(creator, newAccount, owner, active);
createAction.setData(accountData);
// data parse
String ramData = Ese.parseBuyRamData(creator, newAccount, buyRam);
buyAction.setData(ramData);
// reset expiration
tx.setExpiration(dateFormatter.format(new Date(1000 * Long.parseLong(tx.getExpiration().toString()))));
return pushTransaction("none", tx, new String[] { sign });
}
public Transaction createAccount(String pk, String creator, String newAccount, String owner, String active,
Long buyRam, String stakeNetQuantity, String stakeCpuQuantity, Long transfer) throws Exception {
// get chain info
ChainInfo info = getChainInfo();
// info.setChainId("cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f");
// info.setLastIrreversibleBlockNum(22117l);
// get block info
Block block = getBlock(info.getLastIrreversibleBlockNum().toString());
// block.setRefBlockPrefix(3920078619l);
// tx
Tx tx = new Tx();
tx.setExpiration(info.getHeadBlockTime().getTime() / 1000 + 60);
// tx.setExpiration(1528436078);
tx.setRef_block_num(info.getLastIrreversibleBlockNum());
tx.setRef_block_prefix(block.getRefBlockPrefix());
tx.setNet_usage_words(0l);
tx.setMax_cpu_usage_ms(0l);
tx.setDelay_sec(0l);
// actions
List actions = new ArrayList();
tx.setActions(actions);
// create
Map createMap = new LinkedHashMap();
createMap.put("creator", creator);
createMap.put("name", newAccount);
createMap.put("owner", owner);
createMap.put("active", active);
TxAction createAction = new TxAction(creator, "eosio", "newaccount", createMap);
actions.add(createAction);
// buyrap
Map buyMap = new LinkedHashMap();
buyMap.put("payer", creator);
buyMap.put("receiver", newAccount);
buyMap.put("bytes", buyRam);
TxAction buyAction = new TxAction(creator, "eosio", "buyrambytes", buyMap);
actions.add(buyAction);
// buyrap
Map delMap = new LinkedHashMap();
delMap.put("from", creator);
delMap.put("receiver", newAccount);
delMap.put("stake_net_quantity", new DataParam(stakeNetQuantity, DataType.asset, Action.delegate).getValue());
delMap.put("stake_cpu_quantity", new DataParam(stakeCpuQuantity, DataType.asset, Action.delegate).getValue());
delMap.put("transfer", transfer);
TxAction delAction = new TxAction(creator, "eosio", "delegatebw", delMap);
actions.add(delAction);
// // sgin
String sign = Ecc.signTransaction(pk, new TxSign(info.getChainId(), tx));
// data parse
String accountData = Ese.parseAccountData(creator, newAccount, owner, active);
createAction.setData(accountData);
// data parse
String ramData = Ese.parseBuyRamData(creator, newAccount, buyRam);
buyAction.setData(ramData);
// data parse
String delData = Ese.parseDelegateData(creator, newAccount, stakeNetQuantity, stakeCpuQuantity,
transfer.intValue());
delAction.setData(delData);
// reset expiration
tx.setExpiration(dateFormatter.format(new Date(1000 * Long.parseLong(tx.getExpiration().toString()))));
return pushTransaction("none", tx, new String[] { sign });
}
public Transaction voteproducer(String pk,String voter,String proxy,List producers) throws Exception {
final Comparator comparator = new Comparator() {
public int compare(String h1, String h2) {
return h2.compareTo(h1);
}
};
//producers.sort(comparator.reversed());
Collections.sort(producers, Collections.reverseOrder(comparator));
// get chain info
ChainInfo info = getChainInfo();
// get block info
Block block = getBlock(info.getLastIrreversibleBlockNum().toString());
// tx
Tx tx = new Tx();
tx.setExpiration(info.getHeadBlockTime().getTime() / 1000 + 60);
tx.setRef_block_num(info.getLastIrreversibleBlockNum());
tx.setRef_block_prefix(block.getRefBlockPrefix());
tx.setNet_usage_words(0l);
tx.setMax_cpu_usage_ms(0l);
tx.setDelay_sec(0l);
// actions
List actions = new ArrayList();
// data
Map dataMap = new LinkedHashMap();
dataMap.put("voter", voter);
dataMap.put("proxy", proxy);
dataMap.put("producers",producers);
// action
TxAction action = new TxAction(voter, "eosio", "voteproducer", dataMap);
actions.add(action);
tx.setActions(actions);
// sgin
String sign = Ecc.signTransaction(pk, new TxSign(info.getChainId(), tx));
// data parse
String data = Ecc.parseVoteProducerData(voter, proxy, producers);
// reset data
action.setData(data);
// reset expiration
tx.setExpiration(dateFormatter.format(new Date(1000 * Long.parseLong(tx.getExpiration().toString()))));
return pushTransaction("none", tx, new String[] { sign });
}
public Transaction close(String pk,String contract,String owner, String symbol)throws Exception {
ChainInfo info = getChainInfo();
Block block = getBlock(info.getLastIrreversibleBlockNum().toString());
Tx tx = new Tx();
tx.setExpiration(info.getHeadBlockTime().getTime() / 1000 + 60);
tx.setRef_block_num(info.getLastIrreversibleBlockNum());
tx.setRef_block_prefix(block.getRefBlockPrefix());
tx.setNet_usage_words(0l);
tx.setMax_cpu_usage_ms(0l);
tx.setDelay_sec(0l);
// actions
List actions = new ArrayList();
// data
Map dataMap = new LinkedHashMap();
dataMap.put("close-owner", owner);
dataMap.put("close-symbol", new DataParam(symbol, DataType.symbol, Action.close).getValue());
// action
TxAction action = new TxAction(owner,contract,"close",dataMap);
actions.add(action);
tx.setActions(actions);
// sgin
String sign = Ecc.signTransaction(pk, new TxSign(info.getChainId(), tx));
// data parse
String data = Ecc.parseCloseData(owner, symbol);
// reset data
action.setData(data);
// reset expiration
tx.setExpiration(dateFormatter.format(new Date(1000 * Long.parseLong(tx.getExpiration().toString()))));
return pushTransaction("none", tx, new String[] { sign });
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy