1

我在区块链上有一个对象,它会不时更新。我想跟踪这些变化。我如何描述这样的结构Vec<(u32, u32)>并在开始时对其进行初始化?现在我有:

encoding_struct! {
    struct AC {
        const SIZE = 16;
        field s: Vec<u32> [00 => 08]
        field o: Vec<u32> [08 => 16]
    }
}

然后等待一个特殊的空初始化事务

message! {
    struct TxInitAC {
        const TYPE = SERVICE_ID;
        const ID = TX_INIT_AC;
        const SIZE = 0;
    }
}

execute方法

fn execute(&self, view: &mut Fork) {
    let mut schema = CurrencySchema { view };                   
    let ac = AC::new(vec![], vec![]);        
    schema.access_control().push(ac);
}
4

1 回答 1

1

在与 Gitter 上的开发人员交谈后,我想出了一个解决方案。

要在一个中描述一个复合对象,encoding_struct!必须在一个对应的 中描述每个组件encoding_struct!。在这个问题的情况下:

encoding_struct! {
    struct Pair {
        const SIZE = 8;
        field s: u32 [00 => 04]
        field o: u32 [04 => 08]
    }
}

encoding_struct! {
    struct AC {
        const SIZE = 8;
        field inner : Vec<Pair> [00 => 08]
    }
}

要初始化区块链数据库,必须在特征中实现initialize函数Service,例如,使用空向量进行初始化:

impl Service for MService {
//...
    fn initialize(&self, fork: &mut Fork) -> Value {
        let mut schema = MatrixSchema { view: fork };
        let matrix = AC::new(vec![]);
        // assume method ac() is implemented for the schema
        schema.ac().set(ac);        
        Value::Null
    }
}
于 2017-09-29T13:39:20.440 回答