Crear una cuenta
Antes de comenzar a trabajar con Stellar en código, considera revisar los siguientes ejemplos usando el Stellar Lab. El lab te permite crear cuentas, financiar cuentas en la red de prueba de Stellar, construir transacciones, ejecutar cualquier operación e inspeccionar respuestas de Horizon mediante el Explorador de Endpoints.
Las cuentas son un componente fundamental de Stellar: contienen todos tus saldos, te permiten enviar y recibir pagos, y hacer ofertas para comprar y vender activos. Dado que prácticamente todo en Stellar está vinculado a una cuenta, lo primero que generalmente necesitas hacer al comenzar a desarrollar es crear una. Este tutorial para principiantes te mostrará cómo hacerlo.
Crear un par de llaves
Stellar utiliza criptografía de clave pública para garantizar que cada transacción sea segura: cada cuenta Stellar tiene un par de llaves que consiste en una clave pública y una clave secreta. La clave pública siempre es segura para compartir: otras personas la necesitan para identificar tu cuenta y verificar que autorizaste una transacción. Es como una dirección de correo electrónico. Sin embargo, la clave secreta es información privada que prueba que eres el dueño y te da acceso a tu cuenta. Es como una contraseña, y nunca deberías compartirla con nadie.
Antes de crear una cuenta, necesitas generar tu propio par de llaves:
- JavaScript
- Java
- Go
- Python
// create a completely new and unique pair of keys
// see more about KeyPair objects: https://stellar.github.io/js-stellar-sdk/Keypair.html
const pair = StellarSdk.Keypair.random();
pair.secret();
// SAV76USXIJOBMEQXPANUOQM6F5LIOTLPDIDVRJBFFE2MDJXG24TAPUU7
pair.publicKey();
// GCFXHS4GXL6BVUCXBWXGTITROWLVYXQKQLF4YH5O5JT3YZXCYPAFBJZB
// create a completely new and unique pair of keys.
// see more about KeyPair objects: https://stellar.github.io/java-stellar-sdk/org/stellar/sdk/KeyPair.html
import org.stellar.sdk.KeyPair;
KeyPair pair = KeyPair.random();
System.out.println(new String(pair.getSecretSeed()));
// SAV76USXIJOBMEQXPANUOQM6F5LIOTLPDIDVRJBFFE2MDJXG24TAPUU7
System.out.println(pair.getAccountId());
// GCFXHS4GXL6BVUCXBWXGTITROWLVYXQKQLF4YH5O5JT3YZXCYPAFBJZB
package main
import (
"log"
"github.com/stellar/go/keypair"
)
func main() {
pair, err := keypair.Random()
if err != nil {
log.Fatal(err)
}
log.Println(pair.Seed())
// SAV76USXIJOBMEQXPANUOQM6F5LIOTLPDIDVRJBFFE2MDJXG24TAPUU7
log.Println(pair.Address())
// GCFXHS4GXL6BVUCXBWXGTITROWLVYXQKQLF4YH5O5JT3YZXCYPAFBJZB
}
# stellar-sdk >= 2.0.0 required
# create a completely new and unique pair of keys
# see more about KeyPair objects: https://stellar-sdk.readthedocs.io/en/latest/api.html#keypair
from stellar_sdk import Keypair
pair = Keypair.random()
print(f"Secret: {pair.secret}")
# Secret: SCMDRX7A7OVRPAGXLUVRNIYTWBLCS54OV7UH2TF5URSG4B4JQMUADCYU
print(f"Public Key: {pair.public_key}")
# Public Key: GAG7SXULMNWCW6LX42JKZOZRA2JJXQT23LYY32OXA6XECUQG7RZTQJHO
Crear cuenta
Sin embargo, un par de llaves válido no crea una cuenta: para evitar que cuentas sin usar inflen el ledger, Stellar exige que las cuentas mantengan un saldo mínimo de 1 XLM antes de que realmente existan. Hasta que reciba un poco de financiamiento, tu par de llaves no merece espacio en el ledger.
En la red pública, donde los usuarios reales hacen transacciones reales, el siguiente paso sería adquirir XLM, lo cual puedes hacer consultando nuestra sección sobre lumens. Como este tutorial se ejecuta en la red de prueba, puedes obtener 10,000 XLM de prueba de Friendbot, una herramienta amigable para financiar cuentas.
Para hacerlo, envía a Friendbot la clave pública que creaste. Creará y financiará una nueva cuenta usando esa clave pública como el ID de la cuenta.
- JavaScript
- Java
- Go
- Python
// The SDK does not have tools for creating test accounts, so you'll have to
// make your own HTTP request.
// if you're trying this on Node, install the `node-fetch` library and
// uncomment the next line:
// const fetch = require('node-fetch');
(async function main() {
try {
const response = await fetch(
`https://friendbot.stellar.org?addr=${encodeURIComponent(
pair.publicKey(),
)}`,
);
const responseJSON = await response.json();
console.log("SUCCESS! You have a new account :)\n", responseJSON);
} catch (e) {
console.error("ERROR!", e);
}
// After you've got your test lumens from friendbot, we can also use that account to create a new account on the ledger.
try {
const server = new StellarSdk.Horizon.Server(
"https://horizon-testnet.stellar.org",
);
var parentAccount = await server.loadAccount(pair.publicKey()); //make sure the parent account exists on ledger
var childAccount = StellarSdk.Keypair.random(); //generate a random account to create
//create a transacion object.
var createAccountTx = new StellarSdk.TransactionBuilder(parentAccount, {
fee: StellarSdk.BASE_FEE,
networkPassphrase: StellarSdk.Networks.TESTNET,
});
//add the create account operation to the createAccountTx transaction.
createAccountTx = await createAccountTx
.addOperation(
StellarSdk.Operation.createAccount({
destination: childAccount.publicKey(),
startingBalance: "5",
}),
)
.setTimeout(180)
.build();
//sign the transaction with the account that was created from friendbot.
await createAccountTx.sign(pair);
//submit the transaction
let txResponse = await server
.submitTransaction(createAccountTx)
// some simple error handling
.catch(function (error) {
console.log("there was an error");
console.log(error.response);
console.log(error.status);
console.log(error.extras);
return error;
});
console.log(txResponse);
console.log("Created the new account", childAccount.publicKey());
} catch (e) {
console.error("ERROR!", e);
}
})();
// The SDK does not have tools for creating test accounts, so you'll have to
// make your own HTTP request.
import java.net.*;
import java.io.*;
import java.util.*;
String friendbotUrl = String.format(
"https://friendbot.stellar.org/?addr=%s",
pair.getAccountId());
InputStream response = new URL(friendbotUrl).openStream();
String body = new Scanner(response, "UTF-8").useDelimiter("\\A").next();
System.out.println("SUCCESS! You have a new account :)\n" + body);
package main
import (
"net/http"
"io/ioutil"
"log"
"fmt"
)
func main() {
// pair is the pair that was generated from previous example, or create a pair based on
// existing keys.
address := pair.Address()
resp, err := http.Get("https://friendbot.stellar.org/?addr=" + address)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(body))
}
# The SDK does not have tools for creating test accounts, so you'll have to
# make your own HTTP request.
# if you're trying this on Python, install the `requests` library.
import requests
public_key = "GD4NB2FLQAN5JO7PKPGZJMNBDYQXVSNVC7DEIZMOL5WSNSBLEBUTEF5Q"
response = requests.get(f"https://friendbot.stellar.org?addr={public_key}")
if response.status_code == 200:
print(f"SUCCESS! You have a new account :)\n{response.text}")
else:
print(f"ERROR! Response: \n{response.text}")
Ahora, para el último paso: obtener los detalles de la cuenta y comprobar su saldo. Las cuentas pueden tener múltiples saldos: uno para cada tipo de moneda que poseen.
- JavaScript
- Java
- Go
- Python
const server = new StellarSdk.Horizon.Server(
"https://horizon-testnet.stellar.org",
);
// the JS SDK uses promises for most actions, such as retrieving an account
const account = await server.loadAccount(pair.publicKey());
console.log("Balances for account: " + pair.publicKey());
account.balances.forEach(function (balance) {
console.log("Type:", balance.asset_type, ", Balance:", balance.balance);
});
import org.stellar.sdk.Server;
import org.stellar.sdk.responses.AccountResponse;
Server server = new Server("https://horizon-testnet.stellar.org");
AccountResponse account = server.accounts().account(pair.getAccountId());
System.out.println("Balances for account " + pair.getAccountId());
for (AccountResponse.Balance balance : account.getBalances()) {
System.out.printf(
"Type: %s, Code: %s, Balance: %s%n",
balance.getAssetType(),
balance.getAssetCode(),
balance.getBalance()
);
}
package main
import (
"log"
"github.com/stellar/go/clients/horizonclient"
)
func main() {
// Replace this with the output from earlier, or use pair.Address()
address := "GCFXHS4GXL6BVUCXBWXGTITROWLVYXQKQLF4YH5O5JT3YZXCYPAFBJZB"
request := horizonclient.AccountRequest{AccountID: address}
account, err := horizonclient.DefaultTestNetClient.AccountDetail(request)
if err != nil {
log.Fatal(err)
}
log.Println("Balances for account:", address)
for _, balance := range account.Balances {
log.Println(balance)
}
}
from stellar_sdk import Server
server = Server("https://horizon-testnet.stellar.org")
public_key = "GD4NB2FLQAN5JO7PKPGZJMNBDYQXVSNVC7DEIZMOL5WSNSBLEBUTEF5Q"
account = server.accounts().account_id(public_key).call()
for balance in account['balances']:
print(f"Type: {balance['asset_type']}, Balance: {balance['balance']}")
Ahora que tienes una cuenta, puedes comenzar a enviar y recibir pagos, o, si estás listo para profundizar, puedes avanzar y crear una billetera o emitir un activo en la red Stellar.
En los ejemplos de código anteriores, la verificación adecuada de errores fue omitida por brevedad. Sin embargo, debes siempre validar tus resultados, ya que hay muchas maneras en que las solicitudes pueden fallar. Deberías consultar la guía sobre Manejo de errores para obtener consejos sobre estrategias de gestión de errores.
Guías en esta categoría:
📄️ Crear una cuenta
Aprende sobre cómo crear cuentas Stellar, pares de llaves, financiamiento y conceptos básicos de las cuentas.
📄️ Enviar y recibir pagos
Aprende a enviar pagos y estar atento a los pagos recibidos en la red Stellar.
📄️ Cuentas canalizadas
Crea cuentas canalizadas para enviar transacciones a la red a una alta velocidad.
📄️ Saldos reclamables
Divide un pago en dos partes creando un saldo reclamable.
📄️ Recuperaciones
Usa las recuperaciones para quemar una cantidad específica de un activo habilitado para recuperación desde una trustline o un saldo reclamable.
📄️ Transacciones de suplemento de tarifa
Usa transacciones fee-bump para pagar las comisiones de transacción en nombre de otra cuenta sin volver a firmar la transacción.
📄️ Reservas patrocinadas
Utiliza las reservas patrocinadas para pagar las reservas base en nombre de otra cuenta.
📄️ Pagos con rutas
Enviar un pago donde el activo recibido sea diferente del activo enviado.
📄️ Cuentas agrupadas: cuentas muxed y memos
Usa cuentas muxed para diferenciar entre cuentas individuales dentro de una cuenta agrupada.
📄️ Instalar y desplegar un contrato inteligente con código
Instalar y desplegar un contrato inteligente con código.
📄️ Instalar WebAssembly (Wasm) bytecode usando código
Instala el Wasm del contrato usando js-stellar-sdk.
📄️ Invocar una función de contrato en una transacción Stellar utilizando SDKs
Usa el Stellar SDK para crear, simular y ensamblar una transacción.
📄️ guía del método RPC simulateTransaction
Guía de ejemplos y tutoriales de simulateTransaction.
📄️ Enviar una transacción a Stellar RPC utilizando el SDK de JavaScript
Utiliza un mecanismo de repetición para enviar una transacción al RPC.