Ich verwende Python web3
, um einen Solidity-Vertrag bereitzustellen und zu testen.
Hier sind meine ersten Schritte:
from web3 import Web3
from web3 import RPCProvider
from json import loads
eth = Web3(RPCProvider()).eth
abi = open(ABI_FILE_NAME).read()
bin = open(BIN_FILE_NAME).read()
transaction = {'from':eth.accounts[0]}
contract = eth.contract(abi=loads(abi),bytecode=bin)
tx_hash = contract.deploy(transaction=transaction)
address = eth.getTransactionReceipt(tx_hash)['contractAddress']
handle = contract(address).transact(transaction)
An dieser Stelle rufe ich eine Funktion im Vertrag auf:
tx_hash = handle.some_func()
Und das bekomme ich, wenn ich anrufe eth.getTransactionReceipt(tx_hash)
:
{
'transactionHash' : '0x...',
'transactionIndex' : 0,
'blockHash' : '0x...',
'blockNumber' : 3710,
'gasUsed' : 72597,
'cumulativeGasUsed' : 72597,
'contractAddress' : None,
'logs' : [],
'status' : 1
}
some_func
Wie kann ich den tatsächlich zurückgegebenen Wert abrufen ?
Ich habe eine sehr detaillierte Antwort gefunden , die sich auf dieses Problem zu beziehen scheint, aber ich konnte die tatsächlich erforderlichen Schritte nicht abschließen.
Danke schön.
Leider gibt es bei einer Transaktion keinen „Rückgabewert“. Es gibt zwei typische Muster, um einen Rückgabewert zu simulieren:
view
Funktion aufrufen. (Beachten Sie, dass Sie dadurch den Status zum Zeitpunkt des Aufrufs der view
Funktion erhalten, nicht unbedingt den Status unmittelbar nach der Transaktion, da möglicherweise andere Transaktionen dazwischen gekommen sind.)event
die vom Aufrufer beobachtet wird.Abhängig von Ihrem Szenario kann das eine oder andere die natürlichere Passform sein.
So konnte ich dieses Problem lösen:
event
die den zurückzugebenden Wert enthält.Im Python-Code extrahiere ich den zurückgegebenen Wert mit:
retVal = eth.getTransactionReceipt(tx_hash)['logs'][0]['data']
Dieser Wert ist in meinem Fall eine hexadezimale Zeichenfolge, daher verwende ich, int(retVal,16)
um den entsprechenden ganzzahligen Wert zu erhalten.
gute Stimmung
Benutzer19510
gute Stimmung