Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev adding chain name to server #87

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 42 additions & 42 deletions native/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

73 changes: 51 additions & 22 deletions native/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ lazy_static! {
}

register_module!(mut m, {
//m.export_function("zingolib_say_hello", zingolib_say_hello)?;
m.export_function("zingolib_wallet_exists", zingolib_wallet_exists)?;
m.export_function("zingolib_initialize_new", zingolib_initialize_new)?;
m.export_function("zingolib_initialize_existing", zingolib_initialize_existing)?;
Expand All @@ -44,26 +43,27 @@ register_module!(mut m, {
Ok(())
});

fn get_chainnym(server: &str) -> ChainType {
fn get_chainnym(chain_hint_str: &str) -> Result<ChainType, String> {
// Attempt to guess type from known URIs
match server {
"https://mainnet.lightwalletd.com:9067/"
| "https://lwdv2.zecwallet.co:1443/"
| "https://lwdv3.zecwallet.co:443/"
| "https://zebra-lwd.zecwallet.co:9067/" => ChainType::Mainnet,
x if x.contains("testnet") => ChainType::Testnet,
x if x.contains("127.0.0.1") | x.contains("localhost") => ChainType::Regtest,
x if x.contains("fakemain") => ChainType::FakeMainnet,
_ => panic!("Unrecognized server URI, is it a new server? What chain does it serve?"),
}
let result = match chain_hint_str {
"main" => ChainType::Mainnet,
"test" => ChainType::Testnet,
"regtest" => ChainType::Regtest,
_ => return Err("Not a valid chain hint!".to_string()),
};

Ok(result)
}

// Check if there is an existing wallet
fn zingolib_wallet_exists(mut cx: FunctionContext) -> JsResult<JsBoolean> {
let server_uri = cx.argument::<JsString>(0)?.value(&mut cx);
let chain_hint = cx.argument::<JsString>(0)?.value(&mut cx);

let server = construct_lightwalletd_uri(Some(server_uri));
let chaintype = get_chainnym(&server.to_string());
let chaintype = match get_chainnym(&chain_hint.to_string())
{
Ok(c) => c,
Err(_) => return Ok(cx.boolean(false)),
};
let config = ZingoConfig::create_unconnected(chaintype, None);

Ok(cx.boolean(config.wallet_exists()))
Expand All @@ -72,15 +72,23 @@ fn zingolib_wallet_exists(mut cx: FunctionContext) -> JsResult<JsBoolean> {
/// Create a new wallet and return the seed for the newly created wallet.
fn zingolib_initialize_new(mut cx: FunctionContext) -> JsResult<JsString> {
let server_uri = cx.argument::<JsString>(0)?.value(&mut cx);
let chain_hint = cx.argument::<JsString>(1)?.value(&mut cx);

let resp = || {
let server = construct_lightwalletd_uri(Some(server_uri));
let chaintype = get_chainnym(&server.to_string());
let chaintype = match get_chainnym(&chain_hint.to_string())
{
Ok(c) => c,
Err(e) => {
return format!("Error: {}", e);
}
};
let block_height = match zingolib::get_latest_block_height(server.clone())
.map_err(|e| format! {"Error: {e}"})
{
Ok(height) => height,
Err(e) => return e,
Err(e) => {
return format!("Error: {}", e);
}
};

let config = match zingolib::load_clientconfig(server, None, chaintype, false) {
Expand Down Expand Up @@ -123,11 +131,18 @@ fn zingolib_initialize_new_from_phrase(mut cx: FunctionContext) -> JsResult<JsSt
let server_uri = cx.argument::<JsString>(0)?.value(&mut cx);
let seed = cx.argument::<JsString>(1)?.value(&mut cx);
let birthday = cx.argument::<JsNumber>(2)?.value(&mut cx);
let overwrite = cx.argument::<JsBoolean>(3)?.value(&mut cx);
let overwrite = cx.argument::<JsBoolean>(3)?.value(&mut cx);
let chain_hint = cx.argument::<JsString>(4)?.value(&mut cx);

let resp = || {
let server = construct_lightwalletd_uri(Some(server_uri));
let chaintype = get_chainnym(&server.to_string());
let chaintype = match get_chainnym(&chain_hint.to_string())
{
Ok(c) => c,
Err(e) => {
return format!("Error: {}", e);
}
};

let config = match zingolib::load_clientconfig(server, None, chaintype, false) {
Ok(c) => c,
Expand Down Expand Up @@ -166,10 +181,17 @@ fn zingolib_initialize_new_from_ufvk(mut cx: FunctionContext) -> JsResult<JsStri
let ufvk = cx.argument::<JsString>(1)?.value(&mut cx);
let birthday = cx.argument::<JsNumber>(2)?.value(&mut cx);
let overwrite = cx.argument::<JsBoolean>(3)?.value(&mut cx);
let chain_hint = cx.argument::<JsString>(4)?.value(&mut cx);

let resp = || {
let server = construct_lightwalletd_uri(Some(server_uri));
let chaintype = get_chainnym(&server.to_string());
let chaintype = match get_chainnym(&chain_hint.to_string())
{
Ok(c) => c,
Err(e) => {
return format!("Error: {}", e);
}
};

let config = match zingolib::load_clientconfig(server, None, chaintype, false) {
Ok(c) => c,
Expand Down Expand Up @@ -206,10 +228,17 @@ fn zingolib_initialize_new_from_ufvk(mut cx: FunctionContext) -> JsResult<JsStri
// Initialize a new lightclient and store its value
fn zingolib_initialize_existing(mut cx: FunctionContext) -> JsResult<JsString> {
let server_uri = cx.argument::<JsString>(0)?.value(&mut cx);
let chain_hint = cx.argument::<JsString>(1)?.value(&mut cx);

let resp = || {
let server = construct_lightwalletd_uri(Some(server_uri));
let chaintype = get_chainnym(&server.to_string());
let chaintype = match get_chainnym(&chain_hint.to_string())
{
Ok(c) => c,
Err(e) => {
return format!("Error: {}", e);
}
};

let config = match zingolib::load_clientconfig(server, None, chaintype, false) {
Ok(c) => c,
Expand Down
2 changes: 2 additions & 0 deletions src/components/appstate/components/RPCConfig.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
export default class RPCConfig {
url: string;
chain: 'main' | 'test' | 'regtest' | "";

constructor() {
this.url = "";
this.chain = "";
}
}

Loading