Ist es möglich, die Salden eines Vertrags aus einem anderen Vertrag zu verbrennen?

Stellen Sie sich das Szenario vor, in dem Vertrag A 1000 Token (des Vertrags selbst) in seinem Besitz hat. Ist es möglich, einen zweiten Vertrag zu erstellen und die Token von Vertrag A zu verbrennen?

contract ContractA is DetailedERC20 {

    uint8 public constant decimals = 18;

    uint256 public constant INITIAL_SUPPLY = (500 * (10**6)) * (10 ** uint256(decimals));

    constructor(string _name, string _symbol) 
    public 
    DetailedERC20(_name, _symbol, decimals)
    {
        totalSupply_ = INITIAL_SUPPLY;
        balances[this] = INITIAL_SUPPLY;
        emit Transfer(address(0), this, INITIAL_SUPPLY);
    }
}

Vertrag B ( PSEUDO )

contract ContractB {

    ERC20 public token;

    constructor(ERC20 _token) public {
        token = _token;
    }

    function burn() internal {
        token.balances[address(token)] = 0;
        token.totalSupply_ = 0;
    }
}

Tut mir leid, wenn es seltsam aussieht, aber ich bin ein Noob in Solidity

Antworten (1)

Nicht genau wie beschrieben, aber Sie können den Effekt machen.

Wenn Sie beginnen, ContractBeinige Token zu verbrennen, können Sie:

  1. Erstellen Sie mit etwas Voraussicht eine richtige Burn-Funktion ContractAund rufen Sie sie dann auf, ContractBum Token zu zerstören und den Gesamtvorrat zu reduzieren.

  2. Improvisieren Sie, indem Sie die Token (mit der regulären Übertragungsfunktion) an eine Adresse übertragen, die sie unausgebbar macht. Viele Prozesse senden address(0)zu diesem Zweck an, weil davon ausgegangen wird, dass niemand einen privaten Schlüssel für hat (oder jemals haben wird) 0x0.

Ich hoffe es hilft.

Der Vertrag A ist bereits in der Blockchain (Ropsten), daher kann ich Option 1 nicht verwenden. Bezüglich 2 habe ich keine Ahnung, wie ich die Token des Vertragsguthabens an eine andere Adresse übertragen kann. Könntest du mir helfen?
Wenn ContractB "einige Tokens hat", bedeutet dies nicht, dass ContractB auch bereitgestellt wird? Wenn ja, sind Sie auf die eingebauten Funktionen von ContractB beschränkt, die hoffentlich eine Funktion zum Versenden von Token enthalten.