Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
163 changes: 98 additions & 65 deletions creator-keys/src/events.rs
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,10 @@ pub struct CoCreatorSetEvent {
pub split_bps: u32,
}

pub fn co_creator_set_topics(creator_id: &Address, co_creator: &Address) -> (Symbol, Address, Address) {
pub fn co_creator_set_topics(
creator_id: &Address,
co_creator: &Address,
) -> (Symbol, Address, Address) {
(
CO_CREATOR_SET_EVENT_NAME,
creator_id.clone(),
Expand Down Expand Up @@ -1269,64 +1272,6 @@ pub fn royalty_updated_topics(creator: &Address) -> (Symbol, Address) {
(ROYALTY_UPDATED_EVENT_NAME, creator.clone())
}

/// Event name for the protocol trade fee collected on a buy or sell.
pub const FEE_COLLECTED_EVENT_NAME: Symbol = symbol_short!("fee_coll");

/// Event name for a sell rejected by the anti-flash-trade lockup window.
pub const LOCKUP_BLOCKED_EVENT_NAME: Symbol = symbol_short!("lck_blk");

/// Stable fee collection event payload for downstream indexers.
///
/// Event shape:
/// - topics: `(FEE_COLLECTED_EVENT_NAME, treasury)`
/// - data: `FeeCollectedEvent`
///
/// Emitted on every buy and sell once the protocol trade fee is configured,
/// carrying the deducted amount and the treasury address that received it.
#[derive(Clone, Debug, Eq, PartialEq)]
#[contracttype]
pub struct FeeCollectedEvent {
/// Treasury address that received the fee.
pub treasury: Address,
/// Fee amount deducted from the trade.
pub amount: i128,
/// Ledger sequence number at the time of the trade.
pub ledger: u32,
}

/// Shared fee collected event topics tuple.
pub fn fee_collected_topics(treasury: &Address) -> (Symbol, Address) {
(FEE_COLLECTED_EVENT_NAME, treasury.clone())
}

/// Stable lockup-blocked event payload for downstream indexers.
///
/// Event shape:
/// - topics: `(LOCKUP_BLOCKED_EVENT_NAME, creator_id, seller)`
/// - data: `LockupBlockedEvent`
///
/// Emitted when a sell is rejected because the seller's most recent buy for
/// this creator falls inside the configured lockup window.
#[derive(Clone, Debug, Eq, PartialEq)]
#[contracttype]
pub struct LockupBlockedEvent {
/// Creator whose keys the seller attempted to sell.
pub creator_id: Address,
/// Seller whose sale was rejected.
pub seller: Address,
/// Ledger timestamp of the seller's most recent buy.
pub last_buy_timestamp: u64,
/// Timestamp at which the lockup expires (exclusive).
pub unlock_at: u64,
/// Ledger timestamp at rejection.
pub current_timestamp: u64,
}

/// Shared lockup blocked event topics tuple.
pub fn lockup_blocked_topics(creator: &Address, seller: &Address) -> (Symbol, Address, Address) {
(LOCKUP_BLOCKED_EVENT_NAME, creator.clone(), seller.clone())
}

/// Event name for a new staking position created via `stake_keys_locked`.
pub const STAKE_EVENT_NAME: Symbol = symbol_short!("stake");

Expand Down Expand Up @@ -1360,7 +1305,11 @@ pub struct StakeEvent {
}

/// Shared stake event topics tuple.
pub fn stake_topics(creator: &Address, holder: &Address, stake_id: u32) -> (Symbol, Address, Address, u32) {
pub fn stake_topics(
creator: &Address,
holder: &Address,
stake_id: u32,
) -> (Symbol, Address, Address, u32) {
(STAKE_EVENT_NAME, creator.clone(), holder.clone(), stake_id)
}

Expand Down Expand Up @@ -1390,7 +1339,12 @@ pub fn stake_extended_topics(
holder: &Address,
stake_id: u32,
) -> (Symbol, Address, Address, u32) {
(STAKE_EXTENDED_EVENT_NAME, creator.clone(), holder.clone(), stake_id)
(
STAKE_EXTENDED_EVENT_NAME,
creator.clone(),
holder.clone(),
stake_id,
)
}

/// Stable early-unstake event payload for downstream indexers.
Expand Down Expand Up @@ -1423,7 +1377,12 @@ pub fn early_unstake_topics(
holder: &Address,
stake_id: u32,
) -> (Symbol, Address, Address, u32) {
(EARLY_UNSTAKE_EVENT_NAME, creator.clone(), holder.clone(), stake_id)
(
EARLY_UNSTAKE_EVENT_NAME,
creator.clone(),
holder.clone(),
stake_id,
)
}

/// Stable stake-reward-claim event payload for downstream indexers.
Expand Down Expand Up @@ -1456,10 +1415,14 @@ pub fn stake_reward_claimed_topics(
holder: &Address,
stake_id: u32,
) -> (Symbol, Address, Address, u32) {
(STAKE_REWARD_CLAIMED_EVENT_NAME, creator.clone(), holder.clone(), stake_id)
(
STAKE_REWARD_CLAIMED_EVENT_NAME,
creator.clone(),
holder.clone(),
stake_id,
)
}


// ============================================================================
// Launch Penalty (#798)
// ============================================================================
Expand Down Expand Up @@ -1488,7 +1451,11 @@ pub fn launch_penalty_applied_topics(
creator: &Address,
seller: &Address,
) -> (Symbol, Address, Address) {
(LAUNCH_PENALTY_APPLIED_EVENT_NAME, creator.clone(), seller.clone())
(
LAUNCH_PENALTY_APPLIED_EVENT_NAME,
creator.clone(),
seller.clone(),
)
}

/// Event name for set_launch_penalty.
Expand All @@ -1510,3 +1477,69 @@ pub struct LaunchPenaltySetEvent {
pub fn launch_penalty_set_topics(creator: &Address) -> (Symbol, Address) {
(LAUNCH_PENALTY_SET_EVENT_NAME, creator.clone())
}

// --- Co-creator removal, auction, and staking reward events ---

/// Event name for co-creator removal.
pub const CO_CREATOR_REMOVED_EVENT_NAME: Symbol = symbol_short!("co_rem");

/// Event name for auction configuration.
pub const AUCTION_CONFIGURED_EVENT_NAME: Symbol = symbol_short!("auc_cfg");

/// Event name for auction cancellation.
pub const AUCTION_CANCELLED_EVENT_NAME: Symbol = symbol_short!("auc_can");

/// Event name for a purchase made during a creator's auction phase.
pub const AUCTION_PURCHASE_EVENT_NAME: Symbol = symbol_short!("auc_buy");

#[derive(Clone, Debug, Eq, PartialEq)]
#[contracttype]
pub struct CoCreatorRemovedEvent {
pub creator_id: Address,
pub co_creator: Address,
pub ledger: u32,
}

pub fn co_creator_removed_topics(creator: &Address) -> (Symbol, Address) {
(CO_CREATOR_REMOVED_EVENT_NAME, creator.clone())
}

#[derive(Clone, Debug, Eq, PartialEq)]
#[contracttype]
pub struct AuctionConfiguredEvent {
pub creator_id: Address,
pub auction_price: i128,
pub auction_supply: u32,
}

pub fn auction_configured_topics(creator: &Address) -> (Symbol, Address) {
(AUCTION_CONFIGURED_EVENT_NAME, creator.clone())
}

#[derive(Clone, Debug, Eq, PartialEq)]
#[contracttype]
pub struct AuctionCancelledEvent {
pub creator_id: Address,
pub auction_price: i128,
pub auction_supply: u32,
}

pub fn auction_cancelled_topics(creator: &Address) -> (Symbol, Address) {
(AUCTION_CANCELLED_EVENT_NAME, creator.clone())
}

#[derive(Clone, Debug, Eq, PartialEq)]
#[contracttype]
pub struct AuctionPurchaseEvent {
pub buyer: Address,
pub creator_id: Address,
pub quantity: u32,
pub price_paid: i128,
pub new_supply: u32,
pub auction_sold: u32,
pub ledger: u32,
}

pub fn auction_purchase_topics(creator: &Address, buyer: &Address) -> (Symbol, Address, Address) {
(AUCTION_PURCHASE_EVENT_NAME, creator.clone(), buyer.clone())
}
Loading
Loading