交易所对接EOS(JAVA)

不是非常了解,这些是我所了解到整理分享给大家

获取交易记录在19/11/13号出错了,解决办法如下https://blog.csdn.net/Day_Day_No_Bug/article/details/103061716

首先EOS不同于其他的币种,它并不需要同步本地账本(也可以同步),它拥有被投票选举出来的21个超级节点,只要我们连接到节点上就可以进行相应的开发,节点列表跳转

这里我使用了github上的eos4j工具包(github)进行开发,也可以直接通过api开发官方文档

EOS的账号是需要收费创建的,可以去imtoken上申请大概是0.01+ETH

由于EOS的特殊性,和其他币种不同例如ETH和USDT这种,在交易所中需要每个用户分配一个地址,产生交易后再触发事件,将用户地址内的余额转移到交易所地址,
而EOS不一样,在其他交易所中充值时会发现,你并没有EOS地址,只需要知道一个账户名和备注(memo)即可充值到你的钱包中,所以我们只需要给用户分配memo作为用户的标识 (例如用户id+随机字符) ,清楚了这一点也就发现了EOS并不需要做归集,因为本身就只有一个地址,用户想要充值时,交易所提供account和该用户的标识memo即可。

简单了解之后,下面就是上代码
首先是初始化连接

private static final  String EOS_API_URL= "http://eos.greymass.com";
private static EosRpcService eosRpcService = new EosRpcService(EOS_API_URL);

创建好连接之后,就可以调用封装好的方法(本质就是调用api)这里只介绍常用的 充值,转账(提现),查询余额

首先是查询余额,这里面的余额后面会附属上" EOS",(EOS前面有一个空格) 需要给他替换掉再转换成数值类型

double amount = 0.00;try {List<String> list = eosRpcService.getCurrencyBalance("eosio.token", accountName, "EOS");if (!CollectionUtils.isEmpty(list) && list.size() > 0) {amount = Double.parseDouble(list.get(0).replaceAll(" EOS", ""));}} catch (Exception e) {e.printStackTrace();}return amount ;

调用之后的截图

和在imtoken上查询到的结果一致

然后是转账(提现),api所需要的金额是字符串类型,上面已经提到过了,需要在结尾附属上" EOS",且保留4位小数

// pk 从imtoken中导出的私钥(保护好)
// from 转出者
// to 接受者
// 金额要按照下面这个格式实际金额保留4位小数+空格+EOS
// memo(尤为重要,只要这个填对了才能确认充值者是谁(标识用户),这玩意其实还能打广告23333)
eosRpcService.transfer(pk, "eosio.token", from, to, "0.5000 EOS", memo);

转账成功后会返回下面这一堆,有transactionId就ok了

{"compression":"none","transaction":{"expiration":"2019-10-12T05:40:12","ref_block_num":84105131,"ref_block_prefix":540581775,"net_usage_words":0,"max_cpu_usage_ms":0,"delay_sec":0,"context_free_actions":[],"actions":[{"account":"eosio.token","name":"transfer","authorization":[{"actor":"y#######3","permission":"active"}],"data":"3044c0544de39ef6901da6552577a86e881300000000000004454f53000000000734303634363937"}],"transaction_extensions":[]},"signatures":["SIG_K1_K8zh2mjrTsUFRpAvRAAtX####JktD4wqF7BvmNzJAzzPY25Cj8qrDF7VwRTZR3QNBESFU1YaMHGPLZ9rE76DmrqEZccqK6"]}
{"processed":{"elapsed":512,"id":"80d06de91bc65765f0eff9b93c####62aedfa094a30cd2bc5f99c0f390f19d5b","netUsage":136,"receipt":{"cpuUsageUs":512,"netUsageWords":17,"status":"executed"},"scheduled":false},"transactionId":"80d06de91bc65765####f9b93c2a7562aedfa094a30cd2bc5f99c0f390f19d5b"}

然后imtoken就接到了如下通知

最后是充值流程,主要通过这个方法获取,account就是账户,index我理解为交易的次数,这个和ETH那种扫块不一样,更像是omni那种查历史交易记录,index从0开始给 (所以index不是交易的区块高度,填成功交易返回的高度是无效的) 这里有个问题每个index中所包含的交易有转入和转出,而且不同的index中会有重复的几记录,pagesize是分页的条数(这里我给了0可以成功的去除重复的记录)

 Actions actions = eosRpcService.getActions(account, index, pageSize);

这里是pagesize=0的效果,这里每一笔都是真实的转入记录切无重复,memo中文的那个是个广告23333

pagesize=10的效果,不同的index有相同的记录 (这里我也没太理解为什么这样设计,懂的老哥可以评论,反正pagesize=0就可以拿到我们想要的效果)

下面是充值的部分代码,每次返回false就记录index-1的位置等待下次任务执行

try {Actions actions = eosRpcService.getActions(account, index, pageSize);if (actions != null) {List<Action> list = actions.getActions();if (list == null || list.size() == 0) {//该index无交易等待下次重新扫描return false;}//最新高度int height = actions.getLastIrreversibleBlock();for (Action action : list) {System.out.println("高度" + action.getBlockNum());ActionTrace actionTrace = action.getActionTrace();String eos_token = actionTrace.getAct().getAccount();if (!"eosio.token".equals(eos_token)) {//非EOS交易记录continue;}if (action.getBlockNum() > height) {System.out.println("未确认交易"+action.getBlockNum());//未确认交易,等待下次重新扫描return false;}String name = actionTrace.getAct().getName();if (!"transfer".equals(name)) {//非EOS转账交易记录continue;}JSONObject json = JSONObject.parseObject(JSON.toJSONString(actionTrace.getAct().getData()));if (!account.equals(json.get("to").toString())) {//非充值记录continue;}String[] quantity = json.get("quantity").toString().split(" ");if (!"EOS".equals(quantity[1])) {//非EOS充值记录continue;}String memo = json.get("memo").toString();if (StringUtils.isEmpty(memo)) {log.info("记录memo为空");continue;}else{System.out.println("当前高度"+action.getBlockNum());log.info("index{} HASH={} json = {}", index, actionTrace.getTrxId(), json);//check actionTrace.getTrxId() 在数据库中是否存在有了就跳过if (memo.equals("4064697")){//和提前查出来的用户memo对比 符合就给相应的用户增加EOS余额System.out.println("发现一笔交易");}}}return true;}

EOS 钱包开发(JAVA)相关推荐

  1. 【EOS钱包开发 一】EOS不得不说的一些概念

    想知道更多关于区块链技术知识,请百度[链客区块链技术问答社区] 链客,有问必答!! EOS是什么 EOS是Enterprise Operation System的缩写,它是商用分布式应用设计的一款区块 ...

  2. 愿码(ChainDesk.CN):EOS钱包开发 五使用cleos工具管理账号权限

    在上一篇文章中,我们创建了一个新钱包并导入了一对公私钥,但是该钱包中并没有账号,在EOS区块链中创建账号是很扯蛋的事,必须使用已有的EOS账号才能创建新的EOS账号,使创建账号的时候便于扣费,因为创建 ...

  3. eos区块链 java客户端_分享一个网友第一次开发EOS区块链总结的经验

    在处理项目时,用Java Connector for EOS区块链编写: 创建钱包 创建帐户 创建交易 创建签名交易 在帐户之间转移代币 我遇到了各种和运行本地EOS节点需要遵循的基本步骤.这个小指南 ...

  4. eos dapp开发支持php语言开发吗,EOS开发DApp需要多少内存/CPU/带宽?

    要开发一个基于EOS区块链的DAPP需要多少内存.CPU或带宽资源?这是很多即将开始EOS项目的开发者关注的一个重要问题.本文将介绍如何估算EOS DAPP的内存/CPU/带宽资源需求以及相应的成本. ...

  5. EOS 智能合约开发实践(一)EOS钱包的简单使用

    EOS介绍: EOS,全称Enterprise Operation System,即商用分布式操作系统.EOS是一种全新的区块链架构,旨在实现分布式应用的性能扩展.注意,它并不是像比特币和以太坊那样的 ...

  6. 基于Java的Android区块链钱包开发(ETH篇)

    基于Java的Android区块链钱包开发-ETH篇 引言 使用的库 具体代码如下 生成公私钥.地址 查余额.签名转账 引言 首先要生成12个助记词,区块链开发之生成12个助记词 使用的库 imple ...

  7. 区块链钱包开发(Android篇)

    区块链钱包开发(Android篇) 2018年10月27日 23:07:08 a526247082 阅读数 6309 简介 本文主要内容为区块链钱包移动端(Android)开发,介绍比特币钱包和以太坊 ...

  8. 区块链开发指南_区块链钱包开发

    开发钱包之前,我们需要有以下的预备知识. 第一,什么是钱包,以及相关的分类. 本文站在开发者的角度,给读者讲解下怎么样和钱包进行交互,以及如何开发一个钱包. 我们怎么样理解钱包呢?简单讲它是连接区块链 ...

  9. 第一篇 - 手把手教你理清EOS各种开发环境搭建来龙去脉

    目前来讲,任何学习EOS相关技术的资料都来自https://github.com/EOSIO/eos,可能大家在搭建EOS开发环境的过程中,会很迷茫,网上资料都很乱,自己也理不清头绪,不知如何下手.在 ...

  10. 以太坊转账参数java_【ETH钱包开发04】web3j转账ERC-20 Token

    在上一篇文章中讲解了ETH转账,这一篇讲一下ERC-20 Token转账. [ETH钱包开发03]web3j转账ETH ERC-20 Token转账的2种方式 1.直接用web3j的API 2.jav ...

最新文章

  1. GraphSAGE: Inductive Representation Learning on Large Graphs
  2. protobuf java_ProtoBuf for java使用笔记 | 学步园
  3. 用户sa登陆失败 SQLServer 错误18456的解决方法
  4. VC++新建选择卡的解释
  5. 系统背景描述_【计算机论文】管件加工管理系统和数据库的结构探析
  6. python 微信bot_使用Tweepy在Python中创建Twitter Bot
  7. 塑云科技基于 KafKa+OTS+MaxCompute 完成物联网系统技术重构
  8. linux下nmap工具的使用
  9. ubuntu触电(转)
  10. java吧 博客系统_【Java】SpringMVC + Mybatis 实现的个人博客系统
  11. Vue之表单rules
  12. kubuntu 20.04 终端输入中文时乱码
  13. 手机连接电脑linux系统怎么样,电脑(Linux/Windows)使用SSH远程登录安卓(Android)手机实现无线传输和管理文件(图文详解)...
  14. 通过淘宝数据学习爬虫,python scrapy requests与response对象
  15. 克罗内克积(Kronecker product)与笛卡尔乘积(Cartesian product)
  16. PID控制及位置式与增量式区别
  17. HASH和HMAC(5):SHA-384、SHA-512、SHA-512/224和SHA-512/256算法原理
  18. Bing Test -必应每日壁纸自动换
  19. [BZOJ2121]-字符串游戏-字符串dp
  20. 《计算机视觉和图像处理简介 - 中英双语 + 代码实践版》:基于PyTorch Softmax 进行 MNIST 手写数字分类【Digit Classification with Softmax】

热门文章

  1. 解雇IE补丁操作方法
  2. tapestry5的response使用
  3. 24种编程语言的Hello World程序
  4. 黑苹果系统补丁 MacOS Unlocker for VMware 3.0 下载和解锁安装macOS X 10.14图文教程
  5. 猿编程python,python编程猿
  6. mysql vc运行库_VC++运行库安装
  7. mysql社工库搭建教程,分享我的社工库的裤子+sphinx社工库搭建教程
  8. 蓝桥杯c语言试题(3)
  9. 【目瞪口呆】通信机房内部长这样
  10. ContextCapture(CC)/Smart3D集群搭建笔记