交易所源码购买
最近我们建立了一个集中式加密货币交易所来取代旧系统。新系统是在 Akka 框架之上设计和构建的。我们使用 Akka Cluster 作为微服务架构的支柱。对于需要并发、高可用、弹性和可扩展性的分布式系统,Akka 提供了坚实的基础。
数字货币交易所搭建
加密货币交易所如何运作
加密货币交易所允许用户交易比特币 (BTC)、以太坊 (ETH)、EOS 等加密货币。用户可以将加密货币转移到他们在交易所的账户,然后用它与其他用户交换其他加密货币。
数字货币源码
这是该过程如何工作的示例。爱丽丝有 2 个比特币,没有以太币。她想用 1 个比特币兑换以太坊。区块链是众所周知的分布式公共账本,所以这里我们将比特币区块链和以太坊区块链简化为下图中的两个账本。在比特币账本上,Alice(图中的 ALICEX)拥有的地址有 2 个 BTC,在以太坊账本上,Alice(图中的 ALICEY)拥有的地址有 0 ETH。Alice 拥有的地址意味着 Alice 有权要求区块链网络将加密资产从该地址转移到任何其他地址。
火币交易所源码
Alice 在加密货币交易所注册,然后登录到交易所。Alice 访问“我的账户”页面,在这里她可以看到许多交易所支持的加密货币被列为她的账户,全部为 0 余额。爱丽丝点击她 BTC 账户旁边的“存款”按钮。由于这是 Alice 第一次尝试将比特币转入她的账户,交易所立即为她创建了一个新的比特币账本地址(下图中的 XCHGX),并在交易所的内部数据库中创建了一个条目来记录新地址已经被转账。分配给爱丽丝。然后交易所将这个新地址显示给爱丽丝,并指示她将 BTC 转移到这个地址。请注意,尽管新地址是为爱丽丝创建的,但该地址实际上是在交易所的控制之下,而不是爱丽丝。Alice 可以将 BTC 转入该地址,但她不能将 BTC 从该地址转出。在下图中,我们使用黄色背景来区分加密货币交易所拥有的地址和记录与 Alice 拥有的蓝色突出显示的地址。
然后,爱丽丝使用她的钱包应用程序将 1 个比特币从她的地址转移到交易所为她创建的新地址。Alice 的钱包应用程序创建一个包含转账细节的交易,并将其广播到比特币区块链网络。假设 Alice 在这笔交易中包含了足够的交易费 0.00001 BTC。该交易最终包含在比特币矿工添加到区块链的新区块中。在交易所方面,有一个过程可以监控比特币区块链中生成的所有新区块。在每个新区块中,交易所搜索将比特币转移到交易所拥有的地址的交易。所以交易所会注意到将 1 个比特币移动到 Alice 的交易所地址 XCHGX 的交易。一旦交易被确认(在包含交易的区块之后,一定数量的区块被添加到区块链),交易所将在其内部数据库中将 Alice 的 BTC 账户余额更新为 1 BTC。然后 Alice 将能够看到这 1 BTC 出现在她在交易所的 BTC 账户上。爱丽丝比特币地址的余额现在是 2 - 1 - 0.00001 = 0.99999BTC。!
image.png
假设在 ETH/BTC 的订单簿中,当前最佳卖价为 0.035,大小为 30 ETH。这意味着交易所中的其他人愿意以每 ETH 0.035 BTC 的价格出售 30 ETH 以换取 BTC。Alice 下了一个限价单,以 0.035 的价格购买 28 ETH。订单立即全部执行。假设交易所收取 0.2% 的交易费,在这笔交易之后,Alice 在她的 ETH 账户中收到 28 x (1 - 0.2%) = 27.944 ETH,1 - 28 x 0.035 = 0.02 BTC 留在她的 BTC 账户中。28 x 0.2% = 0.056 ETH 被交易所作为交易手续费。
然后 Alice 让交易所知道她想从她的交易所账户中提取 27.944 ETH 到她拥有的 ETH 地址 ALICEY。假设交易所收取 0.01 ETH 作为取款费,然后交易所向以太坊网络发送一笔交易,将 27.944 - 0.01 = 27.934 ETH 从一个或多个交易所拥有的地址转移到 Alice 提供的取款地址。一旦这笔交易被确认,爱丽丝将能够在她的钱包应用程序中看到 27.934 ETH,而在 Crypto Exchange 数据库中,她的 ETH 账户余额变为零。
从上面的流程我们可以看出一个加密交易所应该具备的核心功能是:
接受加密货币存款
生成市场数据并将数据发布给用户
接受用户的交易订单,匹配不同用户提交的订单
将加密货币发送到用户的地址
架构概述
在高级系统上下文图中,加密货币交易所为用户和内部员工提供服务,与许多区块链网络交互以发送和接收硬币或代币,并连接到许多其他加密货币交易所进行做市。
实际上,加密货币交易所连接的外部系统有很多,例如,用于发送电子邮件、发送短信、发送移动应用程序通知、获取法定货币汇率、跟踪网络和应用程序用户行为、提供实时聊天支持的外部服务,执行 2 因素身份验证,实施 CAPTCHA 等。这些外部实体也应记录在系统上下文图中。在这篇文章中,我特意隐藏了这些细节,以便我们可以专注于加密货币交易所的核心实现。
加密货币交易所用户可能来自许多不同的地点。无论他们使用移动应用程序还是使用网站访问系统,用户和系统之间传输的大部分数据都是市场数据,例如最新报价、市场深度、最近交易、蜡烛图等。为了减少延迟,我们将直接与用户交互的模块从其他核心服务模块中分离出来,并使它们可以部署到更接近来自世界不同地区的用户的多个边缘站点。从核心模块产生的数据,包括各种市场数据,只被复制到每个边缘站点一次,然后边缘站点就可以用本地数据服务多个用户请求。Edge Site 模块和核心站点模块连接起来形成一个 Akka 集群。有一些用户请求是Edge Site模块无法仅使用本地数据处理的,例如下订单。在这种情况下,边缘站点模块通过 Akka 集群调用核心站点中运行的 Akka 微服务来完成请求。
为了将用户从不同位置引导到最近的边缘站点,我们使用支持基于用户地理位置和用户 ISP 的 DNS 规则的 DNS 提供商。
Edge Sites 和 Core Site 可以运行在不同的开放云平台上。在生产环境中,我们的网站在亚马逊 AWS 和阿里云上运行。站点通过 VPN 连接,数据复制和 Akka 集群在 VPN 之上运行。
区块链交易所源码,