From 531373f74c261c995f57f102ca052d5d8caf6639 Mon Sep 17 00:00:00 2001 From: 0xstt Date: Tue, 24 Jun 2025 17:55:47 +0300 Subject: [PATCH 1/2] L1 performance fact sheet draft version --- app/(home)/l1-performance/page.tsx | 61 +++++ components/charts/L1TPSChart.tsx | 31 +++ .../l1-performance/AnimatedBackground.tsx | 50 ++++ components/l1-performance/CTASection.tsx | 30 +++ .../l1-performance/EconomicsSection.tsx | 107 +++++++++ components/l1-performance/FAQSection.tsx | 83 +++++++ components/l1-performance/HeroSection.tsx | 19 ++ .../HorizontalScrollSection.tsx | 119 ++++++++++ components/l1-performance/MetricsSection.tsx | 74 ++++++ components/l1-performance/OverviewSection.tsx | 125 ++++++++++ .../l1-performance/PerformanceSection.tsx | 221 ++++++++++++++++++ components/l1-performance/SvgPatterns.tsx | 44 ++++ .../l1-performance/ValidationSection.tsx | 123 ++++++++++ components/l1-performance/index.ts | 11 + 14 files changed, 1098 insertions(+) create mode 100644 app/(home)/l1-performance/page.tsx create mode 100644 components/charts/L1TPSChart.tsx create mode 100644 components/l1-performance/AnimatedBackground.tsx create mode 100644 components/l1-performance/CTASection.tsx create mode 100644 components/l1-performance/EconomicsSection.tsx create mode 100644 components/l1-performance/FAQSection.tsx create mode 100644 components/l1-performance/HeroSection.tsx create mode 100644 components/l1-performance/HorizontalScrollSection.tsx create mode 100644 components/l1-performance/MetricsSection.tsx create mode 100644 components/l1-performance/OverviewSection.tsx create mode 100644 components/l1-performance/PerformanceSection.tsx create mode 100644 components/l1-performance/SvgPatterns.tsx create mode 100644 components/l1-performance/ValidationSection.tsx create mode 100644 components/l1-performance/index.ts diff --git a/app/(home)/l1-performance/page.tsx b/app/(home)/l1-performance/page.tsx new file mode 100644 index 00000000000..f15ca6da7e7 --- /dev/null +++ b/app/(home)/l1-performance/page.tsx @@ -0,0 +1,61 @@ +'use client'; + +import { useState, useEffect } from 'react'; +import { + AnimatedBackground, + HeroSection, + MetricsSection, + HorizontalScrollSection, + FAQSection, + CTASection +} from '@/components/l1-performance'; + +export default function L1PerformancePage() { + const [isInSlider, setIsInSlider] = useState(false); + + // Initialize custom animations + useEffect(() => { + addCustomAnimations(); + }, []); + + return ( +
+ +
+ + + + + +
+
+ ); +} + +// Add custom animations to global CSS +const addCustomAnimations = () => { + if (typeof document !== 'undefined') { + const style = document.createElement('style'); + style.textContent = ` + @keyframes circuit-vertical { + 0% { transform: translateY(-100%); opacity: 0; } + 50% { opacity: 0.5; } + 100% { transform: translateY(100%); opacity: 0; } + } + + @keyframes wave { + 0%, 100% { transform: translateY(0px); } + 50% { transform: translateY(-10px); } + } + + .animate-circuit-vertical { + animation: circuit-vertical 8s linear infinite; + } + + .animate-wave { + animation: wave 8s ease-in-out infinite; + } + `; + document.head.appendChild(style); + } +}; diff --git a/components/charts/L1TPSChart.tsx b/components/charts/L1TPSChart.tsx new file mode 100644 index 00000000000..a9a775da80b --- /dev/null +++ b/components/charts/L1TPSChart.tsx @@ -0,0 +1,31 @@ +"use client"; + +import { ChartContainer } from '@/components/ui/chart'; +import { + ResponsiveContainer, + LineChart, + Line, + XAxis, + YAxis, + Tooltip as RechartsTooltip, +} from "recharts"; + +export default function L1TPSChart({ data }: { data: any[] }) { + return ( + +
+ + + + + + + + +
+
+ ); +} \ No newline at end of file diff --git a/components/l1-performance/AnimatedBackground.tsx b/components/l1-performance/AnimatedBackground.tsx new file mode 100644 index 00000000000..a6ee9daae8d --- /dev/null +++ b/components/l1-performance/AnimatedBackground.tsx @@ -0,0 +1,50 @@ +// Animated Background Components +export const AnimatedBackground = () => ( +
+ {/* Gradient Orbs */} +
+
+
+ + {/* Additional Gradient Orbs */} +
+
+
+
+
+
+ + {/* Network Grid Lines */} +
+ + + + + + + + +
+ + {/* Animated Circuit Lines */} +
+ {/* Vertical Circuit Lines */} + {[...Array(6)].map((_, i) => ( +
+ ))} +
+ + {/* Subtle Wave Effect */} +
+
+); \ No newline at end of file diff --git a/components/l1-performance/CTASection.tsx b/components/l1-performance/CTASection.tsx new file mode 100644 index 00000000000..8d4295d3346 --- /dev/null +++ b/components/l1-performance/CTASection.tsx @@ -0,0 +1,30 @@ +import Link from 'next/link'; + +export const CTASection = () => ( +
+
+
+

Ready to Build Your L1?

+

+ Start building your high-performance L1 blockchain with Avalanche's battle-tested infrastructure and tooling. +

+ +
+ + Get Started + + + GitHub + +
+
+
+); \ No newline at end of file diff --git a/components/l1-performance/EconomicsSection.tsx b/components/l1-performance/EconomicsSection.tsx new file mode 100644 index 00000000000..c6e3174a99a --- /dev/null +++ b/components/l1-performance/EconomicsSection.tsx @@ -0,0 +1,107 @@ +import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card'; +import { + CheckCircle, + Coins, + Shield, + Settings, + Target, + Users, + Flame +} from 'lucide-react'; + +export const EconomicsSection = () => ( +
+ {/* Economic Model Overview */} +
+
+ +
Gas Token
+
Custom ERC-20
+
+
+ +
Staking Token
+
Validator Control
+
+
+ +
Fee Models
+
Flexible Options
+
+
+ +
+ + + + + Gas Token + + + +
+ {[ + 'Support for custom gas token', + 'Can be stablecoin or any ERC-20 token', + 'Can be shared across multiple L1s' + ].map((feature, idx) => ( +
+ + {feature} +
+ ))} +
+
+
+ + + + + + Staking Token + + + +
+ {[ + 'Can be same as gas/native token or separate', + 'Full control over validator set determination', + 'Custom implementations like node licenses' + ].map((feature, idx) => ( +
+ + {feature} +
+ ))} +
+
+
+
+ + + + Transaction Fee Models + + Flexible fee distribution and reward mechanisms + + + +
+ {[ + { title: 'Reward Address', desc: 'Set specific address to receive all transaction fees from blocks', icon: Target }, + { title: 'Fee Recipients', desc: 'Allow block producers to claim fees with their own addresses', icon: Users }, + { title: 'Burn All Fees', desc: 'Dynamically switch to burning all collected transaction fees', icon: Flame } + ].map((model, idx) => ( +
+
+ +

{model.title}

+
+

{model.desc}

+
+ ))} +
+
+
+
+); \ No newline at end of file diff --git a/components/l1-performance/FAQSection.tsx b/components/l1-performance/FAQSection.tsx new file mode 100644 index 00000000000..07eeda42043 --- /dev/null +++ b/components/l1-performance/FAQSection.tsx @@ -0,0 +1,83 @@ +import { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from '@/components/ui/accordion'; +import { + Shield, + Users, + Zap, + Activity, + ArrowRight, + Globe +} from 'lucide-react'; + +const faqData = [ + { + q: 'What types of validation models are available?', + a: 'Avalanche supports flexible validator set management with audited reference implementations for both permissioned (Proof-of-Authority) and permissionless (Proof-of-Stake with optional delegation) models. These implementations are fully customizable to meet specific requirements.', + icon: Shield + }, + { + q: 'How many validators can there be in a permissioned chain?', + a: 'Avalanche L1 chains utilize the same consensus mechanism as the public Primary Network, which has been running with over 1,000 validators. The architecture supports significantly higher theoretical maximums, constrained mainly by network latency and hardware.', + icon: Users + }, + { + q: 'Can the chain be gasless?', + a: 'Yes. Avalanche L1s can support gasless transactions through several mechanisms, including using a valueless token for gas or completely abstracting gas via relayers that sponsor transaction fees on behalf of users.', + icon: Zap + }, + { + q: 'What is the expected TPS, and is it affected by the number of validators?', + a: 'EVM L1 performance depends on multiple factors: state size, transaction type, validator count, and network latency. With a small (~10), co-located validator set and an in-memory state (<100GB), throughput can reach up to 8,400 TPS, equivalent to ~175 million gas/second (for simple transfers). With ~30 globally distributed validators, performance is around 4,000 TPS, or ~85 million gas/second—assuming the state fits in memory.', + icon: Activity + }, + { + q: 'How does the migration from PoA to PoS work?', + a: 'It is easy to migrate from PoA to PoS. The ownership of the validator manager contract is transferred to a staking manager. The ERC20 or native token Staking Manager contracts are deployed separately and are made the owner of the PoA Validator Manager contract.', + icon: ArrowRight + }, + { + q: 'How does interoperability work without trusted third-parties?', + a: 'Avalanche L1s provide native interoperability without trusted third-parties. The system uses a flat interoperability fee per validator with no sequencer revenue share, settlement fees, DA costs or message-based interoperability fees. This enables fast cross-chain communication with 2 block confirmations (3s end-to-end).', + icon: Globe + } +]; + +export const FAQSection = () => ( +
+
+

Frequently Asked Questions

+

+ Common questions about L1 performance and capabilities +

+
+ +
+
+ {faqData.map((faq, idx) => ( + + + +
+
+
+ +
+
+ + {faq.q} + +
+
+ +
+

+ {faq.a} +

+
+
+
+
+ ))} +
+
+
+); \ No newline at end of file diff --git a/components/l1-performance/HeroSection.tsx b/components/l1-performance/HeroSection.tsx new file mode 100644 index 00000000000..52e3be0f27b --- /dev/null +++ b/components/l1-performance/HeroSection.tsx @@ -0,0 +1,19 @@ +import { AvalancheLogo } from '@/components/navigation/avalanche-logo'; + +export const HeroSection = () => ( +
+
+ +
+

+ L1 Performance + + Fact Sheet + +

+

+ Discover the cutting-edge performance metrics and capabilities of our L1 blockchain solution, + designed for maximum throughput, minimal latency, and seamless interoperability. +

+
+); \ No newline at end of file diff --git a/components/l1-performance/HorizontalScrollSection.tsx b/components/l1-performance/HorizontalScrollSection.tsx new file mode 100644 index 00000000000..5fffafccaf6 --- /dev/null +++ b/components/l1-performance/HorizontalScrollSection.tsx @@ -0,0 +1,119 @@ +import { useState } from 'react'; +import { Button } from '@/components/ui/button'; +import { + ChevronLeft, + ChevronRight, + BarChart3, + TrendingUp, + Shield, + Coins +} from 'lucide-react'; +import { OverviewSection } from './OverviewSection'; +import { PerformanceSection } from './PerformanceSection'; +import { ValidationSection } from './ValidationSection'; +import { EconomicsSection } from './EconomicsSection'; + +const sections = [ + { + id: 'overview', + title: 'Overview', + subtitle: 'Key advantages and technical specifications', + icon: BarChart3, + content: + }, + { + id: 'performance', + title: 'Performance', + subtitle: 'Scaling and performance characteristics', + icon: TrendingUp, + content: + }, + { + id: 'validation', + title: 'Validation', + subtitle: 'Flexible validation mechanisms', + icon: Shield, + content: + }, + { + id: 'economics', + title: 'Economics', + subtitle: 'Tokenomics and fee structures', + icon: Coins, + content: + } +]; + +interface HorizontalScrollSectionProps { + isInSlider: boolean; + setIsInSlider: (value: boolean) => void; +} + +export const HorizontalScrollSection = ({ isInSlider, setIsInSlider }: HorizontalScrollSectionProps) => { + const [currentSection, setCurrentSection] = useState(0); + + return ( +
+ {/* Navigation Dots - Fixed Position */} +
+ {sections.map((_, index) => ( +
+ + {/* Current Section Display */} +
+

{sections[currentSection].title}

+

{sections[currentSection].subtitle}

+
+ + {/* Navigation Buttons */} +
+ + + +
+ + {/* Responsive Section Container - NO horizontal scroll */} +
+
+ {sections.map((section, index) => ( +
+
+ {section.content} +
+
+ ))} +
+
+
+ ); +}; \ No newline at end of file diff --git a/components/l1-performance/MetricsSection.tsx b/components/l1-performance/MetricsSection.tsx new file mode 100644 index 00000000000..a31fb8ea9ba --- /dev/null +++ b/components/l1-performance/MetricsSection.tsx @@ -0,0 +1,74 @@ +import { Card, CardContent } from '@/components/ui/card'; +import { Badge } from '@/components/ui/badge'; +import { + Zap, + Coins, + Network, + Target +} from 'lucide-react'; +import { DotsPattern, GridPattern, WavePattern, HexagonPattern } from './SvgPatterns'; + +const metrics = [ + { + title: 'Gas Token', + value: 'Fully Customizable', + subtitle: 'ERC-20, stablecoin, ...', + icon: Coins, + pattern: DotsPattern, + }, + { + title: 'Throughput', + value: 'Up to 8.4k TPS', + subtitle: '(simple transfers / 175m gas per second)', + icon: Zap, + pattern: GridPattern, + }, + { + title: 'Block Time', + value: 'Up to 125ms', + subtitle: 'Configurable target rate', + icon: Target, + pattern: WavePattern, + }, + { + title: 'Interoperability', + value: 'Native', + subtitle: 'No third parties', + icon: Network, + pattern: HexagonPattern, + } +]; + +export const MetricsSection = () => ( +
+
+ +

Performance Metrics

+

+ Industry-leading performance benchmarks that set new standards for blockchain technology +

+
+ +
+ {metrics.map((metric, index) => ( + + {/* Background Icon */} +
+ +
+ +
+ + {metric.title} + +
+
+

{metric.value}

+

{metric.subtitle}

+
+
+
+ ))} +
+
+); \ No newline at end of file diff --git a/components/l1-performance/OverviewSection.tsx b/components/l1-performance/OverviewSection.tsx new file mode 100644 index 00000000000..ff3acb671c4 --- /dev/null +++ b/components/l1-performance/OverviewSection.tsx @@ -0,0 +1,125 @@ +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { Badge } from '@/components/ui/badge'; +import { + BarChart3, + CheckCircle, + Gauge, + Network, + Shield, + Zap +} from 'lucide-react'; + +export const OverviewSection = () => ( +
+ {/* Hero Stats */} +
+
+
100%
+
EVM Compatible
+
+
+
+
Customizable
+
+
+
Native
+
Interoperability
+
+
+ +
+
+ + {/* Decorative Elements */} +
+
+ + +
+
+
+ +
+ {/* Floating Indicator */} +
+
+
+ + Key Advantages + +
+
+ + + +
+ {[ + 'Native interoperability without trusted third-parties', + 'Fully customizable gas tokens and transaction fees', + 'Flat interoperability fee per validator', + 'No sequencer revenue share or DA costs' + ].map((item, idx) => ( +
+
+
+ +
+ + {item} + +
+
+ ))} +
+
+ +
+ +
+ + {/* Decorative Elements */} +
+
+ + +
+
+
+ +
+ {/* Floating Indicator */} +
+
+
+ + Technical Specifications + +
+
+ + + +
+ {[ + { label: 'EVM Compatibility', value: 'Full', icon: CheckCircle }, + { label: 'RPC Compatibility', value: 'Geth/Besu', icon: Network }, + { label: 'Gasless Support', value: 'Yes', icon: Zap }, + { label: 'State Growth Control', value: 'Strict', icon: Shield } + ].map((spec, idx) => ( +
+
+
+ + {spec.label} +
+ {spec.value} +
+
+ ))} +
+
+ +
+
+
+); \ No newline at end of file diff --git a/components/l1-performance/PerformanceSection.tsx b/components/l1-performance/PerformanceSection.tsx new file mode 100644 index 00000000000..a73376d9c1c --- /dev/null +++ b/components/l1-performance/PerformanceSection.tsx @@ -0,0 +1,221 @@ +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { + CheckCircle, + Cpu, + Globe, + Info +} from 'lucide-react'; + +const validatorConfigs = [ + { + type: 'Small Co-located', + validators: 5, + location: 'All in the same data center (minimal latency)', + gasPerSecond: '175m', + features: ['Minimal latency', 'Strict state growth control'], + flag: '🏢', + testResults: { + blocksPerSecond: '7.14', + transactionsPerSecond: '8,408', + gasPerSecond: '176.5M', + blockTime: '80ms', + } + }, + { + type: 'Large Distributed', + validators: 30, + location: 'Globally distributed (higher decentralization)', + gasPerSecond: '175m', + features: ['Global distribution', 'Higher decentralization'], + flag: '🌍', + testResults: { + blocksPerSecond: '2.7', + transactionsPerSecond: '4,053', + gasPerSecond: '85.3M', + blockTime: '370ms', + } + } +]; + +export const PerformanceSection = () => ( +
+ +
+
+
+
+
+
+ + {validatorConfigs[0].type} +
+
+ {validatorConfigs[0].validators} validators +
+
+ {validatorConfigs[0].location} +
+
+
+
+
+
{validatorConfigs[0].gasPerSecond}
+
Gas/Second (Config)
+
+
+
{validatorConfigs[0].validators}
+
Validators
+
+
+
+
Key Features
+
    + {validatorConfigs[0].features.map((feature, idx) => ( +
  • + + {feature} +
  • + ))} +
+
+
+
+
+
+ +
+
+
+
+
+
+
+ + {validatorConfigs[1].type} +
+
+ {validatorConfigs[1].validators} validators +
+
+ {validatorConfigs[1].location} +
+
+
+
+
+
{validatorConfigs[1].gasPerSecond}
+
Gas/Second (Config)
+
+
+
{validatorConfigs[1].validators}
+
Validators
+
+
+
+
Key Features
+
    + {validatorConfigs[1].features.map((feature, idx) => ( +
  • + + {feature} +
  • + ))} +
+
+
+
+
+ +
+
+
Performance Comparison
+ {/* Responsive chart grid: 2x2 on mobile, 4x1 on desktop */} +
+ {/* Transactions per Second */} +
+
+
+
+
+
+
+
+
+
TPS
8,408 / 4,053
+
+ {/* Vertical HR - only on desktop */} +
+
+
+ {/* Gas per Second */} +
+
+
+
+
+
+
+
+
+
Gas/sec (M)
176.5 / 85.3
+
+ {/* Vertical HR - only on desktop */} +
+
+
+ {/* Blocks per Second */} +
+
+
+
+
+
+
+
+
+
Blocks/sec
7.14 / 2.7
+
+ {/* Vertical HR - only on desktop */} +
+
+
+ {/* Block Time (lower is better) */} +
+
+
+
+
+
+
+
+
+
Block Time (ms)
80 / 370
+
+
+
+
Small Co-located
+
Large Distributed
+
+
+
+ + + + + + Performance Explainer + + + +
+

+ TPS vs Gas vs Multi-dimensional fees: Any EVM that runs at {'>'}20m gas per second needs to enforce restrictions on resource usage. For example, if there was an EVM chain with 100m gas per second that allowed arbitrary transactions, you could use all the capacity to write to the state (on disk). The state is stored forever in the EVM (huge flaw) and this would result in rapid state growth that would slow the chain down over time. +

+

+ The beauty of an L1 is that you can control the usage of the capacity by restricting which smart contracts can be deployed. This way you can push performance much further by implementing restrictions on the application layer (for example not just writing data to disk). +

+
+
+
+
+); \ No newline at end of file diff --git a/components/l1-performance/SvgPatterns.tsx b/components/l1-performance/SvgPatterns.tsx new file mode 100644 index 00000000000..106fcd02224 --- /dev/null +++ b/components/l1-performance/SvgPatterns.tsx @@ -0,0 +1,44 @@ +// SVG Background Components +export const GridPattern = () => ( + + + + + + + + +); + +export const DotsPattern = () => ( + + + + + + + + +); + +export const WavePattern = () => ( + + + + + + + + +); + +export const HexagonPattern = () => ( + + + + + + + + +); \ No newline at end of file diff --git a/components/l1-performance/ValidationSection.tsx b/components/l1-performance/ValidationSection.tsx new file mode 100644 index 00000000000..e5c741c9cdb --- /dev/null +++ b/components/l1-performance/ValidationSection.tsx @@ -0,0 +1,123 @@ +import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card'; +import { + CheckCircle, + Shield, + Coins, + Settings, + ArrowRight +} from 'lucide-react'; + +const validationTypes = [ + { + type: 'PoA (Proof of Authority)', + description: 'Permissioned validator set with ownable manager contract', + features: ['Ownable validator manager', 'Protected with onlyOwner modifier', 'Flexible ownership (EOA, multisig, contract)'], + icon: Shield, + }, + { + type: 'PoS (Proof of Stake)', + description: 'Permissionless staking with ERC20 or native token', + features: ['Separate staking manager contracts', 'Lock/unlock stake functionality', 'Easy migration from PoA'], + icon: Coins, + }, + { + type: 'Custom Validation', + description: 'Fully customizable validation rules and mechanisms', + features: ['Permissionless by default', 'Custom implementations possible', 'Hybrid models supported'], + icon: Settings, + } +]; + +export const ValidationSection = () => ( +
+ + {/* Interactive Validation Types */} +
+ {validationTypes.map((type, index) => ( +
+ + {/* Decorative Elements */} +
+
+ + +
+
+
+ +
+ {/* Floating Indicator */} +
+
+
+ + {type.type} + + + {type.description} + +
+
+ + + +
+ {type.features.map((feature, idx) => ( +
+
+
+ +
+ + {feature} + +
+
+ ))} +
+
+ +
+ ))} +
+ + {/* Creative Migration Path */} + + + Seamless Evolution + + Transform your validation model without disruption + + + + +
+ {[ + { label: 'PoA', desc: 'Permissioned', icon: Shield }, + { label: 'Transfer', desc: 'Validator Manager', icon: ArrowRight }, + { label: 'PoS', desc: 'Permissionless', icon: Coins } + ].map((step, idx) => ( +
+
+
+
+ +
+
+ {step.label} +
+

{step.desc}

+
+
+ {idx < 2 && ( +
+ +
+ )} +
+ ))} +
+
+
+
+); \ No newline at end of file diff --git a/components/l1-performance/index.ts b/components/l1-performance/index.ts new file mode 100644 index 00000000000..d3f21c7b179 --- /dev/null +++ b/components/l1-performance/index.ts @@ -0,0 +1,11 @@ +export { AnimatedBackground } from './AnimatedBackground'; +export { GridPattern, DotsPattern, WavePattern, HexagonPattern } from './SvgPatterns'; +export { HeroSection } from './HeroSection'; +export { MetricsSection } from './MetricsSection'; +export { OverviewSection } from './OverviewSection'; +export { PerformanceSection } from './PerformanceSection'; +export { ValidationSection } from './ValidationSection'; +export { EconomicsSection } from './EconomicsSection'; +export { FAQSection } from './FAQSection'; +export { CTASection } from './CTASection'; +export { HorizontalScrollSection } from './HorizontalScrollSection'; \ No newline at end of file From 572bc43f742fe2232f93e1855baf4fdd00a6e77c Mon Sep 17 00:00:00 2001 From: 0xstt Date: Mon, 11 Aug 2025 11:26:04 +0300 Subject: [PATCH 2/2] improvements to the metrics card --- app/global.css | 79 ++++++ components/l1-performance/BlockAnimation.tsx | 130 +++++++++ components/l1-performance/CTASection.tsx | 8 - components/l1-performance/ElectricEffect.tsx | 52 ++++ components/l1-performance/MetricsSection.tsx | 92 +++++-- .../l1-performance/NetworkAnimation.tsx | 252 ++++++++++++++++++ components/l1-performance/NumberCounter.tsx | 86 ++++++ .../l1-performance/PerformanceSection.tsx | 4 +- components/l1-performance/TokenBackground.tsx | 75 ++++++ hooks/use-sequential-animation.ts | 70 +++++ public/images/arena.png | Bin 0 -> 9398 bytes public/images/avax.png | Bin 0 -> 8652 bytes public/images/beam.png | Bin 0 -> 4167 bytes public/images/bitcoin.png | Bin 0 -> 6047 bytes public/images/coq.png | Bin 0 -> 17958 bytes public/images/gun.png | Bin 0 -> 9418 bytes public/images/tether.png | Bin 0 -> 2254 bytes public/images/usdc.png | Bin 0 -> 2488 bytes 18 files changed, 814 insertions(+), 34 deletions(-) create mode 100644 components/l1-performance/BlockAnimation.tsx create mode 100644 components/l1-performance/ElectricEffect.tsx create mode 100644 components/l1-performance/NetworkAnimation.tsx create mode 100644 components/l1-performance/NumberCounter.tsx create mode 100644 components/l1-performance/TokenBackground.tsx create mode 100644 hooks/use-sequential-animation.ts create mode 100644 public/images/arena.png create mode 100644 public/images/avax.png create mode 100644 public/images/beam.png create mode 100644 public/images/bitcoin.png create mode 100644 public/images/coq.png create mode 100644 public/images/gun.png create mode 100644 public/images/tether.png create mode 100644 public/images/usdc.png diff --git a/app/global.css b/app/global.css index 5ae62ca438c..fe02caa136c 100644 --- a/app/global.css +++ b/app/global.css @@ -568,4 +568,83 @@ html body[data-scroll-locked] { .text-shadow-[shadow] { text-shadow: var(--shadow); } + + /* Token Background Animations */ + @keyframes slide-up { + 0% { + transform: translateY(100%); + } + 100% { + transform: translateY(-100%); + } + } + + @keyframes slide-down { + 0% { + transform: translateY(-100%); + } + 100% { + transform: translateY(100%); + } + } + + @keyframes slide-up-seamless { + 0% { + transform: translateY(0%); + } + 100% { + transform: translateY(-50%); + } + } + + @keyframes slide-down-seamless { + 0% { + transform: translateY(0%); + } + 100% { + transform: translateY(50%); + } + } + + .animate-slide-up { + animation: slide-up 60s linear infinite; + } + + .animate-slide-down { + animation: slide-down 70s linear infinite; + } + + .animate-slide-up-seamless { + animation: slide-up-seamless 40s linear infinite; + } + + .animate-slide-down-seamless { + animation: slide-down-seamless 45s linear infinite; + } + + @keyframes infinite-scroll-up { + 0% { + transform: translateY(0); + } + 100% { + transform: translateY(-12.5%); + } + } + + @keyframes infinite-scroll-down { + 0% { + transform: translateY(-12.5%); + } + 100% { + transform: translateY(0); + } + } + + .animate-infinite-scroll-up { + animation: infinite-scroll-up 10s linear infinite; + } + + .animate-infinite-scroll-down { + animation: infinite-scroll-down 15s linear infinite; + } } diff --git a/components/l1-performance/BlockAnimation.tsx b/components/l1-performance/BlockAnimation.tsx new file mode 100644 index 00000000000..7715c19d4c3 --- /dev/null +++ b/components/l1-performance/BlockAnimation.tsx @@ -0,0 +1,130 @@ +'use client'; + +import { useEffect, useState } from 'react'; + +interface BlockAnimationProps { + className?: string; +} + +interface Block { + id: number; + y: number; + hash: string; + height: number; + isActive: boolean; +} + +export const BlockAnimation: React.FC = ({ className = '' }) => { + const [blocks, setBlocks] = useState([]); + const [nextId, setNextId] = useState(0); + + // Generate random hash-like string + const generateHash = () => { + const chars = '0123456789abcdef'; + let hash = ''; + for (let i = 0; i < 8; i++) { + hash += chars[Math.floor(Math.random() * chars.length)]; + } + return hash; + }; + + // Generate random block height + const generateHeight = () => Math.floor(Math.random() * 900000) + 100000; + + // Simple system: One block at a time + useEffect(() => { + const interval = setInterval(() => { + setBlocks(prev => { + const minSpacing = 25; // Minimum distance + const maxSpacing = 40; // Maximum distance + + // Move all blocks down + let updatedBlocks = prev.map(block => ({ + ...block, + y: block.y + 1.5 + })).filter(block => block.y < 130); // Remove blocks that are off screen + + // Add new block if there's space + const lastBlock = updatedBlocks.length > 0 + ? updatedBlocks.reduce((highest, block) => block.y < highest.y ? block : highest) + : null; + + const shouldAddBlock = !lastBlock || lastBlock.y > minSpacing; + + if (shouldAddBlock) { + const randomSpacing = minSpacing + Math.random() * (maxSpacing - minSpacing); + const newBlockY = lastBlock ? lastBlock.y - randomSpacing : -20; + + updatedBlocks.push({ + id: nextId, + y: newBlockY, + hash: generateHash(), + height: generateHeight(), + isActive: false + }); + + setNextId(prev => prev + 1); + } + + // Update active state + return updatedBlocks.map(block => ({ + ...block, + isActive: block.y >= 40 && block.y <= 60 + })); + }); + }, 40); + + return () => clearInterval(interval); + }, [nextId]); + + return ( +
+ {/* Chain line */} +
+ + {/* Blocks */} + {blocks.map(block => ( +
+ {/* Block container */} +
+ {/* Block content */} +
+
+ #{block.height} +
+
+ {block.hash} +
+
+
+ + {/* Active block glow */} + {block.isActive && ( +
+ )} +
+ ))} + + {/* Gradient overlay */} +
+
+ ); +}; diff --git a/components/l1-performance/CTASection.tsx b/components/l1-performance/CTASection.tsx index 8d4295d3346..1aa9317a9d7 100644 --- a/components/l1-performance/CTASection.tsx +++ b/components/l1-performance/CTASection.tsx @@ -16,14 +16,6 @@ export const CTASection = () => ( > Get Started - - GitHub -
diff --git a/components/l1-performance/ElectricEffect.tsx b/components/l1-performance/ElectricEffect.tsx new file mode 100644 index 00000000000..d011bc46328 --- /dev/null +++ b/components/l1-performance/ElectricEffect.tsx @@ -0,0 +1,52 @@ +'use client'; + +interface ElectricEffectProps { + className?: string; +} + +export const ElectricEffect: React.FC = ({ className = '' }) => { + return ( +
+ {/* Electric bolts */} +
+ +
+ +
+ +
+ +
+ + {/* Electric sparks */} +
+ +
+ +
+ + {/* Electric glow */} +
+ + {/* Zap icon enhancement */} +
+ + + +
+ + {/* Gradient overlay */} +
+
+ ); +}; diff --git a/components/l1-performance/MetricsSection.tsx b/components/l1-performance/MetricsSection.tsx index a31fb8ea9ba..3fd845062fc 100644 --- a/components/l1-performance/MetricsSection.tsx +++ b/components/l1-performance/MetricsSection.tsx @@ -7,6 +7,12 @@ import { Target } from 'lucide-react'; import { DotsPattern, GridPattern, WavePattern, HexagonPattern } from './SvgPatterns'; +import { TokenBackground } from './TokenBackground'; +import { NumberCounter } from './NumberCounter'; +import { NetworkAnimation } from './NetworkAnimation'; +import { BlockAnimation } from './BlockAnimation'; +import { ElectricEffect } from './ElectricEffect'; +import { useSequentialAnimation } from '@/hooks/use-sequential-animation'; const metrics = [ { @@ -19,7 +25,7 @@ const metrics = [ { title: 'Throughput', value: 'Up to 8.4k TPS', - subtitle: '(simple transfers / 175m gas per second)', + subtitle: '(simple transfers / 85m gas per second)', icon: Zap, pattern: GridPattern, }, @@ -39,36 +45,74 @@ const metrics = [ } ]; -export const MetricsSection = () => ( -
-
+export const MetricsSection = () => { + const { containerRef, getItemStyle } = useSequentialAnimation({ + itemCount: metrics.length, + delay: 150, + duration: 500 + }); + + return ( +
+
+

Performance Metrics

+

+ Industry-leading performance benchmarks that set new standards for blockchain technology +

+
-

Performance Metrics

-

- Industry-leading performance benchmarks that set new standards for blockchain technology -

-
- -
- {metrics.map((metric, index) => ( - - {/* Background Icon */} -
- -
+
+ {metrics.map((metric, index) => ( +
+ + {/* Special Token Background for Gas Token card */} + {metric.title === 'Gas Token' && ( + + )} + + {/* Special Network Animation for Interoperability card */} + {metric.title === 'Interoperability' && ( + + )} + + {/* Special Block Animation for Block Time card */} + {metric.title === 'Block Time' && ( + + )} + + {/* Special Electric Effect for Throughput card */} + {metric.title === 'Throughput' && ( + + )} + + {/* Background Icon for other cards */} + {metric.title !== 'Gas Token' && metric.title !== 'Interoperability' && metric.title !== 'Block Time' && metric.title !== 'Throughput' && ( +
+ +
+ )} +
- + {metric.title}
-

{metric.value}

+ {metric.title === 'Throughput' ? ( +

+ Up to k TPS +

+ ) : ( +

{metric.value}

+ )}

{metric.subtitle}

-
- ))} -
-
-); \ No newline at end of file + +
+ ))} +
+ + ); +}; \ No newline at end of file diff --git a/components/l1-performance/NetworkAnimation.tsx b/components/l1-performance/NetworkAnimation.tsx new file mode 100644 index 00000000000..052da7c5e40 --- /dev/null +++ b/components/l1-performance/NetworkAnimation.tsx @@ -0,0 +1,252 @@ +'use client'; + +import { useEffect, useState } from 'react'; + +interface NetworkAnimationProps { + className?: string; +} + +interface Node { + id: string; + x: number; + y: number; + size: number; + isHub?: boolean; +} + +interface Connection { + from: string; + to: string; + isActive: boolean; + progress: number; + type: 'hub' | 'direct'; +} + +export const NetworkAnimation: React.FC = ({ className = '' }) => { + const [connections, setConnections] = useState([]); + + // Define nodes positions (relative to container) - shifted more right + const nodes: Node[] = [ + // Hub node (center-right) - further right + { id: 'hub', x: 75, y: 50, size: 8, isHub: true }, + + // Inner ring - connected nodes + { id: 'node1', x: 55, y: 30, size: 4 }, + { id: 'node2', x: 95, y: 30, size: 4 }, + { id: 'node3', x: 100, y: 55, size: 4 }, + { id: 'node4', x: 90, y: 75, size: 4 }, + { id: 'node5', x: 60, y: 75, size: 4 }, + { id: 'node6', x: 50, y: 55, size: 4 }, + + // Outer ring - some connected, some autonomous + { id: 'node7', x: 45, y: 15, size: 3 }, + { id: 'node8', x: 105, y: 15, size: 3 }, + { id: 'node9', x: 115, y: 45, size: 3 }, + { id: 'node10', x: 110, y: 85, size: 3 }, + { id: 'node11', x: 75, y: 95, size: 3 }, + { id: 'node12', x: 40, y: 85, size: 3 }, + { id: 'node13', x: 35, y: 45, size: 3 }, + + // Additional outer nodes + { id: 'node14', x: 85, y: 10, size: 3 }, + { id: 'node15', x: 25, y: 25, size: 3 }, + { id: 'node16', x: 120, y: 65, size: 3 }, + + // Autonomous nodes (not connected to hub) + { id: 'autonomous1', x: 37, y: 20, size: 2 }, + { id: 'autonomous2', x: 113, y: 25, size: 2 }, + { id: 'autonomous3', x: 110, y: 70, size: 2 }, + { id: 'autonomous4', x: 40, y: 70, size: 2 }, + { id: 'autonomous5', x: 22, y: 10, size: 2 }, + { id: 'autonomous6', x: 118, y: 90, size: 2 }, + ]; + + // Only connected nodes (exclude autonomous) + const connectedNodes = nodes.filter(node => !node.isHub && !node.id.startsWith('autonomous')); + + // Initialize connections + useEffect(() => { + const hubConnections: Connection[] = connectedNodes.map(node => ({ + from: 'hub', + to: node.id, + isActive: false, + progress: 0, + type: 'hub' as const + })); + + // Add some direct connections between inner ring nodes only + const directConnections: Connection[] = [ + { from: 'node1', to: 'node2', isActive: false, progress: 0, type: 'direct' }, + { from: 'node3', to: 'node4', isActive: false, progress: 0, type: 'direct' }, + { from: 'node5', to: 'node6', isActive: false, progress: 0, type: 'direct' }, + ]; + + setConnections([...hubConnections, ...directConnections]); + }, []); + + // Animation logic + useEffect(() => { + const interval = setInterval(() => { + setConnections(prev => { + const updated = [...prev]; + + // Randomly activate connections (slower activation) + const inactiveConnections = updated.filter(conn => !conn.isActive); + if (inactiveConnections.length > 0 && Math.random() > 0.85) { + const randomConn = inactiveConnections[Math.floor(Math.random() * inactiveConnections.length)]; + const index = updated.findIndex(conn => + conn.from === randomConn.from && conn.to === randomConn.to + ); + if (index !== -1) { + updated[index] = { ...updated[index], isActive: true, progress: 0 }; + } + } + + // Update progress for active connections (slower movement) + return updated.map(conn => { + if (conn.isActive) { + const newProgress = conn.progress + 0.02; + if (newProgress >= 1) { + return { ...conn, isActive: false, progress: 0 }; + } + return { ...conn, progress: newProgress }; + } + return conn; + }); + }); + }, 80); + + return () => clearInterval(interval); + }, []); + + const getNodeById = (id: string): Node | undefined => { + return nodes.find(node => node.id === id); + }; + + const renderConnection = (connection: Connection) => { + const fromNode = getNodeById(connection.from); + const toNode = getNodeById(connection.to); + + if (!fromNode || !toNode) return null; + + const x1 = fromNode.x; + const y1 = fromNode.y; + const x2 = toNode.x; + const y2 = toNode.y; + + // Calculate current position of the data packet + const currentX = x1 + (x2 - x1) * connection.progress; + const currentY = y1 + (y2 - y1) * connection.progress; + + return ( + + {/* Connection line */} + + + {/* Animated data packet */} + {connection.isActive && ( + + + + )} + + ); + }; + + return ( +
+ + {/* Render connections */} + {connections.map(renderConnection)} + + {/* Render nodes */} + {nodes.map(node => ( + + {/* Node glow effect */} + {node.isHub && ( + + + + )} + + {/* Main node */} + + + {/* Inner core for hub */} + {node.isHub && ( + + )} + + ))} + + + {/* Gradient overlay */} +
+
+ ); +}; diff --git a/components/l1-performance/NumberCounter.tsx b/components/l1-performance/NumberCounter.tsx new file mode 100644 index 00000000000..996dfd58337 --- /dev/null +++ b/components/l1-performance/NumberCounter.tsx @@ -0,0 +1,86 @@ +'use client'; + +import { useEffect, useState, useRef } from 'react'; + +interface NumberCounterProps { + end: number; + duration?: number; + suffix?: string; + prefix?: string; + decimals?: number; + className?: string; +} + +export const NumberCounter: React.FC = ({ + end, + duration = 2000, + suffix = '', + prefix = '', + decimals = 0, + className = '' +}) => { + const [count, setCount] = useState(0); + const [isVisible, setIsVisible] = useState(false); + const countRef = useRef(null); + + useEffect(() => { + const observer = new IntersectionObserver( + ([entry]) => { + if (entry.isIntersecting && !isVisible) { + setIsVisible(true); + } + }, + { threshold: 0.1 } + ); + + if (countRef.current) { + observer.observe(countRef.current); + } + + return () => { + if (countRef.current) { + observer.unobserve(countRef.current); + } + }; + }, [isVisible]); + + useEffect(() => { + if (!isVisible) return; + + let startTime: number; + let animationId: number; + + const animate = (timestamp: number) => { + if (!startTime) startTime = timestamp; + const progress = Math.min((timestamp - startTime) / duration, 1); + + // Easing function for smooth animation + const easeOutQuart = 1 - Math.pow(1 - progress, 4); + const currentCount = end * easeOutQuart; + + setCount(currentCount); + + if (progress < 1) { + animationId = requestAnimationFrame(animate); + } + }; + + animationId = requestAnimationFrame(animate); + + return () => { + if (animationId) { + cancelAnimationFrame(animationId); + } + }; + }, [isVisible, end, duration]); + + const formatNumber = (num: number) => { + return num.toFixed(decimals); + }; + + return ( + + {prefix}{formatNumber(count)}{suffix} + + ); +}; diff --git a/components/l1-performance/PerformanceSection.tsx b/components/l1-performance/PerformanceSection.tsx index a73376d9c1c..e8b3f10c5bb 100644 --- a/components/l1-performance/PerformanceSection.tsx +++ b/components/l1-performance/PerformanceSection.tsx @@ -11,7 +11,7 @@ const validatorConfigs = [ type: 'Small Co-located', validators: 5, location: 'All in the same data center (minimal latency)', - gasPerSecond: '175m', + gasPerSecond: '85m', features: ['Minimal latency', 'Strict state growth control'], flag: '🏢', testResults: { @@ -25,7 +25,7 @@ const validatorConfigs = [ type: 'Large Distributed', validators: 30, location: 'Globally distributed (higher decentralization)', - gasPerSecond: '175m', + gasPerSecond: '85m', features: ['Global distribution', 'Higher decentralization'], flag: '🌍', testResults: { diff --git a/components/l1-performance/TokenBackground.tsx b/components/l1-performance/TokenBackground.tsx new file mode 100644 index 00000000000..0373cbd384c --- /dev/null +++ b/components/l1-performance/TokenBackground.tsx @@ -0,0 +1,75 @@ +import Image from 'next/image'; + +interface TokenBackgroundProps { + className?: string; +} + +const tokenLogos = [ + 'avax.png', + 'tether.png', + 'usdc.png', + 'bitcoin.png', + 'arena.png', + 'beam.png', + 'coq.png', + 'aave.png', + 'gun.png', + 'chainlink.png' +]; + +export const TokenBackground: React.FC = ({ className = '' }) => { + // Split tokens into two columns + const midPoint = Math.ceil(tokenLogos.length / 2); + const firstColumn = tokenLogos.slice(0, midPoint); + const secondColumn = tokenLogos.slice(midPoint); + + return ( +
+ {/* Rotated container for diagonal effect */} +
+ {/* First Column - Moving Up */} +
+
+ {/* Duplicate the list multiple times for seamless loop */} + {Array.from({ length: 8 }, (_, setIndex) => + firstColumn.map((logo, index) => ( +
+ +
+ )) + )} +
+
+ + {/* Second Column - Moving Down */} +
+
+ {/* Duplicate the list multiple times for seamless loop */} + {Array.from({ length: 8 }, (_, setIndex) => + secondColumn.map((logo, index) => ( +
+ +
+ )) + )} +
+
+
+ + {/* Gradient overlay to fade tokens */} +
+
+ ); +}; diff --git a/hooks/use-sequential-animation.ts b/hooks/use-sequential-animation.ts new file mode 100644 index 00000000000..3a75b6e15d1 --- /dev/null +++ b/hooks/use-sequential-animation.ts @@ -0,0 +1,70 @@ +'use client'; + +import { useEffect, useState, useRef } from 'react'; + +interface UseSequentialAnimationProps { + itemCount: number; + delay?: number; + duration?: number; +} + +export const useSequentialAnimation = ({ + itemCount, + delay = 200, + duration = 600 +}: UseSequentialAnimationProps) => { + const [visibleItems, setVisibleItems] = useState( + new Array(itemCount).fill(false) + ); + const [hasStarted, setHasStarted] = useState(false); + const observerRef = useRef(null); + const containerRef = useRef(null); + + useEffect(() => { + if (typeof window === 'undefined') return; + + observerRef.current = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting && !hasStarted) { + setHasStarted(true); + // Start sequential animation + for (let i = 0; i < itemCount; i++) { + setTimeout(() => { + setVisibleItems(prev => { + const newState = [...prev]; + newState[i] = true; + return newState; + }); + }, i * delay); + } + } + }); + }, + { threshold: 0.2 } + ); + + if (containerRef.current) { + observerRef.current.observe(containerRef.current); + } + + return () => { + if (observerRef.current) { + observerRef.current.disconnect(); + } + }; + }, [itemCount, delay, hasStarted]); + + const getItemStyle = (index: number) => ({ + transform: visibleItems[index] ? 'scale(1) translateY(0)' : 'scale(0.8) translateY(20px)', + opacity: visibleItems[index] ? 1 : 0, + transition: `all ${duration}ms cubic-bezier(0.175, 0.885, 0.32, 1.275)`, + }); + + return { + containerRef, + getItemStyle, + hasStarted, + visibleItems + }; +}; diff --git a/public/images/arena.png b/public/images/arena.png new file mode 100644 index 0000000000000000000000000000000000000000..21dccb199e8a0366f3b29fbaa91d52a85c63f89e GIT binary patch literal 9398 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 U3I2%x{75LOidv9*d5f_B0k-wbfdBvi literal 0 HcmV?d00001 diff --git a/public/images/avax.png b/public/images/avax.png new file mode 100644 index 0000000000000000000000000000000000000000..2170e4080e7ba0d4691203e93e0d97a14f0f308d GIT binary patch literal 8652 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 oxM;@s=+}Qz_M@S&lkJQ9DW(cI0^ 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 literal 0 HcmV?d00001 diff --git a/public/images/bitcoin.png b/public/images/bitcoin.png new file mode 100644 index 0000000000000000000000000000000000000000..76fe12ea14488bb53d383ff31a645f8c88eb3030 GIT binary patch literal 6047 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�`Im3oH2l!R_}rQ0?=TkwyHvkA}Yww2l3498$!gYro zFYaK;+m_;FHP+z%IB-q~*c#5ehZ_UC0;azm|ot7)~jp@i5d3ErSj>5zwe*ux*v_|qCG zig}?$C_IeaHe&>!vI?u-!fCfiEpSLJG{-7kMYV@ynQdA2-!fx1XV4^Hx#xkp@sb^z zK68vGJY)2G34kPR>D_o0$iD+U;W^QQl~S}nH^cmw)lfS>h-Qz+URCj3NmB8Boaf9O z@i=m8p5fmX(XLd!E%hj`O{zg*XU%f9a9xRLV`BV* z;7$p}VV~S#pWHr|+#w%#Oh+bY_Ri-#q!b@1wNC%&=}6t4Zu%byfJ)lB=B10ZW4#V| zwSrYtneCk1Rio@Xqzdye$K(+$@EGuI%hTVuWY>Qkc(QeWrs@9)094X_=bxW)i`^?c zc%G%yC4xE&WFh7i>cN|rs*+&dt~CzokV3X=k*yBgoyzn-G1r#s&(gE>EImul(zEm| hJxkBhv-CfT{xA8ey#9+{_@e*-002ovPDHLkV1kGTvf%&# literal 0 HcmV?d00001 diff --git a/public/images/gun.png b/public/images/gun.png new file mode 100644 index 0000000000000000000000000000000000000000..946ef964ab487b5dbe3b0875f71c4a566e681f43 GIT binary patch literal 9418 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 literal 0 HcmV?d00001 diff --git a/public/images/tether.png b/public/images/tether.png new file mode 100644 index 0000000000000000000000000000000000000000..8df41c3929fd37232d19f7428287132326fa233a GIT binary patch literal 2254 zcmV;<2r>7GP) zJyRN86vzKd$WZCv45=uBRIw5pJLkbMRhpPCRURp<6qQe)egYD}Durm3PCr00@{FC0 zP-$g&3aT(8k5tS!>{BdPQF+;y`?kyZHHMKrd*k`P zuQvf49HbBq-+Hn^c*A4j?M(pPE)Dy1pjcdWd#U>zAfJzlc>4Di7kQi1ioJ^qQKt8i z&F(q9$ejR+#Wa93SJ#fg+}splRvU~`Nu2R)*0Dd`bpf=@t0&fj=?LcnI5DmxbdC4PG2a9Hk40G9EzqiYDcgu}N^)(M;m;Pq>I`u#vSY&%D@Uk^|!{ieR( zH>B-;(Ov|w7JCvd8$+m|ShUp@*b{(*kV0rf6t7>8T_+gd1r&?75LlP~oaK`f?l$vF zOGw3HTC_zfrnv?nGwLgLa)2n0w%Dc8XmGdL>U3OPC!#IVDHPVQwN)PW>(O0+pv?$` zL=59_R1M*90azEMxHpJU!O&b_R0Nzr+hn zGtnE-J>jJQ0#@6fj>i#=M5JGuc2S?o>BtF!%Q}td#sw09N9sP2V4lM39chvAekFY8Foi>g_i6FD`I; zbK`n4N)QkAgO&iS(>!(*HVA+f%KO7^5Xt=dh4R&v>Sh2y1=;Mfl>}noQ#4!v`+5`V+PPI-Q5lUKfK{Qu(&`lUE+He{mtQOnf}1 znK4u*ewUv=+jdN=(?PY_#L@M&;}ClG>60s`IW6H%$K%+ZpGWG=8%LuMp{3$u;D17h z1ME1ze0^mwZQ&`SnZ3tl2S44E-TK9gpMW z!v}pPmkgsGf?=GhZUUMl=$^?fSZ!oA+%ZeL4y-jB>A#P%6K_e8IO` zP1u;YzqoVUa8Sk*xi&YaZggOpPrCe<+lfo1Ls=piv=zMCY~twZ3SVnA8BLJJ+T0vI z&dy>rnSAj(Y4ZT4nR#9yI($F5gzmuZSpd~$6W?kzRR8=@pE!*n(OZ(0tljLcH@wJoya!XUa$#BIcKtu$oMA6@xC6udk8$`BTQN zY`&RuV>$KqXadZZ3E=!sm@46bWQg#r?gfC!fKmDD*KB zT!Idj5KR@?tmh}6!S}6UoK#7Sfb-v&uK;qn7Vht7093i!B>*ez&v;Bl3$Plv zK-~dXD#&JqL|1Wd54S>9Rha!r!7$3AoDYZ;KrYwnB`Z~7_Xs+MQ5IdcFHQgqiUjVE z;Cw)a09YhYwD-W5NOC?PLja7;%?yda1`?eQ$P@rTA{d8c=L50@0FVfVVVW5g`!wYX z03Z=OXTXLHS@3y#xLYLcLh@1(Bpij#2UH6H(B_0PB`9`2po0Jas6MDl2^u&bP?ZBb zXKSl$XA?tU(8T$GE&>21M+6!=ttA@iaFt_fKvqeL;yxMYXmY9ghC6tIUmqb z06>3t&{EwL4zv&oE%eIfv_roxpr3<-6uMo1zqw3f=L5P%0LI2f6`{}q{22+fe)1W5 zM*xN&BY_W`59l5N82*X`RlhhN@Jj?>_#qMqsN5BaKOz9*F%syB&zukVO#px;0{!+L z2&vhZfxo(de)9P!!r>P$LR5lJoe%gi0x}{y04x!RtTql{C3B$E`~=>GB>{W# z8NrGG{baKSmnYWRo*hW%13``e46l(Oz|IGP903?^BY|mVg6@1^5+VS@X(X5c=L3@v z0T`A;_s4#3LY{oa#QaAe7#9g9$oaq|MF57C6VwO%rZQ>HCkTQd2!bF8f*=TjAP9mW c2qO6W4;MEiOt|Z2r~m)}07*qoM6N<$f`11ac>n+a literal 0 HcmV?d00001 diff --git a/public/images/usdc.png b/public/images/usdc.png new file mode 100644 index 0000000000000000000000000000000000000000..51c7749a026c231ae6f6e63dcff885dd192551e9 GIT binary patch literal 2488 zcmV;p2}kycP) zO>9(E6vxjis9;iP6B8pQSST=KnrNubbfZxOmLhC$rNxybHW3o0Nm1Iq6VG|`|9iK%zO9aoOAEHGr!e9XYSYe-*eBq z_r7~QaG0(GS2~_~>Ys-?X*>bgdZSXjic}=)@Jtr~i(JXS003|CJJUKk0eUZ@L_c zT%4&C-!@%{B&-!cR(iWAwt5BY3gw#Nuayf+{+%DJlIC~zU=QS9c$O`{MqtGRD2Z?zKW_9W)CMt`cN`26Xb%CL#;=tN zi3TtYclj{dUP}O6#<$(@aX8DXYXfBgbRD?Tp_8!))uX+cGJG5^A>>Q`KGokU3xIlt zuU0NV`>GX`S+GGZf&kzv)!!-!fYSA6&E1PaT`yIeNDF}4_&RVz;ktR)CIYF)2&(n` zHLF*EKiaGOdsENiI>y{{d>Veb{|91e7MYu=6gxz}EGYo|-e2r)hf^Qtm40i=@Nray zaO%Zmnb%Hsx+3ZhL2-Q-9$tn z8U(hCFM&!~O+ERfDg@j0#}`x5APknskqvI=A3cV`k;|xMNb>@$0+2O6MXyimX(sZF zf-QnH0VECq*uCGh@l7F97wp;3G#j$)3I>qt1uhvsM5a!h@jycXVD|oIH-3mI5hU4? z+yhjPiU&b18$ZN0Pf%9?n7vrCwhmI+|XA^#*s z!fRHydVU(Bb>H*)b13;O%;+v*W&A&|4rCIU0IA-d$H*!bnO+ormrIyq=kCJLyX%v` zvv&iW`QbN=?3T^wE}JC482@c>{U`c2!}gvIl(bClG{!DRd}3(H5Wu;^m$Ff7|JuUk6lAgb4O1ndYUHk6A^*v(^V3=($p{E=jc;__QA^{z2n})zjU)% z#(4iG;qO*&&%*~_)|UOhOwS(g-(>9Z)gSFe$lH4<{Iu*bkdops?pikhUIZQeyGWX~ za)Cqy`N66ki$Su86#Dl+A7f=Fg{+}$pPa%JNE^W7Web@@WGq%SrpWKk9_&#{+XlkN z!O#Pc-?Tx|tJ22)QLx>4<_uSh)6kvcN0MipB%?MVTvpfZ4 zxhI(_JJ-`d8^?S8rs#k3dDBI(n*89@NSn(id8RG1HakJ!4LcnK0=ONYU~Cl87C>49 zkDtG z%nJbXaVeh8_OWXutCu$6L=Z^Tb0>#hv0^6>B~AzcfM?^Ti$ZWl002B=c&%KJdfm-- zoDu-Qe?bmFcP9}r40LIQGZ@bEJ zPul%O@?s1%X>Et`c6HkmfUPC9wDsFnLhG8+Uoa*u_L?J%%&9cyIH@lq-kEJ2_P6DCPe zYUnHz8iWK-WmH5J>9U8Ow2o|!Zqz%k9q>Q2%2XG zi3DcrI-l0bLZ}P?dO{eOxXCihnKtbUKqtVuF5i_C!|P$<+PEZ4o)iv17zDch>NW;8 zbdtIPzz7Bb#0ySw3byTto;QqjwsIqzTJac2aSFEWh@Nju{dRIg0dRYPTDbr(ucJA5 z(KfhUf08X(Jb-9L&K$_@(W|1^Fz!c56abbNkfByCpqzj&8i0y=oi+!7z$wuMCbUo1o0AOAO0ND|O4RsUs+`=&c zc0j07;aa(Xc8w|p#qRb@86QBx0|11#P5po25C*E_ylvjVrh1SG0D$IpQJr9Ka(WhR zkGw30cdZv%$!mmZ;{zxN0DwjWr}yWz-?8KJ3c61x^N$`w;RyZ>YAVCD^0-cQ&#-Re z+H%ozBdE%!8lx#s1bKnCP4%})*fzFfLRB}NE&W=NJ@swlHbm5MY%G(`6PngkF!fr2 z3*NwH;{zb91#pNUi$dTiH%8l|ECz9`8ioyuaWE1U_aFYvCRnUCM>QOEOc1Bucx)mD zC=Op{y%!m?!=d+FZV`m+=;>rTsG`{24*o4Oo(S99lDKYDB5)mwp_XJrh>4v5t_#5y!-rT^m?*9Z z!8XH(SXrnjxspE%0BcQ`Lls*MA7XXk;$+1u*lzSFnJH)-ikDP0n2R32nk6zTfH>UV zAxphH2`4Jii2UHxNDz3#I%#-bFj_13jUW}tI{pO~E!#zf$-~M30000