test(chain): pin HTLC expiration boundary
Co-Authored-By: Charon <charon@lethean.io>
This commit is contained in:
parent
cb43082d18
commit
0993b081c7
2 changed files with 43 additions and 1 deletions
|
|
@ -53,7 +53,8 @@ func (c *Chain) GetRingOutputs(height, amount uint64, offsets []uint64) ([]types
|
||||||
// TxOutMultisig does not carry enough context here to select the exact spend
|
// TxOutMultisig does not carry enough context here to select the exact spend
|
||||||
// path, so we return the first listed key as a deterministic fallback.
|
// path, so we return the first listed key as a deterministic fallback.
|
||||||
// TxOutHTLC selects redeem vs refund based on whether the spending height is
|
// TxOutHTLC selects redeem vs refund based on whether the spending height is
|
||||||
// before or after the contract expiration.
|
// before or after the contract expiration. The refund path only opens after
|
||||||
|
// the expiration height has passed.
|
||||||
func ringOutputSpendKey(height uint64, target types.TxOutTarget) (types.PublicKey, error) {
|
func ringOutputSpendKey(height uint64, target types.TxOutTarget) (types.PublicKey, error) {
|
||||||
if t, ok := types.AsTxOutToKey(target); ok {
|
if t, ok := types.AsTxOutToKey(target); ok {
|
||||||
return t.Key, nil
|
return t.Key, nil
|
||||||
|
|
|
||||||
|
|
@ -142,6 +142,47 @@ func TestGetRingOutputs_Good_HTLC(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetRingOutputs_Good_HTLCExpirationBoundary(t *testing.T) {
|
||||||
|
c := newTestChain(t)
|
||||||
|
|
||||||
|
redeem := types.PublicKey{0xAA, 0xBB, 0xCC}
|
||||||
|
refund := types.PublicKey{0xDD, 0xEE, 0xFF}
|
||||||
|
tx := types.Transaction{
|
||||||
|
Version: types.VersionPreHF4,
|
||||||
|
Vin: []types.TxInput{types.TxInputGenesis{Height: 0}},
|
||||||
|
Vout: []types.TxOutput{
|
||||||
|
types.TxOutputBare{
|
||||||
|
Amount: 1000,
|
||||||
|
Target: types.TxOutHTLC{
|
||||||
|
HTLCHash: types.Hash{0x01},
|
||||||
|
Flags: 0,
|
||||||
|
Expiration: 200,
|
||||||
|
PKRedeem: redeem,
|
||||||
|
PKRefund: refund,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Extra: wire.EncodeVarint(0),
|
||||||
|
Attachment: wire.EncodeVarint(0),
|
||||||
|
}
|
||||||
|
txHash := wire.TransactionHash(&tx)
|
||||||
|
|
||||||
|
if err := c.PutTransaction(txHash, &tx, &TxMeta{KeeperBlock: 0, GlobalOutputIndexes: []uint64{0}}); err != nil {
|
||||||
|
t.Fatalf("PutTransaction: %v", err)
|
||||||
|
}
|
||||||
|
if _, err := c.PutOutput(1000, txHash, 0); err != nil {
|
||||||
|
t.Fatalf("PutOutput: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
pubs, err := c.GetRingOutputs(200, 1000, []uint64{0})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("GetRingOutputs boundary path: %v", err)
|
||||||
|
}
|
||||||
|
if pubs[0] != redeem {
|
||||||
|
t.Errorf("pubs[0] boundary path: got %x, want %x", pubs[0], redeem)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestGetRingOutputs_Good_MultipleOutputs(t *testing.T) {
|
func TestGetRingOutputs_Good_MultipleOutputs(t *testing.T) {
|
||||||
c := newTestChain(t)
|
c := newTestChain(t)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue