Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: multi sig #207

Merged
merged 87 commits into from
Sep 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
f6e56e0
feat: update colonyjs version to snapshot
bassgeta Apr 18, 2024
30f1715
feat: implement multisig listeners
bassgeta Apr 16, 2024
f3c6a1f
feat: handlers for multi sig extension
bassgeta Apr 18, 2024
ade4372
feat: implement global threshold updated handler
bassgeta Apr 19, 2024
8954d78
Feat: Update manage permissions handler to handle MultiSigRoleSet
iamsamgibbs Apr 26, 2024
84bbc92
Feat: Add role_6 to multi sig permissions
iamsamgibbs Apr 30, 2024
ef2ee63
Feat: Add rolesAreMultiSig field to ColonyAction model
iamsamgibbs May 1, 2024
13123b4
Feat: Update manage permissions motion handler to handle MultiSigRoleSet
iamsamgibbs May 2, 2024
b7376e2
feat: implement mint tokens multisig creation and groundwork for more…
bassgeta Apr 24, 2024
2413fb5
fix: realign after rebase
bassgeta May 22, 2024
428de5f
feat: update colonyjs version to snapshot
bassgeta Apr 18, 2024
1d851af
feat: implement global threshold updated handler
bassgeta Apr 19, 2024
63fbe3d
Added handler for domainSkillThresholdSet event
ArmandoGraterol Apr 24, 2024
067aa4f
Added missing domainSkillThresholdSet handler to event processor
ArmandoGraterol Apr 24, 2024
c610fa6
Fix: Ensure globalThresholdSet does not override domainThresholds
iamsamgibbs May 21, 2024
ae59f4b
Fix: Simplify matching domain check
iamsamgibbs May 21, 2024
2377447
fix: realign after rebase
iamsamgibbs May 23, 2024
15f2087
feat: handle multisig approval changed
bassgeta May 24, 2024
090fe9c
feat: implement multisig vote removal
bassgeta May 27, 2024
ab0aa37
feat: realign link of multisig vote and multisig, fetching of domain …
bassgeta May 30, 2024
6aeea36
Feat: multiSig motion canceled handler added
iamsamgibbs May 29, 2024
039a994
Fix: Use getChainId helper
iamsamgibbs May 30, 2024
bdb716f
Fix: Remove isRejected from mutation
iamsamgibbs May 30, 2024
2dc19d2
Fix: Add verbose to multiSig motionCanceled
iamsamgibbs May 30, 2024
b9deb7f
Fix: Get multiSigExtensionAddress from ContractEvent rather than getM…
iamsamgibbs May 30, 2024
dfe45a4
Fix: Remove duplicate import after rebase
iamsamgibbs May 31, 2024
8636a80
refactor: decouple metadata linking from motionFinalized to utils
bassgeta Jun 4, 2024
0c611d9
feat: implement handling of multiSig executed
bassgeta Jun 4, 2024
3c1114a
feat: unify naming of parseAction to parseOperation, renamed metadata…
bassgeta Jun 5, 2024
a3ee86f
feat: realign after rebase
bassgeta Jun 10, 2024
d99cf39
feat: handlers for multi sig extension
bassgeta Apr 18, 2024
7713c3a
feat: implement global threshold updated handler
bassgeta Apr 19, 2024
3a37f44
Feat: Update manage permissions motion handler to handle MultiSigRoleSet
iamsamgibbs May 2, 2024
fc5ff61
refactor: decouple metadata linking from motionFinalized to utils
bassgeta Jun 4, 2024
89534e5
feat: unify naming of parseAction to parseOperation, renamed metadata…
bassgeta Jun 5, 2024
f9fea30
Feat: Handle MultisigRejectionChanged
iamsamgibbs Jun 6, 2024
b389131
Fix: Remove console log
iamsamgibbs Jun 7, 2024
79459ce
Fix: Realign after rebase
iamsamgibbs Jun 10, 2024
201a202
Fix: Realign after rebase
iamsamgibbs Jun 10, 2024
a949697
Fix: Rename multisigvote mutation
iamsamgibbs Jun 13, 2024
d8de959
feat: handlers for multi sig extension
bassgeta Apr 18, 2024
4b49d08
feat: implement global threshold updated handler
bassgeta Apr 19, 2024
b6450ee
Feat: Update manage permissions motion handler to handle MultiSigRoleSet
iamsamgibbs May 2, 2024
b0b8f90
refactor: decouple metadata linking from motionFinalized to utils
bassgeta Jun 4, 2024
a630917
feat: unify naming of parseAction to parseOperation, renamed metadata…
bassgeta Jun 5, 2024
9852742
Feat: Handle MultisigRejectionChanged
iamsamgibbs Jun 6, 2024
e3175bc
Fix: Remove console log
iamsamgibbs Jun 7, 2024
e812409
Fix: Realign after rebase
iamsamgibbs Jun 10, 2024
83e7c02
Fix: Realign after rebase
iamsamgibbs Jun 10, 2024
4206584
feat: if motion executed but action failed, reject the multi sig motion
bassgeta Jun 14, 2024
3f85abd
Add hasActionCompleted flag to multi sig object
davecreaser Jun 20, 2024
d2b866e
feat: add hasActionCompleted to multi sig, handle failing execution
bassgeta Jun 20, 2024
4a526c2
feat: update colony js version
bassgeta Jun 21, 2024
6ef2526
feat: remove all multiSig roles and reject motions upon uninstallatio…
bassgeta Jun 6, 2024
acc149e
feat: optimize fetching of multisig motions and queries by using colo…
bassgeta Jun 18, 2024
a6234aa
fix: uninstallation listener gql queries
bassgeta Jul 1, 2024
b4ad7ee
Implement unlock token multi-sig motion
davecreaser Jun 19, 2024
bd6206c
Feat: add rejectedAt, rejectedBy and executedBy for ColonyMultiSig
mmioana Jun 19, 2024
e8ee8f6
feat: add addDomain multi sig handler
rumzledz Jun 21, 2024
77ed574
feat: enable editTeam multi sig handler because why not
rumzledz Jun 21, 2024
cfceedb
feat: update metadata handling for add and edit domain
rumzledz Jul 1, 2024
edf3b81
feat: remove redundant comment
rumzledz Jul 3, 2024
5afa3d4
feat: conditionally pass fromDomainId
rumzledz Jul 9, 2024
c69a952
feat: update domainId
rumzledz Jul 9, 2024
100b8c3
Fix: Handle manage verified members multi-sig motion
mmioana Jul 3, 2024
86e9625
Fix: Update handleMetadataDeltaMultiSig import
mmioana Jul 8, 2024
71a9398
Fix: Update action type for multi-sig
mmioana Jul 8, 2024
9f7e1f5
Add move funds multisig handler
davecreaser Jul 4, 2024
bfbf161
Feat: Edit colony using multi-sig
mmioana Jul 4, 2024
cf0171b
Fix: Rename edit colony multi sig handler
mmioana Jul 8, 2024
fe703cf
Fix: Replace motionNameMapping with multiSigNameMapping for edit colony
mmioana Jul 8, 2024
3b92554
Feat: Handle setUserRoles multi-sig motion
iamsamgibbs Jul 2, 2024
6c3ce57
Feat: add fromDomainId to setUserRoles multisig
iamsamgibbs Jul 4, 2024
9983946
feat: handle simple payment action
bassgeta Jul 3, 2024
6e655de
feat: handle multiple user multisig signatures
bassgeta Jul 9, 2024
c9d82ae
fix: break after unlock token multisig created
bassgeta Jul 18, 2024
2086309
Add manage reputation handler
davecreaser Jul 10, 2024
05728f6
fix: add back simple payment multisig handler
bassgeta Jul 18, 2024
01d334e
feat: add multi-sig handler for colony version upgrade
rumzledz Jul 12, 2024
200ea1a
feat: enable colony version upgrade multi-sig handler
rumzledz Jul 16, 2024
19d144c
build: realign graphql types
bassgeta Jul 25, 2024
ee823d7
build: lock colony-js version of snapshot
bassgeta Jul 25, 2024
9fb9f49
fix: conditionally add multisig chunk to historic role id
rumzledz Jul 30, 2024
689646a
build: realign package lock and generated gql file
bassgeta Aug 2, 2024
a692dc1
fix: make multiSig createdAt in sync with the blockchain, unify the h…
bassgeta Jul 25, 2024
35386c2
Feat: Handle manage tokens via multi-sig
iamsamgibbs Aug 9, 2024
57ccbf6
build: update colony-js version
bassgeta Sep 2, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 29 additions & 25 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
},
"homepage": "https://github.com/JoinColony/tx-ingestor",
"dependencies": {
"@colony/colony-js": "^0.0.0-snapshot-69cce09-20240724101901",
"@colony/events": "0.0.0-snapshot-20240329154314",
"@colony/colony-js": "0.0.0-snapshot-85097e5-20240902145835",
"@colony/events": "0.0.0-snapshot-20240415105500",
"aws-amplify": "^4.3.43",
"cross-fetch": "^4.0.0",
"dotenv": "^16.0.3",
Expand Down
1 change: 1 addition & 0 deletions src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export const SUPPORTED_EXTENSION_IDS = [
Extension.StakedExpenditure,
Extension.StagedExpenditure,
Extension.StreamingPayments,
Extension.MultisigPermissions,
];

export const SIMPLE_DECISIONS_ACTION_CODE = '0x12345678';
Expand Down
2 changes: 2 additions & 0 deletions src/eventListeners/extension/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import {
handleExtensionUninstalled,
handleExtensionUpgraded,
} from '~handlers';
import { setupListenersForMultiSigExtensions } from './multiSig';

export * from './stakedExpenditure';
export * from './stagedExpenditure';
Expand Down Expand Up @@ -91,6 +92,7 @@ export const setupListenersForExtensions = async (): Promise<void> => {
await setupListenersForStakedExpenditureExtensions();
await setupListenersForStagedExpenditureExtensions();
await setupListenersForStreamingPaymentsExtensions();
await setupListenersForMultiSigExtensions();
};

export const fetchExistingExtensions = async (
Expand Down
125 changes: 125 additions & 0 deletions src/eventListeners/extension/multiSig.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
import { Extension, getExtensionHash } from '@colony/colony-js';
import { handleManagePermissionsAction } from '~handlers';
import {
handleMultiSigApprovalChanged,
handleMultiSigRejectionChanged,
handleMultiSigDomainSkillThresholdSet,
handleMultiSigGlobalThresholdSet,
handleMultiSigMotionCancelled,
handleMultiSigMotionCreated,
handleMultiSigMotionExecuted,
} from '~handlers/multiSig';
import { mutate, query } from '~amplifyClient';
import {
GetActiveColonyMultisigsDocument,
GetActiveColonyMultisigsQuery,
GetActiveColonyMultisigsQueryVariables,
GetAllMultiSigRolesDocument,
GetAllMultiSigRolesQuery,
GetAllMultiSigRolesQueryVariables,
RemoveMultiSigRoleDocument,
RemoveMultiSigRoleMutation,
RemoveMultiSigRoleMutationVariables,
} from '~graphql';

import { ContractEventsSignatures } from '~types';
import { notNull } from '~utils';
import { addMultiSigParamsToDB } from '~utils/extensions/multiSig';
import { output } from '~utils/logger';

import { addExtensionEventListener, fetchExistingExtensions } from './index';
import { updateMultiSigInDB } from '~handlers/multiSig/helpers';

export const setupListenersForMultiSigExtensions = async (): Promise<void> => {
output(`Setting up listeners for MultiSig extensions`);
const existingExtensions = await fetchExistingExtensions(
getExtensionHash(Extension.MultisigPermissions),
);
existingExtensions.forEach((extension) =>
setupMultiSigListeners(extension.id, extension.colonyId),
);
};

export const handleMultiSigInstalled = async (
multiSigAddress: string,
colonyAddress: string,
): Promise<void> => {
setupMultiSigListeners(multiSigAddress, colonyAddress);
await addMultiSigParamsToDB(multiSigAddress, colonyAddress);
};

export const handleMultiSigUninstalled = async (
colonyAddress: string,
): Promise<void> => {
const multiSigRolesQuery = await query<
GetAllMultiSigRolesQuery,
GetAllMultiSigRolesQueryVariables
>(GetAllMultiSigRolesDocument, {
colonyAddress,
});

const roleEntries = multiSigRolesQuery?.data?.getRoleByColony?.items ?? [];

await Promise.all(
roleEntries.filter(notNull).map(async (entry) => {
await mutate<
RemoveMultiSigRoleMutation,
RemoveMultiSigRoleMutationVariables
>(RemoveMultiSigRoleDocument, {
id: entry.id,
});
}),
);

const activeMultiSigsQuery = await query<
GetActiveColonyMultisigsQuery,
GetActiveColonyMultisigsQueryVariables
>(GetActiveColonyMultisigsDocument, {
colonyAddress,
});

const multiSigs =
activeMultiSigsQuery?.data?.getMultiSigByColonyAddress?.items ?? [];
await Promise.all(
multiSigs.filter(notNull).map(async (entry) => {
await updateMultiSigInDB({
id: entry.id,
isExecuted: false,
isRejected: true,
});
}),
);
};

export const setupMultiSigListeners = (
multiSigAddress: string,
colonyAddress: string,
): void => {
const multiSigEvents = {
[ContractEventsSignatures.MultisigMotionExecuted]:
handleMultiSigMotionExecuted,
[ContractEventsSignatures.MultisigMotionCancelled]:
handleMultiSigMotionCancelled,
[ContractEventsSignatures.MultisigMotionCreated]:
handleMultiSigMotionCreated,
[ContractEventsSignatures.MultisigApprovalChanged]:
handleMultiSigApprovalChanged,
[ContractEventsSignatures.MultisigRoleSet]: handleManagePermissionsAction,
[ContractEventsSignatures.MultisigRejectionChanged]:
handleMultiSigRejectionChanged,
[ContractEventsSignatures.MultisigGlobalThresholdSet]:
handleMultiSigGlobalThresholdSet,
[ContractEventsSignatures.MultisigDomainSkillThresholdSet]:
handleMultiSigDomainSkillThresholdSet,
};

Object.entries(multiSigEvents).forEach(([eventSignature, handler]) =>
addExtensionEventListener(
eventSignature as ContractEventsSignatures,
Extension.MultisigPermissions,
multiSigAddress,
colonyAddress,
handler,
),
);
};
1 change: 1 addition & 0 deletions src/eventListeners/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export enum EventListenerType {
Extension = 'Extension',
Token = 'Token',
OneTxPayment = 'OneTxPayment',
MultisigPermissions = 'MultisigPermissions',
}

export interface ColonyEventListener extends BaseEventListener {
Expand Down
13 changes: 13 additions & 0 deletions src/graphql/fragments/actions.graphql
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
fragment ActionMetadataInfo on ColonyAction {
id
pendingDomainMetadata {
...DomainMetadata
}
pendingColonyMetadata {
...ColonyMetadata
}
colonyDecisionId
amount
networkFee
type
}
6 changes: 6 additions & 0 deletions src/graphql/fragments/colony.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,18 @@ fragment ColonyMetadata on ColonyMetadata {
name
link
}
objective {
title
description
progress
}
changelog {
transactionHash
oldDisplayName
newDisplayName
hasAvatarChanged
hasDescriptionChanged
haveExternalLinksChanged
hasObjectiveChanged
}
}
33 changes: 33 additions & 0 deletions src/graphql/fragments/multiSig.graphql
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
fragment MultiSigUserSignature on MultiSigUserSignature {
id
multiSigId
role
colonyAddress
userAddress
vote
createdAt
}

fragment ColonyMultiSig on ColonyMultiSig {
id
colonyAddress
nativeMultiSigId
multiSigDomainId
nativeMultiSigDomainId
requiredPermissions
transactionHash
isExecuted
isRejected
isDecision
hasActionCompleted
signatures {
items {
...MultiSigUserSignature
}
}
executedAt
executedBy
rejectedAt
rejectedBy
createdAt
}
Loading
Loading