diff --git a/.changeset/flat-hairs-study.md b/.changeset/flat-hairs-study.md new file mode 100644 index 000000000..d74b5cfae --- /dev/null +++ b/.changeset/flat-hairs-study.md @@ -0,0 +1,5 @@ +--- +'@graphprotocol/graph-cli': patch +--- + +handle sized arrays in abi when changetype diff --git a/packages/cli/src/scaffold/__snapshots__/ethereum.test.ts.snap b/packages/cli/src/scaffold/__snapshots__/ethereum.test.ts.snap index b76a3860d..42cc9485d 100644 --- a/packages/cli/src/scaffold/__snapshots__/ethereum.test.ts.snap +++ b/packages/cli/src/scaffold/__snapshots__/ethereum.test.ts.snap @@ -30,7 +30,7 @@ dataSources: handler: handleExampleEvent - event: ExampleEvent(bytes32) handler: handleExampleEvent1 - - event: TupleArrayEvent((uint256,address)[],address[]) + - event: TupleArrayEvent((uint256,address)[],address[],address[10]) handler: handleTupleArrayEvent file: ./src/contract.ts " @@ -153,6 +153,7 @@ export function handleTupleArrayEvent(event: TupleArrayEventEvent): void { ) entity.tupleArray = changetype(event.params.tupleArray) entity.addressArray = changetype(event.params.addressArray) + entity.addressSizedArray = changetype(event.params.addressSizedArray) entity.blockNumber = event.block.number entity.blockTimestamp = event.block.timestamp @@ -266,6 +267,7 @@ type TupleArrayEvent @entity(immutable: true) { id: Bytes! tupleArray: [Bytes!]! # tuple[] addressArray: [Bytes!]! # address[] + addressSizedArray: [Bytes!]! # address[10] blockNumber: BigInt! blockTimestamp: BigInt! transactionHash: Bytes! @@ -409,7 +411,8 @@ export function createExampleEvent1Event(a: Bytes): ExampleEvent1 { export function createTupleArrayEventEvent( tupleArray: Array, - addressArray: Array
+ addressArray: Array
, + addressSizedArray: Array
): TupleArrayEvent { let tupleArrayEventEvent = changetype(newMockEvent()) @@ -427,6 +430,12 @@ export function createTupleArrayEventEvent( ethereum.Value.fromAddressArray(addressArray) ) ) + tupleArrayEventEvent.parameters.push( + new ethereum.EventParam( + "addressSizedArray", + ethereum.Value.fromAddressArray(addressSizedArray) + ) + ) return tupleArrayEventEvent } @@ -569,7 +578,8 @@ export function createExampleEvent1Event(a: Bytes): ExampleEvent1 { export function createTupleArrayEventEvent( tupleArray: Array, - addressArray: Array
+ addressArray: Array
, + addressSizedArray: Array
): TupleArrayEvent { let tupleArrayEventEvent = changetype(newMockEvent()) @@ -587,6 +597,12 @@ export function createTupleArrayEventEvent( ethereum.Value.fromAddressArray(addressArray) ) ) + tupleArrayEventEvent.parameters.push( + new ethereum.EventParam( + "addressSizedArray", + ethereum.Value.fromAddressArray(addressSizedArray) + ) + ) return tupleArrayEventEvent } diff --git a/packages/cli/src/scaffold/ethereum.test.ts b/packages/cli/src/scaffold/ethereum.test.ts index da4d7e999..9652039ca 100644 --- a/packages/cli/src/scaffold/ethereum.test.ts +++ b/packages/cli/src/scaffold/ethereum.test.ts @@ -69,6 +69,7 @@ const TEST_TUPLE_ARRAY_EVENT = { ], }, { name: 'addressArray', type: 'address[]' }, + { name: 'addressSizedArray', type: 'address[10]' }, ], }; diff --git a/packages/cli/src/scaffold/mapping.ts b/packages/cli/src/scaffold/mapping.ts index a363f21ca..39d7196f1 100644 --- a/packages/cli/src/scaffold/mapping.ts +++ b/packages/cli/src/scaffold/mapping.ts @@ -15,12 +15,13 @@ export const generateFieldAssignment = ( ): { assignment: string; imports: string[] } => { const safeKey = key.map(k => util.handleReservedWord(k)); const safeValue = value.map(v => util.handleReservedWord(v)); + const cleanType = type.replace(/\[\d+\]/g, '[]'); let rightSide = `event.params.${safeValue.join('.')}`; const imports = []; - if (type in VALUE_TYPECAST_MAP) { - const castTo = VALUE_TYPECAST_MAP[type]; + if (cleanType in VALUE_TYPECAST_MAP) { + const castTo = VALUE_TYPECAST_MAP[cleanType]; rightSide = `changetype<${castTo}>(${rightSide})`; imports.push(castTo.replace('[]', '')); }