diff --git a/doc/developer.md b/doc/developer.md new file mode 100644 index 0000000..f0008d9 --- /dev/null +++ b/doc/developer.md @@ -0,0 +1,60 @@ +# Developer Docs for SDL + +Random stuff that is useful for devs. + +# Checking return values from litelib + +There are 3 functions written in Rust that live in lib/src/lib.rs : + + * `litelib_initialize_new` + * create a new client/connection and brand new wallet + * `litelib_initialize_new_from_phrase` + * create a new client/connection from a seedphrase (restoring from seedphrase) + * `litelib_initialize_existing` + * create a new client/connection with an already existing wallet + +The Rust code calls it a "LightClient" while the C++ of SDL calls it a "Connection". + +When `litelib_initialize_existing` or `litelib_initialize_new_from_phrase` return successfully, they return the string "OK" (which is not JSON). + +When `litelib_initialize_new` returns successfully it returns JSON that looks like : + +``` +{"seed":"seed","birthday":birthday} +``` + +where "seed" is a 24 word seed and birthday is an integer block height. + +So when calling these 3 functions, which looks almost the same in the calling code, the code which checks if they worked will be different, depending on what each returns on success. + +When checking the return value of `litelib_initialize_existing` or `litelib_initialize_new_from_phrase` it should look like : + +``` +QString reply = ""; +try { + char* resp = litelib_initialize_new_from_phrase(...); + reply = litelib_process_response(resp); +} catch { + ... +} +if (reply.isEmpty())) { + // litelib_initialize_new_from_phrase failed + ... +} +``` + +When checking the return value of `litelib_initialize_new` it should look like : + +``` +QString reply = ""; +try { + char* resp = litelib_initialize_new(...); + reply = litelib_process_response(resp); +} catch { + ... +} +if (reply.toUpper().trimmed() != "OK") { + // litelib_initialize_new failed + ... +} +```