From 55dca38dd4bc9e3a1ef10a1db094258c7a55ae65 Mon Sep 17 00:00:00 2001 From: weboko Date: Tue, 17 Jan 2023 00:49:54 +0100 Subject: [PATCH] move to getter for members, add init method --- example/index.js | 9 +-------- src/index.ts | 8 ++++++-- src/rln_contract.ts | 28 +++++++++++++++++++++------- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/example/index.js b/example/index.js index 0a64213..1e68718 100644 --- a/example/index.js +++ b/example/index.js @@ -48,14 +48,7 @@ rln.create().then(async rlnInstance => { const signature = await signer.signMessage(rln.DEFAULT_SIGNATURE_MESSAGE); console.log(`Got signature: ${signature}`); - const contract = new rln.RLNContract(rln.GOERLI_CONTRACT.address, signer); - - console.log("Fetching members from Contract"); - await contract.fetchMembers(rlnInstance, 8261478); - console.log(`Fetched members are ${contract.getMembers()}`); - - contract.subscribeToMembers(rlnInstance); - console.log("Subscribed to the contract for new members"); + const contract = await rln.RLNContract.init(rlnInstance, {address: rln.GOERLI_CONTRACT.address, provider: signer }); const event = await contract.registerMember(rlnInstance, signature); console.log(`Registered as member with ${event}`); diff --git a/src/index.ts b/src/index.ts index 8cee464..de31be9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,9 @@ import { RLNDecoder, RLNEncoder } from "./codec.js"; -import { DEFAULT_SIGNATURE_MESSAGE, DEV_CONTRACT, RLN_ABI } from "./const.js"; +import { + DEFAULT_SIGNATURE_MESSAGE, + GOERLI_CONTRACT, + RLN_ABI, +} from "./const.js"; import { Proof, RLNInstance } from "./rln.js"; import { MembershipKey } from "./rln.js"; import { RLNContract } from "./rln_contract.js"; @@ -21,6 +25,6 @@ export { RLNDecoder, RLNContract, RLN_ABI, - DEV_CONTRACT, + GOERLI_CONTRACT, DEFAULT_SIGNATURE_MESSAGE, }; diff --git a/src/rln_contract.ts b/src/rln_contract.ts index f6ffb12..6f0e717 100644 --- a/src/rln_contract.ts +++ b/src/rln_contract.ts @@ -8,16 +8,30 @@ type Member = { index: number; }; +type ContractOptions = { + address: string; + provider: ethers.Signer | ethers.providers.Provider; +}; + export class RLNContract { private _contract: ethers.Contract; private membersFilter: ethers.EventFilter; - private members: Member[] = []; + private _members: Member[] = []; - constructor( - address: string, - provider: ethers.Signer | ethers.providers.Provider - ) { + public static async init( + rlnInstance: RLNInstance, + options: ContractOptions + ): Promise { + const rlnContract = new RLNContract(options); + + await rlnContract.fetchMembers(rlnInstance); + rlnContract.subscribeToMembers(rlnInstance); + + return rlnContract; + } + + constructor({ address, provider }: ContractOptions) { this._contract = new ethers.Contract(address, RLN_ABI, provider); this.membersFilter = this.contract.filters.MemberRegistered(); } @@ -26,8 +40,8 @@ export class RLNContract { return this._contract; } - public getMembers(): Member[] { - return this.members; + public get members(): Member[] { + return this._members; } public async fetchMembers(