以太坊Solidity编程之——忘掉var

作者: 黑猫编程 | 来源:发表于2019-09-14 11:16 被阅读0次

var在Go语言中比较常用,可以自动推导数据类型,然而,在以太坊的Solidity智能合约中确是坑很深,毕竟Solidity年龄较短,bug较多。

solidity语言中默认var创建的数值类型是uint8即范围在0-255之间。

for (var i = 0; i < 300; i++)
{
}

使用如上所述for循环时,create合约会显示一直pending,且逐渐卡死,因为i的值永远不可能达到300,在到255时,即二进制1111111,再循环又变成0,在0-255之间进行循环。这是一个很致命的坑,没有报错,一切OK,就是死循环无解。

下面进行一个测试:

pragma solidity ^0.4.24;

contract Test{
    function f() view returns (uint, uint)
    {
        uint count = 0;
        for (var i = 0; i < 300; i++)
        {
            
            count++;
            
            if(count >= 1000)
            {
                break;
            }
        }
        return (count, i);
    }
}

结果:

显然,我们发现,for循环的上限为300,而count竟然累加至1000,说明i的值一直没有达到300。

相关文章

网友评论

    本文标题:以太坊Solidity编程之——忘掉var

    本文链接:https://www.haomeiwen.com/subject/wzngyctx.html