Andromeda
ADO LibraryBuild AppsDevelop ADOsCLIWeb Application Docs
Andromeda Archives
Andromeda Archives
  • Platform and Framework
    • Introduction to AndromedaOS
    • ADO Classes
    • Andromeda Messaging Protocol
      • Kernel
      • ADO Database
      • Economics Engine
      • Virtual File System
    • ADO Base
      • AndromedaMsg V1.0.0
      • AndromedaQuery V1.0.0
    • Common Types
    • Deployed Contracts
  • Andromeda Digital Objects
    • Introduction to ADOs
    • Auction V1.0.0
    • App V1.0.1
    • Crowdfund V1.0.0
    • CW20 V1.0.0
    • CW20 Staking V1.0.0
    • CW721 V1.0.0
    • CW20 Exchange V1.0.0
    • Lockdrop V1.0.0
    • Marketplace V1.0.0
    • Merkle-Airdrop V1.0.0
    • Rate Limiting Withdrawals V1.0.0
    • Splitter V1.0.0
    • Timelock V1.0.0
  • Andromeda Apps
    • Introduction to Apps
    • Crowdfunding App
    • Auctioning App
    • Cw20 Staking App
    • Marketplace App
  • Developing an ADO
    • Getting Started
      • Instantiation
      • Execution
      • Queries
      • Testing
    • ADO Example
    • ADO Submissions
  • Andromeda CLI
    • Introduction
    • Help and Shortcuts
    • ADO
    • Bank
    • Chain
    • Env
    • Gql
    • Tx
    • OS
    • Wallet
    • Wasm
    • Clearing CLI Data
    • Clear and Exit
  • Chain
    • Running a Node
    • Staking and Rewards
  • Andromeda Dashboard
    • Tokenomics Dashboard
    • Dashboard API
  • Additional Resources
    • GitHub
    • Website
    • White Paper
Powered by GitBook

Additional Resources

  • Github
  • Website

Community

  • Discord
  • Telegram

Socials

  • Twitter
  • Medium
  • Youtube
On this page
  • Introduction
  • InstantiateMsg
  • ExecuteMsg
  • RegisterMerkleRoot
  • Claim
  • Burn
  • Base Executes
  • Query
  • Config
  • MerkleRoot
  • LatestStage
  • IsClaimed
  • TotalClaimed
  • Base Queries

Was this helpful?

  1. Andromeda Digital Objects

Merkle-Airdrop V1.0.0

PreviousMarketplace V1.0.0NextRate Limiting Withdrawals V1.0.0

Last updated 1 year ago

Was this helpful?

Introduction

The Merkle-Airdrop ADO is a smart contract that allows projects to launch airdrops using the Merkle-tree (hashing). Uses the same logic of the . If you do not know what is a merkle-airdrop and how it is different from a normal airdrop, please refer to the following .

Ado_type: merkle-airdrop

InstantiateMsg

pub struct InstantiateMsg {
    pub asset_info: AssetInfoUnchecked,
    pub kernel_address: String,
    pub owner: Option<String>
}
{
"asset_info":{
    "cw20":"andr1..."
     },
"kernel_address":"andr1...",
"owner":"andr1..."
} 
Name
Type
Description

asset_info

The assets to airdrop.

kernel_address

String

owner

Option<String>

Optional address to specify as the owner of the ADO being created. Defaults to the sender if not specified.

AssetInfoUnchecked

Represents an asset info instance that may contain unverified data; to be used in messages.

pub type AssetInfoUnchecked = AssetInfoBase<String>;

AssetInfoBase

Represents the type of an fungible asset. Each asset info instance can be one of two variants:

  • CW20 tokens: To create an asset info instance of this type, provide the contract address of the token.

  • Native SDK coins: To create an asset info instance of this type, provide the denomination ("uandr","uatom").

pub enum AssetInfoBase<T> {
    Cw20(T),
    Native(String),
}

ExecuteMsg

RegisterMerkleRoot

Sets the provided Merkle-root that contains the whitelisted addresses that can claim tokens from the airdrop.

Only the owner can execute RegisterMerkleRoot.

 pub enum ExecuteMsg {
 RegisterMerkleRoot {
        merkle_root: String,
        expiration: Option<Expiration>,
        total_amount: Option<Uint128>,
  }
 }
{
"register_merkle_root":{
"merkle_root":"876dd0a3ef4a2816ffd1c12ab649825a958b0f...",
"total_amount":"1000000"
  }
}
Name
Type
Description

merkle_root

String

A hex-encoded Merkle root.

expiration

An optional expiration for the root. Defaults to never if not specified.

total_amount

Option<Uint128>

An optional amount to specify the maximum number of tokens that can be claimed from the airdrop.

Claim

Claims the funds assigned to the address executing the claim.

Only addresses found in the Merkle-Root can claim tokens.

 pub enum ExecuteMsg{  
   Claim {
        stage: u8,
        amount: Uint128,
        proof: Vec<String>,
    }
 }
{
"claim":{
 "stage": 3,
 "amount":"10000",
 "proof":["876dd0a3ef4a28","..."]
}
Name
Type
Description

stage

u8

Stage is used to index which airdrop to claim from. There can be more than one airdrop and each is referenced by it's designated stage.

amount

Uint128

The amount of tokens to claim.

proof

Vec<String>

Burn

Burn the remaining tokens (unclaimed) after expire time for the specified stage.

Only the owner can execute Burn.

 pub enum ExecuteMsg{
   Burn {
        stage: u8,
    }
}
{
"burn":{
 "stage": 2
   }
 }
Name
Type
Description

stage

u8

The stage of the airdrop used to specify which airdrop to execute burn on.

Base Executes

Query

Config

pub enum QueryMsg {
 #[returns(ConfigResponse)]
 Config {}
 }
{
"config":{}
}

ConfigResponse

pub struct ConfigResponse {
    pub asset_info: AssetInfo,
}
{
"asset_info":{
 "cw20":"andr1..."
   }
 }
Name
Type
Description

asset_info

AssetInfo

The type of Asset.

AssetInfo

Represents an asset info instance containing only verified data which is saved in the contract storage.

pub type AssetInfo = AssetInfoBase<Addr>

MerkleRoot

Queries the Merkle-Root for the specified stage.

pub enum QueryMsg {
 #[returns(MerkleRootResponse)]
 MerkleRoot {
  stage: u8
  }
}
{
"merkle_root":{
   "stage": 2
   }
}

stage

u8

The stage which we want to get the Merkle root for.

MerkleRootResponse

pub struct MerkleRootResponse {
    pub stage: u8,
    pub merkle_root: String,
    pub expiration: Expiration,
    pub total_amount: Uint128,
}
{
"stage":2,
"merkle_root":"876dd0a3ef4a2816ffd1c12ab649825a958b0f",
"expiration": {
"at_height": 500
 },
 "total_amount":"1000000"
 }
Name
Type
Description

stage

u8

The stage that belongs to this root.

merkle_root

String

The Merkle-Root of this stage.

expiration

The expiration for the airdrop of this stage.

total_amount

Uint128

The total amount of funds to be airdropped belonging to this stage.

LatestStage

Queries the last stage.

pub enum QueryMsg {
  #[returns(LatestStageResponse)]
  LatestStage {}
  }
{
"latest_stage":{}
}

LastStageResponse

pub struct LatestStageResponse {
    pub latest_stage: u8,
}
{
"latest_stage": 4 
}

IsClaimed

Checks if the specified address has claimed its

pub enum QueryMsg {
    #[returns(IsClaimedResponse)]
    IsClaimed {
     stage: u8,
     address: String
      }
    }
{
"is_claimed": 2,
"address":"andr1..."
}
Name
Type
Description

stage

u8

The stage to check.

address

String

The address to check.

IsClaimedResponse

pub struct IsClaimedResponse {
    pub is_claimed: bool,
}
{
"is_claimed": false
}
Name
Type
Description

is_claimed

bool

Returns true if the funds have claimed and false otherwise.

TotalClaimed

pub enum QueryMsg {
  #[returns(TotalClaimedResponse)]
  TotalClaimed {
    stage: u8
    }
  }
{
"total_claimed":{
"stage": 2
  }
}
Name
Type
Description

stage

u8

The stage to check the amount claimed.

TotalClaimedResponse

pub struct TotalClaimedResponse {
    pub total_claimed: Uint128,
}
{
"total_claimed":"10000"
}
Name
Type
Description

total_claimed

Uint128

The stage to check the amount claimed.

Base Queries

Contract address of the to be used for messaging. Kernel contract address can be found in our .

Option<>

Hex-encoded Merkle proof that proves that the address claiming the tokens from the airdrop is found in the Merkle-Root. Needs to be calculated similar to .

The rest of the execute messages can be found in the section.

The rest of the query messages can be found in the section.

base cw20-merkel-airdrop contract
article
ADO Base
ADO Base
AssetInfoBase
kernel contract
AMP
deployed contracts
this
AssetInfoUnchecked
Expiration
Expiration