65 lines
1.9 KiB
Go
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)
|
|
}
|