Vesting

The Vesting ADO allows the vesting of tokens for one recipient which is fixed upon instantiation.

A new batch can be created using the CreateBatch message which will create a batch with the funds that are sent along with the message. This message contains parameters that define the lockup period and vesting parameters. All time-related parameters are done using seconds.

Ownership of the ADO should be transferred after creating the vesting batch to the user who is vesting. For example, if party A wants to vest tokens for user B, they would create a custom batch with the vesting properties specified like lockup duration, release unit ect... (These cannot be changed by anyone once created). Then after the batch/batches have been created, they would transfer ownership of the contract to user B who can claim the tokens when the time comes.

Ado_type: vesting

InstantiateMsg

pub struct InstantiateMsg {
    pub recipient: Recipient,
    pub denom: String,
    pub kernel_address: String,
    pub owner: Option<String>
}
NameTypeDescription

recipient

The recipient of all funds locked in this contract.

denom

String

The denom of the coin being vested.

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.

ExecuteMsg

CreateBatch

Creates a new batch with the funds sent along with the message.

Only available to the contract owner or an operator of the contract.

The attached funds should be a single native fund.

Denom of attached funds should be the same as the one specified upon instantiation.

Each batch has an Id which starts at 1 and increments by 1 for each new batch.

pub enum ExecuteMsg {
   CreateBatch {
        lockup_duration: Option<u64>,
        release_unit: u64,
        release_amount: WithdrawalType,
    }
  }
NameTypeDescription

lockup_duration

Option<Milliseconds>

A lockup period before vesting starts specified in milliseconds. Specifying None would mean no lock up period and funds start vesting right away.

release_unit

How often releases occur in seconds.

release_amount

Specifies how much is to be released after each release_unit. If it is a percentage, it would be the percentage of the original amount.

WithdrawalType

pub enum WithdrawalType {
    Amount(Uint128),
    Percentage(Decimal),
}

There are two main withdrawal types:

  • Amount: Withdraw a flat amount from the vault/strategy.

  • Percentage: Withdraw a percentage of funds found in the vault/strategy.

Claim

Claim the number of batches specified starting from the beginning. If not specified then the max amount will be claimed.

Only available to the contract owner.

pub enum ExecuteMsg {
    Claim {
        number_of_claims: Option<u64>,
        batch_id: u64,
    }
}
NameTypeDescription

number_of_claims

Option<u64>

The number of batches to claim. Defaults to the maximum amount if not specified.

batch_id

u64

The Id of the batch.

ClaimAll

Claims tokens from all batches using a paginated approach. If up_to_time is specified then it will only claim up to a specific time, otherwise it will claim to the most recent release.

Only available to the contract owner.

pub enum ExecuteMsg {
     ClaimAll {
        up_to_time: Option<u64>,
        limit: Option<u32>,
    },
 }
NameTypeDescription

up_to_time

Option<u64>

Optional time to claim up to. The minimum between the current time and the specified time is taken. Specified as a timestamp in seconds.

limit

Option<u32>

The number of batches to claim from. Defaults to 10 and can be set to a maximum of 30.

Base Executes

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

QueryMsg

Config

Queries the configuration of the contract.

pub enum QueryMsg {
     #[returns(Config)]
     Config {}
     }

ConfigResponse

Returns a config struct.

pub struct Config {
    pub recipient: Recipient,
    pub denom: String,
}
NameTypeDescription

recipient

The recipient of each batch.

denom

String

The denom of the coin being vested.

Batch

Queries batch information for the batch with the specified Id.

pub enum QueryMsg {
       #[returns(BatchResponse)]
       Batch {
        id: u64,
    }
}
NameTypeDescription

id

u64

The Id of the batch to query.

BatchResponse

pub struct BatchResponse {
    pub id: u64,
    pub amount: Uint128,
    pub amount_claimed: Uint128,
    pub amount_available_to_claim: Uint128,
    pub number_of_available_claims: Uint128,
    pub lockup_end: u64,
    pub release_unit: u64,
    pub release_amount: WithdrawalType,
    pub last_claimed_release_time: u64,
}
NameTypeDescription

id

u64

The Id of the batch.

amount

Uint128

The amount of tokens in the batch.

amount_claimed

Uint128

The amount of tokens that have been already claimed.

amount_available_to_claim

Uint128

The amount of tokens available to claim right now.

number_of_available_claims

Uint128

The number of available claims now.

lockup_end

u64

When the lockup ends.

release_unit

u64

How often releases occur in seconds.

release_amount

Specifies how much is to be released after each release_unit. If it is a percentage, it would be the percentage of the original amount.

last_claimed_release_time

u64

The time at which the last claim took place.

Batches

Queries multiple batches for their batch information with pagination.

pub enum QueryMsg {
      #[returns(Vec<BatchResponse>)]
      Batches {
        start_after: Option<u64>,
        limit: Option<u32>,
    }
  }
NameTypeDescription

start_after

Option<u64>

Optional Id used for pagination. The fetched batches will start after the provided one here.

limit

Option<u32>

The number of batches to retrieve starting from the one specified above . Defaults to 10 and can be set to a maximum of 30.

Returns a Vec<BatchResponse>.

Base Queries

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

Last updated

Additional Resources

GithubWebsite