darkfid wallet: WIP support multi keys & exporting and importing keypair to/from a file

This commit is contained in:
ghassmo
2022-01-03 00:16:59 +04:00
parent e247c4cf40
commit 8e498f0102
3 changed files with 60 additions and 1 deletions

View File

@@ -75,6 +75,10 @@ impl RequestHandler for Darkfid {
Some("key_gen") => return self.key_gen(req.id, req.params).await,
Some("get_key") => return self.get_key(req.id, req.params).await,
Some("get_keys") => return self.get_keys(req.id, req.params).await,
Some("export_keypair") => return self.get_keys(req.id, req.params).await,
Some("set_default_address") => {
return self.set_default_address(req.id, req.params).await
}
Some("get_balances") => return self.get_balances(req.id, req.params).await,
Some("get_token_id") => return self.get_token_id(req.id, req.params).await,
Some("features") => return self.features(req.id, req.params).await,
@@ -177,6 +181,20 @@ impl Darkfid {
}
}
// --> {"method": "export_keypair", "params": "path/"}
// <-- {"result": true}
async fn export_keypair(&self, _id: Value, _params: Value) -> JsonResult {
// TODO
unimplemented!()
}
// --> {"method": "set_default_address", "params":
// "vdNS7oBj7KvsMWWmo9r96SV4SqATLrGsH2a3PGpCfJC"} <-- {"result": true}
async fn set_default_address(&self, _id: Value, _params: Value) -> JsonResult {
// TODO
unimplemented!()
}
// --> {"method": "get_balances", "params": []}
// <-- {"result": "get_balances": "[ {"btc": (value, network)}, .. ]"}
async fn get_balances(&self, id: Value, _params: Value) -> JsonResult {

View File

@@ -107,6 +107,21 @@ impl Drk {
Ok(self.request(req).await?)
}
// --> {"jsonrpc": "2.0", "method": "set_default_address", "params":
// "vdNS7oBj7KvsMWWmo9r96SV4SqATLrGsH2a3PGpCfJC", "id": 42} <-- {"jsonrpc": "2.0", "result":
// true, "id": 42}
async fn set_default_address(&self, address: String) -> Result<Value> {
let req = jsonrpc::request(json!("set_default_address"), json!(address));
Ok(self.request(req).await?)
}
// --> {"jsonrpc": "2.0", "method": "export_keypair", "params": "path/", "id": 42}
// <-- {"jsonrpc": "2.0", "result": true, "id": 42}
async fn export_keypair(&self, path: String) -> Result<Value> {
let req = jsonrpc::request(json!("export_keypair"), json!(path));
Ok(self.request(req).await?)
}
// --> {"jsonrpc": "2.0", "method": "get_key", "params": ["solana", "usdc"], "id": 42}
// <-- {"jsonrpc": "2.0", "result": "vdNS7oBj7KvsMWWmo9r96SV4SqATLrGsH2a3PGpCfJC", "id": 42}
async fn get_token_id(&self, network: &str, token: &str) -> Result<Value> {
@@ -178,7 +193,15 @@ async fn start(config: &DrkConfig, options: CliDrk) -> Result<()> {
println!("Features: {}", &reply.to_string());
return Ok(())
}
Some(CliDrkSubCommands::Wallet { create, keygen, address, balances, addresses }) => {
Some(CliDrkSubCommands::Wallet {
create,
keygen,
address,
balances,
addresses,
export_keypair,
set_default_address,
}) => {
if create {
let reply = client.create_wallet().await?;
if reply.as_bool().unwrap() {
@@ -241,6 +264,18 @@ async fn start(config: &DrkConfig, options: CliDrk) -> Result<()> {
return Ok(())
}
if set_default_address.is_some() {
let default_address = set_default_address.unwrap();
client.set_default_address(default_address).await?;
return Ok(())
}
if export_keypair.is_some() {
let path = export_keypair.unwrap();
client.export_keypair(path).await?;
return Ok(())
}
}
Some(CliDrkSubCommands::Id { network, token }) => {
let network = network.to_lowercase();

View File

@@ -20,6 +20,12 @@ pub enum CliDrkSubCommands {
/// Get wallet addresses
#[clap(long)]
addresses: bool,
/// Set default address
#[clap(long, value_name = "ADDRESS")]
set_default_address: Option<String>,
/// Export default address
#[clap(long, value_name = "PATH")]
export_keypair: Option<String>,
/// Get wallet balances
#[clap(long)]
balances: bool,