Icon HelpCircleForumIcon Link

⌘K

Icon HelpCircleForumIcon Link

Icon LinkNumbers

In Sway, there are multiple primitive number types:

  1. u8 (8-bit unsigned integer)
  2. u16 (16-bit unsigned integer)
  3. u32 (32-bit unsigned integer)
  4. u64 (64-bit unsigned integer)
  5. u256 (256-bit unsigned integer)

This guide explains how to create and interact with Sway numbers while using the SDK.

Icon LinkCreating Numbers

Icon LinkFor u64 and u256

When you pass in a u64 or a u256 to a Sway program from JavaScript, you must first convert it to a BigNum object. This is because these types can have extremely large maximum values (2^64 and 2^256 respectively), and JavaScript's Number type can only hold up to 53 bits of precision (2^53).

import { bn } from 'fuels';
 
const originalNumber = 20;
 
const bigNumber = bn(originalNumber);
 
expect(bigNumber.toNumber()).toEqual(originalNumber);

You can also create a BigNum from a string. This is useful when you want to pass in a number that is too large to be represented as a JavaScript number. Here's how you can do that:

import { bn } from 'fuels';
 
const originalNumber = '9007199254740992';
 
const bigNumber = bn(originalNumber);
 
expect(bigNumber.toString()).toEqual(originalNumber);

Icon LinkFor u8, u16, and u32

You don't need to do anything special to create these numbers. You can pass in a JavaScript number directly. See the examples below for more details.

Icon LinkExamples: Interacting with Numbers in Contract Methods

Icon LinkFor u64 and u256

const originalNumber = 20;
 
const { waitForResult } = await contract.functions.echo_u64(bn(originalNumber)).call();
const { value } = await waitForResult();
 
expect(value.toNumber()).toEqual(originalNumber);
Icon InfoCircle

Note: If a contract call returns a number that is too large to be represented as a JavaScript number, you can convert it to a string using the .toString() method instead of .toNumber().

Icon LinkFor u8, u16, and u32

const originalNumber = 20;
 
const { waitForResult } = await contract.functions.echo_u8(originalNumber).call();
const { value } = await waitForResult();
 
expect(value).toEqual(originalNumber);

Icon LinkUsing a BigNum from ethers with fuels

import { toBigInt } from 'ethers';
import { bn } from 'fuels';
 
const originalNumber = 20;
 
const ethersBigNum = toBigInt(originalNumber);
 
const fuelsBigNum = bn(ethersBigNum.toString());
 
expect(fuelsBigNum.toNumber()).toEqual(originalNumber);