pipo tx parse
This commit is contained in:
@@ -1,62 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"os"
|
||||
)
|
||||
|
||||
func main() {
|
||||
hexData := "bb64facc31c4af14be34e6edcc0000006f03a4df67000000b903320000000300000064342100024b00000000dc0500026310270203"
|
||||
b, err := hex.DecodeString(hexData)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
payload := b[8:]
|
||||
|
||||
off := 0
|
||||
read := func(n int) []byte {
|
||||
if off+n > len(payload) {
|
||||
fmt.Printf("OOB read: off=%d n=%d len=%d\n", off, n, len(payload))
|
||||
os.Exit(1)
|
||||
}
|
||||
out := payload[off : off+n]
|
||||
off += n
|
||||
return out
|
||||
}
|
||||
u8 := func() uint8 { return read(1)[0] }
|
||||
leU16 := func() uint16 {
|
||||
b := read(2)
|
||||
return uint16(b[0]) | uint16(b[1])<<8
|
||||
}
|
||||
leU32 := func() uint32 {
|
||||
b := read(4)
|
||||
return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
|
||||
}
|
||||
leU64 := func() uint64 {
|
||||
b := read(8)
|
||||
return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |
|
||||
uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
|
||||
}
|
||||
|
||||
fmt.Printf("payload len=%d\n", len(payload))
|
||||
amountIn := leU64()
|
||||
quotedOut := leU64()
|
||||
slippage := leU16()
|
||||
platform := leU16()
|
||||
posSlip := leU16()
|
||||
fmt.Printf("in=%d out=%d slip=%d plat=%d pos=%d\n", amountIn, quotedOut, slippage, platform, posSlip)
|
||||
|
||||
planLen := leU32()
|
||||
fmt.Printf("planLen=%d\n", planLen)
|
||||
for i := uint32(0); i < planLen; i++ {
|
||||
swapTag := u8()
|
||||
fmt.Printf("step[%d] swapTag=%d (0x%02x) off=%d\n", i, swapTag, swapTag, off)
|
||||
// payload depends on swapTag; we don't know, so just print next few bytes and stop
|
||||
bps := leU16()
|
||||
inIdx := u8()
|
||||
outIdx := u8()
|
||||
fmt.Printf(" bps=%d inIdx=%d outIdx=%d off=%d\n", bps, inIdx, outIdx, off)
|
||||
}
|
||||
fmt.Printf("done off=%d\n", off)
|
||||
}
|
||||
@@ -8,8 +8,10 @@ import (
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/gagliardetto/solana-go/rpc"
|
||||
"github.com/shopspring/decimal"
|
||||
|
||||
"github.com/samlior/libsam/pkg/shreder"
|
||||
)
|
||||
@@ -76,9 +78,9 @@ func main() {
|
||||
cancel()
|
||||
}()
|
||||
// async read from shreder
|
||||
txCh := make(chan shreder.TxSignalBatch, 1000)
|
||||
txCh := make(chan shreder.TxSignal, 1000)
|
||||
go func() {
|
||||
err := shrederClient.ReadSync(ctx, txCh)
|
||||
err := shrederClient.ReadEntriesSync(ctx, txCh)
|
||||
if err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
panic(err)
|
||||
@@ -90,13 +92,20 @@ func main() {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return
|
||||
case txBatch := <-txCh:
|
||||
case tx := <-txCh:
|
||||
//jsonData, _ := json.MarshalIndent(txBatch, "", " ")
|
||||
for _, tx := range txBatch {
|
||||
if tx.Label == "okxdexroutev2" || tx.Label == "jupiterv6" || tx.Label == "dflow" {
|
||||
fmt.Println("===============", tx.TxHash, tx.Label, tx.Event, tx.Token0Address, "token:", tx.Token0Amount, "parse time:", tx.ParseEnd.Sub(tx.ParseStart))
|
||||
}
|
||||
if tx.Token0Amount.GreaterThan(decimal.NewFromInt(100)) && (tx.Label == "okxdexroutev2" || tx.Label == "jupiterv6" || tx.Label == "dflow") {
|
||||
fmt.Println(time.Now(), "===============", tx.TxHash,
|
||||
"parse time:", tx.Stats.Done.Sub(tx.Stats.Filter),
|
||||
"decode time:", tx.Stats.Decoded.Sub(tx.Stats.FEC),
|
||||
"filter time:", tx.Stats.Filter.Sub(tx.Stats.Decoded),
|
||||
"dataLen", tx.Stats.DataLen, "txCount", tx.Stats.TxCount, "txOffset", tx.Stats.TxOffset, tx.Label, tx.Event, "token:", tx.Token0Amount)
|
||||
}
|
||||
|
||||
//if tx.Token0Amount.GreaterThan(decimal.NewFromInt(100)) && (tx.Label == "okxdexroutev2" || tx.Label == "jupiterv6" || tx.Label == "dflow") {
|
||||
// fmt.Println(time.Now(), "===============", tx.TxHash,
|
||||
// tx.Label, tx.Event, "token:", tx.Token0Amount)
|
||||
//}
|
||||
//fmt.Println(txBatch[0].TxHash)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user