首页 > 资讯 > 应用 > CITA:面向企业级应用高性能区块链内核

CITA 的 nonce 有什么作用?

2019-11-01 14:04:10作者:CITA来源:CITA
CITA( Cryptape Inter-enterprise Trust Automation )是一个面向企业级应用的支持智能合约的高性能区块链内核

CITA 的 nonce 是什么作用?

比特币是基于 UTXO 的账号,交易是由 UTXO 来做组成,因为 UTXO 被消费后即失效,所以交易可以认为是唯一的。对于基于状态机的账号模型,用户发送的交易,存在被其他用户获取并重新发送到链上的可能,由此造成交易的多次执行,这种攻击行为称为重放攻击。为了避免重放攻击,需要采取一定的策略。例如以太坊中,用户发送的每一笔交易都必须包含一个自增的 nonce 值,交易一旦被确认,该用户的合法 nonce 值会自增,含有同样 nonce 的交易被认为是非法交易,这样来防止重放。但是对于以太坊的这种设计有一个很大的缺陷,后一笔交易必须等待前一笔交易进交易池才可以,交易只能顺序处理,限制了交易的并行性。例如,对于账户A向同一节点发送某一笔交易 T0 之后,只能等待 T0 打包入块并处理完成后,才可以发送后续的交易,即便后续交易对 T0 没有任何依赖关系,否则可能存在 T0 交易打包入块失败,而导致后续交易成功打包但是验证 nonce 失败。另外,在现实世界中存在同一账户被多人使用,或者向多个节点发送交易的情况,由于交易的 nonce 自增的特性,导致这种情况下,账户向多个节点同时发送交易会比较困难。

在 CITA 中 nonce 使用的是一个随机的字符串(有一定的长度限制),来使交易生成不同的 hash,使用 hash 来作为交易的唯一性验证。但是仅仅用 nonce 来保证哈希的唯一性,还是远远不够的,因为同一个用户发送交易足够多,nonce 还是有很大概率重复,且在工程上去保证全局 nonce 的唯一也会严重影响性能。在 CITA 的交易中 nonce 和 valid_until_block 配合使用,由此只要保证在max_valid_until_block 范围交易的 hash 没有重复,就可以保证交易永远不会重复。并且 max_valid_until_block 的值可以保证验证 nonce 的缓存池不会过大。在兼顾性能和并行处理的同时,非常完美的解决了交易的唯一性问题,防止了重放攻击。

合作联系/投稿/纠错

标签

    热文推荐