Interest Protocol
  • 👋Welcome to Interest Protocol
  • Overview
    • Sui💧
      • Contracts
        • Memez
        • Libs 📚
      • Suicoins
        • Swap
        • Dollar-Cost Averaging (DCA)
        • Airdrop
          • Suiplay Airdrop
        • Incinerator
        • Send
        • Merger
        • Suicoins Terminal
      • Memez.gg
        • Coins on Memez.GG
        • Memez.Fun
          • SDK
            • Pump API
            • Interfaces
          • Configuration
          • Migrators
          • Bonding Curve
          • Fees
      • IPX Coin Standard
    • Movement
      • Interest Protocol Decentralized Exchange (DEX)
        • Key Features
        • Core Innovations
      • sr-AMM
      • Token
        • Tokenomics
        • Utility
      • GTM
    • Audits
    • Security
    • Deprecated
      • Coin X Oracle 🔮
        • Pyth Network
        • Switchboard
      • Sui Tears 💧
        • Airdrop
          • Airdrop
          • Airdrop Utils
          • Linear Vesting Airdrop
        • Capabilities
          • Access Control
          • Owner
          • Quest
          • Timelock
        • Collections
          • Bitmap
          • Coin Decimals
        • DeFi
          • Oracle
          • Farm
          • Fund
          • Linear Vesting Wallet
          • Linear Clawback Vesting Wallet
          • Vesting
        • Governance
          • DAO
          • DAO Admin
          • DAO Treasury
        • Utils
          • ASCII
          • Comparator
          • Merkle Proof
          • Vectors
        • Math
          • Fixed Point 64
          • Fixed Point Roll
          • Fixed Point Wad
          • Int
          • Math64
          • Math128
          • Math256
      • CLAMM🐚
        • Hooks
      • Whitepapers
  • Glossary
Powered by GitBook
On this page
  • Structs
  • Airdrop
  • Interface
  • new
  • balance
  • root
  • start
  • duration
  • borrow_map
  • has_account_claimed
  • get_airdrop
  • destroy_zero

Was this helpful?

Export as PDF
  1. Overview
  2. Deprecated
  3. Sui Tears 💧
  4. Airdrop

Linear Vesting Airdrop

PreviousAirdrop UtilsNextCapabilities

Last updated 1 year ago

Was this helpful?

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 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::Clock shared 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 amount from 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 proof is 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 amount from the airdrop.

  • @param c: The sui::clock::Clock shared object.

  • @param amount: Number of coins the sender can redeem.

  • @return Wallet. The airdrop Coin locked in a linear vested {Wallet}.

Aborts

  • If the proof is 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 self has left over coins.

💧
here