파생 객체
Sui 객체는 객체 생성 시 고유 ID를 할당받는다. 하지만 derived 객체는 기술적으로 할당된 ID를 가지지 않으며, 대신 부모 객체와 키의 매핑을 통해 생성된 클레임된(claimed) ID를 가진다. 온체인에 존재하는 부모 객체의 고유 ID는 개별 키에 매핑되어, derived 객체의 클레임된 ID가 deterministic하고 고유하도록 보장한다. 부모 ID와 키를 사용하여 온체인 및 오프체인에서 derived 객체 ID를 deterministic하게 계산할 수 있다. 이는 네트워크에 derived 객체를 실제로 생성 하기 전에 해당 객체의 ID를 계산할 수 있음을 의미한다.
부모 object는 shared, owned, party, 또는 wrapped일 수 있다. 부모 object는 게시된 패키지나 transaction을 통해 이미 온체인에 존재할 수 있지만, 필수는 아니다. 함수 안에서 새 부모 object를 만들고 제공된 키에서 즉시 derived object UID를 클레임할 수도 있다. 그러나 이 워크플로는 부모 UID를 미리 알 수 없기 때문에 오프체인 determinism을 지원하지 않는다.
키는 address나 객체 ID일 수 있지만, 고유한 값을 사용할 필요는 없다. 예를 들어, 숫자 유한 배열([1, 2, 3])을 가능한 키로 사용할 수 있다. 이렇게 하면 하나 이상의 derived 객체가 동일한 숫자를 키로 사용하여 ID를 클레임하려고 시도할 수 있다.
Derived 객체의 ID를 클레임하려면 부모 객체가 필요하지만, derived 객체는 해당 부모의 자식이 아니다. 이는 계층 관계가 없다는 점이 derived 객체를 트랜잭션의 입력으로 사용할 때 부모를 통한 순차 처리가 필요하지 않음을 의미하기 때문에 중요한 차이점이다. Derived 객체는 그 자체로 독립적인 엔티티이다; 부모는 오직 고유성을 보장하기 위해서만 존재한다. 이러한 관계는 부모-자식 관계에서는 불가능한 병렬화를 제공한다.