본문으로 건너뛰기

토큰 정책

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

Create and share

TokenPolicy 함수를 사용해 새로운 token::new_policy를 생성한다. 이 함수는 TreasuryCap을 인자로 받고 TokenPolicy 객체와 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 객체를 공유해야 한다.

Allow and disallow

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

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

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

Adding 규칙

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

TokenPolicy의 의사 코드 구조는 다음과 같다. 각 액션에는 여러 규칙을 연결할 수 있다.

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

액션에 규칙을 추가하려면 token::add_rule_for_action 함수를 사용한다. 이 함수는 TokenPolicyTokenPolicyCap을 인자로 받는다. 규칙은 해당 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의 서명은 token::add_rule_for_action과 대칭이다.

Consume 지출된 잔액

지출된 잔액은 TokenPolicy에서 token::flush 함수를 사용해 소비할 수 있다. 이 함수에는 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_정책TokenPolicy을 사용해 새로운 TreasuryCap를 생성한다
allowTokenPolicy에서 액션을 허용한다
disallowTokenPolicy에서 액션을 비활성화한다
add_규칙_for_액션TokenPolicy에서 액션에 규칙을 추가한다
remove_규칙_for_액션TokenPolicy에서 액션의 규칙을 제거한다
확정_요청ActionRequestTokenPolicy를 확정한다
확정_요청_mutconfirm_request와 유사하지만 spend 액션에서만 동작한다
flushTokenPolicy에서 지출된 잔액을 flush한다(참고: 지출)