合约实践:避免区块Gas限制导致问题

  • Tiny熊
  • 更新于 2020-01-13 16:43
  • 阅读 4814

合约实践:避免区块Gas限制导致问题

区块限制

以太坊上的计算资源是有限的,单个区块可用的 Gas 是有个上限的,这就是“区块 Gas 上限”。 现在单个区块区块限制约为 990万。

矿工要收集交易并打包到区块里,因为矿工们可以得到 Gas 费用,理论上,他们会按gas price 排序,并尽可能高效利用区块的 Gas 空间,即让交易的 Gas Limit 总和尽可能接近区块 Gas 上限。一笔交易的 Gas 耗用量如果大于这个上限,是根本没法被打包的。

可能漏洞

当合约中存在依赖时间、依赖数据大小(如数组长度)的循环时,都可能会有潜在的漏洞。 随时间的延长,或数据的增大,gas 的消耗就可能对应的线性增长,很可能突破区块限制导致无法打包。

下面是一个有这样漏洞的合约:


pragma solidity ^0.5.20;
contract TerribleBank {
    struct Deposit {
        address depositor;
        uint256 amount;
    }
    Deposit[] public deposits;

    function deposit() external payable {
        deposits.push(Deposit({
            depositor: msg.sender,
            amount: m...

剩余50%的内容订阅专栏后可查看

点赞 1
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Tiny熊
Tiny熊
0xD682...E8AB
登链社区发起人 通过区块链技术让世界变得更好而尽一份力。