darkfid: implement set_default_address rpc function

This commit is contained in:
ghassmo
2022-01-05 01:47:11 +04:00
parent ea7746e3cd
commit 3edebe6b77
4 changed files with 33 additions and 10 deletions

View File

@@ -174,7 +174,7 @@ impl Darkfid {
async fn get_keys(&self, id: Value, _params: Value) -> JsonResult {
let result: Result<Vec<String>> = async {
let keypairs = self.client.lock().await.get_keypairs().await?;
let default_keypair = self.client.lock().await.get_default_keypair().await?;
let default_keypair = self.client.lock().await.main_keypair;
let mut addresses: Vec<String> = keypairs
.iter()
@@ -198,7 +198,7 @@ impl Darkfid {
}
}
// --> {"method": "export_keypair", "params": "path/"}
// --> {"method": "export_keypair", "params": "[path/]"}
// <-- {"result": true}
async fn export_keypair(&self, id: Value, params: Value) -> JsonResult {
let args = params.as_array();
@@ -234,11 +234,28 @@ impl Darkfid {
}
// --> {"method": "set_default_address", "params":
// "vdNS7oBj7KvsMWWmo9r96SV4SqATLrGsH2a3PGpCfJC"}
// "[vdNS7oBj7KvsMWWmo9r96SV4SqATLrGsH2a3PGpCfJC]"}
// <-- {"result": true}
async fn set_default_address(&self, _id: Value, _params: Value) -> JsonResult {
// TODO
unimplemented!()
async fn set_default_address(&self, id: Value, params: Value) -> JsonResult {
let args = params.as_array();
if args.is_none() && args.unwrap()[0].as_str().is_none() {
return JsonResult::Err(jsonerr(InvalidParams, None, id))
}
let addr_str = args.unwrap()[0].as_str().unwrap();
let result: Result<()> = async {
let public = PublicKey::from(Address::from_str(addr_str.into())?);
self.client.lock().await.set_default_keypair(&public).await?;
Ok(())
}
.await;
match result {
Ok(_) => JsonResult::Resp(jsonresp(json!(true), id)),
Err(err) => JsonResult::Err(jsonerr(ServerError(-32005), Some(err.to_string()), id)),
}
}
// --> {"method": "get_balances", "params": []}

View File

@@ -108,14 +108,15 @@ impl Drk {
}
// --> {"jsonrpc": "2.0", "method": "set_default_address", "params":
// "vdNS7oBj7KvsMWWmo9r96SV4SqATLrGsH2a3PGpCfJC", "id": 42} <-- {"jsonrpc": "2.0", "result":
// "[vdNS7oBj7KvsMWWmo9r96SV4SqATLrGsH2a3PGpCfJC]", "id": 42}
// <-- {"jsonrpc": "2.0", "result":
// true, "id": 42}
async fn set_default_address(&self, address: &str) -> 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", "method": "export_keypair", "params": "[path/]", "id": 42}
// <-- {"jsonrpc": "2.0", "result": true, "id": 42}
async fn export_keypair(&self, path: &str) -> Result<Value> {
let req = jsonrpc::request(json!("export_keypair"), json!([path]));

View File

@@ -384,8 +384,10 @@ impl Client {
self.wallet.get_keypairs().await
}
pub async fn get_default_keypair(&self) -> Result<Keypair> {
self.wallet.get_default_keypair().await
pub async fn set_default_keypair(&mut self, public: &PublicKey) -> Result<()> {
self.wallet.set_default_keypair(public).await?;
self.main_keypair = self.wallet.get_default_keypair().await?;
Ok(())
}
pub async fn key_gen(&self) -> Result<()> {

View File

@@ -22,6 +22,7 @@ pub enum ErrorCode {
KeyGenError,
GetAddressesError,
CreateFile,
SetDefaultAddress,
InvalidAmountParam,
InvalidNetworkParam,
InvalidTokenIdParam,
@@ -41,6 +42,7 @@ impl ErrorCode {
ErrorCode::KeyGenError => -32002,
ErrorCode::GetAddressesError => -32003,
ErrorCode::CreateFile => -32004,
ErrorCode::SetDefaultAddress => -32005,
ErrorCode::InvalidAmountParam => -32010,
ErrorCode::InvalidNetworkParam => -32011,
ErrorCode::InvalidTokenIdParam => -32012,
@@ -60,6 +62,7 @@ impl ErrorCode {
ErrorCode::KeyGenError => "Key gen error",
ErrorCode::GetAddressesError => "get addresses error",
ErrorCode::CreateFile => "error creating a file",
ErrorCode::SetDefaultAddress => "error set default address",
ErrorCode::InvalidAmountParam => "Invalid amount param",
ErrorCode::InvalidNetworkParam => "Invalid network param",
ErrorCode::InvalidTokenIdParam => "Invalid token id param",