From 61cfa6ba23b0bad5b5545058dcd173604916ea22 Mon Sep 17 00:00:00 2001 From: Liu-Cheng Xu Date: Sun, 12 Jan 2025 10:39:38 +0800 Subject: [PATCH 1/3] Update subcoin-social-card.png --- docusaurus.config.js | 292 ++++++++++++++--------------- static/img/subcoin-social-card.png | Bin 0 -> 39736 bytes 2 files changed, 146 insertions(+), 146 deletions(-) create mode 100644 static/img/subcoin-social-card.png diff --git a/docusaurus.config.js b/docusaurus.config.js index a065280..f0f89cf 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -4,162 +4,162 @@ // There are various equivalent ways to declare your Docusaurus config. // See: https://docusaurus.io/docs/api/docusaurus-config -import {themes as prismThemes} from 'prism-react-renderer'; +import { themes as prismThemes } from "prism-react-renderer"; /** @type {import('@docusaurus/types').Config} */ const config = { - title: 'Subcoin', - tagline: 'Bitcoin Full Node Built in Rust Using Polkadot-SDK', - favicon: 'img/favicon.ico', + title: "Subcoin", + tagline: "Bitcoin Full Node Built in Rust Using Polkadot-SDK", + favicon: "img/favicon.ico", - // Set the production url of your site here - url: 'https://subcoin-project.github.io', - // Set the // pathname under which your site is served - // For GitHub pages deployment, it is often '//' - baseUrl: '/', + // Set the production url of your site here + url: "https://subcoin-project.github.io", + // Set the // pathname under which your site is served + // For GitHub pages deployment, it is often '//' + baseUrl: "/", - // GitHub pages deployment config. - // If you aren't using GitHub pages, you don't need these. - organizationName: 'subcoin-project', // Usually your GitHub org/user name. - projectName: 'subcoin-project.github.io', // Usually your repo name. - trailingSlash: false, + // GitHub pages deployment config. + // If you aren't using GitHub pages, you don't need these. + organizationName: "subcoin-project", // Usually your GitHub org/user name. + projectName: "subcoin-project.github.io", // Usually your repo name. + trailingSlash: false, - onBrokenLinks: 'throw', - onBrokenMarkdownLinks: 'warn', + onBrokenLinks: "throw", + onBrokenMarkdownLinks: "warn", - // Even if you don't use internationalization, you can use this field to set - // useful metadata like html lang. For example, if your site is Chinese, you - // may want to replace "en" with "zh-Hans". - i18n: { - defaultLocale: 'en', - locales: ['en'], - }, + // Even if you don't use internationalization, you can use this field to set + // useful metadata like html lang. For example, if your site is Chinese, you + // may want to replace "en" with "zh-Hans". + i18n: { + defaultLocale: "en", + locales: ["en"], + }, - presets: [ - [ - 'classic', - /** @type {import('@docusaurus/preset-classic').Options} */ - ({ - docs: { - sidebarPath: './sidebars.js', - // Please change this to your repo. - // Remove this to remove the "edit this page" links. - editUrl: - 'https://github.com/subcoin-project/subcoin-project.github.io/tree/main/', - showLastUpdateAuthor: true, - showLastUpdateTime: true, - }, - blog: { - showReadingTime: true, - feedOptions: { - type: ['rss', 'atom'], - xslt: true, - }, - // Please change this to your repo. - // Remove this to remove the "edit this page" links. - editUrl: - 'https://github.com/subcoin-project/subcoin-project.github.io/tree/main/', - // Useful options to enforce blogging best practices - onInlineTags: 'warn', - onInlineAuthors: 'warn', - onUntruncatedBlogPosts: 'warn', - }, - theme: { - customCss: './src/css/custom.css', - }, - }), - ], + presets: [ + [ + "classic", + /** @type {import('@docusaurus/preset-classic').Options} */ + ({ + docs: { + sidebarPath: "./sidebars.js", + // Please change this to your repo. + // Remove this to remove the "edit this page" links. + editUrl: + "https://github.com/subcoin-project/subcoin-project.github.io/tree/main/", + showLastUpdateAuthor: true, + showLastUpdateTime: true, + }, + blog: { + showReadingTime: true, + feedOptions: { + type: ["rss", "atom"], + xslt: true, + }, + // Please change this to your repo. + // Remove this to remove the "edit this page" links. + editUrl: + "https://github.com/subcoin-project/subcoin-project.github.io/tree/main/", + // Useful options to enforce blogging best practices + onInlineTags: "warn", + onInlineAuthors: "warn", + onUntruncatedBlogPosts: "warn", + }, + theme: { + customCss: "./src/css/custom.css", + }, + }), ], + ], - themeConfig: - /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ - ({ - // Replace with your project's social card - image: 'img/docusaurus-social-card.jpg', - navbar: { - title: 'Subcoin', - logo: { - alt: 'Subcoin Logo', - src: 'img/subcoin-logo.svg', - }, - items: [ - { - type: 'docSidebar', - sidebarId: 'tutorialSidebar', - position: 'left', - label: 'User Guide', - }, - { - href: 'https://subcoin-project.github.io/subcoin/book/', - label: 'Dev Guide', - position: 'left', - }, - {to: '/blog', label: 'Blog', position: 'left'}, - {to: '/docs/donate', label: 'Donate', position: 'left'}, - { - href: 'https://github.com/subcoin-project/subcoin', - position: 'right', - className: 'header-github-link', - 'aria-label': 'GitHub repository', - }, - { - href: 'https://x.com/subcoin_project', - position: 'right', - className: 'header-twitter-link', - 'aria-label': 'Twitter profile', - }, - ], - }, - footer: { - style: 'dark', - links: [ - { - title: 'Docs', - items: [ - { - label: 'Tutorial', - to: '/docs/intro', - }, - ], - }, - { - title: 'Community', - items: [ - { - label: 'Telegram', - href: 'https://t.me/subcoin_project', - }, - { - label: 'X', - href: 'https://x.com/subcoin_project', - }, - ], - }, - { - title: 'More', - items: [ - { - label: 'Blog', - to: '/blog', - }, - { - label: 'GitHub', - href: 'https://github.com/subcoin-project/subcoin', - }, - ], - }, - ], - copyright: `Copyright © ${new Date().getFullYear()} Subcoin Project, Inc. Built with Docusaurus.`, - }, - prism: { - theme: prismThemes.github, - darkTheme: prismThemes.dracula, - }, - }), - markdown: { - mermaid: true, - }, - themes: ['@docusaurus/theme-mermaid'], + themeConfig: + /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ + ({ + // Replace with your project's social card + image: "img/subcoin-social-card.jpg", + navbar: { + title: "Subcoin", + logo: { + alt: "Subcoin Logo", + src: "img/subcoin-logo.svg", + }, + items: [ + { + type: "docSidebar", + sidebarId: "tutorialSidebar", + position: "left", + label: "User Guide", + }, + { + href: "https://subcoin-project.github.io/subcoin/book/", + label: "Dev Guide", + position: "left", + }, + { to: "/blog", label: "Blog", position: "left" }, + { to: "/docs/donate", label: "Donate", position: "left" }, + { + href: "https://github.com/subcoin-project/subcoin", + position: "right", + className: "header-github-link", + "aria-label": "GitHub repository", + }, + { + href: "https://x.com/subcoin_project", + position: "right", + className: "header-twitter-link", + "aria-label": "Twitter profile", + }, + ], + }, + footer: { + style: "dark", + links: [ + { + title: "Docs", + items: [ + { + label: "Tutorial", + to: "/docs/intro", + }, + ], + }, + { + title: "Community", + items: [ + { + label: "Telegram", + href: "https://t.me/subcoin_project", + }, + { + label: "X", + href: "https://x.com/subcoin_project", + }, + ], + }, + { + title: "More", + items: [ + { + label: "Blog", + to: "/blog", + }, + { + label: "GitHub", + href: "https://github.com/subcoin-project/subcoin", + }, + ], + }, + ], + copyright: `Copyright © ${new Date().getFullYear()} Subcoin Project, Inc. Built with Docusaurus.`, + }, + prism: { + theme: prismThemes.github, + darkTheme: prismThemes.dracula, + }, + }), + markdown: { + mermaid: true, + }, + themes: ["@docusaurus/theme-mermaid"], }; export default config; diff --git a/static/img/subcoin-social-card.png b/static/img/subcoin-social-card.png new file mode 100644 index 0000000000000000000000000000000000000000..daa9185e022abe3674a8130770c4c376cad323a4 GIT binary patch literal 39736 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

+pROY3 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 I=ef9l0BKG4j{pDw literal 0 HcmV?d00001 From 24471add2f64b6a4fd55ed5e727a77fe66153069 Mon Sep 17 00:00:00 2001 From: Liu-Cheng Xu Date: Sun, 12 Jan 2025 10:48:25 +0800 Subject: [PATCH 2/3] FMT --- babel.config.js | 2 +- ...ard-decentralized-fast-sync-for-bitcoin.md | 14 +- docs/basics/download-UTXO-snapshot.md | 11 +- docs/basics/set-up-a-node.md | 13 +- docs/extras/_category_.json | 2 +- docs/extras/manage-docs-versions.md | 2 +- package.json | 4 +- sidebars.js | 8 +- src/components/HomepageFeatures/index.js | 146 ++++++++++-------- src/css/custom.css | 20 +-- src/pages/index.js | 80 +++++----- yarn.lock | 5 + 12 files changed, 162 insertions(+), 145 deletions(-) diff --git a/babel.config.js b/babel.config.js index e00595d..bfd75db 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,3 +1,3 @@ module.exports = { - presets: [require.resolve('@docusaurus/core/lib/babel/preset')], + presets: [require.resolve("@docusaurus/core/lib/babel/preset")], }; diff --git a/blog/2024-10-01-a-step-toward-decentralized-fast-sync-for-bitcoin.md b/blog/2024-10-01-a-step-toward-decentralized-fast-sync-for-bitcoin.md index 3a91081..a350ec7 100644 --- a/blog/2024-10-01-a-step-toward-decentralized-fast-sync-for-bitcoin.md +++ b/blog/2024-10-01-a-step-toward-decentralized-fast-sync-for-bitcoin.md @@ -49,7 +49,7 @@ Subcoin introduces an innovative approach to encapsulating the Bitcoin chain wit **Subcoin runtime** -Subcoin runtime is a minimalistic Substrate runtime, comprising two essential pallets: +Subcoin runtime is a minimalistic Substrate runtime, comprising two essential pallets: - **frame-system**: This pallet is the core component of the Substrate framework. - **pallet-bitcoin**: This pallet tracks the state of the UTXO set on-chain. It processes the inputs and outputs of each Bitcoin transaction embedded in an unsigned extrinsic within the pallet. @@ -122,17 +122,11 @@ The Proof of Concept implementation has been developed, but several optimization ## Future Vision - **Bitcoin Wallet Integration in polkadot.js.org** - - A significant future goal is to enable [polkadot.js.org](http://polkadot.js.org/) to support Bitcoin transactions, effectively turning it into a fully functional Bitcoin wallet. This ambitious enhancement would require deep integration of Bitcoin into the Substrate framework, including adjustments to the runtime, the creation of a custom transaction pool, and likely modifications to the [polkadot.js.org](http://polkadot.js.org/) interface. - + A significant future goal is to enable [polkadot.js.org](http://polkadot.js.org/) to support Bitcoin transactions, effectively turning it into a fully functional Bitcoin wallet. This ambitious enhancement would require deep integration of Bitcoin into the Substrate framework, including adjustments to the runtime, the creation of a custom transaction pool, and likely modifications to the [polkadot.js.org](http://polkadot.js.org/) interface. - **Develop a BRC20 Indexer** - - Expanding Subcoin to include a BRC20 indexer is a straightforward extension that can be implemented during the Bitcoin full sync process. This addition would enhance the decentralization of BRC20 assets, contributing to a more robust and accessible Bitcoin ecosystem. - + Expanding Subcoin to include a BRC20 indexer is a straightforward extension that can be implemented during the Bitcoin full sync process. This addition would enhance the decentralization of BRC20 assets, contributing to a more robust and accessible Bitcoin ecosystem. - **Explore Bitcoin Layer 2 Solutions** - - The Subcoin team's initial goal was not to build a Bitcoin node in Rust but to explore Bitcoin L2 solutions. With the recent surge in Bitcoin L2 projects, the Subcoin team is still actively seeking innovative ways to enhance the Bitcoin ecosystem, going beyond just creating a Rust client. - + The Subcoin team's initial goal was not to build a Bitcoin node in Rust but to explore Bitcoin L2 solutions. With the recent surge in Bitcoin L2 projects, the Subcoin team is still actively seeking innovative ways to enhance the Bitcoin ecosystem, going beyond just creating a Rust client. These ideas represent just the beginning. As Subcoin matures and grows, more possibilities will emerge. diff --git a/docs/basics/download-UTXO-snapshot.md b/docs/basics/download-UTXO-snapshot.md index e89597a..359a4c1 100644 --- a/docs/basics/download-UTXO-snapshot.md +++ b/docs/basics/download-UTXO-snapshot.md @@ -28,12 +28,13 @@ TODO: public bootnodes - Snapshot integrity: - The expected `sha256sum` for the snapshot at block 840000 is: + The expected `sha256sum` for the snapshot at block 840000 is: - ```text - dc4bb43d58d6a25e91eae93eb052d72e3318bd98ec62a5d0c11817cefbba177b - ``` - This checksum matches the one documented in the official [Bitcoin Core pull request](https://github.com/bitcoin/bitcoin/pull/28553#issue-1920247340). + ```text + dc4bb43d58d6a25e91eae93eb052d72e3318bd98ec62a5d0c11817cefbba177b + ``` + + This checksum matches the one documented in the official [Bitcoin Core pull request](https://github.com/bitcoin/bitcoin/pull/28553#issue-1920247340). ## Verify the Downloaded Snapshot diff --git a/docs/basics/set-up-a-node.md b/docs/basics/set-up-a-node.md index 8644eb4..90fc55f 100644 --- a/docs/basics/set-up-a-node.md +++ b/docs/basics/set-up-a-node.md @@ -14,10 +14,9 @@ This guide will show you how to connect to Bitcoin network with Subcoin. - **Full Node**: A full node prunes historical states, all finalized blocks' states older than a configurable number except the genesis block's state will be pruned. This is 256 blocks from the last finalized one by default. A pruned node this way requires much less space than an archive node. - **Light Node**: TODO - ### Sync Strategies -There are two strategies to sync the Bitcoin network for new nodes: _Full Sync_ and _Fast Sync_. +There are two strategies to sync the Bitcoin network for new nodes: _Full Sync_ and _Fast Sync_. - **Full Sync**: This will download and replay all the blocks from the genesis to the tip directly from the P2P network (either the Subcoin network or directly from the Bitcoin P2P network). This sync strategy is only necessary for establishing the Subcoin bootnodes when the Subcoin P2P network starts as this process is time-consuming and resources-intensive, possibly taking days to complete depending on the performance of your machine. For the regular users, _Fast Sync_ is usually recommended. @@ -30,9 +29,9 @@ There are two strategies to sync the Bitcoin network for new nodes: _Full Sync_ ```mermaid graph TD %% Define nodes - subcoin_p2p((Subcoin P2P Network)) ---> |Fast Sync|subcoin_node[Subcoin Node] - subcoin_p2p ---> |Full Sync|subcoin_node[Subcoin Node] - bitcoin_p2p((Bitcoin P2P Network)) ---> |Full Sync|subcoin_node + subcoin_p2p((Subcoin P2P Network)) ---> |Fast Sync|subcoin_node[Subcoin Node] + subcoin_p2p ---> |Full Sync|subcoin_node[Subcoin Node] + bitcoin_p2p((Bitcoin P2P Network)) ---> |Full Sync|subcoin_node %% Add labels for syncing methods @@ -56,9 +55,9 @@ Although it's technically supported to perform a full sync from the Subcoin p2p Note that the storage usage will grow over time. - Full Node - - SSD with 500GiB of space + - SSD with 500GiB of space - Archive Node - - SSD with 4TiB of space + - SSD with 4TiB of space ## Syncing Bitcoin Chain diff --git a/docs/extras/_category_.json b/docs/extras/_category_.json index 22823e0..2cf494d 100644 --- a/docs/extras/_category_.json +++ b/docs/extras/_category_.json @@ -3,6 +3,6 @@ "position": 3, "link": { "type": "generated-index", - "slug": "extras", + "slug": "extras" } } diff --git a/docs/extras/manage-docs-versions.md b/docs/extras/manage-docs-versions.md index ccda0b9..9ea672c 100644 --- a/docs/extras/manage-docs-versions.md +++ b/docs/extras/manage-docs-versions.md @@ -34,7 +34,7 @@ export default { items: [ // highlight-start { - type: 'docsVersionDropdown', + type: "docsVersionDropdown", }, // highlight-end ], diff --git a/package.json b/package.json index 180a9d3..d2d71d9 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "deploy": "docusaurus deploy", "clear": "docusaurus clear", "serve": "docusaurus serve", + "format": "prettier --write .", "write-translations": "docusaurus write-translations", "write-heading-ids": "docusaurus write-heading-ids" }, @@ -21,7 +22,8 @@ "clsx": "^2.0.0", "prism-react-renderer": "^2.3.0", "react": "^18.0.0", - "react-dom": "^18.0.0" + "react-dom": "^18.0.0", + "prettier": "^2.0.0" }, "devDependencies": { "@docusaurus/module-type-aliases": "3.5.2", diff --git a/sidebars.js b/sidebars.js index c5e8c08..7e1c318 100644 --- a/sidebars.js +++ b/sidebars.js @@ -13,11 +13,11 @@ /** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ const sidebars = { - // By default, Docusaurus generates a sidebar from the docs folder structure - tutorialSidebar: [{type: 'autogenerated', dirName: '.'}], + // By default, Docusaurus generates a sidebar from the docs folder structure + tutorialSidebar: [{ type: "autogenerated", dirName: "." }], - // But you can create a sidebar manually - /* + // But you can create a sidebar manually + /* tutorialSidebar: [ 'intro', 'hello', diff --git a/src/components/HomepageFeatures/index.js b/src/components/HomepageFeatures/index.js index ba89ff8..567b7e5 100644 --- a/src/components/HomepageFeatures/index.js +++ b/src/components/HomepageFeatures/index.js @@ -1,74 +1,88 @@ -import clsx from 'clsx'; -import Heading from '@theme/Heading'; -import styles from './styles.module.css'; -import Link from '@docusaurus/Link'; +import clsx from "clsx"; +import Heading from "@theme/Heading"; +import styles from "./styles.module.css"; +import Link from "@docusaurus/Link"; const FeatureList = [ - { - title: 'Written in Rust', - Svg: require('@site/static/img/rust.svg').default, - description: ( - <> - As a high-performance system programming language, Rust is well-regarded for its safety and concurrency. - Its widespread adoption in the blockchain space makes it an excellent choice for fostering new contributors to the Bitcoin ecosystem. - - ), - }, - { - title: 'Built on Polkadot SDK', - Svg: require('@site/static/img/polkadot.svg').default, - description: ( - <> - Leveraging the scalability and flexibility of the industry-leading Polkadot-SDK (formerly known as Substrate), - Subcoin has the potential to evolve into a robust and feature-rich Bitcoin software with production-level infrastructure. - - ), - }, - { - title: 'Decentralized Fast Sync', - Svg: require('@site/static/img/blockchain.svg').default, - description: ( - <> - Subcoin node enables new Bitcoin participants to quickly sync the latest Bitcoin state in a decentralized manner, - achieving the fast sync functionality of Bitcoin Core without depending on a trusted snapshot provider. - - ), - }, - { - title: 'Trustless UTXO Snapshot Provider for Bitcoin Core', - Svg: require('@site/static/img/snapshot_provider.svg').default, - description: ( - <> - Subcoin provides a dedicated tool Snapcake that serves as a trustless UTXO snapshot provider for Bitcoin Core without running a Subcoin node, downloading the Bitcoin state from the Subcoin P2P network and generating a Bitcoin Core-compatible UTXO snapshot which can be directly imported into Bitcoin Core. - - ), - }, + { + title: "Written in Rust", + Svg: require("@site/static/img/rust.svg").default, + description: ( + <> + As a high-performance system programming language, Rust is well-regarded + for its safety and concurrency. Its widespread adoption in the + blockchain space makes it an excellent choice for fostering new + contributors to the Bitcoin ecosystem. + + ), + }, + { + title: "Built on Polkadot SDK", + Svg: require("@site/static/img/polkadot.svg").default, + description: ( + <> + Leveraging the scalability and flexibility of the industry-leading{" "} + + Polkadot-SDK + {" "} + (formerly known as Substrate), Subcoin has the potential to evolve into + a robust and feature-rich Bitcoin software with production-level + infrastructure. + + ), + }, + { + title: "Decentralized Fast Sync", + Svg: require("@site/static/img/blockchain.svg").default, + description: ( + <> + Subcoin node enables new Bitcoin participants to quickly sync the latest + Bitcoin state in a decentralized manner, achieving the fast sync + functionality of Bitcoin Core without depending on a trusted snapshot + provider. + + ), + }, + { + title: "Trustless UTXO Snapshot Provider for Bitcoin Core", + Svg: require("@site/static/img/snapshot_provider.svg").default, + description: ( + <> + Subcoin provides a dedicated tool{" "} + Snapcake that + serves as a trustless UTXO snapshot provider for Bitcoin Core without + running a Subcoin node, downloading the Bitcoin state from the Subcoin + P2P network and generating a Bitcoin Core-compatible UTXO snapshot which + can be directly imported into Bitcoin Core. + + ), + }, ]; -function Feature({Svg, title, description}) { - return ( -
-
- -
-
- {title} -

{description}

-
-
- ); +function Feature({ Svg, title, description }) { + return ( +
+
+ +
+
+ {title} +

{description}

+
+
+ ); } export default function HomepageFeatures() { - return ( -
-
-
- {FeatureList.map((props, idx) => ( - - ))} -
-
-
- ); + return ( +
+
+
+ {FeatureList.map((props, idx) => ( + + ))} +
+
+
+ ); } diff --git a/src/css/custom.css b/src/css/custom.css index ebead67..32d2b72 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -7,14 +7,14 @@ /* Colors are generated from https://aicolors.co/ and adjusted by ChatGPT. */ :root { /* Primary Colors */ - --ifm-color-primary: #2C3E50; /* primary-100 */ + --ifm-color-primary: #2c3e50; /* primary-100 */ --ifm-color-primary-dark: #57687c; /* primary-200 */ --ifm-color-primary-darker: #b4c7dd; /* primary-300 */ - --ifm-color-primary-light: #F7CAC9; /* accent-100 */ + --ifm-color-primary-light: #f7cac9; /* accent-100 */ --ifm-color-primary-lighter: #926b6a; /* accent-200 */ /* Link Colors */ - --ifm-link-color: #1E6091; /* Distinct blue link color */ + --ifm-link-color: #1e6091; /* Distinct blue link color */ --ifm-link-hover-color: #144c73; /* Darker shade for hover */ /* Text Colors */ @@ -22,7 +22,7 @@ --ifm-color-content-secondary: #5c5c5c; /* text-200 */ /* Background Colors */ - --ifm-background-color: #F2F2F2; /* bg-100 */ + --ifm-background-color: #f2f2f2; /* bg-100 */ --ifm-background-secondary-color: #e8e8e8; /* bg-200 */ --ifm-background-alt: #bfbfbf; /* bg-300 */ @@ -32,12 +32,12 @@ } /* Dark mode adjustments */ -[data-theme='dark'] { +[data-theme="dark"] { /* Primary Colors */ --ifm-color-primary: #926b6a; /* accent-200 */ - --ifm-color-primary-dark: #2C3E50; /* primary-100 */ + --ifm-color-primary-dark: #2c3e50; /* primary-100 */ --ifm-color-primary-darker: #57687c; /* primary-200 */ - --ifm-color-primary-light: #F7CAC9; /* accent-100 */ + --ifm-color-primary-light: #f7cac9; /* accent-100 */ --ifm-color-primary-lighter: #b4c7dd; /* primary-300 */ /* Link Colors */ @@ -45,7 +45,7 @@ --ifm-link-hover-color: #4a93c9; /* Slightly darker for hover */ /* Text Colors */ - --ifm-color-content: #F2F2F2; /* lightened text-100 for dark mode */ + --ifm-color-content: #f2f2f2; /* lightened text-100 for dark mode */ --ifm-color-content-secondary: #e8e8e8; /* bg-200 */ /* Background Colors */ @@ -67,7 +67,7 @@ } .header-github-link::before { - content: ''; + content: ""; width: 24px; height: 24px; display: flex; @@ -85,7 +85,7 @@ } .header-twitter-link::before { - content: ''; + content: ""; width: 24px; height: 24px; display: flex; diff --git a/src/pages/index.js b/src/pages/index.js index 17dd323..91db125 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -1,46 +1,48 @@ -import clsx from 'clsx'; -import Link from '@docusaurus/Link'; -import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import Layout from '@theme/Layout'; -import HomepageFeatures from '@site/src/components/HomepageFeatures'; +import clsx from "clsx"; +import Link from "@docusaurus/Link"; +import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; +import Layout from "@theme/Layout"; +import HomepageFeatures from "@site/src/components/HomepageFeatures"; -import Heading from '@theme/Heading'; -import styles from './index.module.css'; +import Heading from "@theme/Heading"; +import styles from "./index.module.css"; function HomepageHeader() { - const {siteConfig} = useDocusaurusContext(); - return ( -
-
- - {siteConfig.title} - -

{siteConfig.tagline}

-

- Unlock the Potential of Decentralized Fast Sync for Bitcoin — and more -

-
- - Get Started - -
-
-
- ); + const { siteConfig } = useDocusaurusContext(); + return ( +
+
+ + {siteConfig.title} + +

{siteConfig.tagline}

+

+ Unlock the Potential of Decentralized Fast Sync for Bitcoin — and more +

+
+ + Get Started + +
+
+
+ ); } export default function Home() { - const {siteConfig} = useDocusaurusContext(); - return ( - - -
- -
-
- ); + const { siteConfig } = useDocusaurusContext(); + return ( + + +
+ +
+
+ ); } diff --git a/yarn.lock b/yarn.lock index 2aaffa6..5e3639c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7319,6 +7319,11 @@ postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.26, postcss@^8.4.33, postcss@^8.4 picocolors "^1.1.0" source-map-js "^1.2.1" +prettier@^2.0.0: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + pretty-error@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" From fa3e2b4316f19ca1566c7402724508e934a5a847 Mon Sep 17 00:00:00 2001 From: Liu-Cheng Xu Date: Sun, 12 Jan 2025 11:02:51 +0800 Subject: [PATCH 3/3] Add new favicon --- docusaurus.config.js | 2 +- static/img/subcoin-favicon-black.png | Bin 0 -> 638 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 static/img/subcoin-favicon-black.png diff --git a/docusaurus.config.js b/docusaurus.config.js index f0f89cf..f83d86d 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -10,7 +10,7 @@ import { themes as prismThemes } from "prism-react-renderer"; const config = { title: "Subcoin", tagline: "Bitcoin Full Node Built in Rust Using Polkadot-SDK", - favicon: "img/favicon.ico", + favicon: "img/subcoin-favicon-black.png", // Set the production url of your site here url: "https://subcoin-project.github.io", diff --git a/static/img/subcoin-favicon-black.png b/static/img/subcoin-favicon-black.png new file mode 100644 index 0000000000000000000000000000000000000000..720d1cbc7ad75d8023d3d8f4e64b396fe7c357b6 GIT binary patch literal 638 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&Nd)+WxcX!k0-2a#HFx?#peTDu zkY6yvnOBSb%aso3SZV=(kPIWLheq>N!cpbJCyum{41<9b)UaV?^}t&H56`ez@!U z-XD>yOGHyP@9oH$Cotnr(UxDY`kSVluU@XNB{Ju)cf4+k_!qAWYa|qeUN2plF3mGt zfAW9*eTIiPzaBfcxt#6v_S+HjeGDvAr`>kA{Ly{mJ?Y9F{C^&bt26WJp8qBA+{jAw zhVvBL+W)(m&TLN&pLubv<0KVM!O9y?d+wxUUd$Feyn5m44{it5674(YhcZMRJojjM z+0~2N4=W4l>~C7v9+fQm;d9A?#0d5eHu49m8?HBGpPk9|P2h#)gXv2Y7C38kGyQ%R z(y(|_Q_pre-B(Pf&L7f#)7^T;^Yp(L#(PA()fqpQsXZ1ld>k^N+onfus#{jVR{nF` zd8*e~O!iK@VWyG4;Mi6DnC<8G-0Lx5e;jQqXTP%c1g}h)XmJ9M$9uk%9YSln*OuSy z-!4&*;jXpp)he~yi8>QAC8lwB?`8Rsc9r$YlIbet+?oan`H*@9pak@pZc9UkvynC)k=F zBzXVbq>th`mjl1pDYoW^1pV;SY|XzK^dru&H9u_s!MvZ+IoH)eG5JaH4+G;3+3I5v RZY`iB`7{6W;&; literal 0 HcmV?d00001