utxo: don't add outputs that aren't currently eligible to be spent

If an output's CSV lock hasn't been surpassed yet, don't try to
include it in a transaction
This commit is contained in:
niftynei 2021-07-02 14:56:35 -05:00 committed by neil saitug
parent 86f7a179a9
commit 03ccebc296
7 changed files with 151 additions and 122 deletions

View File

@ -1,5 +1,4 @@
#include "config.h" #include "config.h"
#include <assert.h>
#include <bitcoin/privkey.h> #include <bitcoin/privkey.h>
#include <bitcoin/psbt.h> #include <bitcoin/psbt.h>
#include <bitcoin/script.h> #include <bitcoin/script.h>

View File

@ -1,6 +1,7 @@
#ifndef LIGHTNING_COMMON_UTXO_H #ifndef LIGHTNING_COMMON_UTXO_H
#define LIGHTNING_COMMON_UTXO_H #define LIGHTNING_COMMON_UTXO_H
#include "config.h" #include "config.h"
#include <assert.h>
#include <bitcoin/chainparams.h> #include <bitcoin/chainparams.h>
#include <bitcoin/pubkey.h> #include <bitcoin/pubkey.h>
#include <bitcoin/shadouble.h> #include <bitcoin/shadouble.h>
@ -71,6 +72,17 @@ static inline bool utxo_is_reserved(const struct utxo *utxo, u32 current_height)
return utxo->reserved_til > current_height; return utxo->reserved_til > current_height;
} }
static inline bool utxo_is_csv_locked(const struct utxo *utxo, u32 current_height)
{
if (!utxo->close_info)
return false;
/* All close outputs are csv locked for option_anchor_outputs */
if (!utxo->blockheight && utxo->close_info->option_anchor_outputs)
return true;
assert(*utxo->blockheight + utxo->close_info->csv > *utxo->blockheight);
return *utxo->blockheight + utxo->close_info->csv > current_height;
}
void towire_utxo(u8 **pptr, const struct utxo *utxo); void towire_utxo(u8 **pptr, const struct utxo *utxo);
struct utxo *fromwire_utxo(const tal_t *ctx, const u8 **ptr, size_t *max); struct utxo *fromwire_utxo(const tal_t *ctx, const u8 **ptr, size_t *max);

View File

@ -2026,4 +2026,4 @@ struct db_query db_postgres_queries[] = {
#endif /* LIGHTNINGD_WALLET_GEN_DB_POSTGRES */ #endif /* LIGHTNINGD_WALLET_GEN_DB_POSTGRES */
// SHA256STAMP:ee6c1b38b43e1959bbd7b31e15afa4a45bcbd37acf7ce6ffc994cc8002ec96e1 // SHA256STAMP:020ef91a3637bbe29c82477083389a5ecaf359ae049940017ec5c76609c08fdc

View File

@ -2026,4 +2026,4 @@ struct db_query db_sqlite3_queries[] = {
#endif /* LIGHTNINGD_WALLET_GEN_DB_SQLITE3 */ #endif /* LIGHTNINGD_WALLET_GEN_DB_SQLITE3 */
// SHA256STAMP:ee6c1b38b43e1959bbd7b31e15afa4a45bcbd37acf7ce6ffc994cc8002ec96e1 // SHA256STAMP:020ef91a3637bbe29c82477083389a5ecaf359ae049940017ec5c76609c08fdc

View File

@ -682,6 +682,15 @@ static struct command_result *json_utxopsbt(struct command *cmd,
struct bitcoin_txid, struct bitcoin_txid,
&utxo->txid), &utxo->txid),
utxo->outnum); utxo->outnum);
if (utxo_is_csv_locked(utxo, current_height))
return command_fail(cmd, JSONRPC2_INVALID_PARAMS,
"UTXO %s:%u is csv locked (%u)",
type_to_string(tmpctx,
struct bitcoin_txid,
&utxo->txid),
utxo->outnum,
utxo->close_info->csv);
/* It supplies more input. */ /* It supplies more input. */
if (!amount_sat_add(&input, input, utxo->amount)) if (!amount_sat_add(&input, input, utxo->amount))

View File

@ -826,7 +826,7 @@ msgstr ""
msgid "SELECT txid, outnum FROM utxoset WHERE spendheight is NULL" msgid "SELECT txid, outnum FROM utxoset WHERE spendheight is NULL"
msgstr "" msgstr ""
#: wallet/wallet.c:107 wallet/wallet.c:596 #: wallet/wallet.c:107 wallet/wallet.c:605
msgid "SELECT * from outputs WHERE prev_out_tx=? AND prev_out_index=?" msgid "SELECT * from outputs WHERE prev_out_tx=? AND prev_out_index=?"
msgstr "" msgstr ""
@ -862,463 +862,463 @@ msgstr ""
msgid "UPDATE outputs SET status=?, reserved_til=? WHERE prev_out_tx=? AND prev_out_index=?" msgid "UPDATE outputs SET status=?, reserved_til=? WHERE prev_out_tx=? AND prev_out_index=?"
msgstr "" msgstr ""
#: wallet/wallet.c:543 #: wallet/wallet.c:551
msgid "SELECT prev_out_tx, prev_out_index, value, type, status, keyindex, channel_id, peer_id, commitment_point, option_anchor_outputs, confirmation_height, spend_height, scriptpubkey , reserved_til, csv_lock FROM outputs WHERE status = ? OR (status = ? AND reserved_til <= ?)ORDER BY RANDOM();" msgid "SELECT prev_out_tx, prev_out_index, value, type, status, keyindex, channel_id, peer_id, commitment_point, option_anchor_outputs, confirmation_height, spend_height, scriptpubkey , reserved_til, csv_lock FROM outputs WHERE status = ? OR (status = ? AND reserved_til <= ?)ORDER BY RANDOM();"
msgstr "" msgstr ""
#: wallet/wallet.c:610 #: wallet/wallet.c:619
msgid "INSERT INTO outputs ( prev_out_tx, prev_out_index, value, type, status, keyindex, channel_id, peer_id, commitment_point, option_anchor_outputs, confirmation_height, spend_height, scriptpubkey, csv_lock) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);" msgid "INSERT INTO outputs ( prev_out_tx, prev_out_index, value, type, status, keyindex, channel_id, peer_id, commitment_point, option_anchor_outputs, confirmation_height, spend_height, scriptpubkey, csv_lock) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
msgstr "" msgstr ""
#: wallet/wallet.c:717 #: wallet/wallet.c:726
msgid "INSERT INTO shachains (min_index, num_valid) VALUES (?, 0);" msgid "INSERT INTO shachains (min_index, num_valid) VALUES (?, 0);"
msgstr "" msgstr ""
#: wallet/wallet.c:761 #: wallet/wallet.c:770
msgid "UPDATE shachains SET num_valid=?, min_index=? WHERE id=?" msgid "UPDATE shachains SET num_valid=?, min_index=? WHERE id=?"
msgstr "" msgstr ""
#: wallet/wallet.c:768 #: wallet/wallet.c:777
msgid "UPDATE shachain_known SET idx=?, hash=? WHERE shachain_id=? AND pos=?" msgid "UPDATE shachain_known SET idx=?, hash=? WHERE shachain_id=? AND pos=?"
msgstr "" msgstr ""
#: wallet/wallet.c:780 #: wallet/wallet.c:789
msgid "INSERT INTO shachain_known (shachain_id, pos, idx, hash) VALUES (?, ?, ?, ?);" msgid "INSERT INTO shachain_known (shachain_id, pos, idx, hash) VALUES (?, ?, ?, ?);"
msgstr "" msgstr ""
#: wallet/wallet.c:802 #: wallet/wallet.c:811
msgid "SELECT min_index, num_valid FROM shachains WHERE id=?" msgid "SELECT min_index, num_valid FROM shachains WHERE id=?"
msgstr "" msgstr ""
#: wallet/wallet.c:817 #: wallet/wallet.c:826
msgid "SELECT idx, hash, pos FROM shachain_known WHERE shachain_id=?" msgid "SELECT idx, hash, pos FROM shachain_known WHERE shachain_id=?"
msgstr "" msgstr ""
#: wallet/wallet.c:840 #: wallet/wallet.c:849
msgid "SELECT id, node_id, address FROM peers WHERE id=?;" msgid "SELECT id, node_id, address FROM peers WHERE id=?;"
msgstr "" msgstr ""
#: wallet/wallet.c:873 #: wallet/wallet.c:882
msgid "SELECT signature FROM htlc_sigs WHERE channelid = ?" msgid "SELECT signature FROM htlc_sigs WHERE channelid = ?"
msgstr "" msgstr ""
#: wallet/wallet.c:907 #: wallet/wallet.c:916
msgid "SELECT remote_ann_node_sig, remote_ann_bitcoin_sig FROM channels WHERE id = ?" msgid "SELECT remote_ann_node_sig, remote_ann_bitcoin_sig FROM channels WHERE id = ?"
msgstr "" msgstr ""
#: wallet/wallet.c:951 #: wallet/wallet.c:960
msgid "SELECT hstate, feerate_per_kw FROM channel_feerates WHERE channel_id = ?" msgid "SELECT hstate, feerate_per_kw FROM channel_feerates WHERE channel_id = ?"
msgstr "" msgstr ""
#: wallet/wallet.c:987 #: wallet/wallet.c:996
msgid "SELECT hstate, blockheight FROM channel_blockheights WHERE channel_id = ?" msgid "SELECT hstate, blockheight FROM channel_blockheights WHERE channel_id = ?"
msgstr "" msgstr ""
#: wallet/wallet.c:1020 #: wallet/wallet.c:1029
msgid "INSERT INTO channel_funding_inflights ( channel_id, funding_tx_id, funding_tx_outnum, funding_feerate, funding_satoshi, our_funding_satoshi, funding_psbt, last_tx, last_sig, lease_commit_sig, lease_chan_max_msat, lease_chan_max_ppt, lease_expiry, lease_blockheight_start) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);" msgid "INSERT INTO channel_funding_inflights ( channel_id, funding_tx_id, funding_tx_outnum, funding_feerate, funding_satoshi, our_funding_satoshi, funding_psbt, last_tx, last_sig, lease_commit_sig, lease_chan_max_msat, lease_chan_max_ppt, lease_expiry, lease_blockheight_start) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
msgstr "" msgstr ""
#: wallet/wallet.c:1076 #: wallet/wallet.c:1085
msgid "UPDATE channel_funding_inflights SET funding_psbt=?, funding_tx_remote_sigs_received=? WHERE channel_id=? AND funding_tx_id=? AND funding_tx_outnum=?" msgid "UPDATE channel_funding_inflights SET funding_psbt=?, funding_tx_remote_sigs_received=? WHERE channel_id=? AND funding_tx_id=? AND funding_tx_outnum=?"
msgstr "" msgstr ""
#: wallet/wallet.c:1099 #: wallet/wallet.c:1108
msgid "DELETE FROM channel_funding_inflights WHERE channel_id = ?" msgid "DELETE FROM channel_funding_inflights WHERE channel_id = ?"
msgstr "" msgstr ""
#: wallet/wallet.c:1169 #: wallet/wallet.c:1178
msgid "SELECT funding_tx_id, funding_tx_outnum, funding_feerate, funding_satoshi, our_funding_satoshi, funding_psbt, last_tx, last_sig, funding_tx_remote_sigs_received, lease_expiry, lease_commit_sig, lease_chan_max_msat, lease_chan_max_ppt, lease_blockheight_start FROM channel_funding_inflights WHERE channel_id = ? ORDER BY funding_feerate" msgid "SELECT funding_tx_id, funding_tx_outnum, funding_feerate, funding_satoshi, our_funding_satoshi, funding_psbt, last_tx, last_sig, funding_tx_remote_sigs_received, lease_expiry, lease_commit_sig, lease_chan_max_msat, lease_chan_max_ppt, lease_blockheight_start FROM channel_funding_inflights WHERE channel_id = ? ORDER BY funding_feerate"
msgstr "" msgstr ""
#: wallet/wallet.c:1437 #: wallet/wallet.c:1446
msgid "SELECT id FROM channels ORDER BY id DESC LIMIT 1;" msgid "SELECT id FROM channels ORDER BY id DESC LIMIT 1;"
msgstr "" msgstr ""
#: wallet/wallet.c:1454 #: wallet/wallet.c:1463
msgid "SELECT id, peer_id, short_channel_id, full_channel_id, channel_config_local, channel_config_remote, state, funder, channel_flags, minimum_depth, next_index_local, next_index_remote, next_htlc_id, funding_tx_id, funding_tx_outnum, funding_satoshi, our_funding_satoshi, funding_locked_remote, push_msatoshi, msatoshi_local, fundingkey_remote, revocation_basepoint_remote, payment_basepoint_remote, htlc_basepoint_remote, delayed_payment_basepoint_remote, per_commit_remote, old_per_commit_remote, local_feerate_per_kw, remote_feerate_per_kw, shachain_remote_id, shutdown_scriptpubkey_remote, shutdown_keyidx_local, last_sent_commit_state, last_sent_commit_id, last_tx, last_sig, last_was_revoke, first_blocknum, min_possible_feerate, max_possible_feerate, msatoshi_to_us_min, msatoshi_to_us_max, future_per_commitment_point, last_sent_commit, feerate_base, feerate_ppm, remote_upfront_shutdown_script, local_static_remotekey_start, remote_static_remotekey_start, option_anchor_outputs, shutdown_scriptpubkey_local, closer, state_change_reason, revocation_basepoint_local, payment_basepoint_local, htlc_basepoint_local, delayed_payment_basepoint_local, funding_pubkey_local, shutdown_wrong_txid, shutdown_wrong_outnum, lease_expiry, lease_commit_sig, lease_chan_max_msat, lease_chan_max_ppt FROM channels WHERE state != ?;" msgid "SELECT id, peer_id, short_channel_id, full_channel_id, channel_config_local, channel_config_remote, state, funder, channel_flags, minimum_depth, next_index_local, next_index_remote, next_htlc_id, funding_tx_id, funding_tx_outnum, funding_satoshi, our_funding_satoshi, funding_locked_remote, push_msatoshi, msatoshi_local, fundingkey_remote, revocation_basepoint_remote, payment_basepoint_remote, htlc_basepoint_remote, delayed_payment_basepoint_remote, per_commit_remote, old_per_commit_remote, local_feerate_per_kw, remote_feerate_per_kw, shachain_remote_id, shutdown_scriptpubkey_remote, shutdown_keyidx_local, last_sent_commit_state, last_sent_commit_id, last_tx, last_sig, last_was_revoke, first_blocknum, min_possible_feerate, max_possible_feerate, msatoshi_to_us_min, msatoshi_to_us_max, future_per_commitment_point, last_sent_commit, feerate_base, feerate_ppm, remote_upfront_shutdown_script, local_static_remotekey_start, remote_static_remotekey_start, option_anchor_outputs, shutdown_scriptpubkey_local, closer, state_change_reason, revocation_basepoint_local, payment_basepoint_local, htlc_basepoint_local, delayed_payment_basepoint_local, funding_pubkey_local, shutdown_wrong_txid, shutdown_wrong_outnum, lease_expiry, lease_commit_sig, lease_chan_max_msat, lease_chan_max_ppt FROM channels WHERE state != ?;"
msgstr "" msgstr ""
#: wallet/wallet.c:1566 #: wallet/wallet.c:1575
msgid "UPDATE channels SET in_payments_offered = COALESCE(in_payments_offered, 0) + 1 , in_msatoshi_offered = COALESCE(in_msatoshi_offered, 0) + ? WHERE id = ?;" msgid "UPDATE channels SET in_payments_offered = COALESCE(in_payments_offered, 0) + 1 , in_msatoshi_offered = COALESCE(in_msatoshi_offered, 0) + ? WHERE id = ?;"
msgstr "" msgstr ""
#: wallet/wallet.c:1572 #: wallet/wallet.c:1581
msgid "UPDATE channels SET in_payments_fulfilled = COALESCE(in_payments_fulfilled, 0) + 1 , in_msatoshi_fulfilled = COALESCE(in_msatoshi_fulfilled, 0) + ? WHERE id = ?;" msgid "UPDATE channels SET in_payments_fulfilled = COALESCE(in_payments_fulfilled, 0) + 1 , in_msatoshi_fulfilled = COALESCE(in_msatoshi_fulfilled, 0) + ? WHERE id = ?;"
msgstr "" msgstr ""
#: wallet/wallet.c:1578 #: wallet/wallet.c:1587
msgid "UPDATE channels SET out_payments_offered = COALESCE(out_payments_offered, 0) + 1 , out_msatoshi_offered = COALESCE(out_msatoshi_offered, 0) + ? WHERE id = ?;" msgid "UPDATE channels SET out_payments_offered = COALESCE(out_payments_offered, 0) + 1 , out_msatoshi_offered = COALESCE(out_msatoshi_offered, 0) + ? WHERE id = ?;"
msgstr "" msgstr ""
#: wallet/wallet.c:1584 #: wallet/wallet.c:1593
msgid "UPDATE channels SET out_payments_fulfilled = COALESCE(out_payments_fulfilled, 0) + 1 , out_msatoshi_fulfilled = COALESCE(out_msatoshi_fulfilled, 0) + ? WHERE id = ?;" msgid "UPDATE channels SET out_payments_fulfilled = COALESCE(out_payments_fulfilled, 0) + 1 , out_msatoshi_fulfilled = COALESCE(out_msatoshi_fulfilled, 0) + ? WHERE id = ?;"
msgstr "" msgstr ""
#: wallet/wallet.c:1629 #: wallet/wallet.c:1638
msgid "SELECT in_payments_offered, in_payments_fulfilled, in_msatoshi_offered, in_msatoshi_fulfilled, out_payments_offered, out_payments_fulfilled, out_msatoshi_offered, out_msatoshi_fulfilled FROM channels WHERE id = ?" msgid "SELECT in_payments_offered, in_payments_fulfilled, in_msatoshi_offered, in_msatoshi_fulfilled, out_payments_offered, out_payments_fulfilled, out_msatoshi_offered, out_msatoshi_fulfilled FROM channels WHERE id = ?"
msgstr "" msgstr ""
#: wallet/wallet.c:1658 #: wallet/wallet.c:1667
msgid "SELECT MIN(height), MAX(height) FROM blocks;" msgid "SELECT MIN(height), MAX(height) FROM blocks;"
msgstr "" msgstr ""
#: wallet/wallet.c:1680 #: wallet/wallet.c:1689
msgid "INSERT INTO channel_configs DEFAULT VALUES;" msgid "INSERT INTO channel_configs DEFAULT VALUES;"
msgstr "" msgstr ""
#: wallet/wallet.c:1692 #: wallet/wallet.c:1701
msgid "UPDATE channel_configs SET dust_limit_satoshis=?, max_htlc_value_in_flight_msat=?, channel_reserve_satoshis=?, htlc_minimum_msat=?, to_self_delay=?, max_accepted_htlcs=? WHERE id=?;" msgid "UPDATE channel_configs SET dust_limit_satoshis=?, max_htlc_value_in_flight_msat=?, channel_reserve_satoshis=?, htlc_minimum_msat=?, to_self_delay=?, max_accepted_htlcs=? WHERE id=?;"
msgstr "" msgstr ""
#: wallet/wallet.c:1716 #: wallet/wallet.c:1725
msgid "SELECT id, dust_limit_satoshis, max_htlc_value_in_flight_msat, channel_reserve_satoshis, htlc_minimum_msat, to_self_delay, max_accepted_htlcs FROM channel_configs WHERE id= ? ;" msgid "SELECT id, dust_limit_satoshis, max_htlc_value_in_flight_msat, channel_reserve_satoshis, htlc_minimum_msat, to_self_delay, max_accepted_htlcs FROM channel_configs WHERE id= ? ;"
msgstr "" msgstr ""
#: wallet/wallet.c:1750 #: wallet/wallet.c:1759
msgid "UPDATE channels SET remote_ann_node_sig=?, remote_ann_bitcoin_sig=? WHERE id=?" msgid "UPDATE channels SET remote_ann_node_sig=?, remote_ann_bitcoin_sig=? WHERE id=?"
msgstr "" msgstr ""
#: wallet/wallet.c:1769 #: wallet/wallet.c:1778
msgid "UPDATE channels SET shachain_remote_id=?, short_channel_id=?, full_channel_id=?, state=?, funder=?, channel_flags=?, minimum_depth=?, next_index_local=?, next_index_remote=?, next_htlc_id=?, funding_tx_id=?, funding_tx_outnum=?, funding_satoshi=?, our_funding_satoshi=?, funding_locked_remote=?, push_msatoshi=?, msatoshi_local=?, shutdown_scriptpubkey_remote=?, shutdown_keyidx_local=?, channel_config_local=?, last_tx=?, last_sig=?, last_was_revoke=?, min_possible_feerate=?, max_possible_feerate=?, msatoshi_to_us_min=?, msatoshi_to_us_max=?, feerate_base=?, feerate_ppm=?, remote_upfront_shutdown_script=?, local_static_remotekey_start=?, remote_static_remotekey_start=?, option_anchor_outputs=?, shutdown_scriptpubkey_local=?, closer=?, state_change_reason=?, shutdown_wrong_txid=?, shutdown_wrong_outnum=?, lease_expiry=?, lease_commit_sig=?, lease_chan_max_msat=?, lease_chan_max_ppt=? WHERE id=?" msgid "UPDATE channels SET shachain_remote_id=?, short_channel_id=?, full_channel_id=?, state=?, funder=?, channel_flags=?, minimum_depth=?, next_index_local=?, next_index_remote=?, next_htlc_id=?, funding_tx_id=?, funding_tx_outnum=?, funding_satoshi=?, our_funding_satoshi=?, funding_locked_remote=?, push_msatoshi=?, msatoshi_local=?, shutdown_scriptpubkey_remote=?, shutdown_keyidx_local=?, channel_config_local=?, last_tx=?, last_sig=?, last_was_revoke=?, min_possible_feerate=?, max_possible_feerate=?, msatoshi_to_us_min=?, msatoshi_to_us_max=?, feerate_base=?, feerate_ppm=?, remote_upfront_shutdown_script=?, local_static_remotekey_start=?, remote_static_remotekey_start=?, option_anchor_outputs=?, shutdown_scriptpubkey_local=?, closer=?, state_change_reason=?, shutdown_wrong_txid=?, shutdown_wrong_outnum=?, lease_expiry=?, lease_commit_sig=?, lease_chan_max_msat=?, lease_chan_max_ppt=? WHERE id=?"
msgstr "" msgstr ""
#: wallet/wallet.c:1878 #: wallet/wallet.c:1887
msgid "UPDATE channels SET fundingkey_remote=?, revocation_basepoint_remote=?, payment_basepoint_remote=?, htlc_basepoint_remote=?, delayed_payment_basepoint_remote=?, per_commit_remote=?, old_per_commit_remote=?, channel_config_remote=?, future_per_commitment_point=? WHERE id=?" msgid "UPDATE channels SET fundingkey_remote=?, revocation_basepoint_remote=?, payment_basepoint_remote=?, htlc_basepoint_remote=?, delayed_payment_basepoint_remote=?, per_commit_remote=?, old_per_commit_remote=?, channel_config_remote=?, future_per_commitment_point=? WHERE id=?"
msgstr "" msgstr ""
#: wallet/wallet.c:1905 #: wallet/wallet.c:1914
msgid "DELETE FROM channel_feerates WHERE channel_id=?" msgid "DELETE FROM channel_feerates WHERE channel_id=?"
msgstr "" msgstr ""
#: wallet/wallet.c:1915 #: wallet/wallet.c:1924
msgid "INSERT INTO channel_feerates VALUES(?, ?, ?)" msgid "INSERT INTO channel_feerates VALUES(?, ?, ?)"
msgstr "" msgstr ""
#: wallet/wallet.c:1924 #: wallet/wallet.c:1933
msgid "DELETE FROM channel_blockheights WHERE channel_id=?" msgid "DELETE FROM channel_blockheights WHERE channel_id=?"
msgstr "" msgstr ""
#: wallet/wallet.c:1934 #: wallet/wallet.c:1943
msgid "INSERT INTO channel_blockheights VALUES(?, ?, ?)" msgid "INSERT INTO channel_blockheights VALUES(?, ?, ?)"
msgstr "" msgstr ""
#: wallet/wallet.c:1951 #: wallet/wallet.c:1960
msgid "UPDATE channels SET last_sent_commit=? WHERE id=?" msgid "UPDATE channels SET last_sent_commit=? WHERE id=?"
msgstr "" msgstr ""
#: wallet/wallet.c:1974 #: wallet/wallet.c:1983
msgid "INSERT INTO channel_state_changes ( channel_id, timestamp, old_state, new_state, cause, message) VALUES (?, ?, ?, ?, ?, ?);" msgid "INSERT INTO channel_state_changes ( channel_id, timestamp, old_state, new_state, cause, message) VALUES (?, ?, ?, ?, ?, ?);"
msgstr "" msgstr ""
#: wallet/wallet.c:2002 #: wallet/wallet.c:2011
msgid "SELECT timestamp, old_state, new_state, cause, message FROM channel_state_changes WHERE channel_id = ? ORDER BY timestamp ASC;" msgid "SELECT timestamp, old_state, new_state, cause, message FROM channel_state_changes WHERE channel_id = ? ORDER BY timestamp ASC;"
msgstr "" msgstr ""
#: wallet/wallet.c:2031 #: wallet/wallet.c:2040
msgid "SELECT id FROM peers WHERE node_id = ?" msgid "SELECT id FROM peers WHERE node_id = ?"
msgstr "" msgstr ""
#: wallet/wallet.c:2043 #: wallet/wallet.c:2052
msgid "UPDATE peers SET address = ? WHERE id = ?" msgid "UPDATE peers SET address = ? WHERE id = ?"
msgstr "" msgstr ""
#: wallet/wallet.c:2052 #: wallet/wallet.c:2061
msgid "INSERT INTO peers (node_id, address) VALUES (?, ?);" msgid "INSERT INTO peers (node_id, address) VALUES (?, ?);"
msgstr "" msgstr ""
#: wallet/wallet.c:2073 #: wallet/wallet.c:2082
msgid "INSERT INTO channels ( peer_id, first_blocknum, id, revocation_basepoint_local, payment_basepoint_local, htlc_basepoint_local, delayed_payment_basepoint_local, funding_pubkey_local) VALUES (?, ?, ?, ?, ?, ?, ?, ?);" msgid "INSERT INTO channels ( peer_id, first_blocknum, id, revocation_basepoint_local, payment_basepoint_local, htlc_basepoint_local, delayed_payment_basepoint_local, funding_pubkey_local) VALUES (?, ?, ?, ?, ?, ?, ?, ?);"
msgstr "" msgstr ""
#: wallet/wallet.c:2114 #: wallet/wallet.c:2123
msgid "DELETE FROM channel_htlcs WHERE channel_id=?" msgid "DELETE FROM channel_htlcs WHERE channel_id=?"
msgstr "" msgstr ""
#: wallet/wallet.c:2120 #: wallet/wallet.c:2129
msgid "DELETE FROM htlc_sigs WHERE channelid=?" msgid "DELETE FROM htlc_sigs WHERE channelid=?"
msgstr "" msgstr ""
#: wallet/wallet.c:2126 #: wallet/wallet.c:2135
msgid "DELETE FROM channeltxs WHERE channel_id=?" msgid "DELETE FROM channeltxs WHERE channel_id=?"
msgstr "" msgstr ""
#: wallet/wallet.c:2133 #: wallet/wallet.c:2142
msgid "DELETE FROM channel_funding_inflights WHERE channel_id=?" msgid "DELETE FROM channel_funding_inflights WHERE channel_id=?"
msgstr "" msgstr ""
#: wallet/wallet.c:2139 #: wallet/wallet.c:2148
msgid "DELETE FROM shachains WHERE id IN ( SELECT shachain_remote_id FROM channels WHERE channels.id=?)" msgid "DELETE FROM shachains WHERE id IN ( SELECT shachain_remote_id FROM channels WHERE channels.id=?)"
msgstr "" msgstr ""
#: wallet/wallet.c:2149 #: wallet/wallet.c:2158
msgid "UPDATE channels SET state=?, peer_id=? WHERE channels.id=?" msgid "UPDATE channels SET state=?, peer_id=? WHERE channels.id=?"
msgstr "" msgstr ""
#: wallet/wallet.c:2163 #: wallet/wallet.c:2172
msgid "SELECT * FROM channels WHERE peer_id = ?;" msgid "SELECT * FROM channels WHERE peer_id = ?;"
msgstr "" msgstr ""
#: wallet/wallet.c:2171 #: wallet/wallet.c:2180
msgid "DELETE FROM peers WHERE id=?" msgid "DELETE FROM peers WHERE id=?"
msgstr "" msgstr ""
#: wallet/wallet.c:2182 #: wallet/wallet.c:2191
msgid "UPDATE outputs SET confirmation_height = ? WHERE prev_out_tx = ?" msgid "UPDATE outputs SET confirmation_height = ? WHERE prev_out_tx = ?"
msgstr "" msgstr ""
#: wallet/wallet.c:2285 #: wallet/wallet.c:2294
msgid "INSERT INTO channel_htlcs ( channel_id, channel_htlc_id, direction, msatoshi, cltv_expiry, payment_hash, payment_key, hstate, shared_secret, routing_onion, received_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);" msgid "INSERT INTO channel_htlcs ( channel_id, channel_htlc_id, direction, msatoshi, cltv_expiry, payment_hash, payment_key, hstate, shared_secret, routing_onion, received_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
msgstr "" msgstr ""
#: wallet/wallet.c:2338 #: wallet/wallet.c:2347
msgid "INSERT INTO channel_htlcs ( channel_id, channel_htlc_id, direction, origin_htlc, msatoshi, cltv_expiry, payment_hash, payment_key, hstate, routing_onion, malformed_onion, partid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0, ?);" msgid "INSERT INTO channel_htlcs ( channel_id, channel_htlc_id, direction, origin_htlc, msatoshi, cltv_expiry, payment_hash, payment_key, hstate, routing_onion, malformed_onion, partid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0, ?);"
msgstr "" msgstr ""
#: wallet/wallet.c:2399 #: wallet/wallet.c:2408
msgid "UPDATE channel_htlcs SET hstate=?, payment_key=?, malformed_onion=?, failuremsg=?, localfailmsg=?, we_filled=? WHERE id=?" msgid "UPDATE channel_htlcs SET hstate=?, payment_key=?, malformed_onion=?, failuremsg=?, localfailmsg=?, we_filled=? WHERE id=?"
msgstr "" msgstr ""
#: wallet/wallet.c:2616 #: wallet/wallet.c:2625
msgid "SELECT id, channel_htlc_id, msatoshi, cltv_expiry, hstate, payment_hash, payment_key, routing_onion, failuremsg, malformed_onion, origin_htlc, shared_secret, received_time, we_filled FROM channel_htlcs WHERE direction= ? AND channel_id= ? AND hstate != ?" msgid "SELECT id, channel_htlc_id, msatoshi, cltv_expiry, hstate, payment_hash, payment_key, routing_onion, failuremsg, malformed_onion, origin_htlc, shared_secret, received_time, we_filled FROM channel_htlcs WHERE direction= ? AND channel_id= ? AND hstate != ?"
msgstr "" msgstr ""
#: wallet/wallet.c:2663 #: wallet/wallet.c:2672
msgid "SELECT id, channel_htlc_id, msatoshi, cltv_expiry, hstate, payment_hash, payment_key, routing_onion, failuremsg, malformed_onion, origin_htlc, shared_secret, received_time, partid, localfailmsg FROM channel_htlcs WHERE direction = ? AND channel_id = ? AND hstate != ?" msgid "SELECT id, channel_htlc_id, msatoshi, cltv_expiry, hstate, payment_hash, payment_key, routing_onion, failuremsg, malformed_onion, origin_htlc, shared_secret, received_time, partid, localfailmsg FROM channel_htlcs WHERE direction = ? AND channel_id = ? AND hstate != ?"
msgstr "" msgstr ""
#: wallet/wallet.c:2794 #: wallet/wallet.c:2803
msgid "SELECT channel_id, direction, cltv_expiry, channel_htlc_id, payment_hash FROM channel_htlcs WHERE channel_id = ?;" msgid "SELECT channel_id, direction, cltv_expiry, channel_htlc_id, payment_hash FROM channel_htlcs WHERE channel_id = ?;"
msgstr "" msgstr ""
#: wallet/wallet.c:2828 #: wallet/wallet.c:2837
msgid "DELETE FROM channel_htlcs WHERE direction = ? AND origin_htlc = ? AND payment_hash = ? AND partid = ?;" msgid "DELETE FROM channel_htlcs WHERE direction = ? AND origin_htlc = ? AND payment_hash = ? AND partid = ?;"
msgstr "" msgstr ""
#: wallet/wallet.c:2881 #: wallet/wallet.c:2890
msgid "SELECT status FROM payments WHERE payment_hash=? AND partid = ?;" msgid "SELECT status FROM payments WHERE payment_hash=? AND partid = ?;"
msgstr "" msgstr ""
#: wallet/wallet.c:2899 #: wallet/wallet.c:2908
msgid "INSERT INTO payments ( status, payment_hash, destination, msatoshi, timestamp, path_secrets, route_nodes, route_channels, msatoshi_sent, description, bolt11, total_msat, partid, local_offer_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);" msgid "INSERT INTO payments ( status, payment_hash, destination, msatoshi, timestamp, path_secrets, route_nodes, route_channels, msatoshi_sent, description, bolt11, total_msat, partid, local_offer_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
msgstr "" msgstr ""
#: wallet/wallet.c:2988 #: wallet/wallet.c:2997
msgid "DELETE FROM payments WHERE payment_hash = ? AND partid = ?" msgid "DELETE FROM payments WHERE payment_hash = ? AND partid = ?"
msgstr "" msgstr ""
#: wallet/wallet.c:3002 #: wallet/wallet.c:3011
msgid "DELETE FROM payments WHERE payment_hash = ?" msgid "DELETE FROM payments WHERE payment_hash = ?"
msgstr "" msgstr ""
#: wallet/wallet.c:3103 #: wallet/wallet.c:3112
msgid "SELECT id, status, destination, msatoshi, payment_hash, timestamp, payment_preimage, path_secrets, route_nodes, route_channels, msatoshi_sent, description, bolt11, failonionreply, total_msat, partid, local_offer_id FROM payments WHERE payment_hash = ? AND partid = ?" msgid "SELECT id, status, destination, msatoshi, payment_hash, timestamp, payment_preimage, path_secrets, route_nodes, route_channels, msatoshi_sent, description, bolt11, failonionreply, total_msat, partid, local_offer_id FROM payments WHERE payment_hash = ? AND partid = ?"
msgstr "" msgstr ""
#: wallet/wallet.c:3153 #: wallet/wallet.c:3162
msgid "UPDATE payments SET status=? WHERE payment_hash=? AND partid=?" msgid "UPDATE payments SET status=? WHERE payment_hash=? AND partid=?"
msgstr "" msgstr ""
#: wallet/wallet.c:3163 #: wallet/wallet.c:3172
msgid "UPDATE payments SET payment_preimage=? WHERE payment_hash=? AND partid=?" msgid "UPDATE payments SET payment_preimage=? WHERE payment_hash=? AND partid=?"
msgstr "" msgstr ""
#: wallet/wallet.c:3173 #: wallet/wallet.c:3182
msgid "UPDATE payments SET path_secrets = NULL , route_nodes = NULL , route_channels = NULL WHERE payment_hash = ? AND partid = ?;" msgid "UPDATE payments SET path_secrets = NULL , route_nodes = NULL , route_channels = NULL WHERE payment_hash = ? AND partid = ?;"
msgstr "" msgstr ""
#: wallet/wallet.c:3205 #: wallet/wallet.c:3214
msgid "SELECT failonionreply, faildestperm, failindex, failcode, failnode, failchannel, failupdate, faildetail, faildirection FROM payments WHERE payment_hash=? AND partid=?;" msgid "SELECT failonionreply, faildestperm, failindex, failcode, failnode, failchannel, failupdate, faildetail, faildirection FROM payments WHERE payment_hash=? AND partid=?;"
msgstr "" msgstr ""
#: wallet/wallet.c:3272 #: wallet/wallet.c:3281
msgid "UPDATE payments SET failonionreply=? , faildestperm=? , failindex=? , failcode=? , failnode=? , failchannel=? , failupdate=? , faildetail=? , faildirection=? WHERE payment_hash=? AND partid=?;" msgid "UPDATE payments SET failonionreply=? , faildestperm=? , failindex=? , failcode=? , failnode=? , failchannel=? , failupdate=? , faildetail=? , faildirection=? WHERE payment_hash=? AND partid=?;"
msgstr "" msgstr ""
#: wallet/wallet.c:3331 #: wallet/wallet.c:3340
msgid "SELECT id, status, destination, msatoshi, payment_hash, timestamp, payment_preimage, path_secrets, route_nodes, route_channels, msatoshi_sent, description, bolt11, failonionreply, total_msat, partid, local_offer_id FROM payments WHERE payment_hash = ? ORDER BY id;" msgid "SELECT id, status, destination, msatoshi, payment_hash, timestamp, payment_preimage, path_secrets, route_nodes, route_channels, msatoshi_sent, description, bolt11, failonionreply, total_msat, partid, local_offer_id FROM payments WHERE payment_hash = ? ORDER BY id;"
msgstr "" msgstr ""
#: wallet/wallet.c:3354 #: wallet/wallet.c:3363
msgid "SELECT id, status, destination, msatoshi, payment_hash, timestamp, payment_preimage, path_secrets, route_nodes, route_channels, msatoshi_sent, description, bolt11, failonionreply, total_msat, partid, local_offer_id FROM payments ORDER BY id;" msgid "SELECT id, status, destination, msatoshi, payment_hash, timestamp, payment_preimage, path_secrets, route_nodes, route_channels, msatoshi_sent, description, bolt11, failonionreply, total_msat, partid, local_offer_id FROM payments ORDER BY id;"
msgstr "" msgstr ""
#: wallet/wallet.c:3405 #: wallet/wallet.c:3414
msgid "SELECT id, status, destination, msatoshi, payment_hash, timestamp, payment_preimage, path_secrets, route_nodes, route_channels, msatoshi_sent, description, bolt11, failonionreply, total_msat, partid, local_offer_id FROM payments WHERE local_offer_id = ?;" msgid "SELECT id, status, destination, msatoshi, payment_hash, timestamp, payment_preimage, path_secrets, route_nodes, route_channels, msatoshi_sent, description, bolt11, failonionreply, total_msat, partid, local_offer_id FROM payments WHERE local_offer_id = ?;"
msgstr "" msgstr ""
#: wallet/wallet.c:3450 #: wallet/wallet.c:3459
msgid "DELETE FROM htlc_sigs WHERE channelid = ?" msgid "DELETE FROM htlc_sigs WHERE channelid = ?"
msgstr "" msgstr ""
#: wallet/wallet.c:3457 #: wallet/wallet.c:3466
msgid "INSERT INTO htlc_sigs (channelid, signature) VALUES (?, ?)" msgid "INSERT INTO htlc_sigs (channelid, signature) VALUES (?, ?)"
msgstr "" msgstr ""
#: wallet/wallet.c:3469 #: wallet/wallet.c:3478
msgid "SELECT blobval FROM vars WHERE name='genesis_hash'" msgid "SELECT blobval FROM vars WHERE name='genesis_hash'"
msgstr "" msgstr ""
#: wallet/wallet.c:3493 #: wallet/wallet.c:3502
msgid "INSERT INTO vars (name, blobval) VALUES ('genesis_hash', ?);" msgid "INSERT INTO vars (name, blobval) VALUES ('genesis_hash', ?);"
msgstr "" msgstr ""
#: wallet/wallet.c:3511 #: wallet/wallet.c:3520
msgid "SELECT txid, outnum FROM utxoset WHERE spendheight < ?" msgid "SELECT txid, outnum FROM utxoset WHERE spendheight < ?"
msgstr "" msgstr ""
#: wallet/wallet.c:3523 #: wallet/wallet.c:3532
msgid "DELETE FROM utxoset WHERE spendheight < ?" msgid "DELETE FROM utxoset WHERE spendheight < ?"
msgstr "" msgstr ""
#: wallet/wallet.c:3531 wallet/wallet.c:3645 #: wallet/wallet.c:3540 wallet/wallet.c:3654
msgid "INSERT INTO blocks (height, hash, prev_hash) VALUES (?, ?, ?);" msgid "INSERT INTO blocks (height, hash, prev_hash) VALUES (?, ?, ?);"
msgstr "" msgstr ""
#: wallet/wallet.c:3550 #: wallet/wallet.c:3559
msgid "DELETE FROM blocks WHERE hash = ?" msgid "DELETE FROM blocks WHERE hash = ?"
msgstr "" msgstr ""
#: wallet/wallet.c:3556 #: wallet/wallet.c:3565
msgid "SELECT * FROM blocks WHERE height >= ?;" msgid "SELECT * FROM blocks WHERE height >= ?;"
msgstr "" msgstr ""
#: wallet/wallet.c:3565 #: wallet/wallet.c:3574
msgid "DELETE FROM blocks WHERE height > ?" msgid "DELETE FROM blocks WHERE height > ?"
msgstr "" msgstr ""
#: wallet/wallet.c:3577 #: wallet/wallet.c:3586
msgid "UPDATE outputs SET spend_height = ?, status = ? WHERE prev_out_tx = ? AND prev_out_index = ?" msgid "UPDATE outputs SET spend_height = ?, status = ? WHERE prev_out_tx = ? AND prev_out_index = ?"
msgstr "" msgstr ""
#: wallet/wallet.c:3595 #: wallet/wallet.c:3604
msgid "UPDATE utxoset SET spendheight = ? WHERE txid = ? AND outnum = ?" msgid "UPDATE utxoset SET spendheight = ? WHERE txid = ? AND outnum = ?"
msgstr "" msgstr ""
#: wallet/wallet.c:3618 wallet/wallet.c:3656 #: wallet/wallet.c:3627 wallet/wallet.c:3665
msgid "INSERT INTO utxoset ( txid, outnum, blockheight, spendheight, txindex, scriptpubkey, satoshis) VALUES(?, ?, ?, ?, ?, ?, ?);" msgid "INSERT INTO utxoset ( txid, outnum, blockheight, spendheight, txindex, scriptpubkey, satoshis) VALUES(?, ?, ?, ?, ?, ?, ?);"
msgstr "" msgstr ""
#: wallet/wallet.c:3682 #: wallet/wallet.c:3691
msgid "SELECT height FROM blocks WHERE height = ?" msgid "SELECT height FROM blocks WHERE height = ?"
msgstr "" msgstr ""
#: wallet/wallet.c:3695 #: wallet/wallet.c:3704
msgid "SELECT txid, spendheight, scriptpubkey, satoshis FROM utxoset WHERE blockheight = ? AND txindex = ? AND outnum = ? AND spendheight IS NULL" msgid "SELECT txid, spendheight, scriptpubkey, satoshis FROM utxoset WHERE blockheight = ? AND txindex = ? AND outnum = ? AND spendheight IS NULL"
msgstr "" msgstr ""
#: wallet/wallet.c:3737 #: wallet/wallet.c:3746
msgid "SELECT blockheight, txindex, outnum FROM utxoset WHERE spendheight = ?" msgid "SELECT blockheight, txindex, outnum FROM utxoset WHERE spendheight = ?"
msgstr "" msgstr ""
#: wallet/wallet.c:3768 wallet/wallet.c:3928 #: wallet/wallet.c:3777 wallet/wallet.c:3937
msgid "SELECT blockheight FROM transactions WHERE id=?" msgid "SELECT blockheight FROM transactions WHERE id=?"
msgstr "" msgstr ""
#: wallet/wallet.c:3778 #: wallet/wallet.c:3787
msgid "INSERT INTO transactions ( id, blockheight, txindex, rawtx) VALUES (?, ?, ?, ?);" msgid "INSERT INTO transactions ( id, blockheight, txindex, rawtx) VALUES (?, ?, ?, ?);"
msgstr "" msgstr ""
#: wallet/wallet.c:3799 #: wallet/wallet.c:3808
msgid "UPDATE transactions SET blockheight = ?, txindex = ? WHERE id = ?" msgid "UPDATE transactions SET blockheight = ?, txindex = ? WHERE id = ?"
msgstr "" msgstr ""
#: wallet/wallet.c:3816 #: wallet/wallet.c:3825
msgid "INSERT INTO transaction_annotations (txid, idx, location, type, channel) VALUES (?, ?, ?, ?, ?) ON CONFLICT(txid,idx) DO NOTHING;" msgid "INSERT INTO transaction_annotations (txid, idx, location, type, channel) VALUES (?, ?, ?, ?, ?) ON CONFLICT(txid,idx) DO NOTHING;"
msgstr "" msgstr ""
#: wallet/wallet.c:3848 #: wallet/wallet.c:3857
msgid "SELECT type, channel_id FROM transactions WHERE id=?" msgid "SELECT type, channel_id FROM transactions WHERE id=?"
msgstr "" msgstr ""
#: wallet/wallet.c:3864 #: wallet/wallet.c:3873
msgid "UPDATE transactions SET type = ?, channel_id = ? WHERE id = ?" msgid "UPDATE transactions SET type = ?, channel_id = ? WHERE id = ?"
msgstr "" msgstr ""
#: wallet/wallet.c:3883 #: wallet/wallet.c:3892
msgid "SELECT type FROM transactions WHERE id=?" msgid "SELECT type FROM transactions WHERE id=?"
msgstr "" msgstr ""
#: wallet/wallet.c:3906 #: wallet/wallet.c:3915
msgid "SELECT rawtx FROM transactions WHERE id=?" msgid "SELECT rawtx FROM transactions WHERE id=?"
msgstr "" msgstr ""
#: wallet/wallet.c:3952 #: wallet/wallet.c:3961
msgid "SELECT blockheight, txindex FROM transactions WHERE id=?" msgid "SELECT blockheight, txindex FROM transactions WHERE id=?"
msgstr "" msgstr ""
#: wallet/wallet.c:3980 #: wallet/wallet.c:3989
msgid "SELECT id FROM transactions WHERE blockheight=?" msgid "SELECT id FROM transactions WHERE blockheight=?"
msgstr "" msgstr ""
#: wallet/wallet.c:3999 #: wallet/wallet.c:4008
msgid "INSERT INTO channeltxs ( channel_id, type, transaction_id, input_num, blockheight) VALUES (?, ?, ?, ?, ?);" msgid "INSERT INTO channeltxs ( channel_id, type, transaction_id, input_num, blockheight) VALUES (?, ?, ?, ?, ?);"
msgstr "" msgstr ""
#: wallet/wallet.c:4023 #: wallet/wallet.c:4032
msgid "SELECT DISTINCT(channel_id) FROM channeltxs WHERE type = ?;" msgid "SELECT DISTINCT(channel_id) FROM channeltxs WHERE type = ?;"
msgstr "" msgstr ""
#: wallet/wallet.c:4044 #: wallet/wallet.c:4053
msgid "SELECT c.type, c.blockheight, t.rawtx, c.input_num, c.blockheight - t.blockheight + 1 AS depth, t.id as txid FROM channeltxs c JOIN transactions t ON t.id = c.transaction_id WHERE c.channel_id = ? ORDER BY c.id ASC;" msgid "SELECT c.type, c.blockheight, t.rawtx, c.input_num, c.blockheight - t.blockheight + 1 AS depth, t.id as txid FROM channeltxs c JOIN transactions t ON t.id = c.transaction_id WHERE c.channel_id = ? ORDER BY c.id ASC;"
msgstr "" msgstr ""
#: wallet/wallet.c:4089 #: wallet/wallet.c:4098
msgid "UPDATE forwarded_payments SET in_msatoshi=?, out_msatoshi=?, state=?, resolved_time=?, failcode=? WHERE in_htlc_id=?" msgid "UPDATE forwarded_payments SET in_msatoshi=?, out_msatoshi=?, state=?, resolved_time=?, failcode=? WHERE in_htlc_id=?"
msgstr "" msgstr ""
#: wallet/wallet.c:4147 #: wallet/wallet.c:4156
msgid "INSERT INTO forwarded_payments ( in_htlc_id, out_htlc_id, in_channel_scid, out_channel_scid, in_msatoshi, out_msatoshi, state, received_time, resolved_time, failcode) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);" msgid "INSERT INTO forwarded_payments ( in_htlc_id, out_htlc_id, in_channel_scid, out_channel_scid, in_msatoshi, out_msatoshi, state, received_time, resolved_time, failcode) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
msgstr "" msgstr ""
#: wallet/wallet.c:4206 #: wallet/wallet.c:4215
msgid "SELECT CAST(COALESCE(SUM(in_msatoshi - out_msatoshi), 0) AS BIGINT)FROM forwarded_payments WHERE state = ?;" msgid "SELECT CAST(COALESCE(SUM(in_msatoshi - out_msatoshi), 0) AS BIGINT)FROM forwarded_payments WHERE state = ?;"
msgstr "" msgstr ""
#: wallet/wallet.c:4255 #: wallet/wallet.c:4264
msgid "SELECT f.state, in_msatoshi, out_msatoshi, hin.payment_hash as payment_hash, in_channel_scid, out_channel_scid, f.received_time, f.resolved_time, f.failcode FROM forwarded_payments f LEFT JOIN channel_htlcs hin ON (f.in_htlc_id = hin.id) WHERE (1 = ? OR f.state = ?) AND (1 = ? OR f.in_channel_scid = ?) AND (1 = ? OR f.out_channel_scid = ?)" msgid "SELECT f.state, in_msatoshi, out_msatoshi, hin.payment_hash as payment_hash, in_channel_scid, out_channel_scid, f.received_time, f.resolved_time, f.failcode FROM forwarded_payments f LEFT JOIN channel_htlcs hin ON (f.in_htlc_id = hin.id) WHERE (1 = ? OR f.state = ?) AND (1 = ? OR f.in_channel_scid = ?) AND (1 = ? OR f.out_channel_scid = ?)"
msgstr "" msgstr ""
#: wallet/wallet.c:4377 #: wallet/wallet.c:4386
msgid "SELECT t.id, t.rawtx, t.blockheight, t.txindex, t.type as txtype, c2.short_channel_id as txchan, a.location, a.idx as ann_idx, a.type as annotation_type, c.short_channel_id FROM transactions t LEFT JOIN transaction_annotations a ON (a.txid = t.id) LEFT JOIN channels c ON (a.channel = c.id) LEFT JOIN channels c2 ON (t.channel_id = c2.id) ORDER BY t.blockheight, t.txindex ASC" msgid "SELECT t.id, t.rawtx, t.blockheight, t.txindex, t.type as txtype, c2.short_channel_id as txchan, a.location, a.idx as ann_idx, a.type as annotation_type, c.short_channel_id FROM transactions t LEFT JOIN transaction_annotations a ON (a.txid = t.id) LEFT JOIN channels c ON (a.channel = c.id) LEFT JOIN channels c2 ON (t.channel_id = c2.id) ORDER BY t.blockheight, t.txindex ASC"
msgstr "" msgstr ""
#: wallet/wallet.c:4471 #: wallet/wallet.c:4480
msgid "INSERT INTO penalty_bases ( channel_id, commitnum, txid, outnum, amount) VALUES (?, ?, ?, ?, ?);" msgid "INSERT INTO penalty_bases ( channel_id, commitnum, txid, outnum, amount) VALUES (?, ?, ?, ?, ?);"
msgstr "" msgstr ""
#: wallet/wallet.c:4496 #: wallet/wallet.c:4505
msgid "SELECT commitnum, txid, outnum, amount FROM penalty_bases WHERE channel_id = ?" msgid "SELECT commitnum, txid, outnum, amount FROM penalty_bases WHERE channel_id = ?"
msgstr "" msgstr ""
#: wallet/wallet.c:4520 #: wallet/wallet.c:4529
msgid "DELETE FROM penalty_bases WHERE channel_id = ? AND commitnum = ?" msgid "DELETE FROM penalty_bases WHERE channel_id = ? AND commitnum = ?"
msgstr "" msgstr ""
#: wallet/wallet.c:4538 #: wallet/wallet.c:4547
msgid "SELECT 1 FROM offers WHERE offer_id = ?;" msgid "SELECT 1 FROM offers WHERE offer_id = ?;"
msgstr "" msgstr ""
#: wallet/wallet.c:4551 #: wallet/wallet.c:4560
msgid "INSERT INTO offers ( offer_id, bolt12, label, status) VALUES (?, ?, ?, ?);" msgid "INSERT INTO offers ( offer_id, bolt12, label, status) VALUES (?, ?, ?, ?);"
msgstr "" msgstr ""
#: wallet/wallet.c:4578 #: wallet/wallet.c:4587
msgid "SELECT bolt12, label, status FROM offers WHERE offer_id = ?;" msgid "SELECT bolt12, label, status FROM offers WHERE offer_id = ?;"
msgstr "" msgstr ""
#: wallet/wallet.c:4606 #: wallet/wallet.c:4615
msgid "SELECT offer_id FROM offers;" msgid "SELECT offer_id FROM offers;"
msgstr "" msgstr ""
#: wallet/wallet.c:4632 #: wallet/wallet.c:4641
msgid "UPDATE offers SET status=? WHERE offer_id = ?;" msgid "UPDATE offers SET status=? WHERE offer_id = ?;"
msgstr "" msgstr ""
#: wallet/wallet.c:4643 #: wallet/wallet.c:4652
msgid "UPDATE invoices SET state=? WHERE state=? AND local_offer_id = ?;" msgid "UPDATE invoices SET state=? WHERE state=? AND local_offer_id = ?;"
msgstr "" msgstr ""
#: wallet/wallet.c:4671 #: wallet/wallet.c:4680
msgid "SELECT status FROM offers WHERE offer_id = ?;" msgid "SELECT status FROM offers WHERE offer_id = ?;"
msgstr "" msgstr ""
@ -1337,4 +1337,4 @@ msgstr ""
#: wallet/test/run-wallet.c:1696 #: wallet/test/run-wallet.c:1696
msgid "INSERT INTO channels (id) VALUES (1);" msgid "INSERT INTO channels (id) VALUES (1);"
msgstr "" msgstr ""
# SHA256STAMP:8f553a6c38a1b4080ab33ce6fa902657bf4bf40dd7b5308ba0354f387ce48c95 # SHA256STAMP:c273019025094b8ac8311eb7a8489207006506ca46a1963c5924e1947e4c60d5

View File

@ -516,7 +516,8 @@ static bool excluded(const struct utxo **excludes,
return false; return false;
} }
static bool deep_enough(u32 maxheight, const struct utxo *utxo) static bool deep_enough(u32 maxheight, const struct utxo *utxo,
u32 current_blockheight)
{ {
/* If we require confirmations check that we have a /* If we require confirmations check that we have a
* confirmation height and that it is below the required * confirmation height and that it is below the required
@ -525,6 +526,13 @@ static bool deep_enough(u32 maxheight, const struct utxo *utxo)
return true; return true;
if (!utxo->blockheight) if (!utxo->blockheight)
return false; return false;
/* Check that CSV-lock is now free! */
if (utxo->close_info) {
u32 csv_free = *utxo->blockheight + utxo->close_info->csv;
assert(csv_free > *utxo->blockheight);
if (csv_free < current_blockheight)
return false;
}
return *utxo->blockheight <= maxheight; return *utxo->blockheight <= maxheight;
} }
@ -572,7 +580,8 @@ struct utxo *wallet_find_utxo(const tal_t *ctx, struct wallet *w,
utxo = NULL; utxo = NULL;
while (!utxo && db_step(stmt)) { while (!utxo && db_step(stmt)) {
utxo = wallet_stmt2output(ctx, stmt); utxo = wallet_stmt2output(ctx, stmt);
if (excluded(excludes, utxo) || !deep_enough(maxheight, utxo)) if (excluded(excludes, utxo)
|| !deep_enough(maxheight, utxo, current_blockheight))
utxo = tal_free(utxo); utxo = tal_free(utxo);
} }