Create a transaction from a wallet coins (UTXOs) with the bcoin library I have a multisig setup where the signing is done through external HSM's.
I am using Bcoin and its wallet to receive funds.
What I am trying to do is to create a transaction and sign it with the HSMs.
There are 2 approaches:


Manually create the transaction using MTX.
Use the wallet to create the transaction.


Method #1 solves my problem. The code is even shown here.
However, this method has a big drawback. It requires that I create the Coins. That means, I need to manually create the VOuts and VIns. Meaning that I need to get my UTXO set and choose the ones I need for the transaction. This is very tedious and error prone.

Method #2 solves this issue. When using the wallet, createTx() will create the transaction for you, choosing the VOuts and VIns from the UTXO set for that wallet. However, the problem with this approach is that createTX() signs the transaction. I do not want this as the signing needs to be done by other sources.

So, is there a way for me to get the raw transaction from a wallet without it signing?
MTX has the method toRaw() which gives the raw transaction. Is there any way I can get the wallet to create the transaction, or at least create the VOut/Vin sets?

Thank you.
createTX() doesn't sign the transaction. That is performed by sign() in wallet.js. If your private keys are offline anyway, what kind of unexpected behavior are you getting from createTX()? It wouldn't be able to sign without the keys...?

New functionality was also recently merged to return the MTX before the input scripts are templated (when the public keys are serialized and added to the witness): https://github.com/bcoin-org/bcoin/pull/557 I'm not sure if this helps out your use-case though.

You also might be interested in our own multisig wallet, bmultisig: https://github.com/bcoin-org/bmultisig

This application "plugs in" to the standard bcoin wallet (and full node) and offers hardware support like signing transactions from a Ledger device. Each counterparty of course can sign with their own hardware device at their own convenience.