本页主要内容
https://os999o.axshare.com/ 罗鹏
任务大项 | 开始时间 | 结束时间 | 备注 |
---|---|---|---|
整理用户场景以及基础技术预研 | 2019-7-8 | 2019-7-11 | |
完成基于用户场景的任务划分 | 2019-7-12 | 2019-7-12 | |
针对用户场景进行流程设计、编码 | 2019-7-15 | 2019-7-18 | |
业务流程编码 | 2019-7-19 | 2019-7-30 |
任务大项 | 任务小项 | 责任人 | 开始时间 | 结束时间 | 备注 |
---|---|---|---|---|---|
后端 | 表结构设计 | 秦一峰 | 2019-7-13 | 2019-7-14 | nuls_switch_init.sql |
后台构架搭建 | 陈学 | ||||
实现获取Token后端接口 | 陈学 | 待确定:Token列表是从后端Or账户SDK获取 | |||
实现查询指定交易对的出售单列表(分页)接口 | 秦一峰 | ||||
实现查询指定交易对的可购买单列表(分页)接口 | 秦一峰 | ||||
实现查询支持的Token币种接口 | 秦一峰 | ||||
实现查询用户的当前委托数据(分页)接口 | 陈学 | ||||
实现查询用户的指定代币余额接口 | 陈学 | 待确定:余额从后端获取Or账户SDK获取 | |||
实现用户出售挂单接口 | 秦一峰 | ||||
实现用户撤销挂单接口 | 秦一峰 | 支持部份撤销或者全部撤销 | |||
实现用户确认交易接口 | 陈学 | 有卖家或者买家吃单后,该笔订单发起方进行确认 | |||
实现用户购买接口 | 秦一峰 | 用户选择别人的挂单输入密码后向后端发起吃单请求 | |||
实现查询订单确认明细接口 | 陈学 | ||||
实现确认订单接口 | 陈学 | 同实现用户确认交易接口 | |||
实现查询用户资产列表接口 | 陈学 | 待确定:资产是从后端Or账户SDK获取 | |||
实现查询用户历史委托数据接口 | 陈学 | ||||
前端 | 前端框架搭建 | 秦一峰 | |||
实现我要买页面的业务逻辑功能 | 秦一峰 | ||||
实现我要卖业务的业务逻辑功能 | 秦一峰 | ||||
实现资产列表的业务逻辑功能 | 陈学 | ||||
实现历史委托页面的业务逻辑功能 | 陈学 | ||||
定时任务 | 定时从区块链上获取用户的余额 | 陈学 | 待确定:余额从后端Or账户的SDK获取 | ||
定时从区块链上获取指定Hash的交易记录的状态并更新DEX数据库中订单状态 | 陈学 | ||||
定时将超时未确认的订单撤销 | 陈学 |
整个应用共涉及到三个模块,整体架构如下
前端应用采用团队基于VUE的应用框架
后端应用采用SpringBoot作为基础框架,对前端提供基于Restfull的接口供查询、修改数据
数据库采用Mysql,存储挂单数据、交易数据等
核心团队提供账户模块供快捷的开户、访问账户信息等
Nuls主网提供交易数据的上链存储等
用户在没有账户的情况下,可以创建新的账户。如果有账户,可以直接导入账户。
账户的创建以及导入都采用核心提供的WEB SDK。
用户通过已存在的Keystore和密码导入已经存在的账户
对于某些交易,需要定时任务处理。
对于卖家24小时未确认的交易,定时任务会自动取消
对于发送到区块中的交易,定时任务会每2分钟查询区块链上的交易状态,如果为成功则会及时更新交易状态
所有报文基于restful风格,对于数据获取类全部采用Http get,对于请求提交类全部采用Http post方法。
具体的接口协议,可以在启动后端工程后,通过访问 http://ip:port/swagger.html 地址信息获取
url: /user/getToken
账户公钥、数字签名
{
"pubKey":"020fa96784862cb152cb0f67256db75a45137db3765057633a11dd199d3f66ef2e",
"digitalSignature":"nuls-switch-111111"
}
账户地址、账户Token
{
"code": 0,
"msg": "success",
"result": {
"address":"NseMUi1q9TefkXUcaysAuvFjj4NbTEST",
"token": "mytoken111111111"
}
}
url: /tx/tokenPair/list
{
"token": "mytoken111111111",
"params":
{
}
}
{
"code": 0,
"msg": "success",
"result": {
"list":
[
{
"fromTokenId":"1",
"fromTokenName":"NULS",
"toTokenList":
[
{
"toTokenId":"2",
"toTokenName":"USDT"
}
]
}
]
}
}
url: /user/order/listCurrent
用户Token、交易对
{
"token": "mytoken111111111",
"params":
{
"address":"NseMUi1q9TefkXUcaysAuvFjj4NbTEST",
"fromTokenId":"1",
"toTokenId":"2"
}
}
委托挂单ID、委托时间、交易对、价格、已交易数量、委托交易总量、总金额、状态
{
"code": 0,
"msg": "success",
"result": {
"list":
[
{
"orderId": 123,
"createTime": "2019-07-14 10:20:30",
"fromTokenId":"1",
"fromTokenName":"NULS",
"toTokenId":"2",
"toTokenName":"USDT",
"price": 1.2,
"txNum": 100,
"totalNum": 800,
"totalAmount": 960,
"status": 1
}
]
}
}
url: /tx/order/listOnSale
查询当前可购买的等待出售列表,排除自己发布的出售委托
用户Token、交易对
{
"cmd": "queryOnSaleList",
"token": "mytoken111111111",
"params":
{
"fromTokenId":"1",
"toTokenId":"2",
"tokenPair":"NULS_USDT",//对于交易对,考虑使用字符串还是ID?
}
}
委托挂单ID、创建时间、单价、剩余可交易数量、剩余总金额
{
"code": 0,
"msg": "success",
"result": {
"list":
[
{
"orderId": 123,
"createTime": "2019-07-14 10:20:30",
"price": 1.2,
"remainTxNum": 500, //剩余可交易数量
"remainAmount": 600 //剩余总金额
}
]
}
}
url: /tx/order/listOnBuy
查询当前可出售的等待购买列表,排除自己发布的购买委托
用户Token、交易对
{
"token": "mytoken111111111",
"params":
{
"fromTokenId":"1",
"toTokenId":"2"
}
}
委托挂单ID、创建时间、单价、剩余可交易数量、剩余总金额
{
"code": 0,
"msg": "success",
"result": {
"list":
[
{
"orderId": 123,
"createTime": "2019-07-14 10:20:30",
"price": 1.2,
"remainTxNum": 500, //剩余可交易数量
"remainAmount": 600 //剩余总金额
}
]
}
}
url: /user/token/getBalance
用户Token、交易对
{
"token": "mytoken111111111",
"params":
{
"tokenId":"1"
}
}
账户地址、tokenID,token名称、可用余额
{
"code": 0,
"msg": "success",
"result": {
"address":"NseMUi1q9TefkXUcaysAuvFjj4NbTEST",
"tokenId":"1",
"tokenName": "USDT",
"balance": 1000
}
}
url: /tx/order/sell
用户自助出售挂单
用户Token、交易对、单价、数量
{
"token": "mytoken111111111",
"params":
{
"fromTokenId": "1",
"toTokenId": "2",
"price": 1.5,
"txNum": 200
}
}
{
"code": 0,
"msg": "success",
"result": {
}
}
url: /tx/order/buy
用户自助买入挂单
用户Token、交易对、单价、数量
{
"token": "mytoken111111111",
"params":
{
"fromTokenId": "1",
"toTokenId": "2",
"price": 1.5,
"txNum": 200
}
}
{
"code": 0,
"msg": "success",
"result": {
}
}
url: /tx/order/cancel
包括买入、卖出挂单
用户Token、委托挂单ID
{
"token": "mytoken111111111",
"params":
{
"orderId": "111111"
}
}
{
"code": 0,
"msg": "success",
"result": {
}
}
url: /tx/order/buyToken
用户挂出买单,当其他人在此单上完成卖出操作后,用户需要再次确认才会完成交易(此时才组装交易数据上链)
用户Token、委托挂单ID、购买的tokenID,购买数量
{
"token": "mytoken111111111",
"params":
{
"orderId": "111111",
"tokenId": "1",
"txNum": 100
}
}
{
"code": 0,
"msg": "success",
"result": {
}
}
url: /tx/order/sellToken
用户Token、委托挂单ID、卖出的tokenID,卖出数量
{
"token": "mytoken111111111",
"params":
{
"orderId": "111111",
"tokenId": "1",
"txNum": 100
}
}
{
"code": 0,
"msg": "success",
"result": {
}
}
url: /tx/order/detail
查询委托挂单与之相关的订单明细
用户Token、委托挂单ID
{
"token": "mytoken111111111",
"params":
{
"orderId": "111111"
}
}
委托挂单ID、订单交易明细ID、创建时间、交易数量、交易金额、状态
{
"code": 0,
"msg": "success",
"result": {
"list":
[
{
"orderId": "111111",
"tradeId": "222222",
"createTime": "2019-07-14 00:00:00",
"txNum": 100,
"txAmount": 300,
"status": 1
}
]
}
}
url: /tx/order/confirm
用户Token、委托挂单ID、订单交易明细ID(用户买入、卖出)
{
"cmd": "confirmTx",
"token": "mytoken111111111",
"params":
{
"orderId": "111111",
"tradeId": "222222"
}
}
{
"code": 0,
"msg": "success",
"result": {
}
}
url: /user/asset/list
用户Token、地址
{
"token": "mytoken111111111",
"params":
{
"address":"NseMUi1q9TefkXUcaysAuvFjj4NbTEST"
}
}
资产ID、资产名称、总数量、可用数量、冻结数量
{
"code": 0,
"msg": "success",
"result": {
"list":
[
{
"assetId": "1",
"assetName": "NULS",
"total": 1200,
"available": 1100,
"freeze": 100
}
]
}
}
url: /user/order/listHis
用户Token、地址、开始时间、结束时间、交易对、状态
{
"token": "mytoken111111111",
"params":
{
"address":"NseMUi1q9TefkXUcaysAuvFjj4NbTEST",
"startTime":"2019-07-14 00:00:00",
"endTime":"2019-07-14 23:59:59",
"fromTokenId":"1",
"toTokenId":"2",
"status":"1"
}
}
委托单ID、创建时间、原tokenID、原token名称、兑换目标tokenID、兑换目标tokenName、价格、已完成交易数量、总挂单委托数量、总金额、状态
{
"code": 0,
"msg": "success",
"result": {
"tokenList":
[
{
"orderId": 123,
"createTime": "2019-07-14 10:20:30",
"fromTokenId":"1",
"fromTokenName":"NULS",
"toTokenId":"2",
"toTokenName":"USDT",
"price": 1.2,
"txNum": 100,
"totalNum": 800,
"totalAmount": 960,
"status": 1
}
]
}
}