Skip to content

Commit

Permalink
Feature: Add blockNumber to getMembers and getVotingSettings (#266)
Browse files Browse the repository at this point in the history
  • Loading branch information
josemarinas authored Aug 8, 2023
1 parent d52cb96 commit e33c39e
Show file tree
Hide file tree
Showing 14 changed files with 57 additions and 17 deletions.
3 changes: 3 additions & 0 deletions modules/client/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ TEMPLATE:

## [UPCOMING]
### Added
- Block param on `getVotingSettings` and `getMembers` functions to allow for historical data
## 1.11.0-rc1
### Added
- Support for baseMainnet network
## 1.11.0-rc1
### Added
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ import {
QueryAddresslistVotingSettings,
} from "../graphql-queries";
import {
computeProposalStatusFilter,
toAddresslistVotingProposal,
toAddresslistVotingProposalListItem,
computeProposalStatusFilter
} from "../utils";
import { AddresslistVoting__factory } from "@aragon/osx-ethers";
import { toUtf8Bytes } from "@ethersproject/strings";
Expand Down Expand Up @@ -498,18 +498,21 @@ export class AddresslistVotingClientMethods extends ClientCore
* Returns the settings of a plugin given the address of the plugin instance
*
* @param {string} pluginAddress
* @param {number} blockNumber
* @return {*} {(Promise<VotingSettings | null>)}
* @memberof AddresslistVotingClientMethods
*/
public async getVotingSettings(
pluginAddress: string,
blockNumber?: number,
): Promise<VotingSettings | null> {
if (!isAddress(pluginAddress)) {
throw new InvalidAddressError();
}
const query = QueryAddresslistVotingSettings;
const params = {
address: pluginAddress.toLowerCase(),
block: blockNumber ? { number: blockNumber } : null,
};
const name = "AddresslistVoting settings";
type T = { addresslistVotingPlugin: SubgraphVotingSettings };
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { gql } from "graphql-request";

export const QueryAddresslistVotingSettings = gql`
query AddresslistVotingSettings($address: ID!) {
addresslistVotingPlugin(id: $address){
query AddresslistVotingSettings($address: ID!, $block: Block_height) {
addresslistVotingPlugin(id: $address, block: $block){
minDuration
minProposerVotingPower
minParticipation
Expand Down
5 changes: 4 additions & 1 deletion modules/client/src/addresslistVoting/internal/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,10 @@ export interface IAddresslistVotingClientMethods {
getProposals: (
params: ProposalQueryParams,
) => Promise<AddresslistVotingProposalListItem[]>;
getVotingSettings: (pluginAddress: string) => Promise<VotingSettings | null>;
getVotingSettings: (
pluginAddress: string,
blockNumber?: number,
) => Promise<VotingSettings | null>;
}

export interface IAddresslistVotingClientEncoding {
Expand Down
9 changes: 8 additions & 1 deletion modules/client/src/multisig/internal/client/methods.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,11 @@ import {
QueryMultisigProposals,
QueryMultisigVotingSettings,
} from "../graphql-queries";
import { computeProposalStatusFilter, toMultisigProposal, toMultisigProposalListItem } from "../utils";
import {
computeProposalStatusFilter,
toMultisigProposal,
toMultisigProposalListItem,
} from "../utils";
import { toUtf8Bytes } from "@ethersproject/strings";
import { IMultisigClientMethods } from "../interfaces";
import {
Expand Down Expand Up @@ -307,11 +311,13 @@ export class MultisigClientMethods extends ClientCore
* Returns the voting settings
*
* @param {string} addressOrEns
* @param {number} blockNumber
* @return {*} {Promise<MultisigVotingSettings>}
* @memberof MultisigClientMethods
*/
public async getVotingSettings(
pluginAddress: string,
blockNumber?: number,
): Promise<MultisigVotingSettings> {
// TODO
// update this with yup validation
Expand All @@ -321,6 +327,7 @@ export class MultisigClientMethods extends ClientCore
const query = QueryMultisigVotingSettings;
const params = {
address: pluginAddress.toLowerCase(),
block: blockNumber ? { number: blockNumber } : null,
};
const name = "Multisig settings";
type T = { multisigPlugin: SubgraphMultisigVotingSettings };
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { gql } from "graphql-request";

export const QueryMultisigVotingSettings = gql`
query MultisigVotingSettings($address: ID!) {
multisigPlugin(id: $address){
query MultisigVotingSettings($address: ID!, $block: Block_height) {
multisigPlugin(id: $address, block: $block){
minApprovals
onlyListed
}
Expand Down
1 change: 1 addition & 0 deletions modules/client/src/multisig/internal/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ export interface IMultisigClientMethods {
canExecute: (proposalId: string) => Promise<boolean>;
getVotingSettings: (
addressOrEns: string,
blockNumber?: number,
) => Promise<MultisigVotingSettings>;
getMembers: (
addressOrEns: string,
Expand Down
10 changes: 9 additions & 1 deletion modules/client/src/tokenVoting/internal/client/methods.ts
Original file line number Diff line number Diff line change
Expand Up @@ -442,16 +442,21 @@ export class TokenVotingClientMethods extends ClientCore
*
* @async
* @param {string} pluginAddress
* @param {number} blockNumber
* @return {*} {Promise<string[]>}
* @memberof TokenVotingClient
*/
public async getMembers(pluginAddress: string): Promise<TokenVotingMember[]> {
public async getMembers(
pluginAddress: string,
blockNumber?: number,
): Promise<TokenVotingMember[]> {
if (!isAddress(pluginAddress)) {
throw new InvalidAddressError();
}
const query = QueryTokenVotingMembers;
const params = {
address: pluginAddress.toLowerCase(),
block: blockNumber ? { number: blockNumber } : null,
};
const name = "TokenVoting members";
type T = { tokenVotingPlugin: { members: SubgraphTokenVotingMember[] } };
Expand Down Expand Up @@ -614,18 +619,21 @@ export class TokenVotingClientMethods extends ClientCore
* Returns the settings of a plugin given the address of the plugin instance
*
* @param {string} pluginAddress
* @param {number} blockNumber
* @return {*} {Promise<VotingSettings>}
* @memberof TokenVotingClient
*/
public async getVotingSettings(
pluginAddress: string,
blockNumber?: number,
): Promise<VotingSettings | null> {
if (!isAddress(pluginAddress)) {
throw new InvalidAddressError();
}
const query = QueryTokenVotingSettings;
const params = {
address: pluginAddress.toLowerCase(),
block: blockNumber ? { number: blockNumber } : null,
};
const name = "TokenVoting settings";
type T = { tokenVotingPlugin: SubgraphVotingSettings };
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { gql } from "graphql-request";

export const QueryTokenVotingMembers = gql`
query TokenVotingMembers($address: ID!) {
tokenVotingPlugin(id: $address){
query TokenVotingMembers($address: ID!, $block: Block_height) {
tokenVotingPlugin(id: $address, block: $block){
members {
address
balance
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { gql } from "graphql-request";

export const QueryTokenVotingSettings = gql`
query TokenVotingSettings($address: ID!) {
tokenVotingPlugin(id: $address){
query TokenVotingSettings($address: ID!,$block: Block_height) {
tokenVotingPlugin(id: $address, block: $block){
minDuration
minProposerVotingPower
minParticipation
Expand Down
10 changes: 8 additions & 2 deletions modules/client/src/tokenVoting/internal/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,18 @@ export interface ITokenVotingClientMethods {
) => AsyncGenerator<PrepareInstallationStepValue>;
canVote: (params: CanVoteParams) => Promise<boolean>;
canExecute: (proposalId: string) => Promise<boolean>;
getMembers: (addressOrEns: string) => Promise<TokenVotingMember[]>;
getMembers: (
addressOrEns: string,
blockNumber?: number,
) => Promise<TokenVotingMember[]>;
getProposal: (propoosalId: string) => Promise<TokenVotingProposal | null>;
getProposals: (
params: ProposalQueryParams,
) => Promise<TokenVotingProposalListItem[]>;
getVotingSettings: (pluginAddress: string) => Promise<VotingSettings | null>;
getVotingSettings: (
pluginAddress: string,
blockNumber?: number,
) => Promise<VotingSettings | null>;
getToken: (
pluginAddress: string,
) => Promise<
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ import {
QueryAddresslistVotingMembers,
QueryAddresslistVotingProposal,
QueryAddresslistVotingProposals,
QueryAddresslistVotingSettings,
} from "../../../src/addresslistVoting/internal/graphql-queries";
import {
SubgraphAddresslistVotingProposal,
Expand Down Expand Up @@ -956,6 +957,13 @@ describe("Client Address List", () => {
expect(settings!.minParticipation).toBe(0.3);
expect(settings!.supportThreshold).toBe(0.4);
expect(settings!.minProposerVotingPower).toBe(BigInt(200000));
expect(mockedClient.request).toHaveBeenCalledWith(
QueryAddresslistVotingSettings,
{
address: ADDRESS_ONE,
block: null,
},
);
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,7 @@ describe("Client Multisig", () => {
QueryMultisigVotingSettings,
{
address: ADDRESS_ONE,
block: null,
},
);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -887,7 +887,7 @@ describe("Token Voting Client", () => {

expect(mockedClient.request).toHaveBeenCalledWith(
QueryTokenVotingMembers,
{ address: ADDRESS_ONE },
{ address: ADDRESS_ONE, block: null },
);
});
it("Should fetch the given proposal", async () => {
Expand Down Expand Up @@ -1229,7 +1229,7 @@ describe("Token Voting Client", () => {
address: subgraphProposals[index].voters[0].voter.address,
});
}

expect(mockedClient.request).toHaveBeenCalledWith(
QueryTokenVotingProposals,
{
Expand Down Expand Up @@ -1348,7 +1348,7 @@ describe("Token Voting Client", () => {
}
expect(mockedClient.request).toHaveBeenCalledWith(
QueryTokenVotingSettings,
{ address: pluginAddress },
{ address: pluginAddress, block: null },
);
});
it("Should get the token details of a plugin given a plugin instance address", async () => {
Expand Down

0 comments on commit e33c39e

Please sign in to comment.