# Technical Overall

<mark style="color:purple;">**System Model**</mark>

Sui operates in a sequence of epochs denoted by 𝑒 ∈ {0, . . .}. Each epoch is managed by a committee 𝐶𝑒 = (𝑉𝑒, 𝑆𝑒 (·)), where 𝑉𝑒 is a set of authorities with known public verification keys and network end-points. The function 𝑆𝑒 (𝑣) maps each authority 𝑣 ∈ 𝑉𝑒 to a number of units of delegated stake. We assume that 𝐶𝑒 for each epoch is signed by a quorum (see below) of authority stake at epoch 𝑒 −1. Within an epoch, some authorities are correct (they follow the protocol faithfully and are live), while others are Byzantine (they deviate arbitrarily from the protocol). The security assumption is that the set of honest authorities 𝐻𝑒 ⊆ 𝑉𝑒 is assigned a quorum of stake within the epoch.(and refer to any set of authorities with over two-thirds stake as a quorum).

There exists at least one live and correct party that acts as a relay for each certificate between honest authorities. This ensures liveness, and provides an eventual delivery property to the Byzantine broadcast. Each authority operates such a relay, either individually or through a collective dissemination protocol. External entities, including Sui light clients, replicas and services may also take on this role. The distinction between the passive authority core, and an internal or external active relay component that is less reliable or trusted, ensures a clear demarcation and minimization of the Trusted Computing Based on which Sui’s safety and liveness relies.

<mark style="color:purple;">**SUI SMART CONTRACT PROGRAMMING**</mark>

Sui smart contracts are written in the Move language. Move is safe and expressive, and its type system and data model naturally support the parallel agreement/execution strategies that make Sui scalable. Move is an open-source programming language for building smart contracts originally developed at Facebook for the Diem blockchain. The language is platform-agnostic, and in addition to being adopted by Sui, it has been gaining popularity on other platforms (e.g., 0L, StarCoin). In this section we will discuss the main features of the Move language and explain how it is used to create and manage assets on Sui. A more thorough explanation of Move’s features can be found in the Move Programming Language book and more Sui-specific Move content can be found in the Sui Developer Portal, and a more formal description of Move in the context of Sui.\
Sui’s global state includes a pool of programmable objects created and managed by Move packages that are collections of Move modules containing Move functions and types. Move packages themselves are also objects. Thus, Sui objects can be partitioned into two categories:

• Struct data values: Typed data governed by Move modules. Each object is a struct value with fields that can contain primitive types (e.g. integers, addresses), other objects, and non-object structs.

• Package code values: a set of related Move bytecode modules published as an atomic unit. Each module in a package can depend both on other modules in that package and on modules in previously published packages.

\
