codecrypto-cli 1.0.14 → 1.0.15
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/README.md +339 -18
- package/dist/commands/deploy-sc.d.ts.map +1 -1
- package/dist/commands/deploy-sc.js +38 -2
- package/dist/commands/deploy-sc.js.map +1 -1
- package/dist/commands/generate-keys.d.ts +3 -0
- package/dist/commands/generate-keys.d.ts.map +1 -0
- package/dist/commands/generate-keys.js +159 -0
- package/dist/commands/generate-keys.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
- package/src/commands/deploy-sc.ts +42 -2
- package/src/commands/generate-keys.ts +139 -0
- package/src/index.ts +2 -0
package/README.md
CHANGED
|
@@ -2,25 +2,87 @@
|
|
|
2
2
|
|
|
3
3
|
CLI tool para desplegar aplicaciones Next.js/Express y smart contracts con Foundry.
|
|
4
4
|
|
|
5
|
-
## Instalación
|
|
5
|
+
## 🚀 Instalación Rápida
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
#
|
|
8
|
+
# Instalación global (recomendado)
|
|
9
|
+
npm install -g codecrypto-cli
|
|
10
|
+
|
|
11
|
+
# O usar sin instalar
|
|
9
12
|
npx codecrypto-cli [command]
|
|
10
13
|
|
|
11
|
-
#
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
# Verificar instalación
|
|
15
|
+
codecrypto --help
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**Primeros pasos:**
|
|
19
|
+
```bash
|
|
20
|
+
# 1. Validar que todo está listo
|
|
21
|
+
codecrypto doctor
|
|
22
|
+
|
|
23
|
+
# 2. Autenticarse
|
|
24
|
+
codecrypto auth
|
|
14
25
|
|
|
15
|
-
#
|
|
16
|
-
|
|
17
|
-
|
|
26
|
+
# 3. ¡Listo para usar!
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Desarrollo local:**
|
|
30
|
+
```bash
|
|
31
|
+
# Clonar repositorio
|
|
32
|
+
git clone https://gitlab.codecrypto.academy/codecrypto/codecrypto-cli.git
|
|
33
|
+
cd codecrypto-cli
|
|
34
|
+
|
|
35
|
+
# Instalar dependencias
|
|
18
36
|
npm install
|
|
37
|
+
|
|
38
|
+
# Compilar
|
|
19
39
|
npm run build
|
|
40
|
+
|
|
41
|
+
# Enlazar localmente
|
|
20
42
|
npm link
|
|
43
|
+
|
|
44
|
+
# Probar
|
|
45
|
+
codecrypto --help
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 📋 Guía Rápida de Comandos
|
|
51
|
+
|
|
52
|
+
| Comando | Descripción | Uso Básico |
|
|
53
|
+
|---------|-------------|------------|
|
|
54
|
+
| `auth` | Autenticarse con CodeCrypto | `codecrypto auth` |
|
|
55
|
+
| `doctor` | Validar sistema y prerequisitos | `codecrypto doctor` |
|
|
56
|
+
| `deploy` | Desplegar app Next.js/Express | `codecrypto deploy <ruta-proyecto>` |
|
|
57
|
+
| `deploy-sc` | Desplegar smart contract | `codecrypto deploy-sc <script.s.sol>` |
|
|
58
|
+
| `generate-keys` | Generar claves Foundry | `codecrypto generate-keys` |
|
|
59
|
+
|
|
60
|
+
### Ejemplos Rápidos
|
|
61
|
+
|
|
62
|
+
**Desplegar aplicación:**
|
|
63
|
+
```bash
|
|
64
|
+
codecrypto deploy ../mi-app --deploy
|
|
21
65
|
```
|
|
22
66
|
|
|
23
|
-
|
|
67
|
+
**Desplegar smart contract en Anvil:**
|
|
68
|
+
```bash
|
|
69
|
+
codecrypto deploy-sc ./script/Deploy.s.sol --anvil
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**Generar claves para desarrollo:**
|
|
73
|
+
```bash
|
|
74
|
+
codecrypto generate-keys --count 10
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Ver ayuda de un comando:**
|
|
78
|
+
```bash
|
|
79
|
+
codecrypto deploy --help
|
|
80
|
+
codecrypto deploy-sc --help
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 📖 Documentación Completa de Comandos
|
|
24
86
|
|
|
25
87
|
### 🔐 `auth` - Autenticación
|
|
26
88
|
|
|
@@ -155,9 +217,17 @@ codecrypto deploy-sc <script-path> \
|
|
|
155
217
|
**Proceso:**
|
|
156
218
|
1. Valida que el script existe y es `.s.sol`
|
|
157
219
|
2. Detecta proyecto Foundry (busca `foundry.toml`)
|
|
158
|
-
3.
|
|
159
|
-
4.
|
|
160
|
-
5.
|
|
220
|
+
3. **Valida el saldo de la cuenta** (si se usa `--private-key`, verifica que tenga al menos 0.001 ETH)
|
|
221
|
+
4. Ejecuta `forge script` con configuración
|
|
222
|
+
5. Guarda resultados en `broadcast/`
|
|
223
|
+
6. Sube transacciones a BD vía `/api/uploadSmartContract` en `https://proyectos.proyectos.codecrypto.academy`
|
|
224
|
+
|
|
225
|
+
**Validación de saldo:**
|
|
226
|
+
- Se valida automáticamente cuando se usa `--private-key`
|
|
227
|
+
- Requiere un saldo mínimo de **1.0 ETH** para continuar
|
|
228
|
+
- Muestra la dirección y el saldo actual antes de desplegar
|
|
229
|
+
- Si el saldo es insuficiente, sugiere usar el faucet: `https://faucet.codecrypto.academy`
|
|
230
|
+
- No se valida cuando se usa `--anvil` o `--account` (desarrollo local)
|
|
161
231
|
|
|
162
232
|
**Datos subidos a BD:**
|
|
163
233
|
- Email del usuario
|
|
@@ -166,6 +236,80 @@ codecrypto deploy-sc <script-path> \
|
|
|
166
236
|
- RPC URL usado
|
|
167
237
|
- Clave privada (o `account-{index}`)
|
|
168
238
|
|
|
239
|
+
**URL de subida:**
|
|
240
|
+
- Por defecto: `https://proyectos.proyectos.codecrypto.academy/api/uploadSmartContract`
|
|
241
|
+
- Configurable mediante variable de entorno: `CODECRYPTO_UPLOAD_URL` o `UPLOAD_SMART_CONTRACT_URL`
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
### 🔑 `generate-keys` - Generación de Claves Foundry
|
|
246
|
+
|
|
247
|
+
Genera un archivo de claves Foundry con mnemonic y cuentas derivadas para desarrollo y testing.
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
# Generar claves con mnemonic aleatorio (10 cuentas por defecto)
|
|
251
|
+
codecrypto generate-keys
|
|
252
|
+
|
|
253
|
+
# Especificar número de cuentas
|
|
254
|
+
codecrypto generate-keys --count 20
|
|
255
|
+
|
|
256
|
+
# Usar mnemonic existente
|
|
257
|
+
codecrypto generate-keys --mnemonic "word1 word2 ... word12"
|
|
258
|
+
|
|
259
|
+
# Especificar archivo de salida
|
|
260
|
+
codecrypto generate-keys --output ~/.foundry/keys.json
|
|
261
|
+
|
|
262
|
+
# Combinar opciones
|
|
263
|
+
codecrypto generate-keys \
|
|
264
|
+
--mnemonic "your twelve word mnemonic phrase here" \
|
|
265
|
+
--count 5 \
|
|
266
|
+
--output ./my-keys.json
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
**Opciones:**
|
|
270
|
+
- `-m, --mnemonic <mnemonic>` - Frase mnemonic (si no se proporciona, se genera una aleatoria)
|
|
271
|
+
- `-n, --count <number>` - Número de cuentas a generar (default: `10`, máximo: `100`)
|
|
272
|
+
- `-o, --output <path>` - Ruta del archivo de salida (default: `~/.foundry/keys.json`)
|
|
273
|
+
|
|
274
|
+
**Funcionamiento:**
|
|
275
|
+
1. Genera o valida mnemonic (12 palabras)
|
|
276
|
+
2. Deriva cuentas usando el path estándar BIP44: `m/44'/60'/0'/0/{index}`
|
|
277
|
+
3. Guarda todas las cuentas con sus direcciones y claves privadas
|
|
278
|
+
4. Crea el directorio de salida si no existe
|
|
279
|
+
|
|
280
|
+
**Formato del archivo generado:**
|
|
281
|
+
```json
|
|
282
|
+
{
|
|
283
|
+
"mnemonic": "word1 word2 word3 ... word12",
|
|
284
|
+
"accounts": [
|
|
285
|
+
{
|
|
286
|
+
"address": "0x...",
|
|
287
|
+
"private_key": "0x..."
|
|
288
|
+
},
|
|
289
|
+
...
|
|
290
|
+
]
|
|
291
|
+
}
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
**Uso con Foundry:**
|
|
295
|
+
```bash
|
|
296
|
+
# Generar claves
|
|
297
|
+
codecrypto generate-keys --output ~/.foundry/keys.json
|
|
298
|
+
|
|
299
|
+
# Usar en scripts Foundry
|
|
300
|
+
# Las claves privadas se pueden usar directamente en forge script
|
|
301
|
+
forge script Deploy.s.sol \
|
|
302
|
+
--private-key $(jq -r '.accounts[0].private_key' ~/.foundry/keys.json) \
|
|
303
|
+
--rpc-url http://localhost:8545 \
|
|
304
|
+
--broadcast
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
**Seguridad:**
|
|
308
|
+
- ⚠️ **Nunca** compartas tu mnemonic o claves privadas
|
|
309
|
+
- ⚠️ **Nunca** commitees el archivo de claves a control de versiones
|
|
310
|
+
- ⚠️ Usa estas claves solo para desarrollo y testing
|
|
311
|
+
- ⚠️ Para producción, usa un wallet seguro (MetaMask, Ledger, etc.)
|
|
312
|
+
|
|
169
313
|
---
|
|
170
314
|
|
|
171
315
|
## Ejemplos de Uso
|
|
@@ -212,6 +356,18 @@ codecrypto deploy-sc ./script/Deploy.s.sol \
|
|
|
212
356
|
--verify
|
|
213
357
|
```
|
|
214
358
|
|
|
359
|
+
### Generar claves para desarrollo
|
|
360
|
+
|
|
361
|
+
```bash
|
|
362
|
+
# Generar claves Foundry
|
|
363
|
+
codecrypto generate-keys --count 10
|
|
364
|
+
|
|
365
|
+
# Usar en script de despliegue
|
|
366
|
+
codecrypto deploy-sc ./script/Deploy.s.sol \
|
|
367
|
+
--private-key $(jq -r '.accounts[0].private_key' ~/.foundry/keys.json) \
|
|
368
|
+
--anvil
|
|
369
|
+
```
|
|
370
|
+
|
|
215
371
|
### Workflow completo
|
|
216
372
|
|
|
217
373
|
```bash
|
|
@@ -221,10 +377,13 @@ codecrypto doctor
|
|
|
221
377
|
# 2. Autenticarse (si es necesario)
|
|
222
378
|
codecrypto auth
|
|
223
379
|
|
|
224
|
-
# 3.
|
|
380
|
+
# 3. Generar claves (opcional, para smart contracts)
|
|
381
|
+
codecrypto generate-keys
|
|
382
|
+
|
|
383
|
+
# 4. Desplegar aplicación
|
|
225
384
|
codecrypto deploy ../mi-app --deploy
|
|
226
385
|
|
|
227
|
-
#
|
|
386
|
+
# 5. Desplegar smart contract
|
|
228
387
|
codecrypto deploy-sc ./script/Deploy.s.sol --anvil
|
|
229
388
|
```
|
|
230
389
|
|
|
@@ -240,7 +399,8 @@ cli-cc/
|
|
|
240
399
|
│ ├── auth.ts # Autenticación
|
|
241
400
|
│ ├── deploy.ts # Deploy Next.js/Express
|
|
242
401
|
│ ├── deploy-sc.ts # Deploy Smart Contracts
|
|
243
|
-
│
|
|
402
|
+
│ ├── doctor.ts # Validación del sistema
|
|
403
|
+
│ └── generate-keys.ts # Generación de claves Foundry
|
|
244
404
|
├── dist/ # Build output
|
|
245
405
|
├── package.json
|
|
246
406
|
├── tsconfig.json
|
|
@@ -339,18 +499,178 @@ EOF
|
|
|
339
499
|
|
|
340
500
|
**Variables disponibles:**
|
|
341
501
|
- `CODECRYPTO_API_URL` o `API_URL` - URL del servidor API (default: `https://proyectos.codecrypto.academy`)
|
|
502
|
+
- `CODECRYPTO_UPLOAD_URL` o `UPLOAD_SMART_CONTRACT_URL` - URL para subir smart contracts (default: `https://proyectos.proyectos.codecrypto.academy`)
|
|
342
503
|
|
|
343
504
|
**Nota:** Las variables del sistema operativo tienen prioridad sobre el archivo `.env`.
|
|
344
505
|
|
|
345
506
|
---
|
|
346
507
|
|
|
347
|
-
##
|
|
508
|
+
## 📋 Prerequisitos Detallados
|
|
509
|
+
|
|
510
|
+
Antes de usar el CLI, asegúrate de tener instalados y configurados los siguientes componentes:
|
|
511
|
+
|
|
512
|
+
### Requisitos Obligatorios
|
|
348
513
|
|
|
349
|
-
|
|
514
|
+
#### 1. Node.js y npm
|
|
515
|
+
- **Node.js** >= 16.0.0 (recomendado: >= 18.0.0)
|
|
516
|
+
- **npm** (incluido con Node.js)
|
|
517
|
+
|
|
518
|
+
**Instalación:**
|
|
519
|
+
```bash
|
|
520
|
+
# Verificar versión instalada
|
|
521
|
+
node --version
|
|
522
|
+
npm --version
|
|
523
|
+
|
|
524
|
+
# Si no está instalado, descargar desde:
|
|
525
|
+
# https://nodejs.org/
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
#### 2. Docker y Docker Buildx
|
|
529
|
+
- **Docker** >= 20.10.0
|
|
530
|
+
- **Docker Buildx** (incluido en Docker Desktop o instalable por separado)
|
|
531
|
+
|
|
532
|
+
**Instalación:**
|
|
533
|
+
```bash
|
|
534
|
+
# Verificar instalación
|
|
535
|
+
docker --version
|
|
536
|
+
docker buildx version
|
|
537
|
+
|
|
538
|
+
# Instalar Docker Desktop desde:
|
|
539
|
+
# https://www.docker.com/get-started
|
|
540
|
+
|
|
541
|
+
# O en Linux:
|
|
542
|
+
# Ubuntu/Debian
|
|
543
|
+
sudo apt-get update
|
|
544
|
+
sudo apt-get install docker.io docker-buildx-plugin
|
|
545
|
+
|
|
546
|
+
# Verificar que el daemon está corriendo
|
|
547
|
+
docker info
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
**Configuración Docker Hub:**
|
|
551
|
+
```bash
|
|
552
|
+
# Autenticarse en Docker Hub
|
|
553
|
+
docker login
|
|
554
|
+
|
|
555
|
+
# Verificar autenticación
|
|
556
|
+
docker info | grep Username
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
#### 3. Git
|
|
560
|
+
- **Git** >= 2.0.0
|
|
561
|
+
|
|
562
|
+
**Instalación:**
|
|
563
|
+
```bash
|
|
564
|
+
# Verificar versión
|
|
565
|
+
git --version
|
|
566
|
+
|
|
567
|
+
# Si no está instalado:
|
|
568
|
+
# macOS: viene con Xcode Command Line Tools
|
|
569
|
+
xcode-select --install
|
|
570
|
+
|
|
571
|
+
# Linux
|
|
572
|
+
sudo apt-get install git # Ubuntu/Debian
|
|
573
|
+
sudo yum install git # CentOS/RHEL
|
|
574
|
+
|
|
575
|
+
# Windows: https://git-scm.com/download/win
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
### Requisitos para Smart Contracts
|
|
579
|
+
|
|
580
|
+
#### 4. Foundry
|
|
581
|
+
- **forge** (compilador de Solidity)
|
|
582
|
+
- **cast** (herramienta CLI para interactuar con contratos)
|
|
583
|
+
- **anvil** (blockchain local para desarrollo)
|
|
584
|
+
|
|
585
|
+
**Instalación:**
|
|
586
|
+
```bash
|
|
587
|
+
# Instalar Foundry
|
|
588
|
+
curl -L https://foundry.paradigm.xyz | bash
|
|
589
|
+
foundryup
|
|
590
|
+
|
|
591
|
+
# Verificar instalación
|
|
592
|
+
forge --version
|
|
593
|
+
cast --version
|
|
594
|
+
anvil --version
|
|
595
|
+
```
|
|
596
|
+
|
|
597
|
+
**Configuración:**
|
|
598
|
+
```bash
|
|
599
|
+
# Crear proyecto Foundry (opcional, para testing)
|
|
600
|
+
forge init my-project
|
|
601
|
+
cd my-project
|
|
602
|
+
```
|
|
603
|
+
|
|
604
|
+
#### 5. Anvil (Blockchain Local)
|
|
605
|
+
Anvil debe estar corriendo para desplegar smart contracts localmente.
|
|
606
|
+
|
|
607
|
+
**Iniciar Anvil:**
|
|
608
|
+
```bash
|
|
609
|
+
# Configuración recomendada para CodeCrypto
|
|
610
|
+
anvil --chain-id 3133731337 --port 55556
|
|
611
|
+
|
|
612
|
+
# O en puerto estándar
|
|
613
|
+
anvil --chain-id 3133731337 --port 8545
|
|
614
|
+
```
|
|
615
|
+
|
|
616
|
+
**Verificar que está corriendo:**
|
|
617
|
+
```bash
|
|
618
|
+
# Verificar conexión
|
|
619
|
+
cast block-number --rpc-url http://localhost:8545
|
|
620
|
+
|
|
621
|
+
# O si usas puerto 55556
|
|
622
|
+
cast block-number --rpc-url http://localhost:55556
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
### Requisitos para Despliegue Remoto
|
|
626
|
+
|
|
627
|
+
#### 6. Acceso a Servidores CodeCrypto
|
|
628
|
+
- Acceso a `proyectos.codecrypto.academy` (para despliegue de aplicaciones)
|
|
629
|
+
- Acceso a `besu1.proyectos.codecrypto.academy` (red blockchain Besu 1)
|
|
630
|
+
- Acceso a `besu2.proyectos.codecrypto.academy` (red blockchain Besu 2)
|
|
631
|
+
|
|
632
|
+
**Verificar conectividad:**
|
|
633
|
+
```bash
|
|
634
|
+
# Verificar acceso a servidor de proyectos
|
|
635
|
+
curl -I https://proyectos.codecrypto.academy
|
|
636
|
+
|
|
637
|
+
# Verificar acceso a redes blockchain
|
|
638
|
+
curl -I https://besu1.proyectos.codecrypto.academy
|
|
639
|
+
curl -I https://besu2.proyectos.codecrypto.academy
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
### Verificación Completa
|
|
643
|
+
|
|
644
|
+
Ejecuta el comando `doctor` para validar todos los prerequisitos:
|
|
645
|
+
|
|
646
|
+
```bash
|
|
647
|
+
codecrypto doctor
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
O con información detallada:
|
|
651
|
+
|
|
652
|
+
```bash
|
|
653
|
+
codecrypto doctor --verbose
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
---
|
|
657
|
+
|
|
658
|
+
## Requisitos (Resumen)
|
|
659
|
+
|
|
660
|
+
**Resumen rápido:**
|
|
661
|
+
- Node.js >= 16.0.0 (recomendado >= 18.0.0)
|
|
350
662
|
- Docker y Docker Buildx
|
|
351
663
|
- Git
|
|
352
664
|
- Foundry (forge, cast, anvil)
|
|
353
|
-
- Anvil corriendo
|
|
665
|
+
- Anvil corriendo (puerto 8545 o 55556)
|
|
666
|
+
- Acceso a servidores CodeCrypto
|
|
667
|
+
|
|
668
|
+
**Verificación rápida:**
|
|
669
|
+
```bash
|
|
670
|
+
codecrypto doctor
|
|
671
|
+
```
|
|
672
|
+
|
|
673
|
+
Para instrucciones detalladas de instalación, consulta la sección [Prerequisitos Detallados](#-prerequisitos-detallados) arriba.
|
|
354
674
|
|
|
355
675
|
---
|
|
356
676
|
|
|
@@ -365,6 +685,7 @@ codecrypto deploy --help
|
|
|
365
685
|
codecrypto deploy-sc --help
|
|
366
686
|
codecrypto auth --help
|
|
367
687
|
codecrypto doctor --help
|
|
688
|
+
codecrypto generate-keys --help
|
|
368
689
|
```
|
|
369
690
|
|
|
370
691
|
---
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-sc.d.ts","sourceRoot":"","sources":["../../src/commands/deploy-sc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy-sc.d.ts","sourceRoot":"","sources":["../../src/commands/deploy-sc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,eAAO,MAAM,eAAe,SA0QxB,CAAC"}
|
|
@@ -44,6 +44,7 @@ const child_process_1 = require("child_process");
|
|
|
44
44
|
const fs = __importStar(require("fs"));
|
|
45
45
|
const path = __importStar(require("path"));
|
|
46
46
|
const os = __importStar(require("os"));
|
|
47
|
+
const ethers_1 = require("ethers");
|
|
47
48
|
exports.deployScCommand = new commander_1.Command('deploy-sc')
|
|
48
49
|
.description('Deploy smart contract using Foundry')
|
|
49
50
|
.argument('<script-path>', 'Path to the Foundry deployment script')
|
|
@@ -182,6 +183,40 @@ exports.deployScCommand = new commander_1.Command('deploy-sc')
|
|
|
182
183
|
if (options.slow) {
|
|
183
184
|
forgeArgs.push('--slow');
|
|
184
185
|
}
|
|
186
|
+
// Validar saldo antes de desplegar (solo si se usa private-key)
|
|
187
|
+
if (options.privateKey && !options.anvil && options.account === undefined) {
|
|
188
|
+
const balanceSpinner = (0, ora_1.default)('Verificando saldo de la cuenta...').start();
|
|
189
|
+
try {
|
|
190
|
+
const provider = new ethers_1.ethers.JsonRpcProvider(options.url);
|
|
191
|
+
const wallet = new ethers_1.ethers.Wallet(options.privateKey, provider);
|
|
192
|
+
const address = wallet.address;
|
|
193
|
+
const balance = await provider.getBalance(address);
|
|
194
|
+
// Convertir a ETH (mínimo 1 ETH recomendado)
|
|
195
|
+
const balanceInEth = ethers_1.ethers.formatEther(balance);
|
|
196
|
+
const minBalance = ethers_1.ethers.parseEther('1.0');
|
|
197
|
+
balanceSpinner.succeed(`Saldo verificado: ${balanceInEth} ETH`);
|
|
198
|
+
if (balance < minBalance) {
|
|
199
|
+
console.error(chalk_1.default.red('\n❌ Error: Saldo insuficiente en la cuenta'));
|
|
200
|
+
console.error(chalk_1.default.red(` Dirección: ${address}`));
|
|
201
|
+
console.error(chalk_1.default.red(` Saldo actual: ${balanceInEth} ETH`));
|
|
202
|
+
console.error(chalk_1.default.red(` Saldo mínimo recomendado: 1.0 ETH`));
|
|
203
|
+
console.error(chalk_1.default.yellow('\n💡 Asegúrate de tener suficiente saldo para pagar las fees de gas'));
|
|
204
|
+
console.log(chalk_1.default.cyan('\n🚰 Obtén fondos del faucet:'));
|
|
205
|
+
console.log(chalk_1.default.cyan(` ${chalk_1.default.underline('https://faucet.codecrypto.academy')}`));
|
|
206
|
+
console.log(chalk_1.default.gray(` Visita el faucet y solicita fondos para tu dirección: ${address}\n`));
|
|
207
|
+
process.exit(1);
|
|
208
|
+
}
|
|
209
|
+
console.log(chalk_1.default.green(` Dirección: ${chalk_1.default.cyan(address)}`));
|
|
210
|
+
console.log(chalk_1.default.green(` Saldo: ${chalk_1.default.cyan(balanceInEth)} ETH\n`));
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
balanceSpinner.warn(`No se pudo verificar el saldo: ${error.message}`);
|
|
214
|
+
console.log(chalk_1.default.yellow(' Continuando con el despliegue...'));
|
|
215
|
+
console.log(chalk_1.default.yellow(' Asegúrate de tener suficiente saldo para las fees de gas'));
|
|
216
|
+
console.log(chalk_1.default.cyan('\n🚰 Si necesitas fondos, usa el faucet:'));
|
|
217
|
+
console.log(chalk_1.default.cyan(` ${chalk_1.default.underline('https://faucet.codecrypto.academy')}\n`));
|
|
218
|
+
}
|
|
219
|
+
}
|
|
185
220
|
// Ejecutar el script
|
|
186
221
|
const deploySpinner = (0, ora_1.default)('Desplegando smart contract...').start();
|
|
187
222
|
try {
|
|
@@ -274,7 +309,8 @@ async function uploadDeploymentResults(config) {
|
|
|
274
309
|
throw new Error(`Failed to read token file: ${error.message}`);
|
|
275
310
|
}
|
|
276
311
|
const email = tokenData.email;
|
|
277
|
-
|
|
312
|
+
// URL específica para subir smart contracts
|
|
313
|
+
const uploadServerUrl = process.env.CODECRYPTO_UPLOAD_URL || process.env.UPLOAD_SMART_CONTRACT_URL || 'https://proyectos.proyectos.codecrypto.academy';
|
|
278
314
|
const token = tokenData.token;
|
|
279
315
|
if (!email) {
|
|
280
316
|
throw new Error('Email not found in token.json');
|
|
@@ -328,7 +364,7 @@ async function uploadDeploymentResults(config) {
|
|
|
328
364
|
throw new Error('No transactions found in run-latest.json');
|
|
329
365
|
}
|
|
330
366
|
// 6. Hacer la llamada POST al endpoint
|
|
331
|
-
const apiUrl = `${
|
|
367
|
+
const apiUrl = `${uploadServerUrl}/api/uploadSmartContract`;
|
|
332
368
|
// Log de la petición (solo si debug está activado)
|
|
333
369
|
if (config.debug) {
|
|
334
370
|
console.log(chalk_1.default.gray('\n[UPLOAD REQUEST] POST /api/uploadSmartContract:'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-sc.js","sourceRoot":"","sources":["../../src/commands/deploy-sc.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"deploy-sc.js","sourceRoot":"","sources":["../../src/commands/deploy-sc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-keys.d.ts","sourceRoot":"","sources":["../../src/commands/generate-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,eAAO,MAAM,mBAAmB,SAuH5B,CAAC"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.generateKeysCommand = void 0;
|
|
40
|
+
const commander_1 = require("commander");
|
|
41
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
42
|
+
const ora_1 = __importDefault(require("ora"));
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const os = __importStar(require("os"));
|
|
46
|
+
const ethers_1 = require("ethers");
|
|
47
|
+
exports.generateKeysCommand = new commander_1.Command('generate-keys')
|
|
48
|
+
.description('Generate Foundry keys file with mnemonic and derived accounts')
|
|
49
|
+
.option('-m, --mnemonic <mnemonic>', 'Mnemonic phrase (if not provided, a random one will be generated)')
|
|
50
|
+
.option('-n, --count <number>', 'Number of accounts to generate', '10')
|
|
51
|
+
.option('-o, --output <path>', 'Output file path', '~/.foundry/keys.json')
|
|
52
|
+
.action(async (options) => {
|
|
53
|
+
console.log(chalk_1.default.blue('\n🔑 CodeCrypto Foundry Keys Generator\n'));
|
|
54
|
+
try {
|
|
55
|
+
// Parse count
|
|
56
|
+
const accountCount = parseInt(options.count, 10);
|
|
57
|
+
if (isNaN(accountCount) || accountCount < 1 || accountCount > 100) {
|
|
58
|
+
console.error(chalk_1.default.red('❌ Error: Account count must be between 1 and 100'));
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
// Generate or use provided mnemonic
|
|
62
|
+
let mnemonic;
|
|
63
|
+
if (options.mnemonic) {
|
|
64
|
+
mnemonic = options.mnemonic.trim();
|
|
65
|
+
// Validate mnemonic
|
|
66
|
+
if (!ethers_1.ethers.Mnemonic.isValidMnemonic(mnemonic)) {
|
|
67
|
+
console.error(chalk_1.default.red('❌ Error: Invalid mnemonic phrase'));
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
// Generate random mnemonic
|
|
73
|
+
const spinner = (0, ora_1.default)('Generating random mnemonic...').start();
|
|
74
|
+
mnemonic = ethers_1.ethers.Mnemonic.entropyToPhrase(ethers_1.ethers.randomBytes(16));
|
|
75
|
+
spinner.succeed('Random mnemonic generated');
|
|
76
|
+
}
|
|
77
|
+
// Derive accounts
|
|
78
|
+
const accountsSpinner = (0, ora_1.default)(`Deriving ${accountCount} account(s) from mnemonic...`).start();
|
|
79
|
+
const accounts = [];
|
|
80
|
+
try {
|
|
81
|
+
for (let i = 0; i < accountCount; i++) {
|
|
82
|
+
// Use HDNodeWallet.fromPhrase with the full derivation path
|
|
83
|
+
// This creates a wallet directly from mnemonic at the specified path
|
|
84
|
+
const wallet = ethers_1.ethers.HDNodeWallet.fromPhrase(mnemonic, `m/44'/60'/0'/0/${i}`);
|
|
85
|
+
accounts.push({
|
|
86
|
+
address: wallet.address,
|
|
87
|
+
private_key: wallet.privateKey,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
accountsSpinner.succeed(`Generated ${accountCount} account(s)`);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
accountsSpinner.fail('Failed to derive accounts');
|
|
94
|
+
console.error(chalk_1.default.red(`❌ Error: ${error.message}`));
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
// Prepare output data
|
|
98
|
+
const keysData = {
|
|
99
|
+
mnemonic,
|
|
100
|
+
accounts,
|
|
101
|
+
};
|
|
102
|
+
// Resolve output path
|
|
103
|
+
let outputPath = options.output;
|
|
104
|
+
if (outputPath.startsWith('~')) {
|
|
105
|
+
outputPath = path.join(os.homedir(), outputPath.slice(1));
|
|
106
|
+
}
|
|
107
|
+
outputPath = path.resolve(outputPath);
|
|
108
|
+
// Create directory if it doesn't exist
|
|
109
|
+
const outputDir = path.dirname(outputPath);
|
|
110
|
+
if (!fs.existsSync(outputDir)) {
|
|
111
|
+
const dirSpinner = (0, ora_1.default)(`Creating directory: ${outputDir}`).start();
|
|
112
|
+
try {
|
|
113
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
114
|
+
dirSpinner.succeed(`Directory created: ${outputDir}`);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
dirSpinner.fail('Failed to create directory');
|
|
118
|
+
console.error(chalk_1.default.red(`❌ Error: ${error.message}`));
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Write file
|
|
123
|
+
const writeSpinner = (0, ora_1.default)(`Writing keys to ${outputPath}...`).start();
|
|
124
|
+
try {
|
|
125
|
+
fs.writeFileSync(outputPath, JSON.stringify(keysData, null, 2), 'utf-8');
|
|
126
|
+
writeSpinner.succeed(`Keys saved to ${outputPath}`);
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
writeSpinner.fail('Failed to write file');
|
|
130
|
+
console.error(chalk_1.default.red(`❌ Error: ${error.message}`));
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
// Display summary
|
|
134
|
+
console.log(chalk_1.default.green('\n✅ Keys generated successfully!\n'));
|
|
135
|
+
console.log(chalk_1.default.gray('Summary:'));
|
|
136
|
+
console.log(chalk_1.default.white(` Mnemonic: ${chalk_1.default.cyan(mnemonic)}`));
|
|
137
|
+
console.log(chalk_1.default.white(` Accounts: ${chalk_1.default.cyan(accountCount)}`));
|
|
138
|
+
console.log(chalk_1.default.white(` Output: ${chalk_1.default.cyan(outputPath)}\n`));
|
|
139
|
+
// Display first few accounts
|
|
140
|
+
console.log(chalk_1.default.gray('First 3 accounts:'));
|
|
141
|
+
accounts.slice(0, 3).forEach((account, index) => {
|
|
142
|
+
console.log(chalk_1.default.white(` ${index + 1}. ${chalk_1.default.cyan(account.address)}`));
|
|
143
|
+
console.log(chalk_1.default.gray(` Private Key: ${chalk_1.default.dim(account.private_key)}`));
|
|
144
|
+
});
|
|
145
|
+
if (accountCount > 3) {
|
|
146
|
+
console.log(chalk_1.default.gray(` ... and ${accountCount - 3} more account(s)\n`));
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
console.log('');
|
|
150
|
+
}
|
|
151
|
+
console.log(chalk_1.default.yellow('⚠️ Warning: Keep your mnemonic and private keys secure!'));
|
|
152
|
+
console.log(chalk_1.default.yellow(' Never share them or commit them to version control.\n'));
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
console.error(chalk_1.default.red(`\n❌ Error: ${error.message}`));
|
|
156
|
+
process.exit(1);
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
//# sourceMappingURL=generate-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-keys.js","sourceRoot":"","sources":["../../src/commands/generate-keys.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -42,6 +42,7 @@ const deploy_1 = require("./commands/deploy");
|
|
|
42
42
|
const deploy_sc_1 = require("./commands/deploy-sc");
|
|
43
43
|
const auth_1 = require("./commands/auth");
|
|
44
44
|
const doctor_1 = require("./commands/doctor");
|
|
45
|
+
const generate_keys_1 = require("./commands/generate-keys");
|
|
45
46
|
// Cargar variables de entorno desde ~/.codecrypto/.env si existe
|
|
46
47
|
function loadEnvFile() {
|
|
47
48
|
const homeDir = os.homedir();
|
|
@@ -81,5 +82,6 @@ program.addCommand(deploy_1.deployCommand);
|
|
|
81
82
|
program.addCommand(deploy_sc_1.deployScCommand);
|
|
82
83
|
program.addCommand(auth_1.authCommand);
|
|
83
84
|
program.addCommand(doctor_1.doctorCommand);
|
|
85
|
+
program.addCommand(generate_keys_1.generateKeysCommand);
|
|
84
86
|
program.parse(process.argv);
|
|
85
87
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,8CAAkD;AAClD,oDAAuD;AACvD,0CAA8C;AAC9C,8CAAkD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,8CAAkD;AAClD,oDAAuD;AACvD,0CAA8C;AAC9C,8CAAkD;AAClD,4DAA+D;AAE/D,iEAAiE;AACjE,SAAS,WAAW;IAClB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAErD,sCAAsC;IACtC,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAExC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,sCAAsC;YACtC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAElD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,UAAU,KAAK,CAAC,CAAC;gBAAE,SAAS;YAEhC,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;YACpD,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAEvD,qGAAqG;YACrG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IACD,6FAA6F;AAC/F,CAAC;AAED,yCAAyC;AACzC,WAAW,EAAE,CAAC;AAEd,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,oCAAoC,CAAC;KACjD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,qBAAqB;AACrB,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,2BAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,kBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,mCAAmB,CAAC,CAAC;AAExC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codecrypto-cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.15",
|
|
4
4
|
"description": "CLI tool for CodeCrypto operations",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"chalk": "^4.1.2",
|
|
24
24
|
"commander": "^12.0.0",
|
|
25
|
+
"ethers": "^6.9.0",
|
|
25
26
|
"inquirer": "^8.2.5",
|
|
26
27
|
"jose": "^6.1.3",
|
|
27
28
|
"ora": "^5.4.1"
|
|
@@ -29,8 +30,8 @@
|
|
|
29
30
|
"devDependencies": {
|
|
30
31
|
"@types/inquirer": "^9.0.7",
|
|
31
32
|
"@types/node": "^20.10.0",
|
|
32
|
-
"tsx": "^4.
|
|
33
|
-
"typescript": "^5.3
|
|
33
|
+
"tsx": "^4.21.0",
|
|
34
|
+
"typescript": "^5.9.3"
|
|
34
35
|
},
|
|
35
36
|
"engines": {
|
|
36
37
|
"node": ">=16.0.0"
|
|
@@ -5,6 +5,7 @@ import { execSync } from 'child_process';
|
|
|
5
5
|
import * as fs from 'fs';
|
|
6
6
|
import * as path from 'path';
|
|
7
7
|
import * as os from 'os';
|
|
8
|
+
import { ethers } from 'ethers';
|
|
8
9
|
|
|
9
10
|
export const deployScCommand = new Command('deploy-sc')
|
|
10
11
|
.description('Deploy smart contract using Foundry')
|
|
@@ -156,6 +157,44 @@ export const deployScCommand = new Command('deploy-sc')
|
|
|
156
157
|
forgeArgs.push('--slow');
|
|
157
158
|
}
|
|
158
159
|
|
|
160
|
+
// Validar saldo antes de desplegar (solo si se usa private-key)
|
|
161
|
+
if (options.privateKey && !options.anvil && options.account === undefined) {
|
|
162
|
+
const balanceSpinner = ora('Verificando saldo de la cuenta...').start();
|
|
163
|
+
try {
|
|
164
|
+
const provider = new ethers.JsonRpcProvider(options.url);
|
|
165
|
+
const wallet = new ethers.Wallet(options.privateKey, provider);
|
|
166
|
+
const address = wallet.address;
|
|
167
|
+
const balance = await provider.getBalance(address);
|
|
168
|
+
|
|
169
|
+
// Convertir a ETH (mínimo 1 ETH recomendado)
|
|
170
|
+
const balanceInEth = ethers.formatEther(balance);
|
|
171
|
+
const minBalance = ethers.parseEther('1.0');
|
|
172
|
+
|
|
173
|
+
balanceSpinner.succeed(`Saldo verificado: ${balanceInEth} ETH`);
|
|
174
|
+
|
|
175
|
+
if (balance < minBalance) {
|
|
176
|
+
console.error(chalk.red('\n❌ Error: Saldo insuficiente en la cuenta'));
|
|
177
|
+
console.error(chalk.red(` Dirección: ${address}`));
|
|
178
|
+
console.error(chalk.red(` Saldo actual: ${balanceInEth} ETH`));
|
|
179
|
+
console.error(chalk.red(` Saldo mínimo recomendado: 1.0 ETH`));
|
|
180
|
+
console.error(chalk.yellow('\n💡 Asegúrate de tener suficiente saldo para pagar las fees de gas'));
|
|
181
|
+
console.log(chalk.cyan('\n🚰 Obtén fondos del faucet:'));
|
|
182
|
+
console.log(chalk.cyan(` ${chalk.underline('https://faucet.codecrypto.academy')}`));
|
|
183
|
+
console.log(chalk.gray(` Visita el faucet y solicita fondos para tu dirección: ${address}\n`));
|
|
184
|
+
process.exit(1);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
console.log(chalk.green(` Dirección: ${chalk.cyan(address)}`));
|
|
188
|
+
console.log(chalk.green(` Saldo: ${chalk.cyan(balanceInEth)} ETH\n`));
|
|
189
|
+
} catch (error: any) {
|
|
190
|
+
balanceSpinner.warn(`No se pudo verificar el saldo: ${error.message}`);
|
|
191
|
+
console.log(chalk.yellow(' Continuando con el despliegue...'));
|
|
192
|
+
console.log(chalk.yellow(' Asegúrate de tener suficiente saldo para las fees de gas'));
|
|
193
|
+
console.log(chalk.cyan('\n🚰 Si necesitas fondos, usa el faucet:'));
|
|
194
|
+
console.log(chalk.cyan(` ${chalk.underline('https://faucet.codecrypto.academy')}\n`));
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
159
198
|
// Ejecutar el script
|
|
160
199
|
const deploySpinner = ora('Desplegando smart contract...').start();
|
|
161
200
|
|
|
@@ -258,7 +297,8 @@ async function uploadDeploymentResults(config: {
|
|
|
258
297
|
}
|
|
259
298
|
|
|
260
299
|
const email = tokenData.email;
|
|
261
|
-
|
|
300
|
+
// URL específica para subir smart contracts
|
|
301
|
+
const uploadServerUrl = process.env.CODECRYPTO_UPLOAD_URL || process.env.UPLOAD_SMART_CONTRACT_URL || 'https://proyectos.proyectos.codecrypto.academy';
|
|
262
302
|
const token = tokenData.token;
|
|
263
303
|
|
|
264
304
|
if (!email) {
|
|
@@ -323,7 +363,7 @@ async function uploadDeploymentResults(config: {
|
|
|
323
363
|
}
|
|
324
364
|
|
|
325
365
|
// 6. Hacer la llamada POST al endpoint
|
|
326
|
-
const apiUrl = `${
|
|
366
|
+
const apiUrl = `${uploadServerUrl}/api/uploadSmartContract`;
|
|
327
367
|
|
|
328
368
|
// Log de la petición (solo si debug está activado)
|
|
329
369
|
if (config.debug) {
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import * as fs from 'fs';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import * as os from 'os';
|
|
7
|
+
import { ethers } from 'ethers';
|
|
8
|
+
|
|
9
|
+
interface Account {
|
|
10
|
+
address: string;
|
|
11
|
+
private_key: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
interface KeysFile {
|
|
15
|
+
mnemonic: string;
|
|
16
|
+
accounts: Account[];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const generateKeysCommand = new Command('generate-keys')
|
|
20
|
+
.description('Generate Foundry keys file with mnemonic and derived accounts')
|
|
21
|
+
.option('-m, --mnemonic <mnemonic>', 'Mnemonic phrase (if not provided, a random one will be generated)')
|
|
22
|
+
.option('-n, --count <number>', 'Number of accounts to generate', '10')
|
|
23
|
+
.option('-o, --output <path>', 'Output file path', '~/.foundry/keys.json')
|
|
24
|
+
.action(async (options) => {
|
|
25
|
+
console.log(chalk.blue('\n🔑 CodeCrypto Foundry Keys Generator\n'));
|
|
26
|
+
|
|
27
|
+
try {
|
|
28
|
+
// Parse count
|
|
29
|
+
const accountCount = parseInt(options.count, 10);
|
|
30
|
+
if (isNaN(accountCount) || accountCount < 1 || accountCount > 100) {
|
|
31
|
+
console.error(chalk.red('❌ Error: Account count must be between 1 and 100'));
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Generate or use provided mnemonic
|
|
36
|
+
let mnemonic: string;
|
|
37
|
+
if (options.mnemonic) {
|
|
38
|
+
mnemonic = options.mnemonic.trim();
|
|
39
|
+
// Validate mnemonic
|
|
40
|
+
if (!ethers.Mnemonic.isValidMnemonic(mnemonic)) {
|
|
41
|
+
console.error(chalk.red('❌ Error: Invalid mnemonic phrase'));
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
} else {
|
|
45
|
+
// Generate random mnemonic
|
|
46
|
+
const spinner = ora('Generating random mnemonic...').start();
|
|
47
|
+
mnemonic = ethers.Mnemonic.entropyToPhrase(ethers.randomBytes(16));
|
|
48
|
+
spinner.succeed('Random mnemonic generated');
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Derive accounts
|
|
52
|
+
const accountsSpinner = ora(`Deriving ${accountCount} account(s) from mnemonic...`).start();
|
|
53
|
+
const accounts: Account[] = [];
|
|
54
|
+
|
|
55
|
+
try {
|
|
56
|
+
for (let i = 0; i < accountCount; i++) {
|
|
57
|
+
// Use HDNodeWallet.fromPhrase with the full derivation path
|
|
58
|
+
// This creates a wallet directly from mnemonic at the specified path
|
|
59
|
+
const wallet = ethers.HDNodeWallet.fromPhrase(mnemonic, `m/44'/60'/0'/0/${i}`);
|
|
60
|
+
accounts.push({
|
|
61
|
+
address: wallet.address,
|
|
62
|
+
private_key: wallet.privateKey,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
accountsSpinner.succeed(`Generated ${accountCount} account(s)`);
|
|
67
|
+
} catch (error: any) {
|
|
68
|
+
accountsSpinner.fail('Failed to derive accounts');
|
|
69
|
+
console.error(chalk.red(`❌ Error: ${error.message}`));
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Prepare output data
|
|
74
|
+
const keysData: KeysFile = {
|
|
75
|
+
mnemonic,
|
|
76
|
+
accounts,
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
// Resolve output path
|
|
80
|
+
let outputPath = options.output;
|
|
81
|
+
if (outputPath.startsWith('~')) {
|
|
82
|
+
outputPath = path.join(os.homedir(), outputPath.slice(1));
|
|
83
|
+
}
|
|
84
|
+
outputPath = path.resolve(outputPath);
|
|
85
|
+
|
|
86
|
+
// Create directory if it doesn't exist
|
|
87
|
+
const outputDir = path.dirname(outputPath);
|
|
88
|
+
if (!fs.existsSync(outputDir)) {
|
|
89
|
+
const dirSpinner = ora(`Creating directory: ${outputDir}`).start();
|
|
90
|
+
try {
|
|
91
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
92
|
+
dirSpinner.succeed(`Directory created: ${outputDir}`);
|
|
93
|
+
} catch (error: any) {
|
|
94
|
+
dirSpinner.fail('Failed to create directory');
|
|
95
|
+
console.error(chalk.red(`❌ Error: ${error.message}`));
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Write file
|
|
101
|
+
const writeSpinner = ora(`Writing keys to ${outputPath}...`).start();
|
|
102
|
+
try {
|
|
103
|
+
fs.writeFileSync(outputPath, JSON.stringify(keysData, null, 2), 'utf-8');
|
|
104
|
+
writeSpinner.succeed(`Keys saved to ${outputPath}`);
|
|
105
|
+
} catch (error: any) {
|
|
106
|
+
writeSpinner.fail('Failed to write file');
|
|
107
|
+
console.error(chalk.red(`❌ Error: ${error.message}`));
|
|
108
|
+
process.exit(1);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Display summary
|
|
112
|
+
console.log(chalk.green('\n✅ Keys generated successfully!\n'));
|
|
113
|
+
console.log(chalk.gray('Summary:'));
|
|
114
|
+
console.log(chalk.white(` Mnemonic: ${chalk.cyan(mnemonic)}`));
|
|
115
|
+
console.log(chalk.white(` Accounts: ${chalk.cyan(accountCount)}`));
|
|
116
|
+
console.log(chalk.white(` Output: ${chalk.cyan(outputPath)}\n`));
|
|
117
|
+
|
|
118
|
+
// Display first few accounts
|
|
119
|
+
console.log(chalk.gray('First 3 accounts:'));
|
|
120
|
+
accounts.slice(0, 3).forEach((account, index) => {
|
|
121
|
+
console.log(chalk.white(` ${index + 1}. ${chalk.cyan(account.address)}`));
|
|
122
|
+
console.log(chalk.gray(` Private Key: ${chalk.dim(account.private_key)}`));
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
if (accountCount > 3) {
|
|
126
|
+
console.log(chalk.gray(` ... and ${accountCount - 3} more account(s)\n`));
|
|
127
|
+
} else {
|
|
128
|
+
console.log('');
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
console.log(chalk.yellow('⚠️ Warning: Keep your mnemonic and private keys secure!'));
|
|
132
|
+
console.log(chalk.yellow(' Never share them or commit them to version control.\n'));
|
|
133
|
+
|
|
134
|
+
} catch (error: any) {
|
|
135
|
+
console.error(chalk.red(`\n❌ Error: ${error.message}`));
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
|
package/src/index.ts
CHANGED
|
@@ -8,6 +8,7 @@ import { deployCommand } from './commands/deploy';
|
|
|
8
8
|
import { deployScCommand } from './commands/deploy-sc';
|
|
9
9
|
import { authCommand } from './commands/auth';
|
|
10
10
|
import { doctorCommand } from './commands/doctor';
|
|
11
|
+
import { generateKeysCommand } from './commands/generate-keys';
|
|
11
12
|
|
|
12
13
|
// Cargar variables de entorno desde ~/.codecrypto/.env si existe
|
|
13
14
|
function loadEnvFile() {
|
|
@@ -55,5 +56,6 @@ program.addCommand(deployCommand);
|
|
|
55
56
|
program.addCommand(deployScCommand);
|
|
56
57
|
program.addCommand(authCommand);
|
|
57
58
|
program.addCommand(doctorCommand);
|
|
59
|
+
program.addCommand(generateKeysCommand);
|
|
58
60
|
|
|
59
61
|
program.parse(process.argv);
|