channeldb: include the output index within stored HTLC's

This commit is contained in:
Olaoluwa Osuntokun 2016-11-17 18:28:07 -08:00
parent 22074eb737
commit 81e65e00e5
No known key found for this signature in database
GPG Key ID: 9CC5B105D03521A2
2 changed files with 17 additions and 7 deletions

@ -409,13 +409,14 @@ type HTLC struct {
// must wait before reclaiming the funds in limbo. // must wait before reclaiming the funds in limbo.
RefundTimeout uint32 RefundTimeout uint32
// RevocationDelay is the relative timeout the party who broadcasts // RevocationDelay is the relative timeout the party who broadcasts the
// the commitment transaction must wait before being able to fully // commitment transaction must wait before being able to fully sweep
// sweep the funds on-chain in the case of a unilateral channel // the funds on-chain in the case of a unilateral channel closure.
// closure.
RevocationDelay uint32 RevocationDelay uint32
// TODO(roasbeef): add output index? // OutputIndex is the vout output index for this particular HTLC output
// on the commitment transaction.
OutputIndex uint16
} }
// Copy returns a full copy of the target HTLC. // Copy returns a full copy of the target HTLC.
@ -425,6 +426,7 @@ func (h *HTLC) Copy() HTLC {
Amt: h.Amt, Amt: h.Amt,
RefundTimeout: h.RefundTimeout, RefundTimeout: h.RefundTimeout,
RevocationDelay: h.RevocationDelay, RevocationDelay: h.RevocationDelay,
OutputIndex: h.OutputIndex,
} }
copy(clone.RHash[:], h.RHash[:]) copy(clone.RHash[:], h.RHash[:])
@ -1446,8 +1448,8 @@ func fetchChanDeliveryScripts(nodeChanBucket *bolt.Bucket, channel *OpenChannel)
// htlcDiskSize represents the number of btyes a serialized HTLC takes up on // htlcDiskSize represents the number of btyes a serialized HTLC takes up on
// disk. The size of an HTLC on disk is 49 bytes total: incoming (1) + amt (8) // disk. The size of an HTLC on disk is 49 bytes total: incoming (1) + amt (8)
// + rhash (32) + timeouts (8) // + rhash (32) + timeouts (8) + output index (2)
const htlcDiskSize = 1 + 8 + 32 + 4 + 4 const htlcDiskSize = 1 + 8 + 32 + 4 + 4 + 2
func serializeHTLC(w io.Writer, h *HTLC) error { func serializeHTLC(w io.Writer, h *HTLC) error {
var buf [htlcDiskSize]byte var buf [htlcDiskSize]byte
@ -1468,6 +1470,8 @@ func serializeHTLC(w io.Writer, h *HTLC) error {
n += 4 n += 4
byteOrder.PutUint32(buf[n:], h.RevocationDelay) byteOrder.PutUint32(buf[n:], h.RevocationDelay)
n += 4 n += 4
byteOrder.PutUint16(buf[n:], h.OutputIndex)
n += 2
if _, err := w.Write(buf[:]); err != nil { if _, err := w.Write(buf[:]); err != nil {
return err return err
@ -1509,6 +1513,11 @@ func deserializeHTLC(r io.Reader) (*HTLC, error) {
} }
h.RevocationDelay = byteOrder.Uint32(scratch[:]) h.RevocationDelay = byteOrder.Uint32(scratch[:])
if _, err := io.ReadFull(r, scratch[:2]); err != nil {
return nil, err
}
h.OutputIndex = byteOrder.Uint16(scratch[:])
return h, nil return h, nil
} }

@ -384,6 +384,7 @@ func TestChannelStateTransition(t *testing.T) {
RHash: key, RHash: key,
RefundTimeout: i, RefundTimeout: i,
RevocationDelay: i + 2, RevocationDelay: i + 2,
OutputIndex: uint16(i * 3),
} }
htlcs = append(htlcs, htlc) htlcs = append(htlcs, htlc)
} }