¿Cómo retirar el saldo actual del contrato inteligente utilizando web3.py?
Ya he creado una función para hacerlo en solidity, pero en la parte del frontend, quiero poder llamar a esa función y transferir ether desde el contrato a una cuenta. Aquí está el código en solidity.
function withdraw() public payable onlyOwner {
payable(msg.sender).transfer(address(this).balance);
}
Hasta ahora, para llamar a otras funciones que implican un cambio de estado, he utilizado build transaction de web3.py. Para transferir ether al contrato, he hecho esto –
booking_contract = w3.eth.contract(address=self.receipt.contractAddress, abi=abi)
nonce = w3.eth.getTransactionCount(address)
booking_transaction = booking_contract.functions.book(machine_name, start_time, end_time).buildTransaction(
{
"chainId": chain_id,
"gasPrice": w3.eth.gas_price,
"from": address,
"nonce": nonce,
"value": 100
}
)
signed_txn = w3.eth.account.sign_transaction(booking_transaction, private_key=key)
txn_hash = w3.eth.send_raw_transaction(signed_txn.rawTransaction)
¿Hay alguna forma de transferir el ether enviado al contrato aquí a cualquier cuenta que desee?
davy.ai
Sí, puede usar web3.py para llamar la función
withdraw
en su contrato y especificar la cuenta a la que desea transferir el ether. Aquí hay un ejemplo de fragmento de código:En la llamada
transact
, puede especificar el parámetrofrom
como la cuenta destinataria a la que desea transferir el ether. Una vez que se haya minado la transacción, la cuenta destinataria debería recibir el ether transferido desde el contrato.