Wie unterscheidet Ethereum bei der Vertragserstellung zwischen 0x0 und null?

Laut EVM-Dokumentation werden alle Werte initialisiert. Dieses Mittel toenthält die 0Adresse, da nulles sich nicht um einen anerkannten Staat handelt. Die 0Adresse verweist auf ein externes Konto (von dem wir alle wissen, dass es eine Fülle von Ether und Token enthält). Wie unterscheidet Ethereum also eine Vertragserstellungsanfrage von einer Wertübertragungsanfrage, die vom Absender an die Adresse 0x0..0 stammt?
Bestimmt dann der Payload-Inhalt der Dateneigenschaft, ob es sich um eine Vertragserstellungsanfrage handelt, z. B. Parser sieht to == 0x0 && data == 0x0und zu Wertübertragung auf Konto 0x0..0 führt.

Antworten (1)

Vielen Dank an @Ismael, der klargestellt hat, wie die RLP-Codierung Daten während der Vertragsinitialisierung behandelt. Es scheint, dass das Codierungsprotokoll zwischen leerem Byte-Array und Adresse unterscheiden kann. Die Regeln der EVM sind dann anders und hier irrelevant.

Implementierungen können Payloads unterschiedlich handhaben. Beispielsweise senden Javascript-Web3-Adresseinträge von 0& 0x0keinen Wert mehr über web3 an die Genesis-Adresse, sind aber aufgrund des Verhaltens von JS leider mit undefined austauschbar. Diese Änderung wurde vor kurzem an web3 vorgenommen ... https://github.com/ethereum/web3.js/blob/59aae306c1c31ef6a65b9196e7f03af74c69e059/lib/web3/formatters.js#L274

Dies beantwortet meine eigene Frage, dachte aber, es wäre nützlich zu posten, da Diskussionen über diese Feinheiten in Posts zu fehlen scheinen: versehentliche Zahlungen an die Genesis-Blockadresse.