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.

To use enums in Scrypto, you have to make them derive TypeId, Encode, Decode and Describe from the sbor package:

use sbor::*;

#[derive(TypeId, Encode, Decode, Describe)]
pub enum Color {
    White,
    Blue,
    Black,
    Red,
    Green,
}

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

PackageAddress

Represents the system-wide address of a Package.

ComponentAddress

Represents the system-wide address of a Component.

LazyMap

Represents a lookup table and the data it contains. It uses key-value pairs to store and retrieve data.

Type Description

Hash

Represents a 32-byte hash digest. Currently, the only supported hash algorithm is SHA256.

EcdsaPublicKey

Represents an ECDSA public key. Currently, the only supported curve is secp256k1.

EcdsaSignature

Represents an ECDSA signature. Currently, the only supported curve is secp256k1.

Type Description

Decimal

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

Expect further math types in upcoming versions that will address safe math, and higher calculation precision.

Type Description

Bucket

Represents a bucket of resources. Resources in Scrypto can only be moved using Buckets.

Proof

Represents a proof of ownership of a resource.

Vault

Represents a vault of resources. Resources in Scrypto can only be stored using Vaults.

NonFungibleId

Represents an Id of an Non-Fungible Resource.

NonFunibleAddress

Represents a system-wide address of a Non-Fungible Resource.

ResourceAddress

Represents a system-wide address of a Resource.

Scrypto Types Documentation

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