代码该写到哪里?

读了一些资料,发现 Cell 的 data type lock 三个字段中都可以存放代码的,那再写智能合约的时候,每个字段都没有清晰的分工呢?

1 Like
  1. Holders of asset cell can change the owner of the asset cell by updating Lock.

lock 脚本的作用比较清晰,主要负责资产的 owner 的控制,跟比特币的 lockScript 类似

这个问题你可以看一下 理解 CKB 的 Cell 模型,写的非常棒棒棒。

话说…昨晚做梦都是Input和OutPut…

type 定义了 data 字段中保存的数据在状态迁移过程中必须要遵守的规则,是对状态的约束

理解 CKB 的 Cell 模型 文章中还有一些更具体的描述。的确很值得参考。

1 Like

代码一般都是放在某个 cell 的 data 里。Type 和 lock 通过 code hash 引用需要的代码,通过 code hash 从交易的 deps 里找到匹配的 cell,加载其 data 到 CKB VM 运行。

早期的 demo 因为使用了 mruby,cell data 放到是 mruby interpreter,而实际的代码实际是放在了 type 和 lock 的 args 里,这里是比较容易混淆的地方。但是对于 CKB VM 来说,加载的 byte code 还是来自 cell data,只不过 mruby 会去解释执行 args 里的 ruby 代码。

这是重点。

我觉得把 data 里的代码理解为 lib,其他代码理解为业务逻辑(lock 处理所有权,input 处理数据验证),就清晰多了

当业务逻辑代码里可重用的部分独立出来了,就可以找个 cell 用 data 存一下(相当于包一个 lib 出来),然后重构逻辑代码,引用库函数(code hash)解决问题。所以 data 的代码和另外两处的代码不是一个逻辑层级的

make a lot of sense