• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

lightningnetwork / lnd / 15574102646

11 Jun 2025 01:44AM UTC coverage: 68.554% (+9.9%) from 58.637%
15574102646

Pull #9652

github

web-flow
Merge eb863e46a into 92a5d35cf
Pull Request #9652: lnwallet/chancloser: fix flake in TestRbfCloseClosingNegotiationLocal

11 of 12 new or added lines in 1 file covered. (91.67%)

7276 existing lines in 84 files now uncovered.

134508 of 196208 relevant lines covered (68.55%)

44569.29 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

95.0
/lnwire/msat.go
1
package lnwire
2

3
import (
4
        "fmt"
5
        "io"
6

7
        "github.com/btcsuite/btcd/btcutil"
8
        "github.com/lightningnetwork/lnd/tlv"
9
)
10

11
const (
12
        // mSatScale is a value that's used to scale satoshis to milli-satoshis, and
13
        // the other way around.
14
        mSatScale uint64 = 1000
15

16
        // MaxMilliSatoshi is the maximum number of msats that can be expressed
17
        // in this data type.
18
        MaxMilliSatoshi = ^MilliSatoshi(0)
19
)
20

21
// MilliSatoshi are the native unit of the Lightning Network. A milli-satoshi
22
// is simply 1/1000th of a satoshi. There are 1000 milli-satoshis in a single
23
// satoshi. Within the network, all HTLC payments are denominated in
24
// milli-satoshis. As milli-satoshis aren't deliverable on the native
25
// blockchain, before settling to broadcasting, the values are rounded down to
26
// the nearest satoshi.
27
type MilliSatoshi uint64
28

29
// NewMSatFromSatoshis creates a new MilliSatoshi instance from a target amount
30
// of satoshis.
31
func NewMSatFromSatoshis(sat btcutil.Amount) MilliSatoshi {
147,782✔
32
        return MilliSatoshi(uint64(sat) * mSatScale)
147,782✔
33
}
147,782✔
34

35
// ToBTC converts the target MilliSatoshi amount to its corresponding value
36
// when expressed in BTC.
37
func (m MilliSatoshi) ToBTC() float64 {
18✔
38
        sat := m.ToSatoshis()
18✔
39
        return sat.ToBTC()
18✔
40
}
18✔
41

42
// ToSatoshis converts the target MilliSatoshi amount to satoshis. Simply, this
43
// sheds a factor of 1000 from the mSAT amount in order to convert it to SAT.
44
func (m MilliSatoshi) ToSatoshis() btcutil.Amount {
495,594✔
45
        return btcutil.Amount(uint64(m) / mSatScale)
495,594✔
46
}
495,594✔
47

48
// String returns the string representation of the mSAT amount.
49
func (m MilliSatoshi) String() string {
42,042✔
50
        return fmt.Sprintf("%v mSAT", uint64(m))
42,042✔
51
}
42,042✔
52

53
// TODO(roasbeef): extend with arithmetic operations?
54

55
// Record returns a TLV record that can be used to encode/decode a MilliSatoshi
56
// to/from a TLV stream.
57
func (m *MilliSatoshi) Record() tlv.Record {
1,540✔
58
        msat := uint64(*m)
1,540✔
59

1,540✔
60
        return tlv.MakeDynamicRecord(
1,540✔
61
                0, m, tlv.SizeBigSize(&msat), encodeMilliSatoshis,
1,540✔
62
                decodeMilliSatoshis,
1,540✔
63
        )
1,540✔
64
}
1,540✔
65

66
func encodeMilliSatoshis(w io.Writer, val interface{}, buf *[8]byte) error {
620✔
67
        if v, ok := val.(*MilliSatoshi); ok {
1,240✔
68
                bigSize := uint64(*v)
620✔
69

620✔
70
                return tlv.EBigSize(w, &bigSize, buf)
620✔
71
        }
620✔
72

UNCOV
73
        return tlv.NewTypeForEncodingErr(val, "lnwire.MilliSatoshi")
×
74
}
75

76
func decodeMilliSatoshis(r io.Reader, val interface{}, buf *[8]byte,
77
        l uint64) error {
574✔
78

574✔
79
        if v, ok := val.(*MilliSatoshi); ok {
1,148✔
80
                var bigSize uint64
574✔
81
                err := tlv.DBigSize(r, &bigSize, buf, l)
574✔
82
                if err != nil {
576✔
83
                        return err
2✔
84
                }
2✔
85

86
                *v = MilliSatoshi(bigSize)
572✔
87

572✔
88
                return nil
572✔
89
        }
90

UNCOV
91
        return tlv.NewTypeForDecodingErr(val, "lnwire.MilliSatoshi", l, l)
×
92
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc