├── components ├── Sats.css ├── TransferHistory.module.css ├── ClientOnly.tsx ├── BlocksWrapper.tsx ├── Collapsible.tsx ├── inscriptions │ ├── Iframe.tsx │ ├── InscriptionRenderImage.tsx │ ├── InscriptionRender.tsx │ ├── json-viewer.css │ ├── InscriptionCard.tsx │ ├── InscriptionRenderText.tsx │ └── InscriptionRenderJson.tsx ├── Ellipsis.tsx ├── TimeAgo.tsx ├── SvgPattern.tsx ├── CtaLink.tsx ├── TruncatingTooltip.tsx ├── icons │ ├── IconUpRight.tsx │ ├── IconAudio.tsx │ ├── IconVideo.tsx │ ├── IconFlame.tsx │ ├── IconTwitter.tsx │ ├── IconShrink.tsx │ ├── IconImage.tsx │ ├── IconExpand.tsx │ ├── IconText.tsx │ ├── IconSparkle.tsx │ ├── IconFile.tsx │ ├── IconEye.tsx │ └── IconUnicorn.tsx ├── SatsList.tsx ├── WithInscription.tsx ├── HoverCard.tsx ├── Error.tsx ├── Sort.tsx ├── Intro.tsx ├── SatsListWrapper.tsx ├── CopyButton.tsx ├── Loading.tsx ├── GalleryPreview.tsx ├── Tooltip.tsx ├── Charts.tsx ├── RarityTag.tsx ├── BlockDetails.tsx ├── Thumbnail.tsx ├── TextFilter.tsx ├── AddressDetails.tsx ├── Filter.tsx ├── AnimatedText.tsx ├── RangeFilter.tsx ├── DateFilter.tsx ├── Footer.tsx ├── Select.tsx ├── Dialog.tsx ├── SatsGrid.tsx ├── Brc20Homepage.tsx ├── Header.tsx ├── ui │ └── dialog.tsx ├── GalleryFull.tsx ├── SatDetails.tsx ├── LineChart.ts ├── Brc20Details.tsx ├── Brc20BalancesTable.tsx ├── Brc20HoldersTable.tsx ├── Blocks.tsx └── TransferHistory.tsx ├── .eslintrc.json ├── assets ├── Inter.ttf └── Inter-Regular.woff ├── public ├── noise.png ├── favicon.ico ├── og-image.png ├── brc20 │ ├── meme.png │ ├── ordi.png │ ├── pepe.png │ └── punk.png ├── favicon-16x16.png ├── favicon-32x32.png ├── mstile-70x70.png ├── mstile-144x144.png ├── mstile-150x150.png ├── mstile-310x150.png ├── mstile-310x310.png ├── apple-touch-icon.png ├── android-chrome-192x192.png ├── android-chrome-512x512.png ├── hiro-logo-dark.svg ├── hiro-dark.svg ├── hiro-light.svg ├── site.webmanifest ├── b-illustration.svg ├── safari-pinned-tab.svg └── logo.svg ├── postcss.config.js ├── .vscode └── settings.json ├── .env.sample ├── lib ├── store.ts ├── constants.ts ├── hooks.ts ├── types.ts └── utils.ts ├── prettier.config.js ├── .github ├── ISSUE_TEMPLATE │ ├── config.yml │ ├── feature_request.md │ └── bug_report.md ├── PULL_REQUEST_TEMPLATE.md └── CONTRIBUTING.md ├── app ├── (misc) │ └── ogimage │ │ └── [iid] │ │ ├── layout.tsx │ │ ├── misc.css │ │ └── page.tsx └── (explorer) │ ├── protocols │ └── brc-20 │ │ ├── [ticker] │ │ └── page.tsx │ │ └── page.tsx │ ├── sat │ └── [sid] │ │ └── page.tsx │ ├── block │ └── [bid] │ │ └── page.tsx │ ├── address │ └── [aid] │ │ └── page.tsx │ ├── period │ ├── [pid] │ │ └── page.tsx │ └── page.tsx │ ├── inscription │ └── [iid] │ │ └── page.tsx │ ├── stats │ └── page.tsx │ ├── page.tsx │ ├── layout.tsx │ └── globals.css ├── .gitignore ├── tsconfig.json ├── next.config.js ├── tailwind.config.js ├── package.json └── README.md /components/Sats.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /assets/Inter.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/assets/Inter.ttf -------------------------------------------------------------------------------- /public/noise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/noise.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /public/og-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/og-image.png -------------------------------------------------------------------------------- /public/brc20/meme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/brc20/meme.png -------------------------------------------------------------------------------- /public/brc20/ordi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/brc20/ordi.png -------------------------------------------------------------------------------- /public/brc20/pepe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/brc20/pepe.png -------------------------------------------------------------------------------- /public/brc20/punk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/brc20/punk.png -------------------------------------------------------------------------------- /public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/favicon-16x16.png -------------------------------------------------------------------------------- /public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/favicon-32x32.png -------------------------------------------------------------------------------- /public/mstile-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/mstile-70x70.png -------------------------------------------------------------------------------- /assets/Inter-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/assets/Inter-Regular.woff -------------------------------------------------------------------------------- /public/mstile-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/mstile-144x144.png -------------------------------------------------------------------------------- /public/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/mstile-150x150.png -------------------------------------------------------------------------------- /public/mstile-310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/mstile-310x150.png -------------------------------------------------------------------------------- /public/mstile-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/mstile-310x310.png -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/apple-touch-icon.png -------------------------------------------------------------------------------- /public/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/android-chrome-192x192.png -------------------------------------------------------------------------------- /public/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/android-chrome-512x512.png -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript.tsdk": "node_modules/typescript/lib", 3 | "typescript.enablePromptUseWorkspaceTsdk": true 4 | } -------------------------------------------------------------------------------- /.env.sample: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_API_URL=https://api.hiro.so/ordinals/v1 2 | NEXT_PUBLIC_API_BETA_URL= 3 | NEXT_PUBLIC_PREVIEW_URL= 4 | ENABLE_CSP= 5 | -------------------------------------------------------------------------------- /components/TransferHistory.module.css: -------------------------------------------------------------------------------- 1 | .gradient { 2 | filter: saturate(20%) brightness(75%); 3 | } 4 | 5 | .gradient:hover { 6 | filter: initial; 7 | } 8 | -------------------------------------------------------------------------------- /lib/store.ts: -------------------------------------------------------------------------------- 1 | import { atom } from "jotai"; 2 | 3 | export const lastInscriptionDataAtom = atom<{ 4 | number: string; 5 | date: Date; 6 | } | null>(null); 7 | -------------------------------------------------------------------------------- /prettier.config.js: -------------------------------------------------------------------------------- 1 | const TailwindPlugin = require("prettier-plugin-tailwindcss"); 2 | 3 | module.exports = { 4 | extends: ["@stacks/prettier-config"], 5 | plugins: [TailwindPlugin], 6 | }; 7 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | contact_links: 2 | - name: Ask the community 3 | url: https://stacks.chat/ 4 | about: Ask and discuss questions with other Stacks community developers. 5 | -------------------------------------------------------------------------------- /lib/constants.ts: -------------------------------------------------------------------------------- 1 | export const TILE_SIZE = 16; 2 | 3 | export const API_URL = 4 | process.env.NEXT_PUBLIC_API_URL ?? "https://api.hiro.so/ordinals/v1"; 5 | 6 | export const API_BETA_URL = process.env.NEXT_PUBLIC_API_BETA_URL ?? API_URL; 7 | -------------------------------------------------------------------------------- /app/(misc)/ogimage/[iid]/layout.tsx: -------------------------------------------------------------------------------- 1 | import "./misc.css"; 2 | 3 | export default function RootLayout({ 4 | children, 5 | }: { 6 | children: React.ReactNode; 7 | }) { 8 | return ( 9 | 10 |
{children} 11 | 12 | ); 13 | } 14 | -------------------------------------------------------------------------------- /components/ClientOnly.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { useHasMounted } from "../lib/hooks"; 4 | 5 | const ClientOnly = ({ children }: { children: React.ReactNode }) => { 6 | const hasMounted = useHasMounted(); 7 | if (!hasMounted) return null; 8 | return <>{children}>; 9 | }; 10 | 11 | export default ClientOnly; 12 | -------------------------------------------------------------------------------- /components/BlocksWrapper.tsx: -------------------------------------------------------------------------------- 1 | import { PeriodResponse } from "../lib/types"; 2 | import Blocks from "./Blocks"; 3 | 4 | const BlocksWrapper = ({ data }: { data: PeriodResponse }) => { 5 | return ( 6 |Something went wrong ʕ•̠͡•ʔ
19 | {/* todo: hide additional info in dropdown/details element */} 20 | {action &&{action}
} 21 | {message && ( 22 |
23 | {message}
24 |
25 | )}
26 | {status && Response Status: {status}
} 27 |41 | The numbers shown in these charts are not up-to-date currently. 42 |
43 |49 | The number of new inscribed sats per block by block height 50 |
51 | 52 |54 | The cumulative number of inscribed sats by block height 55 |
56 | 60 |30 | Block Hash: {data.results[0].genesis_block_hash} 31 |
32 |No inscriptions from transactions in this block
38 | )} 39 | 40 |No inscriptions currently owned by this address
39 | // todo: maybe add ownership history of address? 40 | )} 41 |55 | {props.text} 56 |
57 | {showGradient(props.inscription.content_length) && ( 58 | 65 | )} 66 |to
53 | setCurrentEnd(e.target.value)} 60 | /> 61 |67 | ordinals.hiro.so 68 |
69 |to
52 | e.currentTarget.showPicker()} // todo: is this still accessible? 57 | onChange={(e) => setCurrentEnd(e.target.value)} 58 | /> 59 |25 | This Ordinals Explorer is using the{" "} 26 | 27 | Hiro Ordinals API 28 | {" "} 29 | powered by{" "} 30 | 34 | Ordhook 35 | 36 | . 37 |
38 |Halving Periods
33 | 34 |59 | Estimated to start{" "} 60 | March 18, 2024 61 |
62 |66 | Bitcoin is partitioned into periods in which the block reward is 67 | adjusted. These periods are referred to as "Halving 68 | Periods". Every 210,000 blocks the block reward is halved. 69 |
70 |71 | Currently, the reward per block is 6.25 BTC. This means 72 | 62,500,000,000 satoshis are added to the total supply of Bitcoin, 73 | for every block that is mined to the canonical chain. 74 |
75 |29 | Latest Inscriptions 30 |
31 | 32 |54 | Download{" "} 55 | 60 | Leather 61 | {" "} 62 | and try{" "} 63 | 68 | Gamma.io 69 | 70 |
71 |78 | Ordinal Inscriptions, similar to NFTs, are digital assets inscribed 79 | on a satoshi, the lowest denomination of a Bitcoin (BTC).{" "} 80 | 85 | Learn more. 86 | 87 |
88 |17 | BRC-20 is a new token standard ( 18 | 23 | and experiment by @domodata 24 | 25 | ) on the Ordinals and the Bitcoin network. It allows users to create, 26 | mint, and transfer fungibe tokens — similar to ERC-20 on 27 | Ethereum. The{" "} 28 | 33 | protocol 34 | {" "} 35 | is built on top of Ordinals and uses the JSON content of inscriptions 36 | to store interaction information. 37 |
38 | 43 | Read more 44 | 45 |75 | Displaying the first deployed BRC-20 tokens 76 |
77 |86 | Displaying the most recently used BRC-20 tokens 87 |
88 || 63 | Sat Rarity 64 | | 65 |
66 | |
68 |
| 72 | Name 73 | | 74 |{satData.name} | 75 |
| 78 | Coinbase Height 79 | | 80 |81 | {satData.coinbase_height} 82 | | 83 |
| 86 | Decimal 87 | | 88 |{satData.decimal} | 89 |
| 92 | Degree 93 | | 94 |{satData.degree} | 95 |
| 98 | Percentile 99 | | 100 | {/* todo: something looks wrong here */} 101 |{satData.percentile} | 102 |
| 105 | Cycle 106 | | 107 |{satData.cycle} | 108 |
| 111 | Offset 112 | | 113 |{satData.offset} | 114 |
| address | 72 |balance | 73 |
|---|
| address | 75 |balance | 76 |
|---|
83 | {typeof props.children === "string" ? (
84 | {props.children}
85 | ) : (
86 | props.children
87 | )}
88 |
89 |
96 | >
97 | )}
98 | {json.op}
175 |{json.tick}
176 |{json.max}
177 | {json.lim && ( 178 |179 | {json.lim} 180 | lim 181 |
182 | )} 183 | {json.dec && ( 184 |185 | {json.dec} 186 | dec 187 |
188 | )} 189 | 190 | ); 191 | } 192 | 193 | if (json.op === "mint") { 194 | return ( 195 |{json.op}
197 |{json.tick}
198 |{json.amt}
199 |{json.op}
207 |{json.tick}
208 |{json.amt}
209 | {json.fee && ( 210 |211 | {json.fee} 212 | * 213 |
214 | )} 215 || 101 | Date 102 | | 103 |104 | Transferred To 105 | | 106 |107 | TxId 108 | | 109 | {/* todo: add loading dot component */} 110 | {/* {isLoading && ( 111 | 112 |
|---|