本文用EOS舉例蓝晒,此EOS為ERC20代幣贷痪,非EOS主網(wǎng)
infura賬戶創(chuàng)建方法參考上一篇文章《Python3 使用Web3.py查詢以太坊賬戶余額》
直接上代碼幻妓,備有注冊(cè)。直接拷貝即可使用劫拢!
from web3 import Web3
def QuerryBalanceEOS(accounts):
? ? w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/{此處設(shè)置自己托管賬戶ID}'))
? ?#EOS在ETH上的ERC20合約地址
? ? eos_contract_address = "0x86Fa049857E0209aa7D9e616F7eb3b3B78ECfdb0"
? ? #以下兩個(gè)函數(shù)為檢測(cè)地址正確性的函數(shù)肉津,與實(shí)際查詢業(yè)務(wù)無(wú)關(guān)
? ? a = w3.isAddress(eos_contract_address)
? ? b = w3.isChecksumAddress(eos_contract_address)
? ? #EOS合約代碼(部分),因?yàn)檫@里只想做EOS代幣的查詢函數(shù)(balanceOf)
? ? contract_source_code='''
? ? [{
? ? ? "type":"function",
? ? ? "name":"balanceOf",
? ? ? "constant":true,
? ? ? "payable":false,
? ? ? "inputs":[{"name":"","type":"address"}],
? ? ? "outputs":[{"name":"","type":"uint256","value":"0"}]
? ? }]
? ? '''
? ? #很關(guān)鍵舱沧,此處一定要轉(zhuǎn)換成基于JSON串的source_code妹沙。此處是坑,很多python文章講解都沒有注意此處的轉(zhuǎn)換
? ? abi = json.loads(contract_source_code)
? ? source_code = w3.eth.getCode(eos_contract_address)
? ? #print(source_code)
? ? contract = w3.eth.contract(abi=abi, address=eos_contract_address, bytecode=source_code)
? ? balance = contract.functions.balanceOf(accounts).call()
? ? #balance = w3.eth.getBalance(accounts,'latest')#latest表示使用區(qū)塊鏈中最后一個(gè)塊的狀態(tài)熟吏,也就是最后的余額
? ? print('balance@latest => {0}'.format(balance))
? ? return balance