题目
团队想把 DApp 从传统托管迁到 IPFS,通过 ENS 名提供入口。哪些功能必须调整?怎样发布、回滚和保证用户能访问?
考察目标
- 静态托管与运行时服务的边界。
- CID、ENS contenthash 与 DNSLink 的职责。
- 网关、存储和更新权限的风险。
区分静态产物、内容寻址、记录更新、内容留存和网关信任,避免夸大去中心化程度。
团队想把 DApp 从传统托管迁到 IPFS,通过 ENS 名提供入口。哪些功能必须调整?怎样发布、回滚和保证用户能访问?
IPFS 承载静态文件,应用要先导出静态产物;SSR、服务端接口和秘密配置仍需要其他服务。CID 由内容和导入参数决定,相同内容不一定每次都产生新 CID。发布时验证产物、pin 新内容,再更新 ENS contenthash;回滚改回旧 CID。访问通常仍依赖网关、RPC 和内容提供者,不能把 IPFS 部署描述成完全消除中心化依赖。
Next.js 等框架需要输出纯静态文件,检查动态路由是否预生成、图片处理是否依赖服务端,以及 API 路由是否需要迁出。构建时环境变量可以参与生成;打进页面和 bundle 的值就是公开信息,不能放秘密。运行时私有环境变量和按请求执行的服务端逻辑不能由静态 IPFS 文件提供。
测试直接打开深层页面、刷新、资源路径和钱包连接。路径网关把站点放在 /ipfs/<CID>/ 下,根绝对路径可能跳出该前缀;子域网关把不同 CID 放在独立 origin,有利于站点隔离,但需考虑 DNS、HTTPS 和浏览器兼容。trailingSlash 可帮助目录式 index.html 路由,不能自动修好所有资源路径。
CID 受文件内容、目录结构、CID 版本和分块等导入参数影响。固定构建与导入过程,使产物可复现;不要声称每次构建必然改变 CID。
ENS contenthash 按 ENSIP-7 的协议编码写入解析器,不能把裸 CID 或普通 URL 当 bytes 随意写入。DNSLink 是通过 DNS TXT 记录指向内容的另一种入口,不是 ENS 记录的别名。使用成熟编码工具,并核对当前解析器、控制权限、网络和交易回执。
先验证新 CID 的页面、资源及多个访问路径,再更新入口;确认记录生效后继续保留旧 CID 供回滚。取消自己的 pin 只停止自身的留存承诺,其他节点可能仍保存内容,既不保证旧内容全网删除,也不保证旧内容一直可取回。需要长期可用性时配置独立副本并定期检查,而不只检查某个热缓存网关。
普通 HTTP 网关返回网页时,浏览器一般没有自行验证完整 IPFS 内容,用户仍信任网关响应。具有内容验证能力的客户端能缩小这部分信任,但不能证明网页业务逻辑安全。DNSLink 网关也有域名和服务端信任。
DApp 的 RPC、索引器、资产价格接口及 ENS 记录更新权限仍需管理。更换 CID 或网关 origin 还可能影响本地存储、钱包会话和 Passkey 域策略。迁移可先作为镜像部署,观察可用性后再改变默认入口。
发现这道题有问题? 反馈此题