Comment on page
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
JSON
pub struct InstantiateMsg {
pub modules: Option<Vec<Module>>,
pub kernel_address:String,
pub owner: Option<String>,
}
{
"modules": [
{
"name": "address-list",
"address":"andr1...",
"is_mutable": true
},
...
],
"kernel_address":"andr1..."
}
Name | Type | Description |
---|---|---|
modules | An optional vector of Andromeda Modules that can be attached to the contract. "address-list" module can be added. | |
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. |
Holds sent funds in escrow.
Rust
JSON
pub enum ExecuteMsg {
HoldFunds {
condition: Option<EscrowCondition>,
recipient: Option<Recipient>,
},
}
{
"hold_funds": {
"recipient":{
"address":"andr1..."
},
"condition": {
"expiration": {
"at_height": 1473847495893493453
}
}
}
}
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 by 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 24d ago