@ironwallet/mcp-server 1.0.0-preprod.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +161 -0
- package/assets/knight.png +0 -0
- package/assets/wordmark.svg +20 -0
- package/dist/api/auth.d.ts +20 -0
- package/dist/api/auth.js +92 -0
- package/dist/api/auth.js.map +1 -0
- package/dist/api/balances.d.ts +25 -0
- package/dist/api/balances.js +565 -0
- package/dist/api/balances.js.map +1 -0
- package/dist/api/http.d.ts +34 -0
- package/dist/api/http.js +277 -0
- package/dist/api/http.js.map +1 -0
- package/dist/api/relay.d.ts +49 -0
- package/dist/api/relay.js +194 -0
- package/dist/api/relay.js.map +1 -0
- package/dist/api/rpc.d.ts +10 -0
- package/dist/api/rpc.js +26 -0
- package/dist/api/rpc.js.map +1 -0
- package/dist/api/swap.d.ts +134 -0
- package/dist/api/swap.js +554 -0
- package/dist/api/swap.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.js +20 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +91 -0
- package/dist/config.js +175 -0
- package/dist/config.js.map +1 -0
- package/dist/generated/env-config.d.ts +5 -0
- package/dist/generated/env-config.js +23 -0
- package/dist/generated/env-config.js.map +1 -0
- package/dist/generated/env-profile.d.ts +15 -0
- package/dist/generated/env-profile.js +2 -0
- package/dist/generated/env-profile.js.map +1 -0
- package/dist/keystore/crypto.d.ts +17 -0
- package/dist/keystore/crypto.js +57 -0
- package/dist/keystore/crypto.js.map +1 -0
- package/dist/keystore/store.d.ts +45 -0
- package/dist/keystore/store.js +224 -0
- package/dist/keystore/store.js.map +1 -0
- package/dist/keystore/types.d.ts +31 -0
- package/dist/keystore/types.js +2 -0
- package/dist/keystore/types.js.map +1 -0
- package/dist/local-secrets.d.ts +16 -0
- package/dist/local-secrets.js +73 -0
- package/dist/local-secrets.js.map +1 -0
- package/dist/log.d.ts +30 -0
- package/dist/log.js +323 -0
- package/dist/log.js.map +1 -0
- package/dist/passphrase.d.ts +6 -0
- package/dist/passphrase.js +10 -0
- package/dist/passphrase.js.map +1 -0
- package/dist/policy.d.ts +22 -0
- package/dist/policy.js +108 -0
- package/dist/policy.js.map +1 -0
- package/dist/server.d.ts +6 -0
- package/dist/server.js +38 -0
- package/dist/server.js.map +1 -0
- package/dist/signing/bitcoin.d.ts +18 -0
- package/dist/signing/bitcoin.js +84 -0
- package/dist/signing/bitcoin.js.map +1 -0
- package/dist/signing/dispatch.d.ts +7 -0
- package/dist/signing/dispatch.js +35 -0
- package/dist/signing/dispatch.js.map +1 -0
- package/dist/signing/evm.d.ts +16 -0
- package/dist/signing/evm.js +59 -0
- package/dist/signing/evm.js.map +1 -0
- package/dist/signing/index.d.ts +10 -0
- package/dist/signing/index.js +57 -0
- package/dist/signing/index.js.map +1 -0
- package/dist/signing/solana.d.ts +18 -0
- package/dist/signing/solana.js +106 -0
- package/dist/signing/solana.js.map +1 -0
- package/dist/signing/swap.d.ts +10 -0
- package/dist/signing/swap.js +114 -0
- package/dist/signing/swap.js.map +1 -0
- package/dist/signing/ton.d.ts +33 -0
- package/dist/signing/ton.js +166 -0
- package/dist/signing/ton.js.map +1 -0
- package/dist/signing/tron.d.ts +11 -0
- package/dist/signing/tron.js +39 -0
- package/dist/signing/tron.js.map +1 -0
- package/dist/signing/types.d.ts +23 -0
- package/dist/signing/types.js +2 -0
- package/dist/signing/types.js.map +1 -0
- package/dist/signing/xrp.d.ts +11 -0
- package/dist/signing/xrp.js +122 -0
- package/dist/signing/xrp.js.map +1 -0
- package/dist/tools/helpers.d.ts +42 -0
- package/dist/tools/helpers.js +80 -0
- package/dist/tools/helpers.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.js +16 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/swap.d.ts +6 -0
- package/dist/tools/swap.js +343 -0
- package/dist/tools/swap.js.map +1 -0
- package/dist/tools/transfer.d.ts +6 -0
- package/dist/tools/transfer.js +284 -0
- package/dist/tools/transfer.js.map +1 -0
- package/dist/tools/wallets.d.ts +6 -0
- package/dist/tools/wallets.js +79 -0
- package/dist/tools/wallets.js.map +1 -0
- package/dist/wallet/derive.d.ts +53 -0
- package/dist/wallet/derive.js +233 -0
- package/dist/wallet/derive.js.map +1 -0
- package/dist/web/manager.d.ts +15 -0
- package/dist/web/manager.js +444 -0
- package/dist/web/manager.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../src/tools/transfer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tools for local keystore wallet management.
|
|
3
|
+
*/
|
|
4
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
5
|
+
import type { ToolHelpers } from "./helpers.js";
|
|
6
|
+
export declare function registerWalletTools(server: McpServer, helpers: ToolHelpers): void;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tools for local keystore wallet management.
|
|
3
|
+
*/
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { createWallets, loadKeystore } from "../keystore/store.js";
|
|
6
|
+
import { requirePassphrase } from "../passphrase.js";
|
|
7
|
+
import { ensureManager } from "../web/manager.js";
|
|
8
|
+
import { logInfo, logWarn } from "../log.js";
|
|
9
|
+
export function registerWalletTools(server, helpers) {
|
|
10
|
+
const { ok, withToolLog } = helpers;
|
|
11
|
+
server.registerTool("list_wallets", {
|
|
12
|
+
title: "List wallets",
|
|
13
|
+
description: "List the wallets in the local keystore with their addresses per network. Never returns private keys or seed phrases.",
|
|
14
|
+
inputSchema: {},
|
|
15
|
+
}, async () => withToolLog("list_wallets", {}, async ({ correlationId }) => {
|
|
16
|
+
const ks = loadKeystore();
|
|
17
|
+
const wallets = ks.wallets.map((w) => ({
|
|
18
|
+
name: w.name,
|
|
19
|
+
addresses: w.addresses,
|
|
20
|
+
backedUp: w.backedUp,
|
|
21
|
+
policy: w.policy?.enabled ? w.policy : undefined,
|
|
22
|
+
}));
|
|
23
|
+
logInfo("tool.list_wallets.result", {
|
|
24
|
+
correlationId,
|
|
25
|
+
count: wallets.length,
|
|
26
|
+
names: wallets.map((w) => w.name),
|
|
27
|
+
});
|
|
28
|
+
// Keep the historical array shape for agents; correlationId is in the log.
|
|
29
|
+
return ok(wallets);
|
|
30
|
+
}));
|
|
31
|
+
server.registerTool("create_wallets", {
|
|
32
|
+
title: "Create wallets",
|
|
33
|
+
description: "Generate one or more brand-new wallets (BIP-39). Returns names and addresses only. Seed phrases are NOT returned to the agent. The response includes a local browser URL where the user can view and back up the recovery phrases.",
|
|
34
|
+
inputSchema: {
|
|
35
|
+
count: z.number().int().min(1).max(50).describe("How many wallets to create."),
|
|
36
|
+
name_prefix: z
|
|
37
|
+
.string()
|
|
38
|
+
.optional()
|
|
39
|
+
.describe("Optional name prefix, e.g. 'agent-hot'. Defaults to 'wallet'."),
|
|
40
|
+
},
|
|
41
|
+
}, async ({ count, name_prefix }) => withToolLog("create_wallets", { count, name_prefix }, async ({ correlationId }) => {
|
|
42
|
+
const created = createWallets(count, requirePassphrase(), {
|
|
43
|
+
namePrefix: name_prefix,
|
|
44
|
+
});
|
|
45
|
+
let backupUrl;
|
|
46
|
+
try {
|
|
47
|
+
backupUrl = await ensureManager();
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
logWarn("tool.create_wallets.manager_unavailable", {
|
|
51
|
+
correlationId,
|
|
52
|
+
error: e instanceof Error ? e.message : String(e),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return ok({
|
|
56
|
+
correlationId,
|
|
57
|
+
created: created.map((c) => ({ name: c.name, addresses: c.addresses })),
|
|
58
|
+
backup_url: backupUrl,
|
|
59
|
+
backup_hint: backupUrl
|
|
60
|
+
? "Seed phrases were not shown to the agent. To view and back them up, open backup_url in a browser and click \"Reveal / backup\" for each wallet (words stay in the browser)."
|
|
61
|
+
: "Seed phrases were not shown to the agent. Call open_wallet_manager and back up each wallet in the browser (Reveal / backup).",
|
|
62
|
+
});
|
|
63
|
+
}));
|
|
64
|
+
server.registerTool("open_wallet_manager", {
|
|
65
|
+
title: "Open wallet manager (browser)",
|
|
66
|
+
description: "Open a local browser form to add/import/create wallets or back them up (reveal the recovery phrase). Returns a localhost URL for the user to open. Seed phrases are entered and shown ONLY in the browser and never pass through the agent. Use this whenever the user asks to add, import, create, or back up a wallet.",
|
|
67
|
+
inputSchema: {},
|
|
68
|
+
}, async () => withToolLog("open_wallet_manager", {}, async ({ correlationId }) => {
|
|
69
|
+
const url = await ensureManager();
|
|
70
|
+
return ok({
|
|
71
|
+
correlationId,
|
|
72
|
+
url,
|
|
73
|
+
note: "Open this URL in your browser to import/create/backup wallets. " +
|
|
74
|
+
"The recovery phrase stays in the browser and is never sent to the agent. " +
|
|
75
|
+
"The page is local-only (127.0.0.1) and closes itself after 15 minutes of inactivity.",
|
|
76
|
+
});
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=wallets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallets.js","sourceRoot":"","sources":["../../src/tools/wallets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BIP-39 / BIP-32 key derivation, seed-compatible with the Ironwallet mobile
|
|
3
|
+
* app. The app always derives account 0, address index 0 (no HD account
|
|
4
|
+
* switching), so we do the same. Multiple wallets = multiple mnemonics, not
|
|
5
|
+
* multiple indices.
|
|
6
|
+
*/
|
|
7
|
+
import type { NetworkId } from "../config.js";
|
|
8
|
+
/** Litecoin mainnet params for @scure/btc-signer (P2WPKH bech32 `ltc1…`). */
|
|
9
|
+
export declare const LITECOIN_NETWORK: {
|
|
10
|
+
readonly bech32: "ltc";
|
|
11
|
+
readonly pubKeyHash: 48;
|
|
12
|
+
readonly scriptHash: 50;
|
|
13
|
+
readonly wif: 176;
|
|
14
|
+
};
|
|
15
|
+
/** Dogecoin mainnet params (legacy P2PKH `D…`; no SegWit). */
|
|
16
|
+
export declare const DOGE_NETWORK: {
|
|
17
|
+
readonly bech32: "doge";
|
|
18
|
+
readonly pubKeyHash: 30;
|
|
19
|
+
readonly scriptHash: 22;
|
|
20
|
+
readonly wif: 158;
|
|
21
|
+
};
|
|
22
|
+
export interface DerivedKey {
|
|
23
|
+
/** 0x-prefixed private key hex. Never leaves the process. */
|
|
24
|
+
privateKey: string;
|
|
25
|
+
/** Network-formatted address. */
|
|
26
|
+
address: string;
|
|
27
|
+
}
|
|
28
|
+
/** Generate a new BIP-39 mnemonic (128 bits = 12 words, or 256 = 24). */
|
|
29
|
+
export declare function newMnemonic(words?: 12 | 24): string;
|
|
30
|
+
export declare function isValidMnemonic(mnemonic: string): boolean;
|
|
31
|
+
/** EVM address (EIP-55 checksum). Shared across all EVM networks. */
|
|
32
|
+
export declare function deriveEvm(mnemonic: string): DerivedKey;
|
|
33
|
+
/**
|
|
34
|
+
* Tron address: base58check of (0x41 || keccak256(uncompressedPubKey[1:])[-20:]).
|
|
35
|
+
*/
|
|
36
|
+
export declare function deriveTron(mnemonic: string): DerivedKey;
|
|
37
|
+
/** Bitcoin BIP-84 native SegWit (P2WPKH). Address prefix bc1 / tb1 by network. */
|
|
38
|
+
export declare function deriveBitcoin(mnemonic: string, testnet: boolean): DerivedKey;
|
|
39
|
+
/** Litecoin BIP-84 native SegWit (P2WPKH). Mainnet `ltc1q…` (hd-wallet MainNet). */
|
|
40
|
+
export declare function deriveLitecoin(mnemonic: string): DerivedKey;
|
|
41
|
+
/** Dogecoin BIP-44 legacy P2PKH. Mainnet `D…` (hd-wallet MainNet, no SegWit). */
|
|
42
|
+
export declare function deriveDoge(mnemonic: string): DerivedKey;
|
|
43
|
+
/** Solana: SLIP-0010 ed25519, base58 public key as the address. */
|
|
44
|
+
export declare function deriveSolana(mnemonic: string): DerivedKey;
|
|
45
|
+
/** TON: ed25519 key -> Wallet v4R2 on workchain 0, non-bounceable (UQ...). */
|
|
46
|
+
export declare function deriveTon(mnemonic: string): DerivedKey;
|
|
47
|
+
/** XRP: secp256k1 BIP-44, classic r-address via the XRPL codec. */
|
|
48
|
+
export declare function deriveXrp(mnemonic: string): DerivedKey;
|
|
49
|
+
export declare function deriveKey(mnemonic: string, network: NetworkId): DerivedKey;
|
|
50
|
+
/** All addresses for a mnemonic, keyed by network. Safe to expose (no keys). */
|
|
51
|
+
export declare function deriveAddresses(mnemonic: string): Record<string, string>;
|
|
52
|
+
/** Normalize an EVM address to checksum form; pass through non-EVM. */
|
|
53
|
+
export declare function normalizeAddress(network: NetworkId, address: string): string;
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BIP-39 / BIP-32 key derivation, seed-compatible with the Ironwallet mobile
|
|
3
|
+
* app. The app always derives account 0, address index 0 (no HD account
|
|
4
|
+
* switching), so we do the same. Multiple wallets = multiple mnemonics, not
|
|
5
|
+
* multiple indices.
|
|
6
|
+
*/
|
|
7
|
+
import { mnemonicToSeedSync, generateMnemonic, validateMnemonic } from "bip39";
|
|
8
|
+
import { HDKey } from "@scure/bip32";
|
|
9
|
+
import { computeAddress, getAddress, keccak256, SigningKey } from "ethers";
|
|
10
|
+
import bs58check from "bs58check";
|
|
11
|
+
import bs58 from "bs58";
|
|
12
|
+
import { hmac } from "@noble/hashes/hmac.js";
|
|
13
|
+
import { sha512 } from "@noble/hashes/sha2.js";
|
|
14
|
+
import { ed25519 } from "@noble/curves/ed25519.js";
|
|
15
|
+
import * as btc from "@scure/btc-signer";
|
|
16
|
+
import { WalletContractV4 } from "@ton/ton";
|
|
17
|
+
import { deriveAddress as xrpDeriveAddress } from "ripple-keypairs";
|
|
18
|
+
import { getConfig, isEvmNetwork } from "../config.js";
|
|
19
|
+
const EVM_PATH = "m/44'/60'/0'/0/0";
|
|
20
|
+
const TRON_PATH = "m/44'/195'/0'/0/0";
|
|
21
|
+
const BITCOIN_PATH = "m/84'/0'/0'/0/0";
|
|
22
|
+
const LITECOIN_PATH = "m/84'/2'/0'/0/0";
|
|
23
|
+
const DOGE_PATH = "m/44'/3'/0'/0/0";
|
|
24
|
+
const SOLANA_PATH = "m/44'/501'/0'";
|
|
25
|
+
const TON_PATH = "m/44'/607'/0'";
|
|
26
|
+
const XRP_PATH = "m/44'/144'/0'/0/0";
|
|
27
|
+
/** Litecoin mainnet params for @scure/btc-signer (P2WPKH bech32 `ltc1…`). */
|
|
28
|
+
export const LITECOIN_NETWORK = {
|
|
29
|
+
bech32: "ltc",
|
|
30
|
+
pubKeyHash: 0x30,
|
|
31
|
+
scriptHash: 0x32,
|
|
32
|
+
wif: 0xb0,
|
|
33
|
+
};
|
|
34
|
+
/** Dogecoin mainnet params (legacy P2PKH `D…`; no SegWit). */
|
|
35
|
+
export const DOGE_NETWORK = {
|
|
36
|
+
bech32: "doge",
|
|
37
|
+
pubKeyHash: 0x1e,
|
|
38
|
+
scriptHash: 0x16,
|
|
39
|
+
wif: 0x9e,
|
|
40
|
+
};
|
|
41
|
+
/** Generate a new BIP-39 mnemonic (128 bits = 12 words, or 256 = 24). */
|
|
42
|
+
export function newMnemonic(words = 12) {
|
|
43
|
+
return generateMnemonic(words === 24 ? 256 : 128);
|
|
44
|
+
}
|
|
45
|
+
export function isValidMnemonic(mnemonic) {
|
|
46
|
+
return validateMnemonic(mnemonic.trim());
|
|
47
|
+
}
|
|
48
|
+
function seedFromMnemonic(mnemonic) {
|
|
49
|
+
return mnemonicToSeedSync(mnemonic.trim());
|
|
50
|
+
}
|
|
51
|
+
function derivePrivateKey(mnemonic, path) {
|
|
52
|
+
const seed = seedFromMnemonic(mnemonic);
|
|
53
|
+
const root = HDKey.fromMasterSeed(seed);
|
|
54
|
+
const child = root.derive(path);
|
|
55
|
+
if (!child.privateKey)
|
|
56
|
+
throw new Error(`No private key at path ${path}`);
|
|
57
|
+
return "0x" + Buffer.from(child.privateKey).toString("hex");
|
|
58
|
+
}
|
|
59
|
+
/** EVM address (EIP-55 checksum). Shared across all EVM networks. */
|
|
60
|
+
export function deriveEvm(mnemonic) {
|
|
61
|
+
const privateKey = derivePrivateKey(mnemonic, EVM_PATH);
|
|
62
|
+
return { privateKey, address: computeAddress(privateKey) };
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Tron address: base58check of (0x41 || keccak256(uncompressedPubKey[1:])[-20:]).
|
|
66
|
+
*/
|
|
67
|
+
export function deriveTron(mnemonic) {
|
|
68
|
+
const privateKey = derivePrivateKey(mnemonic, TRON_PATH);
|
|
69
|
+
const uncompressed = SigningKey.computePublicKey(privateKey, false); // 0x04 + 64 bytes
|
|
70
|
+
const pubBytes = Buffer.from(uncompressed.slice(2), "hex").subarray(1); // drop 0x04
|
|
71
|
+
const hash = keccak256(pubBytes); // 0x + 32 bytes
|
|
72
|
+
const addr20 = Buffer.from(hash.slice(2), "hex").subarray(12); // last 20 bytes
|
|
73
|
+
const payload = Buffer.concat([Buffer.from([0x41]), addr20]);
|
|
74
|
+
return { privateKey, address: bs58check.encode(payload) };
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* SLIP-0010 ed25519 key derivation. All path segments must be hardened (this is
|
|
78
|
+
* how Solana/TON wallets derive: m/44'/501'/0' and m/44'/607'/0').
|
|
79
|
+
*/
|
|
80
|
+
function deriveEd25519PrivateKey(mnemonic, path) {
|
|
81
|
+
const seed = seedFromMnemonic(mnemonic);
|
|
82
|
+
let I = hmac(sha512, new TextEncoder().encode("ed25519 seed"), seed);
|
|
83
|
+
let key = I.slice(0, 32);
|
|
84
|
+
let chainCode = I.slice(32);
|
|
85
|
+
const segments = path
|
|
86
|
+
.split("/")
|
|
87
|
+
.slice(1) // drop leading "m"
|
|
88
|
+
.map((s) => {
|
|
89
|
+
if (!s.endsWith("'")) {
|
|
90
|
+
throw new Error(`ed25519 path segment must be hardened: ${s}`);
|
|
91
|
+
}
|
|
92
|
+
return (parseInt(s.slice(0, -1), 10) | 0x80000000) >>> 0;
|
|
93
|
+
});
|
|
94
|
+
for (const index of segments) {
|
|
95
|
+
const data = new Uint8Array(1 + 32 + 4);
|
|
96
|
+
data[0] = 0x00;
|
|
97
|
+
data.set(key, 1);
|
|
98
|
+
// ser32(index), big-endian
|
|
99
|
+
data[33] = (index >>> 24) & 0xff;
|
|
100
|
+
data[34] = (index >>> 16) & 0xff;
|
|
101
|
+
data[35] = (index >>> 8) & 0xff;
|
|
102
|
+
data[36] = index & 0xff;
|
|
103
|
+
I = hmac(sha512, chainCode, data);
|
|
104
|
+
key = I.slice(0, 32);
|
|
105
|
+
chainCode = I.slice(32);
|
|
106
|
+
}
|
|
107
|
+
return key;
|
|
108
|
+
}
|
|
109
|
+
/** Bitcoin BIP-84 native SegWit (P2WPKH). Address prefix bc1 / tb1 by network. */
|
|
110
|
+
export function deriveBitcoin(mnemonic, testnet) {
|
|
111
|
+
const seed = seedFromMnemonic(mnemonic);
|
|
112
|
+
const root = HDKey.fromMasterSeed(seed);
|
|
113
|
+
const child = root.derive(BITCOIN_PATH);
|
|
114
|
+
if (!child.privateKey || !child.publicKey) {
|
|
115
|
+
throw new Error("No Bitcoin key derived.");
|
|
116
|
+
}
|
|
117
|
+
const network = testnet ? btc.TEST_NETWORK : btc.NETWORK;
|
|
118
|
+
const p2wpkh = btc.p2wpkh(child.publicKey, network);
|
|
119
|
+
if (!p2wpkh.address)
|
|
120
|
+
throw new Error("Failed to build Bitcoin address.");
|
|
121
|
+
return {
|
|
122
|
+
privateKey: "0x" + Buffer.from(child.privateKey).toString("hex"),
|
|
123
|
+
address: p2wpkh.address,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/** Litecoin BIP-84 native SegWit (P2WPKH). Mainnet `ltc1q…` (hd-wallet MainNet). */
|
|
127
|
+
export function deriveLitecoin(mnemonic) {
|
|
128
|
+
const seed = seedFromMnemonic(mnemonic);
|
|
129
|
+
const root = HDKey.fromMasterSeed(seed);
|
|
130
|
+
const child = root.derive(LITECOIN_PATH);
|
|
131
|
+
if (!child.privateKey || !child.publicKey) {
|
|
132
|
+
throw new Error("No Litecoin key derived.");
|
|
133
|
+
}
|
|
134
|
+
const p2wpkh = btc.p2wpkh(child.publicKey, LITECOIN_NETWORK);
|
|
135
|
+
if (!p2wpkh.address)
|
|
136
|
+
throw new Error("Failed to build Litecoin address.");
|
|
137
|
+
return {
|
|
138
|
+
privateKey: "0x" + Buffer.from(child.privateKey).toString("hex"),
|
|
139
|
+
address: p2wpkh.address,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/** Dogecoin BIP-44 legacy P2PKH. Mainnet `D…` (hd-wallet MainNet, no SegWit). */
|
|
143
|
+
export function deriveDoge(mnemonic) {
|
|
144
|
+
const seed = seedFromMnemonic(mnemonic);
|
|
145
|
+
const root = HDKey.fromMasterSeed(seed);
|
|
146
|
+
const child = root.derive(DOGE_PATH);
|
|
147
|
+
if (!child.privateKey || !child.publicKey) {
|
|
148
|
+
throw new Error("No Dogecoin key derived.");
|
|
149
|
+
}
|
|
150
|
+
const p2pkh = btc.p2pkh(child.publicKey, DOGE_NETWORK);
|
|
151
|
+
if (!p2pkh.address)
|
|
152
|
+
throw new Error("Failed to build Dogecoin address.");
|
|
153
|
+
return {
|
|
154
|
+
privateKey: "0x" + Buffer.from(child.privateKey).toString("hex"),
|
|
155
|
+
address: p2pkh.address,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/** Solana: SLIP-0010 ed25519, base58 public key as the address. */
|
|
159
|
+
export function deriveSolana(mnemonic) {
|
|
160
|
+
const priv = deriveEd25519PrivateKey(mnemonic, SOLANA_PATH);
|
|
161
|
+
const pub = ed25519.getPublicKey(priv);
|
|
162
|
+
return {
|
|
163
|
+
privateKey: "0x" + Buffer.from(priv).toString("hex"),
|
|
164
|
+
address: bs58.encode(pub),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
/** TON: ed25519 key -> Wallet v4R2 on workchain 0, non-bounceable (UQ...). */
|
|
168
|
+
export function deriveTon(mnemonic) {
|
|
169
|
+
const priv = deriveEd25519PrivateKey(mnemonic, TON_PATH);
|
|
170
|
+
const pub = ed25519.getPublicKey(priv);
|
|
171
|
+
const wallet = WalletContractV4.create({
|
|
172
|
+
workchain: 0,
|
|
173
|
+
publicKey: Buffer.from(pub),
|
|
174
|
+
});
|
|
175
|
+
const address = wallet.address.toString({
|
|
176
|
+
bounceable: false,
|
|
177
|
+
urlSafe: true,
|
|
178
|
+
testOnly: false,
|
|
179
|
+
});
|
|
180
|
+
return { privateKey: "0x" + Buffer.from(priv).toString("hex"), address };
|
|
181
|
+
}
|
|
182
|
+
/** XRP: secp256k1 BIP-44, classic r-address via the XRPL codec. */
|
|
183
|
+
export function deriveXrp(mnemonic) {
|
|
184
|
+
const privateKey = derivePrivateKey(mnemonic, XRP_PATH);
|
|
185
|
+
const pubCompressed = SigningKey.computePublicKey(privateKey, true).slice(2).toUpperCase();
|
|
186
|
+
const address = xrpDeriveAddress(pubCompressed);
|
|
187
|
+
return { privateKey, address };
|
|
188
|
+
}
|
|
189
|
+
export function deriveKey(mnemonic, network) {
|
|
190
|
+
switch (network) {
|
|
191
|
+
case "tron":
|
|
192
|
+
return deriveTron(mnemonic);
|
|
193
|
+
case "bitcoin":
|
|
194
|
+
return deriveBitcoin(mnemonic, getConfig().bitcoinTestnet);
|
|
195
|
+
case "litecoin":
|
|
196
|
+
return deriveLitecoin(mnemonic);
|
|
197
|
+
case "doge":
|
|
198
|
+
return deriveDoge(mnemonic);
|
|
199
|
+
case "solana":
|
|
200
|
+
return deriveSolana(mnemonic);
|
|
201
|
+
case "ton":
|
|
202
|
+
return deriveTon(mnemonic);
|
|
203
|
+
case "xrp":
|
|
204
|
+
return deriveXrp(mnemonic);
|
|
205
|
+
default:
|
|
206
|
+
return deriveEvm(mnemonic);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/** All addresses for a mnemonic, keyed by network. Safe to expose (no keys). */
|
|
210
|
+
export function deriveAddresses(mnemonic) {
|
|
211
|
+
const evm = deriveEvm(mnemonic).address;
|
|
212
|
+
return {
|
|
213
|
+
ethereum: evm,
|
|
214
|
+
bsc: evm,
|
|
215
|
+
polygon: evm,
|
|
216
|
+
base: evm,
|
|
217
|
+
arbitrum: evm,
|
|
218
|
+
optimism: evm,
|
|
219
|
+
avalanche: evm,
|
|
220
|
+
tron: deriveTron(mnemonic).address,
|
|
221
|
+
bitcoin: deriveBitcoin(mnemonic, getConfig().bitcoinTestnet).address,
|
|
222
|
+
litecoin: deriveLitecoin(mnemonic).address,
|
|
223
|
+
doge: deriveDoge(mnemonic).address,
|
|
224
|
+
solana: deriveSolana(mnemonic).address,
|
|
225
|
+
ton: deriveTon(mnemonic).address,
|
|
226
|
+
xrp: deriveXrp(mnemonic).address,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
/** Normalize an EVM address to checksum form; pass through non-EVM. */
|
|
230
|
+
export function normalizeAddress(network, address) {
|
|
231
|
+
return isEvmNetwork(network) ? getAddress(address) : address;
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=derive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive.js","sourceRoot":"","sources":["../../src/wallet/derive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local browser-based wallet manager. An MCP tool starts this and hands the
|
|
3
|
+
* user a URL; the seed phrase is only ever typed into / shown by this page in
|
|
4
|
+
* the user's browser and never crosses the agent boundary.
|
|
5
|
+
*
|
|
6
|
+
* Security posture:
|
|
7
|
+
* - binds 127.0.0.1 only,
|
|
8
|
+
* - all routes live under an unguessable random token path (a capability),
|
|
9
|
+
* - the server self-destructs after a period of inactivity.
|
|
10
|
+
*
|
|
11
|
+
* The keystore passphrase is resolved locally (generated on first use). Forms
|
|
12
|
+
* only ask for wallet name / mnemonic / count.
|
|
13
|
+
*/
|
|
14
|
+
/** Start the manager (or reuse a running one) and return its base URL. */
|
|
15
|
+
export declare function ensureManager(): Promise<string>;
|