LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > 数据迁移的大难题,靠脚本哈希就可以解决吗? | 三分钟入门Neo3

数据迁移的大难题,靠脚本哈希就可以解决吗? | 三分钟入门Neo3

2020-03-24 Neo智能经济 来源:火星财经

「预言机篇」四讲内容正式完结啦,本期「三分钟入门Neo3」将介绍「脚本哈希」(Script Hashes),一起看看Neo核心开发者为了改善智能合约系统和数据迁移问题,对脚本哈希做了哪些尝试?

了解「脚本哈希」前,先为大家科普下「哈希」的概念。

基本概念

哈希算法是一种函数,可以将任意长度的数字文件输出为固定长度的看似乱码的字符串。

字符串由数字和字母构成。其中一种方法就是SHA-256(安全哈希算法-256位),SHA-256是SHA-1的后继者,SHA-1的输出是160位的。

重要特性

- 不可逆性。输入信息得出输出的那个看似乱码的字符串(哈希值)非常容易,但是从输出的字符串反推出输入的结果却是非常非常难。

-输出值唯一性和不可预测性。只要输入的信息有一点点区别,根据哈希算法得出的输出值也会相差甚远。

脚本哈希

为了使用户能够调用智能合约,该节点必须要先知道其数据存储的位置,才能找到要执行的代码。

在Neo2环境中,密钥以脚本哈希的形式储存,通过将智能合约的指令集(操作码)哈希化而生成脚本哈希。首先使用SHA256完成此操作,再通过RIPEMD160将结果哈希化来生成脚本哈希。

这些脚本哈希也可以使用当前的Neo版本号作为前缀,并通过Base58Check编码运行,将其转换为Neo用户更熟悉地更具可读性的公共地址格式。

尽管这种方法有助于确保不同智能合约不会生成相同的脚本哈希,但是它引入了一个新问题。在迁移的过程中,更新智能合约意味着必须将所有存储的数据移到新的合约脚本哈希中。正如Neo创始人及核心开发者张铮文表示,此事件可能会带来大量的人力与物力支出。

“目前,当智能合约进行升级时,所有存储的数据都将迁移到新合约中。如果合约中包含大量数据,则迁移的工作量将非常大,并可能导致DoS攻击。”


存储密钥数据前缀,防止跨合约存储访问

(来自于Neo Github)

另外,脚本哈希本身的更改也带来了一个问题。合约成功迁移后,已集成特定合约的服务商需要手动更新其服务,才能使用新的脚本哈希。这增加了诸如交易所,钱包服务商以及通过动态调用进行交互的其他合约之类的实体开销。

脚本哈希的生成机制有另一个副作用——无法重新部署旧合约。由于两个合约中的输入指令集相同,因此经过哈希后会产生相同的脚本哈希,由于匹配问题,部署将宣告失败。

合约重定向

如何改变数据迁移背后的逻辑,张铮文提供了一个新方案:合约重定向。

“不再在每次合约升级期间直接迁移数据,而是创建重定向记录。当合约读取数据时,它可以基于重定向记录找到原始合约哈希,从而访问正确的数据。”

NGD软件开发者刘梦雨帮助补充了方案中的更多细节,并指出大量的资源消耗是因为需要新的合约来更新存储密钥的脚本哈希数据前缀,以便从原合约中迁移数据 。

使用重定向方案就不再需要更新数据前缀,而是创建一条记录,将合约数据的修改重定向到原始合约。本质来说,新合约可以直接从原始合约中读取和写入数据,不再需要迁移数据。


重定向记录创建(来自于Neo Github)

目前,该方案已在实施中。其中涉及两个合约新属性的创建,即重定向和删除逻辑,以处理合约删除逻辑并提供用于重定向的原始脚本哈希。

但这一方案也存在一些其他问题。比如无法部署原始合约,以及在迁移后无法从原始合约中调用方法。这也表示,第三方服务商仍将需要手动更新其服务来使用新的合约哈希。

由于对该方案弊端的不满意,张铮文又提出了解决脚本哈希问题的另一种方法:通用唯一标识符(UUID)。

「三分钟入门Neo3」的下一篇,我们将介绍什么是UUID,继续分享Neo3的开发过程。

本文来源:Neo智能经济
原文标题:数据迁移的大难题,靠脚本哈希就可以解决吗? | 三分钟入门Neo3

—-

编译者/作者:Neo智能经济

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

知识 NEO3
LOADING...
LOADING...