bwt-dev / bwt

A lightweight wallet indexer for Bitcoin, available as an Electrum RPC server and a modern HTTP REST API.
https://bwt.dev
MIT License
277 stars 26 forks source link

PSBT creation and funding #2

Open shesek opened 4 years ago

shesek commented 4 years ago

Pretty straightforward if it just delegated to bitcoind's walletcreatefundedpsbt, but that would mean using all the utxos available in the wallet without being able to restrict them to specific ones. Might be acceptable if the user sets up bwt to use a separate bitcoind wallet. Also see #3.

justinmoon commented 4 years ago

that would mean using all the utxos available in the wallet without being able to restrict them to specific ones

Bitcoin Core wouldn't be able to do automated coin selection on a subset of outputs in one watch-only wallet, but the first argument to walletcreatefundedpsbt allows caller to specify inputs themselves.

$ bitcoin-cli help walletcreatefundedpsbt
...
Arguments
1. inputs                             (json array, required) A json array of json objects
     [
       {                              (json object)
         "txid": "hex",               (string, required) The transaction id
         "vout": n,                   (numeric, required) The output number
         "sequence": n,               (numeric, required) The sequence number
       },
       ...
     ]
...

But you could support automated coin selection for individual bwt wallets if each pair of internal/external bwt wallets corresponded to one Bitcoin Core watch-only wallet.

shesek commented 4 years ago

the first argument to walletcreatefundedpsbt allows caller to specify inputs themselves.

Yes, I meant that in the context of the fund part. If bwt implemented coin selection on its own, it could use bitcoind to create the PSBT with a given set of inputs.

But you could support automated coin selection for individual bwt wallets if each pair of internal/external bwt wallets corresponded to one Bitcoin Core watch-only wallet.

This is something that I considered. A simpler but not as convenient way to achieve this is separate bwt instances, each configured to use a different bitcoind wallet.

But I'm not sure if bwt should rely on having a potentially large number of bitcoind wallets, its not really well suited if you have, say, hundreds or thousands of them (for example, if you track a separate xpub for every user's deposits). I think that it might be better to implement independent coin selection in bwt, which would also allow finer-grained selection like filtering by specific addresses.