> For the complete documentation index, see [llms.txt](https://docs.stacks.co/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.stacks.co/learn/es/network-fundamentals/wallets-and-accounts.md).

# Carteras y cuentas

<div data-with-frame="true"><figure><img src="https://3385590278-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FH74xqoobupBWwBsVMJhK%2Fuploads%2Fgit-blob-2d782448481ac5b6f078b0307da62a30af1d8d6f%2FFrame%20316126255.jpg?alt=media" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
En Stacks, los términos 'dirección' y 'principal' se usan indistintamente.
{% endhint %}

## Introducción

Las billeteras de Stacks son herramientas de software o hardware para almacenar criptomonedas, NFT y otros activos digitales. También se utilizan para establecer una identidad en cadena en aplicaciones descentralizadas (dApps). Estas billeteras almacenan y administran criptográficamente la identidad y los fondos de cada usuario a través de una sola dirección de blockchain, basada en criptografía de clave pública.

### Propósito de una billetera de Stacks

* Establecer la identidad del usuario
* Almacenar activos
* Mostrar saldos
* Firmar transacciones
* Firmar mensajes
* Participar en la economía de Bitcoin

Las billeteras en Stacks consisten en cuentas, que utilizan un modelo basado en cuentas, en lugar de un modelo UTXO como Bitcoin. Este modelo es más simple que el modelo UTXO y tiene un concepto más tradicional de “saldo”, similar al que encontrarías en un banco. En este modelo, cada dirección tiene una única cifra de “saldo” para un token dado, que aumenta o disminuye a medida que se envían transacciones desde/hacia esa cuenta. Esto es lo que utilizan la mayoría de los ecosistemas Web3. En un modelo UTXO, la red funciona como un libro contable, y cada UTXO es análogo a un billete de efectivo.

### Componentes de una cuenta de Stacks

<div data-with-frame="true"><figure><img src="https://3385590278-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FH74xqoobupBWwBsVMJhK%2Fuploads%2FLK9iA5RYSuLt1pt6kcqL%2Fstacks-address-generation-flowchart.png?alt=media&amp;token=f322e0cc-7d6d-4df6-a8d1-7cf08a8828ec" alt=""><figcaption></figcaption></figure></div>

* **Clave privada** - La clave privada es un código alfanumérico que está emparejado con una sola clave pública en una relación 1:1. Nunca compartas tu clave privada con nadie. Una clave privada es la forma en que demuestras la propiedad de una clave pública y cómo puedes gastar los activos mantenidos por ese par de claves en particular.\
  \
  Ejemplo de clave privada en Stacks (32 bytes anexados con un byte 0x01):\
  `5a4133fec2cf923d37238d3ba2fcd2ee9c8dce882c22218fd210d8a02ceb2c7401`
* **Clave pública** - La clave pública se deriva matemáticamente de la clave privada. Se puede compartir de forma segura y la red la usa para verificar las firmas creadas por la clave privada, sin revelar la propia clave privada.\
  \
  Ejemplo de clave pública en Stacks (formato comprimido):\
  `02e8eb87862945d369511fdcce326ffef9a01b68c7d070e3ce685a5cbb9b1ecfc5`
* **Dirección (principal)** - La dirección es una representación más corta y fácil de usar derivada de la clave pública. Es lo que compartes para recibir sBTC, STX, tokens o NFT en Stacks, y actúa como el identificador en cadena del usuario.\
  \
  Ejemplo de dirección pública en Stacks (codificación c32check):\
  `SPM9G3CNGSCTB4956290NESM0MR9W9CCEPVEPSQC`

{% hint style="info" %}
La generación de claves privada/pública utiliza la **secp256k1** curva.

El algoritmo criptográfico de firma utilizado en Stacks es **ECDSA** sobre **secp256k1**.

Las direcciones se crean generando el **RIPEMD-160** hash de la **SHA256** de la clave pública. Las direcciones BTC se codifican con **Base58Check**. Para las direcciones de Stacks, [**c32check**](https://github.com/stacks-network/c32check) se usa.
{% endhint %}

Las cuentas de Stacks son entidades que poseen activos, como tokens Stacks (STX). Una cuenta tiene una dirección, una clave privada, un nonce y uno o más saldos de activos. Los activos no pueden salir de una cuenta sin una acción del propietario de la cuenta. Todos los cambios en los activos (y en los saldos de la cuenta) requieren una transacción correspondiente.

Todas las billeteras de Stacks también admiten la derivación de direcciones de Bitcoin, por lo que una sola frase semilla puede servir para ambas cadenas.

#### Formatos de dirección <a href="#address-formats" id="address-formats"></a>

Las direcciones de Stacks usan diferentes prefijos para indicar la red a la que pertenecen: `SP` y `SM` en mainnet, `ST` y `SN` en testnet.

```typescript
// La dirección de mainnet empieza con 'SP'
const mainnetAddress = 'SP3FGQ8Z7JY9BWYZ5WM53E0M9NK7WHJF0691NZ159';

// La dirección multisig de mainnet empieza con 'SM'
const multisigMainnetAddress = 'SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4'

// La dirección multisig de testnet empieza con 'SN'
const multisigTestnetAddress = 'SNJSPGVBFZHPXGESC9ZQWVFSNF4RHNNRTW2HYYJ7'

// La dirección de testnet empieza con 'ST'
const testnetAddress = 'ST2F4BK4GZH6YFBNHYDDGN4T1RKBA7DA1BJZPJEJJ';
```

***

## ¿Cómo crear una cuenta de Stacks?

Las cuentas de una billetera se generan a partir de una frase mnemotécnica de 24 palabras que cumple con el estándar BIP39. Esto a menudo se conoce como la **frase semilla**. La frase semilla proporciona acceso a las cuentas de Stacks.

{% hint style="danger" %}
Si se pierde la frase semilla, no se puede restaurar el acceso a las cuentas asociadas. Ninguna persona u organización puede recuperar una frase semilla perdida.
{% endhint %}

Hay varias formas distintas de crear una cuenta de Stacks, tanto como desarrollador como sin serlo.

{% stepper %}
{% step %}

#### Usando Stacks.js

Para la generación programática de billeteras o al restaurar cuentas desde una copia de seguridad, puedes derivar direcciones a partir de una frase semilla mnemotécnica. Cada billetera puede contener varias cuentas, todas derivadas de la misma frase semilla usando diferentes rutas de derivación.

{% code expandable="true" %}

```typescript
import { generateWallet, generateSecretKey, type Wallet, Account } from '@stacks/wallet-sdk';
import { privateKeyToAddress, privateKeyToPublic } from '@stacks/transactions'

// Genera una nueva frase semilla de 24 palabras
const secretKey: string = generateSecretKey();

// O usa una frase semilla existente
// const secretKey = 'already owned seed phrase ...';

const wallet: Wallet = await generateWallet({
  secretKey,
  password: 'optional-encryption-password',
});

// Obtén la clave pública y la dirección de la primera cuenta
const account: Account = wallet.accounts[0];
const publicKey = privateKeyToPublic(account.stxPrivateKey);
const mainnetAddress = privateKeyToAddress(account.stxPrivateKey, 'mainnet');

console.log('Clave privada:', account.stxPrivateKey);
console.log('Dirección:', mainnetAddress);
// Clave privada: 97ff523937735dc6c9e3180f98a6aa94f526fbe072230b99e07482260f59988c01
// Dirección: SP1WNA65XE3M665RJ9AC81J18XPMJ5QC5XJDHWXE
```

{% endcode %}

Para más formas de generar programáticamente claves y cuentas, consulta la guía [aquí](/stacks.js/accounts-and-addresses.md).
{% endstep %}

{% step %}

#### Usando la herramienta CLI de Stacks

Usar la herramienta CLI de Stacks te permite gestionar billeteras desde la línea de comandos.

**`make_keychain`**

```bash
# Instala la CLI globalmente
npm install --global @stacks/cli

# Genera una nueva cuenta y guarda los detalles en un nuevo archivo.
# la opción '-t' convierte esto en una cuenta de testnet
stx make_keychain -t > cli_keychain.json

# make_keychain produce lo siguiente:
{
  "mnemonic": "aaa bbb ccc ddd ...",
  "keyInfo": {
    "privateKey": "5a3f1f15245bb3fb...",
    "address": "STJRM2AMVF90ER6G3RW1QTF85E3HZH37006D5ER1",
    "btcAddress": "biwSd6KTEvJcyX2R8oyfgj5REuLzczMYC1",
    "wif": "L4HXn7PLmzoNW...",
    "index": 0
  }
}
```

**`get_address`**

```bash
# Obtén la dirección de una clave privada o de un paquete de claves privadas multisig.
# Devuelve las direcciones de BTC y STX

stx get_address f5185b9ca93bdcb5753fded3b097dab8547a8b47d2be578412d0687a9a0184cb01
{
  "BTC": "1JFhWyVPpZQjbPcXFtpGtTmU22u4fhBVmq",
  "STACKS": "SP2YM3J4KQK09V670TD6ZZ1XYNYCNGCWCVVKSDFWQ"
}

stx get_address 1,f5185b9ca93bdcb5753fded3b097dab8547a8b47d2be578412d0687a9a0184cb01,ff2ff4f4e7f8a1979ffad4fc869def1657fd5d48fc9cf40c1924725ead60942c01
{
  "BTC": "363pKBhc5ipDws1k5181KFf6RSxhBZ7e3p",
  "STACKS": "SMQWZ30EXVG6XEC1K4QTDP16C1CAWSK1JSWMS0QN"
}
```

Para más ejemplos de uso, consulta el repositorio de la CLI de Stacks [aquí](https://github.com/stx-labs/stacks.js/tree/main/packages/cli).
{% endstep %}

{% step %}

#### Usando extensiones/apps de billetera Bitcoin L2

Hay muchas billeteras populares de Bitcoin que admiten capas y metaprotocolos de Bitcoin. Leather y Xverse son opciones populares para empezar con Stacks.

{% hint style="info" %}
**Billeteras para el staking de Bitcoin.** Lo que necesitas depende de la ruta. El staking solo de STX y los bonos sBTC usan únicamente tu cuenta de Stacks. Un bono nativo de BTC también necesita una billetera de Bitcoin que pueda pagar una salida P2WSH, porque el bloqueo de L1 es un script de timelock P2WSH que se compromete con tu principal de Stacks; después del timelock gastas esa salida con tu propia clave de Bitcoin. Empieza en [Staking de Bitcoin](/learn/es/bitcoin-staking.md), luego [Abrir una posición de bono](/operate/protocol-bonds/opening-a-bond-position.md) y [Verificar y recuperar tu Bitcoin bloqueado](/operate/protocol-bonds/verifying-and-reclaiming-your-locked-bitcoin.md).
{% endhint %}

{% embed url="<https://youtu.be/RvTuex1jbGY?si=KGEGESS3sr38G_Tj>" %}
{% endstep %}

{% step %}

#### Usando otras herramientas creadas por la comunidad

Consulta el [Catálogo de Stacks Devtools](/stacks-devtools-catalog.md) para otras herramientas creativas de desarrollo para crear y administrar billeteras de Stacks.
{% endstep %}
{% endstepper %}

***

## ¿Cómo se formatean las direcciones de contratos de Clarity?

En Stacks, una **dirección/principal de contrato** identifica de forma única un contrato inteligente desplegado y está estructurada como un principal de cuenta más un espacio de nombres de contrato, formando una identidad única en cadena:

```
<dirección-del-desplegador>.<nombre-del-contrato>
```

#### Desglose de la estructura

1. **Dirección del desplegador**\
   Un principal estándar de Stacks (derivado de un hash160 de una clave pública), como:
   * `SP...` → red principal
   * `ST...` → red de pruebas
2. **Nombre del contrato**\
   Un identificador ASCII elegido en el momento del despliegue (p. ej., `my-token`, `amm-v1`, `nft-market`).

#### Por qué está estructurado de esta manera

Porque los identificadores de contrato están agrupados por espacio de nombres según la dirección del desplegador:

* Dos cuentas distintas pueden desplegar contratos con el mismo nombre.
* Una sola cuenta no puede desplegar dos contratos con el mismo nombre.
* El identificador es determinista y único a nivel global.

***

## Manejo de diferentes formatos

Es común que los nuevos desarrolladores de Stacks se confundan con las distintas formas de especificar los principals de Stacks (también conocidos como direcciones) en su desarrollo.

Aquí tienes un desglose de cómo tratar con principals en 3 casos de uso diferentes.

<div data-with-frame="true"><figure><img src="https://3385590278-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FH74xqoobupBWwBsVMJhK%2Fuploads%2F9habwlXLqQ25fu6TUVM5%2Fhandling-principal-formats.jpeg?alt=media&amp;token=08fcc12c-ee57-48e9-9ab5-a18233773fe2" alt=""><figcaption></figcaption></figure></div>

***

### La conexión entre las direcciones de Stacks y Bitcoin

Stacks y su capa de liquidación L1, Bitcoin, utilizan un esquema similar de generación de direcciones basado en el formato P2PKH, por lo que una dirección de Bitcoin y una dirección de Stacks pueden compartir el mismo hash de clave pública. Si decodificas con base58check una dirección de bitcoin heredada, puedes revelar el hash de la clave pública, que luego puede usarse para generar su respectiva dirección de Stacks codificada en c32check.

De forma programática, también podrías usar un método llamado `b58ToC32`, de la `c32check` biblioteca JavaScript, que puede abstraer la conversión por ti.

<div data-with-frame="true"><figure><img src="https://3385590278-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FH74xqoobupBWwBsVMJhK%2Fuploads%2FVqWJul0cMmHoNGXiwsg3%2Fbitcoin-stacks-address-connection.jpeg?alt=media&amp;token=90fe1ed0-29dc-4a1f-a2d4-0a89d57acc23" alt=""><figcaption></figcaption></figure></div>

***

### Recursos adicionales

* \[[Blog de Hiro](https://www.hiro.so/blog/understanding-the-differences-between-bitcoin-address-formats-when-developing-your-app)] Entendiendo las diferencias entre los formatos de direcciones de Bitcoin
* \[[Blog de Hiro](https://www.hiro.so/blog/how-every-stacks-address-has-a-corresponding-bitcoin-address)] Cómo cada dirección de Stacks tiene una dirección de Bitcoin correspondiente
* \[[Blog de Hiro](https://www.hiro.so/blog/an-intro-to-web3-wallets-for-web3-founders)] Una introducción a las billeteras Web3 para fundadores de Web3
* \[[Blog de Hiro](https://www.hiro.so/blog/why-web3-needs-bitcoin-centric-wallet-standards)] Por qué Web3 necesita estándares de billeteras centrados en Bitcoin
* \[[Stacks YT](https://youtu.be/RvTuex1jbGY?si=KGEGESS3sr38G_Tj)] Cómo configurar tu primera billetera L2 de Bitcoin
* \[[SIP-005](https://github.com/stacksgov/sips/blob/main/sips/sip-005/sip-005-blocks-and-transactions.md)] Para el desglose técnico y el estándar sobre cómo se generan las billeteras/cuentas.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.stacks.co/learn/es/network-fundamentals/wallets-and-accounts.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
