Browse Source

gossip_control: when searching for a txout, make sure it's not spent!

There's no reason for the db to ever return non-NULL if it's spent.  And there's
only one caller, for which that is definitely true.

Suggested-by: @cdecker
Fixes: #1934
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
json-streaming
Rusty Russell 6 years ago
committed by Christian Decker
parent
commit
0855422110
  1. 2
      tests/test_gossip.py
  2. 3
      wallet/wallet.c

2
tests/test_gossip.py

@ -4,7 +4,6 @@ from utils import wait_for, TIMEOUT, only_one
import json import json
import logging import logging
import os import os
import pytest
import struct import struct
import subprocess import subprocess
import time import time
@ -865,7 +864,6 @@ def test_gossipwith(node_factory):
assert num_msgs == 5 assert num_msgs == 5
@pytest.mark.xfail(strict=True)
def test_gossip_notices_close(node_factory, bitcoind): def test_gossip_notices_close(node_factory, bitcoind):
# We want IO logging so we can replay a channel_announce to l1. # We want IO logging so we can replay a channel_announce to l1.
l1 = node_factory.get_node(options={'log-level': 'io'}) l1 = node_factory.get_node(options={'log-level': 'io'})

3
wallet/wallet.c

@ -2139,7 +2139,8 @@ struct outpoint *wallet_outpoint_for_scid(struct wallet *w, tal_t *ctx,
"FROM utxoset " "FROM utxoset "
"WHERE blockheight = ?" "WHERE blockheight = ?"
" AND txindex = ?" " AND txindex = ?"
" AND outnum = ?"); " AND outnum = ?"
" AND spendheight IS NULL");
sqlite3_bind_int(stmt, 1, short_channel_id_blocknum(scid)); sqlite3_bind_int(stmt, 1, short_channel_id_blocknum(scid));
sqlite3_bind_int(stmt, 2, short_channel_id_txnum(scid)); sqlite3_bind_int(stmt, 2, short_channel_id_txnum(scid));
sqlite3_bind_int(stmt, 3, short_channel_id_outnum(scid)); sqlite3_bind_int(stmt, 3, short_channel_id_outnum(scid));

Loading…
Cancel
Save