Expand description
Suppose we have the following data structure in a smart contract:
struct B {
Map<String, String> mymap;
}
struct A {
B b;
int my_int;
}
struct C {
List<int> mylist;
}A a; C c;
and the data belongs to Alice. Then an access to a.b.mymap would be
translated to an access to an entry in key-value store whose key is
<Alice>/a/b/mymap. In the same way, the access to c.mylist would need to
query <Alice>/c/mylist.
So an account stores its data in a directory structure, for example:
<Alice>/balance: 10
<Alice>/a/b/mymap: {"Bob" => "abcd", "Carol" => "efgh"}
<Alice>/a/myint: 20
<Alice>/c/mylist: [3, 5, 7, 9]If someone needs to query the map above and find out what value associated
with “Bob” is, address will be set to Alice and path will be set to
“/a/b/mymap/Bob”.
On the other hand, if you want to query only <Alice>/a/*, address will
be set to Alice and path will be set to “/a” and use the get_prefix()
method from statedb