Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
738e417167 |
@@ -281,7 +281,7 @@ func orcaWhirPoolLiquidityParser(tx *Tx, instruction Instruction, innerInstructi
|
||||
return nil, increaseOffset(offset), InstructionIgnoredError
|
||||
}
|
||||
if baseAmount.Equal(decimal.Zero) || quoteAmount.Equal(decimal.Zero) {
|
||||
instructionName += "_on_side"
|
||||
instructionName += "_one_side"
|
||||
}
|
||||
if (baseTokenBalance == nil && !baseAmount.Equal(decimal.Zero)) || (quoteTokenBalance == nil && !quoteAmount.Equal(decimal.Zero)) {
|
||||
return nil, offset, fmt.Errorf("token balance is nil but amount is not zero")
|
||||
@@ -388,7 +388,7 @@ func orcaWhirPoolLiquidityV2Parser(tx *Tx, instruction Instruction, innerInstruc
|
||||
return nil, offset, InstructionIgnoredError
|
||||
}
|
||||
if baseAmount.Equal(decimal.Zero) || quoteAmount.Equal(decimal.Zero) {
|
||||
instructionName += "_on_side"
|
||||
instructionName += "_one_side"
|
||||
}
|
||||
if (baseTokenBalance == nil && !baseAmount.Equal(decimal.Zero)) || (quoteTokenBalance == nil && !quoteAmount.Equal(decimal.Zero)) {
|
||||
return nil, offset, fmt.Errorf("token balance is nil but amount is not zero")
|
||||
@@ -493,7 +493,7 @@ func orcaWhirPoolCollectFeeParser(tx *Tx, instruction Instruction, innerInstruct
|
||||
return nil, offset, InstructionIgnoredError
|
||||
}
|
||||
if baseAmount.Equal(decimal.Zero) || quoteAmount.Equal(decimal.Zero) {
|
||||
instructionName += "_on_side"
|
||||
instructionName += "_one_side"
|
||||
}
|
||||
if (baseTokenBalance == nil && !baseAmount.Equal(decimal.Zero)) || (quoteTokenBalance == nil && !quoteAmount.Equal(decimal.Zero)) {
|
||||
return nil, offset, fmt.Errorf("token balance is nil but amount is not zero")
|
||||
@@ -595,7 +595,7 @@ func orcaWhirPoolCollectFeeV2Parser(tx *Tx, instruction Instruction, innerInstru
|
||||
return nil, offset, InstructionIgnoredError
|
||||
}
|
||||
if baseAmount.Equal(decimal.Zero) || quoteAmount.Equal(decimal.Zero) {
|
||||
instructionName += "_on_side"
|
||||
instructionName += "_one_side"
|
||||
}
|
||||
if (baseTokenBalance == nil && !baseAmount.Equal(decimal.Zero)) || (quoteTokenBalance == nil && !quoteAmount.Equal(decimal.Zero)) {
|
||||
return nil, offset, fmt.Errorf("token balance is nil but amount is not zero")
|
||||
@@ -697,7 +697,7 @@ func orcaWhirPoolCollectProtocolFeeV2Parser(tx *Tx, instruction Instruction, inn
|
||||
return nil, offset, InstructionIgnoredError
|
||||
}
|
||||
if baseAmount.Equal(decimal.Zero) || quoteAmount.Equal(decimal.Zero) {
|
||||
instructionName += "_on_side"
|
||||
instructionName += "_one_side"
|
||||
}
|
||||
if (baseTokenBalance == nil && !baseAmount.Equal(decimal.Zero)) || (quoteTokenBalance == nil && !quoteAmount.Equal(decimal.Zero)) {
|
||||
return nil, offset, fmt.Errorf("token balance is nil but amount is not zero")
|
||||
@@ -811,23 +811,23 @@ func orcaWhirPoolSwapParser(tx *Tx, instruction Instruction, innerInstructions I
|
||||
}
|
||||
|
||||
swap := Swap{
|
||||
Program: SolProgramOrcaWhirPool,
|
||||
Event: event,
|
||||
Pool: pool,
|
||||
BaseMint: baseTokenBalance.MintAccount,
|
||||
QuoteMint: quoteTokenBalance.MintAccount,
|
||||
BaseTokenProgram: baseTokenBalance.ProgramIDAccount,
|
||||
QuoteTokenProgram: quoteTokenBalance.ProgramIDAccount,
|
||||
BaseMintDecimals: uint8(baseTokenBalance.UITokenAmount.Decimals),
|
||||
QuoteMintDecimals: uint8(quoteTokenBalance.UITokenAmount.Decimals),
|
||||
BaseAmount: baseAmount,
|
||||
QuoteAmount: quoteAmount,
|
||||
BaseReserve: baseReserve,
|
||||
QuoteReserve: quoteReserve,
|
||||
UserBaseBalance: userBase,
|
||||
UserQuoteBalance: userQuote,
|
||||
User: user,
|
||||
EntryContract: entryContract,
|
||||
Program: SolProgramOrcaWhirPool,
|
||||
Event: event,
|
||||
Pool: pool,
|
||||
BaseMint: baseTokenBalance.MintAccount,
|
||||
QuoteMint: quoteTokenBalance.MintAccount,
|
||||
BaseTokenProgram: baseTokenBalance.ProgramIDAccount,
|
||||
QuoteTokenProgram: quoteTokenBalance.ProgramIDAccount,
|
||||
BaseMintDecimals: uint8(baseTokenBalance.UITokenAmount.Decimals),
|
||||
QuoteMintDecimals: uint8(quoteTokenBalance.UITokenAmount.Decimals),
|
||||
BaseAmount: baseAmount,
|
||||
QuoteAmount: quoteAmount,
|
||||
BaseReserve: baseReserve,
|
||||
QuoteReserve: quoteReserve,
|
||||
UserBaseBalance: userBase,
|
||||
UserQuoteBalance: userQuote,
|
||||
User: user,
|
||||
EntryContract: entryContract,
|
||||
}
|
||||
swap.SetSwapAmountInfo(swapMode, decimal.NewFromUint64(amount), decimal.NewFromUint64(otherAmountThreshold))
|
||||
|
||||
@@ -922,23 +922,23 @@ func orcaWhirPoolSwapV2Parser(tx *Tx, instruction Instruction, innerInstructions
|
||||
offset[1] += uint(skipOffset + 1)
|
||||
|
||||
swap := Swap{
|
||||
Program: SolProgramOrcaWhirPool,
|
||||
Event: event,
|
||||
Pool: pool,
|
||||
BaseMint: baseTokenBalance.MintAccount,
|
||||
QuoteMint: quoteTokenBalance.MintAccount,
|
||||
BaseTokenProgram: baseTokenBalance.ProgramIDAccount,
|
||||
QuoteTokenProgram: quoteTokenBalance.ProgramIDAccount,
|
||||
BaseMintDecimals: uint8(baseTokenBalance.UITokenAmount.Decimals),
|
||||
QuoteMintDecimals: uint8(quoteTokenBalance.UITokenAmount.Decimals),
|
||||
BaseAmount: baseAmount,
|
||||
QuoteAmount: quoteAmount,
|
||||
BaseReserve: baseReserve,
|
||||
QuoteReserve: quoteReserve,
|
||||
UserBaseBalance: userBase,
|
||||
UserQuoteBalance: userQuote,
|
||||
User: user,
|
||||
EntryContract: entryContract,
|
||||
Program: SolProgramOrcaWhirPool,
|
||||
Event: event,
|
||||
Pool: pool,
|
||||
BaseMint: baseTokenBalance.MintAccount,
|
||||
QuoteMint: quoteTokenBalance.MintAccount,
|
||||
BaseTokenProgram: baseTokenBalance.ProgramIDAccount,
|
||||
QuoteTokenProgram: quoteTokenBalance.ProgramIDAccount,
|
||||
BaseMintDecimals: uint8(baseTokenBalance.UITokenAmount.Decimals),
|
||||
QuoteMintDecimals: uint8(quoteTokenBalance.UITokenAmount.Decimals),
|
||||
BaseAmount: baseAmount,
|
||||
QuoteAmount: quoteAmount,
|
||||
BaseReserve: baseReserve,
|
||||
QuoteReserve: quoteReserve,
|
||||
UserBaseBalance: userBase,
|
||||
UserQuoteBalance: userQuote,
|
||||
User: user,
|
||||
EntryContract: entryContract,
|
||||
}
|
||||
swap.SetSwapAmountInfo(swapMode, decimal.NewFromUint64(amount), decimal.NewFromUint64(otherAmountThreshold))
|
||||
|
||||
|
||||
13
tx_binary.go
13
tx_binary.go
@@ -728,7 +728,7 @@ func newSwapBinary(swap Swap, index int, addressIndex *txBinaryAddressIndex) (Sw
|
||||
|
||||
out := SwapBinary{
|
||||
Program: swap.Program,
|
||||
Event: swap.Event,
|
||||
Event: txBinaryCanonicalEvent(swap.Event),
|
||||
TxIndex: int32(swap.TxIndex),
|
||||
InstrIdx: swap.InstrIdx,
|
||||
InnerIdx: swap.InnerIdx,
|
||||
@@ -918,6 +918,17 @@ func txBinaryPlatformsFromTx(platforms map[string]platformInfo) ([]PlatformBinar
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func txBinaryCanonicalEvent(event string) string {
|
||||
switch event {
|
||||
case "add_liquidity_on_side":
|
||||
return TxEventAddLiquidityOneSide
|
||||
case "remove_liquidity_on_side":
|
||||
return TxEventRemoveLiquidityOneSide
|
||||
default:
|
||||
return event
|
||||
}
|
||||
}
|
||||
|
||||
func txBinaryMevAgentsFromTx(mevAgents map[string]mevInfo) ([]MevAgentBinary, error) {
|
||||
if len(mevAgents) == 0 {
|
||||
return nil, nil
|
||||
|
||||
@@ -354,6 +354,62 @@ func TestTxBinaryPreservesFractionalReserves(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestTxBinaryCanonicalizesOnSideEventAlias(t *testing.T) {
|
||||
tx := &Tx{
|
||||
Signer: mustPubKey("So11111111111111111111111111111111111111112"),
|
||||
Block: 1,
|
||||
BlockIndex: 1,
|
||||
CuFee: decimal.NewFromInt(1),
|
||||
CUPrice: decimal.RequireFromString("0.000001"),
|
||||
BeforeSolBalance: decimal.RequireFromString("1.000000000"),
|
||||
AfterSOLBalance: decimal.RequireFromString("0.900000000"),
|
||||
ComputeUnitsConsumed: 1,
|
||||
CuLimit: 1,
|
||||
Swaps: []Swap{
|
||||
{
|
||||
Program: SolProgramOrcaWhirPool,
|
||||
Event: "remove_liquidity_on_side",
|
||||
Pool: mustPubKey("11111111111111111111111111111111"),
|
||||
BaseMint: mustPubKey("3wyAj7RtG72wM1Wv9DkYfL7RAx9X3Jx1sC6E6mN4jWeL"),
|
||||
QuoteMint: solana.WrappedSol,
|
||||
BaseTokenProgram: solana.TokenProgramID,
|
||||
QuoteTokenProgram: solana.TokenProgramID,
|
||||
Creator: mustPubKey("BPFLoader1111111111111111111111111111111111"),
|
||||
BaseMintDecimals: 6,
|
||||
QuoteMintDecimals: 9,
|
||||
User: mustPubKey("SysvarRent111111111111111111111111111111111"),
|
||||
BaseAmount: decimal.NewFromInt(10),
|
||||
QuoteAmount: decimal.Zero,
|
||||
SwapMode: SwapModeExactIn,
|
||||
FixedAmount: decimal.NewFromInt(10),
|
||||
FixedAmountSide: SwapAmountSideBase,
|
||||
FixedMint: mustPubKey("3wyAj7RtG72wM1Wv9DkYfL7RAx9X3Jx1sC6E6mN4jWeL"),
|
||||
LimitAmountType: SwapLimitTypeMinOut,
|
||||
LimitAmount: decimal.Zero,
|
||||
LimitAmountSide: SwapAmountSideQuote,
|
||||
ActualLimitAmount: decimal.Zero,
|
||||
ActualLimitAmountSide: SwapAmountSideQuote,
|
||||
BaseReserve: decimal.RequireFromString("123.4"),
|
||||
QuoteReserve: decimal.RequireFromString("456.7"),
|
||||
AfterSOLBalance: decimal.RequireFromString("0.800000000"),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
encoded, err := EncodeTxBinary(tx)
|
||||
if err != nil {
|
||||
t.Fatalf("EncodeTxBinary() error = %v", err)
|
||||
}
|
||||
|
||||
decoded, err := DecodeTxBinary(encoded)
|
||||
if err != nil {
|
||||
t.Fatalf("DecodeTxBinary() error = %v", err)
|
||||
}
|
||||
if got := decoded.Swaps[0].Event; got != TxEventRemoveLiquidityOneSide {
|
||||
t.Fatalf("Event = %q, want %q", got, TxEventRemoveLiquidityOneSide)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTxsBinaryRoundTripWithSharedAddressTable(t *testing.T) {
|
||||
tx1 := Tx{
|
||||
Signer: mustPubKey("So11111111111111111111111111111111111111112"),
|
||||
|
||||
Reference in New Issue
Block a user