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) }