@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
|
+
}
|
package/dist/src/permit.d.ts
CHANGED
|
@@ -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;
|
package/dist/src/permit.js
CHANGED
|
@@ -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
|
-
|
|
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
|
/*
|
package/dist/src/permit.js.map
CHANGED
|
@@ -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.
|
|
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": "
|
|
52
|
-
"create-ts-index": "
|
|
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
|
-
"
|
|
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",
|
package/contracts/Permitable.sol
DELETED
|
@@ -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
|
-
}
|