From 7dd95727552ec65dfe343b10b45f851518332f00 Mon Sep 17 00:00:00 2001 From: ghassmo Date: Wed, 27 Oct 2021 01:05:46 +0300 Subject: [PATCH] cashierd: return expanded info for features rpc response --- src/bin/cashierd.rs | 55 +++++++++++++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/src/bin/cashierd.rs b/src/bin/cashierd.rs index 8b6755ed7..e686df63f 100644 --- a/src/bin/cashierd.rs +++ b/src/bin/cashierd.rs @@ -1,5 +1,4 @@ use async_std::sync::{Arc, Mutex}; -use std::collections::HashMap; use std::path::PathBuf; use std::str::FromStr; @@ -53,6 +52,7 @@ struct Cashierd { bridge: Arc, cashier_wallet: Arc, networks: Vec, + public_key: String, } #[async_trait] @@ -101,6 +101,7 @@ impl Cashierd { bridge, cashier_wallet, networks, + public_key: String::from(""), }) } @@ -427,14 +428,34 @@ impl Cashierd { } async fn features(&self, id: Value, _params: Value) -> JsonResult { - JsonResult::Resp(jsonresp( - json!(self - .networks - .iter() - .map(|net| (net.name.to_string(), net.blockchain.to_owned())) - .collect::>()), - id, - )) + let mut resp: serde_json::Value = json!( + { + "server_version": "0.1.0", + "protocol_version": "1.0", + "public_key": self.public_key, + "networks": [], + "hosts": { + "tcp_port": null, + "tls_port": 9000, + "onion_addr": null, + "dns_addr": "testnet.cashier.dark.fi" + } + } + ); + + for network in self.networks.iter() { + resp.as_object_mut().unwrap()["networks"] + .as_array_mut() + .unwrap() + .push(json!( + { + network.name.to_string().to_lowercase(): + {"chain": network.blockchain.to_lowercase()} + } + )); + } + + JsonResult::Resp(jsonresp(resp, id)) } fn check_token_id(network: &NetworkName, _token_id: &str) -> Result> { @@ -519,9 +540,7 @@ impl Cashierd { let main_keypairs = self.cashier_wallet.get_main_keys(&NetworkName::Bitcoin)?; if network.keypair.is_empty() { - - if main_keypairs.is_empty() - { + if main_keypairs.is_empty() { main_keypair = Keypair::new(); self.cashier_wallet.put_main_keys( &TokenKey { @@ -674,7 +693,11 @@ async fn start( let merkle_roots = RocksColumn::::new(rocks.clone()); let nullifiers = RocksColumn::::new(rocks); - let cashier_public_keys = vec![client.main_keypair.public]; + let cashier_public = client.main_keypair.public; + let cashier_public_str = bs58::encode(&serialize(&cashier_public)).into_string(); + cashierd.public_key = cashier_public_str.clone(); + + let cashier_public_keys = vec![cashier_public]; let state = Arc::new(Mutex::new(State { tree: CommitmentTree::empty(), @@ -686,9 +709,7 @@ async fn start( })); if get_address_flag { - let cashier_public = client.main_keypair.public; - let cashier_public = bs58::encode(&serialize(&cashier_public)).into_string(); - println!("Public Key: {}", cashier_public); + println!("Public Key: {}", cashier_public_str); return Ok(()); }; @@ -720,7 +741,7 @@ async fn main() -> Result<()> { .get_matches(); let config_path = if args.is_present("CONFIG") { - PathBuf::from(args.value_of("CONFIG").unwrap()) + expand_path(args.value_of("CONFIG").unwrap())? } else { join_config_path(&PathBuf::from("cashierd.toml"))? };