Here is my service
import { ConflictException, Injectable, UnauthorizedException } from '@nestjs/common';
import { verifyMessage } from 'viem';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { IProposal } from '../proposal/interfaces/proposal.interface';
import { Proposal } from '../proposal/schemas/proposal.schema';
import { Deanonymization } from '../deanonymization/schemas/deanonymization.schema';
import { IDeanonymization } from '../deanonymization/interfaces/deanonymization.interface';
import { ConfigService } from '@nestjs/config';
declare let process: {
env: {
REVOKER_ADDRESS: `0x${string}`;
};
};
@Injectable()
export class ProposalService {
constructor(
@InjectModel(Proposal.name)
private readonly proposal: Model<IProposal>,
@InjectModel(Deanonymization.name)
private readonly deanonymization: Model<IDeanonymization>,
private configService: ConfigService,
) {}
async createProposal(
txHash: `0x${string}`,
title: string,
description: string,
signature: `0x${string}`,
) {
let proposal = await this.proposal.findOne({ txHash: txHash.toLowerCase() });
const revokerAddress = this.configService.get<`0x${string}`>('REVOKER_ADDRESS');
const isValid = await verifyMessage({
address: revokerAddress,
message: {raw: txHash},
signature: signature,
});
console.log(isValid)
if (!isValid) {
throw new UnauthorizedException('Invalid signature');
}
proposal = new this.proposal({
txHash: txHash.toLowerCase(),
title,
description,
signature,
});
const numContributionsPerGuardian = 2;
const deanon = new this.deanonymization({
txHash,
numContributionsPerGuardian,
});
await proposal.save();
await deanon.save();
return proposal;
}
}