Si recibo ether en una función de pago en mi contrato inteligente, ¿hay alguna forma de saber si el msg.sender también es capaz de recibir ether sin enviar algunos wei al remitente para ver si falla o no? (Creo que es un costoso "a prueba de fallas") Supongamos, por ejemplo, que estoy cobrando un depósito que debe devolverse si no se puede realizar el servicio solicitado.
Parece como si cualquier dirección se pudiera convertir en una dirección pagadera, pero eso no le dice si la dirección es o no un contrato que no tiene una función de reserva pagadera. En ese caso, me gustaría revertir la transacción para que el valor no se cobre en primer lugar.
Para que un contrato tenga Ethers, normalmente debe tener payable
algún tipo de función. Digo típicamente , porque hay excepciones .
Entonces, si un contrato le envía Ethers, probablemente payable
también tenga una función. Pero eso aún no garantiza que pueda usar esa función: tal vez solo se pueda usar en ciertas direcciones, por ejemplo.
Por lo tanto, no puede estar seguro de si un contrato con Ethers tiene una payable
función, e incluso si pudiera, no puede estar seguro de cuál es esa función y si podría llamarla.
Entonces, por lo que puedo decir, no hay forma de saber si un determinado contrato es capaz de recibir Ethers. Incluso con su método 'a prueba de fallas', no puede estar seguro de si el receptor tiene un código que rechazó condicionalmente su envío o si no puede aceptar Ether en absoluto.
GGizmos