Linear Clawback Vesting Wallet
Creates a Wallet that allows the holder to claim coins linearly. The holder of the OwnerCap
can reclaim any locked coins back.
Structs
Wallet
struct Wallet<phantom T> has key, store {
id: UID,
balance: Balance<T>,
start: u64,
released: u64,
duration: u64,
clawbacked: u64
}
balance - Amount of tokens to give to the holder of the wallet.
start - The holder can start claiming tokens after this date.
released - Total amount of `Coin<T>` released so far.
duration - The duration of the vesting.
clawbacked - The amount of tokens recalled.
Interface
new
It creates a new Wallet and two capabilities for the recipient and the clawback owner.
public fun new<T>(
token: Coin<T>,
c: &Clock,
start: u64,
duration: u64,
ctx: &mut TxContext
): (OwnerCap<ClawBackWitness>, OwnerCap<RecipientWitness>, Wallet<T>)
@param token: A
sui::coin::Coin<T>
.@param c: The shared object
sui::clock::Clock
@param start: Dictate when the vesting schedule starts.
@param duration: Dictate when the vesting schedule starts.
@return OwnerCap<ClawBackWitness>: The holder of this capability can claw back the coins.
@return OwnerCap<RecipientWitness>: The holder of this capability can claim tokens according to the linear schedule.
@return Wallet.
Aborts
start
is in the past.
share
It shares the Wallet with the network.
public fun share<T>(self: Wallet<T>)
@param self: A Wallet.
balance
Returns the current amount of tokens in the self
.
public fun balance<T>(self: &Wallet<T>): u64
@param self: A Wallet.
@return u64.
start
Returns the vesting schedule start time.
public fun start<T>(self: &Wallet<T>): u64
@param self: A Wallet.
@return u64.
released
Returns the current amount of total released tokens from the self
.
public fun released<T>(self: &Wallet<T>): u64
@param self: A Wallet.
@return u64.
duration
Returns the duration of the vesting schedule.
public fun duration<T>(self: &Wallet<T>): u64
@param self: A Wallet.
@return u64.
clawbacked
Returns the number of tokens that were claw-backed by the holder of OwnerCap from the self
.
public fun clawbacked<T>(self: &Wallet<T>): u64
@param self: A Wallet.
@return u64.
vesting_status
Returns the current amount of coins available to the caller based on the linear schedule.
public fun vesting_status<T>(self: &Wallet<T>, c: &Clock): u64
@param self: A Wallet.
@param c: The
sui::clock::Clock
shared object.@return u64. A portion of the amount that can be claimed by the user.
claim
Releases the current amount of coins available to the caller based on the linear schedule.
public fun claim<T>(self: &mut Wallet<T>, cap: &OwnerCap<RecipientWitness>, c: &Clock, ctx: &mut TxContext): Coin<T>
@param self: A Wallet.
@param cap: The recipient capability that owns the
self
.@param c: The
sui::clock::Clock
shared object.@return Coin.
Aborts
cap
does not own theself
.
clawback
Returns all unreleased coins to the cap
holder.
public fun clawback<T>(self: &mut Wallet<T>, cap: OwnerCap<ClawBackWitness>, c: &Clock, ctx: &mut TxContext): Coin<T>
@param self: A Wallet.
@param cap: The clawback capability that owns the
self
.@param c: The
sui::clock::Clock
shared object.@return Coin.
Aborts
cap
does not own theself
.
destroy_zero
Destroys a Wallet with no balance.
public fun destroy_zero<T>(self: Wallet<T>)
@param self: A Wallet.
Last updated
Was this helpful?