我的目标是按位移动一个maxed 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;
}
}
}
答案 0 :(得分:0)
mask
计算i >= 248
溢出。
这真的是你的意图吗?
顺便说一下,MAXUINT256 = 2*256 - 1
字面上没有多大意义,因为实际的MAXUINT256
实际上是2**256 - 1
。当然,使用此值会使mask
的每个值的i
计算溢出,所以您可能需要澄清一般的意图。