数字货币交易所系统开发(技术)

数字货币交易所主要由以下5个系统组成:
1.账户系统
不管是韭菜还是庄家,只要是交易所的用户,都会有一个自己的中心化账户,这个账户里包含了用户的身份信息、资产信息以及交易信息等,这些信息都需要账户系统来进行统一的记录和管控。
2.出入账系统
出入帐系统不记录数据,它的主要功能是在交易、充值或是提现的过程中,完成出账和入账的业务逻辑实现,将资产的变动与账户数据打通。
3.交易管理系统
对应到赌场的情景中,这个系统的功能就是定义并记录所有的游戏规则与数据。交易所的涨跌幅、K线以及交易数据等都是由这个系统来管理。
4.撮合引擎
它只有一个功能——订单撮合,交易所的所有买和卖的需求,都需要撮合引擎把买单和卖单撮合成交易。
5.区块链钱包
数字货币交易所系统开发自身以及用户的所有数字资产,都是存在区块链钱包中,用户每次实际充值提现所产生的链上交互,都是由钱包完成。
以上5个系统中,其中有2个又是系统建设中的重中之重,一个是撮合引擎,一个是区块链钱包。
撮合引擎对于交易所的重要程度,就像心脏之于人,撮合引擎需要以一己之力带动交易所其他各系统的运转。一个优秀的撮合引擎需要满足以下三个要求:
1.强大到变态的性能:交易所规模越大,并发的交易也就越多,撮合引擎性能的好坏,直接制约了交易所业务的发展。
2.多种订单类型全兼容:常用的订单类型就包括限价单、市价单、止盈止损单等。
3.合约功能的支持:现阶段的交易所行业中,合约交易已经几乎成了必备功能,合约的撮合实现相比现货要复杂许多,对技术的要求也会更高。
就技术层面而言,做好撮合系统已经成功了一半,另一半成功的关键就是区块链钱包。
一方面钱包需要做中心化和去中心化的桥接,打通两者的资产数据,另一方面钱包还必须安全稳妥的实现资金管理的职能。一旦钱包出现问题,发生了盗币的情况,轻则导致元气大伤,重则会导致交易所直接破产。

   function buyNewLevel(uint8 matrix, uint8 level) external payable {
    require(isUserExists(msg.sender), "user is not exists. Register first.");
    require(matrix == 1 || matrix == 2, "invalid matrix");
    require(msg.value == levelPrice[level], "invalid price");
    require(level > 1 && level <= LAST_LEVEL, "invalid level");

    if (matrix == 1) {
        require(!users[msg.sender].activeX3Levels[level], "level already activated");

        if (users[msg.sender].x3Matrix[level-1].blocked) {
            users[msg.sender].x3Matrix[level-1].blocked = false;
        }

        address freeX3Referrer = findFreeX3Referrer(msg.sender, level);
        users[msg.sender].x3Matrix[level].currentReferrer = freeX3Referrer;
        users[msg.sender].activeX3Levels[level] = true;
        updateX3Referrer(msg.sender, freeX3Referrer, level);
        
        emit Upgrade(msg.sender, freeX3Referrer, 1, level);

    } else {
        require(!users[msg.sender].activeX6Levels[level], "level already activated"); 

        if (users[msg.sender].x6Matrix[level-1].blocked) {
            users[msg.sender].x6Matrix[level-1].blocked = false;
        }

        address freeX6Referrer = findFreeX6Referrer(msg.sender, level);
        
        users[msg.sender].activeX6Levels[level] = true;
        updateX6Referrer(msg.sender, freeX6Referrer, level);
        
        emit Upgrade(msg.sender, freeX6Referrer, 2, level);
    }
}    

猜你喜欢

转载自blog.csdn.net/T13242772558/article/details/109259601