lnwallet: payment and revocation hashes are now 32 bytes

This unifies some inconstancies across the code-base with hashes being
32 vs 20 bytes. All hashes, whether payment or revocation are now
uniformly 32 bytes everywhere. As a result, only OP_SHA256 will be used
within commitment and HTLC scripts. The rationale for using sha256
instead of hash160 for the HTLC payment pre-image is that alternative
chains are more likely to have sha256 implemented, rather than
ripemd160.

A forthcoming commit will update the current commitment, and HTLC
scripts.
This commit is contained in:
Olaoluwa Osuntokun 2016-06-26 23:03:26 -07:00
parent 1a48db3039
commit 05fb9b5a6d
No known key found for this signature in database
GPG Key ID: 9CC5B105D03521A2
3 changed files with 11 additions and 11 deletions

@ -58,7 +58,7 @@ const (
// PaymentHash presents the hash160 of a random value. This hash is used to
// uniquely track incoming/outgoing payments within this channel, as well as
// payments requested by the wallet/daemon.
type PaymentHash [20]byte
type PaymentHash [32]byte
// LightningChannel...
// TODO(roasbeef): future peer struct should embed this struct
@ -130,12 +130,12 @@ func NewLightningChannel(wallet *LightningWallet, events chainntnfs.ChainNotifie
// PaymentDescriptor...
type PaymentDescriptor struct {
RHash [20]byte
RHash [32]byte
Timeout uint32
Value btcutil.Amount
OurRevocation [20]byte // TODO(roasbeef): don't need these?
TheirRevocation [20]byte
OurRevocation [32]byte // TODO(roasbeef): don't need these?
TheirRevocation [32]byte
PayToUs bool
}
@ -151,7 +151,7 @@ type ChannelUpdate struct {
ourPendingCommitTx *wire.MsgTx
theirPendingCommitTx *wire.MsgTx
pendingRevocation [20]byte
pendingRevocation [32]byte
sigTheirNewCommit []byte
// TODO(roasbeef): some enum to track current state in lifetime?
@ -171,7 +171,7 @@ func (c *ChannelUpdate) RevocationHash() ([]byte, error) {
return nil, err
}
return btcutil.Hash160(nextPreimage[:]), nil
return nextPreimage[:], nil
}
// SignCounterPartyCommitment...
@ -458,7 +458,7 @@ func (lc *LightningChannel) addHTLC(ourCommitTx, theirCommitTx *wire.MsgTx,
// SettleHTLC...
// R-VALUE, NEW REVOKE HASH
// accept, sig
func (lc *LightningChannel) SettleHTLC(rValue [20]byte, newRevocation [20]byte) (*ChannelUpdate, error) {
func (lc *LightningChannel) SettleHTLC(rValue [32]byte, newRevocation [32]byte) (*ChannelUpdate, error) {
// Grab the updateTotem, this acts as a barrier upholding the invariant
// that only one channel update transaction should exist at any moment.
// This aides in ensuring the channel updates are atomic, and consistent.

@ -41,7 +41,7 @@ type ChannelContribution struct {
// Hash to be used as the revocation for the initial version of this
// party's commitment transaction.
RevocationHash [20]byte
RevocationHash [32]byte
// The delay (in blocks) to be used for the pay-to-self output in this
// party's version of the commitment transaction.

@ -97,7 +97,7 @@ type bobNode struct {
// For simplicity, used for both the commit tx and the multi-sig output.
channelKey *btcec.PublicKey
deliveryAddress btcutil.Address
revocation [20]byte
revocation [32]byte
delay uint32
id [wire.HashSize]byte
@ -228,7 +228,7 @@ func newBobNode(miner *rpctest.Harness, amt btcutil.Amount) (*bobNode, error) {
// Bob's initial revocation hash is just his private key with the first
// byte changed...
var revocation [20]byte
var revocation [32]byte
copy(revocation[:], bobsPrivKey)
revocation[0] = 0xff
@ -488,7 +488,7 @@ func testDualFundingReservationWorkflow(miner *rpctest.Harness, lnwallet *Lightn
// Obtain bob's signature for the closure transaction.
redeemScript := lnc.channelState.FundingRedeemScript
fundingOut := lnc.ChannelPoint()
fundingTxIn := wire.NewTxIn(&fundingOut, nil, nil)
fundingTxIn := wire.NewTxIn(fundingOut, nil, nil)
bobCloseTx := createCooperativeCloseTx(fundingTxIn,
lnc.channelState.TheirBalance, lnc.channelState.OurBalance,
lnc.channelState.TheirDeliveryScript, lnc.channelState.OurDeliveryScript,