토큰 발행으로 배우는 Move 자산 모델
First Token on Move
💡 이 장의 목표
- Move의 자산 모델(
resource
,object
)을 직접 체험하며 이해한다. Coin
,TreasuryCap
,mint
/burn
로직을 통해 토큰 발행 과정을 배운다.- Sui Extension 템플릿을 이용해 나만의 토큰을 만들고 관리한다.
1. 개요 — Move에서 자산이란?
Move에서는 코인, NFT, 권한 등 모든 자산이 리소스(resource) 로 표현됩니다. 리소스는 복사(copy) 하거나 삭제(drop) 할 수 없으며, 반드시 이동(move) 으로만 전달됩니다.
개념 | 설명 |
---|---|
resource | 복사 불가, 이동만 가능한 값 |
object | Sui에서 관리하는 리소스 인스턴스 |
Coin<T> | 토큰을 나타내는 오브젝트 |
TreasuryCap<T> | 발행 및 소각 권한(capability)을 가진 오브젝트 |
2. 템플릿 준비 — Managed Token
Sui Extension에는 미리 준비된 토큰 템플릿이 있습니다. “Sui Move Intro Course: Fungible Token (Managed)” 을 불러와 시작합니다.
📌 템플릿 불러오기
- VS Code → Explorer에서 폴더 우클릭 → “New Move Project”
- 템플릿 목록에서 Fungible Token (Managed) 선택
- Build / Test / Deploy 실행 후 배포 완료
배포 후
TreasuryCap<...::MANAGED>
오브젝트가 생성됩니다. 이 오브젝트는 토큰의 발행(mint) 과 소각(burn) 권한을 보유합니다.
3. 코드 분석 — 발행과 권한 구조
토큰 타입 정의
move
public struct MANAGED has drop {}
MANAGED
는 새 토큰의 타입을 정의하는 구조체로, drop
능력을 가지며 코인의 고유한 타입 식별자 역할을 합니다.
초기화 로직
move
fun init(witness: MANAGED, ctx: &mut TxContext) {
let (treasury_cap, metadata) = sui::coin::create_currency<MANAGED>(
witness, 2, b"MANAGED", b"MNG", b"", std::option::none(), ctx
);
sui::transfer::public_freeze_object(metadata);
sui::transfer::public_transfer(treasury_cap, sui::tx_context::sender(ctx));
}
create_currency
함수가 실제 토큰을 생성metadata
는 토큰 이름, 심볼, 설명을 담음treasury_cap
은 발행 및 소각 권한을 나타냄
4. 실습 — 발행(Mint)과 소각(Burn)
mint 함수
move
public fun mint(
treasury_cap: &mut TreasuryCap<MANAGED>,
amount: u64,
recipient: address,
ctx: &mut TxContext,
) {
treasury_cap.mint_and_transfer(amount, recipient, ctx)
}
TreasuryCap
을 가진 사람만 호출 가능- 지정된 주소(
recipient
)로 토큰 전송
burn 함수
move
public fun burn(treasury_cap: &mut TreasuryCap<MANAGED>, coin: Coin<MANAGED>) {
treasury_cap.burn(coin);
}
- 토큰을 소각할 때 사용
5. PTB Builder로 실행하기 🌟
PTB Builder 열기
moveCall 노드 추가
Package 로딩
함수 선택:
0x<패키지주소>::managed::mint
인자 설정:
object(treasuryCapId)
pure.u64(amount)
pure.address(recipient)
Run 클릭 후 결과(
Transaction Digest
) 확인- Sui Blockchain Explorer 또는 ptb.wal.app/viewer 에서 트랜잭션 확인 가능
💡 PTB Builder는 실행한 내용을 TypeScript 코드로 변환할 수 있습니다. Export 메뉴를 통해 TypeScript 코드로 변환하고, 프로젝트 내에서 바로 사용할 수 있습니다.
6. 결과 확인 및 응용
- 발행된
Coin<MANAGED>
는 Owner Objects Explorer에서 확인 가능 - 동일한 방식으로
burn
함수를 호출해 소각 가능 PTB Builder
나CLI
모두 동일한 트랜잭션 블록을 생성함
💡 이 장에서는 Move의 자산 모델을 실습을 통해 직접 경험했습니다. 👉 다음 장에서는 PTB를 더 복합적으로 구성하고 시각화하는 방법을 배웁니다.