# 链上ETF重启Day 1：重新出发，我终于开始写代码了

By [Keegan小钢](https://paragraph.com/@keeganlee) · 2025-07-28

---

前言
--

我在前一篇文章 [《周末和朋友 Catch Up 引发的一些思考》](https://mp.weixin.qq.com/s/u_MY0RqTWrfFt5wBmNJVRw) 中提到，我想挑战自己，比如“**3 Projects in 3 Months**”或“**每月上线一个小产品**”。

而我选择的第一步，是重新开发一款优化后的链上 ETF 产品 —— 一个真正能跑的智能合约 + 可交互的前端界面。

本来计划是七月中旬动工，但因为最近忙于准备搬家和孩子新学校的事情，动工的事情一拖再拖。直到昨天，我终于坐下来打开代码编辑器，开始写第一行代码。第一天的进度刚好用满了 Claude Code 的使用额度，趁着这个“强制休息”，我决定做一个小结。

链上ETF
-----

这款产品并不是全新概念，而是基于我之前做的课程项目 **BlockETF** 延续而来。它最初是我在「[从0到1开发Dapp实战课程](https://mp.weixin.qq.com/s?__biz=MzA5OTI1NDE0Mw==&mid=2652495113&idx=1&sn=0f62e990a53fc947a5cd3febcf39518e&token=1308886941&lang=zh_CN&scene=21#wechat_redirect)」中讲解的实战项目。

BlockETF 是一个“模拟 ETF”机制的链上资产管理产品，支持用户通过一个代币间接持有一篮子加密资产，具有以下特性：

*   用户可通过一个 ETF Token，间接持有多种资产（如 BTC、ETH、BNB、SOL 等）
    
*   支持申购 / 赎回机制（Mint / Burn）
    
*   支持再平衡机制（Rebalance）
    
*   链上透明、可组合性强，适合实验性资产管理策略的原型验证
    

具体来说，BlockETF 的核心功能如下：

*   **标的资产**：我打算设置为 Top5 的几个资产：BTC、ETH、XRP、BNB、SOL，每种资产有对应的权重。
    
*   **申购**：用户可同时投入所有标的资产一起进行申购 ETF Token，也可使用单一资产（如 USDT）自动完成 Swap 成标的资产的方式进行申购。
    
*   **赎回**：用户可以将 ETF Token 赎回成所有标的资产，也可自动 Swap 成单一资产（如 USDT）出来。
    
*   **再平衡**：当标的资产的实际权重偏离目标权重超过阈值后，就可执行再平衡，让资产回归目标权重值。
    
*   **费用**：没有申购费，但会设置收取管理费和赎回费，部分用来补贴再平衡产生的损耗。
    

Claude Code vs Cursor
---------------------

在这之前，我主要是用 **Cursor** 来辅助我进行开发的，一直觉得也挺好用的，尤其是它本地集成得很好、响应快、上下文保持也不错。

但昨天我开始尝试用 **Claude Code** 来从零搭建 BlockETF，一个下午使用下来，明显感受到：**Claude 在“理解整体需求”和“结构设计”方面，体验比 Cursor 的 Agent 更胜一筹**。

最直观的差异是：**Claude 的输出更像是在跟一个有架构经验的人合作**。它不会立刻跳进代码细节，而是先帮我梳理整体需求——确认目标、规划模块、建议接口，甚至整理出开发步骤。我只简单描述了一句：“我要做一个链上ETF，包括合约和前端，帮我从 0 到 1 搭建起来”，Claude 就立刻列出了一个清晰的 **Todos 列表**，然后按图索骥，一步步完成任务。这种“先规划、后执行”的模式，非常适合复杂工程，体验上更像是一个“远程技术合伙人”。

![](https://storage.googleapis.com/papyrus_images/2288e4de37e4712bf8c4aeb670b6b6780c15eb2654a37ce2a3e2981e43861a13.png)

相比之下，**Cursor Agent 更像是一个本地代码助手**，它的能力偏向细节和上下文局部的优化，比如：

*   你选中一个函数，它可以帮你补全或重写；
    
*   你遇到报错，它能快速定位问题并提出修改建议。
    

这些在“已有代码基础上的改进”中非常实用。但如果是“从 0 到 1 构建一个新产品”，它就显得略有局限，没有 Claude 那种整体设计能力，感觉少了点“高屋建瓴”的视角。

另一个实际使用上的区别是：**Cursor Agent 的代码建议和终端命令都需要我一个个点击 Accept，节奏容易被打断**。Claude 则更像一位可以“自己干活”的搭档：它在执行一个任务前，会先告诉我要做什么，然后可以**自动完成整个流程**，中间不需要我手动确认，我可以放心去干别的事。执行完，它会发个通知让我回来 review，整个交互体验非常高效。

昨天一天下来，**Cursor 在我这边已经“退化”为一个代码查看器**——我主要用它来浏览 Claude 生成的代码。而一旦需要改动或重构，我就直接让 Claude 处理了，效率高得多。

Coding Agent 不是银弹
-----------------

尽管 Coding Agent（包括 Claude Code、Cursor 等）在辅助开发上展现了强大的能力，但它们**绝不是解决所有问题的银弹**。

就拿昨天 Claude Code 帮我设计和实现 BlockETF 来说，我明显感受到它在某些地方存在**过度设计**的问题——把本来可以很简单的逻辑搞得复杂冗长。同时，生成的代码也经常出现**冗余或重复**，有些关键逻辑处理得不够周全，甚至引入了潜在的 bug。

这些问题，往往只有有一定经验的开发者才能识别。对于技术经验尚浅的人，或者对代码结构不敏感的非技术人员来说，很难发现其中的设计隐患。

举个例子：如果我想做一套餐桌椅，直接对 Coding Agent 说：“帮我做出一套餐桌椅”，它并不会一次性生成一套完全符合我预期的、可用的成品。

相反，真正设计和制作一套餐桌椅，涉及一系列具体问题：餐桌要多大？什么材质？风格要现代还是复古？椅子靠背要多高？承重多少？要不要靠垫？……每一个细节都需要逐步拆解、明确、沟通，然后再逐一实现。

Coding Agent 也是一样。它擅长帮我完成具体的“零件”任务，比如写一个函数、搭建一个结构，但它无法凭一句话就理解我对整个产品的全面需求。**作为开发者，我仍然要承担“设计师”和“项目经理”的角色**，引导它一步步完成，校正每一个阶段的输出。

说得直白点，Coding Agent 更像是一个**能干的初中级程序员**。在真正“让它上手干活”之前，最重要的仍然是我自己先梳理清楚：业务需求是什么、核心逻辑怎么组织、架构应该如何设计……否则一旦让它主导节奏，很容易做着做着越做越乱、频繁返工。

昨天就是这样的经历：一开始我顺着它的思路一步步实现，最后却发现逻辑越来越绕，代码越来越复杂。**最终我还是回到了我课程中原本的设计思路**，删掉多余部分，重新梳理架构，才让整个项目回到可控范围内。

所以我更愿意把 Coding Agent 当作一个“放大我已有设计的工具”，而不是替我做设计的那个人。

---

*Originally published on [Keegan小钢](https://paragraph.com/@keeganlee/etf-day-1)*
