Crear una cuenta
_Before we get started with working with Stellar in code, consider going through the following examples using the Stellar Lab. El laboratorio te permite crear cuentas, financiar cuentas en la red de prueba de Stellar, construir transacciones, ejecutar cualquier operación e inspeccionar respuestas de Horizon a través del Explorador de Endpoints.
Las cuentas son un bloque de construcción fundamental de Stellar: sostienen todos tus saldos, te permiten enviar y recibir pagos, y te dejan hacer ofertas para comprar y vender activos. Dado que prácticamente todo en Stellar está de alguna manera relacionado con una cuenta, lo primero que generalmente necesitas hacer cuando comienzas a desarrollar es crear una. Este tutorial para principiantes te mostrará cómo hacerlo.
Crear un Keypair
Stellar utiliza criptografía de clave pública para garantizar que cada transacción sea segura: cada cuenta Stellar tiene un keypair 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. La clave secreta, sin embargo, es información privada que demuestra que eres el dueño —y te da acceso a— tu cuenta. Es como una contraseña, y nunca debes compartirla con nadie.
Antes de crear una cuenta, necesitas generar tu propio keypair:
- 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
Un keypair válido, sin embargo, no crea una cuenta: para evitar que las cuentas no utilizadas aumenten el ledger, Stellar requiere que las cuentas mantengan un saldo mínimo de 1 XLM antes de que realmente existan. Hasta que no obtenga un poco de financiamiento, tu keypair no justifica espacio en el ledger.
En la red pública, donde los usuarios reales realizan transacciones en vivo, tu siguiente paso sería adquirir XLM, lo que puedes hacer consultando nuestra sección sobre lumens. Because this tutorial runs on the test network, you can get 10,000 test XLM from Friendbot, which is a friendly account funding tool.
Para hacerlo, envía a Friendbot la clave pública que creaste. Él 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 mantienen.
- 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 concentrarte, puedes avanzar y construir una billetera o emitir un activo de la red Stellar.
En los ejemplos de código anteriores, se omitió la verificación de errores adecuada por brevedad. Sin embargo, siempre debes validar tus resultados, ya que hay muchas formas en que las solicitudes pueden fallar. Deberías consultar la guía sobre Manejo de Errores para obtener consejos sobre estrategias de manejo de errores.
Guías en esta categoría:
📄️ Crear una cuenta
Crear y financiar una cuenta Stellar
📄️ Enviar y recibir pagos
Aprender a enviar pagos y vigilar los pagos recibidos en la red Stellar
📄️ Seguir pagos recibidos
Observa los pagos entrantes utilizando Horizon
📄️ Automatizar los datos de restablecimiento de Testnet y Futurenet
Aprende a automatizar los datos de restablecimiento de Testnet y Futurenet en Stellar