bark-wallet 0.1.4

Wallet library and CLI for the bitcoin Ark protocol built by Second
Documentation

use anyhow::Context;
use rusqlite::Transaction;

use super::Migration;

pub struct Migration0010 {}

impl Migration for Migration0010 {
	fn name(&self) -> &str {
		"remove keychain column from vtxo table"
	}

	fn to_version(&self) -> i64 { 10 }

	fn do_migration(&self, conn: &Transaction) -> anyhow::Result<()> {
		let queries = [
			"ALTER TABLE bark_vtxo_key RENAME TO bark_vtxo_key_old;",

			"CREATE TABLE bark_vtxo_key (
				public_key TEXT NOT NULL PRIMARY KEY,
				idx INTEGER NOT NULL UNIQUE
			);",

			"INSERT INTO bark_vtxo_key (public_key, idx)
			SELECT public_key, idx FROM bark_vtxo_key_old;",

			"DROP TABLE bark_vtxo_key_old;",
		];
		for (i, query) in queries.into_iter().enumerate() {
			conn.execute(query, ()).with_context(|| format!("error in query idx #{}", i))?;
		}
		Ok(())
	}
}