Saltar al contenido principal

Cuentas canalizadas

Las cuentas canalizadas proporcionan un método para enviar transacciones a la red a una alta velocidad.

Las transacciones de una cuenta siempre deben enviarse a la red con incrementos de un número de secuencia (a menos que se establezcan condiciones previas de número de secuencia mínimo). Esto puede causar problemas si envías transacciones a una alta velocidad, ya que pueden llegar a Stellar Core fuera de orden y serán rechazadas con un error de secuencia incorrecta.

Para evitar esto, puedes crear cuentas canalizadas separadas que se puedan usar como cuenta origen para la transacción y usar la cuenta que posee los activos como cuenta base o como cuenta origen para las operaciones individuales dentro de la transacción. En este escenario, los activos saldrán de la cuenta base, y el número de secuencia y las comisiones serán consumidos por la cuenta canalizada.

Los canales aprovechan el hecho de que la cuenta origen de una transacción puede ser diferente de la cuenta origen de las operaciones dentro de la transacción. Con esta configuración, puedes crear tantas cuentas canalizadas como necesites para mantener la tasa de transacciones deseada.

Por supuesto, tendrás que firmar la transacción tanto con la keypair de la cuenta base como con la keypair de la cuenta canalizada.

Por ejemplo:

// channelAccounts[] is an array of accountIDs, one for each channel
// channelKeys[] is an array of secret keys, one for each channel
// channelIndex is the channel you want to send this transaction over

// create payment from baseAccount to customerAddress
var transaction = new StellarSdk.TransactionBuilder(
channelAccounts[channelIndex],
{
fee: StellarSdk.BASE_FEE,
networkPassphrase: StellarSdk.Networks.TESTNET,
},
)
.addOperation(
StellarSdk.Operation.payment({
source: baseAccount.address(),
destination: customerAddress,
asset: StellarSdk.Asset.native(),
amount: amountToSend,
}),
)
// Wait a maximum of three minutes for the transaction
.setTimeout(180)
.build();

transaction.sign(baseAccountKey); // base account must sign to approve the payment
transaction.sign(channelKeys[channelIndex]); // channel must sign to approve it being the source of the transaction

Guías en esta categoría: