Skip to content

Commit 5ffce65

Browse files
authoredFeb 27, 2025··
graph init: handle event types with sized array (#1969)
* handle sized array * add test
1 parent 388ee5a commit 5ffce65

File tree

4 files changed

+28
-5
lines changed

4 files changed

+28
-5
lines changed
 

Diff for: ‎.changeset/flat-hairs-study.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@graphprotocol/graph-cli': patch
3+
---
4+
5+
handle sized arrays in abi when changetype

Diff for: ‎packages/cli/src/scaffold/__snapshots__/ethereum.test.ts.snap

+19-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ dataSources:
3030
handler: handleExampleEvent
3131
- event: ExampleEvent(bytes32)
3232
handler: handleExampleEvent1
33-
- event: TupleArrayEvent((uint256,address)[],address[])
33+
- event: TupleArrayEvent((uint256,address)[],address[],address[10])
3434
handler: handleTupleArrayEvent
3535
file: ./src/contract.ts
3636
"
@@ -153,6 +153,7 @@ export function handleTupleArrayEvent(event: TupleArrayEventEvent): void {
153153
)
154154
entity.tupleArray = changetype<Bytes[]>(event.params.tupleArray)
155155
entity.addressArray = changetype<Bytes[]>(event.params.addressArray)
156+
entity.addressSizedArray = changetype<Bytes[]>(event.params.addressSizedArray)
156157
157158
entity.blockNumber = event.block.number
158159
entity.blockTimestamp = event.block.timestamp
@@ -266,6 +267,7 @@ type TupleArrayEvent @entity(immutable: true) {
266267
id: Bytes!
267268
tupleArray: [Bytes!]! # tuple[]
268269
addressArray: [Bytes!]! # address[]
270+
addressSizedArray: [Bytes!]! # address[10]
269271
blockNumber: BigInt!
270272
blockTimestamp: BigInt!
271273
transactionHash: Bytes!
@@ -409,7 +411,8 @@ export function createExampleEvent1Event(a: Bytes): ExampleEvent1 {
409411
410412
export function createTupleArrayEventEvent(
411413
tupleArray: Array<ethereum.Tuple>,
412-
addressArray: Array<Address>
414+
addressArray: Array<Address>,
415+
addressSizedArray: Array<Address>
413416
): TupleArrayEvent {
414417
let tupleArrayEventEvent = changetype<TupleArrayEvent>(newMockEvent())
415418
@@ -427,6 +430,12 @@ export function createTupleArrayEventEvent(
427430
ethereum.Value.fromAddressArray(addressArray)
428431
)
429432
)
433+
tupleArrayEventEvent.parameters.push(
434+
new ethereum.EventParam(
435+
"addressSizedArray",
436+
ethereum.Value.fromAddressArray(addressSizedArray)
437+
)
438+
)
430439
431440
return tupleArrayEventEvent
432441
}
@@ -569,7 +578,8 @@ export function createExampleEvent1Event(a: Bytes): ExampleEvent1 {
569578
570579
export function createTupleArrayEventEvent(
571580
tupleArray: Array<ethereum.Tuple>,
572-
addressArray: Array<Address>
581+
addressArray: Array<Address>,
582+
addressSizedArray: Array<Address>
573583
): TupleArrayEvent {
574584
let tupleArrayEventEvent = changetype<TupleArrayEvent>(newMockEvent())
575585
@@ -587,6 +597,12 @@ export function createTupleArrayEventEvent(
587597
ethereum.Value.fromAddressArray(addressArray)
588598
)
589599
)
600+
tupleArrayEventEvent.parameters.push(
601+
new ethereum.EventParam(
602+
"addressSizedArray",
603+
ethereum.Value.fromAddressArray(addressSizedArray)
604+
)
605+
)
590606
591607
return tupleArrayEventEvent
592608
}

Diff for: ‎packages/cli/src/scaffold/ethereum.test.ts

+1
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ const TEST_TUPLE_ARRAY_EVENT = {
6969
],
7070
},
7171
{ name: 'addressArray', type: 'address[]' },
72+
{ name: 'addressSizedArray', type: 'address[10]' },
7273
],
7374
};
7475

Diff for: ‎packages/cli/src/scaffold/mapping.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,13 @@ export const generateFieldAssignment = (
1515
): { assignment: string; imports: string[] } => {
1616
const safeKey = key.map(k => util.handleReservedWord(k));
1717
const safeValue = value.map(v => util.handleReservedWord(v));
18+
const cleanType = type.replace(/\[\d+\]/g, '[]');
1819

1920
let rightSide = `event.params.${safeValue.join('.')}`;
2021
const imports = [];
2122

22-
if (type in VALUE_TYPECAST_MAP) {
23-
const castTo = VALUE_TYPECAST_MAP[type];
23+
if (cleanType in VALUE_TYPECAST_MAP) {
24+
const castTo = VALUE_TYPECAST_MAP[cleanType];
2425
rightSide = `changetype<${castTo}>(${rightSide})`;
2526
imports.push(castTo.replace('[]', ''));
2627
}

0 commit comments

Comments
 (0)
Please sign in to comment.