TapeAPI 持有人操作台TapeAPI holder console

在手机钱包的内置浏览器里打开本页。本页只会请求你的钱包确认签名和交易,从不索要私钥或助记词。它帮 TapeOut 电路的持有人把自己的容器发布成一个 TapeAPI 服务:读电路、生成服务密钥、签委托、把清单写上链。 Open this page in your wallet's in-app browser. It only asks your wallet to confirm signatures and transactions; it never asks for a key or a seed phrase. It helps the holder of a TapeOut circuit publish their container as a TapeAPI service: read the circuit, generate a service key, sign the delegation, publish the manifest on chain.

1. 连接钱包1. Connect your wallet

未连接Not connected

2. 你的电路2. Your circuit

两个框都填数字,不是地址。电路名字 <电路>.<处理器>.tape:例如 11.1013.tape,左边填处理器 1013,右边填电路 11(顺序和名字里相反)。页面从链上读出容器地址,并确认你连接的钱包就是当前持有人。 Both boxes take numbers, not addresses. A circuit is named <circuit>.<processor>.tape: for 11.1013.tape, enter processor 1013 on the left and circuit 11 on the right (the reverse of the name). The page reads the container address from the chain and checks that the connected wallet is the current holder.

3. 服务密钥与变量3. Service key and variables

服务用这把密钥给每个回答签名。它在你的手机上生成,本页不会把它发到任何地方,也不会保存;关掉页面就没了。复制后粘到 Cloudflare: Workers 和 Pages → 这个服务的 Worker(例如公共服务 tapeapi-provider、中继 tapeapi-relay)→ 设置 → “+ 添加变量”,名称 SIGNER_KEY,“密钥”方框打勾。先刷新 Cloudflare 页面再改,旧页面保存时会覆盖别的变量。 The service signs every answer with this key. It is generated on your phone; this page never sends it anywhere and does not keep it, so it is gone when you close the page. Copy it into Cloudflare: Workers & Pages → your service's Worker (for example the public service tapeapi-provider or the relay tapeapi-relay) → Settings → "+ Add variable", name SIGNER_KEY, with Encrypt / Secret ticked. Reload the Cloudflare page before editing: saving from a stale page overwrites the other variables.

4. 签委托4. Sign the delegation

设好 SIGNER_KEY 和上面的变量、服务重新部署后,本页从服务读出它的签名地址,你用钱包签一个委托(EIP-712,只授权这把服务密钥代表你的容器回答,不涉及任何资金,90 天后到期)。 Once SIGNER_KEY and the variables above are set and the service has redeployed, this page reads the service's signing address and you sign a delegation with your wallet (EIP-712: it only lets this service key answer for your container, moves no funds, and expires in 90 days).

5. 把清单写上链5. Publish the manifest

把第 4 步的两个值设为变量、服务重新部署后,本页读取服务提供的清单,逐项核对它与你签的一致,再发一笔 SiteRegistry.putFile 交易把它写进容器站点。 Once the two values from step 4 are set as variables and the service has redeployed, this page reads the manifest the service serves, checks every field against what you signed, then sends one SiteRegistry.putFile transaction that writes it into your container's site.

高级:部署自己的 ChannelBus(可选)Advanced: deploy your own ChannelBus (optional)

公共 ChannelBus 已部署在 0x486110c35d9b90a9d6D85c8063A065f9e7b6b707,任何人都可以用;绝大多数人永远不需要这一节。 The public ChannelBus is already deployed at 0x486110c35d9b90a9d6D85c8063A065f9e7b6b707 and anyone can use it; most people never need this section.

A. 部署 ChannelBusA. Deploy ChannelBus

TAP-26 §3.7 的链上传输合约:没有管理员、没有状态、不能升级,只会发事件。部署一次,任何人都可以用。 The on-chain transport of TAP-26 §3.7: no owner, no state, no upgrade path; it only emits events. Deployed once, anyone can use it.

源码Source
GitHub

B. 核对地址B. Verify an address

核对某个地址上的代码是否与测试过的构建逐字节一致,以及两个常量。部署后会自动核对;也可以输入地址手动核对。 Checks that the code at an address equals the tested build byte for byte, and the two constants. It runs by itself after a deployment; you can also enter an address.

页面源码:site/console。部署的字节来自 channelbus.json,合约测试 ConsoleBytecode.t.sol 保证它与测试过的合约完全一致。 Page source: site/console. The deployed bytes come from channelbus.json; the contract test ConsoleBytecode.t.sol keeps them identical to the tested contract.