feature / lz gated modules - #26

Open
imthatcarlos wants to merge 16 commits into
lens-protocol:masterfrom
hyplabs:feature/lz-gated-modules
Open

feature / lz gated modules#26
imthatcarlos wants to merge 16 commits into
lens-protocol:masterfrom
hyplabs:feature/lz-gated-modules

Conversation

@imthatcarlos

@imthatcarlosimthatcarlos commented Dec 30, 2022

Copy link
Copy Markdown

New features

  • new modules LZGatedFollowModule, LZGatedCollectModule, and LZGatedReferenceModule to do cross-chain token gating
  • supporting lz contracts LZGatedProxy, LzApp, NonblockingLzApp, and SimpleLzApp
  • new mocha tests
  • new hardhat tasks

Example (LZGatedFollowModule)

lz-gated-follow-module@2x (1)

  1. lensprotocol.lens has set their gated follow data. A new follower must have 50 AAVE on Optimism.
  2. carlosbeltran.lens wishes to follow - fetches the requirements and generates the signature for #followWithSig
  3. anyone (ex: a relayer) can submit the follow requirements + the signature to the LZGatedProxy contract on Optimism, which relays the payload to the LZGatedFollowModule contract on Polygon via LayerZero
  • TLDR; the token balance check happens on Optimism, and the follow tx on Polygon

TODO

  • fix newly failing test in /lz-gated-follow-module.spec.ts
  • fix cause for event MessageFailed being emitted when the tx actually succeeds
  • improve fee estimates
  • improve gas estimates
  • ask lz team: latency between #send on source chain and #lzReceive on destination chain can be between 5-30min+ (goerli => mumbai) => testnet infra was updated, not an issue on mainnet ✅

@height

heightBot commented Dec 30, 2022

Copy link
Copy Markdown

Link Height tasks by mentioning a task ID in the pull request title or commit messages, or description and comments with the keyword link (e.g. "Link T-123").

💡Tip: You can also use "Close T-X" to automatically close a task when the pull request is merged.

…to lzgatedproxy; update tests + tasks to use estimateFees* functions
…efailed OR executes noblocking; impr: better tests for message failed; impr: updated readme for tasks; new testnet deployment

@donosonaumczukdonosonaumczuk left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey guys, good work!

There are lot of files that we are adding to the repo that are not necessarily ad-hoc for the Lens modules, but instead generic LayerZero contracts. It would be nice if you import your core repo as a dependency instead, or even create a separate repo that can be used as dependency if some of the files are not included in your core repo.

The idea is to avoid increasing the amount of files here when are not 100% related to the code of each of the Lens modules. Same reason why I am asking to remove some duplicated mocks from the PR.

Comment threadcontracts/lz/LzApp.sol Outdated
Comment threadcontracts/lz/NonblockingLzApp.sol Outdated
Comment threadcontracts/lz/SimpleLzApp.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroEndpoint.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroReceiver.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroUserApplicationConfig.sol Outdated
Comment threadcontracts/lz/libraries/LzLib.sol Outdated
Comment threadcontracts/lz/mocks/LZEndpointMock.sol Outdated
Comment threadcontracts/mocks/ERC20Mock.sol Outdated
Comment threadcontracts/mocks/ERC721Mock.sol Outdated
@imthatcarlos

Copy link
Copy Markdown
Author

thanks for the feedback @donosonaumczuk 🙏 I resolved all comments and pushed changes

  • imported the @layerzerolabs/solidity-examples package for the lz contracts + deleted all the extra files
  • opted to re-using the LzApp instead of my SimpleLzApp; all i had to do was not process messages received
  • used the exiting mocks
  • add LzEndpointMock in the typechain config externalArtifacts; only runs for tests, lmk if that works

@imthatcarlosimthatcarlos changed the title [WIP] feature / lz gated modulesfeature / lz gated modulesMar 17, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@imthatcarlos@donosonaumczuk
, '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

feature / lz gated modules - #26

Open
imthatcarlos wants to merge 16 commits into
lens-protocol:masterfrom
hyplabs:feature/lz-gated-modules
Open

feature / lz gated modules#26
imthatcarlos wants to merge 16 commits into
lens-protocol:masterfrom
hyplabs:feature/lz-gated-modules

Conversation

@imthatcarlos

@imthatcarlosimthatcarlos commented Dec 30, 2022

Copy link
Copy Markdown

New features

  • new modules LZGatedFollowModule, LZGatedCollectModule, and LZGatedReferenceModule to do cross-chain token gating
  • supporting lz contracts LZGatedProxy, LzApp, NonblockingLzApp, and SimpleLzApp
  • new mocha tests
  • new hardhat tasks

Example (LZGatedFollowModule)

lz-gated-follow-module@2x (1)

  1. lensprotocol.lens has set their gated follow data. A new follower must have 50 AAVE on Optimism.
  2. carlosbeltran.lens wishes to follow - fetches the requirements and generates the signature for #followWithSig
  3. anyone (ex: a relayer) can submit the follow requirements + the signature to the LZGatedProxy contract on Optimism, which relays the payload to the LZGatedFollowModule contract on Polygon via LayerZero
  • TLDR; the token balance check happens on Optimism, and the follow tx on Polygon

TODO

  • fix newly failing test in /lz-gated-follow-module.spec.ts
  • fix cause for event MessageFailed being emitted when the tx actually succeeds
  • improve fee estimates
  • improve gas estimates
  • ask lz team: latency between #send on source chain and #lzReceive on destination chain can be between 5-30min+ (goerli => mumbai) => testnet infra was updated, not an issue on mainnet ✅

@height

heightBot commented Dec 30, 2022

Copy link
Copy Markdown

Link Height tasks by mentioning a task ID in the pull request title or commit messages, or description and comments with the keyword link (e.g. "Link T-123").

💡Tip: You can also use "Close T-X" to automatically close a task when the pull request is merged.

…to lzgatedproxy; update tests + tasks to use estimateFees* functions
…efailed OR executes noblocking; impr: better tests for message failed; impr: updated readme for tasks; new testnet deployment

@donosonaumczukdonosonaumczuk left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey guys, good work!

There are lot of files that we are adding to the repo that are not necessarily ad-hoc for the Lens modules, but instead generic LayerZero contracts. It would be nice if you import your core repo as a dependency instead, or even create a separate repo that can be used as dependency if some of the files are not included in your core repo.

The idea is to avoid increasing the amount of files here when are not 100% related to the code of each of the Lens modules. Same reason why I am asking to remove some duplicated mocks from the PR.

Comment threadcontracts/lz/LzApp.sol Outdated
Comment threadcontracts/lz/NonblockingLzApp.sol Outdated
Comment threadcontracts/lz/SimpleLzApp.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroEndpoint.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroReceiver.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroUserApplicationConfig.sol Outdated
Comment threadcontracts/lz/libraries/LzLib.sol Outdated
Comment threadcontracts/lz/mocks/LZEndpointMock.sol Outdated
Comment threadcontracts/mocks/ERC20Mock.sol Outdated
Comment threadcontracts/mocks/ERC721Mock.sol Outdated
@imthatcarlos

Copy link
Copy Markdown
Author

thanks for the feedback @donosonaumczuk 🙏 I resolved all comments and pushed changes

  • imported the @layerzerolabs/solidity-examples package for the lz contracts + deleted all the extra files
  • opted to re-using the LzApp instead of my SimpleLzApp; all i had to do was not process messages received
  • used the exiting mocks
  • add LzEndpointMock in the typechain config externalArtifacts; only runs for tests, lmk if that works

@imthatcarlosimthatcarlos changed the title [WIP] feature / lz gated modulesfeature / lz gated modulesMar 17, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@imthatcarlos@donosonaumczuk
, '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

feature / lz gated modules - #26

Open
imthatcarlos wants to merge 16 commits into
lens-protocol:masterfrom
hyplabs:feature/lz-gated-modules
Open

feature / lz gated modules#26
imthatcarlos wants to merge 16 commits into
lens-protocol:masterfrom
hyplabs:feature/lz-gated-modules

Conversation

@imthatcarlos

@imthatcarlosimthatcarlos commented Dec 30, 2022

Copy link
Copy Markdown

New features

  • new modules LZGatedFollowModule, LZGatedCollectModule, and LZGatedReferenceModule to do cross-chain token gating
  • supporting lz contracts LZGatedProxy, LzApp, NonblockingLzApp, and SimpleLzApp
  • new mocha tests
  • new hardhat tasks

Example (LZGatedFollowModule)

lz-gated-follow-module@2x (1)

  1. lensprotocol.lens has set their gated follow data. A new follower must have 50 AAVE on Optimism.
  2. carlosbeltran.lens wishes to follow - fetches the requirements and generates the signature for #followWithSig
  3. anyone (ex: a relayer) can submit the follow requirements + the signature to the LZGatedProxy contract on Optimism, which relays the payload to the LZGatedFollowModule contract on Polygon via LayerZero
  • TLDR; the token balance check happens on Optimism, and the follow tx on Polygon

TODO

  • fix newly failing test in /lz-gated-follow-module.spec.ts
  • fix cause for event MessageFailed being emitted when the tx actually succeeds
  • improve fee estimates
  • improve gas estimates
  • ask lz team: latency between #send on source chain and #lzReceive on destination chain can be between 5-30min+ (goerli => mumbai) => testnet infra was updated, not an issue on mainnet ✅

@height

heightBot commented Dec 30, 2022

Copy link
Copy Markdown

Link Height tasks by mentioning a task ID in the pull request title or commit messages, or description and comments with the keyword link (e.g. "Link T-123").

💡Tip: You can also use "Close T-X" to automatically close a task when the pull request is merged.

…to lzgatedproxy; update tests + tasks to use estimateFees* functions
…efailed OR executes noblocking; impr: better tests for message failed; impr: updated readme for tasks; new testnet deployment

@donosonaumczukdonosonaumczuk left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey guys, good work!

There are lot of files that we are adding to the repo that are not necessarily ad-hoc for the Lens modules, but instead generic LayerZero contracts. It would be nice if you import your core repo as a dependency instead, or even create a separate repo that can be used as dependency if some of the files are not included in your core repo.

The idea is to avoid increasing the amount of files here when are not 100% related to the code of each of the Lens modules. Same reason why I am asking to remove some duplicated mocks from the PR.

Comment threadcontracts/lz/LzApp.sol Outdated
Comment threadcontracts/lz/NonblockingLzApp.sol Outdated
Comment threadcontracts/lz/SimpleLzApp.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroEndpoint.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroReceiver.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroUserApplicationConfig.sol Outdated
Comment threadcontracts/lz/libraries/LzLib.sol Outdated
Comment threadcontracts/lz/mocks/LZEndpointMock.sol Outdated
Comment threadcontracts/mocks/ERC20Mock.sol Outdated
Comment threadcontracts/mocks/ERC721Mock.sol Outdated
@imthatcarlos

Copy link
Copy Markdown
Author

thanks for the feedback @donosonaumczuk 🙏 I resolved all comments and pushed changes

  • imported the @layerzerolabs/solidity-examples package for the lz contracts + deleted all the extra files
  • opted to re-using the LzApp instead of my SimpleLzApp; all i had to do was not process messages received
  • used the exiting mocks
  • add LzEndpointMock in the typechain config externalArtifacts; only runs for tests, lmk if that works

@imthatcarlosimthatcarlos changed the title [WIP] feature / lz gated modulesfeature / lz gated modulesMar 17, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@imthatcarlos@donosonaumczuk
, '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

feature / lz gated modules - #26

Open
imthatcarlos wants to merge 16 commits into
lens-protocol:masterfrom
hyplabs:feature/lz-gated-modules
Open

feature / lz gated modules#26
imthatcarlos wants to merge 16 commits into
lens-protocol:masterfrom
hyplabs:feature/lz-gated-modules

Conversation

@imthatcarlos

@imthatcarlosimthatcarlos commented Dec 30, 2022

Copy link
Copy Markdown

New features

  • new modules LZGatedFollowModule, LZGatedCollectModule, and LZGatedReferenceModule to do cross-chain token gating
  • supporting lz contracts LZGatedProxy, LzApp, NonblockingLzApp, and SimpleLzApp
  • new mocha tests
  • new hardhat tasks

Example (LZGatedFollowModule)

lz-gated-follow-module@2x (1)

  1. lensprotocol.lens has set their gated follow data. A new follower must have 50 AAVE on Optimism.
  2. carlosbeltran.lens wishes to follow - fetches the requirements and generates the signature for #followWithSig
  3. anyone (ex: a relayer) can submit the follow requirements + the signature to the LZGatedProxy contract on Optimism, which relays the payload to the LZGatedFollowModule contract on Polygon via LayerZero
  • TLDR; the token balance check happens on Optimism, and the follow tx on Polygon

TODO

  • fix newly failing test in /lz-gated-follow-module.spec.ts
  • fix cause for event MessageFailed being emitted when the tx actually succeeds
  • improve fee estimates
  • improve gas estimates
  • ask lz team: latency between #send on source chain and #lzReceive on destination chain can be between 5-30min+ (goerli => mumbai) => testnet infra was updated, not an issue on mainnet ✅

@height

heightBot commented Dec 30, 2022

Copy link
Copy Markdown

Link Height tasks by mentioning a task ID in the pull request title or commit messages, or description and comments with the keyword link (e.g. "Link T-123").

💡Tip: You can also use "Close T-X" to automatically close a task when the pull request is merged.

…to lzgatedproxy; update tests + tasks to use estimateFees* functions
…efailed OR executes noblocking; impr: better tests for message failed; impr: updated readme for tasks; new testnet deployment

@donosonaumczukdonosonaumczuk left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey guys, good work!

There are lot of files that we are adding to the repo that are not necessarily ad-hoc for the Lens modules, but instead generic LayerZero contracts. It would be nice if you import your core repo as a dependency instead, or even create a separate repo that can be used as dependency if some of the files are not included in your core repo.

The idea is to avoid increasing the amount of files here when are not 100% related to the code of each of the Lens modules. Same reason why I am asking to remove some duplicated mocks from the PR.

Comment threadcontracts/lz/LzApp.sol Outdated
Comment threadcontracts/lz/NonblockingLzApp.sol Outdated
Comment threadcontracts/lz/SimpleLzApp.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroEndpoint.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroReceiver.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroUserApplicationConfig.sol Outdated
Comment threadcontracts/lz/libraries/LzLib.sol Outdated
Comment threadcontracts/lz/mocks/LZEndpointMock.sol Outdated
Comment threadcontracts/mocks/ERC20Mock.sol Outdated
Comment threadcontracts/mocks/ERC721Mock.sol Outdated
@imthatcarlos

Copy link
Copy Markdown
Author

thanks for the feedback @donosonaumczuk 🙏 I resolved all comments and pushed changes

  • imported the @layerzerolabs/solidity-examples package for the lz contracts + deleted all the extra files
  • opted to re-using the LzApp instead of my SimpleLzApp; all i had to do was not process messages received
  • used the exiting mocks
  • add LzEndpointMock in the typechain config externalArtifacts; only runs for tests, lmk if that works

@imthatcarlosimthatcarlos changed the title [WIP] feature / lz gated modulesfeature / lz gated modulesMar 17, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@imthatcarlos@donosonaumczuk
, '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

feature / lz gated modules - #26

Open
imthatcarlos wants to merge 16 commits into
lens-protocol:masterfrom
hyplabs:feature/lz-gated-modules
Open

feature / lz gated modules#26
imthatcarlos wants to merge 16 commits into
lens-protocol:masterfrom
hyplabs:feature/lz-gated-modules

Conversation

@imthatcarlos

@imthatcarlosimthatcarlos commented Dec 30, 2022

Copy link
Copy Markdown

New features

  • new modules LZGatedFollowModule, LZGatedCollectModule, and LZGatedReferenceModule to do cross-chain token gating
  • supporting lz contracts LZGatedProxy, LzApp, NonblockingLzApp, and SimpleLzApp
  • new mocha tests
  • new hardhat tasks

Example (LZGatedFollowModule)

lz-gated-follow-module@2x (1)

  1. lensprotocol.lens has set their gated follow data. A new follower must have 50 AAVE on Optimism.
  2. carlosbeltran.lens wishes to follow - fetches the requirements and generates the signature for #followWithSig
  3. anyone (ex: a relayer) can submit the follow requirements + the signature to the LZGatedProxy contract on Optimism, which relays the payload to the LZGatedFollowModule contract on Polygon via LayerZero
  • TLDR; the token balance check happens on Optimism, and the follow tx on Polygon

TODO

  • fix newly failing test in /lz-gated-follow-module.spec.ts
  • fix cause for event MessageFailed being emitted when the tx actually succeeds
  • improve fee estimates
  • improve gas estimates
  • ask lz team: latency between #send on source chain and #lzReceive on destination chain can be between 5-30min+ (goerli => mumbai) => testnet infra was updated, not an issue on mainnet ✅

@height

heightBot commented Dec 30, 2022

Copy link
Copy Markdown

Link Height tasks by mentioning a task ID in the pull request title or commit messages, or description and comments with the keyword link (e.g. "Link T-123").

💡Tip: You can also use "Close T-X" to automatically close a task when the pull request is merged.

…to lzgatedproxy; update tests + tasks to use estimateFees* functions
…efailed OR executes noblocking; impr: better tests for message failed; impr: updated readme for tasks; new testnet deployment

@donosonaumczukdonosonaumczuk left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey guys, good work!

There are lot of files that we are adding to the repo that are not necessarily ad-hoc for the Lens modules, but instead generic LayerZero contracts. It would be nice if you import your core repo as a dependency instead, or even create a separate repo that can be used as dependency if some of the files are not included in your core repo.

The idea is to avoid increasing the amount of files here when are not 100% related to the code of each of the Lens modules. Same reason why I am asking to remove some duplicated mocks from the PR.

Comment threadcontracts/lz/LzApp.sol Outdated
Comment threadcontracts/lz/NonblockingLzApp.sol Outdated
Comment threadcontracts/lz/SimpleLzApp.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroEndpoint.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroReceiver.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroUserApplicationConfig.sol Outdated
Comment threadcontracts/lz/libraries/LzLib.sol Outdated
Comment threadcontracts/lz/mocks/LZEndpointMock.sol Outdated
Comment threadcontracts/mocks/ERC20Mock.sol Outdated
Comment threadcontracts/mocks/ERC721Mock.sol Outdated
@imthatcarlos

Copy link
Copy Markdown
Author

thanks for the feedback @donosonaumczuk 🙏 I resolved all comments and pushed changes

  • imported the @layerzerolabs/solidity-examples package for the lz contracts + deleted all the extra files
  • opted to re-using the LzApp instead of my SimpleLzApp; all i had to do was not process messages received
  • used the exiting mocks
  • add LzEndpointMock in the typechain config externalArtifacts; only runs for tests, lmk if that works

@imthatcarlosimthatcarlos changed the title [WIP] feature / lz gated modulesfeature / lz gated modulesMar 17, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@imthatcarlos@donosonaumczuk
, '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

feature / lz gated modules - #26

Open
imthatcarlos wants to merge 16 commits into
lens-protocol:masterfrom
hyplabs:feature/lz-gated-modules
Open

feature / lz gated modules#26
imthatcarlos wants to merge 16 commits into
lens-protocol:masterfrom
hyplabs:feature/lz-gated-modules

Conversation

@imthatcarlos

@imthatcarlosimthatcarlos commented Dec 30, 2022

Copy link
Copy Markdown

New features

  • new modules LZGatedFollowModule, LZGatedCollectModule, and LZGatedReferenceModule to do cross-chain token gating
  • supporting lz contracts LZGatedProxy, LzApp, NonblockingLzApp, and SimpleLzApp
  • new mocha tests
  • new hardhat tasks

Example (LZGatedFollowModule)

lz-gated-follow-module@2x (1)

  1. lensprotocol.lens has set their gated follow data. A new follower must have 50 AAVE on Optimism.
  2. carlosbeltran.lens wishes to follow - fetches the requirements and generates the signature for #followWithSig
  3. anyone (ex: a relayer) can submit the follow requirements + the signature to the LZGatedProxy contract on Optimism, which relays the payload to the LZGatedFollowModule contract on Polygon via LayerZero
  • TLDR; the token balance check happens on Optimism, and the follow tx on Polygon

TODO

  • fix newly failing test in /lz-gated-follow-module.spec.ts
  • fix cause for event MessageFailed being emitted when the tx actually succeeds
  • improve fee estimates
  • improve gas estimates
  • ask lz team: latency between #send on source chain and #lzReceive on destination chain can be between 5-30min+ (goerli => mumbai) => testnet infra was updated, not an issue on mainnet ✅

@height

heightBot commented Dec 30, 2022

Copy link
Copy Markdown

Link Height tasks by mentioning a task ID in the pull request title or commit messages, or description and comments with the keyword link (e.g. "Link T-123").

💡Tip: You can also use "Close T-X" to automatically close a task when the pull request is merged.

…to lzgatedproxy; update tests + tasks to use estimateFees* functions
…efailed OR executes noblocking; impr: better tests for message failed; impr: updated readme for tasks; new testnet deployment

@donosonaumczukdonosonaumczuk left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey guys, good work!

There are lot of files that we are adding to the repo that are not necessarily ad-hoc for the Lens modules, but instead generic LayerZero contracts. It would be nice if you import your core repo as a dependency instead, or even create a separate repo that can be used as dependency if some of the files are not included in your core repo.

The idea is to avoid increasing the amount of files here when are not 100% related to the code of each of the Lens modules. Same reason why I am asking to remove some duplicated mocks from the PR.

Comment threadcontracts/lz/LzApp.sol Outdated
Comment threadcontracts/lz/NonblockingLzApp.sol Outdated
Comment threadcontracts/lz/SimpleLzApp.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroEndpoint.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroReceiver.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroUserApplicationConfig.sol Outdated
Comment threadcontracts/lz/libraries/LzLib.sol Outdated
Comment threadcontracts/lz/mocks/LZEndpointMock.sol Outdated
Comment threadcontracts/mocks/ERC20Mock.sol Outdated
Comment threadcontracts/mocks/ERC721Mock.sol Outdated
@imthatcarlos

Copy link
Copy Markdown
Author

thanks for the feedback @donosonaumczuk 🙏 I resolved all comments and pushed changes

  • imported the @layerzerolabs/solidity-examples package for the lz contracts + deleted all the extra files
  • opted to re-using the LzApp instead of my SimpleLzApp; all i had to do was not process messages received
  • used the exiting mocks
  • add LzEndpointMock in the typechain config externalArtifacts; only runs for tests, lmk if that works

@imthatcarlosimthatcarlos changed the title [WIP] feature / lz gated modulesfeature / lz gated modulesMar 17, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@imthatcarlos@donosonaumczuk
, '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

feature / lz gated modules - #26

Open
imthatcarlos wants to merge 16 commits into
lens-protocol:masterfrom
hyplabs:feature/lz-gated-modules
Open

feature / lz gated modules#26
imthatcarlos wants to merge 16 commits into
lens-protocol:masterfrom
hyplabs:feature/lz-gated-modules

Conversation

@imthatcarlos

@imthatcarlosimthatcarlos commented Dec 30, 2022

Copy link
Copy Markdown

New features

  • new modules LZGatedFollowModule, LZGatedCollectModule, and LZGatedReferenceModule to do cross-chain token gating
  • supporting lz contracts LZGatedProxy, LzApp, NonblockingLzApp, and SimpleLzApp
  • new mocha tests
  • new hardhat tasks

Example (LZGatedFollowModule)

lz-gated-follow-module@2x (1)

  1. lensprotocol.lens has set their gated follow data. A new follower must have 50 AAVE on Optimism.
  2. carlosbeltran.lens wishes to follow - fetches the requirements and generates the signature for #followWithSig
  3. anyone (ex: a relayer) can submit the follow requirements + the signature to the LZGatedProxy contract on Optimism, which relays the payload to the LZGatedFollowModule contract on Polygon via LayerZero
  • TLDR; the token balance check happens on Optimism, and the follow tx on Polygon

TODO

  • fix newly failing test in /lz-gated-follow-module.spec.ts
  • fix cause for event MessageFailed being emitted when the tx actually succeeds
  • improve fee estimates
  • improve gas estimates
  • ask lz team: latency between #send on source chain and #lzReceive on destination chain can be between 5-30min+ (goerli => mumbai) => testnet infra was updated, not an issue on mainnet ✅

@height

heightBot commented Dec 30, 2022

Copy link
Copy Markdown

Link Height tasks by mentioning a task ID in the pull request title or commit messages, or description and comments with the keyword link (e.g. "Link T-123").

💡Tip: You can also use "Close T-X" to automatically close a task when the pull request is merged.

…to lzgatedproxy; update tests + tasks to use estimateFees* functions
…efailed OR executes noblocking; impr: better tests for message failed; impr: updated readme for tasks; new testnet deployment

@donosonaumczukdonosonaumczuk left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey guys, good work!

There are lot of files that we are adding to the repo that are not necessarily ad-hoc for the Lens modules, but instead generic LayerZero contracts. It would be nice if you import your core repo as a dependency instead, or even create a separate repo that can be used as dependency if some of the files are not included in your core repo.

The idea is to avoid increasing the amount of files here when are not 100% related to the code of each of the Lens modules. Same reason why I am asking to remove some duplicated mocks from the PR.

Comment threadcontracts/lz/LzApp.sol Outdated
Comment threadcontracts/lz/NonblockingLzApp.sol Outdated
Comment threadcontracts/lz/SimpleLzApp.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroEndpoint.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroReceiver.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroUserApplicationConfig.sol Outdated
Comment threadcontracts/lz/libraries/LzLib.sol Outdated
Comment threadcontracts/lz/mocks/LZEndpointMock.sol Outdated
Comment threadcontracts/mocks/ERC20Mock.sol Outdated
Comment threadcontracts/mocks/ERC721Mock.sol Outdated
@imthatcarlos

Copy link
Copy Markdown
Author

thanks for the feedback @donosonaumczuk 🙏 I resolved all comments and pushed changes

  • imported the @layerzerolabs/solidity-examples package for the lz contracts + deleted all the extra files
  • opted to re-using the LzApp instead of my SimpleLzApp; all i had to do was not process messages received
  • used the exiting mocks
  • add LzEndpointMock in the typechain config externalArtifacts; only runs for tests, lmk if that works

@imthatcarlosimthatcarlos changed the title [WIP] feature / lz gated modulesfeature / lz gated modulesMar 17, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@imthatcarlos@donosonaumczuk
, '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

feature / lz gated modules - #26

Open
imthatcarlos wants to merge 16 commits into
lens-protocol:masterfrom
hyplabs:feature/lz-gated-modules
Open

feature / lz gated modules#26
imthatcarlos wants to merge 16 commits into
lens-protocol:masterfrom
hyplabs:feature/lz-gated-modules

Conversation

@imthatcarlos

@imthatcarlosimthatcarlos commented Dec 30, 2022

Copy link
Copy Markdown

New features

  • new modules LZGatedFollowModule, LZGatedCollectModule, and LZGatedReferenceModule to do cross-chain token gating
  • supporting lz contracts LZGatedProxy, LzApp, NonblockingLzApp, and SimpleLzApp
  • new mocha tests
  • new hardhat tasks

Example (LZGatedFollowModule)

lz-gated-follow-module@2x (1)

  1. lensprotocol.lens has set their gated follow data. A new follower must have 50 AAVE on Optimism.
  2. carlosbeltran.lens wishes to follow - fetches the requirements and generates the signature for #followWithSig
  3. anyone (ex: a relayer) can submit the follow requirements + the signature to the LZGatedProxy contract on Optimism, which relays the payload to the LZGatedFollowModule contract on Polygon via LayerZero
  • TLDR; the token balance check happens on Optimism, and the follow tx on Polygon

TODO

  • fix newly failing test in /lz-gated-follow-module.spec.ts
  • fix cause for event MessageFailed being emitted when the tx actually succeeds
  • improve fee estimates
  • improve gas estimates
  • ask lz team: latency between #send on source chain and #lzReceive on destination chain can be between 5-30min+ (goerli => mumbai) => testnet infra was updated, not an issue on mainnet ✅

@height

heightBot commented Dec 30, 2022

Copy link
Copy Markdown

Link Height tasks by mentioning a task ID in the pull request title or commit messages, or description and comments with the keyword link (e.g. "Link T-123").

💡Tip: You can also use "Close T-X" to automatically close a task when the pull request is merged.

…to lzgatedproxy; update tests + tasks to use estimateFees* functions
…efailed OR executes noblocking; impr: better tests for message failed; impr: updated readme for tasks; new testnet deployment

@donosonaumczukdonosonaumczuk left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey guys, good work!

There are lot of files that we are adding to the repo that are not necessarily ad-hoc for the Lens modules, but instead generic LayerZero contracts. It would be nice if you import your core repo as a dependency instead, or even create a separate repo that can be used as dependency if some of the files are not included in your core repo.

The idea is to avoid increasing the amount of files here when are not 100% related to the code of each of the Lens modules. Same reason why I am asking to remove some duplicated mocks from the PR.

Comment threadcontracts/lz/LzApp.sol Outdated
Comment threadcontracts/lz/NonblockingLzApp.sol Outdated
Comment threadcontracts/lz/SimpleLzApp.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroEndpoint.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroReceiver.sol Outdated
Comment threadcontracts/lz/interfaces/ILayerZeroUserApplicationConfig.sol Outdated
Comment threadcontracts/lz/libraries/LzLib.sol Outdated
Comment threadcontracts/lz/mocks/LZEndpointMock.sol Outdated
Comment threadcontracts/mocks/ERC20Mock.sol Outdated
Comment threadcontracts/mocks/ERC721Mock.sol Outdated
@imthatcarlos

Copy link
Copy Markdown
Author

thanks for the feedback @donosonaumczuk 🙏 I resolved all comments and pushed changes

  • imported the @layerzerolabs/solidity-examples package for the lz contracts + deleted all the extra files
  • opted to re-using the LzApp instead of my SimpleLzApp; all i had to do was not process messages received
  • used the exiting mocks
  • add LzEndpointMock in the typechain config externalArtifacts; only runs for tests, lmk if that works

@imthatcarlosimthatcarlos changed the title [WIP] feature / lz gated modulesfeature / lz gated modulesMar 17, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@imthatcarlos@donosonaumczuk