{"skill":{"slug":"streme-launcher","displayName":"Streme Token Launcher","summary":"Launch tokens on Streme (streme.fun) - the streaming token platform on Base. Use when deploying SuperTokens with built-in staking rewards, Uniswap V3 liquidity, and optional vesting vaults. Triggers on \"launch token on streme\", \"deploy streme token\", \"create supertoken\", or any Streme token deployment task.","description":"---\nname: streme-launcher\ndescription: Launch tokens on Streme (streme.fun) - the streaming token platform on Base. Use when deploying SuperTokens with built-in staking rewards, Uniswap V3 liquidity, and optional vesting vaults. Triggers on \"launch token on streme\", \"deploy streme token\", \"create supertoken\", or any Streme token deployment task.\n---\n\n# Streme Token Launcher\n\nDeploy SuperTokens on Base via Streme's V2 contracts. Tokens include automatic Uniswap V3 liquidity, Superfluid streaming staking rewards, and optional vesting vaults.\n\n## Quick Start\n\n```typescript\nimport { createWalletClient, http, parseEther, encodeAbiParameters } from 'viem';\nimport { base } from 'viem/chains';\nimport { privateKeyToAccount } from 'viem/accounts';\n\n// See references/contracts.md for full ABIs\nconst DEPLOYER = '0x8712F62B3A2EeBA956508e17335368272f162748';\n\nconst tokenConfig = {\n  _name: 'My Token',\n  _symbol: 'MYTOKEN',\n  _supply: parseEther('100000000000'), // 100B\n  _fee: 10000, // 10%\n  _salt: '0x0...', // from generateSalt()\n  _deployer: walletAddress,\n  _fid: 0n, // Farcaster FID or 0\n  _image: 'https://example.com/image.png',\n  _castHash: 'deployment',\n  _poolConfig: {\n    tick: -230400,\n    pairedToken: '0x4200000000000000000000000000000000000006', // WETH\n    devBuyFee: 10000\n  }\n};\n\n// Deploy with 10% staking (1 day lock, 365 day stream)\nconst stakingAlloc = createStakingAllocation(10, 1, 365);\nawait deployWithAllocations(tokenConfig, [stakingAlloc]);\n```\n\n## Contract Addresses (Base Mainnet)\n\n| Contract | Address |\n|----------|---------|\n| STREME_PUBLIC_DEPLOYER_V2 | `0x8712F62B3A2EeBA956508e17335368272f162748` |\n| STREME_SUPER_TOKEN_FACTORY | `0xB973FDd29c99da91CAb7152EF2e82090507A1ce9` |\n| STREME_ALLOCATION_HOOK | `0xC907788f3e71a6eC916ba76A9f1a7C7C19384c7B` |\n| LP_FACTORY | `0xfF65a5f74798EebF87C8FdFc4e56a71B511aB5C8` |\n| MAIN_STREME (for salt) | `0x5797a398fe34260f81be65908da364cc18fbc360` |\n| WETH (Base) | `0x4200000000000000000000000000000000000006` |\n\n## Deployment Flow\n\n1. **Generate Salt** - Call `generateSalt()` to get deterministic token address\n2. **Upload Image** - Host token image (see Image Hosting below)\n3. **Build Config** - Create tokenConfig and allocations\n4. **Deploy** - Call `deployWithAllocations()`\n\n## Image Hosting\n\nToken images must be publicly accessible URLs. Options:\n\n### IPFS (Recommended)\n```typescript\n// Using Pinata\nconst pinata = new PinataSDK({ pinataJwt: PINATA_JWT });\nconst { IpfsHash } = await pinata.pinFileToIPFS(fileStream);\nconst imageUrl = `https://gateway.pinata.cloud/ipfs/${IpfsHash}`;\n```\n\n### Cloudinary\n```typescript\nimport { v2 as cloudinary } from 'cloudinary';\n\nconst result = await cloudinary.uploader.upload(imagePath, {\n  folder: 'tokens',\n  transformation: [{ width: 400, height: 400, crop: 'fill' }]\n});\nconst imageUrl = result.secure_url;\n```\n\n### Direct URL\nAny publicly accessible image URL works:\n```typescript\nconst imageUrl = 'https://example.com/my-token.png';\n```\n\n### Requirements\n- Format: PNG, JPG, GIF, WebP\n- Size: < 5MB (< 1MB recommended)\n- Dimensions: Square preferred (400x400 ideal)\n\n### Upload Script\n```bash\n# IPFS via Pinata\nPINATA_JWT=xxx npx ts-node scripts/upload-image.ts pinata ./token.png\n\n# Cloudinary\nCLOUDINARY_CLOUD_NAME=xxx CLOUDINARY_API_KEY=xxx CLOUDINARY_API_SECRET=xxx \\\n  npx ts-node scripts/upload-image.ts cloudinary ./token.png\n\n# imgBB (free)\nnpx ts-node scripts/upload-image.ts imgbb ./token.png\n```\n\n## Allocations\n\n### Staking Allocation (Type 1)\nStreams tokens to stakers over time.\n\n```typescript\nfunction createStakingAllocation(\n  percentage: number,    // % of supply (e.g., 10)\n  lockDays: number,      // min stake duration\n  flowDays: number,      // reward stream duration\n  delegate?: string      // optional admin address\n) {\n  const lockSec = lockDays * 86400;\n  const flowSec = flowDays * 86400;\n  \n  return {\n    allocationType: 1,\n    admin: delegate || '0x0000000000000000000000000000000000000000',\n    percentage: BigInt(percentage),\n    data: encodeAbiParameters(\n      [{ type: 'uint256' }, { type: 'int96' }],\n      [BigInt(lockSec), BigInt(flowSec)]\n    )\n  };\n}\n```\n\n### Vault Allocation (Type 0)\nLocked tokens with optional vesting.\n\n```typescript\nfunction createVaultAllocation(\n  percentage: number,     // % of supply\n  beneficiary: string,    // recipient address\n  lockDays: number,       // lockup (min 7 days)\n  vestingDays: number     // vesting after lock\n) {\n  const lockSec = Math.max(lockDays, 7) * 86400;\n  const vestSec = vestingDays * 86400;\n  \n  return {\n    allocationType: 0,\n    admin: beneficiary,\n    percentage: BigInt(percentage),\n    data: encodeAbiParameters(\n      [{ type: 'uint256' }, { type: 'uint256' }],\n      [BigInt(lockSec), BigInt(vestSec)]\n    )\n  };\n}\n```\n\n### Allocation Rules\n- Staking + Vault percentages must be ≤100%\n- Remaining % goes to Uniswap V3 LP\n- Vault lock minimum: 7 days\n- Standard config: 10% staking, 90% LP\n\n## Token Config Defaults\n\n| Parameter | Value |\n|-----------|-------|\n| Supply | 100,000,000,000 (100B) |\n| Creator Fee | 10000 (10%) |\n| Dev Buy Fee | 10000 (10%) |\n| Tick | -230400 |\n| Paired Token | WETH |\n\n## API Endpoints\n\n```bash\n# Get tokens by deployer\nGET https://api.streme.fun/api/tokens/deployer/{address}\n\n# Search all tokens\nGET https://api.streme.fun/api/tokens\n\n# Token details\nGET https://api.streme.fun/api/tokens/{address}\n```\n\n## Full Implementation\n\nSee `scripts/deploy-token.ts` for complete deployment script.\n\nSee `references/contracts.md` for full ABIs and type definitions.\n\n## Common Patterns\n\n### Standard Launch (10% staking)\n```typescript\nconst allocations = [createStakingAllocation(10, 1, 365)];\n```\n\n### With Team Vault (10% staking + 10% vested)\n```typescript\nconst allocations = [\n  createStakingAllocation(10, 1, 365),\n  createVaultAllocation(10, teamAddress, 30, 365)\n];\n```\n\n### Max Liquidity (no allocations)\n```typescript\nconst allocations = [];\n// 100% goes to Uniswap V3 LP\n```\n","tags":{"base":"1.0.0","crypto":"1.0.0","defi":"1.0.0","latest":"1.0.0","streme":"1.0.0","superfluid":"1.0.0","tokens":"1.0.0","web3":"1.0.0"},"stats":{"comments":0,"downloads":2103,"installsAllTime":0,"installsCurrent":0,"stars":1,"versions":1},"createdAt":1769961399774,"updatedAt":1779076560774},"latestVersion":{"version":"1.0.0","createdAt":1769961399774,"changelog":"streme-launcher 1.0.0 – Initial Release\n\n- Launch tokens on Streme (streme.fun) using V2 contracts on Base.\n- Supports deploying SuperTokens with built-in Uniswap V3 liquidity, Superfluid staking rewards, and optional vesting vaults.\n- Provides allocation helpers for staking and vesting configurations.\n- Includes deployment guides, contract addresses, image hosting instructions, and API endpoints.\n- Example scripts and patterns for standard, team-vested, and LP-max launch scenarios.","license":null},"metadata":null,"owner":{"handle":"clawrencestreme","userId":"s171r0v87my5ncmdbfxtj3awgx884w4y","displayName":"clawrencestreme","image":"https://avatars.githubusercontent.com/u/258558815?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1779933251824}}