|
| 1 | +package state |
| 2 | + |
| 3 | +import ( |
| 4 | + versa "github.com/bnb-chain/versioned-state-database" |
| 5 | + "github.com/ethereum/go-ethereum/core/types" |
| 6 | + "github.com/ethereum/go-ethereum/ethdb" |
| 7 | + "github.com/ethereum/go-ethereum/trie" |
| 8 | + "github.com/ethereum/go-ethereum/trie/trienode" |
| 9 | + "github.com/ethereum/go-ethereum/triedb" |
| 10 | +) |
| 11 | + |
| 12 | +// VersaDB is embed in state.cachingDB |
| 13 | +type VersaDB struct { |
| 14 | + db versa.DataBase |
| 15 | + handler versa.StateHandler |
| 16 | + rwhandler versa.StateHandler |
| 17 | + codeDB ethdb.KeyValueStore |
| 18 | +} |
| 19 | + |
| 20 | +func (v *VersaDB) OpenTrie(root common.Hash) (Trie, error) { |
| 21 | + // 1. open state, then set v.handler |
| 22 | + // 2. open root tree, then return |
| 23 | +} |
| 24 | + |
| 25 | +func (v *VersaDB) OpenStorageTrie(stateRoot common.Hash, address common.Address, root common.Hash, trie Trie) (Trie, error) { |
| 26 | + // 1. get storage tree hash and version, use v.handler from root tree |
| 27 | + // 2. use tree hash and version open sub tree in versadb. |
| 28 | +} |
| 29 | + |
| 30 | +func (v *VersaDB) CopyTrie(t Trie) Trie { |
| 31 | + // it used to prefetcher |
| 32 | + // 1. creaet S_RW state, set v.rwhandler, if have reuse the v.rwhandler |
| 33 | + // 2. then reopen tree to return |
| 34 | +} |
| 35 | + |
| 36 | +func (v *VersaDB) ContractCode(addr common.Address, codeHash common.Hash) ([]byte, error) { |
| 37 | + // 1. set to v.codeDB |
| 38 | +} |
| 39 | + |
| 40 | +func (v *VersaDB) ContractCodeSize(addr common.Address, codeHash common.Hash) (int, error) { |
| 41 | + // 1. get from v.codeDB |
| 42 | +} |
| 43 | + |
| 44 | +func (v *VersaDB) DiskDB() ethdb.KeyValueStore { |
| 45 | + // return nil, it only used to snapshot |
| 46 | +} |
| 47 | + |
| 48 | +func (v *VersaDB) TrieDB() *triedb.Database { |
| 49 | + // return nil, it used to snapsync |
| 50 | +} |
| 51 | + |
| 52 | +func (v *VersaDB) NoTries() bool { |
| 53 | + // return false, not support fastnode |
| 54 | +} |
| 55 | + |
| 56 | +// add method for versa, and for other dbs |
| 57 | +func (v *VersaDB) Flush() error { |
| 58 | + // return v.db.Flush(v.handler) |
| 59 | +} |
| 60 | + |
| 61 | +// add method for versa, and for other dbs |
| 62 | +func (v *VersaDB) CloseState() error { |
| 63 | + // call defer CloseState() in state.Commit |
| 64 | +} |
| 65 | + |
| 66 | +// add method for versa, and for other dbs |
| 67 | +func (v *VersaDB) Close() error { |
| 68 | + |
| 69 | +} |
| 70 | + |
| 71 | +// VersaTree used to NewState(root tree) and StateObject(subtree) |
| 72 | +type VersaTree struct { |
| 73 | + version int64 |
| 74 | + handler versa.TreeHandler |
| 75 | +} |
| 76 | + |
| 77 | +func (vt *VersaTree) GetKey([]byte) []byte {} |
| 78 | + |
| 79 | +func (vt *VersaTree) GetAccount(address common.Address) (*types.StateAccount, error) {} |
| 80 | + |
| 81 | +func (vt *VersaTree) GetStorage(addr common.Address, key []byte) ([]byte, error) {} |
| 82 | + |
| 83 | +func (vt *VersaTree) UpdateAccount(address common.Address, account *types.StateAccount) error {} |
| 84 | + |
| 85 | +func (vt *VersaTree) UpdateStorage(addr common.Address, key, value []byte) error {} |
| 86 | + |
| 87 | +func (vt *VersaTree) DeleteAccount(address common.Address) error {} |
| 88 | + |
| 89 | +func (vt *VersaTree) DeleteStorage(addr common.Address, key []byte) error {} |
| 90 | + |
| 91 | +func (vt *VersaTree) UpdateContractCode(address common.Address, codeHash common.Hash, code []byte) error { |
| 92 | +} |
| 93 | + |
| 94 | +func (vt *VersaTree) Hash() common.Hash {} |
| 95 | + |
| 96 | +func (vt *VersaTree) Commit(collectLeaf bool) (common.Hash, *trienode.NodeSet, error) {} |
| 97 | + |
| 98 | +func (vt *VersaTree) NodeIterator(startKey []byte) (trie.NodeIterator, error) { |
| 99 | + // 1. return nil, nil, not support, it used to dump cmd |
| 100 | +} |
| 101 | + |
| 102 | +func (vt *VersaTree) Prove(key []byte, proofDb ethdb.KeyValueWriter) error { |
| 103 | + // 1. return errors.New("not support on versadb "), not support, it used to snapshot |
| 104 | +} |
0 commit comments