国王小组:开发数字货币交易所搭建加密交易所网关

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: DAPP交易所系统开发(开发案例)丨DAPP交易所系统开发(源码及方案)交易所开发成品丨交易所系统开发(演示版)丨交易所APP源码设计区块链交易所开发详细丨区块链交易所系统开发(开发方案)丨区块链交易所源码案例部署Uniswap交易所开发稳定版丨Uniswap交易所系统开发(开发模板)丨Uniswap交易所系统源码案例部署数字货币交易所开发详情版丨数字货币交易所系统开发(web3.0技术开发)丨数字货币交易所开发源码成品交易所APP开发功能丨交易所系统开发(成熟及案例)丨交易所系统源码平台

加密交易所-网关
ccxt是一个非常好的项目,它提供了一个连接多个交易所的库(php、js、python)。当我开始的时候,我还不知道这个项目。ccxt的目的是提供一个库,而我想提供一个http网关,作为一个独立的服务,被任何REST客户端使用(所以几乎任何语言)。

DAPP交易所系统开发(开发案例)丨DAPP交易所系统开发(源码及方案)
交易所开发成品丨交易所系统开发(演示版)丨交易所APP源码设计
区块链交易所开发详细丨区块链交易所系统开发(开发方案)丨区块链交易所源码案例部署
Uniswap交易所开发稳定版丨Uniswap交易所系统开发(开发模板)丨Uniswap交易所系统源码案例部署
数字货币交易所开发详情版丨数字货币交易所系统开发(web3.0技术开发)丨数字货币交易所开发源码成品
交易所APP开发功能丨交易所系统开发(成熟及案例)丨交易所系统源码平台
Btw,ccxt库现在被用来与一些交易所对接;)

该服务的月费是多少?
没有月费。它是免费的,因为你将是在你自己的服务器上运行该服务的人。

你们的服务是在哪里托管的?
这是一个自我托管的服务。你需要把它安装在你自己的服务器上

我看到你们在接受捐赠。捐赠后我能得到什么额外的服务?
除了上床睡觉的特权,知道你做了正确的事情?没有什么

它的作用
为各种交易所提供统一的REST API(可用于自动交易或建立机器人)。
处理认证,这样在客户端你就可以集中精力做真正重要的事情了
在转发请求到远程交易所时,实施速率限制
提供一个REST API,使用PushOver发送推送通知
提供了一个基本的UI,实现了大多数的API调用(见doc目录中的文档)。
提供实时数据的WS访问(股票、订单和交易,见文档目录中的文档和视频,解释如何创建自定义的WS流来复用来自多个交易所的数据)。
访问所有交易所的投资组合概况,以美元为单位的估计价值
高级警报系统
image.png
请在https://mpe-demo.crazyme.net/ui/ 观看现场演示

当然,上述演示并没有使用任何有效的用户/令牌。这意味着以下情况。

所有与价格和订单簿相关的内容都是用真实数据填充的
打开/完成的订单列表是用随机数据填充的
余额列表是用随机数据填充的
新订单不会被实际执行;)
为了获得完整的体验,只需遵循安装步骤

如何使用它
在你想去的地方安装它,并开始从你自己的程序中发送请求

它可以被托管在云端的虚拟机上
可以在家里的树莓派上安装。
只需使用你喜欢的语言(python、javascript、ruby、bash...)向网关发送请求。你自己的服务,你自己的规则 !

这里有一个Node.js客户端,或作为一个npm包。

可用的交易所
目前支持以下交易所。

Binance (曾经是我的最爱)
Bittrex
Kucoin (可选KYC)
OKEx (可选的KYC)
Poloniex (有史以来最差的支持)
更多的将会出现...
以下是目前支持的API。

检索货币对
检索股票代码
检索订单簿
检索最后执行的交易
检索k线(图表数据)。
列出未结订单
列出已关闭的订单
检索单个订单
测试订单(以确保数量和价格与交易所过滤器相匹配)
创建一个订单
检索余额
参见doc目录下的文档,了解每个REST API的概述

关于支持的websocket协议(类似于JSON-RPC)的描述,见doc目录下的文档

关于单元测试的信息,见doc目录下的文档

警报
你是否曾想过在满足以下所有条件的情况下收到一个警报。

Binance上NEO-USDT的价格在[120, 135]范围内
Bittrex上的NEO-BTC价格< 0.010
MarketCap模块中的NEO价格>125美元
也许不是;)无论如何,你现在可以定义这种自定义警报了。见文档目录中的文件

它内置了对PushOver的支持,但任何其他的通知系统都可以轻松实现(通过第三方应用程序),因为所有的警报变化都是通过websocket端点发出的(见doc目录下的文档)。
限制条件
不支持保证金交易(也不可能支持)。
不支持取款(也不太可能)。
暂时不支持止损和追踪止损(尽管在某些时候可能会支持)。
其他服务
MarketCap
MarketCap模块支持:

报价器
参见doc目录下的文档,了解每个API的概况

推送
PushOver模块支持.NET技术。

推送通知
参见doc目录下的文档,了解各API的概况)

速率限制
由于Bottleneck的存在,当交易所需要时,会实施速率限制。

安装
安装依赖项
npm安装
复制样本配置
cp config/config.sample.json config/config.json
查看doc目录下的文档,了解每个配置部分的详细信息

启动网关
node gateway.js
构建用户界面
如果你想使用用户界面,请在启动网关之前按照以下步骤建立用户界面。

cd ui
npm install && ./rebuild-ui
检查哪些交易所已启用
在浏览器中打开http://127.0.0.1:8000/exchanges/。你应该看到下面这样的JSON内容。

["binance", "bittrex", "poloniex", "kucoin"]
默认情况下,只有公共API会被启用。为了访问交易/私人API,你需要用交易所提供的适当的用户和密码来更新config.json(查看doc目录下的文档)。

使用MarketCap模块检查BTC和ETH价格
在你的浏览器中打开http://127.0.0.1:8000/marketCap/tickers?symbols=BTC,ETH。你应该看到JSON内容,如下面所示。
[

{
    "symbol":"BTC",
    "name":"Bitcoin",
    "circulating_supply":17372012,
    "price_usd":6406.1049,
    "percent_change_1h":-0.08,
    "percent_change_1d":-0.08,
    "percent_change_7d":-0.15,
    "volume_24h_usd":3120534126.1266,
    "lastUpdated":1542009997,
    "market_cap_usd":111286930723.4185,
    "rank":1,
    "price_btc":1
},
{
    "symbol":"ETH",
    "name":"Ethereum",
    "circulating_supply":103150460,
    "price_usd":210.4854,
    "percent_change_1h":-0.39,
    "percent_change_1d":-0.39,
    "percent_change_7d":-0.8,
    "volume_24h_usd":1294093048.2094,
    "lastUpdated":1542009997,
    "market_cap_usd":21711669585.6914,
    "rank":2,
    "price_btc":0.032857
}

]
在Bittrex下单购买1个NEO,价格为0.0040BTC(假设你有足够的资金)。
在终端机上执行以下操作。

curl -X POST 'http://127.0.0.1:8000/exchanges/bittrex/openOrders?pair=BTC-NEO&quantity=1&targetRate=0.0040'
你应该看到如下的JSON内容。

{"orderNumber":"8bc49a59-1056-4c20-90f2-893fff2be279"}
取消上述订单(假设订单仍然存在)
在终端执行以下内容。

curl -X DELETE 'http://127.0.0.1:8000/exchanges/bittrex/openOrders/8bc49a59-1056-4c20-90f2-893fff2be279'
在订单有效的情况下,你应该看到如下的JSON内容。

{}
Docker
请看这个视频,了解如何使用Docker和Kitematic在3分钟内做好交易准备。

docker镜像可在https://hub.docker.com/r/apendergast/crypto-exchanges-gateway/

拉取图像
docker pull apendergast/crypto-exchanges-gateway
运行镜像
docker run --rm -p 8000:8000 -p 8001:8001 --name ceg apendergast/crypto-exchanges-gateway
然后你应该能够在http://127.0.0.1:8000 上访问服务

WS端点将在ws:/127.0.0.1:8001上可用。

检查哪些交换被启用
在你的浏览器中打开http://127.0.0.1:8000/exchanges/。你应该看到下面这样的JSON内容。

["binance", "bittrex", "kucoin", "okex", "poloniex"]
默认情况下,只有公共API会被启用。为了访问交易/私人API,你需要在创建容器时传递环境。以下是可用的环境变量。
cfg.logLevel:日志级别
cfg.listen.externalEndpoint:在网关以代理方式运行的情况下,用于表示访问http套接字的外部端点。
cfg.listenWs.externalEndpoint:用于表示在网关通过代理运行的情况下,用于访问ws套接字的外部端点。
cfg.session.maxSubscriptions:一个会话允许的最大订阅数(可选,默认=0,没有最大)。
cfg.session.maxDuration:给定会话的最大持续时间,以秒为单位(可选,默认=0,没有最大)。
cfg.session.hideIpaddr:通过REST api列出会话时,是否要隐藏IP地址(可选,默认=0)。
cfg.auth.apikey 。用于保护访问的API密钥
cfg.ui.enabled : 启用/禁用用户界面(值应设置为1以启用用户界面,0以禁用用户界面)。
cfg.tickerMonitor.enabled : 启用/禁用Ticker Monitor模块(值应设置为1以启用Ticker Monitor,0以禁用Ticker Monitor)(默认=1)
cfg.marketCap.enabled : 启用/禁用MarketCap模块(值应设置为1,启用MarketCap模块,0禁用MarketCap模块)(默认值为1)
cfg.pushover.user : PushOver用户密钥
cfg.pushover.token : PushOver代币
cfg.exchanges.poloniex.enabled : 值应设置为1以启用交易所,0以禁用交易所(默认=1)。
cfg. exchanges.poloniex.key 。Poloniex用户密钥
cfg.exchanges.poloniex.secret : Poloniex的秘密。
cfg.exchanges.bittrex.enabled : 值应设置为1以启用交易所,0以禁用交易所(默认=1)。
cfg.exchanges.bittrex.key : Bittrex用户密钥
cfg.exchanges.bittrex.secret : Bittrex的秘密
cfg.exchanges.binance.enabled : 值应设置为1以启用交易所,0以禁用交易所(默认=1)。
cfg.exchanges.binance.requirePair : 值应设置为0,以允许一次检索所有交易对的股票/订单,1则要求此类操作使用交易对(默认=0)。
cfg.exchanges.binance.key : Binance用户密钥
cfg.exchanges.binance.secret : Binance的秘密
cfg.exchanges.kucoin.enabled : 值应设置为1以启用交换,0以禁用交换(默认=1)。
cfg.exchanges.kucoin.requirePair : 值应设置为0,允许一次性检索所有交易对的股票/订单,1则要求此类操作必须有交易对(默认=0)。
cfg.exchanges.kucoin.key : Kucoin用户密钥
cfg.exchanges.kucoin.secret : Kucoin的秘密
cfg.exchanges.kucoin.password :Kucoin API密码
cfg.exchanges.okex.enabled : 值应设置为1以启用交换,0以禁用交换(默认=1)。
cfg.exchanges.okex.requirePair : 值应设置为0,以允许一次检索所有交易对的股票/订单,1则要求进行此类操作的交易对(默认=0)。
cfg.exchanges.okex.key 。OKEx用户密钥
cfg.exchanges.okex.secret : OKEx的密码
cfg.exchanges.okex.password :OKEx密码
如果你不想使用环境变量,或者想为运行中的容器定制配置,你可以创建和编辑custom_config/config.json

例子:

使用Bittrex用户/密钥环境变量运行容器

docker run --rm -p 8000:8000 -p 8001:8001 --name ceg -e cfg.Exchange.bittrex.key='abcdefghijkl' -e cfg.Exchange.bittrex.secret='123456789' apendergast/crypto-exchanges-gateway
依赖性
这个项目的完成要感谢以下项目。

big.js
binance
身体解析器
瓶颈(用于速率限制)
ccxt (用于与一些交易所对接)
chump (用于PushOver)
css-select (用于HTML解析)
快递
express-ws
htmlparser2 (用于HTML解析)
joi (用于JSON模式验证)
lodash
mocha (用于单元测试)
node-bittrex-api
poloniex-api-节点
retry (用于网络故障时的自定义重试策略)
请求
sqlite3 (用于数据存储)
uuid
winston (用于日志记录)
ws
yargs (用于CLI命令)

相关文章
|
26天前
|
安全 网络安全 Android开发
安卓与iOS开发:选择的艺术网络安全与信息安全:漏洞、加密与意识的交织
【8月更文挑战第20天】在数字时代,安卓和iOS两大平台如同两座巍峨的山峰,分别占据着移动互联网的半壁江山。它们各自拥有独特的魅力和优势,吸引着无数开发者投身其中。本文将探讨这两个平台的特点、优势以及它们在移动应用开发中的地位,帮助读者更好地理解这两个平台的差异,并为那些正在面临选择的开发者提供一些启示。
115 56
|
1月前
|
Kubernetes 安全 Cloud Native
解锁安全新纪元:利用服务网格Istio,打造全链路mTLS加密隧道,从入口网关到出口网关,守护数据安全的每一步
【8月更文挑战第2天】随着云原生技术的发展,服务网格(Service Mesh)如Istio已成为微服务架构的核心,通过双向TLS(mTLS)确保通信安全。首先,在Kubernetes部署Istio以管理服务通信。接着,配置入口网关实现所有入向流量的加密处理,防止数据泄露。最后,通过配置Sidecar代理如Envoy,确保服务网格安全访问外部mTLS服务,从而构建起全链路的数据安全防护。
50 11
|
17天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享安卓与iOS开发中的线程管理比较
【8月更文挑战第30天】本文将探讨网络安全与信息安全的重要性,并分享关于网络安全漏洞、加密技术和安全意识的知识。我们将了解常见的网络攻击类型和防御策略,以及如何通过加密技术和提高安全意识来保护个人和组织的信息安全。
|
3月前
|
JavaScript 前端开发 安全
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
|
4月前
|
安全 网络安全 量子技术
网络安全与信息安全:漏洞、加密技术与安全意识的探索安卓应用开发中的内存管理策略
【5月更文挑战第31天】随着互联网的普及,网络安全问题日益严重。本文将深入探讨网络安全漏洞、加密技术以及安全意识等方面的问题,以期提高公众对网络安全的认识和防范能力。
|
4月前
|
存储 安全 算法
【PHP开发专栏】PHP加密与解密技术
【4月更文挑战第29天】本文探讨了PHP中的加密解密技术,涵盖基本概念如对称加密(AES、DES)、非对称加密(RSA、DSA)和哈希函数(MD5、SHA)。PHP提供内置函数支持加密,如`openssl_encrypt`、`openssl_pkey_new`、`hash`和`password_hash`。文章强调了最佳实践,如使用安全密钥、密钥管理和HTTPS,并给出用户注册登录的加密实战示例。通过理解和应用这些技术,开发者能增强Web应用的数据安全性。
165 1
|
4月前
|
JavaScript 前端开发 关系型数据库
金融技术解决方案:用Python和Vue开发加密货币交易平台
【4月更文挑战第11天】本文介绍了如何使用Python和Vue.js构建加密货币交易平台。首先确保安装了Python、Node.js、数据库系统和Git。后端可选择Flask或Django框架,通过RESTful API处理交易。前端利用Vue.js、Vuex和Vue Router创建用户友好的界面,并用Axios与后端通信。这种架构促进团队协作,提升代码质量和平台功能。
44 0
|
4月前
|
算法 C# 数据安全/隐私保护
C# | 上位机开发新手指南(十)加密算法——ECC
本篇文章我们将继续探讨另一种非对称加密算法——ECC。 严格的说,其实ECC并不是一种非对称加密算法,它是一种基于椭圆曲线的加密算法,广泛用于数字签名和密钥协商。 与传统的非对称加密算法(例如RSA)不同,ECC算法使用椭圆曲线上的点乘法来生成密钥对和进行加密操作,而不是使用大数分解等数学算法。这使得ECC算法具有相同的安全性和强度,但使用更少的位数,因此在资源受限的环境中具有优势。 ECC算法虽然使用公钥和私钥进行加密和解密操作,但是这些操作是基于点乘法实现的,而不是基于大数分解等算法实现的。因此,ECC算法可以被视为一种非对称加密算法的变体,但是它与传统的非对称加密算法有所不同。
187 0
C# | 上位机开发新手指南(十)加密算法——ECC
|
4月前
|
XML 算法 安全
C# | 上位机开发新手指南(九)加密算法——RSA
RSA的特性 非对称性 RSA算法使用公钥和私钥两个不同的密钥,公钥用于加密数据,私钥用于解密数据。公钥可以公开,任何人都可以使用,而私钥只有密钥持有人可以访问。 安全性 RSA算法基于大数分解难题,即将一个大的合数分解成其质数因子的乘积。由于目前没有有效的算法可以在合理的时间内对大质数进行分解,因此RSA算法被认为是一种安全的加密算法。 可逆性 RSA算法既可以用于加密,也可以用于解密。加密和解密都是可逆的过程,只要使用正确的密钥,就可以还原原始数据。 签名 RSA算法可以用于数字签名,用于验证数据的完整性和真实性。签名过程是将数据使用私钥进行加密,验证过程是将签名使用公钥进行解密。
163 0
C# | 上位机开发新手指南(九)加密算法——RSA
|
4月前
|
算法 Java 数据安全/隐私保护
Android App开发之利用JNI实现加密和解密操作实战(附源码 简单易懂)
Android App开发之利用JNI实现加密和解密操作实战(附源码 简单易懂)
227 0