Seguir pagos recibidos
Este tutorial muestra lo fácil que es usar Horizon para observar los pagos entrantes en una cuenta utilizando JavaScript y EventSource
. Evitaremos usar js-stellar-sdk
, la biblioteca de ayuda de alto nivel, para mostrar que es posible que realices esta tarea por tu cuenta con cualquier lenguaje de programación que desees usar.
Este tutorial asume que tú:
- Tienes node.js instalado localmente en tu máquina.
- Tienes curl instalado localmente en tu máquina.
- Estás ejecutando en Linux, macOS o cualquier otro sistema que tenga acceso a un shell similar a bash.
- Estás familiarizado con iniciar y ejecutar comandos en un terminal.
En este tutorial aprenderemos:
- Cómo crear una nueva cuenta.
- Cómo financiar tu cuenta usando friendbot.
- Cómo seguir los pagos a tu cuenta usando curl y EventSource.
Esqueleto del proyecto
Comencemos construyendo el esqueleto de nuestro proyecto:
- bash
$ mkdir follow_tutorial
$ cd follow_tutorial
$ npm install --save stellar-base
$ npm install --save eventsource
Esto debería haber creado un package.json
en el directorio follow_tutorial
. Puedes verificar que todo salió bien ejecutando el siguiente comando:
- bash
$ node -e "require('stellar-base')"
Todo fue exitoso si no se generó salida del comando anterior. Ahora escribamos un script para crear una nueva cuenta.
Creando una cuenta
Crea un nuevo archivo llamado make_account.js
y pega el siguiente texto en él:
- JavaScript
var Keypair = require("stellar-base").Keypair;
var newAccount = Keypair.random();
console.log("New key pair created!");
console.log(" Account ID: " + newAccount.publicKey());
console.log(" Secret: " + newAccount.secret());
Guarda el archivo y ejecútalo:
- bash
$ node make_account.js
New key pair created!
Account ID: GB7JFK56QXQ4DVJRNPDBXABNG3IVKIXWWJJRJICHRU22Z5R5PI65GAK3
Secret: SCU36VV2OYTUMDSSU4EIVX4UUHY3XC7N44VL4IJ26IOG6HVNC7DY5UJO
$
Antes de que nuestra cuenta pueda hacer nada, debe ser financiada. ¡De hecho, antes de que una cuenta se financie, no existe realmente!
Financiando tu cuenta
La red de prueba de Stellar proporciona el Friendbot, una herramienta que los desarrolladores pueden usar para obtener testnet lumens para propósitos de prueba. Para financiar tu cuenta, simplemente ejecuta el siguiente comando curl:
- bash
$ curl "https://friendbot.stellar.org/?addr=GB7JFK56QXQ4DVJRNPDBXABNG3IVKIXWWJJRJICHRU22Z5R5PI65GAK3"
No olvides reemplazar el ID de cuenta anterior con el tuyo. Si la solicitud tiene éxito, deberías ver una respuesta como:
- JSON
{
"hash": "ed9e96e136915103f5d8978cbb2036628e811f2c59c4c3d88534444cf504e360",
"result": "received",
"submission_result": "000000000000000a0000000000000001000000000000000000000000"
}
Después de unos segundos, la red Stellar llevará a cabo un consenso, cerrará el ledger y tu cuenta habrá sido creada. A continuación, escribiremos un comando que esté atento a los nuevos pagos a tu cuenta y de salida un mensaje en el terminal.
Siguiendo pagos usando curl
Para seguir los nuevos pagos conectados a tu cuenta, simplemente necesitas enviar el encabezado Accept: text/event-stream
al endpoint /payments.
- bash
$ curl -H "Accept: text/event-stream" "https://horizon-testnet.stellar.org/accounts/GB7JFK56QXQ4DVJRNPDBXABNG3IVKIXWWJJRJICHRU22Z5R5PI65GAK3/payments"
Como resultado, verás algo como:
- Ejemplo
retry: 1000
event: open
data: "hello"
id: 713226564145153
data: {"_links":{"effects":{"href":"/operations/713226564145153/effects/{?cursor,limit,order}","templated":true},
"precedes":{"href":"/operations?cursor=713226564145153\u0026order=asc"},
"self":{"href":"/operations/713226564145153"},
"succeeds":{"href":"/operations?cursor=713226564145153\u0026order=desc"},
"transactions":{"href":"/transactions/713226564145152"}},
"account":"GB7JFK56QXQ4DVJRNPDBXABNG3IVKIXWWJJRJICHRU22Z5R5PI65GAK3",
"funder":"GBS43BF24ENNS3KPACUZVKK2VYPOZVBQO2CISGZ777RYGOPYC2FT6S3K",
"id":713226564145153,
"paging_token":"713226564145153",
"starting_balance":"10000",
"type_i":0,
"type":"create_account"}
Cada vez que recibas un nuevo pago, obtendrás una nueva fila de datos. Los pagos no son el único endpoint que admite streaming. También puedes transmitir transacciones /transactions y operaciones /operations.
Siguiendo pagos usando EventStream
Advertencia! El objeto
EventSource
no se reconecta para ciertos tipos de error, por lo que puede dejar de funcionar. Si necesitas una conexión de streaming fiable, por favor utiliza nuestro SDK.
Otra forma de seguir pagos es escribiendo un simple script de JS que transmitirá pagos e imprimirlos en la consola. Crea un archivo stream_payments.js
y pega el siguiente código en él:
- JavaScript
var EventSource = require("eventsource");
var es = new EventSource(
"https://horizon-testnet.stellar.org/accounts/GB7JFK56QXQ4DVJRNPDBXABNG3IVKIXWWJJRJICHRU22Z5R5PI65GAK3/payments",
);
es.onmessage = function (message) {
var result = message.data ? JSON.parse(message.data) : message;
console.log("New payment:");
console.log(result);
};
es.onerror = function (error) {
console.log("An error occurred!");
};
Ahora, ejecuta nuestro script: node stream_payments.js
. Deberías ver la siguiente salida:
- bash
New payment:
{ _links:
{ effects:
{ href: '/operations/713226564145153/effects/{?cursor,limit,order}',
templated: true },
precedes: { href: '/operations?cursor=713226564145153&order=asc' },
self: { href: '/operations/713226564145153' },
succeeds: { href: '/operations?cursor=713226564145153&order=desc' },
transactions: { href: '/transactions/713226564145152' } },
account: 'GB7JFK56QXQ4DVJRNPDBXABNG3IVKIXWWJJRJICHRU22Z5R5PI65GAK3',
funder: 'GBS43BF24ENNS3KPACUZVKK2VYPOZVBQO2CISGZ777RYGOPYC2FT6S3K',
id: 713226564145153,
paging_token: '713226564145153',
starting_balance: '10000',
type_i: 0,
type: 'create_account' }
Probándolo
Ahora sabemos cómo obtener un stream de transacciones a una cuenta. Verifiquemos si nuestra solución realmente funciona y si aparecen nuevos pagos. Observemos mientras enviamos un pago (create_account
operation) desde nuestra cuenta a otra cuenta.
Usamos la operación create_account
porque estamos enviando un pago a una nueva cuenta no financiada. Si estuviéramos enviando un pago a una cuenta que ya está financiada, usaríamos la operación payment
.
Primero, verifiquemos el número de secuencia de nuestra cuenta para que podamos crear una transacción de pago. Para hacerlo, enviamos una solicitud a horizon:
- bash
$ curl "https://horizon-testnet.stellar.org/accounts/GB7JFK56QXQ4DVJRNPDBXABNG3IVKIXWWJJRJICHRU22Z5R5PI65GAK3"
El número de secuencia se puede encontrar bajo el campo sequence
. Para nuestro ejemplo, el número de secuencia actual es 713226564141056
. Guarda tu valor en algún lugar.
Ahora, crea el archivo make_payment.js
y pega el siguiente código en él, reemplazando el número de secuencia según corresponda:
- JavaScript
var StellarBase = require("stellar-base");
var StellarSdk = require("stellar-sdk");
var keypair = StellarBase.Keypair.fromSecret(
"SCU36VV2OYTUMDSSU4EIVX4UUHY3XC7N44VL4IJ26IOG6HVNC7DY5UJO",
);
var account = new StellarBase.Account(keypair.publicKey(), "713226564141056");
var amount = "100";
var transaction = new StellarSdk.TransactionBuilder(account, {
networkPassphrase: StellarBase.Networks.TESTNET,
fee: StellarSdk.BASE_FEE,
})
.addOperation(
StellarBase.Operation.createAccount({
destination: StellarBase.Keypair.random().publicKey(),
startingBalance: amount,
}),
)
.setTimeout(180)
.build();
transaction.sign(keypair);
console.log(transaction.toEnvelope().toXDR().toString("base64"));
Después de ejecutar este script, deberías ver un blob de transacción firmado. Para enviar esta transacción, la enviamos a Horizon o Stellar-Core. Pero antes de hacerlo, abramos una nueva consola y comencemos nuestro script anterior con node stream_payments.js
.
Ahora, para enviar una transacción, solo usa Horizon:
- bash
curl -H "Content-Type: application/json" -X POST -d '{"tx":"AAAAAgAAAAB+kqu+heHB1TFrxhuALTbRVSL2slMUoEeNNaz2PXo90wAAAGQAAoitAAAAAQAAAAEAAAAAAAAAAAAAAABgJHaDAAAAAAAAAAEAAAAAAAAAAAAAAAByS4gefO1iu/ZfYlr+PMA2AZsHJmSK/4NActJ1Oa1BIgAAAAA7msoAAAAAAAAAAAE9ej3TAAAAQPo1YHJMpdWKatEQxj7DqP1rrR6pA+OjK9q3WcU/sBwvKk6GhpdwA3gkUDrkREU0cFQSNKwugNFkGkR0zFmROgw="}' "https://horizon-testnet.stellar.org/transactions"
Deberías ver un nuevo pago en una ventana que ejecuta el script stream_payments.js
.
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