Devolver una respuesta de la función de autodestrucción

Estoy tratando de tener algún tipo de confirmación después de que elimine un contrato al regresar true, pero cuando ejecuto mi comando de eliminación, siempre regresa false. ¿Hay algún motivo por el cual, o no se está eliminando el contrato?

Aquí está mi código de contrato:

function killContract() constant returns (bool) {
    require(msg.sender == owner);
    selfdestruct(owner);
    return true;
}

Aquí está mi código de trufa que estoy tratando de que devuelva verdadero, pero sigue devolviendo falso:

MyContract.at('0x...')
    .then(instance => {
        c = instance;
        return c.getOwner()
    })
    .then(owner => {
        console.log(`Owner: ${owner}`);
        return c.killContract()
    })
    .then(killed => {
        console.log(`If killed return true: ${killed}`);
    })
    .catch(error => {
        console.log(`${error}`);
    })

Respuestas (2)

Aquí están pasando 2 cosas:

1- La función killContract modifica el estado de la cadena de bloques, por lo que marcarla como constante/vista no funcionará. Las funciones de vista/constante solo pueden leer el estado.

Dado que esta NO sería una función constante, no podrá devolver ningún valor fuera de la solidez.

2- Una vez que se invoca la autodestrucción, parece que no se procesarán más instrucciones.

Lo que puede hacer es activar un evento antes de llamar a la autodestrucción para que web3 sepa que se llamó a la función. Si fallaba la autodestrucción, la función se revertiría y el evento no se activaría.

pragma solidity 0.4.19;

contract A{

    event debug(bool destroyed);

    function destroyMeAndLog() onlyOwner{
        debug(true);
        selfdestruct(this);


    }
}

Otra cosa que podría hacer es agregar una función ficticia que devuelva verdadero cuando se le llame. Si lo llamó después de que el contrato se autodestruyó, devolvería falso.

A menos que me equivoque, el contrato se cancela y no queda nadie/nada para return true;. Borró el siguiente paso.

Creo que puede emitir un evento antes selfdestructy el evento aparecerá en el registro de transacciones. Eso le daría al observador una confirmación positiva de lo que selfdestructocurrió. Algo como:

event LogSelfDestruct(address sender, uint amount);

function kill() public onlyOwner {
  LogSelfDestruct(msg.sender, this.balance);
  selfdestruct(owner);
}

Luego, mire ese registro de eventos para observar los eventos de autodestrucción.

Espero eso ayude.

pd estoy de acuerdo con pablo. constantno pertenece

Quiero devolver un verdadero, porque estoy tratando de desencadenar otro evento después de que se elimine el contrato. ¿Hay alguna forma de hacer eso?
Realmente no lo creo, pero posiblemente alguien mientras interviene con una idea.