Smoothsend gasless
Skill aptos-labs/aptos-agent-skills/community-skills/smoothsend-gasless
AI skills for building secure, modern Aptos dApps — Move contracts, TypeScript SDK, and frontend integration for Claude Code, Cursor, and Copilot.
npx -y skills add aptos-labs/aptos-agent-skills --skill smoothsend-gaslessAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 19 stars19 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.9 KB, as published. Nobody here has run it
TypeScript SDK: SmoothSend Gasless Transactions
Purpose
Guide gasless transaction sponsorship on Aptos using SmoothSend. Users sign transactions
via their wallet but never pay gas — you pay per transaction from pre-loaded credits. Works as a drop-in
transactionSubmitter for AptosWalletAdapterProvider.
Paid commercial service: Free on testnet; mainnet uses credit-based billing. See Pricing for current rates.
ALWAYS
- Use
@smoothsend/sdk— official npm package for SmoothSend integration. - Pass
SmoothSendTransactionSubmitterastransactionSubmitterinAptosWalletAdapterProvider— this enables gasless for allsignAndSubmitTransactioncalls. - Store API key in env — use
NEXT_PUBLIC_SMOOTHSEND_API_KEYorVITE_SMOOTHSEND_API_KEY(never hardcode). - Use testnet for development — testnet is always free; no credits required.
- Handle 402 (Insufficient credits) — API returns 402 when credits run out; show user-friendly message and link to billing.
NEVER
- Do not expose API key in server-side only apps to client — for frontend, use
NEXT_PUBLIC_orVITE_prefixed env vars. - Do not skip
transactionSubmitter— without it, users pay gas themselves; the provider falls back to normal submission. - Do not use Script Composer for arbitrary transactions — Script Composer is for stablecoin transfers (USDC, USDT, etc.) only; use Wallet Adapter for everything else.
Method 1: Wallet Adapter (Recommended — Any Transaction)
Use for swaps, NFT mints, contract calls — any transaction type.
Installation
npm install @smoothsend/sdk @aptos-labs/wallet-adapter-react
Provider Setup (3 lines)
import { SmoothSendTransactionSubmitter } from "@smoothsend/sdk";
import { AptosWalletAdapterProvider } from "@aptos-labs/wallet-adapter-react";
import { Network } from "@aptos-labs/ts-sdk";
const smoothSend = new SmoothSendTransactionSubmitter({
apiKey: process.env.NEXT_PUBLIC_SMOOTHSEND_API_KEY!,
network: "mainnet" // or 'testnet' (always free)
});
export function Providers({ children }: { children: React.ReactNode }) {
return (
<AptosWalletAdapterProvider
autoConnect={true}
dappConfig={{
network: Network.MAINNET,
transactionSubmitter: smoothSend
}}
onError={(error) => console.error("Wallet error:", error)}
>
{children}
</AptosWalletAdapterProvider>
);
}
After this, every signAndSubmitTransaction call is gasless. No other code changes needed.
Method 2: Script Composer (Fee-in-Token — Stablecoin Only)
Use for USDC, USDT, WBTC, USDe, USD1 transfers. Fee (~$0.01) is deducted from the token being sent — no APT or SmoothSend credits required.
import { ScriptComposerClient } from "@smoothsend/sdk";
const client = new ScriptComposerClient({
apiKey: process.env.NEXT_PUBLIC_SMOOTHSEND_API_KEY!,
network: "mainnet"
});
// USDC Mainnet asset address
const USDC_ASSET = "0xbae207659db88bea0cbead6da0ed00aac12edcdda169e591cd41c94180b46f3b";
const build = await client.buildTransfer({
sender: walletAddress,
recipient: "0xRecipient...",
amount: "1000000", // 1 USDC (6 decimals)
assetType: USDC_ASSET,
decimals: 6,
symbol: "USDC"
});
// Sign with wallet, then submit build.signedTransaction
Error Handling
try {
const response = await signAndSubmitTransaction(payload);
await aptos.waitForTransaction({ transactionHash: response.hash });
} catch (error: any) {
if (error?.status === 402 || error?.message?.includes("Insufficient credits")) {
// Credits exhausted — show upgrade CTA
toast.error("Service temporarily unavailable. Please try again later.");
window.open("https://dashboard.smoothsend.xyz/billing", "_blank");
} else {
throw error;
}
}
Pricing
See SmoothSend Pricing for current rates. Testnet is free; mainnet uses credit packs.
Common Mistakes
| Mistake | Correct approach |
|---|---|
Forgetting transactionSubmitter | Pass smoothSend in dappConfig |
| Hardcoding API key | Use env var with NEXT_PUBLIC_ or VITE_ prefix |
| Using Script Composer for non-transfer tx | Use Wallet Adapter for swaps, mints, contract calls |
| Not handling 402 | Catch and show user-friendly message + billing link |
| Wrong network | Match network in SmoothSend config to dappConfig.network |
References
- SmoothSend Docs: https://docs.smoothsend.xyz
- Pricing: https://docs.smoothsend.xyz/pricing
- Dashboard: https://dashboard.smoothsend.xyz
- npm: https://www.npmjs.com/package/@smoothsend/sdk
- MCP (AI context):
npx @smoothsend/mcp— tools for get_docs, estimate_credits, get_code_snippet - Related: ts-sdk-wallet-adapter, ts-sdk-transactions