Timelock

The Timelock ADO or Escrow ADO is a smart contract built to hold funds (Native coins) for a period of time until the set condition is satisfied.

There are two main conditions that can be used by the contract:

  • Expiration: A time expiration to when the funds can be released.

  • MinimumFunds: A minimum amount of funds to be deposited before they can be released.

Once a condition is satisfied, the funds can be released by anyone.

Ado_type: timelock

InstantiateMsg

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

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

HoldFunds

Holds sent funds in escrow.

pub enum ExecuteMsg {
    HoldFunds {
        condition: Option<EscrowCondition>,
        recipient: Option<Recipient>,
    },
}
NameTypeDescription

recipient

Option<Recipient>

Optional recipient address. If not set, defaults to the sender.

condition

An optional condition to unlock the Escrow.

EscrowCondition

Enum used to specify the condition which must be met in order for the Escrow to unlock.

The Expiration timestamp is taken in nanosecond precision. Using another precision will give a "Time in the past" error.

pub enum EscrowCondition {
    Expiration(MillisecondsExpiration),
    MinimumFunds(Vec<Coin>),
}
EscrowCondition TypeTypeDescription

Expiration

Requires a given time to be reached. The time is specified in milliseconds.

MinimumFunds

Vec<Coin>

Requires a minimum amount of funds to be deposited.

ReleaseFunds

Releases any held funds by the specified recipient.

pub enum ExecuteMsg {
    ReleaseFunds {
    recipient_addr:Option<String>,
    start_after:Option<String>,
    limit:Option<u32>
    }
}
NameType Description

recipient_addr

Option<String>

Optional address to release the funds for. Will default to the sender if not specified.

start_after

Option<String>

An optional address for which to start after, used for pagination.

limit

Option<u32>

Optional limit to the number of timelocks to attempt to unlock. Defaults to 10 and can be set to a maximum of 30.

ReleaseSpecificFunds

Release funds held by the owner to the recipient. (The recipient has to be the same as the one defined when the owner executed HoldFunds)

pub enum ExecuteMsg {
ReleaseSpecificFunds {
        owner: String,
        recipient_addr: Option<String>,
    }
  } 
NameTypeDescription

owner

String

The address of the funds to be released.

recipient_addr

Option<String>

Optional address to receive the released funds. Will default to the sender if not specified.

Base Executes

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

QueryMsg

GetLockedFunds

Query any held funds for an address.

pub enum QueryMsg {
    #[returns(GetLockedFundsResponse)]
    GetLockedFunds{
        owner: String,
        recipient:String
    }
}
NameTypeDescription

owner

String

The address of the owner of the funds.

recipient

String

The address of the recipient of the funds.

GetLockedFundsResponse

pub struct GetLockedFundsResponse {
    pub funds: Option<Escrow>,
}
NameTypeDescription

funds

Option<Escrow>

Optional Escrow with the held funds and related information.

GetLockedFundsForRecipient

pub enum QueryMsg {
   #[returns(GetLockedFundsForRecipientResponse)]
   GetLockedFundsForRecipient {
        recipient: String,
        start_after: Option<String>,
        limit: Option<u32>,
    }
  }
NameTypeDescription

recipient

String

The address of the recipient..

start_after

Option<String>

An optional address for which to start after, used for pagination.

limit

Option<u32>

Optional limit to the number timelocks to attempt to query. Defaults to 10 and can be set to a maximum of 30.

GetLockedFundsForRecipientResponse

pub struct GetLockedFundsForRecipientResponse {
    pub funds: Vec<Escrow>,
}
NameTypeDescription

funds

Vec<Escrow>

Optional Escrow with the held funds and related information.

Escrow

The time-lock contract uses a basic struct to store a record of funds being held.

pub struct Escrow {
    pub coins: Vec<Coin>,
    pub condition: Option<EscrowCondition>,
    pub recipient: Recipient,
}
NameType Description

coins

Vec<Coin>

Funds being held within the Escrow.

condition

Optional condition for the Escrow.

recipient

The recipient of the funds once condition is satisfied.

Base Queries

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

Last updated

Additional Resources

GithubWebsite