Carry-Coin 架构设计 Core模块(1)
Carry-Coin Core的Center,Decenter,protocol的设计
Core组成部分
Swap基本概念
- SwapEngine
- 套利引擎,内部独立线程,Handler执行 ,Center构建,Job注册
- SwapEngine最初设计可以支持dex(n)<->cex(n),目前阶段仅SingleSwapEngine 实现了dex(1,n)<->cex(1)的套利动作,
即一个Engine绑定1个cex和N个dex;
- SwapContext(标记接口)
- SwapContext是SwapEngine的上下文,是个巨型类,为了跨交易所共用上下文预留的,主要是保存SwapEngine运行时的数据,包含了所有重要对象的引用:交易所信息,交易对信息,交易所账户信息;
- SwapConfig
- SwapConfig是SwapEngine的配置类,主要是保存SwapEngine运行时所需的配置信息;
- SwapHandler
- 用来初始化Context,同步job的阻塞加载,异步job的注册,BizDataLoaderContext首次初始化和校验
- SwapInitializerConfig
- 根据yml初始化SwapLauncher来触发Engine工作;
- SwapLauncher
- 交易引擎启动器
Center
Cex中心交易所相关的抽象和套利动作
- CenterExchangeHolder
- 中心交易所的顶级抽象,主要是一些技术动作: 注册同步和异步的取数器(Job),获取Context数据等动作
- 交易所支持同步和异步取数两种模式,同步在SwapEngine初始化时执行一次,异步周期性运行;
- 周期性执行使用ScheduledExecutorService,实现使用了alibaba的
transmittable-thread-local
库,主要目的解决异步执行时上下文传递的问题; - Job方式取来的数据都会放在BizDataLoaderContext容器中;
- 周期性执行使用ScheduledExecutorService,实现使用了alibaba的
- AbstractCenterExchangeHolder
- 对CenterExchangeHolder的基本实现
- CenterExchangeHolderBehavior
- 业务动作抽象接口:Limit/Marker下单,撤单,获取订单状态,提现,转账等业务动作,这个接口也是pipeline和job中操作Cex的核心,非必要业务流中
不操作CenterExchangeHolder,AbstractCenterExchangeHolder这种顶级接口; - Cex交易所操作使用Xchange完成;
- 业务动作抽象接口:Limit/Marker下单,撤单,获取订单状态,提现,转账等业务动作,这个接口也是pipeline和job中操作Cex的核心,非必要业务流中
- FacilitySupport
- 提供一套基本的Cex实现模板
- CenterSymbolInfo
- Cex侧套利相关配置信息
Decenter
Dex去中心交易平台相关的抽象,
Decenter.protocol
Decenter中SwapProtocol协议抽象,目前已实现包含solana,bsc链,odos,zerox平台的询价、交易动作;
设计过程中难点在于对不同链的交易动作进行同一视角进行抽象和设计;
EVM部分
- GenericWeb3jBehavior
- 链上动作的通用抽象,默认只实现getNetwork,getWeb3jManager,考虑到多链支持Client客户端不定,所以作为泛型传入;
- 必要动作queryTxConfirmed,getRawAmountOut,getBalanceOfNode做抽象方法,考虑到这几个方法不挑网络,入参回参明确,所以放在此处;
- 不同链差异化动作放在下层实现.
- EthGenericWeb3jBehavior
- 具象evm链的实现,主要是实现网络层面、Token层面的一些方法了allowance, getTransactionGasLimit, signTransaction, waitTxConfirmed, queryTxConfirmed, getNonce, getBalanceOfNode, tokenTransfer, getGasProvider, gasProvider
- GenericSwapV2Impl,GenericSwapV3Impl
- 基于EthGenericWeb3jBehavior完成Dex swap全过程的方法,包含:getAmountsOut,swapExactTokensForTokens,swapExactTokensForTokensSupportingFeeOnTransferTokens
- getRawAmountOut区别于getAmountsOut,是用来通过evm中log数据获取最终交换到的token数量;
- SwapExactTForTParam
- 上层通过该类传入swap所需参数;
Solana部分
ODOS部分
Strategy
交易策略
swap
套利动作
Carry-Coin 架构设计 Core模块(1)
https://konbluesky.github.io/2024/10/14/carry_coin_architecture_2/