f83d56c91f
In this commit, we modify lnwire.MilliSatoshi to be an unsigned integer. We do this as all values within the specification are meant to be unsigned unless otherwise specified. Our usage of signed integers to this date has caused some compatibility issues with the other implementations, so this is the first step to reconciling these compatibility issues.
46 lines
1.4 KiB
Go
46 lines
1.4 KiB
Go
package lnwire
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/roasbeef/btcutil"
|
|
)
|
|
|
|
// mSatScale is a value that's used to scale satoshis to milli-satoshis, and
|
|
// the other way around.
|
|
const mSatScale uint64 = 1000
|
|
|
|
// MilliSatoshi are the native unit of the Lightning Network. A milli-satoshi
|
|
// is simply 1/1000th of a satoshi. There are 1000 milli-satoshis in a single
|
|
// satoshi. Within the network, all HTLC payments are denominated in
|
|
// milli-satoshis. As milli-satoshis aren't deliverable on the native
|
|
// blockchain, before settling to broadcasting, the values are rounded down to
|
|
// the nearest satoshi.
|
|
type MilliSatoshi uint64
|
|
|
|
// NewMSatFromSatoshis creates a new MilliSatoshi instance from a target amount
|
|
// of satoshis.
|
|
func NewMSatFromSatoshis(sat btcutil.Amount) MilliSatoshi {
|
|
return MilliSatoshi(uint64(sat) * mSatScale)
|
|
}
|
|
|
|
// ToBTC converts the target MilliSatoshi amount to its corresponding value
|
|
// when expressed in BTC.
|
|
func (m MilliSatoshi) ToBTC() float64 {
|
|
sat := m.ToSatoshis()
|
|
return sat.ToBTC()
|
|
}
|
|
|
|
// ToSatoshis converts the target MilliSatoshi amount to satoshis. Simply, this
|
|
// sheds a factor of 1000 from the mSAT amount in order to convert it to SAT.
|
|
func (m MilliSatoshi) ToSatoshis() btcutil.Amount {
|
|
return btcutil.Amount(uint64(m) / mSatScale)
|
|
}
|
|
|
|
// String returns the string representation of the mSAT amount.
|
|
func (m MilliSatoshi) String() string {
|
|
return fmt.Sprintf("%v mSAT", uint64(m))
|
|
}
|
|
|
|
// TODO(roasbeef): extend with arithmetic operations?
|