Saltar al contenido principal

Cuentas de Canal

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

Las transacciones de una cuenta siempre deben ser enviadas a la red en 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 estás enviando transacciones a alta velocidad, ya que pueden llegar a Stellar Core fuera de orden y luego rebotarán con un error de secuencia incorrecta.

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

Los canales aprovechan el hecho de que la cuenta de origen de una transacción puede ser diferente a la cuenta de origen de las operaciones dentro de la transacción. Con esta configuración, puedes hacer tantos canales como necesites para mantener tu tasa de transacción deseada.

Por supuesto, tendrás que firmar la transacción con ambas claves, la de la cuenta base y la de la cuenta de canal.

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