Module stardust::expiration_unlock_condition
use iota::tx_context;
use std::option;
use std::vector;
Structs
struct ExpirationUnlockCondition
The Stardust expiration unlock condition.
public struct ExpirationUnlockCondition has store
Fields
owner: addressThe address who owns the output before the timestamp has passed.
return_address: addressThe address that is allowed to spend the locked funds after the timestamp has passed.
unix_time: u32Before this unix time, Address Unlock Condition is allowed to unlock the output, after that only the address defined in Return Address.
pub can_be_unlocked_by
Return the address that can unlock the related output.
public fun can_be_unlocked_by(condition: &stardust::expiration_unlock_condition::ExpirationUnlockCondition, ctx: &iota::tx_context::TxContext): address
Implementation
public fun can_be_unlocked_by(condition: &ExpirationUnlockCondition, ctx: &TxContext): address {
// Unix time in seconds.
let current_time = ((tx_context::epoch_timestamp_ms(ctx) / 1000) as u32);
if (condition.unix_time() <= current_time) {
condition.return_address()
} else {
condition.owner()
}
}
pub owner
Get the unlock condition's owner.
public fun owner(condition: &stardust::expiration_unlock_condition::ExpirationUnlockCondition): address
Implementation
public fun owner(condition: &ExpirationUnlockCondition): address {
condition.owner
}
pub return_address
Get the unlock condition's return_address.
public fun return_address(condition: &stardust::expiration_unlock_condition::ExpirationUnlockCondition): address
Implementation
public fun return_address(condition: &ExpirationUnlockCondition): address {
condition.return_address
}
pub unix_time
Get the unlock condition's unix_time.
public fun unix_time(condition: &stardust::expiration_unlock_condition::ExpirationUnlockCondition): u32
Implementation
public fun unix_time(condition: &ExpirationUnlockCondition): u32 {
condition.unix_time
}
pub unlock
Check the unlock condition.
public fun unlock(condition: stardust::expiration_unlock_condition::ExpirationUnlockCondition, ctx: &mut iota::tx_context::TxContext)
Implementation
public fun unlock(condition: ExpirationUnlockCondition, ctx: &mut TxContext) {
let unlock_address = condition.can_be_unlocked_by(ctx);
assert!(unlock_address == ctx.sender(), EWrongSender);
let ExpirationUnlockCondition {
owner: _,
return_address: _,
unix_time: _,
} = condition;
}
Constants
err EWrongSender
The output can not be unlocked by the sender error.
const EWrongSender: u64 = 0;