Comment on page
Merkle-Airdrop
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 base cw20-merkel-airdrop contract. If you do not know what is a Merkle-airdrop and how it is different from a normal airdrop, please refer to the following article.
Ado_type: merkle-airdrop
Rust
JSON
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 | Contract address of the kernel contract to be used for AMP messaging. Kernel contract address can be found in our deployed contracts. |
owner | Option<String> | Optional address to specify as the owner of the ADO being created. Defaults to the sender if not specified. |
Represents an asset info instance that may contain unverified data; to be used in messages.
pub type AssetInfoUnchecked = AssetInfoBase<String>;
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),
}
Sets the provided Merkle-root that contains the whitelisted addresses that can claim tokens from the airdrop.
Only the owner can execute
RegisterMerkleRoot
.Rust
JSON
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. |
Claims the funds assigned to the address executing the claim.
Only addresses found in the Merkle-Root can claim tokens.
Rust
JSON
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> | 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 this. |
Burn the remaining tokens (unclaimed) after expire time for the specified
stage
.Only the owner can execute
Burn
.Rust
JSON
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. |
Rust
JSON
pub enum QueryMsg {
#[returns(ConfigResponse)]
Config {}
}
{
"config":{}
}
Rust
JSON
pub struct ConfigResponse {
pub asset_info: AssetInfo,
}
1
{
2
"asset_info":{
3
"cw20":"andr1..."
4
}
5
}
Name | Type | Description |
---|---|---|
asset_info | AssetInfo | The type of Asset. |
Represents an asset info instance containing only verified data which is saved in the contract storage.
pub type AssetInfo = AssetInfoBase<Addr>
Queries the Merkle-Root for the specified
stage
.Rust
JSON
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. |
Rust
JSON
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. |
Queries the last stage.
Rust
JSON
pub enum QueryMsg {
#[returns(LatestStageResponse)]
LatestStage {}
}
{
"latest_stage":{}
}
Rust
JSON
pub struct LatestStageResponse {
pub latest_stage: u8,
}
{
"latest_stage": 4
}
Checks if the specified
address
has claimed its Rust
JSON
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. |
Rust
JSON
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. |
Rust
JSON
pub enum QueryMsg {
#[returns(TotalClaimedResponse)]
TotalClaimed {
stage: u8
}
}
{
"total_claimed":{
"stage": 2
}
}
Name | Type | Description |
---|---|---|
stage | u8 | The stage to check the amount claimed. |
Rust
JSON
pub struct TotalClaimedResponse {
pub total_claimed: Uint128,
}
{
"total_claimed":"10000"
}
Name | Type | Description |
---|---|---|
total_claimed | Uint128 | The stage to check the amount claimed. |