パブリッククラスEosUtil {
//プライベートロガーロガー= Logger.getLogger(this.getClass());
民間最終静的な文字列のURL =「IP」。
民間最終静的からのString =「hpnettest111」。
民間最終静的に文字列=「hpnettest222」。
民間最終静的な文字列の数量=「0.0001 TOK」。
民間最終静的な文字列のメモ=「」;
民間最終静的な文字列のPrivateKey =「5JAHWaYwgzRSiJrwct7pY8m1c6Q22Vsh31pd4yD2Q9ufWNtjme3」。
民間最終静的な文字列の転送=「転送」。
民間最終静的な文字列eosiotoken =「eosio.token」。
民間最終静的な文字列のTOK =「TOK」。
民間最終静的てSimpleDateFormat simpleDate =新しいてSimpleDateFormat(「YYYY-MM-DD HH:MM:SS」);
public static Rpc UrlRpc() {
Rpc rpc = new Rpc(url);
return rpc;
}
/**
* 交易请求
* @param from 转出账户
* @param to 转入账户
* @param quantity 交易金额(必须保留小数点后4位数,TOK,空格不可省略:0.0001 TOK)
* @param memo 交易备注
* @param privatekey 签名账户私钥
* @param transfer 合约方法
* @param eosiotoken 合约名
* @return
*/
public String act(String from,String to,String quantity,String memo,String privatekey,String transfer,String eosiotoken) {
Rpc urlRpc = UrlRpc();
// 发起交易
Map<String, Object> args = new HashMap<String, Object>();
args.put("from", from);// 转出账户
args.put("to", to);// 转入账户
args.put("quantity", "0.0001 CFS");// 交易金额
args.put("memo", memo);// 交易备注
String res = urlRpc.pushTransaction(eosiotoken, // 合约名 eosio.token
transfer, // 合约方法 transfer
from, // 签名账户
privatekey, // 签名账户私钥
args);
// logger.debug(「交易结果:」+ RES)。
HashMapの<文字列、文字列> specMap = JSON.parseObject(RES、HashMap.class)。
文字列メッセージ= specMap.get(「メッセージ」)。
// logger.debug(「操作结果:」+メッセージ)。
メッセージを返します。
}
/**
* 查询账户信息
* @param account 账户名
*/
private void QueryAccount(String account) {
Rpc urlRpc = UrlRpc();
String accountmessage = urlRpc.getAccount(account);
// logger.debug( "結果:" + accountmessage);
System.err.println(accountmessage);
}
/**
* 查询账户特定币种余额
* @param account 账户名
* @param eosiotoken 目标币合约
* @param tok 目标币名称
* @return
*/
private String QuerygetCurrencyBalance(String account,String eosiotoken,String tok) {
Rpc urlRpc = UrlRpc();
String currencyBalance = urlRpc.getCurrencyBalance(account, eosiotoken, tok);
HashMap<String,String> specMap = JSON.parseObject(currencyBalance , HashMap.class);
String data = specMap.get("data");
String substring = data.substring(1, data.length()-1);
String replaceAll = substring.replaceAll("\"", " ");
// logger.debug( "結果:" + currencyBalance);
でReplaceAllを返します;
}
/**
* 查询交易记录(Http请求查询)
* @param account 查询账户名
* @param pos 偏移量
* @param offset 起始位置
* @return pos,offset为空则查询所有交易记录
* 转账方每次转账操作会通知合约方,对手方,自己方,对于支出方每次支出都会产生3条交易记录
*/
public List<String> getActionsHttp(String account,int pos,int offset) {
Map<String, String> map=new HashMap<>();
map.put("account_name", account);
map.put("pos", String.valueOf(pos));
map.put("offset", String.valueOf(offset));
List<String> list=new ArrayList<>();
try {
String eoSpost = EosHttpUtils.EOSpost(url+"/v1/history/get_actions", map);
List<Map<String, Object>> toListMap = ToListMap(eoSpost);
for (Map<String, Object> map2 : toListMap) {
String from = map2.get("from").toString();
String to = map2.get("to").toString();
String quantity = map2.get("quantity").toString();
String memo = map2.get("memo").toString();
String rember="from:"+from+",to:"+to+",quantity:"+quantity+",memo:"+memo;
list.add(rember);
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 查询交易记录
* @param account 查询账户名
* @param pos 偏移量
* @param offset 起始位置
* @return pos,offset为空则查询所有交易记录
* 转账方每次转账操作会通知合约方,对手方,自己方,对于支出方每次支出都会产生3条交易记录
*/
public List<String> getActionsJar(String account,int pos,int offset) {
Rpc urlRpc = UrlRpc();
String actions = urlRpc.getActions(account, pos, offset);
List<Map<String, Object>> toListMap = ToListMapJar(actions);
List<String> list=new ArrayList<>();
for (Map<String, Object> map2 : toListMap) {
String from = map2.get("from").toString();
String to = map2.get("to").toString();
String quantity = map2.get("quantity").toString();
String memo = map2.get("memo").toString();
String rember="from:"+from+",to:"+to+",quantity:"+quantity+",memo:"+memo;
list.add(rember);
}
return list;
}
/**
* 根据公钥获取账户名
* @param result
* @return
*/
public String getNameByePKey(String publickey) {
Rpc urlRpc = UrlRpc();
try {
String keyAccounts = urlRpc.getKeyAccounts(publickey);
// logger.debug(「操作结果:」+ keyAccounts)。
JSONObjectのparseObject = JSON.parseObject(keyAccounts)。
ストリングストリング= parseObject.getString(「データ」)。
JSONObject parseObjectdata = JSON.parseObject(列)。
ストリング名= parseObjectdata.getString(「account_names」)。
ストリングストリング= Name.substring(1、Name.length() - 1)。
ストリングでReplaceAll = substring.replaceAll( "" ""「);
でReplaceAllを返す;
}キャッチ(例外e){
( 『检查公钥的合法性を请』)新をスロー;
}
}
/**
* 创建账户
* @param accountName 想创建的账户名(账户名必须是12位,并且只包含a-z1-5,低于12位的一般是特殊账户)
*/
public void createAccount(String accountName) {
Map<String, String> key = getKey();
String publicKey = key.get("publicKey");
Map<String, String> map=new HashMap<>();
map.put("accountName", accountName);
map.put("pk", publicKey);
try {
String eoSpost = EosHttpUtils.EOSpost("http://59.110.220.75"+"/eosSak/CreateSysAccount", map);
// logger.debug(「結果:」+ eoSpost);
}キャッチ(例外E){
スロー新新はIllegalArgumentException(「、公開鍵の有効性を確認し、アカウント名は12でなければならない、とだけ-z1-5を備えてください。 「);
}
}
/**
* 随笔生成密钥对
* @return
*/
public Map<String, String> getKey(){
IdWorker idWorker=new IdWorker();
long nextId = idWorker.nextId();
String privateKey = Ecc.seedPrivate(String.valueOf(nextId));
String publicKey = Ecc.getPublicKey(privateKey);
Map<String,String> map=new HashMap<>();
map.put("publicKey", publicKey);
map.put("privateKey", privateKey);
return map;
}
/**
* 去重
* @param list
* @return
*/
public static List removeDuplicate(List list) {
HashSet h = new HashSet(list);
list.clear();
list.addAll(h);
return list;
}
public static List<Map<String, Object>> ToListMap(String result) {
JSONObject parseObject = JSON.parseObject(result);
String string = parseObject.getString("actions");
JSONArray parseArray = JSON.parseArray(string);
List<Map<String, Object>> mList=new ArrayList<>();
for (Object object : parseArray) {
JSONObject parseObject2 = JSON.parseObject(object.toString());
String picPath = parseObject2.getString("action_trace");
String block_time = parseObject2.getString("block_time");
JSONObject parseObject3 = JSON.parseObject(picPath.toString());
String picPath2 = parseObject3.getString("act");
JSONObject parsereceipt = JSON.parseObject(picPath.toString());
String picPathreceipt = parseObject3.getString("receipt");
JSONObject parsereceipt2 = JSON.parseObject(picPathreceipt.toString());
String receiver = parsereceipt2.getString("receiver");
JSONObject parseObject4 = JSON.parseObject(picPath2.toString());
String picPath3 = parseObject4.getString("data");
Map map=new HashMap<String,Object>();
JSONObject JSONquantity = JSON.parseObject(picPath3.toString());
String quantity = JSONquantity.getString("quantity");
String from = JSONquantity.getString("from");
String to = JSONquantity.getString("to");
String memo = JSONquantity.getString("memo");
map.put("quantity", quantity);
map.put("from", from);
map.put("to", to);
map.put("memo", memo);
// map.put(「block_time」、block_time)。
// map.put(「受信機」、受信機)
mList.add(マップ)
}
リストremoveDuplicate = removeDuplicate(mList)。
removeDuplicateを返します。
}
public static List<Map<String, Object>> ToListMapJar(String result) {
JSONObject parseObjectdata = JSON.parseObject(result);
String stringdata = parseObjectdata.getString("data");
JSONObject parseObject = JSON.parseObject(stringdata);
String string = parseObject.getString("actions");
JSONArray parseArray = JSON.parseArray(string);
List<Map<String, Object>> mList=new ArrayList<>();
for (Object object : parseArray) {
JSONObject parseObject2 = JSON.parseObject(object.toString());
String picPath = parseObject2.getString("action_trace");
String block_time = parseObject2.getString("block_time");
JSONObject parseObject3 = JSON.parseObject(picPath.toString());
String picPath2 = parseObject3.getString("act");
JSONObject parsereceipt = JSON.parseObject(picPath.toString());
String picPathreceipt = parseObject3.getString("receipt");
JSONObject parsereceipt2 = JSON.parseObject(picPathreceipt.toString());
String receiver = parsereceipt2.getString("receiver");
JSONObject parseObject4 = JSON.parseObject(picPath2.toString());
String picPath3 = parseObject4.getString("data");
Map map=new HashMap<String,Object>();
JSONObject JSONquantity = JSON.parseObject(picPath3.toString());
String quantity = JSONquantity.getString("quantity");
String from = JSONquantity.getString("from");
String to = JSONquantity.getString("to");
String memo = JSONquantity.getString("memo");
map.put("quantity", quantity);
map.put("from", from);
map.put("to", to);
map.put("memo", memo);
// map.put(「block_time」、block_time)。
// map.put(「受信機」、受信機)
mList.add(マップ)
}
リストremoveDuplicate = removeDuplicate(mList)。
removeDuplicateを返します。
}
/ **
*随机生成EOS账户名(钱包地址)
* @return
* /
パブリック静的文字列の正規表現(){
文字列の正規表現=「[-z1-5] {12}」。
Xegerジェネレータ=新しいXeger(正規表現)。
文字列結果= generator.generate()。
アサートresult.matches(正規表現)。
結果を返します。
}
public static void main(String[] args) throws ParseException {
for (int i = 0; i < 25; i++) {
String regex = regex();
System.err.println(regex);
}
EosUtil eos=new EosUtil();
//交易请求
//文字列の行為= eos.act(eos.from、 "xyyxyyxyy123"、 "0.1000 TOK"、 " 取引"、eos.privatekey、eos.transfer、eos.eosiotoken);
// System.out.printlnは(ACT)。
//クエリトランザクション
リストactionsJar = eos.getActionsJar( "hpnettest222"、 - 1、-100);
(文字列:actionsJar)用{
System.err.println( "トランザクション:"文字列+);
}
//クエリ残量
ストリングquerygetCurrencyBalance = eos.QuerygetCurrencyBalance( "xyyxyyxyy123"、eos.eosiotoken、eos.tokを);
System.err.println( "残量:" + querygetCurrencyBalance);
}
}