Andromeda
ADO LibraryBuild AppsDevelop ADOsCLIWeb Application Docs
Andromeda
Andromeda
  • Platform and Framework
    • Introduction to AndromedaOS
    • ADO Classes
    • Andromeda Messaging Protocol
      • Kernel
      • ADO Database
      • Economics Engine
      • Virtual File System
    • ADO Base
      • AndromedaMsg
      • AndromedaQuery
    • Common Types
    • Deployed Contracts
    • ADO Versions
  • Andromeda Digital Objects
    • Introduction to ADOs
    • Address List
    • Auction
    • App
    • Curve
    • CW20
    • CW20 Staking
    • CW721
    • CW20 Exchange
    • Fixed Amount Splitter
    • Graph
    • Lockdrop
    • Marketplace
    • Merkle-Airdrop
    • Point
    • Primitive
    • Rates
    • Splitter
    • Timelock
    • Validator Staking
    • Vesting
  • Andromeda Apps
    • Introduction to Apps
    • Auctioning App
    • Cw20 Staking App
    • Marketplace App
  • Developing an ADO
    • Getting Started
      • Instantiation
      • Execution
      • Queries
      • Testing
    • Error Handling and Migrate Function
    • CW3 EXAMPLE
      • InstantiateMsg
      • ExecuteMsg
      • QueryMsg
      • Testing
    • 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
  • Andromeda Changelog
    • Newest Releases
  • 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
  • Receive
  • DepositNative
  • WithdrawNative
  • EnableClaims
  • ClaimRewards
  • Base Executes
  • QueryMsg
  • Config
  • State
  • UserInfo
  • WithdrawalPercentAllowed
  • Base Queries

Was this helpful?

  1. Andromeda Digital Objects

Lockdrop

PreviousGraphNextMarketplace

Last updated 3 months ago

Was this helpful?

Introduction

This ADO is another part of the toolkit of allowing a user to setup their own . The lockdrop ADO allows users to deposit a native token in exchange for a given CW20 token.

There are two phases:

  • The first phase is the deposit phase in which users can deposit a native denom. They can also freely withdraw in this time.

  • The second phase is the withdrawal phase, in which for the first half, users can withdraw up to half of their deposit, and in the second half, the amount they can withdraw decreases linearly from 50% to 0%. Users can only withdraw once during the withdrawal phase.

After the deposit phase is over, each user gets the token in proportion to how much of the native denom they put in (claims need to be enabled first.)

Ado_type: lockdrop

Version: 2.1.0

InstantiateMsg

Withdrawal window should be greater than 0.

Deposit window should be greater than 0.

Withdrawal window should be less than deposit window.

pub struct InstantiateMsg {
    pub init_timestamp: MillisecondsExpiration,
    pub deposit_window: MillisecondsDuration,
    pub withdrawal_window: MillisecondsDuration,
    pub incentive_token: AndrAddr,
    pub native_denom: String,
    pub kernel_address: String,
    pub owner: Option<String>
}
{
"init_timestamp":164987751339483294,
"deposit_window":600000,
"withdrawal_window":400000,
"incentive_token":"andr1...",
"native_denom":"uandr",
"kernel_address":"andr1..."
}
Name
Type
Description

init_timestamp

Timestamp in milliseconds till when deposits can be made.

deposit_window

Number of milliseconds for which lockup deposits will be accepted.

withdrawal_window

Number of milliseconds for which lockup withdrawals will be allowed. Cannot exceed the deposit_window.

incentive_token

The CW20 token being given as incentive.

native_denom

String

The native token being deposited.

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.

ExecuteMsg

Receive

Receives CW20 tokens that will be used as incentive for the lockdrop.

The sender needs to be the CW20 contract of the incentive token (Same as the one specified in instantiation).

Needs to be sent before the withdrawal period.

pub enum ExecuteMsg {
    Receive(Cw20ReceiveMsg)
    }

Cw20ReceiveMsg

pub struct Cw20ReceiveMsg {
    pub sender: String,
    pub amount: Uint128,
    pub msg: Binary,
}

The msg in Cw20ReceiveMsg should be a Cw20HookMsg of type IncreaseIncentives

IncreaseIstncentives

pub enum Cw20HookMsg {
    IncreaseIncentives {},
}
{
"increase_incentives":{}
}

DepositNative

Deposit native fund in the contract in exchange for receiving a proportion of the Cw-20 incentive tokens.

Deposit window should be open.

A single type of native coins should be attached with the same denom specified in the instantiation by native_denom.

pub enum ExecuteMsg {
    DepositNative {},
 }    
{
"deposit_native":{}
}

WithdrawNative

Withdraw native funds from the lockup position.

Withdrawal window needs to be open.

The amount should not exceed the maximum withdrawal allowed.

pub enum ExecuteMsg {
  WithdrawNative {
        amount: Option<Uint128>,
    }
}
{
"withdraw_native": {
    "amount":"1000"
    }
}
Name
Type
Description

amount

Option<Uint128>

The amount of native funds to withdraw.

EnableClaims

EnableClaims can be called by anyone after the deposit and withdrawing phases have ended.

pub enum ExecuteMsg {
    EnableClaims {},
    }
{
"enable_claims":{}
}

ClaimRewards

Claims the CW20 incentive tokens from the lockdrop.

pub enum ExecuteMsg {
    ClaimRewards {}
    }
{
"claim_rewards":{}
}

Base Executes

QueryMsg

Config

Queries the config of the contract.

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

ConfigResponse

pub struct ConfigResponse {
    pub init_timestamp: MillisecondsExpiration,
    pub deposit_window: MillisecondsDuration,
    pub withdrawal_window: MillisecondsDuration,
    pub lockdrop_incentives: Uint128,
    pub incentive_token: AndrAddr,
    pub native_denom: String,
}
  • lockdrop_incentives is the total amount of lockdrop incentive tokens (Cw20 tokens) to be distributed among the users.

State

Queries the current state of the contract.

pub enum QueryMsg {
    #[returns(StateResponse)]
    State {},
}
{
"state":{}
}

StateResponse

 pub struct StateResponse {
        pub total_native_locked: Uint128,
        pub are_claims_allowed: bool,
    }
{
"total_native_locked":"100000",
"are_claims_allowed": false
}
Name
Type
Description

total_native_locked

Uint128

Total native coins deposited at the end of Lockdrop window. This value remains unchanged post the lockdrop window.

are_claims_allowed

bool

Boolean value indicating if the user can withdraw their token rewards or not.

UserInfo

Gets information for the user with the address specified.

pub enum QueryMsg {
     #[returns(UserInfoResponse)]
     UserInfo {
        address: String,
    }
}
{
"user_info": {
    "address":"andr1..."
    }
}
Name
Type
Description

address

String

The user address to get the info for.

UserInfoResponse

pub struct UserInfoResponse {
    pub total_native_locked: Uint128,
    pub total_incentives: Uint128,
    pub is_lockdrop_claimed: bool,
    pub withdrawal_flag: bool,
}
{
"total_native_locked":"1000",
"total_incentives":"50000",
"is_lockdrop_claimed": true,
"withrawal_flag": true
}
Name
Type
Description

total_native_locked

Uint128

Total UST amount deposited by the user across all his lockup positions.

total_incentives

Uint128

The total amount of incentive tokens for the user.

is_lockdrop_claimed

bool

Whether the lockdrop tokens have been claimed by the user or not.

wtihdrawal_flag

bool

Whether or not the user has withdrawn during the withdrawal phase.

WithdrawalPercentAllowed

Returns the max withdrawable percent for a position.

The provided timestamp cannot be in the past.

pub enum QueryMsg {
      #[returns(Decimal)]
      WithdrawalPercentAllowed {
            timestamp: Option<Milliseconds>,
    }
}
{
"withdrawal_percent_allowed":{
    "timestamp": 1705341474
    }
}
Name
Type
Description

timestamp

Option<u64>

The timestamp in milliseconds to check the maximum withdrawal allowed for. If not specified, the current timestamp will be used.

Returns a number of type Decimal representing the percentage allowed to withdraw.

Base Queries

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

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

The rest of the field definitions are the same as the one in the .

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

CW20 token
ADO Base
ADO Base
InstantiateMsg
kernel contract
AMP
deployed contracts
MillisecondsExpiration
Milliseconds
Duration
Milliseconds
Duration
AndrAddr