-
Notifications
You must be signed in to change notification settings - Fork 111
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement PrevId[] UTXO selection for FundVirtualPSBT RPC method; valid for single PrevId at first #1172
base: main
Are you sure you want to change the base?
Implement PrevId[] UTXO selection for FundVirtualPSBT RPC method; valid for single PrevId at first #1172
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2049,9 +2049,31 @@ func (r *rpcServer) FundVirtualPsbt(ctx context.Context, | |
|
||
case req.GetRaw() != nil: | ||
raw := req.GetRaw() | ||
prevIDs := []asset.PrevID{} | ||
if len(raw.Inputs) > 0 { | ||
return nil, fmt.Errorf("template inputs not yet " + | ||
"supported") | ||
for _, input := range raw.Inputs { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can remove a whole level of indentation by removing the |
||
// Create a new chainhash.Hash and set its bytes | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: comments should always be full sentences and end with punctuation. |
||
var hash chainhash.Hash | ||
err := hash.SetBytes(input.Outpoint.Txid) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: Should use There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We should probably check that |
||
if err != nil { | ||
return nil, fmt.Errorf( | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: Multi-line calls to formatting function should follow the different form to more easily distinguish them from non-error/non-logging calls. See https://github.com/lightningnetwork/lnd/blob/master/docs/code_formatting_rules.md#exception-for-log-and-error-message-formatting. |
||
"invalid Txid length: %w", err, | ||
) | ||
} | ||
// Decode the input into an asset.PrevID | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: if a comment isn't at the beginning of a new block/indentation, we usually add an empty line before to give some breathing space. |
||
outpoint := wire.OutPoint{ | ||
Hash: hash, | ||
Index: input.Outpoint.OutputIndex, | ||
} | ||
prevID := asset.PrevID{ | ||
OutPoint: outpoint, | ||
ID: asset.ID(input.Id), | ||
ScriptKey: asset.SerializedKey( | ||
input.ScriptKey, | ||
), | ||
} | ||
prevIDs = append(prevIDs, prevID) | ||
} | ||
} | ||
if len(raw.Recipients) > 1 { | ||
return nil, fmt.Errorf("only one recipient supported") | ||
|
@@ -2074,7 +2096,7 @@ func (r *rpcServer) FundVirtualPsbt(ctx context.Context, | |
} | ||
|
||
fundedVPkt, err = r.cfg.AssetWallet.FundAddressSend( | ||
ctx, coinSelectType, addr, | ||
ctx, coinSelectType, prevIDs, addr, | ||
) | ||
if err != nil { | ||
return nil, fmt.Errorf("error funding address send: "+ | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -35,6 +35,9 @@ type CommitmentConstraints struct { | |
// to satisfy the constraints. | ||
MinAmt uint64 | ||
|
||
// PrevIDs are the set of inputs allowed to be used | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: missing full stop. |
||
PrevIDs []asset.PrevID | ||
|
||
// CoinSelectType is the type of coins that should be selected. | ||
CoinSelectType tapsend.CoinSelectType | ||
} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -69,6 +69,7 @@ type Wallet interface { | |
// selected assets. | ||
FundAddressSend(ctx context.Context, | ||
coinSelectType tapsend.CoinSelectType, | ||
prevIDs []asset.PrevID, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: seems to fit on previous line, here and below. |
||
receiverAddrs ...*address.Tap) (*FundedVPacket, error) | ||
|
||
// FundPacket funds a virtual transaction, selecting assets to spend | ||
|
@@ -236,6 +237,7 @@ type FundedVPacket struct { | |
// NOTE: This is part of the Wallet interface. | ||
func (f *AssetWallet) FundAddressSend(ctx context.Context, | ||
coinSelectType tapsend.CoinSelectType, | ||
prevIDs []asset.PrevID, | ||
receiverAddrs ...*address.Tap) (*FundedVPacket, error) { | ||
|
||
// We start by creating a new virtual transaction that will be used to | ||
|
@@ -253,6 +255,11 @@ func (f *AssetWallet) FundAddressSend(ctx context.Context, | |
return nil, fmt.Errorf("unable to describe recipients: %w", err) | ||
} | ||
|
||
// We need to constrain the prevIDs if they are provided. | ||
if len(prevIDs) > 0 { | ||
fundDesc.PrevIDs = prevIDs | ||
} | ||
|
||
fundDesc.CoinSelectType = coinSelectType | ||
fundedVPkt, err := f.FundPacket(ctx, fundDesc, vPkt) | ||
if err != nil { | ||
|
@@ -371,6 +378,7 @@ func (f *AssetWallet) FundPacket(ctx context.Context, | |
AssetSpecifier: fundDesc.AssetSpecifier, | ||
MinAmt: fundDesc.Amount, | ||
CoinSelectType: fundDesc.CoinSelectType, | ||
PrevIDs: fundDesc.PrevIDs, | ||
} | ||
|
||
anchorVersion, err := tappsbt.CommitmentVersion(vPkt.Version) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit:
var prevIDs []asset.PrevID
style is preferred over empty slice initialization.