浏览代码

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

ghassmo 4 年之前
父节点
当前提交
8e498f0102
共有 3 个文件被更改,包括 60 次插入1 次删除
  1. 18 0
      src/bin/darkfid.rs
  2. 36 1
      src/bin/drk.rs
  3. 6 0
      src/cli/cli_parser.rs

+ 18 - 0
src/bin/darkfid.rs

@@ -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 {

+ 36 - 1
src/bin/drk.rs

@@ -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();

+ 6 - 0
src/cli/cli_parser.rs

@@ -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,