ETH / ERC-20 unit conversion -- pure Elm, no JS required.
parseEther "1.5" == Just <1500000000000000000>Build wei values with BigInt.fromString, never BigInt.fromInt. An Elm Int
is a JS double, so a literal above 2^53 is already corrupt before it reaches
this module: BigInt.fromInt 1500000000000000000 yields 999996861446400000000.
Every realistic 18-decimal amount is past that bound.
Negative values format with a single leading sign, and parseUnits rejects a
malformed fraction rather than returning a plausible wrong number.
Parse a human-readable ETH string to Wei. Returns Nothing for invalid input, non-numeric strings, or negative values.
parseEther "1" == Just <10^18>
parseEther "1.5" == Just <1.5x10^18>
parseEther "0.000000000000000001" == Just (BigInt.fromInt 1)
parseEther "not-a-number" == Nothing
parseEther "-1" == NothingConvert a token amount (in its smallest unit) to a human-readable string for a token with the given number of decimal places. Trailing zeros are trimmed.
formatUnits 6 (BigInt.fromInt 1500000) == "1.5" -- USDC
formatUnits 8 (BigInt.fromInt 100000000) == "1" -- WBTCParse a human-readable token amount to its smallest unit, given the token's decimal count. Returns Nothing for invalid or negative input.
parseUnits 6 "1.5" == Just (BigInt.fromInt 1500000) -- USDC
parseUnits 6 "0" == Just BigInt.zero
parseUnits 6 "-1" == Nothing
Convert Wei to a human-readable ETH string with up to 18 significant decimal places. Trailing zeros are trimmed.