diff options
| author | cyan <cyjan@mrcyjanek.net> | 2024-10-21 11:30:40 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-21 11:30:40 +0200 |
| commit | d54c9023bdf089489468d86b3aedd017e8973252 (patch) | |
| tree | 39d96db065dfb35cd995968ee21bff00ea836a99 /tests/compare.ts | |
| parent | f956f6b78164412c60ba6e7e368afc17635ae7ce (diff) | |
| parent | d04dcf67ec042fca76b48ffc09ea9d2ea4b5106e (diff) | |
Merge branch 'master' into ledgerledger
Diffstat (limited to 'tests/compare.ts')
| -rwxr-xr-x | tests/compare.ts | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/tests/compare.ts b/tests/compare.ts new file mode 100755 index 0000000..d09bdd9 --- /dev/null +++ b/tests/compare.ts @@ -0,0 +1,80 @@ +import { moneroSymbols as symbols, type MoneroTsDylib, type WowneroTsDylib } from "../impls/monero.ts/src/symbols.ts"; +import { loadMoneroDylib, loadWowneroDylib } from "../impls/monero.ts/src/bindings.ts"; +import { Wallet, WalletManager } from "../impls/monero.ts/mod.ts"; +import { readCString } from "../impls/monero.ts/src/utils.ts"; +import { assertEquals } from "jsr:@std/assert"; + +const coin = Deno.args[0] as "monero" | "wownero"; +const version = Deno.args[1]; +const walletInfo = JSON.parse(Deno.args[2]); + +const moneroSymbols = { + ...symbols, + + "MONERO_Wallet_secretViewKey": { + nonblocking: true, + // void* wallet_ptr + parameters: ["pointer"], + // const char* + result: "pointer", + }, + "MONERO_Wallet_publicViewKey": { + nonblocking: true, + // void* wallet_ptr + parameters: ["pointer"], + // const char* + result: "pointer", + }, + + "MONERO_Wallet_secretSpendKey": { + nonblocking: true, + // void* wallet_ptr + parameters: ["pointer"], + // const char* + result: "pointer", + }, + "MONERO_Wallet_publicSpendKey": { + nonblocking: true, + // void* wallet_ptr + parameters: ["pointer"], + // const char* + result: "pointer", + }, +} as const; + +type ReplaceMonero<T extends string> = T extends `MONERO${infer Y}` ? `WOWNERO${Y}` : never; +type WowneroSymbols = { [Key in keyof typeof moneroSymbols as ReplaceMonero<Key>]: (typeof moneroSymbols)[Key] }; +const wowneroSymbols = Object.fromEntries( + Object.entries(moneroSymbols).map(([key, value]) => [key.replace("MONERO", "WOWNERO"), value]), +) as WowneroSymbols; + +let getKey: (wallet: Wallet, type: `${"secret" | "public"}${"Spend" | "View"}Key`) => Promise<string | null>; + +if (coin === "monero") { + const dylib = Deno.dlopen(`tests/libs/${version}/monero_libwallet2_api_c.so`, moneroSymbols); + loadMoneroDylib(dylib as MoneroTsDylib); + + getKey = async (wallet, type) => + await readCString(await dylib.symbols[`MONERO_Wallet_${type}` as const](wallet.getPointer())); +} else { + const dylib = Deno.dlopen(`tests/libs/${version}/wownero_libwallet2_api_c.so`, wowneroSymbols); + loadWowneroDylib(dylib as WowneroTsDylib); + + getKey = async (wallet, type) => + await readCString( + await dylib.symbols[`WOWNERO_Wallet_${type}` as const](wallet.getPointer()), + ); +} + +const walletManager = await WalletManager.new(); +const wallet = await Wallet.open(walletManager, walletInfo.path, walletInfo.password); + +assertEquals(await wallet.address(), walletInfo.address); + +assertEquals(await getKey(wallet, "publicSpendKey"), walletInfo.publicSpendKey); +assertEquals(await getKey(wallet, "secretSpendKey"), walletInfo.secretSpendKey); + +assertEquals(await getKey(wallet, "publicViewKey"), walletInfo.publicViewKey); +assertEquals(await getKey(wallet, "secretViewKey"), walletInfo.secretViewKey); + +await wallet.store(walletInfo.path); |
