跟踪 Exonum 中单个对象的变化
Tracking changes of a single object in Exonum
我在区块链上有一个 单个 对象,它会不时更新。我想跟踪这些变化。我如何描述这样的结构 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);
}
在 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]
}
}
要初始化区块链数据库,必须在 Service
特征中实现 initialize
函数,例如,用空向量初始化:
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
}
}
我在区块链上有一个 单个 对象,它会不时更新。我想跟踪这些变化。我如何描述这样的结构 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);
}
在 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]
}
}
要初始化区块链数据库,必须在 Service
特征中实现 initialize
函数,例如,用空向量初始化:
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
}
}