Struktur wird nicht im Mapping gespeichert, wenn sie mehr als zwei 'String'-Eigenschaften enthält. Insekt?

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

Ich hatte vor ein paar Monaten ein sehr ähnliches Problem mit einem String in einer Struktur mit anderen Variablen (in meinem Fall ints). Es stellte sich heraus, dass es sich um einen Bug handelte. Hier ist das Problem auf <a href=" forum.ethereum.org/discussion/3475/… > und <a href=" github.com/ethereum/solidity/issues/74">ein Link zum Github-Problem</ a> was geschlossen wurde. Ich würde sagen, eröffne ein Problem, sieht definitiv nach einem ähnlichen Fehler mit Speicherorten aus.
@RobertMcCone für zukünftige Referenzen, Links sind wie [text](link)in Kommentaren formatiert.
Könnten Sie bitte den vollständigen Code für einen einfachen Vertrag bereitstellen, der sich so verhält? Besonders das von Ihnen verwendete Mapping ist von Interesse.
Chris, ich habe das Github-Problem mit einem Link zu einem Kern aktualisiert, der das Problem demonstriert. Das Github-Problem listet Schritte zum Reproduzieren auf.
Laut den Kommentaren zu der Frage handelt es sich wahrscheinlich um einen Fehler in der Solidität. github.com/ethereum/solidity/issues/381
@PiperMerriam Ich habe Ihre Antwort in einen Kommentar umgewandelt, in der Hoffnung, eine tatsächliche Antwort zu erhalten, da sogar das Github-Problem ohne Lösung geschlossen wurde.

Antworten (1)

Laut den Kommentaren zu der Frage handelt es sich wahrscheinlich um einen Fehler in der Solidität.

https://github.com/ethereum/solidity/issues/381