Cómo realizar transacciones () en funciones de contrato en nodo remoto

Me gustaría llamar a las funciones de un contrato inteligente usando Web3 Python usando el nodo de la red principal de Infura en lugar de un nodo local. Entiendo que necesito importar la clave privada y usarla para firmar la transacción, pero no puedo ver ningún ejemplo para hacer esto llamando a contratos inteligentes.

El código que tengo es el siguiente, pero falla porque no hay una billetera adjunta:

from web3 import Web3
import json
from web3.providers.rpc import HTTPProvider
contractAddress = '0xabcd'
web3 = Web3(HTTPProvider('https://mainnet.infura.io'))
with open('abcd.abi', 'r') as abi_definition:
    abi = json.load(abi_definition)
print (web3.eth.blockNumber)


fContract = web3.eth.contract(abi,contractAddress)

print ("Test",fContract.transact().test("0xabcd",100000))

Error:

ValueError: {u'message': u'gas required exceeds allowance or always failing transaction', u'code': -32000}
Si se está familiarizando con Blockchain, debe usar una red de prueba como Ropsten o Rinkeby. El uso de mainnet ( mainnet.infura.io ) le costará Ether si tiene una billetera (como MetaMask) configurada en su navegador o fallará porque no tiene Ether para pagar la gasolina.
Si está feliz de leer un código JavaScript y comprende los pasos necesarios para firmar una transacción, puede consultar npmjs.com/package/web3js-raw & github.com/fidenz-chim/fundsplitter_web3jsraw.git

Respuestas (1)

Esta funcionalidad es bastante nueva, solo se admite en v4-beta. Asegúrese de actualizar a la última versión con regularidad.

Echa un vistazo a los documentos para:

Aproximadamente, vas a querer:

txn = fContract.functions.test("0xabcd", 100000).buildTransaction()
signed = web3.eth.account.signTransaction(txn, privateKey)
txn_hash = web3.eth.sendRawTransaction(signed.rawTransaction)
Hola tallador, gracias. También te perdiste la clave privada: firmado = web3.eth.account.signTransaction(txn, privateKey)
Hola carver, ¿podrías explicar un poco en detalle cómo usar estas funciones? Los probé pero no están funcionando. ¿Podría echar un vistazo aquí: ethereum.stackexchange.com/questions/49038/… ? Gracias