cyb/src/services/lcd/utils/mapping.ts

import { fromBase64 } from '@cosmjs/encoding';
import { MsgMultiSend, MsgSend } from 'cosmjs-types/cosmos/bank/v1beta1/tx';
import { Tx } from 'cosmjs-types/cosmos/tx/v1beta1/tx';
import {
  MSG_MULTI_SEND_TRANSACTION_TYPE,
  MSG_SEND_TRANSACTION_TYPE,
} from 'src/services/backend/services/indexer/types';
import { TransactionDto } from 'src/services/CozoDb/types/dto';
import { NeuronAddress } from 'src/types/base';
import { getNowUtcNumber } from 'src/utils/date';

// eslint-disable-next-line import/no-unused-modules
export const extractTxData = (data: string) => {
  const result = Tx.decode(fromBase64(data));
  const memo = result.body?.memo;
  const messages = result.body?.messages
    .map((message) => {
      const msgType = message.typeUrl.slice(1);
      if (msgType === MSG_SEND_TRANSACTION_TYPE) {
        return MsgSend.decode(message.value);
      }

      if (msgType === MSG_MULTI_SEND_TRANSACTION_TYPE) {
        return MsgMultiSend.decode(message.value);
      }
      return undefined;
    })
    .filter((message) => message !== undefined);

  return { memo, messages };
};

// eslint-disable-next-line import/no-unused-modules
export const mapWebsocketTxToTransactions = (neuron: NeuronAddress, result: any) => {
  const { data, events } = result;

  const hash = events['tx.hash'][0];
  const transactionType = events['message.action'][0].slice(1);
  const timestamp = getNowUtcNumber();
  const blockHeight = events['tx.height'][0];

  const { memo = '', messages } = extractTxData(data.value.TxResult.tx);

  const transactions: TransactionDto[] = [];
  messages!.forEach((message, index) => {
    transactions.push({
      hash,
      index,
      type: transactionType,
      timestamp,
      success: true,
      value: message!,
      memo,
      neuron,
      blockHeight,
    });
  });

  return transactions;
};

Synonyms

pussy-ts/src/services/CozoDb/mapping.ts
cyb/src/services/CozoDb/mapping.ts
pussy-ts/src/services/blockchain/utils/mapping.ts
cyb/src/containers/txs/api/mapping.ts

Neighbours