solana_kit_fixed_points 0.9.1 copy "solana_kit_fixed_points: ^0.9.1" to clipboard
solana_kit_fixed_points: ^0.9.1 copied to clipboard

Fixed-point number helpers for the Solana Kit Dart SDK.

solana_kit_fixed_points #

pub package docs website CI coverage

Fixed-point number types and arithmetic for Solana programs in Dart. Provides binary (power-of-2) and decimal fixed-point representations with full codec support. A port of @solana/fixed-points from the Solana TypeScript SDK.

Installation #

Install the package directly:

dependencies:
  "solana_kit_fixed_points": ^0.9.1

If your app uses several Solana Kit packages together, you can also depend on the umbrella package instead:

dart pub add solana_kit

Inside this monorepo, Dart workspace resolution uses the local package automatically.

Documentation #

For architecture notes, getting-started guides, and cross-package examples, start with the workspace docs site and then drill down into the package README and API reference.

Binary fixed-point numbers #

Binary fixed-point types store values as integers scaled by a power of 2. Use them when you need deterministic arithmetic at known bit widths, like Solana token amounts that represent fractional lamports or ticks.

Construct a BinaryFixedPoint by specifying the raw scaled integer, fractional bit count, and total bit width:

import 'package:solana_kit_fixed_points/solana_kit_fixed_points.dart';

void main() {
  // 1.0 stored as raw = 2^32, with 32 fractional bits in a 64-bit word
  final value = BinaryFixedPoint(
    raw: BigInt.from(1) << 32,
    fractionalBits: 32,
    totalBits: 64,
  );
  print(value.toDecimalString()); // '1'

  // Arithmetic with + and -
  final a = BinaryFixedPoint(raw: BigInt.from(3) << 32, fractionalBits: 32, totalBits: 64);
  final b = BinaryFixedPoint(raw: BigInt.from(2) << 32, fractionalBits: 32, totalBits: 64);
  print((a + b).toDecimalString()); // '5'

  // Comparisons use named functions, not operators
  print(gtBinaryFixedPoint(a, b)); // true
}

rawBinaryFixedPoint returns a factory function that constructs values with a fixed shape. BinaryFixedPoint.parse reads a decimal string and converts it to the binary representation:

import 'package:solana_kit_fixed_points/solana_kit_fixed_points.dart';

void main() {
  final make = rawBinaryFixedPoint(FixedPointSignedness.unsigned, 64, 32);
  final a = make(BigInt.from(3) << 32);
  print(a.toDecimalString()); // '3'

  final parsed = BinaryFixedPoint.parse('1.5', fractionalBits: 32, totalBits: 64);
  print(parsed.toDecimalString()); // '1.5'
}

Decimal fixed-point numbers #

Decimal fixed-point types use a power-of-10 scale. Useful when the on-wire format stores fractional amounts as integers (for example, token decimals).

import 'package:solana_kit_fixed_points/solana_kit_fixed_points.dart';

void main() {
  // 1.5 SOL stored as 1_500_000_000 lamports (9 decimal places)
  final price = DecimalFixedPoint(raw: BigInt.from(1500000000), decimals: 9, totalBits: 64);
  print(price.toDecimalString()); // '1.5'

  final quantity = DecimalFixedPoint(raw: BigInt.from(2000000000), decimals: 9, totalBits: 64);
  print((price + quantity).toDecimalString()); // '3.5'

  // Parse from a decimal string
  final solAmount = DecimalFixedPoint.parse('0.075', decimals: 9, totalBits: 64);
  print(solAmount.raw); // BigInt.from(75000000)
}

Fixed-point codecs #

getBinaryFixedPointCodec encodes and decodes binary fixed-point values. getDecimalFixedPointCodec does the same for decimal fixed-point values. Both take the signedness, total bit width, and fractional bit/decimal count:

import 'package:solana_kit_fixed_points/solana_kit_fixed_points.dart';

void main() {
  final binCodec = getBinaryFixedPointCodec(FixedPointSignedness.unsigned, 64, 32);
  final binValue = BinaryFixedPoint(raw: BigInt.from(1) << 32, fractionalBits: 32, totalBits: 64);
  final binEncoded = binCodec.encode(binValue);
  print(binCodec.decode(binEncoded).toDecimalString()); // '1'

  final decCodec = getDecimalFixedPointCodec(FixedPointSignedness.unsigned, 64, 9);
  final decValue = DecimalFixedPoint(raw: BigInt.from(1500000000), decimals: 9, totalBits: 64);
  final decEncoded = decCodec.encode(decValue);
  print(decCodec.decode(decEncoded).toDecimalString()); // '1.5'
}

Formatting #

binaryFixedPointToString and decimalFixedPointToString produce human-readable strings. formatBinaryFixedPoint and formatDecimalFixedPoint pass the scientific-notation representation to a custom formatter:

import 'package:solana_kit_fixed_points/solana_kit_fixed_points.dart';

void main() {
  final value = BinaryFixedPoint(raw: BigInt.from(1) << 32, fractionalBits: 32, totalBits: 64);
  print(binaryFixedPointToString(value)); // '1'

  final formatted = formatBinaryFixedPoint((sci) => '$sci SOL', value);
  print(formatted); // '4294967296E-32 SOL'
}

Key APIs #

Symbol Description
BinaryFixedPoint Power-of-2 fixed-point number
DecimalFixedPoint Power-of-10 fixed-point number
BinaryFixedPoint.parse Parse a decimal string into a binary fixed-point
DecimalFixedPoint.parse Parse a decimal string into a decimal fixed-point
rawBinaryFixedPoint Factory function for fixed-shape binary values
rawDecimalFixedPoint Factory function for fixed-shape decimal values
getBinaryFixedPointCodec Codec for binary fixed-point wire format
getDecimalFixedPointCodec Codec for decimal fixed-point wire format
binaryFixedPointToString Format a binary fixed-point as a string
decimalFixedPointToString Format a decimal fixed-point as a string
formatBinaryFixedPoint Format via a custom scientific-notation handler
formatDecimalFixedPoint Format via a custom scientific-notation handler
gtBinaryFixedPoint, ltBinaryFixedPoint, etc. Comparison functions
addBinaryFixedPoint, subtractBinaryFixedPoint, etc. Arithmetic functions
0
likes
0
points
2.18k
downloads

Publisher

unverified uploader

Weekly Downloads

Fixed-point number helpers for the Solana Kit Dart SDK.

Homepage
Repository (GitHub)
View/report issues

License

unknown (license)

More

Packages that depend on solana_kit_fixed_points