¿Hay alguna manera de drenar todo el saldo del usuario al contrato o a la dirección de pago externa, sin requerir que el usuario ingrese el valor del mensaje?
La versión más intuitiva que tenía se parece un poco a esto en solidity 0.5.0:
address(this).transfer(msg.sender.balance)
Sin embargo, parece que la dirección del contrato no es inherentemente pagable, así que primero traté de convertirla en una dirección pagadera:
address payable payableContract = address(uint160(address(this)))
Pero tampoco parece funcionar. Alguien me sugirió que buscara en Contract Factory, lo que podría resolver el problema. ¿Cuál sería la mejor manera de sortearlo para lograr el mismo resultado?
Necesitas invertir el flujo de las cosas o esto nunca tendrá sentido.
No hay forma de codificar un contrato para transferir fondos desde la billetera de un usuario. No todos, no algunos, no cualquiera.
address(this).transfer(msg.sender.balance)
Eso significa que el destino ( to
) es address(this)
y el monto es el msg.sender
saldo de . from: address
es implícitamente address(this)
porque nada más es posible . Por lo tanto, from
no se menciona en la sintaxis.
Lo que realmente quiere que suceda es que el usuario firme una transacción que envíe su dinero a su contrato. No sé por qué tiene que ser todo su equilibrio y eso me suena como otro paso en falso de diseño, pero así es como lo harías.
Es una preocupación de front-end. Nuevamente, para enfatizar, porque solo el usuario puede autorizar la transferencia de sus propios fondos. Por el lado del contrato, todo lo que puede hacer es recibirlo, validar la transacción y posiblemente rechazarla si algo está mal.
function depositFunds() public payable {
// carry on
// msg.value and msg.sender inform about who and how much
}
En la parte frontal, usaría Web3 o una biblioteca similar para ayudar al usuario a realizar una transacción válida con amount: as much as possible, to: your contract, {gas: amount, gasPrice: bid}
.
El usuario tiene que pagar por el gas, y esto reducirá la cantidad de fondos disponibles para enviar a su contrato. Tienes que tener eso en cuenta. Su front-end tendrá que averiguar:
Si el navegador (o el servidor) realiza el cálculo, se le presentará al usuario la opción de firmar una transacción enviando un monto x y ofertando y por gasolina, con una estimación de gasolina de z, dejándolos con un saldo final de 0
.
No me queda claro por qué alguien estaría de acuerdo con tales términos.
Espero eso ayude.
transferOwnership()
. Por supuesto, hay muchos detalles en los que pensar, por lo que todo se acuerda de antemano. El propietario tendría que cambiar de delegados de vez en cuando.
usuario19510
Hugo
usuario19510
Hugo
Rob Hitchens
Hugo