Comment on page
Vesting
The Vesting ADO allows the vesting of tokens for one recipient which is fixed upon instantiation. The tokens can be set to release in one batch (All at once) or multiple batches which is specified by
is_multi_batch_enabled
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
Rust
JSON
pub struct InstantiateMsg {
pub recipient: Recipient,
pub is_multi_batch_enabled: bool,
pub denom: String,
pub unbonding_duration: Duration,
pub kernel_address: String,
pub owner: Option<String>
}
{
"recipient":{
"address":"andr1..."
},
"is_multi_batch_enabled": true,
"denom":"uandr",
"unbonding_duration":{
"time":23248854
},
"kernel_address":"andr1...",
"owner":"andr1"
}
Name | Type | Description |
---|---|---|
recipient | The recipient of all funds locked in this contract. | |
is_multi_batch_enabled | bool | Whether or not multi-batching has been enabled. |
denom | String | The denom of the coin being vested. |
unbonding_duration | The unbonding duration of the native staking module. | |
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. |
Can be either a block height or block time in seconds.
pub enum Duration {
Height(u64),
Time(u64),
}
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.
Rust
JSON
pub enum ExecuteMsg {
CreateBatch {
lockup_duration: Option<u64>,
release_unit: u64,
release_amount: WithdrawalType,
validator_to_delegate_to: Option<String>,
}
}
{
"create_batch":{
"lockup_duration": 500,
"release_unit":3000,
"release_amount":{
"percentage":"0.2"
},
"validator_to_delegate_to": "andrvaloper1f..."
}
}
Name | Type | Description |
---|---|---|
lockup_duration | Option<u64> | A lockup period before vesting starts. Specifying None would mean no lock up period and funds start vesting right away. |
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. | |
validator_to_delegate_to | Option<String> | Optional validator to delegate to. If specified, funds will be automatically delegated to them. |
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 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.
Rust
JSON
pub enum ExecuteMsg {
Claim {
number_of_claims: Option<u64>,
batch_id: u64,
}
}
{
"claim":{
"number_of_claims": 3,
"batch_id":7
}
}
Name | Type | Description |
---|---|---|
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. |
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.
Rust
JSON
pub enum ExecuteMsg {
ClaimAll {
up_to_time: Option<u64>,
limit: Option<u32>,
},
}
{
"claim_all":{
"up_to_time": 500,
"limit": 8
}
}
Name | Type | Description |
---|---|---|
up_to_time | Option<u64> | Optional time to claim up to. The minimum of the current time and the specified time is taken. |
start_after | Option<u64> | Optional Id to start after. Used for pagination. |
limit | Option<u32> | The number of batches to claim from. Defaults to 10 and can be set to a maximum of 30. |
Delegates the given amount of tokens, or all if not specified.
Only available to the contract owner.
Rust
JSON
pub enum ExecuteMsg {
Delegate {
amount: Option<Uint128>,
validator: String,
}
}
{
"delegate":{
"amount":"2000",
"validator":"andrvaloper1f9vl..."
}
}
Name | Type | Description |
---|---|---|
amount | Option<Uint128> | Optional amount to delegate. Takes the maximum amount if not specified. |
validator | String | The validator to delegate to. |
Undelegates the given amount of tokens, or all if not specified.
Only available to the contract owner.
Rust
JSON
pub enum ExecuteMsg {
Undelegate {
amount: Option<Uint128>,
validator: String,
}
}
{
"undelegate":{
"amount":"2000",
"validator":"andrvaloper1f..."
}
}
Name | Type | Description |
---|---|---|
amount | Option<Uint128> | Optional amount to undelegate. Takes the maximum amount if not specified. Also takes the max amount if the amount specified is greater than the actual amount of tokens delegated. |
validator | String | The validator to delegate to. |
Redelegates the given amount of tokens, or all from the
from
validator to the to
validator.Only available to the contract owner.
Rust
JSON
pub enum ExecuteMsg {
Redelegate {
amount: Option<Uint128>,
from: String,
to: String,
}
}
{
"redelegate":{
"amount": "4000",
"from":"andrvaloper1f...",
"to":"andrvaloper1zk..."
}
}
Name | Type | Description |
---|---|---|
amount | Option<Uint128> | The amount to redelegate. Takes the max amount if not specified. Also takes the max amount if the amount specified is greater than the actual amount of tokens delegated. |
from | String | The validator to take the tokens from. |
to | String | The new validator to delegate tokens to. |
Votes on the specified proposal with the specified vote.
Only available to the contract owner.
Rust
JSON
pub enum ExecuteMsg {
Vote {
proposal_id: u64,
vote: VoteOption,
}
}
{
"vote":{
"proposal_id": 4,
"vote": "no"
}
}
Name | Type | Description |
---|---|---|
proposal_id | u64 | The Id of the proposal. |
vote | VoteOption | The vote. |
Enum with the types of votes.
pub enum VoteOption {
Yes,
No,
Abstain,
NoWithVeto,
}
Withdraws rewards from all delegations to the sender.
Only available to the contract owner.
Rust
JSON
pub enum ExecuteMsg {
WithdrawRewards {}
}
{
"withdraw_rewards":{}
}
Queries the configuration of the contract.
Rust
JSON
pub enum QueryMsg {
#[returns(Config)]
Config {}
}
{
"config":{}
}
Returns a config struct.
Rust
JSON
pub struct Config {
pub recipient: Recipient,
pub is_multi_batch_enabled: bool,
pub denom: String,
pub unbonding_duration: Duration,
}
{
"recipient":{
"addr":"andr1..."
},
"is_multi_batch_enabled": true,
"denom":"uandr",
"unbonding_duration":{
"time":3248325932
}
}
Name | Type | Description |
---|---|---|
recipient | Recipient | The recipient of each batch. |
is_multi_batch_enabled | bool | Whether or not multiple batches are supported. |
denom | String | The denom of the coin being vested. |
unbonding_duration | The unbonding duration of the native staking module. |
Queries batch information from the specified Id.
Rust
JSON
pub enum QueryMsg {
#[returns(BatchResponse)]
Batch {
id: u64,
}
}
{
"batch":{
"id": 3
}
}
Name | Type | Description |
---|---|---|
id | u64 | The Id of the batch to query. |
Rust
JSON
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,
}
{
"id": 3,
"amount":"200",
"amount_claimed":"400",
"amount_available_to_claim":"2000",
"number_of_available_claims":"5",
"lockup_end":100,
"release_unit":3000,
"release_amount":{
"percentage":"0.2",
},
"last_claimed_release_time":"200"
}
Name | Type | Description |
---|---|---|
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. |
Queries the batches with pagination.
Rust
JSON
pub enum QueryMsg {
#[returns(Vec<BatchResponse>)]
Batches {
start_after: Option<u64>,
limit: Option<u32>,
}
}
{
"batches":{
"limit": 15
}
}
Name | Type | Description |
---|---|---|
start_after | Option<u64> | Optional Id used for pagination. |
limit | Option<u32> | The number of batches to claim from. Defaults to 10 and can be set to a maximum of 30 |