Wie füge ich Daten zu einer Sendetransaktion in Solidity hinzu?

In myetherwallet gibt es einen Abschnitt +Erweitert: Daten hinzufügen, in dem ich Daten zur Transaktion hinzufügen kann.

Wie kann ich dieselben Daten zu einer Transaktion hinzufügen, die ich in Solidity mache?

Geben Sie hier die Bildbeschreibung ein

Antworten (2)

Sie müssen zuerst Ihre Zeichenfolge mit einem Online-Konverter wie http://string-functions.com/string-hex.aspx in die hexadezimale Form konvertieren .

dann in das Datenfeld einfügen (mit 0x am Anfang)

Zum Beispiel habe ich StackExchange in 0x 537461636b45786368616e6765 konvertiert

Geben Sie hier die Bildbeschreibung ein

Geben Sie es in das Datenfeld ein und dann habe ich meine Transaktion erfolgreich gesendet. Sie können die Transaktion hier überprüfen .

Geben Sie hier die Bildbeschreibung ein

Sie können unten auf die Schaltfläche zum Konvertieren in Asci klicken, um die verschlüsselte gesendete Zeichenfolge zurückzubekommen.

Diese Antwort zeigt nicht, wie es in Solidity gemacht wird. Abstimmen.

Sie können Soliditys Low-Level verwenden call, aber seien Sie vorsichtig mit Was bedeutet "call.value" und wie hat es den Angriff auf The DAO zugelassen?

Beispiel:

bytes calldata = 0xabcdef;
address to = 0x...
if (to.call(calldata)) {  // checks the return value
    ....
} else {
    ....
}

Wenn Sie 2 ETH mitschicken wollten, wäre die Syntax:

to.call.value(2 * 10**18)(calldata);  // should check the return value

Einige Informationen in den Solidity- Dokumenten und FAQ .

Wann immer Sie verwenden call, kann der Code im toVertrag ausgeführt werden, und da er Sie auf eine Weise zurückrufen kann, die Sie möglicherweise nicht erwarten (wie TheDAO ), sollten Sie Richtlinien wie das Aktualisieren von Zustandsvariablen zuerst und callden allerletzten Schritt befolgen (ein Beispiel das zeigt, dass zuerst eine Zustandsvariable auf Null gesetzt wird und dann ein Aufruf an msg.sender erfolgt).

warum nicht send statt call verwenden?
@SigTouri Ja sendoder transferist besser, wenn das alles ist, was benötigt wird. Die Frage war nach dem Hinzufügen von Daten.
@eth Wie macht man das mit Token Contract? value() scheint Ether zu erwarten.
@nueverest Token funktionieren ganz anders: Sie rufen eine Übertragungsfunktion auf einem Token-Vertrag auf und geben Empfänger und Menge der Token an. Sie haben Recht, dass value() nicht verwendet werden sollte. Seien Sie vorsichtig und testen Sie zuerst.