Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d4911d1054 | ||
|
|
90df9c4ced | ||
|
|
14f15d1fd6 | ||
|
|
69818ace1f | ||
|
|
42906d6709 | ||
|
|
2f8936a980 | ||
|
|
f5c4468c3c | ||
|
|
852e8f749f | ||
|
|
6694e5e398 | ||
|
|
2c9a50a372 | ||
|
|
0fc0cba6de | ||
|
|
041c86c04d | ||
|
|
123373e671 | ||
|
|
eb1732deee | ||
|
|
3c13321a71 | ||
|
|
58703f31a0 | ||
|
|
58721fb191 |
22
.github/workflows/release.yaml
vendored
22
.github/workflows/release.yaml
vendored
@@ -47,7 +47,7 @@ jobs:
|
|||||||
run: yarn install --ignore-scripts --frozen-lockfile
|
run: yarn install --ignore-scripts --frozen-lockfile
|
||||||
|
|
||||||
- name: Build the IPFS bundle
|
- name: Build the IPFS bundle
|
||||||
run: yarn ipfs-build
|
run: yarn build
|
||||||
|
|
||||||
- name: Pin to IPFS
|
- name: Pin to IPFS
|
||||||
id: upload
|
id: upload
|
||||||
@@ -65,14 +65,14 @@ jobs:
|
|||||||
cidv0: ${{ steps.upload.outputs.hash }}
|
cidv0: ${{ steps.upload.outputs.hash }}
|
||||||
|
|
||||||
- name: Update DNS with new IPFS hash
|
- name: Update DNS with new IPFS hash
|
||||||
uses: uniswap/replace-vercel-dns-records@v1.0.0
|
env:
|
||||||
|
CLOUDFLARE_TOKEN: ${{ secrets.CLOUDFLARE_TOKEN }}
|
||||||
|
RECORD_DOMAIN: 'uniswap.org'
|
||||||
|
RECORD_NAME: '_dnslink.app'
|
||||||
|
CLOUDFLARE_ZONE_ID: ${{ secrets.CLOUDFLARE_ZONE_ID }}
|
||||||
|
uses: textileio/cloudflare-update-dnslink@0fe7b7a1ffc865db3a4da9773f0f987447ad5848
|
||||||
with:
|
with:
|
||||||
domain: 'uniswap.org'
|
cid: ${{ steps.upload.outputs.hash }}
|
||||||
subdomain: '_dnslink.app'
|
|
||||||
record-type: 'TXT'
|
|
||||||
value: dnslink=/ipfs/${{ steps.upload.outputs.hash }}
|
|
||||||
token: ${{ secrets.VERCEL_TOKEN }}
|
|
||||||
team-name: 'uniswap'
|
|
||||||
|
|
||||||
- name: Create GitHub Release
|
- name: Create GitHub Release
|
||||||
id: create_release
|
id: create_release
|
||||||
@@ -87,9 +87,13 @@ jobs:
|
|||||||
- CIDv0: `${{ steps.upload.outputs.hash }}`
|
- CIDv0: `${{ steps.upload.outputs.hash }}`
|
||||||
- CIDv1: `${{ steps.convert_cidv0.outputs.cidv1 }}`
|
- CIDv1: `${{ steps.convert_cidv0.outputs.cidv1 }}`
|
||||||
|
|
||||||
|
The latest release is always accessible via our alias to the Cloudflare IPFS gateway at [app.uniswap.org](https://app.uniswap.org).
|
||||||
|
|
||||||
|
You can also access the Uniswap Interface directly from an IPFS gateway.
|
||||||
The Uniswap interface uses [`localStorage`](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) to store your settings.
|
The Uniswap interface uses [`localStorage`](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) to store your settings.
|
||||||
**Beware** that other sites you access via the _same_ IPFS gateway can read and modify your settings on the Uniswap interface without your permission.
|
**Beware** that other sites you access via the _same_ IPFS gateway can read and modify your settings on the Uniswap interface without your permission.
|
||||||
You can avoid this issue by using a subdomain IPFS gateway. The preferred gateway URLs below utilize the CIDv1 of the release in the subdomain, and are relatively safer.
|
You can avoid this issue by using a subdomain IPFS gateway, or our alias to the latest release at [app.uniswap.org](https://app.uniswap.org).
|
||||||
|
The preferred URLs below are safe to use to access this specific release.
|
||||||
|
|
||||||
Preferred URLs:
|
Preferred URLs:
|
||||||
- https://${{ steps.convert_cidv0.outputs.cidv1 }}.ipfs.dweb.link/
|
- https://${{ steps.convert_cidv0.outputs.cidv1 }}.ipfs.dweb.link/
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Uniswap Frontend
|
# Uniswap Frontend
|
||||||
|
|
||||||
[](https://github.com/Uniswap/uniswap-frontend/actions?query=workflow%3ATests)
|
[](https://github.com/Uniswap/uniswap-interface/actions?query=workflow%3ATests)
|
||||||
[](https://prettier.io/)
|
[](https://prettier.io/)
|
||||||
|
|
||||||
An open source interface for Uniswap -- a protocol for decentralized exchange of Ethereum tokens.
|
An open source interface for Uniswap -- a protocol for decentralized exchange of Ethereum tokens.
|
||||||
@@ -16,7 +16,7 @@ An open source interface for Uniswap -- a protocol for decentralized exchange of
|
|||||||
## Accessing the frontend
|
## Accessing the frontend
|
||||||
|
|
||||||
To access the front end, use an IPFS gateway link from the
|
To access the front end, use an IPFS gateway link from the
|
||||||
[latest release](https://github.com/Uniswap/uniswap-frontend/releases/latest)
|
[latest release](https://github.com/Uniswap/uniswap-interface/releases/latest)
|
||||||
or visit [uniswap.exchange](https://uniswap.exchange).
|
or visit [uniswap.exchange](https://uniswap.exchange).
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
@@ -54,4 +54,4 @@ CI checks will run against all PRs.
|
|||||||
## Accessing Uniswap V1 interface
|
## Accessing Uniswap V1 interface
|
||||||
|
|
||||||
The Uniswap V1 interface for mainnet and testnets is accessible via IPFS gateways linked
|
The Uniswap V1 interface for mainnet and testnets is accessible via IPFS gateways linked
|
||||||
from the [v1.0.0 release](https://github.com/Uniswap/uniswap-frontend/releases/tag/v1.0.0).
|
from the [v1.0.0 release](https://github.com/Uniswap/uniswap-interface/releases/tag/v1.0.0).
|
||||||
27
netlify.toml
27
netlify.toml
@@ -1,27 +0,0 @@
|
|||||||
# block some countries
|
|
||||||
[[redirects]]
|
|
||||||
from = "/*"
|
|
||||||
to = "/451.html"
|
|
||||||
status = 451
|
|
||||||
force = true
|
|
||||||
conditions = {Country=["BY","CU","IR","IQ","CI","LR","KP","SD","SY","ZW"]}
|
|
||||||
headers = {Link="<https://uniswap.exchange>"}
|
|
||||||
|
|
||||||
# forward migrate
|
|
||||||
[[redirects]]
|
|
||||||
from = "https://migrate.uniswap.exchange/*"
|
|
||||||
to = "https://uniswap.exchange/migrate/v1"
|
|
||||||
status = 301
|
|
||||||
force = true
|
|
||||||
|
|
||||||
# forward v2 subdomain to apex
|
|
||||||
[[redirects]]
|
|
||||||
from = "https://v2.uniswap.exchange/*"
|
|
||||||
to = "https://uniswap.exchange/:splat"
|
|
||||||
status = 301
|
|
||||||
|
|
||||||
# support SPA setup
|
|
||||||
[[redirects]]
|
|
||||||
from = "/*"
|
|
||||||
to = "/index.html"
|
|
||||||
status = 200
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@uniswap/interface",
|
"name": "@uniswap/interface",
|
||||||
"description": "Uniswap Interface",
|
"description": "Uniswap Interface",
|
||||||
"homepage": "https://uniswap.exchange",
|
"homepage": ".",
|
||||||
"private": true,
|
"private": true,
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@ethersproject/address": "^5.0.0-beta.134",
|
"@ethersproject/address": "^5.0.0-beta.134",
|
||||||
@@ -81,7 +81,6 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "react-scripts start",
|
"start": "react-scripts start",
|
||||||
"build": "react-scripts build",
|
"build": "react-scripts build",
|
||||||
"ipfs-build": "cross-env PUBLIC_URL=\".\" react-scripts build",
|
|
||||||
"test": "react-scripts test --env=jsdom",
|
"test": "react-scripts test --env=jsdom",
|
||||||
"eject": "react-scripts eject",
|
"eject": "react-scripts eject",
|
||||||
"lint": "eslint 'src/**/*.{js,jsx,ts,tsx}'",
|
"lint": "eslint 'src/**/*.{js,jsx,ts,tsx}'",
|
||||||
|
|||||||
@@ -1,75 +0,0 @@
|
|||||||
{
|
|
||||||
"noWallet": "לא נמצא ארנק",
|
|
||||||
"wrongNetwork": "נבחרה רשת לא נכונה",
|
|
||||||
"switchNetwork": "{{ correctNetwork }} יש צורך לשנות את הרשת ל",
|
|
||||||
"installWeb3MobileBrowser": "יש צורך בארנק ווב3.0, תתקין מטאמאסק או ארנק דומה",
|
|
||||||
"installMetamask": " Metamask יש צורך להתקין תוסף מטאמאסק לדפדפן, חפשו בגוגל ",
|
|
||||||
"disconnected": "מנותק",
|
|
||||||
"swap": "המרה",
|
|
||||||
"send": "שליחה",
|
|
||||||
"pool": "להפקיד",
|
|
||||||
"betaWarning": "הפרויקט נמצא בשלב בטא, השתמשו באחריות",
|
|
||||||
"input": "מוכר",
|
|
||||||
"output": "אקבל",
|
|
||||||
"estimated": "הערכה",
|
|
||||||
"balance": "בארנק שלי {{ balanceInput }}",
|
|
||||||
"unlock": "שחרור נעילת ארנק",
|
|
||||||
"pending": "ממתין לאישור",
|
|
||||||
"selectToken": "בחרו את הטוקן להמרה",
|
|
||||||
"searchOrPaste": "הכניסו שם או כתובת של טוקן לחיפוש",
|
|
||||||
"noExchange": "לא מתאפשרת המרה",
|
|
||||||
"exchangeRate": "שער המרה",
|
|
||||||
"enterValueCont": "כדי להמשיך {{ missingCurrencyValue }} הזינו ",
|
|
||||||
"selectTokenCont": "בחרו טוקן כדי להמשיך",
|
|
||||||
"noLiquidity": "אין נזילות",
|
|
||||||
"unlockTokenCont": "יש צורך לאשר את הטוקן למסחר",
|
|
||||||
"transactionDetails": "פרטי הטרנזקציה",
|
|
||||||
"hideDetails": "הסתר פרטים נוספים",
|
|
||||||
"youAreSelling": "למכירה",
|
|
||||||
"orTransFail": "או שהטרנזקציה תיכשל",
|
|
||||||
"youWillReceive": "תוצר המרה מינימלי",
|
|
||||||
"youAreBuying": "קונה",
|
|
||||||
"itWillCost": "זה יעלה",
|
|
||||||
"insufficientBalance": "אין בחשבון מספיק מטבעות",
|
|
||||||
"inputNotValid": "קלט לא תקין",
|
|
||||||
"differentToken": "יש צורך בטוקנים שונים",
|
|
||||||
"noRecipient": "לא הוכנסה כתובת ארנק יעד",
|
|
||||||
"invalidRecipient": "לא הוכנסה כתובת תקינה",
|
|
||||||
"recipientAddress": "כתובת יעד",
|
|
||||||
"youAreSending": "כמות לשליחה",
|
|
||||||
"willReceive": "יתקבל לכל הפחות",
|
|
||||||
"to": "אל",
|
|
||||||
"addLiquidity": "להוספת נזילות למאגר",
|
|
||||||
"deposit": "הפקדה",
|
|
||||||
"currentPoolSize": "גודל מאגר הנזילות הכולל",
|
|
||||||
"yourPoolShare": "חלקך במאגר הנזילות",
|
|
||||||
"noZero": "אפס אינו ערך תקין",
|
|
||||||
"mustBeETH": "ETH חייב להופיע באחד מהצדדים",
|
|
||||||
"enterCurrencyOrLabelCont": "כדי להמשיך {{ inputCurrency }} או {{ label }} הכנס",
|
|
||||||
"youAreAdding": "מתווספים למאגר",
|
|
||||||
"and": "וגם",
|
|
||||||
"intoPool": "לתוך הנזילות",
|
|
||||||
"outPool": "מתוך",
|
|
||||||
"youWillMint": "יונפקו לכם",
|
|
||||||
"liquidityTokens": "טוקנים של נזילות",
|
|
||||||
"totalSupplyIs": "חלקך במאגר הנזילות",
|
|
||||||
"youAreSettingExRate": "שער ההמרה יקבע על ידך",
|
|
||||||
"totalSupplyIs0": "אין לך טוקנים של נזילות",
|
|
||||||
"tokenWorth": "שווי כל טוקן נזילות הינו",
|
|
||||||
"firstLiquidity": "את\ה הראשון\ה שמזרים נזילות למאגר",
|
|
||||||
"initialExchangeRate": "ושל האית'ר הינן בערך שווה {{ label }} תוודאו שההפקדה של הטוקן",
|
|
||||||
"removeLiquidity": "הוצאה של נזילות",
|
|
||||||
"poolTokens": "טוקנים של מאגר הנזילות",
|
|
||||||
"enterLabelCont": "כדי להמשיך {{ label }} הכנס ",
|
|
||||||
"youAreRemoving": "יוסרו",
|
|
||||||
"youWillRemove": "יוסרו",
|
|
||||||
"createExchange": "ליצירת זוג מסחר",
|
|
||||||
"invalidTokenAddress": "כתובת טוקן לא נכונה",
|
|
||||||
"exchangeExists": "{{ label }} כבר קיים זוג המרה עבור",
|
|
||||||
"invalidSymbol": "תו שגוי",
|
|
||||||
"invalidDecimals": "ספרות עשרוניות שגויות",
|
|
||||||
"tokenAddress": "כתובת הטוקן",
|
|
||||||
"label": "שם",
|
|
||||||
"decimals": "ספרות עשרויות",
|
|
||||||
"enterTokenCont": "הכניסו כתובת טוקן כדי להמשיך"
|
|
||||||
}
|
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
"youAreSettingExRate": "שער ההמרה יקבע על ידך",
|
"youAreSettingExRate": "שער ההמרה יקבע על ידך",
|
||||||
"totalSupplyIs0": "אין לך טוקנים של נזילות",
|
"totalSupplyIs0": "אין לך טוקנים של נזילות",
|
||||||
"tokenWorth": "שווי כל טוקן נזילות הינו",
|
"tokenWorth": "שווי כל טוקן נזילות הינו",
|
||||||
"firstLiquidity": "את\ה הראשון\ה שמזרים נזילות למאגר",
|
"firstLiquidity": "אתה הראשוןה שמזרים נזילות למאגר",
|
||||||
"initialExchangeRate": "ושל האית'ר הינן בערך שווה {{ label }} תוודאו שההפקדה של הטוקן",
|
"initialExchangeRate": "ושל האית'ר הינן בערך שווה {{ label }} תוודאו שההפקדה של הטוקן",
|
||||||
"removeLiquidity": "הוצאה של נזילות",
|
"removeLiquidity": "הוצאה של נזילות",
|
||||||
"poolTokens": "טוקנים של מאגר הנזילות",
|
"poolTokens": "טוקנים של מאגר הנזילות",
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
import React from 'react'
|
|
||||||
import styled from 'styled-components'
|
|
||||||
import { Send, Sun, Moon } from 'react-feather'
|
|
||||||
import { useDarkModeManager } from '../../state/user/hooks'
|
|
||||||
|
|
||||||
import { ButtonSecondary } from '../Button'
|
|
||||||
|
|
||||||
const FooterFrame = styled.div`
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: flex-end;
|
|
||||||
position: fixed;
|
|
||||||
right: 1rem;
|
|
||||||
bottom: 1rem;
|
|
||||||
${({ theme }) => theme.mediaWidth.upToExtraSmall`
|
|
||||||
display: none;
|
|
||||||
`};
|
|
||||||
`
|
|
||||||
|
|
||||||
export default function Footer() {
|
|
||||||
const [darkMode, toggleDarkMode] = useDarkModeManager()
|
|
||||||
|
|
||||||
return (
|
|
||||||
<FooterFrame>
|
|
||||||
<form action="https://forms.gle/DaLuqvJsVhVaAM3J9" target="_blank">
|
|
||||||
<ButtonSecondary p="8px 12px">
|
|
||||||
<Send size={16} style={{ marginRight: '8px' }} /> Feedback
|
|
||||||
</ButtonSecondary>
|
|
||||||
</form>
|
|
||||||
<ButtonSecondary onClick={toggleDarkMode} p="8px 12px" ml="0.5rem" width="min-content">
|
|
||||||
{darkMode ? <Sun size={16} /> : <Moon size={16} />}
|
|
||||||
</ButtonSecondary>
|
|
||||||
</FooterFrame>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
@@ -6,16 +6,16 @@ import useParsedQueryString from '../../hooks/useParsedQueryString'
|
|||||||
import useToggledVersion, { Version } from '../../hooks/useToggledVersion'
|
import useToggledVersion, { Version } from '../../hooks/useToggledVersion'
|
||||||
|
|
||||||
const VersionLabel = styled.span<{ enabled: boolean }>`
|
const VersionLabel = styled.span<{ enabled: boolean }>`
|
||||||
padding: ${({ enabled }) => (enabled ? '0.15rem 0.5rem 0.16rem 0.45rem' : '0.15rem 0.5rem 0.16rem 0.35rem')};
|
padding: 0.35rem 0.6rem;
|
||||||
border-radius: 14px;
|
border-radius: 12px;
|
||||||
background: ${({ theme, enabled }) => (enabled ? theme.primary1 : 'none')};
|
background: ${({ theme, enabled }) => (enabled ? theme.primary1 : 'none')};
|
||||||
color: ${({ theme, enabled }) => (enabled ? theme.white : theme.primary1)};
|
color: ${({ theme, enabled }) => (enabled ? theme.white : theme.text1)};
|
||||||
font-size: 0.825rem;
|
font-size: 1rem;
|
||||||
font-weight: 400;
|
font-weight: ${({ theme, enabled }) => (enabled ? '500' : '400')};
|
||||||
:hover {
|
:hover {
|
||||||
user-select: ${({ enabled }) => (enabled ? 'none' : 'initial')};
|
user-select: ${({ enabled }) => (enabled ? 'none' : 'initial')};
|
||||||
background: ${({ theme, enabled }) => (enabled ? theme.primary1 : 'none')};
|
background: ${({ theme, enabled }) => (enabled ? theme.primary1 : 'none')};
|
||||||
color: ${({ theme, enabled }) => (enabled ? theme.white : theme.primary3)};
|
color: ${({ theme, enabled }) => (enabled ? theme.white : theme.text1)};
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
@@ -25,21 +25,21 @@ interface VersionToggleProps extends React.ComponentProps<typeof Link> {
|
|||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
const VersionToggle = styled(({ enabled, ...rest }: VersionToggleProps) => <Link {...rest} />)<VersionToggleProps>`
|
const VersionToggle = styled(({ enabled, ...rest }: VersionToggleProps) => <Link {...rest} />)<VersionToggleProps>`
|
||||||
border-radius: 16px;
|
border-radius: 12px;
|
||||||
opacity: ${({ enabled }) => (enabled ? 1 : 0.5)};
|
opacity: ${({ enabled }) => (enabled ? 1 : 0.5)};
|
||||||
cursor: ${({ enabled }) => (enabled ? 'pointer' : 'default')};
|
cursor: ${({ enabled }) => (enabled ? 'pointer' : 'default')};
|
||||||
background: ${({ theme }) => theme.primary5};
|
background: ${({ theme }) => theme.bg3};
|
||||||
border: 1px solid ${({ theme }) => theme.primary4};
|
|
||||||
color: ${({ theme }) => theme.primary1};
|
color: ${({ theme }) => theme.primary1};
|
||||||
display: flex;
|
display: flex;
|
||||||
width: fit-content;
|
width: fit-content;
|
||||||
|
margin-left: 0.5rem;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
:hover {
|
:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
export function VersionSwitch() {
|
export default function VersionSwitch() {
|
||||||
const version = useToggledVersion()
|
const version = useToggledVersion()
|
||||||
const location = useLocation()
|
const location = useLocation()
|
||||||
const query = useParsedQueryString()
|
const query = useParsedQueryString()
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import Menu from '../Menu'
|
|||||||
|
|
||||||
import Row, { RowBetween } from '../Row'
|
import Row, { RowBetween } from '../Row'
|
||||||
import Web3Status from '../Web3Status'
|
import Web3Status from '../Web3Status'
|
||||||
import { VersionSwitch } from './VersionSwitch'
|
import VersionSwitch from './VersionSwitch'
|
||||||
|
|
||||||
const HeaderFrame = styled.div`
|
const HeaderFrame = styled.div`
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -45,6 +45,15 @@ const HeaderElement = styled.div`
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
`
|
`
|
||||||
|
|
||||||
|
const HeaderElementWrap = styled.div`
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
${({ theme }) => theme.mediaWidth.upToExtraSmall`
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
`};
|
||||||
|
`
|
||||||
|
|
||||||
const Title = styled.div`
|
const Title = styled.div`
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@@ -70,6 +79,7 @@ const AccountElement = styled.div<{ active: boolean }>`
|
|||||||
background-color: ${({ theme, active }) => (!active ? theme.bg1 : theme.bg3)};
|
background-color: ${({ theme, active }) => (!active ? theme.bg1 : theme.bg3)};
|
||||||
border-radius: 12px;
|
border-radius: 12px;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
:focus {
|
:focus {
|
||||||
border: 1px solid blue;
|
border: 1px solid blue;
|
||||||
@@ -80,10 +90,7 @@ const TestnetWrapper = styled.div`
|
|||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
width: fit-content;
|
width: fit-content;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
|
pointer-events: auto;
|
||||||
${({ theme }) => theme.mediaWidth.upToSmall`
|
|
||||||
display: none;
|
|
||||||
`};
|
|
||||||
`
|
`
|
||||||
|
|
||||||
const NetworkCard = styled(YellowCard)`
|
const NetworkCard = styled(YellowCard)`
|
||||||
@@ -120,6 +127,16 @@ const MigrateBanner = styled(AutoColumn)`
|
|||||||
`};
|
`};
|
||||||
`
|
`
|
||||||
|
|
||||||
|
const HeaderControls = styled.div`
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: flex-end;
|
||||||
|
|
||||||
|
${({ theme }) => theme.mediaWidth.upToSmall`
|
||||||
|
flex-direction: column;
|
||||||
|
`};
|
||||||
|
`
|
||||||
|
|
||||||
const NETWORK_LABELS: { [chainId in ChainId]: string | null } = {
|
const NETWORK_LABELS: { [chainId in ChainId]: string | null } = {
|
||||||
[ChainId.MAINNET]: null,
|
[ChainId.MAINNET]: null,
|
||||||
[ChainId.RINKEBY]: 'Rinkeby',
|
[ChainId.RINKEBY]: 'Rinkeby',
|
||||||
@@ -128,12 +145,6 @@ const NETWORK_LABELS: { [chainId in ChainId]: string | null } = {
|
|||||||
[ChainId.KOVAN]: 'Kovan'
|
[ChainId.KOVAN]: 'Kovan'
|
||||||
}
|
}
|
||||||
|
|
||||||
const BalanceWrapper = styled.div`
|
|
||||||
${({ theme }) => theme.mediaWidth.upToExtraSmall`
|
|
||||||
display: none;
|
|
||||||
`};
|
|
||||||
`
|
|
||||||
|
|
||||||
export default function Header() {
|
export default function Header() {
|
||||||
const { account, chainId } = useActiveWeb3React()
|
const { account, chainId } = useActiveWeb3React()
|
||||||
|
|
||||||
@@ -153,7 +164,7 @@ export default function Header() {
|
|||||||
</StyledInternalLink>
|
</StyledInternalLink>
|
||||||
.
|
.
|
||||||
</MigrateBanner>
|
</MigrateBanner>
|
||||||
<RowBetween padding="1rem">
|
<RowBetween style={{ alignItems: 'flex-start' }} padding="1rem 1rem 0 1rem">
|
||||||
<HeaderElement>
|
<HeaderElement>
|
||||||
<Title>
|
<Title>
|
||||||
<UniIcon id="link" to="/">
|
<UniIcon id="link" to="/">
|
||||||
@@ -171,25 +182,27 @@ export default function Header() {
|
|||||||
</TitleText>
|
</TitleText>
|
||||||
)}
|
)}
|
||||||
</Title>
|
</Title>
|
||||||
<TestnetWrapper style={{ pointerEvents: 'auto' }}>{!isMobile && <VersionSwitch />}</TestnetWrapper>
|
|
||||||
</HeaderElement>
|
</HeaderElement>
|
||||||
<HeaderElement>
|
<HeaderControls>
|
||||||
<TestnetWrapper>
|
<HeaderElement>
|
||||||
{!isMobile && NETWORK_LABELS[chainId] && <NetworkCard>{NETWORK_LABELS[chainId]}</NetworkCard>}
|
<TestnetWrapper>
|
||||||
</TestnetWrapper>
|
{!isMobile && NETWORK_LABELS[chainId] && <NetworkCard>{NETWORK_LABELS[chainId]}</NetworkCard>}
|
||||||
<AccountElement active={!!account} style={{ pointerEvents: 'auto' }}>
|
</TestnetWrapper>
|
||||||
<BalanceWrapper>
|
<AccountElement active={!!account} style={{ pointerEvents: 'auto' }}>
|
||||||
{account && userEthBalance ? (
|
{account && userEthBalance ? (
|
||||||
<Text style={{ flexShrink: 0 }} pl="0.75rem" pr="0.5rem" fontWeight={500}>
|
<Text style={{ flexShrink: 0 }} pl="0.75rem" pr="0.5rem" fontWeight={500}>
|
||||||
{userEthBalance?.toSignificant(4)} ETH
|
{userEthBalance?.toSignificant(4)} ETH
|
||||||
</Text>
|
</Text>
|
||||||
) : null}
|
) : null}
|
||||||
</BalanceWrapper>
|
<Web3Status />
|
||||||
<Web3Status />
|
</AccountElement>
|
||||||
</AccountElement>
|
</HeaderElement>
|
||||||
<Settings />
|
<HeaderElementWrap>
|
||||||
<Menu />
|
<VersionSwitch />
|
||||||
</HeaderElement>
|
<Settings />
|
||||||
|
<Menu />
|
||||||
|
</HeaderElementWrap>
|
||||||
|
</HeaderControls>
|
||||||
</RowBetween>
|
</RowBetween>
|
||||||
</HeaderFrame>
|
</HeaderFrame>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ const MenuItem = styled(ExternalLink)`
|
|||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
const CODE_LINK = 'https://github.com/Uniswap/uniswap-frontend'
|
const CODE_LINK = 'https://github.com/Uniswap/uniswap-interface'
|
||||||
|
|
||||||
export default function Menu() {
|
export default function Menu() {
|
||||||
const node = useRef<HTMLDivElement>()
|
const node = useRef<HTMLDivElement>()
|
||||||
|
|||||||
@@ -112,17 +112,10 @@ export default function Modal({
|
|||||||
const [{ y }, set] = useSpring(() => ({ y: 0, config: { mass: 1, tension: 210, friction: 20 } }))
|
const [{ y }, set] = useSpring(() => ({ y: 0, config: { mass: 1, tension: 210, friction: 20 } }))
|
||||||
const bind = useGesture({
|
const bind = useGesture({
|
||||||
onDrag: state => {
|
onDrag: state => {
|
||||||
let velocity = state.velocity
|
|
||||||
if (velocity < 1) {
|
|
||||||
velocity = 1
|
|
||||||
}
|
|
||||||
if (velocity > 8) {
|
|
||||||
velocity = 8
|
|
||||||
}
|
|
||||||
set({
|
set({
|
||||||
y: state.down ? state.movement[1] : 0
|
y: state.down ? state.movement[1] : 0
|
||||||
})
|
})
|
||||||
if (velocity > 3 && state.direction[1] > 0) {
|
if (state.velocity > 3 && state.direction[1] > 0) {
|
||||||
onDismiss()
|
onDismiss()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,36 +2,16 @@ import { Placement } from '@popperjs/core'
|
|||||||
import { transparentize } from 'polished'
|
import { transparentize } from 'polished'
|
||||||
import React, { useState } from 'react'
|
import React, { useState } from 'react'
|
||||||
import { usePopper } from 'react-popper'
|
import { usePopper } from 'react-popper'
|
||||||
import styled, { keyframes } from 'styled-components'
|
import styled from 'styled-components'
|
||||||
import useInterval from '../../hooks/useInterval'
|
import useInterval from '../../hooks/useInterval'
|
||||||
import Portal from '@reach/portal'
|
import Portal from '@reach/portal'
|
||||||
|
|
||||||
const fadeIn = keyframes`
|
|
||||||
from {
|
|
||||||
opacity : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
to {
|
|
||||||
opacity : 1;
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
const fadeOut = keyframes`
|
|
||||||
from {
|
|
||||||
opacity : 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
to {
|
|
||||||
opacity : 0;
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
const PopoverContainer = styled.div<{ show: boolean }>`
|
const PopoverContainer = styled.div<{ show: boolean }>`
|
||||||
z-index: 9999;
|
z-index: 9999;
|
||||||
|
|
||||||
visibility: ${props => (!props.show ? 'hidden' : 'visible')};
|
visibility: ${props => (props.show ? 'visible' : 'hidden')};
|
||||||
animation: ${props => (!props.show ? fadeOut : fadeIn)} 150ms linear;
|
opacity: ${props => (props.show ? 1 : 0)};
|
||||||
transition: visibility 150ms linear;
|
transition: visibility 150ms linear, opacity 150ms linear;
|
||||||
|
|
||||||
background: ${({ theme }) => theme.bg2};
|
background: ${({ theme }) => theme.bg2};
|
||||||
border: 1px solid ${({ theme }) => theme.bg3};
|
border: 1px solid ${({ theme }) => theme.bg3};
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ import { WETH } from '@uniswap/sdk'
|
|||||||
|
|
||||||
import EthereumLogo from '../../assets/images/ethereum-logo.png'
|
import EthereumLogo from '../../assets/images/ethereum-logo.png'
|
||||||
|
|
||||||
const TOKEN_ICON_API = address =>
|
const getTokenLogoURL = address =>
|
||||||
`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/${address}/logo.png`
|
`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/${address}/logo.png`
|
||||||
const BAD_IMAGES = {}
|
const NO_LOGO_ADDRESSES: { [tokenAddress: string]: true } = {}
|
||||||
|
|
||||||
const Image = styled.img<{ size: string }>`
|
const Image = styled.img<{ size: string }>`
|
||||||
width: ${({ size }) => size};
|
width: ${({ size }) => size};
|
||||||
@@ -44,20 +44,16 @@ export default function TokenLogo({
|
|||||||
size?: string
|
size?: string
|
||||||
style?: React.CSSProperties
|
style?: React.CSSProperties
|
||||||
}) {
|
}) {
|
||||||
const [error, setError] = useState(false)
|
const [, refresh] = useState<number>(0)
|
||||||
const { chainId } = useActiveWeb3React()
|
const { chainId } = useActiveWeb3React()
|
||||||
|
|
||||||
// mock rinkeby DAI
|
|
||||||
if (chainId === 4 && address === '0xc7AD46e0b8a400Bb3C915120d284AafbA8fc4735') {
|
|
||||||
address = '0x6B175474E89094C44Da98b954EedeAC495271d0F'
|
|
||||||
}
|
|
||||||
|
|
||||||
let path = ''
|
let path = ''
|
||||||
|
const validated = isAddress(address)
|
||||||
// hard code to show ETH instead of WETH in UI
|
// hard code to show ETH instead of WETH in UI
|
||||||
if (address === WETH[chainId].address) {
|
if (validated === WETH[chainId].address) {
|
||||||
return <StyledEthereumLogo src={EthereumLogo} size={size} {...rest} />
|
return <StyledEthereumLogo src={EthereumLogo} size={size} {...rest} />
|
||||||
} else if (!error && !BAD_IMAGES[address] && isAddress(address)) {
|
} else if (!NO_LOGO_ADDRESSES[address] && validated) {
|
||||||
path = TOKEN_ICON_API(address)
|
path = getTokenLogoURL(validated)
|
||||||
} else {
|
} else {
|
||||||
return (
|
return (
|
||||||
<Emoji {...rest} size={size}>
|
<Emoji {...rest} size={size}>
|
||||||
@@ -75,8 +71,8 @@ export default function TokenLogo({
|
|||||||
src={path}
|
src={path}
|
||||||
size={size}
|
size={size}
|
||||||
onError={() => {
|
onError={() => {
|
||||||
BAD_IMAGES[address] = true
|
NO_LOGO_ADDRESSES[address] = true
|
||||||
setError(true)
|
refresh(i => i + 1)
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,19 +1,16 @@
|
|||||||
import { Trade, TradeType } from '@uniswap/sdk'
|
import { Trade, TradeType } from '@uniswap/sdk'
|
||||||
import React, { useContext } from 'react'
|
import React, { useContext } from 'react'
|
||||||
import { ChevronRight } from 'react-feather'
|
|
||||||
import { Flex } from 'rebass'
|
|
||||||
import { ThemeContext } from 'styled-components'
|
import { ThemeContext } from 'styled-components'
|
||||||
import { Field } from '../../state/swap/actions'
|
import { Field } from '../../state/swap/actions'
|
||||||
|
import { useUserSlippageTolerance } from '../../state/user/hooks'
|
||||||
import { TYPE } from '../../theme'
|
import { TYPE } from '../../theme'
|
||||||
import { computeSlippageAdjustedAmounts, computeTradePriceBreakdown } from '../../utils/prices'
|
import { computeSlippageAdjustedAmounts, computeTradePriceBreakdown } from '../../utils/prices'
|
||||||
import { AutoColumn } from '../Column'
|
import { AutoColumn } from '../Column'
|
||||||
import { SectionBreak } from './styleds'
|
|
||||||
import QuestionHelper from '../QuestionHelper'
|
import QuestionHelper from '../QuestionHelper'
|
||||||
import { RowBetween, RowFixed } from '../Row'
|
import { RowBetween, RowFixed } from '../Row'
|
||||||
import FormattedPriceImpact from './FormattedPriceImpact'
|
import FormattedPriceImpact from './FormattedPriceImpact'
|
||||||
import TokenLogo from '../TokenLogo'
|
import { SectionBreak } from './styleds'
|
||||||
import flatMap from 'lodash.flatmap'
|
import SwapRoute from './SwapRoute'
|
||||||
import { useUserSlippageTolerance } from '../../state/user/hooks'
|
|
||||||
|
|
||||||
function TradeSummary({ trade, allowedSlippage }: { trade: Trade; allowedSlippage: number }) {
|
function TradeSummary({ trade, allowedSlippage }: { trade: Trade; allowedSlippage: number }) {
|
||||||
const theme = useContext(ThemeContext)
|
const theme = useContext(ThemeContext)
|
||||||
@@ -79,49 +76,19 @@ export function AdvancedSwapDetails({ trade }: AdvancedSwapDetailsProps) {
|
|||||||
return (
|
return (
|
||||||
<AutoColumn gap="md">
|
<AutoColumn gap="md">
|
||||||
{trade && <TradeSummary trade={trade} allowedSlippage={allowedSlippage} />}
|
{trade && <TradeSummary trade={trade} allowedSlippage={allowedSlippage} />}
|
||||||
{showRoute && <SectionBreak />}
|
|
||||||
{showRoute && (
|
{showRoute && (
|
||||||
<AutoColumn style={{ padding: '0 24px' }}>
|
<>
|
||||||
<RowFixed>
|
<SectionBreak />
|
||||||
<TYPE.black fontSize={14} fontWeight={400} color={theme.text2}>
|
<AutoColumn style={{ padding: '0 24px' }}>
|
||||||
Route
|
<RowFixed>
|
||||||
</TYPE.black>
|
<TYPE.black fontSize={14} fontWeight={400} color={theme.text2}>
|
||||||
<QuestionHelper text="Routing through these tokens resulted in the best price for your trade." />
|
Route
|
||||||
</RowFixed>
|
</TYPE.black>
|
||||||
<Flex
|
<QuestionHelper text="Routing through these tokens resulted in the best price for your trade." />
|
||||||
px="1rem"
|
</RowFixed>
|
||||||
py="0.5rem"
|
<SwapRoute trade={trade} />
|
||||||
my="0.5rem"
|
</AutoColumn>
|
||||||
style={{ border: `1px solid ${theme.bg3}`, borderRadius: '1rem' }}
|
</>
|
||||||
flexWrap="wrap"
|
|
||||||
width="100%"
|
|
||||||
justifyContent="space-evenly"
|
|
||||||
alignItems="center"
|
|
||||||
>
|
|
||||||
{flatMap(
|
|
||||||
trade.route.path,
|
|
||||||
// add a null in-between each item
|
|
||||||
(token, i, array) => {
|
|
||||||
const lastItem = i === array.length - 1
|
|
||||||
return lastItem ? [token] : [token, null]
|
|
||||||
}
|
|
||||||
).map((token, i) => {
|
|
||||||
// use null as an indicator to insert chevrons
|
|
||||||
if (token === null) {
|
|
||||||
return <ChevronRight key={i} color={theme.text2} />
|
|
||||||
} else {
|
|
||||||
return (
|
|
||||||
<Flex my="0.5rem" alignItems="center" key={token.address} style={{ flexShrink: 0 }}>
|
|
||||||
<TokenLogo address={token.address} size="1.5rem" />
|
|
||||||
<TYPE.black fontSize={14} color={theme.text1} ml="0.5rem">
|
|
||||||
{token.symbol}
|
|
||||||
</TYPE.black>
|
|
||||||
</Flex>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
})}
|
|
||||||
</Flex>
|
|
||||||
</AutoColumn>
|
|
||||||
)}
|
)}
|
||||||
</AutoColumn>
|
</AutoColumn>
|
||||||
)
|
)
|
||||||
|
|||||||
38
src/components/swap/SwapRoute.tsx
Normal file
38
src/components/swap/SwapRoute.tsx
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
import { Trade } from '@uniswap/sdk'
|
||||||
|
import React, { Fragment, memo, useContext } from 'react'
|
||||||
|
import { ChevronRight } from 'react-feather'
|
||||||
|
import { Flex } from 'rebass'
|
||||||
|
import { ThemeContext } from 'styled-components'
|
||||||
|
import { TYPE } from '../../theme'
|
||||||
|
import TokenLogo from '../TokenLogo'
|
||||||
|
|
||||||
|
export default memo(function SwapRoute({ trade }: { trade: Trade }) {
|
||||||
|
const theme = useContext(ThemeContext)
|
||||||
|
return (
|
||||||
|
<Flex
|
||||||
|
px="1rem"
|
||||||
|
py="0.5rem"
|
||||||
|
my="0.5rem"
|
||||||
|
style={{ border: `1px solid ${theme.bg3}`, borderRadius: '1rem' }}
|
||||||
|
flexWrap="wrap"
|
||||||
|
width="100%"
|
||||||
|
justifyContent="space-evenly"
|
||||||
|
alignItems="center"
|
||||||
|
>
|
||||||
|
{trade.route.path.map((token, i, path) => {
|
||||||
|
const isLastItem: boolean = i === path.length - 1
|
||||||
|
return (
|
||||||
|
<Fragment key={i}>
|
||||||
|
<Flex my="0.5rem" alignItems="center" style={{ flexShrink: 0 }}>
|
||||||
|
<TokenLogo address={token.address} size="1.5rem" />
|
||||||
|
<TYPE.black fontSize={14} color={theme.text1} ml="0.5rem">
|
||||||
|
{token.symbol}
|
||||||
|
</TYPE.black>
|
||||||
|
</Flex>
|
||||||
|
{isLastItem ? null : <ChevronRight color={theme.text2} />}
|
||||||
|
</Fragment>
|
||||||
|
)
|
||||||
|
})}
|
||||||
|
</Flex>
|
||||||
|
)
|
||||||
|
})
|
||||||
@@ -1,27 +1,40 @@
|
|||||||
import { ChainId, JSBI, Percent, Token, WETH, Pair, TokenAmount } from '@uniswap/sdk'
|
import { ChainId, JSBI, Percent, Token, WETH, Pair, TokenAmount } from '@uniswap/sdk'
|
||||||
|
|
||||||
import { fortmatic, injected, portis, walletconnect, walletlink } from '../connectors'
|
import { fortmatic, injected, portis, walletconnect, walletlink } from '../connectors'
|
||||||
|
import { COMP, DAI, MKR, USDC, USDT } from './tokens/mainnet'
|
||||||
|
|
||||||
export const ROUTER_ADDRESS = '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D'
|
export const ROUTER_ADDRESS = '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D'
|
||||||
|
|
||||||
// used to construct intermediary pairs for trading
|
// a list of tokens by chain
|
||||||
export const BASES_TO_CHECK_TRADES_AGAINST: { readonly [chainId in ChainId]: Token[] } = {
|
type ChainTokenList = {
|
||||||
[ChainId.MAINNET]: [
|
readonly [chainId in ChainId]: Token[]
|
||||||
WETH[ChainId.MAINNET],
|
}
|
||||||
new Token(ChainId.MAINNET, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18, 'DAI', 'Dai Stablecoin'),
|
|
||||||
new Token(ChainId.MAINNET, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 6, 'USDC', 'USD//C')
|
const WETH_ONLY: ChainTokenList = {
|
||||||
],
|
[ChainId.MAINNET]: [WETH[ChainId.MAINNET]],
|
||||||
[ChainId.ROPSTEN]: [WETH[ChainId.ROPSTEN]],
|
[ChainId.ROPSTEN]: [WETH[ChainId.ROPSTEN]],
|
||||||
[ChainId.RINKEBY]: [WETH[ChainId.RINKEBY]],
|
[ChainId.RINKEBY]: [WETH[ChainId.RINKEBY]],
|
||||||
[ChainId.GÖRLI]: [WETH[ChainId.GÖRLI]],
|
[ChainId.GÖRLI]: [WETH[ChainId.GÖRLI]],
|
||||||
[ChainId.KOVAN]: [WETH[ChainId.KOVAN]]
|
[ChainId.KOVAN]: [WETH[ChainId.KOVAN]]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// used to construct intermediary pairs for trading
|
||||||
|
export const BASES_TO_CHECK_TRADES_AGAINST: ChainTokenList = {
|
||||||
|
...WETH_ONLY,
|
||||||
|
[ChainId.MAINNET]: [...WETH_ONLY[ChainId.MAINNET], DAI, USDC, USDT, COMP, MKR]
|
||||||
|
}
|
||||||
|
|
||||||
// used for display in the default list when adding liquidity
|
// used for display in the default list when adding liquidity
|
||||||
export const SUGGESTED_BASES = BASES_TO_CHECK_TRADES_AGAINST
|
export const SUGGESTED_BASES: ChainTokenList = {
|
||||||
|
...WETH_ONLY,
|
||||||
|
[ChainId.MAINNET]: [...WETH_ONLY[ChainId.MAINNET], DAI, USDC, USDT]
|
||||||
|
}
|
||||||
|
|
||||||
// used to construct the list of all pairs we consider by default in the frontend
|
// used to construct the list of all pairs we consider by default in the frontend
|
||||||
export const BASES_TO_TRACK_LIQUIDITY_FOR = BASES_TO_CHECK_TRADES_AGAINST
|
export const BASES_TO_TRACK_LIQUIDITY_FOR: ChainTokenList = {
|
||||||
|
...WETH_ONLY,
|
||||||
|
[ChainId.MAINNET]: [...WETH_ONLY[ChainId.MAINNET], DAI, USDC, USDT]
|
||||||
|
}
|
||||||
|
|
||||||
export const DUMMY_PAIRS_TO_PIN: { readonly [chainId in ChainId]?: Pair[] } = {
|
export const DUMMY_PAIRS_TO_PIN: { readonly [chainId in ChainId]?: Pair[] } = {
|
||||||
[ChainId.MAINNET]: [
|
[ChainId.MAINNET]: [
|
||||||
@@ -110,15 +123,6 @@ export const SUPPORTED_WALLETS =
|
|||||||
mobile: true,
|
mobile: true,
|
||||||
mobileOnly: true
|
mobileOnly: true
|
||||||
},
|
},
|
||||||
TRUST_WALLET_LINK: {
|
|
||||||
name: 'Open in Trust Wallet',
|
|
||||||
iconName: 'trustWallet.png',
|
|
||||||
description: 'iOS and Android app.',
|
|
||||||
href: 'https://link.trustwallet.com/open_url?coin_id=60&url=https://uniswap.exchange/swap',
|
|
||||||
color: '#1C74CC',
|
|
||||||
mobile: true,
|
|
||||||
mobileOnly: true
|
|
||||||
},
|
|
||||||
FORTMATIC: {
|
FORTMATIC: {
|
||||||
connector: fortmatic,
|
connector: fortmatic,
|
||||||
name: 'Fortmatic',
|
name: 'Fortmatic',
|
||||||
|
|||||||
@@ -1,5 +1,11 @@
|
|||||||
import { Token, ChainId } from '@uniswap/sdk'
|
import { Token, ChainId } from '@uniswap/sdk'
|
||||||
|
|
||||||
|
export const DAI = new Token(ChainId.MAINNET, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18, 'DAI', 'Dai Stablecoin')
|
||||||
|
export const USDC = new Token(ChainId.MAINNET, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 6, 'USDC', 'USD//C')
|
||||||
|
export const USDT = new Token(ChainId.MAINNET, '0xdAC17F958D2ee523a2206206994597C13D831ec7', 6, 'USDT', 'Tether USD')
|
||||||
|
export const COMP = new Token(ChainId.MAINNET, '0xc00e94Cb662C3520282E6f5717214004A7f26888', 18, 'COMP', 'Compound')
|
||||||
|
export const MKR = new Token(ChainId.MAINNET, '0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2', 18, 'MKR', 'Maker')
|
||||||
|
|
||||||
export default [
|
export default [
|
||||||
new Token(ChainId.MAINNET, '0xB6eD7644C69416d67B522e20bC294A9a9B405B31', 8, '0xBTC', '0xBitcoin Token'),
|
new Token(ChainId.MAINNET, '0xB6eD7644C69416d67B522e20bC294A9a9B405B31', 8, '0xBTC', '0xBitcoin Token'),
|
||||||
new Token(ChainId.MAINNET, '0xfC1E690f61EFd961294b3e1Ce3313fBD8aa4f85d', 18, 'aDAI', 'Aave Interest bearing DAI'),
|
new Token(ChainId.MAINNET, '0xfC1E690f61EFd961294b3e1Ce3313fBD8aa4f85d', 18, 'aDAI', 'Aave Interest bearing DAI'),
|
||||||
@@ -10,6 +16,7 @@ export default [
|
|||||||
new Token(ChainId.MAINNET, '0x27054b13b1B798B345b591a4d22e6562d47eA75a', 4, 'AST', 'AirSwap Token'),
|
new Token(ChainId.MAINNET, '0x27054b13b1B798B345b591a4d22e6562d47eA75a', 4, 'AST', 'AirSwap Token'),
|
||||||
new Token(ChainId.MAINNET, '0xBA11D00c5f74255f56a5E366F4F77f5A186d7f55', 18, 'BAND', 'BandToken'),
|
new Token(ChainId.MAINNET, '0xBA11D00c5f74255f56a5E366F4F77f5A186d7f55', 18, 'BAND', 'BandToken'),
|
||||||
new Token(ChainId.MAINNET, '0x0D8775F648430679A709E98d2b0Cb6250d2887EF', 18, 'BAT', 'Basic Attention Token'),
|
new Token(ChainId.MAINNET, '0x0D8775F648430679A709E98d2b0Cb6250d2887EF', 18, 'BAT', 'Basic Attention Token'),
|
||||||
|
new Token(ChainId.MAINNET, '0xba100000625a3754423978a60c9317c58a424e3D', 18, 'BAL', 'Balancer'),
|
||||||
new Token(ChainId.MAINNET, '0x107c4504cd79C5d2696Ea0030a8dD4e92601B82e', 18, 'BLT', 'Bloom Token'),
|
new Token(ChainId.MAINNET, '0x107c4504cd79C5d2696Ea0030a8dD4e92601B82e', 18, 'BLT', 'Bloom Token'),
|
||||||
new Token(ChainId.MAINNET, '0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C', 18, 'BNT', 'Bancor Network Token'),
|
new Token(ChainId.MAINNET, '0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C', 18, 'BNT', 'Bancor Network Token'),
|
||||||
new Token(ChainId.MAINNET, '0x0327112423F3A68efdF1fcF402F6c5CB9f7C33fd', 18, 'BTC++', 'PieDAO BTC++'),
|
new Token(ChainId.MAINNET, '0x0327112423F3A68efdF1fcF402F6c5CB9f7C33fd', 18, 'BTC++', 'PieDAO BTC++'),
|
||||||
@@ -19,9 +26,9 @@ export default [
|
|||||||
new Token(ChainId.MAINNET, '0x39AA39c021dfbaE8faC545936693aC917d5E7563', 8, 'cUSDC', 'Compound USD Coin'),
|
new Token(ChainId.MAINNET, '0x39AA39c021dfbaE8faC545936693aC917d5E7563', 8, 'cUSDC', 'Compound USD Coin'),
|
||||||
new Token(ChainId.MAINNET, '0xaaAEBE6Fe48E54f431b0C390CfaF0b017d09D42d', 4, 'CEL', 'Celsius'),
|
new Token(ChainId.MAINNET, '0xaaAEBE6Fe48E54f431b0C390CfaF0b017d09D42d', 4, 'CEL', 'Celsius'),
|
||||||
new Token(ChainId.MAINNET, '0x06AF07097C9Eeb7fD685c692751D5C66dB49c215', 18, 'CHAI', 'Chai'),
|
new Token(ChainId.MAINNET, '0x06AF07097C9Eeb7fD685c692751D5C66dB49c215', 18, 'CHAI', 'Chai'),
|
||||||
new Token(ChainId.MAINNET, '0xc00e94Cb662C3520282E6f5717214004A7f26888', 18, 'COMP', 'Compound'),
|
COMP,
|
||||||
new Token(ChainId.MAINNET, '0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359', 18, 'SAI', 'Dai Stablecoin v1.0 (SAI)'),
|
new Token(ChainId.MAINNET, '0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359', 18, 'SAI', 'Dai Stablecoin v1.0 (SAI)'),
|
||||||
new Token(ChainId.MAINNET, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18, 'DAI', 'Dai Stablecoin'),
|
DAI,
|
||||||
new Token(ChainId.MAINNET, '0x0Cf0Ee63788A0849fE5297F3407f701E122cC023', 18, 'DATA', 'Streamr DATAcoin'),
|
new Token(ChainId.MAINNET, '0x0Cf0Ee63788A0849fE5297F3407f701E122cC023', 18, 'DATA', 'Streamr DATAcoin'),
|
||||||
new Token(ChainId.MAINNET, '0xE0B7927c4aF23765Cb51314A0E0521A9645F0E2A', 9, 'DGD', 'DigixDAO'),
|
new Token(ChainId.MAINNET, '0xE0B7927c4aF23765Cb51314A0E0521A9645F0E2A', 9, 'DGD', 'DigixDAO'),
|
||||||
new Token(ChainId.MAINNET, '0x4f3AfEC4E5a3F2A6a1A411DEF7D7dFe50eE057bF', 9, 'DGX', 'Digix Gold Token'),
|
new Token(ChainId.MAINNET, '0x4f3AfEC4E5a3F2A6a1A411DEF7D7dFe50eE057bF', 9, 'DGX', 'Digix Gold Token'),
|
||||||
@@ -62,7 +69,7 @@ export default [
|
|||||||
new Token(ChainId.MAINNET, '0xd15eCDCF5Ea68e3995b2D0527A0aE0a3258302F8', 18, 'MCX', 'MachiX Token'),
|
new Token(ChainId.MAINNET, '0xd15eCDCF5Ea68e3995b2D0527A0aE0a3258302F8', 18, 'MCX', 'MachiX Token'),
|
||||||
new Token(ChainId.MAINNET, '0xa3d58c4E56fedCae3a7c43A725aeE9A71F0ece4e', 18, 'MET', 'Metronome'),
|
new Token(ChainId.MAINNET, '0xa3d58c4E56fedCae3a7c43A725aeE9A71F0ece4e', 18, 'MET', 'Metronome'),
|
||||||
new Token(ChainId.MAINNET, '0x80f222a749a2e18Eb7f676D371F19ad7EFEEe3b7', 18, 'MGN', 'Magnolia Token'),
|
new Token(ChainId.MAINNET, '0x80f222a749a2e18Eb7f676D371F19ad7EFEEe3b7', 18, 'MGN', 'Magnolia Token'),
|
||||||
new Token(ChainId.MAINNET, '0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2', 18, 'MKR', 'Maker'),
|
MKR,
|
||||||
new Token(ChainId.MAINNET, '0xec67005c4E498Ec7f55E092bd1d35cbC47C91892', 18, 'MLN', 'Melon Token'),
|
new Token(ChainId.MAINNET, '0xec67005c4E498Ec7f55E092bd1d35cbC47C91892', 18, 'MLN', 'Melon Token'),
|
||||||
new Token(ChainId.MAINNET, '0x957c30aB0426e0C93CD8241E2c60392d08c6aC8e', 0, 'MOD', 'Modum Token'),
|
new Token(ChainId.MAINNET, '0x957c30aB0426e0C93CD8241E2c60392d08c6aC8e', 0, 'MOD', 'Modum Token'),
|
||||||
new Token(ChainId.MAINNET, '0xe2f2a5C287993345a840Db3B0845fbC70f5935a5', 18, 'mUSD', 'mStable USD'),
|
new Token(ChainId.MAINNET, '0xe2f2a5C287993345a840Db3B0845fbC70f5935a5', 18, 'mUSD', 'mStable USD'),
|
||||||
@@ -112,9 +119,9 @@ export default [
|
|||||||
new Token(ChainId.MAINNET, '0x0000000000085d4780B73119b644AE5ecd22b376', 18, 'TUSD', 'TrueUSD'),
|
new Token(ChainId.MAINNET, '0x0000000000085d4780B73119b644AE5ecd22b376', 18, 'TUSD', 'TrueUSD'),
|
||||||
new Token(ChainId.MAINNET, '0x8400D94A5cb0fa0D041a3788e395285d61c9ee5e', 8, 'UBT', 'UniBright'),
|
new Token(ChainId.MAINNET, '0x8400D94A5cb0fa0D041a3788e395285d61c9ee5e', 8, 'UBT', 'UniBright'),
|
||||||
new Token(ChainId.MAINNET, '0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828', 18, 'UMA', 'UMA Voting Token v1'),
|
new Token(ChainId.MAINNET, '0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828', 18, 'UMA', 'UMA Voting Token v1'),
|
||||||
new Token(ChainId.MAINNET, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 6, 'USDC', 'USD//C'),
|
USDC,
|
||||||
new Token(ChainId.MAINNET, '0xA4Bdb11dc0a2bEC88d24A3aa1E6Bb17201112eBe', 6, 'USDS', 'StableUSD'),
|
new Token(ChainId.MAINNET, '0xA4Bdb11dc0a2bEC88d24A3aa1E6Bb17201112eBe', 6, 'USDS', 'StableUSD'),
|
||||||
new Token(ChainId.MAINNET, '0xdAC17F958D2ee523a2206206994597C13D831ec7', 6, 'USDT', 'Tether USD'),
|
USDT,
|
||||||
new Token(ChainId.MAINNET, '0xeb269732ab75A6fD61Ea60b06fE994cD32a83549', 18, 'USDx', 'dForce'),
|
new Token(ChainId.MAINNET, '0xeb269732ab75A6fD61Ea60b06fE994cD32a83549', 18, 'USDx', 'dForce'),
|
||||||
new Token(ChainId.MAINNET, '0x8f3470A7388c05eE4e7AF3d01D8C722b0FF52374', 18, 'VERI', 'Veritaseum'),
|
new Token(ChainId.MAINNET, '0x8f3470A7388c05eE4e7AF3d01D8C722b0FF52374', 18, 'VERI', 'Veritaseum'),
|
||||||
new Token(ChainId.MAINNET, '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', 8, 'WBTC', 'Wrapped BTC'),
|
new Token(ChainId.MAINNET, '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', 8, 'WBTC', 'Wrapped BTC'),
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
import { useMemo } from 'react'
|
import { Pair, Token, TokenAmount, Trade } from '@uniswap/sdk'
|
||||||
import { Token, TokenAmount, Trade, ChainId, Pair } from '@uniswap/sdk'
|
|
||||||
import flatMap from 'lodash.flatmap'
|
import flatMap from 'lodash.flatmap'
|
||||||
|
import { useMemo } from 'react'
|
||||||
import { useActiveWeb3React } from './index'
|
|
||||||
import { usePairs } from '../data/Reserves'
|
|
||||||
|
|
||||||
import { BASES_TO_CHECK_TRADES_AGAINST } from '../constants'
|
import { BASES_TO_CHECK_TRADES_AGAINST } from '../constants'
|
||||||
|
import { usePairs } from '../data/Reserves'
|
||||||
|
|
||||||
|
import { useActiveWeb3React } from './index'
|
||||||
|
|
||||||
function useAllCommonPairs(tokenA?: Token, tokenB?: Token): Pair[] {
|
function useAllCommonPairs(tokenA?: Token, tokenB?: Token): Pair[] {
|
||||||
const { chainId } = useActiveWeb3React()
|
const { chainId } = useActiveWeb3React()
|
||||||
|
|
||||||
const bases = useMemo(() => BASES_TO_CHECK_TRADES_AGAINST[chainId as ChainId] ?? [], [chainId])
|
const bases: Token[] = chainId ? BASES_TO_CHECK_TRADES_AGAINST[chainId] : []
|
||||||
|
|
||||||
const allPairCombinations: [Token | undefined, Token | undefined][] = useMemo(
|
const allPairCombinations: [Token | undefined, Token | undefined][] = useMemo(
|
||||||
() => [
|
() => [
|
||||||
@@ -31,13 +31,16 @@ function useAllCommonPairs(tokenA?: Token, tokenB?: Token): Pair[] {
|
|||||||
// only pass along valid pairs, non-duplicated pairs
|
// only pass along valid pairs, non-duplicated pairs
|
||||||
return useMemo(
|
return useMemo(
|
||||||
() =>
|
() =>
|
||||||
allPairs
|
Object.values(
|
||||||
// filter out invalid pairs
|
allPairs
|
||||||
.filter((p): p is Pair => !!p)
|
// filter out invalid pairs
|
||||||
// filter out duplicated pairs
|
.filter((p): p is Pair => !!p)
|
||||||
.filter(
|
// filter out duplicated pairs
|
||||||
(p, i, pairs) => i === pairs.findIndex(pair => pair?.liquidityToken.address === p.liquidityToken.address)
|
.reduce<{ [pairAddress: string]: Pair }>((memo, curr) => {
|
||||||
),
|
memo[curr.liquidityToken.address] = memo[curr.liquidityToken.address] ?? curr
|
||||||
|
return memo
|
||||||
|
}, {})
|
||||||
|
),
|
||||||
[allPairs]
|
[allPairs]
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -46,14 +49,11 @@ function useAllCommonPairs(tokenA?: Token, tokenB?: Token): Pair[] {
|
|||||||
* Returns the best trade for the exact amount of tokens in to the given token out
|
* Returns the best trade for the exact amount of tokens in to the given token out
|
||||||
*/
|
*/
|
||||||
export function useTradeExactIn(amountIn?: TokenAmount, tokenOut?: Token): Trade | null {
|
export function useTradeExactIn(amountIn?: TokenAmount, tokenOut?: Token): Trade | null {
|
||||||
const inputToken = amountIn?.token
|
const allowedPairs = useAllCommonPairs(amountIn?.token, tokenOut)
|
||||||
const outputToken = tokenOut
|
|
||||||
|
|
||||||
const allowedPairs = useAllCommonPairs(inputToken, outputToken)
|
|
||||||
|
|
||||||
return useMemo(() => {
|
return useMemo(() => {
|
||||||
if (amountIn && tokenOut && allowedPairs.length > 0) {
|
if (amountIn && tokenOut && allowedPairs.length > 0) {
|
||||||
return Trade.bestTradeExactIn(allowedPairs, amountIn, tokenOut)[0] ?? null
|
return Trade.bestTradeExactIn(allowedPairs, amountIn, tokenOut, { maxHops: 3, maxNumResults: 1 })[0] ?? null
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
}, [allowedPairs, amountIn, tokenOut])
|
}, [allowedPairs, amountIn, tokenOut])
|
||||||
@@ -63,14 +63,11 @@ export function useTradeExactIn(amountIn?: TokenAmount, tokenOut?: Token): Trade
|
|||||||
* Returns the best trade for the token in to the exact amount of token out
|
* Returns the best trade for the token in to the exact amount of token out
|
||||||
*/
|
*/
|
||||||
export function useTradeExactOut(tokenIn?: Token, amountOut?: TokenAmount): Trade | null {
|
export function useTradeExactOut(tokenIn?: Token, amountOut?: TokenAmount): Trade | null {
|
||||||
const inputToken = tokenIn
|
const allowedPairs = useAllCommonPairs(tokenIn, amountOut?.token)
|
||||||
const outputToken = amountOut?.token
|
|
||||||
|
|
||||||
const allowedPairs = useAllCommonPairs(inputToken, outputToken)
|
|
||||||
|
|
||||||
return useMemo(() => {
|
return useMemo(() => {
|
||||||
if (tokenIn && amountOut && allowedPairs.length > 0) {
|
if (tokenIn && amountOut && allowedPairs.length > 0) {
|
||||||
return Trade.bestTradeExactOut(allowedPairs, tokenIn, amountOut)[0] ?? null
|
return Trade.bestTradeExactOut(allowedPairs, tokenIn, amountOut, { maxHops: 3, maxNumResults: 1 })[0] ?? null
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
}, [allowedPairs, tokenIn, amountOut])
|
}, [allowedPairs, tokenIn, amountOut])
|
||||||
|
|||||||
@@ -3,15 +3,13 @@ import { initReactI18next } from 'react-i18next'
|
|||||||
import XHR from 'i18next-xhr-backend'
|
import XHR from 'i18next-xhr-backend'
|
||||||
import LanguageDetector from 'i18next-browser-languagedetector'
|
import LanguageDetector from 'i18next-browser-languagedetector'
|
||||||
|
|
||||||
const LOAD_PATH: string = process.env.PUBLIC_URL === '.' ? `./locales/{{lng}}.json` : '/locales/{{lng}}.json'
|
|
||||||
|
|
||||||
i18next
|
i18next
|
||||||
.use(XHR)
|
.use(XHR)
|
||||||
.use(LanguageDetector)
|
.use(LanguageDetector)
|
||||||
.use(initReactI18next)
|
.use(initReactI18next)
|
||||||
.init({
|
.init({
|
||||||
backend: {
|
backend: {
|
||||||
loadPath: LOAD_PATH
|
loadPath: `./locales/{{lng}}.json`
|
||||||
},
|
},
|
||||||
react: {
|
react: {
|
||||||
useSuspense: true
|
useSuspense: true
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
import React, { Suspense } from 'react'
|
import React, { Suspense } from 'react'
|
||||||
import { BrowserRouter, HashRouter, Route, Switch } from 'react-router-dom'
|
import { HashRouter, Route, Switch } from 'react-router-dom'
|
||||||
import styled from 'styled-components'
|
import styled from 'styled-components'
|
||||||
import GoogleAnalyticsReporter from '../components/analytics/GoogleAnalyticsReporter'
|
import GoogleAnalyticsReporter from '../components/analytics/GoogleAnalyticsReporter'
|
||||||
import Footer from '../components/Footer'
|
|
||||||
import Header from '../components/Header'
|
import Header from '../components/Header'
|
||||||
import Popups from '../components/Popups'
|
import Popups from '../components/Popups'
|
||||||
import Web3ReactManager from '../components/Web3ReactManager'
|
import Web3ReactManager from '../components/Web3ReactManager'
|
||||||
@@ -54,17 +53,10 @@ const Marginer = styled.div`
|
|||||||
margin-top: 5rem;
|
margin-top: 5rem;
|
||||||
`
|
`
|
||||||
|
|
||||||
let Router: React.ComponentType
|
|
||||||
if (process.env.PUBLIC_URL === '.') {
|
|
||||||
Router = HashRouter
|
|
||||||
} else {
|
|
||||||
Router = BrowserRouter
|
|
||||||
}
|
|
||||||
|
|
||||||
export default function App() {
|
export default function App() {
|
||||||
return (
|
return (
|
||||||
<Suspense fallback={null}>
|
<Suspense fallback={null}>
|
||||||
<Router>
|
<HashRouter>
|
||||||
<Route component={GoogleAnalyticsReporter} />
|
<Route component={GoogleAnalyticsReporter} />
|
||||||
<Route component={DarkModeQueryParamReader} />
|
<Route component={DarkModeQueryParamReader} />
|
||||||
<AppWrapper>
|
<AppWrapper>
|
||||||
@@ -90,10 +82,9 @@ export default function App() {
|
|||||||
</Switch>
|
</Switch>
|
||||||
</Web3ReactManager>
|
</Web3ReactManager>
|
||||||
<Marginer />
|
<Marginer />
|
||||||
<Footer />
|
|
||||||
</BodyWrapper>
|
</BodyWrapper>
|
||||||
</AppWrapper>
|
</AppWrapper>
|
||||||
</Router>
|
</HashRouter>
|
||||||
</Suspense>
|
</Suspense>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,9 +17,13 @@ export const MaxButton = styled.button<{ width: string }>`
|
|||||||
border: 1px solid ${({ theme }) => theme.primary5};
|
border: 1px solid ${({ theme }) => theme.primary5};
|
||||||
border-radius: 0.5rem;
|
border-radius: 0.5rem;
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
|
${({ theme }) => theme.mediaWidth.upToSmall`
|
||||||
|
padding: 0.25rem 0.5rem;
|
||||||
|
`};
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
margin-right: 0.5rem;
|
margin: 0.25rem;
|
||||||
|
overflow: hidden;
|
||||||
color: ${({ theme }) => theme.primary1};
|
color: ${({ theme }) => theme.primary1};
|
||||||
:hover {
|
:hover {
|
||||||
border: 1px solid ${({ theme }) => theme.primary1};
|
border: 1px solid ${({ theme }) => theme.primary1};
|
||||||
|
|||||||
191
yarn.lock
191
yarn.lock
@@ -2814,93 +2814,92 @@
|
|||||||
"@uniswap/lib" "1.1.1"
|
"@uniswap/lib" "1.1.1"
|
||||||
"@uniswap/v2-core" "1.0.0"
|
"@uniswap/v2-core" "1.0.0"
|
||||||
|
|
||||||
"@walletconnect/client@^1.0.8":
|
"@walletconnect/client@^1.0.11":
|
||||||
version "1.0.8"
|
version "1.0.11"
|
||||||
resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-1.0.8.tgz#0ab3bfa756e51b3dd480f8794b4c515870f79382"
|
resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-1.0.11.tgz#ee58d2662e433cb67c5d2157c1b4525f864ab6ec"
|
||||||
integrity sha512-lZkTNTeEvxQ1DNCUmXxWABi0lRAw2ztCFjivP33Am9wJy7VbJliP2H7ipSua3EWPTZ+YLlm95MM6PNvpX2sezA==
|
integrity sha512-NVMDRUuLMqRPmzR7xjVfRcuXegvrCTtzuVyU8iYEnriZ3fFZcFj3PWVzN44RvLYQ4yUxWzeUkXIVRmmecOLMbQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@walletconnect/core" "^1.0.8"
|
"@walletconnect/core" "^1.0.11"
|
||||||
"@walletconnect/iso-crypto" "^1.0.8"
|
"@walletconnect/iso-crypto" "^1.0.11"
|
||||||
"@walletconnect/types" "^1.0.8"
|
"@walletconnect/types" "^1.0.11"
|
||||||
"@walletconnect/utils" "^1.0.8"
|
"@walletconnect/utils" "^1.0.11"
|
||||||
|
|
||||||
"@walletconnect/core@^1.0.8":
|
"@walletconnect/core@^1.0.11":
|
||||||
version "1.0.8"
|
version "1.0.11"
|
||||||
resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-1.0.8.tgz#98c73b5f694e62e77e490f845304c93b1268ff7f"
|
resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-1.0.11.tgz#486eaf680fb697d9f35b02fc91392eb8c4a60116"
|
||||||
integrity sha512-omZ01i9HMabGJ7RoUw9nAF+6zjjtZcif1zZFCCMMNOspSTyUSjLPFjGCZ66Gt8dA0/amPO6wbN9N6duqo2wxIA==
|
integrity sha512-hrr7oFgQrQaNbCKlh+4lXVz9pLjt1RVMEyftA5Q+hWNdgrBV0NDvrp2SV7XaHBg/z/D37JA6we+zGPkkBZ8CRA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@walletconnect/socket-transport" "^1.0.8"
|
"@walletconnect/socket-transport" "^1.0.11"
|
||||||
"@walletconnect/types" "^1.0.8"
|
"@walletconnect/types" "^1.0.11"
|
||||||
"@walletconnect/utils" "^1.0.8"
|
"@walletconnect/utils" "^1.0.11"
|
||||||
|
|
||||||
"@walletconnect/http-connection@^1.0.8":
|
"@walletconnect/http-connection@^1.0.11":
|
||||||
version "1.0.8"
|
version "1.0.11"
|
||||||
resolved "https://registry.yarnpkg.com/@walletconnect/http-connection/-/http-connection-1.0.8.tgz#8dc4311806d049f515741a465016fa36a2401f01"
|
resolved "https://registry.yarnpkg.com/@walletconnect/http-connection/-/http-connection-1.0.11.tgz#3c00ab02b4e6f4ffa1aa346b19569e585609dfa2"
|
||||||
integrity sha512-IsXBD12yX1Cw8RlOTJwYREdMRK/CdErIX31TnuqsV0B/Lxaxq1cQisuXbC8EQBtjczM5XU4gfnwgiYstjBrqMg==
|
integrity sha512-kT9tKfp0KfKO+WkufSEi2Ppcgni2LB1Qly66uV3xZEwqouY+8Fs7Rf/BQ9o8KmosnP9WxBjgO+S4OMDWNLHCdA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@walletconnect/types" "^1.0.8"
|
"@walletconnect/types" "^1.0.11"
|
||||||
"@walletconnect/utils" "^1.0.8"
|
"@walletconnect/utils" "^1.0.11"
|
||||||
xhr2-cookies "1.1.0"
|
xhr2-cookies "1.1.0"
|
||||||
|
|
||||||
"@walletconnect/iso-crypto@^1.0.8":
|
"@walletconnect/iso-crypto@^1.0.11":
|
||||||
version "1.0.8"
|
version "1.0.11"
|
||||||
resolved "https://registry.yarnpkg.com/@walletconnect/iso-crypto/-/iso-crypto-1.0.8.tgz#ef3b1aa49ba4efee694e5ff7b736209469fea372"
|
resolved "https://registry.yarnpkg.com/@walletconnect/iso-crypto/-/iso-crypto-1.0.11.tgz#cb989e6257d4e8595f3bf15950ee82ec67727c11"
|
||||||
integrity sha512-EU7fKELVJH6cnyh51lfuC4yeB2TMYca2vCxnD0N1TTdpKqHuw/S9B14MXWy5sgVfG8KItEupZ9wIQu6t1U4TWg==
|
integrity sha512-yYww/lrbseTD+ZphQzkxUx4Ufyx4fotTv/XK62p4Qb6SYFDR2/1bXTsbN2KitfeF0rpomyF0ouWujOF671p23w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@walletconnect/types" "^1.0.8"
|
"@walletconnect/types" "^1.0.11"
|
||||||
"@walletconnect/utils" "^1.0.8"
|
"@walletconnect/utils" "^1.0.11"
|
||||||
eccrypto-js "5.2.0"
|
eccrypto-js "5.2.0"
|
||||||
|
|
||||||
"@walletconnect/mobile-registry@^1.0.8":
|
"@walletconnect/mobile-registry@^1.0.11":
|
||||||
version "1.0.8"
|
version "1.0.11"
|
||||||
resolved "https://registry.yarnpkg.com/@walletconnect/mobile-registry/-/mobile-registry-1.0.8.tgz#dfb84fb8a1cf90698ea2c685406f3e7c9cb295ea"
|
resolved "https://registry.yarnpkg.com/@walletconnect/mobile-registry/-/mobile-registry-1.0.11.tgz#55a060fb113524e75ed675fce1ab50bb6c5aa1ce"
|
||||||
integrity sha512-LtMMlG2aRG+QoCuD+IrCVtzbm61T3izcygMWjyFyzbEAFSkbC8svRJ0b5XV45p/j7SMUCDAlrad1jZKeQYv2hA==
|
integrity sha512-E78BfSr4RNSUPl/4Qpfg4bPO+QynMqUj55X20S41z1aGIYhXNM33sUVWGkbxO5rHuHYLB9Z5O/ob0sENKCXAfA==
|
||||||
|
|
||||||
"@walletconnect/qrcode-modal@^1.0.8":
|
"@walletconnect/qrcode-modal@^1.0.11":
|
||||||
version "1.0.8"
|
version "1.0.11"
|
||||||
resolved "https://registry.yarnpkg.com/@walletconnect/qrcode-modal/-/qrcode-modal-1.0.8.tgz#d4e5febfb21b5f4da45f338de71fed59065d00d7"
|
resolved "https://registry.yarnpkg.com/@walletconnect/qrcode-modal/-/qrcode-modal-1.0.11.tgz#5b34d583c034aed74307350797c66ddce6193744"
|
||||||
integrity sha512-Tvd2gZWO7HPxxvhKfAgWawo+AHbmUaEDuCd2BeyWfvzzZiHYchdgPbTI200kQaGzw/EZ9iC2KkKZVzXjC83EXA==
|
integrity sha512-GsSQ/E3ixBEiQz3EOFypW2FCFIS6G37crpJunkLhefi9w2/CMeQ5bk4SIFKyGsAv6uEtwAcPVh7tNkoiGEsb2A==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@walletconnect/mobile-registry" "^1.0.8"
|
"@walletconnect/mobile-registry" "^1.0.11"
|
||||||
"@walletconnect/types" "^1.0.8"
|
"@walletconnect/types" "^1.0.11"
|
||||||
"@walletconnect/utils" "^1.0.8"
|
"@walletconnect/utils" "^1.0.11"
|
||||||
preact "10.4.1"
|
preact "10.4.1"
|
||||||
qr-image "3.2.0"
|
qrcode "1.4.4"
|
||||||
qrcode-terminal "0.12.0"
|
|
||||||
|
|
||||||
"@walletconnect/socket-transport@^1.0.8":
|
"@walletconnect/socket-transport@^1.0.11":
|
||||||
version "1.0.8"
|
version "1.0.11"
|
||||||
resolved "https://registry.yarnpkg.com/@walletconnect/socket-transport/-/socket-transport-1.0.8.tgz#f0c40e9a01d6f11b0f853b3e502845647c20cd20"
|
resolved "https://registry.yarnpkg.com/@walletconnect/socket-transport/-/socket-transport-1.0.11.tgz#de1f473f37d7b6af813338cd17a4eb0f46553d19"
|
||||||
integrity sha512-Ub3Ni43tKIWYhg/4+AohyYXnXSuS9tARLQVWbTGCOGolEbslGSA10e0jX+m/AV+J0S1CCcTXRhEFH3Hr6djasw==
|
integrity sha512-96Xy8GHoO8nHxmGfUcLflkv2KtRNwkAkWay8uRAHLGpYQJ5kaKCvHfaSraNPvwKBwQydbWGn50n5aIFiR/lShg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@walletconnect/types" "^1.0.8"
|
"@walletconnect/types" "^1.0.11"
|
||||||
ws "7.3.0"
|
ws "7.3.0"
|
||||||
|
|
||||||
"@walletconnect/types@^1.0.8":
|
"@walletconnect/types@^1.0.11":
|
||||||
version "1.0.8"
|
version "1.0.11"
|
||||||
resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-1.0.8.tgz#3d510c08e250881447281c8e5e081997ba0e57a6"
|
resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-1.0.11.tgz#6dd23eb3a8dd2824f76cc2c54217ecca8229d0a2"
|
||||||
integrity sha512-2h27+Da5buAcJq/xvZpHJX8AWrKzhVpWt6FHeODPdT/P57+rbLQ1emHG8/vpzjSCkHYyhV+8oXQ9fgHkjnpsiQ==
|
integrity sha512-ysIQI6DsMELQAAt5zk2ZMKKyOwgk+XP4KeOhmDk+sIQskBugFl0ARl5iQZzGz9pcrHdlg1Fi7ucGw3UaExqIVA==
|
||||||
|
|
||||||
"@walletconnect/utils@^1.0.8":
|
"@walletconnect/utils@^1.0.11":
|
||||||
version "1.0.8"
|
version "1.0.11"
|
||||||
resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-1.0.8.tgz#0798b4520ae1452b134bea757cc220c6cf27c805"
|
resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-1.0.11.tgz#a6c8bb8b9cf9600684d5825d4b54e1d85ff61230"
|
||||||
integrity sha512-BzyXD4CPPpueL7u3EtLB4+VEc9aJHhnEL/SYRS7nBzGYaYIir3biYi7zb/EANey0mSjCoE2qzxtTmjEi8cBIZg==
|
integrity sha512-Hgcjq/YYmzrNenpNhftD+I2MqT/f73qwjPYWfubQs2zPN4Hd/xb4cC2fKqIMeuVmoee9MJaLhZGnr+dxcDaH4w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@walletconnect/types" "^1.0.8"
|
"@walletconnect/types" "^1.0.11"
|
||||||
detect-browser "5.1.0"
|
detect-browser "5.1.0"
|
||||||
enc-utils "2.1.0"
|
enc-utils "2.1.0"
|
||||||
js-sha3 "0.8.0"
|
js-sha3 "0.8.0"
|
||||||
|
|
||||||
"@walletconnect/web3-provider@^1.0.8":
|
"@walletconnect/web3-provider@^1.0.8":
|
||||||
version "1.0.8"
|
version "1.0.11"
|
||||||
resolved "https://registry.yarnpkg.com/@walletconnect/web3-provider/-/web3-provider-1.0.8.tgz#ab41a522daa1da1b22a42498f90506e7d541b4dc"
|
resolved "https://registry.yarnpkg.com/@walletconnect/web3-provider/-/web3-provider-1.0.11.tgz#462d84808379f5ec8747e46de217286d61837620"
|
||||||
integrity sha512-u7i/1wp3PKS6eB/yiV5Z7okzPF8q322V9dsHBaRDYEGphyQlBb4EH0aDeecVmu1p95CvIauWhxCP5m+7SL/Dfw==
|
integrity sha512-ppzYwfrVtl5j8zMOPl07v5w+Gb0ptspQm3TGUqVVClaIdXt96uCBBPxwi5bZa4pSXVKgJvI9EbKzaqUS8kVsyQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@walletconnect/client" "^1.0.8"
|
"@walletconnect/client" "^1.0.11"
|
||||||
"@walletconnect/http-connection" "^1.0.8"
|
"@walletconnect/http-connection" "^1.0.11"
|
||||||
"@walletconnect/qrcode-modal" "^1.0.8"
|
"@walletconnect/qrcode-modal" "^1.0.11"
|
||||||
"@walletconnect/types" "^1.0.8"
|
"@walletconnect/types" "^1.0.11"
|
||||||
"@walletconnect/utils" "^1.0.8"
|
"@walletconnect/utils" "^1.0.11"
|
||||||
web3-provider-engine "15.0.7"
|
web3-provider-engine "15.0.7"
|
||||||
|
|
||||||
"@web3-react/abstract-connector@^6.0.7":
|
"@web3-react/abstract-connector@^6.0.7":
|
||||||
@@ -4599,12 +4598,30 @@ btoa@^1.2.1:
|
|||||||
resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73"
|
resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73"
|
||||||
integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==
|
integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==
|
||||||
|
|
||||||
|
buffer-alloc-unsafe@^1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
|
||||||
|
integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
|
||||||
|
|
||||||
|
buffer-alloc@^1.2.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
|
||||||
|
integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
|
||||||
|
dependencies:
|
||||||
|
buffer-alloc-unsafe "^1.1.0"
|
||||||
|
buffer-fill "^1.0.0"
|
||||||
|
|
||||||
buffer-crc32@~0.2.3:
|
buffer-crc32@~0.2.3:
|
||||||
version "0.2.13"
|
version "0.2.13"
|
||||||
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
|
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
|
||||||
integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
|
integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
|
||||||
|
|
||||||
buffer-from@^1.0.0:
|
buffer-fill@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
|
||||||
|
integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
|
||||||
|
|
||||||
|
buffer-from@^1.0.0, buffer-from@^1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
|
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
|
||||||
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
|
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
|
||||||
@@ -4636,6 +4653,14 @@ buffer@^4.3.0:
|
|||||||
ieee754 "^1.1.4"
|
ieee754 "^1.1.4"
|
||||||
isarray "^1.0.0"
|
isarray "^1.0.0"
|
||||||
|
|
||||||
|
buffer@^5.4.3:
|
||||||
|
version "5.6.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786"
|
||||||
|
integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==
|
||||||
|
dependencies:
|
||||||
|
base64-js "^1.0.2"
|
||||||
|
ieee754 "^1.1.4"
|
||||||
|
|
||||||
builtin-status-codes@^3.0.0:
|
builtin-status-codes@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
|
resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
|
||||||
@@ -6016,6 +6041,11 @@ diffie-hellman@^5.0.0:
|
|||||||
miller-rabin "^4.0.0"
|
miller-rabin "^4.0.0"
|
||||||
randombytes "^2.0.0"
|
randombytes "^2.0.0"
|
||||||
|
|
||||||
|
dijkstrajs@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.1.tgz#d3cd81221e3ea40742cfcde556d4e99e98ddc71b"
|
||||||
|
integrity sha1-082BIh4+pAdCz83lVtTpnpjdxxs=
|
||||||
|
|
||||||
dir-glob@2.0.0:
|
dir-glob@2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034"
|
resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034"
|
||||||
@@ -8808,6 +8838,11 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
||||||
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
|
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
|
||||||
|
|
||||||
|
isarray@^2.0.1:
|
||||||
|
version "2.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
|
||||||
|
integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
|
||||||
|
|
||||||
isexe@^2.0.0:
|
isexe@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||||
@@ -11204,6 +11239,11 @@ pn@^1.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
|
resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
|
||||||
integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==
|
integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==
|
||||||
|
|
||||||
|
pngjs@^3.3.0:
|
||||||
|
version "3.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f"
|
||||||
|
integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==
|
||||||
|
|
||||||
pnp-webpack-plugin@1.6.4:
|
pnp-webpack-plugin@1.6.4:
|
||||||
version "1.6.4"
|
version "1.6.4"
|
||||||
resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149"
|
resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149"
|
||||||
@@ -12114,21 +12154,11 @@ q@^1.1.2:
|
|||||||
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
|
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
|
||||||
integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
|
integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
|
||||||
|
|
||||||
qr-image@3.2.0:
|
|
||||||
version "3.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/qr-image/-/qr-image-3.2.0.tgz#9fa8295beae50c4a149cf9f909a1db464a8672e8"
|
|
||||||
integrity sha1-n6gpW+rlDEoUnPn5CaHbRkqGcug=
|
|
||||||
|
|
||||||
qr.js@0.0.0:
|
qr.js@0.0.0:
|
||||||
version "0.0.0"
|
version "0.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/qr.js/-/qr.js-0.0.0.tgz#cace86386f59a0db8050fa90d9b6b0e88a1e364f"
|
resolved "https://registry.yarnpkg.com/qr.js/-/qr.js-0.0.0.tgz#cace86386f59a0db8050fa90d9b6b0e88a1e364f"
|
||||||
integrity sha1-ys6GOG9ZoNuAUPqQ2baw6IoeNk8=
|
integrity sha1-ys6GOG9ZoNuAUPqQ2baw6IoeNk8=
|
||||||
|
|
||||||
qrcode-terminal@0.12.0:
|
|
||||||
version "0.12.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819"
|
|
||||||
integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==
|
|
||||||
|
|
||||||
qrcode.react@^0.9.3:
|
qrcode.react@^0.9.3:
|
||||||
version "0.9.3"
|
version "0.9.3"
|
||||||
resolved "https://registry.yarnpkg.com/qrcode.react/-/qrcode.react-0.9.3.tgz#91de1287912bdc5ccfb3b091737b828d6ced60c5"
|
resolved "https://registry.yarnpkg.com/qrcode.react/-/qrcode.react-0.9.3.tgz#91de1287912bdc5ccfb3b091737b828d6ced60c5"
|
||||||
@@ -12137,6 +12167,19 @@ qrcode.react@^0.9.3:
|
|||||||
prop-types "^15.6.0"
|
prop-types "^15.6.0"
|
||||||
qr.js "0.0.0"
|
qr.js "0.0.0"
|
||||||
|
|
||||||
|
qrcode@1.4.4:
|
||||||
|
version "1.4.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.4.4.tgz#f0c43568a7e7510a55efc3b88d9602f71963ea83"
|
||||||
|
integrity sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q==
|
||||||
|
dependencies:
|
||||||
|
buffer "^5.4.3"
|
||||||
|
buffer-alloc "^1.2.0"
|
||||||
|
buffer-from "^1.1.1"
|
||||||
|
dijkstrajs "^1.0.1"
|
||||||
|
isarray "^2.0.1"
|
||||||
|
pngjs "^3.3.0"
|
||||||
|
yargs "^13.2.4"
|
||||||
|
|
||||||
qs@6.7.0:
|
qs@6.7.0:
|
||||||
version "6.7.0"
|
version "6.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
|
resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
|
||||||
@@ -15338,7 +15381,7 @@ yargs@12.0.5:
|
|||||||
y18n "^3.2.1 || ^4.0.0"
|
y18n "^3.2.1 || ^4.0.0"
|
||||||
yargs-parser "^11.1.1"
|
yargs-parser "^11.1.1"
|
||||||
|
|
||||||
yargs@^13.3.0:
|
yargs@^13.2.4, yargs@^13.3.0:
|
||||||
version "13.3.2"
|
version "13.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
|
resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
|
||||||
integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
|
integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
|
||||||
|
|||||||
Reference in New Issue
Block a user