github.com/bigzoro/my_simplechain@v0.0.0-20240315012955-8ad0a2a29bb9/cmd/modify/main.go (about) 1 package main 2 3 import ( 4 "flag" 5 "github.com/bigzoro/my_simplechain/common" 6 "github.com/bigzoro/my_simplechain/core/rawdb" 7 "github.com/bigzoro/my_simplechain/core/state" 8 ethdb "github.com/bigzoro/my_simplechain/ethdb/leveldb" 9 "log" 10 ) 11 12 func main() { 13 14 path := flag.String("path", "", "leveldb file") 15 stateRoot := flag.String("root", "", "state root") 16 acc := flag.String("acc", "", "account") 17 flag.Parse() 18 log.Printf("params: %v %v %v", *path, *stateRoot, *acc) 19 root := common.BytesToHash(common.FromHex(*stateRoot)) 20 21 db, err := ethdb.New(*path, 0, 0, "") 22 if err != nil { 23 log.Fatal("get ethDB failed " + err.Error()) 24 } 25 ethDB := rawdb.NewDatabase(db) 26 statedb, err := state.New(root, state.NewDatabase(ethDB)) 27 if err != nil { 28 log.Fatal("get statedb failed " + err.Error()) 29 } 30 account := common.HexToAddress(*acc) 31 log.Printf("balance: %v\n ", statedb.GetBalance(account)) 32 33 rs, err := db.Get(root.Bytes()) 34 if err != nil { 35 log.Fatal("get state root failed " + err.Error()) 36 } 37 log.Printf("get state root: %v", rs) 38 //it := db.NewIteratorWithPrefix(root.Bytes()) 39 //for { 40 // if !it.Next() { 41 // break 42 // } 43 // t.Log("key ", common.Bytes2Hex(it.Key()), "value ", common.Bytes2Hex(it.Value())) 44 //} 45 err = db.Delete(root.Bytes()) 46 if err != nil { 47 log.Fatal("delete failed " + err.Error()) 48 } 49 defer db.Close() 50 rs, err = db.Get(root.Bytes()) 51 if err != nil { 52 log.Fatal("after modify, get state root failed " + err.Error()) 53 } 54 log.Printf("after modify, get state root: %v", rs) 55 log.Println("dummy transaction exit") 56 }