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




