From 2c8453341c4b6597fa35f49794de4837db79c8c8 Mon Sep 17 00:00:00 2001 From: billy Date: Tue, 28 Dec 2021 16:18:11 +0800 Subject: [PATCH 01/10] feat: make offer, get more eth --- packages/mask/shared-ui/locales/en-US.json | 1 + .../Collectible/SNSAdaptor/MakeOfferDialog.tsx | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/mask/shared-ui/locales/en-US.json b/packages/mask/shared-ui/locales/en-US.json index f9e57bf4c010..9bc57b145055 100644 --- a/packages/mask/shared-ui/locales/en-US.json +++ b/packages/mask/shared-ui/locales/en-US.json @@ -578,6 +578,7 @@ "plugin_collectible_you": "You", "plugin_collectible_done": "Done", "plugin_collectible_retry": "Retry", + "plugin_collectible_get_more_token": "Get more {{token}}", "plugin_collectible_sell": "Sell", "plugin_collectible_checkout": "Checkout", "plugin_collectible_place_bid": "Place Bid", diff --git a/packages/mask/src/plugins/Collectible/SNSAdaptor/MakeOfferDialog.tsx b/packages/mask/src/plugins/Collectible/SNSAdaptor/MakeOfferDialog.tsx index bb554596441c..ab6b948f628b 100644 --- a/packages/mask/src/plugins/Collectible/SNSAdaptor/MakeOfferDialog.tsx +++ b/packages/mask/src/plugins/Collectible/SNSAdaptor/MakeOfferDialog.tsx @@ -91,6 +91,7 @@ export function MakeOfferDialog(props: MakeOfferDialogProps) { const [expirationDateTime, setExpirationDateTime] = useState(new Date()) const [unreviewedChecked, setUnreviewedChecked] = useState(false) const [ToS_Checked, setToS_Checked] = useState(false) + const [is_insufficient_balance, setIs_insufficient_balance] = useState(false) const { amount, token, balance, setAmount, setToken } = useFungibleTokenWatched(selectedPaymentToken) @@ -137,10 +138,14 @@ export function MakeOfferDialog(props: MakeOfferDialogProps) { }, [open]) const validationMessage = useMemo(() => { + setIs_insufficient_balance(false) const amount_ = rightShift(amount, token.value?.decimals) const balance_ = new BigNumber(balance.value ?? '0') if (amount_.isNaN() || amount_.isZero()) return t('plugin_collectible_enter_a_price') - if (balance_.isZero() || amount_.isGreaterThan(balance_)) return t('plugin_collectible_insufficient_balance') + if (balance_.isZero() || amount_.isGreaterThan(balance_)) { + setIs_insufficient_balance(true) + return t('plugin_collectible_insufficient_balance') + } if (!isAuction && expirationDateTime.getTime() - Date.now() <= 0) return t('plugin_collectible_invalid_expiration_date') if (!isVerified && !unreviewedChecked) return t('plugin_collectible_ensure_unreviewed_item') @@ -260,13 +265,16 @@ export function MakeOfferDialog(props: MakeOfferDialogProps) { completeOnClick={onClose} failedOnClick="use executor" /> - {(isAuction ? asset.value?.isCollectionWeth : asset.value?.isOrderWeth) ? ( + {(isAuction ? asset.value?.isCollectionWeth : asset.value?.isOrderWeth) || + is_insufficient_balance ? ( - Convert ETH + {is_insufficient_balance + ? t('plugin_collectible_get_more_token', { token: token.value?.symbol }) + : t('plugin_collectible_convert_eth')} ) : null} From df9e9c98fdbeb5847584e154eaccdfdb247e84e3 Mon Sep 17 00:00:00 2001 From: billy Date: Tue, 28 Dec 2021 17:56:06 +0800 Subject: [PATCH 02/10] fix: fix assetOrder always undefined --- .../plugins/Collectible/SNSAdaptor/ActionBar.tsx | 14 +++++--------- .../Collectible/SNSAdaptor/CheckoutOrder.tsx | 4 ++-- .../src/plugins/Collectible/hooks/useAssetOrder.ts | 9 ++++----- 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/packages/mask/src/plugins/Collectible/SNSAdaptor/ActionBar.tsx b/packages/mask/src/plugins/Collectible/SNSAdaptor/ActionBar.tsx index a51866d7b24a..ef356276e6f5 100644 --- a/packages/mask/src/plugins/Collectible/SNSAdaptor/ActionBar.tsx +++ b/packages/mask/src/plugins/Collectible/SNSAdaptor/ActionBar.tsx @@ -44,15 +44,11 @@ export function ActionBar(props: ActionBarProps) { if (!asset.value) return null return ( - {!asset.value.isOwner && asset.value.is_auction && assetOrder.value ? ( - - {t('plugin_collectible_buy_now')} - - ) : null} + {/* {!asset.value.isOwner && asset.value.is_auction && assetOrder.value ? ( */} + + {t('plugin_collectible_buy_now')} + + {/* ) : null} */} {!asset.value.isOwner && asset.value.is_auction ? ( getOrderUnitPrice( - order.currentPrice?.toFixed(), + order.currentPrice as unknown as string, order.paymentTokenContract?.decimals ?? 0, - order.quantity.toFixed(), - ) ?? ONE + order.quantity as unknown as string, + ) ?? ZERO const sellOrders = openSeaResponse.sellOrders ?? [] const desktopOrder = head(sellOrders.sort((a, b) => getPrice(a).toNumber() - getPrice(b).toNumber())) - return desktopOrder case NonFungibleAssetProvider.RARIBLE: return From ea94990c353c6fe60e5b37cdef34d9d408aed971 Mon Sep 17 00:00:00 2001 From: billy Date: Tue, 28 Dec 2021 18:13:32 +0800 Subject: [PATCH 03/10] fix: checkoutOrder fix price --- .../Collectible/SNSAdaptor/CheckoutOrder.tsx | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutOrder.tsx b/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutOrder.tsx index 64ecac108536..1caa1fc88ff9 100644 --- a/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutOrder.tsx +++ b/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutOrder.tsx @@ -1,11 +1,14 @@ import { Table, TableHead, TableBody, TableRow, TableCell, Typography, Link } from '@mui/material' import { makeStyles } from '@masknet/theme' import { Image } from '../../../components/shared/Image' -import { useChainId } from '@masknet/web3-shared-evm' +import { ERC20TokenDetailed, useChainId } from '@masknet/web3-shared-evm' import { resolveAssetLinkOnOpenSea } from '../pipes' import { useI18N } from '../../../utils' import type { useAsset } from '../../EVM/hooks/useAsset' import type { useAssetOrder } from '../hooks/useAssetOrder' +import { leftShift } from '@masknet/web3-shared-base' +import BigNumber from 'bignumber.js' +import type { Order } from 'opensea-js/lib/types' const useStyles = makeStyles()((theme) => ({ itemInfo: { @@ -25,13 +28,23 @@ export interface CheckoutOrderProps { export function CheckoutOrder(props: CheckoutOrderProps) { const { t } = useI18N() const { asset, assetOrder } = props - const order = assetOrder ?? asset?.value?.desktopOrder + const order = assetOrder?.value ?? asset?.value?.desktopOrder const { classes } = useStyles() const chainId = useChainId() if (!asset?.value) return null if (!order) return null + const price = (order as Order).currentPrice ?? asset.value.current_price + const getPrice = () => { + if (!price) return 'error' + const decimal = asset.value?.response_.collection.payment_tokens.find((item: ERC20TokenDetailed) => { + return item.symbol === asset.value?.current_symbol + })?.decimals + if (!decimal) return 'error' + return leftShift(new BigNumber(price), decimal).toFixed() ?? 'error' + } + return ( @@ -67,7 +80,7 @@ export function CheckoutOrder(props: CheckoutOrderProps) { - {asset.value.current_price} {asset.value.current_symbol} + {getPrice()} {asset.value.current_symbol} @@ -77,7 +90,7 @@ export function CheckoutOrder(props: CheckoutOrderProps) { - {asset.value.current_price} {asset.value.current_symbol} + {getPrice()} {asset.value.current_symbol} From 390fbe581610fbe457b3ddf8f8dc547f9dbfb949 Mon Sep 17 00:00:00 2001 From: billy Date: Tue, 28 Dec 2021 18:47:11 +0800 Subject: [PATCH 04/10] fix: buy now get more eth --- .../Collectible/SNSAdaptor/ActionBar.tsx | 14 +++--- .../Collectible/SNSAdaptor/CheckoutDialog.tsx | 45 +++++++++++++++---- 2 files changed, 46 insertions(+), 13 deletions(-) diff --git a/packages/mask/src/plugins/Collectible/SNSAdaptor/ActionBar.tsx b/packages/mask/src/plugins/Collectible/SNSAdaptor/ActionBar.tsx index ef356276e6f5..a51866d7b24a 100644 --- a/packages/mask/src/plugins/Collectible/SNSAdaptor/ActionBar.tsx +++ b/packages/mask/src/plugins/Collectible/SNSAdaptor/ActionBar.tsx @@ -44,11 +44,15 @@ export function ActionBar(props: ActionBarProps) { if (!asset.value) return null return ( - {/* {!asset.value.isOwner && asset.value.is_auction && assetOrder.value ? ( */} - - {t('plugin_collectible_buy_now')} - - {/* ) : null} */} + {!asset.value.isOwner && asset.value.is_auction && assetOrder.value ? ( + + {t('plugin_collectible_buy_now')} + + ) : null} {!asset.value.isOwner && asset.value.is_auction ? ( { return { @@ -62,7 +64,6 @@ export interface CheckoutDialogProps { export function CheckoutDialog(props: CheckoutDialogProps) { const { asset, open, onClose, order } = props - const isAuction = asset?.value?.is_auction ?? false const isVerified = asset?.value?.is_verified ?? false const { t } = useI18N() const { classes } = useStyles() @@ -71,7 +72,11 @@ export function CheckoutDialog(props: CheckoutDialogProps) { const [unreviewedChecked, setUnreviewedChecked] = useState(false) const [ToS_Checked, setToS_Checked] = useState(false) - + const [is_insufficient_balance, setIs_insufficient_balance] = useState(false) + const { token, balance } = useFungibleTokenWatched({ + type: EthereumTokenType.Native, + address: order.value?.paymentTokenContract?.address ?? '', + }) const onCheckout = useCallback(async () => { if (!asset?.value) return if (!asset.value.token_id || !asset.value.token_address) return @@ -84,13 +89,35 @@ export function CheckoutDialog(props: CheckoutDialogProps) { }) }, [asset?.value, account, order?.value]) - const { openDialog: openSwapDialog } = useRemoteControlledDialog(PluginTraderMessages.swapDialogUpdated) + const { setDialog: openSwapDialog } = useRemoteControlledDialog(PluginTraderMessages.swapDialogUpdated) + + const onConvertClick = useCallback(() => { + if (!token?.value) return + openSwapDialog({ + open: true, + traderProps: { + coin: { + id: token.value.address, + name: token.value.name ?? '', + symbol: token.value.symbol ?? '', + contract_address: token.value.address, + decimals: token.value.decimals, + } as Coin, + }, + }) + }, [token.value, openSwapDialog]) const validationMessage = useMemo(() => { + const basePrice = new BigNumber(order?.value?.basePrice ?? '0') + const balance_ = new BigNumber(balance.value ?? '0') + if (basePrice.isGreaterThan(balance_)) { + setIs_insufficient_balance(true) + return t('plugin_collectible_insufficient_balance') + } if (!isVerified && !unreviewedChecked) return t('plugin_collectible_ensure_unreviewed_item') if (!isVerified && !ToS_Checked) return t('plugin_collectible_check_tos_document') return '' - }, [isVerified, unreviewedChecked, ToS_Checked]) + }, [isVerified, unreviewedChecked, ToS_Checked, order.value]) return ( @@ -172,13 +199,15 @@ export function CheckoutDialog(props: CheckoutDialogProps) { completeOnClick={onClose} failedOnClick="use executor" /> - {asset?.value?.isOrderWeth ? ( + {asset?.value?.isOrderWeth || is_insufficient_balance ? ( - {t('plugin_collectible_convert_eth')} + onClick={onConvertClick}> + {is_insufficient_balance + ? t('plugin_collectible_get_more_token', { token: token.value?.symbol }) + : t('plugin_collectible_convert_eth')} ) : null} From f4def7dc498c106f8f91638068d8c08a66c7c021 Mon Sep 17 00:00:00 2001 From: billy Date: Thu, 30 Dec 2021 13:22:01 +0800 Subject: [PATCH 05/10] fix: attach to comment --- .../plugins/Collectible/SNSAdaptor/CheckoutDialog.tsx | 9 ++++----- .../src/plugins/Collectible/SNSAdaptor/CheckoutOrder.tsx | 6 ++---- .../mask/src/plugins/Collectible/hooks/useAssetOrder.ts | 1 + 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutDialog.tsx b/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutDialog.tsx index 935dec3c52f7..0cda9bb88a05 100644 --- a/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutDialog.tsx +++ b/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutDialog.tsx @@ -67,12 +67,11 @@ export function CheckoutDialog(props: CheckoutDialogProps) { const isVerified = asset?.value?.is_verified ?? false const { t } = useI18N() const { classes } = useStyles() - const account = useAccount() const [unreviewedChecked, setUnreviewedChecked] = useState(false) const [ToS_Checked, setToS_Checked] = useState(false) - const [is_insufficient_balance, setIs_insufficient_balance] = useState(false) + const [isInsufficientBalance, setIsInsufficientBalance] = useState(false) const { token, balance } = useFungibleTokenWatched({ type: EthereumTokenType.Native, address: order.value?.paymentTokenContract?.address ?? '', @@ -111,7 +110,7 @@ export function CheckoutDialog(props: CheckoutDialogProps) { const basePrice = new BigNumber(order?.value?.basePrice ?? '0') const balance_ = new BigNumber(balance.value ?? '0') if (basePrice.isGreaterThan(balance_)) { - setIs_insufficient_balance(true) + setIsInsufficientBalance(true) return t('plugin_collectible_insufficient_balance') } if (!isVerified && !unreviewedChecked) return t('plugin_collectible_ensure_unreviewed_item') @@ -199,13 +198,13 @@ export function CheckoutDialog(props: CheckoutDialogProps) { completeOnClick={onClose} failedOnClick="use executor" /> - {asset?.value?.isOrderWeth || is_insufficient_balance ? ( + {asset?.value?.isOrderWeth || isInsufficientBalance ? ( - {is_insufficient_balance + {isInsufficientBalance ? t('plugin_collectible_get_more_token', { token: token.value?.symbol }) : t('plugin_collectible_convert_eth')} diff --git a/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutOrder.tsx b/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutOrder.tsx index 1caa1fc88ff9..ef8af0a3e2f2 100644 --- a/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutOrder.tsx +++ b/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutOrder.tsx @@ -1,12 +1,11 @@ import { Table, TableHead, TableBody, TableRow, TableCell, Typography, Link } from '@mui/material' import { makeStyles } from '@masknet/theme' import { Image } from '../../../components/shared/Image' -import { ERC20TokenDetailed, useChainId } from '@masknet/web3-shared-evm' +import { ERC20TokenDetailed, useChainId, formatBalance } from '@masknet/web3-shared-evm' import { resolveAssetLinkOnOpenSea } from '../pipes' import { useI18N } from '../../../utils' import type { useAsset } from '../../EVM/hooks/useAsset' import type { useAssetOrder } from '../hooks/useAssetOrder' -import { leftShift } from '@masknet/web3-shared-base' import BigNumber from 'bignumber.js' import type { Order } from 'opensea-js/lib/types' @@ -31,7 +30,6 @@ export function CheckoutOrder(props: CheckoutOrderProps) { const order = assetOrder?.value ?? asset?.value?.desktopOrder const { classes } = useStyles() const chainId = useChainId() - if (!asset?.value) return null if (!order) return null @@ -42,7 +40,7 @@ export function CheckoutOrder(props: CheckoutOrderProps) { return item.symbol === asset.value?.current_symbol })?.decimals if (!decimal) return 'error' - return leftShift(new BigNumber(price), decimal).toFixed() ?? 'error' + return formatBalance(new BigNumber(price), decimal()) ?? 'error' } return ( diff --git a/packages/mask/src/plugins/Collectible/hooks/useAssetOrder.ts b/packages/mask/src/plugins/Collectible/hooks/useAssetOrder.ts index 0aefd3dfe611..c89a5c35d736 100644 --- a/packages/mask/src/plugins/Collectible/hooks/useAssetOrder.ts +++ b/packages/mask/src/plugins/Collectible/hooks/useAssetOrder.ts @@ -14,6 +14,7 @@ export function useAssetOrder(provider: NonFungibleAssetProvider, token?: Collec switch (provider) { case NonFungibleAssetProvider.OPENSEA: const openSeaResponse = await PluginCollectibleRPC.getAssetFromSDK(token.contractAddress, token.tokenId) + console.log(openSeaResponse.sellOrders, 'fff') const getPrice = (order: Order) => getOrderUnitPrice( order.currentPrice as unknown as string, From 323583ee638785e99c547aed749b4270217e0536 Mon Sep 17 00:00:00 2001 From: billy Date: Thu, 30 Dec 2021 13:57:56 +0800 Subject: [PATCH 06/10] fix: attach to comment && upgrade opensea dependence --- .pnpmfile.cjs | 2 +- packages/mask/package.json | 4 +- .../Collectible/SNSAdaptor/CheckoutDialog.tsx | 6 +- .../Collectible/SNSAdaptor/CheckoutOrder.tsx | 2 +- .../Collectible/hooks/useAssetOrder.ts | 1 - pnpm-lock.yaml | 74 +++++-------------- 6 files changed, 25 insertions(+), 64 deletions(-) diff --git a/.pnpmfile.cjs b/.pnpmfile.cjs index 80126c5d1044..850883e4424e 100644 --- a/.pnpmfile.cjs +++ b/.pnpmfile.cjs @@ -14,7 +14,7 @@ const approvedList = new Map([ 'wyvern-js', ['git+https://github.com/ProjectOpenSea/wyvern-js.git#v3.2.1', 'github:ProjectOpenSea/wyvern-js#semver:^3.2.1'], ], - ['wyvern-schemas', 'git+https://github.com/ProjectOpenSea/wyvern-schemas.git#v0.11.1'], + ['wyvern-schemas', 'git+https://github.com/ProjectOpenSea/wyvern-schemas.git#v0.13.1'], ['bignumber.js', 'git+https://github.com/frozeman/bignumber.js-nolookahead.git'], /* cspell:disable-next-line */ ['html-parse-stringify2', 'github:locize/html-parse-stringify2'], diff --git a/packages/mask/package.json b/packages/mask/package.json index d49f6010dc94..e4b374dd868c 100644 --- a/packages/mask/package.json +++ b/packages/mask/package.json @@ -30,9 +30,9 @@ "@masknet/shared-base": "workspace:*", "@masknet/theme": "workspace:*", "@masknet/web3-contracts": "workspace:*", + "@masknet/web3-providers": "workspace:*", "@masknet/web3-shared-base": "workspace:*", "@masknet/web3-shared-evm": "workspace:*", - "@masknet/web3-providers": "workspace:*", "@msgpack/msgpack": "^2.7.1", "@servie/events": "^3.0.0", "@sinonjs/text-encoding": "^0.7.1", @@ -90,7 +90,7 @@ "lodash-es": "npm:lodash@^4.17.11", "millify": "^4.0.0", "next-tick": "^1.0.0", - "opensea-js": "^1.1.11", + "opensea-js": "^1.2.7", "promievent": "^0.1.4", "protobufjs": "^6.11.2", "react-draggable": "^4.4.4", diff --git a/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutDialog.tsx b/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutDialog.tsx index 0cda9bb88a05..aa1edffc5738 100644 --- a/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutDialog.tsx +++ b/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutDialog.tsx @@ -24,8 +24,8 @@ import { PluginTraderMessages } from '../../Trader/messages' import { CheckoutOrder } from './CheckoutOrder' import type { useAsset } from '../../EVM/hooks/useAsset' import type { useAssetOrder } from '../hooks/useAssetOrder' -import BigNumber from 'bignumber.js' import type { Coin } from '../../Trader/types' +import { isGreaterThan } from '@masknet/web3-shared-base' const useStyles = makeStyles()((theme) => { return { @@ -107,9 +107,7 @@ export function CheckoutDialog(props: CheckoutDialogProps) { }, [token.value, openSwapDialog]) const validationMessage = useMemo(() => { - const basePrice = new BigNumber(order?.value?.basePrice ?? '0') - const balance_ = new BigNumber(balance.value ?? '0') - if (basePrice.isGreaterThan(balance_)) { + if (isGreaterThan(order?.value?.basePrice ?? 0, balance.value ?? 0)) { setIsInsufficientBalance(true) return t('plugin_collectible_insufficient_balance') } diff --git a/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutOrder.tsx b/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutOrder.tsx index ef8af0a3e2f2..8ed4ee6aff88 100644 --- a/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutOrder.tsx +++ b/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutOrder.tsx @@ -40,7 +40,7 @@ export function CheckoutOrder(props: CheckoutOrderProps) { return item.symbol === asset.value?.current_symbol })?.decimals if (!decimal) return 'error' - return formatBalance(new BigNumber(price), decimal()) ?? 'error' + return formatBalance(new BigNumber(price), decimal) ?? 'error' } return ( diff --git a/packages/mask/src/plugins/Collectible/hooks/useAssetOrder.ts b/packages/mask/src/plugins/Collectible/hooks/useAssetOrder.ts index c89a5c35d736..0aefd3dfe611 100644 --- a/packages/mask/src/plugins/Collectible/hooks/useAssetOrder.ts +++ b/packages/mask/src/plugins/Collectible/hooks/useAssetOrder.ts @@ -14,7 +14,6 @@ export function useAssetOrder(provider: NonFungibleAssetProvider, token?: Collec switch (provider) { case NonFungibleAssetProvider.OPENSEA: const openSeaResponse = await PluginCollectibleRPC.getAssetFromSDK(token.contractAddress, token.tokenId) - console.log(openSeaResponse.sellOrders, 'fff') const getPrice = (order: Order) => getOrderUnitPrice( order.currentPrice as unknown as string, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3de41c5ae0ec..539976b191ba 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -369,7 +369,7 @@ importers: lodash-es: npm:lodash@^4.17.11 millify: ^4.0.0 next-tick: ^1.0.0 - opensea-js: ^1.1.11 + opensea-js: ^1.2.7 promievent: ^0.1.4 protobufjs: ^6.11.2 react-devtools-core: ^4.22.1 @@ -496,7 +496,7 @@ importers: lodash-es: /lodash/4.17.21 millify: 4.0.0 next-tick: 1.1.0 - opensea-js: 1.1.11 + opensea-js: 1.2.7 promievent: 0.1.5 protobufjs: 6.11.2 react-draggable: 4.4.4_757a802188413a36d4f24237d13b8e90 @@ -998,7 +998,7 @@ packages: bintrees: 1.0.2 bn.js: 4.12.0 compare-versions: 3.6.0 - ethereumjs-abi: 0.6.8 + ethereumjs-abi: 0.6.6 ethereumjs-blockstream: 2.0.7 ethereumjs-util: 5.2.1 find-versions: 2.0.0 @@ -9407,7 +9407,7 @@ packages: resolution: {integrity: sha1-LY4+XQvb1zJ/kbyBT1xXZg+Bgk0=} deprecated: Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410 dependencies: - follow-redirects: 1.14.6 + follow-redirects: 1.14.5 is-buffer: 1.1.6 transitivePeerDependencies: - debug @@ -11499,7 +11499,7 @@ packages: /core-js/1.2.7: resolution: {integrity: sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=} - deprecated: core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js. + deprecated: core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js. dev: false /core-js/2.6.12: @@ -13455,11 +13455,11 @@ packages: resolution: {integrity: sha512-5qwJ5n3YhjSpE6O/WEBXCAb2nagUgyagJ6C0lGUBWC4LjKp/rRzD+pwtDJ6KCiITFEAoX4eIrWOjRy0Sylq5Hg==} dev: false - /ethereumjs-abi/0.6.8: - resolution: {integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==} + /ethereumjs-abi/0.6.6: + resolution: {integrity: sha512-w8KubDsA/+OAuqtIR9RGsMcoZ5nhM8vxwjJAJvEIY+clhxA3BHoLG3+ClYQaQhD0n3mlDt3U5rBrmSVJvI3c8A==} dependencies: bn.js: 4.12.0 - ethereumjs-util: 6.2.1 + ethereumjs-util: 5.2.1 dev: false /ethereumjs-account/2.0.5: @@ -13539,7 +13539,7 @@ packages: elliptic: 6.5.4 ethereum-cryptography: 0.1.3 ethjs-util: 0.1.6 - rlp: 2.2.6 + rlp: 2.2.7 safe-buffer: 5.2.1 dev: false @@ -14067,11 +14067,11 @@ packages: /fbemitter/2.1.1: resolution: {integrity: sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU=} dependencies: - fbjs: 0.8.17 + fbjs: 0.8.18 dev: false - /fbjs/0.8.17: - resolution: {integrity: sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=} + /fbjs/0.8.18: + resolution: {integrity: sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==} dependencies: core-js: 1.2.7 isomorphic-fetch: 2.2.1 @@ -14079,7 +14079,7 @@ packages: object-assign: 4.1.1 promise: 7.3.1 setimmediate: 1.0.5 - ua-parser-js: 0.7.28 + ua-parser-js: 0.7.31 dev: false /fetch-ponyfill/4.1.0: @@ -14143,11 +14143,6 @@ packages: dependencies: to-regex-range: 5.0.1 - /filter-obj/1.1.0: - resolution: {integrity: sha1-mzERErxsYSehbgFsbF1/GeCAXFs=} - engines: {node: '>=0.10.0'} - dev: false - /finalhandler/1.1.2: resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} engines: {node: '>= 0.8'} @@ -14302,16 +14297,6 @@ packages: debug: optional: true - /follow-redirects/1.14.6: - resolution: {integrity: sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false - /for-each/0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: @@ -16362,7 +16347,7 @@ packages: /isomorphic-unfetch/2.1.1: resolution: {integrity: sha512-nd8AULy4i2rA8dv0nOBT9xieIegd3xi7NDxTQ9+iNXDTyaG6VbUYW3F+TdMRqxqXhDFWM2k7fttKx9W2Wd8JpQ==} dependencies: - node-fetch: 2.6.1 + node-fetch: 2.6.6 unfetch: 3.1.2 dev: false @@ -18485,7 +18470,6 @@ packages: engines: {node: 4.x || >=6.0.0} dependencies: whatwg-url: 5.0.0 - dev: true /node-forge/0.10.0: resolution: {integrity: sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==} @@ -18847,8 +18831,8 @@ packages: is-wsl: 2.2.0 dev: true - /opensea-js/1.1.11: - resolution: {integrity: sha512-XKB4iFEWfK2bU5ne2ewvpaotjI2iPj/L7PRQ0j9GFTX5EBy6/A4Sy8B+lfeKSgOsy1GEmyM1DsvekfVqND/2ig==} + /opensea-js/1.2.7: + resolution: {integrity: sha512-s/ixGOIOpvqKiau3lSdUJF/osKVYh9yVZBpOslsk5bgRlbkJkBrfqCh0/2GH11EvX/wRYSaL70IYKvYew7g2pg==} dependencies: bignumber.js: 4.1.0 ethereumjs-abi: github.com/ProjectWyvern/ethereumjs-abi/3d2d89641a6ad5984929b6ca4b646452ec74f73d @@ -18857,7 +18841,7 @@ packages: isomorphic-unfetch: 2.1.1 json-loader: 0.5.7 lodash: 4.17.21 - query-string: 6.14.1 + query-string: 6.13.5 web3: 0.20.7 webpack: 3.12.0 wyvern-js: github.com/ProjectOpenSea/wyvern-js/fabb7660f23f2252c141077e32193d281036299e @@ -19857,16 +19841,6 @@ packages: strict-uri-encode: 2.0.0 dev: false - /query-string/6.14.1: - resolution: {integrity: sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==} - engines: {node: '>=6'} - dependencies: - decode-uri-component: 0.2.0 - filter-obj: 1.1.0 - split-on-first: 1.1.0 - strict-uri-encode: 2.0.0 - dev: false - /querystring-es3/0.2.1: resolution: {integrity: sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=} engines: {node: '>=0.4.x'} @@ -20962,13 +20936,6 @@ packages: hash-base: 3.1.0 inherits: 2.0.4 - /rlp/2.2.6: - resolution: {integrity: sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg==} - hasBin: true - dependencies: - bn.js: 4.12.0 - dev: false - /rlp/2.2.7: resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} hasBin: true @@ -22779,7 +22746,6 @@ packages: /tr46/0.0.3: resolution: {integrity: sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=} - dev: true /tr46/2.1.0: resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} @@ -23239,8 +23205,8 @@ packages: resolution: {integrity: sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=} dev: false - /ua-parser-js/0.7.28: - resolution: {integrity: sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==} + /ua-parser-js/0.7.31: + resolution: {integrity: sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==} dev: false /uglify-js/2.8.29: @@ -24210,7 +24176,6 @@ packages: /webidl-conversions/3.0.1: resolution: {integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=} - dev: true /webidl-conversions/5.0.0: resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} @@ -24630,7 +24595,6 @@ packages: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: true /whatwg-url/8.7.0: resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} From dfc3d166d51628db1d9f67c79b8454ccae9e6b40 Mon Sep 17 00:00:00 2001 From: billy Date: Thu, 30 Dec 2021 14:08:08 +0800 Subject: [PATCH 07/10] fix: type AssetOrder modified --- .../Collectible/hooks/useAssetOrder.ts | 19 ++++++++++++------- .../src/plugins/Collectible/types/opensea.ts | 2 ++ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/packages/mask/src/plugins/Collectible/hooks/useAssetOrder.ts b/packages/mask/src/plugins/Collectible/hooks/useAssetOrder.ts index 0aefd3dfe611..1b4f2ca7f4b4 100644 --- a/packages/mask/src/plugins/Collectible/hooks/useAssetOrder.ts +++ b/packages/mask/src/plugins/Collectible/hooks/useAssetOrder.ts @@ -6,7 +6,7 @@ import { head } from 'lodash-unified' import type { Order } from 'opensea-js/lib/types' import { useAsyncRetry } from 'react-use' import { PluginCollectibleRPC } from '../messages' -import type { CollectibleToken } from '../types' +import type { AssetOrder, CollectibleToken } from '../types' export function useAssetOrder(provider: NonFungibleAssetProvider, token?: CollectibleToken) { return useAsyncRetry(async () => { @@ -14,12 +14,17 @@ export function useAssetOrder(provider: NonFungibleAssetProvider, token?: Collec switch (provider) { case NonFungibleAssetProvider.OPENSEA: const openSeaResponse = await PluginCollectibleRPC.getAssetFromSDK(token.contractAddress, token.tokenId) - const getPrice = (order: Order) => - getOrderUnitPrice( - order.currentPrice as unknown as string, - order.paymentTokenContract?.decimals ?? 0, - order.quantity as unknown as string, - ) ?? ZERO + const getPrice = (order: Order | AssetOrder) => { + const _order = order as AssetOrder + return ( + getOrderUnitPrice( + _order.currentPrice, + _order.paymentTokenContract?.decimals, + _order.quantity, + ) ?? ZERO + ) + } + const sellOrders = openSeaResponse.sellOrders ?? [] const desktopOrder = head(sellOrders.sort((a, b) => getPrice(a).toNumber() - getPrice(b).toNumber())) return desktopOrder diff --git a/packages/mask/src/plugins/Collectible/types/opensea.ts b/packages/mask/src/plugins/Collectible/types/opensea.ts index a0af4e48e4de..b6f6046f7f0b 100644 --- a/packages/mask/src/plugins/Collectible/types/opensea.ts +++ b/packages/mask/src/plugins/Collectible/types/opensea.ts @@ -189,6 +189,8 @@ export interface AssetOrder { expiration_time: number order_hash: string base_price?: string + currentPrice?: string + paymentTokenContract?: OpenSeaFungibleToken } export interface OpenSeaResponse extends Asset { From 61d97a792b05020157bcdabe13f072ee1a5dd6be Mon Sep 17 00:00:00 2001 From: billy Date: Thu, 30 Dec 2021 15:03:26 +0800 Subject: [PATCH 08/10] fix: variable rename --- .../plugins/Collectible/SNSAdaptor/CheckoutDialog.tsx | 9 +++++---- .../src/plugins/Collectible/SNSAdaptor/CheckoutOrder.tsx | 3 +-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutDialog.tsx b/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutDialog.tsx index aa1edffc5738..c8247ea76d5c 100644 --- a/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutDialog.tsx +++ b/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutDialog.tsx @@ -71,7 +71,7 @@ export function CheckoutDialog(props: CheckoutDialogProps) { const [unreviewedChecked, setUnreviewedChecked] = useState(false) const [ToS_Checked, setToS_Checked] = useState(false) - const [isInsufficientBalance, setIsInsufficientBalance] = useState(false) + const [insufficientBalance, setInsufficientBalance] = useState(false) const { token, balance } = useFungibleTokenWatched({ type: EthereumTokenType.Native, address: order.value?.paymentTokenContract?.address ?? '', @@ -108,7 +108,8 @@ export function CheckoutDialog(props: CheckoutDialogProps) { const validationMessage = useMemo(() => { if (isGreaterThan(order?.value?.basePrice ?? 0, balance.value ?? 0)) { - setIsInsufficientBalance(true) + setInsufficientBalance(true) + console.log(insufficientBalance, 'fff') return t('plugin_collectible_insufficient_balance') } if (!isVerified && !unreviewedChecked) return t('plugin_collectible_ensure_unreviewed_item') @@ -196,13 +197,13 @@ export function CheckoutDialog(props: CheckoutDialogProps) { completeOnClick={onClose} failedOnClick="use executor" /> - {asset?.value?.isOrderWeth || isInsufficientBalance ? ( + {asset?.value?.isOrderWeth || insufficientBalance ? ( - {isInsufficientBalance + {insufficientBalance ? t('plugin_collectible_get_more_token', { token: token.value?.symbol }) : t('plugin_collectible_convert_eth')} diff --git a/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutOrder.tsx b/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutOrder.tsx index 8ed4ee6aff88..fbbc1e5565e3 100644 --- a/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutOrder.tsx +++ b/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutOrder.tsx @@ -6,7 +6,6 @@ import { resolveAssetLinkOnOpenSea } from '../pipes' import { useI18N } from '../../../utils' import type { useAsset } from '../../EVM/hooks/useAsset' import type { useAssetOrder } from '../hooks/useAssetOrder' -import BigNumber from 'bignumber.js' import type { Order } from 'opensea-js/lib/types' const useStyles = makeStyles()((theme) => ({ @@ -40,7 +39,7 @@ export function CheckoutOrder(props: CheckoutOrderProps) { return item.symbol === asset.value?.current_symbol })?.decimals if (!decimal) return 'error' - return formatBalance(new BigNumber(price), decimal) ?? 'error' + return formatBalance(price, decimal) ?? 'error' } return ( From e47f7a50b3fb0a9d0cdae61249ffb9f2075ba35c Mon Sep 17 00:00:00 2001 From: billy Date: Thu, 30 Dec 2021 15:04:54 +0800 Subject: [PATCH 09/10] style: kill console --- .../mask/src/plugins/Collectible/SNSAdaptor/CheckoutDialog.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutDialog.tsx b/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutDialog.tsx index c8247ea76d5c..7d364fd1400b 100644 --- a/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutDialog.tsx +++ b/packages/mask/src/plugins/Collectible/SNSAdaptor/CheckoutDialog.tsx @@ -109,7 +109,6 @@ export function CheckoutDialog(props: CheckoutDialogProps) { const validationMessage = useMemo(() => { if (isGreaterThan(order?.value?.basePrice ?? 0, balance.value ?? 0)) { setInsufficientBalance(true) - console.log(insufficientBalance, 'fff') return t('plugin_collectible_insufficient_balance') } if (!isVerified && !unreviewedChecked) return t('plugin_collectible_ensure_unreviewed_item') From a5b4ec96def5f67be0561b49c5ae9061b416e772 Mon Sep 17 00:00:00 2001 From: billy Date: Thu, 30 Dec 2021 15:08:10 +0800 Subject: [PATCH 10/10] style: variable renamed --- .../plugins/Collectible/SNSAdaptor/MakeOfferDialog.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/mask/src/plugins/Collectible/SNSAdaptor/MakeOfferDialog.tsx b/packages/mask/src/plugins/Collectible/SNSAdaptor/MakeOfferDialog.tsx index ab6b948f628b..d7ecbf427a74 100644 --- a/packages/mask/src/plugins/Collectible/SNSAdaptor/MakeOfferDialog.tsx +++ b/packages/mask/src/plugins/Collectible/SNSAdaptor/MakeOfferDialog.tsx @@ -91,7 +91,7 @@ export function MakeOfferDialog(props: MakeOfferDialogProps) { const [expirationDateTime, setExpirationDateTime] = useState(new Date()) const [unreviewedChecked, setUnreviewedChecked] = useState(false) const [ToS_Checked, setToS_Checked] = useState(false) - const [is_insufficient_balance, setIs_insufficient_balance] = useState(false) + const [insufficientBalance, setInsufficientBalance] = useState(false) const { amount, token, balance, setAmount, setToken } = useFungibleTokenWatched(selectedPaymentToken) @@ -138,12 +138,12 @@ export function MakeOfferDialog(props: MakeOfferDialogProps) { }, [open]) const validationMessage = useMemo(() => { - setIs_insufficient_balance(false) + setInsufficientBalance(false) const amount_ = rightShift(amount, token.value?.decimals) const balance_ = new BigNumber(balance.value ?? '0') if (amount_.isNaN() || amount_.isZero()) return t('plugin_collectible_enter_a_price') if (balance_.isZero() || amount_.isGreaterThan(balance_)) { - setIs_insufficient_balance(true) + setInsufficientBalance(true) return t('plugin_collectible_insufficient_balance') } if (!isAuction && expirationDateTime.getTime() - Date.now() <= 0) @@ -266,13 +266,13 @@ export function MakeOfferDialog(props: MakeOfferDialogProps) { failedOnClick="use executor" /> {(isAuction ? asset.value?.isCollectionWeth : asset.value?.isOrderWeth) || - is_insufficient_balance ? ( + insufficientBalance ? ( - {is_insufficient_balance + {insufficientBalance ? t('plugin_collectible_get_more_token', { token: token.value?.symbol }) : t('plugin_collectible_convert_eth')}