Wie definiere ich eine dynamische Struktur "Feld"?

Wir haben structfolgendes:

struct ObjectStruct {
        bytes32 state;
        address owner; 
        bool isObject;
    }
mapping(bytes32 => ObjectStruct) public objectStructs;
    bytes32[] public objectList;

Jetzt möchten wir das Feld so ändern, bytes32 state;dass es dynamisch ist und wir mehrere „sub_state“ hinzufügen können, z. objectStructs[_object_id].state.location = _location;oder objectStructs[_object_id].state.price= _price;usw.

Wie können wir ein solches "dynamisches Zustandsfeld" so definieren, dass wir ihm jeden "sub_state" hinzufügen können?

Ich habe es wie folgt definiert:

struct ObjectStruct {
        bytes32 location;
        bytes32[] state;
        address owner; 
        bool isObject;
    }

Und dann :

function newObject(bytes32 _object_id, bytes32 _state, address _owner) public returns(bool success) {
        require(!isObject(_object_id));

        objectStructs[_object_id].state = _state;
        objectStructs[_object_id].owner = _owner;
        objectStructs[_object_id].isObject = true;
        objectList.push(_object_id);

        LogNewObject(msg.sender, _object_id, _state, _owner);
        return true;
    }

event LogNewObject(address sender, bytes32 _object_id, bytes32 state, address owner);

dann rufen wir function newObjectwie folgt auf:

newObject(100, "location:Paris,price:50,sold:yes", '0xE07b6e5a2026CC916A4E2Beb03767ae0ED6af773');

Ich habe mich geirrt ?

Antworten (1)

Es gibt kein solches "dynamisches Zustandsfeld", wie Sie in Ihrem Beitrag erklären. Sie können jedoch eine Zuordnung innerhalb der Struktur verwenden, die dies für Sie erledigt.

struct StateStruct {
    bytes32 description;
    mapping(bytes32 => bytes32) sub_state;
}

struct ObjectStruct {
    StateStruct state;
    address owner; 
    bool isObject;
}

dann benutze

objectStructs[id].state.sub_state["location"] = "Paris";
objectStructs[id].state.sub_state["sold"] = "Yes";
objectStructs[id].state.sub_state["price"] = 50;
Vielen Dank für Ihre hilfreiche Antwort, aber ich habe nicht genau verstanden, wo "myState" in Ihrer "struct ObjectStruct" definiert ist? Danke
Entschuldigung ist mein Tippfehler, wurde jetzt korrigiert
Danke noch einmal. Könnten Sie mir bitte mit dieser Struktur mitteilen, wie die Parameter "function newObject" und "event LogNewObject" definiert werden? Danke schön.
Sie müssen die Parameter im Zustand als Array definieren, (bytes32[] states,bytes32[] state_values)durch das Array iterieren und den Unterzustand speichern. objectStructs[_object_id].state.sub_state[states[i]] = state_values[i]Das Ereignis kann geändert werden, indem Sie auch die Arrays anstelle einer einzelnen Zeichenfolge übergeben (das liegt tatsächlich bei Ihnen).
Danke, ich weiß es zu schätzen, wenn Sie mir mitteilen könnten, wie der Wert von "states" und "state_values" zum Zeitpunkt des Aufrufs der Funktion festgelegt wird. es ist ein bisschen kompliziert :) Nochmals vielen Dank
Beispiel: newObject(100, {"location","sold","price"},{"Paris","Yes","50"}) ist richtig ? Noch einmal vielen Dank