/ src / eventHandlers / SplitEventHandler.ts
SplitEventHandler.ts
 1  import EventHandlerBase from '../events/EventHandlerBase';
 2  import ScopedLogger from '../core/ScopedLogger';
 3  import { convertToAccountId } from '../utils/accountIdUtils';
 4  import type EventHandlerRequest from '../events/EventHandlerRequest';
 5  import { SplitEventModel } from '../models';
 6  import { dbConnection } from '../db/database';
 7  import type { SplitEvent } from '../../contracts/CURRENT_NETWORK/Drips';
 8  import { toAddress } from '../utils/ethereumAddressUtils';
 9  import { toBigIntString } from '../utils/bigintUtils';
10  
11  export default class SplitEventHandler extends EventHandlerBase<'Split(uint256,uint256,address,uint128)'> {
12    public eventSignatures = ['Split(uint256,uint256,address,uint128)' as const];
13  
14    protected async _handle(
15      request: EventHandlerRequest<'Split(uint256,uint256,address,uint128)'>,
16    ): Promise<void> {
17      const {
18        id: requestId,
19        event: { args, logIndex, blockNumber, blockTimestamp, transactionHash },
20      } = request;
21  
22      const [rawAccountId, rawReceiver, rawErc20, rawAmt] =
23        args as SplitEvent.OutputTuple;
24  
25      const accountId = convertToAccountId(rawAccountId);
26      const receiver = convertToAccountId(rawReceiver);
27      const erc20 = toAddress(rawErc20);
28      const amt = toBigIntString(rawAmt.toString());
29  
30      const scopedLogger = new ScopedLogger(this.name, requestId);
31  
32      scopedLogger.log(
33        `📥 ${this.name} is processing the following ${request.event.eventSignature}:
34        \r\t - accountId:   ${accountId}
35        \r\t - receiver:    ${rawReceiver}
36        \r\t - erc20:       ${rawErc20}
37        \r\t - amt:         ${rawAmt}
38        \r\t - logIndex:    ${logIndex}
39        \r\t - tx hash:     ${transactionHash}`,
40      );
41  
42      await dbConnection.transaction(async (transaction) => {
43        const splitEvent = await SplitEventModel.create(
44          {
45            accountId,
46            receiver,
47            erc20,
48            amt,
49            logIndex,
50            blockNumber,
51            blockTimestamp,
52            transactionHash,
53          },
54          { transaction },
55        );
56  
57        scopedLogger.bufferCreation({
58          input: splitEvent,
59          type: SplitEventModel,
60          id: `${splitEvent.transactionHash}-${splitEvent.logIndex}`,
61        });
62  
63        scopedLogger.flush();
64      });
65    }
66  }