风险提示:理性看待区块链,提高风险意识!
智能合约迁移工作原理
首页 > 币界资讯 > 区块链新闻 2019-01-19 17:46:41
摘要
智能合约是很容易受到攻击的——合约上存在的bug、用户的钱包的漏洞、或者设置上的疏忽,都会导致被攻击。如果您使用了智能合约,则必须准备好应急预案,在大多数情况下,唯一有效的解决方案是部署新的智能合约实例,并且将所有数据迁移到该实例中。如果您计划开发可升级的智能合约,迁移过程将的最大风险是在升级机制的 。
币界网报道:

智能合约是很容易受到攻击的——合约上存在的bug、用户的钱包的漏洞、或者设置上的疏忽,都会导致被攻击。如果您使用了智能合约,则必须准备好应急预案,在大多数情况下,唯一有效的解决方案是部署新的智能合约实例,并且将所有数据迁移到该实例中。

如果您计划开发可升级的智能合约,迁移过程将的最大风险是在升级机制的过程中。

本篇文章将带你了解智能合约迁移的工作原理。

你需要合约迁移功能

即使是没有任何漏洞的智能合约,用户也可能会因为私钥的丢失而被盗。在这类攻击中,即使智能合约具备了可升级的机制,也可能无法修复已部署的智能合约,因此需要部署并正确初始化合约的新实例,以便为用户恢复功能,所有开发人员必须在智能合约设计阶段就集成迁移功能,并且必须准备好折中方案进行迁移。

迁移有两个步骤:

1)恢复要迁移的数据

2)将数据写入新合约

让我们来看看细节、成本和运营后果。

如何执行迁移

第1步:数据恢复

需要从区块链中的特定区块来读取数据,如果是从事件(黑客或故障)中恢复,需要在事件发生之前,使用阻止或过滤攻击者的操作。

如果可能,先暂停合同,这对用户更加透明,并防止了黑客攻击不懂迁移的用户。

数据恢复将取决于您的数据结构:

对于简单类型的公共变量(例如uint或address),通过getter的检索值是微不足道的。对于私有变量,您可以依赖事件,也可以计算变量的内存偏移量,然后使用getStorageAt函数检索。由于元素的数量是已知的,因此阵列也很容易恢复。

映射的情况就有点复杂了,不存储映射的键,需要恢复它们才能访问这些值。为简化离线跟踪,我们建议在映射中存储值时发出事件。

对于ERC20智能合约来说,可以通过跟踪转移事件的地址找到所有持有者的列表,这个过程很难。

我们准备了两个方案来帮你:

首先,可以扫描区块链并自行检索持有者; 在第二种情况下,可以依赖以太网区块链公开的Google BigTable存档。

如果您不熟悉web3 API以从区块链中提取信息,则可以使用ethereum-etl,它提供了一组脚本来简化数据提取。

如果您没有同步区块链,则可以使用Google BigQuery API。图1显示了如何通过BigQuery收集给定令牌的所有地址:

图1:使用Google BigQuery恢复地址0×41424344处令牌的所有Transfer事件

BigQuery提供对块编号的访问,因此可以调整此查询以将事务返回到特定块。

一旦恢复了所有持有者的地址,就可以离线查询balanceOf功能以恢复与每个持有者相关的余额。过滤余额为空的帐户。

现在我们知道如何检索要迁移的数据,我们就可以将数据写入新合约。

第2步:数据写入

收集数据后,就要创建新的智能合约了。

对于简单的变量,可以通过智能合约的构造函数来设置值。

如果数据无法保存在单个中,则情况会稍微复杂和昂贵。每个交易都包含在一个区块中,该区块限制了其交易可以使用的gas总量(所谓的“Gas Limit”)。如果交易的gas成本接近或超过此限制,矿工将不会再打包。因此,如果要迁移大量数据,则必须将迁移拆分为多个任务。

解决方案是在智能合约中添加初始化状态,只有所有者才能更改状态变量,用户无法执行任何操作。

对于ERC20令牌,该过程将采取以下步骤:

1)在初始化状态下部署契约,

2)迁移余额,

3)将合约的状态转移到生产状态。

4)初始化状态可以使用Pausable功能和指示初始化状态的布尔值来实现。

为了降低成本,可以使用批量传输功能实现余额的迁移,该功能允许您在单个事务中设置多个帐户:

图2:batchTransfer函数的示例

在迁移合约时,会出现两个主要问题:

迁移成本和对交易所有什么影响。

迁移成本

数据的恢复是在链外完成的,因此是免费的。Ethereum-etl可以在本地使用。谷歌的BigQuery API提供足够的免费信用来支付其使用。

但是,发送到网络的每个事务和新合同存储的每个字节都有成本。

使用图2的batchTransfer功能,转移200个账户的成本约为2.4M gas,平均gas价格(10 Gwei)的5.04美元(ETH以今天的价格计算)。粗略地说,迁移一个数据需要0.025美元。

如果我们看看按市值排名的前五大ERC20代币的持有人数:

交易所

部署新合约可能会对运营产生影响。对于基于token的合同来说,在迁移期间与交换机协作非常重要,以确保将列出新合约,并且将丢弃之前的合约。

幸运的是,前面的标识迁移事件,表明交流有可能进行合作。

智能合约迁移与可升级智能合约

可升级的合约有几个缺点:

  • 需要详细的EVM和Solidity的专业知识,基于委托调用的代理要求开发人员掌握EVM和Solidity是必要的。
  • 增加了复杂性和代码大小,合约更难审查,更有可能会有bug和安全问题。
  • 增加了要处理的密钥数量,合约将需要多个授权用户(所有者,升级者)。授权用户越多,攻击面越大。
  • 每笔交易的gas费用增加。合约变得比没有升级机制的同一版本更具竞争力。
  • 他们鼓励在部署后解决问题。如果开发人员知道无法轻松更新合同,他们往往会更彻底地测试和审查合约。
  • 它们减少了用户对合约的信任。用户需要信任合约的所有者,这会阻止真正分散的系统。
  • 只有在存在强有力的论据时,合约才应具有可升级机制,例如:
  • 合约需要经常更新。如果要定期修改合约,则定期迁移的成本可能高到足以证明可升级性机制的合理性。
  • 合约要求固定地址。合约的迁移需要使用新地址,这可能会破坏与第三方的交互(例如与其他合同的交互)。
  • 合约迁移实现了升级带来的好处,但缺点很少。升级相对于迁移的主要优点是升级成本更低。然而,这种成本并不能证明所有的缺点。

建议

在合同部署之前准备迁移过程、使用事件来促进数据跟踪。

如果要购买可升级版的合约,则还必须准备迁移程序,因为您的密钥可能会受到损害,或者您的合约可能会遭受错误且不可逆转的操纵。

智能合约带来了新的发展模式,它们的不可变性要求用户重新思考他们构建应用程序的方式,并要求彻底的设计和开发过程。

*本文由Trailofbits团队首发于blog,由猎豹区块链安全团队翻译与编辑*

猎豹区块链安全以金山毒霸的技术为依托,结合人工智能、nlp等技术,为区块链用户提供合约审计、情感分析等生态安全服务。

Ratingtoken官网:https://www.ratingtoken.io/?from=z

上一篇: 新京报:多个知名投资人现身链圈,既投项目又投媒体
下一篇: 通证换股权:在中国,token可以换上市公司股份吗?
推荐专栏
Boss Wallet Web3 Econom Pass
专注币圈最新资讯
通俗浅显地聊透Web3大事小情
读懂区块链生态与未来,尽在币界网!
热门币种
更多
币种
美元价格
24H涨跌幅
BTC比特币
60,963.61 USDT
¥435,103.38
-2.72%
ETH以太坊
3,368.69 USDT
¥24,042.67
-0.3%
BNB币安币
570.68 USDT
¥4,073.00
-0.28%
USDT泰达币
1.02 USDT
¥7.25
-0.19%
SOL
135.96 USDT
¥970.36
+7.66%
USDC
1.00 USDT
¥7.15
-0.01%
TON
7.59 USDT
¥54.14
+4.55%
XRP瑞波币
0.47720 USDT
¥3.41
+0.48%
DOGE狗狗币
0.12210 USDT
¥0.87140
+2.43%
ADA艾达币
0.39050 USDT
¥2.79
+3.88%
热搜币种
更多
币种
美元价格
24H涨跌幅
Solana
180.72 USDT
¥1,310.49
+0.29%
比特币
66129.12 USDT
¥479,535.31
-0.07%
Curve
0.2568 USDT
¥1.86
-0.43%
Filecoin
4.3437 USDT
¥31.50
-1.79%
FTX Token
1.3892 USDT
¥10.07
-2.35%
比特币SV
51.0769 USDT
¥370.38
-0.68%
狗狗币
0.1252 USDT
¥0.91
-2.03%
柚子
0.5812 USDT
¥4.21
+1.82%
Yield Guild Games
0.474 USDT
¥3.44
-2.03%
奇亚
18.7015 USDT
¥135.61
-0.22%
Conflux
0.167 USDT
¥1.21
+1.09%
Shiba Inu
1.632E-5 USDT
¥0.00
-1.33%
最新快讯
更多
链上数据分析平台Arkham集成Blast链数据
2024-07-31 10:48:39
MellowProtocol已经接入OKXWeb3钱包
2024-07-31 10:41:48
Doubler完成DoublerLitev2升级,将于8月1日在MantaNetwork上发布新版本
2024-07-31 10:41:00
Paradigm于8小时前将39,068枚ETH存入托管平台AnchorageDigital
2024-07-31 10:38:36
ZKX24小时跌逾34%
2024-07-31 10:34:00
币界网晨间分析:以太坊ETH价格行情预测
2024-07-31 10:30:08
币界网实时行情早报:BNB币安币价格突破588.4美元/枚,日内涨1.01%
2024-07-31 10:29:32
下载币界网APP