use crate::{gdev, indexer::*, Args, Client}; use anyhow::Result; pub async fn technical_committee_members(client: Client, args: &Args) -> Result<()> { let parent_hash = client .storage() .fetch(&gdev::storage().system().parent_hash(), None) .await? .unwrap(); let gql_client = reqwest::Client::builder() .user_agent("gcli/0.1.0") .build()?; let indexer = if args.no_indexer { None } else { Some(Indexer { gql_client, gql_url: &args.indexer, }) }; for account_id in client .storage() .fetch( &gdev::storage().technical_committee().members(), Some(parent_hash), ) .await? .unwrap_or_default() { println!( "{}", if let Some(indexer) = &indexer { indexer .username_by_pubkey(&account_id.to_string()) .await .ok() .flatten() } else { client .storage() .fetch( &gdev::storage().identity().identity_index_of(&account_id), Some(parent_hash), ) .await .ok() .flatten() .map(|identity_id| format!("{identity_id}")) } .unwrap_or_else(|| account_id.to_string(),) ); } Ok(()) } // TODO: // * better formatting (format pubkeys to SS58 and add usernames) // * display proposals indices pub async fn technical_committee_proposals(client: Client) -> Result<()> { let parent_hash = client .storage() .fetch(&gdev::storage().system().parent_hash(), None) .await? .unwrap(); let mut proposals_iter = client .storage() .iter( gdev::storage() .technical_committee() .proposal_of(sp_core::H256::default()), 10, Some(parent_hash), ) .await?; while let Some((proposal_hash, proposal)) = proposals_iter.next().await? { println!("{}", hex::encode(&proposal_hash.0[32..64])); println!("{proposal:#?}"); println!(); } Ok(()) }