Skip to content

type id 合约

Chen Yu edited this page Feb 23, 2022 · 4 revisions

前置知识

CKB 交易在执行合约的时候, 支持 script

hash type: type # 意味着去找 type script 的 hash
code hash: hash(contract cell's type script) # 指定要找的 type script 的 hash
args: 任意数据

的形式, 通过 contract celltype scripthash 去定位合约所在 cell

Type id 合约

type id 合约是内置于 CKB 节点的系统级别的合约, 他的运行结果是在部署合约的时候保证新产生的合约所在的 celltype script 会是独一无二的, 假设一个合约部署的时候依赖了 type id 合约, 那么这个合约 cell 会是下面这个结构

type script:
    # type script of deployed contract
    hash type: type
    code hash: type id 合约的 code hash
    args: 一段基于部署合约时算出来的 hash

data: 合约源码

这个 type script 是独一无二的, 因为 hash typecode hash 指向 type id 合约, 是既定的. args 是部署合约的时候计算出来的, 不会存在冲突.

因为这个 type script 是独一无二的(虽然区别只有 args), 所以可以考虑以 hash(type script) 为索引来定位合约所在的 cell, 后续业务合约升级时, 只要新部署的合约继续带上这个同一个 type script(主要是那个 args 不变), 就可以认为是同一业务的合约, 所以上面这个 type scripthash 被是为合约的 id

type script:
    # type script of deployed contract
    hash type: type
    code hash: type id 合约的 code hash
    args: 来自上一版合约所在 cell 的 type script 的 args

data: 新的合约源码
Clone this wiki locally