Skip to content

Commit a9ce6e4

Browse files
Roasbeefguggero
authored andcommitted
contractcourt: split commit blob into settled vs breached
For the breach case, we'll have more than one output to sweep. So we'll need more than one blob to use.
1 parent 7f886ab commit a9ce6e4

File tree

3 files changed

+37
-14
lines changed

3 files changed

+37
-14
lines changed

contractcourt/briefcase.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1558,7 +1558,7 @@ func encodeTaprootAuxData(w io.Writer, c *ContractResolutions) error {
15581558
tapCase.CtrlBlocks.Val.CommitSweepCtrlBlock = commitSignDesc.ControlBlock
15591559

15601560
c.CommitResolution.ResolutionBlob.WhenSome(func(b []byte) {
1561-
tapCase.CommitBlob = tlv.SomeRecordT(
1561+
tapCase.SettledCommitBlob = tlv.SomeRecordT(
15621562
tlv.NewPrimitiveRecord[tlv.TlvType2](b),
15631563
)
15641564
})
@@ -1649,7 +1649,7 @@ func decodeTapRootAuxData(r io.Reader, c *ContractResolutions) error {
16491649
c.CommitResolution.SelfOutputSignDesc.ControlBlock =
16501650
tapCase.CtrlBlocks.Val.CommitSweepCtrlBlock
16511651

1652-
tapCase.CommitBlob.WhenSomeV(func(b []byte) {
1652+
tapCase.SettledCommitBlob.WhenSomeV(func(b []byte) {
16531653
c.CommitResolution.ResolutionBlob = fn.Some(b)
16541654
})
16551655
}

contractcourt/taproot_briefcase.go

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,16 @@ type taprootBriefcase struct {
3030
// revocation paths.
3131
TapTweaks tlv.RecordT[tlv.TlvType1, tapTweaks]
3232

33-
// CommitBlob is an optional record that contains an opaque blob that
34-
// may be used to properly sweep commitment outputs on a force close
35-
// transaction.
36-
CommitBlob tlv.OptionalRecordT[tlv.TlvType2, tlv.Blob]
33+
// SettledCommitBlob is an optional record that contains an opaque blob
34+
// that may be used to properly sweep commitment outputs on a force
35+
// close transaction.
36+
SettledCommitBlob tlv.OptionalRecordT[tlv.TlvType2, tlv.Blob]
37+
38+
// BreachCommitBlob is an optional record that contains an opaque blob
39+
// used to sweep a remote party's breached output.
40+
BreachedCommitBlob tlv.OptionalRecordT[tlv.TlvType3, tlv.Blob]
41+
42+
// TODO(roasbeef): htlc blobs
3743
}
3844

3945
// TODO(roasbeef): morph into new tlv record
@@ -53,9 +59,16 @@ func (t *taprootBriefcase) EncodeRecords() []tlv.Record {
5359
t.CtrlBlocks.Record(), t.TapTweaks.Record(),
5460
}
5561

56-
t.CommitBlob.WhenSome(func(r tlv.RecordT[tlv.TlvType2, tlv.Blob]) {
57-
records = append(records, r.Record())
58-
})
62+
t.SettledCommitBlob.WhenSome(
63+
func(r tlv.RecordT[tlv.TlvType2, tlv.Blob]) {
64+
records = append(records, r.Record())
65+
},
66+
)
67+
t.BreachedCommitBlob.WhenSome(
68+
func(r tlv.RecordT[tlv.TlvType3, tlv.Blob]) {
69+
records = append(records, r.Record())
70+
},
71+
)
5972

6073
return records
6174
}
@@ -79,8 +92,12 @@ func (t *taprootBriefcase) Encode(w io.Writer) error {
7992

8093
// Decode decodes the given reader into the target struct.
8194
func (t *taprootBriefcase) Decode(r io.Reader) error {
82-
commitBlob := t.CommitBlob.Zero()
83-
records := append(t.DecodeRecords(), commitBlob.Record())
95+
settledCommitBlob := t.SettledCommitBlob.Zero()
96+
breachedCommitBlob := t.BreachedCommitBlob.Zero()
97+
records := append(
98+
t.DecodeRecords(), settledCommitBlob.Record(),
99+
breachedCommitBlob.Record(),
100+
)
84101
stream, err := tlv.NewStream(records...)
85102
if err != nil {
86103
return err
@@ -91,8 +108,11 @@ func (t *taprootBriefcase) Decode(r io.Reader) error {
91108
return err
92109
}
93110

94-
if val, ok := typeMap[t.CommitBlob.TlvType()]; ok && val == nil {
95-
t.CommitBlob = tlv.SomeRecordT(commitBlob)
111+
if val, ok := typeMap[t.SettledCommitBlob.TlvType()]; ok && val == nil {
112+
t.SettledCommitBlob = tlv.SomeRecordT(settledCommitBlob)
113+
}
114+
if v, ok := typeMap[t.BreachedCommitBlob.TlvType()]; ok && v == nil {
115+
t.BreachedCommitBlob = tlv.SomeRecordT(breachedCommitBlob)
96116
}
97117

98118
return nil

contractcourt/taproot_briefcase_test.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,12 @@ func TestTaprootBriefcase(t *testing.T) {
8787
BreachedHtlcTweaks: randHtlcTweaks(t),
8888
BreachedSecondLevelHltcTweaks: randHtlcTweaks(t),
8989
}),
90-
CommitBlob: tlv.SomeRecordT(
90+
SettledCommitBlob: tlv.SomeRecordT(
9191
tlv.NewPrimitiveRecord[tlv.TlvType2](commitBlob[:]),
9292
),
93+
BreachedCommitBlob: tlv.SomeRecordT(
94+
tlv.NewPrimitiveRecord[tlv.TlvType3](commitBlob[:]),
95+
),
9396
}
9497

9598
var b bytes.Buffer

0 commit comments

Comments
 (0)