decred.org/dcrwallet/v3@v3.1.0/wallet/udb/testdata/v2.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  	"bytes"
    13  	"compress/gzip"
    14  	"encoding/hex"
    15  	"fmt"
    16  	"io"
    17  	"os"
    18  
    19  	"github.com/decred/dcrd/blockchain/stake"
    20  	"github.com/decred/dcrd/chaincfg"
    21  	"github.com/decred/dcrd/wire"
    22  	"github.com/decred/dcrutil"
    23  	"github.com/decred/dcrutil/hdkeychain"
    24  	_ "github.com/decred/dcrwallet/wallet/internal/bdb"
    25  	"github.com/decred/dcrwallet/wallet/udb"
    26  	"github.com/decred/dcrwallet/wallet/walletdb"
    27  	"github.com/decred/dcrwallet/walletseed"
    28  )
    29  
    30  const dbname = "v2.db"
    31  
    32  var (
    33  	pubPass  = []byte("public")
    34  	privPass = []byte("private")
    35  )
    36  
    37  var chainParams = &chaincfg.TestNet2Params
    38  
    39  // From testnet2 ticket 4516ef1d548f3284c1a27b3e706c4677392031df7071ad2022050af376837033
    40  const ticketPurchaseHex = "01000000024bf0a303a7e6d174833d9eb761815b61f8ba8c6fa8852a6bf51c703daefc0ef60400000000ffffffff4bf0a303a7e6d174833d9eb761815b61f8ba8c6fa8852a6bf51c703daefc0ef60500000000ffffffff056f78d37a00000000000018baa914ec97b165a5f028b50fb12ae717c5f6c1b9057b5f8700000000000000000000206a1e7f686bc0e548bbb92f487db6da070e43a34117288ed59100000000000058000000000000000000001abd76a914000000000000000000000000000000000000000088ac00000000000000000000206a1e9d8e8bdc618035be32a14ab752af2e331f9abf3651074a7a000000000058000000000000000000001abd76a914000000000000000000000000000000000000000088ac00000000ad480000028ed59100000000009c480000010000006b483045022100c240bdd6a656c20e9035b839fc91faae6c766772f76149adb91a1fdcf20faf9c02203d68038b83263293f864b173c8f3f00e4371b67bf36fb9ec9f5132bdf68d2858012102adc226dec4de09a18c5a522f8f00917fb6d4eb2361a105218ac3f87d802ae3d451074a7a000000009c480000010000006a47304402205af53185f2662a30a22014b0d19760c1bfde8ec8f065b19cacab6a7abcec76a202204a2614cfcb4db3fc1c86eb0b1ca577f9039ec6db29e9c44ddcca2fe6e3c8bd5d012102adc226dec4de09a18c5a522f8f00917fb6d4eb2361a105218ac3f87d802ae3d4"
    41  
    42  func main() {
    43  	err := setup()
    44  	if err != nil {
    45  		fmt.Fprintf(os.Stderr, "setup: %v\n", err)
    46  		os.Exit(1)
    47  	}
    48  	err = compress()
    49  	if err != nil {
    50  		fmt.Fprintf(os.Stderr, "compress: %v\n", err)
    51  		os.Exit(1)
    52  	}
    53  }
    54  
    55  func setup() error {
    56  	db, err := walletdb.Create("bdb", dbname)
    57  	if err != nil {
    58  		return err
    59  	}
    60  	defer db.Close()
    61  	seed, err := walletseed.GenerateRandomSeed(hdkeychain.RecommendedSeedLen)
    62  	if err != nil {
    63  		return err
    64  	}
    65  	err = udb.Initialize(db, chainParams, seed, pubPass, privPass, false)
    66  	if err != nil {
    67  		return err
    68  	}
    69  
    70  	_, _, smgr, err := udb.Open(db, chainParams, pubPass)
    71  	if err != nil {
    72  		return err
    73  	}
    74  
    75  	ticketPurchaseBytes, err := hex.DecodeString(ticketPurchaseHex)
    76  	if err != nil {
    77  		return err
    78  	}
    79  	var ticketPurchase wire.MsgTx
    80  	err = ticketPurchase.Deserialize(bytes.NewReader(ticketPurchaseBytes))
    81  	if err != nil {
    82  		return err
    83  	}
    84  
    85  	return walletdb.Update(db, func(tx walletdb.ReadWriteTx) error {
    86  		ns := tx.ReadWriteBucket([]byte("wstakemgr"))
    87  
    88  		vb := stake.VoteBits{
    89  			Bits:         1,
    90  			ExtendedBits: []byte{0, 0, 0, 4},
    91  		}
    92  		return smgr.InsertSStx(ns, dcrutil.NewTx(&ticketPurchase), vb)
    93  	})
    94  }
    95  
    96  func compress() error {
    97  	db, err := os.Open(dbname)
    98  	if err != nil {
    99  		return err
   100  	}
   101  	defer os.Remove(dbname)
   102  	defer db.Close()
   103  	dbgz, err := os.Create(dbname + ".gz")
   104  	if err != nil {
   105  		return err
   106  	}
   107  	defer dbgz.Close()
   108  	gz := gzip.NewWriter(dbgz)
   109  	_, err = io.Copy(gz, db)
   110  	if err != nil {
   111  		return err
   112  	}
   113  	return gz.Close()
   114  }