So greifen Sie mit web3.eth.contract(abi,address) in Python auf bereitgestellte Smart Contract-Attribute zu

web3 = Web3(provider=HTTPProvider(http://ropsten.infura.io/v4/API_KEY)
abi = '[{"constant":false,"inputs":[{"name":"_utxoPos","type":"uint256"},{"name":"_txBytes","type":"bytes"},{"name":"_proof","type":"bytes"},{"name":"_sigs","type":"bytes"}],"name":"startExit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_cUtxoPos","type":"uint256"},{"name":"_eUtxoIndex","type":"uint256"},{"name":"_txBytes","type":"bytes"},{"name":"_proof","type":"bytes"},{"name":"_sigs","type":"bytes"},{"name":"_confirmationSig","type":"bytes"}],"name":"challengeExit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"exits","outputs":[{"name":"owner","type":"address"},{"name":"token","type":"address"},{"name":"amount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"}],"name":"startFeeExit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"srcTokenAddress","type":"address"},{"name":"destTokenAddress","type":"address"},{"name":"sendToUserAddresss","type":"address"},{"name":"maxDestAmount","type":"uint256"},{"name":"minConversionRate","type":"uint256"}],"name":"depositKyberTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"operator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentChildBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"finalizeExits","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_blockNumber","type":"uint256"}],"name":"getChildChain","outputs":[{"name":"","type":"bytes32"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"}],"name":"getNextExit","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CHILD_BLOCK_INTERVAL","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentDepositBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_root","type":"bytes32"}],"name":"submitBlock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getDepositBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentFeeExit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"exitsQueues","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_utxoPos","type":"uint256"}],"name":"getExit","outputs":[{"name":"","type":"address"},{"name":"","type":"address"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_depositPos","type":"uint256"},{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"}],"name":"startDepositExit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"childChain","outputs":[{"name":"root","type":"bytes32"},{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"depositor","type":"address"},{"indexed":true,"name":"depositBlock","type":"uint256"},{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"exitor","type":"address"},{"indexed":true,"name":"utxoPos","type":"uint256"},{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"ExitStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"root","type":"bytes32"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"BlockSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"}],"name":"TokenAdded","type":"event"}]'
contract_instance = web3.eth.contract(address, abi=abi)
currentChild = contract_instance.CHILD_BLOCK_INTERVAL.call()

Ich versuche, meinen Smart Contract in Python zu verbinden und auf Attribute zuzugreifen, die auf Ropsten bereitgestellt werden, bekomme aber einen Fehler:

AttributeError: Objekt „Contract“ hat kein Attribut „CHILD_BLOCK_INTERVAL“

Wenn Sie sich nur Ihren ABI ansehen, sieht es so aus, als wäre er falsch, es gibt keine Definition für CHILD_BLOCK_INTERVAL
Es ist eine konstante Mitgliedsvariable des in ABI erwähnten ganzzahligen Datentyps ohne Vorzeichen. Sagten Sie, dass es auch in ABI mit einem gewissen Wert definiert oder initiiert werden muss?

Antworten (1)

Aus Sicht der ABI sind öffentliche Attribute genau wie Funktionen, also verwenden Sie die Funktionsaufrufsyntax wie:

contract_instance.functions.CHILD_BLOCK_INTERVAL.call()
Requests.Exceptions.ReadTimeout: HTTPConnectionPool(Host='ropsten.infura.io', Port=80): Zeitüberschreitung beim Lesen. (read timeout=30) web3.py aktualisiert => 4.6.0 in Python Timeout von 10s auf 30s geändert => provider=HTTPProvider(' ropsten.infura.io/v4/API_KEY ', request_kwargs={'timeout': 30} ), aber immer noch derselbe Fehler, der Ihnen während meines Smart-Vertrags folgt
Hast du es mal mit einem anderen Node außer Infura versucht? Vielleicht ein lokaler Geth oder Parität im Light-Modus?
festgestellt, dass ich Blöcke, Transaktionen auf "geth Attach localhost:8545" erhalten kann. aber ich wollte auf Blöcke zugreifen, die nur auf bereitgestellten Smart Contracts auf Ropsten erstellt wurden. Gibt es ein Tutorial oder Hilfsmaterial, dem Sie folgen und Blöcke erstellen können?