{
  "base_url": "https://talk.nervos.org",
  "generated_at": "2026-04-26T13:51:32.500727+00:00",
  "since": "2026-04-25T13:51:27.500009+00:00",
  "until": "2026-04-26T13:51:27.500009+00:00",
  "window_hours": 24,
  "topics": [
    {
      "topic_id": 10098,
      "title": "Spark Program | CKB-UGMP —— A Universal Spore/DOB Seamless Minting Infrastructure Prototype on CKB —— 基于 CKB 的通用 Spore/DOB 无感铸造基础设施原型",
      "slug": "spark-program-ckb-ugmp-a-universal-spore-dob-seamless-minting-infrastructure-prototype-on-ckb-ckb-spore-dob",
      "url": "https://talk.nervos.org/t/spark-program-ckb-ugmp-a-universal-spore-dob-seamless-minting-infrastructure-prototype-on-ckb-ckb-spore-dob/10098",
      "created_at": "2026-03-17T07:21:55.306000+00:00",
      "last_posted_at": "2026-04-26T12:23:13.118000+00:00",
      "category_id": 45,
      "tags": [
        "In-Progress",
        "Spark-Program"
      ],
      "posters": [
        "Original Poster",
        "Frequent Poster",
        "Frequent Poster",
        "Most Recent Poster"
      ],
      "recent_posts": [
        {
          "post_id": 24036,
          "post_number": 14,
          "topic_id": 10098,
          "topic_title": "Spark Program | CKB-UGMP —— A Universal Spore/DOB Seamless Minting Infrastructure Prototype on CKB —— 基于 CKB 的通用 Spore/DOB 无感铸造基础设施原型",
          "topic_slug": "spark-program-ckb-ugmp-a-universal-spore-dob-seamless-minting-infrastructure-prototype-on-ckb-ckb-spore-dob",
          "author": "HNO3Miracle",
          "created_at": "2026-04-26T11:48:26.872000+00:00",
          "updated_at": "2026-04-26T11:48:26.872000+00:00",
          "reply_to_post_number": null,
          "url": "https://talk.nervos.org/t/spark-program-ckb-ugmp-a-universal-spore-dob-seamless-minting-infrastructure-prototype-on-ckb-ckb-spore-dob/10098/14",
          "content_text": "各位好，向各位汇报本周的工作\n1. 前端工程初始化完成\n已完成基于 Next.js 14 + TypeScript + Tailwind CSS 的前端项目初始化，并整理为后续可扩展的仓库结构。\n2. CCC Provider 与钱包连接层已接入\n已完成 @ckb-ccc/connector-react 的接入，并在全局布局中注入 Provider，作为后续所有链上交互的基础。\n3. Mint 主流程 UI 骨架已建立\n当前 Mint 工作台已包含：\n本地图片选择入口\n已选文件名与体积状态展示\nStorage Selector 下拉菜单\n预留的 Mint Pipeline Preview 区块\n后续 Mint DOB 按钮的禁用态占位\n九、下周计划\n第 2 周计划进入“上传层与请求状态管理”阶段，优先推进以下事项：\n接入 Pinata / IPFS 上传逻辑，完成本地图片到 CID 的基础链路。\n增加上传相关状态管理，包括上传中、成功、失败和错误提示。\nHi there,\nWeekly Progress Report\n1. Frontend Project Initialization\nSuccessfully initialized the frontend project using Next.js 14 + TypeScript + Tailwind CSS. The repository structure has been organized to ensure scalability for future development.\n2. Integration of CCC Provider and Wallet Connection Layer\nIntegrated @ckb-ccc/connector-react and injected the Provider into the global layout. This establishes the essential foundation for all subsequent on-chain interactions.\n3. Mint Main Flow UI Skeleton Established\nThe Mint workspace now includes the following components:\nLocal image selection entry.\nDisplay for selected filename and file size status.\nStorage Selector dropdown menu.\nReserved block for Mint Pipeline Preview.\nDisabled placeholder for the Mint DOB button.\nNext Week’s Plan\nThe second week will focus on the “Upload Layer and Request Status Management” phase, prioritizing the following:\nIntegrate Pinata / IPFS upload logic to complete the basic pipeline from local images to CIDs.\nImplement upload-related state management, including loading, success, and failure states, along with error prompts.\nBest,\nHNO3Miracle",
          "content_html": "<p>各位好，向各位汇报本周的工作</p>\n<h3><a name=\"p-24036-h-1-1\" class=\"anchor\" href=\"#p-24036-h-1-1\" aria-label=\"Heading link\"></a>1. 前端工程初始化完成</h3>\n<p>已完成基于 <code>Next.js 14 + TypeScript + Tailwind CSS</code> 的前端项目初始化，并整理为后续可扩展的仓库结构。</p>\n<h3><a name=\"p-24036-h-2-ccc-provider-2\" class=\"anchor\" href=\"#p-24036-h-2-ccc-provider-2\" aria-label=\"Heading link\"></a>2. CCC Provider 与钱包连接层已接入</h3>\n<p>已完成 <code>@ckb-ccc/connector-react</code> 的接入，并在全局布局中注入 Provider，作为后续所有链上交互的基础。</p>\n<h3><a name=\"p-24036-h-3-mint-ui-3\" class=\"anchor\" href=\"#p-24036-h-3-mint-ui-3\" aria-label=\"Heading link\"></a>3. Mint 主流程 UI 骨架已建立</h3>\n<p>当前 Mint 工作台已包含：</p>\n<ul>\n<li>\n<p>本地图片选择入口</p>\n</li>\n<li>\n<p>已选文件名与体积状态展示</p>\n</li>\n<li>\n<p>Storage Selector 下拉菜单</p>\n</li>\n<li>\n<p>预留的 Mint Pipeline Preview 区块</p>\n</li>\n<li>\n<p>后续 <code>Mint DOB</code> 按钮的禁用态占位</p>\n</li>\n</ul>\n<h2><a name=\"p-24036-h-4\" class=\"anchor\" href=\"#p-24036-h-4\" aria-label=\"Heading link\"></a>九、下周计划</h2>\n<p>第 2 周计划进入“上传层与请求状态管理”阶段，优先推进以下事项：</p>\n<ol>\n<li>\n<p>接入 Pinata / IPFS 上传逻辑，完成本地图片到 CID 的基础链路。</p>\n</li>\n<li>\n<p>增加上传相关状态管理，包括上传中、成功、失败和错误提示。</p>\n</li>\n</ol>\n<hr>\n<p>Hi there,</p>\n<h2><a name=\"p-24036-weekly-progress-report-5\" class=\"anchor\" href=\"#p-24036-weekly-progress-report-5\" aria-label=\"Heading link\"></a>Weekly Progress Report</h2>\n<h3><a name=\"p-24036-h-1-frontend-project-initialization-6\" class=\"anchor\" href=\"#p-24036-h-1-frontend-project-initialization-6\" aria-label=\"Heading link\"></a>1. Frontend Project Initialization</h3>\n<p>Successfully initialized the frontend project using <strong>Next.js 14 + TypeScript + Tailwind CSS</strong>. The repository structure has been organized to ensure scalability for future development.</p>\n<h3><a name=\"p-24036-h-2-integration-of-ccc-provider-and-wallet-connection-layer-7\" class=\"anchor\" href=\"#p-24036-h-2-integration-of-ccc-provider-and-wallet-connection-layer-7\" aria-label=\"Heading link\"></a>2. Integration of CCC Provider and Wallet Connection Layer</h3>\n<p>Integrated <code>@ckb-ccc/connector-react</code> and injected the Provider into the global layout. This establishes the essential foundation for all subsequent on-chain interactions.</p>\n<h3><a name=\"p-24036-h-3-mint-main-flow-ui-skeleton-established-8\" class=\"anchor\" href=\"#p-24036-h-3-mint-main-flow-ui-skeleton-established-8\" aria-label=\"Heading link\"></a>3. Mint Main Flow UI Skeleton Established</h3>\n<p>The Mint workspace now includes the following components:</p>\n<ul>\n<li>\n<p>Local image selection entry.</p>\n</li>\n<li>\n<p>Display for selected filename and file size status.</p>\n</li>\n<li>\n<p><strong>Storage Selector</strong> dropdown menu.</p>\n</li>\n<li>\n<p>Reserved block for <strong>Mint Pipeline Preview</strong>.</p>\n</li>\n<li>\n<p>Disabled placeholder for the <strong>Mint DOB</strong> button.</p>\n</li>\n</ul>\n<h2><a name=\"p-24036-next-weeks-plan-9\" class=\"anchor\" href=\"#p-24036-next-weeks-plan-9\" aria-label=\"Heading link\"></a>Next Week’s Plan</h2>\n<p>The second week will focus on the <strong>“Upload Layer and Request Status Management”</strong> phase, prioritizing the following:</p>\n<ol>\n<li>\n<p>Integrate <strong>Pinata / IPFS</strong> upload logic to complete the basic pipeline from local images to CIDs.</p>\n</li>\n<li>\n<p>Implement upload-related state management, including loading, success, and failure states, along with error prompts.</p>\n</li>\n</ol>\n<p>Best,</p>\n<p>HNO3Miracle</p>",
          "like_count": 0,
          "quote_count": 0
        },
        {
          "post_id": 24037,
          "post_number": 15,
          "topic_id": 10098,
          "topic_title": "Spark Program | CKB-UGMP —— A Universal Spore/DOB Seamless Minting Infrastructure Prototype on CKB —— 基于 CKB 的通用 Spore/DOB 无感铸造基础设施原型",
          "topic_slug": "spark-program-ckb-ugmp-a-universal-spore-dob-seamless-minting-infrastructure-prototype-on-ckb-ckb-spore-dob",
          "author": "yixiu.ckbfans.bit",
          "created_at": "2026-04-26T12:23:13.118000+00:00",
          "updated_at": "2026-04-26T12:23:13.118000+00:00",
          "reply_to_post_number": 14,
          "url": "https://talk.nervos.org/t/spark-program-ckb-ugmp-a-universal-spore-dob-seamless-minting-infrastructure-prototype-on-ckb-ckb-spore-dob/10098/15",
          "content_text": "Cool，论坛已经接入了AI智能翻译组件，以后不必“发双份”带翻译的内容了，用自己擅长的语言表达即可。",
          "content_html": "<p>Cool，论坛已经接入了AI智能翻译组件，以后不必“发双份”带翻译的内容了，用自己擅长的语言表达即可。</p>",
          "like_count": 0,
          "quote_count": 0
        }
      ]
    },
    {
      "topic_id": 10131,
      "title": "Spark Program | CKB Developer Onboarding Guide",
      "slug": "spark-program-ckb-developer-onboarding-guide",
      "url": "https://talk.nervos.org/t/spark-program-ckb-developer-onboarding-guide/10131",
      "created_at": "2026-03-26T08:49:26.745000+00:00",
      "last_posted_at": "2026-04-26T06:34:24.804000+00:00",
      "category_id": 49,
      "tags": [
        "In-Progress",
        "Spark-Program"
      ],
      "posters": [
        "Original Poster, Most Recent Poster",
        "Frequent Poster",
        "Frequent Poster"
      ],
      "recent_posts": [
        {
          "post_id": 24035,
          "post_number": 14,
          "topic_id": 10131,
          "topic_title": "Spark Program | CKB Developer Onboarding Guide",
          "topic_slug": "spark-program-ckb-developer-onboarding-guide",
          "author": "Mateja3m",
          "created_at": "2026-04-26T06:34:24.804000+00:00",
          "updated_at": "2026-04-26T06:34:24.804000+00:00",
          "reply_to_post_number": null,
          "url": "https://talk.nervos.org/t/spark-program-ckb-developer-onboarding-guide/10131/14",
          "content_text": "Hi @xingtianchunyan, below you can find the progress report for Milestone 1, week 2\nWeek 2 Milestone 1 Progress Report\nStatus\nMilestone 1 has been completed.\nThis phase focused on finishing the remaining Milestone 1 onboarding documents, replacing placeholder-only setup sections with validated guidance, and extending the validation evidence behind the local CKB node and RPC flow. The work completed during this period strengthens the project goal of reducing beginner ambiguity and making the path to first successful RPC interaction more explicit and repeatable.\nRepository And Publication Status\nThe repository structure established in Week 1 remains in place, and the Week 2 work was completed in the local repository workspace.\nDuring this run:\nno GitHub push was performed\nno pull request was opened\nno git commit was created\nno remote configuration was changed\nThis is important because the Week 2 work was intended to refine Milestone 1 content locally before any later publication or review step.\nWork Completed\n1. Remaining Milestone 1 Setup Sections Completed\nThe previously placeholder-only Milestone 1 setup sections were expanded into beginner-oriented, validation-first documentation.\nCompleted or substantially completed sections include:\n03 Quick Start\n04 CKB Node Setup\n05 RPC Setup\n07 Configuration Setup\nThese sections now provide:\na shortest validated path to first RPC success\nexplicit step-by-step node startup guidance\nRPC request and response interpretation for beginners\nminimal configuration awareness without speculative file-edit instructions\nThis directly supports the Milestone 1 requirement to help a developer reach first successful RPC interaction through a documentation-first onboarding flow.\n2. Milestone 1 Navigation And Scope Messaging Refined\nThe top-level project messaging was updated so the repository no longer describes the completed Milestone 1 setup sections as placeholders.\nUpdated files include:\nREADME.md\n00 Overview\n02 Environment Setup\nThese updates improved:\ndocument sequencing\nscope clarity\ninternal cross-references\nthe distinction between completed Milestone 1 content and later placeholder sections\n3. Validation-First Boundaries Strengthened\nThe Week 2 documentation pass preserved the rule that the guide should not guess commands, paths, ports, or behaviors that were not validated locally.\nAs part of this cleanup:\nvalidated commands were kept explicit\nspeculative configuration editing was not introduced\nendpoint ambiguity was documented instead of hidden\nlater scope was left as placeholders rather than filled with weak guidance\nThis keeps the guide aligned with the project’s positioning as a complement to official Nervos documentation rather than a replacement for it.\n4. Placeholder Milestone Labels Added\nLater placeholder sections were updated so TODO: VALIDATE markers now include a milestone label where the planned sequencing is already clear.\nUpdated placeholder sections include:\n06 Indexer Setup: Milestone 2\n08 First Developer Workflow: Milestone 2\n09 Common Errors and Remediation: Milestone 2\n10 Troubleshooting Matrix: Milestone 2\n11 AI-Assisted Debugging: Milestone 3\n12 CKB Mental Model: Milestone 3\n13 Common Misconceptions: Milestone 3\nThis improves planning clarity by showing which unfinished sections belong to later milestones instead of leaving all later work under one undifferentiated validation marker.\nValidation Work Completed\n5. Environment Connectivity Validation Refined\nThe Week 1 connectivity failure around https://example.com was revisited and clarified through a more meaningful real-URL test.\nPublished findings updated in Week 2 include:\nEnvironment Validation Findings\nThe updated validation now shows:\nrepeated example.com hostname resolution failure in the local environment\nsuccessful HTTPS header retrieval from https://google.com\nevidence that target selection matters when using a simple connectivity check\nThis is useful because it prevents the guide from incorrectly treating one failed hostname test as proof that all network-dependent onboarding is blocked.\n6. Node And RPC Validation Expanded Significantly\nThe local CKB node and RPC evidence base was expanded through multiple additional validation passes.\nPublished findings updated in Week 2 include:\nCKB Node And RPC Validation Findings\nThe expanded validation covered:\nrepeated offckb node startup after initial installation\nrepeated successful JSON-RPC responses from localhost:8114\nsuccessful JSON-RPC responses from 127.0.0.1:28114\nwrong-method behavior on both endpoints\nHTTP 200 OK confirmation for JSON-RPC POST requests\nlocal process inspection with lsof\ncustom --binary-path startup using the discovered local CKB binary\nconfirmation that the devnet path exists after initialization\nThis strengthens confidence that the Milestone 1 onboarding path is not a one-off success case.\n7. Local Endpoint Relationship Clarified\nWeek 2 validation materially improved the explanation of local endpoint behavior.\nThe observed local evidence now shows:\nckb listening on port 8114\nnode listening on port 28114\nvalid JSON-RPC POST responses from both endpoints\nThis does not fully document the internal implementation details, but it is strong enough for beginner-facing onboarding guidance. It supports the practical explanation that 28114 behaves like a Node.js / OffCKB proxy layer while 8114 behaves like the underlying ckb RPC listener.\n8. Binary Path And Devnet Path Validation Added\nWeek 2 also validated filesystem-level details that were previously only partially understood.\nThe local validation now confirms:\nthe installed CKB binary can be discovered at runtime rather than guessed\nthe binary version can be checked directly from that path\noffckb node -b <actual-binary-path> works on the validation machine\nthe devnet directory appears after initialization and contains real configuration and data paths\nThis improves the quality of the configuration guidance while still avoiding unsafe or speculative edit instructions.\n9. Milestone 1 Scope Boundaries Confirmed\nWeek 2 also confirmed that some sections should remain intentionally incomplete at the end of Milestone 1.\nThe validated scope decision is that Milestone 1 now covers:\nprerequisites\nenvironment setup\nquick start\nCKB node setup\nRPC setup\nminimal configuration awareness\nThe following remain intentionally outside the completed Milestone 1 scope:\nindexer setup details\nfirst full developer workflow\nremediation and troubleshooting matrix content\nAI-assisted debugging guidance\nbroader conceptual materials such as mental models and misconceptions\nThis keeps the milestone focused on onboarding and first success rather than expanding prematurely into later-phase documentation.\nOutcome Against Week 2 Scope\nWeek 2 successfully delivered:\ncompleted Milestone 1 setup documents for quick start, node setup, RPC setup, and configuration setup\nstronger internal consistency across the main onboarding docs\nupdated validation findings based on repeat local testing\nclearer explanation of local RPC endpoint behavior\nmilestone labels for later placeholder sections\na stronger basis for declaring Milestone 1 substantially complete\n第2周里程碑1进展报告\n状态\n里程碑1已完成。\n本阶段重点是完成里程碑1剩余的入门文档，将仅占位的设置部分替换为经过验证的指导，并扩展本地 CKB 节点和 RPC 流程的验证依据。本阶段完成的工作进一步强化了项目目标，即减少新手的不确定性，使首次成功进行 RPC 交互的路径更加清晰和可复现。\n仓库与发布状态\n第1周建立的仓库结构保持不变，第2周的工作在本地仓库环境中完成。\n在此期间：\n未进行 GitHub 推送\n未创建 Pull Request\n未创建 git 提交\n未更改远程配置\n这一点很重要，因为第2周的工作目标是在本地完善里程碑1内容，以便后续再进行发布或评审。\n已完成工作\n1. 完成里程碑1剩余设置部分\n此前仅为占位的里程碑1设置部分已扩展为面向初学者、以验证为优先的文档。\n已完成或基本完成的部分包括：\n03 快速开始\n04 CKB 节点设置\n05 RPC 设置\n07 配置设置\n这些部分现在提供：\n达到首次 RPC 成功的最短验证路径\n明确的逐步节点启动指导\n面向初学者的 RPC 请求与响应解释\n最小化配置认知（避免推测性文件修改指引）\n这直接支持了里程碑1的目标，即通过以文档为核心的入门流程帮助开发者实现首次成功的 RPC 交互。\n2. 优化里程碑1导航与范围说明\n更新了顶层项目说明，使仓库不再将已完成的里程碑1部分描述为占位内容。\n更新文件包括：\nREADME.md\n00 概览\n02 环境设置\n这些更新提升了：\n文档结构顺序\n范围清晰度\n内部交叉引用\n已完成内容与后续占位内容的区分\n3. 强化“验证优先”的边界\n第2周的文档完善过程中，始终遵循不猜测未验证内容的原则。\n具体包括：\n保留明确验证过的命令\n不引入推测性的配置修改\n明确记录端点不确定性\n后续内容保持占位而非填充不可靠信息\n这使文档继续作为官方 Nervos 文档的补充，而非替代。\n4. 添加里程碑标签到占位部分\n后续占位部分新增了里程碑标签，用于明确规划顺序。\n更新包括：\n06 Indexer 设置：里程碑2\n08 首个开发工作流：里程碑2\n09 常见错误与修复：里程碑2\n10 故障排查矩阵：里程碑2\n11 AI 辅助调试：里程碑3\n12 CKB 心智模型：里程碑3\n13 常见误解：里程碑3\n这提升了规划清晰度。\n验证工作\n5. 优化环境连接验证\n第1周中 https://example.com 的失败测试已被重新分析，并通过更有意义的真实 URL 测试进行验证。\n更新结果包括：\n本地环境中 example.com 解析失败\n成功获取 https://google.com HTTPS 响应头\n证明测试目标选择会影响结果\n这避免了错误地将单一失败当作整体网络问题。\n6. 扩展节点与 RPC 验证\n对本地 CKB 节点与 RPC 进行了多轮验证。\n新增验证包括：\n多次执行 offckb node 启动\n从 localhost:8114 获取成功响应\n从 127.0.0.1:28114 获取成功响应\n错误方法测试行为\nJSON-RPC POST 返回 HTTP 200\n使用 lsof 检查进程\n使用 --binary-path 启动\n验证 devnet 路径存在\n增强了稳定性信心。\n7. 明确本地端点关系\n验证结果显示：\nckb 监听端口 8114\nnode 监听端口 28114\n两者均可返回有效 JSON-RPC\n可解释为：\n28114：Node.js / OffCKB 代理层\n8114：底层 CKB RPC\n8. 验证二进制路径与 devnet\n确认：\n可动态发现 CKB 二进制路径\n可直接检查版本\noffckb node -b <路径> 可用\n初始化后生成 devnet 目录\n9. 确认里程碑范围边界\n里程碑1覆盖：\n前置条件\n环境设置\n快速开始\n节点设置\nRPC 设置\n基础配置\n不包含：\nIndexer 设置\n完整开发流程\n故障排查矩阵\nAI 调试\n概念性内容\n第2周成果总结\n成功交付：\n完整的里程碑1核心文档\n更一致的文档结构\n更新的验证数据\n更清晰的 RPC 行为说明\n明确的后续里程碑规划",
          "content_html": "<p>Hi <a class=\"mention\" href=\"/u/xingtianchunyan\">@xingtianchunyan</a>, below you can find the progress report for Milestone 1, week 2</p>\n<h1><a name=\"p-24035-week-2-milestone-1-progress-report-1\" class=\"anchor\" href=\"#p-24035-week-2-milestone-1-progress-report-1\" aria-label=\"Heading link\"></a>Week 2 Milestone 1 Progress Report</h1>\n<h2><a name=\"p-24035-status-2\" class=\"anchor\" href=\"#p-24035-status-2\" aria-label=\"Heading link\"></a>Status</h2>\n<p>Milestone 1 has been completed.</p>\n<p>This phase focused on finishing the remaining Milestone 1 onboarding documents, replacing placeholder-only setup sections with validated guidance, and extending the validation evidence behind the local CKB node and RPC flow. The work completed during this period strengthens the project goal of reducing beginner ambiguity and making the path to first successful RPC interaction more explicit and repeatable.</p>\n<h2><a name=\"p-24035-repository-and-publication-status-3\" class=\"anchor\" href=\"#p-24035-repository-and-publication-status-3\" aria-label=\"Heading link\"></a>Repository And Publication Status</h2>\n<p>The repository structure established in Week 1 remains in place, and the Week 2 work was completed in the local repository workspace.</p>\n<p>During this run:</p>\n<ul>\n<li>\n<p>no GitHub push was performed</p>\n</li>\n<li>\n<p>no pull request was opened</p>\n</li>\n<li>\n<p>no git commit was created</p>\n</li>\n<li>\n<p>no remote configuration was changed</p>\n</li>\n</ul>\n<p>This is important because the Week 2 work was intended to refine Milestone 1 content locally before any later publication or review step.</p>\n<h2><a name=\"p-24035-work-completed-4\" class=\"anchor\" href=\"#p-24035-work-completed-4\" aria-label=\"Heading link\"></a>Work Completed</h2>\n<h3><a name=\"p-24035-h-1-remaining-milestone-1-setup-sections-completed-5\" class=\"anchor\" href=\"#p-24035-h-1-remaining-milestone-1-setup-sections-completed-5\" aria-label=\"Heading link\"></a>1. Remaining Milestone 1 Setup Sections Completed</h3>\n<p>The previously placeholder-only Milestone 1 setup sections were expanded into beginner-oriented, validation-first documentation.</p>\n<p>Completed or substantially completed sections include:</p>\n<ul>\n<li>\n<p>03 Quick Start</p>\n</li>\n<li>\n<p>04 CKB Node Setup</p>\n</li>\n<li>\n<p>05 RPC Setup</p>\n</li>\n<li>\n<p>07 Configuration Setup</p>\n</li>\n</ul>\n<p>These sections now provide:</p>\n<ul>\n<li>\n<p>a shortest validated path to first RPC success</p>\n</li>\n<li>\n<p>explicit step-by-step node startup guidance</p>\n</li>\n<li>\n<p>RPC request and response interpretation for beginners</p>\n</li>\n<li>\n<p>minimal configuration awareness without speculative file-edit instructions</p>\n</li>\n</ul>\n<p>This directly supports the Milestone 1 requirement to help a developer reach first successful RPC interaction through a documentation-first onboarding flow.</p>\n<h3><a name=\"p-24035-h-2-milestone-1-navigation-and-scope-messaging-refined-6\" class=\"anchor\" href=\"#p-24035-h-2-milestone-1-navigation-and-scope-messaging-refined-6\" aria-label=\"Heading link\"></a>2. Milestone 1 Navigation And Scope Messaging Refined</h3>\n<p>The top-level project messaging was updated so the repository no longer describes the completed Milestone 1 setup sections as placeholders.</p>\n<p>Updated files include:</p>\n<ul>\n<li>\n<p>README.md</p>\n</li>\n<li>\n<p>00 Overview</p>\n</li>\n<li>\n<p>02 Environment Setup</p>\n</li>\n</ul>\n<p>These updates improved:</p>\n<ul>\n<li>\n<p>document sequencing</p>\n</li>\n<li>\n<p>scope clarity</p>\n</li>\n<li>\n<p>internal cross-references</p>\n</li>\n<li>\n<p>the distinction between completed Milestone 1 content and later placeholder sections</p>\n</li>\n</ul>\n<h3><a name=\"p-24035-h-3-validation-first-boundaries-strengthened-7\" class=\"anchor\" href=\"#p-24035-h-3-validation-first-boundaries-strengthened-7\" aria-label=\"Heading link\"></a>3. Validation-First Boundaries Strengthened</h3>\n<p>The Week 2 documentation pass preserved the rule that the guide should not guess commands, paths, ports, or behaviors that were not validated locally.</p>\n<p>As part of this cleanup:</p>\n<ul>\n<li>\n<p>validated commands were kept explicit</p>\n</li>\n<li>\n<p>speculative configuration editing was not introduced</p>\n</li>\n<li>\n<p>endpoint ambiguity was documented instead of hidden</p>\n</li>\n<li>\n<p>later scope was left as placeholders rather than filled with weak guidance</p>\n</li>\n</ul>\n<p>This keeps the guide aligned with the project’s positioning as a complement to official Nervos documentation rather than a replacement for it.</p>\n<h3><a name=\"p-24035-h-4-placeholder-milestone-labels-added-8\" class=\"anchor\" href=\"#p-24035-h-4-placeholder-milestone-labels-added-8\" aria-label=\"Heading link\"></a>4. Placeholder Milestone Labels Added</h3>\n<p>Later placeholder sections were updated so <code>TODO: VALIDATE</code> markers now include a milestone label where the planned sequencing is already clear.</p>\n<p>Updated placeholder sections include:</p>\n<ul>\n<li>\n<p>06 Indexer Setup: <code>Milestone 2</code></p>\n</li>\n<li>\n<p>08 First Developer Workflow: <code>Milestone 2</code></p>\n</li>\n<li>\n<p>09 Common Errors and Remediation: <code>Milestone 2</code></p>\n</li>\n<li>\n<p>10 Troubleshooting Matrix: <code>Milestone 2</code></p>\n</li>\n<li>\n<p>11 AI-Assisted Debugging: <code>Milestone 3</code></p>\n</li>\n<li>\n<p>12 CKB Mental Model: <code>Milestone 3</code></p>\n</li>\n<li>\n<p>13 Common Misconceptions: <code>Milestone 3</code></p>\n</li>\n</ul>\n<p>This improves planning clarity by showing which unfinished sections belong to later milestones instead of leaving all later work under one undifferentiated validation marker.</p>\n<h2><a name=\"p-24035-validation-work-completed-9\" class=\"anchor\" href=\"#p-24035-validation-work-completed-9\" aria-label=\"Heading link\"></a>Validation Work Completed</h2>\n<h3><a name=\"p-24035-h-5-environment-connectivity-validation-refined-10\" class=\"anchor\" href=\"#p-24035-h-5-environment-connectivity-validation-refined-10\" aria-label=\"Heading link\"></a>5. Environment Connectivity Validation Refined</h3>\n<p>The Week 1 connectivity failure around <code>https://example.com</code> was revisited and clarified through a more meaningful real-URL test.</p>\n<p>Published findings updated in Week 2 include:</p>\n<ul>\n<li>Environment Validation Findings</li>\n</ul>\n<p>The updated validation now shows:</p>\n<ul>\n<li>\n<p>repeated <code>example.com</code> hostname resolution failure in the local environment</p>\n</li>\n<li>\n<p>successful HTTPS header retrieval from <code>https://google.com</code></p>\n</li>\n<li>\n<p>evidence that target selection matters when using a simple connectivity check</p>\n</li>\n</ul>\n<p>This is useful because it prevents the guide from incorrectly treating one failed hostname test as proof that all network-dependent onboarding is blocked.</p>\n<h3><a name=\"p-24035-h-6-node-and-rpc-validation-expanded-significantly-11\" class=\"anchor\" href=\"#p-24035-h-6-node-and-rpc-validation-expanded-significantly-11\" aria-label=\"Heading link\"></a>6. Node And RPC Validation Expanded Significantly</h3>\n<p>The local CKB node and RPC evidence base was expanded through multiple additional validation passes.</p>\n<p>Published findings updated in Week 2 include:</p>\n<ul>\n<li>CKB Node And RPC Validation Findings</li>\n</ul>\n<p>The expanded validation covered:</p>\n<ul>\n<li>\n<p>repeated <code>offckb node</code> startup after initial installation</p>\n</li>\n<li>\n<p>repeated successful JSON-RPC responses from <code>localhost:8114</code></p>\n</li>\n<li>\n<p>successful JSON-RPC responses from <code>127.0.0.1:28114</code></p>\n</li>\n<li>\n<p>wrong-method behavior on both endpoints</p>\n</li>\n<li>\n<p>HTTP <code>200 OK</code> confirmation for JSON-RPC POST requests</p>\n</li>\n<li>\n<p>local process inspection with <code>lsof</code></p>\n</li>\n<li>\n<p>custom <code>--binary-path</code> startup using the discovered local CKB binary</p>\n</li>\n<li>\n<p>confirmation that the <code>devnet</code> path exists after initialization</p>\n</li>\n</ul>\n<p>This strengthens confidence that the Milestone 1 onboarding path is not a one-off success case.</p>\n<h3><a name=\"p-24035-h-7-local-endpoint-relationship-clarified-12\" class=\"anchor\" href=\"#p-24035-h-7-local-endpoint-relationship-clarified-12\" aria-label=\"Heading link\"></a>7. Local Endpoint Relationship Clarified</h3>\n<p>Week 2 validation materially improved the explanation of local endpoint behavior.</p>\n<p>The observed local evidence now shows:</p>\n<ul>\n<li>\n<p><code>ckb</code> listening on port <code>8114</code></p>\n</li>\n<li>\n<p><code>node</code> listening on port <code>28114</code></p>\n</li>\n<li>\n<p>valid JSON-RPC POST responses from both endpoints</p>\n</li>\n</ul>\n<p>This does not fully document the internal implementation details, but it is strong enough for beginner-facing onboarding guidance. It supports the practical explanation that <code>28114</code> behaves like a Node.js / OffCKB proxy layer while <code>8114</code> behaves like the underlying <code>ckb</code> RPC listener.</p>\n<h3><a name=\"p-24035-h-8-binary-path-and-devnet-path-validation-added-13\" class=\"anchor\" href=\"#p-24035-h-8-binary-path-and-devnet-path-validation-added-13\" aria-label=\"Heading link\"></a>8. Binary Path And Devnet Path Validation Added</h3>\n<p>Week 2 also validated filesystem-level details that were previously only partially understood.</p>\n<p>The local validation now confirms:</p>\n<ul>\n<li>\n<p>the installed CKB binary can be discovered at runtime rather than guessed</p>\n</li>\n<li>\n<p>the binary version can be checked directly from that path</p>\n</li>\n<li>\n<p><code>offckb node -b &lt;actual-binary-path&gt;</code> works on the validation machine</p>\n</li>\n<li>\n<p>the <code>devnet</code> directory appears after initialization and contains real configuration and data paths</p>\n</li>\n</ul>\n<p>This improves the quality of the configuration guidance while still avoiding unsafe or speculative edit instructions.</p>\n<h3><a name=\"p-24035-h-9-milestone-1-scope-boundaries-confirmed-14\" class=\"anchor\" href=\"#p-24035-h-9-milestone-1-scope-boundaries-confirmed-14\" aria-label=\"Heading link\"></a>9. Milestone 1 Scope Boundaries Confirmed</h3>\n<p>Week 2 also confirmed that some sections should remain intentionally incomplete at the end of Milestone 1.</p>\n<p>The validated scope decision is that Milestone 1 now covers:</p>\n<ul>\n<li>\n<p>prerequisites</p>\n</li>\n<li>\n<p>environment setup</p>\n</li>\n<li>\n<p>quick start</p>\n</li>\n<li>\n<p>CKB node setup</p>\n</li>\n<li>\n<p>RPC setup</p>\n</li>\n<li>\n<p>minimal configuration awareness</p>\n</li>\n</ul>\n<p>The following remain intentionally outside the completed Milestone 1 scope:</p>\n<ul>\n<li>\n<p>indexer setup details</p>\n</li>\n<li>\n<p>first full developer workflow</p>\n</li>\n<li>\n<p>remediation and troubleshooting matrix content</p>\n</li>\n<li>\n<p>AI-assisted debugging guidance</p>\n</li>\n<li>\n<p>broader conceptual materials such as mental models and misconceptions</p>\n</li>\n</ul>\n<p>This keeps the milestone focused on onboarding and first success rather than expanding prematurely into later-phase documentation.</p>\n<h2><a name=\"p-24035-outcome-against-week-2-scope-15\" class=\"anchor\" href=\"#p-24035-outcome-against-week-2-scope-15\" aria-label=\"Heading link\"></a>Outcome Against Week 2 Scope</h2>\n<p>Week 2 successfully delivered:</p>\n<ul>\n<li>\n<p>completed Milestone 1 setup documents for quick start, node setup, RPC setup, and configuration setup</p>\n</li>\n<li>\n<p>stronger internal consistency across the main onboarding docs</p>\n</li>\n<li>\n<p>updated validation findings based on repeat local testing</p>\n</li>\n<li>\n<p>clearer explanation of local RPC endpoint behavior</p>\n</li>\n<li>\n<p>milestone labels for later placeholder sections</p>\n</li>\n<li>\n<p>a stronger basis for declaring Milestone 1 substantially complete</p>\n</li>\n</ul>\n<hr>\n<h1><a name=\"p-24035-h-21-16\" class=\"anchor\" href=\"#p-24035-h-21-16\" aria-label=\"Heading link\"></a>第2周里程碑1进展报告</h1>\n<h2><a name=\"p-24035-h-17\" class=\"anchor\" href=\"#p-24035-h-17\" aria-label=\"Heading link\"></a>状态</h2>\n<p>里程碑1已完成。</p>\n<p>本阶段重点是完成里程碑1剩余的入门文档，将仅占位的设置部分替换为经过验证的指导，并扩展本地 CKB 节点和 RPC 流程的验证依据。本阶段完成的工作进一步强化了项目目标，即减少新手的不确定性，使首次成功进行 RPC 交互的路径更加清晰和可复现。</p>\n<h2><a name=\"p-24035-h-18\" class=\"anchor\" href=\"#p-24035-h-18\" aria-label=\"Heading link\"></a>仓库与发布状态</h2>\n<p>第1周建立的仓库结构保持不变，第2周的工作在本地仓库环境中完成。</p>\n<p>在此期间：</p>\n<ul>\n<li>未进行 GitHub 推送</li>\n<li>未创建 Pull Request</li>\n<li>未创建 git 提交</li>\n<li>未更改远程配置</li>\n</ul>\n<p>这一点很重要，因为第2周的工作目标是在本地完善里程碑1内容，以便后续再进行发布或评审。</p>\n<h2><a name=\"p-24035-h-19\" class=\"anchor\" href=\"#p-24035-h-19\" aria-label=\"Heading link\"></a>已完成工作</h2>\n<h3><a name=\"p-24035-h-1-1-20\" class=\"anchor\" href=\"#p-24035-h-1-1-20\" aria-label=\"Heading link\"></a>1. 完成里程碑1剩余设置部分</h3>\n<p>此前仅为占位的里程碑1设置部分已扩展为面向初学者、以验证为优先的文档。</p>\n<p>已完成或基本完成的部分包括：</p>\n<ul>\n<li>03 快速开始</li>\n<li>04 CKB 节点设置</li>\n<li>05 RPC 设置</li>\n<li>07 配置设置</li>\n</ul>\n<p>这些部分现在提供：</p>\n<ul>\n<li>达到首次 RPC 成功的最短验证路径</li>\n<li>明确的逐步节点启动指导</li>\n<li>面向初学者的 RPC 请求与响应解释</li>\n<li>最小化配置认知（避免推测性文件修改指引）</li>\n</ul>\n<p>这直接支持了里程碑1的目标，即通过以文档为核心的入门流程帮助开发者实现首次成功的 RPC 交互。</p>\n<h3><a name=\"p-24035-h-2-1-21\" class=\"anchor\" href=\"#p-24035-h-2-1-21\" aria-label=\"Heading link\"></a>2. 优化里程碑1导航与范围说明</h3>\n<p>更新了顶层项目说明，使仓库不再将已完成的里程碑1部分描述为占位内容。</p>\n<p>更新文件包括：</p>\n<ul>\n<li>README.md</li>\n<li>00 概览</li>\n<li>02 环境设置</li>\n</ul>\n<p>这些更新提升了：</p>\n<ul>\n<li>文档结构顺序</li>\n<li>范围清晰度</li>\n<li>内部交叉引用</li>\n<li>已完成内容与后续占位内容的区分</li>\n</ul>\n<h3><a name=\"p-24035-h-3-22\" class=\"anchor\" href=\"#p-24035-h-3-22\" aria-label=\"Heading link\"></a>3. 强化“验证优先”的边界</h3>\n<p>第2周的文档完善过程中，始终遵循不猜测未验证内容的原则。</p>\n<p>具体包括：</p>\n<ul>\n<li>保留明确验证过的命令</li>\n<li>不引入推测性的配置修改</li>\n<li>明确记录端点不确定性</li>\n<li>后续内容保持占位而非填充不可靠信息</li>\n</ul>\n<p>这使文档继续作为官方 Nervos 文档的补充，而非替代。</p>\n<h3><a name=\"p-24035-h-4-23\" class=\"anchor\" href=\"#p-24035-h-4-23\" aria-label=\"Heading link\"></a>4. 添加里程碑标签到占位部分</h3>\n<p>后续占位部分新增了里程碑标签，用于明确规划顺序。</p>\n<p>更新包括：</p>\n<ul>\n<li>06 Indexer 设置：里程碑2</li>\n<li>08 首个开发工作流：里程碑2</li>\n<li>09 常见错误与修复：里程碑2</li>\n<li>10 故障排查矩阵：里程碑2</li>\n<li>11 AI 辅助调试：里程碑3</li>\n<li>12 CKB 心智模型：里程碑3</li>\n<li>13 常见误解：里程碑3</li>\n</ul>\n<p>这提升了规划清晰度。</p>\n<h2><a name=\"p-24035-h-24\" class=\"anchor\" href=\"#p-24035-h-24\" aria-label=\"Heading link\"></a>验证工作</h2>\n<h3><a name=\"p-24035-h-5-25\" class=\"anchor\" href=\"#p-24035-h-5-25\" aria-label=\"Heading link\"></a>5. 优化环境连接验证</h3>\n<p>第1周中 <code>https://example.com</code> 的失败测试已被重新分析，并通过更有意义的真实 URL 测试进行验证。</p>\n<p>更新结果包括：</p>\n<ul>\n<li>本地环境中 <code>example.com</code> 解析失败</li>\n<li>成功获取 <code>https://google.com</code> HTTPS 响应头</li>\n<li>证明测试目标选择会影响结果</li>\n</ul>\n<p>这避免了错误地将单一失败当作整体网络问题。</p>\n<h3><a name=\"p-24035-h-6-rpc-26\" class=\"anchor\" href=\"#p-24035-h-6-rpc-26\" aria-label=\"Heading link\"></a>6. 扩展节点与 RPC 验证</h3>\n<p>对本地 CKB 节点与 RPC 进行了多轮验证。</p>\n<p>新增验证包括：</p>\n<ul>\n<li>多次执行 <code>offckb node</code> 启动</li>\n<li>从 <code>localhost:8114</code> 获取成功响应</li>\n<li>从 <code>127.0.0.1:28114</code> 获取成功响应</li>\n<li>错误方法测试行为</li>\n<li>JSON-RPC POST 返回 HTTP 200</li>\n<li>使用 <code>lsof</code> 检查进程</li>\n<li>使用 <code>--binary-path</code> 启动</li>\n<li>验证 <code>devnet</code> 路径存在</li>\n</ul>\n<p>增强了稳定性信心。</p>\n<h3><a name=\"p-24035-h-7-27\" class=\"anchor\" href=\"#p-24035-h-7-27\" aria-label=\"Heading link\"></a>7. 明确本地端点关系</h3>\n<p>验证结果显示：</p>\n<ul>\n<li><code>ckb</code> 监听端口 8114</li>\n<li><code>node</code> 监听端口 28114</li>\n<li>两者均可返回有效 JSON-RPC</li>\n</ul>\n<p>可解释为：</p>\n<ul>\n<li>28114：Node.js / OffCKB 代理层</li>\n<li>8114：底层 CKB RPC</li>\n</ul>\n<h3><a name=\"p-24035-h-8-devnet-28\" class=\"anchor\" href=\"#p-24035-h-8-devnet-28\" aria-label=\"Heading link\"></a>8. 验证二进制路径与 devnet</h3>\n<p>确认：</p>\n<ul>\n<li>可动态发现 CKB 二进制路径</li>\n<li>可直接检查版本</li>\n<li><code>offckb node -b &lt;路径&gt;</code> 可用</li>\n<li>初始化后生成 <code>devnet</code> 目录</li>\n</ul>\n<h3><a name=\"p-24035-h-9-29\" class=\"anchor\" href=\"#p-24035-h-9-29\" aria-label=\"Heading link\"></a>9. 确认里程碑范围边界</h3>\n<p>里程碑1覆盖：</p>\n<ul>\n<li>前置条件</li>\n<li>环境设置</li>\n<li>快速开始</li>\n<li>节点设置</li>\n<li>RPC 设置</li>\n<li>基础配置</li>\n</ul>\n<p>不包含：</p>\n<ul>\n<li>Indexer 设置</li>\n<li>完整开发流程</li>\n<li>故障排查矩阵</li>\n<li>AI 调试</li>\n<li>概念性内容</li>\n</ul>\n<h2><a name=\"p-24035-h-2-30\" class=\"anchor\" href=\"#p-24035-h-2-30\" aria-label=\"Heading link\"></a>第2周成果总结</h2>\n<p>成功交付：</p>\n<ul>\n<li>完整的里程碑1核心文档</li>\n<li>更一致的文档结构</li>\n<li>更新的验证数据</li>\n<li>更清晰的 RPC 行为说明</li>\n<li>明确的后续里程碑规划</li>\n</ul>",
          "like_count": 0,
          "quote_count": 0
        }
      ]
    },
    {
      "topic_id": 10193,
      "title": "CellScript - A DSL for Cell-Based Contracts",
      "slug": "cellscript-a-dsl-for-cell-based-contracts",
      "url": "https://talk.nervos.org/t/cellscript-a-dsl-for-cell-based-contracts/10193",
      "created_at": "2026-04-21T04:43:38.654000+00:00",
      "last_posted_at": "2026-04-26T02:48:14.663000+00:00",
      "category_id": 49,
      "tags": [
        "CKB-VM",
        "CellScript",
        "DSL"
      ],
      "posters": [
        "Original Poster, Most Recent Poster",
        "Frequent Poster",
        "Frequent Poster",
        "Frequent Poster",
        "Frequent Poster"
      ],
      "recent_posts": [
        {
          "post_id": 24028,
          "post_number": 13,
          "topic_id": 10193,
          "topic_title": "CellScript - A DSL for Cell-Based Contracts",
          "topic_slug": "cellscript-a-dsl-for-cell-based-contracts",
          "author": "phroi",
          "created_at": "2026-04-25T15:41:20.146000+00:00",
          "updated_at": "2026-04-25T15:41:20.146000+00:00",
          "reply_to_post_number": null,
          "url": "https://talk.nervos.org/t/cellscript-a-dsl-for-cell-based-contracts/10193/13",
          "content_text": "Hey Arthur, thank you!! I appreciate you introducing CellScript publicly!\nFrom what I understand, it gives CKB and other cell-based systems a higher-level language without abstracting away the cell model. Gotta love the honesty about what already works and what is still maturing!\nLooking at the repo, CellScript compiles to ckb-vm-compatible RISC-V assembly or ELF. It also makes resources, shared state, receipts, and explicit Cell effects, plus typed metadata, explicit. That keeps the language tied to the same execution target and cell effects.\nAs you put it:\nArthurZhang:\nThis is an early test release. The compiler works. The type checker catches real mistakes. The codegen produces valid ELF. But the stateful protocol semantics are still maturing, and I’m looking for people willing to break things.\nSo I’d llike to understand where CellScript draws the composability boundary on CKB today.\nIf protocol A already occupies a cell’s type script slot, what is the intended path for protocol B to build on top of it and add new behavior?\nFrom the repo, I see three paths:\nBuild around A with receipt cells or read-only CellDep access via read_ref.\nLater compose multiple verification scripts, which the roadmap still lists under v0.14.\nCombine those two approaches.\nWhich of those best matches how you think about composability on CKB today? Over time, do you expect CellScript to lean toward composing around existing cells, first-class script-to-script composition, or something else?\nSee also: [NIP] Allow some Output Lock Scripts to Validate.\nPhroi",
          "content_html": "<p>Hey Arthur, thank you!! I appreciate you introducing CellScript publicly!</p>\n<p>From what I understand, it gives CKB and other cell-based systems a higher-level language without abstracting away the cell model. Gotta love the honesty about what already works and what is still maturing!</p>\n<p>Looking at the repo, CellScript compiles to <a href=\"https://github.com/tsukifune-kosei/CellScript/blob/634fc35adddccd8b36cd8aca37feefac16ecc760/README.md#language-features\">ckb-vm-compatible RISC-V assembly or ELF</a>. It also makes <a href=\"https://github.com/tsukifune-kosei/CellScript/blob/634fc35adddccd8b36cd8aca37feefac16ecc760/README.md#core-model\">resources, shared state, receipts, and explicit Cell effects</a>, plus <a href=\"https://github.com/tsukifune-kosei/CellScript/blob/634fc35adddccd8b36cd8aca37feefac16ecc760/README.md#language-features\">typed metadata</a>, explicit. That keeps the language tied to the same execution target and cell effects.</p>\n<p>As you put it:</p>\n<aside class=\"quote no-group\" data-username=\"ArthurZhang\" data-post=\"1\" data-topic=\"10193\">\n<div class=\"title\">\n<div class=\"quote-controls\"></div>\n<img alt=\"\" width=\"24\" height=\"24\" src=\"https://talk.nervos.org/user_avatar/talk.nervos.org/arthurzhang/48/11040_2.png\" class=\"avatar\"> ArthurZhang:</div>\n<blockquote>\n<p>This is an early test release. The compiler works. The type checker catches real mistakes. The codegen produces valid ELF. But the stateful protocol semantics are still maturing, and I’m looking for people willing to break things.</p>\n</blockquote>\n</aside>\n<p>So I’d llike to understand where CellScript draws the <strong>composability</strong> boundary on CKB today.</p>\n<p>If protocol A already occupies a cell’s <code>type script</code> slot, what is the intended path for protocol B to build on top of it and add new behavior?</p>\n<p>From the repo, I see three paths:</p>\n<ul>\n<li>Build around A with <a href=\"https://github.com/tsukifune-kosei/CellScript/blob/634fc35adddccd8b36cd8aca37feefac16ecc760/README.md#core-model\"><code>receipt</code> cells</a> or read-only <a href=\"https://github.com/tsukifune-kosei/CellScript/blob/634fc35adddccd8b36cd8aca37feefac16ecc760/README.md#core-model\"><code>CellDep</code> access via <code>read_ref</code></a>.</li>\n<li>Later <a href=\"https://github.com/tsukifune-kosei/CellScript/blob/634fc35adddccd8b36cd8aca37feefac16ecc760/roadmap/CELLSCRIPT_0_14_ROADMAP.md#1-spawnipc-script-composition-\">compose multiple verification scripts</a>, which the roadmap still lists under <code>v0.14</code>.</li>\n<li>Combine those two approaches.</li>\n</ul>\n<p>Which of those best matches how you think about composability on CKB today? Over time, do you expect CellScript to lean toward composing around existing cells, first-class script-to-script composition, or something else?</p>\n<p>See also: <a href=\"https://talk.nervos.org/t/nip-allow-some-output-lock-scripts-to-validate/8636\" class=\"inline-onebox\">[NIP] Allow some Output Lock Scripts to Validate</a>.</p>\n<p>Phroi</p>",
          "like_count": 0,
          "quote_count": 1
        },
        {
          "post_id": 24030,
          "post_number": 14,
          "topic_id": 10193,
          "topic_title": "CellScript - A DSL for Cell-Based Contracts",
          "topic_slug": "cellscript-a-dsl-for-cell-based-contracts",
          "author": "ArthurZhang",
          "created_at": "2026-04-25T23:03:17.117000+00:00",
          "updated_at": "2026-04-26T04:15:55.356000+00:00",
          "reply_to_post_number": 13,
          "url": "https://talk.nervos.org/t/cellscript-a-dsl-for-cell-based-contracts/10193/14",
          "content_text": "Thank you Phroi. This is a very sharp reading of the current design, and I think you are pointing at precisely the right boundary.\nReading the NIP again, I think it captures something quite fundamental about CKB composability. The problem is not merely “how do we add another script?” The deeper question is: where does a constraint live, when is it invoked, what surface of the transaction does it observe, which cells does it actually protect, and what is merely assumed by the surrounding builder or wallet?\nThat is the distinction I would like CellScript to preserve rather than smooth over.\nI would say the three paths you identified are all real, but they live at different levels of maturity.\nToday, the default and most honest path is to compose around existing cells.\nIf protocol A already occupies a cell’s type script slot, CellScript should not pretend that protocol B can simply attach another independent type rule to the same cell. Unless A was explicitly designed for that extension, B should usually build around A through receipts, proofs, companion cells, read-only CellDep / read_ref access, explicit witness requirements, and transaction-level constraints.\nThat is also how I read the NIP: not merely as a concrete mechanism proposal, but as a useful articulation of the slot and coverage problem in the CKB model.\nThis also matches some examples I have heard from @matt_ckb. Some developers seem to want lock scripts to assert conditions when they are attached to a cell. Others move authorization-like logic into the type script, as in rental-style designs. In UDT-like protocols, many state-transition assertions naturally live in the type script, while authorization stays in the lock; but there are also cases where people want the lock to act covenant-style and check transaction-wide output conditions.\nTo me, these are not isolated design oddities. They are all symptoms of the same deeper question: CKB protocols increasingly need a clearer vocabulary for different constraint categories — authorization constraints, attachment-time invariants, transaction-wide covenant constraints, type-local state-transition rules, and inter-protocol composition constraints.\nThe NIP’s output-lock-validation direction is highly relevant, but I would treat it with some care.\nIt may give us another place to express covenant-like constraints, especially where the type slot is already occupied. But I would be cautious about presenting this as if lock and type scripts were interchangeable. They are not. Their invocation conditions, coverage, and social meaning in the model are different.\nFor CellScript, the important thing is to make that difference inspectable:\nwhat is checked by the type script;\nwhat is checked by the lock script;\nwhether the check applies to inputs, outputs, or the whole transaction shape;\nwhich cells are actually protected;\nwhat remains only a builder, wallet, or protocol assumption.\nThis is exactly the kind of boundary I would like CellScript metadata and ProofPlan to surface. CellScript should first model those constraint categories explicitly, and only then lower them into lock scripts, type scripts, wrappers, receipts, companion cells, or future L1 mechanisms such as output-lock validation, depending on the target profile and the available semantics.\nOn the roadmap side, I should probably phrase the v0.14 “script composition” item more carefully.\nThe wording may have made it sound broader than I intended. Spawn/IPC is real and useful, but I do not see it as the default answer to protocol composability. It is better understood as bounded verifier composition: delegated verification, reusable verifier modules, and modular validation pipelines. It does not make a cell’s type script slot multi-tenant, and it should not be presented as doing so.\nThe more important semantic layer is really v0.15, where the roadmap moves into scoped invariants and Covenant ProofPlan. That is where CellScript should make trigger, scope, reads, coverage, on-chain enforcement, and builder assumptions explicit.\nSo the intended layering is:\nv0.14: low-level mechanism for bounded verifier composition;\nv0.15: semantic composability through scoped invariants and ProofPlan;\nlater: combine this with receipts, companion cells, read-only deps, and lock-side or output-lock validation patterns where the coverage is clear.\nThat distinction may not have been clear enough in the roadmap wording, so this is useful feedback.\nIn that sense, I see the NIP less as a separate concern and more as one of the clearest examples of why CellScript needs to exist. A good language layer should not make the underlying model disappear. It should give developers better instruments for seeing where the model’s real boundaries are.",
          "content_html": "<p>Thank you Phroi. This is a very sharp reading of the current design, and I think you are pointing at precisely the right boundary.</p>\n<p>Reading the NIP again, I think it captures something quite fundamental about CKB composability. The problem is not merely “how do we add another script?” The deeper question is: where does a constraint live, when is it invoked, what surface of the transaction does it observe, which cells does it actually protect, and what is merely assumed by the surrounding builder or wallet?</p>\n<p>That is the distinction I would like CellScript to preserve rather than smooth over.</p>\n<p>I would say the three paths you identified are all real, but they live at different levels of maturity.</p>\n<p><strong>Today, the default and most honest path is to compose around existing cells.</strong></p>\n<p>If protocol A already occupies a cell’s <code>type script</code> slot, CellScript should not pretend that protocol B can simply attach another independent type rule to the same cell. Unless A was explicitly designed for that extension, B should usually build around A through receipts, proofs, companion cells, read-only <code>CellDep</code> / <code>read_ref</code> access, explicit witness requirements, and transaction-level constraints.</p>\n<p>That is also how I read the NIP: not merely as a concrete mechanism proposal, but as a useful articulation of the slot and coverage problem in the CKB model.</p>\n<p>This also matches some examples I have heard from <a class=\"mention\" href=\"/u/matt_ckb\">@matt_ckb</a>. Some developers seem to want lock scripts to assert conditions when they are attached to a cell. Others move authorization-like logic into the type script, as in rental-style designs. In UDT-like protocols, many state-transition assertions naturally live in the type script, while authorization stays in the lock; but there are also cases where people want the lock to act covenant-style and check transaction-wide output conditions.</p>\n<p>To me, these are not isolated design oddities. They are all symptoms of the same deeper question: CKB protocols increasingly need a clearer vocabulary for different constraint categories — authorization constraints, attachment-time invariants, transaction-wide covenant constraints, type-local state-transition rules, and inter-protocol composition constraints.</p>\n<p><strong>The NIP’s output-lock-validation direction is highly relevant, but I would treat it with some care.</strong></p>\n<p>It may give us another place to express covenant-like constraints, especially where the type slot is already occupied. But I would be cautious about presenting this as if lock and type scripts were interchangeable. They are not. Their invocation conditions, coverage, and social meaning in the model are different.</p>\n<p>For CellScript, the important thing is to make that difference inspectable:</p>\n<ul>\n<li>what is checked by the type script;</li>\n<li>what is checked by the lock script;</li>\n<li>whether the check applies to inputs, outputs, or the whole transaction shape;</li>\n<li>which cells are actually protected;</li>\n<li>what remains only a builder, wallet, or protocol assumption.</li>\n</ul>\n<p>This is exactly the kind of boundary I would like CellScript metadata and ProofPlan to surface. CellScript should first model those constraint categories explicitly, and only then lower them into lock scripts, type scripts, wrappers, receipts, companion cells, or future L1 mechanisms such as output-lock validation, depending on the target profile and the available semantics.</p>\n<p>On the roadmap side, I should probably phrase the v0.14 “script composition” item more carefully.</p>\n<p>The wording may have made it sound broader than I intended. Spawn/IPC is real and useful, but I do not see it as the default answer to protocol composability. It is better understood as <strong>bounded verifier composition</strong>: delegated verification, reusable verifier modules, and modular validation pipelines. It does not make a cell’s <code>type script</code> slot multi-tenant, and it should not be presented as doing so.</p>\n<p>The more important semantic layer is really v0.15, where the roadmap moves into scoped invariants and Covenant ProofPlan. That is where CellScript should make trigger, scope, reads, coverage, on-chain enforcement, and builder assumptions explicit.</p>\n<p>So the intended layering is:</p>\n<ul>\n<li><strong>v0.14:</strong> low-level mechanism for bounded verifier composition;</li>\n<li><strong>v0.15:</strong> semantic composability through scoped invariants and ProofPlan;</li>\n<li><strong>later:</strong> combine this with receipts, companion cells, read-only deps, and lock-side or output-lock validation patterns where the coverage is clear.</li>\n</ul>\n<p>That distinction may not have been clear enough in the roadmap wording, so this is useful feedback.</p>\n<p>In that sense, I see the NIP less as a separate concern and more as one of the clearest examples of why CellScript needs to exist. A good language layer should not make the underlying model disappear. It should give developers better instruments for seeing where the model’s real boundaries are.</p>",
          "like_count": 0,
          "quote_count": 0
        },
        {
          "post_id": 24032,
          "post_number": 15,
          "topic_id": 10193,
          "topic_title": "CellScript - A DSL for Cell-Based Contracts",
          "topic_slug": "cellscript-a-dsl-for-cell-based-contracts",
          "author": "phroi",
          "created_at": "2026-04-26T02:24:54.605000+00:00",
          "updated_at": "2026-04-26T02:24:54.605000+00:00",
          "reply_to_post_number": 14,
          "url": "https://talk.nervos.org/t/cellscript-a-dsl-for-cell-based-contracts/10193/15",
          "content_text": "Gotcha!! CellScript is focused on making the current Cell model easier to work with.\nAs it stands, CellScript is already valuable for authors who want typed shared state, receipts, locks, and transaction-shaped effects without working directly with the raw format.\nBecause CellScript already explores composition between cells, I had unwittingly assumed you were exploring a bit further in that direction, toward inter-protocol composing standards. If you ever move in that direction, feel free to tag me!\nKeep up the Great Work, Phroi",
          "content_html": "<p>Gotcha!! CellScript is focused on making the current Cell model easier to work with.</p>\n<p>As it stands, CellScript is already valuable for authors who want typed <code>shared</code> state, <code>receipt</code>s, locks, and transaction-shaped effects without working directly with the raw format.</p>\n<p>Because CellScript already explores composition between cells, I had unwittingly assumed you were exploring a bit further in that direction, toward inter-protocol composing standards. If you ever move in that direction, feel free to tag me! <img src=\"https://talk.nervos.org/images/emoji/apple/hugs.png?v=15\" title=\":hugs:\" class=\"emoji\" alt=\":hugs:\" loading=\"lazy\" width=\"20\" height=\"20\"></p>\n<p>Keep up the Great Work, Phroi</p>",
          "like_count": 0,
          "quote_count": 0
        },
        {
          "post_id": 24034,
          "post_number": 16,
          "topic_id": 10193,
          "topic_title": "CellScript - A DSL for Cell-Based Contracts",
          "topic_slug": "cellscript-a-dsl-for-cell-based-contracts",
          "author": "ArthurZhang",
          "created_at": "2026-04-26T02:48:14.663000+00:00",
          "updated_at": "2026-04-26T08:44:12.889000+00:00",
          "reply_to_post_number": 15,
          "url": "https://talk.nervos.org/t/cellscript-a-dsl-for-cell-based-contracts/10193/16",
          "content_text": "Thanks Phroi, really appreciate that.\nI do think inter-protocol composition standards are a very interesting longer-term direction. My current instinct is that this probably belongs more naturally at a CellFabric layer than inside the core CellScript language alone.\nThe way I currently separate the responsibilities is roughly:\nCellScript: authoring and compiling individual cell protocols, including ProofPlan metadata that makes guarantees, coverage, and assumptions explicit;\nCellFabric: a higher inter-protocol intent and composition layer, describing how different protocols coordinate with each other before final CKB settlement.\nSo CellScript should first make lock/type boundaries, receipts, read_ref, witnesses, builder assumptions, and ProofPlan coverage visible for individual protocols.\nA higher CellFabric layer could then describe how protocols expose intents, receipts, conflict keys, settlement plans, read/write boundaries, verifier interfaces, and ProofPlan coverage to one another.\nI would not frame CellFabric as a replacement for lower-level validation changes such as output-lock validation. That still seems like a separate L1 semantics question. But I do think the broader motivation is related: protocols need safer and more explicit composition surfaces.\nI had sketched a related direction here, and I suspect it may eventually be a better home for this kind of inter-protocol composition work, though it would need refinement if framed specifically around the NIP.\nI will definitely tag you if I start exploring this layer more seriously.",
          "content_html": "<p>Thanks Phroi, really appreciate that.</p>\n<p>I do think inter-protocol composition standards are a very interesting longer-term direction. My current instinct is that this probably belongs more naturally at a CellFabric layer than inside the core CellScript language alone.</p>\n<p>The way I currently separate the responsibilities is roughly:</p>\n<ul>\n<li><strong>CellScript</strong>: authoring and compiling individual cell protocols, including ProofPlan metadata that makes guarantees, coverage, and assumptions explicit;</li>\n<li><strong>CellFabric</strong>: a higher inter-protocol intent and composition layer, describing how different protocols coordinate with each other before final CKB settlement.</li>\n</ul>\n<p>So CellScript should first make lock/type boundaries, receipts, <code>read_ref</code>, witnesses, builder assumptions, and ProofPlan coverage visible for individual protocols.</p>\n<p>A higher CellFabric layer could then describe how protocols expose intents, receipts, conflict keys, settlement plans, read/write boundaries, verifier interfaces, and ProofPlan coverage to one another.</p>\n<p>I would not frame CellFabric as a replacement for lower-level validation changes such as output-lock validation. That still seems like a separate L1 semantics question. But I do think the broader motivation is related: protocols need safer and more explicit composition surfaces.</p>\n<p>I had sketched a related direction <a href=\"https://talk.nervos.org/t/cellfabric-a-utxo-generation-and-inter-protocol-composition-layer-for-ckb\">here</a>, and I suspect it may eventually be a better home for this kind of inter-protocol composition work, though it would need refinement if framed specifically around the NIP.</p>\n<p>I will definitely tag you if I start exploring this layer more seriously.</p>",
          "like_count": 0,
          "quote_count": 0
        }
      ]
    }
  ]
}