Linear Vesting Airdrop
Sui Tears💧 Airdrop modules are "pulled" based. The modules store the root of a Merkle tree that consists of the address of the user and the airdrop amount. Users are required to submit a Merkle proof to claim their airdrops. The leafs are constructed by hashing (sha3256) the sender's address with the amount. This module returns the airdrop inside a linear vesting airdrop wallet.
Please check here on how to construct the Merkle Tree.
Structs
Airdrop
struct Airdrop<phantom T> has key, store { 
    id: UID,
    balance: Balance<T>,
    root: vector<u8>,
    start: u64, 
    duration: u64,
    map: Bitmap
}- balance - Coins to airdrop 
- root - The root of the Merkle tree 
- start - The timestamp in which the vesting schedule starts. 
- duration - The duration of the vesting schedule. 
- map - Bitmap keeps track of airdrop claims. 
Interface
new
Creates a linear vested airdrop.
public fun new<T>(airdrop_coin: Coin<T>, root: vector<u8>, start: u64, duration: u64, c: &Clock, ctx: &mut TxContext): Airdrop<T>- @param airdrop_coin: The coin that will be distributed in the airdrop. 
- @param root: The Merkle tree root that keeps track of all the airdrops. 
- @param start: The start timestamp of the vesting schedule. 
- @param duration: The duration of the vesting schedule. 
- @param c: The - sui::clock::Clockshared object.
- @return Airdrop<T> 
Aborts
- root is empty. 
- start time of the airdrop is in the past. 
balance
Returns the current amount of airdrop coins in the Airdrop object.
public fun balance<T>(self: &Airdrop<T>): u64- @param: self The shared Airdrop object 
- @return u64 
root
Returns the root of the Merkle tree for the airdrop.
public fun root<T>(self: &Airdrop<T>): vector<u8>- @param: self The shared Airdrop object. 
- @return vector<u8>. 
start
Returns the start timestamp of the airdrop. Users can claim after this date.
public fun start<T>(self: &Airdrop<T>): u64- @param: self The shared Airdrop object. 
- @return u64. 
duration
Returns the duration of the vesting schedule.
public fun duration<T>(self: &Airdrop<T>): u64- @param: self The shared Airdrop object. 
- @return u64. 
borrow_map
Returns an immutable reference of the Bitmap. It keeps track of the claimed airdrops.
public fun borrow_map<T>(self: &Airdrop<T>): &Bitmap- @param: self The shared Airdrop object. 
- @return &Bitmap. 
has_account_claimed
Checks if a user has already claimed his airdrop.
public fun has_account_claimed<T>(
    self: &Airdrop<T>, 
    proof: vector<vector<u8>>, 
    amount: u64, 
    user: address
  ): bool- @param self: The shared Airdrop object. 
- @param proof: The proof that the sender can redeem the - amountfrom the airdrop.
- @param amount: Number of coins the sender can redeem. 
- @param address: A user address. 
- @return bool. True if he has claimed the airdrop already. 
Aborts
- If the - proofis not valid.
get_airdrop
Allows a user to claim his airdrop by proving that his address and amount are in the Merkle tree.
  public fun get_airdrop<T>(
    self: &mut Airdrop<T>,
    proof: vector<vector<u8>>,  
    clock_object: &Clock,
    amount: u64, 
    ctx: &mut TxContext
  ): Wallet<T>- @param self: The shared Airdrop object. 
- @param proof: The proof that the sender can redeem the - amountfrom the airdrop.
- @param c: The - sui::clock::Clockshared object.
- @param amount: Number of coins the sender can redeem. 
- @return Wallet. The airdrop Coin locked in a linear vested {Wallet}. 
Aborts
- If the - proofis not valid.
- The user already claimed it 
destroy_zero
Destroys an empty Airdrop.
public fun destroy_zero<T>(self: Airdrop<T>)- @param self: The shared {Airdrop} object. 
Aborts
- The - selfhas left over coins.
Last updated
Was this helpful?
