CKB交易检验生命周期【亚博手机网页版】

本文摘要:交易由递交到的outputs_validator(从027code_hash==secp256k1_blake160_sighash_allscriptcode_hash==secp256k1_blake160_multisig_allscript

交易

节点

我们都告诉 Nervos CKB 是一个以状态为中心的架构,并且用交易回应状态变更和迁入。而且 Nervos CKB 获取基于 Cell Model 和 CKB VM 的编程模型。在这个模型中,去中心化的应用逻辑被分为两个部分:状态分解和状态检验。

状态

状态分解逻辑在客户端运营,新的状态被包成交易,检验通过后广播到整个网络。非常简单来说 CKB 的编程模型分为如下三部分:· 状态分解:链下· 状态检验:CKB VM· 状态存储:Cell Model之前 CKB 开发者 luochao 给大家讲解了如何用最少见最简单的方法在 CKB 上建构交易——也就是状态分解。在本篇文章中,CKB 开发者 DingWei Zhang 和 luochao 将之后分别为大家介绍状态检验的研发细节:「CKB 交易检验的生命周期」和「CKB VM 检验规则」。CKB 交易检验生命周期RPC首先,发送到方会结构一笔交易,通过 RPC 递交。

交易由递交到的 outputs_validator (从 0.27.0 版本引进)展开检验。配置文件的检验逻辑还包括检查各种东西:transaction.outputs.all{ |output|let script = output.script(script.code_hash == secp256k1_blake160_sighash_allscript.hash_type == “type”script.args.size == 20) ||(script.code_hash == secp256k1_blake160_multisig_allscript.hash_type == “type”(script.args.size == 20 || (script.args.size == 28script.args[20..28].is_valid_since_format))}transaction.outputs.all{ |output|let script = output.typescript.is_null || script.code_hash == daoscript.hash_type == “type”|| (script.has_lock_period()since.is_absolute())}此检验目的避免格式不准确的交易,例如在 Common Gotchas 中提及的交易。https://github.com/nervosnetwork/ckb/wiki/Common-Gotchas#nervos-dao此外,可以将其配备为 passthrough 以跳过此检验。

必需

交易递交到本地节点后,节点还不会输入交易 id,您可以用于该 id 追踪交易的状态。检验在广播交易并转入 mempool 之前,交易将在本地检验和继续执行。步骤 1——Resolve本质上,交易 input 只是指针,如下右图:struct OutPoint {tx_hash:Byte32,index: Uint32,}我们在交易继续执行之前通过指针搜集提到的数据,这个过程称作「解析交易」。我们还必须检查这个交易的所有输出都是有效地的(没反复或双花)。

步骤 2——检验检验步骤必须检查如下要素:1、版本(目前必需是 0)2、serialized_size 必需大于如下容许:pub fn serialized_size(self) – usize {// the offset in TransactionVec header is u32self.as_slice().len() + molecule::NUMBER_SIZE// molecule::NUMBER_SIZE = size_of::u32() 4}3、inputs 不是机的inputs().is_empty() || outputs().is_empty()4、inputs 是成熟期的对于每个 input 和 dep,如果提到的 output 交易是 cellbase,那么它必需最少经过 4 个 epoch 证实。5、capacityinput capacity 的和必需大于或相等 output capacity6、duplicate_depsdeps 无法反复7、outputs_data_verifier「output data」字段的数量必需相等 outputs 的数量8、sincesince 值必需遵循 RFC:Transaction valid sincehttps://github.com/nervosnetwork/rfcs/blob/master/rfcs/0017-tx-valid-since/0017-tx-valid-since.mdCKB VM 将继续执行交易脚本,并输入所消耗的 cycles 个数。

向网络广播如果检验顺利,当前节点将交易(具有 cycles 值)广播给它的所有对等节点(它所相连的节点)。在检验告终的情况下,将仍然广播交易。交易流经各个「原始节点」,这些节点反复前面步骤中叙述的检验过程,并检查 cycle 值否与检验交易时用于的实际 cycle 相匹配。

本文关键词:版本,广播,交易,状态,亚博网页版登录

本文来源:亚博网页版登录-www.miljoshop.com

相关文章

网站地图xml地图