Ich spiele mit Solidity herum und bin auf ein äußerst verwirrendes Problem gestoßen. Ich möchte eine Zuordnung von Adressinstanzen haben (postalische Adressen NICHT den Adresstyp)
Adresse ist eine benutzerdefinierte Struktur wie folgt:
//Struct representing a postal address
struct Address {
bool initialized;
string identifier;
string street;
string city;
}
Jetzt habe ich eine öffentliche Funktion zum Erstellen einer Adresse, die wie folgt definiert ist:
function buildAddress(string identifier, string street, string city) public returns(string){
Address storage addressInstance = addresses[sha3(identifier)];
addressInstance.initialized = true;
addressInstance.identifier = identifier;
addressInstance.street = street;
addressInstance.city = city;
return identifier;
}
und ich habe einen Getter wie folgt definiert:
function getAddressStreet(string addressIdentifier) public constant returns(string) {
Address storage addressInstance = addresses[sha3(addressIdentifier)];
if (addressInstance.initialized == false) {
// Unknown node, just return 0x0;
return "No address";
}
return addressInstance.street;
}
Mein Problem ist, dass dies nicht funktioniert. „Erstellen“ einer Adresse, Mining der Transaktion und anschließendes „Abrufen“ des Straßennamens gibt „Keine Adresse“ zurück.
Was jedoch amüsant ist, ist, dass, wenn ich eine Zeichenfolgeneigenschaft aus der Adressstruktur entferne, z. B. Stadt, alles perfekt funktioniert ... wie erwartet.
Das heißt, wenn mehr als 2 String-Eigenschaften in der Struktur vorhanden sind, wird die Adresse scheinbar nicht in der Blockchain beibehalten.
Ich vermute, dass dies etwas mit Speicherorten zu tun hat, aber nachdem ich die entsprechende Dokumentation einige Male gelesen habe, kann ich nichts erkennen, was offensichtlich falsch ist.
Könnte jemand dazu einen Einblick geben? Dies kann durchaus ein Fehler sein, aber ich stelle mir vor, dass es eher ein einfaches Versehen meinerseits ist. Jede Klarstellung wäre willkommen!
Thomas
Laut den Kommentaren zu der Frage handelt es sich wahrscheinlich um einen Fehler in der Solidität.
Robert McCone
Tjaden Hess
[text](link)
in Kommentaren formatiert.christus
Thomas Cloes
Piper Merriam
eth