AI developer runbook · in Chinese for now. The developer guide is bilingual, and AI assistants can follow this document as is (Markdown).
AI 开发手册
给帮开发者写代码的 AI 助手(Claude Code、Codex、Cursor 等):照这份手册,基于 TapeRelay 做一个能上传、播放、删除文件的产品(网盘、视频站、网页应用)。给人看的说明在 开发者指南。
For AI agents: this runbook is in Chinese. Follow it step by step, keep the rules below, and report back to the developer in the language they used when giving you the task.
规矩(先读)#
- 不碰任何密钥:不索要、不读取、不打印钱包私钥、助记词、
.env;开发者主动发来的也不要用、不要复述。模版 A 的私钥由开发者自己放进后台的密钥文件。 - 不替开发者发链上交易:写发现文件、买套餐、转账都由开发者在自己的钱包里确认。
- 权限靠电路的签名,不要自己做 API key:服务器只认电路持有人的钱包和它授权的会话密钥。后台、脚本要长期用的,请持有人签发开发者密钥(
trk1_开头,最长 366 天、能撤销,放环境变量TAPESTORE_KEY,不进网页和代码库;默认不能删除,要删另勾release,删掉的在回收站留 7 天、照算用量,2026-10-29,D-520、D-525)。它的授权是单独的 EIP-712 类型DeveloperKey(D-526):网页的授权(ScopedDelegation)最长 24 小时、不能删除,不要让网页请用户签DeveloperKey。 - 公开文件里不放密钥:网页、脚本、配置、源码映射(
.map)里都不能有。要保密的内容用加密文件。 - 只用公开的客户端库(示例代码包里的
client/src/),不要自己拼签名;规范的原稿spec/TapeRelay.md暂且作废,等重写,以客户端库和示例为准。
第 0 步:问清楚#
| 项目 | 说明 |
|---|---|
| 开发者的电路 | 链上名字,例如 4246.0.tape(D-634;协议里只认这种写法,短名、#4246@0、0x 容器地址要先换成它)。文件都记在它名下(模版 A,用户不用钱包) |
| 用户怎么登录 | 模版 A:开发者自己的账号体系 |
| 每个用户多少空间、单个文件多大 | 模版 A 的额度 |
| 文件类型 | 视频、图片、文字用开发包的播放器组件 mountPlayer 在页面里解密着放,别的给下载 |
第 1 步:从示例开始#
- 示例代码在 GitHub 仓库
Yiqsen/TapeRelay的examples/(要 Node.js 20.19 以上):克隆后在仓库根目录npm ci --ignore-scripts。下面的路径都相对仓库根目录。 - 模版 A:复制
examples/template-a/。后台server.mjs(HTTP)+backend.mjs(逻辑)+ 页面public/。按examples/template-a/README.md准备:开发者在控制台的「密钥」页生成一把开发者密钥(节点选 3 家,范围要有objects和release),连同后台的加密私钥一起放进仓库根目录的.env(TEMPLATE_A_DEV_KEY、TEMPLATE_A_ENCRYPTION_KEY,由开发者自己写)。电路和节点都取自开发者密钥,config.json不用另填。 - 网址布局照
examples/static.mjs(客户端库在/TapeRelay/client/src/,@noble由页面里的 import map 指过去);页面的内容安全策略写在<meta>里,不要放宽script-src。
第 2 步:改成开发者的产品#
只改这些地方,协议相关的部分(签名、上传、核对)照示例:
- 模版 A:
backend.mjs的login、userOf换成开发者的登录;jsonStore换成数据库(登记、传完、恢复、释放要一个一个做);页面随便改。 - 删除时别的文件还在用的对象不释放(示例已经这样做)。
第 3 步:测试#
node examples/template-a/test/test-template-a.mjs # 起三台本机测试服务器,走一遍加密上传、要回钥匙、额度、删除、释放、补副本
node deploy/test/test-template-a-page.mjs # 在无头 Chrome 里点一遍页面(要装 Chrome)
全部通过(退出码 0)再交给开发者。测试只连本机、不读 .env。改了逻辑就照这个文件的写法加测试。
第 4 步:上线前核对#
- 模版 A 的后台只监听本机,前面有 HTTPS 反向代理;加密私钥另外备份好,开发者密钥到期前在控制台换新的。
- 发现文件里是 3 家不同运营方,各家的空间够(
/v1/info的quota;不够的到那家运营商的发布站买套餐)。 - 公开文件里没有密钥(
client/src/secretscan.mjs的scanForSecrets能查常见的写法,查不全)。
第 5 步:向开发者汇报#
写清楚:用的哪个模版、改了哪些文件、测试结果(通过几项)、上线前还要开发者自己做的事(放私钥、在 3 家运营商的发布站买套餐、配 HTTPS),以及开发者指南第 7 节列的做不到的几处。