Go-Ethereum

解釋無效的 JUMP 錯誤

  • January 17, 2017

有許多與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 獨有的嗎?

編輯:

問題在這裡得到解答:

“錯誤的 JUMPDEST”錯誤是什麼意思?

invlaid JUMP以上和那個問題之間有什麼區別(如果有的話) bad JUMPDEST

其他問題:

oraclize ‘VM 異常:無效的跳轉’

VM 異常:當我呼叫第二個函式時跳轉無效

升級 truffle & testrpc 後 JUMP 無效

嘗試轉移 DAO 令牌時出現無效跳轉目標錯誤

這實際上是testrpc的錯誤資訊。如果一筆交易在 geth 中拋出,它會將其視為耗盡氣體錯誤並且不會告訴你。(這是因為它在技術上是一個氣體不足的錯誤。)

不幸的是,目前的調試工具並不多。Browser-Solidity有一個。我自己的調試這種方法是相當霰彈槍式的。慢慢評論/儘早返回,直到您沒有收到無效的 JUMP。如果您評論了整個功能,它可能是一個支付功能而不是payable.

引用自:https://ethereum.stackexchange.com/questions/11322