More networking work, adding found keys saving.
This commit is contained in:
@@ -73,11 +73,6 @@ message ProgressRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
message ProgressReply {
|
message ProgressReply {
|
||||||
// Status code
|
|
||||||
// 0 - means ok
|
|
||||||
// 1 - something went wrong on server
|
|
||||||
// 2 - something wrong with request
|
|
||||||
uint32 status_code = 1;
|
|
||||||
// Brutforce progress as ratio from 0 to 1(completed)
|
// Brutforce progress as ratio from 0 to 1(completed)
|
||||||
double progress = 2;
|
double progress = 2;
|
||||||
}
|
}
|
||||||
@@ -17,6 +17,8 @@ const COMPLETED_RANGES: TableDefinition<u128, u128> = TableDefinition::new("comp
|
|||||||
const JOBS_TABLE: TableDefinition<u64, (u16, u128, u128, u64, u64)> = TableDefinition::new("jobs");
|
const JOBS_TABLE: TableDefinition<u64, (u16, u128, u128, u64, u64)> = TableDefinition::new("jobs");
|
||||||
const JOBS_FREE_IDS: TableDefinition<u64, ()> = TableDefinition::new("jobs_free_ids");
|
const JOBS_FREE_IDS: TableDefinition<u64, ()> = TableDefinition::new("jobs_free_ids");
|
||||||
|
|
||||||
|
const FOUND_KEYS_TABLE: TableDefinition<(u128, u128), u64> = TableDefinition::new("found_keys");
|
||||||
|
|
||||||
// get time is seconds
|
// get time is seconds
|
||||||
fn get_timestump() -> u64 {
|
fn get_timestump() -> u64 {
|
||||||
use std::time::{SystemTime, UNIX_EPOCH};
|
use std::time::{SystemTime, UNIX_EPOCH};
|
||||||
@@ -444,6 +446,45 @@ pub fn db_commit_job(db: &Database, job_id: u64) -> Result<bool, redb::Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[derive(Copy, Clone, Debug)]
|
||||||
|
pub struct FoundKey {
|
||||||
|
pub tweak_key: u128,
|
||||||
|
pub enc_key: u128,
|
||||||
|
pub timestump: u64
|
||||||
|
}
|
||||||
|
pub fn db_get_found_keys(db: &Database) -> Result<Vec<FoundKey>, redb::Error> {
|
||||||
|
let trx: redb::ReadTransaction = db.begin_read()?;
|
||||||
|
let mut res:Vec<FoundKey> = Vec::new();
|
||||||
|
|
||||||
|
{
|
||||||
|
let found_keys_t = trx.open_table(FOUND_KEYS_TABLE)?;
|
||||||
|
|
||||||
|
for found_key_res in found_keys_t.iter()? {
|
||||||
|
let ag = found_key_res?;
|
||||||
|
res.push(FoundKey{
|
||||||
|
tweak_key: ag.0.value().0,
|
||||||
|
enc_key: ag.0.value().1,
|
||||||
|
timestump: ag.1.value(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Ok(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn db_put_found_key(db: &Database, tw_k: u128, en_k: u128) -> Result<u64, redb::Error> {
|
||||||
|
|
||||||
|
let trx: redb::WriteTransaction = db.begin_write()?;
|
||||||
|
let new_keys_count = {
|
||||||
|
let mut found_keys_t = trx.open_table(FOUND_KEYS_TABLE)?;
|
||||||
|
found_keys_t.insert((tw_k,en_k), get_timestump());
|
||||||
|
found_keys_t.len()?
|
||||||
|
};
|
||||||
|
trx.commit();
|
||||||
|
|
||||||
|
return Ok(new_keys_count);
|
||||||
|
}
|
||||||
|
|
||||||
pub fn db_get_progress(db: &Database) -> Result<f64, redb::Error> {
|
pub fn db_get_progress(db: &Database) -> Result<f64, redb::Error> {
|
||||||
let trx: redb::ReadTransaction = db.begin_read()?;
|
let trx: redb::ReadTransaction = db.begin_read()?;
|
||||||
let progress = {
|
let progress = {
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
// i: [u32; 2],
|
// i: [u32; 2],
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
use prost::bytes::BufMut;
|
||||||
|
|
||||||
fn u128_to_u32arr(a: u128) -> [u32;4] {
|
fn u128_to_u32arr(a: u128) -> [u32;4] {
|
||||||
let mut res = [0u32;4];
|
let mut res = [0u32;4];
|
||||||
let a_bytes = a.to_le_bytes();
|
let a_bytes = a.to_le_bytes();
|
||||||
@@ -23,6 +25,14 @@ pub fn u128_to_u64arr(a: u128) -> [u64;2] {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn u64arr_to_u128(a:(u64,u64)) -> u128 {
|
||||||
|
let mut bytes_data: [u8; 16] = [0u8;16];
|
||||||
|
bytes_data[0..8].copy_from_slice(a.0.to_le_bytes().as_slice());
|
||||||
|
bytes_data[8..].copy_from_slice(a.1.to_le_bytes().as_slice());
|
||||||
|
|
||||||
|
return u128::from_le_bytes(bytes_data);
|
||||||
|
}
|
||||||
|
|
||||||
pub fn add_u128_to_u256(a: &[u32; 8], b: u128) -> ([u32; 8], bool) {
|
pub fn add_u128_to_u256(a: &[u32; 8], b: u128) -> ([u32; 8], bool) {
|
||||||
let mut res: [u32; 8] = [0; 8];
|
let mut res: [u32; 8] = [0; 8];
|
||||||
let mut carry = false;
|
let mut carry = false;
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ fn work_rec_to_work_data(work_rec: database::JobRecord) -> WorkData {
|
|||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
pub struct NyashService {
|
pub struct NyashService {
|
||||||
db: redb::Database,
|
db: redb::Database,
|
||||||
|
progress: f64,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tonic::async_trait]
|
#[tonic::async_trait]
|
||||||
@@ -63,7 +64,15 @@ impl NyashLuks for NyashService {
|
|||||||
async fn commit_work(&self, request: Request<WorkCommit>) -> Result<Response<CommitReply>, Status> {
|
async fn commit_work(&self, request: Request<WorkCommit>) -> Result<Response<CommitReply>, Status> {
|
||||||
println!("Got a request: {:?}", request);
|
println!("Got a request: {:?}", request);
|
||||||
let work_id: u64 = request.into_inner().work_id;
|
let work_id: u64 = request.into_inner().work_id;
|
||||||
|
match database::db_commit_job(&self.db, work_id) {
|
||||||
|
Ok(true) => Ok(Response::new(CommitReply {status_code: 0, progress: self.progress})),
|
||||||
|
Ok(false) => Ok(Response::new(CommitReply {status_code: 1, progress: self.progress})),
|
||||||
|
Err(_) => Err(Status::internal("DB error"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn request_progress(&self, _request: Request<ProgressRequest>) -> Result<Response<ProgressReply>, Status> {
|
||||||
|
Ok(Response::new(ProgressReply {progress: self.progress}))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user