mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-01-18 21:35:11 +01:00
lightningd: put min/max feerates into db, struct channel.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
4234321f7e
commit
6bb47276ce
@ -151,7 +151,9 @@ struct channel *new_channel(struct peer *peer, u64 dbid,
|
|||||||
bool last_was_revoke,
|
bool last_was_revoke,
|
||||||
/* NULL or stolen */
|
/* NULL or stolen */
|
||||||
struct changed_htlc *last_sent_commit,
|
struct changed_htlc *last_sent_commit,
|
||||||
u32 first_blocknum)
|
u32 first_blocknum,
|
||||||
|
u32 min_possible_feerate,
|
||||||
|
u32 max_possible_feerate)
|
||||||
{
|
{
|
||||||
struct channel *channel = tal(peer->ld, struct channel);
|
struct channel *channel = tal(peer->ld, struct channel);
|
||||||
|
|
||||||
@ -204,6 +206,8 @@ struct channel *new_channel(struct peer *peer, u64 dbid,
|
|||||||
channel->last_was_revoke = last_was_revoke;
|
channel->last_was_revoke = last_was_revoke;
|
||||||
channel->last_sent_commit = tal_steal(channel, last_sent_commit);
|
channel->last_sent_commit = tal_steal(channel, last_sent_commit);
|
||||||
channel->first_blocknum = first_blocknum;
|
channel->first_blocknum = first_blocknum;
|
||||||
|
channel->min_possible_feerate = min_possible_feerate;
|
||||||
|
channel->max_possible_feerate = max_possible_feerate;
|
||||||
derive_channel_seed(peer->ld, &channel->seed, &peer->id, channel->dbid);
|
derive_channel_seed(peer->ld, &channel->seed, &peer->id, channel->dbid);
|
||||||
|
|
||||||
list_add_tail(&peer->channels, &channel->list);
|
list_add_tail(&peer->channels, &channel->list);
|
||||||
|
@ -90,6 +90,9 @@ struct channel {
|
|||||||
/* Blockheight at creation, scans for funding confirmations
|
/* Blockheight at creation, scans for funding confirmations
|
||||||
* will start here */
|
* will start here */
|
||||||
u64 first_blocknum;
|
u64 first_blocknum;
|
||||||
|
|
||||||
|
/* Feerate range */
|
||||||
|
u32 min_possible_feerate, max_possible_feerate;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct channel *new_channel(struct peer *peer, u64 dbid,
|
struct channel *new_channel(struct peer *peer, u64 dbid,
|
||||||
@ -126,7 +129,9 @@ struct channel *new_channel(struct peer *peer, u64 dbid,
|
|||||||
bool last_was_revoke,
|
bool last_was_revoke,
|
||||||
/* NULL or stolen */
|
/* NULL or stolen */
|
||||||
struct changed_htlc *last_sent_commit,
|
struct changed_htlc *last_sent_commit,
|
||||||
u32 first_blocknum);
|
u32 first_blocknum,
|
||||||
|
u32 min_possible_feerate,
|
||||||
|
u32 max_possible_feerate);
|
||||||
|
|
||||||
void delete_channel(struct channel *channel);
|
void delete_channel(struct channel *channel);
|
||||||
|
|
||||||
|
@ -418,7 +418,8 @@ enum watch_result funding_spent(struct channel *channel,
|
|||||||
3,
|
3,
|
||||||
channel->last_htlc_sigs,
|
channel->last_htlc_sigs,
|
||||||
tal_count(stubs),
|
tal_count(stubs),
|
||||||
0, 250000);
|
channel->min_possible_feerate,
|
||||||
|
channel->max_possible_feerate);
|
||||||
subd_send_msg(channel->owner, take(msg));
|
subd_send_msg(channel->owner, take(msg));
|
||||||
|
|
||||||
/* FIXME: Don't queue all at once, use an empty cb... */
|
/* FIXME: Don't queue all at once, use an empty cb... */
|
||||||
|
@ -211,7 +211,8 @@ wallet_commit_channel(struct lightningd *ld,
|
|||||||
NULL, /* No remote_shutdown_scriptpubkey yet */
|
NULL, /* No remote_shutdown_scriptpubkey yet */
|
||||||
final_key_idx, false,
|
final_key_idx, false,
|
||||||
NULL, /* No commit sent yet */
|
NULL, /* No commit sent yet */
|
||||||
uc->first_blocknum);
|
uc->first_blocknum,
|
||||||
|
feerate, feerate);
|
||||||
|
|
||||||
/* Now we finally put it in the database. */
|
/* Now we finally put it in the database. */
|
||||||
wallet_channel_insert(ld->wallet, channel);
|
wallet_channel_insert(ld->wallet, channel);
|
||||||
|
@ -1022,6 +1022,10 @@ void peer_sending_commitsig(struct channel *channel, const u8 *msg)
|
|||||||
|
|
||||||
/* Update their feerate. */
|
/* Update their feerate. */
|
||||||
channel->channel_info.feerate_per_kw[REMOTE] = feerate;
|
channel->channel_info.feerate_per_kw[REMOTE] = feerate;
|
||||||
|
if (feerate > channel->max_possible_feerate)
|
||||||
|
channel->max_possible_feerate = feerate;
|
||||||
|
if (feerate < channel->min_possible_feerate)
|
||||||
|
channel->min_possible_feerate = feerate;
|
||||||
|
|
||||||
if (!peer_save_commitsig_sent(channel, commitnum))
|
if (!peer_save_commitsig_sent(channel, commitnum))
|
||||||
return;
|
return;
|
||||||
@ -1185,6 +1189,11 @@ void peer_got_commitsig(struct channel *channel, const u8 *msg)
|
|||||||
= channel->channel_info.feerate_per_kw[REMOTE]
|
= channel->channel_info.feerate_per_kw[REMOTE]
|
||||||
= feerate;
|
= feerate;
|
||||||
|
|
||||||
|
if (feerate > channel->max_possible_feerate)
|
||||||
|
channel->max_possible_feerate = feerate;
|
||||||
|
if (feerate < channel->min_possible_feerate)
|
||||||
|
channel->min_possible_feerate = feerate;
|
||||||
|
|
||||||
/* Since we're about to send revoke, bump state again. */
|
/* Since we're about to send revoke, bump state again. */
|
||||||
if (!peer_sending_revocation(channel, added, fulfilled, failed, changed))
|
if (!peer_sending_revocation(channel, added, fulfilled, failed, changed))
|
||||||
return;
|
return;
|
||||||
|
@ -276,6 +276,12 @@ char *dbmigrations[] = {
|
|||||||
" FROM utxoset LEFT OUTER JOIN blocks on (blockheight == blocks.height) "
|
" FROM utxoset LEFT OUTER JOIN blocks on (blockheight == blocks.height) "
|
||||||
" WHERE blocks.hash IS NULL"
|
" WHERE blocks.hash IS NULL"
|
||||||
");",
|
");",
|
||||||
|
/* Record feerate range, to optimize onchaind grinding actual fees. */
|
||||||
|
"ALTER TABLE channels ADD min_possible_feerate INTEGER;",
|
||||||
|
"ALTER TABLE channels ADD max_possible_feerate INTEGER;",
|
||||||
|
/* https://bitcoinfees.github.io/#1d says Dec 17 peak was ~1M sat/kb
|
||||||
|
* which is 250,000 sat/Sipa */
|
||||||
|
"UPDATE channels SET min_possible_feerate=0, max_possible_feerate=250000;",
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -645,7 +645,9 @@ static struct channel *wallet_stmt2channel(const tal_t *ctx, struct wallet *w, s
|
|||||||
final_key_idx,
|
final_key_idx,
|
||||||
sqlite3_column_int(stmt, 34) != 0,
|
sqlite3_column_int(stmt, 34) != 0,
|
||||||
last_sent_commit,
|
last_sent_commit,
|
||||||
sqlite3_column_int64(stmt, 35));
|
sqlite3_column_int64(stmt, 35),
|
||||||
|
sqlite3_column_int(stmt, 36),
|
||||||
|
sqlite3_column_int(stmt, 37));
|
||||||
|
|
||||||
return chan;
|
return chan;
|
||||||
}
|
}
|
||||||
@ -665,7 +667,9 @@ static const char *channel_fields =
|
|||||||
"old_per_commit_remote, local_feerate_per_kw, remote_feerate_per_kw, shachain_remote_id, "
|
"old_per_commit_remote, local_feerate_per_kw, remote_feerate_per_kw, shachain_remote_id, "
|
||||||
"shutdown_scriptpubkey_remote, shutdown_keyidx_local, "
|
"shutdown_scriptpubkey_remote, shutdown_keyidx_local, "
|
||||||
"last_sent_commit_state, last_sent_commit_id, "
|
"last_sent_commit_state, last_sent_commit_id, "
|
||||||
"last_tx, last_sig, last_was_revoke, first_blocknum";
|
"last_tx, last_sig, last_was_revoke, first_blocknum, "
|
||||||
|
" min_possible_feerate, max_possible_feerate";
|
||||||
|
|
||||||
|
|
||||||
bool wallet_channels_load_active(const tal_t *ctx, struct wallet *w)
|
bool wallet_channels_load_active(const tal_t *ctx, struct wallet *w)
|
||||||
{
|
{
|
||||||
@ -918,7 +922,9 @@ void wallet_channel_save(struct wallet *w, struct channel *chan)
|
|||||||
" shutdown_keyidx_local=?,"
|
" shutdown_keyidx_local=?,"
|
||||||
" channel_config_local=?,"
|
" channel_config_local=?,"
|
||||||
" last_tx=?, last_sig=?,"
|
" last_tx=?, last_sig=?,"
|
||||||
" last_was_revoke=?"
|
" last_was_revoke=?,"
|
||||||
|
" min_possible_feerate=?,"
|
||||||
|
" max_possible_feerate=?"
|
||||||
" WHERE id=?");
|
" WHERE id=?");
|
||||||
sqlite3_bind_int64(stmt, 1, chan->their_shachain.id);
|
sqlite3_bind_int64(stmt, 1, chan->their_shachain.id);
|
||||||
if (chan->scid)
|
if (chan->scid)
|
||||||
@ -950,7 +956,9 @@ void wallet_channel_save(struct wallet *w, struct channel *chan)
|
|||||||
sqlite3_bind_tx(stmt, 19, chan->last_tx);
|
sqlite3_bind_tx(stmt, 19, chan->last_tx);
|
||||||
sqlite3_bind_signature(stmt, 20, &chan->last_sig);
|
sqlite3_bind_signature(stmt, 20, &chan->last_sig);
|
||||||
sqlite3_bind_int(stmt, 21, chan->last_was_revoke);
|
sqlite3_bind_int(stmt, 21, chan->last_was_revoke);
|
||||||
sqlite3_bind_int64(stmt, 22, chan->dbid);
|
sqlite3_bind_int(stmt, 22, chan->min_possible_feerate);
|
||||||
|
sqlite3_bind_int(stmt, 23, chan->max_possible_feerate);
|
||||||
|
sqlite3_bind_int64(stmt, 24, chan->dbid);
|
||||||
db_exec_prepared(w->db, stmt);
|
db_exec_prepared(w->db, stmt);
|
||||||
|
|
||||||
wallet_channel_config_save(w, &chan->channel_info.their_config);
|
wallet_channel_config_save(w, &chan->channel_info.their_config);
|
||||||
|
Loading…
Reference in New Issue
Block a user