2018-10-25 05:31:07 +03:00
|
|
|
// +build walletrpc
|
|
|
|
|
|
|
|
package walletrpc
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"github.com/lightningnetwork/lnd/lnrpc"
|
|
|
|
)
|
|
|
|
|
|
|
|
// createNewSubServer is a helper method that will create the new WalletKit RPC
|
|
|
|
// sub server given the main config dispatcher method. If we're unable to find
|
|
|
|
// the config that is meant for us in the config dispatcher, then we'll exit
|
|
|
|
// with an error.
|
2021-01-29 17:49:48 +03:00
|
|
|
func createNewSubServer(configRegistry lnrpc.SubServerConfigDispatcher) (
|
|
|
|
*WalletKit, lnrpc.MacaroonPerms, error) {
|
|
|
|
|
2018-10-25 05:31:07 +03:00
|
|
|
// We'll attempt to look up the config that we expect, according to our
|
|
|
|
// subServerName name. If we can't find this, then we'll exit with an
|
|
|
|
// error, as we're unable to properly initialize ourselves without this
|
|
|
|
// config.
|
|
|
|
walletKitServerConf, ok := configRegistry.FetchConfig(subServerName)
|
|
|
|
if !ok {
|
|
|
|
return nil, nil, fmt.Errorf("unable to find config for "+
|
|
|
|
"subserver type %s", subServerName)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Now that we've found an object mapping to our service name, we'll
|
|
|
|
// ensure that it's the type we need.
|
|
|
|
config, ok := walletKitServerConf.(*Config)
|
|
|
|
if !ok {
|
|
|
|
return nil, nil, fmt.Errorf("wrong type of config for "+
|
|
|
|
"subserver %s, expected %T got %T", subServerName,
|
|
|
|
&Config{}, walletKitServerConf)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Before we try to make the new WalletKit service instance, we'll
|
|
|
|
// perform some sanity checks on the arguments to ensure that they're
|
|
|
|
// useable.
|
|
|
|
switch {
|
|
|
|
case config.MacService != nil && config.NetworkDir == "":
|
|
|
|
return nil, nil, fmt.Errorf("NetworkDir must be set to " +
|
|
|
|
"create WalletKit RPC server")
|
|
|
|
|
|
|
|
case config.FeeEstimator == nil:
|
|
|
|
return nil, nil, fmt.Errorf("FeeEstimator must be set to " +
|
|
|
|
"create WalletKit RPC server")
|
|
|
|
|
|
|
|
case config.Wallet == nil:
|
|
|
|
return nil, nil, fmt.Errorf("Wallet must be set to create " +
|
|
|
|
"WalletKit RPC server")
|
|
|
|
|
|
|
|
case config.KeyRing == nil:
|
|
|
|
return nil, nil, fmt.Errorf("KeyRing must be set to create " +
|
|
|
|
"WalletKit RPC server")
|
2019-08-22 03:24:07 +03:00
|
|
|
|
|
|
|
case config.Sweeper == nil:
|
|
|
|
return nil, nil, fmt.Errorf("Sweeper must be set to create " +
|
|
|
|
"WalletKit RPC server")
|
|
|
|
|
|
|
|
case config.Chain == nil:
|
|
|
|
return nil, nil, fmt.Errorf("Chain must be set to create " +
|
|
|
|
"WalletKit RPC server")
|
2018-10-25 05:31:07 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
return New(config)
|
|
|
|
}
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
subServer := &lnrpc.SubServerDriver{
|
|
|
|
SubServerName: subServerName,
|
2021-01-29 17:49:48 +03:00
|
|
|
NewGrpcHandler: func() lnrpc.GrpcHandler {
|
|
|
|
return &ServerShell{}
|
2018-10-25 05:31:07 +03:00
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
// If the build tag is active, then we'll register ourselves as a
|
|
|
|
// sub-RPC server within the global lnrpc package namespace.
|
|
|
|
if err := lnrpc.RegisterSubServer(subServer); err != nil {
|
|
|
|
panic(fmt.Sprintf("failed to register sub server driver '%s': %v",
|
|
|
|
subServerName, err))
|
|
|
|
}
|
|
|
|
}
|