Skip to main content

ImportAccount

ImportAccount imports an account backed by an account extended public key. The master key fingerprint denotes the fingerprint of the root key corresponding to the account public key (also known as the key with derivation path m/). This may be required by some hardware wallets for proper identification and signing.

The address type can usually be inferred from the key's version, but may be required for certain keys to map them into the proper scope.

For BIP-0044 keys, an address type must be specified as we intend to not support importing BIP-0044 keys into the wallet using the legacy pay-to-pubkey-hash (P2PKH) scheme. A nested witness address type will force the standard BIP-0049 derivation scheme, while a witness address type will force the standard BIP-0084 derivation scheme.

For BIP-0049 keys, an address type must also be specified to make a distinction between the standard BIP-0049 address schema (nested witness pubkeys everywhere) and our own BIP-0049Plus address schema (nested pubkeys externally, witness pubkeys internally).

NOTE: Events (deposits/spends) for keys derived from an account will only be detected by lnd if they happen after the import. Rescans to detect past events will be supported later on.

Source: walletrpc/walletkit.proto

gRPC

rpc ImportAccount (ImportAccountRequest) returns (ImportAccountResponse);

REST

HTTP MethodPath
POST /v2/wallet/accounts/import

Code Samples

const fs = require('fs');
const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');

const GRPC_HOST = 'localhost:10009'
const MACAROON_PATH = 'LND_DIR/data/chain/bitcoin/regtest/admin.macaroon'
const TLS_PATH = 'LND_DIR/tls.cert'

const loaderOptions = {
keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true,
};
const packageDefinition = protoLoader.loadSync(['lightning.proto', 'walletrpc/walletkit.proto'], loaderOptions);
const walletrpc = grpc.loadPackageDefinition(packageDefinition).walletrpc;
process.env.GRPC_SSL_CIPHER_SUITES = 'HIGH+ECDSA';
const tlsCert = fs.readFileSync(TLS_PATH);
const sslCreds = grpc.credentials.createSsl(tlsCert);
const macaroon = fs.readFileSync(MACAROON_PATH).toString('hex');
const macaroonCreds = grpc.credentials.createFromMetadataGenerator(function(args, callback) {
let metadata = new grpc.Metadata();
metadata.add('macaroon', macaroon);
callback(null, metadata);
});
let creds = grpc.credentials.combineChannelCredentials(sslCreds, macaroonCreds);
let client = new walletrpc.WalletKit(GRPC_HOST, creds);
let request = {
name: <string>,
extended_public_key: <string>,
master_key_fingerprint: <bytes>,
address_type: <AddressType>,
dry_run: <bool>,
};
client.importAccount(request, function(err, response) {
console.log(response);
});
// Console output:
// {
// "account": <Account>,
// "dry_run_external_addrs": <string>,
// "dry_run_internal_addrs": <string>,
// }

Messages

walletrpc.ImportAccountRequest

Source: walletrpc/walletkit.proto

FieldgRPC TypeREST TypeREST Placement
name
stringstringbody
extended_public_key
stringstringbody
master_key_fingerprint
bytesstringbody
address_type
AddressTypestringbody
dry_run
boolbooleanbody

walletrpc.ImportAccountResponse

Source: walletrpc/walletkit.proto

FieldgRPC TypeREST Type
account
Accountobject
dry_run_external_addrs
string[]array
dry_run_internal_addrs
string[]array

Nested Messages

walletrpc.Account

FieldgRPC TypeREST Type
name
stringstring
address_type
AddressTypestring
extended_public_key
stringstring
master_key_fingerprint
bytesstring
derivation_path
stringstring
external_key_count
uint32integer
internal_key_count
uint32integer
watch_only
boolboolean

Enums

walletrpc.AddressType

NameNumber
UNKNOWN
0
WITNESS_PUBKEY_HASH
1
NESTED_WITNESS_PUBKEY_HASH
2
HYBRID_NESTED_WITNESS_PUBKEY_HASH
3
TAPROOT_PUBKEY
4