Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d9a214b4b4 | ||
|
|
047b549d0f | ||
|
|
9327eab010 | ||
|
|
0ef57cf79a | ||
|
|
03030d817d |
54
consts.go
54
consts.go
@@ -185,6 +185,7 @@ var mevAgentFeeAddresses = map[solana.PublicKey]string{
|
||||
solana.MustPublicKeyFromBase58("soyascXFW5wEEYiwfEmHy2pNwomqzvggJosGVD6TJdY"): MevAgentSoyas,
|
||||
solana.MustPublicKeyFromBase58("soyasDBdKjADwPz3xk82U3TNPRDKEWJj7wWLajNHZ1L"): MevAgentSoyas,
|
||||
solana.MustPublicKeyFromBase58("soyasE2abjBAynmHbGWgEwk4ctBy7JMTUCNrMbjcnyH"): MevAgentSoyas,
|
||||
solana.MustPublicKeyFromBase58("soyasF3QPWPAKKmgA3GjfWax1kmTT1aoqSGxPzVLNUQ"): MevAgentSoyas,
|
||||
solana.MustPublicKeyFromBase58("ste11JV3MLMM7x7EJUM2sXcJC1H7F4jBLnP9a9PG8PH"): MevAgentStellium,
|
||||
solana.MustPublicKeyFromBase58("ste11MWPjXCRfQryCshzi86SGhuXjF4Lv6xMXD2AoSt"): MevAgentStellium,
|
||||
solana.MustPublicKeyFromBase58("ste11p5x8tJ53H1NbNQsRBg1YNRd4GcVpxtDw8PBpmb"): MevAgentStellium,
|
||||
@@ -209,6 +210,14 @@ var mevAgentFeeAddresses = map[solana.PublicKey]string{
|
||||
solana.MustPublicKeyFromBase58("B1ooMauwuJPhHsXqt3uj7B92CAFG8kaD1Q2iGEmGYnx"): MevAgentAstralane,
|
||||
solana.MustPublicKeyFromBase58("B1ooMdjcY7zemxDWiH8jVZPxEMdHnE5AraWPHdHQoPj"): MevAgentAstralane,
|
||||
solana.MustPublicKeyFromBase58("B1ooMKzu6siJzQutP6a6oLiY3fpzgQnBZsAjxuAm9qo"): MevAgentAstralane,
|
||||
solana.MustPublicKeyFromBase58("AstrA1ejL4UeXC2SBP4cpeEmtcFPZVLxx3XGKXyCW6to"): MevAgentAstralane,
|
||||
solana.MustPublicKeyFromBase58("AsTra79FET4aCKWspPqeSFvjJNyp96SvAnrmyAxqg5b7"): MevAgentAstralane,
|
||||
solana.MustPublicKeyFromBase58("AsTRADtvb6tTmrsqULQ9Wji9PigDMjhfEMza6zkynEvV"): MevAgentAstralane,
|
||||
solana.MustPublicKeyFromBase58("AsTRAEoyMofR3vUPpf9k68Gsfb6ymTZttEtsAbv8Bk4d"): MevAgentAstralane,
|
||||
solana.MustPublicKeyFromBase58("AStrAJv2RN2hKCHxwUMtqmSxgdcNZbihCwc1mCSnG83W"): MevAgentAstralane,
|
||||
solana.MustPublicKeyFromBase58("Astran35aiQUF57XZsmkWMtNCtXGLzs8upfiqXxth2bz"): MevAgentAstralane,
|
||||
solana.MustPublicKeyFromBase58("AStRAnpi6kFrKypragExgeRoJ1QnKH7pbSjLAKQVWUum"): MevAgentAstralane,
|
||||
solana.MustPublicKeyFromBase58("ASTRaoF93eYt73TYvwtsv6fMWHWbGmMUZfVZPo3CRU9C"): MevAgentAstralane,
|
||||
solana.MustPublicKeyFromBase58("Gu2UGEfze3Gg5cHuEC4jGbyCufgpev75RkVvBdKKtf12"): MevAgentNozomi,
|
||||
solana.MustPublicKeyFromBase58("E8wD3SMD1trozPrvSN9F6SyuUXD7rrFDuR3WexGziKG5"): MevAgent0slot,
|
||||
solana.MustPublicKeyFromBase58("18hCV7f9CPmZRAH3QCNZaGHhHeNSfisQKeKuFkQsPLY"): MevAgent0slot,
|
||||
@@ -327,6 +336,51 @@ var mevAgentFeeAddresses = map[solana.PublicKey]string{
|
||||
solana.MustPublicKeyFromBase58("bgH7YhymSykyvMa3nAZpzvrn73owJHU5iB75S1aiLT9"): MevAgentNozomi,
|
||||
solana.MustPublicKeyFromBase58("pfngGVVQLiVRFbLWw3Ektiv17ef9NiRZbcgdAhh4ZEW"): MevAgentNozomi,
|
||||
solana.MustPublicKeyFromBase58("nEFs3jph8HJt7honu3k7XtGUufMnwAvSXmXcKSPxryP"): MevAgentNozomi,
|
||||
solana.MustPublicKeyFromBase58("Fa1con11xLjPddfzRwRUB16sbFZggp2JeJkCeWREyR8X"): MevagentFa1con,
|
||||
solana.MustPublicKeyFromBase58("Fa1con11TM1RuAQzbQzYjTy4Ekfap9Lnc9fnEbQYEd6Q"): MevagentFa1con,
|
||||
solana.MustPublicKeyFromBase58("Fa1con113Bvi76nS5AzUiRDC2fqjfzkNMUNRLgQybMYt"): MevagentFa1con,
|
||||
solana.MustPublicKeyFromBase58("Fa1con1QGHJK232s8yZpzZZwqPexnAKcoyKj626LNsMv"): MevagentFa1con,
|
||||
solana.MustPublicKeyFromBase58("Fa1con1zUzb6qJVFz5tNkPq1Ahm8H1qKW7Q48252QbkQ"): MevagentFa1con,
|
||||
solana.MustPublicKeyFromBase58("Fa1con16d3MSwd3SAiwvr2LwgkpE7ot8zntbpuec8HAx"): MevagentFa1con,
|
||||
solana.MustPublicKeyFromBase58("Fa1con1i7mpa7Qc6epYJ6r4P9AbU77DFFz173r59Df1x"): MevagentFa1con,
|
||||
solana.MustPublicKeyFromBase58("Fa1con18nWn8TdAGL7JX8PertfMUGVSc899NawokJ4Bq"): MevagentFa1con,
|
||||
solana.MustPublicKeyFromBase58("Fa1con1GKusK2EqsfzrDzGPaYZSxQtFGzJiRMMU9Zm2g"): MevagentFa1con,
|
||||
solana.MustPublicKeyFromBase58("Fa1con1RDwVwM9VrJ53CwVefD3VU9c58EMpDawV7fLMi"): MevagentFa1con,
|
||||
solana.MustPublicKeyFromBase58("Sp1x2AqpQckPLaWnWCJUNg8k6qQexfaEWcSRKf5JcDV"): MevagentBlocksprint,
|
||||
solana.MustPublicKeyFromBase58("Sp4JHSh9cksfzXbgK7Pq2ovtn8LirLQydaJKTsiNT77"): MevagentBlocksprint,
|
||||
solana.MustPublicKeyFromBase58("Sp1xMS2cbw83SZDNr4AGqkBYYLjb3LvVnmDSrTMaHkr"): MevagentBlocksprint,
|
||||
solana.MustPublicKeyFromBase58("SpagSJmnh8E9cGT5Y431xPPaS2c1xLREGGCWN9yDeUf"): MevagentBlocksprint,
|
||||
solana.MustPublicKeyFromBase58("SpWrza9E63MQuHeGnnfzmtLVCs3pBdjyKPXUABPo9nq"): MevagentBlocksprint,
|
||||
solana.MustPublicKeyFromBase58("moon17L6BgxXRX5uHKudAmqVF96xia9h8ygcmG2sL3F"): MevAgentMoon,
|
||||
solana.MustPublicKeyFromBase58("moon26Sek222Md7ZydcAGxoKG832DK36CkLrS3PQY4c"): MevAgentMoon,
|
||||
solana.MustPublicKeyFromBase58("moon7fwyajcVstMoBnVy7UBcTx87SBtNoGGAaH2Cb8V"): MevAgentMoon,
|
||||
solana.MustPublicKeyFromBase58("moonBtH9HvLHjLqi9ivyrMVKgFUsSfrz9BwQ9khhn1u"): MevAgentMoon,
|
||||
solana.MustPublicKeyFromBase58("moonCJg8476LNFLptX1qrK8PdRsA1HD1R6XWyu9MB93"): MevAgentMoon,
|
||||
solana.MustPublicKeyFromBase58("moonF2sz7qwAtdETnrgxNbjonnhGGjd6r4W4UC9284s"): MevAgentMoon,
|
||||
solana.MustPublicKeyFromBase58("moonKfftMiGSak3cezvhEqvkPSzwrmQxQHXuspC96yj"): MevAgentMoon,
|
||||
solana.MustPublicKeyFromBase58("moonQBUKBpkifLcTd78bfxxt4PYLwmJ5admLW6cBBs8"): MevAgentMoon,
|
||||
solana.MustPublicKeyFromBase58("moonXwpKwoVkMegt5Bc776cSW793X1irL5hHV1vJ3JA"): MevAgentMoon,
|
||||
solana.MustPublicKeyFromBase58("moonZ6u9E2fgk6eWd82621eLPHt9zuJuYECXAYjMY1C"): MevAgentMoon,
|
||||
solana.MustPublicKeyFromBase58("SpEEdz8S1KorkMZqjMUxfxrmWwofmp6ReNP2Nx6CUmq"): MevAgentSpeedlanding,
|
||||
solana.MustPublicKeyFromBase58("SpeeDy3GJM4wcrQmk1itRFWgidvxX4rwjTLMv78wwjE"): MevAgentSpeedlanding,
|
||||
solana.MustPublicKeyFromBase58("SPeEdva37vW8vRtqgYjprQs1g3965icfVN5Rt7SMAyh"): MevAgentSpeedlanding,
|
||||
solana.MustPublicKeyFromBase58("speEdrSEpox5GUfHWcBc7tQjRuSfUin2yvB7qoYvvJh"): MevAgentSpeedlanding,
|
||||
solana.MustPublicKeyFromBase58("SPeEDmkHkN3A2roSZf6aZyEMsmrGqTHKqwP51y2Y4rV"): MevAgentSpeedlanding,
|
||||
solana.MustPublicKeyFromBase58("SpeedLdTJXh2RKpXEaP8JCxkWoUVXhtdPQ1EnxBJMxc"): MevAgentSpeedlanding,
|
||||
solana.MustPublicKeyFromBase58("SpEediGKLbbXndSYTzwmz6Z3NDgHQLDcTDEvGFkSMH9"): MevAgentSpeedlanding,
|
||||
solana.MustPublicKeyFromBase58("speede8xCcUq2Tiv1efXeTuE3k9TDNq8TnGKaKSc6J4"): MevAgentSpeedlanding,
|
||||
solana.MustPublicKeyFromBase58("harkEpXoJv5qVzHaN7HSuUAd6PHjyMcFMcDYBMDJCEQ"): MevAgentAllenhark,
|
||||
solana.MustPublicKeyFromBase58("harkm2BTWxZuszoNpZnfe84jRbQTg6KGHaQBmWzDGQQ"): MevAgentAllenhark,
|
||||
solana.MustPublicKeyFromBase58("harkR2YJ4Dpt4UDJTcBirjnSPBhNpQFcoFkNpCkVqNk"): MevAgentAllenhark,
|
||||
solana.MustPublicKeyFromBase58("t3QLYyXH4vZYbEifLqjD581t5dPVhq9LABxWceySzL2"): MevAgentRaiden,
|
||||
solana.MustPublicKeyFromBase58("t46SqGmwStEffUMp1fr2xmv5uyR85TB9annJuLKLf83"): MevAgentRaiden,
|
||||
solana.MustPublicKeyFromBase58("t1TcSg9biJsz4NjKjhopK8QZzPS4KzBgFSszu5QTGgF"): MevAgentRaiden,
|
||||
solana.MustPublicKeyFromBase58("t2XFAFBaUkCzxJwEbLWFX9PKFjfBCp2tSyFtx5z4RZM"): MevAgentRaiden,
|
||||
solana.MustPublicKeyFromBase58("t55hdzzftxWkYy3J8t32C9RRcZDuMZ4LDuBmbTzJFkU"): MevAgentRaiden,
|
||||
solana.MustPublicKeyFromBase58("t6UtTQLUGHJJrzxAb8PBBZdZKra8SWUqvTv9zPnxKNz"): MevAgentRaiden,
|
||||
solana.MustPublicKeyFromBase58("t7qUQU35sLpPydh42BcPmtEfTWW8gBe4Ry3gjwVnokJ"): MevAgentRaiden,
|
||||
solana.MustPublicKeyFromBase58("t8pPgarSK3TnuLbbHmoE1RCQdLxfxuPqNTyFjBKahok"): MevAgentRaiden,
|
||||
solana.MustPublicKeyFromBase58("t96GGdw3MiaGR993XN8PSsRpKGXx56t5Wf6zcF1hBpY"): MevAgentRaiden,
|
||||
}
|
||||
|
||||
var entryContractAddresses = map[solana.PublicKey]string{
|
||||
|
||||
34
enum.go
34
enum.go
@@ -1,20 +1,26 @@
|
||||
package pump_parser
|
||||
|
||||
const (
|
||||
MevAgentJito = "jito"
|
||||
MevAgent0slot = "0slot"
|
||||
MevAgentBlocxRoute = "blocxroute"
|
||||
MevAgentNozomi = "nozomi"
|
||||
MevAgentNextBlock = "nextblock"
|
||||
MevAgentHelius = "helius"
|
||||
MevAgentNode1 = "node1"
|
||||
MevAgentFlashBlock = "flashBlock"
|
||||
MevAgentUnknown = "unknown"
|
||||
MevAgentBlockRazor = "blockrazor"
|
||||
MevAgentFast = "fast"
|
||||
MevAgentSoyas = "soyas"
|
||||
MevAgentStellium = "stellium"
|
||||
MevAgentAstralane = "astralane"
|
||||
MevAgentJito = "jito"
|
||||
MevAgent0slot = "0slot"
|
||||
MevAgentBlocxRoute = "blocxroute"
|
||||
MevAgentNozomi = "nozomi"
|
||||
MevAgentNextBlock = "nextblock"
|
||||
MevAgentHelius = "helius"
|
||||
MevAgentNode1 = "node1"
|
||||
MevAgentFlashBlock = "flashBlock"
|
||||
MevAgentUnknown = "unknown"
|
||||
MevAgentBlockRazor = "blockrazor"
|
||||
MevAgentFast = "fast"
|
||||
MevAgentSoyas = "soyas"
|
||||
MevAgentStellium = "stellium"
|
||||
MevAgentAstralane = "astralane"
|
||||
MevagentFa1con = "fa1con"
|
||||
MevagentBlocksprint = "blocksprint"
|
||||
MevAgentMoon = "moon"
|
||||
MevAgentSpeedlanding = "speedlanding"
|
||||
MevAgentAllenhark = "allenhark"
|
||||
MevAgentRaiden = "raiden"
|
||||
)
|
||||
|
||||
const (
|
||||
|
||||
74
meta.go
74
meta.go
@@ -68,40 +68,46 @@ var (
|
||||
)
|
||||
|
||||
var (
|
||||
meteoraInitializeLbPairDiscriminator = calculateDiscriminator("global:initialize_lb_pair2")
|
||||
meteoraInitializeLbPairEventDiscriminator = calculateDiscriminator("event:LbPairCreate")
|
||||
meteoraDlmmSwapDiscriminator = calculateDiscriminator("global:swap")
|
||||
meteoraDlmmSwap2Discriminator = calculateDiscriminator("global:swap2")
|
||||
meteoraDlmmSwapExactOutDiscriminator = calculateDiscriminator("global:swap_exact_out")
|
||||
meteoraDlmmSwapExactOut2Discriminator = calculateDiscriminator("global:swap_exact_out2")
|
||||
meteoraDlmmSwapWithPriceImpactDiscriminator = calculateDiscriminator("global:swap_with_price_impact")
|
||||
meteoraDlmmSwapWithPriceImpact2Discriminator = calculateDiscriminator("global:swap_with_price_impact2")
|
||||
meteoraDlmmInitializePositionDiscriminator = calculateDiscriminator("global:initialize_position")
|
||||
meteoraDlmmInitializePosition2Discriminator = calculateDiscriminator("global:initialize_position2")
|
||||
meteoraDlmmInitializePositionByOperatorDiscriminator = calculateDiscriminator("global:initialize_position_by_operator")
|
||||
meteoraDlmmInitializePositionPdaDiscriminator = calculateDiscriminator("global:initialize_position_pda")
|
||||
meteoraDlmmClosePositionDiscriminator = calculateDiscriminator("global:close_position")
|
||||
meteoraDlmmClosePosition2Discriminator = calculateDiscriminator("global:close_position2")
|
||||
meteoraDlmmClosePositionIfEmptyDiscriminator = calculateDiscriminator("global:close_position_if_empty")
|
||||
meteoraDlmmSwapEventDiscriminator = calculateDiscriminator("event:Swap")
|
||||
meteoraDlmmAddLiquidityDiscriminator = calculateDiscriminator("global:add_liquidity")
|
||||
meteoraDlmmAddLiquidity2Discriminator = calculateDiscriminator("global:add_liquidity2")
|
||||
meteoraDlmmAddLiquidityByStrategyDiscriminator = calculateDiscriminator("global:add_liquidity_by_strategy")
|
||||
meteoraDlmmAddLiquidityByStrategy2Discriminator = calculateDiscriminator("global:add_liquidity_by_strategy2")
|
||||
meteoraDlmmClaimFeeDiscriminator = calculateDiscriminator("global:claim_fee")
|
||||
meteoraDlmmClaimFee2Discriminator = calculateDiscriminator("global:claim_fee2")
|
||||
meteoraDlmmRebalanceLiquidityDiscriminator = calculateDiscriminator("global:rebalance_liquidity")
|
||||
meteoraDlmmRemoveLiquidityDiscriminator = calculateDiscriminator("global:remove_liquidity")
|
||||
meteoraDlmmRemoveLiquidity2Discriminator = calculateDiscriminator("global:remove_liquidity2")
|
||||
meteoraDlmmRemoveLiquidityByRangeDiscriminator = calculateDiscriminator("global:remove_liquidity_by_range")
|
||||
meteoraDlmmRemoveLiquidityByRange2Discriminator = calculateDiscriminator("global:remove_liquidity_by_range2")
|
||||
meteoraDlmmAddLiquidityEventDiscriminator = calculateDiscriminator("event:AddLiquidity")
|
||||
meteoraDlmmClaimFeeEventDiscriminator = calculateDiscriminator("event:ClaimFee")
|
||||
meteoraDlmmClaimFee2EventDiscriminator = calculateDiscriminator("event:ClaimFee2")
|
||||
meteoraDlmmPositionCloseEventDiscriminator = calculateDiscriminator("event:PositionClose")
|
||||
meteoraDlmmPositionCreateEventDiscriminator = calculateDiscriminator("event:PositionCreate")
|
||||
meteoraDlmmRebalancingEventDiscriminator = calculateDiscriminator("event:Rebalancing")
|
||||
meteoraDlmmRemoveLiquidityEventDiscriminator = calculateDiscriminator("event:RemoveLiquidity")
|
||||
meteoraInitializeLbPairDiscriminator = calculateDiscriminator("global:initialize_lb_pair2")
|
||||
meteoraInitializeLbPairEventDiscriminator = calculateDiscriminator("event:LbPairCreate")
|
||||
meteoraDlmmSwapDiscriminator = calculateDiscriminator("global:swap")
|
||||
meteoraDlmmSwap2Discriminator = calculateDiscriminator("global:swap2")
|
||||
meteoraDlmmSwapExactOutDiscriminator = calculateDiscriminator("global:swap_exact_out")
|
||||
meteoraDlmmSwapExactOut2Discriminator = calculateDiscriminator("global:swap_exact_out2")
|
||||
meteoraDlmmSwapWithPriceImpactDiscriminator = calculateDiscriminator("global:swap_with_price_impact")
|
||||
meteoraDlmmSwapWithPriceImpact2Discriminator = calculateDiscriminator("global:swap_with_price_impact2")
|
||||
meteoraDlmmInitializePositionDiscriminator = calculateDiscriminator("global:initialize_position")
|
||||
meteoraDlmmInitializePosition2Discriminator = calculateDiscriminator("global:initialize_position2")
|
||||
meteoraDlmmInitializePositionByOperatorDiscriminator = calculateDiscriminator("global:initialize_position_by_operator")
|
||||
meteoraDlmmInitializePositionPdaDiscriminator = calculateDiscriminator("global:initialize_position_pda")
|
||||
meteoraDlmmClosePositionDiscriminator = calculateDiscriminator("global:close_position")
|
||||
meteoraDlmmClosePosition2Discriminator = calculateDiscriminator("global:close_position2")
|
||||
meteoraDlmmClosePositionIfEmptyDiscriminator = calculateDiscriminator("global:close_position_if_empty")
|
||||
meteoraDlmmSwapEventDiscriminator = calculateDiscriminator("event:Swap")
|
||||
meteoraDlmmAddLiquidityDiscriminator = calculateDiscriminator("global:add_liquidity")
|
||||
meteoraDlmmAddLiquidity2Discriminator = calculateDiscriminator("global:add_liquidity2")
|
||||
meteoraDlmmAddLiquidityByStrategyDiscriminator = calculateDiscriminator("global:add_liquidity_by_strategy")
|
||||
meteoraDlmmAddLiquidityByStrategy2Discriminator = calculateDiscriminator("global:add_liquidity_by_strategy2")
|
||||
meteoraDlmmAddLiquidityByWeightDiscriminator = calculateDiscriminator("global:add_liquidity_by_weight")
|
||||
meteoraDlmmAddLiquidityOneSideDiscriminator = calculateDiscriminator("global:add_liquidity_one_side")
|
||||
meteoraDlmmAddLiquidityOneSidePreciseDiscriminator = calculateDiscriminator("global:add_liquidity_one_side_precise")
|
||||
meteoraDlmmAddLiquidityOneSidePrecise2Discriminator = calculateDiscriminator("global:add_liquidity_one_side_precise2")
|
||||
meteoraDlmmAddLiquidityByStrategyOneSideDiscriminator = calculateDiscriminator("global:add_liquidity_by_strategy_one_side")
|
||||
meteoraDlmmClaimFeeDiscriminator = calculateDiscriminator("global:claim_fee")
|
||||
meteoraDlmmClaimFee2Discriminator = calculateDiscriminator("global:claim_fee2")
|
||||
meteoraDlmmRebalanceLiquidityDiscriminator = calculateDiscriminator("global:rebalance_liquidity")
|
||||
meteoraDlmmRemoveAllLiquidityDiscriminator = calculateDiscriminator("global:remove_all_liquidity")
|
||||
meteoraDlmmRemoveLiquidityDiscriminator = calculateDiscriminator("global:remove_liquidity")
|
||||
meteoraDlmmRemoveLiquidity2Discriminator = calculateDiscriminator("global:remove_liquidity2")
|
||||
meteoraDlmmRemoveLiquidityByRangeDiscriminator = calculateDiscriminator("global:remove_liquidity_by_range")
|
||||
meteoraDlmmRemoveLiquidityByRange2Discriminator = calculateDiscriminator("global:remove_liquidity_by_range2")
|
||||
meteoraDlmmAddLiquidityEventDiscriminator = calculateDiscriminator("event:AddLiquidity")
|
||||
meteoraDlmmClaimFeeEventDiscriminator = calculateDiscriminator("event:ClaimFee")
|
||||
meteoraDlmmClaimFee2EventDiscriminator = calculateDiscriminator("event:ClaimFee2")
|
||||
meteoraDlmmPositionCloseEventDiscriminator = calculateDiscriminator("event:PositionClose")
|
||||
meteoraDlmmPositionCreateEventDiscriminator = calculateDiscriminator("event:PositionCreate")
|
||||
meteoraDlmmRebalancingEventDiscriminator = calculateDiscriminator("event:Rebalancing")
|
||||
meteoraDlmmRemoveLiquidityEventDiscriminator = calculateDiscriminator("event:RemoveLiquidity")
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
355
metaoradlmm.go
355
metaoradlmm.go
@@ -117,6 +117,11 @@ type dlmmBinLiquidityDistribution struct {
|
||||
DistributionY uint16
|
||||
}
|
||||
|
||||
type dlmmBinLiquidityDistributionByWeight struct {
|
||||
BinId int32
|
||||
Weight uint16
|
||||
}
|
||||
|
||||
type dlmmBinLiquidityReduction struct {
|
||||
BinId int32
|
||||
BpsToRemove uint16
|
||||
@@ -143,6 +148,14 @@ type dlmmLiquidityParameterByStrategy struct {
|
||||
StrategyParameters dlmmStrategyParameters
|
||||
}
|
||||
|
||||
type dlmmLiquidityParameterByWeight struct {
|
||||
AmountX uint64
|
||||
AmountY uint64
|
||||
ActiveID int32
|
||||
MaxActiveBinSlippage int32
|
||||
BinLiquidityDist []dlmmBinLiquidityDistributionByWeight
|
||||
}
|
||||
|
||||
type dlmmAddLiquidityArgs struct {
|
||||
LiquidityParameter dlmmLiquidityParameter
|
||||
}
|
||||
@@ -161,6 +174,57 @@ type dlmmAddLiquidityByStrategy2Args struct {
|
||||
RemainingAccountsInfo dlmmRemainingAccountsInfo
|
||||
}
|
||||
|
||||
type dlmmAddLiquidityByWeightArgs struct {
|
||||
LiquidityParameter dlmmLiquidityParameterByWeight
|
||||
}
|
||||
|
||||
type dlmmLiquidityOneSideParameter struct {
|
||||
Amount uint64
|
||||
ActiveID int32
|
||||
MaxActiveBinSlippage int32
|
||||
BinLiquidityDist []dlmmBinLiquidityDistributionByWeight
|
||||
}
|
||||
|
||||
type dlmmLiquidityParameterByStrategyOneSide struct {
|
||||
Amount uint64
|
||||
ActiveID int32
|
||||
MaxActiveBinSlippage int32
|
||||
StrategyParameters dlmmStrategyParameters
|
||||
}
|
||||
|
||||
type dlmmAddLiquidityOneSideArgs struct {
|
||||
LiquidityParameter dlmmLiquidityOneSideParameter
|
||||
}
|
||||
|
||||
type dlmmAddLiquidityByStrategyOneSideArgs struct {
|
||||
LiquidityParameter dlmmLiquidityParameterByStrategyOneSide
|
||||
}
|
||||
|
||||
type dlmmCompressedBinDepositAmount struct {
|
||||
BinID int32
|
||||
Amount uint32
|
||||
}
|
||||
|
||||
type dlmmAddLiquiditySingleSidePreciseParameter struct {
|
||||
Bins []dlmmCompressedBinDepositAmount
|
||||
DecompressMultiplier uint64
|
||||
}
|
||||
|
||||
type dlmmAddLiquiditySingleSidePreciseParameter2 struct {
|
||||
Bins []dlmmCompressedBinDepositAmount
|
||||
DecompressMultiplier uint64
|
||||
MaxAmount uint64
|
||||
}
|
||||
|
||||
type dlmmAddLiquidityOneSidePreciseArgs struct {
|
||||
Parameter dlmmAddLiquiditySingleSidePreciseParameter
|
||||
}
|
||||
|
||||
type dlmmAddLiquidityOneSidePrecise2Args struct {
|
||||
LiquidityParameter dlmmAddLiquiditySingleSidePreciseParameter2
|
||||
RemainingAccountsInfo dlmmRemainingAccountsInfo
|
||||
}
|
||||
|
||||
type dlmmRemoveLiquidityArgs struct {
|
||||
BinLiquidityRemoval []dlmmBinLiquidityReduction
|
||||
}
|
||||
@@ -247,6 +311,16 @@ type dlmmLiquidityAccounts struct {
|
||||
tokenYProgramIdx int
|
||||
}
|
||||
|
||||
type dlmmOneSideLiquidityAccounts struct {
|
||||
positionIdx int
|
||||
poolIdx int
|
||||
userTokenIdx int
|
||||
reserveIdx int
|
||||
tokenMintIdx int
|
||||
userIdx int
|
||||
tokenProgramIdx int
|
||||
}
|
||||
|
||||
var meteoraDlmmEventAuthority = func() solana.PublicKey {
|
||||
key, _, err := solana.FindProgramAddress([][]byte{[]byte("__event_authority")}, meteoraDlmmProgram)
|
||||
if err != nil {
|
||||
@@ -276,13 +350,16 @@ func metaoradlmmParser(tx *Tx, instruction Instruction, innerInstructions InnerI
|
||||
case meteoraDlmmSwap2Discriminator, meteoraDlmmSwapExactOut2Discriminator, meteoraDlmmSwapWithPriceImpact2Discriminator:
|
||||
return metaoradlmmSwap2Parser(tx, instruction, innerInstructions, offset)
|
||||
case meteoraDlmmAddLiquidityDiscriminator, meteoraDlmmAddLiquidity2Discriminator,
|
||||
meteoraDlmmAddLiquidityByStrategyDiscriminator, meteoraDlmmAddLiquidityByStrategy2Discriminator:
|
||||
meteoraDlmmAddLiquidityByStrategyDiscriminator, meteoraDlmmAddLiquidityByStrategy2Discriminator,
|
||||
meteoraDlmmAddLiquidityByWeightDiscriminator, meteoraDlmmAddLiquidityOneSideDiscriminator,
|
||||
meteoraDlmmAddLiquidityOneSidePreciseDiscriminator, meteoraDlmmAddLiquidityOneSidePrecise2Discriminator,
|
||||
meteoraDlmmAddLiquidityByStrategyOneSideDiscriminator:
|
||||
return metaoradlmmAddLiquidityParser(tx, instruction, innerInstructions, offset)
|
||||
case meteoraDlmmClaimFeeDiscriminator, meteoraDlmmClaimFee2Discriminator:
|
||||
return metaoradlmmClaimFeeParser(tx, instruction, innerInstructions, offset)
|
||||
case meteoraDlmmRebalanceLiquidityDiscriminator:
|
||||
return metaoradlmmRebalanceLiquidityParser(tx, instruction, innerInstructions, offset)
|
||||
case meteoraDlmmRemoveLiquidityDiscriminator, meteoraDlmmRemoveLiquidity2Discriminator,
|
||||
case meteoraDlmmRemoveAllLiquidityDiscriminator, meteoraDlmmRemoveLiquidityDiscriminator, meteoraDlmmRemoveLiquidity2Discriminator,
|
||||
meteoraDlmmRemoveLiquidityByRangeDiscriminator, meteoraDlmmRemoveLiquidityByRange2Discriminator:
|
||||
return metaoradlmmRemoveLiquidityParser(tx, instruction, innerInstructions, offset)
|
||||
case meteoraDlmmClosePositionDiscriminator, meteoraDlmmClosePosition2Discriminator, meteoraDlmmClosePositionIfEmptyDiscriminator:
|
||||
@@ -392,10 +469,13 @@ func metaoradlmmPositionCreateParser(tx *Tx, instruction Instruction, innerInstr
|
||||
return nil, increaseOffset(offset), fmt.Errorf("meteora dlmm create position accounts parse error: %v, offset, %d, %d", err, offset[0], offset[1])
|
||||
}
|
||||
|
||||
createEvent, nextOffset, err := dlmmPositionCreateEventFromInnerInstructions(innerInstructions, instruction, offset)
|
||||
createEvent, nextOffset, found, err := dlmmPositionCreateEventFromInnerInstructions(innerInstructions, instruction, offset)
|
||||
if err != nil {
|
||||
return nil, nextOffset, err
|
||||
}
|
||||
if !found {
|
||||
return nil, nextOffset, InstructionIgnoredError
|
||||
}
|
||||
offset = nextOffset
|
||||
|
||||
if !createEvent.LbPair.IsZero() {
|
||||
@@ -705,9 +785,11 @@ func metaoradlmmAddLiquidityParser(tx *Tx, instruction Instruction, innerInstruc
|
||||
amountX uint64
|
||||
amountY uint64
|
||||
binDist []dlmmBinLiquidityDistribution
|
||||
weightDist []dlmmBinLiquidityDistributionByWeight
|
||||
startBinId int32
|
||||
endBinId int32
|
||||
hasRange bool
|
||||
oneSide bool
|
||||
)
|
||||
|
||||
switch discriminator {
|
||||
@@ -751,15 +833,54 @@ func metaoradlmmAddLiquidityParser(tx *Tx, instruction Instruction, innerInstruc
|
||||
startBinId = args.LiquidityParameter.StrategyParameters.MinBinId
|
||||
endBinId = args.LiquidityParameter.StrategyParameters.MaxBinId
|
||||
hasRange = true
|
||||
case meteoraDlmmAddLiquidityByWeightDiscriminator:
|
||||
var args dlmmAddLiquidityByWeightArgs
|
||||
if err := agbinary.NewBorshDecoder(decode[8:]).Decode(&args); err != nil {
|
||||
return nil, increaseOffset(offset), fmt.Errorf("meteora dlmm add liquidity by weight decode error: %v, offset, %d, %d", err, offset[0], offset[1])
|
||||
}
|
||||
amountX = args.LiquidityParameter.AmountX
|
||||
amountY = args.LiquidityParameter.AmountY
|
||||
weightDist = args.LiquidityParameter.BinLiquidityDist
|
||||
startBinId, endBinId = dlmmMinMaxBinIdFromWeightDistribution(weightDist)
|
||||
hasRange = len(weightDist) > 0
|
||||
case meteoraDlmmAddLiquidityOneSideDiscriminator:
|
||||
var args dlmmAddLiquidityOneSideArgs
|
||||
if err := agbinary.NewBorshDecoder(decode[8:]).Decode(&args); err != nil {
|
||||
return nil, increaseOffset(offset), fmt.Errorf("meteora dlmm add liquidity one side decode error: %v, offset, %d, %d", err, offset[0], offset[1])
|
||||
}
|
||||
weightDist = args.LiquidityParameter.BinLiquidityDist
|
||||
startBinId, endBinId = dlmmMinMaxBinIdFromWeightDistribution(weightDist)
|
||||
hasRange = len(weightDist) > 0
|
||||
oneSide = true
|
||||
case meteoraDlmmAddLiquidityOneSidePreciseDiscriminator:
|
||||
var args dlmmAddLiquidityOneSidePreciseArgs
|
||||
if err := agbinary.NewBorshDecoder(decode[8:]).Decode(&args); err != nil {
|
||||
return nil, increaseOffset(offset), fmt.Errorf("meteora dlmm add liquidity one side precise decode error: %v, offset, %d, %d", err, offset[0], offset[1])
|
||||
}
|
||||
startBinId, endBinId = dlmmMinMaxBinIDFromCompressedDeposits(args.Parameter.Bins)
|
||||
hasRange = len(args.Parameter.Bins) > 0
|
||||
oneSide = true
|
||||
case meteoraDlmmAddLiquidityOneSidePrecise2Discriminator:
|
||||
var args dlmmAddLiquidityOneSidePrecise2Args
|
||||
if err := agbinary.NewBorshDecoder(decode[8:]).Decode(&args); err != nil {
|
||||
return nil, increaseOffset(offset), fmt.Errorf("meteora dlmm add liquidity one side precise2 decode error: %v, offset, %d, %d", err, offset[0], offset[1])
|
||||
}
|
||||
startBinId, endBinId = dlmmMinMaxBinIDFromCompressedDeposits(args.LiquidityParameter.Bins)
|
||||
hasRange = len(args.LiquidityParameter.Bins) > 0
|
||||
oneSide = true
|
||||
case meteoraDlmmAddLiquidityByStrategyOneSideDiscriminator:
|
||||
var args dlmmAddLiquidityByStrategyOneSideArgs
|
||||
if err := agbinary.NewBorshDecoder(decode[8:]).Decode(&args); err != nil {
|
||||
return nil, increaseOffset(offset), fmt.Errorf("meteora dlmm add liquidity by strategy one side decode error: %v, offset, %d, %d", err, offset[0], offset[1])
|
||||
}
|
||||
startBinId = args.LiquidityParameter.StrategyParameters.MinBinId
|
||||
endBinId = args.LiquidityParameter.StrategyParameters.MaxBinId
|
||||
hasRange = true
|
||||
oneSide = true
|
||||
default:
|
||||
return nil, increaseOffset(offset), InstructionIgnoredError
|
||||
}
|
||||
|
||||
accounts, err := resolveDlmmLiquidityAccounts(result, instruction.Accounts)
|
||||
if err != nil {
|
||||
return nil, increaseOffset(offset), fmt.Errorf("meteora dlmm add liquidity accounts parse error: %v, offset, %d, %d", err, offset[0], offset[1])
|
||||
}
|
||||
|
||||
addEvent, nextOffset, err := dlmmAddLiquidityEventFromInnerInstructions(innerInstructions, instruction, offset)
|
||||
if err != nil {
|
||||
return nil, nextOffset, err
|
||||
@@ -768,9 +889,25 @@ func metaoradlmmAddLiquidityParser(tx *Tx, instruction Instruction, innerInstruc
|
||||
amountX = addEvent.Amounts[0]
|
||||
amountY = addEvent.Amounts[1]
|
||||
|
||||
if oneSide {
|
||||
swaps, err := dlmmBuildOneSideAddSwap(tx, instruction, addEvent, weightDist, startBinId, endBinId, hasRange, entryContract)
|
||||
if err != nil {
|
||||
return nil, offset, err
|
||||
}
|
||||
return swaps, offset, nil
|
||||
}
|
||||
|
||||
accounts, err := resolveDlmmLiquidityAccounts(result, instruction.Accounts)
|
||||
if err != nil {
|
||||
return nil, increaseOffset(offset), fmt.Errorf("meteora dlmm add liquidity accounts parse error: %v, offset, %d, %d", err, offset[0], offset[1])
|
||||
}
|
||||
|
||||
binChanges := []DlmmBinLiquidityChange(nil)
|
||||
if len(binDist) > 0 {
|
||||
binChanges = dlmmBinChangesFromDistribution(amountX, amountY, binDist)
|
||||
} else if len(weightDist) > 0 {
|
||||
// Weight-only params do not preserve per-side amounts for each bin, so keep the affected range only.
|
||||
binChanges = dlmmBinChangesFromRange(startBinId, endBinId, 0)
|
||||
} else if hasRange {
|
||||
binChanges = dlmmBinChangesFromRange(startBinId, endBinId, 0)
|
||||
}
|
||||
@@ -901,6 +1038,8 @@ func metaoradlmmRemoveLiquidityParser(tx *Tx, instruction Instruction, innerInst
|
||||
)
|
||||
|
||||
switch discriminator {
|
||||
case meteoraDlmmRemoveAllLiquidityDiscriminator:
|
||||
removeBp = 10000
|
||||
case meteoraDlmmRemoveLiquidityDiscriminator:
|
||||
var args dlmmRemoveLiquidityArgs
|
||||
if err := agbinary.NewBorshDecoder(decode[8:]).Decode(&args); err != nil {
|
||||
@@ -1446,11 +1585,11 @@ func dlmmRebalancingEventFromInnerInstructions(innerInstructions InnerInstructio
|
||||
return dlmmRebalancingEvent{}, increaseOffset(offset), fmt.Errorf("meteora dlmm rebalance liquidity event not found, offset, %d, %d", offset[0], prefixLen)
|
||||
}
|
||||
|
||||
func dlmmPositionCreateEventFromInnerInstructions(innerInstructions InnerInstructions, instruction Instruction, offset [2]uint) (dlmmPositionCreateEvent, [2]uint, error) {
|
||||
func dlmmPositionCreateEventFromInnerInstructions(innerInstructions InnerInstructions, instruction Instruction, offset [2]uint) (dlmmPositionCreateEvent, [2]uint, bool, error) {
|
||||
var prefixLen = offset[1]
|
||||
inners, err := getInnerInstructions(innerInstructions, prefixLen)
|
||||
if err != nil {
|
||||
return dlmmPositionCreateEvent{}, increaseOffset(offset), fmt.Errorf("meteora dlmm create position get inner instructions error: %v, offset, %d, %d", err, offset[0], prefixLen)
|
||||
return dlmmPositionCreateEvent{}, increaseOffset(offset), false, fmt.Errorf("meteora dlmm create position get inner instructions error: %v, offset, %d, %d", err, offset[0], prefixLen)
|
||||
}
|
||||
for innerIndex, innerInstr := range inners {
|
||||
if innerInstr.ProgramIDIndex != instruction.ProgramIDIndex {
|
||||
@@ -1465,9 +1604,9 @@ func dlmmPositionCreateEventFromInnerInstructions(innerInstructions InnerInstruc
|
||||
} else {
|
||||
offset[1] = uint(innerIndex) + 1 + prefixLen
|
||||
}
|
||||
return event, offset, nil
|
||||
return event, offset, true, nil
|
||||
}
|
||||
return dlmmPositionCreateEvent{}, increaseOffset(offset), fmt.Errorf("meteora dlmm create position event not found, offset, %d, %d", offset[0], prefixLen)
|
||||
return dlmmPositionCreateEvent{}, increaseOffset(offset), false, nil
|
||||
}
|
||||
|
||||
func dlmmPositionCloseEventFromInnerInstructions(innerInstructions InnerInstructions, instruction Instruction, offset [2]uint) (dlmmPositionCloseEvent, [2]uint, bool, error) {
|
||||
@@ -1787,6 +1926,164 @@ func resolveDlmmLiquidityAccounts(result *RawTx, accounts []int) (dlmmLiquidityA
|
||||
}, nil
|
||||
}
|
||||
|
||||
func resolveDlmmOneSideLiquidityAccounts(result *RawTx, accounts []int) (dlmmOneSideLiquidityAccounts, error) {
|
||||
if len(accounts) < 10 {
|
||||
return dlmmOneSideLiquidityAccounts{}, fmt.Errorf("accounts too short, expected at least 10")
|
||||
}
|
||||
accountList := result.accountList
|
||||
|
||||
eventAuthorityPos := -1
|
||||
for i, idx := range accounts {
|
||||
if idx < 0 || idx >= len(accountList) {
|
||||
continue
|
||||
}
|
||||
if accountList[idx].Equals(meteoraDlmmEventAuthority) {
|
||||
eventAuthorityPos = i
|
||||
break
|
||||
}
|
||||
}
|
||||
if eventAuthorityPos == -1 {
|
||||
return dlmmOneSideLiquidityAccounts{}, fmt.Errorf("event authority not found")
|
||||
}
|
||||
if eventAuthorityPos+1 >= len(accounts) || !accountList[accounts[eventAuthorityPos+1]].Equals(meteoraDlmmProgram) {
|
||||
return dlmmOneSideLiquidityAccounts{}, fmt.Errorf("program id not found after event authority")
|
||||
}
|
||||
|
||||
tokenProgramPos := eventAuthorityPos - 1
|
||||
userPos := eventAuthorityPos - 2
|
||||
if tokenProgramPos < 0 || userPos < 0 {
|
||||
return dlmmOneSideLiquidityAccounts{}, fmt.Errorf("one side liquidity account positions invalid")
|
||||
}
|
||||
if len(accounts) < 6 {
|
||||
return dlmmOneSideLiquidityAccounts{}, fmt.Errorf("accounts too short for one side liquidity parsing")
|
||||
}
|
||||
|
||||
return dlmmOneSideLiquidityAccounts{
|
||||
positionIdx: accounts[0],
|
||||
poolIdx: accounts[1],
|
||||
userTokenIdx: accounts[3],
|
||||
reserveIdx: accounts[4],
|
||||
tokenMintIdx: accounts[5],
|
||||
userIdx: accounts[userPos],
|
||||
tokenProgramIdx: accounts[tokenProgramPos],
|
||||
}, nil
|
||||
}
|
||||
|
||||
func dlmmBuildOneSideAddSwap(
|
||||
tx *Tx,
|
||||
instruction Instruction,
|
||||
addEvent dlmmAddLiquidityEvent,
|
||||
weightDist []dlmmBinLiquidityDistributionByWeight,
|
||||
startBinId int32,
|
||||
endBinId int32,
|
||||
hasRange bool,
|
||||
entryContract solana.PublicKey,
|
||||
) ([]Swap, error) {
|
||||
result := tx.rawTx
|
||||
accounts, err := resolveDlmmOneSideLiquidityAccounts(result, instruction.Accounts)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
knownMint := result.accountList[accounts.tokenMintIdx]
|
||||
knownTokenProgram := result.accountList[accounts.tokenProgramIdx]
|
||||
knownDecimals, ok := dlmmTokenDecimals(result, accounts.reserveIdx)
|
||||
if !ok {
|
||||
knownDecimals, _ = dlmmTokenDecimals(result, accounts.userTokenIdx)
|
||||
}
|
||||
knownReserveBalance := getAccountBalanceAfterTx(result, accounts.reserveIdx)
|
||||
knownUserBalance := getAccountBalanceAfterTx(result, accounts.userTokenIdx)
|
||||
if knownMint.Equals(wSolMint) {
|
||||
if solAmount, err := GetSolAfterTx(result, accounts.userIdx); err == nil {
|
||||
knownUserBalance = knownUserBalance.Add(decimal.NewFromUint64(solAmount))
|
||||
}
|
||||
}
|
||||
|
||||
binChanges := []DlmmBinLiquidityChange(nil)
|
||||
if len(weightDist) > 0 {
|
||||
binChanges = dlmmBinChangesFromRange(startBinId, endBinId, 0)
|
||||
} else if hasRange {
|
||||
binChanges = dlmmBinChangesFromRange(startBinId, endBinId, 0)
|
||||
}
|
||||
|
||||
eventUser := result.accountList[accounts.userIdx]
|
||||
if !addEvent.From.IsZero() {
|
||||
eventUser = addEvent.From
|
||||
}
|
||||
positionAccount := result.accountList[accounts.positionIdx]
|
||||
if !addEvent.Position.IsZero() {
|
||||
positionAccount = addEvent.Position
|
||||
}
|
||||
|
||||
swap := Swap{
|
||||
Program: SolProgramMeteoraDLMM,
|
||||
Event: "add",
|
||||
Pool: result.accountList[accounts.poolIdx],
|
||||
User: eventUser,
|
||||
EntryContract: entryContract,
|
||||
ActiveBinId: addEvent.ActiveBinId,
|
||||
StartBinId: startBinId,
|
||||
EndBinId: endBinId,
|
||||
BinChanges: binChanges,
|
||||
PositionAccount: positionAccount,
|
||||
}
|
||||
|
||||
knownIsX := dlmmInferOneSideLiquidityAxis(result, accounts, addEvent)
|
||||
if knownIsX {
|
||||
swap.BaseMint = knownMint
|
||||
swap.BaseTokenProgram = knownTokenProgram
|
||||
swap.BaseMintDecimals = knownDecimals
|
||||
swap.BaseAmount = decimal.NewFromUint64(addEvent.Amounts[0])
|
||||
swap.BaseReserve = knownReserveBalance
|
||||
swap.UserBaseBalance = knownUserBalance
|
||||
if _, exists := tx.Token[knownMint]; !exists && !knownMint.Equals(wSolMint) {
|
||||
tx.Token[knownMint] = TokenMeta{
|
||||
Mint: knownMint,
|
||||
Decimals: knownDecimals,
|
||||
TokenProgram: knownTokenProgram,
|
||||
}
|
||||
}
|
||||
} else {
|
||||
swap.QuoteMint = knownMint
|
||||
swap.QuoteTokenProgram = knownTokenProgram
|
||||
swap.QuoteMintDecimals = knownDecimals
|
||||
swap.QuoteAmount = decimal.NewFromUint64(addEvent.Amounts[1])
|
||||
swap.QuoteReserve = knownReserveBalance
|
||||
swap.UserQuoteBalance = knownUserBalance
|
||||
if _, exists := tx.Token[knownMint]; !exists && !knownMint.Equals(wSolMint) {
|
||||
tx.Token[knownMint] = TokenMeta{
|
||||
Mint: knownMint,
|
||||
Decimals: knownDecimals,
|
||||
TokenProgram: knownTokenProgram,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return []Swap{swap}, nil
|
||||
}
|
||||
|
||||
func dlmmInferOneSideLiquidityAxis(result *RawTx, accounts dlmmOneSideLiquidityAccounts, addEvent dlmmAddLiquidityEvent) bool {
|
||||
knownAmount, ok := dlmmTokenDelta(result, accounts.reserveIdx)
|
||||
if !ok || knownAmount.IsZero() {
|
||||
knownAmount, _ = dlmmTokenDelta(result, accounts.userTokenIdx)
|
||||
}
|
||||
|
||||
amountX := decimal.NewFromUint64(addEvent.Amounts[0])
|
||||
amountY := decimal.NewFromUint64(addEvent.Amounts[1])
|
||||
switch {
|
||||
case !knownAmount.IsZero() && knownAmount.Equal(amountX) && !knownAmount.Equal(amountY):
|
||||
return true
|
||||
case !knownAmount.IsZero() && knownAmount.Equal(amountY) && !knownAmount.Equal(amountX):
|
||||
return false
|
||||
case addEvent.Amounts[0] > 0 && addEvent.Amounts[1] == 0:
|
||||
return true
|
||||
case addEvent.Amounts[1] > 0 && addEvent.Amounts[0] == 0:
|
||||
return false
|
||||
default:
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
func resolveDlmmClaimFeeAccounts(result *RawTx, data []byte, accounts []int) (dlmmLiquidityAccounts, error) {
|
||||
if len(data) < 8 {
|
||||
return dlmmLiquidityAccounts{}, fmt.Errorf("instruction data too short")
|
||||
@@ -2010,6 +2307,23 @@ func dlmmBinChangesFromRange(startBinId, endBinId int32, bpsToRemove uint16) []D
|
||||
return changes
|
||||
}
|
||||
|
||||
func dlmmMinMaxBinIDFromCompressedDeposits(bins []dlmmCompressedBinDepositAmount) (startBinID, endBinID int32) {
|
||||
if len(bins) == 0 {
|
||||
return 0, 0
|
||||
}
|
||||
startBinID = bins[0].BinID
|
||||
endBinID = bins[0].BinID
|
||||
for _, bin := range bins[1:] {
|
||||
if bin.BinID < startBinID {
|
||||
startBinID = bin.BinID
|
||||
}
|
||||
if bin.BinID > endBinID {
|
||||
endBinID = bin.BinID
|
||||
}
|
||||
}
|
||||
return startBinID, endBinID
|
||||
}
|
||||
|
||||
func dlmmCommonRemoveBp(reduction []dlmmBinLiquidityReduction) int32 {
|
||||
if len(reduction) == 0 {
|
||||
return 0
|
||||
@@ -2047,6 +2361,23 @@ func dlmmMinMaxBinIdFromDistribution(dist []dlmmBinLiquidityDistribution) (int32
|
||||
return min, max
|
||||
}
|
||||
|
||||
func dlmmMinMaxBinIdFromWeightDistribution(dist []dlmmBinLiquidityDistributionByWeight) (int32, int32) {
|
||||
if len(dist) == 0 {
|
||||
return 0, 0
|
||||
}
|
||||
min := dist[0].BinId
|
||||
max := dist[0].BinId
|
||||
for _, item := range dist[1:] {
|
||||
if item.BinId < min {
|
||||
min = item.BinId
|
||||
}
|
||||
if item.BinId > max {
|
||||
max = item.BinId
|
||||
}
|
||||
}
|
||||
return min, max
|
||||
}
|
||||
|
||||
func dlmmMinMaxBinIdFromReduction(reduction []dlmmBinLiquidityReduction) (int32, int32) {
|
||||
if len(reduction) == 0 {
|
||||
return 0, 0
|
||||
|
||||
4
rawtx.go
4
rawtx.go
@@ -872,7 +872,9 @@ func ConvertYellowstoneGrpcTransactionToSolanaTransaction(y *pb.SubscribeUpdateT
|
||||
}
|
||||
sTx.Meta.Fee = meta.Fee
|
||||
//sTx.Meta.InnerInstructions = meta.InnerInstructions
|
||||
sTx.Meta.ComputeUnitsConsumed = *meta.ComputeUnitsConsumed
|
||||
if meta.ComputeUnitsConsumed != nil {
|
||||
sTx.Meta.ComputeUnitsConsumed = *meta.ComputeUnitsConsumed
|
||||
}
|
||||
for _, innerInstr := range meta.InnerInstructions {
|
||||
var instrs []Instruction
|
||||
for _, instr := range innerInstr.Instructions {
|
||||
|
||||
Reference in New Issue
Block a user