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/4060 multichain lag fix #323

Merged
merged 1 commit into from
Jan 30, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,6 @@ export const handleDisableProxyColony = async (
type: ColonyActionType.RemoveProxyColony,
initiatorAddress,
targetChainId: Number(foreignChainId),
multiChainInfo: {
completed: true,
},
fromDomainId: getDomainDatabaseId(colonyAddress, Id.RootDomain),
});
};
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,6 @@ export const handleEnableProxyColony = async (
type: ColonyActionType.AddProxyColony,
initiatorAddress,
targetChainId: Number(foreignChainId),
multiChainInfo: {
completed: true,
},
fromDomainId: getDomainDatabaseId(colonyAddress, Id.RootDomain),
});
};
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,6 @@ export const handleMetadataDeltaMotion = async (
type: isDisableProxyColonyOperation(operation)
? ColonyActionType.RemoveProxyColonyMotion
: ColonyActionType.AddProxyColonyMotion,
multiChainInfo: {
completed: false,
},
targetChainId: Number(targetChainId),
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,5 @@ export const handleCreateProxyColonyMotion = async (
await createMotionInDB(colonyAddress, event, {
type: motionNameMapping[parsedAction.name],
targetChainId: destinationChainId.toNumber(),
multiChainInfo: {
completed: false,
},
});
};
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,6 @@ export const handleMetadataDeltaMultiSig = async (
type: isDisableProxyColonyOperation(operation)
? ColonyActionType.RemoveProxyColonyMultisig
: ColonyActionType.AddProxyColonyMultisig,
multiChainInfo: {
completed: false,
},
targetChainId: Number(targetChainId),
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,5 @@ export const handleCreateProxyColonyMultiSig = async (
await createMultiSigInDB(colonyAddress, event, {
type: multiSigNameMapping[name],
targetChainId: destinationChainId.toNumber(),
multiChainInfo: {
completed: false,
},
});
};
55 changes: 45 additions & 10 deletions apps/main-chain/src/handlers/proxyColonies/proxyColonyRequested.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,21 @@ import {
ProxyColoniesListener,
ProxyColonyEvents,
} from '@joincolony/blocks';
import { output } from '@joincolony/utils';
import {
getMultiChainInfoId,
output,
upsertMultiChainInfo,
} from '@joincolony/utils';
import { utils } from 'ethers';
import blockManager from '~blockManager';
import rpcProvider from '~provider';
import { writeActionFromEvent } from '~utils/actions/writeAction';
import { ColonyActionType } from '@joincolony/graphql';
import {
ColonyActionType,
CreateMultiChainInfoInput,
UpdateMultiChainInfoInput,
} from '@joincolony/graphql';
import amplifyClient from '~amplifyClient';

// @NOTE this one listens to the ProxyColonyRequested event on the colony, not the network!
export const handleProxyColonyRequested: EventHandler = async (
Expand All @@ -21,7 +30,7 @@ export const handleProxyColonyRequested: EventHandler = async (
output(`No colony address passed to handleProxyColonyRequested listener.`);
return;
}
const { blockNumber } = event;
const { blockNumber, transactionHash } = event;

const { agent, destinationChainId } = event.args;

Expand Down Expand Up @@ -68,16 +77,42 @@ export const handleProxyColonyRequested: EventHandler = async (
return;
}

// we could technically use this one, but we should use the one of the created one, just so we have all the core logic in the upsertMultiChainInfo helper
const existingMultiChainInfoId = getMultiChainInfoId(
transactionHash,
destinationChainId.toNumber(),
);

const createMultiChainInfoInput: CreateMultiChainInfoInput = {
id: existingMultiChainInfoId,
completedOnMainChain: true,
completedOnProxyChain: false,
wormholeInfo: {
sequence: emitterSequence,
emitterAddress,
},
};

const updateMultiChainInfoInput: UpdateMultiChainInfoInput = {
id: existingMultiChainInfoId,
completedOnMainChain: true,
wormholeInfo: {
sequence: emitterSequence,
emitterAddress,
},
};

const multiChainInfoId = await upsertMultiChainInfo(
amplifyClient,
existingMultiChainInfoId,
createMultiChainInfoInput,
updateMultiChainInfoInput,
);

await writeActionFromEvent(event, colonyAddress, {
type: ColonyActionType.AddProxyColony,
initiatorAddress: agent,
targetChainId: destinationChainId.toNumber(),
multiChainInfo: {
completed: false,
wormholeInfo: {
sequence: emitterSequence,
emitterAddress,
},
},
multiChainInfoId,
});
};
78 changes: 38 additions & 40 deletions apps/proxy-chain/src/handlers/proxyColonies/proxyColonyDeployed.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
import {
CreateMultiChainInfoInput,
CreateProxyColonyDocument,
CreateProxyColonyMutation,
CreateProxyColonyMutationVariables,
GetActionInfoDocument,
GetActionInfoQuery,
GetActionInfoQueryVariables,
UpdateColonyActionDocument,
UpdateColonyActionMutation,
UpdateColonyActionMutationVariables,
UpdateMultiChainInfoInput,
} from '@joincolony/graphql';
import {
ContractEvent,
Expand All @@ -16,7 +12,11 @@ import {
} from '@joincolony/blocks';
import amplifyClient from '~amplifyClient';
import rpcProvider from '~provider';
import { output } from '@joincolony/utils';
import {
getMultiChainInfoId,
output,
upsertMultiChainInfo,
} from '@joincolony/utils';
import { utils } from 'ethers';
import blockManager from '~blockManager';
import multiChainBridgeClient from '~multiChainBridgeClient';
Expand Down Expand Up @@ -120,39 +120,37 @@ export const handleProxyColonyDeployed = async (
},
});

const actionResponse = await amplifyClient.query<
GetActionInfoQuery,
GetActionInfoQueryVariables
>(GetActionInfoDocument, { transactionHash: sourceChainTxHash });
const actionData = actionResponse?.data?.getColonyAction;

if (!actionData) {
output(
`The txHash: ${sourceChainTxHash} is not an action on the main chain.`,
);
return;
}

if (!actionData.multiChainInfo) {
output(`The action: ${sourceChainTxHash} doesn't have multi chain data.`);
return;
}
// we could technically use this one, but we should use the one of the created one, just so we have all the core logic in the upsertMultiChainInfo helper
const existingMultiChainInfoId = getMultiChainInfoId(
sourceChainTxHash,
Number(chainId),
);

await amplifyClient.mutate<
UpdateColonyActionMutation,
UpdateColonyActionMutationVariables
>(UpdateColonyActionDocument, {
input: {
id: sourceChainTxHash,
multiChainInfo: {
...actionData.multiChainInfo,
completed: isDeploymentCompleted,
wormholeInfo: {
emitterAddress: emitterAddress.toString(),
emitterChainId,
sequence: sequence.toString(),
},
},
const createMultiChainInfoInput: CreateMultiChainInfoInput = {
id: existingMultiChainInfoId,
completedOnMainChain: false,
completedOnProxyChain: isDeploymentCompleted,
wormholeInfo: {
emitterAddress: emitterAddress.toString(),
emitterChainId,
sequence: sequence.toString(),
},
});
};

const updateMultiChainInfoInput: UpdateMultiChainInfoInput = {
id: existingMultiChainInfoId,
completedOnProxyChain: isDeploymentCompleted,
wormholeInfo: {
emitterAddress: emitterAddress.toString(),
emitterChainId,
sequence: sequence.toString(),
},
};

await upsertMultiChainInfo(
amplifyClient,
existingMultiChainInfoId,
createMultiChainInfoInput,
updateMultiChainInfoInput,
);
};
5 changes: 4 additions & 1 deletion packages/graphql/src/fragments/actions.graphql
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
fragment MultiChainInfo on MultiChainInfo {
completed
id
completedOnMainChain
completedOnProxyChain
wormholeInfo {
emitterChainId
emitterAddress
Expand Down Expand Up @@ -27,6 +29,7 @@ fragment ActionMetadataInfo on ColonyAction {
recipientAddress
}
members
multiChainInfoId
multiChainInfo {
...MultiChainInfo
}
Expand Down
Loading