본문으로 건너뛰기

토큰 정책

TokenPolicy는 token 소유자가 TreasuryCap을 사용해 생성할 수 있는 shared object이다. 공개적으로 사용 가능한 TokenPolicy가 있으면 허용된 action과 해당 조건을 온체인에서 discover할 수 있다. 이는 token holder를 위한 더 나은 사용자 경험을 제공하려는 Wallets 및 기타 서비스에 유용하다.

Create and share

token::new_policy 함수를 사용해 새로운 TokenPolicy를 생성한다. 이 함수는 TreasuryCap을 인자로 받고 TokenPolicy object와 managing capability를 반환한다.

// module: sui::token
public fun new_policy<T>(
treasury_cap: &TreasuryCap<T>,
ctx: &mut TxContext
): (TokenPolicy<TokenType>, TokenPolicyCap<TokenType>);

token::share_policy 함수를 사용해 TokenPolicy object를 공유해야 한다.

Allow and disallow

어떤 조건도 없이 action을 허용하려면 token::allow 함수를 사용한다. 이 함수는 TokenPolicyTokenPolicyCap을 인자로 받는다. 허용된 경우 token::confirm_request 함수를 사용해 TokenPolicy에서 action을 confirm할 수 있다(참고: ActionRequest).

// module sui::token
public fun allow<T>(
policy: &mut TokenPolicy<T>,
policy_cap: &TokenPolicyCap<T>,
action: String,
ctx: &mut TxContext
);

마찬가지로 token::disallow 함수를 사용해 action을 완전히 비활성화할 수 있으며, 이는 token::allow와 동일한 인자를 받는다.

Adding rules

TokenPolicy는 각 action에 대해 custom 조건을 지정할 수 있다. 이러한 조건을 rules라고 하며, 일반적으로 별도의 Move module로 구현된다. rule의 식별자는 해당 type이다. 자세한 내용은 규칙를 참고한다.

TokenPolicy의 의사 코드 구조는 다음과 같다. 각 action에는 여러 rules를 연결할 수 있다.

TokenPolicy
rules:
- action: "transfer"
rules:
- 0x0...::denylist::Denylist
- action: "to_coin"
rules:
- 0x0...::limiter::Limiter
- 0x0...::allowlist::Allowlist
...

action에 rule을 추가하려면 token::add_rule_for_action 함수를 사용한다. 이 함수는 TokenPolicyTokenPolicyCap을 인자로 받는다. rule은 해당 type으로 지정된다(예: 0x0...::denylist::Denylist).

// module: sui::token
public fun add_rule_for_action<T, Rule: drop>(
policy: &mut TokenPolicy<T>,
policy_cap: &TokenPolicyCap<T>,
action: String,
ctx: &mut TxContext
);

역연산인 token::remove_rule_for_action의 signature는 token::add_rule_for_action과 대칭이다.

Consume spent balance

token::flush 함수를 사용해 TokenPolicy에서 spent balance를 consume할 수 있다. 이 함수에는 TreasuryCap이 필요하다.

// module sui::token
public fun flush<T>(
policy: &mut TokenPolicy<T>,
treasury_cap: &mut TreasuryCap<T>,
ctx: &mut TxContext
);

Cheat sheet: TokenPolicy API

FunctionNote
new_policyTreasuryCap을 사용해 새로운 TokenPolicy를 생성한다
allowTokenPolicy에서 action을 허용한다
disallowTokenPolicy에서 action을 비활성화한다
add_rule_for_actionTokenPolicy에서 action에 rule을 추가한다
remove_rule_for_actionTokenPolicy에서 action의 rule을 제거한다
confirm_requestTokenPolicyActionRequest를 confirm한다
confirm_request_mutconfirm_request와 유사하지만 spend action에서만 동작한다
flushTokenPolicy에서 spent balance를 flush한다(참고: 지출)