规划

未完成的

  • 慢 blockhash 策略 tpu 策略
  • 要求 account 构建没有问题
  • 全局变量 arc 化 这个适合只读情况
  • 汇率计算不规则现象 只需要在合约里面计算 pamm 购买的汇率即可
  • grpc_account 不要引起线程阻塞 CPU 没有打满 还需要加速优化
  • 合约的 pamm 买入不支持 0 滑点 卖出支持 需要把计算代码写到合约里面
  • 合约测试成功
    • 合约每一个需要实验一下 看看如何更省 CU
    • 在开发网上面再次测试一下合约
    • 测试合约调优 把该删掉的日志都删掉
  • 交易构建成功
  • set_token_data 可以直接移除 不需要了
  • 实时价格计算,redis 可以移除了
  • 添加定时器获取 blockhash
  • 需要优化的点
    • entry 那里需要 public 写死
    • 获取数据的时候使用 get_mut

三个大点

  • 合约
  • grpc_account 用于构建基础数据
  • grpc 用于解析各种数据
  • 指令构建

学习这笔交易:https://solscan.io/tx/2732JbtzCqZnqoZHwcaNHfa2nKyWsspaYvwnVtba1ZSJh1YJsF6nst3BDmoSE9ucgJ3xn5YTuYXeFNBvoN51pjv7

去除警告运行命令:RUSTFLAGS = “-Awarnings” cargo run –bin arb

总体任务计划

  • 指令拼接

    • pamm buy 需要链上计算汇率 sell 不需要
    • raydium amm 卖和买 ata 交换一下位置即可 重复的 market 地址不需要是 writeable 合约那里似乎写错了
    • raydium cpmm // 卖出的时候 要有三对进行替换 ata vault mint
    • meteora damm 卖和买 ata 交换一下位置即可
    • solfi 最后一位,0 是 buy 1 是 sell 看来要改一下合约了 其他的不需要改
    • raydium clmm 写死使用 swap v2 尝试 swap 交易 token 和 ata 和 pool1 这三个地址对进行换位置 data 的 bool 始终保持为 true
    • meteora dlmm 他的 tick 要求严格具有一定的时效性
    • meteora pool 买和卖的 fee 账户不一样 注意还有最后一位可有可无的 这个太特殊了 后面要改
      • mSol 这个比较特殊 数据库那里需要打上标记啥的
    • linfity 买卖的时候 swap_source 和 swap_destination 要换一下位置 ata 也换位 就 ok 了
    • orca 售卖的话 aTob 参数修改成 false tick 换成 对应的 sell tick
    • 完善文档添加对比交易
  • grpc 数据流

    • 保持不断开 不断开的前提是可以解析所有事件
    • 保持持续开 2 条数据流 就开一条吧 2 条容易阻塞
  • tick 如何存储 7dg 的 tick 后面跟了 5 个

    • grpc 抓别人的 或者 account 流自己算
  • 每一个 dex 添加对应条件 并且设置 j++ 以便快速过滤

  • flash 的 usdc

  • 尝试单开监听池子数据流计算 tick - 这个目前算了,因为单开一个没啥用处

  • 把 redis 数据转化成全局变量包 - 全内存快照

  • 交易过滤那里再添加一个双签名 把这种交易不要了

  • grpc_account 那里的 orca 池子需要筛选 不然老是断开

  • grpc_account 精细化 ata 啥的也需要全局变量精细化处理

  • 提升 redis 速度 只能全局话处理

  • token 数据库 可能需要引入价格 进而执行路由操作 还有方向控制啥的

    • 计算汇率 也就是价格 只计算 sol- token 之间的汇率 然后就是发现交易 直接从池子里面找到 最大的和最小的汇率 但是关键点是判断汇率方向
  • linfity 需要精确识别数据 按照 swap 前缀去识别

  • 数据库精细化处理 数据之间的 token 如何进行对应啥的

  • entry 序列化标志

  • base58 优化

  • 代码格式化 cargo fmt

  • 开 2 个 grpc 数据流

  • 每一个 池子搞一下基础 CU 设置

    • klend - usdc 7.7w

    • klend - wsol 6.7w

    • solfi 49123

    • solfi jito setdata 7w CU -setdata 可以不要

    • pamm 7.7 w

    • orca 4.5 w

    • lifinity 6.5 w

    • meteora_pool 15w

    • meteora_dlmm 5.5w

    • meteora_damm 4w

    • raydium 2.5w

    • raydium_clmm 7.7w

    • raydium_cpmm 4w

  • 交易发送的代码

    • jito
    • astra
    • tpu
    • 预估下一块 数据库里面打上时间戳啥的
  • 哪一种 base58 速度更快 不行的话就使用 asm - 暂且使用那个老点的

account 字段

协议 / 场景 起始索引 结束索引
Whirlpools 101 181
Raydium amm 400 432
Raydium clmm 73 105
Solfi 2664 2696
Lifinity v2 254 286
Meteora pool 4072 —

加池子解析

各个池子 swap 详情

  • pamm buy 需要链上计算汇率 sell 不需要
  • raydium amm 卖和买 ata 交换一下位置即可 重复的 market 地址不需要是 writeable 合约那里似乎写错了
  • raydium cpmm // 卖出的时候 要有三对进行替换 ata vault mint
  • meteora damm 卖和买 ata 交换一下位置即可
  • solfi 最后一位,0 是 buy 1 是 sell 看来要改一下合约了 其他的不需要改
  • raydium clmm swap 交易 token 和 ata 和 pool1 这三个地址对进行换位置 data 的 bool 始终保持为 true
  • meteora dlmm 他的 tick 要求严格具有一定的时效性
  • meteora pool 买和卖的 fee 账户不一样 注意还有最后一位可有可无的 这个太特殊了 后面要改
    • mSol 这个比较特殊 数据库那里需要打上标记啥的
  • linfity 买卖的时候 swap_source 和 swap_destination 要换一下位置 ata 也换位 就 ok 了
  • orca 售卖的话 aTob 参数修改成 false tick 换成 对应的 sell tick

Plan

主要关注: ray cpmm 有三个位置需要交换 完成

raydium clmm 也是三个位置

linfity 是 2 个位置

pamm 的合约如何写?

还是一个 ix 加上一个 flag 的标志

  • 研究 setdata 这个需要合约啥的所有东西搞好之后 才可以 使用模拟即可
  • account 没有任何问题
  • 生成签名是如何计算出来的 指令初始化 - 这个废弃掉
  • tick 精准计算 这个最困难
  • flash 的 cu 和 setdata
  • nonce 配合一下 flash
  • 添加 humidifi
  • 添加 Tess - 暂且不搞
  • 添加 fusion
  • zerofi - 暂且不搞
  • perp - 暂且不搞
  • 免息借贷指令 —-
  • 研究一下 hyper - 无法研究
  • 详解 raydium clmm 目前重点是这个
  • 重构 orca 的 tick
  • 重构 meteora_dlmm 的 tick
  • sell_tick 和 buy_tick 搞明白
  • 需要全局变量写入 tick

其它指令

场景 模拟消耗 CU setdatasize
ix_create_associated_token_account_idempotent 5988 245493
创建 ATA 20337 239240
单个 nonce 150 6109
cu + price 300 22
setdata 150 22
nonce + cu + price + setdata 600 6131
flash sol 77608 148018
flash usdc 77583 148018

各种情况的 setdata 以及 CU

每 32 kb = 32 * 1024 是 8CU

协议 / 场景 unitsConsumed (CU) loadedAccountsDataSize (bytes)
pamm buy 46,976 241,931
pamm sell 39,476 241,931
raydium amm 26,778 135,587
raydium clmm 26,993 173,509
solfi 49,165 137,613
orca 53,715 165,430
lifinity 75,436 142,595
zerofi 43,911 144,413
2 个 CU+price 指令 300 22
humi 31807 136581
fusion_buy 53550 240164
fusion_sell 47733 240164

注意事项

pamm 必须第一位是 token 第二位是 sol 是指 mint 和 ata

自己的合约

协议 / 场景 模拟消耗 CU setdatasize
pamm buy 161,055 (优化后 94,507) 241,945
pamm sell 80,894 241,208
solfi buy 56,494 137,649
solfi sell 56,413 137,649
orca buy 53,498 165,466
orca sell 53,594 165,466
raydium amm buy/sell 31,847 135,601
raydium cpmm buy (有创建 ATA) 72,089 244,874
raydium cpmm buy (无创建 ATA) 44,252 139,961
raydium cpmm sell 44,246 139,961
lifinity buy 70,072 142,631
lifinity sell 70,353 142,631