|
|
|
|
@ -4,22 +4,44 @@ use tdn::types::{
@@ -4,22 +4,44 @@ use tdn::types::{
|
|
|
|
|
primitive::HandleResult, |
|
|
|
|
rpc::{json, RpcError, RpcHandler, RpcParam}, |
|
|
|
|
}; |
|
|
|
|
use tdn_did::generate_eth_account; |
|
|
|
|
use tdn_did::{generate_btc_account, generate_eth_account}; |
|
|
|
|
use web3::signing::Key; |
|
|
|
|
|
|
|
|
|
use crate::rpc::RpcState; |
|
|
|
|
use crate::{rpc::RpcState, storage::wallet_db}; |
|
|
|
|
|
|
|
|
|
use super::{models::ChainToken, ETH_NODE}; |
|
|
|
|
use super::{ |
|
|
|
|
models::{Address, ChainToken}, |
|
|
|
|
ETH_NODE, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
#[inline] |
|
|
|
|
fn wallet_list(devices: Vec<Address>) -> RpcParam { |
|
|
|
|
let mut results = vec![]; |
|
|
|
|
for wallet in devices { |
|
|
|
|
results.push(wallet.to_rpc()); |
|
|
|
|
} |
|
|
|
|
json!(results) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) { |
|
|
|
|
handler.add_method("wallet-echo", |_, params, _| async move { |
|
|
|
|
Ok(HandleResult::rpc(json!(params))) |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
handler.add_method( |
|
|
|
|
"wallet-list", |
|
|
|
|
|gid: GroupId, _params: Vec<RpcParam>, state: Arc<RpcState>| async move { |
|
|
|
|
let db = wallet_db(state.layer.read().await.base(), &gid)?; |
|
|
|
|
let addresses = Address::list(&db)?; |
|
|
|
|
Ok(HandleResult::rpc(wallet_list(addresses))) |
|
|
|
|
}, |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
handler.add_method( |
|
|
|
|
"wallet-generate", |
|
|
|
|
|gid: GroupId, params: Vec<RpcParam>, state: Arc<RpcState>| async move { |
|
|
|
|
let lock = params[0].as_str().ok_or(RpcError::ParseError)?; |
|
|
|
|
let chain = ChainToken::from_i64(params[0].as_i64().ok_or(RpcError::ParseError)?); |
|
|
|
|
let lock = params[1].as_str().ok_or(RpcError::ParseError)?; |
|
|
|
|
|
|
|
|
|
let group_lock = state.group.read().await; |
|
|
|
|
let mnemonic = group_lock.mnemonic(&gid, lock)?; |
|
|
|
|
@ -35,11 +57,22 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) {
@@ -35,11 +57,22 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) {
|
|
|
|
|
None |
|
|
|
|
}; |
|
|
|
|
let index = 0; // TOOD
|
|
|
|
|
let sk = generate_eth_account(lang, &mnemonic, account_index, index, pass)?; |
|
|
|
|
let address = (&sk).address(); |
|
|
|
|
println!("{:?}", address); |
|
|
|
|
let mut address = match chain { |
|
|
|
|
ChainToken::ETH | ChainToken::ERC20 | ChainToken::ERC721 => { |
|
|
|
|
let sk = generate_eth_account(lang, &mnemonic, account_index, index, pass)?; |
|
|
|
|
let address = (&sk).address().to_string(); |
|
|
|
|
Address::new(chain, index as i64, address) |
|
|
|
|
} |
|
|
|
|
ChainToken::BTC => { |
|
|
|
|
let _sk = generate_btc_account(lang, &mnemonic, account_index, index, pass)?; |
|
|
|
|
todo!(); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
let db = wallet_db(state.layer.read().await.base(), &gid)?; |
|
|
|
|
address.insert(&db)?; |
|
|
|
|
|
|
|
|
|
Ok(HandleResult::rpc(json!([mnemonic]))) |
|
|
|
|
Ok(HandleResult::rpc(address.to_rpc())) |
|
|
|
|
}, |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
|