Whop
Finance

documentation

×

Whop Finance × Aptos

Introduction

Aptos infrastructure powering the world's largest internet market

Tether invested in Whop to power stablecoin payments for the next generation of the internet economy. With the Wallet Development Kit, Whop Finance enables self-custodial wallets with instant global dollar settlement — removing the frictions of traditional payments for 18.4 million users across 144 countries.

0x42A9F1B7E04

Products

Create, connect, and get paid instantly.

Payments

Stablecoin infrastructure at scale

Seamless on-chain settlement powered by Tether's Wallet Development Kit. Self-custodial wallets where value moves as easily as digital content — enabling efficient dollar settlement for creators and users worldwide.

$3B+

Annual payouts

18.4M+

Users on Whop

144

Countries

25%

MoM growth

Build DeFi with the Whop Finance SDK

Move modules for payments, yield, and stablecoin transfers on Aptos. Integrate the Tether WDK, deploy creator payment splits, and compose with Aave and Decibel — all from a single SDK with sub-second finality and $0.00003 transactions.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
module whop::creator_payments { use std::signer; use aptos_framework::coin; use aptos_framework::event; use tether_wdk::usdt::{Self, USDT}; use whop::payments; use whop::campaigns; use whop::emojicoin; /// Creator payment split with campaign tracking struct CreatorSplit has key, store { creator: address, fee_bps: u64, campaign_id: vector<u8>, total_paid: u64, subscribers: u64, } /// Emojicoin reward config for buyer engagement struct RewardConfig has key { rate_bps: u64, pool: address, min_amount: u64, } /// Payment event for indexing struct PaymentEvent has drop, store { buyer: address, creator: address, amount: u64, plan_id: vector<u8>, timestamp: u64, } const E_NOT_CREATOR: u64 = 1; const E_INVALID_FEE: u64 = 2; const E_INSUFFICIENT_BAL: u64 = 3; const E_CAMPAIGN_NOT_FOUND: u64 = 4; /// Initialize creator payment channel public entry fun init_channel( creator: &signer, fee_bps: u64, campaign_id: vector<u8>, ) { assert!(fee_bps <= 5000, E_INVALID_FEE); let addr = signer::address_of(creator); payments::register(creator, fee_bps); campaigns::create( creator, campaign_id, fee_bps, ); move_to(creator, CreatorSplit { creator: addr, fee_bps, campaign_id, total_paid: 0, subscribers: 0, }); } /// Process USDT payment via Tether WDK bridge public entry fun pay_creator( buyer: &signer, creator: address, amount: u64, plan_id: vector<u8>, ) acquires CreatorSplit, RewardConfig { let split = borrow_global_mut<CreatorSplit>(creator); let fee = (amount * split.fee_bps) / 10000; let payout = amount - fee; // Transfer USDT via Tether WDK usdt::transfer(buyer, creator, payout); usdt::transfer(buyer, @whop_treasury, fee); // Update campaign subscriber metrics campaigns::record_payment( &split.campaign_id, amount, signer::address_of(buyer), ); // Mint emojicoin rewards on qualifying payments if (exists<RewardConfig>(@whop)) { let cfg = borrow_global<RewardConfig>(@whop); if (amount >= cfg.min_amount) { emojicoin::mint_reward( buyer, (amount * cfg.rate_bps) / 10000, ); }; }; split.total_paid = split.total_paid + amount; split.subscribers = split.subscribers + 1; payments::emit_event( signer::address_of(buyer), creator, amount, plan_id, ); } /// Swap emojicoin rewards to USDT via pool public entry fun redeem_emojicoin( user: &signer, coin_amount: u64, min_out: u64, ) { emojicoin::swap_to_usdt( user, coin_amount, min_out, ); } /// Creator withdraws campaign earnings public entry fun withdraw( creator: &signer, ) acquires CreatorSplit { let addr = signer::address_of(creator); let split = borrow_global<CreatorSplit>(addr); campaigns::claim(creator, &split.campaign_id); } #[view] public fun stats( addr: address, ): (u64, u64, u64) acquires CreatorSplit { let s = borrow_global<CreatorSplit>(addr); ( s.total_paid, s.subscribers, emojicoin::balance(addr), ) }}

SDK

0114453

PAYMENT_LOGS [0 SINCE LOAD]
AMOUNTCURRENCYCOUNTRYTIMESTAMP
  • $2,805,620,430Paid out to creators on Whop

Earn Yield

Aave V3 on Aptos

Lending and borrowing through Aave V3 — the most battle-tested protocol in DeFi with $27B+ TVL across 12 chains, now native on Aptos via Move modules. Self-custodial access to institutional-grade yield powered by Tether's WDK.

src/app/api/aave/supply/route.ts
import { getAavePoolAddress } from "@/lib/aave"

export async function POST(req: NextRequest) {
  const { asset, amount, onBehalfOf } = await req.json()
  const aavePool = getAavePoolAddress()

  // Entry function is on supply_logic, not pool
  const payload = {
    function: `${aavePool}::supply_logic::supply`,
    typeArguments: [],
    functionArguments: [asset, amount, onBehalfOf, 0],
  }

  return NextResponse.json({ payload })
}
src/lib/leveraged-yield.ts
// Leveraged yield: supply → borrow → re-supply loop
export function previewLoop(config: LoopConfig): LoopResult {
  const { initialAmount, targetLoops, ltv, safetyMargin,
          supplyApr, borrowApr } = config

  let totalSupplied = 0, totalBorrowed = 0
  let currentAmount = initialAmount

  for (let i = 0; i < targetLoops; i++) {
    totalSupplied += currentAmount
    const borrowed = currentAmount * ltv * safetyMargin
    totalBorrowed += borrowed
    currentAmount = borrowed
  }

  totalSupplied += currentAmount
  const effectiveLeverage = totalSupplied / initialAmount
  const netApy = supplyApr * effectiveLeverage
              - borrowApr * (effectiveLeverage - 1)
  const healthFactor = totalBorrowed > 0
    ? (totalSupplied * LIQUIDATION_THRESHOLD) / totalBorrowed
    : Infinity

  return { totalSupplied, totalBorrowed, effectiveLeverage,
           netApy, healthFactor }
}

Protocol

Aave V3

Native Move modules

TVL

$27B+

Across 12 chains

Yield

4-8%

APY on stablecoins

Withdraw

Instant

No lockup period

Trade

Decibel on Aptos

Fully on-chain orderbook perps via the Decibel DEX on Aptos. BTC, ETH, APT, tokenized stocks, commodities, and forex — up to 50x leverage with sub-second settlement. Self-custodial trading, no intermediaries.

src/app/api/decibel/order/route.ts
// Market order: IOC time-in-force, price=0
const sizeRaw = Math.round(
  Number(size) * Math.pow(10, marketConfig.sizeDecimals)
)

const payload = {
  function: `${pkg}::dex_accounts_entry::place_order_to_subaccount`,
  typeArguments: [],
  functionArguments: [
    subaccount,           // subaccount address
    marketConfig.address, // market address (BTC-USDT, AAPL, etc.)
    "0",                  // price (0 = market price for IOC)
    String(sizeRaw),      // size in contract units
    isBuy,                // true = long, false = short
    2,                    // time_in_force: IOC (market order)
    false,                // post_only
    reduceOnly,           // reduce_only
  ],
}
src/components/trade/TradeForm.tsx
// Frontend: build payload via API, sign with wallet adapter
const res = await fetch("/api/decibel/order", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    marketName, price: currentPrice,
    size: parseFloat(size),
    isBuy: side === "buy", orderType, subaccount,
  }),
})

const data = await res.json()
const result = await signAndSubmitTransaction({
  data: data.payload,
})

Leverage

Up to 50x

On all markets

Fee

0.045%

Taker fee

Settlement

<1s

Sub-second finality

Markets

12+

Crypto, stocks, forex

Send Money

Where value moves as easily as digital content

Transfer USDT on Aptos for $0.00003. Self-custodial wallets powered by Tether's Wallet Development Kit give users direct control over their funds — no intermediaries, no unnecessary friction. Payments move as freely as the internet itself.

src/app/api/transfer/route.ts
// USDT Fungible Asset address on Aptos mainnet
const USDT_FA = "0x357b0b74bc833e95a115ad22604854d6b0fca151..."

// Build payload for client-side signing via wallet adapter
const payload = {
  function: "0x1::primary_fungible_store::transfer" as const,
  typeArguments: ["0x1::fungible_asset::Metadata"],
  functionArguments: [USDT_FA, recipient, amount],
}

return NextResponse.json({ payload })
src/app/api/payments-demo/send/route.ts
// Server-side demo: send real USDT between two accounts
const rawAmount = Math.floor(amount * 1e6)  // USDT = 6 decimals

const sender = Account.fromPrivateKey({
  privateKey: new Ed25519PrivateKey(keyA),
})

// Build the FA transfer transaction
const txn = await aptos.transferFungibleAsset({
  sender,
  fungibleAssetMetadataAddress: AccountAddress.from(USDT_FA),
  recipient: receiverAddr,
  amount: rawAmount,
})

// Sign, submit, and wait for confirmation
const pending = await aptos.signAndSubmitTransaction({
  signer: sender, transaction: txn,
})
const result = await aptos.waitForTransaction({
  transactionHash: pending.hash,
})

Cost

$0.00003

Per transfer

Speed

<1s

Instant finality

Custody

Self

Powered by Tether WDK

Reach

144

Countries supported

Learn Move

Aptos Move

Move is the smart contract language born from 8 years of research across Meta's Libra and Diem projects, backed by $1.4B in funding. Assets can't be copied or dropped — only moved. Tether's $180B+ in issued digital dollars runs on infrastructure designed for this kind of safety. Aptos executes in parallel via Block-STM, delivering 160k+ TPS with sub-second finality.

terminal
# Install the Aptos CLI
$ brew install aptos

# Initialize a new Move project
$ aptos move init --name my_defi_module

# Compile Move modules
$ aptos move compile

# Run Move unit tests
$ aptos move test

# Deploy to mainnet
$ aptos move publish --profile mainnet
sources/vault.move
module whop::vault {
    use aptos_framework::fungible_asset;
    use aptos_framework::primary_fungible_store;

    /// A vault that holds fungible assets
    struct Vault has key, store {
        balance: FungibleStore,
        owner: address,
    }

    /// Deposit USDT into the vault
    public entry fun deposit(
        account: &signer,
        amount: u64
    ) {
        // Resources can't be copied — only moved
        let fa = primary_fungible_store::withdraw(
            account, USDT_METADATA, amount
        );
        fungible_asset::deposit(vault_store, fa);
    }
}

Funding

$1.4B

Development backing

Research

8 Years

Libra → Diem → Aptos

TPS

160k+

Block-STM parallel exec

Finality

<1s

Sub-second on mainnet

The Aptos Story

The original Move.

Aptos Move is the direct descendant of the language created inside Facebook's Libra project in 2018. Not a fork. Not a variation. The same compiler, the same resource model, the same team — now powering stablecoin infrastructure that connects to Tether's 530 million users and $180B+ in issued digital dollars.

2018

Libra announced

Facebook reveals the Libra blockchain and the Move language — a resource-oriented smart contract language where digital assets can't be copied or dropped.

2020

Libra → Diem

Rebranded to Diem. The core team continues 3+ years of research into parallel execution, formal verification, and the Move type system.

2022

Aptos launches

The original Libra/Diem engineers launch Aptos with $350M in funding. Move ships to mainnet with Block-STM parallel execution.

2024

$1.4B+ ecosystem

Over $1.4B in development funding. Aptos Move V2 introduces objects, concurrent data structures, and Shelby for hot storage.

The next generation of internet markets

Whop facilitates $3B+ in annual payouts to creators in 144 countries. With Aptos and Shelby hot storage, every payment, attribution event, and content access check lives on-chain — real-time settlement for the world's largest internet market.

Instant Global Settlement

Every payment emits an Aptos event processed in real-time. Creators in 144 countries see earnings the instant they happen — no batch jobs, no stale data, no payment delays.

🔐

Self-Custodial by Default

Tether's WDK enables self-custodial wallets where users retain direct control over their funds. Token-gated communities where Move objects represent membership and unlock content automatically.

Internet-Native Economy

Creator profiles, subscription plans, and payouts are Move V2 objects — composable and ownable. A flexible, internet-native economy where value moves as easily as digital content.

sources/creator_profile.move
module whop::creator_profile {
    use aptos_framework::object;
    use aptos_framework::event;

    /// Move V2 object — composable, transferable, ownable
    struct CreatorProfile has key {
        total_earned: u64,
        subscriber_count: u64,
        content_refs: vector<address>, // Shelby content pointers
    }

    /// Event emitted on every payment — indexed in real-time
    struct PaymentEvent has drop, store {
        creator: address,
        amount: u64,
        campaign_id: vector<u8>,
        timestamp: u64,
    }

    /// Token-gated content access via Move V2 objects
    public entry fun access_content(
        subscriber: &signer,
        content_ref: address,
    ) {
        // Object ownership check — no off-chain lookup needed
        let token = object::address_to_object(content_ref);
        assert!(object::owns(token, signer::address_of(subscriber)));
        // Shelby decrypts and serves content
    }
}
Original Whitepaper · 2019

The Libra Blockchain

“Libra's mission is to enable a simple global currency and financial infrastructure that empowers billions of people.”

— The Libra Association Members, June 2019

It all started with a whitepaper. In June 2019, Facebook published the Libra whitepaper — introducing Move, a language where digital assets are first-class citizens that can't be accidentally duplicated or destroyed. After 3 years as Diem, the core team spun out to build Aptos — bringing the original Move compiler, the original type system, and 8 years of research to a permissionless L1.

Today, Shelby extends Aptos with hot storage for real-time data — creator content, encrypted media, subscriber state — all accessible through the same Move modules that handle payments and DeFi. Token-gated communities become native: a Move V2 object represents membership, and content access is a single on-chain check. No middleware. No off-chain auth. Just Move.

WHOP YIELD18.5% APY+$0.0000 earned+ MAX+$142.50+$18.20

The future of internet markets.

Anyone in the world can create, connect, and get paid instantly. Payments move as freely as the internet itself.

Home