@grimoirelabs/cli 0.1.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/dist/commands/advisor-skill-helpers.d.ts +2 -0
- package/dist/commands/advisor-skill-helpers.d.ts.map +1 -0
- package/dist/commands/advisor-skill-helpers.js +24 -0
- package/dist/commands/advisor-skill-helpers.js.map +1 -0
- package/dist/commands/cast.d.ts +26 -0
- package/dist/commands/cast.d.ts.map +1 -0
- package/dist/commands/cast.js +334 -0
- package/dist/commands/cast.js.map +1 -0
- package/dist/commands/compile-all.d.ts +11 -0
- package/dist/commands/compile-all.d.ts.map +1 -0
- package/dist/commands/compile-all.js +84 -0
- package/dist/commands/compile-all.js.map +1 -0
- package/dist/commands/compile.d.ts +11 -0
- package/dist/commands/compile.d.ts.map +1 -0
- package/dist/commands/compile.js +63 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/history.d.ts +12 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +68 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/init.d.ts +10 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +174 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/log.d.ts +11 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +95 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/simulate.d.ts +15 -0
- package/dist/commands/simulate.d.ts.map +1 -0
- package/dist/commands/simulate.js +110 -0
- package/dist/commands/simulate.js.map +1 -0
- package/dist/commands/state-helpers.d.ts +18 -0
- package/dist/commands/state-helpers.d.ts.map +1 -0
- package/dist/commands/state-helpers.js +34 -0
- package/dist/commands/state-helpers.js.map +1 -0
- package/dist/commands/validate.d.ts +10 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +67 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/venues.d.ts +10 -0
- package/dist/commands/venues.d.ts.map +1 -0
- package/dist/commands/venues.js +31 -0
- package/dist/commands/venues.js.map +1 -0
- package/dist/commands/wallet.d.ts +7 -0
- package/dist/commands/wallet.d.ts.map +1 -0
- package/dist/commands/wallet.js +437 -0
- package/dist/commands/wallet.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +105 -0
- package/dist/index.js.map +1 -0
- package/package.json +27 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate Command
|
|
3
|
+
* Validates a .spell file
|
|
4
|
+
*/
|
|
5
|
+
import { compileFile } from "@grimoirelabs/core";
|
|
6
|
+
import chalk from "chalk";
|
|
7
|
+
import ora from "ora";
|
|
8
|
+
export async function validateCommand(spellPath, options) {
|
|
9
|
+
const spinner = ora(`Validating ${spellPath}...`).start();
|
|
10
|
+
try {
|
|
11
|
+
const result = await compileFile(spellPath);
|
|
12
|
+
// Count issues
|
|
13
|
+
const errorCount = result.errors.length;
|
|
14
|
+
const warningCount = result.warnings.length;
|
|
15
|
+
// Report warnings
|
|
16
|
+
if (warningCount > 0) {
|
|
17
|
+
spinner.info(chalk.yellow(`${warningCount} warning(s)`));
|
|
18
|
+
for (const warning of result.warnings) {
|
|
19
|
+
console.log(chalk.yellow(` [${warning.code}] ${warning.message}`));
|
|
20
|
+
if (warning.line !== undefined) {
|
|
21
|
+
console.log(chalk.dim(` at line ${warning.line}`));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
// Report errors
|
|
26
|
+
if (errorCount > 0) {
|
|
27
|
+
spinner.fail(chalk.red(`${errorCount} error(s)`));
|
|
28
|
+
for (const error of result.errors) {
|
|
29
|
+
console.log(chalk.red(` [${error.code}] ${error.message}`));
|
|
30
|
+
if (error.line !== undefined) {
|
|
31
|
+
console.log(chalk.dim(` at line ${error.line}`));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Final result
|
|
36
|
+
if (!result.success) {
|
|
37
|
+
console.log();
|
|
38
|
+
console.log(chalk.red("✗ Validation failed"));
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
if (options.strict && warningCount > 0) {
|
|
42
|
+
console.log();
|
|
43
|
+
console.log(chalk.red("✗ Validation failed (strict mode)"));
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
if (errorCount === 0 && warningCount === 0) {
|
|
47
|
+
spinner.succeed(chalk.green("✓ Spell is valid"));
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
spinner.succeed(chalk.green("✓ Spell is valid (with warnings)"));
|
|
51
|
+
}
|
|
52
|
+
// Show spell info
|
|
53
|
+
if (result.ir) {
|
|
54
|
+
console.log();
|
|
55
|
+
console.log(chalk.dim("Spell info:"));
|
|
56
|
+
console.log(chalk.dim(` Name: ${result.ir.meta.name}`));
|
|
57
|
+
console.log(chalk.dim(` Version: ${result.ir.version}`));
|
|
58
|
+
console.log(chalk.dim(` Steps: ${result.ir.steps.length}`));
|
|
59
|
+
console.log(chalk.dim(` Guards: ${result.ir.guards.length}`));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
spinner.fail(chalk.red(`Failed to validate: ${error.message}`));
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"venues.d.ts","sourceRoot":"","sources":["../../src/commands/venues.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BzE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Venues Command
|
|
3
|
+
* Lists available adapters and supported chains
|
|
4
|
+
*/
|
|
5
|
+
import { adapters } from "@grimoirelabs/venues";
|
|
6
|
+
import chalk from "chalk";
|
|
7
|
+
export async function venuesCommand(options) {
|
|
8
|
+
const metas = adapters
|
|
9
|
+
.map((adapter) => adapter.meta)
|
|
10
|
+
.sort((a, b) => a.name.localeCompare(b.name));
|
|
11
|
+
if (options.json) {
|
|
12
|
+
console.log(JSON.stringify(metas, null, 2));
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const headers = ["Name", "Exec", "Actions", "Chains", "Description"];
|
|
16
|
+
const rows = metas.map((meta) => [
|
|
17
|
+
meta.name,
|
|
18
|
+
meta.executionType ?? "evm",
|
|
19
|
+
meta.actions.join(", "),
|
|
20
|
+
meta.supportedChains.join(", "),
|
|
21
|
+
meta.description ?? "",
|
|
22
|
+
]);
|
|
23
|
+
const widths = headers.map((header, index) => Math.max(header.length, ...rows.map((row) => row[index]?.length ?? 0)));
|
|
24
|
+
const formatRow = (row) => row.map((cell, index) => cell.padEnd(widths[index] ?? 0)).join(" ");
|
|
25
|
+
console.log(chalk.bold(formatRow(headers)));
|
|
26
|
+
console.log(chalk.dim(widths.map((width) => "-".repeat(width)).join(" ")));
|
|
27
|
+
for (const row of rows) {
|
|
28
|
+
console.log(formatRow(row));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=venues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"venues.js","sourceRoot":"","sources":["../../src/commands/venues.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,MAAM,KAAK,GAAG,QAAQ;SACnB,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;SAC9B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI;QACT,IAAI,CAAC,aAAa,IAAI,KAAK;QAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,WAAW,IAAI,EAAE;KACvB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAC3C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,CACvE,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,GAAa,EAAU,EAAE,CAC1C,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/commands/wallet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwdpC,eAAO,MAAM,aAAa,SAAoE,CAAC"}
|
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wallet Command
|
|
3
|
+
* Manage wallet lifecycle: generate, address, balance, import
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
6
|
+
import { homedir } from "node:os";
|
|
7
|
+
import { dirname, join } from "node:path";
|
|
8
|
+
import * as readline from "node:readline";
|
|
9
|
+
import { Writable } from "node:stream";
|
|
10
|
+
import { createKeystore, createProvider, createWalletFromConfig, formatWei, generatePrivateKey, getAddressFromConfig, getChainName, getNativeCurrencySymbol, } from "@grimoirelabs/core";
|
|
11
|
+
import chalk from "chalk";
|
|
12
|
+
import { Command } from "commander";
|
|
13
|
+
import ora from "ora";
|
|
14
|
+
const DEFAULT_KEYSTORE_DIR = join(homedir(), ".grimoire");
|
|
15
|
+
const DEFAULT_KEYSTORE_PATH = join(DEFAULT_KEYSTORE_DIR, "keystore.json");
|
|
16
|
+
/**
|
|
17
|
+
* Resolve the keystore file path from options or default
|
|
18
|
+
*/
|
|
19
|
+
function resolveKeystorePath(options) {
|
|
20
|
+
return options.keystore ?? DEFAULT_KEYSTORE_PATH;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Prompt for a password interactively (hides input)
|
|
24
|
+
*/
|
|
25
|
+
async function promptPassword(message) {
|
|
26
|
+
return new Promise((resolve) => {
|
|
27
|
+
process.stdout.write(message);
|
|
28
|
+
const silentOutput = new Writable({
|
|
29
|
+
write(_chunk, _encoding, cb) {
|
|
30
|
+
cb();
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
const rl = readline.createInterface({
|
|
34
|
+
input: process.stdin,
|
|
35
|
+
output: silentOutput,
|
|
36
|
+
terminal: true,
|
|
37
|
+
});
|
|
38
|
+
rl.question("", (answer) => {
|
|
39
|
+
rl.close();
|
|
40
|
+
process.stdout.write("\n");
|
|
41
|
+
resolve(answer);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Resolve keystore password from env var, interactive prompt, or error
|
|
47
|
+
*/
|
|
48
|
+
async function resolveKeystorePassword(options) {
|
|
49
|
+
const envName = options.passwordEnv ?? "KEYSTORE_PASSWORD";
|
|
50
|
+
const envValue = process.env[envName];
|
|
51
|
+
if (envValue) {
|
|
52
|
+
return envValue;
|
|
53
|
+
}
|
|
54
|
+
if (process.stdin.isTTY) {
|
|
55
|
+
return await promptPassword("Keystore password: ");
|
|
56
|
+
}
|
|
57
|
+
throw new Error(`No password available. Set ${envName} or run interactively.`);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Prompt for password with confirmation (for create/import flows)
|
|
61
|
+
*/
|
|
62
|
+
async function resolveNewKeystorePassword(options) {
|
|
63
|
+
const envName = options.passwordEnv ?? "KEYSTORE_PASSWORD";
|
|
64
|
+
const envValue = process.env[envName];
|
|
65
|
+
if (envValue) {
|
|
66
|
+
return envValue;
|
|
67
|
+
}
|
|
68
|
+
if (process.stdin.isTTY) {
|
|
69
|
+
const password = await promptPassword("New keystore password: ");
|
|
70
|
+
const confirm = await promptPassword("Confirm password: ");
|
|
71
|
+
if (password !== confirm) {
|
|
72
|
+
throw new Error("Passwords do not match.");
|
|
73
|
+
}
|
|
74
|
+
if (!password) {
|
|
75
|
+
throw new Error("Password must not be empty.");
|
|
76
|
+
}
|
|
77
|
+
return password;
|
|
78
|
+
}
|
|
79
|
+
throw new Error(`No password available. Set ${envName} or run interactively.`);
|
|
80
|
+
}
|
|
81
|
+
// ── Subcommands ─────────────────────────────────────────────────────
|
|
82
|
+
async function generateAction(options) {
|
|
83
|
+
const spinner = ora("Generating wallet...").start();
|
|
84
|
+
try {
|
|
85
|
+
// 1. Generate key
|
|
86
|
+
const privateKey = generatePrivateKey();
|
|
87
|
+
// 2. Derive address (use viem via getAddressFromConfig with raw key)
|
|
88
|
+
const address = getAddressFromConfig({ type: "raw", source: privateKey });
|
|
89
|
+
spinner.text = "Waiting for password...";
|
|
90
|
+
spinner.stop();
|
|
91
|
+
// 3. Prompt password
|
|
92
|
+
const password = await resolveNewKeystorePassword(options);
|
|
93
|
+
spinner.start("Encrypting keystore...");
|
|
94
|
+
// 4. Encrypt
|
|
95
|
+
const keystoreJson = await createKeystore(privateKey, password);
|
|
96
|
+
// 5. Write file
|
|
97
|
+
const keystorePath = resolveKeystorePath(options);
|
|
98
|
+
const dir = dirname(keystorePath);
|
|
99
|
+
if (!existsSync(dir)) {
|
|
100
|
+
mkdirSync(dir, { recursive: true });
|
|
101
|
+
}
|
|
102
|
+
writeFileSync(keystorePath, keystoreJson, "utf-8");
|
|
103
|
+
spinner.succeed(chalk.green("Wallet generated"));
|
|
104
|
+
if (options.json) {
|
|
105
|
+
const output = {
|
|
106
|
+
address,
|
|
107
|
+
keystore: keystorePath,
|
|
108
|
+
};
|
|
109
|
+
if (options.printKey) {
|
|
110
|
+
output.privateKey = privateKey;
|
|
111
|
+
}
|
|
112
|
+
console.log(JSON.stringify(output, null, 2));
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
console.log(` ${chalk.dim("Address:")} ${address}`);
|
|
116
|
+
console.log(` ${chalk.dim("Keystore:")} ${keystorePath}`);
|
|
117
|
+
if (options.printKey) {
|
|
118
|
+
console.log();
|
|
119
|
+
console.log(chalk.yellow(" WARNING: Store this private key securely. It will not be shown again."));
|
|
120
|
+
console.log(` ${chalk.dim("Private key:")} ${privateKey}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
spinner.fail(chalk.red(`Failed: ${error.message}`));
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
async function addressAction(options) {
|
|
130
|
+
try {
|
|
131
|
+
let keyConfig;
|
|
132
|
+
if (options.mnemonic) {
|
|
133
|
+
keyConfig = { type: "mnemonic", source: options.mnemonic };
|
|
134
|
+
}
|
|
135
|
+
else if (options.keyEnv) {
|
|
136
|
+
keyConfig = { type: "env", source: options.keyEnv };
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
// Default: keystore
|
|
140
|
+
const keystorePath = resolveKeystorePath(options);
|
|
141
|
+
if (!existsSync(keystorePath)) {
|
|
142
|
+
console.error(chalk.red(`Keystore not found: ${keystorePath}`));
|
|
143
|
+
console.error(chalk.dim("Run 'grimoire wallet generate' to create one."));
|
|
144
|
+
process.exit(1);
|
|
145
|
+
}
|
|
146
|
+
const password = await resolveKeystorePassword(options);
|
|
147
|
+
const keystoreJson = readFileSync(keystorePath, "utf-8");
|
|
148
|
+
keyConfig = { type: "keystore", source: keystoreJson, password };
|
|
149
|
+
}
|
|
150
|
+
const address = getAddressFromConfig(keyConfig);
|
|
151
|
+
if (options.json) {
|
|
152
|
+
console.log(JSON.stringify({ address }));
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
console.log(address);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
console.error(chalk.red(`Failed: ${error.message}`));
|
|
160
|
+
process.exit(1);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
async function balanceAction(options) {
|
|
164
|
+
try {
|
|
165
|
+
let keyConfig;
|
|
166
|
+
if (options.mnemonic) {
|
|
167
|
+
keyConfig = { type: "mnemonic", source: options.mnemonic };
|
|
168
|
+
}
|
|
169
|
+
else if (options.keyEnv) {
|
|
170
|
+
keyConfig = { type: "env", source: options.keyEnv };
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
const keystorePath = resolveKeystorePath(options);
|
|
174
|
+
if (!existsSync(keystorePath)) {
|
|
175
|
+
console.error(chalk.red(`Keystore not found: ${keystorePath}`));
|
|
176
|
+
console.error(chalk.dim("Run 'grimoire wallet generate' to create one."));
|
|
177
|
+
process.exit(1);
|
|
178
|
+
}
|
|
179
|
+
const password = await resolveKeystorePassword(options);
|
|
180
|
+
const keystoreJson = readFileSync(keystorePath, "utf-8");
|
|
181
|
+
keyConfig = { type: "keystore", source: keystoreJson, password };
|
|
182
|
+
}
|
|
183
|
+
const address = getAddressFromConfig(keyConfig);
|
|
184
|
+
const chainId = Number.parseInt(options.chain ?? "1", 10);
|
|
185
|
+
const chainName = getChainName(chainId);
|
|
186
|
+
const spinner = ora(`Fetching balance on ${chainName}...`).start();
|
|
187
|
+
const provider = createProvider(chainId, options.rpcUrl);
|
|
188
|
+
const balance = await provider.getBalance(address);
|
|
189
|
+
spinner.succeed(chalk.green("Balance retrieved"));
|
|
190
|
+
if (options.json) {
|
|
191
|
+
console.log(JSON.stringify({
|
|
192
|
+
address,
|
|
193
|
+
chain: chainId,
|
|
194
|
+
chainName,
|
|
195
|
+
balanceWei: balance.toString(),
|
|
196
|
+
balance: formatWei(balance),
|
|
197
|
+
}));
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
console.log(` ${chalk.dim("Address:")} ${address}`);
|
|
201
|
+
console.log(` ${chalk.dim("Chain:")} ${chainName} (${chainId})`);
|
|
202
|
+
console.log(` ${chalk.dim("Balance:")} ${formatWei(balance)} ${getNativeCurrencySymbol(chainId)}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
console.error(chalk.red(`Failed: ${error.message}`));
|
|
207
|
+
process.exit(1);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
async function importAction(options) {
|
|
211
|
+
const spinner = ora("Importing wallet...").start();
|
|
212
|
+
try {
|
|
213
|
+
// Load existing key from env
|
|
214
|
+
const envName = options.keyEnv ?? "PRIVATE_KEY";
|
|
215
|
+
const rawKey = process.env[envName];
|
|
216
|
+
if (!rawKey) {
|
|
217
|
+
spinner.fail(chalk.red(`Environment variable ${envName} is not set`));
|
|
218
|
+
process.exit(1);
|
|
219
|
+
}
|
|
220
|
+
// Derive address for validation
|
|
221
|
+
const address = getAddressFromConfig({ type: "raw", source: rawKey });
|
|
222
|
+
spinner.text = "Waiting for password...";
|
|
223
|
+
spinner.stop();
|
|
224
|
+
// Prompt new keystore password
|
|
225
|
+
const password = await resolveNewKeystorePassword(options);
|
|
226
|
+
spinner.start("Encrypting keystore...");
|
|
227
|
+
// Normalize key
|
|
228
|
+
const normalizedKey = rawKey.startsWith("0x") ? rawKey : `0x${rawKey}`;
|
|
229
|
+
// Encrypt
|
|
230
|
+
const keystoreJson = await createKeystore(normalizedKey, password);
|
|
231
|
+
// Write file
|
|
232
|
+
const keystorePath = resolveKeystorePath(options);
|
|
233
|
+
const dir = dirname(keystorePath);
|
|
234
|
+
if (!existsSync(dir)) {
|
|
235
|
+
mkdirSync(dir, { recursive: true });
|
|
236
|
+
}
|
|
237
|
+
writeFileSync(keystorePath, keystoreJson, "utf-8");
|
|
238
|
+
spinner.succeed(chalk.green("Wallet imported"));
|
|
239
|
+
if (options.json) {
|
|
240
|
+
console.log(JSON.stringify({ address, keystore: keystorePath }));
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
console.log(` ${chalk.dim("Address:")} ${address}`);
|
|
244
|
+
console.log(` ${chalk.dim("Keystore:")} ${keystorePath}`);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
spinner.fail(chalk.red(`Failed: ${error.message}`));
|
|
249
|
+
process.exit(1);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
// ── WETH Constants ──────────────────────────────────────────────────
|
|
253
|
+
const WETH_ADDRESSES = {
|
|
254
|
+
1: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
|
|
255
|
+
8453: "0x4200000000000000000000000000000000000006",
|
|
256
|
+
10: "0x4200000000000000000000000000000000000006",
|
|
257
|
+
42161: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
|
|
258
|
+
};
|
|
259
|
+
const WETH_DEPOSIT_SELECTOR = "0xd0e30db0";
|
|
260
|
+
const WETH_WITHDRAW_SELECTOR = "0x2e1a7d4d";
|
|
261
|
+
function ethToWei(eth) {
|
|
262
|
+
const [whole = "0", frac = ""] = eth.split(".");
|
|
263
|
+
const padded = frac.padEnd(18, "0").slice(0, 18);
|
|
264
|
+
return BigInt(whole) * 10n ** 18n + BigInt(padded);
|
|
265
|
+
}
|
|
266
|
+
async function wrapAction(options) {
|
|
267
|
+
try {
|
|
268
|
+
const keystorePath = resolveKeystorePath(options);
|
|
269
|
+
if (!existsSync(keystorePath)) {
|
|
270
|
+
console.error(chalk.red(`Keystore not found: ${keystorePath}`));
|
|
271
|
+
console.error(chalk.dim("Run 'grimoire wallet generate' to create one."));
|
|
272
|
+
process.exit(1);
|
|
273
|
+
}
|
|
274
|
+
const password = await resolveKeystorePassword(options);
|
|
275
|
+
const keystoreJson = readFileSync(keystorePath, "utf-8");
|
|
276
|
+
const keyConfig = { type: "keystore", source: keystoreJson, password };
|
|
277
|
+
const chainId = Number.parseInt(options.chain ?? "8453", 10);
|
|
278
|
+
const nativeSymbol = getNativeCurrencySymbol(chainId);
|
|
279
|
+
if (nativeSymbol !== "ETH") {
|
|
280
|
+
console.error(chalk.red(`WETH only exists on ETH-native chains. Chain ${chainId} uses ${nativeSymbol}.`));
|
|
281
|
+
process.exit(1);
|
|
282
|
+
}
|
|
283
|
+
const wethAddress = WETH_ADDRESSES[chainId];
|
|
284
|
+
if (!wethAddress) {
|
|
285
|
+
console.error(chalk.red(`No known WETH address for chain ${chainId}`));
|
|
286
|
+
process.exit(1);
|
|
287
|
+
}
|
|
288
|
+
const provider = createProvider(chainId, options.rpcUrl);
|
|
289
|
+
const wallet = createWalletFromConfig(keyConfig, chainId, provider.rpcUrl);
|
|
290
|
+
const amountWei = ethToWei(options.amount);
|
|
291
|
+
const spinner = ora(`Wrapping ${options.amount} ETH → WETH on chain ${chainId}...`).start();
|
|
292
|
+
const receipt = await wallet.sendTransaction({
|
|
293
|
+
to: wethAddress,
|
|
294
|
+
value: amountWei,
|
|
295
|
+
data: WETH_DEPOSIT_SELECTOR,
|
|
296
|
+
});
|
|
297
|
+
if (receipt.status === "reverted") {
|
|
298
|
+
spinner.fail(chalk.red("Transaction reverted"));
|
|
299
|
+
console.error(` Tx: ${receipt.hash}`);
|
|
300
|
+
process.exit(1);
|
|
301
|
+
}
|
|
302
|
+
spinner.succeed(chalk.green(`Wrapped ${options.amount} ETH → WETH`));
|
|
303
|
+
const balance = await provider.getBalance(wallet.address);
|
|
304
|
+
if (options.json) {
|
|
305
|
+
console.log(JSON.stringify({
|
|
306
|
+
tx: receipt.hash,
|
|
307
|
+
amount: options.amount,
|
|
308
|
+
chain: chainId,
|
|
309
|
+
balance: formatWei(balance),
|
|
310
|
+
}));
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
console.log(` ${chalk.dim("Tx:")} ${receipt.hash}`);
|
|
314
|
+
console.log(` ${chalk.dim("Balance:")} ${formatWei(balance)} ETH`);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
catch (error) {
|
|
318
|
+
console.error(chalk.red(`Failed: ${error.message}`));
|
|
319
|
+
process.exit(1);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
async function unwrapAction(options) {
|
|
323
|
+
try {
|
|
324
|
+
const keystorePath = resolveKeystorePath(options);
|
|
325
|
+
if (!existsSync(keystorePath)) {
|
|
326
|
+
console.error(chalk.red(`Keystore not found: ${keystorePath}`));
|
|
327
|
+
console.error(chalk.dim("Run 'grimoire wallet generate' to create one."));
|
|
328
|
+
process.exit(1);
|
|
329
|
+
}
|
|
330
|
+
const password = await resolveKeystorePassword(options);
|
|
331
|
+
const keystoreJson = readFileSync(keystorePath, "utf-8");
|
|
332
|
+
const keyConfig = { type: "keystore", source: keystoreJson, password };
|
|
333
|
+
const chainId = Number.parseInt(options.chain ?? "8453", 10);
|
|
334
|
+
const nativeSymbol = getNativeCurrencySymbol(chainId);
|
|
335
|
+
if (nativeSymbol !== "ETH") {
|
|
336
|
+
console.error(chalk.red(`WETH only exists on ETH-native chains. Chain ${chainId} uses ${nativeSymbol}.`));
|
|
337
|
+
process.exit(1);
|
|
338
|
+
}
|
|
339
|
+
const wethAddress = WETH_ADDRESSES[chainId];
|
|
340
|
+
if (!wethAddress) {
|
|
341
|
+
console.error(chalk.red(`No known WETH address for chain ${chainId}`));
|
|
342
|
+
process.exit(1);
|
|
343
|
+
}
|
|
344
|
+
const provider = createProvider(chainId, options.rpcUrl);
|
|
345
|
+
const wallet = createWalletFromConfig(keyConfig, chainId, provider.rpcUrl);
|
|
346
|
+
const amountWei = ethToWei(options.amount);
|
|
347
|
+
const amountHex = amountWei.toString(16).padStart(64, "0");
|
|
348
|
+
const data = `${WETH_WITHDRAW_SELECTOR}${amountHex}`;
|
|
349
|
+
const spinner = ora(`Unwrapping ${options.amount} WETH → ETH on chain ${chainId}...`).start();
|
|
350
|
+
const receipt = await wallet.sendTransaction({
|
|
351
|
+
to: wethAddress,
|
|
352
|
+
data,
|
|
353
|
+
});
|
|
354
|
+
if (receipt.status === "reverted") {
|
|
355
|
+
spinner.fail(chalk.red("Transaction reverted"));
|
|
356
|
+
console.error(` Tx: ${receipt.hash}`);
|
|
357
|
+
process.exit(1);
|
|
358
|
+
}
|
|
359
|
+
spinner.succeed(chalk.green(`Unwrapped ${options.amount} WETH → ETH`));
|
|
360
|
+
const balance = await provider.getBalance(wallet.address);
|
|
361
|
+
if (options.json) {
|
|
362
|
+
console.log(JSON.stringify({
|
|
363
|
+
tx: receipt.hash,
|
|
364
|
+
amount: options.amount,
|
|
365
|
+
chain: chainId,
|
|
366
|
+
balance: formatWei(balance),
|
|
367
|
+
}));
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
console.log(` ${chalk.dim("Tx:")} ${receipt.hash}`);
|
|
371
|
+
console.log(` ${chalk.dim("Balance:")} ${formatWei(balance)} ETH`);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
catch (error) {
|
|
375
|
+
console.error(chalk.red(`Failed: ${error.message}`));
|
|
376
|
+
process.exit(1);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
// ── Command tree ────────────────────────────────────────────────────
|
|
380
|
+
export const walletCommand = new Command("wallet").description("Manage wallets and keystores");
|
|
381
|
+
walletCommand
|
|
382
|
+
.command("generate")
|
|
383
|
+
.description("Generate a new wallet and save to keystore")
|
|
384
|
+
.option("--keystore <path>", "Path to keystore file")
|
|
385
|
+
.option("--password-env <name>", "Environment variable for keystore password")
|
|
386
|
+
.option("--print-key", "Print the private key (one-time backup)")
|
|
387
|
+
.option("--json", "Output as JSON")
|
|
388
|
+
.action(generateAction);
|
|
389
|
+
walletCommand
|
|
390
|
+
.command("address")
|
|
391
|
+
.description("Show wallet address")
|
|
392
|
+
.option("--keystore <path>", "Path to keystore file")
|
|
393
|
+
.option("--password-env <name>", "Environment variable for keystore password")
|
|
394
|
+
.option("--key-env <name>", "Environment variable containing private key")
|
|
395
|
+
.option("--mnemonic <phrase>", "Mnemonic phrase")
|
|
396
|
+
.option("--json", "Output as JSON")
|
|
397
|
+
.action(addressAction);
|
|
398
|
+
walletCommand
|
|
399
|
+
.command("balance")
|
|
400
|
+
.description("Check wallet balance")
|
|
401
|
+
.option("--keystore <path>", "Path to keystore file")
|
|
402
|
+
.option("--password-env <name>", "Environment variable for keystore password")
|
|
403
|
+
.option("--key-env <name>", "Environment variable containing private key")
|
|
404
|
+
.option("--mnemonic <phrase>", "Mnemonic phrase")
|
|
405
|
+
.option("--chain <id>", "Chain ID", "1")
|
|
406
|
+
.option("--rpc-url <url>", "RPC URL")
|
|
407
|
+
.option("--json", "Output as JSON")
|
|
408
|
+
.action(balanceAction);
|
|
409
|
+
walletCommand
|
|
410
|
+
.command("import")
|
|
411
|
+
.description("Import an existing private key into a keystore")
|
|
412
|
+
.option("--keystore <path>", "Path to keystore file")
|
|
413
|
+
.option("--password-env <name>", "Environment variable for keystore password")
|
|
414
|
+
.option("--key-env <name>", "Environment variable containing private key", "PRIVATE_KEY")
|
|
415
|
+
.option("--json", "Output as JSON")
|
|
416
|
+
.action(importAction);
|
|
417
|
+
walletCommand
|
|
418
|
+
.command("wrap")
|
|
419
|
+
.description("Wrap native currency to WETH")
|
|
420
|
+
.requiredOption("--amount <eth>", "Amount to wrap")
|
|
421
|
+
.option("--chain <id>", "Chain ID", "8453")
|
|
422
|
+
.option("--keystore <path>", "Path to keystore file")
|
|
423
|
+
.option("--password-env <name>", "Environment variable for keystore password")
|
|
424
|
+
.option("--rpc-url <url>", "RPC URL")
|
|
425
|
+
.option("--json", "Output as JSON")
|
|
426
|
+
.action(wrapAction);
|
|
427
|
+
walletCommand
|
|
428
|
+
.command("unwrap")
|
|
429
|
+
.description("Unwrap WETH to native currency")
|
|
430
|
+
.requiredOption("--amount <eth>", "Amount to unwrap")
|
|
431
|
+
.option("--chain <id>", "Chain ID", "8453")
|
|
432
|
+
.option("--keystore <path>", "Path to keystore file")
|
|
433
|
+
.option("--password-env <name>", "Environment variable for keystore password")
|
|
434
|
+
.option("--rpc-url <url>", "RPC URL")
|
|
435
|
+
.option("--json", "Output as JSON")
|
|
436
|
+
.action(unwrapAction);
|
|
437
|
+
//# sourceMappingURL=wallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/commands/wallet.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG"}
|