Compare commits

...

1 Commits

Author SHA1 Message Date
bijianing97
db8c8727f4 Add dlmm start and end bin 2026-03-18 14:38:25 +08:00
2 changed files with 30 additions and 3 deletions

View File

@@ -506,6 +506,7 @@ func metaoradlmmSwapParser(tx *Tx, instruction Instruction, innerInstructions In
UserBaseBalance: userBase,
UserQuoteBalance: userQuote,
EntryContract: entryContract,
ActiveBinId: swapEvent.EndBinId,
StartBinId: swapEvent.StartBinId,
EndBinId: swapEvent.EndBinId,
}
@@ -699,6 +700,7 @@ func metaoradlmmAddLiquidityParser(tx *Tx, instruction Instruction, innerInstruc
UserBaseBalance: userBase,
UserQuoteBalance: userQuote,
EntryContract: entryContract,
ActiveBinId: addEvent.ActiveBinId,
StartBinId: startBinId,
EndBinId: endBinId,
BinChanges: binChanges,
@@ -731,6 +733,7 @@ func metaoradlmmRemoveLiquidityParser(tx *Tx, instruction Instruction, innerInst
binChanges []DlmmBinLiquidityChange
startBinId int32
endBinId int32
removeBp int32
)
switch discriminator {
@@ -741,6 +744,7 @@ func metaoradlmmRemoveLiquidityParser(tx *Tx, instruction Instruction, innerInst
}
binChanges = dlmmBinChangesFromReduction(args.BinLiquidityRemoval)
startBinId, endBinId = dlmmMinMaxBinIdFromReduction(args.BinLiquidityRemoval)
removeBp = dlmmCommonRemoveBp(args.BinLiquidityRemoval)
case meteoraDlmmRemoveLiquidity2Discriminator:
var args dlmmRemoveLiquidity2Args
if err := agbinary.NewBorshDecoder(decode[8:]).Decode(&args); err != nil {
@@ -748,6 +752,7 @@ func metaoradlmmRemoveLiquidityParser(tx *Tx, instruction Instruction, innerInst
}
binChanges = dlmmBinChangesFromReduction(args.BinLiquidityRemoval)
startBinId, endBinId = dlmmMinMaxBinIdFromReduction(args.BinLiquidityRemoval)
removeBp = dlmmCommonRemoveBp(args.BinLiquidityRemoval)
case meteoraDlmmRemoveLiquidityByRangeDiscriminator:
var args dlmmRemoveLiquidityByRangeArgs
if err := agbinary.NewBorshDecoder(decode[8:]).Decode(&args); err != nil {
@@ -755,6 +760,7 @@ func metaoradlmmRemoveLiquidityParser(tx *Tx, instruction Instruction, innerInst
}
startBinId = args.FromBinId
endBinId = args.ToBinId
removeBp = int32(args.BpsToRemove)
binChanges = dlmmBinChangesFromRange(startBinId, endBinId, args.BpsToRemove)
case meteoraDlmmRemoveLiquidityByRange2Discriminator:
var args dlmmRemoveLiquidityByRange2Args
@@ -763,6 +769,7 @@ func metaoradlmmRemoveLiquidityParser(tx *Tx, instruction Instruction, innerInst
}
startBinId = args.FromBinId
endBinId = args.ToBinId
removeBp = int32(args.BpsToRemove)
binChanges = dlmmBinChangesFromRange(startBinId, endBinId, args.BpsToRemove)
default:
return nil, increaseOffset(offset), InstructionIgnoredError
@@ -867,8 +874,10 @@ func metaoradlmmRemoveLiquidityParser(tx *Tx, instruction Instruction, innerInst
UserBaseBalance: userBase,
UserQuoteBalance: userQuote,
EntryContract: entryContract,
ActiveBinId: removeEvent.ActiveBinId,
StartBinId: startBinId,
EndBinId: endBinId,
RemoveBp: removeBp,
BinChanges: binChanges,
}
@@ -987,6 +996,7 @@ func metaoradlmmClaimFeeParser(tx *Tx, instruction Instruction, innerInstruction
EntryContract: entryContract,
}
if claimEvent.HasActiveBin {
swap.ActiveBinId = claimEvent.ActiveBinId
swap.StartBinId = claimEvent.ActiveBinId
swap.EndBinId = claimEvent.ActiveBinId
}
@@ -1107,6 +1117,7 @@ func metaoradlmmRebalanceLiquidityParser(tx *Tx, instruction Instruction, innerI
UserBaseBalance: userBase,
UserQuoteBalance: userQuote,
EntryContract: entryContract,
ActiveBinId: event.ActiveBinId,
StartBinId: event.OldMinBinId,
EndBinId: event.OldMaxBinId,
BinChanges: dlmmBinChangesFromRange(event.OldMinBinId, event.OldMaxBinId, 0),
@@ -1131,6 +1142,7 @@ func metaoradlmmRebalanceLiquidityParser(tx *Tx, instruction Instruction, innerI
UserBaseBalance: userBase,
UserQuoteBalance: userQuote,
EntryContract: entryContract,
ActiveBinId: event.ActiveBinId,
StartBinId: event.NewMinBinId,
EndBinId: event.NewMaxBinId,
BinChanges: dlmmBinChangesFromRange(event.NewMinBinId, event.NewMaxBinId, 0),
@@ -1706,6 +1718,19 @@ func dlmmBinChangesFromRange(startBinId, endBinId int32, bpsToRemove uint16) []D
return changes
}
func dlmmCommonRemoveBp(reduction []dlmmBinLiquidityReduction) int32 {
if len(reduction) == 0 {
return 0
}
bpsToRemove := reduction[0].BpsToRemove
for _, item := range reduction[1:] {
if item.BpsToRemove != bpsToRemove {
return 0
}
}
return int32(bpsToRemove)
}
func dlmmMinMaxBinIdFromDistribution(dist []dlmmBinLiquidityDistribution) (int32, int32) {
if len(dist) == 0 {
return 0, 0

2
tx.go
View File

@@ -48,8 +48,10 @@ type Swap struct {
AfterSOLBalance decimal.Decimal
//For meteora dlmm
ActiveBinId int32
StartBinId int32
EndBinId int32
RemoveBp int32
BinChanges []DlmmBinLiquidityChange
ConsumeUnit uint64