Repository files navigation

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

  1. npm install
  2. 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

  1. npm run test will compile and run the Hardhat tests suite

Foundry

  1. forge test will compile and run the Foundry tests suite.

Foundry tests against forks

  1. Edit TESTING_FORK .env variable to be one of mainnet/testnet/sandbox and fill the rest of .env (FOUNDRY section)
  2. 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 from addresses.json if you want to force testing a local module deployment.
  3. Run forge test to fork the chosen network and test against existing LensHub contracts.

Deployment

  1. Make sure to fill in the .env using .env.example (the Foundry section). You can specify either a MNEMONIC or a single PRIVATE_KEY (make sure to include both variables, even if one of them is an empty string)
  2. Run deployment script with a command like bash script/deploy-module.sh testnet StepwiseCollectModule from the project root folder (e.g. to deploy StepwiseCollectModule on testnet).
  3. Follow the on-screen instructions to verify if everything is correct and confirm deployment & contract verification.
  4. 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

  1. npm run coverage for Hardhat coverage report
  2. forge 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 at n 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.

About

Repository for adding Lens Protocol collect, follow and reference modules

Resources

Stars

79 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

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

  1. npm install
  2. 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

  1. npm run test will compile and run the Hardhat tests suite

Foundry

  1. forge test will compile and run the Foundry tests suite.

Foundry tests against forks

  1. Edit TESTING_FORK .env variable to be one of mainnet/testnet/sandbox and fill the rest of .env (FOUNDRY section)
  2. 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 from addresses.json if you want to force testing a local module deployment.
  3. Run forge test to fork the chosen network and test against existing LensHub contracts.

Deployment

  1. Make sure to fill in the .env using .env.example (the Foundry section). You can specify either a MNEMONIC or a single PRIVATE_KEY (make sure to include both variables, even if one of them is an empty string)
  2. Run deployment script with a command like bash script/deploy-module.sh testnet StepwiseCollectModule from the project root folder (e.g. to deploy StepwiseCollectModule on testnet).
  3. Follow the on-screen instructions to verify if everything is correct and confirm deployment & contract verification.
  4. 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

  1. npm run coverage for Hardhat coverage report
  2. forge 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 at n 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.

About

Repository for adding Lens Protocol collect, follow and reference modules

Resources

Stars

79 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

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

  1. npm install
  2. 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

  1. npm run test will compile and run the Hardhat tests suite

Foundry

  1. forge test will compile and run the Foundry tests suite.

Foundry tests against forks

  1. Edit TESTING_FORK .env variable to be one of mainnet/testnet/sandbox and fill the rest of .env (FOUNDRY section)
  2. 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 from addresses.json if you want to force testing a local module deployment.
  3. Run forge test to fork the chosen network and test against existing LensHub contracts.

Deployment

  1. Make sure to fill in the .env using .env.example (the Foundry section). You can specify either a MNEMONIC or a single PRIVATE_KEY (make sure to include both variables, even if one of them is an empty string)
  2. Run deployment script with a command like bash script/deploy-module.sh testnet StepwiseCollectModule from the project root folder (e.g. to deploy StepwiseCollectModule on testnet).
  3. Follow the on-screen instructions to verify if everything is correct and confirm deployment & contract verification.
  4. 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

  1. npm run coverage for Hardhat coverage report
  2. forge 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 at n 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.

About

Repository for adding Lens Protocol collect, follow and reference modules

Resources

Stars

79 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

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

  1. npm install
  2. 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

  1. npm run test will compile and run the Hardhat tests suite

Foundry

  1. forge test will compile and run the Foundry tests suite.

Foundry tests against forks

  1. Edit TESTING_FORK .env variable to be one of mainnet/testnet/sandbox and fill the rest of .env (FOUNDRY section)
  2. 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 from addresses.json if you want to force testing a local module deployment.
  3. Run forge test to fork the chosen network and test against existing LensHub contracts.

Deployment

  1. Make sure to fill in the .env using .env.example (the Foundry section). You can specify either a MNEMONIC or a single PRIVATE_KEY (make sure to include both variables, even if one of them is an empty string)
  2. Run deployment script with a command like bash script/deploy-module.sh testnet StepwiseCollectModule from the project root folder (e.g. to deploy StepwiseCollectModule on testnet).
  3. Follow the on-screen instructions to verify if everything is correct and confirm deployment & contract verification.
  4. 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

  1. npm run coverage for Hardhat coverage report
  2. forge 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 at n 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.

About

Repository for adding Lens Protocol collect, follow and reference modules

Resources

Stars

79 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

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

  1. npm install
  2. 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

  1. npm run test will compile and run the Hardhat tests suite

Foundry

  1. forge test will compile and run the Foundry tests suite.

Foundry tests against forks

  1. Edit TESTING_FORK .env variable to be one of mainnet/testnet/sandbox and fill the rest of .env (FOUNDRY section)
  2. 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 from addresses.json if you want to force testing a local module deployment.
  3. Run forge test to fork the chosen network and test against existing LensHub contracts.

Deployment

  1. Make sure to fill in the .env using .env.example (the Foundry section). You can specify either a MNEMONIC or a single PRIVATE_KEY (make sure to include both variables, even if one of them is an empty string)
  2. Run deployment script with a command like bash script/deploy-module.sh testnet StepwiseCollectModule from the project root folder (e.g. to deploy StepwiseCollectModule on testnet).
  3. Follow the on-screen instructions to verify if everything is correct and confirm deployment & contract verification.
  4. 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

  1. npm run coverage for Hardhat coverage report
  2. forge 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 at n 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.

About

Repository for adding Lens Protocol collect, follow and reference modules

Resources

Stars

79 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

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

  1. npm install
  2. 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

  1. npm run test will compile and run the Hardhat tests suite

Foundry

  1. forge test will compile and run the Foundry tests suite.

Foundry tests against forks

  1. Edit TESTING_FORK .env variable to be one of mainnet/testnet/sandbox and fill the rest of .env (FOUNDRY section)
  2. 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 from addresses.json if you want to force testing a local module deployment.
  3. Run forge test to fork the chosen network and test against existing LensHub contracts.

Deployment

  1. Make sure to fill in the .env using .env.example (the Foundry section). You can specify either a MNEMONIC or a single PRIVATE_KEY (make sure to include both variables, even if one of them is an empty string)
  2. Run deployment script with a command like bash script/deploy-module.sh testnet StepwiseCollectModule from the project root folder (e.g. to deploy StepwiseCollectModule on testnet).
  3. Follow the on-screen instructions to verify if everything is correct and confirm deployment & contract verification.
  4. 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

  1. npm run coverage for Hardhat coverage report
  2. forge 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 at n 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.

About

Repository for adding Lens Protocol collect, follow and reference modules

Resources

Stars

79 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

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

  1. npm install
  2. 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

  1. npm run test will compile and run the Hardhat tests suite

Foundry

  1. forge test will compile and run the Foundry tests suite.

Foundry tests against forks

  1. Edit TESTING_FORK .env variable to be one of mainnet/testnet/sandbox and fill the rest of .env (FOUNDRY section)
  2. 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 from addresses.json if you want to force testing a local module deployment.
  3. Run forge test to fork the chosen network and test against existing LensHub contracts.

Deployment

  1. Make sure to fill in the .env using .env.example (the Foundry section). You can specify either a MNEMONIC or a single PRIVATE_KEY (make sure to include both variables, even if one of them is an empty string)
  2. Run deployment script with a command like bash script/deploy-module.sh testnet StepwiseCollectModule from the project root folder (e.g. to deploy StepwiseCollectModule on testnet).
  3. Follow the on-screen instructions to verify if everything is correct and confirm deployment & contract verification.
  4. 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

  1. npm run coverage for Hardhat coverage report
  2. forge 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 at n 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.

About

Repository for adding Lens Protocol collect, follow and reference modules

Resources

Stars

79 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

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

  1. npm install
  2. 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

  1. npm run test will compile and run the Hardhat tests suite

Foundry

  1. forge test will compile and run the Foundry tests suite.

Foundry tests against forks

  1. Edit TESTING_FORK .env variable to be one of mainnet/testnet/sandbox and fill the rest of .env (FOUNDRY section)
  2. 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 from addresses.json if you want to force testing a local module deployment.
  3. Run forge test to fork the chosen network and test against existing LensHub contracts.

Deployment

  1. Make sure to fill in the .env using .env.example (the Foundry section). You can specify either a MNEMONIC or a single PRIVATE_KEY (make sure to include both variables, even if one of them is an empty string)
  2. Run deployment script with a command like bash script/deploy-module.sh testnet StepwiseCollectModule from the project root folder (e.g. to deploy StepwiseCollectModule on testnet).
  3. Follow the on-screen instructions to verify if everything is correct and confirm deployment & contract verification.
  4. 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

  1. npm run coverage for Hardhat coverage report
  2. forge 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 at n 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.

About

Repository for adding Lens Protocol collect, follow and reference modules

Resources

Stars

79 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages