@mahalend/deploy v4.5.0
MahaLend Deployments
This Node.js repository contains the configuration and deployment scripts for the MahaLend protocol core and periphery contracts. The repository makes use of hardhat and hardhat-deploy tools to facilitate the deployment of MahaLend 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 MahaLend in testnet network
To deploy MahaLend 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 script
HARDHAT_NETWORK=görli npx hardhat deployHow to deploy MahaLend in fork network
You can use the environment variable FORK with the network name to deploy into a fork.
FORK=main MARKET_NAME=Aave npx hardhat deployHow to integrate in your Hardhat project
You can install the @mahalend/deploy package in your Hardhat project to be able to import deployments with hardhat-deploy and build on top of Aave in local or testnet network.
To make it work, you must install the following packages in your project:
npm i --save-dev @mahalend/deploy @mahalend/core @mahalend/peripheryThen, 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/@mahalend/deploy/artifacts',
deploy: 'node_modules/@mahalend/deploy/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 '@mahalend/deploy';
describe('Tests', () => {
before(async () => {
// Set the MARKET_NAME env var
process.env.MARKET_NAME = "Aave"
// Deploy MahaLend 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);
})
})Project 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 MahaLend markets |
| tasks/ | Hardhat tasks to setup and review market configs |
| helpers/ | Utility helpers to manage configs and deployments |