Merge branch 'master' of github.com:narodnik/sapvi

This commit is contained in:
narodnik
2021-05-04 12:38:39 +02:00
2 changed files with 93 additions and 0 deletions

View File

@@ -80,6 +80,12 @@ tobj = "2.0.4"
fs_extra = "1.2"
glob = "0.3"
# wallet deps
rocksdb = "0.16.0"
[dependencies.rusqlite]
version = "0.25.1"
features = ["bundled", "sqlcipher"]
[[bin]]
name = "lisp"
path = "lisp/lisp.rs"
@@ -116,6 +122,10 @@ path = "src/bin/dfg.rs"
name = "compile-shaders"
path = "src/bin/compile-shaders.rs"
[[bin]]
name = "wallet"
path = "src/bin/wallet/test.rs"
[profile.release]
debug = 1

83
src/bin/wallet/test.rs Normal file
View File

@@ -0,0 +1,83 @@
// rocksdb is the blockchain database
// it is a key value store
// sqlite is the encrypted wallet
use rusqlite::{Connection, Result};
use rocksdb::DB;
fn main() -> Result<()> {
wallet()?;
blockchain()?;
Ok(())
}
fn wallet() -> Result<()> {
let connector = connect()?;
encrypt(&connector)?;
println!("Created encrypted database.");
decrypt(&connector)?;
println!("Decrypted database.");
Ok(())
}
fn connect() -> Result<Connection> {
println!("Attempting to establish a connection...");
let path = "/home/x/src/sapvi/src/bin/wallet/wallet.db";
let connector = Connection::open(&path);
println!("Path created at {}", path);
println!("Connection established");
connector
}
fn encrypt(conn: &Connection) -> Result<()> {
println!("Attempting to create an encrypted database...");
conn.execute_batch(
"ATTACH DATABASE 'encrypted.db' AS encrypted KEY 'testkey';
SELECT sqlcipher_export('encrypted');
DETACH DATABASE encrypted;",
)
}
fn decrypt(conn: &Connection) -> Result<()> {
println!("Attempting to decrypt database...");
conn.execute_batch(
"ATTACH DATABASE 'plaintext.db' AS plaintext KEY 'testkey';
SELECT sqlcipher_export('plaintext');
DETACH DATABASE plaintext;",
)
}
fn blockchain() -> Result<()> {
let db = create_db();
write_db(&db)?;
test_db(&db);
Ok(())
}
fn create_db() -> DB {
println!("Creating a blockchain database...");
let path = "/home/x/src/sapvi/src/bin/wallet/blockchain.db";
let db = DB::open_default(path).unwrap();
db
}
fn write_db(db: &DB) -> Result<()> {
println!("Writing to the blockchain...");
db.put(b"test-value", b"test-key").unwrap();
Ok(())
}
fn test_db(db: &DB) {
println!("Testing if write was successful...");
match db.get(b"test-value") {
Ok(Some(value)) => println!("retrieved value {}", String::from_utf8(value).unwrap()),
Ok(None) => println!("value not found"),
Err(e) => println!("operational problem encountered: {}", e),
}
}
//fn configure_blockchain() {
// let mut opts = Options::default();
// let mut block_opts = BlockBasedOptions::default();
// block_opts.set_index_type(BlockBasedIndexType::HashSearch);
//}