Как получить конкретный баланс токена, доступный по адресу ETH, с помощью web3.py - PullRequest
0 голосов
/ 05 февраля 2019

Я начинаю с web.py.У меня есть требование, где мне нужно получить доступный баланс токена по указанному адресу ETH (этот адрес не является владельцем контракта), просматривая документы, на которые я наткнулся при следующей функции:

https://web3py.readthedocs.io/en/stable/contracts.html#web3.contract.ContractFunction.call

token_contract.functions.myBalance().call({'from': web3.eth.accounts[1]})

поэтому в приведенных выше строках я написал это:

from web3 import HTTPProvider, Web3
import requests

w3 = Web3(HTTPProvider('https://ropsten.infura.io/RPw9nHRS7Ue47RaKVvHM'))

url_eth = "https://api.etherscan.io/api"
contract_address = '0x0CdCdA4E7FCDD461Ba82B61cBc4163E1022f22e4'
API_ENDPOINT = url_eth+"?module=contract&action=getabi&address="+str(contract_address)

r = requests.get(url = API_ENDPOINT)
response = r.json()

instance = w3.eth.contract(
    address=Web3.toChecksumAddress(contract_address),
    abi = response["result"]
)
send_address = "0xF35A192475527f80EfcfeE5040C8B5BBB596F69A"
balance = instance.functions.balance_of.call({'from':send_address}) 
#balnce = instance.functions.myBalance.call({'from':send_address})
print("----------------------",balance)

Я получаю следующую ошибку:

"Are you sure you provided the correct contract abi?"
web3.exceptions.MismatchedABI: ("The function 'balance_of' was not foundin this contract's abi. ", 'Are you sure you provided the correct contract abi?')

** Обновление ** Я избавился отвышеприведенное исключение, теперь я получаю следующее исключение:

send_address = "0xF35A192475527f80EfcfeE5040C8B5BBB596F69A"
balance = instance.functions.balanceOf.call(send_address)
#Error :
call_transaction = dict(**transaction)
TypeError: type object argument after ** must be a mapping, not str

Если я попробую это:

send_address = "0xF35A192475527f80EfcfeE5040C8B5BBB596F69A"
balance = instance.functions.balanceOf.call({'from':send_address})
#Error:
AttributeError: 'balanceOf' object has no attribute 'args'

1 Ответ

0 голосов
/ 05 февраля 2019

В последнем примере кода попробуйте изменить вторую строку, чтобы она выглядела следующим образом: balance = instance.functions.balanceOf().call({'from':send_address}).В скобках после баланса указаны аргументы, передаваемые функции солидности.

...