编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

以太坊Solidity编程避坑指南之——忘掉var

wxchong 2024-09-25 23:21:47 开源技术 14 ℃ 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。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表