diff --git a/app/src/common/constants.ts b/app/src/common/constants.ts index 4ef00524c8..593b70c836 100644 --- a/app/src/common/constants.ts +++ b/app/src/common/constants.ts @@ -57,6 +57,8 @@ export const GRAPH_RINKEBY_HTTP = 'https://api.thegraph.com/subgraphs/name/proto export const GRAPH_RINKEBY_WS = 'wss://api.thegraph.com/subgraphs/name/protofire/omen-rinkeby' export const GRAPH_SOKOL_HTTP = 'https://api.thegraph.com/subgraphs/name/protofire/omen-sokol' export const GRAPH_SOKOL_WS = 'wss://api.thegraph.com/subgraphs/name/protofire/omen-sokol' +export const GRAPH_XDAI_HTTP = 'https://api.thegraph.com/subgraphs/name/protofire/omen-xdai' +export const GRAPH_XDAI_WS = 'wss://api.thegraph.com/subgraphs/name/protofire/omen-xdai' export const KLEROS_CURATE_GRAPH_MAINNET_HTTP = 'https://api.thegraph.com/subgraphs/name/kleros/curate' export const KLEROS_CURATE_GRAPH_MAINNET_WS = 'wss://api.thegraph.com/subgraphs/name/kleros/curate' diff --git a/app/src/components/market/common/currency_selector/index.tsx b/app/src/components/market/common/currency_selector/index.tsx index 685a66ff7a..95989628e0 100644 --- a/app/src/components/market/common/currency_selector/index.tsx +++ b/app/src/components/market/common/currency_selector/index.tsx @@ -35,11 +35,13 @@ interface Props { balance?: string placeholder?: Maybe addAll?: boolean + addNativeAsset?: boolean } export const CurrencySelector: React.FC = props => { const { addAll = false, + addNativeAsset = false, balance, context, currency, @@ -50,7 +52,7 @@ export const CurrencySelector: React.FC = props => { ...restProps } = props - const tokens = useTokens(context) + const tokens = useTokens(context, addNativeAsset) const currencyDropdownData: Array = [] @@ -73,7 +75,6 @@ export const CurrencySelector: React.FC = props => { } }, }) - currentItem = 0 } diff --git a/app/src/components/market/common/outcome_table/index.tsx b/app/src/components/market/common/outcome_table/index.tsx index 82806348b2..cc046031ec 100644 --- a/app/src/components/market/common/outcome_table/index.tsx +++ b/app/src/components/market/common/outcome_table/index.tsx @@ -3,7 +3,9 @@ import { BigNumber } from 'ethers/utils' import React, { useCallback } from 'react' import styled, { css } from 'styled-components' +import { useConnectedWeb3Context } from '../../../../hooks' import { getOutcomeColor } from '../../../../theme/utils' +import { getWrapToken, pseudoNativeAssetAddress } from '../../../../util/networks' import { formatBigNumber, formatNumber, mulBN } from '../../../../util/tools' import { BalanceItem, BondItem, OutcomeTableValue, Token, TokenEthereum } from '../../../../util/types' import { RadioInput, TD, TH, THead, TR, Table } from '../../../common' @@ -125,6 +127,10 @@ export const OutcomeTable = (props: Props) => { const TableCellsAlign = ['left', 'left', 'right', 'right', 'right', 'right', 'right'] + const context = useConnectedWeb3Context() + const wrapSymbol = getWrapToken(context.networkId).symbol + const symbol = collateral.address === pseudoNativeAssetAddress ? wrapSymbol : collateral.symbol + const renderTableHeader = () => { return ( @@ -137,7 +143,7 @@ export const OutcomeTable = (props: Props) => { style={isBond && index === 1 ? { width: '53%' } : {}} textAlign={TableCellsAlign[index]} > - {value} {value === OutcomeTableValue.CurrentPrice && `(${collateral.symbol})`} + {value} {value === OutcomeTableValue.CurrentPrice && `(${symbol})`} ) : null })} diff --git a/app/src/components/market/sections/market_buy/market_buy.tsx b/app/src/components/market/sections/market_buy/market_buy.tsx index 85ef713455..9b063018d1 100644 --- a/app/src/components/market/sections/market_buy/market_buy.tsx +++ b/app/src/components/market/sections/market_buy/market_buy.tsx @@ -14,9 +14,11 @@ import { useConnectedWeb3Context, useContracts, useCpkAllowance, + useCpkProxy, } from '../../../../hooks' import { MarketMakerService } from '../../../../services' import { getLogger } from '../../../../util/logger' +import { getNativeAsset, getWrapToken, pseudoNativeAssetAddress } from '../../../../util/networks' import { RemoteData } from '../../../../util/remote_data' import { computeBalanceAfterTrade, formatBigNumber, formatNumber, mulBN } from '../../../../util/tools' import { MarketDetailsTab, MarketMakerData, OutcomeTableValue, Status, Ternary, Token } from '../../../../util/types' @@ -60,7 +62,7 @@ interface Props extends RouteComponentProps { const MarketBuyWrapper: React.FC = (props: Props) => { const context = useConnectedWeb3Context() const cpk = useConnectedCPKContext() - const { library: provider } = context + const { library: provider, networkId } = context const signer = useMemo(() => provider.getSigner(), [provider]) const { buildMarketMaker } = useContracts(context) @@ -85,6 +87,10 @@ const MarketBuyWrapper: React.FC = (props: Props) => { const hasEnoughAllowance = RemoteData.mapToTernary(allowance, allowance => allowance.gte(amount || Zero)) const hasZeroAllowance = RemoteData.mapToTernary(allowance, allowance => allowance.isZero()) + const [upgradeFinished, setUpgradeFinished] = useState(false) + const { proxyIsUpToDate, updateProxy } = useCpkProxy() + const isUpdated = RemoteData.hasData(proxyIsUpToDate) ? proxyIsUpToDate.data : false + useEffect(() => { setIsNegativeAmount(formatBigNumber(amount || Zero, collateral.decimals).includes('-')) }, [amount, collateral.decimals]) @@ -145,6 +151,19 @@ const MarketBuyWrapper: React.FC = (props: Props) => { setAllowanceFinished(true) } + const showUpgrade = + (!isUpdated && collateral.address === pseudoNativeAssetAddress) || + (upgradeFinished && collateral.address === pseudoNativeAssetAddress) + + const upgradeProxy = async () => { + if (!cpk) { + return + } + + await updateProxy() + setUpgradeFinished(true) + } + const finish = async () => { try { if (!cpk) { @@ -158,6 +177,7 @@ const MarketBuyWrapper: React.FC = (props: Props) => { await cpk.buyOutcomes({ amount: amount || Zero, + collateral, outcomeIndex, marketMaker, }) @@ -185,6 +205,7 @@ const MarketBuyWrapper: React.FC = (props: Props) => { } const showSetAllowance = + collateral.address !== pseudoNativeAssetAddress && !cpk?.cpk.isSafeApp() && (allowanceFinished || hasZeroAllowance === Ternary.True || hasEnoughAllowance === Ternary.False) @@ -218,14 +239,23 @@ const MarketBuyWrapper: React.FC = (props: Props) => { !amount || (status !== Status.Ready && status !== Status.Error) || amount?.isZero() || - (!cpk?.cpk.isSafeApp() && hasEnoughAllowance !== Ternary.True) || + (!cpk?.cpk.isSafeApp() && collateral.address !== pseudoNativeAssetAddress && hasEnoughAllowance !== Ternary.True) || amountError !== null || - isNegativeAmount + isNegativeAmount || + (!isUpdated && collateral.address === pseudoNativeAssetAddress) + + const wrapAddress = getWrapToken(networkId).address + + const currencyFilters = + collateral.address === wrapAddress || collateral.address === pseudoNativeAssetAddress + ? [wrapAddress, pseudoNativeAssetAddress.toLowerCase()] + : [] const switchOutcome = (value: number) => { setNewShares(balances.map((balance, i) => (i === outcomeIndex ? balance.shares.add(tradedShares) : balance.shares))) setOutcomeIndex(value) } + return ( <> = (props: Props) => {
{ if (token) { setCollateral(token) @@ -335,6 +367,14 @@ const MarketBuyWrapper: React.FC = (props: Props) => { onUnlock={unlockCollateral} /> )} + {showUpgrade && ( + + )}