Ckb区块结构相关疑问

ckb定义区块头的时候有几个字段是bytes类型,请问区块头的长度是可变的吗?
我看到区块头里有一个叫dao的字段,这个字段是做什么的?
区块头的difficulty字段是16进制表示的net-difficulty,还是nbits?
cellbase中outputs字段中的data字段有哪些限制?
从代码来看对区块头进行hash的时候直接使用了一个序列化方法,这个序列化后得到的数据是什么格式?直接hex表示还是flatc压缩后?

Header 结构还在变,稳定之后会有文档说明各个字段的用途。

字段 dao 是用来验证 DAO 取款交易。现在 DAO 取款是在 CKB VM 里验证 outputs capacity 之和 <= inputs capacity 之和 + 利息。里面是 4 个小端序的 u64,依次是

  • version: 现在必须为 0
  • ar: 是累积的复利,等于 1 单位的 CKB 如果在创世块就存入 DAO,到父块为止的本金+利息之和。这个数是个小数,保存的是 math.floor(ar * 10^16)
  • c: 到父块为止的累积已增发的一类和二类之和
  • u: 到当前块为止的系统中已经被占用的(被 cell 的结构字段或者 cell data 占用)的 capacity 之和。

Difficulty 表示 hash 要小于 2^256 / difficulty 才是 PoW 合格的块。

Header hash 计算是对序列化之后二进制做 blake2b,序列化的算法马上会发布相应的 spec

1 Like

请问spec发布了吗?在哪里能看到?谢谢