decred.org/dcrwallet/v3@v3.1.0/wallet/unstable.go (about) 1 // Copyright (c) 2016-2019 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 package wallet 6 7 import ( 8 "context" 9 10 "decred.org/dcrwallet/v3/errors" 11 "decred.org/dcrwallet/v3/wallet/udb" 12 "decred.org/dcrwallet/v3/wallet/walletdb" 13 "github.com/decred/dcrd/chaincfg/chainhash" 14 "github.com/decred/dcrd/txscript/v4/stdaddr" 15 ) 16 17 type unstableAPI struct { 18 w *Wallet 19 } 20 21 // UnstableAPI exposes additional unstable public APIs for a Wallet. These APIs 22 // may be changed or removed at any time. Currently this type exists to ease 23 // the transition (particularly for the legacy JSON-RPC server) from using 24 // exported manager packages to a unified wallet package that exposes all 25 // functionality by itself. New code should not be written using this API. 26 func UnstableAPI(w *Wallet) unstableAPI { return unstableAPI{w} } 27 28 // TxDetails calls udb.Store.TxDetails under a single database view transaction. 29 func (u unstableAPI) TxDetails(ctx context.Context, txHash *chainhash.Hash) (*udb.TxDetails, error) { 30 const op errors.Op = "wallet.TxDetails" 31 32 var details *udb.TxDetails 33 err := walletdb.View(ctx, u.w.db, func(dbtx walletdb.ReadTx) error { 34 txmgrNs := dbtx.ReadBucket(wtxmgrNamespaceKey) 35 var err error 36 details, err = u.w.txStore.TxDetails(txmgrNs, txHash) 37 return err 38 }) 39 if err != nil { 40 return nil, errors.E(op, err) 41 } 42 return details, nil 43 } 44 45 // RangeTransactions calls udb.Store.RangeTransactions under a single 46 // database view tranasction. 47 func (u unstableAPI) RangeTransactions(ctx context.Context, begin, end int32, f func([]udb.TxDetails) (bool, error)) error { 48 const op errors.Op = "wallet.RangeTransactions" 49 err := walletdb.View(ctx, u.w.db, func(dbtx walletdb.ReadTx) error { 50 txmgrNs := dbtx.ReadBucket(wtxmgrNamespaceKey) 51 return u.w.txStore.RangeTransactions(ctx, txmgrNs, begin, end, f) 52 }) 53 if err != nil { 54 return errors.E(op, err) 55 } 56 return nil 57 } 58 59 // UnspentMultisigCreditsForAddress calls 60 // udb.Store.UnspentMultisigCreditsForAddress under a single database view 61 // transaction. 62 func (u unstableAPI) UnspentMultisigCreditsForAddress(ctx context.Context, p2shAddr *stdaddr.AddressScriptHashV0) ([]*udb.MultisigCredit, error) { 63 const op errors.Op = "wallet.UnspentMultisigCreditsForAddress" 64 var multisigCredits []*udb.MultisigCredit 65 err := walletdb.View(ctx, u.w.db, func(tx walletdb.ReadTx) error { 66 var err error 67 multisigCredits, err = u.w.txStore.UnspentMultisigCreditsForAddress( 68 tx, p2shAddr) 69 return err 70 }) 71 if err != nil { 72 return nil, errors.E(op, err) 73 } 74 return multisigCredits, nil 75 }