YOYOW 交易所对接 YOYOW 指南

Hi区块链

可能是最靠谱不忽悠的区块链资讯平台

导读

本文主要介绍交易所对接YOYOW主链的细则。

准备工作

硬件设备

推荐的硬件配置:4GB内存,20G硬盘,两核CPU 即可

当前支持的平台:

Ubuntu 16.04 LTS 64 bit

Windows Servers 64 bit

下文以Ubuntu 16.04 为例进行介绍

服务

禁止掉默认的 time-syncing daemon(已过期) ,安装 NTPD:

账号

在https://wallet.yoyow.org 上注册一个YOYOW主网账号。指南请见:这里.

得到账号私钥。指南请见:这里. 我们总共需要3对密钥:

资金密钥: 管理资金进出

零钱密钥:用于收集积分来抵扣手续费

备注密钥:用来加密/解密memos

基本逻辑

交易所可以使用一个或多个账号处理充值/提现。

充值:给每个用户分配一个独立的、唯一的标识,如:用户在交易所平台ID,或对该ID进行hash 等. 任意用户在进行充值时,需在上填写该唯一标识。交易所因此可以知道此笔充值来自于哪位客户.

提现:从交易所账号中转移资产到用户的账号中,MEMO功能也是必要的,因为用户可能的提现目标为另一家交易所。

安装

请在(此处)下载"最新版"的可执行文件。下载后,解压文件 如:

注: 请注意替换最新版本的node 与 client程序 !

启动YOYOW节点

节点程序yoyow_node需要持续运行,可选方案之一为使用,安装如下:

通过启动yoyow_node:

注:

启动时使用,我们就可以通过RPC对其进行调用. 在本例中yoyow_node将监听及端口。

以下参数表示每账号保留多少条历史记录供查询,默认值是 1000 。 对交易所来说,如果充值、提现记录较多,可考虑设置成一个较大的值,比如:

修改为

则会保留一百万条数据。更早的数据会从内存中被删除而无法快速查询(但仍然记录在链上)。

以下两个参数会大量减少运行需要的内存,原理是不保存与交易所账户无关的历史数据索引。

请将 "25638" 替换成你需要的账户数字 ID 。 注: config.ini 里默认 track-account 前面有个“#”符号,需要删除。

如果需要监控多个账户,则使用如下配置:

节点程序会从P2P网络中下载数据,当数据下载完成后,console里会每3秒钟打印一则新的消息,示意如下:

如果需要终止节点程序,Ctrl + C 即可,或者发送 SIGINT or SIGTERM 信号给进程。执行后需要等待少许时间,节点会自动停止。

启动 YOYOW Client

初次使用

启动另一个,在其中运行程序:

注意:

使用来指定,连接到的节点程序的IP与端口

使用选项来开启一个HTTP-RPC服务,方便我们其他程序进行访问。如:单独处理充值/提现的脚本程序。

yoyow_node 只有完成同步后,才会监听RPC端口,所以请耐心等待 yoyow_node 同步完成。

您可以启动多个client 连接同一个yoyow_node。但请注意不要使用相同的,会因为端口被占用而监听失败。

当第一次运行时,当其连接上node程序,会打印:

我们需要按如下所示设置密码,程序会自动创建一个加密的钱包文件:

当已经存在钱包文件时,如果我们运行程序,它同样会显示

此时我们需要解锁钱包:

导入3对密钥至client,他们会被加密存储于钱包文件中,命令如下:

如: 您的账号ID是,且拥有了、、。需要执行三次,每次导入1个私钥:

命令:

可以通过命令,查看网络状态:

命令:

可通过查看某个具体块号的相信信息. 格式如下:

如:

命令:

可通过命令查看某账号详细信息:

注: 对于接入来讲,"statistics" 数据部分比较有用

"csaf" 是『积分』,通过持有YOYOW产生,可以用来抵扣等额的手续费。YOYOW资产的精度为5,单位为YOYO,所以意味着可抵扣等额的手续费.

"core_balance" 是账号资产的『余额』.意为该账号余额有.

请留意:若返回值内的数字大于,将会有引号将其引住。如上例中的值有引号而的值没有

命令

命令可以用来转移资产,格式如下:

如:

Note:

最多只能有5位精度.

如果设置为, 则签名过的交易会被广播至P2P网络;若为则用来测试,不广播。

命令:

可以使用命令得到一笔交易的hash值. 格式如下:

这个命令在接入中也是很有用的.

命令:

可以使用命令来查看某账号的操作历史,格式如下:

如:

注:

对于, 值为时,则返回所有操作类型;为时可获得所有操作.

对于, 值为时,可得到最多的最近操作记录.

返回结果的数量会在end - start 范围之内;如果值比end - start 要小,则返回满足的条件的最新操作记录。

返回结果的排序方式为: 最新的优先

命令:

可以使用命令来收集积分,可用于抵扣各操作的手续费。格式如下:

如:

注:

如果该账号内有一定数量的YOYO,它将随着时间自动积累积分。积累的速度与账号余额间呈线性关系。通常对于交易所而言,积累的积分足够支付日常手续费用。

积分需要通过该命令领取后才能使用

尽管在底层实现上,账号里的资产(如余额、零钱)同样可以用来支付手续费,但是当前的实现上会只尝试进行积分抵扣手续费(raw-transaction signing除外).如果账号中没有足够的积分,多数的命令会失败。所以保持账号中一定数量的积分是很有必要的。

如何关闭

在Ubuntu下,可以Ctrl + D 来关闭client

通过 HTTP-RPC 接入Client

当 HTTP-RPC 开启的时候,我们可以通过HTTP-RPC 来连接client。所有的上述命令都是可用的,如:

注:

使用协议

请求路径,而不是

与交互式CLI不同,HTTP-RPC调用采用json格式

在所有request中,amount 的精度都是5;在response里,amount没有小数点,其数值被乘以了

金额的传入,金额建议使用字符串。建议使用普通的小数格式,比如"12345.6789",如果使用科学计数法的格式比如1.23456789E4这种可能会有问题

处理充值

检查节点状态

通过命令,得到.在这个值之前的区块才是可信区块

检查账号历史

首先,使用命令/API 来得到最新的 sequence number:

在返回值中,如果为空,则意为该账号下目前没有充值进来;若不为空,则,可以取作为。

如果比上次存储的最新sequence值更大,则意为有最新的充值记录需要处理

使用命令/API 来检查最新记录。如: 如自行记录的sequence 值为100,为200,则我们可以从开始,请求100个记录,至结束,参考命令如下:

返回值中,, 则result为数组. 若数组为空,则意味着没有最新的充值请求。若不为空, 则数组的第N个元素格式应该如下:

取, 若比小, 意味着是可信的, 需要被处理.

取, 如 ==, 则是一个transfer请求. (实际上肯定会等于0,因为请求参数里已约定只取transfer记录)

取, 验证是否与自身account ID 相同。若相同,即为一个充值请求。

取验证其是否 ==, 若是,即表示该资产为

取, 该值为充值数量. 切记:该数字精度为5.

取, 为该转账记录的MEMO信息。此处已经被解密过了,它可以用来作为充值客户的识别符。

保存作为最新的sequence序号,下一次循环时需使用。

保存留作后续使用。

使用命令/API 来获取此次转账的txid ,如下:(记得修改params值为):

记录返回值为, 保存作为本次充值的txid 留作后用.

注:

为了保证可以正确解密MEMO,client 需要出于状态。同时,memo private key 需要已导入至钱包中

处理提现强求

检查节点状态

安全起见,我们只在节点状态正常的情况下处理提现。 通过命令/API来检验。

应当在15秒以内

应大于, 意味着80%的区块生产者在线且状态正常。

检查账号资产与积分

使用命令/API.

如果积分不足以支付网络手续费,请使用命令/API 领取更多积分。

发送资产

使用命令/API 来发送资产.

注: 请注意资产精度.

保存返回的json值供后续使用.

获取txid通过命令/API, 保存供后续使用.

Re-check / Follow-up

类似于充值的步骤,当发现一个新的transfer,保存txid,block num等信息供后续使用。

故障排查

每笔交易都有字段。如果某笔交易因为某种原因,没有被打包到任意块中,且不可逆区块()的时间戳比交易的字段还要晚。则该笔交易不会打包在当前这条链上,此时尝试重新转账是安全的。

示例代码

Ruby:https://github.com/yoyow-org/yoyow-core/blob/master/scripts/exchange.rb

文章转载自dpos.club社区

作者:vianull

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181105B1SE1600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券