mod storage;
#[cfg(test)]
mod test;
use soroban_sdk::{contracterror, contractevent, contracttrait, Address, Env};
pub use crate::ownable::storage::{
accept_ownership, enforce_owner_auth, get_owner, renounce_ownership, set_owner,
transfer_ownership, OwnableStorageKey,
};
#[contracttrait]
pub trait Ownable {
fn get_owner(e: &Env) -> Option<Address> {
storage::get_owner(e)
}
fn transfer_ownership(e: &Env, new_owner: Address, live_until_ledger: u32) {
storage::transfer_ownership(e, &new_owner, live_until_ledger);
}
fn accept_ownership(e: &Env) {
storage::accept_ownership(e);
}
fn renounce_ownership(e: &Env) {
storage::renounce_ownership(e);
}
}
#[contracterror]
#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord)]
#[repr(u32)]
pub enum OwnableError {
OwnerNotSet = 2100,
TransferInProgress = 2101,
OwnerAlreadySet = 2102,
}
#[contractevent]
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct OwnershipTransfer {
pub old_owner: Address,
pub new_owner: Address,
pub live_until_ledger: u32,
}
pub fn emit_ownership_transfer(
e: &Env,
old_owner: &Address,
new_owner: &Address,
live_until_ledger: u32,
) {
OwnershipTransfer {
old_owner: old_owner.clone(),
new_owner: new_owner.clone(),
live_until_ledger,
}
.publish(e);
}
#[contractevent]
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct OwnershipTransferCompleted {
pub new_owner: Address,
}
pub fn emit_ownership_transfer_completed(e: &Env, new_owner: &Address) {
OwnershipTransferCompleted { new_owner: new_owner.clone() }.publish(e);
}
#[contractevent]
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct OwnershipRenounced {
pub old_owner: Address,
}
pub fn emit_ownership_renounced(e: &Env, old_owner: &Address) {
OwnershipRenounced { old_owner: old_owner.clone() }.publish(e);
}