Вернуть ответ от функции самоуничтожения

Я пытаюсь получить какое-то подтверждение после того, как я уничтожу контракт, вернув true, но когда я запускаю команду kill, она всегда возвращает false. Есть какая-то причина, почему, или контракт не убивают?

Вот код моего контракта:

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

Вот мой код трюфеля, который я пытаюсь вернуть true, но он продолжает возвращать false:

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}`);
    })

Ответы (2)

Здесь происходит 2 вещи:

1- Функция killContract изменяет состояние блокчейна, поэтому пометить его как константу/представление не получится. Функции константы/представления могут только читать состояние.

Учитывая, что это НЕ будет постоянной функцией, вы не сможете вернуть какие-либо значения из-за твердости.

2- После вызова самоуничтожения кажется, что дальнейшие инструкции не будут обрабатываться.

Что вы можете сделать, так это запустить событие перед вызовом самоуничтожения, чтобы сообщить web3, что функция была вызвана. Если самоуничтожение не удалось, функция вернется, и событие не сработает.

pragma solidity 0.4.19;

contract A{

    event debug(bool destroyed);

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


    }
}

Еще одна вещь, которую вы можете сделать, это добавить фиктивную функцию, которая возвращает true при вызове. Если вы вызвали его после самоуничтожения контракта, то он вернул бы false.

Если я не ошибаюсь, контракт расторгнут и некому/ничего не осталось return true;. Это уничтожило следующий шаг.

Я считаю, что вы можете создать событие раньше selfdestruct, и оно появится в журнале транзакций. Это дало бы наблюдателю положительное подтверждение того, что это selfdestructимело место. Что-то вроде:

event LogSelfDestruct(address sender, uint amount);

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

Затем просмотрите этот журнал событий, чтобы наблюдать за событиями самоуничтожения.

Надеюсь, поможет.

PS Я согласен с Пабло. constantне принадлежит.

Я хочу вернуть истину, потому что я пытаюсь вызвать другое событие после уничтожения контракта. Есть ли способ сделать это?
Я действительно так не думаю, но, возможно, кто-то во время перезвонит с пониманием.