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
Nicht genau wie beschrieben, aber Sie können den Effekt machen.
Wenn Sie beginnen, ContractB
einige Token zu verbrennen, können Sie:
Erstellen Sie mit etwas Voraussicht eine richtige Burn-Funktion ContractA
und rufen Sie sie dann auf, ContractB
um Token zu zerstören und den Gesamtvorrat zu reduzieren.
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.
Mick Marosky
Rob Hitchens