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

Address

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

H256

Represents a 32-byte hash digest.

Bid

Represents a bucket ID.

Rid

Represents a bucket reference ID.

Vid

Represents a vault ID.

Mid

Represents a lazy map ID.

Decimal

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

BigDecimal

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.