watchtower/wtserver/server: return valid reward script

This commit is contained in:
Conner Fromknecht 2018-12-19 21:50:38 -08:00
parent 7e1b399437
commit f78319d32c
No known key found for this signature in database
GPG Key ID: E7D737B67FA592C7
2 changed files with 24 additions and 10 deletions

@ -11,6 +11,7 @@ import (
"github.com/btcsuite/btcd/btcec" "github.com/btcsuite/btcd/btcec"
"github.com/btcsuite/btcd/connmgr" "github.com/btcsuite/btcd/connmgr"
"github.com/btcsuite/btcd/txscript"
"github.com/btcsuite/btcutil" "github.com/btcsuite/btcutil"
"github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/lnwire"
"github.com/lightningnetwork/lnd/watchtower/blob" "github.com/lightningnetwork/lnd/watchtower/blob"
@ -340,7 +341,7 @@ func (s *Server) handleCreateSession(peer Peer, id *wtdb.SessionID,
log.Debugf("Already have session for %s", id) log.Debugf("Already have session for %s", id)
return s.replyCreateSession( return s.replyCreateSession(
peer, id, wtwire.CreateSessionCodeAlreadyExists, peer, id, wtwire.CreateSessionCodeAlreadyExists,
[]byte(existingInfo.RewardAddress), existingInfo.RewardAddress,
) )
// Some other database error occurred, return a temporary failure. // Some other database error occurred, return a temporary failure.
@ -364,7 +365,15 @@ func (s *Server) handleCreateSession(peer Peer, id *wtdb.SessionID,
) )
} }
rewardAddrBytes := rewardAddress.ScriptAddress() // Construct the pkscript the client should pay to when signing justice
// transactions for this session.
rewardScript, err := txscript.PayToAddrScript(rewardAddress)
if err != nil {
log.Errorf("unable to generate reward script for %s", id)
return s.replyCreateSession(
peer, id, wtwire.CodeTemporaryFailure, nil,
)
}
// Ensure that the requested blob type is supported by our tower. // Ensure that the requested blob type is supported by our tower.
if !blob.IsSupportedType(req.BlobType) { if !blob.IsSupportedType(req.BlobType) {
@ -380,14 +389,14 @@ func (s *Server) handleCreateSession(peer Peer, id *wtdb.SessionID,
// Assemble the session info using the agreed upon parameters, reward // Assemble the session info using the agreed upon parameters, reward
// address, and session id. // address, and session id.
info := wtdb.SessionInfo{ info := wtdb.SessionInfo{
ID: *id, ID: *id,
RewardAddress: rewardAddrBytes,
Policy: wtpolicy.Policy{ Policy: wtpolicy.Policy{
BlobType: req.BlobType, BlobType: req.BlobType,
MaxUpdates: req.MaxUpdates, MaxUpdates: req.MaxUpdates,
RewardRate: req.RewardRate, RewardRate: req.RewardRate,
SweepFeeRate: req.SweepFeeRate, SweepFeeRate: req.SweepFeeRate,
}, },
RewardAddress: rewardScript,
} }
// Insert the session info into the watchtower's database. If // Insert the session info into the watchtower's database. If
@ -403,7 +412,7 @@ func (s *Server) handleCreateSession(peer Peer, id *wtdb.SessionID,
log.Infof("Accepted session for %s", id) log.Infof("Accepted session for %s", id)
return s.replyCreateSession( return s.replyCreateSession(
peer, id, wtwire.CodeOK, rewardAddrBytes, peer, id, wtwire.CodeOK, rewardScript,
) )
} }

@ -10,6 +10,7 @@ import (
"github.com/btcsuite/btcd/btcec" "github.com/btcsuite/btcd/btcec"
"github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg"
"github.com/btcsuite/btcd/txscript"
"github.com/btcsuite/btcutil" "github.com/btcsuite/btcutil"
"github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/lnwire"
"github.com/lightningnetwork/lnd/watchtower/blob" "github.com/lightningnetwork/lnd/watchtower/blob"
@ -18,9 +19,13 @@ import (
"github.com/lightningnetwork/lnd/watchtower/wtwire" "github.com/lightningnetwork/lnd/watchtower/wtwire"
) )
// addr is the server's reward address given to watchtower clients. var (
var addr, _ = btcutil.DecodeAddress( // addr is the server's reward address given to watchtower clients.
"mrX9vMRYLfVy1BnZbc5gZjuyaqH3ZW2ZHz", &chaincfg.TestNet3Params, addr, _ = btcutil.DecodeAddress(
"mrX9vMRYLfVy1BnZbc5gZjuyaqH3ZW2ZHz", &chaincfg.TestNet3Params,
)
addrScript, _ = txscript.PayToAddrScript(addr)
) )
// randPubKey generates a new secp keypair, and returns the public key. // randPubKey generates a new secp keypair, and returns the public key.
@ -163,11 +168,11 @@ var createSessionTests = []createSessionTestCase{
}, },
expReply: &wtwire.CreateSessionReply{ expReply: &wtwire.CreateSessionReply{
Code: wtwire.CodeOK, Code: wtwire.CodeOK,
Data: []byte(addr.ScriptAddress()), Data: addrScript,
}, },
expDupReply: &wtwire.CreateSessionReply{ expDupReply: &wtwire.CreateSessionReply{
Code: wtwire.CreateSessionCodeAlreadyExists, Code: wtwire.CreateSessionCodeAlreadyExists,
Data: []byte(addr.ScriptAddress()), Data: addrScript,
}, },
}, },
{ {