UNPKG

@chainreactionom/nano-mcp

Version:

NANO cryptocurrency wallet implementation for MCP with comprehensive testing

79 lines (70 loc) 2.35 kB
import * as nanoWeb from 'nanocurrency-web'; import * as nanocurrency from 'nanocurrency'; export class KeyManager { constructor(logger) { this.logger = logger; } async generateKeyPair() { try { const seed = await nanoWeb.wallet.generateSeed(); const privateKey = await nanoWeb.wallet.deriveSecretKey(seed, 0); const publicKey = await nanoWeb.wallet.derivePublicKey(privateKey); const address = await nanoWeb.wallet.deriveAddress(publicKey, { useNanoPrefix: true }); this.logger.log('WALLET_GENERATED', { publicKey, address }); return { seed, privateKey, publicKey, address }; } catch (error) { this.logger.logError('KEY_GENERATION_ERROR', error); throw error; } } validateKeyFormat(privateKey) { try { return nanocurrency.checkKey(privateKey); } catch (error) { this.logger.logError('KEY_VALIDATION_ERROR', error); return false; } } verifyKeyPair(privateKey, publicKey) { try { const derivedPublicKey = nanocurrency.derivePublicKey(privateKey); return derivedPublicKey === publicKey; } catch (error) { this.logger.logError('KEY_VERIFICATION_ERROR', error); return false; } } signBlock(block, privateKey) { try { const blockHash = nanocurrency.hashBlock({ account: block.account, previous: block.previous, representative: block.representative, balance: block.balance, link: block.link }); const signature = nanocurrency.signBlock({ hash: blockHash, secretKey: privateKey }); return { block: { ...block, signature, hash: blockHash } }; } catch (error) { this.logger.logError('BLOCK_SIGNING_ERROR', error); throw error; } } }