织梦CMS - 轻松建站从此开始!

我的网站

当前位置: 主页 > 区块链

V神设计理念公布 细数以太坊潜在的优缺点(5)

时间:2021-07-13 10:43来源:未知 作者:admin 点击:
离散节点是十六进制,不是二进制:这样让查找更有效率,我们现在认识到这种选择并不理想,因为十六进制树的查找效率在二进制中可以通过批次存储节

  •   离散节点是十六进制,不是二进制:这样让查找更有效率,我们现在认识到这种选择并不理想,因为十六进制树的查找效率在二进制中可以通过批次存储节点来模拟。但是,MPT 树结构的实现是非常容易出错的,最终至少会造成状态根不匹配,所以我们决定搁置变更,等到 1.1 版本再说。

  •   空值(empty value)与非成员(non-membership)之间没有区别:这样做是为了简化逻辑,以太坊中未启用的账户的值(余额)默认为 0,空字符串也用 0 表示。然而,需要强调的是,这样做牺牲了一些通用性,因而也不是最优的。

  •   终节点(terminating)和非终节点的区别:技术上,标识一个节点 “是否是终节点” 是没必要的,因为以太坊中所有的树都被用于存储固定长度(即键的长度)的数据,但为了增加通用性,我们还是会添加这个标识,以期望以太坊的 MPT 的实现方式能够被其他密码学货币原样采纳。

  •   在 “安全树”(状态树和账户存储树)中采用 SHA3(k) 作为键:使用 SHA3(k),想要通过生成许多的账户(账户最多可让状态树高达 64 层!)并重复调用 SLOAD 和 SSTORE 操作码来 DoS 攻击的难度会大大提高。注意,这也让枚举树变得更困难;如果要使你的客户端具备枚举的功能,最简单的方法就是维护一个映射 sha3(k) -> k 的数据库。

  •   校对注:这里的意思是,如果使用 k 作为默克尔树存储数据的键,其分布可能很稀疏,而攻击者可以容易地规划出需要很深的树路径来存储的账户,并对这些账户重复调用状态访问操作,以此造成网络中的节点超负荷运行,但是,哈希函数的结果是随机分布的,以 sha3(k) 作为键可以使键的分布较为均匀,树高也会较矮)。

      这种特性也是有得有失,这一方面意味着 DoS 攻击会变得更困难,另一方面,也使得一个区块中的交易的状态树访问路径,很少有重合的,因此每次搜索都是复杂度最差的情形。

      此外,这也使得 MPT 不宜实现 “无状态性”(区块自身携带验证所需的数据、验证者无需具有全局状态),因为状态访问的路径不重合,证据的空间效率也是最差情形。当然,也可以说,默克尔树证据的空间效率本身也不够高RLP

      RLP(recursive length prefix):递归长度前缀。

      RLP 编码是以太坊中主要的序列化格式,它的使用无处不在:区块、交易、账户状态以及网络协议消息。详见 RLP 正式描述: https://github.com/ethereum/wiki/wiki/RLP

      RLP 旨在成为高度简化的序列化格式,它唯一的目的是存储嵌套的字节数组 3。不同于 protobuf、BSON 等现有的解决方案,RLP并不定义任何指定的数据类型,如 Boolean(布尔值)、float(浮点数)、double 或者 integer(整数)。它仅仅是以嵌套数组的形式存储结构体,由协议来确定数组的含义。RLP 也没有显式支持 map 集合,半官方的建议是采用 [[k1, v1], [k2, v2], ...] 的嵌套数组来表示键值对集合,k1,k2 ... 按照字符串的标准排序。 (责任编辑:admin)

    织梦二维码生成器
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%
    ------分隔线----------------------------
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    评价:
    表情:
    用户名: 验证码:点击我更换图片
    栏目列表
    推荐内容