novadeploy-v3 v1.0.0
Nova V3 Deployments
This Node.js repository contains the configuration and deployment scripts for the Nova V3 protocol core and periphery contracts. The repository makes use of hardhat and hardhat-deploy tools to facilitate the deployment of Nova V3 protocol.
Requirements
- Node.js >= 16
- Alchemy key
- If you use a custom RPC node, you can change the default RPC provider URL at ./helpers/hardhat-config-helpers.ts:25.
- Etherscan API key (Optional)
Getting Started
Install Node.JS dependencies:
npm iCompile contracts before running any other command, to generate Typechain TS typings:
npm run compile
How to deploy Nova V3 in testnet network
To deploy Nova V3 in a Testnet network, copy the .env.example into a .env file, and fill the environment variables MNEMONIC, and ALCHEMY_KEY.
cp .env.example .envEdit the .env file to fill the environment variables MNEMONIC, ALCHEMY_KEY and MARKET_NAME.
nano .envRun the deployments scripts and specify which network & nova market configs you wish to deploy.
HARDHAT_NETWORK=goerli npx hardhat deployHow to deploy Nova V3 in fork network
You can use the environment variable FORK with the network name to deploy into a fork.
FORK=main MARKET_NAME=Nova npx hardhat deployHow to integrate in your Hardhat project
You can install the novadeploy-v3 package in your Hardhat project to be able to import deployments with hardhat-deploy and build on top of Nova in local or testnet network.
To make it work, you must install the following packages in your project:
npm i --save-dev novadeploy-v3 @aave/core-v3 @aave/periphery-v3Then, proceed to load the deploy scripts adding the externals field in your Hardhat config file at hardhat.config.js|ts.
# Content of hardhat.config.ts file
export default hardhatConfig: HardhatUserConfig = {
{...},
external: {
contracts: [
{
artifacts: 'node_modules/novadeploy-v3/artifacts',
deploy: 'node_modules/novadeploy-v3/dist/deploy',
},
],
},
}After all is configured, you can run npx hardhat deploy to run the scripts or you can also run it programmatically in your tests using fixtures:
import {getPoolAddressesProvider} from 'novadeploy-v3';
describe('Tests', () => {
before(async () => {
// Set the MARKET_NAME env var
process.env.MARKET_NAME = "Nova"
// Deploy Nova V3 contracts before running tests
await hre.deployments.fixture(['market', 'periphery-post']);`
})
it('Get Pool address from AddressesProvider', async () => {
const addressesProvider = await getPoolAddressesProvider();
const poolAddress = await addressesProvider.getPool();
console.log('Pool', poolAddress);
})
})How to verify your contract deployments
npx hardhat --network XYZ etherscan-verify --api-key YZXProject Structure
| Path | Description |
|---|---|
| deploy/ | Main deployment scripts dir location |
| ├─ 00-core/ | Core deployment, only needed to run once per network. |
| ├─ 01-periphery_pre/ | Periphery contracts deployment, only need to run once per network. |
| ├─ 02-market/ | Market deployment scripts, depends of Core and Periphery deployment. |
| ├─ 03-periphery_post/ | Periphery contracts deployment after market is deployed. |
| deployments/ | Artifacts location of the deployments, contains the addresses, the abi, solidity input metadata and the constructor parameters. |
| markets/ | Directory to configure Nova markets |
| tasks/ | Hardhat tasks to setup and review market configs |
| helpers/ | Utility helpers to manage configs and deployments |
2 years ago