use tokio_postgres::Config;
use crate::hex_utils;
-pub(crate) const SCHEMA_VERSION: i32 = 1;
+pub(crate) const SCHEMA_VERSION: i32 = 2;
pub(crate) const SNAPSHOT_CALCULATION_INTERVAL: u32 = 3600 * 24; // every 24 hours, in seconds
pub(crate) const DOWNLOAD_NEW_GOSSIP: bool = true;
id SERIAL PRIMARY KEY,
short_channel_id character varying(255) NOT NULL UNIQUE,
block_height integer,
- chain_hash character varying(255),
announcement_signed BYTEA,
seen timestamp NOT NULL DEFAULT NOW()
)"
"CREATE TABLE IF NOT EXISTS channel_updates (
id SERIAL PRIMARY KEY,
composite_index character varying(255) UNIQUE,
- chain_hash character varying(255),
short_channel_id character varying(255),
timestamp bigint,
channel_flags integer,
}
pub(crate) async fn upgrade_db(schema: i32, client: &mut tokio_postgres::Client) {
- match schema {
- SCHEMA_VERSION => {},
- _ => panic!("Unknown schema in db: {}, we support up to {}", schema, SCHEMA_VERSION),
+ if schema == 1 {
+ let tx = client.transaction().await.unwrap();
+ tx.execute("ALTER TABLE channel_updates DROP COLUMN chain_hash", &[]).await.unwrap();
+ tx.execute("ALTER TABLE channel_announcements DROP COLUMN chain_hash", &[]).await.unwrap();
+ tx.execute("UPDATE config SET db_schema = 2 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);
}
}
// 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;
- let chain_hash = announcement.contents.chain_hash.as_ref();
- let chain_hash_hex = hex_utils::hex_str(chain_hash);
// start with the type prefix, which is already known a priori
let mut announcement_signed = Vec::new();
.execute("INSERT INTO channel_announcements (\
short_channel_id, \
block_height, \
- chain_hash, \
announcement_signed \
- ) VALUES ($1, $2, $3, $4) ON CONFLICT (short_channel_id) DO NOTHING", &[
+ ) VALUES ($1, $2, $3) ON CONFLICT (short_channel_id) DO NOTHING", &[
&scid_hex,
&block_height,
- &chain_hash_hex,
&announcement_signed
]).await;
if result.is_err() {
let scid = update.contents.short_channel_id;
let scid_hex = hex_utils::hex_str(&scid.to_be_bytes());
- let chain_hash = update.contents.chain_hash.as_ref();
- let chain_hash_hex = hex_utils::hex_str(chain_hash);
-
let timestamp = update.contents.timestamp as i64;
let channel_flags = update.contents.flags as i32;
let result = client
.execute("INSERT INTO channel_updates (\
composite_index, \
- chain_hash, \
short_channel_id, \
timestamp, \
channel_flags, \
fee_proportional_millionths, \
htlc_maximum_msat, \
blob_signed \
- ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13) ON CONFLICT (composite_index) DO NOTHING", &[
+ ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) ON CONFLICT (composite_index) DO NOTHING", &[
&composite_index,
- &chain_hash_hex,
&scid_hex,
×tamp,
&channel_flags,