Skip to content

Commit

Permalink
add mustisig client changes
Browse files Browse the repository at this point in the history
  • Loading branch information
josemarinas committed Jan 12, 2023
1 parent 60e9b88 commit 84198ac
Show file tree
Hide file tree
Showing 23 changed files with 219 additions and 187 deletions.
2 changes: 1 addition & 1 deletion modules/client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
"typescript": "^4.6.2"
},
"dependencies": {
"@aragon/core-contracts-ethers": "^0.5.0-alpha",
"@aragon/core-contracts-ethers": "^0.6.0-alpha",
"@aragon/sdk-common": "^0.9.2-alpha",
"@aragon/sdk-ipfs": "^0.2.0-alpha",
"@ethersproject/abstract-signer": "^5.5.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ export class ClientAddressListEstimation extends ClientCore
params.actions || [],
Math.round(startTimestamp / 1000),
Math.round(endTimestamp / 1000),
params.executeOnPass || false,
params.creatorVote || 0,
params.executeOnPass || false,
);
return this.web3.getApproximateGasFee(estimatedGasFee.toBigInt());
}
Expand Down
2 changes: 1 addition & 1 deletion modules/client/src/addressList/internal/client/methods.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,8 @@ export class ClientAddressListMethods extends ClientCore
params.actions || [],
Math.round(startTimestamp / 1000),
Math.round(endTimestamp / 1000),
params.executeOnPass || false,
params.creatorVote || 0,
params.executeOnPass || false,
);

yield {
Expand Down
4 changes: 2 additions & 2 deletions modules/client/src/client-common/encoding.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import {
IMajorityVoting,
MajorityVotingBase,
MajorityVotingBase__factory,
} from "@aragon/core-contracts-ethers";
import {
Expand Down Expand Up @@ -58,7 +58,7 @@ function pluginSettingsFromContract(result: Result): VotingSettings {

export function votingSettingsToContract(
params: VotingSettings,
): IMajorityVoting.VotingSettingsStruct {
): MajorityVotingBase.VotingSettingsStruct {
return {
votingMode: BigNumber.from(
votingModeToContracts(params.votingMode || VotingMode.STANDARD),
Expand Down
7 changes: 4 additions & 3 deletions modules/client/src/client-common/interfaces/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ export interface ICreateProposalParams {
export type CreateProposalBaseParams = {
pluginAddress: string;
actions?: DaoAction[];
metadataUri?: string;
metadataUri: string;
};

export interface IVoteProposalParams {
Expand All @@ -90,8 +90,9 @@ export interface ICanVoteParams {
}

export type CanExecuteParams = {
proposalId: string;
proposalId: bigint;
addressOrEns: string;
pluginAddress: string
};

/**
Expand Down Expand Up @@ -220,7 +221,7 @@ export enum ProposalCreationSteps {

export type ProposalCreationStepValue =
| { key: ProposalCreationSteps.CREATING; txHash: string }
| { key: ProposalCreationSteps.DONE; proposalId: string };
| { key: ProposalCreationSteps.DONE; proposalId: bigint };

// PROPOSAL VOTING
export enum VoteProposalStep {
Expand Down
7 changes: 0 additions & 7 deletions modules/client/src/client-common/utils.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
import { IDAO } from "@aragon/core-contracts-ethers";
import { ContractReceipt } from "@ethersproject/contracts";
<<<<<<< HEAD
import { VoteValues, VotingMode } from "../client-common/interfaces/plugin";
=======
import { id } from "@ethersproject/hash";
import { Log } from "@ethersproject/providers";
import { Interface } from "@ethersproject/abi";
import { VoteValues } from "../client-common/interfaces/plugin";
>>>>>>> afe6128 (fix integraction with contracts)
import {
IComputeStatusProposal,
ICreateProposalParams,
Expand Down
31 changes: 20 additions & 11 deletions modules/client/src/multisig/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,14 @@ export interface IMultisigClientMethods extends IClientCore {
export interface IMultisigClientEncoding extends IClientCore {
addAddressesAction: (params: AddAddressesParams) => DaoAction;
removeAddressesAction: (params: RemoveAddressesParams) => DaoAction;
updateMinApprovalsAction: (params: UpdateMinApprovalsParams) => DaoAction;
updateMultisigVotingSettings: (
params: UpdateMultisigVotingSettingsParams,
) => DaoAction;
}
export interface IMultisigClientDecoding extends IClientCore {
addAddressesAction: (data: Uint8Array) => MultisigPluginSettings;
removeAddressesAction: (data: Uint8Array) => MultisigPluginSettings;
updateMinApprovalsAction: (data: Uint8Array) => bigint;
addAddressesAction: (data: Uint8Array) => string[];
removeAddressesAction: (data: Uint8Array) => string[];
updateMultisigVotingSettings: (data: Uint8Array) => MultisigVotingSettings;
findInterface: (data: Uint8Array) => IInterfaceParams | null;
}
export interface IMultisigClientEstimation extends IClientCore {
Expand All @@ -72,20 +74,26 @@ export interface IMultisigClient {

export type MultisigPluginInstallParams = MultisigPluginSettings;

export type MultisigPluginSettings = {
export type MultisigVotingSettings = {
minApprovals: number;
onlyListed: boolean;
};

export type MultisigPluginSettings = {
members: string[];
votingSettings: MultisigVotingSettings;
};

export type UpdateAddressesParams = MultisigPluginSettings & {
export type UpdateAddressesParams = {
pluginAddress: string;
members: string[];
};
export type RemoveAddressesParams = UpdateAddressesParams;
export type AddAddressesParams = UpdateAddressesParams;

export type UpdateMinApprovalsParams = {
export type UpdateMultisigVotingSettingsParams = {
pluginAddress: string;
minApprovals: number;
votingSettings: MultisigVotingSettings;
};

export type CreateMultisigProposalParams = CreateProposalBaseParams & {
Expand Down Expand Up @@ -145,16 +153,17 @@ export type SubgraphMultisigProposalListItem = SubgraphProposalBase;
export type SubgraphMultisigProposal = SubgraphProposalBase & {
createdAt: string;
actions: SubgraphAction[];
approvals: SubgraphMultisigApprovalListItem[];
approvers: SubgraphMultisigApproversListItem[];
};

export type SubgraphMultisigApprovalListItem = {
id: string;
export type SubgraphMultisigApproversListItem = {
approver: { id: string };
};

export type SubgraphMultisigPluginSettings = {
members: {
address: string;
}[];
minApprovals: string;
onlyListed: boolean;
};
28 changes: 17 additions & 11 deletions modules/client/src/multisig/internal/client/decoding.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,13 @@ import {
IInterfaceParams,
} from "../../../client-common";
import { AVAILABLE_FUNCTION_SIGNATURES } from "../constants";
import { IMultisigClientDecoding, MultisigPluginSettings } from "../../interfaces";
import {
IMultisigClientDecoding,
MultisigVotingSettings,
} from "../../interfaces";
// @ts-ignore
// todo fix new contracts-ethers
import { MultisigVoting__factory } from "@aragon/core-contracts-ethers";
import { Multisig__factory } from "@aragon/core-contracts-ethers";

/**
* Decoding module for the SDK AddressList Client
Expand All @@ -26,8 +29,8 @@ export class MultisigClientDecoding extends ClientCore
* @return {*} {string[]}
* @memberof MultisigClientDecoding
*/
public addAddressesAction(data: Uint8Array): MultisigPluginSettings {
const multisigInterface = MultisigVoting__factory.createInterface();
public addAddressesAction(data: Uint8Array): string[] {
const multisigInterface = Multisig__factory.createInterface();
const hexBytes = bytesToHex(data, true);
const receivedFunction = multisigInterface.getFunction(
hexBytes.substring(0, 10) as any,
Expand All @@ -49,8 +52,8 @@ export class MultisigClientDecoding extends ClientCore
* @return {*} {string[]}
* @memberof MultisigClientDecoding
*/
public removeAddressesAction(data: Uint8Array): MultisigPluginSettings {
const multisigInterface = MultisigVoting__factory.createInterface();
public removeAddressesAction(data: Uint8Array): string[] {
const multisigInterface = Multisig__factory.createInterface();
const hexBytes = bytesToHex(data, true);
const receivedFunction = multisigInterface.getFunction(
hexBytes.substring(0, 10) as any,
Expand All @@ -74,23 +77,26 @@ export class MultisigClientDecoding extends ClientCore
* @return {*} {bigint}
* @memberof MultisigClientDecoding
*/
public updateMinApprovalsAction(data: Uint8Array): bigint {
const multisigInterface = MultisigVoting__factory.createInterface();
public updateMultisigVotingSettings(data: Uint8Array): MultisigVotingSettings {
const multisigInterface = Multisig__factory.createInterface();
const hexBytes = bytesToHex(data, true);
const receivedFunction = multisigInterface.getFunction(
hexBytes.substring(0, 10) as any,
);
const expectedfunction = multisigInterface.getFunction(
"updateMinApprovals",
"updateMultisigSettings",
);
if (receivedFunction.name !== expectedfunction.name) {
throw new UnexpectedActionError();
}
const result = multisigInterface.decodeFunctionData(
"updateMinApprovals",
"updateMultisigSettings",
data,
);
return result[0];
return {
minApprovals: result[0].minApprovals,
onlyListed: result[0].onlyListed,
};
}
/**
* Returns the decoded function info given the encoded data of an action
Expand Down
49 changes: 29 additions & 20 deletions modules/client/src/multisig/internal/client/encoding.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,14 @@ import {
IMultisigClientEncoding,
MultisigPluginInstallParams,
UpdateAddressesParams,
UpdateMinApprovalsParams,
UpdateMultisigVotingSettingsParams,
} from "../../interfaces";
// @ts-ignore
// todo fix new contracts-ethers
import { MultisigVoting__factory } from "@aragon/core-contracts-ethers";
import { Multisig__factory } from "@aragon/core-contracts-ethers";
import { MULTISIG_PLUGIN_ID } from "../constants";
import { defaultAbiCoder } from "@ethersproject/abi";
import { toUtf8Bytes } from "@ethersproject/strings";

/**
* Encoding module for the SDK Multisig Client
Expand All @@ -41,16 +43,23 @@ export class MultisigClientEncoding extends ClientCore
static getPluginInstallItem(
params: MultisigPluginInstallParams,
): IPluginInstallItem {
const multisigInterface = MultisigVoting__factory.createInterface();
// get hex bytes
const hexBytes = multisigInterface.encodeFunctionData(
"initialize",
[params.minApprovals, params.members],
const hexBytes = defaultAbiCoder.encode(
// members, [onlyListed, minApprovals]
[
"address[]",
"tuple(bool, uint16)",
],
[
params.members,
[
params.votingSettings.onlyListed,
params.votingSettings.minApprovals
]
],
);
const data = hexToBytes(strip0x(hexBytes));
return {
id: MULTISIG_PLUGIN_ID,
data,
data: toUtf8Bytes(hexBytes)
};
}

Expand All @@ -73,11 +82,11 @@ export class MultisigClientEncoding extends ClientCore
throw new InvalidAddressError();
}
}
const multisigInterface = MultisigVoting__factory.createInterface();
const multisigInterface = Multisig__factory.createInterface();
// get hex bytes
const hexBytes = multisigInterface.encodeFunctionData(
"addAddresses",
[params.members, params.minApprovals],
[params.members],
);
const data = hexToBytes(strip0x(hexBytes));
return {
Expand Down Expand Up @@ -105,11 +114,11 @@ export class MultisigClientEncoding extends ClientCore
throw new InvalidAddressError();
}
}
const multisigInterface = MultisigVoting__factory.createInterface();
const multisigInterface = Multisig__factory.createInterface();
// get hex bytes
const hexBytes = multisigInterface.encodeFunctionData(
"removeAddresses",
[params.members, params.minApprovals],
[params.members],
);
const data = hexToBytes(strip0x(hexBytes));
return {
Expand All @@ -119,23 +128,23 @@ export class MultisigClientEncoding extends ClientCore
};
}
/**
* Computes the parameters to be given when creating a proposal updates the min approvals parameter
* Computes the parameters to be given when creating a proposal updates multisig settings
*
* @param {UpdateMinApprovalsParams} params
* @param {UpdateMultisigVotingSettingsParams} params
* @return {*} {DaoAction}
* @memberof MultisigClientEncoding
*/
public updateMinApprovalsAction(
params: UpdateMinApprovalsParams,
public updateMultisigVotingSettings(
params: UpdateMultisigVotingSettingsParams,
): DaoAction {
if (!isAddress(params.pluginAddress)) {
throw new InvalidAddressError();
}
const multisigInterface = MultisigVoting__factory.createInterface();
const multisigInterface = Multisig__factory.createInterface();
// get hex bytes
const hexBytes = multisigInterface.encodeFunctionData(
"updateMinApprovals",
[params.minApprovals],
"updateMultisigSettings",
[params.votingSettings],
);
const data = hexToBytes(strip0x(hexBytes));
return {
Expand Down
Loading

0 comments on commit 84198ac

Please sign in to comment.