Awesome
lens-modules
Repository for adding Lens Protocol collect, follow and reference modules.
To have your module added to Lens Testnet or Mainnet please open a PR and follow the instructions here: #TODO
Installation
npm install
- If you also want to use Foundry - follow the Foundry installation instructions here.
Testing
This repository contains both - Hardhat and Foundry tests. Foundry will be used for all future modules, and existing modules will be migrated to Foundry testing suite.
Hardhat
npm run test
will compile and run the Hardhat tests suite
Foundry
forge test
will compile and run the Foundry tests suite.
Foundry tests against forks
- Edit
TESTING_FORK
.env variable to be one ofmainnet/testnet/sandbox
and fill the rest of .env (FOUNDRY
section) - If a module is already deployed and its address exists in
addresses.json
- tests will be run against that deployment. If there is no module in json - a new local instance of the module will be deployed. Remove the module key fromaddresses.json
if you want to force testing a local module deployment. - Run
forge test
to fork the chosen network and test against existing LensHub contracts.
Deployment
- Make sure to fill in the
.env
using.env.example
(theFoundry
section). You can specify either aMNEMONIC
or a singlePRIVATE_KEY
(make sure to include both variables, even if one of them is an empty string) - Run deployment script with a command like
bash script/deploy-module.sh testnet StepwiseCollectModule
from the project root folder (e.g. to deployStepwiseCollectModule
ontestnet
). - Follow the on-screen instructions to verify if everything is correct and confirm deployment & contract verification.
- If only the verification is needed of an existing deployed contract - use the
--verify-only
flag followed by ABI-Encoded constructor args.
Deployement addresses in addresses.json
The addresses.json
file in root contains all existing deployed contracts on all of target environments (mainnet/testnet/sandbox) on corresponding chains.
After a succesful module deployment the new address will be added to addresses.json
, overwriting the existing one (the script will ask for confirmation if you want to redeploy an already existing deployment).
Coverage
npm run coverage
for Hardhat coverage reportforge coverage
for Foundry coverage report
Modules
Collect modules
- Aave Fee Collect Module: Extend the LimitedFeeCollectModule to deposit all received fees into the Aave Polygon Market (if applicable for the asset) and send the resulting aTokens to the beneficiary.
- Auction Collect Module: This module works by creating an English auction for the underlying publication. After the auction ends, only the auction winner is allowed to collect the publication.
- Base Fee Collect Module: An abstract base fee collect module contract which can be used to construct flexible fee collect modules using inheritance.
- Multirecipient Fee Collect Module: Fee Collect module that allows multiple recipients (up to 5) with different proportions of fees payout.
- Simple Fee Collect Module: A simple fee collect module implementation, as an example of using base fee collect module abstract contract.
- Updatable Ownable Fee Collect Module: A fee collect module that, for each publication that uses it, mints an ERC-721 ownership-NFT to its author. Whoever owns the ownership-NFT has the rights to update the parameters required to do a successful collect operation over its underlying publication.
Follow modules
Reference modules
- Degrees Of Separation Reference Module: This reference module allows to set a degree of separation
n
, and then allows to comment/mirror only to profiles that are at most atn
degrees of separation from the author of the root publication. - Token Gated Reference Module: A reference module that validates that the user who tries to reference has a required minimum balance of ERC20/ERC721 token.