@1inch/solidity-utils 2.0.14 → 2.0.15

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.
@@ -0,0 +1,122 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity ^0.8.0;
4
+
5
+ import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
6
+ import "@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol";
7
+ import "../interfaces/IDaiLikePermit.sol";
8
+ import "../libraries/RevertReasonForwarder.sol";
9
+
10
+ library SafeERC20 {
11
+ error SafeTransferFailed();
12
+ error SafeTransferFromFailed();
13
+ error ForceApproveFailed();
14
+ error SafeIncreaseAllowanceFailed();
15
+ error SafeDecreaseAllowanceFailed();
16
+ error SafePermitBadLength();
17
+
18
+ // Ensures method do not revert or return boolean `true`, admits call to non-smart-contract
19
+ function safeTransferFrom(IERC20 token, address from, address to, uint256 amount) internal {
20
+ bytes4 selector = token.transferFrom.selector;
21
+ bool success;
22
+ assembly { // solhint-disable-line no-inline-assembly
23
+ let data := mload(0x40)
24
+ mstore(0x40, add(data, 100))
25
+
26
+ mstore(data, selector)
27
+ mstore(add(data, 0x04), from)
28
+ mstore(add(data, 0x24), to)
29
+ mstore(add(data, 0x44), amount)
30
+ let status := call(gas(), token, 0, data, 100, 0x0, 0x20)
31
+ success := and(status, or(iszero(returndatasize()), and(gt(returndatasize(), 31), eq(mload(0), 1))))
32
+ }
33
+ if (!success) {
34
+ revert SafeTransferFromFailed();
35
+ }
36
+ }
37
+
38
+ // Ensures method do not revert or return boolean `true`, admits call to non-smart-contract
39
+ function safeTransfer(IERC20 token, address to, uint256 value) internal {
40
+ if (!_makeCall(token, token.transfer.selector, to, value)) {
41
+ revert SafeTransferFailed();
42
+ }
43
+ }
44
+
45
+ // If `approve(from, to, amount)` fails, try to `approve(from, to, 0)` before retry
46
+ function forceApprove(IERC20 token, address spender, uint256 value) internal {
47
+ if (!_makeCall(token, token.approve.selector, spender, value)) {
48
+ if (!_makeCall(token, token.approve.selector, spender, 0) ||
49
+ !_makeCall(token, token.approve.selector, spender, value))
50
+ {
51
+ revert ForceApproveFailed();
52
+ }
53
+ }
54
+ }
55
+
56
+ function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
57
+ uint256 allowance = token.allowance(address(this), spender);
58
+ if (value > type(uint256).max - allowance) revert SafeIncreaseAllowanceFailed();
59
+ forceApprove(token, spender, allowance + value);
60
+ }
61
+
62
+ function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
63
+ uint256 allowance = token.allowance(address(this), spender);
64
+ if (value > allowance) revert SafeDecreaseAllowanceFailed();
65
+ forceApprove(token, spender, allowance - value);
66
+ }
67
+
68
+ function safePermit(IERC20 token, bytes calldata permit) internal {
69
+ bool success;
70
+ if (permit.length == 32 * 7) {
71
+ // solhint-disable-next-line avoid-low-level-calls
72
+ success = _makeCalldataCall(token, IERC20Permit.permit.selector, permit);
73
+ } else if (permit.length == 32 * 8) {
74
+ // solhint-disable-next-line avoid-low-level-calls
75
+ success = _makeCalldataCall(token, IDaiLikePermit.permit.selector, permit);
76
+ } else {
77
+ revert SafePermitBadLength();
78
+ }
79
+
80
+ if (!success) {
81
+ RevertReasonForwarder.reRevert();
82
+ }
83
+ }
84
+
85
+ function _makeCall(IERC20 token, bytes4 selector, address to, uint256 amount) private returns(bool done) {
86
+ assembly { // solhint-disable-line no-inline-assembly
87
+ let data := mload(0x40)
88
+ mstore(0x40, add(data, 68))
89
+
90
+ mstore(data, selector)
91
+ mstore(add(data, 0x04), to)
92
+ mstore(add(data, 0x24), amount)
93
+ let success := call(gas(), token, 0, data, 68, 0x0, 0x20)
94
+ done := and(
95
+ success,
96
+ or(
97
+ iszero(returndatasize()),
98
+ and(gt(returndatasize(), 31), eq(mload(0), 1))
99
+ )
100
+ )
101
+ }
102
+ }
103
+
104
+ function _makeCalldataCall(IERC20 token, bytes4 selector, bytes calldata args) private returns(bool done) {
105
+ assembly { // solhint-disable-line no-inline-assembly
106
+ let len := add(4, args.length)
107
+ let data := mload(0x40)
108
+ mstore(0x40, add(data, len))
109
+
110
+ mstore(data, selector)
111
+ calldatacopy(add(data, 0x04), args.offset, args.length)
112
+ let success := call(gas(), token, 0, data, len, 0x0, 0x20)
113
+ done := and(
114
+ success,
115
+ or(
116
+ iszero(returndatasize()),
117
+ and(gt(returndatasize(), 31), eq(mload(0), 1))
118
+ )
119
+ )
120
+ }
121
+ }
122
+ }
@@ -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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"}
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.15",
4
4
  "main": "dist/src/index.js",
5
5
  "types": "dist/src/index.d.ts",
6
6
  "repository": {
@@ -43,13 +43,15 @@
43
43
  "@typechain/truffle-v5": "7.0.0",
44
44
  "@types/chai": "4.3.0",
45
45
  "@types/chai-as-promised": "7.1.5",
46
+ "@types/eth-sig-util": "2.1.1",
47
+ "@types/ethereumjs-util": "6.1.0",
46
48
  "@types/mocha": "9.1.0",
47
49
  "@types/node": "17.0.23",
48
50
  "@typescript-eslint/eslint-plugin": "5.18.0",
49
51
  "@typescript-eslint/parser": "5.18.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
56
  "dotenv": "16.0.0",
55
57
  "eslint": "8.12.0",
@@ -58,7 +60,7 @@
58
60
  "eslint-plugin-node": "11.1.0",
59
61
  "eslint-plugin-promise": "6.0.0",
60
62
  "eslint-plugin-standard": "5.0.0",
61
- "eslint-plugin-typescript": "0.14.0",
63
+ "ethereumjs-wallet": "1.0.2",
62
64
  "hardhat": "2.9.3",
63
65
  "hardhat-gas-reporter": "1.0.8",
64
66
  "rimraf": "3.0.2",
@@ -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
- }