Files
mev-beta/debug_precision.go
2025-10-04 09:31:02 -05:00

65 lines
1.9 KiB
Go

package main
import (
"fmt"
"math/big"
"github.com/fraktal/mev-beta/pkg/math"
)
func main() {
dc := math.NewDecimalConverter()
// Test case: "1000000000000000000" (1 ETH in wei)
original := "1000000000000000000"
decimals := uint8(18)
symbol := "ETH"
fmt.Printf("=== Debugging Precision Loss ===\n")
fmt.Printf("Original string: %s\n", original)
fmt.Printf("Decimals: %d\n", decimals)
fmt.Printf("Symbol: %s\n", symbol)
// Step 1: FromString
decimal, err := dc.FromString(original, decimals, symbol)
if err != nil {
fmt.Printf("ERROR in FromString: %v\n", err)
return
}
fmt.Printf("\nAfter FromString:\n")
fmt.Printf(" Value: %s\n", decimal.Value.String())
fmt.Printf(" Decimals: %d\n", decimal.Decimals)
fmt.Printf(" Symbol: %s\n", decimal.Symbol)
// Step 2: ToHumanReadable
humanReadable := dc.ToHumanReadable(decimal)
fmt.Printf("\nAfter ToHumanReadable: '%s'\n", humanReadable)
// Step 3: FromString again
backToDecimal, err := dc.FromString(humanReadable, decimals, symbol)
if err != nil {
fmt.Printf("ERROR in second FromString: %v\n", err)
return
}
fmt.Printf("\nAfter round-trip FromString:\n")
fmt.Printf(" Value: %s\n", backToDecimal.Value.String())
fmt.Printf(" Decimals: %d\n", backToDecimal.Decimals)
fmt.Printf(" Symbol: %s\n", backToDecimal.Symbol)
// Step 4: Compare
fmt.Printf("\n=== Comparison ===\n")
fmt.Printf("Original value: %s\n", decimal.Value.String())
fmt.Printf("Round-trip value: %s\n", backToDecimal.Value.String())
fmt.Printf("Match: %t\n", decimal.Value.Cmp(backToDecimal.Value) == 0)
// Let's also test what 1 ETH should look like
fmt.Printf("\n=== Testing 1 ETH ===\n")
oneETH := new(big.Int)
oneETH.Exp(big.NewInt(10), big.NewInt(18), nil) // 10^18
fmt.Printf("1 ETH in wei: %s\n", oneETH.String())
fmt.Printf("Our value: %s\n", decimal.Value.String())
fmt.Printf("Equal: %t\n", oneETH.Cmp(decimal.Value) == 0)
}