본문으로 건너뛰기

자산 토큰화

Asset tokenization은 real estate, art, commodities, stocks 같은 real-world 자산을 blockchain 위의 digital 토큰으로 표현하는 process이다. 각 토큰은 underlying 자산의 ownership 또는 fraction을 나타내며, onchain에서 기록되고 관리된다.

Fractionalization 개요

Asset tokenization의 핵심 개념은 fractionalization이다. 즉 high-value 자산을 smaller units로 나누고, 각 단위가 전체의 share를 나타내게 한다. 이를 통해 investors는 전체 자산이 아니라 fraction을 보유할 수 있으므로 자산 접근성이 높아진다. 일반적인 사용 사례에는 하나의 property를 thousands of tradeable shares로 나눌 수 있는 real estate, 또는 여러 investors가 하나의 high-value item에 stake를 보유할 수 있는 fine art와 collectibles가 있다.

Sui에서는 tokenized_asset 모듈이 이를 처리한다. 이 모듈은 coin library와 유사하게 동작한다. 새로운 One-Time Witness (OTW) 타입을 받으면 fractional 자산의 unique onchain representation을 만든다. 각 fraction은 자산의 total supply에 count되는 잔액을 가진 TokenizedAsset<T> 객체이다.

이 pattern은 ERC1155 multi-토큰 standard와 유사하지만 추가 기능이 있다. Sui에서 구현하려는 Solidity 기반 사용 사례의 starting point로 적합하다.

Asset creation 개요

각 자산은 fixed total supply로 fractionalized된다. Asset을 만들 때 name, description, symbol, icon URL을 포함한 메타데이터를 정의한다. 이 메타데이터는 모든 fractions에 공유되며 AssetMetadata<T> 객체에 저장된다.

각 fraction은 TokenizedAsset<T>이며, 모든 fractions를 합친 잔액이 total supply가 된다.

Non-fungible 토큰 vs fungible 토큰

tokenized_asset 모듈은 non-fungible 토큰(NFT) fractions와 fungible 토큰(FT) fractions를 모두 지원한다. 모든 fraction은 자산 creation time에 정의된 base metadata(name, description, symbol, icon URL)를 공유한다. NFT와 FT의 구분은 민트 time에 per-토큰 metadata가 함께 제공되는지에 따라 결정된다:

  • NFT: Minting 시 per-토큰 key-value metadata가 제공되면 토큰은 unique하다. Balance는 1로 고정되며 자산의 single distinct 인스턴스를 나타낸다.
  • FT: Per-토큰 metadata가 제공되지 않으면 토큰은 fungible하다. Balance는 1을 초과할 수 있으며 여러 identical instances가 존재할 수 있다.

FTs는 잔액이 1보다 클 때 smaller units로 split하거나 join할 수 있다. Splitting을 사용하면 holder가 전체를 sell하지 않고 포지션 일부만 전송할 수 있다(예: 500 shares 중 100 shares 판매). Joining은 같은 자산의 여러 FT 객체를 하나로 consolidate하여 holder가 관리하는 객체 수를 줄이고 시간이 지나며 gas costs를 낮춘다. NFTs는 잔액이 1로 고정되므로 split하거나 join할 수 없다.

NFT든 FT든 모든 fractions는 자산의 total supply에 count된다.

Burnability 설정

Asset을 만들 때 fractions가 burnable한지 정의한다. Burning은 circulation에서 fraction을 permanently remove한다.

Move 패키지

Asset tokenization implementation은 asset_tokenizationtemplate Move 패키지로 구성된다.

정보

이 문서에서 설명하는 패키지는 토큰화된 자산이 정의된 transfer 정책 안에서 동작하도록 Kiosk standard를 사용한다. 이는 로열티와 commissions 같은 규칙이 있는 marketable 토큰화된 자산을 지원한다.

Kiosk가 요구 사항가 아니라면 unlock 모듈과 proxy transfer 정책-related methods를 제외할 수 있다.

asset_tokenization 패키지

asset_tokenization 패키지에는 tokenized_asset, proxy, unlock 세 모듈가 포함된다.

tokenized_asset

tokenized_asset 모듈은 implementation의 core이다. Asset creation, 민트, splitting, joining, 소각을 처리한다. Sui의 coin library와 유사하게 동작한다:

  • One-Time Witness 타입을 사용해 새 자산 representation을 만들고 AssetCap<T>AssetMetadata<T>를 반환한다
  • Metadata 제공 여부에 따라 TokenizedAsset<T> fractions를 NFTs 또는 FTs로 민트한다
  • FT fractions를 split하고 join한다
  • Asset이 burnable로 구성된 경우 fractions를 burn한다

전체 struct와 함수 details는 tokenized_asset source를 참조한다.

proxy

proxy 모듈은 자산 type 소유자를 대신해 publisher-related operations를 관리한다. Tokenized 자산에 대한 transfer 정책 creation과 관리에 대한 access를 제어한다:

  • One-Time Witness를 사용해 Publisher 객체를 claim하고 shared Registry에 저장한다
  • TransferPolicy를 사용해 주어진 TransferPolicyCap type에 대한 TokenizedAsset<T>setup_tp을 만든다
  • Display를 사용해 TokenizedAsset<T> type에 대한 empty new_display를 만든다
  • ProtectedTP<T> 모듈에서 사용하는 shared unlock 객체에 empty transfer 정책을 저장한다

전체 struct와 함수 details는 proxy source를 참조한다.

unlock

unlock 모듈은 kiosk에 lock된 토큰화된 자산을 standard transfer 정책 규칙을 따르지 않고 burn 및 join할 수 있게 한다. 이를 통해 자산 type creators는 controlled way로 kiosk 자산에 대해 이러한 operations를 지원할 수 있다.

주요 responsibility:

  • Joining을 위해 kiosk-locked 자산을 unlock하고, operation이 완료되기 전에 잔액이 올바르게 merged되었는지 enforce하는 JoinPromise를 반환한다
  • Burning을 위해 kiosk-locked 자산을 unlock하고, circulating supply가 reduced되었는지 enforce하는 BurnPromise를 반환한다

전체 struct와 함수 details는 unlock source를 참조한다.

template 패키지

template 패키지는 Rust WebAssembly(WASM)를 사용해 browser를 통해 자산 creation을 가능하게 하는 example 사용 사례 패키지이다. 새 자산 타입을 토큰화된 자산으로 표현해야 할 때 starting point 역할을 한다.

이 패키지에는 두 모듈가 포함된다:

  • template: tokenized_asset::new_asset을 호출해 새 자산을 정의한다. Name, symbol, description, total supply, burnability 같은 필드는 WASM library가 publish time에 수정할 수 있는 constants로 정의된다.
  • genesis: Sender가 publisher를 claim할 수 있도록 One-Time Witness를 포함하는 minimal 모듈이다.

WASM bytecode manipulation과 deploy 방법에 대한 자세한 내용은 Deploy a Tokenized Asset을 참조한다.