# UINT256

256-bit unsigned EVM integer stored as a 32-byte big-endian ABI word. Decimal string casts parse exact numeric values; 0x-prefixed strings parse raw bytes. VARCHAR output is decimal for display; use format_units/format_ether for token amounts and BYTES/BYTES32 casts for raw ABI/storage boundaries.

Canonical HTML: <https://determica.com/docs/types/uint256>

- Family: Unsigned integer
- Physical type: BLOB

256-bit unsigned EVM integer stored as a 32-byte big-endian ABI word. Decimal string casts parse exact numeric values; 0x-prefixed strings parse raw bytes. VARCHAR output is decimal for display; use format_units/format_ether for token amounts and BYTES/BYTES32 casts for raw ABI/storage boundaries.

## Used by functions

### Input and output

- [clmm_amount0_delta_x96](/docs/functions/clmm_amount0_delta_x96.md) — Computes the Uniswap v4 SqrtPriceMath currency0 delta between two Q64.96 boundaries. Determica requires non-zero uint128 liquidity; arithmetic is deterministic and NULL propagates.
- [clmm_amount1_delta_x96](/docs/functions/clmm_amount1_delta_x96.md) — Computes the Uniswap v4 SqrtPriceMath currency1 delta between two Q64.96 boundaries. Determica requires non-zero uint128 liquidity; arithmetic is deterministic and NULL propagates.
- [clmm_liquidity_for_amounts_x96](/docs/functions/clmm_liquidity_for_amounts_x96.md) — Liquidity two token amounts buy in a price range, as Uniswap v3-periphery LiquidityAmounts.getLiquidityForAmounts. Integer math only; NULL propagates.
- [clmm_next_sqrt_price_from_input_x96](/docs/functions/clmm_next_sqrt_price_from_input_x96.md) — Computes the Uniswap v4 SqrtPriceMath next Q64.96 price for exact input. It is deterministic and propagates NULL.
- [clmm_next_sqrt_price_from_output_x96](/docs/functions/clmm_next_sqrt_price_from_output_x96.md) — Computes the Uniswap v4 SqrtPriceMath next Q64.96 price for exact output. It is deterministic and propagates NULL.
- [divmul](/docs/functions/divmul.md) — Computes floor(x * d / y), not an algebraic inverse of muldiv, with the product formed in 512 bits. Errors when y is zero or when the quotient does not fit UINT256. NULL input propagates to NULL.
- [evm_addmod](/docs/functions/evm_addmod.md) — Implements EVM ADDMOD: computes (a + b) mod n using the full mathematical sum, without UINT256 wraparound, and returns zero when n is zero. NULL input propagates to NULL.
- [evm_byte](/docs/functions/evm_byte.md) — Implements the EVM BYTE opcode over a UINT256 word. BYTE index 0 selects the most significant byte and index 31 selects the least significant byte. Negative indices and indices above 31 return zero. NULL input propagates to NULL.
- [evm_ceil_div](/docs/functions/evm_ceil_div.md) — Ceiling division: (x + y - 1) / y. Rounds up to ensure no remainder. If y is 0, the function errors with: Division by zero in evm_ceil_div.
- [evm_clamp](/docs/functions/evm_clamp.md) — Constrains x to the inclusive range [lo, hi] when lo <= hi. For compatibility, reversed bounds lo > hi return lo; reversed bounds do not describe a valid interval. NULL input propagates to NULL.
- [evm_max](/docs/functions/evm_max.md) — Returns the maximum of two UINT256 values.
- [evm_min](/docs/functions/evm_min.md) — Returns the minimum of two UINT256 values.
- [evm_modexp](/docs/functions/evm_modexp.md) — Computes base^exp mod modulus over three fixed-width UINT256 values. Returns 0 when modulus is 0 or 1; for other moduli, exponent 0 returns 1. This is not the EVM MODEXP precompile byte interface: it does not accept length-prefixed byte sequences, produce variable-width output, or model gas. NULL input propagates to NULL.
- [evm_mulmod](/docs/functions/evm_mulmod.md) — Implements EVM MULMOD: computes (a * b) mod n from the full 512-bit product, without UINT256 wraparound, and returns zero when n is zero. NULL input propagates to NULL.
- [evm_shl](/docs/functions/evm_shl.md) — Implements EVM SHL: shifts a UINT256 word left, discards bits above bit 255, and returns zero for counts at least 256. Negative SQL BIGINT counts throw Invalid Input Error: Shift amount must be non-negative. NULL input propagates to NULL.
- [evm_shr](/docs/functions/evm_shr.md) — Implements EVM SHR: logically shifts a UINT256 word right, fills high bits with zero, and returns zero for counts at least 256. Negative SQL BIGINT counts throw Invalid Input Error: Shift amount must be non-negative. NULL input propagates to NULL.
- [evm_signextend](/docs/functions/evm_signextend.md) — Implements EVM SIGNEXTEND. Byte k is indexed from the least significant byte; bit 8*k+7 is copied through all higher bits. SQL BIGINT k values below 0 or at least 31 return the unchanged UINT256 word. NULL input propagates to NULL.
- [evm_sqrt](/docs/functions/evm_sqrt.md) — Returns the floor integer square root of a UINT256 value using overflow-safe Newton iteration. Defined for the full UINT256 range. NULL input propagates to NULL.
- [fixed_div](/docs/functions/fixed_div.md) — Computes fixed-point division as x * scale / y with a full 512-bit intermediate product. The caller owns the units and scale: this function does not require decimal, WAD, or Q-format inputs. It is pure and deterministic. NULL input propagates to NULL. A zero y or a rounded quotient above UINT256 raises an error.
- [fixed_exp](/docs/functions/fixed_exp.md) — Computes e^(x / 1e18) * 1e18 for an 18-decimal fixed-point (WAD) exponent, with integer arithmetic only. NULL propagates; an exponent outside [-41e18, 130e18] errors. Results equal, digit for digit, those of the LogExpMath library that Balancer V2 and Pendle V2 contracts use, so a query recomputes an on-chain rate exactly. Accuracy: within 1e-17 relative for results of 1e17 or more; a few wei near 1e18 (exp(1e18) is 2718281828459045235); a tiny result keeps few digits (exp(-41e18) is 1, true 1.56).
- [fixed_mul](/docs/functions/fixed_mul.md) — Computes fixed-point multiplication as x * y / scale with a full 512-bit intermediate product. The caller owns the units and scale: this function does not require decimal, WAD, or Q-format inputs. It is pure and deterministic. NULL input propagates to NULL. A zero scale or a rounded quotient above UINT256 raises an error.
- [fixed_pow](/docs/functions/fixed_pow.md) — Raises an 18-decimal fixed-point (WAD) base to a WAD exponent as exp(y * ln(x)), with integer arithmetic only, for example to annualise a growth factor. NULL propagates. Results equal, digit for digit, those of the LogExpMath library that Balancer V2 and Pendle V2 contracts use, so a query recomputes an on-chain rate exactly. Accuracy: within 1e-16 relative for results of 1e17 or more (fixed_pow(2e18, 1e18) is 1999999999999999998).
- [muldiv](/docs/functions/muldiv.md) — x * y / z with a 512-bit product: no overflow before division. UINT256 rounds down, INT256 truncates toward zero, unless a rounding mode is given. Errors when z is zero or result does not fit its type. NULL propagates. Native integer arguments fit both forms: cast them to UINT256 or INT256.
- [parse_ether](/docs/functions/parse_ether.md) — Shorthand for parse_units(value, 18). Converts ETH/WETH amounts to wei. Prefer VARCHAR inputs for capital-moving amounts. Negative values and excess fractional precision are rejected; overflow currently follows parse_units compatibility behavior and wraps modulo 2^256.
- [parse_gwei](/docs/functions/parse_gwei.md) — Shorthand for parse_units(value, 9). Converts gwei to wei. Prefer VARCHAR inputs for capital-moving amounts. Negative values and excess fractional precision are rejected; overflow currently follows parse_units compatibility behavior and wraps modulo 2^256.
- [parse_units](/docs/functions/parse_units.md) — Converts human-readable token amounts to UINT256 raw values by multiplying by 10^decimals. Prefer VARCHAR inputs for capital-moving amounts. Negative values are rejected, fractional digits beyond decimals are rejected, and decimals must be between 0 and 77. String inputs trim surrounding whitespace, allow an optional leading plus sign, right-pad fractional digits with zeros, accept trailing fractional zeros, and reject scientific notation. Values that exceed UINT256 currently wrap modulo 2^256; treat that as compatibility behavior and validate untrusted amounts before parsing.
- [try_add](/docs/functions/try_add.md) — Adds two UINT256 values. Arithmetic overflow produces NULL; independently, ordinary scalar NULL propagation produces NULL when either input is NULL.
- [try_mul](/docs/functions/try_mul.md) — Multiplies two UINT256 values using a 512-bit intermediate. Arithmetic overflow produces NULL; independently, ordinary scalar NULL propagation produces NULL when either input is NULL.
- [try_sub](/docs/functions/try_sub.md) — Subtracts two UINT256 values. Arithmetic underflow produces NULL; independently, ordinary scalar NULL propagation produces NULL when either input is NULL.

### Accepted as input

- [assume_native_balance](/docs/functions/assume_native_balance.md) — Declares the exact native balance, in Wei, supplied for one address in a PROGRAM's initial state.
- [call_context](/docs/functions/call_context.md) — Builds the EVM transaction context attached to one PROGRAM call step.
- [clmm_amounts_for_liquidity_x96](/docs/functions/clmm_amounts_for_liquidity_x96.md) — Position token amounts at a price from liquidity and range, as Uniswap v3-periphery LiquidityAmounts.getAmountsForLiquidity. Integer math only; NULL propagates.
- [clmm_bitmap_next_initialized_tick](/docs/functions/clmm_bitmap_next_initialized_tick.md) — Scans exactly one Uniswap v4-style compressed tick bitmap word. Compression rounds negative non-multiples toward negative infinity. It is deterministic, propagates NULL, and does not fetch adjacent words.
- [clmm_sqrt_price_x96_to_tick](/docs/functions/clmm_sqrt_price_x96_to_tick.md) — Inverts a Q64.96 sqrt(currency1/currency0) using Uniswap v4 TickMath floor semantics. It is deterministic and propagates NULL.
- [clmm_swap_step_x96](/docs/functions/clmm_swap_step_x96.md) — Computes one Uniswap v4 SwapMath-compatible price-range step. Negative amount_remaining means exact input; non-negative means exact output. Direction is inferred from current versus target. Hooks, dynamic fee resolution, tick-crossing liquidity changes, multi-word iteration, slippage, routing, and calldata are outside this deterministic helper. The five-argument overload uses Uniswap v4's 1,000,000 fee denominator.
- [clmm_swap_x96](/docs/functions/clmm_swap_x96.md) — Exact swap across initialized ticks, as the Uniswap v3 and v4 swap loop: each step ends at the next listed tick or the tick-bitmap word edge (256 x tick_spacing), whichever is first, with clmm_swap_step_x96 math; crossing adds liquidity_net moving up, subtracts it moving down. Stops at the amount, price limit or list end; never assumes liquidity past listed ticks. Offline: caller reads state and ticks. No hooks, dynamic fees or protocol fee split. List sorted once per call.
- [create_access_list](/docs/functions/create_access_list.md) — Builds an EIP-2930 access list for a transaction request. Each result row identifies an accessed account or storage slot and includes request status.
- [evm_abi_word](/docs/functions/evm_abi_word.md) — Encodes an ADDRESS, BYTES32, BOOLEAN, or integer as one 32-byte Solidity ABI word. ADDRESS and unsigned integer values are left-padded with zeros. Signed integers are sign-extended in two's-complement form; BOOLEAN uses 0 or 1. BYTES32 values are copied unchanged.
- [evm_bit_count](/docs/functions/evm_bit_count.md) — Counts set bits in the complete 256-bit unsigned EVM word. Returns 0 for zero and 256 for UINT256_MAX. NULL input propagates to NULL.
- [evm_clz](/docs/functions/evm_clz.md) — Counts zero bits from bit 255, the most significant bit, toward bit 0 in a 256-bit unsigned EVM word. Returns 256 for zero. NULL input propagates to NULL.
- [evm_ctz](/docs/functions/evm_ctz.md) — Counts zero bits from bit 0, the least significant bit, toward bit 255 in a 256-bit unsigned EVM word. Returns 256 for zero. NULL input propagates to NULL.
- [evm_iszero](/docs/functions/evm_iszero.md) — Implements the EVM ISZERO opcode: returns BIGINT 1 when the complete UINT256 word is zero and 0 otherwise. NULL input propagates to NULL.
- [evm_pack_uint_be](/docs/functions/evm_pack_uint_be.md) — Packs a UINT256 value into an exact-width big-endian BYTES value for ABI-adjacent byte construction.
- [evm_set_bits](/docs/functions/evm_set_bits.md) — Positions of one bits in a 256-bit unsigned EVM word, ascending from bit 0. Zero gives []; UINT256_MAX gives 0 through 255. NULL propagates. A list comprehension turns a bitmap word into its members, e.g. initialized ticks of a tick bitmap word.
- [execute_call](/docs/functions/execute_call.md) — Builds one raw EVM call step for ordered, non-atomic PROGRAM execution.
- [execute_contract](/docs/functions/execute_contract.md) — Selects an ABI function, encodes its arguments, and builds one step for ordered, non-atomic PROGRAM execution.
- [fixed_ln](/docs/functions/fixed_ln.md) — Computes ln(x / 1e18) * 1e18 for a positive 18-decimal fixed-point (WAD) value, with integer arithmetic only; arguments in (0.9e18, 1.1e18) use a 36-decimal series. NULL propagates. Results equal, digit for digit, those of the LogExpMath library that Balancer V2 and Pendle V2 contracts use, so a query recomputes an on-chain rate exactly. Accuracy: within 2 wei of the true value, on either side.
- [format_ether](/docs/functions/format_ether.md) — Human-readable helper for wei balances. Equivalent to format_units(amount, 18). Returns VARCHAR without introducing floating point conversion.
- [format_units](/docs/functions/format_units.md) — Scales raw EVM integer balances by 10^decimals and returns a VARCHAR string representation. No floating point conversion is introduced. The default decimal scale is 18. INT256 inputs preserve signed values, and trailing fractional zeros are trimmed from the formatted string.
- [keccak256](/docs/functions/keccak256.md) — Computes the Keccak-256 hash used by the EVM, returning a BYTES32 digest. Non-0x VARCHAR input is hashed as UTF-8, 0x-prefixed VARCHAR input is decoded to bytes first, and multi-argument overloads hash the exact unframed concatenation in argument order.
- [length](/docs/functions/length.md) — Returns the number of bytes in a BLOB or BLOB-backed EVM value such as ADDRESS, BYTES32, UINT256, or INT256.
- [raw_call](/docs/functions/raw_call.md) — Executes an isolated EVM call and returns the raw response bytes. Without a CLIENT, it builds a reusable READ and does not execute the call.
- [sort_key](/docs/functions/sort_key.md) — Converts INT256/INT512/UINT256/UINT512 to a sortable BLOB for use in ORDER BY. Necessary because Determica's default BLOB ordering doesn't handle signed integers correctly. Use sort_key only inside ORDER BY or comparison-key workflows; it is not a human-readable number conversion, hash, or portable serialization.
- [to_timestamp](/docs/functions/to_timestamp.md) — Converts UINT256 seconds since the Unix epoch to a timezone-naive TIMESTAMP. Interpret the result as UTC when the source value is an EVM block timestamp.

### Returned as output

- [clmm_tick_to_sqrt_price_x96](/docs/functions/clmm_tick_to_sqrt_price_x96.md) — Converts a Uniswap-compatible tick to Q64.96 sqrt(currency1/currency0) with TickMath's bit-decomposed constants and final upward rounding. It is deterministic and propagates NULL.
- [get_block](/docs/functions/get_block.md) — Fetches a block by decimal height, supported block tag, or block hash. The block defaults to latest and include_transactions defaults to false.
- [get_gas_price](/docs/functions/get_gas_price.md) — Returns the RPC provider's current legacy gas-price estimate as an exact UINT256 value in Wei.
- [get_transaction](/docs/functions/get_transaction.md) — Fetches a transaction by hash, then makes a separate receipt request for receipt metadata.
- [native_balance](/docs/functions/native_balance.md) — Returns an address's native-token balance as exact Wei in live, pinned, or retained execution state. Without a CLIENT, it builds a reusable READ and does not access state.
- [try_native_balance](/docs/functions/try_native_balance.md) — Returns an address's native-token balance as exact Wei at an explicit block, as native_balance does. A balance read cannot revert, so a failed read raises here too.
