UNPKG

nft-folder-blockchain-connector-besu

Version:

A NestJS-based blockchain connector that communicates with specific smart contracts from the NFT Folder project.

96 lines 4.95 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.EventService = void 0; const common_1 = require("@nestjs/common"); const blockchain_service_1 = require("../../shared/blockchain.service"); const configuration_service_1 = require("../../configuration/configuration.service"); const transfer_event_dto_1 = require("../dto/transfer-event.dto"); let EventService = class EventService { blockchainService; configurationService; tokenContract; constructor(blockchainService, configurationService) { this.blockchainService = blockchainService; this.configurationService = configurationService; this.tokenContract = this.blockchainService.getContractInstance(this.configurationService.getBlockchainConfiguration().tokenAddress, this.configurationService.getBlockchainConfiguration().tokenAbi); } async fetchTokenInformation(tokenId) { const minterAddress = await this.fetchMinterAddress(tokenId); const createdOn = await this.fetchCreatedOn(tokenId); const lastUpdatedOn = await this.fetchLastUpdatedOn(tokenId); return { minterAddress, createdOn, lastUpdatedOn }; } async fetchTransferEvents(tokenId) { const events = await this.getAllPastEvents('Transfer', tokenId); return Promise.all(events.map(async (event) => { return new transfer_event_dto_1.TransferEventDto(tokenId, `0x${event.topics[1].slice(26, 66)}`, `0x${event.topics[2].slice(26, 66)}`, await this.blockchainService.fetchTransactionTimestamp(event.transactionHash)); })); } async fetchMinterAddress(tokenId) { const events = await this.getAllPastEvents('Transfer', tokenId); return events.length === 0 ? null : events[0].args.to; } async fetchCreatedOn(tokenId) { const events = await this.getAllPastEvents('Transfer', tokenId); const transactionHash = events.length === 0 ? '' : events[0].transactionHash; return this.blockchainService.fetchTransactionTimestamp(transactionHash); } async fetchLastUpdatedOn(tokenId) { const eventInformation = await this.fetchEventInformationFromLastEvent(tokenId, 'TokenUpdate'); return await this.blockchainService.fetchTransactionTimestamp(eventInformation.transactionHash); } async getAllPastEvents(event, tokenId) { let filter; if (event === 'Transfer') { filter = this.tokenContract.filters.Transfer(null, null, tokenId); } if (event === 'TokenUpdate') { filter = this.tokenContract.filters.TokenUpdate(null, null, tokenId); } return (await this.tokenContract.queryFilter(filter)); } async fetchEventInformationFromLastEvent(tokenId, event) { const events = await this.getAllPastEvents(event, tokenId); return events.length === 0 ? { blockNumber: -1, transactionHash: '', } : { blockNumber: events[events.length - 1].blockNumber, transactionHash: events[events.length - 1].transactionHash, }; } decodeLogs(contractInterface, transactionReceipt, eventNames) { const decodedLogs = transactionReceipt?.logs ? transactionReceipt.logs .map((encodedLog) => { const decodedLog = contractInterface.parseLog(encodedLog); return decodedLog ? (eventNames.includes(decodedLog.name) ? decodedLog : null) : null; }) .filter((decodedLog) => { return decodedLog !== null && decodedLog !== undefined; }) : []; if (decodedLogs.length === 0) { throw new Error(`No event found in transaction receipt logs. Event names: ${eventNames.join(', ')}`); } return decodedLogs; } }; exports.EventService = EventService; exports.EventService = EventService = __decorate([ (0, common_1.Injectable)(), __metadata("design:paramtypes", [blockchain_service_1.BlockchainService, configuration_service_1.ConfigurationService]) ], EventService); //# sourceMappingURL=event.service.js.map