fix looptable index
This commit is contained in:
62
cmd/debug_jupv6/main.go
Normal file
62
cmd/debug_jupv6/main.go
Normal file
@@ -0,0 +1,62 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user