github.com/decred/dcrlnd@v0.7.6/lnwallet/remotedcrwallet/driver.go (about)

     1  package remotedcrwallet
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/decred/dcrlnd/lnwallet"
     7  )
     8  
     9  const (
    10  	walletType = "remotedcrwallet"
    11  )
    12  
    13  var (
    14  	// We currently only support full chain sync (no spv), so hardcode
    15  	// the available backends.
    16  	availableBackends = []string{"dcrd", "spv"}
    17  )
    18  
    19  // createNewWallet creates a new instance of DcrWallet given the proper list of
    20  // initialization parameters. This function is the factory function required to
    21  // properly create an instance of the lnwallet.WalletDriver struct for
    22  // DcrWallet.
    23  func createNewWallet(args ...interface{}) (lnwallet.WalletController, error) {
    24  	if len(args) != 1 {
    25  		return nil, fmt.Errorf("incorrect number of arguments to .New(...), "+
    26  			"expected 1, instead passed %v", len(args))
    27  	}
    28  
    29  	config, ok := args[0].(*Config)
    30  	if !ok {
    31  		return nil, fmt.Errorf("first argument to remotedcrwallet.New " +
    32  			"is incorrect, expected a *remotedcrwallet.Config")
    33  	}
    34  
    35  	return New(*config)
    36  }
    37  
    38  // init registers a driver for the DcrWallet concrete implementation of the
    39  // lnwallet.WalletController interface.
    40  func init() {
    41  	// Register the driver.
    42  	driver := &lnwallet.WalletDriver{
    43  		WalletType: walletType,
    44  		New:        createNewWallet,
    45  		BackEnds:   func() []string { return availableBackends },
    46  	}
    47  
    48  	if err := lnwallet.RegisterWallet(driver); err != nil {
    49  		panic(fmt.Sprintf("failed to register wallet driver '%s': %v",
    50  			walletType, err))
    51  	}
    52  }