diff --git a/app/[locale]/10years/_components/CurrentTorchHolderCard.tsx b/app/[locale]/10years/_components/CurrentTorchHolderCard.tsx deleted file mode 100644 index fb282e9284f..00000000000 --- a/app/[locale]/10years/_components/CurrentTorchHolderCard.tsx +++ /dev/null @@ -1,130 +0,0 @@ -import { Avatar } from "@/components/ui/avatar" -import { ButtonLink } from "@/components/ui/buttons/Button" -import { - Card, - CardContent, - CardFooter, - CardHeader, - CardTitle, -} from "@/components/ui/card" -import { BaseLink } from "@/components/ui/Link" - -import { cn } from "@/lib/utils/cn" - -import Curved10YearsText from "./10y.svg" - -import { - extractTwitterHandle, - formatAddress, - getAvatarImage, - getTxEtherscanUrl, - type TorchHolderEvent, -} from "@/lib/torch" - -interface CurrentTorchHolderCardProps { - currentHolder: TorchHolderEvent | null - isBurned?: boolean - className?: string -} - -const CurrentTorchHolderCard = ({ - currentHolder, - isBurned = false, - className, -}: CurrentTorchHolderCardProps) => { - return ( - - -
- {/* Torch/flame video */} -
-
-
- - - {/* Curved text */} - - -
- - {/* Bottom section: torchbearer info */} - - {currentHolder ? ( -
- - -
- {/* Name */} -
- {currentHolder.name || formatAddress(currentHolder.address)} -
- {/* Description */} -
{currentHolder.role || "Current torchbearer"}
- {/* Verify onchain link */} - - View on Etherscan - -
-
- ) : isBurned ? ( -
-
- 🔥 Torch Burned 🔥 -
-
- The Ethereum Torch has been burned to celebrate the 10-year - anniversary! -
-
- ) : ( -
-
🤐 Unknown Bearer
-
- The current torch bearer's identity is not publicly - available. -
-
- )} -
- - - See all torchbearers - - - - ) -} - -export default CurrentTorchHolderCard diff --git a/app/[locale]/10years/page.tsx b/app/[locale]/10years/page.tsx index 53e195fe55a..c55757ed5d2 100644 --- a/app/[locale]/10years/page.tsx +++ b/app/[locale]/10years/page.tsx @@ -30,7 +30,6 @@ import { BASE_TIME_UNIT } from "@/lib/constants" import Curved10YearsText from "./_components/10y.svg" import AdoptionSwiper from "./_components/AdoptionSwiper/lazy" import CountDown from "./_components/CountDown/lazy" -import CurrentTorchHolderCard from "./_components/CurrentTorchHolderCard" import { adoptionStyles } from "./_components/data" import InnovationSwiper from "./_components/InnovationSwiper/lazy" import NFTMintCardWrapper from "./_components/NFTMintCardWrapper" @@ -53,7 +52,6 @@ import { getHolderEvents, getTransferEvents, isAddressFiltered, - isTorchBurned, type TorchHolder, } from "@/lib/torch" import TenYearLogo from "@/public/images/10-year-anniversary/10-year-logo.png" @@ -97,7 +95,7 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { const adoptionCards = await getAdoptionCards() // Torch NFT data fetching logic - const transferEvents = await getTransferEvents() + const transferEvents = getTransferEvents() const torchHolderMap: Record = allTorchHolders.reduce( @@ -113,13 +111,6 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { transferEvents ) - let isBurned = false - try { - isBurned = await isTorchBurned() - } catch (error) { - console.error("Error fetching torch burned status:", error) - } - // Filter out events where the address is in the filtered list const torchHolders = torchHoldersEvents.filter( (holder) => !isAddressFiltered(holder.address) @@ -161,15 +152,7 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
- {showNFTMint ? ( - - ) : ( - - )} +
diff --git a/src/data/torchTransferEvents.json b/src/data/torchTransferEvents.json new file mode 100644 index 00000000000..8629b99ba3c --- /dev/null +++ b/src/data/torchTransferEvents.json @@ -0,0 +1,86 @@ +[ + { + "from": "0x0000000000000000000000000000000000000000", + "to": "0x8d3e2e0e562634244e5d229c3b97a38efbec65ab", + "blockNumber": 22959111, + "transactionHash": "0x843e4351b2e8e4569ce96c6d0850defe8edf7f26c867ebffb40a8b454b1613c8", + "timestamp": 1752998891 + }, + { + "from": "0x8d3e2e0e562634244e5d229c3b97a38efbec65ab", + "to": "0x88c2c3c9e64a1299e6417c24fa2ae773c6cea47c", + "blockNumber": 22959927, + "transactionHash": "0x4e3673694351fdc7e12b5198355bcc259c819856c5c92ac39a7ccf0561a52d79", + "timestamp": 1753008731 + }, + { + "from": "0x88c2c3c9e64a1299e6417c24fa2ae773c6cea47c", + "to": "0x11adbc1b3fd5cb5f29b0052b4affe725645b5e4c", + "blockNumber": 22965258, + "transactionHash": "0xbd3da85330f64b9d7b848bc9f3dc735770f1ece6b9e9b66fc07dd4ad0afac2ad", + "timestamp": 1753073063 + }, + { + "from": "0x11adbc1b3fd5cb5f29b0052b4affe725645b5e4c", + "to": "0xcc2047a4108033cb48727b8c69914f40cc0bbc1b", + "blockNumber": 22972035, + "transactionHash": "0x7397e35cdf8cc0262e4d56eda9340d29ed704884b30291d4d61b638e0536b833", + "timestamp": 1753154831 + }, + { + "from": "0xcc2047a4108033cb48727b8c69914f40cc0bbc1b", + "to": "0x5f19021618af1ceb5de7ca112b505f51f813ae18", + "blockNumber": 22979916, + "transactionHash": "0x0c4d6a4a876ed2d48a9a4dccd10d2b9398ab8d017b097a82ac0bd6e161a31423", + "timestamp": 1753250075 + }, + { + "from": "0x5f19021618af1ceb5de7ca112b505f51f813ae18", + "to": "0x7a16ff8270133f063aab6c9977183d9e72835428", + "blockNumber": 22986579, + "transactionHash": "0xa26a83f51b94c16378a03f0b227519dcfe29750746585389abe93728c8433c93", + "timestamp": 1753330691 + }, + { + "from": "0x7a16ff8270133f063aab6c9977183d9e72835428", + "to": "0x0c004944e16e9065da1c7db49f9964e2a3ac8892", + "blockNumber": 22994565, + "transactionHash": "0x4b8cd47c48e21d69193d300b19d74e17156ac6a1cc754be7af72a6aa45e4abf0", + "timestamp": 1753427183 + }, + { + "from": "0x0c004944e16e9065da1c7db49f9964e2a3ac8892", + "to": "0x54bae63e59b422dd7c047e375f051d60c37cb60f", + "blockNumber": 23001408, + "transactionHash": "0x763d47e62f18f287de1d95686a7ac7099e794ec6b42a2210e2beeda4f804e271", + "timestamp": 1753509863 + }, + { + "from": "0x54bae63e59b422dd7c047e375f051d60c37cb60f", + "to": "0xa307a15d113d9763c6fc84768ac34909438bb2ee", + "blockNumber": 23008580, + "transactionHash": "0x3740f90f7ef273b821f9f9106ad45542ab0af1ebba4af53b3c0a0ba13ae24b82", + "timestamp": 1753596383 + }, + { + "from": "0xa307a15d113d9763c6fc84768ac34909438bb2ee", + "to": "0x648aa14e4424e0825a5ce739c8c68610e143fb79", + "blockNumber": 23017584, + "transactionHash": "0x5760ed9cf8b8611a57c07f7aec5f3d9256325cf52a4b999658ee77efb91603f4", + "timestamp": 1753704983 + }, + { + "from": "0x648aa14e4424e0825a5ce739c8c68610e143fb79", + "to": "0x36acc9e5248f33b030d3ea3465ac1f99e55868ec", + "blockNumber": 23023646, + "transactionHash": "0x77dd6bbe4da042c9f7ad26447070807be5de946d129148c345f70b9cb891c74b", + "timestamp": 1753778231 + }, + { + "from": "0x36acc9e5248f33b030d3ea3465ac1f99e55868ec", + "to": "0x0000000000000000000000000000000000000000", + "blockNumber": 23032809, + "transactionHash": "0x7b6c5ae7767ee63abb5ac88374fc197bab571e71749e25fd574b102d315ec4bd", + "timestamp": 1753889003 + } +] diff --git a/src/lib/torch/etherscan.ts b/src/lib/torch/etherscan.ts deleted file mode 100644 index cfd09e18931..00000000000 --- a/src/lib/torch/etherscan.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { type Address } from "viem" - -import Torch from "@/data/Torch.json" - -const TORCH_CONTRACT_ADDRESS = Torch.address as Address -const TORCH_BLOCK_NUMBER = Torch.blockNumber - -export type TransferEvent = { - from: Address - to: Address - blockNumber: number - transactionHash: string - timestamp: number -} - -// You'll need to get an API key from https://etherscan.io/apis -const ETHERSCAN_API_KEY = process.env.ETHERSCAN_API_KEY || "" - -export const fetchTorchTransfersFromEtherscan = async (): Promise< - TransferEvent[] -> => { - if (!ETHERSCAN_API_KEY) { - throw new Error("ETHERSCAN_API_KEY environment variable is required") - } - - try { - // Get contract events from Etherscan - const response = await fetch( - [ - "https://api.etherscan.io/api", - "?module=logs", - "&action=getLogs", - `&address=${TORCH_CONTRACT_ADDRESS}`, - `&fromBlock=${TORCH_BLOCK_NUMBER}`, - "&toBlock=latest", - // ERC721 Transfer event signature - "&topic0=0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - `&apikey=${ETHERSCAN_API_KEY}`, - ].join("") - ) - - const data = await response.json() - - if (data.status !== "1") { - throw new Error(`Etherscan API error: ${data.message}`) - } - - return data.result.map( - (log: { - topics: string[] - blockNumber: string - transactionHash: string - timeStamp: string - }) => ({ - from: `0x${log.topics[1].slice(26)}` as Address, // Remove padding from topic1 - to: `0x${log.topics[2].slice(26)}` as Address, // Remove padding from topic2 - blockNumber: parseInt(log.blockNumber, 16), - transactionHash: log.transactionHash, - timestamp: parseInt(log.timeStamp, 16), - }) - ) - } catch (error) { - console.error("Failed to fetch torch transfers from Etherscan:", error) - return [] - } -} diff --git a/src/lib/torch/index.ts b/src/lib/torch/index.ts index 9390bd7c307..4dba2b623cf 100644 --- a/src/lib/torch/index.ts +++ b/src/lib/torch/index.ts @@ -4,9 +4,9 @@ import { type Address, isAddress } from "viem" import { getPublicClient } from "@wagmi/core" import Torch from "@/data/Torch.json" +import torchTransferEvents from "@/data/torchTransferEvents.json" import { config } from "./config" -import { fetchTorchTransfersFromEtherscan } from "./etherscan" const TORCH_CONTRACT_ADDRESS = Torch.address as Address const TORCH_ABI = Torch.abi @@ -48,14 +48,9 @@ export type TorchHolderEvent = TorchHolder & { event: TransferEvent } -export const getTransferEvents = cache( - async () => { - const transferEvents = await fetchTorchTransfersFromEtherscan() - return transferEvents - }, - ["torch-transfer-events"], - { revalidate: 86400 } -) +export const getTransferEvents = () => { + return torchTransferEvents as TransferEvent[] +} export const getHolderEvents = async ( torchHolderMap: Record,