@1inch/solidity-utils 3.5.6 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/contracts/PermitAndCall.sol +28 -0
  2. package/contracts/libraries/BytesMemory.sol +70 -0
  3. package/contracts/libraries/BytesStorage.sol +95 -0
  4. package/dist/src/prelude.js +3 -0
  5. package/dist/src/prelude.js.map +1 -1
  6. package/dist/typechain-types/contracts/PermitAndCall.d.ts +35 -0
  7. package/dist/typechain-types/contracts/PermitAndCall.js +3 -0
  8. package/dist/typechain-types/contracts/PermitAndCall.js.map +1 -0
  9. package/dist/typechain-types/contracts/index.d.ts +1 -1
  10. package/dist/typechain-types/contracts/{GasChecker.d.ts → libraries/BytesMemory.d.ts} +5 -5
  11. package/dist/typechain-types/contracts/{GasChecker.js → libraries/BytesMemory.js} +1 -1
  12. package/dist/typechain-types/contracts/libraries/BytesMemory.js.map +1 -0
  13. package/dist/typechain-types/contracts/libraries/BytesStorage.d.ts +20 -0
  14. package/dist/typechain-types/contracts/libraries/BytesStorage.js +3 -0
  15. package/dist/typechain-types/contracts/libraries/BytesStorage.js.map +1 -0
  16. package/dist/typechain-types/contracts/libraries/index.d.ts +2 -0
  17. package/dist/typechain-types/contracts/tests/StringUtilTest.d.ts +12 -52
  18. package/dist/typechain-types/contracts/tests/mocks/BytesMemoryMock.d.ts +102 -0
  19. package/dist/typechain-types/contracts/tests/mocks/BytesMemoryMock.js +3 -0
  20. package/dist/typechain-types/contracts/tests/mocks/BytesMemoryMock.js.map +1 -0
  21. package/dist/typechain-types/contracts/tests/mocks/BytesStorageMock.d.ts +77 -0
  22. package/dist/typechain-types/contracts/tests/mocks/BytesStorageMock.js +3 -0
  23. package/dist/typechain-types/contracts/tests/mocks/BytesStorageMock.js.map +1 -0
  24. package/dist/typechain-types/contracts/tests/mocks/PermitAndCallMock.d.ts +72 -0
  25. package/dist/typechain-types/contracts/tests/mocks/PermitAndCallMock.js +3 -0
  26. package/dist/typechain-types/contracts/tests/mocks/PermitAndCallMock.js.map +1 -0
  27. package/dist/typechain-types/contracts/tests/mocks/index.d.ts +3 -0
  28. package/dist/typechain-types/factories/contracts/PermitAndCall__factory.d.ts +21 -0
  29. package/dist/typechain-types/factories/contracts/PermitAndCall__factory.js +38 -0
  30. package/dist/typechain-types/factories/contracts/PermitAndCall__factory.js.map +1 -0
  31. package/dist/typechain-types/factories/contracts/index.d.ts +1 -1
  32. package/dist/typechain-types/factories/contracts/index.js +3 -3
  33. package/dist/typechain-types/factories/contracts/index.js.map +1 -1
  34. package/dist/typechain-types/factories/contracts/libraries/BytesMemory__factory.d.ts +26 -0
  35. package/dist/typechain-types/factories/contracts/{GasChecker__factory.js → libraries/BytesMemory__factory.js} +9 -20
  36. package/dist/typechain-types/factories/contracts/libraries/BytesMemory__factory.js.map +1 -0
  37. package/dist/typechain-types/factories/contracts/libraries/BytesStorage__factory.d.ts +26 -0
  38. package/dist/typechain-types/factories/contracts/libraries/BytesStorage__factory.js +45 -0
  39. package/dist/typechain-types/factories/contracts/libraries/BytesStorage__factory.js.map +1 -0
  40. package/dist/typechain-types/factories/contracts/libraries/index.d.ts +2 -0
  41. package/dist/typechain-types/factories/contracts/libraries/index.js +5 -1
  42. package/dist/typechain-types/factories/contracts/libraries/index.js.map +1 -1
  43. package/dist/typechain-types/factories/contracts/tests/StringUtilTest__factory.d.ts +5 -33
  44. package/dist/typechain-types/factories/contracts/tests/StringUtilTest__factory.js +5 -41
  45. package/dist/typechain-types/factories/contracts/tests/StringUtilTest__factory.js.map +1 -1
  46. package/dist/typechain-types/factories/contracts/tests/mocks/BytesMemoryMock__factory.d.ts +170 -0
  47. package/dist/typechain-types/factories/contracts/tests/mocks/BytesMemoryMock__factory.js +237 -0
  48. package/dist/typechain-types/factories/contracts/tests/mocks/BytesMemoryMock__factory.js.map +1 -0
  49. package/dist/typechain-types/factories/contracts/tests/mocks/BytesStorageMock__factory.d.ts +118 -0
  50. package/dist/typechain-types/factories/contracts/tests/mocks/BytesStorageMock__factory.js +166 -0
  51. package/dist/typechain-types/factories/contracts/tests/mocks/BytesStorageMock__factory.js.map +1 -0
  52. package/dist/typechain-types/factories/contracts/tests/mocks/PermitAndCallMock__factory.d.ts +63 -0
  53. package/dist/typechain-types/factories/contracts/tests/mocks/PermitAndCallMock__factory.js +91 -0
  54. package/dist/typechain-types/factories/contracts/tests/mocks/PermitAndCallMock__factory.js.map +1 -0
  55. package/dist/typechain-types/factories/contracts/tests/mocks/index.d.ts +3 -0
  56. package/dist/typechain-types/factories/contracts/tests/mocks/index.js +7 -1
  57. package/dist/typechain-types/factories/contracts/tests/mocks/index.js.map +1 -1
  58. package/dist/typechain-types/index.d.ts +12 -2
  59. package/dist/typechain-types/index.js +14 -4
  60. package/dist/typechain-types/index.js.map +1 -1
  61. package/package.json +17 -13
  62. package/contracts/GasChecker.sol +0 -18
  63. package/dist/typechain-types/contracts/GasChecker.js.map +0 -1
  64. package/dist/typechain-types/factories/contracts/GasChecker__factory.d.ts +0 -34
  65. package/dist/typechain-types/factories/contracts/GasChecker__factory.js.map +0 -1
@@ -0,0 +1,28 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity ^0.8.0;
4
+
5
+ import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
6
+ import { SafeERC20 } from "./libraries/SafeERC20.sol";
7
+
8
+ abstract contract PermitAndCall {
9
+ using SafeERC20 for IERC20;
10
+
11
+ function permitAndCall(bytes calldata permit, bytes calldata action) external payable {
12
+ IERC20(address(bytes20(permit))).tryPermit(permit[20:]);
13
+ // solhint-disable-next-line no-inline-assembly
14
+ assembly ("memory-safe") {
15
+ let ptr := mload(0x40)
16
+ calldatacopy(ptr, action.offset, action.length)
17
+ let success := delegatecall(gas(), address(), ptr, action.length, 0, 0)
18
+ returndatacopy(ptr, 0, returndatasize())
19
+ switch success
20
+ case 0 {
21
+ revert(ptr, returndatasize())
22
+ }
23
+ default {
24
+ return(ptr, returndatasize())
25
+ }
26
+ }
27
+ }
28
+ }
@@ -0,0 +1,70 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity ^0.8.0;
4
+
5
+ /**
6
+ * @title A library for operating on bytes memory slices without copying.
7
+ */
8
+ library BytesMemory {
9
+ error OutOfBounds();
10
+
11
+ /**
12
+ * @dev A struct representing a slice of bytes.
13
+ * This points directly to memory without copying the slice.
14
+ */
15
+ struct Slice {
16
+ uint256 pointer; // The pointer to the location of the slice in memory.
17
+ uint256 length; // The length of the slice in bytes.
18
+ }
19
+
20
+ /**
21
+ * @dev Creates a `Slice` from a bytes array.
22
+ * @param data The bytes array to create a slice from.
23
+ * @return ret A `Slice` struct representing the entire bytes array.
24
+ */
25
+ function wrap(bytes memory data) internal pure returns (Slice memory ret) {
26
+ assembly ("memory-safe") { // solhint-disable-line no-inline-assembly
27
+ mstore(ret, add(data, 0x20))
28
+ mstore(add(ret, 0x20), mload(data))
29
+ }
30
+ }
31
+
32
+ /**
33
+ * @dev Returns a new `Slice` representing a portion of the original.
34
+ * @param data The original `Slice` to take a portion from.
35
+ * @param offset The offset in bytes from the start of the original `Slice`.
36
+ * @param size The size of the new `Slice` in bytes.
37
+ * @return ret A new `Slice` struct representing the specified portion of the original.
38
+ */
39
+ function slice(Slice memory data, uint256 offset, uint256 size) internal pure returns (Slice memory ret) {
40
+ if (offset + size > data.length) revert OutOfBounds();
41
+
42
+ unchecked {
43
+ ret.pointer = data.pointer + offset;
44
+ ret.length = size;
45
+ }
46
+ }
47
+
48
+ /**
49
+ * @dev Converts a `Slice` back into a bytes array. The bytes array is returned without copying the data.
50
+ * @param piece The `Slice` to convert back to a bytes array.
51
+ * @return ret The bytes array represented by the `Slice`.
52
+ */
53
+ function unwrap(Slice memory piece) internal view returns (bytes memory ret) {
54
+ uint256 pointer = piece.pointer;
55
+ uint256 length = piece.length;
56
+ assembly ("memory-safe") { // solhint-disable-line no-inline-assembly
57
+ ret := mload(0x40)
58
+ mstore(0x40, add(ret, add(0x20, length)))
59
+ mstore(ret, length)
60
+
61
+ switch gt(length, 32)
62
+ case 0 {
63
+ mstore(add(ret, 0x20), mload(pointer))
64
+ }
65
+ default {
66
+ pop(staticcall(gas(), 0x04, pointer, length, add(ret, 0x20), length))
67
+ }
68
+ }
69
+ }
70
+ }
@@ -0,0 +1,95 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity ^0.8.0;
4
+
5
+ /**
6
+ * @title A library for operating on bytes storage slices.
7
+ */
8
+ library BytesStorage {
9
+ error OutOfBounds();
10
+
11
+ /**
12
+ * @dev A struct representing a slice of bytes storage.
13
+ */
14
+ struct Slice {
15
+ uint256 slot; // The storage slot where the data begins.
16
+ uint256 offset; // The byte offset within the slot where the data begins.
17
+ uint256 length; // The length of the data in bytes.
18
+ }
19
+
20
+ /**
21
+ * @dev Wraps a bytes storage array into a `Slice`. For a detailed explanation,
22
+ * refer to https://ethereum.stackexchange.com/questions/107282/storage-and-memory-layout-of-strings/155800#155800
23
+ * @param data The bytes storage array to wrap.
24
+ * @return A `Slice` struct that refers to the storage location and length of `data`.
25
+ */
26
+ function wrap(bytes storage data) internal view returns (Slice memory) {
27
+ uint256 length;
28
+ uint256 slot;
29
+ assembly ("memory-safe") { // solhint-disable-line no-inline-assembly
30
+ let blob := sload(data.slot)
31
+
32
+ switch and(1, blob)
33
+ case 0 { // Short
34
+ slot := data.slot
35
+ length := shr(1, and(blob, 0xFF))
36
+ }
37
+ default { // Long
38
+ mstore(0, data.slot)
39
+ slot := keccak256(0, 0x20)
40
+ length := shr(1, blob)
41
+ }
42
+ }
43
+
44
+ return Slice({
45
+ slot: slot,
46
+ offset: 0,
47
+ length: length
48
+ });
49
+ }
50
+
51
+ /**
52
+ * @dev Returns a new `Slice` representing a portion of the original storage slice.
53
+ * @param data The original `Slice` to take a portion from.
54
+ * @param offset The offset in bytes from the start of the original `Slice`.
55
+ * @param size The size of the new `Slice` in bytes.
56
+ * @return A new `Slice` struct representing the specified portion of the original.
57
+ */
58
+ function slice(Slice memory data, uint256 offset, uint256 size) internal pure returns (Slice memory) {
59
+ if (offset + size > data.length) revert OutOfBounds();
60
+
61
+ uint256 newOffset = data.offset + offset;
62
+ return Slice({
63
+ slot: data.slot + (newOffset >> 5),
64
+ offset: newOffset & 0x1f,
65
+ length: size
66
+ });
67
+ }
68
+
69
+ /**
70
+ * @dev Copies a `Slice` from storage and returns it as a new bytes array.
71
+ * @param piece The `Slice` to copy from storage.
72
+ * @return ret The new bytes array containing the copied data.
73
+ */
74
+ function copy(Slice memory piece) internal view returns (bytes memory ret) {
75
+ uint256 startSlot = piece.slot;
76
+ uint256 offset = piece.offset;
77
+ uint256 length = piece.length;
78
+ assembly ("memory-safe") { // solhint-disable-line no-inline-assembly
79
+ ret := mload(0x40)
80
+ mstore(0x40, add(ret, add(0x20, length)))
81
+ mstore(ret, length)
82
+
83
+ let out := add(ret, 0x20)
84
+ let endSlot := add(startSlot, div(add(add(length, offset), 0x1F), 0x20))
85
+
86
+ mstore(out, shl(mul(8, offset), sload(startSlot)))
87
+ out := add(out, sub(0x20, offset))
88
+
89
+ for { let slot := add(startSlot, 1) } lt(slot, endSlot) { slot := add(slot, 1) } {
90
+ mstore(out, sload(slot))
91
+ out := add(out, 0x20)
92
+ }
93
+ }
94
+ }
95
+ }
@@ -11,6 +11,9 @@ Object.defineProperty(exports, "should", { enumerable: true, get: function () {
11
11
  const ethers_1 = require("ethers");
12
12
  const hardhat_network_helpers_1 = require("@nomicfoundation/hardhat-network-helpers");
13
13
  Object.defineProperty(exports, "time", { enumerable: true, get: function () { return hardhat_network_helpers_1.time; } });
14
+ const chai_2 = require("chai");
15
+ const mocha_chai_jest_snapshot_1 = require("mocha-chai-jest-snapshot");
16
+ (0, chai_2.use)((0, mocha_chai_jest_snapshot_1.jestSnapshotPlugin)());
14
17
  exports.constants = {
15
18
  ZERO_ADDRESS: '0x0000000000000000000000000000000000000000',
16
19
  EEE_ADDRESS: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',
@@ -1 +1 @@
1
- {"version":3,"file":"prelude.js","sourceRoot":"","sources":["../../src/prelude.ts"],"names":[],"mappings":";;;AAAA,+BAAiF;AAyBxE,0FAzBA,gBAAS,OAyBA;AAAE,+FAzBA,qBAAc,OAyBA;AAAE,uFAzBA,aAAM,OAyBA;AAAE,uFAzBA,aAAM,OAyBA;AAAE,uFAzBA,aAAM,OAyBA;AAAE,uFAzBA,aAAM,OAyBA;AAxBlE,mCAAoC;AACpC,sFAAgE;AAgBvD,qFAhBA,8BAAI,OAgBA;AAdA,QAAA,SAAS,GAAG;IACrB,YAAY,EAAE,4CAA4C;IAC1D,WAAW,EAAE,4CAA4C;IACzD,YAAY,EAAE,oEAAoE;IAClF,WAAW,EAAE,EAAE,IAAI,IAAI,GAAG,EAAE;IAC5B,UAAU,EAAE,EAAE,IAAI,IAAI,GAAG,EAAE;IAC3B,UAAU,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE;IAC1B,UAAU,EAAE,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC;IACzB,WAAW,EAAE,EAAE,IAAI,IAAI,GAAG,EAAE;IAC5B,UAAU,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE;IAC1B,UAAU,EAAE,CAAC,SAAS,EAAE,WAAW,CAAa;CAC1C,CAAC;AAKX,SAAgB,KAAK,CAAC,CAAS;IAC3B,OAAO,IAAA,mBAAU,EAAC,CAAC,CAAC,CAAC;AACzB,CAAC;AAFD,sBAEC"}
1
+ {"version":3,"file":"prelude.js","sourceRoot":"","sources":["../../src/prelude.ts"],"names":[],"mappings":";;;AAAA,+BAAiF;AA6BxE,0FA7BA,gBAAS,OA6BA;AAAE,+FA7BA,qBAAc,OA6BA;AAAE,uFA7BA,aAAM,OA6BA;AAAE,uFA7BA,aAAM,OA6BA;AAAE,uFA7BA,aAAM,OA6BA;AAAE,uFA7BA,aAAM,OA6BA;AA5BlE,mCAAoC;AACpC,sFAAgE;AAoBvD,qFApBA,8BAAI,OAoBA;AAlBb,+BAA2B;AAC3B,uEAA8D;AAC9D,IAAA,UAAG,EAAC,IAAA,6CAAkB,GAAE,CAAC,CAAC;AAEb,QAAA,SAAS,GAAG;IACrB,YAAY,EAAE,4CAA4C;IAC1D,WAAW,EAAE,4CAA4C;IACzD,YAAY,EAAE,oEAAoE;IAClF,WAAW,EAAE,EAAE,IAAI,IAAI,GAAG,EAAE;IAC5B,UAAU,EAAE,EAAE,IAAI,IAAI,GAAG,EAAE;IAC3B,UAAU,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE;IAC1B,UAAU,EAAE,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC;IACzB,WAAW,EAAE,EAAE,IAAI,IAAI,GAAG,EAAE;IAC5B,UAAU,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE;IAC1B,UAAU,EAAE,CAAC,SAAS,EAAE,WAAW,CAAa;CAC1C,CAAC;AAKX,SAAgB,KAAK,CAAC,CAAS;IAC3B,OAAO,IAAA,mBAAU,EAAC,CAAC,CAAC,CAAC;AACzB,CAAC;AAFD,sBAEC"}
@@ -0,0 +1,35 @@
1
+ import type { BaseContract, BytesLike, FunctionFragment, Result, Interface, ContractRunner, ContractMethod, Listener } from "ethers";
2
+ import type { TypedContractEvent, TypedDeferredTopicFilter, TypedEventLog, TypedListener, TypedContractMethod } from "../common";
3
+ export interface PermitAndCallInterface extends Interface {
4
+ getFunction(nameOrSignature: "permitAndCall"): FunctionFragment;
5
+ encodeFunctionData(functionFragment: "permitAndCall", values: [BytesLike, BytesLike]): string;
6
+ decodeFunctionResult(functionFragment: "permitAndCall", data: BytesLike): Result;
7
+ }
8
+ export interface PermitAndCall extends BaseContract {
9
+ connect(runner?: ContractRunner | null): PermitAndCall;
10
+ waitForDeployment(): Promise<this>;
11
+ interface: PermitAndCallInterface;
12
+ queryFilter<TCEvent extends TypedContractEvent>(event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
13
+ queryFilter<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
14
+ on<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
15
+ on<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
16
+ once<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
17
+ once<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
18
+ listeners<TCEvent extends TypedContractEvent>(event: TCEvent): Promise<Array<TypedListener<TCEvent>>>;
19
+ listeners(eventName?: string): Promise<Array<Listener>>;
20
+ removeAllListeners<TCEvent extends TypedContractEvent>(event?: TCEvent): Promise<this>;
21
+ permitAndCall: TypedContractMethod<[
22
+ permit: BytesLike,
23
+ action: BytesLike
24
+ ], [
25
+ void
26
+ ], "payable">;
27
+ getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T;
28
+ getFunction(nameOrSignature: "permitAndCall"): TypedContractMethod<[
29
+ permit: BytesLike,
30
+ action: BytesLike
31
+ ], [
32
+ void
33
+ ], "payable">;
34
+ filters: {};
35
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=PermitAndCall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PermitAndCall.js","sourceRoot":"","sources":["../../../typechain-types/contracts/PermitAndCall.ts"],"names":[],"mappings":""}
@@ -7,5 +7,5 @@ export type { mocks };
7
7
  import type * as tests from "./tests";
8
8
  export type { tests };
9
9
  export type { EthReceiver } from "./EthReceiver";
10
- export type { GasChecker } from "./GasChecker";
11
10
  export type { OnlyWethReceiver } from "./OnlyWethReceiver";
11
+ export type { PermitAndCall } from "./PermitAndCall";
@@ -1,11 +1,11 @@
1
1
  import type { BaseContract, FunctionFragment, Interface, ContractRunner, ContractMethod, Listener } from "ethers";
2
- import type { TypedContractEvent, TypedDeferredTopicFilter, TypedEventLog, TypedListener } from "../common";
3
- export interface GasCheckerInterface extends Interface {
2
+ import type { TypedContractEvent, TypedDeferredTopicFilter, TypedEventLog, TypedListener } from "../../common";
3
+ export interface BytesMemoryInterface extends Interface {
4
4
  }
5
- export interface GasChecker extends BaseContract {
6
- connect(runner?: ContractRunner | null): GasChecker;
5
+ export interface BytesMemory extends BaseContract {
6
+ connect(runner?: ContractRunner | null): BytesMemory;
7
7
  waitForDeployment(): Promise<this>;
8
- interface: GasCheckerInterface;
8
+ interface: BytesMemoryInterface;
9
9
  queryFilter<TCEvent extends TypedContractEvent>(event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
10
10
  queryFilter<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
11
11
  on<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=GasChecker.js.map
3
+ //# sourceMappingURL=BytesMemory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BytesMemory.js","sourceRoot":"","sources":["../../../../typechain-types/contracts/libraries/BytesMemory.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import type { BaseContract, FunctionFragment, Interface, ContractRunner, ContractMethod, Listener } from "ethers";
2
+ import type { TypedContractEvent, TypedDeferredTopicFilter, TypedEventLog, TypedListener } from "../../common";
3
+ export interface BytesStorageInterface extends Interface {
4
+ }
5
+ export interface BytesStorage extends BaseContract {
6
+ connect(runner?: ContractRunner | null): BytesStorage;
7
+ waitForDeployment(): Promise<this>;
8
+ interface: BytesStorageInterface;
9
+ queryFilter<TCEvent extends TypedContractEvent>(event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
10
+ queryFilter<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
11
+ on<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
12
+ on<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
13
+ once<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
14
+ once<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
15
+ listeners<TCEvent extends TypedContractEvent>(event: TCEvent): Promise<Array<TypedListener<TCEvent>>>;
16
+ listeners(eventName?: string): Promise<Array<Listener>>;
17
+ removeAllListeners<TCEvent extends TypedContractEvent>(event?: TCEvent): Promise<this>;
18
+ getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T;
19
+ filters: {};
20
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=BytesStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BytesStorage.js","sourceRoot":"","sources":["../../../../typechain-types/contracts/libraries/BytesStorage.ts"],"names":[],"mappings":""}
@@ -1,4 +1,6 @@
1
1
  export type { AddressArray } from "./AddressArray";
2
+ export type { BytesMemory } from "./BytesMemory";
3
+ export type { BytesStorage } from "./BytesStorage";
2
4
  export type { RevertReasonParser } from "./RevertReasonParser";
3
5
  export type { SafeERC20 } from "./SafeERC20";
4
6
  export type { UniERC20 } from "./UniERC20";
@@ -2,10 +2,10 @@ import type { BaseContract, BigNumberish, BytesLike, FunctionFragment, Result, I
2
2
  import type { TypedContractEvent, TypedDeferredTopicFilter, TypedEventLog, TypedListener, TypedContractMethod } from "../../common";
3
3
  export interface StringUtilTestInterface extends Interface {
4
4
  getFunction(nameOrSignature: "toHex" | "toHexBytes" | "toHexNaive" | "toHexNaiveBytes"): FunctionFragment;
5
- encodeFunctionData(functionFragment: "toHex", values: [BigNumberish, BigNumberish]): string;
6
- encodeFunctionData(functionFragment: "toHexBytes", values: [BytesLike, BigNumberish]): string;
7
- encodeFunctionData(functionFragment: "toHexNaive", values: [BigNumberish, BigNumberish]): string;
8
- encodeFunctionData(functionFragment: "toHexNaiveBytes", values: [BytesLike, BigNumberish]): string;
5
+ encodeFunctionData(functionFragment: "toHex", values: [BigNumberish]): string;
6
+ encodeFunctionData(functionFragment: "toHexBytes", values: [BytesLike]): string;
7
+ encodeFunctionData(functionFragment: "toHexNaive", values: [BigNumberish]): string;
8
+ encodeFunctionData(functionFragment: "toHexNaiveBytes", values: [BytesLike]): string;
9
9
  decodeFunctionResult(functionFragment: "toHex", data: BytesLike): Result;
10
10
  decodeFunctionResult(functionFragment: "toHexBytes", data: BytesLike): Result;
11
11
  decodeFunctionResult(functionFragment: "toHexNaive", data: BytesLike): Result;
@@ -24,54 +24,14 @@ export interface StringUtilTest extends BaseContract {
24
24
  listeners<TCEvent extends TypedContractEvent>(event: TCEvent): Promise<Array<TypedListener<TCEvent>>>;
25
25
  listeners(eventName?: string): Promise<Array<Listener>>;
26
26
  removeAllListeners<TCEvent extends TypedContractEvent>(event?: TCEvent): Promise<this>;
27
- toHex: TypedContractMethod<[
28
- value: BigNumberish,
29
- expectedGasCost: BigNumberish
30
- ], [
31
- string
32
- ], "view">;
33
- toHexBytes: TypedContractMethod<[
34
- data: BytesLike,
35
- expectedGasCost: BigNumberish
36
- ], [
37
- string
38
- ], "view">;
39
- toHexNaive: TypedContractMethod<[
40
- value: BigNumberish,
41
- expectedGasCost: BigNumberish
42
- ], [
43
- string
44
- ], "view">;
45
- toHexNaiveBytes: TypedContractMethod<[
46
- data: BytesLike,
47
- expectedGasCost: BigNumberish
48
- ], [
49
- string
50
- ], "view">;
27
+ toHex: TypedContractMethod<[value: BigNumberish], [string], "view">;
28
+ toHexBytes: TypedContractMethod<[data: BytesLike], [string], "view">;
29
+ toHexNaive: TypedContractMethod<[value: BigNumberish], [string], "view">;
30
+ toHexNaiveBytes: TypedContractMethod<[data: BytesLike], [string], "view">;
51
31
  getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T;
52
- getFunction(nameOrSignature: "toHex"): TypedContractMethod<[
53
- value: BigNumberish,
54
- expectedGasCost: BigNumberish
55
- ], [
56
- string
57
- ], "view">;
58
- getFunction(nameOrSignature: "toHexBytes"): TypedContractMethod<[
59
- data: BytesLike,
60
- expectedGasCost: BigNumberish
61
- ], [
62
- string
63
- ], "view">;
64
- getFunction(nameOrSignature: "toHexNaive"): TypedContractMethod<[
65
- value: BigNumberish,
66
- expectedGasCost: BigNumberish
67
- ], [
68
- string
69
- ], "view">;
70
- getFunction(nameOrSignature: "toHexNaiveBytes"): TypedContractMethod<[
71
- data: BytesLike,
72
- expectedGasCost: BigNumberish
73
- ], [
74
- string
75
- ], "view">;
32
+ getFunction(nameOrSignature: "toHex"): TypedContractMethod<[value: BigNumberish], [string], "view">;
33
+ getFunction(nameOrSignature: "toHexBytes"): TypedContractMethod<[data: BytesLike], [string], "view">;
34
+ getFunction(nameOrSignature: "toHexNaive"): TypedContractMethod<[value: BigNumberish], [string], "view">;
35
+ getFunction(nameOrSignature: "toHexNaiveBytes"): TypedContractMethod<[data: BytesLike], [string], "view">;
76
36
  filters: {};
77
37
  }
@@ -0,0 +1,102 @@
1
+ import type { BaseContract, BigNumberish, BytesLike, FunctionFragment, Result, Interface, ContractRunner, ContractMethod, Listener } from "ethers";
2
+ import type { TypedContractEvent, TypedDeferredTopicFilter, TypedEventLog, TypedListener, TypedContractMethod } from "../../../common";
3
+ export declare namespace BytesMemory {
4
+ type SliceStruct = {
5
+ pointer: BigNumberish;
6
+ length: BigNumberish;
7
+ };
8
+ type SliceStructOutput = [pointer: bigint, length: bigint] & {
9
+ pointer: bigint;
10
+ length: bigint;
11
+ };
12
+ }
13
+ export interface BytesMemoryMockInterface extends Interface {
14
+ getFunction(nameOrSignature: "slice" | "wrap" | "wrapAndUnwrap" | "wrapWithNonDefaultPointer" | "wrapWithNonDefaultPointerAndUnwrap" | "wrapWithSliceAndUnwrap"): FunctionFragment;
15
+ encodeFunctionData(functionFragment: "slice", values: [BytesMemory.SliceStruct, BigNumberish, BigNumberish]): string;
16
+ encodeFunctionData(functionFragment: "wrap", values: [BytesLike]): string;
17
+ encodeFunctionData(functionFragment: "wrapAndUnwrap", values: [BytesLike]): string;
18
+ encodeFunctionData(functionFragment: "wrapWithNonDefaultPointer", values: [BytesLike, BigNumberish]): string;
19
+ encodeFunctionData(functionFragment: "wrapWithNonDefaultPointerAndUnwrap", values: [BytesLike, BigNumberish]): string;
20
+ encodeFunctionData(functionFragment: "wrapWithSliceAndUnwrap", values: [BytesLike, BigNumberish, BigNumberish]): string;
21
+ decodeFunctionResult(functionFragment: "slice", data: BytesLike): Result;
22
+ decodeFunctionResult(functionFragment: "wrap", data: BytesLike): Result;
23
+ decodeFunctionResult(functionFragment: "wrapAndUnwrap", data: BytesLike): Result;
24
+ decodeFunctionResult(functionFragment: "wrapWithNonDefaultPointer", data: BytesLike): Result;
25
+ decodeFunctionResult(functionFragment: "wrapWithNonDefaultPointerAndUnwrap", data: BytesLike): Result;
26
+ decodeFunctionResult(functionFragment: "wrapWithSliceAndUnwrap", data: BytesLike): Result;
27
+ }
28
+ export interface BytesMemoryMock extends BaseContract {
29
+ connect(runner?: ContractRunner | null): BytesMemoryMock;
30
+ waitForDeployment(): Promise<this>;
31
+ interface: BytesMemoryMockInterface;
32
+ queryFilter<TCEvent extends TypedContractEvent>(event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
33
+ queryFilter<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
34
+ on<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
35
+ on<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
36
+ once<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
37
+ once<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
38
+ listeners<TCEvent extends TypedContractEvent>(event: TCEvent): Promise<Array<TypedListener<TCEvent>>>;
39
+ listeners(eventName?: string): Promise<Array<Listener>>;
40
+ removeAllListeners<TCEvent extends TypedContractEvent>(event?: TCEvent): Promise<this>;
41
+ slice: TypedContractMethod<[
42
+ data: BytesMemory.SliceStruct,
43
+ offset: BigNumberish,
44
+ size: BigNumberish
45
+ ], [
46
+ BytesMemory.SliceStructOutput
47
+ ], "view">;
48
+ wrap: TypedContractMethod<[
49
+ data: BytesLike
50
+ ], [
51
+ BytesMemory.SliceStructOutput
52
+ ], "view">;
53
+ wrapAndUnwrap: TypedContractMethod<[data: BytesLike], [string], "view">;
54
+ wrapWithNonDefaultPointer: TypedContractMethod<[
55
+ data: BytesLike,
56
+ n: BigNumberish
57
+ ], [
58
+ BytesMemory.SliceStructOutput
59
+ ], "view">;
60
+ wrapWithNonDefaultPointerAndUnwrap: TypedContractMethod<[
61
+ data: BytesLike,
62
+ n: BigNumberish
63
+ ], [
64
+ string
65
+ ], "view">;
66
+ wrapWithSliceAndUnwrap: TypedContractMethod<[
67
+ data: BytesLike,
68
+ offset: BigNumberish,
69
+ size: BigNumberish
70
+ ], [
71
+ string
72
+ ], "view">;
73
+ getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T;
74
+ getFunction(nameOrSignature: "slice"): TypedContractMethod<[
75
+ data: BytesMemory.SliceStruct,
76
+ offset: BigNumberish,
77
+ size: BigNumberish
78
+ ], [
79
+ BytesMemory.SliceStructOutput
80
+ ], "view">;
81
+ getFunction(nameOrSignature: "wrap"): TypedContractMethod<[
82
+ data: BytesLike
83
+ ], [
84
+ BytesMemory.SliceStructOutput
85
+ ], "view">;
86
+ getFunction(nameOrSignature: "wrapAndUnwrap"): TypedContractMethod<[data: BytesLike], [string], "view">;
87
+ getFunction(nameOrSignature: "wrapWithNonDefaultPointer"): TypedContractMethod<[
88
+ data: BytesLike,
89
+ n: BigNumberish
90
+ ], [
91
+ BytesMemory.SliceStructOutput
92
+ ], "view">;
93
+ getFunction(nameOrSignature: "wrapWithNonDefaultPointerAndUnwrap"): TypedContractMethod<[data: BytesLike, n: BigNumberish], [string], "view">;
94
+ getFunction(nameOrSignature: "wrapWithSliceAndUnwrap"): TypedContractMethod<[
95
+ data: BytesLike,
96
+ offset: BigNumberish,
97
+ size: BigNumberish
98
+ ], [
99
+ string
100
+ ], "view">;
101
+ filters: {};
102
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=BytesMemoryMock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BytesMemoryMock.js","sourceRoot":"","sources":["../../../../../typechain-types/contracts/tests/mocks/BytesMemoryMock.ts"],"names":[],"mappings":""}
@@ -0,0 +1,77 @@
1
+ import type { BaseContract, BigNumberish, BytesLike, FunctionFragment, Result, Interface, ContractRunner, ContractMethod, Listener } from "ethers";
2
+ import type { TypedContractEvent, TypedDeferredTopicFilter, TypedEventLog, TypedListener, TypedContractMethod } from "../../../common";
3
+ export declare namespace BytesStorage {
4
+ type SliceStruct = {
5
+ slot: BigNumberish;
6
+ offset: BigNumberish;
7
+ length: BigNumberish;
8
+ };
9
+ type SliceStructOutput = [
10
+ slot: bigint,
11
+ offset: bigint,
12
+ length: bigint
13
+ ] & {
14
+ slot: bigint;
15
+ offset: bigint;
16
+ length: bigint;
17
+ };
18
+ }
19
+ export interface BytesStorageMockInterface extends Interface {
20
+ getFunction(nameOrSignature: "setData" | "wrap" | "wrapAndCopy" | "wrapAndSlice" | "wrapWithSliceAndCopy"): FunctionFragment;
21
+ encodeFunctionData(functionFragment: "setData", values: [BytesLike]): string;
22
+ encodeFunctionData(functionFragment: "wrap", values?: undefined): string;
23
+ encodeFunctionData(functionFragment: "wrapAndCopy", values?: undefined): string;
24
+ encodeFunctionData(functionFragment: "wrapAndSlice", values: [BigNumberish, BigNumberish]): string;
25
+ encodeFunctionData(functionFragment: "wrapWithSliceAndCopy", values: [BigNumberish, BigNumberish]): string;
26
+ decodeFunctionResult(functionFragment: "setData", data: BytesLike): Result;
27
+ decodeFunctionResult(functionFragment: "wrap", data: BytesLike): Result;
28
+ decodeFunctionResult(functionFragment: "wrapAndCopy", data: BytesLike): Result;
29
+ decodeFunctionResult(functionFragment: "wrapAndSlice", data: BytesLike): Result;
30
+ decodeFunctionResult(functionFragment: "wrapWithSliceAndCopy", data: BytesLike): Result;
31
+ }
32
+ export interface BytesStorageMock extends BaseContract {
33
+ connect(runner?: ContractRunner | null): BytesStorageMock;
34
+ waitForDeployment(): Promise<this>;
35
+ interface: BytesStorageMockInterface;
36
+ queryFilter<TCEvent extends TypedContractEvent>(event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
37
+ queryFilter<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
38
+ on<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
39
+ on<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
40
+ once<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
41
+ once<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
42
+ listeners<TCEvent extends TypedContractEvent>(event: TCEvent): Promise<Array<TypedListener<TCEvent>>>;
43
+ listeners(eventName?: string): Promise<Array<Listener>>;
44
+ removeAllListeners<TCEvent extends TypedContractEvent>(event?: TCEvent): Promise<this>;
45
+ setData: TypedContractMethod<[data: BytesLike], [void], "nonpayable">;
46
+ wrap: TypedContractMethod<[], [BytesStorage.SliceStructOutput], "view">;
47
+ wrapAndCopy: TypedContractMethod<[], [string], "view">;
48
+ wrapAndSlice: TypedContractMethod<[
49
+ offset: BigNumberish,
50
+ size: BigNumberish
51
+ ], [
52
+ BytesStorage.SliceStructOutput
53
+ ], "view">;
54
+ wrapWithSliceAndCopy: TypedContractMethod<[
55
+ offset: BigNumberish,
56
+ size: BigNumberish
57
+ ], [
58
+ string
59
+ ], "view">;
60
+ getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T;
61
+ getFunction(nameOrSignature: "setData"): TypedContractMethod<[data: BytesLike], [void], "nonpayable">;
62
+ getFunction(nameOrSignature: "wrap"): TypedContractMethod<[], [BytesStorage.SliceStructOutput], "view">;
63
+ getFunction(nameOrSignature: "wrapAndCopy"): TypedContractMethod<[], [string], "view">;
64
+ getFunction(nameOrSignature: "wrapAndSlice"): TypedContractMethod<[
65
+ offset: BigNumberish,
66
+ size: BigNumberish
67
+ ], [
68
+ BytesStorage.SliceStructOutput
69
+ ], "view">;
70
+ getFunction(nameOrSignature: "wrapWithSliceAndCopy"): TypedContractMethod<[
71
+ offset: BigNumberish,
72
+ size: BigNumberish
73
+ ], [
74
+ string
75
+ ], "view">;
76
+ filters: {};
77
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=BytesStorageMock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BytesStorageMock.js","sourceRoot":"","sources":["../../../../../typechain-types/contracts/tests/mocks/BytesStorageMock.ts"],"names":[],"mappings":""}