Saltar al contenido principal

Observar el estado de Transacciones

Las transacciones pueden pasar por diferentes estados. Desde que son enviadas a su ejecucion hasta que finalizan exitosamente o con errores. El sdk permite ver o reaccionar a los cambios en el estado de una transaccion ya sea local o en el servidor.

Observar con eventos

El sdk posse en su modulo de transacciones una api de utilidad que tiene el metodo observeSaga. Este metodo recibe el identificador de la transaccion y devolvera un observable de CommandEvent.

const erc20Api = sdk.transactions.erc20Api
const transaction = await erc20Api.transfer(payload, caller);

if(transaction.isLeft()) throw new Error(transaction.left()?.message);

const utilsApi = sdk.transactions.blkUtilsApi;
const obs$ = blkUtilsApi.observeSaga(transaction.right());

obs$.subscribe((event) => {
console.log(event.name); // nombre del evento
console.log(event.id); // id del evento
console.log(event.payload); // payload del evento
})
Command Event

Es una clase que hereda de DomainEvent y en su propiedad payload encontramos los datos del evento que cumplen con la interfaz CommandEventPayload.

interface CommandEventPayload {
id: string;
name: string;
status: 'success' | 'failed' | 'in_progres';
progress: number;
error?: string;
hash?: string;
}

Observar con adaptador

El sdk posee la interfaz ITransaction si escuchar eventos no es su caso de uso. Esta funcionalidad se mantuvo para compatibilidad con applicaciones construidas anteriormente y es de utilidad para acelerar la observancia del estado de la transaccion. Esto nos devolvera una instancia de TransacctionObserver, que es una clase de utilida para manejar las reacciones a estados especificos de la transaccion.

const erc20Api = sdk.transactions.erc20Api
const transaction = erc20Api.transfer(payload, caller); // No usamos el await

const observer = sdk.transactions.adapterTx(transaction);

observer
.on(TransactionStatus.Pending, (tx) => {
console.log(`Transaction ${tx.id} is pending`);
})
.on(TransactionStatus.Success, (tx) => {
console.log(`Transaction ${tx.id} is successful`);
})
.on(TransactionStatus.Fail, (tx) => {
console.log(`Transaction ${tx.id} is failed`);
})
.listen();

ITransaction

Es una interfaz con las siguientes propiedades

export interface ITransaction {
id: UUID;
method: ITransactionMethod;
params: TransactionComand;
status: TransactionStatus;
hash?: TransactionHash;
info?: string;
error?: string;
}
caution

En este modo de uso para transacciones adaptadas a la interfaz ITransaction la propiedad params no estara disponible y sera un objeto vacio.