use futures::stream::{FuturesUnordered, StreamExt};
-pub(crate) const SCHEMA_VERSION: i32 = 5;
+pub(crate) const SCHEMA_VERSION: i32 = 6;
pub(crate) const SNAPSHOT_CALCULATION_INTERVAL: u32 = 3600 * 24; // every 24 hours, in seconds
pub(crate) const DOWNLOAD_NEW_GOSSIP: bool = true;
"CREATE TABLE IF NOT EXISTS channel_announcements (
id SERIAL PRIMARY KEY,
short_channel_id bigint NOT NULL UNIQUE,
- block_height integer,
announcement_signed BYTEA,
seen timestamp NOT NULL DEFAULT NOW()
)"
composite_index character(29) UNIQUE,
short_channel_id bigint NOT NULL,
timestamp bigint,
- channel_flags integer,
+ channel_flags smallint,
direction boolean NOT NULL,
disable boolean,
cltv_expiry_delta integer,
tx.execute("UPDATE config SET db_schema = 5 WHERE id = 1", &[]).await.unwrap();
tx.commit().await.unwrap();
}
+ if schema >= 1 && schema <= 5 {
+ let tx = client.transaction().await.unwrap();
+ tx.execute("ALTER TABLE channel_updates ALTER channel_flags SET DATA TYPE smallint", &[]).await.unwrap();
+ tx.execute("ALTER TABLE channel_announcements DROP COLUMN block_height", &[]).await.unwrap();
+ tx.execute("UPDATE config SET db_schema = 6 WHERE id = 1", &[]).await.unwrap();
+ tx.commit().await.unwrap();
+ }
if schema <= 1 || schema > SCHEMA_VERSION {
panic!("Unknown schema in db: {}, we support up to {}", schema, SCHEMA_VERSION);
}
match &gossip_message {
GossipMessage::ChannelAnnouncement(announcement) => {
let scid = announcement.contents.short_channel_id as i64;
- // scid is 8 bytes
- // block height is the first three bytes
- // to obtain block height, shift scid right by 5 bytes (40 bits)
- let block_height = (scid >> 5 * 8) as i32;
// start with the type prefix, which is already known a priori
let mut announcement_signed = Vec::new();
let result = client
.execute("INSERT INTO channel_announcements (\
short_channel_id, \
- block_height, \
announcement_signed \
- ) VALUES ($1, $2, $3) ON CONFLICT (short_channel_id) DO NOTHING", &[
+ ) VALUES ($1, $2) ON CONFLICT (short_channel_id) DO NOTHING", &[
&scid,
- &block_height,
&announcement_signed
]).await;
if result.is_err() {
&composite_index,
&scid,
×tamp,
- &(update.contents.flags as i32),
+ &(update.contents.flags as i16),
&direction,
&disable,
&cltv_expiry_delta,