diff --git a/public/landing/biteth.png b/public/landing/biteth.png new file mode 100644 index 000000000..115718df8 Binary files /dev/null and b/public/landing/biteth.png differ diff --git a/src/modules/Whitelist/leaderBoard/index.tsx b/src/modules/Whitelist/leaderBoard/index.tsx index de336df4a..8d6e20686 100644 --- a/src/modules/Whitelist/leaderBoard/index.tsx +++ b/src/modules/Whitelist/leaderBoard/index.tsx @@ -16,7 +16,7 @@ import { getUrlAvatarTwitter } from '@/utils/twitter'; import cs from 'clsx'; import { useAppSelector } from '@/stores/hooks'; import { commonSelector } from '@/stores/states/common/selector'; -import uniqueBy from '@popperjs/core/lib/utils/uniqueBy'; +import BigNumber from 'bignumber.js'; const valueToClassName: any = { '10': 'boost_10', @@ -34,7 +34,6 @@ const LeaderBoard = () => { const [data, setData] = useState([]); const [isFetching, setIsFetching] = useState(true); const [refreshing, setRefreshing] = useState(false); - const [count, setCount] = useState(undefined); const needReload = useAppSelector(commonSelector).needReload; const hasIncrementedPageRef = useRef(false); @@ -62,7 +61,6 @@ const LeaderBoard = () => { const { data: response, count } = await getTopLeaderBoards({ ...refParams.current, }); - setCount(count) if (isNew) { const { data: response2 } = await getTopLeaderBoards({ page: 1, @@ -161,6 +159,10 @@ const LeaderBoard = () => { alignItems={'center'} width={'100%'} justifyContent={'space-between'} + cursor="pointer" + onClick={() => { + window.open(`https://twitter.com/${data?.twitter_username}`) + }} > { )} address={''} width={36} - name={data?.twitter_username || ''} + name={data?.twitter_name || data?.twitter_username || ''} /> {data?.twitter_name && ( @@ -251,7 +253,7 @@ const LeaderBoard = () => { label={

Content Points are calculated based on the performance of your posts on X, including Views, Likes, Reposts, and Quotes. - Note: To be qualified, you must tag: @bvmnetwork

+ Note: To be qualified, you must tag:
@bvmnetwork

} > @@ -337,45 +339,60 @@ const LeaderBoard = () => { // ); // }, // }, - // { - // id: 'feature', - // label: ( - // - // Gas Spent - // - // ), - // labelConfig, - // config: { - // borderBottom: 'none', - // fontSize: '16px', - // fontWeight: 500, - // verticalAlign: 'middle', - // letterSpacing: '-0.5px', - // }, - // render(data: ILeaderBoardPoint) { - // return ( - // - // - // - // {formatCurrency(data?.point_portfolio_inday, 0, 0)} - // - // - // - // ); - // }, - // }, + { + id: 'feature', + label: ( + +

Gas Spent

+ +

Gas spent is calculated from total gas fees paid on Bitcoin, starting with the first payment to wallet verification on the BVM allowlist.

+
+ } + > + + +
+ ), + labelConfig, + config: { + borderBottom: 'none', + fontSize: '16px', + fontWeight: 500, + verticalAlign: 'middle', + letterSpacing: '-0.5px', + }, + render(data: ILeaderBoardPoint) { + return ( + + + + {formatCurrency(data?.gas_point, 0, 0)} + + + + ); + }, + }, { id: 'point', label: ( @@ -408,7 +425,7 @@ const LeaderBoard = () => { > - {formatCurrency(data.point, 0, 0)} + {formatCurrency(new BigNumber(data?.point || '0').plus(data?.gas_point || '0').toNumber(), 0, 0)}
diff --git a/src/modules/landing/Componets/BitEth/index.tsx b/src/modules/landing/Componets/BitEth/index.tsx index 082c7e664..c3ac003bd 100644 --- a/src/modules/landing/Componets/BitEth/index.tsx +++ b/src/modules/landing/Componets/BitEth/index.tsx @@ -19,12 +19,12 @@ export default function BitEth() {
- {'biteth.svg'} - Minimal effort to migrate from Ethereum to Bitcoin. + Minimal effort to migrate from Ethereum to Bitcoin. diff --git a/src/modules/landing/Componets/Chain/index.tsx b/src/modules/landing/Componets/Chain/index.tsx index 047e1f211..ce8d963bc 100644 --- a/src/modules/landing/Componets/Chain/index.tsx +++ b/src/modules/landing/Componets/Chain/index.tsx @@ -140,7 +140,7 @@ export default function Chain() {

Case studies

- Say hello to the first EVM-compatible Bitcoin L2 blockchains powered by BVM. + Say hello to the first EVM-compatible Bitcoin L2 blockchains powered by BVM. diff --git a/src/modules/landing/Componets/Chain/styles.module.scss b/src/modules/landing/Componets/Chain/styles.module.scss index 74fb9eb3b..59b2b8e1d 100644 --- a/src/modules/landing/Componets/Chain/styles.module.scss +++ b/src/modules/landing/Componets/Chain/styles.module.scss @@ -49,7 +49,7 @@ } &_heading{ - max-width: 820px; + max-width: 900px; margin-left: auto; margin-right: auto; } diff --git a/src/modules/landing/Componets/HeadingTextV2/index.tsx b/src/modules/landing/Componets/HeadingTextV2/index.tsx index 2b4e87540..bc03a399a 100644 --- a/src/modules/landing/Componets/HeadingTextV2/index.tsx +++ b/src/modules/landing/Componets/HeadingTextV2/index.tsx @@ -41,7 +41,7 @@ export default function HeadingTextV2({ headings, className, children }: IProp) useEffect(() => { if (!play) return; refTime.current = setTimeout(nextSlide, 500); - refLoop.current = setInterval(nextSlide, 3000); + refLoop.current = setInterval(nextSlide, 2000); return () => { clearInterval(refLoop.current); clearTimeout(refTime.current); diff --git a/src/utils/storage/allowlist.storage.ts b/src/utils/storage/allowlist.storage.ts index a6b81794e..ae3ed1612 100644 --- a/src/utils/storage/allowlist.storage.ts +++ b/src/utils/storage/allowlist.storage.ts @@ -1,5 +1,6 @@ import storage from '@/utils/storage/local'; import { WalletType } from '@/interfaces/wallet'; +import { compareString } from '@/utils/string'; interface IStorageItem { address: string, @@ -11,11 +12,15 @@ class AllowListStorage { private static STORAGE_KEY = 'ALLOW_LIST_STORAGE_0.0.1'; public static getStorage = (): IStorageItem[] | undefined => { - const data = storage.get(this.STORAGE_KEY); - if (data) { - return JSON.parse(data as string) as IStorageItem[] + try { + const data = storage.get(this.STORAGE_KEY); + if (data) { + return JSON.parse(data as string) as IStorageItem[] + } + return undefined + } catch (e) { + return undefined } - return undefined }; public static setStorage = (payload: IStorageItem) => { try { @@ -24,7 +29,9 @@ class AllowListStorage { storage.set(this.STORAGE_KEY, JSON.stringify([payload])); return; } - data.push(payload) + if (!data.some(item => compareString(item.address, payload.address))) { + data.push(payload) + } storage.set(this.STORAGE_KEY, JSON.stringify(data)); } catch (error) { console.log('setStorage error: ', error);