import assert from 'node:assert/strict'; import { test } from 'node:test'; import { generateForeignWallet } from '../src/index'; test('foreign wallet derivation matches the Qortal Hub derivation convention', () => { const seed = Uint8Array.from({ length: 32 }, (_, index) => index); const original = [...seed]; const expected: Record = { BTC: { address: '1A9G3q16XmzmVDF72DvSZEK37ZzZUrNmK1', extendedPublicKey: 'xpub661MyMwAqRbcFtt61PnRrkS3rTbfuoSzFdQToo7EWMYiDNoqdiBPczzQAUhxLRyRbdiVjLoT1noDubccztGBrGEzvj63fsS58UeGxfuyivb', }, LTC: { address: 'LYn1W4kqTV1KYcdBomcQ5HdKr9GprWhTY2', extendedPublicKey: 'xpub661MyMwAqRbcEeGMkZu4CuQ2DQAs9N9tUSmyWSqZRvshiE5FQwcVzdaVj8dNkt618jxT2UGzvYs4eieqNU8GWQY6jPMuHR2SdSZicSgnJVZ', }, DOGE: { address: 'DFxiKGpTHGfyeyo67P7nzXJ57DxRArZy9q', extendedPublicKey: 'dgub8kXBZ7ymNWy2TBrQUZ5vm9RVY3p1CK96HkfWU7BXLAXTEmUPSb1o7doAGnokfd8jhUAHK8qhRSbyiMWNTbGJzWdpTKeCSL7RorFvxk7ywk4', }, DGB: { address: 'DSdpkc557DEnhYm3QM66tK8DmrmjtVon6V', extendedPublicKey: 'xpub661MyMwAqRbcG37CaNum4X7eZLavWF1NQ2wsz2tTSK78Ed4uCyZAFM85GHKNMogEQf4rYSM4NcaE65WkeXUjsFU6cKbxCfzBbiEAeJV2dqA', }, RVN: { address: 'RLDxaPHNqrBXDR1utACFqLzDq1jwUj7wug', extendedPublicKey: 'xpub661MyMwAqRbcFcm4bHdVHhga8qn9mXuzYFvy6CnwR3C2LC3UgPNt1XP7yxv8wt3aRpnpUe3pLgAC3jFstrG41B6KTKEiV3Z3NEM7JozWRJf', }, ARRR: { address: 'h9BRoyJm2BdMGNGh81YRyxMeu4rv26dDZsm', extendedPublicKey: 'xpub661MyMwAqRbcGHfBbYi8i2oGt4DmHQPGqQHst8Xsig653mgzn9KMBFtqiVrCLnnYSbqnqgN6zeujP3PDApoyyDMnS4hCCxTapKF7pZHReS7', }, }; for (const [coin, vector] of Object.entries(expected)) { const wallet = generateForeignWallet(seed, coin); assert.equal(wallet.address, vector.address, `${coin} address`); assert.equal(wallet.derivedMasterPublicKey, vector.extendedPublicKey, `${coin} xpub`); assert.ok(wallet.seed58.length > 0, `${coin} seed material is generated internally`); } assert.deepEqual([...seed], original, 'derivation does not mutate the Qortal address seed'); }); test('foreign wallet derivation rejects unsupported coins', () => { assert.throws( () => generateForeignWallet(new Uint8Array(32), 'NOT_A_COIN'), /Unsupported foreign blockchain/, ); });