From c29a6e2847a816bce5205b34ccc59ed2cfc86b03 Mon Sep 17 00:00:00 2001 From: rolandpo Date: Thu, 11 May 2023 20:16:02 +0200 Subject: [PATCH 1/4] add ledger live connector --- dapp-oeth/ledger_manifest.json | 42 +++++++++++++++++++ dapp-oeth/package.json | 3 +- dapp-oeth/src/components/Nav.js | 10 +++-- .../src/components/_AccountStatusContent.js | 6 ++- dapp-oeth/src/utils/connectors.js | 6 +++ dapp-oeth/src/utils/hooks.js | 26 +++++++++++- dapp-oeth/src/utils/web3.js | 2 +- dapp-oeth/yarn.lock | 28 +++++++++++-- 8 files changed, 111 insertions(+), 12 deletions(-) create mode 100644 dapp-oeth/ledger_manifest.json diff --git a/dapp-oeth/ledger_manifest.json b/dapp-oeth/ledger_manifest.json new file mode 100644 index 0000000000..6841234864 --- /dev/null +++ b/dapp-oeth/ledger_manifest.json @@ -0,0 +1,42 @@ +{ + "id": "oeth", + "name": "OETH", + "url": "https://dapp-browser.apps.ledger.com", + "params": { + "dappUrl": "http://localhost:3000/?embed=true", + "nanoApp": "Ethereum", + "dappName": "Ethereum", + "networks": [ + { + "currency": "ethereum", + "chainID": 1, + "nodeURL": "" + } + ] + }, + "homepageUrl": "https://app.oeth.com/", + "icon": "https://www.oeth.com/images/oeth.svg", + "platform": "all", + "apiVersion": "0.0.1", + "manifestVersion": "1", + "branch": "stable", + "categories": [ + "liquid staking derivatives", + "defi" + ], + "currencies": [ + "ethereum" + ], + "content": { + "shortDescription": { + "en": "An ETH-pegged token that earns yield from all forms of staking." + }, + "description": { + "en": "An ETH-pegged token that earns yield from all forms of staking." + } + }, + "permissions": [], + "domains": [ + "https://*" + ] +} \ No newline at end of file diff --git a/dapp-oeth/package.json b/dapp-oeth/package.json index be17691ac4..b953ab6dd4 100644 --- a/dapp-oeth/package.json +++ b/dapp-oeth/package.json @@ -90,7 +90,8 @@ "react-styl": "^0.0.3", "react-toastify": "^6.2.0", "sass": "^1.39.2", - "use-analytics": "^0.0.5" + "use-analytics": "^0.0.5", + "web3-ledgerhq-frame-connector": "^1.0.1" }, "babel": { "presets": [ diff --git a/dapp-oeth/src/components/Nav.js b/dapp-oeth/src/components/Nav.js index a86aa36da0..d2d5600510 100644 --- a/dapp-oeth/src/components/Nav.js +++ b/dapp-oeth/src/components/Nav.js @@ -18,6 +18,7 @@ import { adjustLinkHref } from 'utils/utils' import { assetRootPath } from 'utils/image' import TransactionStore from 'stores/TransactionStore' import { usePrevious } from 'utils/hooks' +import { ledgerLiveConnector } from 'utils/connectors' const environment = process.env.NODE_ENV @@ -37,7 +38,7 @@ const DappLinks = ({ page }) => {
- + { const { pathname } = useRouter() const { active, account } = useWeb3React() const apy = useStoreState(ContractStore, (s) => s.apy.apy30 || 0) + const ledgerLive = ledgerLiveConnector?.isLedgerApp() return ( <> @@ -322,12 +324,12 @@ const Nav = ({ isMobile, locale, onLocale, page }) => { {/**/}
- { + {active && (
- } - {!active && ( + )} + {!active && !ledgerLive && (
{ @@ -24,6 +24,8 @@ const AccountStatusContent = ({ className, onOpen }) => { const { overrideAccount } = useOverrideAccount() const router = useRouter() + const ledgerLive = ledgerLiveConnector?.isLedgerApp() + return ( <>
{ {active && correctNetwork && (

Account

- {!overrideAccount && ( + {!overrideAccount && !ledgerLive && (
{ @@ -50,12 +52,34 @@ export function useEagerConnect() { attemptSafeConnection() }, [process.browser]) // Try this when Safe multisig connector is started + useEffect(() => { + async function attemptLedgerLiveConnection() { + try { + if (ledgerLiveConnector?.isLedgerApp()) { + await activate(ledgerLiveConnector, undefined, true) + } + } catch (error) { + console.debug(error) + setTriedLedgerLive(true) + return + } + + AccountStore.update((s) => { + s.connectorName = 'Ledger' + }) + + setTriedLedgerLive(true) + } + + attemptLedgerLiveConnection() + }, [process.browser]) + // Attempt to use injectedConnector connector useEffect(() => { async function attemptEagerConnection() { // Must try Safe multisig before injectedConnector connector, don't do anything // further if using Safe multisig - if (!triedSafeMultisig || isSafeMultisig) return + if (!triedSafeMultisig || isSafeMultisig || !triedLedgerLive) return const eagerConnect = localStorage.getItem('eagerConnect', false) // Local storage request we don't try eager connect diff --git a/dapp-oeth/src/utils/web3.js b/dapp-oeth/src/utils/web3.js index 3cc2d4372d..767f0c9105 100644 --- a/dapp-oeth/src/utils/web3.js +++ b/dapp-oeth/src/utils/web3.js @@ -9,7 +9,7 @@ export function isCorrectNetwork(chainId) { } else { return ( chainId === - (parseInt(process.env.NEXT_PUBLIC_ETHEREUM_RPC_CHAIN_ID) || 1337) + (parseInt(process.env.NEXT_PUBLIC_ETHEREUM_RPC_CHAIN_ID)) || 1337 ) } } diff --git a/dapp-oeth/yarn.lock b/dapp-oeth/yarn.lock index 374ee7099a..dea7cb2d58 100644 --- a/dapp-oeth/yarn.lock +++ b/dapp-oeth/yarn.lock @@ -2269,6 +2269,13 @@ "@ledgerhq/errors" "^6.10.0" events "^3.3.0" +"@ledgerhq/iframe-provider@0": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@ledgerhq/iframe-provider/-/iframe-provider-0.4.3.tgz#62f680a935b753487df7d8bf48a13952f5456e4e" + integrity sha512-T7rSxDMjOnV25QWo3aoWWLytB+VvFcQH5xVkYt7hAhc8qCaK9fnJD5VcmrqwPnyjzXslu7Vz8wUwj9w0CIgp6A== + dependencies: + eventemitter3 "^4.0.0" + "@ledgerhq/logs@^4.72.0": version "4.72.0" resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-4.72.0.tgz#43df23af013ad1135407e5cf33ca6e4c4c7708d5" @@ -3063,7 +3070,7 @@ typedarray-to-buffer "^3.1.5" yaeti "^0.0.6" -"@web3-react/abstract-connector@6.0.7", "@web3-react/abstract-connector@^6.0.7": +"@web3-react/abstract-connector@6", "@web3-react/abstract-connector@6.0.7", "@web3-react/abstract-connector@^6.0.7": version "6.0.7" resolved "https://registry.yarnpkg.com/@web3-react/abstract-connector/-/abstract-connector-6.0.7.tgz#401b3c045f1e0fab04256311be49d5144e9badc6" integrity sha512-RhQasA4Ox8CxUC0OENc1AJJm8UTybu/oOCM61Zjg6y0iF7Z0sqv1Ai1VdhC33hrQpA8qSBgoXN9PaP8jKmtdqg== @@ -3099,7 +3106,7 @@ "@web3-react/abstract-connector" "^6.0.7" "@web3-react/types" "^6.0.7" -"@web3-react/types@^6.0.7": +"@web3-react/types@6", "@web3-react/types@^6.0.7": version "6.0.7" resolved "https://registry.yarnpkg.com/@web3-react/types/-/types-6.0.7.tgz#34a6204224467eedc6123abaf55fbb6baeb2809f" integrity sha512-ofGmfDhxmNT1/P/MgVa8IKSkCStFiyvXe+U5tyZurKdrtTDFU+wJ/LxClPDtFerWpczNFPUSrKcuhfPX1sI6+A== @@ -7361,7 +7368,7 @@ eventemitter3@4.0.4: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== -eventemitter3@4.0.7: +eventemitter3@4.0.7, eventemitter3@^4.0.0: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== @@ -14460,6 +14467,11 @@ timsort@^0.3.0: resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= +tiny-invariant@1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" + integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== + tiny-invariant@^1.0.2, tiny-invariant@^1.0.6, tiny-invariant@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9" @@ -15535,6 +15547,16 @@ web3-eth@1.2.4: web3-net "1.2.4" web3-utils "1.2.4" +web3-ledgerhq-frame-connector@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/web3-ledgerhq-frame-connector/-/web3-ledgerhq-frame-connector-1.0.1.tgz#7554fb5e9d1da19e1ab24e434dbc4d0c012c0527" + integrity sha512-AnSISDK0csoi2V/dMAjcomK8ZbFAYk22KArSoG/chDKlvLgxBgXafWheQPgV7540Efd/wMbtcjo4NotY2M3nDA== + dependencies: + "@ledgerhq/iframe-provider" "0" + "@web3-react/abstract-connector" "6" + "@web3-react/types" "6" + tiny-invariant "1" + web3-net@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.11.tgz#eda68ef25e5cdb64c96c39085cdb74669aabbe1b" From b5a133f9f3b77c8fe849d3f41ed21dd8dccc7aa5 Mon Sep 17 00:00:00 2001 From: rolandpo Date: Thu, 11 May 2023 21:04:50 +0200 Subject: [PATCH 2/4] update manifest --- dapp-oeth/ledger_manifest.json | 2 +- dapp-oeth/src/components/GetOUSD.js | 8 +++++++- dapp-oeth/src/utils/hooks.js | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/dapp-oeth/ledger_manifest.json b/dapp-oeth/ledger_manifest.json index 6841234864..43c071fb8a 100644 --- a/dapp-oeth/ledger_manifest.json +++ b/dapp-oeth/ledger_manifest.json @@ -3,7 +3,7 @@ "name": "OETH", "url": "https://dapp-browser.apps.ledger.com", "params": { - "dappUrl": "http://localhost:3000/?embed=true", + "dappUrl": "https://app.oeth.com/?embed=true", "nanoApp": "Ethereum", "dappName": "Ethereum", "networks": [ diff --git a/dapp-oeth/src/components/GetOUSD.js b/dapp-oeth/src/components/GetOUSD.js index 08ee00861d..9e878f9879 100644 --- a/dapp-oeth/src/components/GetOUSD.js +++ b/dapp-oeth/src/components/GetOUSD.js @@ -7,6 +7,7 @@ import { useRouter } from 'next/router' import withWalletSelectModal from 'hoc/withWalletSelectModal' import analytics from 'utils/analytics' import { walletLogin } from 'utils/account' +import { ledgerLiveConnector } from 'utils/connectors' const GetOUSD = ({ id, @@ -35,6 +36,7 @@ const GetOUSD = ({ zIndex2 && 'zIndex2', navMarble && 'nav-marble' ) + const ledgerLive = ledgerLiveConnector?.isLedgerApp() useEffect(() => { if ( @@ -61,7 +63,11 @@ const GetOUSD = ({ category: 'general', label: trackSource, }) - walletLogin(showLogin, activate) + if (ledgerLive) { + activate(ledgerLiveConnector, undefined, true) + } else { + walletLogin(showLogin, activate) + } } }} > diff --git a/dapp-oeth/src/utils/hooks.js b/dapp-oeth/src/utils/hooks.js index 80bd994476..86a4afb76b 100644 --- a/dapp-oeth/src/utils/hooks.js +++ b/dapp-oeth/src/utils/hooks.js @@ -72,7 +72,7 @@ export function useEagerConnect() { } attemptLedgerLiveConnection() - }, [process.browser]) + }, [process.browser, triedSafeMultisig]) // Attempt to use injectedConnector connector useEffect(() => { From b2ef6ae59fa8c5e2ddead3d75a08db1d6db7f33b Mon Sep 17 00:00:00 2001 From: rolandpo Date: Fri, 12 May 2023 17:08:20 +0200 Subject: [PATCH 3/4] edit display name --- dapp-oeth/ledger_manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dapp-oeth/ledger_manifest.json b/dapp-oeth/ledger_manifest.json index 43c071fb8a..b143364a22 100644 --- a/dapp-oeth/ledger_manifest.json +++ b/dapp-oeth/ledger_manifest.json @@ -1,6 +1,6 @@ { "id": "oeth", - "name": "OETH", + "name": "Origin Ether", "url": "https://dapp-browser.apps.ledger.com", "params": { "dappUrl": "https://app.oeth.com/?embed=true", From a156c0ab45c6d16c44828e6eb56f7ee7ec400bd2 Mon Sep 17 00:00:00 2001 From: rolandpo Date: Sat, 13 May 2023 19:27:44 +0200 Subject: [PATCH 4/4] add csp header --- dapp-oeth/next.config.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dapp-oeth/next.config.js b/dapp-oeth/next.config.js index 2f26129306..43f4b08352 100644 --- a/dapp-oeth/next.config.js +++ b/dapp-oeth/next.config.js @@ -110,6 +110,10 @@ const config = { key: 'x-ipfs-path', value: '/ipns/ousd.eth/', }, + { + key: 'Content-Security-Policy', + value: "frame-ancestors https://*.ledger.com", + }, ], }, ]