decred.org/dcrdex@v1.0.3/client/db/bolt/testdata/v5gen/v5.db.gen.go (about) 1 // This code is available on the terms of the project LICENSE.md file, 2 // also available online at https://blueoakcouncil.org/license/1.0.0. 3 4 // This file should compiled from the commit the file was introduced, otherwise 5 // it may not compile due to API changes, or may not create the database with 6 // the correct old version. This file should not be updated for API changes. 7 8 package main 9 10 import ( 11 "compress/gzip" 12 "fmt" 13 "io" 14 "math/rand" 15 "os" 16 17 "decred.org/dcrdex/client/db" 18 "decred.org/dcrdex/client/db/bolt" 19 "decred.org/dcrdex/dex" 20 "decred.org/dcrdex/dex/order" 21 "decred.org/dcrdex/dex/order/test" 22 ) 23 24 const dbname = "v5.db" 25 26 func main() { 27 err := setup() 28 if err != nil { 29 fmt.Fprintf(os.Stderr, "setup: %v\n", err) 30 os.Exit(1) 31 } 32 err = compress() 33 if err != nil { 34 fmt.Fprintf(os.Stderr, "compress: %v\n", err) 35 os.Exit(1) 36 } 37 } 38 39 func setup() error { 40 db, err := bolt.NewDB(dbname, dex.StdOutLogger("db_TEST", dex.LevelOff)) 41 if err != nil { 42 return err 43 } 44 bdb, ok := db.(*bolt.BoltDB) 45 if !ok { 46 return fmt.Errorf("database is not a BoltDB") 47 } 48 defer bdb.DB.Close() 49 return mockData(db) 50 } 51 52 func mockData(tdb db.DB) error { 53 // Create matches and log IDs. 54 saveMatchAndLogID := func(desc string, modifyMatch func(*db.MetaMatch) bool) error { 55 match := &db.MetaMatch{ 56 UserMatch: &order.UserMatch{ 57 MatchID: test.RandomMatchID(), 58 Address: "adsf", // not a cancel order match by default 59 }, 60 MetaData: &db.MatchMetaData{ 61 DEX: "somedex.ltd", 62 Base: 42, 63 Quote: 0, 64 }, 65 } 66 active := modifyMatch(match) 67 if err := tdb.UpdateMatch(match); err != nil { 68 return err 69 } 70 // "matchID-String": active-Bool, // desc-String 71 fmt.Printf("\t%q: %t, // %s\n", match.MatchID.String(), active, desc) 72 return nil 73 } 74 75 // Active match, status < MatchComplete, not revoked, not refunded. 76 err := saveMatchAndLogID("status < MatchComplete, not revoked, not refunded", func(match *db.MetaMatch) bool { 77 match.Status = order.MatchStatus(rand.Intn(4)) 78 return true // active 79 }) 80 if err != nil { 81 return err 82 } 83 84 // Inactive match, status < MatchComplete, revoked but requires no further action. 85 err = saveMatchAndLogID("status < MatchComplete, revoked", func(match *db.MetaMatch) bool { 86 match.Status = order.MatchStatus(rand.Intn(4)) 87 match.MetaData.Proof.SelfRevoked = true 88 return false // retired 89 }) 90 if err != nil { 91 return err 92 } 93 94 // Active match, status == MakerSwapCast, revoked but requires maker auto-refund. 95 err = saveMatchAndLogID("status == MakerSwapCast, side Maker, revoked, requires refund", func(match *db.MetaMatch) bool { 96 match.Status = order.MakerSwapCast 97 match.Side = order.Maker 98 match.MetaData.Proof.ServerRevoked = true 99 // match.MetaData.Proof.RefundCoin = []byte{0} 100 return true // active 101 }) 102 if err != nil { 103 return err 104 } 105 106 // Inactive match, status == TakerSwapCast, revoked and refunded (requires no further action). 107 err = saveMatchAndLogID("status == TakerSwapCast, side Maker, revoked, refunded", func(match *db.MetaMatch) bool { 108 match.Status = order.TakerSwapCast 109 match.Side = order.Maker 110 match.MetaData.Proof.SelfRevoked = true 111 match.MetaData.Proof.RefundCoin = []byte{0} 112 return false // retired 113 }) 114 if err != nil { 115 return err 116 } 117 118 // Active match, status == MatchComplete, no RedeemSig. 119 err = saveMatchAndLogID("status == MatchComplete, no RedeemSig", func(match *db.MetaMatch) bool { 120 match.Status = order.MatchComplete 121 match.MetaData.Proof.Auth.InitSig = []byte{0} 122 return true // active 123 }) 124 if err != nil { 125 return err 126 } 127 128 // Inactive match, status == MatchComplete, RedeemSig set. 129 err = saveMatchAndLogID("status == MatchComplete, RedeemSig set", func(match *db.MetaMatch) bool { 130 match.Status = order.MatchComplete 131 match.MetaData.Proof.Auth.InitSig = []byte{0} // make sure it's RedeemSig that retires this one 132 match.MetaData.Proof.Auth.RedeemSig = []byte{1} 133 return false // retired 134 }) 135 if err != nil { 136 return err 137 } 138 139 // cancel order match 140 err = saveMatchAndLogID("cancel order match", func(match *db.MetaMatch) bool { 141 match.Status = order.MatchComplete 142 // match.MetaData.Proof.Auth.InitSig not set (cancel order match) 143 match.Address = "" // cancel order match 144 return false // retired 145 }) 146 if err != nil { 147 return err 148 } 149 150 return nil 151 } 152 153 func compress() error { 154 db, err := os.Open(dbname) 155 if err != nil { 156 return err 157 } 158 defer os.Remove(dbname) 159 defer db.Close() 160 dbgz, err := os.Create(dbname + ".gz") 161 if err != nil { 162 return err 163 } 164 defer dbgz.Close() 165 gz := gzip.NewWriter(dbgz) 166 _, err = io.Copy(gz, db) 167 if err != nil { 168 return err 169 } 170 return gz.Close() 171 }