Ein Freund und ich haben über Transaktionskosten nachgedacht. Entstehen Kosten für das Senden einer Überweisung an eine neue Adresse, die zuvor noch nicht in der Kette gespeichert wurde? Also fingen wir an zu graben.
Zuerst riefen wir die Überweisung an eine neue Adresse und eine andere an, die zuvor verwendet wurde, wie erwartet betrugen die Kosten für beide 21000.
Neue Adresse: https://ropsten.etherscan.io/tx/0xec05af75ec938aa1cc78612b13d8d2e3c8f4212f60173161450297c9a25ea5a3
Miner-Adresse (zuvor verwendet): https://ropsten.etherscan.io/tx/0x7fe1c8c699901923d89e07a9b66e7d952c67064bcc9d86bf84bad07cac2391b1
Dann haben wir versucht, die Übertragung von einem SC durchzuführen, dies ist die Funktion, die wir verwenden:
function test (address receiver) public payable { receiver.transfer(msg.value); }
Ganz einfach, wir begannen mit dem Testen und riefen die Funktion unter einer neuen Adresse auf:
https://ropsten.etherscan.io/tx/0x38dabd569350fa985e11f892f7175ad09a32a0c067b993f68152f34d7ca4dcb3
Das erste Überraschende war, dass die Kosten für die Ausführung dieser Funktion 55356 Gas betrugen, viel höher als die 21000, die wir zuvor gesehen haben. Wir haben es noch einmal genannt:
https://ropsten.etherscan.io/tx/0xa2d23ea51102cc98f92b6ef89ed452a5be0e0ebbc26c136fc43f9a5a67a99a52
Zu unserer Überraschung waren die Benzinkosten jetzt 30356 viel niedriger als vorher, warum??
Wir haben versucht, die Funktion für eine verwendete Adresse aufzurufen (die bereits in der Kette gespeichert sein sollte), um zu sehen, ob das Senden an eine neue Adresse der Differenzfaktor war. Wir haben es zweimal getan:
https://ropsten.etherscan.io/tx/0xf9eb2e6536db2ec933ac21fb5bd8c422b6ae3b811f4bd72be4a55e02a6aec227
https://ropsten.etherscan.io/tx/0x4ef30764af81df4dc0dcc98bd4db5424c0c2bea99257df829b1c347a8764048f
Und es kostete 30356 in beiden.
Warum passiert das, warum kostet das Senden von Ether an eine neue Adresse von einem SC über 50 % mehr als das Senden an eine gebrauchte Adresse?
Ja, das stimmt. Wenn Sie das Ethereum Yellow Paper lesen, können Sie in Anhang H sehen, dass Sie zusätzliches Gas bezahlen müssen, wenn Sie Ether auf ein neues Konto senden.
Dies soll Adressen davon abhalten, eine Menge Transaktionen an neue Adressen zu senden und so die Kettengröße zu sprengen.
Benutzer19510
transfer
Anrufs sollten nicht davon abhängen, ob der Empfänger der Empfänger früherer Überweisungen war, aber es ist schwierig, Ihnen eine Erklärung zu geben, ohne den Code zu sehen.Benutzer19510
Enrique Alcázar
Benutzer19510