¿Cómo definir un "campo" de estructura dinámica?

Tenemos un structcomo sigue:

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

Ahora, queremos modificar bytes32 state;el campo para que sea dinámico y así podamos "agregarle" varios "sub_estados", por ejemplo. objectStructs[_object_id].state.location = _location;o objectStructs[_object_id].state.price= _price;etc

¿Cómo podemos definir un "campo de estado dinámico" de tal manera que podamos agregarle cualquier "sub_estado"?

Lo definí de la siguiente manera:

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

Y luego :

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);

entonces, invocamos function newObjectde la siguiente manera:

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

Estoy equivocado ?

Respuestas (1)

No existe tal 'campo de estado dinámico' como explicas en tu publicación. Pero puede usar un mapeo dentro de la estructura que lo hará por usted.

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

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

entonces usa

objectStructs[id].state.sub_state["location"] = "Paris";
objectStructs[id].state.sub_state["sold"] = "Yes";
objectStructs[id].state.sub_state["price"] = 50;
Muchas gracias por su útil respuesta, pero no entendí exactamente dónde se define "myState" en su "struct ObjectStruct". Gracias
lo siento es mi error tipográfico, corregido ahora
Gracias de nuevo. ¿Podría informarme mediante esta estructura cómo definir los parámetros "función newObject" y "event LogNewObject"? Gracias.
debe definir los parámetros en el estado como matriz, (bytes32[] states,bytes32[] state_values)iterar a través de la matriz y almacenar el subestado; objectStructs[_object_id].state.sub_state[states[i]] = state_values[i]el evento también se puede cambiar pasando las matrices en lugar de una sola cadena (eso depende de usted en realidad).
Gracias, le agradecería que me dijera cómo establecer el valor de "estados" y "valores_estados" al momento de invocar la función. es un poco complicado :) Gracias de nuevo
por ejemplo, newObject(100, {"ubicación","vendido","precio"},{"París","Sí","50"}) es correcto? Gracias una vez más