From 5ff14d990243519a462603e58860f7113039c844 Mon Sep 17 00:00:00 2001 From: Daniel Bate Date: Sun, 9 Jun 2024 13:58:29 +0100 Subject: [PATCH 1/5] feat: remove encode and decode function data on interface --- packages/abi-coder/src/Interface.ts | 17 ----- packages/abi-coder/test/Interface.test.ts | 18 ----- .../src/templates/contract/dts.hbs | 8 -- .../contract-with-configurable/dts.hbs | 4 - .../test/fixtures/templates/contract/dts.hbs | 74 ------------------- 5 files changed, 121 deletions(-) diff --git a/packages/abi-coder/src/Interface.ts b/packages/abi-coder/src/Interface.ts index d2922bf5f47..c2f9404bb69 100644 --- a/packages/abi-coder/src/Interface.ts +++ b/packages/abi-coder/src/Interface.ts @@ -49,23 +49,6 @@ export class Interface { ); } - decodeFunctionData(functionFragment: FunctionFragment | string, data: BytesLike): any { - const fragment = - typeof functionFragment === 'string' ? this.getFunction(functionFragment) : functionFragment; - - return fragment.decodeArguments(data); - } - - encodeFunctionData( - functionFragment: FunctionFragment | string, - values: Array - ): Uint8Array { - const fragment = - typeof functionFragment === 'string' ? this.getFunction(functionFragment) : functionFragment; - - return fragment.encodeArguments(values); - } - // Decode the result of a function call decodeFunctionResult(functionFragment: FunctionFragment | string, data: BytesLike): any { const fragment = diff --git a/packages/abi-coder/test/Interface.test.ts b/packages/abi-coder/test/Interface.test.ts index d93c26ca5f9..3d27d49a9f8 100644 --- a/packages/abi-coder/test/Interface.test.ts +++ b/packages/abi-coder/test/Interface.test.ts @@ -102,24 +102,6 @@ describe('Abi interface', () => { it('raises an error when function is not found', () => { const fnName = 'doesnt_exist'; expect(() => exhaustiveExamplesInterface.getFunction(fnName)).toThrow(); - - expect(() => exhaustiveExamplesInterface.encodeFunctionData(fnName, [123])).toThrow(); - - expect(() => - exhaustiveExamplesInterface.decodeFunctionData(fnName, new Uint8Array()) - ).toThrow(); - }); - - it('raises an error if the arguments do not match the function input types', () => { - const values = [11, 11]; - - const errMsg = `Mismatch between provided arguments and expected ABI inputs.` - .concat(` Provided ${values.length} arguments,`) - .concat(` but expected 1 (excluding 0 optional inputs).`); - - expect(() => exhaustiveExamplesInterface.encodeFunctionData('entry_one', values)).toThrow( - errMsg - ); }); }); diff --git a/packages/abi-typegen/src/templates/contract/dts.hbs b/packages/abi-typegen/src/templates/contract/dts.hbs index 6e1e5bf4e89..c9000f005a3 100644 --- a/packages/abi-typegen/src/templates/contract/dts.hbs +++ b/packages/abi-typegen/src/templates/contract/dts.hbs @@ -54,14 +54,6 @@ interface {{capitalizedName}}Interface extends Interface { {{this}}: FunctionFragment; {{/each}} }; - - {{#each encoders}} - encodeFunctionData(functionFragment: '{{functionName}}', values: [{{input}}]): Uint8Array; - {{/each}} - - {{#each decoders}} - decodeFunctionData(functionFragment: '{{functionName}}', data: BytesLike): DecodedValue; - {{/each}} } diff --git a/packages/abi-typegen/test/fixtures/templates/contract-with-configurable/dts.hbs b/packages/abi-typegen/test/fixtures/templates/contract-with-configurable/dts.hbs index 23410fcf29e..158fd1a888e 100644 --- a/packages/abi-typegen/test/fixtures/templates/contract-with-configurable/dts.hbs +++ b/packages/abi-typegen/test/fixtures/templates/contract-with-configurable/dts.hbs @@ -26,10 +26,6 @@ interface MyContractAbiInterface extends Interface { functions: { main: FunctionFragment; }; - - encodeFunctionData(functionFragment: 'main', values: [string, string]): Uint8Array; - - decodeFunctionData(functionFragment: 'main', data: BytesLike): DecodedValue; } export class MyContractAbi extends Contract { diff --git a/packages/abi-typegen/test/fixtures/templates/contract/dts.hbs b/packages/abi-typegen/test/fixtures/templates/contract/dts.hbs index 1fa4d62b5e5..384c6e7d18b 100644 --- a/packages/abi-typegen/test/fixtures/templates/contract/dts.hbs +++ b/packages/abi-typegen/test/fixtures/templates/contract/dts.hbs @@ -91,80 +91,6 @@ interface MyContractAbiInterface extends Interface { types_vector_option: FunctionFragment; types_vector_u8: FunctionFragment; }; - - encodeFunctionData(functionFragment: 'type_address', values: [AddressInput]): Uint8Array; - encodeFunctionData(functionFragment: 'type_contract_id', values: [ContractIdInput]): Uint8Array; - encodeFunctionData(functionFragment: 'type_external_enum', values: [ExternalEnumInput]): Uint8Array; - encodeFunctionData(functionFragment: 'type_external_struct', values: [ExternalStructInput]): Uint8Array; - encodeFunctionData(functionFragment: 'type_identity', values: [IdentityInput]): Uint8Array; - encodeFunctionData(functionFragment: 'types_array', values: [[BigNumberish, BigNumberish, BigNumberish]]): Uint8Array; - encodeFunctionData(functionFragment: 'types_asset_id', values: [AssetIdInput]): Uint8Array; - encodeFunctionData(functionFragment: 'types_b256', values: [string]): Uint8Array; - encodeFunctionData(functionFragment: 'types_b512', values: [string]): Uint8Array; - encodeFunctionData(functionFragment: 'types_bool', values: [boolean]): Uint8Array; - encodeFunctionData(functionFragment: 'types_bytes', values: [Bytes]): Uint8Array; - encodeFunctionData(functionFragment: 'types_empty', values: []): Uint8Array; - encodeFunctionData(functionFragment: 'types_empty_then_value', values: [BigNumberish]): Uint8Array; - encodeFunctionData(functionFragment: 'types_enum', values: [MyEnumInput]): Uint8Array; - encodeFunctionData(functionFragment: 'types_enum_with_vector', values: [EnumWithVectorInput]): Uint8Array; - encodeFunctionData(functionFragment: 'types_evm_address', values: [EvmAddress]): Uint8Array; - encodeFunctionData(functionFragment: 'types_generic_enum', values: [GenericEnumInput]): Uint8Array; - encodeFunctionData(functionFragment: 'types_generic_struct', values: [GenericStructWithEnumInput]): Uint8Array; - encodeFunctionData(functionFragment: 'types_option', values: [Option]): Uint8Array; - encodeFunctionData(functionFragment: 'types_option_geo', values: [Option]): Uint8Array; - encodeFunctionData(functionFragment: 'types_raw_slice', values: [RawSlice]): Uint8Array; - encodeFunctionData(functionFragment: 'types_result', values: [Result]): Uint8Array; - encodeFunctionData(functionFragment: 'types_std_string', values: [StdString]): Uint8Array; - encodeFunctionData(functionFragment: 'types_str', values: [string]): Uint8Array; - encodeFunctionData(functionFragment: 'types_struct', values: [MyStructInput]): Uint8Array; - encodeFunctionData(functionFragment: 'types_tuple', values: [[BigNumberish, BigNumberish, BigNumberish]]): Uint8Array; - encodeFunctionData(functionFragment: 'types_u16', values: [BigNumberish]): Uint8Array; - encodeFunctionData(functionFragment: 'types_u256', values: [BigNumberish]): Uint8Array; - encodeFunctionData(functionFragment: 'types_u32', values: [BigNumberish]): Uint8Array; - encodeFunctionData(functionFragment: 'types_u64', values: [BigNumberish]): Uint8Array; - encodeFunctionData(functionFragment: 'types_u8', values: [BigNumberish]): Uint8Array; - encodeFunctionData(functionFragment: 'types_value_then_empty', values: [BigNumberish]): Uint8Array; - encodeFunctionData(functionFragment: 'types_value_then_empty_then_value', values: [BigNumberish, BigNumberish]): Uint8Array; - encodeFunctionData(functionFragment: 'types_vector_geo', values: [Vec]): Uint8Array; - encodeFunctionData(functionFragment: 'types_vector_option', values: [Vec]): Uint8Array; - encodeFunctionData(functionFragment: 'types_vector_u8', values: [Vec]): Uint8Array; - - decodeFunctionData(functionFragment: 'type_address', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'type_contract_id', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'type_external_enum', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'type_external_struct', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'type_identity', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_array', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_asset_id', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_b256', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_b512', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_bool', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_bytes', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_empty', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_empty_then_value', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_enum', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_enum_with_vector', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_evm_address', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_generic_enum', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_generic_struct', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_option', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_option_geo', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_raw_slice', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_result', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_std_string', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_str', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_struct', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_tuple', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_u16', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_u256', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_u32', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_u64', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_u8', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_value_then_empty', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_value_then_empty_then_value', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_vector_geo', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_vector_option', data: BytesLike): DecodedValue; - decodeFunctionData(functionFragment: 'types_vector_u8', data: BytesLike): DecodedValue; } export class MyContractAbi extends Contract { From 22156a8b844a38fd8489169e6bf907701112668a Mon Sep 17 00:00:00 2001 From: Daniel Bate Date: Sun, 9 Jun 2024 13:59:27 +0100 Subject: [PATCH 2/5] feat: remove encoding version export --- packages/abi-coder/src/index.ts | 1 - packages/program/src/types.ts | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/abi-coder/src/index.ts b/packages/abi-coder/src/index.ts index 93c8078e46f..22ec5799f2b 100644 --- a/packages/abi-coder/src/index.ts +++ b/packages/abi-coder/src/index.ts @@ -12,6 +12,5 @@ export { UTXO_ID_LEN, BYTES_32, calculateVmTxMemory, - type EncodingVersion, ENCODING_V1, } from './utils/constants'; diff --git a/packages/program/src/types.ts b/packages/program/src/types.ts index 7a7eff538c4..02645fe0a8a 100644 --- a/packages/program/src/types.ts +++ b/packages/program/src/types.ts @@ -1,4 +1,4 @@ -import type { FunctionFragment, JsonAbi, EncodingVersion } from '@fuel-ts/abi-coder'; +import type { FunctionFragment, JsonAbi } from '@fuel-ts/abi-coder'; import type { CoinQuantity, CoinQuantityLike } from '@fuel-ts/account'; import type { AbstractProgram, AbstractAddress, BytesLike } from '@fuel-ts/interfaces'; import type { BigNumberish } from '@fuel-ts/math'; @@ -13,7 +13,6 @@ export type ContractCall = { data: BytesLike; fnSelector: string; fnSelectorBytes: Uint8Array; - encoding?: EncodingVersion; amount?: BigNumberish; assetId?: BytesLike; gas?: BigNumberish; From 491d045c4caa0cc7faf88d7e0daa244167390460 Mon Sep 17 00:00:00 2001 From: Daniel Bate Date: Sun, 9 Jun 2024 14:02:23 +0100 Subject: [PATCH 3/5] feat: remove fnSelector from contract call type --- packages/program/src/functions/base-invocation-scope.ts | 2 -- packages/program/src/types.ts | 1 - 2 files changed, 3 deletions(-) diff --git a/packages/program/src/functions/base-invocation-scope.ts b/packages/program/src/functions/base-invocation-scope.ts index e86f3c07fbc..5e44a223db5 100644 --- a/packages/program/src/functions/base-invocation-scope.ts +++ b/packages/program/src/functions/base-invocation-scope.ts @@ -31,9 +31,7 @@ function createContractCall(funcScope: InvocationScopeLike): ContractCall { return { contractId: (program as AbstractContract).id, - fnSelector: func.selector, fnSelectorBytes: func.selectorBytes, - encoding: func.encoding, data, assetId: forward?.assetId, amount: forward?.amount, diff --git a/packages/program/src/types.ts b/packages/program/src/types.ts index 02645fe0a8a..501395c4e21 100644 --- a/packages/program/src/types.ts +++ b/packages/program/src/types.ts @@ -11,7 +11,6 @@ import type { FunctionInvocationScope } from './functions/invocation-scope'; export type ContractCall = { contractId: AbstractAddress; data: BytesLike; - fnSelector: string; fnSelectorBytes: Uint8Array; amount?: BigNumberish; assetId?: BytesLike; From 4f989c8d8ded1acca411735e8b330d36dd9ca15b Mon Sep 17 00:00:00 2001 From: Daniel Bate Date: Sun, 9 Jun 2024 14:03:40 +0100 Subject: [PATCH 4/5] chore: changeset --- .changeset/good-lobsters-lie.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/good-lobsters-lie.md diff --git a/.changeset/good-lobsters-lie.md b/.changeset/good-lobsters-lie.md new file mode 100644 index 00000000000..996c9d16cba --- /dev/null +++ b/.changeset/good-lobsters-lie.md @@ -0,0 +1,7 @@ +--- +"@fuel-ts/abi-typegen": minor +"@fuel-ts/abi-coder": minor +"@fuel-ts/program": patch +--- + +feat!: remove rendundant exports from `v1` encoding From 3586ce29e01c3a7a9121df2c3c5c51c0cf5b969a Mon Sep 17 00:00:00 2001 From: Daniel Bate Date: Sun, 9 Jun 2024 17:00:12 +0100 Subject: [PATCH 5/5] chore: update changeset --- .changeset/good-lobsters-lie.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/good-lobsters-lie.md b/.changeset/good-lobsters-lie.md index 996c9d16cba..72e3a34dc38 100644 --- a/.changeset/good-lobsters-lie.md +++ b/.changeset/good-lobsters-lie.md @@ -4,4 +4,4 @@ "@fuel-ts/program": patch --- -feat!: remove rendundant exports from `v1` encoding +feat!: remove redundant exports from `v1` encoding