Cleanup some flatbuffer usage
This commit is contained in:
parent
12aa5328ab
commit
078af89cae
|
@ -5,7 +5,7 @@
|
||||||
use crate::coinconfig::CoinConfig;
|
use crate::coinconfig::CoinConfig;
|
||||||
use crate::db::data_generated::fb::{
|
use crate::db::data_generated::fb::{
|
||||||
AddressBalance, AddressBalanceArgs, AddressBalanceVec, AddressBalanceVecArgs, Backup,
|
AddressBalance, AddressBalanceArgs, AddressBalanceVec, AddressBalanceVecArgs, Backup,
|
||||||
BackupArgs,
|
BackupArgs, BackupT,
|
||||||
};
|
};
|
||||||
use crate::db::AccountData;
|
use crate::db::AccountData;
|
||||||
use crate::key2::decode_key;
|
use crate::key2::decode_key;
|
||||||
|
@ -120,8 +120,7 @@ pub fn convert_to_watchonly(coin: u8, id_account: u32) -> anyhow::Result<()> {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_backup_package(coin: u8, id_account: u32) -> anyhow::Result<Vec<u8>> {
|
pub fn get_backup_package(coin: u8, id_account: u32) -> anyhow::Result<BackupT> {
|
||||||
let mut builder = flatbuffers::FlatBufferBuilder::new();
|
|
||||||
let c = CoinConfig::get(coin);
|
let c = CoinConfig::get(coin);
|
||||||
let network = c.chain.network();
|
let network = c.chain.network();
|
||||||
let db = c.db()?;
|
let db = c.db()?;
|
||||||
|
@ -133,9 +132,6 @@ pub fn get_backup_package(coin: u8, id_account: u32) -> anyhow::Result<Vec<u8>>
|
||||||
aindex,
|
aindex,
|
||||||
..
|
..
|
||||||
} = db.get_account_info(id_account)?;
|
} = db.get_account_info(id_account)?;
|
||||||
let name = builder.create_string(&name);
|
|
||||||
let seed = seed.map(|seed| builder.create_string(&seed));
|
|
||||||
let sk = sk.map(|sk| builder.create_string(&sk));
|
|
||||||
let orchard_keys = db.get_orchard(id_account)?;
|
let orchard_keys = db.get_orchard(id_account)?;
|
||||||
let uvk = orchard_keys.map(|OrchardKeyBytes { fvk: ofvk, .. }| {
|
let uvk = orchard_keys.map(|OrchardKeyBytes { fvk: ofvk, .. }| {
|
||||||
// orchard sk is not serializable and must derived from seed
|
// orchard sk is not serializable and must derived from seed
|
||||||
|
@ -145,24 +141,17 @@ pub fn get_backup_package(coin: u8, id_account: u32) -> anyhow::Result<Vec<u8>>
|
||||||
let sapling_dfvk = sapling_efvk.to_diversifiable_full_viewing_key();
|
let sapling_dfvk = sapling_efvk.to_diversifiable_full_viewing_key();
|
||||||
let orchard_fvk = orchard::keys::FullViewingKey::from_bytes(&ofvk);
|
let orchard_fvk = orchard::keys::FullViewingKey::from_bytes(&ofvk);
|
||||||
let ufvk = UnifiedFullViewingKey::new(Some(sapling_dfvk), orchard_fvk).unwrap();
|
let ufvk = UnifiedFullViewingKey::new(Some(sapling_dfvk), orchard_fvk).unwrap();
|
||||||
let ufvk = ufvk.encode(network);
|
ufvk.encode(network)
|
||||||
builder.create_string(&ufvk)
|
|
||||||
});
|
});
|
||||||
let fvk = builder.create_string(&fvk);
|
let backup = BackupT {
|
||||||
let backup = Backup::create(
|
|
||||||
&mut builder,
|
|
||||||
&BackupArgs {
|
|
||||||
name: Some(name),
|
name: Some(name),
|
||||||
seed,
|
seed,
|
||||||
index: aindex,
|
index: aindex,
|
||||||
sk,
|
sk,
|
||||||
fvk: Some(fvk),
|
fvk: Some(fvk),
|
||||||
uvk,
|
uvk,
|
||||||
},
|
};
|
||||||
);
|
Ok(backup)
|
||||||
builder.finish(backup, None);
|
|
||||||
let data = builder.finished_data().to_vec();
|
|
||||||
Ok(data)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Update the transparent secret key for the given account from a derivation path
|
/// Update the transparent secret key for the given account from a derivation path
|
||||||
|
|
|
@ -5,6 +5,7 @@ use crate::note_selection::TransactionReport;
|
||||||
use crate::{ChainError, TransactionPlan, Tx};
|
use crate::{ChainError, TransactionPlan, Tx};
|
||||||
use allo_isolate::{ffi, IntoDart};
|
use allo_isolate::{ffi, IntoDart};
|
||||||
use android_logger::Config;
|
use android_logger::Config;
|
||||||
|
use flatbuffers::FlatBufferBuilder;
|
||||||
use lazy_static::lazy_static;
|
use lazy_static::lazy_static;
|
||||||
use log::Level;
|
use log::Level;
|
||||||
use rusqlite::Connection;
|
use rusqlite::Connection;
|
||||||
|
@ -238,8 +239,11 @@ pub unsafe extern "C" fn convert_to_watchonly(coin: u8, id_account: u32) -> CRes
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn get_backup(coin: u8, id_account: u32) -> CResult<*const u8> {
|
pub unsafe extern "C" fn get_backup(coin: u8, id_account: u32) -> CResult<*const u8> {
|
||||||
let res = || {
|
let res = || {
|
||||||
let backup_bytes = crate::api::account::get_backup_package(coin, id_account)?;
|
let mut builder = FlatBufferBuilder::new();
|
||||||
Ok::<_, anyhow::Error>(backup_bytes)
|
let backup = crate::api::account::get_backup_package(coin, id_account)?;
|
||||||
|
let backup_bytes = backup.pack(&mut builder);
|
||||||
|
builder.finish(backup_bytes, None);
|
||||||
|
Ok::<_, anyhow::Error>(builder.finished_data().to_vec())
|
||||||
};
|
};
|
||||||
|
|
||||||
to_cresult_bytes(res())
|
to_cresult_bytes(res())
|
||||||
|
@ -925,8 +929,11 @@ pub unsafe extern "C" fn get_notes(coin: u8, id: u32) -> CResult<*const u8> {
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn get_txs(coin: u8, id: u32) -> CResult<*const u8> {
|
pub unsafe extern "C" fn get_txs(coin: u8, id: u32) -> CResult<*const u8> {
|
||||||
let res = |connection: &Connection| {
|
let res = |connection: &Connection| {
|
||||||
let data = crate::db::read::get_txs(connection, id)?;
|
let shielded_txs = crate::db::read::get_txs(connection, id)?;
|
||||||
Ok(data)
|
let mut builder = FlatBufferBuilder::new();
|
||||||
|
let shielded_txs = shielded_txs.pack(&mut builder);
|
||||||
|
builder.finish(shielded_txs, None);
|
||||||
|
Ok(builder.finished_data().to_vec())
|
||||||
};
|
};
|
||||||
to_cresult_bytes(with_account(coin, res))
|
to_cresult_bytes(with_account(coin, res))
|
||||||
}
|
}
|
||||||
|
|
|
@ -243,8 +243,7 @@ pub fn get_notes(connection: &Connection, id: u32) -> Result<Vec<u8>> {
|
||||||
Ok(data)
|
Ok(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_txs(connection: &Connection, id: u32) -> Result<Vec<u8>> {
|
pub fn get_txs(connection: &Connection, id: u32) -> Result<ShieldedTxVecT> {
|
||||||
let mut builder = flatbuffers::FlatBufferBuilder::new();
|
|
||||||
let mut stmt = connection.prepare(
|
let mut stmt = connection.prepare(
|
||||||
"SELECT id_tx, txid, height, timestamp, t.address, c.name AS cname, a.name AS aname, value, memo FROM transactions t \
|
"SELECT id_tx, txid, height, timestamp, t.address, c.name AS cname, a.name AS aname, value, memo FROM transactions t \
|
||||||
LEFT JOIN contacts c ON t.address = c.address \
|
LEFT JOIN contacts c ON t.address = c.address \
|
||||||
|
@ -260,42 +259,29 @@ pub fn get_txs(connection: &Connection, id: u32) -> Result<Vec<u8>> {
|
||||||
let timestamp: u32 = row.get("timestamp")?;
|
let timestamp: u32 = row.get("timestamp")?;
|
||||||
let contact_name: Option<String> = row.get("cname")?;
|
let contact_name: Option<String> = row.get("cname")?;
|
||||||
let account_name: Option<String> = row.get("aname")?;
|
let account_name: Option<String> = row.get("aname")?;
|
||||||
let name = contact_name.or(account_name).unwrap_or(String::new());
|
let name = contact_name.or(account_name);
|
||||||
let value: i64 = row.get("value")?;
|
let value: i64 = row.get("value")?;
|
||||||
let address: Option<String> = row.get("address")?;
|
let address: Option<String> = row.get("address")?;
|
||||||
let memo: Option<String> = row.get("memo")?;
|
let memo: Option<String> = row.get("memo")?;
|
||||||
let address = address.unwrap_or(String::new());
|
let tx = ShieldedTxT {
|
||||||
let memo = memo.unwrap_or(String::new());
|
|
||||||
let tx_id = builder.create_string(&tx_id);
|
|
||||||
let short_tx_id = builder.create_string(&short_tx_id);
|
|
||||||
let name = builder.create_string(&name);
|
|
||||||
let address = builder.create_string(&address);
|
|
||||||
let memo = builder.create_string(&memo);
|
|
||||||
let tx = ShieldedTx::create(
|
|
||||||
&mut builder,
|
|
||||||
&ShieldedTxArgs {
|
|
||||||
id: id_tx,
|
id: id_tx,
|
||||||
height,
|
height,
|
||||||
tx_id: Some(tx_id),
|
tx_id: Some(tx_id),
|
||||||
short_tx_id: Some(short_tx_id),
|
short_tx_id: Some(short_tx_id),
|
||||||
timestamp,
|
timestamp,
|
||||||
name: Some(name),
|
name,
|
||||||
value: value as u64,
|
value: value as u64,
|
||||||
address: Some(address),
|
address,
|
||||||
memo: Some(memo),
|
memo,
|
||||||
},
|
};
|
||||||
);
|
|
||||||
Ok(tx)
|
Ok(tx)
|
||||||
})?;
|
})?;
|
||||||
let mut txs = vec![];
|
let mut txs = vec![];
|
||||||
for r in rows {
|
for r in rows {
|
||||||
txs.push(r?);
|
txs.push(r?);
|
||||||
}
|
}
|
||||||
let txs = builder.create_vector(&txs);
|
let txs = ShieldedTxVecT { txs: Some(txs) };
|
||||||
let txs = ShieldedTxVec::create(&mut builder, &ShieldedTxVecArgs { txs: Some(txs) });
|
Ok(txs)
|
||||||
builder.finish(txs, None);
|
|
||||||
let data = builder.finished_data().to_vec();
|
|
||||||
Ok(data)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_messages(connection: &Connection, id: u32) -> Result<Vec<u8>> {
|
pub fn get_messages(connection: &Connection, id: u32) -> Result<Vec<u8>> {
|
||||||
|
|
Loading…
Reference in New Issue