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
Rust
pub struct InstantiateMsg {
pub modules: Option<Vec<Module>>,
}
Holds sent funds in escrow.
Rust
JSON
pub enum ExecuteMsg {
HoldFunds {
condition: Option<EscrowCondition>,
recipient: Option<Recipient>,
},
}
{
"hold_funds": {
"recipient":{
"addr":"andr1..."
}
"condition": {
"expiration": {
"at_height": 14738473
}
}
}
}
Name | Type | Description |
---|---|---|
recipient | Optional recipient address. If not set, defaults to the sender. | |
condition | An optional condition to unlock the Escrow. |
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(Expiration),
MinimumFunds(Vec<Coin>),
}
EscrowCondition Type | Type | Description |
---|---|---|
Expiration | Requires a given time or block height to be reached. | |
MinimumFunds | Requires a minimum amount of funds to be deposited. |
Releases any held funds of the specified recipient.
Rust
JSON
pub enum ExecuteMsg {
ReleaseFunds {
recipient_addr:Option<String>,
start_after:Option<String>,
limit:Option<u32>
}
}
{
"release_funds": {
"recipient_addr":"andr1...",
"limit":"15"
}
}
Name | Type | 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. |
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
)Rust
JSON
pub enum ExecuteMsg {
ReleaseSpecificFunds {
owner: String,
recipient_addr: Option<String>,
}
}
{
"release_specific_funds": {
"owner":"andr1...",
"recipient_addr": "andr1..."
}
}
Name | Type | Description |
---|---|---|
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. |
Uses the modules feature.
Query any held funds for an address.
Rust
JSON
pub enum QueryMsg {
#[returns(GetLockedFundsResponse)]
GetLockedFunds{
owner: String,
recipient:String
}
}
{
"get_locked_funds": {
"owner": "andr1...",
"recipient":"andr1..."
}
}
Name | Type | Description |
---|---|---|
owner | String | The address of the owner of the funds. |
recipient | String | The address of the recipient of the funds. |
Rust
JSON
pub struct GetLockedFundsResponse {
pub funds: Option<Escrow>,
}
{
"funds": {
"coins":[{
"amount": "1000",
"denom": "uandr"
},
...
],
"recipient": "juno1...",
"condition": {
"expiration": {
"at_height": 175849
}
}
}
}
Name | Type | Description |
---|---|---|
funds | Optional Escrow with the held funds and related information. |
Rust
JSON
pub enum QueryMsg {
#[returns(GetLockedFundsForRecipientResponse)]
GetLockedFundsForRecipient {
recipient: String,
start_after: Option<String>,
limit: Option<u32>,
}
}
{
"get_locked_funds_for_recipient":{
"recipient":"juno1...",
"limit":"15"
}
}
Name | Type | Description |
---|---|---|
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. |
Rust
JSON
pub struct GetLockedFundsForRecipientResponse {
pub funds: Vec<Escrow>,
}
{
"funds": {
"coins":[{
"amount": "1000",
"denom": uandr
},
...
],
"recipient":{
"addr":"juno1..."
},
"condition": {
"expiration": {
"at_height": 13249238492
}
}
}
}
Name | Type | Description |
---|---|---|
funds | Optional Escrow with the held funds and related information. |
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,
}
Name | Type | Description |
---|---|---|
coins | Funds being held within the Escrow. | |
condition | Optional condition for the Escrow. | |
recipient | The recipient of the funds once condition is satisfied. |
Last modified 1mo ago