ipfs是什么项目合法吗
ipfs是什么项目合法吗
为了防止以太网的状态容量无限扩大,我们需要使用一些方法来“去激活”旧状态,使加入网络的节点不再需要存储旧状态。即使大多数客户端变成了无状态,似乎也有理由预见到系统最终会扩展到网络不能始终保证所有状态都可用的程度。有两种方法可以停用旧状态:
1.直接删除,然后移动到另一棵默克尔树上,让关心状态对象的人得到相应的默克尔分支,在未来某个时间使用它激活状态。
2.不要将对象移出树结构;相反,只需在树中的这个位置标记“非活动”,这样节点就不会存储它(协议也不会要求它们这样做)。通过发送一个提供默克尔证明(即见证数据)的事务来访问状态,可以再次访问被停用的对象。
方法(1)对应的是“经典存储租用方案”,方法(2)对应的是旧状态可以忘记的传统“无状态客户端”——模型的最简单扩展。这两种方法都允许关心特定状态对象的个人跟踪默克尔分支,以便在这些状态对象被停用后,可以使用它们来激活它们。但是,这两种方法都存在明显的问题。
当在过期合约,的相同地址创建合约时,方法(1)中会有一些极端情况。也就是说,如果在地址A创建了一个合约,并且该地址已经过期,则在地址A创建这个合约的事务将被重新执行,这将在地址A创建一个新的对象,这将影响原始对象的激活。另一种情况是,当在地址A创建一个对象时,该对象被停用、激活、修改(例如,将合约的资金发送到另一个帐户),再次停用,然后由第一个停用的默克尔分行激活。这违反了预定规则,可能被用于造币;有必要补充额外的默克尔证据来证明一个合约没有被另一个特定的国家激活,而这个国家也在试图被激活。
方法(2)遇到不同的问题。假设两个相邻的地址(即它们之间没有对象)A1和A2被停用。这样不仅A1和A2不再可访问(除非有人存储默克尔分支),A1和A2之间的所有地址也不可访问。也就是说,如果总共有N个地址,大约1/N的可用地址空间不再可访问。当一半的地址被停用时,大约四分之一的地址空间不再可访问。随着时间的推移,寻找空间生成新地址会变得越来越困难。此外,由于新地址越来越多地集中在剩余的“可访问”空间,在指数,每N年将可访问空间减半的影响将会增加
建议
我提出修改方法(2),可以解决以上问题。正如方法(2)的许多建议实现所示,帐户有两种状态:“活动”和“非活动”,非活动帐户是指超过一年未被访问的帐户。要访问非活动帐户,您需要提供见证数据;当一个不活跃的账户被访问时,它将被自动停用(触摸任何账户将重置其一年的逾期计算)。修正案如下:
我们为每个地址添加一个32字节的“纪元前缀”(将被解释为一个整数)。例如,纪元前缀为9的地址如下:0x 00000009 de 0b 295669 a9 FD 93 D5 f 28 d9 EC 85 e 40 F4 CB 697 BAE,前缀为0000009。
默克尔路径会直接依赖于epoch的前缀而不是它的哈希值(所以merkle _ path _ key=address[:4]hash(address[4:])而不是merkle_path_key=hash(address)。这确保了“未使用的”地址空间是连续的。
除非地址的纪元前缀小于或等于区块链运行的年数,否则不能使用该地址
添加了一个CREATE3操作码,该操作码将纪元前缀作为参数,并在具有纪元前缀的地址处创建一个合约。
建议用户和合约始终尽可能创建带有最新纪元前缀的帐户,甚至将其设置为默认设置,因为肯定会有一个带有最新纪元前缀的状态仍然可以访问。为了保留“反事实地址”(即在合约代码发布之前,用户在链上交互的地址[例如,通过发送ETH或ERC20令牌]或在链下交互的地址[通过在信道中交互]),仍然可以创建具有旧纪元前缀的合约。但是,对于想要创建反事实地址的用户,如果他们很长时间没有创建,他们将负责为帐户存储旧状态的分支。
经过多年的运行,预计活动状态将由两部分组成:(1)所有地址空间都带有最新的纪元前缀,以及(2)对应于最近使用的帐户的特定旧状态
请注意,该计划通常会扩展到合约;事实上,积极遵循该计划符合合约自身的运营。因为在这个方案中,地址的存储部分以几个字节为前缀,它们所代表的数字n意味着这些数据在n年内与这些地址相关联。这适用于存储令牌余额等数据。