· 状态存储:Cell ModelTx-pool
对付每个 input 和 dep,假如引用的 output 生意业务是 cellbase,那么它必需至少颠末 4 个 epoch 确认。
pub fn serialized_size(&self) -> usize { // the offset in TransactionVec header is u32
let script = output.type
此验证旨在防备名目不正确的生意业务,,譬喻在 Common Gotchas 中提到的生意业务。
3、inputs 不是空的
我们都知道 Nervos CKB 是一个以状态为中心的架构,而且用生意业务暗示状态变动和迁移。并且 Nervos CKB 提供基于 Cell Model 和 CKB VM 的编程模子。在这个模子中,去中心化的应用逻辑被分成两个部门:状态生成和状态验证。
|| (script.has_lock_period() && since.is_absolute())struct OutPoint {
}
since 值必需遵循 RFC:Transaction valid since
input capacity 的和必需小于或便是 output capacity
CKB VM 将执行生意业务剧本,并输出所耗损的 cycles 个数。
self.as_slice().len() + molecule::NUMBER_SIZE
}
}
(script.code_hash == secp256k1_blake160_multisig_all && script.hash_type == "type" && (script.args.size == 20 || (script.args.size == 28 && script.args[20..28].is_valid_since_format))
transaction.outputs.all{ |output|
// molecule::NUMBER_SIZE = size_of::<u32>() 4
步调 2——验证
状态生成逻辑在客户端运行,新的状态被打包成生意业务,验证通事后广播到整个网络。简朴来说 CKB 的编程模子分成如下三部门:
1、版本(今朝必需是 0)
· 状态验证:CKB VM
在验证失败的环境下,将不再广播生意业务。生意业务流经各个「完整节点」,这些节点反复前面步调中描写的验证进程,并查抄 cycle 值是否与验证生意业务时利用的实际 cycle 相匹配。
6、duplicate_deps
RPC
deps 不能反复
let script = output.script
CKB 生意业务验证生命周期
我们在生意业务执行之前通过指针收集引用的数据,这个进程称为「理会生意业务」。我们还需要查抄这个生意业务的所有输入都是有效的(没有反复或双花)。向网络广播
默认的验证逻辑包罗查抄各类对象:
5、capacity
7、outputs_data_verifier
在广播生意业务并进入 mempool 之前,生意业务将在当地验证和执行。
inputs().is_empty() || outputs().is_empty()
}
· 状态生成:链下
首先,发送方会结构一笔生意业务,通过 RPC 提交。生意业务由提交到的 outputs_validator (从 0.27.0 版本引入)举办验证。
假如验证乐成,当前节点将生意业务(带有 cycles 值)广播给它的所有对等节点(它所毗连的节点)。
之前 CKB 开拓者 luochao 给各人先容了如何用最常见最简朴的要领在 CKB 上构建生意业务——也就是状态生成。在本篇文章中,CKB 开拓者 DingWei Zhang 和 luochao 将继承别离为各人讲授状态验证的开拓细节:「CKB 生意业务验证的生命周期」和「CKB VM 验证法则」。
本质上,生意业务 input 只是指针,如下所示:
生意业务提交到当地节点后,节点还会输出生意业务 id,您可以利用该 id 跟踪生意业务的状态。
2、serialized_size 必需小于如下限制:
验证
https://github.com/nervosnetwork/rfcs/blob/master/...
步调 1——Resolve
transaction.outputs.all{ |output|
tx_hash: Byte32,
验证步调需要查抄如下要素:
另外,可以将其设置为 passthrough 以跳过此验证。
(script.code_hash == secp256k1_blake160_sighash_all && script.hash_type == "type" && script.args.size == 20) ||
index: Uint32,
「output data」字段的数量必需便是 outputs 的数量
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。