The Signed Integers library provides a library to use signed numbers in Sway. It has 6 distinct types: I8
, I16
, I32
, I64
, I128
, I256
. These types are stack allocated.
These types are stored as unsigned integers, therefore either u64
or a number of them. Therefore the size can be known at compile time and the length is static.
For implementation details on the Signed Integers Library please see the Sway Libs Docs .
In order to use the Signed Integer Number Library, Sway Libs must be added to the Forc.toml
file and then imported into your Sway project. To add Sway Libs as a dependency to the Forc.toml
file in your project please see the Getting Started .
To import the Signed Integer Number Library to your Sway Smart Contract, add the following to your Sway file:
use sway_libs::signed_integers::*;
In order to use any of the Signed Integer types, import them into your Sway project like so:
use sway_libs::signed_integers::i8::I8;
Once imported, a Signed Integer
type can be instantiated defining a new variable and calling the new
function.
let mut i8_value = I8::new();
Basic arithmetic operations are working as usual.
fn add_signed_int(val1: I8, val2: I8) {
let result: I8 = val1 + val2;
}
fn subtract_signed_int(val1: I8, val2: I8) {
let result: I8 = val1 - val2;
}
fn multiply_signed_int(val1: I8, val2: I8) {
let result: I8 = val1 * val2;
}
fn divide_signed_int(val1: I8, val2: I8) {
let result: I8 = val1 / val2;
}
The current implementation of U128
will compile large bytecode sizes when performing mathematical computations. As a result, I128
and I256
inherit the same issue and could cause high transaction costs. This should be resolved with future optimizations of the Sway compiler.