From ab256bb9e28b02e1fabad02c957cba7ffc31a0ef Mon Sep 17 00:00:00 2001 From: YaroShkvorets Date: Tue, 25 Feb 2025 13:53:44 -0500 Subject: [PATCH] fix an issue with invalid ABI ref #1973 --- packages/cli/src/protocols/ethereum/abi.ts | 11 +++++++---- packages/cli/src/protocols/ethereum/codegen/abi.ts | 12 ++++++------ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/packages/cli/src/protocols/ethereum/abi.ts b/packages/cli/src/protocols/ethereum/abi.ts index bd77fe4de..381e16fe4 100644 --- a/packages/cli/src/protocols/ethereum/abi.ts +++ b/packages/cli/src/protocols/ethereum/abi.ts @@ -105,6 +105,9 @@ export default class ABI { (entry: any) => !entry.has('type') || functionTypes.includes(entry.get('type')), ); + // @ts-expect-error: Unused variable 'arr' + const arr = functions.toArray(); + // A function is a call function if it is nonpayable, payable or // not constant const mutabilityTypes = immutable.Set(['nonpayable', 'payable']); @@ -118,10 +121,10 @@ export default class ABI { return this.callFunctions() .filter((entry: any) => entry.get('type') !== 'constructor') .map((entry: any) => { - const name = entry.get('name', ''); - const inputs = entry - .get('inputs', immutable.List()) - .map((input: any) => buildSignatureParameter(input)); + const name = entry.get('name') || ''; + const inputs = (entry.get('inputs') ?? immutable.List()).map((input: any) => + buildSignatureParameter(input), + ); return `${name}(${inputs.join(',')})`; }); diff --git a/packages/cli/src/protocols/ethereum/codegen/abi.ts b/packages/cli/src/protocols/ethereum/codegen/abi.ts index 0773f74a1..e1cfb4c9b 100644 --- a/packages/cli/src/protocols/ethereum/codegen/abi.ts +++ b/packages/cli/src/protocols/ethereum/codegen/abi.ts @@ -85,7 +85,7 @@ export default class AbiCodeGenerator { // Generate getters and classes for function inputs util .disambiguateNames({ - values: fn.get('inputs', immutable.List()), + values: fn.get('inputs') ?? immutable.List(), // @ts-expect-error improve typings of disambiguateNames to handle iterables getName: (input, index) => input.get('name') || `value${index}`, // @ts-expect-error improve typings of disambiguateNames to handle iterables @@ -119,7 +119,7 @@ export default class AbiCodeGenerator { // Generate getters and classes for function outputs util .disambiguateNames({ - values: fn.get('outputs', immutable.List()), + values: fn.get('outputs') ?? immutable.List(), // @ts-expect-error improve typings of disambiguateNames to handle iterables getName: (output, index) => output.get('name') || `value${index}`, // @ts-expect-error improve typings of disambiguateNames to handle iterables @@ -198,7 +198,7 @@ export default class AbiCodeGenerator { // Enumerate inputs with duplicate names const inputs = util.disambiguateNames({ - values: event.get('inputs'), + values: event.get('inputs') ?? immutable.List(), // @ts-expect-error improve typings of disambiguateNames to handle iterables getName: (input, index) => input.get('name') || `param${index}`, // @ts-expect-error improve typings of disambiguateNames to handle iterables @@ -461,7 +461,7 @@ export default class AbiCodeGenerator { setName: (input, name) => input.set('name', name), }) as any; - if ((member as any).get('outputs', immutable.List()).size > 1) { + if ((member as any).get('outputs', immutable.List())?.size > 1) { simpleReturnType = false; // Create a type dedicated to holding the return values @@ -573,7 +573,7 @@ export default class AbiCodeGenerator { // Disambiguate inputs with duplicate names const inputs = util.disambiguateNames({ - values: (member as any).get('inputs', immutable.List()), + values: (member as any).get('inputs') ?? immutable.List(), // @ts-expect-error improve typings of disambiguateNames to handle iterables getName: (input, index) => input.get('name') || `param${index}`, // @ts-expect-error improve typings of disambiguateNames to handle iterables @@ -714,7 +714,7 @@ export default class AbiCodeGenerator { return this.abi.data.filter( member => member.get('type') === 'function' && - member.get('outputs', immutable.List()).size !== 0 && + member.get('outputs', immutable.List())?.size > 0 && (allowedMutability.includes(member.get('stateMutability')) || (member.get('stateMutability') === undefined && !member.get('payable', false))), );