位移位在第 20 次后失败(坚固性)



我的目标是位移一个最大的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.当然,使用此值会使您对每个值imask溢出的计算,因此您可能需要澄清您的意图。

最新更新