{
  "schemaVersion": "1.0",
  "item": {
    "slug": "streme-launcher",
    "name": "Streme Token Launcher",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/clawrencestreme/streme-launcher",
    "canonicalUrl": "https://clawhub.ai/clawrencestreme/streme-launcher",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/streme-launcher",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=streme-launcher",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/deploy-token.ts",
      "scripts/upload-image.ts",
      "references/contracts.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/streme-launcher"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/streme-launcher",
    "agentPageUrl": "https://openagent3.xyz/skills/streme-launcher/agent",
    "manifestUrl": "https://openagent3.xyz/skills/streme-launcher/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/streme-launcher/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Streme Token Launcher",
        "body": "Deploy SuperTokens on Base via Streme's V2 contracts. Tokens include automatic Uniswap V3 liquidity, Superfluid streaming staking rewards, and optional vesting vaults."
      },
      {
        "title": "Quick Start",
        "body": "import { 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]);"
      },
      {
        "title": "Contract Addresses (Base Mainnet)",
        "body": "ContractAddressSTREME_PUBLIC_DEPLOYER_V20x8712F62B3A2EeBA956508e17335368272f162748STREME_SUPER_TOKEN_FACTORY0xB973FDd29c99da91CAb7152EF2e82090507A1ce9STREME_ALLOCATION_HOOK0xC907788f3e71a6eC916ba76A9f1a7C7C19384c7BLP_FACTORY0xfF65a5f74798EebF87C8FdFc4e56a71B511aB5C8MAIN_STREME (for salt)0x5797a398fe34260f81be65908da364cc18fbc360WETH (Base)0x4200000000000000000000000000000000000006"
      },
      {
        "title": "Deployment Flow",
        "body": "Generate Salt - Call generateSalt() to get deterministic token address\nUpload Image - Host token image (see Image Hosting below)\nBuild Config - Create tokenConfig and allocations\nDeploy - Call deployWithAllocations()"
      },
      {
        "title": "Image Hosting",
        "body": "Token images must be publicly accessible URLs. Options:"
      },
      {
        "title": "IPFS (Recommended)",
        "body": "// Using Pinata\nconst pinata = new PinataSDK({ pinataJwt: PINATA_JWT });\nconst { IpfsHash } = await pinata.pinFileToIPFS(fileStream);\nconst imageUrl = `https://gateway.pinata.cloud/ipfs/${IpfsHash}`;"
      },
      {
        "title": "Cloudinary",
        "body": "import { 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;"
      },
      {
        "title": "Direct URL",
        "body": "Any publicly accessible image URL works:\n\nconst imageUrl = 'https://example.com/my-token.png';"
      },
      {
        "title": "Requirements",
        "body": "Format: PNG, JPG, GIF, WebP\nSize: < 5MB (< 1MB recommended)\nDimensions: Square preferred (400x400 ideal)"
      },
      {
        "title": "Upload Script",
        "body": "# 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"
      },
      {
        "title": "Staking Allocation (Type 1)",
        "body": "Streams tokens to stakers over time.\n\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}"
      },
      {
        "title": "Vault Allocation (Type 0)",
        "body": "Locked tokens with optional vesting.\n\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}"
      },
      {
        "title": "Allocation Rules",
        "body": "Staking + Vault percentages must be ≤100%\nRemaining % goes to Uniswap V3 LP\nVault lock minimum: 7 days\nStandard config: 10% staking, 90% LP"
      },
      {
        "title": "Token Config Defaults",
        "body": "ParameterValueSupply100,000,000,000 (100B)Creator Fee10000 (10%)Dev Buy Fee10000 (10%)Tick-230400Paired TokenWETH"
      },
      {
        "title": "API Endpoints",
        "body": "# 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}"
      },
      {
        "title": "Full Implementation",
        "body": "See scripts/deploy-token.ts for complete deployment script.\n\nSee references/contracts.md for full ABIs and type definitions."
      },
      {
        "title": "Standard Launch (10% staking)",
        "body": "const allocations = [createStakingAllocation(10, 1, 365)];"
      },
      {
        "title": "With Team Vault (10% staking + 10% vested)",
        "body": "const allocations = [\n  createStakingAllocation(10, 1, 365),\n  createVaultAllocation(10, teamAddress, 30, 365)\n];"
      },
      {
        "title": "Max Liquidity (no allocations)",
        "body": "const allocations = [];\n// 100% goes to Uniswap V3 LP"
      }
    ],
    "body": "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\nQuick Start\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\nContract Addresses (Base Mainnet)\nContract\tAddress\nSTREME_PUBLIC_DEPLOYER_V2\t0x8712F62B3A2EeBA956508e17335368272f162748\nSTREME_SUPER_TOKEN_FACTORY\t0xB973FDd29c99da91CAb7152EF2e82090507A1ce9\nSTREME_ALLOCATION_HOOK\t0xC907788f3e71a6eC916ba76A9f1a7C7C19384c7B\nLP_FACTORY\t0xfF65a5f74798EebF87C8FdFc4e56a71B511aB5C8\nMAIN_STREME (for salt)\t0x5797a398fe34260f81be65908da364cc18fbc360\nWETH (Base)\t0x4200000000000000000000000000000000000006\nDeployment Flow\nGenerate Salt - Call generateSalt() to get deterministic token address\nUpload Image - Host token image (see Image Hosting below)\nBuild Config - Create tokenConfig and allocations\nDeploy - Call deployWithAllocations()\nImage Hosting\n\nToken images must be publicly accessible URLs. Options:\n\nIPFS (Recommended)\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\nCloudinary\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\nDirect URL\n\nAny publicly accessible image URL works:\n\nconst imageUrl = 'https://example.com/my-token.png';\n\nRequirements\nFormat: PNG, JPG, GIF, WebP\nSize: < 5MB (< 1MB recommended)\nDimensions: Square preferred (400x400 ideal)\nUpload Script\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\nAllocations\nStaking Allocation (Type 1)\n\nStreams tokens to stakers over time.\n\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\nVault Allocation (Type 0)\n\nLocked tokens with optional vesting.\n\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\nAllocation Rules\nStaking + Vault percentages must be ≤100%\nRemaining % goes to Uniswap V3 LP\nVault lock minimum: 7 days\nStandard config: 10% staking, 90% LP\nToken Config Defaults\nParameter\tValue\nSupply\t100,000,000,000 (100B)\nCreator Fee\t10000 (10%)\nDev Buy Fee\t10000 (10%)\nTick\t-230400\nPaired Token\tWETH\nAPI Endpoints\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\nFull Implementation\n\nSee scripts/deploy-token.ts for complete deployment script.\n\nSee references/contracts.md for full ABIs and type definitions.\n\nCommon Patterns\nStandard Launch (10% staking)\nconst allocations = [createStakingAllocation(10, 1, 365)];\n\nWith Team Vault (10% staking + 10% vested)\nconst allocations = [\n  createStakingAllocation(10, 1, 365),\n  createVaultAllocation(10, teamAddress, 30, 365)\n];\n\nMax Liquidity (no allocations)\nconst allocations = [];\n// 100% goes to Uniswap V3 LP"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/clawrencestreme/streme-launcher",
    "publisherUrl": "https://clawhub.ai/clawrencestreme/streme-launcher",
    "owner": "clawrencestreme",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/streme-launcher",
    "downloadUrl": "https://openagent3.xyz/downloads/streme-launcher",
    "agentUrl": "https://openagent3.xyz/skills/streme-launcher/agent",
    "manifestUrl": "https://openagent3.xyz/skills/streme-launcher/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/streme-launcher/agent.md"
  }
}