Skip to content

Commit 3044bec

Browse files
thelostone-mc0xKurthussedev
authored
feat: index UpdatedRegistration (#520)
* feat: index UpdatedRegistration * update application object * updates * updates * remove unused variable --------- Co-authored-by: 0xKurt <[email protected]> Co-authored-by: Huss Martinez <[email protected]>
1 parent 7f91bdd commit 3044bec

File tree

2 files changed

+93
-5
lines changed

2 files changed

+93
-5
lines changed

src/indexer/allo/v2/handleEvent.ts

Lines changed: 89 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {
2424
DGApplicationData,
2525
DGTimeStampUpdatedData,
2626
DVMDApplicationData,
27+
DVMDExtendedApplicationData,
2728
DVMDTimeStampUpdatedData,
2829
} from "../../types.js";
2930
import { fetchPoolMetadata } from "./poolMetadata.js";
@@ -79,7 +80,9 @@ function getProjectTypeFromMetadata(metadata: ProjectMetadata) {
7980
}
8081

8182
// Decode the application data from DonationVotingMerkleDistribution
82-
function decodeDVMDApplicationData(encodedData: Hex): DVMDApplicationData {
83+
function decodeDVMDExtendedApplicationData(
84+
encodedData: Hex
85+
): DVMDExtendedApplicationData {
8386
const values = decodeAbiParameters(
8487
[
8588
{ name: "data", type: "bytes" },
@@ -88,6 +91,15 @@ function decodeDVMDApplicationData(encodedData: Hex): DVMDApplicationData {
8891
encodedData
8992
);
9093

94+
const encodededDVMD = decodeDVMDApplicationData(values[0]);
95+
96+
return {
97+
...encodededDVMD,
98+
recipientsCounter: values[1].toString(),
99+
};
100+
}
101+
102+
function decodeDVMDApplicationData(encodedData: Hex): DVMDApplicationData {
91103
const decodedData = decodeAbiParameters(
92104
[
93105
{ name: "registryAnchor", type: "address" },
@@ -101,11 +113,10 @@ function decodeDVMDApplicationData(encodedData: Hex): DVMDApplicationData {
101113
],
102114
},
103115
],
104-
values[0]
116+
encodedData
105117
);
106118

107119
const results: DVMDApplicationData = {
108-
recipientsCounter: values[1].toString(),
109120
anchorAddress: decodedData[0],
110121
recipientAddress: decodedData[1],
111122
metadata: {
@@ -797,7 +808,7 @@ export async function handleEvent(
797808

798809
case "allov2.DonationVotingMerkleDistributionDirectTransferStrategy":
799810
case "allov2.DirectGrantsLiteStrategy":
800-
values = decodeDVMDApplicationData(encodedData);
811+
values = decodeDVMDExtendedApplicationData(encodedData);
801812
id = (Number(values.recipientsCounter) - 1).toString();
802813
break;
803814

@@ -843,6 +854,80 @@ export async function handleEvent(
843854
];
844855
}
845856

857+
case "UpdatedRegistration": {
858+
const anchorAddress = parseAddress(event.params.recipientId);
859+
const project = await db.getProjectByAnchor(chainId, anchorAddress);
860+
861+
if (!project) {
862+
throw new Error("Project not found");
863+
}
864+
865+
const encodedData = event.params.data;
866+
const strategyAddress = parseAddress(event.address);
867+
const round = await db.getRoundByStrategyAddress(
868+
chainId,
869+
strategyAddress
870+
);
871+
872+
if (!round) {
873+
throw new Error("Round not found");
874+
}
875+
876+
let values;
877+
878+
switch (round.strategyName) {
879+
case "allov2.DirectGrantsSimpleStrategy":
880+
values = decodeDGApplicationData(encodedData);
881+
break;
882+
883+
case "allov2.DirectGrantsLiteStrategy":
884+
case "allov2.DonationVotingMerkleDistributionDirectTransferStrategy":
885+
values = decodeDVMDApplicationData(encodedData);
886+
break;
887+
888+
default:
889+
throw new Error("Invalid strategy name");
890+
}
891+
892+
const metadata = await ipfsGet(values.metadata.pointer);
893+
894+
const statusString = ApplicationStatus[
895+
event.params.status
896+
] as ApplicationTable["status"];
897+
898+
const application = await db.getApplicationByAnchorAddress(
899+
chainId,
900+
round.id,
901+
anchorAddress
902+
);
903+
904+
if (application === null) {
905+
return [];
906+
}
907+
908+
const statusUpdates = await updateApplicationStatus(
909+
application,
910+
statusString,
911+
event.blockNumber,
912+
getBlock
913+
);
914+
915+
return [
916+
{
917+
type: "UpdateApplication",
918+
chainId,
919+
roundId: round.id,
920+
applicationId: application.id,
921+
application: {
922+
...application,
923+
...statusUpdates,
924+
metadataCid: values.metadata.pointer,
925+
metadata: metadata ?? null,
926+
},
927+
},
928+
];
929+
}
930+
846931
case "TimestampsUpdated": {
847932
const strategyAddress = parseAddress(event.address);
848933
const round = await db.getRoundByStrategyAddress(

src/indexer/types.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
export type DVMDApplicationData = {
2-
recipientsCounter: string;
32
anchorAddress: string;
43
recipientAddress: string;
54
metadata: {
@@ -8,6 +7,10 @@ export type DVMDApplicationData = {
87
};
98
};
109

10+
export type DVMDExtendedApplicationData = DVMDApplicationData & {
11+
recipientsCounter: string;
12+
};
13+
1114
export type DGApplicationData = {
1215
recipientAddress: string;
1316
anchorAddress: string;

0 commit comments

Comments
 (0)