Wie konvertiere ich Strings richtig in Bytes32?

In meiner Solidität verwende ich eine Zuordnung wie diese:

mapping(bytes32 => uint) items;

constructor() {
   items["test"] = 2;
}   

function getItem(bytes32 key) returns(uint) {
   return items[key];
}

Meine Frage ist nun, wie man die Funktion in JS mit web3 1.0 aufruft? Ich muss die Zeichenfolge in Hex umwandeln. Die Verwendung web3.utils.stringToHex("test")gibt mir 0x74657374. Damit bekomme ich invalid bytes32 value. Die Funktion web3.utils.asciiToHexgibt zurück 0x7465737400000000000000000000000000000000000000000000000000000000, was für mich wie ein anderer Wert aussieht. Der Funktionsaufruf ist erfolgreich, aber ich erhalte nicht den erwarteten Ergebniswert von 2. Ich habe auch versucht, web3Utils.padLeft(web3Utils.stringToHex(params[index]), 64);was 0x0000000000000000000000000000000000000000000000000000000074657374. Funktionsaufruf erfolgreich, aber Ergebniswert ist ebenfalls 0 und nicht 2.

Antworten (1)

Wenn Sie auf web3 v0.x sind, dann:

  • Verwenden Sie web3.fromAscii, bevor Sie die Zeichenfolge an den Smart Contract senden
  • Verwenden Sie web3.toAscii, nachdem Sie die Zeichenfolge aus dem Smart Contract gelesen haben

Wenn Sie auf web3 v1.x sind, dann: