diff --git a/packages/rln/src/contract/rln_base_contract.ts b/packages/rln/src/contract/rln_base_contract.ts index 929c9acbba..17065d2a26 100644 --- a/packages/rln/src/contract/rln_base_contract.ts +++ b/packages/rln/src/contract/rln_base_contract.ts @@ -1,5 +1,5 @@ import { Logger } from "@waku/utils"; -import { ethers } from "ethers"; +import { Contract, ethers } from "ethers"; import { IdentityCredential } from "../identity.js"; import { DecryptedCredentials } from "../keystore/types.js"; @@ -719,6 +719,19 @@ export class RLNBaseContract { } } + public async getMembershipStatus( + idCommitment: bigint + ): Promise<"expired" | "grace" | "active"> { + const [isExpired, isInGrace] = await Promise.all([ + this.contract.isExpired(idCommitment), + this.contract.isInGracePeriod(idCommitment) + ]); + + if (isExpired) return "expired"; + if (isInGrace) return "grace"; + return "active"; + } + /** * Checks if a membership is expired for the given idCommitment * @param idCommitmentBigInt The idCommitment as bigint