Skip to main content
import { TokenBalance } from 'voltaire-effect'
import * as Schema from 'effect/Schema'
import { Effect } from 'effect'

// Schema: bigint, number, or string
const bal = Schema.decodeSync(TokenBalance.BigInt)(1000000000000000000n)
Schema.decodeSync(TokenBalance.Number)(1000000)
Schema.decodeSync(TokenBalance.String)('1000000000000000000')

// From hex
Schema.decodeSync(TokenBalance.FromHexSchema)('0xde0b6b3a7640000')

// Effect constructors
TokenBalance.from(1000000000000000000n)
TokenBalance.fromNumber(1000000)
TokenBalance.fromBigInt(1000000000000000000n)
TokenBalance.fromHex('0xde0b6b3a7640000')

// Decimal conversion
const balance = await Effect.runPromise(TokenBalance.fromBaseUnit('1.5', 18))
const formatted = await Effect.runPromise(TokenBalance.format(balance, 18)) // "1.5"
const raw = await Effect.runPromise(TokenBalance.toBaseUnit(balance))

Error Handling

const result = await Effect.runPromiseExit(TokenBalance.from(-1n))
if (result._tag === 'Failure') console.error(result.cause)