Skip to content

Commit 1918470

Browse files
authored
feat!: v1 encoding and encoding improvements (FuelLabs#1780)
1 parent 618c0c2 commit 1918470

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+1050
-572
lines changed

.changeset/mighty-berries-try.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@fuel-ts/abi-coder": minor
3+
"@fuel-ts/errors": minor
4+
---
5+
6+
Introduce the v1 encoding scheme and use correct file naming conventions for `@fuel-ts/abi-coder`

packages/abi-coder/src/AbiCoder.ts

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { ResolvedAbiType } from './ResolvedAbiType';
2+
import type { DecodedValue, InputValue, Coder } from './encoding/coders/AbstractCoder';
3+
import { getCoderForEncoding } from './encoding/strategies/getCoderForEncoding';
4+
import type { EncodingOptions } from './types/EncodingOptions';
5+
import type { JsonAbi, JsonAbiArgument } from './types/JsonAbi';
6+
7+
export abstract class AbiCoder {
8+
static getCoder(
9+
abi: JsonAbi,
10+
argument: JsonAbiArgument,
11+
options: EncodingOptions = {
12+
isSmallBytes: false,
13+
}
14+
): Coder {
15+
const resolvedAbiType = new ResolvedAbiType(abi, argument);
16+
return getCoderForEncoding(options.encoding)(resolvedAbiType, options);
17+
}
18+
19+
static encode(
20+
abi: JsonAbi,
21+
argument: JsonAbiArgument,
22+
value: InputValue,
23+
options?: EncodingOptions
24+
) {
25+
return this.getCoder(abi, argument, options).encode(value);
26+
}
27+
28+
static decode(
29+
abi: JsonAbi,
30+
argument: JsonAbiArgument,
31+
data: Uint8Array,
32+
offset: number,
33+
options?: EncodingOptions
34+
): [DecodedValue | undefined, number] {
35+
return this.getCoder(abi, argument, options).decode(data, offset) as [
36+
DecodedValue | undefined,
37+
number,
38+
];
39+
}
40+
}

packages/abi-coder/src/function-fragment.ts packages/abi-coder/src/FunctionFragment.ts

+10-10
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,21 @@ import { bn } from '@fuel-ts/math';
55
import { arrayify } from '@fuel-ts/utils';
66
import { sha256 } from 'ethers';
77

8-
import { AbiCoder } from './abi-coder';
9-
import type { DecodedValue, InputValue } from './coders/abstract-coder';
10-
import { ByteCoder } from './coders/v0/byte';
11-
import { TupleCoder } from './coders/v0/tuple';
12-
import { VecCoder } from './coders/v0/vec';
13-
import { OPTION_CODER_TYPE } from './constants';
8+
import { AbiCoder } from './AbiCoder';
9+
import { ResolvedAbiType } from './ResolvedAbiType';
10+
import type { DecodedValue, InputValue } from './encoding/coders/AbstractCoder';
11+
import { ByteCoder } from './encoding/coders/v0/ByteCoder';
12+
import { TupleCoder } from './encoding/coders/v0/TupleCoder';
13+
import { VecCoder } from './encoding/coders/v0/VecCoder';
1414
import type {
1515
JsonAbi,
1616
JsonAbiArgument,
1717
JsonAbiFunction,
1818
JsonAbiFunctionAttribute,
19-
} from './json-abi';
20-
import { ResolvedAbiType } from './resolved-abi-type';
21-
import type { Uint8ArrayWithDynamicData } from './utilities';
22-
import { isPointerType, unpackDynamicData, findOrThrow, isHeapType } from './utilities';
19+
} from './types/JsonAbi';
20+
import { OPTION_CODER_TYPE } from './utils/constants';
21+
import type { Uint8ArrayWithDynamicData } from './utils/utilities';
22+
import { isPointerType, unpackDynamicData, findOrThrow, isHeapType } from './utils/utilities';
2323

2424
export class FunctionFragment<
2525
TAbi extends JsonAbi = JsonAbi,

packages/abi-coder/src/interface.ts packages/abi-coder/src/Interface.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ import { ErrorCode, FuelError } from '@fuel-ts/errors';
33
import type { BytesLike } from '@fuel-ts/interfaces';
44
import { arrayify } from '@fuel-ts/utils';
55

6-
import { AbiCoder } from './abi-coder';
7-
import type { InputValue } from './coders/abstract-coder';
8-
import { FunctionFragment } from './function-fragment';
9-
import type { JsonAbi, JsonAbiConfigurable } from './json-abi';
10-
import { findOrThrow } from './utilities';
6+
import { AbiCoder } from './AbiCoder';
7+
import { FunctionFragment } from './FunctionFragment';
8+
import type { InputValue } from './encoding/coders/AbstractCoder';
9+
import type { JsonAbi, JsonAbiConfigurable } from './types/JsonAbi';
10+
import { findOrThrow } from './utils/utilities';
1111

1212
export class Interface<TAbi extends JsonAbi = JsonAbi> {
1313
readonly functions!: Record<string, FunctionFragment>;
@@ -101,7 +101,7 @@ export class Interface<TAbi extends JsonAbi = JsonAbi> {
101101
const { loggedType } = findOrThrow(this.jsonAbi.loggedTypes, (type) => type.logId === logId);
102102

103103
return AbiCoder.decode(this.jsonAbi, loggedType, arrayify(data), 0, {
104-
version: this.jsonAbi.encoding,
104+
encoding: this.jsonAbi.encoding,
105105
});
106106
}
107107

packages/abi-coder/src/resolved-abi-type.ts packages/abi-coder/src/ResolvedAbiType.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { ErrorCode, FuelError } from '@fuel-ts/errors';
22

3-
import { arrayRegEx, enumRegEx, genericRegEx, stringRegEx, structRegEx } from './constants';
4-
import type { JsonAbi, JsonAbiArgument } from './json-abi';
5-
import { findOrThrow } from './utilities';
3+
import type { JsonAbi, JsonAbiArgument } from './types/JsonAbi';
4+
import { arrayRegEx, enumRegEx, genericRegEx, stringRegEx, structRegEx } from './utils/constants';
5+
import { findOrThrow } from './utils/utilities';
66

77
export class ResolvedAbiType {
88
readonly abi: JsonAbi;

packages/abi-coder/src/abi-coder.ts

-205
This file was deleted.

packages/abi-coder/src/coders/v1/std-string.test.ts

-46
This file was deleted.

0 commit comments

Comments
 (0)