universalsettle-api 0.2.1

X402-inspired settlement program for any token on Solana
Documentation
use steel::*;

/// Event emitted when a settlement is processed.
/// This enables off-chain monitoring and auditing of settlements.
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
pub struct SettlementEvent {
    pub payer: Pubkey,          // 32 bytes - Payer wallet address
    pub resource_owner: Pubkey, // 32 bytes - Resource owner wallet address
    pub token_mint: Pubkey,     // 32 bytes - Token mint (Pubkey::default() for SOL)
    pub amount: u64,            // 8 bytes - Total settlement amount
    pub fee: u64,               // 8 bytes - Fee deducted
    pub payout: u64,            // 8 bytes - Net payout to resource owner
    pub timestamp: i64,         // 8 bytes - Unix timestamp
    pub is_sol: u8,             // 1 byte - 1 for SOL, 0 for SPL token
    pub _padding: [u8; 7],      // 7 bytes padding
}

event!(SettlementEvent);

#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
pub struct FeeRateUpdatedEvent {
    pub timestamp: i64,    // 8 bytes
    pub old_fee_bps: u16,  // 2 bytes
    pub new_fee_bps: u16,  // 2 bytes
    pub _padding: [u8; 4], // Pad to 8 bytes for alignment
}
event!(FeeRateUpdatedEvent);

#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
pub struct AuthorityUpdatedEvent {
    pub timestamp: i64,        // 8 bytes
    pub old_authority: Pubkey, // 32 bytes
    pub new_authority: Pubkey, // 32 bytes
}
event!(AuthorityUpdatedEvent);

#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
pub struct AuthorityProposedEvent {
    pub timestamp: i64,             // 8 bytes
    pub config: Pubkey,             // 32 bytes
    pub current_authority: Pubkey,  // 32 bytes
    pub proposed_authority: Pubkey, // 32 bytes
}
event!(AuthorityProposedEvent);

#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
pub struct AuthorityProposalCancelledEvent {
    pub timestamp: i64,              // 8 bytes
    pub config: Pubkey,              // 32 bytes
    pub cancelled_authority: Pubkey, // 32 bytes
    pub cancelled_by: Pubkey,        // 32 bytes
}
event!(AuthorityProposalCancelledEvent);

#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
pub struct ProvisioningFeeUpdatedEvent {
    pub timestamp: i64,                // 8 bytes
    pub old_provisioning_fee_sol: u64, // 8 bytes
    pub new_provisioning_fee_sol: u64, // 8 bytes
    pub old_provisioning_fee_spl: u64, // 8 bytes
    pub new_provisioning_fee_spl: u64, // 8 bytes
}
event!(ProvisioningFeeUpdatedEvent);

#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
pub struct MinFeeAmountUpdatedEvent {
    pub timestamp: i64,          // 8 bytes
    pub old_min_fee_amount: u64, // 8 bytes
    pub new_min_fee_amount: u64, // 8 bytes
}
event!(MinFeeAmountUpdatedEvent);

#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
pub struct FeeDestinationUpdatedEvent {
    pub timestamp: i64,              // 8 bytes
    pub old_fee_destination: Pubkey, // 32 bytes
    pub new_fee_destination: Pubkey, // 32 bytes
}
event!(FeeDestinationUpdatedEvent);

#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
pub struct MinFeeAmountSolUpdatedEvent {
    pub timestamp: i64,              // 8 bytes
    pub old_min_fee_amount_sol: u64, // 8 bytes
    pub new_min_fee_amount_sol: u64, // 8 bytes
}
event!(MinFeeAmountSolUpdatedEvent);