JackpotAutoSubscription

Enables recurring ticket purchases across multiple drawings. Users prepay for a subscription period and keepers execute daily ticket purchases automatically.

State Variables

Variable
Type
Description

jackpot

IJackpot

Immutable reference to Jackpot contract

usdc

IERC20

Immutable USDC token reference

batchFacilitator

IBatchPurchaseFacilitator

Batch facilitator for large orders

subscriptions

mapping(address => Subscription)

Active subscriptions per user

staticTickets

mapping(address => Ticket[])

Static tickets per user

ticketPickerNonce

uint256

Nonce for dynamic ticket generation

Structs

Subscription

struct Subscription {
    uint64 remainingUSDC;           // USDC balance for remaining days
    uint64 lastExecutedDrawing;     // Last drawing tickets were purchased
    uint64 subscribedTicketPrice;   // Price locked at subscription time
    uint64 dynamicTicketCount;      // Random tickets per day
    address[] referrers;            // Referrer addresses
    uint256[] referralSplit;        // PRECISE_UNIT-scaled weights
}

SubscriptionInfo

Enums

ExecutionAction

Events

SubscriptionCreated

SubscriptionCancelled

SubscriptionExecuted

SubscriptionSkipped

Functions

createSubscription

Create an auto-subscription for consecutive daily ticket purchases.

Parameters:

Name
Type
Description

_recipient

address

Address to receive ticket NFTs each day

_totalDays

uint64

Number of days to run subscription

_dynamicTicketCount

uint64

Random tickets to purchase per day

_userStaticTickets

Ticket[]

User-defined static tickets per day

_referrers

address[]

Referrer addresses for all purchases

_referralSplit

uint256[]

PRECISE_UNIT-scaled weights (sum to 1e18)

Requirements:

  • Recipient must not have an active subscription

  • _totalDays must be > 0

  • Per-day ticket count (dynamic + static) must be > 0

  • Static tickets must have valid numbers

  • Caller must have approved sufficient USDC for all days

Example:


cancelSubscription

Cancel your active subscription and receive a refund.

Requirements:

  • Caller must have an active subscription

Example:


getSubscriptionInfo

Get subscription details for a user.

Parameters:

Name
Type
Description

_recipient

address

Address to query

Returns:

Type
Description

SubscriptionInfo

Subscription details and static tickets

Example:


getSubscriptionsAction

Get recommended actions for a batch of subscriptions (for keepers).

Parameters:

Name
Type
Description

_subscriptions

address[]

Addresses to evaluate

Returns:

Type
Description

ExecutionAction[]

Recommended action for each address

Subscription Flow

  1. Create: User approves USDC and calls createSubscription

  2. Daily Execution: Keepers call executeSubscriptions each day

  3. Ticket Purchase: Subscription buys tickets for current drawing

  4. Completion: Subscription ends when USDC runs out or user cancels

Price Protection

Subscriptions lock in the ticket price at creation time:

  • If ticket price increases, subscription is auto-cancelled with refund

  • This protects users from unexpected cost increases

Cancellation Scenarios

Subscriptions are automatically cancelled when:

  • Ticket price changes from subscribed price

  • Too many referrers (exceeds max allowed)

Integration with Batch Facilitator

Large subscriptions (>= minimum batch size) are routed through the BatchPurchaseFacilitator for efficient execution.

Last updated