我的目标是位移一个最大的uint256,以便将零迭代添加到右侧:
...1111111111111...
成为
...1111111111000...
我使用新的移动位置作为面具。
大约 20 次迭代后,我的代码停止正常工作。
有人对此事有任何见解吗?
是否有 EVM 溢出限制?
我是刚接触固体...如果有人除了侦听事件之外还有更好的调试变量的方法,请理解并解释该方法。
uint256 public MAXUINT256 = 2*256 - 1;
for (uint256 i = 0; i < 255; i++) {
var mask = MAXUINT256 * (2 ** i);
var key = signature & bytes32(mask);
if (Cell[key] != address(0)) {
NEW_SIG = uint(sha256(signature,Cell[key]));
Callback ctx = Callback(Cell[key]);
ctx.ERNG_CALLBACK(NEW_SIG);
if (i == bit) {
Cell[key] = msg.sender;
} else {
Cell[key] = address(0);
}
} else {
if (i == bit) {
Cell[key] = msg.sender;
}
}
}
您在i >= 248
时对mask
溢出的计算。
这真的是你的意图吗?
顺便说一句,从字面上看,MAXUINT256 = 2*256 - 1
没有多大意义,因为实际MAXUINT256
实际上是2**256 - 1
.当然,使用此值会使您对每个值i
的mask
溢出的计算,因此您可能需要澄清您的意图。