创建代币
POST https://api.shrine.trade/bnb/api/create-token
为你构建 Flap 的发币交易:通过 Flap 的 IPFS 网关固定元数据、Flap 要求的靓号地址、你想要的税设置,以及(如果需要)同一笔交易里的开发者买入。你签名并发送,交易确认的那一刻代币和它的联合曲线就存在了。
shrine.trade 不收取创建费用,Flap 也不收:唯一的成本是 Gas。交易的 value 就是你的开发者买入(如果有)。
每次发射都上 Flap 联合曲线,卖出 8 亿枚后自动毕业到 PancakeSwap。两种代币:
- 普通币:不带税。毕业到 PancakeSwap Infinity 池子,LP 费用作为分红发给持有者。
- 税币:你设定买入税和卖出税,每笔交易收取。Flap 的税系统决定它去哪:给你、销毁、分给持有者、注入流动性,或任意组合。毕业到 PancakeSwap v2。Flap 上大多数发射都是这种。
私钥永远不会离开你的机器。 它在本地签名,只有签好的交易会交给 /api/send 广播。私钥本身永远不会发给 shrine.trade。
固定优先:构建会等图片和元数据在 IPFS 上固定完成,所以代币一发射就带着图片出现在 flap.sh 上。
示例
- JavaScript
- Python
const { readFileSync } = require("node:fs");
const { Wallet } = require("ethers");
// ─── 你的代币 ───────────────────────────────────────
const PRIVATE_KEY = "0xYOUR_PRIVATE_KEY";
const NAME = "Grene";
const SYMBOL = "GRENE";
const IMAGE = "./logo.png"; // 图片文件,和脚本放在一起
const DESCRIPTION = "the greenest coin on BNB Chain";
// ─── 链接,都可选,留空即不填 ────────────────────
const TWITTER = "https://x.com/grene";
const TELEGRAM = "";
const WEBSITE = "https://grene.example";
// ─── 经济模型 ────────────────────────────────────────
const PAIR_TOKEN = "BNB"; // 曲线的计价资产:BNB、USD1、NVDAB 或 TSLAB 等股票代号,或一个地址
const DEV_BUY = ""; // 你自己的开盘买入,以 PAIR_TOKEN 计。"" = 不买
const BUY_TAX = 0; // 每笔买入的税率 %。两个都为 0 = 普通币
const SELL_TAX = 0; // 每笔卖出的税率 %
const BENEFICIARY = ""; // 你那份税打到哪。"" = 发币钱包
// 税怎么分,占税的 %,加起来必须是 100:
const TO_YOU = 100; // 给 BENEFICIARY,以计价资产支付
const BURNED = 0;
const TO_HOLDERS = 0; // 作为分红,以 DIVIDEND_TOKEN 支付
const TO_LIQUIDITY = 0;
const DIVIDEND_TOKEN = "quote"; // "quote"、"self" 或一个 ERC-20 地址
// ──────────────────────────────────────────────────────
async function main() {
const wallet = new Wallet(PRIVATE_KEY); // 只用来签名,不连任何节点
// 1. 通过 Flap 的 IPFS 网关固定图片和元数据。
const form = new FormData();
form.append("file", new Blob([readFileSync(IMAGE)], { type: "image/png" }), "logo.png");
form.append("description", DESCRIPTION);
form.append("twitter", TWITTER);
form.append("telegram", TELEGRAM);
form.append("website", WEBSITE);
const up = await fetch("https://api.shrine.trade/bnb/api/upload-image", {
method: "POST",
body: form,
});
const uploaded = await up.json();
if (uploaded.error) throw new Error(`${uploaded.error}: ${uploaded.message}`);
console.log("元数据已固定:", uploaded.meta);
// 2. 让 shrine.trade 构建发币交易。
const res = await fetch("https://api.shrine.trade/bnb/api/create-token", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
name: NAME,
symbol: SYMBOL,
meta: uploaded.meta,
pairToken: PAIR_TOKEN,
buyTaxBps: BUY_TAX * 100,
sellTaxBps: SELL_TAX * 100,
// 为空时整个省略,API 会用合理的默认值。
...(DEV_BUY ? { initialBuy: DEV_BUY } : {}),
...(BENEFICIARY ? { beneficiary: BENEFICIARY } : {}),
...(BUY_TAX || SELL_TAX ? {
marketingBps: TO_YOU * 100, deflationBps: BURNED * 100,
dividendBps: TO_HOLDERS * 100, lpBps: TO_LIQUIDITY * 100,
dividendToken: DIVIDEND_TOKEN,
} : {}),
from: wallet.address,
}),
});
const body = await res.json();
if (body.error) throw new Error(`${body.error}: ${body.message}`);
console.log("代币地址将是", body.token, "-", body.tokenType);
// 3. 本地签名,私钥不会离开这个脚本。
// 4. 把签好的交易按顺序交给 API 广播(USD1 开发者买入前面会多一笔授权)。
// 不需要自己的 RPC。
let explorer;
for (const tx of body.txs) {
const signed = await wallet.signTransaction({
to: tx.to, data: tx.data, value: BigInt(tx.value), gasLimit: BigInt(tx.gas),
maxFeePerGas: BigInt(tx.maxFeePerGas), maxPriorityFeePerGas: BigInt(tx.maxPriorityFeePerGas),
nonce: tx.nonce, chainId: tx.chainId, type: 2,
});
const sent = await (await fetch("https://api.shrine.trade/bnb/api/send", {
method: "POST", headers: { "content-type": "application/json" },
body: JSON.stringify({ signedTx: signed }),
})).json();
if (sent.error) throw new Error(`${sent.error}: ${sent.message}`);
if (sent.status !== "landed") throw new Error(`${tx.description} ${sent.status}: ${sent.explorer}`);
explorer = sent.explorer;
}
// 5. 地址在发送前就已知:Flap 用 CREATE2 部署。
console.log("代币已发射:", body.token);
console.log("tx:", explorer);
console.log("页面:", "https://flap.sh/token/" + body.token);
}
main();
保存为 launch.js,把图片命名为 logo.png 放在旁边,然后:
npm install ethers
node launch.js
import requests
from eth_account import Account
# ─── 你的代币 ───────────────────────────────────────
PRIVATE_KEY = "0xYOUR_PRIVATE_KEY"
NAME = "Grene"
SYMBOL = "GRENE"
IMAGE = "./logo.png" # 图片文件,和脚本放在一起
DESCRIPTION = "the greenest coin on BNB Chain"
# ─── 链接,都可选,留空即不填 ────────────────────
TWITTER = "https://x.com/grene"
TELEGRAM = ""
WEBSITE = "https://grene.example"
# ─── 经济模型 ────────────────────────────────────────
PAIR_TOKEN = "BNB" # 曲线的计价资产:BNB、USD1、NVDAB 或 TSLAB 等股票代号,或一个地址
DEV_BUY = "" # 你自己的开盘买入,以 PAIR_TOKEN 计。"" = 不买
BUY_TAX = 0 # 每笔买入的税率 %。两个都为 0 = 普通币
SELL_TAX = 0 # 每笔卖出的税率 %
BENEFICIARY = "" # 你那份税打到哪。"" = 发币钱包
# 税怎么分,占税的 %,加起来必须是 100:
TO_YOU = 100 # 给 BENEFICIARY,以计价资产支付
BURNED = 0
TO_HOLDERS = 0 # 作为分红,以 DIVIDEND_TOKEN 支付
TO_LIQUIDITY = 0
DIVIDEND_TOKEN = "quote" # "quote"、"self" 或一个 ERC-20 地址
# ──────────────────────────────────────────────────────
account = Account.from_key(PRIVATE_KEY) # 只用来签名,不连任何节点
# 1. 通过 Flap 的 IPFS 网关固定图片和元数据。
with open(IMAGE, "rb") as f:
up = requests.post(
"https://api.shrine.trade/bnb/api/upload-image",
files={"file": ("logo.png", f, "image/png")},
data={"description": DESCRIPTION, "twitter": TWITTER, "telegram": TELEGRAM, "website": WEBSITE},
).json()
if "error" in up:
raise SystemExit(f"{up['error']}: {up['message']}")
print("元数据已固定:", up["meta"])
# 2. 构建发币交易。
payload = {
"name": NAME, "symbol": SYMBOL, "meta": up["meta"],
"pairToken": PAIR_TOKEN, "buyTaxBps": BUY_TAX * 100, "sellTaxBps": SELL_TAX * 100,
"from": account.address,
}
if DEV_BUY:
payload["initialBuy"] = DEV_BUY
if BENEFICIARY:
payload["beneficiary"] = BENEFICIARY
if BUY_TAX or SELL_TAX:
payload.update({"marketingBps": TO_YOU * 100, "deflationBps": BURNED * 100,
"dividendBps": TO_HOLDERS * 100, "lpBps": TO_LIQUIDITY * 100,
"dividendToken": DIVIDEND_TOKEN})
body = requests.post("https://api.shrine.trade/bnb/api/create-token", json=payload).json()
if "error" in body:
raise SystemExit(f"{body['error']}: {body['message']}")
print("代币地址将是", body["token"], "-", body["tokenType"])
# 3. 本地签名,把签好的交易按顺序交给 API 广播。
for tx in body["txs"]:
signed = Account.sign_transaction(
{
"to": tx["to"], "data": tx["data"], "value": int(tx["value"]), "gas": tx["gas"],
"maxFeePerGas": int(tx["maxFeePerGas"]), "maxPriorityFeePerGas": int(tx["maxPriorityFeePerGas"]),
"nonce": tx["nonce"], "chainId": tx["chainId"],
},
account.key,
)
sent = requests.post("https://api.shrine.trade/bnb/api/send", json={"signedTx": "0x" + signed.raw_transaction.hex().removeprefix("0x")}).json()
if "error" in sent:
raise SystemExit(f"{sent['error']}: {sent['message']}")
if sent["status"] != "landed":
raise SystemExit(f"{tx['description']} {sent['status']}: {sent['explorer']}")
print(tx["description"] + ":", sent["explorer"])
print("代币已发射:", body["token"])
print("页面:", "https://flap.sh/token/" + body["token"])
保存为 launch.py,把图片命名为 logo.png 放在旁边,然后:
pip install eth-account requests
python launch.py
支持的计价资产
Flap 代币可以用 BNB 计价,可以用稳定币或主流币计价,也可以用币安在 BNB 链上发行的代币化股票和 ETF 计价:一个直接对着英伟达、特斯拉、SpaceX、标普 500 或黄金交易的 meme 币。Flap 还接受其他 Flap 代币作为计价资产("子币")。pairToken 传 "BNB"、下表中的代号(不分大小写)或一个地址;Flap 未启用的资产返回 pair_token_not_approved。
选定后发射时固定,就是曲线里存的东西。买家照样用 BNB 付款:下面每一种资产,Flap 都会在买入交易内部把 BNB 换成计价资产,卖出默认换回 BNB。股票计价的代币,税也以那只股票收取:marketingBps 用 NVDAB 付给你,dividendBps 用它分给持有者(dividendToken 默认就是计价资产)。
加密资产
| 代码 | 资产 | 精度 | 地址 |
|---|---|---|---|
BNB | BNB | 18 | 原生 BNB,无地址 |
USDT | Tether USD | 18 | 0x55d398326f99059fF775485246999027B3197955 |
USD1 | USD1 | 18 | 0x8d0D000Ee44948FC98c9B98A4FA4921476f08B0d |
U | United Stables | 18 | 0xcE24439F2D9C6a2289F741120FE202248B666666 |
lisUSD | Lista USD | 18 | 0x0782b6d8c4551B9760e74c0545a9bCD90bdc41E5 |
BTCB | Bitcoin (BTCB) | 18 | 0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c |
ETH | Ethereum | 18 | 0x2170Ed0880ac9A755fd29B2688956BD959F933F8 |
SOL | Solana | 18 | 0x570A5D26f7765Ecb712C0924E4De545B89fD43dF |
股票、ETF 与黄金
币安发行的代币化股票,每个代币对应一股标的:1 个 NVDAB 就是一股英伟达,所以 NVDAB 发射里 0.01 的开发者买入是百分之一股。
| 代码 | 资产 | 精度 | 地址 |
|---|---|---|---|
XAUT | Tether Gold | 6 | 0x21cAef8A43163Eea865baeE23b9C2E327696A3bf |
SPYB | SPY (S&P 500 ETF) | 18 | 0x7138b48df7D98D7e3cc221BfE7192D0a178182D8 |
QQQB | Invesco QQQ Trust | 18 | 0x205812CdBed920aFf76C6580abD681a46D11efc7 |
NVDAB | NVIDIA | 18 | 0x02Fca66C1D1aFB4E2A7884261eB00F63598a7436 |
AAPLB | Apple | 18 | 0x431a3BEE82E2ca41e49895CbECE5bB0F76A89b7A |
TSLAB | Tesla | 18 | 0x5b1910eAaD6450E50f816082Aa078C41F10C292f |
MSFTB | Microsoft | 18 | 0x80106cb3EAD06659A5ad19DF39D9b4733863B9b0 |
GOOGLB | Alphabet | 18 | 0x3F53De71c126BdaBAe20f9cD64848d317f6C3238 |
SPCXB | SpaceX | 18 | 0xbe9D156892E55e7154BcD3cB0FEA677F9D3103E1 |
SKHYB | SK Hynix | 18 | 0xCA750eF65f295BBECd685Abf54e82CAf297BDB61 |
HOODB | Robinhood | 18 | 0xA394dCEa3fd3847fD793afBFd163E2e3858B7c65 |
BABAB | Alibaba | 18 | 0x4eF9d3062c7F6ebA4AAE4990c5036598C6eff4ec |
GMEB | GameStop | 18 | 0x46cEeFDa28Dd7207059ed19B0acdc026955bb15C |
NFLXB | Netflix | 18 | 0xD6829Ea836b6FA224d099D40E54B31262f874631 |
MSTRB | Strategy (MicroStrategy) | 18 | 0xE87afb3076AeB0f9B14E368DE8145ae6a2826A14 |
DJTB | Trump Media & Technology Group | 18 | 0xF2ec508422174Ee564de98187db9359D318AFB6b |
MRNAB | Moderna | 18 | 0x5fd86da9B05abE396fe9d02a4A213A7c00556503 |
FLNCB | Fluence Energy | 18 | 0x4af1D41cd9dD950dcA43984b43aaA2A8702714Ac |
SOXLB | Direxion Semiconductor Bull 3X ETF | 18 | 0xd97d097a89113fa59b76c572E5b2Eb647E8eefaf |
SOXSB | Direxion Semiconductor Bear 3X ETF | 18 | 0xE28Cd11C99AF2df76bb8aDA4Cd0ef3904378280F |
以上是 2026 年 9 月的列表。币安发行新股票并由 Flap 启用后,它的地址立刻就能作为 pairToken 使用,代号会在下一个版本加入。
无论用什么计价,每条曲线都在同一个点毕业:10 亿总量中卖出 8 亿。这是 Flap 的 Portal 在 BNB 链上唯一接受的毕业点。
税系统
税币的税分四路,以 bps 计,加起来 10000:
| 份额 | 去向 |
|---|---|
marketingBps | beneficiary,以计价资产自动支付。这是创作者的收益。 |
deflationBps | 销毁。 |
dividendBps | 持有至少 minimumShareBalance 枚代币的人,以 dividendToken 支付:计价资产、代币本身或另一个 ERC-20。通过 创作者收益 领取。 |
lpBps | 注入代币的 PancakeSwap 流动性。 |
默认全部给受益人。买入税和卖出税可以不同(buyTaxBps: 300, sellTaxBps: 1000 很常见);税在毕业后持续 taxDays 天,并在毕业后的 antiFarmerHours 小时内对所有池子而不只是主池生效。在曲线上,税作为每笔交易的额外费用收取,去向相同。
在到达以上任何一处之前,Flap 会保留最多 0.3% 的征税交易量。shrine.trade 分文不取。这里的一切在发射时固定。
请求
| 字段 | 类型 | 说明 |
|---|---|---|
name | 字符串 | 代币名称。不唯一,永远用地址识别代币。 |
symbol | 字符串 | 代号。 |
logo | 字符串 | 图片 URL,或 base64 的 data: URL。API 会获取它并通过 Flap 网关固定图片和元数据。与 meta 二选一。 |
meta | 字符串 | 已通过 POST /api/upload-image 固定的元数据 CID(上面的脚本就是这么做的)。跳过固定步骤,此时忽略 description 和 socials。 |
description | 字符串,可选 | 项目简介,和图片一起固定。 |
socials | 对象,可选 | { twitter, telegram, website },任意项可为 ""。 |
pairToken | 字符串,可选 | 曲线的计价资产。"BNB"(默认)、支持的计价资产 中的代号如 "USD1" 或 "NVDAB",或 Flap 已启用的任何计价资产地址。 |
initialBuy | 十进制字符串,可选 | 同一笔交易里你自己的开盘买入,以计价资产计(BNB 发射即 BNB)。它在创建曲线的交易内执行,没人能抢在前面。USD1 的开发者买入前面会多一笔 approve_quote。 |
buyTaxBps / sellTaxBps | 数字,可选 | 每笔买入 / 卖出的税,bps(100 = 1%)。任一大于 0 即为税币,两者可以不同。发射后不可更改。默认 0。 |
taxDays | 数字,可选 | 税币:毕业后税持续的天数。默认 365。 |
antiFarmerHours | 数字,可选 | 税币:毕业后这么多小时内税对所有池子生效,防止 LP 挖矿绕过。最多 8760。默认 0。 |
beneficiary | 地址,可选 | 税币:税中营销份额的去向。默认为 from。 |
marketingBps / deflationBps / dividendBps / lpBps | 数字,可选 | 税币:税如何分配,占税的 bps:给受益人、销毁、分给持有者、注入流动性。必须加起来 10000,未填的为 0。默认全部给受益人。 |
dividendToken | 字符串,可选 | 配合 dividendBps:持有者收到什么。"quote"(默认)为计价资产,"self" 为代币本身,或 Flap 能兑换到的 ERC-20 地址。 |
minimumShareBalance | 十进制字符串,可选 | 有分红时(带 dividendBps 的税币,以及所有普通币):持有者领取分红所需的最低余额。Flap 的下限是 10000,也是默认值。 |
slippage | 数字,可选 | 开发者买入的滑点百分比。默认 5。 |
from | 地址 | 你的钱包(创作者)。 |
发币要花多少
Flap 不收创建费,所以发币只花 Gas:按 BNB 链平常的 0.05 gwei,税币约 0.0004 BNB,普通币更少,再加你的开发者买入。节点在执行前会预留 gasLimit x maxFeePerGas,两个数字都有余量(上限多 20%,价格上限 1.25 倍),所以钱包要比实际花费多持有一点,差额同一区块退回。准备 0.001 BNB 做一次普通发射就不会不够。
Flap 对每个创作者钱包有发币频率限制,触发时返回 launch_rate_limited。
返回
一个真实的例子,3%/3% 税币,带 0.001 BNB 开发者买入:
{
"txs": [
{
"to": "0xe2cE6ab80874Fa9Fa2aAE65D277Dd6B8e65C9De0",
"data": "0x…",
"value": "1000000000000000",
"gas": 7230661,
"maxFeePerGas": "62500000",
"maxPriorityFeePerGas": "50000000",
"nonce": 12,
"chainId": 56,
"type": 2,
"description": "create"
}
],
"token": "0x32e00b9c8eb2ff2462b61b692475d7670ea07777",
"salt": "0xe37d685461db060f32606abcd0af9c18d4bc275244d46edbf0123869d1367347",
"tokenType": "tax_v3",
"launchFee": "0",
"launchFeeFormatted": "0",
"pairToken": "BNB",
"pairTokenSymbol": "BNB",
"pairTokenDecimals": 18,
"graduationSupply": "800000000000000000000000000",
"graduationSupplyFormatted": "800000000",
"meta": "bafkreieraixgnucog5qpve3qqqapghudod7ogi5ztlorgavbjszahk3lga",
"metaUri": "https://ipfs.io/ipfs/bafkreieraixgnucog5qpve3qqqapghudod7ogi5ztlorgavbjszahk3lga",
"beneficiary": "0x8894E0a0c962CB723c1976a4421c95949bE2D4E3",
"buyTaxBps": 300,
"sellTaxBps": 300,
"tax": {
"taxDays": 365,
"antiFarmerHours": 0,
"marketingBps": 10000,
"deflationBps": 0,
"dividendBps": 0,
"lpBps": 0,
"dividendToken": "quote",
"minimumShareBalance": "0"
},
"initialBuy": "1000000000000000",
"initialBuyFormatted": "0.001",
"expectedTokensOut": "173060121205804955576978",
"expectedTokensOutFormatted": "173060.121205804955576978",
"expectedEconomics": "Flap tax token: 3.00% tax on buys and 3.00% on sells for 365 days after graduation …"
}
txs:按顺序签名并发送。通常只有一笔create。ERC-20 计价的开发者买入前面会多一笔approve_quote。token:代币地址,发送前就已知:Flap 用 CREATE2 和我们搜索到的salt部署。税币以7777结尾,普通币以8888结尾,Flap 要求如此。tokenType:standard_v3或tax_v3。launchFee:永远是0,Flap 不收创建费。交易的value是开发者买入。meta/metaUri:固定好的元数据,CID 和网关地址。beneficiary、buyTaxBps、sellTaxBps、tax:回显发射将使用的设置:税的时长和防挖矿窗口、分配比例、分红代币和持有门槛。普通币的lpFeesTo永远是holders。initialBuy、expectedTokensOut:以计价资产基础单位计的开发者买入及其得到的代币数,按真实发射模拟。仅在有initialBuy时出现。expectedEconomics:代币条款的一句话总结。