Skip to content

Commit f23f929

Browse files
Leo Weesegitbook-bot
authored andcommitted
GITBOOK-514: change request with no subject merged in GitBook
1 parent 53aa894 commit f23f929

File tree

18 files changed

+630
-713
lines changed

18 files changed

+630
-713
lines changed

SUMMARY.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,8 @@
136136
* [Get Started](lightning-network-tools/taproot-assets/get-tapd.md)
137137
* [First Steps](lightning-network-tools/taproot-assets/first-steps.md)
138138
* [Taproot Assets Channels](lightning-network-tools/taproot-assets/taproot-assets-channels.md)
139-
* [Asset Decimal Display](docs/taproot-assets/rfq-and-decimal-display.md)
139+
* [Asset Metadata](lightning-network-tools/taproot-assets/asset-metadata.md)
140+
* [Asset Decimal Display](lightning-network-tools/taproot-assets/decimal-display.md)
140141
* [Become an Edge Node](lightning-network-tools/taproot-assets/become-an-edge-node.md)
141142
* [RFQ](lightning-network-tools/taproot-assets/rfq.md)
142143
* [Collectibles](lightning-network-tools/taproot-assets/collectibles.md)

docs/lnd/key_import.md

Lines changed: 78 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,32 @@
1-
# Overview
2-
3-
This document serves as an introductory point for users interested in reducing
4-
their hot-wallet risks, allowing them to maintain on-chain funds outside of
5-
`lnd` but still be able to manage them within `lnd`. As of `v0.13.0-beta`, `lnd`
6-
is able to import BIP-0049 and BIP-0084 extended public keys either at the
7-
account path (`m/purpose'/coin_type'/account'`) or at the address index path
8-
(`m/purpose'/coin_type'/account'/change/address_index`) as watch-only through
1+
# Key Import
2+
3+
## Overview
4+
5+
This document serves as an introductory point for users interested in reducing\
6+
their hot-wallet risks, allowing them to maintain on-chain funds outside of`lnd` but still be able to manage them within `lnd`. As of `v0.13.0-beta`, `lnd`\
7+
is able to import BIP-0049 and BIP-0084 extended public keys either at the\
8+
account path (`m/purpose'/coin_type'/account'`) or at the address index path\
9+
(`m/purpose'/coin_type'/account'/change/address_index`) as watch-only through\
910
the `WalletKit` APIs.
1011

11-
Note that in order to follow the rest of this document and/or use the
12-
`WalletKit` APIs, users will need to obtain an `lnd` build compiled with the
13-
`walletrpc` tag. Our release builds already include this tag by default, so this
12+
Note that in order to follow the rest of this document and/or use the`WalletKit` APIs, users will need to obtain an `lnd` build compiled with the`walletrpc` tag. Our release builds already include this tag by default, so this\
1413
would only be necessary when compiling from source.
1514

16-
# `lnd`'s Default Wallet Accounts
15+
## `lnd`'s Default Wallet Accounts
1716

1817
Upon initializing `lnd`, a wallet is created with four default accounts:
1918

20-
* A custom BIP-0049 account (more on this later) to generate NP2WKH external
19+
* A custom BIP-0049 account (more on this later) to generate NP2WKH external\
2120
addresses.
2221
* A BIP-0084 account to generate P2WKH external and change addresses.
23-
* A catch-all BIP-0049 account where all imported BIP-0049 address keys (NP2WKH
22+
* A catch-all BIP-0049 account where all imported BIP-0049 address keys (NP2WKH\
2423
addresses) exist within.
25-
* A catch-all BIP-0084 account where all imported BIP-0049 address keys (P2WKH
24+
* A catch-all BIP-0084 account where all imported BIP-0049 address keys (P2WKH\
2625
addresses) exist within.
2726

28-
Prior to `v0.13.0-beta`, these accounts were abstracted away from users. As part
29-
of the key import feature, they are now exposed through the new `WalletKit` RPCs
30-
(`ListAccounts`, `ImportAccount`, `ImportPublicKey`) and the `lncli wallet
31-
accounts` command.
27+
Prior to `v0.13.0-beta`, these accounts were abstracted away from users. As part\
28+
of the key import feature, they are now exposed through the new `WalletKit` RPCs\
29+
(`ListAccounts`, `ImportAccount`, `ImportPublicKey`) and the `lncli wallet accounts` command.
3230

3331
```shell
3432
$ lncli wallet accounts
@@ -47,11 +45,10 @@ OPTIONS:
4745
--help, -h show help
4846
```
4947

50-
## Account Details
48+
### Account Details
5149

52-
Before interacting with the new set of APIs, users will want to become familiar
53-
with how wallet accounts are represented within `lnd`. The
54-
`WalletKit.ListAccounts` RPC or `lncli wallet accounts list` command can be used
50+
Before interacting with the new set of APIs, users will want to become familiar\
51+
with how wallet accounts are represented within `lnd`. The`WalletKit.ListAccounts` RPC or `lncli wallet accounts list` command can be used\
5552
to retrieve the details of accounts.
5653

5754
```shell
@@ -82,78 +79,77 @@ $ lncli wallet accounts list
8279
}
8380
```
8481

85-
There's a lot to unpack in the response above, so let's cover each account field
86-
in detail. As mentioned above, four default accounts should exist, though only
87-
two are shown in the output. The catch-all imported accounts are hidden by
82+
There's a lot to unpack in the response above, so let's cover each account field\
83+
in detail. As mentioned above, four default accounts should exist, though only\
84+
two are shown in the output. The catch-all imported accounts are hidden by\
8885
default until a key has been imported into them.
8986

90-
* `name`: Each account has a name it can be identified by. `lnd`'s default
91-
spendable accounts have the name "default". The default catch-all imported
87+
* `name`: Each account has a name it can be identified by. `lnd`'s default\
88+
spendable accounts have the name "default". The default catch-all imported\
9289
accounts have the name "imported".
93-
* `extended_public_key`: The BIP-0044 extended public key for the account. Any
94-
addresses generated for the account are derived from this key. Each key has a
95-
version prefix that identifies the chain and derivation scheme being used. At
90+
* `extended_public_key`: The BIP-0044 extended public key for the account. Any\
91+
addresses generated for the account are derived from this key. Each key has a\
92+
version prefix that identifies the chain and derivation scheme being used. At\
9693
the time of writing, `lnd` supports the following versions:
97-
* `xpub/tpub`: The commonly used version prefix originally intended for
98-
BIP-0032 mainnet/testnet extended keys. Since `lnd` does not support
99-
BIP-0032 extended keys, this version serves as a catch-all for the other
94+
* `xpub/tpub`: The commonly used version prefix originally intended for\
95+
BIP-0032 mainnet/testnet extended keys. Since `lnd` does not support\
96+
BIP-0032 extended keys, this version serves as a catch-all for the other\
10097
versions.
10198
* `ypub/upub`: The version prefix for BIP-0049 mainnet/testnet extended keys.
10299
* `zpub/vpub`: The version prefix for BIP-0084 mainnet/testnet extended keys.
103-
* `address_type`: The type of addresses the account can derive. There are three
100+
* `address_type`: The type of addresses the account can derive. There are three\
104101
supported address types:
105-
* `WITNESS_PUBKEY_HASH`: The standard derivation scheme for BIP-0084 with
102+
* `WITNESS_PUBKEY_HASH`: The standard derivation scheme for BIP-0084 with\
106103
P2WKH for external and change addresses.
107-
* `NESTED_WITNESS_PUBKEY_HASH`: The standard derivation scheme for BIP-0049
104+
* `NESTED_WITNESS_PUBKEY_HASH`: The standard derivation scheme for BIP-0049\
108105
with P2WKH for external and change addresses.
109-
* `HYBRID_NESTED_WITNESS_PUBKEY_HASH` A custom derivation scheme for BIP-0049
110-
used by `lnd` where NP2WKH is used for external addresses and P2WKH for
106+
* `HYBRID_NESTED_WITNESS_PUBKEY_HASH` A custom derivation scheme for BIP-0049\
107+
used by `lnd` where NP2WKH is used for external addresses and P2WKH for\
111108
change addresses.
112-
* `master_key_fingerprint`: The 4 byte fingerprint of the master key
113-
corresponding to the account. This is usually required by hardware
109+
* `master_key_fingerprint`: The 4 byte fingerprint of the master key\
110+
corresponding to the account. This is usually required by hardware\
114111
wallet/external signers to identify the proper signing key.
115-
* `derivation_path`: The BIP-0044 derivation path used on the master key to
112+
* `derivation_path`: The BIP-0044 derivation path used on the master key to\
116113
obtain the account key.
117114
* `external_key_count`: The number of external addresses generated.
118115
* `internal_key_count`: The number of change addresses generated.
119-
* `watch_only`: Whether the wallet has private key information for the account.
120-
`lnd`'s default wallet accounts always have private key information, so this
116+
* `watch_only`: Whether the wallet has private key information for the account.`lnd`'s default wallet accounts always have private key information, so this\
121117
value is `false`.
122118

123-
# Key Import
119+
## Key Import
124120

125-
An existing limitation to the key import APIs is that events (deposits/spends)
126-
for imported keys, including those derived from an imported account, will only
127-
be detected by lnd if they happen after the import. Rescans to detect past
121+
An existing limitation to the key import APIs is that events (deposits/spends)\
122+
for imported keys, including those derived from an imported account, will only\
123+
be detected by lnd if they happen after the import. Rescans to detect past\
128124
events are currently not supported, but will come at a later time.
129125

130-
## Account Key Import
126+
### Account Key Import
131127

132-
The `WalletKit.ImportAccount` RPC and `lncli wallet accounts import` command can
133-
be used to import an account. At the time of writing, importing an account has
128+
The `WalletKit.ImportAccount` RPC and `lncli wallet accounts import` command can\
129+
be used to import an account. At the time of writing, importing an account has\
134130
the following request parameters:
135131

136132
* `name` (required): A name to identify the imported account with.
137-
* `extended_public_key` (required): A public key that corresponds to a wallet account
138-
represented as an extended key. It must conform to a derivation path of the
133+
* `extended_public_key` (required): A public key that corresponds to a wallet account\
134+
represented as an extended key. It must conform to a derivation path of the\
139135
form `m/purpose'/coin_type'/account'`.
140-
* `master_key_fingerprint` (optional): The fingerprint of the root key (also
141-
known as the key with derivation path m/) from which the account public key
142-
was derived from. This may be required by some hardware wallets for proper
136+
* `master_key_fingerprint` (optional): The fingerprint of the root key (also\
137+
known as the key with derivation path m/) from which the account public key\
138+
was derived from. This may be required by some hardware wallets for proper\
143139
identification and signing.
144-
* `address_type` (optional): An address type is only required when the extended
145-
account public key has a legacy version (xpub, tpub, etc.), such that the
140+
* `address_type` (optional): An address type is only required when the extended\
141+
account public key has a legacy version (xpub, tpub, etc.), such that the\
146142
wallet cannot detect what address scheme it belongs to.
147-
* `dry_run` (optional): Whether a dry run should be attempted when importing the
148-
account. This serves as a way to confirm whether the account is being imported
149-
correctly by returning the first N addresses for the external and internal
150-
branches of the account. If these addresses match as expected, then it should
143+
* `dry_run` (optional): Whether a dry run should be attempted when importing the\
144+
account. This serves as a way to confirm whether the account is being imported\
145+
correctly by returning the first N addresses for the external and internal\
146+
branches of the account. If these addresses match as expected, then it should\
151147
be safe to import the account as is.
152148

153-
For the sake of simplicity, we'll present an example with two `lnd` nodes Alice
154-
and Bob, where Alice acts as a signer _only_, and Bob manages Alice's on-chain
155-
BIP-0084 account by crafting transactions and watching/spending addresses. Since
156-
Alice will only act as a signer, we'll want to import her BIP-0084 account into
149+
For the sake of simplicity, we'll present an example with two `lnd` nodes Alice\
150+
and Bob, where Alice acts as a signer _only_, and Bob manages Alice's on-chain\
151+
BIP-0084 account by crafting transactions and watching/spending addresses. Since\
152+
Alice will only act as a signer, we'll want to import her BIP-0084 account into\
157153
Bob's node, which will require knowledge of Alice's extended public key.
158154

159155
Alice's BIP-0084 extended public key can be obtained as follows.
@@ -182,10 +178,10 @@ Bob can then import the account with the following command:
182178
$ lncli-bob wallet accounts import vpub5Z9beF6NYCrHeDmKC38tM3xXMDFFSARa9sdHRPChEMGqtxiELfZB8hm6FwBpBvfPpX2HGG8edYVV9Wupe43PEJJhhfnz1egtQNNaDXyYExn alice
183179
```
184180

185-
Before Bob imports the account, they may want to confirm the account is being
186-
imported using the correct derivation scheme. This can be done with the dry run
187-
request parameter. When a dry run is done, the response will include the usual
188-
account details, as well as the first 5 external and change addresses, which can
181+
Before Bob imports the account, they may want to confirm the account is being\
182+
imported using the correct derivation scheme. This can be done with the dry run\
183+
request parameter. When a dry run is done, the response will include the usual\
184+
account details, as well as the first 5 external and change addresses, which can\
189185
be used to confirm they match with what the account owner expects.
190186

191187
```shell
@@ -218,7 +214,7 @@ $ lncli-bob wallet accounts import vpub5Z9beF6NYCrHeDmKC38tM3xXMDFFSARa9sdHRPChE
218214
}
219215
```
220216

221-
Once Bob has confirmed the correct account derivation scheme is being used, the
217+
Once Bob has confirmed the correct account derivation scheme is being used, the\
222218
account can be imported without the dry run parameter.
223219

224220
```shell
@@ -237,14 +233,14 @@ $ lncli-bob wallet accounts import vpub5Z9beF6NYCrHeDmKC38tM3xXMDFFSARa9sdHRPChE
237233
}
238234
```
239235

240-
### Generating Addresses from an Imported Account
236+
#### Generating Addresses from an Imported Account
241237

242-
External addresses from an imported account can be generated through the
243-
existing `Lightning.NewAddress` RPC and `lncli newaddress` command, as they now
244-
take an additional optional parameter to specify which account the address
238+
External addresses from an imported account can be generated through the\
239+
existing `Lightning.NewAddress` RPC and `lncli newaddress` command, as they now\
240+
take an additional optional parameter to specify which account the address\
245241
should be derived from.
246242

247-
Following the example above, Bob is able to generate an external address for an
243+
Following the example above, Bob is able to generate an external address for an\
248244
incoming deposit as follows:
249245

250246
```shell
@@ -254,15 +250,15 @@ $ lncli-bob newaddress p2wkh --account=alice
254250
}
255251
```
256252

257-
Change addresses cannot be generated on demand, they are generated automatically
253+
Change addresses cannot be generated on demand, they are generated automatically\
258254
when a transaction is crafted that requires a change output.
259255

260-
### Crafting Transactions through PSBTs from an Imported Account
256+
#### Crafting Transactions through PSBTs from an Imported Account
261257

262-
Assuming a deposit of 1 tBTC was made to the address above
263-
(`bcrt1q8zdjz2q92eh7jw9ah3upf2u9553226gq79el5l`), Bob should be able to craft a
264-
transaction spending their new UTXO. Since Bob is unable to sign the transaction
265-
themselves, they'll use PSBTs to craft the transaction, and provide it to Alice
258+
Assuming a deposit of 1 tBTC was made to the address above\
259+
(`bcrt1q8zdjz2q92eh7jw9ah3upf2u9553226gq79el5l`), Bob should be able to craft a\
260+
transaction spending their new UTXO. Since Bob is unable to sign the transaction\
261+
themselves, they'll use PSBTs to craft the transaction, and provide it to Alice\
266262
to sign.
267263

268264
```shell

0 commit comments

Comments
 (0)