Der folgende Code wird nicht kompiliert, da der Compiler einen Zuordnungsschlüssel mit fester Größe benötigt , um einen Accessor für eine öffentliche Zuordnung zu erstellen. Ich verwende hier den String-Typ. Meine Strings sind 24-Byte-Hex-Strings.
Meine Frage:
Wie würden Sie eine Zeichenfolge in einen Typ mit fester Größe umwandeln, der als Zuordnungsschlüssel verwendet werden kann?
Haben Sie Tipps, wie der Code effizienter gestaltet werden kann?
pragma solidity ^0.4.6;
contract C {
struct User {
uint balance;
}
mapping (string => User) public accounts;
function newUser(string id, uint balance) {
accounts[id] = User(balance);
}
}
Fehler: Nicht implementiertes Feature: Accessors für Mapping mit Schlüsseln mit dynamischer Größe noch nicht implementiert.
Ich schlage vor, bytesN anstelle von string zu verwenden:
pragma solidity ^0.4.6;
contract C {
struct User {
uint balance;
}
mapping (bytes24 => User) public accounts;
function newUser(bytes24 id, uint balance) {
accounts[id] = User(balance);
}
}
Sie können auch Bytes in Strings umwandeln. Schauen Sie sich an: How to convert a bytes32 to string
bytes
unterscheidet sich stark vom Typ "bytesN", der bytes24
, enthält bytes32
.
Tjaden Hess
Tjaden Hess
User
in einer öffentlichen Funktion zurückgeben. Solidity hat eine nette kleine Funktion, mit der Sie eine benutzerdefinierte Struktur von einer öffentlichen Zuordnung zurückgeben können, aber nur über eine lokalecall
, nicht über eine tatsächliche EVM-Operation. Dynamische Schlüssel verwirren damit