decred.org/dcrwallet/v3@v3.1.0/wallet/udb/testdata/v4.db.go (about)

     1  // Copyright (c) 2017 The Decred developers
     2  // Use of this source code is governed by an ISC
     3  // license that can be found in the LICENSE file.
     4  
     5  // This file should compiled from the commit the file was introduced, otherwise
     6  // it may not compile due to API changes, or may not create the database with
     7  // the correct old version.  This file should not be updated for API changes.
     8  
     9  package main
    10  
    11  import (
    12  	"compress/gzip"
    13  	"fmt"
    14  	"io"
    15  	"os"
    16  
    17  	"github.com/decred/dcrd/chaincfg"
    18  	"github.com/decred/dcrutil/hdkeychain"
    19  	_ "github.com/decred/dcrwallet/wallet/internal/bdb"
    20  	"github.com/decred/dcrwallet/wallet/udb"
    21  	"github.com/decred/dcrwallet/wallet/walletdb"
    22  	"github.com/decred/dcrwallet/walletseed"
    23  )
    24  
    25  const dbname = "v4.db"
    26  
    27  var (
    28  	pubPass  = []byte("public")
    29  	privPass = []byte("private")
    30  )
    31  
    32  var chainParams = &chaincfg.TestNet2Params
    33  
    34  func main() {
    35  	err := setup()
    36  	if err != nil {
    37  		fmt.Fprintf(os.Stderr, "setup: %v\n", err)
    38  		os.Exit(1)
    39  	}
    40  	err = compress()
    41  	if err != nil {
    42  		fmt.Fprintf(os.Stderr, "compress: %v\n", err)
    43  		os.Exit(1)
    44  	}
    45  }
    46  
    47  func setup() error {
    48  	db, err := walletdb.Create("bdb", dbname)
    49  	if err != nil {
    50  		return err
    51  	}
    52  	defer db.Close()
    53  	seed, err := walletseed.GenerateRandomSeed(hdkeychain.RecommendedSeedLen)
    54  	if err != nil {
    55  		return err
    56  	}
    57  	err = udb.Initialize(db, chainParams, seed, pubPass, privPass)
    58  	if err != nil {
    59  		return err
    60  	}
    61  
    62  	amgr, _, _, err := udb.Open(db, chainParams, pubPass)
    63  	if err != nil {
    64  		return err
    65  	}
    66  
    67  	return walletdb.Update(db, func(tx walletdb.ReadWriteTx) error {
    68  		ns := tx.ReadWriteBucket([]byte("waddrmgr"))
    69  
    70  		err := amgr.Unlock(ns, privPass)
    71  		if err != nil {
    72  			return err
    73  		}
    74  
    75  		data := []struct {
    76  			lastUsedExtChild uint32
    77  			lastUsedIntChild uint32
    78  		}{
    79  			{0, 0},
    80  			{9, 9},
    81  			{5, 15},
    82  			{19, 20},
    83  			{20, 19},
    84  			{29, 30},
    85  			{30, 29},
    86  			{1<<31 - 1, 1<<31 - 1},
    87  		}
    88  		for i := range data {
    89  			acct := uint32(i + 1)
    90  			_, err := amgr.NewAccount(ns, fmt.Sprintf("account-%d", acct))
    91  			if err != nil {
    92  				return err
    93  			}
    94  			err = amgr.MarkUsedChildIndex(tx, acct, 0, data[i].lastUsedExtChild)
    95  			if err != nil {
    96  				return err
    97  			}
    98  			err = amgr.MarkUsedChildIndex(tx, acct, 1, data[i].lastUsedIntChild)
    99  			if err != nil {
   100  				return err
   101  			}
   102  		}
   103  		return nil
   104  	})
   105  }
   106  
   107  func compress() error {
   108  	db, err := os.Open(dbname)
   109  	if err != nil {
   110  		return err
   111  	}
   112  	defer os.Remove(dbname)
   113  	defer db.Close()
   114  	dbgz, err := os.Create(dbname + ".gz")
   115  	if err != nil {
   116  		return err
   117  	}
   118  	defer dbgz.Close()
   119  	gz := gzip.NewWriter(dbgz)
   120  	_, err = io.Copy(gz, db)
   121  	if err != nil {
   122  		return err
   123  	}
   124  	return gz.Close()
   125  }