Contract-Debugging
交易失敗不_______G一個_n這噸這在噸這FG一種snot out of gas但是執行過程中出錯
我對問題的兩個假設:
- 沒氣了
- 呼叫 mint 時的一些失敗
require
語句我沒有看到這兩個,因為我確保
msg.value > priceForTokens
在 Ropsten 網路上發送了足夠多的氣體。remix 的 JS VM 一切正常。這是契約來源:
這是Ropsten交易失敗的一個範例。
看起來您部署了錯誤的契約。你部署了
MemeRecorder
,當我假設你打算部署時Meme
。(我通過驗證 Etherscan 上的原始碼發現了這一點。)
或者,也許您打算部署
MemeRecorder
,但隨後卻試圖呼叫mint()
錯誤的合約。看起來是通過創建0x19a1a4a3e8f659d43b5353d21126b8bf846616ac
的一個實例。也許您打算改為呼叫它。Meme``addMeme()``mint()
編輯
Smarx:你是對的。
mint()
我在打電話MemeRecorder
。主要問題:如果 MemeRecorder 工廠沒有建構子,它會
addMeme
在我第一次實例化時錯誤地執行MemeRecorder
。使用 Remix 的調試器發現了這一點。為什麼?我不知道,也許它在 Solidity 文件的某個深處提到過。我讓自己和其他人深感困惑的原因是,如果沒有建構子,您將永遠不會看到創建
Meme
實例的內部事務。
- 0xAe2326591d730B4c5571580D799047c0FE51DF4E (MemeRecorder)
- 0x524B50F4F8B41DB9A5d9E17e5eE16fEa1095AAd6(模因實例)
棘手的是,當
addMeme()
在 MemeRecorder 上呼叫時,新Meme
實例是通過內部事務創建的。成功的購買(代幣鑄造)就在這裡。
- 在所有
Meme
契約中,您會看到更改發送回買方internaltx時的內部交易感謝 Smarx 幫助我思考這個問題,我是 programtheblockchain 的狂熱讀者和粉絲。