var在Go语言中比较常用,可以自动推导数据类型,然而,在以太坊的Solidity智能合约中确是坑很深,毕竟Solidity年龄较短,bug较多。
solidity语言中默认var创建的数值类型是uint8即范围在0-255之间。
for (var i = 0; i
{
}
使用如上所述for循环时,create合约会显示一直pending,且逐渐卡死,因为i的值永远不可能达到300,在到255时,即二进制1111111,再循环又变成0,在0-255之间进行循环。这是一个很致命的坑,没有报错,一切OK,就是死循环无解。
下面进行一个测试:
结果:
显然,我们发现,for循环的上限为300,而count竟然累加至1000,说明i的值一直没有达到300.
领取专属 10元无门槛券
私享最新 技术干货