@morpho-org/blue-sdk 1.0.0 → 1.0.1
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.
- package/lib/addresses.d.ts +168 -0
- package/lib/addresses.js +169 -0
- package/lib/chain/chain.constants.d.ts +3 -0
- package/lib/chain/chain.constants.js +232 -0
- package/lib/chain/chain.types.d.ts +20 -0
- package/lib/chain/chain.types.js +30 -0
- package/lib/chain/chain.utils.d.ts +14 -0
- package/lib/chain/chain.utils.js +30 -0
- package/lib/chain/index.js +18 -0
- package/lib/constants.d.ts +8 -0
- package/lib/constants.js +13 -0
- package/lib/errors.d.ts +37 -0
- package/lib/errors.js +71 -0
- package/lib/ethers/index.js +18 -0
- package/lib/ethers/safeGetAddress.d.ts +1 -0
- package/lib/ethers/safeGetAddress.js +6 -0
- package/lib/ethers/safeParseUnits.d.ts +2 -0
- package/lib/ethers/safeParseUnits.js +25 -0
- package/lib/evm.d.ts +36 -0
- package/lib/evm.js +113 -0
- package/lib/helpers/format/format.d.ts +98 -0
- package/lib/helpers/format/format.js +301 -0
- package/lib/helpers/format/index.js +17 -0
- package/lib/helpers/getChecksumedAddress.d.ts +7 -0
- package/lib/helpers/getChecksumedAddress.js +17 -0
- package/lib/helpers/index.js +20 -0
- package/{src/helpers/isZeroAddressOrUnset.ts → lib/helpers/isZeroAddressOrUnset.d.ts} +1 -7
- package/lib/helpers/isZeroAddressOrUnset.js +14 -0
- package/lib/helpers/locale.d.ts +36 -0
- package/lib/helpers/locale.js +86 -0
- package/lib/holding/Holding.d.ts +60 -0
- package/lib/holding/Holding.js +31 -0
- package/lib/holding/index.js +17 -0
- package/lib/index.d.ts +33 -0
- package/lib/index.js +62 -0
- package/lib/market/Market.d.ts +159 -0
- package/lib/market/Market.js +240 -0
- package/lib/market/MarketConfig.d.ts +44 -0
- package/lib/market/MarketConfig.js +56 -0
- package/lib/market/MarketUtils.d.ts +165 -0
- package/lib/market/MarketUtils.js +182 -0
- package/lib/market/index.js +19 -0
- package/lib/maths/AdaptiveCurveIrmLib.d.ts +37 -0
- package/lib/maths/AdaptiveCurveIrmLib.js +116 -0
- package/lib/maths/MathLib.d.ts +94 -0
- package/lib/maths/MathLib.js +153 -0
- package/lib/maths/MathUtils.d.ts +15 -0
- package/lib/maths/MathUtils.js +33 -0
- package/lib/maths/SharesMath.d.ts +12 -0
- package/lib/maths/SharesMath.js +22 -0
- package/lib/maths/index.js +20 -0
- package/lib/notifications.d.ts +98 -0
- package/lib/notifications.js +52 -0
- package/lib/position/Position.d.ts +118 -0
- package/lib/position/Position.js +145 -0
- package/lib/position/index.js +17 -0
- package/lib/signatures/index.d.ts +12 -0
- package/lib/signatures/index.js +39 -0
- package/lib/signatures/manager.d.ts +10 -0
- package/lib/signatures/manager.js +37 -0
- package/lib/signatures/permit.d.ts +21 -0
- package/lib/signatures/permit.js +101 -0
- package/lib/signatures/permit2.d.ts +20 -0
- package/lib/signatures/permit2.js +91 -0
- package/lib/signatures/types.d.ts +13 -0
- package/lib/signatures/types.js +2 -0
- package/lib/signatures/utils.d.ts +6 -0
- package/lib/signatures/utils.js +44 -0
- package/lib/tests/mocks/markets.d.ts +17 -0
- package/lib/tests/mocks/markets.js +108 -0
- package/lib/token/ERC20Metadata.d.ts +249 -0
- package/lib/token/ERC20Metadata.js +81 -0
- package/lib/token/Token.d.ts +45 -0
- package/lib/token/Token.js +39 -0
- package/lib/token/TokenNamespace.d.ts +18 -0
- package/lib/token/TokenNamespace.js +55 -0
- package/lib/token/WrappedToken.d.ts +42 -0
- package/lib/token/WrappedToken.js +87 -0
- package/lib/token/index.js +18 -0
- package/lib/types.d.ts +29 -0
- package/lib/types.js +23 -0
- package/lib/user/User.d.ts +20 -0
- package/lib/user/User.js +11 -0
- package/lib/user/index.js +18 -0
- package/lib/user/user.types.d.ts +18 -0
- package/lib/user/user.types.js +2 -0
- package/lib/vault/Vault.d.ts +167 -0
- package/lib/vault/Vault.js +156 -0
- package/lib/vault/VaultAllocation.d.ts +38 -0
- package/lib/vault/VaultAllocation.js +18 -0
- package/lib/vault/VaultConfig.d.ts +23 -0
- package/lib/vault/VaultConfig.js +26 -0
- package/lib/vault/VaultUtils.d.ts +17 -0
- package/lib/vault/VaultUtils.js +17 -0
- package/lib/vault/index.js +20 -0
- package/package.json +5 -5
- package/src/addresses.ts +0 -261
- package/src/chain/chain.constants.ts +0 -235
- package/src/chain/chain.test.ts +0 -51
- package/src/chain/chain.types.ts +0 -42
- package/src/chain/chain.utils.ts +0 -44
- package/src/constants.ts +0 -18
- package/src/errors.ts +0 -75
- package/src/ethers/ethers.test.ts +0 -17
- package/src/ethers/safeGetAddress.ts +0 -4
- package/src/ethers/safeParseUnits.ts +0 -29
- package/src/evm.ts +0 -172
- package/src/helpers/format/format.test.ts +0 -340
- package/src/helpers/format/format.ts +0 -416
- package/src/helpers/getChecksumedAddress.ts +0 -15
- package/src/helpers/locale.ts +0 -108
- package/src/holding/Holding.ts +0 -109
- package/src/market/Market.ts +0 -479
- package/src/market/MarketConfig.ts +0 -108
- package/src/market/MarketUtils.test.ts +0 -25
- package/src/market/MarketUtils.ts +0 -467
- package/src/maths/AdaptiveCurveIrmLib.ts +0 -143
- package/src/maths/MathLib.ts +0 -208
- package/src/maths/MathUtils.ts +0 -31
- package/src/maths/SharesMath.ts +0 -40
- package/src/notifications.ts +0 -167
- package/src/position/Position.ts +0 -251
- package/src/signatures/index.ts +0 -18
- package/src/signatures/manager.ts +0 -50
- package/src/signatures/permit.ts +0 -126
- package/src/signatures/permit2.ts +0 -120
- package/src/signatures/types.ts +0 -18
- package/src/signatures/utils.ts +0 -83
- package/src/tests/mocks/markets.ts +0 -110
- package/src/token/ERC20Metadata.ts +0 -124
- package/src/token/Token.ts +0 -83
- package/src/token/TokenNamespace.ts +0 -76
- package/src/token/WrappedToken.ts +0 -142
- package/src/types.ts +0 -37
- package/src/user/User.ts +0 -32
- package/src/user/user.types.ts +0 -23
- package/src/vault/Vault.ts +0 -370
- package/src/vault/VaultAllocation.ts +0 -58
- package/src/vault/VaultConfig.ts +0 -55
- package/src/vault/VaultUtils.ts +0 -47
- /package/{src/chain/index.ts → lib/chain/index.d.ts} +0 -0
- /package/{src/ethers/index.ts → lib/ethers/index.d.ts} +0 -0
- /package/{src/helpers/format/index.ts → lib/helpers/format/index.d.ts} +0 -0
- /package/{src/helpers/index.ts → lib/helpers/index.d.ts} +0 -0
- /package/{src/holding/index.ts → lib/holding/index.d.ts} +0 -0
- /package/{src/market/index.ts → lib/market/index.d.ts} +0 -0
- /package/{src/maths/index.ts → lib/maths/index.d.ts} +0 -0
- /package/{src/position/index.ts → lib/position/index.d.ts} +0 -0
- /package/{src/token/index.ts → lib/token/index.d.ts} +0 -0
- /package/{src/user/index.ts → lib/user/index.d.ts} +0 -0
- /package/{src/vault/index.ts → lib/vault/index.d.ts} +0 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./Position"), exports);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as _Manager from "./manager";
|
|
2
|
+
import * as _Permit from "./permit";
|
|
3
|
+
import * as _Permit2 from "./permit2";
|
|
4
|
+
import { safeSignTypedData as _safeSignTypedData, verifySignature as _verifySignature, getMessage as _getMessage } from "./utils";
|
|
5
|
+
export declare namespace SignatureUtils {
|
|
6
|
+
export import Permit = _Permit;
|
|
7
|
+
export import Permit2 = _Permit2;
|
|
8
|
+
export import Manager = _Manager;
|
|
9
|
+
const safeSignTypedData: typeof _safeSignTypedData;
|
|
10
|
+
const verifySignature: typeof _verifySignature;
|
|
11
|
+
const getMessage: typeof _getMessage;
|
|
12
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.SignatureUtils = void 0;
|
|
27
|
+
const _Manager = __importStar(require("./manager"));
|
|
28
|
+
const _Permit = __importStar(require("./permit"));
|
|
29
|
+
const _Permit2 = __importStar(require("./permit2"));
|
|
30
|
+
const utils_1 = require("./utils");
|
|
31
|
+
var SignatureUtils;
|
|
32
|
+
(function (SignatureUtils) {
|
|
33
|
+
SignatureUtils.Permit = _Permit;
|
|
34
|
+
SignatureUtils.Permit2 = _Permit2;
|
|
35
|
+
SignatureUtils.Manager = _Manager;
|
|
36
|
+
SignatureUtils.safeSignTypedData = utils_1.safeSignTypedData;
|
|
37
|
+
SignatureUtils.verifySignature = utils_1.verifySignature;
|
|
38
|
+
SignatureUtils.getMessage = utils_1.getMessage;
|
|
39
|
+
})(SignatureUtils || (exports.SignatureUtils = SignatureUtils = {}));
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ChainId } from "../chain";
|
|
2
|
+
import { SignatureMessage } from "./types";
|
|
3
|
+
export interface ManagerApprovalSignatureArgs {
|
|
4
|
+
authorizer: string;
|
|
5
|
+
authorized: string;
|
|
6
|
+
isAuthorized: boolean;
|
|
7
|
+
nonce: bigint;
|
|
8
|
+
deadline: bigint;
|
|
9
|
+
}
|
|
10
|
+
export declare const getManagerApprovalMessage: (args: ManagerApprovalSignatureArgs, chainId: ChainId) => SignatureMessage;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getManagerApprovalMessage = void 0;
|
|
4
|
+
const addresses_1 = require("../addresses");
|
|
5
|
+
const utils_1 = require("./utils");
|
|
6
|
+
const getManagerApprovalMessage = (args, chainId) => {
|
|
7
|
+
const domain = {
|
|
8
|
+
chainId: chainId.toString(),
|
|
9
|
+
verifyingContract: (0, addresses_1.getChainAddresses)(chainId).morpho,
|
|
10
|
+
};
|
|
11
|
+
const types = {
|
|
12
|
+
Authorization: [
|
|
13
|
+
{
|
|
14
|
+
name: "authorizer",
|
|
15
|
+
type: "address",
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
name: "authorized",
|
|
19
|
+
type: "address",
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: "isAuthorized",
|
|
23
|
+
type: "bool",
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
name: "nonce",
|
|
27
|
+
type: "uint256",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: "deadline",
|
|
31
|
+
type: "uint256",
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
};
|
|
35
|
+
return (0, utils_1.getMessage)(domain, types, args);
|
|
36
|
+
};
|
|
37
|
+
exports.getManagerApprovalMessage = getManagerApprovalMessage;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ChainId } from "../chain";
|
|
2
|
+
import { Token } from "../token";
|
|
3
|
+
import { Address } from "../types";
|
|
4
|
+
import { SignatureMessage } from "./types";
|
|
5
|
+
export interface PermitArgs {
|
|
6
|
+
erc20: Token;
|
|
7
|
+
owner: Address;
|
|
8
|
+
spender: Address;
|
|
9
|
+
allowance: bigint;
|
|
10
|
+
nonce: bigint;
|
|
11
|
+
deadline: bigint;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Permit signature for ERC20 tokens, following EIP-2612.
|
|
15
|
+
* Docs: https://eips.ethereum.org/EIPS/eip-2612
|
|
16
|
+
*/
|
|
17
|
+
export declare const getPermitMessage: ({ deadline, owner, nonce, spender, erc20, allowance }: PermitArgs, chainId: ChainId) => SignatureMessage;
|
|
18
|
+
export declare const WITH_SIMPLE_PERMIT: {
|
|
19
|
+
[id in ChainId]: (Address | undefined)[];
|
|
20
|
+
};
|
|
21
|
+
export declare const hasSimplePermit: (chainId: ChainId, address: Address) => boolean;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hasSimplePermit = exports.WITH_SIMPLE_PERMIT = exports.getPermitMessage = void 0;
|
|
4
|
+
const addresses_1 = require("../addresses");
|
|
5
|
+
const chain_1 = require("../chain");
|
|
6
|
+
const utils_1 = require("./utils");
|
|
7
|
+
/**
|
|
8
|
+
* Permit signature for ERC20 tokens, following EIP-2612.
|
|
9
|
+
* Docs: https://eips.ethereum.org/EIPS/eip-2612
|
|
10
|
+
*/
|
|
11
|
+
const getPermitMessage = ({ deadline, owner, nonce, spender, erc20, allowance }, chainId) => {
|
|
12
|
+
const { usdc, dai } = (0, addresses_1.getChainAddresses)(chainId);
|
|
13
|
+
const domain = {
|
|
14
|
+
name: erc20.name,
|
|
15
|
+
version: erc20.address === usdc ? "2" : "1",
|
|
16
|
+
chainId: chainId.toString(),
|
|
17
|
+
verifyingContract: erc20.address,
|
|
18
|
+
};
|
|
19
|
+
if (erc20.address === dai)
|
|
20
|
+
return (0, utils_1.getMessage)(domain, {
|
|
21
|
+
Permit: [
|
|
22
|
+
{
|
|
23
|
+
name: "holder",
|
|
24
|
+
type: "address",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: "spender",
|
|
28
|
+
type: "address",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: "nonce",
|
|
32
|
+
type: "uint256",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: "expiry",
|
|
36
|
+
type: "uint256",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: "allowed",
|
|
40
|
+
type: "bool",
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
}, {
|
|
44
|
+
holder: owner,
|
|
45
|
+
spender,
|
|
46
|
+
allowed: allowance > 0n,
|
|
47
|
+
nonce,
|
|
48
|
+
expiry: deadline,
|
|
49
|
+
});
|
|
50
|
+
const types = {
|
|
51
|
+
Permit: [
|
|
52
|
+
{
|
|
53
|
+
name: "owner",
|
|
54
|
+
type: "address",
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: "spender",
|
|
58
|
+
type: "address",
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: "value",
|
|
62
|
+
type: "uint256",
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: "nonce",
|
|
66
|
+
type: "uint256",
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: "deadline",
|
|
70
|
+
type: "uint256",
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
};
|
|
74
|
+
const value = {
|
|
75
|
+
owner,
|
|
76
|
+
spender,
|
|
77
|
+
value: allowance,
|
|
78
|
+
nonce,
|
|
79
|
+
deadline,
|
|
80
|
+
};
|
|
81
|
+
return (0, utils_1.getMessage)(domain, types, value);
|
|
82
|
+
};
|
|
83
|
+
exports.getPermitMessage = getPermitMessage;
|
|
84
|
+
exports.WITH_SIMPLE_PERMIT = {
|
|
85
|
+
[chain_1.ChainId.EthMainnet]: [
|
|
86
|
+
addresses_1.addresses[chain_1.ChainId.EthMainnet].wbIB01,
|
|
87
|
+
addresses_1.addresses[chain_1.ChainId.EthMainnet].wbC3M,
|
|
88
|
+
addresses_1.addresses[chain_1.ChainId.EthMainnet].wstEth,
|
|
89
|
+
addresses_1.addresses[chain_1.ChainId.EthMainnet].sDai,
|
|
90
|
+
addresses_1.addresses[chain_1.ChainId.EthMainnet].osEth,
|
|
91
|
+
addresses_1.addresses[chain_1.ChainId.EthMainnet].usdc,
|
|
92
|
+
addresses_1.addresses[chain_1.ChainId.EthMainnet].dai,
|
|
93
|
+
],
|
|
94
|
+
[chain_1.ChainId.EthGoerliTestnet]: [
|
|
95
|
+
"0x0aCd15Fb54034492c392596B56ED415bD07e70d7", // Fake DAI
|
|
96
|
+
"0xD8134205b0328F5676aaeFb3B2a0DC15f4029d8C", // Real sDAI
|
|
97
|
+
],
|
|
98
|
+
[chain_1.ChainId.BaseMainnet]: [addresses_1.addresses[chain_1.ChainId.BaseMainnet].usdc],
|
|
99
|
+
};
|
|
100
|
+
const hasSimplePermit = (chainId, address) => exports.WITH_SIMPLE_PERMIT[chainId]?.includes(address);
|
|
101
|
+
exports.hasSimplePermit = hasSimplePermit;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ChainId } from "../chain";
|
|
2
|
+
import { Address } from "../types";
|
|
3
|
+
import { SignatureMessage } from "./types";
|
|
4
|
+
export interface Permit2Args {
|
|
5
|
+
erc20: Address;
|
|
6
|
+
allowance: bigint;
|
|
7
|
+
nonce: bigint;
|
|
8
|
+
deadline: bigint;
|
|
9
|
+
spender: Address;
|
|
10
|
+
expiration?: bigint;
|
|
11
|
+
}
|
|
12
|
+
export interface Permit2TransferFromArgs {
|
|
13
|
+
erc20: Address;
|
|
14
|
+
allowance: bigint;
|
|
15
|
+
spender: Address;
|
|
16
|
+
nonce: bigint;
|
|
17
|
+
deadline: bigint;
|
|
18
|
+
}
|
|
19
|
+
export declare const getPermit2TransferFromMessage: (args: Permit2TransferFromArgs, chainId: ChainId) => SignatureMessage;
|
|
20
|
+
export declare const getPermit2Message: (args: Permit2Args, chainId: ChainId) => SignatureMessage;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPermit2Message = exports.getPermit2TransferFromMessage = void 0;
|
|
4
|
+
const addresses_1 = require("../addresses");
|
|
5
|
+
const maths_1 = require("../maths");
|
|
6
|
+
const utils_1 = require("./utils");
|
|
7
|
+
const getPermit2TransferFromMessage = (args, chainId) => {
|
|
8
|
+
const domain = {
|
|
9
|
+
name: "Permit2",
|
|
10
|
+
chainId: chainId.toString(),
|
|
11
|
+
verifyingContract: (0, addresses_1.getChainAddresses)(chainId).permit2,
|
|
12
|
+
};
|
|
13
|
+
const types = {
|
|
14
|
+
PermitTransferFrom: [
|
|
15
|
+
{ name: "permitted", type: "TokenPermissions" },
|
|
16
|
+
{ name: "spender", type: "address" },
|
|
17
|
+
{ name: "nonce", type: "uint256" },
|
|
18
|
+
{ name: "deadline", type: "uint256" },
|
|
19
|
+
],
|
|
20
|
+
TokenPermissions: [
|
|
21
|
+
{ name: "token", type: "address" },
|
|
22
|
+
{ name: "amount", type: "uint256" },
|
|
23
|
+
],
|
|
24
|
+
};
|
|
25
|
+
const value = {
|
|
26
|
+
permitted: {
|
|
27
|
+
token: args.erc20,
|
|
28
|
+
amount: maths_1.MathLib.min(args.allowance, maths_1.MathLib.MAX_UINT_160),
|
|
29
|
+
},
|
|
30
|
+
spender: args.spender,
|
|
31
|
+
nonce: args.nonce,
|
|
32
|
+
deadline: args.deadline,
|
|
33
|
+
};
|
|
34
|
+
return (0, utils_1.getMessage)(domain, types, value);
|
|
35
|
+
};
|
|
36
|
+
exports.getPermit2TransferFromMessage = getPermit2TransferFromMessage;
|
|
37
|
+
const getPermit2Message = (args, chainId) => {
|
|
38
|
+
const domain = {
|
|
39
|
+
name: "Permit2",
|
|
40
|
+
chainId: chainId.toString(),
|
|
41
|
+
verifyingContract: (0, addresses_1.getChainAddresses)(chainId).permit2,
|
|
42
|
+
};
|
|
43
|
+
const types = {
|
|
44
|
+
PermitSingle: [
|
|
45
|
+
{
|
|
46
|
+
name: "details",
|
|
47
|
+
type: "PermitDetails",
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: "spender",
|
|
51
|
+
type: "address",
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: "sigDeadline",
|
|
55
|
+
type: "uint256",
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
PermitDetails: [
|
|
59
|
+
{
|
|
60
|
+
name: "token",
|
|
61
|
+
type: "address",
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: "amount",
|
|
65
|
+
type: "uint160",
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: "expiration",
|
|
69
|
+
type: "uint48",
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name: "nonce",
|
|
73
|
+
type: "uint48",
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
};
|
|
77
|
+
const value = {
|
|
78
|
+
details: {
|
|
79
|
+
token: args.erc20,
|
|
80
|
+
amount: maths_1.MathLib.min(args.allowance, maths_1.MathLib.MAX_UINT_160),
|
|
81
|
+
// Use an unlimited expiration because it most
|
|
82
|
+
// closely mimics how a standard approval works.
|
|
83
|
+
expiration: maths_1.MathLib.min(args.expiration ?? maths_1.MathLib.MAX_UINT_48, maths_1.MathLib.MAX_UINT_48),
|
|
84
|
+
nonce: args.nonce,
|
|
85
|
+
},
|
|
86
|
+
spender: args.spender,
|
|
87
|
+
sigDeadline: args.deadline,
|
|
88
|
+
};
|
|
89
|
+
return (0, utils_1.getMessage)(domain, types, value);
|
|
90
|
+
};
|
|
91
|
+
exports.getPermit2Message = getPermit2Message;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { TypedDataDomain } from "ethers";
|
|
2
|
+
export interface SignatureData {
|
|
3
|
+
domain: TypedDataDomain;
|
|
4
|
+
types: Record<string, {
|
|
5
|
+
name: string;
|
|
6
|
+
type: string;
|
|
7
|
+
}[]>;
|
|
8
|
+
value: object;
|
|
9
|
+
}
|
|
10
|
+
export interface SignatureMessage {
|
|
11
|
+
hash: string;
|
|
12
|
+
data: SignatureData;
|
|
13
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Signature, Signer, TypedDataDomain, TypedDataField } from "ethers";
|
|
2
|
+
import { Address } from "../types";
|
|
3
|
+
import { SignatureMessage } from "./types";
|
|
4
|
+
export declare function safeSignTypedData(signer: Signer, domain: TypedDataDomain, types: Record<string, TypedDataField[]>, value: Record<string, any>): Promise<Signature>;
|
|
5
|
+
export declare function verifySignature(signature: Signature, hash: string, signerAddress: Address): void;
|
|
6
|
+
export declare function getMessage(domain: TypedDataDomain, types: Record<string, TypedDataField[]>, value: Record<string, any>): SignatureMessage;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getMessage = exports.verifySignature = exports.safeSignTypedData = void 0;
|
|
4
|
+
const ethers_1 = require("ethers");
|
|
5
|
+
const errors_1 = require("../errors");
|
|
6
|
+
async function safeSignTypedData(signer, domain, types, value) {
|
|
7
|
+
const populated = await ethers_1.TypedDataEncoder.resolveNames(domain, types, value, (name) => {
|
|
8
|
+
return signer.resolveName(name);
|
|
9
|
+
});
|
|
10
|
+
// Fix the chainId parsing issue
|
|
11
|
+
// Tracking of https://github.com/ethers-io/ethers.js/issues/4649
|
|
12
|
+
const initialPayload = ethers_1.TypedDataEncoder.getPayload(populated.domain, types, populated.value);
|
|
13
|
+
const provider = signer.provider;
|
|
14
|
+
const unsafeChainId = Number(initialPayload.domain.chainId);
|
|
15
|
+
if (provider && "send" in provider && Number.isSafeInteger(unsafeChainId)) {
|
|
16
|
+
const correctedPayload = {
|
|
17
|
+
...initialPayload,
|
|
18
|
+
domain: {
|
|
19
|
+
...initialPayload.domain,
|
|
20
|
+
chainId: unsafeChainId, // that is safe now
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
return ethers_1.Signature.from(
|
|
24
|
+
// @ts-ignore if send is defined in the provider, it accepts raw RPC call args
|
|
25
|
+
await signer.provider.send("eth_signTypedData_v4", [
|
|
26
|
+
// Doing the same thing that inside of the signTypedData function.
|
|
27
|
+
await signer.getAddress().then((r) => r.toLowerCase()),
|
|
28
|
+
JSON.stringify(correctedPayload),
|
|
29
|
+
]));
|
|
30
|
+
}
|
|
31
|
+
return ethers_1.Signature.from(await signer.signTypedData(populated.domain, types, populated.value));
|
|
32
|
+
}
|
|
33
|
+
exports.safeSignTypedData = safeSignTypedData;
|
|
34
|
+
function verifySignature(signature, hash, signerAddress) {
|
|
35
|
+
const recoveredAddress = (0, ethers_1.recoverAddress)(hash, signature);
|
|
36
|
+
if (recoveredAddress === ethers_1.ZeroAddress || recoveredAddress !== signerAddress)
|
|
37
|
+
throw new errors_1.InvalidSignatureError(hash, signerAddress, recoveredAddress);
|
|
38
|
+
}
|
|
39
|
+
exports.verifySignature = verifySignature;
|
|
40
|
+
function getMessage(domain, types, value) {
|
|
41
|
+
const hash = ethers_1.TypedDataEncoder.hash(domain, types, value);
|
|
42
|
+
return { data: { domain, types, value }, hash };
|
|
43
|
+
}
|
|
44
|
+
exports.getMessage = getMessage;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { MarketConfig } from "../../market";
|
|
2
|
+
export declare const MAINNET_MARKETS: {
|
|
3
|
+
eth_wstEth: MarketConfig;
|
|
4
|
+
eth_rEth: MarketConfig;
|
|
5
|
+
usdt_wbtc: MarketConfig;
|
|
6
|
+
usdt_wstEth: MarketConfig;
|
|
7
|
+
usdc_wbtc: MarketConfig;
|
|
8
|
+
usdc_wstEth: MarketConfig;
|
|
9
|
+
usdc_sDai: MarketConfig;
|
|
10
|
+
idle_usdc: MarketConfig;
|
|
11
|
+
crvUsd_stkcvxcrvUSDTWBTCWETH: MarketConfig;
|
|
12
|
+
crvUsd_stkcvxcrvUSDCWBTCWETH: MarketConfig;
|
|
13
|
+
crvUsd_stkcvxcrvCRVUSDTBTCWSTETH: MarketConfig;
|
|
14
|
+
crvUsd_stkcvxTryLSD: MarketConfig;
|
|
15
|
+
crvUsd_stkcvxcrvUSDETHCRV: MarketConfig;
|
|
16
|
+
usda_re7Eth: MarketConfig;
|
|
17
|
+
};
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAINNET_MARKETS = void 0;
|
|
4
|
+
const ethers_1 = require("ethers");
|
|
5
|
+
const market_1 = require("../../market");
|
|
6
|
+
exports.MAINNET_MARKETS = {
|
|
7
|
+
eth_wstEth: new market_1.MarketConfig({
|
|
8
|
+
loanToken: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
|
|
9
|
+
collateralToken: "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0",
|
|
10
|
+
oracle: "0x2a01EB9496094dA03c4E364Def50f5aD1280AD72",
|
|
11
|
+
irm: "0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC",
|
|
12
|
+
lltv: (0, ethers_1.parseUnits)("0.945"),
|
|
13
|
+
}),
|
|
14
|
+
eth_rEth: new market_1.MarketConfig({
|
|
15
|
+
loanToken: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
|
|
16
|
+
collateralToken: "0xae78736Cd615f374D3085123A210448E74Fc6393",
|
|
17
|
+
oracle: "0x1b4A3F92e5Fffd1d35A98751c9FE4472483579bB",
|
|
18
|
+
irm: "0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC",
|
|
19
|
+
lltv: (0, ethers_1.parseUnits)("0.945"),
|
|
20
|
+
}),
|
|
21
|
+
usdt_wbtc: new market_1.MarketConfig({
|
|
22
|
+
loanToken: "0xdAC17F958D2ee523a2206206994597C13D831ec7",
|
|
23
|
+
collateralToken: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599",
|
|
24
|
+
oracle: "0x008bF4B1cDA0cc9f0e882E0697f036667652E1ef",
|
|
25
|
+
irm: "0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC",
|
|
26
|
+
lltv: (0, ethers_1.parseUnits)("0.86"),
|
|
27
|
+
}),
|
|
28
|
+
usdt_wstEth: new market_1.MarketConfig({
|
|
29
|
+
loanToken: "0xdAC17F958D2ee523a2206206994597C13D831ec7",
|
|
30
|
+
collateralToken: "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0",
|
|
31
|
+
oracle: "0x95DB30fAb9A3754e42423000DF27732CB2396992",
|
|
32
|
+
irm: "0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC",
|
|
33
|
+
lltv: (0, ethers_1.parseUnits)("0.86"),
|
|
34
|
+
}),
|
|
35
|
+
usdc_wbtc: new market_1.MarketConfig({
|
|
36
|
+
// USDC(wBTC, 86%, Chainlink, AdaptiveCurve)
|
|
37
|
+
loanToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
|
|
38
|
+
collateralToken: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599",
|
|
39
|
+
oracle: "0xDddd770BADd886dF3864029e4B377B5F6a2B6b83",
|
|
40
|
+
irm: "0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC",
|
|
41
|
+
lltv: (0, ethers_1.parseUnits)("0.86"),
|
|
42
|
+
}),
|
|
43
|
+
usdc_wstEth: new market_1.MarketConfig({
|
|
44
|
+
// USDC(wstETH, 86%, Chainlink, AdaptiveCurve)
|
|
45
|
+
loanToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
|
|
46
|
+
collateralToken: "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0",
|
|
47
|
+
oracle: "0x48F7E36EB6B826B2dF4B2E630B62Cd25e89E40e2",
|
|
48
|
+
irm: "0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC",
|
|
49
|
+
lltv: (0, ethers_1.parseUnits)("0.86"),
|
|
50
|
+
}),
|
|
51
|
+
usdc_sDai: new market_1.MarketConfig({
|
|
52
|
+
// USDC(wstETH, 86%, Chainlink, AdaptiveCurve)
|
|
53
|
+
loanToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
|
|
54
|
+
collateralToken: "0x83F20F44975D03b1b09e64809B757c47f942BEeA",
|
|
55
|
+
oracle: "0x6CAFE228eC0B0bC2D076577d56D35Fe704318f6d",
|
|
56
|
+
irm: "0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC",
|
|
57
|
+
lltv: (0, ethers_1.parseUnits)("0.965"),
|
|
58
|
+
}),
|
|
59
|
+
idle_usdc: new market_1.MarketConfig({
|
|
60
|
+
loanToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
|
|
61
|
+
collateralToken: ethers_1.ZeroAddress,
|
|
62
|
+
oracle: ethers_1.ZeroAddress,
|
|
63
|
+
irm: ethers_1.ZeroAddress,
|
|
64
|
+
lltv: 0n,
|
|
65
|
+
}),
|
|
66
|
+
crvUsd_stkcvxcrvUSDTWBTCWETH: new market_1.MarketConfig({
|
|
67
|
+
collateralToken: "0xb0Ce26C88e4e7DCa51968b6047f44646f5064278",
|
|
68
|
+
irm: "0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC",
|
|
69
|
+
lltv: (0, ethers_1.parseUnits)("0.86"),
|
|
70
|
+
loanToken: "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E",
|
|
71
|
+
oracle: "0x077Af6c2D4A75D4145d141F9e9421864C3940CB3",
|
|
72
|
+
}),
|
|
73
|
+
crvUsd_stkcvxcrvUSDCWBTCWETH: new market_1.MarketConfig({
|
|
74
|
+
collateralToken: "0x0ea1a65A2c255f24Ee8D81eA6AaC54Decd9d269e",
|
|
75
|
+
irm: "0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC",
|
|
76
|
+
lltv: (0, ethers_1.parseUnits)("0.86"),
|
|
77
|
+
loanToken: "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E",
|
|
78
|
+
oracle: "0xd2F7C3B2fC97cC7b6AfDd76D163394680EFc35b9",
|
|
79
|
+
}),
|
|
80
|
+
crvUsd_stkcvxcrvCRVUSDTBTCWSTETH: new market_1.MarketConfig({
|
|
81
|
+
collateralToken: "0x3ce8Ec9f3d89aD0A2DdbCC3FDB8991BD241Fc82E",
|
|
82
|
+
irm: "0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC",
|
|
83
|
+
lltv: (0, ethers_1.parseUnits)("0.86"),
|
|
84
|
+
loanToken: "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E",
|
|
85
|
+
oracle: "0xa9f7900476F43C45Ebf56cEa669B9c960C176112",
|
|
86
|
+
}),
|
|
87
|
+
crvUsd_stkcvxTryLSD: new market_1.MarketConfig({
|
|
88
|
+
collateralToken: "0x6BA072F0d22806F2C52e9792AF47f2D59103BEBE",
|
|
89
|
+
irm: "0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC",
|
|
90
|
+
lltv: (0, ethers_1.parseUnits)("0.86"),
|
|
91
|
+
loanToken: "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E",
|
|
92
|
+
oracle: "0x18B0d7311a97c5377445C80c768ab5201Bb27B5a",
|
|
93
|
+
}),
|
|
94
|
+
crvUsd_stkcvxcrvUSDETHCRV: new market_1.MarketConfig({
|
|
95
|
+
collateralToken: "0xAc904BAfBb5FB04Deb2b6198FdCEedE75a78Ce5a",
|
|
96
|
+
irm: "0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC",
|
|
97
|
+
lltv: (0, ethers_1.parseUnits)("0.86"),
|
|
98
|
+
loanToken: "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E",
|
|
99
|
+
oracle: "0xad7e157815df05029125B568E39d5402550d60bb",
|
|
100
|
+
}),
|
|
101
|
+
usda_re7Eth: new market_1.MarketConfig({
|
|
102
|
+
collateralToken: "0x78Fc2c2eD1A4cDb5402365934aE5648aDAd094d0",
|
|
103
|
+
irm: "0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC",
|
|
104
|
+
lltv: (0, ethers_1.parseUnits)("0.86"),
|
|
105
|
+
loanToken: "0x0000206329b97DB379d5E1Bf586BbDB969C63274",
|
|
106
|
+
oracle: "0x76052A2A28fDCB8124f4686C63C68355b142de3B",
|
|
107
|
+
}),
|
|
108
|
+
};
|