Skip to content

Commit 5a52c22

Browse files
authored
feat: add tokenId and token to crosschainPayloads (#275)
Fixes #274
1 parent 4d2dac3 commit 5a52c22

4 files changed

Lines changed: 27 additions & 4 deletions

File tree

ponder.schema.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1102,6 +1102,7 @@ const CrosschainPayloadColumns = (t: PgColumnsBuilders) => ({
11021102
toCentrifugeId: t.text().notNull(),
11031103
rawData: t.hex().notNull(),
11041104
poolId: t.bigint(),
1105+
tokenId: t.hex(),
11051106
status: CrosschainPayloadStatus("crosschain_payload_status").notNull(),
11061107
gasLimit: t.bigint(),
11071108
gasPaid: t.bigint(),
@@ -1142,6 +1143,10 @@ export const CrosschainPayloadRelations = relations(CrosschainPayload, ({ one, m
11421143
fields: [CrosschainPayload.poolId],
11431144
references: [Pool.id],
11441145
}),
1146+
token: one(Token, {
1147+
fields: [CrosschainPayload.tokenId],
1148+
references: [Token.id],
1149+
}),
11451150
adapterParticipations: many(AdapterParticipation, {
11461151
relationName: "adapterParticipations",
11471152
}),
@@ -1162,6 +1167,7 @@ const CrosschainMessageColumns = (t: PgColumnsBuilders) => ({
11621167
id: t.hex().notNull(),
11631168
index: t.integer().notNull().default(0),
11641169
poolId: t.bigint(),
1170+
tokenId: t.hex(),
11651171
payloadId: t.hex(),
11661172
payloadIndex: t.integer(),
11671173
messageType: t.text().notNull(),
@@ -1200,6 +1206,10 @@ export const CrosschainMessageRelations = relations(CrosschainMessage, ({ one })
12001206
fields: [CrosschainMessage.poolId],
12011207
references: [Pool.id],
12021208
}),
1209+
token: one(Token, {
1210+
fields: [CrosschainMessage.tokenId],
1211+
references: [Token.id],
1212+
}),
12031213
fromBlockchain: one(Blockchain, {
12041214
fields: [CrosschainMessage.fromCentrifugeId],
12051215
references: [Blockchain.centrifugeId],

src/handlers/gatewayHandlers.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,15 @@ multiMapper("gateway:PrepareMessage", async ({ event, context }) => {
3636

3737
const rawData = `0x${Buffer.from(messageBuffer.toString("hex"))}` as `0x${string}`;
3838
const data = decodeMessage(messageType, messagePayload, versionIndex);
39+
const tokenId = data && "scId" in data ? (data.scId! as `0x${string}`) : null;
3940

4041
const _crosschainMessage = (await CrosschainMessageService.insert(
4142
context,
4243
{
4344
id: messageId,
4445
index: messageCount,
4546
poolId: poolId || null,
47+
tokenId,
4648
fromCentrifugeId,
4749
toCentrifugeId: toCentrifugeId.toString(),
4850
messageType: messageType,
@@ -77,6 +79,7 @@ multiMapper("gateway:UnderpaidBatch", async ({ event, context }) => {
7779
});
7880

7981
const poolIdSet = new Set<bigint>();
82+
const tokenIdSet = new Set<`0x${string}`>();
8083
const messages = extractMessagesFromPayload(batch, versionIndex);
8184
for (const message of messages) {
8285
const messageBuffer = Buffer.from(message.substring(2), "hex");
@@ -116,12 +119,16 @@ multiMapper("gateway:UnderpaidBatch", async ({ event, context }) => {
116119
const poolId = "poolId" in data ? BigInt(data.poolId!) : null;
117120
if (poolId) poolIdSet.add(poolId);
118121

122+
const tokenId = "scId" in data ? (data.scId as `0x${string}`) : null;
123+
if (tokenId) tokenIdSet.add(tokenId);
124+
119125
const _crosschainMessage = (await CrosschainMessageService.insert(
120126
context,
121127
{
122128
id: messageId,
123129
index: messageIndex,
124130
poolId,
131+
tokenId,
125132
fromCentrifugeId,
126133
toCentrifugeId: toCentrifugeId.toString(),
127134
messageType: messageType,
@@ -142,13 +149,15 @@ multiMapper("gateway:UnderpaidBatch", async ({ event, context }) => {
142149
return;
143150
}
144151
const poolId = Array.from(poolIdSet).pop() ?? null;
152+
const tokenId = Array.from(tokenIdSet).pop() ?? null;
145153

146154
const crosschainPayload = (await CrosschainPayloadService.insert(
147155
context,
148156
{
149157
id: payloadId,
150158
index: payloadIndex,
151159
poolId,
160+
tokenId,
152161
rawData: batch,
153162
toCentrifugeId: toCentrifugeId.toString(),
154163
fromCentrifugeId: fromCentrifugeId,

src/handlers/multiAdapterHandlers.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ multiMapper("multiAdapter:SendPayload", async ({ event, context }) => {
5252
const payloadIndex = await CrosschainPayloadService.count(context, {
5353
id: payloadId,
5454
});
55-
const poolId = await CrosschainMessageService.linkMessagesToPayload(
55+
const [poolId, tokenId] = await CrosschainMessageService.linkMessagesToPayload(
5656
context,
5757
event,
5858
messageIds,
@@ -69,6 +69,7 @@ multiMapper("multiAdapter:SendPayload", async ({ event, context }) => {
6969
toCentrifugeId: toCentrifugeId.toString(),
7070
fromCentrifugeId: fromCentrifugeId,
7171
poolId,
72+
tokenId,
7273
gasLimit,
7374
gasPaid,
7475
...timestamper("prepared", event),

src/services/CrosschainMessageService.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,10 @@ export class CrosschainMessageService extends mixinCommonStatics(
139139
messageIds: `0x${string}`[],
140140
payloadId: `0x${string}`,
141141
payloadIndex: number
142-
) {
142+
): Promise<[poolId: bigint | null, tokenId: `0x${string}` | null]> {
143143
const crosschainMessageSaves = [];
144144
const poolIdSet = new Set<bigint>();
145+
const tokenIdSet = new Set<`0x${string}`>();
145146
for (const messageId of messageIds) {
146147
const crosschainMessages = (await CrosschainMessageService.query(context, {
147148
id: messageId,
@@ -154,15 +155,17 @@ export class CrosschainMessageService extends mixinCommonStatics(
154155
continue;
155156
}
156157
const crosschainMessage = crosschainMessages.shift()!;
157-
const { poolId } = crosschainMessage.read();
158+
const { poolId, tokenId } = crosschainMessage.read();
158159
crosschainMessage.setPayloadId(payloadId, payloadIndex);
159160
crosschainMessageSaves.push(crosschainMessage.save(event));
160161
if (poolId) poolIdSet.add(poolId);
162+
if (tokenId) tokenIdSet.add(tokenId);
161163
}
162164
await Promise.all(crosschainMessageSaves);
163165
const poolIds = Array.from(poolIdSet);
166+
const tokenIds = Array.from(tokenIdSet);
164167
if (poolIds.length > 1) throw new Error("Multiple pools found among messages");
165-
return poolIds.pop() ?? null;
168+
return [poolIds.pop() ?? null, tokenIds.pop() ?? null];
166169
}
167170

168171
/**

0 commit comments

Comments
 (0)