Warum ist es in https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC20/MintableToken.sol#L38 erforderlich, das Ereignis auszugeben?
Transfer(0x0, _to, _amount);
nach dem Prägen einiger Münzen? Kann mir bitte jemand diese Codezeile erklären? Übertragen Sie tatsächlich Münzen von 0x0 an die Adresse _to
?
Das ist kein Übertragungsvorgang, sondern eine Ereignisbenachrichtigung.
Dies geschieht auf diese Weise, sodass Block-Explorer und Wallets, die nur das „Transfer“-Ereignis interpretieren, dem Benutzer die Operation anzeigen können. Es gab einige Beschwerden von Benutzern, dass die Übertragung fehlgeschlagen ist, weil sie nicht in ihrer Brieftasche (oder ihrem Block-Explorer) angezeigt wurde.
Nur das Event „Transfer“ ist Teil des ERC20-Standards , die Events „Mint“ und „Burn“ nicht. Es ist eine Problemumgehung, um diese Einschränkung zu umgehen, indem eine Übertragung von 0x0 generiert wird, um ein „Mint“-Ereignis zu simulieren, und eine Übertragung auf 0x0, um ein „Burn“-Ereignis zu simulieren.
Als ursprünglicher Autor dieser Codezeile dient sie dazu, das EIP-20-Transaktionsereignis in EtherScan anzuzeigen. Auf diese Weise können die Käufer des Token-Verkaufs sehen, dass sie die Token und den richtigen Betrag erhalten haben, wenn sie sich in den Token-Verkauf einkaufen.
Weitere Diskussionen finden Sie in der ursprünglichen Quellcodedatei:
https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol#L38
Die Übertragung ist nur ein vom ERC20Basic.sol-Vertrag geerbtes Ereignis.
https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol
Was es tut, ist nur zu protokollieren, dass der Vertrag neue Münzen geprägt und an die Adresse _to gegeben hat.