CCC 2.0.0 Prerelease - CoBuild, Coin 和 CKBC(oin)

本文不代表任何组织。同时发表在我的个人博客上


我失败了。

从现在看,说不定我真的会像半年前担心的那样,等到明年才发布 CCC 2.0.0 版本。

「阅读 CCC 里 UDT 相关的工具。请帮我制定一份重写相关逻辑的方案。」

Coin

硬币的概念已经存在了上千年,在人类社会中承担着价值流通的职责。在 CKB 上,我们也有数字版本的硬币,即后来被称为 UDT 的寻常代币。每一枚硬币都由 CKB 上的一个 Cell 承载,由类型脚本约束着代表硬币面额的数据。一枚硬币可以拆分成多枚,多枚也可以组合回一枚,而每一枚又都可以在不同的地址中流通。

CKB 有两种货币资产,分别是原生代币和硬币。原生代币几乎是必须支持的类别,但处理原生代币相关的问题,例如最小占用费,却需要消耗开发者大量的心力。而当开发者终于准备支持硬币时,周边基础设施的缺失又让能完整支持硬币的生态应用少之又少,光是在链下实现简单的收付款就是一种挑战,更别说复杂的链上逻辑。

因此,在这次以硬币为主题的预发布里,我决定重写旧的 UDT 包,抛弃很多原来没设计好的部分。同时,我也决定用 Coin(硬币)这个旧名字代替不够直观的 UDT,因为它在社会中有着更广泛的共识,也更能直观体现 CKB 上寻常代币有着独立面额的特点。

CKBC(oin)

新的 Coin 包试图为应用简化硬币操作,而 CKBC(oin) 则试图将硬币的概念也拓展到原生代币上。对于只关心货币资产价值的应用,CKBC 的存在能让它们不再需要分别处理原生代币和硬币,从而降低应用的开发门槛。

CKBC(oin) 的设计中,用户必须通过锁定 CKB 才能铸造 CKBC,因此每一枚 CKBC 背后都对应着和面额相同数量的 CKB。锁定的 CKB 在链上以公共金库的形式存在,只有烧毁 CKBC 时才能解锁金库。

这种锁定并铸造的方案和 iCKB 很像。在两种设计中,用户都可以持有锁定了 CKB 价值的硬币。但在 iCKB 的设计中,CKB 被锁定在 Nervos DAO 中,以牺牲部分和 CKB 间的流动性为代价,为持有 iCKB 的用户提供了稳定的收益。

虽然 CKBC 和 iCKB 听起来会互相抢夺用户愿意锁定的 CKB,但它们绝非竞争关系。得益于 CKBC 和 CKB 间优良的流动性,用户随时可以解锁 CKBC 并重新锁定为 iCKB。CKBC 简单的设计帮开发者迈出了兼容硬币的第一步,而在这之后,他们只需要沿着同样的路径,就可以为已经支持了硬币标准的应用加入更多的硬币,包括 iCKB。

在 CKBC 的设计和工具包之后,我还完成了配套的网页工具。用户可以在网页上连接自己的钱包,完成 CKBC 的铸造、解锁和转账等操作。在实现这个工具的过程中,我也注意到了 CKBC 包里需要重新打磨的逻辑。

例如在设计中,CKBC 金库和 CKBC 代币其实是两种可以互相转换的硬币。比起要求开发者单独操作这两种硬币,最终实现利用了它们之间的强联系,让代币的铸造总随着 CKB 被锁定到金库中,而代币的烧毁也总随着金库被解锁。

再比如,CKBC 是去中心化的协议,所有人都共享同一套 CKBC 金库。如果只是简单按时间选择,那在多个用户同时操作时,多笔包含同一个金库的交易必然互相冲突。为了降低冲突发生的可能性,最终实现选用了基于概率选择金库的方式。

「这份设计中有几个明显的问题,请帮我评估可能的修复方案。」

命令行重新开始滚动,AI 继续搜索相关的资料。我有多长时间没好好写代码了呢?

对于觉得自己动手比给 AI 下指令更快的情况,我偶尔还会按自己的想法修改代码;难以用自然语言描述的构思,简短的伪代码也是不错的沟通方式;审阅 AI 生成的代码更是家常便饭,直到现在我也相信人类审核的必要性。

但我想说的不是这些。我已经记不得上一次认真思考解决问题的代码方案是什么时候了。我也忘了进入心流状态,几个小时盯着同一份代码是什么感觉。

把看到的问题粗暴地塞到对话框里,然后指派一个看着顺眼的方案;冲一杯咖啡,泡一杯茶,看会视频,刷会社交媒体,总之任何能打发 AI 思考时这段无聊时间的事情;别忘了时不时注意 AI 的进展,等着看它噼里啪啦地把结果吐出来。重复这个过程。

一阵烦躁。与其说我在意每个屏幕上各自切换着的内容,它们更像是思绪里的填充物,让我无暇在意自己在做的事情有多无聊。「迟早要被取代的家伙还在苟延残喘什么。」是啊,我在做什么?「也许我不该继续写代码。」也许我错得太久了。「再努力的人也只能沦为 AI 的训练数据。」人们怎么能这么心安理得?

我不愿让这些混乱的念头占领全部的空白。

「忘了之前对话的内容吧。有趣的想法:我想把 CKB 本身包装成代币,并从这个具体案例出发,重新思考我们需要怎样的工具。把提炼出来的概念叫做硬币 Coin,这样包装代币就可以叫 CKBCoin,你觉得怎么样?」

CoBuild

我签名释放了硬币,等量的硬币进入你的地址,这是一次最简单的硬币转账操作。但是,这个过程也可以理解成我烧毁了硬币,而你刚好铸造了等量的硬币,只看最终状态难以区分。

CKB 这种链上只关心最终状态转移的设计,的确减少了不必要的信息暴露,对隐私而言是件好事,但过程中的意图信息缺失也为开发者带来了额外的挑战。在交易组装、验证行为和数据统计等场景中,开发者们要不就得像个侦探一样,从最终结果反推出发生了什么事情;要不就提前做好小抄,额外记下交易的意图供后面参考。

为了存放意图数据,CoBuild 协议规定了一套统一的信息解析方式,从而在交易中开辟了额外的空间。除此之外,原始的 CoBuild 设计还包括了链上验证逻辑、应用间数据交换格式和可组合交易片段等规范。

不过,这次我在 CCC 中重新引入 CoBuild 协议,只是为了简化 Coin 包的操作。Spore 协议的教训,因过早在链上强制要求 CoBuild 信息而导致的开发体验灾难,至今难忘,我并不希望因为急于实现完整的 CoBuild 而重蹈覆辙。

在 CoBuild 包的帮助下,新的 Coin 包也保持了 CCC 一贯以来「交易流水线」的设计。在往交易里添加操作的过程中,工具可以通过 CoBuild 直接了解交易里已有的意图,避免潜在的冲突。因此,在同一笔交易中,开发者可以自由组合硬币的多种操作。

专业的用词、完整的解析、详细的描述……思想空洞,充满错误。

「请你对发布的内容负起责任,检查 AI 生成的内容。」

刚刚想要认真阅读的欣喜已经消失,心情从无奈变成了愤怒,又再次变回无奈。以为自己终于找回了故友赠予的礼物,却发现只是被随手丢弃的废物,被 AI 的长篇大论欺骗的我心里大概就是这样的感觉吧。

离新年还有四个月。

待办事项随着鼠标滚动,内容流出视野。我打从心底里知道,我该处理那些事情,给出没人会挑剔的正确答案,写下不批判任何人的文字,成为一个更聪明的 AI。

手指却在眼睛勇于看清最后一条内容前关闭了页面,但还是没能阻止堆积物透过鼻子攥住大脑。为什么我没在写代码?我该写代码了。我需要写代码了。我必须写代码了。

我想写代码了。

「回到之前的问题。调研 CoBuild 协议的设计,我想用它来记录交易构建过程中的意图。」


10 Likes

AI is increasingly enabling us to say: “I can,” but it also increasingly demands that we answer: “Why me?”

2 Likes

I liked the insights into your personality in this text. It hasn’t been said often enough and needs to be repeated at least twelve thousand more times in the near future.

“Don’t believe anything an AI generates; always assume it made it all up. Tell it to back up its statements with reliable sources, and tell it to verify its own output. Then check its output and ask critical questions—let it break what it generated itself, and then ask it why it was able to break it and why it didn’t build in protective components beforehand. Repeat this until the result looks good.”

Have it solve only small subtasks; putting them together into the big picture is a separate task.

Imagine you have a 12-year-old who wants to get your work done at the speed of light. But you have to explain everything to him—he’s just a 12-year-old. How is he supposed to know which way to turn? He’s never been here before.

5 Likes

To be honest, it seems like coding is getting boring and exhausting, reviewing codes, Ai hallucinating, a bug you can solve without need for a google search is staring to be harder to solve alone.
Maybe we are reaching a place where Software Engineers cannot think critically anymore.

3 Likes

That’s why developers need to have personal guardrails, just like @knmo said a 12 years old doesn’t know better; the better thing to do is brainstorm along side it.

2 Likes

The foundation of today’s NN was laid during an exciting era. It was an time before the widespread adoption of artificial intelligence and when quantum computers were still largely theoretical.

1 Like

Perhaps the approach should be to start with user needs and focus on solving problems; that way, AI can truly serve as a helpful tool. In any case, thank you very much for your contributions to the entire nervos network.

2 Likes

老实说,最新的 AI 模型们已经聪明到了一种程度,以至于很多时候我不需要对它产出的代码进行修改。我毫不怀疑,AI 会随着技术发展变得比现在更聪明,写出简洁、严谨、超越大多数程序员「正确」程度的代码。在那个时候(也许已经不远了),我很难再用「AI 需要被监视」来说服自己,这更多像是当下安慰自己的方式。

这也是为什么我会提出「迟早要被取代的家伙还在苟延残喘什么」,「再努力的人也只能沦为 AI 的训练数据」。人们在带着 12 岁的孩子往前走,而这个 12 岁的孩子正在积极地把人变成养料,让自己长大。

在这篇文章里,比起反对 AI,我更想作为有情感的人类,记录人与 AI 相处的尝试。(这一点我想感谢 @zz_tovarishch,和他的讨论总是让我受益匪浅)

其中一个方面是「人们能怎样使用 AI?」。我们既可以

放弃思考,把一切丢给 AI;也可以

自己思考可能的做法,让 AI 帮助我们完善;更可以

让 AI 协助我们获得思考需要的信息。不同的使用方式会让我们对 AI 产生不同的看法。

另一个更重要的方面是「AI 这么强大,人的角色在哪里?」。AI 真的迟早有一天会取代人类开发者吗?

我想用文章里提到的 Coin 和 CoBuild 作为例子,它们想解决的问题几乎从 Nervos CKB 一开始持续至今,但却并没有随着 AI 的出现而魔法般地消失。类似 Token 标准、意图信息和 Open Transaction 这样的开放性问题总是存在,即使我们提出了可能的解决方案,也很可能不会知道那是否正确。

但这并不代表这些解决方案没有意义,正是人们不断地提出、打磨自己的想法,并把它们付诸实践,我们才最终得以摸索到这一步。AI 就算能帮我们把路走得更顺畅,也没法让我们跳过探索直接得到答案。AI 让人们更容易说出「我能做」,但「因为我可以(Because I can)」却并没有神奇地变成「我想做」,而只有人们愿意去做,事情才会被推动着前进。

这也是我最后一个想讨论的方面「我们该怎样使用 AI?」。我们还在社区里,是因为相信这里有一群愿意探索 CKB 未来可能性的人,我们一同合作能把事情做得更好。使用 AI 也应当帮助我们达到这样的目标,例如 Babel Reunited 插件就降低了社区成员沟通的门槛。

而糟糕的使用方式……我们已经有了太多的例子,我想我不必再重复一遍。

5 Likes

I’m not being pessimistic here, but i think we are fighting a losing battle; Use guardrails: Yes, Code review: Yes. but with every new version those review and guardrails are digested and the model becomes better at it. we should just exist alongside it for now and gradually our place will be carved out :joy:

3 Likes

The twelve-year-old can cook pasta now! So do we no longer have to worry that she’ll burn her fingers or forget to turn off the stove? Does that mean, just because she can cook pasta, we’ll now be eating pasta that’s way too salty, with nothing but soy sauce or ketchup on the side? No. We’re still keeping an eye on things and making sure to get vegetables and fish, because we know that otherwise the meal won’t be nutritious or tasty. And in the worst-case scenario, the house could burn down. But you don’t really need to say that, because a 12-year-old isn’t a trained chef. And even adults who have been cooking for years mess up a meal every now and then. When a caregiver says, “Wash your hands!” then the child has probably already learned how to use soap and water.

3 Likes