Contract 8a2ca096cee2fffbf7086a60e82bbf28a9a1c7d20bbaea59151053a32ca61cdf

← Back to Index 📥 Download WASM

Meta

rssdkver 22.0.11#34f7f53ae31e0fd02aab436a9872e79fa671ca02
rsver 1.93.0

Instances

  • CAT75XL6BB4EBI7JY4UDUIMPKBGSZZJRQFAFXK5C7OR7L6PHCVUL2MLU

Interface

fn pause(env: soroban_sdk::Env) -> Result<(), PaymentError>
fn unpause(env: soroban_sdk::Env) -> Result<(), PaymentError>
fn add_keeper(
    env: soroban_sdk::Env,
    keeper: soroban_sdk::Address,
) -> Result<(), PaymentError>

Initialize the Payment Engine with all dependent contract addresses.

fn initialize(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    auth_manager: soroban_sdk::Address,
    sub_factory: soroban_sdk::Address,
    token_wrapper: soroban_sdk::Address,
    fee_recipient: soroban_sdk::Address,
    fee_bps: u32,
) -> Result<(), PaymentError>
fn update_fee(env: soroban_sdk::Env, new_fee_bps: u32) -> Result<(), PaymentError>
fn total_volume(env: soroban_sdk::Env) -> i128

Mark a subscription as past due (called when payment fails).

fn mark_past_due(
    env: soroban_sdk::Env,
    subscription_id: soroban_sdk::String,
) -> Result<(), PaymentError>
fn total_payments(env: soroban_sdk::Env) -> u64

Execute a payment for a subscription. CRITICAL FUNCTION.

Security: Checks-Effects-Interactions Pattern

  1. Load and validate subscription (CHECKS)
  2. Verify payment is due, status is valid
  3. Check authorization via Authorization Manager
  4. Update state BEFORE transfer (EFFECTS)
  5. Execute token transfer (INTERACTIONS)
  6. Record payment in Authorization Manager

Idempotency

Uses (subscription_id, payment_number) to prevent double execution

fn execute_payment(
    env: soroban_sdk::Env,
    subscription_id: soroban_sdk::String,
) -> Result
fn get_subscription(
    env: soroban_sdk::Env,
    subscription_id: soroban_sdk::String,
) -> Result

Pause a subscription. Can be called by user or merchant.

fn pause_subscription(
    env: soroban_sdk::Env,
    caller: soroban_sdk::Address,
    subscription_id: soroban_sdk::String,
) -> Result<(), PaymentError>

Cancel a subscription. Only the subscriber can cancel.

fn cancel_subscription(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
    subscription_id: soroban_sdk::String,
) -> Result<(), PaymentError>

Create a new subscription. The user subscribes to a merchant's plan.

Flow

  1. Validate plan exists and is active
  2. Check user has authorized the merchant
  3. Create subscription record
  4. Execute first payment immediately
fn create_subscription(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
    plan_id: soroban_sdk::String,
    merchant: soroban_sdk::Address,
    token: soroban_sdk::Address,
    amount: i128,
    interval: u64,
    max_payments: u32,
) -> Result

Resume a paused subscription. Only the user can resume.

fn resume_subscription(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
    subscription_id: soroban_sdk::String,
) -> Result<(), PaymentError>
fn get_user_subscriptions(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
) -> soroban_sdk::Vec
fn get_merchant_subscriptions(
    env: soroban_sdk::Env,
    merchant: soroban_sdk::Address,
) -> soroban_sdk::Vec

Imports

WebAssembly Text (WAT) ▶