[Sui Object] #1. Object Model
목차
Sui의 기본 저장 단위인 Object의 종류, Metadata, 참조 방식, 소유권 유형을 살펴봅니다. 이 글은 Sui Object 시리즈의 1번째 글입니다. Sui에서 Object는 네트워크의 기본 저장 단위입니다. 온체인의 모든 Resource, Asset, 데이터는 Object로 표현됩니다. 많은 블록체인은 계정(Account) 중심의 키-값 저장소(key-value store) 구조를 사용합니다. 반면 Sui는 고유한 ID로 식별되는 Object를 중심으로 스토리지를 구성합니다. 이 차이는 Sui의 병렬 트랜잭션 처리와 소유권 모델을 가능하게 하는 핵심 설계입니다. 모든 Sui Object는 아래의 구성 요소를 공통으로 포함합니다. Sui의 Object는 세 가지 타입으로 구분됩니다. Sui Object는 가장 기본적인 개념으로, 트랜잭션이 상호작용하는 모든 Resource, Asset, 데이터를 의미합니다. 온체인 상태를 구성하는 모든 것이 Sui Object입니다. Sui Move Object는 Move 언어로 정의된 데이터 Object입니다. Sui Move Object를 정의하려면 두 가지 조건을 만족해야 합니다. Sui Move Object는 정수, 주소 같은 primitive 타입뿐만 아니라 다른 Object나 non-object struct도 필드로 포함할 수 있습니다. 이렇게 만들어지는 struct는 온체인 상에 Sui Object로 저장될 수 있습니다. Sui Move Package는 다른 Object를 조작하는 스마트 컨트랙트입니다. 하나 이상의 Move 바이트코드 Module의 묶음으로 구성되며, Package의 온체인 ID와 Module 이름의 조합으로 각 Module을 고유하게 식별합니다. 한 번 배포된 Package Object는 불변(Immutable)이며 수정하거나 삭제할 수 없습니다. 단, 이전에 배포된 다른 Package Object에 의존하는 것은 허용됩니다. 모든 Sui Object는 공통적으로 아래 Metadata 필드를 포함합니다. Sui에서 Object를 가리키는 방법은 세 가지가 있습니다. 각각의 참조 방식은 정확도와 활용 목적이 다릅니다. ID 기반 참조는 가장 단순한 방식입니다. Object의 전역 고유 ID만을 사용해 Object를 식별합니다. ID는 Object가 생성된 이후 변하지 않으므로 안정적인 식별자 역할을 합니다. Object의 현재 상태를 조회할 때 주로 사용됩니다. Versioned ID는 Object Reference는 Sui Object는 각자 소유권 유형을 가집니다. Object의 소유권 유형은 Object Metadata의 Owner 필드 값으로 결정됩니다. 소유권 유형에 따라 어떤 트랜잭션이 해당 Object를 사용할 수 있는지가 달라집니다. Sui에서 트랜잭션은 Object를 입력으로 받아 읽거나 수정한 뒤, 결과 Object를 출력합니다. 이 입출력 관계를 이어나가면 트랜잭션과 Object가 방향성 비순환 그래프(DAG, Directed Acyclic Graph)를 형성합니다. 그래프의 노드는 트랜잭션이고, 엣지는 한 트랜잭션의 출력 Object가 다음 트랜잭션의 입력으로 연결되는 관계를 나타냅니다. 이 그래프의 시작점은 Genesis 트랜잭션입니다. Genesis 트랜잭션은 초기 Object들을 생성하며, 이후 모든 트랜잭션의 근원이 됩니다. 트랜잭션의 출력 Object 중 아직 소비되지 않은 것을 Live Object라고 합니다. Live Object는 미래 트랜잭션의 입력으로 사용될 수 있습니다. Address-owned Object와 Shared/Immutable Object 모두 Live Object가 될 수 있습니다. 전체 목차:
개요
Object 종류
key ability를 가져야 합니다id: UID이어야 합니다UID는 Sui 프레임워크가 제공하는 전역 고유 ID 타입입니다. Sui Move Object는 sui::object::new를 호출해 struct를 생성할 때 UID를 발급받습니다.public struct Sword has key {
id: UID,
damage: u64,
}Object Metadata
Object 참조 방식
(ID, Version) 쌍으로 Object의 특정 시점 상태를 나타냅니다. Object는 수정될 때마다 Version이 증가하므로, Versioned ID를 사용하면 현재 상태가 아닌 과거 특정 시점의 Object를 가리킬 수 있습니다.(ID, Version, Object Digest) 세 값의 조합입니다. Object Digest는 Object의 내용을 해시한 값으로, 해당 Version의 Object가 변조되지 않았음을 검증할 수 있습니다. 트랜잭션이 Object를 입력으로 받을 때는 반드시 Object Reference를 사용합니다. 이를 통해 트랜잭션이 의도한 정확한 Object를 참조하고 있음을 보장합니다.Object Ownership
Address-owned Object
Immutable Object
Party Object
sui::transfer::party_transfer 또는 sui::transfer::public_party_transfer 함수를 통해 전송된 Object입니다.Shared Object
sui::transfer::share_object를 호출해 공유 상태로 전환된 Object입니다.Wrapped Object
Transaction과 Object의 관계
References