Ich möchte eine intelligente Vertragsfunktion mit Web3 Python aufrufen, indem ich den Infura-Mainnet-Knoten anstelle eines lokalen Knotens verwende. Ich verstehe, dass ich den privaten Schlüssel importieren und zum Signieren der Transaktion verwenden muss, aber ich kann keine Beispiele dafür sehen, wie dies beim Aufrufen von Smart Contracts geschieht.
Der Code, den ich habe, ist wie folgt, aber er schlägt fehl, da keine Brieftasche angeschlossen ist:
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))
Fehler:
ValueError: {u'message': u'gas required exceeds allowance or always failing transaction', u'code': -32000}
Diese Funktionalität ist ziemlich neu und wird nur in v4-beta unterstützt. Stellen Sie sicher, dass Sie regelmäßig auf die neueste Version aktualisieren.
Sehen Sie sich die Dokumente an für:
Grob wollen Sie:
txn = fContract.functions.test("0xabcd", 100000).buildTransaction()
signed = web3.eth.account.signTransaction(txn, privateKey)
txn_hash = web3.eth.sendRawTransaction(signed.rawTransaction)
Chim
Chim