Cómo acceder a los atributos de un contrato inteligente implementado usando web3.eth.contract(abi,address) en python

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()

Intento conectar mi contrato inteligente en Python y acceder a los atributos implementados en Ropsten pero obtengo un error:

AttributeError: el objeto 'Contrato' no tiene el atributo 'CHILD_BLOCK_INTERVAL'

solo mirando su ABI, parece que es incorrecto, no hay una definición para CHILD_BLOCK_INTERVAL
es una variable miembro constante del tipo de datos entero sin signo mencionado en ABI. ¿Dijiste que también debe definirse o iniciarse con algún valor en ABI?

Respuestas (1)

Desde la perspectiva de ABI, los atributos públicos son como funciones, por lo que usa la sintaxis de llamada de función , como:

contract_instance.functions.CHILD_BLOCK_INTERVAL.call()
solicitudes.excepciones.ReadTimeout: HTTPConnectionPool(host='ropsten.infura.io', port=80): Se agotó el tiempo de lectura. (leer tiempo de espera = 30) actualizado web3.py => 4.6.0 en Python cambió el tiempo de espera de 10 a 30 => proveedor = HTTPProvider (' ropsten.infura.io/v4/API_KEY ', request_kwargs = {'tiempo de espera': 30} ) pero sigue el mismo error siguiéndote mientras mi contrato inteligente
¿Has probado con otro nodo además de Infura? ¿Quizás un geth local o una paridad en modo ligero?
descubrí que puedo obtener bloques, transacciones en "get adjuntar localhost: 8545". pero quería acceder a los bloques creados solo en el contrato inteligente implementado en ropsten. ¿Hay algún tutorial o material de ayuda para seguir y crear bloques?