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 }