---
# System prepended metadata

title: Storage
tags: [Engeneering]

---

# Storage

###### tags: `Engeneering`

## State Tree

ユーザやオンチェーン上にあるステートを Verkle Tree で保存する。

次のような階層構造で分けて保存する。
- [ ] AssetStorageEOA
    - [ ] UserState
- [ ] AssetStorageContract
- [ ] CommonlySharedStorage

参考図:
```graphviz
digraph hierarchy {
                nodesep=1.0 // increases the separation between nodes

                node [color=Red,fontname=Courier,shape=box] //All nodes will this shape and colour
                edge [color=Blue, style=solid] //All the lines look like this

                Root->{AssetStorage_EOA AssetStorage_Contract CommonlySharedStorage}  [label = "key_storage"];
                AssetStorage_EOA -> {user1_root, user2_root, user3_root} [label = "key_user"]
                user1_root -> {value0, value1} [label = "key_hashed"]
                user2_root -> {value2, value3} [label = "key_hashed"]
                user3_root -> {value4} [label = "key_hashed"]
                AssetStorage_Contract -> {value5, value6} [label = "key_hashed_with_owner"]
                CommonlySharedStorage -> {value7, value8} [label = "key_hashed"]
                
                  
}
```

### User State
- [ ] StateTree
- [ ] StateDiffTree

## Gloabl State Diff Tree
全ての StateDiff を保存する SMT.
その StateDiff の実態と消費したか否かが入る。

## Ontime Address SMT
使用した onetime address を保存する SMT.

## Cotract Address Mapping

L2の資産をL1に引き出すときに、L2のコントラクトのアドレスからL1のコントラクトアドレスやL1ネイティブな資産家どうかを引けるようなMapping




