@mahalend/deploy
TypeScript icon, indicating that this package has built-in type declarations

4.5.0 • Public • Published

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

Getting Started

  1. Install Node.JS dependencies:

    npm i
    
  2. Compile 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 .env

Edit the .env file to fill the environment variables MNEMONIC, ALCHEMY_KEY and MARKET_NAME.

nano .env

Run the deployments script

HARDHAT_NETWORK=görli npx hardhat deploy

How 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 deploy

How 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/periphery

Then, 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

Readme

Keywords

none

Package Sidebar

Install

npm i @mahalend/deploy

Weekly Downloads

0

Version

4.5.0

License

AGPLv3

Unpacked Size

49.6 MB

Total Files

1246

Last publish

Collaborators

  • enamakel