Skip to content

Commit 84e175d

Browse files
authored
feat: inprogress update of balance sheet managers (#289)
Fixes #277
1 parent f7dfb6c commit 84e175d

4 files changed

Lines changed: 66 additions & 10 deletions

File tree

ponder.schema.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -941,12 +941,19 @@ export const HoldingEscrowRelations = relations(HoldingEscrow, ({ one }) => ({
941941
}),
942942
}));
943943

944+
export const PoolManagerCrosschainInProgressTypes = [`CanManage`, `CanNotManage`] as const;
945+
export const PoolManagerCrosschainInProgress = onchainEnum(
946+
"pool_manager_crosschain_in_progress",
947+
PoolManagerCrosschainInProgressTypes
948+
);
949+
944950
const PoolManagerColumns = (t: PgColumnsBuilders) => ({
945951
address: t.hex().notNull(),
946952
centrifugeId: t.text().notNull(),
947953
poolId: t.bigint().notNull(),
948954
isHubManager: t.boolean().notNull().default(false),
949955
isBalancesheetManager: t.boolean().notNull().default(false),
956+
crosschainInProgress: PoolManagerCrosschainInProgress("pool_manager_crosschain_in_progress"),
950957
...defaultColumns(t),
951958
});
952959

src/handlers/balanceSheetHandlers.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -110,27 +110,29 @@ multiMapper("balanceSheet:UpdateManager", async ({ event, context }) => {
110110

111111
const centrifugeId = await BlockchainService.getCentrifugeId(context);
112112

113-
const { who: manager, poolId, canManage } = event.args;
113+
const { who: _manager, poolId, canManage } = event.args;
114114

115-
const account = (await AccountService.getOrInit(
115+
const managerAddress = _manager.toLowerCase().substring(0, 42) as `0x${string}`;
116+
117+
const _account = (await AccountService.getOrInit(
116118
context,
117119
{
118-
address: manager,
120+
address: managerAddress,
119121
},
120122
event
121123
)) as AccountService;
122124

123-
const { address: managerAddress } = account.read();
124-
125125
const poolManager = (await PoolManagerService.getOrInit(
126126
context,
127127
{
128128
address: managerAddress,
129129
centrifugeId,
130130
poolId,
131131
},
132-
event
132+
event,
133+
undefined,
134+
true
133135
)) as PoolManagerService;
134-
poolManager.setIsBalancesheetManager(canManage);
135-
await poolManager.save(event);
136+
137+
await poolManager.setCrosschainInProgress().setIsBalancesheetManager(canManage).save(event);
136138
});

src/handlers/hubHandlers.ts

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
import { multiMapper } from "../helpers/multiMapper";
22
import { logEvent, serviceError } from "../helpers/logger";
3-
import { WhitelistedInvestorService, TokenService, PoolSpokeBlockchainService } from "../services";
3+
import {
4+
WhitelistedInvestorService,
5+
TokenService,
6+
PoolSpokeBlockchainService,
7+
PoolManagerService,
8+
AccountService,
9+
} from "../services";
410

511
multiMapper("hub:NotifyPool", async ({ event, context }) => {
612
logEvent(event, context, "hub:NotifyPool");
@@ -66,6 +72,30 @@ multiMapper("hub:UpdateRestriction", async ({ event, context }) => {
6672
}
6773
});
6874

75+
multiMapper("hub:UpdateBalanceSheetManager", async ({ event, context }) => {
76+
logEvent(event, context, "hub:UpdateBalanceSheetManager");
77+
const { poolId, manager: _manager, canManage, centrifugeId: spokeCentrifugeId } = event.args;
78+
const manager = _manager.toLowerCase().substring(0, 42) as `0x${string}`;
79+
80+
const _account = (await AccountService.getOrInit(
81+
context,
82+
{
83+
address: manager,
84+
},
85+
event
86+
)) as AccountService;
87+
88+
const poolManager = (await PoolManagerService.getOrInit(
89+
context,
90+
{ poolId, centrifugeId: spokeCentrifugeId.toString(), address: manager },
91+
event,
92+
undefined,
93+
true
94+
)) as PoolManagerService;
95+
poolManager.setCrosschainInProgress(canManage ? `CanManage` : `CanNotManage`);
96+
await poolManager.save(event);
97+
});
98+
6999
enum RestrictionType {
70100
"Invalid",
71101
"Member",

src/services/PoolManagerService.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import { PoolManager } from "ponder:schema";
1+
import { PoolManager, PoolManagerCrosschainInProgressTypes } from "ponder:schema";
22
import { Service, mixinCommonStatics } from "./Service";
3+
import { serviceLog } from "../helpers/logger";
34

45
/**
56
* Service class for managing PoolManager entities.
@@ -27,6 +28,7 @@ export class PoolManagerService extends mixinCommonStatics(
2728
* @returns The service instance for method chaining
2829
*/
2930
public setIsHubManager(isHubManager: boolean) {
31+
serviceLog(`Setting isHubManager to ${isHubManager}`);
3032
this.data.isHubManager = isHubManager;
3133
return this;
3234
}
@@ -38,7 +40,22 @@ export class PoolManagerService extends mixinCommonStatics(
3840
* @returns The service instance for method chaining
3941
*/
4042
public setIsBalancesheetManager(isBalancesheetManager: boolean) {
43+
serviceLog(`Setting isBalancesheetManager to ${isBalancesheetManager}`);
4144
this.data.isBalancesheetManager = isBalancesheetManager;
4245
return this;
4346
}
47+
48+
/**
49+
* Sets the crosschain progress for the manager.
50+
*
51+
* @param crosschainProgress - The value to set for crosschainProgress
52+
* @returns The service instance for method chaining
53+
*/
54+
public setCrosschainInProgress(
55+
crosschainInProgress?: (typeof PoolManagerCrosschainInProgressTypes)[number]
56+
) {
57+
this.data.crosschainInProgress = crosschainInProgress ?? null;
58+
serviceLog(`Setting crosschainInProgress to ${crosschainInProgress}`);
59+
return this;
60+
}
4461
}

0 commit comments

Comments
 (0)