Как определить динамическую структуру «поле»?

У нас есть structследующее:

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

Теперь мы хотим изменить bytes32 state;поле так, чтобы оно было динамическим, и чтобы мы могли «добавить» к нему несколько «под_состояний», например. objectStructs[_object_id].state.location = _location;или objectStructs[_object_id].state.price= _price;и т.д.

Как мы можем определить такое «динамическое поле состояния», чтобы мы могли добавить к нему любое «под_состояние»?

Я определил это следующим образом:

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

А потом :

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

затем мы вызываем function newObjectследующим образом:

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

Я не прав ?

Ответы (1)

Не существует такого «динамического поля состояния» , как вы объясняете в своем посте. Но вы можете использовать сопоставление внутри структуры, которое сделает это за вас.

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

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

затем используйте

objectStructs[id].state.sub_state["location"] = "Paris";
objectStructs[id].state.sub_state["sold"] = "Yes";
objectStructs[id].state.sub_state["price"] = 50;
Большое спасибо за ваш полезный ответ, но я не понял, где именно определяется «myState» в вашей «struct ObjectStruct»? Спасибо
извините, это моя опечатка, сейчас исправлю
Еще раз спасибо. Не могли бы вы сообщить мне с помощью этой структуры, как определить параметры «функция newObject» и «событие LogNewObject»? Спасибо.
вам нужно определить параметры в состоянии как массив, (bytes32[] states,bytes32[] state_values)перебирающий массив и сохраняющий подсостояние objectStructs[_object_id].state.sub_state[states[i]] = state_values[i], событие может быть изменено, передавая массивы, а не одну строку (на самом деле это зависит от вас).
Спасибо, я признателен, если вы сообщите мне, как установить значение «states» и «state_values» во время вызова функции? это немного сложно :) еще раз спасибо
например, newObject(100, {"местоположение","продано","цена"},{"Париж","Да","50"}) верно? Еще раз спасибо