diff --git a/__minidapp/Home/index.tsx b/__minidapp/Home/index.tsx new file mode 100644 index 0000000..b6f2346 --- /dev/null +++ b/__minidapp/Home/index.tsx @@ -0,0 +1,414 @@ +import React from "react" +import { cn } from "@/app/lib/utils" +import { Link } from "react-router-dom" +import { SparklesCore } from "@/__minidapp/Home/sparkles" +import useTheme from "@/__minidapp/hooks/useTheme" +import useTitle from "@/__minidapp/hooks/useTitle" +import TitleBar from "./title-bar" + +export function Home() { + useTitle() + const { toggleTheme } = useTheme() + + return ( +
+ +
+ +
+
+
+ +
+
+
+
+
+
+

+ Welcome to the Minima Docs +

+

+ Learn all there is to know about Minima +

+ + +
+
+
+
+ ) +} + +const Cards = () => { + const features = [ + { + title: "Introduction", + description: "Learn about Minima and how to get involved.", + link: "/docs/core", + icon: ( + + + + ), + }, + { + title: "Run a node", + description: + "Install and run a validating and constructing Minima node on your device.", + link: "/docs/run-a-node", + icon: ( + + + + ), + }, + { + title: "User Guides", + description: "Guidance for using and managing your Minima node", + link: "/docs/user-guides", + icon: ( + + + + + ), + }, + { + title: "Developer Tutorials", + description: + "Develop decentralized applications and create smart contracts on Minima", + link: "/docs/development", + icon: ( + + + + + ), + }, + { + title: "Knowledge Base", + description: "A deep dive into the Minima protocol and its architecture", + link: "/docs/learn", + icon: ( + + + + ), + }, + { + title: "Tokenomics", + description: + "Understand Minima's token allocation and distribution schedule", + link: "/docs/core/tokenomics", + icon: ( + + + + + + + + + ), + }, + ] + return ( +
+ {features.map((feature, index) => ( + + ))} +
+ ) +} + +const FeatureCards = ({ + title, + description, + icon, + index, + link, +}: { + title: string + description: string + icon: React.ReactNode + index: number + link: string +}) => { + return ( + + {index < 4 && ( +
+ )} + {index >= 4 && ( +
+ )} +
+ {icon} +
+
+
+ + {title} + +
+

+ {description} +

+ + ) +} + +export default Home diff --git a/__minidapp/Home/sparkles.tsx b/__minidapp/Home/sparkles.tsx new file mode 100644 index 0000000..503b50a --- /dev/null +++ b/__minidapp/Home/sparkles.tsx @@ -0,0 +1,437 @@ +"use client" +import React, { useId, useMemo } from "react" +import { useEffect, useState } from "react" +import Particles, { initParticlesEngine } from "@tsparticles/react" +import type { Container, SingleOrMultiple } from "@tsparticles/engine" +import { loadSlim } from "@tsparticles/slim" +import { cn } from "@/app/lib/utils" +import { motion, useAnimation } from "framer-motion" +import useTheme from "../hooks/useTheme" + +type ParticlesProps = { + id?: string + className?: string + background?: string + particleSize?: number + minSize?: number + maxSize?: number + speed?: number + particleColor?: string + particleDensity?: number +} +export const SparklesCore = (props: ParticlesProps) => { + const { + id, + className, + background, + minSize, + maxSize, + speed, + particleColor, + particleDensity, + } = props + const [init, setInit] = useState(false) + useEffect(() => { + initParticlesEngine(async (engine) => { + await loadSlim(engine) + }).then(() => { + setInit(true) + }) + }, []) + const controls = useAnimation() + + const { getTheme } = useTheme() + + const particlesLoaded = async (container?: Container) => { + if (container) { + controls.start({ + opacity: 1, + transition: { + duration: 1, + }, + }) + } + } + + const generatedId = useId() + return ( + + {init && ( + | undefined, + }, + groups: {}, + move: { + angle: { + offset: 0, + value: 90, + }, + attract: { + distance: 200, + enable: false, + rotate: { + x: 3000, + y: 3000, + }, + }, + center: { + x: 50, + y: 50, + mode: "percent", + radius: 0, + }, + decay: 0, + distance: {}, + direction: "none", + drift: 0, + enable: true, + gravity: { + acceleration: 9.81, + enable: false, + inverse: false, + maxSpeed: 50, + }, + path: { + clamp: true, + delay: { + value: 0, + }, + enable: false, + options: {}, + }, + outModes: { + default: "out", + }, + random: false, + size: false, + speed: { + min: 0.1, + max: 1, + }, + spin: { + acceleration: 0, + enable: false, + }, + straight: false, + trail: { + enable: false, + length: 10, + fill: {}, + }, + vibrate: false, + warp: false, + }, + number: { + density: { + enable: true, + width: 400, + height: 400, + }, + limit: { + mode: "delete", + value: 0, + }, + value: particleDensity || 120, + }, + opacity: { + value: { + min: 0.1, + max: 1, + }, + animation: { + count: 0, + enable: true, + speed: speed || 4, + decay: 0, + delay: 0, + sync: false, + mode: "auto", + startValue: "random", + destroy: "none", + }, + }, + reduceDuplicates: false, + shadow: { + blur: 0, + color: { + value: "#000", + }, + enable: false, + offset: { + x: 0, + y: 0, + }, + }, + shape: { + close: true, + fill: true, + options: {}, + type: "circle", + }, + size: { + value: { + min: minSize || 1, + max: maxSize || 3, + }, + animation: { + count: 0, + enable: false, + speed: 5, + decay: 0, + delay: 0, + sync: false, + mode: "auto", + startValue: "random", + destroy: "none", + }, + }, + stroke: { + width: 0, + }, + zIndex: { + value: 0, + opacityRate: 1, + sizeRate: 1, + velocityRate: 1, + }, + destroy: { + bounds: {}, + mode: "none", + split: { + count: 1, + factor: { + value: 3, + }, + rate: { + value: { + min: 4, + max: 9, + }, + }, + sizeOffset: true, + }, + }, + roll: { + darken: { + enable: false, + value: 0, + }, + enable: false, + enlighten: { + enable: false, + value: 0, + }, + mode: "vertical", + speed: 25, + }, + tilt: { + value: 0, + animation: { + enable: false, + speed: 0, + decay: 0, + sync: false, + }, + direction: "clockwise", + enable: false, + }, + twinkle: { + lines: { + enable: false, + frequency: 0.05, + opacity: 1, + }, + particles: { + enable: false, + frequency: 0.05, + opacity: 1, + }, + }, + wobble: { + distance: 5, + enable: false, + speed: { + angle: 50, + move: 10, + }, + }, + life: { + count: 0, + delay: { + value: 0, + sync: false, + }, + duration: { + value: 0, + sync: false, + }, + }, + rotate: { + value: 0, + animation: { + enable: false, + speed: 0, + decay: 0, + sync: false, + }, + direction: "clockwise", + path: false, + }, + orbit: { + animation: { + count: 0, + enable: false, + speed: 1, + decay: 0, + delay: 0, + sync: false, + }, + enable: false, + opacity: 1, + rotation: { + value: 45, + }, + width: 1, + }, + links: { + blink: false, + color: { + value: "#fff", + }, + consent: false, + distance: 100, + enable: false, + frequency: 1, + opacity: 1, + shadow: { + blur: 5, + color: { + value: "#000", + }, + enable: false, + }, + triangles: { + enable: false, + frequency: 1, + }, + width: 1, + warp: false, + }, + repulse: { + value: 0, + enabled: false, + distance: 1, + duration: 1, + factor: 1, + speed: 1, + }, + }, + detectRetina: true, + }} + /> + )} + + ) +} diff --git a/__minidapp/Home/title-bar.tsx b/__minidapp/Home/title-bar.tsx new file mode 100644 index 0000000..cdb3629 --- /dev/null +++ b/__minidapp/Home/title-bar.tsx @@ -0,0 +1,60 @@ +import * as React from "react" +import useAndroidShowTitleBar from "../hooks/use-android" + +const TitleBar = () => { + const { openTitleBar, isMinimaBrowser } = useAndroidShowTitleBar() + + const goHome = (e: React.MouseEvent) => { + e.stopPropagation() + window.location.assign("/") + } + + if (!isMinimaBrowser) { + return null + } + + return ( +
+
+
+
+ + + + + + + + + +
+ Docs +
+
+
+
+ ) +} + +export default TitleBar diff --git a/__minidapp/Page/index.tsx b/__minidapp/Page/index.tsx new file mode 100644 index 0000000..0a2ae3d --- /dev/null +++ b/__minidapp/Page/index.tsx @@ -0,0 +1,61 @@ +"use client" +import { MDXProvider } from "@mdx-js/react" +import { useLocation } from "react-router-dom" +import {PropsWithChildren, useEffect} from "react" +import { useMDXComponents } from "@/mdx-components" +import { Link } from "react-router-dom"; + +export default function Page() { + const { pathname, hash } = useLocation() + + useEffect(() => { + if (hash) { + const elem = document.getElementById(hash.substring(1)) + + setTimeout(() => { + if (elem) { + elem.scrollIntoView() + } + }, 200) + } + }, [hash]) + + // we remove the starting slash + let correctedPathname = pathname.slice(1, pathname.length) + + let MDX + + try { + MDX = require(`../../content/${correctedPathname}.mdx`) + } catch { + if (!MDX) { + MDX = require(`../../content/${correctedPathname}/index.mdx`) + } + } + + if (!MDX) { + return null + } + + const components = useMDXComponents({}) + + return ( +
+ +

{MDX.frontmatter.title}

+ ) => { + return ( + + {props.children} + + ) + } + }} + /> +
+
+ ) +} diff --git a/__minidapp/Page/layout.tsx b/__minidapp/Page/layout.tsx new file mode 100644 index 0000000..6ecf355 --- /dev/null +++ b/__minidapp/Page/layout.tsx @@ -0,0 +1,752 @@ +"use client" +import { Link, useLocation } from "react-router-dom" +import { Fragment, useEffect, useState } from "react" +import useTheme from "@/__minidapp/hooks/useTheme" +import useTitle from "@/__minidapp/hooks/useTitle" +import { MENU, SECTION_MENU } from "@/__minidapp/constants" +import TitleBar from "../Home/title-bar" + +const Layout: React.FC = ({ children }) => { + useTitle() + const location = useLocation() + const [kebabOpen, setKebabOpen] = useState(false) + const [sectionMenuOpen, setSectionMenuOpen] = useState(false) + const [mobileSidebarOpen, setMobileSidebarOpen] = useState(false) + const { toggleTheme } = useTheme() + const ACTIVE: keyof typeof MENU = location.pathname + .split("/") + .at(2)! + .replaceAll("-", "_") + .toUpperCase() + + const activeMenu = MENU[ACTIVE] + const activeSubMenu = SECTION_MENU.find((i) => i.key === ACTIVE) + + useEffect(() => { + window.scrollTo({ + top: 0, + behavior: "instant", + }) + }, [location.pathname]) + + return ( + <> + +
+ + + + + + + + + + + + + + + + + {/* Mobile Search Button */} + + + {/* Nav Button */} + +
+
+ +
+ {/* Mobile nav */} +
+ +
+
+
{children}
+
+
+ + {/* On-this-page */} +
+

+ + + + + + On this page +

+ + + + + + + Edit on GitHub + +
+
+ + ) +} + +export default Layout diff --git a/__minidapp/constants.tsx b/__minidapp/constants.tsx new file mode 100644 index 0000000..e86e516 --- /dev/null +++ b/__minidapp/constants.tsx @@ -0,0 +1,971 @@ +import { ReactNode } from "react" + +/** + * Probably can create a script that generates this file that uses the meta.json files in the content + * folder but for now, using static data... + */ + +type Menu = Record< + string, + { + title: string + parentClass?: string + skip?: boolean + href?: string + icon?: ReactNode + children?: { + title: string + icon?: ReactNode + href: string + external?: boolean + }[] + }[] +> + +export const SECTION_MENU = [ + { + icon: ( + + + + + + + + + + + + + ), + key: "CORE", + title: "Introduction", + description: "Introduction to Minima", + href: "/docs/core", + }, + { + icon: ( + + + + + ), + key: "RUN_A_NODE", + title: "Run a Node", + description: "Run a Minima Node", + href: "/docs/run-a-node", + }, + { + icon: ( + + + + + ), + key: "USER_GUIDES", + title: "User Guides", + description: "How to use Minima", + href: "/docs/user-guides", + }, + { + icon: ( + + + + + + ), + key: "LEARN", + title: "Knowledge Base", + description: "Learn how Minima works", + href: "/docs/learn", + }, + { + icon: ( + + + + + + + + + ), + key: "DEVELOPMENT", + title: "Developer Tutorials", + description: "Develop on Minima", + href: "/docs/development", + }, +] + +export const MENU: Menu = { + CORE: [ + { + title: "Minima", + children: [ + { + title: "About Minima", + href: "/docs/core", + }, + { + title: "Get Involved", + href: "/docs/core/get-involved", + }, + { + title: "Use Cases", + href: "/docs/core/use-cases", + }, + { + title: "Tokenomics", + href: "/docs/core/tokenomics", + }, + ], + }, + { + title: "Terms of Use", + children: [ + { + title: "MiniDapp Terms of Use", + href: "/docs/core/minidapp-terms", + }, + { + title: "Website Terms of Use", + href: "/docs/core/website-terms", + }, + { + title: "Minima Privacy Policy", + href: "/docs/core/minima-privacy-policy", + }, + { + title: "Presale Privacy Policy", + href: "/docs/core/presale", + }, + ], + }, + { + title: "Whitepaper", + children: [ + { + title: "Minima Whitepaper", + href: " https://docs.minima.global/minima_pdfs/Minima_Whitepaper_v11.pdf", + external: true, + }, + ], + }, + ], + RUN_A_NODE: [ + { + title: "Top", + skip: true, + parentClass: "run-a-node", + children: [ + { + title: "Quick Start", + href: "/docs/run-a-node", + icon: ( + + + + ), + }, + { + title: "System Requirements", + href: "/docs/run-a-node/system-requirements", + icon: ( + + + + + + + + ), + }, + ], + }, + { + title: "Select your Platform", + parentClass: "run-a-node", + children: [ + { + title: "Android", + href: "/docs/run-a-node/android", + }, + { + title: "Windows", + href: "/docs/run-a-node/windows", + }, + { + title: "Mac", + href: "/docs/run-a-node/mac", + }, + { + title: "Docker Desktop", + href: "/docs/run-a-node/docker-desktop", + }, + { + title: "Linux VPS (Docker)", + href: "/docs/run-a-node/linux-vps", + }, + { + title: "Linux VPS (Systemd service)", + href: "/docs/run-a-node/linux-vps-system", + }, + { + title: "Desktop Command Line", + href: "/docs/run-a-node/desktop-cli", + }, + ], + }, + { + title: "Archive Node", + parentClass: "run-a-node", + children: [ + { + title: "Run an Archive Node", + href: "/docs/run-a-node/archive-node", + }, + ], + }, + { + title: "Mega Node (NEW)", + parentClass: "run-a-node", + children: [ + { + title: "Run a Mega Node", + href: "/docs/run-a-node/mega-node", + }, + { + title: "Host a Public Wallet", + href: "/docs/run-a-node/public-wallet", + }, + ], + }, + ], + USER_GUIDES: [ + { + title: "Guides", + parentClass: "user-guides", + children: [ + { + icon: ( + + + + + ), + title: "Login to Minima", + href: "/docs/user-guides", + }, + { + icon: ( + + + + + + + + ), + title: "Join the network", + href: "/docs/user-guides/jointhenetwork", + }, + { + icon: ( + + + + + ), + title: "Secure your seedphrase", + href: "/docs/user-guides/secure-your-seedphrase", + }, + ], + }, + { + title: "General", + parentClass: "user-guides", + children: [ + { + title: "Check your node status", + href: "/docs/user-guides/check-node-status", + }, + { + title: "Set your profile", + href: "/docs/user-guides/set-your-profile", + }, + ], + }, + { + title: "Security", + parentClass: "user-guides", + children: [ + { + title: "Lock your wallet", + href: "/docs/user-guides/lock-your-wallet", + }, + { + title: "Backup your wallet", + href: "/docs/user-guides/backup-your-wallet", + }, + ], + }, + { + title: "MiniDapp System", + parentClass: "user-guides", + children: [ + { + title: "MiniDapp Permissions", + href: "/docs/user-guides/minidapp-permissions", + }, + { + title: "Approve Transactions", + href: "/docs/user-guides/approve-transactions", + }, + { + title: "Managing MiniDapps", + href: "/docs/user-guides/manage-minidapps", + }, + ], + }, + { + title: "Maxima", + parentClass: "user-guides", + children: [ + { + title: "Manage Maxima contacts", + href: "/docs/user-guides/maxima-contacts", + }, + { + title: "Advanced Maxima Options", + href: "/docs/user-guides/advanced-maxima-options", + }, + ], + }, + { + title: "Node Recovery", + parentClass: "user-guides", + children: [ + { + title: "Recover Options", + href: "/docs/user-guides/node-recovery/recover-options", + }, + { + title: "Chain Resync", + href: "/docs/user-guides/node-recovery/chain-resync", + }, + { + title: "Restoring your backup", + href: "/docs/user-guides/node-recovery/restore-backup", + }, + { + title: "Import your seed phrase", + href: "/docs/user-guides/node-recovery/import-seed-phrase", + }, + ], + }, + { + title: "Archive Node", + parentClass: "user-guides", + children: [ + { + title: "Archive File Export", + href: "/docs/user-guides/manage-archive-node/archive-export", + }, + { + title: "Exporting to MySQL", + href: "/docs/user-guides/manage-archive-node/archive-export-sql", + }, + ], + }, + { + title: "Advanced", + parentClass: "user-guides", + children: [ + { + title: "Cold Storage setup", + href: "/docs/user-guides/advanced/cold-storage", + }, + { + title: "Log messages", + href: "/docs/user-guides/advanced/log-messages", + }, + ], + }, + ], + LEARN: [ + { + title: "Top", + skip: true, + parentClass: "learn", + children: [ + { + title: "Core Concepts", + href: "/docs/learn", + icon: ( + + + + + ), + }, + { + title: "Network Overview", + href: "/docs/learn/network", + icon: ( + + + + + + ), + }, + { + title: "Glossary", + href: "/docs/learn/glossary", + icon: ( + + + + ), + }, + ], + }, + { + title: "Minima", + parentClass: "learn", + children: [ + { + title: "Transactions", + href: "/docs/learn/transactions", + }, + { + title: "MMR Database", + href: "/docs/learn/mmr-database", + }, + { + title: "TxPoW Units & Blocks", + href: "/docs/learn/txpow", + }, + { + title: "The Blockchain", + href: "/docs/learn/the-blockchain", + }, + { + title: "Mining and Consensus", + href: "/docs/learn/miningandconsensus", + }, + { + title: "Coloured Coins", + href: "/docs/learn/coloured-coins", + }, + { + title: "Keys and Signatures", + href: "/docs/learn/keysandsignatures", + }, + { + title: "Scripting", + href: "/docs/learn/scripting", + }, + { + title: "Quantum Security", + href: "/docs/learn/quantumsecurity", + }, + { + title: "Archive Nodes", + href: "/docs/learn/archivenodes", + }, + ], + }, + { + title: "Maxima", + parentClass: "learn", + children: [ + { + title: "About", + href: "/docs/learn/about-maxima", + }, + { + title: "Contacts", + href: "/docs/learn/maxima-contacts", + }, + { + title: "Messaging", + href: "/docs/learn/maxima-messaging", + }, + { + title: "Location Service", + href: "/docs/learn/maxima-mls", + }, + { + title: "FAQ", + href: "/docs/learn/maxima-faq", + }, + ], + }, + { + title: "MiniDapps", + parentClass: "learn", + children: [ + { + title: "About", + href: "/docs/learn/about-minidapps", + }, + { + title: "MiniDapp Structure", + href: "/docs/learn/minidapp-structure", + }, + { + title: "Config File", + href: "/docs/learn/minidapp-configfile", + }, + { + title: "mds.js library", + href: "/docs/learn/minidapp-mds", + }, + { + title: "Events", + href: "/docs/learn/minidapp-events", + }, + { + title: "MiniBrowser", + href: "/docs/learn/mini-browser", + }, + { + title: "service.js", + href: "/docs/learn/service-js", + }, + ], + }, + { + title: "Smart Contracts", + parentClass: "learn", + children: [ + { + title: "Transaction Basics", + href: "/docs/learn/contract-basics", + }, + { + title: "KISS VM", + href: "/docs/learn/contract-kissvm", + }, + { + title: "Scripting Basics", + href: "/docs/learn/contract-scripting", + }, + { + title: "Token/NFT scripts", + href: "/docs/learn/contract-tokenscript", + }, + ], + }, + ], + DEVELOPMENT: [ + { + title: "Get Started", + parentClass: "development", + children: [ + { + icon: ( + + + + + ), + title: "Introduction", + href: "/docs/development", + }, + { + icon: ( + + + + + + + ), + title: "Single Node Testnet", + href: "/docs/development/start-testnet", + }, + { + icon: ( + + + + + + + + ), + title: "Multiple Node Testnet", + href: "/docs/development/testnet-multiple", + }, + { + icon: ( + + + + + ), + title: "Terminal Commands", + href: "/docs/development/terminal-commands", + }, + ], + }, + { + title: "MiniDapp Tutorials", + parentClass: "development", + children: [ + { + title: "MiniDapp Hub", + href: "/docs/development/start", + }, + { + title: "Basic MiniDapp", + href: "/docs/development/basic-minidapp", + }, + { + title: "Interactive MiniDapp", + href: "/docs/development/interactive-minidapp", + }, + { + title: "React MiniDapp", + href: "/docs/development/react-minidapp", + }, + { + title: "MiniDapp Stores", + href: "/docs/development/minidapp-stores", + }, + ], + }, + + { + title: "Smart Contract Tutorials", + parentClass: "development", + children: [ + { + title: "Pruning", + href: "/docs/development/pruning", + }, + { + title: "Tokens", + href: "/docs/development/tokens", + }, + ], + }, + + { + title: "Layer 1 - On Chain", + parentClass: "development", + children: [ + { + title: "Basic signed contract", + href: "/docs/development/layer1/basic-contract", + }, + { + title: "Simple Transaction", + href: "/docs/development/layer1/simple-txn", + }, + { + title: "Time Lock Contract", + href: "/docs/development/layer1/time-lock-contract", + }, + { + title: "Multisig Contract", + href: "/docs/development/layer1/multisig", + }, + { + title: "M of N Multisig", + href: "/docs/development/layer1/mofnmultisig", + }, + { + title: "The Vault", + href: "/docs/development/layer1/thevault", + }, + { + title: "Slow Cash", + href: "/docs/development/layer1/slowcash", + }, + { + title: "Hashed Timelock Contract", + href: "/docs/development/layer1/hashed-timelock-contract", + }, + { + title: "Exchange Contract", + href: "/docs/development/layer1/exchange-contract", + }, + { + title: "Flash Cash", + href: "/docs/development/layer1/flashcash", + }, + { + title: "MAST Contracts", + href: "/docs/development/layer1/mast-contract", + }, + { + title: "Coin Flip", + href: "/docs/development/layer1/coinflip", + }, + ], + }, + { + title: "Layer 2 - Off Chain", + parentClass: "development", + children: [ + { + title: "Uni-directional Channel", + href: "/docs/development/layer2/uni-directional-channel", + }, + { + title: "Bi-directional Payments", + href: "/docs/development/layer2/bi-directional-payments", + }, + { + title: "ELTOO Channel", + href: "/docs/development/layer2/eltoo-channel", + }, + { + title: "ELTOO Pre-Coin Txn", + href: "/docs/development/layer2/eltoo-precoin", + }, + { + title: "ELTOO Floating Coin", + href: "/docs/development/layer2/eltoo-floating-coin", + }, + { + title: "Full ELTOO Sequence", + href: "/docs/development/layer2/eltoo-full-sequence", + }, + { + title: "State Chains", + href: "/docs/development/layer2/state-chains", + }, + { + title: "Coin flip V2", + href: "/docs/development/layer2/coinflipv2", + }, + ], + }, + { + title: "Smart Contract Examples", + parentClass: "development", + children: [ + { + title: "Future Cash", + href: "/docs/development/future-cash", + }, + { + title: "Vestr", + href: "/docs/development/vestr", + }, + ], + }, + ], +} diff --git a/__minidapp/hooks/use-android.ts b/__minidapp/hooks/use-android.ts new file mode 100644 index 0000000..f27df30 --- /dev/null +++ b/__minidapp/hooks/use-android.ts @@ -0,0 +1,20 @@ +import { useEffect, useState } from "react" + +export const useAndroidShowTitleBar = () => { + const [isMinimaBrowser, setIsMinimaBrowser] = useState(false) + + const openTitleBar = () => { + if (!isMinimaBrowser) return + window.Android.showTitleBar() + } + + useEffect(() => { + if (window.navigator.userAgent.includes("Minima Browser")) { + setIsMinimaBrowser(true) + } + }, []) + + return { openTitleBar, isMinimaBrowser } +} + +export default useAndroidShowTitleBar diff --git a/__minidapp/hooks/useTheme.ts b/__minidapp/hooks/useTheme.ts new file mode 100644 index 0000000..769662f --- /dev/null +++ b/__minidapp/hooks/useTheme.ts @@ -0,0 +1,48 @@ +import { useEffect, useRef } from "react" + +function useTheme() { + const hasLoaded = useRef(false) + + useEffect(() => { + if (!hasLoaded.current) { + hasLoaded.current = true + + setTimeout(() => { + const preferredTheme = window.localStorage.getItem("mode") + + if (preferredTheme === "light") { + document.documentElement.classList.remove("dark") + document.documentElement.classList.add("light") + } + }, 10) + } + }, []) + + // could be moved, copy and pasting right now... + const toggleTheme = () => { + const isDarkMode = document.documentElement.classList.contains("dark") + + if (isDarkMode) { + document.documentElement.classList.remove("dark") + document.documentElement.classList.add("light") + window.localStorage.setItem("mode", "light") + } else { + document.documentElement.classList.remove("light") + document.documentElement.classList.add("dark") + window.localStorage.setItem("mode", "dark") + } + } + + const getTheme = () => { + return document.documentElement.classList.contains("dark") + ? "dark" + : "light" + } + + return { + toggleTheme, + getTheme, + } +} + +export default useTheme diff --git a/__minidapp/hooks/useTitle.ts b/__minidapp/hooks/useTitle.ts new file mode 100644 index 0000000..244a4d8 --- /dev/null +++ b/__minidapp/hooks/useTitle.ts @@ -0,0 +1,15 @@ +import { useEffect, useRef } from "react"; + +function useTitle() { + const hasLoaded = useRef(false); + + useEffect(() => { + if (!hasLoaded.current) { + hasLoaded.current = true; + + document.title = "Minima Docs"; + } + }, []) +} + +export default useTitle; diff --git a/__minidapp/index.tsx b/__minidapp/index.tsx new file mode 100644 index 0000000..76620a2 --- /dev/null +++ b/__minidapp/index.tsx @@ -0,0 +1,54 @@ +"use client" +import "./minidapp.css" +import React from "react" +import { HashRouter, MemoryRouter, Route, Routes } from "react-router-dom" +import { default as Home } from "@/__minidapp/Home" +import { default as PageLayout } from "@/__minidapp/Page/layout" +import Page from "@/__minidapp/Page" + +class ErrorBoundary extends React.Component< + React.PropsWithChildren, + { hasError: boolean } +> { + constructor(props: React.PropsWithChildren) { + super(props) + this.state = { hasError: false } + } + + static getDerivedStateFromError() { + return { hasError: true } + } + + render() { + if (this.state.hasError) { + return ( +
+

Something went wrong.

+ Click here to go home +
+ ) + } + + return this.props.children + } +} + +export default function MiniDappIndex() { + return ( + + + + } /> + + + + } + /> + + + + ) +} diff --git a/__minidapp/minidapp.css b/__minidapp/minidapp.css new file mode 100644 index 0000000..aeb6b42 --- /dev/null +++ b/__minidapp/minidapp.css @@ -0,0 +1,56 @@ +/** + * shade for nav since we don't use radix for scrollbar + */ +.nav-shade { + position: absolute; + top: 0; + width: 100%; + background: linear-gradient(0, transparent, black); + height: 40px; + display: inline-block; + z-index: 100; +} + +/** + * Custom scrollbar for Minidapp + */ + +/* width */ +.custom-scrollbar::-webkit-scrollbar { + width: 8px; +} + +/* Track */ +.dark .custom-scrollbar::-webkit-scrollbar-track { + background: #000000; + margin-right: 2px; + border-right: 2px solid black; +} + +/* Handle */ +.custom-scrollbar::-webkit-scrollbar-thumb { + background: #aeaeae; + border-radius: 5px; + position: relative; + z-index: 100; + width: 8px; + border-right: 3px solid #ffffff; +} + +.dark .custom-scrollbar::-webkit-scrollbar-thumb { + background: #1c1c1c; + border-radius: 5px; + position: relative; + z-index: 100; + width: 8px; + border-right: 2px solid black; +} + +/* Handle on hover */ +.custom-scrollbar::-webkit-scrollbar-thumb:hover { + background: #616161; +} + +.dark .custom-scrollbar::-webkit-scrollbar-thumb:hover { + background: #272727; +} diff --git a/app/favicon.ico b/app/favicon.ico new file mode 100644 index 0000000..bafdde6 Binary files /dev/null and b/app/favicon.ico differ diff --git a/app/layout.config.tsx b/app/layout.config.tsx index 784860e..f6c7c45 100644 --- a/app/layout.config.tsx +++ b/app/layout.config.tsx @@ -12,14 +12,12 @@ export const baseOptions: HomeLayoutProps = { nav: { url: "/", title: ( - - - + ), transparentMode: "top", children: , @@ -30,6 +28,7 @@ export const baseOptions: HomeLayoutProps = { export const docsOptions: DocsLayoutProps = { ...baseOptions, tree: pageTree, + sidebar: { collapsible: false, banner: ( diff --git a/app/layout.tsx b/app/layout.tsx index aeecdbf..b8b8433 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,21 +1,14 @@ import { Body } from "@/app/layout.client" import type { ReactNode } from "react" -import { Provider } from "@/components/provider" import "./global.css" +import MiniDappIndex from "__minidapp" export default function Layout({ children }: { children: ReactNode }) { return ( - - {/** - * - Minima Docs v2 is here! 🎉 - - */} - {children} - + ) diff --git a/app/source.ts b/app/source.ts index 2c46cb8..6ea9a30 100644 --- a/app/source.ts +++ b/app/source.ts @@ -4,14 +4,12 @@ import { loader } from "fumadocs-core/source" import { createMDXSource, defaultSchemas } from "fumadocs-mdx" import { icons } from "lucide-react" import { z } from "zod" - +import { writeFileSync } from "fs" const frontmatter = defaultSchemas.frontmatter.extend({ tag: z.string(), }) - - export const { getPage, getPages, pageTree } = loader({ baseUrl: "/docs", rootDir: "docs", @@ -19,10 +17,12 @@ export const { getPage, getPages, pageTree } = loader({ schema: { frontmatter, }, - }), + }), icon(icon) { - if (icon && icon in icons) return Icon({ icon: icons[icon as keyof typeof icons] }) }, }) + +const output = JSON.stringify(pageTree, null, 2) +writeFileSync("tree.json", output) diff --git a/bun.lockb b/bun.lockb index 75ec4ee..d7d27be 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/components/provider.tsx b/components/provider.tsx index ad09e87..3b781e7 100644 --- a/components/provider.tsx +++ b/components/provider.tsx @@ -1,19 +1,11 @@ "use client" import { RootProvider } from "fumadocs-ui/provider" -import dynamic from "next/dynamic" import { ReactNode } from "react" - export function Provider({ children, }: { children: ReactNode }): React.ReactElement { - return ( - - {children} - - ) + return {children} } diff --git a/components/sparkles.tsx b/components/sparkles.tsx index 9970da6..8aa5746 100644 --- a/components/sparkles.tsx +++ b/components/sparkles.tsx @@ -1,24 +1,24 @@ -"use client"; -import React, { useId, useMemo } from "react"; -import { useEffect, useState } from "react"; -import Particles, { initParticlesEngine } from "@tsparticles/react"; -import type { Container, SingleOrMultiple } from "@tsparticles/engine"; -import { loadSlim } from "@tsparticles/slim"; -import { cn } from "@/app/lib/utils"; -import { motion, useAnimation } from "framer-motion"; -import { useTheme } from "next-themes"; +"use client" +import React, { useId, useMemo } from "react" +import { useEffect, useState } from "react" +import Particles, { initParticlesEngine } from "@tsparticles/react" +import type { Container, SingleOrMultiple } from "@tsparticles/engine" +import { loadSlim } from "@tsparticles/slim" +import { cn } from "@/app/lib/utils" +import { motion, useAnimation } from "framer-motion" +import { useTheme } from "next-themes" type ParticlesProps = { - id?: string; - className?: string; - background?: string; - particleSize?: number; - minSize?: number; - maxSize?: number; - speed?: number; - particleColor?: string; - particleDensity?: number; -}; + id?: string + className?: string + background?: string + particleSize?: number + minSize?: number + maxSize?: number + speed?: number + particleColor?: string + particleDensity?: number +} export const SparklesCore = (props: ParticlesProps) => { const { id, @@ -29,32 +29,32 @@ export const SparklesCore = (props: ParticlesProps) => { speed, particleColor, particleDensity, - } = props; - const [init, setInit] = useState(false); + } = props + const [init, setInit] = useState(false) useEffect(() => { initParticlesEngine(async (engine) => { - await loadSlim(engine); + await loadSlim(engine) }).then(() => { - setInit(true); - }); - }, []); - const controls = useAnimation(); + setInit(true) + }) + }, []) + const controls = useAnimation() const { resolvedTheme } = useTheme() const particlesLoaded = async (container?: Container) => { if (container) { - console.log(container); + console.log(container) controls.start({ opacity: 1, transition: { duration: 1, }, - }); + }) } - }; + } - const generatedId = useId(); + const generatedId = useId() return ( {init && ( @@ -434,5 +434,5 @@ export const SparklesCore = (props: ParticlesProps) => { /> )} - ); -}; + ) +} diff --git a/components/theme-aware-svg.tsx b/components/theme-aware-svg.tsx index 9543bb2..c80d4b0 100644 --- a/components/theme-aware-svg.tsx +++ b/components/theme-aware-svg.tsx @@ -1,6 +1,7 @@ "use client" +import useTheme from "@/__minidapp/hooks/useTheme" import { ImageZoom } from "fumadocs-ui/components/image-zoom" -import { useTheme } from "next-themes" + interface ThemeAwareSVGProps { src: string alt: string @@ -9,13 +10,15 @@ interface ThemeAwareSVGProps { } export function ThemeAwareSVG({ src, alt, width, height }: ThemeAwareSVGProps) { - const { resolvedTheme } = useTheme() + const { getTheme } = useTheme() const themeAwareSrc = src.replace( "Lm.svg", - resolvedTheme === "dark" ? "Dm.svg" : "Lm.svg" + getTheme() === "light" ? "Lm.svg" : "Dm.svg" ) + console.log("themeAwareSrc", themeAwareSrc) + return ( ) diff --git a/content/docs/core/index.mdx b/content/docs/core/index.mdx index 3846201..ceef85a 100644 --- a/content/docs/core/index.mdx +++ b/content/docs/core/index.mdx @@ -11,11 +11,10 @@ Minima is more than a blockchain - it is the bridge between the problems of the width={800} height={800} alt="Minima node - browser interface" - src="/mdshub_old.png" + src="/img/runanode/mds_hub.jpg" /> - ## What is Minima? Minima is a layer 1 blockchain focused on providing everyday solutions on everyday devices. diff --git a/content/docs/development/basic-minidapp.mdx b/content/docs/development/basic-minidapp.mdx index 79d984d..e1faef6 100644 --- a/content/docs/development/basic-minidapp.mdx +++ b/content/docs/development/basic-minidapp.mdx @@ -46,7 +46,7 @@ Your folder should now contain 2 files Your config file and icon used will determine what is visible when your MiniDapp is loaded into the MiniDapp Hub, as shown below. -![Accessing the MiniDapp Hub](/img/runanode/mds_pendingicon.png) +![Accessing the MiniDapp Hub](/img/runanode/mds_pendingicon.jpg) ## Basic interface for your MiniDapp @@ -108,7 +108,7 @@ We now have a complete helloworld folder containing: Zip up the contents of this folder (not the folder itself) -![Accessing the MiniDapp Hub](/img/buildonminima/zipup.png) +![Accessing the MiniDapp Hub](/img/buildonminima/zipup.jpg) Name the folder as `helloworld.mds.zip` or if you are using a zip library through your cli run `zip -r helloworld.mds.zip`. diff --git a/content/docs/development/minidapp-stores.mdx b/content/docs/development/minidapp-stores.mdx index 6027838..f1cb9fa 100644 --- a/content/docs/development/minidapp-stores.mdx +++ b/content/docs/development/minidapp-stores.mdx @@ -48,59 +48,59 @@ Your `.json` file can be hosted on a server, this could even be a Raspberry Pi w { "name":"Minima Global", "description":"Official Minima DAPPs", - "icon":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/minima_logo.png", + "icon":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/minima_logo.jpg", "version":"1.0", "dapps":[ { "name":"Minima Global", "description":"Official Minima DAPPs", -"icon":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/minima_logo.png", +"icon":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/minima_logo.jpg", "version":"1.0", "dapps":[ { -"file":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/files/news-1.0.mds.zip", "icon":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/icons/news.png", +"file":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/files/news-1.0.mds.zip", "icon":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/icons/news.jpg", "name":"News Feed", "description": "Keep up to date with Minima News", "version" : "1.0" }, { "file":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/files/block-0.1.5.mds.zip", -"icon":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/icons/block.png", +"icon":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/icons/block.jpg", "name":"Block", "description": "Explore the Minima blockchain", "version" : "0.1.5" }, { "file":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/files/wallet-0.1.5.mds.zip", -"icon":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/icons/wallet.png", +"icon":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/icons/wallet.jpg", "name":"Wallet", "description": "Official Minima wallet", "version" : "0.1.5" }, { "file":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/files/terminal-1.91.mds.zip", -"icon":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/icons/terminal.png", +"icon":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/icons/terminal.jpg", "name":"Terminal", "description": "Terminal CLI for Minima", "version" : "1.91" }, { -"file":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/files/helpdocs-0.1.1.mds.zip", "icon":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/icons/helpdocs.png", +"file":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/files/helpdocs-0.1.1.mds.zip", "icon":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/icons/helpdocs.jpg", "name":"Help Docs", "description": "Help Docs", "version" : "0.1.1" }, { -"file":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/files/maxsolo-1.83.mds.zip", "icon":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/icons/maxsolo.png", +"file":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/files/maxsolo-1.83.mds.zip", "icon":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/icons/maxsolo.jpg", "name":"MaxSolo", "description": "P2P chat app running over Maxima", "version" : "1.83" }, { -"file":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/files/scriptide-1.7.mds.zip", "icon":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/icons/scriptide.png", +"file":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/files/scriptide-1.7.mds.zip", "icon":"https://raw.githubusercontent.com/minima-global/Minima/dev-spartacus/mds/store/icons/scriptide.jpg", "name":"Script IDE", "description": "Minima Script IDE", "version" : "1.7" diff --git a/content/docs/development/react-minidapp.mdx b/content/docs/development/react-minidapp.mdx index 66a3063..7114188 100644 --- a/content/docs/development/react-minidapp.mdx +++ b/content/docs/development/react-minidapp.mdx @@ -132,7 +132,7 @@ We need to add `import Balance from './Balance';` and `` in the retur ```jsx title="App.jsx" import React, { useEffect } from "react" -import minimaLogo from "./minima_logo.png" +import minimaLogo from "./minima_logo.jpg" import "./App.css" import Balance from "./Balance" diff --git a/content/docs/development/start-testnet.mdx b/content/docs/development/start-testnet.mdx index 14d9611..c8fb854 100644 --- a/content/docs/development/start-testnet.mdx +++ b/content/docs/development/start-testnet.mdx @@ -29,7 +29,7 @@ This will start a node on the default ports of 9001-5. You should see the node starting as below, if you type `help` then press enter, you should see the full list of Minima commands. Check your balance with `balance`. -![MDS](/img/buildonminima/TestTerminalstartup.png) +![MDS](/img/buildonminima/TestTerminalstartup.jpg) To **login to your MiniDapp hub**, open up your web browser and navigate to the MiniDapp Hub via https://127.0.0.1:9003. Login with the password you set. diff --git a/content/docs/development/start.mdx b/content/docs/development/start.mdx index b99a55e..1d6c0c1 100644 --- a/content/docs/development/start.mdx +++ b/content/docs/development/start.mdx @@ -6,7 +6,7 @@ tag: development The MiniDapp hub is where you will access all the MiniDapps you have installed on your node. -![MDS](/img/runanode/mds_hub.png) +![MDS](/img/runanode/mds_hub.jpg) To access your node's MiniDapps, the MiniDapp System (mds) must be enabled. To check whether it is enabled, run the `mds` command in the Minima Command Line Interface (CLI). diff --git a/content/docs/learn/about-minidapps.mdx b/content/docs/learn/about-minidapps.mdx index 9c564e7..c6e660e 100644 --- a/content/docs/learn/about-minidapps.mdx +++ b/content/docs/learn/about-minidapps.mdx @@ -11,7 +11,7 @@ We are excited to announce the highly anticipated release of our new MiniDapp Sy Before you get stuck in, here is an introduction to the MiniDapp System and explanation of what MiniDapps are. -![MDS](/img/runanode/mds_hub.png) +![MDS](/img/runanode/mds_hub.jpg) ## What is the MiniDapp System? The MiniDapp system is an open application ecosystem. diff --git a/content/docs/learn/index.mdx b/content/docs/learn/index.mdx index 3e22ede..2ca2171 100644 --- a/content/docs/learn/index.mdx +++ b/content/docs/learn/index.mdx @@ -5,14 +5,18 @@ icon: Album tag: learn --- - Minima uses the UTxO (Unspent Transaction Output) Model, like Bitcoin. A Transaction Output is a specific amount of Minima, identifiable through a unique ID called a Coin ID. Each Transaction Output can be considered analogous to a physical coin in that they can represent different amounts of currency and must be spent in whole. The Minima blockchain keeps track of the UTxO set on the network and who can spend them. The UTxO set circulating in the network fluctuates as users spend coins and create new ones as outputs from transactions. The sum of the value of all the UTxOs in the network will equal at most 1 billion Minima. One or more UTxOs are used as inputs into transactions and one or more new UTxOs will be created as outputs. The example below shows a transaction of 30 Minima from Bob to Alice. A UTxO worth 50 Minima is used as an input and two new UTxOs are created as outputs - one worth 30 Minima which is sent to the recipient and one of 20 Minima which is returned to the sender as change. Just like change is received when physical coins are spent. -** Insert image here ** + ## Transaction Proof-of-Work (TxPoW) diff --git a/content/docs/learn/keysandsignatures.mdx b/content/docs/learn/keysandsignatures.mdx index c4f294e..99c6d20 100644 --- a/content/docs/learn/keysandsignatures.mdx +++ b/content/docs/learn/keysandsignatures.mdx @@ -4,65 +4,71 @@ description: Learn about the Minima Keys and Signatures tag: learn --- ---- -sidebar_position: 8 ---- - -# Keys and Digital Signatures - Public-Private key pairs, combined with digital signatures, provide the mechanism required to hold coins securely and to independently prove ownership of them. Keys are held and controlled by a user’s wallet. A private key is intended to be known only to the owner of the coins, whereas the corresponding public key can be shared without risk of compromising the coins and is used to receive funds which then become secured by the associated private key. -You can think of a public key as being your bank account number and the private key as your PIN number. + You can think of a public key as being your bank account number and the + private key as your PIN number. ## Generating Public-Private Key Pairs + An essential property of Public-Private key pairs is that the private key should not be deducible from the public key. Various cryptographic algorithms are available for generating a public key from a private key, for example RSA or Elliptic Curve Cryptography. These are one-way functions which, using complex mathematics, ensure that the private key cannot be deduced from the public key. ## Digital Signature Schemes + Using a public-private key pair and a digital signature scheme, a user can digitally ‘sign’ some data e.g. a transaction, with their private key to create an unforgeable digital signature. Digital signatures are generated by applying the algorithm of the signature scheme to the private key and some data. Anyone can independently verify the validity of a signature knowing the user’s public key, the data, and the check algorithm of the digital signature scheme. Minima uses the **Winternitz One-Time Signature Scheme (WOTSS)** as its digital signature scheme which applies one algorithm for generating public keys from a private seed and another to compute a digital signature, with a given piece of data to be signed. **Winternitz is considered to be Quantum-resistant. ** -Not all Digital Signature Schemes are considered Quantum-resistant, for example RSA and Elliptic Curve Digital Signature Algorithm (ECDSA), used in Bitcoin and Ethereum. In the 90’s, Shor published a Quantum algorithm which could be used to break these schemes, rendering them vulnerable to attack from Quantum-based computers in the future. + Not all Digital Signature Schemes are considered Quantum-resistant, for + example RSA and Elliptic Curve Digital Signature Algorithm (ECDSA), used in + Bitcoin and Ethereum. In the 90’s, Shor published a Quantum algorithm which + could be used to break these schemes, rendering them vulnerable to attack from + Quantum-based computers in the future. ### Merkle Signature Scheme -The **Merkle Signature Scheme (MSS)**, originally proposed by Ralph Merkle in the 70’s, combines a Quantum-resistant, hash-based, but **one-time-use**, digital signature scheme with hash trees. + +The **Merkle Signature Scheme (MSS)**, originally proposed by Ralph Merkle in the 70’s, combines a Quantum-resistant, hash-based, but **one-time-use**, digital signature scheme with hash trees. A **one-time-use signature scheme** means that each public-private key pair can only be used once, securely, to sign some data. Reusing the same key pair for multiple signatures increases the chances of the private key being deduced. To mitigate this inconvenience, many single-use key pairs can be stored as leaf nodes in a hash tree, with the root hash of the tree used as a **multiple-use root public key.** Minima uses a Merkle Signature Scheme by combining the **Winternitz One Time Signature Scheme (WOTSS) with Merkle Mountain Range (MMR) hash trees.** Winternitz is used to generate private/public key pairs and signatures which are stored as leaf nodes in an MMR, creating a Tree of Keys. -The cryptographic hash function used in Minima’s implementation of the Merkle Signature Scheme is **SHA3-256**, which is considered Quantum-resistant. It takes an input message and produces a 256-bit message digest, from which the input message cannot be determined. + The cryptographic hash function used in Minima’s implementation of the Merkle + Signature Scheme is **SHA3-256**, which is considered Quantum-resistant. It + takes an input message and produces a 256-bit message digest, from which the + input message cannot be determined. Minima also uses MMR trees for storing a user’s coins. See [MMR](/docs/learn/minima/mmrdatabase). ## Trees of Keys + A Tree of Keys enables a user to have many **secure but one-time-use private keys** all associated with the same root public key. This is useful because it allows a user to share a single public key for receiving funds but to sign each transaction with a different private key, ensuring maximum security. This **root public key** can be used securely, the same number of times as there are private keys associated with it, i.e. the number of leaf nodes in the tree. By signing with a different private key for each transaction, and presenting a proof path with the signature which indicates the path through the MMR tree from the private key to the tree root, any external party can validate that the signature was generated by the rightful owner of the funds. **Example of a single Tree of Keys** -A TreeKeyNode is a single MMR Tree with (a default) 64 single-use Winternitz public-private key pairs and a Root public key +A TreeKeyNode is a single MMR Tree with (a default) 64 single-use Winternitz public-private key pairs and a Root public key - Each leaf node (Winternitz Key Pair & Signature) is generated using: -- **a private seed** - this is generated by concatenating a number from 0-63 with the private seed of this TreeKeyNode. i.e. Hash(i, PrivateSeed) for i = 0-63. + +- **a private seed** - this is generated by concatenating a number from 0-63 with the private seed of this TreeKeyNode. i.e. Hash(i, PrivateSeed) for i = 0-63. - **a hash function with specified digest size** - Minima uses the SHA3 hash function with a 256 bit digest. - **a chosen Winternitz parameter** - Minima uses a Winternitz parameter of 8. @@ -70,80 +76,79 @@ To find out more about Winternitz security, see [https://eprint.iacr.org/2011/19 Therefore each leaf node corresponds to a Winternitz Key Pair and Signature: -| WOT Signature Scheme | Description | -| :-------- | :--- | -|WOTS Private Key | Single use Winternitz private key | -|WOTS Public Key | Single use Winternitz public key | -|WOTS Signature | The one-time signature (of a given message/transaction) generated with the private key| +| WOT Signature Scheme | Description | +| :------------------- | :------------------------------------------------------------------------------------- | +| WOTS Private Key | Single use Winternitz private key | +| WOTS Public Key | Single use Winternitz public key | +| WOTS Signature | The one-time signature (of a given message/transaction) generated with the private key | **Example TreeKeyNode with just 4 leaf nodes:** -Once all 64 keys are generated, the root hash can be calculated. Clearly a public key which can only be used securely 64 times would not be sufficient. To get more uses from a single root public key, there needs to be more keys (leaf nodes). However, the more Winternitz keys that exist, the longer it takes to generate them and the longer it takes to generate the root hash i.e. the root public key. +Once all 64 keys are generated, the root hash can be calculated. Clearly a public key which can only be used securely 64 times would not be sufficient. To get more uses from a single root public key, there needs to be more keys (leaf nodes). However, the more Winternitz keys that exist, the longer it takes to generate them and the longer it takes to generate the root hash i.e. the root public key. -In order to efficiently scale the number of uses possible for a root public key, instead of simply generating a single large Tree of Keys with hundreds of thousands of leaf nodes, Minima constructs a **Tree of Trees** with multiple levels and a single top root. +In order to efficiently scale the number of uses possible for a root public key, instead of simply generating a single large Tree of Keys with hundreds of thousands of leaf nodes, Minima constructs a **Tree of Trees** with multiple levels and a single top root. -A **Tree of Trees** consists of (a default) 3 levels where the root of all level 2 and 3 trees are signed by a Winternitz key pair in the level above (as shown below). The level 3 trees contain the Winternitz keys which are used to sign transactions. +A **Tree of Trees** consists of (a default) 3 levels where the root of all level 2 and 3 trees are signed by a Winternitz key pair in the level above (as shown below). The level 3 trees contain the Winternitz keys which are used to sign transactions. -Each individual Tree in Level 2 is connected to a leaf node key on Level 1 and will have its own **private seed**, generated by hashing the Level 1 key number (0-63) with its private key. Likewise, each Level 3 tree is connected to a key from a Level 2 tree. +Each individual Tree in Level 2 is connected to a leaf node key on Level 1 and will have its own **private seed**, generated by hashing the Level 1 key number (0-63) with its private key. Likewise, each Level 3 tree is connected to a key from a Level 2 tree. -The private keys from level 1 and 2 are used to sign the root hash of the level 2 and 3 trees respectively, creating a Tree of Key Trees, connected through signatures. +The private keys from level 1 and 2 are used to sign the root hash of the level 2 and 3 trees respectively, creating a Tree of Key Trees, connected through signatures. **Diagram showing a full Tree of Trees (with default 3 levels & 64 keys/tree)** - With each individual MMR tree containing 64 keys as leaf nodes; adding a second level of MMR trees provides 642 WOTS public-private key pairs. The MMR tree grows logarithmically, with n levels providing a maximum of 64n one-time-use key pairs for the user to sign transactions with. -Minima uses a default 3 levels, providing a total of 643 = 262144 one-time-use keys. +Minima uses a default 3 levels, providing a total of 643 = 262144 one-time-use keys. The advantage of a ‘tree of trees’ over a single large tree is that: -- The user's **root public key** is calculated efficiently - only requiring the top (level 1) tree to be generated; + +- The user's **root public key** is calculated efficiently - only requiring the top (level 1) tree to be generated; - Each level of trees is connected via digital signatures which can be independently verified -- Each level 3 tree can be added on demand as the user requires more private keys for signing transactions. +- Each level 3 tree can be added on demand as the user requires more private keys for signing transactions. **Single Tree (TreeKeyNode) properties** -| TreeKeyNode Property | Description | Type | -| :-------- | :--- | :------------ | -|Size | The number of leaf nodes in this MMR Tree. Default is 64. | Integer| -|Tree | The MMR Tree structure of this TreeKeyNode | MMR | -|Children |An array of the child Trees belonging to this Tree (default 64 for each level 1 and 2 tree, 0 for level 3 trees) |TreeKeyNode array | -|Keys |An array of the Winternitz Keys added as leaf nodes to this Tree (default 64). |Winternitz Keys array| -|ChildSeed |The hash of the Private Seed that was used to generate this Tree i.e. Hash(PrivateSeed). This child seed will be used as the base to generate the private seeds for each child Tree (for level 1 & 2 trees only) |MiniData | -|PublicKey | The root hash of the tree. If this tree is Level 1, this will be the user’s root public key.|MiniData| -|ParentChildSig|The signature generated when the parent tree signed the root of this Tree (levels 2 and 3 only) |Signature Proof| - +| TreeKeyNode Property | Description | Type | +| :------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------- | +| Size | The number of leaf nodes in this MMR Tree. Default is 64. | Integer | +| Tree | The MMR Tree structure of this TreeKeyNode | MMR | +| Children | An array of the child Trees belonging to this Tree (default 64 for each level 1 and 2 tree, 0 for level 3 trees) | TreeKeyNode array | +| Keys | An array of the Winternitz Keys added as leaf nodes to this Tree (default 64). | Winternitz Keys array | +| ChildSeed | The hash of the Private Seed that was used to generate this Tree i.e. Hash(PrivateSeed). This child seed will be used as the base to generate the private seeds for each child Tree (for level 1 & 2 trees only) | MiniData | +| PublicKey | The root hash of the tree. If this tree is Level 1, this will be the user’s root public key. | MiniData | +| ParentChildSig | The signature generated when the parent tree signed the root of this Tree (levels 2 and 3 only) | Signature Proof | **Tree of Trees (TreeKey) properties** -| TreeKey Property | Description | Type | -| :-------- | :--- | :------------ | -|Root | The top tree of this tree of trees, generated from the user’s Base Private Seed. | TreeKeyNode| -|Levels | Number of levels of trees in this tree of trees (default 3) | Integer | -|KeysPerLevel |The number of keys per single tree (default 64) |Integer | -|Uses |The number of times the root public key has been used |Integer| -|Max Uses |The maximum number of uses = (Keys/level)number of levels. Default is 643. |Integer| -|PrivateSeed | The PrivateSeed used to generate all the trees in this TreeKey.|MiniData| -|Public Key|The root hash from the root tree. |MiniData| +| TreeKey Property | Description | Type | +| :--------------- | :----------------------------------------------------------------------------------------------- | :---------- | +| Root | The top tree of this tree of trees, generated from the user’s Base Private Seed. | TreeKeyNode | +| Levels | Number of levels of trees in this tree of trees (default 3) | Integer | +| KeysPerLevel | The number of keys per single tree (default 64) | Integer | +| Uses | The number of times the root public key has been used | Integer | +| Max Uses | The maximum number of uses = (Keys/level)number of levels. Default is 643. | Integer | +| PrivateSeed | The PrivateSeed used to generate all the trees in this TreeKey. | MiniData | +| Public Key | The root hash from the root tree. | MiniData | -Each TreeKey requires a private seed from which all the leaf node private keys are generated. This is covered in more detail next. +Each TreeKey requires a private seed from which all the leaf node private keys are generated. This is covered in more detail next. -## Constructing a Tree of Trees +## Constructing a Tree of Trees On creation of a new Minima node, a 32 byte **Base Private Seed** is created using a Pseudo Random Number Generator (PRNG). From this base private seed, further private seeds are generated by combining it with a **modifier** (another 32 byte random number). @@ -164,17 +169,18 @@ keys "depth":3, "uses":0, "maxuses":262144, -"modifier":"0x02984CB232D0C003F6681980689F45BA255522131882E1530D393518401A6CF8", -"publickey":"0x9F9FBFD83D999D952BE4A6538252043987F3937F3BBC361F00D5AE708EF1A105", -"privatekey":"0x28AF0DD826C1D49A74F6533920AFBCE5D2044AA822591B389E4A4518C483E672" + "modifier":"0x02984CB232D0C003F6681980689F45BA255522131882E1530D393518401A6CF8", + "publickey":"0x9F9FBFD83D999D952BE4A6538252043987F3937F3BBC361F00D5AE708EF1A105", + "privatekey":"0x28AF0DD826C1D49A74F6533920AFBCE5D2044AA822591B389E4A4518C483E672" }, ``` ## Public Keys, Scripts and Addresses in Minima -All 0x addresses in Minima, which can be shared publicly to receive funds, are **Pay-to-Script-Hash (P2SH)**. This means that all funds are sent to the hash of a script. + +All 0x addresses in Minima, which can be shared publicly to receive funds, are **Pay-to-Script-Hash (P2SH)**. This means that all funds are sent to the hash of a script. A **Script** is a series of instructions which are executed when a transaction is validated and added to a block. A transaction is only valid if the script returns a value of TRUE. -Every user has a set of default addresses, and hence scripts. For each of their root public keys, there is an associated default script - **RETURN(SIGNEDBY(RootPublicKey))**, the hash of which is an address of the user which can be used to receive funds. +Every user has a set of default addresses, and hence scripts. For each of their root public keys, there is an associated default script - **RETURN(SIGNEDBY(RootPublicKey))**, the hash of which is an address of the user which can be used to receive funds. Whenever a user receives funds to a specific address, a new coin is created containing that script, which must return a value of TRUE at the time of being spent in a transaction. This script will only return TRUE if the rightful owner of the coin has signed the transaction with one of the private keys for the given root public key - the one in the script - else it will return FALSE. @@ -182,119 +188,205 @@ Whenever a user receives funds to a specific address, a new coin is created cont When Alice sends funds to Bob’s address, she is actually locking those funds into a new coin with a script which says RETURN(SIGNEDBY(Bob’sPublicKey)). This coin can only be spent when a transaction, containing this coin as an input, is signed with a single-use private key of Bob’sPublicKey.
Assuming Bob is the only one holding his private keys, Bob is the only person who can spend this coin. - ## Signature Generation -When choosing to sign a transaction with the root public key, the user must not only provide the **WOT signature** of the transaction, but also the **Parent-Child signatures** that connect the multiple levels of the tree, and the proof path from leaf node to root for each level. This provides the full path from the transaction signature to the root public key, which can be then validated by any other user in the network. + +When choosing to sign a transaction with the root public key, the user must not only provide the **WOT signature** of the transaction, but also the **Parent-Child signatures** that connect the multiple levels of the tree, and the proof path from leaf node to root for each level. This provides the full path from the transaction signature to the root public key, which can be then validated by any other user in the network. A full signature, required for the transaction **Witness** therefore includes a list of **MMR Proof paths** and **signatures** from the bottom of the tree of trees, to the root public key at the top. For example, a full signature proof in a transaction Witness would consist of: 1. MMR Proof path from the root public key to a Level 1 Winternitz key leaf node
- with the **ParentChildSignature connecting Level 1 to 2** (as a result of using a level 1 key to sign a Level 2 root) + with the **ParentChildSignature connecting Level 1 to 2** (as a result of using a level 1 key to sign a Level 2 root) 2. MMR Proof path from the root of the first Level 2 tree to a Level 2 Winternitz key leaf node
-with the **ParentChildSignature from Level 2 to 3** (as a result of using a level 2 key to sign a Level 3 root) + with the **ParentChildSignature from Level 2 to 3** (as a result of using a level 2 key to sign a Level 3 root) 3. MMR Proof path from the root of a Level 3 tree to a Level 3 Winternitz key leaf node
-with the **Signature of the transaction** (as a result of using a level 3 key to sign the transaction) + with the **Signature of the transaction** (as a result of using a level 3 key to sign the transaction) - -Only the final signature is the signature generated from signing the transaction, the preceding signatures are the Parent-Child signatures that connect the multiple tree levels. + + Only the final signature is the signature generated from signing the + transaction, the preceding signatures are the Parent-Child signatures that + connect the multiple tree levels. -To learn more about MMR proofs, see the section on [MMR Database](/docs/learn/minima/mmrdatabase). +To learn more about MMR proofs, see the section on [MMR +Database](/docs/learn/minima/mmrdatabase). -The serialised data for each MMR Signature Proof consists of: +The serialised data for each MMR Signature Proof consists of: -| Signature Proof Attribute | Description | Type | -| :-------- | :--- | :------------ | -|Public Key | The Winternitz public key of the leaf node | 64 byte hash (MiniData)| -|Proof | A list of Proof Chunks (nodes in the MMR tree) which provide the path from leaf node to the root of the tree. | MMR Proof | -|Winternitz Signature |A Winternitz Signature from signing either a child MMR key tree or some data e.g. a transaction |64 byte hash (MiniData) | +| Signature Proof Attribute | Description | Type | +| :------------------------ | :------------------------------------------------------------------------------------------------------------ | :---------------------- | +| Public Key | The Winternitz public key of the leaf node | 64 byte hash (MiniData) | +| Proof | A list of Proof Chunks (nodes in the MMR tree) which provide the path from leaf node to the root of the tree. | MMR Proof | +| Winternitz Signature | A Winternitz Signature from signing either a child MMR key tree or some data e.g. a transaction | 64 byte hash (MiniData) | In a transaction Witness, each Signature Proof also shows a root key which is the root hash of either the Level 1, 2 or 3 tree, where the Level 1 root hash is a multiple use root public key of the user. **Example of a full signature for a transaction:** + ```json title="Transaction Signature" -"signatures":[{ - "signatures":[ - - {"publickey":"0xE574DE48114CE0C8B73B40BBA9069EE354C227EC0965123B458D2CB24EFD6A83", "rootkey":"0xF9C0872B59932D11434CF3CCB23EDA1F7F189AC4438AD1D00AF94D7C28B6275B", - "proof":{ - "blocktime":"0", - "proof":[{ - "left":false, - "data":{ - "data":"0x51761AF1E1BD225EAED96916AC1317B9F47315B5155156B681B5DAA4B65EB699", - "value":"0"}}, - {"left":false, - "data":{ "data":"0x6F612A1F62206489CF6F00C3B6424C2D54E02B72C11763E21EC0E0C3D85161B8", - "value":"0"}}, - {"left":false, - "data":{ "data":"0x2E999787BFA586571880580CD7B99C748F18900D1CD207C9AC9538A30207285B", - "value":"0"}}, - {"left":false, - "data":{ "data":"0xD36DBD6C4E23A75B55AFB813EF067CA25A661C8AB82F5288BD0D0B2DCF0CA140", - "value":"0"}}, - {"left":false, - "data":{ "data":"0x4DDC92942DBCCBBC1C026ADC92715F8A021F16E6FE35810AAD30D6E698980E3D", - "value":"0"}}, - {"left":false, - "data":{ "data":"0x840F1A656596F02F1B787605E131AA1E3CF93DE618FFFC0EB03DDF301E861741", - "value":"0"}}], - "prooflength":6}, - "signature":"0x…"}, - - {"publickey":"0xC14C2C8B35E55A2DF25EA0BA8A528BEEF8BD3FE688885B176BEBB8E8D95FAE67", "rootkey":"0x707BE4E4F280CC96F5972F66FCDFCFC78356ACD548EF74513E24257FFED8DE6C", - "proof":{ - "blocktime":"0", - "proof":[{ - "left":false, - "data":{ "data":"0x4F13DDDA0847150B2427C8E477908C790C5E001378816041CB550185303B9319", - "value":"0"}}, - {"left":false, - "data":{ "data":"0xE3B4F5B1ADB6F71974C13AADDE8C26FAC61F6C0DAD76BA9C316740DA1B5480B2", - "value":"0"}}, - {"left":false, - "data":{ "data":"0xE0B0051ED7B743EE466BF96D554B629B21A1588E09A18E6D2D02DBC77F26D473", - "value":"0"}}, - {"left":false, - "data":{ "data":"0xD42055AFA35C85B98C92F1734956857816EB67BB4C16AEB12CFF3EDD0BC2488A", - "value":"0"}}, - {"left":false, - "data":{ "data":"0xF1F986238938A8F82FD393E70F9226959FF115D3A4DC2AC7E13E40A58565B0E7", - "value":"0"}}, - {"left":false, - "data":{ "data":"0x1029171D8035E7461C5367987A6096A832F56C7558E6E859088718FC321F8DFA", "value":"0"} - }], - "prooflength":6}, - "signature":"0x…"}, - - {"publickey":"0xA54B6673D6A890444A90EFBE64FBD8576D59E144BB7166DA83109C9C32CF93B2", "rootkey":"0x15DF8CEA59E66D31762DB7F8D3A972CFF55F0E8DA25CA9C4222AAF93BBD7A31E", - "proof":{ - "blocktime":"0", - "proof":[{ - "left":false, - "data":{ "data":"0x6E2A8A0201D45E5B21003FA39FC32CF78755028F670687145DF365788AB83BEF", - "value":"0"}}, - {"left":false, - "data":{ "data":"0xB9975A60B1187FFDF8C5F82DE910D47186DBB72A3CB478CB6BE168AD5FCD6AFD", - "value":"0"}}, - {"left":false, - "data":{ "data":"0x07197775FA938D76A4252E2DD010E4C6145DCBE4EFD362E68DBDE79745563853", - "value":"0"}}, - {"left":false, - "data":{ "data":"0x2C923B177B0417AF1E9A89858980D544CC065004F361B1BE395EC60DF674781F", - "value":"0"}}, - {"left":false, - "data":{ "data":"0x235B875C4E2A48248DE06079613724D982A96069AE86ADD26F772AC192DDC5A2", - "value":"0"}}, - {"left":false, - "data":{ "data":"0x9B90AD45CAEC23926163E65CC838207CDE1D48B990602E8F4AF060116BBEDA36", - "value":"0"}}], - "prooflength":6 - }, - "signature":"0x…." } - ] - }], -``` \ No newline at end of file +{ + "signatures": [ + { + "publickey": "0xE574DE48114CE0C8B73B40BBA9069EE354C227EC0965123B458D2CB24EFD6A83", + "rootkey": "0xF9C0872B59932D11434CF3CCB23EDA1F7F189AC4438AD1D00AF94D7C28B6275B", + "proof": { + "blocktime": "0", + "proof": [ + { + "left": false, + "data": { + "data": "0x51761AF1E1BD225EAED96916AC1317B9F47315B5155156B681B5DAA4B65EB699", + "value": "0" + } + }, + { + "left": false, + "data": { + "data": "0x6F612A1F62206489CF6F00C3B6424C2D54E02B72C11763E21EC0E0C3D85161B8", + "value": "0" + } + }, + { + "left": false, + "data": { + "data": "0x2E999787BFA586571880580CD7B99C748F18900D1CD207C9AC9538A30207285B", + "value": "0" + } + }, + { + "left": false, + "data": { + "data": "0xD36DBD6C4E23A75B55AFB813EF067CA25A661C8AB82F5288BD0D0B2DCF0CA140", + "value": "0" + } + }, + { + "left": false, + "data": { + "data": "0x4DDC92942DBCCBBC1C026ADC92715F8A021F16E6FE35810AAD30D6E698980E3D", + "value": "0" + } + }, + { + "left": false, + "data": { + "data": "0x840F1A656596F02F1B787605E131AA1E3CF93DE618FFFC0EB03DDF301E861741", + "value": "0" + } + } + ], + "prooflength": 6 + }, + "signature": "0x…" + }, + { + "publickey": "0xC14C2C8B35E55A2DF25EA0BA8A528BEEF8BD3FE688885B176BEBB8E8D95FAE67", + "rootkey": "0x707BE4E4F280CC96F5972F66FCDFCFC78356ACD548EF74513E24257FFED8DE6C", + "proof": { + "blocktime": "0", + "proof": [ + { + "left": false, + "data": { + "data": "0x4F13DDDA0847150B2427C8E477908C790C5E001378816041CB550185303B9319", + "value": "0" + } + }, + { + "left": false, + "data": { + "data": "0xE3B4F5B1ADB6F71974C13AADDE8C26FAC61F6C0DAD76BA9C316740DA1B5480B2", + "value": "0" + } + }, + { + "left": false, + "data": { + "data": "0xE0B0051ED7B743EE466BF96D554B629B21A1588E09A18E6D2D02DBC77F26D473", + "value": "0" + } + }, + { + "left": false, + "data": { + "data": "0xD42055AFA35C85B98C92F1734956857816EB67BB4C16AEB12CFF3EDD0BC2488A", + "value": "0" + } + }, + { + "left": false, + "data": { + "data": "0xF1F986238938A8F82FD393E70F9226959FF115D3A4DC2AC7E13E40A58565B0E7", + "value": "0" + } + }, + { + "left": false, + "data": { + "data": "0x1029171D8035E7461C5367987A6096A832F56C7558E6E859088718FC321F8DFA", + "value": "0" + } + } + ], + "prooflength": 6 + }, + "signature": "0x…" + }, + { + "publickey": "0xA54B6673D6A890444A90EFBE64FBD8576D59E144BB7166DA83109C9C32CF93B2", + "rootkey": "0x15DF8CEA59E66D31762DB7F8D3A972CFF55F0E8DA25CA9C4222AAF93BBD7A31E", + "proof": { + "blocktime": "0", + "proof": [ + { + "left": false, + "data": { + "data": "0x6E2A8A0201D45E5B21003FA39FC32CF78755028F670687145DF365788AB83BEF", + "value": "0" + } + }, + { + "left": false, + "data": { + "data": "0xB9975A60B1187FFDF8C5F82DE910D47186DBB72A3CB478CB6BE168AD5FCD6AFD", + "value": "0" + } + }, + { + "left": false, + "data": { + "data": "0x07197775FA938D76A4252E2DD010E4C6145DCBE4EFD362E68DBDE79745563853", + "value": "0" + } + }, + { + "left": false, + "data": { + "data": "0x2C923B177B0417AF1E9A89858980D544CC065004F361B1BE395EC60DF674781F", + "value": "0" + } + }, + { + "left": false, + "data": { + "data": "0x235B875C4E2A48248DE06079613724D982A96069AE86ADD26F772AC192DDC5A2", + "value": "0" + } + }, + { + "left": false, + "data": { + "data": "0x9B90AD45CAEC23926163E65CC838207CDE1D48B990602E8F4AF060116BBEDA36", + "value": "0" + } + } + ], + "prooflength": 6 + }, + "signature": "0x…" + } + ] +} +``` diff --git a/content/docs/learn/minidapp-structure.mdx b/content/docs/learn/minidapp-structure.mdx index 8b7477f..7dbbb4d 100644 --- a/content/docs/learn/minidapp-structure.mdx +++ b/content/docs/learn/minidapp-structure.mdx @@ -11,7 +11,7 @@ MiniDapps are simple web apps created using basic web languages (HTML, CSS, Java MiniDapps are zip files (.mds.zip) with the following basic structure: - **dapp.conf** : Configuration file -- **icon.png** : icon for the MiniDapp +- **icon.jpg** : icon for the MiniDapp - **index.html** : html web page - **mds.js** : JavaScript library for a simple Minima API - **service.js** : Optional JavaScript file for running a background service that handles Main messages diff --git a/content/docs/learn/mmr-database.mdx b/content/docs/learn/mmr-database.mdx index 94d665a..ebb288e 100644 --- a/content/docs/learn/mmr-database.mdx +++ b/content/docs/learn/mmr-database.mdx @@ -19,12 +19,36 @@ Coins are hashed in pairs, building up the largest **binary tree** possible unti When the total number of leaf nodes (Coins/TxOs) are not equal to `2n where n = int{0,...,256},`there will be multiple trees of different heights, creating multiple peak nodes as shown below. -**Insert image here** -**Insert image here** +_Diagram: Merkle Mountain Range (MMR) with 11 coins (green) and three peaks (blue)_ + + + +To create a single MMR tree, the peaks must be collected (or ‘bagged’) starting from left to right. Until a single root hash is found. + +_Diagram: A complete Merkle Mountain Range (MMR) with three peaks and root_ + + Each node in the tree will have a globally unique reference to it by combining the row/level it is in and its entry number on the row. Using a hash table to track entries, each node can be identified through a reference [R,E] where R is the row number and E is the Entry number. -**Insert image here** +_Diagram: A complete MMR with hash table references [row, entry number]_ + + The maximum possible number of rows in the MMR is set to 256, using the MAXROWS parameter. With each two new coins, a new parent node is added, therefore the maximum number of coins in the MMR would result in a perfect binary tree with one peak and 2^256 coins. @@ -56,7 +80,14 @@ Each node in the MMR has unique MMR Data consisting of a hash and a value, defin | Data (Hash) The coin could be spent or unspent. | Hash(coin object) | Hash[Hash(left child data object), Hash (right child data object),value object] | MiniData (32 byte hash) | | Value | Minima Value of coin, if unspent Or 0, if spent | Sum of the calue of child nodes | MiniNumber | -** Insert image here ** +_Diagram: Example MMR Data for two coins and a parent node in the MMR._ + + | MMREntry Attribute | Description | Type | | ------------------ | ------------------------------------------------------------------------------- | -------------- | @@ -72,7 +103,14 @@ Given a CoinProof, any node verifying a transaction can calculate the path (i.e. **Proof Chunks** consist of the MMR Data (hash and value) for an MMR entry and a True/False flag indicating whether it is a left sibling or not. -**Insert image here** +_Diagram: Example CoinProof for coin 7 (coin to peak)_ + + The CoinProof for coin 7 consists of the coin and the yellow Proof Chunks, i.e. entries `{[0,6],[0,7],[1,2],[2,0]}` , so that: diff --git a/content/docs/learn/transactions.mdx b/content/docs/learn/transactions.mdx index 8b5bed5..b86c4ba 100644 --- a/content/docs/learn/transactions.mdx +++ b/content/docs/learn/transactions.mdx @@ -8,7 +8,12 @@ tag: learn The following diagram explains the basic process from a Transaction to [TxPoW](/txpow) unit to Block. -**Insert image here** + ## Structure diff --git a/content/docs/run-a-node/android.mdx b/content/docs/run-a-node/android.mdx index 37a3498..f26665f 100644 --- a/content/docs/run-a-node/android.mdx +++ b/content/docs/run-a-node/android.mdx @@ -64,7 +64,7 @@ import { Accordion, Accordions } from "fumadocs-ui/components/accordion" The settings should be set as shown below.
@@ -120,7 +120,7 @@ If you have recently joined a WiFi network, refresh the URL From your computer's web browser, go to the URL shown +Health From the **Health** MiniDapp, you can check: @@ -26,7 +26,7 @@ From the **Health** MiniDapp, you can check: ## Logs -Logs +Logs The Logs MiniDapp will give you an indication of the most recent processes, connections and activities occurring on your node. diff --git a/content/docs/user-guides/index.mdx b/content/docs/user-guides/index.mdx index 22fd6e3..134bf06 100644 --- a/content/docs/user-guides/index.mdx +++ b/content/docs/user-guides/index.mdx @@ -34,7 +34,7 @@ Navigate to the settings MiniDapp and select **Desktop connect**. If you have recently joined a WiFi network, refresh the URL.
-![settings](/settings-icon.png) +![settings](/settings-icon.jpg) @@ -47,7 +47,7 @@ From your computer's web browser, go to the URL shown on your phone. diff --git a/content/docs/user-guides/jointhenetwork.mdx b/content/docs/user-guides/jointhenetwork.mdx index de80e15..a497cff 100644 --- a/content/docs/user-guides/jointhenetwork.mdx +++ b/content/docs/user-guides/jointhenetwork.mdx @@ -18,7 +18,7 @@ To get a list of connections, use one of the following methods: @@ -39,7 +39,7 @@ Connections (or 'peers') are simply other nodes that can share the blockchain wi From the Home screen, go to **Settings**. -![settings](/img/runanode/settingsicon.png) +![settings](/img/runanode/settingsicon.jpg) @@ -48,8 +48,8 @@ From the Home screen, go to **Settings**. Select **Add connections**. -add connections @@ -111,8 +111,8 @@ From the Home screen, go to **Settings**. From there select **Share connections**. -share connections If using Safari, ensure the MiniDapps are not unzipped during the download by @@ -31,13 +31,13 @@ _Alternatively, MiniDapps can be downloaded from our [MiniDapp site.](https://mi 4. Return to the home screen and click on the + icon in the top right -![MDS](/img/runanode/mds_installdapp.png) +![MDS](/img/runanode/mds_installdapp.jpg) 5. **Choose File** and select the MiniDapp you just downloaded 6. Click **Install**, then return to the home screen to open it -![MDS](/img/runanode/mds_installdapp3.png) +![MDS](/img/runanode/mds_installdapp3.jpg) ## Updating MiniDapps @@ -59,7 +59,7 @@ _Alternatively, MiniDapps can be downloaded from our [MiniDapp site.](https://mi 3. Return to the Home screen and right click (or long press on mobile) on the MiniDapp you wish to update -![MDS](/img/runanode/mds_dappoptions.png) +![MDS](/img/runanode/mds_dappoptions.jpg) 4. Select **Update** @@ -79,6 +79,6 @@ To delete a MiniDapp: 2. Select **Delete MiniDapp** -![MDS](/img/runanode/mds_dappoptions.png) +![MDS](/img/runanode/mds_dappoptions.jpg) 3. Select **Confirm** diff --git a/content/docs/user-guides/maxima-contacts.mdx b/content/docs/user-guides/maxima-contacts.mdx index cccef1f..3a77d0f 100644 --- a/content/docs/user-guides/maxima-contacts.mdx +++ b/content/docs/user-guides/maxima-contacts.mdx @@ -29,7 +29,7 @@ That's it! You can now communicate with your contact over MaxSolo or Chatter! @@ -38,7 +38,7 @@ That's it! You can now communicate with your contact over MaxSolo or Chatter! @@ -61,7 +61,7 @@ Provided you and your contact are online at least once every 24 hours, you shoul diff --git a/content/docs/user-guides/minidapp-permissions.mdx b/content/docs/user-guides/minidapp-permissions.mdx index 1e129d1..744e2ec 100644 --- a/content/docs/user-guides/minidapp-permissions.mdx +++ b/content/docs/user-guides/minidapp-permissions.mdx @@ -18,6 +18,6 @@ To change the permissions for a MiniDapp: 1. Right click on a MiniDapp (or long press on mobile) 2. Select **Write mode** (or Read mode) - ![MDS](/img/runanode/mds_updateperms.png) + ![MDS](/img/runanode/mds_updateperms.jpg) 3. Click **Confirm** - ![MDS](/img/runanode/mds_writeaccess.png) + ![MDS](/img/runanode/mds_writeaccess.jpg) diff --git a/content/docs/user-guides/node-recovery/chain-resync.mdx b/content/docs/user-guides/node-recovery/chain-resync.mdx index 21c8361..579c6f8 100644 --- a/content/docs/user-guides/node-recovery/chain-resync.mdx +++ b/content/docs/user-guides/node-recovery/chain-resync.mdx @@ -15,7 +15,7 @@ A chain re-sync ensures your node is on the correct top block and restores the w -![dappmenu](/img/app/security.png) +![dappmenu](/img/app/security.jpg) 1. Login to your MiniHub and open the Security MiniDapp 2. Select **Restore node** diff --git a/content/docs/user-guides/node-recovery/import-seed-phrase.mdx b/content/docs/user-guides/node-recovery/import-seed-phrase.mdx index ef5514e..683b052 100644 --- a/content/docs/user-guides/node-recovery/import-seed-phrase.mdx +++ b/content/docs/user-guides/node-recovery/import-seed-phrase.mdx @@ -28,7 +28,7 @@ Performing a seed re-sync will **WIPE your node completely** before restoring yo -![dappmenu](/img/app/security.png) +![dappmenu](/img/app/security.jpg) 1. Login to your MiniHub and open the Security MiniDapp 2. Select **Restore node** diff --git a/content/docs/user-guides/node-recovery/recover-options.mdx b/content/docs/user-guides/node-recovery/recover-options.mdx index 67f49a3..ed3b2a1 100644 --- a/content/docs/user-guides/node-recovery/recover-options.mdx +++ b/content/docs/user-guides/node-recovery/recover-options.mdx @@ -47,4 +47,4 @@ and, All the above processes can be found in the Security MiniDapp. -![security](/img/app/security.png) +![security](/img/app/security.jpg) diff --git a/content/docs/user-guides/node-recovery/restore-backup.mdx b/content/docs/user-guides/node-recovery/restore-backup.mdx index 62b6075..7f1b1b3 100644 --- a/content/docs/user-guides/node-recovery/restore-backup.mdx +++ b/content/docs/user-guides/node-recovery/restore-backup.mdx @@ -19,7 +19,7 @@ and, if the backup is older than 1 week -![dappmenu](/img/app/security.png) +![dappmenu](/img/app/security.jpg) 1. Login to your MiniHub and open the Security MiniDapp 2. Select **Restore node** diff --git a/content/docs/user-guides/secure-your-seedphrase.mdx b/content/docs/user-guides/secure-your-seedphrase.mdx index 7a87f53..98ff7db 100644 --- a/content/docs/user-guides/secure-your-seedphrase.mdx +++ b/content/docs/user-guides/secure-your-seedphrase.mdx @@ -14,7 +14,7 @@ Keeping your wallet secure involves: Your seed phrase will be required to restore your wallet if you lose access to your node and do not have a backup. It can be found in the Security MiniDapp. -![Security](/img/app/security.png) +![Security](/img/app/security.jpg) ## How to find your seed phrase diff --git a/content/docs/user-guides/set-your-profile.mdx b/content/docs/user-guides/set-your-profile.mdx index 80084b6..993cb43 100644 --- a/content/docs/user-guides/set-your-profile.mdx +++ b/content/docs/user-guides/set-your-profile.mdx @@ -20,7 +20,7 @@ Your Maxima Profile is the name that your Maxima contacts will see once you are 2. Go to the **Profile** page and select **Edit Display Name** void + showHomeLink: () => void + } + } +} + +export {} diff --git a/mdx-components.tsx b/mdx-components.tsx index b235f59..5a7b697 100644 --- a/mdx-components.tsx +++ b/mdx-components.tsx @@ -6,7 +6,7 @@ import { ImageZoom } from "fumadocs-ui/components/image-zoom" import { Step, Steps } from "fumadocs-ui/components/steps" import { Tab, Tabs } from "fumadocs-ui/components/tabs" import defaultComponents from "fumadocs-ui/mdx" -import { TypeTable } from 'fumadocs-ui/components/type-table'; +import { TypeTable } from "fumadocs-ui/components/type-table" import type { MDXComponents } from "mdx/types" import { GoogelPlayIcon, @@ -17,15 +17,25 @@ import { import { ThemeAwareSVG } from "@/components/theme-aware-svg" import { Separator } from "@/components/seperator" import CommandTable from "@/components/table" - - +import Image from "next/image" export function useMDXComponents(components: MDXComponents): MDXComponents { return { ...defaultComponents, ...components, Link, - ImageZoom, + ImageZoom: (props) => { + if (props.src.startsWith(".")) { + return + } + return + }, + Image: (props) => { + if (props.src.startsWith(".")) { + return + } + return + }, Heading, ul: (props) =>
    , SvgComponent, @@ -40,7 +50,12 @@ export function useMDXComponents(components: MDXComponents): MDXComponents { Tab, Accordions, Accordion, - ThemeAwareSVG, + ThemeAwareSVG: (props) => { + if (props.src.startsWith(".")) { + return + } + return + }, TypeTable, pre: ({ ref: _ref, ...props }) => ( diff --git a/minidapp/docs-2.0.0.mds.zip b/minidapp/docs-2.0.0.mds.zip new file mode 100644 index 0000000..7526e74 Binary files /dev/null and b/minidapp/docs-2.0.0.mds.zip differ diff --git a/minidapp/docs-2.1.0.mds.zip b/minidapp/docs-2.1.0.mds.zip new file mode 100644 index 0000000..ed15711 Binary files /dev/null and b/minidapp/docs-2.1.0.mds.zip differ diff --git a/minidapp/docs_0.0.0.mds.zip b/minidapp/docs_0.0.0.mds.zip deleted file mode 100644 index 693bfc1..0000000 Binary files a/minidapp/docs_0.0.0.mds.zip and /dev/null differ diff --git a/minidapp/docs_2.0.0.mds.zip b/minidapp/docs_2.0.0.mds.zip new file mode 100644 index 0000000..edf8af0 Binary files /dev/null and b/minidapp/docs_2.0.0.mds.zip differ diff --git a/next.config.mjs b/next.config.mjs index b7d7b60..526018f 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -5,6 +5,9 @@ const withMDX = createMDX() const config = { output: "export", assetPrefix: "./", + images: { + unoptimized: true, + }, } export default withMDX(config) diff --git a/package.json b/package.json index 555b913..57a5013 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,15 @@ { "name": "minima-docs", - "version": "0.0.0", + "version": "2.1.1", "private": true, "scripts": { "build": "next build", "dev": "next dev", "start": "next start", - "build-zip": "bun run build && cd out && zip -r docs_$npm_package_version.mds.zip . && mv docs_$npm_package_version.mds.zip ../minidapp" + "build-zip": "bun run build && bun run ./patcher.ts && cd out && rm -rf ./docs && zip -r docs-$npm_package_version.mds.zip . && mv docs-$npm_package_version.mds.zip ../minidapp" }, "dependencies": { + "@mdx-js/react": "^3.0.1", "@radix-ui/react-separator": "^1.1.0", "@tabler/icons-react": "^3.10.0", "@tsparticles/engine": "^3.5.0", @@ -27,6 +28,7 @@ "next-themes": "^0.3.0", "react": "^18.3.1", "react-dom": "^18.3.1", + "react-router-dom": "^6.26.2", "tailwind-merge": "^2.5.2", "zod": "^3.23.8" }, diff --git a/patcher.ts b/patcher.ts new file mode 100644 index 0000000..0848208 --- /dev/null +++ b/patcher.ts @@ -0,0 +1,6 @@ +import { readFile, writeFile } from "fs/promises"; + +let index = await readFile("./out/index.html", "utf8"); +index = index.replace("/favicon.ico", "./favicon.ico") +index = index.replace("/icon.ico", "./icon.ico") +await writeFile("./out/index.html", index); diff --git a/public/.DS_Store b/public/.DS_Store index abc7e38..edd688b 100644 Binary files a/public/.DS_Store and b/public/.DS_Store differ diff --git a/public/add-connections.jpg b/public/add-connections.jpg new file mode 100644 index 0000000..67f6bea Binary files /dev/null and b/public/add-connections.jpg differ diff --git a/public/add-connections.png b/public/add-connections.png deleted file mode 100644 index 10e419b..0000000 Binary files a/public/add-connections.png and /dev/null differ diff --git a/public/dapp.conf b/public/dapp.conf index 318dc0e..9865c56 100644 --- a/public/dapp.conf +++ b/public/dapp.conf @@ -1,7 +1,7 @@ { "name": "Docs", - "icon": "icon.ico", - "version": "1.1.0", + "icon": "favicon.ico", + "version": "2.1.0", "description": "Learn more about Minima", "browser":"internal", "category": "Utilities" diff --git a/public/desktop-connect.jpg b/public/desktop-connect.jpg new file mode 100644 index 0000000..999ea8d Binary files /dev/null and b/public/desktop-connect.jpg differ diff --git a/public/desktop-connect.png b/public/desktop-connect.png deleted file mode 100644 index 9dfb28d..0000000 Binary files a/public/desktop-connect.png and /dev/null differ diff --git a/public/img/.DS_Store b/public/img/.DS_Store index 0f53509..dd35195 100644 Binary files a/public/img/.DS_Store and b/public/img/.DS_Store differ diff --git a/public/img/about/Bitcoin_Node_count_DM.png b/public/img/about/Bitcoin_Node_count_DM.png deleted file mode 100644 index 773fd24..0000000 Binary files a/public/img/about/Bitcoin_Node_count_DM.png and /dev/null differ diff --git a/public/img/about/Bitcoin_Node_count_LM.png b/public/img/about/Bitcoin_Node_count_LM.png deleted file mode 100644 index 62c5377..0000000 Binary files a/public/img/about/Bitcoin_Node_count_LM.png and /dev/null differ diff --git a/public/img/about/Community_roadmap.png b/public/img/about/Community_roadmap.png deleted file mode 100644 index e542d82..0000000 Binary files a/public/img/about/Community_roadmap.png and /dev/null differ diff --git a/public/img/about/mds_hub_new.png b/public/img/about/mds_hub_new.png deleted file mode 100644 index 07aa329..0000000 Binary files a/public/img/about/mds_hub_new.png and /dev/null differ diff --git a/public/img/ambassador/ambassadorChartDm.svg b/public/img/ambassador/ambassadorChartDm.svg deleted file mode 100644 index bca7936..0000000 --- a/public/img/ambassador/ambassadorChartDm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/img/ambassador/ambassadorChartLm.svg b/public/img/ambassador/ambassadorChartLm.svg deleted file mode 100644 index b2299e6..0000000 --- a/public/img/ambassador/ambassadorChartLm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/img/ambassador/ambassador_1.png b/public/img/ambassador/ambassador_1.png deleted file mode 100644 index ef94589..0000000 Binary files a/public/img/ambassador/ambassador_1.png and /dev/null differ diff --git a/public/img/app/HealthIcon.png b/public/img/app/HealthIcon.png deleted file mode 100644 index c48d330..0000000 Binary files a/public/img/app/HealthIcon.png and /dev/null differ diff --git a/public/img/app/NewHome.png b/public/img/app/NewHome.png deleted file mode 100644 index a9c48fa..0000000 Binary files a/public/img/app/NewHome.png and /dev/null differ diff --git a/public/img/app/approvecommand.png b/public/img/app/approvecommand.png deleted file mode 100644 index 81706f7..0000000 Binary files a/public/img/app/approvecommand.png and /dev/null differ diff --git a/public/img/app/archivepage.png b/public/img/app/archivepage.png deleted file mode 100644 index 929eedb..0000000 Binary files a/public/img/app/archivepage.png and /dev/null differ diff --git a/public/img/app/dappstore.png b/public/img/app/dappstore.png deleted file mode 100644 index 7f620d0..0000000 Binary files a/public/img/app/dappstore.png and /dev/null differ diff --git a/public/img/app/deletedapp.png b/public/img/app/deletedapp.png deleted file mode 100644 index 81e1ff2..0000000 Binary files a/public/img/app/deletedapp.png and /dev/null differ diff --git a/public/img/app/desktopconnect.jpg b/public/img/app/desktopconnect.jpg new file mode 100644 index 0000000..6224423 Binary files /dev/null and b/public/img/app/desktopconnect.jpg differ diff --git a/public/img/app/desktopconnect.png b/public/img/app/desktopconnect.png deleted file mode 100644 index 9dfb28d..0000000 Binary files a/public/img/app/desktopconnect.png and /dev/null differ diff --git a/public/img/app/downloads.png b/public/img/app/downloads.png deleted file mode 100644 index 46d7cbb..0000000 Binary files a/public/img/app/downloads.png and /dev/null differ diff --git a/public/img/app/getdapp.png b/public/img/app/getdapp.png deleted file mode 100644 index b544102..0000000 Binary files a/public/img/app/getdapp.png and /dev/null differ diff --git a/public/img/app/health.jpg b/public/img/app/health.jpg new file mode 100644 index 0000000..71183ed Binary files /dev/null and b/public/img/app/health.jpg differ diff --git a/public/img/app/health.png b/public/img/app/health.png deleted file mode 100644 index adf87c0..0000000 Binary files a/public/img/app/health.png and /dev/null differ diff --git a/public/img/app/installdapp.png b/public/img/app/installdapp.png deleted file mode 100644 index 3641754..0000000 Binary files a/public/img/app/installdapp.png and /dev/null differ diff --git a/public/img/app/logsicon.jpg b/public/img/app/logsicon.jpg new file mode 100644 index 0000000..2d23479 Binary files /dev/null and b/public/img/app/logsicon.jpg differ diff --git a/public/img/app/logsicon.png b/public/img/app/logsicon.png deleted file mode 100644 index 7c9cfb1..0000000 Binary files a/public/img/app/logsicon.png and /dev/null differ diff --git a/public/img/app/longpress.png b/public/img/app/longpress.png deleted file mode 100644 index cf2a5ae..0000000 Binary files a/public/img/app/longpress.png and /dev/null differ diff --git a/public/img/app/newhealth.png b/public/img/app/newhealth.png deleted file mode 100644 index 29999fb..0000000 Binary files a/public/img/app/newhealth.png and /dev/null differ diff --git a/public/img/app/newlogs.png b/public/img/app/newlogs.png deleted file mode 100644 index 7edc869..0000000 Binary files a/public/img/app/newlogs.png and /dev/null differ diff --git a/public/img/app/newpending.png b/public/img/app/newpending.png deleted file mode 100644 index 5e438e2..0000000 Binary files a/public/img/app/newpending.png and /dev/null differ diff --git a/public/img/app/newsettings.png b/public/img/app/newsettings.png deleted file mode 100644 index 21d1b22..0000000 Binary files a/public/img/app/newsettings.png and /dev/null differ diff --git a/public/img/app/pendingapproved.png b/public/img/app/pendingapproved.png deleted file mode 100644 index 9131c6c..0000000 Binary files a/public/img/app/pendingapproved.png and /dev/null differ diff --git a/public/img/app/readmode.png b/public/img/app/readmode.png deleted file mode 100644 index 0c5a679..0000000 Binary files a/public/img/app/readmode.png and /dev/null differ diff --git a/public/img/app/security.jpg b/public/img/app/security.jpg new file mode 100644 index 0000000..9ee09ef Binary files /dev/null and b/public/img/app/security.jpg differ diff --git a/public/img/app/security.png b/public/img/app/security.png deleted file mode 100644 index 1e693a1..0000000 Binary files a/public/img/app/security.png and /dev/null differ diff --git a/public/img/app/settingsicon.jpg b/public/img/app/settingsicon.jpg new file mode 100644 index 0000000..076f074 Binary files /dev/null and b/public/img/app/settingsicon.jpg differ diff --git a/public/img/app/settingsicon.png b/public/img/app/settingsicon.png deleted file mode 100644 index ec4522e..0000000 Binary files a/public/img/app/settingsicon.png and /dev/null differ diff --git a/public/img/app/updatedapp.png b/public/img/app/updatedapp.png deleted file mode 100644 index b9bb674..0000000 Binary files a/public/img/app/updatedapp.png and /dev/null differ diff --git a/public/img/app/writemode.png b/public/img/app/writemode.png deleted file mode 100644 index 384d79a..0000000 Binary files a/public/img/app/writemode.png and /dev/null differ diff --git a/public/img/archivenode/A.AddConnection.jpg b/public/img/archivenode/A.AddConnection.jpg new file mode 100644 index 0000000..76e61f4 Binary files /dev/null and b/public/img/archivenode/A.AddConnection.jpg differ diff --git a/public/img/archivenode/A.AddConnection.png b/public/img/archivenode/A.AddConnection.png deleted file mode 100644 index 9ad1ab4..0000000 Binary files a/public/img/archivenode/A.AddConnection.png and /dev/null differ diff --git a/public/img/archivenode/B.CreateConnection.jpg b/public/img/archivenode/B.CreateConnection.jpg new file mode 100644 index 0000000..ae3ccda Binary files /dev/null and b/public/img/archivenode/B.CreateConnection.jpg differ diff --git a/public/img/archivenode/B.CreateConnection.png b/public/img/archivenode/B.CreateConnection.png deleted file mode 100644 index dec2885..0000000 Binary files a/public/img/archivenode/B.CreateConnection.png and /dev/null differ diff --git a/public/img/archivenode/C.SetPassword.png b/public/img/archivenode/C.SetPassword.png deleted file mode 100644 index 2d67770..0000000 Binary files a/public/img/archivenode/C.SetPassword.png and /dev/null differ diff --git a/public/img/archivenode/C.TestConnection.png b/public/img/archivenode/C.TestConnection.png deleted file mode 100644 index 2f6830a..0000000 Binary files a/public/img/archivenode/C.TestConnection.png and /dev/null differ diff --git a/public/img/archivenode/E.ArchiveDBinWorkbench.png b/public/img/archivenode/E.ArchiveDBinWorkbench.png deleted file mode 100644 index c9d77eb..0000000 Binary files a/public/img/archivenode/E.ArchiveDBinWorkbench.png and /dev/null differ diff --git a/public/img/archivenode/F.AdminExportData.jpg b/public/img/archivenode/F.AdminExportData.jpg new file mode 100644 index 0000000..9ea0bd8 Binary files /dev/null and b/public/img/archivenode/F.AdminExportData.jpg differ diff --git a/public/img/archivenode/F.AdminExportData.png b/public/img/archivenode/F.AdminExportData.png deleted file mode 100644 index 31f08d7..0000000 Binary files a/public/img/archivenode/F.AdminExportData.png and /dev/null differ diff --git a/public/img/archivenode/F.ExportData.png b/public/img/archivenode/F.ExportData.png deleted file mode 100644 index 697f2e8..0000000 Binary files a/public/img/archivenode/F.ExportData.png and /dev/null differ diff --git a/public/img/archivenode/G.DataExportSelection.jpg b/public/img/archivenode/G.DataExportSelection.jpg new file mode 100644 index 0000000..d5c887a Binary files /dev/null and b/public/img/archivenode/G.DataExportSelection.jpg differ diff --git a/public/img/archivenode/G.DataExportSelection.png b/public/img/archivenode/G.DataExportSelection.png deleted file mode 100644 index cc7f051..0000000 Binary files a/public/img/archivenode/G.DataExportSelection.png and /dev/null differ diff --git a/public/img/archivenode/H.ExportToFile.png b/public/img/archivenode/H.ExportToFile.png deleted file mode 100644 index 75ec0ac..0000000 Binary files a/public/img/archivenode/H.ExportToFile.png and /dev/null differ diff --git a/public/img/archivenode/I.StartExport.png b/public/img/archivenode/I.StartExport.png deleted file mode 100644 index 1b61110..0000000 Binary files a/public/img/archivenode/I.StartExport.png and /dev/null differ diff --git a/public/img/archivenode/J.EndExport.png b/public/img/archivenode/J.EndExport.png deleted file mode 100644 index b979f3a..0000000 Binary files a/public/img/archivenode/J.EndExport.png and /dev/null differ diff --git a/public/img/archivenode/desktopconnect.jpg b/public/img/archivenode/desktopconnect.jpg new file mode 100644 index 0000000..6224423 Binary files /dev/null and b/public/img/archivenode/desktopconnect.jpg differ diff --git a/public/img/buildonminima/TestTerminalstartup.jpg b/public/img/buildonminima/TestTerminalstartup.jpg new file mode 100644 index 0000000..ffe2ee6 Binary files /dev/null and b/public/img/buildonminima/TestTerminalstartup.jpg differ diff --git a/public/img/buildonminima/TestTerminalstartup.png b/public/img/buildonminima/TestTerminalstartup.png deleted file mode 100644 index 3dec3dc..0000000 Binary files a/public/img/buildonminima/TestTerminalstartup.png and /dev/null differ diff --git a/public/img/buildonminima/helloworld.png b/public/img/buildonminima/helloworld.png deleted file mode 100644 index ce6917e..0000000 Binary files a/public/img/buildonminima/helloworld.png and /dev/null differ diff --git a/public/img/buildonminima/helloworldzip.png b/public/img/buildonminima/helloworldzip.png deleted file mode 100644 index fa58025..0000000 Binary files a/public/img/buildonminima/helloworldzip.png and /dev/null differ diff --git a/public/img/buildonminima/minihub.png b/public/img/buildonminima/minihub.png deleted file mode 100644 index ec6855e..0000000 Binary files a/public/img/buildonminima/minihub.png and /dev/null differ diff --git a/public/img/buildonminima/minihub2.png b/public/img/buildonminima/minihub2.png deleted file mode 100644 index be81e4b..0000000 Binary files a/public/img/buildonminima/minihub2.png and /dev/null differ diff --git a/public/img/buildonminima/zipup.jpg b/public/img/buildonminima/zipup.jpg new file mode 100644 index 0000000..2b67fb8 Binary files /dev/null and b/public/img/buildonminima/zipup.jpg differ diff --git a/public/img/buildonminima/zipup.png b/public/img/buildonminima/zipup.png deleted file mode 100644 index 2d421d7..0000000 Binary files a/public/img/buildonminima/zipup.png and /dev/null differ diff --git a/public/img/learn/PubPrivKeyDigSig_02Dm.svg b/public/img/learn/pubPrivKey02Dm.svg similarity index 100% rename from public/img/learn/PubPrivKeyDigSig_02Dm.svg rename to public/img/learn/pubPrivKey02Dm.svg diff --git a/public/img/learn/PubPrivKeyDigSig_02Lm.svg b/public/img/learn/pubPrivKey02Lm.svg similarity index 100% rename from public/img/learn/PubPrivKeyDigSig_02Lm.svg rename to public/img/learn/pubPrivKey02Lm.svg diff --git a/public/img/learn/PubPrivKeyDigSig_03Dm.svg b/public/img/learn/pubPrivKey03Dm.svg similarity index 100% rename from public/img/learn/PubPrivKeyDigSig_03Dm.svg rename to public/img/learn/pubPrivKey03Dm.svg diff --git a/public/img/learn/PubPrivKeyDigSig_03Lm.svg b/public/img/learn/pubPrivKey03Lm.svg similarity index 100% rename from public/img/learn/PubPrivKeyDigSig_03Lm.svg rename to public/img/learn/pubPrivKey03Lm.svg diff --git a/public/img/learn/Single_Key_Tree-04Dm.svg b/public/img/learn/singleKeyTree04Dm.svg similarity index 100% rename from public/img/learn/Single_Key_Tree-04Dm.svg rename to public/img/learn/singleKeyTree04Dm.svg diff --git a/public/img/learn/Single_Key_Tree-04Lm.svg b/public/img/learn/singleKeyTree04Lm.svg similarity index 100% rename from public/img/learn/Single_Key_Tree-04Lm.svg rename to public/img/learn/singleKeyTree04Lm.svg diff --git a/public/img/maxima/Profile.png b/public/img/maxima/Profile.jpg similarity index 100% rename from public/img/maxima/Profile.png rename to public/img/maxima/Profile.jpg diff --git a/public/img/maxima/addcontact.jpg b/public/img/maxima/addcontact.jpg new file mode 100644 index 0000000..db9d8aa Binary files /dev/null and b/public/img/maxima/addcontact.jpg differ diff --git a/public/img/maxima/addcontact.png b/public/img/maxima/addcontact.png deleted file mode 100644 index f706c0c..0000000 Binary files a/public/img/maxima/addcontact.png and /dev/null differ diff --git a/public/img/maxima/addcontact2.jpg b/public/img/maxima/addcontact2.jpg new file mode 100644 index 0000000..27ce3e2 Binary files /dev/null and b/public/img/maxima/addcontact2.jpg differ diff --git a/public/img/maxima/addcontact2.png b/public/img/maxima/addcontact2.png deleted file mode 100644 index f61d668..0000000 Binary files a/public/img/maxima/addcontact2.png and /dev/null differ diff --git a/public/img/maxima/contactlist.jpg b/public/img/maxima/contactlist.jpg new file mode 100644 index 0000000..4131b15 Binary files /dev/null and b/public/img/maxima/contactlist.jpg differ diff --git a/public/img/maxima/contactlist.png b/public/img/maxima/contactlist.png deleted file mode 100644 index 740bdff..0000000 Binary files a/public/img/maxima/contactlist.png and /dev/null differ diff --git a/public/img/runanode/Community_Roadmap_Graphic_v4.png b/public/img/runanode/Community_Roadmap_Graphic_v4.png deleted file mode 100644 index fbb88f3..0000000 Binary files a/public/img/runanode/Community_Roadmap_Graphic_v4.png and /dev/null differ diff --git a/public/img/runanode/Docker_desktopremovecontainer.png b/public/img/runanode/Docker_desktopremovecontainer.png deleted file mode 100644 index 5932892..0000000 Binary files a/public/img/runanode/Docker_desktopremovecontainer.png and /dev/null differ diff --git a/public/img/runanode/Docker_desktopremovecontainermac.png b/public/img/runanode/Docker_desktopremovecontainermac.png deleted file mode 100644 index e700c39..0000000 Binary files a/public/img/runanode/Docker_desktopremovecontainermac.png and /dev/null differ diff --git a/public/img/runanode/Docker_desktopwatchtowermac.jpg b/public/img/runanode/Docker_desktopwatchtowermac.jpg new file mode 100644 index 0000000..a434a18 Binary files /dev/null and b/public/img/runanode/Docker_desktopwatchtowermac.jpg differ diff --git a/public/img/runanode/Docker_desktopwatchtowermac.png b/public/img/runanode/Docker_desktopwatchtowermac.png deleted file mode 100644 index 17f3e74..0000000 Binary files a/public/img/runanode/Docker_desktopwatchtowermac.png and /dev/null differ diff --git a/public/img/runanode/Docker_desktopwatchtowerwindows.jpg b/public/img/runanode/Docker_desktopwatchtowerwindows.jpg new file mode 100644 index 0000000..b659d65 Binary files /dev/null and b/public/img/runanode/Docker_desktopwatchtowerwindows.jpg differ diff --git a/public/img/runanode/Docker_desktopwatchtowerwindows.png b/public/img/runanode/Docker_desktopwatchtowerwindows.png deleted file mode 100644 index 30a93be..0000000 Binary files a/public/img/runanode/Docker_desktopwatchtowerwindows.png and /dev/null differ diff --git a/public/img/runanode/IP_checkrewards.png b/public/img/runanode/IP_checkrewards.png deleted file mode 100644 index e8f2549..0000000 Binary files a/public/img/runanode/IP_checkrewards.png and /dev/null differ diff --git a/public/img/runanode/IP_minidapp.png b/public/img/runanode/IP_minidapp.png deleted file mode 100644 index 97e19e2..0000000 Binary files a/public/img/runanode/IP_minidapp.png and /dev/null differ diff --git a/public/img/runanode/IP_updateid.png b/public/img/runanode/IP_updateid.png deleted file mode 100644 index 7cee41e..0000000 Binary files a/public/img/runanode/IP_updateid.png and /dev/null differ diff --git a/public/img/runanode/RPCClient.png b/public/img/runanode/RPCClient.png deleted file mode 100644 index ecda1d7..0000000 Binary files a/public/img/runanode/RPCClient.png and /dev/null differ diff --git a/public/img/runanode/Settings.png b/public/img/runanode/Settings.png deleted file mode 100644 index 32cdb5a..0000000 Binary files a/public/img/runanode/Settings.png and /dev/null differ diff --git a/public/img/runanode/addconnections1.png b/public/img/runanode/addconnections1.png deleted file mode 100644 index dcaa64d..0000000 Binary files a/public/img/runanode/addconnections1.png and /dev/null differ diff --git a/public/img/runanode/addconnections2.jpg b/public/img/runanode/addconnections2.jpg new file mode 100644 index 0000000..904d36f Binary files /dev/null and b/public/img/runanode/addconnections2.jpg differ diff --git a/public/img/runanode/addconnections2.png b/public/img/runanode/addconnections2.png deleted file mode 100644 index cceefde..0000000 Binary files a/public/img/runanode/addconnections2.png and /dev/null differ diff --git a/public/img/runanode/addconnections3.png b/public/img/runanode/addconnections3.png deleted file mode 100644 index 9d88945..0000000 Binary files a/public/img/runanode/addconnections3.png and /dev/null differ diff --git a/public/img/runanode/addconnectionssetting.jpg b/public/img/runanode/addconnectionssetting.jpg new file mode 100644 index 0000000..9b76627 Binary files /dev/null and b/public/img/runanode/addconnectionssetting.jpg differ diff --git a/public/img/runanode/addconnectionssetting.png b/public/img/runanode/addconnectionssetting.png deleted file mode 100644 index 10e419b..0000000 Binary files a/public/img/runanode/addconnectionssetting.png and /dev/null differ diff --git a/public/img/runanode/addconnectionsurl.png b/public/img/runanode/addconnectionsurl.png deleted file mode 100644 index 58b94f7..0000000 Binary files a/public/img/runanode/addconnectionsurl.png and /dev/null differ diff --git a/public/img/runanode/android_1.png b/public/img/runanode/android_1.png deleted file mode 100644 index b93dd82..0000000 Binary files a/public/img/runanode/android_1.png and /dev/null differ diff --git a/public/img/runanode/android_2.png b/public/img/runanode/android_2.png deleted file mode 100644 index e2f9621..0000000 Binary files a/public/img/runanode/android_2.png and /dev/null differ diff --git a/public/img/runanode/android_3.png b/public/img/runanode/android_3.png deleted file mode 100644 index ac6971a..0000000 Binary files a/public/img/runanode/android_3.png and /dev/null differ diff --git a/public/img/runanode/android_4.png b/public/img/runanode/android_4.png deleted file mode 100644 index 5a68edd..0000000 Binary files a/public/img/runanode/android_4.png and /dev/null differ diff --git a/public/img/runanode/android_5.png b/public/img/runanode/android_5.png deleted file mode 100644 index e7d2bd1..0000000 Binary files a/public/img/runanode/android_5.png and /dev/null differ diff --git a/public/img/runanode/batterysetting.jpg b/public/img/runanode/batterysetting.jpg new file mode 100644 index 0000000..fcc4894 Binary files /dev/null and b/public/img/runanode/batterysetting.jpg differ diff --git a/public/img/runanode/batterysetting.png b/public/img/runanode/batterysetting.png deleted file mode 100644 index e5d8946..0000000 Binary files a/public/img/runanode/batterysetting.png and /dev/null differ diff --git a/public/img/runanode/batterysettings.png b/public/img/runanode/batterysettings.png deleted file mode 100644 index fd20369..0000000 Binary files a/public/img/runanode/batterysettings.png and /dev/null differ diff --git a/public/img/runanode/blocknum.jpg b/public/img/runanode/blocknum.jpg new file mode 100644 index 0000000..8cbd101 Binary files /dev/null and b/public/img/runanode/blocknum.jpg differ diff --git a/public/img/runanode/blocknum.png b/public/img/runanode/blocknum.png deleted file mode 100644 index 5e9d144..0000000 Binary files a/public/img/runanode/blocknum.png and /dev/null differ diff --git a/public/img/runanode/connectionssetting.jpg b/public/img/runanode/connectionssetting.jpg new file mode 100644 index 0000000..a9a887a Binary files /dev/null and b/public/img/runanode/connectionssetting.jpg differ diff --git a/public/img/runanode/connectionssetting.png b/public/img/runanode/connectionssetting.png deleted file mode 100644 index 177f17a..0000000 Binary files a/public/img/runanode/connectionssetting.png and /dev/null differ diff --git a/public/img/runanode/custompw.jpg b/public/img/runanode/custompw.jpg new file mode 100644 index 0000000..00f3ecc Binary files /dev/null and b/public/img/runanode/custompw.jpg differ diff --git a/public/img/runanode/custompw.png b/public/img/runanode/custompw.png deleted file mode 100644 index e1e66c2..0000000 Binary files a/public/img/runanode/custompw.png and /dev/null differ diff --git a/public/img/runanode/docker_desktopbinbash.jpg b/public/img/runanode/docker_desktopbinbash.jpg new file mode 100644 index 0000000..2d4bf98 Binary files /dev/null and b/public/img/runanode/docker_desktopbinbash.jpg differ diff --git a/public/img/runanode/docker_desktopbinbash.png b/public/img/runanode/docker_desktopbinbash.png deleted file mode 100644 index 699efc4..0000000 Binary files a/public/img/runanode/docker_desktopbinbash.png and /dev/null differ diff --git a/public/img/runanode/docker_desktopcli.jpg b/public/img/runanode/docker_desktopcli.jpg new file mode 100644 index 0000000..4d540d1 Binary files /dev/null and b/public/img/runanode/docker_desktopcli.jpg differ diff --git a/public/img/runanode/docker_desktopcli.png b/public/img/runanode/docker_desktopcli.png deleted file mode 100644 index f1c8d05..0000000 Binary files a/public/img/runanode/docker_desktopcli.png and /dev/null differ diff --git a/public/img/runanode/docker_desktopcontainer.jpg b/public/img/runanode/docker_desktopcontainer.jpg new file mode 100644 index 0000000..5a1b560 Binary files /dev/null and b/public/img/runanode/docker_desktopcontainer.jpg differ diff --git a/public/img/runanode/docker_desktopcontainer.png b/public/img/runanode/docker_desktopcontainer.png deleted file mode 100644 index 7ae0833..0000000 Binary files a/public/img/runanode/docker_desktopcontainer.png and /dev/null differ diff --git a/public/img/runanode/docker_desktopcontainermac.jpg b/public/img/runanode/docker_desktopcontainermac.jpg new file mode 100644 index 0000000..5136797 Binary files /dev/null and b/public/img/runanode/docker_desktopcontainermac.jpg differ diff --git a/public/img/runanode/docker_desktopcontainermac.png b/public/img/runanode/docker_desktopcontainermac.png deleted file mode 100644 index 0ba72bc..0000000 Binary files a/public/img/runanode/docker_desktopcontainermac.png and /dev/null differ diff --git a/public/img/runanode/docker_desktopcontainerwindows.jpg b/public/img/runanode/docker_desktopcontainerwindows.jpg new file mode 100644 index 0000000..57fbe73 Binary files /dev/null and b/public/img/runanode/docker_desktopcontainerwindows.jpg differ diff --git a/public/img/runanode/docker_desktopcontainerwindows.png b/public/img/runanode/docker_desktopcontainerwindows.png deleted file mode 100644 index 568752d..0000000 Binary files a/public/img/runanode/docker_desktopcontainerwindows.png and /dev/null differ diff --git a/public/img/runanode/docker_desktoplogs.jpg b/public/img/runanode/docker_desktoplogs.jpg new file mode 100644 index 0000000..d13310b Binary files /dev/null and b/public/img/runanode/docker_desktoplogs.jpg differ diff --git a/public/img/runanode/docker_desktoplogs.png b/public/img/runanode/docker_desktoplogs.png deleted file mode 100644 index b897c90..0000000 Binary files a/public/img/runanode/docker_desktoplogs.png and /dev/null differ diff --git a/public/img/runanode/docker_desktoplogsmac.jpg b/public/img/runanode/docker_desktoplogsmac.jpg new file mode 100644 index 0000000..e99996b Binary files /dev/null and b/public/img/runanode/docker_desktoplogsmac.jpg differ diff --git a/public/img/runanode/docker_desktoplogsmac.png b/public/img/runanode/docker_desktoplogsmac.png deleted file mode 100644 index 24cf51d..0000000 Binary files a/public/img/runanode/docker_desktoplogsmac.png and /dev/null differ diff --git a/public/img/runanode/docker_desktoplogswindows.jpg b/public/img/runanode/docker_desktoplogswindows.jpg new file mode 100644 index 0000000..c55648a Binary files /dev/null and b/public/img/runanode/docker_desktoplogswindows.jpg differ diff --git a/public/img/runanode/docker_desktoplogswindows.png b/public/img/runanode/docker_desktoplogswindows.png deleted file mode 100644 index be2e784..0000000 Binary files a/public/img/runanode/docker_desktoplogswindows.png and /dev/null differ diff --git a/public/img/runanode/docker_desktopremove.jpg b/public/img/runanode/docker_desktopremove.jpg new file mode 100644 index 0000000..734d33a Binary files /dev/null and b/public/img/runanode/docker_desktopremove.jpg differ diff --git a/public/img/runanode/docker_desktopremove.png b/public/img/runanode/docker_desktopremove.png deleted file mode 100644 index c91f799..0000000 Binary files a/public/img/runanode/docker_desktopremove.png and /dev/null differ diff --git a/public/img/runanode/docker_desktopremovecontainer.jpg b/public/img/runanode/docker_desktopremovecontainer.jpg new file mode 100644 index 0000000..b5340fd Binary files /dev/null and b/public/img/runanode/docker_desktopremovecontainer.jpg differ diff --git a/public/img/runanode/docker_desktopstartup.jpg b/public/img/runanode/docker_desktopstartup.jpg new file mode 100644 index 0000000..bb8de42 Binary files /dev/null and b/public/img/runanode/docker_desktopstartup.jpg differ diff --git a/public/img/runanode/docker_desktopstartup.png b/public/img/runanode/docker_desktopstartup.png deleted file mode 100644 index b4534bb..0000000 Binary files a/public/img/runanode/docker_desktopstartup.png and /dev/null differ diff --git a/public/img/runanode/docker_desktopterminal.jpg b/public/img/runanode/docker_desktopterminal.jpg new file mode 100644 index 0000000..f14172b Binary files /dev/null and b/public/img/runanode/docker_desktopterminal.jpg differ diff --git a/public/img/runanode/docker_desktopterminal.png b/public/img/runanode/docker_desktopterminal.png deleted file mode 100644 index b2bce9c..0000000 Binary files a/public/img/runanode/docker_desktopterminal.png and /dev/null differ diff --git a/public/img/runanode/docker_desktopterminalmdsmac.jpg b/public/img/runanode/docker_desktopterminalmdsmac.jpg new file mode 100644 index 0000000..f7d0bdc Binary files /dev/null and b/public/img/runanode/docker_desktopterminalmdsmac.jpg differ diff --git a/public/img/runanode/docker_desktopterminalmdsmac.png b/public/img/runanode/docker_desktopterminalmdsmac.png deleted file mode 100644 index 22c5430..0000000 Binary files a/public/img/runanode/docker_desktopterminalmdsmac.png and /dev/null differ diff --git a/public/img/runanode/docker_desktopterminalstatusmac.jpg b/public/img/runanode/docker_desktopterminalstatusmac.jpg new file mode 100644 index 0000000..21b6441 Binary files /dev/null and b/public/img/runanode/docker_desktopterminalstatusmac.jpg differ diff --git a/public/img/runanode/docker_desktopterminalstatusmac.png b/public/img/runanode/docker_desktopterminalstatusmac.png deleted file mode 100644 index 224fc2d..0000000 Binary files a/public/img/runanode/docker_desktopterminalstatusmac.png and /dev/null differ diff --git a/public/img/runanode/docker_desktopwatchtower.jpg b/public/img/runanode/docker_desktopwatchtower.jpg new file mode 100644 index 0000000..0030450 Binary files /dev/null and b/public/img/runanode/docker_desktopwatchtower.jpg differ diff --git a/public/img/runanode/docker_desktopwatchtower.png b/public/img/runanode/docker_desktopwatchtower.png deleted file mode 100644 index 6e75489..0000000 Binary files a/public/img/runanode/docker_desktopwatchtower.png and /dev/null differ diff --git a/public/img/runanode/docker_vps_10loginasnewuser.jpg b/public/img/runanode/docker_vps_10loginasnewuser.jpg new file mode 100644 index 0000000..e49d56b Binary files /dev/null and b/public/img/runanode/docker_vps_10loginasnewuser.jpg differ diff --git a/public/img/runanode/docker_vps_10loginasnewuser.png b/public/img/runanode/docker_vps_10loginasnewuser.png deleted file mode 100644 index f900dcf..0000000 Binary files a/public/img/runanode/docker_vps_10loginasnewuser.png and /dev/null differ diff --git a/public/img/runanode/docker_vps_11getdocker.jpg b/public/img/runanode/docker_vps_11getdocker.jpg new file mode 100644 index 0000000..0f0a62f Binary files /dev/null and b/public/img/runanode/docker_vps_11getdocker.jpg differ diff --git a/public/img/runanode/docker_vps_11getdocker.png b/public/img/runanode/docker_vps_11getdocker.png deleted file mode 100644 index e864ca2..0000000 Binary files a/public/img/runanode/docker_vps_11getdocker.png and /dev/null differ diff --git a/public/img/runanode/docker_vps_12installdocker.jpg b/public/img/runanode/docker_vps_12installdocker.jpg new file mode 100644 index 0000000..36cf968 Binary files /dev/null and b/public/img/runanode/docker_vps_12installdocker.jpg differ diff --git a/public/img/runanode/docker_vps_12installdocker.png b/public/img/runanode/docker_vps_12installdocker.png deleted file mode 100644 index 1624237..0000000 Binary files a/public/img/runanode/docker_vps_12installdocker.png and /dev/null differ diff --git a/public/img/runanode/docker_vps_13exit.png b/public/img/runanode/docker_vps_13exit.png deleted file mode 100644 index 7b8e66d..0000000 Binary files a/public/img/runanode/docker_vps_13exit.png and /dev/null differ diff --git a/public/img/runanode/docker_vps_14switchuser.jpg b/public/img/runanode/docker_vps_14switchuser.jpg new file mode 100644 index 0000000..32b66b8 Binary files /dev/null and b/public/img/runanode/docker_vps_14switchuser.jpg differ diff --git a/public/img/runanode/docker_vps_14switchuser.png b/public/img/runanode/docker_vps_14switchuser.png deleted file mode 100644 index ca6797e..0000000 Binary files a/public/img/runanode/docker_vps_14switchuser.png and /dev/null differ diff --git a/public/img/runanode/docker_vps_15startminima.jpg b/public/img/runanode/docker_vps_15startminima.jpg new file mode 100644 index 0000000..d860019 Binary files /dev/null and b/public/img/runanode/docker_vps_15startminima.jpg differ diff --git a/public/img/runanode/docker_vps_15startminima.png b/public/img/runanode/docker_vps_15startminima.png deleted file mode 100644 index 3f4d1a8..0000000 Binary files a/public/img/runanode/docker_vps_15startminima.png and /dev/null differ diff --git a/public/img/runanode/docker_vps_16startwatchtower.jpg b/public/img/runanode/docker_vps_16startwatchtower.jpg new file mode 100644 index 0000000..f2f39ca Binary files /dev/null and b/public/img/runanode/docker_vps_16startwatchtower.jpg differ diff --git a/public/img/runanode/docker_vps_16startwatchtower.png b/public/img/runanode/docker_vps_16startwatchtower.png deleted file mode 100644 index 30b162b..0000000 Binary files a/public/img/runanode/docker_vps_16startwatchtower.png and /dev/null differ diff --git a/public/img/runanode/docker_vps_1login.png b/public/img/runanode/docker_vps_1login.png deleted file mode 100644 index b61f287..0000000 Binary files a/public/img/runanode/docker_vps_1login.png and /dev/null differ diff --git a/public/img/runanode/docker_vps_2checkoldnodes.png b/public/img/runanode/docker_vps_2checkoldnodes.png deleted file mode 100644 index bbfdb37..0000000 Binary files a/public/img/runanode/docker_vps_2checkoldnodes.png and /dev/null differ diff --git a/public/img/runanode/docker_vps_3removeoldnodes.png b/public/img/runanode/docker_vps_3removeoldnodes.png deleted file mode 100644 index a23d7aa..0000000 Binary files a/public/img/runanode/docker_vps_3removeoldnodes.png and /dev/null differ diff --git a/public/img/runanode/docker_vps_4removefiles.png b/public/img/runanode/docker_vps_4removefiles.png deleted file mode 100644 index a85604c..0000000 Binary files a/public/img/runanode/docker_vps_4removefiles.png and /dev/null differ diff --git a/public/img/runanode/docker_vps_5removefolder.png b/public/img/runanode/docker_vps_5removefolder.png deleted file mode 100644 index 93d8605..0000000 Binary files a/public/img/runanode/docker_vps_5removefolder.png and /dev/null differ diff --git a/public/img/runanode/docker_vps_6removeuser.png b/public/img/runanode/docker_vps_6removeuser.png deleted file mode 100644 index 0986ecd..0000000 Binary files a/public/img/runanode/docker_vps_6removeuser.png and /dev/null differ diff --git a/public/img/runanode/docker_vps_7adduser.png b/public/img/runanode/docker_vps_7adduser.png deleted file mode 100644 index 4fbb877..0000000 Binary files a/public/img/runanode/docker_vps_7adduser.png and /dev/null differ diff --git a/public/img/runanode/docker_vps_8adduser.jpg b/public/img/runanode/docker_vps_8adduser.jpg new file mode 100644 index 0000000..4ed3d05 Binary files /dev/null and b/public/img/runanode/docker_vps_8adduser.jpg differ diff --git a/public/img/runanode/docker_vps_8adduser.png b/public/img/runanode/docker_vps_8adduser.png deleted file mode 100644 index 41212d8..0000000 Binary files a/public/img/runanode/docker_vps_8adduser.png and /dev/null differ diff --git a/public/img/runanode/docker_vps_9giveuserperms.jpg b/public/img/runanode/docker_vps_9giveuserperms.jpg new file mode 100644 index 0000000..dfae8d7 Binary files /dev/null and b/public/img/runanode/docker_vps_9giveuserperms.jpg differ diff --git a/public/img/runanode/docker_vps_9giveuserperms.png b/public/img/runanode/docker_vps_9giveuserperms.png deleted file mode 100644 index 2ae8a59..0000000 Binary files a/public/img/runanode/docker_vps_9giveuserperms.png and /dev/null differ diff --git a/public/img/runanode/docker_vps_mds.png b/public/img/runanode/docker_vps_mds.png deleted file mode 100644 index a82f5c2..0000000 Binary files a/public/img/runanode/docker_vps_mds.png and /dev/null differ diff --git a/public/img/runanode/docker_vps_securitywarning.png b/public/img/runanode/docker_vps_securitywarning.png deleted file mode 100644 index b01338a..0000000 Binary files a/public/img/runanode/docker_vps_securitywarning.png and /dev/null differ diff --git a/public/img/runanode/docker_vps_terminal.jpg b/public/img/runanode/docker_vps_terminal.jpg new file mode 100644 index 0000000..9ba9bec Binary files /dev/null and b/public/img/runanode/docker_vps_terminal.jpg differ diff --git a/public/img/runanode/docker_vps_terminal.png b/public/img/runanode/docker_vps_terminal.png deleted file mode 100644 index ee1ba63..0000000 Binary files a/public/img/runanode/docker_vps_terminal.png and /dev/null differ diff --git a/public/img/runanode/docker_vps_terminalmds.jpg b/public/img/runanode/docker_vps_terminalmds.jpg new file mode 100644 index 0000000..f220504 Binary files /dev/null and b/public/img/runanode/docker_vps_terminalmds.jpg differ diff --git a/public/img/runanode/docker_vps_terminalmds.png b/public/img/runanode/docker_vps_terminalmds.png deleted file mode 100644 index a4cbe97..0000000 Binary files a/public/img/runanode/docker_vps_terminalmds.png and /dev/null differ diff --git a/public/img/runanode/docker_vps_terminalstatus.jpg b/public/img/runanode/docker_vps_terminalstatus.jpg new file mode 100644 index 0000000..bddb413 Binary files /dev/null and b/public/img/runanode/docker_vps_terminalstatus.jpg differ diff --git a/public/img/runanode/docker_vps_terminalstatus.png b/public/img/runanode/docker_vps_terminalstatus.png deleted file mode 100644 index 08ace44..0000000 Binary files a/public/img/runanode/docker_vps_terminalstatus.png and /dev/null differ diff --git a/public/img/runanode/docker_windowsinstall.png b/public/img/runanode/docker_windowsinstall.png deleted file mode 100644 index e40df46..0000000 Binary files a/public/img/runanode/docker_windowsinstall.png and /dev/null differ diff --git a/public/img/runanode/github-mark-white.png b/public/img/runanode/github-mark-white.png deleted file mode 100644 index 50b8175..0000000 Binary files a/public/img/runanode/github-mark-white.png and /dev/null differ diff --git a/public/img/runanode/github-mark.png b/public/img/runanode/github-mark.png deleted file mode 100644 index 6cb3b70..0000000 Binary files a/public/img/runanode/github-mark.png and /dev/null differ diff --git a/public/img/runanode/incentiveidfield.png b/public/img/runanode/incentiveidfield.png deleted file mode 100644 index 1b54447..0000000 Binary files a/public/img/runanode/incentiveidfield.png and /dev/null differ diff --git a/public/img/runanode/jointhenetwork.jpg b/public/img/runanode/jointhenetwork.jpg new file mode 100644 index 0000000..06fa5fe Binary files /dev/null and b/public/img/runanode/jointhenetwork.jpg differ diff --git a/public/img/runanode/jointhenetwork.png b/public/img/runanode/jointhenetwork.png deleted file mode 100644 index 976dd00..0000000 Binary files a/public/img/runanode/jointhenetwork.png and /dev/null differ diff --git a/public/img/runanode/jws-launch-button.png b/public/img/runanode/jws-launch-button.png deleted file mode 100644 index 87d1cf7..0000000 Binary files a/public/img/runanode/jws-launch-button.png and /dev/null differ diff --git a/public/img/runanode/launchsettings.png b/public/img/runanode/launchsettings.png deleted file mode 100644 index 393149c..0000000 Binary files a/public/img/runanode/launchsettings.png and /dev/null differ diff --git a/public/img/runanode/linux_1.png b/public/img/runanode/linux_1.png deleted file mode 100644 index 45a31e0..0000000 Binary files a/public/img/runanode/linux_1.png and /dev/null differ diff --git a/public/img/runanode/linux_2.png b/public/img/runanode/linux_2.png deleted file mode 100644 index eb3a7dc..0000000 Binary files a/public/img/runanode/linux_2.png and /dev/null differ diff --git a/public/img/runanode/manualstatus.png b/public/img/runanode/manualstatus.png deleted file mode 100644 index 8bb4577..0000000 Binary files a/public/img/runanode/manualstatus.png and /dev/null differ diff --git a/public/img/runanode/mds_dappoptions.jpg b/public/img/runanode/mds_dappoptions.jpg new file mode 100644 index 0000000..b158ab9 Binary files /dev/null and b/public/img/runanode/mds_dappoptions.jpg differ diff --git a/public/img/runanode/mds_dappoptions.png b/public/img/runanode/mds_dappoptions.png deleted file mode 100644 index 54a6b65..0000000 Binary files a/public/img/runanode/mds_dappoptions.png and /dev/null differ diff --git a/public/img/runanode/mds_dappstore.jpg b/public/img/runanode/mds_dappstore.jpg new file mode 100644 index 0000000..018803f Binary files /dev/null and b/public/img/runanode/mds_dappstore.jpg differ diff --git a/public/img/runanode/mds_dappstore.png b/public/img/runanode/mds_dappstore.png deleted file mode 100644 index 2b21b15..0000000 Binary files a/public/img/runanode/mds_dappstore.png and /dev/null differ diff --git a/public/img/runanode/mds_dappstoreread.jpg b/public/img/runanode/mds_dappstoreread.jpg new file mode 100644 index 0000000..5520c93 Binary files /dev/null and b/public/img/runanode/mds_dappstoreread.jpg differ diff --git a/public/img/runanode/mds_dappstoreread.png b/public/img/runanode/mds_dappstoreread.png deleted file mode 100644 index 002ea49..0000000 Binary files a/public/img/runanode/mds_dappstoreread.png and /dev/null differ diff --git a/public/img/runanode/mds_hub.jpg b/public/img/runanode/mds_hub.jpg new file mode 100644 index 0000000..47d0268 Binary files /dev/null and b/public/img/runanode/mds_hub.jpg differ diff --git a/public/img/runanode/mds_hub.png b/public/img/runanode/mds_hub.png deleted file mode 100644 index df5f9d5..0000000 Binary files a/public/img/runanode/mds_hub.png and /dev/null differ diff --git a/public/img/runanode/mds_installdapp.jpg b/public/img/runanode/mds_installdapp.jpg new file mode 100644 index 0000000..b59c81f Binary files /dev/null and b/public/img/runanode/mds_installdapp.jpg differ diff --git a/public/img/runanode/mds_installdapp.png b/public/img/runanode/mds_installdapp.png deleted file mode 100644 index c560491..0000000 Binary files a/public/img/runanode/mds_installdapp.png and /dev/null differ diff --git a/public/img/runanode/mds_installdapp2.png b/public/img/runanode/mds_installdapp2.png deleted file mode 100644 index b211296..0000000 Binary files a/public/img/runanode/mds_installdapp2.png and /dev/null differ diff --git a/public/img/runanode/mds_installdapp3.jpg b/public/img/runanode/mds_installdapp3.jpg new file mode 100644 index 0000000..72490a0 Binary files /dev/null and b/public/img/runanode/mds_installdapp3.jpg differ diff --git a/public/img/runanode/mds_installdapp3.png b/public/img/runanode/mds_installdapp3.png deleted file mode 100644 index 5ae4435..0000000 Binary files a/public/img/runanode/mds_installdapp3.png and /dev/null differ diff --git a/public/img/runanode/mds_login.jpg b/public/img/runanode/mds_login.jpg new file mode 100644 index 0000000..1922111 Binary files /dev/null and b/public/img/runanode/mds_login.jpg differ diff --git a/public/img/runanode/mds_login.png b/public/img/runanode/mds_login.png deleted file mode 100644 index 0d65d32..0000000 Binary files a/public/img/runanode/mds_login.png and /dev/null differ diff --git a/public/img/runanode/mds_pending.jpg b/public/img/runanode/mds_pending.jpg new file mode 100644 index 0000000..ac8a9a1 Binary files /dev/null and b/public/img/runanode/mds_pending.jpg differ diff --git a/public/img/runanode/mds_pending.png b/public/img/runanode/mds_pending.png deleted file mode 100644 index 3114e1d..0000000 Binary files a/public/img/runanode/mds_pending.png and /dev/null differ diff --git a/public/img/runanode/mds_pendingicon.jpg b/public/img/runanode/mds_pendingicon.jpg new file mode 100644 index 0000000..e581e80 Binary files /dev/null and b/public/img/runanode/mds_pendingicon.jpg differ diff --git a/public/img/runanode/mds_pendingicon.png b/public/img/runanode/mds_pendingicon.png deleted file mode 100644 index fc6e8f7..0000000 Binary files a/public/img/runanode/mds_pendingicon.png and /dev/null differ diff --git a/public/img/runanode/mds_updateperms.jpg b/public/img/runanode/mds_updateperms.jpg new file mode 100644 index 0000000..6e4570a Binary files /dev/null and b/public/img/runanode/mds_updateperms.jpg differ diff --git a/public/img/runanode/mds_updateperms.png b/public/img/runanode/mds_updateperms.png deleted file mode 100644 index 64edc4e..0000000 Binary files a/public/img/runanode/mds_updateperms.png and /dev/null differ diff --git a/public/img/runanode/mds_writeaccess.jpg b/public/img/runanode/mds_writeaccess.jpg new file mode 100644 index 0000000..6806034 Binary files /dev/null and b/public/img/runanode/mds_writeaccess.jpg differ diff --git a/public/img/runanode/mds_writeaccess.png b/public/img/runanode/mds_writeaccess.png deleted file mode 100644 index 1b30ebc..0000000 Binary files a/public/img/runanode/mds_writeaccess.png and /dev/null differ diff --git a/public/img/runanode/rpcclient.jpg b/public/img/runanode/rpcclient.jpg new file mode 100644 index 0000000..6d8116e Binary files /dev/null and b/public/img/runanode/rpcclient.jpg differ diff --git a/public/img/runanode/settingsicon.jpg b/public/img/runanode/settingsicon.jpg new file mode 100644 index 0000000..91527f3 Binary files /dev/null and b/public/img/runanode/settingsicon.jpg differ diff --git a/public/img/runanode/settingsicon.png b/public/img/runanode/settingsicon.png deleted file mode 100644 index ec4522e..0000000 Binary files a/public/img/runanode/settingsicon.png and /dev/null differ diff --git a/public/img/runanode/shareconnections.jpg b/public/img/runanode/shareconnections.jpg new file mode 100644 index 0000000..170ee3f Binary files /dev/null and b/public/img/runanode/shareconnections.jpg differ diff --git a/public/img/runanode/shareconnections.png b/public/img/runanode/shareconnections.png deleted file mode 100644 index f734504..0000000 Binary files a/public/img/runanode/shareconnections.png and /dev/null differ diff --git a/public/img/runanode/shareconnectionssetting.png b/public/img/runanode/shareconnectionssetting.png deleted file mode 100644 index 5f6f244..0000000 Binary files a/public/img/runanode/shareconnectionssetting.png and /dev/null differ diff --git a/public/img/runanode/startupwin11.jpg b/public/img/runanode/startupwin11.jpg new file mode 100644 index 0000000..6d6e7a5 Binary files /dev/null and b/public/img/runanode/startupwin11.jpg differ diff --git a/public/img/runanode/startupwin11.png b/public/img/runanode/startupwin11.png deleted file mode 100644 index 5a46a70..0000000 Binary files a/public/img/runanode/startupwin11.png and /dev/null differ diff --git a/public/img/runanode/windows_1.png b/public/img/runanode/windows_1.png deleted file mode 100644 index 3b5b369..0000000 Binary files a/public/img/runanode/windows_1.png and /dev/null differ diff --git a/public/img/runanode/windows_2.png b/public/img/runanode/windows_2.png deleted file mode 100644 index 1901c91..0000000 Binary files a/public/img/runanode/windows_2.png and /dev/null differ diff --git a/public/img/runanode/windows_3.png b/public/img/runanode/windows_3.png deleted file mode 100644 index eb3a7dc..0000000 Binary files a/public/img/runanode/windows_3.png and /dev/null differ diff --git a/public/img/token/circulatingSupplyTGEDM.svg b/public/img/token/circulatingSupplyTGEDM.svg deleted file mode 100644 index 235c1d7..0000000 --- a/public/img/token/circulatingSupplyTGEDM.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/img/token/circulatingSupplyTGELM.svg b/public/img/token/circulatingSupplyTGELM.svg deleted file mode 100644 index 0ca8fc7..0000000 --- a/public/img/token/circulatingSupplyTGELM.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/img/token/loyaltyProgram&GrantsCirculatingSupplyDM.svg b/public/img/token/loyaltyProgram&GrantsCirculatingSupplyDM.svg deleted file mode 100644 index bf66c99..0000000 --- a/public/img/token/loyaltyProgram&GrantsCirculatingSupplyDM.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/img/token/loyaltyProgram&GrantsCirculatingSupplyLM.svg b/public/img/token/loyaltyProgram&GrantsCirculatingSupplyLM.svg deleted file mode 100644 index 624598f..0000000 --- a/public/img/token/loyaltyProgram&GrantsCirculatingSupplyLM.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/img/token/newpublicSaleCirculatingSupplyDM.svg b/public/img/token/newpublicSaleCirculatingSupplyDM.svg deleted file mode 100644 index e29b03c..0000000 --- a/public/img/token/newpublicSaleCirculatingSupplyDM.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/img/token/newpublicSaleCirculatingSupplyLM.svg b/public/img/token/newpublicSaleCirculatingSupplyLM.svg deleted file mode 100644 index 58da68a..0000000 --- a/public/img/token/newpublicSaleCirculatingSupplyLM.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/img/token/nodeIncentivesCirculatingSupplyDM.svg b/public/img/token/nodeIncentivesCirculatingSupplyDM.svg deleted file mode 100644 index f4f1b1e..0000000 --- a/public/img/token/nodeIncentivesCirculatingSupplyDM.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/img/token/nodeIncentivesCirculatingSupplyLM.svg b/public/img/token/nodeIncentivesCirculatingSupplyLM.svg deleted file mode 100644 index 5883c58..0000000 --- a/public/img/token/nodeIncentivesCirculatingSupplyLM.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/img/token/notused_privateCirculatingSupplyDM.svg b/public/img/token/notused_privateCirculatingSupplyDM.svg deleted file mode 100644 index 8654bf4..0000000 --- a/public/img/token/notused_privateCirculatingSupplyDM.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/img/token/notused_privateCirculatingSupplyLM.svg b/public/img/token/notused_privateCirculatingSupplyLM.svg deleted file mode 100644 index e08b741..0000000 --- a/public/img/token/notused_privateCirculatingSupplyLM.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/img/token/privateAllocationCirculatingSupplyDM.svg b/public/img/token/privateAllocationCirculatingSupplyDM.svg deleted file mode 100644 index 84418e7..0000000 --- a/public/img/token/privateAllocationCirculatingSupplyDM.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/img/token/privateAllocationCirculatingSupplyLM.svg b/public/img/token/privateAllocationCirculatingSupplyLM.svg deleted file mode 100644 index d5cfad9..0000000 --- a/public/img/token/privateAllocationCirculatingSupplyLM.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/img/token/tokenDistributionCharts1Dm.svg b/public/img/token/tokenDistributionCharts1Dm.svg deleted file mode 100644 index 6dc5e05..0000000 --- a/public/img/token/tokenDistributionCharts1Dm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/img/token/tokenDistributionCharts1Lm.svg b/public/img/token/tokenDistributionCharts1Lm.svg deleted file mode 100644 index b99a72c..0000000 --- a/public/img/token/tokenDistributionCharts1Lm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/img/token/totalCirculatingSupplyDM.svg b/public/img/token/totalCirculatingSupplyDM.svg deleted file mode 100644 index 8d068e7..0000000 --- a/public/img/token/totalCirculatingSupplyDM.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/img/token/totalCirculatingSupplyLM.svg b/public/img/token/totalCirculatingSupplyLM.svg deleted file mode 100644 index a643495..0000000 --- a/public/img/token/totalCirculatingSupplyLM.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/img/tutorial/docsVersionDropdown.png b/public/img/tutorial/docsVersionDropdown.png deleted file mode 100644 index ff1cbe6..0000000 Binary files a/public/img/tutorial/docsVersionDropdown.png and /dev/null differ diff --git a/public/img/tutorial/localeDropdown.png b/public/img/tutorial/localeDropdown.png deleted file mode 100644 index d7163f9..0000000 Binary files a/public/img/tutorial/localeDropdown.png and /dev/null differ diff --git a/public/join-the-network.png b/public/join-the-network.png deleted file mode 100644 index 976dd00..0000000 Binary files a/public/join-the-network.png and /dev/null differ diff --git a/public/mdshub_old.png b/public/mdshub_old.png deleted file mode 100644 index 07aa329..0000000 Binary files a/public/mdshub_old.png and /dev/null differ diff --git a/public/settings-icon.jpg b/public/settings-icon.jpg new file mode 100644 index 0000000..ffd39d4 Binary files /dev/null and b/public/settings-icon.jpg differ diff --git a/public/settings-icon.png b/public/settings-icon.png deleted file mode 100644 index ec4522e..0000000 Binary files a/public/settings-icon.png and /dev/null differ diff --git a/script.js b/script.js new file mode 100644 index 0000000..588ae7b --- /dev/null +++ b/script.js @@ -0,0 +1,61 @@ +// script.js +const fs = require("fs") +const path = require("path") + +// Function to replace .png with .jpg in a file +const replacePngWithJpg = (filePath) => { + // Read the file content + fs.readFile(filePath, "utf8", (err, data) => { + if (err) { + console.error(`Error reading file ${filePath}:`, err) + return + } + + // Replace .png with .jpg + const updatedData = data.replace(/\.png/g, ".jpg") + + // Write the updated content back to the file + fs.writeFile(filePath, updatedData, "utf8", (err) => { + if (err) { + console.error(`Error writing file ${filePath}:`, err) + } else { + console.log(`Updated ${filePath}`) + } + }) + }) +} + +// Function to read all files in a directory +const readFilesInDirectory = (dirPath) => { + fs.readdir(dirPath, (err, files) => { + if (err) { + console.error(`Error reading directory ${dirPath}:`, err) + return + } + + files.forEach((file) => { + const filePath = path.join(dirPath, file) + fs.stat(filePath, (err, stats) => { + if (err) { + console.error(`Error getting stats for file ${filePath}:`, err) + return + } + + // If it's a directory, read files in it + if (stats.isDirectory()) { + readFilesInDirectory(filePath) + } else if ( + path.extname(file) === ".mdx" || + path.extname(file) === ".md" + ) { + // Process .mdx and .md files + replacePngWithJpg(filePath) + } + }) + }) + }) +} + +// Start reading files from the content directory +const contentDirectory = path.join(__dirname, "content") // Adjust the path as necessary +readFilesInDirectory(contentDirectory) diff --git a/tailwind.config.ts b/tailwind.config.ts index de90c24..0eb0cf8 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -10,6 +10,7 @@ const { export default { presets: [createPreset()], content: [ + "./__minidapp/**/*.{ts,tsx}", "./components/**/*.{ts,tsx}", "./app/**/*.{ts,tsx}", "./content/**/*.{md,mdx}", diff --git a/tree.json b/tree.json new file mode 100644 index 0000000..cbfaf4d --- /dev/null +++ b/tree.json @@ -0,0 +1,986 @@ +{ + "name": "", + "children": [ + { + "type": "folder", + "name": "Core", + "root": true, + "index": { + "type": "page", + "name": "About Minima", + "url": "/docs/core" + }, + "children": [ + { + "type": "separator", + "name": "Minima" + }, + { + "type": "page", + "name": "About Minima", + "url": "/docs/core" + }, + { + "type": "page", + "name": "Get Involved", + "url": "/docs/core/get-involved" + }, + { + "type": "page", + "name": "Use Cases", + "url": "/docs/core/use-cases" + }, + { + "type": "page", + "name": "Tokenomics", + "url": "/docs/core/tokenomics" + }, + { + "type": "separator", + "name": "Terms of Use" + }, + { + "type": "page", + "name": "MiniDapp Terms of Use", + "url": "/docs/core/minidapp-terms" + }, + { + "type": "page", + "name": "Website Terms of Use", + "url": "/docs/core/website-terms" + }, + { + "type": "page", + "name": "Minima Privacy Policy", + "url": "/docs/core/minima-privacy-policy" + }, + { + "type": "page", + "name": "Presale Privacy Policy", + "url": "/docs/core/presale" + }, + { + "type": "separator", + "name": " Whitepaper" + }, + { + "type": "page", + "name": "Minima Whitepaper", + "url": " https://docs.minima.global/minima_pdfs/Minima_Whitepaper_v11.pdf", + "external": true + } + ] + }, + { + "type": "folder", + "name": "Development", + "root": true, + "index": { + "type": "page", + "name": "Introduction", + "icon": { + "type": "div", + "key": null, + "ref": null, + "props": { + "className": "rounded-md border bg-gradient-to-b from-secondary p-1 shadow-sm", + "children": { + "type": { + "displayName": "Code" + }, + "key": null, + "ref": null, + "props": {}, + "_owner": null + } + }, + "_owner": null + }, + "url": "/docs/development" + }, + "children": [ + { + "type": "separator", + "name": "Get Started" + }, + { + "type": "page", + "name": "Introduction", + "icon": { + "type": "div", + "key": null, + "ref": null, + "props": { + "className": "rounded-md border bg-gradient-to-b from-secondary p-1 shadow-sm", + "children": { + "type": { + "displayName": "Code" + }, + "key": null, + "ref": null, + "props": {}, + "_owner": null + } + }, + "_owner": null + }, + "url": "/docs/development" + }, + { + "type": "page", + "name": "Single Node Testnet", + "icon": { + "type": "div", + "key": null, + "ref": null, + "props": { + "className": "rounded-md border bg-gradient-to-b from-secondary p-1 shadow-sm", + "children": { + "type": { + "displayName": "Component" + }, + "key": null, + "ref": null, + "props": {}, + "_owner": null + } + }, + "_owner": null + }, + "url": "/docs/development/start-testnet" + }, + { + "type": "page", + "name": "Multiple Node Testnet", + "icon": { + "type": "div", + "key": null, + "ref": null, + "props": { + "className": "rounded-md border bg-gradient-to-b from-secondary p-1 shadow-sm", + "children": { + "type": { + "displayName": "Network" + }, + "key": null, + "ref": null, + "props": {}, + "_owner": null + } + }, + "_owner": null + }, + "url": "/docs/development/testnet-multiple" + }, + { + "type": "page", + "name": "Terminal Commands", + "icon": { + "type": "div", + "key": null, + "ref": null, + "props": { + "className": "rounded-md border bg-gradient-to-b from-secondary p-1 shadow-sm", + "children": { + "type": { + "displayName": "Terminal" + }, + "key": null, + "ref": null, + "props": {}, + "_owner": null + } + }, + "_owner": null + }, + "url": "/docs/development/terminal-commands" + }, + { + "type": "separator", + "name": "MiniDapp Tutorials" + }, + { + "type": "page", + "name": "MiniDapp Hub", + "url": "/docs/development/start" + }, + { + "type": "page", + "name": "Basic MiniDapp", + "url": "/docs/development/basic-minidapp" + }, + { + "type": "page", + "name": "Interactive MiniDapp", + "url": "/docs/development/interactive-minidapp" + }, + { + "type": "page", + "name": "React MiniDapp", + "url": "/docs/development/react-minidapp" + }, + { + "type": "page", + "name": "MiniDapp Stores", + "url": "/docs/development/minidapp-stores" + }, + { + "type": "separator", + "name": "Smart Contract Tutorials" + }, + { + "type": "page", + "name": "Pruning", + "url": "/docs/development/pruning" + }, + { + "type": "page", + "name": "Tokens", + "url": "/docs/development/tokens" + }, + { + "type": "folder", + "name": "Layer 1 - On Chain ", + "root": false, + "index": { + "type": "page", + "name": "Introduction", + "url": "/docs/development/layer1" + }, + "children": [ + { + "type": "page", + "name": "Basic signed contract", + "url": "/docs/development/layer1/basic-contract" + }, + { + "type": "page", + "name": "Simple Transaction", + "url": "/docs/development/layer1/simple-txn" + }, + { + "type": "page", + "name": "Time Lock Contract", + "url": "/docs/development/layer1/time-lock-contract" + }, + { + "type": "page", + "name": "Multisig Contract", + "url": "/docs/development/layer1/multisig" + }, + { + "type": "page", + "name": "M of N Multisig", + "url": "/docs/development/layer1/mofnmultisig" + }, + { + "type": "page", + "name": "The Vault", + "url": "/docs/development/layer1/thevault" + }, + { + "type": "page", + "name": "Slow Cash", + "url": "/docs/development/layer1/slowcash" + }, + { + "type": "page", + "name": "Hashed Timelock Contract", + "url": "/docs/development/layer1/hashed-timelock-contract" + }, + { + "type": "page", + "name": "Exchange Contract", + "url": "/docs/development/layer1/exchange-contract" + }, + { + "type": "page", + "name": "Flash Cash", + "url": "/docs/development/layer1/flashcash" + }, + { + "type": "page", + "name": "MAST Contracts", + "url": "/docs/development/layer1/mast-contract" + }, + { + "type": "page", + "name": "The Vault", + "url": "/docs/development/layer1/thevault" + }, + { + "type": "page", + "name": "Coin Flip", + "url": "/docs/development/layer1/coinflip" + } + ] + }, + { + "type": "folder", + "name": "Layer 2 - Off Chain ", + "root": false, + "index": { + "type": "page", + "name": "Introduction", + "url": "/docs/development/layer2" + }, + "children": [ + { + "type": "page", + "name": "Uni-directional Channel", + "url": "/docs/development/layer2/uni-directional-channel" + }, + { + "type": "page", + "name": "Bi-directional Payments", + "url": "/docs/development/layer2/bi-directional-payments" + }, + { + "type": "page", + "name": "ELTOO Channel", + "url": "/docs/development/layer2/eltoo-channel" + }, + { + "type": "page", + "name": "ELTOO Pre-Coin Txn", + "url": "/docs/development/layer2/eltoo-precoin" + }, + { + "type": "page", + "name": "ELTOO Floating Coin", + "url": "/docs/development/layer2/eltoo-floating-coin" + }, + { + "type": "page", + "name": "Full ELTOO Sequence", + "url": "/docs/development/layer2/eltoo-full-sequence" + }, + { + "type": "page", + "name": "State Chains", + "url": "/docs/development/layer2/state-chains" + }, + { + "type": "page", + "name": "Coin flip V2", + "url": "/docs/development/layer2/coinflipv2" + } + ] + }, + { + "type": "separator", + "name": "Smart Contract Examples" + }, + { + "type": "page", + "name": "Future Cash", + "url": "/docs/development/future-cash" + }, + { + "type": "page", + "name": "Vestr", + "url": "/docs/development/vestr" + } + ] + }, + { + "type": "folder", + "name": "Learn", + "root": true, + "index": { + "type": "page", + "name": "Core Concepts", + "icon": { + "type": "div", + "key": null, + "ref": null, + "props": { + "className": "rounded-md border bg-gradient-to-b from-secondary p-1 shadow-sm", + "children": { + "type": { + "displayName": "Album" + }, + "key": null, + "ref": null, + "props": {}, + "_owner": null + } + }, + "_owner": null + }, + "url": "/docs/learn" + }, + "children": [ + { + "type": "page", + "name": "Core Concepts", + "icon": { + "type": "div", + "key": null, + "ref": null, + "props": { + "className": "rounded-md border bg-gradient-to-b from-secondary p-1 shadow-sm", + "children": { + "type": { + "displayName": "Album" + }, + "key": null, + "ref": null, + "props": {}, + "_owner": null + } + }, + "_owner": null + }, + "url": "/docs/learn" + }, + { + "type": "page", + "name": "Network Overview", + "icon": { + "type": "div", + "key": null, + "ref": null, + "props": { + "className": "rounded-md border bg-gradient-to-b from-secondary p-1 shadow-sm", + "children": { + "type": { + "displayName": "Layers" + }, + "key": null, + "ref": null, + "props": {}, + "_owner": null + } + }, + "_owner": null + }, + "url": "/docs/learn/network" + }, + { + "type": "page", + "name": "Glossary", + "icon": { + "type": "div", + "key": null, + "ref": null, + "props": { + "className": "rounded-md border bg-gradient-to-b from-secondary p-1 shadow-sm", + "children": { + "type": { + "displayName": "Book" + }, + "key": null, + "ref": null, + "props": {}, + "_owner": null + } + }, + "_owner": null + }, + "url": "/docs/learn/glossary" + }, + { + "type": "separator", + "name": "Minima" + }, + { + "type": "page", + "name": "Transactions", + "url": "/docs/learn/transactions" + }, + { + "type": "page", + "name": "MMR Database", + "url": "/docs/learn/mmr-database" + }, + { + "type": "page", + "name": "TxPoW Units & Blocks", + "url": "/docs/learn/txpow" + }, + { + "type": "page", + "name": "The Blockchain", + "url": "/docs/learn/the-blockchain" + }, + { + "type": "page", + "name": "Mining and Consensus", + "url": "/docs/learn/miningandconsensus" + }, + { + "type": "page", + "name": "Coloured Coins", + "url": "/docs/learn/coloured-coins" + }, + { + "type": "page", + "name": "Keys and Signatures", + "url": "/docs/learn/keysandsignatures" + }, + { + "type": "page", + "name": "Scripting", + "url": "/docs/learn/scripting" + }, + { + "type": "page", + "name": "Quantum Security", + "url": "/docs/learn/quantumsecurity" + }, + { + "type": "page", + "name": "Archive Nodes", + "url": "/docs/learn/archivenodes" + }, + { + "type": "separator", + "name": "Maxima" + }, + { + "type": "page", + "name": "About", + "url": "/docs/learn/about-maxima" + }, + { + "type": "page", + "name": "Contacts", + "url": "/docs/learn/maxima-contacts" + }, + { + "type": "page", + "name": "Messaging", + "url": "/docs/learn/maxima-messaging" + }, + { + "type": "page", + "name": "Location Service", + "url": "/docs/learn/maxima-mls" + }, + { + "type": "page", + "name": "FAQ", + "url": "/docs/learn/maxima-faq" + }, + { + "type": "separator", + "name": "MiniDapps" + }, + { + "type": "page", + "name": "About", + "url": "/docs/learn/about-minidapps" + }, + { + "type": "page", + "name": "MiniDapp Structure", + "url": "/docs/learn/minidapp-structure" + }, + { + "type": "page", + "name": "Config File", + "url": "/docs/learn/minidapp-configfile" + }, + { + "type": "page", + "name": "mds.js library", + "url": "/docs/learn/minidapp-mds" + }, + { + "type": "page", + "name": "Events", + "url": "/docs/learn/minidapp-events" + }, + { + "type": "page", + "name": "MiniBrowser", + "url": "/docs/learn/mini-browser" + }, + { + "type": "page", + "name": "service.js", + "url": "/docs/learn/service-js" + }, + { + "type": "separator", + "name": "Smart Contracts" + }, + { + "type": "page", + "name": "Transaction Basics", + "url": "/docs/learn/contract-basics" + }, + { + "type": "page", + "name": "KISS VM", + "url": "/docs/learn/contract-kissvm" + }, + { + "type": "page", + "name": "Scripting Basics", + "url": "/docs/learn/contract-scripting" + }, + { + "type": "page", + "name": "Token/NFT scripts", + "url": "/docs/learn/contract-tokenscript" + } + ] + }, + { + "type": "folder", + "name": "Run a node", + "root": true, + "index": { + "type": "page", + "name": "Quick Start", + "icon": { + "type": "div", + "key": null, + "ref": null, + "props": { + "className": "rounded-md border bg-gradient-to-b from-secondary p-1 shadow-sm", + "children": { + "type": { + "displayName": "Zap" + }, + "key": null, + "ref": null, + "props": {}, + "_owner": null + } + }, + "_owner": null + }, + "url": "/docs/run-a-node" + }, + "children": [ + { + "type": "page", + "name": "Quick Start", + "icon": { + "type": "div", + "key": null, + "ref": null, + "props": { + "className": "rounded-md border bg-gradient-to-b from-secondary p-1 shadow-sm", + "children": { + "type": { + "displayName": "Zap" + }, + "key": null, + "ref": null, + "props": {}, + "_owner": null + } + }, + "_owner": null + }, + "url": "/docs/run-a-node" + }, + { + "type": "page", + "name": "System Requirements", + "icon": { + "type": "div", + "key": null, + "ref": null, + "props": { + "className": "rounded-md border bg-gradient-to-b from-secondary p-1 shadow-sm", + "children": { + "type": { + "displayName": "BatteryFull" + }, + "key": null, + "ref": null, + "props": {}, + "_owner": null + } + }, + "_owner": null + }, + "url": "/docs/run-a-node/system-requirements" + }, + { + "type": "separator", + "name": "Select your Platform" + }, + { + "type": "page", + "name": "Android", + "url": "/docs/run-a-node/android" + }, + { + "type": "page", + "name": "Windows", + "url": "/docs/run-a-node/windows" + }, + { + "type": "page", + "name": "Mac", + "url": "/docs/run-a-node/mac" + }, + { + "type": "page", + "name": "Docker Desktop", + "url": "/docs/run-a-node/docker-desktop" + }, + { + "type": "page", + "name": "Linux VPS (Docker)", + "url": "/docs/run-a-node/linux-vps" + }, + { + "type": "page", + "name": "Linux VPS (Systemd service)", + "url": "/docs/run-a-node/linux-vps-system" + }, + { + "type": "page", + "name": "Desktop Command Line", + "url": "/docs/run-a-node/desktop-cli" + }, + { + "type": "separator", + "name": "Archive Node" + }, + { + "type": "page", + "name": "Run an Archive Node", + "url": "/docs/run-a-node/archive-node" + }, + { + "type": "separator", + "name": "Mega Node (NEW)" + }, + { + "type": "page", + "name": "Run a Mega Node", + "url": "/docs/run-a-node/mega-node" + }, + { + "type": "page", + "name": "Host a Public Wallet", + "url": "/docs/run-a-node/public-wallet" + } + ] + }, + { + "type": "folder", + "name": "User Guides", + "root": true, + "index": { + "type": "page", + "name": "Login to Minima", + "icon": { + "type": "div", + "key": null, + "ref": null, + "props": { + "className": "rounded-md border bg-gradient-to-b from-secondary p-1 shadow-sm", + "children": { + "type": { + "displayName": "KeyRound" + }, + "key": null, + "ref": null, + "props": {}, + "_owner": null + } + }, + "_owner": null + }, + "url": "/docs/user-guides" + }, + "children": [ + { + "type": "separator", + "name": "Guides" + }, + { + "type": "page", + "name": "Login to Minima", + "icon": { + "type": "div", + "key": null, + "ref": null, + "props": { + "className": "rounded-md border bg-gradient-to-b from-secondary p-1 shadow-sm", + "children": { + "type": { + "displayName": "KeyRound" + }, + "key": null, + "ref": null, + "props": {}, + "_owner": null + } + }, + "_owner": null + }, + "url": "/docs/user-guides" + }, + { + "type": "page", + "name": "Join the network", + "icon": { + "type": "div", + "key": null, + "ref": null, + "props": { + "className": "rounded-md border bg-gradient-to-b from-secondary p-1 shadow-sm", + "children": { + "type": { + "displayName": "Network" + }, + "key": null, + "ref": null, + "props": {}, + "_owner": null + } + }, + "_owner": null + }, + "url": "/docs/user-guides/jointhenetwork" + }, + { + "type": "page", + "name": "Secure your seedphrase", + "icon": { + "type": "div", + "key": null, + "ref": null, + "props": { + "className": "rounded-md border bg-gradient-to-b from-secondary p-1 shadow-sm", + "children": { + "type": { + "displayName": "Lock" + }, + "key": null, + "ref": null, + "props": {}, + "_owner": null + } + }, + "_owner": null + }, + "url": "/docs/user-guides/secure-your-seedphrase" + }, + { + "type": "separator", + "name": "General" + }, + { + "type": "page", + "name": "Check your node status", + "url": "/docs/user-guides/check-node-status" + }, + { + "type": "page", + "name": "Set your profile", + "url": "/docs/user-guides/set-your-profile" + }, + { + "type": "separator", + "name": "Security" + }, + { + "type": "page", + "name": "Lock your wallet", + "url": "/docs/user-guides/lock-your-wallet" + }, + { + "type": "page", + "name": "Backup your wallet", + "url": "/docs/user-guides/backup-your-wallet" + }, + { + "type": "separator", + "name": "MiniDapp System" + }, + { + "type": "page", + "name": "MiniDapp Permissions", + "url": "/docs/user-guides/minidapp-permissions" + }, + { + "type": "page", + "name": "Approve Transactions", + "url": "/docs/user-guides/approve-transactions" + }, + { + "type": "page", + "name": "Managing MiniDapps", + "url": "/docs/user-guides/manage-minidapps" + }, + { + "type": "separator", + "name": "Maxima" + }, + { + "type": "page", + "name": "Manage Maxima contacts", + "url": "/docs/user-guides/maxima-contacts" + }, + { + "type": "page", + "name": "Advanced Maxima Options", + "url": "/docs/user-guides/advanced-maxima-options" + }, + { + "type": "separator", + "name": "Node Recovery" + }, + { + "type": "page", + "name": "Recover Options", + "url": "/docs/user-guides/node-recovery/recover-options" + }, + { + "type": "page", + "name": "Chain Resync", + "url": "/docs/user-guides/node-recovery/chain-resync" + }, + { + "type": "page", + "name": "Restoring your backup", + "url": "/docs/user-guides/node-recovery/restore-backup" + }, + { + "type": "page", + "name": "Import your seed phrase", + "url": "/docs/user-guides/node-recovery/import-seed-phrase" + }, + { + "type": "separator", + "name": "Archive Node" + }, + { + "type": "page", + "name": "Archive File Export", + "url": "/docs/user-guides/manage-archive-node/archive-export" + }, + { + "type": "page", + "name": "Exporting to MySQL", + "url": "/docs/user-guides/manage-archive-node/archive-export-sql" + }, + { + "type": "separator", + "name": "Advanced" + }, + { + "type": "page", + "name": "Cold Storage setup", + "url": "/docs/user-guides/advanced/cold-storage" + }, + { + "type": "page", + "name": "Log messages", + "url": "/docs/user-guides/advanced/log-messages" + } + ] + } + ] +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 47d1cd9..d0bc51c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -24,6 +24,12 @@ } ] }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + "__minidapp/Home/title-bar.jsx" + ], "exclude": ["node_modules"] }