Der beste Weg, Ether und andere Ethereum-Token zu verbrennen?

Ist es richtig, dass alle Ether oder Token, die an die Adresse 0x0000000000000000000000000000000000000000000 gesendet werden, zerstört werden?

Oder wie verbrennt man Ether / Token am besten?

Ich sende immer wieder ein Spam-Token zurück und es kommt immer wieder in meine Brieftasche plus 1, dh 232.233.234. Jedes Mal, wenn ich es sende, kommt es immer wieder zurück ... wie verbrenne ich diese Münze oder die Vertragsdrohne spammt mich weiter?

Antworten (3)

Laut Jeff Wilcke besteht der richtige Weg, ETH zu verbrennen, darin, einen Vertrag zu erstellen, der sich sofort selbst zerstört und an seine eigene Adresse sendet, oder einfach Ether an seinen bereitgestellten Vertrag zu senden, der alles für Sie erledigt:

https://etherscan.io/address/0xb69fba56b2e67e7dda61c8aa057886a8d1468575#code

Hier ist der Code:

pragma solidity ^0.4.11;

contract Burner {
    uint256 public totalBurned;

    function Purge() public {
        // the caller of purge action receives 0.01% out of the
        // current balance.
        msg.sender.transfer(this.balance / 1000);
        assembly {
            mstore(0, 0x30ff)
            // transfer all funds to a new contract that will selfdestruct
            // and destroy all ether in the process.
            create(balance(address), 30, 2)
            pop
        }
    }

    function Burn() payable {
        totalBurned += msg.value;
    }
}

Ein einfacheres Beispiel ohne Montage ist:

contract GetsBurned {

    function () payable {
    }

    function BurnMe () {
        // Selfdestruct and send eth to self, 
        selfdestruct(address(this));
    }
}

Nachdem BurnMeSie das zweite Beispiel aufgerufen haben, sehen Sie, dass die Adresse des Vertrags keinen Saldo oder Code mehr enthält. Die ETH verschwindet einfach!

Falls Sie nur Token zerstören müssen, die auf der Ethereum-Plattform entwickelt wurden, kann diese Funktionalität in den Smart Contract selbst eingebettet werden:

/**
 * @dev Burns a specific amount of tokens.
 * @param _value The amount of token to be burned.
 */
function burn(uint256 _value) public {
    require(_value > 0);
    require(_value <= balances[msg.sender]);
    // no need to require value <= totalSupply, since that would imply the
    // sender's balance is greater than the totalSupply, which *should* be an assertion failure

    address burner = msg.sender;
    balances[burner] = balances[burner].sub(_value);
    totalSupply = totalSupply.sub(_value);
    Burn(burner, _value);
}

Quelle - OpenZeppelin

Möglicherweise möchten Sie einige zusätzliche Sicherheitsprüfungen einbetten, z. B. die Überprüfung der Adresse des Funktionsaufrufers, wenn Sie Ihr eigenes zentralisiertes Token entwickeln.

Jede Adresse kann funktionieren, solange Sie sicherstellen können, dass es unmöglich (oder besser gesagt, sehr unwahrscheinlich ) ist, den privaten Schlüssel dazu zu finden.

Wenn Sie 0x0000000000000000000000000000000000000 aus irgendeinem Grund nicht als Ihre brennende Adresse mögen, können Sie dasselbe erreichen, indem Sie an eine beliebige Adresse mit einem offensichtlichen Muster senden, zum Beispiel: 0x3737373737373737373737373737373737373737

Es gibt keine Möglichkeit zu überprüfen, ob der private Schlüssel tatsächlich zerstört wurde