Skip to content

上交易对流程

确定交易对参数

Spot Pair参数

mysql
SET @BaseAsset = 'ETH'; -- 冗余字段,但Spot只会使用这个字段判断BaseAsset
SET @QuoteAsset = 'USDT';-- 冗余字段,但Spot只会使用这个字段判断QuoteAsset
SET @NestedList = '100, 50, 10, 1, 0.1, 0.01'; -- 前端显示订单簿时使用的折叠精度

SET @MinOrderQuantity = '0.01'; -- 最小下单数量(BaseAsset)
SET @LimitOrderMaxOrderQuantity = '100'; -- 限价单最大下单数量(BaseAsset)
SET @MarketOrderMaxOrderQuantity = '1000'; -- 市价单最大下单数量(BaseAsset)
SET @LimitOrderPriceLimitRate = '0.30'; -- 限价订单价格上下限(5% = 0.05)
SET @MarketOrderPriceLimitRate = '0.05'; -- 市价订单价格上下限(5% = 0.05)
SET @MinNotionalValue = '10'; -- 最小下单名义价值(QuoteAsset)
SET @MaxNotionalValue = '1000000'; -- 最大下单名义价值(QuoteAsset)
SET @MinOrderPrice = '100'; -- 最小订单价格(QuoteAsset)
SET @MaxOrderPrice = '1000000'; -- 最大订单价格(QuoteAsset)
SET @PricePrecision = '2'; -- 价格精度(QuoteAsset)
SET @QuantityPrecision = '4'; -- 数量精度(BaseAsset)
SET @UserType = 'PI,RETAIL'; -- 能够交易该币对的User Type


SET @MakerFeeRate = '0.0001'; -- 已废弃,手续费按照用户等级收取 
SET @TakerFeeRate = '0.0001'; -- 已废弃,手续费按照用户等级收取

OTC Pair参数

mysql
-- 交易对的报价货币价格精度
SET @LM_PricePrecision = '2';

币对注册中心一览表

全局信息

symbolsymbol_iconsymbol_namepaircontract_typebase_assetquote_assetsymbol_statussymbol_flagsymbol_type_iddescriptionis_use_default_fee_rateidis_deletedstatusis_stablecoin
USDC_USDhttps://static-cms.hkbitex.com.hk/USDC_0eefd2e355.pngUSDC_USDUSDCUSDOTCUSDCUSDTRADING5ENABLE2201TRUE
ETH_USDThttps://static-cms.hkbitex.com.hk/ETH_12ce8a834a.pngETH_USDTETHUSDTOTCETHUSDTTRADING5ENABLE3601TRUE
BTC_USDThttps://static-cms.hkbitex.com.hk/BTC_d420af9ecf.pngBTC_USDTBTCUSDTOTCBTCUSDTTRADING5ENABLE3501TRUE
ETH_USDChttps://static-cms.hkbitex.com.hk/ETH_12ce8a834a.pngETH_USDCETHUSDCOTCETHUSDCTRADING5ENABLE2101TRUE
BTC_USDChttps://static-cms.hkbitex.com.hk/BTC_d420af9ecf.pngBTC_USDCBTCUSDCOTCBTCUSDCTRADING5ENABLE2001TRUE
USDT_USDhttps://static-cms.hkbitex.com.hk/USDT_384029df4f.pngUSDT_USDUSDTUSDOTCUSDTUSDTRADING5ENABLE1601TRUE
ETH_USDhttps://static-cms.hkbitex.com.hk/ETH_12ce8a834a.pngETH_USDETHUSDOTCETHUSDTRADING5ENABLE1501FALSE
BTC_USDhttps://static-cms.hkbitex.com.hk/BTC_d420af9ecf.pngBTC_USDBTCUSDOTCBTCUSDTRADING5ENABLE1401FALSE
btc_usdhttps://static-cms.hkbitex.com.hk/BTC_d420af9ecf.pngBTCUSDBTCUSDSPOTBTCUSDTRADINGSHOW3ENABLE3001FALSE
eth_usdhttps://static-cms.hkbitex.com.hk/eth_3abb19ffae.pngETHUSDETHUSDSPOTETHUSDTRADINGSHOW3ENABLE3101FALSE
usdt_usdhttps://static-cms.hkbitex.com.hk/USDT_384029df4f.pngUSDTUSDUSDTUSDSPOTUSDTUSDTRADINGSHOW3ENABLE3201TRUE
btc_usdthttps://static-cms.hkbitex.com.hk/BTC_d420af9ecf.pngBTCUSDTBTCUSDTSPOTBTCUSDTTRADINGSHOW3ENABLE3301TRUE
eth_usdthttps://static-cms.hkbitex.com.hk/ETH_12ce8a834a.pngETHUSDTETHUSDTSPOTETHUSDTTRADINGSHOW3ENABLE3401TRUE
usdc_usdhttps://static-cms.hkbitex.com.hk/USDC_0eefd2e355.pngUSDCUSDUSDCUSDSPOTUSDCUSDTRADINGSHOW3ENABLE3701TRUE
btc_usdchttps://static-cms.hkbitex.com.hk/BTC_d420af9ecf.pngBTCUSDCBTCUSDCSPOTBTCUSDCTRADINGSHOW3ENABLE3801TRUE
eth_usdchttps://static-cms.hkbitex.com.hk/ETH_12ce8a834a.pngETHUSDCETHUSDCSPOTETHUSDCTRADINGSHOW3ENABLE3901TRUE

SPOT交易对参数

symbol_idBaseAssetQuoteAssetLimitOrderMaxOrderQuantityLimitOrderPriceLimitRateMarketOrderMaxOrderQuantityMarketOrderPriceLimitRateMaxNotionalValueMaxOrderPriceMinNotionalValueMinOrderPriceMinOrderQuantityNestedListPricePrecisionQuantityPrecision
30BTCUSD1000.31000.0515000001000000101000.001100, 10, 1, 0.1, 0.0124
33BTCUSDT1000.31000.0515000001000000101000.001100, 50, 10, 1, 0.1, 0.0124
38BTCUSDC1000.31000.0515000001000000101000.001100, 50, 10, 1, 0.1, 0.0124
31ETHUSD1000.31000.0515000001000000101000.01100, 50, 10, 1, 0.1, 0.0123
34ETHUSDT1000.31000.0515000001000000101000.01100, 50, 10, 1, 0.1, 0.0123
39ETHUSDC1000.31000.0515000001000000101000.01100, 50, 10, 1, 0.1, 0.0123
37USDCUSD15000000.315000000.05150000010100.1101, 0.1, 0.01, 0.001, 0.000142
32USDTUSD15000000.315000000.05150000010100.1101, 0.1, 0.01, 0.001, 0.000142

OTC交易对参数

symbol_idLM_PricePrecision
142
152
164
352
362
202
212
224

Symbol:BTC_HKD

go
SET @MinOrderQuantity = '0.001'; -- 最小下单数量(BaseAsset)
SET @LimitOrderMaxOrderQuantity = '100'; -- 限价单最大下单数量(BaseAsset)
SET @MarketOrderMaxOrderQuantity = '100'; -- 市价单最大下单数量(BaseAsset)
SET @LimitOrderPriceLimitRate = '0.30'; -- 限价订单价格上下限(5% = 0.05
SET @MarketOrderPriceLimitRate = '0.05'; -- 市价订单价格上下限(5% = 0.05
SET @MinNotionalValue = '10'; -- 最小下单名义价值(QuoteAsset)
SET @MaxNotionalValue = '1500000'; -- 最大下单名义价值(QuoteAsset)
SET @MinOrderPrice = '100'; -- 最小订单价格(QuoteAsset)
SET @MaxOrderPrice = '1000000'; -- 最大订单价格(QuoteAsset)
SET @PricePrecision = '2'; -- 价格精度(QuoteAsset)
SET @QuantityPrecision = '4'; -- 数量精度(BaseAsset)
SET @NestedList = '100, 50, 10, 1, 0.1, 0.01'; -- 前端显示订单簿时使用的折叠精度

Symbol:ETH_HKD

go
SET @MinOrderQuantity = '0.01'; -- 最小下单数量(BaseAsset)
SET @LimitOrderMaxOrderQuantity = '1000'; -- 限价单最大下单数量(BaseAsset)
SET @MarketOrderMaxOrderQuantity = '1000'; -- 市价单最大下单数量(BaseAsset)
SET @LimitOrderPriceLimitRate = '0.30'; -- 限价订单价格上下限(5% = 0.05
SET @MarketOrderPriceLimitRate = '0.05'; -- 市价订单价格上下限(5% = 0.05
SET @MinNotionalValue = '10'; -- 最小下单名义价值(QuoteAsset)
SET @MaxNotionalValue = '1500000'; -- 最大下单名义价值(QuoteAsset)
SET @MinOrderPrice = '100'; -- 最小订单价格(QuoteAsset)
SET @MaxOrderPrice = '1000000'; -- 最大订单价格(QuoteAsset)
SET @PricePrecision = '2'; -- 价格精度(QuoteAsset)
SET @QuantityPrecision = '4'; -- 数量精度(BaseAsset)
SET @NestedList = '100, 50, 10, 1, 0.1, 0.01'; -- 前端显示订单簿时使用的折叠精度

Symbol:USDC_HKD

go
SET @MinOrderQuantity = '10'; -- 最小下单数量(BaseAsset)
SET @LimitOrderMaxOrderQuantity = '1500000'; -- 限价单最大下单数量(BaseAsset)
SET @MarketOrderMaxOrderQuantity = '1500000'; -- 市价单最大下单数量(BaseAsset)
SET @LimitOrderPriceLimitRate = '0.30'; -- 限价订单价格上下限(5% = 0.05
SET @MarketOrderPriceLimitRate = '0.05'; -- 市价订单价格上下限(5% = 0.05
SET @MinNotionalValue = '10'; -- 最小下单名义价值(QuoteAsset)
SET @MaxNotionalValue = '1500000'; -- 最大下单名义价值(QuoteAsset)
SET @MinOrderPrice = '0.1'; -- 最小订单价格(QuoteAsset)
SET @MaxOrderPrice = '10'; -- 最大订单价格(QuoteAsset)
SET @PricePrecision = '4'; -- 价格精度(QuoteAsset)
SET @QuantityPrecision = '2'; -- 数量精度(BaseAsset)
SET @NestedList = '1, 0.1, 0.01, 0.001, 0.0001'; -- 前端显示订单簿时使用的折叠精度

Symbol:USDT_HKD

go
SET @MinOrderQuantity = '10'; -- 最小下单数量(BaseAsset)
SET @LimitOrderMaxOrderQuantity = '1500000'; -- 限价单最大下单数量(BaseAsset)
SET @MarketOrderMaxOrderQuantity = '1500000'; -- 市价单最大下单数量(BaseAsset)
SET @LimitOrderPriceLimitRate = '0.30'; -- 限价订单价格上下限(5% = 0.05
SET @MarketOrderPriceLimitRate = '0.05'; -- 市价订单价格上下限(5% = 0.05
SET @MinNotionalValue = '10'; -- 最小下单名义价值(QuoteAsset)
SET @MaxNotionalValue = '1500000'; -- 最大下单名义价值(QuoteAsset)
SET @MinOrderPrice = '0.1'; -- 最小订单价格(QuoteAsset)
SET @MaxOrderPrice = '10'; -- 最大订单价格(QuoteAsset)
SET @PricePrecision = '4'; -- 价格精度(QuoteAsset)
SET @QuantityPrecision = '2'; -- 数量精度(BaseAsset)
SET @NestedList = '1, 0.1, 0.01, 0.001, 0.0001'; -- 前端显示订单簿时使用的折叠精度

在Currency配置交易对信息

添加交易对(SPOT)

1.执行脚本

以ETHUSDT为例:

symbol:交易对代码

symbol_icon:交易对图标

symbol_name:交易对名称,仅作为显示使用

contract_type:交易对类型,SPOT/OTC

symbol_type_id:类型,3-spot,4-资产,5-OTC

pair:交易对名称

base_asset:基础货币

quote_asset:报价货币

mysql
START TRANSACTION;

USE `4000_exchange_currency`;

-- 1.添加币种信息
SET @symbol = 'eth_usdt'; -- 必须小写
SET @symbol_icon = 'https://static-cms.hkbitex.com.hk/thumbnail_btc.png';
SET @symbol_name = 'ETHUSDT';
SET @contract_type = 'SPOT';
SET @symbol_type_id = 3;
SET @pair = 'ETHUSDT';
SET @base_asset = 'ETH';
SET @quote_asset = 'USDT';
set @is_stable_coin = false;

-- 详细配置
SET @BaseAsset = 'ETH'; -- 冗余字段,但Spot只会使用这个字段判断BaseAsset
SET @QuoteAsset = 'USDT'; -- 冗余字段,但Spot只会使用这个字段判断QuoteAsset
SET @MinOrderQuantity = '0.01'; -- 最小下单数量(BaseAsset)
SET @LimitOrderMaxOrderQuantity = '100'; -- 限价单最大下单数量(BaseAsset)
SET @MarketOrderMaxOrderQuantity = '1000'; -- 市价单最大下单数量(BaseAsset)
SET @LimitOrderPriceLimitRate = '0.30'; -- 限价订单价格上下限(5% = 0.05)
SET @MarketOrderPriceLimitRate = '0.05'; -- 市价订单价格上下限(5% = 0.05)
SET @MinNotionalValue = '10'; -- 最小下单名义价值(QuoteAsset)
SET @MaxNotionalValue = '1000000'; -- 最大下单名义价值(QuoteAsset)
SET @MinOrderPrice = '100'; -- 最小订单价格(QuoteAsset)
SET @MaxOrderPrice = '1000000'; -- 最大订单价格(QuoteAsset)
SET @NestedList = '100, 50, 10, 1, 0.1, 0.01'; -- 前端显示订单簿时使用的折叠精度
SET @PricePrecision = '2'; -- 价格精度(QuoteAsset)
SET @QuantityPrecision = '4'; -- 数量精度(BaseAsset)
SET @UserType = 'PI,RETAIL'; -- 能够交易该币对的User Type

SET @MakerFeeRate = '0.0001'; -- 已废弃但仍需要写入,手续费按照用户等级收取 
SET @TakerFeeRate = '0.0001'; -- 已废弃但仍需要写入,手续费按照用户等级收取 

INSERT INTO `4000_exchange_currency`.`currency_symbol_info` (`symbol`, `symbol_icon`, `symbol_name`, `pair`,
                                                             `contract_type`,
                                                             `delivery_date`, `onboard_date`, `base_asset`,
                                                             `quote_asset`,
                                                             `symbol_status`, `symbol_type_id`, `created_at`,
                                                             `updated_at`, `is_use_default_fee_rate`, `is_stable_coin`)
VALUES (@symbol, @symbol_icon, @symbol_name, @pair, @contract_type,
        1598252400000, 1598252400000, @base_asset, @quote_asset, 'TRADING', @symbol_type_id, NOW(), NOW(), 'ENABLE',
        @is_stable_coin);

-- is_use_default_fee_rate: 是否使用默认费率,一般新交易对为ENABLE,随后在Admin面板中可以修改为DISABLE

SET @last_id = LAST_INSERT_ID();

-- 2.添加交易对配置信息
INSERT INTO `4000_exchange_currency`.`currency_symbol_settings` (`created_at`, `updated_at`, `symbol_id`,
                                                                 `settings_key`, `settings_value`)
VALUES (NOW(), NOW(), @last_id, 'BaseAsset', @BaseAsset),
       (NOW(), NOW(), @last_id, 'LimitOrderMaxOrderQuantity', @LimitOrderMaxOrderQuantity),
       (NOW(), NOW(), @last_id, 'LimitOrderPriceLimitRate', @LimitOrderPriceLimitRate),
       (NOW(), NOW(), @last_id, 'MakerFeeRate', @MakerFeeRate),
       (NOW(), NOW(), @last_id, 'MarketOrderMaxOrderQuantity', @MarketOrderMaxOrderQuantity),
       (NOW(), NOW(), @last_id, 'MarketOrderPriceLimitRate', @MarketOrderPriceLimitRate),
       (NOW(), NOW(), @last_id, 'MaxNotionalValue', @MaxNotionalValue),
       (NOW(), NOW(), @last_id, 'MaxOrderPrice', @MaxOrderPrice),
       (NOW(), NOW(), @last_id, 'MinNotionalValue', @MinNotionalValue),
       (NOW(), NOW(), @last_id, 'MinOrderPrice', @MinOrderPrice),
       (NOW(), NOW(), @last_id, 'MinOrderQuantity', @MinOrderQuantity),
       (NOW(), NOW(), @last_id, 'NestedList', @NestedList),
       (NOW(), NOW(), @last_id, 'PricePrecision', @PricePrecision),
       (NOW(), NOW(), @last_id, 'QuantityPrecision', @QuantityPrecision),
       (NOW(), NOW(), @last_id, 'QuoteAsset', @QuoteAsset),
       (NOW(), NOW(), @last_id, 'TakerFeeRate', @TakerFeeRate),
       (NOW(), NOW(), @last_id, 'UserType', @UserType);

COMMIT;

2.重启服务

  • exchange-currency-service-backend(或等5分钟热加载)

添加交易对(OTC)

1.执行脚本

以ETH_USD为例:

symbol:交易对代码

symbol_icon:交易对图标

symbol_name:交易对名称,仅作为显示使用

contract_type:交易对类型,SPOT/OTC

symbol_type_id:类型,3-spot,4-资产,5-OTC

pair:交易对名称

base_asset:基础货币

quote_asset:报价货币

mysql
START TRANSACTION;

USE `4000_exchange_currency`;

-- 1.添加币种信息
SET @symbol = 'ETH_USD'; -- 必须大写
SET @symbol_icon = 'https://static-cms.hkbitex.com.hk/thumbnail_btc.png';
SET @symbol_name = 'ETH_USD';
SET @contract_type = 'OTC';
SET @symbol_type_id = 5;
SET @pair = 'ETHUSD';
SET @base_asset = 'ETH';
SET @quote_asset = 'USD';

SET @LM_PricePrecision = '2';

INSERT INTO `4000_exchange_currency`.`currency_symbol_info` (`symbol`, `symbol_icon`, `symbol_name`, `pair`,
                                                             `contract_type`,
                                                             `delivery_date`, `onboard_date`, `base_asset`,
                                                             `quote_asset`,
                                                             `symbol_status`, `symbol_type_id`, `created_at`,
                                                             `updated_at`, `is_use_default_fee_rate`)
VALUES (@symbol, @symbol_icon, @symbol_name, @pair, @contract_type,
        1598252400000, 1598252400000, @base_asset, @quote_asset, 'TRADING', @symbol_type_id, NOW(), NOW(), 'DISABLE');

SET @last_id = LAST_INSERT_ID();

-- 2.添加交易对配置信息
INSERT INTO `4000_exchange_currency`.`currency_symbol_settings` (`created_at`, `updated_at`, `symbol_id`,
                                                                 `settings_key`, `settings_value`)
VALUES (NOW(), NOW(), @last_id, 'LM_PricePrecision', @LM_PricePrecision);

COMMIT;

2.重启服务

  • exchange-currency-service-backend(或等5分钟热加载)

启动Spot引擎

创建相关币种的手续费账户

如果手续费币种不存在,新增一个 (account_id 必须为FEE_001)

mysql
INSERT INTO `4000_exchange_spot_clearing`.balances (account_id, asset_id, identifier, kind, feature_key, amount,
                                                    locked_amount, free_amount, last_trade_date, cutoff_amount,
                                                    cutoff_locked_amount, cutoff_free_amount, cutoff_date)
VALUES ('FEE_001', 'USDT', 'FEE_001#USDT', 'TRADING_FEE', 'any', 0, 0, 0, '2024-01-01 00:00:00.000', 0, 0, 0,
        '2025-02-07 03:00:00.000');

部署容器

创建以上三个服务的ApiSix路由

text
4000-exchange-ingress-backend-eth-usdt-grpc.apisix:9081
4000-exchange-engine-backend-eth-usdt-grpc.apisix:9081
4000-exchange-clearing-backend-eth-usdt-grpc.apisix:9081
json
{
  "uri": "/*",
  "name": "4000-exchange-spot-clearing-backend-eth-usdt-grpc",
  "methods": [
    "GET",
    "POST",
    "PUT",
    "DELETE",
    "PATCH",
    "HEAD",
    "OPTIONS",
    "CONNECT",
    "TRACE",
    "PURGE"
  ],
  "host": "4000-exchange-spot-clearing-backend-eth-usdt-grpc.apisix",
  "upstream": {
    "timeout": {
      "connect": 6,
      "send": 6,
      "read": 6
    },
    "type": "roundrobin",
    "scheme": "grpc",
    "discovery_type": "consul",
    "pass_host": "pass",
    "service_name": "4000-exchange-spot-clearing-backend-eth-usdt-grpc",
    "keepalive_pool": {
      "idle_timeout": 60,
      "requests": 1000,
      "size": 320
    }
  },
  "status": 1
}
json
{
  "uri": "/*",
  "name": "4000-exchange-ingress-backend-grpc-eth-usdt",
  "methods": [
    "GET",
    "POST",
    "PUT",
    "DELETE",
    "PATCH",
    "HEAD",
    "OPTIONS",
    "CONNECT",
    "TRACE",
    "PURGE"
  ],
  "host": "4000-exchange-ingress-backend-grpc-eth-usdt.apisix",
  "upstream": {
    "timeout": {
      "connect": 6,
      "send": 6,
      "read": 6
    },
    "type": "roundrobin",
    "scheme": "grpc",
    "discovery_type": "consul",
    "pass_host": "pass",
    "service_name": "4000-exchange-ingress-backend-grpc-eth-usdt",
    "keepalive_pool": {
      "idle_timeout": 60,
      "requests": 1000,
      "size": 320
    }
  },
  "status": 1
}
json
{
  "uri": "/*",
  "name": "4000-exchange-engine-backend-eth-usdt-grpc",
  "methods": [
    "GET",
    "POST",
    "PUT",
    "DELETE",
    "PATCH",
    "HEAD",
    "OPTIONS",
    "CONNECT",
    "TRACE",
    "PURGE"
  ],
  "host": "4000-exchange-engine-backend-eth-usdt-grpc.apisix",
  "upstream": {
    "timeout": {
      "connect": 6,
      "send": 6,
      "read": 6
    },
    "type": "roundrobin",
    "scheme": "grpc",
    "discovery_type": "consul",
    "pass_host": "pass",
    "service_name": "4000-exchange-engine-backend-eth-usdt-grpc",
    "keepalive_pool": {
      "idle_timeout": 60,
      "requests": 1000,
      "size": 320
    }
  },
  "status": 1
}

创建Orchestrator指向

mysql
INSERT INTO `4000_exchange_orchestrator`.symbol_engines (symbol, setup_stage, network_mode, ingress_grpc, engine_grpc,
                                                         clearing_grpc)
VALUES ('eth_usdt', 'DONE', 'dns', '4000-exchange-ingress-backend-eth-usdt-grpc.apisix:9081',
        '4000-exchange-engine-backend-eth-usdt-grpc.apisix:9081',
        '4000-exchange-clearing-backend-eth-usdt-grpc.apisix:9081');

等待15秒,Orchestrator自动hot reload

根据其它币种配置,部署新交易对的三容器

Ingress/Engine/Clearing,替换HCL配置单中所有的币对信息,包含两种情况

text
eth_usdt
eth-usdt

若有除了USD/HKD之外的法币作为BaseAsset/QuoteAsset

需要修改Quota/Order/Clearing源代码支持额外的法币币种及法币汇率。

检查

  • 前端正常显示币对信息

  • API调用能够返回币对信息

  • 可以正常转入/转出币种

重启服务

  1. exchange-market-agg-backend
  2. exchange-push-server-backend
  3. exchange-statistical-service-backend

🚀 构建现代化数字资产交易平台