Skip to content

Commit 2d731e5

Browse files
committed
multi: transport proof courier address in VOutput
Since we now have a field to store the proof courier delivery address URL in within the VOutput, we no longer need to carry along extra state in the freighter.
1 parent e687ac7 commit 2d731e5

File tree

7 files changed

+23
-46
lines changed

7 files changed

+23
-46
lines changed

rpcserver.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1720,9 +1720,7 @@ func (r *rpcServer) FundVirtualPsbt(ctx context.Context,
17201720
return nil, fmt.Errorf("no recipients specified")
17211721
}
17221722

1723-
fundedVPkt, _, err = r.cfg.AssetWallet.FundAddressSend(
1724-
ctx, addr,
1725-
)
1723+
fundedVPkt, err = r.cfg.AssetWallet.FundAddressSend(ctx, addr)
17261724
if err != nil {
17271725
return nil, fmt.Errorf("error funding address send: "+
17281726
"%w", err)

tapfreighter/chain_porter.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -864,18 +864,16 @@ func (p *ChainPorter) stateStep(currentPkg sendPackage) (*sendPackage, error) {
864864
return nil, fmt.Errorf("unable to cast parcel to " +
865865
"address parcel")
866866
}
867-
fundSendRes, outputIdxToAddr, err :=
868-
p.cfg.AssetWallet.FundAddressSend(
869-
ctx, addrParcel.destAddrs...,
870-
)
867+
fundSendRes, err := p.cfg.AssetWallet.FundAddressSend(
868+
ctx, addrParcel.destAddrs...,
869+
)
871870
if err != nil {
872871
return nil, fmt.Errorf("unable to fund address send: "+
873872
"%w", err)
874873
}
875874

876875
currentPkg.VirtualPacket = fundSendRes.VPacket
877876
currentPkg.InputCommitments = fundSendRes.InputCommitments
878-
currentPkg.OutputIdxToAddr = outputIdxToAddr
879877

880878
currentPkg.SendState = SendStateVirtualSign
881879

tapfreighter/parcel.go

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -300,10 +300,6 @@ type sendPackage struct {
300300
// virtual asset transition transaction.
301301
VirtualPacket *tappsbt.VPacket
302302

303-
// OutputIdxToAddr is a map from a VPacket's VOutput index to its
304-
// associated Tap address.
305-
OutputIdxToAddr tappsbt.OutputIdxToAddr
306-
307303
// InputCommitments is a map from virtual package input index to its
308304
// associated Taproot Asset commitment.
309305
InputCommitments tappsbt.InputCommitments
@@ -408,12 +404,10 @@ func (s *sendPackage) prepareForStorage(currentHeight uint32) (*OutboundParcel,
408404
// Convert any proof courier address associated with this output
409405
// to bytes for db storage.
410406
var proofCourierAddrBytes []byte
411-
if s.OutputIdxToAddr != nil {
412-
if addr, ok := s.OutputIdxToAddr[idx]; ok {
413-
proofCourierAddrBytes = []byte(
414-
addr.ProofCourierAddr.String(),
415-
)
416-
}
407+
if vOut.ProofDeliveryAddress != nil {
408+
proofCourierAddrBytes = []byte(
409+
vOut.ProofDeliveryAddress.String(),
410+
)
417411
}
418412

419413
anchorInternalKey := keychain.KeyDescriptor{

tapfreighter/wallet.go

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,7 @@ type Wallet interface {
101101
// asset re-anchors and the Taproot Asset level commitment of the
102102
// selected assets.
103103
FundAddressSend(ctx context.Context,
104-
receiverAddrs ...*address.Tap) (*FundedVPacket,
105-
tappsbt.OutputIdxToAddr, error)
104+
receiverAddrs ...*address.Tap) (*FundedVPacket, error)
106105

107106
// FundPacket funds a virtual transaction, selecting assets to spend
108107
// in order to pay the given recipient. The selected input is then added
@@ -429,31 +428,29 @@ type FundedVPacket struct {
429428
//
430429
// NOTE: This is part of the Wallet interface.
431430
func (f *AssetWallet) FundAddressSend(ctx context.Context,
432-
receiverAddrs ...*address.Tap) (*FundedVPacket,
433-
tappsbt.OutputIdxToAddr, error) {
431+
receiverAddrs ...*address.Tap) (*FundedVPacket, error) {
434432

435433
// We start by creating a new virtual transaction that will be used to
436434
// hold the asset transfer. Because sending to an address is always a
437435
// non-interactive process, we can use this function that always creates
438436
// a change output.
439-
vPkt, outputIdxToAddr, err := tappsbt.FromAddresses(receiverAddrs, 1)
437+
vPkt, err := tappsbt.FromAddresses(receiverAddrs, 1)
440438
if err != nil {
441-
return nil, nil, fmt.Errorf("unable to create virtual "+
442-
"transaction from addresses: %w", err)
439+
return nil, fmt.Errorf("unable to create virtual transaction "+
440+
"from addresses: %w", err)
443441
}
444442

445443
fundDesc, err := tapsend.DescribeAddrs(receiverAddrs)
446444
if err != nil {
447-
return nil, nil, fmt.Errorf("unable to describe recipients: "+
448-
"%w", err)
445+
return nil, fmt.Errorf("unable to describe recipients: %w", err)
449446
}
450447

451448
fundedVPkt, err := f.FundPacket(ctx, fundDesc, vPkt)
452449
if err != nil {
453-
return nil, nil, err
450+
return nil, err
454451
}
455452

456-
return fundedVPkt, outputIdxToAddr, nil
453+
return fundedVPkt, nil
457454
}
458455

459456
// passiveAssetVPacket creates a virtual packet for the given passive asset.

tappsbt/address.go

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,16 @@ import (
99
"github.com/lightningnetwork/lnd/keychain"
1010
)
1111

12-
// OutputIdxToAddr is a map from a VPacket's VOutput index to its associated
13-
// Tap address.
14-
type OutputIdxToAddr map[int]address.Tap
15-
1612
// FromAddresses creates an empty virtual transaction packet from the given
1713
// addresses. Because sending to an address is always non-interactive, a change
1814
// output is also added to the packet.
1915
func FromAddresses(receiverAddrs []*address.Tap,
20-
firstOutputIndex uint32) (*VPacket, OutputIdxToAddr, error) {
16+
firstOutputIndex uint32) (*VPacket, error) {
2117

2218
// We need at least one address to send to. Any special cases or
2319
// interactive sends should go through the FundPacket method.
2420
if len(receiverAddrs) < 1 {
25-
return nil, nil, fmt.Errorf("at least one address must be" +
26-
"specified")
21+
return nil, fmt.Errorf("at least one address must be specified")
2722
}
2823

2924
firstAddr := receiverAddrs[0]
@@ -51,9 +46,6 @@ func FromAddresses(receiverAddrs []*address.Tap,
5146
ScriptKey: asset.NUMSScriptKey,
5247
})
5348

54-
// Map from output index to address.
55-
outputIdxToAddr := make(OutputIdxToAddr, len(receiverAddrs))
56-
5749
// We start at output index 1 because we also have the change output
5850
// above. We also just use continuous integers for the anchor output
5951
// index, but start at the first one indicated by the caller.
@@ -70,13 +62,11 @@ func FromAddresses(receiverAddrs []*address.Tap,
7062
),
7163
AnchorOutputInternalKey: &addr.InternalKey,
7264
AnchorOutputTapscriptSibling: addr.TapscriptSibling,
65+
ProofDeliveryAddress: &addr.ProofCourierAddr,
7366
})
74-
75-
outputIndex := len(pkt.Outputs) - 1
76-
outputIdxToAddr[outputIndex] = *addr
7767
}
7868

79-
return pkt, outputIdxToAddr, nil
69+
return pkt, nil
8070
}
8171

8272
// ForInteractiveSend creates a virtual transaction packet for sending an output

tappsbt/decode_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func TestEncodingDecoding(t *testing.T) {
102102
t, testParams, proofCourierAddr,
103103
)
104104

105-
pkg, _, err := FromAddresses([]*address.Tap{addr.Tap}, 1)
105+
pkg, err := FromAddresses([]*address.Tap{addr.Tap}, 1)
106106
require.NoError(t, err)
107107
pkg.Outputs = append(pkg.Outputs, &VOutput{
108108
ScriptKey: asset.RandScriptKey(t),

tappsbt/testdata/psbt_encoding_generated.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
"tr_bip32_derivation": null,
6666
"tr_internal_key": "",
6767
"tr_merkle_root": "",
68-
"proof_delivery_address": "",
68+
"proof_delivery_address": "hashmail://rand.hashmail.proof.courier:443",
6969
"proof_suffix": null
7070
},
7171
{
@@ -92,7 +92,7 @@
9292
"version": 0,
9393
"chain_params_hrp": "tapbc"
9494
},
95-
"expected": "cHNidP8BALQCAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAIlEgfHm5sm5GOJXu9WedhViULIbErSIzre8BvD5tVAs2U/6KW98sf8SEJSJRIEWKkswS0BuOiJLaWO1RHTmPLOQrTWKVzwxmNGJJ9NMGAAAAAAAAAAAiUSB9C3k0Adq3BnbS7ep7gw/kIN1LWDnu/dgQL1ASrchGsgAAAAABcAEBAXEFdGFwYmMBcgEAAAFwZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJOqeF1Iw+Cgx/gsg8LxV4U1HJPW5d2R4lHreXkAZ/RrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXEIAAAAAAAAAAABcgABcwgAAAAAAAAAAAF1AAF4AAABcAEBAXEBAAFyCAAAAAAAAAAAAXkBAAABcAEAAXEBAAFyCAAAAAAAAAABAXMhAxJmhdoJ0WE1iBypdiKVpag5mwvWbqpYY6DXUS7uwWL+AXgVAMASbm90IGEgdmFsaWQgc2NyaXB0AXkBAAABcAEAAXEBAAFyCAAAAAAAAAAAAXkBAAA=",
95+
"expected": "cHNidP8BALQCAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAIlEgfHm5sm5GOJXu9WedhViULIbErSIzre8BvD5tVAs2U/6KW98sf8SEJSJRIEWKkswS0BuOiJLaWO1RHTmPLOQrTWKVzwxmNGJJ9NMGAAAAAAAAAAAiUSB9C3k0Adq3BnbS7ep7gw/kIN1LWDnu/dgQL1ASrchGsgAAAAABcAEBAXEFdGFwYmMBcgEAAAFwZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJOqeF1Iw+Cgx/gsg8LxV4U1HJPW5d2R4lHreXkAZ/RrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXEIAAAAAAAAAAABcgABcwgAAAAAAAAAAAF1AAF4AAABcAEBAXEBAAFyCAAAAAAAAAAAAXkBAAABcAEAAXEBAAFyCAAAAAAAAAABAXMhAxJmhdoJ0WE1iBypdiKVpag5mwvWbqpYY6DXUS7uwWL+AXgVAMASbm90IGEgdmFsaWQgc2NyaXB0AXkBAAF6Kmhhc2htYWlsOi8vcmFuZC5oYXNobWFpbC5wcm9vZi5jb3VyaWVyOjQ0MwABcAEAAXEBAAFyCAAAAAAAAAAAAXkBAAA=",
9696
"comment": "minimal packet"
9797
},
9898
{

0 commit comments

Comments
 (0)