Every token is its own margin market. Treasury-backed lending, real-token short selling, on-chain pricing. No oracles. No LPs. No bootstrapping.
Every token launched on torch gets a funded treasury, a 300M token lending reserve, margin lending, short selling, and on-chain pricing — all live from migration.
No external LPs. No oracle feeds. No protocol token. No bootstrapping.
A protocol where every token launches with its own margin market.
Shorts are not synthetic. Borrowed tokens are real. Selling them moves the real price. Short sellers are market participants contributing to price discovery.
CREATE → BOND → MIGRATE → TRADE → MARGIN
│
┌────┴─────┐
LEND SHORT SELL
│ │
REPAY CLOSE
│ │
LIQUIDATE LIQUIDATE
Bonding — constant-product curve. SOL splits: curve (tokens to buyer) + treasury (SOL accumulates) + 10% tokens to vote vault. 2% max wallet. Completes at 100 or 200 SOL.
Migration — permissionless. Creates Raydium pool, burns LP tokens (liquidity locked forever), revokes mint/freeze authority permanently, activates 0.04% transfer fee.
Trading — token trades on Raydium. Transfer fees harvest to treasury as SOL. Treasury grows perpetually.
Margin — two capital pools, two-sided margin:
| Pool | Asset | Purpose |
|---|---|---|
| Token Treasury | SOL | Lending pool — borrow SOL against token collateral |
| Treasury Lock | 300M tokens | Short pool — borrow real tokens against SOL collateral |
SUPPLY 1,000,000,000 tokens (6 decimals)
CURVE_SUPPLY 700,000,000 (70%)
TREASURY_LOCK 300,000,000 (30%)
MAX_WALLET 2% during bonding
BONDING_TARGET 100 SOL (Flame) / 200 SOL (Torch)
PROTOCOL_FEE 0.5% on buys
TREASURY_RATE 15% → 2.5% (dynamic decay)
TRANSFER_FEE 0.04% (post-migration, immutable)
MAX_LTV 50%
LIQ_THRESHOLD 65%
INTEREST 2% per epoch (~7 days)
LIQ_BONUS 10%
UTIL_CAP 80%
BORROW_CAP 5x collateral share of supply
MIN_BORROW 0.1 SOL
PROGRAM_ID 8hbUkonssSEEtkqzwM7ZcZrD9evacM92TcWSooVF4BeT
GET QUOTE → BUILD TX → SIGN & SEND
One flow, any token state. The SDK auto-routes bonding curve or Raydium DEX based on the quote's source field.
import { getBuyQuote, buildBuyTransaction } from "torchsdk";
const quote = await getBuyQuote(connection, mint, 100_000_000); // 0.1 SOL
const { transaction } = await buildBuyTransaction(connection, {
mint, buyer: wallet, amount_sol: 100_000_000,
slippage_bps: 500, vault: vaultCreator, quote,
});
// sign and send — VersionedTransaction, ALT-compressed
| Function | Returns |
|---|---|
getTokens(connection, params?) | Token list (filterable, sortable) |
getToken(connection, mint) | Full detail: price, treasury, votes, status |
getTokenMetadata(connection, mint) | On-chain Token-2022 metadata |
getHolders(connection, mint) | Top holders with balance/percentage |
getMessages(connection, mint, limit?, opts?) | On-chain memos. { enrich: true } adds SAID |
getLendingInfo(connection, mint) | Lending parameters and pool state |
getLoanPosition(connection, mint, wallet) | Loan: collateral, debt, LTV, health |
getAllLoanPositions(connection, mint) | All loans sorted by liquidation risk |
getShortPosition(connection, mint, wallet) | Short: collateral, debt, LTV, health |
getBuyQuote(connection, mint, sol) | Tokens out, fees, impact. source: bonding|dex |
getSellQuote(connection, mint, tokens) | SOL out, impact. source: bonding|dex |
getBorrowQuote(connection, mint, collateral) | Max borrow: LTV, pool, per-user caps |
getVault(connection, creator) | Vault state |
getVaultForWallet(connection, wallet) | Reverse vault lookup |
| Function | Description |
|---|---|
buildBuyTransaction | Buy via vault. Auto-routes bonding/DEX |
buildDirectBuyTransaction | Buy without vault (human wallets) |
buildSellTransaction | Sell via vault. Auto-routes bonding/DEX |
buildCreateTokenTransaction | Launch token + treasury + 300M lock |
buildStarTransaction | Star token (0.02 SOL) |
buildMigrateTransaction | Migrate to Raydium (permissionless) |
| Function | Description |
|---|---|
buildBorrowTransaction | Borrow SOL against token collateral |
buildRepayTransaction | Repay debt, unlock collateral |
buildLiquidateTransaction | Liquidate loan (>65% LTV) |
buildOpenShortTransaction | Post SOL, borrow tokens from treasury lock |
buildCloseShortTransaction | Return tokens, recover SOL collateral |
buildLiquidateShortTransaction | Liquidate short (>65% LTV) |
buildClaimProtocolRewardsTransaction | Claim epoch trading rewards |
| Function | Signer |
|---|---|
buildCreateVaultTransaction | creator |
buildDepositVaultTransaction | anyone |
buildWithdrawVaultTransaction | authority |
buildWithdrawTokensTransaction | authority |
buildLinkWalletTransaction | authority |
buildUnlinkWalletTransaction | authority |
buildTransferAuthorityTransaction | authority |
| Function | Description |
|---|---|
buildHarvestFeesTransaction | Harvest 0.04% transfer fees to treasury |
buildSwapFeesToSolTransaction | Swap harvested tokens to SOL via Raydium |
buildReclaimFailedTokenTransaction | Reclaim inactive tokens (7+ days) |
Human (authority) Agent (controller, ~0.01 SOL gas)
├── createVault() ├── buy(vault) → vault pays
├── depositVault(5 SOL) ├── sell(vault) → SOL to vault
├── linkWallet(agent) ├── borrow(vault) → SOL to vault
├── withdrawVault() ← auth only ├── repay(vault) → collateral back
└── unlinkWallet() ← instant ├── openShort(vault) → tokens to vault
└── closeShort(vault)→ SOL to vault
| Guarantee | Mechanism |
|---|---|
| Full custody | Vault holds all SOL and tokens. Controller holds nothing. |
| Closed loop | Every operation returns value to vault. No leakage. |
| Authority separation | Creator (immutable) / Authority (transferable) / Controller (disposable) |
| Instant revocation | Authority unlinks controller in one tx |
| No extraction | Controllers cannot withdraw. Period. |
| Isolated positions | One loan per user per token. One short per user per token. No cascading. |
| Immutable parameters | LTV, liquidation, interest — set at deployment. No admin key changes them. |
If SOLANA_PRIVATE_KEY is provided: must be a fresh disposable keypair (~0.01 SOL gas). All capital lives in vault. If compromised: attacker gets dust, authority revokes in one tx. Key never leaves the runtime.
If not provided: read-only mode — queries state, returns unsigned transactions.
Rules:
Positions can be liquidated. Bad debt is possible in extreme conditions. There is no insurance fund. But:
58 Kani proof harnesses. 59 end-to-end tests. All passing. Core arithmetic formally verified. See VERIFICATION.md.
lib/torchsdk/ | npm | source8hbUkonssSEEtkqzwM7ZcZrD9evacM92TcWSooVF4BeT