Solidity生成EVM字节码,在以下情况下导致无效的跳转目标:
throw能否用例子来完成上面的清单?
为了解释第一项,即Solidity源代码中的throw,将其编译到EVM字节码中,从而导致无效的跳转目标。(当然,它假定throw没有死代码,可以进行优化。)列表中的所有其他场景是什么?
发布于 2016-06-20 09:14:45
只为(显式或隐式)异常生成到无效跳转目的地的跳转。一个显式的例外是当您使用关键字throw时。隐式异常发生在运行时错误:
发布于 2016-06-07 08:09:38
contract InvalidJump {
uint[5] data;
function invalidJump1() {
uint i = 6000;
data[i] = 1;
}
}来自debug.traceTransaction(...)的信息是:
error: "invalid jump destination (PUSH1) 2"不是问题中的问题,而是有趣的问题。
contract InvalidJump2 {
function invalidJump2(uint number) {
invalidJump2(number - 1);
}
}使用以下事务调用:
invalidJump.invalidJump2(1, eth.accounts[0], {
from:web3.eth.accounts[0],
data: invalidJumpCompiled.InvalidJump.code,
gas: 1000000
});以及错误消息:
I0607 18:04:49.978794 core/state_transition.go:258] VM call err: stack limit reached 1024 (1024)另外,debug.traceTransaction(...)会疯狂地发送geth console屏幕。
https://ethereum.stackexchange.com/questions/5743
复制相似问题