读了一些资料,发现 Cell 的 data type lock 三个字段中都可以存放代码的,那再写智能合约的时候,每个字段都没有清晰的分工呢?
1 Like
- Holders of asset cell can change the owner of the asset cell by updating Lock.
lock 脚本的作用比较清晰,主要负责资产的 owner 的控制,跟比特币的 lockScript 类似
代码一般都是放在某个 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