mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-09-07 19:30:46 +02:00
multi: fix make fmt
This commit is contained in:
@@ -203,36 +203,40 @@ func Ripemd160H(d []byte) []byte {
|
||||
// output payment for the sender's version of the commitment transaction. The
|
||||
// possible script paths from this output include:
|
||||
//
|
||||
// * The sender timing out the HTLC using the second level HTLC timeout
|
||||
// transaction.
|
||||
// * The receiver of the HTLC claiming the output on-chain with the payment
|
||||
// preimage.
|
||||
// * The receiver of the HTLC sweeping all the funds in the case that a
|
||||
// revoked commitment transaction bearing this HTLC was broadcast.
|
||||
// - The sender timing out the HTLC using the second level HTLC timeout
|
||||
// transaction.
|
||||
// - The receiver of the HTLC claiming the output on-chain with the payment
|
||||
// preimage.
|
||||
// - The receiver of the HTLC sweeping all the funds in the case that a
|
||||
// revoked commitment transaction bearing this HTLC was broadcast.
|
||||
//
|
||||
// If confirmedSpend=true, a 1 OP_CSV check will be added to the non-revocation
|
||||
// cases, to allow sweeping only after confirmation.
|
||||
//
|
||||
// Possible Input Scripts:
|
||||
// SENDR: <0> <sendr sig> <recvr sig> <0> (spend using HTLC timeout transaction)
|
||||
// RECVR: <recvr sig> <preimage>
|
||||
// REVOK: <revoke sig> <revoke key>
|
||||
// * receiver revoke
|
||||
//
|
||||
// OP_DUP OP_HASH160 <revocation key hash160> OP_EQUAL
|
||||
// OP_IF
|
||||
// OP_CHECKSIG
|
||||
// OP_ELSE
|
||||
// <recv htlc key>
|
||||
// OP_SWAP OP_SIZE 32 OP_EQUAL
|
||||
// OP_NOTIF
|
||||
// OP_DROP 2 OP_SWAP <sender htlc key> 2 OP_CHECKMULTISIG
|
||||
// OP_ELSE
|
||||
// OP_HASH160 <ripemd160(payment hash)> OP_EQUALVERIFY
|
||||
// OP_CHECKSIG
|
||||
// OP_ENDIF
|
||||
// [1 OP_CHECKSEQUENCEVERIFY OP_DROP] <- if allowing confirmed spend only.
|
||||
// OP_ENDIF
|
||||
// SENDR: <0> <sendr sig> <recvr sig> <0> (spend using HTLC timeout transaction)
|
||||
// RECVR: <recvr sig> <preimage>
|
||||
// REVOK: <revoke sig> <revoke key>
|
||||
// * receiver revoke
|
||||
//
|
||||
// Offered HTLC Output Script:
|
||||
//
|
||||
// OP_DUP OP_HASH160 <revocation key hash160> OP_EQUAL
|
||||
// OP_IF
|
||||
// OP_CHECKSIG
|
||||
// OP_ELSE
|
||||
// <recv htlc key>
|
||||
// OP_SWAP OP_SIZE 32 OP_EQUAL
|
||||
// OP_NOTIF
|
||||
// OP_DROP 2 OP_SWAP <sender htlc key> 2 OP_CHECKMULTISIG
|
||||
// OP_ELSE
|
||||
// OP_HASH160 <ripemd160(payment hash)> OP_EQUALVERIFY
|
||||
// OP_CHECKSIG
|
||||
// OP_ENDIF
|
||||
// [1 OP_CHECKSEQUENCEVERIFY OP_DROP] <- if allowing confirmed
|
||||
// spend only.
|
||||
// OP_ENDIF
|
||||
func SenderHTLCScript(senderHtlcKey, receiverHtlcKey,
|
||||
revocationKey *btcec.PublicKey, paymentHash []byte,
|
||||
confirmedSpend bool) ([]byte, error) {
|
||||
@@ -442,37 +446,40 @@ func SenderHtlcSpendTimeout(receiverSig Signature,
|
||||
// ReceiverHTLCScript constructs the public key script for an incoming HTLC
|
||||
// output payment for the receiver's version of the commitment transaction. The
|
||||
// possible execution paths from this script include:
|
||||
// * The receiver of the HTLC uses its second level HTLC transaction to
|
||||
// - The receiver of the HTLC uses its second level HTLC transaction to
|
||||
// advance the state of the HTLC into the delay+claim state.
|
||||
// * The sender of the HTLC sweeps all the funds of the HTLC as a breached
|
||||
// - The sender of the HTLC sweeps all the funds of the HTLC as a breached
|
||||
// commitment was broadcast.
|
||||
// * The sender of the HTLC sweeps the HTLC on-chain after the timeout period
|
||||
// - The sender of the HTLC sweeps the HTLC on-chain after the timeout period
|
||||
// of the HTLC has passed.
|
||||
//
|
||||
// If confirmedSpend=true, a 1 OP_CSV check will be added to the non-revocation
|
||||
// cases, to allow sweeping only after confirmation.
|
||||
//
|
||||
// Possible Input Scripts:
|
||||
// RECVR: <0> <sender sig> <recvr sig> <preimage> (spend using HTLC success transaction)
|
||||
// REVOK: <sig> <key>
|
||||
// SENDR: <sig> 0
|
||||
//
|
||||
// RECVR: <0> <sender sig> <recvr sig> <preimage> (spend using HTLC success transaction)
|
||||
// REVOK: <sig> <key>
|
||||
// SENDR: <sig> 0
|
||||
//
|
||||
// OP_DUP OP_HASH160 <revocation key hash160> OP_EQUAL
|
||||
// OP_IF
|
||||
// OP_CHECKSIG
|
||||
// OP_ELSE
|
||||
// <sendr htlc key>
|
||||
// OP_SWAP OP_SIZE 32 OP_EQUAL
|
||||
// OP_IF
|
||||
// OP_HASH160 <ripemd160(payment hash)> OP_EQUALVERIFY
|
||||
// 2 OP_SWAP <recvr htlc key> 2 OP_CHECKMULTISIG
|
||||
// OP_ELSE
|
||||
// OP_DROP <cltv expiry> OP_CHECKLOCKTIMEVERIFY OP_DROP
|
||||
// OP_CHECKSIG
|
||||
// OP_ENDIF
|
||||
// [1 OP_CHECKSEQUENCEVERIFY OP_DROP] <- if allowing confirmed spend only.
|
||||
// OP_ENDIF
|
||||
// Received HTLC Output Script:
|
||||
//
|
||||
// OP_DUP OP_HASH160 <revocation key hash160> OP_EQUAL
|
||||
// OP_IF
|
||||
// OP_CHECKSIG
|
||||
// OP_ELSE
|
||||
// <sendr htlc key>
|
||||
// OP_SWAP OP_SIZE 32 OP_EQUAL
|
||||
// OP_IF
|
||||
// OP_HASH160 <ripemd160(payment hash)> OP_EQUALVERIFY
|
||||
// 2 OP_SWAP <recvr htlc key> 2 OP_CHECKMULTISIG
|
||||
// OP_ELSE
|
||||
// OP_DROP <cltv expiry> OP_CHECKLOCKTIMEVERIFY OP_DROP
|
||||
// OP_CHECKSIG
|
||||
// OP_ENDIF
|
||||
// [1 OP_CHECKSEQUENCEVERIFY OP_DROP] <- if allowing confirmed
|
||||
// spend only.
|
||||
// OP_ENDIF
|
||||
func ReceiverHTLCScript(cltvExpiry uint32, senderHtlcKey,
|
||||
receiverHtlcKey, revocationKey *btcec.PublicKey,
|
||||
paymentHash []byte, confirmedSpend bool) ([]byte, error) {
|
||||
@@ -714,26 +721,29 @@ func ReceiverHtlcSpendTimeout(signer Signer, signDesc *SignDescriptor,
|
||||
// spent in a particular way, and to a particular output.
|
||||
//
|
||||
// Possible Input Scripts:
|
||||
// * To revoke an HTLC output that has been transitioned to the claim+delay
|
||||
// state:
|
||||
// * <revoke sig> 1
|
||||
//
|
||||
// * To claim and HTLC output, either with a pre-image or due to a timeout:
|
||||
// * <delay sig> 0
|
||||
// - To revoke an HTLC output that has been transitioned to the claim+delay
|
||||
// state:
|
||||
// <revoke sig> 1
|
||||
//
|
||||
// OP_IF
|
||||
// <revoke key>
|
||||
// OP_ELSE
|
||||
// <delay in blocks>
|
||||
// OP_CHECKSEQUENCEVERIFY
|
||||
// OP_DROP
|
||||
// <delay key>
|
||||
// OP_ENDIF
|
||||
// OP_CHECKSIG
|
||||
// - To claim and HTLC output, either with a pre-image or due to a timeout:
|
||||
// <delay sig> 0
|
||||
//
|
||||
// Output Script:
|
||||
//
|
||||
// OP_IF
|
||||
// <revoke key>
|
||||
// OP_ELSE
|
||||
// <delay in blocks>
|
||||
// OP_CHECKSEQUENCEVERIFY
|
||||
// OP_DROP
|
||||
// <delay key>
|
||||
// OP_ENDIF
|
||||
// OP_CHECKSIG
|
||||
//
|
||||
// TODO(roasbeef): possible renames for second-level
|
||||
// * transition?
|
||||
// * covenant output
|
||||
// - transition?
|
||||
// - covenant output
|
||||
func SecondLevelHtlcScript(revocationKey, delayKey *btcec.PublicKey,
|
||||
csvDelay uint32) ([]byte, error) {
|
||||
|
||||
@@ -780,25 +790,28 @@ func SecondLevelHtlcScript(revocationKey, delayKey *btcec.PublicKey,
|
||||
// spent in a particular way, and to a particular output.
|
||||
//
|
||||
// Possible Input Scripts:
|
||||
// * To revoke an HTLC output that has been transitioned to the claim+delay
|
||||
// state:
|
||||
// * <revoke sig> 1
|
||||
//
|
||||
// * To claim an HTLC output, either with a pre-image or due to a timeout:
|
||||
// * <delay sig> 0
|
||||
// - To revoke an HTLC output that has been transitioned to the claim+delay
|
||||
// state:
|
||||
// <revoke sig> 1
|
||||
//
|
||||
// OP_IF
|
||||
// <revoke key>
|
||||
// OP_ELSE
|
||||
// <lease maturity in blocks>
|
||||
// OP_CHECKLOCKTIMEVERIFY
|
||||
// OP_DROP
|
||||
// <delay in blocks>
|
||||
// OP_CHECKSEQUENCEVERIFY
|
||||
// OP_DROP
|
||||
// <delay key>
|
||||
// OP_ENDIF
|
||||
// OP_CHECKSIG.
|
||||
// - To claim an HTLC output, either with a pre-image or due to a timeout:
|
||||
// <delay sig> 0
|
||||
//
|
||||
// Output Script:
|
||||
//
|
||||
// OP_IF
|
||||
// <revoke key>
|
||||
// OP_ELSE
|
||||
// <lease maturity in blocks>
|
||||
// OP_CHECKLOCKTIMEVERIFY
|
||||
// OP_DROP
|
||||
// <delay in blocks>
|
||||
// OP_CHECKSEQUENCEVERIFY
|
||||
// OP_DROP
|
||||
// <delay key>
|
||||
// OP_ENDIF
|
||||
// OP_CHECKSIG.
|
||||
func LeaseSecondLevelHtlcScript(revocationKey, delayKey *btcec.PublicKey,
|
||||
csvDelay, cltvExpiry uint32) ([]byte, error) {
|
||||
|
||||
@@ -944,7 +957,7 @@ func HtlcSecondLevelSpend(signer Signer, signDesc *SignDescriptor,
|
||||
// LockTimeToSequence converts the passed relative locktime to a sequence
|
||||
// number in accordance to BIP-68.
|
||||
// See: https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki
|
||||
// * (Compatibility)
|
||||
// - (Compatibility)
|
||||
func LockTimeToSequence(isSeconds bool, locktime uint32) uint32 {
|
||||
if !isSeconds {
|
||||
// The locktime is to be expressed in confirmations.
|
||||
@@ -964,17 +977,19 @@ func LockTimeToSequence(isSeconds bool, locktime uint32) uint32 {
|
||||
// can claim all the settled funds in the channel, plus the unsettled funds.
|
||||
//
|
||||
// Possible Input Scripts:
|
||||
// REVOKE: <sig> 1
|
||||
// SENDRSWEEP: <sig> <emptyvector>
|
||||
//
|
||||
// REVOKE: <sig> 1
|
||||
// SENDRSWEEP: <sig> <emptyvector>
|
||||
//
|
||||
// Output Script:
|
||||
// OP_IF
|
||||
// <revokeKey>
|
||||
// OP_ELSE
|
||||
// <numRelativeBlocks> OP_CHECKSEQUENCEVERIFY OP_DROP
|
||||
// <timeKey>
|
||||
// OP_ENDIF
|
||||
// OP_CHECKSIG
|
||||
//
|
||||
// OP_IF
|
||||
// <revokeKey>
|
||||
// OP_ELSE
|
||||
// <numRelativeBlocks> OP_CHECKSEQUENCEVERIFY OP_DROP
|
||||
// <timeKey>
|
||||
// OP_ENDIF
|
||||
// OP_CHECKSIG
|
||||
func CommitScriptToSelf(csvTimeout uint32, selfKey, revokeKey *btcec.PublicKey) ([]byte, error) {
|
||||
// This script is spendable under two conditions: either the
|
||||
// 'csvTimeout' has passed and we can redeem our funds, or they can
|
||||
@@ -1015,18 +1030,20 @@ func CommitScriptToSelf(csvTimeout uint32, selfKey, revokeKey *btcec.PublicKey)
|
||||
// can claim all the settled funds in the channel, plus the unsettled funds.
|
||||
//
|
||||
// Possible Input Scripts:
|
||||
// REVOKE: <sig> 1
|
||||
// SENDRSWEEP: <sig> <emptyvector>
|
||||
//
|
||||
// REVOKE: <sig> 1
|
||||
// SENDRSWEEP: <sig> <emptyvector>
|
||||
//
|
||||
// Output Script:
|
||||
// OP_IF
|
||||
// <revokeKey>
|
||||
// OP_ELSE
|
||||
// <absoluteLeaseExpiry> OP_CHECKLOCKTIMEVERIFY OP_DROP
|
||||
// <numRelativeBlocks> OP_CHECKSEQUENCEVERIFY OP_DROP
|
||||
// <timeKey>
|
||||
// OP_ENDIF
|
||||
// OP_CHECKSIG
|
||||
//
|
||||
// OP_IF
|
||||
// <revokeKey>
|
||||
// OP_ELSE
|
||||
// <absoluteLeaseExpiry> OP_CHECKLOCKTIMEVERIFY OP_DROP
|
||||
// <numRelativeBlocks> OP_CHECKSEQUENCEVERIFY OP_DROP
|
||||
// <timeKey>
|
||||
// OP_ENDIF
|
||||
// OP_CHECKSIG
|
||||
func LeaseCommitScriptToSelf(selfKey, revokeKey *btcec.PublicKey,
|
||||
csvTimeout, leaseExpiry uint32) ([]byte, error) {
|
||||
|
||||
@@ -1194,9 +1211,11 @@ func CommitScriptUnencumbered(key *btcec.PublicKey) ([]byte, error) {
|
||||
// transaction. The money can only be spend after one confirmation.
|
||||
//
|
||||
// Possible Input Scripts:
|
||||
// SWEEP: <sig>
|
||||
//
|
||||
// SWEEP: <sig>
|
||||
//
|
||||
// Output Script:
|
||||
//
|
||||
// <key> OP_CHECKSIGVERIFY
|
||||
// 1 OP_CHECKSEQUENCEVERIFY
|
||||
func CommitScriptToRemoteConfirmed(key *btcec.PublicKey) ([]byte, error) {
|
||||
@@ -1218,12 +1237,14 @@ func CommitScriptToRemoteConfirmed(key *btcec.PublicKey) ([]byte, error) {
|
||||
// transaction. The money can only be spend after one confirmation.
|
||||
//
|
||||
// Possible Input Scripts:
|
||||
// SWEEP: <sig>
|
||||
//
|
||||
// SWEEP: <sig>
|
||||
//
|
||||
// Output Script:
|
||||
// <key> OP_CHECKSIGVERIFY
|
||||
// <lease maturity in blocks> OP_CHECKLOCKTIMEVERIFY OP_DROP
|
||||
// 1 OP_CHECKSEQUENCEVERIFY
|
||||
//
|
||||
// <key> OP_CHECKSIGVERIFY
|
||||
// <lease maturity in blocks> OP_CHECKLOCKTIMEVERIFY OP_DROP
|
||||
// 1 OP_CHECKSEQUENCEVERIFY
|
||||
func LeaseCommitScriptToRemoteConfirmed(key *btcec.PublicKey,
|
||||
leaseExpiry uint32) ([]byte, error) {
|
||||
|
||||
@@ -1278,10 +1299,12 @@ func CommitSpendToRemoteConfirmed(signer Signer, signDesc *SignDescriptor,
|
||||
// the given key immediately, or by anyone after 16 confirmations.
|
||||
//
|
||||
// Possible Input Scripts:
|
||||
// By owner: <sig>
|
||||
// By anyone (after 16 conf): <emptyvector>
|
||||
//
|
||||
// By owner: <sig>
|
||||
// By anyone (after 16 conf): <emptyvector>
|
||||
//
|
||||
// Output Script:
|
||||
//
|
||||
// <funding_pubkey> OP_CHECKSIG OP_IFDUP
|
||||
// OP_NOTIF
|
||||
// OP_16 OP_CSV
|
||||
@@ -1348,7 +1371,7 @@ func CommitSpendAnchorAnyone(script []byte) (wire.TxWitness, error) {
|
||||
// the pay/delay base point. The end end results is that the basePoint is
|
||||
// tweaked as follows:
|
||||
//
|
||||
// * key = basePoint + sha256(commitPoint || basePoint)*G
|
||||
// - key = basePoint + sha256(commitPoint || basePoint)*G
|
||||
func SingleTweakBytes(commitPoint, basePoint *btcec.PublicKey) []byte {
|
||||
h := sha256.New()
|
||||
h.Write(commitPoint.SerializeCompressed())
|
||||
@@ -1363,15 +1386,15 @@ func SingleTweakBytes(commitPoint, basePoint *btcec.PublicKey) []byte {
|
||||
// The opposite applies for when tweaking remote keys. Precisely, the following
|
||||
// operation is used to "tweak" public keys:
|
||||
//
|
||||
// tweakPub := basePoint + sha256(commitPoint || basePoint) * G
|
||||
// := G*k + sha256(commitPoint || basePoint)*G
|
||||
// := G*(k + sha256(commitPoint || basePoint))
|
||||
// tweakPub := basePoint + sha256(commitPoint || basePoint) * G
|
||||
// := G*k + sha256(commitPoint || basePoint)*G
|
||||
// := G*(k + sha256(commitPoint || basePoint))
|
||||
//
|
||||
// Therefore, if a party possess the value k, the private key of the base
|
||||
// point, then they are able to derive the proper private key for the
|
||||
// revokeKey by computing:
|
||||
//
|
||||
// revokePriv := k + sha256(commitPoint || basePoint) mod N
|
||||
// revokePriv := k + sha256(commitPoint || basePoint) mod N
|
||||
//
|
||||
// Where N is the order of the sub-group.
|
||||
//
|
||||
@@ -1415,7 +1438,7 @@ func TweakPubKeyWithTweak(pubKey *btcec.PublicKey,
|
||||
// revoked state. Precisely, the following operation is used to derive a
|
||||
// tweaked private key:
|
||||
//
|
||||
// * tweakPriv := basePriv + sha256(commitment || basePub) mod N
|
||||
// - tweakPriv := basePriv + sha256(commitment || basePub) mod N
|
||||
//
|
||||
// Where N is the order of the sub-group.
|
||||
func TweakPrivKey(basePriv *btcec.PrivateKey,
|
||||
@@ -1436,24 +1459,24 @@ func TweakPrivKey(basePriv *btcec.PrivateKey,
|
||||
// revoked commitment transaction, then if the other party knows the revocation
|
||||
// preimage, then they'll be able to derive the corresponding private key to
|
||||
// this private key by exploiting the homomorphism in the elliptic curve group:
|
||||
// * https://en.wikipedia.org/wiki/Group_homomorphism#Homomorphisms_of_abelian_groups
|
||||
// - https://en.wikipedia.org/wiki/Group_homomorphism#Homomorphisms_of_abelian_groups
|
||||
//
|
||||
// The derivation is performed as follows:
|
||||
//
|
||||
// revokeKey := revokeBase * sha256(revocationBase || commitPoint) +
|
||||
// commitPoint * sha256(commitPoint || revocationBase)
|
||||
// revokeKey := revokeBase * sha256(revocationBase || commitPoint) +
|
||||
// commitPoint * sha256(commitPoint || revocationBase)
|
||||
//
|
||||
// := G*(revokeBasePriv * sha256(revocationBase || commitPoint)) +
|
||||
// G*(commitSecret * sha256(commitPoint || revocationBase))
|
||||
// := G*(revokeBasePriv * sha256(revocationBase || commitPoint)) +
|
||||
// G*(commitSecret * sha256(commitPoint || revocationBase))
|
||||
//
|
||||
// := G*(revokeBasePriv * sha256(revocationBase || commitPoint) +
|
||||
// commitSecret * sha256(commitPoint || revocationBase))
|
||||
// := G*(revokeBasePriv * sha256(revocationBase || commitPoint) +
|
||||
// commitSecret * sha256(commitPoint || revocationBase))
|
||||
//
|
||||
// Therefore, once we divulge the revocation secret, the remote peer is able to
|
||||
// compute the proper private key for the revokeKey by computing:
|
||||
//
|
||||
// revokePriv := (revokeBasePriv * sha256(revocationBase || commitPoint)) +
|
||||
// (commitSecret * sha256(commitPoint || revocationBase)) mod N
|
||||
// revokePriv := (revokeBasePriv * sha256(revocationBase || commitPoint)) +
|
||||
// (commitSecret * sha256(commitPoint || revocationBase)) mod N
|
||||
//
|
||||
// Where N is the order of the sub-group.
|
||||
func DeriveRevocationPubkey(revokeBase,
|
||||
@@ -1505,8 +1528,9 @@ func DeriveRevocationPubkey(revokeBase,
|
||||
// a previously revoked commitment transaction.
|
||||
//
|
||||
// The private key is derived as follows:
|
||||
// revokePriv := (revokeBasePriv * sha256(revocationBase || commitPoint)) +
|
||||
// (commitSecret * sha256(commitPoint || revocationBase)) mod N
|
||||
//
|
||||
// revokePriv := (revokeBasePriv * sha256(revocationBase || commitPoint)) +
|
||||
// (commitSecret * sha256(commitPoint || revocationBase)) mod N
|
||||
//
|
||||
// Where N is the order of the sub-group.
|
||||
func DeriveRevocationPrivKey(revokeBasePriv *btcec.PrivateKey,
|
||||
|
@@ -159,14 +159,14 @@ func makeWitnessTestCase(t *testing.T,
|
||||
//
|
||||
// The following cases are exercised by this test:
|
||||
// sender script:
|
||||
// * receiver spends
|
||||
// * revoke w/ sig
|
||||
// * HTLC with invalid preimage size
|
||||
// * HTLC with valid preimage size + sig
|
||||
// * sender spends
|
||||
// * invalid lock-time for CLTV
|
||||
// * invalid sequence for CSV
|
||||
// * valid lock-time+sequence, valid sig
|
||||
// - receiver spends
|
||||
// - revoke w/ sig
|
||||
// - HTLC with invalid preimage size
|
||||
// - HTLC with valid preimage size + sig
|
||||
// - sender spends
|
||||
// - invalid lock-time for CLTV
|
||||
// - invalid sequence for CSV
|
||||
// - valid lock-time+sequence, valid sig
|
||||
func TestHTLCSenderSpendValidation(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
@@ -559,14 +559,14 @@ func TestHTLCSenderSpendValidation(t *testing.T) {
|
||||
// incoming HTLC.
|
||||
//
|
||||
// The following cases are exercised by this test:
|
||||
// * receiver spends
|
||||
// * HTLC redemption w/ invalid preimage size
|
||||
// * HTLC redemption w/ invalid sequence
|
||||
// * HTLC redemption w/ valid preimage size
|
||||
// * sender spends
|
||||
// * revoke w/ sig
|
||||
// * refund w/ invalid lock time
|
||||
// * refund w/ valid lock time
|
||||
// - receiver spends
|
||||
// 1. HTLC redemption w/ invalid preimage size
|
||||
// 2. HTLC redemption w/ invalid sequence
|
||||
// 3. HTLC redemption w/ valid preimage size
|
||||
// - sender spends
|
||||
// 1. revoke w/ sig
|
||||
// 2. refund w/ invalid lock time
|
||||
// 3. refund w/ valid lock time
|
||||
func TestHTLCReceiverSpendValidation(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
|
Reference in New Issue
Block a user