http://www.7klian.com

存储押金机制(上)

那么,除了我的账户余额信息外,尚有哪些信息是执行生意业务时所必需读取的呢?那就是智能合约的变量信息。
首先,存储押金并不会在生意业务执行前被锁定。打个例如说,假如生意业务提倡人的账户有 10 CFX,生意业务费需要付出 5 CFX,那么在生意业务执行期间,提倡人可用的余额只有 5 CFX。但假如生意业务的提倡人付完生意业务费的账户余额有 5 CFX,Storage Limit 是 3KB (需要 3 CFX) 的存储押金,那么生意业务执行期间,账户可用的余额是 5 CFX 而不是 2 CFX。可是,假如填写 Storage Limit 过大,譬喻 7KB,将会导致生意业务前查抄的失败。
需要留意的是,存储押金和 Gas 用度差异。Gas 所代表的计较资源,是在生意业务执行期间,被一个又一个指令执行耗损掉的。而存储押金所代表的存储资源,是在生意业务执行竣事后,将执行功效从缓存写入到硬盘时,才开始耗损的。这导致存储押金和 Gas 用度的逻辑有很大差异。
在 DeFi 大火的配景下,智能合约所包袱的成果也日趋巨大,常常呈现用户挪用 A 合约,A 合约再挪用 B 合约的环境。在 Conflux 的存储押金机制设计中,无论合约颠末尾几层挪用,都由最初提倡生意业务的用户付出整个生意业务执行期间发生的所有存储押金。

在 Conflux 的设计中,当颠末足够久的时间事后,我和张三、李四、王五这些人的转账记录会被全节点删去,只留下相应区块的哈希值(这部门实现的细节详见文章 Conflux 研究院 | 如何存储汗青数据);但无论颠末多久,我的账户余额信息城市被全节点存储。

这样,为占用存储空间付出的钱将成为押金而非用度。在存储空间的利用期间,押金会发生年化 4.08% 的利钱,这些利钱将直接分派给矿工,用于赔偿矿工们的存储本钱。存储押金的价值锁定为 1 CFX/KB。譬喻,假如当前共有 100 GB 的数据需要存储,那么存储押金总量约莫是一亿 CFX,平均每个区块发生的利钱约为 0.06 CFX。

好比我有一个账号,张三给我转了3块钱,李四给我转了4块钱,我又给王五转了5块钱,此刻剩下了2块钱。那么一段时间之后,当我再次发出一笔生意业务时,处理惩罚这笔生意业务的全节点需要知道我的账户里有2块钱,来判定我的余额是否富裕。而我的账户经验了哪些转账酿成了2块钱,并不是处理惩罚新生意业务所必需的信息。

不外,除了存储押金机制,Conflux 尚有代付费机制。当这两个机制团结在一起的时候,环境又会变得有哪些差异呢?我们将在下期文章中先容,当存储押金赶上代付费机制。

别的,生意业务执行进程中会及时查抄剩余的 Gas 是否足够,一旦不敷,会立即遏制执行。而修改合约变量时,却不会当即收取存储押金,也不会及时查抄存储押金是否富裕。也就是说,假如一笔生意业务的执行进程中,申请了大量的存储,但在同一笔生意业务中又释放了这些存储空间,那么这笔生意业务不会被收取任何存储押金用度,也不会因为 Storage Limit 不敷而失败。正如之前所说,存储资源的耗损是在生意业务执行竣事,生意业务执行功效从缓存写入硬盘后才发生的。所以,存储押金的收取也是在整个生意业务执行竣事后举办,而 Storage Limit 查抄是在存眷“新增存储占用 减 新增存储释放”的差值。
假如一个用户修改了智能合约的变量,而这个变量之前已经有另一小我私家付过押金了,那么智能合约就会将先前付出的押金退还,并要求这个修改变量的用户付出押金。

为此,Conflux 引入了存储押金机制。当执行智能合约时,假如由于修改变量占用了存储空间,生意业务提倡人就要付出存储押金。当被修改的变量被置为 0 时,Conflux 将不再存储相应变量的内容(也就是说,没有被显式地存储的变量默认值即为0),,此时,为该变量付出的存储押金会被退还给当初的付出者。

为了制止用户在执行恶意或有妨碍的合约时,为付出存储押金而遭受意外损失,用户在提倡生意业务时,需要指定存储上限 Storage Limit,即预期这笔生意业务所占用的存储字节的量。假如生意业务执行竣事后,所占用的存储空间高出了 Storage Limit,则生意业务的执行会失败。假如在生意业务执行前,用户的余额不敷以付出 Storage Limit 的存储押金,生意业务也会失败。这种范例的生意业务失败,是 Conflux 的新开拓者较量最常碰着的问题。

在一个账本模子的,好比 Conflux 可能 Ethereum中,账本信息是区别于生意业务信息的重要构成部门。区块链系统在处理惩罚这两类信息时所耗损的存储资源是完全差异的。

假如智能合约维护了一些变量,并答允与合约交互的生意业务读取和修改这些变量,这些变量就必需被全节点存储,不能随便删掉。对付全节点而言,生意业务信息对存储的占用是姑且的。生意业务产生一段时间后,全节点可以安详地删除生意业务信息,让档案节点提供查询处事,本身专注于通过共鸣协议维护区块链系统的正常运行。然而,智能合约的变量信息需要被所有全节点永久存储,需要所有存活的全节点一连支付存储本钱。假如将存储用度一次性付出给打包该笔生意业务的节点(矿工),则无法浮现其他全节点实际支付的存储本钱。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读