¿Cómo sabe el contrato dónde está el fondo (o la cantidad de Ether) al ejecutar el "suicidio"?

Se dice si corremos:

suicide(address recipient);

Al final del contrato, el destinatario recibirá la cantidad de Ether propiedad del contrato.

Pregunta 1: ¿Cómo sabe el contrato (y esta función) dónde está la cantidad de Ether?

Pregunta 2: En el primer ejemplo aquí , no tienen "suicidio", entonces, ¿cómo se liberan los fondos al destinatario (o beneficiario)?


"pagadero" permite que una función (y contrato) reciba Ether, y puede realizar un seguimiento de la cantidad que recibe mediante el uso de una matriz, por ejemplo

mapping (address => uint) balances;

Pregunta 3: ¿Cómo reclama el contrato el dinero que recibe?

Respuestas (1)

P1) El contrato simplemente tiene el éter... Por ejemplo:

Intentarthis.balance

No estoy familiarizado con el ensamblaje exacto generado, pero supongo que hace lo siguiente:

1)recipient.send(this.balance)

2) enviar el código de operación de matar

Puede ser que sea una forma de "eliminar" Al igual que eliminar xyz[1234] recupera algo de gas

P2) A menos que una función que envía beneficiary.send(this.balance)fondos pueda bloquearse esencialmente dentro de un contrato, no hay "magia" en marcha, puede escribir contratos terribles si lo desea :)

P3) Como un contrato recibe fondos a través de una función pagadera, solo los tiene, no necesita reclamarlos, a menos que se trate de recibir un token ERC-20, pero ese es un capítulo completamente diferente

1) Hay un código de operación dedicado SELFDESTRUCTque hace todo.