Go-Ethereum
解釋無效的 JUMP 錯誤
有許多與
invalid JUMP
錯誤有關的問題。我在使用 geth 命令行在 testrpc 上調試一個solidiy合約時得到了這個:
Error: VM Exception while processing transaction: invalid JUMP at 3802e3b6eefb98 150918c4ddfaabf93c18d6c41aaa2682c5cdbc0a9a9a6a2853/cb611bab0cd7c4f21f7cb0b91ad45 f1330995289:13717 at web3.js:3119:20 at web3.js:6023:15 at web3.js:4995:36 at web3.js:4055:16 at apply (<native code>) at web3.js:4141:16 at <anonymous>:1:1
你能解釋一下無效的 JUMP 錯誤- 虛擬機操作碼級別出了什麼問題嗎?
在查找此類錯誤的根源時應該使用什麼方法?
這個錯誤是 go-ethereum 獨有的嗎?
編輯:
問題在這裡得到解答:
invlaid JUMP
以上和那個問題之間有什麼區別(如果有的話)bad JUMPDEST
?其他問題:
這實際上是testrpc的錯誤資訊。如果一筆交易在 geth 中拋出,它會將其視為耗盡氣體錯誤並且不會告訴你。(這是因為它在技術上是一個氣體不足的錯誤。)
不幸的是,目前的調試工具並不多。Browser-Solidity有一個。我自己的調試這種方法是相當霰彈槍式的。慢慢評論/儘早返回,直到您沒有收到無效的 JUMP。如果您評論了整個功能,它可能是一個支付功能而不是
payable
.