Showcase · Live on testnet

Subscriptions, settled by the chain itself.

Customer signs once. The chain fires every recurring charge, every period, on schedule. No off-chain keeper to maintain, no failed-charge retry queue, no payment-provider lock-in. This is what ARC-21 cron + ARC-20 transfers unlock.

Contract Source

54 lines of production JavaScript.

// AsentumPremium — recurring subscription contract.
// Customer deposits ASE → chain debits the merchant every period.

contract AsentumPremium {
  init({ merchant }) {
    storage.set('merchant', merchant);
    cron.schedule(this.address, 'chargeAll', '+1d');
  }

  subscribe(tier) {
    const cfg = tier === 'w'
      ? { amount: 3,  period: 604800 }     // 3 ASE / week
      : { amount: 10, period: 2592000 };   // 10 ASE / month
    storage.set('sub:' + msg.sender, {
      tier,
      amount: cfg.amount * 1e18,
      period: cfg.period,
      balance: msg.value,
      nextCharge: chain.timestamp + cfg.period,
    });
  }

  // Called by cron every day. The chain itself walks due jobs.
  chargeAll() {
    const merchant = storage.get('merchant');
    for (const [addr, s] of storage.entries('sub:')) {
      if (chain.timestamp >= s.nextCharge && s.balance >= s.amount) {
        s.balance -= s.amount;
        s.nextCharge += s.period;
        transfer(merchant, s.amount);
      }
    }
    cron.schedule(this.address, 'chargeAll', '+1d');
  }
}

This is the actual contract powering Premium on social.asentum.com. subscribe() takes the deposit; chargeAll() is fired daily by the chain's cron registry. No keeper, no Gelato, no Chainlink Automation.

Live on chain
0xa298d3…ee85
Reading contract state…
01Deploy

Merchant deploys the contract.

A subscription contract goes on-chain once. It defines tiers, amounts, periods, and the cron schedule for due-checks. Less than 60 lines of JavaScript.

02Subscribe

Customer subscribes in one signed tx.

A single transaction deposits ASE into the contract. That deposit funds the next N charges. No card-on-file, no payment-provider account, no recurring auth.

03Fire

Chain fires every recurring charge.

Every day, the chain walks every active subscriber. Due ones get charged. Period advances. The merchant's balance increases. No keeper service, no failure queue.

Why this matters

No keeper bot. No retry queue. The chain just fires.

No keeper service

On other chains, recurring contracts need an off-chain keeper (Gelato, Chainlink Automation) to fire the tx. Extra cost, extra dependency, extra failure mode.

No card-on-file

The customer's deposit funds N future charges. No saved payment method, no auth flow, no PCI surface, no chargeback risk.

No provider lock-in

Stripe goes down, the chain doesn't. Your subscription business survives without a payment provider in the loop at all.

5-second settlement

Charges complete in one block. Merchants see balance updates instantly, customers see deductions instantly. No T+2.

Customer can pause

Stop / restart any time by calling the contract. No support ticket, no email loop, no "you cancelled but were still charged".

Auditable forever

Every charge is on-chain, signed, timestamped, and verifiable. No SaaS dashboard between you and your revenue history.

Chain Primitives

What the contract actually uses.

Six VM globals do all the work. Every other “subscription smart contract” in crypto is built on top of an external keeper. This one is built on top of the chain itself.

cron.schedule

Schedule a future call to the contract. The chain itself fires it.

storage

Persistent key-value store of every subscription record by address.

storage.entries

Prefix-scan all subscribers in one pass — what powers chargeAll().

transfer

Send ASE from the contract balance to the merchant on every fire.

msg.sender

Identifies the subscriber. Used as the storage key.

msg.value

The deposit. Funds the customer's next N recurring charges.

chain.timestamp

Compared against nextCharge to decide if a sub is due.

this.address

The contract's own address — passed back into cron.schedule.

Source

Read the contract on GitHub.

The actual premium.js powering social.asentum.com — fork it, tweak tiers, redeploy.

Explorer

Inspect the live deployment.

Browse every signed subscribe + cron-fired chargeAll tx as they happen on testnet.

Reference

ARC-21 cron specification.

The standard that lets contracts schedule themselves — what makes this dapp possible at all.

Testnet Live

Stop building keepers. Start using cron.