Contract-Debugging

交易失敗不_______G一個_n這噸這在噸這FG一種snot out of gas但是執行過程中出錯

  • March 3, 2022

我對問題的兩個假設:

  • 沒氣了
  • 呼叫 mint 時的一些失敗require語句

我沒有看到這兩個,因為我確保msg.value > priceForTokens在 Ropsten 網路上發送了足夠多的氣體。remix 的 JS VM 一切正常。

這是契約來源

這是Ropsten交易失敗的一個範例。

看起來您部署了錯誤的契約。你部署了MemeRecorder,當我假設你打算部署時Meme

(我通過驗證 Etherscan 上的原始碼發現了這一點。)

或者,也許您打算部署MemeRecorder,但隨後卻試圖呼叫mint()錯誤的合約。看起來是通過創建0x19a1a4a3e8f659d43b5353d21126b8bf846616ac的一個實例。也許您打算改為呼叫它。Meme``addMeme()``mint()

編輯

我也為你驗證了原始碼0x19a1a4a3e8f659d43b5353d21126b8bf846616ac

Smarx:你是對的。mint()我在打電話MemeRecorder

主要問題:如果 MemeRecorder 工廠沒有建構子,它會addMeme在我第一次實例化時錯誤地執行MemeRecorder。使用 Remix 的調試器發現了這一點。為什麼?我不知道,也許它在 Solidity 文件的某個深處提到過。

我讓自己和其他人深感困惑的原因是,如果沒有建構子,您將永遠不會看到創建Meme實例的內部事務。

  1. 0xAe2326591d730B4c5571580D799047c0FE51DF4E (MemeRecorder)
  2. 0x524B50F4F8B41DB9A5d9E17e5eE16fEa1095AAd6(模因實例)

棘手的是,當addMeme()在 MemeRecorder 上呼叫時,新Meme實例是通過內部事務創建的。

成功的購買(代幣鑄造)就在這裡

感謝 Smarx 幫助我思考這個問題,我是 programtheblockchain 的狂熱讀者和粉絲。

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