From 1bfab4955743ce3d6b1d5a55366d4880f65c42af Mon Sep 17 00:00:00 2001 From: David Racero Date: Thu, 12 Nov 2020 09:11:17 +0100 Subject: [PATCH 01/11] Initial setup. Add Alchemy key --- docker-compose.yml | 3 + hardhat.config.ts | 12 ++- package-lock.json | 248 +++++++++++++++++++++++++++++---------------- package.json | 1 + 4 files changed, 175 insertions(+), 89 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index a30c069a..5ea0552e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -15,3 +15,6 @@ services: ETHERSCAN_KEY: ${ETHERSCAN_KEY} INFURA_KEY: ${INFURA_KEY} ETHERSCAN_NETWORK: ${ETHERSCAN_NETWORK} + TENDERLY_PROJECT: ${TENDERLY_PROJECT} + TENDERLY_USERNAME: ${TENDERLY_USERNAME} + ALCHEMY_KEY: ${ALCHEMY_KEY} diff --git a/hardhat.config.ts b/hardhat.config.ts index a6458c51..9eebd6b0 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -18,6 +18,7 @@ const DEFAULT_GAS_MUL = 2; const DEFAULT_GAS_PRICE = 2000000000; const HARDFORK = 'istanbul'; const INFURA_KEY = process.env.INFURA_KEY || ''; +const ALCHEMY_KEY = process.env.ALCHEMY_KEY || ''; const ETHERSCAN_KEY = process.env.ETHERSCAN_KEY || ''; const MNEMONIC_PATH = "m/44'/60'/0'/0"; const MNEMONIC = process.env.MNEMONIC || ''; @@ -38,7 +39,9 @@ require(`${path.join(__dirname, 'tasks/misc')}/set-bre.ts`); const getCommonNetworkConfig = (networkName: eEthereumNetwork, networkId: number) => { return { - url: `https://${networkName}.infura.io/v3/${INFURA_KEY}`, + url: ALCHEMY_KEY + ? `https://eth-${networkName}.alchemyapi.io/v2/${ALCHEMY_KEY}` + : `https://${networkName}.infura.io/v3/${INFURA_KEY}`, hardfork: HARDFORK, blockGasLimit: DEFAULT_BLOCK_GAS_LIMIT, gasMultiplier: DEFAULT_GAS_MUL, @@ -53,7 +56,7 @@ const getCommonNetworkConfig = (networkName: eEthereumNetwork, networkId: number }; }; -const buidlerConfig: HardhatUserConfig = { +const buidlerConfig = { solidity: { version: '0.6.8', settings: { @@ -71,6 +74,11 @@ const buidlerConfig: HardhatUserConfig = { mocha: { timeout: 0, }, + tenderly: { + project: process.env.TENDERLY_PROJECT, + username: process.env.TENDERLY_USERNAME, + forkNetwork: '1', //Network id of the network we want to fork + }, networks: { coverage: { url: 'http://localhost:8555', diff --git a/package-lock.json b/package-lock.json index 602312e5..01a30009 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1330,6 +1330,65 @@ "defer-to-connect": "^1.0.1" } }, + "@tenderly/hardhat-tenderly": { + "version": "1.1.0-beta.2", + "resolved": "https://registry.npmjs.org/@tenderly/hardhat-tenderly/-/hardhat-tenderly-1.1.0-beta.2.tgz", + "integrity": "sha512-aXdVLCRbUT7gc+460kXXBO+MIKEcKjBsqomCrBbFVnicY8yDnBqxijmbC9Y6dP9yUlcZE6mO27S0ycPdwjfS6Q==", + "dev": true, + "requires": { + "axios": "^0.20.0", + "fs-extra": "^9.0.1", + "js-yaml": "^3.14.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true + } + } + }, "@truffle/error": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.0.7.tgz", @@ -2482,6 +2541,12 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -2494,6 +2559,15 @@ "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==", "dev": true }, + "axios": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.20.0.tgz", + "integrity": "sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA==", + "dev": true, + "requires": { + "follow-redirects": "^1.10.0" + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -5293,13 +5367,13 @@ "dependencies": { "ansi-regex": { "version": "4.1.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "ansi-styles": { "version": "3.2.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { @@ -5308,7 +5382,7 @@ }, "bindings": { "version": "1.5.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, "requires": { @@ -5317,7 +5391,7 @@ }, "bip66": { "version": "1.1.5", - "resolved": false, + "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", "dev": true, "requires": { @@ -5326,19 +5400,19 @@ }, "bn.js": { "version": "4.11.8", - "resolved": false, + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, "brorand": { "version": "1.1.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true }, "browserify-aes": { "version": "1.2.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { @@ -5352,25 +5426,25 @@ }, "buffer-from": { "version": "1.1.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, "buffer-xor": { "version": "1.0.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, "camelcase": { "version": "5.3.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "cipher-base": { "version": "1.0.4", - "resolved": false, + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { @@ -5380,7 +5454,7 @@ }, "cliui": { "version": "5.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { @@ -5391,7 +5465,7 @@ }, "color-convert": { "version": "1.9.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { @@ -5400,13 +5474,13 @@ }, "color-name": { "version": "1.1.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "create-hash": { "version": "1.2.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { @@ -5419,7 +5493,7 @@ }, "create-hmac": { "version": "1.1.7", - "resolved": false, + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { @@ -5433,7 +5507,7 @@ }, "cross-spawn": { "version": "6.0.5", - "resolved": false, + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { @@ -5446,13 +5520,13 @@ }, "decamelize": { "version": "1.2.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, "drbg.js": { "version": "1.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", "dev": true, "requires": { @@ -5463,7 +5537,7 @@ }, "elliptic": { "version": "6.5.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", "dev": true, "requires": { @@ -5478,13 +5552,13 @@ }, "emoji-regex": { "version": "7.0.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "end-of-stream": { "version": "1.4.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { @@ -5493,7 +5567,7 @@ }, "ethereumjs-util": { "version": "6.1.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", "dev": true, "requires": { @@ -5508,7 +5582,7 @@ }, "ethjs-util": { "version": "0.1.6", - "resolved": false, + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", "dev": true, "requires": { @@ -5518,7 +5592,7 @@ }, "evp_bytestokey": { "version": "1.0.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { @@ -5528,7 +5602,7 @@ }, "execa": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { @@ -5543,13 +5617,13 @@ }, "file-uri-to-path": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", "dev": true }, "find-up": { "version": "3.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { @@ -5558,13 +5632,13 @@ }, "get-caller-file": { "version": "2.0.5", - "resolved": false, + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "get-stream": { "version": "4.1.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "requires": { @@ -5573,7 +5647,7 @@ }, "hash-base": { "version": "3.0.4", - "resolved": false, + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { @@ -5583,7 +5657,7 @@ }, "hash.js": { "version": "1.1.7", - "resolved": false, + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { @@ -5593,7 +5667,7 @@ }, "hmac-drbg": { "version": "1.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { @@ -5604,43 +5678,43 @@ }, "inherits": { "version": "2.0.4", - "resolved": false, + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "invert-kv": { "version": "2.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, "is-hex-prefixed": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=", "dev": true }, "is-stream": { "version": "1.1.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, "isexe": { "version": "2.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "keccak": { "version": "1.4.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", "dev": true, "requires": { @@ -5652,7 +5726,7 @@ }, "lcid": { "version": "2.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { @@ -5661,7 +5735,7 @@ }, "locate-path": { "version": "3.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { @@ -5671,7 +5745,7 @@ }, "map-age-cleaner": { "version": "0.1.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { @@ -5680,7 +5754,7 @@ }, "md5.js": { "version": "1.3.5", - "resolved": false, + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { @@ -5691,7 +5765,7 @@ }, "mem": { "version": "4.3.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "dev": true, "requires": { @@ -5702,37 +5776,37 @@ }, "mimic-fn": { "version": "2.1.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "minimalistic-assert": { "version": "1.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, "minimalistic-crypto-utils": { "version": "1.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", "dev": true }, "nan": { "version": "2.14.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", "dev": true }, "nice-try": { "version": "1.0.5", - "resolved": false, + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "npm-run-path": { "version": "2.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { @@ -5741,7 +5815,7 @@ }, "once": { "version": "1.4.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { @@ -5750,7 +5824,7 @@ }, "os-locale": { "version": "3.1.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", "dev": true, "requires": { @@ -5761,25 +5835,25 @@ }, "p-defer": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", "dev": true }, "p-finally": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, "p-is-promise": { "version": "2.1.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", "dev": true }, "p-limit": { "version": "2.2.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "dev": true, "requires": { @@ -5788,7 +5862,7 @@ }, "p-locate": { "version": "3.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { @@ -5797,25 +5871,25 @@ }, "p-try": { "version": "2.2.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "path-exists": { "version": "3.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, "path-key": { "version": "2.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, "pump": { "version": "3.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { @@ -5825,19 +5899,19 @@ }, "require-directory": { "version": "2.1.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, "require-main-filename": { "version": "2.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "ripemd160": { "version": "2.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { @@ -5847,7 +5921,7 @@ }, "rlp": { "version": "2.2.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.3.tgz", "integrity": "sha512-l6YVrI7+d2vpW6D6rS05x2Xrmq8oW7v3pieZOJKBEdjuTF4Kz/iwk55Zyh1Zaz+KOB2kC8+2jZlp2u9L4tTzCQ==", "dev": true, "requires": { @@ -5857,13 +5931,13 @@ }, "safe-buffer": { "version": "5.2.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", "dev": true }, "secp256k1": { "version": "3.7.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.7.1.tgz", "integrity": "sha512-1cf8sbnRreXrQFdH6qsg2H71Xw91fCCS9Yp021GnUNJzWJS/py96fS4lHbnTnouLp08Xj6jBoBB6V78Tdbdu5g==", "dev": true, "requires": { @@ -5879,19 +5953,19 @@ }, "semver": { "version": "5.7.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", "dev": true }, "set-blocking": { "version": "2.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, "sha.js": { "version": "2.4.11", - "resolved": false, + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { @@ -5901,7 +5975,7 @@ }, "shebang-command": { "version": "1.2.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { @@ -5910,25 +5984,25 @@ }, "shebang-regex": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, "signal-exit": { "version": "3.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, "source-map": { "version": "0.6.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "source-map-support": { "version": "0.5.12", - "resolved": false, + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", "dev": true, "requires": { @@ -5938,7 +6012,7 @@ }, "string-width": { "version": "3.1.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { @@ -5949,7 +6023,7 @@ }, "strip-ansi": { "version": "5.2.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { @@ -5958,13 +6032,13 @@ }, "strip-eof": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, "strip-hex-prefix": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", "dev": true, "requires": { @@ -5973,7 +6047,7 @@ }, "which": { "version": "1.3.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { @@ -5982,13 +6056,13 @@ }, "which-module": { "version": "2.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "wrap-ansi": { "version": "5.1.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "requires": { @@ -5999,19 +6073,19 @@ }, "wrappy": { "version": "1.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "y18n": { "version": "4.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, "yargs": { "version": "13.2.4", - "resolved": false, + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", "dev": true, "requires": { @@ -6030,7 +6104,7 @@ }, "yargs-parser": { "version": "13.1.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", "dev": true, "requires": { diff --git a/package.json b/package.json index cdcb78dd..00bc19ad 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "@nomiclabs/hardhat-ethers": "^2.0.0", "@nomiclabs/hardhat-waffle": "^2.0.0", "@openzeppelin/contracts": "3.1.0", + "@tenderly/hardhat-tenderly": "^1.1.0-beta.2", "@typechain/ethers-v4": "1.0.0", "@typechain/ethers-v5": "^1.0.0", "@typechain/truffle-v4": "2.0.2", From d1c6943cd3c766d8e712eb6eb4bc8debe3947c90 Mon Sep 17 00:00:00 2001 From: David Racero Date: Thu, 12 Nov 2020 14:12:26 +0100 Subject: [PATCH 02/11] Initial implementation of Tenderly plugin --- config/aave.ts | 23 ++++++++ config/commons.ts | 48 ++++++++++++++-- config/uniswap.ts | 23 ++++++++ docker-compose.yml | 1 + hardhat.config.ts | 7 ++- helpers/contracts-getters.ts | 11 +++- helpers/contracts-helpers.ts | 4 +- helpers/types.ts | 3 + modules/tenderly/tenderly.d.ts | 32 +++++++++++ package.json | 2 + ...ider_registry.ts => 1_address_provider.ts} | 16 +----- tasks/full/3_oracles.ts | 52 ++++++++++++------ tasks/full/5_initialize.ts | 14 +++++ tasks/migrations/aave.mainnet.fork.ts | 55 +++++++++++++++++++ tsconfig.json | 6 +- 15 files changed, 254 insertions(+), 43 deletions(-) create mode 100644 modules/tenderly/tenderly.d.ts rename tasks/full/{1_address_provider_registry.ts => 1_address_provider.ts} (78%) create mode 100644 tasks/migrations/aave.mainnet.fork.ts diff --git a/config/aave.ts b/config/aave.ts index 76f08a9d..0835ee81 100644 --- a/config/aave.ts +++ b/config/aave.ts @@ -129,6 +129,29 @@ export const AaveConfig: IAaveConfiguration = { YFI: '0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e', ZRX: '0xe41d2489571d322189246dafa5ebde1f4699f498', }, + [EthereumNetwork.tenderlyMain]: { + AAVE: '0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9', + BAT: '0x0d8775f648430679a709e98d2b0cb6250d2887ef', + BUSD: '0x4Fabb145d64652a948d72533023f6E7A623C7C53', + DAI: '0x6b175474e89094c44da98b954eedeac495271d0f', + ENJ: '0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c', + KNC: '0xdd974d5c2e2928dea5f71b9825b8b646686bd200', + LINK: '0x514910771af9ca656af840dff83e8264ecf986ca', + MANA: '0x0f5d2fb29fb7d3cfee444a200298f468908cc942', + MKR: '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2', + REN: '0x408e41876cCCDC0F92210600ef50372656052a38', + REP: '0x1985365e9f78359a9B6AD760e32412f4a445E862', + SNX: '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F', + SUSD: '0x57ab1ec28d129707052df4df418d58a2d46d5f51', + TUSD: '0x0000000000085d4780B73119b644AE5ecd22b376', + UNI: '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984', + USDC: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + USDT: '0xdac17f958d2ee523a2206206994597c13d831ec7', + WBTC: '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', + WETH: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + YFI: '0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e', + ZRX: '0xe41d2489571d322189246dafa5ebde1f4699f498', + }, }, }; diff --git a/config/commons.ts b/config/commons.ts index 5030a923..43554658 100644 --- a/config/commons.ts +++ b/config/commons.ts @@ -141,6 +141,7 @@ export const CommonsConfig: ICommonConfiguration = { [eEthereumNetwork.kovan]: undefined, [eEthereumNetwork.ropsten]: undefined, [eEthereumNetwork.main]: undefined, + [eEthereumNetwork.tenderlyMain]: undefined, }, PoolAdminIndex: 0, EmergencyAdmin: { @@ -150,6 +151,7 @@ export const CommonsConfig: ICommonConfiguration = { [eEthereumNetwork.kovan]: undefined, [eEthereumNetwork.ropsten]: undefined, [eEthereumNetwork.main]: undefined, + [eEthereumNetwork.tenderlyMain]: undefined, }, EmergencyAdminIndex: 1, ProviderRegistry: { @@ -159,6 +161,7 @@ export const CommonsConfig: ICommonConfiguration = { [eEthereumNetwork.coverage]: '', [eEthereumNetwork.hardhat]: '', [eEthereumNetwork.buidlerevm]: '', + [eEthereumNetwork.tenderlyMain]: '', }, LendingRateOracle: { [eEthereumNetwork.coverage]: '', @@ -166,7 +169,8 @@ export const CommonsConfig: ICommonConfiguration = { [eEthereumNetwork.buidlerevm]: '', [eEthereumNetwork.kovan]: '0xdCde9Bb6a49e37fA433990832AB541AE2d4FEB4a', [eEthereumNetwork.ropsten]: '0x05dcca805a6562c1bdd0423768754acb6993241b', - [eEthereumNetwork.main]: '0x4d728a4496e4de35f218d5a214366bde3a62b51c', + [eEthereumNetwork.main]: '', + [eEthereumNetwork.tenderlyMain]: '', }, TokenDistributor: { [eEthereumNetwork.coverage]: '', @@ -175,6 +179,7 @@ export const CommonsConfig: ICommonConfiguration = { [EthereumNetwork.kovan]: '0x971efe90088f21dc6a36f610ffed77fc19710708', [EthereumNetwork.ropsten]: '0xeba2ea67942b8250d870b12750b594696d02fc9c', [EthereumNetwork.main]: '0xe3d9988f676457123c5fd01297605efdd0cba1ae', + [EthereumNetwork.tenderlyMain]: '0xe3d9988f676457123c5fd01297605efdd0cba1ae', }, ChainlinkProxyPriceProvider: { [eEthereumNetwork.coverage]: '', @@ -182,7 +187,8 @@ export const CommonsConfig: ICommonConfiguration = { [eEthereumNetwork.buidlerevm]: '', [EthereumNetwork.kovan]: '0x276C4793F2EE3D5Bf18C5b879529dD4270BA4814', [EthereumNetwork.ropsten]: '0x657372A559c30d236F011239fF9fbB6D76718271', - [EthereumNetwork.main]: '0x76B47460d7F7c5222cFb6b6A75615ab10895DDe4', + [EthereumNetwork.main]: '', + [EthereumNetwork.tenderlyMain]: '', }, FallbackOracle: { [eEthereumNetwork.coverage]: '', @@ -190,7 +196,8 @@ export const CommonsConfig: ICommonConfiguration = { [eEthereumNetwork.buidlerevm]: '', [EthereumNetwork.kovan]: '0x50913E8E1c650E790F8a1E741FF9B1B1bB251dfe', [EthereumNetwork.ropsten]: '0xAD1a978cdbb8175b2eaeC47B01404f8AEC5f4F0d', - [EthereumNetwork.main]: '0xf67a8b0e3e0ee303422f78b4c5b8da60df80a59c', + [EthereumNetwork.main]: '', + [EthereumNetwork.tenderlyMain]: '', }, ChainlinkAggregator: { [eEthereumNetwork.coverage]: {}, @@ -259,7 +266,36 @@ export const CommonsConfig: ICommonConfiguration = { BAT: '0x9b4e2579895efa2b4765063310Dc4109a7641129', BUSD: '0x5d4BB541EED49D0290730b4aB332aA46bd27d888', DAI: '0x037E8F2125bF532F3e228991e051c8A7253B642c', - ENJ: '0x24D9aB51950F3d62E9144fdC2f3135DAA6Ce8D1B', + ENJ: '0x24D9aB51950F3d62E9 144fdC2f3135DAA6Ce8D1B', + KNC: '0xd0e785973390fF8E77a83961efDb4F271E6B8152', + LINK: '0xeCfA53A8bdA4F0c4dd39c55CC8deF3757aCFDD07', + MANA: '0xc89c4ed8f52Bb17314022f6c0dCB26210C905C97', + MKR: '0xda3d675d50ff6c555973c4f0424964e1f6a4e7d3', + REN: '0x3147D7203354Dc06D9fd350c7a2437bcA92387a4', + REP: '0xb8b513d9cf440C1b6f5C7142120d611C94fC220c', + SNX: '0xE23d1142dE4E83C08bb048bcab54d50907390828', + SUSD: '0x6d626Ff97f0E89F6f983dE425dc5B24A18DE26Ea', + TUSD: '0x73ead35fd6A572EF763B13Be65a9db96f7643577', + UNI: '0xD6aA3D25116d8dA79Ea0246c4826EB951872e02e', + USDC: '0xdE54467873c3BCAA76421061036053e371721708', + USDT: '0xa874fe207DF445ff19E7482C746C4D3fD0CB9AcE', + WBTC: '0x0133Aa47B6197D0BA090Bf2CD96626Eb71fFd13c', + YFI: '0x7c5d4F8345e66f68099581Db340cd65B078C41f4', + ZRX: '0xA0F9D94f060836756FFC84Db4C78d097cA8C23E8', + UNI_DAI_ETH: '0x1bAB293850289Bf161C5DA79ff3d1F02A950555b', + UNI_LEND_ETH: '0xF4C8Db2d999b024bBB6c6022566503eD41f2AC1E', + UNI_LINK_ETH: '0xE2A639Beb647d7F709ca805ABa760bBEfdbE37e3', + UNI_MKR_ETH: '0xEe40a5E8F3732bE6ECDb5A90e23D0b7bF0D4a73c', + UNI_SETH_ETH: '0x517D40E49660c7705b2e99eEFA6d7B0E9Ba5BF10', + UNI_USDC_ETH: '0x444315Ee92F2bb3579293C17B07194227fA99bF0', + USD: '0x59b826c214aBa7125bFA52970d97736c105Cc375', + }, + [EthereumNetwork.tenderlyMain]: { + AAVE: '0x6Df09E975c830ECae5bd4eD9d90f3A95a4f88012', + BAT: '0x9b4e2579895efa2b4765063310Dc4109a7641129', + BUSD: '0x5d4BB541EED49D0290730b4aB332aA46bd27d888', + DAI: '0x037E8F2125bF532F3e228991e051c8A7253B642c', + ENJ: '0x24D9aB51950F3d62E9 144fdC2f3135DAA6Ce8D1B', KNC: '0xd0e785973390fF8E77a83961efDb4F271E6B8152', LINK: '0xeCfA53A8bdA4F0c4dd39c55CC8deF3757aCFDD07', MANA: '0xc89c4ed8f52Bb17314022f6c0dCB26210C905C97', @@ -291,6 +327,7 @@ export const CommonsConfig: ICommonConfiguration = { [EthereumNetwork.main]: {}, [EthereumNetwork.kovan]: {}, [EthereumNetwork.ropsten]: {}, + [EthereumNetwork.tenderlyMain]: {}, }, ReservesConfig: {}, ATokenDomainSeparator: { @@ -303,6 +340,7 @@ export const CommonsConfig: ICommonConfiguration = { [eEthereumNetwork.kovan]: '', [eEthereumNetwork.ropsten]: '', [eEthereumNetwork.main]: '', + [eEthereumNetwork.tenderlyMain]: '', }, ProxyPriceProvider: { [eEthereumNetwork.coverage]: '', @@ -311,6 +349,7 @@ export const CommonsConfig: ICommonConfiguration = { [eEthereumNetwork.kovan]: '0xB8bE51E6563BB312Cbb2aa26e352516c25c26ac1', [eEthereumNetwork.ropsten]: '', [eEthereumNetwork.main]: '', + [eEthereumNetwork.tenderlyMain]: '', }, WETH: { [eEthereumNetwork.coverage]: '', // deployed in local evm @@ -319,5 +358,6 @@ export const CommonsConfig: ICommonConfiguration = { [eEthereumNetwork.kovan]: '0xd0a1e359811322d97991e03f863a0c30c2cf029c', [eEthereumNetwork.ropsten]: '0xc778417e063141139fce010982780140aa0cd5ab', [eEthereumNetwork.main]: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + [eEthereumNetwork.tenderlyMain]: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', }, }; diff --git a/config/uniswap.ts b/config/uniswap.ts index 84a9612f..78852196 100644 --- a/config/uniswap.ts +++ b/config/uniswap.ts @@ -181,6 +181,17 @@ export const UniswapConfig: IUniswapConfiguration = { UNI_SETH_ETH: '0x517D40E49660c7705b2e99eEFA6d7B0E9Ba5BF10', UNI_USDC_ETH: '0x444315Ee92F2bb3579293C17B07194227fA99bF0', }, + [EthereumNetwork.tenderlyMain]: { + DAI: '0x037E8F2125bF532F3e228991e051c8A7253B642c', + USDC: '0xdE54467873c3BCAA76421061036053e371721708', + USDT: '0xa874fe207DF445ff19E7482C746C4D3fD0CB9AcE', + UNI_DAI_ETH: '0x1bAB293850289Bf161C5DA79ff3d1F02A950555b', + UNI_LEND_ETH: '0xF4C8Db2d999b024bBB6c6022566503eD41f2AC1E', + UNI_LINK_ETH: '0xE2A639Beb647d7F709ca805ABa760bBEfdbE37e3', + UNI_MKR_ETH: '0xEe40a5E8F3732bE6ECDb5A90e23D0b7bF0D4a73c', + UNI_SETH_ETH: '0x517D40E49660c7705b2e99eEFA6d7B0E9Ba5BF10', + UNI_USDC_ETH: '0x444315Ee92F2bb3579293C17B07194227fA99bF0', + }, }, ReserveAssets: { [eEthereumNetwork.hardhat]: {}, @@ -222,5 +233,17 @@ export const UniswapConfig: IUniswapConfiguration = { UNI_SETH_ETH: '0xe9cf7887b93150d4f2da7dfc6d502b216438f244', UNI_USDC_ETH: '0x97dec872013f6b5fb443861090ad931542878126', }, + [EthereumNetwork.tenderlyMain]: { + DAI: '0x6b175474e89094c44da98b954eedeac495271d0f', + USDC: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + USDT: '0xdac17f958d2ee523a2206206994597c13d831ec7', + WETH: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + UNI_DAI_ETH: '0x2a1530c4c41db0b0b2bb646cb5eb1a67b7158667', + UNI_LEND_ETH: '0xcaa7e4656f6a2b59f5f99c745f91ab26d1210dce', + UNI_LINK_ETH: '0xf173214c720f58e03e194085b1db28b50acdeead', + UNI_MKR_ETH: '0x2c4bd064b998838076fa341a83d007fc2fa50957', + UNI_SETH_ETH: '0xe9cf7887b93150d4f2da7dfc6d502b216438f244', + UNI_USDC_ETH: '0x97dec872013f6b5fb443861090ad931542878126', + }, }, }; diff --git a/docker-compose.yml b/docker-compose.yml index 5ea0552e..f6cca30f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,6 +10,7 @@ services: command: npm run run-env volumes: - ./:/src + - $HOME/.tenderly/config.yaml:/root/.tenderly/config.yaml environment: MNEMONIC: ${MNEMONIC} ETHERSCAN_KEY: ${ETHERSCAN_KEY} diff --git a/hardhat.config.ts b/hardhat.config.ts index 9eebd6b0..5e366506 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -1,6 +1,5 @@ import path from 'path'; import fs from 'fs'; -import {HardhatUserConfig} from 'hardhat/config'; // @ts-ignore import {accounts} from './test-wallets.js'; import {eEthereumNetwork} from './helpers/types'; @@ -11,6 +10,7 @@ import '@nomiclabs/hardhat-waffle'; import 'temp-hardhat-etherscan'; import 'hardhat-gas-reporter'; import 'hardhat-typechain'; +import '@tenderly/hardhat-tenderly'; const SKIP_LOAD = process.env.SKIP_LOAD === 'true'; const DEFAULT_BLOCK_GAS_LIMIT = 12450000; @@ -75,8 +75,8 @@ const buidlerConfig = { timeout: 0, }, tenderly: { - project: process.env.TENDERLY_PROJECT, - username: process.env.TENDERLY_USERNAME, + // project: process.env.TENDERLY_PROJECT, + //username: process.env.TENDERLY_USERNAME, forkNetwork: '1', //Network id of the network we want to fork }, networks: { @@ -87,6 +87,7 @@ const buidlerConfig = { kovan: getCommonNetworkConfig(eEthereumNetwork.kovan, 42), ropsten: getCommonNetworkConfig(eEthereumNetwork.ropsten, 3), main: getCommonNetworkConfig(eEthereumNetwork.main, 1), + tenderlyMain: getCommonNetworkConfig(eEthereumNetwork.main, 1), hardhat: { hardfork: 'istanbul', blockGasLimit: DEFAULT_BLOCK_GAS_LIMIT, diff --git a/helpers/contracts-getters.ts b/helpers/contracts-getters.ts index fa220c28..791a9185 100644 --- a/helpers/contracts-getters.ts +++ b/helpers/contracts-getters.ts @@ -2,6 +2,7 @@ import { AaveProtocolDataProviderFactory, ATokenFactory, ATokensAndRatesHelperFactory, + ChainlinkProxyPriceProviderFactory, DefaultReserveInterestRateStrategyFactory, GenericLogicFactory, InitializableAdminUpgradeabilityProxyFactory, @@ -23,12 +24,10 @@ import { StableDebtTokenFactory, VariableDebtTokenFactory, WalletBalanceProviderFactory, - Weth9Factory, Weth9MockedFactory, WethGatewayFactory, } from '../types'; import {Ierc20DetailedFactory} from '../types/Ierc20DetailedFactory'; -import {UpgradeabilityProxy} from '../types/UpgradeabilityProxy'; import {MockTokenMap} from './contracts-helpers'; import {DRE, getDb} from './misc-utils'; import {eContractid, PoolConfiguration, tEthereumAddress, TokenContractId} from './types'; @@ -323,3 +322,11 @@ export const getLendingPoolCollateralManager = async (address?: tEthereumAddress export const getAddressById = async (id: string) => (await getDb().get(`${id}.${DRE.network.name}`).value()).address; + +export const getChainlinkPriceProvider = async (address?: tEthereumAddress) => + await ChainlinkProxyPriceProviderFactory.connect( + address || + (await getDb().get(`${eContractid.ChainlinkProxyPriceProvider}.${DRE.network.name}`).value()) + .address, + await getFirstSigner() + ); diff --git a/helpers/contracts-helpers.ts b/helpers/contracts-helpers.ts index ba8ee5d1..22c5dcd2 100644 --- a/helpers/contracts-helpers.ts +++ b/helpers/contracts-helpers.ts @@ -124,7 +124,7 @@ export const linkBytecode = (artifact: BuidlerArtifact | Artifact, libraries: an }; export const getParamPerNetwork = ( - {kovan, ropsten, main, buidlerevm, coverage}: iParamsPerNetwork, + {kovan, ropsten, main, buidlerevm, coverage, tenderlyMain}: iParamsPerNetwork, network: eEthereumNetwork ) => { switch (network) { @@ -140,6 +140,8 @@ export const getParamPerNetwork = ( return ropsten; case eEthereumNetwork.main: return main; + case eEthereumNetwork.tenderlyMain: + return tenderlyMain; } }; diff --git a/helpers/types.ts b/helpers/types.ts index c9aac797..7c447ea9 100644 --- a/helpers/types.ts +++ b/helpers/types.ts @@ -11,6 +11,7 @@ export enum eEthereumNetwork { main = 'main', coverage = 'coverage', hardhat = 'hardhat', + tenderlyMain = 'tenderlyMain', } export enum EthereumNetworkNames { @@ -324,6 +325,7 @@ export interface iParamsPerNetwork { [eEthereumNetwork.ropsten]: T; [eEthereumNetwork.main]: T; [eEthereumNetwork.hardhat]: T; + [eEthereumNetwork.tenderlyMain]: T; } export interface iParamsPerPool { @@ -352,6 +354,7 @@ export enum EthereumNetwork { development = 'development', main = 'main', coverage = 'soliditycoverage', + tenderlyMain = 'tenderlyMain', } export interface IProtocolGlobalConfig { diff --git a/modules/tenderly/tenderly.d.ts b/modules/tenderly/tenderly.d.ts new file mode 100644 index 00000000..5e106e80 --- /dev/null +++ b/modules/tenderly/tenderly.d.ts @@ -0,0 +1,32 @@ +import 'hardhat/types/config'; +import 'hardhat/types/runtime'; + +import {TenderlyConfig} from './types'; + +declare module 'hardhat/types/runtime' { + export interface HardhatRuntimeEnvironment { + tenderly: { + verify: (...contracts) => Promise; + push: (...contracts) => Promise; + persistArtifacts: (...contracts) => Promise; + }; + tenderlyRPC: { + verify: (...contracts) => Promise; + resetFork: () => string | undefined; + getHead: () => string | undefined; + setHead: (head: string | undefined) => void; + getFork: () => string | undefined; + setFork: (fork: string | undefined) => void; + }; + } +} + +declare module 'hardhat/types/config' { + export interface HardhatUserConfig { + tenderly?: TenderlyConfig; + } + + export interface HardhatConfig { + tenderly: TenderlyConfig; + } +} diff --git a/package.json b/package.json index 00bc19ad..92f442bf 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "run-env": "npm i && tail -f /dev/null", "hardhat": "hardhat", "hardhat:kovan": "hardhat --network kovan", + "hardhat:tenderly-main": "hardhat --network tenderlyMain", "hardhat:ropsten": "hardhat--network ropsten", "hardhat:main": "hardhat --network main", "hardhat:docker": "hardhat --network hardhatevm_docker", @@ -21,6 +22,7 @@ "aave:kovan:full:initialize": "npm run hardhat:kovan -- full:initialize-lending-pool --verify --pool Aave", "aave:ropsten:dev:migration": "npm run hardhat:ropsten -- aave:dev --verify", "aave:ropsten:full:migration": "npm run hardhat:ropsten -- aave:full --verify", + "aave:fork:main:migration": "npm run hardhat:tenderly-main -- aave:full:fork", "aave:main:dev:migration": "npm run hardhat:main -- aave:dev --verify", "aave:main:full:migration": "npm run hardhat:main -- aave:full --verify", "uniswap:evm:dev:migration": "hardhat uniswap:dev", diff --git a/tasks/full/1_address_provider_registry.ts b/tasks/full/1_address_provider.ts similarity index 78% rename from tasks/full/1_address_provider_registry.ts rename to tasks/full/1_address_provider.ts index 5af922d4..cc9edf0c 100644 --- a/tasks/full/1_address_provider_registry.ts +++ b/tasks/full/1_address_provider.ts @@ -28,7 +28,9 @@ task( const providerRegistryAddress = getParamPerNetwork(poolConfig.ProviderRegistry, network); // Deploy address provider and set genesis manager + console.log('addres provider'); const addressesProvider = await deployLendingPoolAddressesProvider(verify); + await waitForTx(await addressesProvider.setPoolAdmin(await getGenesisPoolAdmin(poolConfig))); const admin = await getEmergencyAdmin(poolConfig); console.log('Admin is ', admin); @@ -46,18 +48,4 @@ task( ProviderId ) ); - - //register the proxy price provider on the addressesProvider - const proxyProvider = getParamPerNetwork(poolConfig.ProxyPriceProvider, network); - - if (proxyProvider && proxyProvider !== '') { - await waitForTx(await addressesProvider.setPriceOracle(proxyProvider)); - } - - //register the lending rate oracle - const lendingRateOracle = getParamPerNetwork(poolConfig.LendingRateOracle, network); - - if (lendingRateOracle && lendingRateOracle !== '') { - await waitForTx(await addressesProvider.setLendingRateOracle(lendingRateOracle)); - } }); diff --git a/tasks/full/3_oracles.ts b/tasks/full/3_oracles.ts index 48782dba..e492724c 100644 --- a/tasks/full/3_oracles.ts +++ b/tasks/full/3_oracles.ts @@ -7,10 +7,18 @@ import { import {setInitialMarketRatesInRatesOracleByHelper} from '../../helpers/oracles-helpers'; import {ICommonConfiguration, eEthereumNetwork, SymbolMap} from '../../helpers/types'; import {waitForTx, filterMapBy} from '../../helpers/misc-utils'; -import {ConfigNames, loadPoolConfig, getWethAddress} from '../../helpers/configuration'; +import { + ConfigNames, + loadPoolConfig, + getWethAddress, + getGenesisPoolAdmin, +} from '../../helpers/configuration'; import {exit} from 'process'; import { + getAddressById, + getChainlinkPriceProvider, getLendingPoolAddressesProvider, + getLendingRateOracle, getPairsTokenAggregator, } from '../../helpers/contracts-getters'; @@ -33,8 +41,9 @@ task('full:deploy-oracles', 'Deploy oracles for dev enviroment') Object.keys(ReserveAssets[network]).includes(key) ); const addressesProvider = await getLendingPoolAddressesProvider(); - const admin = await addressesProvider.getPoolAdmin(); - + const admin = await getGenesisPoolAdmin(poolConfig); + const proxyPriceProviderAddress = getParamPerNetwork(poolConfig.ProxyPriceProvider, network); + const lendingRateOracleAddress = getParamPerNetwork(poolConfig.LendingRateOracle, network); const fallbackOracle = await getParamPerNetwork(FallbackOracle, network); const reserveAssets = await getParamPerNetwork(ReserveAssets, network); const chainlinkAggregators = await getParamPerNetwork(ChainlinkAggregator, network); @@ -45,24 +54,33 @@ task('full:deploy-oracles', 'Deploy oracles for dev enviroment') }; const [tokens, aggregators] = getPairsTokenAggregator(tokensToWatch, chainlinkAggregators); - const chainlinkProviderPriceProvider = await deployChainlinkProxyPriceProvider( - [tokens, aggregators, fallbackOracle, await getWethAddress(poolConfig)], - verify - ); + const chainlinkProviderPriceProvider = proxyPriceProviderAddress + ? await getChainlinkPriceProvider(proxyPriceProviderAddress) + : await deployChainlinkProxyPriceProvider( + [tokens, aggregators, fallbackOracle, await getWethAddress(poolConfig)], + verify + ); + + const lendingRateOracle = lendingRateOracleAddress + ? await getLendingRateOracle(lendingRateOracleAddress) + : await deployLendingRateOracle(verify); + + const {USD, ...tokensAddressesWithoutUsd} = tokensToWatch; + + if (!lendingRateOracleAddress) { + await setInitialMarketRatesInRatesOracleByHelper( + lendingRateOracles, + tokensAddressesWithoutUsd, + lendingRateOracle, + admin + ); + } + + // Register the proxy price provider on the addressesProvider await waitForTx( await addressesProvider.setPriceOracle(chainlinkProviderPriceProvider.address) ); - - const lendingRateOracle = await deployLendingRateOracle(verify); await waitForTx(await addressesProvider.setLendingRateOracle(lendingRateOracle.address)); - - const {USD, ...tokensAddressesWithoutUsd} = tokensToWatch; - await setInitialMarketRatesInRatesOracleByHelper( - lendingRateOracles, - tokensAddressesWithoutUsd, - lendingRateOracle, - admin - ); } catch (err) { console.error(err); exit(1); diff --git a/tasks/full/5_initialize.ts b/tasks/full/5_initialize.ts index 99b55f15..718c2231 100644 --- a/tasks/full/5_initialize.ts +++ b/tasks/full/5_initialize.ts @@ -54,6 +54,20 @@ task('full:initialize-lending-pool', 'Initialize lending pool configuration.') const lendingPoolAddress = await addressesProvider.getLendingPool(); await deployWETHGateway([wethAddress, lendingPoolAddress]); + + //register the proxy price provider on the addressesProvider + const proxyProvider = getParamPerNetwork(poolConfig.ProxyPriceProvider, network); + + if (proxyProvider && proxyProvider !== '') { + await waitForTx(await addressesProvider.setPriceOracle(proxyProvider)); + } + + //register the lending rate oracle + const lendingRateOracle = getParamPerNetwork(poolConfig.LendingRateOracle, network); + + if (lendingRateOracle && lendingRateOracle !== '') { + await waitForTx(await addressesProvider.setLendingRateOracle(lendingRateOracle)); + } } catch (err) { console.error(err); exit(1); diff --git a/tasks/migrations/aave.mainnet.fork.ts b/tasks/migrations/aave.mainnet.fork.ts new file mode 100644 index 00000000..9f61d042 --- /dev/null +++ b/tasks/migrations/aave.mainnet.fork.ts @@ -0,0 +1,55 @@ +import {task} from 'hardhat/config'; +import {ExternalProvider} from '@ethersproject/providers'; +import {checkVerification} from '../../helpers/etherscan-verification'; +import {ConfigNames} from '../../helpers/configuration'; +import {EthereumNetworkNames} from '../../helpers/types'; +import {printContracts} from '../../helpers/misc-utils'; + +task('aave:full:fork', 'Deploy development enviroment') + .addFlag('verify', 'Verify contracts at Etherscan') + .setAction(async ({verify}, DRE) => { + const POOL_NAME = ConfigNames.Aave; + const network = DRE.network.name; + if (!network.includes('tenderly')) { + throw 'This task only supports tenderly networks: tenderlyMain, tenderlyKovan'; + } + await DRE.run('set-DRE'); + + // Prevent loss of gas verifying all the needed ENVs for Etherscan verification + if (verify) { + checkVerification(); + } + console.log('- Setting up Tenderly provider'); + DRE.ethers.provider = new DRE.ethers.providers.Web3Provider( + DRE.tenderlyRPC as ExternalProvider + ); + + //Set the ethers provider to the one we initialized so it targets the correct backend + console.log('Migration started\n'); + + console.log('1. Deploy address provider'); + await DRE.run('full:deploy-address-provider', {pool: POOL_NAME}); + + console.log('2. Deploy lending pool'); + await DRE.run('full:deploy-lending-pool'); + + console.log('3. Deploy oracles'); + await DRE.run('full:deploy-oracles', {pool: POOL_NAME}); + + console.log('4. Initialize lending pool'); + await DRE.run('full:initialize-lending-pool', {pool: POOL_NAME}); + + if (verify) { + printContracts(); + console.log('4. Veryfing contracts'); + await DRE.run('verify:general', {all: true, pool: POOL_NAME}); + + console.log('5. Veryfing aTokens and debtTokens'); + await DRE.run('verify:tokens', {pool: POOL_NAME}); + } + const postDeployHead = DRE.tenderlyRPC.getHead(); + console.log('HEAD', postDeployHead); + + console.log('\nFinished migrations'); + printContracts(); + }); diff --git a/tsconfig.json b/tsconfig.json index e6a15a81..a4f43f9b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,11 +4,13 @@ "module": "commonjs", "strict": true, "esModuleInterop": true, - "outDir": "dist" + "outDir": "dist", + "noImplicitAny": false }, - "include": ["./scripts", "./test"], + "include": ["./scripts", "./test", "./tasks"], "files": [ "./hardhat.config.ts", + "./modules/tenderly/tenderly.d.ts", "node_modules/@nomiclabs/buidler-ethers/src/type-extensions.d.ts", "node_modules/buidler-typechain/src/type-extensions.d.ts", "node_modules/@nomiclabs/buidler-waffle/src/type-extensions.d.ts", From 588a0c8da0d34d791d69254fa307c7e4bec9a8c4 Mon Sep 17 00:00:00 2001 From: David Racero Date: Thu, 12 Nov 2020 14:41:08 +0100 Subject: [PATCH 03/11] Add provider. Add transaction link to task. --- deployed-contracts.json | 29 ++++++++++- hardhat.config.ts | 4 +- tasks/full/2_lending_pool.ts | 74 +++++++++++++++------------ tasks/full/5_initialize.ts | 14 ----- tasks/migrations/aave.mainnet.fork.ts | 3 -- tasks/misc/set-bre.ts | 5 ++ 6 files changed, 77 insertions(+), 52 deletions(-) diff --git a/deployed-contracts.json b/deployed-contracts.json index 67361d8c..89cdaacb 100644 --- a/deployed-contracts.json +++ b/deployed-contracts.json @@ -257,6 +257,10 @@ "hardhat": { "address": "0xFAe0fd738dAbc8a0426F47437322b6d026A9FD95", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" + }, + "tenderlyMain": { + "address": "0x011BA4E28C3448513D853599131AcB9A24Cb8E11", + "deployer": "0xb2E51BBCB2453701e5aB9bf95Ea9A4eb2D329090" } }, "LendingPoolAddressesProviderRegistry": { @@ -271,6 +275,10 @@ "hardhat": { "address": "0x12080583C4F0211eC382d33a273E6D0f9fAb0F75", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" + }, + "tenderlyMain": { + "address": "0x239acf3cD92161Db147389A57cbFaeb0985d5e3A", + "deployer": "0xf2F8D0753A4E35B097c871D1ED488B7926D3097a" } }, "ReserveLogic": { @@ -285,6 +293,10 @@ "hardhat": { "address": "0x2cBbbBE1B75Ad7848F0844215816F551f429c64f", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" + }, + "tenderlyMain": { + "address": "0xB7Ea702FC07e976b19ED67060099FdF8A34950e2", + "deployer": "0x859cFCC3ae5f43221eC254E70D13239046A170f3" } }, "GenericLogic": { @@ -299,6 +311,10 @@ "hardhat": { "address": "0xbAc762e2000b6815268587b081Fd17aC25519aD5", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" + }, + "tenderlyMain": { + "address": "0xBECF925e9EB6C026635A2D9216d964D4E12070f7", + "deployer": "0x859cFCC3ae5f43221eC254E70D13239046A170f3" } }, "ValidationLogic": { @@ -313,6 +329,10 @@ "hardhat": { "address": "0xa43Ba00FCA75B805D17f67F9433b971E9a398690", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" + }, + "tenderlyMain": { + "address": "0x997502540DcB6F2fa31B79cda650bf7810AA53ce", + "deployer": "0x802750DB4D80361475353FC88F72F5ed8a86c71F" } }, "LendingPool": { @@ -326,6 +346,10 @@ "hardhat": { "address": "0xAa7BC1924711B77A0F3Aaebdd550BfeDDDbaf3cd", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" + }, + "tenderlyMain": { + "address": "0x433Ce38A0154061684db57853f232beDfEC44ac2", + "deployer": "0xb2E51BBCB2453701e5aB9bf95Ea9A4eb2D329090" } }, "LendingPoolConfigurator": { @@ -595,6 +619,9 @@ }, "hardhat": { "address": "0xAa7BC1924711B77A0F3Aaebdd550BfeDDDbaf3cd" + }, + "tenderlyMain": { + "address": "0x433Ce38A0154061684db57853f232beDfEC44ac2" } }, "LendingPoolConfiguratorImpl": { @@ -1285,4 +1312,4 @@ "address": "0xaDF23b1cAa6a7B3b077c432794FfF80A4b935cdF" } } -} \ No newline at end of file +} diff --git a/hardhat.config.ts b/hardhat.config.ts index 5e366506..4ce68bf9 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -75,8 +75,8 @@ const buidlerConfig = { timeout: 0, }, tenderly: { - // project: process.env.TENDERLY_PROJECT, - //username: process.env.TENDERLY_USERNAME, + project: process.env.TENDERLY_PROJECT, + username: process.env.TENDERLY_USERNAME, forkNetwork: '1', //Network id of the network we want to fork }, networks: { diff --git a/tasks/full/2_lending_pool.ts b/tasks/full/2_lending_pool.ts index b8b57344..004ab951 100644 --- a/tasks/full/2_lending_pool.ts +++ b/tasks/full/2_lending_pool.ts @@ -16,45 +16,55 @@ import { task('full:deploy-lending-pool', 'Deploy lending pool for dev enviroment') .addFlag('verify', 'Verify contracts at Etherscan') - .setAction(async ({verify}, localBRE) => { - await localBRE.run('set-DRE'); + .setAction(async ({verify}, DRE) => { + try { + await DRE.run('set-DRE'); - const addressesProvider = await getLendingPoolAddressesProvider(); + const addressesProvider = await getLendingPoolAddressesProvider(); - // Deploy lending pool - const lendingPoolImpl = await deployLendingPool(verify); + // Deploy lending pool + const lendingPoolImpl = await deployLendingPool(verify); - // Set lending pool impl to address provider - await waitForTx(await addressesProvider.setLendingPoolImpl(lendingPoolImpl.address)); + console.log('setting up lending pool', addressesProvider); + // Set lending pool impl to address provider + await waitForTx(await addressesProvider.setLendingPoolImpl(lendingPoolImpl.address)); + console.log('lending pool setted'); - const address = await addressesProvider.getLendingPool(); - const lendingPoolProxy = await getLendingPool(address); + const address = await addressesProvider.getLendingPool(); + const lendingPoolProxy = await getLendingPool(address); - await insertContractAddressInDb(eContractid.LendingPool, lendingPoolProxy.address); + await insertContractAddressInDb(eContractid.LendingPool, lendingPoolProxy.address); - // Deploy lending pool configurator - const lendingPoolConfiguratorImpl = await deployLendingPoolConfigurator(verify); + // Deploy lending pool configurator + const lendingPoolConfiguratorImpl = await deployLendingPoolConfigurator(verify); - // Set lending pool conf impl to Address Provider - await waitForTx( - await addressesProvider.setLendingPoolConfiguratorImpl(lendingPoolConfiguratorImpl.address) - ); + console.log('set up x'); + // Set lending pool conf impl to Address Provider + await waitForTx( + await addressesProvider.setLendingPoolConfiguratorImpl(lendingPoolConfiguratorImpl.address) + ); - const lendingPoolConfiguratorProxy = await getLendingPoolConfiguratorProxy( - await addressesProvider.getLendingPoolConfigurator() - ); + console.log('set up x'); + const lendingPoolConfiguratorProxy = await getLendingPoolConfiguratorProxy( + await addressesProvider.getLendingPoolConfigurator() + ); - await insertContractAddressInDb( - eContractid.LendingPoolConfigurator, - lendingPoolConfiguratorProxy.address - ); - // Deploy deployment helpers - await deployStableAndVariableTokensHelper( - [lendingPoolProxy.address, addressesProvider.address], - verify - ); - await deployATokensAndRatesHelper( - [lendingPoolProxy.address, addressesProvider.address, lendingPoolConfiguratorProxy.address], - verify - ); + await insertContractAddressInDb( + eContractid.LendingPoolConfigurator, + lendingPoolConfiguratorProxy.address + ); + // Deploy deployment helpers + await deployStableAndVariableTokensHelper( + [lendingPoolProxy.address, addressesProvider.address], + verify + ); + console.log('set up x'); + await deployATokensAndRatesHelper( + [lendingPoolProxy.address, addressesProvider.address, lendingPoolConfiguratorProxy.address], + verify + ); + } catch (error) { + const transactionLink = `https://dashboard.tenderly.co/fork/${DRE.tenderlyRPC.getFork()}/simulation/${DRE.tenderlyRPC.getHead()}`; + console.log(transactionLink); + } }); diff --git a/tasks/full/5_initialize.ts b/tasks/full/5_initialize.ts index 718c2231..99b55f15 100644 --- a/tasks/full/5_initialize.ts +++ b/tasks/full/5_initialize.ts @@ -54,20 +54,6 @@ task('full:initialize-lending-pool', 'Initialize lending pool configuration.') const lendingPoolAddress = await addressesProvider.getLendingPool(); await deployWETHGateway([wethAddress, lendingPoolAddress]); - - //register the proxy price provider on the addressesProvider - const proxyProvider = getParamPerNetwork(poolConfig.ProxyPriceProvider, network); - - if (proxyProvider && proxyProvider !== '') { - await waitForTx(await addressesProvider.setPriceOracle(proxyProvider)); - } - - //register the lending rate oracle - const lendingRateOracle = getParamPerNetwork(poolConfig.LendingRateOracle, network); - - if (lendingRateOracle && lendingRateOracle !== '') { - await waitForTx(await addressesProvider.setLendingRateOracle(lendingRateOracle)); - } } catch (err) { console.error(err); exit(1); diff --git a/tasks/migrations/aave.mainnet.fork.ts b/tasks/migrations/aave.mainnet.fork.ts index 9f61d042..0ad5de5a 100644 --- a/tasks/migrations/aave.mainnet.fork.ts +++ b/tasks/migrations/aave.mainnet.fork.ts @@ -20,9 +20,6 @@ task('aave:full:fork', 'Deploy development enviroment') checkVerification(); } console.log('- Setting up Tenderly provider'); - DRE.ethers.provider = new DRE.ethers.providers.Web3Provider( - DRE.tenderlyRPC as ExternalProvider - ); //Set the ethers provider to the one we initialized so it targets the correct backend console.log('Migration started\n'); diff --git a/tasks/misc/set-bre.ts b/tasks/misc/set-bre.ts index a1cb29c5..4c9eca6f 100644 --- a/tasks/misc/set-bre.ts +++ b/tasks/misc/set-bre.ts @@ -1,9 +1,14 @@ +import {ExternalProvider} from '@ethersproject/providers'; + import {task} from 'hardhat/config'; import {setDRE} from '../../helpers/misc-utils'; task(`set-DRE`, `Inits the DRE, to have access to all the plugins' objects`).setAction( async (_, _DRE) => { setDRE(_DRE); + const provider = new _DRE.ethers.providers.Web3Provider(_DRE.tenderlyRPC as ExternalProvider); + //Set the ethers provider to the one we initialized so it targets the correct backend + _DRE.ethers.provider = provider; return _DRE; } ); From d2739e3a9c7970c5e1100b11c90e3ca804b9473e Mon Sep 17 00:00:00 2001 From: David Racero Date: Thu, 12 Nov 2020 14:43:14 +0100 Subject: [PATCH 04/11] Add the Tenderly provider at set-bre task --- tasks/misc/set-bre.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tasks/misc/set-bre.ts b/tasks/misc/set-bre.ts index 4c9eca6f..14a645ed 100644 --- a/tasks/misc/set-bre.ts +++ b/tasks/misc/set-bre.ts @@ -6,9 +6,12 @@ import {setDRE} from '../../helpers/misc-utils'; task(`set-DRE`, `Inits the DRE, to have access to all the plugins' objects`).setAction( async (_, _DRE) => { setDRE(_DRE); - const provider = new _DRE.ethers.providers.Web3Provider(_DRE.tenderlyRPC as ExternalProvider); - //Set the ethers provider to the one we initialized so it targets the correct backend - _DRE.ethers.provider = provider; + const network = _DRE.network.name; + if (network.includes('tenderly')) { + const provider = new _DRE.ethers.providers.Web3Provider(_DRE.tenderlyRPC as any); + //Set the ethers provider to the one we initialized so it targets the correct backend + _DRE.ethers.provider = provider; + } return _DRE; } ); From 84053c7b1df624fb068b7718f3599a7b64c3122c Mon Sep 17 00:00:00 2001 From: David Racero Date: Mon, 16 Nov 2020 10:19:14 +0100 Subject: [PATCH 05/11] Added latest update from Tenderly --- deployed-contracts.json | 26 +++++++++++++------------- helpers/contracts-helpers.ts | 6 ++++++ package-lock.json | 6 +++--- package.json | 2 +- tasks/full/3_oracles.ts | 2 ++ tasks/migrations/aave.mainnet.fork.ts | 8 ++++++-- tasks/misc/set-bre.ts | 6 ------ 7 files changed, 31 insertions(+), 25 deletions(-) diff --git a/deployed-contracts.json b/deployed-contracts.json index 89cdaacb..a59c18ff 100644 --- a/deployed-contracts.json +++ b/deployed-contracts.json @@ -259,8 +259,8 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "tenderlyMain": { - "address": "0x011BA4E28C3448513D853599131AcB9A24Cb8E11", - "deployer": "0xb2E51BBCB2453701e5aB9bf95Ea9A4eb2D329090" + "address": "0x1F745ca41d9ab4ee3ecFc4DCF58cE39f65836e93", + "deployer": "0x754266980072c8B4d82Ea98D17fdE14610615dcE" } }, "LendingPoolAddressesProviderRegistry": { @@ -277,8 +277,8 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "tenderlyMain": { - "address": "0x239acf3cD92161Db147389A57cbFaeb0985d5e3A", - "deployer": "0xf2F8D0753A4E35B097c871D1ED488B7926D3097a" + "address": "0xEd633b18625ba55b920FEA46F1c5Bf2A32aDe90E", + "deployer": "0x1BCCABFDf302cbc1EEFEc8fe9725776a945E43bd" } }, "ReserveLogic": { @@ -295,8 +295,8 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "tenderlyMain": { - "address": "0xB7Ea702FC07e976b19ED67060099FdF8A34950e2", - "deployer": "0x859cFCC3ae5f43221eC254E70D13239046A170f3" + "address": "0xE677b199471D996eE40fB021b410cfceE1AFD7f6", + "deployer": "0xAb18a0386Cc7f5cDFC3e3405e87A5E7501a9BC43" } }, "GenericLogic": { @@ -313,8 +313,8 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "tenderlyMain": { - "address": "0xBECF925e9EB6C026635A2D9216d964D4E12070f7", - "deployer": "0x859cFCC3ae5f43221eC254E70D13239046A170f3" + "address": "0xa2797Cf072475E32dF77485D67f970B8B2E8D110", + "deployer": "0xE2314093F585aA3CfeeCA0184f1CB2EF3bc204dF" } }, "ValidationLogic": { @@ -331,8 +331,8 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "tenderlyMain": { - "address": "0x997502540DcB6F2fa31B79cda650bf7810AA53ce", - "deployer": "0x802750DB4D80361475353FC88F72F5ed8a86c71F" + "address": "0x0a95D394ab8e5996fE3A2a78deA1608FF0F301CC", + "deployer": "0xE2314093F585aA3CfeeCA0184f1CB2EF3bc204dF" } }, "LendingPool": { @@ -348,8 +348,8 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "tenderlyMain": { - "address": "0x433Ce38A0154061684db57853f232beDfEC44ac2", - "deployer": "0xb2E51BBCB2453701e5aB9bf95Ea9A4eb2D329090" + "address": "0x816d614fC7553BFC2EcF80ef87995Ec9Ab4B84FC", + "deployer": "0x1BCCABFDf302cbc1EEFEc8fe9725776a945E43bd" } }, "LendingPoolConfigurator": { @@ -621,7 +621,7 @@ "address": "0xAa7BC1924711B77A0F3Aaebdd550BfeDDDbaf3cd" }, "tenderlyMain": { - "address": "0x433Ce38A0154061684db57853f232beDfEC44ac2" + "address": "0x816d614fC7553BFC2EcF80ef87995Ec9Ab4B84FC" } }, "LendingPoolConfiguratorImpl": { diff --git a/helpers/contracts-helpers.ts b/helpers/contracts-helpers.ts index 22c5dcd2..53860ea0 100644 --- a/helpers/contracts-helpers.ts +++ b/helpers/contracts-helpers.ts @@ -89,6 +89,12 @@ export const withSaveAndVerify = async ( ): Promise => { await waitForTx(instance.deployTransaction); await registerContractInJsonDb(id, instance); + if (DRE.network.name.includes('tenderly')) { + await (DRE as any).tenderlyRPC.verify({ + name: id, + address: instance.address, + }); + } if (verify) { await verifyContract(instance.address, args); } diff --git a/package-lock.json b/package-lock.json index 01a30009..4f75fca7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1331,9 +1331,9 @@ } }, "@tenderly/hardhat-tenderly": { - "version": "1.1.0-beta.2", - "resolved": "https://registry.npmjs.org/@tenderly/hardhat-tenderly/-/hardhat-tenderly-1.1.0-beta.2.tgz", - "integrity": "sha512-aXdVLCRbUT7gc+460kXXBO+MIKEcKjBsqomCrBbFVnicY8yDnBqxijmbC9Y6dP9yUlcZE6mO27S0ycPdwjfS6Q==", + "version": "1.1.0-beta.3", + "resolved": "https://registry.npmjs.org/@tenderly/hardhat-tenderly/-/hardhat-tenderly-1.1.0-beta.3.tgz", + "integrity": "sha512-CCiS3bBCc4MhOTI5oHRAuVy/Xan6/8oNnjiwbsRvG1hdUis+EL/UVwn5yrUM1qXQTPz/La3TvRkfEa/pq1gimw==", "dev": true, "requires": { "axios": "^0.20.0", diff --git a/package.json b/package.json index 92f442bf..a8086c28 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "@nomiclabs/hardhat-ethers": "^2.0.0", "@nomiclabs/hardhat-waffle": "^2.0.0", "@openzeppelin/contracts": "3.1.0", - "@tenderly/hardhat-tenderly": "^1.1.0-beta.2", + "@tenderly/hardhat-tenderly": "^1.1.0-beta.3", "@typechain/ethers-v4": "1.0.0", "@typechain/ethers-v5": "^1.0.0", "@typechain/truffle-v4": "2.0.2", diff --git a/tasks/full/3_oracles.ts b/tasks/full/3_oracles.ts index e492724c..f578d58d 100644 --- a/tasks/full/3_oracles.ts +++ b/tasks/full/3_oracles.ts @@ -54,12 +54,14 @@ task('full:deploy-oracles', 'Deploy oracles for dev enviroment') }; const [tokens, aggregators] = getPairsTokenAggregator(tokensToWatch, chainlinkAggregators); + console.log('wha'); const chainlinkProviderPriceProvider = proxyPriceProviderAddress ? await getChainlinkPriceProvider(proxyPriceProviderAddress) : await deployChainlinkProxyPriceProvider( [tokens, aggregators, fallbackOracle, await getWethAddress(poolConfig)], verify ); + console.log('ppp'); const lendingRateOracle = lendingRateOracleAddress ? await getLendingRateOracle(lendingRateOracleAddress) diff --git a/tasks/migrations/aave.mainnet.fork.ts b/tasks/migrations/aave.mainnet.fork.ts index 0ad5de5a..94ef557a 100644 --- a/tasks/migrations/aave.mainnet.fork.ts +++ b/tasks/migrations/aave.mainnet.fork.ts @@ -19,9 +19,13 @@ task('aave:full:fork', 'Deploy development enviroment') if (verify) { checkVerification(); } - console.log('- Setting up Tenderly provider'); - //Set the ethers provider to the one we initialized so it targets the correct backend + // Set the ethers provider to the one we initialized so it targets the correct backend + console.log('- Setting up Tenderly provider'); + await DRE.tenderlyRPC.initializeFork(); + const provider = new DRE.ethers.providers.Web3Provider(DRE.tenderlyRPC as any); + DRE.ethers.provider = provider; + console.log('Migration started\n'); console.log('1. Deploy address provider'); diff --git a/tasks/misc/set-bre.ts b/tasks/misc/set-bre.ts index 14a645ed..0b1508ff 100644 --- a/tasks/misc/set-bre.ts +++ b/tasks/misc/set-bre.ts @@ -6,12 +6,6 @@ import {setDRE} from '../../helpers/misc-utils'; task(`set-DRE`, `Inits the DRE, to have access to all the plugins' objects`).setAction( async (_, _DRE) => { setDRE(_DRE); - const network = _DRE.network.name; - if (network.includes('tenderly')) { - const provider = new _DRE.ethers.providers.Web3Provider(_DRE.tenderlyRPC as any); - //Set the ethers provider to the one we initialized so it targets the correct backend - _DRE.ethers.provider = provider; - } return _DRE; } ); From d0ea8d2e32dd94b65669babd96eaf9b755992b96 Mon Sep 17 00:00:00 2001 From: David Racero Date: Mon, 16 Nov 2020 11:09:23 +0100 Subject: [PATCH 06/11] Added buidler mainnent fork --- hardhat.config.ts | 22 ++++++++++++++++++---- package.json | 3 ++- tasks/migrations/aave.mainnet.fork.ts | 13 ++++++------- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/hardhat.config.ts b/hardhat.config.ts index 4ce68bf9..e6ddb0c1 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -1,5 +1,6 @@ import path from 'path'; import fs from 'fs'; +import {HardhatUserConfig} from 'hardhat/types'; // @ts-ignore import {accounts} from './test-wallets.js'; import {eEthereumNetwork} from './helpers/types'; @@ -22,6 +23,7 @@ const ALCHEMY_KEY = process.env.ALCHEMY_KEY || ''; const ETHERSCAN_KEY = process.env.ETHERSCAN_KEY || ''; const MNEMONIC_PATH = "m/44'/60'/0'/0"; const MNEMONIC = process.env.MNEMONIC || ''; +const MAINNET_FORK = process.env.MAINNET_FORK === 'true'; // Prevent to load scripts before compilation and typechain if (!SKIP_LOAD) { @@ -40,7 +42,9 @@ require(`${path.join(__dirname, 'tasks/misc')}/set-bre.ts`); const getCommonNetworkConfig = (networkName: eEthereumNetwork, networkId: number) => { return { url: ALCHEMY_KEY - ? `https://eth-${networkName}.alchemyapi.io/v2/${ALCHEMY_KEY}` + ? `https://eth-${ + networkName === 'main' ? 'mainnet' : networkName + }.alchemyapi.io/v2/${ALCHEMY_KEY}` : `https://${networkName}.infura.io/v3/${INFURA_KEY}`, hardfork: HARDFORK, blockGasLimit: DEFAULT_BLOCK_GAS_LIMIT, @@ -56,7 +60,16 @@ const getCommonNetworkConfig = (networkName: eEthereumNetwork, networkId: number }; }; -const buidlerConfig = { +const mainnetFork = MAINNET_FORK + ? { + blockNumber: 11268220, + url: ALCHEMY_KEY + ? `https://eth-mainnet.alchemyapi.io/v2/${ALCHEMY_KEY}` + : `https://main.infura.io/v3/${INFURA_KEY}`, + } + : undefined; + +const buidlerConfig: HardhatUserConfig = { solidity: { version: '0.6.8', settings: { @@ -75,8 +88,8 @@ const buidlerConfig = { timeout: 0, }, tenderly: { - project: process.env.TENDERLY_PROJECT, - username: process.env.TENDERLY_USERNAME, + project: process.env.TENDERLY_PROJECT || '', + username: process.env.TENDERLY_USERNAME || '', forkNetwork: '1', //Network id of the network we want to fork }, networks: { @@ -100,6 +113,7 @@ const buidlerConfig = { privateKey: secretKey, balance, })), + forking: mainnetFork, }, buidlerevm_docker: { hardfork: 'istanbul', diff --git a/package.json b/package.json index a8086c28..4be80848 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,8 @@ "aave:kovan:full:initialize": "npm run hardhat:kovan -- full:initialize-lending-pool --verify --pool Aave", "aave:ropsten:dev:migration": "npm run hardhat:ropsten -- aave:dev --verify", "aave:ropsten:full:migration": "npm run hardhat:ropsten -- aave:full --verify", - "aave:fork:main:migration": "npm run hardhat:tenderly-main -- aave:full:fork", + "aave:fork:main:tendery": "npm run hardhat:tenderly-main -- aave:full:fork", + "aave:fork:main": "MAINNET_FORK=true npm run aave:full:fork", "aave:main:dev:migration": "npm run hardhat:main -- aave:dev --verify", "aave:main:full:migration": "npm run hardhat:main -- aave:full --verify", "uniswap:evm:dev:migration": "hardhat uniswap:dev", diff --git a/tasks/migrations/aave.mainnet.fork.ts b/tasks/migrations/aave.mainnet.fork.ts index 94ef557a..dffe8508 100644 --- a/tasks/migrations/aave.mainnet.fork.ts +++ b/tasks/migrations/aave.mainnet.fork.ts @@ -10,9 +10,6 @@ task('aave:full:fork', 'Deploy development enviroment') .setAction(async ({verify}, DRE) => { const POOL_NAME = ConfigNames.Aave; const network = DRE.network.name; - if (!network.includes('tenderly')) { - throw 'This task only supports tenderly networks: tenderlyMain, tenderlyKovan'; - } await DRE.run('set-DRE'); // Prevent loss of gas verifying all the needed ENVs for Etherscan verification @@ -21,10 +18,12 @@ task('aave:full:fork', 'Deploy development enviroment') } // Set the ethers provider to the one we initialized so it targets the correct backend - console.log('- Setting up Tenderly provider'); - await DRE.tenderlyRPC.initializeFork(); - const provider = new DRE.ethers.providers.Web3Provider(DRE.tenderlyRPC as any); - DRE.ethers.provider = provider; + if (network.includes('tenderly')) { + console.log('- Setting up Tenderly provider'); + await DRE.tenderlyRPC.initializeFork(); + const provider = new DRE.ethers.providers.Web3Provider(DRE.tenderlyRPC as any); + DRE.ethers.provider = provider; + } console.log('Migration started\n'); From 0d4068205467ec8f21a393c0bf07313563fcead0 Mon Sep 17 00:00:00 2001 From: David Racero Date: Mon, 16 Nov 2020 16:08:07 +0100 Subject: [PATCH 07/11] Added initial README. Digging into Tenderly. Added initial mainnet fork with buidler. --- README.md | 97 +++++++ config/commons.ts | 12 +- deployed-contracts.json | 255 ++++++++++-------- hardhat.config.ts | 2 +- helpers/configuration.ts | 17 +- helpers/contracts-deployments.ts | 1 + helpers/contracts-helpers.ts | 8 +- helpers/misc-utils.ts | 10 + helpers/oracles-helpers.ts | 1 + package.json | 4 +- tasks/full/1_address_provider.ts | 19 +- tasks/full/2_lending_pool.ts | 22 +- tasks/full/3_oracles.ts | 47 ++-- .../{aave.mainnet.fork.ts => aave.mainnet.ts} | 6 +- 14 files changed, 333 insertions(+), 168 deletions(-) rename tasks/migrations/{aave.mainnet.fork.ts => aave.mainnet.ts} (92%) diff --git a/README.md b/README.md index 4e64b218..12395316 100644 --- a/README.md +++ b/README.md @@ -1 +1,98 @@ # Aave Protocol v2 + +This repository contains the smart contracts source code and markets configuration for Aave Protocol V2. The repository uses Docker Compose and Hardhat as development enviroment for compilation, testing and deployment tasks. + +## What is Aave? + +Aave is a decentralized non-custodial liqudity markets protocol where users can participate as depositors or borrowers. Depositors provide liquidity to the market to earn a passive income, while borrowers are able to borrow in an overcollateralized (perpetually) or undercollateralized (one-block liquidity) fashion. + +## Documentation + +The documentation of Aave V2 is in the following [Aave V2 documentation](https://docs.aave.com/v2/-MJXUluJ2u1DiL-VU6MM) link. At the documentation you can learn more about the protocol, see the contract interfaces, integration guides and audits. + +For getting the latest contracts addresses, please check the [Deployed contracts](https://docs.aave.com/v2/-MJXUluJ2u1DiL-VU6MM/deployed-contracts) page at the documentation to stay up to date. + +## Connect with the community + +You can join at the [Discord](https://discord.com/invite/CJm5Jt3) channel or at the [Governance Forum](https://governance.aave.com/) for asking questions about the protocol or talk about Aave with other peers. + +## Setup + +The repository uses Docker Compose to manage sensitive keys and load the configuration. Prior any action like test or deploy, you must run `docker-compose up` to start the `contracts-env` container, and then connect to the container console via `docker-compose exec contracts-env bash`. + +Follow the next steps to setup the repository: + +- Install `docker` and `docker-compose` +- Create an enviroment file named `.env` and fill the next enviroment variables + +``` +# Mnemonic, only first address will be used +MNEMONIC="" + +# Add Alchemy or Infura provider keys, alchemy takes preference at the config level +ALCHEMY_KEY="" +INFURA_KEY="" + + +# Optional Etherscan key, for automatize the verification of the contracts at Etherscan +ETHERSCAN_KEY="" + +# Optional, if you plan to use Tenderly scripts +TENDERLY_PROJECT="" +TENDERLY_USERNAME="" + +``` + +## Markets configuration + +The configurations related with the Aave Markets are located at `config` directory. You can follow the `IAaveConfiguration` interface to create new Markets configuration or extend the current configuration. + +Each market should have his own Market configuration file, and their own set of deployment tasks, using the Aave market config and tasks as a reference. + +## Test + +You can run the full test suite with the following commands: + +``` +# In one terminal +docker-compose up + +# Open another tab or terminal +docker-compose exec contracts-env bash + +# A new Bash terminal is prompted, connected to the container +npm run test +``` + +## Deployments + +For deploying Aave Protocol V2, you can use the available scripts located at `package.json`. For a complete list, run `npm run` to see all the tasks. + +### Kovan deployment + +``` +# In one terminal +docker-compose up + +# Open another tab or terminal +docker-compose exec contracts-env bash + +# A new Bash terminal is prompted, connected to the container +npm run aave:kovan:full:migration +``` + +### Mainnet fork deployment + +``` +# In one terminal, run a hardhat note with mainnet fork enabled +MAINNET_FORK=true npx hardhat node + +# In another terminal, run docker-compose +docker-compose up + +# Open another tab or terminal +docker-compose exec contracts-env bash + +# A new Bash terminal is prompted, connected to the container +npm run aave:fork:main +``` diff --git a/config/commons.ts b/config/commons.ts index 43554658..21944854 100644 --- a/config/commons.ts +++ b/config/commons.ts @@ -187,8 +187,8 @@ export const CommonsConfig: ICommonConfiguration = { [eEthereumNetwork.buidlerevm]: '', [EthereumNetwork.kovan]: '0x276C4793F2EE3D5Bf18C5b879529dD4270BA4814', [EthereumNetwork.ropsten]: '0x657372A559c30d236F011239fF9fbB6D76718271', - [EthereumNetwork.main]: '', - [EthereumNetwork.tenderlyMain]: '', + [EthereumNetwork.main]: ZERO_ADDRESS, + [EthereumNetwork.tenderlyMain]: ZERO_ADDRESS, }, FallbackOracle: { [eEthereumNetwork.coverage]: '', @@ -196,8 +196,8 @@ export const CommonsConfig: ICommonConfiguration = { [eEthereumNetwork.buidlerevm]: '', [EthereumNetwork.kovan]: '0x50913E8E1c650E790F8a1E741FF9B1B1bB251dfe', [EthereumNetwork.ropsten]: '0xAD1a978cdbb8175b2eaeC47B01404f8AEC5f4F0d', - [EthereumNetwork.main]: '', - [EthereumNetwork.tenderlyMain]: '', + [EthereumNetwork.main]: ZERO_ADDRESS, + [EthereumNetwork.tenderlyMain]: ZERO_ADDRESS, }, ChainlinkAggregator: { [eEthereumNetwork.coverage]: {}, @@ -266,7 +266,7 @@ export const CommonsConfig: ICommonConfiguration = { BAT: '0x9b4e2579895efa2b4765063310Dc4109a7641129', BUSD: '0x5d4BB541EED49D0290730b4aB332aA46bd27d888', DAI: '0x037E8F2125bF532F3e228991e051c8A7253B642c', - ENJ: '0x24D9aB51950F3d62E9 144fdC2f3135DAA6Ce8D1B', + ENJ: '0x24D9aB51950F3d62E9144fdC2f3135DAA6Ce8D1B', KNC: '0xd0e785973390fF8E77a83961efDb4F271E6B8152', LINK: '0xeCfA53A8bdA4F0c4dd39c55CC8deF3757aCFDD07', MANA: '0xc89c4ed8f52Bb17314022f6c0dCB26210C905C97', @@ -295,7 +295,7 @@ export const CommonsConfig: ICommonConfiguration = { BAT: '0x9b4e2579895efa2b4765063310Dc4109a7641129', BUSD: '0x5d4BB541EED49D0290730b4aB332aA46bd27d888', DAI: '0x037E8F2125bF532F3e228991e051c8A7253B642c', - ENJ: '0x24D9aB51950F3d62E9 144fdC2f3135DAA6Ce8D1B', + ENJ: '0x24D9aB51950F3d62E9144fdC2f3135DAA6Ce8D1B', KNC: '0xd0e785973390fF8E77a83961efDb4F271E6B8152', LINK: '0xeCfA53A8bdA4F0c4dd39c55CC8deF3757aCFDD07', MANA: '0xc89c4ed8f52Bb17314022f6c0dCB26210C905C97', diff --git a/deployed-contracts.json b/deployed-contracts.json index a59c18ff..55e206aa 100644 --- a/deployed-contracts.json +++ b/deployed-contracts.json @@ -255,12 +255,12 @@ "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { - "address": "0xFAe0fd738dAbc8a0426F47437322b6d026A9FD95", + "address": "0x7c2C195CD6D34B8F845992d380aADB2730bB9C6F", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "tenderlyMain": { - "address": "0x1F745ca41d9ab4ee3ecFc4DCF58cE39f65836e93", - "deployer": "0x754266980072c8B4d82Ea98D17fdE14610615dcE" + "address": "0x4Be9d82643799cA95D3a77d1618afC5011268382", + "deployer": "0xddAF59aB7A3f2215965d8bF74Eb975073a5fa126" } }, "LendingPoolAddressesProviderRegistry": { @@ -273,12 +273,12 @@ "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { - "address": "0x12080583C4F0211eC382d33a273E6D0f9fAb0F75", + "address": "0xf4e77E5Da47AC3125140c470c71cBca77B5c638c", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "tenderlyMain": { - "address": "0xEd633b18625ba55b920FEA46F1c5Bf2A32aDe90E", - "deployer": "0x1BCCABFDf302cbc1EEFEc8fe9725776a945E43bd" + "address": "0x70DA60D03b61e32F6d11eD4056D15a6202C673c5", + "deployer": "0xc10Cd14F2B546e6e4603e002AD2f9CC4f3c1d3c8" } }, "ReserveLogic": { @@ -291,12 +291,12 @@ "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { - "address": "0x2cBbbBE1B75Ad7848F0844215816F551f429c64f", + "address": "0x3619DbE27d7c1e7E91aA738697Ae7Bc5FC3eACA5", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "tenderlyMain": { - "address": "0xE677b199471D996eE40fB021b410cfceE1AFD7f6", - "deployer": "0xAb18a0386Cc7f5cDFC3e3405e87A5E7501a9BC43" + "address": "0xbC4BbB5d0642EB4841Fe97fE7B29035a8539a078", + "deployer": "0x3054fFbdD1506e38FDA08B1e19be37a3081F74bf" } }, "GenericLogic": { @@ -309,12 +309,12 @@ "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { - "address": "0xbAc762e2000b6815268587b081Fd17aC25519aD5", + "address": "0x038B86d9d8FAFdd0a02ebd1A476432877b0107C8", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "tenderlyMain": { - "address": "0xa2797Cf072475E32dF77485D67f970B8B2E8D110", - "deployer": "0xE2314093F585aA3CfeeCA0184f1CB2EF3bc204dF" + "address": "0x7962d48c83a8B7a511Ae3986145E497E55b43d02", + "deployer": "0xEB445d7d663ff60fFdE5aed8bFa8B4aa678E9Af3" } }, "ValidationLogic": { @@ -327,12 +327,12 @@ "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { - "address": "0xa43Ba00FCA75B805D17f67F9433b971E9a398690", + "address": "0x1A1FEe7EeD918BD762173e4dc5EfDB8a78C924A8", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "tenderlyMain": { - "address": "0x0a95D394ab8e5996fE3A2a78deA1608FF0F301CC", - "deployer": "0xE2314093F585aA3CfeeCA0184f1CB2EF3bc204dF" + "address": "0x303eE85cB0e2B1fea6dF1A67F7D3868A602780D0", + "deployer": "0x2269cA0fD6e027160E3e0176DF25a32c039C7c16" } }, "LendingPool": { @@ -344,12 +344,10 @@ "address": "0x212B0b733BFbc58D3B62b79Da1B38E915057039f" }, "hardhat": { - "address": "0xAa7BC1924711B77A0F3Aaebdd550BfeDDDbaf3cd", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" + "address": "0xdA71454D2a71D63116cd67099e4a0fdd3a8Dfb47" }, "tenderlyMain": { - "address": "0x816d614fC7553BFC2EcF80ef87995Ec9Ab4B84FC", - "deployer": "0x1BCCABFDf302cbc1EEFEc8fe9725776a945E43bd" + "address": "0xd2c20bDA613DD9E268559a08CdDb49A90a0b9dA9" } }, "LendingPoolConfigurator": { @@ -360,7 +358,10 @@ "address": "0xD57c7ad0F079EbA38B0c1972d68d13f78719FC00" }, "hardhat": { - "address": "0xdbaA15927b1463EdD14Cf51D082BD7703Fd1C238" + "address": "0x1b88b3E43526cB076931AD76cB2eC0CC93382FAc" + }, + "tenderlyMain": { + "address": "0x291c74E889865751557776Df1FD23476981DDcB2" } }, "StableAndVariableTokensHelper": { @@ -373,8 +374,12 @@ "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { - "address": "0x099d9fF8F818290C8b5B7Db5bFca84CEebd2714c", + "address": "0xEcc0a6dbC0bb4D51E4F84A315a9e5B0438cAD4f0", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" + }, + "tenderlyMain": { + "address": "0xbBE7278FdF24860F05D9a10316F3c5E425cBD4ec", + "deployer": "0x0Fc326f9b8155b674733bCc8FcDcdE36606ba7C5" } }, "ATokensAndRatesHelper": { @@ -387,8 +392,12 @@ "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { - "address": "0x85bdE212E66e2BAE510E44Ed59116c1eC712795b", + "address": "0x20Ce94F404343aD2752A2D01b43fa407db9E0D00", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" + }, + "tenderlyMain": { + "address": "0x39dE816FaEA0CBC12C2066bB379d7425c128A7Ee", + "deployer": "0x0c90eCAE8f9f8E5CafAfFcBBa46Eeb41A46Bb2a8" } }, "PriceOracle": { @@ -417,8 +426,12 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "hardhat": { - "address": "0xCeEa6148D75268b6E930AE41d7a31baE1CA318d8", + "address": "0x1d80315fac6aBd3EfeEbE97dEc44461ba7556160", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" + }, + "tenderlyMain": { + "address": "0x5D7a3a9317f0F232828Cca6F3752b7e2820075B0", + "deployer": "0xFaA2D857Ff599923415523f8b0B54dFdc5c6E7c3" } }, "LendingRateOracle": { @@ -427,8 +440,12 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "hardhat": { - "address": "0x98B40aAC844674B2287556E75b3ef5530DfCfcB7", + "address": "0x2D8553F9ddA85A9B3259F6Bf26911364B85556F5", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" + }, + "tenderlyMain": { + "address": "0xABF6Cf29dD10232E5168F085F2a9ebA690F9623b", + "deployer": "0x50DBD6EC6c6666c3aE018E5d0f62104a598F9571" } }, "AaveProtocolDataProvider": { @@ -440,7 +457,8 @@ "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { - "address": "0x3392c115Ff2CE1A782B4a965fF770da61e69228E" + "address": "0x53369fd4680FfE3DfF39Fc6DDa9CfbfD43daeA2E", + "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, "LendingPoolCollateralManager": { @@ -453,7 +471,7 @@ "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { - "address": "0x8BFFF31B1757da579Bb5B118489568526F7fb6D4", + "address": "0xF0B4ACda6D679ea22AC5C4fD1973D0d58eA10ec1", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, @@ -475,7 +493,7 @@ "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { - "address": "0x0Cf45557d25a4e4c0F1aC65EF6c48ae67c61a0E6", + "address": "0xA17827A991EB72793fa437e580B084ceB25Ab0f9", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, @@ -519,7 +537,7 @@ "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" }, "hardhat": { - "address": "0x7fAeC7791277Ff512c41CA903c177B2Ed952dDAc", + "address": "0x8565Fb7dfB5D36b2aA00086ffc920cfF20db4F2f", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, @@ -529,7 +547,7 @@ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" }, "hardhat": { - "address": "0xf784709d2317D872237C4bC22f867d1BAe2913AB", + "address": "0x1d80315fac6aBd3EfeEbE97dEc44461ba7556160", "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" } }, @@ -618,10 +636,10 @@ "address": "0x301F889146aaFEfD88d5D442eEcd12AeAC3D1Fc3" }, "hardhat": { - "address": "0xAa7BC1924711B77A0F3Aaebdd550BfeDDDbaf3cd" + "address": "0x500D1d6A4c7D8Ae28240b47c8FCde034D827fD5e" }, "tenderlyMain": { - "address": "0x816d614fC7553BFC2EcF80ef87995Ec9Ab4B84FC" + "address": "0xd72EC88B9c173dF3a61eB7D9D33ECA59Ad57D7C2" } }, "LendingPoolConfiguratorImpl": { @@ -629,7 +647,10 @@ "address": "0x25d9A07E6a749488f36e3c89A38C8235adb33AA2" }, "hardhat": { - "address": "0x1750499D05Ed1674d822430FB960d5F6731fDf64" + "address": "0xD6C850aeBFDC46D7F4c207e445cC0d6B0919BDBe" + }, + "tenderlyMain": { + "address": "0x89898cF20C9BBFfBAC292aC89E078ae602268d0A" } }, "LendingPoolCollateralManagerImpl": { @@ -637,7 +658,7 @@ "address": "0x15fF71A8F0B1E43AF2A0D3554c9F8E41601bCE6b" }, "hardhat": { - "address": "0x8BFFF31B1757da579Bb5B118489568526F7fb6D4" + "address": "0xF0B4ACda6D679ea22AC5C4fD1973D0d58eA10ec1" } }, "stableDebtAAVE": { @@ -645,7 +666,7 @@ "address": "0x9d6cD3e0cb7A916dD788BE8937Db2E28E653083F" }, "hardhat": { - "address": "0xcFB79d2c986Ca61Dbd288f80108b9e8C4cC6522b" + "address": "0x9230C6B871c19A7A285E46bC59dbA99863ED267E" } }, "variableDebtAAVE": { @@ -653,7 +674,7 @@ "address": "0x7069766BAEAE5042eF9Efa25D423853Fa244e03D" }, "hardhat": { - "address": "0x1073981e3D3Af966a1137a3460dB881AAED7ae7a" + "address": "0x06134447473A1ad19dd05554780816C542486d15" } }, "stableDebtBAT": { @@ -661,7 +682,7 @@ "address": "0x7bA20003bc65A551aAc9670b96520F544556025D" }, "hardhat": { - "address": "0x4c90c5Fa9C907F2C993E66446E022260e2AfC8d1" + "address": "0xd5b242D4c92Cf99ad1b52097C02D6400a5042c07" } }, "variableDebtBAT": { @@ -669,7 +690,7 @@ "address": "0x25bfFB7E493bAAd885Ad7EE676E5e32c6F85D6FE" }, "hardhat": { - "address": "0x86BAB8904c2969DE5EF732F8BC1D805C1aD56ddD" + "address": "0x38556B87c95aA00D1ac92f2Af5F24A62779c51f1" } }, "stableDebtBUSD": { @@ -677,7 +698,7 @@ "address": "0xA5bb990BA8c1367dF8b34a7628Db1786790782E8" }, "hardhat": { - "address": "0xa279C092B779bD051DA5333978e30647501AA958" + "address": "0x676FADAC7780FCF65e788209F4E91f2057508d24" } }, "variableDebtBUSD": { @@ -685,7 +706,7 @@ "address": "0xa75EF57f21484029bA17cb31A59176500dA95Bf0" }, "hardhat": { - "address": "0xeB24f8Dff752f099AA106207b8f49818ca78D02e" + "address": "0x2481b47272CacFB4213493d899E1f7296C3a6751" } }, "stableDebtDAI": { @@ -693,7 +714,7 @@ "address": "0x83B7666885dAC6D68f9f32569EC0F4585979d74B" }, "hardhat": { - "address": "0x7cc0483c098d4e36f2f0AF72a7B13E40E13cd613" + "address": "0xbC0e31570E564642d279f3123923a58F64294CF0" } }, "variableDebtDAI": { @@ -701,7 +722,7 @@ "address": "0x897d762EF8fe013a824503d5Eda2a329Ad98f7E0" }, "hardhat": { - "address": "0x38E82417A3b37f7faA75d2DD6260d5C24f529e1e" + "address": "0x73a571b6E3AFAc5574A328AB6B0e8150c520e631" } }, "aAAVE": { @@ -709,7 +730,7 @@ "address": "0x74A4A2a5437bF9152A1abfa08f0E83D0737C588C" }, "hardhat": { - "address": "0x6e5d1a9C405DF46a8503893DBa99c3af5Dc1FB5A" + "address": "0xCd17f01812099F7B76098f9bdCb93eC1DfDF24de" } }, "strategyAAVE": { @@ -717,7 +738,7 @@ "address": "0xeD83FCcA01A74690c9d0Bc75283F612655347f67" }, "hardhat": { - "address": "0xCDfa18cdFEFCa96D6c79628c6ef941201b63faE4" + "address": "0xDA01D05d5760bB3Af2C576CD57185557a267c2C8" } }, "aBAT": { @@ -725,7 +746,7 @@ "address": "0x35bCbf4f3d63dC55b79178A423b0e601b4ef5FD2" }, "hardhat": { - "address": "0xCaA841b61FfEf4017209311f2B0B2e2f88eBA3bc" + "address": "0x99B8b2AE7Be6D3ed40B3e608c2dCd8a514736e3e" } }, "strategyBAT": { @@ -733,7 +754,7 @@ "address": "0x277b52f138647392496355d87bF03a1aB6c83024" }, "hardhat": { - "address": "0x8225B75F6eed9415D3FEABAa5B53628c6c7D29E2" + "address": "0x2923ce81A7Ce7903578eE6385D055123179a88f1" } }, "aBUSD": { @@ -741,7 +762,7 @@ "address": "0x9E709c81c73eEcE90766B277babCfa66F1965565" }, "hardhat": { - "address": "0x7EebA31C65BCceBF0F2ef6eFf9edf170De96A139" + "address": "0x6ac418d1b0B86c3AcBB397dd8F1c76578F3A9AD9" } }, "strategyBUSD": { @@ -749,7 +770,7 @@ "address": "0xe302038c6E3f7541ACe4DcCF08D666F845450166" }, "hardhat": { - "address": "0x66D0d53519B4A06f007A2Da43599EB844f6F4a7e" + "address": "0xd8aa714b8acbD1287790C965f4b308a113EAD2F4" } }, "aDAI": { @@ -757,7 +778,7 @@ "address": "0x9edb979F40cA59f759e9Eca68a6dFeA56B8d299b" }, "hardhat": { - "address": "0xf72805fA3E8Bd360bCBA4d069FC3B882001bB017" + "address": "0x511586d245EC3b29E9f36057E4609096d8e5AA41" } }, "strategyDAI": { @@ -765,7 +786,7 @@ "address": "0xa43a28500d79C25bf83ACAF5E90a46b689b3EB16" }, "hardhat": { - "address": "0xB79EcFC3ea936e0e904DA3190CD1C8b8cc5F99B5" + "address": "0x4F772132fF40d9d48557791F336012FD5bfaEA4e" } }, "stableDebtENJ": { @@ -773,7 +794,7 @@ "address": "0x9fBE02f08e79f8aA129a46a23E8A18e027B6e2EF" }, "hardhat": { - "address": "0xFE6c73d2880c7F5D2CDfe495C500AF94fECd09E9" + "address": "0xa2f3D52731D5E6F090af969D1dD5Cb90A3834831" } }, "variableDebtENJ": { @@ -781,7 +802,7 @@ "address": "0xFA80B658A4bacD6282267428206Afaa3Cf888cd6" }, "hardhat": { - "address": "0x1890c00253FbD4130A4191CDA13e443b8708DEAF" + "address": "0x9085F5C3B91aD148f9638caC09F3B53Dff160637" } }, "stableDebtKNC": { @@ -789,7 +810,7 @@ "address": "0xAF9EfC82E89a872F8AEf28c81258dfEa712AfFfE" }, "hardhat": { - "address": "0xfdAA87AfAF7F617F84480eDc705d8Fd4B78EDEcB" + "address": "0x287B0459469355C0c443C79e45cdB1573C5Abc84" } }, "variableDebtKNC": { @@ -797,7 +818,7 @@ "address": "0xa371C49E252d3c11e050A47ff88d8D15cDf114A1" }, "hardhat": { - "address": "0x8A420528eC19177Deb9f1F0e2965964018f896c7" + "address": "0x5deC984578799Af449aa0A9739449148195b14Ea" } }, "stableDebtLINK": { @@ -805,7 +826,7 @@ "address": "0xdF0812bdf765E3b77746e961C501313083b1aFa5" }, "hardhat": { - "address": "0x8a8eB2979316f4F173A97ff91E0e1Dd106039ad4" + "address": "0xe3d9664D2a80d269940EcE9a744DC263c6a6959c" } }, "variableDebtLINK": { @@ -813,7 +834,7 @@ "address": "0x3f7389a4e2A351Fd9107d645108a6535Ed1232E4" }, "hardhat": { - "address": "0xa0207cf18d773Bae5F5d816fc674fF8FFd0D6fE6" + "address": "0x3b957FdA3e67D732031d41F0B4B832dcCD7005f6" } }, "stableDebtMANA": { @@ -821,7 +842,7 @@ "address": "0x217013C9bFE969979eB8efe94f3dfAeE35492C50" }, "hardhat": { - "address": "0xE5107B38FFB21AD61185785816559f8B3aA54Ac5" + "address": "0x273da316D8209A827cBADC4Fc914bB96dCd88397" } }, "variableDebtMANA": { @@ -829,7 +850,7 @@ "address": "0x5945e37b1ef058c5847b048786ac3fCdd40e56DE" }, "hardhat": { - "address": "0x1259DA780FF797C1a11d534b0BaC534eD2b3F109" + "address": "0xF6c722853fCE2c70d41ecc10b5e0aafc0BE782A4" } }, "aENJ": { @@ -837,7 +858,7 @@ "address": "0xc8fad67D303D8fCF6abe3206E4BF94D797Ef71f3" }, "hardhat": { - "address": "0xa9DFb142061Ef496F48078d9eA39A2D992236D0f" + "address": "0xeC70C41A36347b85A86d837D309c8CaB1540F1A8" } }, "strategyENJ": { @@ -845,7 +866,7 @@ "address": "0x537d2F788d0B598D5a921532D4086EDE3B2cEd64" }, "hardhat": { - "address": "0xaaE80234037A18Ee462b1727ed0621b54dFcEDA6" + "address": "0x3908cB82076E45f97b80a210DcE9eea96eFdc3b6" } }, "aKNC": { @@ -853,7 +874,7 @@ "address": "0x49c9eC52427E9ccd13eF0702d5b2e028Ce99A217" }, "hardhat": { - "address": "0x8076E5d426aa3B5C4c98570b3a9033EE67aFe849" + "address": "0xdF089cd4C344c859b022861a68cD2EfEEB21Eabe" } }, "strategyKNC": { @@ -861,7 +882,7 @@ "address": "0x1308fCd27933fF5639C9f51c86A17A3645c5dED9" }, "hardhat": { - "address": "0x87809db6234f27E3AacDEb316c00DbFCA77B11B3" + "address": "0xF6062f926ed0e708338e095d200668a31DeeCa8b" } }, "aLINK": { @@ -869,7 +890,7 @@ "address": "0x917e32953DA5eA01fb7FAEB90A19aeb51Cd42c23" }, "hardhat": { - "address": "0xe90Ad292698ddaE3Dc305Eb98Ff5FD7341c8a637" + "address": "0x96d73a1fD875b959Dc05Ea823fBE323107DaCF0B" } }, "strategyLINK": { @@ -877,7 +898,7 @@ "address": "0xA891181D5dca4b6a8F5d2607E456CFa9EB9D1D20" }, "hardhat": { - "address": "0x436d1eE2EDa1F7a98f2418709d10465c98Ed3828" + "address": "0x660a606C9828a74335A4333eD9d59CAf5800f486" } }, "aMANA": { @@ -885,7 +906,7 @@ "address": "0x2419b9D71F42D8C72176bA5C2c7bF152F0692814" }, "hardhat": { - "address": "0x8599378fE42e4FB26Ad214FB1545076EB19b8b0f" + "address": "0xC840F4f12c5137fc08b56EBa82b23DCdF8B5ACd6" } }, "strategyMANA": { @@ -893,7 +914,7 @@ "address": "0x886e231f0ca34deF2dBf091AA5d6be4cFa06B557" }, "hardhat": { - "address": "0x487E219628bb5227b2B490CaEE2E2b47ec06D204" + "address": "0xc009500eC821635E6110d494B4f45404E5586c59" } }, "stableDebtMKR": { @@ -901,7 +922,7 @@ "address": "0x2a8617F6802a1CCA29f2974837eaBD6630E80994" }, "hardhat": { - "address": "0x3deF3E7577D5Ddf0ea10fB58730fECdA673711C8" + "address": "0x9FE70690a18bBe8265a03f416fADbFB8A1983fBc" } }, "variableDebtMKR": { @@ -909,7 +930,7 @@ "address": "0xF75cC2a6C928198681D35c8117df83699189169D" }, "hardhat": { - "address": "0x509B355B5d665a209e888B20B818e53fAdEb47B7" + "address": "0xDb03E85f8bc2297f29839417D9A1E1362E2dD516" } }, "stableDebtREN": { @@ -917,7 +938,7 @@ "address": "0x598F59917d13269D8D81ab21Ea37F4B8e099e875" }, "hardhat": { - "address": "0x2A7C4a4D6b7db3beF0e277D950192c421aF4BD69" + "address": "0xc9C2968e383122Bba7FC6E87a840CDB5dC257314" } }, "variableDebtREN": { @@ -925,7 +946,7 @@ "address": "0x3140a105ede15FEc9391fef89e6d14b62B86C39B" }, "hardhat": { - "address": "0x5d1B59460fa295F6B4DEB74C74F4D11f4de60517" + "address": "0x502b8Cd8A84178af0bD80b07fC23ADe345E0a89f" } }, "stableDebtREP": { @@ -933,7 +954,7 @@ "address": "0x33160b3737a1869264601C4B8D97e98725920c16" }, "hardhat": { - "address": "0x80288A583c216fB0F6a7ccA1Fbc22d7727E2135a" + "address": "0x9BDdf2F48828A9AE0EB488269470a5300dd55cAc" } }, "variableDebtREP": { @@ -941,7 +962,7 @@ "address": "0x995487BB75AEc2375fdB216BfcB37b53f6Ab2abb" }, "hardhat": { - "address": "0xd7E287c1B79c7DA0F6fF7cdEA1026f1223c24F8a" + "address": "0xb434965dA49C5eF410445b4dF574c80FF372502A" } }, "stableDebtSNX": { @@ -949,7 +970,7 @@ "address": "0x77E8Addb01e36c5d754E89d0E5Da951e202d9CE3" }, "hardhat": { - "address": "0x0Aa250b8A76d9228Cc7609013cc77c500Ee802E7" + "address": "0x840f25B7fCC0f976D2E046DE8ab322B1accA6662" } }, "variableDebtSNX": { @@ -957,7 +978,7 @@ "address": "0x969e82694032cc0C346f855e52c5503B4e42F850" }, "hardhat": { - "address": "0xf45700a9EAD19BFA6770802E3807E3eE37E8E492" + "address": "0xAA92017604D953d4Bd837d980e953c541746D904" } }, "aMKR": { @@ -965,7 +986,7 @@ "address": "0xc3b70569D534C3E17B06C4a25980Ab349b534263" }, "hardhat": { - "address": "0x05EDF38bB3D948E96745f39072d59dCc915194Dd" + "address": "0x154f0e6086D1F3A777ED4B448045Cd3455Ddf40C" } }, "strategyMKR": { @@ -973,7 +994,7 @@ "address": "0x81DB8B1f3612FdAAA7A211d073dB4C8dcc5a98e7" }, "hardhat": { - "address": "0x90D5cff61508785557eaA45DeED1297809F49371" + "address": "0xE1C312F55E129b4aAf96725C193e925849707BA4" } }, "aREN": { @@ -981,7 +1002,7 @@ "address": "0x2Bed39d993276E548987e4271475696897254a17" }, "hardhat": { - "address": "0xB436Db1757e0c474DaF67666BC35F5fF7062541D" + "address": "0x403cf75AC7F7e0F9caC1f715e2Ac36f6007245eE" } }, "strategyREN": { @@ -989,7 +1010,7 @@ "address": "0x49a4CDd903A6644cF696F7E1d4404BBBC973470E" }, "hardhat": { - "address": "0x26eC70DcA80E8dBDaAcBff415aCdcF791C89CEBe" + "address": "0xf996E1e0E0B527a2A179461627d3fCF66A6b0151" } }, "aREP": { @@ -997,7 +1018,7 @@ "address": "0x04adf3717C2066cd338804909467e67C968B7Dd7" }, "hardhat": { - "address": "0xfcD974Cec976c536745bBB30e6C7E083a1Ab82EC" + "address": "0x2A508C4DA298bF87f35027D6616b5478cC5c513A" } }, "strategyREP": { @@ -1005,7 +1026,7 @@ "address": "0x5D271675dA68679DB9a8A8E3501cB7c21fd84cE3" }, "hardhat": { - "address": "0x0E7f0c6Bf3bA63A28e1EFdDb7F3186A24b90566D" + "address": "0x99AD43CDc5C9aD99670d110d22700062a931b774" } }, "aSNX": { @@ -1013,7 +1034,7 @@ "address": "0x023eba3646A08BA06CfCCB5c8F684048d1B654bb" }, "hardhat": { - "address": "0x21FA83fB5d14301B53Efc6e44C565C80063d1c50" + "address": "0xC75e2508dE6d8000FA5C97A635F4f48C7632d6AE" } }, "strategySNX": { @@ -1021,7 +1042,7 @@ "address": "0x866a1F54F13a00B9747C7832881a15234284D38C" }, "hardhat": { - "address": "0x5806cCA75C8fEf151881d93E7e81EB103F23fb7b" + "address": "0xDea1DFeb04663B7B752573E046000Ee92D1C88b0" } }, "stableDebtSUSD": { @@ -1029,7 +1050,7 @@ "address": "0x5Eac7b30C376081f293d5671f1B4a789a36Ba8C8" }, "hardhat": { - "address": "0xDfD96D3cac8b157176292c547A61eD7586713527" + "address": "0xB500f1089B97ca4E6e0E2F496164b2Bf40702D18" } }, "variableDebtSUSD": { @@ -1037,7 +1058,7 @@ "address": "0x34939cC14762b4993E0679231ECE9aC51836c071" }, "hardhat": { - "address": "0xcc94Ce18B9a7522d12675cA3fFC1A862Ac0373C1" + "address": "0xB8B80D64ecfA2e79BF0212a8afFa86006244c74E" } }, "stableDebtTUSD": { @@ -1045,7 +1066,7 @@ "address": "0xc3031590B298aB7591a59e467c944215236f7878" }, "hardhat": { - "address": "0x2C4ec78AD3Ff19F35e0dbF35837490C4f7b4224E" + "address": "0xA857e276492E727d43C8332F90190035fe2cdF51" } }, "variableDebtTUSD": { @@ -1053,7 +1074,7 @@ "address": "0x1E913eCe8FFcC67d86671ba3Ae7676F385722941" }, "hardhat": { - "address": "0xC9C2c855fA6EAFc5780B661b2CD1c8985c45D720" + "address": "0xE9519f1b2B639e151A3C353a169e7B1c8106A789" } }, "stableDebtUNI": { @@ -1061,7 +1082,7 @@ "address": "0x6C9ee95b637c44322C6fA244D0106a52Dc2cB6F9" }, "hardhat": { - "address": "0x1a2f37C5Ed6bEA450Ac31E10ED682994C7C77835" + "address": "0x16BFD34a59eB0Be88Bb6Af55CADc0ad32c724790" } }, "variableDebtUNI": { @@ -1069,7 +1090,7 @@ "address": "0xFEbef6B52C72A49CD8150284aD7277a7454373e0" }, "hardhat": { - "address": "0x83D129a2efFa0ba0d5B09f7CdfBEaDE1F847201E" + "address": "0x280430db0fe64B7F8c6a946655eB6752A9d714C2" } }, "stableDebtUSDC": { @@ -1077,7 +1098,7 @@ "address": "0xaD56D9738Aa70D518298c37Cd7C5Fc81ba987023" }, "hardhat": { - "address": "0xBb78BcaB8e39C38C6E019fe49E43b2591FAa6a58" + "address": "0x0178F3259271CFC416750AF6c4F4f51a27D96bA9" } }, "variableDebtUSDC": { @@ -1085,7 +1106,7 @@ "address": "0x38CA9234844ADBceB823462CC8666569883b9701" }, "hardhat": { - "address": "0xF5B3b70cb53852617B1fde19242bED043A885B4B" + "address": "0x2d0931CbCF4D2bC7f91b7535b2eC3070d8552CAb" } }, "aSUSD": { @@ -1093,7 +1114,7 @@ "address": "0x6EFA6906A391B4F62914f6Ae4650aC2154f89bE7" }, "hardhat": { - "address": "0x4bb47D17F31181c8BE088CE21574B4e973212C39" + "address": "0x947A23f8E7f7382249398f683649c866bad87AcF" } }, "strategySUSD": { @@ -1101,7 +1122,7 @@ "address": "0x144E8b18609B2dF30AD96789Db5c6feb9259626c" }, "hardhat": { - "address": "0x632a0Cf1e008011CC3185c9989205aa29BF267Df" + "address": "0xAce0e9788475E7a4266B157061b7c4c0F7aF57CC" } }, "aTUSD": { @@ -1109,7 +1130,7 @@ "address": "0x88ab5455013e2c00De2ABA5F48DEff10CFEDb490" }, "hardhat": { - "address": "0x2A3CcaB4Fb2A3B34f6A819Cfc50918fe96D64122" + "address": "0x60694Ca48F51f2D34f4De5c3Cc688d00fbB71764" } }, "strategyTUSD": { @@ -1117,7 +1138,7 @@ "address": "0xF862594F5C4061ac21547A9868716e12f0B59AC2" }, "hardhat": { - "address": "0x8B151819355Bfb7dE62e5b1D7580F43B34ed86e8" + "address": "0x69E9492f702fBc2016a79106C50f1FbF67AcB77e" } }, "aUNI": { @@ -1125,7 +1146,7 @@ "address": "0x5aEE290afe3778d218DcD59C61A18Bacfa22bBae" }, "hardhat": { - "address": "0x388e76350476e23A80eA6403B525aDa86ed7af6E" + "address": "0x0E716694fA09843eb70735c1AdA5E51b20BFcC79" } }, "strategyUNI": { @@ -1133,7 +1154,7 @@ "address": "0x21Fe360f849358e991Ea60Bd5C7569598788f46A" }, "hardhat": { - "address": "0xf86115c55192beb063C4c494E2C9CFB990235ecF" + "address": "0xb5363644Fe3cb5109Ac8e3f3F9632238BfF4B4c8" } }, "aUSDC": { @@ -1141,7 +1162,7 @@ "address": "0x4E2e684aA8fB7E15c487F2d922508dBCfdAfC921" }, "hardhat": { - "address": "0xa8d4DF7C220903a4018C3A81BEc702fb54623bd5" + "address": "0xfA6D6657161749272e3f158cdb3Af4E03015A727" } }, "strategyUSDC": { @@ -1149,7 +1170,7 @@ "address": "0x8480DFf825B99622d0598826F5EE3B5d79bA92c5" }, "hardhat": { - "address": "0x936b5f546a6405012AC1DC4713f29B7CE43Fb4A2" + "address": "0x609BD7680Ce4c46A867c2A0f9229b75d5a872ace" } }, "stableDebtUSDT": { @@ -1157,7 +1178,7 @@ "address": "0x953Ae6D846feB7112Be1DD0a2c996CD37c51f127" }, "hardhat": { - "address": "0x47167e26421017FD2a619D99Cf747b5eB58371B2" + "address": "0x88413e3FcE7fE0c8186cC877A9Ee50FbFC5b3b4e" } }, "variableDebtUSDT": { @@ -1165,7 +1186,7 @@ "address": "0x443005Fad27A870ED9BCF4B048FdD6b79a7d2B15" }, "hardhat": { - "address": "0xBfd65BbF3fbF0bFB0f0053e092EB690904eC6876" + "address": "0x1b023f0D66ad7390ADA99D2C0334921E4f9eee69" } }, "stableDebtWBTC": { @@ -1173,7 +1194,7 @@ "address": "0xa5E61884083c243345449eAD5c70158F016F4df0" }, "hardhat": { - "address": "0xae18C8d1A389E005faBf3234f5F81C35561c1811" + "address": "0xBfD89FE99Af3CB7b20F3CbA7a30cd838d46252dF" } }, "variableDebtWBTC": { @@ -1181,7 +1202,7 @@ "address": "0xFD5194F07E652865671b1a8310Ac54a853985547" }, "hardhat": { - "address": "0x7B3CAbCa23FafF9f02382Bc5A7BB73D46c2BE1ee" + "address": "0x480B773De09C464DFDaa1043726Bb84EA34C1987" } }, "stableDebtWETH": { @@ -1189,7 +1210,7 @@ "address": "0xcb19776e2B69595b6a3Ce4F44acb63e506bd8C1b" }, "hardhat": { - "address": "0x1A06De035FA3e4339f1a41C9008Ed6ba6c8f2a15" + "address": "0xC23CA88a9f2E4a2a2d4afe6D49736CD79d04bA08" } }, "variableDebtWETH": { @@ -1197,7 +1218,7 @@ "address": "0x755d5C1a5d82f26a92dFb793d0Da14eEd8Ec7435" }, "hardhat": { - "address": "0x61641145904737b907B4e31DBdAd829B606eB111" + "address": "0x8afF291013736bEA113Bebfb764996bB8e6271Fc" } }, "stableDebtYFI": { @@ -1205,7 +1226,7 @@ "address": "0xd72a6AdE1ba573DA8398ff05426B8450Daeaa3e7" }, "hardhat": { - "address": "0x3049AA46A60B4253d6Cf122a25bBd26a0CCb6CAd" + "address": "0x48071298E6825f5F60912fb99689003164FCe076" } }, "variableDebtYFI": { @@ -1213,7 +1234,7 @@ "address": "0xa0cE46eA00e4ccE66d93e8465DCEDE0f5470d2A4" }, "hardhat": { - "address": "0x1Af371fA93aFAB4F461b6f978E7918B79510896A" + "address": "0x926A933dd2682BeD5Bd286C49828f6b6Ab78dB55" } }, "aUSDT": { @@ -1221,7 +1242,7 @@ "address": "0x5109D69A94c7754251567aD12E0096368f6abcE5" }, "hardhat": { - "address": "0x6A45383E16554222D9AFf39c4deAd7EF598ddb95" + "address": "0x3bBffe72b3D6EDdC9fD1925609F627e925CdD838" } }, "strategyUSDT": { @@ -1229,7 +1250,7 @@ "address": "0x35716131aA6957eEF88c476a6a7e5f3cb6e2B4be" }, "hardhat": { - "address": "0x08fd990609A0Ed943858a7493c7105E2CC784784" + "address": "0x1011a3a55701E4070b348B90F206e261098AA789" } }, "aWBTC": { @@ -1237,7 +1258,7 @@ "address": "0xe53a364A541fC87eecab96365C4BC3b4BA7Ad55f" }, "hardhat": { - "address": "0xEDE8C583A3fB6DcfC1a991E5B1F9C1b0b29ca60d" + "address": "0x4bdd8891be6a517793E65CD4F7288CA1aCBa84A1" } }, "strategyWBTC": { @@ -1245,7 +1266,7 @@ "address": "0xD1A6A373A52FddceD8Eb630A6c230f39a53C15Ca" }, "hardhat": { - "address": "0x763b103B7EFEbb21Acc2b50b134681E0b5ecB247" + "address": "0x4B6653DD25F515b32656158AC3960Bc4efbf9fe9" } }, "aWETH": { @@ -1253,7 +1274,7 @@ "address": "0xcBb1352688efC3B5741B60545F0A79B62A629702" }, "hardhat": { - "address": "0x24aAB62Ae5595aACae2A0fC10aA31006Cb7dC4ef" + "address": "0x6a839181b299D1c527C93Bf09660268C519401eF" } }, "strategyWETH": { @@ -1261,7 +1282,7 @@ "address": "0xE05AA3A5A5Db7085A5A69402b1f7C033e4BC73d7" }, "hardhat": { - "address": "0x75e2e836409aF032Fc182F2e9D6212336E2E7026" + "address": "0x72b28fA48A598FB2A09362ceB5983fac64EF4d9c" } }, "aYFI": { @@ -1269,7 +1290,7 @@ "address": "0x0C26B8dD7c55c4d090FBCD96c135e12f542Aef83" }, "hardhat": { - "address": "0xE4b29Db05C1A3749d085E9eF41dC2378eE530dF0" + "address": "0x2F8fB24A9B1809229F52d9b9943DCcD75a5Ac8CE" } }, "strategyYFI": { @@ -1277,7 +1298,7 @@ "address": "0x4a26cc7002e3ca88D8d3f72b9b6e7C7C4bF8923c" }, "hardhat": { - "address": "0x8c82e998506DCF9ef46518182DaF18ae962d4b3C" + "address": "0x893e62B2BD2d652DB343DF18e6413c23fefA198d" } }, "stableDebtZRX": { @@ -1285,7 +1306,7 @@ "address": "0xBA1EFBca9B5b4C7718A4374ec29c1671D972118A" }, "hardhat": { - "address": "0x929ef1D4eB03724462e59219506CbD5Bcf2Cce38" + "address": "0xF7FA52f20131fA0e8648A2464892e98c60bD665c" } }, "variableDebtZRX": { @@ -1293,7 +1314,7 @@ "address": "0xfdf0AF23449181c404C15d0aA80D1355DC3FA460" }, "hardhat": { - "address": "0xDf5E00D37C010cE5FA334234c8E391F82e90fA2e" + "address": "0x1F6A681C043EA0e1c179888570819B2B4A6DC309" } }, "aZRX": { @@ -1301,7 +1322,7 @@ "address": "0x9952c8EbFf001915a504D3E2B54D3bFD205C104B" }, "hardhat": { - "address": "0x255AE9d92694fE823D099b42ff8088770B700029" + "address": "0x9B23e3f9114B54C90a5731c9edCea483e512B72B" } }, "strategyZRX": { @@ -1309,7 +1330,7 @@ "address": "0x2944f4c8b54410b61D3b305651a93547D24d691f" }, "hardhat": { - "address": "0xaDF23b1cAa6a7B3b077c432794FfF80A4b935cdF" + "address": "0x095baE292EC3Fd8303187cAACEBDa8c92D685aEa" } } } diff --git a/hardhat.config.ts b/hardhat.config.ts index e6ddb0c1..42302c19 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -15,7 +15,7 @@ import '@tenderly/hardhat-tenderly'; const SKIP_LOAD = process.env.SKIP_LOAD === 'true'; const DEFAULT_BLOCK_GAS_LIMIT = 12450000; -const DEFAULT_GAS_MUL = 2; +const DEFAULT_GAS_MUL = 5; const DEFAULT_GAS_PRICE = 2000000000; const HARDFORK = 'istanbul'; const INFURA_KEY = process.env.INFURA_KEY || ''; diff --git a/helpers/configuration.ts b/helpers/configuration.ts index 68c2db4e..bc9d317a 100644 --- a/helpers/configuration.ts +++ b/helpers/configuration.ts @@ -6,13 +6,14 @@ import { iBasicDistributionParams, ICommonConfiguration, eEthereumNetwork, + IMarketRates, } from './types'; import {getParamPerPool} from './contracts-helpers'; import {AaveConfig} from '../config/aave'; import {UniswapConfig} from '../config/uniswap'; import {CommonsConfig} from '../config/commons'; import {ZERO_ADDRESS} from './constants'; -import {DRE} from './misc-utils'; +import {DRE, filterMapBy} from './misc-utils'; import {tEthereumAddress} from './types'; import {getParamPerNetwork} from './contracts-helpers'; import {deployWETHMocked} from './contracts-deployments'; @@ -100,3 +101,17 @@ export const getWethAddress = async (config: ICommonConfiguration) => { const weth = await deployWETHMocked(); return weth.address; }; + +export const getLendingRateOracles = (poolConfig: ICommonConfiguration) => { + const { + ProtocolGlobalParams: {UsdAddress}, + LendingRateOracleRatesCommon, + ReserveAssets, + } = poolConfig; + + const MAINNET_FORK = process.env.MAINNET_FORK; + const network = MAINNET_FORK ? 'main' : DRE.network.name; + return filterMapBy(LendingRateOracleRatesCommon, (key) => + Object.keys(ReserveAssets[network]).includes(key) + ); +}; diff --git a/helpers/contracts-deployments.ts b/helpers/contracts-deployments.ts index 0887e9b7..4bf686a7 100644 --- a/helpers/contracts-deployments.ts +++ b/helpers/contracts-deployments.ts @@ -58,6 +58,7 @@ import {StableAndVariableTokensHelperFactory} from '../types/StableAndVariableTo import {MintableDelegationErc20} from '../types/MintableDelegationErc20'; import {readArtifact as buidlerReadArtifact} from '@nomiclabs/buidler/plugins'; import {HardhatRuntimeEnvironment} from 'hardhat/types'; +import {verifyContract} from './etherscan-verification'; const readArtifact = async (id: string) => { if (DRE.network.name === eEthereumNetwork.buidlerevm) { diff --git a/helpers/contracts-helpers.ts b/helpers/contracts-helpers.ts index 53860ea0..6552fc31 100644 --- a/helpers/contracts-helpers.ts +++ b/helpers/contracts-helpers.ts @@ -22,7 +22,8 @@ export type MockTokenMap = {[symbol: string]: MintableERC20}; export const registerContractInJsonDb = async (contractId: string, contractInstance: Contract) => { const currentNetwork = DRE.network.name; - if (currentNetwork !== 'hardhat' && !currentNetwork.includes('coverage')) { + const MAINNET_FORK = process.env.MAINNET_FORK; + if (MAINNET_FORK || (currentNetwork !== 'hardhat' && !currentNetwork.includes('coverage'))) { console.log(`*** ${contractId} ***\n`); console.log(`Network: ${currentNetwork}`); console.log(`tx: ${contractInstance.deployTransaction.hash}`); @@ -133,6 +134,11 @@ export const getParamPerNetwork = ( {kovan, ropsten, main, buidlerevm, coverage, tenderlyMain}: iParamsPerNetwork, network: eEthereumNetwork ) => { + const MAINNET_FORK = process.env.MAINNET_FORK; + if (MAINNET_FORK) { + return main; + } + switch (network) { case eEthereumNetwork.coverage: return coverage; diff --git a/helpers/misc-utils.ts b/helpers/misc-utils.ts index 0356fef4..a3408009 100644 --- a/helpers/misc-utils.ts +++ b/helpers/misc-utils.ts @@ -6,6 +6,9 @@ import {WAD} from './constants'; import {Wallet, ContractTransaction} from 'ethers'; import {HardhatRuntimeEnvironment} from 'hardhat/types'; import {BuidlerRuntimeEnvironment} from '@nomiclabs/buidler/types'; +import {tEthereumAddress} from './types'; +import {isAddress} from 'ethers/lib/utils'; +import {isZeroAddress} from 'ethereumjs-util'; export const toWad = (value: string | number) => new BigNumber(value).times(WAD).toFixed(); @@ -86,3 +89,10 @@ export const printContracts = () => { console.log('N# Contracts:', entries.length); console.log(contractsPrint.join('\n'), '\n'); }; + +export const notFalsyOrZeroAddress = (address: tEthereumAddress | null | undefined): boolean => { + if (!address) { + return false; + } + return isAddress(address) && !isZeroAddress(address); +}; diff --git a/helpers/oracles-helpers.ts b/helpers/oracles-helpers.ts index 45cec5e2..2da44481 100644 --- a/helpers/oracles-helpers.ts +++ b/helpers/oracles-helpers.ts @@ -13,6 +13,7 @@ import {MockAggregator} from '../types/MockAggregator'; import {deployMockAggregator} from './contracts-deployments'; import {chunk, waitForTx} from './misc-utils'; import {getStableAndVariableTokensHelper} from './contracts-getters'; +import {stablecoinStrategyCentralized} from '../config/reservesConfigs'; export const setInitialMarketRatesInRatesOracleByHelper = async ( marketRates: iMultiPoolsAssets, diff --git a/package.json b/package.json index 4be80848..8668f6a8 100644 --- a/package.json +++ b/package.json @@ -22,8 +22,8 @@ "aave:kovan:full:initialize": "npm run hardhat:kovan -- full:initialize-lending-pool --verify --pool Aave", "aave:ropsten:dev:migration": "npm run hardhat:ropsten -- aave:dev --verify", "aave:ropsten:full:migration": "npm run hardhat:ropsten -- aave:full --verify", - "aave:fork:main:tendery": "npm run hardhat:tenderly-main -- aave:full:fork", - "aave:fork:main": "MAINNET_FORK=true npm run aave:full:fork", + "aave:fork:main:tenderly": "npm run hardhat:tenderly-main -- aave:full:fork", + "aave:fork:main": "MAINNET_FORK=true hardhat aave:full:fork", "aave:main:dev:migration": "npm run hardhat:main -- aave:dev --verify", "aave:main:full:migration": "npm run hardhat:main -- aave:full --verify", "uniswap:evm:dev:migration": "hardhat uniswap:dev", diff --git a/tasks/full/1_address_provider.ts b/tasks/full/1_address_provider.ts index cc9edf0c..01485056 100644 --- a/tasks/full/1_address_provider.ts +++ b/tasks/full/1_address_provider.ts @@ -1,10 +1,10 @@ import {task} from 'hardhat/config'; -import {getParamPerNetwork} from '../../helpers/contracts-helpers'; +import {getEthersSignersAddresses, getParamPerNetwork} from '../../helpers/contracts-helpers'; import { deployLendingPoolAddressesProvider, deployLendingPoolAddressesProviderRegistry, } from '../../helpers/contracts-deployments'; -import {waitForTx} from '../../helpers/misc-utils'; +import {notFalsyOrZeroAddress, waitForTx} from '../../helpers/misc-utils'; import { ConfigNames, loadPoolConfig, @@ -22,25 +22,26 @@ task( .addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`) .setAction(async ({verify, pool}, localBRE) => { await localBRE.run('set-DRE'); + console.log('addresses', await getEthersSignersAddresses()); const network = localBRE.network.name; const poolConfig = loadPoolConfig(pool); const {ProviderId} = poolConfig; const providerRegistryAddress = getParamPerNetwork(poolConfig.ProviderRegistry, network); // Deploy address provider and set genesis manager - console.log('addres provider'); const addressesProvider = await deployLendingPoolAddressesProvider(verify); + console.log('prox', addressesProvider.address); await waitForTx(await addressesProvider.setPoolAdmin(await getGenesisPoolAdmin(poolConfig))); - const admin = await getEmergencyAdmin(poolConfig); - console.log('Admin is ', admin); + await waitForTx(await addressesProvider.setEmergencyAdmin(await getEmergencyAdmin(poolConfig))); - await waitForTx(await addressesProvider.setEmergencyAdmin(admin)); + console.log('Pool Admin', await addressesProvider.getPoolAdmin()); + console.log('Emergency Admin', await addressesProvider.getEmergencyAdmin()); // If no provider registry is set, deploy lending pool address provider registry and register the address provider - const addressesProviderRegistry = !providerRegistryAddress - ? await deployLendingPoolAddressesProviderRegistry(verify) - : await getLendingPoolAddressesProviderRegistry(providerRegistryAddress); + const addressesProviderRegistry = notFalsyOrZeroAddress(providerRegistryAddress) + ? await getLendingPoolAddressesProviderRegistry(providerRegistryAddress) + : await deployLendingPoolAddressesProviderRegistry(verify); await waitForTx( await addressesProviderRegistry.registerAddressesProvider( diff --git a/tasks/full/2_lending_pool.ts b/tasks/full/2_lending_pool.ts index 004ab951..c0b4bc19 100644 --- a/tasks/full/2_lending_pool.ts +++ b/tasks/full/2_lending_pool.ts @@ -1,5 +1,8 @@ import {task} from 'hardhat/config'; -import {insertContractAddressInDb} from '../../helpers/contracts-helpers'; +import { + getEthersSignersAddresses, + insertContractAddressInDb, +} from '../../helpers/contracts-helpers'; import { deployATokensAndRatesHelper, deployLendingPool, @@ -20,15 +23,16 @@ task('full:deploy-lending-pool', 'Deploy lending pool for dev enviroment') try { await DRE.run('set-DRE'); + console.log('addresses', await getEthersSignersAddresses()); const addressesProvider = await getLendingPoolAddressesProvider(); // Deploy lending pool const lendingPoolImpl = await deployLendingPool(verify); - console.log('setting up lending pool', addressesProvider); + console.log('set lend poool', addressesProvider.address); // Set lending pool impl to address provider await waitForTx(await addressesProvider.setLendingPoolImpl(lendingPoolImpl.address)); - console.log('lending pool setted'); + console.log('setted'); const address = await addressesProvider.getLendingPool(); const lendingPoolProxy = await getLendingPool(address); @@ -38,13 +42,11 @@ task('full:deploy-lending-pool', 'Deploy lending pool for dev enviroment') // Deploy lending pool configurator const lendingPoolConfiguratorImpl = await deployLendingPoolConfigurator(verify); - console.log('set up x'); // Set lending pool conf impl to Address Provider await waitForTx( await addressesProvider.setLendingPoolConfiguratorImpl(lendingPoolConfiguratorImpl.address) ); - console.log('set up x'); const lendingPoolConfiguratorProxy = await getLendingPoolConfiguratorProxy( await addressesProvider.getLendingPoolConfigurator() ); @@ -58,13 +60,17 @@ task('full:deploy-lending-pool', 'Deploy lending pool for dev enviroment') [lendingPoolProxy.address, addressesProvider.address], verify ); - console.log('set up x'); await deployATokensAndRatesHelper( [lendingPoolProxy.address, addressesProvider.address, lendingPoolConfiguratorProxy.address], verify ); } catch (error) { - const transactionLink = `https://dashboard.tenderly.co/fork/${DRE.tenderlyRPC.getFork()}/simulation/${DRE.tenderlyRPC.getHead()}`; - console.log(transactionLink); + if (DRE.network.name.includes('tenderly')) { + const transactionLink = `https://dashboard.tenderly.co/${DRE.config.tenderly.username}/${ + DRE.config.tenderly.project + }/fork/${DRE.tenderlyRPC.getFork()}/simulation/${DRE.tenderlyRPC.getHead()}`; + console.error('Check tx error:', transactionLink); + } + throw error; } }); diff --git a/tasks/full/3_oracles.ts b/tasks/full/3_oracles.ts index f578d58d..fa569c66 100644 --- a/tasks/full/3_oracles.ts +++ b/tasks/full/3_oracles.ts @@ -1,21 +1,21 @@ import {task} from 'hardhat/config'; -import {getParamPerNetwork} from '../../helpers/contracts-helpers'; +import {getEthersSignersAddresses, getParamPerNetwork} from '../../helpers/contracts-helpers'; import { deployChainlinkProxyPriceProvider, deployLendingRateOracle, } from '../../helpers/contracts-deployments'; import {setInitialMarketRatesInRatesOracleByHelper} from '../../helpers/oracles-helpers'; import {ICommonConfiguration, eEthereumNetwork, SymbolMap} from '../../helpers/types'; -import {waitForTx, filterMapBy} from '../../helpers/misc-utils'; +import {waitForTx, filterMapBy, notFalsyOrZeroAddress} from '../../helpers/misc-utils'; import { ConfigNames, loadPoolConfig, getWethAddress, getGenesisPoolAdmin, + getLendingRateOracles, } from '../../helpers/configuration'; import {exit} from 'process'; import { - getAddressById, getChainlinkPriceProvider, getLendingPoolAddressesProvider, getLendingRateOracle, @@ -25,26 +25,24 @@ import { task('full:deploy-oracles', 'Deploy oracles for dev enviroment') .addFlag('verify', 'Verify contracts at Etherscan') .addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`) - .setAction(async ({verify, pool}, localBRE) => { + .setAction(async ({verify, pool}, DRE) => { try { - await localBRE.run('set-DRE'); - const network = localBRE.network.name; + console.log('addresses', await getEthersSignersAddresses()); + await DRE.run('set-DRE'); + const network = DRE.network.name; const poolConfig = loadPoolConfig(pool); const { ProtocolGlobalParams: {UsdAddress}, - LendingRateOracleRatesCommon, ReserveAssets, FallbackOracle, ChainlinkAggregator, } = poolConfig as ICommonConfiguration; - const lendingRateOracles = filterMapBy(LendingRateOracleRatesCommon, (key) => - Object.keys(ReserveAssets[network]).includes(key) - ); + const lendingRateOracles = getLendingRateOracles(poolConfig); const addressesProvider = await getLendingPoolAddressesProvider(); const admin = await getGenesisPoolAdmin(poolConfig); const proxyPriceProviderAddress = getParamPerNetwork(poolConfig.ProxyPriceProvider, network); const lendingRateOracleAddress = getParamPerNetwork(poolConfig.LendingRateOracle, network); - const fallbackOracle = await getParamPerNetwork(FallbackOracle, network); + const fallbackOracleAddress = await getParamPerNetwork(FallbackOracle, network); const reserveAssets = await getParamPerNetwork(ReserveAssets, network); const chainlinkAggregators = await getParamPerNetwork(ChainlinkAggregator, network); @@ -54,22 +52,24 @@ task('full:deploy-oracles', 'Deploy oracles for dev enviroment') }; const [tokens, aggregators] = getPairsTokenAggregator(tokensToWatch, chainlinkAggregators); - console.log('wha'); - const chainlinkProviderPriceProvider = proxyPriceProviderAddress + const chainlinkProviderPriceProvider = notFalsyOrZeroAddress(proxyPriceProviderAddress) ? await getChainlinkPriceProvider(proxyPriceProviderAddress) : await deployChainlinkProxyPriceProvider( - [tokens, aggregators, fallbackOracle, await getWethAddress(poolConfig)], + [tokens, aggregators, fallbackOracleAddress, await getWethAddress(poolConfig)], verify ); - console.log('ppp'); - - const lendingRateOracle = lendingRateOracleAddress + const lendingRateOracle = notFalsyOrZeroAddress(lendingRateOracleAddress) ? await getLendingRateOracle(lendingRateOracleAddress) : await deployLendingRateOracle(verify); - const {USD, ...tokensAddressesWithoutUsd} = tokensToWatch; if (!lendingRateOracleAddress) { + console.log( + lendingRateOracles, + tokensAddressesWithoutUsd, + lendingRateOracle.address, + aggregators + ); await setInitialMarketRatesInRatesOracleByHelper( lendingRateOracles, tokensAddressesWithoutUsd, @@ -83,8 +83,13 @@ task('full:deploy-oracles', 'Deploy oracles for dev enviroment') await addressesProvider.setPriceOracle(chainlinkProviderPriceProvider.address) ); await waitForTx(await addressesProvider.setLendingRateOracle(lendingRateOracle.address)); - } catch (err) { - console.error(err); - exit(1); + } catch (error) { + if (DRE.network.name.includes('tenderly')) { + const transactionLink = `https://dashboard.tenderly.co/${DRE.config.tenderly.username}/${ + DRE.config.tenderly.project + }/fork/${DRE.tenderlyRPC.getFork()}/simulation/${DRE.tenderlyRPC.getHead()}`; + console.error('Check tx error:', transactionLink); + } + throw error; } }); diff --git a/tasks/migrations/aave.mainnet.fork.ts b/tasks/migrations/aave.mainnet.ts similarity index 92% rename from tasks/migrations/aave.mainnet.fork.ts rename to tasks/migrations/aave.mainnet.ts index dffe8508..d5ff76ac 100644 --- a/tasks/migrations/aave.mainnet.fork.ts +++ b/tasks/migrations/aave.mainnet.ts @@ -47,9 +47,11 @@ task('aave:full:fork', 'Deploy development enviroment') console.log('5. Veryfing aTokens and debtTokens'); await DRE.run('verify:tokens', {pool: POOL_NAME}); } - const postDeployHead = DRE.tenderlyRPC.getHead(); - console.log('HEAD', postDeployHead); + if (network.includes('tenderly')) { + const postDeployHead = DRE.tenderlyRPC.getHead(); + console.log('Tenderly UUID', postDeployHead); + } console.log('\nFinished migrations'); printContracts(); }); From 27365697ac4eda6ac1f97c79d6226146719fad60 Mon Sep 17 00:00:00 2001 From: David Racero Date: Mon, 16 Nov 2020 19:22:22 +0100 Subject: [PATCH 08/11] Added mainnet check list. Remove deployed contracts. Update README.md --- README.md | 25 + contracts/misc/AaveProtocolDataProvider.sol | 16 +- .../misc/interfaces/IUniswapV2Router01.sol | 160 ++ .../misc/interfaces/IUniswapV2Router02.sol | 50 + deployed-contracts.json | 1336 ----------------- helpers/configuration.ts | 2 +- helpers/contracts-helpers.ts | 4 +- package.json | 14 +- tasks/full/1_address_provider.ts | 9 +- tasks/full/2_lending_pool.ts | 3 - tasks/full/3_oracles.ts | 7 - tasks/migrations/aave.full.ts | 5 +- tasks/migrations/aave.mainnet.ts | 8 +- test/__setup.spec.ts | 11 +- test/helpers/make-suite.ts | 6 +- test/mainnet/check-list.spec.ts | 362 +++++ 16 files changed, 645 insertions(+), 1373 deletions(-) create mode 100644 contracts/misc/interfaces/IUniswapV2Router01.sol create mode 100644 contracts/misc/interfaces/IUniswapV2Router02.sol delete mode 100644 deployed-contracts.json create mode 100644 test/mainnet/check-list.spec.ts diff --git a/README.md b/README.md index 12395316..4ebfdb3c 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,8 @@ npm run aave:kovan:full:migration ### Mainnet fork deployment +You can deploy Aave Protocol v2 in a forked Mainnet chain using Hardhat built-in feature: + ``` # In one terminal, run a hardhat note with mainnet fork enabled MAINNET_FORK=true npx hardhat node @@ -95,4 +97,27 @@ docker-compose exec contracts-env bash # A new Bash terminal is prompted, connected to the container npm run aave:fork:main + +# Contracts are now deployed at Hardhat node with Mainnet fork. + +# You can interact with them via Hardhat console +MAINNET_FORK=true npx hardhat console +# Or your custom Hardhat task +MAINNET_FORK=true npx hardhat your-custom-task + +``` + +### Mainnet fork - Run the check list + +For testing the deployment scripts for Mainnet release, you can run the check-list tests in a Mainnet fork using Hardhat built-in feature: + +``` +# In another terminal, run docker-compose +docker-compose up + +# Open another tab or terminal +docker-compose exec contracts-env bash + +# A new Bash terminal is prompted, connected to the container +npm run test:main:check-list ``` diff --git a/contracts/misc/AaveProtocolDataProvider.sol b/contracts/misc/AaveProtocolDataProvider.sol index cc35f17d..ca8e8d85 100644 --- a/contracts/misc/AaveProtocolDataProvider.sol +++ b/contracts/misc/AaveProtocolDataProvider.sol @@ -10,11 +10,15 @@ import {ReserveConfiguration} from '../libraries/configuration/ReserveConfigurat import {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol'; import {IStableDebtToken} from '../tokenization/interfaces/IStableDebtToken.sol'; import {IVariableDebtToken} from '../tokenization/interfaces/IVariableDebtToken.sol'; +import 'hardhat/console.sol'; contract AaveProtocolDataProvider { using ReserveConfiguration for ReserveConfiguration.Map; using UserConfiguration for UserConfiguration.Map; + address constant MKR = 0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2; + address constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; + struct TokenData { string symbol; address tokenAddress; @@ -31,10 +35,16 @@ contract AaveProtocolDataProvider { address[] memory reserves = pool.getReservesList(); TokenData[] memory reservesTokens = new TokenData[](reserves.length); for (uint256 i = 0; i < reserves.length; i++) { + if (reserves[i] == MKR) { + reservesTokens[i] = TokenData({symbol: 'MKR', tokenAddress: reserves[i]}); + continue; + } + if (reserves[i] == ETH) { + reservesTokens[i] = TokenData({symbol: 'ETH', tokenAddress: reserves[i]}); + continue; + } reservesTokens[i] = TokenData({ - symbol: (reserves[i] == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) - ? 'ETH' - : IERC20Detailed(reserves[i]).symbol(), + symbol: IERC20Detailed(reserves[i]).symbol(), tokenAddress: reserves[i] }); } diff --git a/contracts/misc/interfaces/IUniswapV2Router01.sol b/contracts/misc/interfaces/IUniswapV2Router01.sol new file mode 100644 index 00000000..6acc52be --- /dev/null +++ b/contracts/misc/interfaces/IUniswapV2Router01.sol @@ -0,0 +1,160 @@ +pragma solidity >=0.6.2; + +interface IUniswapV2Router01 { + function factory() external pure returns (address); + + function WETH() external pure returns (address); + + function addLiquidity( + address tokenA, + address tokenB, + uint256 amountADesired, + uint256 amountBDesired, + uint256 amountAMin, + uint256 amountBMin, + address to, + uint256 deadline + ) + external + returns ( + uint256 amountA, + uint256 amountB, + uint256 liquidity + ); + + function addLiquidityETH( + address token, + uint256 amountTokenDesired, + uint256 amountTokenMin, + uint256 amountETHMin, + address to, + uint256 deadline + ) + external + payable + returns ( + uint256 amountToken, + uint256 amountETH, + uint256 liquidity + ); + + function removeLiquidity( + address tokenA, + address tokenB, + uint256 liquidity, + uint256 amountAMin, + uint256 amountBMin, + address to, + uint256 deadline + ) external returns (uint256 amountA, uint256 amountB); + + function removeLiquidityETH( + address token, + uint256 liquidity, + uint256 amountTokenMin, + uint256 amountETHMin, + address to, + uint256 deadline + ) external returns (uint256 amountToken, uint256 amountETH); + + function removeLiquidityWithPermit( + address tokenA, + address tokenB, + uint256 liquidity, + uint256 amountAMin, + uint256 amountBMin, + address to, + uint256 deadline, + bool approveMax, + uint8 v, + bytes32 r, + bytes32 s + ) external returns (uint256 amountA, uint256 amountB); + + function removeLiquidityETHWithPermit( + address token, + uint256 liquidity, + uint256 amountTokenMin, + uint256 amountETHMin, + address to, + uint256 deadline, + bool approveMax, + uint8 v, + bytes32 r, + bytes32 s + ) external returns (uint256 amountToken, uint256 amountETH); + + function swapExactTokensForTokens( + uint256 amountIn, + uint256 amountOutMin, + address[] calldata path, + address to, + uint256 deadline + ) external returns (uint256[] memory amounts); + + function swapTokensForExactTokens( + uint256 amountOut, + uint256 amountInMax, + address[] calldata path, + address to, + uint256 deadline + ) external returns (uint256[] memory amounts); + + function swapExactETHForTokens( + uint256 amountOutMin, + address[] calldata path, + address to, + uint256 deadline + ) external payable returns (uint256[] memory amounts); + + function swapTokensForExactETH( + uint256 amountOut, + uint256 amountInMax, + address[] calldata path, + address to, + uint256 deadline + ) external returns (uint256[] memory amounts); + + function swapExactTokensForETH( + uint256 amountIn, + uint256 amountOutMin, + address[] calldata path, + address to, + uint256 deadline + ) external returns (uint256[] memory amounts); + + function swapETHForExactTokens( + uint256 amountOut, + address[] calldata path, + address to, + uint256 deadline + ) external payable returns (uint256[] memory amounts); + + function quote( + uint256 amountA, + uint256 reserveA, + uint256 reserveB + ) external pure returns (uint256 amountB); + + function getAmountOut( + uint256 amountIn, + uint256 reserveIn, + uint256 reserveOut + ) external pure returns (uint256 amountOut); + + function getAmountIn( + uint256 amountOut, + uint256 reserveIn, + uint256 reserveOut + ) external pure returns (uint256 amountIn); + + function getAmountsOut(uint256 amountIn, address[] calldata path) + external + view + returns (uint256[] memory amounts); + + function getAmountsIn(uint256 amountOut, address[] calldata path) + external + view + returns (uint256[] memory amounts); +} diff --git a/contracts/misc/interfaces/IUniswapV2Router02.sol b/contracts/misc/interfaces/IUniswapV2Router02.sol new file mode 100644 index 00000000..53fa9eb3 --- /dev/null +++ b/contracts/misc/interfaces/IUniswapV2Router02.sol @@ -0,0 +1,50 @@ +pragma solidity >=0.6.2; + +import './IUniswapV2Router01.sol'; + +interface IUniswapV2Router02 is IUniswapV2Router01 { + function removeLiquidityETHSupportingFeeOnTransferTokens( + address token, + uint256 liquidity, + uint256 amountTokenMin, + uint256 amountETHMin, + address to, + uint256 deadline + ) external returns (uint256 amountETH); + + function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( + address token, + uint256 liquidity, + uint256 amountTokenMin, + uint256 amountETHMin, + address to, + uint256 deadline, + bool approveMax, + uint8 v, + bytes32 r, + bytes32 s + ) external returns (uint256 amountETH); + + function swapExactTokensForTokensSupportingFeeOnTransferTokens( + uint256 amountIn, + uint256 amountOutMin, + address[] calldata path, + address to, + uint256 deadline + ) external; + + function swapExactETHForTokensSupportingFeeOnTransferTokens( + uint256 amountOutMin, + address[] calldata path, + address to, + uint256 deadline + ) external payable; + + function swapExactTokensForETHSupportingFeeOnTransferTokens( + uint256 amountIn, + uint256 amountOutMin, + address[] calldata path, + address to, + uint256 deadline + ) external; +} diff --git a/deployed-contracts.json b/deployed-contracts.json deleted file mode 100644 index 55e206aa..00000000 --- a/deployed-contracts.json +++ /dev/null @@ -1,1336 +0,0 @@ -{ - "MintableERC20": { - "buidlerevm": { - "address": "0x18b9306737eaf6E8FC8e737F488a1AE077b18053", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x18b9306737eaf6E8FC8e737F488a1AE077b18053", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "DAI": { - "buidlerevm": { - "address": "0x7c2C195CD6D34B8F845992d380aADB2730bB9C6F", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x7c2C195CD6D34B8F845992d380aADB2730bB9C6F", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "LEND": { - "buidlerevm": { - "address": "0x8858eeB3DfffA017D4BCE9801D340D36Cf895CCf", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "TUSD": { - "buidlerevm": { - "address": "0x0078371BDeDE8aAc7DeBfFf451B74c5EDB385Af7", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x0078371BDeDE8aAc7DeBfFf451B74c5EDB385Af7", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "BAT": { - "buidlerevm": { - "address": "0xf4e77E5Da47AC3125140c470c71cBca77B5c638c", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0xf4e77E5Da47AC3125140c470c71cBca77B5c638c", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "WETH": { - "buidlerevm": { - "address": "0xf784709d2317D872237C4bC22f867d1BAe2913AB", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0xf784709d2317D872237C4bC22f867d1BAe2913AB", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "USDC": { - "buidlerevm": { - "address": "0x3619DbE27d7c1e7E91aA738697Ae7Bc5FC3eACA5", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x3619DbE27d7c1e7E91aA738697Ae7Bc5FC3eACA5", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "USDT": { - "buidlerevm": { - "address": "0x038B86d9d8FAFdd0a02ebd1A476432877b0107C8", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x038B86d9d8FAFdd0a02ebd1A476432877b0107C8", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "SUSD": { - "buidlerevm": { - "address": "0x1A1FEe7EeD918BD762173e4dc5EfDB8a78C924A8", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x1A1FEe7EeD918BD762173e4dc5EfDB8a78C924A8", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "ZRX": { - "buidlerevm": { - "address": "0x500D1d6A4c7D8Ae28240b47c8FCde034D827fD5e", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x500D1d6A4c7D8Ae28240b47c8FCde034D827fD5e", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "MKR": { - "buidlerevm": { - "address": "0xc4905364b78a742ccce7B890A89514061E47068D", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0xc4905364b78a742ccce7B890A89514061E47068D", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "WBTC": { - "buidlerevm": { - "address": "0xD6C850aeBFDC46D7F4c207e445cC0d6B0919BDBe", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0xD6C850aeBFDC46D7F4c207e445cC0d6B0919BDBe", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "LINK": { - "buidlerevm": { - "address": "0x8B5B7a6055E54a36fF574bbE40cf2eA68d5554b3", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x8B5B7a6055E54a36fF574bbE40cf2eA68d5554b3", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "KNC": { - "buidlerevm": { - "address": "0xEcc0a6dbC0bb4D51E4F84A315a9e5B0438cAD4f0", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0xEcc0a6dbC0bb4D51E4F84A315a9e5B0438cAD4f0", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "MANA": { - "buidlerevm": { - "address": "0x20Ce94F404343aD2752A2D01b43fa407db9E0D00", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x20Ce94F404343aD2752A2D01b43fa407db9E0D00", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "REP": { - "buidlerevm": { - "address": "0x1d80315fac6aBd3EfeEbE97dEc44461ba7556160", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x1d80315fac6aBd3EfeEbE97dEc44461ba7556160", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "SNX": { - "buidlerevm": { - "address": "0x52d3b94181f8654db2530b0fEe1B19173f519C52", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x52d3b94181f8654db2530b0fEe1B19173f519C52", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "BUSD": { - "buidlerevm": { - "address": "0xd15468525c35BDBC1eD8F2e09A00F8a173437f2f", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0xd15468525c35BDBC1eD8F2e09A00F8a173437f2f", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "USD": { - "buidlerevm": { - "address": "0x7e35Eaf7e8FBd7887ad538D4A38Df5BbD073814a", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x7e35Eaf7e8FBd7887ad538D4A38Df5BbD073814a", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "UNI_DAI_ETH": { - "buidlerevm": { - "address": "0xB00cC45B4a7d3e1FEE684cFc4417998A1c183e6d", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0xB00cC45B4a7d3e1FEE684cFc4417998A1c183e6d", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "UNI_USDC_ETH": { - "buidlerevm": { - "address": "0x58F132FBB86E21545A4Bace3C19f1C05d86d7A22", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x58F132FBB86E21545A4Bace3C19f1C05d86d7A22", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "UNI_SETH_ETH": { - "buidlerevm": { - "address": "0xa4bcDF64Cdd5451b6ac3743B414124A6299B65FF", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0xa4bcDF64Cdd5451b6ac3743B414124A6299B65FF", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "UNI_LINK_ETH": { - "buidlerevm": { - "address": "0x22474D350EC2dA53D717E30b96e9a2B7628Ede5b", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x22474D350EC2dA53D717E30b96e9a2B7628Ede5b", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "UNI_MKR_ETH": { - "buidlerevm": { - "address": "0x5A0773Ff307Bf7C71a832dBB5312237fD3437f9F", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x5A0773Ff307Bf7C71a832dBB5312237fD3437f9F", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "UNI_LEND_ETH": { - "buidlerevm": { - "address": "0x18b9306737eaf6E8FC8e737F488a1AE077b18053", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x18b9306737eaf6E8FC8e737F488a1AE077b18053", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "LendingPoolAddressesProvider": { - "buidlerevm": { - "address": "0xFAe0fd738dAbc8a0426F47437322b6d026A9FD95", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "kovan": { - "address": "0x2ed9F124cF9b079DDBbFb68D352FB83bdeFc39Ee", - "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" - }, - "hardhat": { - "address": "0x7c2C195CD6D34B8F845992d380aADB2730bB9C6F", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "tenderlyMain": { - "address": "0x4Be9d82643799cA95D3a77d1618afC5011268382", - "deployer": "0xddAF59aB7A3f2215965d8bF74Eb975073a5fa126" - } - }, - "LendingPoolAddressesProviderRegistry": { - "buidlerevm": { - "address": "0x18b9306737eaf6E8FC8e737F488a1AE077b18053", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "kovan": { - "address": "0xAA14619F08ADe8109F47905CAda9EDDee0c876c3", - "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" - }, - "hardhat": { - "address": "0xf4e77E5Da47AC3125140c470c71cBca77B5c638c", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "tenderlyMain": { - "address": "0x70DA60D03b61e32F6d11eD4056D15a6202C673c5", - "deployer": "0xc10Cd14F2B546e6e4603e002AD2f9CC4f3c1d3c8" - } - }, - "ReserveLogic": { - "buidlerevm": { - "address": "0x920d847fE49E54C19047ba8bc236C45A8068Bca7", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "kovan": { - "address": "0x89b33E0CB2294f5c09ACB6281B37DED90Cd8025F", - "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" - }, - "hardhat": { - "address": "0x3619DbE27d7c1e7E91aA738697Ae7Bc5FC3eACA5", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "tenderlyMain": { - "address": "0xbC4BbB5d0642EB4841Fe97fE7B29035a8539a078", - "deployer": "0x3054fFbdD1506e38FDA08B1e19be37a3081F74bf" - } - }, - "GenericLogic": { - "buidlerevm": { - "address": "0xA4765Ff72A9F3CfE73089bb2c3a41B838DF71574", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "kovan": { - "address": "0x86EB6F23b497320742eb1dDab598fD04c3E11682", - "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" - }, - "hardhat": { - "address": "0x038B86d9d8FAFdd0a02ebd1A476432877b0107C8", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "tenderlyMain": { - "address": "0x7962d48c83a8B7a511Ae3986145E497E55b43d02", - "deployer": "0xEB445d7d663ff60fFdE5aed8bFa8B4aa678E9Af3" - } - }, - "ValidationLogic": { - "buidlerevm": { - "address": "0x35c1419Da7cf0Ff885B8Ef8EA9242FEF6800c99b", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "kovan": { - "address": "0xe0bd0Adcca9de46aE8fe8E50276A13b4c1dfE931", - "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" - }, - "hardhat": { - "address": "0x1A1FEe7EeD918BD762173e4dc5EfDB8a78C924A8", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "tenderlyMain": { - "address": "0x303eE85cB0e2B1fea6dF1A67F7D3868A602780D0", - "deployer": "0x2269cA0fD6e027160E3e0176DF25a32c039C7c16" - } - }, - "LendingPool": { - "buidlerevm": { - "address": "0xe2607EabC87fd0A4856840bF23da8458cDF0434F", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "kovan": { - "address": "0x212B0b733BFbc58D3B62b79Da1B38E915057039f" - }, - "hardhat": { - "address": "0xdA71454D2a71D63116cd67099e4a0fdd3a8Dfb47" - }, - "tenderlyMain": { - "address": "0xd2c20bDA613DD9E268559a08CdDb49A90a0b9dA9" - } - }, - "LendingPoolConfigurator": { - "buidlerevm": { - "address": "0xdbaA15927b1463EdD14Cf51D082BD7703Fd1C238" - }, - "kovan": { - "address": "0xD57c7ad0F079EbA38B0c1972d68d13f78719FC00" - }, - "hardhat": { - "address": "0x1b88b3E43526cB076931AD76cB2eC0CC93382FAc" - }, - "tenderlyMain": { - "address": "0x291c74E889865751557776Df1FD23476981DDcB2" - } - }, - "StableAndVariableTokensHelper": { - "buidlerevm": { - "address": "0x06bA8d8af0dF898D0712DffFb0f862cC51AF45c2", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "kovan": { - "address": "0xF67bbFB9265b7eA7c450F405673690A11a20748D", - "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" - }, - "hardhat": { - "address": "0xEcc0a6dbC0bb4D51E4F84A315a9e5B0438cAD4f0", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "tenderlyMain": { - "address": "0xbBE7278FdF24860F05D9a10316F3c5E425cBD4ec", - "deployer": "0x0Fc326f9b8155b674733bCc8FcDcdE36606ba7C5" - } - }, - "ATokensAndRatesHelper": { - "buidlerevm": { - "address": "0xA4765Ff72A9F3CfE73089bb2c3a41B838DF71574", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "kovan": { - "address": "0x8177E36Fc8Cb12c31F0e463F39394fC417345B56", - "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" - }, - "hardhat": { - "address": "0x20Ce94F404343aD2752A2D01b43fa407db9E0D00", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "tenderlyMain": { - "address": "0x39dE816FaEA0CBC12C2066bB379d7425c128A7Ee", - "deployer": "0x0c90eCAE8f9f8E5CafAfFcBBa46Eeb41A46Bb2a8" - } - }, - "PriceOracle": { - "buidlerevm": { - "address": "0x1750499D05Ed1674d822430FB960d5F6731fDf64", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0xe1B3b8F6b298b52bCd15357ED29e65e66a4045fF", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "MockAggregator": { - "buidlerevm": { - "address": "0xEC1C93A9f6a9e18E97784c76aC52053587FcDB89", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0xfA9dbd706c674801F50169f4B5862cCe045408E6", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "ChainlinkProxyPriceProvider": { - "buidlerevm": { - "address": "0x7B6C3e5486D9e6959441ab554A889099eed76290", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x1d80315fac6aBd3EfeEbE97dEc44461ba7556160", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "tenderlyMain": { - "address": "0x5D7a3a9317f0F232828Cca6F3752b7e2820075B0", - "deployer": "0xFaA2D857Ff599923415523f8b0B54dFdc5c6E7c3" - } - }, - "LendingRateOracle": { - "buidlerevm": { - "address": "0xD83D2773a7873ae2b5f8Fb92097e20a8C64F691E", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x2D8553F9ddA85A9B3259F6Bf26911364B85556F5", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "tenderlyMain": { - "address": "0xABF6Cf29dD10232E5168F085F2a9ebA690F9623b", - "deployer": "0x50DBD6EC6c6666c3aE018E5d0f62104a598F9571" - } - }, - "AaveProtocolDataProvider": { - "buidlerevm": { - "address": "0x93472C0e03215F9c33DA240Eb16703C8244eAa8c" - }, - "kovan": { - "address": "0x2457cE7EFe23B8887B08006004C3Fdb4E3252094", - "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" - }, - "hardhat": { - "address": "0x53369fd4680FfE3DfF39Fc6DDa9CfbfD43daeA2E", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "LendingPoolCollateralManager": { - "buidlerevm": { - "address": "0x3c5408De7435Dfa3eB2aF2Edf5E39385f68F69b2", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "kovan": { - "address": "0x15fF71A8F0B1E43AF2A0D3554c9F8E41601bCE6b", - "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" - }, - "hardhat": { - "address": "0xF0B4ACda6D679ea22AC5C4fD1973D0d58eA10ec1", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "MockFlashLoanReceiver": { - "buidlerevm": { - "address": "0x0459c841b02Aee8730730C737582c53B20a27288" - }, - "hardhat": { - "address": "0x2530ce07D254eA185E8e0bCC37a39e2FbA3bE548" - } - }, - "WalletBalanceProvider": { - "buidlerevm": { - "address": "0x77B0b5636fEA30eA79BB65AeCCdb599997A849A8", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "kovan": { - "address": "0x3aCd4b30bC70647620989B9f98C4E21867Bd753A", - "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" - }, - "hardhat": { - "address": "0xA17827A991EB72793fa437e580B084ceB25Ab0f9", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "MockAToken": { - "buidlerevm": { - "address": "0x0EBCa695959e5f138Af772FAa44ce1A9C7aEd921", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x33958cC3535Fc328369EAC2B2Bebd120D67C7fa1", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "MockStableDebtToken": { - "buidlerevm": { - "address": "0x417fc1038b2AF553D65F4fF2839efE9f93Ec1eac", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x2cBbbBE1B75Ad7848F0844215816F551f429c64f", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "MockVariableDebtToken": { - "buidlerevm": { - "address": "0x8BFFF31B1757da579Bb5B118489568526F7fb6D4", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0xbAc762e2000b6815268587b081Fd17aC25519aD5", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "WETHGateway": { - "buidlerevm": { - "address": "0x0Cf45557d25a4e4c0F1aC65EF6c48ae67c61a0E6", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "kovan": { - "address": "0x7d8B46401dC07ccA3f65F0FBBfE834D61C76C54f", - "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F" - }, - "hardhat": { - "address": "0x8565Fb7dfB5D36b2aA00086ffc920cfF20db4F2f", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "WETHMocked": { - "buidlerevm": { - "address": "0xf784709d2317D872237C4bC22f867d1BAe2913AB", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x1d80315fac6aBd3EfeEbE97dEc44461ba7556160", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "MintableDelegationERC20": { - "buidlerevm": { - "address": "0x7fAeC7791277Ff512c41CA903c177B2Ed952dDAc", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x33958cC3535Fc328369EAC2B2Bebd120D67C7fa1", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "AAVE": { - "buidlerevm": { - "address": "0x8858eeB3DfffA017D4BCE9801D340D36Cf895CCf", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x8858eeB3DfffA017D4BCE9801D340D36Cf895CCf", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "REN": { - "buidlerevm": { - "address": "0x2D8553F9ddA85A9B3259F6Bf26911364B85556F5", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x2D8553F9ddA85A9B3259F6Bf26911364B85556F5", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "YFI": { - "buidlerevm": { - "address": "0x5bcb88A0d20426e451332eE6C4324b0e663c50E0", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x5bcb88A0d20426e451332eE6C4324b0e663c50E0", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "UNI": { - "buidlerevm": { - "address": "0x3521eF8AaB0323004A6dD8b03CE890F4Ea3A13f5", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x3521eF8AaB0323004A6dD8b03CE890F4Ea3A13f5", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "AToken": { - "buidlerevm": { - "address": "0x33958cC3535Fc328369EAC2B2Bebd120D67C7fa1", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x2cBbbBE1B75Ad7848F0844215816F551f429c64f", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "SelfdestructTransferMock": { - "buidlerevm": { - "address": "0x920d847fE49E54C19047ba8bc236C45A8068Bca7", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x2cBbbBE1B75Ad7848F0844215816F551f429c64f", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "ENJ": { - "buidlerevm": { - "address": "0x53369fd4680FfE3DfF39Fc6DDa9CfbfD43daeA2E", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - }, - "hardhat": { - "address": "0x53369fd4680FfE3DfF39Fc6DDa9CfbfD43daeA2E", - "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6" - } - }, - "LendingPoolImpl": { - "kovan": { - "address": "0x301F889146aaFEfD88d5D442eEcd12AeAC3D1Fc3" - }, - "hardhat": { - "address": "0x500D1d6A4c7D8Ae28240b47c8FCde034D827fD5e" - }, - "tenderlyMain": { - "address": "0xd72EC88B9c173dF3a61eB7D9D33ECA59Ad57D7C2" - } - }, - "LendingPoolConfiguratorImpl": { - "kovan": { - "address": "0x25d9A07E6a749488f36e3c89A38C8235adb33AA2" - }, - "hardhat": { - "address": "0xD6C850aeBFDC46D7F4c207e445cC0d6B0919BDBe" - }, - "tenderlyMain": { - "address": "0x89898cF20C9BBFfBAC292aC89E078ae602268d0A" - } - }, - "LendingPoolCollateralManagerImpl": { - "kovan": { - "address": "0x15fF71A8F0B1E43AF2A0D3554c9F8E41601bCE6b" - }, - "hardhat": { - "address": "0xF0B4ACda6D679ea22AC5C4fD1973D0d58eA10ec1" - } - }, - "stableDebtAAVE": { - "kovan": { - "address": "0x9d6cD3e0cb7A916dD788BE8937Db2E28E653083F" - }, - "hardhat": { - "address": "0x9230C6B871c19A7A285E46bC59dbA99863ED267E" - } - }, - "variableDebtAAVE": { - "kovan": { - "address": "0x7069766BAEAE5042eF9Efa25D423853Fa244e03D" - }, - "hardhat": { - "address": "0x06134447473A1ad19dd05554780816C542486d15" - } - }, - "stableDebtBAT": { - "kovan": { - "address": "0x7bA20003bc65A551aAc9670b96520F544556025D" - }, - "hardhat": { - "address": "0xd5b242D4c92Cf99ad1b52097C02D6400a5042c07" - } - }, - "variableDebtBAT": { - "kovan": { - "address": "0x25bfFB7E493bAAd885Ad7EE676E5e32c6F85D6FE" - }, - "hardhat": { - "address": "0x38556B87c95aA00D1ac92f2Af5F24A62779c51f1" - } - }, - "stableDebtBUSD": { - "kovan": { - "address": "0xA5bb990BA8c1367dF8b34a7628Db1786790782E8" - }, - "hardhat": { - "address": "0x676FADAC7780FCF65e788209F4E91f2057508d24" - } - }, - "variableDebtBUSD": { - "kovan": { - "address": "0xa75EF57f21484029bA17cb31A59176500dA95Bf0" - }, - "hardhat": { - "address": "0x2481b47272CacFB4213493d899E1f7296C3a6751" - } - }, - "stableDebtDAI": { - "kovan": { - "address": "0x83B7666885dAC6D68f9f32569EC0F4585979d74B" - }, - "hardhat": { - "address": "0xbC0e31570E564642d279f3123923a58F64294CF0" - } - }, - "variableDebtDAI": { - "kovan": { - "address": "0x897d762EF8fe013a824503d5Eda2a329Ad98f7E0" - }, - "hardhat": { - "address": "0x73a571b6E3AFAc5574A328AB6B0e8150c520e631" - } - }, - "aAAVE": { - "kovan": { - "address": "0x74A4A2a5437bF9152A1abfa08f0E83D0737C588C" - }, - "hardhat": { - "address": "0xCd17f01812099F7B76098f9bdCb93eC1DfDF24de" - } - }, - "strategyAAVE": { - "kovan": { - "address": "0xeD83FCcA01A74690c9d0Bc75283F612655347f67" - }, - "hardhat": { - "address": "0xDA01D05d5760bB3Af2C576CD57185557a267c2C8" - } - }, - "aBAT": { - "kovan": { - "address": "0x35bCbf4f3d63dC55b79178A423b0e601b4ef5FD2" - }, - "hardhat": { - "address": "0x99B8b2AE7Be6D3ed40B3e608c2dCd8a514736e3e" - } - }, - "strategyBAT": { - "kovan": { - "address": "0x277b52f138647392496355d87bF03a1aB6c83024" - }, - "hardhat": { - "address": "0x2923ce81A7Ce7903578eE6385D055123179a88f1" - } - }, - "aBUSD": { - "kovan": { - "address": "0x9E709c81c73eEcE90766B277babCfa66F1965565" - }, - "hardhat": { - "address": "0x6ac418d1b0B86c3AcBB397dd8F1c76578F3A9AD9" - } - }, - "strategyBUSD": { - "kovan": { - "address": "0xe302038c6E3f7541ACe4DcCF08D666F845450166" - }, - "hardhat": { - "address": "0xd8aa714b8acbD1287790C965f4b308a113EAD2F4" - } - }, - "aDAI": { - "kovan": { - "address": "0x9edb979F40cA59f759e9Eca68a6dFeA56B8d299b" - }, - "hardhat": { - "address": "0x511586d245EC3b29E9f36057E4609096d8e5AA41" - } - }, - "strategyDAI": { - "kovan": { - "address": "0xa43a28500d79C25bf83ACAF5E90a46b689b3EB16" - }, - "hardhat": { - "address": "0x4F772132fF40d9d48557791F336012FD5bfaEA4e" - } - }, - "stableDebtENJ": { - "kovan": { - "address": "0x9fBE02f08e79f8aA129a46a23E8A18e027B6e2EF" - }, - "hardhat": { - "address": "0xa2f3D52731D5E6F090af969D1dD5Cb90A3834831" - } - }, - "variableDebtENJ": { - "kovan": { - "address": "0xFA80B658A4bacD6282267428206Afaa3Cf888cd6" - }, - "hardhat": { - "address": "0x9085F5C3B91aD148f9638caC09F3B53Dff160637" - } - }, - "stableDebtKNC": { - "kovan": { - "address": "0xAF9EfC82E89a872F8AEf28c81258dfEa712AfFfE" - }, - "hardhat": { - "address": "0x287B0459469355C0c443C79e45cdB1573C5Abc84" - } - }, - "variableDebtKNC": { - "kovan": { - "address": "0xa371C49E252d3c11e050A47ff88d8D15cDf114A1" - }, - "hardhat": { - "address": "0x5deC984578799Af449aa0A9739449148195b14Ea" - } - }, - "stableDebtLINK": { - "kovan": { - "address": "0xdF0812bdf765E3b77746e961C501313083b1aFa5" - }, - "hardhat": { - "address": "0xe3d9664D2a80d269940EcE9a744DC263c6a6959c" - } - }, - "variableDebtLINK": { - "kovan": { - "address": "0x3f7389a4e2A351Fd9107d645108a6535Ed1232E4" - }, - "hardhat": { - "address": "0x3b957FdA3e67D732031d41F0B4B832dcCD7005f6" - } - }, - "stableDebtMANA": { - "kovan": { - "address": "0x217013C9bFE969979eB8efe94f3dfAeE35492C50" - }, - "hardhat": { - "address": "0x273da316D8209A827cBADC4Fc914bB96dCd88397" - } - }, - "variableDebtMANA": { - "kovan": { - "address": "0x5945e37b1ef058c5847b048786ac3fCdd40e56DE" - }, - "hardhat": { - "address": "0xF6c722853fCE2c70d41ecc10b5e0aafc0BE782A4" - } - }, - "aENJ": { - "kovan": { - "address": "0xc8fad67D303D8fCF6abe3206E4BF94D797Ef71f3" - }, - "hardhat": { - "address": "0xeC70C41A36347b85A86d837D309c8CaB1540F1A8" - } - }, - "strategyENJ": { - "kovan": { - "address": "0x537d2F788d0B598D5a921532D4086EDE3B2cEd64" - }, - "hardhat": { - "address": "0x3908cB82076E45f97b80a210DcE9eea96eFdc3b6" - } - }, - "aKNC": { - "kovan": { - "address": "0x49c9eC52427E9ccd13eF0702d5b2e028Ce99A217" - }, - "hardhat": { - "address": "0xdF089cd4C344c859b022861a68cD2EfEEB21Eabe" - } - }, - "strategyKNC": { - "kovan": { - "address": "0x1308fCd27933fF5639C9f51c86A17A3645c5dED9" - }, - "hardhat": { - "address": "0xF6062f926ed0e708338e095d200668a31DeeCa8b" - } - }, - "aLINK": { - "kovan": { - "address": "0x917e32953DA5eA01fb7FAEB90A19aeb51Cd42c23" - }, - "hardhat": { - "address": "0x96d73a1fD875b959Dc05Ea823fBE323107DaCF0B" - } - }, - "strategyLINK": { - "kovan": { - "address": "0xA891181D5dca4b6a8F5d2607E456CFa9EB9D1D20" - }, - "hardhat": { - "address": "0x660a606C9828a74335A4333eD9d59CAf5800f486" - } - }, - "aMANA": { - "kovan": { - "address": "0x2419b9D71F42D8C72176bA5C2c7bF152F0692814" - }, - "hardhat": { - "address": "0xC840F4f12c5137fc08b56EBa82b23DCdF8B5ACd6" - } - }, - "strategyMANA": { - "kovan": { - "address": "0x886e231f0ca34deF2dBf091AA5d6be4cFa06B557" - }, - "hardhat": { - "address": "0xc009500eC821635E6110d494B4f45404E5586c59" - } - }, - "stableDebtMKR": { - "kovan": { - "address": "0x2a8617F6802a1CCA29f2974837eaBD6630E80994" - }, - "hardhat": { - "address": "0x9FE70690a18bBe8265a03f416fADbFB8A1983fBc" - } - }, - "variableDebtMKR": { - "kovan": { - "address": "0xF75cC2a6C928198681D35c8117df83699189169D" - }, - "hardhat": { - "address": "0xDb03E85f8bc2297f29839417D9A1E1362E2dD516" - } - }, - "stableDebtREN": { - "kovan": { - "address": "0x598F59917d13269D8D81ab21Ea37F4B8e099e875" - }, - "hardhat": { - "address": "0xc9C2968e383122Bba7FC6E87a840CDB5dC257314" - } - }, - "variableDebtREN": { - "kovan": { - "address": "0x3140a105ede15FEc9391fef89e6d14b62B86C39B" - }, - "hardhat": { - "address": "0x502b8Cd8A84178af0bD80b07fC23ADe345E0a89f" - } - }, - "stableDebtREP": { - "kovan": { - "address": "0x33160b3737a1869264601C4B8D97e98725920c16" - }, - "hardhat": { - "address": "0x9BDdf2F48828A9AE0EB488269470a5300dd55cAc" - } - }, - "variableDebtREP": { - "kovan": { - "address": "0x995487BB75AEc2375fdB216BfcB37b53f6Ab2abb" - }, - "hardhat": { - "address": "0xb434965dA49C5eF410445b4dF574c80FF372502A" - } - }, - "stableDebtSNX": { - "kovan": { - "address": "0x77E8Addb01e36c5d754E89d0E5Da951e202d9CE3" - }, - "hardhat": { - "address": "0x840f25B7fCC0f976D2E046DE8ab322B1accA6662" - } - }, - "variableDebtSNX": { - "kovan": { - "address": "0x969e82694032cc0C346f855e52c5503B4e42F850" - }, - "hardhat": { - "address": "0xAA92017604D953d4Bd837d980e953c541746D904" - } - }, - "aMKR": { - "kovan": { - "address": "0xc3b70569D534C3E17B06C4a25980Ab349b534263" - }, - "hardhat": { - "address": "0x154f0e6086D1F3A777ED4B448045Cd3455Ddf40C" - } - }, - "strategyMKR": { - "kovan": { - "address": "0x81DB8B1f3612FdAAA7A211d073dB4C8dcc5a98e7" - }, - "hardhat": { - "address": "0xE1C312F55E129b4aAf96725C193e925849707BA4" - } - }, - "aREN": { - "kovan": { - "address": "0x2Bed39d993276E548987e4271475696897254a17" - }, - "hardhat": { - "address": "0x403cf75AC7F7e0F9caC1f715e2Ac36f6007245eE" - } - }, - "strategyREN": { - "kovan": { - "address": "0x49a4CDd903A6644cF696F7E1d4404BBBC973470E" - }, - "hardhat": { - "address": "0xf996E1e0E0B527a2A179461627d3fCF66A6b0151" - } - }, - "aREP": { - "kovan": { - "address": "0x04adf3717C2066cd338804909467e67C968B7Dd7" - }, - "hardhat": { - "address": "0x2A508C4DA298bF87f35027D6616b5478cC5c513A" - } - }, - "strategyREP": { - "kovan": { - "address": "0x5D271675dA68679DB9a8A8E3501cB7c21fd84cE3" - }, - "hardhat": { - "address": "0x99AD43CDc5C9aD99670d110d22700062a931b774" - } - }, - "aSNX": { - "kovan": { - "address": "0x023eba3646A08BA06CfCCB5c8F684048d1B654bb" - }, - "hardhat": { - "address": "0xC75e2508dE6d8000FA5C97A635F4f48C7632d6AE" - } - }, - "strategySNX": { - "kovan": { - "address": "0x866a1F54F13a00B9747C7832881a15234284D38C" - }, - "hardhat": { - "address": "0xDea1DFeb04663B7B752573E046000Ee92D1C88b0" - } - }, - "stableDebtSUSD": { - "kovan": { - "address": "0x5Eac7b30C376081f293d5671f1B4a789a36Ba8C8" - }, - "hardhat": { - "address": "0xB500f1089B97ca4E6e0E2F496164b2Bf40702D18" - } - }, - "variableDebtSUSD": { - "kovan": { - "address": "0x34939cC14762b4993E0679231ECE9aC51836c071" - }, - "hardhat": { - "address": "0xB8B80D64ecfA2e79BF0212a8afFa86006244c74E" - } - }, - "stableDebtTUSD": { - "kovan": { - "address": "0xc3031590B298aB7591a59e467c944215236f7878" - }, - "hardhat": { - "address": "0xA857e276492E727d43C8332F90190035fe2cdF51" - } - }, - "variableDebtTUSD": { - "kovan": { - "address": "0x1E913eCe8FFcC67d86671ba3Ae7676F385722941" - }, - "hardhat": { - "address": "0xE9519f1b2B639e151A3C353a169e7B1c8106A789" - } - }, - "stableDebtUNI": { - "kovan": { - "address": "0x6C9ee95b637c44322C6fA244D0106a52Dc2cB6F9" - }, - "hardhat": { - "address": "0x16BFD34a59eB0Be88Bb6Af55CADc0ad32c724790" - } - }, - "variableDebtUNI": { - "kovan": { - "address": "0xFEbef6B52C72A49CD8150284aD7277a7454373e0" - }, - "hardhat": { - "address": "0x280430db0fe64B7F8c6a946655eB6752A9d714C2" - } - }, - "stableDebtUSDC": { - "kovan": { - "address": "0xaD56D9738Aa70D518298c37Cd7C5Fc81ba987023" - }, - "hardhat": { - "address": "0x0178F3259271CFC416750AF6c4F4f51a27D96bA9" - } - }, - "variableDebtUSDC": { - "kovan": { - "address": "0x38CA9234844ADBceB823462CC8666569883b9701" - }, - "hardhat": { - "address": "0x2d0931CbCF4D2bC7f91b7535b2eC3070d8552CAb" - } - }, - "aSUSD": { - "kovan": { - "address": "0x6EFA6906A391B4F62914f6Ae4650aC2154f89bE7" - }, - "hardhat": { - "address": "0x947A23f8E7f7382249398f683649c866bad87AcF" - } - }, - "strategySUSD": { - "kovan": { - "address": "0x144E8b18609B2dF30AD96789Db5c6feb9259626c" - }, - "hardhat": { - "address": "0xAce0e9788475E7a4266B157061b7c4c0F7aF57CC" - } - }, - "aTUSD": { - "kovan": { - "address": "0x88ab5455013e2c00De2ABA5F48DEff10CFEDb490" - }, - "hardhat": { - "address": "0x60694Ca48F51f2D34f4De5c3Cc688d00fbB71764" - } - }, - "strategyTUSD": { - "kovan": { - "address": "0xF862594F5C4061ac21547A9868716e12f0B59AC2" - }, - "hardhat": { - "address": "0x69E9492f702fBc2016a79106C50f1FbF67AcB77e" - } - }, - "aUNI": { - "kovan": { - "address": "0x5aEE290afe3778d218DcD59C61A18Bacfa22bBae" - }, - "hardhat": { - "address": "0x0E716694fA09843eb70735c1AdA5E51b20BFcC79" - } - }, - "strategyUNI": { - "kovan": { - "address": "0x21Fe360f849358e991Ea60Bd5C7569598788f46A" - }, - "hardhat": { - "address": "0xb5363644Fe3cb5109Ac8e3f3F9632238BfF4B4c8" - } - }, - "aUSDC": { - "kovan": { - "address": "0x4E2e684aA8fB7E15c487F2d922508dBCfdAfC921" - }, - "hardhat": { - "address": "0xfA6D6657161749272e3f158cdb3Af4E03015A727" - } - }, - "strategyUSDC": { - "kovan": { - "address": "0x8480DFf825B99622d0598826F5EE3B5d79bA92c5" - }, - "hardhat": { - "address": "0x609BD7680Ce4c46A867c2A0f9229b75d5a872ace" - } - }, - "stableDebtUSDT": { - "kovan": { - "address": "0x953Ae6D846feB7112Be1DD0a2c996CD37c51f127" - }, - "hardhat": { - "address": "0x88413e3FcE7fE0c8186cC877A9Ee50FbFC5b3b4e" - } - }, - "variableDebtUSDT": { - "kovan": { - "address": "0x443005Fad27A870ED9BCF4B048FdD6b79a7d2B15" - }, - "hardhat": { - "address": "0x1b023f0D66ad7390ADA99D2C0334921E4f9eee69" - } - }, - "stableDebtWBTC": { - "kovan": { - "address": "0xa5E61884083c243345449eAD5c70158F016F4df0" - }, - "hardhat": { - "address": "0xBfD89FE99Af3CB7b20F3CbA7a30cd838d46252dF" - } - }, - "variableDebtWBTC": { - "kovan": { - "address": "0xFD5194F07E652865671b1a8310Ac54a853985547" - }, - "hardhat": { - "address": "0x480B773De09C464DFDaa1043726Bb84EA34C1987" - } - }, - "stableDebtWETH": { - "kovan": { - "address": "0xcb19776e2B69595b6a3Ce4F44acb63e506bd8C1b" - }, - "hardhat": { - "address": "0xC23CA88a9f2E4a2a2d4afe6D49736CD79d04bA08" - } - }, - "variableDebtWETH": { - "kovan": { - "address": "0x755d5C1a5d82f26a92dFb793d0Da14eEd8Ec7435" - }, - "hardhat": { - "address": "0x8afF291013736bEA113Bebfb764996bB8e6271Fc" - } - }, - "stableDebtYFI": { - "kovan": { - "address": "0xd72a6AdE1ba573DA8398ff05426B8450Daeaa3e7" - }, - "hardhat": { - "address": "0x48071298E6825f5F60912fb99689003164FCe076" - } - }, - "variableDebtYFI": { - "kovan": { - "address": "0xa0cE46eA00e4ccE66d93e8465DCEDE0f5470d2A4" - }, - "hardhat": { - "address": "0x926A933dd2682BeD5Bd286C49828f6b6Ab78dB55" - } - }, - "aUSDT": { - "kovan": { - "address": "0x5109D69A94c7754251567aD12E0096368f6abcE5" - }, - "hardhat": { - "address": "0x3bBffe72b3D6EDdC9fD1925609F627e925CdD838" - } - }, - "strategyUSDT": { - "kovan": { - "address": "0x35716131aA6957eEF88c476a6a7e5f3cb6e2B4be" - }, - "hardhat": { - "address": "0x1011a3a55701E4070b348B90F206e261098AA789" - } - }, - "aWBTC": { - "kovan": { - "address": "0xe53a364A541fC87eecab96365C4BC3b4BA7Ad55f" - }, - "hardhat": { - "address": "0x4bdd8891be6a517793E65CD4F7288CA1aCBa84A1" - } - }, - "strategyWBTC": { - "kovan": { - "address": "0xD1A6A373A52FddceD8Eb630A6c230f39a53C15Ca" - }, - "hardhat": { - "address": "0x4B6653DD25F515b32656158AC3960Bc4efbf9fe9" - } - }, - "aWETH": { - "kovan": { - "address": "0xcBb1352688efC3B5741B60545F0A79B62A629702" - }, - "hardhat": { - "address": "0x6a839181b299D1c527C93Bf09660268C519401eF" - } - }, - "strategyWETH": { - "kovan": { - "address": "0xE05AA3A5A5Db7085A5A69402b1f7C033e4BC73d7" - }, - "hardhat": { - "address": "0x72b28fA48A598FB2A09362ceB5983fac64EF4d9c" - } - }, - "aYFI": { - "kovan": { - "address": "0x0C26B8dD7c55c4d090FBCD96c135e12f542Aef83" - }, - "hardhat": { - "address": "0x2F8fB24A9B1809229F52d9b9943DCcD75a5Ac8CE" - } - }, - "strategyYFI": { - "kovan": { - "address": "0x4a26cc7002e3ca88D8d3f72b9b6e7C7C4bF8923c" - }, - "hardhat": { - "address": "0x893e62B2BD2d652DB343DF18e6413c23fefA198d" - } - }, - "stableDebtZRX": { - "kovan": { - "address": "0xBA1EFBca9B5b4C7718A4374ec29c1671D972118A" - }, - "hardhat": { - "address": "0xF7FA52f20131fA0e8648A2464892e98c60bD665c" - } - }, - "variableDebtZRX": { - "kovan": { - "address": "0xfdf0AF23449181c404C15d0aA80D1355DC3FA460" - }, - "hardhat": { - "address": "0x1F6A681C043EA0e1c179888570819B2B4A6DC309" - } - }, - "aZRX": { - "kovan": { - "address": "0x9952c8EbFf001915a504D3E2B54D3bFD205C104B" - }, - "hardhat": { - "address": "0x9B23e3f9114B54C90a5731c9edCea483e512B72B" - } - }, - "strategyZRX": { - "kovan": { - "address": "0x2944f4c8b54410b61D3b305651a93547D24d691f" - }, - "hardhat": { - "address": "0x095baE292EC3Fd8303187cAACEBDa8c92D685aEa" - } - } -} diff --git a/helpers/configuration.ts b/helpers/configuration.ts index bc9d317a..eb8ee372 100644 --- a/helpers/configuration.ts +++ b/helpers/configuration.ts @@ -109,7 +109,7 @@ export const getLendingRateOracles = (poolConfig: ICommonConfiguration) => { ReserveAssets, } = poolConfig; - const MAINNET_FORK = process.env.MAINNET_FORK; + const MAINNET_FORK = process.env.MAINNET_FORK === 'true'; const network = MAINNET_FORK ? 'main' : DRE.network.name; return filterMapBy(LendingRateOracleRatesCommon, (key) => Object.keys(ReserveAssets[network]).includes(key) diff --git a/helpers/contracts-helpers.ts b/helpers/contracts-helpers.ts index 6552fc31..04403524 100644 --- a/helpers/contracts-helpers.ts +++ b/helpers/contracts-helpers.ts @@ -22,7 +22,7 @@ export type MockTokenMap = {[symbol: string]: MintableERC20}; export const registerContractInJsonDb = async (contractId: string, contractInstance: Contract) => { const currentNetwork = DRE.network.name; - const MAINNET_FORK = process.env.MAINNET_FORK; + const MAINNET_FORK = process.env.MAINNET_FORK === 'true'; if (MAINNET_FORK || (currentNetwork !== 'hardhat' && !currentNetwork.includes('coverage'))) { console.log(`*** ${contractId} ***\n`); console.log(`Network: ${currentNetwork}`); @@ -134,7 +134,7 @@ export const getParamPerNetwork = ( {kovan, ropsten, main, buidlerevm, coverage, tenderlyMain}: iParamsPerNetwork, network: eEthereumNetwork ) => { - const MAINNET_FORK = process.env.MAINNET_FORK; + const MAINNET_FORK = process.env.MAINNET_FORK === 'true'; if (MAINNET_FORK) { return main; } diff --git a/package.json b/package.json index 8668f6a8..90598d9c 100644 --- a/package.json +++ b/package.json @@ -11,21 +11,17 @@ "hardhat:main": "hardhat --network main", "hardhat:docker": "hardhat --network hardhatevm_docker", "compile": "SKIP_LOAD=true hardhat compile", - "test": "SKIP_LOAD=true TS_NODE_TRANSPILE_ONLY=1 hardhat test", + "test": "TS_NODE_TRANSPILE_ONLY=1 hardhat test ./test/*.spec.ts", "test-scenarios": "npm run test -- test/__setup.spec.ts test/scenario.spec.ts", "aave:evm:dev:migration": "hardhat aave:dev", - "aave:evm:full:migration": "hardhat aave:full", - "aave:docker:dev:migration": "npm run hardhat:docker -- aave:dev", "aave:docker:full:migration": "npm run hardhat:docker -- aave:full", - "aave:kovan:dev:migration": "npm run hardhat:kovan -- aave:dev --verify", "aave:kovan:full:migration": "npm run hardhat:kovan -- aave:full --verify", "aave:kovan:full:initialize": "npm run hardhat:kovan -- full:initialize-lending-pool --verify --pool Aave", - "aave:ropsten:dev:migration": "npm run hardhat:ropsten -- aave:dev --verify", "aave:ropsten:full:migration": "npm run hardhat:ropsten -- aave:full --verify", - "aave:fork:main:tenderly": "npm run hardhat:tenderly-main -- aave:full:fork", - "aave:fork:main": "MAINNET_FORK=true hardhat aave:full:fork", - "aave:main:dev:migration": "npm run hardhat:main -- aave:dev --verify", - "aave:main:full:migration": "npm run hardhat:main -- aave:full --verify", + "aave:fork:main:tenderly": "npm run hardhat:tenderly-main -- aave:mainnet", + "aave:fork:main": "MAINNET_FORK=true hardhat aave:mainnet", + "test:main:check-list": "MAINNET_FORK=true TS_NODE_TRANSPILE_ONLY=1 hardhat test test/__setup.spec.ts test/mainnet/check-list.spec.ts", + "aave:main:full:migration": "npm run hardhat:main -- aave:mainnet --verify", "uniswap:evm:dev:migration": "hardhat uniswap:dev", "uniswap:evm:full:migration": "hardhat uniswap:full --verify", "uniswap:kovan:dev:migration": "npm run hardhat:kovan -- uniswap:dev --verify", diff --git a/tasks/full/1_address_provider.ts b/tasks/full/1_address_provider.ts index 01485056..2397ea46 100644 --- a/tasks/full/1_address_provider.ts +++ b/tasks/full/1_address_provider.ts @@ -20,10 +20,10 @@ task( ) .addFlag('verify', 'Verify contracts at Etherscan') .addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`) - .setAction(async ({verify, pool}, localBRE) => { - await localBRE.run('set-DRE'); - console.log('addresses', await getEthersSignersAddresses()); - const network = localBRE.network.name; + .setAction(async ({verify, pool}, DRE) => { + await DRE.run('set-DRE'); + + const network = DRE.network.name; const poolConfig = loadPoolConfig(pool); const {ProviderId} = poolConfig; @@ -31,7 +31,6 @@ task( // Deploy address provider and set genesis manager const addressesProvider = await deployLendingPoolAddressesProvider(verify); - console.log('prox', addressesProvider.address); await waitForTx(await addressesProvider.setPoolAdmin(await getGenesisPoolAdmin(poolConfig))); await waitForTx(await addressesProvider.setEmergencyAdmin(await getEmergencyAdmin(poolConfig))); diff --git a/tasks/full/2_lending_pool.ts b/tasks/full/2_lending_pool.ts index c0b4bc19..342d5365 100644 --- a/tasks/full/2_lending_pool.ts +++ b/tasks/full/2_lending_pool.ts @@ -23,16 +23,13 @@ task('full:deploy-lending-pool', 'Deploy lending pool for dev enviroment') try { await DRE.run('set-DRE'); - console.log('addresses', await getEthersSignersAddresses()); const addressesProvider = await getLendingPoolAddressesProvider(); // Deploy lending pool const lendingPoolImpl = await deployLendingPool(verify); - console.log('set lend poool', addressesProvider.address); // Set lending pool impl to address provider await waitForTx(await addressesProvider.setLendingPoolImpl(lendingPoolImpl.address)); - console.log('setted'); const address = await addressesProvider.getLendingPool(); const lendingPoolProxy = await getLendingPool(address); diff --git a/tasks/full/3_oracles.ts b/tasks/full/3_oracles.ts index fa569c66..16049d4b 100644 --- a/tasks/full/3_oracles.ts +++ b/tasks/full/3_oracles.ts @@ -27,7 +27,6 @@ task('full:deploy-oracles', 'Deploy oracles for dev enviroment') .addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`) .setAction(async ({verify, pool}, DRE) => { try { - console.log('addresses', await getEthersSignersAddresses()); await DRE.run('set-DRE'); const network = DRE.network.name; const poolConfig = loadPoolConfig(pool); @@ -64,12 +63,6 @@ task('full:deploy-oracles', 'Deploy oracles for dev enviroment') const {USD, ...tokensAddressesWithoutUsd} = tokensToWatch; if (!lendingRateOracleAddress) { - console.log( - lendingRateOracles, - tokensAddressesWithoutUsd, - lendingRateOracle.address, - aggregators - ); await setInitialMarketRatesInRatesOracleByHelper( lendingRateOracles, tokensAddressesWithoutUsd, diff --git a/tasks/migrations/aave.full.ts b/tasks/migrations/aave.full.ts index 203c01f8..731984a3 100644 --- a/tasks/migrations/aave.full.ts +++ b/tasks/migrations/aave.full.ts @@ -25,7 +25,10 @@ task('aave:full', 'Deploy development enviroment') console.log('2. Deploy lending pool'); await localBRE.run('full:deploy-lending-pool'); - console.log('3. Initialize lending pool'); + console.log('3. Deploy data provider'); + await localBRE.run('full:data-provider'); + + console.log('4. Initialize lending pool'); await localBRE.run('full:initialize-lending-pool', {pool: POOL_NAME}); if (verify) { diff --git a/tasks/migrations/aave.mainnet.ts b/tasks/migrations/aave.mainnet.ts index d5ff76ac..c8ae5430 100644 --- a/tasks/migrations/aave.mainnet.ts +++ b/tasks/migrations/aave.mainnet.ts @@ -5,7 +5,7 @@ import {ConfigNames} from '../../helpers/configuration'; import {EthereumNetworkNames} from '../../helpers/types'; import {printContracts} from '../../helpers/misc-utils'; -task('aave:full:fork', 'Deploy development enviroment') +task('aave:mainnet', 'Deploy development enviroment') .addFlag('verify', 'Verify contracts at Etherscan') .setAction(async ({verify}, DRE) => { const POOL_NAME = ConfigNames.Aave; @@ -17,7 +17,6 @@ task('aave:full:fork', 'Deploy development enviroment') checkVerification(); } - // Set the ethers provider to the one we initialized so it targets the correct backend if (network.includes('tenderly')) { console.log('- Setting up Tenderly provider'); await DRE.tenderlyRPC.initializeFork(); @@ -36,7 +35,10 @@ task('aave:full:fork', 'Deploy development enviroment') console.log('3. Deploy oracles'); await DRE.run('full:deploy-oracles', {pool: POOL_NAME}); - console.log('4. Initialize lending pool'); + console.log('4. Deploy Data Provider'); + await DRE.run('full:data-provider', {pool: POOL_NAME}); + + console.log('5. Initialize lending pool'); await DRE.run('full:initialize-lending-pool', {pool: POOL_NAME}); if (verify) { diff --git a/test/__setup.spec.ts b/test/__setup.spec.ts index 559a8d08..cbce40a9 100644 --- a/test/__setup.spec.ts +++ b/test/__setup.spec.ts @@ -273,8 +273,15 @@ const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => { before(async () => { await rawBRE.run('set-DRE'); const [deployer, secondaryWallet] = await getEthersSigners(); - console.log('-> Deploying test environment...'); - await buildTestEnv(deployer, secondaryWallet); + const MAINNET_FORK = process.env.MAINNET_FORK === 'true'; + + if (MAINNET_FORK) { + await rawBRE.run('aave:mainnet'); + } else { + console.log('-> Deploying test environment...'); + await buildTestEnv(deployer, secondaryWallet); + } + await initializeMakeSuite(); console.log('\n***************'); console.log('Setup and snapshot finished'); diff --git a/test/helpers/make-suite.ts b/test/helpers/make-suite.ts index cd927c5b..ec4f5533 100644 --- a/test/helpers/make-suite.ts +++ b/test/helpers/make-suite.ts @@ -106,14 +106,17 @@ export async function initializeMakeSuite() { testEnv.helpersContract = await getAaveProtocolDataProvider(); + console.log('het cpmtra'); const allTokens = await testEnv.helpersContract.getAllATokens(); - + console.log('tokann'); const aDaiAddress = allTokens.find((aToken) => aToken.symbol === 'aDAI')?.tokenAddress; const aWEthAddress = allTokens.find((aToken) => aToken.symbol === 'aWETH')?.tokenAddress; + console.log('priah'); const reservesTokens = await testEnv.helpersContract.getAllReservesTokens(); + console.log('all tokan'); const daiAddress = reservesTokens.find((token) => token.symbol === 'DAI')?.tokenAddress; const usdcAddress = reservesTokens.find((token) => token.symbol === 'USDC')?.tokenAddress; const aaveAddress = reservesTokens.find((token) => token.symbol === 'AAVE')?.tokenAddress; @@ -136,6 +139,7 @@ export async function initializeMakeSuite() { testEnv.aave = await getMintableErc20(aaveAddress); testEnv.weth = await getWETHMocked(wethAddress); testEnv.wethGateway = await getWETHGateway(); + console.log('laa'); } export function makeSuite(name: string, tests: (testEnv: TestEnv) => void) { diff --git a/test/mainnet/check-list.spec.ts b/test/mainnet/check-list.spec.ts new file mode 100644 index 00000000..08416eda --- /dev/null +++ b/test/mainnet/check-list.spec.ts @@ -0,0 +1,362 @@ +import {MAX_UINT_AMOUNT} from '../../helpers/constants'; +import {convertToCurrencyDecimals} from '../../helpers/contracts-helpers'; +import {makeSuite, TestEnv} from '../helpers/make-suite'; +import {parseEther} from 'ethers/lib/utils'; +import {DRE, waitForTx} from '../../helpers/misc-utils'; +import {BigNumber} from 'ethers'; +import {getStableDebtToken, getVariableDebtToken} from '../../helpers/contracts-getters'; +import {deploySelfdestructTransferMock} from '../../helpers/contracts-deployments'; +import {IUniswapV2Router02Factory} from '../../types/IUniswapV2Router02Factory'; + +const {expect} = require('chai'); + +const UNISWAP_ROUTER = '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D'; + +makeSuite('Mainnet Check list', (testEnv: TestEnv) => { + const zero = BigNumber.from('0'); + const depositSize = parseEther('5'); + + it('Deposit WETH', async () => { + const {users, wethGateway, aWETH, pool} = testEnv; + + const user = users[1]; + + // Deposit with native ETH + await wethGateway.connect(user.signer).depositETH(user.address, '0', {value: depositSize}); + + const aTokensBalance = await aWETH.balanceOf(user.address); + + expect(aTokensBalance).to.be.gt(zero); + expect(aTokensBalance).to.be.gte(depositSize); + }); + + it('Withdraw WETH - Partial', async () => { + const {users, wethGateway, aWETH, pool} = testEnv; + + const user = users[1]; + const priorEthersBalance = await user.signer.getBalance(); + const aTokensBalance = await aWETH.balanceOf(user.address); + + expect(aTokensBalance).to.be.gt(zero, 'User should have aTokens.'); + + // Partially withdraw native ETH + const partialWithdraw = await convertToCurrencyDecimals(aWETH.address, '2'); + + // Approve the aTokens to Gateway so Gateway can withdraw and convert to Ether + const approveTx = await aWETH + .connect(user.signer) + .approve(wethGateway.address, MAX_UINT_AMOUNT); + const {gasUsed: approveGas} = await waitForTx(approveTx); + + // Partial Withdraw and send native Ether to user + const {gasUsed: withdrawGas} = await waitForTx( + await wethGateway.connect(user.signer).withdrawETH(partialWithdraw, user.address) + ); + + const afterPartialEtherBalance = await user.signer.getBalance(); + const afterPartialATokensBalance = await aWETH.balanceOf(user.address); + const gasCosts = approveGas.add(withdrawGas).mul(approveTx.gasPrice); + + expect(afterPartialEtherBalance).to.be.equal( + priorEthersBalance.add(partialWithdraw).sub(gasCosts), + 'User ETHER balance should contain the partial withdraw' + ); + expect(afterPartialATokensBalance).to.be.equal( + aTokensBalance.sub(partialWithdraw), + 'User aWETH balance should be substracted' + ); + }); + + it('Withdraw WETH - Full', async () => { + const {users, aWETH, wethGateway, pool} = testEnv; + + const user = users[1]; + const priorEthersBalance = await user.signer.getBalance(); + const aTokensBalance = await aWETH.balanceOf(user.address); + + expect(aTokensBalance).to.be.gt(zero, 'User should have aTokens.'); + + // Approve the aTokens to Gateway so Gateway can withdraw and convert to Ether + const approveTx = await aWETH + .connect(user.signer) + .approve(wethGateway.address, MAX_UINT_AMOUNT); + const {gasUsed: approveGas} = await waitForTx(approveTx); + + // Full withdraw + const {gasUsed: withdrawGas} = await waitForTx( + await wethGateway.connect(user.signer).withdrawETH(MAX_UINT_AMOUNT, user.address) + ); + + const afterFullEtherBalance = await user.signer.getBalance(); + const afterFullATokensBalance = await aWETH.balanceOf(user.address); + const gasCosts = approveGas.add(withdrawGas).mul(approveTx.gasPrice); + + expect(afterFullEtherBalance).to.be.eq( + priorEthersBalance.add(aTokensBalance).sub(gasCosts), + 'User ETHER balance should contain the full withdraw' + ); + expect(afterFullATokensBalance).to.be.eq(0, 'User aWETH balance should be zero'); + }); + + it('Borrow stable WETH and Full Repay with ETH', async () => { + const {users, wethGateway, aWETH, weth, pool, helpersContract} = testEnv; + const borrowSize = parseEther('1'); + const repaySize = borrowSize.add(borrowSize.mul(5).div(100)); + const user = users[1]; + + const {stableDebtTokenAddress} = await helpersContract.getReserveTokensAddresses(weth.address); + + const stableDebtToken = await getStableDebtToken(stableDebtTokenAddress); + + // Deposit with native ETH + await wethGateway.connect(user.signer).depositETH(user.address, '0', {value: depositSize}); + + const aTokensBalance = await aWETH.balanceOf(user.address); + + expect(aTokensBalance).to.be.gt(zero); + expect(aTokensBalance).to.be.gte(depositSize); + + // Borrow WETH with WETH as collateral + await waitForTx( + await pool.connect(user.signer).borrow(weth.address, borrowSize, '1', '0', user.address) + ); + + const debtBalance = await stableDebtToken.balanceOf(user.address); + + expect(debtBalance).to.be.gt(zero); + + // Full Repay WETH with native ETH + await waitForTx( + await wethGateway + .connect(user.signer) + .repayETH(MAX_UINT_AMOUNT, '1', user.address, {value: repaySize}) + ); + + const debtBalanceAfterRepay = await stableDebtToken.balanceOf(user.address); + expect(debtBalanceAfterRepay).to.be.eq(zero); + }); + + it('Borrow variable WETH and Full Repay with ETH', async () => { + const {users, wethGateway, aWETH, weth, pool, helpersContract} = testEnv; + const borrowSize = parseEther('1'); + const repaySize = borrowSize.add(borrowSize.mul(5).div(100)); + const user = users[1]; + + const {variableDebtTokenAddress} = await helpersContract.getReserveTokensAddresses( + weth.address + ); + + const varDebtToken = await getVariableDebtToken(variableDebtTokenAddress); + + // Deposit with native ETH + await wethGateway.connect(user.signer).depositETH(user.address, '0', {value: depositSize}); + + const aTokensBalance = await aWETH.balanceOf(user.address); + + expect(aTokensBalance).to.be.gt(zero); + expect(aTokensBalance).to.be.gte(depositSize); + + // Borrow WETH with WETH as collateral + await waitForTx( + await pool.connect(user.signer).borrow(weth.address, borrowSize, '2', '0', user.address) + ); + + const debtBalance = await varDebtToken.balanceOf(user.address); + + expect(debtBalance).to.be.gt(zero); + + // Partial Repay WETH loan with native ETH + const partialPayment = repaySize.div(2); + await waitForTx( + await wethGateway + .connect(user.signer) + .repayETH(partialPayment, '2', user.address, {value: partialPayment}) + ); + + const debtBalanceAfterPartialRepay = await varDebtToken.balanceOf(user.address); + expect(debtBalanceAfterPartialRepay).to.be.lt(debtBalance); + + // Full Repay WETH loan with native ETH + await waitForTx( + await wethGateway + .connect(user.signer) + .repayETH(MAX_UINT_AMOUNT, '2', user.address, {value: repaySize}) + ); + const debtBalanceAfterFullRepay = await varDebtToken.balanceOf(user.address); + expect(debtBalanceAfterFullRepay).to.be.eq(zero); + }); + + it('Borrow ETH via delegateApprove ETH and repays back', async () => { + const {users, wethGateway, aWETH, weth, helpersContract} = testEnv; + const borrowSize = parseEther('1'); + const user = users[2]; + const {variableDebtTokenAddress} = await helpersContract.getReserveTokensAddresses( + weth.address + ); + const varDebtToken = await getVariableDebtToken(variableDebtTokenAddress); + + const priorDebtBalance = await varDebtToken.balanceOf(user.address); + expect(priorDebtBalance).to.be.eq(zero); + + // Deposit WETH with native ETH + await wethGateway.connect(user.signer).depositETH(user.address, '0', {value: depositSize}); + + const aTokensBalance = await aWETH.balanceOf(user.address); + + expect(aTokensBalance).to.be.gt(zero); + expect(aTokensBalance).to.be.gte(depositSize); + + // Delegates borrowing power of WETH to WETHGateway + await waitForTx( + await varDebtToken.connect(user.signer).approveDelegation(wethGateway.address, borrowSize) + ); + + // Borrows ETH with WETH as collateral + await waitForTx(await wethGateway.connect(user.signer).borrowETH(borrowSize, '2', '0')); + + const debtBalance = await varDebtToken.balanceOf(user.address); + + expect(debtBalance).to.be.gt(zero); + + // Full Repay WETH loan with native ETH + await waitForTx( + await wethGateway + .connect(user.signer) + .repayETH(MAX_UINT_AMOUNT, '2', user.address, {value: borrowSize.mul(2)}) + ); + const debtBalanceAfterFullRepay = await varDebtToken.balanceOf(user.address); + expect(debtBalanceAfterFullRepay).to.be.eq(zero); + }); + + it('Should revert if receiver function receives Ether if not WETH', async () => { + const {users, wethGateway} = testEnv; + const user = users[0]; + const amount = parseEther('1'); + + // Call receiver function (empty data + value) + await expect( + user.signer.sendTransaction({ + to: wethGateway.address, + value: amount, + gasLimit: DRE.network.config.gas, + }) + ).to.be.revertedWith('Receive not allowed'); + }); + + it('Should revert if fallback functions is called with Ether', async () => { + const {users, wethGateway} = testEnv; + const user = users[0]; + const amount = parseEther('1'); + const fakeABI = ['function wantToCallFallback()']; + const abiCoder = new DRE.ethers.utils.Interface(fakeABI); + const fakeMethodEncoded = abiCoder.encodeFunctionData('wantToCallFallback', []); + + // Call fallback function with value + await expect( + user.signer.sendTransaction({ + to: wethGateway.address, + data: fakeMethodEncoded, + value: amount, + gasLimit: DRE.network.config.gas, + }) + ).to.be.revertedWith('Fallback not allowed'); + }); + + it('Should revert if fallback functions is called', async () => { + const {users, wethGateway} = testEnv; + const user = users[0]; + + const fakeABI = ['function wantToCallFallback()']; + const abiCoder = new DRE.ethers.utils.Interface(fakeABI); + const fakeMethodEncoded = abiCoder.encodeFunctionData('wantToCallFallback', []); + + // Call fallback function without value + await expect( + user.signer.sendTransaction({ + to: wethGateway.address, + data: fakeMethodEncoded, + gasLimit: DRE.network.config.gas, + }) + ).to.be.revertedWith('Fallback not allowed'); + }); + + it('Getters should retrieve correct state', async () => { + const {aWETH, weth, pool, wethGateway} = testEnv; + + const WETHAddress = await wethGateway.getWETHAddress(); + const aWETHAddress = await wethGateway.getAWETHAddress(); + const poolAddress = await wethGateway.getLendingPoolAddress(); + + expect(WETHAddress).to.be.equal(weth.address); + expect(aWETHAddress).to.be.equal(aWETH.address); + expect(poolAddress).to.be.equal(pool.address); + }); + + it('Owner can do emergency token recovery', async () => { + const {users, weth, dai, wethGateway, deployer} = testEnv; + const user = users[0]; + const amount = parseEther('1'); + + const uniswapRouter = IUniswapV2Router02Factory.connect(UNISWAP_ROUTER, user.signer); + await uniswapRouter.swapETHForExactTokens( + amount, // 1 DAI + [weth.address, dai.address], // Uniswap paths WETH - DAI + user.address, + (await DRE.ethers.provider.getBlock('latest')).timestamp + 300, + { + value: amount, // 1 Ether, we get refund of the unneeded Ether to buy 1 DAI + } + ); + const daiBalanceAfterMint = await dai.balanceOf(user.address); + + await dai.connect(user.signer).transfer(wethGateway.address, amount); + const daiBalanceAfterBadTransfer = await dai.balanceOf(user.address); + expect(daiBalanceAfterBadTransfer).to.be.eq( + daiBalanceAfterMint.sub(amount), + 'User should have lost the funds here.' + ); + + await wethGateway + .connect(deployer.signer) + .emergencyTokenTransfer(dai.address, user.address, amount); + const daiBalanceAfterRecovery = await dai.balanceOf(user.address); + + expect(daiBalanceAfterRecovery).to.be.eq( + daiBalanceAfterMint, + 'User should recover the funds due emergency token transfer' + ); + }); + + it('Owner can do emergency native ETH recovery', async () => { + const {users, wethGateway, deployer} = testEnv; + const user = users[0]; + const amount = parseEther('1'); + const userBalancePriorCall = await user.signer.getBalance(); + + // Deploy contract with payable selfdestruct contract + const selfdestructContract = await deploySelfdestructTransferMock(); + + // Selfdestruct the mock, pointing to WETHGateway address + const callTx = await selfdestructContract + .connect(user.signer) + .destroyAndTransfer(wethGateway.address, {value: amount}); + const {gasUsed} = await waitForTx(callTx); + const gasFees = gasUsed.mul(callTx.gasPrice); + const userBalanceAfterCall = await user.signer.getBalance(); + + expect(userBalanceAfterCall).to.be.eq(userBalancePriorCall.sub(amount).sub(gasFees), ''); + 'User should have lost the funds'; + + // Recover the funds from the contract and sends back to the user + await wethGateway.connect(deployer.signer).emergencyEtherTransfer(user.address, amount); + + const userBalanceAfterRecovery = await user.signer.getBalance(); + const wethGatewayAfterRecovery = await DRE.ethers.provider.getBalance(wethGateway.address); + + expect(userBalanceAfterRecovery).to.be.eq( + userBalancePriorCall.sub(gasFees), + 'User should recover the funds due emergency eth transfer.' + ); + expect(wethGatewayAfterRecovery).to.be.eq('0', 'WETHGateway ether balance should be zero.'); + }); +}); From e09e660c8514053884df97887398bc756c22dee4 Mon Sep 17 00:00:00 2001 From: David Racero <4266635-kartojal@users.noreply.gitlab.com> Date: Tue, 17 Nov 2020 07:18:10 +0000 Subject: [PATCH 09/11] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4ebfdb3c..5e5c0c69 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This repository contains the smart contracts source code and markets configurati ## What is Aave? -Aave is a decentralized non-custodial liqudity markets protocol where users can participate as depositors or borrowers. Depositors provide liquidity to the market to earn a passive income, while borrowers are able to borrow in an overcollateralized (perpetually) or undercollateralized (one-block liquidity) fashion. +Aave is a decentralized non-custodial liquidity markets protocol where users can participate as depositors or borrowers. Depositors provide liquidity to the market to earn a passive income, while borrowers are able to borrow in an overcollateralized (perpetually) or undercollateralized (one-block liquidity) fashion. ## Documentation From b275fedfe83ebfcd77eabcfa9785661a2e03161f Mon Sep 17 00:00:00 2001 From: David Racero Date: Tue, 17 Nov 2020 09:33:45 +0100 Subject: [PATCH 10/11] Remove Uniswap V1 config and scripts. Renamed config to markets. --- README.md | 2 +- config/tokensets_v2.ts | 6 - config/uniswap.ts | 249 -------------------- helpers/configuration.ts | 13 +- helpers/contracts-helpers.ts | 4 +- helpers/init-helpers.ts | 9 +- helpers/oracles-helpers.ts | 1 - helpers/types.ts | 3 +- {config => markets/aave}/commons.ts | 5 +- config/aave.ts => markets/aave/index.ts | 5 +- {config => markets/aave}/reservesConfigs.ts | 4 +- package.json | 32 +-- tasks/migrations/aave.full.ts | 44 ---- tasks/migrations/uniswap.dev.ts | 35 --- tasks/migrations/uniswap.full.ts | 32 --- test/__setup.spec.ts | 4 +- test/atoken-transfer.spec.ts | 2 +- test/configurator.spec.ts | 2 +- test/liquidation-atoken.spec.ts | 2 +- test/liquidation-underlying.spec.ts | 2 +- 20 files changed, 32 insertions(+), 424 deletions(-) delete mode 100644 config/tokensets_v2.ts delete mode 100644 config/uniswap.ts rename {config => markets/aave}/commons.ts (99%) rename config/aave.ts => markets/aave/index.ts (98%) rename {config => markets/aave}/reservesConfigs.ts (98%) delete mode 100644 tasks/migrations/aave.full.ts delete mode 100644 tasks/migrations/uniswap.dev.ts delete mode 100644 tasks/migrations/uniswap.full.ts diff --git a/README.md b/README.md index 4ebfdb3c..7ee03349 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ TENDERLY_USERNAME="" ## Markets configuration -The configurations related with the Aave Markets are located at `config` directory. You can follow the `IAaveConfiguration` interface to create new Markets configuration or extend the current configuration. +The configurations related with the Aave Markets are located at `markets` directory. You can follow the `IAaveConfiguration` interface to create new Markets configuration or extend the current Aave configuration. Each market should have his own Market configuration file, and their own set of deployment tasks, using the Aave market config and tasks as a reference. diff --git a/config/tokensets_v2.ts b/config/tokensets_v2.ts deleted file mode 100644 index a685a68b..00000000 --- a/config/tokensets_v2.ts +++ /dev/null @@ -1,6 +0,0 @@ -import {CommonsConfig} from './commons'; - -export const TokenSetsConfig = { - ...CommonsConfig, - // ...TokenSetsConfigStore, -}; diff --git a/config/uniswap.ts b/config/uniswap.ts deleted file mode 100644 index 78852196..00000000 --- a/config/uniswap.ts +++ /dev/null @@ -1,249 +0,0 @@ -import BigNumber from 'bignumber.js'; -import {eEthereumNetwork, EthereumNetwork, IUniswapConfiguration} from '../helpers/types'; -import {oneRay} from '../helpers/constants'; - -import {CommonsConfig} from './commons'; - -// ---------------- -// POOL--SPECIFIC PARAMS -// ---------------- - -export const UniswapConfig: IUniswapConfiguration = { - ...CommonsConfig, - ConfigName: 'Uniswap', - ProviderId: 2, - ReservesConfig: { - DAI: { - baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(), - variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(), - variableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), - stableRateSlope1: new BigNumber(0.06).multipliedBy(oneRay).toFixed(), - stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), - baseLTVAsCollateral: '-1', - liquidationThreshold: '8000', - liquidationBonus: '10500', - borrowingEnabled: true, - stableBorrowRateEnabled: false, - reserveDecimals: '18', - }, - USDC: { - baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(), - variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(), - variableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), - stableRateSlope1: new BigNumber(0.06).multipliedBy(oneRay).toFixed(), - stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), - baseLTVAsCollateral: '-1', - liquidationThreshold: '8000', - liquidationBonus: '10500', - borrowingEnabled: true, - stableBorrowRateEnabled: false, - reserveDecimals: '6', - }, - USDT: { - baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(), - variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(), - variableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), - stableRateSlope1: new BigNumber(0.06).multipliedBy(oneRay).toFixed(), - stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), - baseLTVAsCollateral: '-1', - liquidationThreshold: '8000', - liquidationBonus: '10500', - borrowingEnabled: true, - stableBorrowRateEnabled: false, - reserveDecimals: '6', - }, - WETH: { - baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(), - variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(), - variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(), - stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(), - stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), - baseLTVAsCollateral: '-1', - liquidationThreshold: '8000', - liquidationBonus: '10500', - borrowingEnabled: true, - stableBorrowRateEnabled: false, - reserveDecimals: '18', - }, - UNI_DAI_ETH: { - baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(), - variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(), - variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(), - stableRateSlope1: new BigNumber(0.16).multipliedBy(oneRay).toFixed(), - stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), - baseLTVAsCollateral: '6800', - liquidationThreshold: '7300', - liquidationBonus: '11000', - borrowingEnabled: false, - stableBorrowRateEnabled: false, - reserveDecimals: '18', - }, - UNI_LEND_ETH: { - baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(), - variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(), - variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(), - stableRateSlope1: new BigNumber(0.16).multipliedBy(oneRay).toFixed(), - stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), - baseLTVAsCollateral: '5100', - liquidationThreshold: '6600', - liquidationBonus: '11000', - borrowingEnabled: false, - stableBorrowRateEnabled: false, - reserveDecimals: '18', - }, - UNI_LINK_ETH: { - baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(), - variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(), - variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(), - stableRateSlope1: new BigNumber(0.16).multipliedBy(oneRay).toFixed(), - stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), - baseLTVAsCollateral: '6300', - liquidationThreshold: '6800', - liquidationBonus: '11000', - borrowingEnabled: false, - stableBorrowRateEnabled: false, - reserveDecimals: '18', - }, - UNI_MKR_ETH: { - baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(), - variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(), - variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(), - stableRateSlope1: new BigNumber(0.16).multipliedBy(oneRay).toFixed(), - stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), - baseLTVAsCollateral: '4800', - liquidationThreshold: '6600', - liquidationBonus: '11000', - borrowingEnabled: false, - stableBorrowRateEnabled: false, - reserveDecimals: '18', - }, - UNI_SETH_ETH: { - baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(), - variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(), - variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(), - stableRateSlope1: new BigNumber(0.16).multipliedBy(oneRay).toFixed(), - stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), - baseLTVAsCollateral: '4800', - liquidationThreshold: '6600', - liquidationBonus: '11000', - borrowingEnabled: false, - stableBorrowRateEnabled: false, - reserveDecimals: '18', - }, - UNI_USDC_ETH: { - baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(), - variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(), - variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(), - stableRateSlope1: new BigNumber(0.16).multipliedBy(oneRay).toFixed(), - stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(), - baseLTVAsCollateral: '6800', - liquidationThreshold: '7300', - liquidationBonus: '11000', - borrowingEnabled: false, - stableBorrowRateEnabled: false, - reserveDecimals: '18', - }, - }, - ChainlinkAggregator: { - [eEthereumNetwork.buidlerevm]: {}, - [eEthereumNetwork.hardhat]: {}, - [eEthereumNetwork.coverage]: {}, - [EthereumNetwork.kovan]: { - DAI: '0x6F47077D3B6645Cb6fb7A29D280277EC1e5fFD90', - USDC: '0x672c1C0d1130912D83664011E7960a42E8cA05D5', - USDT: '0xCC833A6522721B3252e7578c5BCAF65738B75Fc3', - UNI_DAI_ETH: '0x0338C40020Bf886c11406115fD1ba205Ef1D9Ff9', - UNI_LEND_ETH: '0xB996b1a11BA0aACc4deA57f7f92d1722428f2E90', - UNI_LINK_ETH: '0x267490eE9Ad21dfE839aE73A8B1c8C9A36F60d33', - UNI_MKR_ETH: '0x6eBF25AB0A18B8F6243619f1AE6b94373169A069', - UNI_SETH_ETH: '0xc5F1eA001c1570783b3af418fa775237Eb129EDC', - UNI_USDC_ETH: '0x7f5E5D34591e9a70D187BBA94260C30B92aC0961', - }, - [EthereumNetwork.ropsten]: { - DAI: '0x64b8e49baded7bfb2fd5a9235b2440c0ee02971b', - USDC: '0xe1480303dde539e2c241bdc527649f37c9cbef7d', - USDT: '0xc08fe0c4d97ccda6b40649c6da621761b628c288', - UNI_DAI_ETH: '0x16048819e3f77b7112eB033624A0bA9d33743028', - UNI_LEND_ETH: '0x43c44B27376Afedee06Bae2A003e979FC3B3Da6C', - UNI_LINK_ETH: '0xb60c29714146EA3539261f599Eb30f62904108Fa', - UNI_MKR_ETH: '0x594ae5421f378b8B4AF9e758C461d2A1FF990BC5', - UNI_SETH_ETH: '0x23Ee5188806BD2D31103368B0EA0259bc6706Af1', - UNI_USDC_ETH: '0x6952A2678D574073DB97963886c2F38CD09C8Ba3', - }, - [EthereumNetwork.main]: { - DAI: '0x037E8F2125bF532F3e228991e051c8A7253B642c', - USDC: '0xdE54467873c3BCAA76421061036053e371721708', - USDT: '0xa874fe207DF445ff19E7482C746C4D3fD0CB9AcE', - UNI_DAI_ETH: '0x1bAB293850289Bf161C5DA79ff3d1F02A950555b', - UNI_LEND_ETH: '0xF4C8Db2d999b024bBB6c6022566503eD41f2AC1E', - UNI_LINK_ETH: '0xE2A639Beb647d7F709ca805ABa760bBEfdbE37e3', - UNI_MKR_ETH: '0xEe40a5E8F3732bE6ECDb5A90e23D0b7bF0D4a73c', - UNI_SETH_ETH: '0x517D40E49660c7705b2e99eEFA6d7B0E9Ba5BF10', - UNI_USDC_ETH: '0x444315Ee92F2bb3579293C17B07194227fA99bF0', - }, - [EthereumNetwork.tenderlyMain]: { - DAI: '0x037E8F2125bF532F3e228991e051c8A7253B642c', - USDC: '0xdE54467873c3BCAA76421061036053e371721708', - USDT: '0xa874fe207DF445ff19E7482C746C4D3fD0CB9AcE', - UNI_DAI_ETH: '0x1bAB293850289Bf161C5DA79ff3d1F02A950555b', - UNI_LEND_ETH: '0xF4C8Db2d999b024bBB6c6022566503eD41f2AC1E', - UNI_LINK_ETH: '0xE2A639Beb647d7F709ca805ABa760bBEfdbE37e3', - UNI_MKR_ETH: '0xEe40a5E8F3732bE6ECDb5A90e23D0b7bF0D4a73c', - UNI_SETH_ETH: '0x517D40E49660c7705b2e99eEFA6d7B0E9Ba5BF10', - UNI_USDC_ETH: '0x444315Ee92F2bb3579293C17B07194227fA99bF0', - }, - }, - ReserveAssets: { - [eEthereumNetwork.hardhat]: {}, - [eEthereumNetwork.buidlerevm]: {}, - [eEthereumNetwork.coverage]: {}, - [EthereumNetwork.kovan]: { - DAI: '0xFf795577d9AC8bD7D90Ee22b6C1703490b6512FD', - USDC: '0xe22da380ee6B445bb8273C81944ADEB6E8450422', - USDT: '0x13512979ADE267AB5100878E2e0f485B568328a4', - WETH: '0xd0a1e359811322d97991e03f863a0c30c2cf029c', - UNI_DAI_ETH: '0x2e0086b5343101203ADeE40160ca1BD91E29fF75', - UNI_LEND_ETH: '0x7615cd666F867406C64E558B9CCC3883e7EC9BA8', - UNI_LINK_ETH: '0xFb9AAc184e79025f936E9C4EF3047Ad4889Df4a8', - UNI_MKR_ETH: '0xB31a1c30f38cD68e8177566Ef950d7bc3C81DaCF', - UNI_SETH_ETH: '0xCF457d8Bb8D8f54Af1ea1B3710231e89bd6CFbfe', - UNI_USDC_ETH: '0x34eA1aB2a43ee696914fc3C0d3e517fA666B9e8D', - }, - [EthereumNetwork.ropsten]: { - DAI: '0xf80A32A835F79D7787E8a8ee5721D0fEaFd78108', - USDC: '0x851dEf71f0e6A903375C1e536Bd9ff1684BAD802', - USDT: '0xB404c51BBC10dcBE948077F18a4B8E553D160084', - WETH: '0xc778417e063141139fce010982780140aa0cd5ab', - UNI_DAI_ETH: '0xC245A7d35E652Cae438A1FdB13E474DF53DBB81D', - UNI_LEND_ETH: '0xcD5DE1EDD40aBBD6efE2C306276FF56f81Bc3151', - UNI_LINK_ETH: '0x8dcf3c8d4d69ca7C188c0A4cf219A1dcE1e510d7', - UNI_MKR_ETH: '0xd8b7B99a9205FD0D0abFB6D7a2c13Db2681bff43', - UNI_SETH_ETH: '0xed4597DCd234867d7A260AD24bAb8253F64940a5', - UNI_USDC_ETH: '0x2BD65323955D08eb600074291305881d1295c4D2', - }, - [EthereumNetwork.main]: { - DAI: '0x6b175474e89094c44da98b954eedeac495271d0f', - USDC: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - USDT: '0xdac17f958d2ee523a2206206994597c13d831ec7', - WETH: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', - UNI_DAI_ETH: '0x2a1530c4c41db0b0b2bb646cb5eb1a67b7158667', - UNI_LEND_ETH: '0xcaa7e4656f6a2b59f5f99c745f91ab26d1210dce', - UNI_LINK_ETH: '0xf173214c720f58e03e194085b1db28b50acdeead', - UNI_MKR_ETH: '0x2c4bd064b998838076fa341a83d007fc2fa50957', - UNI_SETH_ETH: '0xe9cf7887b93150d4f2da7dfc6d502b216438f244', - UNI_USDC_ETH: '0x97dec872013f6b5fb443861090ad931542878126', - }, - [EthereumNetwork.tenderlyMain]: { - DAI: '0x6b175474e89094c44da98b954eedeac495271d0f', - USDC: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - USDT: '0xdac17f958d2ee523a2206206994597c13d831ec7', - WETH: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', - UNI_DAI_ETH: '0x2a1530c4c41db0b0b2bb646cb5eb1a67b7158667', - UNI_LEND_ETH: '0xcaa7e4656f6a2b59f5f99c745f91ab26d1210dce', - UNI_LINK_ETH: '0xf173214c720f58e03e194085b1db28b50acdeead', - UNI_MKR_ETH: '0x2c4bd064b998838076fa341a83d007fc2fa50957', - UNI_SETH_ETH: '0xe9cf7887b93150d4f2da7dfc6d502b216438f244', - UNI_USDC_ETH: '0x97dec872013f6b5fb443861090ad931542878126', - }, - }, -}; diff --git a/helpers/configuration.ts b/helpers/configuration.ts index eb8ee372..f71ea85a 100644 --- a/helpers/configuration.ts +++ b/helpers/configuration.ts @@ -3,16 +3,12 @@ import { iMultiPoolsAssets, IReserveParams, PoolConfiguration, - iBasicDistributionParams, ICommonConfiguration, eEthereumNetwork, - IMarketRates, } from './types'; import {getParamPerPool} from './contracts-helpers'; -import {AaveConfig} from '../config/aave'; -import {UniswapConfig} from '../config/uniswap'; -import {CommonsConfig} from '../config/commons'; -import {ZERO_ADDRESS} from './constants'; +import AaveConfig from '../markets/aave'; +import {CommonsConfig} from '../markets/aave/commons'; import {DRE, filterMapBy} from './misc-utils'; import {tEthereumAddress} from './types'; import {getParamPerNetwork} from './contracts-helpers'; @@ -28,8 +24,6 @@ export const loadPoolConfig = (configName: ConfigNames): PoolConfiguration => { switch (configName) { case ConfigNames.Aave: return AaveConfig; - case ConfigNames.Uniswap: - return UniswapConfig; case ConfigNames.Commons: return CommonsConfig; default: @@ -47,9 +41,6 @@ export const getReservesConfigByPool = (pool: AavePools): iMultiPoolsAssets( } }; -export const getParamPerPool = ({proto, secondary}: iParamsPerPool, pool: AavePools) => { +export const getParamPerPool = ({proto}: iParamsPerPool, pool: AavePools) => { switch (pool) { case AavePools.proto: return proto; - case AavePools.secondary: - return secondary; default: return proto; } diff --git a/helpers/init-helpers.ts b/helpers/init-helpers.ts index 2391f26f..1fe30faf 100644 --- a/helpers/init-helpers.ts +++ b/helpers/init-helpers.ts @@ -1,17 +1,12 @@ -import {eContractid, iMultiPoolsAssets, IReserveParams, tEthereumAddress} from './types'; -import {LendingPoolConfigurator} from '../types/LendingPoolConfigurator'; +import {iMultiPoolsAssets, IReserveParams, tEthereumAddress} from './types'; import {AaveProtocolDataProvider} from '../types/AaveProtocolDataProvider'; -import { - deployATokensAndRatesHelper, - deployStableAndVariableTokensHelper, -} from './contracts-deployments'; import {chunk, waitForTx} from './misc-utils'; import { getATokensAndRatesHelper, getLendingPoolAddressesProvider, getStableAndVariableTokensHelper, } from './contracts-getters'; -import {insertContractAddressInDb, rawInsertContractAddressInDb} from './contracts-helpers'; +import {rawInsertContractAddressInDb} from './contracts-helpers'; export const initReservesByHelper = async ( reservesParams: iMultiPoolsAssets, diff --git a/helpers/oracles-helpers.ts b/helpers/oracles-helpers.ts index 2da44481..45cec5e2 100644 --- a/helpers/oracles-helpers.ts +++ b/helpers/oracles-helpers.ts @@ -13,7 +13,6 @@ import {MockAggregator} from '../types/MockAggregator'; import {deployMockAggregator} from './contracts-deployments'; import {chunk, waitForTx} from './misc-utils'; import {getStableAndVariableTokensHelper} from './contracts-getters'; -import {stablecoinStrategyCentralized} from '../config/reservesConfigs'; export const setInitialMarketRatesInRatesOracleByHelper = async ( marketRates: iMultiPoolsAssets, diff --git a/helpers/types.ts b/helpers/types.ts index 7c447ea9..a549a473 100644 --- a/helpers/types.ts +++ b/helpers/types.ts @@ -259,7 +259,7 @@ export type iAaveSecondPoolAssets = Pick< | 'UNI_LINK_ETH' >; -export type iMultiPoolsAssets = iAssetCommon | iAavePoolAssets | iAaveSecondPoolAssets; +export type iMultiPoolsAssets = iAssetCommon | iAavePoolAssets; export type iAavePoolTokens = Omit, 'ETH'>; @@ -330,7 +330,6 @@ export interface iParamsPerNetwork { export interface iParamsPerPool { [AavePools.proto]: T; - [AavePools.secondary]: T; } export interface iBasicDistributionParams { diff --git a/config/commons.ts b/markets/aave/commons.ts similarity index 99% rename from config/commons.ts rename to markets/aave/commons.ts index 21944854..3186ccf6 100644 --- a/config/commons.ts +++ b/markets/aave/commons.ts @@ -1,7 +1,6 @@ import BigNumber from 'bignumber.js'; -import {zeroPad} from 'ethers/lib/utils'; -import {oneEther, oneRay, RAY, ZERO_ADDRESS} from '../helpers/constants'; -import {ICommonConfiguration, EthereumNetwork, eEthereumNetwork} from '../helpers/types'; +import {oneEther, oneRay, RAY, ZERO_ADDRESS} from '../../helpers/constants'; +import {ICommonConfiguration, EthereumNetwork, eEthereumNetwork} from '../../helpers/types'; const MOCK_CHAINLINK_AGGREGATORS_PRICES = { AAVE: oneEther.multipliedBy('0.003620948469').toFixed(), diff --git a/config/aave.ts b/markets/aave/index.ts similarity index 98% rename from config/aave.ts rename to markets/aave/index.ts index 0835ee81..ea9b27ad 100644 --- a/config/aave.ts +++ b/markets/aave/index.ts @@ -1,6 +1,5 @@ -import BigNumber from 'bignumber.js'; -import {oneRay, ZERO_ADDRESS} from '../helpers/constants'; -import {IAaveConfiguration, EthereumNetwork, eEthereumNetwork} from '../helpers/types'; +import {oneRay, ZERO_ADDRESS} from '../../helpers/constants'; +import {IAaveConfiguration, EthereumNetwork, eEthereumNetwork} from '../../helpers/types'; import {CommonsConfig} from './commons'; import { diff --git a/config/reservesConfigs.ts b/markets/aave/reservesConfigs.ts similarity index 98% rename from config/reservesConfigs.ts rename to markets/aave/reservesConfigs.ts index 59369d38..2a9c7154 100644 --- a/config/reservesConfigs.ts +++ b/markets/aave/reservesConfigs.ts @@ -1,6 +1,6 @@ import BigNumber from 'bignumber.js'; -import {oneRay} from '../helpers/constants'; -import {IReserveParams} from '../helpers/types'; +import {oneRay} from '../../helpers/constants'; +import {IReserveParams} from '../../helpers/types'; export const strategyBase: IReserveParams = { baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(), diff --git a/package.json b/package.json index 90598d9c..4a656381 100644 --- a/package.json +++ b/package.json @@ -13,23 +13,6 @@ "compile": "SKIP_LOAD=true hardhat compile", "test": "TS_NODE_TRANSPILE_ONLY=1 hardhat test ./test/*.spec.ts", "test-scenarios": "npm run test -- test/__setup.spec.ts test/scenario.spec.ts", - "aave:evm:dev:migration": "hardhat aave:dev", - "aave:docker:full:migration": "npm run hardhat:docker -- aave:full", - "aave:kovan:full:migration": "npm run hardhat:kovan -- aave:full --verify", - "aave:kovan:full:initialize": "npm run hardhat:kovan -- full:initialize-lending-pool --verify --pool Aave", - "aave:ropsten:full:migration": "npm run hardhat:ropsten -- aave:full --verify", - "aave:fork:main:tenderly": "npm run hardhat:tenderly-main -- aave:mainnet", - "aave:fork:main": "MAINNET_FORK=true hardhat aave:mainnet", - "test:main:check-list": "MAINNET_FORK=true TS_NODE_TRANSPILE_ONLY=1 hardhat test test/__setup.spec.ts test/mainnet/check-list.spec.ts", - "aave:main:full:migration": "npm run hardhat:main -- aave:mainnet --verify", - "uniswap:evm:dev:migration": "hardhat uniswap:dev", - "uniswap:evm:full:migration": "hardhat uniswap:full --verify", - "uniswap:kovan:dev:migration": "npm run hardhat:kovan -- uniswap:dev --verify", - "uniswap:kovan:full:migration": "npm run hardhat:kovan -- uniswap:full --verify", - "uniswap:ropsten:dev:migration": "npm run hardhat:ropsten -- uniswap:dev --verify", - "uniswap:ropsten:full:migration": "npm run hardhat:ropsten -- uniswap:full --verify", - "uniswap:main:dev:migration": "npm run hardhat:main -- uniswap:dev --verify", - "uniswap:main:full:migration": "npm run hardhat:main -- uniswap:full --verify", "test-repay-with-collateral": "hardhat test test/__setup.spec.ts test/repay-with-collateral.spec.ts", "test-liquidate-with-collateral": "hardhat test test/__setup.spec.ts test/flash-liquidation-with-collateral.spec.ts", "test-liquidate-underlying": "hardhat test test/__setup.spec.ts test/liquidation-underlying.spec.ts", @@ -43,9 +26,16 @@ "test-stable-and-atokens": "hardhat test test/__setup.spec.ts test/atoken-transfer.spec.ts test/stable-token.spec.ts", "test-subgraph:scenarios": "hardhat --network hardhatevm_docker test test/__setup.spec.ts test/subgraph-scenarios.spec.ts", "test-weth": "hardhat test test/__setup.spec.ts test/weth-gateway.spec.ts", + "test:main:check-list": "MAINNET_FORK=true TS_NODE_TRANSPILE_ONLY=1 hardhat test test/__setup.spec.ts test/mainnet/check-list.spec.ts", "dev:coverage": "buidler compile --force && buidler coverage --network coverage", - "dev:deployment": "hardhat dev-deployment", - "dev:deployExample": "hardhat deploy-Example", + "aave:evm:dev:migration": "npm run compile && hardhat aave:dev", + "aave:docker:full:migration": "npm run compile && npm run hardhat:docker -- aave:full", + "aave:kovan:full:migration": "npm run compile && npm run hardhat:kovan -- aave:full --verify", + "aave:kovan:full:initialize": "npm run hardhat:kovan -- full:initialize-lending-pool --verify --pool Aave", + "aave:ropsten:full:migration": "npm run compile && npm run hardhat:ropsten -- aave:full --verify", + "aave:fork:main:tenderly": "npm run compile && npm run hardhat:tenderly-main -- aave:mainnet", + "aave:fork:main": "MAINNET_FORK=true npm run compile && hardhat aave:mainnet", + "aave:main:full:migration": "npm run hardhat:main -- aave:mainnet --verify", "dev:prettier": "prettier --write .", "ci:test": "npm run compile && npm run test", "ci:clean": "rm -rf ./artifacts ./cache ./types", @@ -125,6 +115,10 @@ { "name": "Andrey Kozlov", "email": "andrey@aave.com" + }, + { + "name": "David Racero", + "email": "david.k@aave.com" } ], "license": "AGPLv3", diff --git a/tasks/migrations/aave.full.ts b/tasks/migrations/aave.full.ts deleted file mode 100644 index 731984a3..00000000 --- a/tasks/migrations/aave.full.ts +++ /dev/null @@ -1,44 +0,0 @@ -import {task} from 'hardhat/config'; -import {checkVerification} from '../../helpers/etherscan-verification'; -import {ConfigNames} from '../../helpers/configuration'; -import {EthereumNetworkNames} from '../../helpers/types'; -import {printContracts} from '../../helpers/misc-utils'; - -task('aave:full', 'Deploy development enviroment') - .addFlag('verify', 'Verify contracts at Etherscan') - .setAction(async ({verify}, localBRE) => { - const POOL_NAME = ConfigNames.Aave; - const network = localBRE.network.name; - - await localBRE.run('set-DRE'); - - // Prevent loss of gas verifying all the needed ENVs for Etherscan verification - if (verify) { - checkVerification(); - } - - console.log('Migration started\n'); - - console.log('1. Deploy address provider'); - await localBRE.run('full:deploy-address-provider', {pool: POOL_NAME}); - - console.log('2. Deploy lending pool'); - await localBRE.run('full:deploy-lending-pool'); - - console.log('3. Deploy data provider'); - await localBRE.run('full:data-provider'); - - console.log('4. Initialize lending pool'); - await localBRE.run('full:initialize-lending-pool', {pool: POOL_NAME}); - - if (verify) { - printContracts(); - console.log('4. Veryfing contracts'); - await localBRE.run('verify:general', {all: true, pool: POOL_NAME}); - - console.log('5. Veryfing aTokens and debtTokens'); - await localBRE.run('verify:tokens', {pool: POOL_NAME}); - } - console.log('\nFinished migrations'); - printContracts(); - }); diff --git a/tasks/migrations/uniswap.dev.ts b/tasks/migrations/uniswap.dev.ts deleted file mode 100644 index 70a31f49..00000000 --- a/tasks/migrations/uniswap.dev.ts +++ /dev/null @@ -1,35 +0,0 @@ -import {task} from 'hardhat/config'; -import {checkVerification} from '../../helpers/etherscan-verification'; -import {ConfigNames} from '../../helpers/configuration'; - -task('uniswap:dev', 'Deploy development enviroment') - .addOptionalParam('verify', 'Verify contracts at Etherscan') - .setAction(async ({verify}, localBRE) => { - const POOL_NAME = ConfigNames.Uniswap; - - await localBRE.run('set-DRE'); - - // Prevent loss of gas verifying all the needed ENVs for Etherscan verification - if (verify) { - checkVerification(); - } - - console.log('Migration started\n'); - - console.log('1. Deploy mock tokens'); - await localBRE.run('dev:deploy-mock-tokens', {verify}); - - console.log('2. Deploy address provider'); - await localBRE.run('dev:deploy-address-provider', {verify}); - - console.log('3. Deploy lending pool'); - await localBRE.run('dev:deploy-lending-pool', {verify}); - - console.log('4. Deploy oracles'); - await localBRE.run('dev:deploy-oracles', {verify, pool: POOL_NAME}); - - console.log('5. Initialize lending pool'); - await localBRE.run('dev:initialize-lending-pool', {verify, pool: POOL_NAME}); - - console.log('\nFinished migration'); - }); diff --git a/tasks/migrations/uniswap.full.ts b/tasks/migrations/uniswap.full.ts deleted file mode 100644 index bca82466..00000000 --- a/tasks/migrations/uniswap.full.ts +++ /dev/null @@ -1,32 +0,0 @@ -import {task} from 'hardhat/config'; -import {checkVerification} from '../../helpers/etherscan-verification'; -import {ConfigNames} from '../../helpers/configuration'; - -task('uniswap:full', 'Deploy development enviroment') - .addFlag('verify', 'Verify contracts at Etherscan') - .setAction(async ({verify}, localBRE) => { - const POOL_NAME = ConfigNames.Uniswap; - - await localBRE.run('set-DRE'); - - // Prevent loss of gas verifying all the needed ENVs for Etherscan verification - if (verify) { - checkVerification(); - } - - console.log('Migration started\n'); - - console.log('1. Deploy address provider'); - await localBRE.run('full:deploy-address-provider', {verify, pool: POOL_NAME}); - - console.log('2. Deploy lending pool'); - await localBRE.run('full:deploy-lending-pool', {verify}); - - console.log('3. Deploy oracles'); - await localBRE.run('full:deploy-oracles', {verify, pool: POOL_NAME}); - - console.log('4. Initialize lending pool'); - await localBRE.run('full:initialize-lending-pool', {verify, pool: POOL_NAME}); - - console.log('\nFinished migrations'); - }); diff --git a/test/__setup.spec.ts b/test/__setup.spec.ts index cbce40a9..6d7dc9c5 100644 --- a/test/__setup.spec.ts +++ b/test/__setup.spec.ts @@ -26,7 +26,7 @@ import { import {Signer} from 'ethers'; import {TokenContractId, eContractid, tEthereumAddress, AavePools} from '../helpers/types'; import {MintableErc20 as MintableERC20} from '../types/MintableErc20'; -import {getEmergencyAdmin, getReservesConfigByPool} from '../helpers/configuration'; +import {getReservesConfigByPool} from '../helpers/configuration'; import {initializeMakeSuite} from './helpers/make-suite'; import { @@ -40,7 +40,7 @@ import { enableReservesToBorrowByHelper, enableReservesAsCollateralByHelper, } from '../helpers/init-helpers'; -import {AaveConfig} from '../config/aave'; +import AaveConfig from '../markets/aave'; import {ZERO_ADDRESS} from '../helpers/constants'; import { getLendingPool, diff --git a/test/atoken-transfer.spec.ts b/test/atoken-transfer.spec.ts index 778c9d60..db57bd24 100644 --- a/test/atoken-transfer.spec.ts +++ b/test/atoken-transfer.spec.ts @@ -4,7 +4,7 @@ import {expect} from 'chai'; import {ethers} from 'ethers'; import {RateMode, ProtocolErrors} from '../helpers/types'; import {makeSuite, TestEnv} from './helpers/make-suite'; -import {CommonsConfig} from '../config/commons'; +import {CommonsConfig} from '../markets/aave/commons'; const APPROVAL_AMOUNT_LENDING_POOL = CommonsConfig.ProtocolGlobalParams.ApprovalAmountLendingPoolCore; diff --git a/test/configurator.spec.ts b/test/configurator.spec.ts index 79af55c5..4156ba7c 100644 --- a/test/configurator.spec.ts +++ b/test/configurator.spec.ts @@ -2,7 +2,7 @@ import {TestEnv, makeSuite} from './helpers/make-suite'; import {RAY} from '../helpers/constants'; import {convertToCurrencyDecimals} from '../helpers/contracts-helpers'; import {ProtocolErrors} from '../helpers/types'; -import {CommonsConfig} from '../config/commons'; +import {CommonsConfig} from '../markets/aave/commons'; const APPROVAL_AMOUNT_LENDING_POOL = CommonsConfig.ProtocolGlobalParams.ApprovalAmountLendingPoolCore; diff --git a/test/liquidation-atoken.spec.ts b/test/liquidation-atoken.spec.ts index b0f65336..32c4a2b2 100644 --- a/test/liquidation-atoken.spec.ts +++ b/test/liquidation-atoken.spec.ts @@ -7,7 +7,7 @@ import {makeSuite} from './helpers/make-suite'; import {ProtocolErrors, RateMode} from '../helpers/types'; import {calcExpectedVariableDebtTokenBalance} from './helpers/utils/calculations'; import {getUserData, getReserveData} from './helpers/utils/helpers'; -import {CommonsConfig} from '../config/commons'; +import {CommonsConfig} from '../markets/aave/commons'; const APPROVAL_AMOUNT_LENDING_POOL = CommonsConfig.ProtocolGlobalParams.ApprovalAmountLendingPoolCore; diff --git a/test/liquidation-underlying.spec.ts b/test/liquidation-underlying.spec.ts index cccd46e8..39a68d7f 100644 --- a/test/liquidation-underlying.spec.ts +++ b/test/liquidation-underlying.spec.ts @@ -7,7 +7,7 @@ import {makeSuite} from './helpers/make-suite'; import {ProtocolErrors, RateMode} from '../helpers/types'; import {calcExpectedStableDebtTokenBalance} from './helpers/utils/calculations'; import {getUserData} from './helpers/utils/helpers'; -import {CommonsConfig} from '../config/commons'; +import {CommonsConfig} from '../markets/aave/commons'; const APPROVAL_AMOUNT_LENDING_POOL = CommonsConfig.ProtocolGlobalParams.ApprovalAmountLendingPoolCore; From 12d17179d68462f8d01d3b6760f7794119bf6dfb Mon Sep 17 00:00:00 2001 From: David Racero Date: Tue, 17 Nov 2020 10:24:24 +0100 Subject: [PATCH 11/11] Renamed ChainlinkProxyPriceProvider to AaveOracle --- .../{ChainlinkProxyPriceProvider.sol => AaveOracle.sol} | 4 ++-- coverage.json | 4 ++-- helpers/contracts-deployments.ts | 8 ++++---- helpers/contracts-getters.ts | 8 +++----- helpers/types.ts | 4 ++-- markets/aave/commons.ts | 2 +- package.json | 6 +++--- tasks/dev/4_oracles.ts | 4 ++-- tasks/full/3_oracles.ts | 7 ++----- test/__setup.spec.ts | 4 ++-- test/helpers/make-suite.ts | 7 ------- 11 files changed, 23 insertions(+), 35 deletions(-) rename contracts/misc/{ChainlinkProxyPriceProvider.sol => AaveOracle.sol} (97%) diff --git a/contracts/misc/ChainlinkProxyPriceProvider.sol b/contracts/misc/AaveOracle.sol similarity index 97% rename from contracts/misc/ChainlinkProxyPriceProvider.sol rename to contracts/misc/AaveOracle.sol index f6516abc..91168d13 100644 --- a/contracts/misc/ChainlinkProxyPriceProvider.sol +++ b/contracts/misc/AaveOracle.sol @@ -8,14 +8,14 @@ import {IPriceOracleGetter} from '../interfaces/IPriceOracleGetter.sol'; import {IChainlinkAggregator} from '../interfaces/IChainlinkAggregator.sol'; import {SafeERC20} from '../dependencies/openzeppelin/contracts/SafeERC20.sol'; -/// @title ChainlinkProxyPriceProvider +/// @title AaveOracle /// @author Aave /// @notice Proxy smart contract to get the price of an asset from a price source, with Chainlink Aggregator /// smart contracts as primary option /// - If the returned price by a Chainlink aggregator is <= 0, the call is forwarded to a fallbackOracle /// - Owned by the Aave governance system, allowed to add sources for assets, replace them /// and change the fallbackOracle -contract ChainlinkProxyPriceProvider is IPriceOracleGetter, Ownable { +contract AaveOracle is IPriceOracleGetter, Ownable { using SafeERC20 for IERC20; event WethSet(address indexed weth); diff --git a/coverage.json b/coverage.json index 2b521a35..f8cd9953 100644 --- a/coverage.json +++ b/coverage.json @@ -5565,7 +5565,7 @@ } } }, - "contracts/misc/ChainlinkProxyPriceProvider.sol": { + "contracts/misc/AaveOracle.sol": { "l": { "37": 3, "38": 3, @@ -5591,7 +5591,7 @@ "107": 0, "113": 0 }, - "path": "/src/contracts/misc/ChainlinkProxyPriceProvider.sol", + "path": "/src/contracts/misc/AaveOracle.sol", "s": { "1": 3, "2": 3, diff --git a/helpers/contracts-deployments.ts b/helpers/contracts-deployments.ts index 4bf686a7..aea69f41 100644 --- a/helpers/contracts-deployments.ts +++ b/helpers/contracts-deployments.ts @@ -21,7 +21,7 @@ import { AaveProtocolDataProviderFactory, ATokenFactory, ATokensAndRatesHelperFactory, - ChainlinkProxyPriceProviderFactory, + AaveOracleFactory, DefaultReserveInterestRateStrategyFactory, DelegationAwareATokenFactory, InitializableAdminUpgradeabilityProxyFactory, @@ -199,13 +199,13 @@ export const deployMockAggregator = async (price: tStringTokenSmallUnits, verify verify ); -export const deployChainlinkProxyPriceProvider = async ( +export const deployAaveOracle = async ( args: [tEthereumAddress[], tEthereumAddress[], tEthereumAddress, tEthereumAddress], verify?: boolean ) => withSaveAndVerify( - await new ChainlinkProxyPriceProviderFactory(await getFirstSigner()).deploy(...args), - eContractid.ChainlinkProxyPriceProvider, + await new AaveOracleFactory(await getFirstSigner()).deploy(...args), + eContractid.AaveOracle, args, verify ); diff --git a/helpers/contracts-getters.ts b/helpers/contracts-getters.ts index 791a9185..3c8752bf 100644 --- a/helpers/contracts-getters.ts +++ b/helpers/contracts-getters.ts @@ -2,7 +2,7 @@ import { AaveProtocolDataProviderFactory, ATokenFactory, ATokensAndRatesHelperFactory, - ChainlinkProxyPriceProviderFactory, + AaveOracleFactory, DefaultReserveInterestRateStrategyFactory, GenericLogicFactory, InitializableAdminUpgradeabilityProxyFactory, @@ -324,9 +324,7 @@ export const getAddressById = async (id: string) => (await getDb().get(`${id}.${DRE.network.name}`).value()).address; export const getChainlinkPriceProvider = async (address?: tEthereumAddress) => - await ChainlinkProxyPriceProviderFactory.connect( - address || - (await getDb().get(`${eContractid.ChainlinkProxyPriceProvider}.${DRE.network.name}`).value()) - .address, + await AaveOracleFactory.connect( + address || (await getDb().get(`${eContractid.AaveOracle}.${DRE.network.name}`).value()).address, await getFirstSigner() ); diff --git a/helpers/types.ts b/helpers/types.ts index a549a473..4c75ab6a 100644 --- a/helpers/types.ts +++ b/helpers/types.ts @@ -41,7 +41,7 @@ export enum eContractid { Proxy = 'Proxy', MockAggregator = 'MockAggregator', LendingRateOracle = 'LendingRateOracle', - ChainlinkProxyPriceProvider = 'ChainlinkProxyPriceProvider', + AaveOracle = 'AaveOracle', DefaultReserveInterestRateStrategy = 'DefaultReserveInterestRateStrategy', LendingPoolCollateralManager = 'LendingPoolCollateralManager', InitializableAdminUpgradeabilityProxy = 'InitializableAdminUpgradeabilityProxy', @@ -391,7 +391,7 @@ export interface ICommonConfiguration { LendingRateOracleRatesCommon: iMultiPoolsAssets; LendingRateOracle: iParamsPerNetwork; TokenDistributor: iParamsPerNetwork; - ChainlinkProxyPriceProvider: iParamsPerNetwork; + AaveOracle: iParamsPerNetwork; FallbackOracle: iParamsPerNetwork; ChainlinkAggregator: iParamsPerNetwork; PoolAdmin: iParamsPerNetwork; diff --git a/markets/aave/commons.ts b/markets/aave/commons.ts index 3186ccf6..ebeae617 100644 --- a/markets/aave/commons.ts +++ b/markets/aave/commons.ts @@ -180,7 +180,7 @@ export const CommonsConfig: ICommonConfiguration = { [EthereumNetwork.main]: '0xe3d9988f676457123c5fd01297605efdd0cba1ae', [EthereumNetwork.tenderlyMain]: '0xe3d9988f676457123c5fd01297605efdd0cba1ae', }, - ChainlinkProxyPriceProvider: { + AaveOracle: { [eEthereumNetwork.coverage]: '', [eEthereumNetwork.hardhat]: '', [eEthereumNetwork.buidlerevm]: '', diff --git a/package.json b/package.json index 4a656381..a271d20f 100644 --- a/package.json +++ b/package.json @@ -29,10 +29,10 @@ "test:main:check-list": "MAINNET_FORK=true TS_NODE_TRANSPILE_ONLY=1 hardhat test test/__setup.spec.ts test/mainnet/check-list.spec.ts", "dev:coverage": "buidler compile --force && buidler coverage --network coverage", "aave:evm:dev:migration": "npm run compile && hardhat aave:dev", - "aave:docker:full:migration": "npm run compile && npm run hardhat:docker -- aave:full", - "aave:kovan:full:migration": "npm run compile && npm run hardhat:kovan -- aave:full --verify", + "aave:docker:full:migration": "npm run compile && npm run hardhat:docker -- aave:mainnet", + "aave:kovan:full:migration": "npm run compile && npm run hardhat:kovan -- aave:mainnet --verify", "aave:kovan:full:initialize": "npm run hardhat:kovan -- full:initialize-lending-pool --verify --pool Aave", - "aave:ropsten:full:migration": "npm run compile && npm run hardhat:ropsten -- aave:full --verify", + "aave:ropsten:full:migration": "npm run compile && npm run hardhat:ropsten -- aave:mainnet --verify", "aave:fork:main:tenderly": "npm run compile && npm run hardhat:tenderly-main -- aave:mainnet", "aave:fork:main": "MAINNET_FORK=true npm run compile && hardhat aave:mainnet", "aave:main:full:migration": "npm run hardhat:main -- aave:mainnet --verify", diff --git a/tasks/dev/4_oracles.ts b/tasks/dev/4_oracles.ts index c315491d..e95fdc3f 100644 --- a/tasks/dev/4_oracles.ts +++ b/tasks/dev/4_oracles.ts @@ -1,7 +1,7 @@ import {task} from 'hardhat/config'; import { deployPriceOracle, - deployChainlinkProxyPriceProvider, + deployAaveOracle, deployLendingRateOracle, } from '../../helpers/contracts-deployments'; @@ -58,7 +58,7 @@ task('dev:deploy-oracles', 'Deploy oracles for dev enviroment') allAggregatorsAddresses ); - await deployChainlinkProxyPriceProvider( + await deployAaveOracle( [tokens, aggregators, fallbackOracle.address, await getWethAddress(poolConfig)], verify ); diff --git a/tasks/full/3_oracles.ts b/tasks/full/3_oracles.ts index 16049d4b..4df4ffa7 100644 --- a/tasks/full/3_oracles.ts +++ b/tasks/full/3_oracles.ts @@ -1,9 +1,6 @@ import {task} from 'hardhat/config'; import {getEthersSignersAddresses, getParamPerNetwork} from '../../helpers/contracts-helpers'; -import { - deployChainlinkProxyPriceProvider, - deployLendingRateOracle, -} from '../../helpers/contracts-deployments'; +import {deployAaveOracle, deployLendingRateOracle} from '../../helpers/contracts-deployments'; import {setInitialMarketRatesInRatesOracleByHelper} from '../../helpers/oracles-helpers'; import {ICommonConfiguration, eEthereumNetwork, SymbolMap} from '../../helpers/types'; import {waitForTx, filterMapBy, notFalsyOrZeroAddress} from '../../helpers/misc-utils'; @@ -53,7 +50,7 @@ task('full:deploy-oracles', 'Deploy oracles for dev enviroment') const chainlinkProviderPriceProvider = notFalsyOrZeroAddress(proxyPriceProviderAddress) ? await getChainlinkPriceProvider(proxyPriceProviderAddress) - : await deployChainlinkProxyPriceProvider( + : await deployAaveOracle( [tokens, aggregators, fallbackOracleAddress, await getWethAddress(poolConfig)], verify ); diff --git a/test/__setup.spec.ts b/test/__setup.spec.ts index 6d7dc9c5..beda3b98 100644 --- a/test/__setup.spec.ts +++ b/test/__setup.spec.ts @@ -12,7 +12,7 @@ import { deployLendingPoolConfigurator, deployLendingPool, deployPriceOracle, - deployChainlinkProxyPriceProvider, + deployAaveOracle, deployLendingPoolCollateralManager, deployMockFlashLoanReceiver, deployWalletBalancerProvider, @@ -201,7 +201,7 @@ const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => { const [tokens, aggregators] = getPairsTokenAggregator(allTokenAddresses, allAggregatorsAddresses); - const chainlinkProxyPriceProvider = await deployChainlinkProxyPriceProvider([ + const aaveOracle = await deployAaveOracle([ tokens, aggregators, fallbackOracle.address, diff --git a/test/helpers/make-suite.ts b/test/helpers/make-suite.ts index ec4f5533..7612fce1 100644 --- a/test/helpers/make-suite.ts +++ b/test/helpers/make-suite.ts @@ -106,28 +106,22 @@ export async function initializeMakeSuite() { testEnv.helpersContract = await getAaveProtocolDataProvider(); - console.log('het cpmtra'); const allTokens = await testEnv.helpersContract.getAllATokens(); - console.log('tokann'); const aDaiAddress = allTokens.find((aToken) => aToken.symbol === 'aDAI')?.tokenAddress; const aWEthAddress = allTokens.find((aToken) => aToken.symbol === 'aWETH')?.tokenAddress; - console.log('priah'); const reservesTokens = await testEnv.helpersContract.getAllReservesTokens(); - console.log('all tokan'); const daiAddress = reservesTokens.find((token) => token.symbol === 'DAI')?.tokenAddress; const usdcAddress = reservesTokens.find((token) => token.symbol === 'USDC')?.tokenAddress; const aaveAddress = reservesTokens.find((token) => token.symbol === 'AAVE')?.tokenAddress; const wethAddress = reservesTokens.find((token) => token.symbol === 'WETH')?.tokenAddress; if (!aDaiAddress || !aWEthAddress) { - console.log(`atoken-modifiers.spec: aTokens not correctly initialized`); process.exit(1); } if (!daiAddress || !usdcAddress || !aaveAddress || !wethAddress) { - console.log(`atoken-modifiers.spec: USDC or DAI not correctly initialized`); process.exit(1); } @@ -139,7 +133,6 @@ export async function initializeMakeSuite() { testEnv.aave = await getMintableErc20(aaveAddress); testEnv.weth = await getWETHMocked(wethAddress); testEnv.wethGateway = await getWETHGateway(); - console.log('laa'); } export function makeSuite(name: string, tests: (testEnv: TestEnv) => void) {