Web3.py
將兩個數組(第一次傳遞多個參數)插入到 web3.py 契約中的問題“由於沒有匹配的參數類型,函式呼叫失敗。”
根據標題,我在傳遞具有多個參數的契約呼叫時遇到了麻煩。我可以在這個節點上呼叫 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”))