diff --git a/internal/test2/test.go b/internal/test2/test.go index cc01ffe..fd499be 100644 --- a/internal/test2/test.go +++ b/internal/test2/test.go @@ -13,7 +13,7 @@ var () func main() { - var slot uint64 = 414437304 + var slot uint64 = 414696178 client := rpc.New("https://staked.helius-rpc.com?api-key=5adcf1f9-5719-43d1-bf3f-c2d4e1e5f94d") var rewards = false var version uint64 = 0 diff --git a/internal/test3/test.go b/internal/test3/test.go index 5357d21..552a3c5 100644 --- a/internal/test3/test.go +++ b/internal/test3/test.go @@ -26,7 +26,7 @@ func main() { var data = NewBlockData(decimal.NewFromFloat(100.0)) client := rpc.New("https://staked.helius-rpc.com?api-key=5adcf1f9-5719-43d1-bf3f-c2d4e1e5f94d") var version uint64 = 0 - txSig, _ := solana.SignatureFromBase58("33ausqKuyRbRi8A4SMFhoZRj6rAuNAnpneNdrme6DWnA6QGSQ42DJGMmwvZTqAnPpw6uwV3YV9cdYP4DNMMY4TNr") + txSig, _ := solana.SignatureFromBase58("4sj82GCLtgTDExq7B8YrBsrrqPcE4FqT5Y1gKWmE4cHMDxs7wkCV1hik73dSZ99gZm3K4wyBZQ6U8Nmf48rM9Jri") tx, err := client.GetTransaction(context.Background(), txSig, &rpc.GetTransactionOpts{ Commitment: rpc.CommitmentFinalized, Encoding: solana.EncodingBase64, @@ -78,7 +78,10 @@ func main() { i++ } } - fmt.Printf("swap: %d, program: %s, base: %s quote: %s \n", i, action.Program, action.BaseMint.String(), action.QuoteMint.String()) + fmt.Printf("swap: %d, program: %s, event: %s, base: %s quote: %s, base amount: %s, quote amount: %s, \n", i, + action.Program, action.Event, action.BaseMint.String(), action.QuoteMint.String(), + action.BaseAmount.String(), + action.QuoteAmount.String()) if err = HandleAction(context.Background(), result, actions, data); err != nil { //h.logger.Errorf("handle action error: %s - %v", result.RawTx.Transaction.Signatures[0].String(), err) fmt.Println("parse action error:", "tx", result.GetTxHash(), "i", i, "err", err) diff --git a/orcawhirpool.go b/orcawhirpool.go index ee15a60..d2de42d 100644 --- a/orcawhirpool.go +++ b/orcawhirpool.go @@ -263,10 +263,10 @@ func orcaWhirPoolLiquidityParser(tx *Tx, instruction Instruction, innerInstructi //return nil, increaseOffset(offset), fmt.Errorf("meta Bonding Curve initial parse token transfer error: %v, offset, %d, %d", err, offset[0], offset[1]) } if !baseFound && (from.Equals(tx.rawTx.accountList[vault0]) || to.Equals(tx.rawTx.accountList[vault0])) { - baseAmount = decimal.NewFromInt(int64(amount)) + baseAmount = decimal.NewFromUint64(amount) baseFound = true } else if !quoteFound && (from.Equals(tx.rawTx.accountList[vault1]) || to.Equals(tx.rawTx.accountList[vault1])) { - quoteAmount = decimal.NewFromInt(int64(amount)) + quoteAmount = decimal.NewFromUint64(amount) quoteFound = true } if baseFound && quoteFound { @@ -370,10 +370,10 @@ func orcaWhirPoolLiquidityV2Parser(tx *Tx, instruction Instruction, innerInstruc continue } if !baseFound && (from.Equals(tx.rawTx.accountList[vault0]) || to.Equals(tx.rawTx.accountList[vault0])) { - baseAmount = decimal.NewFromInt(int64(amount)) + baseAmount = decimal.NewFromUint64(amount) baseFound = true } else if !quoteFound && (from.Equals(tx.rawTx.accountList[vault1]) || to.Equals(tx.rawTx.accountList[vault1])) { - quoteAmount = decimal.NewFromInt(int64(amount)) + quoteAmount = decimal.NewFromUint64(amount) quoteFound = true } if baseFound && quoteFound { @@ -475,10 +475,10 @@ func orcaWhirPoolCollectFeeParser(tx *Tx, instruction Instruction, innerInstruct //return nil, increaseOffset(offset), fmt.Errorf("orca whirpool parse token transfer error: %v, offset, %d, %d", err, offset[0], offset[1]) } if !baseFound && (from.Equals(tx.rawTx.accountList[vault0]) || to.Equals(tx.rawTx.accountList[vault0])) { - baseAmount = decimal.NewFromInt(int64(amount)) + baseAmount = decimal.NewFromUint64(amount) baseFound = true } else if !quoteFound && (from.Equals(tx.rawTx.accountList[vault1]) || to.Equals(tx.rawTx.accountList[vault1])) { - quoteAmount = decimal.NewFromInt(int64(amount)) + quoteAmount = decimal.NewFromUint64(amount) quoteFound = true } if (baseFound && quoteFound) || i >= 6 { @@ -577,10 +577,10 @@ func orcaWhirPoolCollectFeeV2Parser(tx *Tx, instruction Instruction, innerInstru //return nil, increaseOffset(offset), fmt.Errorf("meta Bonding Curve initial parse token transfer error: %v, offset, %d, %d", err, offset[0], offset[1]) } if !baseFound && (from.Equals(tx.rawTx.accountList[vault0]) || to.Equals(tx.rawTx.accountList[vault0])) { - baseAmount = decimal.NewFromInt(int64(amount)) + baseAmount = decimal.NewFromUint64(amount) baseFound = true } else if !quoteFound && (from.Equals(tx.rawTx.accountList[vault1]) || to.Equals(tx.rawTx.accountList[vault1])) { - quoteAmount = decimal.NewFromInt(int64(amount)) + quoteAmount = decimal.NewFromUint64(amount) quoteFound = true } if (baseFound && quoteFound) || i >= 6 { @@ -679,10 +679,10 @@ func orcaWhirPoolCollectProtocolFeeV2Parser(tx *Tx, instruction Instruction, inn // return nil, increaseOffset(offset), fmt.Errorf("meta Bonding Curve initial parse token transfer error: %v, offset, %d, %d", err, offset[0], offset[1]) } if !baseFound && (from.Equals(tx.rawTx.accountList[vault0]) || to.Equals(tx.rawTx.accountList[vault0])) { - baseAmount = decimal.NewFromInt(int64(amount)) + baseAmount = decimal.NewFromUint64(amount) baseFound = true } else if !quoteFound && (from.Equals(tx.rawTx.accountList[vault1]) || to.Equals(tx.rawTx.accountList[vault1])) { - quoteAmount = decimal.NewFromInt(int64(amount)) + quoteAmount = decimal.NewFromUint64(amount) quoteFound = true } if (baseFound && quoteFound) || i >= 6 { @@ -784,7 +784,7 @@ func orcaWhirPoolSwapParser(tx *Tx, instruction Instruction, innerInstructions I return nil, increaseOffset(offset), fmt.Errorf("orca whirpool swap parse token transfer error: %v, offset, %d, %d", err, offset[0], offset[1]) } if !baseFound && (from.Equals(vault0Account) || to.Equals(vault0Account)) { - baseAmount = decimal.NewFromInt(int64(amount)) + baseAmount = decimal.NewFromUint64(amount) if from.Equals(vault0Account) && to.Equals(token0Account) { event = "buy" } else if from.Equals(token0Account) && to.Equals(vault0Account) { @@ -792,7 +792,7 @@ func orcaWhirPoolSwapParser(tx *Tx, instruction Instruction, innerInstructions I } baseFound = true } else if !quoteFound && (from.Equals(vault1Account) || to.Equals(vault1Account)) { - quoteAmount = decimal.NewFromInt(int64(amount)) + quoteAmount = decimal.NewFromUint64(amount) if from.Equals(vault1Account) && to.Equals(token1Account) { event = "sell" } else if from.Equals(token1Account) && to.Equals(vault1Account) { @@ -894,7 +894,7 @@ func orcaWhirPoolSwapV2Parser(tx *Tx, instruction Instruction, innerInstructions return nil, increaseOffset(offset), fmt.Errorf("orca whirpool swapv2 parse token transfer error: %v, offset, %d, %d", err, offset[0], offset[1]) } if !baseFound && (from.Equals(vault0Account) || to.Equals(vault0Account)) { - baseAmount = decimal.NewFromInt(int64(amount)) + baseAmount = decimal.NewFromUint64(amount) if from.Equals(vault0Account) && to.Equals(token0Account) { event = "buy" } else if from.Equals(token0Account) && to.Equals(vault0Account) { @@ -902,7 +902,7 @@ func orcaWhirPoolSwapV2Parser(tx *Tx, instruction Instruction, innerInstructions } baseFound = true } else if !quoteFound && (from.Equals(vault1Account) || to.Equals(vault1Account)) { - quoteAmount = decimal.NewFromInt(int64(amount)) + quoteAmount = decimal.NewFromUint64(amount) if from.Equals(vault1Account) && to.Equals(token1Account) { event = "sell" } else if from.Equals(token1Account) && to.Equals(vault1Account) { @@ -1011,7 +1011,7 @@ func orcaWhirPoolTwoHopSwapParser(tx *Tx, instruction Instruction, innerInstruct return nil, increaseOffset(offset), fmt.Errorf("orca whirpool two hop swap parse token transfer error: %v, offset, %d, %d", err, offset[0], offset[1]) } if from.Equals(tx.rawTx.accountList[pool1VaultBase]) || to.Equals(tx.rawTx.accountList[pool1VaultBase]) { - baseAmount = decimal.NewFromInt(int64(amount)) + baseAmount = decimal.NewFromUint64(amount) if from.Equals(tx.rawTx.accountList[pool1VaultBase]) && to.Equals(tx.rawTx.accountList[pool1UserBase]) { event = "buy" } else if from.Equals(tx.rawTx.accountList[pool1UserBase]) && to.Equals(tx.rawTx.accountList[pool1VaultBase]) { @@ -1019,7 +1019,7 @@ func orcaWhirPoolTwoHopSwapParser(tx *Tx, instruction Instruction, innerInstruct } baseFound = true } else if from.Equals(tx.rawTx.accountList[pool1VaultQuote]) || to.Equals(tx.rawTx.accountList[pool1VaultQuote]) { - quoteAmount = decimal.NewFromInt(int64(amount)) + quoteAmount = decimal.NewFromUint64(amount) if from.Equals(tx.rawTx.accountList[pool1VaultQuote]) && to.Equals(tx.rawTx.accountList[pool1UserQuote]) { event = "sell" } else if from.Equals(tx.rawTx.accountList[pool1UserQuote]) && to.Equals(tx.rawTx.accountList[pool1VaultQuote]) { @@ -1087,7 +1087,7 @@ func orcaWhirPoolTwoHopSwapParser(tx *Tx, instruction Instruction, innerInstruct return nil, increaseOffset(offset), fmt.Errorf("orca whirpool two hop swap parse token transfer error: %v, offset, %d, %d", err, offset[0], offset[1]) } if from.Equals(tx.rawTx.accountList[pool2VaultBase]) || to.Equals(tx.rawTx.accountList[pool2VaultBase]) { - baseAmount = decimal.NewFromInt(int64(amount)) + baseAmount = decimal.NewFromUint64(amount) if from.Equals(tx.rawTx.accountList[pool2VaultBase]) && to.Equals(tx.rawTx.accountList[pool2UserBase]) { event = "buy" } else if from.Equals(tx.rawTx.accountList[pool2UserBase]) && to.Equals(tx.rawTx.accountList[pool2VaultBase]) { @@ -1095,7 +1095,7 @@ func orcaWhirPoolTwoHopSwapParser(tx *Tx, instruction Instruction, innerInstruct } baseFound = true } else if from.Equals(tx.rawTx.accountList[pool2VaultQuote]) || to.Equals(tx.rawTx.accountList[pool2VaultQuote]) { - quoteAmount = decimal.NewFromInt(int64(amount)) + quoteAmount = decimal.NewFromUint64(amount) if from.Equals(tx.rawTx.accountList[pool2VaultQuote]) && to.Equals(tx.rawTx.accountList[pool2UserQuote]) { event = "sell" } else if from.Equals(tx.rawTx.accountList[pool2UserQuote]) && to.Equals(tx.rawTx.accountList[pool2VaultQuote]) { @@ -1221,7 +1221,7 @@ func orcaWhirPoolTwoHopSwapV2Parser(tx *Tx, instruction Instruction, innerInstru return nil, increaseOffset(offset), fmt.Errorf("orca whirpool two hop swap parse token transfer error: %v, offset, %d, %d", err, offset[0], offset[1]) } if from.Equals(tx.rawTx.accountList[pool1VaultBase]) || to.Equals(tx.rawTx.accountList[pool1VaultBase]) { - baseAmount = decimal.NewFromInt(int64(amount)) + baseAmount = decimal.NewFromUint64(amount) if from.Equals(tx.rawTx.accountList[pool1VaultBase]) && to.Equals(tx.rawTx.accountList[pool1UserBase]) { event = "buy" } else if from.Equals(tx.rawTx.accountList[pool1UserBase]) && to.Equals(tx.rawTx.accountList[pool1VaultBase]) { @@ -1229,7 +1229,7 @@ func orcaWhirPoolTwoHopSwapV2Parser(tx *Tx, instruction Instruction, innerInstru } baseFound = true } else if from.Equals(tx.rawTx.accountList[pool1VaultQuote]) || to.Equals(tx.rawTx.accountList[pool1VaultQuote]) { - quoteAmount = decimal.NewFromInt(int64(amount)) + quoteAmount = decimal.NewFromUint64(amount) if from.Equals(tx.rawTx.accountList[pool1VaultQuote]) && to.Equals(tx.rawTx.accountList[pool2VaultBase]) { event = "sell" } else if from.Equals(tx.rawTx.accountList[pool2VaultBase]) && to.Equals(tx.rawTx.accountList[pool1VaultQuote]) { @@ -1295,7 +1295,7 @@ func orcaWhirPoolTwoHopSwapV2Parser(tx *Tx, instruction Instruction, innerInstru return nil, increaseOffset(offset), fmt.Errorf("orca whirpool two hop swap parse token transfer error: %v, offset, %d, %d", err, offset[0], offset[1]) } if from.Equals(tx.rawTx.accountList[pool2VaultBase]) || to.Equals(tx.rawTx.accountList[pool2VaultBase]) { - baseAmount = decimal.NewFromInt(int64(amount)) + baseAmount = decimal.NewFromUint64(amount) if from.Equals(tx.rawTx.accountList[pool2VaultBase]) && to.Equals(tx.rawTx.accountList[pool1VaultBase]) { event = "buy" } else if from.Equals(tx.rawTx.accountList[pool1VaultBase]) && to.Equals(tx.rawTx.accountList[pool2VaultBase]) { @@ -1303,7 +1303,7 @@ func orcaWhirPoolTwoHopSwapV2Parser(tx *Tx, instruction Instruction, innerInstru } baseFound = true } else if from.Equals(tx.rawTx.accountList[pool2VaultQuote]) || to.Equals(tx.rawTx.accountList[pool2VaultQuote]) { - quoteAmount = decimal.NewFromInt(int64(amount)) + quoteAmount = decimal.NewFromUint64(amount) if from.Equals(tx.rawTx.accountList[pool2VaultQuote]) && to.Equals(tx.rawTx.accountList[pool2UserQuote]) { event = "sell" } else if from.Equals(tx.rawTx.accountList[pool2UserQuote]) && to.Equals(tx.rawTx.accountList[pool2VaultQuote]) { diff --git a/testdata/rpc/4sj82GCLtgTDExq7B8YrBsrrqPcE4FqT5Y1gKWmE4cHMDxs7wkCV1hik73dSZ99gZm3K4wyBZQ6U8Nmf48rM9Jri.json b/testdata/rpc/4sj82GCLtgTDExq7B8YrBsrrqPcE4FqT5Y1gKWmE4cHMDxs7wkCV1hik73dSZ99gZm3K4wyBZQ6U8Nmf48rM9Jri.json new file mode 100644 index 0000000..5d522ac --- /dev/null +++ b/testdata/rpc/4sj82GCLtgTDExq7B8YrBsrrqPcE4FqT5Y1gKWmE4cHMDxs7wkCV1hik73dSZ99gZm3K4wyBZQ6U8Nmf48rM9Jri.json @@ -0,0 +1 @@ +{"jsonrpc":"2.0","id":1,"result":{"slot":414696178,"transaction":["AsHLnSA0C8MkH4txUOgKiWZPd3aLWpUevbP4ijLLQZvGpp6De5lqpwZ47x68eyqDZMBw1BlEi2uNpeDbNhuwigfWgHsSR7xgZZshtETYP+kG2wyF2TbmHM0EEkGyP4nPHrUJ+dH1+ZnyGwEf0PzYwRsmilFCP+nVbt9Me3RuRZYOgAIABxNDc5skYYwtL5pQgAijM+3O210GQjkn8a1s0SyscnXHcxQlz6tYMzUknzGn3yttOUUSc+b5sDRnAdK8B8CI8cIhsU4N5V6fuoY5br/VSM/4ySAR6se3W6qbLZxqhvWhcUEPE4KUQmE7mDwkh7zQ0yoUERH/0SWKmIy1cDNBIWCaG2xMMwCIGt6buihGO9qi6AM9vmseZ2C8FoA8ayh4LLUP1UjFItF33PoYFgEdDgAdPNapb0WMgBQNkYrDy1ZsgxrviO8XBRa6hG4o7xJWr+kD6lWoYivuJMqpi4c9C5pqQeiJSSRQncCRABXcoN7iewoLtWD593k1SVQXoF/aST7px0cP9KimvQgbO5pycEcDOc4lh7mHn8Ga5n9TewIWrPBgauggLRtDT/SGG/WqmXSKQhWiXESsHmcJHhQRL+uaRCl92W8sSnd2Ts8rCCWsVN0mPL3bXoPwszsIksIwB2Mbz5sjJtQDzfz8jPAGOlhL8d43AEG49BJBsRqvqGMBj2cDBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkGm4hX/quBhPtof2NGGMA12sQ53BrrO1WYoPAAAAAAAQan1RcZLFxRIYzJTD1K8X9Y2u4Im6H9ROPb2YoAAAAADgNoX46QkFPkWBIcZvWnau3HcGqhHIL4qpUqjyt4eakG3fbh7nWP3hhCXbzkbM3athr8TYO5DSf+vfko2KGL/GVV59VK5xexF9M9DF8OB1KOuvvyR/z/AtSz/37p5ONKCQwABQIdjwIADAAJA0oXAAAAAAAADQIAAgwCAAAAxAkAAAAAAAANAgABNAAAAADwHR8AAAAAAKUAAAAAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkOBAEPABABARELAw4ABAUBBgcICQoooCbQb2hbLAHJMAefyx5+AAAAAAAAAAAAAAAAAAAAAAAkeD0iT0qahBEJAwAEBQEHBggOCKSYz2MeuhO2EQYAAAQLBRIIAbaHO5sZY98OAwEAAAEJAA==","base64"],"meta":{"err":null,"status":{"Ok":null},"fee":11000,"preBalances":[539920879,0,1463061,5435760,2394240,2074080,2039280,101088639343,2039280,2700480,2700480,4029840,1,1,5598483284,1488469452242,1009200,8205554,58559541],"postBalances":[101636543709,0,1465561,5435760,0,0,2039280,2060213,2039280,1920960,1920960,0,1,1,5598483284,1488469452242,1009200,8205554,58559541],"innerInstructions":[{"index":5,"instructions":[{"programIdIndex":14,"accounts":[7,1,3],"data":"3ef3qhP9CJf9","stackHeight":2},{"programIdIndex":14,"accounts":[8,6,3],"data":"3MFBhNdqqiLw","stackHeight":2}]},{"index":6,"instructions":[{"programIdIndex":14,"accounts":[7,1,3],"data":"3KW8m1EVdwXV","stackHeight":2},{"programIdIndex":14,"accounts":[8,6,3],"data":"3DTZbgwsozUF","stackHeight":2}]},{"index":7,"instructions":[{"programIdIndex":18,"accounts":[5,11,0],"data":"qtg1vk8hxJxgP","stackHeight":2},{"programIdIndex":18,"accounts":[5,0,0],"data":"A","stackHeight":2},{"programIdIndex":18,"accounts":[11,0,4],"data":"A","stackHeight":2}]}],"logMessages":["Program ComputeBudget111111111111111111111111111111 invoke [1]","Program ComputeBudget111111111111111111111111111111 success","Program ComputeBudget111111111111111111111111111111 invoke [1]","Program ComputeBudget111111111111111111111111111111 success","Program 11111111111111111111111111111111 invoke [1]","Program 11111111111111111111111111111111 success","Program 11111111111111111111111111111111 invoke [1]","Program 11111111111111111111111111111111 success","Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [1]","Program log: Instruction: InitializeAccount","Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 3442 of 167109 compute units","Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success","Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc invoke [1]","Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]","Program log: Instruction: Transfer","Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4736 of 150151 compute units","Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success","Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]","Program log: Instruction: Transfer","Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4645 of 144268 compute units","Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success","Program data: pgEkR3DKtasPE4KUQmE7mDwkh7zQ0yoUERH/0SWKmIy1cDNBIWCaG2xMMwCIGt6buihGO9qi6AM9vmseZ2C8FoA8ayh4LLUPhdYBAOf+AQDJMAefyx5+AAAAAAAAAAAAlqY4iRcAAAAujZEreJThiAAAAAAAAAAAAAAAAAAAAAA=","Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc consumed 24480 of 163667 compute units","Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc success","Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc invoke [1]","Program log: Instruction: CollectFees","Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]","Program log: Instruction: Transfer","Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4736 of 131244 compute units","Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success","Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]","Program log: Instruction: Transfer","Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4740 of 124498 compute units","Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success","Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc consumed 20692 of 139187 compute units","Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc success","Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc invoke [1]","Program log: Instruction: ClosePositionWithTokenExtensions","Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb invoke [2]","Program log: Instruction: BurnChecked","Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb consumed 1710 of 111666 compute units","Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb success","Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb invoke [2]","Program log: Instruction: CloseAccount","Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb consumed 1380 of 107831 compute units","Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb success","Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb invoke [2]","Program log: Instruction: CloseAccount","Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb consumed 1330 of 104298 compute units","Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb success","Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc consumed 16031 of 118495 compute units","Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc success","Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [1]","Program log: Instruction: CloseAccount","Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 2914 of 102464 compute units","Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success"],"preTokenBalances":[{"accountIndex":5,"mint":"EyQbfXr8jxYC1GyqYJchqUb6pYfSbE8uXBcntF6nQspr","uiTokenAmount":{"uiAmount":1,"decimals":0,"amount":"1","uiAmountString":"1"},"owner":"5YJZP8jAmU7BU7DzNGUG2HkyCp3ij6cPMJ8PgegGCBKp","programId":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"accountIndex":6,"mint":"HhskoQv5kjBxs2C7tXViJ4EE31srU3UPBb36xWKpciZc","uiTokenAmount":{"uiAmount":0,"decimals":4,"amount":"0","uiAmountString":"0"},"owner":"5YJZP8jAmU7BU7DzNGUG2HkyCp3ij6cPMJ8PgegGCBKp","programId":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{"accountIndex":7,"mint":"So11111111111111111111111111111111111111112","uiTokenAmount":{"uiAmount":101.086600063,"decimals":9,"amount":"101086600063","uiAmountString":"101.086600063"},"owner":"21rNUcBWoziA2iqg5oHbgvGPq7aJpGCmCSscHoCM9fbp","programId":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{"accountIndex":8,"mint":"HhskoQv5kjBxs2C7tXViJ4EE31srU3UPBb36xWKpciZc","uiTokenAmount":{"uiAmount":986332790276604.4,"decimals":4,"amount":"9863327902766042418","uiAmountString":"986332790276604.2418"},"owner":"21rNUcBWoziA2iqg5oHbgvGPq7aJpGCmCSscHoCM9fbp","programId":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}],"postTokenBalances":[{"accountIndex":6,"mint":"HhskoQv5kjBxs2C7tXViJ4EE31srU3UPBb36xWKpciZc","uiTokenAmount":{"uiAmount":986332790276604.4,"decimals":4,"amount":"9863327902766042414","uiAmountString":"986332790276604.2414"},"owner":"5YJZP8jAmU7BU7DzNGUG2HkyCp3ij6cPMJ8PgegGCBKp","programId":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{"accountIndex":7,"mint":"So11111111111111111111111111111111111111112","uiTokenAmount":{"uiAmount":2.0933e-05,"decimals":9,"amount":"20933","uiAmountString":"0.000020933"},"owner":"21rNUcBWoziA2iqg5oHbgvGPq7aJpGCmCSscHoCM9fbp","programId":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{"accountIndex":8,"mint":"HhskoQv5kjBxs2C7tXViJ4EE31srU3UPBb36xWKpciZc","uiTokenAmount":{"uiAmount":0.0004,"decimals":4,"amount":"4","uiAmountString":"0.0004"},"owner":"21rNUcBWoziA2iqg5oHbgvGPq7aJpGCmCSscHoCM9fbp","programId":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}],"rewards":[],"loadedAddresses":{"writable":[],"readonly":[]},"computeUnitsConsumed":68159,"costUnits":76169},"version":0,"blockTime":1776776153}} \ No newline at end of file