@1inch/solidity-utils 2.0.14 → 2.0.17

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.
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
 
3
3
  pragma solidity ^0.8.0;
4
-
4
+ pragma abicoder v1;
5
5
 
6
6
  library AddressArray {
7
7
  error IndexOutOfBounds();
@@ -1,10 +1,10 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
 
3
3
  pragma solidity ^0.8.0;
4
+ pragma abicoder v1;
4
5
 
5
6
  import "./AddressArray.sol";
6
7
 
7
-
8
8
  library AddressSet {
9
9
  using AddressArray for AddressArray.Data;
10
10
 
@@ -0,0 +1,123 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity ^0.8.0;
4
+ pragma abicoder v1;
5
+
6
+ import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
7
+ import "@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol";
8
+ import "../interfaces/IDaiLikePermit.sol";
9
+ import "../libraries/RevertReasonForwarder.sol";
10
+
11
+ library SafeERC20 {
12
+ error SafeTransferFailed();
13
+ error SafeTransferFromFailed();
14
+ error ForceApproveFailed();
15
+ error SafeIncreaseAllowanceFailed();
16
+ error SafeDecreaseAllowanceFailed();
17
+ error SafePermitBadLength();
18
+
19
+ // Ensures method do not revert or return boolean `true`, admits call to non-smart-contract
20
+ function safeTransferFrom(IERC20 token, address from, address to, uint256 amount) internal {
21
+ bytes4 selector = token.transferFrom.selector;
22
+ bool success;
23
+ assembly { // solhint-disable-line no-inline-assembly
24
+ let data := mload(0x40)
25
+ mstore(0x40, add(data, 100))
26
+
27
+ mstore(data, selector)
28
+ mstore(add(data, 0x04), from)
29
+ mstore(add(data, 0x24), to)
30
+ mstore(add(data, 0x44), amount)
31
+ let status := call(gas(), token, 0, data, 100, 0x0, 0x20)
32
+ success := and(status, or(iszero(returndatasize()), and(gt(returndatasize(), 31), eq(mload(0), 1))))
33
+ }
34
+ if (!success) {
35
+ revert SafeTransferFromFailed();
36
+ }
37
+ }
38
+
39
+ // Ensures method do not revert or return boolean `true`, admits call to non-smart-contract
40
+ function safeTransfer(IERC20 token, address to, uint256 value) internal {
41
+ if (!_makeCall(token, token.transfer.selector, to, value)) {
42
+ revert SafeTransferFailed();
43
+ }
44
+ }
45
+
46
+ // If `approve(from, to, amount)` fails, try to `approve(from, to, 0)` before retry
47
+ function forceApprove(IERC20 token, address spender, uint256 value) internal {
48
+ if (!_makeCall(token, token.approve.selector, spender, value)) {
49
+ if (!_makeCall(token, token.approve.selector, spender, 0) ||
50
+ !_makeCall(token, token.approve.selector, spender, value))
51
+ {
52
+ revert ForceApproveFailed();
53
+ }
54
+ }
55
+ }
56
+
57
+ function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
58
+ uint256 allowance = token.allowance(address(this), spender);
59
+ if (value > type(uint256).max - allowance) revert SafeIncreaseAllowanceFailed();
60
+ forceApprove(token, spender, allowance + value);
61
+ }
62
+
63
+ function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
64
+ uint256 allowance = token.allowance(address(this), spender);
65
+ if (value > allowance) revert SafeDecreaseAllowanceFailed();
66
+ forceApprove(token, spender, allowance - value);
67
+ }
68
+
69
+ function safePermit(IERC20 token, bytes calldata permit) internal {
70
+ bool success;
71
+ if (permit.length == 32 * 7) {
72
+ // solhint-disable-next-line avoid-low-level-calls
73
+ success = _makeCalldataCall(token, IERC20Permit.permit.selector, permit);
74
+ } else if (permit.length == 32 * 8) {
75
+ // solhint-disable-next-line avoid-low-level-calls
76
+ success = _makeCalldataCall(token, IDaiLikePermit.permit.selector, permit);
77
+ } else {
78
+ revert SafePermitBadLength();
79
+ }
80
+
81
+ if (!success) {
82
+ RevertReasonForwarder.reRevert();
83
+ }
84
+ }
85
+
86
+ function _makeCall(IERC20 token, bytes4 selector, address to, uint256 amount) private returns(bool done) {
87
+ assembly { // solhint-disable-line no-inline-assembly
88
+ let data := mload(0x40)
89
+ mstore(0x40, add(data, 68))
90
+
91
+ mstore(data, selector)
92
+ mstore(add(data, 0x04), to)
93
+ mstore(add(data, 0x24), amount)
94
+ let success := call(gas(), token, 0, data, 68, 0x0, 0x20)
95
+ done := and(
96
+ success,
97
+ or(
98
+ iszero(returndatasize()),
99
+ and(gt(returndatasize(), 31), eq(mload(0), 1))
100
+ )
101
+ )
102
+ }
103
+ }
104
+
105
+ function _makeCalldataCall(IERC20 token, bytes4 selector, bytes calldata args) private returns(bool done) {
106
+ assembly { // solhint-disable-line no-inline-assembly
107
+ let len := add(4, args.length)
108
+ let data := mload(0x40)
109
+ mstore(0x40, add(data, len))
110
+
111
+ mstore(data, selector)
112
+ calldatacopy(add(data, 0x04), args.offset, args.length)
113
+ let success := call(gas(), token, 0, data, len, 0x0, 0x20)
114
+ done := and(
115
+ success,
116
+ or(
117
+ iszero(returndatasize()),
118
+ and(gt(returndatasize(), 31), eq(mload(0), 1))
119
+ )
120
+ )
121
+ }
122
+ }
123
+ }
@@ -3,14 +3,12 @@
3
3
  pragma solidity ^0.8.0;
4
4
  pragma abicoder v1;
5
5
 
6
- import "@openzeppelin/contracts/utils/math/SafeMath.sol";
7
6
  import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
8
- import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
9
7
  import "./RevertReasonForwarder.sol";
8
+ import "./SafeERC20.sol";
10
9
  import "./StringUtil.sol";
11
10
 
12
11
  library UniERC20 {
13
- using SafeMath for uint256;
14
12
  using SafeERC20 for IERC20;
15
13
 
16
14
  error ApproveCalledOnETH();
@@ -52,7 +50,7 @@ library UniERC20 {
52
50
  if (to != address(this)) revert ToIsNotThis();
53
51
  if (msg.value > amount) {
54
52
  // Return remainder if exist
55
- from.transfer(msg.value.sub(amount));
53
+ unchecked { from.transfer(msg.value - amount); }
56
54
  }
57
55
  } else {
58
56
  token.safeTransferFrom(from, to, amount);
@@ -1,3 +1,4 @@
1
+ /// <reference types="node" />
1
2
  import { MessageTypes, SignTypedDataVersion, TypedMessage } from '@metamask/eth-sig-util';
2
3
  import { Token } from './utils';
3
4
  export declare const TypedDataVersion = SignTypedDataVersion.V4;
@@ -73,7 +74,7 @@ export interface PermittableToken extends Token {
73
74
  nonces(owner: string, txDetails?: Truffle.TransactionDetails): Promise<BN>;
74
75
  name(txDetails?: Truffle.TransactionDetails): Promise<string>;
75
76
  }
76
- export declare function signWithPk<T extends MessageTypes>(privateKey: string, data: TypedMessage<T>): string;
77
+ export declare function signWithPk<T extends MessageTypes>(privateKey: Buffer | string, data: TypedMessage<T>): string;
77
78
  export declare function getPermit(owner: string, ownerPrivateKey: string, permitContract: PermittableToken, tokenVersion: string, chainId: number, spender: string, value: string, deadline?: string): Promise<string>;
78
79
  export declare function getPermitLikeDai(holder: string, holderPrivateKey: string, permitContract: PermittableToken, tokenVersion: string, chainId: number, spender: string, allowed: boolean, expiry?: string): Promise<string>;
79
80
  export declare function withTarget(target: BN | string, data: BN | string): string;
@@ -62,7 +62,8 @@ function buildDataLikeDai(name, version, chainId, verifyingContract, holder, spe
62
62
  }
63
63
  exports.buildDataLikeDai = buildDataLikeDai;
64
64
  function signWithPk(privateKey, data) {
65
- return (0, eth_sig_util_1.signTypedData)({ privateKey: Buffer.from(trim0x(privateKey), 'hex'), data, version: exports.TypedDataVersion });
65
+ const buffer = Buffer.isBuffer(privateKey) ? privateKey : Buffer.from(trim0x(privateKey), 'hex');
66
+ return (0, eth_sig_util_1.signTypedData)({ privateKey: buffer, data, version: exports.TypedDataVersion });
66
67
  }
67
68
  exports.signWithPk = signWithPk;
68
69
  /*
@@ -1 +1 @@
1
- {"version":3,"file":"permit.js","sourceRoot":"","sources":["../../src/permit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permit.js","sourceRoot":"","sources":["../../src/permit.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { Assertion, AssertionError, assert, expect, config, should } from 'chai';
2
2
  import 'chai-bn';
3
- import { toBN } from 'web3-utils';
4
3
  import BN from 'bn.js';
4
+ export declare function toBN(num: string | number, base?: number | 'hex'): BN;
5
5
  export declare const constants: {
6
6
  readonly ZERO_ADDRESS: "0x0000000000000000000000000000000000000000";
7
7
  readonly EEE_ADDRESS: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";
@@ -10,7 +10,7 @@ export declare const constants: {
10
10
  readonly MAX_INT256: string;
11
11
  readonly MIN_INT256: string;
12
12
  };
13
- export { toBN, };
13
+ export { BN, };
14
14
  export declare type Time = {
15
15
  increaseTo: (target: string | number | BN) => Promise<BN>;
16
16
  latest: () => Promise<BN>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.should = exports.config = exports.expect = exports.assert = exports.AssertionError = exports.Assertion = exports.ether = exports.time = exports.toBN = exports.constants = void 0;
3
+ exports.should = exports.config = exports.expect = exports.assert = exports.AssertionError = exports.Assertion = exports.ether = exports.time = exports.BN = exports.constants = exports.toBN = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const chai_1 = tslib_1.__importStar(require("chai"));
6
6
  Object.defineProperty(exports, "Assertion", { enumerable: true, get: function () { return chai_1.Assertion; } });
@@ -12,21 +12,26 @@ Object.defineProperty(exports, "should", { enumerable: true, get: function () {
12
12
  require("chai-bn");
13
13
  const chai_as_promised_1 = tslib_1.__importDefault(require("chai-as-promised"));
14
14
  const web3_utils_1 = require("web3-utils");
15
- Object.defineProperty(exports, "toBN", { enumerable: true, get: function () { return web3_utils_1.toBN; } });
15
+ const bn_js_1 = tslib_1.__importDefault(require("bn.js"));
16
+ exports.BN = bn_js_1.default;
16
17
  chai_1.default.use(chai_as_promised_1.default);
17
18
  // eslint-disable-next-line @typescript-eslint/no-var-requires
18
19
  const { time: timeImpl } = require('@openzeppelin/test-helpers');
20
+ function toBN(num, base) {
21
+ return new bn_js_1.default(num, base);
22
+ }
23
+ exports.toBN = toBN;
19
24
  exports.constants = {
20
25
  ZERO_ADDRESS: '0x0000000000000000000000000000000000000000',
21
26
  EEE_ADDRESS: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',
22
27
  ZERO_BYTES32: '0x0000000000000000000000000000000000000000000000000000000000000000',
23
- MAX_UINT256: (0, web3_utils_1.toBN)('2').pow((0, web3_utils_1.toBN)('256')).sub((0, web3_utils_1.toBN)('1')).toString(),
24
- MAX_INT256: (0, web3_utils_1.toBN)('2').pow((0, web3_utils_1.toBN)('255')).sub((0, web3_utils_1.toBN)('1')).toString(),
25
- MIN_INT256: (0, web3_utils_1.toBN)('2').pow((0, web3_utils_1.toBN)('255')).mul((0, web3_utils_1.toBN)('-1')).toString(),
28
+ MAX_UINT256: toBN('2').pow(toBN('256')).sub(toBN('1')).toString(),
29
+ MAX_INT256: toBN('2').pow(toBN('255')).sub(toBN('1')).toString(),
30
+ MIN_INT256: toBN('2').pow(toBN('255')).mul(toBN('-1')).toString(),
26
31
  };
27
32
  exports.time = timeImpl;
28
33
  function ether(n) {
29
- return (0, web3_utils_1.toBN)((0, web3_utils_1.toWei)(n, 'ether'));
34
+ return toBN((0, web3_utils_1.toWei)(n, 'ether'));
30
35
  }
31
36
  exports.ether = ether;
32
37
  //# sourceMappingURL=prelude.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prelude.js","sourceRoot":"","sources":["../../src/prelude.ts"],"names":[],"mappings":";;;;AAAA,qDAAuF;AAqCnF,0FArCW,gBAAS,OAqCX;AACT,+FAtCsB,qBAAc,OAsCtB;AACd,uFAvCsC,aAAM,OAuCtC;AACN,uFAxC8C,aAAM,OAwC9C;AACN,uFAzCsD,aAAM,OAyCtD;AACN,uFA1C8D,aAAM,OA0C9D;AAzCV,mBAAiB;AACjB,gFAA8C;AAC9C,2CAAyC;AAiBrC,qFAjBK,iBAAI,OAiBL;AAfR,cAAI,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAC;AACzB,8DAA8D;AAC9D,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAC;AAEpD,QAAA,SAAS,GAAG;IACrB,YAAY,EAAE,4CAA4C;IAC1D,WAAW,EAAE,4CAA4C;IACzD,YAAY,EAAE,oEAAoE;IAClF,WAAW,EAAE,IAAA,iBAAI,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAA,iBAAI,EAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAA,iBAAI,EAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE;IACjE,UAAU,EAAE,IAAA,iBAAI,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAA,iBAAI,EAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAA,iBAAI,EAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE;IAChE,UAAU,EAAE,IAAA,iBAAI,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAA,iBAAI,EAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAA,iBAAI,EAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC3D,CAAC;AAaE,QAAA,IAAI,GAAS,QAAQ,CAAC;AAEnC,SAAgB,KAAK,CAAE,CAAS;IAC5B,OAAO,IAAA,iBAAI,EAAC,IAAA,kBAAK,EAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACnC,CAAC;AAFD,sBAEC"}
1
+ {"version":3,"file":"prelude.js","sourceRoot":"","sources":["../../src/prelude.ts"],"names":[],"mappings":";;;;AAAA,qDAAuF;AAyCnF,0FAzCW,gBAAS,OAyCX;AACT,+FA1CsB,qBAAc,OA0CtB;AACd,uFA3CsC,aAAM,OA2CtC;AACN,uFA5C8C,aAAM,OA4C9C;AACN,uFA7CsD,aAAM,OA6CtD;AACN,uFA9C8D,aAAM,OA8C9D;AA7CV,mBAAiB;AACjB,gFAA8C;AAC9C,2CAAmC;AACnC,0DAAuB;AAoBnB,aApBG,eAAE,CAoBH;AAnBN,cAAI,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAC;AACzB,8DAA8D;AAC9D,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAC;AAEjE,SAAgB,IAAI,CAAE,GAAoB,EAAE,IAAqB;IAC7D,OAAO,IAAI,eAAE,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC7B,CAAC;AAFD,oBAEC;AAEY,QAAA,SAAS,GAAG;IACrB,YAAY,EAAE,4CAA4C;IAC1D,WAAW,EAAE,4CAA4C;IACzD,YAAY,EAAE,oEAAoE;IAClF,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE;IACjE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE;IAChE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC3D,CAAC;AAaE,QAAA,IAAI,GAAS,QAAQ,CAAC;AAEnC,SAAgB,KAAK,CAAE,CAAS;IAC5B,OAAO,IAAI,CAAC,IAAA,kBAAK,EAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACnC,CAAC;AAFD,sBAEC"}
@@ -1,4 +1,5 @@
1
1
  /// <reference types="node" />
2
+ /// <reference types="node" />
2
3
  import { PathLike, promises as fs } from 'fs';
3
4
  export declare const gasspectOptionsDefault: {
4
5
  minOpGasCost: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1inch/solidity-utils",
3
- "version": "2.0.14",
3
+ "version": "2.0.17",
4
4
  "main": "dist/src/index.js",
5
5
  "types": "dist/src/index.d.ts",
6
6
  "repository": {
@@ -26,48 +26,50 @@
26
26
  "typechain": "hardhat typechain"
27
27
  },
28
28
  "dependencies": {
29
- "@metamask/eth-sig-util": "4.0.0",
30
- "@openzeppelin/contracts": "4.5.0",
29
+ "@metamask/eth-sig-util": "4.0.1",
30
+ "@openzeppelin/contracts": "4.6.0",
31
31
  "@openzeppelin/test-helpers": "0.5.15",
32
- "bn.js": "5.2.0",
32
+ "bn.js": "5.2.1",
33
33
  "chai": "4.3.6",
34
34
  "chai-as-promised": "7.1.1",
35
35
  "chai-bn": "0.3.1",
36
- "ethereumjs-util": "7.1.4",
37
- "web3-utils": "1.7.1"
36
+ "ethereumjs-util": "7.1.5",
37
+ "web3-utils": "1.7.4"
38
38
  },
39
39
  "devDependencies": {
40
- "@nomiclabs/hardhat-truffle5": "2.0.5",
40
+ "@nomiclabs/hardhat-truffle5": "2.0.6",
41
41
  "@nomiclabs/hardhat-web3": "2.0.0",
42
- "@typechain/hardhat": "6.0.0",
42
+ "@typechain/hardhat": "4.0.0",
43
43
  "@typechain/truffle-v5": "7.0.0",
44
- "@types/chai": "4.3.0",
44
+ "@types/chai": "4.3.1",
45
45
  "@types/chai-as-promised": "7.1.5",
46
- "@types/mocha": "9.1.0",
47
- "@types/node": "17.0.23",
48
- "@typescript-eslint/eslint-plugin": "5.18.0",
49
- "@typescript-eslint/parser": "5.18.0",
46
+ "@types/eth-sig-util": "2.1.1",
47
+ "@types/ethereumjs-util": "6.1.0",
48
+ "@types/mocha": "9.1.1",
49
+ "@types/node": "18.0.0",
50
+ "@typescript-eslint/eslint-plugin": "5.30.0",
51
+ "@typescript-eslint/parser": "5.30.0",
50
52
  "acquit": "1.2.1",
51
- "commander": "^9.1.0",
52
- "create-ts-index": "^1.14.0",
53
+ "commander": "9.3.0",
54
+ "create-ts-index": "1.14.0",
53
55
  "cross-spawn": "7.0.3",
54
- "dotenv": "16.0.0",
55
- "eslint": "8.12.0",
56
- "eslint-config-standard": "16.0.3",
56
+ "dotenv": "16.0.1",
57
+ "eslint": "8.18.0",
58
+ "eslint-config-standard": "17.0.0",
57
59
  "eslint-plugin-import": "2.26.0",
58
- "eslint-plugin-node": "11.1.0",
60
+ "eslint-plugin-n": "15.2.3",
59
61
  "eslint-plugin-promise": "6.0.0",
60
62
  "eslint-plugin-standard": "5.0.0",
61
- "eslint-plugin-typescript": "0.14.0",
62
- "hardhat": "2.9.3",
63
+ "ethereumjs-wallet": "1.0.2",
64
+ "hardhat": "2.9.9",
63
65
  "hardhat-gas-reporter": "1.0.8",
64
66
  "rimraf": "3.0.2",
65
67
  "shx": "0.3.4",
66
68
  "solhint": "3.3.7",
67
- "solidity-coverage": "0.7.20",
68
- "ts-node": "10.7.0",
69
+ "solidity-coverage": "0.7.21",
70
+ "ts-node": "10.8.1",
69
71
  "typechain": "7.0.0",
70
- "typescript": "4.6.3"
72
+ "typescript": "4.7.4"
71
73
  },
72
74
  "bin": {
73
75
  "solidity-utils-docify": "utils/docify.utils.js",
@@ -1,30 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
-
3
- pragma solidity ^0.8.0;
4
- pragma abicoder v1;
5
-
6
- import "@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol";
7
- import "./interfaces/IDaiLikePermit.sol";
8
- import "./libraries/RevertReasonForwarder.sol";
9
-
10
- contract Permitable {
11
- error BadPermitLength();
12
-
13
- function _permit(address token, bytes calldata permit) internal virtual {
14
- if (permit.length > 0) {
15
- bool success;
16
- if (permit.length == 32 * 7) {
17
- // solhint-disable-next-line avoid-low-level-calls
18
- (success,) = token.call(abi.encodePacked(IERC20Permit.permit.selector, permit));
19
- } else if (permit.length == 32 * 8) {
20
- // solhint-disable-next-line avoid-low-level-calls
21
- (success,) = token.call(abi.encodePacked(IDaiLikePermit.permit.selector, permit));
22
- } else {
23
- revert BadPermitLength();
24
- }
25
- if (!success) {
26
- RevertReasonForwarder.reRevert();
27
- }
28
- }
29
- }
30
- }