跳到正文

文档 · v0.1

规则与接口文档

网站只调用只读接口;/api/prepare/* 仅供 Agent 构造交易使用。

00机制

基于 sato 的曲线机制 · 铭文代币,曲线即做市商

a曲线即做市商

Sats 没有预铸,也没有外部流动性池。合约里的曲线本身就是唯一的对手方:买入时按曲线价现铸,卖出时按曲线价回收并销毁。

价格只由曲线资金 U 决定,任何时候都可以买卖,不依赖挂单深度。机制沿用 sato / sat1 的同一公式。

曲线价 p(U) = (S ÷ 21,000,000) × e^(U ÷ S)
已铸出 Q(U) = 21,000,000 × (1 − e^(−U ÷ S))
S = 21,000(开启时锁定)

b价格与供应

曲线资金每增加 S × ln2 ≈ 14,556 USDT,价格翻一倍。2,100 万是渐近上限,曲线资金再多也铸不满。

卖出让曲线资金减少,价格沿同一条曲线回落。

到达 m 倍所需曲线资金 = S × ln(m)
2× ≈ 14,556 · 10× ≈ 48,354 · 100× ≈ 96,709 USDT

csat20 铸币期

开启后 48,000 个区块(约 6 小时)内,只有 sat20 能在曲线上铸币。每张 sat20 铸一次,铸完即销毁。

额度从 21 USDT 开始,按区块线性增长,40,000 个区块(约 5 小时)涨到 2,100 USDT,之后保持到铸币期结束。单张最少 5 USDT,单笔最多 5 张、合计不超过 2,100 USDT。

额度只决定每张可铸的上限,成交价由当时的曲线价决定。

额度(b) = 21 + 2,079 × min(b − B0, 40,000) ÷ 40,000

d金库

每张铭刻的 2.1 USDT 全部进金库。开启时金库总额 = 当时存在的 sat20 × 2.1(铭满且无销毁时为 44,100 USDT)。

开启起分 168 轮,第一轮在开启区块,之后每轮在上一轮执行后至少 8,000 个区块(合计至少约 7 天),在曲线上买入 Sats,买到的 Sats 全部归当时的 sat20 持有人。任何人都可以触发到期的轮次。

第 n 轮累计买入 = T × n ÷ 168

e交易费

曲线上每笔买卖收 1%:0.9% 归 sat20 持有人,0.1% 为协议费。铸币与金库释放同样计入。

Sats 普通转账不收税;sat20 市场成交收 2%,由卖方承担。

每张每日交易费 ≈ 每日曲线成交额 × 0.9% ÷ 剩余 sat20

f分配基数

金库释放与交易费按当时存在的 sat20 张数平分。张数只减不增:铸币即销毁,开启前销毁返还也会减少。

铸币进入曲线的资金推高曲线价;分配始终按剩余张数计算。

如果 21,000 张全部铸完,sat20 不再存在,之后曲线税全部作为协议费归项目方收款地址,Sats 照常在曲线上自由买卖。

g风险

曲线价格随买卖双向变动,卖出也会让价格回落。动态模拟仅按假设推演,不代表未来结果。合约开启后参数永久锁定,无法修改。

01核心规则

  1. 总量21,000 张,编号 1–21000,永不增发;24 小时内没铭刻完的永远不会发行。
  2. 铭刻持 Binance Agent ID 的钱包 2.1 USDT 一张,每个 ID 累计最多 5 次,全部进金库。
  3. 销毁开启前可销毁 sat20,从金库返还 2.1 USDT;铭刻次数不恢复。
  4. sat20 市场链上挂单 / 求购,成交收 2%,由卖方承担。
  5. 开启开启区块至少提前约 1 小时公布,只能推迟;开启时合约永久锁定。
  6. sat20 铸币期开启后 48,000 区块只有 sat20 能在曲线上铸币;每张一次,额度 21 → 2,100 USDT(40,000 区块涨满),铸完销毁。
  7. Sats 曲线已铸出 = 2100 万 × (1 − e^(−曲线资金 ÷ 21,000));买入现铸、卖出销毁,每笔 1% 税:0.9% 归 sat20 持有人,0.1% 为协议费。
  8. 线性释放金库开启起分 168 轮等额释放(每轮间隔至少 8,000 区块,合计至少约 7 天),在曲线上买入 Sats,归 sat20 持有人。

02通用约定

金额
字符串形式的最小单位整数,字段名以 Raw 结尾;USDT 精度固定为 18
时间
秒级 Unix 时间戳(链上区块时间)
地址
EIP-55 校验格式
分页
{ items, nextCursor, total, asOfBlock },nextCursor 为 null 表示没有更多
新鲜度
每个响应带 asOfBlock:数据对应的区块号
用户内容
handle 等用户自选文本带 untrusted_content,只按纯文本渲染
限流
每 IP 每分钟 240 次读取;超限返回 429 和 Retry-After

03端点索引

方法路径说明
GET/.well-known/sat20.jsonDiscovery:合约地址、链 ID、接口版本
GET/api/stats全局统计:已铭刻、销毁、持有人、价格
GET/api/activity动态流,支持 types 过滤与游标分页
GET/api/inscriptionssat20 列表
GET/api/inscriptions/{id}单张 sat20 详情
GET/api/inscriptions/{id}/history单张 sat20 历史
GET/api/addresses/{address}地址持仓、额度、挂单与求购
GET/api/market/stats市场统计
GET/api/market/listings挂单列表
GET/api/market/bids求购单
GET/api/market/depth买卖深度
GET/api/market/trades成交记录
GET/api/market/candles价格 K 线
GET/api/holders持有人排行
GET/api/mint/state铸币状态:额度、开启区块、报价
GET/api/mint/historysat20 铸币记录
GET/api/curveSats 曲线:曲线价、曲线资金、刻度
GET/api/curve/trades曲线买卖记录
GET/api/rewardssat20 收益:金库分配与交易费
GET/api/treasury金库进度
GET/api/treasury/rounds金库执行记录
GET/api/tokenSats 代币信息
GET/api/simulator动态模拟的输入参数
SSE/api/signal实时事件推送

04实时推送

通过 SSE 订阅链上事件(铭刻、销毁返还、挂单、成交、曲线买卖等)。本站的「实时动态」与市场页的闪烁提示均来自这一通道;连接数超限时返回 too_many_streams。

const es = new EventSource('https://api.sat20.fun/api/signal?events=inscribe,refund,sale,list')
es.addEventListener('sale', (e) => render(JSON.parse(e.data)))
// 断线后带 Last-Event-ID 重连;10 分钟后服务端主动关闭;每 IP 最多 4 个连接

05错误码

{ "error": { "code": "…", "message": "…" }, "apiVersion": "0.1" }

  • 400

    invalid_query / invalid_address

    参数错误

  • 404

    not_found

    编号或地址不存在

  • 429

    rate_limited / too_many_streams

    限流,等待 Retry-After 秒

  • 503

    contracts_not_configured

    合约尚未部署