Ganache

Web3.py 無法與/呼叫合約功能進行交易,合約是否正確部署並鏈同步?

  • January 9, 2022

我正在嘗試呼叫部署在 Ganache 中的合約函式。我很確定契約已部署,因為我可以進行交易()並使用其他功能。但是當我呼叫()它時,我得到了這個錯誤:

無法與/呼叫合約功能進行交易,合約部署是否正確且鏈同步?

這是我的函式呼叫:

updated_card = magic_ideas.functions.get_card('731759').call()

以前,我必須使用此程式碼“部署考試”並且它可以正常工作:

t_hash1 = magic_ideas.functions.new_card('title', 'example_text', 'www.card.com', '731759').transact()

我得到一個 t_hash1。然後,當我嘗試get_card使用時,.call()我得到了錯誤。我錯過了什麼?

編輯

這是契約聲明:

magic_ideas = w3.eth.contract(address="0x246eCb1dA50199FD7FcC20Ad08C617C52e34b128", abi=abi)

abi 是來自 remix 的複制和粘貼。

採用:

updated_card = magic_ideas.functions.get_card('731759').transact()

代替

updated_card = magic_ideas.functions.get_card('731759').call()

我發現呼叫合約函式首先有效。這應該複製合約函式(不是合約)並返回一個副本,但它也更正了 args 欄位。但是,我相信這僅在參數為零的情況下才有效。

例子:

updated_card = magic_ideas.functions.get_card('731759')().call()

注意前面的額外括號.call()

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