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  }