Data Types

Scrypto is based on Rust which is a statically typed language. All variables are associated with a type, either explicitly specified or inferred by the compiler.

In this section, we describe how different data types are supported.

Primitive Types

Most primitive types are supported. You’re free to use any of the following types:

  • i8, i16, i32, i64, i128, isize

  • u8, u16, u32, u64, u128, usize

  • String

Floating points are not supported; you may consider using Decimal data type instead.

isize and usize are compiled into i32 and u32 respectively.

Struct and Enums

Rust struct and enum are also supported, as long as the fields are of the supported types.

At this stage, no generics are supported for custom structs and enums.

Container Types

In addition to basic types, the following container types are also supported:

  • Option<T>: optional types

  • [T; N]: array types

  • (T, U, P, L, E): tuple types

  • Vec<T>: dynamic-length vector type

  • BTreeSet<T>, BTreeMap<K, V>: B-Tree set and map

  • HashSet<T>, HashMap<K, V>: Hash set and map

Scrypto Types

Scrypto also introduces a few domain-specific types to enable asset-oriented programming.

Type Description


Represents the address of an entity, e.g. component and resource.


Represents a 32-byte hash digest.


Represents a bucket ID.


Represents a bucket reference ID.


Represents a vault ID.


Represents a lazy map ID.


Represents a signed, bounded fixed-point decimal, where the precision is 10^-18.


Represents a signed, unbounded fixed-point decimal, where the precision is 10^-18.

You can find more technical documentation about Scrypto types (including the bounds of Decimal) in this doc.