Web3.py

將兩個數組(第一次傳遞多個參數)插入到 web3.py 契約中的問題“由於沒有匹配的參數類型,函式呼叫失敗。”

  • February 28, 2022

根據標題,我在傳遞具有多個參數的契約呼叫時遇到了麻煩。我可以在這個節點上呼叫 balanceOf 就好了。

我正在使用一個 infura 節點,並且我正在嘗試呼叫更複雜的函式“balanceOfBatch”,它需要一個地址

$$ $$和 uint256$$ $$- 大概我在想我可以傳遞一個 python 列表和一個標準整數 - 但是它告訴我函式呼叫沒有正確完成。 balanceOfBatch 是 Openzeppelin 在 Polygon Mainnet 合約上的標準 ERC-1155 函式。

Python web3.py 程式碼:

contract_address = Web3.toChecksumAddress("0x123")
web3_poly = Web3(Web3.HTTPProvider(polygon_mainnet_endpoint))
contract_object = web3_poly.eth.contract(address=contract_address, abi=my_abi)
addrs = [] # List of address strings (I tried ints too) e.g.: .append("0x123...")
ids = [] # list of ints (e.g. [1,2,3] - I tried numpy arrays, formatted strings (e.g. "[1,2,3]") - no success.
this_fails = contract_object.functions.balanceOfBatch(addrs, ids).call()

在此處輸入圖像描述

錯誤:

無法使用名稱balanceOfBatch、類型的位置參數和類型的()關鍵字參數來辨識預期的函式{'accounts': <class 'numpy.ndarray'>, 'ids': <class 'numpy.ndarray'>}。找到 1 個具有名稱的函式balanceOfBatch

$$ ‘balanceOfBatch(address[ $$,uint256$$ $$)’] 由於沒有匹配的參數類型,函式呼叫失敗。

地址列表缺少 web3.utils.toChecksumAddress 格式,從而導致無效的函式參數類型(我什至努力關注地址列表)。

我在做什麼 addrs =

$$ $$ … addrs.append(“0x123…”) 修復:addrs =

$$ $$ clean_addr = addrs.append(web3.toChecksumAddress(“0x123”))

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