Die Ausgabe der Hash-Funktion SHA256 ist ein Hex-String der Länge 64. Beispiel:3ed54831f488a22b28398de0c567a3b064b937f54f81739ae9bd545967f3abab
Ich möchte die Funktion eines Smart Contracts mit folgender Struktur aufrufen:
function register(bytes32 hash)
und übergeben Sie das Hex als Argument.
Ich verwende die web3-JavaScript-Bibliothek.
Zuerst habe ich versucht, das Argument ohne Konvertierung zu übergeben. Das Ergebnis war ein Abschneiden der letzten 32 Bytes
Dann habe ich die Funktion von web3 fromAscii
mit den gleichen Ergebnissen ausprobiert.
Habe ich auch ausprobiert hexToBytes
und bytesToHex
funktioniert ab der 1.x Version. hexToBytes
gibt ein Byte-Array der Größe 32 zurück. Wenn ich das Array an die Smart-Contract-Funktion übergebe, sind die Ergebnisse völlig anders als erwartet.
Wie konvertiere ich also ein Hex von 32 Bytes (64 Zeichen Hex) in ein Format, das für ein bytes32
Funktionsargument geeignet ist?
Ich weiß, dass ich bytes
oder string
anstelle von verwenden kann, bytes32
aber ich würde es lieber vermeiden, da der Hexadezimalwert von SHA256 tatsächlich 32 Bytes beträgt.
BEARBEITEN
Ich erstelle einen Testvertrag und teste ihn im Remix. Ich rufe die set
Funktion mit input auf 0x3fd54831f488a22b28398de0c567a3b064b937f54f81739ae9bd545967f3abab
. Der Wert wird nicht abgeschnitten und ich erhalte die erwarteten Ergebnisse.
pragma solidity ^0.4.24;
contract Test {
bytes32 public hash;
function set(bytes32 h) public {
hash = h;
}
}
Das Problem sollte also in der web3-Bibliothek oder JS selbst liegen, oder?
AKTUALISIEREN
Ich verwende die truffle-contract
Bibliothek, um die Funktionen meines Smart Contracts aufzurufen
Übergeben Sie es als Zeichenfolge "0x3fd54831f488a22b28398de0c567a3b064b937f54f81739ae9bd545967f3abab". Es wird nicht abgeschnitten.
Wenn dies nicht gelöst wird, lesen Sie Folgendes: Übergeben Sie ein String-Objekt mit dem Wert "0x.." als bytes32 an eine Solidity-Funktion
web3.fromAscii(value)
. Entfernen Sie die Konvertierung und übergeben Sie die Eingabe wie 0x...
funktioniert.
Thomas JayRush
Laxmana
Kristian