Wir haben struct
folgendes:
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 newObject
wie folgt auf:
newObject(100, "location:Paris,price:50,sold:yes", '0xE07b6e5a2026CC916A4E2Beb03767ae0ED6af773');
Ich habe mich geirrt ?
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;
Fragesteller
mirg
Fragesteller
mirg
(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).Fragesteller
Fragesteller