-
- )
-}
+"use client"
+import { cn } from "@/app/lib/utils"
+import Link from "next/link"
+import { SparklesCore } from "./sparkles"
+import { motion } from "framer-motion"
+export function DocsHomePage() {
+ 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 full 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: "Knowledge Base",
+ description: "A deep dive into Minima and Maxima",
+ link: "/docs/learn",
+ icon: (
+
+ ),
+ },
+ {
+ title: "Developer Tutorials",
+ description:
+ "Build decentralized applications and create smart contracts on Minima",
+ link: "/docs/development",
+ 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}
+
+
+
+ )
+}
diff --git a/components/provider.tsx b/components/provider.tsx
index ad09e87..881d5b2 100644
--- a/components/provider.tsx
+++ b/components/provider.tsx
@@ -1,19 +1,23 @@
-"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}
-
- )
-}
+"use client"
+import { RootProvider } from "fumadocs-ui/provider"
+import Script from "next/script"
+import { ReactNode, useEffect, useState } from "react"
+
+export function Provider({
+ children,
+ nonce,
+}: {
+ children: ReactNode
+ nonce: string | undefined
+}) {
+ // prevent hydration error
+ const [isMounted, setIsMounted] = useState(false)
+
+ useEffect(() => {
+ setIsMounted(true)
+ }, [])
+
+ if (!isMounted) return null
+
+ return {children}
+}
diff --git a/components/sparkles.tsx b/components/sparkles.tsx
index 9970da6..4fd7cf8 100644
--- a/components/sparkles.tsx
+++ b/components/sparkles.tsx
@@ -1,438 +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 "next-themes";
-
-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 { resolvedTheme } = useTheme()
-
- const particlesLoaded = async (container?: Container) => {
- if (container) {
- console.log(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,
- }}
- />
- )}
-
- );
-};
+"use client"
+import React, { useId } 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
+}
+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 { resolvedTheme } = 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/content/docs/core/about-minima.mdx b/content/docs/core/about-minima.mdx
new file mode 100644
index 0000000..d0a4d20
--- /dev/null
+++ b/content/docs/core/about-minima.mdx
@@ -0,0 +1,33 @@
+---
+title: What is Minima?
+description: Learn more about Minima
+tag: core
+---
+
+As the only decentralised layer 1 blockchain lightweight enough to run entirely on mobile and IoT (Internet of Things) silicon chips - and versatile enough to scale across almost any physical device - Minima is unique in its ability to provide Web3 based infrastructure, providing everyday solutions on everyday devices.
+
+Minima provides utility beyond what is already possible, on a completely decentralised blockchain. Additionally including a secure, peer-to-peer messaging system - Maxima - which enables decentralised transfer of information.
+
+Minima’s technology is compact, quantum-resistant, and secured by every single device on the network.
+
+
+
+
+
+
+## Who is Minima for?
+
+Minima primarily caters to four groups, creating value for each in different ways:
+
+**Enterprises** benefit by deploying Minima's lightweight and versatile nodes that naturally scale for an increasing user base and reduce infrastructure costs.
+
+**Decentralised Physical Infrastructure Networks** (DePINs) that build on Minima can quickly prove the value or concept of their project before building and scaling on Minima.
+
+**Developers** benefit from open source code, easy-to-create decentralised applications (MiniDapps), comprehensive documentation and support materials.
+
+**Individuals** interested in decentralised and trustless payments can start a Minima node and launch projects, tokenise real-world assets, and participate in constructing and validating blocks.
diff --git a/content/docs/core/at-a-glance.mdx b/content/docs/core/at-a-glance.mdx
new file mode 100644
index 0000000..69efb7e
--- /dev/null
+++ b/content/docs/core/at-a-glance.mdx
@@ -0,0 +1,124 @@
+---
+title: Core Features
+description: High level overview of Minima ecosystem
+tag: core
+---
+
+Below you will find key information about Minima, with links to further reading.
+
+### Layer 1 Protocol
+
+{/* **Implementation Language:** Java */}
+
+
+
+
+
+
+
+{/* [**Consensus mechanism:**](/docs/learn/minima/coreconcepts#transaction-proof-of-work-txpow) TxPoW - Transaction Proof-of-Work
+[**Longest chain:**](/docs/learn/minima/miningconsensus#selecting-the-main-chain-ghost) GHOST Protocol (heaviest chain)
+[**Hashing algorithm:**](/docs/learn/minima/quantumsecurity) SHA3, considered to be Quantum resistant
+[**Transaction Model:**](/docs/learn/minima/coreconcepts#utxo-model) UTxO - Unspent Transaction Output (same as Bitcoin) */}
+
+{/* ### Transactions/Blocks
+**Txns/block:** 256
+**Txns/second:** ~5 on layer 1, unlimited on layer 2
+**Block intervals:** 50 seconds */}
+
+### The Minima Coin
+{/* **Native currency:** Minima coin */}
+
+
+
+
+
+
+{/* **Supply:** 1 billion hard-capped, deflationary via [the Burn](/docs/learn/minima/coreconcepts#the-burn)
+[**Custom tokens:**](/docs/learn/minima/colouredcoins) supported natively via coloured coins, minted directly on node
+[**NFTs:**](/docs/learn/minima/colouredcoins) supported natively via coloured coins, minted directly on node */}
+
+### Smart Contracts
+{/* Minima has a powerful [**scripting language**](/docs/learn/minima/scripting), KISS VM, for writing Smart Contracts. */}
+
+
+
+
+
+
+### Layer 2 Scaling
+{/* [Omnia](/docs/learn/networkoverview#layer-2-omnia) unlocks virtually unlimited transactions per second via off-chain payment channels, similar to Bitcoin's Lightning network. */}
+
+
+
+
+
+### Off-Chain Communication
+{/* [**Maxima**](/docs/learn/maxima/maximaintro) provides off-chain, encrypted, peer-to-peer communication. */}
+
+
+
+
+
+### Web3 DApps
+
+{/* [**MiniDapps**](/docs/learn/minidapps/minidappsintro) are Minima's decentralized applications, built using widely known languages including HTML, CSS, JavaScript, React etc */}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/content/docs/core/index.mdx b/content/docs/core/index.mdx
index 3846201..f2bbbe3 100644
--- a/content/docs/core/index.mdx
+++ b/content/docs/core/index.mdx
@@ -1,39 +1,136 @@
----
-title: About Minima
-description: Learn more about Minima
-tag: core
----
-
-Minima is more than a blockchain - it is the bridge between the problems of the real world and the current solutions offered by Web3. It is a connected community of over 50,000 node users and developers that are empowered to solve real-world problems at scale without sacrificing decentralisation or security.
-
-
-
-
-
-
-## What is Minima?
-
-Minima is a layer 1 blockchain focused on providing everyday solutions on everyday devices.
-
-As the only decentralised blockchain lightweight enough to run entirely on mobile and IoT (Internet of Things) silicon chips - and versatile enough to scale across almost any physical device - Minima is unique in its ability to provide Web3 based infrastructure.
-
-Minima provides utility beyond what is already possible on a completely decentralised blockchain; also including access to a secure, peer-to-peer messaging system - Maxima - which enables decentralised transfer of information.
-
-Minima’s technology is compact, quantum-resistant, and secured by every single user on the network.
-
-## Who is Minima for?
-
-Minima primarily caters to four groups, creating value for each in different ways:
-
-**Enterprises** benefit by deploying Minima's lightweight and versatile nodes that naturally scale for an increasing user base and reduce infrastructure costs.
-
-**Decentralised** Physical Infrastructure Networks (DePINs) that build on Minima can quickly prove the value or concept of their project before building and scaling on Minima.
-
-**Developers** benefit from open source code, easy-to-create decentralised applications (MiniDapps), comprehensive documentation and support materials.
-
-**Individuals** interested in decentralised and trustless payments can start a Minima node and launch projects, tokenise real-world assets, and participate in constructing and validating blocks.
+---
+title: Welcome
+description: Learn more about Minima
+tag: core
+---
+
+As the only decentralised layer 1 blockchain lightweight enough to run entirely on mobile and IoT (Internet of Things) silicon chips - and versatile enough to scale across almost any physical device - Minima is unique in its ability to provide Web3 based infrastructure, providing everyday solutions on everyday devices.
+
+Minima provides utility beyond what is already possible, on a completely decentralised blockchain. Additionally including a secure, peer-to-peer messaging system - Maxima - which enables decentralised transfer of information.
+
+Minima’s technology is compact, quantum-resistant, and secured by every single device on the network.
+
+
+
+
+
+## Why Minima?
+
+Blockchain technology promises decentralization and freedom, but many existing blockchains have run into serious issues that limit their potential for real-world use.
+
+### Problem 1: Separation of users from block producers
+
+**Why it’s a Problem:**
+
+In all other blockchains, a separation of users, validators and block producers has arisen:
+
+**Block Producers:** The entities - mining pools and large stakers - responsible for creating new blocks and deciding which transactions to include. This is the stage at which transactions are selected to go on chain and is the fundamental role which should always remain decentralized to avoid attack by selective transaction processing.
+
+**Validators:** Entities that check whether block producers are following the rules and help relay transactions across the network. Note however, that excluding transactions is not a violation of the rules - an attack that validators cannot prevent.
+
+**Users:** Regular end users who depend on validators to broadcast their transactions and on block producers to include them in blocks.
+
+This structure has created a dynamic where end users are dependent on a small minority of block producers, who control the final say on which transactions are processed. Even though validators help enforce rules, they don’t have the power to include transactions in blocks, leading to a risk of censorship and control by the block producers.
+
+**How Minima Solves It:**
+
+Minima removes this separation by making every user a validator and a block producer - there is no separation. This means that every user or device running Minima has equal power in the network. On Minima, each device acts as a fully validating and constructing node with the ability to verify transactions and participate equally in block creation.
+
+This is made possible by
+- making the blockchain compact enough to run on mobile devices, laptops and even chip
+- removing incentives of centralization i.e. financial reward for block production
+
+This brings **true decentralization**, with every user cooperating, rather than competing - to help build and secure the network, ensuring fairness and resilience.
+
+Our philosophy is that is the pinnacle that should not be compromised.
+
+
+---
+
+### Problem 2: Scalability Issues
+
+**Why it’s a Problem:**
+Big blockchains like Bitcoin and Ethereum have struggled to scale up. As more people use them, they become slow and expensive, making small transactions impractical. Various solutions crop up in the form of layer 2s and side chains at the expense of security.
+
+**How Minima Solves It:**
+Minima is built to be efficient and lightweight, allowing fast, low-cost transactions even with lots of users. This makes it ideal for applications that need high speed and volume, without sacrificing accessibility or affordability.
+
+---
+
+### Problem 3: Complexity in Development
+
+**Why it’s a Problem:**
+Some blockchains require developers to learn complex and highly specialized coding languages, making it difficult for the average developer to jump in. This creates a barrier to innovation, as only a few have the expertise needed to create applications on these networks.
+
+**How Minima Solves It:**
+Minima’s KISS (Keep It Simple, Smart) Virtual Machine offers a straightforward, beginner-friendly environment for building on the blockchain. This simplicity means more people can create applications without specialized knowledge, opening up the field to a broader audience.
+
+---
+
+### Problem 4: Environmental Concerns
+
+**Why it’s a Problem:**
+Traditional blockchains like Bitcoin use Proof-of-Work (PoW), which requires huge amounts of computing power and energy, contributing to environmental concerns. This makes blockchain technology less sustainable and eco-friendly.
+
+**How Minima Solves It:**
+Minima is designed with a low-power consensus mechanism that’s environmentally conscious. It minimizes resource use without compromising security, making it a much greener option.
+
+---
+
+### Problem 5: Lack of Accessibility and Interoperability
+
+**Why it’s a Problem:**
+Some blockchains are difficult to access and often isolated from other systems, making it hard for new users to participate and for developers to integrate blockchain across platforms. This limits blockchain's accessibility and usability.
+
+**How Minima Solves It:**
+Minima is designed to run on any device—smartphones included—making blockchain accessible to anyone with an internet connection. This ease of access supports interoperability and helps bring blockchain into everyday use.
+
+---
+
+
+## Who is Minima for?
+
+Minima primarily caters to four groups, creating value for each in different ways:
+
+**Enterprises** benefit by deploying Minima's lightweight and versatile nodes that naturally scale for an increasing user base and reduce infrastructure costs.
+
+**Decentralised Physical Infrastructure Networks** (DePINs) that build on Minima can quickly prove the value or concept of their project before building and scaling on Minima.
+
+**Developers** benefit from open source code, easy-to-create decentralised applications (MiniDapps), comprehensive documentation and support materials.
+
+**Individuals** interested in decentralised and trustless payments can start a Minima node and launch projects, tokenise real-world assets, and participate in constructing and validating blocks.
+
+
+With Minima, blockchain becomes decentralized, scalable, eco-friendly, and easy to use, empowering both individuals and developers to participate freely.
+
+
+
+
+{/* **Implementation Language:** Java */}
+
+
+
+
+
+
diff --git a/content/docs/core/meta.json b/content/docs/core/meta.json
index d8ac1d3..7beaf7e 100644
--- a/content/docs/core/meta.json
+++ b/content/docs/core/meta.json
@@ -1,20 +1,22 @@
-{
- "title": "Core",
- "root": true,
- "tag": ["core"],
- "pages": [
- "---Minima---",
- "index",
- "about-minima",
- "get-involved",
- "use-cases",
- "tokenomics",
- "---Terms of Use---",
- "minidapp-terms",
- "website-terms",
- "minima-privacy-policy",
- "presale",
- "--- Whitepaper---",
- "[Minima Whitepaper]( https://docs.minima.global/minima_pdfs/Minima_Whitepaper_v11.pdf)"
- ]
-}
+{
+ "title": "Core",
+ "root": true,
+ "tag": ["core"],
+ "pages": [
+ "---About Minima---",
+ "index",
+ "about-minima",
+ "at-a-glance",
+ "use-cases",
+ "tokenomics",
+ "get-involved",
+ "--- Whitepaper---",
+ "[PDF Version](https://docs.minima.global/minima_pdfs/Minima_Whitepaper_v11.pdf)",
+ "minimawhitepaper",
+ "---Terms of Use---",
+ "minidapp-terms",
+ "website-terms",
+ "minima-privacy-policy",
+ "presale"
+ ]
+}
diff --git a/content/docs/core/minimawhitepaper/acascadingchain.mdx b/content/docs/core/minimawhitepaper/acascadingchain.mdx
new file mode 100644
index 0000000..c515bbf
--- /dev/null
+++ b/content/docs/core/minimawhitepaper/acascadingchain.mdx
@@ -0,0 +1,17 @@
+---
+title: A Cascading Chain
+tag: whitepaper
+---
+
+The power of hashing ensures that an unbroken chain of blocks cannot be altered in any way. The power of hashing also ensures that sometimes someone will find a very high difficulty PoW when looking for a much lower one. If you take this into account pre-PoW you can construct block headers that reference multiple block parents at different levels of difficulty. Instead of having 2 difficulty values for a user to mine in the Tx-PoW, the Transaction Difficulty set to 10 seconds of work on average, and the Block Difficulty set to 1 block every 50 seconds, let us add 1 more difficulty, the Super Block Difficulty set to twice the current block difficulty...
+
+Every block references its direct parent and the last Super Block. Now a Tx-PoW has 3 possible levels, Transaction, Block and Super Block. If the Block hash difficulty is high enough it becomes a Super Block (which is also a valid block). Eventually, all blocks and data are discarded and only a chain of Super Block headers is kept as a long term store of the total PoW in the chain. Now instead of only 1 Super Block Level, let us use 256. 1 for each bit in a 32-byte hash. Each level is twice the difficulty of the level below. These are the only difficulty values for each block, each linking back to its Super Block Level parent.
+
+The proof chain grows logarithmically, so that an almost limitless amount of PoW can be stored in a finite chain of headers, since every level stores blocks that are twice as difficult as the level below. Thus, an exponentially shorter unbroken chain of more PoWerful blocks is kept in place of a longer unbroken chain of less PoWerful ones. Due to the nature of randomised hash mining, the sum of the Tx-PoW difficulty of the higher-level blocks will on average equal the sum of the Tx-PoW difficulty of the lower level blocks.
+
+The cascading chain allows each user to keep the total cumulative PoW without requiring the storage of every block. Only certain lucky blocks are kept, all of which reference each other, to keep a short unbroken chain of ever-increasing total PoW.
+
+Almost all blocks and transactions are pruned. Pruning has no effect on the security of the user doing-the-pruning. Once a transaction has been checked by a user, that transaction need never be checked again, a simple reference will suffice. Blocks are kept for a certain period of time, a week would be fine, before being pruned. This way any user that logs on to the network can always catch up a weeks' worth of blocks. So as long as a user logs on to the network once a week he can validate every transaction on layer 1 and run a Complete node, full validating and full TxPoW mining, without needing increasing amounts of storage.
+
+For a new user, who has no previous history of the chain and no coins, Nakamoto Consensus can objectively and independently tell which chain is the current valid chain - the Cascading Chain with the most PoW.
+
diff --git a/content/docs/core/minimawhitepaper/blocksize.mdx b/content/docs/core/minimawhitepaper/blocksize.mdx
new file mode 100644
index 0000000..aabc000
--- /dev/null
+++ b/content/docs/core/minimawhitepaper/blocksize.mdx
@@ -0,0 +1,16 @@
+---
+title: Block Size
+tag: whitepaper
+---
+
+Blocks in Minima are small. As small as a transaction. All transactions are potential blocks. Blocks are just lucky transactions. Blocks only contain references to transactions (Compact blocks in Bitcoin), that have already been sent across the network, rather than the entire transaction. Minima also uses an adaptive block size. The maximum size is set by the chain as twice the average block size of the last n blocks. This allows the users themselves to determine the block size. By filling their blocks higher than the average they will make the maximum size greater, by filling them lower, the maximum will be made lower. Users can drag the maximum block size up or down depending on whether they need it, or whether enough traffic is going Lightning[[3]](/docs/learn/minimawhitepaper/specialthanksto) and beyond.
+
+On a miner-centric chain, blocks must be full. If blocks are not full, there is no fee market for block space, and no requirement to pay any fees at all. If there are no fees there is no security, as the fees pay the miners and the miners secure the chain. Empty blocks are no good, half-full blocks are no good, only full blocks work. Block size must be restricted in some way to ensure this is the case.
+
+On a user-centric chain, blocks can be empty, half full, or full, with no effect on the security of the chain. The security is determined by the total PoW generated by all the users. There are no 'fees' required to pay miners to secure the network. There is no requirement to restrict block size, as long as the overall network can handle the on-chain transaction per second rate. The 'Burn' acts as congestion control, to limit traffic at times of heavy load. Each user can determine the load they face independently on their local device and use that knowledge to build a block with a manageable size.
+
+Minima uses a Cascading Chain that aggressively prunes almost all data, whilst keeping a record of total cumulative PoW and the complete MMR Database, so blocks are not an ongoing storage overhead but only a short-term bandwidth and processing concern.
+
+
+
+
diff --git a/content/docs/core/minimawhitepaper/blockspeed.mdx b/content/docs/core/minimawhitepaper/blockspeed.mdx
new file mode 100644
index 0000000..e55a541
--- /dev/null
+++ b/content/docs/core/minimawhitepaper/blockspeed.mdx
@@ -0,0 +1,15 @@
+---
+title: Block Speed
+tag: whitepaper
+---
+
+The security of a transaction is not improved by a faster block speed, since the amount of security is a function of the cumulative PoW of the parent blocks (hash-rates being equal 1 BTC block is worth 4 LTC blocks, since LTC runs 4x faster). A faster chain does increase the granularity of information[[6]](/docs/learn/minimawhitepaper/specialthanksto) and allows a user to know sooner when their transaction is secure enough. The longer you wait, the more secure.
+
+If the block speed is too fast you risk ‘decoherence’, when the chain cannot keep up with itself as too many blocks are found and multiple conflicting branches emerge, but if the block speed is too slow you ignore the benefits of higher information granularity.
+
+Block speed can be much faster on a GHOST[[7]](/docs/learn/minimawhitepaper/specialthanksto) chain and so Minima is aiming for a 50 second block time[[6]](/docs/learn/minimawhitepaper/specialthanksto).
+
+
+
+
+
diff --git a/content/docs/core/minimawhitepaper/conclusion.mdx b/content/docs/core/minimawhitepaper/conclusion.mdx
new file mode 100644
index 0000000..9beb321
--- /dev/null
+++ b/content/docs/core/minimawhitepaper/conclusion.mdx
@@ -0,0 +1,30 @@
+---
+title: Conclusion
+tag: whitepaper
+---
+
+Minima is :
+
+- A compact blockchain that runs completely on your mobile phone.
+- A scalable, programmable, storageless, quantum-secure, proof-based, cascading Tx-PoW chain.
+- A resilient, open, global, censorship-resistant p2p network with a built-in base-layer blockchain for trustless payment, token and contract processing.
+- A fully decentralized crypto system of collaborating users, with no centralizing points of failure, able to sustain the largest network of Complete nodes ever assembled.
+- A miner-less, cooperative, distributed PoW network immune to the trappings of a centralizing, miner-centric, fee-based paradigm.
+
+**Decentralization:** Above all else Minima strives to be a completely decentralized platform. Every user on the network runs the same code in the same way. Every user runs a Complete node. There are no special user classes, no master nodes, no delegates and no miners. The protocol uses a small amount of resources specifically so that all users are able to run a Complete node at all times. Any systemic attack on the network requires an attack on the entire user base. There are no centralized points of failure.
+
+**Security:** Minima is a Distributed PoW secured blockchain. The true PoWer of the Minima Network comes from the scalable off-chain transactions, running over Maxima, that also contribute to layer 1 security. Layer 1 security is not compromised by traffic going off-chain to layer 2, it is in fact enhanced. All the cryptographic security of Minima is hash-based, and as such, Quantum Secure. All nodes are Complete, so that light client attacks, where a user’s lack of knowledge of the entire network is exploited, are nullified. Censorship and other block-based attacks are orders of magnitude harder to attempt.
+
+**Scalability:** The Minima Protocol allows for both on-chain and off-chain transactions. The block size is adaptive and can grow and shrink as the users see fit. Powerful off-chain protocols, some that already exist today, take traffic off layer 1 and onto layer 2. Layer 2 allows near-limitless innovation and throughput. Minima can utilise current strategies like the Lightning Network and Sidechains, putting these abilities squarely in the hands of every user.
+
+**Sacrifice:** In order to be runnable by all at all times, Minima not only requires a large user base, but Minima also asks for more from its users. Participation is a requirement. Minima utilises an MMR database, maximal pruning and a Cascading Proof Chain. Essentially these techniques require users to connect to the network periodically, at best - constantly, at worst - daily or weekly. Then their MMR proofs can be updated, the validity of the chain’s transactions can be verified independently and correct additions can be made to the Cascading Proof Chain, before the relevant data is discarded by the network. And of course, all users must work to send their transactions and participate in the network. All of this can be seamless to the user, buried under the application layer, but at a minimum, they will need to ensure they are connected to the network.
+
+Minima users have all the tools required to interact in a completely decentralized way. All users can independently track, store, share, validate and construct the blockchain. The burden of responsibility shifted squarely onto the users, with no miners, master nodes, delegates, coordinators or any other overarching authority to take the slack.
+
+**We’re in charge. It’s up to us.**
+
+
+
+
+
+
diff --git a/content/docs/core/minimawhitepaper/consensusforksandimmutableprotocols.mdx b/content/docs/core/minimawhitepaper/consensusforksandimmutableprotocols.mdx
new file mode 100644
index 0000000..ad62e64
--- /dev/null
+++ b/content/docs/core/minimawhitepaper/consensusforksandimmutableprotocols.mdx
@@ -0,0 +1,25 @@
+---
+title: Consensus, Forks and Immutable Protocols
+tag: whitepaper
+---
+
+In decentralized blockchain systems all full users need to agree on the rules. If there is no agreement on the rules there can be no consensus on the ordering and eventual outcome of actions. Current blockchain systems have 2 types of consensus changes available. This is because there are 2 types of ‘full’ user. The first helps in the construction and validation of the chain - Complete nodes (the miners). The second only helps in the validation of the chain - Full nodes (the validators). We ignore Wallet users, by far the largest group on these chains (unlike Minima), who neither validate nor construct, and are simply swept along, whether they agree or not.
+
+A soft fork is when the Complete nodes change the rules in ways that are still valid to the Full nodes. A soft-fork is a reduction in the chains’ abilities. All Full nodes still see a valid block, just with a reduced solution space. Permanent censorship of a transaction or address is a soft-fork, since only those involved in the construction of the chain have any say. On fixed block size blockchains, a reduction in block size is a soft fork, as it still appears valid to all the Full nodes, just a smaller block. A hard fork is when all nodes need to agree to an increase in capabilities, adding an ability that was not there before. On fixed block size blockchains, an increase in the block size requires everyone to agree, as it is invalid to Full nodes given the old rules, that specified a lower maximum block size. Adding a new function or feature is a hard fork. Upgrading or fundamentally changing the protocol is a hard fork.
+
+Soft forks are much easier to implement than hard forks since only a majority of the much smaller group of Complete nodes needs to agree. Soft forks can be imposed. The Complete nodes do not need the Full nodes’ permission. Hard forks are much harder to implement. The larger the network the harder it gets. A decentralized protocol can only grow in adoption once it has stopped being updated, since it is impossible to update once deployed at scale. This is why the ossification of truly decentralized protocols occurs.
+
+On Minima :
+
+- Everyone runs a Complete node.
+- Everyone is involved in the construction and validation of the chain.
+- Everyone needs to agree on everything because everyone is involved in everything.
+- There are no soft forks, only hard forks.
+
+The Minima Protocol is complete from inception, containing all the scaling and functionality it will ever have or need. No soft forks allowed. No hard forks required - ever. No limit on the size of the network that can use it. POP3, SMTP, UDP and TCP/IP are examples of ossified global decentralized protocols. They don't change. That's the point. That’s why they are the back-bone of the Internet.
+
+
+
+
+
+
diff --git a/content/docs/core/minimawhitepaper/energy.mdx b/content/docs/core/minimawhitepaper/energy.mdx
new file mode 100644
index 0000000..d0449bb
--- /dev/null
+++ b/content/docs/core/minimawhitepaper/energy.mdx
@@ -0,0 +1,14 @@
+---
+title: Energy
+tag: whitepaper
+---
+
+PoW blockchains are often criticised for using a lot of energy. Energy usage is a requirement for Nakamoto Consensus to work. It is precisely this that makes PoW chains objectively identifiable, verifiable and valuable.
+
+In a competitive system, miners are incentivised to use the maximum amount of energy that is economically viable to mine digital coins they can sell for a profit, whilst securing the chain as a bonus.
+
+In a cooperative system, users can use the minimum amount of energy required to secure the chain, as there are no incentives to use more.
+
+Decentralized energy[[16]](/docs/learn/minimawhitepaper/specialthanksto)[[17]](/docs/learn/minimawhitepaper/specialthanksto) is far more sustainable than centralized energy. Sustainable energy scales in time. Since users have only to do small amounts of work, rather than large mining operations doing large amounts of work, the users themselves can generate all the energy required, by using whatever means at hand to simply charge their mobile phones as usual.
+
+Minima is compatible with the concept of Free Energy. Energy you do not even pay for, since you generate it yourself (solar probably). If you give Free Energy to a single competitive miner he will be very happy, as he can now use even more energy to try and mine even more coins. Give Free Energy to all the miners, and the effect is nullified, mining is a zero-sum game after all, and they will continue to use the same amount of centralized power as well as the Free Energy.
diff --git a/content/docs/core/minimawhitepaper/hashcashandburn.mdx b/content/docs/core/minimawhitepaper/hashcashandburn.mdx
new file mode 100644
index 0000000..51f0587
--- /dev/null
+++ b/content/docs/core/minimawhitepaper/hashcashandburn.mdx
@@ -0,0 +1,27 @@
+---
+title: HashCash and Burn
+tag: whitepaper
+---
+
+Adam Backs’ HashCash[[9]](/docs/learn/minimawhitepaper/specialthanksto) was the first weaponized version of PoW. A Denial-of-Service (DoS) counter-measure first deployed to prevent email spam. Sending millions of emails ‘costs’ nothing – hardware, processing, bandwidth, etc. A lone computer sitting on the internet can send millions of emails in almost no time, constantly. HashCash enforced that a PoW payment was included whenever an email was sent. To a single user sending emails every few minutes, this was utterly negligible, a background process that hummed for a few seconds after you press the ‘Send’ button. But to the spam-machine sitting on the internet trying to send millions of emails, this would require millions of seconds of work, an impossible task.
+
+Negligible PoW stops DoS. Negligible PoW does not stop DDoS.
+
+This email attack is a DoS attack because there is only one machine sending the spam. A DDoS attack, a Distributed DoS attack, is when multiple machines are used. A 50,000 strong bot-net of mobile phones, could each send a message every few seconds. A million messages is now only a few minutes of distributed work.
+To prevent a distributed spam attack on layer 1 of a decentralized P2P blockchain network a small amount of PoW per message is not enough. Small amounts of PoW, to the individual users, are effectively free. Yes, they pay in power usage on their mobile phone, there is a time delay, but you do not notice it. You do not feel it. To prevent a DDoS attack we need something that is not ‘free’ to users.
+
+On miner-centric chains, this is the fee (which serves multiple purposes). The fee must be paid for a transaction to be valid. 1 million messages now require ‘1 million fees’. The cost of the attack is now prohibitive – since the attacker must pay this, the bot-net only provides PoW. Should the attacker persist nonetheless, there is an ongoing and non-negligible cost to the attack, that cannot be sustained indefinitely.
+
+On Minima this is the Burn (which also serves multiple purposes). A Burn, when the outputs of a transaction sum to less than the inputs, is equivalent to paying every other user a very small fee. Since ‘burning’ reduces the total number of Minima in circulation, since all coins are created at genesis, those coins that are left are more scarce and therefore more valuable. Unlike fees, the Burn has no minimum. There is no requirement for the total Burn to be large, and able to support the mining industry, that in turn secures the chain. The burn may be high during periods of heavy traffic or spam, and as it rises, traffic will decrease, and the system will self-regulate. The burn can be very low when traffic is at manageable levels as the total amount is not important, only the relative burn amounts in comparison to other transactions.
+
+The Burn in Minima serves multiple purposes:
+
+- A strong incentive to propagate and process a transaction.
+- A method for ordering transactions and regulating on-chain traffic.
+- A mechanism for spam prevention by making DDoS attacks expensive.
+
+HashCash is totally decentralized. Each user can independently perform the required PoW, by mining their own email, and every other user can independently verify the proof. No third parties are consulted, no miners are paid. Minima is the same, but users mine transactions instead of emails.
+
+Constructively, from the maelstrom of transactions fired across the Minima network, a single time-ordered interlocking chain of blocks emerges revealing the complete transaction history.
+
+Minima Consensus is driven by HashCash and Burn.
diff --git a/content/docs/core/minimawhitepaper/introduction.mdx b/content/docs/core/minimawhitepaper/introduction.mdx
new file mode 100644
index 0000000..cd86d53
--- /dev/null
+++ b/content/docs/core/minimawhitepaper/introduction.mdx
@@ -0,0 +1,48 @@
+---
+title: Introduction
+tag: whitepaper
+---
+
+The Evolution will not be Centralized
+
+**Spartacus Rex**
+
+**Abstract.** Minima is a cryptocurrency designed to be ultra-compact. Designed to remain Totally Decentralized. Designed to have no rulers. There are no miners and no ever-growing database. A simple yet powerful scripting language, Cascading Proof Chain, adaptive block scaling, and an innovative Proof of Work (PoW) backed user-centric blockchain algorithm that uses both on-chain and off-chain traffic for security. All Quantum Secure Cryptography. Small enough to run efficiently on your mobile phone. Everyone runs a Complete node. Forever.
+
+## Introduction
+
+In 2008 Satoshi Nakamoto unleashed Bitcoin[[1]](/docs/learn/minimawhitepaper/specialthanksto) and it changed the world. A revolutionary digital monetary system explicitly intended to be liberated from any overarching authority; a secure decentralized network where no one needed to trust a third party; the natural evolution of an antiquated monetary system so evidently fallible and easily abused.
+
+### The Problem
+
+Since then, many ingenious and powerful advancements have been made, but in our haste to build features, one single property, for some the most important property, is being side-lined in favour of scale and security: Decentralization. Bitcoins’ original raison d’etre was for there to be no overarching authority ‘controlling’ the network, no single points of failure and no avenues for censorship built on top of a network resilient to distributed attacks; both digital and physical. Every single cryptocurrency operating today has sacrificed some or all decentralization in their race for increased scale and supposed security. Centralization causes huge efficiency gains after all. But if 1 group of users is paid to perform any ‘task’ on the network for the rest of the users (finding blocks, resolving disputes, etc.) this inevitably leads to centralization, as is shown by all of the major crypto networks. In essence decentralization matters because centralized networks are so easy to attack.
+
+Current miner-centric networks rely on a relatively small number of users running full validatory nodes that process every transaction, ensuring that no one cheats the system and no one accepts an invalid transaction. But they are not involved in the construction of the blockchain itself, just its validation. A much smaller group of users, normally referred to as miners, run a full validatory and mining node, otherwise known as a Complete node. Since only this small group of Complete nodes is involved in the construction of the chain, only this small group decides which valid transactions actually make it into a block or not, and only this small group is involved in ensuring the liveliness[[15]](/docs/learn/minimawhitepaper/specialthanksto) of the network and the prevention of censorship attacks.
+
+How many compromised or coerced human beings would it take to seriously disrupt a cryptocurrency, or worse - render it entirely useless? To force mining operators to produce blank blocks or censor transactions, perform constant 51% attacks or stop DPoS delegates from confirming or resolving anything? The answer for almost all coins is surely less than 100, and for most far less than 21...
+
+
+### The Solution
+
+A network where every single user is an equal and Complete member. Where disrupting the network would require attacking, bribing or coercing 100’s of millions, maybe billions of users. Orders of magnitude more than current crypto solutions. Total decentralization.
+
+Can a secure, scalable, truly decentralized cryptocurrency be made with no overarching authority? Can every user be an equal on a cryptocurrency network? Can mining centralization be abolished? Can the need to outsource any critical aspects of the network to some third party become redundant?
+
+### Requirements
+
+- The protocol needs to be so resource-efficient that every user is able to run a Complete node at all times, as if it is of no consequence.
+- It must remove the paid miners. The miner-centric fee-paying model always leads to centralization.
+- It must be complete. Immutability of the protocol is a desired quality.
+- Since it must be complete, the Protocol must
+
+1. scale from inception
+2. be Quantum Secure
+
+ for a future where it might matter.
+
+It must be small. It must be powerful. It must remain decentralized. It must be finished.
+
+**Enter Minima.**
+
+
+
diff --git a/content/docs/core/minimawhitepaper/maxima.mdx b/content/docs/core/minimawhitepaper/maxima.mdx
new file mode 100644
index 0000000..5ffae4f
--- /dev/null
+++ b/content/docs/core/minimawhitepaper/maxima.mdx
@@ -0,0 +1,40 @@
+---
+title: Maxima
+tag: whitepaper
+---
+
+- Layer 1 does not scale.
+- Layer 2 scales.
+
+‘...scales’ – there is no upper bound on possible transactions per second.
+
+The base layer of any cryptocurrency is known as layer 1 or on-chain. This is the layer every full member of the network needs to process. Solutions built on top of layer 1 occur away from the main chain, deliberately so, and are called layer 2 or off-chain. On layer 2, only those directly involved in the transaction need to process it, not the whole network. This is why layer 2 scales but layer 1 does not. The idea that everyone should process everything does not scale.
+
+If most of the traffic is taken off-chain using the Lightning Network, Sidechains, Multi-Signature Federations or another method, then by definition most of the traffic is not even viewable let alone auditable on-chain. There is currently no mechanism that secures layer 1 with layer 2 traffic. No way to incentivise or force fees down from layer 2 operators and users to the miners on layer 1. For all miner-centric coins, this is a problem. How can trillions be transacted off-chain when only millions are spent in fee-paying transactions securing layer 1? Clearly, these layered systems are only as secure as the security of their lower levels. Less money spent equals fewer fees paid. So either layer 2 works, it scales, and everyone jumps off-chain, reducing layer 1 security by starving miners on-chain... or layer 2 does not work, users stay on layer 1, all the on-chain miners get paid, but it can’t scale...
+
+One solution is (very) high fees for layer 1 and thus very large transaction amounts, keeping all the smaller interactions off-chain. This does indeed secure layer 1 by paying the miners adequately, but makes it impossible for normal users to transact on-chain, since the fee alone would likely be larger than the desired transaction amount. Sometimes you have to use layer 1, it’s not always a choice (if someone tries to force close your Lightning Channel and steal funds), and then what?
+
+Another solution is to inflate the coin supply. Just print 1% extra per year and use that to pay the miners. A clean solution... that does indeed secure layer 1, but of course, you lose the hard cap on your total supply which is a very desirable quality if you want to be considered a Store of Value. Supply inflation is just a hidden tax on every user.
+
+
+Minima has an innovative and unique solution.
+
+- Replace fee-based security.
+- Make layer 2 secure layer 1.
+
+Minima runs over a Peer-to-Peer (P2P) network called Maxima. Every user on the Minima network is connected to every other user. Maxima opens up this P2P backbone, via a simple network API, so that users can transmit any data they like, not just Minima transactions, to other individual Maxima users, point-to-point and not flood-fill. This gives a method of communication that can be used by all the layer 2 protocols, such as the Lightning Network, Sidechains, Decentralized Exchanges etc.
+
+Even better, users of Maxima who have no Minima, no tokens, send no transactions and have no interest in layer 2 magic, can still help to PoW secure the network, by sending messages over Maxima. For instance, MaxChat, a simple low-bandwidth chat application that runs on Maxima, a resilient decentralized censorship-resistant P2P network, could bring countless users and there are countless other compatible applications that require network communication.
+
+All Maxima users run Minima. All messages pay PoW. All PoW secures Minima.
+
+We define a :
+
+- Minima transaction / on-chain / flood-fill / does not scale.
+- Maxima transaction / off-chain / point-to-point / scales.
+
+Maxima allows the transfer of small amounts of data for free, aside from the required PoW, but routing larger amounts of data is possible and can be paid for using Lightning. A simple technique encrypts the data with the same key as the Lightning invoice (the preimage of a hash). This way the recipient only gets access to the decrypted data once a payment is made. An atomic data exchange - where either both actions happen or neither happen.
+
+As more and more fee-paying traffic is generated, Maxima incentivises users to set up Minima routers, effectively a node with an external IP which other Minima users can easily access, which is invaluable to the integrity of any P2P network. Instead of incentivising miners to use more and more energy finding coins, Maxima incentivises users to set up increasingly better routers that improve the integrity and quality of the backbone P2P network that runs Minima.
+
+Minima provides value transfer. Maxima provides information transfer.
diff --git a/content/docs/core/minimawhitepaper/meta.json b/content/docs/core/minimawhitepaper/meta.json
new file mode 100644
index 0000000..9a470d1
--- /dev/null
+++ b/content/docs/core/minimawhitepaper/meta.json
@@ -0,0 +1,6 @@
+{
+ "title": "Minima Whitepaper",
+ "root": false,
+ "pages": ["introduction", "txpow","maxima","thepulsenetwork","powvsdistributedpow","hashcashandburn","energy","acascadingchain","storagelessmmrutxo","smartcontractstokensandtransactions","quantumsecure","blocksize","blockspeed","consensusforksandimmutableprotocols","conclusion","specialthanksto"],
+ "defaultOpen": true
+}
diff --git a/content/docs/core/minimawhitepaper/powvsdistributedpow.mdx b/content/docs/core/minimawhitepaper/powvsdistributedpow.mdx
new file mode 100644
index 0000000..0c0c023
--- /dev/null
+++ b/content/docs/core/minimawhitepaper/powvsdistributedpow.mdx
@@ -0,0 +1,16 @@
+---
+title: PoW vs Distributed PoW
+tag: whitepaper
+---
+
+Hash-rate does **not** equal security.
+
+Since if this were the case, 1 miner with infinite hash-rate, would imply a secure network. It’s not. It’s called PayPal (a completely centralized payment gateway . No resistance to censorship attacks at all.
+
+What matters is the distribution of hash-rate. This is self-evident when we consider the dreaded 51% attack.
+
+PoW blockchains are always fearful of a 51% attack. This is an attack where some person or group has access to over 50% of the hash-rate and as such can reverse transactions, hold the chain to ransom with empty blocks, or censor transactions, by creating a longer valid chain with more PoW. In miner-centric PoW networks, miners are paid to acquire hash-rate. It is guaranteed that a small group of miners can create a 51% cartel. Trust is not the issue. Miners have strong incentives to play by the rules and not attack the chain, for fear of losing income. Coercion is by far the more likely attack. Governmental coercion at a state level.
+
+Minima, a distributed PoW blockchain, does not incentivise the acquisition of hash power, since there is no financial reward for finding a block and no advantages to doing more work than necessary. There is no small group or cartel of users that will have anywhere near 1% of the total hash-rate, let alone 51%. Hence coordinating this attack becomes very expensive as there is no use for the hardware required other than to attack the network, no mining rewards to recoup the initial investment. The cost of an attack must be less than the potential gains after all.
+
+There is, of course, a caveat to the Distributed PoW Model. You need a lot of users.
\ No newline at end of file
diff --git a/content/docs/core/minimawhitepaper/quantumsecure.mdx b/content/docs/core/minimawhitepaper/quantumsecure.mdx
new file mode 100644
index 0000000..458a4c1
--- /dev/null
+++ b/content/docs/core/minimawhitepaper/quantumsecure.mdx
@@ -0,0 +1,13 @@
+---
+title: Quantum Secure
+tag: whitepaper
+---
+
+Quantum security is not an issue right now. But it will be in the future. If you want to remove the need for protocol developers because the protocol is advanced enough to take care of itself, and should not require any Hard Forks ever (there are no Soft Forks on Minima as all users are also miners), you need to use Quantum Secure algorithms.
+
+Minima uses the SHA3-256 hash algorithm for Tx-PoW mining, block and transaction hashes, proof chains, and signing or verifying data. All of the cryptographic security of Minima is provided by hash functions. The scripting language supports SHA2-256 to allow cross-chain hash lock contracts with legacy chains. The signing algorithm is the Winternitz One Time Signature scheme (WOTS). You can build hash trees of valid public keys, and process them in MiniScript, so that you can sign multiple times with the same root public key – the Merkle Signature Scheme [13](/docs/learn/minimawhitepaper/specialthanksto).
+
+Quantum security comes at a price. The signatures are at least 10-20x as big as ECDSA, used in Bitcoin. A one time use WOTS is 400-800 bytes. Minima signatures are certainly large when compared to normal Bitcoin transactions, but they are not kept forever since almost all data is eventually pruned, so although a bandwidth issue, they are only a temporary storage overhead.
+
+
+
diff --git a/content/docs/core/minimawhitepaper/smartcontractstokensandtransactions.mdx b/content/docs/core/minimawhitepaper/smartcontractstokensandtransactions.mdx
new file mode 100644
index 0000000..caa25c3
--- /dev/null
+++ b/content/docs/core/minimawhitepaper/smartcontractstokensandtransactions.mdx
@@ -0,0 +1,43 @@
+---
+title: Smart Contracts, Tokens and Transactions
+tag: whitepaper
+---
+
+Minima operates a validatory network, like Bitcoin, rather than a computational network, like Ethereum[[18]](/docs/learn/minimawhitepaper/specialthanksto). Computational networks require far greater resources to operate than validatory networks. In fact, the computational resources required far exceed those available to the majority of network participants, hence these networks centralize around larger more powerful nodes. Minima must allow everyone to run a Complete node.
+
+- Validation is the minimum amount of useful computation.
+- Logic can be computed off-chain and validated on-chain.
+- Everyone computing or validating everything does not scale.
+- Everyone validating a manageable amount on-chain to enable near-limitless capacity off-chain does scale.
+
+Unlike Bitcoin, Minima natively supports Tokens. Unlike Ethereum, no efficiency is sacrificed when processing tokens. As far as the network is concerned, token transactions are the same as Minima transactions, are stored in the MMR Proof DB and do not increase storage requirements. You prove their existence like you prove your Minima holdings. Tokens can be created by colouring a certain fractional amount of Minima. All scripts applicable to Minima are equally applicable to Tokens.
+
+Transactions on Minima are similar to Bitcoin transactions, yet upgraded in functionality and power. They include a list of inputs, a list of outputs, and some data registers for storing custom data. The sum of the outputs must be less than or equal to the sum of the inputs. Each input has an Address, Amount, TokenID, CoinID and can have various user-defined parameters. Each address is actually a Smart Contract, represented as the hash of a Minima Script. This entire transaction can then be signed by 1 or more Public Keys. When sending a transaction, a user adds the MMR proofs showing that the inputs exist and are unspent, spends ~10 seconds mining, before sending the complete Tx-PoW message across the network. Each transaction is a self contained cryptographic unit that can be verified independently with just the recent MMR root hash found in memory. Very fast and efficient.
+
+Minima uses a simple yet powerful scripting language. A script will return TRUE or FALSE as to whether an output can or cannot be spent. An empty script returns FALSE.
+
+
+A standard transaction:
+```
+RETURN SIGNEDBY ( 0xEFDC56DCA87F )
+```
+
+An HTLC (Hashed Time Locked Contract) :
+```
+IF @BLOCK GT 102453 AND SIGNEDBY ( 0xEFDC56DCA87F ) THEN
+ RETURN TRUE
+ELSEIF SIGNEDBY ( 0x12345678 ) AND SHA3 ( STATE(0) ) EQ 0x87654321 THEN
+ RETURN TRUE
+ENDIF
+```
+
+Many powerful functions including :
+
+- **MAST** – Merklized Abstract Syntax Tree, large scripts with short execution paths..
+- **VERIFYOUTPUT** – check transaction Outputs, Covenants..
+- **VERIFYINPUT** – check input data, complex multi-token scripts, Dividend payouts..
+- **ADDRESS** – create scripts in script. Recursive Covenants, Vault addresses..
+- **CHECKSIG** – check a signature in script, Oracles..
+- **PROOF** – Efficient Merkle proof checking..
+
+Minima also includes simple state variables per transaction, accessible to input scripts, so that a sequence of transactions can occur whilst keeping track of changing variables. This allows for more complex ‘stateful’ smart contracts, like Ethereum, whilst maintaining and even increasing the speed and efficiency of Bitcoins’ UTXO model transactions.
diff --git a/content/docs/core/minimawhitepaper/specialthanksto.mdx b/content/docs/core/minimawhitepaper/specialthanksto.mdx
new file mode 100644
index 0000000..128a16f
--- /dev/null
+++ b/content/docs/core/minimawhitepaper/specialthanksto.mdx
@@ -0,0 +1,56 @@
+---
+title: Special thanks to
+tag: whitepaper
+---
+
+The Indomitable Satoshi Nakamoto.
+
+Acknowledgements: Paddy Cerri, Hugo Feiler, Barnaby Girling, Adam Feiler, The Minima Team.
+
+References
+
+[1] Bitcoin: A Peer-to-Peer Electronic Cash System. Satoshi Nakamoto. https://bitcoin.org/bitcoin.pdf
+
+[2] Peter Todd: Making UTXO set growth irrelevant with low latency delayed TXO commitments. https://petertodd.org/2016/delayed-txo-commitments
+
+[3] DAGCoin: A cryptocurrency without blocks. https://bitcointalk.org/index.php?topic=1177633.0
+
+[4] Mini Blockchain: http://cryptonite.info/wiki/index.php?title=Mini-blockchain_scheme
+
+[5] Gregory Maxwell: https://en.bitcoin.it/wiki/User:Gmaxwell/alt_ideas
+
+[6] Vitalik Buterin: https://blog.ethereum.org/2014/07/11/toward-a-12-second-block-time/
+
+[7] Secure High Rate Transaction Processing in Bitcoin: https://eprint.iacr.org/2013/881.pdf
+
+[8] IOTA: https://wiki.iota.org/learn/about-iota/an-introduction-to-iota/
+
+[9] Adam Back, HashCash: http://www.hashcash.org/
+
+[10] P2Pool: https://en.bitcoin.it/wiki/P2Pool
+
+[11] GMSS signature scheme: https://link.springer.com/chapter/10.1007/978-3-540-72738-5_3
+
+[12] Eltoo: https://blockstream.com/eltoo.pdf
+
+[13] Merkle Signature Scheme: https://en.wikipedia.org/wiki/Merkle_signature_scheme
+
+[14] Channel Factories: https://www.tik.ee.ethz.ch/file/a20a865ce40d40c8f942cf206a7cba96/Scalable_Funding_Of_Blockchain_Micropayment_Networks_(1).pdf
+ https://medium.com/chainrift-research/onboarding-the-masses-channel-factories-6e5c26b07cf1
+
+[15] Liveliness: https://en.wikipedia.org/wiki/Liveness
+
+[16] Decentralized Energy: https://www.carbontrust.com/news/2013/01/decentralised-energy-powering-a-sustainable-future/
+
+[17] https://www.power-technology.com/features/can-the-uk-ever-achieve-a-fully-decentralised-energy-system/
+
+[18] Ethereum : https://www.ethereum.org/
+
+[19] Proof of Proof of Work : https://eprint.iacr.org/2017/963.pdf
+
+
+
+
+
+
+
diff --git a/content/docs/core/minimawhitepaper/storagelessmmrutxo.mdx b/content/docs/core/minimawhitepaper/storagelessmmrutxo.mdx
new file mode 100644
index 0000000..9c282f6
--- /dev/null
+++ b/content/docs/core/minimawhitepaper/storagelessmmrutxo.mdx
@@ -0,0 +1,16 @@
+---
+title: Storage-less MMR UTXO
+tag: whitepaper
+---
+
+In the old world, every user kept track of every account in a big book (or database). Every user had a copy of this book. Whenever a user wanted to send a transaction, every user checked the transaction was valid, by checking the inputs were valid in the big book and updating the books’ pages as necessary. The more transactions, the bigger the book.
+
+In the new world, each user has a specific page in the book, with all their account details. That page is ripped out of the book and given to that user. Each user rips out their own page. Every user only keeps their own page and the spine of the whole book. Whenever a user wants to send a transaction, they add a copy of their page, which verifiably fits the spine, so that users can check if the transaction is valid, update the page, and update the spine ready for the next transaction. Now users only store their own transactions, and a cryptographic spine no thicker than a single page. Orders of magnitude less data.
+
+Minima does not have a database (or big book) that stores all the Unspent Transaction Outputs, instead, utilising Peter Todds’ MMR[[4]](/docs/learn/minimawhitepaper/specialthanksto) storage-less Proof DB. It allows for an almost limitless amount of provable data to be added and updated in a particular hash tree. It’s a little bit like a SQL database with INSERT and UPDATE, but no SELECT or DELETE. The trick is that if you have data in the database, and are listening to all the additions and updates, you can always prove what data you know, your version of SELECT. Data proves it exists with a Merkle proof to the root of the MMR hash tree.
+
+Each user keeps track of their own coins, rather than miners or even all users keeping track of all the coins. This is an infinitesimally small amount of data in comparison to an entire blockchain. But - each user must stay up to date with the blockchain. By doing so they can keep track of the Merkle proofs required to prove their coins not only exist but are unspent. This proof changes with every addition or update to the MMR. Should a user not keep track of his coins, they would not be lost, but he would need a third party to help recover them. He would need to find either an archive node that stores everything – for the purposes of selling the data in this exact scenario, or have previously set up a friend or chat group to keep track of extra coins (coin-proofs pose no security issues), and have them rediscover the individual MMR proofs for their coins.
+
+Minima goes MMR real-time. Each block commits to the current MMR state for that block. Each user sends his transactions with a recent MMR proof, to prove the transaction is valid. Users can check these details with their latest MMR database, and update as necessary when a block is accepted. This process will need to be made very fast. The MMR database stores multiple overlapping MMR states, one for each block, and it needs to be able to prune and un-prune MMR data and derive proofs quickly for multiple changing states. Fun.
+
+
diff --git a/content/docs/core/minimawhitepaper/thepulsenetwork.mdx b/content/docs/core/minimawhitepaper/thepulsenetwork.mdx
new file mode 100644
index 0000000..2417105
--- /dev/null
+++ b/content/docs/core/minimawhitepaper/thepulsenetwork.mdx
@@ -0,0 +1,22 @@
+---
+title: The Pulse Network
+tag: whitepaper
+---
+
+Both Minima and Maxima require users to perform a small amount of PoW when sending messages. The more messages, the more PoW. The more PoW, the more secure the network. But what if a user is not sending any messages? Can that user also help to secure the network? What if sending a message is time-critical, and there must be no delay before sending it – say a high-frequency trader? Maxima addresses both these concerns by repurposing existing technology, allowing users to do the work beforehand, and then present that work as proof when sending messages.
+
+Most network protocols have a PING message. This is a message network peers periodically send to check the health and status of their peers. Network nodes send a PING message and peers reply, to show they are functioning correctly. But in a crypto network like Minima far more information on the health and status of a node can be transmitted in a PING message. Add some PoW to a PING message, and you create a Pulse.
+
+Every 10 minutes every Minima user creates a valid Tx-PoW message, with its current correct block details, but leaves the transaction blank. Performs 10 seconds of work. Then sends this message to each of its peers. If the message is not a valid Tx-PoW message, the peer is kicked off the network. If a peer does not send a Pulse message every 10 minutes, the peer is kicked off the network. If the Tx-PoW message is also a block, on average 1 Tx-PoW message every 50 seconds, that is then forwarded on to the rest of the network
+
+This has many benefits :
+
+- Shares the peers’ current mempool - the list of transactions it knows about not in the current longest chain. Any discrepancies can be resolved and missing transactions passed on. Peer data synchronisation.
+- Shows the peer is a functioning Minima node, has a working network connection, is a valid router for network messages and can help secure the network.
+- Adds to the overall PoW security of the network.
+- This is all off-chain. Only the immediate peers check the Pulse message and only a block is forwarded on to the rest of the network.
+
+As the requirements to send a Pulse message are so small, should a peer not be able to send a Pulse message, there must be something wrong, so there is no point wasting resources. When they fix themselves, they can come back online, and rejoin the network. Those thinking they will not pay the PoW, will just be kicked off the network.
+
+Minima has a Pulse. No zombies allowed (nodes with no Pulse).
+
diff --git a/content/docs/core/minimawhitepaper/txpow.mdx b/content/docs/core/minimawhitepaper/txpow.mdx
new file mode 100644
index 0000000..0816c0f
--- /dev/null
+++ b/content/docs/core/minimawhitepaper/txpow.mdx
@@ -0,0 +1,19 @@
+---
+title: Tx-PoW
+tag: whitepaper
+---
+
+Removing the miners requires the users themselves to secure the chain. User-based PoW security has been tried before. The DAG[[3]](/docs/learn/minimawhitepaper/specialthanksto) style IOTA[[8]](/docs/learn/minimawhitepaper/specialthanksto) allows users to perform a small amount of PoW work before they can send their transaction. Unlike Minima, IOTA does not use a blockchain, instead opting for a transaction DAG or Tangle. Whether the Tangle can converge in a decentralized fashion is still a topic of debate and recently IOTA switched to a new system, in an attempt to rectify their current solution, a centralized checkpoint server.
+
+Minima uses a Tx-PoW blockchain, an idea first started with P2Pool[[10]](/docs/learn/minimawhitepaper/specialthanksto), a protocol that allows multiple users to trustlessly perform small amounts of work and then sum all of those pieces up into a full block's worth of PoW. With a single PoW value equal to the sum of the smaller parts. Everyone benefits from the total work done. This would work well in a transaction based security protocol. All the transactions could do a small amount of work, and then sum all of that up into single blocks. This way Minima removes the miners but keeps the blockchain as the single PoW-secured time-ordered list of events.
+
+Each transaction in Minima is PoW mined. The process is very similar to searching for blocks on any other PoW blockchain. When you find a Tx-PoW that satisfies the network allowed difficulty, 10s average work per device, your transaction may be broadcast, relayed across the network, and added to blocks. The network can determine the minimum Tx-PoW by averaging recent transactions. But, this is also how the blockchain is constructed, since if by chance your Tx-PoW value is high enough, determined by the network to be 1 Tx-PoW every 50 seconds, you have not only mined your transaction but you have also mined a block, that users can add to the current chain. The more transactions being sent the higher this block difficulty will be. Users wanting to send transactions, construct a Tx-PoW header that is foremost a record of their own transaction and as an adjunct a block header that represents their current view of the network. Since blocks only store the hashes of transactions, like Compact blocks in Bitcoin, they are of negligible size. A 10KB block would hold about 330 transaction hashes. Finding a block is the most secure action a user can do to safeguard their coins and honest blocks help sustain the health of the network. For the user, this is all seamless. Whenever a user sends a transaction, sometimes they also find a block.
+
+The Tx-PoW chain lends itself well to GHOST[[7]](/docs/learn/minimawhitepaper/specialthanksto) as transactions are added to blocks even if they themselves are blocks. With a complete list of the last n blocks, it is independently possible to calculate the block tree created by all the stale blocks included as transactions in the main chain. GHOST allows for consensus to be reached, with much faster block times than a simple Longest Chain Rule.
+
+This type of system means that if there are no transactions then there can be no blocks. Minima will need to reach a critical mass of transactions to sustain a secure blockchain. The transaction rate will need to be very high. Since all the security of Minima is derived from the number of transactions, the more transactions there are, the more secure the network. There will be a bootstrap period until Minima processes enough transactions to secure the network adequately.
+
+Now – every single user is involved in not only validating the entire chain but also in maintaining the liveliness of the network and in preventing censorship attacks. All Minima users perform both the validation and construction of the blockchain.
+
+
+
diff --git a/content/docs/core/presale.mdx b/content/docs/core/presale.mdx
index 9c6c8c2..050d767 100644
--- a/content/docs/core/presale.mdx
+++ b/content/docs/core/presale.mdx
@@ -1,256 +1,256 @@
----
-title: Presale Privacy Policy
-description: The terms of use for the website
-tag: core
----
-## 1. PRIVACY POLICY
-
-1.1 This Privacy Policy (“Privacy Policy”) describes and summarizes the policies and procedures of Minima GmbH. (“Minima ”, ”we”, ”our”, ”us”) with respect to the collection, use, storing, processing, disclosure, sharing and protection of personal data provided or acquired through use of
-
-(i) our website located at www.minima.global and all related subdomains (collectively, the ”Website”), and
-
-(ii) the functionality enabling access to the token offering platform, delivered via application programming interfaces, software development kits, and any other services, content, tools and features as made available by Minima from time to time (collectively, the ”Services”), whether the Website or Services are accessed via a computer, mobile device, or other technology or means.
-
-1.2 Minima takes the privacy of individuals very seriously. We are committed to maintaining the security, confidentiality and integrity of the personal data in our custody or control, and protecting such data in accordance with the applicable legislation. Minima regularly re-evaluates its privacy and security practices and adapts them as necessary to deal with new regulatory requirements, changes in legislation and/or security standards.
-
-## 2. DEFINITIONS
-2.1 For the purposes of this Privacy Policy, in addition to the capitalized terms defined elsewhere in this Privacy Policy, the following terms shall have the meanings ascribed to them as follows:“Consent of User” means any freely given, specific, informed and unambiguous indication of the User’s wishes, given by a statement or by a clear affirmative action, by which User signifies agreement to the processing of their Personal Data.
-
-**“Controller”** shall have the meaning given to such term in the GDPR.“Data Protection Laws” means, as applicable, the Federal Act on Data Protection 1992 (FADP), the GDPR or any similar or equivalent law, regulation, statute, legislation, directive or ruling, of any government, legislature, parliament, regulatory authority, agency or commission having or purporting to have jurisdiction on behalf of any nation, or province or state or other subdivision thereof, in force from time to time in User’s jurisdiction with respect to the privacy, protection, processing, collection, use or disclosure of Personal Data.
-
-**“GDPR”** means the Regulation (EU) 2016/679 of the European Parliament and of the Council of 27 April 2016 on the protection of natural persons with regard to the processing of Personal Data and on the free movement of such data, and repealing Directive 95/46/EC.
-
-**“Personal Data”** means any information relating to an identified or identifiable natural person; an identifiable natural person is one who can be identified, directly or indirectly, in particular by reference to an identifier such as a name, an identification number, location data, an online identifier or to one or more factors specific to the physical, physiological, genetic, mental, economic, cultural or social identity of that natural person. Personal Data includes without limitation Registration Information, Financial Financial Data and Financial Account Credentials, but excludes publicly available business information.
-
-**“Processing”** shall have the meaning given to such term in the GDPR.
-
-**“Processor”** shall have the meaning given to such term in the GDPR.
-
-**“Special Categories of Personal Data”** means Personal Data revealing racial or ethnic origin, political opinions, religious or philosophical beliefs, or trade union membership, and genetic data, biometric data, data concerning health or data concerning a natural person’s sex life or sexual orientation.
-
-**“Supervisory Authority”** shall have the meaning given to such term in the GDPR.
-
-## 3. APPLICATION
-3.1 Minima recommends that Users read this Privacy Policy carefully and entirely to ensure that Users are aware of all the practices and policies of Minima in respect of Personal Data collection, use, disclosure, processing and protection.
-
-This Privacy Policy applies to:
-
-3.1.1 visitors to our Website (“Visitors”);
-
-3.1.2 end users who use the Services (“Direct Users”);
-
-3.1.3 users (individuals acting in their own capacity or on behalf of a legal entity) who sign up for an account on the Website in order to test the functionality of the Services (“Account Users”); and
-
-3.1.4 end users who use the Services through a third party application (“Indirect Users”),parties referred to in sub-clauses 3.1.1. to 3.1.3 are collectively referred to as ”Users”.
-
-## 4. ACKNOWLEDGEMENT
-
-4.1 By accessing and using the Website and/or Services (together, the ”Services”) User hereby:
-
-(i) acknowledges and confirms that User is at least eighteen (18) years old, or of the legal age of majority in the jurisdiction in which User resides; and
-
-(ii) consents to the collection, use, and processing of their Personal Data as described in this Privacy Policy. Except as set forth in this Privacy Policy, Minima will not use User’s Personal Data for any other purpose without User’s Consent. Minima will only disclose User’s Personal Data to third parties strictly for the purposes described in this Privacy Policy.
-
-Minima does not, and will not, sell, lease, license or rent User’s Personal Data to any third party, nor does Minima use the collected Personal Data for advertising or marketing purposes.
-
-## 5. COLLECTION OF PERSONAL DATA
-
-5.1 When User uses the Services Minima will collect information, including Personal Data, for the purpose of providing, maintaining and improving the Services, as well as complying with applicable laws or regulations. Minima collects Personal Data primarily in three (3) ways:
-
-5.2 Information user voluntarily provides to minima: When User contacts Minima’s support team (by email, phone or contact form on the Website) with respect to the Website or Services related issues or communicates with Minima in any way, User voluntarily gives Minima information that Minima collects and processes and this Privacy Policy. The Minima information may include Personal Data such as: name, email address, phone number, and address. When User voluntarily submits Personal Data with their inquiry or request pertaining to the Services, Minima will process any such Personal Data in accordance with this Privacy Policy. In some cases, Minima may require additional information, including Personal Data, in order to identify User while processing their inquiry or request. Minima may also maintain a record of such communications with Users, including any follow-ups and subsequent feedback, for internal purposes.
-
-5.3 Some of the Services require registration. When creating an account with Minima, Account Users and Direct Users will have to provide Personal Data, including name, email address and password (together, ”Registration Information”), in order to be able to use the respective Services.
-
-5.4 Subscribers will have to provide their email address for the purpose of receiving the communications to which they have subscribed.
-
-5.5 Information minima collects through user’s use of the services: Information Minima collects automatically. Each time Users use the Services, Minima collects information relating but not limited to: (i) which Services are used; (ii) all the areas within the Services that User visits; (iii) the time of day when User accesses and uses the Services; (iv) actions taken by User when using and interacting with the Services; (v) which Services or parts thereof generate error messages; and (vi) User’s browser, operating system and internet protocol (“IP”) address. Minima collects this information automatically as part of its technical log files or other metadata, as well as through the use of cookies, web beacons and other similar tracking technologies. All personally identifiable information collected through User’s use of the Services is treated as Personal Data in accordance with the terms of this Privacy Policy. Minima may also use the collected information in an anonymous and/or aggregate way (i.e., it is not personally identifiable in this state) for a variety of purposes, including but not limited to improving user experience, enhancing the Services and developing new services (see “Use of Non-Personal Data”).
-
-5.6 Information collected by Cookies: A cookie is a data file placed on a device when it is used to access a service. Cookies or similar technologies may be used for many purposes, including without limitation remembering the User and User’s preferences and tracking User’s visits to the Website or access to the Services. Cookies work by assigning a number to User that has no meaning outside of the assigning website or application. Minima uses cookies for various purposes, including without limitation tracking User’s movements within the Website, analyzing trends, gathering statistical data and improving user experience and the overall quality of the Services. Minima encodes and encrypts the cookies so that only Minima can interpret the information stored in them. Cookies can be disabled or controlled by setting a preference within User’s web browser or on User’s device. Thus, if User does not want information to be collected through the use of cookies, User can restrict or limit the use of cookies at the individual browser or device level. However, if User chooses to disable cookies some features of the Services may not function properly or Minima may not be able to customize the delivery of information to User.
-
-5.7 First-Party Cookies: Minima uses session cookies and persistent cookies when User uses the Services. These are essential to the operation of the Website and the provision of Services. The session cookie is stored in temporary memory and is not retained after the browser is closed. Session cookies do not collect information from User’s computer. They store information in the form of a session identification that does not personally identify the User. The persistent cookies are set with expiration date and are stored on User’s hard drive until they expire or User deletes them. Minima does not collect any Personal Data in the session and persistent cookies. Minima uses session and persistent cookies for technical purposes, including but not limited to verifying the origin of requests, distributing requests among multiple servers, authenticating Users and determining what functionality of the Services such Users are allowed to access.
-
-5.8 Third-Party Cookies: Minima also uses third-party cookies. These third-party service providers with whom Minima has contracted help analyze certain online activities and provide analytics services.
-
-## 6. USE OF INFORMATION
-6.1 Use of Personal Data: Minima may use the collected Personal Data for the following purposes:
-
-6.1.1 to provide, maintain, administer, support, protect and improve the Services;
-
-6.1.2 to meet the regulatory compliance requirements set forth in the applicable laws;6.1.3 to provide customer support;
-
-6.1.4 to handle and process inquiries submitted by Visitors;6.1.5 to send system alert messages to Account Users and Direct Users;
-
-6.1.6 to enforce compliance with any user terms;
-
-6.1.7 to investigate any fraud, illegal activity or wrongdoing in connection with the Services;
-
-6.1.8 to protect the rights, property and safety of Users, Minima and third parties;
-
-6.1.9 to transfer the Personal Data in case of a sale, merger, consolidation, or acquisition. In such case, any acquirer will be subject to Minima’s obligations under this Privacy Policy;
-
-6.1.10 to store the Personal Data in order to be able to provide the Services on Minima ‘s servers or servers provided by third parties that are committed to complying with Minima‘s obligations contained in this Privacy Policy and with whom Minima has contracted;
-
-6.1.11 to troubleshoot, investigate and fix service related errors. In such cases, Users’ Personal Data may be visible to and/or accessed by technicians, IT staff and/or system administrators authorized by Minima;
-
-6.1.12 to combine Personal Data with information obtained through the use of cookies, web beacons or similar technologies to improve the Services and user experience;6.1.13 to comply with legal obligations to which Minima is subject;
-
-6.1.14 to establish compliance with the Data Protection Laws during an audit or inspection conducted by an appropriate data protection authority, Developer or an external auditor mandated by Developer, provided that in all cases the Personal Data will remain subject to the provisions of this Privacy Policy;6.1.15 to send Subscribers informational content they subscribed to;
-
-6.1.16 to generate Anonymized Data (defined below) and Anonymized Aggregate Data (defined below); and
-
-6.1.17 to respond (or, in the case of Indirect Users, to assist Developer in responding) to User’s requests for exercising User’s rights under the applicable Data Protection Laws.
-
-6.2 Use of Non-Personal Data: Minima may generate anonymous data derived from or based on Personal Data collected from User so that the results are no longer personally identifiable with respect to that User (“Anonymized Data”), and combine or incorporate such Anonymized Data with or into other similar data or information collected from other Users or derived from other Users’ use of the Services (“Anonymized Aggregate Data”). Minima may use such Anonymized Data and Anonymized Aggregate Data for various business purposes, including but not limited to:
-
-6.2.1 providing, maintaining, supporting and improving the Services;
-
-6.2.2 conducting analytical research, compiling statistical reports and performance tracking;
-
-6.2.3 developing and/or improving other Minima’s services and products; and
-
-6.2.4 sharing such Anonymized Data and Anonymized Aggregate Data with Minima's affiliates, agents or other third parties with whom Minima has a business relationship.
-
-6.2.5 Anonymized Data and Anonymized Aggregate Data are not Personal Data, and consequently the provisions in this Privacy Policy are not applicable to such data.
-
-## 7. DISCLOSURES AND TRANSFERS
-
-7.1 By using the Services and submitting any Personal Data to Minima, User acknowledges and agrees that their Personal Data may be processed in and transferred to jurisdiction(s) other than User’s country of residence which may have different Data Protection Laws than those in User’s country. Personal Data may be accessed by authorized staff from Minima offices in Switzerland and UK for the purposes of troubleshooting and debugging. [The Personal Data of Minima User residing in the EU/EEA will only be stored in EU and will only be transferred outside EU as set forth in the GDPR.] Minima will take all steps reasonably necessary to ensure that Personal Data is at all times treated securely and in accordance with this Privacy Policy.
-
-7.2 Minima will only transfer and/or disclose Personal Data as specified in this Privacy Policy unless User gives Consent to the disclosure and/or transfer to any other third party.
-
-7.3 Disclosure and/or Transfer to Third-Party Providers: Minima has put in place contractual (including data protection, confidentiality and security provisions) and other organizational safeguards with third-party service providers engaged by Minima in connection with the provision, operation, hosting, security or maintenance of the Services, including cloud-based email service, data hosting and storage providers (“Third-Party Providers”).
-Such safeguards aim to ensure an adequate level of protection of Personal Data. Minima may disclose or transfer Personal Data to such Third-Party Providers solely for the identified purposes and solely in connection with the Services. Minima will restrict access to Personal Data to what is strictly necessary for the performance of such Third-Party Provider’s contractual obligations. Such Third-Party Providers may process, store and/or have access to Personal Data. Any transfer of Personal Data of EU/EEA Users to a Third-Party Provider located in a third country will be subject to articles 45 and 46 of the GDPR and will take place either
-
-(i) on the basis of an adequacy decision by the European Commission, or
-
-(ii) by entering into the standard data protection clauses adopted by the Commission, or by ensuring the respective Third-Party Provider has signed up to the EU-US Privacy Shield. At the date of this Privacy Policy Minima uses the following Third-Party Providers:
-
-7.3.1 Data Disclosure
-
-7.4 Disclosure for Legal Reasons: Minima may disclose Personal Data without User’s Consent when Minima believes in good faith that the disclosure of such information is reasonably necessary or appropriate:
-
-7.4.1 to comply with the Data Protection Laws, any subpoena, enforceable request from the competent authorities, or other legal process;
-
-7.4.2 to enforce Minima’s rights against User or in connection with a breach by User of any user terms in force and, as applicable, the End User Licence Agreement, including investigation of potential violations;
-
-7.4.3 to help detect, curb or investigate fraud or other prohibited or illegal activities that affect or hurt the interests of Minima or third parties;
-
-7.4.4 to identify, contact or bring legal action against someone who may be causing injury to, or interference with (either intentionally or unintentionally), Minima’s rights or property, other Users of the Services, or anyone else (including the rights or property of anyone else) that could be harmed by such activities; and
-
-7.4.5 to help Minima comply with a legal obligation to which Minima is subject, or accounting or security requirements, in which case Minima may disclose such information to its auditors, professional consultants, accountants and/or legal advisors. In all the foregoing cases, Minima will disclose Personal Data only to the extent required or permitted by the applicable Data Protection Laws.
-
-7.5 Transfer of Ownership: User’s Personal Data may be disclosed and/or transferred upon change of control as a result of a sale of all or a substantial portion of Minima’s assets or stock, merger, acquisition or reorganization, including any due diligence process carried out in relation to the same, provided that the Personal Data disclosed continues to be used solely for the purposes permitted by, and subject to the provisions in, this Privacy Policy by the entity acquiring access to such information. If the entire or substantial ownership of Minima or Services were to change, User’s Personal Data may be transferred to the new owner to ensure continuity of the Services. In any such transfer of ownership User’s Personal Data will remain subject to the promises of the then and current Privacy Policy. Minima will provide reasonable advance notice to User via the Website of any such change in ownership or control of User’s Personal Data or in case such Personal Data becomes subject to a different privacy policy.
-
-## 8. CONTROLLER AND PROCESSOR
-
-8.1 In providing the Services to Visitors, Direct Users and Account Users, Minima acts as Controller of Personal Data collected from such Users. In the case of Indirect Users, Minima acts as a Processor and the respective Developer acts as Controller of collected Personal Data. In performing its obligations as Processor Minima will at all times act on Controller’s behalf and according to Controller’s lawful instructions.
-
-8.2 Furthermore, Minima adheres to the following general principles with respect to Personal Data processing:
-
-8.2.1 not to collect more Personal Data than is necessary for the purpose of providing the Services;
-
-8.2.2 not to use Personal Data for any other purposes than those specified in this Privacy Policy;
-
-8.2.3 ensure that all personnel authorized by Minima to process Personal Data have committed themselves to confidentiality or are under an appropriate statutory obligation of confidentiality; and
-
-8.2.4 not to knowingly solicit, access, collect and/or process any Special Categories of Personal Data.
-
-## 9. LEGAL BASIS FOR PROCESSING (EU/EEA USERS)
-
-9.1 In the case of Users from the European Union (EU) and European Economic Area (EEA), Minima’s legal basis for processing the Personal Data collected as described in this Privacy Policy will depend on the type of Personal Data and the circumstances under which it is collected. Minima will collect and process Personal Data in its capacity as Controller based on the following legal bases:9.1.1 processing is necessary for the performance of a contract to which the User is a party, particularly for the provision of the Services under the user terms;
-
-9.1.2 processing is necessary for compliance with a legal obligation to which Minima is subject; and/or
-
-9.1.3 processing is necessary for the purposes of the legitimate interests pursued by Minima as the Controller of Personal Data or by a third party, except where such interests are overridden by the interests or fundamental rights and freedoms of User which require the protection of Personal Data.
-
-9.2 If there is another legal basis for Minima to collect and process Personal Data in its capacity as Controller, Minima will provide the required notification to User at or before the time the Personal Data is collected.
-
-9.3 If User voluntarily provides Personal Data to Minima when contacting Minima with respect to the Services, such User will be deemed to have given Consent to the collection, use and processing of Personal Data by Minima as reasonably necessary to carry out the specific purpose(s) for which User has provided the Personal Data. Minima will rely on such implied Consent as if it were given to Minima under normal circumstances.
-
-## 10. SPECIAL CATEGORIES OF PERSONAL DATA
-
-10.1 Minima does not solicit from Users, nor does it knowingly collect or process, any Special Categories of Personal Data. Users are requested at all times to refrain from voluntarily providing any Special Categories of Personal Data to Minima.
-
-10.2 ANTI-SPAM LEGISLATION
-
-10.3 Minima is committed to controlling unsolicited commercial e-mail, or “spam”. In this respect, Minima includes an “unsubscribe” or “opt-out” link in any informational emails sent to Users. Users wishing to opt-out of receiving such informational emails may do so at any time by following the instructions included in such emails. Minima will not sell, lease or rent its e-mail Subscribers lists to any third party, nor will Minima use the collected email addresses for purposes other than that for which they were initially collected. User can’t opt-out of receiving emails that Minima is required by law to provide to User in connection with the Services, such as system notification emails, notification on changes or updates to this Privacy Policy or the General Terms of Service, or other important mandatory notifications relating to User’s access to and use of the Services.
-
-10.4 THIRD-PARTY WEBSITES
-
-10.5 The Services may include links to, or otherwise direct User’s attention towards, websites operated by third parties and not by Minima. Such links are provided solely for User’s convenience and informational purposes. The inclusion of any link does not imply an association, support, endorsement, consent, examination, or approval by Minima of such third party and third-party website (including without limitation any content on such website). Minima shall not be liable for the information and content contained in any third-party website or for User’s use of or incapacity to use such website. Access to any third-party website is at User’s own risk, and User must be aware of the fact that linked websites have terms and privacy policies different from those of Minima and Minima does not control them. If User elects to use any third-party website and/or provide any Personal Data when using such website, User is solely responsible for evaluating the terms and privacy policy that apply. Minima will have no liability for any loss or damage that User may incur through providing any Personal Data on such third-party websites.
-
-## 11. USER’S RIGHTS UNDER GDPR (FOR EU/EEA USERS)
-
-11.1 Taking into account the nature of the processing, Minima will respond (or, when acting as Processor, provide reasonable assistance to Developer for the fulfilment of Developer’s obligation to respond) to requests for exercising User’s rights under GDPR as set forth below:
-
-11.1.1 the right to be informed: User has the right to receive fair processing information about their Personal Data processed by Minima, including without limitation the recipients or categories of recipients to whom the Personal Data has been or will be disclosed, in particular transfers to recipients in third countries or international organizations, and the appropriate safeguards relating to such transfers.11.1.2 the right of access: User has the right to obtain: (i) confirmation that their Personal Data is being processed; and (ii) access to such Personal Data.
-
-11.1.3 the right to rectification: User is entitled to have Personal Data rectified if it is inaccurate or incomplete. While User can amend or change the Registration Information and Financial Account Credentials, Minima can’t, however, rectify any Payment Order Data or Financial Data as this information is received from Developer or Financial Institution, respectively.
-
-11.1.4 the right to erasure (right to be forgotten): User has the right to request the deletion of their Personal Data when there is no compelling reason for its continued processing or User withdraws Consent to such processing.
-
-11.1.5 the right to restrict processing: User has the right to block processing of their Personal Data on the grounds specified in the GDPR.
-
-11.1.6 the right to data portability: User may request to receive free of charge a copy of Personal Data stored in Minima’s systems in a structured, commonly used and machine-readable format or have Minima transmit the data directly to another Controller if this is technically feasible. Minima will respond to any data portability requests as set forth in the GDPR.
-
-11.1.7 the right to object: User has the right to object to:
-(i) processing based on legitimate interests or the performance of a task in the public interest/exercise of official authority (including profiling); (ii) direct marketing (including profiling); and (iii) processing for purposes of scientific/historical research and statistics. Minima does not process User’s Personal Data for direct marketing or for purposes of scientific/historical research and statistics.
-
-11.1.8 rights in relation to automated decision-making and profiling: User has the right to object to processing of Personal Data for the purposes of automated individual decision-making (making a decision solely by automated means without any human involvement) and profiling (automated processing of Personal Data to evaluate certain things about an individual). Minima does not process User’s Personal Data for the purposes of automated individual decision-making or profiling.
-
-11.1.9 the right to lodge a complaint with a Supervisory Authority: User has the right to lodge a complaint about Minima’s data protection or privacy practices, or the exercise of any of User’s rights with respect to Personal Data as detailed in this Privacy Policy, with User’s local Supervisory Authority.
-
-11.1.10 the right to withdraw Consent: Provided that the Consent is the legal basis for processing, User may withdraw Consent to Minima’s processing of Personal Data at any time by contacting Minima. User may exercise any of the foregoing rights at any time by contacting Minima at privacy@minima.global Where Users’ requests for exercising their rights under GDPR are manifestly unfounded or excessive, in particular because of their repetitive character, or further copies of the Personal Data undergoing processing are requested, Minima may charge a reasonable fee taking into account the administrative costs of providing the information or communication or taking the action requested.
-
-## 12. DATA DELETION AND RETENTION
-12.1 Minima will retain Personal Data for no longer than strictly necessary for the purposes for which such Personal Data is collected and processed. The retention period depends on the requirements of the applicable laws or regulations Minima must comply with, the purposes of the collection and processing of Personal Data, and the legitimate interests of Minima to establish, exercise or defend its legal rights. When Minima acts as a Processor of Personal Data, Minima may apply a different retention period if so required by the Controller on whose behalf the Personal Data is being processed by Minima.
-
-12.2 Minima will delete User’s Personal Data from its production servers when:
-
-12.2.1 User exercises the right to be forgotten or, if applicable, withdraws Consent;
-
-12.2.2 Account User deletes their account on the Website, or such account is automatically deleted by Minima as described in the user terms;
-
-12.2.3 Direct User deletes their account in Minima’s systems created in connection with the provided Services;
-
-12.2.4 Developer deletes Indirect User’s Personal Data processed by Minima in connection with the Services.
-
-12.3 As a result, User’s Personal Data will be deleted and excised permanently from Minima’s production servers, subject to Minima’s right to generate Anonymized Data and Anonymized Aggregate Data prior to such deletion. Further use of the corresponding Services will be impossible. Notwithstanding anything to the contrary in this Privacy Policy, Minima will retain User’s Personal Data or portions thereof:
-
-12.3.1 in backup files on its backup servers for a period of up to one (1) month from the date of deletion from the production servers in order to ensure compliance with internal business continuity and disaster recovery procedures; and
-
-12.3.2 in log files in order to: (i) comply with the requirements of the applicable laws or regulations; (ii) exercise or defend (ongoing) legal claims; and (iii) meet audit or statutory requirements. The retention period for Personal Data retained in log files shall be a minimum of five (5) years from the date of deletion from the production servers, or such longer period as required by the applicable laws, unless subject to statutory or regulatory change.
-
-12.4 Backups and log files containing Personal Data are stored separately from the production servers. All Personal Data retained in backup files and log files will be treated in accordance with the terms of this Privacy Policy for as long as it is retained before being automatically deleted after the retention period has elapsed.
-
-12.5 Backup files are stored using strong asymmetric encryption and Minima’s authorized personnel does not access such files in the ordinary course of business operations, nor will Minima actively process any Personal Data retained in backup files anymore.
-
-## 13. PERSONAL DATA SECURITY
-
-13.1 Online Confidentiality:
-
-13.1.1 User must keep the set of credentials provided as part of the Registration Information for creating an account with Minima (“Credentials”) secure and never disclose them to any third party. User is solely responsible for maintaining the confidentiality of such Credentials. If User suspects that the Credentials have been stolen or been made known to others, User must change them immediately and contact Minima promptly at Minima. Minima shall not be responsible for any loss or damage resulting from access to User’s account through Registration Information or Credentials obtained from User or through violation of this Privacy Policy or the user terms.
-
-13.1.2 Although Minima will take reasonable steps to ensure that User’s Personal Data is treated and stored securely, unfortunately, the sending of information via the Internet is not totally secure and on occasion such information may be intercepted. Therefore, Minima can’t guarantee the security of Personal Data that User chooses voluntarily to send to Minima electronically. Minima expressly disclaims all liability for any interception or interruption of any Internet transmissions sent by User or any losses of or changes to data, including Personal Data, resulting from such interception or interruption.
-
-13.2 Personal Data Safeguards: Minima is committed to maintaining the confidentiality, integrity and security of the Personal Data of Users. Minima employs advanced security techniques to safeguard Personal Data against unauthorized access, use and/or disclosure. Minima strictly restricts access to Personal Data in accordance with specific internal procedures governing access to such information. Minima carefully selects the individuals privileged with access to Personal Data in accordance with internal security policies and practices, and each such individual is bound by confidentiality obligations. The Services ensure secure communications with TLS encryption. To maintain the security of online sessions and protect Minima’s systems from unauthorized access, Minima uses a combination of firewall barriers, encryption techniques and authentication procedures, among others. Access to Minima’s systems requires multiple levels of authentication, including biometric recognition procedures. Security personnel monitor the systems 24/7. Minima databases are both physically and logically protected from general employee access. Minima enforces physical controls on its premises. Minima is routinely verified for its use of encryption technologies and audited for its privacy practices. Minima tests its systems, the Website and Services infrastructure for any failure points that might allow hacking.
-
-13.3 Data Pseudonymization: In addition to the technical and organizational security measures employed by Minima to ensure security, confidentiality and integrity of Personal Data, Minima also uses data pseudonymization technique when processing and storing Personal Data in its systems. Pseudonymization consists of replacing the data fields which are the most identifying in a data record with pseudonyms. Personal Data which has undergone pseudonymization can no longer be attributed to a specific User without the use of additional information, and such additional information is kept by Minima separately and is subject to appropriate technical and organizational security measures to ensure that such pseudonymized Personal Data is not attributed to an identified or identifiable natural person.
-
-## 14. NOTIFICATION OF PERSONAL DATA BREACH
-
-14.1 If a security breach causes an unauthorized intrusion into Minima’s systems, software or networks that leads to the accidental or unlawful destruction, loss, alteration, unauthorized disclosure of, or access to, Personal Data transmitted, stored or otherwise processed by Minima (“Personal Data Breach”), Minima will notify the appropriate data protection authority unless the Personal Data Breach is unlikely to result in a risk to the rights and freedoms of affected Users. Minima will report the Personal Data Breach to the appropriate data protection authority without undue delay after having become aware of it and in any case within the timeframes as provided for in the applicable Data Protection Laws, by including all the pertinent information relating to such Personal Data Breach as required by the applicable Data Protection Laws. When the Personal Data Breach is likely to result in a high risk to the rights and freedoms of affected Users, or if required by the appropriate data protection authority, Minima will also communicate the Personal Data Breach to the affected Users without undue delay.
-
-14.2 When Minima acts as Processor for Developer, Minima will notify the Developer of a Personal Data Breach as described above, who in turn will fulfil its Personal Data Breach reporting obligations (towards the relevant data protection authority and Indirect Users) as set forth in the applicable Data Protection Laws.
-
-## 15. PRIVACY POLICY UPDATE
-
-15.1 Minima reserves the right to change this Privacy Policy at any time and from time to time in order to reflect changes in the Services or the applicable laws. If Minima decides to change this Privacy Policy in the future, Minima will post an appropriate notice at the top of this Privacy Policy page and/or give reasonable advance notice to Users through the Services or Website. Any non-material change (such as clarifications) to this Privacy Policy will become effective on the date the change is posted and any material changes will become effective thirty (30) days from their posting on the Website. Unless stated otherwise, this Privacy Policy applies to all Personal Data collected and processed by Minima in connection with the Services. The date this Privacy Policy was last revised appears at the top of this document. User is advised to print a copy of this Privacy Policy for reference and revisit this Privacy Policy from time to time to ensure that User is aware of any changes. User’s continued use of the Services after the changes to this Privacy Policy become effective signifies User’s acceptance of any such changes.
-
-## 16. DATA PROTECTION OFFICER
-
-16.1 Minima’s data protection officer can be reached at any time by email at privacy@minima.global in case of any questions with respect to Minima’s collection, use, disclosure or processing of Personal Data.
-
-## 17. CONTACT
-
-17.1 Any questions, comments or feedback regarding this Privacy Policy or any other privacy or security concern may be sent by email to privacy@minima.global
+---
+title: Presale Privacy Policy
+description: The terms of use for the website
+tag: core
+---
+## 1. PRIVACY POLICY
+
+1.1 This Privacy Policy (“Privacy Policy”) describes and summarizes the policies and procedures of Minima AG. (“Minima ”, ”we”, ”our”, ”us”) with respect to the collection, use, storing, processing, disclosure, sharing and protection of personal data provided or acquired through use of
+
+(i) our website located at www.minima.global and all related subdomains (collectively, the ”Website”), and
+
+(ii) the functionality enabling access to the token offering platform, delivered via application programming interfaces, software development kits, and any other services, content, tools and features as made available by Minima from time to time (collectively, the ”Services”), whether the Website or Services are accessed via a computer, mobile device, or other technology or means.
+
+1.2 Minima takes the privacy of individuals very seriously. We are committed to maintaining the security, confidentiality and integrity of the personal data in our custody or control, and protecting such data in accordance with the applicable legislation. Minima regularly re-evaluates its privacy and security practices and adapts them as necessary to deal with new regulatory requirements, changes in legislation and/or security standards.
+
+## 2. DEFINITIONS
+2.1 For the purposes of this Privacy Policy, in addition to the capitalized terms defined elsewhere in this Privacy Policy, the following terms shall have the meanings ascribed to them as follows:“Consent of User” means any freely given, specific, informed and unambiguous indication of the User’s wishes, given by a statement or by a clear affirmative action, by which User signifies agreement to the processing of their Personal Data.
+
+**“Controller”** shall have the meaning given to such term in the GDPR.“Data Protection Laws” means, as applicable, the Federal Act on Data Protection 1992 (FADP), the GDPR or any similar or equivalent law, regulation, statute, legislation, directive or ruling, of any government, legislature, parliament, regulatory authority, agency or commission having or purporting to have jurisdiction on behalf of any nation, or province or state or other subdivision thereof, in force from time to time in User’s jurisdiction with respect to the privacy, protection, processing, collection, use or disclosure of Personal Data.
+
+**“GDPR”** means the Regulation (EU) 2016/679 of the European Parliament and of the Council of 27 April 2016 on the protection of natural persons with regard to the processing of Personal Data and on the free movement of such data, and repealing Directive 95/46/EC.
+
+**“Personal Data”** means any information relating to an identified or identifiable natural person; an identifiable natural person is one who can be identified, directly or indirectly, in particular by reference to an identifier such as a name, an identification number, location data, an online identifier or to one or more factors specific to the physical, physiological, genetic, mental, economic, cultural or social identity of that natural person. Personal Data includes without limitation Registration Information, Financial Financial Data and Financial Account Credentials, but excludes publicly available business information.
+
+**“Processing”** shall have the meaning given to such term in the GDPR.
+
+**“Processor”** shall have the meaning given to such term in the GDPR.
+
+**“Special Categories of Personal Data”** means Personal Data revealing racial or ethnic origin, political opinions, religious or philosophical beliefs, or trade union membership, and genetic data, biometric data, data concerning health or data concerning a natural person’s sex life or sexual orientation.
+
+**“Supervisory Authority”** shall have the meaning given to such term in the GDPR.
+
+## 3. APPLICATION
+3.1 Minima recommends that Users read this Privacy Policy carefully and entirely to ensure that Users are aware of all the practices and policies of Minima in respect of Personal Data collection, use, disclosure, processing and protection.
+
+This Privacy Policy applies to:
+
+3.1.1 visitors to our Website (“Visitors”);
+
+3.1.2 end users who use the Services (“Direct Users”);
+
+3.1.3 users (individuals acting in their own capacity or on behalf of a legal entity) who sign up for an account on the Website in order to test the functionality of the Services (“Account Users”); and
+
+3.1.4 end users who use the Services through a third party application (“Indirect Users”),parties referred to in sub-clauses 3.1.1. to 3.1.3 are collectively referred to as ”Users”.
+
+## 4. ACKNOWLEDGEMENT
+
+4.1 By accessing and using the Website and/or Services (together, the ”Services”) User hereby:
+
+(i) acknowledges and confirms that User is at least eighteen (18) years old, or of the legal age of majority in the jurisdiction in which User resides; and
+
+(ii) consents to the collection, use, and processing of their Personal Data as described in this Privacy Policy. Except as set forth in this Privacy Policy, Minima will not use User’s Personal Data for any other purpose without User’s Consent. Minima will only disclose User’s Personal Data to third parties strictly for the purposes described in this Privacy Policy.
+
+Minima does not, and will not, sell, lease, license or rent User’s Personal Data to any third party, nor does Minima use the collected Personal Data for advertising or marketing purposes.
+
+## 5. COLLECTION OF PERSONAL DATA
+
+5.1 When User uses the Services Minima will collect information, including Personal Data, for the purpose of providing, maintaining and improving the Services, as well as complying with applicable laws or regulations. Minima collects Personal Data primarily in three (3) ways:
+
+5.2 Information user voluntarily provides to minima: When User contacts Minima’s support team (by email, phone or contact form on the Website) with respect to the Website or Services related issues or communicates with Minima in any way, User voluntarily gives Minima information that Minima collects and processes and this Privacy Policy. The Minima information may include Personal Data such as: name, email address, phone number, and address. When User voluntarily submits Personal Data with their inquiry or request pertaining to the Services, Minima will process any such Personal Data in accordance with this Privacy Policy. In some cases, Minima may require additional information, including Personal Data, in order to identify User while processing their inquiry or request. Minima may also maintain a record of such communications with Users, including any follow-ups and subsequent feedback, for internal purposes.
+
+5.3 Some of the Services require registration. When creating an account with Minima, Account Users and Direct Users will have to provide Personal Data, including name, email address and password (together, ”Registration Information”), in order to be able to use the respective Services.
+
+5.4 Subscribers will have to provide their email address for the purpose of receiving the communications to which they have subscribed.
+
+5.5 Information minima collects through user’s use of the services: Information Minima collects automatically. Each time Users use the Services, Minima collects information relating but not limited to: (i) which Services are used; (ii) all the areas within the Services that User visits; (iii) the time of day when User accesses and uses the Services; (iv) actions taken by User when using and interacting with the Services; (v) which Services or parts thereof generate error messages; and (vi) User’s browser, operating system and internet protocol (“IP”) address. Minima collects this information automatically as part of its technical log files or other metadata, as well as through the use of cookies, web beacons and other similar tracking technologies. All personally identifiable information collected through User’s use of the Services is treated as Personal Data in accordance with the terms of this Privacy Policy. Minima may also use the collected information in an anonymous and/or aggregate way (i.e., it is not personally identifiable in this state) for a variety of purposes, including but not limited to improving user experience, enhancing the Services and developing new services (see “Use of Non-Personal Data”).
+
+5.6 Information collected by Cookies: A cookie is a data file placed on a device when it is used to access a service. Cookies or similar technologies may be used for many purposes, including without limitation remembering the User and User’s preferences and tracking User’s visits to the Website or access to the Services. Cookies work by assigning a number to User that has no meaning outside of the assigning website or application. Minima uses cookies for various purposes, including without limitation tracking User’s movements within the Website, analyzing trends, gathering statistical data and improving user experience and the overall quality of the Services. Minima encodes and encrypts the cookies so that only Minima can interpret the information stored in them. Cookies can be disabled or controlled by setting a preference within User’s web browser or on User’s device. Thus, if User does not want information to be collected through the use of cookies, User can restrict or limit the use of cookies at the individual browser or device level. However, if User chooses to disable cookies some features of the Services may not function properly or Minima may not be able to customize the delivery of information to User.
+
+5.7 First-Party Cookies: Minima uses session cookies and persistent cookies when User uses the Services. These are essential to the operation of the Website and the provision of Services. The session cookie is stored in temporary memory and is not retained after the browser is closed. Session cookies do not collect information from User’s computer. They store information in the form of a session identification that does not personally identify the User. The persistent cookies are set with expiration date and are stored on User’s hard drive until they expire or User deletes them. Minima does not collect any Personal Data in the session and persistent cookies. Minima uses session and persistent cookies for technical purposes, including but not limited to verifying the origin of requests, distributing requests among multiple servers, authenticating Users and determining what functionality of the Services such Users are allowed to access.
+
+5.8 Third-Party Cookies: Minima also uses third-party cookies. These third-party service providers with whom Minima has contracted help analyze certain online activities and provide analytics services.
+
+## 6. USE OF INFORMATION
+6.1 Use of Personal Data: Minima may use the collected Personal Data for the following purposes:
+
+6.1.1 to provide, maintain, administer, support, protect and improve the Services;
+
+6.1.2 to meet the regulatory compliance requirements set forth in the applicable laws;6.1.3 to provide customer support;
+
+6.1.4 to handle and process inquiries submitted by Visitors;6.1.5 to send system alert messages to Account Users and Direct Users;
+
+6.1.6 to enforce compliance with any user terms;
+
+6.1.7 to investigate any fraud, illegal activity or wrongdoing in connection with the Services;
+
+6.1.8 to protect the rights, property and safety of Users, Minima and third parties;
+
+6.1.9 to transfer the Personal Data in case of a sale, merger, consolidation, or acquisition. In such case, any acquirer will be subject to Minima’s obligations under this Privacy Policy;
+
+6.1.10 to store the Personal Data in order to be able to provide the Services on Minima ‘s servers or servers provided by third parties that are committed to complying with Minima‘s obligations contained in this Privacy Policy and with whom Minima has contracted;
+
+6.1.11 to troubleshoot, investigate and fix service related errors. In such cases, Users’ Personal Data may be visible to and/or accessed by technicians, IT staff and/or system administrators authorized by Minima;
+
+6.1.12 to combine Personal Data with information obtained through the use of cookies, web beacons or similar technologies to improve the Services and user experience;6.1.13 to comply with legal obligations to which Minima is subject;
+
+6.1.14 to establish compliance with the Data Protection Laws during an audit or inspection conducted by an appropriate data protection authority, Developer or an external auditor mandated by Developer, provided that in all cases the Personal Data will remain subject to the provisions of this Privacy Policy;6.1.15 to send Subscribers informational content they subscribed to;
+
+6.1.16 to generate Anonymized Data (defined below) and Anonymized Aggregate Data (defined below); and
+
+6.1.17 to respond (or, in the case of Indirect Users, to assist Developer in responding) to User’s requests for exercising User’s rights under the applicable Data Protection Laws.
+
+6.2 Use of Non-Personal Data: Minima may generate anonymous data derived from or based on Personal Data collected from User so that the results are no longer personally identifiable with respect to that User (“Anonymized Data”), and combine or incorporate such Anonymized Data with or into other similar data or information collected from other Users or derived from other Users’ use of the Services (“Anonymized Aggregate Data”). Minima may use such Anonymized Data and Anonymized Aggregate Data for various business purposes, including but not limited to:
+
+6.2.1 providing, maintaining, supporting and improving the Services;
+
+6.2.2 conducting analytical research, compiling statistical reports and performance tracking;
+
+6.2.3 developing and/or improving other Minima’s services and products; and
+
+6.2.4 sharing such Anonymized Data and Anonymized Aggregate Data with Minima's affiliates, agents or other third parties with whom Minima has a business relationship.
+
+6.2.5 Anonymized Data and Anonymized Aggregate Data are not Personal Data, and consequently the provisions in this Privacy Policy are not applicable to such data.
+
+## 7. DISCLOSURES AND TRANSFERS
+
+7.1 By using the Services and submitting any Personal Data to Minima, User acknowledges and agrees that their Personal Data may be processed in and transferred to jurisdiction(s) other than User’s country of residence which may have different Data Protection Laws than those in User’s country. Personal Data may be accessed by authorized staff from Minima offices in Switzerland and UK for the purposes of troubleshooting and debugging. [The Personal Data of Minima User residing in the EU/EEA will only be stored in EU and will only be transferred outside EU as set forth in the GDPR.] Minima will take all steps reasonably necessary to ensure that Personal Data is at all times treated securely and in accordance with this Privacy Policy.
+
+7.2 Minima will only transfer and/or disclose Personal Data as specified in this Privacy Policy unless User gives Consent to the disclosure and/or transfer to any other third party.
+
+7.3 Disclosure and/or Transfer to Third-Party Providers: Minima has put in place contractual (including data protection, confidentiality and security provisions) and other organizational safeguards with third-party service providers engaged by Minima in connection with the provision, operation, hosting, security or maintenance of the Services, including cloud-based email service, data hosting and storage providers (“Third-Party Providers”).
+Such safeguards aim to ensure an adequate level of protection of Personal Data. Minima may disclose or transfer Personal Data to such Third-Party Providers solely for the identified purposes and solely in connection with the Services. Minima will restrict access to Personal Data to what is strictly necessary for the performance of such Third-Party Provider’s contractual obligations. Such Third-Party Providers may process, store and/or have access to Personal Data. Any transfer of Personal Data of EU/EEA Users to a Third-Party Provider located in a third country will be subject to articles 45 and 46 of the GDPR and will take place either
+
+(i) on the basis of an adequacy decision by the European Commission, or
+
+(ii) by entering into the standard data protection clauses adopted by the Commission, or by ensuring the respective Third-Party Provider has signed up to the EU-US Privacy Shield. At the date of this Privacy Policy Minima uses the following Third-Party Providers:
+
+7.3.1 Data Disclosure
+
+7.4 Disclosure for Legal Reasons: Minima may disclose Personal Data without User’s Consent when Minima believes in good faith that the disclosure of such information is reasonably necessary or appropriate:
+
+7.4.1 to comply with the Data Protection Laws, any subpoena, enforceable request from the competent authorities, or other legal process;
+
+7.4.2 to enforce Minima’s rights against User or in connection with a breach by User of any user terms in force and, as applicable, the End User Licence Agreement, including investigation of potential violations;
+
+7.4.3 to help detect, curb or investigate fraud or other prohibited or illegal activities that affect or hurt the interests of Minima or third parties;
+
+7.4.4 to identify, contact or bring legal action against someone who may be causing injury to, or interference with (either intentionally or unintentionally), Minima’s rights or property, other Users of the Services, or anyone else (including the rights or property of anyone else) that could be harmed by such activities; and
+
+7.4.5 to help Minima comply with a legal obligation to which Minima is subject, or accounting or security requirements, in which case Minima may disclose such information to its auditors, professional consultants, accountants and/or legal advisors. In all the foregoing cases, Minima will disclose Personal Data only to the extent required or permitted by the applicable Data Protection Laws.
+
+7.5 Transfer of Ownership: User’s Personal Data may be disclosed and/or transferred upon change of control as a result of a sale of all or a substantial portion of Minima’s assets or stock, merger, acquisition or reorganization, including any due diligence process carried out in relation to the same, provided that the Personal Data disclosed continues to be used solely for the purposes permitted by, and subject to the provisions in, this Privacy Policy by the entity acquiring access to such information. If the entire or substantial ownership of Minima or Services were to change, User’s Personal Data may be transferred to the new owner to ensure continuity of the Services. In any such transfer of ownership User’s Personal Data will remain subject to the promises of the then and current Privacy Policy. Minima will provide reasonable advance notice to User via the Website of any such change in ownership or control of User’s Personal Data or in case such Personal Data becomes subject to a different privacy policy.
+
+## 8. CONTROLLER AND PROCESSOR
+
+8.1 In providing the Services to Visitors, Direct Users and Account Users, Minima acts as Controller of Personal Data collected from such Users. In the case of Indirect Users, Minima acts as a Processor and the respective Developer acts as Controller of collected Personal Data. In performing its obligations as Processor Minima will at all times act on Controller’s behalf and according to Controller’s lawful instructions.
+
+8.2 Furthermore, Minima adheres to the following general principles with respect to Personal Data processing:
+
+8.2.1 not to collect more Personal Data than is necessary for the purpose of providing the Services;
+
+8.2.2 not to use Personal Data for any other purposes than those specified in this Privacy Policy;
+
+8.2.3 ensure that all personnel authorized by Minima to process Personal Data have committed themselves to confidentiality or are under an appropriate statutory obligation of confidentiality; and
+
+8.2.4 not to knowingly solicit, access, collect and/or process any Special Categories of Personal Data.
+
+## 9. LEGAL BASIS FOR PROCESSING (EU/EEA USERS)
+
+9.1 In the case of Users from the European Union (EU) and European Economic Area (EEA), Minima’s legal basis for processing the Personal Data collected as described in this Privacy Policy will depend on the type of Personal Data and the circumstances under which it is collected. Minima will collect and process Personal Data in its capacity as Controller based on the following legal bases:9.1.1 processing is necessary for the performance of a contract to which the User is a party, particularly for the provision of the Services under the user terms;
+
+9.1.2 processing is necessary for compliance with a legal obligation to which Minima is subject; and/or
+
+9.1.3 processing is necessary for the purposes of the legitimate interests pursued by Minima as the Controller of Personal Data or by a third party, except where such interests are overridden by the interests or fundamental rights and freedoms of User which require the protection of Personal Data.
+
+9.2 If there is another legal basis for Minima to collect and process Personal Data in its capacity as Controller, Minima will provide the required notification to User at or before the time the Personal Data is collected.
+
+9.3 If User voluntarily provides Personal Data to Minima when contacting Minima with respect to the Services, such User will be deemed to have given Consent to the collection, use and processing of Personal Data by Minima as reasonably necessary to carry out the specific purpose(s) for which User has provided the Personal Data. Minima will rely on such implied Consent as if it were given to Minima under normal circumstances.
+
+## 10. SPECIAL CATEGORIES OF PERSONAL DATA
+
+10.1 Minima does not solicit from Users, nor does it knowingly collect or process, any Special Categories of Personal Data. Users are requested at all times to refrain from voluntarily providing any Special Categories of Personal Data to Minima.
+
+10.2 ANTI-SPAM LEGISLATION
+
+10.3 Minima is committed to controlling unsolicited commercial e-mail, or “spam”. In this respect, Minima includes an “unsubscribe” or “opt-out” link in any informational emails sent to Users. Users wishing to opt-out of receiving such informational emails may do so at any time by following the instructions included in such emails. Minima will not sell, lease or rent its e-mail Subscribers lists to any third party, nor will Minima use the collected email addresses for purposes other than that for which they were initially collected. User can’t opt-out of receiving emails that Minima is required by law to provide to User in connection with the Services, such as system notification emails, notification on changes or updates to this Privacy Policy or the General Terms of Service, or other important mandatory notifications relating to User’s access to and use of the Services.
+
+10.4 THIRD-PARTY WEBSITES
+
+10.5 The Services may include links to, or otherwise direct User’s attention towards, websites operated by third parties and not by Minima. Such links are provided solely for User’s convenience and informational purposes. The inclusion of any link does not imply an association, support, endorsement, consent, examination, or approval by Minima of such third party and third-party website (including without limitation any content on such website). Minima shall not be liable for the information and content contained in any third-party website or for User’s use of or incapacity to use such website. Access to any third-party website is at User’s own risk, and User must be aware of the fact that linked websites have terms and privacy policies different from those of Minima and Minima does not control them. If User elects to use any third-party website and/or provide any Personal Data when using such website, User is solely responsible for evaluating the terms and privacy policy that apply. Minima will have no liability for any loss or damage that User may incur through providing any Personal Data on such third-party websites.
+
+## 11. USER’S RIGHTS UNDER GDPR (FOR EU/EEA USERS)
+
+11.1 Taking into account the nature of the processing, Minima will respond (or, when acting as Processor, provide reasonable assistance to Developer for the fulfilment of Developer’s obligation to respond) to requests for exercising User’s rights under GDPR as set forth below:
+
+11.1.1 the right to be informed: User has the right to receive fair processing information about their Personal Data processed by Minima, including without limitation the recipients or categories of recipients to whom the Personal Data has been or will be disclosed, in particular transfers to recipients in third countries or international organizations, and the appropriate safeguards relating to such transfers.11.1.2 the right of access: User has the right to obtain: (i) confirmation that their Personal Data is being processed; and (ii) access to such Personal Data.
+
+11.1.3 the right to rectification: User is entitled to have Personal Data rectified if it is inaccurate or incomplete. While User can amend or change the Registration Information and Financial Account Credentials, Minima can’t, however, rectify any Payment Order Data or Financial Data as this information is received from Developer or Financial Institution, respectively.
+
+11.1.4 the right to erasure (right to be forgotten): User has the right to request the deletion of their Personal Data when there is no compelling reason for its continued processing or User withdraws Consent to such processing.
+
+11.1.5 the right to restrict processing: User has the right to block processing of their Personal Data on the grounds specified in the GDPR.
+
+11.1.6 the right to data portability: User may request to receive free of charge a copy of Personal Data stored in Minima’s systems in a structured, commonly used and machine-readable format or have Minima transmit the data directly to another Controller if this is technically feasible. Minima will respond to any data portability requests as set forth in the GDPR.
+
+11.1.7 the right to object: User has the right to object to:
+(i) processing based on legitimate interests or the performance of a task in the public interest/exercise of official authority (including profiling); (ii) direct marketing (including profiling); and (iii) processing for purposes of scientific/historical research and statistics. Minima does not process User’s Personal Data for direct marketing or for purposes of scientific/historical research and statistics.
+
+11.1.8 rights in relation to automated decision-making and profiling: User has the right to object to processing of Personal Data for the purposes of automated individual decision-making (making a decision solely by automated means without any human involvement) and profiling (automated processing of Personal Data to evaluate certain things about an individual). Minima does not process User’s Personal Data for the purposes of automated individual decision-making or profiling.
+
+11.1.9 the right to lodge a complaint with a Supervisory Authority: User has the right to lodge a complaint about Minima’s data protection or privacy practices, or the exercise of any of User’s rights with respect to Personal Data as detailed in this Privacy Policy, with User’s local Supervisory Authority.
+
+11.1.10 the right to withdraw Consent: Provided that the Consent is the legal basis for processing, User may withdraw Consent to Minima’s processing of Personal Data at any time by contacting Minima. User may exercise any of the foregoing rights at any time by contacting Minima at privacy@minima.global Where Users’ requests for exercising their rights under GDPR are manifestly unfounded or excessive, in particular because of their repetitive character, or further copies of the Personal Data undergoing processing are requested, Minima may charge a reasonable fee taking into account the administrative costs of providing the information or communication or taking the action requested.
+
+## 12. DATA DELETION AND RETENTION
+12.1 Minima will retain Personal Data for no longer than strictly necessary for the purposes for which such Personal Data is collected and processed. The retention period depends on the requirements of the applicable laws or regulations Minima must comply with, the purposes of the collection and processing of Personal Data, and the legitimate interests of Minima to establish, exercise or defend its legal rights. When Minima acts as a Processor of Personal Data, Minima may apply a different retention period if so required by the Controller on whose behalf the Personal Data is being processed by Minima.
+
+12.2 Minima will delete User’s Personal Data from its production servers when:
+
+12.2.1 User exercises the right to be forgotten or, if applicable, withdraws Consent;
+
+12.2.2 Account User deletes their account on the Website, or such account is automatically deleted by Minima as described in the user terms;
+
+12.2.3 Direct User deletes their account in Minima’s systems created in connection with the provided Services;
+
+12.2.4 Developer deletes Indirect User’s Personal Data processed by Minima in connection with the Services.
+
+12.3 As a result, User’s Personal Data will be deleted and excised permanently from Minima’s production servers, subject to Minima’s right to generate Anonymized Data and Anonymized Aggregate Data prior to such deletion. Further use of the corresponding Services will be impossible. Notwithstanding anything to the contrary in this Privacy Policy, Minima will retain User’s Personal Data or portions thereof:
+
+12.3.1 in backup files on its backup servers for a period of up to one (1) month from the date of deletion from the production servers in order to ensure compliance with internal business continuity and disaster recovery procedures; and
+
+12.3.2 in log files in order to: (i) comply with the requirements of the applicable laws or regulations; (ii) exercise or defend (ongoing) legal claims; and (iii) meet audit or statutory requirements. The retention period for Personal Data retained in log files shall be a minimum of five (5) years from the date of deletion from the production servers, or such longer period as required by the applicable laws, unless subject to statutory or regulatory change.
+
+12.4 Backups and log files containing Personal Data are stored separately from the production servers. All Personal Data retained in backup files and log files will be treated in accordance with the terms of this Privacy Policy for as long as it is retained before being automatically deleted after the retention period has elapsed.
+
+12.5 Backup files are stored using strong asymmetric encryption and Minima’s authorized personnel does not access such files in the ordinary course of business operations, nor will Minima actively process any Personal Data retained in backup files anymore.
+
+## 13. PERSONAL DATA SECURITY
+
+13.1 Online Confidentiality:
+
+13.1.1 User must keep the set of credentials provided as part of the Registration Information for creating an account with Minima (“Credentials”) secure and never disclose them to any third party. User is solely responsible for maintaining the confidentiality of such Credentials. If User suspects that the Credentials have been stolen or been made known to others, User must change them immediately and contact Minima promptly at Minima. Minima shall not be responsible for any loss or damage resulting from access to User’s account through Registration Information or Credentials obtained from User or through violation of this Privacy Policy or the user terms.
+
+13.1.2 Although Minima will take reasonable steps to ensure that User’s Personal Data is treated and stored securely, unfortunately, the sending of information via the Internet is not totally secure and on occasion such information may be intercepted. Therefore, Minima can’t guarantee the security of Personal Data that User chooses voluntarily to send to Minima electronically. Minima expressly disclaims all liability for any interception or interruption of any Internet transmissions sent by User or any losses of or changes to data, including Personal Data, resulting from such interception or interruption.
+
+13.2 Personal Data Safeguards: Minima is committed to maintaining the confidentiality, integrity and security of the Personal Data of Users. Minima employs advanced security techniques to safeguard Personal Data against unauthorized access, use and/or disclosure. Minima strictly restricts access to Personal Data in accordance with specific internal procedures governing access to such information. Minima carefully selects the individuals privileged with access to Personal Data in accordance with internal security policies and practices, and each such individual is bound by confidentiality obligations. The Services ensure secure communications with TLS encryption. To maintain the security of online sessions and protect Minima’s systems from unauthorized access, Minima uses a combination of firewall barriers, encryption techniques and authentication procedures, among others. Access to Minima’s systems requires multiple levels of authentication, including biometric recognition procedures. Security personnel monitor the systems 24/7. Minima databases are both physically and logically protected from general employee access. Minima enforces physical controls on its premises. Minima is routinely verified for its use of encryption technologies and audited for its privacy practices. Minima tests its systems, the Website and Services infrastructure for any failure points that might allow hacking.
+
+13.3 Data Pseudonymization: In addition to the technical and organizational security measures employed by Minima to ensure security, confidentiality and integrity of Personal Data, Minima also uses data pseudonymization technique when processing and storing Personal Data in its systems. Pseudonymization consists of replacing the data fields which are the most identifying in a data record with pseudonyms. Personal Data which has undergone pseudonymization can no longer be attributed to a specific User without the use of additional information, and such additional information is kept by Minima separately and is subject to appropriate technical and organizational security measures to ensure that such pseudonymized Personal Data is not attributed to an identified or identifiable natural person.
+
+## 14. NOTIFICATION OF PERSONAL DATA BREACH
+
+14.1 If a security breach causes an unauthorized intrusion into Minima’s systems, software or networks that leads to the accidental or unlawful destruction, loss, alteration, unauthorized disclosure of, or access to, Personal Data transmitted, stored or otherwise processed by Minima (“Personal Data Breach”), Minima will notify the appropriate data protection authority unless the Personal Data Breach is unlikely to result in a risk to the rights and freedoms of affected Users. Minima will report the Personal Data Breach to the appropriate data protection authority without undue delay after having become aware of it and in any case within the timeframes as provided for in the applicable Data Protection Laws, by including all the pertinent information relating to such Personal Data Breach as required by the applicable Data Protection Laws. When the Personal Data Breach is likely to result in a high risk to the rights and freedoms of affected Users, or if required by the appropriate data protection authority, Minima will also communicate the Personal Data Breach to the affected Users without undue delay.
+
+14.2 When Minima acts as Processor for Developer, Minima will notify the Developer of a Personal Data Breach as described above, who in turn will fulfil its Personal Data Breach reporting obligations (towards the relevant data protection authority and Indirect Users) as set forth in the applicable Data Protection Laws.
+
+## 15. PRIVACY POLICY UPDATE
+
+15.1 Minima reserves the right to change this Privacy Policy at any time and from time to time in order to reflect changes in the Services or the applicable laws. If Minima decides to change this Privacy Policy in the future, Minima will post an appropriate notice at the top of this Privacy Policy page and/or give reasonable advance notice to Users through the Services or Website. Any non-material change (such as clarifications) to this Privacy Policy will become effective on the date the change is posted and any material changes will become effective thirty (30) days from their posting on the Website. Unless stated otherwise, this Privacy Policy applies to all Personal Data collected and processed by Minima in connection with the Services. The date this Privacy Policy was last revised appears at the top of this document. User is advised to print a copy of this Privacy Policy for reference and revisit this Privacy Policy from time to time to ensure that User is aware of any changes. User’s continued use of the Services after the changes to this Privacy Policy become effective signifies User’s acceptance of any such changes.
+
+## 16. DATA PROTECTION OFFICER
+
+16.1 Minima’s data protection officer can be reached at any time by email at privacy@minima.global in case of any questions with respect to Minima’s collection, use, disclosure or processing of Personal Data.
+
+## 17. CONTACT
+
+17.1 Any questions, comments or feedback regarding this Privacy Policy or any other privacy or security concern may be sent by email to privacy@minima.global
diff --git a/content/docs/core/use-cases.mdx b/content/docs/core/use-cases.mdx
index 99ee3fd..d3f1eb3 100644
--- a/content/docs/core/use-cases.mdx
+++ b/content/docs/core/use-cases.mdx
@@ -1,99 +1,99 @@
----
-title: Use Cases
-description: Use cases for Minima
-tag: core
----
-
-The utility of the Minima network and currency will be a key driver influencing the growth of the network.
-
-Visit the [website](https://www.minima.global/) to learn about the specific use cases we are currently working on.
-
-The benefits for each broad use case are highlighted below as well as the [utility of the Minima coin](#utility-of-the-minima-coin).
-
-## Enterprise
-
-Benefits for Enterprise:
-
-- Quickly prove the value or concept of a project before building and scaling
-- Reduction of infrastructure costs as the solution runs on the end users' devices
-- Ability to deploy a large number of nodes via an OTA (over the air) update
-- Ability to transfer tokens and data between any set of nodes
-- Specialised hardware is not required
-- Use of custom tokens or NFTs for rewards or loyalty
-- Use of smart contracts to program rules and use cases for custom tokens
-
-## DePIN
-
-Benefits for DePIN:
-
-- Quickly prove the value or concept of a project before building and scaling on Minima
-- Access to a large, decentralised, peer-to-peer network of users
-- Ability to deploy a solution that runs on users' mobile devices or on IoT devices
-- Ability to transfer tokens and data between any set of nodes
-- Specialised hardware is not required
-- Use of custom tokens or NFTs for rewards or loyalty
-- Use of smart contracts to program rules and use cases for custom tokens
-
-## Developer
-
-Benefits for developers:
-
-- Ability to run a full node locally, providing direct access to the blockchain without going via a third-party provider
-- Instantly and easily start a local private testnet
-- Creating dapps is very accessible and can be created with standard html, css and javascript knowledge
-- Instantly mint custom tokens and NFTs
-- Access to a large, decentralised, peer-to-peer network of users
-- Decentralised protocols developed for Minima will scale naturally with the user base
-- Ability to create censorship-resistant applications that provide utility only achievable on a decentralised network
-- Ability to develop Minima and non-Minima based applications via the MiniDapp system
-- Ability to create and share a suite of MiniDapps via a MiniDapp store
-
-## Utility of the Minima coin
-
-The Minima coin is required to use the network in a purposeful way; the main drivers of utility for the Minima coin are:
-
-1. A Store of Value
-2. Value transfer
-3. The Burn
-4. Tokenization
-5. MiniDapp usage
-6. Partnerships
-
-### A Store of Value
-
-The Minima coin can be used as a store of wealth over time. Unlike traditional Fiat monetary systems, the Minima coin supply cannot be inflated. In fact, due to the Burn mechanism (see [The Burn](#the-burn)), the supply is deflationary, meaning it slowly becomes more scarce over time. Coupled with Proof-of-Work backed security provided by every node in the network, and no centralized authority, the Minima coin can be considered a secure store of value.
-
-### Medium of Exchange
-
-The Minima currency will be the primary medium of exchange on the network. All users (or devices) running nodes are able to transact directly, peer-to-peer, wherever, whenever.
-
-### The Burn
-
-The Burn is a small cost (fee) which is incurred when sending transactions on the Minima network during times of high demand. This cost, denominated in Minima, is ‘burned’ i.e. removed from Minima's hard-capped supply. This makes Minima a deflationary currency as the overall circulating supply slowly decreases over time. Providing demand stays the same, a deflationary currency will appreciate in value over time.
-For more information, see [The Burn](/docs/learn#the-burn), in our Learn section.
-
-### Tokenization (including NFTs)
-
-Minima will be required to create custom tokens or NFTs on the Minima blockchain. Custom tokens and NFTs inherit the same underlying security of the Minima blockchain and can be transacted with in the same way as Minima coins. Use cases for custom tokens and NFTs are unlimited and defined by the creator.
-For more information, see [Coloured Coins](/docs/learn/coloured-coins), in our Learn section.
-
-### MiniDapps (Decentralized applications)
-
-Minima’s decentralized applications will be the main driver of utility in the Minima network, driven by a powerful scripting language for writing smart contracts and using the widely known JavaScript, HTML and CSS to create user-friendly interfaces for people to interact with the smart contracts.
-
-Potential uses for the Minima currency in the MiniDapp ecosystem are unlimited and will depend on the applications built by community developers but could include:
-
-- **Payments**: using Minima as payment for goods and services
-- **DeFi (Decentralized finance)**: Borrowing, lending, and using Minima as collateral
-- **DEXs (Decentralized Exchanges)**: Exchanging Minima/Custom Tokens/NFTs within the Minima network or cross chain
-- **DAOs**: Using Minima/Custom Tokens/NFTs within the ecosystem of Decentralized Autonomous Organizations (DAOs)
-- **Gaming:** Using Minima/Custom Tokens/NFTs for in-game items or currency
-- **Voting:** Using Minima/Custom Tokens/NFTs to represent votes
-- **Funding:** Using Minima for charity or business funding
-- **Social Media:** Using Minima/Custom Tokens/NFTs for micro-payments or social status
-
-For more information, see [MiniDapps](/docs/learn/about-minidapps), in our Learn section.
-
-### Partnerships
-
-Enterprises and DePIN projects integrating Minima into their business offerings will increase credibility and demand for the Minima network and the Minima currency.
+---
+title: Use Cases
+description: Use cases for Minima
+tag: core
+---
+
+The utility of the Minima network and currency will be a key driver influencing the growth of the network.
+
+Visit the [website](https://www.minima.global/) to learn about the specific use cases we are currently working on.
+
+The benefits for each broad use case are highlighted below as well as the [utility of the Minima coin](#utility-of-the-minima-coin).
+
+## Enterprise
+
+Benefits for Enterprise:
+
+- Quickly prove the value or concept of a project before building and scaling
+- Reduction of infrastructure costs as the solution runs on the end users' devices
+- Ability to deploy a large number of nodes via an OTA (over the air) update
+- Ability to transfer tokens and data between any set of nodes
+- Specialised hardware is not required
+- Use of custom tokens or NFTs for rewards or loyalty
+- Use of smart contracts to program rules and use cases for custom tokens
+
+## DePIN
+
+Benefits for DePIN:
+
+- Quickly prove the value or concept of a project before building and scaling on Minima
+- Access to a large, decentralised, peer-to-peer network of users
+- Ability to deploy a solution that runs on users' mobile devices or on IoT devices
+- Ability to transfer tokens and data between any set of nodes
+- Specialised hardware is not required
+- Use of custom tokens or NFTs for rewards or loyalty
+- Use of smart contracts to program rules and use cases for custom tokens
+
+## Developer
+
+Benefits for developers:
+
+- Ability to run a full node locally, providing direct access to the blockchain without going via a third-party provider
+- Instantly and easily start a local private testnet
+- Creating dapps is very accessible and can be created with standard html, css and javascript knowledge
+- Instantly mint custom tokens and NFTs
+- Access to a large, decentralised, peer-to-peer network of users
+- Decentralised protocols developed for Minima will scale naturally with the user base
+- Ability to create censorship-resistant applications that provide utility only achievable on a decentralised network
+- Ability to develop Minima and non-Minima based applications via the MiniDapp system
+- Ability to create and share a suite of MiniDapps via a MiniDapp store
+
+## Utility of the Minima coin
+
+The Minima coin is required to use the network in a purposeful way; the main drivers of utility for the Minima coin are:
+
+1. A Store of Value
+2. Value transfer
+3. The Burn
+4. Tokenization
+5. MiniDapp usage
+6. Partnerships
+
+### A Store of Value
+
+The Minima coin can be used as a store of wealth over time. Unlike traditional Fiat monetary systems, the Minima coin supply cannot be inflated. In fact, due to the Burn mechanism (see [The Burn](#the-burn)), the supply is deflationary, meaning it slowly becomes more scarce over time. Coupled with Proof-of-Work backed security provided by every node in the network, and no centralized authority, the Minima coin can be considered a secure store of value.
+
+### Medium of Exchange
+
+The Minima currency will be the primary medium of exchange on the network. All users (or devices) running nodes are able to transact directly, peer-to-peer, wherever, whenever.
+
+### The Burn
+
+The Burn is a small cost (fee) which is incurred when sending transactions on the Minima network during times of high demand. This cost, denominated in Minima, is ‘burned’ i.e. removed from Minima's hard-capped supply. This makes Minima a deflationary currency as the overall circulating supply slowly decreases over time. Providing demand stays the same, a deflationary currency will appreciate in value over time.
+For more information, see [The Burn](/docs/learn#the-burn), in our Learn section.
+
+### Tokenization (including NFTs)
+
+Minima will be required to create custom tokens or NFTs on the Minima blockchain. Custom tokens and NFTs inherit the same underlying security of the Minima blockchain and can be transacted with in the same way as Minima coins. Use cases for custom tokens and NFTs are unlimited and defined by the creator.
+For more information, see [Coloured Coins](/docs/learn/coloured-coins), in our Learn section.
+
+### MiniDapps (Decentralized applications)
+
+Minima’s decentralized applications will be the main driver of utility in the Minima network, driven by a powerful scripting language for writing smart contracts and using the widely known JavaScript, HTML and CSS to create user-friendly interfaces for people to interact with the smart contracts.
+
+Potential uses for the Minima currency in the MiniDapp ecosystem are unlimited and will depend on the applications built by community developers but could include:
+
+- **Payments**: using Minima as payment for goods and services
+- **DeFi (Decentralized finance)**: Borrowing, lending, and using Minima as collateral
+- **DEXs (Decentralized Exchanges)**: Exchanging Minima/Custom Tokens/NFTs within the Minima network or cross chain
+- **DAOs**: Using Minima/Custom Tokens/NFTs within the ecosystem of Decentralized Autonomous Organizations (DAOs)
+- **Gaming:** Using Minima/Custom Tokens/NFTs for in-game items or currency
+- **Voting:** Using Minima/Custom Tokens/NFTs to represent votes
+- **Funding:** Using Minima for charity or business funding
+- **Social Media:** Using Minima/Custom Tokens/NFTs for micro-payments or social status
+
+For more information, see [MiniDapps](/docs/learn/minidapps-about), in our Learn section.
+
+### Partnerships
+
+Enterprises and DePIN projects integrating Minima into their business offerings will increase credibility and demand for the Minima network and the Minima currency.
diff --git a/content/docs/core/website-terms.mdx b/content/docs/core/website-terms.mdx
index ded85fd..9f814e1 100644
--- a/content/docs/core/website-terms.mdx
+++ b/content/docs/core/website-terms.mdx
@@ -1,40 +1,40 @@
----
-title: Website Terms of Use
-description: The terms of use for the website
-tag: core
----
-
-These terms and conditions (“Terms and Conditions”) outline the rules and regulations for the use of Minima GmbH’s website, located at https://minima.global/ (“Website”).
-
-By accessing this Website we assume you accept these Terms and Conditions. Do not continue to use this Website if you do not agree to the Terms and Conditions stated on this Website.
-
-The following terminology applies to these Terms and Conditions: “Client”, “You” and “Your” refers to you, the person log on this website and compliant to the Terms and Conditions. “The Company”, “Ourselves”, “We”, “Our” and “Us”, refers to Minima GmbH, a company registered in Switzerland whose address is Ober Altstadt 13, 6300 Zug. “Party”, “Parties”, or “Us”, refers to both the Client and ourselves. Any use of the above terminology or other words in the singular, plural, capitalisation and/or he/she or they, are taken as interchangeable and therefore as referring to same.
-
-## Cookies
-
-“Cookie” means a small file placed on your computer or device by this Website when you visit certain parts of this Website and/or when you use certain features of this Website.
-
-This Website may place and access certain Cookies on your computer or device. By accessing this Website, you agree to the use of Cookies in agreement with the Privacy Policy. If you do not agree to our Privacy Policy or the use of Cookies, please stop using this Website immediately.
-Most interactive websites use Cookies to retrieve the user’s details for each visit. Cookies are used by our Website to enable the functionality of certain areas and to make it easier for people visiting our Website. Some of our affiliate/advertising partners may also use Cookies.
-
-## Intellectual Property
-
-Unless otherwise stated, Minima GmbH and/or its licensors own the intellectual property rights for all material on this Website. All intellectual property rights are reserved.
-
-Unless stipulated otherwise by the applicable mandatory law, you may not reproduce, copy, distribute, sell, rent, sub-licence, store, or in any other manner re-use content from this Website, unless given express written permission to do so by us.
-You may not use any content saved or downloaded from this Website for commercial purposes without first obtaining a licence from us (or our licensors, as appropriate) to do so.
-
-## License
-
-Parts of this Website offer an opportunity for users to post and exchange opinions and information in certain areas of the Website. Minima GmbH does not filter, edit, publish or review comments prior to their presence on the Website. Comments do not reflect the views and opinions of Minima GmbH, its agents and/or affiliates. Comments reflect the views and opinions of the person who post their views and opinions. To the extent permitted by applicable laws, Minima GmbH shall not be liable for the comments or for any liability, damages or expenses caused and/or suffered as a result of any use of and/or posting of and/or appearance of the comments on this Website.
-
-Minima GmbH reserves the right to monitor all comments and to remove any comments without any reason but especially those, which can be considered inappropriate, offensive or causes a breach of these Terms and Conditions.
-
-You warrant and represent that:
-
-You are entitled to post the comments on our website and have all necessary licenses and consents to do so;
-
-- The comments do not invade any intellectual property right, including without limitation copyright, patent or trademark of any third party;
-- The comments do not contain any defamatory, libellous, offensive, indecent or otherwise unlawful material which is an invasion of privacy;
-- The comments will not be used to solicit or promote business or custom or present commercial activities or unlawful activity.
-- You hereby grant Minima GmbH its agents and/or affiliates a non-exclusive license to use, reproduce, edit and authorise others to use, reproduce and edit any of your comments in any and all forms, formats or media.
+---
+title: Website Terms of Use
+description: The terms of use for the website
+tag: core
+---
+
+These terms and conditions (“Terms and Conditions”) outline the rules and regulations for the use of Minima AG’s website, located at https://minima.global/ (“Website”).
+
+By accessing this Website we assume you accept these Terms and Conditions. Do not continue to use this Website if you do not agree to the Terms and Conditions stated on this Website.
+
+The following terminology applies to these Terms and Conditions: “Client”, “You” and “Your” refers to you, the person log on this website and compliant to the Terms and Conditions. “The Company”, “Ourselves”, “We”, “Our” and “Us”, refers to Minima AG, a company registered in Switzerland whose address is Ober Altstadt 13, 6300 Zug. “Party”, “Parties”, or “Us”, refers to both the Client and ourselves. Any use of the above terminology or other words in the singular, plural, capitalisation and/or he/she or they, are taken as interchangeable and therefore as referring to same.
+
+## Cookies
+
+“Cookie” means a small file placed on your computer or device by this Website when you visit certain parts of this Website and/or when you use certain features of this Website.
+
+This Website may place and access certain Cookies on your computer or device. By accessing this Website, you agree to the use of Cookies in agreement with the Privacy Policy. If you do not agree to our Privacy Policy or the use of Cookies, please stop using this Website immediately.
+Most interactive websites use Cookies to retrieve the user’s details for each visit. Cookies are used by our Website to enable the functionality of certain areas and to make it easier for people visiting our Website. Some of our affiliate/advertising partners may also use Cookies.
+
+## Intellectual Property
+
+Unless otherwise stated, Minima AG and/or its licensors own the intellectual property rights for all material on this Website. All intellectual property rights are reserved.
+
+Unless stipulated otherwise by the applicable mandatory law, you may not reproduce, copy, distribute, sell, rent, sub-licence, store, or in any other manner re-use content from this Website, unless given express written permission to do so by us.
+You may not use any content saved or downloaded from this Website for commercial purposes without first obtaining a licence from us (or our licensors, as appropriate) to do so.
+
+## License
+
+Parts of this Website offer an opportunity for users to post and exchange opinions and information in certain areas of the Website. Minima AG does not filter, edit, publish or review comments prior to their presence on the Website. Comments do not reflect the views and opinions of Minima AG, its agents and/or affiliates. Comments reflect the views and opinions of the person who post their views and opinions. To the extent permitted by applicable laws, Minima AG shall not be liable for the comments or for any liability, damages or expenses caused and/or suffered as a result of any use of and/or posting of and/or appearance of the comments on this Website.
+
+Minima AG reserves the right to monitor all comments and to remove any comments without any reason but especially those, which can be considered inappropriate, offensive or causes a breach of these Terms and Conditions.
+
+You warrant and represent that:
+
+You are entitled to post the comments on our website and have all necessary licenses and consents to do so;
+
+- The comments do not invade any intellectual property right, including without limitation copyright, patent or trademark of any third party;
+- The comments do not contain any defamatory, libellous, offensive, indecent or otherwise unlawful material which is an invasion of privacy;
+- The comments will not be used to solicit or promote business or custom or present commercial activities or unlawful activity.
+- You hereby grant Minima AG its agents and/or affiliates a non-exclusive license to use, reproduce, edit and authorise others to use, reproduce and edit any of your comments in any and all forms, formats or media.
diff --git a/content/docs/development/basic-minidapp.mdx b/content/docs/development/basic-minidapp.mdx
index 79d984d..a8e818a 100644
--- a/content/docs/development/basic-minidapp.mdx
+++ b/content/docs/development/basic-minidapp.mdx
@@ -1,174 +1,174 @@
----
-title: Basic MiniDapp
-description: Learn how to create a basic MiniDapp
-tag: development
----
-
-In this section, we walk through how to create a very simple MiniDapp that does not interact with the Minima blockchain.
-
-You will learn how to:
-
-1. Create the MiniDapp config file
-2. Give your MiniDapp an icon
-3. Create a basic interface for your MiniDapp
-4. Package your MiniDapp to load to your MiniDapp Hub
-5. Install your MiniDapp on your node on Minima
-
-## Config file
-
-The first step is to create a folder that your MiniDapp will live in. Call it `helloworld`.
-
-In your code editor, create a new file called `dapp.conf` and save it into your helloworld folder.
-
-The dapp.conf file is the configuration file for your MiniDapp and is where we provide the MiniDapp metadata in JSON format which will be required by the MiniDapp Hub later.
-
-Following the HelloWorld example, your dapp.conf file should look something like this:
-
-```json title="dapp.conf"
-{
- "name": "Hello World",
- "icon": "favicon.ico",
- "version": "1.0",
- "description": "My Hello World MiniDapp"
-}
-```
-
-Save it. That's your config file done!
-
-## Icon
-
-To include an icon for your MiniDapp, save an image as `favicon.ico` and add it to your `helloworld` folder with your `dapp.conf` file.
-
-Your folder should now contain 2 files
-
-1. dapp.conf
-2. favicon.ico
-
-Your config file and icon used will determine what is visible when your MiniDapp is loaded into the MiniDapp Hub, as shown below.
-
-
-
-## Basic interface for your MiniDapp
-
-Next, we will create a simple webpage which will be the homepage of your MiniDapp.
-
-Create and open an `index.html` file.
-
-Copy and paste the following code, or alternatively, create your own basic html page.
-
-If you are comfortable with CSS styling you can also go ahead and create a .CSS file for your html file.
-
-```html title="index.html"
-
-
-
-
- Hello World
-
-
-
Hello World!
-
-
This is my first MiniDapp!
-
-
Welcome to complete decentralization
-
- Minima is a cooperative network that enables everyone to freely connect and prosper.
- Click here to go to the Minima website.
-
-
-
Next Steps
-
- Next, you will learn how to create a MiniDapp that interacts with the Minima Blockchain.
-
-
-
-
-```
-
-Save it.
-
-Your folder should now contain 3 files.
-
-1. dapp.conf
-2. favicon.ico
-3. index.html
-
-If you also created a CSS file, add that to your `helloworld` folder.
-
-Next, we will see how the MiniDapp looks when installed onto a Minima node.
-
-## Packaging your MiniDapp
-
-We now have a complete helloworld folder containing:
-
-1. dapp.conf
-2. favicon.ico
-3. index.html
-4. styling.css (optional)
-
-Zip up the contents of this folder (not the folder itself)
-
-
-
-Name the folder as `helloworld.mds.zip` or if you are using a zip library through your cli run `zip -r helloworld.mds.zip`.
-
-## Installing your MiniDapp
-
-The final stage is to install the MiniDapp onto your node.
-
-### Installing onto a mobile device
-
-To install the MiniDapp on your phone:
-
-1. Send the zip file to your mobile device (via email or other method)
-2. Download the MiniDapp zip file to your mobile device
-3. Open the Minima App
-4. From the Home page, click the + button
-5. Find the MiniDapp in your mobile’s file explorer (most likely the Downloads folder)
-6. Select the MiniDapp, the MiniDapp will install on your node
-7. Click on your MiniDapp to open it
-
-**Congratulations! You have created your first MiniDapp!**
-
-### Installing onto a desktop node
-
-1. Login to your MiniDapp Hub and click on the `+` in the top right
-2. Select your `helloworld.mds.zip` MiniDapp
-3. Click on **Install**, then return to the Hub
-
-Alternatively, to install from the command line:
-
-1. Run the command `mds action:install file:helloworld.mds.zip` from the Minima Command Line (including the path with the file if required.)
-
-Example
-
-```bash title="Terminal"
-mds action:install file:C:\Users\Downloads\HelloWorld.mds.zip
-
-# Output
-Minima @ 06/07/2022 12:49:44 [233.9 MB] : unzipping package into C:\Users\minima\mds\web\0xCFAB5D98C98CED060F5FDD235CDA27AF
-{
- "command":"mds",
- "params":{
- "action":"install",
- "file":"C:\\Users\\Downloads\\HelloWorld.mds.zip"
- },
- "status":true,
- "response":{
- "installed":{
- "uid":"0xCFAB5D98C98CED060F5FDD235CDA27AF",
- "conf":{
- "name":"Hello World",
- "icon":"favicon.ico",
- "version":"1.0",
- "description":"My Hello World MiniDapp",
- "browser":"internal"
- }
- }
- }
-```
-
-2. Login to your MiniDapp Hub (see [accessing the MiniDapp Hub](/docs/buildonminima/dapptutorial/accesshub))
-3. Click on your MiniDapp to open it
-
-**Congratulations! You have created your first MiniDapp!**
+---
+title: Basic MiniDapp
+description: Learn how to create a basic MiniDapp
+tag: development
+---
+
+In this section, we walk through how to create a very simple MiniDapp that does not interact with the Minima blockchain.
+
+You will learn how to:
+
+1. Create the MiniDapp config file
+2. Give your MiniDapp an icon
+3. Create a basic interface for your MiniDapp
+4. Package your MiniDapp to load to your MiniDapp Hub
+5. Install your MiniDapp on your node on Minima
+
+## Config file
+
+The first step is to create a folder that your MiniDapp will live in. Call it `helloworld`.
+
+In your code editor, create a new file called `dapp.conf` and save it into your helloworld folder.
+
+The dapp.conf file is the configuration file for your MiniDapp and is where we provide the MiniDapp metadata in JSON format which will be required by the MiniDapp Hub later.
+
+Following the HelloWorld example, your dapp.conf file should look something like this:
+
+```json title="dapp.conf"
+{
+ "name": "Hello World",
+ "icon": "favicon.ico",
+ "version": "1.0",
+ "description": "My Hello World MiniDapp"
+}
+```
+
+Save it. That's your config file done!
+
+## Icon
+
+To include an icon for your MiniDapp, save an image as `favicon.ico` and add it to your `helloworld` folder with your `dapp.conf` file.
+
+Your folder should now contain 2 files
+
+1. dapp.conf
+2. favicon.ico
+
+Your config file and icon used will determine what is visible when your MiniDapp is loaded into the MiniDapp Hub, as shown below.
+
+
+
+## Basic interface for your MiniDapp
+
+Next, we will create a simple webpage which will be the homepage of your MiniDapp.
+
+Create and open an `index.html` file.
+
+Copy and paste the following code, or alternatively, create your own basic html page.
+
+If you are comfortable with CSS styling you can also go ahead and create a .CSS file for your html file.
+
+```html title="index.html"
+
+
+
+
+ Hello World
+
+
+
Hello World!
+
+
This is my first MiniDapp!
+
+
Welcome to complete decentralization
+
+ Minima is a cooperative network that enables everyone to freely connect and prosper.
+ Click here to go to the Minima website.
+
+
+
Next Steps
+
+ Next, you will learn how to create a MiniDapp that interacts with the Minima Blockchain.
+
+
+
+
+```
+
+Save it.
+
+Your folder should now contain 3 files.
+
+1. dapp.conf
+2. favicon.ico
+3. index.html
+
+If you also created a CSS file, add that to your `helloworld` folder.
+
+Next, we will see how the MiniDapp looks when installed onto a Minima node.
+
+## Packaging your MiniDapp
+
+We now have a complete helloworld folder containing:
+
+1. dapp.conf
+2. favicon.ico
+3. index.html
+4. styling.css (optional)
+
+Zip up the contents of this folder (not the folder itself)
+
+
+
+Name the folder as `helloworld.mds.zip` or if you are using a zip library through your cli run `zip -r helloworld.mds.zip`.
+
+## Installing your MiniDapp
+
+The final stage is to install the MiniDapp onto your node.
+
+### Installing onto a mobile device
+
+To install the MiniDapp on your phone:
+
+1. Send the zip file to your mobile device (via email or other method)
+2. Download the MiniDapp zip file to your mobile device
+3. Open the Minima App
+4. From the Home page, click the + button
+5. Find the MiniDapp in your mobile’s file explorer (most likely the Downloads folder)
+6. Select the MiniDapp, the MiniDapp will install on your node
+7. Click on your MiniDapp to open it
+
+**Congratulations! You have created your first MiniDapp!**
+
+### Installing onto a desktop node
+
+1. Login to your MiniDapp Hub and click on the `+` in the top right
+2. Select your `helloworld.mds.zip` MiniDapp
+3. Click on **Install**, then return to the Hub
+
+Alternatively, to install from the command line:
+
+1. Run the command `mds action:install file:helloworld.mds.zip` from the Minima Command Line (including the path with the file if required.)
+
+Example
+
+```bash title="Terminal"
+mds action:install file:C:\Users\Downloads\HelloWorld.mds.zip
+
+# Output
+Minima @ 06/07/2022 12:49:44 [233.9 MB] : unzipping package into C:\Users\minima\mds\web\0xCFAB5D98C98CED060F5FDD235CDA27AF
+{
+ "command":"mds",
+ "params":{
+ "action":"install",
+ "file":"C:\\Users\\Downloads\\HelloWorld.mds.zip"
+ },
+ "status":true,
+ "response":{
+ "installed":{
+ "uid":"0xCFAB5D98C98CED060F5FDD235CDA27AF",
+ "conf":{
+ "name":"Hello World",
+ "icon":"favicon.ico",
+ "version":"1.0",
+ "description":"My Hello World MiniDapp",
+ "browser":"internal"
+ }
+ }
+ }
+```
+
+2. Login to your MiniDapp Hub
+3. Click on your MiniDapp to open it
+
+**Congratulations! You have created your first MiniDapp!**
diff --git a/content/docs/learn/contract-scripting.mdx b/content/docs/development/contracts-basics.mdx
similarity index 73%
rename from content/docs/learn/contract-scripting.mdx
rename to content/docs/development/contracts-basics.mdx
index 15b8971..a19a431 100644
--- a/content/docs/learn/contract-scripting.mdx
+++ b/content/docs/development/contracts-basics.mdx
@@ -1,40 +1,40 @@
----
-title: Scripting Basics
-description: Scripting Basics
-tag: learn
----
-
-inima has its own, Turing Complete, scripting language for creating Smart Contracts - **KISS VM**.
-
-Minima, like Bitcoin, uses the [UTxO model](/docs/learn/minima/coreconcepts#utxo-model) so writing smart contracts on Minima is quite different to writing them on an Account based model like Ethereum.
-
-Every UTxO (i.e. coin) for Minima, custom tokens or NFTs is associated with a Minima script - a contract - which can either return **TRUE** or **FALSE** when used in a transaction.
-
-The default is return FALSE, so all scripts must explicitly return TRUE for the transaction to be valid.
-
-The default script for a coin is
-
-```bash
-RETURN SIGNEDBY(0xFFEE67F7C..)
-```
-
-where `0xFFEE67F7C..` is the public key of the owner of the coin.
-
-This default script will only return TRUE when a transaction attempting to spend this coin has been signed by the coin's owner.
-
-Each user tracks the coins that
-- exist at addresses they possess
-- have a public key or address they possess in the transaction STATE or PREVSTATE (an existing coin's state).
-
-When using any coin as an input to a transaction, the transaction will only be valid if the coin's script and the [token script](/docs/buildonminima/contracts/tokenscripts) both return TRUE, at which point the amount in the coin can be spent in full.
-
-Contracts are inherently compatible with Layer 2.
-
-
-- Minima scripts are case sensitive.
-- A script can run for 1024 instructions. An instruction is 1 operation or function.
-- Maximum stack depth : 64
-- Maximum number of function parameters : 32
-- Maximum size of String or HEX value : 64kb
-- Maximum bit shift for HEX : 256
+---
+title: Scripting Basics
+description: Scripting Basics
+tag: development
+---
+
+Minima has its own, Turing Complete, scripting language for creating Smart Contracts - **KISS VM**.
+
+Minima, like Bitcoin, uses the [UTxO model](/docs/learn/#utxo-model) so writing smart contracts on Minima is quite different to writing them on an Account based model like Ethereum.
+
+Every UTxO (i.e. coin) for Minima, custom tokens or NFTs is associated with a Minima script - a contract - which can either return **TRUE** or **FALSE** when used in a transaction.
+
+The default is return FALSE, so all scripts must explicitly return TRUE for the transaction to be valid.
+
+The default script for a coin is
+
+```bash
+RETURN SIGNEDBY(0xFFEE67F7C..)
+```
+
+where `0xFFEE67F7C..` is the public key of the owner of the coin.
+
+This default script will only return TRUE when a transaction attempting to spend this coin has been signed by the coin's owner.
+
+Each user tracks the coins that
+- exist at addresses they possess
+- have a public key or address they possess in the transaction STATE or PREVSTATE (an existing coin's state).
+
+When using any coin as an input to a transaction, the transaction will only be valid if the coin's script and the [token script](/docs/development/contracts-tokenscripts) both return TRUE, at which point the amount in the coin can be spent in full.
+
+Contracts are inherently compatible with Layer 2.
+
+
+- Minima scripts are case sensitive.
+- A script can run for 1024 instructions. An instruction is 1 operation or function.
+- Maximum stack depth : 64
+- Maximum number of function parameters : 32
+- Maximum size of String or HEX value : 64kb
+- Maximum bit shift for HEX : 256
\ No newline at end of file
diff --git a/content/docs/learn/contract-kissvm.mdx b/content/docs/development/contracts-kissvm.mdx
similarity index 98%
rename from content/docs/learn/contract-kissvm.mdx
rename to content/docs/development/contracts-kissvm.mdx
index 2d7c5d8..e8f0b86 100644
--- a/content/docs/learn/contract-kissvm.mdx
+++ b/content/docs/development/contracts-kissvm.mdx
@@ -1,109 +1,109 @@
----
-title: KISS VM
-description: KISS VM
-tag: learn
----
-
-Here is a breakdown of the simple and complete KISSVM language.
-
-## Grammar
-
-
-| Grammar | Description |
-| :--- | :------------------------------- |
-| ADDRESS | ADDRESS ( BLOCK ) |
-| BLOCK | STATEMENT_1 STATEMENT_2 ... STATEMENT_n |
-| STATEMENT | LET VARIABLE = EXPRESSION **\|** LET ( EXPRESSION_1 EXPRESSION_2 ... EXPRESSION_n ) = EXPRESSION **\|** IF EXPRESSION THEN BLOCK [ELSEIF EXPRESSION THEN BLOCK]* [ELSE BLOCK] ENDIF **\|** WHILE EXPRESSION DO BLOCK ENDWHILE **\|** EXEC EXPRESSION **\|** MAST EXPRESSION **\|** ASSERT EXPRESSION **\|** RETURN EXPRESSION |
-| EXPRESSION | RELATION |
-| RELATION | LOGIC AND LOGIC **\|** LOGIC OR LOGIC **\|** LOGIC XOR LOGIC **\|** LOGIC NAND LOGIC **\|** LOGIC NOR LOGIC **\|** LOGIC NXOR LOGIC **\|** LOGIC |
-| LOGIC | OPERATION EQ OPERATION **\|** OPERATION NEQ OPERATION **\|** OPERATION GT OPERATION **\|** OPERATION GTE OPERATION **\|** OPERATION LT OPERATION **\|** OPERATION LTE OPERATION **\|** OPERATION |
-| OPERATION | ADDSUB & ADDSUB **\|** ADDSUB \| ADDSUB **\|** ADDSUB ^ ADDSUB **\|** ADDSUB |
-| ADDSUB | MULDIV + MULDIV **\|** MULDIV - MULDIV **\|** MULDIV % MULDIV **\|** MULDIV << MULDIV **\|** MULDIV >> MULDIV **\|** MULDIV |
-| MULDIV | PRIME * PRIME **\|** PRIME / PRIME **\|** PRIME |
-| PRIME | NOT PRIME **\|** NEG PRIME **\|** ~PRIME **\|** BASEUNIT |
-| BASEUNIT | VARIABLE **\|** VALUE **\|** -NUMBER **\|** GLOBAL **\|** FUNCTION **\|** ( EXPRESSION ) |
-| VARIABLE | [a-z]+ |
-| VALUE | NUMBER **\|** HEX **\|** STRING **\|** BOOLEAN |
-| NUMBER | ^[0-9]+(\\.[0-9]+)? |
-| HEX | 0x[0-9a-fA-F]+ |
-| STRING | [UTF8_String] |
-| BOOLEAN | TRUE **\|** FALSE |
-| FALSE | 0 |
-| TRUE | NOT FALSE |
-| GLOBAL | @BLOCK **\|** @BLOCKMILLI **\|** @CREATED **\|** @COINAGE **\|** @INPUT **\|** @AMOUNT **\|** @ADDRESS **\|** @TOKENID **\|** @COINID **\|** @SCRIPT **\|** @TOTIN **\|** @TOTOUT |
-| FUNCTION | FUNC ( EXPRESSION_1 EXPRESSION_2 .. EXPRESSION_n ) |
-| FUNC | CONCAT **\|** LEN **\|** REV **\|** SUBSET **\|** GET **\|** EXISTS **\|** OVERWRITE **\|** REPLACE **\|** SUBSTR **\|** ADDRESS **\|** SETLEN **\|** BOOL **\|** HEX **\|** NUMBER **\|** STRING **\|** UTF8 **\|** ASCII **\|** ABS **\|** CEIL **\|** FLOOR **\|** MIN **\|** MAX **\|** INC **\|** DEC **\|** SIGDIG **\|** POW **\|** SQRT **\|** BITSET **\|** BITGET **\|** BITCOUNT **\|** PROOF **\|** SHA2 **\|** SHA3 **\|** SIGNEDBY **\|** MULTISIG **\|** CHECKSIG **\|** FUNCTION **\|** SUMINPUT **\|** SUMOUTPUT **\|** GETOUTADDR **\|** GETOUTAMT **\|** GETOUTTOK **\|** GETOUTKEEPSTATE **\|** VERIFYOUT **\|** GETINADDR **\|** GETINAMT **\|** GETINTOK **\|** GETINID **\|** VERIFYIN **\|** STATE **\|** PREVSTATE **\|** SAMESTATE |
-
-## Globals
-
-| Global | Description |
-| --- | --- |
-| @BLOCK | the current block number |
-| @BLOCKMILLI | the current block time in milliseconds since Jan 1 1970 |
-| @CREATED | the block this coin was created in |
-| @COINAGE | the difference in @BLOCK and @CREATED |
-| @INPUT | Input index of a coin used in the transaction. First input coin has an index of 0. |
-| @COINID | the coinid |
-| @AMOUNT | the amount |
-| @ADDRESS | the address |
-| @TOKENID | the tokenid |
-| @SCRIPT | the script of this coin |
-| @TOTIN | the total number of input coins |
-| @TOTOUT | the total number of output coins |
-
-## Functions
-
-| Function | Description |
-| --- | --- |
-| CONCAT ( HEX_1 HEX_2 ... HEX_n ) | Concatenate the HEX values. |
-| LEN ( HEX \| SCRIPT ) | Length of the data |
-| REV ( HEX ) | Reverse the data |
-| SUBSET ( HEX NUMBER NUMBER ) | Return the HEX subset of the data - start - length |
-| OVERWRITE ( HEX NUMBER HEX NUMBER NUMBER) | Copy bytes from the first HEX and pos to the second HEX and pos, length the last NUMBER |
-| GET (NUMBER NUMBER .. NUMBER) | Return the array value set with LET ( EXPRESSION EXPRESSION .. EXPRESSION )1 |
-| EXISTS ( NUMBER NUMBER .. NUMBER ) | Does the array value exists |
-| ADDRESS ( STRING ) | Return the address of the script |
-| REPLACE ( STRING STRING STRING) | Replace in 1st string all occurrence of 2nd string with 3rd |
-| SUBSTR ( NUMBER NUMBER STRING ) | Get the substring |
-| CLEAN ( STRING ) | Return a CLEAN version of the script |
-| UTF8 ( HEX ) | Convert the HEX value to a UTF8 string |
-| ASCII ( HEX ) | Convert the HEX value to an ASCII string |
-| BOOL ( VALUE ) | Convert to TRUE or FALSE value |
-| HEX ( SCRIPT ) | Convert SCRIPT to HEX |
-| NUMBER ( HEX ) | Convert HEX to NUMBER |
-| STRING ( HEX ) | Convert a HEX value to SCRIPT |
-| ABS ( NUMBER ) | Convert SCRIPT to HEX |
-| NUMBER ( HEX ) | Return the absolute value of a number |
-| CEIL ( NUMBER ) | Return the number rounded up |
-| FLOOR ( NUMBER ) | Return the number rounded down |
-| MIN ( NUMBER NUMBER ) | Return the minimum value of the 2 numbers |
-| MAX ( NUMBER NUMBER ) | Return the maximum value of the 2 numbers |
-| INC ( NUMBER ) | Increment a number |
-| DEC ( NUMBER ) | Decrement a number |
-| POW ( NUMBER NUMBER ) | Returns the power of N of a number. N must be a whole number. |
-| SIGDIG ( NUMBER NUMBER ) | Set the significant digits of the number |
-| BITSET ( HEX NUMBER BOOLEAN ) | Set the value of the BIT at that Position to 0 or 1 |
-| BITGET ( HEX NUMBER ) | Get the BOOLEAN value of the bit at the position. |
-| BITCOUNT ( HEX ) | Count the number of bits set in a HEX value |
-| PROOF ( HEX HEX HEX ) | Check the data, mmr proof, and root match. Same as mmrproof on Minima. |
-| KECCAK ( HEX \| STRING ) | Returns the KECCAK value of the HEX value. |
-| SHA2 ( HEX \| STRING ) | Returns the SHA2 value of the HEX value. |
-| SHA3 ( HEX \| STRING ) | Returns the SHA3 value of the HEX value. |
-| SIGNEDBY ( HEX ) | Returns true if the transaction is signed by this public key |
-| MULTISIG ( NUMBER HEX1 HEX2 .. HEXn ) | Returns true if the transaction is signed by N of the public keys |
-| CHECKSIG ( HEX HEX HEX) | Check public key, data and signature |
-| GETOUTADDR ( NUMBER ) | Return the HEX address of the specified output |
-| GETOUTAMT ( NUMBER ) | Return the amount of the specified output |
-| GETOUTTOK ( NUMBER ) | Return the token id of the specified output |
-| GETOUTKEEPSTATE ( NUMBER ) | Is the output keeping the state |
-| VERIFYOUT ( NUMBER HEX NUMBER HEX BOOL ) | Verify the output has the specified address, amount, tokenid and keepstate |
-| GETINADDR ( NUMBER ) | Return the HEX address of the specified input |
-| GETINAMT ( NUMBER ) | Return the amount of the specified input |
-| GETINTOK ( NUMBER ) | Return the token id of the specified input |
-| VERIFYIN ( NUMBER HEX NUMBER HEX ) | Verify the input has the specified address, amount and tokenid |
-| STATE ( NUMBER ) | Return the state value for the given number |
-| PREVSTATE ( NUMBER ) | Return the state value stored in the coin MMR data - when the coin was created. |
-| SAMESTATE ( NUMBER NUMBER ) | Return TRUE if the previous state and current state are the same for the start and end positions |
-| SUMINPUTS ( HEX ) | Sum the input values of this token type |
-| SUMOUTPUTS ( HEX ) | Sum the output values of this token type |
+---
+title: KISS VM
+description: KISS VM
+tag: development
+---
+
+Here is a breakdown of the simple and complete KISSVM language.
+
+## Grammar
+
+
+| Grammar | Description |
+| :--- | :------------------------------- |
+| ADDRESS | ADDRESS ( BLOCK ) |
+| BLOCK | STATEMENT_1 STATEMENT_2 ... STATEMENT_n |
+| STATEMENT | LET VARIABLE = EXPRESSION **\|** LET ( EXPRESSION_1 EXPRESSION_2 ... EXPRESSION_n ) = EXPRESSION **\|** IF EXPRESSION THEN BLOCK [ELSEIF EXPRESSION THEN BLOCK]* [ELSE BLOCK] ENDIF **\|** WHILE EXPRESSION DO BLOCK ENDWHILE **\|** EXEC EXPRESSION **\|** MAST EXPRESSION **\|** ASSERT EXPRESSION **\|** RETURN EXPRESSION |
+| EXPRESSION | RELATION |
+| RELATION | LOGIC AND LOGIC **\|** LOGIC OR LOGIC **\|** LOGIC XOR LOGIC **\|** LOGIC NAND LOGIC **\|** LOGIC NOR LOGIC **\|** LOGIC NXOR LOGIC **\|** LOGIC |
+| LOGIC | OPERATION EQ OPERATION **\|** OPERATION NEQ OPERATION **\|** OPERATION GT OPERATION **\|** OPERATION GTE OPERATION **\|** OPERATION LT OPERATION **\|** OPERATION LTE OPERATION **\|** OPERATION |
+| OPERATION | ADDSUB & ADDSUB **\|** ADDSUB \| ADDSUB **\|** ADDSUB ^ ADDSUB **\|** ADDSUB |
+| ADDSUB | MULDIV + MULDIV **\|** MULDIV - MULDIV **\|** MULDIV % MULDIV **\|** MULDIV << MULDIV **\|** MULDIV >> MULDIV **\|** MULDIV |
+| MULDIV | PRIME * PRIME **\|** PRIME / PRIME **\|** PRIME |
+| PRIME | NOT PRIME **\|** NEG PRIME **\|** ~PRIME **\|** BASEUNIT |
+| BASEUNIT | VARIABLE **\|** VALUE **\|** -NUMBER **\|** GLOBAL **\|** FUNCTION **\|** ( EXPRESSION ) |
+| VARIABLE | [a-z]+ |
+| VALUE | NUMBER **\|** HEX **\|** STRING **\|** BOOLEAN |
+| NUMBER | ^[0-9]+(\\.[0-9]+)? |
+| HEX | 0x[0-9a-fA-F]+ |
+| STRING | [UTF8_String] |
+| BOOLEAN | TRUE **\|** FALSE |
+| FALSE | 0 |
+| TRUE | NOT FALSE |
+| GLOBAL | @BLOCK **\|** @BLOCKMILLI **\|** @CREATED **\|** @COINAGE **\|** @INPUT **\|** @AMOUNT **\|** @ADDRESS **\|** @TOKENID **\|** @COINID **\|** @SCRIPT **\|** @TOTIN **\|** @TOTOUT |
+| FUNCTION | FUNC ( EXPRESSION_1 EXPRESSION_2 .. EXPRESSION_n ) |
+| FUNC | CONCAT **\|** LEN **\|** REV **\|** SUBSET **\|** GET **\|** EXISTS **\|** OVERWRITE **\|** REPLACE **\|** SUBSTR **\|** ADDRESS **\|** SETLEN **\|** BOOL **\|** HEX **\|** NUMBER **\|** STRING **\|** UTF8 **\|** ASCII **\|** ABS **\|** CEIL **\|** FLOOR **\|** MIN **\|** MAX **\|** INC **\|** DEC **\|** SIGDIG **\|** POW **\|** SQRT **\|** BITSET **\|** BITGET **\|** BITCOUNT **\|** PROOF **\|** SHA2 **\|** SHA3 **\|** SIGNEDBY **\|** MULTISIG **\|** CHECKSIG **\|** FUNCTION **\|** SUMINPUT **\|** SUMOUTPUT **\|** GETOUTADDR **\|** GETOUTAMT **\|** GETOUTTOK **\|** GETOUTKEEPSTATE **\|** VERIFYOUT **\|** GETINADDR **\|** GETINAMT **\|** GETINTOK **\|** GETINID **\|** VERIFYIN **\|** STATE **\|** PREVSTATE **\|** SAMESTATE |
+
+## Globals
+
+| Global | Description |
+| --- | --- |
+| @BLOCK | the current block number |
+| @BLOCKMILLI | the current block time in milliseconds since Jan 1 1970 |
+| @CREATED | the block this coin was created in |
+| @COINAGE | the difference in @BLOCK and @CREATED |
+| @INPUT | Input index of a coin used in the transaction. First input coin has an index of 0. |
+| @COINID | the coinid |
+| @AMOUNT | the amount |
+| @ADDRESS | the address |
+| @TOKENID | the tokenid |
+| @SCRIPT | the script of this coin |
+| @TOTIN | the total number of input coins |
+| @TOTOUT | the total number of output coins |
+
+## Functions
+
+| Function | Description |
+| --- | --- |
+| CONCAT ( HEX_1 HEX_2 ... HEX_n ) | Concatenate the HEX values. |
+| LEN ( HEX \| SCRIPT ) | Length of the data |
+| REV ( HEX ) | Reverse the data |
+| SUBSET ( HEX NUMBER NUMBER ) | Return the HEX subset of the data - start - length |
+| OVERWRITE ( HEX NUMBER HEX NUMBER NUMBER) | Copy bytes from the first HEX and pos to the second HEX and pos, length the last NUMBER |
+| GET (NUMBER NUMBER .. NUMBER) | Return the array value set with LET ( EXPRESSION EXPRESSION .. EXPRESSION )1 |
+| EXISTS ( NUMBER NUMBER .. NUMBER ) | Does the array value exists |
+| ADDRESS ( STRING ) | Return the address of the script |
+| REPLACE ( STRING STRING STRING) | Replace in 1st string all occurrence of 2nd string with 3rd |
+| SUBSTR ( NUMBER NUMBER STRING ) | Get the substring |
+| CLEAN ( STRING ) | Return a CLEAN version of the script |
+| UTF8 ( HEX ) | Convert the HEX value to a UTF8 string |
+| ASCII ( HEX ) | Convert the HEX value to an ASCII string |
+| BOOL ( VALUE ) | Convert to TRUE or FALSE value |
+| HEX ( SCRIPT ) | Convert SCRIPT to HEX |
+| NUMBER ( HEX ) | Convert HEX to NUMBER |
+| STRING ( HEX ) | Convert a HEX value to SCRIPT |
+| ABS ( NUMBER ) | Convert SCRIPT to HEX |
+| NUMBER ( HEX ) | Return the absolute value of a number |
+| CEIL ( NUMBER ) | Return the number rounded up |
+| FLOOR ( NUMBER ) | Return the number rounded down |
+| MIN ( NUMBER NUMBER ) | Return the minimum value of the 2 numbers |
+| MAX ( NUMBER NUMBER ) | Return the maximum value of the 2 numbers |
+| INC ( NUMBER ) | Increment a number |
+| DEC ( NUMBER ) | Decrement a number |
+| POW ( NUMBER NUMBER ) | Returns the power of N of a number. N must be a whole number. |
+| SIGDIG ( NUMBER NUMBER ) | Set the significant digits of the number |
+| BITSET ( HEX NUMBER BOOLEAN ) | Set the value of the BIT at that Position to 0 or 1 |
+| BITGET ( HEX NUMBER ) | Get the BOOLEAN value of the bit at the position. |
+| BITCOUNT ( HEX ) | Count the number of bits set in a HEX value |
+| PROOF ( HEX HEX HEX ) | Check the data, mmr proof, and root match. Same as mmrproof on Minima. |
+| KECCAK ( HEX \| STRING ) | Returns the KECCAK value of the HEX value. |
+| SHA2 ( HEX \| STRING ) | Returns the SHA2 value of the HEX value. |
+| SHA3 ( HEX \| STRING ) | Returns the SHA3 value of the HEX value. |
+| SIGNEDBY ( HEX ) | Returns true if the transaction is signed by this public key |
+| MULTISIG ( NUMBER HEX1 HEX2 .. HEXn ) | Returns true if the transaction is signed by N of the public keys |
+| CHECKSIG ( HEX HEX HEX) | Check public key, data and signature |
+| GETOUTADDR ( NUMBER ) | Return the HEX address of the specified output |
+| GETOUTAMT ( NUMBER ) | Return the amount of the specified output |
+| GETOUTTOK ( NUMBER ) | Return the token id of the specified output |
+| GETOUTKEEPSTATE ( NUMBER ) | Is the output keeping the state |
+| VERIFYOUT ( NUMBER HEX NUMBER HEX BOOL ) | Verify the output has the specified address, amount, tokenid and keepstate |
+| GETINADDR ( NUMBER ) | Return the HEX address of the specified input |
+| GETINAMT ( NUMBER ) | Return the amount of the specified input |
+| GETINTOK ( NUMBER ) | Return the token id of the specified input |
+| VERIFYIN ( NUMBER HEX NUMBER HEX ) | Verify the input has the specified address, amount and tokenid |
+| STATE ( NUMBER ) | Return the state value for the given number |
+| PREVSTATE ( NUMBER ) | Return the state value stored in the coin MMR data - when the coin was created. |
+| SAMESTATE ( NUMBER NUMBER ) | Return TRUE if the previous state and current state are the same for the start and end positions |
+| SUMINPUTS ( HEX ) | Sum the input values of this token type |
+| SUMOUTPUTS ( HEX ) | Sum the output values of this token type |
| FUNCTION ( STRING VALUE1 VALUE2.. VALUEn ) | Generic Function. Run the script after replacing $1, $2.. $n in the script with the provided parameters and use the variable 'returnvalue' as the returned result. |
\ No newline at end of file
diff --git a/content/docs/learn/contract-tokenscript.mdx b/content/docs/development/contracts-tokenscripts.mdx
similarity index 95%
rename from content/docs/learn/contract-tokenscript.mdx
rename to content/docs/development/contracts-tokenscripts.mdx
index 4fd927c..856c847 100644
--- a/content/docs/learn/contract-tokenscript.mdx
+++ b/content/docs/development/contracts-tokenscripts.mdx
@@ -1,28 +1,28 @@
----
-title: Token/NFT scripts
-description: Token/NFT scripts
-tag: learn
----
-
-
-Each custom token or NFT has a separate script that must also return TRUE when attempting to spend a UTxO.
-
-Minima has a token address of `0x00` and a token script of `RETURN TRUE`.
-
-Custom tokens/NFTs by default have **RETURN TRUE** as their token script.
-
-This token structure is added to any transaction using that token so every user can check whether the token should be allowed to be spent.
-
-For instance this could be a script for a "make sure 1% is sent to this address for a charity" token:
-
-```
-RETURN VERIFYOUT(@INPUT CHARITY_ADDRESS @AMOUNT*0.01 @TOKENID)
-```
-
-or a counter mechanism that checks a counter has been incremented:
-
-```
-RETURN STATE(99) EQ INC(PREVSTATE(99))
-```
-
+---
+title: Token/NFT scripts
+description: Token/NFT scripts
+tag: development
+---
+
+
+Each custom token or NFT has a separate script that must also return TRUE when attempting to spend a UTxO.
+
+Minima has a token address of `0x00` and a token script of `RETURN TRUE`.
+
+Custom tokens/NFTs by default have **RETURN TRUE** as their token script.
+
+This token structure is added to any transaction using that token so every user can check whether the token should be allowed to be spent.
+
+For instance this could be a script for a "make sure 1% is sent to this address for a charity" token:
+
+```
+RETURN VERIFYOUT(@INPUT CHARITY_ADDRESS @AMOUNT*0.01 @TOKENID)
+```
+
+or a counter mechanism that checks a counter has been incremented:
+
+```
+RETURN STATE(99) EQ INC(PREVSTATE(99))
+```
+
**Both the Token script and coin address script must return TRUE for the transaction to be valid.**
\ No newline at end of file
diff --git a/content/docs/development/index.mdx b/content/docs/development/index.mdx
index e2c9572..2243f75 100644
--- a/content/docs/development/index.mdx
+++ b/content/docs/development/index.mdx
@@ -1,39 +1,45 @@
----
-title: Introduction
-description: Learn how to develop on the Minima blockchain
-tag: development
-icon: Code
----
-
-For developers, Minima provides a unique environment for producing exciting decentralized applications, pushing the boundaries of modern day technology.
-
-In this section you will learn about how MiniDapps and Smart Contracts work on Minima before diving into the tutorials.
-
-Minima is unique in its offering in that it provides:
-
-- borderless, peer-to-peer transfer of value (Minima blockchain)
-- borderless, peer-to-peer communication (Maxima)
-- a simple platform for running web apps locally from a node (MiniDapp System)
-- a simple but comprehensive, turing-complete scripting language for Smart contracts (KISS VM)
-- native functionality for tokenisation and NFTs
-- a layer 2 solution for scaling applications
-
-Minima does not provide:
-
-- any central server storing a database of information
-
-There is no “right” way to create decentralized applications on Minima. You may choose your own path and technologies that you are most comfortable using.
-
-It is likely more desirable and of interest to build dApps to be as decentralised as possible which is what Minima facilitates by having complete nodes on mobile devices. **Pure sovereignty over your data.**
-
-As developers, we must be extra creative while developing MiniDapps, considering efficient methods to distribute and store data, lower power usage, and grant the smoothest user experience.
-
-## Pre-requisites
-
-There are no special hardware requirements for building a MiniDapp.
-
-Before you start to create MiniDapps, you will need a code editor to write your code, for example [VS code](https://code.visualstudio.com/download), but this is your own preference.
-
-If you haven't already, we recommend you gain a thorough understanding of the Minima Protocol by reading the [Learn](/docs/learn/ataglance) section.
-
-**Let's begin.**
+---
+title: Introduction
+description: Learn how to build on the Minima blockchain
+tag: development
+icon: Code
+---
+
+For developers, Minima provides a unique environment for producing exciting decentralized applications, pushing the boundaries of modern day technology.
+
+This section includes tutorials on constructing transactions, MiniDapps and smart contracts.
+
+Minima is unique in its offering in that it provides:
+
+- borderless, peer-to-peer transfer of value (Minima blockchain)
+- borderless, peer-to-peer communication (Maxima)
+- a simple platform for running web apps locally from a node (MiniDapp System)
+- a simple but comprehensive, turing-complete scripting language for Smart contracts (KISS VM)
+- native functionality for tokenisation and NFTs
+- a layer 2 solution for scaling applications
+
+Minima does not provide:
+
+- any central server storing a database of information
+
+## How to build on Minima
+
+There is no “right” way to create decentralized applications on Minima. You may choose your own path and technologies that you are most comfortable using.
+
+It is likely more desirable and of interest to build dApps to be as decentralised as possible which is what Minima facilitates by having complete nodes on mobile devices. **Pure sovereignty over your data.**
+
+As developers, we must be extra creative while developing MiniDapps, considering efficient methods to distribute and store data, lower power usage, and grant the smoothest user experience.
+
+## Required Knowledge
+
+If you haven't already, we recommend you gain a thorough understanding of the Minima Protocol by reading the [Knowledge base](/docs/learn).
+
+
+## Prerequisities
+
+There are no special hardware requirements for building a MiniDapp.
+
+Before you start to create MiniDapps, you will need a code editor to write your code, for example [VS code](https://code.visualstudio.com/download), but this is your own preference.
+
+
+**Let's begin.**
diff --git a/content/docs/development/interactive-minidapp.mdx b/content/docs/development/interactive-minidapp.mdx
index 8a9ffd6..aa182bb 100644
--- a/content/docs/development/interactive-minidapp.mdx
+++ b/content/docs/development/interactive-minidapp.mdx
@@ -1,165 +1,153 @@
----
-title: Interactive MiniDapp
-description: Learn how to create an interactive MiniDapp
-tag: development
----
-
-In this tutorial, we will build a MiniDapp that interacts with Minima blockchain.
-
-
- This tutorial uses JavaScript to create a web application. If you are not
- using JavaScript, you can still communicate with Minima using http to make
- secure RPC Get Requests.
- You can see which Minima commands are available by typing `help` on your
- node’s CLI.
-
-
-Create a new folder for a new MiniDapp - `helloworld2`.
-
-Using your basic `helloworld` MiniDapp as a template, add the following files to your new folder, changing the name, version and description in the config file as you wish.
-
-1. dapp.conf
-2. favicon.ico
-3. index.html
-4. styling.css (optional)
-
-Next, we will go into how to use the MiniDapp System (MDS) and JavaScript to create a MiniDapp that interacts with the Minima blockchain.
-
-To learn about MDS.js, see [MDS JS Library](/docs/buildonminima/dapps/mdsjs).
-
-## Using mds.js
-
-To simplify development, a script is provided which gives you access to an MDS object that allows you to access useful properties which we will look at next.
-
-Download mds.js from GitHub [here](https://raw.githubusercontent.com/minima-global/Minima/master/mds/mds.js).
-
-Add the mds.js file to your **helloworld2** folder.
-
-Add the mds.js file as a script into the head of your **index.html** file to get access to the MDS object.
-
-It should look something like the below:
-
-```html title="index.html"
-
-
-
-
- Hello World 2
-
-```
-
-The example **index.html** file below provides a simple example of returning the latest block number from the node and querying the node's status, using the Minima `status` command.
-
-Copy and paste the code into your **index.html** file.
-
-```html title="index.html"
-
-
-
-
- Hello World 2
-
-```
-
-The example **index.html** file below provides a simple example of returning the latest block number from the node and querying the node's status, using the Minima `status` command.
-
-Copy and paste the code into your **index.html** file.
-
-```html title="index.html"
-
-
-
-
-
- Hello World 2
-
-
-
-
-
Hello World!
-
Current Minima Block Height:
-
Current Node Status:
-
-
-
-
-
-
-```
-
-## Packaging your MiniDapp
-
-We now have a complete helloworld2 folder containing:
-
-1. dapp.conf
-2. favicon.ico
-3. index.html
-4. styling.css (optional)
-5. mds.js
-
-Zip up the contents of this folder (not the folder itself).
-
-Rename the folder to **helloworld2.mds.zip** or if you are using a zip library through your CLI run
-
-```bash title="Terminal"
-zip -r helloworld2.mds.zip
-```
-
-## Installing your MiniDapp
-
-Please refer to the [Installing your MiniDapp](/docs/buildonminima/dapptutorial/basicminidapp#installing-your-minidapp) section.
-
-## MiniDapp Downloads
-
-The **HelloWorld2** MiniDapp can also be downloaded from GitHub [here](https://github.com/minima-global/innovation-challenge/tree/main/Resources)
-
-Minima's official MiniDapps can be downloaded from the [MiniDapps website](https://minidapps.minima.global/).
-
-## Next Steps
-
-The most powerful MiniDapps will use Smart Contracts, written in Minima's scripting language.
-Please follow the [Smart Contract Tutorial](/docs/buildonminima/txntutorial/start) to learn more about writing Scripts on Minima.
+---
+title: Interactive MiniDapp
+description: Learn how to create an interactive MiniDapp
+tag: development
+---
+
+In this tutorial, we will build a MiniDapp that interacts with Minima blockchain.
+
+
+ This tutorial uses JavaScript to create a web application. If you are not
+ using JavaScript, you can still communicate with Minima using http to make
+ secure RPC Get Requests.
+ You can see which Minima commands are available by typing `help` on your
+ node’s CLI.
+
+
+Create a new folder for a new MiniDapp - `helloworld2`.
+
+Using your basic `helloworld` MiniDapp as a template, add the following files to your new folder, changing the name, version and description in the config file as you wish.
+
+1. dapp.conf
+2. favicon.ico
+3. index.html
+4. styling.css (optional)
+
+Next, we will go into how to use the MiniDapp System (MDS) and JavaScript to create a MiniDapp that interacts with the Minima blockchain.
+
+To learn about MDS.js, see [MDS JS Library](/docs/development/minidapp-mdsjs).
+
+## Using mds.js
+
+To simplify development, a script is provided which gives you access to an MDS object that allows you to access useful properties which we will look at next.
+
+Download mds.js from GitHub [here](https://raw.githubusercontent.com/minima-global/Minima/master/mds/mds.js).
+
+Add the mds.js file to your **helloworld2** folder.
+
+Add the mds.js file as a script into the head of your **index.html** file to get access to the MDS object.
+
+It should look something like the below:
+
+```html title="index.html"
+
+
+
+
+ Hello World 2
+
+```
+
+
+The example **index.html** file below provides a simple example of returning the latest block number from the node and querying the node's status, using the Minima `status` command.
+
+Copy and paste the code into your **index.html** file.
+
+```html title="index.html"
+
+
+
+
+
+ Hello World 2
+
+
+
+
+
Hello World!
+
Current Minima Block Height:
+
Current Node Status:
+
+
+
+
+
+
+```
+
+## Packaging your MiniDapp
+
+We now have a complete helloworld2 folder containing:
+
+1. dapp.conf
+2. favicon.ico
+3. index.html
+4. styling.css (optional)
+5. mds.js
+
+Zip up the contents of this folder (not the folder itself).
+
+Rename the folder to **helloworld2.mds.zip** or if you are using a zip library through your CLI run
+
+```bash title="Terminal"
+zip -r helloworld2.mds.zip
+```
+
+## Installing your MiniDapp
+
+Please refer to the [Installing your MiniDapp](/docs//development/basic-minidapp#installing-your-minidapp) section.
+
+## MiniDapp Downloads
+
+The **HelloWorld2** MiniDapp can also be downloaded from GitHub [here](https://github.com/minima-global/innovation-challenge/tree/main/Resources)
+
+Minima's official MiniDapps can be downloaded from the [MiniDapps website](https://minidapps.minima.global/).
+
+## Next Steps
+
+The most powerful MiniDapps will use Smart Contracts, written in Minima's scripting language.
+Please follow the [Smart Contract Tutorial](/docs/development/contracts-basics) to learn more about writing Scripts on Minima.
diff --git a/content/docs/development/layer1/meta.json b/content/docs/development/layer1/meta.json
index d20c53f..c35c236 100644
--- a/content/docs/development/layer1/meta.json
+++ b/content/docs/development/layer1/meta.json
@@ -1,21 +1,20 @@
-{
- "title": "Layer 1 - On Chain ",
- "root": false,
- "pages": [
- "basic-contract",
- "simple-txn",
- "time-lock-contract",
- "multisig",
- "complex-multisig",
- "mofnmultisig",
- "thevault",
- "slowcash",
- "hashed-timelock-contract",
- "exchange-contract",
- "flashcash",
- "multisigmulticoin",
- "mast-contract",
- "thevault",
- "coinflip"
- ]
-}
+{
+ "title": "Layer 1 - On Chain ",
+ "root": false,
+ "pages": [
+ "basic-contract",
+ "time-lock-contract",
+ "multisig",
+ "complex-multisig",
+ "mofnmultisig",
+ "thevault",
+ "slowcash",
+ "hashed-timelock-contract",
+ "exchange-contract",
+ "flashcash",
+ "multisigmulticoin",
+ "mast-contract",
+ "thevault",
+ "coinflip"
+ ]
+}
diff --git a/content/docs/development/layer1/mutisigmulticoin.mdx b/content/docs/development/layer1/mutisigmulticoin.mdx
index a0571a9..df82276 100644
--- a/content/docs/development/layer1/mutisigmulticoin.mdx
+++ b/content/docs/development/layer1/mutisigmulticoin.mdx
@@ -1,135 +1,135 @@
----
-title: Multisig Multicoin
-description: Learn how to create a multisig multicoin contract on Minima
-tag: development
----
-
-Lets now try a more complex but more powerful exchange contract.
-
-2 users are negotiating the price of a certain amount of tokens or an NFT.
-
-They do this over a chat app ( MaxSolo/MaxChat ) and send offers backwards and forwards to each other.. All off chain. When they finally agree on a price.. what they would like is to construct a transaction that takes the Tokens and Minima as inputs ( one party does one of each ) and then sends those 'coins' to the correct recipient.
-
-All of this can be checked and validated by each user before either signs the transaction so that the swap itself is atomic, trustless and secure. Either they both get what they want or it doesn't happen.
-
-These types of offers could be collected together in a pool, or shared with other users, to allow for a completely decentralised exchange dynamic.
-
-Let's go through the steps to construct this transaction.
-
-I have 2 instances of Minima running. I have created an NFT token on one of them.
-
-```bash title="Terminal Node 1"
-tokencreate name:mynft amount:1 decimals:0
-```
-
-Now the other user wishes to buy this off me for 10 Minima.
-
-To remove the need to worry about change the other user creates a 10 Minima coin by using `getaddress` and then sending 10 Minima to his own address. (Normally you wouldn't do this and just send the change back to yourself when constructing the transaction)
-
-```bash title="Terminal Node 2"
-send amount:10 address:0x0AC281E79A096F046A1FAEF17D268BCF6D5DA604F533F3C64FE84F079C775FCE
-```
-
-So we now have 2 coins, 1 on each Instance of Minima, and we want to create a transaction that spends them both and sends them to the other party..
-
-The user who owns the NFT starts by creating a transaction:
-
-```bash title="Terminal Node 1"
-txncreate id:swap
-```
-
-He then gets one of his addresses and adds an output paying him 10 Minima.
-
-```bash title="Terminal Node 1"
-txnoutput id:swap address:Mx1W5E6AESNJG687D8GZC2JF9DZVVA3WE3TUW9PGWRRRCM32YV1BKMPRR2VY amount:10 tokenid:0x00
-```
-
-
- Note that I use the Mx.. style address!.. This is a special address format
- (converted before used - you can't use them in Scripts) that takes the
- original 0x.. HEX address, hashes it, adds the first 4 bytes of the hash as a
- checksum to the end and then converts the whole thing to Base32. This way you
- have basic error checking so you can't input an invalid address and the size
- remains less than before.
-
-
-He then finds his NFT ( `coins` is the same as `coins relevant:true`)
-
-```bash title="Terminal Node 1"
-coins
-```
-
-And adds the coin as an input.. Note the use of `scriptmmr`!
-
-
- This next part may require you to export & import the coin proof. Read the
- [**Pruning**](/docs/buildonminima/txntutorial/pruning) section to learn more.
-
-
-```bash title="Terminal Node 1"
-txninput id:swap coinid:0x5869DDC397979D9529AD92658C0FACC183D94F3E23F7E8028E02B183DE2FAB8B scriptmmr:true
-```
-
-This adds the coin and the script and MMR proof. But it is not yet signed.. Since the transaction is not yet complete.
-
-Export the transaction and let the other user import it. We have not signed it so the transaction is still small.. We can just copy paste the data without going via a file..
-
-```bash title="Terminal Node 1"
-txnexport id:swap
-```
-
-Now the other user imports it.. Again just using the data.. This works well over RPC but the command line has a limit - which is why you would use files for larger signed transactions.
-
-```bash title="Terminal Node 2"
-txnimport data:0x0000000473776170000101000000205869DDC397979D9529AD92658C0FACC183D94F3 E23F7E8028E02B183DE2FAB8B000000204BECB914994CE42E94209D0DD4EECAA19262DE6 B502EF9FC6347C416BC19EC4F2C01010000002002C30D6CD58E0230481C0A5075E40A837E DEA7331F7423BA4AE80731562318840100010000000001080000020BCF0001000100000020586 9DDC397979D9529AD92658C0FACC183D94F3E23F7E8028E02B183DE2FAB8B0000000B5245 5455524E205452554500012C2C0101000000107B226E616D65223A226D796E6674227D00020B CF000101000000208DA0C0DEC62C8DAA07703706A214E2418C86070EF166F8EBDBB202D4D DB71A8900000020322B8CA772F3819076A21860A6F4B71FFA87270FBE9273096F7B65862AFC 2BA500010A00000001000100010000000001000000010000010000000100000000010000010000 0101000000205869DDC397979D9529AD92658C0FACC183D94F3E23F7E8028E02B183DE2FAB 8B000000204BECB914994CE42E94209D0DD4EECAA19262DE6B502EF9FC6347C416BC19EC 4F2C01010000002002C30D6CD58E0230481C0A5075E40A837EDEA7331F7423BA4AE8073156 2318840100010000000001080000020BCF00010001000000205869DDC397979D9529AD92658C 0FACC183D94F3E23F7E8028E02B183DE2FAB8B0000000B52455455524E205452554500012C2 C0101000000107B226E616D65223A226D796E6674227D00020BCF0100020BF40001010000000 0208C518BEDACB2720EB9D72C0CB7B1C4E856CA1A3977F162374B0D48C1B1B99B602C141 18427B3B4A05BC8A8A4DE8459867FE8B78917FF0001010000005352455455524E205349474E4 5444259283078463836333245313141344632423445374339454544463838314338444434394538 344544383146323034303539343537324345443746393837333539314441412900000100
-```
-
-Gets an address for himself.. And adds an output sending the NFT to himself.
-
-```bash title="Terminal Node 2"
-txnoutput id:swap address:Mx3H6YQPJT9UW2UYAWFZSD2635WWPREEUABBFWY2UYH4Y1BFQZJ91W8JK3SJ amount:1 tokenid:0x02C30D6CD58E0230481C0A5075E40A837EDEA7331F7423BA4AE8073156231884
-```
-
-And finally adds the 10 Minima input.. Which he finds with coins again..
-
-```bash title="Terminal Node 2"
-txninput id:swap coinid:0x84352ECF59CAC79103C07254B5158AF8560DE68F609A346154FA812F0051A scriptmmr:true
-```
-
-OK - almost there.. We need to sign it now..
-
-```bash title="Terminal Node 1"
-txnsign id:swap publickey:auto
-```
-
-NOW - export that.. via a file.. The signature makes it too large for command line copy paste..
-
-```bash title="Terminal Node 1"
-txnexport id:swap file:swap.txn
-```
-
-Back on the other instance of Minima.. Import the Txn..
-
-```bash title="Terminal Node 2"
-txnimport file:swap.txn
-```
-
-NOW - CHECK the transaction is as you would want it.. And sign it..
-
-```bash title="Terminal Node 2"
-txnsign id:swap publickey:auto
-```
-
-And.. finally - post it..
-
-```bash title="Terminal Node 2"
-txnpost id:swap
-```
-
-.. And like that - It's done.
-
-You just performed a trustless atomic secure token swap! Well done..
-
-It may seem slow and clunky to type this all in by hand but this entire exchange of contracts would take less than a second when automated.
-
-This procedure allows for truly secure peer 2 peer exchanges to take place and can be used as a base unit for many other interesting products, such as a DEX, trading pit, liquidity pools etc etc.. With all the negotiation / order book management done off chain.
+---
+title: Multisig Multicoin
+description: Learn how to create a multisig multicoin contract on Minima
+tag: development
+---
+
+Lets now try a more complex but more powerful exchange contract.
+
+2 users are negotiating the price of a certain amount of tokens or an NFT.
+
+They do this over a chat app ( MaxSolo/MaxChat ) and send offers backwards and forwards to each other.. All off chain. When they finally agree on a price.. what they would like is to construct a transaction that takes the Tokens and Minima as inputs ( one party does one of each ) and then sends those 'coins' to the correct recipient.
+
+All of this can be checked and validated by each user before either signs the transaction so that the swap itself is atomic, trustless and secure. Either they both get what they want or it doesn't happen.
+
+These types of offers could be collected together in a pool, or shared with other users, to allow for a completely decentralised exchange dynamic.
+
+Let's go through the steps to construct this transaction.
+
+I have 2 instances of Minima running. I have created an NFT token on one of them.
+
+```bash title="Terminal Node 1"
+tokencreate name:mynft amount:1 decimals:0
+```
+
+Now the other user wishes to buy this off me for 10 Minima.
+
+To remove the need to worry about change the other user creates a 10 Minima coin by using `getaddress` and then sending 10 Minima to his own address. (Normally you wouldn't do this and just send the change back to yourself when constructing the transaction)
+
+```bash title="Terminal Node 2"
+send amount:10 address:0x0AC281E79A096F046A1FAEF17D268BCF6D5DA604F533F3C64FE84F079C775FCE
+```
+
+So we now have 2 coins, 1 on each Instance of Minima, and we want to create a transaction that spends them both and sends them to the other party..
+
+The user who owns the NFT starts by creating a transaction:
+
+```bash title="Terminal Node 1"
+txncreate id:swap
+```
+
+He then gets one of his addresses and adds an output paying him 10 Minima.
+
+```bash title="Terminal Node 1"
+txnoutput id:swap address:Mx1W5E6AESNJG687D8GZC2JF9DZVVA3WE3TUW9PGWRRRCM32YV1BKMPRR2VY amount:10 tokenid:0x00
+```
+
+
+ Note that I use the Mx.. style address!.. This is a special address format
+ (converted before used - you can't use them in Scripts) that takes the
+ original 0x.. HEX address, hashes it, adds the first 4 bytes of the hash as a
+ checksum to the end and then converts the whole thing to Base32. This way you
+ have basic error checking so you can't input an invalid address and the size
+ remains less than before.
+
+
+He then finds his NFT ( `coins` is the same as `coins relevant:true`)
+
+```bash title="Terminal Node 1"
+coins
+```
+
+And adds the coin as an input.. Note the use of `scriptmmr`!
+
+
+ This next part may require you to export & import the coin proof. Read the
+ [**Pruning**](/docs/development/pruning) section to learn more.
+
+
+```bash title="Terminal Node 1"
+txninput id:swap coinid:0x5869DDC397979D9529AD92658C0FACC183D94F3E23F7E8028E02B183DE2FAB8B scriptmmr:true
+```
+
+This adds the coin and the script and MMR proof. But it is not yet signed.. Since the transaction is not yet complete.
+
+Export the transaction and let the other user import it. We have not signed it so the transaction is still small.. We can just copy paste the data without going via a file..
+
+```bash title="Terminal Node 1"
+txnexport id:swap
+```
+
+Now the other user imports it.. Again just using the data.. This works well over RPC but the command line has a limit - which is why you would use files for larger signed transactions.
+
+```bash title="Terminal Node 2"
+txnimport data:0x0000000473776170000101000000205869DDC397979D9529AD92658C0FACC183D94F3 E23F7E8028E02B183DE2FAB8B000000204BECB914994CE42E94209D0DD4EECAA19262DE6 B502EF9FC6347C416BC19EC4F2C01010000002002C30D6CD58E0230481C0A5075E40A837E DEA7331F7423BA4AE80731562318840100010000000001080000020BCF0001000100000020586 9DDC397979D9529AD92658C0FACC183D94F3E23F7E8028E02B183DE2FAB8B0000000B5245 5455524E205452554500012C2C0101000000107B226E616D65223A226D796E6674227D00020B CF000101000000208DA0C0DEC62C8DAA07703706A214E2418C86070EF166F8EBDBB202D4D DB71A8900000020322B8CA772F3819076A21860A6F4B71FFA87270FBE9273096F7B65862AFC 2BA500010A00000001000100010000000001000000010000010000000100000000010000010000 0101000000205869DDC397979D9529AD92658C0FACC183D94F3E23F7E8028E02B183DE2FAB 8B000000204BECB914994CE42E94209D0DD4EECAA19262DE6B502EF9FC6347C416BC19EC 4F2C01010000002002C30D6CD58E0230481C0A5075E40A837EDEA7331F7423BA4AE8073156 2318840100010000000001080000020BCF00010001000000205869DDC397979D9529AD92658C 0FACC183D94F3E23F7E8028E02B183DE2FAB8B0000000B52455455524E205452554500012C2 C0101000000107B226E616D65223A226D796E6674227D00020BCF0100020BF40001010000000 0208C518BEDACB2720EB9D72C0CB7B1C4E856CA1A3977F162374B0D48C1B1B99B602C141 18427B3B4A05BC8A8A4DE8459867FE8B78917FF0001010000005352455455524E205349474E4 5444259283078463836333245313141344632423445374339454544463838314338444434394538 344544383146323034303539343537324345443746393837333539314441412900000100
+```
+
+Gets an address for himself.. And adds an output sending the NFT to himself.
+
+```bash title="Terminal Node 2"
+txnoutput id:swap address:Mx3H6YQPJT9UW2UYAWFZSD2635WWPREEUABBFWY2UYH4Y1BFQZJ91W8JK3SJ amount:1 tokenid:0x02C30D6CD58E0230481C0A5075E40A837EDEA7331F7423BA4AE8073156231884
+```
+
+And finally adds the 10 Minima input.. Which he finds with coins again..
+
+```bash title="Terminal Node 2"
+txninput id:swap coinid:0x84352ECF59CAC79103C07254B5158AF8560DE68F609A346154FA812F0051A scriptmmr:true
+```
+
+OK - almost there.. We need to sign it now..
+
+```bash title="Terminal Node 1"
+txnsign id:swap publickey:auto
+```
+
+NOW - export that.. via a file.. The signature makes it too large for command line copy paste..
+
+```bash title="Terminal Node 1"
+txnexport id:swap file:swap.txn
+```
+
+Back on the other instance of Minima.. Import the Txn..
+
+```bash title="Terminal Node 2"
+txnimport file:swap.txn
+```
+
+NOW - CHECK the transaction is as you would want it.. And sign it..
+
+```bash title="Terminal Node 2"
+txnsign id:swap publickey:auto
+```
+
+And.. finally - post it..
+
+```bash title="Terminal Node 2"
+txnpost id:swap
+```
+
+.. And like that - It's done.
+
+You just performed a trustless atomic secure token swap! Well done..
+
+It may seem slow and clunky to type this all in by hand but this entire exchange of contracts would take less than a second when automated.
+
+This procedure allows for truly secure peer 2 peer exchanges to take place and can be used as a base unit for many other interesting products, such as a DEX, trading pit, liquidity pools etc etc.. With all the negotiation / order book management done off chain.
diff --git a/content/docs/development/meta.json b/content/docs/development/meta.json
index 5945a95..5162072 100644
--- a/content/docs/development/meta.json
+++ b/content/docs/development/meta.json
@@ -1,25 +1,40 @@
-{
- "title": "Development",
- "root": true,
- "pages": [
- "---Get Started---",
- "index",
- "start-testnet",
- "testnet-multiple",
- "terminal-commands",
- "---MiniDapp Tutorials---",
- "start",
- "basic-minidapp",
- "interactive-minidapp",
- "react-minidapp",
- "minidapp-stores",
- "---Smart Contract Tutorials---",
- "pruning",
- "tokens",
- "layer1",
- "layer2",
- "---Smart Contract Examples---",
- "future-cash",
- "vestr"
- ]
-}
+{
+ "title": "Development",
+ "root": true,
+ "pages": [
+ "---Get Started---",
+ "index",
+ "testnet-single",
+ "testnet-multiple",
+ "terminal-commands",
+ "---Transactions---",
+ "txnbasics",
+ "---Transaction Tutorials---",
+ "simple-txn",
+ "---MiniDapps---",
+ "minidapp-structure",
+ "minidapp-configfile",
+ "minidapp-mdsjs",
+ "minidapp-events",
+ "mini-browser",
+ "minidapp-service-js",
+ "---MiniDapp Tutorials---",
+ "start",
+ "basic-minidapp",
+ "interactive-minidapp",
+ "react-minidapp",
+ "minidapp-stores",
+ "---Smart Contracts---",
+ "contracts-basics",
+ "contracts-tokenscripts",
+ "contracts-kissvm",
+ "---Smart Contract Tutorials---",
+ "pruning",
+ "tokens",
+ "layer1",
+ "layer2",
+ "---Smart Contract Examples---",
+ "future-cash",
+ "vestr"
+ ]
+}
diff --git a/content/docs/learn/mini-browser.mdx b/content/docs/development/mini-browser.mdx
similarity index 96%
rename from content/docs/learn/mini-browser.mdx
rename to content/docs/development/mini-browser.mdx
index 9e00ec7..4f0b984 100644
--- a/content/docs/learn/mini-browser.mdx
+++ b/content/docs/development/mini-browser.mdx
@@ -1,99 +1,99 @@
----
-title: MiniBrowser
-description: The Mini Browser is a web browser that is built into the Minima wallet.
-tag: learn
----
-
-The Android MiniBrowser is the web browser that runs internally on the Minima Android app.
-
-It is a custom built browser that allows users to use MiniDapps without having to leave the app to open an external browser window such as Chrome.
-
-Using the MiniBrowser prevents users from needing to bypass the self-signed certificate warning however it does not contain the full breadth of functionality that comes with an external browser.
-
-The MiniBrowser javascript interface contains the following functions that can be called from your MiniDapp:
-
-
-## Show title bar
-
-```javascript
-showTitleBar()
-```
-
-Show the title bar to allow the user to refresh the page, view the console logs or open the MiniDapp in an external browser.
-
-This is normally hooked up to the MiniDapp's top bar so that tapping at the top of the screen brings up the title bar.
-
-## Blob download
-
-```javascript
-blobDownload(String zMdsfile, String zHexData)
-```
-
-Due to limitations of the Minima Browser, you cannot download blob files via an anchor tag.
-
-To get around this issue, you can convert your file contents into hex data by using `MDS.util.base64ToHex` and then `Android.blobDownload('fileName', hexData);`
-
-## Share text
-
-```javascript
-shareText(String zText)
-```
-
-Displays Androids native share menu and allows you to share any text that is passed in as an argument.
-
-## Share file
-
-```javascript
-shareFile(String zFilePath, String zMimeType)
-```
-
-This will display Androids native share menu with the attached file (filepath must be specified). This is useful for attaching a file to an email for sharing.
-
-Example:
-
-```javascript
-if ((window as any).navigator.userAgent.includes('Minima Browser')) {
-return Android.shareFile(saveLocation, '/');
-}
-```
-
-Where saveLocation is the absolute path of the file on the operating system. This will pop up with the share options for other apps on the phone.
-
-## Disable default content menu
-
-```javascript
-disableDefaultContextMenu()
-```
-
-Disables the context menu (hold screen menu). This can be useful if the user needs to tap and hold the screen for some action instead of invoking Android's context menu.
-
-## Enable default content menu
-
-```javascript
-enableDefaultContextMenu()
-```
-
-Enables the context menu (hold screen menu).
-
-## Open external brower
-
-```javascript
-openExternalBrowser(String zUrl, String zTarget)
-```
-
-This will open the app in the default external browser.
-
-## Close Window
-
-```javascript
-closeWindow()
-```
-
-A MiniDapp can call this function to close the window and return back to the previous window, in most cases this will be the MiniHUB.
-
-## Shutdown Minima
-
-```javascript
-shutdownMinima()
-```
+---
+title: MiniBrowser
+description: The Mini Browser is a web browser that is built into the Minima wallet.
+tag: development
+---
+
+The Android MiniBrowser is the web browser that runs internally on the Minima Android app.
+
+It is a custom built browser that allows users to use MiniDapps without having to leave the app to open an external browser window such as Chrome.
+
+Using the MiniBrowser prevents users from needing to bypass the self-signed certificate warning however it does not contain the full breadth of functionality that comes with an external browser.
+
+The MiniBrowser javascript interface contains the following functions that can be called from your MiniDapp:
+
+
+## Show title bar
+
+```javascript
+showTitleBar()
+```
+
+Show the title bar to allow the user to refresh the page, view the console logs or open the MiniDapp in an external browser.
+
+This is normally hooked up to the MiniDapp's top bar so that tapping at the top of the screen brings up the title bar.
+
+## Blob download
+
+```javascript
+blobDownload(String zMdsfile, String zHexData)
+```
+
+Due to limitations of the Minima Browser, you cannot download blob files via an anchor tag.
+
+To get around this issue, you can convert your file contents into hex data by using `MDS.util.base64ToHex` and then `Android.blobDownload('fileName', hexData);`
+
+## Share text
+
+```javascript
+shareText(String zText)
+```
+
+Displays Androids native share menu and allows you to share any text that is passed in as an argument.
+
+## Share file
+
+```javascript
+shareFile(String zFilePath, String zMimeType)
+```
+
+This will display Androids native share menu with the attached file (filepath must be specified). This is useful for attaching a file to an email for sharing.
+
+Example:
+
+```javascript
+if ((window as any).navigator.userAgent.includes('Minima Browser')) {
+return Android.shareFile(saveLocation, '/');
+}
+```
+
+Where saveLocation is the absolute path of the file on the operating system. This will pop up with the share options for other apps on the phone.
+
+## Disable default content menu
+
+```javascript
+disableDefaultContextMenu()
+```
+
+Disables the context menu (hold screen menu). This can be useful if the user needs to tap and hold the screen for some action instead of invoking Android's context menu.
+
+## Enable default content menu
+
+```javascript
+enableDefaultContextMenu()
+```
+
+Enables the context menu (hold screen menu).
+
+## Open external brower
+
+```javascript
+openExternalBrowser(String zUrl, String zTarget)
+```
+
+This will open the app in the default external browser.
+
+## Close Window
+
+```javascript
+closeWindow()
+```
+
+A MiniDapp can call this function to close the window and return back to the previous window, in most cases this will be the MiniHUB.
+
+## Shutdown Minima
+
+```javascript
+shutdownMinima()
+```
Gracefully shutdown Minima to ensure all databases are shutdown correctly.
\ No newline at end of file
diff --git a/content/docs/learn/minidapp-configfile.mdx b/content/docs/development/minidapp-configfile.mdx
similarity index 95%
rename from content/docs/learn/minidapp-configfile.mdx
rename to content/docs/development/minidapp-configfile.mdx
index 632c51a..42cd06b 100644
--- a/content/docs/learn/minidapp-configfile.mdx
+++ b/content/docs/development/minidapp-configfile.mdx
@@ -1,28 +1,26 @@
----
-title: Config File
-description: MiniDapps are applications that run on top of Minima and Maxima.
-tag: learn
----
-
-
-
-The **dapp.conf** file is the configuration file for your MiniDapp and is where the MiniDapp metadata is provided in JSON format which will be required by the MiniDapp Hub later.
-
-Metadata options:
-- **name**: name of your MiniDapp
-- **icon**: name of icon file (located in the same folder)
-- **version**: MiniDapp version number
-- **description**: MiniDapp description
-- **browser**: internal or external (for mobile interface), depending on whether your MiniDapp should be launched within the app or in an external browser
-
-**Example**
-
-``` json title="dapp.conf"
-{
-"name":"Hello World",
-"icon" :"favicon.ico",
-"version" : "1.0",
-"description": "My Hello World MiniDapp",
-"browser": "internal"
-}
+---
+title: Config File
+description: MiniDapps are applications that run on top of Minima and Maxima.
+tag: development
+---
+
+The **dapp.conf** file is the configuration file for your MiniDapp and is where the MiniDapp metadata is provided in JSON format which will be required by the MiniDapp Hub later.
+
+Metadata options:
+- **name**: name of your MiniDapp
+- **icon**: name of icon file (located in the same folder)
+- **version**: MiniDapp version number
+- **description**: MiniDapp description
+- **browser**: internal or external (for mobile interface), depending on whether your MiniDapp should be launched within the app or in an external browser
+
+**Example**
+
+``` json title="dapp.conf"
+{
+"name":"Hello World",
+"icon" :"favicon.ico",
+"version" : "1.0",
+"description": "My Hello World MiniDapp",
+"browser": "internal"
+}
```
\ No newline at end of file
diff --git a/content/docs/learn/minidapp-events.mdx b/content/docs/development/minidapp-events.mdx
similarity index 81%
rename from content/docs/learn/minidapp-events.mdx
rename to content/docs/development/minidapp-events.mdx
index 12793ec..5238974 100644
--- a/content/docs/learn/minidapp-events.mdx
+++ b/content/docs/development/minidapp-events.mdx
@@ -1,62 +1,64 @@
----
-title: Events
-description: MiniDapps are applications that run on top of Minima and Maxima.
-tag: learn
----
-
-Minima Events can be listened for, so that users can be notified when specific on-chain events occur.
-
-The following events exist:
-
-`inited`: MDS has been initialised.
-
-`NEWBALANCE`: The balance of the node has changed.
-
-`NEWBLOCK`: The chain tip has changed (i.e. a new block has been added to the chain). JSON data returned: The TxPoW object of the last block is returned as a JSON Object.
-
-`MINING`: Mining has started or ended.
-JSON data returned: The TxPoW Object, true (if started)/false (if ended).
-
-`MINIMALOG`: A new log message is available
-
-`MAXIMA` : A Maxima message has been received.
-
-`MDS_TIMER_1HOUR` : A one hour timer.
-
-`MDS_TIMER_10SECONDS` : A 10 second timer.
-
-`MDS_SHUTDOWN` : A message which is sent when the MiniDapp system is about to be shutdown. Shuts down 2 seconds after the message is posted.
-
-
-```javascript title="Example:"
-MDS.init(function(msg) {
- console.log(msg);
- // inited means Minima API is ready to be used
- switch(msg.event) {
- case "inited":
- // do Minima dependent initializations
- break;
- case "NEWBLOCK":
- // new block message event
- console.log(msg);
- // new block message data
- console.log(msg.data);
- break;
- case "MINING":
- // mining message event
- console.log(msg);
- // mining message data
- console.log(msg.data);
- break;
- case "NEWBALANCE":
- // new balance message event
- console.log(msg);
- // there is no data for a new balance event, but you can
- // call MDS.cmd('balance') to retrieve the balance changes
- MDS.cmd('balance', function (msg) {
- console.log(msg.response);
- });
- }
-});
-```
-
+---
+title: Events
+description: MiniDapps are applications that run on top of Minima and Maxima.
+tag: development
+---
+
+Minima Events can be listened for, so that users can be notified when specific on-chain events occur.
+
+The following events exist:
+
+`inited`: MDS has been initialised.
+
+`NEWBALANCE`: The balance of the node has changed. This occurs when the node receives a new unconfirmed coin. The coin will only become spendable once it is 3 blocks deep in the chain.
+
+`NEWBLOCK`: The chain tip has changed (i.e. a new block has been added to the chain). JSON data returned: The TxPoW object of the last block is returned as a JSON Object.
+
+`MINING`: Mining has started or ended.
+JSON data returned: The TxPoW Object, true (if started)/false (if ended).
+
+`MINIMALOG`: A new log message is available
+
+`MAXIMA` : A Maxima message has been received.
+
+`MDS_PENDING` : MiniDapps can use this event as a callback when the user accepts the pending transaction from the Pending MiniDapp.
+
+`MDS_TIMER_1HOUR` : A one hour timer.
+
+`MDS_TIMER_10SECONDS` : A 10 second timer.
+
+`MDS_SHUTDOWN` : A message which is sent when the MiniDapp system is about to be shutdown. Shuts down 2 seconds after the message is posted.
+
+
+```javascript title="Example:"
+MDS.init(function(msg) {
+ console.log(msg);
+ // inited means Minima API is ready to be used
+ switch(msg.event) {
+ case "inited":
+ // do Minima dependent initializations
+ break;
+ case "NEWBLOCK":
+ // new block message event
+ console.log(msg);
+ // new block message data
+ console.log(msg.data);
+ break;
+ case "MINING":
+ // mining message event
+ console.log(msg);
+ // mining message data
+ console.log(msg.data);
+ break;
+ case "NEWBALANCE":
+ // new balance message event
+ console.log(msg);
+ // there is no data for a new balance event, but you can
+ // call MDS.cmd('balance') to retrieve the balance changes
+ MDS.cmd('balance', function (msg) {
+ console.log(msg.response);
+ });
+ }
+});
+```
+
diff --git a/content/docs/learn/minidapp-mds.mdx b/content/docs/development/minidapp-mdsjs.mdx
similarity index 91%
rename from content/docs/learn/minidapp-mds.mdx
rename to content/docs/development/minidapp-mdsjs.mdx
index d10f7b1..6a3b503 100644
--- a/content/docs/learn/minidapp-mds.mdx
+++ b/content/docs/development/minidapp-mdsjs.mdx
@@ -1,347 +1,348 @@
----
-title: mds.js library
-description: mds.js is a JavaScript library for building MiniDapps
-tag: learn
----
-
-The MiniDapp System library mds.js provides access to an MDS object that enables useful functionality when building MiniDapps.
-
-The latest mds.js can be downloaded from GitHub [here](https://github.com/minima-global/Minima/blob/master/mds/mds.js).
-
-The following functions exist on the MDS object.
-
-## General functions
-
-### init
-
-Minima Startup - with the callback function used for all Minima messages
-
-```javascript
-init : function(callback)
-```
-
-Before being able to use the Minima API and run any commands, `MDS.init` must be run.
-
-`MDS.init` takes one parameter, the callback function which returns a response object in JSON format.
-
-That would look something like this:
-
-```javascript
-MDS.init(function(event){});
-```
-
-
-### log
-
-Log some data with a timestamp in a consistent manner to the console.
-
-```javascript
-log : function(output)
-
-```
-`log` is a simple helper function that will output to the browser's console a time stamped message of your choice. This is useful for debugging.
-
-**Example:**
-
-```javascript
-MDS.log("this is a time stamped message");
-```
-
-
-### notify
-
-Notify the User - on Phone it pops up in status bar. On desktop appears in Logs.
-
-```javascript
-notify : function(output)
-```
-
-### notifycancel
-
-Cancel this MiniDAPPs notification
-
-```javascript
-notifycancel : function()
-```
-
-### cmd
-
-Runs a function on the Minima Command Line - takes the same format as Minima
-
-Minima Terminal commands can be executed within JavaScript functions.
-
-`MDS.cmd` takes two parameters, the name of the command to run and the callback function which returns a response object in JSON format.
-
-```javascript
-MDS.cmd(minimaCommand,callback)
-```
-
-**Example:**
-
-```javascript
-MDS.cmd("balance", function(res){
-console.log(res);
-});
-```
-
-```json title="Example response"
-{
- "command":"balance",
- "status":true,
- "response":[{
- "token":"Minima",
- "tokenid":"0x00",
- "confirmed":"0",
- "unconfirmed":"1000000000",
- "sendable":"0",
- "coins":"1",
- "total":"1000000000"
- }]
-}
-```
-
-
-For the full list of terminal commands, run `help` from the Minima Command Line, or see [Terminal commands](/docs/userguides/usingyournode/terminal_commands).
-
-
-### sql
-
-Runs a SQL command on this MiniDAPPs SQL Database.
-
-```javascript
-sql : function(command, callback)
-```
-
-An instance of a MySQL database is available for every MiniDapp. You can create tables, insert, delete and query as you would any database using `MDS.sql`.
-
-Under the hood is the H2 Java database engine, where you can do normal CRUD operations as you would. There may be some minor differences between MySQL and MySQL with H2. Read more [here](https://www.h2database.com/html/main.html).
-
-`MDS.sql` takes two parameters, the query string and a callback function.
-
-**Examples:**
-```javascript
-MDS.sql(sqlQuery, callback);
-```
-```javascript
-MDS.sql("CREATE TABLE IF NOT EXISTS CUSTOMTABLE values(...)", function(res));
-```
-```javascript
-MDS.sql("INSERT INTO table_name (column1, column2, column3, ...)
-VALUES (value1, value2, value3, ...)", function(res));
-```
-```javascript
-MDS.sql("CREATE TABLE IF NOT EXISTS MESSAGES...", function(res));
-```
-
-
-
-### dapplink
-
-Get a link to a different Dapp. READ dapps can only get READ DAPPS. WRITE can get all dapps.
-
-```javascript
-dapplink : function(dappname, callback)
-```
-
-## Network functions
-
-### net.GET
-
-Make a GET request
-```javascript
-GET : function(url, callback)
-```
-
-### net.POST
-
-Make a POST request
-
-```javascript
-POST : function(url, data, callback)
-```
-
-## Keypair functions
-
-Simple GET and SET key value pairs that are saved persistently.
-
-### get
-
-GET a value
-
-```javascript
-get : function(key, callback)
-```
-
-### set
-
-SET a value
-
-```javascript
-set : function(key, value, callback)
-```
-
-## Comms functions
-
-Send a message to ALL minidapps or JUST your own service.js
-
-### comms.broadcast
-
-PUBLIC message broadcast to ALL (callback is optional)
-
-```javascript
-broadcast : function(msg, callback)
-```
-
-### comms.solo
-
-PRIVATE message send just to this MiniDAPP (callback is optional)
-
-```javascript
-solo : function(msg, callback)
-```
-
-
-## File functions
-
-### file.list
-
-List file in a folder .. start at
-
-```javascript
-list : function(folder, callback)
-```
-
-### file.save
-
-Save text - can be text, a JSON in string format or hex encoded data
-
-```
-save : function(filename, text, callback)
-```
-
-### file.savebinary
-
-Save Binary Data - supply as a HEX string
-
-```javascript
-savebinary : function(filename, hexdata, callback)
-```
-
-### file.load
-
-Load text - can be text, a JSON in string format or hex encoded data
-
-```javascript
-load : function(filename, callback)
-```
-
-### file.loadbinary
-
-Load Binary data - returns the HEX data
-
-```javascript
-loadbinary : function(filename, callback)
-```
-### file.delete
-
-Delete a file
-
-```javascript
-delete : function(filename, callback)
-```
-
-### file.getpath
-
-Get the full path - if you want to run a command on the file / import a txn / unsigned txn etc
-
-```javascript
-getpath : function(filename, callback)
-```
-
-### file.makedir
-
-Make a directory
-
-```javascript
-makedir : function(filename, callback)
-```
-
-### file.copy
-
-Copy a file
-
-```javascript
-copy : function(filename, newfilename, callback)
-```
-
-### file.move
-
-Move a file
-
-```javascript
-move : function(filename, newfilename, callback)
-```
-
-### file.download
-
-Download a File from the InterWeb - Will be put in Downloads folder
-
-```javascript
-download : function(url, callback)
-```
-
-### file.copytoweb
-
-Copy a file to your web folder
-
-```javascript
-copytoweb : function(file, webfile, callback)
-```
-
-## Form functions
-
-Handles form submissions. Function for GET parameters.
-
-### form.getParams
-
-Return the GET parameter by scraping the location. Allows you to retrieve parameters from your url.
-
-```javascript
-getParams : function(parameterName)
-```
-
-## Utility functions
-
-### util.hexToBase64
-
-Convert HEX to Base 64 - removes the 0x if necessary
-
-```javascript
-hexToBase64(hexstring)
-```
-
-### util.base64ToHex
-
-Convert Base64 to HEX
-
-```javascript
-base64ToHex(str)
-```
-
-### util.base64ToArrayBuffer
-
-Convert Base64 to a Uint8Array - useful for Blobs
-
-```javascript
-base64ToArrayBuffer(base64)
-```
-
-
-### util.getStateVariable
-
-Return a state variable given the coin
-
-```javascript
-getStateVariable(coin,port)
-```
-
+---
+title: mds.js Library
+description: mds.js is a JavaScript library for building MiniDapps
+tag: development
+---
+
+The MiniDapp System library mds.js provides access to an MDS object that enables useful functionality when building MiniDapps.
+
+The latest mds.js can be downloaded from GitHub [here](https://github.com/minima-global/Minima/blob/master/mds/mds.js).
+
+The following functions exist on the MDS object.
+
+## General functions
+
+### init
+
+Minima Startup - with the callback function used for all Minima messages
+
+```javascript
+init : function(callback)
+```
+
+Before being able to use the Minima API and run any commands, `MDS.init` must be run.
+
+`MDS.init` takes one parameter, the callback function which returns a response object in JSON format.
+
+That would look something like this:
+
+```javascript
+MDS.init(function(event){});
+```
+
+
+### log
+
+Log some data with a timestamp in a consistent manner to the console.
+
+```javascript
+log : function(output)
+
+```
+`log` is a simple helper function that will output to the browser's console a time stamped message of your choice. This is useful for debugging.
+
+**Example:**
+
+```javascript
+MDS.log("this is a time stamped message");
+```
+
+
+### notify
+
+Notify the User - on Phone it pops up in status bar. On desktop appears in Logs.
+
+```javascript
+notify : function(output)
+```
+
+### notifycancel
+
+Cancel this MiniDAPPs notification
+
+```javascript
+notifycancel : function()
+```
+
+### cmd
+
+Runs a function on the Minima Command Line - takes the same format as Minima
+
+Minima Terminal commands can be executed within JavaScript functions.
+
+`MDS.cmd` takes two parameters, the name of the command to run and the callback function which returns a response object in JSON format.
+
+```javascript
+MDS.cmd(minimaCommand,callback)
+```
+
+**Example:**
+
+```javascript
+MDS.cmd("balance", function(res){
+console.log(res);
+});
+```
+
+```json title="Example response"
+{
+ "command":"balance",
+ "status":true,
+ "response":[{
+ "token":"Minima",
+ "tokenid":"0x00",
+ "confirmed":"0",
+ "unconfirmed":"1000000000",
+ "sendable":"0",
+ "coins":"1",
+ "total":"1000000000"
+ }]
+}
+```
+
+
+For the full list of terminal commands, run `help` from the Minima Command Line, or see [Terminal commands](/docs/development/terminal-commands).
+
+
+### sql
+
+Runs a SQL command on this MiniDAPPs SQL Database.
+
+```javascript
+sql : function(command, callback)
+```
+
+An instance of a MySQL database is available for every MiniDapp. You can create tables, insert, delete and query as you would any database using `MDS.sql`.
+
+Under the hood is the H2 Java database engine, where you can do normal CRUD operations as you would. There may be some minor differences between MySQL and MySQL with H2. Read more [here](https://www.h2database.com/html/main.html).
+
+`MDS.sql` takes two parameters, the query string and a callback function.
+
+**Examples:**
+```javascript
+MDS.sql(sqlQuery, callback);
+```
+```javascript
+MDS.sql("CREATE TABLE IF NOT EXISTS CUSTOMTABLE values(...)", function(res));
+```
+```javascript
+MDS.sql("INSERT INTO table_name (column1, column2, column3, ...)
+VALUES (value1, value2, value3, ...)", function(res));
+```
+```javascript
+MDS.sql("CREATE TABLE IF NOT EXISTS MESSAGES...", function(res));
+```
+
+
+
+### dapplink
+
+Get a link to a different Dapp. READ dapps can only get READ DAPPS. WRITE can get all dapps.
+
+```javascript
+dapplink : function(dappname, callback)
+```
+
+## Network functions
+
+### net.GET
+
+Make a GET request
+```javascript
+GET : function(url, callback)
+```
+
+### net.POST
+
+Make a POST request
+
+```javascript
+POST : function(url, data, callback)
+```
+
+## Keypair functions
+
+Simple GET and SET key value pairs that are saved persistently.
+
+### get
+
+GET a value
+
+```javascript
+get : function(key, callback)
+```
+
+### set
+
+SET a value
+
+```javascript
+set : function(key, value, callback)
+```
+
+## Comms functions
+
+Send a message to ALL minidapps or JUST your own service.js
+
+### comms.broadcast
+
+PUBLIC message broadcast to ALL (callback is optional)
+
+```javascript
+broadcast : function(msg, callback)
+```
+
+### comms.solo
+
+PRIVATE message send just to this MiniDAPP (callback is optional)
+
+```javascript
+solo : function(msg, callback)
+```
+
+
+## File functions
+
+### file.list
+
+List file in a folder .. start at
+
+```javascript
+list : function(folder, callback)
+```
+
+### file.save
+
+Save text - can be text, a JSON in string format or hex encoded data
+
+```
+save : function(filename, text, callback)
+```
+
+### file.savebinary
+
+Save Binary Data - supply as a HEX string
+
+```javascript
+savebinary : function(filename, hexdata, callback)
+```
+
+### file.load
+
+Load text - can be text, a JSON in string format or hex encoded data
+
+```javascript
+load : function(filename, callback)
+```
+
+### file.loadbinary
+
+Load Binary data - returns the HEX data
+
+```javascript
+loadbinary : function(filename, callback)
+```
+### file.delete
+
+Delete a file
+
+```javascript
+delete : function(filename, callback)
+```
+
+### file.getpath
+
+Get the full path - if you want to run a command on the file / import a txn / unsigned txn etc
+
+```javascript
+getpath : function(filename, callback)
+```
+
+### file.makedir
+
+Make a directory
+
+```javascript
+makedir : function(filename, callback)
+```
+
+### file.copy
+
+Copy a file
+
+```javascript
+copy : function(filename, newfilename, callback)
+```
+
+### file.move
+
+Move a file
+
+```javascript
+move : function(filename, newfilename, callback)
+```
+
+### file.download
+
+Download a File from the InterWeb - Will be put in Downloads folder
+
+```javascript
+download : function(url, callback)
+```
+
+### file.copytoweb
+
+Copy a file to your web folder for users to download instead of getting the blob.
+
+
+```javascript
+copytoweb : function(file, webfile, callback)
+```
+
+## Form functions
+
+Handles form submissions. Function for GET parameters.
+
+### form.getParams
+
+Return the GET parameter by scraping the location. Allows you to retrieve parameters from your url.
+
+```javascript
+getParams : function(parameterName)
+```
+
+## Utility functions
+
+### util.hexToBase64
+
+Convert HEX to Base 64 - removes the 0x if necessary
+
+```javascript
+hexToBase64(hexstring)
+```
+
+### util.base64ToHex
+
+Convert Base64 to HEX
+
+```javascript
+base64ToHex(str)
+```
+
+### util.base64ToArrayBuffer
+
+Convert Base64 to a Uint8Array - useful for Blobs
+
+```javascript
+base64ToArrayBuffer(base64)
+```
+
+
+### util.getStateVariable
+
+Return a state variable given the coin
+
+```javascript
+getStateVariable(coin,port)
+```
+
diff --git a/content/docs/learn/service-js.mdx b/content/docs/development/minidapp-servicejs.mdx
similarity index 92%
rename from content/docs/learn/service-js.mdx
rename to content/docs/development/minidapp-servicejs.mdx
index 5a0f720..e6f61c3 100644
--- a/content/docs/learn/service-js.mdx
+++ b/content/docs/development/minidapp-servicejs.mdx
@@ -1,324 +1,314 @@
----
-title: service.js
-description: Service.js is a JavaScript library that allows you to interact with the Minima wallet.
-tag: learn
----
-
-## Overview
-
-`service.js` is the background service script for MiniDapps running on a Minima node.
-
-It acts as the backend engine that handles various operations and tasks, even when the MiniDapp user interface is closed. The `mds.js` library provides the necessary functions and APIs that service.js uses to interact with Minima.
-
-Using service.js and mds.js you can, for example, load other necessary JavaScript files, handle and respond to Minima events from the node and interact with the MiniDapp's SQL database.
-
-## Initialisation
-
-MDS must be initialized to start receiving Minima events. Use `MDS.init` with a callback function to handle incoming messages. Note that service.js runs synchronously.
-
-#### Example
-
-```javascript
-MDS.init(function(msg) {
- // Handle different events
- if (msg.event === "inited") {
- MDS.log("MDS has been initialised.");
- } else if (msg.event === "NEWBALANCE") {
- MDS.log("New balance: " + JSON.stringify(msg.data));
- } // Add other event handlers as needed
-});
-```
-
-## Loading Scripts
-
-To load additional JavaScript files within `service.js`, use the `MDS.load` function. This ensures that all necessary dependencies are available before executing any operations that depend on them.
-
-#### Example
-
-```javascript
-// Load required files
-MDS.load('./js/jslib.js');
-MDS.load('./js/sql.js');
-```
-
-## Handling Events
-
-`service.js` can handle various events triggered by Minima. These include on-chain, Maxima and periodic events.
-
-#### Available Events
-
-- **inited**: MDS has been initialised.
-- **NEWBALANCE**: The balance of the node has changed.
-- **NEWBLOCK**: A new block has been added to the chain.
-- **MINING**: Mining has started or ended.
-- **MINIMALOG**: A new log message is available.
-- **MAXIMA**: A Maxima message has been received.
-- **MDS_TIMER_1HOUR**: A one-hour timer.
-- **MDS_TIMER_10SECONDS**: A 10-second timer.
-- **MDS_SHUTDOWN**: The MiniDapp system is about to be shut down.
-
-For the full list of events, see the [Events](/docs/buildonminima/dapps/events) page.
-
-#### Example
-
-```javascript title="Example"
-MDS.init(function(msg) {
- switch (msg.event) {
- case "inited":
- MDS.log("MDS has been initialised.");
- break;
- case "NEWBALANCE":
- MDS.log("New balance: " + JSON.stringify(msg.data));
- break;
- case "NEWBLOCK":
- MDS.log("New block: " + JSON.stringify(msg.data));
- break;
- case "MINING":
- MDS.log("Mining status: " + JSON.stringify(msg.data));
- break;
- case "MINIMALOG":
- MDS.log("Log message: " + JSON.stringify(msg.data));
- break;
- case "MAXIMA":
- MDS.log("Maxima message: " + JSON.stringify(msg.data));
- break;
- case "MDS_TIMER_1HOUR":
- MDS.log("One-hour timer event.");
- break;
- case "MDS_TIMER_10SECONDS":
- MDS.log("10-second timer event.");
- break;
- case "MDS_SHUTDOWN":
- MDS.log("System shutdown message received.");
- break;
- }
-});
-```
-
-## Using the MDS API
-
-### Command Line Commands
-
-Run Minima commands using `MDS.cmd`.
-
-```javascript
-MDS.cmd("status", function(response) {
- MDS.log("Minima status: " + JSON.stringify(response));
-});
-```
-
-### SQL Commands
-
-Run SQL commands on the MiniDAPP's SQL Database using `MDS.sql`.
-
-```javascript
-MDS.sql("SELECT * FROM mytable", function(response) {
- MDS.log("SQL response: " + JSON.stringify(response));
-});
-```
-
-### Notifications
-
-Send notifications to the user with `MDS.notify` and cancel them with `MDS.notifycancel`.
-
-```javascript
-MDS.notify("This is a notification message.");
-MDS.notifycancel();
-```
-
-### File Operations
-
-Perform file operations like saving, loading, and deleting files using `MDS.file`.
-
-```javascript
-// Save text to a file
-MDS.file.save("example.txt", "Hello, Minima!", function(response) {
- MDS.log("File save response: " + JSON.stringify(response));
-});
-
-// Load text from a file
-MDS.file.load("example.txt", function(response) {
- MDS.log("File load response: " + JSON.stringify(response));
-});
-
-// Delete a file
-MDS.file.delete("example.txt", function(response) {
- MDS.log("File delete response: " + JSON.stringify(response));
-});
-```
-
-### Network Operations
-
-Make HTTP GET and POST requests using `MDS.net`.
-
-```javascript
-// Make a GET request
-MDS.net.GET("https://api.example.com/data", function(response) {
- MDS.log("GET response: " + JSON.stringify(response));
-});
-
-// Make a POST request
-MDS.net.POST("https://api.example.com/data", "key=value", function(response) {
- MDS.log("POST response: " + JSON.stringify(response));
-});
-```
-
-### Key-Value Store
-
-Store and retrieve key-value pairs using `MDS.keypair`.
-
-```javascript
-// Set a key-value pair
-MDS.keypair.set("mykey", "myvalue", function(response) {
- MDS.log("Key set response: " + JSON.stringify(response));
-});
-
-// Get a value by key
-MDS.keypair.get("mykey", function(response) {
- MDS.log("Key get response: " + JSON.stringify(response));
-});
-```
-
-### Communication
-
-Send messages to other MiniDAPPs or the same service using `MDS.comms`.
-
-```javascript
-// Broadcast a message to all MiniDAPPs
-MDS.comms.broadcast("This is a broadcast message.", function(response) {
- MDS.log("Broadcast response: " + JSON.stringify(response));
-});
-
-// Send a private message to the same MiniDAPP
-MDS.comms.solo("This is a private message.", function(response) {
- MDS.log("Solo message response: " + JSON.stringify(response));
-});
-```
-
-### Utility Functions
-
-#### Form Parameters
-
-Retrieve GET parameters from the URL.
-
-```javascript
-const uid = MDS.form.getParams("uid");
-MDS.log("UID: " + uid);
-```
-
-#### Hex and Base64 Conversion
-
-Convert between hex and base64 encoding.
-
-```javascript
-const base64 = MDS.util.hexToBase64("48656c6c6f");
-MDS.log("Base64: " + base64);
-
-const hex = MDS.util.base64ToHex("SGVsbG8=");
-MDS.log("Hex: " + hex);
-```
-
-#### State Variables
-
-Retrieve a state variable given the coin and port.
-
-```javascript
-const stateData = MDS.util.getStateVariable(coin, port);
-MDS.log("State data: " + stateData);
-```
-
-
-## Synchronous Nature of `service.js`
-
-`service.js` is synchronous, meaning that tasks and functions in `service.js` are executed one after the other, in sequence. Each task must complete before the next one begins.
-
-However, some tasks will take time to complete, like fetching data from a server, reading a file, or performing complex calculations. If `service.js` had to wait for each of these tasks to finish before moving on to the next one, it could slow down significantly.
-
-### Asynchronous Functions and Callbacks
-
-To handle tasks that take time without blocking the rest of the code, you can use asynchronous functions. These functions allow `service.js` to start a task and then move on to other tasks while waiting for the first one to complete. When the task finishes, a callback function is used to handle the result.
-
-A callback is a function that you pass into another function as an argument, which is then executed when the task completes. This way, `service.js` can continue running other code while waiting for long-running tasks to finish.
-
-#### Callback Example:
-
-```javascript title="Example"
-// Example of synchronous code (blocking)
-MDS.sql("SELECT * FROM mytable", function(response) {
- MDS.log("SQL response: " + JSON.stringify(response));
- MDS.notify("Data fetched");
-});
-MDS.log("This log appears after the SQL command completes."); // This will run after the SQL command completes
-
-// Example of asynchronous code (non-blocking)
-MDS.file.load("example.txt", function(response) {
- MDS.log("File load response: " + JSON.stringify(response));
- // This callback runs when the file load is complete
-});
-MDS.log("This log appears immediately, not waiting for the file load."); // This runs immediately
-```
-
-
-#### Why Use Callbacks?
-
-1. **Efficiency**: `service.js` can handle multiple tasks simultaneously, improving performance.
-2. **Responsiveness**: The application remains responsive, especially when dealing with tasks that take time, like network requests or file operations.
-3. **Scalability**: Easier to manage complex workflows without blocking other tasks.
-
-
-
-## Basic Example of service.js
-
-Below is a basic example of a `service.js` file that performs various operations and logs events using `MDS.log`.
-
-```javascript title="Example"
-
-// Load required scripts
-MDS.load('dapplib.js');
-
-// Are we logging data
-var logs = false;
-
-// Main message handler
-MDS.init(function(msg) {
- if (msg.event == "inited") {
- // initialise the database
- createDB(function(msg) {
- MDS.log("SQL DB inited");
- });
-
- // Get Maxima user details
- MDS.cmd("maxima", function(msg) {
- var publicKey = msg.response.publickey;
- var username = msg.response.name;
- MDS.log("Maxima user details: " + publicKey + " - " + username);
- });
- }
-
- if (msg.event == "MDS_TIMER_1HOUR") {
- // Perform hourly tasks
- performHourlyTasks();
- }
-
- if (msg.event == "MAXIMA") {
- // Handle Maxima messages
- handleMaximaMessage(msg.data);
- }
-});
-
-function createDB(callback) {
- MDS.sql("CREATE TABLE IF NOT EXISTS 'tablename' (id bigint auto_increment, block varchar(256) NOT NULL, hash varchar(256) NOT NULL, timestamp TIMESTAMP NOT NULL)", function(response) {
- callback(response);
- });
-}
-
-function performHourlyTasks() {
- MDS.log("Performing hourly tasks...");
- // Add hourly tasks logic here
-}
-
-function handleMaximaMessage(data) {
- MDS.log("Handling Maxima message: " + JSON.stringify(data));
- // Add Maxima message handling logic here
-}
+---
+title: service.js
+description: Service.js is a JavaScript library that allows you to interact with the Minima wallet.
+tag: development
+---
+
+## Overview
+
+`service.js` is the background service script for MiniDapps running on a Minima node.
+
+It acts as the backend engine that handles various operations and tasks, even when the MiniDapp user interface is closed. The `mds.js` library provides the necessary functions and APIs that service.js uses to interact with Minima.
+
+Using service.js and mds.js you can, for example, load other necessary JavaScript files, handle and respond to Minima events from the node and interact with the MiniDapp's SQL database.
+
+## Initialisation
+
+MDS must be initialized to start receiving Minima events. Use `MDS.init` with a callback function to handle incoming messages.
+
+**Note that service.js runs synchronously.**
+
+#### Example
+
+```javascript
+MDS.init(function(msg) {
+ // Handle different events
+ if (msg.event === "inited") {
+ MDS.log("MDS has been initialised.");
+ } else if (msg.event === "NEWBALANCE") {
+ MDS.log("New balance: " + JSON.stringify(msg.data));
+ } // Add other event handlers as needed
+});
+```
+
+## Loading Scripts
+
+To load additional JavaScript files within `service.js`, use the `MDS.load` function. This ensures that all necessary dependencies are available before executing any operations that depend on them.
+
+#### Example
+
+```javascript
+// Load required files
+MDS.load('./js/jslib.js');
+MDS.load('./js/sql.js');
+```
+
+## Handling Events
+
+`service.js` can handle the same events as the front end. These include on-chain, Maxima and periodic events.
+
+For the full list of events, see the [Events](/docs/development/minidapp-events) page.
+
+#### Example
+
+```javascript title="Example"
+MDS.init(function(msg) {
+ switch (msg.event) {
+ case "inited":
+ MDS.log("MDS has been initialised.");
+ break;
+ case "NEWBALANCE":
+ MDS.log("New balance: " + JSON.stringify(msg.data));
+ break;
+ case "NEWBLOCK":
+ MDS.log("New block: " + JSON.stringify(msg.data));
+ break;
+ case "MINING":
+ MDS.log("Mining status: " + JSON.stringify(msg.data));
+ break;
+ case "MINIMALOG":
+ MDS.log("Log message: " + JSON.stringify(msg.data));
+ break;
+ case "MAXIMA":
+ MDS.log("Maxima message: " + JSON.stringify(msg.data));
+ break;
+ case "MDS_TIMER_1HOUR":
+ MDS.log("One-hour timer event.");
+ break;
+ case "MDS_TIMER_10SECONDS":
+ MDS.log("10-second timer event.");
+ break;
+ case "MDS_SHUTDOWN":
+ MDS.log("System shutdown message received.");
+ break;
+ }
+});
+```
+
+## Using the MDS API
+
+### Command Line Commands
+
+Run Minima commands using `MDS.cmd`.
+
+```javascript
+MDS.cmd("status", function(response) {
+ MDS.log("Minima status: " + JSON.stringify(response));
+});
+```
+
+### SQL Commands
+
+Run SQL commands on the MiniDAPP's SQL Database using `MDS.sql`.
+
+```javascript
+MDS.sql("SELECT * FROM mytable", function(response) {
+ MDS.log("SQL response: " + JSON.stringify(response));
+});
+```
+
+### Notifications
+
+Send notifications to the user with `MDS.notify` and cancel them with `MDS.notifycancel`.
+
+```javascript
+MDS.notify("This is a notification message.");
+MDS.notifycancel();
+```
+
+### File Operations
+
+Perform file operations like saving, loading, and deleting files using `MDS.file`.
+
+```javascript
+// Save text to a file
+MDS.file.save("example.txt", "Hello, Minima!", function(response) {
+ MDS.log("File save response: " + JSON.stringify(response));
+});
+
+// Load text from a file
+MDS.file.load("example.txt", function(response) {
+ MDS.log("File load response: " + JSON.stringify(response));
+});
+
+// Delete a file
+MDS.file.delete("example.txt", function(response) {
+ MDS.log("File delete response: " + JSON.stringify(response));
+});
+```
+
+### Network Operations
+
+Make HTTP GET and POST requests using `MDS.net`.
+
+```javascript
+// Make a GET request
+MDS.net.GET("https://api.example.com/data", function(response) {
+ MDS.log("GET response: " + JSON.stringify(response));
+});
+
+// Make a POST request
+MDS.net.POST("https://api.example.com/data", "key=value", function(response) {
+ MDS.log("POST response: " + JSON.stringify(response));
+});
+```
+
+### Key-Value Store
+
+Store and retrieve key-value pairs using `MDS.keypair`.
+
+```javascript
+// Set a key-value pair
+MDS.keypair.set("mykey", "myvalue", function(response) {
+ MDS.log("Key set response: " + JSON.stringify(response));
+});
+
+// Get a value by key
+MDS.keypair.get("mykey", function(response) {
+ MDS.log("Key get response: " + JSON.stringify(response));
+});
+```
+
+### Communication
+
+Send messages to other MiniDAPPs or the same service using `MDS.comms`.
+
+```javascript
+// Broadcast a message to all MiniDAPPs
+MDS.comms.broadcast("This is a broadcast message.", function(response) {
+ MDS.log("Broadcast response: " + JSON.stringify(response));
+});
+
+// Send a private message to the same MiniDAPP
+MDS.comms.solo("This is a private message.", function(response) {
+ MDS.log("Solo message response: " + JSON.stringify(response));
+});
+```
+
+### Utility Functions
+
+#### Form Parameters
+
+Retrieve GET parameters from the URL.
+
+```javascript
+const uid = MDS.form.getParams("uid");
+MDS.log("UID: " + uid);
+```
+
+#### Hex and Base64 Conversion
+
+Convert between hex and base64 encoding.
+
+```javascript
+const base64 = MDS.util.hexToBase64("48656c6c6f");
+MDS.log("Base64: " + base64);
+
+const hex = MDS.util.base64ToHex("SGVsbG8=");
+MDS.log("Hex: " + hex);
+```
+
+#### State Variables
+
+Retrieve a state variable given the coin and port.
+
+```javascript
+const stateData = MDS.util.getStateVariable(coin, port);
+MDS.log("State data: " + stateData);
+```
+
+
+## Synchronous Nature of `service.js`
+
+`service.js` is synchronous, meaning that tasks and functions in `service.js` are executed one after the other, in sequence. Each task must complete before the next one begins.
+
+However, some tasks will take time to complete, like fetching data from a server, reading a file, or performing complex calculations. If `service.js` had to wait for each of these tasks to finish before moving on to the next one, it could slow down significantly.
+
+### Asynchronous Functions and Callbacks
+
+To handle tasks that take time without blocking the rest of the code, you can use asynchronous functions. These functions allow `service.js` to start a task and then move on to other tasks while waiting for the first one to complete. When the task finishes, a callback function is used to handle the result.
+
+A callback is a function that you pass into another function as an argument, which is then executed when the task completes. This way, `service.js` can continue running other code while waiting for long-running tasks to finish.
+
+#### Callback Example:
+
+```javascript title="Example"
+// Example of synchronous code (blocking)
+MDS.sql("SELECT * FROM mytable", function(response) {
+ MDS.log("SQL response: " + JSON.stringify(response));
+ MDS.notify("Data fetched");
+});
+MDS.log("This log appears after the SQL command completes."); // This will run after the SQL command completes
+
+// Example of asynchronous code (non-blocking)
+MDS.file.load("example.txt", function(response) {
+ MDS.log("File load response: " + JSON.stringify(response));
+ // This callback runs when the file load is complete
+});
+MDS.log("This log appears immediately, not waiting for the file load."); // This runs immediately
+```
+
+
+#### Why Use Callbacks?
+
+1. **Efficiency**: `service.js` can handle multiple tasks simultaneously, improving performance.
+2. **Responsiveness**: The application remains responsive, especially when dealing with tasks that take time, like network requests or file operations.
+3. **Scalability**: Easier to manage complex workflows without blocking other tasks.
+
+
+
+## Basic Example of service.js
+
+Below is a basic example of a `service.js` file that performs various operations and logs events using `MDS.log`.
+
+```javascript title="Example"
+
+// Load required scripts
+MDS.load('dapplib.js');
+
+// Are we logging data
+var logs = false;
+
+// Main message handler
+MDS.init(function(msg) {
+ if (msg.event == "inited") {
+ // initialise the database
+ createDB(function(msg) {
+ MDS.log("SQL DB inited");
+ });
+
+ // Get Maxima user details
+ MDS.cmd("maxima", function(msg) {
+ var publicKey = msg.response.publickey;
+ var username = msg.response.name;
+ MDS.log("Maxima user details: " + publicKey + " - " + username);
+ });
+ }
+
+ if (msg.event == "MDS_TIMER_1HOUR") {
+ // Perform hourly tasks
+ performHourlyTasks();
+ }
+
+ if (msg.event == "MAXIMA") {
+ // Handle Maxima messages
+ handleMaximaMessage(msg.data);
+ }
+});
+
+function createDB(callback) {
+ MDS.sql("CREATE TABLE IF NOT EXISTS 'tablename' (id bigint auto_increment, block varchar(256) NOT NULL, hash varchar(256) NOT NULL, timestamp TIMESTAMP NOT NULL)", function(response) {
+ callback(response);
+ });
+}
+
+function performHourlyTasks() {
+ MDS.log("Performing hourly tasks...");
+ // Add hourly tasks logic here
+}
+
+function handleMaximaMessage(data) {
+ MDS.log("Handling Maxima message: " + JSON.stringify(data));
+ // Add Maxima message handling logic here
+}
```
\ No newline at end of file
diff --git a/content/docs/learn/minidapp-structure.mdx b/content/docs/development/minidapp-structure.mdx
similarity index 82%
rename from content/docs/learn/minidapp-structure.mdx
rename to content/docs/development/minidapp-structure.mdx
index 8b7477f..5afc943 100644
--- a/content/docs/learn/minidapp-structure.mdx
+++ b/content/docs/development/minidapp-structure.mdx
@@ -1,20 +1,18 @@
----
-title: MiniDapp Structure
-description: MiniDapps are applications that run on top of Minima and Maxima.
-tag: learn
----
-
-# MiniDapp Structure
-
-MiniDapps are simple web apps created using basic web languages (HTML, CSS, JavaScript) that use the Minima API to interact with the blockchain.
-
-MiniDapps are zip files (.mds.zip) with the following basic structure:
-
-- **dapp.conf** : Configuration file
-- **icon.png** : 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
-- **assets** : folder containing assets used by the MiniDapp
-
-All items must be zipped together and use the `.mds.zip` extension. Once zipped, it becomes a MiniDapp that can be installed onto any Minima node.
\ No newline at end of file
+---
+title: MiniDapp Structure
+description: MiniDapps are applications that run on top of Minima and Maxima.
+tag: development
+---
+
+MiniDapps are simple web apps created using basic web languages (HTML, CSS, JavaScript) that use the Minima API to interact with the blockchain.
+
+MiniDapps are zip files (.mds.zip) with the following basic structure:
+
+- **dapp.conf** : Configuration file
+- **icon.png** : 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
+- **assets** : folder containing assets used by the MiniDapp
+
+All items must be zipped together and use the `.mds.zip` extension. Once zipped, it becomes a MiniDapp that can be installed onto any Minima node.
diff --git a/content/docs/development/react-minidapp.mdx b/content/docs/development/react-minidapp.mdx
index 66a3063..53ac539 100644
--- a/content/docs/development/react-minidapp.mdx
+++ b/content/docs/development/react-minidapp.mdx
@@ -1,294 +1,292 @@
----
-title: React MiniDapp
-description: Learn how to create a MiniDapp using React
-tag: development
----
-
-In this tutorial, we will build a MiniDapp using React.
-
-## Pre-requisites
-
-- Node.js https://nodejs.org/en/download/
-- A Code Editor, we recommend Visual Studio code https://code.visualstudio.com/
-- A running Minima node
-- Download the create-react-minidapp boilerplate [here](https://github.com/minima-global/awesome-minima/tree/main/boilerplates/react/create-react-minidapp)
-- Download the latest mds.js file [here](https://github.com/minima-global/Minima/blob/master/mds/mds.js)
-
-## Getting Started with Create Minima App
-
-This boilerplate has been created with `Create React App`. You can use this boilerplate to build Minima MiniDapps.
-
-To create your application, unzip and the open the folder in your code editor. We will edit the files in the `/src` folder.
-
-If you need some guidance, please follow the [Balance tutorial](/docs/buildonminima/dapptutorial/reactminidapp#balance-tutorial) below.
-
-## How to build and install your app
-
-To build your app, open the Terminal and run the following commands in the `create-minima-app` directory:
-
-```bash title="Terminal"
-npm i
-```
-
-and then run
-
-```bash title="Terminal"
-npm run build
-```
-
-Once the app has been built, you can run the following to create a **my-minima-app.mds.zip** file in the `/minidapp` folder. This is the zipped minidapp that can be installed onto a node.
-
-```bash title="Terminal"
-npm run zip
-```
-
-### Installing on a Desktop node
-
-### Installing on a Desktop node
-
-1. Login to Minima by going to `https://localhost:9003` (9003 is the default MiniDapp System port). Use the password you set when starting the node or run `mds` in the Minima Terminal to check the password.
-
-2. Once logged in, click on the `+` in the top right, locate your **my-minima-app.mds.zip** zip file and click the `install` button. Your app should be installed.
-
-3. Click on your app to open it.
-
-### Installing on Android
-
-Either connect to your Android node using the Desktop connect feature and continue to install the MiniDapp as above, or transfer your app to your phone's storage and open the Minima app.
-
-1. Click on the `+` button at the top right of the screen.
-
-2. Locate and select the zip file on your phone and tap install.
-
-You should now see your app in the list. Tap on your app to open it.
-
-## Do I have to reinstall after every change?
-
-No, we have a solution that allows you to get around the issue to take advantage of `Create React App`'s automatic reloading on file changes.
-
-1. Ensure you have installed the app using the instructions above on desktop
-
-2. Duplicate the `.env.example` file and rename it to `.env` (this is your project root)
-
-3. Configure the environment values, you can leave everything default unless you are running Minima on a custom port. If connecting to a phone node, change the IP address to that as shown in Settings > Desktop Connect in your Minima app.
-
-4. Open your MiniDapp on Desktop, your url will look something like: `https://127.0.0.1:9003/{APP_ID}/index.html?uid=YOUR_UID`
-
-5. Copy the value at the end where YOUR_UID is in the URL e.g. `0xD497A626EF65C24417D4F7AE0CC48289BCB1062FB9763D47A20326984E099299`
-
-6. Replace `REACT_APP_DEBUG_UID` in the env file with the uid you copied
-
-7. Ensure the following code is included in **mds.js**
-
-```javascript title="mds.js"
-// env overrides
-if (window.DEBUG) {
- host = window.DEBUG_HOST
- port = Math.floor(window.DEBUG_PORT)
- MDS.minidappuid = window.DEBUG_UID
-}
-```
-
-the above code should be added directly below this existing code
-
-```javascript title="mds.js"
-//HARD SET if debug mode - running from a file
-if (MDS.DEBUG_HOST != null) {
- MDS.log("DEBUG Settings Found..")
- host = MDS.DEBUG_HOST
- port = MDS.DEBUG_PORT
-}
-```
-
-8. From the Terminal, run `npm run start`
-
-9. Edit `/src/App.jsx` and the browser window will automatically reload and should be connected to Minima
-
-## Balance Tutorial
-
-### Showing the balance with the Create Minima App
-
-Let's dive into a short tutorial that will show you how to show the balance of your wallet in the app.
-
-Open `/src/App.jsx`, this is the main application file.
-
-The first thing we have to do is call the MDS `balance` command. The full list of commands can be found [here](/docs/userguides/usingyournode/terminal_commands).
-
-The first step is to create a new component file, lets call it `Balance.jsx` in the `/src` folder.
-
-```jsx title="Balance.jsx"
-import React from "react"
-
-const Balance = () => {
- return
Balance Tutorial
-}
-
-export default Balance
-```
-
-Now let's import this component in our `App.jsx`.
-
-We need to add `import Balance from './Balance';` and `` in the return, feel free to put it anywhere you like, we have just put it after the `
- )
-}
-
-export default App
-```
-
-You should now see `Balance Tutorial` printed in the browser window.
-
-Now let's go back to the `/src/Balance.jsx` and add the following inside `const Balance`:
-
-```jsx
-import React from "react"
-
-const Balance = () => {
- const getBalance = React.useCallback(() => { // [!code highlight]
- window.MDS.cmd("balance", function (balance) { // [!code highlight]
- console.log(balance.response) // [!code highlight]
- }) // [!code highlight]
- }, []) // [!code highlight]
-
- return
Balance Tutorial
-}
-
-export default Balance
-```
-
-`React.useCallback` ensures the function is not re-run unless one of the dependencies change, you can read more about it in the React documentation: https://react.dev/reference/react/useCallback
-
-
-To run our function we need to add a `useEffect`, this is a function that is called when the component is rendered to the screen.
-
-```jsx
-import React from 'react';
-
-const Balance = () => {
- const getBalance = React.useCallback(() => {
- window.MDS.cmd('balance', function (balance) {
- console.log(balance.response);
- })
- }, []);
-
- React.useEffect(() => { // [!code highlight]
- getBalance(); // [!code highlight]
- }, [getBalance]); // [!code highlight]
-
- return
Balance Tutorial
-}
-
-export default Balance;
-```
-
-Now go to the browser and open the developer tools, open the `Console` tab and reload the page to refresh the logs. You should see an array being printed to the logs.
-
-```json
-[{
- coins: "1",
- confirmed: "100",
- sendable: "100",
- token: "Minima",
- tokenid: "0x00",
- total: "1000000000",
- unconfirmed: "0"
-}]
-```
-
-Now we need to update our component so that we can store the balance for it to show up on the screen, we can use `React.useState` for this.
-
-```jsx
-import React from 'react';
-
-const Balance = () => {
- const [balance, setBalance] = React.useState(null); // [!code highlight]
-
- const getBalance = React.useCallback(() => {
- window.MDS.cmd('balance', function (balance) {
- console.log(balance.response);
- })
- }, []);
-
- React.useEffect(() => {
- getBalance();
- }, [getBalance]);
-
- return
Balance Tutorial
-}
-
-export default Balance;
-```
- `React.useState` allows us to create a value that will cause React to re-render when the value changes.
- We can use `setBalance` in this case to change the value of `balance`.
-
-
-Now let's remove the `console.log` and use the setter that we have just created
-
-```jsx
-import React from 'react';
-const Balance = () => {
- const [balance, setBalance] = React.useState(null);
-
- const getBalance = React.useCallback(() => {
- window.MDS.cmd('balance', function (balance) {
- if (balance.response) { // [!code highlight]
- const minimaToken = balance.response.find(token => token.token === 'Minima'); // [!code highlight]
- setBalance(minimaToken.confirmed); // [!code highlight]
- }
- })
- }, []);
-
- React.useEffect(() => {
- getBalance();
- }, [getBalance]);
-
- return
Balance Tutorial
-}
-
-export default Balance;
-```
-
-Now we can use the balance state to print the value to the screen:
-
-```jsx
-import React from 'react';
-
-const Balance = () => {
- const [balance, setBalance] = React.useState(null);
-
- const getBalance = React.useCallback(() => {
- window.MDS.cmd('balance', function (balance) {
- if (balance.response) {
- const minimaToken = balance.response.find(token => token.token === 'Minima');
- setBalance(minimaToken.confirmed);
- }
- })
- }, []);
-
- React.useEffect(() => {
- getBalance();
- }, [getBalance]);
-
- return
Balance Tutorial Your confirmed balance is: {balance}
// [!code highlight]
-}
-
-export default Balance;
-```
+---
+title: React MiniDapp
+description: Learn how to create a MiniDapp using React
+tag: development
+---
+
+In this tutorial, we will build a MiniDapp using React.
+
+## Pre-requisites
+
+- Node.js https://nodejs.org/en/download/
+- A Code Editor, we recommend Visual Studio code https://code.visualstudio.com/
+- A running Minima node
+- Download the create-react-minidapp boilerplate [here](https://github.com/minima-global/awesome-minima/tree/main/boilerplates/react/create-react-minidapp)
+- Download the latest mds.js file [here](https://github.com/minima-global/Minima/blob/master/mds/mds.js)
+
+## Getting Started with Create Minima App
+
+This boilerplate has been created with `Create React App`. You can use this boilerplate to build Minima MiniDapps.
+
+To create your application, unzip and the open the folder in your code editor. We will edit the files in the `/src` folder.
+
+If you need some guidance, please follow the **Balance tutorial** below.
+
+## How to build and install your app
+
+To build your app, open the Terminal and run the following commands in the `create-minima-app` directory:
+
+```bash title="Terminal"
+npm i
+```
+
+and then run
+
+```bash title="Terminal"
+npm run build
+```
+
+Once the app has been built, you can run the following to create a **my-minima-app.mds.zip** file in the `/minidapp` folder. This is the zipped minidapp that can be installed onto a node.
+
+```bash title="Terminal"
+npm run zip
+```
+
+### Installing on a Desktop node
+
+1. Login to Minima by going to `https://localhost:9003` (9003 is the default MiniDapp System port). Use the password you set when starting the node or run `mds` in the Minima Terminal to check the password.
+
+2. Once logged in, click on the `+` in the top right, locate your **my-minima-app.mds.zip** zip file and click the `install` button. Your app should be installed.
+
+3. Click on your app to open it.
+
+### Installing on Android
+
+Either connect to your Android node using the Desktop connect feature and continue to install the MiniDapp as above, or transfer your app to your phone's storage and open the Minima app.
+
+1. Click on the `+` button at the top right of the screen.
+
+2. Locate and select the zip file on your phone and tap install.
+
+You should now see your app in the list. Tap on your app to open it.
+
+## Do I have to reinstall after every change?
+
+No, we have a solution that allows you to get around the issue to take advantage of `Create React App`'s automatic reloading on file changes.
+
+1. Ensure you have installed the app using the instructions above on desktop
+
+2. Duplicate the `.env.example` file and rename it to `.env` (this is your project root)
+
+3. Configure the environment values, you can leave everything default unless you are running Minima on a custom port. If connecting to a phone node, change the IP address to that as shown in Settings > Desktop Connect in your Minima app.
+
+4. Open your MiniDapp on Desktop, your url will look something like: `https://127.0.0.1:9003/{APP_ID}/index.html?uid=YOUR_UID`
+
+5. Copy the value at the end where YOUR_UID is in the URL e.g. `0xD497A626EF65C24417D4F7AE0CC48289BCB1062FB9763D47A20326984E099299`
+
+6. Replace `REACT_APP_DEBUG_UID` in the env file with the uid you copied
+
+7. Ensure the following code is included in **mds.js**
+
+```javascript title="mds.js"
+// env overrides
+if (window.DEBUG) {
+ host = window.DEBUG_HOST
+ port = Math.floor(window.DEBUG_PORT)
+ MDS.minidappuid = window.DEBUG_UID
+}
+```
+
+the above code should be added directly below this existing code
+
+```javascript title="mds.js"
+//HARD SET if debug mode - running from a file
+if (MDS.DEBUG_HOST != null) {
+ MDS.log("DEBUG Settings Found..")
+ host = MDS.DEBUG_HOST
+ port = MDS.DEBUG_PORT
+}
+```
+
+8. From the Terminal, run `npm run start`
+
+9. Edit `/src/App.jsx` and the browser window will automatically reload and should be connected to Minima
+
+## Balance Tutorial
+
+### Showing the balance with the Create Minima App
+
+Let's dive into a short tutorial that will show you how to show the balance of your wallet in the app.
+
+Open `/src/App.jsx`, this is the main application file.
+
+The first thing we have to do is call the MDS `balance` command. The full list of commands can be found [here](/docs/development/terminal-commands).
+
+The first step is to create a new component file, lets call it `Balance.jsx` in the `/src` folder.
+
+```jsx title="Balance.jsx"
+import React from "react"
+
+const Balance = () => {
+ return
Balance Tutorial
+}
+
+export default Balance
+```
+
+Now let's import this component in our `App.jsx`.
+
+We need to add `import Balance from './Balance';` and `` in the return, feel free to put it anywhere you like, we have just put it after the `
+ )
+}
+
+export default App
+```
+
+You should now see `Balance Tutorial` printed in the browser window.
+
+Now let's go back to the `/src/Balance.jsx` and add the following inside `const Balance`:
+
+```jsx
+import React from "react"
+
+const Balance = () => {
+ const getBalance = React.useCallback(() => { // [!code highlight]
+ window.MDS.cmd("balance", function (balance) { // [!code highlight]
+ console.log(balance.response) // [!code highlight]
+ }) // [!code highlight]
+ }, []) // [!code highlight]
+
+ return
Balance Tutorial
+}
+
+export default Balance
+```
+
+`React.useCallback` ensures the function is not re-run unless one of the dependencies change, you can read more about it in the React documentation: https://react.dev/reference/react/useCallback
+
+
+To run our function we need to add a `useEffect`, this is a function that is called when the component is rendered to the screen.
+
+```jsx
+import React from 'react';
+
+const Balance = () => {
+ const getBalance = React.useCallback(() => {
+ window.MDS.cmd('balance', function (balance) {
+ console.log(balance.response);
+ })
+ }, []);
+
+ React.useEffect(() => { // [!code highlight]
+ getBalance(); // [!code highlight]
+ }, [getBalance]); // [!code highlight]
+
+ return
Balance Tutorial
+}
+
+export default Balance;
+```
+
+Now go to the browser and open the developer tools, open the `Console` tab and reload the page to refresh the logs. You should see an array being printed to the logs.
+
+```json
+[{
+ coins: "1",
+ confirmed: "100",
+ sendable: "100",
+ token: "Minima",
+ tokenid: "0x00",
+ total: "1000000000",
+ unconfirmed: "0"
+}]
+```
+
+Now we need to update our component so that we can store the balance for it to show up on the screen, we can use `React.useState` for this.
+
+```jsx
+import React from 'react';
+
+const Balance = () => {
+ const [balance, setBalance] = React.useState(null); // [!code highlight]
+
+ const getBalance = React.useCallback(() => {
+ window.MDS.cmd('balance', function (balance) {
+ console.log(balance.response);
+ })
+ }, []);
+
+ React.useEffect(() => {
+ getBalance();
+ }, [getBalance]);
+
+ return
Balance Tutorial
+}
+
+export default Balance;
+```
+ `React.useState` allows us to create a value that will cause React to re-render when the value changes.
+ We can use `setBalance` in this case to change the value of `balance`.
+
+
+Now let's remove the `console.log` and use the setter that we have just created
+
+```jsx
+import React from 'react';
+const Balance = () => {
+ const [balance, setBalance] = React.useState(null);
+
+ const getBalance = React.useCallback(() => {
+ window.MDS.cmd('balance', function (balance) {
+ if (balance.response) { // [!code highlight]
+ const minimaToken = balance.response.find(token => token.token === 'Minima'); // [!code highlight]
+ setBalance(minimaToken.confirmed); // [!code highlight]
+ }
+ })
+ }, []);
+
+ React.useEffect(() => {
+ getBalance();
+ }, [getBalance]);
+
+ return
Balance Tutorial
+}
+
+export default Balance;
+```
+
+Now we can use the balance state to print the value to the screen:
+
+```jsx
+import React from 'react';
+
+const Balance = () => {
+ const [balance, setBalance] = React.useState(null);
+
+ const getBalance = React.useCallback(() => {
+ window.MDS.cmd('balance', function (balance) {
+ if (balance.response) {
+ const minimaToken = balance.response.find(token => token.token === 'Minima');
+ setBalance(minimaToken.confirmed);
+ }
+ })
+ }, []);
+
+ React.useEffect(() => {
+ getBalance();
+ }, [getBalance]);
+
+ return
Balance Tutorial Your confirmed balance is: {balance}
// [!code highlight]
+}
+
+export default Balance;
+```
diff --git a/content/docs/development/layer1/simple-txn.mdx b/content/docs/development/simple-txn.mdx
similarity index 96%
rename from content/docs/development/layer1/simple-txn.mdx
rename to content/docs/development/simple-txn.mdx
index e1dd485..0fa621a 100644
--- a/content/docs/development/layer1/simple-txn.mdx
+++ b/content/docs/development/simple-txn.mdx
@@ -1,688 +1,688 @@
----
-title: Simple Transaction
-description: Learn how to create a simple transaction on Minima
-tag: development
----
-
-## Purpose
-
-The purpose of this tutorial is to demonstrate how to manually construct a simple transaction on Minima.
-
-We recommend going through it a couple of times to make sure you understand the process and before moving onto more complicated tutorials.
-
-## You will learn
-
-In this tutorial you will learn:
-
-- How to manually construct a valid transaction
-- How to add inputs and outputs to a transaction
-- How to add a burn to a transaction
-- How to sign and post a transaction on-chain
-
-## Pre-requisites
-
-You should have an understanding of:
-
-- How the UTxO model works
-- How the `send` command works
-
-You will need:
-
-- The latest [minima.jar](https://github.com/minima-global/Minima/raw/master/jar/minima.jar) downloaded
-- Two test nodes - one to send coins and one to receive coins.
- One of these nodes should be started from Genesis so you have 1 billion coins to play with.
-
-There are no other dependencies.
-
-## Tutorial
-
-### 1. Start two test nodes
-
-To set up your two test nodes, open two new command prompt sessions and change directory into the folder where your minima.jar file is.
-
-Follow the guidance [here](/docs/buildonminima/dapptutorial/startaprivatenode) to start the nodes.
-
-### 2. Create a transaction
-
-> To get more detail on any of the commands used in this tutorial, you can use `help command:` e.g. `help command:txncreate`.
-> The coinids and addresses in this tutorial will differ to yours.
-
-On node 1, create a transaction called `simpletxn`.
-
-```bash title="Terminal Node 1"
-txncreate id:simpletxn
-```
-
-You will see the following output:
-
-```bash title="Output"
-{
- "command":"txncreate",
- "params":{
- "id":"simpletxn"
- },
- "status":true,
- "pending":false,
- "response":{
- "id":"simpletxn",
- "transaction":{
- "inputs":[],
- "outputs":[],
- "state":[],
- "linkhash":"0x00",
- "transactionid":"0xAB728B0D4A215A520DAA3DB2A618CBD24AB3A3A36293B07FA2EF55CBBD765613"
- },
- "witness":{
- "signatures":[],
- "mmrproofs":[],
- "scripts":[]
- },
- "outputcoindata":[]
- }
-}
-```
-
-We have created the shell of a transaction. As you can see there are no inputs or outputs for this transaction yet.
-
-### 3. Add an input to the transaction
-
-We need a coin to use as an input to the transaction. The coin must be greater than or equal to the value you wish to send.
-
-If you don't have a single coin which is enough to cover the amount you wish to send, you will need to add more than one coin as an input.
-
-To see which coins you have available, use the `coins` command.
-
-```bash title="Terminal Node 1"
-coins
-```
-
-Doing this on node 1, we get the following output:
-
-```bash title="Output"
-{
- "command":"coins",
- "status":true,
- "pending":false,
- "response":[{
- "coinid":"0x9ADD6E64E7D4DE63F4472C730ECEDDA8BC37C2F1A906E126F81C584EF172CF3A",
- "amount":"1000000000",
- "address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2",
- "miniaddress":"MxG083BHZRQW4DW3ZS0GSM19Z4VM7P5M53JP3C6JCGAPJ16J9ZTKEGCZA4GJAEZ",
- "tokenid":"0x00",
- "token":null,
- "storestate":true,
- "state":[],
- "spent":false,
- "mmrentry":"1",
- "created":"1"
- }]
-}
-```
-
-We have one coin, the Genesis coin, worth 1 billion Minima.
-
-The coinid is the unique identifier for the coin and this is what we will use to add this coin as the input to our transaction.
-
-On node 1, add this coin as an input to our `simpletxn`:
-
-```bash title="Terminal Node 1"
-txninput id:simpletxn coinid:0x9ADD6E64E7D4DE63F4472C730ECEDDA8BC37C2F1A906E126F81C584EF172CF3A
-```
-
-We get the following output:
-
-```bash title="Output"
-{
- "command":"txninput",
- "params":{
- "id":"simpletxn",
- "coinid":"0x9ADD6E64E7D4DE63F4472C730ECEDDA8BC37C2F1A906E126F81C584EF172CF3A"
- },
- "status":true,
- "pending":false,
- "response":{
- "id":"simpletxn",
- "transaction":{
- "inputs":[{
- "coinid":"0x9ADD6E64E7D4DE63F4472C730ECEDDA8BC37C2F1A906E126F81C584EF172CF3A",
- "amount":"1000000000",
- "address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2",
- "miniaddress":"MxG083BHZRQW4DW3ZS0GSM19Z4VM7P5M53JP3C6JCGAPJ16J9ZTKEGCZA4GJAEZ",
- "tokenid":"0x00",
- "token":null,
- "storestate":true,
- "state":[],
- "spent":false,
- "mmrentry":"1",
- "created":"1"
- }],
- "outputs":[],
- "state":[],
- "linkhash":"0x00",
- "transactionid":"0xFFF38373DE1EA1FAD6B427F8536FCCA0C3CBF81CB26EDA2F66A48D2ADB84CF86"
- },
- "witness":{
- "signatures":[],
- "mmrproofs":[],
- "scripts":[]
- },
- "outputcoindata":[]
- }
-}
-```
-
-As you can see, we have one input now and no outputs.
-
-### 4. Add outputs to the transaction
-
-Obviously each transaction needs at least 1 output.
-
-Unless you have a coin which is the exact amount you wish to send, a simple transaction would usually take 2 outputs, one to the recipient and one back to the sender with the change (when the value of the input coin is greater than the amount you want to send).
-
-Let's send 10 Minima to node 2.
-
-We need to know a wallet address of node 2, so on node 2 do:
-
-```bash title="Terminal Node 2"
-getaddress
-```
-
-You will see the output:
-
-```bash title="Output"
-{
- "command":"getaddress",
- "status":true,
- "pending":false,
- "response":{
- "script":"RETURN SIGNEDBY(0x69BF3B984241BB4ADC48517A9F4A94DF25007D7F69E2A376CE939FC45E6A9D0C)",
- "address":"0x1577381B2E4E160BD058F73692A73BBF585B9A68383AD8A55979E7C614A17095",
- "miniaddress":"MxG080YESS1MBWE2Z5T0M7N6Q9AEETVB1DPKQ1Z7BCAAMBPSV3198BGWNB9DRW8",
- "simple":true,
- "default":true,
- "publickey":"0x69BF3B984241BB4ADC48517A9F4A94DF25007D7F69E2A376CE939FC45E6A9D0C",
- "track":true
- }
-}
-```
-
-This is one of node 2's default wallet addresses (of which each node has 64).
-
-Each address has a 0x format (`address`) and an Mx format (`miniaddress`), either can be used to send coins to.
-
-Each address also has a script and public key.
-
-When we send our 10 Minima to this address `MxG080YESS1MBWE2Z5T0M7N6Q9AEETVB1DPKQ1Z7BCAAMBPSV3198BGWNB9DRW8`, node 2 will get a new coin, worth 10 Minima, at this address.
-
-The `script` simply means - for any coins at this address, the coin can only be spent if this script returns `true`.
-
-#### 4a. Output to recipient
-
-Let's add an output to our transaction, sending 10 Minima to this address.
-
-Back on node 1, do:
-
-```bash title="Terminal Node 1"
-txnoutput id:simpletxn amount:10 address:MxG080YESS1MBWE2Z5T0M7N6Q9AEETVB1DPKQ1Z7BCAAMBPSV3198BGWNB9DRW8
-```
-
-Note, we also could have used `address:0x1577381B2E4E160BD058F73692A73BBF585B9A68383AD8A55979E7C614A17095`.
-
-My command output:
-
-```bash title="Output"
-{
- "command":"txnoutput",
- "params":{
- "id":"simpletxn",
- "amount":"10",
- "address":"MxG080YESS1MBWE2Z5T0M7N6Q9AEETVB1DPKQ1Z7BCAAMBPSV3198BGWNB9DRW8"
- },
- "status":true,
- "pending":false,
- "response":{
- "id":"simpletxn",
- "transaction":{
- "inputs":[{
- "coinid":"0x9ADD6E64E7D4DE63F4472C730ECEDDA8BC37C2F1A906E126F81C584EF172CF3A",
- "amount":"1000000000",
- "address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2",
- "miniaddress":"MxG083BHZRQW4DW3ZS0GSM19Z4VM7P5M53JP3C6JCGAPJ16J9ZTKEGCZA4GJAEZ",
- "tokenid":"0x00",
- "token":null,
- "storestate":true,
- "state":[],
- "spent":false,
- "mmrentry":"1",
- "created":"1"
- }],
- "outputs":[{
- "coinid":"0x9AA61717A9190419F4C617AF10FC5A014621E860767841118342ABEA9F7F8D4E",
- "amount":"10",
- "address":"0x1577381B2E4E160BD058F73692A73BBF585B9A68383AD8A55979E7C614A17095",
- "miniaddress":"MxG080YESS1MBWE2Z5T0M7N6Q9AEETVB1DPKQ1Z7BCAAMBPSV3198BGWNB9DRW8",
- "tokenid":"0x00",
- "token":null,
- "storestate":true,
- "state":[],
- "spent":false,
- "mmrentry":"0",
- "created":"0"
- }],
- "state":[],
- "linkhash":"0x00",
- "transactionid":"0x210C3C216C12F59C3BDDB9F166F05C25B58178BFC4FB15FCFB464533056EFB57"
- },
- "witness":{
- "signatures":[],
- "mmrproofs":[],
- "scripts":[]
- },
- "outputcoindata":["0x000000209AA61717A9190419F4C617AF10FC5A014621E860767841118342ABEA9F7F8D4E000000201577381B2E4E160BD058F73692A73BBF585B9A68383AD8A55979E7C614A1709500010A00000001000100010000000001000000010000010000"]
- }
-}
-```
-
-As you can see, we now have 1 input and 1 output.
-
-You can check the transaction using
-
-```bash title="Terminal Node 1"
-txncheck id:simpletxn
-```
-
-Command output:
-
-```bash title="Output"
-Minima @ ... : Wrong Number of MMR Proofs Inputs:1 MMRProofs:0 @ 0x00
-{
- "command":"txncheck",
- "params":{
- "id":"simpletxn"
- },
- "status":true,
- "pending":false,
- "response":{
- "coins":[{
- "tokenid":"0x00",
- "input":"1000000000",
- "output":"10",
- "difference":"999999990"
- }],
- "tokens":1,
- "inputs":1,
- "outputs":1,
- "burn":"999999990",
- "validamounts":true,
- "signatures":0,
- "valid":{
- "basic":false,
- "signatures":true,
- "mmrproofs":true,
- "scripts":true
- }
- }
-}
-```
-
-You will notice the burn amount - 999999990!
-
-The burn is calculated as the difference between the inputs and outputs, so if we don't specify what to do with the remaining 999999990 Minima from the input coin, it will be burned!
-
-#### 4b. Change Output
-
-In this tutorial we won't include a burn (we will assume there is plenty of block space available), so we need to define a second output to return the 999999990 Minima to the sender (node 1).
-
-We can either send it back to the same address that the input coin came from on node 1 i.e. `0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2` or send it back to a different wallet address (which you may want to do for increased privacy).
-
-To find a different wallet address, you can do `getaddress` on node 1.
-
-For this example, I will send the change back to the same address. The miniaddress (Mx format) would also work.
-
-Add the change output on node 1:
-
-```bash title="Terminal Node 1"
-txnoutput id:simpletxn amount:999999990 address:0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2
-```
-
-My command output:
-
-```bash title="Output"
-{
- "command":"txnoutput",
- "params":{
- "id":"simpletxn",
- "amount":"999999990",
- "address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2"
- },
- "status":true,
- "pending":false,
- "response":{
- "id":"simpletxn",
- "transaction":{
- "inputs":[{
- "coinid":"0x9ADD6E64E7D4DE63F4472C730ECEDDA8BC37C2F1A906E126F81C584EF172CF3A",
- "amount":"1000000000",
- "address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2",
- "miniaddress":"MxG083BHZRQW4DW3ZS0GSM19Z4VM7P5M53JP3C6JCGAPJ16J9ZTKEGCZA4GJAEZ",
- "tokenid":"0x00",
- "token":null,
- "storestate":true,
- "state":[],
- "spent":false,
- "mmrentry":"1",
- "created":"1"
- }],
- "outputs":[{
- "coinid":"0x9AA61717A9190419F4C617AF10FC5A014621E860767841118342ABEA9F7F8D4E",
- "amount":"10",
- "address":"0x1577381B2E4E160BD058F73692A73BBF585B9A68383AD8A55979E7C614A17095",
- "miniaddress":"MxG080YESS1MBWE2Z5T0M7N6Q9AEETVB1DPKQ1Z7BCAAMBPSV3198BGWNB9DRW8",
- "tokenid":"0x00",
- "token":null,
- "storestate":true,
- "state":[],
- "spent":false,
- "mmrentry":"0",
- "created":"0"
- },
- {
- "coinid":"0xF25DFF89E78E12926C83E91C64279380BF2C34C4EE5971F015A43614214A6FF8",
- "amount":"999999990",
- "address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2",
- "miniaddress":"MxG083BHZRQW4DW3ZS0GSM19Z4VM7P5M53JP3C6JCGAPJ16J9ZTKEGCZA4GJAEZ",
- "tokenid":"0x00",
- "token":null,
- "storestate":true,
- "state":[],
- "spent":false,
- "mmrentry":"0",
- "created":"0"
- }],
- "state":[],
- "linkhash":"0x00",
- "transactionid":"0x43D318ACFD77B898DEB7C8F7FEACA3A46BEED0FF35A07B99125238358FEF8B47"
- },
- "witness":{
- "signatures":[],
- "mmrproofs":[],
- "scripts":[]
- },
- "outputcoindata":["0x000000209AA61717A9190419F4C617AF10FC5A014621E860767841118342ABEA9F7F8D4E000000201577381B2E4E160BD058F73692A73BBF585B9A68383AD8A55979E7C614A1709500010A00000001000100010000000001000000010000010000",
- "0x00000020F25DFF89E78E12926C83E91C64279380BF2C34C4EE5971F015A43614214A6FF8000000206B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC200043B9AC9F600000001000100010000000001000000010000010000"]
- }
-}
-```
-
-Now we have 1 input (1 billion Minima) and 2 outputs, one to node 2 (10 Minima) and one back to node 1 (999999990 Minima).
-
-If we do `txncheck id:simpletxn` again, we now have no Burn:
-
-```bash title="Terminal Node 1"
-txncheck id:simpletxn
-```
-
-```bash title="Output"
-Minima @ ... : Wrong Number of MMR Proofs Inputs:1 MMRProofs:0 @ 0x00
-{
- "command":"txncheck",
- "params":{
- "id":"simpletxn"
- },
- "status":true,
- "pending":false,
- "response":{
- "coins":[{
- "tokenid":"0x00",
- "input":"1000000000",
- "output":"1000000000",
- "difference":"0"
- }],
- "tokens":1,
- "inputs":1,
- "outputs":2,
- "burn":"0",
- "validamounts":true,
- "signatures":0,
- "valid":{
- "basic":false,
- "signatures":true,
- "mmrproofs":true,
- "scripts":true
- }
- }
-}
-```
-
-You will also see after we added the second output that the `Witness` data is empty:
-
-```bash title="Output"
- "witness":{
- "signatures":[],
- "mmrproofs":[],
- "scripts":[]
- },
-```
-
-The Witness holds the signatures, coin proofs and scripts for a transaction - proving a transaction's validity.
-
-Let's complete the Witness data.
-
-### 5. Sign the transaction
-
-Since this is a simple transaction (no custom scripts) we can sign the transaction using
-
-```bash title="Terminal Node 1"
-txnsign id:simpletxn publickey:auto
-```
-
-Command output:
-
-```bash title="Output"
-{
- "command":"txnsign",
- "params":{
- "id":"simpletxn",
- "publickey":"auto"
- },
- "status":true,
- "pending":false,
- "response":{
- "keys":["0x188A3462BDF4E4238C7097337B6F897ECF806655884FE00D3CFBEEF0C47C6AFD"]
- }
-}
-```
-
-The key shown here is the public key used to sign the transaction.
-
-Earlier, I mentioned that each address also has a script and public key.
-
-Let's check the script associated with our input coin address using:
-
-```bash title="Terminal Node 1"
-scripts address:0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2
-```
-
-Command output:
-
-```bash title="Output"
-{
- "command":"scripts",
- "params":{
- "address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2"
- },
- "status":true,
- "pending":false,
- "response":{
- "script":"RETURN SIGNEDBY(0x188A3462BDF4E4238C7097337B6F897ECF806655884FE00D3CFBEEF0C47C6AFD)",
- "address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2",
- "miniaddress":"MxG083BHZRQW4DW3ZS0GSM19Z4VM7P5M53JP3C6JCGAPJ16J9ZTKEGCZA4GJAEZ",
- "simple":true,
- "default":true,
- "publickey":"0x188A3462BDF4E4238C7097337B6F897ECF806655884FE00D3CFBEEF0C47C6AFD",
- "track":true
- }
-}
-```
-
-You can see the `publickey` here matches what our `txnsign` command returned.
-
-This tells us that when sending a coin which has this address, the script
-
-```
-RETURN SIGNEDBY(0x188A3462BDF4E4238C7097337B6F897ECF806655884FE00D3CFBEEF0C47C6AFD)
-```
-
-must return `TRUE`.
-
-This script reads:
-
-If this transaction is SIGNEDBY the public key `0x188A3462BDF4E4238C7097337B6F897ECF806655884FE00D3CFBEEF0C47C6AFD`, then return TRUE. Otherwise, return FALSE.
-
-If you do `txncheck id:simpletxn` again, you will see there is now 1 signature.
-
-If you do `txnlist id:simpletxn`, you will see a signature is now populated in the `Witness` section.
-
-However the mmrproofs and scripts are still empty.
-
-Command output from `txnlist id:simpletxn`:
-
-```bash title="Output"
-...
- "mmrproofs":[],
- "scripts":[]
-...
-```
-
-Let's add these now.
-
-### 6. Add the Coin proofs and Scripts
-
-Again, as this is a simple transaction, we can easily add the MMR proof for the input coin and the script using:
-
-```bash title="Terminal Node 1"
-txnbasics id:simpletxn
-```
-
-The command output will show you the full transaction and complete Witness, including the mmrproofs and scripts:
-
-```bash title="Output"
-...
- "mmrproofs":[{
- "coin":{
- "coinid":"0x9ADD6E64E7D4DE63F4472C730ECEDDA8BC37C2F1A906E126F81C584EF172CF3A",
- "amount":"1000000000",
- "address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2",
- "miniaddress":"MxG083BHZRQW4DW3ZS0GSM19Z4VM7P5M53JP3C6JCGAPJ16J9ZTKEGCZA4GJAEZ",
- "tokenid":"0x00",
- "token":null,
- "storestate":true,
- "state":[],
- "spent":false,
- "mmrentry":"1",
- "created":"1"
- },
- "proof":{
- "blocktime":"235",
- "proof":[{
- "left":true,
- "data":{
- "data":"0xA53AD6A229F11DAD05FD0D9164F8EEE96501FA67ED9FEF7087EEA5C43E293357",
- "value":"0"
- }
- }],
- "prooflength":1
- }
- }],
- "scripts":[{
- "script":"RETURN SIGNEDBY(0x188A3462BDF4E4238C7097337B6F897ECF806655884FE00D3CFBEEF0C47C6AFD)",
- "address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2",
- "proof":{
- "blocktime":"0",
- "proof":[],
- "prooflength":0
- }
- }]
- },
- "outputcoindata":["0x000000209AA61717A9190419F4C617AF10FC5A014621E860767841118342ABEA9F7F8D4E000000201577381B2E4E160BD058F73692A73BBF585B9A68383AD8A55979E7C614A1709500010A00000001000100010000000001000000010000010000",
- "0x00000020F25DFF89E78E12926C83E91C64279380BF2C34C4EE5971F015A43614214A6FF8000000206B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC200043B9AC9F600000001000100010000000001000000010000010000"]
- }
-}
-```
-
-By adding the coin's MMR proof, when all other nodes in the network receive this transaction, they will be able to verify that our input coin is valid and unspent (i.e. We are not attempting a double spend!)
-
-By adding the script, they will be able to execute the script and verify that it returns TRUE - since we have signed the transaction with the right public key.
-
-Now when you do `txncheck id:simpletxn`, you won't get the `Wrong number of MMR Proofs` message and you will see everything is now valid!
-
-```bash title="Output"
-...
- "valid":{
- "basic":true,
- "signatures":true,
- "mmrproofs":true,
- "scripts":true
-...
-```
-
-### 7. Post the transaction
-
-We are ready to post the transaction!
-
-All the hard work is done, now we just need to post the transaction - this will propagate it to the entire Minima network who will validate it and then add it to a block!
-
-Still on node 1:
-
-```bash title="Terminal Node 1"
-txnpost id:simpletxn
-```
-
-Command output (node 1):
-
-```bash title="Output"
-ASYNC Transaction Mined : 0x00004D96A2FFDC5BFC00868627B6A9085ECDE489A83B5CD9A6B76A5FA58DFB3F
-You found a block! 530 0x00004D96A2FFDC5BFC00868627B6A9085ECDE489A83B5CD9A6B76A5FA58DFB3F
-NEW Spent Coin : {"coinid":"0x9ADD6E64E7D4DE63F4472C730ECEDDA8BC37C2F1A906E126F81C584EF172CF3A","amount":"1000000000","address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2","miniaddress":"MxG083BHZRQW4DW3ZS0GSM19Z4VM7P5M53JP3C6JCGAPJ16J9ZTKEGCZA4GJAEZ","tokenid":"0x00","token":null,"storestate":true,"state":[],"spent":true,"mmrentry":"1","created":"1"}
-NEW Unspent Coin : {"coinid":"0xF25DFF89E78E12926C83E91C64279380BF2C34C4EE5971F015A43614214A6FF8","amount":"999999990","address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2","miniaddress":"MxG083BHZRQW4DW3ZS0GSM19Z4VM7P5M53JP3C6JCGAPJ16J9ZTKEGCZA4GJAEZ","tokenid":"0x00","token":null,"storestate":true,"state":[],"spent":false,"mmrentry":"3","created":"530"}
-```
-
-On node 2, we can see it has received the Minima:
-
-```bash title="Terminal Node 2"
-NEW Unspent Coin : {"coinid":"0x9AA61717A9190419F4C617AF10FC5A014621E860767841118342ABEA9F7F8D4E","amount":"10","address":"0x1577381B2E4E160BD058F73692A73BBF585B9A68383AD8A55979E7C614A17095","miniaddress":"MxG080YESS1MBWE2Z5T0M7N6Q9AEETVB1DPKQ1Z7BCAAMBPSV3198BGWNB9DRW8","tokenid":"0x00","token":null,"storestate":true,"state":[],"spent":false,"mmrentry":"2","created":"530"}
-```
-
-So you can see the process:
-
-1. node 1 created a txpow unit containing the transaction
-2. node 1 mined the txpow unit
-3. the txpow unit became a block\*
-4. node 1 spent the 1 billion coin and received a new coin of 999999990
-5. node 2 received a new coin of 10
-
-\* It is important to note here that step 3 is not a given and in the main network, the block would most likely be found by a different node.
-
-Well done, you just manually constructed a transaction and sent it!
-
-##n Notes
-
-Alternative methods in this tutorial could have been:
-
-1. Instead of using `txnbasics id:simpletxn`, you could add the MMR proofs and script at the same time as adding the coin as an input with
-
-```bash title="Terminal Node 1"
-txninput id:simpletxn coinid:0x9ADD6E64E7D4DE63F4472C730ECEDDA8BC37C2F1A906E126F81C584EF172CF3A scriptmmr:true
-```
-
-2. Instead of using `txnbasics id:simpletxn`, you could do it in one step with:
-
-```bash title="Terminal Node 1"
-txnpost id:simpletxn auto:true
-```
-
-3. If you had more than one coin on node 1, you could add a burn at the `txnpost` step with:
-
-```bash title="Terminal Node 1"
-txnpost id:simpletxn burn:1
-```
+---
+title: Simple Transaction
+description: Learn how to create a simple transaction on Minima
+tag: development
+---
+
+## Purpose
+
+The purpose of this tutorial is to demonstrate how to manually construct a simple transaction on Minima.
+
+We recommend going through it a couple of times to make sure you understand the process and before moving onto more complicated tutorials.
+
+## You will learn
+
+In this tutorial you will learn:
+
+- How to manually construct a valid transaction
+- How to add inputs and outputs to a transaction
+- How to add a burn to a transaction
+- How to sign and post a transaction on-chain
+
+## Pre-requisites
+
+You should have an understanding of:
+
+- How the UTxO model works
+- How the `send` command works
+
+You will need:
+
+- The latest [minima.jar](https://github.com/minima-global/Minima/raw/master/jar/minima.jar) downloaded
+- Two test nodes - one to send coins and one to receive coins.
+ One of these nodes should be started from Genesis so you have 1 billion coins to play with.
+
+There are no other dependencies.
+
+## Tutorial
+
+### 1. Start two test nodes
+
+To set up your two test nodes, open two new command prompt sessions and change directory into the folder where your minima.jar file is.
+
+Follow the guidance [here](/docs/development/testnet-multiple) to start the nodes.
+
+### 2. Create a transaction
+
+> To get more detail on any of the commands used in this tutorial, you can use `help command:` e.g. `help command:txncreate`.
+> The coinids and addresses in this tutorial will differ to yours.
+
+On node 1, create a transaction called `simpletxn`.
+
+```bash title="Terminal Node 1"
+txncreate id:simpletxn
+```
+
+You will see the following output:
+
+```bash title="Output"
+{
+ "command":"txncreate",
+ "params":{
+ "id":"simpletxn"
+ },
+ "status":true,
+ "pending":false,
+ "response":{
+ "id":"simpletxn",
+ "transaction":{
+ "inputs":[],
+ "outputs":[],
+ "state":[],
+ "linkhash":"0x00",
+ "transactionid":"0xAB728B0D4A215A520DAA3DB2A618CBD24AB3A3A36293B07FA2EF55CBBD765613"
+ },
+ "witness":{
+ "signatures":[],
+ "mmrproofs":[],
+ "scripts":[]
+ },
+ "outputcoindata":[]
+ }
+}
+```
+
+We have created the shell of a transaction. As you can see there are no inputs or outputs for this transaction yet.
+
+### 3. Add an input to the transaction
+
+We need a coin to use as an input to the transaction. The coin must be greater than or equal to the value you wish to send.
+
+If you don't have a single coin which is enough to cover the amount you wish to send, you will need to add more than one coin as an input.
+
+To see which coins you have available, use the `coins` command.
+
+```bash title="Terminal Node 1"
+coins
+```
+
+Doing this on node 1, we get the following output:
+
+```bash title="Output"
+{
+ "command":"coins",
+ "status":true,
+ "pending":false,
+ "response":[{
+ "coinid":"0x9ADD6E64E7D4DE63F4472C730ECEDDA8BC37C2F1A906E126F81C584EF172CF3A",
+ "amount":"1000000000",
+ "address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2",
+ "miniaddress":"MxG083BHZRQW4DW3ZS0GSM19Z4VM7P5M53JP3C6JCGAPJ16J9ZTKEGCZA4GJAEZ",
+ "tokenid":"0x00",
+ "token":null,
+ "storestate":true,
+ "state":[],
+ "spent":false,
+ "mmrentry":"1",
+ "created":"1"
+ }]
+}
+```
+
+We have one coin, the Genesis coin, worth 1 billion Minima.
+
+The coinid is the unique identifier for the coin and this is what we will use to add this coin as the input to our transaction.
+
+On node 1, add this coin as an input to our `simpletxn`:
+
+```bash title="Terminal Node 1"
+txninput id:simpletxn coinid:0x9ADD6E64E7D4DE63F4472C730ECEDDA8BC37C2F1A906E126F81C584EF172CF3A
+```
+
+We get the following output:
+
+```bash title="Output"
+{
+ "command":"txninput",
+ "params":{
+ "id":"simpletxn",
+ "coinid":"0x9ADD6E64E7D4DE63F4472C730ECEDDA8BC37C2F1A906E126F81C584EF172CF3A"
+ },
+ "status":true,
+ "pending":false,
+ "response":{
+ "id":"simpletxn",
+ "transaction":{
+ "inputs":[{
+ "coinid":"0x9ADD6E64E7D4DE63F4472C730ECEDDA8BC37C2F1A906E126F81C584EF172CF3A",
+ "amount":"1000000000",
+ "address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2",
+ "miniaddress":"MxG083BHZRQW4DW3ZS0GSM19Z4VM7P5M53JP3C6JCGAPJ16J9ZTKEGCZA4GJAEZ",
+ "tokenid":"0x00",
+ "token":null,
+ "storestate":true,
+ "state":[],
+ "spent":false,
+ "mmrentry":"1",
+ "created":"1"
+ }],
+ "outputs":[],
+ "state":[],
+ "linkhash":"0x00",
+ "transactionid":"0xFFF38373DE1EA1FAD6B427F8536FCCA0C3CBF81CB26EDA2F66A48D2ADB84CF86"
+ },
+ "witness":{
+ "signatures":[],
+ "mmrproofs":[],
+ "scripts":[]
+ },
+ "outputcoindata":[]
+ }
+}
+```
+
+As you can see, we have one input now and no outputs.
+
+### 4. Add outputs to the transaction
+
+Obviously each transaction needs at least 1 output.
+
+Unless you have a coin which is the exact amount you wish to send, a simple transaction would usually take 2 outputs, one to the recipient and one back to the sender with the change (when the value of the input coin is greater than the amount you want to send).
+
+Let's send 10 Minima to node 2.
+
+We need to know a wallet address of node 2, so on node 2 do:
+
+```bash title="Terminal Node 2"
+getaddress
+```
+
+You will see the output:
+
+```bash title="Output"
+{
+ "command":"getaddress",
+ "status":true,
+ "pending":false,
+ "response":{
+ "script":"RETURN SIGNEDBY(0x69BF3B984241BB4ADC48517A9F4A94DF25007D7F69E2A376CE939FC45E6A9D0C)",
+ "address":"0x1577381B2E4E160BD058F73692A73BBF585B9A68383AD8A55979E7C614A17095",
+ "miniaddress":"MxG080YESS1MBWE2Z5T0M7N6Q9AEETVB1DPKQ1Z7BCAAMBPSV3198BGWNB9DRW8",
+ "simple":true,
+ "default":true,
+ "publickey":"0x69BF3B984241BB4ADC48517A9F4A94DF25007D7F69E2A376CE939FC45E6A9D0C",
+ "track":true
+ }
+}
+```
+
+This is one of node 2's default wallet addresses (of which each node has 64).
+
+Each address has a 0x format (`address`) and an Mx format (`miniaddress`), either can be used to send coins to.
+
+Each address also has a script and public key.
+
+When we send our 10 Minima to this address `MxG080YESS1MBWE2Z5T0M7N6Q9AEETVB1DPKQ1Z7BCAAMBPSV3198BGWNB9DRW8`, node 2 will get a new coin, worth 10 Minima, at this address.
+
+The `script` simply means - for any coins at this address, the coin can only be spent if this script returns `true`.
+
+#### 4a. Output to recipient
+
+Let's add an output to our transaction, sending 10 Minima to this address.
+
+Back on node 1, do:
+
+```bash title="Terminal Node 1"
+txnoutput id:simpletxn amount:10 address:MxG080YESS1MBWE2Z5T0M7N6Q9AEETVB1DPKQ1Z7BCAAMBPSV3198BGWNB9DRW8
+```
+
+Note, we also could have used `address:0x1577381B2E4E160BD058F73692A73BBF585B9A68383AD8A55979E7C614A17095`.
+
+My command output:
+
+```bash title="Output"
+{
+ "command":"txnoutput",
+ "params":{
+ "id":"simpletxn",
+ "amount":"10",
+ "address":"MxG080YESS1MBWE2Z5T0M7N6Q9AEETVB1DPKQ1Z7BCAAMBPSV3198BGWNB9DRW8"
+ },
+ "status":true,
+ "pending":false,
+ "response":{
+ "id":"simpletxn",
+ "transaction":{
+ "inputs":[{
+ "coinid":"0x9ADD6E64E7D4DE63F4472C730ECEDDA8BC37C2F1A906E126F81C584EF172CF3A",
+ "amount":"1000000000",
+ "address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2",
+ "miniaddress":"MxG083BHZRQW4DW3ZS0GSM19Z4VM7P5M53JP3C6JCGAPJ16J9ZTKEGCZA4GJAEZ",
+ "tokenid":"0x00",
+ "token":null,
+ "storestate":true,
+ "state":[],
+ "spent":false,
+ "mmrentry":"1",
+ "created":"1"
+ }],
+ "outputs":[{
+ "coinid":"0x9AA61717A9190419F4C617AF10FC5A014621E860767841118342ABEA9F7F8D4E",
+ "amount":"10",
+ "address":"0x1577381B2E4E160BD058F73692A73BBF585B9A68383AD8A55979E7C614A17095",
+ "miniaddress":"MxG080YESS1MBWE2Z5T0M7N6Q9AEETVB1DPKQ1Z7BCAAMBPSV3198BGWNB9DRW8",
+ "tokenid":"0x00",
+ "token":null,
+ "storestate":true,
+ "state":[],
+ "spent":false,
+ "mmrentry":"0",
+ "created":"0"
+ }],
+ "state":[],
+ "linkhash":"0x00",
+ "transactionid":"0x210C3C216C12F59C3BDDB9F166F05C25B58178BFC4FB15FCFB464533056EFB57"
+ },
+ "witness":{
+ "signatures":[],
+ "mmrproofs":[],
+ "scripts":[]
+ },
+ "outputcoindata":["0x000000209AA61717A9190419F4C617AF10FC5A014621E860767841118342ABEA9F7F8D4E000000201577381B2E4E160BD058F73692A73BBF585B9A68383AD8A55979E7C614A1709500010A00000001000100010000000001000000010000010000"]
+ }
+}
+```
+
+As you can see, we now have 1 input and 1 output.
+
+You can check the transaction using
+
+```bash title="Terminal Node 1"
+txncheck id:simpletxn
+```
+
+Command output:
+
+```bash title="Output"
+Minima @ ... : Wrong Number of MMR Proofs Inputs:1 MMRProofs:0 @ 0x00
+{
+ "command":"txncheck",
+ "params":{
+ "id":"simpletxn"
+ },
+ "status":true,
+ "pending":false,
+ "response":{
+ "coins":[{
+ "tokenid":"0x00",
+ "input":"1000000000",
+ "output":"10",
+ "difference":"999999990"
+ }],
+ "tokens":1,
+ "inputs":1,
+ "outputs":1,
+ "burn":"999999990",
+ "validamounts":true,
+ "signatures":0,
+ "valid":{
+ "basic":false,
+ "signatures":true,
+ "mmrproofs":true,
+ "scripts":true
+ }
+ }
+}
+```
+
+You will notice the burn amount - 999999990!
+
+The burn is calculated as the difference between the inputs and outputs, so if we don't specify what to do with the remaining 999999990 Minima from the input coin, it will be burned!
+
+#### 4b. Change Output
+
+In this tutorial we won't include a burn (we will assume there is plenty of block space available), so we need to define a second output to return the 999999990 Minima to the sender (node 1).
+
+We can either send it back to the same address that the input coin came from on node 1 i.e. `0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2` or send it back to a different wallet address (which you may want to do for increased privacy).
+
+To find a different wallet address, you can do `getaddress` on node 1.
+
+For this example, I will send the change back to the same address. The miniaddress (Mx format) would also work.
+
+Add the change output on node 1:
+
+```bash title="Terminal Node 1"
+txnoutput id:simpletxn amount:999999990 address:0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2
+```
+
+My command output:
+
+```bash title="Output"
+{
+ "command":"txnoutput",
+ "params":{
+ "id":"simpletxn",
+ "amount":"999999990",
+ "address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2"
+ },
+ "status":true,
+ "pending":false,
+ "response":{
+ "id":"simpletxn",
+ "transaction":{
+ "inputs":[{
+ "coinid":"0x9ADD6E64E7D4DE63F4472C730ECEDDA8BC37C2F1A906E126F81C584EF172CF3A",
+ "amount":"1000000000",
+ "address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2",
+ "miniaddress":"MxG083BHZRQW4DW3ZS0GSM19Z4VM7P5M53JP3C6JCGAPJ16J9ZTKEGCZA4GJAEZ",
+ "tokenid":"0x00",
+ "token":null,
+ "storestate":true,
+ "state":[],
+ "spent":false,
+ "mmrentry":"1",
+ "created":"1"
+ }],
+ "outputs":[{
+ "coinid":"0x9AA61717A9190419F4C617AF10FC5A014621E860767841118342ABEA9F7F8D4E",
+ "amount":"10",
+ "address":"0x1577381B2E4E160BD058F73692A73BBF585B9A68383AD8A55979E7C614A17095",
+ "miniaddress":"MxG080YESS1MBWE2Z5T0M7N6Q9AEETVB1DPKQ1Z7BCAAMBPSV3198BGWNB9DRW8",
+ "tokenid":"0x00",
+ "token":null,
+ "storestate":true,
+ "state":[],
+ "spent":false,
+ "mmrentry":"0",
+ "created":"0"
+ },
+ {
+ "coinid":"0xF25DFF89E78E12926C83E91C64279380BF2C34C4EE5971F015A43614214A6FF8",
+ "amount":"999999990",
+ "address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2",
+ "miniaddress":"MxG083BHZRQW4DW3ZS0GSM19Z4VM7P5M53JP3C6JCGAPJ16J9ZTKEGCZA4GJAEZ",
+ "tokenid":"0x00",
+ "token":null,
+ "storestate":true,
+ "state":[],
+ "spent":false,
+ "mmrentry":"0",
+ "created":"0"
+ }],
+ "state":[],
+ "linkhash":"0x00",
+ "transactionid":"0x43D318ACFD77B898DEB7C8F7FEACA3A46BEED0FF35A07B99125238358FEF8B47"
+ },
+ "witness":{
+ "signatures":[],
+ "mmrproofs":[],
+ "scripts":[]
+ },
+ "outputcoindata":["0x000000209AA61717A9190419F4C617AF10FC5A014621E860767841118342ABEA9F7F8D4E000000201577381B2E4E160BD058F73692A73BBF585B9A68383AD8A55979E7C614A1709500010A00000001000100010000000001000000010000010000",
+ "0x00000020F25DFF89E78E12926C83E91C64279380BF2C34C4EE5971F015A43614214A6FF8000000206B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC200043B9AC9F600000001000100010000000001000000010000010000"]
+ }
+}
+```
+
+Now we have 1 input (1 billion Minima) and 2 outputs, one to node 2 (10 Minima) and one back to node 1 (999999990 Minima).
+
+If we do `txncheck id:simpletxn` again, we now have no Burn:
+
+```bash title="Terminal Node 1"
+txncheck id:simpletxn
+```
+
+```bash title="Output"
+Minima @ ... : Wrong Number of MMR Proofs Inputs:1 MMRProofs:0 @ 0x00
+{
+ "command":"txncheck",
+ "params":{
+ "id":"simpletxn"
+ },
+ "status":true,
+ "pending":false,
+ "response":{
+ "coins":[{
+ "tokenid":"0x00",
+ "input":"1000000000",
+ "output":"1000000000",
+ "difference":"0"
+ }],
+ "tokens":1,
+ "inputs":1,
+ "outputs":2,
+ "burn":"0",
+ "validamounts":true,
+ "signatures":0,
+ "valid":{
+ "basic":false,
+ "signatures":true,
+ "mmrproofs":true,
+ "scripts":true
+ }
+ }
+}
+```
+
+You will also see after we added the second output that the `Witness` data is empty:
+
+```bash title="Output"
+ "witness":{
+ "signatures":[],
+ "mmrproofs":[],
+ "scripts":[]
+ },
+```
+
+The Witness holds the signatures, coin proofs and scripts for a transaction - proving a transaction's validity.
+
+Let's complete the Witness data.
+
+### 5. Sign the transaction
+
+Since this is a simple transaction (no custom scripts) we can sign the transaction using
+
+```bash title="Terminal Node 1"
+txnsign id:simpletxn publickey:auto
+```
+
+Command output:
+
+```bash title="Output"
+{
+ "command":"txnsign",
+ "params":{
+ "id":"simpletxn",
+ "publickey":"auto"
+ },
+ "status":true,
+ "pending":false,
+ "response":{
+ "keys":["0x188A3462BDF4E4238C7097337B6F897ECF806655884FE00D3CFBEEF0C47C6AFD"]
+ }
+}
+```
+
+The key shown here is the public key used to sign the transaction.
+
+Earlier, I mentioned that each address also has a script and public key.
+
+Let's check the script associated with our input coin address using:
+
+```bash title="Terminal Node 1"
+scripts address:0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2
+```
+
+Command output:
+
+```bash title="Output"
+{
+ "command":"scripts",
+ "params":{
+ "address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2"
+ },
+ "status":true,
+ "pending":false,
+ "response":{
+ "script":"RETURN SIGNEDBY(0x188A3462BDF4E4238C7097337B6F897ECF806655884FE00D3CFBEEF0C47C6AFD)",
+ "address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2",
+ "miniaddress":"MxG083BHZRQW4DW3ZS0GSM19Z4VM7P5M53JP3C6JCGAPJ16J9ZTKEGCZA4GJAEZ",
+ "simple":true,
+ "default":true,
+ "publickey":"0x188A3462BDF4E4238C7097337B6F897ECF806655884FE00D3CFBEEF0C47C6AFD",
+ "track":true
+ }
+}
+```
+
+You can see the `publickey` here matches what our `txnsign` command returned.
+
+This tells us that when sending a coin which has this address, the script
+
+```
+RETURN SIGNEDBY(0x188A3462BDF4E4238C7097337B6F897ECF806655884FE00D3CFBEEF0C47C6AFD)
+```
+
+must return `TRUE`.
+
+This script reads:
+
+If this transaction is SIGNEDBY the public key `0x188A3462BDF4E4238C7097337B6F897ECF806655884FE00D3CFBEEF0C47C6AFD`, then return TRUE. Otherwise, return FALSE.
+
+If you do `txncheck id:simpletxn` again, you will see there is now 1 signature.
+
+If you do `txnlist id:simpletxn`, you will see a signature is now populated in the `Witness` section.
+
+However the mmrproofs and scripts are still empty.
+
+Command output from `txnlist id:simpletxn`:
+
+```bash title="Output"
+...
+ "mmrproofs":[],
+ "scripts":[]
+...
+```
+
+Let's add these now.
+
+### 6. Add the Coin proofs and Scripts
+
+Again, as this is a simple transaction, we can easily add the MMR proof for the input coin and the script using:
+
+```bash title="Terminal Node 1"
+txnbasics id:simpletxn
+```
+
+The command output will show you the full transaction and complete Witness, including the mmrproofs and scripts:
+
+```bash title="Output"
+...
+ "mmrproofs":[{
+ "coin":{
+ "coinid":"0x9ADD6E64E7D4DE63F4472C730ECEDDA8BC37C2F1A906E126F81C584EF172CF3A",
+ "amount":"1000000000",
+ "address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2",
+ "miniaddress":"MxG083BHZRQW4DW3ZS0GSM19Z4VM7P5M53JP3C6JCGAPJ16J9ZTKEGCZA4GJAEZ",
+ "tokenid":"0x00",
+ "token":null,
+ "storestate":true,
+ "state":[],
+ "spent":false,
+ "mmrentry":"1",
+ "created":"1"
+ },
+ "proof":{
+ "blocktime":"235",
+ "proof":[{
+ "left":true,
+ "data":{
+ "data":"0xA53AD6A229F11DAD05FD0D9164F8EEE96501FA67ED9FEF7087EEA5C43E293357",
+ "value":"0"
+ }
+ }],
+ "prooflength":1
+ }
+ }],
+ "scripts":[{
+ "script":"RETURN SIGNEDBY(0x188A3462BDF4E4238C7097337B6F897ECF806655884FE00D3CFBEEF0C47C6AFD)",
+ "address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2",
+ "proof":{
+ "blocktime":"0",
+ "proof":[],
+ "prooflength":0
+ }
+ }]
+ },
+ "outputcoindata":["0x000000209AA61717A9190419F4C617AF10FC5A014621E860767841118342ABEA9F7F8D4E000000201577381B2E4E160BD058F73692A73BBF585B9A68383AD8A55979E7C614A1709500010A00000001000100010000000001000000010000010000",
+ "0x00000020F25DFF89E78E12926C83E91C64279380BF2C34C4EE5971F015A43614214A6FF8000000206B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC200043B9AC9F600000001000100010000000001000000010000010000"]
+ }
+}
+```
+
+By adding the coin's MMR proof, when all other nodes in the network receive this transaction, they will be able to verify that our input coin is valid and unspent (i.e. We are not attempting a double spend!)
+
+By adding the script, they will be able to execute the script and verify that it returns TRUE - since we have signed the transaction with the right public key.
+
+Now when you do `txncheck id:simpletxn`, you won't get the `Wrong number of MMR Proofs` message and you will see everything is now valid!
+
+```bash title="Output"
+...
+ "valid":{
+ "basic":true,
+ "signatures":true,
+ "mmrproofs":true,
+ "scripts":true
+...
+```
+
+### 7. Post the transaction
+
+We are ready to post the transaction!
+
+All the hard work is done, now we just need to post the transaction - this will propagate it to the entire Minima network who will validate it and then add it to a block!
+
+Still on node 1:
+
+```bash title="Terminal Node 1"
+txnpost id:simpletxn
+```
+
+Command output (node 1):
+
+```bash title="Output"
+ASYNC Transaction Mined : 0x00004D96A2FFDC5BFC00868627B6A9085ECDE489A83B5CD9A6B76A5FA58DFB3F
+You found a block! 530 0x00004D96A2FFDC5BFC00868627B6A9085ECDE489A83B5CD9A6B76A5FA58DFB3F
+NEW Spent Coin : {"coinid":"0x9ADD6E64E7D4DE63F4472C730ECEDDA8BC37C2F1A906E126F81C584EF172CF3A","amount":"1000000000","address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2","miniaddress":"MxG083BHZRQW4DW3ZS0GSM19Z4VM7P5M53JP3C6JCGAPJ16J9ZTKEGCZA4GJAEZ","tokenid":"0x00","token":null,"storestate":true,"state":[],"spent":true,"mmrentry":"1","created":"1"}
+NEW Unspent Coin : {"coinid":"0xF25DFF89E78E12926C83E91C64279380BF2C34C4EE5971F015A43614214A6FF8","amount":"999999990","address":"0x6B8E37A911B21E380872C14E09FB1F25B1473C8D869B20ACCC269A71DA3A0CC2","miniaddress":"MxG083BHZRQW4DW3ZS0GSM19Z4VM7P5M53JP3C6JCGAPJ16J9ZTKEGCZA4GJAEZ","tokenid":"0x00","token":null,"storestate":true,"state":[],"spent":false,"mmrentry":"3","created":"530"}
+```
+
+On node 2, we can see it has received the Minima:
+
+```bash title="Terminal Node 2"
+NEW Unspent Coin : {"coinid":"0x9AA61717A9190419F4C617AF10FC5A014621E860767841118342ABEA9F7F8D4E","amount":"10","address":"0x1577381B2E4E160BD058F73692A73BBF585B9A68383AD8A55979E7C614A17095","miniaddress":"MxG080YESS1MBWE2Z5T0M7N6Q9AEETVB1DPKQ1Z7BCAAMBPSV3198BGWNB9DRW8","tokenid":"0x00","token":null,"storestate":true,"state":[],"spent":false,"mmrentry":"2","created":"530"}
+```
+
+So you can see the process:
+
+1. node 1 created a txpow unit containing the transaction
+2. node 1 mined the txpow unit
+3. the txpow unit became a block\*
+4. node 1 spent the 1 billion coin and received a new coin of 999999990
+5. node 2 received a new coin of 10
+
+\* It is important to note here that step 3 is not a given and in the main network, the block would most likely be found by a different node.
+
+Well done, you just manually constructed a transaction and sent it!
+
+##n Notes
+
+Alternative methods in this tutorial could have been:
+
+1. Instead of using `txnbasics id:simpletxn`, you could add the MMR proofs and script at the same time as adding the coin as an input with
+
+```bash title="Terminal Node 1"
+txninput id:simpletxn coinid:0x9ADD6E64E7D4DE63F4472C730ECEDDA8BC37C2F1A906E126F81C584EF172CF3A scriptmmr:true
+```
+
+2. Instead of using `txnbasics id:simpletxn`, you could do it in one step with:
+
+```bash title="Terminal Node 1"
+txnpost id:simpletxn auto:true
+```
+
+3. If you had more than one coin on node 1, you could add a burn at the `txnpost` step with:
+
+```bash title="Terminal Node 1"
+txnpost id:simpletxn burn:1
+```
diff --git a/content/docs/development/terminal-commands.mdx b/content/docs/development/terminal-commands.mdx
index 6546263..8d12b89 100644
--- a/content/docs/development/terminal-commands.mdx
+++ b/content/docs/development/terminal-commands.mdx
@@ -1,3777 +1,3777 @@
----
-title: Terminal Commands
-description: Terminal Commands
-tag: learn
-icon: Terminal
----
-
-Last updated: 6th August 2024
-
-The following commands can be run directly from a Minima Terminal. They can also be viewed by typing `help` into the Minima Terminal.
-
-For detailed help, use `help command:` followed by the command.
-
-`;` can be used to chain multiple commands
-
-## General Commands
-
-
-
-
-`Show your total balance of Minima and tokens.`
-
-
-
-Examples:
-
-```bash title="Terminal"
-balance
-```
-
-```bash title="Terminal"
-balance tokenid:0xFED5.. confirmations:10
-```
-
-```bash title="Terminal"
-balance address:0xFF..
-```
-
-
-
-
-
-`Return the top block`
-
-```bash title="Terminal"
-block
-```
-
-Examples:
-
-
-
-
-
-`Check the validity of an address and whether it belongs to your node.`
-
-
-
-Examples:
-
-```bash title="Terminal"
-checkaddress address:0xFED...
-```
-
-
-
-
-
-`Check a coin exists and is valid. Can only check unspent coins.`
-
-
-
-Examples:
-
-```bash title="Terminal"
-coincheck data:0x00000..
-```
-
-
-
-
-
-`Export a coin including its MMR proof.`
-
-A coin can then be imported and tracked on another node using the 'coinimport' command.
-
-This does not allow the spending of a coin - just the knowledge of its existence.
-
-
-
-Examples:
-
-```bash title="Terminal"
-coinexport coinid:0xCD34..
-```
-
-
-
-
-
-`Import a coin including its MMR proof.`
-
-Optionally you can track the coin to add it to your relevant coins list and know when it becomes spent.
-
-Importing does not allow the spending of a coin - just the knowledge of its existence.
-
-
-
-Examples:
-
-```bash title="Terminal"
-coinimport data:0x00000..
-```
-
-```bash title="Terminal"
-coinimport data:0x00000.. track:true
-```
-
-
-
-
-
-`Track or untrack a coin.`
-
-Track a coin to keep its MMR proof up-to-date and know when it becomes spent. Stop tracking to remove it from your relevant coins list.
-
-
-
-Examples:
-
-```bash title="Terminal"
-cointrack enable:true coinid:0xCD34..
-```
-
-
-
-
-
-`Consolidate multiple coins (UTxOs) into one by sending them back to yourself.`
-
-Must have at least 3 coins.
-
-Useful to prevent having many coins of tiny value and to manage the number of coins you are tracking. Optionally set the minimum coin age (in blocks), maximum number of coins, and maximum number of signatures for the transaction.
-
-
-
-Examples:
-
-```bash title="Terminal"
-consolidate tokenid:0x00
-```
-
-```bash title="Terminal"
-consolidate tokenid:0x00 coinage:10
-```
-
-```bash title="Terminal"
-consolidate tokenid:0x00 maxcoins:5
-```
-
-```bash title="Terminal"
-consolidate tokenid:0x00 coinage:10 maxcoins:8 burn:1
-```
-
-```bash title="Terminal"
-consolidate tokenid:0x00 coinage:10 maxcoins:8 maxsigs:3 burn:1 dryrun:true
-```
-
-
-
-
-
-`Returns an existing default Minima address to receive funds, use as a change address etc.`
-
-Each address can be used securely 262144 (64^3) times.
-
-Then you can wipe the private keys from your online node using the 'vault' command.
-
-Examples:
-
-```bash title="Terminal"
-getaddress
-```
-
-
-
-
-
-`Check the speed of hashing of this device.`
-
-Defaults to 1 million hashes.
-
-Returns the time taken in milliseconds and speed in megahashes/second.
-
-E.g. A speed of 0.5 MH/s indicates 500000 hashes per second.
-
-
-
-Examples:
-
-```bash title="Terminal"
-hashtest
-```
-
-```bash title="Terminal"
-hashtest amount:1000000
-```
-
-
-
-
-
-`Return all TxPoW relevant to you.`
-
-
-
-Examples:
-
-```bash title="Terminal"
-history max:20
-```
-
-```bash title="Terminal"
-history max:20 offset:45
-```
-
-
-
-
-
-`Get a list of all your public keys or create a new key.`
-
-
-
-Parameters used with the `action:` parameter:
-
-
-
-Examples:
-
-```bash title="Terminal"
-keys action:list
-```
-
-```bash title="Terminal"
-keys action:checkkeys
-```
-
-```bash title="Terminal"
-keys action:list publickey:0xFFEE56..
-```
-
-```bash title="Terminal"
-keys action:new
-```
-
-
-
-
-
-`Create a new address that will not be not used for anything else (not one of the 64 default change address).`
-
-Can be used for a specific use case or for improved privacy.
-
-```bash title="Terminal"
-newaddress
-```
-
-
-
-
-
-`Print the MMR set of the tip block and the total number of entries in the MMR.`
-
-Returns the tip block number, latest entrynumber and latest set of MMR entries.
-
-For each entry, details of its row, entry number, data and value of all new and updated MMR entries for the tip block.
-
-Row 1 represents the leaf nodes, entry 0 represents the first entry on a row.
-
-```bash title="Terminal"
-printmmr
-```
-
-
-
-
-
-`Print a tree representation of the blockchain.`
-
-Default depth 32 blocks, can be increased to see more of the txpow tree.
-
-
-
-Examples:
-
-```bash title="Terminal"
-printtree
-```
-
-```bash title="Terminal"
-printtree depth:500
-```
-
-```bash title="Terminal"
-printtree cascade:true
-```
-
-
-
-
-
-`Shutdown Minima safely. Ensure you have a backup before shutting down.`
-
-Ensure you have a backup before shutting down.
-
-
-
-Examples:
-
-```bash title="Terminal"
-quit
-```
-
-```bash title="Terminal"
-quit compact:true
-```
-
-
-
-
-
-`Generate a random value, based on your SEED and a modifier.`
-
-
-
-Examples:
-
-```bash title="Terminal"
-seedrandom modifier:"Hello you"
-```
-
-
-
-
-
-`Show the general status for Minima and your node. Optionally clean the RAM.`
-
-Prints details for general status, memory used, chain info, stored txpow units, network connections, p2p connections and traffic.
-
-
-
-Examples:
-
-```bash title="Terminal"
-status
-```
-
-```bash title="Terminal"
-status clean:true
-```
-
-
-
-
-
-`Create (mint) custom tokens or NFTs.`
-
-You must have some sendable Minima in your wallet as tokens are 'colored coins', a fraction of 1 Minima.
-
-
-
-Examples:
-
-```bash title="Terminal"
-tokencreate name:newtoken amount:1000000
-```
-
-```bash title="Terminal"
-tokencreate amount:10 name:\{"name":"newcoin","link":"http:mysite.com","description":"A very cool token"}
-```
-
-```bash title="Terminal"
-tokencreate name:mynft amount:10 decimals:0 webvalidate:https://www.mysite.com/nftvalidation.txt signtoken:0xFF.. burn:0.1
-```
-
-```bash title="Terminal"
-tokencreate name:charitycoin amount:1000 script:"ASSERT VERIFYOUT(@TOTOUT-1 0xMyAddress 1 0x00 TRUE)"
-```
-
-
-
-
-
-`Validate the signature and webvalidate link in a token.`
-
-
-
-Examples:
-
-```bash title="Terminal"
-tokenvalidate tokenid:0xFED5..
-```
-
-
-
-
-
-`Show the message stacks of the internal Minima Engine with optional filter string.`
-
-
-
-Examples:
-
-```bash title="Terminal"
-trace enable:true
-```
-
-```bash title="Terminal"
-trace enable:true filter:MAIN
-```
-
-```bash title="Terminal"
-trace enable:true filter:MINER
-```
-
-```bash title="Terminal"
-trace enable:true filter:MDS
-```
-
-```bash title="Terminal"
-trace enable:true filter:NOTIFYMANAGER
-```
-
-```bash title="Terminal"
-trace enable:true filter:TXPOWPROCESSOR
-```
-
-```bash title="Terminal"
-trace enable:false
-```
-
-
-
-
-
-## Backup
-
-
-
-
-
-`Perform a chain or seed re-sync from an archive node.`
-
-A chain re-sync will put your node on the correct chain so you are in sync with the latest tip block.
-
-Use a chain re-sync if your node has been offline for too long and cannot catchup. Seed Phrase is not required.
-
-A seed re-sync will wipe the wallet and re-generate your keys from your seed phrase. Your coins will be restored.
-
-Only use a seed re-sync if you have lost your node and do not have a backup.
-
-You can also check the integrity of your archive db.
-
-
-
-Parameters used with the `action:` parameter:
-
-
-
-Examples:
-
-```bash title="Terminal"
-archive action:resync host:auto
-```
-
-```bash title="Terminal"
-archive action:resync host:89.98.89.98:8888 phrase:"YOUR 24 WORD SEED PHRASE"
-```
-
-```bash title="Terminal"
-archive action:resync host:89.98.89.98:8888 phrase:"YOUR 24 WORD SEED PHRASE" keys:90 keyuses:2000
-```
-
-```bash title="Terminal"
-archive action:integrity
-```
-
-```bash title="Terminal"
-archive action:export file:archiveexport-ddmmyy.gzip
-```
-
-```bash title="Terminal"
-archive action:import file:archiveexport-ddmmyy.gzip
-```
-
-```bash title="Terminal"
-archive action:inspect file:archiveexport-ddmmyy.gzip
-```
-
-```bash title="Terminal"
-archive action:addresscheck address:Mx..
-```
-
-
-
-
-
-`Backup your node. Uses a timestamped name by default.`
-
-
-
-Examples:
-
-```bash title="Terminal"
-backup
-```
-
-```bash title="Terminal"
-backup password:Longsecurepassword456
-```
-
-```bash title="Terminal"
-backup password:Longsecurepassword456 confirm:Longsecurepassword456
-```
-
-```bash title="Terminal"
-backup password:Longsecurepassword456 file:my-backup-01-Jan-22.bak maxhistory:100
-```
-
-```bash title="Terminal"
-backup auto:true
-```
-
-
-
-
-
-`View information about your MegaMMR. Export and Import complete MegaMMR data.`
-
-You must be running with the -megammr start up parameter.
-
-
-
-Parameters used with the `action:` parameter:
-
-
-
-Examples:
-
-```bash title="Terminal"
-megammr
-```
-
-```bash title="Terminal"
-megammr action:info
-```
-
-```bash title="Terminal"
-megammr action:export file:mmrfile.mmr
-```
-
-```bash title="Terminal"
-megammr action:import file:mmrfile.mmr
-```
-
-
-
-
-`Perform a quick chain sync, seed re-sync or restore a backup from a MegaMMR node. Fast.`
-
-If you are on the wrong chain - all you need to provide is the 'host' to connect to.
-
-If you are on a fresh node, with different seed phrase, provide 'host' and 'phrase' to resync with that Wallet.
-
-You can load an old backup and resync to the chain tip aswell.
-
-The host you connect to MUST be running with -megammr.
-
-
-
-Parameters used with the `action:` parameter:
-
-
-
-Examples:
-
-```bash title="Terminal"
-megammrsync action:mydetails
-```
-
-```bash title="Terminal"
-megammrsync action:resync host:34.32.59.133:9001
-```
-
-```bash title="Terminal"
-megammrsync action:resync host:34.32.59.133:9001 file:myoldbackup.bak password:backup_password
-```
-
-```bash title="Terminal"
-megammrsync action:resync host:34.32.59.133:9001 phrase:"YOUR 24 WORD SEED PHRASE" keyuses:2000
-```
-
-
-
-
-
-`Export the archive data of your node to a MySQL database.`
-
-The MySQL archive export (in .dat or .gzip format) can be used to perform a chain re-sync to put users on the correct chain or a seed re-sync to restore access to lost funds, using the 24 word seed phrase.
-
-Query an address for its history of spent and unspent coins.
-
-Additionally export the MySQL db to a .dat or .gzip file for resyncing with 'reset' or 'archive' command.
-
-You can also create a coins db in MySQL to search for coins using SQL queries.
-
-
-
-Parameters used with the `action:` parameter:
-
-
-
-Examples:
-
-```bash title="Terminal"
-mysql host:mysqlhost:port database:archivedb user:archiveuser password:archivepassword action:info
-```
-
-```bash title="Terminal"
-mysql host:dockermysql database:archivedb user:archiveuser password:archivepassword action:info
-```
-
-```bash title="Terminal"
-mysql host:mysqlhost:port database:archivedb user:archiveuser password:archivepassword action:integrity
-```
-
-```bash title="Terminal"
-mysql host:mysqlhost:port database:archivedb user:archiveuser password:archivepassword action:update
-```
-
-```bash title="Terminal"
-mysql host:mysqlhost:port database:archivedb user:archiveuser password:archivepassword action:addresscheck address:MxG08..
-```
-
-```bash title="Terminal"
-mysql host:mysqlhost:port database:archivedb user:archiveuser password:archivepassword action:resync
-```
-
-```bash title="Terminal"
-mysql host:mysqlhost:port database:archivedb user:archiveuser password:archivepassword action:resync phrase:"24 WORDS HERE" keys:90 keyuses:2000
-```
-
-
-
-
-
-`Create and search a coins database from your MySQL Archive.`
-
-Create a coins db from your mysql data and search it.
-
-Use the same database you already use for your TxBlocks. This creates a new table.
-
-You can then search for coins using SQL queries.
-
-
-
-Parameters used with the `action:` parameter:
-
-
-
-Examples:
-
-```bash title="Terminal"
-mysqlcoins action:update maxcoins:100 host:127.0.0.1:3307 database:coinsdb user:myuser password:myuser
-```
-
-```bash title="Terminal"
-mysqlcoins action:search where:"address='0x791E78C60652B0E19B8FE9EB035B122B261490C477FD76E38C0C928187076103'" host:127.0.0.1:3307 database:coinsdb user:myuser password:myuser
-```
-
-```bash title="Terminal"
-mysqlcoins action:search query:"address='0x791E78C60652B0E19B8FE9EB035B122B261490C477FD76E38C0C928187076103' AND state LIKE '%0xFFEEDD%' LIMIT 10" host:127.0.0.1:3307 database:coinsdb user:myuser password:myuser
-```
-
-
-
-
-
-`Reset your node in various ways.`
-
-You MUST wait until all your original keys are created before this is allowed.
-
-
-
-Parameters used with the `action:` parameter:
-
-
-
-Examples:
-
-```bash title="Terminal"
-reset archivefile:archiveexport-jul23.gz action:chainsync
-```
-
-```bash title="Terminal"
-reset archivefile:archiveexport-jul23.gz action:seedsync keyuses:1000 phrase:"ENTER 24 WORDS HERE"
-```
-
-```bash title="Terminal"
-reset archivefile:archiveexport-jul23.gz action:restore file:backup-jul23.bak password:Longsecurepassword456
-```
-
-
-
-
-
-`Restore your node from a backup.`
-
-You MUST wait until all your original keys are created before this is allowed.
-
-
-
-Examples:
-
-```bash title="Terminal"
-restore file:my-full-backup-01-Jan-22 password:Longsecurepassword456
-```
-
-
-
-
-
-`Restore the entire system AND perform an archive chain sync. Use when the backup is old.`
-
-The node will be restored and an archive chain sync will commence from the last block in the backup.
-
-You MUST wait until all your original keys are created before this is allowed.
-
-
-
-Examples:
-
-```bash title="Terminal"
-restoresync file:my-full-backup-01-Jan-22 password:Longsecurepassword456 host:89.98.89.98:9001
-```
-
-```bash title="Terminal"
-restoresync file:my-full-backup-01-Jan-22 password:Longsecurepassword456 keyuses:1000 host:89.98.89.98:9001
-```
-
-
-
-
-
-`View, encrypt/decrypt or wipe/restore your seed phrase and private keys.`
-
-
-DO NOT SHARE YOUR SEED PHRASE WITH ANYONE.
-
-BE CAREFUL. ENSURE YOU HAVE A BACKUP AND SECURE RECORD OF YOUR PASSPHRASE BEFORE LOCKING.
-
-
-
-You must have your passphrase to unlock your private keys.
-
-
-
-Parameters used with the `action:` parameter:
-
-
-
-Examples:
-
-```bash title="Terminal"
- vault action:wipekeys seed:0xDD4E..
-```
-
-```bash title="Terminal"
- vault action:restorekeys phrase:\"SPRAY LAMP..\"
-```
-
-```bash title="Terminal"
-vault action:passwordlock password:your_password
-```
-
-```bash title="Terminal"
-vault action:passwordlock password:your_password confirm:your_password
-```
-
-```bash title="Terminal"
-vault action:passwordunlock password:your_password
-```
-
-
-
-
-
-## MiniDapp System
-
-
-
-
-`MiniDAPP System management.`
-
-Install, update or uninstall MiniDapps and set their permissions to READ/WRITE. Default permission is READ.
-
-DO NOT give WRITE permissions to MiniDapps you do not trust!
-Accept/deny pending commands from MiniDapps with READ permissions.
-
-
-
-Parameters used with the `action:` parameter:
-
-
-
-Examples:
-
-```bash title="Terminal"
-mds action:list
-```
-
-```bash title="Terminal"
-mds action:install file:wallet_1.0.mds.zip
-```
-
-```bash title="Terminal"
-mds action:install file:/Users/MyUser/Downloads/wallet_1.0.mds.zip trust:write
-```
-
-```bash title="Terminal"
-mds action:update uid:0xABA3.. file:wallet_2.0.mds.zip
-```
-
-```bash title="Terminal"
-mds action:uninstall uid:0xABA3..
-```
-
-```bash title="Terminal"
-mds action:pending
-```
-
-```bash title="Terminal"
-mds action:accept uid:0xCDF6..
-```
-
-```bash title="Terminal"
-mds action:deny uid:0xCDF6..
-```
-
-```bash title="Terminal"
-mds action:permission uid:0xABA3.. trust:write
-```
-
-
-
-
-
-`Show if this MiniDAPP is READ or WRITE mode.`
-
-Can be called from a MiniDapp to check whether it is in READ or WRITE mode.
-
-```bash title="Terminal"
-checkmode
-```
-
-
-
-
-
-`Show if a pending command UID is in the pending list`
-
-```bash title="Terminal"
-checkpending
-```
-
-
-
-
-
-`Check if the system is restoring`
-
-Check whether Minima is currently being restored, is shutting down and if shutdown is complete.
-
-```bash title="Terminal"
-checkrestore
-```
-
-
-
-
-
-## Network
-
-
-
-
-`Connect to a network Minima instance.`
-
-Connect to another node to join the main network or to create a private test network.
-
-Set your own host using the -host parameter at start up.
-
-
-
-Examples:
-
-```bash title="Terminal"
-connect host:94.0.239.117:9001
-```
-
-
-
-
-
-`Disconnect from a connected or connecting host.`
-
-Optionally disconnect from all hosts.
-
-
-
-Examples:
-
-```bash title="Terminal"
-disconnect uid:all
-```
-
-```bash title="Terminal"
-disconnect uid:CVNPMLPOCQ0HQ
-```
-
-
-
-
-
-`Send a message to one or all of your direct peers.`
-
-
-
-Examples:
-
-```bash title="Terminal"
-message data:"hello" uid:CVNPMLPOCQ0HQ
-```
-
-
-
-
-
-`Show network status or reset traffic counter.`
-
-```bash title="Terminal"
-network
-```
-
-
-
-Parameters used with the `action:` parameter:
-
-
-
-Examples:
-
-```bash title="Terminal"
-network
-```
-
-```bash title="Terminal"
-network action:list
-```
-
-```bash title="Terminal"
-network action:reset
-```
-
-```bash title="Terminal"
-network action:recalculateip
-```
-
-
-
-
-
-`Prints the peers list this node has. P2P must be enabled.`
-
-
-
-Parameters used with the `action:` parameter:
-
-
-
-Examples:
-
-```bash title="Terminal"
-peers
-```
-
-```bash title="Terminal"
-peers action:list
-```
-
-```bash title="Terminal"
-peers action:addpeers peerslist:["31.125.188.214:9001","94.0.239.117:9001"]
-```
-
-
-
-
-
-`Ping a host and get back Minima Node info.`
-
-
-
-Examples:
-
-```bash title="Terminal"
-ping host:
-```
-
-
-
-
-
-`Enable and disable RPC on port 9005 (default is off).`
-
-
-
-Examples:
-
-```bash title="Terminal"
-rpc enable:true
-```
-
-```bash title="Terminal"
-rpc enable:true ssl:true password:minima
-```
-
-```bash title="Terminal"
-rpc enable:true password:minima
-```
-
-```bash title="Terminal"
-rpc enable:false
-```
-
-
-
-
-
-`Add a web hook that is called with Minima events as they happen.`
-
-
-
-Parameters used with the `action:` parameter:
-
-
-
-Examples:
-
-```bash title="Terminal"
-webhooks action:list
-```
-
-```bash title="Terminal"
-webhooks action:add hook:http://127.0.0.1/myapi.php
-```
-
-```bash title="Terminal"
-webhooks action:remove hook:http://127.0.0.1/myapi.php
-```
-
-```bash title="Terminal"
-webhooks action:add hook:http://127.0.0.1/myapi.php filter:MINING
-```
-
-```bash title="Terminal"
-webhooks action:clear
-```
-
-
-
-
-## Maxima
-
-
-
-
-
-`Manage your Maxima contacts. List, refresh, add, remove or search contacts.`
-
-
-
-Parameters used with the `action:` parameter:
-
-
-
-Examples:
-
-```bash title="Terminal"
-maxcontacts
-```
-
-```bash title="Terminal"
-maxcontacts action:list
-```
-
-```bash title="Terminal"
-maxcontacts action:add contact:MxG18H..
-```
-
-```bash title="Terminal"
-maxcontacts action:remove id:1
-```
-
-```bash title="Terminal"
-maxcontacts action:search publickey:0x3081..
-```
-
-
-
-
-
-`Create a 128 bit RSA public and private key.`
-
-You can use them with maxsign and maxverify.
-
-```bash title="Terminal"
-maxcreate
-```
-
-
-
-
-
-`Perform extra functions on Maxima.`
-
-
-
-Parameters used with the `action:` parameter:
-
-
-
-Examples:
-
-```bash title="Terminal"
-maxextra action:staticmls host:Mx...@34.190.784.3:9001
-```
-
-```bash title="Terminal"
-maxextra action:staticmls host:clear
-```
-
-```bash title="Terminal"
-maxextra action:addpermanent publickey:0x3081..
-```
-
-```bash title="Terminal"
-maxextra action:removepermanent publickey:0x3081..
-```
-
-```bash title="Terminal"
-maxextra action:listpermanent
-```
-
-```bash title="Terminal"
-maxextra action:clearpermanent
-```
-
-```bash title="Terminal"
-maxextra action:getaddress maxaddress:MAX#0x3081..#Mx..@34.190.784.3:9001
-```
-
-```bash title="Terminal"
-maxextra action:mlsinfo
-```
-
-```bash title="Terminal"
-maxextra action:allowallcontacts enable:false
-```
-
-```bash title="Terminal"
-maxextra action:addallowed publickey:0x2451..
-```
-
-```bash title="Terminal"
-maxextra action:listallowed
-```
-
-```bash title="Terminal"
-maxextra action:clearallowed
-```
-
-
-
-
-
-`Check your Maxima details, send a message/data.`
-
-
-
-Parameters used with the `action:` parameter:
-
-
-
-Examples:
-
-```bash title="Terminal"
-maxima action:info
-```
-
-```bash title="Terminal"
-maxima action:setname name:myname
-```
-
-```bash title="Terminal"
-maxima action:hosts
-```
-
-```bash title="Terminal"
-maxima action:send id:1 application:appname data:0xFED5..
-```
-
-```bash title="Terminal"
-maxima action:send to:MxG18H.. application:appname data:0xFED5..
-```
-
-```bash title="Terminal"
-maxima action:send publickey:0xCD34.. application:ip:port data:0xFED5.. poll:true
-```
-
-```bash title="Terminal"
-maxima action:refresh
-```
-
-
-
-
-
-`Sign and verify data with your Maxima ID.`
-
-Returns the signature of the data, signed with your Maxima private key or the specified key.
-
-
-
-Examples:
-
-```bash title="Terminal"
-maxsign data:0xCD34..
-```
-
-```bash title="Terminal"
-maxsign data:0xCD34.. privatekey:0x3081..
-```
-
-
-
-
-
-`Verify data with a Maxima public key. Returns valid true or false.`
-
-
-
-Examples:
-
-```bash title="Terminal"
-maxverify data:0xCD34.. publickey:0xFED5.. signature:0x4827..
-```
-
-
-
-
-## Scripts
-
-
-
-
-
-`Add a new custom script.`
-
-Track ALL coins with this script address or just ones with state variables relevant to you.
-
-
-
-Examples:
-
-```bash title="Terminal"
-newscript trackall:true script:"RETURN SIGNEDBY(0x1539..) AND SIGNEDBY(0xAD25..)"
-```
-
-```bash title="Terminal"
-newscript trackall:false script:"RETURN (@BLOCK GTE PREVSTATE(1) OR @COINAGE GTE PREVSTATE(4)) AND VERIFYOUT(@INPUT PREVSTATE(2) @AMOUNT @TOKENID FALSE)"
-```
-
-
-
-
-
-`Remove a custom script.`
-
-BE CAREFUL not to remove a script you need.
-
-```bash title="Terminal"
-removescript
-```
-
-
-
-Examples:
-
-```bash title="Terminal"
-removescript address:0xFFE678768CDE..
-```
-
-```bash title="Terminal"
-removescript address:MxFFE678768CDE..
-```
-
-
-
-
-
-`Test run a script with predefined parameters without executing on chain.`
-
-Scripts will be auto cleaned for you.
-
-
-
-Examples:
-
-```bash title="Terminal"
-runscript script:"RETURN SIGNEDBY(0xFF..) AND @BLOCK GT 100" globals:\{"@BLOCK":"101"} signatures:["0xFF"]
-```
-
-```bash title="Terminal"
-runscript script:"LET st=STATE(99) LET ps=PREVSTATE(99) IF st EQ ps AND @COINAGE GT 20 AND SIGNEDBY(0xFF) THEN RETURN TRUE ELSEIF st GT ps AND SIGNEDBY(0xEE) THEN RETURN TRUE ENDIF" globals:\{"@COINAGE":"23"} state:\{"99":"0"} prevstate:\{"99":"0"} signatures:["0xFF"]
-```
-
-```bash title="Terminal"
-runscript script:"MAST 0x0E3.." extrascripts:\{"RETURN TRUE":"0x000.."}
-```
-
-
-
-
-
-`List all scripts or search for a script / basic address your node is tracking.`
-
-
-
-Examples:
-
-```bash title="Terminal"
-scripts
-```
-
-```bash title="Terminal"
-scripts address:0xFED5..
-```
-
-```bash title="Terminal"
-scripts address:MxG087..
-```
-
-
-
-
-
-`Show the complete Grammar for Minima KISSVM scripting.`
-
-```bash title="Terminal"
-tutorial
-```
-
-
-
-
-## Search
-
-
-
-
-
-`Search for coins that are relevant to you or in the unpruned chain.`
-
-
-
-Examples:
-
-```bash title="Terminal"
-coins
-```
-
-```bash title="Terminal"
-coins relevant:true sendable:true
-```
-
-```bash title="Terminal"
-coins relevant:true amount:10
-```
-
-```bash title="Terminal"
-coins coinid:0xEECD7..
-```
-
-```bash title="Terminal"
-coins relevant:true tokenid:0xFED5..
-```
-
-```bash title="Terminal"
-coins relevant:true address:0xCEF6.. tokenid:0x00
-```
-
-```bash title="Terminal"
-coins relevant:true address:MxABC9..
-```
-
-
-
-
-
-`Get a list of all your public keys or create a new key.`
-
-Each public key can be used for signing securely 262144 (64^3) times.
-
-
-
-Parameters used with the `action:` parameter:
-
-
-
-Examples:
-
-```bash title="Terminal"
-keys
-```
-
-```bash title="Terminal"
-keys action:list
-```
-
-```bash title="Terminal"
-keys action:list publickey:0xFFEE56..
-```
-
-```bash title="Terminal"
-keys action:new
-```
-
-
-
-
-
-`List all tokens in the unpruned chain.`
-
-Optionally import or export tokens to share token data.
-
-
-
-Parameters used with the `action:` parameter:
-
-
-
-Examples:
-
-```bash title="Terminal"
-tokens
-```
-
-```bash title="Terminal"
-tokens tokenid:0xFED5..
-```
-
-```bash title="Terminal"
-tokens action:export tokenid:0xFED5..
-```
-
-```bash title="Terminal"
-tokens action:import data:0x000..
-```
-
-
-
-
-
-`Search for a specific TxPoW in the unpruned chain or your mempool.`
-
-Search by txpowid, block or 0x / Mx address.
-
-
-
-Examples:
-
-```bash title="Terminal"
-txpow txpowid:0x000..
-```
-
-```bash title="Terminal"
-txpow block:200
-```
-
-```bash title="Terminal"
-txpow address:0xCEF6..
-```
-
-
-
-
-
-## Send
-
-
-
-
-
-`Create a multisig coin that can only be used in a txn signed by root OR n of m given public keys.`
-
-Provide your Vault password to temporarily decrypt the private keys when creating the coin or signing a transaction.
-
-
-
-Parameters used with the `action:` parameter:
-
-
-
-Examples:
-
-```bash title="Terminal"
-multisig action:create id:2of3multisig amount:100 publickeys:["0xFED5..","0xABD6..","0xFD8B.."] required:2 password:your_password
-```
-
-```bash title="Terminal"
-multisig action:create id:3of3multisigroot amount:100 publickeys:["0xFED5..","0xABD6..","0xFD8B.."] required:3 root:0xFFE..
-```
-
-```bash title="Terminal"
-multisig action:list
-```
-
-```bash title="Terminal"
-multisig action:list id:2of3multisig
-```
-
-```bash title="Terminal"
-multisig action:spend id:3of3multisigroot amount:5 address:0xFF..
-```
-
-```bash title="Terminal"
-multisig action:spend coinid:0x17EA.. amount:5 address:0xFF.. file:multisig.txn
-```
-
-```bash title="Terminal"
-multisig action:sign file:multispend_1673351592845.txn
-```
-
-```bash title="Terminal"
-multisig action:sign file:multisig.txn password:your_password
-```
-
-```bash title="Terminal"
-multisig action:view file:multisig.txn
-```
-
-```bash title="Terminal"
-multisig action:post file:signed_multispend_1673351592845.txn
-```
-
-```bash title="Terminal"
-multisig action:post file:signed_multisig.txn
-```
-
-
-
-
-
-`Send Minima or custom tokens to a wallet or custom script address.`
-
-Optionally, send to multiple addresses in one transaction; split UTxOs; add state variables or include a burn.
-
-
-
-Examples:
-
-```bash title="Terminal"
-send address:0xFF.. amount:10
-```
-
-```bash title="Terminal"
-send address:0xFF.. amount:10 tokenid:0xFED5.. burn:0.1
-```
-
-```bash title="Terminal"
-send address:0xFF.. amount:10 split:5 burn:0.1
-```
-
-```bash title="Terminal"
-send multi:["0xFF..:10","0xEE..:10","0xDD..:10"] split:10
-```
-
-```bash title="Terminal"
-send amount:1 address:0xFF.. state:{"0":"0xEE..","1":"0xDD.."}
-```
-
-
-
-
-
-`Send function that adds 'send' commands to a list and polls every 30 seconds until the return status is 'true'.`
-
-```bash title="Terminal"
-sendpoll
-```
-
-
-
-Parameters used with the `action:` parameter:
-
-
-
-Examples:
-
-```bash title="Terminal"
-sendpoll address:0xFF.. amount:10
-```
-
-```bash title="Terminal"
-sendpoll address:0xFF.. amount:10 tokenid:0xFED5.. burn:0.1
-```
-
-```bash title="Terminal"
-sendpoll action:list
-```
-
-```bash title="Terminal"
-sendpoll action:remove uid:0x..
-```
-
-
-
-
-
-`Create a txn but don't sign it.`
-
-Constructs and outputs an unsigned transaction to a file in the base folder.
-
-The output .txn file can then be imported to an offline node for signing. Must be done from an online node as the MMR proofs for the input coins are added.
-
-Useful when the keys on an online node are wiped or password locked.
-
-
-
-Examples:
-
-```bash title="Terminal"
-sendnosign address:0xFF.. amount:10
-```
-
-```bash title="Terminal"
-sendnosign address:0xFF.. amount:10 tokenid:0xFED5.. burn:0.1
-```
-
-```bash title="Terminal"
-sendnosign address:0xFF.. amount:10 split:5 burn:0.1
-```
-
-```bash title="Terminal"
-sendnosign multi:["0xFF..:10","0xEE..:10","0xDD..:10"] split:10
-```
-
-```bash title="Terminal"
-sendnosign amount:1 address:0xFF.. state:{"0":"0xEE..","1":"0xDD.."}
-```
-
-
-
-
-
-`Sign a transaction previously created by the 'sendnosign' command, by specifying its .txn file.`
-
-Optionally, if the node is Vault password locked, provide the Vault password to decrypt the keys for signing.
-
-The keys will be automatically re-encrypted after signing.
-
-Can be signed on an offline node, then posted from an online node.
-
-
-
-Examples:
-
-```bash title="Terminal"
-sendsign file:unsignedtransaction-1674907380057.txn
-```
-
-```bash title="Terminal"
-sendsign file:C:\\Users\\unsignedtransaction-1674907380057.txn password:your_vaultpassword
-```
-
-
-
-
-
-`View a transaction (signed or unsigned).`
-
-View the details of a transaction created by the 'sendnosign' command by specifying its .txn file.
-
-
-
-Examples:
-
-```bash title="Terminal"
-sendview file:unsignedtransaction-1674907380057.txn
-```
-
-```bash title="Terminal"
-sendview file:C:\\Users\\unsignedtransaction-1674907380057.txn
-```
-
-
-
-
-
-`Post a transaction previously created and signed using the 'sendnosign' and 'sendsign' commands.`
-
-Must be posted from an online node within approximately 24 hours of creation to ensure MMR proofs are valid.
-
-
-
-Examples:
-
-```bash title="Terminal"
-sendpost file:signedtransaction-1674907380057.txn
-```
-
-```bash title="Terminal"
-sendpost file:C:\\Users\\signedtransaction-1674907380057.txn
-```
-
-
-
-
-## Signatures
-
-
-
-
-
-`Sign the data with the publickey.`
-
-Returns the signature of the data, signed with the corresponding private key.
-
-
-
-```bash title="Terminal"
-sign data:0xCD34..
-```
-
-
-
-
-
-`Verify a signature.`
-
-Returns valid true or false.
-
-
-
-Examples:
-
-```bash title="Terminal"
-verify data:0xCD34.. publickey:0xFED5.. signature:0x4827..
-```
-
-
-
-
-
-## Transactions
-
-
-
-
-
-`View the latest Burn metrics`
-
-View the number of burn transactions and the maximum, median, average and minimum burn metrics for the last 1, 10 and 50 blocks.
-
-Use as an indicator for an appropriate burn amount for transactions.
-
-**Examples:**
-
-```bash title="Terminal"
-burn
-```
-
-
-
-
-
-`Enable detailed logs for script errors or mining activity.`
-
-Enable detailed logs for script errors, mining activity, Maxima, network messages, blocks, or IBD processing.
-
-
-
-Examples:
-
-```bash title="Terminal"
-logs scripts:true
-```
-
-```bash title="Terminal"
-logs scripts:false mining:true
-```
-
-
-
-
-
-`Automatically set the MMR proofs and scripts for a transaction.`
-
-Only run this command when a transaction is ready to be posted.
-
-```bash title="Terminal"
-txnbasics
-```
-
-
-
-Examples:
-
-```bash title="Terminal"
-txnbasics id:simpletxn
-```
-
-
-
-
-
-`Show details about the transaction.`
-
-Verify whether the inputs, outputs, signatures, proofs, and scripts are valid.
-
-```bash title="Terminal"
-txncheck
-```
-
-
-
-Examples:
-
-```bash title="Terminal"
-txncheck id:multisig
-```
-
-
-
-
-
-`Clear ALL the Witness data for a transaction.`
-
-Clears signatures, mmr proofs and script proofs.
-
-
-
-Examples:
-
-```bash title="Terminal"
-txnclear id:multisig
-```
-
-
-
-
-
-`Create a custom transaction.`
-
-The first step before defining the inputs and outputs.
-
-
-
-Examples:
-
-```bash title="Terminal"
-txncreate id:multisig
-```
-
-
-
-
-
-`Delete a previously created custom transaction.`
-
-
-
-Examples:
-
-```bash title="Terminal"
-txndelete id:multisig
-```
-
-
-
-
-
-`Export a transaction as HEX or to a file.`
-
-
-
-Examples:
-
-```bash title="Terminal"
-txnexport id:simpletxn
-```
-
-```bash title="Terminal"
-txnexport id:multisig file:multisig.txn
-```
-
-
-
-
-
-`Import a transaction from previously exported HEX data or a .txn file.`
-
-
-
-Examples:
-
-```bash title="Terminal"
-txnimport data:0x0000..
-```
-
-```bash title="Terminal"
-txnimport id:simpletxn data:0x0000..
-```
-
-```bash title="Terminal"
-txnimport id:multisig file:multisig.txn
-```
-
-
-
-
-
-`Add a coin as an input to a transaction.`
-
-```bash title="Terminal"
- txninput
-```
-
-
-
-Examples:
-
-```bash title="Terminal"
-txninput id:simpletxn coinid:0xD0BF..
-```
-
-```bash title="Terminal"
-txninput id:multisig coinid:0xD0BF.. scriptmmr:true
-```
-
-```bash title="Terminal"
-txninput id:posttxn coindata:0x000..
-```
-
-```bash title="Terminal"
-txninput id:eltootxn floating:true address:0xFED5.. amount:10 tokenid:0x00
-```
-
-
-
-
-
-`List your custom transactions. Includes previously posted transactions.`
-
-
-
-Examples:
-
-```bash title="Terminal"
-txnlist
-```
-
-```bash title="Terminal"
-txnlist id:multisig
-```
-
-
-
-
-
-`Create a transaction output.`
-
-This will create a new coin (UTxO).
-
-If the sum of inputs > outputs, the difference will be burned unless change to the sender is defined as an output.
-
-
-
-Examples:
-
-```bash title="Terminal"
-txnoutput id:simpletxn amount:10 address:0xFED5..
-```
-
-```bash title="Terminal"
-txnoutput id:multisig amount:10 address:0xFED5.. tokenid:0xCEF5.. storestate:false
-```
-
-```bash title="Terminal"
-txnoutput id:eltootxn amount:10 address:0xFED5..
-```
-
-
-
-
-
-`Add scripts to a transaction.`
-
-If it is a single script, and not one created with mmrcreate, leave the proof blank.
-
-If it is an mmrcreate script, include the proof.
-
-
-
-Examples:
-
-```bash title="Terminal"
-txnscript id:txnmast scripts:{"RETURN TRUE":""}
-```
-
-```bash title="Terminal"
-txnscript id:txnmast scripts:{"RETURN TRUE":"0x000.."}
-```
-
-
-
-
-
-`Sign a transaction.`
-
-```bash title="Terminal"
-txnsign
-```
-
-
-
-Examples:
-
-```bash title="Terminal"
-txnsign id:simpletxn publickey:auto
-```
-
-```bash title="Terminal"
-txnsign id:simpletxn publickey:auto password:your_password
-```
-
-```bash title="Terminal"
-txnsign id:multisig publickey:0xFD8B..
-```
-
-```bash title="Terminal"
-txnsign id:simpletxn publickey:auto txnpostauto:true
-```
-
-
-
-
-
-`Add a state variable to a transaction.`
-
-
-
-Examples:
-
-```bash title="Terminal"
-txnstate id:multisig port:0 value:0xFED5..
-```
-
-```bash title="Terminal"
-txnstate id:multisig port:1 value:100
-```
-
-```bash title="Terminal"
-txnstate id:multisig port:1 value:"string"
-```
-
-
-
-
-## External wallet transactions
-
-These are available from v1.0.41 onwards.
-
-The following commands allow you to construct, sign (online or offline) and post transactions on behalf of specific wallets that are separate from the node's own wallet.
-
-They should be used alongside the `keys action:genkey` OR `keys action:genkey phrase:"MY SEED PHRASE"` command which generate a new private/public key pair and wallet address from a random or given seed phrase that is independent from the node itself.
-
-Note that `sendfrom` and `createfrom` require a [Mega MMR node](/docs/runanode/meganode).
-
-
-
-
-
-`Send Minima or Tokens from a certain address with a given private key.`
-
-Must be used from an ONLINE node.
-
-
-
-Examples:
-
-```bash title="Terminal"
-sendfrom fromaddress:0xFEEED.. address:0xABCD.. script:"INSERT SCRIPT" privatekey:0xGHFK.. keyuses:5
-```
-
-
-
-
-
-`Create and export an unsigned txn from a certain address.`
-
-Must be run from a node using the `-megammr` start up parameter. Can be used from an ONLINE or OFFLINE node.
-
-
-
-Examples:
-
-```bash title="Terminal"
-createfrom fromaddress:0xFEEED.. address:0xABCD.. script:"INSERT SCRIPT"
-```
-
-Examples:
-
-
-
-
-
-`Sign a createfrom txn.`
-
-Can be used from an ONLINE or OFFLINE node.
-
-
-
-Examples:
-
-```bash title="Terminal"
-signfrom data:0x000000.. address:0xABCD.. script:"INSERT SCRIPT" keyuses:5
-```
-
-
-
-
-
-`Post a signfrom txn to the network`
-
-Must be used from an ONLINE node.
-
-
-
-Examples:
-
-```bash title="Terminal"
-postfrom data:0x000000.. mine:true
-```
-
-
-
-
+---
+title: Terminal Commands
+description: Terminal Commands
+tag: learn
+icon: Terminal
+---
+
+Last updated: 6th August 2024
+
+The following commands can be run directly from a Minima Terminal. They can also be viewed by typing `help` into the Minima Terminal.
+
+For detailed help, use `help command:` followed by the command.
+
+`;` can be used to chain multiple commands
+
+## General Commands
+
+
+
+
+`Show your total balance of Minima and tokens.`
+
+
+
+Examples:
+
+```bash title="Terminal"
+balance
+```
+
+```bash title="Terminal"
+balance tokenid:0xFED5.. confirmations:10
+```
+
+```bash title="Terminal"
+balance address:0xFF..
+```
+
+
+
+
+
+`Return the top block`
+
+```bash title="Terminal"
+block
+```
+
+Examples:
+
+
+
+
+
+`Check the validity of an address and whether it belongs to your node.`
+
+
+
+Examples:
+
+```bash title="Terminal"
+checkaddress address:0xFED...
+```
+
+
+
+
+
+`Check a coin exists and is valid. Can only check unspent coins.`
+
+
+
+Examples:
+
+```bash title="Terminal"
+coincheck data:0x00000..
+```
+
+
+
+
+
+`Export a coin including its MMR proof.`
+
+A coin can then be imported and tracked on another node using the 'coinimport' command.
+
+This does not allow the spending of a coin - just the knowledge of its existence.
+
+
+
+Examples:
+
+```bash title="Terminal"
+coinexport coinid:0xCD34..
+```
+
+
+
+
+
+`Import a coin including its MMR proof.`
+
+Optionally you can track the coin to add it to your relevant coins list and know when it becomes spent.
+
+Importing does not allow the spending of a coin - just the knowledge of its existence.
+
+
+
+Examples:
+
+```bash title="Terminal"
+coinimport data:0x00000..
+```
+
+```bash title="Terminal"
+coinimport data:0x00000.. track:true
+```
+
+
+
+
+
+`Track or untrack a coin.`
+
+Track a coin to keep its MMR proof up-to-date and know when it becomes spent. Stop tracking to remove it from your relevant coins list.
+
+
+
+Examples:
+
+```bash title="Terminal"
+cointrack enable:true coinid:0xCD34..
+```
+
+
+
+
+
+`Consolidate multiple coins (UTxOs) into one by sending them back to yourself.`
+
+Must have at least 3 coins.
+
+Useful to prevent having many coins of tiny value and to manage the number of coins you are tracking. Optionally set the minimum coin age (in blocks), maximum number of coins, and maximum number of signatures for the transaction.
+
+
+
+Examples:
+
+```bash title="Terminal"
+consolidate tokenid:0x00
+```
+
+```bash title="Terminal"
+consolidate tokenid:0x00 coinage:10
+```
+
+```bash title="Terminal"
+consolidate tokenid:0x00 maxcoins:5
+```
+
+```bash title="Terminal"
+consolidate tokenid:0x00 coinage:10 maxcoins:8 burn:1
+```
+
+```bash title="Terminal"
+consolidate tokenid:0x00 coinage:10 maxcoins:8 maxsigs:3 burn:1 dryrun:true
+```
+
+
+
+
+
+`Returns an existing default Minima address to receive funds, use as a change address etc.`
+
+Each address can be used securely 262144 (64^3) times.
+
+Then you can wipe the private keys from your online node using the 'vault' command.
+
+Examples:
+
+```bash title="Terminal"
+getaddress
+```
+
+
+
+
+
+`Check the speed of hashing of this device.`
+
+Defaults to 1 million hashes.
+
+Returns the time taken in milliseconds and speed in megahashes/second.
+
+E.g. A speed of 0.5 MH/s indicates 500000 hashes per second.
+
+
+
+Examples:
+
+```bash title="Terminal"
+hashtest
+```
+
+```bash title="Terminal"
+hashtest amount:1000000
+```
+
+
+
+
+
+`Return all TxPoW relevant to you.`
+
+
+
+Examples:
+
+```bash title="Terminal"
+history max:20
+```
+
+```bash title="Terminal"
+history max:20 offset:45
+```
+
+
+
+
+
+`Get a list of all your public keys or create a new key.`
+
+
+
+Parameters used with the `action:` parameter:
+
+
+
+Examples:
+
+```bash title="Terminal"
+keys action:list
+```
+
+```bash title="Terminal"
+keys action:checkkeys
+```
+
+```bash title="Terminal"
+keys action:list publickey:0xFFEE56..
+```
+
+```bash title="Terminal"
+keys action:new
+```
+
+
+
+
+
+`Create a new address that will not be not used for anything else (not one of the 64 default change address).`
+
+Can be used for a specific use case or for improved privacy.
+
+```bash title="Terminal"
+newaddress
+```
+
+
+
+
+
+`Print the MMR set of the tip block and the total number of entries in the MMR.`
+
+Returns the tip block number, latest entrynumber and latest set of MMR entries.
+
+For each entry, details of its row, entry number, data and value of all new and updated MMR entries for the tip block.
+
+Row 1 represents the leaf nodes, entry 0 represents the first entry on a row.
+
+```bash title="Terminal"
+printmmr
+```
+
+
+
+
+
+`Print a tree representation of the blockchain.`
+
+Default depth 32 blocks, can be increased to see more of the txpow tree.
+
+
+
+Examples:
+
+```bash title="Terminal"
+printtree
+```
+
+```bash title="Terminal"
+printtree depth:500
+```
+
+```bash title="Terminal"
+printtree cascade:true
+```
+
+
+
+
+
+`Shutdown Minima safely. Ensure you have a backup before shutting down.`
+
+Ensure you have a backup before shutting down.
+
+
+
+Examples:
+
+```bash title="Terminal"
+quit
+```
+
+```bash title="Terminal"
+quit compact:true
+```
+
+
+
+
+
+`Generate a random value, based on your SEED and a modifier.`
+
+
+
+Examples:
+
+```bash title="Terminal"
+seedrandom modifier:"Hello you"
+```
+
+
+
+
+
+`Show the general status for Minima and your node. Optionally clean the RAM.`
+
+Prints details for general status, memory used, chain info, stored txpow units, network connections, p2p connections and traffic.
+
+
+
+Examples:
+
+```bash title="Terminal"
+status
+```
+
+```bash title="Terminal"
+status clean:true
+```
+
+
+
+
+
+`Create (mint) custom tokens or NFTs.`
+
+You must have some sendable Minima in your wallet as tokens are 'colored coins', a fraction of 1 Minima.
+
+
+
+Examples:
+
+```bash title="Terminal"
+tokencreate name:newtoken amount:1000000
+```
+
+```bash title="Terminal"
+tokencreate amount:10 name:\{"name":"newcoin","link":"http:mysite.com","description":"A very cool token"}
+```
+
+```bash title="Terminal"
+tokencreate name:mynft amount:10 decimals:0 webvalidate:https://www.mysite.com/nftvalidation.txt signtoken:0xFF.. burn:0.1
+```
+
+```bash title="Terminal"
+tokencreate name:charitycoin amount:1000 script:"ASSERT VERIFYOUT(@TOTOUT-1 0xMyAddress 1 0x00 TRUE)"
+```
+
+
+
+
+
+`Validate the signature and webvalidate link in a token.`
+
+
+
+Examples:
+
+```bash title="Terminal"
+tokenvalidate tokenid:0xFED5..
+```
+
+
+
+
+
+`Show the message stacks of the internal Minima Engine with optional filter string.`
+
+
+
+Examples:
+
+```bash title="Terminal"
+trace enable:true
+```
+
+```bash title="Terminal"
+trace enable:true filter:MAIN
+```
+
+```bash title="Terminal"
+trace enable:true filter:MINER
+```
+
+```bash title="Terminal"
+trace enable:true filter:MDS
+```
+
+```bash title="Terminal"
+trace enable:true filter:NOTIFYMANAGER
+```
+
+```bash title="Terminal"
+trace enable:true filter:TXPOWPROCESSOR
+```
+
+```bash title="Terminal"
+trace enable:false
+```
+
+
+
+
+
+## Backup
+
+
+
+
+
+`Perform a chain or seed re-sync from an archive node.`
+
+A chain re-sync will put your node on the correct chain so you are in sync with the latest tip block.
+
+Use a chain re-sync if your node has been offline for too long and cannot catchup. Seed Phrase is not required.
+
+A seed re-sync will wipe the wallet and re-generate your keys from your seed phrase. Your coins will be restored.
+
+Only use a seed re-sync if you have lost your node and do not have a backup.
+
+You can also check the integrity of your archive db.
+
+
+
+Parameters used with the `action:` parameter:
+
+
+
+Examples:
+
+```bash title="Terminal"
+archive action:resync host:auto
+```
+
+```bash title="Terminal"
+archive action:resync host:89.98.89.98:8888 phrase:"YOUR 24 WORD SEED PHRASE"
+```
+
+```bash title="Terminal"
+archive action:resync host:89.98.89.98:8888 phrase:"YOUR 24 WORD SEED PHRASE" keys:90 keyuses:2000
+```
+
+```bash title="Terminal"
+archive action:integrity
+```
+
+```bash title="Terminal"
+archive action:export file:archiveexport-ddmmyy.gzip
+```
+
+```bash title="Terminal"
+archive action:import file:archiveexport-ddmmyy.gzip
+```
+
+```bash title="Terminal"
+archive action:inspect file:archiveexport-ddmmyy.gzip
+```
+
+```bash title="Terminal"
+archive action:addresscheck address:Mx..
+```
+
+
+
+
+
+`Backup your node. Uses a timestamped name by default.`
+
+
+
+Examples:
+
+```bash title="Terminal"
+backup
+```
+
+```bash title="Terminal"
+backup password:Longsecurepassword456
+```
+
+```bash title="Terminal"
+backup password:Longsecurepassword456 confirm:Longsecurepassword456
+```
+
+```bash title="Terminal"
+backup password:Longsecurepassword456 file:my-backup-01-Jan-22.bak maxhistory:100
+```
+
+```bash title="Terminal"
+backup auto:true
+```
+
+
+
+
+
+`View information about your MegaMMR. Export and Import complete MegaMMR data.`
+
+You must be running with the -megammr start up parameter.
+
+
+
+Parameters used with the `action:` parameter:
+
+
+
+Examples:
+
+```bash title="Terminal"
+megammr
+```
+
+```bash title="Terminal"
+megammr action:info
+```
+
+```bash title="Terminal"
+megammr action:export file:mmrfile.mmr
+```
+
+```bash title="Terminal"
+megammr action:import file:mmrfile.mmr
+```
+
+
+
+
+`Perform a quick chain sync, seed re-sync or restore a backup from a MegaMMR node. Fast.`
+
+If you are on the wrong chain - all you need to provide is the 'host' to connect to.
+
+If you are on a fresh node, with different seed phrase, provide 'host' and 'phrase' to resync with that Wallet.
+
+You can load an old backup and resync to the chain tip aswell.
+
+The host you connect to MUST be running with -megammr.
+
+
+
+Parameters used with the `action:` parameter:
+
+
+
+Examples:
+
+```bash title="Terminal"
+megammrsync action:mydetails
+```
+
+```bash title="Terminal"
+megammrsync action:resync host:34.32.59.133:9001
+```
+
+```bash title="Terminal"
+megammrsync action:resync host:34.32.59.133:9001 file:myoldbackup.bak password:backup_password
+```
+
+```bash title="Terminal"
+megammrsync action:resync host:34.32.59.133:9001 phrase:"YOUR 24 WORD SEED PHRASE" keyuses:2000
+```
+
+
+
+
+
+`Export the archive data of your node to a MySQL database.`
+
+The MySQL archive export (in .dat or .gzip format) can be used to perform a chain re-sync to put users on the correct chain or a seed re-sync to restore access to lost funds, using the 24 word seed phrase.
+
+Query an address for its history of spent and unspent coins.
+
+Additionally export the MySQL db to a .dat or .gzip file for resyncing with 'reset' or 'archive' command.
+
+You can also create a coins db in MySQL to search for coins using SQL queries.
+
+
+
+Parameters used with the `action:` parameter:
+
+
+
+Examples:
+
+```bash title="Terminal"
+mysql host:mysqlhost:port database:archivedb user:archiveuser password:archivepassword action:info
+```
+
+```bash title="Terminal"
+mysql host:dockermysql database:archivedb user:archiveuser password:archivepassword action:info
+```
+
+```bash title="Terminal"
+mysql host:mysqlhost:port database:archivedb user:archiveuser password:archivepassword action:integrity
+```
+
+```bash title="Terminal"
+mysql host:mysqlhost:port database:archivedb user:archiveuser password:archivepassword action:update
+```
+
+```bash title="Terminal"
+mysql host:mysqlhost:port database:archivedb user:archiveuser password:archivepassword action:addresscheck address:MxG08..
+```
+
+```bash title="Terminal"
+mysql host:mysqlhost:port database:archivedb user:archiveuser password:archivepassword action:resync
+```
+
+```bash title="Terminal"
+mysql host:mysqlhost:port database:archivedb user:archiveuser password:archivepassword action:resync phrase:"24 WORDS HERE" keys:90 keyuses:2000
+```
+
+
+
+
+
+`Create and search a coins database from your MySQL Archive.`
+
+Create a coins db from your mysql data and search it.
+
+Use the same database you already use for your TxBlocks. This creates a new table.
+
+You can then search for coins using SQL queries.
+
+
+
+Parameters used with the `action:` parameter:
+
+
+
+Examples:
+
+```bash title="Terminal"
+mysqlcoins action:update maxcoins:100 host:127.0.0.1:3307 database:coinsdb user:myuser password:myuser
+```
+
+```bash title="Terminal"
+mysqlcoins action:search where:"address='0x791E78C60652B0E19B8FE9EB035B122B261490C477FD76E38C0C928187076103'" host:127.0.0.1:3307 database:coinsdb user:myuser password:myuser
+```
+
+```bash title="Terminal"
+mysqlcoins action:search query:"address='0x791E78C60652B0E19B8FE9EB035B122B261490C477FD76E38C0C928187076103' AND state LIKE '%0xFFEEDD%' LIMIT 10" host:127.0.0.1:3307 database:coinsdb user:myuser password:myuser
+```
+
+
+
+
+
+`Reset your node in various ways.`
+
+You MUST wait until all your original keys are created before this is allowed.
+
+
+
+Parameters used with the `action:` parameter:
+
+
+
+Examples:
+
+```bash title="Terminal"
+reset archivefile:archiveexport-jul23.gz action:chainsync
+```
+
+```bash title="Terminal"
+reset archivefile:archiveexport-jul23.gz action:seedsync keyuses:1000 phrase:"ENTER 24 WORDS HERE"
+```
+
+```bash title="Terminal"
+reset archivefile:archiveexport-jul23.gz action:restore file:backup-jul23.bak password:Longsecurepassword456
+```
+
+
+
+
+
+`Restore your node from a backup.`
+
+You MUST wait until all your original keys are created before this is allowed.
+
+
+
+Examples:
+
+```bash title="Terminal"
+restore file:my-full-backup-01-Jan-22 password:Longsecurepassword456
+```
+
+
+
+
+
+`Restore the entire system AND perform an archive chain sync. Use when the backup is old.`
+
+The node will be restored and an archive chain sync will commence from the last block in the backup.
+
+You MUST wait until all your original keys are created before this is allowed.
+
+
+
+Examples:
+
+```bash title="Terminal"
+restoresync file:my-full-backup-01-Jan-22 password:Longsecurepassword456 host:89.98.89.98:9001
+```
+
+```bash title="Terminal"
+restoresync file:my-full-backup-01-Jan-22 password:Longsecurepassword456 keyuses:1000 host:89.98.89.98:9001
+```
+
+
+
+
+
+`View, encrypt/decrypt or wipe/restore your seed phrase and private keys.`
+
+
+DO NOT SHARE YOUR SEED PHRASE WITH ANYONE.
+
+BE CAREFUL. ENSURE YOU HAVE A BACKUP AND SECURE RECORD OF YOUR PASSPHRASE BEFORE LOCKING.
+
+
+
+You must have your passphrase to unlock your private keys.
+
+
+
+Parameters used with the `action:` parameter:
+
+
+
+Examples:
+
+```bash title="Terminal"
+ vault action:wipekeys seed:0xDD4E..
+```
+
+```bash title="Terminal"
+ vault action:restorekeys phrase:\"SPRAY LAMP..\"
+```
+
+```bash title="Terminal"
+vault action:passwordlock password:your_password
+```
+
+```bash title="Terminal"
+vault action:passwordlock password:your_password confirm:your_password
+```
+
+```bash title="Terminal"
+vault action:passwordunlock password:your_password
+```
+
+
+
+
+
+## MiniDapp System
+
+
+
+
+`MiniDAPP System management.`
+
+Install, update or uninstall MiniDapps and set their permissions to READ/WRITE. Default permission is READ.
+
+DO NOT give WRITE permissions to MiniDapps you do not trust!
+Accept/deny pending commands from MiniDapps with READ permissions.
+
+
+
+Parameters used with the `action:` parameter:
+
+
+
+Examples:
+
+```bash title="Terminal"
+mds action:list
+```
+
+```bash title="Terminal"
+mds action:install file:wallet_1.0.mds.zip
+```
+
+```bash title="Terminal"
+mds action:install file:/Users/MyUser/Downloads/wallet_1.0.mds.zip trust:write
+```
+
+```bash title="Terminal"
+mds action:update uid:0xABA3.. file:wallet_2.0.mds.zip
+```
+
+```bash title="Terminal"
+mds action:uninstall uid:0xABA3..
+```
+
+```bash title="Terminal"
+mds action:pending
+```
+
+```bash title="Terminal"
+mds action:accept uid:0xCDF6..
+```
+
+```bash title="Terminal"
+mds action:deny uid:0xCDF6..
+```
+
+```bash title="Terminal"
+mds action:permission uid:0xABA3.. trust:write
+```
+
+
+
+
+
+`Show if this MiniDAPP is READ or WRITE mode.`
+
+Can be called from a MiniDapp to check whether it is in READ or WRITE mode.
+
+```bash title="Terminal"
+checkmode
+```
+
+
+
+
+
+`Show if a pending command UID is in the pending list`
+
+```bash title="Terminal"
+checkpending
+```
+
+
+
+
+
+`Check if the system is restoring`
+
+Check whether Minima is currently being restored, is shutting down and if shutdown is complete.
+
+```bash title="Terminal"
+checkrestore
+```
+
+
+
+
+
+## Network
+
+
+
+
+`Connect to a network Minima instance.`
+
+Connect to another node to join the main network or to create a private test network.
+
+Set your own host using the -host parameter at start up.
+
+
+
+Examples:
+
+```bash title="Terminal"
+connect host:94.0.239.117:9001
+```
+
+
+
+
+
+`Disconnect from a connected or connecting host.`
+
+Optionally disconnect from all hosts.
+
+
+
+Examples:
+
+```bash title="Terminal"
+disconnect uid:all
+```
+
+```bash title="Terminal"
+disconnect uid:CVNPMLPOCQ0HQ
+```
+
+
+
+
+
+`Send a message to one or all of your direct peers.`
+
+
+
+Examples:
+
+```bash title="Terminal"
+message data:"hello" uid:CVNPMLPOCQ0HQ
+```
+
+
+
+
+
+`Show network status or reset traffic counter.`
+
+```bash title="Terminal"
+network
+```
+
+
+
+Parameters used with the `action:` parameter:
+
+
+
+Examples:
+
+```bash title="Terminal"
+network
+```
+
+```bash title="Terminal"
+network action:list
+```
+
+```bash title="Terminal"
+network action:reset
+```
+
+```bash title="Terminal"
+network action:recalculateip
+```
+
+
+
+
+
+`Prints the peers list this node has. P2P must be enabled.`
+
+
+
+Parameters used with the `action:` parameter:
+
+
+
+Examples:
+
+```bash title="Terminal"
+peers
+```
+
+```bash title="Terminal"
+peers action:list
+```
+
+```bash title="Terminal"
+peers action:addpeers peerslist:["31.125.188.214:9001","94.0.239.117:9001"]
+```
+
+
+
+
+
+`Ping a host and get back Minima Node info.`
+
+
+
+Examples:
+
+```bash title="Terminal"
+ping host:
+```
+
+
+
+
+
+`Enable and disable RPC on port 9005 (default is off).`
+
+
+
+Examples:
+
+```bash title="Terminal"
+rpc enable:true
+```
+
+```bash title="Terminal"
+rpc enable:true ssl:true password:minima
+```
+
+```bash title="Terminal"
+rpc enable:true password:minima
+```
+
+```bash title="Terminal"
+rpc enable:false
+```
+
+
+
+
+
+`Add a web hook that is called with Minima events as they happen.`
+
+
+
+Parameters used with the `action:` parameter:
+
+
+
+Examples:
+
+```bash title="Terminal"
+webhooks action:list
+```
+
+```bash title="Terminal"
+webhooks action:add hook:http://127.0.0.1/myapi.php
+```
+
+```bash title="Terminal"
+webhooks action:remove hook:http://127.0.0.1/myapi.php
+```
+
+```bash title="Terminal"
+webhooks action:add hook:http://127.0.0.1/myapi.php filter:MINING
+```
+
+```bash title="Terminal"
+webhooks action:clear
+```
+
+
+
+
+## Maxima
+
+
+
+
+
+`Manage your Maxima contacts. List, refresh, add, remove or search contacts.`
+
+
+
+Parameters used with the `action:` parameter:
+
+
+
+Examples:
+
+```bash title="Terminal"
+maxcontacts
+```
+
+```bash title="Terminal"
+maxcontacts action:list
+```
+
+```bash title="Terminal"
+maxcontacts action:add contact:MxG18H..
+```
+
+```bash title="Terminal"
+maxcontacts action:remove id:1
+```
+
+```bash title="Terminal"
+maxcontacts action:search publickey:0x3081..
+```
+
+
+
+
+
+`Create a 128 bit RSA public and private key.`
+
+You can use them with maxsign and maxverify.
+
+```bash title="Terminal"
+maxcreate
+```
+
+
+
+
+
+`Perform extra functions on Maxima.`
+
+
+
+Parameters used with the `action:` parameter:
+
+
+
+Examples:
+
+```bash title="Terminal"
+maxextra action:staticmls host:Mx...@34.190.784.3:9001
+```
+
+```bash title="Terminal"
+maxextra action:staticmls host:clear
+```
+
+```bash title="Terminal"
+maxextra action:addpermanent publickey:0x3081..
+```
+
+```bash title="Terminal"
+maxextra action:removepermanent publickey:0x3081..
+```
+
+```bash title="Terminal"
+maxextra action:listpermanent
+```
+
+```bash title="Terminal"
+maxextra action:clearpermanent
+```
+
+```bash title="Terminal"
+maxextra action:getaddress maxaddress:MAX#0x3081..#Mx..@34.190.784.3:9001
+```
+
+```bash title="Terminal"
+maxextra action:mlsinfo
+```
+
+```bash title="Terminal"
+maxextra action:allowallcontacts enable:false
+```
+
+```bash title="Terminal"
+maxextra action:addallowed publickey:0x2451..
+```
+
+```bash title="Terminal"
+maxextra action:listallowed
+```
+
+```bash title="Terminal"
+maxextra action:clearallowed
+```
+
+
+
+
+
+`Check your Maxima details, send a message/data.`
+
+
+
+Parameters used with the `action:` parameter:
+
+
+
+Examples:
+
+```bash title="Terminal"
+maxima action:info
+```
+
+```bash title="Terminal"
+maxima action:setname name:myname
+```
+
+```bash title="Terminal"
+maxima action:hosts
+```
+
+```bash title="Terminal"
+maxima action:send id:1 application:appname data:0xFED5..
+```
+
+```bash title="Terminal"
+maxima action:send to:MxG18H.. application:appname data:0xFED5..
+```
+
+```bash title="Terminal"
+maxima action:send publickey:0xCD34.. application:ip:port data:0xFED5.. poll:true
+```
+
+```bash title="Terminal"
+maxima action:refresh
+```
+
+
+
+
+
+`Sign and verify data with your Maxima ID.`
+
+Returns the signature of the data, signed with your Maxima private key or the specified key.
+
+
+
+Examples:
+
+```bash title="Terminal"
+maxsign data:0xCD34..
+```
+
+```bash title="Terminal"
+maxsign data:0xCD34.. privatekey:0x3081..
+```
+
+
+
+
+
+`Verify data with a Maxima public key. Returns valid true or false.`
+
+
+
+Examples:
+
+```bash title="Terminal"
+maxverify data:0xCD34.. publickey:0xFED5.. signature:0x4827..
+```
+
+
+
+
+## Scripts
+
+
+
+
+
+`Add a new custom script.`
+
+Track ALL coins with this script address or just ones with state variables relevant to you.
+
+
+
+Examples:
+
+```bash title="Terminal"
+newscript trackall:true script:"RETURN SIGNEDBY(0x1539..) AND SIGNEDBY(0xAD25..)"
+```
+
+```bash title="Terminal"
+newscript trackall:false script:"RETURN (@BLOCK GTE PREVSTATE(1) OR @COINAGE GTE PREVSTATE(4)) AND VERIFYOUT(@INPUT PREVSTATE(2) @AMOUNT @TOKENID FALSE)"
+```
+
+
+
+
+
+`Remove a custom script.`
+
+BE CAREFUL not to remove a script you need.
+
+```bash title="Terminal"
+removescript
+```
+
+
+
+Examples:
+
+```bash title="Terminal"
+removescript address:0xFFE678768CDE..
+```
+
+```bash title="Terminal"
+removescript address:MxFFE678768CDE..
+```
+
+
+
+
+
+`Test run a script with predefined parameters without executing on chain.`
+
+Scripts will be auto cleaned for you.
+
+
+
+Examples:
+
+```bash title="Terminal"
+runscript script:"RETURN SIGNEDBY(0xFF..) AND @BLOCK GT 100" globals:\{"@BLOCK":"101"} signatures:["0xFF"]
+```
+
+```bash title="Terminal"
+runscript script:"LET st=STATE(99) LET ps=PREVSTATE(99) IF st EQ ps AND @COINAGE GT 20 AND SIGNEDBY(0xFF) THEN RETURN TRUE ELSEIF st GT ps AND SIGNEDBY(0xEE) THEN RETURN TRUE ENDIF" globals:\{"@COINAGE":"23"} state:\{"99":"0"} prevstate:\{"99":"0"} signatures:["0xFF"]
+```
+
+```bash title="Terminal"
+runscript script:"MAST 0x0E3.." extrascripts:\{"RETURN TRUE":"0x000.."}
+```
+
+
+
+
+
+`List all scripts or search for a script / basic address your node is tracking.`
+
+
+
+Examples:
+
+```bash title="Terminal"
+scripts
+```
+
+```bash title="Terminal"
+scripts address:0xFED5..
+```
+
+```bash title="Terminal"
+scripts address:MxG087..
+```
+
+
+
+
+
+`Show the complete Grammar for Minima KISSVM scripting.`
+
+```bash title="Terminal"
+tutorial
+```
+
+
+
+
+## Search
+
+
+
+
+
+`Search for coins that are relevant to you or in the unpruned chain.`
+
+
+
+Examples:
+
+```bash title="Terminal"
+coins
+```
+
+```bash title="Terminal"
+coins relevant:true sendable:true
+```
+
+```bash title="Terminal"
+coins relevant:true amount:10
+```
+
+```bash title="Terminal"
+coins coinid:0xEECD7..
+```
+
+```bash title="Terminal"
+coins relevant:true tokenid:0xFED5..
+```
+
+```bash title="Terminal"
+coins relevant:true address:0xCEF6.. tokenid:0x00
+```
+
+```bash title="Terminal"
+coins relevant:true address:MxABC9..
+```
+
+
+
+
+
+`Get a list of all your public keys or create a new key.`
+
+Each public key can be used for signing securely 262144 (64^3) times.
+
+
+
+Parameters used with the `action:` parameter:
+
+
+
+Examples:
+
+```bash title="Terminal"
+keys
+```
+
+```bash title="Terminal"
+keys action:list
+```
+
+```bash title="Terminal"
+keys action:list publickey:0xFFEE56..
+```
+
+```bash title="Terminal"
+keys action:new
+```
+
+
+
+
+
+`List all tokens in the unpruned chain.`
+
+Optionally import or export tokens to share token data.
+
+
+
+Parameters used with the `action:` parameter:
+
+
+
+Examples:
+
+```bash title="Terminal"
+tokens
+```
+
+```bash title="Terminal"
+tokens tokenid:0xFED5..
+```
+
+```bash title="Terminal"
+tokens action:export tokenid:0xFED5..
+```
+
+```bash title="Terminal"
+tokens action:import data:0x000..
+```
+
+
+
+
+
+`Search for a specific TxPoW in the unpruned chain or your mempool.`
+
+Search by txpowid, block or 0x / Mx address.
+
+
+
+Examples:
+
+```bash title="Terminal"
+txpow txpowid:0x000..
+```
+
+```bash title="Terminal"
+txpow block:200
+```
+
+```bash title="Terminal"
+txpow address:0xCEF6..
+```
+
+
+
+
+
+## Send
+
+
+
+
+
+`Create a multisig coin that can only be used in a txn signed by root OR n of m given public keys.`
+
+Provide your Vault password to temporarily decrypt the private keys when creating the coin or signing a transaction.
+
+
+
+Parameters used with the `action:` parameter:
+
+
+
+Examples:
+
+```bash title="Terminal"
+multisig action:create id:2of3multisig amount:100 publickeys:["0xFED5..","0xABD6..","0xFD8B.."] required:2 password:your_password
+```
+
+```bash title="Terminal"
+multisig action:create id:3of3multisigroot amount:100 publickeys:["0xFED5..","0xABD6..","0xFD8B.."] required:3 root:0xFFE..
+```
+
+```bash title="Terminal"
+multisig action:list
+```
+
+```bash title="Terminal"
+multisig action:list id:2of3multisig
+```
+
+```bash title="Terminal"
+multisig action:spend id:3of3multisigroot amount:5 address:0xFF..
+```
+
+```bash title="Terminal"
+multisig action:spend coinid:0x17EA.. amount:5 address:0xFF.. file:multisig.txn
+```
+
+```bash title="Terminal"
+multisig action:sign file:multispend_1673351592845.txn
+```
+
+```bash title="Terminal"
+multisig action:sign file:multisig.txn password:your_password
+```
+
+```bash title="Terminal"
+multisig action:view file:multisig.txn
+```
+
+```bash title="Terminal"
+multisig action:post file:signed_multispend_1673351592845.txn
+```
+
+```bash title="Terminal"
+multisig action:post file:signed_multisig.txn
+```
+
+
+
+
+
+`Send Minima or custom tokens to a wallet or custom script address.`
+
+Optionally, send to multiple addresses in one transaction; split UTxOs; add state variables or include a burn.
+
+
+
+Examples:
+
+```bash title="Terminal"
+send address:0xFF.. amount:10
+```
+
+```bash title="Terminal"
+send address:0xFF.. amount:10 tokenid:0xFED5.. burn:0.1
+```
+
+```bash title="Terminal"
+send address:0xFF.. amount:10 split:5 burn:0.1
+```
+
+```bash title="Terminal"
+send multi:["0xFF..:10","0xEE..:10","0xDD..:10"] split:10
+```
+
+```bash title="Terminal"
+send amount:1 address:0xFF.. state:{"0":"0xEE..","1":"0xDD.."}
+```
+
+
+
+
+
+`Send function that adds 'send' commands to a list and polls every 30 seconds until the return status is 'true'.`
+
+```bash title="Terminal"
+sendpoll
+```
+
+
+
+Parameters used with the `action:` parameter:
+
+
+
+Examples:
+
+```bash title="Terminal"
+sendpoll address:0xFF.. amount:10
+```
+
+```bash title="Terminal"
+sendpoll address:0xFF.. amount:10 tokenid:0xFED5.. burn:0.1
+```
+
+```bash title="Terminal"
+sendpoll action:list
+```
+
+```bash title="Terminal"
+sendpoll action:remove uid:0x..
+```
+
+
+
+
+
+`Create a txn but don't sign it.`
+
+Constructs and outputs an unsigned transaction to a file in the base folder.
+
+The output .txn file can then be imported to an offline node for signing. Must be done from an online node as the MMR proofs for the input coins are added.
+
+Useful when the keys on an online node are wiped or password locked.
+
+
+
+Examples:
+
+```bash title="Terminal"
+sendnosign address:0xFF.. amount:10
+```
+
+```bash title="Terminal"
+sendnosign address:0xFF.. amount:10 tokenid:0xFED5.. burn:0.1
+```
+
+```bash title="Terminal"
+sendnosign address:0xFF.. amount:10 split:5 burn:0.1
+```
+
+```bash title="Terminal"
+sendnosign multi:["0xFF..:10","0xEE..:10","0xDD..:10"] split:10
+```
+
+```bash title="Terminal"
+sendnosign amount:1 address:0xFF.. state:{"0":"0xEE..","1":"0xDD.."}
+```
+
+
+
+
+
+`Sign a transaction previously created by the 'sendnosign' command, by specifying its .txn file.`
+
+Optionally, if the node is Vault password locked, provide the Vault password to decrypt the keys for signing.
+
+The keys will be automatically re-encrypted after signing.
+
+Can be signed on an offline node, then posted from an online node.
+
+
+
+Examples:
+
+```bash title="Terminal"
+sendsign file:unsignedtransaction-1674907380057.txn
+```
+
+```bash title="Terminal"
+sendsign file:C:\\Users\\unsignedtransaction-1674907380057.txn password:your_vaultpassword
+```
+
+
+
+
+
+`View a transaction (signed or unsigned).`
+
+View the details of a transaction created by the 'sendnosign' command by specifying its .txn file.
+
+
+
+Examples:
+
+```bash title="Terminal"
+sendview file:unsignedtransaction-1674907380057.txn
+```
+
+```bash title="Terminal"
+sendview file:C:\\Users\\unsignedtransaction-1674907380057.txn
+```
+
+
+
+
+
+`Post a transaction previously created and signed using the 'sendnosign' and 'sendsign' commands.`
+
+Must be posted from an online node within approximately 24 hours of creation to ensure MMR proofs are valid.
+
+
+
+Examples:
+
+```bash title="Terminal"
+sendpost file:signedtransaction-1674907380057.txn
+```
+
+```bash title="Terminal"
+sendpost file:C:\\Users\\signedtransaction-1674907380057.txn
+```
+
+
+
+
+## Signatures
+
+
+
+
+
+`Sign the data with the publickey.`
+
+Returns the signature of the data, signed with the corresponding private key.
+
+
+
+```bash title="Terminal"
+sign data:0xCD34..
+```
+
+
+
+
+
+`Verify a signature.`
+
+Returns valid true or false.
+
+
+
+Examples:
+
+```bash title="Terminal"
+verify data:0xCD34.. publickey:0xFED5.. signature:0x4827..
+```
+
+
+
+
+
+## Transactions
+
+
+
+
+
+`View the latest Burn metrics`
+
+View the number of burn transactions and the maximum, median, average and minimum burn metrics for the last 1, 10 and 50 blocks.
+
+Use as an indicator for an appropriate burn amount for transactions.
+
+**Examples:**
+
+```bash title="Terminal"
+burn
+```
+
+
+
+
+
+`Enable detailed logs for script errors or mining activity.`
+
+Enable detailed logs for script errors, mining activity, Maxima, network messages, blocks, or IBD processing.
+
+
+
+Examples:
+
+```bash title="Terminal"
+logs scripts:true
+```
+
+```bash title="Terminal"
+logs scripts:false mining:true
+```
+
+
+
+
+
+`Automatically set the MMR proofs and scripts for a transaction.`
+
+Only run this command when a transaction is ready to be posted.
+
+```bash title="Terminal"
+txnbasics
+```
+
+
+
+Examples:
+
+```bash title="Terminal"
+txnbasics id:simpletxn
+```
+
+
+
+
+
+`Show details about the transaction.`
+
+Verify whether the inputs, outputs, signatures, proofs, and scripts are valid.
+
+```bash title="Terminal"
+txncheck
+```
+
+
+
+Examples:
+
+```bash title="Terminal"
+txncheck id:multisig
+```
+
+
+
+
+
+`Clear ALL the Witness data for a transaction.`
+
+Clears signatures, mmr proofs and script proofs.
+
+
+
+Examples:
+
+```bash title="Terminal"
+txnclear id:multisig
+```
+
+
+
+
+
+`Create a custom transaction.`
+
+The first step before defining the inputs and outputs.
+
+
+
+Examples:
+
+```bash title="Terminal"
+txncreate id:multisig
+```
+
+
+
+
+
+`Delete a previously created custom transaction.`
+
+
+
+Examples:
+
+```bash title="Terminal"
+txndelete id:multisig
+```
+
+
+
+
+
+`Export a transaction as HEX or to a file.`
+
+
+
+Examples:
+
+```bash title="Terminal"
+txnexport id:simpletxn
+```
+
+```bash title="Terminal"
+txnexport id:multisig file:multisig.txn
+```
+
+
+
+
+
+`Import a transaction from previously exported HEX data or a .txn file.`
+
+
+
+Examples:
+
+```bash title="Terminal"
+txnimport data:0x0000..
+```
+
+```bash title="Terminal"
+txnimport id:simpletxn data:0x0000..
+```
+
+```bash title="Terminal"
+txnimport id:multisig file:multisig.txn
+```
+
+
+
+
+
+`Add a coin as an input to a transaction.`
+
+```bash title="Terminal"
+ txninput
+```
+
+
+
+Examples:
+
+```bash title="Terminal"
+txninput id:simpletxn coinid:0xD0BF..
+```
+
+```bash title="Terminal"
+txninput id:multisig coinid:0xD0BF.. scriptmmr:true
+```
+
+```bash title="Terminal"
+txninput id:posttxn coindata:0x000..
+```
+
+```bash title="Terminal"
+txninput id:eltootxn floating:true address:0xFED5.. amount:10 tokenid:0x00
+```
+
+
+
+
+
+`List your custom transactions. Includes previously posted transactions.`
+
+
+
+Examples:
+
+```bash title="Terminal"
+txnlist
+```
+
+```bash title="Terminal"
+txnlist id:multisig
+```
+
+
+
+
+
+`Create a transaction output.`
+
+This will create a new coin (UTxO).
+
+If the sum of inputs > outputs, the difference will be burned unless change to the sender is defined as an output.
+
+
+
+Examples:
+
+```bash title="Terminal"
+txnoutput id:simpletxn amount:10 address:0xFED5..
+```
+
+```bash title="Terminal"
+txnoutput id:multisig amount:10 address:0xFED5.. tokenid:0xCEF5.. storestate:false
+```
+
+```bash title="Terminal"
+txnoutput id:eltootxn amount:10 address:0xFED5..
+```
+
+
+
+
+
+`Add scripts to a transaction.`
+
+If it is a single script, and not one created with mmrcreate, leave the proof blank.
+
+If it is an mmrcreate script, include the proof.
+
+
+
+Examples:
+
+```bash title="Terminal"
+txnscript id:txnmast scripts:{"RETURN TRUE":""}
+```
+
+```bash title="Terminal"
+txnscript id:txnmast scripts:{"RETURN TRUE":"0x000.."}
+```
+
+
+
+
+
+`Sign a transaction.`
+
+```bash title="Terminal"
+txnsign
+```
+
+
+
+Examples:
+
+```bash title="Terminal"
+txnsign id:simpletxn publickey:auto
+```
+
+```bash title="Terminal"
+txnsign id:simpletxn publickey:auto password:your_password
+```
+
+```bash title="Terminal"
+txnsign id:multisig publickey:0xFD8B..
+```
+
+```bash title="Terminal"
+txnsign id:simpletxn publickey:auto txnpostauto:true
+```
+
+
+
+
+
+`Add a state variable to a transaction.`
+
+
+
+Examples:
+
+```bash title="Terminal"
+txnstate id:multisig port:0 value:0xFED5..
+```
+
+```bash title="Terminal"
+txnstate id:multisig port:1 value:100
+```
+
+```bash title="Terminal"
+txnstate id:multisig port:1 value:"string"
+```
+
+
+
+
+## External wallet transactions
+
+These are available from v1.0.41 onwards.
+
+The following commands allow you to construct, sign (online or offline) and post transactions on behalf of specific wallets that are separate from the node's own wallet.
+
+They should be used alongside the `keys action:genkey` OR `keys action:genkey phrase:"MY SEED PHRASE"` command which generate a new private/public key pair and wallet address from a random or given seed phrase that is independent from the node itself.
+
+Note that `sendfrom` and `createfrom` require a [Mega MMR node](/docs/run-a-node/mega-node).
+
+
+
+
+
+`Send Minima or Tokens from a certain address with a given private key.`
+
+Must be used from an ONLINE node.
+
+
+
+Examples:
+
+```bash title="Terminal"
+sendfrom fromaddress:0xFEEED.. address:0xABCD.. script:"INSERT SCRIPT" privatekey:0xGHFK.. keyuses:5
+```
+
+
+
+
+
+`Create and export an unsigned txn from a certain address.`
+
+Must be run from a node using the `-megammr` start up parameter. Can be used from an ONLINE or OFFLINE node.
+
+
+
+Examples:
+
+```bash title="Terminal"
+createfrom fromaddress:0xFEEED.. address:0xABCD.. script:"INSERT SCRIPT"
+```
+
+Examples:
+
+
+
+
+
+`Sign a createfrom txn.`
+
+Can be used from an ONLINE or OFFLINE node.
+
+
+
+Examples:
+
+```bash title="Terminal"
+signfrom data:0x000000.. address:0xABCD.. script:"INSERT SCRIPT" keyuses:5
+```
+
+
+
+
+
+`Post a signfrom txn to the network`
+
+Must be used from an ONLINE node.
+
+
+
+Examples:
+
+```bash title="Terminal"
+postfrom data:0x000000.. mine:true
+```
+
+
+
+
diff --git a/content/docs/development/testnet-multiple.mdx b/content/docs/development/testnet-multiple.mdx
index 35156e8..c86709a 100644
--- a/content/docs/development/testnet-multiple.mdx
+++ b/content/docs/development/testnet-multiple.mdx
@@ -1,172 +1,172 @@
----
-title: Multiple Node Testnet
-description: Learn how to develop on the Minima blockchain
-tag: development
-icon: Network
----
-
-At its core, Minima is a Java application, so first make sure you have Java installed. Download from [here](https://www.java.com/en/download/).
-
-You will need the latest release of the minima.jar file which can be downloaded from GitHub [here](https://github.com/minima-global/Minima/releases)
-
-We will be using a server or desktop command line interface (CLI) to start Minima.
-
-## 1. Start the genesis node
-
-1. Create a new folder and copy the minima.jar into that folder. We will run everything from there.
-2. Copy the path to the file and from the command line, `cd` into that folder
-3. Enter the following command
-
-**Node 1:**
-
-```bash title="Terminal"
-java -jar minima.jar -data minidata1 -basefolder minidata1 -genesis -test -nop2p -mdsenable -mdspassword [INSERT NODE1 PASSWORD]
-```
-
-- Replace placeholder `[INSERT NODE1 PASSWORD]` with a custom password for your node 1
-
-This will start a node on the default ports of 9001-5.
-
-Check your balance with `balance`.
-
-## 2. Start the second node
-
-We create a second node to test transactions between two nodes, note that we will need to:
-
-- remove the `-genesis` parameter,
-- change the data and base folders,
-- add the `-port` parameter to start it on a different port,
-- add the `-connect 127.0.0.1:9001` parameter to connect this node to the genesis node.
-
-**Node 2:**
-
-1. Open a new command line window and enter the following command
-
-```bash title="Terminal"
-java -jar minima.jar -data minidata2 -basefolder minidata2 -test -nop2p -mdsenable -mdspassword [INSERT NODE2 PASSWORD] -port 10001 -connect 127.0.0.1:9001
-```
-
-- Replace placeholder `[INSERT NODE2 PASSWORD]` with a custom password for your node 2
-- Optionally set a port of your choice, we use 10001 here
-
-**You should now have two nodes up and running that are connected to eachother! **
-
-## Restarting the nodes
-
-You can shutdown the nodes by running `quit` from the command line window.
-
-To **restart** the same node from where you left off, re run the command for either node above **removing the `-genesis` parameter for node 1.**
-
-To **delete** the data and start a new clean nodes, re run the command for each node adding the `-clean` parameter.
-
-**ALL DATA WILL BE LOST AND A NEW SEED PHRASE WILL BE GENERATED.**
-
-## Restarting the node
-
-You can shutdown the node by running `quit` from the command line window.
-
-To **restart** the same node from where you left off, re run the command above **removing the `-genesis` parameter. **
-
-```bash title="Terminal"
-java -jar minima.jar -data minidata -basefolder minidata -test -nop2p -mdsenable -mdspassword [INSERT PASSWORD]
-```
-
-To **delete** the data and start a new clean node, re run the command from step 3 above, adding the `-clean` parameter.
-
-
- **WARNING!** The `-clean` parameter will delete all data and start a new fresh
- node. **ALL DATA WILL BE LOST AND A NEW SEED PHRASE WILL BE GENERATED.**
-
-
-
-```bash title="Terminal"
-java -jar minima.jar -data minidata -basefolder minidata -genesis -test -nop2p -mdsenable -mdspassword [INSERT PASSWORD] -clean
-```
-
-## Start up parameters
-
-
-
-
-- `-data [foldername/path]` : the data folder where all the config files for this node are stored. Default is a hidden .minima folder under the user's home directory. If you want to specify a folder not in the user's home directory, you must use the complete path.
-- `-basefolder [foldername/path]` : specify a default file creation / backup / restore folder. Default is the user's home directory. Can be the same as the data folder provided.
-- `-genesis` : delete all old data and start the node from the genesis block
-- `-nop2p` : Disable the automatic P2P system
-- `-test` : this uses test settings which have a faster blocktime and only keep a shorter chain in memory. If you are compiling Minima yourself you can edit these to your needs.
-- `-mdsenable` : start the MiniDapp system
-- `-mdspassword` : set the password to login to the MiniDapp system
-- `-port` : set the starting port
-- `-connect [ip:port]` : Disable the automatic P2P system and create your own network by manually connecting to this list of host:port
-
-
-
-
-The following start up parameters can optionally be specified when starting your Docker node.
-
-
- To add/remove parameters after a node has been started, you must `quit` the
- node and restart it, adding/removing the required parameters. `[]` square
- brackets indicate where an input is required, **the brackets should not be
- included.**
-
-
-General
-
-- `-clean` : CAREFUL! Clears existing data, starts a new fresh node. All coins will be lost.
-- `-port [port]` : specify the initial port for Minima to use. Range used will be the specified port +4. Default is 9001-9005.
-- `-host [ipaddress]` : specify the host IP
-- `-dbpassword [yourdbpassword]` : Main Wallet / SQL AES password - MUST be specified on first launch. **CANNOT be changed later.**
-- `-allowallip` : Allow all IPs for Maxima / Networking. Local IPs won't be allowed otherwise.
-- `-archive` : Run an Archive node - store all archive data / the cascade to allow for resyncs from this node
-- `-daemon` : Run in daemon mode with no stdin input (if running Minima as a background service)
-- `-isclient` : Tells the P2P System that this node can't accept incoming connections
-- `-server` : Use Server settings - this node can accept incoming connections
-- `-desktop` : Use Desktop settings - this node can't accept incoming connections
-
-Folders
-
-- `-data [foldername/path]` : the data folder where all the config files for this node are stored. Default is a hidden .minima folder under the user's home directory. If you want to specify a folder not in the user's home directory, you must use the complete path.
-- `-basefolder [foldername/path]` : specify a default file creation / backup / restore folder. Default is the user's home directory. Can be the same as the `data` folder provided.
-
-MiniDapp System (MDS)
-
-- `-mdsenable` : enable the MiniDapp System (default port 9003)
-- `-mdspassword [yourmdspassword]` : specify the mds login password
-- `-mdsinit [foldername/path]` : specify a folder of miniDAPPs
-- `-mdswrite [minidapp]` : give an initial miniDAPP WRITE access
-
-RPC
-
-- `-rpcenable` : enable remote procedure call
-- `-rpcssl` : use Self Signed SSL cert to run RPC
-- `-rpcpassword [yourrpcpassword]` : set Basic Auth password for RPC calls ( Use with SSL / stunnel ). Only secure if used with SSL.
-- `-rpcclrf` : use CRLF at the end of the RPC headers (NodeJS)
-
-Test nodes
-
-- `-genesis` : delete all old data and start the node from the genesis block
-- `-test` : this uses test settings which have a faster blocktime and only keep a shorter chain in memory. If you are compiling Minima yourself you can edit these to your needs.
-- `-connect [ip:port,ip:port]` : Disable the automatic P2P system and create your own network by manually connecting to this list of host:port
-- `-nop2p` : Disable the automatic P2P system
-- `-noconnect` : Stops the P2P system from connecting to other nodes until it has been connected to
-- `-nosyncibd` : Do not sync IBD (for testing)
-
-Mobile
-
-- `-mobile` : Sets this device to a mobile device - used for metrics only
-- `-limitbandwidth` : Limit the amount sent for archive sync
-- `-noshutdownhook` : Do not use the shutdown hook (Android)
-
-Debugging
-
-- `-p2p-log-level-info` : Set the P2P log level to info
-- `-p2p-log-level-debug` : Set the P2P log level to debug
-
-Help
-
-- `-showparams` : Show relevant startup params on launch
-- `-help` : print help for the start up parameters
-
-
-
-
+---
+title: Multiple Node Testnet
+description: Learn how to start a multiple node testnet
+tag: development
+icon: Network
+---
+
+At its core, Minima is a Java application, so first make sure you have Java installed. Download from [here](https://www.java.com/en/download/).
+
+You will need the latest release of the minima.jar file which can be downloaded from GitHub [here](https://github.com/minima-global/Minima/releases)
+
+We will be using a server or desktop command line interface (CLI) to start Minima.
+
+## 1. Start the genesis node
+
+1. Create a new folder and copy the minima.jar into that folder. We will run everything from there.
+2. Copy the path to the file and from the command line, `cd` into that folder
+3. Enter the following command
+
+**Node 1:**
+
+```bash title="Terminal"
+java -jar minima.jar -data minidata1 -basefolder minidata1 -genesis -test -nop2p -mdsenable -mdspassword [INSERT NODE1 PASSWORD]
+```
+
+- Replace placeholder `[INSERT NODE1 PASSWORD]` with a custom password for your node 1
+
+This will start a node on the default ports of 9001-5.
+
+Check your balance with `balance`.
+
+## 2. Start the second node
+
+We create a second node to test transactions between two nodes, note that we will need to:
+
+- remove the `-genesis` parameter,
+- change the data and base folders,
+- add the `-port` parameter to start it on a different port,
+- add the `-connect 127.0.0.1:9001` parameter to connect this node to the genesis node.
+
+**Node 2:**
+
+1. Open a new command line window and enter the following command
+
+```bash title="Terminal"
+java -jar minima.jar -data minidata2 -basefolder minidata2 -test -nop2p -mdsenable -mdspassword [INSERT NODE2 PASSWORD] -port 10001 -connect 127.0.0.1:9001
+```
+
+- Replace placeholder `[INSERT NODE2 PASSWORD]` with a custom password for your node 2
+- Optionally set a port of your choice, we use 10001 here
+
+**You should now have two nodes up and running that are connected to eachother! **
+
+## Restarting the nodes
+
+You can shutdown the nodes by running `quit` from the command line window.
+
+To **restart** the same node from where you left off, re run the command for either node above **removing the `-genesis` parameter for node 1.**
+
+To **delete** the data and start a new clean nodes, re run the command for each node adding the `-clean` parameter.
+
+**ALL DATA WILL BE LOST AND A NEW SEED PHRASE WILL BE GENERATED.**
+
+## Restarting the node
+
+You can shutdown the node by running `quit` from the command line window.
+
+To **restart** the same node from where you left off, re run the command above **removing the `-genesis` parameter. **
+
+```bash title="Terminal"
+java -jar minima.jar -data minidata -basefolder minidata -test -nop2p -mdsenable -mdspassword [INSERT PASSWORD]
+```
+
+To **delete** the data and start a new clean node, re run the command from step 3 above, adding the `-clean` parameter.
+
+
+ **WARNING!** The `-clean` parameter will delete all data and start a new fresh
+ node. **ALL DATA WILL BE LOST AND A NEW SEED PHRASE WILL BE GENERATED.**
+
+
+
+```bash title="Terminal"
+java -jar minima.jar -data minidata -basefolder minidata -genesis -test -nop2p -mdsenable -mdspassword [INSERT PASSWORD] -clean
+```
+
+## Start up parameters
+
+
+
+
+- `-data [foldername/path]` : the data folder where all the config files for this node are stored. Default is a hidden .minima folder under the user's home directory. If you want to specify a folder not in the user's home directory, you must use the complete path.
+- `-basefolder [foldername/path]` : specify a default file creation / backup / restore folder. Default is the user's home directory. Can be the same as the data folder provided.
+- `-genesis` : delete all old data and start the node from the genesis block
+- `-nop2p` : Disable the automatic P2P system
+- `-test` : this uses test settings which have a faster blocktime and only keep a shorter chain in memory. If you are compiling Minima yourself you can edit these to your needs.
+- `-mdsenable` : start the MiniDapp system
+- `-mdspassword` : set the password to login to the MiniDapp system
+- `-port` : set the starting port
+- `-connect [ip:port]` : Disable the automatic P2P system and create your own network by manually connecting to this list of host:port
+
+
+
+
+The following start up parameters can optionally be specified when starting your Docker node.
+
+
+ To add/remove parameters after a node has been started, you must `quit` the
+ node and restart it, adding/removing the required parameters. `[]` square
+ brackets indicate where an input is required, **the brackets should not be
+ included.**
+
+
+General
+
+- `-clean` : CAREFUL! Clears existing data, starts a new fresh node. All coins will be lost.
+- `-port [port]` : specify the initial port for Minima to use. Range used will be the specified port +4. Default is 9001-9005.
+- `-host [ipaddress]` : specify the host IP
+- `-dbpassword [yourdbpassword]` : Main Wallet / SQL AES password - MUST be specified on first launch. **CANNOT be changed later.**
+- `-allowallip` : Allow all IPs for Maxima / Networking. Local IPs won't be allowed otherwise.
+- `-archive` : Run an Archive node - store all archive data / the cascade to allow for resyncs from this node
+- `-daemon` : Run in daemon mode with no stdin input (if running Minima as a background service)
+- `-isclient` : Tells the P2P System that this node can't accept incoming connections
+- `-server` : Use Server settings - this node can accept incoming connections
+- `-desktop` : Use Desktop settings - this node can't accept incoming connections
+
+Folders
+
+- `-data [foldername/path]` : the data folder where all the config files for this node are stored. Default is a hidden .minima folder under the user's home directory. If you want to specify a folder not in the user's home directory, you must use the complete path.
+- `-basefolder [foldername/path]` : specify a default file creation / backup / restore folder. Default is the user's home directory. Can be the same as the `data` folder provided.
+
+MiniDapp System (MDS)
+
+- `-mdsenable` : enable the MiniDapp System (default port 9003)
+- `-mdspassword [yourmdspassword]` : specify the mds login password
+- `-mdsinit [foldername/path]` : specify a folder of miniDAPPs
+- `-mdswrite [minidapp]` : give an initial miniDAPP WRITE access
+
+RPC
+
+- `-rpcenable` : enable remote procedure call
+- `-rpcssl` : use Self Signed SSL cert to run RPC
+- `-rpcpassword [yourrpcpassword]` : set Basic Auth password for RPC calls ( Use with SSL / stunnel ). Only secure if used with SSL.
+- `-rpcclrf` : use CRLF at the end of the RPC headers (NodeJS)
+
+Test nodes
+
+- `-genesis` : delete all old data and start the node from the genesis block
+- `-test` : this uses test settings which have a faster blocktime and only keep a shorter chain in memory. If you are compiling Minima yourself you can edit these to your needs.
+- `-connect [ip:port,ip:port]` : Disable the automatic P2P system and create your own network by manually connecting to this list of host:port
+- `-nop2p` : Disable the automatic P2P system
+- `-noconnect` : Stops the P2P system from connecting to other nodes until it has been connected to
+- `-nosyncibd` : Do not sync IBD (for testing)
+
+Mobile
+
+- `-mobile` : Sets this device to a mobile device - used for metrics only
+- `-limitbandwidth` : Limit the amount sent for archive sync
+- `-noshutdownhook` : Do not use the shutdown hook (Android)
+
+Debugging
+
+- `-p2p-log-level-info` : Set the P2P log level to info
+- `-p2p-log-level-debug` : Set the P2P log level to debug
+
+Help
+
+- `-showparams` : Show relevant startup params on launch
+- `-help` : print help for the start up parameters
+
+
+
+
diff --git a/content/docs/development/start-testnet.mdx b/content/docs/development/testnet-single.mdx
similarity index 96%
rename from content/docs/development/start-testnet.mdx
rename to content/docs/development/testnet-single.mdx
index 14d9611..2aed30c 100644
--- a/content/docs/development/start-testnet.mdx
+++ b/content/docs/development/testnet-single.mdx
@@ -1,146 +1,146 @@
----
-title: Single Node Testnet
-description: Learn how to develop on the Minima blockchain
-tag: development
-icon: Component
----
-
-## Start a Testnet node
-
-At its core, Minima is a Java application, so first make sure you have Java installed. Download from [here](https://www.java.com/en/download/).
-
-You will need the latest release of the minima.jar file which can be downloaded from GitHub [here](https://github.com/minima-global/Minima/releases)
-
-We will be using a server or desktop command line interface (CLI) to start Minima.
-
-Starting the node with `-genesis`, you will have your own private chain, you will be sent the genesis Minima with 1 billion coins to spend, and you can enter commands directly into the console.
-
-1. Create a new folder and copy the minima.jar into that folder. We will run everything from there.
-2. Copy the path to the file and from the command line, `cd` into that folder
-3. Enter the following command
-
-```bash title="Terminal"
-java -jar minima.jar -data minidata -basefolder minidata -genesis -test -nop2p -mdsenable -mdspassword [INSERT PASSWORD]
-```
-
-- Replace placeholder `[INSERT PASSWORD]` with a custom password for your node
-
-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`.
-
-
-
-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.
-
-_Minima uses self-signed certificates. For this reason you may be shown a security certificate warning when accessing Minima, to which you can click on **Advanced**, then **Proceed**. This may be different depending on the browser and OS you are using._
-
-## Restarting the node
-
-You can shutdown the node by running `quit` from the command line window.
-
-To **restart** the same node from where you left off, re run the command above **removing the `-genesis` parameter. **
-
-```bash title="Terminal"
-java -jar minima.jar -data minidata -basefolder minidata -test -nop2p -mdsenable -mdspassword [INSERT PASSWORD]
-```
-
-To **delete** the data and start a new clean node, re run the command from step 3 above, adding the `-clean` parameter.
-
-
- **WARNING!** The `-clean` parameter will delete all data and start a new fresh
- node. **ALL DATA WILL BE LOST AND A NEW SEED PHRASE WILL BE GENERATED.**
-
-
-
-```bash title="Terminal"
-java -jar minima.jar -data minidata -basefolder minidata -genesis -test -nop2p -mdsenable -mdspassword [INSERT PASSWORD] -clean
-```
-
-## Start up parameters
-
-
-
-
-- `-data [foldername/path]` : the data folder where all the config files for this node are stored. Default is a hidden .minima folder under the user's home directory. If you want to specify a folder not in the user's home directory, you must use the complete path.
-- `-basefolder [foldername/path]` : specify a default file creation / backup / restore folder. Default is the user's home directory. Can be the same as the data folder provided.
-- `-genesis` : delete all old data and start the node from the genesis block
-- `-nop2p` : Disable the automatic P2P system
-- `-test` : this uses test settings which have a faster blocktime and only keep a shorter chain in memory. If you are compiling Minima yourself you can edit these to your needs.
-- `-mdsenable` : start the MiniDapp system
-- `-mdspassword` : set the password to login to the MiniDapp system
-- `-port` : set the starting port
-- `-connect [ip:port]` : Disable the automatic P2P system and create your own network by manually connecting to this list of host:port
-
-
-
-
-The following start up parameters can optionally be specified when starting your Docker node.
-
-
- To add/remove parameters after a node has been started, you must `quit` the
- node and restart it, adding/removing the required parameters. `[]` square
- brackets indicate where an input is required, **the brackets should not be
- included.**
-
-
-General
-
-- `-clean` : CAREFUL! Clears existing data, starts a new fresh node. All coins will be lost.
-- `-port [port]` : specify the initial port for Minima to use. Range used will be the specified port +4. Default is 9001-9005.
-- `-host [ipaddress]` : specify the host IP
-- `-dbpassword [yourdbpassword]` : Main Wallet / SQL AES password - MUST be specified on first launch. **CANNOT be changed later.**
-- `-allowallip` : Allow all IPs for Maxima / Networking. Local IPs won't be allowed otherwise.
-- `-archive` : Run an Archive node - store all archive data / the cascade to allow for resyncs from this node
-- `-daemon` : Run in daemon mode with no stdin input (if running Minima as a background service)
-- `-isclient` : Tells the P2P System that this node can't accept incoming connections
-- `-server` : Use Server settings - this node can accept incoming connections
-- `-desktop` : Use Desktop settings - this node can't accept incoming connections
-
-Folders
-
-- `-data [foldername/path]` : the data folder where all the config files for this node are stored. Default is a hidden .minima folder under the user's home directory. If you want to specify a folder not in the user's home directory, you must use the complete path.
-- `-basefolder [foldername/path]` : specify a default file creation / backup / restore folder. Default is the user's home directory. Can be the same as the `data` folder provided.
-
-MiniDapp System (MDS)
-
-- `-mdsenable` : enable the MiniDapp System (default port 9003)
-- `-mdspassword [yourmdspassword]` : specify the mds login password
-- `-mdsinit [foldername/path]` : specify a folder of miniDAPPs
-- `-mdswrite [minidapp]` : give an initial miniDAPP WRITE access
-
-RPC
-
-- `-rpcenable` : enable remote procedure call
-- `-rpcssl` : use Self Signed SSL cert to run RPC
-- `-rpcpassword [yourrpcpassword]` : set Basic Auth password for RPC calls ( Use with SSL / stunnel ). Only secure if used with SSL.
-- `-rpcclrf` : use CRLF at the end of the RPC headers (NodeJS)
-
-Test nodes
-
-- `-genesis` : delete all old data and start the node from the genesis block
-- `-test` : this uses test settings which have a faster blocktime and only keep a shorter chain in memory. If you are compiling Minima yourself you can edit these to your needs.
-- `-connect [ip:port,ip:port]` : Disable the automatic P2P system and create your own network by manually connecting to this list of host:port
-- `-nop2p` : Disable the automatic P2P system
-- `-noconnect` : Stops the P2P system from connecting to other nodes until it has been connected to
-- `-nosyncibd` : Do not sync IBD (for testing)
-
-Mobile
-
-- `-mobile` : Sets this device to a mobile device - used for metrics only
-- `-limitbandwidth` : Limit the amount sent for archive sync
-- `-noshutdownhook` : Do not use the shutdown hook (Android)
-
-Debugging
-
-- `-p2p-log-level-info` : Set the P2P log level to info
-- `-p2p-log-level-debug` : Set the P2P log level to debug
-
-Help
-
-- `-showparams` : Show relevant startup params on launch
-- `-help` : print help for the start up parameters
-
-
-
-
+---
+title: Single Node Testnet
+description: Learn how to start a single node testnet
+tag: development
+icon: Component
+---
+
+## Start a Testnet node
+
+At its core, Minima is a Java application, so first make sure you have Java installed. Download from [here](https://www.java.com/en/download/).
+
+You will need the latest release of the minima.jar file which can be downloaded from GitHub [here](https://github.com/minima-global/Minima/releases)
+
+We will be using a server or desktop command line interface (CLI) to start Minima.
+
+Starting the node with `-genesis`, you will have your own private chain, you will be sent the genesis Minima with 1 billion coins to spend, and you can enter commands directly into the console.
+
+1. Create a new folder and copy the minima.jar into that folder. We will run everything from there.
+2. Copy the path to the file and from the command line, `cd` into that folder
+3. Enter the following command
+
+```bash title="Terminal"
+java -jar minima.jar -data minidata -basefolder minidata -genesis -test -nop2p -mdsenable -mdspassword [INSERT PASSWORD]
+```
+
+- Replace placeholder `[INSERT PASSWORD]` with a custom password for your node
+
+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`.
+
+
+
+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.
+
+_Minima uses self-signed certificates. For this reason you may be shown a security certificate warning when accessing Minima, to which you can click on **Advanced**, then **Proceed**. This may be different depending on the browser and OS you are using._
+
+## Restarting the node
+
+You can shutdown the node by running `quit` from the command line window.
+
+To **restart** the same node from where you left off, re run the command above **removing the `-genesis` parameter. **
+
+```bash title="Terminal"
+java -jar minima.jar -data minidata -basefolder minidata -test -nop2p -mdsenable -mdspassword [INSERT PASSWORD]
+```
+
+To **delete** the data and start a new clean node, re run the command from step 3 above, adding the `-clean` parameter.
+
+
+ **WARNING!** The `-clean` parameter will delete all data and start a new fresh
+ node. **ALL DATA WILL BE LOST AND A NEW SEED PHRASE WILL BE GENERATED.**
+
+
+
+```bash title="Terminal"
+java -jar minima.jar -data minidata -basefolder minidata -genesis -test -nop2p -mdsenable -mdspassword [INSERT PASSWORD] -clean
+```
+
+## Start up parameters
+
+
+
+
+- `-data [foldername/path]` : the data folder where all the config files for this node are stored. Default is a hidden .minima folder under the user's home directory. If you want to specify a folder not in the user's home directory, you must use the complete path.
+- `-basefolder [foldername/path]` : specify a default file creation / backup / restore folder. Default is the user's home directory. Can be the same as the data folder provided.
+- `-genesis` : delete all old data and start the node from the genesis block
+- `-nop2p` : Disable the automatic P2P system
+- `-test` : this uses test settings which have a faster blocktime and only keep a shorter chain in memory. If you are compiling Minima yourself you can edit these to your needs.
+- `-mdsenable` : start the MiniDapp system
+- `-mdspassword` : set the password to login to the MiniDapp system
+- `-port` : set the starting port
+- `-connect [ip:port]` : Disable the automatic P2P system and create your own network by manually connecting to this list of host:port
+
+
+
+
+The following start up parameters can optionally be specified when starting your Docker node.
+
+
+ To add/remove parameters after a node has been started, you must `quit` the
+ node and restart it, adding/removing the required parameters. `[]` square
+ brackets indicate where an input is required, **the brackets should not be
+ included.**
+
+
+General
+
+- `-clean` : CAREFUL! Clears existing data, starts a new fresh node. All coins will be lost.
+- `-port [port]` : specify the initial port for Minima to use. Range used will be the specified port +4. Default is 9001-9005.
+- `-host [ipaddress]` : specify the host IP
+- `-dbpassword [yourdbpassword]` : Main Wallet / SQL AES password - MUST be specified on first launch. **CANNOT be changed later.**
+- `-allowallip` : Allow all IPs for Maxima / Networking. Local IPs won't be allowed otherwise.
+- `-archive` : Run an Archive node - store all archive data / the cascade to allow for resyncs from this node
+- `-daemon` : Run in daemon mode with no stdin input (if running Minima as a background service)
+- `-isclient` : Tells the P2P System that this node can't accept incoming connections
+- `-server` : Use Server settings - this node can accept incoming connections
+- `-desktop` : Use Desktop settings - this node can't accept incoming connections
+
+Folders
+
+- `-data [foldername/path]` : the data folder where all the config files for this node are stored. Default is a hidden .minima folder under the user's home directory. If you want to specify a folder not in the user's home directory, you must use the complete path.
+- `-basefolder [foldername/path]` : specify a default file creation / backup / restore folder. Default is the user's home directory. Can be the same as the `data` folder provided.
+
+MiniDapp System (MDS)
+
+- `-mdsenable` : enable the MiniDapp System (default port 9003)
+- `-mdspassword [yourmdspassword]` : specify the mds login password
+- `-mdsinit [foldername/path]` : specify a folder of miniDAPPs
+- `-mdswrite [minidapp]` : give an initial miniDAPP WRITE access
+
+RPC
+
+- `-rpcenable` : enable remote procedure call
+- `-rpcssl` : use Self Signed SSL cert to run RPC
+- `-rpcpassword [yourrpcpassword]` : set Basic Auth password for RPC calls ( Use with SSL / stunnel ). Only secure if used with SSL.
+- `-rpcclrf` : use CRLF at the end of the RPC headers (NodeJS)
+
+Test nodes
+
+- `-genesis` : delete all old data and start the node from the genesis block
+- `-test` : this uses test settings which have a faster blocktime and only keep a shorter chain in memory. If you are compiling Minima yourself you can edit these to your needs.
+- `-connect [ip:port,ip:port]` : Disable the automatic P2P system and create your own network by manually connecting to this list of host:port
+- `-nop2p` : Disable the automatic P2P system
+- `-noconnect` : Stops the P2P system from connecting to other nodes until it has been connected to
+- `-nosyncibd` : Do not sync IBD (for testing)
+
+Mobile
+
+- `-mobile` : Sets this device to a mobile device - used for metrics only
+- `-limitbandwidth` : Limit the amount sent for archive sync
+- `-noshutdownhook` : Do not use the shutdown hook (Android)
+
+Debugging
+
+- `-p2p-log-level-info` : Set the P2P log level to info
+- `-p2p-log-level-debug` : Set the P2P log level to debug
+
+Help
+
+- `-showparams` : Show relevant startup params on launch
+- `-help` : print help for the start up parameters
+
+
+
+
diff --git a/content/docs/learn/contract-basics.mdx b/content/docs/development/txnbasics.mdx
similarity index 78%
rename from content/docs/learn/contract-basics.mdx
rename to content/docs/development/txnbasics.mdx
index 542284f..2599e05 100644
--- a/content/docs/learn/contract-basics.mdx
+++ b/content/docs/development/txnbasics.mdx
@@ -1,45 +1,47 @@
----
-title: Transaction Basics
-description: Transaction Basics
-tag: learn
----
-
-
-At its core Minima keeps track of Coins. That's all it does. Not users, not balances, **coins**.
-
-## Coins
-
-A coin says - *"You can spend me if you can unlock the script conditions, and when you spend me, you can send the funds in full to other coins".* This is a **transaction**.
-
-Each coin has an **amount**, **address**, **token id** and **coin id**. The coin address is the **hash of the script**.
-
-You create a coin when you send funds to a script address, and it can be spent - in full - if the script returns TRUE when run.
-
-Users only keep track of coins that are relevant to them, and provide an MMR (Merkle Mountain Range) proof of their validity when they spend them.
-
-
-You can think of a coin as some unit of Smart Value controlled by a Smart Contract (i.e. a script).
-
-A **‘contract’** is the script that locks the funds in a coin and is interchangeable with the word 'script'.
-
-
-## Transactions
-
-A transaction reallocates value from some coins to other coins.
-
-A transaction in Minima is a set of **input coins**, a set of **output coins** and a **state variable list from 0-255**. An analogue logic gate - Smart Circuitry.
-
-A transaction can be **signed** by 1 or more **public keys** (signatures can even be added as state variables if you want oracle style contracts).
-
-
-## State
-
-Each coin can store the transaction state variables along with its details in an MMR database. These can be referenced in scripts using the PREVSTATE command allowing for a basic memory mechanic.
-
-A coin remembers the state of the previous transaction it was in. This way, sequences, counters and far more interesting scripts can be achieved.
-
-## Burning Minima
-
-A transaction can 'burn' Minima, when the **sum of the outputs is less than the sum of the inputs**, and this is how the ordering of transactions in the mempool is achieved. This is how precedence is given to transactions. You burn more, you are added sooner, as the coins that are left in the system will be proportionally more. That's the incentive to add them first.
-
+---
+title: Transaction Basics
+description: Learn how to construct a simple transaction
+tag: development
+---
+
+
+At its core Minima keeps track of Coins. That's all it does. Not users, not balances, **coins**.
+
+## Coins
+
+A coin says - *"You can spend me if you can unlock the script conditions, and when you spend me, you can send the funds in full to other coins".* This is a **transaction**.
+
+Each coin has an **amount**, **address**, **token id** and **coin id**. The coin address is the **hash of the script**.
+
+You create a coin when you send funds to a script address, and it can be spent - in full - if the script returns TRUE when run.
+
+Users only keep track of coins that are relevant to them, and provide an MMR (Merkle Mountain Range) proof of their validity when they spend them.
+
+
+You can think of a coin as some unit of Smart Value controlled by a Smart Contract (i.e. a script).
+
+A **‘contract’** is the script that locks the funds in a coin and is interchangeable with the word 'script'.
+
+
+## Transactions
+
+A transaction reallocates value from some coins to other coins.
+
+A transaction in Minima is a set of **input coins**, a set of **output coins** and a **state variable list from 0-255**. An analogue logic gate - Smart Circuitry.
+
+A transaction can be **signed** by 1 or more **public keys** (signatures can even be added as state variables if you want oracle style contracts).
+
+
+## State Variables
+
+A set of 0-255 state variables can be provided with a transaction which can optionally be stored in the output coins of the transaction in an MMR database.
+
+This means a coin can remember the state of the previous transaction it was in. This way, sequences, counters and far more interesting scripts can be achieved.
+
+These can be referenced in scripts using the PREVSTATE command allowing for a basic memory mechanic.
+
+## Burning Minima
+
+A transaction can 'burn' Minima, when the **sum of the outputs is less than the sum of the inputs**, and this is how the ordering of transactions in the mempool is achieved. This is how precedence is given to transactions. You burn more, you are added sooner, as the coins that are left in the system will be proportionally more. That's the incentive to add them first.
+
Unlike other chains - these burnt coins are NOT given to the User who finds the block - which happens randomly when they are mining TxPoW transactions. This is important as it removes the incentive to mine for profit and ergo - centralise consensus.
\ No newline at end of file
diff --git a/content/docs/learn/archivenodes.mdx b/content/docs/learn/archivenodes.mdx
deleted file mode 100644
index 4925e05..0000000
--- a/content/docs/learn/archivenodes.mdx
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: Archive Nodes
-description: Learn about Archive Nodes
-tag: learn
----
-
-
-## Overview
-
-All Minima nodes have a **txpow database** and an **archive database**.
-
-The **txpow database** contains full blocks, which includes complete information about all transactions. This is limited to the most recent blocks from the unpruned section of the chain - approximately the last 24 hours worth.
-
-The **archive database** contains the last 2 months of **sync blocks**, which do not include transaction details but do hold all the MMR proofs for coins spent or created in the block. Sync blocks older than 2 months are not stored unless the node is set up as an archive node.
-
-**Archive nodes** store **all** the **sync blocks** from after the archive node is started, no pruning is done after 2 months.
-
-
-An archive node can only be used to recover users who created their nodes after your archive node was created. If you wish to be able to recover *any* Minima user, you must perform a chain re-sync from an archive node that holds the entire blockchain since genesis.
-
diff --git a/content/docs/learn/glossary.mdx b/content/docs/learn/glossary.mdx
index 68a0a3a..f927bdd 100644
--- a/content/docs/learn/glossary.mdx
+++ b/content/docs/learn/glossary.mdx
@@ -1,321 +1,321 @@
----
-title: Glossary
-description: Minima Glossary
-icon: Book
-tag: learn
----
-
-
-## Introduction
-When you are new to the world of cryptocurrencies and blockchain, it can be pretty daunting reading through related news, let alone an entire Whitepaper. We've all been there. That's why we've created this glossary, to help you understand not only Minima but the entire crypto-industry and the slang they use on CT (Crypto-Twitter) better.
-
-If there are any terms that we're missing, don't hesitate to contact us and we'll add them. We will consistently work on adding new words and editing old ones to ensure accuracy.
-
-## 51% Attack
-
-An attack where a malicious actor overtakes 51% of a network's hashrate and wreaks havoc on the system. If a blockchain undergoes a 51% attack, the attackers can reverse transactions, mint new tokens, and enrich themselves while destroying the integrity of the original chain.
-
-## ABS
-ABS is short for Adaptive Block Scaling and describes the Process Minima uses to adjust the block size depending on the traffic over the previous 24 hours. If the network traffic was high, blocks will automatically scale up to host more transactions, whereas lower traffic is met with smaller blocks.
-
-## ASIC
-“Application-Specific Integrated Circuit miner” is powerful high-performance hardware specifically designed to mine Proof-of-Work cryptocurrencies. ASIC mining has increased the hashrate on blockchain networks but also led to excluding individual miners from meaningfully participating in block validation.
-
-## Base Block Weight (Minima)
-The actual number of hashes it took for a particular block to meet (or exceed) the required block difficulty level.
-
-## BFT
-BFT stands for Byzantine Fault Tolerance and describes the ability of a system to tolerate up to 1/3 of its participants acting maliciously.
-Byzantine Fault Tolerance is based on the Byzantine Generals Problem — which consisted in reaching consensus in a system one message at a time with a potential traitor among them.
-
-## Binary (Hash) Tree
-A tree structure where each node in the tree has at most two children - a left and right child - and each node except the root has one parent.
-
-## Block (Minima)
-Also known as TxBlock in Minima. A block contains records of transactions and an immutable hash to its previous block in the blockchain. In Minima, blocks are [TxPoW units](#txpow-unit-minima) which meet the required difficulty level to become a block and are therefore added to the end of the blockchain.
-
-## Block Difficulty (Minima)
-A value determining whether an already mined TxPoW unit will become a block. The value of the TxPoW ID must be lower than the block difficulty target value for it to become a block. Block Difficulty is dynamic and changes with each block.
-
-## Block Reward
-Block rewards describe how much miners earn for being the first to find the next block that will be added to the chain by solving a cryptographic puzzle. There are no block rewards in Minima.
-
-## Blockchain Trilemma
-The Blockchain Trilemma describes the idea that a blockchain cannot unite all three: Decentralization, Security, and Scalability. According to the trilemma, a blockchain can only ever achieve two of the three features and has to sacrifice one of them.
-
-## Branch
-Branching is a natural occurrence in a blockchain, which happens when two or more valid blocks with the same block number are produced by different nodes in the network and are added to the chain, creating a split. In Minima, nodes in the network come to consensus on which branch to continue building on based on which branch is heaviest. See [GHOST](#ghost-minima)
-
-## BUIDL
-This is crypto-slang and a play on HODL (see below). It's unclear when the term was first used, but it seems to have emerged around 2017. It serves as a reminder to focus one's energy and resources on building and not just short-term gains.
-
-## Burn
-In the context of tokens, a burn is a mechanism that removes tokens from the circulating supply, therefore reducing tokens in circulation. A burn can be either directly programmed into the protocol, or conducted by a company by buying back, and destroying tokens (by sending them to a wallet address that no one can control).
-On Minima, The Burn is a small cost (fee) which is incurred when sending transactions on the Minima network during times of high demand. It serves to order transactions, regulate on-chain traffic and maintain our deflationary model.
-
-## Cascade (Minima)
-Also known as The Cascading Chain. The Cascade is an immutable, chronological, unbroken chain consisting of Super Blocks which provide proof of the total Proof-of-Work input into the blockchain.
-
-## Cascade Levels (Minima)
-The Cascading Chain consists of 32 levels, where each level consists of [Super Blocks](#super-block) which, by chance, exceeded the difficulty met by the blocks in the previous level by a factor of 2. e.g. A block in level 3 of the Cascading Chain achieved twice the difficulty of a block in level 2.
-
-## CeFi
-Short for centralized Finance, describing the existing financial system which is run mostly by centralized intermediaries. Sometimes also called TradFi, short for traditional Finance.
-
-## Change
-In a UTxO based blockchain, the amount input into a transaction must be more than or equal to the desired output. If the input is more than the desired output, another output must be specified to return the difference (the change) to the sender. In Minima, if change is not specified, the difference is burned (i.e. removed from circulation).
-
-## Coin
-The native currency of a blockchain. e.g. Minima is the native coin for the Minima blockchain.
-In Minima, the term Coin can also be used to refer to a specific [UTxO](#utxo).
-
-## Coin Mixer
-Coin Mixers are services promising users more privacy when they transact on public blockchains. When using Coin Mixer, users' transactions are mixed with other transactions, obfuscating the path of the original transaction to increase its anonymity.
-
-## Coin Proof (Minima)
-In Minima, coins are recorded as leaf nodes in a hash-sum tree (an [MMR](#mmr-minima)), with each user only keeping the paths of the tree that point to their own coins. Users are required to present a Coin Proof for each coin when they wish to spend them, to prove it exists and is unspent.
-A Coin Proof is a collection of entries (proof-chunks) in the MMR tree which, together, can be used by any other node in the network to calculate the path to a peak of the MMR tree, proving that a coin exists.
-
-## Coloured Coins (Minima)
-Coloured coins are used to create custom tokens and NFTs on Minima. When creating custom tokens/NFTs, tiny fractions of 1 Minima are allocated to represent the supply of a custom token or NFT which can then be exchanged in the same way as Minima coins.
-
-## Current Super Level (Minima)
-The level representing how deep in the Cascading Chain a particular [Super Block](#super-block) is currently positioned.
-
-## Current Block Weight (Minima)
-The current weight of a block is its [base weight](#base-block-weight-minima) multiplied by a factor dependant on the [current level](#current-super-level-minima) the block is positioned in, such that Current Weight = Base Weight * 2Current level no.
-
-## DAO
-DAO is an acronym for Decentralized Autonomous Organization. A DAO is a community-led entity without one central authority that is governed by rules of open-source blockchain protocols. Most DAOs employ governance tokens to help them come to a consensus.
-
-## dApps
-dApps is short for decentralized apps and describes apps running on top of blockchain networks. One important thing to remember is that the User-Interface you will likely interact with by going to a dApps website such as Uniswap.com is not the actual dApp. It's a centralized interface that enables anyone to engage with the dApp and the underlying blockchain easily.
-
-## Decentralization
-Decentralization more broadly refers to the dispersion of power and control. In Blockchain networks, decentralized means having thousands, millions of nodes all running the same software and storing a copy of the entire blockchain ledger.
-
-Decentralization increases accessibility, fault tolerance and makes everyone an equal participant. At Minima, one of our prime measures for decentralization is our node count and the lack of any entity that could overtake the network. In a truly decentralized network, there is no space for any bit of centralized infrastructure.
-
-## DeFi
-Short for decentralized finance, describes an ecosystem of financial apps built on top of public blockchains that promises to be more accessible, transparent, and fair than the currently existing financial system.
-
-## Difficulty (Minima)
-In Minima, the difficulty is a target value influencing the number of hashes required for a node to mine a Transaction or Block. Minima has multiple levels of difficulty: Transaction difficulty, Block difficulty and Super Block difficulty. The mining process ends once the Transaction difficulty has been met.
-
-## Digital Keys
-Digital keys are analogous to physical keys in that they provide access to something private of value. In Minima, and with cryptocurrencies in general, a pair of private and public keys are required to spend and prove ownership of your coins.
-
-## Digital Signature Scheme
-An algorithm that creates unforgeable digital signatures from a private key and a piece of data that requires authentication e.g. a transaction. Examples include Elliptic Curve Digital Signature Algorithm (ECDSA) (used in Bitcoin) or the Winternitz One-Time Signature Scheme (used in Minima).
-
-## dPOS
-dPoS stands for delegated Proof-of-Stake and is a variation of Proof-of-Stake consensus algorithms. Usually, in a delegated Proof-of-Stake network, you will find a set amount of validating nodes that other participants can delegate their stake (token holdings) to in return for a percentage of the Staking Rewards.
-
-## DYOR
-*“Do your own research”* highlights the need to not simply trust what others on Twitter or YouTube are trying to sell. Instead, spend time researching what a project is trying to achieve and how they stack up against their claim. Ideally, researching a crypto project goes all the way to reading the Whitepaper.
-
-## ELTOO
-Eltoo, pronounced “L2”, is a proposed upgrade to Bitcoin to improve its Layer 2 solutions, primarily The Lightning Network.
-Minima's Layer 2 - Omnia - uses ELTOO technology, enabling greater flexibility and functionality for Layer 2 transactions.
-
-## FOMO
-Fear of missing out - or that nagging feeling you get when you see a cryptocurrency’s price skyrocket in a short amount of time and you haven’t invested in it, and are missing out. Note that investing based on FOMO is usually a very risky thing to do. The opposite of FOMO is sometimes coined JOMO - Joy of missing out.
-
-## FUD
-Acronym for Fear, Uncertainty & Doubt. Also used as verb as in "Stop fudding my bags".
-Used in crypto to describe negative news, events, and information.
-
-## Full Node
-Not all nodes are equal (except on the Minima Protocol). A complete node in other blockchain protocols is a node that validates and constructs the blockchain. It also keeps a copy of the entire ledger.
-
-## Future of France
-A Crypto community Meme. It’s not exactly clear who the first one was to mistype, or spell Defi as the “Future of France” but whenever you encounter it (in the context of DeFi), it means the “future of finance”.
-
-## Genesis Block
-The first block of a new blockchain is its genesis block.
-
-## GHOST (Minima)
-Greedy Heaviest Observed Sub Tree - the algorithm used by all nodes in the Minima network to decide which branch in the TxPoW Tree should be considered the main chain. An alternative to the Longest Chain rule. See [GHOST](/docs/learn/minima/miningconsensus#selecting-the-main-chain-ghost).
-
-## GM
-It stands for “Good Morning” and is often used on Crypto Twitter by y crypto enthusiasts to wish each other a good morning. The correct reaction to receiving a “GM” is responding with “GM.” Not to be confused with General Motors.
-
-## Hard Fork
-A hard fork is a significant network upgrade on a blockchain. During a hard fork, all network nodes are required to upgrade to the new blockchain software. Only nodes running the latest version will be participating in the network, the rules of the old blockchain aren’t accepted into new blocks — a hard fork is not backward compatible.
-
-## Hash Tree
-Also known as a Merkle Tree, a Hash Tree is a hash-based data structure used for efficient data verification. The leaf nodes of the tree are the hashes of some data, and each non-leaf node is a hash of its children.
-
-## Hashrate
-The Hashrate describes the computing power backing a blockchain network.
-
-## Hashrate distribution
-The Hashrate distribution shows how the computing power in a blockchain network is distributed and offers valuable insight into how (de)centralized a network is.
-
-## HODL
-Hodl is not unlike often assumed short for “Hold on for dear life”, but simply a misspelling of hold. It’s often used by crypto investors to encourage each other to not sell their coins. Since the wall streets bet saga earlier this year, it’s often used in conjunction with diamond hands (💎 🙌).
-
-## Initial Blockchain Download (IBD)
-When a new node joins the network, they need to download the Minima Blockchain from a peer. This process is the Initial Blockchain Download.
-
-## Layer 1
-Layer 1 refers to the base protocol of a blockchain — the actual blockchain on top of which other applications and layers can be built. For Minima, Layer 1 is the Minima blockchain, which every node runs.
-
-## Light Client
-Light clients are lightweight applications, that only keep track of their own transactions. They rely on connections to full nodes to catch up and execute their transactions or verify the status of the blockchain.
-
-## Liquidity
-Liquidity in financial markets and crypto refers to the ability to easily buy and sell an asset. The more liquid an asset is, the faster one can sell or buy it.
-
-## Liquidity Mining
-Describes the process of providing liquidity to decentralized exchanges and earning a share of transaction fees in return.
-
-## Liquidity Provider
-Individuals or entities that provide liquidity by depositing tokens into a DEXs smart contracts are called Liquidity Providers, sometimes shortened LP.
-
-## Maxima
-Maxima is the censorship resistant information transport layer running over the Minima network. See [Network Overview.](/docs/learn/networkoverview)
-
-## Maximum supply
-The maximum amount of a token that will ever exist. By capping the supply, a token retains scarcity. Minima’s maximum supply is one billion Minima coins.
-
-## Mempool (Minima)
-Short for “memory pool”, the Mempool is a collection of valid, unconfirmed TxPoW units (Transactions) that nodes in the network have not yet included in a block. Nodes will order Mempool transactions by the amount they burn.
-
-## Metaverse
-The Metaverse is the latest buzzword in crypto, and a term put together from the greek meta for Beyond and Universe which describes everything that exists. While no agreed-upon definition of it exists, we believe that it will be an experience that combines the digital with the real world, contain its economy that connects to broader economies, spans different worlds together, leverages VR & AR, and provides a level of interoperability we’ve not seen so far. You can read more about the Metaverse [here](https://www.minima.global/post/ready-for-the-metaverse).
-
-## Minima
-Minima is a censorship resistant blockchain and network. See [Network Overview.](/docs/learn/networkoverview)
-
-## MiniDapps
-MiniDapps is the term used to refer to decentralized applications built on top of Minima. See [About MiniDapps.](/docs/learn/minidapps/minidappsintro)
-
-## Mining
-The process in which nodes race to find the right hash in Proof-of-Work blockchains, to validate blocks and receive block rewards.
-
-## Mining Pools
-Mining Pools are groups or communities of people pooling their computing resources to mine cryptocurrencies. Often, these are commercial operations run by profit-oriented businesses.
-
-## MMR (Minima)
-Merkle Mountain Range. An MMR tree is a binary tree structure used in Minima to store coins, scripts and signatures. MMR entries are stored in the MMR Database.
-
-## NFT
-Non-Fungible-Token, a digital asset with unique properties, that can't be replicated nor interchanged. You can read more about them here.
-
-## Node
-Any computer that is connected to a network is referred to as a Node. While many might think mostly of mining nodes when referring to PoW networks, various other node types exist that play a crucial role in storing the ledger's history.
-
-On Minima, all Minima nodes are equal. Each one of them participates in constructing the blockchain and in validating transactions.
-
-## Off-chain
-Transactions that don't happen on the main blockchain, are off-chain. Often implemented to increase the transactions a network can handle.
-On Minima, users can transact off-chain once a relationship has been established on-chain.
-
-## Omnia
-Omnia is Minima's Layer 2 solution which uses the latest Lightning technology - ELTOO. It is analogous to Bitcoin's Lightning Network, but more advanced. See [Network Overview.](/docs/learn/networkoverview)
-
-## On-chain
-All transactions that happen on the main blockchain are on-chain. In Minima's case, that's establishing transaction relationships, and anything related to resolving conflicts.
-
-## Orphan Block
-Sometimes blocks are verified, and valid, but not added to the blockchain.
-This often happens when two or more miners try to solve the block at the same time.
-Ultimately, the block with the highest amount of PoW is added to the chain, while the one with lower PoW will be discarded, and miners working on it won't receive any rewards.
-
-## PoS
-Proof-of-Stake. A consensus algorithm in which nodes with the native platform token at "stake" are responsible for validating new transactions.
-Often in these networks, the more stake a node has, the higher the chances to validate blocks and verify blocks. Another implementation of Proof-of-Stake is delegated Proof-of-Stake (see dPoS).
-
-## PoW
-Proof-of-Work, nodes in Proof-of-Work networks solve cryptographic puzzles (deliver work) in order to verify transactions.
-PoW first came up as a measure to fight spam and Denial-of-Service attacks. Since the inception of Bitcoin, it's been implemented in various blockchains to enable the trustless transfer of value. Minima uses a variant of PoW to secure its network: [TxPoW](#txpow).
-
-## Private Key
-A 32-character string used to generate an associated Public Key and subsequently a Public Address. A Private Key enables its owner to spend the cryptocurrency associated with its Public Key/Address.
-
-## Proof (Minima)
-In Minima, users are required to present Proofs for their coins, scripts and signatures which are held in an MMR tree. Proofs are a collection of entries (proof-chunks) in the user's MMR database which, together, can be used to calculate a peak or root node of the MMR tree, proving that a leaf node of the tree (i.e. a coin, script or signature) exists.
-
-## Public key
-A public key is generated from the private key, and is used to create a Public Address that users can share with others to receive cryptocurrency.
-
-## Pulse
-The Pulse is the unique mechanism Minima uses to enable all Minima, Maxima and Omnia users in the network to secure the blockchain by providing PoW to the chain.
- The Pulse happens periodically and consists of two parts:
- 1. The node generates a message with a list of the latest 256 blocks in its main chain and shares this with its peers. This serves to ensure all nodes keep up to date with the latest blocks.
- 2. Next, a TxPoW unit with an empty main transaction is generated and 'mined'. This TxPoW will contain a list of transactions from the node's mempool, serving to propagate unconfirmed transactions around the network.
-
-## Scalability
-When talking about Scalability in relation to Blockchain, what most think of is "Transactions per second" - how high the throughput for a network can be.
-However, scalability isn't just about TPS. It has a broader meaning as well, with more scalable blockchains being able to adjust to handling a growing amount of work.
-
-## Script (Minima)
-In Minima, a script is a function or series of functions written in Minima's scripting language - KISS VM. It is analogous to a Smart Contract. Every with every UTxO (coin) has a script associated with it. Scripts must return a value of TRUE at the time of attempting to spent the coin for the transaction to be considered valid. The default script associated with a normal UTxO is **RETURN(SIGNEDBY(UserPublicKey))** i.e. If signed by the owner's public key, this script will return TRUE and can be spent in a transaction.
-
-## Sidechains
-Sidechains are separate blockchains that are connected with the main chain to increase their functionality, and often throughout. Examples include Loom which is a PoS sidechain on Ethereum, and the Blockstream Liquid side-chain that enables faster, confidential Bitcoin transfers. Sidechains tend to be more centralized than the main chain, and require their own set of validators/miners.
-
-## Soft Fork
-A soft fork brings upgrades to a blockchain. It maintains the old chain by running different sets of rules. The latest Bitcoin Upgrade was a soft fork introducing changes to the base protocol. This means that, unlike a hard fork, a soft fork is backward compatible. Even nodes that haven’t been updated will still be able to run the chain.
-
-## Super Block
-A Super Block is a block which meets a Super Level difficulty required to take a position on the [Cascade](#cascade-minima).
-
-## Super Level
-Also referred to as a block's maximum potential Level on the [Cascade](#cascade-minima). This is the level representing the furthest depth a Super Block could be positioned on the Cascade. (Determined at random by the amount of PoW used to mine the block.)
-
-## Tokenomics
-A term made up of a combination of "token" and economics, describing the structure of a token from an economic standpoint. Tokenomics cover areas such as token distribution, allocation, supply, issuance schedule, and utility.
-
-## Transaction Difficulty (Minima)
-A value influencing how much 'Proof-of-Work' a user's node must perform before being able to propagate their transaction to the network.
-
-## TxBlock (Minima)
-A TxBlock is a [TxPoW unit](#txpow-unit-minima) that met a difficulty level (in the process of 'mining') high enough to become a block and therefore be added to the blockchain. A TxBlock contains the TxPoW unit plus additional information including the MMR peaks from the previous block, coin proofs for all the spent coins in this block and a list of all newly created coins (UTxOs).
-
-## TxPoW
-Transaction Proof-of-Work is Minima's unique Proof-of-Work mechanism which involves all users providing a small amount of hash power to the network when they want to send a transaction.
-All users must provide TxPoW before their transaction can be sent across the network, this means that all users contribute to securing the chain. Although the TxPoW 'mining' process involves solving a cryptographic puzzle similar to traditional PoW as known in Bitcoin, the difference is that there are no dedicated miners and no financial rewards gained.
-
-## TxPoW Tree
-The unpruned portion of the Minima blockchain, consisting of the main chain of blocks (i.e. heaviest chain according to the [GHOST](#ghost-minima) algorithm) and any branches off the main chain. The root of the TxPoW tree meets the tip of the Cascade.
-
-## TxPoW Tree Node
-A node in the TxPoW tree. Analogous to a TxBlock.
-
-## TxPoW Unit (Minima)
-The main building block in Minima. A TxPoW unit consists of a header and body containing one main transaction and a list of mempool transactions. A TxPoW unit may or may not become a block in the blockchain.
-
-## UTXO
-UTXO stands for Unspent Transaction Output and describes how (in some cryptocurrencies, including Minima) transactions are created.
-In Minima, UTxOs are also known as Coins. UTxOs are output(s) from transactions which can then be used as inputs for future transactions. For a valid blockchain transaction, only unspent outputs can be used as inputs for a transaction.
-
-## Velvet Fork
-A protocol upgrade mechanism was first proposed by researchers at the Imperial College of London. Unlike hard forks, velvet forks don't harm the miners that haven't updated to the new rules, as they are completely backward compatible.
-
-## WAGMI
-WAGMI is an acronym for "We're all going to make it". It's expressing the sentiment of crypto enthusiasts that it's not just about getting rich oneself, but ensuring that we are all going to make it. The opposite of WAGMI is "NGMI", short for "not going to make it".
-
-## Wallet (Hot & Cold)
-Wallets enable users to store their cryptocurrencies. Generally, we distinguish between hot and cold wallets. Hot wallets are software-based, and constantly connected to the internet, therefore hot. Cold wallets are either paper wallets or specialized hardware devices that keep crypto holdings offline. It's advised to keep crypto as much as possible in cold wallets.
-
-## Web 1.0
-The first iteration of the Web, the so-called "Read-only Web", consisted of static websites, and had to be accessed through phone lines. You can learn more about it [here](https://minima.global/post/a-short-history-of-the-internet).
-
-## Web 2.0
-The second version of the Web, the web as we currently use it. Web 2.0 enabled anyone to become a content creator and offered a much richer user experience. More details on it are also covered in our [blog](https://minima.global/post/web-2-0-the-web-as-a-platform).
-
-## Web 3.0
-Web 3.0 doesn't have a clear-cut definition yet. It's used to refer to the next generation of the Web, a web that's not just read, and write, but also empowers individuals to own their data. You can learn more about the characteristics of Web 3.0 [here](https://minima.global/post/web-3-0-more-than-just-crypto).
-
-## Whitepaper
-In a Whitepaper blockchain, companies and crypto projects explain their project in-depth, outline the need for it, and the token structure. You can find the Minima WP [here](https://docs.minima.global/docs/learn/minimawhitepaper/abstract).
-
-## Winternitz Signature Scheme
-Minima uses the, quantum secure, Winternitz One-Time-Use Signature Scheme to generate multiple, one-time-use, private and public key pairs and for generating digital signatures required for signing messages or transactions.
-
-## Zero-Knowledge Proofs
-Zero-Knowledge-Proofs are a cryptographic method used to prove that something is known without revealing the underlying information directly.
-When using them you can basically prove that you know a secret to another party, without revealing the secret itself. The method dates back to the 80s and has since found its way into cryptocurrencies, with Zcash being the first one to deploy it, enabling private transactions.
-
+---
+title: Glossary
+description: Minima Glossary
+icon: Book
+tag: learn
+---
+
+
+## Introduction
+When you are new to the world of cryptocurrencies and blockchain, it can be pretty daunting reading through related news, let alone an entire Whitepaper. We've all been there. That's why we've created this glossary, to help you understand not only Minima but the entire crypto-industry and the slang they use on CT (Crypto-Twitter) better.
+
+If there are any terms that we're missing, don't hesitate to contact us and we'll add them. We will consistently work on adding new words and editing old ones to ensure accuracy.
+
+## 51% Attack
+
+An attack where a malicious actor overtakes 51% of a network's hashrate and wreaks havoc on the system. If a blockchain undergoes a 51% attack, the attackers can reverse transactions, mint new tokens, and enrich themselves while destroying the integrity of the original chain.
+
+## ABS
+ABS is short for Adaptive Block Scaling and describes the Process Minima uses to adjust the block size depending on the traffic over the previous 24 hours. If the network traffic was high, blocks will automatically scale up to host more transactions, whereas lower traffic is met with smaller blocks.
+
+## ASIC
+“Application-Specific Integrated Circuit miner” is powerful high-performance hardware specifically designed to mine Proof-of-Work cryptocurrencies. ASIC mining has increased the hashrate on blockchain networks but also led to excluding individual miners from meaningfully participating in block validation.
+
+## Base Block Weight (Minima)
+The actual number of hashes it took for a particular block to meet (or exceed) the required block difficulty level.
+
+## BFT
+BFT stands for Byzantine Fault Tolerance and describes the ability of a system to tolerate up to 1/3 of its participants acting maliciously.
+Byzantine Fault Tolerance is based on the Byzantine Generals Problem — which consisted in reaching consensus in a system one message at a time with a potential traitor among them.
+
+## Binary (Hash) Tree
+A tree structure where each node in the tree has at most two children - a left and right child - and each node except the root has one parent.
+
+## Block (Minima)
+Also known as TxBlock in Minima. A block contains records of transactions and an immutable hash to its previous block in the blockchain. In Minima, blocks are [TxPoW units](#txpow-unit-minima) which meet the required difficulty level to become a block and are therefore added to the end of the blockchain.
+
+## Block Difficulty (Minima)
+A value determining whether an already mined TxPoW unit will become a block. The value of the TxPoW ID must be lower than the block difficulty target value for it to become a block. Block Difficulty is dynamic and changes with each block.
+
+## Block Reward
+Block rewards describe how much miners earn for being the first to find the next block that will be added to the chain by solving a cryptographic puzzle. There are no block rewards in Minima.
+
+## Blockchain Trilemma
+The Blockchain Trilemma describes the idea that a blockchain cannot unite all three: Decentralization, Security, and Scalability. According to the trilemma, a blockchain can only ever achieve two of the three features and has to sacrifice one of them.
+
+## Branch
+Branching is a natural occurrence in a blockchain, which happens when two or more valid blocks with the same block number are produced by different nodes in the network and are added to the chain, creating a split. In Minima, nodes in the network come to consensus on which branch to continue building on based on which branch is heaviest. See [GHOST](#ghost-minima)
+
+## BUIDL
+This is crypto-slang and a play on HODL (see below). It's unclear when the term was first used, but it seems to have emerged around 2017. It serves as a reminder to focus one's energy and resources on building and not just short-term gains.
+
+## Burn
+In the context of tokens, a burn is a mechanism that removes tokens from the circulating supply, therefore reducing tokens in circulation. A burn can be either directly programmed into the protocol, or conducted by a company by buying back, and destroying tokens (by sending them to a wallet address that no one can control).
+On Minima, The Burn is a small cost (fee) which is incurred when sending transactions on the Minima network during times of high demand. It serves to order transactions, regulate on-chain traffic and maintain our deflationary model.
+
+## Cascade (Minima)
+Also known as The Cascading Chain. The Cascade is an immutable, chronological, unbroken chain consisting of Super Blocks which provide proof of the total Proof-of-Work input into the blockchain.
+
+## Cascade Levels (Minima)
+The Cascading Chain consists of 32 levels, where each level consists of [Super Blocks](#super-block) which, by chance, exceeded the difficulty met by the blocks in the previous level by a factor of 2. e.g. A block in level 3 of the Cascading Chain achieved twice the difficulty of a block in level 2.
+
+## CeFi
+Short for centralized Finance, describing the existing financial system which is run mostly by centralized intermediaries. Sometimes also called TradFi, short for traditional Finance.
+
+## Change
+In a UTxO based blockchain, the amount input into a transaction must be more than or equal to the desired output. If the input is more than the desired output, another output must be specified to return the difference (the change) to the sender. In Minima, if change is not specified, the difference is burned (i.e. removed from circulation).
+
+## Coin
+The native currency of a blockchain. e.g. Minima is the native coin for the Minima blockchain.
+In Minima, the term Coin can also be used to refer to a specific [UTxO](#utxo).
+
+## Coin Mixer
+Coin Mixers are services promising users more privacy when they transact on public blockchains. When using Coin Mixer, users' transactions are mixed with other transactions, obfuscating the path of the original transaction to increase its anonymity.
+
+## Coin Proof (Minima)
+In Minima, coins are recorded as leaf nodes in a hash-sum tree (an [MMR](#mmr-minima)), with each user only keeping the paths of the tree that point to their own coins. Users are required to present a Coin Proof for each coin when they wish to spend them, to prove it exists and is unspent.
+A Coin Proof is a collection of entries (proof-chunks) in the MMR tree which, together, can be used by any other node in the network to calculate the path to a peak of the MMR tree, proving that a coin exists.
+
+## Coloured Coins (Minima)
+Coloured coins are used to create custom tokens and NFTs on Minima. When creating custom tokens/NFTs, tiny fractions of 1 Minima are allocated to represent the supply of a custom token or NFT which can then be exchanged in the same way as Minima coins.
+
+## Current Super Level (Minima)
+The level representing how deep in the Cascading Chain a particular [Super Block](#super-block) is currently positioned.
+
+## Current Block Weight (Minima)
+The current weight of a block is its [base weight](#base-block-weight-minima) multiplied by a factor dependant on the [current level](#current-super-level-minima) the block is positioned in, such that Current Weight = Base Weight * 2Current level no.
+
+## DAO
+DAO is an acronym for Decentralized Autonomous Organization. A DAO is a community-led entity without one central authority that is governed by rules of open-source blockchain protocols. Most DAOs employ governance tokens to help them come to a consensus.
+
+## dApps
+dApps is short for decentralized apps and describes apps running on top of blockchain networks. One important thing to remember is that the User-Interface you will likely interact with by going to a dApps website such as Uniswap.com is not the actual dApp. It's a centralized interface that enables anyone to engage with the dApp and the underlying blockchain easily.
+
+## Decentralization
+Decentralization more broadly refers to the dispersion of power and control. In Blockchain networks, decentralized means having thousands, millions of nodes all running the same software and storing a copy of the entire blockchain ledger.
+
+Decentralization increases accessibility, fault tolerance and makes everyone an equal participant. At Minima, one of our prime measures for decentralization is our node count and the lack of any entity that could overtake the network. In a truly decentralized network, there is no space for any bit of centralized infrastructure.
+
+## DeFi
+Short for decentralized finance, describes an ecosystem of financial apps built on top of public blockchains that promises to be more accessible, transparent, and fair than the currently existing financial system.
+
+## Difficulty (Minima)
+In Minima, the difficulty is a target value influencing the number of hashes required for a node to mine a Transaction or Block. Minima has multiple levels of difficulty: Transaction difficulty, Block difficulty and Super Block difficulty. The mining process ends once the Transaction difficulty has been met.
+
+## Digital Keys
+Digital keys are analogous to physical keys in that they provide access to something private of value. In Minima, and with cryptocurrencies in general, a pair of private and public keys are required to spend and prove ownership of your coins.
+
+## Digital Signature Scheme
+An algorithm that creates unforgeable digital signatures from a private key and a piece of data that requires authentication e.g. a transaction. Examples include Elliptic Curve Digital Signature Algorithm (ECDSA) (used in Bitcoin) or the Winternitz One-Time Signature Scheme (used in Minima).
+
+## dPOS
+dPoS stands for delegated Proof-of-Stake and is a variation of Proof-of-Stake consensus algorithms. Usually, in a delegated Proof-of-Stake network, you will find a set amount of validating nodes that other participants can delegate their stake (token holdings) to in return for a percentage of the Staking Rewards.
+
+## DYOR
+*“Do your own research”* highlights the need to not simply trust what others on Twitter or YouTube are trying to sell. Instead, spend time researching what a project is trying to achieve and how they stack up against their claim. Ideally, researching a crypto project goes all the way to reading the Whitepaper.
+
+## ELTOO
+Eltoo, pronounced “L2”, is a proposed upgrade to Bitcoin to improve its Layer 2 solutions, primarily The Lightning Network.
+Minima's Layer 2 - Omnia - uses ELTOO technology, enabling greater flexibility and functionality for Layer 2 transactions.
+
+## FOMO
+Fear of missing out - or that nagging feeling you get when you see a cryptocurrency’s price skyrocket in a short amount of time and you haven’t invested in it, and are missing out. Note that investing based on FOMO is usually a very risky thing to do. The opposite of FOMO is sometimes coined JOMO - Joy of missing out.
+
+## FUD
+Acronym for Fear, Uncertainty & Doubt. Also used as verb as in "Stop fudding my bags".
+Used in crypto to describe negative news, events, and information.
+
+## Full Node
+Not all nodes are equal (except on the Minima Protocol). A complete node in other blockchain protocols is a node that validates and constructs the blockchain. It also keeps a copy of the entire ledger.
+
+## Future of France
+A Crypto community Meme. It’s not exactly clear who the first one was to mistype, or spell Defi as the “Future of France” but whenever you encounter it (in the context of DeFi), it means the “future of finance”.
+
+## Genesis Block
+The first block of a new blockchain is its genesis block.
+
+## GHOST (Minima)
+Greedy Heaviest Observed Sub Tree - the algorithm used by all nodes in the Minima network to decide which branch in the TxPoW Tree should be considered the main chain. An alternative to the Longest Chain rule. See [GHOST](/docs/learn/mining-consensus#selecting-the-main-chain-ghost).
+
+## GM
+It stands for “Good Morning” and is often used on Crypto Twitter by y crypto enthusiasts to wish each other a good morning. The correct reaction to receiving a “GM” is responding with “GM.” Not to be confused with General Motors.
+
+## Hard Fork
+A hard fork is a significant network upgrade on a blockchain. During a hard fork, all network nodes are required to upgrade to the new blockchain software. Only nodes running the latest version will be participating in the network, the rules of the old blockchain aren’t accepted into new blocks — a hard fork is not backward compatible.
+
+## Hash Tree
+Also known as a Merkle Tree, a Hash Tree is a hash-based data structure used for efficient data verification. The leaf nodes of the tree are the hashes of some data, and each non-leaf node is a hash of its children.
+
+## Hashrate
+The Hashrate describes the computing power backing a blockchain network.
+
+## Hashrate distribution
+The Hashrate distribution shows how the computing power in a blockchain network is distributed and offers valuable insight into how (de)centralized a network is.
+
+## HODL
+Hodl is not unlike often assumed short for “Hold on for dear life”, but simply a misspelling of hold. It’s often used by crypto investors to encourage each other to not sell their coins. Since the wall streets bet saga earlier this year, it’s often used in conjunction with diamond hands (💎 🙌).
+
+## Initial Blockchain Download (IBD)
+When a new node joins the network, they need to download the Minima Blockchain from a peer. This process is the Initial Blockchain Download.
+
+## Layer 1
+Layer 1 refers to the base protocol of a blockchain — the actual blockchain on top of which other applications and layers can be built. For Minima, Layer 1 is the Minima blockchain, which every node runs.
+
+## Light Client
+Light clients are lightweight applications, that only keep track of their own transactions. They rely on connections to full nodes to catch up and execute their transactions or verify the status of the blockchain.
+
+## Liquidity
+Liquidity in financial markets and crypto refers to the ability to easily buy and sell an asset. The more liquid an asset is, the faster one can sell or buy it.
+
+## Liquidity Mining
+Describes the process of providing liquidity to decentralized exchanges and earning a share of transaction fees in return.
+
+## Liquidity Provider
+Individuals or entities that provide liquidity by depositing tokens into a DEXs smart contracts are called Liquidity Providers, sometimes shortened LP.
+
+## Maxima
+Maxima is the censorship resistant information transport layer running over the Minima network. See [Network Overview.](/docs/learn/network-overview)
+
+## Maximum supply
+The maximum amount of a token that will ever exist. By capping the supply, a token retains scarcity. Minima’s maximum supply is one billion Minima coins.
+
+## Mempool (Minima)
+Short for “memory pool”, the Mempool is a collection of valid, unconfirmed TxPoW units (Transactions) that nodes in the network have not yet included in a block. Nodes will order Mempool transactions by the amount they burn.
+
+## Metaverse
+The Metaverse is the latest buzzword in crypto, and a term put together from the greek meta for Beyond and Universe which describes everything that exists. While no agreed-upon definition of it exists, we believe that it will be an experience that combines the digital with the real world, contain its economy that connects to broader economies, spans different worlds together, leverages VR & AR, and provides a level of interoperability we’ve not seen so far. You can read more about the Metaverse [here](https://www.minima.global/post/ready-for-the-metaverse).
+
+## Minima
+Minima is a censorship resistant blockchain and network. See [Network Overview.](/docs/learn/network-overview)
+
+## MiniDapps
+MiniDapps is the term used to refer to decentralized applications built on top of Minima. See [About MiniDapps.](/docs/learn/minidapps-about)
+
+## Mining
+The process in which nodes race to find the right hash in Proof-of-Work blockchains, to validate blocks and receive block rewards.
+
+## Mining Pools
+Mining Pools are groups or communities of people pooling their computing resources to mine cryptocurrencies. Often, these are commercial operations run by profit-oriented businesses.
+
+## MMR (Minima)
+Merkle Mountain Range. An MMR tree is a binary tree structure used in Minima to store coins, scripts and signatures. MMR entries are stored in the MMR Database.
+
+## NFT
+Non-Fungible-Token, a digital asset with unique properties, that can't be replicated nor interchanged. You can read more about them here.
+
+## Node
+Any computer that is connected to a network is referred to as a Node. While many might think mostly of mining nodes when referring to PoW networks, various other node types exist that play a crucial role in storing the ledger's history.
+
+On Minima, all Minima nodes are equal. Each one of them participates in constructing the blockchain and in validating transactions.
+
+## Off-chain
+Transactions that don't happen on the main blockchain, are off-chain. Often implemented to increase the transactions a network can handle.
+On Minima, users can transact off-chain once a relationship has been established on-chain.
+
+## Omnia
+Omnia is Minima's Layer 2 solution which uses the latest Lightning technology - ELTOO. It is analogous to Bitcoin's Lightning Network, but more advanced. See [Network Overview.](/docs/learn/network-overview)
+
+## On-chain
+All transactions that happen on the main blockchain are on-chain. In Minima's case, that's establishing transaction relationships, and anything related to resolving conflicts.
+
+## Orphan Block
+Sometimes blocks are verified, and valid, but not added to the blockchain.
+This often happens when two or more miners try to solve the block at the same time.
+Ultimately, the block with the highest amount of PoW is added to the chain, while the one with lower PoW will be discarded, and miners working on it won't receive any rewards.
+
+## PoS
+Proof-of-Stake. A consensus algorithm in which nodes with the native platform token at "stake" are responsible for validating new transactions.
+Often in these networks, the more stake a node has, the higher the chances to validate blocks and verify blocks. Another implementation of Proof-of-Stake is delegated Proof-of-Stake (see dPoS).
+
+## PoW
+Proof-of-Work, nodes in Proof-of-Work networks solve cryptographic puzzles (deliver work) in order to verify transactions.
+PoW first came up as a measure to fight spam and Denial-of-Service attacks. Since the inception of Bitcoin, it's been implemented in various blockchains to enable the trustless transfer of value. Minima uses a variant of PoW to secure its network: [TxPoW](#txpow).
+
+## Private Key
+A 32-character string used to generate an associated Public Key and subsequently a Public Address. A Private Key enables its owner to spend the cryptocurrency associated with its Public Key/Address.
+
+## Proof (Minima)
+In Minima, users are required to present Proofs for their coins, scripts and signatures which are held in an MMR tree. Proofs are a collection of entries (proof-chunks) in the user's MMR database which, together, can be used to calculate a peak or root node of the MMR tree, proving that a leaf node of the tree (i.e. a coin, script or signature) exists.
+
+## Public key
+A public key is generated from the private key, and is used to create a Public Address that users can share with others to receive cryptocurrency.
+
+## Pulse
+The Pulse is the unique mechanism Minima uses to enable all Minima, Maxima and Omnia users in the network to secure the blockchain by providing PoW to the chain.
+ The Pulse happens periodically and consists of two parts:
+ 1. The node generates a message with a list of the latest 256 blocks in its main chain and shares this with its peers. This serves to ensure all nodes keep up to date with the latest blocks.
+ 2. Next, a TxPoW unit with an empty main transaction is generated and 'mined'. This TxPoW will contain a list of transactions from the node's mempool, serving to propagate unconfirmed transactions around the network.
+
+## Scalability
+When talking about Scalability in relation to Blockchain, what most think of is "Transactions per second" - how high the throughput for a network can be.
+However, scalability isn't just about TPS. It has a broader meaning as well, with more scalable blockchains being able to adjust to handling a growing amount of work.
+
+## Script (Minima)
+In Minima, a script is a function or series of functions written in Minima's scripting language - KISS VM. It is analogous to a Smart Contract. Every with every UTxO (coin) has a script associated with it. Scripts must return a value of TRUE at the time of attempting to spent the coin for the transaction to be considered valid. The default script associated with a normal UTxO is **RETURN(SIGNEDBY(UserPublicKey))** i.e. If signed by the owner's public key, this script will return TRUE and can be spent in a transaction.
+
+## Sidechains
+Sidechains are separate blockchains that are connected with the main chain to increase their functionality, and often throughout. Examples include Loom which is a PoS sidechain on Ethereum, and the Blockstream Liquid side-chain that enables faster, confidential Bitcoin transfers. Sidechains tend to be more centralized than the main chain, and require their own set of validators/miners.
+
+## Soft Fork
+A soft fork brings upgrades to a blockchain. It maintains the old chain by running different sets of rules. The latest Bitcoin Upgrade was a soft fork introducing changes to the base protocol. This means that, unlike a hard fork, a soft fork is backward compatible. Even nodes that haven’t been updated will still be able to run the chain.
+
+## Super Block
+A Super Block is a block which meets a Super Level difficulty required to take a position on the [Cascade](#cascade-minima).
+
+## Super Level
+Also referred to as a block's maximum potential Level on the [Cascade](#cascade-minima). This is the level representing the furthest depth a Super Block could be positioned on the Cascade. (Determined at random by the amount of PoW used to mine the block.)
+
+## Tokenomics
+A term made up of a combination of "token" and economics, describing the structure of a token from an economic standpoint. Tokenomics cover areas such as token distribution, allocation, supply, issuance schedule, and utility.
+
+## Transaction Difficulty (Minima)
+A value influencing how much 'Proof-of-Work' a user's node must perform before being able to propagate their transaction to the network.
+
+## TxBlock (Minima)
+A TxBlock is a [TxPoW unit](#txpow-unit-minima) that met a difficulty level (in the process of 'mining') high enough to become a block and therefore be added to the blockchain. A TxBlock contains the TxPoW unit plus additional information including the MMR peaks from the previous block, coin proofs for all the spent coins in this block and a list of all newly created coins (UTxOs).
+
+## TxPoW
+Transaction Proof-of-Work is Minima's unique Proof-of-Work mechanism which involves all users providing a small amount of hash power to the network when they want to send a transaction.
+All users must provide TxPoW before their transaction can be sent across the network, this means that all users contribute to securing the chain. Although the TxPoW 'mining' process involves solving a cryptographic puzzle similar to traditional PoW as known in Bitcoin, the difference is that there are no dedicated miners and no financial rewards gained.
+
+## TxPoW Tree
+The unpruned portion of the Minima blockchain, consisting of the main chain of blocks (i.e. heaviest chain according to the [GHOST](#ghost-minima) algorithm) and any branches off the main chain. The root of the TxPoW tree meets the tip of the Cascade.
+
+## TxPoW Tree Node
+A node in the TxPoW tree. Analogous to a TxBlock.
+
+## TxPoW Unit (Minima)
+The main building block in Minima. A TxPoW unit consists of a header and body containing one main transaction and a list of mempool transactions. A TxPoW unit may or may not become a block in the blockchain.
+
+## UTXO
+UTXO stands for Unspent Transaction Output and describes how (in some cryptocurrencies, including Minima) transactions are created.
+In Minima, UTxOs are also known as Coins. UTxOs are output(s) from transactions which can then be used as inputs for future transactions. For a valid blockchain transaction, only unspent outputs can be used as inputs for a transaction.
+
+## Velvet Fork
+A protocol upgrade mechanism was first proposed by researchers at the Imperial College of London. Unlike hard forks, velvet forks don't harm the miners that haven't updated to the new rules, as they are completely backward compatible.
+
+## WAGMI
+WAGMI is an acronym for "We're all going to make it". It's expressing the sentiment of crypto enthusiasts that it's not just about getting rich oneself, but ensuring that we are all going to make it. The opposite of WAGMI is "NGMI", short for "not going to make it".
+
+## Wallet (Hot & Cold)
+Wallets enable users to store their cryptocurrencies. Generally, we distinguish between hot and cold wallets. Hot wallets are software-based, and constantly connected to the internet, therefore hot. Cold wallets are either paper wallets or specialized hardware devices that keep crypto holdings offline. It's advised to keep crypto as much as possible in cold wallets.
+
+## Web 1.0
+The first iteration of the Web, the so-called "Read-only Web", consisted of static websites, and had to be accessed through phone lines. You can learn more about it [here](https://minima.global/post/a-short-history-of-the-internet).
+
+## Web 2.0
+The second version of the Web, the web as we currently use it. Web 2.0 enabled anyone to become a content creator and offered a much richer user experience. More details on it are also covered in our [blog](https://minima.global/post/web-2-0-the-web-as-a-platform).
+
+## Web 3.0
+Web 3.0 doesn't have a clear-cut definition yet. It's used to refer to the next generation of the Web, a web that's not just read, and write, but also empowers individuals to own their data. You can learn more about the characteristics of Web 3.0 [here](https://minima.global/post/web-3-0-more-than-just-crypto).
+
+## Whitepaper
+In a Whitepaper blockchain, companies and crypto projects explain their project in-depth, outline the need for it, and the token structure. You can find the Minima WP [here](https://docs.minima.global/docs/learn/minimawhitepaper/abstract).
+
+## Winternitz Signature Scheme
+Minima uses the, quantum secure, Winternitz One-Time-Use Signature Scheme to generate multiple, one-time-use, private and public key pairs and for generating digital signatures required for signing messages or transactions.
+
+## Zero-Knowledge Proofs
+Zero-Knowledge-Proofs are a cryptographic method used to prove that something is known without revealing the underlying information directly.
+When using them you can basically prove that you know a secret to another party, without revealing the secret itself. The method dates back to the 80s and has since found its way into cryptocurrencies, with Zcash being the first one to deploy it, enabling private transactions.
+
diff --git a/content/docs/learn/index.mdx b/content/docs/learn/index.mdx
index 3e22ede..658e7d5 100644
--- a/content/docs/learn/index.mdx
+++ b/content/docs/learn/index.mdx
@@ -1,53 +1,59 @@
----
-title: Core Concepts
-description: Introduction to Minima
-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)
-
-Minima requires users to provide work, in the form of hashing, to `mine` their own transactions, this is **TxPoW**.
-
-Once a user has contributed a small amount of work (~1 second of hashing) they have contributed enough for their transaction to be sent around the network.
-
-
- There are no financial rewards for mining your transactions e.g. block rewards
- or collection of fees, the reward is simply being able to broadcast a (valid)
- transaction to the network.
-
-
-Transactions are held in [TxPoW units](txpow), which are propagated around the network and may or may not become blocks. TxPoW units contain a user's transaction and the hashes of other unconfirmed transactions known to the user's node. TxPoW units become blocks if they, by chance, meet the level of difficulty required to become a block.
-
-This ensures that all users can contribute to the construction of the chain and is in contrast to Bitcoin where users rely on other dedicated `miners` with specific hardware to provide PoW and propagate their transactions on their behalf.
-
-## The Burn
-
-The Burn is a small cost (fee) which is incurred when sending transactions on the Minima network during times of high demand. This cost, denominated in Minima, is `burned` i.e. removed from Minima's hard-capped supply, making Minima a deflationary currency as the overall circulating supply slowly decreases over time.
-
-The burn serves multiple purposes:
-
-- **A strong incentive to propagate and process a transaction**: All users in the network will benefit from the decrease in supply as coins that are left become more scarce and therefore more valuable.
-- **A method for ordering transactions and regulating on-chain traffic**: Similar to the fee model on other blockchains, the burn serves as a selection method for deciding which unconfirmed transactions will be added to a block. The higher the burn amount in a transaction, the more likely it is that a transaction will be added to a block.
-- **A mechanism for spam prevention by making Denial-of-Service (DoS) attacks expensive**: The burn may be high during periods of heavy traffic or spam and, as it rises, traffic will decrease, self-regulating the system. The burn can be nil or very low when traffic is at manageable levels as the total amount is not important, only the relative burn amount in comparison to other transactions.
-
-## MMR (Merkle Mountain Range) Database
-
-To ensure that all users of the network can contribute to the construction of the chain, the chain needs to be small enough to run on a mobile device. This would not be possible if the entire history of the chain was required as this would be too much of an overhead for a mobile device. Therefore the blockchain must be constantly reduced in size to meet this requirement. This is known as pruning.
-
-The impact of pruning means that the full transaction history of the chain is not kept, therefore a storage mechanism is required to keep track of coins that were created in blocks that have since been pruned. This is the role of the MMR database.
-
-Hence, users must keep track of their spent and unspent coins/TxOs (Transaction Outputs) independently of the chain. Each coin is stored as a leaf node in a tree structure (a Merkle hash-sum tree). Then, using a collection of nodes in this tree, a proof path can be created from the coin to a peak of the tree, proving the existence of a coin even if the block that it was created in has been pruned.
-
-All users only keep the parts of the MMR tree required to create the proofs for their own coins, which is a tiny amount of data compared to all the coins in the network. Users are also required to store the peaks and the root of the tree so that they can validate a Coin Proof that is presented to them by another user.
-
-When a user wishes to spend their coins, they must provide the up-to-date, valid proof that it is unspent. Any other node in the network can verify this proof by calculating the peaks and root hash of the MMR tree from the proof and ensuring it matches their own values for the peak and root hash.
+---
+title: Core Concepts
+description: Introduction to Minima
+icon: Album
+tag: learn
+---
+
+## UTxO Model
+
+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.
+
+
+
+## Transaction Proof-of-Work (TxPoW)
+
+Minima requires users to provide work, in the form of hashing, to mine their own transactions, this is **TxPoW**.
+
+Once a user has contributed a small amount of work (~1 second of hashing) they have contributed enough for their transaction to be sent around the network.
+
+
+ There are no financial rewards for mining your transactions e.g. block rewards
+ or collection of fees, the reward is simply being able to broadcast a (valid)
+ transaction to the network.
+
+
+Transactions are held in [TxPoW units](/docs/learn/txpow), which are propagated around the network and may or may not become blocks. TxPoW units contain a user's transaction and the hashes of other unconfirmed transactions known to the user's node. TxPoW units become blocks if they, by chance, meet the level of difficulty required to become a block.
+
+This ensures that all users can contribute to the construction of the chain and is in contrast to Bitcoin where users rely on other dedicated miners with specific hardware to provide PoW and propagate their transactions on their behalf.
+
+## The Burn
+
+The Burn is a small cost (fee) which is incurred when sending transactions on the Minima network during times of high demand. This cost, denominated in Minima, is `burned` i.e. removed from Minima's hard-capped supply, making Minima a deflationary currency as the overall circulating supply slowly decreases over time.
+
+The burn serves multiple purposes:
+
+- **A strong incentive to propagate and process a transaction**: All users in the network will benefit from the decrease in supply as coins that are left become more scarce and therefore more valuable.
+- **A method for ordering transactions and regulating on-chain traffic**: Similar to the fee model on other blockchains, the burn serves as a selection method for deciding which unconfirmed transactions will be added to a block. The higher the burn amount in a transaction, the more likely it is that a transaction will be added to a block.
+- **A mechanism for spam prevention by making Denial-of-Service (DoS) attacks expensive**: The burn may be high during periods of heavy traffic or spam and, as it rises, traffic will decrease, self-regulating the system. The burn can be nil or very low when traffic is at manageable levels as the total amount is not important, only the relative burn amount in comparison to other transactions.
+
+## MMR (Merkle Mountain Range) Database
+
+To ensure that all users of the network can contribute to the construction of the chain, the chain needs to be small enough to run on a mobile device. This would not be possible if the entire history of the chain was required as this would be too much of an overhead for a mobile device. Therefore the blockchain must be constantly reduced in size to meet this requirement. This is known as pruning.
+
+The impact of pruning means that the full transaction history of the chain is not kept, therefore a storage mechanism is required to keep track of coins that were created in blocks that have since been pruned. This is the role of the MMR database.
+
+Hence, users must keep track of their spent and unspent coins/TxOs (Transaction Outputs) independently of the chain. Each coin is stored as a leaf node in a tree structure (a Merkle hash-sum tree). Then, using a collection of nodes in this tree, a proof path can be created from the coin to a peak of the tree, proving the existence of a coin even if the block that it was created in has been pruned.
+
+All users only keep the parts of the MMR tree required to create the proofs for their own coins, which is a tiny amount of data compared to all the coins in the network. Users are also required to store the peaks and the root of the tree so that they can validate a Coin Proof that is presented to them by another user.
+
+When a user wishes to spend their coins, they must provide the up-to-date, valid proof that it is unspent. Any other node in the network can verify this proof by calculating the peaks and root hash of the MMR tree from the proof and ensuring it matches their own values for the peak and root hash.
diff --git a/content/docs/learn/keys-signatures.mdx b/content/docs/learn/keys-signatures.mdx
new file mode 100644
index 0000000..249207d
--- /dev/null
+++ b/content/docs/learn/keys-signatures.mdx
@@ -0,0 +1,391 @@
+---
+title: Keys and Signatures
+description: Learn about the Minima Keys and Signatures
+tag: learn
+---
+
+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.
+
+
+## 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.
+
+
+### 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.
+
+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.
+
+
+Minima also uses MMR trees for storing a user’s coins. See [MMR](/docs/learn/mmr-database).
+
+## 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
+
+
+
+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 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.
+
+To find out more about Winternitz security, see [https://eprint.iacr.org/2011/191.pdf](https://eprint.iacr.org/2011/191.pdf)
+
+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 |
+
+**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.
+
+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.
+
+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.
+
+**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.
+
+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;
+- 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.
+
+**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 |
+
+**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 |
+
+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
+
+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).
+
+Each of these **modified private seeds** is used to create a Tree of Trees, the root of which becomes one of the user’s multiple-use root public keys.
+
+Executing the **keys** command shows us the **root keys** that have been created:
+
+```bash title="Terminal"
+keys
+
+# Output
+{
+ "command":"keys",
+ "status":true,
+ "response":[{
+ "size":64,
+ "depth":3,
+ "uses":0,
+ "maxuses":262144,
+ "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.
+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.
+
+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.
+
+**Example**
+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.
+
+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)
+
+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)
+
+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)
+
+
+ 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/mmr-database).
+
+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) |
+
+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": [
+ {
+ "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/keysandsignatures.mdx b/content/docs/learn/keysandsignatures.mdx
deleted file mode 100644
index c4f294e..0000000
--- a/content/docs/learn/keysandsignatures.mdx
+++ /dev/null
@@ -1,300 +0,0 @@
----
-title: Keys and Signatures
-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.
-
-
-## 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.
-
-
-### 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.
-
-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.
-
-
-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
-
-
-
-
-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 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.
-
-To find out more about Winternitz security, see [https://eprint.iacr.org/2011/191.pdf](https://eprint.iacr.org/2011/191.pdf)
-
-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|
-
-**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.
-
-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.
-
-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.
-
-**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.
-
-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;
-- 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.
-
-**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|
-
-
-**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|
-
-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
-
-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).
-
-Each of these **modified private seeds** is used to create a Tree of Trees, the root of which becomes one of the user’s multiple-use root public keys.
-
-Executing the **keys** command shows us the **root keys** that have been created:
-
-```bash title="Terminal"
-keys
-
-# Output
-{
- "command":"keys",
- "status":true,
- "response":[{
- "size":64,
- "depth":3,
- "uses":0,
- "maxuses":262144,
-"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.
-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.
-
-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.
-
-**Example**
-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.
-
-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)
-
-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)
-
-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)
-
-
-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).
-
-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) |
-
-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
diff --git a/content/docs/learn/about-maxima.mdx b/content/docs/learn/maxima-about.mdx
similarity index 98%
rename from content/docs/learn/about-maxima.mdx
rename to content/docs/learn/maxima-about.mdx
index bf747a2..6df488a 100644
--- a/content/docs/learn/about-maxima.mdx
+++ b/content/docs/learn/maxima-about.mdx
@@ -1,39 +1,39 @@
----
-title: About
-description: Maxima is a new layer 1 blockchain that is built on top of Minima.
-tag: learn
----
-
-
-
-## What is Maxima?
-
-**Every Minima node includes Maxima.**
-
-Maxima is to information what Minima is to value.
-
-Where Minima provides freedom of *value* exchange; Maxima provides freedom of *information* exchange.
-
-Maxima is an information transport layer protocol that allows anyone to exchange information, with their chosen contacts, over Minima’s peer-to-peer network.
-
-This unlocks the power of composability to create true Web 3 applications combining peer-to-peer exchange of value and information.
-
-Totally decentralized - without censorship - without personal data collection.
-
----------
-
-**Each Minima node runs the Minima blockchain** in full to enable all nodes to transact with each other without third-party intermediaries.
-
-Transacting over Minima involves sending coins, custom tokens or NFTs between nodes. Transactions can be simple payments or programmed to cater for more complex use cases using Minima’s smart-contract language, KISS.
-
-When sending transactions over the network, users must perform a small amount of work from their device, called **Transaction Proof of Work (TxPoW), which secures the network from attack.**
-
----------
-
-**Each Minima node also runs the Maxima protocol** to enable nodes to send encrypted data like text, pictures or documents to each other, independently of the Minima blockchain.
-
-Users can communicate with a peer on the network e.g. a friend, family member or another device, by adding them as a **Maxima Contact**. Messages can then be sent to Maxima Contacts via decentralized apps (known as MiniDapps) such as MaxSolo or Chatter which interact with the Maxima protocol.
-
-Although users can send messages over Maxima free of charge, to prevent spam, they must contribute to the security of the Minima network by performing a small Tx-PoW when sending a message. On average, the TxPoW required to send a message amounts to 1 second of work.
-
-
+---
+title: About
+description: Maxima is a new layer 1 blockchain that is built on top of Minima.
+tag: learn
+---
+
+
+
+## What is Maxima?
+
+**Every Minima node includes Maxima.**
+
+Maxima is to information what Minima is to value.
+
+Where Minima provides freedom of *value* exchange; Maxima provides freedom of *information* exchange.
+
+Maxima is an information transport layer protocol that allows anyone to exchange information, with their chosen contacts, over Minima’s peer-to-peer network.
+
+This unlocks the power of composability to create true Web 3 applications combining peer-to-peer exchange of value and information.
+
+Totally decentralized - without censorship - without personal data collection.
+
+---------
+
+**Each Minima node runs the Minima blockchain** in full to enable all nodes to transact with each other without third-party intermediaries.
+
+Transacting over Minima involves sending coins, custom tokens or NFTs between nodes. Transactions can be simple payments or programmed to cater for more complex use cases using Minima’s smart-contract language, KISS.
+
+When sending transactions over the network, users must perform a small amount of work from their device, called **Transaction Proof of Work (TxPoW), which secures the network from attack.**
+
+---------
+
+**Each Minima node also runs the Maxima protocol** to enable nodes to send encrypted data like text, pictures or documents to each other, independently of the Minima blockchain.
+
+Users can communicate with a peer on the network e.g. a friend, family member or another device, by adding them as a **Maxima Contact**. Messages can then be sent to Maxima Contacts via decentralized apps (known as MiniDapps) such as MaxSolo or Chatter which interact with the Maxima protocol.
+
+Although users can send messages over Maxima free of charge, to prevent spam, they must contribute to the security of the Minima network by performing a small Tx-PoW when sending a message. On average, the TxPoW required to send a message amounts to 1 second of work.
+
+
diff --git a/content/docs/learn/maxima-contacts.mdx b/content/docs/learn/maxima-contacts.mdx
index 05a1ac8..6f62ab7 100644
--- a/content/docs/learn/maxima-contacts.mdx
+++ b/content/docs/learn/maxima-contacts.mdx
@@ -1,40 +1,40 @@
----
-title: Contacts
-description: Maxima Contacts are a way to send messages to other devices on the network.
-tag: learn
----
-
-
-Your Maxima Contacts are your friends, family or other connections that you wish to communicate with, peer-to-peer, without a centralised third-party being able to manage, collect or intercept your messages.
-
-Maintaining connectivity with each contact involves providing a small amount of Tx-PoW, in the same way that it is required for transacting over Minima, to contribute to the security of the blockchain.
-
-As a result, currently, it is reasonable for a node to have around 20 contacts. Any more and it may start to impact the node’s performance.
-
-## Contact Addresses
-
-Similar to a wallet address used to receive funds on Minima, all users have a **contact address** which can be used to receive messages over Maxima. This communication is off-chain and uses peers on the network to ensure the encrypted message reaches the desired node.
-
-Contact addresses change at random time intervals, therefore contacts must always be added shortly after an address is shared.
-
-Once a contact is added, a user's [Maxima Location Service host (mls)](#maxima-location-service) manages the connection between a user and their contacts to ensure they remain connected to their latest contact address.
-
-**Example Contact Address**
-```bash
-MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G1JP0Y8WHVT0JJPGJ01YAQPCEU3PWF51V5J5UKA4RBHYUZFYTTH98KYHZ1K6MF3V6D30DCDD
-YAH34AJ1PZ4GWHCW7SEDQ0HQ9R4TU2G7NS8N816V13ERQ532PYWK9Z732RBZ7KFCQCENAMAJP9V7EH3R06493T25U9PY7HJAS0Z311WA6K24P0BZ82NTQNY2BQ
-TB5VUJRV6QYVK1060800712NCHC@187.220.305.194:9001
-```
-
-## Privacy
-
-Both parties have control over their contact list; if User A no longer wants to be connected to User B, User A can remove User B from their contact list, which also removes them from User B’s ontact list.
-
-Furthermore, the expiring nature of contact addresses prevents User B from being able to reach User A at the same contact address again, and allowing User A to become unreachable on Maxima if desired to avoid unwanted messages.
-
-
-## Contact management
-
-The connection between you and your Contacts is maintained by your **Maxima Location Service (MLS)** host, a randomly selected server node on the Minima network.
-
-To learn more about MLS, see the [Maxima Location Service](/docs/learn/maxima/mls) page.
\ No newline at end of file
+---
+title: Contacts
+description: Maxima Contacts are a way to send messages to other devices on the network.
+tag: learn
+---
+
+
+Your Maxima Contacts are your friends, family or other connections that you wish to communicate with, peer-to-peer, without a centralised third-party being able to manage, collect or intercept your messages.
+
+Maintaining connectivity with each contact involves providing a small amount of Tx-PoW, in the same way that it is required for transacting over Minima, to contribute to the security of the blockchain.
+
+As a result, currently, it is reasonable for a node to have around 20 contacts. Any more and it may start to impact the node’s performance.
+
+## Contact Addresses
+
+Similar to a wallet address used to receive funds on Minima, all users have a **contact address** which can be used to receive messages over Maxima. This communication is off-chain and uses peers on the network to ensure the encrypted message reaches the desired node.
+
+Contact addresses change at random time intervals, therefore contacts must always be added shortly after an address is shared.
+
+Once a contact is added, a user's [Maxima Location Service host (mls)](/docs/learn/maxima-mls) manages the connection between a user and their contacts to ensure they remain connected to their latest contact address.
+
+**Example Contact Address**
+```bash
+MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G1JP0Y8WHVT0JJPGJ01YAQPCEU3PWF51V5J5UKA4RBHYUZFYTTH98KYHZ1K6MF3V6D30DCDD
+YAH34AJ1PZ4GWHCW7SEDQ0HQ9R4TU2G7NS8N816V13ERQ532PYWK9Z732RBZ7KFCQCENAMAJP9V7EH3R06493T25U9PY7HJAS0Z311WA6K24P0BZ82NTQNY2BQ
+TB5VUJRV6QYVK1060800712NCHC@187.220.305.194:9001
+```
+
+## Privacy
+
+Both parties have control over their contact list; if User A no longer wants to be connected to User B, User A can remove User B from their contact list, which also removes them from User B’s ontact list.
+
+Furthermore, the expiring nature of contact addresses prevents User B from being able to reach User A at the same contact address again, and allowing User A to become unreachable on Maxima if desired to avoid unwanted messages.
+
+
+## Contact management
+
+The connection between you and your Contacts is maintained by your **Maxima Location Service (MLS)** host, a randomly selected server node on the Minima network.
+
+To learn more about MLS, see the [Maxima Location Service](/docs/learn/maxima-mls) page.
\ No newline at end of file
diff --git a/content/docs/learn/maxima-faq.mdx b/content/docs/learn/maxima-faq.mdx
index 98ee4ae..0f55393 100644
--- a/content/docs/learn/maxima-faq.mdx
+++ b/content/docs/learn/maxima-faq.mdx
@@ -1,45 +1,45 @@
----
-title: FAQ
-description: Maxima FAQ is a way to send messages to other devices on the network.
-tag: learn
----
-
-
-
-## How does Maxima strengthen Minima’s security?
-
-Each time a message is sent over Maxima, the sender's node must perform a small amount of work (Tx-PoW) which contributes to the overall hash rate of the Minima network, increasing the value of the network as a whole.
-
-The **more messages** sent over Maxima, the more Tx-PoW securing the network;
-The **more secure** the network, the more value can be stored on the network;
-The **more value** can be stored on the network, **the more valuable the network.**
-
-## Is Maxima Free?
-There is no monetary cost to send messages over Maxima.
-Messages are paid for in work — Transaction Proof-of-Work (Tx-PoW). In other words, your node performs a small amount of work in the background for every message you send, which contributes hash power to secure the Minima network.
-**You don’t need any Minima coins to use Maxima.**
-
-## What are Maxima Contacts?
-Your Maxima Contacts can be your friends, family and connections that you wish to communicate with over Maxima.
-By adding the people you know as a Contact in your Minima node, you create a connection with their node across Minima’s peer-to-peer network. This means you will be able to chat and transact with them using the MaxSolo MiniDapp and, in future, any other MiniDapps which use Maxima.
-
-## What is my Maxima Profile and Contact Address?
-Your Maxima Profile is the name that your Maxima Contacts will see once you are connected to eachother.
-Your Contact Address identifies your Minima address and location in the peer-to-peer network. By sharing your Contact Address with people you know and getting them to add you as a Contact, you are allowing them to communicate with you using the MaxSolo MiniDapp.
-
-## What is MaxSolo?
-MaxSolo is a messaging MiniDapp that uses Minima and Maxima to enable you to exchange messages, Minima coins, custom tokens and NFTs to your Maxima contacts.
-The latest version of MaxSolo can be downloaded from our [MiniDapps site](https://minidapps.minima.global) and installed on your Minima node.
-
-## Are my Maxima messages private?
-Messages sent over Maxima are signed by the sender and encrypted end-to-end, so only the recipient of your message is able to decrypt and read it.
-
-## Can I disconnect from a contact?
-For privacy, your Maxima contact address changes periodically. When you choose to delete a contact, you also remove yourself from their Contact list, and they will no longer be able to locate you in the peer-to-peer network.
-
-## How can I use Maxima for messaging?
-Every Minima node includes Maxima. To use Maxima, you must first set your Maxima Profile name and create your Maxima Contacts, then you will be able to communicate with your contacts using any MiniDapp that uses Maxima, for example, MaxSolo.
-
-For setup instructions, please see the [Using Maxima](/docs/userguides/usingmaxima/yourprofile) section.
-
-For more information on MiniDapps, please see the [MiniDapps](/docs/learn/minidapps/minidappsintro) section.
\ No newline at end of file
+---
+title: FAQ
+description: Maxima FAQ is a way to send messages to other devices on the network.
+tag: learn
+---
+
+
+
+## How does Maxima strengthen Minima’s security?
+
+Each time a message is sent over Maxima, the sender's node must perform a small amount of work (Tx-PoW) which contributes to the overall hash rate of the Minima network, increasing the value of the network as a whole.
+
+The **more messages** sent over Maxima, the more Tx-PoW securing the network;
+The **more secure** the network, the more value can be stored on the network;
+The **more value** can be stored on the network, **the more valuable the network.**
+
+## Is Maxima Free?
+There is no monetary cost to send messages over Maxima.
+Messages are paid for in work — Transaction Proof-of-Work (Tx-PoW). In other words, your node performs a small amount of work in the background for every message you send, which contributes hash power to secure the Minima network.
+**You don’t need any Minima coins to use Maxima.**
+
+## What are Maxima Contacts?
+Your Maxima Contacts can be your friends, family and connections that you wish to communicate with over Maxima.
+By adding the people you know as a Contact in your Minima node, you create a connection with their node across Minima’s peer-to-peer network. This means you will be able to chat and transact with them using the MaxSolo MiniDapp and, in future, any other MiniDapps which use Maxima.
+
+## What is my Maxima Profile and Contact Address?
+Your Maxima Profile is the name that your Maxima Contacts will see once you are connected to eachother.
+Your Contact Address identifies your Minima address and location in the peer-to-peer network. By sharing your Contact Address with people you know and getting them to add you as a Contact, you are allowing them to communicate with you using the MaxSolo MiniDapp.
+
+## What is MaxSolo?
+MaxSolo is a messaging MiniDapp that uses Minima and Maxima to enable you to exchange messages, Minima coins, custom tokens and NFTs to your Maxima contacts.
+The latest version of MaxSolo can be downloaded from our [MiniDapps site](https://minidapps.minima.global) and installed on your Minima node.
+
+## Are my Maxima messages private?
+Messages sent over Maxima are signed by the sender and encrypted end-to-end, so only the recipient of your message is able to decrypt and read it.
+
+## Can I disconnect from a contact?
+For privacy, your Maxima contact address changes periodically. When you choose to delete a contact, you also remove yourself from their Contact list, and they will no longer be able to locate you in the peer-to-peer network.
+
+## How can I use Maxima for messaging?
+Every Minima node includes Maxima. To use Maxima, you must first set your Maxima Profile name and create your Maxima Contacts, then you will be able to communicate with your contacts using any MiniDapp that uses Maxima, for example, MaxSolo.
+
+For setup instructions, please see the [Using Maxima](/docs/user-guides/set-your-profile) section.
+
+For more information on MiniDapps, please see the [MiniDapps](/docs/learn/minidapps-about) section.
\ No newline at end of file
diff --git a/content/docs/learn/maxima-messaging.mdx b/content/docs/learn/maxima-messaging.mdx
index 3ec3ec3..c4b460f 100644
--- a/content/docs/learn/maxima-messaging.mdx
+++ b/content/docs/learn/maxima-messaging.mdx
@@ -1,12 +1,12 @@
---
-title: Messaging
+title: Messaging
description: Maxima Messaging is a way to send messages to other devices on the network.
tag: learn
---
-## Maxima Hosts
+## Maxima Hosts
-Each user has a set of Maxima hosts which facilitate the relaying of messages to the user.
+Each user has a set of Maxima hosts which facilitate the relaying of messages to the user.
Maxima hosts are randomly selected server nodes a user has previously connected to.
At any given time, only one Maxima host is responsible for forwarding a user’s encrypted message.
@@ -16,6 +16,7 @@ You can see your Maxima hosts, including the one you are currently connected to,
The host you are connected to determines the ip:port shown in your contact address.
**Example Contact Address**
+
```
MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G1JP0Y8WHVT0JJPGJ01YAQPCEU3PWF51V5J5UKA4RBHYUZFYTTH98KYHZ1K6MF3V6D30DCDD
YAH34AJ1PZ4GWHCW7SEDQ0HQ9R4TU2G7NS8N816V13ERQ532PYWK9Z732RBZ7KFCQCENAMAJP9V7EH3R06493T25U9PY7HJAS0Z311WA6K24P0BZ82NTQNY2BQ
@@ -23,15 +24,12 @@ TB5VUJRV6QYVK1060800712NCHC@187.220.305.194:9001
```
-
-
-
## Sending Messages
Sending a message over Maxima has the following steps:
@@ -44,21 +42,22 @@ Sending a message over Maxima has the following steps:
4. **Send: Sender to Host** - the signed, encrypted message and mined TxPoW unit is sent to the recipient's Maxima host who checks whether the TxPoW is valid and the minimum amount of ‘work’ has been completed.
-5. **Send: Host to Recipient** - If the TxPoW is valid and the minimum amount of ‘work’ has been completed, the message will be forwarded to the recipient, else it is discarded (off-chain process).
+5. **Send: Host to Recipient** - If the TxPoW is valid and the minimum amount of ‘work’ has been completed, the message will be forwarded to the recipient, else it is discarded (off-chain process).
6. **Block propagation** - If the TxPoW unit is a block, it will be propagated to ALL nodes for processing, otherwise the TxPoW unit will be discarded (on-chain).
-:::note
-All Maxima messages are encrypted end-to-end using asymmetric RSA encryption. Messages can only be decrypted and read by the recipient, other nodes involved in the relaying of the message cannot read the data.
-:::
+
+ All Maxima messages are encrypted end-to-end using asymmetric RSA encryption.
+ Messages can only be decrypted and read by the recipient, other nodes involved
+ in the relaying of the message cannot read the data.
+
-
**Orange**: A Maxima process
-**Blue**: A Minima process
\ No newline at end of file
+**Blue**: A Minima process
diff --git a/content/docs/learn/maxima-mls.mdx b/content/docs/learn/maxima-mls.mdx
index bbc9a0c..99cd5d6 100644
--- a/content/docs/learn/maxima-mls.mdx
+++ b/content/docs/learn/maxima-mls.mdx
@@ -1,46 +1,36 @@
----
-title: Location Service
-description: Maxima Location Service is a way to send messages to other devices on the network.
-tag: learn
----
-
-
-
-Your Maxima Location Service (MLS) host is a randomly selected Minima node running on a server that ensures your Contacts always have your most recent contact address to reach you.
-
-Your MLS ensures that, although your contact address expires periodically, you will remain connected to your contacts provided you connect to the network at least once in a 24-hour period.
-
-
-
-*where C1, C2, C3 represent contacts*
-
-
-When your contact address changes, your MLS host is informed and your online contacts are updated with your new address.
-
-For enhanced privacy, your node connects to a new MLS host every 12 hours. To ensure a smooth changeover, for 12 hours after moving to a new MLS host, your node remains connected with your previous MLS in case any of your contacts have been offline for longer than 12 hours.
-
-This ensures that if you remove a contact, they will not be able to re-add you after a maximum of 12 hours.
-
-## Static MLS
-
-A static MLS is a dedicated, single server node that manages the connection to your contacts instead of relying on random nodes on the network. It can ensure a more stable connection with your contacts.
-
-To learn how to set a static MLS, see [setting your static MLS](/docs/userguides/usingmaxima/advancedoptions#setting-your-static-mls).
-
-
-## Permanent Addresses
-
-Permanent addresses can be configured if a non-expiring contact address is required, allowing new users to add you or message you at any time without having to provide them with your latest contact address.
-
-To enable a permanent address for your node, see [setting up a permanent address](/docs/userguides/usingmaxima/advancedoptions#setting-up-a-permanent-address).
-
-
-
-
-
-
+---
+title: Location Service
+description: Maxima Location Service is a way to send messages to other devices on the network.
+tag: learn
+---
+
+Your Maxima Location Service (MLS) host is a randomly selected Minima node running on a server that ensures your Contacts always have your most recent contact address to reach you.
+
+Your MLS ensures that, although your contact address expires periodically, you will remain connected to your contacts provided you connect to the network at least once in a 24-hour period.
+
+
+
+_where C1, C2, C3 represent contacts_
+
+When your contact address changes, your MLS host is informed and your online contacts are updated with your new address.
+
+For enhanced privacy, your node connects to a new MLS host every 12 hours. To ensure a smooth changeover, for 12 hours after moving to a new MLS host, your node remains connected with your previous MLS in case any of your contacts have been offline for longer than 12 hours.
+
+This ensures that if you remove a contact, they will not be able to re-add you after a maximum of 12 hours.
+
+## Static MLS
+
+A static MLS is a dedicated, single server node that manages the connection to your contacts instead of relying on random nodes on the network. It can ensure a more stable connection with your contacts.
+
+To learn how to set a static MLS, see [setting your static MLS](/docs/user-guides/maxima/advanced-maxima-options#setting-your-static-mls).
+
+## Permanent Addresses
+
+Permanent addresses can be configured if a non-expiring contact address is required, allowing new users to add you or message you at any time without having to provide them with your latest contact address.
+
+To enable a permanent address for your node, see [setting up a permanent address](/docs/user-guides/maxima/advanced-maxima-options#setting-up-a-permanent-address).
diff --git a/content/docs/learn/meta.json b/content/docs/learn/meta.json
index 3fc09c6..41a4a26 100644
--- a/content/docs/learn/meta.json
+++ b/content/docs/learn/meta.json
@@ -1,36 +1,29 @@
-{
- "title": "Learn",
- "root": true,
- "pages": [
- "index",
- "network",
- "glossary",
- "---Minima---",
- "transactions",
- "mmr-database",
- "txpow",
- "the-blockchain",
- "miningandconsensus",
- "coloured-coins",
- "keysandsignatures",
- "scripting",
- "quantumsecurity",
- "archivenodes",
- "---Maxima---",
- "about-maxima",
- "maxima-contacts",
- "maxima-messaging",
- "maxima-mls",
- "maxima-faq",
- "---MiniDapps---",
- "about-minidapps",
- "minidapp-structure",
- "minidapp-configfile",
- "minidapp-mds",
- "minidapp-events",
- "mini-browser",
- "service-js",
- "---Smart Contracts---",
- "..."
- ]
-}
+{
+ "title": "Learn",
+ "root": true,
+ "defaultOpen": false,
+ "pages": [
+ "index",
+ "network-overview",
+ "glossary",
+ "---Minima---",
+ "transactions",
+ "mmr-database",
+ "txpow",
+ "the-blockchain",
+ "mining-consensus",
+ "coloured-coins",
+ "keys-signatures",
+ "quantum-security",
+ "---Smart Contracts---",
+ "scripting",
+ "---Maxima---",
+ "maxima-about",
+ "maxima-contacts",
+ "maxima-messaging",
+ "maxima-mls",
+ "maxima-faq",
+ "---MiniDapps---",
+ "minidapps-about"
+ ]
+}
diff --git a/content/docs/learn/about-minidapps.mdx b/content/docs/learn/minidapps-about.mdx
similarity index 91%
rename from content/docs/learn/about-minidapps.mdx
rename to content/docs/learn/minidapps-about.mdx
index 9c564e7..6431c0d 100644
--- a/content/docs/learn/about-minidapps.mdx
+++ b/content/docs/learn/minidapps-about.mdx
@@ -1,42 +1,42 @@
----
-title: About
-description: MiniDapps are applications that run on top of Minima and Maxima.
-tag: learn
----
-
-
-## Overview
-
-We are excited to announce the highly anticipated release of our new MiniDapp System!
-
-Before you get stuck in, here is an introduction to the MiniDapp System and explanation of what MiniDapps are.
-
-
-
-## What is the MiniDapp System?
-The MiniDapp system is an open application ecosystem.
-Similar to the Operating System on your phone that enables you to use Android apps, the MiniDapp System enables you to use MiniDapps on your Minima node.
-
-## What are MiniDapps?
-MiniDapps are Minima’s **Decentralized Applications** running over Minima’s blockchain network. They are web applications that utilise the functionality enabled by the Minima blockchain and peer-to-peer network. This includes our Information Layer - Maxima and, in future, our Layer 2 - Omnia.
-They are your gateway to a true Web 3 economy, open and free.
-
-They are simply zip files (.mds.zip) containing a web application that interacts with your Minima node and can be created for almost anything - some examples include decentralized finance, games, voting, marketplaces, messaging, social media - the world is your oyster.
-
-
-## How do MiniDapps differ from other decentralized applications (dApps)?
-Other ‘decentralized’ applications are decentralized in name only, often relying on centralized services to run effectively. MiniDapps are not. MiniDapps are installed on and run directly from your node, and because every Minima user runs a complete node, there is no need to rely on centralized websites or companies to use MiniDapps. They are permissionless and borderless.
-
-
-## What MiniDapps are currently available?
-You will find the latest MiniDapps, developed by the Minima Team, available to download from the [MiniDapps website](https://minidapps.minima.global/).
-In future, we expect the majority of MiniDapps to be built by the open-source community—that could be you!
-
-## How do I use MiniDapps?
-To start using MiniDapps, simply [login](/docs/userguides/login) to your node.
-
-## Who can build a MiniDapp?
-Anyone can learn to build a MiniDapp.
-The front-end for MiniDapps can be written using the widely known JavaScript, HTML and CSS. Minima’s KISS scripting language is Turing-Complete, allowing for powerful smart contract driven applications. Building a MiniDapp is accessible to anyone willing to learn!
-
-**Visit the [Build](/docs/buildonminima/buildintro) section to learn more about building MiniDapps on Minima.**
\ No newline at end of file
+---
+title: About
+description: MiniDapps are applications that run on top of Minima and Maxima.
+tag: learn
+---
+
+
+## Overview
+
+We are excited to announce the highly anticipated release of our new MiniDapp System!
+
+Before you get stuck in, here is an introduction to the MiniDapp System and explanation of what MiniDapps are.
+
+
+
+## What is the MiniDapp System?
+The MiniDapp system is an open application ecosystem.
+Similar to the Operating System on your phone that enables you to use Android apps, the MiniDapp System enables you to use MiniDapps on your Minima node.
+
+## What are MiniDapps?
+MiniDapps are Minima’s **Decentralized Applications** running over Minima’s blockchain network. They are web applications that utilise the functionality enabled by the Minima blockchain and peer-to-peer network. This includes our Information Layer - Maxima and, in future, our Layer 2 - Omnia.
+They are your gateway to a true Web 3 economy, open and free.
+
+They are simply zip files (.mds.zip) containing a web application that interacts with your Minima node and can be created for almost anything - some examples include decentralized finance, games, voting, marketplaces, messaging, social media - the world is your oyster.
+
+
+## How do MiniDapps differ from other decentralized applications (dApps)?
+Other ‘decentralized’ applications are decentralized in name only, often relying on centralized services to run effectively. MiniDapps are not. MiniDapps are installed on and run directly from your node, and because every Minima user runs a complete node, there is no need to rely on centralized websites or companies to use MiniDapps. They are permissionless and borderless.
+
+
+## What MiniDapps are currently available?
+You will find the latest MiniDapps, developed by the Minima Team, available to download from the [MiniDapps website](https://minidapps.minima.global/).
+In future, we expect the majority of MiniDapps to be built by the open-source community—that could be you!
+
+## How do I use MiniDapps?
+To start using MiniDapps, simply [login](/docs/user-guides/login) to your node.
+
+## Who can build a MiniDapp?
+Anyone can learn to build a MiniDapp.
+The front-end for MiniDapps can be written using the widely known JavaScript, HTML and CSS. Minima’s KISS scripting language is Turing-Complete, allowing for powerful smart contract driven applications. Building a MiniDapp is accessible to anyone willing to learn!
+
+**Visit the [Build](/docs/development) section to learn more about building MiniDapps on Minima.**
\ No newline at end of file
diff --git a/content/docs/learn/miningandconsensus.mdx b/content/docs/learn/mining-consensus.mdx
similarity index 94%
rename from content/docs/learn/miningandconsensus.mdx
rename to content/docs/learn/mining-consensus.mdx
index abe94f1..2b9d024 100644
--- a/content/docs/learn/miningandconsensus.mdx
+++ b/content/docs/learn/mining-consensus.mdx
@@ -1,411 +1,411 @@
----
-title: Mining and Consensus
-description: Learn about the Minima Mining and Consensus
-tag: learn
----
-
-## Magic Numbers
-
-The Magic numbers provide a mechanism for future-proofing the network. As technology improves over time, increasing the storage and processing capacity on mobile devices, the Magic numbers allow Minima to adapt or grow simultaneously.
-
-There are two sets of four variables that define the network, for each variable there is the **Current** network value and the user's **Desired** value. The Current value dictates the network at that point in time, the value that the whole network is currently working to. Desired values can be specified by users to reflect the capability of their node.
-Note: Desired values must take a value that is at least half of the corresponding Current value, and not more than double the corresponding Current value.
-
-**The Current Magic numbers are recalculated every block** by taking a heavily weighted average of 16383:1 in favour of the Current network value over the node’s Desired value. Provided the entire network agrees on a new desired value, over a period of approximately 50 days, the Current Magic value will converge to the Desired value.
-
-| Magic Number | Description | Default Value | Type |
-| :------------------------ | :---------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------- | :--------- |
-| **CurrentMaxTxPoWSize** | The maximum size of a TxPoW unit in bytes. | The default and minimum TxPoW size is 64KB | MiniNumber |
-| **CurrentMaxKISSVMOps** | The maximum number of KISS VM operations in a TxPoW (script complexity) | The default and minimum is 1024 | MiniNumber |
-| **CurrentMaxTxnPerBlock** | The maximum number of transactions per block | The default and minimum transactions per TxPoW unit is 256 | MiniNumber |
-| **CurrentMinTxPoWWork** | The target value for the hash of a TxPoW header, that must be met before for a TxPoW unit to be sent across the network | The minimum is equivalent to 1 million hashes/second | MiniNumber |
-
-## Difficulty
-
-Difficulty is a dynamic value which determines how hard it is to mine a TxPoW unit.
-The difficulty value is used to calculate a target value which the hash value of the TxPoW header (the TxPoW ID) needs to be less than.
-
-```
-Target Value = Max Value/Difficulty Value
-
-Where
-Max value (represented in Hex) = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-
-Max value (represented in Decimal) = 1.15792089237316E+77
-```
-
-In Minima, there are multiple difficulty levels:
-
-Diagram: Basic representation of the different difficulty levels, where transaction target is the easiest to achieve (not to scale)
-
-
-
-:::note
-The higher the difficulty, the lower the target value, the harder it is to achieve.
-:::
-
-## Transaction (TxPoW) Difficulty
-
-The default and minimum difficulty value is 1 million, meaning that a device with a hash rate of 1m hashes/second will need to perform 1 second of ‘work’ before the target is met and their TxPoW can be propagated across the network, entering the mempool of unconfirmed transactions.
-
-```
-The default and easiest TxPoW Target = Max Value/1,000,000
-
-Target represented in Hex = 0x10C6F7A0B5ED853E638E9803F452E932EB00EAD38965A800000000000000
-
-Target represented in Decimal = 1.15792089237316E+71
-```
-
-This is the magic number **CurrentMinTxPoWWork.**
-
-The actual transaction difficulty for a node considers the achievable hash rate of the node and is equal to the higher value of 1 million or the device’s hash rate in hashes/second, so that each device performs roughly 1 second of ‘work’ to ‘mine’ their transaction (TxPoW unit).
-
-## Block Difficulty
-
-The purpose of the block difficulty level is to regulate the frequency at which blocks are found on the network ensuring block intervals remain as close to 50 seconds as possible. TxPoW units only require the minimum amount of work before they are sent across the network, however these TxPoW units can become blocks and get added to the chain if, by chance, the TxPoW ID hash is also less than the network block difficulty target.
-
-The block target is much lower (harder) than the transaction target, and fluctuates with the number of nodes on the network and their hash rate, so that 50 second block intervals are maintained.
-
-If block times deviate from 50 second intervals, the difficulty will be adjusted proportionally, by a maximum of 10% up or down.
-
-The block difficulty will always be at least as hard as the transaction difficulty.
-
-**Adjusting the block difficulty:**
-
-**Example 1:** Block times too slow
-
-If the time interval between blocks slows down to 1 block every 54 seconds, the current block difficulty will be decreased by a factor of 50/54 = 0.926.
-This lower difficulty increases the block target value, making it easier for nodes to achieve and acting to speed up the interval between blocks.
-
-**Example 2:** Block times too fast
-
-If the time interval between blocks speeds up to 1 block every 45 seconds, the current speed ratio (required block time/actual chain speed) is 50/44 = 1.25, however since this is over 10%, the block difficulty will only be increased by the maximum 1.1.
-This higher difficulty decreases the block target value, making it harder for nodes to achieve and acting to slow down the interval between blocks.
-
-Once the transaction (not block) difficulty target has been met, the mining process finishes.
-If the block difficulty target has by chance also been achieved, then the TxPoW unit will become a block and be added to the main chain.
-
-## Superblock Difficulty
-
-[(see Cascading Chain)](/docs/learn/minima/theblockchain#the-cascading-chain)
-
-## Block Weight
-
-A block’s base weight is equal to the difficulty value that was required for it to become a block. This also represents the average number of hashes that would be required to meet this block target value.
-
-For a specific block:
-`Base Weight = Max Target Value/Block Target Value`
-
-_Note that this is not the actual weight, which would be the actual number of hashes it took to find a value less than the target._
-
-If the actual weight, by chance, exceeds its base weight by at least a factor of 2, the block will be considered a Super Block [(see Cascading Chain)](/docs/learn/minima/theblockchain#the-cascading-chain).
-
-## Constructing TxPoW Units
-
-TxPoW units are created after a transaction and its witness has been created. Once created, the TxPoW will be ‘mined’ and propagated across the network.
-
-The following Terminal commands will result in creation of a TxPoW unit:
-**send** - send a transaction
-**tokencreate** - create a custom token
-**txnpost** - posting a manually constructed transaction
-
-A TxPoW unit is constructed as follows:
-
-**1. Create the TxPoW**
-
-Set details
-
-- Block height (if this TxPoW becomes a block)
-- Timemilli (the node’s current time)
-- Main transaction & Witness (the transaction the user is sending)
-- Burn transaction & Witness
-- Calculate & set the magic numbers
-
-**2. Set the Cascade Super Parents**
-
-If the current tip block is Super Level i, this TxPoW will have:
-**Super Parents for Levels 0-i:** Current tip block
-**Super Parents for Levels i-31:** same Super Parents as the current tip
-
-**3. Set the Transaction difficulty**
-
-The Hex value that the hash of the TxPoW must be less than to be valid, is set based on the hash rate of the node. It must be no easier than the Magic number **CurrentMinTxPoWWork.**
-
-```
-Minimum TxPoW hash = Max Value / user’s hash rate
-
-If
- Minimum TxPoW hash > CurrentMinTxPoWWork i.e. if the Minimum TxPoW hash is easier than CurrentMinTxPoWWork
-then
- Minimum TxPoW hash = CurrentMinTxPoWWork
-```
-
-**4. Calculate Chain Speed and Block Difficulty**
-
-Using the latest 256 blocks in the main chain, the average time and block difficulty for each block is calculated and the block difficulty target is adjusted proportionally by a maximum of 10% up or down.
-
-`Initial Start Position = tip block, Initial End Position = tip - 256 `
-
-The two blocks with the median time from the 32 blocks prior to the initial start and initial end positions are determined. Those blocks become the final start and end positions to calculate the current Chain Speed and Block Difficulty.
-Using the median smooths out any anomalies in the system time of nodes on the network.
-
-```
-Chain speed (secs) = Avg time interval per block between the final start and end position
-
-Speed Ratio = Required block speed (50 secs)/Chain speed
-
-Average block difficulty = Avg difficulty for blocks between the start and end position
-```
-
-Then,
-
-```
-New block difficulty = Avg block difficulty * Speed Ratio
-(if 0.9 <= Speed Ratio <= 1.1)
-
-or
-New block difficulty = Avg block difficulty * 0.9
-(if Speed Ratio < 0.9)
-
-or
-New block difficulty = Avg block difficulty * 1.1
-(if Speed Ratio > 1.1)
-
-or
-New block difficulty = CurrentMinTxPoWWork
-(if Avg block difficulty * Speed Ratio < CurrentMinTxPoWWork and 0.9 <= Speed Ratio <= 1.1)
-```
-
-i.e. the Magic number **CurrentMinTxPoWWork** is used as a lower bound for the block difficulty
-
-**5. Order Mempool Transactions**
-
-Sort the unconfirmed mempool TxPoW units by the amount they burn.
-
-**6. Check Mempool Transactions**
-
-Cycle through the mempool transactions checking the following:
-
-- Coins are not already added to this TxPoW
-- Transaction size is less than or equal to the magic number **CurrentMaxTxPoWSize**
-- Transaction difficulty must be harder than or equal to the magic number **CurrentMinTxPoWWork**
-- MMR Proofs are valid
-- Script Proofs are valid
-
-**7. Add valid Mempool TxPoWs**
-
-Create a list of valid mempool transactions, including the maximum allowed by the magic number **CurrentMaxTxnPerBlock**. This list is added to the body of the TxPoW unit. Invalid TxPoW are removed from the mempool.
-
-
- Only the TxPoW IDs of mempool transactions are added to this list.
-
-
-**8. Calculate hashes for main and burn transactions**
-
-Calculate the hash of the main transaction and the burn transaction, add these to the TxPoW body.
-These are required for creating the Coin IDs of the transaction outputs and the MMR.
-
-**9. Construct the MMR**
-
-Construct an updated MMR set with proofs for the newly created coins (UTxOs).
-Calculate the new MMR root hash and the root value.
-
-**10. Add the MMR Root data**
-
-Add the MMR root hash and value (sum of all coins in the network) to the TxPoW header.
-
-**The TxPoW generation process is complete and is ready to be 'mined' before being sent on to peer nodes for propagation across the network. **
-
-## Mining TxPoW units
-
-Once a new TxPoW unit has been created, it must be ‘mined’ before a node can send it on to its peers.
-
-Mining is the process of repeatedly hashing the TxPoW header, each time with a different number (known as the nonce value) set in the header. By changing the nonce each time, the header data changes, resulting in a different hash.
-This process is repeated until the resulting hash is less than the transaction difficulty target. Once this is achieved, the required difficulty level has been met and the TxPoW has enough ‘Proof of Work’ to be propagated to other nodes in the network.
-
-
- A node does not consider the block difficulty target during the mining
- process. Only after a TxPoW has been mined, is it evaluated to see if it will
- become a block - if the TxPoW ID hash is also, by chance, lower than the block
- difficulty target.
-
-
-A TxPoW unit is ‘mined’ as follows:
-
-**1. Calculate TxPoW body hash**
-
-Hash the TxPoW body and set in it the TxPoW header
-
-**2. Set the initial nonce value**
-
-Set the start nonce value in the TxPoW header
-
-**3. Hash - Check - Set**
-
-The TxPoW header is hashed, if it does not satisfy the transaction difficulty, the nonce is incremented by 1 and the process repeats.
-
-Once the hashed TxPoW header satisfies the transaction difficulty, the final nonce value is set in the TxPoW header
-
-**4. Calculate the TxPoW ID & Size**
-
-The hash of the TxPoW header is the TxPoW ID.
-If it also meets the block difficulty target, its Block weight and Super Level are also calculated.
-
-**Once the mining process has ended, the node will continue to validate, process and send the TxPoW ID across the network.**
-
-## Validating TxPoW units
-
-Once a user has successfully mined a TxPoW unit or when they have received a TxPoW unit from a peer, it must be validated before propagating to peers.
-
-The potential outcomes from this check are:
-**Outcome 1:** The TxPoW is invalid - disconnect from the client who sent it and discard the TxPoW.
-**Outcome 2:** The TxPoW is not fully valid - some check(s) did not pass but it could be valid at a future time. Remain connected to the client, keep and attempt to process the TxPoW but do not send it on to peers.
-**Outcome 3:** The TxPoW is fully valid - remain connected to the client, keep and attempt to process the TxPoW but do not send it on to peers.
-
-Validating a TxPoW unit includes checking:
-
-Does it already exist in the TxPoW database?
-
-- if false, request it from the peer
-- Does it have a block number before the root of the TxPoW Tree?
- - if true, outcome 1.
- - Reason: this TxPoW is before the Cascade tip
-- Is the block difficulty at most 10% below the tip block?
- - if false, outcome 1.
- - Reason: the block difficulty is too low
-- Does the Chain ID match the Chain ID of the current network?
- - if false, outcome 1.
- - Reason: the Chain ID is wrong
-- Does it meet basic transaction checks?
- - if false, outcome 1.
- - Reason: the TxPoW fails basic checks (see Basic TxPoW Checks)
-- Are the signatures valid?
- - if false, outcome 1.
- - Reason: the signatures are invalid
-- Are the coin and token scripts valid?
- - if false & if the transaction is monotonic, outcome 1 but remain connected.
- - Reason: monotonic TxPoWs will always be invalid if they fail script checks
- - if false & if the transaction is non-monotonic, outcome 2.
- - Reason: non-monotonic transactions are not fully valid at this point in time but are still processed in case they rely on a certain block time to be valid
-- If the TxPoW is a block, does it have a timestamp less than 2 hours in the future?
- - if false, outcome 2.
- - Reason: the TxPoW is over 2 hours in the future but not discarded as could be something wrong with internal clock
-- Does it use any coins as transaction inputs that are also currently in the mempool?
- - if true, outcome 2.
- - Reason: the same coins are used in another transaction but the TxPoW is not discarded as it could be valid in another branch
-- Do the CoinProofs for the main and burn transactions pass the MMR checks?
- - if false, outcome 2.
- - Reason: MMR proofs are not valid, but the TxPoW is not discarded as they could be valid in another branch
-- Did it take longer than 1 second to process?
- - if true, outcome 2.
- - Reason: the message took a long time to process
-
-Fully Valid and not Fully Valid TxPoWs are then added to the TxPoW database. Only a Fully Valid TxPoW is then forwarded onto the node’s peers.
-
-If a received TxPoW unit is a block, all the mempool TxPoW in the block’s _txn list_ as well as the parent block must exist in the TxPoW database before it can be added to the TxPoW Tree. If the node is missing any, these are requested from peer nodes before processing.
-
-**Basic TxPoW checks:**
-
-The Basic TxPoW checks ensure the main transaction and its burn transaction are valid.
-
-The basic checks are:
-
-- The Chain ID must be valid
-
-For main transaction and burn transaction:
-
-- The Link Hash connecting the main and burn transaction must be valid
-- Check if the transaction is empty, empty transactions are valid (e.g. a Pulse TxPoW)
-- Transaction inputs & outputs are valid
-- Must be at least one input
-- The number of MMR proofs must be correct
-
-For all coins in the main transaction:
-
-- No coins can be used more than once
-- If a custom token is being spent, the Token ID must match the Token ID in the coin and in the MMR Proof
-- CoinProof details must match the Coin details (amount, address & Token ID)
-- The Coin ID of non-floating coins must match the Coin ID in the CoinProof
-- The Coin must not be spent
-- The Coin must have script proofs
-
-## Processing TxPoW & Assembling the Chain
-
-The final step, once a TxPoW passes all the validation checks, is to push it to the end of a process stack so that it can be added to the TxPoW tree in the correct order.
-
-The node will process the stack, attempting to add any TxPoW units that are blocks to the end of the chain.
-A block’s parent must exist in the tree before it can be added. If the parent does not exist in the tree yet, the node may not have had all its transactions when it first attempted to process it. Since last attempting to process the parent, the node should have received any missing transactions from its peers so it is searched for in the TxPoW database and, if found, added to the process stack to be processed before the child.
-
-If the parent block is already in the tree, the TxPoW is processed by first ensuring that all mempool transactions in the _txn list_ of the TxPoW body exist in the user’s TxPoW database.
-
-- If there are any missing, the TxPoW cannot be processed any further.
-- If there are none missing, the TxPoW will go through final checks before becoming a TxBlock.
-- If there are none missing, the TxPoW will go through final checks before becoming a TxBlock.
-
-A **TxBlock** includes the TxPoW and adds the MMR peaks; a list of CoinProofs for all the coins that will become spent; and a list of the new coins that will be created from all the transactions in the block. [(see TxBlocks)](/docs/learn/minima/txpowunits#txblocks-blocks)
-
-Once the TxBlock has been created, a structure is required to attach the block to the TxPoW tree, this is the role of a TxPoW Tree Node. It adds further relevant information to the TxBlock i.e. the MMR set; a list of all the spent and newly created coins; and a list of all the MMR entry numbers of any coins in any of the transactions that are relevant to the user (i.e. coins they are tracking). [(see TxPoW Tree Nodes)](/docs/learn/minima/theblockchain#txpow-tree-node)
-
-A child node is then added to its parent in the tree and the tree is **recalculated**.
-
-**Recalculating** the tree involves:
-
-- Calculating the weight of all blocks in the tree
-- Selecting the heaviest branch as the main chain [(see Selecting the main chain)](/docs/learn/minima/miningconsensus#selecting-the-main-chain-ghost)
-- Cascading the chain if the heaviest branch has reached the required length [(see Cascading Chain - Attribute 5)](/docs/learn/minima/theblockchain#attribute-5)
-- Setting transactions in the main chain so they cannot be added to a new TxPoW
-
-The TxPoW database is then checked to see if there are any children for this new block as these can then be added to the process stack for processing.
-
-This process continues until either the process stack is empty or contains TxPoWs with transactions not yet received by the user.
-
-## Selecting the main chain (GHOST)
-
-The TxPoW Tree consists of a main chain and branches which occur naturally due to network latency. All nodes in the network must only consider one chain to be the valid one at any point in time - the main chain. The tip of the main chain becomes the parent block that a node will attempt to build on when generating a TxPoW unit.
-
-Minima uses the **GHOST (Greedy Heaviest Observed SubTree)** protocol to ensure that nodes can come to consensus on which chain to use as the main chain. GHOST dictates that the ‘heaviest’ branch should be the main chain. The ‘heaviest’ branch is the branch which has had the most Proof-of-Work put into it and may not necessarily be the longest chain.
-
-An alternative to GHOST is the simple ‘Longest chain’ rule, where the valid chain is considered the one with the most number of blocks in it, however by using GHOST and considering the ‘weight’ of blocks rather than simply the number of blocks, the chain is more resilient to attack and allows for faster block times.
-
-The weight of a block is equal to the sum of the base weights of its children, where the base weight = the block difficulty [(see Difficulty)](/docs/learn/minima/miningconsensus#difficulty), so where there are siblings in the tree that create two branches, their parent block will have a total weight of the sum of the siblings.
-
-The process of selecting the main chain (i.e. recalculating the tree) occurs after receiving and processing a TxPoW unit (whether or not it is a block). During this process, the weight of all blocks in the TxPoW tree (main chain and branches) are evaluated and the heaviest branch is set as the main chain. All transactions in the blocks of this chain are then considered as ‘truth’ and the node continues to build from the tip of this chain. This may mean some transactions are returned to the mempool and must be added to a new TxPoW unit before being confirmed.
-
-Diagram illustrating the main chain according to GHOST.
-
-The longest chain could more easily be achieved by an attacker in secret, however with the majority of the network constructing on the heaviest chain, the attacker's secret chain would not change the main chain.
-
-**Cascading Chain & TxPoW Tree showing main chain according to GHOST (with Block numbers)**
-
-
-
-**Cascading Chain & TxPoW Tree showing main chain according to GHOST (with Block weight = 1)**
-
-
-
-
- A block weight of 1 is for illustrative purposes only, actual block weights
- vary depending on the block difficulty of the network. [(See Block
- Weight)](/docs/learn/minima/miningconsensus#block-weight)
-
-
-
- GHOST was originally proposed as an alternative to Longest Chain by
- Sompolinsky and Zohar in the paper _Secure High-Rate Transaction Processing in
- Bitcoin._
-
+---
+title: Mining and Consensus
+description: Learn about the Minima Mining and Consensus
+tag: learn
+---
+
+## Magic Numbers
+
+The Magic numbers provide a mechanism for future-proofing the network. As technology improves over time, increasing the storage and processing capacity on mobile devices, the Magic numbers allow Minima to adapt or grow simultaneously.
+
+There are two sets of four variables that define the network, for each variable there is the **Current** network value and the user's **Desired** value. The Current value dictates the network at that point in time, the value that the whole network is currently working to. Desired values can be specified by users to reflect the capability of their node.
+Note: Desired values must take a value that is at least half of the corresponding Current value, and not more than double the corresponding Current value.
+
+**The Current Magic numbers are recalculated every block** by taking a heavily weighted average of 16383:1 in favour of the Current network value over the node’s Desired value. Provided the entire network agrees on a new desired value, over a period of approximately 50 days, the Current Magic value will converge to the Desired value.
+
+| Magic Number | Description | Default Value | Type |
+| :------------------------ | :---------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------- | :--------- |
+| **CurrentMaxTxPoWSize** | The maximum size of a TxPoW unit in bytes. | The default and minimum TxPoW size is 64KB | MiniNumber |
+| **CurrentMaxKISSVMOps** | The maximum number of KISS VM operations in a TxPoW (script complexity) | The default and minimum is 1024 | MiniNumber |
+| **CurrentMaxTxnPerBlock** | The maximum number of transactions per block | The default and minimum transactions per TxPoW unit is 256 | MiniNumber |
+| **CurrentMinTxPoWWork** | The target value for the hash of a TxPoW header, that must be met before for a TxPoW unit to be sent across the network | The minimum is equivalent to 1 million hashes/second | MiniNumber |
+
+## Difficulty
+
+Difficulty is a dynamic value which determines how hard it is to mine a TxPoW unit.
+The difficulty value is used to calculate a target value which the hash value of the TxPoW header (the TxPoW ID) needs to be less than.
+
+```
+Target Value = Max Value/Difficulty Value
+
+Where
+Max value (represented in Hex) = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+
+Max value (represented in Decimal) = 1.15792089237316E+77
+```
+
+In Minima, there are multiple difficulty levels:
+
+Diagram: Basic representation of the different difficulty levels, where transaction target is the easiest to achieve (not to scale)
+
+
+
+:::note
+The higher the difficulty, the lower the target value, the harder it is to achieve.
+:::
+
+## Transaction (TxPoW) Difficulty
+
+The default and minimum difficulty value is 1 million, meaning that a device with a hash rate of 1m hashes/second will need to perform 1 second of ‘work’ before the target is met and their TxPoW can be propagated across the network, entering the mempool of unconfirmed transactions.
+
+```
+The default and easiest TxPoW Target = Max Value/1,000,000
+
+Target represented in Hex = 0x10C6F7A0B5ED853E638E9803F452E932EB00EAD38965A800000000000000
+
+Target represented in Decimal = 1.15792089237316E+71
+```
+
+This is the magic number **CurrentMinTxPoWWork.**
+
+The actual transaction difficulty for a node considers the achievable hash rate of the node and is equal to the higher value of 1 million or the device’s hash rate in hashes/second, so that each device performs roughly 1 second of ‘work’ to ‘mine’ their transaction (TxPoW unit).
+
+## Block Difficulty
+
+The purpose of the block difficulty level is to regulate the frequency at which blocks are found on the network ensuring block intervals remain as close to 50 seconds as possible. TxPoW units only require the minimum amount of work before they are sent across the network, however these TxPoW units can become blocks and get added to the chain if, by chance, the TxPoW ID hash is also less than the network block difficulty target.
+
+The block target is much lower (harder) than the transaction target, and fluctuates with the number of nodes on the network and their hash rate, so that 50 second block intervals are maintained.
+
+If block times deviate from 50 second intervals, the difficulty will be adjusted proportionally, by a maximum of 10% up or down.
+
+The block difficulty will always be at least as hard as the transaction difficulty.
+
+**Adjusting the block difficulty:**
+
+**Example 1:** Block times too slow
+
+If the time interval between blocks slows down to 1 block every 54 seconds, the current block difficulty will be decreased by a factor of 50/54 = 0.926.
+This lower difficulty increases the block target value, making it easier for nodes to achieve and acting to speed up the interval between blocks.
+
+**Example 2:** Block times too fast
+
+If the time interval between blocks speeds up to 1 block every 45 seconds, the current speed ratio (required block time/actual chain speed) is 50/44 = 1.25, however since this is over 10%, the block difficulty will only be increased by the maximum 1.1.
+This higher difficulty decreases the block target value, making it harder for nodes to achieve and acting to slow down the interval between blocks.
+
+Once the transaction (not block) difficulty target has been met, the mining process finishes.
+If the block difficulty target has by chance also been achieved, then the TxPoW unit will become a block and be added to the main chain.
+
+## Superblock Difficulty
+
+[(see Cascading Chain)](/docs/learn/the-blockchain#the-cascading-chain)
+
+## Block Weight
+
+A block’s base weight is equal to the difficulty value that was required for it to become a block. This also represents the average number of hashes that would be required to meet this block target value.
+
+For a specific block:
+`Base Weight = Max Target Value/Block Target Value`
+
+_Note that this is not the actual weight, which would be the actual number of hashes it took to find a value less than the target._
+
+If the actual weight, by chance, exceeds its base weight by at least a factor of 2, the block will be considered a Super Block [(see Cascading Chain)](/docs/learn/the-blockchain#the-cascading-chain).
+
+## Constructing TxPoW Units
+
+TxPoW units are created after a transaction and its witness has been created. Once created, the TxPoW will be ‘mined’ and propagated across the network.
+
+The following Terminal commands will result in creation of a TxPoW unit:
+**send** - send a transaction
+**tokencreate** - create a custom token
+**txnpost** - posting a manually constructed transaction
+
+A TxPoW unit is constructed as follows:
+
+**1. Create the TxPoW**
+
+Set details
+
+- Block height (if this TxPoW becomes a block)
+- Timemilli (the node’s current time)
+- Main transaction & Witness (the transaction the user is sending)
+- Burn transaction & Witness
+- Calculate & set the magic numbers
+
+**2. Set the Cascade Super Parents**
+
+If the current tip block is Super Level i, this TxPoW will have:
+**Super Parents for Levels 0-i:** Current tip block
+**Super Parents for Levels i-31:** same Super Parents as the current tip
+
+**3. Set the Transaction difficulty**
+
+The Hex value that the hash of the TxPoW must be less than to be valid, is set based on the hash rate of the node. It must be no easier than the Magic number **CurrentMinTxPoWWork.**
+
+```
+Minimum TxPoW hash = Max Value / user’s hash rate
+
+If
+ Minimum TxPoW hash > CurrentMinTxPoWWork i.e. if the Minimum TxPoW hash is easier than CurrentMinTxPoWWork
+then
+ Minimum TxPoW hash = CurrentMinTxPoWWork
+```
+
+**4. Calculate Chain Speed and Block Difficulty**
+
+Using the latest 256 blocks in the main chain, the average time and block difficulty for each block is calculated and the block difficulty target is adjusted proportionally by a maximum of 10% up or down.
+
+`Initial Start Position = tip block, Initial End Position = tip - 256 `
+
+The two blocks with the median time from the 32 blocks prior to the initial start and initial end positions are determined. Those blocks become the final start and end positions to calculate the current Chain Speed and Block Difficulty.
+Using the median smooths out any anomalies in the system time of nodes on the network.
+
+```
+Chain speed (secs) = Avg time interval per block between the final start and end position
+
+Speed Ratio = Required block speed (50 secs)/Chain speed
+
+Average block difficulty = Avg difficulty for blocks between the start and end position
+```
+
+Then,
+
+```
+New block difficulty = Avg block difficulty * Speed Ratio
+(if 0.9 <= Speed Ratio <= 1.1)
+
+or
+New block difficulty = Avg block difficulty * 0.9
+(if Speed Ratio < 0.9)
+
+or
+New block difficulty = Avg block difficulty * 1.1
+(if Speed Ratio > 1.1)
+
+or
+New block difficulty = CurrentMinTxPoWWork
+(if Avg block difficulty * Speed Ratio < CurrentMinTxPoWWork and 0.9 <= Speed Ratio <= 1.1)
+```
+
+i.e. the Magic number **CurrentMinTxPoWWork** is used as a lower bound for the block difficulty
+
+**5. Order Mempool Transactions**
+
+Sort the unconfirmed mempool TxPoW units by the amount they burn.
+
+**6. Check Mempool Transactions**
+
+Cycle through the mempool transactions checking the following:
+
+- Coins are not already added to this TxPoW
+- Transaction size is less than or equal to the magic number **CurrentMaxTxPoWSize**
+- Transaction difficulty must be harder than or equal to the magic number **CurrentMinTxPoWWork**
+- MMR Proofs are valid
+- Script Proofs are valid
+
+**7. Add valid Mempool TxPoWs**
+
+Create a list of valid mempool transactions, including the maximum allowed by the magic number **CurrentMaxTxnPerBlock**. This list is added to the body of the TxPoW unit. Invalid TxPoW are removed from the mempool.
+
+
+ Only the TxPoW IDs of mempool transactions are added to this list.
+
+
+**8. Calculate hashes for main and burn transactions**
+
+Calculate the hash of the main transaction and the burn transaction, add these to the TxPoW body.
+These are required for creating the Coin IDs of the transaction outputs and the MMR.
+
+**9. Construct the MMR**
+
+Construct an updated MMR set with proofs for the newly created coins (UTxOs).
+Calculate the new MMR root hash and the root value.
+
+**10. Add the MMR Root data**
+
+Add the MMR root hash and value (sum of all coins in the network) to the TxPoW header.
+
+**The TxPoW generation process is complete and is ready to be 'mined' before being sent on to peer nodes for propagation across the network.**
+
+## Mining TxPoW units
+
+Once a new TxPoW unit has been created, it must be ‘mined’ before a node can send it on to its peers.
+
+Mining is the process of repeatedly hashing the TxPoW header, each time with a different number (known as the nonce value) set in the header. By changing the nonce each time, the header data changes, resulting in a different hash.
+This process is repeated until the resulting hash is less than the transaction difficulty target. Once this is achieved, the required difficulty level has been met and the TxPoW has enough ‘Proof of Work’ to be propagated to other nodes in the network.
+
+
+ A node does not consider the block difficulty target during the mining
+ process. Only after a TxPoW has been mined, is it evaluated to see if it will
+ become a block - if the TxPoW ID hash is also, by chance, lower than the block
+ difficulty target.
+
+
+A TxPoW unit is ‘mined’ as follows:
+
+**1. Calculate TxPoW body hash**
+
+Hash the TxPoW body and set in it the TxPoW header
+
+**2. Set the initial nonce value**
+
+Set the start nonce value in the TxPoW header
+
+**3. Hash - Check - Set**
+
+The TxPoW header is hashed, if it does not satisfy the transaction difficulty, the nonce is incremented by 1 and the process repeats.
+
+Once the hashed TxPoW header satisfies the transaction difficulty, the final nonce value is set in the TxPoW header
+
+**4. Calculate the TxPoW ID & Size**
+
+The hash of the TxPoW header is the TxPoW ID.
+If it also meets the block difficulty target, its Block weight and Super Level are also calculated.
+
+**Once the mining process has ended, the node will continue to validate, process and send the TxPoW ID across the network.**
+
+## Validating TxPoW units
+
+Once a user has successfully mined a TxPoW unit or when they have received a TxPoW unit from a peer, it must be validated before propagating to peers.
+
+The potential outcomes from this check are:
+**Outcome 1:** The TxPoW is invalid - disconnect from the client who sent it and discard the TxPoW.
+**Outcome 2:** The TxPoW is not fully valid - some check(s) did not pass but it could be valid at a future time. Remain connected to the client, keep and attempt to process the TxPoW but do not send it on to peers.
+**Outcome 3:** The TxPoW is fully valid - remain connected to the client, keep and attempt to process the TxPoW but do not send it on to peers.
+
+Validating a TxPoW unit includes checking:
+
+Does it already exist in the TxPoW database?
+
+- if false, request it from the peer
+- Does it have a block number before the root of the TxPoW Tree?
+ - if true, outcome 1.
+ - Reason: this TxPoW is before the Cascade tip
+- Is the block difficulty at most 10% below the tip block?
+ - if false, outcome 1.
+ - Reason: the block difficulty is too low
+- Does the Chain ID match the Chain ID of the current network?
+ - if false, outcome 1.
+ - Reason: the Chain ID is wrong
+- Does it meet basic transaction checks?
+ - if false, outcome 1.
+ - Reason: the TxPoW fails basic checks (see Basic TxPoW Checks)
+- Are the signatures valid?
+ - if false, outcome 1.
+ - Reason: the signatures are invalid
+- Are the coin and token scripts valid?
+ - if false & if the transaction is monotonic, outcome 1 but remain connected.
+ - Reason: monotonic TxPoWs will always be invalid if they fail script checks
+ - if false & if the transaction is non-monotonic, outcome 2.
+ - Reason: non-monotonic transactions are not fully valid at this point in time but are still processed in case they rely on a certain block time to be valid
+- If the TxPoW is a block, does it have a timestamp less than 2 hours in the future?
+ - if false, outcome 2.
+ - Reason: the TxPoW is over 2 hours in the future but not discarded as could be something wrong with internal clock
+- Does it use any coins as transaction inputs that are also currently in the mempool?
+ - if true, outcome 2.
+ - Reason: the same coins are used in another transaction but the TxPoW is not discarded as it could be valid in another branch
+- Do the CoinProofs for the main and burn transactions pass the MMR checks?
+ - if false, outcome 2.
+ - Reason: MMR proofs are not valid, but the TxPoW is not discarded as they could be valid in another branch
+- Did it take longer than 1 second to process?
+ - if true, outcome 2.
+ - Reason: the message took a long time to process
+
+Fully Valid and not Fully Valid TxPoWs are then added to the TxPoW database. Only a Fully Valid TxPoW is then forwarded onto the node’s peers.
+
+If a received TxPoW unit is a block, all the mempool TxPoW in the block’s _txn list_ as well as the parent block must exist in the TxPoW database before it can be added to the TxPoW Tree. If the node is missing any, these are requested from peer nodes before processing.
+
+**Basic TxPoW checks:**
+
+The Basic TxPoW checks ensure the main transaction and its burn transaction are valid.
+
+The basic checks are:
+
+- The Chain ID must be valid
+
+For main transaction and burn transaction:
+
+- The Link Hash connecting the main and burn transaction must be valid
+- Check if the transaction is empty, empty transactions are valid (e.g. a Pulse TxPoW)
+- Transaction inputs & outputs are valid
+- Must be at least one input
+- The number of MMR proofs must be correct
+
+For all coins in the main transaction:
+
+- No coins can be used more than once
+- If a custom token is being spent, the Token ID must match the Token ID in the coin and in the MMR Proof
+- CoinProof details must match the Coin details (amount, address & Token ID)
+- The Coin ID of non-floating coins must match the Coin ID in the CoinProof
+- The Coin must not be spent
+- The Coin must have script proofs
+
+## Processing TxPoW & Assembling the Chain
+
+The final step, once a TxPoW passes all the validation checks, is to push it to the end of a process stack so that it can be added to the TxPoW tree in the correct order.
+
+The node will process the stack, attempting to add any TxPoW units that are blocks to the end of the chain.
+A block’s parent must exist in the tree before it can be added. If the parent does not exist in the tree yet, the node may not have had all its transactions when it first attempted to process it. Since last attempting to process the parent, the node should have received any missing transactions from its peers so it is searched for in the TxPoW database and, if found, added to the process stack to be processed before the child.
+
+If the parent block is already in the tree, the TxPoW is processed by first ensuring that all mempool transactions in the _txn list_ of the TxPoW body exist in the user’s TxPoW database.
+
+- If there are any missing, the TxPoW cannot be processed any further.
+- If there are none missing, the TxPoW will go through final checks before becoming a TxBlock.
+- If there are none missing, the TxPoW will go through final checks before becoming a TxBlock.
+
+A **TxBlock** includes the TxPoW and adds the MMR peaks; a list of CoinProofs for all the coins that will become spent; and a list of the new coins that will be created from all the transactions in the block. [(see TxBlocks)](/docs/learn/txpow#txblocks-blocks)
+
+Once the TxBlock has been created, a structure is required to attach the block to the TxPoW tree, this is the role of a TxPoW Tree Node. It adds further relevant information to the TxBlock i.e. the MMR set; a list of all the spent and newly created coins; and a list of all the MMR entry numbers of any coins in any of the transactions that are relevant to the user (i.e. coins they are tracking). [(see TxPoW Tree Nodes)](/docs/learn/the-blockchain#txpow-tree-node)
+
+A child node is then added to its parent in the tree and the tree is **recalculated**.
+
+**Recalculating** the tree involves:
+
+- Calculating the weight of all blocks in the tree
+- Selecting the heaviest branch as the main chain [(see Selecting the main chain)](/docs/learn/mining-consensus#selecting-the-main-chain-ghost)
+- Cascading the chain if the heaviest branch has reached the required length [(see Cascading Chain - Attribute 5)](/docs/learn/the-blockchain#attribute-5)
+- Setting transactions in the main chain so they cannot be added to a new TxPoW
+
+The TxPoW database is then checked to see if there are any children for this new block as these can then be added to the process stack for processing.
+
+This process continues until either the process stack is empty or contains TxPoWs with transactions not yet received by the user.
+
+## Selecting the main chain (GHOST)
+
+The TxPoW Tree consists of a main chain and branches which occur naturally due to network latency. All nodes in the network must only consider one chain to be the valid one at any point in time - the main chain. The tip of the main chain becomes the parent block that a node will attempt to build on when generating a TxPoW unit.
+
+Minima uses the **GHOST (Greedy Heaviest Observed SubTree)** protocol to ensure that nodes can come to consensus on which chain to use as the main chain. GHOST dictates that the ‘heaviest’ branch should be the main chain. The ‘heaviest’ branch is the branch which has had the most Proof-of-Work put into it and may not necessarily be the longest chain.
+
+An alternative to GHOST is the simple ‘Longest chain’ rule, where the valid chain is considered the one with the most number of blocks in it, however by using GHOST and considering the ‘weight’ of blocks rather than simply the number of blocks, the chain is more resilient to attack and allows for faster block times.
+
+The weight of a block is equal to the sum of the base weights of its children, where the base weight = the block difficulty [(see Difficulty)](/docs/learn/mining-consensus#difficulty), so where there are siblings in the tree that create two branches, their parent block will have a total weight of the sum of the siblings.
+
+The process of selecting the main chain (i.e. recalculating the tree) occurs after receiving and processing a TxPoW unit (whether or not it is a block). During this process, the weight of all blocks in the TxPoW tree (main chain and branches) are evaluated and the heaviest branch is set as the main chain. All transactions in the blocks of this chain are then considered as ‘truth’ and the node continues to build from the tip of this chain. This may mean some transactions are returned to the mempool and must be added to a new TxPoW unit before being confirmed.
+
+Diagram illustrating the main chain according to GHOST.
+
+The longest chain could more easily be achieved by an attacker in secret, however with the majority of the network constructing on the heaviest chain, the attacker's secret chain would not change the main chain.
+
+**Cascading Chain & TxPoW Tree showing main chain according to GHOST (with Block numbers)**
+
+
+
+**Cascading Chain & TxPoW Tree showing main chain according to GHOST (with Block weight = 1)**
+
+
+
+
+ A block weight of 1 is for illustrative purposes only, actual block weights
+ vary depending on the block difficulty of the network. [(See Block
+ Weight)](/docs/learn/mining-consensus#block-weight)
+
+
+
+ GHOST was originally proposed as an alternative to Longest Chain by
+ Sompolinsky and Zohar in the paper _Secure High-Rate Transaction Processing in
+ Bitcoin._
+
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/network.mdx b/content/docs/learn/network-overview.mdx
similarity index 97%
rename from content/docs/learn/network.mdx
rename to content/docs/learn/network-overview.mdx
index e9b5971..28c4ea2 100644
--- a/content/docs/learn/network.mdx
+++ b/content/docs/learn/network-overview.mdx
@@ -1,82 +1,82 @@
----
-title: Network Overview
-description: Learn about the Minima network
-icon: Layers
-tag: learn
----
-
-
-The Minima network consists of four distinct layers.
-
-Each layer contributes to Minima being a truly decentralized, censorship resistant, peer-to-peer network for value and information exchange.
-
-## Layer 1: Minima
-**Value transfer
-On-chain**
-
-Minima is the blockchain layer for value transfer. All transactions are processed by all nodes on the network. It is flood-fill. It uses the peer-to-peer network as its backbone for communication between nodes.
-
-
-
-The Minima blockchain is where all on-chain transactions are processed. Every node in the network collectively comes to consensus on the state of the blockchain so all transactions are accounted for.
-Users initiate their transacting relationships on Layer 1, prior to moving off-chain to use Layer 2 for faster and cheaper transactions. As the trust layer of the protocol, Layer 1 is also used for settling any disputes between users on Layer 2.
-
-## Maxima
-**Information transfer
-Off-chain**
-
-Maxima is the information transport layer running over the Minima network.
-Communication is point-to-point so that messages can be sent, off-chain, to chosen connected peers.
-
-
-
-Maxima enables encrypted, peer-to-peer exchange of information between 1st and 2nd degree connections on the Minima network.
-Maxima can be used to build censorship resistant messaging applications and will be used for sending data required for Layer 2 communication on Omnia.
-
-## Layer 2: Omnia
-**Value transfer
-Off-chain**
-
-Minima's Layer 2 - Omnia - is fast, cheap and scalable. It enables instant peer-to-peer payments by creating bi-directional payment channels between participants, using the latest Lightning technology - ELTOO. It is analogous to Bitcoin’s Lightning Network but more advanced.
-
-Minima can also support alternative scaling solutions such as state chains and side chains with the potential for further solutions in the future.
-
-
-
-Once users have set up their transacting relationship on Minima, they can perform **all transactions off-chain**, on Omnia. This is where the bulk of peer-to-peer exchange between users of the network takes place. It is **affordable and fast**, as each payment is not settled on the blockchain and transactions are only processed by the relevant users rather than the entire network, as occurs on Layer 1.
-
-Based on **ELTOO** technology, Omnia can do more than simple payments. It can do any smart contract sequence with a given subset of users and subset of coins. Using hash time locked contracts (HTLCs) and payment channels, users can keep a ‘tab’ of their unsettled balances indefinitely, until they wish to settle on Minima (Layer 1).
-**Omnia unlocks the possibility of essentially unlimited transactions per second (TPS).**
-
-## Layer 3: MiniDapps
-**Web3 Applications**
-
-MiniDapps are truly decentralised applications built using the functionality enabled by any/all components of the Minima network:
-1. Value transfer on Minima
-2. Information transfer on Maxima
-3. Unlimited transaction per seconds on Omnia
-
-
-
-MiniDapps are decentralized web applications combining the utility provided by Maxima, Minima and Omnia with Minima’s scripting language. The front-end for MiniDapps can be written using the widely known JavaScript, HTML and CSS.
+---
+title: Network Overview
+description: Learn about the Minima network
+icon: Layers
+tag: learn
+---
+
+
+The Minima network consists of four distinct layers.
+
+Each layer contributes to Minima being a truly decentralized, censorship resistant, peer-to-peer network for value and information exchange.
+
+## Layer 1: Minima
+**Value transfer
+On-chain**
+
+Minima is the blockchain layer for value transfer. All transactions are processed by all nodes on the network. It is flood-fill. It uses the peer-to-peer network as its backbone for communication between nodes.
+
+
+
+The Minima blockchain is where all on-chain transactions are processed. Every node in the network collectively comes to consensus on the state of the blockchain so all transactions are accounted for.
+Users initiate their transacting relationships on Layer 1, prior to moving off-chain to use Layer 2 for faster and cheaper transactions. As the trust layer of the protocol, Layer 1 is also used for settling any disputes between users on Layer 2.
+
+## Maxima
+**Information transfer
+Off-chain**
+
+Maxima is the information transport layer running over the Minima network.
+Communication is point-to-point so that messages can be sent, off-chain, to chosen connected peers.
+
+
+
+Maxima enables encrypted, peer-to-peer exchange of information between users on the Minima network.
+Maxima can be used to build censorship resistant messaging applications and will be used for sending data required for Layer 2 communication on Omnia.
+
+## Layer 2: Omnia
+**Value transfer
+Off-chain**
+
+Minima's Layer 2 - Omnia - is fast, cheap and scalable. It enables instant peer-to-peer payments by creating bi-directional payment channels between participants, using the latest Lightning technology - ELTOO. It is analogous to Bitcoin’s Lightning Network but more advanced.
+
+Minima can also support alternative scaling solutions such as state chains and side chains with the potential for further solutions in the future.
+
+
+
+Once users have set up their transacting relationship on Minima, they can perform **all transactions off-chain**, on Omnia. This is where the bulk of peer-to-peer exchange between users of the network takes place. It is **affordable and fast**, as each payment is not settled on the blockchain and transactions are only processed by the relevant users rather than the entire network, as occurs on Layer 1.
+
+Based on **ELTOO** technology, Omnia can do more than simple payments. It can do any smart contract sequence with a given subset of users and subset of coins. Using hash time locked contracts (HTLCs) and payment channels, users can keep a ‘tab’ of their unsettled balances indefinitely, until they wish to settle on Minima (Layer 1).
+**Omnia unlocks the possibility of essentially unlimited transactions per second (TPS).**
+
+## Layer 3: MiniDapps
+**Web3 Applications**
+
+MiniDapps are truly decentralised applications built using the functionality enabled by any/all components of the Minima network:
+1. Value transfer on Minima
+2. Information transfer on Maxima
+3. Unlimited transaction per seconds on Omnia
+
+
+
+MiniDapps are decentralized web applications combining the utility provided by Maxima, Minima and Omnia with Minima’s scripting language. The front-end for MiniDapps can be written using the widely known JavaScript, HTML and CSS.
Minima’s KISS scripting language is Turing-Complete, allowing for powerful smart contract driven applications. Building a MiniDapp is accessible to any web developer.
\ No newline at end of file
diff --git a/content/docs/learn/quantumsecurity.mdx b/content/docs/learn/quantum-security.mdx
similarity index 98%
rename from content/docs/learn/quantumsecurity.mdx
rename to content/docs/learn/quantum-security.mdx
index 15751c4..7b56c5c 100644
--- a/content/docs/learn/quantumsecurity.mdx
+++ b/content/docs/learn/quantum-security.mdx
@@ -1,22 +1,22 @@
----
-title: Quantum Security
-description: Minima's approach to Quantum security is two-fold Hashing and Signatures.
-tag: learn
----
-
-
-
-If Minima is truly expected to stand the test of time, it must be Quantum secure from the beginning. Once scaled to hundreds of millions of nodes, each constructing and validating, the consensus critical components of the protocol must be finished, requiring no future changes.
-
-Minima’s approach to Quantum security is two-fold:
-## Hashing
-
-Minima uses the **SHA3-256 hash function**, considered to be post-quantum sufficient by the National Institute of Standards and Technology (NIST).
-
-SHA3-256 is used for TxPoW mining, block and transaction hashes, proof chains, and signing or verifying data. All of the cryptographic security of Minima is provided by hash functions.
-
-## Signatures
-
-Minima uses Winternitz One Time Signature (WOTS) with a Winternitz parameter of 8. WOTS is a hash based digital signature scheme which is considered [Quantum resistant](https://eprint.iacr.org/2011/191.pdf).
-
+---
+title: Quantum Security
+description: Minima's approach to Quantum security is two-fold Hashing and Signatures.
+tag: learn
+---
+
+
+
+If Minima is truly expected to stand the test of time, it must be Quantum secure from the beginning. Once scaled to hundreds of millions of nodes, each constructing and validating, the consensus critical components of the protocol must be finished, requiring no future changes.
+
+Minima’s approach to Quantum security is two-fold:
+## Hashing
+
+Minima uses the **SHA3-256 hash function**, considered to be post-quantum sufficient by the National Institute of Standards and Technology (NIST).
+
+SHA3-256 is used for TxPoW mining, block and transaction hashes, proof chains, and signing or verifying data. All of the cryptographic security of Minima is provided by hash functions.
+
+## Signatures
+
+Minima uses Winternitz One Time Signature (WOTS) with a Winternitz parameter of 8. WOTS is a hash based digital signature scheme which is considered [Quantum resistant](https://eprint.iacr.org/2011/191.pdf).
+
The cost of being Quantum secure is that signatures are at least 10-20x as big as Elliptic Curve Digital Signature Algorithm (ECDSA) used in Bitcoin. A one time use WOTS is 400-800 bytes. Minima signatures are certainly large when compared to normal Bitcoin transactions, but they are not kept forever since almost all data is eventually pruned, so although a bandwidth issue, they are only a temporary storage overhead.
\ No newline at end of file
diff --git a/content/docs/learn/scripting.mdx b/content/docs/learn/scripting.mdx
index a3867e3..5c8baf5 100644
--- a/content/docs/learn/scripting.mdx
+++ b/content/docs/learn/scripting.mdx
@@ -1,58 +1,68 @@
----
-title: Scripting
-description: Learn about Minima Scripting
-tag: learn
----
-
-Minima has its own, Turing Complete, scripting language for creating Smart Contracts - **KISS VM**.
-
-Minima, like Bitcoin, uses the [UTxO model](/docs/learn/minima/coreconcepts#utxo-model) so writing smart contracts on Minima is quite different to writing them on an Account based model like Ethereum.
-
-Every UTxO (coin) is associated with a Minima script i.e. contract which can either return **TRUE** or **FALSE** when used in a transaction. The default is return FALSE, so all scripts must explicitly return TRUE for the transaction to be valid.
-
-A **‘contract’** is the script that locks the funds in a coin and is interchangeable with the word script.
-
-The default script for a coin is
-
-``` bash
-RETURN SIGNEDBY(0xFFEE67F7C..)
-```
-
-where `0xFFEE67F7C..` is the public key of the owner of the coin.
-
-This default script will only return TRUE when a transaction attempting to spend this coin has been signed by the coin's owner.
-
-
-The KISS VM scripting language supports SHA2-256 to allow cross-chain hash lock contracts with legacy chains.
-
-Contracts are inherently compatible with Layer 2.
-
-
-The addition of the **state variables** in the MMR Proof DB, allow for complex scripts with knowledge of their past to be created. Minima uses a simple state mechanic for transactional history rather than a global state for ALL transactions.
-
-Each user tracks the coins to an address they possess and all coins that have a public key or address they possess in the STATE or PREVSTATE.
-
-
-## Types of contracts
-
-Some of the types of contracts possible:
-
-- Basic Signed
-- Time Lock
-- Multi-sig
-- Complex multi-sig
-- M of N multi-sig
-- Hashed Time Lock (including cross-chain)
-- Exchange
-- FlashCash
-- MAST
-
-## Token Scripts
-
-Each token has a separate script that must also return TRUE when attempting to spend a UTxO.
-
-A token by default has RETURN TRUE as its script. This token structure is added to any transaction wishing to use that token so every user can know how many, what scripts, name etc of the Token is correct and valid.
-
-**Both the coin address script and the token script must return TRUE.**
-
-For details about the KISS VM scripting language, see the [Build](/docs/buildonminima/contracts/scriptbasics) section.
\ No newline at end of file
+---
+title: Scripting
+description: Learn about Minima Scripting
+tag: learn
+---
+
+Minima has its own, Turing Complete, scripting language for creating Smart Contracts - **KISS VM**.
+
+Minima, like Bitcoin, uses the [UTxO model](/docs/learn/#utxo-model) so writing smart contracts on Minima is quite different to writing them on an Account based model like Ethereum.
+
+Every UTxO (coin) is associated with a Minima script i.e. contract which can either return **TRUE** or **FALSE** when used in a transaction. The default is return FALSE, so all scripts must explicitly return TRUE for the transaction to be valid.
+
+A **‘contract’** is the script that locks the funds in a coin and is interchangeable with the word script.
+
+The default script for a coin is
+
+``` bash
+RETURN SIGNEDBY(0xFFEE67F7C..)
+```
+
+where `0xFFEE67F7C..` is the public key of the owner of the coin.
+
+This default script will only return TRUE when a transaction attempting to spend this coin has been signed by the coin's owner.
+
+
+The KISS VM scripting language supports SHA2-256 to allow cross-chain hash lock contracts with legacy chains.
+
+Contracts are inherently compatible with Layer 2.
+
+
+The addition of the **state variables** in the MMR Proof DB, allow for complex scripts with knowledge of their past to be created. Minima uses a simple state mechanic for transactional history rather than a global state for ALL transactions.
+
+Each user tracks the coins to an address they possess and all coins that have a public key or address they possess in the STATE or PREVSTATE.
+
+
+## Types of contracts
+
+Some of the types of contracts possible:
+
+- Basic Signed
+- Time Lock
+- Multi-sig
+- Complex multi-sig
+- M of N multi-sig
+- Hashed Time Lock (including cross-chain)
+- Exchange
+- FlashCash
+- MAST
+
+## Token Scripts
+
+Each token has a separate script that must also return TRUE when attempting to spend a UTxO.
+
+A token by default has RETURN TRUE as its script. This token structure is added to any transaction wishing to use that token so every user can know how many, what scripts, name etc of the Token is correct and valid.
+
+**Both the coin address script and the token script must return TRUE.**
+
+For details about the KISS VM scripting language, see the [Build](/docs/development/contracts-basics) section.
+
+## Further Reading
+
+
+
+
\ No newline at end of file
diff --git a/content/docs/learn/transactions.mdx b/content/docs/learn/transactions.mdx
index 8b5bed5..90fb837 100644
--- a/content/docs/learn/transactions.mdx
+++ b/content/docs/learn/transactions.mdx
@@ -8,7 +8,13 @@ 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..40165ba 100644
--- a/content/docs/run-a-node/android.mdx
+++ b/content/docs/run-a-node/android.mdx
@@ -1,159 +1,159 @@
----
-title: Android
-description: Run a Minima node on an Android device
-tag: run-a-node
----
-
-## Install the Minima App
-
-Install the Minima App on your Android device from the Google Play store.
-
-
-
-
-
-### Download the Minima App
-
-
-
-
-
-
-
-
-
-
-### Enable Auto Update
-
-
-
-
-
- ### Open the Minima App
-
-
- Allow Battery Settings
-
- Open the Minima App and allow the battery settings for Minima to run in the background
-
-
-
-
-
-
-Congratulations - your node is now installed & running!
-
-Please see the **first steps** to complete now your node is running.
-
-
-The latest Android apk file can also be downloaded directly from Github [here](https://github.com/minima-global/Minima/tree/master/jar).
-
-
-
-import { Accordion, Accordions } from "fumadocs-ui/components/accordion"
-
-
-
- Please check the battery settings for the Minima app and ensure that "Manage Automatically" is disabled. This will ensure that Minima remains in sync and running in the background
-
- The settings should be set as shown below.
-
-
-
-
-
- OPPO have a strict background policy which means that even if Minima is allowed to run in the background, it may be force closed if there are too many apps with this permission.
-
- To ensure that Minima continues to run as expected, please ensure that you have fewer than 5 apps on your phone (including Minima) that are allowed to run in the background.
-
-
-
-
-## First steps
-
-The first time you install Minima, you will need to
-
-- Connect to the network
-- Write down your seed phrase
-
-
- For more information on how to connect to the network and secure your node,
- please refer to [User Guides](/docs/user-guides/jointhenetwork).
-
-
-## Desktop Connect
-
-Android users can connect to their phone node from a computer that is connected to the same WiFi network.
-
-
-
-
-
-### Settings
-
-Open the Minima app on your Android device and navigate to the settings page.
-
-On the settings page, select the **Desktop Connect** option.
-
-
-
-
-
-
-
-### WiFi Network & Browser
-
-Ensure that your computer is connected to the same WiFi network as your Android device.
-
-If you have recently joined a WiFi network, refresh the URL
-
-From your computer's web browser, go to the URL shown
-
-
-
-
-
-
-
-
-### Security Warning & Password
-
-Accept the security warning shown and enter the password shown to login.
-
-
-
-
-
-You can now access your Minima node from your desktop browser.
-
-## Set your own password
-
-To set your own password for Desktop Connect:
-
-- Open the Minima app on your phone
-- Tap at the top of the screen to show the MinimaOS title bar
-- Tap on the 3 dots and select **Startup Params**
-- Enter `-mdspassword yOurp@ssw0rdhere` to set your own password
-- Select **Save**
-- Tap at the top of the screen to show the MinimaOS title bar again
-- Select **Shutdown** to restart Minima
-
-
- When you reopen Minima, go to Settings > Desktop Connect to confirm your
- password has been set.
-
+---
+title: Android
+description: Run a Minima node on an Android device
+tag: run-a-node
+---
+
+## Install the Minima App
+
+Install the Minima App on your Android device from the Google Play store.
+
+
+
+
+
+### Download the Minima App
+
+
+
+
+
+
+
+
+
+
+### Enable Auto Update
+
+
+
+
+
+ ### Open the Minima App
+
+
+ Allow Battery Settings
+
+ Open the Minima App and allow the battery settings for Minima to run in the background
+
+
+
+
+
+
+Congratulations - your node is now installed & running!
+
+Please see the **first steps** to complete now your node is running.
+
+
+The latest Android apk file can also be downloaded directly from Github [here](https://github.com/minima-global/Minima/tree/master/jar).
+
+
+
+import { Accordion, Accordions } from "fumadocs-ui/components/accordion"
+
+
+
+ Please check the battery settings for the Minima app and ensure that "Manage Automatically" is disabled. This will ensure that Minima remains in sync and running in the background
+
+ The settings should be set as shown below.
+
+
+
+
+
+ OPPO have a strict background policy which means that even if Minima is allowed to run in the background, it may be force closed if there are too many apps with this permission.
+
+ To ensure that Minima continues to run as expected, please ensure that you have fewer than 5 apps on your phone (including Minima) that are allowed to run in the background.
+
+
+
+
+## First steps
+
+The first time you install Minima, you will need to
+
+- Connect to the network
+- Write down your seed phrase
+
+
+ For more information on how to connect to the network and secure your node,
+ please refer to [User Guides](/docs/user-guides/join-the-network).
+
+
+## Desktop Connect
+
+Android users can connect to their phone node from a computer that is connected to the same WiFi network.
+
+
+
+
+
+### Settings
+
+Open the Minima app on your Android device and navigate to the settings page.
+
+On the settings page, select the **Desktop Connect** option.
+
+
+
+
+
+
+
+### WiFi Network & Browser
+
+Ensure that your computer is connected to the same WiFi network as your Android device.
+
+If you have recently joined a WiFi network, refresh the URL
+
+From your computer's web browser, go to the URL shown
+
+
+
+
+
+
+
+
+### Security Warning & Password
+
+Accept the security warning shown and enter the password shown to login.
+
+
+
+
+
+You can now access your Minima node from your desktop browser.
+
+## Set your own password
+
+To set your own password for Desktop Connect:
+
+- Open the Minima app on your phone
+- Tap at the top of the screen to show the MinimaOS title bar
+- Tap on the 3 dots and select **Startup Params**
+- Enter `-mdspassword yOurp@ssw0rdhere` to set your own password
+- Select **Save**
+- Tap at the top of the screen to show the MinimaOS title bar again
+- Select **Shutdown** to restart Minima
+
+
+ When you reopen Minima, go to Settings > Desktop Connect to confirm your
+ password has been set.
+
diff --git a/content/docs/run-a-node/archive-node.mdx b/content/docs/run-a-node/archive-node.mdx
index e066de4..72a3e0f 100644
--- a/content/docs/run-a-node/archive-node.mdx
+++ b/content/docs/run-a-node/archive-node.mdx
@@ -1,143 +1,172 @@
----
-title: Run an Archive Node
-description: Learn how to run an Archive Node
-tag: run-a-node
----
-
-Archive nodes serve an important function of being able to recover any Minima user if they lose access to their node or require a re-sync to the chain.
-
-A standard Minima node is constantly pruning the chain and only holds the latest 2 months of archive blocks for the purpose of sharing missing recent blocks with other nodes that are rejoining the network after some time offline.
-
-An archive node does not prune blocks after 2 months and can therefore be used to re-sync another node from the genesis block.
-
-
- An archive node can only be used to re-sync users who created their nodes
- after your archive node was created. If you wish to be able to recover any
- Minima user, you must perform a chain re-sync from an archive node that holds
- the entire blockchain since genesis.
-
-
-## Use cases
-
-Archive nodes can be for personal use or public use.
-
-#### Personal Archive Node
-
-A user running a node on a mobile device may choose to run an Archive node locally on their laptop/desktop at home in case they lose their phone and do not have a valid backup of their node stored elsewhere. In this case, the user would always have the latest proofs for their coins on their own Archive node and they can recover their phone wallet to a new device without relying on any other Minima user.
-
-#### Public Archive Node
-
-A user can choose to run an archive node for the purpose of helping other Minima users recover their wallet. By exporting their archive data to a file, another user can import the archive file and recover their wallet. If the archive node is on a server with a static external IP address, other users can also use the ip:port of the archive node to recover their wallet by remotely connecting to the archive node.
-
-To learn more about archive nodes, please see the [archive nodes](/docs/learn/archivenodes) page.
-
-## System requirements
-
-Anyone can run an archive node from Android, desktop or server.
-
-The following assumes that only Minima is running on the server, you should consider increasing the RAM and storage depending on the requirements for other software you install e.g. virus protection etc
-
-**Processing**: 2 CPU
-**Memory**: 4GB RAM
-**Storage**: 5GB storage
-
-## Ports
-
-If running an archive node on a desktop, no port forwarding is required.
-
-If running a public archive node on a server, open inbound connections on port 9001 (or the main custom Minima port you have chosen).
-
-## Starting an archive node
-
-When you start an archive node, you will start storing the archive data from that point onwards, therefore you can only re-sync coins for users that are created after this point.
-
-It is possible to run an archive node that stores all blocks since the Genesis block by doing a chain re-sync from another archive node that already has all blocks.
-
-## Manual archive node (desktop)
-
-To start a Minima archive node manually, add the -archive parameter to the start up command.
-
-If you have an existing node that you wish to change to an archive node, first take a backup of your existing node, then quit your node from the Terminal and restart the same node, adding in the -archive parameter on the start up line.
-
-
- If you used the -data parameter to specify a data folder when starting your
- existing node, you must make sure you start the archive node using the same
- data folder you chose originally.
-
-
-import { Tab, Tabs } from "fumadocs-ui/components/tabs"
-
-
-
-
-```bash
-sudo java -jar /Users/INSERTUSERNAME/Downloads/minima.jar -mdsenable -archive
-```
-
-
-
- ```bash
-java -jar C:\Users\INSERTUSERNAME\Downloads\minima.jar -mdsenable -archive
- ```
-
-
-
-
-## Docker archive node
-
-To start a Minima archive node container, you need to add the `-e minima_archive=true` environment variable to the start up command.
-
-If you originally started your node without the `-e minima_archive=true` environment variable, you can either:
-
-- start a new separate container for your archive node,
-- backup your existing node, the restore it to a new archive container you create,
-- backup your existing node, then stop and remove your existing Minima container and start a new Minima container including -e minima_archive=true, using the SAME data folder as your old node e.g. minimadocker9001 or minimadocker8001
-
-
-
-
-```bash
-docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_desktop=true -e minima_archive=true -v ~/minimadockerarchive:/home/minima/data -p 7001-7003:9001-9003 --restart unless-stopped --name minimaarchive minimaglobal/minima:latest
-```
-
-
-
-
- ```bash
-docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_desktop=true -e minima_archive=true -v C:\Users\INSERTUSERNAME\minimadockerarchive:/home/minima/data -p 7001-7003:9001-9003 --restart unless-stopped --name minimaarchive minimaglobal/minima:latest
-```
-
-
-
-
-
-## Check your archive data
-
-From the Terminal MiniDapp or Docker CLI, you can check the integrity of your archive data by running the command:
-
-This checks your archive data for missing or broken blocks and tells you the first block you can sync users from. If there is an error, you will need to re-sync from another archive node.
-
-```bash title="Terminal"
-archive action:integrity
-```
-
-Example output:
-
-```json title="Output"
-{
- "command": "archive",
- "params": {
- "action": "integrity"
- },
- "status": true,
- "pending": false,
- "response": {
- "message": "Archive integrity check completed",
- "start": 1,
- "blocks": 6443,
- "cascade": true,
- "errors": 0,
- "recommend": "Your ArchiveDB is correct and has no errors."
- }
-}
-```
+---
+title: Run an Archive Node
+description: Learn how to run an Archive Node
+tag: run-a-node
+---
+
+NOTES
+
+- MOVE ARCHIVE NODE STUFF FROM USER GUIDES TO RUN A NODE
+- MOVE MINIDAPPS STUFF FROM KNOWLEDGE BASE INTO DEVELOPERS SECTION
+- overview page still missing?
+
+
+ Unlike a standard full node, an archive node does not prune older blocks, storing all block headers and coin proofs from the moment it was started. Full transaction details are still pruned after two months.
+
+ To learn more about the functionality of Archive nodes, see [Node Types.](/docs/run-a-node/node-types#archive-node)
+
+## System requirements
+
+Anyone can run an archive node from a desktop or server.
+
+The following assumes that only Minima is running on the server, you should consider increasing the RAM and storage depending on the requirements for other software you install e.g. virus protection etc
+
+- **Processing**: 2 CPU
+- **Memory**: 4GB RAM
+- **Storage**: 5GB storage
+
+## Ports
+
+If running an archive node on a desktop, no port forwarding is required.
+
+If running a public archive node on a server, open inbound connections on port 9001 (or the main custom Minima port you have chosen).
+
+
+import { Tab, Tabs } from "fumadocs-ui/components/tabs"
+
+
+## How to start an Archive node
+
+
+
+
+### Start an Archive node
+
+Choose your platform of choice and follow the guidance for starting a standard full node, adding the `-archive` parameter when starting the node.
+
+
+If you have an existing node that you wish to change to an archive node, ensure you have first written down your seed phrase. We also recommend taking a backup of your existing node. Then quit your node from the Terminal and restart the same node, adding in the -archive parameter on the start up line.
+
+
+Examples:
+
+
+
+
+
+ If using the Minima launcher (JNLP) on Windows or Mac,
+ 1. Go to the **Settings** tab and ensure the checkbox is ticked for "Use Custom Startup Params"
+ 2. In the box below, enter `-archive` onto the end of any other custom parameters used, ensuring there is a space between them.
+ 3. Close the dialog box to shut Minima down
+ 4. Restart the Minima launcher
+
+
+
+
+1. Create a new folder and copy the minima.jar into that folder. We will run everything from there.
+2. Open your command line interface/Terminal
+3. Copy the path to the folder and from the command line, `cd` into that folder
+
+```
+cd C:\Users\Bob\MyMinimaFolder\
+```
+
+
+ To avoid typing in the folder path, drag and drop the folder into the command line window.
+
+
+4. Enter the following into the command line window to start Minima
+
+ ```bash
+ java -jar minima.jar -archive -data .minima -mdsenable -mdspassword INSERTPASSWORD
+ ```
+
+
+ If you used the `-data` parameter to specify a data folder when starting your
+ existing node, you must make sure you start the archive node using the same
+ data folder you chose originally.
+
+
+
+
+
+
+To start a Minima archive node container, add the `-e minima_archive=true` environment variable to the start up command.
+
+Desktop example:
+
+```bash
+docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_desktop=true -e minima_archive=true -v ~/minimadockerarchive:/home/minima/data -p 7001-7003:9001-9003 --restart unless-stopped --name minimaarchive minimaglobal/minima:latest
+```
+
+ If you originally started your node without the `-e minima_archive=true` environment variable, you can either:
+
+ - start a new separate container for your archive node,
+ - backup your existing node, the restore it to a new archive container you create,
+ - backup your existing node, then stop and remove your existing Minima container and start a new Minima container including -e minima_archive=true, using the SAME data folder as your old node e.g. minimadocker9001 or minimadocker8001
+
+
+
+
+
+
+
+### Optionally re-sync to the Genesis block
+
+When you start an archive node, you will start storing the archive data from that point onwards. To run an archive node that stores all blocks since the Genesis block by doing a chain re-sync from another archive node that already has all blocks.
+
+
+ An archive node can only be used to re-sync users who created their nodes
+ after your archive node was created. If you wish to be able to recover any
+ Minima user, you must perform a chain re-sync from an archive node that holds
+ the entire blockchain since genesis.
+
+
+
+
+
+### Check your archive data
+
+From the Terminal MiniDapp or Docker CLI, you can check the integrity of your archive data by running the command:
+
+This checks your archive data for missing or broken blocks and tells you the first block you can sync users from. If there is an error, you will need to re-sync from another archive node.
+
+```bash title="Terminal"
+archive action:integrity
+```
+
+Example output:
+
+```json title="Output"
+{
+ "command": "archive",
+ "params": {
+ "action": "integrity"
+ },
+ "status": true,
+ "pending": false,
+ "response": {
+ "message": "Archive integrity check completed",
+ "start": 1,
+ "blocks": 6443,
+ "cascade": true,
+ "errors": 0,
+ "recommend": "Your ArchiveDB is correct and has no errors."
+ }
+}
+```
+
+
+
+
+{/* ## Use cases
+
+Archive nodes can be for personal use or public use.
+
+#### Personal Archive Node
+
+A user running a node on a mobile device may choose to run an Archive node locally on their laptop/desktop at home in case they lose their phone and do not have a valid backup of their node stored elsewhere. In this case, the user would always have the latest proofs for their coins on their own Archive node and they can recover their phone wallet to a new device without relying on any other Minima user.
+
+#### Public Archive Node
+
+A user can choose to run an archive node for the purpose of helping other Minima users recover their wallet. By exporting their archive data to a file, another user can import the archive file and recover their wallet. If the archive node is on a server with a static external IP address, other users can also use the ip:port of the archive node to recover their wallet by remotely connecting to the archive node. */}
diff --git a/content/docs/run-a-node/desktop-cli.mdx b/content/docs/run-a-node/desktop-cli.mdx
index 7eded10..c22271b 100644
--- a/content/docs/run-a-node/desktop-cli.mdx
+++ b/content/docs/run-a-node/desktop-cli.mdx
@@ -1,296 +1,284 @@
----
-title: Desktop Command Line
-description: Run a Minima node on your desktop using the command line interface
-tag: run-a-node
----
-
-
- The following process is for running a Minima node manually. You must leave
- your desktop running at all times for Minima to continue running and must
- update your node manually when new versions become available.
-
-
-## Start a new Minima node
-
-To run Minima, you need to have Java installed on your system. You can check if you have Java installed by running the following command in your terminal:
-
-```bash title="Terminal"
-java -version
-```
-
-
- If you don't have Java installed, you can download it from the [Java
- website](https://www.java.com/en/download/).
-
-
-
-
-
-### Download the latest minima.jar
-
-You can download the latest version of Minima from the [Minima GitHub releases
-page](https://github.com/minima-global/Minima/releases).
-
-The latest version is `v1.0.41`.
-
-
-
-
-### Start your node
-
-Type the following command all on one line, replacing `INSERTUSERNAME` with the username for your files and `[insertpasswordhere]` with your own custom password:
-
-
- To avoid typing in the folder path, you can drag and drop the downloaded
- minima.jar file into the command line window.
-
-
-
-
-
-```bash
-sudo java -jar /Users/INSERTUSERNAME/Downloads/minima.jar -mdsenable -mdspassword [insertpasswordhere]
-```
-
-
-
- ```bash
-java -jar C:\Users\INSERTUSERNAME\Downloads\minima.jar -mdsenable -mdspassword [insertpasswordhere]
- ```
-
-
-
-
-
-
-The following start up parameters can optionally be specified when starting your node.
-
-To add/remove parameters after a node has been started, you must `quit` the node and restart it, adding/removing the required parameters.
-
-`[]` square brackets indicate where an input is required, **the brackets should not be included**.
-
-General
-
-- `-clean` : CAREFUL! Clears existing data, starts a new fresh node. All coins will be lost.
-- `-port [port]` : specify the initial port for Minima to use. Range used will be the specified port +4. Default is 9001-9005.
-- `-host [ipaddress]` : specify the host IP
-- `-dbpassword [yourdbpassword]` : Main Wallet / SQL AES password - MUST be specified on first launch. CANNOT be changed later.
-- `-allowallip` : Allow all IPs for Maxima / Networking. Local IPs won't be allowed otherwise.
-- `-archive` : Run an Archive node - store all archive data / the cascade to allow for resyncs from this node
-- `-daemon` : Run in daemon mode with no stdin input (if running Minima as a background service)
-- `-isclient` : Tells the P2P System that this node can't accept incoming connections
-- `-server` : Use Server settings - this node can accept incoming connections
-- `-desktop` : Use Desktop settings - this node can't accept incoming connections
-
-Folders
-
-- `- data` : the data folder where all the config files for this node are stored. Default is a hidden .minima folder under the user's home directory. If you want to specify a folder not in the user's home directory, you must use the complete path.
-- `-basefolder` : specify a default file creation / backup / restore folder. Default is the user's home directory. Can be the same as the data folder provided.
-
-MiniDapp System (mds)
-
-- `- mdsenable` : enable the MiniDapp System (default port 9003)
-- `-mdspassword [yourmdspassword]` : specify the mds login password
-- `-mdsinit [foldername/path]` : specify a folder of miniDAPPs
-- `-mdswrite [minidapp]` : give an initial miniDAPP WRITE access
-
-RPC
-
-- `-rpcenable` : enable remote procedure call
-- `-rpcssl` : use Self Signed SSL cert to run RPC
-- `-rpcpassword [yourrpcpassword]` : set Basic Auth password for RPC calls ( Use with SSL / stunnel ). Only secure if used with SSL.
-- `-rpcclrf` : use CRLF at the end of the RPC headers (NodeJS)
-
-Test nodes
-
-- `-genesis` : start the node from the genesis block (automatically uses -clean)
-- `-test` : uses test parameters e.g. faster block times
-- `-connect [ip:port,ip:port]` : Disable the automatic P2P system and create your own network by manually connecting to this list of host:port
-- `-nop2p` : Disable the automatic P2P system
-- `-noconnect` : Stops the P2P system from connecting to other nodes until it has been connected to
-- `-nosyncibd` : Do not sync IBD (for testing)
-
-Mobile
-
-- `-mobile` : Sets this device to a mobile device - used for metrics only
-- `-limitbandwidth` : Limit the amount sent for archive sync
-- `-noshutdownhook` : Do not use the shutdown hook (Android)
-
-Debugging
-
-- `-p2p-log-level-info` : Set the P2P log level to info
-- `-p2p-log-level-debug` : Set the P2P log level to debug
-
-Help
-
-- `-showparams` : Show relevant startup params on launch
-- `-help` : print help for the start up parameters
-
-
-
-
-
-
-
-The following process is for running a Minima node manually so you should avoid the following:
-
-- Closing the terminal window
-- Allowing your PC to go to sleep
-- Turning your PC off
-
-If any of the above happen, your Minima node will stop running and you will need to repeat step 3 to start it again.
-
-
-
-Minima is now started, your output should look similar to the below and you should start to see the logs running.
-
-```bash
-Minima @ 14/03/2022 17:32:30 [5.1 MB] : **********************************************
-Minima @ 14/03/2022 17:32:30 [5.1 MB] : * __ __ ____ _ _ ____ __ __ __ *
-Minima @ 14/03/2022 17:32:30 [5.1 MB] : * ( \/ )(_ _)( \( )(_ _)( \/ ) /__\ *
-Minima @ 14/03/2022 17:32:30 [5.1 MB] : * ) ( _)(_ ) ( _)(_ ) ( /(__)\ *
-Minima @ 14/03/2022 17:32:30 [5.1 MB] : * (_/\/\_)(____)(_)\_)(____)(_/\/\_)(__)(__) *
-Minima @ 14/03/2022 17:32:30 [5.1 MB] : * *
-Minima @ 14/03/2022 17:32:30 [5.1 MB] : **********************************************
-```
-
-Your node is now installed & running!
-
-
-
-
-
-Secure your node
-
-
-
-
-
-
-## Login to your node
-
-The first time accessing your MiniDapp hub, you may need to pass through the security warning - see below - as the MiniDapp system currently uses self-signed certificates.
-
-
-
-Note that **9003** is the default port for accessing your MiniDapp system - if you installed Minima on custom ports, you will need to use your custom base port + 2. E.g. If you installed Minima on 8001, you will need to use https://127.0.0.1:8003/
-
-
-
-Go to https://127.0.0.1:9003/ in your web browser. You may have to proceed past the security warning, since Minima uses self-signed certificates. Learn how here.
-
-You will see the login page to your node.
-
-
-
-If you set one, use the password you set as your -mdspassword when starting the node.
-
-
- To check your password you can return to your desktop command line/terminal
- where the Minima logs are running and enter `mds`
-
-
-## First steps
-
-The first time you install Minima, you will need to
-
-- Connect to the network
-- Write down your seed phrase
-
-
- For more information on how to connect to the network and secure your node,
- please refer to [User Guides](/docs/user-guides/jointhenetwork).
-
-
-## Using the MiniDapp Hub
-
-By default, all MiniDapps will be given **READ** permission when you install them.
-
-When a MiniDapp with READ permission attempts to run a command which would make changes to your node or require access to your funds, a PENDING command will be created which you will need to accept.
-
-
- You should only give WRITE permissions to MiniDapps that you trust. Only the
- Terminal MiniDapp will need WRITE permission so you can approve/deny
- transactions.
-
-
-### Setting the Terminal permissions to WRITE
-
-
- If your prefer to use the Terminal MiniDapp to execute all commands, you will
- need to set the permissions to WRITE see below.
-
-
-1. Login to your MiniDapp hub and install the Terminal MiniDapp from the [MiniDapp site](https://minidapps.minima.global/)
-2. Return to your desktop command line/terminal and run the `mds` command again (see above) to list your MiniDapps and check their existing permissions
-3. You will see the Terminal MiniDapp listed, **copy the uid from YOUR node**
-
-Run the following command in the Command line/Terminal where the Minima logs are running, pasting in YOUR uid:
-
-```bash title="Terminal"
-mds action:permission uid:0x02FA22EF2A2A3B0FA01D688A902779E5 trust:write
-```
-
-You may now use the Terminal MiniDapp to execute all commands. You will no longer need to use your desktop command line interface/Terminal.
-
-## Node status
-
-The `status` command will show details of your node including version, last block and chain details.
-
-1. Type `status` into the command line/Terminal
-2. Check `block` and `time`, this is your tip block and the `time` of that block, time should be within a few minutes of the current time.
-
-
-
-
-Having a recent block time is not a guarantee that you are on the right chain.
-Consider cross checking your latest block with another node or checking the samechain response of your Maxima Contacts by running the maxcontacts command.
-
-If the time shown is significantly behind, you should restart your node to resync to the chain. If it doesn't catch up automatically, youu may need to perform a chain resync from an Archive node.
-
-
-
-**Other useful commands:**
-
-- `mds` - find the password for your node
-- `help` - show all commands
-
-## How to update your node
-
-1. Type `quit` into the Command prompt/Terminal window where the Minima logs are running
-2. Download the latest version of Minima from the [Minima GitHub releases page](https://github.com/minima-global/Minima/releases) and replace the existing minima.jar file with the latest version
-3. Restart Minima using the command in step 2 in [Start a new Minima node](#start-a-new-minima-node).
-
-
- To create a fresh install of a node -clean can be added on to the end of the
- start up command DO NOT use -clean if you are simply restarting your node,
- your coins will be wiped and you will only be able to recover them from a
- backup! e.g. java -jar C:\Users\Username\Downloads\minima.jar -mdsenable
- -clean
-
-
-## How to remove your node
-
-
- Removing a node without taking a backup will delete all your coins! Only
- remove a node if you have taken a backup or are running a test node.
-
-
-1. Type `quit` into the Command prompt/Terminal window where the Minima logs are running
-2. Delete the minima.jar file you downloaded
-3. (Optional) Remove the minima database files located in your home directory (you may need to show hidden files)
-
-Once your node running, you will need to [join the network](/docs/user-guides/jointhenetwork).
+---
+title: Desktop Command Line
+description: Run a Minima node on your desktop using the command line interface
+tag: run-a-node
+---
+
+
+
+The following process is for running a Minima node manually from your command line/terminal interface. Closing the terminal window or turning off your computer will stop Minima running.
+
+It is recommended to create a batch file or bash script to start Minima at Startup, otherwise you will have to start Minima manually again.
+
+
+
+## Pre-requisites
+
+
+**1. Check you have Java installed**
+
+To run Minima, you need to have Java installed on your system. Check if you have Java installed by running the following command in your terminal:
+
+```bash title="Terminal"
+java -version
+```
+
+
+ If you don't have Java installed, download it from the [Java
+ website](https://www.java.com/en/download/).
+
+
+
+**2. Download the latest minima.jar**
+
+Download the latest version of Minima from the [Minima GitHub releases
+page](https://github.com/minima-global/Minima/releases).
+
+## Start a new Minima node
+
+
+1. Create a new folder and copy the minima.jar into that folder. We will run everything from there.
+2. Open your command line interface/Terminal
+3. Copy the path to the folder and from the command line, `cd` into that folder
+
+```
+cd C:\Users\Bob\MyMinimaFolder\
+```
+
+
+ To avoid typing in the folder path, drag and drop the folder into the command line window.
+
+
+4. Enter the following into the command line window to start Minima
+
+
+
+
+Set your password for the MiniDapp system by replacing `INSERTPASSWORD` with your own.
+
+
+```bash title="Terminal"
+java -jar minima.jar -data .minima -p2pnodes megammr.minima.global:9001 -mdsenable -mdspassword INSERTPASSWORD
+```
+
+
+Minima is now starting, and should automatically join the network. Your output should look similar to the below and you should start to see the logs running.
+
+```bash
+Minima @ 14/03/2022 17:32:30 [5.1 MB] : **********************************************
+Minima @ 14/03/2022 17:32:30 [5.1 MB] : * __ __ ____ _ _ ____ __ __ __ *
+Minima @ 14/03/2022 17:32:30 [5.1 MB] : * ( \/ )(_ _)( \( )(_ _)( \/ ) /__\ *
+Minima @ 14/03/2022 17:32:30 [5.1 MB] : * ) ( _)(_ ) ( _)(_ ) ( /(__)\ *
+Minima @ 14/03/2022 17:32:30 [5.1 MB] : * (_/\/\_)(____)(_)\_)(____)(_/\/\_)(__)(__) *
+Minima @ 14/03/2022 17:32:30 [5.1 MB] : * *
+Minima @ 14/03/2022 17:32:30 [5.1 MB] : **********************************************
+```
+
+
+**Login to your node**
+
+Go to https://127.0.0.1:9003/ in your web browser. You may have to proceed past the security warning, since Minima uses self-signed certificates. Learn how [**here**](https://www.vultr.com/docs/how-to-bypass-the-https-warning-for-self-signed-ssl-tls-certificates/).
+
+You will see the login page to your node.
+
+
+
+Note that **9003** is the default port for accessing your MiniDapp system - if running Minima on custom ports, use your custom base port + 2. E.g. If you installed Minima on 8001, use https://127.0.0.1:8003/
+
+
+
+
+
+Enter the password you set as your `-mdspassword` when starting the node.
+
+
+ To check your password you can return to your desktop command line/terminal
+ where the Minima logs are running and enter `mds`
+
+
+
+
+
+Mac:
+
+```bash
+sudo java -jar minima.jar -data .minima -p2pnodes megammr.minima.global:9001
+```
+
+Windows:
+
+ ```bash
+java -jar minima.jar -data .minima -p2pnodes megammr.minima.global:9001
+ ```
+
+
+Minima is now starting, and should automatically join the network. Your output should look similar to the below and you should start to see the logs running.
+
+```bash
+Minima @ 14/03/2022 17:32:30 [5.1 MB] : **********************************************
+Minima @ 14/03/2022 17:32:30 [5.1 MB] : * __ __ ____ _ _ ____ __ __ __ *
+Minima @ 14/03/2022 17:32:30 [5.1 MB] : * ( \/ )(_ _)( \( )(_ _)( \/ ) /__\ *
+Minima @ 14/03/2022 17:32:30 [5.1 MB] : * ) ( _)(_ ) ( _)(_ ) ( /(__)\ *
+Minima @ 14/03/2022 17:32:30 [5.1 MB] : * (_/\/\_)(____)(_)\_)(____)(_/\/\_)(__)(__) *
+Minima @ 14/03/2022 17:32:30 [5.1 MB] : * *
+Minima @ 14/03/2022 17:32:30 [5.1 MB] : **********************************************
+```
+
+
+
+
+{/*
+
+
+
+The following start up parameters can optionally be specified when starting your node.
+
+To add/remove parameters after a node has been started, you must `quit` the node and restart it, adding/removing the required parameters.
+
+`[]` square brackets indicate where an input is required, **the brackets should not be included**.
+
+General
+
+- `-clean` : CAREFUL! Clears existing data, starts a new fresh node. All coins will be lost.
+- `-port [port]` : specify the initial port for Minima to use. Range used will be the specified port +4. Default is 9001-9005.
+- `-host [ipaddress]` : specify the host IP
+- `-dbpassword [yourdbpassword]` : Main Wallet / SQL AES password - MUST be specified on first launch. CANNOT be changed later.
+- `-allowallip` : Allow all IPs for Maxima / Networking. Local IPs won't be allowed otherwise.
+- `-archive` : Run an Archive node - store all archive data / the cascade to allow for resyncs from this node
+- `-daemon` : Run in daemon mode with no stdin input (if running Minima as a background service)
+- `-isclient` : Tells the P2P System that this node can't accept incoming connections
+- `-server` : Use Server settings - this node can accept incoming connections
+- `-desktop` : Use Desktop settings - this node can't accept incoming connections
+
+Folders
+
+- `- data` : the data folder where all the config files for this node are stored. Default is a hidden .minima folder under the user's home directory. If you want to specify a folder not in the user's home directory, you must use the complete path.
+- `-basefolder` : specify a default file creation / backup / restore folder. Default is the user's home directory. Can be the same as the data folder provided.
+
+MiniDapp System (mds)
+
+- `-mdsenable` : enable the MiniDapp System (default port 9003)
+- `-mdspassword [yourmdspassword]` : specify the mds login password
+- `-mdsinit [foldername/path]` : specify a folder of miniDAPPs
+- `-mdswrite [minidapp]` : give an initial miniDAPP WRITE access
+
+RPC
+
+- `-rpcenable` : enable remote procedure call
+- `-rpcssl` : use Self Signed SSL cert to run RPC
+- `-rpcpassword [yourrpcpassword]` : set Basic Auth password for RPC calls ( Use with SSL / stunnel ). Only secure if used with SSL.
+- `-rpcclrf` : use CRLF at the end of the RPC headers (NodeJS)
+
+Test nodes
+
+- `-genesis` : start the node from the genesis block (automatically uses -clean)
+- `-test` : uses test parameters e.g. faster block times
+- `-connect [ip:port,ip:port]` : Disable the automatic P2P system and create your own network by manually connecting to this list of host:port
+- `-nop2p` : Disable the automatic P2P system
+- `-noconnect` : Stops the P2P system from connecting to other nodes until it has been connected to
+- `-nosyncibd` : Do not sync IBD (for testing)
+
+Mobile
+
+- `-mobile` : Sets this device to a mobile device - used for metrics only
+- `-limitbandwidth` : Limit the amount sent for archive sync
+- `-noshutdownhook` : Do not use the shutdown hook (Android)
+
+Debugging
+
+- `-p2p-log-level-info` : Set the P2P log level to info
+- `-p2p-log-level-debug` : Set the P2P log level to debug
+
+Help
+
+- `-showparams` : Show relevant startup params on launch
+- `-help` : print help for the start up parameters
+
+
+
+
+
+ */}
+
+
+## Secure your Node
+
+
+
+
+
+
+{/*
+ */}
+
+
+{/*
+### Setting the Terminal permissions to WRITE
+
+
+ If your prefer to use the Terminal MiniDapp to execute all commands, you will
+ need to set the permissions to WRITE see below.
+
+
+1. Login to your MiniDapp hub and install the Terminal MiniDapp from the [MiniDapp site](https://minidapps.minima.global/)
+2. Return to your desktop command line/terminal and run the `mds` command again (see above) to list your MiniDapps and check their existing permissions
+3. You will see the Terminal MiniDapp listed, **copy the uid from YOUR node**
+
+Run the following command in the Command line/Terminal where the Minima logs are running, pasting in YOUR uid:
+
+```bash title="Terminal"
+mds action:permission uid:0x02FA22EF2A2A3B0FA01D688A902779E5 trust:write
+```
+
+You may now use the Terminal MiniDapp to execute all commands. You will no longer need to use your desktop command line interface/Terminal. */}
+
+
+## How to update your node
+
+1. Type `quit` into the Command prompt/Terminal window where the Minima logs are running
+2. Download the latest version of Minima from the [Minima GitHub releases page](https://github.com/minima-global/Minima/releases) and replace the existing minima.jar file with the latest version
+3. Restart Minima as above
+
+
+ To create a fresh install of a node -clean can be added on to the end of the
+ start up command DO NOT use -clean if you are simply restarting your node,
+ your coins will be wiped and you will only be able to recover them from a
+ backup! e.g. java -jar C:\Users\Username\Downloads\minima.jar -mdsenable
+ -clean
+
+
+## How to remove your node
+
+
+ Removing a node without taking a backup will result in losing access to your coins. Only
+ remove a node if you have taken a backup or written down your 24 word seed phrase.
+
+
+1. Type `quit` into the Command prompt/Terminal window where the Minima logs are running
+2. Delete the minima.jar file you downloaded
+3. Remove the minima database files located in your home directory or the directory you specified at startup with the `-data` parameter (you may need to show hidden files)
+
+Once your node running, you will need to [join the network](/docs/user-guides/join-the-network).
+
+## Additional Resources
+
+
+
+
\ No newline at end of file
diff --git a/content/docs/run-a-node/docker-desktop.mdx b/content/docs/run-a-node/docker-desktop.mdx
index 4475130..867b572 100644
--- a/content/docs/run-a-node/docker-desktop.mdx
+++ b/content/docs/run-a-node/docker-desktop.mdx
@@ -1,373 +1,373 @@
----
-title: Docker Desktop
-description: Run a Minima node on Docker Desktop
-tag: run-a-node
----
-
-Docker is an open-source software platform that simplifies the process of running, testing and managing applications. It uses the operating system of the computer on which it's installed to provide an independent computing environment for an application to run on.
-
-## Start a new Minima node
-
-
-
-
-### Install Docker Desktop
-
-
- Download and install Docker Desktop from the [Docker website](https://docs.docker.com/desktop/).
-
-
-
-
-
-
- ### Run Docker Desktop on startup
-
-Once installed, set Docker to start when your computer turns on - launch Docker and click on the **Settings** icon in the top right. Under **General**, select **Start Docker Desktop when you log in**, then click **Apply & Restart**.
-
-
-
-
-
-### Docker container
-
-Open a new terminal/command line window and start a docker container for your
-Minima node by pasting the following into your command line window
-
-import { Tab, Tabs } from "fumadocs-ui/components/tabs"
-
-
-
-
-```bash
-docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_desktop=true -v ~/minimadocker9001:/home/minima/data -p 9001-9003:9001-9003 --restart unless-stopped --name minima9001 minimaglobal/minima:latest
-```
-
-
-
- ```bash
- docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_desktop=true -v C:\Users\INSERTUSERNAME\minimadocker9001:/home/minima/data -p 9001-9003:9001-9003 --restart unless-stopped --name minima9001 minimaglobal/minima:latest
- ```
-
-
-
-
-
-
-
-
- - `-d` - Daemon mode, Minima will run in the background
- - `-e minima_mdspassword=INSERTPASSWORD` - Sets the password to login to your node
- - `-e minima_desktop=true` - Sets your node type as a desktop node that does not receive incoming connections
- - `-v ~/minimadocker9001:/home/minima/data` - Maps the Minima data directory to a local directory
- - `-p 9001-9003:9001-9003` - Maps the Minima ports to the host machine
- - `--restart unless-stopped` - Restarts the container if it stops
- - `--name minima9001` - Names the container
- - `minimaglobal/minima:latest` - The Minima image to run
-
-
-The following start up parameters can optionally be specified when starting your Docker node.
-
-
- To add/remove parameters after a node has been started, you must stop and
- remove your minima9001 Docker container, then start it again, adding/removing
- the required parameters in front of `-v ~/minimadocker9001:/home/minima/data`.
- As long as you use the same minimadocker8001 folder, your previous node will
- be preserved but will use different parameters.
-
-import {Heading} from 'fumadocs-ui/components/heading';
-
-General
-
-- `-e minima_clean=true` - **CAREFUL!** Clears existing data, starts a new fresh node. All coins will be lost.
-- `e minima_host=ipaddress` - specify the host IP
-- `minima_dbpassword=yourdbpassword` - Main Wallet / SQL AES password - MUST be specified on first launch. CANNOT be changed later.
-- `minima_allowallip=true` - Allow all IPs for Maxima / Networking. Local IPs won't be allowed otherwise.
-- `minima_archive=true` - Run an Archive node - store all archive data / the cascade to allow for resyncs from this node
-- `minima_isclient=true` - Tells the P2P System that this node can't accept incoming connections
-- `minima_server=true` - Use Server settings - this node can accept incoming connections
-- `minima_desktop=true` - Use Desktop settings - this node can't accept incoming connections
-- `minima_connect=ip:port` - Disable the automatic P2P system and create your own network by manually connecting to this list of host:port
-
-MiniDapp System (MDS)
-
-- `-e minima_mdsenable=true/false` - enable the MiniDapp System (default port 9003). Enabled by default.
-- `-e minima_mdspassword=yourmdspassword` - specify the mds login password
-
-RPC
-
-- `-e minima_rpcenable=true/false` - enable remote procedure call. Disabled by default.
-- `-e minima_rpcssl=true` - use Self Signed SSL cert to run RPC
-- `-e minima_rpcpassword=yourrpcpassword` - set Basic Auth password for RPC calls ( Use with SSL / stunnel ). Only secure if used with SSL.
-- `-e minima_rpcclrf=true` - use CRLF at the end of the RPC headers (NodeJS)
-
-Help
-
-- `-e minima_showparams=true` - Show relevant startup params on launch
-- `-e minima_help=true` - print help for the start up parameters
-
-
-
-
-
-You will notice a container in Docker called minima9001, this is running your Minima node.
-
-
-
-
-
-### Check your node is running
-
-Click on **minima9001** and check the logs tab and ensure your node has started up.
-
-
-
-
-
-
-
-
-
-Your node is now installed & running!
-
-To ensure your node updates automatically when a new version of Minima is released, continue to start a Watchtower container.
-
-## Automate updates with Watchtower
-
-A Watchtower container enables automatic updates of your Minima node when a new version is released. It will pull down the latest Minima image and restart the node using the same parameters you initially specified.
-
-Create the Watchtower container by running the following command from your terminal/command line interface.
-
-```bash title="Terminal"
-docker run -d --restart unless-stopped --name watchtower -e WATCHTOWER_CLEANUP=true -e WATCHTOWER_TIMEOUT=60s -e WATCHTOWER_POLL_INTERVAL=28800 -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
-```
-
-
- This will update ALL containers you have running in Docker, to restrict it to
- your Minima container only, add the container name of your Minima node to the
- end of the command. You can specify multiple containers by listing the names
- separated by a space. For more details, see the [Docker
- documentation](https://containrrr.dev/watchtower/arguments/)
-
-
-You will see the Watchtower in Docker.
-
-
-
-Every 8 hours, the Watchtower will check whether there is a new version of Minima and will update if so.
-
-Optionally, to run a one time update on demand, you can start a watchtower container that you can run whenever you wish to check for updates.
-
-```bash title="Terminal"
-docker run --name watchtower_runonce -e WATCHTOWER_CLEANUP=true -e WATCHTOWER_TIMEOUT=60s -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once
-```
-
-## Login to your node
-
-
-
-
-
-Login
-
-To login to your node, open a web browser and navigate to [`http://localhost:9001`](`http://localhost:9001`) .
-
-
- The first time accessing your Minima node, you may need to pass through the
- security warning as Minima uses self-signed certificates. Learn how
- [here](https://www.vultr.com/docs/how-to-bypass-the-https-warning-for-self-signed-ssl-tls-certificates/).
-
-
-You will see the login screen for your node.
-
-
-
-
-
-
-
-Enter your password
-
-Enter the password you set when starting your Minima node to login.
-
-
- To check your password, click on the name of your Minima node (e.g.
- minima9001) in Docker desktop. On the **Inspect** tab, check the parameter for
- **mdspassword**.
-
-
-Please see the [first steps](#first-steps) to complete now your node is running.
-
-
-
-
-
-
-## First steps
-
-The first time you install Minima, you will need to
-
-- Connect to the network
-- Write down your seed phrase
-
-
- For more information on how to connect to the network and secure your node,
- please refer to [User Guides](/docs/user-guides/jointhenetwork).
-
-
-## FAQ
-
-
-
-
-You can use the Docker CLI/Terminal to interact with your node, for example to check your status, balance, password, incentive program setup or to create a backup. This requires enabling RPC.
-
-To permanently enable RPC, stop and delete the container - this will not delete your data files - then start a new container with the following parameters:
-
-```bash title="Terminal"
-docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_desktop=true -e minima_rpcenable=true -v ~/minimadocker9001:/home/minima/data -p 9001-9003:9001-9003 --restart unless-stopped --name minima9001 minimaglobal/minima:latest
-```
-
-Alternatively, to temporarily enable RPC:
-
-- Click on the minima9001 container and select the Terminal tab.
-- Run the following command to enable RPC:
-
-```bash title="Terminal"
-/bin/bash
-nano minima.config
-```
-
-
-
-- Scroll to the bottom of the file and add a new line, insert rpcenable=true.
-
-Example:
-
-```bash title="Terminal"
-data=/home/minima/data/.minima/
-mdsenable=true
-basefolder=/home/minima/data/
-daemon=true
-rpcenable=true
-```
-
-- Exit by pressing ctrl+x together, then save the file with y
-- Exit the container with `exit`
-- Restart the container using the Restart icon in the top right
-- Once restarted, from the Terminal tab type `minima` and press Enter, you will see the Minima RPC client where you can enter any Minima command. To see a complete list of commands, type `help`.
-
-
-
-
- RPC will be disabled the next time your docker container is updated to a new
- version.
-
-
-
-
-
- To check your login password, click on the name of the container and check the Inspect tab. The `mdspassword` parameter is your login password
-
-To change your password, stop and remove your minima9001 container and restart it with a different password.
-
-1. From the Containers screen, stop and remove the minima9001 container
-
-
-
-2. 2. Repeat step 3 and 4 from [Start a new Minima node using Docker](#start-a-new-minima-node), with a different password.
-
-
-
-Deleting the container will not delete the minimadocker9001 data folder so your coins will be safe during this process.When starting the new container, you must use the same **minimadocker9001** folder to ensure your coins and data are restored.
-
-
-
-
-
- To run a second node in Docker, you can create another container using
- different port numbers, file path and name.
-
-To create a node on port 8001:
-
-
-
-
-```bash
-docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_desktop=true -v ~/minimadocker8001:/home/minima/data -p 8001-8003:9001-9003 --restart unless-stopped --name minima8001 minimaglobal/minima:latest
-```
-
-
-
- ```bash
-docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_desktop=true -v C:\Users\INSERTUSERNAME\minimadocker9001:/home/minima/data -p 8001-8003:9001-9003 --restart unless-stopped --name minima9001 minimaglobal/minima:latest
- ```
-
-
-
-
-Access your second node by going to https://127.0.0.1:8003/
-
-
-
-
-
-
- Removing a container does not remove your minima data files - these are stored
- in the minimadocker9001 folder in your home directory. Deleting the
- minimadocker9001 folder without taking a backup will result in losing your
- coins.
-
-
-To remove a Docker node, stop and delete the minima9001 container.
-
-
-
-To start the same node with new startup parameters, reuse the minimadocker9001 directory in the startup line.
-
-To start a new, clean node, delete the minimadocker9001 folder in your home directory or specify a different when starting the container.
-
-
-
-
-
+---
+title: Docker Desktop
+description: Run a Minima node on Docker Desktop
+tag: run-a-node
+---
+
+Docker is an open-source software platform that simplifies the process of running, testing and managing applications. It uses the operating system of the computer on which it's installed to provide an independent computing environment for an application to run on.
+
+## Start a new Minima node
+
+
+
+
+### Install Docker Desktop
+
+
+ Download and install Docker Desktop from the [Docker website](https://docs.docker.com/desktop/).
+
+
+
+
+
+
+ ### Run Docker Desktop on startup
+
+Once installed, set Docker to start when your computer turns on - launch Docker and click on the **Settings** icon in the top right. Under **General**, select **Start Docker Desktop when you log in**, then click **Apply & Restart**.
+
+
+
+
+
+### Docker container
+
+Open a new terminal/command line window and start a docker container for your
+Minima node by pasting the following into your command line window
+
+import { Tab, Tabs } from "fumadocs-ui/components/tabs"
+
+
+
+
+```bash
+docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_desktop=true -v ~/minimadocker9001:/home/minima/data -p 9001-9003:9001-9003 --restart unless-stopped --name minima9001 minimaglobal/minima:latest
+```
+
+
+
+ ```bash
+ docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_desktop=true -v C:\Users\INSERTUSERNAME\minimadocker9001:/home/minima/data -p 9001-9003:9001-9003 --restart unless-stopped --name minima9001 minimaglobal/minima:latest
+ ```
+
+
+
+
+
+
+
+
+ - `-d` - Daemon mode, Minima will run in the background
+ - `-e minima_mdspassword=INSERTPASSWORD` - Sets the password to login to your node
+ - `-e minima_desktop=true` - Sets your node type as a desktop node that does not receive incoming connections
+ - `-v ~/minimadocker9001:/home/minima/data` - Maps the Minima data directory to a local directory
+ - `-p 9001-9003:9001-9003` - Maps the Minima ports to the host machine
+ - `--restart unless-stopped` - Restarts the container if it stops
+ - `--name minima9001` - Names the container
+ - `minimaglobal/minima:latest` - The Minima image to run
+
+
+The following start up parameters can optionally be specified when starting your Docker node.
+
+
+ To add/remove parameters after a node has been started, you must stop and
+ remove your minima9001 Docker container, then start it again, adding/removing
+ the required parameters in front of `-v ~/minimadocker9001:/home/minima/data`.
+ As long as you use the same minimadocker8001 folder, your previous node will
+ be preserved but will use different parameters.
+
+import {Heading} from 'fumadocs-ui/components/heading';
+
+General
+
+- `-e minima_clean=true` - **CAREFUL!** Clears existing data, starts a new fresh node. All coins will be lost.
+- `e minima_host=ipaddress` - specify the host IP
+- `minima_dbpassword=yourdbpassword` - Main Wallet / SQL AES password - MUST be specified on first launch. CANNOT be changed later.
+- `minima_allowallip=true` - Allow all IPs for Maxima / Networking. Local IPs won't be allowed otherwise.
+- `minima_archive=true` - Run an Archive node - store all archive data / the cascade to allow for resyncs from this node
+- `minima_isclient=true` - Tells the P2P System that this node can't accept incoming connections
+- `minima_server=true` - Use Server settings - this node can accept incoming connections
+- `minima_desktop=true` - Use Desktop settings - this node can't accept incoming connections
+- `minima_connect=ip:port` - Disable the automatic P2P system and create your own network by manually connecting to this list of host:port
+
+MiniDapp System (MDS)
+
+- `-e minima_mdsenable=true/false` - enable the MiniDapp System (default port 9003). Enabled by default.
+- `-e minima_mdspassword=yourmdspassword` - specify the mds login password
+
+RPC
+
+- `-e minima_rpcenable=true/false` - enable remote procedure call. Disabled by default.
+- `-e minima_rpcssl=true` - use Self Signed SSL cert to run RPC
+- `-e minima_rpcpassword=yourrpcpassword` - set Basic Auth password for RPC calls ( Use with SSL / stunnel ). Only secure if used with SSL.
+- `-e minima_rpcclrf=true` - use CRLF at the end of the RPC headers (NodeJS)
+
+Help
+
+- `-e minima_showparams=true` - Show relevant startup params on launch
+- `-e minima_help=true` - print help for the start up parameters
+
+
+
+
+
+You will notice a container in Docker called minima9001, this is running your Minima node.
+
+
+
+
+
+### Check your node is running
+
+Click on **minima9001** and check the logs tab and ensure your node has started up.
+
+
+
+
+
+
+
+
+
+Your node is now installed & running!
+
+To ensure your node updates automatically when a new version of Minima is released, continue to start a Watchtower container.
+
+## Automate updates with Watchtower
+
+A Watchtower container enables automatic updates of your Minima node when a new version is released. It will pull down the latest Minima image and restart the node using the same parameters you initially specified.
+
+Create the Watchtower container by running the following command from your terminal/command line interface.
+
+```bash title="Terminal"
+docker run -d --restart unless-stopped --name watchtower -e WATCHTOWER_CLEANUP=true -e WATCHTOWER_TIMEOUT=60s -e WATCHTOWER_POLL_INTERVAL=28800 -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
+```
+
+
+ This will update ALL containers you have running in Docker, to restrict it to
+ your Minima container only, add the container name of your Minima node to the
+ end of the command. You can specify multiple containers by listing the names
+ separated by a space. For more details, see the [Docker
+ documentation](https://containrrr.dev/watchtower/arguments/)
+
+
+You will see the Watchtower in Docker.
+
+
+
+Every 8 hours, the Watchtower will check whether there is a new version of Minima and will update if so.
+
+Optionally, to run a one time update on demand, you can start a watchtower container that you can run whenever you wish to check for updates.
+
+```bash title="Terminal"
+docker run --name watchtower_runonce -e WATCHTOWER_CLEANUP=true -e WATCHTOWER_TIMEOUT=60s -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once
+```
+
+## Login to your node
+
+
+
+
+
+Login
+
+To login to your node, open a web browser and navigate to [`http://localhost:9001`](`http://localhost:9001`) .
+
+
+ The first time accessing your Minima node, you may need to pass through the
+ security warning as Minima uses self-signed certificates. Learn how
+ [here](https://www.vultr.com/docs/how-to-bypass-the-https-warning-for-self-signed-ssl-tls-certificates/).
+
+
+You will see the login screen for your node.
+
+
+
+
+
+
+
+Enter your password
+
+Enter the password you set when starting your Minima node to login.
+
+
+ To check your password, click on the name of your Minima node (e.g.
+ minima9001) in Docker desktop. On the **Inspect** tab, check the parameter for
+ **mdspassword**.
+
+
+Please see the [first steps](#first-steps) to complete now your node is running.
+
+
+
+
+
+
+## First steps
+
+The first time you install Minima, you will need to
+
+- Connect to the network
+- Write down your seed phrase
+
+
+ For more information on how to connect to the network and secure your node,
+ please refer to [User Guides](/docs/user-guides/join-the-network).
+
+
+## FAQ
+
+
+
+
+You can use the Docker CLI/Terminal to interact with your node, for example to check your status, balance, password, incentive program setup or to create a backup. This requires enabling RPC.
+
+To permanently enable RPC, stop and delete the container - this will not delete your data files - then start a new container with the following parameters:
+
+```bash title="Terminal"
+docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_desktop=true -e minima_rpcenable=true -v ~/minimadocker9001:/home/minima/data -p 9001-9003:9001-9003 --restart unless-stopped --name minima9001 minimaglobal/minima:latest
+```
+
+Alternatively, to temporarily enable RPC:
+
+- Click on the minima9001 container and select the Terminal tab.
+- Run the following command to enable RPC:
+
+```bash title="Terminal"
+/bin/bash
+nano minima.config
+```
+
+
+
+- Scroll to the bottom of the file and add a new line, insert rpcenable=true.
+
+Example:
+
+```bash title="Terminal"
+data=/home/minima/data/.minima/
+mdsenable=true
+basefolder=/home/minima/data/
+daemon=true
+rpcenable=true
+```
+
+- Exit by pressing ctrl+x together, then save the file with y
+- Exit the container with `exit`
+- Restart the container using the Restart icon in the top right
+- Once restarted, from the Terminal tab type `minima` and press Enter, you will see the Minima RPC client where you can enter any Minima command. To see a complete list of commands, type `help`.
+
+
+
+
+ RPC will be disabled the next time your docker container is updated to a new
+ version.
+
+
+
+
+
+ To check your login password, click on the name of the container and check the Inspect tab. The `mdspassword` parameter is your login password
+
+To change your password, stop and remove your minima9001 container and restart it with a different password.
+
+1. From the Containers screen, stop and remove the minima9001 container
+
+
+
+2. 2. Repeat step 3 and 4 from [Start a new Minima node using Docker](#start-a-new-minima-node), with a different password.
+
+
+
+Deleting the container will not delete the minimadocker9001 data folder so your coins will be safe during this process.When starting the new container, you must use the same **minimadocker9001** folder to ensure your coins and data are restored.
+
+
+
+
+
+ To run a second node in Docker, you can create another container using
+ different port numbers, file path and name.
+
+To create a node on port 8001:
+
+
+
+
+```bash
+docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_desktop=true -v ~/minimadocker8001:/home/minima/data -p 8001-8003:9001-9003 --restart unless-stopped --name minima8001 minimaglobal/minima:latest
+```
+
+
+
+ ```bash
+docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_desktop=true -v C:\Users\INSERTUSERNAME\minimadocker9001:/home/minima/data -p 8001-8003:9001-9003 --restart unless-stopped --name minima9001 minimaglobal/minima:latest
+ ```
+
+
+
+
+Access your second node by going to https://127.0.0.1:8003/
+
+
+
+
+
+
+ Removing a container does not remove your minima data files - these are stored
+ in the minimadocker9001 folder in your home directory. Deleting the
+ minimadocker9001 folder without taking a backup will result in losing your
+ coins.
+
+
+To remove a Docker node, stop and delete the minima9001 container.
+
+
+
+To start the same node with new startup parameters, reuse the minimadocker9001 directory in the startup line.
+
+To start a new, clean node, delete the minimadocker9001 folder in your home directory or specify a different when starting the container.
+
+
+
+
+
diff --git a/content/docs/run-a-node/system-requirements.mdx b/content/docs/run-a-node/firewall-rules.mdx
similarity index 71%
rename from content/docs/run-a-node/system-requirements.mdx
rename to content/docs/run-a-node/firewall-rules.mdx
index 2e61d02..2de3a8e 100644
--- a/content/docs/run-a-node/system-requirements.mdx
+++ b/content/docs/run-a-node/firewall-rules.mdx
@@ -1,130 +1,126 @@
----
-title: System Requirements
-description: Learn about the system requirements for running a Minima node
-icon: BatteryFull
-tag: run-a-node
----
-
-Minima is a lightweight blockchain that can be run on any Android device (version 9 or above), general purpose computer or server (VPS).
-
-There is no minimum amount of Minima coins required to run a node.
-
-The following information is for Server or Desktop users.
-
-## Minimum hardware requirement
-
-The following requirements are separate to any specs required for non Minima related processes. GPU is not necessary.
-
-### Standard full node
-
-
- High MiniDapp usage may require higher availability of Storage
-
-
-- Processing: 2 CPU
-- Memory: 2GB RAM
-- Storage: 2GB storage
-
-
- Processing, memory and storage require 4 CPU, 4GB RAM and 4GB storage if using
- Docker.
-
-
-### Archive node
-
-- Processing: 2 CPU (4 CPU if using Docker)
-- Memory: 4GB RAM
-- Storage: 5GB storage
-
-
- Minimum requirements for storage may change over time.
-
-
-### Mega node
-
-- Processing: 2 CPU
-- Memory: 8GB RAM
-- Storage: 5GB storage
-
-
- We do not recommend running a Mega node from an Android device as the RAM
- consumption is considerably higher than a standard node.
-
-
-The Mega node must be online constantly to remain in sync with the chain. Downtime of less than 24 hours is acceptable.
-
-## Ports used
-
-By default, Minima reserves ports `9001-9005`, although an alternate 5-port range can be chosen by specifying a different main port on start up e.g. 8001.
-
-```bash title="Terminal"
-java -jar minima.jar -port 8001
-```
-
-
- If specifying a different main port e.g. 8001, the port range used will be the
- next consecutive 4 ports. e.g 8001-8005.
-
-
-- **9001 TCP (main port):** The main Minima port, for peer-to-peer communication over Minima and Maxima
-- **9002 TCP(or main port +1):** Not currently used
-- **9003 TCP(or main port +2):** MiniDapp System (MDS) Web Server
-- **9004 TCP(or main port +3):** No longer used after v 1.0.37
-- **9005 TCP(or main port +4):** JSON-RPC over HTTP
-
-Desktop nodes are not required to configure any port forwarding to use Minima.
-
-## Recommended Firewall settings (VPS users)
-
-
- If using Docker to run your node on a VPS, you must not rely on UFW as your
- firewall, Docker will overwrite UFW firewall rules. You must use your VPS
- provider's firewall manager.
-
-
-After configuring your firewall, you should check they are enforced as expected.
-
-### Ingress
-
-All inbound connections should be denied by default.
-
-**22 tcp:** allow all
-
-Allows ssh access to the server, optionally only allow this from your home IP address.
-
-**9001 tcp:** allow all
-
-
- Allowing inbound connections on port 9001 will ensure your node acts as a
- relay node. Relay nodes are the backbone of the Minima peer-to-peer network
- that faciliate the transmission of transactions and blocks across the network
- and support the network to scale. If your inbound connection is closed, your
- node will only make outgoing connections and will not act as a relay node.
-
-
-**9003 tcp:**
-
-- if enabling the MiniDapp system, **allow only from your home IP address**
-- if running Minima headlessly, **deny inbound connections**
-
-
- If your home IP is dynamic, you will need to maintain this firewall rule to
- your latest IP. If you choose to allow inbound connections from anywhere, your
- login screen will be public facing, so your login password (mdspassword) must
- be long and secure, using a combination of lowercase, uppercase letters
- numbers and symbols.
-
-
-**9002 tcp (not in use):** deny all
-
-**9004 tcp (not in use):** deny all
-
-**9005 tcp (RPC port):**
-
-- deny all, or
-- if you want to `curl` into the node remotely, ensure this is **only allowed inbound from your home IP address. You should only do this if you are an advanced user and understand the risks!**
-
-
- Opening port 9005 is extremely risky as it exposes your node and seed phrase
- if you have not set a [secure password for RPC access](/docs/run-a-node/linux-vps-system#rpc-client-setup).
-
+---
+title: Firewall Rules
+description: Learn about the port and firewall requirements for running a Minima node
+icon: MonitorCog
+tag: run-a-node
+---
+
+The following information is for Server and Desktop users.
+
+{/*
+## Minimum hardware requirement
+
+The following requirements are separate to any specs required for non Minima related processes. GPU is not necessary.
+
+### Standard full node
+
+
+ High MiniDapp usage may require higher availability of Storage
+
+
+- Processing: 2 CPU
+- Memory: 2GB RAM
+- Storage: 2GB storage
+
+
+ Processing, memory and storage require 4 CPU, 4GB RAM and 4GB storage if using
+ Docker.
+
+
+### Archive node
+
+- Processing: 2 CPU (4 CPU if using Docker)
+- Memory: 4GB RAM
+- Storage: 5GB storage
+
+
+ Minimum requirements for storage may change over time.
+
+
+### Mega node
+
+- Processing: 2 CPU
+- Memory: 8GB RAM
+- Storage: 5GB storage
+
+
+ We do not recommend running a Mega node from an Android device as the RAM
+ consumption is considerably higher than a standard node.
+
+
+The Mega node must be online constantly to remain in sync with the chain. Downtime of less than 24 hours is acceptable. */}
+
+## Ports used
+
+By default, Minima reserves ports `9001-9005`, although an alternate 5-port range can be chosen by specifying a different main port on start up e.g. 8001. If specifying a different main port, the port range used will be the next consecutive 4 ports. e.g 8001-8005.
+
+```bash title="Terminal"
+java -jar minima.jar -port 8001
+```
+
+- **9001 TCP (main port):** The main Minima port, for peer-to-peer communication over Minima and Maxima
+- **9002 TCP (or main port +1):** Not currently used
+- **9003 TCP (or main port +2):** MiniDapp System (MDS) Web Server
+- **9004 TCP (or main port +3):** No longer used after v 1.0.37
+- **9005 TCP (or main port +4):** JSON-RPC over HTTP
+
+## Relaying
+
+To ensure your node faciliates the relaying of transactions and blocks across the network, you should allow inbound connections to the server on port 9001 (or other main port you have chosen). Relay nodes are the backbone of the Minima peer-to-peer network. If your inbound connection is closed, your node will still function but will only make outgoing connections and will not act as a relay node.
+
+Desktop nodes can contribute to relaying transactions and blocks by setting up port forwarding on port 9001, however this is not usually recommended for home networks.
+
+## Recommended Firewall settings (VPS users)
+
+
+ If using Docker to run your node on a VPS, you must not rely on UFW as your
+ firewall, Docker will overwrite UFW firewall rules. You must use your VPS
+ provider's firewall manager.
+
+
+After configuring your firewall, you should check they are enforced as expected.
+
+### Ingress
+
+All inbound connections should be denied by default.
+
+**22 tcp:** allow all
+
+Allows ssh access to the server, optionally only allow this from your home IP address.
+
+**9001 tcp:** allow all
+
+
+ Allowing inbound connections on port 9001 will ensure your node acts as a
+ relay node. Relay nodes are the backbone of the Minima peer-to-peer network
+ that faciliate the transmission of transactions and blocks across the network
+ and support the network to scale. If your inbound connection is closed, your
+ node will only make outgoing connections and will not act as a relay node.
+
+
+**9003 tcp:**
+
+- if enabling the MiniDapp system, **allow only from your home IP address**
+- if running Minima headlessly, **deny inbound connections**
+
+
+ If your home IP is dynamic, you will need to maintain this firewall rule to
+ your latest IP. If you choose to allow inbound connections from anywhere, your
+ login screen will be public facing, so your login password (mdspassword) must
+ be long and secure, using a combination of lowercase, uppercase letters
+ numbers and symbols.
+
+
+**9002 tcp (not in use):** deny all
+
+**9004 tcp (not in use):** deny all
+
+**9005 tcp (RPC port):**
+
+- deny all, or
+- if you want to `curl` into the node remotely, ensure this is **only allowed inbound from your home IP address. You should only do this if you are an advanced user and understand the risks!**
+
+
+ Opening port 9005 is extremely risky as it exposes your node and seed phrase
+ if you have not set a [secure password for RPC access](/docs/run-a-node/linux-vps-service#rpc-client-setup).
+
diff --git a/content/docs/run-a-node/index.mdx b/content/docs/run-a-node/index.mdx
index 037a8ed..8199582 100644
--- a/content/docs/run-a-node/index.mdx
+++ b/content/docs/run-a-node/index.mdx
@@ -1,157 +1,169 @@
----
-title: Quick Start
-description: Install and run a Minima node
-icon: Zap
-tag: run-a-node
----
-
-## CLI
-
-At it's core, Minima is a Java application. So on a server or CLI the easiest way to run Minima is to install Java and download the latest minima.jar.
-
-
- You can download the latest version of Minima from the [Minima GitHub releases
- page](https://github.com/minima-global/Minima/releases).
-
-The latest version is `v1.0.41`.
-
-
-
-To run Minima, you need to have Java installed on your system. You can check if you have Java installed by running the following command in your terminal:
-
-```bash title="Terminal"
-java -version
-```
-
-
- If you don't have Java installed, you can download it from the [Java
- website](https://www.java.com/en/download/).
-
-
-
-
-
-
-Navigate to the directory where you downloaded the Minima jar
-
-```bash title="Terminal"
-cd /path/to/minima.jar
-```
-
-
-
-
-Run Minima
- ```bash title="Terminal"
- java -jar minima.jar
-```
-
-
- When you first run Minima the first thing you need is to add some connections.
-
-You can get this list by asking any user on the network.
-
-Alternatively, copy this link directly into the app when prompted to join the network (also in Settings > 'Add connections')
-
-[https://spartacusrex.com/minimapeers.txt](https://spartacusrex.com/minimapeers.txt)
-
-
-
-
-
-## Android
-
-The next simplest way is to install and run the Android app.
-
-
-
-
-
-
- If you cannot use the Google Playstore, you can download a signed APK from [Github](https://github.com/minima-global/Minima/tree/master/jar).
-
-
-## Desktop
-
-For Desktop users Minima can be launched from a JNLP file.. The Java Network Launch Protocol.
-
-
-
-
-
-Install Open Web Start
-
-First install [Open Web Start](https://openwebstart.com/download/) - the new updated version of Java Web Start.
-
-
-
-
-
-Download the Minima JNLP file
-
-Download the [Minima JNLP](https://www.spartacusrex.com/javaws/minima.jnlp) file and open / double-click it to install Minima as an application. A desktop shortcut will be created for you and you will be shown a security warning, select Run.
-
-
-
-
-
-### Mac & Windows
-Further guidance can be found [here](/docs/run-a-node/mac) for Mac and [here](/docs/run-a-node/windows) for Windows.
-
-## Docker
-
-
-
-
-
-Set a secure password
-
-There is also a nice docker image that you can use if you have Docker installed. Set a secure password below.
-
-```bash title="Terminal"
-docker run -d -e minima_mdspassword=INSERTYOURPASSWORD -e minima_desktop=true -v ~/minimadocker:/home/minima/data -p 9001-9003:9001-9003 --restart unless-stopped --name minima minimaglobal/minima:latest
-```
-
-
-
-
-
-Log into your node
-
-
-
-Then you log into your node via https://127.0.0.1:9003/
-
-Further guidance on starting a node in Docker desktop can be found [here](/docs/run-a-node/docker-desktop)
-
-
-
-
-
-## Next Steps
-
-
-
-
-
-
-
-
-
+---
+title: Quick Start
+description: Install and run a Minima node
+icon: Zap
+tag: run-a-node
+---
+
+## Android
+
+The simplest way is to install and run the Android app.
+
+
+
+
+
+
+ If you cannot use the Google Playstore, you can download a signed APK from [Github](https://github.com/minima-global/Minima/tree/master/jar).
+
+
+
+## Desktop
+
+Desktop users can launch Minima from a JNLP file. The Java Network Launch Protocol.
+
+
+
+
+
+Install Open Web Start
+
+First, download and install [Open Web Start](https://openwebstart.com/download/).
+
+
+
+
+
+Download the Minima JNLP file
+
+Download the [Minima JNLP](https://www.spartacusrex.com/javaws/minima.jnlp) file and open / double-click it to install Minima as an application. A desktop shortcut will be created for you and you will be shown a security warning, select Run.
+
+To ensure that Minima is always launched with Open Web Start, you may need to right-click > open with... and choose Open Web Start. If possible, choose "always".
+
+
+
+
+
+### Mac & Windows
+Further guidance can be found [here](/docs/run-a-node/mac) for Mac and [here](/docs/run-a-node/windows) for Windows.
+
+## CLI
+
+At it's core, Minima is a Java application. So on a server or CLI the easiest way to run Minima is to install Java and download the latest minima.jar.
+
+
+ You can download the latest version of Minima from the [Minima GitHub releases
+ page](https://github.com/minima-global/Minima/releases).
+
+
+
+To run Minima, you need to have Java installed on your system. You can check if you have Java installed by running the following command in your terminal:
+
+```bash title="Terminal"
+java -version
+```
+
+
+ If you don't have Java installed, you can download it from the [Java
+ website](https://www.java.com/en/download/).
+
+
+
+
+
+
+Navigate to the directory where you saved the Minima jar
+
+```bash title="Terminal"
+cd /path/to/minima.jar
+```
+
+
+
+
+Run Minima
+
+Adding `-mdsenable -mdspassword INSERTPASSWORD` will enable the minidapp system.
+
+Adding `-p2p2nodes megammr.minima.global:9001` will automatically connect you to the peer-to-peer network.
+
+```bash title="Terminal"
+ java -jar minima.jar -data .minima -mdsenable -mdspassword INSERTPASSWORD
+```
+
+
+ When you first run Minima the first thing you need is to add some connections.
+
+You can get this list by asking any user on the network to share their connections or by running
+
+```
+peers action:addpeers peerslist:megammr.minima.global:9001
+```
+
+Alternatively, copy this link directly into the app when prompted to join the network (also in Settings > 'Add connections')
+
+[https://spartacusrex.com/minimapeers.txt](https://spartacusrex.com/minimapeers.txt)
+
+
+
+
+
+
+
+## Docker
+
+
+
+
+
+Start a new docker container
+
+There is also a nice docker image that you can use if you have Docker installed. Set a secure password below.
+
+```bash title="Terminal"
+docker run -d -e minima_mdspassword=INSERTYOURPASSWORD -e minima_desktop=true -v ~/minimadocker:/home/minima/data -p 9001-9003:9001-9003 --restart unless-stopped --name minima minimaglobal/minima:latest
+```
+
+
+
+
+
+Log into your node
+
+
+
+Then you log into your node via https://127.0.0.1:9003/
+
+Further guidance on starting a node in Docker desktop can be found [here](/docs/run-a-node/docker-desktop)
+
+
+
+
+
+## Next Steps
+
+
+
+
+
+
+
+
+
diff --git a/content/docs/run-a-node/linux-vps.mdx b/content/docs/run-a-node/linux-vps-docker.mdx
similarity index 95%
rename from content/docs/run-a-node/linux-vps.mdx
rename to content/docs/run-a-node/linux-vps-docker.mdx
index 1623988..307c881 100644
--- a/content/docs/run-a-node/linux-vps.mdx
+++ b/content/docs/run-a-node/linux-vps-docker.mdx
@@ -1,609 +1,609 @@
----
-title: Linux VPS (Docker)
-description: Run Minima on a Linux VPS using Docker
-tag: run-a-node
----
-
-import { Heading } from "fumadocs-ui/components/heading"
-
-We will be using Docker software to make running a Minima node simple. If you prefer not to use Docker, you can create a script to run [Minima as a service](/docs/run-a-node/linux-vps-system).
-
-Docker is an open-source software platform that simplifies the process of running, testing and managing applications. It uses the operating system of the computer on which it's installed to provide an independent computing environment for an application to run on.
-
-## Setup your Firewall
-
-If using Docker to run your node on a VPS, you must not rely on UFW as your firewall, Docker will overwrite UFW firewall rules. You must use your VPS provider's firewall manager.
-
-After configuring your firewall, you should check they are enforced as expected.
-For more information, see [Recommended Firewall settings (VPS users)](/docs/run-a-node/system-requirements#recommended-firewall-settings-vps-users).
-
-## Setting up your node
-
-
-
-
-### Minima User
-
-Log on as a non root user with sudo (admin) rights and add a new minima user, set a password and leave the remaining fields as default :
-
-```bash title="Terminal"
-sudo adduser minima
-```
-
-Confirm the new user with `y`
-
-
- Please make a note of the password you set for the minima user, you may have
- to login as this user later.
-
-
-
-
-
-
-
-
-### Permissions
-
-Give sudo (admin) permissions to the minima user :
-
-```bash title="Terminal"
-sudo usermod -aG sudo minima
-```
-
-
-
-After running the command, switch to the minima user :
-
-```bash title="Terminal"
-su - minima
-```
-
-
-
-
-
-
-### Download Docker
-
-Download Docker using the following command :
-
-```bash title="Terminal"
-sudo curl -fsSL https://get.docker.com/ -o get-docker.sh
-```
-
-
-
-
-
-
-### Install Docker
-
-Give the script permissions and run the installer for docker.
-
-```bash title="Terminal"
-sudo chmod +x ./get-docker.sh && ./get-docker.sh
-```
-
-
-
-
-
- This will take a few minutes to finish.
-
-
-
-
-
-
-### Add User
-
-Add the minima user to the docker group :
-
-```bash title="Terminal"
-sudo usermod -aG docker $USER
-```
-
-Once the user is added exit back to the original user :
-
-```bash title="Terminal"
-exit
-```
-
-And then switch back to the minima user to refresh the group :
-
-```bash title="Terminal"
-su - minima
-```
-
-
-
-
-
-
-
-### Start the container
-
-Set your password below to at least 12 characters using alphanumeric characters and symbols.
-
-
- Set your password below to at least 12 characters using alphanumeric
- characters and symbols.
-
-
-```bash title="Terminal"
-docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_server=true -v ~/minimadocker9001:/home/minima/data -p 9001:9001 -p 127.0.0.1:9003:9003 --restart unless-stopped --name minima9001 minimaglobal/minima:latest
-```
-
-
-
-
-
-
- - `-d` - Daemon mode, Minima will run in the background
- - `-e minima_mdspassword=INSERTPASSWORD` - Sets the password to login to your node
- - `-e minima_desktop=true` - Sets your node type as a desktop node that does not receive incoming connections
- - `-v ~/minimadocker9001:/home/minima/data` - Maps the Minima data directory to a local directory
- - `-p 9001-9003:9001-9003` - Maps the Minima ports to the host machine
- - `--restart unless-stopped` - Restarts the container if it stops
- - `--name minima9001` - Names the container
- - `minimaglobal/minima:latest` - The Minima image to run
-
-
-The following start up parameters can optionally be specified when starting your Docker node.
-
-
- To add/remove parameters after a node has been started, you must stop and
- remove your minima9001 Docker container, then start it again, adding/removing
- the required parameters in front of `-v ~/minimadocker9001:/home/minima/data`.
- As long as you use the same minimadocker8001 folder, your previous node will
- be preserved but will use different parameters.
-
-
-General
-
-- `-e minima_clean=true` - **CAREFUL!** Clears existing data, starts a new fresh node. All coins will be lost.
-- `e minima_host=ipaddress` - specify the host IP
-- `minima_dbpassword=yourdbpassword` - Main Wallet / SQL AES password - MUST be specified on first launch. CANNOT be changed later.
-- `minima_allowallip=true` - Allow all IPs for Maxima / Networking. Local IPs won't be allowed otherwise.
-- `minima_archive=true` - Run an Archive node - store all archive data / the cascade to allow for resyncs from this node
-- `minima_isclient=true` - Tells the P2P System that this node can't accept incoming connections
-- `minima_server=true` - Use Server settings - this node can accept incoming connections
-- `minima_desktop=true` - Use Desktop settings - this node can't accept incoming connections
-- `minima_connect=ip:port` - Disable the automatic P2P system and create your own network by manually connecting to this list of host:port
-
-MiniDapp System (MDS)
-
-- `-e minima_mdsenable=true/false` - enable the MiniDapp System (default port 9003). Enabled by default.
-- `-e minima_mdspassword=yourmdspassword` - specify the mds login password
-
-RPC
-
-- `-e minima_rpcenable=true/false` - enable remote procedure call. Disabled by default.
-- `-e minima_rpcssl=true` - use Self Signed SSL cert to run RPC
-- `-e minima_rpcpassword=yourrpcpassword` - set Basic Auth password for RPC calls ( Use with SSL / stunnel ). Only secure if used with SSL.
-- `-e minima_rpcclrf=true` - use CRLF at the end of the RPC headers (NodeJS)
-
-Help
-
-- `-e minima_showparams=true` - Show relevant startup params on launch
-- `-e minima_help=true` - print help for the start up parameters
-
-
-
-
-
-
-
-
-
-
-
-### Ensure Docker starts up automatically
-
-Ensure Docker starts up automatically when the server starts :
-
-```bash title="Terminal"
-sudo systemctl enable docker.service
-```
-
-```bash title="Terminal"
-sudo systemctl enable containerd.service
-```
-
-
-
-
-
-Your node is now installed & running!
-
-Congratulations! Your Node is up and running. Continue to [install the Watchtower](#automate-updates-with-watchtower) to automatically update Minima.
-
-
-## Automate updates with Watchtower
-
-1. Start a Watchtower container to **automatically update Minima when a new version is available.**
-```bash title="Terminal"
-docker run -d --restart unless-stopped --name watchtower -e WATCHTOWER_CLEANUP=true -e WATCHTOWER_TIMEOUT=60s -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
-```
-Every 24 hours, the Watchtower will check whether there is a new version of Minima and will update if so.
-
-
-
-2. Check that Minima and the Watchtower containers are running
-
-```bash title="Terminal"
-docker ps -a
-```
-
-This will show all running and stopped (Exited) containers.
-
-Next, access your MiniDapp hub and secure your node.
-
-
-## Login to your node
-
-
-
-
-
-Login
-
-To login to your node, open a web browser and navigate to [`http://localhost:9001`](`http://localhost:9001`) .
-
-
- The first time accessing your Minima node, you may need to pass through the
- security warning as Minima uses self-signed certificates. Learn how
- [here](https://www.vultr.com/docs/how-to-bypass-the-https-warning-for-self-signed-ssl-tls-certificates/).
-
-
-You will see the login screen for your node.
-
-
-
-
-
-
-
-Enter your password
-
-Enter the password you set when starting your Minima node to login.
-
-
- To check your password, click on the name of your Minima node (e.g.
- minima9001) in Docker desktop. On the **Inspect** tab, check the parameter for
- **mdspassword**.
-
-
-Please see the [first steps](#first-steps) to complete now your node is running.
-
-
-
-
-
-
-## First steps
-
-The first time you install Minima, you will need to
-
-- Connect to the network
-- Write down your seed phrase
-
-
- For more information on how to connect to the network and secure your node,
- please refer to [User Guides](/docs/user-guides/jointhenetwork).
-
-
-
-## FAQ
-
-
-
-
-The following commands can be run from your server command line, logged in as the minima user.
-
-- `docker logs minima9001` - View the logs
-- `docker stop minima9001` - Stop the container
-- `docker start minima9001` - Start the container
-- `docker restart minima9001` - Restart the container
-- `docker ps -a` - List all containers (Running and stopped)
-- `docker ps` - List containers (Running only)
-- `docker stop minima9001 minima8001 minima7001` - Stop containers listed
-- `docker rm minima9001 minima8001 minima7001` - Remove listed containers
-- `docker --help` - Help
-
-
-
-
-
-To change the password to login to your MiniDapp System (MDS), you must stop and remove your **minima9001** container and restart it with a different password.
-
-1. Stop and remove the **minima9001** container:
-
-```bash title="Terminal"
-docker stop minima9001
-docker rm minima9001
-```
-
-2. Repeat step 6 from [Start your node,](#start-your-node) with a different password. Your password should be at least 12 characters using alphanumeric characters and symbols
-
-
-Deleting the container will not delete the **minimadocker9001** data folder so your coins will be safe during this process.
-
-When starting the new container, you must use the same **minimadocker9001** folder to ensure your coins and data are restored.
-
-
-
-
-
-
- To create a private test node from Genesis on ports 10001-10003, use the following start up command.
-
-```bash title="Terminal"
-docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_server=true -e minima_genesis=true -e minima_test=true -e minima_nop2p=true -v ~/minimadocker10001_dev:/home/minima/data -p 10001-10003:9001-9003 --restart unless-stopped --name minima10001_dev minimaglobal/minima:latest
-```
-
-The additional test parameters used are:
-
-- `-p 10001-10003:9001-9003` : Local ports 10001-10003 will be forwarded to 9001-9003 on Docker.
-- `-e minima_genesis=true` : Start a node from the Genesis block
-- `-e minima_test=true` : Use test parameters e.g. blocks are automined and block times are faster
-- `-e minima_nop2p=true` : Do not start the p2p system
-
-
-
-
-
-
- Only enable RPC if you understand the risks and have appropriate firewalls in
- place to prevent unauthorised access to your node!
-
-
-By default Minima is installed on ports 9001-9005. The default RPC port is 9005.
-
-If enabling RPC by opening the 9005 port, use the following additional parameters and set an RPC password for connecting over RPC on the start up line. You will only be able to use RPC commands if SSH'd into the server.
-
-```bash title="Terminal"
--e minima_rpcpassword=INSERTRPCPASSWORD -p 9001-9003:9001-9003 -p 127.0.0.1:9005:9005
-```
-
-Example:
-
-```bash title="Terminal"
-docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_rpcpassword=INSERTRPCPASSWORD -e minima_server=true -v ~/minimadocker9001:/home/minima/data -p 9001-9003:9001-9003 -p 127.0.0.1:9005:9005 --restart unless-stopped --name minima9001 minimaglobal/minima:latest
-```
-
-On a second node running on ports 8001-8005, this would be:
-
-```bash title="Terminal"
-docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_rpcpassword=INSERTRPCPASSWORD -e minima_server=true -v ~/minimadocker8001:/home/minima/data -p 8001-8003:9001-9003 -p 127.0.0.1:8005:9005 --restart unless-stopped --name minima8001 minimaglobal/minima:latest
-```
-
- Accessing the Minima RPC client via Docker
-
-To access the Minima Terminal via Docker, you must add your RPC password:
-
-```bash title="Terminal"
-docker exec -it minima9001 minima -password YOURRPCPASSWORD
-```
-
-Curl commands
-
-You can send commands to your Minima node using curl to the RPC port.
-
-To install curl: `sudo apt install curl` then `y`
-
-For improved formatting: `sudo apt install jq` then `y`
-
-Example:
-
-To check the status of your Minima node when logged on to the server:
-
-```bash title="Terminal"
-curl -k -u minima:INSERTRPCPASSWORD 127.0.0.1:9005/status | jq
-```
-
-You will see the current block and other information about your node.
-
-To show the full list of commands:
-
-```bash title="Terminal"
-curl -k -u minima:INSERTRPCPASSWORD 127.0.0.1:9005/help | jq
-```
-
-However, if you wish to check your node from an external computer, you must use SSH with each command.
-
-```bash title="Terminal"
-ssh root@YourServerIP curl -k -u minima:INSERTRPCPASSWORD 127.0.0.1:9005/status
-```
-
-**Each request will also require your server password.**
-
-
-
-
- To run a second node in Docker, you can create another container using
- different port numbers, file path and name.
-
-To create a node on port 8001:
-
-```bash title="Terminal"
-docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_desktop=true -v ~/minimadocker8001:/home/minima/data -p 8001-8003:9001-9003 --restart unless-stopped --name minima8001 minimaglobal/minima:latest
-```
-
-Access your second node by going to **https://YourServerIP:8003/**
-
-
-
-
-
-1. Login to your server as the minima user.
-2. Access your Docker container by running the following command:
-
-```bash title="Terminal"
-docker exec -it minima9001 /bin/bash
-```
-
-3. Edit the minima.config file:
-
-```bash title="Terminal"
-nano minima.config
-```
-
-4. Scroll to the bottom of the file and find the line Scroll to the bottom of the file and add a new line, insert `rpcenable=true`.
-
-Example:
-
-```bash title="Terminal"
-data=/home/minima/data/.minima/
-mdsenable=true
-basefolder=/home/minima/data/
-daemon=true
-rpcenable=true
-```
-
-5. Exit by pressing `ctrl+x` together, then save the file with `y`
-
-6. Exit the container with `exit`
-
-7. Restart the container with :
-
-```bash title="Terminal"
-docker restart minima9001
-```
-
-8. Now you should be able to access your node's terminal by running the following command:
-
-```bash title="Terminal"
-docker exec -it minima9001 /bin/bash
-```
-
-
-
-9. By running the `mds` command it will show details about the MiniDapp System (MDS) including your password and the MiniDapps installed on your node.
-
-
-
-
-
- RPC will be disabled the next time your docker container is updated to a new
- version, to enable RPC permanently, see [How to enable RPC (advanced
- users)](/rpc)
-
-
-
-
-
-
-
- Removing a node without taking a backup will delete all your coins! Only
- remove a node if you have taken a backup or are running a test node.
-
-
-To remove a Docker node:
-
-1. Login as the minima user to your server and stop and remove the **minima9001** container:
-
-```bash title="Terminal"
-docker stop minima9001
-docker rm minima9001
-```
-
-2. Delete the minimadocker9001 folder from your home directory by running
-
-```bash title="Terminal"
-sudo rm -rf minimadocker9001
-```
-
-
-
-
-You can send commands to your Minima node using curl to the RPC port.
-
-To install curl:
-`sudo apt install curl` then `y`
-
-For improved formatting:
-`sudo apt install jq` then `y`
-
-Example:
-
-To check the status of your Minima node when logged on to the server:
-
-```bash title="Terminal"
-curl -k -u minima:INSERTRPCPASSWORD 127.0.0.1:9005/status | jq
-```
-
-You will see the current block and other information about your node.
-
-To show the full list of commands:
-```bash title="Terminal"
-curl -k -u minima:INSERTRPCPASSWORD 127.0.0.1:9005/help | jq
-```
-
-However, if you wish to check your node from an external computer, you must use SSH with each command.
-
-```bash title="Terminal"
-ssh root@YourServerIP curl -k -u minima:INSERTRPCPASSWORD 127.0.0.1:9005/status
-```
-
-Each request will also require your server password.
-
-
-
-For help and support, find us in [Discord](https://discord.com/invite/minimaglobal) or [Telegram](https://t.me/Minima_Global).
+---
+title: Linux VPS (Docker)
+description: Run Minima on a Linux VPS using Docker
+tag: run-a-node
+---
+
+import { Heading } from "fumadocs-ui/components/heading"
+
+We will be using Docker software to make running a Minima node simple. If you prefer not to use Docker, you can create a script to run [Minima as a service](/docs/run-a-node/linux-vps-service).
+
+Docker is an open-source software platform that simplifies the process of running, testing and managing applications. It uses the operating system of the computer on which it's installed to provide an independent computing environment for an application to run on.
+
+## Setup your Firewall
+
+If using Docker to run your node on a VPS, you must not rely on UFW as your firewall, Docker will overwrite UFW firewall rules. You must use your VPS provider's firewall manager.
+
+After configuring your firewall, you should check they are enforced as expected.
+For more information, see [Recommended Firewall settings (VPS users)](/docs/run-a-node/firewall-rules).
+
+## Setting up your node
+
+
+
+
+### Minima User
+
+Log on as a non root user with sudo (admin) rights and add a new minima user, set a password and leave the remaining fields as default :
+
+```bash title="Terminal"
+sudo adduser minima
+```
+
+Confirm the new user with `y`
+
+
+ Please make a note of the password you set for the minima user, you may have
+ to login as this user later.
+
+
+
+
+
+
+
+
+### Permissions
+
+Give sudo (admin) permissions to the minima user :
+
+```bash title="Terminal"
+sudo usermod -aG sudo minima
+```
+
+
+
+After running the command, switch to the minima user :
+
+```bash title="Terminal"
+su - minima
+```
+
+
+
+
+
+
+### Download Docker
+
+Download Docker using the following command :
+
+```bash title="Terminal"
+sudo curl -fsSL https://get.docker.com/ -o get-docker.sh
+```
+
+
+
+
+
+
+### Install Docker
+
+Give the script permissions and run the installer for docker.
+
+```bash title="Terminal"
+sudo chmod +x ./get-docker.sh && ./get-docker.sh
+```
+
+
+
+
+
+ This will take a few minutes to finish.
+
+
+
+
+
+
+### Add User
+
+Add the minima user to the docker group :
+
+```bash title="Terminal"
+sudo usermod -aG docker $USER
+```
+
+Once the user is added exit back to the original user :
+
+```bash title="Terminal"
+exit
+```
+
+And then switch back to the minima user to refresh the group :
+
+```bash title="Terminal"
+su - minima
+```
+
+
+
+
+
+
+
+### Start the container
+
+Set your password below to at least 12 characters using alphanumeric characters and symbols.
+
+
+ Set your password below to at least 12 characters using alphanumeric
+ characters and symbols.
+
+
+```bash title="Terminal"
+docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_server=true -v ~/minimadocker9001:/home/minima/data -p 9001:9001 -p 127.0.0.1:9003:9003 --restart unless-stopped --name minima9001 minimaglobal/minima:latest
+```
+
+
+
+
+
+
+ - `-d` - Daemon mode, Minima will run in the background
+ - `-e minima_mdspassword=INSERTPASSWORD` - Sets the password to login to your node
+ - `-e minima_desktop=true` - Sets your node type as a desktop node that does not receive incoming connections
+ - `-v ~/minimadocker9001:/home/minima/data` - Maps the Minima data directory to a local directory
+ - `-p 9001-9003:9001-9003` - Maps the Minima ports to the host machine
+ - `--restart unless-stopped` - Restarts the container if it stops
+ - `--name minima9001` - Names the container
+ - `minimaglobal/minima:latest` - The Minima image to run
+
+
+The following start up parameters can optionally be specified when starting your Docker node.
+
+
+ To add/remove parameters after a node has been started, you must stop and
+ remove your minima9001 Docker container, then start it again, adding/removing
+ the required parameters in front of `-v ~/minimadocker9001:/home/minima/data`.
+ As long as you use the same minimadocker8001 folder, your previous node will
+ be preserved but will use different parameters.
+
+
+General
+
+- `-e minima_clean=true` - **CAREFUL!** Clears existing data, starts a new fresh node. All coins will be lost.
+- `e minima_host=ipaddress` - specify the host IP
+- `minima_dbpassword=yourdbpassword` - Main Wallet / SQL AES password - MUST be specified on first launch. CANNOT be changed later.
+- `minima_allowallip=true` - Allow all IPs for Maxima / Networking. Local IPs won't be allowed otherwise.
+- `minima_archive=true` - Run an Archive node - store all archive data / the cascade to allow for resyncs from this node
+- `minima_isclient=true` - Tells the P2P System that this node can't accept incoming connections
+- `minima_server=true` - Use Server settings - this node can accept incoming connections
+- `minima_desktop=true` - Use Desktop settings - this node can't accept incoming connections
+- `minima_connect=ip:port` - Disable the automatic P2P system and create your own network by manually connecting to this list of host:port
+
+MiniDapp System (MDS)
+
+- `-e minima_mdsenable=true/false` - enable the MiniDapp System (default port 9003). Enabled by default.
+- `-e minima_mdspassword=yourmdspassword` - specify the mds login password
+
+RPC
+
+- `-e minima_rpcenable=true/false` - enable remote procedure call. Disabled by default.
+- `-e minima_rpcssl=true` - use Self Signed SSL cert to run RPC
+- `-e minima_rpcpassword=yourrpcpassword` - set Basic Auth password for RPC calls ( Use with SSL / stunnel ). Only secure if used with SSL.
+- `-e minima_rpcclrf=true` - use CRLF at the end of the RPC headers (NodeJS)
+
+Help
+
+- `-e minima_showparams=true` - Show relevant startup params on launch
+- `-e minima_help=true` - print help for the start up parameters
+
+
+
+
+
+
+
+
+
+
+
+### Ensure Docker starts up automatically
+
+Ensure Docker starts up automatically when the server starts :
+
+```bash title="Terminal"
+sudo systemctl enable docker.service
+```
+
+```bash title="Terminal"
+sudo systemctl enable containerd.service
+```
+
+
+
+
+
+Your node is now installed & running!
+
+Congratulations! Your Node is up and running. Continue to [install the Watchtower](#automate-updates-with-watchtower) to automatically update Minima.
+
+
+## Automate updates with Watchtower
+
+1. Start a Watchtower container to **automatically update Minima when a new version is available.**
+```bash title="Terminal"
+docker run -d --restart unless-stopped --name watchtower -e WATCHTOWER_CLEANUP=true -e WATCHTOWER_TIMEOUT=60s -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
+```
+Every 24 hours, the Watchtower will check whether there is a new version of Minima and will update if so.
+
+
+
+2. Check that Minima and the Watchtower containers are running
+
+```bash title="Terminal"
+docker ps -a
+```
+
+This will show all running and stopped (Exited) containers.
+
+Next, access your MiniDapp hub and secure your node.
+
+
+## Login to your node
+
+
+
+
+
+Login
+
+To login to your node, open a web browser and navigate to [`http://localhost:9001`](`http://localhost:9001`) .
+
+
+ The first time accessing your Minima node, you may need to pass through the
+ security warning as Minima uses self-signed certificates. Learn how
+ [here](https://www.vultr.com/docs/how-to-bypass-the-https-warning-for-self-signed-ssl-tls-certificates/).
+
+
+You will see the login screen for your node.
+
+
+
+
+
+
+
+Enter your password
+
+Enter the password you set when starting your Minima node to login.
+
+
+ To check your password, click on the name of your Minima node (e.g.
+ minima9001) in Docker desktop. On the **Inspect** tab, check the parameter for
+ **mdspassword**.
+
+
+Please see the [first steps](#first-steps) to complete now your node is running.
+
+
+
+
+
+
+## First steps
+
+The first time you install Minima, you will need to
+
+- Connect to the network
+- Write down your seed phrase
+
+
+ For more information on how to connect to the network and secure your node,
+ please refer to [User Guides](/docs/user-guides/join-the-network).
+
+
+
+## FAQ
+
+
+
+
+The following commands can be run from your server command line, logged in as the minima user.
+
+- `docker logs minima9001` - View the logs
+- `docker stop minima9001` - Stop the container
+- `docker start minima9001` - Start the container
+- `docker restart minima9001` - Restart the container
+- `docker ps -a` - List all containers (Running and stopped)
+- `docker ps` - List containers (Running only)
+- `docker stop minima9001 minima8001 minima7001` - Stop containers listed
+- `docker rm minima9001 minima8001 minima7001` - Remove listed containers
+- `docker --help` - Help
+
+
+
+
+
+To change the password to login to your MiniDapp System (MDS), you must stop and remove your **minima9001** container and restart it with a different password.
+
+1. Stop and remove the **minima9001** container:
+
+```bash title="Terminal"
+docker stop minima9001
+docker rm minima9001
+```
+
+2. Repeat step 6 from [Start your node,](#start-your-node) with a different password. Your password should be at least 12 characters using alphanumeric characters and symbols
+
+
+Deleting the container will not delete the **minimadocker9001** data folder so your coins will be safe during this process.
+
+When starting the new container, you must use the same **minimadocker9001** folder to ensure your coins and data are restored.
+
+
+
+
+
+
+ To create a private test node from Genesis on ports 10001-10003, use the following start up command.
+
+```bash title="Terminal"
+docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_server=true -e minima_genesis=true -e minima_test=true -e minima_nop2p=true -v ~/minimadocker10001_dev:/home/minima/data -p 10001-10003:9001-9003 --restart unless-stopped --name minima10001_dev minimaglobal/minima:latest
+```
+
+The additional test parameters used are:
+
+- `-p 10001-10003:9001-9003` : Local ports 10001-10003 will be forwarded to 9001-9003 on Docker.
+- `-e minima_genesis=true` : Start a node from the Genesis block
+- `-e minima_test=true` : Use test parameters e.g. blocks are automined and block times are faster
+- `-e minima_nop2p=true` : Do not start the p2p system
+
+
+
+
+
+
+ Only enable RPC if you understand the risks and have appropriate firewalls in
+ place to prevent unauthorised access to your node!
+
+
+By default Minima is installed on ports 9001-9005. The default RPC port is 9005.
+
+If enabling RPC by opening the 9005 port, use the following additional parameters and set an RPC password for connecting over RPC on the start up line. You will only be able to use RPC commands if SSH'd into the server.
+
+```bash title="Terminal"
+-e minima_rpcpassword=INSERTRPCPASSWORD -p 9001-9003:9001-9003 -p 127.0.0.1:9005:9005
+```
+
+Example:
+
+```bash title="Terminal"
+docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_rpcpassword=INSERTRPCPASSWORD -e minima_server=true -v ~/minimadocker9001:/home/minima/data -p 9001-9003:9001-9003 -p 127.0.0.1:9005:9005 --restart unless-stopped --name minima9001 minimaglobal/minima:latest
+```
+
+On a second node running on ports 8001-8005, this would be:
+
+```bash title="Terminal"
+docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_rpcpassword=INSERTRPCPASSWORD -e minima_server=true -v ~/minimadocker8001:/home/minima/data -p 8001-8003:9001-9003 -p 127.0.0.1:8005:9005 --restart unless-stopped --name minima8001 minimaglobal/minima:latest
+```
+
+ Accessing the Minima RPC client via Docker
+
+To access the Minima Terminal via Docker, you must add your RPC password:
+
+```bash title="Terminal"
+docker exec -it minima9001 minima -password YOURRPCPASSWORD
+```
+
+Curl commands
+
+You can send commands to your Minima node using curl to the RPC port.
+
+To install curl: `sudo apt install curl` then `y`
+
+For improved formatting: `sudo apt install jq` then `y`
+
+Example:
+
+To check the status of your Minima node when logged on to the server:
+
+```bash title="Terminal"
+curl -k -u minima:INSERTRPCPASSWORD 127.0.0.1:9005/status | jq
+```
+
+You will see the current block and other information about your node.
+
+To show the full list of commands:
+
+```bash title="Terminal"
+curl -k -u minima:INSERTRPCPASSWORD 127.0.0.1:9005/help | jq
+```
+
+However, if you wish to check your node from an external computer, you must use SSH with each command.
+
+```bash title="Terminal"
+ssh root@YourServerIP curl -k -u minima:INSERTRPCPASSWORD 127.0.0.1:9005/status
+```
+
+**Each request will also require your server password.**
+
+
+
+
+ To run a second node in Docker, you can create another container using
+ different port numbers, file path and name.
+
+To create a node on port 8001:
+
+```bash title="Terminal"
+docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_desktop=true -v ~/minimadocker8001:/home/minima/data -p 8001-8003:9001-9003 --restart unless-stopped --name minima8001 minimaglobal/minima:latest
+```
+
+Access your second node by going to **https://YourServerIP:8003/**
+
+
+
+
+
+1. Login to your server as the minima user.
+2. Access your Docker container by running the following command:
+
+```bash title="Terminal"
+docker exec -it minima9001 /bin/bash
+```
+
+3. Edit the minima.config file:
+
+```bash title="Terminal"
+nano minima.config
+```
+
+4. Scroll to the bottom of the file and find the line Scroll to the bottom of the file and add a new line, insert `rpcenable=true`.
+
+Example:
+
+```bash title="Terminal"
+data=/home/minima/data/.minima/
+mdsenable=true
+basefolder=/home/minima/data/
+daemon=true
+rpcenable=true
+```
+
+5. Exit by pressing `ctrl+x` together, then save the file with `y`
+
+6. Exit the container with `exit`
+
+7. Restart the container with :
+
+```bash title="Terminal"
+docker restart minima9001
+```
+
+8. Now you should be able to access your node's terminal by running the following command:
+
+```bash title="Terminal"
+docker exec -it minima9001 /bin/bash
+```
+
+
+
+9. By running the `mds` command it will show details about the MiniDapp System (MDS) including your password and the MiniDapps installed on your node.
+
+
+
+
+
+ RPC will be disabled the next time your docker container is updated to a new
+ version, to enable RPC permanently, see [How to enable RPC (advanced
+ users)](/rpc)
+
+
+
+
+
+
+
+ Removing a node without taking a backup will delete all your coins! Only
+ remove a node if you have taken a backup or are running a test node.
+
+
+To remove a Docker node:
+
+1. Login as the minima user to your server and stop and remove the **minima9001** container:
+
+```bash title="Terminal"
+docker stop minima9001
+docker rm minima9001
+```
+
+2. Delete the minimadocker9001 folder from your home directory by running
+
+```bash title="Terminal"
+sudo rm -rf minimadocker9001
+```
+
+
+
+
+You can send commands to your Minima node using curl to the RPC port.
+
+To install curl:
+`sudo apt install curl` then `y`
+
+For improved formatting:
+`sudo apt install jq` then `y`
+
+Example:
+
+To check the status of your Minima node when logged on to the server:
+
+```bash title="Terminal"
+curl -k -u minima:INSERTRPCPASSWORD 127.0.0.1:9005/status | jq
+```
+
+You will see the current block and other information about your node.
+
+To show the full list of commands:
+```bash title="Terminal"
+curl -k -u minima:INSERTRPCPASSWORD 127.0.0.1:9005/help | jq
+```
+
+However, if you wish to check your node from an external computer, you must use SSH with each command.
+
+```bash title="Terminal"
+ssh root@YourServerIP curl -k -u minima:INSERTRPCPASSWORD 127.0.0.1:9005/status
+```
+
+Each request will also require your server password.
+
+
+
+For help and support, find us in [Discord](https://discord.com/invite/minimaglobal) or [Telegram](https://t.me/Minima_Global).
diff --git a/content/docs/run-a-node/linux-vps-system.mdx b/content/docs/run-a-node/linux-vps-service.mdx
similarity index 94%
rename from content/docs/run-a-node/linux-vps-system.mdx
rename to content/docs/run-a-node/linux-vps-service.mdx
index 47d695c..1d317b1 100644
--- a/content/docs/run-a-node/linux-vps-system.mdx
+++ b/content/docs/run-a-node/linux-vps-service.mdx
@@ -1,735 +1,735 @@
----
-title: Linux VPS (Systemd service)
-description: Run Minima on a Linux VPS
-tag: run-a-node
----
-
-
-Running a node on a server and allowing inbound connections on port 9001 will ensure your node acts as a **relay node**.
-
-Relay nodes are the backbone of the Minima peer-to-peer network that faciliate the transmission of transactions and blocks across the network and support the network to scale.
-
-Installing Minima as a background process with SystemD is an alternative to using Docker. SystemD is a daemon server that enables applications to run as background processes.
-
-The following instructions assume your server is using **Debian OS with no existing installations.**
-
-For more information, see [System Requirements.](/docs/run-a-node/system-requirements)
-
-## Firewall setup
-
-Before starting, please ensure your server firewall rules:
-
-- Do not allow any inbound (Ingress) traffic from anywhere.
-- Allow ssh connections (inbound on port 22)
-
-Once your node is running, you should open port 9001 from anywhere and, if you are enabling minidapps, 9003 from your home IP.
-
-We highly recommend using the default Firewall manager for your server. Alternatively to use Uncomplicated Firewall (UFW), see the instructions below.
-
-
-
-
-After configuring your firewall, you should check they are enforced as expected.
-
- Ingress
-All inbound connections except for SSH should be denied by default.
-
-Inbound connections from all IPs can be allowed for
-
-- **9001 tcp**: Allowing inbound connections on port 9001 ensures your node acts as a relay node. Relay nodes are the backbone of the Minima peer-to-peer network that faciliate the transmission of transactions and blocks across the network and support the network to scale. If your inbound connection is closed, your node will only make outgoing connections and will not act as a relay node.
-
-Inbound connections from **all IPs** should be **denied** to:
-
-- **9003 tcp** : if not enabling the MiniDapp system (i.e. you are using Minima headlessly)
-- **9002 tcp** : Port not in use
-- **9004 tcp** : Port not in use
-- **9005 tcp**: RPC Port
-
-Inbound connections from your **HOME IP** can be **allowed** for
-
-- **22 tcp** : Allows SSH access to the server, we recommend only allowing this from your home IP address but ensure that you can update this if your home IP dynamically changes, otherwise you could be locked out.
-- **9003 tcp**: if you intend to enable the MiniDapp system. If your home IP is dynamic, you will need to maintain this firewall rule to your latest IP. If you choose to allow inbound connections from anywhere, your login screen will be public facing, so your login password (mdspassword) must be long and secure, using a combination of lowercase, uppercase letters numbers and symbols.
-- **9005 tcp**: RPC Port - ADVANCED USERS ONLY!
-
-
- Opening port 9005 is __extremely risky__ as it exposes your node and seed
- phrase if you have not [set a secure password for RPC
- access](#rpc-client-setup).
-
-
-To `curl` into the node remotely, ensure this is **only allowed inbound from your home IP address**. **You should only do this if you are an advanced user and understand the risks!**
-
-
-
-
-
- If using **Docker** to run your node on a VPS, you **must not rely on UFW** as
- your firewall, Docker will overwrite UFW firewall rules. You must use your VPS
- provider's firewall manager.
-
-
-As a user with sudo privileges:
-
-
-
-
- Creat a minima user
-
-```bash title="Terminal"
- sudo apt install ufw
-```
-
-
-
- Run the commands
-
-This will disable the firewall, deny incoming connections, accept outgoing connections, allow ssh and enable the firewall.
-
-```bash title="Terminal"
- sudo ufw disable
-```
-
-```bash title="Terminal"
- sudo ufw default deny incoming
-```
-
-```bash title="Terminal"
- sudo ufw default allow outgoing
-```
-
-**DO NOT SKIP THE FOLLOWING STEP, OR YOU WILL BE LOCKED OUT OF YOUR SERVER!**
-
-```bash title="Terminal"
- sudo ufw allow ssh
-```
-
-
-
-
- Allow inbound connections to 9001
-
-```bash title="Terminal"
- sudo ufw allow in 9001
-```
-
-
-
-
-
-Allow inbound connections to your MiniDapp system only from your home IP addresss
-
-
-
-
-Note that most home IP addresses are not fixed and change, so you may have to redo this rule at a later date. You can find your home IP address by going to [ipchicken](https://ipchicken.com/) when connected to your home wifi network.
-
-Replace `xxx.xxx.xxx` with your actual home IP address
-
-
-
-```bash title="Terminal"
- sudo ufw allow from xxx.xxx.xxx to any port 9003
-```
-
-or to allow connections to your MiniDapp system from anywhere. **This will expose your login screen publicly.**
-
-```bash title="Terminal"
- sudo ufw allow in 9003
-```
-
-
-
-
-
-Enable the firewall
-
-```bash title="Terminal"
- sudo ufw enable
-```
-
-For more information see [here](https://wiki.debian.org/Uncomplicated%20Firewall%20%28ufw%29)
-
-
-
-
-
-
-
-
-## Setup Minima as a systemd service
-
-### Server installations
-
-
-
- As a user with sudo privileges, install the following:
-
-```bash title="Terminal"
- sudo apt update -y
- sudo apt upgrade -y
- sudo apt install jq -y
- sudo apt install default-jdk -y
- sudo apt install wget -y
-```
-
-- `sudo apt update -y`: Updates the package list to the latest version.
-- `sudo apt upgrade -y`: Upgrades all the installed packages to their latest versions.
-- `sudo apt install jq -y`: Installs `jq`, a lightweight and flexible command-line JSON processor.
-- `sudo apt install default-jdk -y`: Installs the default Java Development Kit (JDK).
-- `sudo apt install wget -y`: Installs `wget`, a utility for non-interactive download of files from the web.
-
-
-
-
-As a user with sudo privileges, install the following:
-
-```bash title="Terminal"
- sudo yum update -y
- sudo yum install jq -y
- sudo yum install java-1.8.0-openjdk-devel -y
- sudo yum install wget nano -y
-```
-
-- `sudo yum update -y`: Updates the package list to the latest version.
-- `sudo yum install jq -y`: Installs `jq`, a lightweight and flexible command-line JSON processor.
-- `sudo yum install java-1.8.0-openjdk-devel -y`: Installs the Java Development Kit (JDK) version 1.8.0.
-- `sudo yum install wget -y`: Installs `wget`, a utility for non-interactive download of files from the web.
-
-
-
-
-
-### Minima node setup
-
-
-
-
- Create a minima user
-
-```bash title="Terminal"
- sudo adduser minima
-```
-
-Set a password for the user and confirm it, leave all other settings blank by pressing enter, then y to confirm.** Make sure to remember this user's password!**
-
-
-
-
- Setup journal logs service
-
-```bash title="Terminal"
- sudo tee </dev/null /etc/systemd/journald.conf
- Storage=persistent
- EOF
-```
-
-
-
-
- Restart the service
-
-```bash title="Terminal"
- sudo systemctl restart systemd-journald
-```
-
-
-
-
- Create the Minima systemd file
-
-
-
-
-
-
- Edit the file to change the password, use the arrow keys to go to
- `yourpasswordhere` and set a secure password of over 12
- characters using `a-z, A-Z, 0-9 and !@#=?+><,.-_'()/` symbols only.
-
-
-```bash title="Terminal"
- sudo tee </dev/null /etc/systemd/system/minima.service
- [Unit]
- Description=minima
- [Service]
- User=minima
- Type=simple
- ExecStart=/usr/bin/java -jar /home/minima/minima.jar -mdsenable -mdspassword yourpasswordhere -daemon -basefolder /home/minima -data /home/minima/.minima
- Restart=always
- RestartSec=100
- [Install]
- WantedBy=multi-user.target
- EOF
-```
-
-
-
-
-The following will create a systemd service file for a headless node (no Minidapps).
-
-```bash title="Terminal"
- sudo tee </dev/null /etc/systemd/system/minima.service
- [Unit]
- Description=minima
- [Service]
- User=minima
- Type=simple
- ExecStart=/usr/bin/java -jar /home/minima/minima.jar -rpcenable -rpcpassword INSERTRPCPASSWORD -rpcssl -daemon -basefolder /home/minima -data /home/minima/.minima
- Restart=always
- RestartSec=100
- [Install]
- WantedBy=multi-user.target
- EOF
-```
-
-
-
-
-
-To reopen the file if required:
-
-```bash title="Terminal"
- sudo nano /etc/systemd/system/minima.service
-```
-
-use `ctrl-X` then `Y` then press enter to save changes.
-
-
-
-
- Navigate to home directory
-
-```bash title="Terminal"
- sudo su minima
-```
-
-```bash title="Terminal"
- cd /home/minima
-```
-
-
-
-
- Download the minima jar file from Github
-
-```bash title="Terminal"
- wget https://github.com/minima-global/Minima/raw/master/jar/minima.jar
-```
-
-Exit back to your user
-
-```bash title="Terminal"
- exit
-```
-
-
-
-
- Reload the services
-
-```bash title="Terminal"
- sudo systemctl daemon-reload
-```
-
-
-
-
- Enable and start the minima service
-
-```bash title="Terminal"
- sudo systemctl enable minima
-```
-
-```bash title="Terminal"
- sudo systemctl start minima
-```
-
-
-
-
- View the logs to see your node starting up
-
-```bash title="Terminal"
- sudo journalctl -u minima -f
-```
-
-`Ctrl+C will exit the log stream`
-
-
-
-
-
-
-**Congratulations, your node is now running!**
-
-Now that your node is running, you can setup the RPC client to interact with your node headlessly.
-
-
-To interact with your node headlessly, bypassing the MiniDapp system, you can setup the RPC client as below. Otherwise, skip to [preparing for future releases](#prepare-for-future-releases)
-
-
-#### RPC client setup
-
-
-
- Start the Minima RPC Client
-
-
- Enter a password over 12 characters using `a-z, A-Z, 0-9 and !@#=?+><,.-_'()/` symbols only.
-
-
-```bash title="Terminal"
- java -cp /home/minima/minima.jar org.minima.utils.MinimaRPCClient -password yourrpcpassword -host https://127.0.0.1:9005
-```
-
-Write the file using `ctrl-X` then confirm with `Y`
-
-
-
-
-
- Permissions
-
-```bash title="Terminal"
- sudo chmod +x ./minima
-```
-
-
-
-
- Run the script
-
-```bash title="Terminal"
- ./minima
-```
-
-
-
-
-You can run any Minima commands here.
-
-Type `block` then enter to return your top block. `status` will return details about your node.
-
-Type `help` to see a list of all commands and `help command:` to see detailed help for any command.
-
-
-
-
-To exit the Terminal, type `exit`.
-
-**Do not type `quit` as this will shut down your node.**
-
-
- Your node will not auto-update so [prepare for future releases](/docs/run-a-node/linux-vps-system#prepare-for-future-releases) to make updating easy.
-
-
-
-### Prepare for future releases
-
-Your node will not update to new versions of Minima automatically.
-
-You can check the version of your node by running the `status` command from the RPC Client. See [How to use the RPC client](/docs/runanode/selectplatform/linuxvpsservice#using-the-rpc-client).
-
-To create a script that you can run every time you wish to update your node:
-
-
-
- Login as your user with sudo privileges
-
-
-
-
- Create the update script
-
-```bash title="Terminal"
-sudo nano updateminimajar.sh
-```
-
-
-
-
- Paste in the script
-
-```bash title="Terminal"
-#!/bin/sh
-
-#stop and disable service
-sudo systemctl stop minima
-sudo systemctl disable minima
-
-#remove old minima.jar from your home folder (if it exists)
-
-rm minima.jar
-
-#get latest jar
-
-wget https://github.com/minima-global/Minima/raw/master/jar/minima.jar
-
-#change name minima.jar in minima user to minima.jar_old
-
-sudo mv /home/minima/minima.jar /home/minima/minima.jar_old
-
-#move the new jar to minima folder
-
-sudo mv minima.jar /home/minima/minima.jar
-
-#reenable and start minima service
-
-sudo systemctl daemon-reload
-sudo systemctl enable minima
-sudo systemctl start minima
-
-sudo journalctl -u minima -f
-```
-
-
-
- Save the script
-ctrl-`x` then `y` then press Enter
-
-
-
- Give permissions to the script
-
-```bash title="Terminal"
-sudo chmod +x ./updateminimajar.sh
-```
-
-
-
- Run the script
-
-```bash title="Terminal"
-./updateminimajar.sh
-```
-You will see the logs showing using the updated version.
-
-
-
- To exit the logs
-Use ctrl-`c`
-
-
-
-
-For future updates, you simply need to run the script (steps 6 and 7).
-
-### Useful server commands
-
-- `sudo journalctl -u minima -f` : Show the Minima logs
-- `ctrl + c` : Exits the Minima logs (Minima will continue to run in the background)
-- `sudo ps -fC java` : Shows all running Java processes
-- `sudo systemctl status minima` - Check the status of the Minima background service
-- `sudo systemctl stop minima` - Stop the Minima service
-- `sudo systemctl disable minima` - Disable the Minima service
-- `sudo systemctl enable minima` - Enable the Minima service
-- `sudo systemctl start minima` - Start the Minima service
-
-## Login to your node
-
-
-
-
-
-Login
-
-To login to your node, open a web browser and navigate to **https://YourServerIP:9003/**
-
-
- Click on Advanced, then Proceed. Or in Google Chrome, you may have to click
- anywhere on the page and type thisisunsafe to proceed. Details for other
- browsers can be found
- [here](https://docs.vultr.com/how-to-bypass-the-https-warning-for-self-signed-ssl-tls-certificates).
-
-
-You will see the login screen for your node.
-
-
-
-
-
-Enter your password
-
-Enter your password to login. This is the `-mdspassword` parameter you set in the minima.service file.
-
-
-
-
-
-
-If you forgot the password you set in step 7 above, you can check the password you set in the minima.service file.
-
-Log on to your server and run
-
-```bash
- sudo nano /etc/systemd/system/minima.service
-```
-
-The `-mdspassword` parameter is your login password.
-
-If you chose not to set a password in the minima.service file, set up the RPC client below and then run the `mds` command to find your password to login.
-
-
-
-
-
-
-
-
-
-
-## First steps
-
-The first time you install Minima, you will need to
-
-- Connect to the network
-- Write down your seed phrase
-
-
- For more information on how to connect to the network and secure your node,
- please refer to [User Guides](/docs/user-guides/jointhenetwork).
-
-
-## Advanced
-
-### Optional startup parameters
-
-
-
-The following start up parameters can optionally be specified when starting your node.
-
-To add/remove parameters after a node has been started, you must `quit` the node and restart it, adding/removing the required parameters.
-
-`[]` square brackets indicate where an input is required, **the brackets should not be included**.
-
-General
-
-- `-clean` : CAREFUL! Clears existing data, starts a new fresh node. All coins will be lost.
-- `-port [port]` : specify the initial port for Minima to use. Range used will be the specified port +4. Default is 9001-9005.
-- `-host [ipaddress]` : specify the host IP
-- `-dbpassword [yourdbpassword]` : Main Wallet / SQL AES password - MUST be specified on first launch. CANNOT be changed later.
-- `-allowallip` : Allow all IPs for Maxima / Networking. Local IPs won't be allowed otherwise.
-- `-archive` : Run an Archive node - store all archive data / the cascade to allow for resyncs from this node
-- `-daemon` : Run in daemon mode with no stdin input (if running Minima as a background service)
-- `-isclient` : Tells the P2P System that this node can't accept incoming connections
-- `-server` : Use Server settings - this node can accept incoming connections
-- `-desktop` : Use Desktop settings - this node can't accept incoming connections
-
-Folders
-
-- `- data` : the data folder where all the config files for this node are stored. Default is a hidden .minima folder under the user's home directory. If you want to specify a folder not in the user's home directory, you must use the complete path.
-- `-basefolder` : specify a default file creation / backup / restore folder. Default is the user's home directory. Can be the same as the data folder provided.
-
-MiniDapp System (mds)
-
-- `- mdsenable` : enable the MiniDapp System (default port 9003)
-- `-mdspassword [yourmdspassword]` : specify the mds login password
-- `-mdsinit [foldername/path]` : specify a folder of miniDAPPs
-- `-mdswrite [minidapp]` : give an initial miniDAPP WRITE access
-
-RPC
-
-- `-rpcenable` : enable remote procedure call
-- `-rpcssl` : use Self Signed SSL cert to run RPC
-- `-rpcpassword [yourrpcpassword]` : set Basic Auth password for RPC calls ( Use with SSL / stunnel ). Only secure if used with SSL.
-- `-rpcclrf` : use CRLF at the end of the RPC headers (NodeJS)
-
-Test nodes
-
-- `-genesis` : start the node from the genesis block (automatically uses -clean)
-- `-test` : uses test parameters e.g. faster block times
-- `-connect [ip:port,ip:port]` : Disable the automatic P2P system and create your own network by manually connecting to this list of host:port
-- `-nop2p` : Disable the automatic P2P system
-- `-noconnect` : Stops the P2P system from connecting to other nodes until it has been connected to
-- `-nosyncibd` : Do not sync IBD (for testing)
-
-Mobile
-
-- `-mobile` : Sets this device to a mobile device - used for metrics only
-- `-limitbandwidth` : Limit the amount sent for archive sync
-- `-noshutdownhook` : Do not use the shutdown hook (Android)
-
-Debugging
-
-- `-p2p-log-level-info` : Set the P2P log level to info
-- `-p2p-log-level-debug` : Set the P2P log level to debug
-
-Help
-
-- `-showparams` : Show relevant startup params on launch
-- `-help` : print help for the start up parameters
-
-
-
-
-
-### Interacting headlessly
-
-#### Using the RPC client
-
-The best way to interact with the node headlessly is to [enable the RPC client](/docs/runanode/selectplatform/linuxvpsservice#rpc-client-setup).
-
-Once enabled, to start the RPC client when logged on to the server, enter:
-
-```bash title="Terminal"
- ./minima
-```
-
-
-You will see the Minima terminal header appear.
-
-To check the status of your node, enter `status` command, or type `help` to see the full list of commands.
-
-#### Using cURL over RPC
-
-You can send commands to your Minima node using cURL to the RPC port.
-
-Install cURL on your server:
-
-
-
-
-```bash
- sudo apt install curl
-```
-
-
-
-
-```bash
- sudo yum install curl
-```
-
-
-
-
-##### Example cURL commands :
-
-To interact with your node locally (whilst logged onto the server):
-
-```bash title="Terminal"
-curl -k -u minima:[yourRPCpasswordhere] serverip:9005/status
-```
-
-To interact from an external computer, use SSH with each command, logging in with the minima user:
-
-``` bash title="Terminal"
-ssh minima@YourServerIP curl -k -u minima:[yourRPCpasswordhere] serverip:9005/status
-```
-
-
-To use commands that require spaces, use `%20` instead:
-
-``` bash title="Terminal"
-ssh minima@YourServerIP curl -k -u minima:[yourpasswordhere] serverip:9005/backup%20password:insertpassword%20file:insertpathtobackup\backupname.bak | jq
-```
+---
+title: Linux VPS (Systemd service)
+description: Run Minima on a Linux VPS
+tag: run-a-node
+---
+
+
+Running a node on a server and allowing inbound connections on port 9001 will ensure your node acts as a **relay node**.
+
+Relay nodes are the backbone of the Minima peer-to-peer network that faciliate the transmission of transactions and blocks across the network and support the network to scale.
+
+Installing Minima as a background process with SystemD is an alternative to using Docker. SystemD is a daemon server that enables applications to run as background processes.
+
+The following instructions assume your server is using **Debian OS with no existing installations.**
+
+For hardware specifications, see [Node Types.](/docs/run-a-node/node-types)
+
+## Firewall setup
+
+Before starting, please ensure your server firewall rules:
+
+- Do not allow any inbound (Ingress) traffic from anywhere.
+- Allow ssh connections (inbound on port 22)
+
+Once your node is running, you should open port 9001 from anywhere and, if you are enabling minidapps, 9003 from your home IP.
+
+We highly recommend using the default Firewall manager for your server. Alternatively to use Uncomplicated Firewall (UFW), see the instructions below.
+
+
+
+
+After configuring your firewall, you should check they are enforced as expected.
+
+ Ingress
+All inbound connections except for SSH should be denied by default.
+
+Inbound connections from all IPs can be allowed for
+
+- **9001 tcp**: Allowing inbound connections on port 9001 ensures your node acts as a relay node. Relay nodes are the backbone of the Minima peer-to-peer network that faciliate the transmission of transactions and blocks across the network and support the network to scale. If your inbound connection is closed, your node will only make outgoing connections and will not act as a relay node.
+
+Inbound connections from **all IPs** should be **denied** to:
+
+- **9003 tcp** : if not enabling the MiniDapp system (i.e. you are using Minima headlessly)
+- **9002 tcp** : Port not in use
+- **9004 tcp** : Port not in use
+- **9005 tcp**: RPC Port
+
+Inbound connections from your **HOME IP** can be **allowed** for
+
+- **22 tcp** : Allows SSH access to the server, we recommend only allowing this from your home IP address but ensure that you can update this if your home IP dynamically changes, otherwise you could be locked out.
+- **9003 tcp**: if you intend to enable the MiniDapp system. If your home IP is dynamic, you will need to maintain this firewall rule to your latest IP. If you choose to allow inbound connections from anywhere, your login screen will be public facing, so your login password (mdspassword) must be long and secure, using a combination of lowercase, uppercase letters numbers and symbols.
+- **9005 tcp**: RPC Port - ADVANCED USERS ONLY!
+
+
+ Opening port 9005 is __extremely risky__ as it exposes your node and seed
+ phrase if you have not [set a secure password for RPC
+ access](#rpc-client-setup).
+
+
+To `curl` into the node remotely, ensure this is **only allowed inbound from your home IP address**. **You should only do this if you are an advanced user and understand the risks!**
+
+
+
+
+
+ If using **Docker** to run your node on a VPS, you **must not rely on UFW** as
+ your firewall, Docker will overwrite UFW firewall rules. You must use your VPS
+ provider's firewall manager.
+
+
+As a user with sudo privileges:
+
+
+
+
+ Install Uncomplicated Firewall
+
+```bash title="Terminal"
+ sudo apt install ufw
+```
+
+
+
+ Run the commands
+
+This will disable the firewall, deny incoming connections, accept outgoing connections, allow ssh and enable the firewall.
+
+```bash title="Terminal"
+ sudo ufw disable
+```
+
+```bash title="Terminal"
+ sudo ufw default deny incoming
+```
+
+```bash title="Terminal"
+ sudo ufw default allow outgoing
+```
+
+**DO NOT SKIP THE FOLLOWING STEP, OR YOU WILL BE LOCKED OUT OF YOUR SERVER!**
+
+```bash title="Terminal"
+ sudo ufw allow ssh
+```
+
+
+
+
+ Allow inbound connections to 9001
+
+```bash title="Terminal"
+ sudo ufw allow in 9001
+```
+
+
+
+
+
+Allow inbound connections to your MiniDapp system only from your home IP addresss
+
+
+
+
+Note that most home IP addresses are not fixed and change, so you may have to redo this rule at a later date. You can find your home IP address by going to [ipchicken](https://ipchicken.com/) when connected to your home wifi network.
+
+Replace `xxx.xxx.xxx` with your actual home IP address
+
+
+
+```bash title="Terminal"
+ sudo ufw allow from xxx.xxx.xxx to any port 9003
+```
+
+or to allow connections to your MiniDapp system from anywhere. **This will expose your login screen publicly.**
+
+```bash title="Terminal"
+ sudo ufw allow in 9003
+```
+
+
+
+
+
+Enable the firewall
+
+```bash title="Terminal"
+ sudo ufw enable
+```
+
+For more information see [here](https://wiki.debian.org/Uncomplicated%20Firewall%20%28ufw%29)
+
+
+
+
+
+
+
+
+## Setup Minima as a systemd service
+
+### Server installations
+
+
+
+ As a user with sudo privileges, install the following:
+
+```bash title="Terminal"
+ sudo apt update -y
+ sudo apt upgrade -y
+ sudo apt install jq -y
+ sudo apt install default-jdk -y
+ sudo apt install wget -y
+```
+
+- `sudo apt update -y`: Updates the package list to the latest version.
+- `sudo apt upgrade -y`: Upgrades all the installed packages to their latest versions.
+- `sudo apt install jq -y`: Installs `jq`, a lightweight and flexible command-line JSON processor.
+- `sudo apt install default-jdk -y`: Installs the default Java Development Kit (JDK).
+- `sudo apt install wget -y`: Installs `wget`, a utility for non-interactive download of files from the web.
+
+
+
+
+As a user with sudo privileges, install the following:
+
+```bash title="Terminal"
+ sudo yum update -y
+ sudo yum install jq -y
+ sudo yum install java-1.8.0-openjdk-devel -y
+ sudo yum install wget nano -y
+```
+
+- `sudo yum update -y`: Updates the package list to the latest version.
+- `sudo yum install jq -y`: Installs `jq`, a lightweight and flexible command-line JSON processor.
+- `sudo yum install java-1.8.0-openjdk-devel -y`: Installs the Java Development Kit (JDK) version 1.8.0.
+- `sudo yum install wget -y`: Installs `wget`, a utility for non-interactive download of files from the web.
+
+
+
+
+
+### Minima node setup
+
+
+
+
+ Create a minima user
+
+```bash title="Terminal"
+ sudo adduser minima
+```
+
+Set a password for the user and confirm it, leave all other settings blank by pressing enter, then y to confirm.** Make sure to remember this user's password!**
+
+
+
+
+ Setup journal logs service
+
+```bash title="Terminal"
+ sudo tee </dev/null /etc/systemd/journald.conf
+ Storage=persistent
+ EOF
+```
+
+
+
+
+ Restart the service
+
+```bash title="Terminal"
+ sudo systemctl restart systemd-journald
+```
+
+
+
+
+ Create the Minima systemd file
+
+
+
+
+
+
+ Edit the file to change the password, use the arrow keys to go to
+ `yourpasswordhere` and set a secure password of over 12
+ characters using `a-z, A-Z, 0-9 and !@#=?+><,.-_'()/` symbols only.
+
+
+```bash title="Terminal"
+ sudo tee </dev/null /etc/systemd/system/minima.service
+ [Unit]
+ Description=minima
+ [Service]
+ User=minima
+ Type=simple
+ ExecStart=/usr/bin/java -jar /home/minima/minima.jar -mdsenable -mdspassword yourpasswordhere -daemon -basefolder /home/minima -data /home/minima/.minima
+ Restart=always
+ RestartSec=100
+ [Install]
+ WantedBy=multi-user.target
+ EOF
+```
+
+
+
+
+The following will create a systemd service file for a headless node (no Minidapps).
+
+```bash title="Terminal"
+ sudo tee </dev/null /etc/systemd/system/minima.service
+ [Unit]
+ Description=minima
+ [Service]
+ User=minima
+ Type=simple
+ ExecStart=/usr/bin/java -jar /home/minima/minima.jar -rpcenable -rpcpassword INSERTRPCPASSWORD -rpcssl -daemon -basefolder /home/minima -data /home/minima/.minima
+ Restart=always
+ RestartSec=100
+ [Install]
+ WantedBy=multi-user.target
+ EOF
+```
+
+
+
+
+
+To reopen the file if required:
+
+```bash title="Terminal"
+ sudo nano /etc/systemd/system/minima.service
+```
+
+use `ctrl-X` then `Y` then press enter to save changes.
+
+
+
+
+ Navigate to home directory
+
+```bash title="Terminal"
+ sudo su minima
+```
+
+```bash title="Terminal"
+ cd /home/minima
+```
+
+
+
+
+ Download the minima jar file from Github
+
+```bash title="Terminal"
+ wget https://github.com/minima-global/Minima/raw/master/jar/minima.jar
+```
+
+Exit back to your user
+
+```bash title="Terminal"
+ exit
+```
+
+
+
+
+ Reload the services
+
+```bash title="Terminal"
+ sudo systemctl daemon-reload
+```
+
+
+
+
+ Enable and start the minima service
+
+```bash title="Terminal"
+ sudo systemctl enable minima
+```
+
+```bash title="Terminal"
+ sudo systemctl start minima
+```
+
+
+
+
+ View the logs to see your node starting up
+
+```bash title="Terminal"
+ sudo journalctl -u minima -f
+```
+
+`Ctrl+C will exit the log stream`
+
+
+
+
+
+
+**Congratulations, your node is now running!**
+
+Now that your node is running, you can setup the RPC client to interact with your node headlessly.
+
+
+To interact with your node headlessly, bypassing the MiniDapp system, you can setup the RPC client as below. Otherwise, skip to [preparing for future releases](#prepare-for-future-releases)
+
+
+#### RPC client setup
+
+
+
+ Start the Minima RPC Client
+
+
+ Enter a password over 12 characters using `a-z, A-Z, 0-9 and !@#=?+><,.-_'()/` symbols only.
+
+
+```bash title="Terminal"
+ java -cp /home/minima/minima.jar org.minima.utils.MinimaRPCClient -password yourrpcpassword -host https://127.0.0.1:9005
+```
+
+Write the file using `ctrl-X` then confirm with `Y`
+
+
+
+
+
+ Permissions
+
+```bash title="Terminal"
+ sudo chmod +x ./minima
+```
+
+
+
+
+ Run the script
+
+```bash title="Terminal"
+ ./minima
+```
+
+
+
+
+You can run any Minima commands here.
+
+Type `block` then enter to return your top block. `status` will return details about your node.
+
+Type `help` to see a list of all commands and `help command:` to see detailed help for any command.
+
+
+
+
+To exit the Terminal, type `exit`.
+
+**Do not type `quit` as this will shut down your node.**
+
+
+ Your node will not auto-update so [prepare for future releases](/docs/run-a-node/linux-vps-service#prepare-for-future-releases) to make updating easy.
+
+
+
+### Prepare for future releases
+
+Your node will not update to new versions of Minima automatically.
+
+You can check the version of your node by running the `status` command from the RPC Client. See [How to use the RPC client](/docs/run-a-node/linux-vps-service#using-the-rpc-client).
+
+To create a script that you can run every time you wish to update your node:
+
+
+
+ Login as your user with sudo privileges
+
+
+
+
+ Create the update script
+
+```bash title="Terminal"
+sudo nano updateminimajar.sh
+```
+
+
+
+
+ Paste in the script
+
+```bash title="Terminal"
+#!/bin/sh
+
+#stop and disable service
+sudo systemctl stop minima
+sudo systemctl disable minima
+
+#remove old minima.jar from your home folder (if it exists)
+
+rm minima.jar
+
+#get latest jar
+
+wget https://github.com/minima-global/Minima/raw/master/jar/minima.jar
+
+#change name minima.jar in minima user to minima.jar_old
+
+sudo mv /home/minima/minima.jar /home/minima/minima.jar_old
+
+#move the new jar to minima folder
+
+sudo mv minima.jar /home/minima/minima.jar
+
+#reenable and start minima service
+
+sudo systemctl daemon-reload
+sudo systemctl enable minima
+sudo systemctl start minima
+
+sudo journalctl -u minima -f
+```
+
+
+
+ Save the script
+ctrl-`x` then `y` then press Enter
+
+
+
+ Give permissions to the script
+
+```bash title="Terminal"
+sudo chmod +x ./updateminimajar.sh
+```
+
+
+
+ Run the script
+
+```bash title="Terminal"
+./updateminimajar.sh
+```
+You will see the logs showing using the updated version.
+
+
+
+ To exit the logs
+Use ctrl-`c`
+
+
+
+
+For future updates, you simply need to run the script (steps 6 and 7).
+
+### Useful server commands
+
+- `sudo journalctl -u minima -f` : Show the Minima logs
+- `ctrl + c` : Exits the Minima logs (Minima will continue to run in the background)
+- `sudo ps -fC java` : Shows all running Java processes
+- `sudo systemctl status minima` - Check the status of the Minima background service
+- `sudo systemctl stop minima` - Stop the Minima service
+- `sudo systemctl disable minima` - Disable the Minima service
+- `sudo systemctl enable minima` - Enable the Minima service
+- `sudo systemctl start minima` - Start the Minima service
+
+## Login to your node
+
+
+
+
+
+Login
+
+To login to your node, open a web browser and navigate to **https://YourServerIP:9003/**
+
+
+ Click on Advanced, then Proceed. Or in Google Chrome, you may have to click
+ anywhere on the page and type thisisunsafe to proceed. Details for other
+ browsers can be found
+ [here](https://docs.vultr.com/how-to-bypass-the-https-warning-for-self-signed-ssl-tls-certificates).
+
+
+You will see the login screen for your node.
+
+
+
+
+
+Enter your password
+
+Enter your password to login. This is the `-mdspassword` parameter you set in the minima.service file.
+
+
+
+
+
+
+If you forgot the password you set in step 7 above, you can check the password you set in the minima.service file.
+
+Log on to your server and run
+
+```bash
+ sudo nano /etc/systemd/system/minima.service
+```
+
+The `-mdspassword` parameter is your login password.
+
+If you chose not to set a password in the minima.service file, set up the RPC client below and then run the `mds` command to find your password to login.
+
+
+
+
+
+
+
+
+
+
+## First steps
+
+The first time you install Minima, you will need to
+
+- Connect to the network
+- Write down your seed phrase
+
+
+ For more information on how to connect to the network and secure your node,
+ please refer to [User Guides](/docs/user-guides/join-the-network).
+
+
+## Advanced
+
+### Optional startup parameters
+
+
+
+The following start up parameters can optionally be specified when starting your node.
+
+To add/remove parameters after a node has been started, you must `quit` the node and restart it, adding/removing the required parameters.
+
+`[]` square brackets indicate where an input is required, **the brackets should not be included**.
+
+General
+
+- `-clean` : CAREFUL! Clears existing data, starts a new fresh node. All coins will be lost.
+- `-port [port]` : specify the initial port for Minima to use. Range used will be the specified port +4. Default is 9001-9005.
+- `-host [ipaddress]` : specify the host IP
+- `-dbpassword [yourdbpassword]` : Main Wallet / SQL AES password - MUST be specified on first launch. CANNOT be changed later.
+- `-allowallip` : Allow all IPs for Maxima / Networking. Local IPs won't be allowed otherwise.
+- `-archive` : Run an Archive node - store all archive data / the cascade to allow for resyncs from this node
+- `-daemon` : Run in daemon mode with no stdin input (if running Minima as a background service)
+- `-isclient` : Tells the P2P System that this node can't accept incoming connections
+- `-server` : Use Server settings - this node can accept incoming connections
+- `-desktop` : Use Desktop settings - this node can't accept incoming connections
+
+Folders
+
+- `- data` : the data folder where all the config files for this node are stored. Default is a hidden .minima folder under the user's home directory. If you want to specify a folder not in the user's home directory, you must use the complete path.
+- `-basefolder` : specify a default file creation / backup / restore folder. Default is the user's home directory. Can be the same as the data folder provided.
+
+MiniDapp System (mds)
+
+- `- mdsenable` : enable the MiniDapp System (default port 9003)
+- `-mdspassword [yourmdspassword]` : specify the mds login password
+- `-mdsinit [foldername/path]` : specify a folder of miniDAPPs
+- `-mdswrite [minidapp]` : give an initial miniDAPP WRITE access
+
+RPC
+
+- `-rpcenable` : enable remote procedure call
+- `-rpcssl` : use Self Signed SSL cert to run RPC
+- `-rpcpassword [yourrpcpassword]` : set Basic Auth password for RPC calls ( Use with SSL / stunnel ). Only secure if used with SSL.
+- `-rpcclrf` : use CRLF at the end of the RPC headers (NodeJS)
+
+Test nodes
+
+- `-genesis` : start the node from the genesis block (automatically uses -clean)
+- `-test` : uses test parameters e.g. faster block times
+- `-connect [ip:port,ip:port]` : Disable the automatic P2P system and create your own network by manually connecting to this list of host:port
+- `-nop2p` : Disable the automatic P2P system
+- `-noconnect` : Stops the P2P system from connecting to other nodes until it has been connected to
+- `-nosyncibd` : Do not sync IBD (for testing)
+
+Mobile
+
+- `-mobile` : Sets this device to a mobile device - used for metrics only
+- `-limitbandwidth` : Limit the amount sent for archive sync
+- `-noshutdownhook` : Do not use the shutdown hook (Android)
+
+Debugging
+
+- `-p2p-log-level-info` : Set the P2P log level to info
+- `-p2p-log-level-debug` : Set the P2P log level to debug
+
+Help
+
+- `-showparams` : Show relevant startup params on launch
+- `-help` : print help for the start up parameters
+
+
+
+
+
+### Interacting headlessly
+
+#### Using the RPC client
+
+The best way to interact with the node headlessly is to [enable the RPC client](/docs/run-a-node/linux-vps-service#rpc-client-setup).
+
+Once enabled, to start the RPC client when logged on to the server, enter:
+
+```bash title="Terminal"
+ ./minima
+```
+
+
+You will see the Minima terminal header appear.
+
+To check the status of your node, enter `status` command, or type `help` to see the full list of commands.
+
+#### Using cURL over RPC
+
+You can send commands to your Minima node using cURL to the RPC port.
+
+Install cURL on your server:
+
+
+
+
+```bash
+ sudo apt install curl
+```
+
+
+
+
+```bash
+ sudo yum install curl
+```
+
+
+
+
+##### Example cURL commands :
+
+To interact with your node locally (whilst logged onto the server):
+
+```bash title="Terminal"
+curl -k -u minima:[yourRPCpasswordhere] serverip:9005/status
+```
+
+To interact from an external computer, use SSH with each command, logging in with the minima user:
+
+``` bash title="Terminal"
+ssh minima@YourServerIP curl -k -u minima:[yourRPCpasswordhere] serverip:9005/status
+```
+
+
+To use commands that require spaces, use `%20` instead:
+
+``` bash title="Terminal"
+ssh minima@YourServerIP curl -k -u minima:[yourpasswordhere] serverip:9005/backup%20password:insertpassword%20file:insertpathtobackup\backupname.bak | jq
+```
diff --git a/content/docs/run-a-node/mac.mdx b/content/docs/run-a-node/mac.mdx
index c0a849e..fe13f75 100644
--- a/content/docs/run-a-node/mac.mdx
+++ b/content/docs/run-a-node/mac.mdx
@@ -1,103 +1,103 @@
----
-title: Mac
-description: Run a Minima node on Mac
-tag: run-a-node
----
-
-Minima can be installed as a desktop application, launched from a JNLP file, the Java Network Launch Protocol.
-
-
- If you prefer to run Minima from the command line visit the [Desktop Command
- Line](/docs/run-a-node/desktop-cli) page.
-
-
-## Setting up your node
-
-
-
-
-
-### Open Web Start
-
-Download and install Open Web Start - the new updated version of Java Web Start, using the default options.
-
-
- From the Apple icon in the top left of your Mac, select “About This Mac”. If
- the processor says **Intel**, choose the **OpenWebStart_macos-x64** option, if
- you see **M1** or **M2**, choose **OpenWebStart_macos-aarch64**.
-
-
-
-
-
-
-### Minima JNLP
-
-Download the [Minima JNLP](https://www.spartacusrex.com/javaws/minima.jnlp) file and open / double-click it to install Minima as an application. A desktop shortcut will be created for you and you will be shown a security warning, select Run.
-
-
-
-
-
-### Desktop shortcut
-
-Create a desktop shortcut for Minima if it was not created automatically. Right-click on the minima.jnlp file and select Make Alias, then drag the alias file to your desktop.
-
-
-
-
-
-### Launch Minima on startup
-
-Set Minima to start automatically when your PC starts by referring to this [guide](https://support.apple.com/en-gb/guide/mac-help/mh15189/14.0/mac/14.0).
-
-
-
-
-
-### Set your password
-
-Set your own password - on the Settings tab, use the `-mdspassword` parameter in the **Advanced params** section.
-
-
-
-
- Enter a password over 12 characters using `a-z, A-Z, 0-9, !@#=?+<>,.-_ '()/ `characters only and without spaces, then close the window and restart the app for this to take effect.
-
-
-
-
-
-
-Once restarted, select Launch MinimaOS to access your node and login with your password.
-
-Congratulations on starting your node!
-
-
- When shutting down your Mac, please shutdown Minima first by closing the
- launcher window and waiting for the shutdown to complete. This ensures your
- node does not get corrupted by an unexpected shutdown.
-
-
-## Updating your node
-
-To update your node to the latest version of Minima, simply close the dialog box to shut it down, then relaunch the JNLP. Any updates will be checked for and downloaded automatically.
-
-Please see the essential [first steps](#first-steps) to complete now your node is running.
-
-## First steps
-
-The first time you install Minima, you will need to
-
-- Connect to the network
-- Write down your seed phrase
-
-
- For more information on how to connect to the network and secure your node,
- please refer to [User Guides](/docs/user-guides/jointhenetwork).
-
+---
+title: Mac
+description: Run a Minima node on Mac
+tag: run-a-node
+---
+
+Minima can be installed as a desktop application, launched from a JNLP file, the Java Network Launch Protocol.
+
+
+ If you prefer to run Minima from the command line visit the [Desktop Command
+ Line](/docs/run-a-node/desktop-cli) page.
+
+
+## Setting up your node
+
+
+
+
+
+### Open Web Start
+
+Download and install Open Web Start using the default options.
+
+
+ From the Apple icon in the top left of your Mac, select “About This Mac”. If
+ the processor says **Intel**, choose the **OpenWebStart_macos-x64** option, if
+ you see **M1** or **M2**, choose **OpenWebStart_macos-aarch64**.
+
+
+
+
+
+
+### Minima JNLP
+
+Download the [Minima JNLP](https://www.spartacusrex.com/javaws/minima.jnlp) file and open / double-click it to install Minima as an application, ensuring it always launches with Open Web Start. A desktop shortcut will be created for you and you will be shown a security warning, select Run.
+
+
+
+
+
+### Desktop shortcut
+
+Create a desktop shortcut for Minima if it was not created automatically. Right-click on the minima.jnlp file and select Make Alias, then drag the alias file to your desktop.
+
+
+
+
+
+### Launch Minima on startup
+
+Set Minima to start automatically when your PC starts by referring to this [guide](https://support.apple.com/en-gb/guide/mac-help/mh15189/14.0/mac/14.0).
+
+
+
+
+
+### Set your password
+
+Set your own password - on the Settings tab, use the `-mdspassword` parameter in the **Advanced params** section.
+
+
+
+
+ Enter a password over 12 characters using `a-z, A-Z, 0-9, !@#=?+<>,.-_ '()/ `characters only and without spaces, then close the window and restart the app for this to take effect.
+
+
+
+
+
+
+Once restarted, select Launch MinimaOS to access your node and login with your password.
+
+Congratulations on starting your node!
+
+
+ When shutting down your Mac, please shutdown Minima first by closing the
+ launcher window and waiting for the shutdown to complete. This ensures your
+ node does not get corrupted by an unexpected shutdown.
+
+
+## Updating your node
+
+To update your node to the latest version of Minima, simply close the dialog box to shut it down, then relaunch the JNLP. Any updates will be checked for and downloaded automatically.
+
+Please see the essential [first steps](#first-steps) to complete now your node is running.
+
+## First steps
+
+The first time you install Minima, you will need to
+
+- Connect to the network
+- Write down your seed phrase
+
+
+ For more information on how to connect to the network and secure your node,
+ please refer to [User Guides](/docs/user-guides/join-the-network).
+
diff --git a/content/docs/run-a-node/meg-about.mdx b/content/docs/run-a-node/meg-about.mdx
new file mode 100644
index 0000000..caba5fe
--- /dev/null
+++ b/content/docs/run-a-node/meg-about.mdx
@@ -0,0 +1,198 @@
+---
+title: Overview
+description: About MEG
+tag: run-a-node
+---
+
+Minima E-Gateway (MEG) is a middleware gateway service that enables enterprises, exchanges and developers to integrate with the Minima blockchain.
+
+The primary function of MEG is to support interactions between Minima and other business applications and/or services through a combination of a HTTP/S API and web hooks. MEG operates as a stateless intermediary, enabling interactions without retaining any data.
+
+
+## System Overview
+
+MEG runs as a separate java program to Minima, and can be deployed easily by setting up the MEG java program as a background service on a single server instance.
+
+The MEG service must be configured to connect to a Minima node via the Minima node's RPC port.
+
+
+
+
+### Single server deployment
+
+A single server deployment scenario is suitable for a sandbox environment supporting a proof of concept, or pilot use case. It can also be used for small standalone production deployments where resource constraints exist or low usage volume is expected.
+
+
+
+
+### Production deployment
+
+To support a large scale and/or high volume, production environments, multiple instances of MEG can be deployed offering high availability and load balancing scenarios.
+
+
+
+### Offline deployment
+
+MEG can be used in a secure offline environment with an offline Minima node. This is useful where an offline Minima node is required for signing transactions.
+
+## Minimum Server Requirements
+
+| Hardware | Details |
+|---------------|-------------------|
+| CPU | 4 CPU cores |
+| RAM | 16GB |
+| Disk Space | 32GB (in addition to OS) |
+
+
+| Software | Details |
+|-------------------------------|-----------------------------------------|
+| Operating System | Linux variant (tested on Debian GNU/Linux 12 "bookworm", amd64) |
+| Java Runtime Environment | Java 11 or later |
+| SQL Database | MySQL 8.0* |
+
+*A SQL database is not a prerequisite for running MEG, however it is recommended for the purpose of exporting and storing all/relevant transaction detail
+
+
+| Network Ports | Details |
+|---------------|------------------------------|
+| MEG | 1 port required (default 8080)* |
+| Minima | 5 port range required (default 9001-9005)* |
+
+*The MEG port and Minima base port can be configured.
+
+
+## Event flows
+
+Three types of interactions are supported:
+
+### Triggers
+
+Triggers send HTTP/S based requests to a registered destination endpoint when certain on-chain events occur, for example in response to transactions sourced from a specified address or tokens occurring on the Minima blockchain.
+On a 'Trigger' event, a POST request is made with the relevant JSON data to the specified URL.
+
+
+
+### Endpoints
+
+Endpoints can be used to initiate transactions or other interactions on the Minima blockchain, in response to a HTTP/S based request sent from a registered client endpoint. Can be configured to use relevant parameters.
+
+
+
+### Wallet API
+
+
+You MUST be running the Minima node with the `-megammr` startup parameter for this to work.
+
+
+The Wallet API includes dedicated endpoints to support custodial wallet functionality for any number of users. This does NOT access the main Wallet of the Minima node and does not save any of the private keys or data. Each API Endpoint requires certain parameters and can be sent as a POST or GET request.
+
+
+
+## Start up parameters
+
+The following start up parameters are available for MEG:
+
+
+| Start up parameter | Description |
+|-----------------------|---------------------------------------------------------------------------------------------------|
+| `-port` | The port to listen on. |
+| `-data` | The data folder. |
+| `-adminpassword` | The 'admin' User account password (then used to add other accounts). |
+| `-apicallerpassword` | The 'apicaller' User account password. |
+| `-meghost` | The `http://host:port` of this instance of MEG. |
+| `-minimarpc` | The `http://host:port` of the Minima RPC. |
+| `-minimarpcpassword` | The Minima RPC password if enabled. |
+| `-minkeyuses` | MINIMUM key uses value for any Public Keys (if you are running this from a new server). |
+| `-help` | Print this help. |
+
+
+## Admin Console
+
+MEG exposes an admin console enabling admin operators to
+
+1. configure triggers (from Minima events)
+2. configure custom endpoints
+3. view the wallet API endpoints
+4. manage MEG users
+5. view logs
+
+
+
+## Access Control
+
+The admin console enables you to configure 3 types of users: admin, basic and API Caller.
+
+| Role | Description |
+|--------------------|-------------------------------------------------------------------------------------------------------------------------------------|
+| **Admin** | Creates and removes users, adds and removes triggers and endpoints, sets the connection to the Minima node. |
+| **Basic** | View-only user access to the console. |
+| **API Caller** | Endpoints can only be called by 'apicaller' users using the Basic Authorization Header. Does not grant login access to the console. |
+
+MEG exposes ports to the localhost only. MEG can be positioned behind an API gateway and/or application firewall and due to the nature of its role, interactions should be restricted to authorised and trusted users and systems only.
+
+## Dependencies
+
+MEG requires a Minima node (v1.0.41 or above) to be running with the following parameters
+
+- `-rpcenable`
+- `-megammr`
+- `-notifyalltxpow`
+- `-mysqlalltxpow` (optional)
+
+## Installation steps
+
+
+
+1. Download the latest meg.jar and minima.jar files
+2. Start a Minima node with the required parameters
+3. Start MEG with required parameters
+4. Create a connection between MEG and the Minima node
+5. Configure the MEG users
+6. Configure the required triggers and custom endpoints
+
+Please see [MEG setup](/docs/run-a-node/meg-setup) for details.
+
+## Uninstallation
+MEG can be uninstalled by stopping the java program and deleting the MEG data folder (defined on start-up)
+
+### Patching and Upgrades
+
+New releases of MEG are made available on the Minima MEG Github repository.
+
+To upgrade MEG:
+
+1. If required, ensure you have a second instance of MEG running so that no trigger events are missed whilst upgrading.
+2. stop MEG
+2. replace the MEG java .jar file
+3. restart MEG, using the same data folder as previously defined at start up
+4. check that the connection to the Minima node remains
diff --git a/content/docs/run-a-node/meg-setup.mdx b/content/docs/run-a-node/meg-setup.mdx
new file mode 100644
index 0000000..a65f715
--- /dev/null
+++ b/content/docs/run-a-node/meg-setup.mdx
@@ -0,0 +1,451 @@
+---
+title: MEG Setup
+description: How to setup MEG
+tag: run-a-node
+---
+
+import { Tab, Tabs } from "fumadocs-ui/components/tabs"
+
+This guide explains how to
+
+- Set up a MEG (Minima E-Gateway) instance and connect it to a Minima node
+- Test the MEG setup
+- Store more of the chain history on the node, if required
+- Export the chain history to MySQL
+
+
+This is intended as a guide for setting up a proof-of-concept environment. In Production, the Minima node should be configured with secure SSL and appropriate [firewalls](/docs/run-a-node/firewall-rules) - this is your responsibility.
+
+## Downloads required
+
+You will need to download the latest [minima.jar](https://github.com/minima-global/Minima/releases) and [meg.jar](https://github.com/minima-global/MEG/releases) from GitHub.
+
+{/*
+
+
+The online Minima node will run on ports 9001-9005.
+9001 is the peer-to-peer networking layer which can be open to inbound and outbound connections from anywhere. This ensures the node acts as a relay node - facilitating the relaying of transactions across the network.
+9002 is currently not used and should not be open externally.
+9003 is the MiniDapp system (MDS) port. Opening this port publicly will expose the login screen for the node. This should only be exposed to specific IP addresses if the minidapp system is enabled using the -mdsenable startup parameter (explained later). If the MiniDapp System is not enabled, it should not be exposed at all.
+9004 is no longer used and should not be open externally.
+9005 is the RPC port which should only be allowed inbound to specific IP addresses that require remote connection to the Minima node (if any).
+
+
+Mega MMR Import
+If you skip this step, your Mega MMR node will only start to store coins from this point forward.
+Optionally, import a recent Mega MMR file to populate the Mega node with historic coin data, you can download a file from: https://spartacusrex.com/megaarchive/
+Then in the window where the Minima logs are, enter the command:
+megammr action:import file:[PathToFile]/megammr.mmr
+The MegaMMR will be loaded and the node will shutdown automatically.
+Restart the node as before using java -jar.... ensuring you do not use -clean.
+
+Online Node Maintenance & Recovery
+Add a Maxima contact
+By adding a contact to your node, you can ensure that you are on the same block number as your contact.
+To name your node, run
+maxima action:setname name:yourname
+To find your contact address, run
+maxima
+And copy the full contact address from the response. This changes at random intervals so if sharing your contact address, your contact must add it as soon as possible whilst it is still valid.
+To add a contact, ask them for their contact address and run the following command, inserting their contact address.
+maxcontacts action:add contact:
+
+Export the Mega MMR data
+You should export your Mega MMR data weekly and store the file in a different location to the node. This will contain a complete record of the UTxO (coin) set that is required to create transactions, and can be restored to a new node if the online node becomes corrupted somehow.
+To export the complete set of coins, use the command:
+megammr action:export file:[PathToFile]/megammrexport-datetime.mmr
+This can be imported to another node by using the Mega MMR import command shown in the section above.
+
+Import the Mega MMR data
+If you need to recreate your Mega MMR node with the coin history, you can simply import a megammr file you previously created. See Mega MMR Import section above
+Importing a seed phrase
+You can restore the private keys from a given seed phrase to a node by importing the seed phrase to a new node.
+You will need
+a mega mmr node to connect to
+the 24 word seed phrase you wish to restore
+The keyuses of the seed phrase
+For each account, you must record the 24 word seed phrase and the key uses (the number of times you have generated a signature for an address.
+To restore a node to a given seed phrase, use the megammrsync command.
+Example:
+megammrsync action:resync host:xx.xx.xxx.xxx:9001 phrase:"YOUR 24 WORD SEED PHRASE" keyuses:2000
+Where the host is the ip:port of the megammr node to restore from.
+This will NOT share the seed phrase with the Mega MMR node.
+If this node should be a mega mmr node, you will then need to re-import the megammr file.
+
+Resyncing to the chain tip
+If your node has fallen behind the chain tip, you can resync from another megammr node, using:
+megammrsync action:resync host:xx.xx.xxx.xxx:9001
+If this node should be a mega mmr node, you will then need to re-import the megammr file.
+
+Backup/Restore
+You can backup the node using the backup command.
+The backup file will contain:
+The seed phrase and private keys for the node
+The coins proofs relevant to the node
+The keyuses for this seed phrase
+Transaction history relevant to this seed phrase
+The backup file does not contain
+The mega mmr coins
+Example:
+backup password:Longsecurepassword456 confirm:Longsecurepassword456 file:mybackupfile-ddmmyy.bak
+This can be done automatically by adding the auto:true parameter.
+Backups can then be restored by providing the file parameter with the megammrsync command. This will restore the backup and use a megammr node to ensure you also sync to the current tip block:
+megammrsync action:resync host:xx.xx.xxx.xxx:9001 file:myoldbakup.bak password:backup_password
+If this node should also be a mega mmr node, you will then need to re-import the megammr file. */}
+
+## Minima setup
+
+You can choose which type of Minima node is appropriate depending on your implementation. If you are unsure, please see [Node Types.](/docs/run-a-node/node-types)
+
+We will continue the setup with a Mega node so that transactions can be creatd and posted for **any** user.
+
+
+
+
+### Start an online Minima Mega node
+
+You can run Minima from the CLI as a session in tmux or create it as a background service, e.g. as a [systemd service](/docs/run-a-node/linux-vps-service).
+
+From the CLI, start a Minima Mega node with the following start up parameters:
+
+
+| Start up parameter | Description |
+|-------------------------------------|-----------------------------------------------------------------------------------------------------|
+| `-megammr` | starts Minima as a Mega MMR node (tracks ALL coins on the network) |
+| `-rpcenable` | enables RPC over port 9005 for communication via MEG |
+| `-rpcpassword [yourrpcpassword]` | set Basic Auth password for RPC calls ( Use with SSL / stunnel ). Only secure if used with SSL. |
+| `-basefolder /home/minima` | defines the backup/restore folder |
+| `-data /home/minima/.minima` | defines the configuration data folder |
+| `-p2pnodes megammr.minima.global:9001` | provides a list of peers to join the network |
+| `-notifyalltxpow` | (Optional) creates a NEWTXPOW notification for all transactions |
+| `-txpowdbstore` | (Optional) define how long to store full transaction details on the node. Default is 3. |
+| `-mysqlalltxpow` | (Optional) Store all TxPoW in MySQL when mysql autobackup is enabled |
+| `-mdsenable` | (Optional) enables the minidapp system e.g. for block explorer |
+| `-mdspassword insertpasswordhere` | (Optional) sets the password to login to the minidapp system |
+| `-clean` | (Optional) to wipe and start a fresh node - ANY COINS ON THE NODE WILL BE WIPED |
+
+Example
+
+```
+java -jar [path]/minima.jar -rpcenable -megammr -notifyalltxpow -basefolder /home/minima -data /home/minima/.minima -p2pnodes megammr.minima.global:9001
+```
+
+You should see something similar to the following:
+
+```
+Minima @ 05/07/2024 16:24:24 [9.0 MB] : Welcome to Minima v1.0.41 - for assistance type help. Then press enter.
+Minima @ 05/07/2024 16:24:25 [60.8 MB] : Generating Base Private Seed Key
+```
+
+
+Now the node is running and you should automatically join the network. A seed phrase will be generated along with 64 default wallet addresses for the node.
+
+
+
+
+### Confirm the node is synced to the latest block
+
+Wait a few moments, then run the command `block` from the Minima Terminal, RPC Client or Terminal MiniDapp to ensure the node is connected to the network and up to date with the chain tip.
+
+
+
+
+### Import historical coin data
+
+*This step can be skipped if not running a Mega node.*
+
+A Mega node should be backfilled with the chain history so that the node has a complete database of all the coins since the blockchain started.
+
+Import a MegaMMR `.mmr` file, generated no longer than 1 week ago, from another Mega node runner by running the following command from the Minima Terminal, RPC Client or Terminal MiniDapp.
+
+Daily .mmr exports can be found [here](https://spartacusrex.com/megaarchive/).
+
+```bash title="Terminal"
+megammr action:import file:[PathToFile]/megammr.mmr
+```
+
+
+
+{/*
+
+
+### Optionally start an offline Minima node
+
+Start a Minima node (offline)
+From the CLI, start a Minima node with the following start up parameters:
+-rpcenable : enables RPC over port 9005 for communication via a local instance of MEG
+-basefolder /home/minima : defines the folder used for exporting and importing backups, transactions and other files
+-data /home/minima/.minima : defines the configuration data folder
+-clean : optional to wipe and start a fresh node - ALL DATA FILES WILL BE WIPED AND A NEW SEED PHRASE WILL BE GENERATED
+Note: Port 9001 is used as the base port by default and the RPC port is base port +4 i.e. 9005. To start Minima on a custom port, you can use the -port start-up parameter, this will reserve the 5 consecutive ports e.g. if using -port 8001, the RPC port will be 8005.
+On start up, a new seed phrase will be generated along with 64 wallet addresses for the node.
+Run the Minima command vault to view the seed phrase of the node.
+To wipe the seed phrase from the node, use
+vault action:wipekeys seed:0x..
+To restore the seed phrase to the node, you will need the 24 words
+vault action:restorekeys phrase:”"SPRAY LAMP…" */}
+
+{/* */}
+
+
+
+## How to set up MEG
+
+
+
+
+
+### Start a MEG instance
+
+Start a new terminal/tmux session and start MEG with the following parameters
+
+- `-data /home/meg/.megdata` : defines the configuration data folder
+- `-adminpassword insertadminpassword` : set the admin password
+- `-port 8080` : set the port for MEG to run over
+
+Example:
+
+```
+java -jar minima-meg-server.jar -port 8080 -data /home/meg/.megdata -adminpassword INSERTMEGPASSWORD
+```
+
+
+
+### Access the MEG interface
+
+Access the MEG interface on http://127.0.0.1:8080, enter the admin username and password.
+
+
+
+
+### Connect MEG to the Minima node
+
+Set up the connection to the Minima node
+
+ MEG host: http://127.0.0.1:8080/
+
+ MINIMA host: http://127.0.0.1:9005/
+
+Click Update Node Details, then select TEST CONNECTION. If successful, you will see the status returned from the Minima node.
+
+**Example:**
+
+```
+ {"command":"block","status":true,"pending":false,"response":{"block":"932067","hash":"0x00000013436070C3B661CAD39A52FA0F775C6DB82FE849005ACB7BFBAEBD9577","timemilli":"1720193086809","date":"Fri Jul 05 16:24:46 BST 2024"}}
+```
+
+
+
+Verify the connection between MEG and Minima by running the webhooks command from the Minima terminal, you should see the output:
+webhooks
+
+```
+ "command" : "webhooks",
+ "status":true,
+ "pending":false,
+ "response":{
+ "webhooks":["#"]}
+```
+
+
+
+
+### Create users
+
+The following types of users are available:
+
+- **Admin** - creates and removes users, adds and removes triggers and endpoints, sets the connection to the Minima node.
+- **Basic** - view only user to the console.
+- **API Caller** - Endpoints can only be called by ‘apicaller’ users - using Basic Authorization Header. Does not grant login access to the console.
+
+For testing, Create an API caller user from the admin page.
+
+
+
+
+## Testing the setup
+
+### Testing Triggers
+
+Triggers allow you to listen to events on the chain and set up alerts for when something specific happens on Minima e.g. when an address sends or receives coins.
+
+
+
+
+Setup a trigger for the `NEWTXPOW` event.
+
+Whenever a new transaction occurs on chain, the event will trigger a POST request to the specified URL with the relevant JSON response.
+For the test, we will use the test URL `http://127.0.0.1:8080/testpost`.
+
+No Extra Data is required.
+
+
+
+
+
+Select **Add New Trigger**
+
+If successful, in the MEG CLI window, you should see the output similar to the following:
+
+```
+TESTPOST RECEIVED : {"minima":{"data":{"relevant":false,"txpow":{"isblock":true,"burn":0,"size":884,"txpowid":"0x000000F332044AD24EF0EAB325A5BC1CE1F4A09A99BF1951199E4F329A8F03E3","header":{"magic":{"currentmintxpowwork":"0x068DB8BAC710CB295E9E1B089A027525460AA64C2F837B4A2339C0EBEDFA43","currentmaxkissvmops":"1024","currentmaxtxn":"256","desiredmintxpowwork":"0x068DB8BAC710CB295E9E1B089A027525460AA64C2F837B4A2339C0EBEDFA43","desiredmaxtxpowsize":"65536","currentmaxtxpowsize":"65536","desiredmaxkissvmops":"1024","desiredmaxtxn":"256"},"date":"Fri Jul 05 17:19:50 BST 2024","blkdiff":"0x010A7EA0176FD8CCB451F7830362F8007344047301152B4DC5CC79A6BC75","cascadelevels":32,"nonce":"99798592797762047.99828701931909910138311404738574454620161","timemilli":"1720196390951","total":"999994932.79702442062990000000000000099999999999784698","mmr":"0x2CA5409C6E51CD702EDE72FC9A5C03D52F36B0D0B93AD48351438EC63B7BA510","txbodyhash":"0xFD29478185F192E84CA8860FD770A910352A28CF46C3E66FB3F40629B12725F1","chainid":"0x00","block":"931293","customhash":"0x00","superparents":[{"difficulty":0,"parent":"0x000000F3E54954FEAC8183457E70B791DB544A80264034F5D72477E62F2DE97B","count":1},{"difficulty":2,"parent":"0x0000002FD4B4220324A6C70BC866FB79F43AD4C4AC64F919835ED16508BD51F5","count":2},{"difficulty":5,"parent":"0x00000007224C8B0F64581B85AC28855322716B3D587F863E72A54B5296ED0FBE","count":3},{"difficulty":6,"parent":"0x0000000386DFB9EF42D1882F749F44DBA873850C2D106D6E5A6786931CD4E233","count":1},{"difficulty":7,"parent":"0x000000012F2104DBE1643473E81314F76BBF88014B037068D0D5B85E805648C8","count":1},{"difficulty":8,"parent":"0x00000000D8FE3A33BEC316EF113C82ABDB90D19067801433DCC1374F3C994562","count":1},{"difficulty":9,"parent":"0x000000005097F0D3CACD78B92C7FDE069C7CC1BA06141B729330DE3E6DD25D2F","count":1},{"difficulty":10,"parent":"0x000000002918D212D5B4B8B37F5D86F2E8A3AF461565826329E599ED2A7DEFAA","count":1},{"difficulty":12,"parent":"0x000000000B000FFB75C23D99C81C45692328F54CA0DE0B75ED10CA01EB54D101","count":2},{"difficulty":13,"parent":"0x00000000062FFA8AD59159A86C8DB38F29EEB638BB45286A2D959B8CABC82E75","count":1},{"difficulty":16,"parent":"0x0000000000B4CB70648FEA38BFBB4770333D062C088C1E3E9C28CAA52FD6FBE0","count":3},{"difficulty":17,"parent":"0x0000000000027AC01DDD0C66C98047A73F703F3D5200E33E742A2838D4F727E9","count":1},{"difficulty":19,"parent":"0x0000000000002B67F865461B9F2DAC7A14D0C7A070F46DAE04E8C5FE6ABF0F98","count":2},{"difficulty":31,"parent":"0x00","count":12}]},"hasbody":true,"body":{"witness":{"mmrproofs":[],"scripts":[],"signatures":[]},"txnlist":[],"burntxn":{"outputs":[],"inputs":[],"state":[],"linkhash":"0x00","transactionid":"0xDECA244460B704393E8ACB5F6CCFCDDBFF6AA0172D56AA835340FBBD78F3FFC1"},"txndiff":"0x5BCE215703AB919D36898FE644FA27DCB8A9F02FF6F1EB362AE353E33E5E","burnwitness":{"mmrproofs":[],"scripts":[],"signatures":[]},"txn":{"outputs":[],"inputs":[],"state":[],"linkhash":"0x00","transactionid":"0xDECA244460B704393E8ACB5F6CCFCDDBFF6AA0172D56AA835340FBBD78F3FFC1"},"prng":"0xE49F5E62204186DCF62217C46277E737D31557B0A4D365D48B47B64682437669"},"istransaction":false,"superblock":0}},"event":"NEWTXPOW"},"meg":{"extradata":"","trigger":"NEWTXPOW","url":""}}
+```
+
+
+
+
+{/* */}
+
+### Testing Endpoints
+
+Endpoints enable you to automatically perform actions on Minima from external apps/systems e.g. creating and posting transactions
+
+
+
+
+Create a new endpoint that will run the status command on the Minima node.
+
+**Endpoint:** Enter a name of your choice for the endpoint e.g. `nodestatus`
+**Command:** Enter a Minima command e.g. `status`
+
+
+
+
+Select **Add New Endpoint**
+
+
+
+
+
+From a new Command line window, run
+
+```
+curl http://127.0.0.1:8080/api/nodestatus -X POST --user api:123
+```
+
+The status response from the node should be returned.
+
+
+
+
+### Testing the Wallet API
+
+The Wallet API is available out of the box and allows you to perform simple Wallet functionality for any number of Users.
+
+You will need to securely store these details for your users. This information will not be stored on the node and will not be shown again.
+
+
+
+
+From a new Command line window, run
+
+```
+curl http://127.0.0.1:8080/wallet/create -X POST --user api:123
+```
+
+A new wallet will be generated with a random seed phrase
+
+Example response:
+```
+{"command":"keys","params":{"action":"genkey"},"status":true,"pending":false,"response":{"phrase":"COMFORT THOUGHT TRIGGER JEWEL DRAGON SOUP GALAXY CRUISE POTTERY SCRUB SEED POWDER AROUND FACULTY HOBBY SORT LIQUID PHYSICAL OUTSIDE ODOR ARGUE CORRECT TYPICAL EXHIBIT","privatekey":"0xF21AB974CCE540C6317A1C798468B8B6C62DFC683E16AF21F5F6B0F5CCFA9C1C","modifier":0,"publickey":"0x748AD2A44CAC51150DFABBEBDD1809CA5D072B467B4D24A5193791D9F9703369","script":"RETURN SIGNEDBY(0x748AD2A44CAC51150DFABBEBDD1809CA5D072B467B4D24A5193791D9F9703369)","address":"0x604FDC92467EAF7C7890BE5E85BF0022E61EDB92E2BE8D93CB7FFE3D008B023D","miniaddress":"MxG08309VE94HJUYTU7H45UBQ2RU012SZFDN4N2NQ6P7WRVVZUG12Z27MZ163GR"}}
+```
+
+
+
+
+
+## Relevant User Guides
+
+
+
+
+
+
+
+{/*
+### Export chain history to MySQL
+
+We recommend setting up a connection from your Minima node to a MySQL database for the purpose of recording and storing full block history that is automatically pruned from the node after 12 hours.
+This way you can always query your SQL database for transactions.
+Download and install MySQL
+Create a database called archivedb on a port of your choice
+Create a user archiveuser with full access to archivedb
+Check the connection from the Minima node to the database using the following command into the Minima terminal
+
+mysql host:127.0.0.1:3306 user:archiveuser password:archiveuserpassword database:archivedb action:info
+
+You should see an output similar to the following:
+```
+{
+ "command":"mysql",
+ "params":{
+ "host":"127.0.0.1:3306",
+ "user":"archiveuser",
+ "password":"archiveuserpassword",
+ "database":"archivedb",
+ "action":"info"
+ },
+ "status":true,
+ "pending":false,
+ "response":{
+ "archive":{
+ "archivestart":860695,
+ "archiveend":960695,
+ "archivetotal":100000
+ },
+ "mysql":{
+ "mysqlstart":-1,
+ "mysqlend":-1,
+ "mysqltotal":0
+ },
+ "autobackup":false
+ }
+}
+```
+
+Set autobackups on, this will periodically sync blocks and txpow data from the node to the SQL database.
+
+```
+mysql host:127.0.0.1:3306 user:archiveuser password:archiveuserpassword database:archivedb action:autobackup enable:true
+```
+
+You should see an output similar to the following, with autobackup set to true.
+```
+{
+ "command":"mysql",
+ "params":{
+ "host":"127.0.0.1:3306",
+ "user":"archiveuser",
+ "password":"archiveuserpassword",
+ "database":"archivedb",
+ "action":"autobackup",
+ "enable":"true"
+ },
+ "status":true,
+ "pending":false,
+ "response":{
+ "autobackup":true
+ }
+}
+```
+The first backup will take place within 24 hours.
+Then to query for a specific txpow (block), you can use
+mysql ..LOGIN_DETAILS.. action:findtxpow txpowid:0x00FFEEDD.. */}
diff --git a/content/docs/run-a-node/mega-node.mdx b/content/docs/run-a-node/mega-node.mdx
index d73671f..63eaba9 100644
--- a/content/docs/run-a-node/mega-node.mdx
+++ b/content/docs/run-a-node/mega-node.mdx
@@ -1,149 +1,171 @@
----
-title: Run a Mega Node
-description: Learn how to run a Mega Node
-tag: run-a-node
----
-
-A Mega node is similar to an Archive node in that that it can recover any Minima user that has lost access to their node or requires a re-sync to the chain.
-
-A Mega node does not also have to be an archive node although the two can be run together on the same node.
-
-What does it do?
-
-A Mega node stores `all unspent` coins with their proofs, this differs to a standard node which only stores the coins (and proofs) that are relevant to the user.
-
-## System requirements
-
-The following requirements are separate to any specs required for non Minima related processes.
-
-**Processing**: 2 CPU
-**Memory**: 8GB RAM
-**Storage**: 5GB storage
-
-We do not recommend running a Mega node from an Android device as the RAM consumption is considerably higher than a standard node.
-
-The Mega node must be online constantly to remain in sync with the chain. Downtime of less than 24 hours is acceptable.
-
-## Ports
-
-If running an archive node on a desktop, no port forwarding is required.
-
-If running a public archive node on a server, open inbound connections on port 9001 (or the main custom Minima port you have chosen).
-
-## How to start a Mega node
-
-import { Tab, Tabs } from "fumadocs-ui/components/tabs"
-
-
-
-
-### Start (or update) a node
-
-Start (or update) a node in the same way as as a normal node, adding the `-megammr` startup parameter. See examples below.
-
-
-
-
- ```bash
-java -jar /path/to/minima.jar -mdsenable -mdspassword YOURSECUREPASSWORD -megammr
-```
-
-
-
-
-
-1. Start a node as per the Run a Node section for Windows or Mac.
-2. Once running, on the Settings tab, under Advanced Params, tick the "Use custom parameters" box
-3. Enter `-megammr`
-4. Close the window and restart the node by relaunching the JNLP
-
-
-
-
-Start a node as per the Run a Node section for Docker desktop or Linux VPS (Docker). However, when starting the container, add the following environment variable to the start up command:
-
-`-e minima_megammr=true`
-
-If you already have other Minima containers running, you can start a separate Mega node by changing the port
-
-e.g. `-p 6001-6003:9001-9003`
-
-
-
-
-```bash
-docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_desktop=true -e minima_megammr=true -v C:\Users\INSERTUSERNAME\megaminimadocker:/home/minima/data -p 9001-9003:9001-9003 --restart unless-stopped --name megaminima minimaglobal/minima:latest
-```
-
-
-
-
-
-```bash
-docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_desktop=true -e minima_megammr=true -v ~/megaminimadocker:/home/minima/data -p 9001-9003:9001-9003 --restart unless-stopped --name megaminima minimaglobal/minima:latest
-```
-
-
-
-
-
-
-
-
-
-
-
-
-
-### Join the network
-
-Once the node is running, you will need to join the Peer-to-Peer network, enter the following command from the Minima terminal/RPC client:
-
-`peers action:addpeers peerslist:https://spartacusrex.com/minimapeers.txt`
-
-Alternatively use your own list of peers.
-
-You should see the response below, wait a few moments to receive the initial blockchain download.
-
-```json
-{
- "command": "peers",
- "params": {
- "action": "addpeers",
- "peerslist": "https://spartacusrex.com/minimapeers.txt"
- },
- "status": true,
- "pending": false,
- "response": {
- "message": "Peers added to checking queue.."
- }
-}
-```
-
-
-
-
-### Chain sync or import historical data
-
-A Mega node should be backfilled with the chain history so that the node has a complete database of all the coins since the blockchain started.
-
-You can either:
-
-- [Chain resync](/docs/user-guides/node-recovery/chain-resync) the Mega node from an Archive node, or
-- Import a MegaMMR `.mmr` file shared from another Mega node runner by running the following command from the Minima Terminal, RPC Client or Terminal MiniDapp.
-
-Daily .mmr exports can be found [here](https://spartacusrex.com/megaarchive/).
-
-
- The .mmr file must have been generated no longer than 1 week ago.
-
-
-To import the .mmr file, run the following command:
-
-```bash title="Terminal"
-megammr action:import file:[PathToFile]/megammr.mmr
-```
-
-
-
-
+---
+title: Run a Mega Node
+description: Learn how to run a Mega Node
+tag: run-a-node
+---
+
+A Mega node is similar to an Archive node in that that it can recover any Minima user that has lost access to their node or requires a re-sync to the chain.
+
+A Mega node does not also have to be an archive node although the two can be run together on the same node.
+
+What does it do?
+
+A Mega node stores `all unspent` coins with their proofs, this differs to a standard node which only stores the coins (and proofs) that are relevant to the user.
+
+## System requirements
+
+The following requirements are separate to any specs required for non Minima related processes.
+
+- **Processing**: 2 CPU
+- **Memory**: 8GB RAM
+- **Storage**: 5GB storage
+
+We do not recommend running a Mega node from an Android device as the RAM consumption is considerably higher than a standard node.
+
+The Mega node must be online constantly to remain in sync with the chain. Downtime of less than 24 hours is acceptable.
+
+## Ports
+
+If running an archive node on a desktop, no port forwarding is required.
+
+If running a public archive node on a server, open inbound connections on port 9001 (or the main custom Minima port you have chosen).
+
+## How to start a Mega node
+
+import { Tab, Tabs } from "fumadocs-ui/components/tabs"
+
+
+
+
+### Start (or update) a node
+
+Start (or update) a node in the same way as as a normal node, adding the `-megammr` startup parameter. See examples below.
+
+
+
+
+
+1. Create a new folder and copy the minima.jar into that folder. We will run everything from there.
+2. Open your command line interface/terminal
+3. Copy the path to the folder and from the command line, `cd` into that folder
+
+```
+cd C:\Users\Bob\MyMinimaFolder\
+```
+
+
+ To avoid typing in the folder path, drag and drop the folder into the command line window.
+
+
+4. Enter the following into the command line window to start Minima
+
+Set your password for the MiniDapp system by replacing `INSERTPASSWORD` with your own.
+
+
+```bash title="Terminal"
+java -jar minima.jar -data .minima -p2pnodes megammr.minima.global:9001 -mdsenable -mdspassword INSERTPASSWORD
+```
+
+
+
+
+
+1. Start a node as per the Run a Node section for Windows or Mac.
+2. Once running, on the Settings tab, under Advanced Params, tick the "Use custom parameters" box
+3. Enter `-megammr`
+4. Close the window and restart the node by relaunching the JNLP
+
+
+
+
+Start a node as per the Run a Node section for Docker desktop or Linux VPS (Docker). However, when starting the container, add the following environment variable to the start up command:
+
+`-e minima_megammr=true`
+
+If you already have other Minima containers running, you can start a separate Mega node by changing the port
+
+e.g. `-p 6001-6003:9001-9003`
+
+
+
+
+```bash
+docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_desktop=true -e minima_megammr=true -v C:\Users\INSERTUSERNAME\megaminimadocker:/home/minima/data -p 9001-9003:9001-9003 --restart unless-stopped --name megaminima minimaglobal/minima:latest
+```
+
+
+
+
+
+```bash
+docker run -d -e minima_mdspassword=INSERTPASSWORD -e minima_desktop=true -e minima_megammr=true -v ~/megaminimadocker:/home/minima/data -p 9001-9003:9001-9003 --restart unless-stopped --name megaminima minimaglobal/minima:latest
+```
+
+
+
+
+
+
+
+
+
+
+
+
+
+### Join the network
+
+Once the node is running, you will need to join the Peer-to-Peer network, enter the following command from the Minima terminal/RPC client:
+
+`peers action:addpeers peerslist:https://spartacusrex.com/minimapeers.txt`
+
+Alternatively use your own list of peers.
+
+You should see the response below, wait a few moments to receive the initial blockchain download.
+
+```json
+{
+ "command": "peers",
+ "params": {
+ "action": "addpeers",
+ "peerslist": "https://spartacusrex.com/minimapeers.txt"
+ },
+ "status": true,
+ "pending": false,
+ "response": {
+ "message": "Peers added to checking queue.."
+ }
+}
+```
+
+
+
+
+### Chain sync or import historical data
+
+A Mega node should be backfilled with the chain history so that the node has a complete database of all the coins since the blockchain started.
+
+Import a MegaMMR `.mmr` file, generated no longer than 1 week ago, from another Mega node runner by running the following command from the Minima Terminal, RPC Client or Terminal MiniDapp.
+
+Daily .mmr exports can be found [here](https://spartacusrex.com/megaarchive/).
+
+```bash title="Terminal"
+megammr action:import file:[PathToFile]/megammr.mmr
+```
+
+Alternatively, you can [Chain resync](/docs/user-guides/node-recovery/chain-resync) the Mega node from an Archive node,
+
+
+
+
+
+
+## Relevant User Guides
+
+
+
+
\ No newline at end of file
diff --git a/content/docs/run-a-node/meta.json b/content/docs/run-a-node/meta.json
index 6894091..fa0474f 100644
--- a/content/docs/run-a-node/meta.json
+++ b/content/docs/run-a-node/meta.json
@@ -1,21 +1,26 @@
-{
- "title": "Run a node",
- "root": true,
- "pages": [
- "index",
- "system-requirements",
- "---Select your Platform---",
- "android",
- "windows",
- "mac",
- "docker-desktop",
- "linux-vps",
- "linux-vps-system",
- "desktop-cli",
- "---Archive Node---",
- "archive-node",
- "---Mega Node (NEW)---",
- "mega-node",
- "public-wallet"
- ]
-}
+{
+ "title": "Run a node",
+ "root": true,
+ "pages": [
+ "index",
+ "node-types",
+ "firewall-rules",
+ "startup-parameters",
+ "---Full Node---",
+ "android",
+ "windows",
+ "mac",
+ "docker-desktop",
+ "linux-vps-docker",
+ "linux-vps-service",
+ "desktop-cli",
+ "---Archive Node---",
+ "archive-node",
+ "---Mega Node---",
+ "mega-node",
+ "public-wallet",
+ "---Minima E-Gateway (MEG)---",
+ "meg-about",
+ "meg-setup"
+ ]
+}
diff --git a/content/docs/run-a-node/node-types.mdx b/content/docs/run-a-node/node-types.mdx
new file mode 100644
index 0000000..010a7b2
--- /dev/null
+++ b/content/docs/run-a-node/node-types.mdx
@@ -0,0 +1,167 @@
+---
+title: Node Types
+description: Understand the different types of Minima node
+icon: Waypoints
+tag: run-a-node
+---
+import { Card, Cards } from 'fumadocs-ui/components/card';
+import { Callout } from 'fumadocs-ui/components/callout';
+import { Check } from "lucide-react"
+import { X } from "lucide-react"
+
+## Overview
+
+No matter which node type you choose, **all Minima nodes are full nodes** that contribute to finding new blocks, validate all transactions, and provide Proof of Work to secure the chain.
+
+Running a node means that you will run
+1. **The Minima Blockchain** - to make and receive transactions to other users
+2. **Maxima** - to send and receive off-chain messages and data to other users
+3. **The MiniDapp System (MDS)** - to use decentralised applications (if enabled)
+4. **Omnia (Coming soon)** - for fast, cheap transactions
+
+There is no minimum amount of Minima coins required to run a node.
+
+-------------
+
+## Node Options
+
+**The following node types are available:**
+
+1. **Full node** - The default and best option for Android users and small devices. Ideal for regular users who want to participate in the Minima network without worrying about significant storage or technical requirements.
+
+2. **Mega MMR node** - Ideal for those who have access to a server and wish to assist others in the recovery of their coins or host a Minima node for use by others.
+
+3. **Archive node** - Ideal for those who wish to hold a record of all previous block headers (excludes transaction details)
+
+All types of nodes can contribute further to the network's health and resilience by relaying transactions and blocks across the network. This requires the node to be hosted on a server that accepts both incoming and outgoing connections on the base port (default 9001).
+
+-------------
+
+## Supported devices
+
+| Platform | Full Node | Archive Node | Mega (MMR) Node |
+|:------------|:------------------|:------------------|:------------------|
+|Android | | | |
+|Raspberry Pi | | | |
+|Desktop (Windows/Mac/Linux/Docker) | | | |
+|Server (Windows/Linux/Docker) | | | |
+
+## Minimum device specifications
+
+Device specifications are separate to any Operating System and other third party application requirements.
+
+| Platform | Full Node (Docker) | Archive Node | Mega Node |
+|:------------|:------------------|:------------------|:------------------|
+|Processing (CPU) | 2 (4) CPU | 2 CPU | 2 CPU |
+|Memory (RAM) | 2 (4) RAM | 4 RAM | 8 RAM|
+|Storage (GB)* | 2 (4) GB | 5 GB| 5 GB|
+
+*Note that storage requirements will depend on the level of MiniDapp usage.
+
+
+## Functionality
+
+| | Full Node | Archive Node | Mega Node |
+|:------------|:------------------|:------------------|:------------------|
+|Ease of setup | Basic | Advanced | Advanced |
+|**Basic functionality** | | | |
+|Receive Minima, custom tokens and NFTs | Yes | Yes | Yes |
+|Send Minima, custom tokens and NFTs | Yes | Yes | Yes |
+|Mint custom tokens and NFTs | Yes | Yes | Yes |
+|Send data and messages over Maxima | Yes | Yes | Yes |
+|**Blockchain functionality** | | | |
+|Creates blocks | Yes | Yes | Yes |
+|Validates transactions | Yes | Yes | Yes |
+|Can be synced back to Genesis block | No | Yes | Yes |
+|Can store entire block history (excludes transaction details) | No | Yesx | No |
+|Can store complete coin set (excludes transaction details) | No | No | Yesx |
+|**Node recovery** | | | |
+|Recover wallets, backups and chain re-sync (for personal use) | No | Yes | Yes* |
+|Recover wallets, backups and chain re-sync (for other users) | No | Yes | Yes*+ |
+|**Data Export functionality** | | | |
+|Export coins, transactions and block data to MySQL | Yes | Yes* | Yes |
+|Export block history to a file (.raw.dat) (excludes transaction details) | No | Yes | No |
+|Export coin history to a file (.mmr) (excludes transaction details) | No | No | Yes |
+|**Advanced functionality** | | | |
+|Create and/or post transactions on behalf of external users | No | No | Yes |
+|Minting tokens on behalf of external users | No | No | Yes |
+|Host public facing minidapps | No | No | Yes |
+
+x if node is re-synced to Genesis block
+* recommended option
++ requires server hosting
+
+
+
+Before taking a closer look at the differences between these node types it's useful to understand, via an analogy, how Minima stores coins:
+
+*If all the coins in the Minima blockchain were a page in a book, every user would only hold the pages that relate to them, as well as the spine. When spending their coins, the user shares their relevant pages (coin proofs) with the other users on the network, who can check that they fit with their own spine - confirming the user's coins are valid.*
+
+
+## Detailed specifications
+
+All Minima nodes have a **txpow (transaction) database** and an **archive database**.
+
+The **txpow database** contains transactions and full blocks. This is limited to the most recent blocks from the unpruned section of the chain - approximately the last 24 hours worth.
+
+The **archive database** contains the last 2 months of **sync blocks**, which do not include transaction details but do hold all the MMR proofs for coins spent or created in the block. Sync blocks older than 2 months are not stored unless the node is set up as an archive node.
+
+**Archive nodes** store **all** the **sync blocks** from after the archive node is started, no pruning is done after 2 months.
+
+
+An archive node can only be used to recover users who created their nodes after your archive node was created. If you wish to be able to recover *any* Minima user, you must perform a chain re-sync from an archive node that holds the entire blockchain since genesis.
+
+
+### Full node (default)
+
+A full node can run on almost any device — be it a mobile phone, desktop computer, raspberry pi, or a server.
+
+This is the default node type designed for efficiency. It is perfect for everyday users and small devices wishing to utilise the Minima network. It uses the least amount of memory as possible, making it ideal for devices with limited storage.
+
+**Transaction history:** Full nodes store only the most recent transaction history in full, roughly the last 24 hours' worth. It prunes older blocks to keep the storage space minimal but keeps a compact record of the pruned history, called the Cascade, to ensure it can validate transactions and create new blocks.
+Users keep a record of their own full transaction history which can be backed up or exported.
+
+**Coin records:** Full nodes only hold the proofs for the coins that are relevant to the user (i.e. their own pages in the book), keeping storage and processing requirements minimal.
+
+
+### Mega (MMR) Node
+
+A Mega node must be online constantly to remain in sync with the chain. Downtime of less than 24 hours is acceptable. It requires a server or other device with more considerable processing power and is not suitable for mobile devices.
+
+**Transaction history:** Same as a default full node.
+
+**Coin records:** While it does not permanently store full transaction details, it stores all the proofs needed to verify any coin on the network. This is the entire set of unspent coins for the whole blockchain. Known as the Mega MMR.
+
+**Setup steps:**
+1. Start a node with Mega MMR enabled (-megammr), this will start storing all coins from this point onwards.
+2. Optionally import a Mega MMR file or Archive file from another user which contains the full history
+
+
+### Archive node
+
+Note that storage requirements will gradually increase over time.
+
+An Archive Node is typically run on a server or desktop computer as it requires more storage space.
+
+**Transaction history:** Unlike the default full node, an archive node does not prune older blocks, storing all block headers and coin proofs from the moment it was started. Full transaction details are still pruned after two months.
+
+**Coins:** It maintains a record of all spent and unspent coins since the archive node was started, not just the ones relevant to the user. If an archive file provided by another archive node (which contains data since the Genesis block) is imported, it will hold a complete record of the coins.
+
+**Additional functionality**
+
+- export block, coin and transaction data to an external MySQL database
+- export the chain history to a file, required for syncing new Archive or Mega MMR nodes
+
+**Setup steps:**
+1. Start a node with Archive (-archive) enabled, this will prevent pruning of blocks from that point onwards.
+2. To obtain a complete record since Genesis, import an archive file from another Archive node runner, which contains the full history
+
+
+## Choosing the right node for You
+
+
+**Just Getting Started?** Stick with the default Full Node. It's easy to set up and doesn't demand much from your device.
+
+**Want to Support the Network More?** Consider hosting a Mega MMR node and relaying transactions by allowing incoming connections. You'll contribute to the network's resilience and help other users recover their nodes.
+
+**Want the most complete chain history?** Consider running an Archive node locally or hosting one on a server and relaying transactions by allowing incoming connections. You'll contribute to the network's resilience.
\ No newline at end of file
diff --git a/content/docs/run-a-node/startup-parameters.mdx b/content/docs/run-a-node/startup-parameters.mdx
new file mode 100644
index 0000000..7596359
--- /dev/null
+++ b/content/docs/run-a-node/startup-parameters.mdx
@@ -0,0 +1,105 @@
+---
+title: Startup Parameters
+description: Understand the different start up parameters
+icon: Settings
+tag: run-a-node
+---
+
+Below is a list of all start up parameters.
+
+Please note that not all parameters will be applicable for all platforms.
+
+For docker, these must be converted to environment variables, e.g. `-e minima_clean=true` please see the [Docker](/docs/run-a-node/docker-desktop) guide for details.
+
+## General
+
+| Parameter | Description |
+|----------------------|---------------------------------------------------------------------------------------------------|
+| `-clean` | CAREFUL! Clears existing data, starts a new fresh node. All coins will be lost. |
+| `-port [port]` | Specify the initial port for Minima to use. Range used will be the specified port +4. Default is 9001-9005. |
+| `-host [ipaddress]` | Specify the host IP |
+| `-dbpassword [yourdbpassword]` | Main Wallet / SQL AES password - MUST be specified on first launch. CANNOT be changed later. |
+| `-allowallip` | Allow all IPs for Maxima / Networking. Local IPs won't be allowed otherwise. |
+| `-archive` | Run an Archive node - store all archive data / the cascade to allow for resyncs from this node |
+| `-daemon` | Run in daemon mode with no stdin input (if running Minima as a background service) |
+| `-isclient` | Tells the P2P System that this node can't accept incoming connections |
+| `-server` | Use Server settings - this node can accept incoming connections |
+| `-desktop` | Use Desktop settings - this node can't accept incoming connections |
+| `-rescuenode` | If you connect to a heavier chain, use this MegaMMR node to resync |
+| `-seed` | Use this seed phrase if starting a new node |
+
+## Config
+
+| Parameter | Description |
+|-------------------|--------------------------------------------------------------------------------------------------|
+| `-data` | Specifies the folder for config files, defaulting to a hidden `.minima` folder in the home directory. |
+| `-basefolder` | Sets a default folder for file creation, backup, and restore. Default is the home directory. |
+| `-conf` | Specifies an absolute path to a configuration file. |
+
+## Transaction (TxPoW) management
+
+| Parameter | Description |
+|-------------------|------------------------------------------------------------------------------------------------------------
+| `-txpowdbstore` | How many days to store TxPoW in the internal H2 Database (default 3) |
+| `-notifyalltxpow` | Creates a NEWTXPOW notification for all transactions/blocks |
+| `-mysqlalltxpow` | Store all TxPoW in MySQL when mysql autobackup is enabled |
+
+## MiniDapp System
+
+| Parameter | Description |
+|----------------------|-----------------------------------------------------------------------------------------------------------|
+| `-mdsenable` | Enable the MiniDapp System (default port 9003) |
+| `-mdspassword [yourmdspassword]` | Specify the MiniDapp System login password |
+| `-mdsinit [foldername/path]` | Specify a folder of MiniDAPPs |
+| `-mdswrite [minidapp]` | Give an initial MiniDAPP WRITE access |
+| `-nodefaultminidapps` | Do NOT install the default MiniDAPPs |
+| `-publicmdsuid` | Set your own Session ID for the Public MiniDAPP System (Mega MMR nodes only) |
+| `-nosslmds` | Disable the self signed SSL cert for MDS. Use STunnel or your own SSL proxy instead. |
+
+
+## RPC
+
+| Parameter | Description |
+|----------------------|-----------------------------------------------------------------------------------------------------------|
+| `-rpcenable` | Enable remote procedure call |
+| `-rpcssl` | Use Self Signed SSL cert to run RPC |
+| `-rpcpassword [yourrpcpassword]` | Set Basic Auth password for RPC calls (Use with SSL / stunnel). Only secure if used with SSL. |
+| `-rpcclrf` | Use CRLF at the end of the RPC headers (NodeJS) |
+
+## Test nodes
+
+| Parameter | Description |
+|----------------------|-----------------------------------------------------------------------------------------------------------|
+| `-genesis` | Start the node from the genesis block (automatically uses -clean) |
+| `-test` | Uses test parameters e.g. faster block times |
+| `-connect [ip:port,ip:port]` | Disable the automatic P2P system and create your own network by manually connecting to this list of host:port |
+| `-nop2p` | Disable the automatic P2P system |
+| `-noconnect` | Stops the P2P system from connecting to other nodes until it has been connected to |
+| `-nosyncibd` | Do not sync IBD (for testing) |
+| `-solo` | Run a solo/private network (-test -nop2p) and will run -genesis ONLY the first time |
+| `-testchainlength` | Specify the length of the tree to keep in -test mode (default is 32) |
+
+## Mobile
+
+| Parameter | Description |
+|-------------------|---------------------------------------------------------------------------------------------------------------|
+| `-mobile` | Sets this device to a mobile device - used for metrics only |
+| `-limitbandwidth` | Limit the amount sent for archive sync |
+| `-noshutdownhook` | Do not use the shutdown hook (Android) |
+| `-slavenode` | Connect to the node on the given ip:port only and only accept TxBlock messages |
+
+## Debuggings
+
+| Parameter | Description |
+|-----------------------|---------------------------------------------------------------------------------------------------------|
+| `-p2p-log-level-info` | Set the P2P log level to info |
+| `-p2p-log-level-debug` | Set the P2P log level to debug |
+| `-syncibdlogs` | Show detailed SYNC_IBD logs |
+
+
+## Help
+
+| Parameter | Description |
+|----------------------|-----------------------------------------------------------------------------------------------------------|
+| `-showparams` | Show relevant startup params on launch |
+| `-help` | Print help for the startup parameters |
\ No newline at end of file
diff --git a/content/docs/run-a-node/windows.mdx b/content/docs/run-a-node/windows.mdx
index ebebd0b..173bd15 100644
--- a/content/docs/run-a-node/windows.mdx
+++ b/content/docs/run-a-node/windows.mdx
@@ -1,92 +1,92 @@
----
-title: Windows
-description: Run a Minima node on Windows
-tag: run-a-node
----
-
-Minima can be installed as a desktop application, launched from a JNLP file, the Java Network Launch Protocol.
-
-
- If you prefer to run Minima from the command line visit the [Desktop Command
- Line](/docs/run-a-node/desktop-cli) page.
-
-
-## Setting up your node
-
-
-
-
-
-### Open Web Start
-
-Download and install Open Web Start - the new updated version of Java Web Start, using the default options.
-
-
-
-
-
-### Minima JNLP
-
-Download the [Minima JNLP](https://www.spartacusrex.com/javaws/minima.jnlp) file and open / double-click it to install Minima as an application. A desktop shortcut will be created for you and you will be shown a security warning, select Run.
-
-
-
-
-
-
-
-### Launch Minima on startup
-
-Set Minima to start automatically when your PC starts by referring to this [guide](https://support.microsoft.com/en-us/windows/add-an-app-to-run-automatically-at-startup-in-windows-10-150da165-dcd9-7230-517b-cf3c295d89dd).
-
-
-
-
-
-### Set your password
-
-Set your own password - on the Settings tab, use the `-mdspassword` parameter in the **Advanced params** section.
-
-
-
-
- Enter a password over 12 characters using `a-z, A-Z, 0-9, !@#=?+<>,.-_ '()/ `characters only and without spaces, then close the window and restart the app for this to take effect.
-
-
-
-
-
-
-Once restarted, select Launch MinimaOS to access your node and login with your password.
-
-Congratulations on starting your node!
-
-
- When shutting down your PC, please shutdown Minima first by closing the
- launcher window and waiting for the shutdown to complete. This ensures your
- node does not get corrupted by an unexpected shutdown.
-
-
-## Updating your node
-
-To update your node to the latest version of Minima, simply close the dialog box to shut it down, then relaunch the JNLP. Any updates will be checked for and downloaded automatically.
-
-Please see the essential [first steps](#first-steps) to complete now your node is running.
-
-
-## First steps
-
-The first time you install Minima, you will need to
-
-- Connect to the network
-- Write down your seed phrase
-
-
- For more information on how to connect to the network and secure your node,
- please refer to [User Guides](/docs/user-guides/jointhenetwork).
-
+---
+title: Windows
+description: Run a Minima node on Windows
+tag: run-a-node
+---
+
+Minima can be installed as a desktop application, launched from a JNLP file, the Java Network Launch Protocol.
+
+
+ If you prefer to run Minima from the command line visit the [Desktop Command
+ Line](/docs/run-a-node/desktop-cli) page.
+
+
+## Setting up your node
+
+
+
+
+
+### Open Web Start
+
+Download and install Open Web Start using the default options.
+
+
+
+
+
+### Minima JNLP
+
+Download the [Minima JNLP](https://www.spartacusrex.com/javaws/minima.jnlp) file and open / double-click it to install Minima as an application, ensuring it always launches with Open Web Start. A desktop shortcut will be created for you and you will be shown a security warning, select Run.
+
+
+
+
+
+
+
+### Launch Minima on startup
+
+Set Minima to start automatically when your PC starts by referring to this [guide](https://support.microsoft.com/en-us/windows/add-an-app-to-run-automatically-at-startup-in-windows-10-150da165-dcd9-7230-517b-cf3c295d89dd).
+
+
+
+
+
+### Set your password
+
+Set your own password - on the Settings tab, use the `-mdspassword` parameter in the **Advanced params** section.
+
+
+
+
+ Enter a password over 12 characters using `a-z, A-Z, 0-9, !@#=?+<>,.-_ '()/ `characters only and without spaces, then close the window and restart the app for this to take effect.
+
+
+
+
+
+
+Once restarted, select Launch MinimaOS to access your node and login with your password.
+
+Congratulations on starting your node!
+
+
+ When shutting down your PC, please shutdown Minima first by closing the
+ launcher window and waiting for the shutdown to complete. This ensures your
+ node does not get corrupted by an unexpected shutdown.
+
+
+## Updating your node
+
+To update your node to the latest version of Minima, simply close the dialog box to shut it down, then relaunch the JNLP. Any updates will be checked for and downloaded automatically.
+
+Please see the essential [first steps](#first-steps) to complete now your node is running.
+
+
+## First steps
+
+The first time you install Minima, you will need to
+
+- Connect to the network
+- Write down your seed phrase
+
+
+ For more information on how to connect to the network and secure your node,
+ please refer to [User Guides](/docs/user-guides/join-the-network).
+
diff --git a/content/docs/user-guides/advanced/cold-storage.mdx b/content/docs/user-guides/advanced/cold-storage.mdx
index 922c4db..8a7c162 100644
--- a/content/docs/user-guides/advanced/cold-storage.mdx
+++ b/content/docs/user-guides/advanced/cold-storage.mdx
@@ -1,291 +1,293 @@
----
-title: Cold Storage setup
-description: Learn how to store your Minima in cold storage
-tag: user-guides
----
-
-We recommend this method for advanced users holding a large amount of Minima.
-
-Minima transactions require recent coin proofs of your funds and up-to-date data from the chain. This requires a node to be online as much as possible.
-
-However, to create a truly secure solution it is imperative that the private keys are NEVER online EVER. This can be achieved by using an offline device to sign your transactions.
-
-This setup involves:
-
-1. Creating your node for the first time on an offline device,
-2. wiping your private keys from the node,
-3. backing up and restoring the keyless backup to an online device,
-4. restoring the private keys to the offline device
-5. locking the node with a password - this prevents you needing to input the seed phrase to unlock and sign your transactions.
-
-You will be able to see your wallet addresses and receive funds as normal on the online device.
-
-To transact:
-
-1. Create your transactions on your online device
-2. Export the transaction and transfer it to the offline device
-3. Sign the transaction on your offline device, providing the password used to lock the node
-4. Export the signed transaction and transfer it to the online device
-5. Post your transaction on your online device
-
-### Setup
-
-You will need a USB key and 2 devices:
-
-
-
-Offline Node
-
-No internet connection/bluetooth/nearby sharing should be enabled. This device will hold your private keys and will be used to sign your transactions offline.
-
-1. Set up device 1 so that it can start a Minima node.
-
-- `Android:` download the latest app
-- `Docker:` ensure you have docker installed
-- `Manual on desktop:` ensure you have java installed and the minima.jar downloaded
-
-2. Turn off the internet connection/bluetooth/nearby sharing and disable the WiFi, this device should never be connected to the internet again.
-
-3. Start a new Minima node. Your private keys will be generated but as it is not connected to the internet, it will NOT connect to the chain.
-
-4. Using the command line interface where the Minima logs are running or the Docker Terminal, run the `vault` command to view your 24-word seed phrase and the seed itself.
- If using a phone as your offline device, you can also go to the **Vault** page and view your seed from the menu there.
-
-Example:
-
-```bash title="Terminal"
-vault
-{
- "command": "vault",
- "status": true,
- "pending": false,
- "response": {
- "phrase": "PENALTY MEAN FEDERAL SENSE AGREE SCALE EXHAUST ARROW HUB DAY VELVET AISLE LATIN NATURE CHEF GAUGE DARING REFUSE TINY REMIND MOMENT VINTAGE POLE ELEGANT",
- "seed": "0x64D1F2256C1C810A0AE273A397AC14C92335A234BFFBE259D9297CCF4F559F4B",
- "locked": false
- }
-}
-```
-
-
-
-It is essential to keep your 24 word seed phrase safe.
-You can recover your node with just those words. Anyone with access to your words can steal your coins!
-
-
-
-
-
-
-5. Write down the 24 word seed phrase and store it somewhere secure. You do not need to write down the 0x seed but you will need this in the next step.
-
-6. Wipe the private keys from the node by running the following command:
-
-```bash title="Terminal"
-vault action:wipekeys seed:0x..
-```
-
-Example:
-
-```bash title="Terminal"
-vault action:wipekeys seed:0x64D1F2256C1C810A0AE273A397AC14C92335A234BFFBE259D9297CCF4F559F4B
-
-# Response
-{
- "command": "vault",
- "params": {
- "action": "lock",
- "seed": "0x64D1F2256C1C810A0AE273A397AC14C92335A234BFFBE259D9297CCF4F559F4B"
- },
- "status": true,
- "pending": false,
- "response": "All private keys wiped!"
-}
-```
-
-**Your node no longer has the keys, not even encrypted in your UserDB. They are fully wiped.**
-
-You can only restore your keys with your 24 words using
-
-```bash title="Terminal"
-vault action:restorekeys phrase:"24 WORD SEED PHRASE HERE"
-```
-
-7. Backup the wiped node. You will restore to your online node later.
- _Optionally also set a password for the backup using A-Z, a-z and 0-9 characters only, no symbols_
-
-```bash title="Terminal"
-backup file:nokeysbackup.bak password:...
-```
-
-8. Restore your private keys to the offline node
-
-```bash title="Terminal"
-vault action:restorekeys phrase:"YOUR 24 WORDS HERE"
-```
-
-9. Password lock your keys with a long, secure password - this will encrypt your private keys which can be decrypted for the purpose of signing transactions when required. This ensures you do not have to use the 24 words again, which can be kept somewhere safe and not touched again.
-
-
- The only time you should access your 24 words is if you lose your offline
- device! In this situation you can restore your wiped backup to a new offline
- device.
-
-
-```bash title="Terminal"
-vault action:passwordlock password:setvaultpassword confirm:setvaultpassword
-```
-
-On Device 2 - The online node
-
-1. Start a new node on an online device - your device 2
-
-2. Restore the wiped backup to this online node, entering the password from the backup if you set one:
-
-```bash title="Terminal"
-restore file:nokeysbackup.bak password:...
-```
-
-3. The node will shutdown, restart it to access your restored node.
-
-This online node is now the same node as the one on the offline device, however it will be able to connect to the blockchain.
-
-The online node can be used as normal to receive funds but cannot send any funds, it is essentially read only.
-
-To send funds from your wallet, you will need to use both devices.
-
-### Transacting
-
-To make a transaction when using the Cold Storage solution, there are 5 steps. You will need to use the Terminal MiniDapp,Docker Terminal, or your desktop Command Line where Minima is running:
-
-1. On the online node, use the `sendnosign` command to create a transaction file, sending the amount you wish to send to your chosen recipient's address
-2. Transfer the unsigned transaction file to the offline device
-3. On the offline node, use the `sendsign` command to sign the transaction with your private keys
-4. Transfer the signed transaction file to the online device
-5. On the online device, use the `sendpost` command to post the signed transaction
-
-#### Walk-through
-
-1. On your online node, create a transaction using `sendnosign`.
-
-
-`sendnosign` works exactly like the traditional `send` function but instead of sending, will export an unsigned transaction (.txn) file which needs to be transferred to your offline device for signing with your private keys.
-
-For additional help, use `help command:sendnosign` or `help command:send`.
-
-
-
-Example output: (sending 1 Minima to the chosen address)
-
-```bash title="Terminal"
-sendnosign amount:1 address:MxG0843TSJZ6U35CZSSR2D17G4TE9M68JVT4KUNR4TBQ6H9TRBFZYH23D50TRSH
-
-#Response
-{
- "command":"sendnosign",
- "params":{
- "amount":"1",
- "address":"MxG0843TSJZ6U35CZSSR2D17G4TE9M68JVT4KUNR4TBQ6H9TRBFZYH23D50TRSH"
- },
- "status":true,
- "pending":false,
- "response":{
- "txpow":"/home/minima/data/unsignedtransaction-1672851796504.txn"
- }
-}
-```
-
-2. Find the file in your Minima base folder and transfer the transaction file to your offline node via a USB key.
-
-3. To sign the transaction file, use `sendsign` inserting the name of the .txn file and your Vault password that you used in step 9 above to encrypt (passwordlock) your keys. This will decrypt your keys, sign the transaction and automatically re-encrypt them with the same password.
-
-```bash title="Terminal"
-sendsign file:... password:yourvaultpassword
-```
-
-This will export a .txn file containing your signed transaction.
-
-Example:
-
-```bash title="Terminal"
-sendsign file:/home/minima/data/unsignedtransaction-1672851796504.txn password:yourvaultpassword
-
-#Response
-{
- "command":"sendsign",
- "params":{
- "file":"/home/minima/data/unsignedtransaction-1672851796504.txn"
- "password":"yourvaultpassword"
- },
- "status":true,
- "pending":false,
- "response":{
- "txpow":"/home/minima/data/signedtransaction-1672852113421.txn"
- }
-}
-```
-
-Alternatively, you can unlock your node first using:
-
-```bash title="Terminal"
-vault action:passwordunlock password:yourvaultpassword
-```
-
-and then use
-
-```bash title="Terminal"
-sendsign file:......
-```
-
-then,relock your node using:
-
-```bash title="Terminal"
-vault action:passwordlock password:yourvaultpassword confirm:yourvaultpassword
-```
-
-4. Transfer the signed transaction file back to your online node using a USB key, ensuring it is in your node's basefolder.
-
-5. Broadcast the transaction to the Minima network with `sendpost file:` function.
-
-Example:
-
-```bash title="Terminal"
-sendpost file:/home/minima/data/signedtransaction-1672852113421.txn
-
-#Response
-{
- "command":"sendpost",
- "params":{
- "file":"/home/minima/data/signedtransaction-1672852113421.txn"
- },
- "status":true,
- "pending":false,
- "response":{
- "txpow":{
- "txpowid":"0xB41C5F1D68E33410337D0A98EFF5C937F1B9189C46F0BB3F82271B017BFF07F3",
- …
-
-```
-
-That's it. You can also view the signed or unsigned transaction at any time using `sendview file:`
-
-Example output:
-
-```bash title="Terminal"
-sendview file:/home/minima/data/signedtransaction-1672852113421.txn
-
-#Response
-{
- "command":"sendview",
- "params":{
- "file":"/home/minima/data/signedtransaction-1672852113421.txn"
- },
- "status":true,
- "pending":false,
- "response":{
- "txpow":{
- "txpowid":"0xB41C5F1D68E33410337D0A98EFF5C937F1B9189C46F0BB3F82271B017BFF07F3",
- "isblock":false,
- "istransaction":false,
- "superblock":-1…
-```
+---
+title: Cold Storage setup
+description: Learn how to store your Minima in cold storage
+tag: user-guides
+---
+
+We recommend this method for advanced users holding a large amount of Minima.
+
+Minima transactions require recent coin proofs of your funds and up-to-date data from the chain. This requires a node to be online as much as possible.
+
+However, to create a truly secure solution it is imperative that the private keys are NEVER online EVER. This can be achieved by using an offline device to sign your transactions.
+
+This setup involves:
+
+1. Creating your node for the first time on an offline device,
+2. wiping your private keys from the node,
+3. backing up and restoring the keyless backup to an online device,
+4. restoring the private keys to the offline device
+5. locking the node with a password - this prevents you needing to input the seed phrase to unlock and sign your transactions.
+
+You will be able to see your wallet addresses and receive funds as normal on the online device.
+
+To transact:
+
+1. Create your transactions on your online device
+2. Export the transaction and transfer it to the offline device
+3. Sign the transaction on your offline device, providing the password used to lock the node
+4. Export the signed transaction and transfer it to the online device
+5. Post your transaction on your online device
+
+## Setup
+
+You will need a USB key and 2 devices:
+
+### Offline Node (device 1)
+
+No internet connection/bluetooth/nearby sharing should be enabled. This device will hold your private keys and will be used to sign your transactions offline.
+
+1. Set up device 1 so that it can start a Minima node.
+
+- `Android:` download the latest app
+- `Docker:` ensure you have docker installed
+- `Manual on desktop:` ensure you have java installed and the minima.jar downloaded
+
+
+2. Turn off the internet connection/bluetooth/nearby sharing and disable the WiFi, this device should never be connected to the internet again.
+
+3. Start a new Minima node. Your private keys will be generated but as it is not connected to the internet, it will NOT connect to the chain.
+
+4. Using the command line interface where the Minima logs are running or the Docker Terminal, run the `vault` command to view your 24-word seed phrase and the seed itself.
+ If using a phone as your offline device, you can also go to the **Vault** page and view your seed from the menu there.
+
+Example:
+
+```bash title="Terminal"
+vault
+{
+ "command": "vault",
+ "status": true,
+ "pending": false,
+ "response": {
+ "phrase": "PENALTY MEAN FEDERAL SENSE AGREE SCALE EXHAUST ARROW HUB DAY VELVET AISLE LATIN NATURE CHEF GAUGE DARING REFUSE TINY REMIND MOMENT VINTAGE POLE ELEGANT",
+ "seed": "0x64D1F2256C1C810A0AE273A397AC14C92335A234BFFBE259D9297CCF4F559F4B",
+ "locked": false
+ }
+}
+```
+
+
+
+It is essential to keep your 24 word seed phrase safe.
+You can recover your node with just those words. Anyone with access to your words can steal your coins!
+
+
+
+
+
+5. Write down the 24 word seed phrase and store it somewhere secure. You do not need to write down the 0x seed but you will need this in the next step.
+
+6. Wipe the private keys from the node by running the following command:
+
+```bash title="Terminal"
+vault action:wipekeys seed:0x..
+```
+
+Example:
+
+```bash title="Terminal"
+vault action:wipekeys seed:0x64D1F2256C1C810A0AE273A397AC14C92335A234BFFBE259D9297CCF4F559F4B
+
+# Response
+{
+ "command": "vault",
+ "params": {
+ "action": "lock",
+ "seed": "0x64D1F2256C1C810A0AE273A397AC14C92335A234BFFBE259D9297CCF4F559F4B"
+ },
+ "status": true,
+ "pending": false,
+ "response": "All private keys wiped!"
+}
+```
+
+**Your node no longer has the keys, not even encrypted in your UserDB. They are fully wiped.**
+
+You can only restore your keys with your 24 words using
+
+```bash title="Terminal"
+vault action:restorekeys phrase:"24 WORD SEED PHRASE HERE"
+```
+
+7. Backup the wiped node. You will restore to your online node later.
+ _Optionally also set a password for the backup using A-Z, a-z and 0-9 characters only, no symbols_
+
+```bash title="Terminal"
+backup file:nokeysbackup.bak password:...
+```
+
+8. Restore your private keys to the offline node
+
+```bash title="Terminal"
+vault action:restorekeys phrase:"YOUR 24 WORDS HERE"
+```
+
+9. Password lock your keys with a long, secure password - this will encrypt your private keys which can be decrypted for the purpose of signing transactions when required. This ensures you do not have to use the 24 words again, which can be kept somewhere safe and not touched again.
+
+
+ The only time you should access your 24 words is if you lose your offline
+ device! In this situation you can restore your wiped backup to a new offline
+ device.
+
+
+```bash title="Terminal"
+vault action:passwordlock password:setvaultpassword confirm:setvaultpassword
+```
+
+----------
+
+### Online node (device 2)
+
+1. Start a new node on an online device - your device 2
+
+2. Restore the wiped backup to this online node, entering the password from the backup if you set one:
+
+```bash title="Terminal"
+restore file:nokeysbackup.bak password:...
+```
+
+3. The node will shutdown, restart it to access your restored node.
+
+This online node is now the same node as the one on the offline device, however it will be able to connect to the blockchain.
+
+The online node can be used as normal to receive funds but cannot send any funds, it is essentially read only.
+
+To send funds from your wallet, you will need to use both devices.
+
+----------
+
+### Transacting
+
+To make a transaction when using the Cold Storage solution, there are 5 steps. You will need to use the Terminal MiniDapp,Docker Terminal, or your desktop Command Line where Minima is running:
+
+1. On the online node, use the `sendnosign` command to create a transaction file, sending the amount you wish to send to your chosen recipient's address
+2. Transfer the unsigned transaction file to the offline device
+3. On the offline node, use the `sendsign` command to sign the transaction with your private keys
+4. Transfer the signed transaction file to the online device
+5. On the online device, use the `sendpost` command to post the signed transaction
+
+#### Walk-through
+
+1. On your online node, create a transaction using `sendnosign`.
+
+
+`sendnosign` works exactly like the traditional `send` function but instead of sending, will export an unsigned transaction (.txn) file which needs to be transferred to your offline device for signing with your private keys.
+
+For additional help, use `help command:sendnosign` or `help command:send`.
+
+
+
+Example output: (sending 1 Minima to the chosen address)
+
+```bash title="Terminal"
+sendnosign amount:1 address:MxG0843TSJZ6U35CZSSR2D17G4TE9M68JVT4KUNR4TBQ6H9TRBFZYH23D50TRSH
+
+#Response
+{
+ "command":"sendnosign",
+ "params":{
+ "amount":"1",
+ "address":"MxG0843TSJZ6U35CZSSR2D17G4TE9M68JVT4KUNR4TBQ6H9TRBFZYH23D50TRSH"
+ },
+ "status":true,
+ "pending":false,
+ "response":{
+ "txpow":"/home/minima/data/unsignedtransaction-1672851796504.txn"
+ }
+}
+```
+
+2. Find the file in your Minima base folder and transfer the transaction file to your offline node via a USB key.
+
+3. To sign the transaction file, use `sendsign` inserting the name of the .txn file and your Vault password that you used in step 9 above to encrypt (passwordlock) your keys. This will decrypt your keys, sign the transaction and automatically re-encrypt them with the same password.
+
+```bash title="Terminal"
+sendsign file:... password:yourvaultpassword
+```
+
+This will export a .txn file containing your signed transaction.
+
+Example:
+
+```bash title="Terminal"
+sendsign file:/home/minima/data/unsignedtransaction-1672851796504.txn password:yourvaultpassword
+
+#Response
+{
+ "command":"sendsign",
+ "params":{
+ "file":"/home/minima/data/unsignedtransaction-1672851796504.txn"
+ "password":"yourvaultpassword"
+ },
+ "status":true,
+ "pending":false,
+ "response":{
+ "txpow":"/home/minima/data/signedtransaction-1672852113421.txn"
+ }
+}
+```
+
+Alternatively, you can unlock your node first using:
+
+```bash title="Terminal"
+vault action:passwordunlock password:yourvaultpassword
+```
+
+and then use
+
+```bash title="Terminal"
+sendsign file:......
+```
+
+then,relock your node using:
+
+```bash title="Terminal"
+vault action:passwordlock password:yourvaultpassword confirm:yourvaultpassword
+```
+
+4. Transfer the signed transaction file back to your online node using a USB key, ensuring it is in your node's basefolder.
+
+5. Broadcast the transaction to the Minima network with `sendpost file:` function.
+
+Example:
+
+```bash title="Terminal"
+sendpost file:/home/minima/data/signedtransaction-1672852113421.txn
+
+#Response
+{
+ "command":"sendpost",
+ "params":{
+ "file":"/home/minima/data/signedtransaction-1672852113421.txn"
+ },
+ "status":true,
+ "pending":false,
+ "response":{
+ "txpow":{
+ "txpowid":"0xB41C5F1D68E33410337D0A98EFF5C937F1B9189C46F0BB3F82271B017BFF07F3",
+ …
+
+```
+
+That's it. You can also view the signed or unsigned transaction at any time using `sendview file:`
+
+Example output:
+
+```bash title="Terminal"
+sendview file:/home/minima/data/signedtransaction-1672852113421.txn
+
+#Response
+{
+ "command":"sendview",
+ "params":{
+ "file":"/home/minima/data/signedtransaction-1672852113421.txn"
+ },
+ "status":true,
+ "pending":false,
+ "response":{
+ "txpow":{
+ "txpowid":"0xB41C5F1D68E33410337D0A98EFF5C937F1B9189C46F0BB3F82271B017BFF07F3",
+ "isblock":false,
+ "istransaction":false,
+ "superblock":-1…
+```
diff --git a/content/docs/user-guides/manage-archive-node/archive-export.mdx b/content/docs/user-guides/archive-node/archive-export.mdx
similarity index 79%
rename from content/docs/user-guides/manage-archive-node/archive-export.mdx
rename to content/docs/user-guides/archive-node/archive-export.mdx
index 7bc1a8e..3e7faf3 100644
--- a/content/docs/user-guides/manage-archive-node/archive-export.mdx
+++ b/content/docs/user-guides/archive-node/archive-export.mdx
@@ -1,32 +1,32 @@
----
-title: Archive File Export
-description: Learn how to export your archive node to a file
-tag: user-guides
----
-
-If running an archive node, you can export your archive data to a file that can be used for recovering a node from the Security MiniDapp or using the [reset](/docs/userguides/usingyournode/terminal_commands#backup) command to either chain re-sync, import seed phrase or restore a backup with chain re-sync.
-
-To export your archive data to a file:
-
-1. Open the Security MiniDapp
-
-
-
-2. Select **Archive reset**
-3. Select **Archive export**, then **Export archive file**
-4. Wait for the file to be generated
-
-Once the file generation is complete you can download it to share with others. You can also **Browse internal archives** to download, share or use.
-
-Alternatively to export from the Terminal, run:
-
-```bash title="Terminal"
-archive action:export file:archiveexport-ddmmyy.raw.dat
-```
-
-
- An archive node can only be used to re-sync users who created their nodes
- after your archive node was created. If you wish to be able to recover *any*
- Minima user, you must perform a chain re-sync from an archive node that holds
- the entire blockchain since genesis.
-
+---
+title: Archive File Export
+description: Learn how to export your archive node to a file
+tag: user-guides
+---
+
+If running an archive node, you can export your archive data to a file that can be used for recovering a node from the Security MiniDapp or using the [reset](/docs/development/terminal-commands#backup) command to either chain re-sync, import seed phrase or restore a backup with chain re-sync.
+
+To export your archive data to a file:
+
+1. Open the Security MiniDapp
+
+
+
+2. Select **Archive reset**
+3. Select **Archive export**, then **Export archive file**
+4. Wait for the file to be generated
+
+Once the file generation is complete you can download it to share with others. You can also **Browse internal archives** to download, share or use.
+
+Alternatively to export from the Terminal, run:
+
+```bash title="Terminal"
+archive action:exportraw file:archiveexport-ddmmyy.raw.dat
+```
+
+
+ An archive node can only be used to re-sync users who created their nodes
+ after your archive node was created. If you wish to be able to recover *any*
+ Minima user, you must perform a chain re-sync from an archive node that holds
+ the entire blockchain since genesis.
+
diff --git a/content/docs/user-guides/archive-node/meta.json b/content/docs/user-guides/archive-node/meta.json
new file mode 100644
index 0000000..4ce9e26
--- /dev/null
+++ b/content/docs/user-guides/archive-node/meta.json
@@ -0,0 +1,5 @@
+{
+ "title": "Archive Nodes",
+ "root": false,
+ "pages": ["archive-export"]
+}
diff --git a/content/docs/user-guides/check-node-status.mdx b/content/docs/user-guides/check-node-status.mdx
index 865c47a..22bcef9 100644
--- a/content/docs/user-guides/check-node-status.mdx
+++ b/content/docs/user-guides/check-node-status.mdx
@@ -1,35 +1,69 @@
----
-title: Check your node status
-description: Learn how to check the status of your Minima node
-tag: user-guides
----
-
-From time to time you should check on the status of your node to ensure it continues to run smoothly.
-
-There are several best practices you can follow to ensure your node runs smoothly:
-
-- Ensure your node is connected to the internet as much as possible
-- Ensure you have sufficient storage and memory available
-- Shut down (quit) your node before turning off your device
-
-From the Home screen, you can check your top block number in the top right corner, if there is a warning symbol indicating that your node is not in sync with the latest block, allow some time for the node to catch up automatically before attempting to chain resync.
-
-## Node health
-
-
-
-From the **Health** MiniDapp, you can check:
-
-1. The version number of Minima running
-2. The latest block number and time
-3. The full status of the node
-
-## Logs
-
-
-
-The Logs MiniDapp will give you an indication of the most recent processes, connections and activities occurring on your node.
-
-If you experience unexpected behaviour from your node, check the logs for additional information or error messages.
-
-Please see the [logs](/docs/userguides/usingyournode/logs) page for explanations about common log messages.
+---
+title: Check your node status
+description: Learn how to check the status of your Minima node
+tag: user-guides
+---
+
+From time to time you should check on the status of your node to ensure it continues to run smoothly.
+
+There are several best practices you can follow to ensure your node runs smoothly:
+
+- Ensure your node is connected to the internet as much as possible
+- Ensure you have sufficient storage and memory available
+- Shut down (quit) your node before turning off your device
+
+From the Home screen, you can check your top block number in the top right corner, if there is a warning symbol indicating that your node is not in sync with the latest block, allow some time for the node to catch up automatically before attempting to chain resync.
+
+## Node health
+
+
+
+
+
+
+From the **Health** MiniDapp, you can check:
+
+1. The version number of Minima running
+2. The latest block number and time
+3. The full status of the node
+
+
+
+
+The `status` command will show details of your node including version, last block and chain details.
+
+1. Type `status` into the command line/Terminal
+2. Check `block` and `time`, this is your tip block and the `time` of that block, time should be within a few minutes of the current time.
+
+
+
+
+Having a recent block time is not a guarantee that you are on the right chain.
+Consider cross checking your latest block with another node or checking the samechain response of your Maxima Contacts by running the maxcontacts command.
+
+If the time shown is significantly behind, you should restart your node to resync to the chain. If it doesn't catch up automatically, youu may need to perform a chain resync from an Archive node.
+
+
+
+**Other useful commands:**
+
+- `network` - See the other nodes you are connected to
+- `help` - show all commands
+
+
+
+
+## Logs
+
+
+
+The Logs MiniDapp will give you an indication of the most recent processes, connections and activities occurring on your node.
+
+If you experience unexpected behaviour from your node, check the logs for additional information or error messages.
+
+Please see the [logs](/docs/user-guides/advanced/logs) page for explanations about common log messages.
diff --git a/content/docs/user-guides/index.mdx b/content/docs/user-guides/index.mdx
index 22fd6e3..5209674 100644
--- a/content/docs/user-guides/index.mdx
+++ b/content/docs/user-guides/index.mdx
@@ -1,82 +1,69 @@
----
-title: Login to Minima
-description: Learn how to login to Minima
-icon: KeyRound
-tag: user-guides
----
-
-## Desktop
-
-If you are using the JNLP on desktop, simply click on the `Launch MinimaOS` button or go to https://127.0.0.1:9003/ in your web browser. If you have any trouble logging in, close the window and restart Minima.
-
-Similarly, if using docker desktop go to https://127.0.0.1:9003/
-
-If you installed Minima on a different port to 9001, your login page can be accessed from this base port +2.
-
-## Server
-
-Access your login screen by going to https://YourserverIP:9003/
-
-**We recommend configuring your server's firewall to only having the mds port (9003) accessible from your home IP address.**
-
-## Android - Desktop connect
-
-Android users can connect to their phone node from a computer that is connected to the same WiFi network.
-
-
-
-
-Open Minima
-
-Navigate to the settings MiniDapp and select **Desktop connect**.
-
-
- If you have recently joined a WiFi network, refresh the URL.
-
-
-
-
-
-
-
-
- Open the URL
-
-
-From your computer's web browser, go to the URL shown on your phone.
-
-
-
-
-
-
-
-Accept the security warning
-
-Accept the security warning shown
-Enter the password shown to login
-
-
-
-
-
-**You can now use your node on your computer!**
-
-### Set your own password
-
-To set your own password for Desktop Connect:
-
-1. Open the Minima app on your phone
-2. Tap at the top of the screen to show the MinimaOS title bar
-3. Tap on the 3 dots and select **Startup Params**
-4. Enter `-mdspassword yOurp@ssw0rdhere` to set your own password
-5. Select **Save**
-6. Tap at the top of the screen to show the MinimaOS title bar again
-7. Select **Shutdown** to restart Minima
-
-When you reopen Minima, go to **Settings > Desktop Connect** to confirm your password has been set.
+---
+title: Quick Links
+description: Learn all there is to do on Minima
+icon: Zap
+tag: user-guides
+---
+
+Now your node is running, here are some helpful guides to support you.
+
+## Essentials
+
+
+
+
+
+
+
+
+ ## MiniDapps
+
+
+
+
+
+
+
+ ## Node Recovery
+
+
+
+
+
+
\ No newline at end of file
diff --git a/content/docs/user-guides/jointhenetwork.mdx b/content/docs/user-guides/join-the-network.mdx
similarity index 94%
rename from content/docs/user-guides/jointhenetwork.mdx
rename to content/docs/user-guides/join-the-network.mdx
index de80e15..9fdb895 100644
--- a/content/docs/user-guides/jointhenetwork.mdx
+++ b/content/docs/user-guides/join-the-network.mdx
@@ -1,154 +1,154 @@
----
-title: Join the network
-description: Learn how to join the Minima network
-icon: Network
-tag: user-guides
----
-
-To achieve Minima's vision of complete decentralisation, there are no centralised servers that control access to the network. Therefore, when running a node for the first time, you will need one or more connections to join the network.
-
-To get a list of connections, use one of the following methods:
-
-- ask another node runner to [share their connections](#sharing-connections) with you
-- enter `/minimapeers` into any channel in our [Discord server](https://discord.com/invite/minimaglobal)
-- Google search for **minimapeers.txt**
-- use a public URL that returns a list of Minima peers, for example https://www.spartacusrex.com/minimapeers.txt
-
-**This is a one off task, only required when starting a node for the first time.**
-
-
-
- If you are restoring a backup to a new node, select "I'll do this later" and
- continue to restore your backup using the Security MiniDapp.
-
-
-## Adding connections
-
-Connections (or 'peers') are simply other nodes that can share the blockchain with new users, enabling them to join the network.
-
-**To add connections for the first time:**
-
-
-
-Settings
-
-From the Home screen, go to **Settings**.
-
-
-
-
-
-
-Add connections
-
-Select **Add connections**.
-
-
-
-
-
-
-Enter connections
-
-Paste the list or URL into the box and select **Add connections**
-
-
-
-
-
-
-
- Check your block number
-
-Exit the Settings and wait a few minutes for the block number to appear in the top right
-
-
-
-
-
-
-
-That's it! You are now connected to the network!
-
-Once you have joined the network, ensure you [write down your seed phrase](/docs/user-guides/seedphrase).
-
-## Sharing connections
-
-To help a new user join the network, share your connection list with them.
-
-
-
-Settings
-
-From the Home screen, go to **Settings**.
-
-
-
-
-
-
-Share Connections
-
-From there select **Share connections**.
-
-
-
-
-
-
-
-Share the connections
-
-Select **Copy** to copy the list of connections. You can then send the list to a new node runner.
-
-
-
-
-
-
-
-## Add/Share via the Terminal
-
-Alternatively, you can add or share connections using the Terminal
-
-**To add connections:**
-
-```bash title="Terminal"
- peers action:addpeers peerslist:[IP:PORT],[IP:PORT],[IP:PORT] ...
-```
-
-**To share connections:**
-
-```bash title="Terminal"
- peers action:list max:10
-```
+---
+title: Join the network
+description: Learn how to join the Minima network
+icon: Network
+tag: user-guides
+---
+
+To achieve Minima's vision of complete decentralisation, there are no centralised servers that control access to the network. Therefore, when running a node for the first time, you will need one or more connections to join the network.
+
+To get a list of connections, use one of the following methods:
+
+- ask another node runner to [share their connections](#sharing-connections) with you
+- enter `/minimapeers` into any channel in our [Discord server](https://discord.com/invite/minimaglobal)
+- Google search for **minimapeers.txt**
+- use a public URL that returns a list of Minima peers, for example https://www.spartacusrex.com/minimapeers.txt
+
+**This is a one off task, only required when starting a node for the first time.**
+
+
+
+ If you are restoring a backup to a new node, select "I'll do this later" and
+ continue to restore your backup using the Security MiniDapp.
+
+
+## Adding connections
+
+Connections (or 'peers') are simply other nodes that can share the blockchain with new users, enabling them to join the network.
+
+**To add connections for the first time:**
+
+
+
+Settings
+
+From the Home screen, go to **Settings**.
+
+
+
+
+
+
+Add connections
+
+Select **Add connections**.
+
+
+
+
+
+
+Enter connections
+
+Paste the list or URL into the box and select **Add connections**
+
+
+
+
+
+
+
+ Check your block number
+
+Exit the Settings and wait a few minutes for the block number to appear in the top right
+
+
+
+
+
+
+
+That's it! You are now connected to the network!
+
+Once you have joined the network, ensure you [write down your seed phrase](/docs/user-guides/secure-your-seedphrase).
+
+## Sharing connections
+
+To help a new user join the network, share your connection list with them.
+
+
+
+Settings
+
+From the Home screen, go to **Settings**.
+
+
+
+
+
+
+Share Connections
+
+From there select **Share connections**.
+
+
+
+
+
+
+
+Share the connections
+
+Select **Copy** to copy the list of connections. You can then send the list to a new node runner.
+
+
+
+
+
+
+
+## Add/Share via the Terminal
+
+Alternatively, you can add or share connections using the Terminal
+
+**To add connections:**
+
+```bash title="Terminal"
+ peers action:addpeers peerslist:[IP:PORT],[IP:PORT],[IP:PORT] ...
+```
+
+**To share connections:**
+
+```bash title="Terminal"
+ peers action:list max:10
+```
diff --git a/content/docs/user-guides/login.mdx b/content/docs/user-guides/login.mdx
new file mode 100644
index 0000000..fbceef0
--- /dev/null
+++ b/content/docs/user-guides/login.mdx
@@ -0,0 +1,82 @@
+---
+title: Login to Minima
+description: Learn how to login to Minima
+icon: KeyRound
+tag: user-guides
+---
+
+## Desktop
+
+If you are using the JNLP on desktop, simply click on the `Launch MinimaOS` button or go to https://127.0.0.1:9003/ in your web browser. If you have any trouble logging in, close the window and restart Minima.
+
+Similarly, if using docker desktop go to https://127.0.0.1:9003/
+
+If you installed Minima on a different port to 9001, your login page can be accessed from this base port +2.
+
+## Server
+
+Access your login screen by going to https://YourserverIP:9003/
+
+**We recommend configuring your server's firewall to only having the MiniDapp System (MDS) port (9003) accessible from your home IP address.**
+
+## Android - Desktop connect
+
+Android users can connect to their phone node from a computer that is connected to the same WiFi network.
+
+
+
+
+Open Minima
+
+Navigate to the settings MiniDapp and select **Desktop connect**.
+
+
+ If you have recently joined a WiFi network, refresh the URL.
+
+
+
+
+
+
+
+
+ Open the URL
+
+
+From your computer's web browser, go to the URL shown on your phone.
+
+
+
+
+
+
+
+Accept the security warning
+
+Accept the security warning shown
+Enter the password shown to login
+
+
+
+
+
+**You can now use your node on your computer!**
+
+### Set your own password
+
+To set your own password for Desktop Connect:
+
+1. Open the Minima app on your phone
+2. Tap at the top of the screen to show the MinimaOS title bar
+3. Tap on the 3 dots and select **Startup Params**
+4. Enter `-mdspassword yOurp@ssw0rdhere` to set your own password
+5. Select **Save**
+6. Tap at the top of the screen to show the MinimaOS title bar again
+7. Select **Shutdown** to restart Minima
+
+When you reopen Minima, go to **Settings > Desktop Connect** to confirm your password has been set.
diff --git a/content/docs/user-guides/manage-archive-node/archive-export-sql.mdx b/content/docs/user-guides/manage-archive-node/archive-export-sql.mdx
deleted file mode 100644
index a696a7e..0000000
--- a/content/docs/user-guides/manage-archive-node/archive-export-sql.mdx
+++ /dev/null
@@ -1,361 +0,0 @@
----
-title: Exporting to MySQL
-description: Learn how to export your archive node to a MySQL database
-tag: user-guides
----
-
-It is possible to export your node's archive blocks to an external MySQL database for storage.
-
-Using a MySQL database to hold a backup of your archive data means you can:
-
-- update the MySQL db with the archive blocks from your node
-- chain or seed re-sync directly from the MySQL database for any Minima node (if made publicly available)
-- export the archive blocks from MySQL to a .dat or .gzip file to be shared for re-syncing purposes
-- execute SQL queries on all coins since the Genesis block (NEW for v 1.0.39);
-- export the tables from MySQL to a SQL file
-- import the SQL file to another MySQL databaseThis setup uses two Docker containers
-
-1. a Minima archive node
-2. a MySQL database to hold the archive blocks and coins
-
-The archive database in MySQL will contain 3 tables:
-
-1. cascadedata - if your archive node does not start at the genesis block, there may be cascade data
-2. syncblocks - the archive blocks
-3. coins (NEW v1.0.39) - a coins table of all coins in the archive blocks
-
-## Prerequisites
-
-- An existing archive node running in Docker
-
-## Minima - MySQL setup
-
-1. Install MySQL Workbench from the [official website](https://dev.mysql.com/downloads/workbench/), selecting the Operating System relevant to you
-
-2. Open your Terminal/Command Line interface
-
-3. Setup a Docker network, this will allow you to connect your node to your MySQL database that we will create in the next step
-
-```bash title="Terminal"
-docker network create -d bridge minimanetwork
-```
-
-Now you should see **minimanetwork** listed if you run
-
-```bash title="Terminal"
-docker network ls
-```
-
-4. Start a MySQL database as a Docker container
-
-You will need to set your own values for the following parameters:
-
-- MYSQL_ROOT_PASSWORD : create a root password
-- MYSQL_DATABASE : create a name for the archive database
-- MYSQL_USER : create a user for the archive database
-- MYSQL_PASSWORD : create a password for the MYSQL_USER
-
-```bash title="Terminal"
-docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=yourrootpassword -e MYSQL_DATABASE=archivedb -e MYSQL_USER=archiveuser -e MYSQL_PASSWORD=youruserpassword --restart unless-stopped --network=minimanetwork --label=com.centurylinklabs.watchtower.enable=false --name minimysql mysql:8.0
-```
-
-This will create a Docker container called **minimySQL** which runs your MySQL database called **archivedb**.
-
-It will run on your port 3307 (mapped to 3306 in Docker); create the user specified and give them access to the database; connect the MySQL db to the **minimanetwork** Docker network; and disable Watchtower updates for the container.
-
-5. Connect your Minima archive node container to the **minimanetwork** Docker network
-
-```bash title="Terminal"
-docker network connect minimanetwork minimaarchive
-```
-
-Example output:
-
-Example output:
-
-```json title="Output"
-[
- {
- "Name": "minimanetwork",
- "ConfigOnly": false,
- "Containers": {
- "182c4041ad365669b365ee6e0691e5488596ab1e974b791bba1306c74643bd03": {
- "Name": "minimaarchive"
- },
- "38906df591a5ba642e755509e8c162e114b6dd56abc2ec2e76a0c673f5187b09": {
- "Name": "minimysql"
- }
- }
- }
-]
-```
-
-- `Connection name:` minimaarchive
-- `**Hostname:` 127.0.0.1 (or your public IP if running on a server)
-- `Port:` 3307
-- `Username:` root
-- `Password:` Click on “Store in Vault” and enter the root password you used in step 4 above
-
-
-
-
-
-
-7. Click Test Connection, then OK.
-
-This will setup a connection to the MySQL database running in Docker.
-
-## Update MySQL
-
-To update the MySQL tables with the archive blocks from your node:
-
-1. Open Minima Docker CLI or Minima Terminal MiniDapp
-
-2. Optional - run the command `mysql action:info` with your login details to check the current status
-
-```bash title="Terminal"
-mysql host:minimysql database:archivedb user:archiveuser password:youruserpassword action:info
-```
-
-Example output:
-
-```json title="Output"
-{
- "command":"mysql",
- "params":{
- "host":"minimysql",
- "database":"archivedb",
- "user":"archiveuser",
- "password":"youruserpassword",
- "action":"info"
- },
- "status":true,
- "pending":false,
- "response":{
- "archive":{
- "archivestart":1,
- "archiveend":72106,
- "archivetotal":72105
- },
- "mysql":{
- "mysqlstart":-1,
- "mysqlend":-1,
- "mysqltotal":0
- }
- }
-}
-```
-
-In the above example, the Minima archive db contains 72105 blocks and the mysql has 0 blocks, as expected.
-
-
-Before running an update, you must check your node is on the correct tip block. Run the `status` command to check your tip block is up to date.
-
-
-3. Update the MySQL database with the Minima archive data and wait for it to finish
-
-```bash title="Terminal"
-mysql host:minimysql database:archivedb user:archiveuser password:youruserpassword action:update
-```
-
-
-Example output:
-
-```json title="Output"
-{
- "command":"mysql",
- "params":{
- "host":"minimysql",
- "database":"archivedb",
- "user":"archiveuser",
- "password":"youruserpassword",
- "action":"update"
- },
- "status":true,
- "pending":false,
- "response":{
- "archive":{
- "archivestart":1,
- "archiveend":72206,
- "archivetotal":72205
- },
- "mysql":{
- "mysqlstart":1,
- "mysqlend":72206,
- "mysqltotal":72205
- }
- }
-}
-```
-
-Future updates will be incremental, only syncing the new blocks that are not already in the MySQL database.
-
-### Auto update
-
-To automatically update the MySQL database daily, run:
-
-```bash title="Terminal"
-mysql host:minimysql database:archivedb user:archiveuser password:youruserpassword action:autobackup enable:true
-```
-
-## Check the integrity
-
-To check that there are no missing blocks in the MySQL database, you can run:
-
-```bash title="Terminal"
-mysql action:integrity host:minimysql database:archivedb user:archiveuser password:youruserpassword
-```
-
-## Export to an archive file
-
-
-### .dat file export
-
-From v1.0.39 onwards, a **.raw.dat** export can be used by users to recover their node via the Security minidapp or with the [reset](/docs/userguides/usingyournode/terminal_commands) command. This is the recommended method.
-
-Optionally omit the `file` parameter to use an autogenerated file name.
-
-```bash title="Terminal"
-mysql action:rawexport file:archiveexport.raw.dat host:minimysql database:archivedb user:archiveuser password:youruserpassword
-```
-
-### .gzip file export
-
-This .gzip export can be used by users to archive reset their node via the Security minidapp or with the [reset](/docs/userguides/usingyournode/terminal_commands#backup) command.
-
-```bash title="Terminal"
-mysql action:h2export file:archiveexport.gzip host:minimysql database:archivedb user:archiveuser password:youruserpassword
-```
-
-## Resync from MySQL
-
-If a user has been offline for too long and cannot resync to the chain from the IBD alone, or has lost access to their node, they can connect to a MySQL database to perform a chain or seed resync, provided it is publicly accessible.
-
-This is an alternative option to re-syncing from an archive node.
-
-As with archive nodes, there are two options when using a MySQL database to re-sync your a node:
-
-- `Chain re-sync:` If a user has been offline for too long and their node is not on the correct tip block, they can re-sync to the latest block by performing a [chain re-sync](#to-perform-a-chain-re-sync) from a MySQL database. **The node will NOT be wiped during this process.**
-- `Seed re-sync:` If a user does not have a valid backup or has lost access to their node, they can restore access to their coins by performing a [seed re-sync](#to-perform-a-seed-re-sync) from a MySQL database using their 24 word seed phrase. **The node will first be wiped before the re-sync begins.**
-
-
-To re-sync using credentials for a read-only user, set the `user` and `password` parameters as the credentials for the read-only user you have set up in MySQL, and add `readonly:true` as a parameter in the following commands.
-
-
-### To perform a chain re-sync
-
-1. On the node requiring a re-sync, check the connection to the MySQL database, changing the ip:port as required
-
-```bash title="Terminal"
-mysql host:127.0.0.1:3307 database:archivedb user:archiveuser password:youruserpassword action:info
-```
-
-2. To start the chain re-sync, run
-
-```bash title="Terminal"
-mysql host:mysqlhost:port database:archivedb user:archiveuser password:youruserpassword action:resync
-```
-
-Your coins will remain safe throughout this process. Once complete, you will be on the correct tip block.
-
-### To perform a seed re-sync
-
-1. On the node requiring a re-sync, connect to check the MySQL archive database
-
-```bash title="Terminal"
-mysql host:127.0.0.1:3307 database:archivedb user:archiveuser password:youruserpassword action:info
-```
-
-2. To start the seed re-sync, run
-
-```bash title="Terminal"
-mysql host:mysqlhost:port database:archivedb user:archiveuser password:youruserpassword action:resync phrase:\"24 WORDS HERE\"
-```
-
-Optionally set the number of keys and keyuses relevant to you. If not specified, the defaults are keys:80 and keyuses:1000
-
-```bash title="Terminal"
-mysql host:mysqlhost:port database:archivedb user:archiveuser password:youruserpassword action:resync phrase:\"24 WORDS HERE\" keys:90 keyuses:2000
-```
-
-## Check an address history
-
-To check the unspent and spent coins for an address, run
-
-```bash title="Terminal"
-mysql host:127.0.0.1:3307 database:archivedb user:archiveuser password:youruserpassword action:addresscheck address:0x79...
-```
-
-## Create a coins table
-
-To create a table in your MySQL archive database for all spent and unspent coins, you can use the `mysqlcoins` command.
-
-The coins table will be populated from the syncblock table, so this must be populated first. You can then run any SQL command against it to query the coins.
-
-
-The coins database is large and will take a while to populate, optionally you can create a second database in mysql workbench to keep the coinsdb separate to your existing archivedb.
-
-
-To populate the coins table, you can choose to specify the number of coins to update in one go by using the `maxcoins` parameter. To update the table will all the coins, remove the `maxcoins` parameter.
-
-The example below adds the first 100 coins to the database. Next time, it will start from where it left off.
-
-**From any node**
-```bash title="Terminal"
-mysqlcoins action:update maxcoins:100 host:127.0.0.1:3307 database:archivedb user:archiveuser password:youruserpassword
-```
-
-**From docker**
-```bash title="Terminal"
-mysqlcoins action:update maxcoins:100 host:minimysql database:archivedb user:archiveuser password:youruserpassword
-```
-
-## Query the coins table
-
-To search for all coins at an address or with the address in a state variable:
-
-```bash title="Terminal"
-mysqlcoins action:search address: host:minimysql database:archivedb user:archiveuser password:youruserpassword
-```
-
-To run a WHERE query on the coins table, string data MUST be in single quotes and you can use multiple parameters.
-
-```bash title="Terminal"
-mysqlcoins action:search where: host:minimysql database:archivedb user:archiveuser password:youruserpassword
-```
-
-To run a full SQL query on the coins table:
-
-```bash title="Terminal"
-mysqlcoins action:search query: host:minimysql database:archivedb user:archiveuser password:youruserpassword
-```
-
-For full help, use `help command:mysqlcoins` or see [here](/docs/userguides/usingyournode/terminal_commands).
-
-## Export the tables from MySQL
-
-To Export the archive data from MySQL to a file:
-
-1. Open MySQL workbench
-
-2. Double click on **minimaarchive** to open the database
-
-3. From the **Administration** tab, select **Data Export** (also available from the Server dropdown menu)
-
-
-
-4. Check the box for **archivedb** and check the boxes for **cascadedata** and **syncblock**
-
-
-We do not recommend exporting the coins table as this will be very large.
-
-
-5. Under Export Options, select **Export to self-contained file** and **Include Create Schema**. Optionally change the file path.
-
-
-
-6. Click **Start Export**
-
-The exported file will be unzipped, you should zip the exported file to reduce your storage requirement.
-
-This file can be imported to MySQL if required.
diff --git a/content/docs/user-guides/manage-archive-node/meta.json b/content/docs/user-guides/manage-archive-node/meta.json
deleted file mode 100644
index b2d224b..0000000
--- a/content/docs/user-guides/manage-archive-node/meta.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "title": "Manage Archive Node",
- "root": false,
- "pages": ["archive-export", "archive-export-sql"]
-}
diff --git a/content/docs/user-guides/advanced-maxima-options.mdx b/content/docs/user-guides/maxima/advanced-maxima-options.mdx
similarity index 91%
rename from content/docs/user-guides/advanced-maxima-options.mdx
rename to content/docs/user-guides/maxima/advanced-maxima-options.mdx
index 3129b3a..2c92cc4 100644
--- a/content/docs/user-guides/advanced-maxima-options.mdx
+++ b/content/docs/user-guides/maxima/advanced-maxima-options.mdx
@@ -1,182 +1,182 @@
----
-title: Advanced Maxima Options
-description: Learn how to use advanced Maxima options
-tag: user-guides
----
-
-There are several advanced options available to users with access to a second Minima node that runs on a server.
-
-It is possible to use a server node as a [static MLS](/docs/userguides/usingmaxima/advancedoptions#setting-your-static-mls), your server node will be the host used to manage the connections with your contacts. If not configured, your connections will be managed by randomly selected hosts.
-
-When using a Static MLS, you can then create a [permanent **MAX#** address](/docs/userguides/usingmaxima/advancedoptions#setting-up-a-permanent-address) which can be shared instead of your contact address and allows anyone to message you or add you as a contact without worrying about your contact address expiring.
-
-If creating a permanent MAX# address, you can then [disable contacts](/docs/userguides/usingmaxima/advancedoptions#disabling-contacts) - this still allows people to message you via your permanent address but does not allow them to add you as a contact. Specific contacts can be allowed if you choose to [whitelist](/docs/userguides/usingmaxima/advancedoptions#whitelisting-contacts) them.
-
-## Setting your Static MLS
-
-You may wish to become your own MLS or use another unchanging MLS to ensure a more stable with your contacts.
-
-You can set up your own MLS by running another Minima node on a server that is open on the main Minima port (default port 9001).
-
-By running your own MLS, your online Contacts will always remain connected to you via your server node, instead of using a randomly selected server node that could go offline and changes every 12 hours.
-
-To set your own static MLS host, from your **server-based Minima node**, find its `P2P identity` using the `maxima` command via the Minima Terminal.
-
-```bash title="Terminal"
-maxima
-```
-
-```json title="Output"
-{
- "command": "maxima",
- "status": true,
- "pending": false,
- "response": {
- "logs": true,
- "name": "mlsnode",
- "publickey": "0x30819F300D06092A864886F70D010101050003818D00308189028181009570D2AB5CB494803D700ECA81D183140B3C3D255558864917592B40FD48BBE9F583FCBCF1E45DD353DCC74044F6013C86092AF453797003CECEDCFF3CB1690111F8C49B1C80CF994C0C8E1E78C1F45E67B4C4544A13BAC03F45F4B2004B6FB6E694583CC3BBDC38C2CC2518E054D7D810F84E0E59F233CECF21AFBDCFBA0A110203010001",
- "staticmls": false,
- "mls": "MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G1JG4Q2698U35U5QFQZUYM1QF5R9RC1ZHQKF0D5Z1UCAEVNE862R2B1FCN5N1E27AHNBEMZUWWCY986UF25DNNVZ4N8PHBV76W52BDFCDKBYAPYDAVN3E49RDTQ4JFFSJHKHZQ5F33Q32N5WRCHSCDTGCQ24ZNQQAM8QYW9B7TDMC7R37BD4UTNU04YT9PTYVQ99YJF1SPATJWS10608005NVBJB9@94.131.105.228:9001",
- "localidentity": "MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G16YEDA34PYMJS7MC82PYEHB2Q5G2SEKGYP5AA6YFABH6S6PKV63ER84ZGVV7TU2RZKHJYPZ5PZD2E7VE8EPR5S6547YAR38SNRPHR9B74QAVK5FEGYEB21QVNE3E28VBB6C46J6NC1JD80AG3T4JW49D7BKWT55GJQGU5FYKUQVBBDEF4GGNN779NTSBK5VRYS604N02BVGPDC10608004W3G98C@172.21.144.1:7001",
- "p2pidentity": "MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G16YEDA34PYMJS7MC82PYEHB2Q5G2SEKGYP5AA6YFABH6S6PKV63ER84ZGVV7TU2RZKHJYPZ5PZD2E7VE8EPR5S6547YAR38SNRPHR9B74QAVK5FEGYEB21QVNE3E28VBB6C46J6NC1JD80AG3T4JW49D7BKWT55GJQGU5FYKUQVBBDEF4GGNN779NTSBK5VRYS604N02BVGPDC10608004W3G98C@5.64.39.56:9001",
- "contact": "MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G19DCGVJUKP4Y93Z8NBZE5YAVMTHBZHQ4E4JR04P3J4QJHYWNVFEP5Y1TU7DAJ7WK54KFEHCKNAAZPAV5GAW1GN85JGZHDQCNTE07QZJ43KAY01Y7DHHSG57VBE9NYS4QKTJ2BHS6GUA1AWNT6PZC3VFZV49NGCA48800C49T8TD7J03FASUM3H13QHA7VSFRKA3D0T2RWU9H34106080075P6AZ4@194.163.178.243:9001",
- "poll": 0
- }
-}
-```
-
-On the primary node being used to communicate with your contacts, set your static MLS by running:
-
-```bash title="Terminal"
-maxextra action:staticmls host:serverp2pidentity
-```
-
-**Example:**
-
-```bash title="Terminal"
-maxextra action:staticmls host:MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G16YEDA34PYMJS7MC82PYEHB2Q5G2SEKGYP5AA6YFABH6S6PKV63ER84ZGVV7TU2RZKHJYPZ5PZD2E7VE8EPR5S6547YAR38SNRPHR9B74QAVK5FEGYEB21QVNE3E28VBB6C46J6NC1JD80AG3T4JW49D7BKWT55GJQGU5FYKUQVBBDEF4GGNN779NTSBK5VRYS604N02BVGPDC10608004W3G98C@5.64.39.56:9001
-```
-
-```json title="Output"
-{
- "command": "maxextra",
- "params": {
- "action": "staticmls",
- "host": "MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G16YEDA34PYMJS7MC82PYEHB2Q5G2SEKGYP5AA6YFABH6S6PKV63ER84ZGVV7TU2RZKHJYPZ5PZD2E7VE8EPR5S6547YAR38SNRPHR9B74QAVK5FEGYEB21QVNE3E28VBB6C46J6NC1JD80AG3T4JW49D7BKWT55GJQGU5FYKUQVBBDEF4GGNN779NTSBK5VRYS604N02BVGPDC10608004W3G98C@5.64.39.56:9001"
- },
- "status": true,
- "pending": false,
- "response": {
- "staticmls": true,
- "mls": "MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G16YEDA34PYMJS7MC82PYEHB2Q5G2SEKGYP5AA6YFABH6S6PKV63ER84ZGVV7TU2RZKHJYPZ5PZD2E7VE8EPR5S6547YAR38SNRPHR9B74QAVK5FEGYEB21QVNE3E28VBB6C46J6NC1JD80AG3T4JW49D7BKWT55GJQGU5FYKUQVBBDEF4GGNN779NTSBK5VRYS604N02BVGPDC10608004W3G98C@5.64.39.56:9001"
- }
-}
-```
-
-To subsequently stop using a static MLS and return to using a random host, use
-
-```bash title="Terminal"
-maxextra action:staticmls host:clear
-```
-
-## Permanent Addresses
-
-For certain use cases where it is necessary to be **publicly contactable by someone who is not a contact**, you can create a **permanent address** for your node.
-
-To enable a permanent address for your node, you must set the Maxima Public Key of your primary node as "permanent" on your static MLS node.
-
-### Setting up a Permanent Address:
-
-**On the primary node you use for communication** which you have already configured to use a static MLS, find your Maxima Public Key using the `maxima` command.
-
-```bash title="Terminal"
-maxima
-```
-
-```json title="Output"
-{
- "command":"maxima",
- "status":true,
- "pending":false,
- "response":{
- "logs":false,
- "name":"yourname",
- "publickey":"0x30819F300D06092A864886F70D010101050003818D0030818902818100958DD8EA74BD3CBEE4D1D8F030781A665AA062ADDE749951BFD45BCA43A3A315BF46788B9BEF67472203893C996FEC2E35C974CD01CEDE3B3BBF62D5B6B00FB546FD77094F07022FBAF82E7766D92EBFBE14623D4A1B677CF2F7EB42A6CCFC5F82530B061914FA22BA0F9D2458B4E4FDC51C843B96F2F77E9617F42979EC240B0203010001", // [!code highlight]
- "staticmls":true,
- "mls":"MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G16YEDA34PYMJS7MC82PYEHB2Q5G2SEKGYP5AA6YFABH6S6PKV63ER84ZGVV7TU2RZKHJYPZ5PZD2E7VE8EPR5S6547YAR38SNRPHR9B74QAVK5FEGYEB21QVNE3E28VBB6C46J6NC1JD80AG3T4JW49D7BKWT55GJQGU5FYKUQVBBDEF4GGNN779NTSBK5VRYS604N02BVGPDC10608004W3G98C@5.64.39.56:9001"
- "localidentity":"MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G13YGKSTHJVZ77NAUBFHV1KPS0MHUZNSCFZQB3V2GN9AKFP12CB9SST1FY5DCN2FMM6MS5PB5RA6WQUM7UGQ9RMH1Q8ECU0YJAA6V271GR1HH7B84J1RT81W2QBWMWJSHRV0A2YVK91MYM6JQVAYSZF22P5U8SJSGTJTEZTS39V19B3KTQHVW9SR4J1T1BW1P6ZBF9K82QGQTBS10608004J5DQZ0@172.29.224.0:9001",
- "p2pidentity":"MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G13YGKSTHJVZ77NAUBFHV1KPS0MHUZNSCFZQB3V2GN9AKFP12CB9SST1FY5DCN2FMM6MS5PB5RA6WQUM7UGQ9RMH1Q8ECU0YJAA6V271GR1HH7B84J1RT81W2QBWMWJSHRV0A2YVK91MYM6JQVAYSZF22P5U8SJSGTJTEZTS39V19B3KTQHVW9SR4J1T1BW1P6ZBF9K82QGQTBS10608004J5DQZ0@165.0.49.73:9001",
- "contact":"MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G1FSDCR470HWPNA11N8DN9W2B15VYTRQS6WATHZ975GT1CVPMGDM439HHRUCMBRF3DJASTD8NPVW5EYV26HCGC2EB3N6JNPZF8QM4Q6Q393M049YQ0YB9CSE04Q4JCASWHQA54MMWWD8QARMUJGE1FAHKPF7CF7E87F0QCAU9PBVHT37AEB3MPAW9BGY6672NW12SHMVCS05JGK10608007RWBNFH@91.107.240.131:9001",
- "poll":0
- }
-}
-```
-
-Copy your Public Key, then **on the server static MLS node** enter the command:
-
-```bash title="Terminal"
-maxextra action:addpermanent publickey:0x30819F300D06092A864886F70D010101050003818D0030818902818100958DD8EA74BD3CBEE4D1D8F030781A665AA062ADDE749951BFD45BCA43A3A315BF46788B9BEF67472203893C996FEC2E35C974CD01CEDE3B3BBF62D5B6B00FB546FD77094F07022FBAF82E7766D92EBFBE14623D4A1B677CF2F7EB42A6CCFC5F82530B061914FA22BA0F9D2458B4E4FDC51C843B96F2F77E9617F42979EC240B0203010001
-```
-
-```json title="Output"
-{
- "command": "maxextra",
- "params": {
- "action": "addpermanent",
- "publickey": "0x30819F300D06092A864886F70D010101050003818D0030818902818100958DD8EA74BD3CBEE4D1D8F030781A665AA062ADDE749951BFD45BCA43A3A315BF46788B9BEF67472203893C996FEC2E35C974CD01CEDE3B3BBF62D5B6B00FB546FD77094F07022FBAF82E7766D92EBFBE14623D4A1B677CF2F7EB42A6CCFC5F82530B061914FA22BA0F9D2458B4E4FDC51C843B96F2F77E9617F42979EC240B0203010001"
- },
- "status": true,
- "pending": false,
- "response": "Added Permanent Maxima ID : 0x30819F300D06092A864886F70D010101050003818D0030818902818100958DD8EA74BD3CBEE4D1D8F030781A665AA062ADDE749951BFD45BCA43A3A315BF46788B9BEF67472203893C996FEC2E35C974CD01CEDE3B3BBF62D5B6B00FB546FD77094F07022FBAF82E7766D92EBFBE14623D4A1B677CF2F7EB42A6CCFC5F82530B061914FA22BA0F9D2458B4E4FDC51C843B96F2F77E9617F42979EC240B0203010001"
-}
-```
-
-Now your primary node will be have a Permanent Address in the format
-
-MAX#**yourPubKey**#**staticMLSAddress
-
-```plaintext
-MAX#0x30819F300D06092A864886F70D010101050003818D0030818902818100958DD8EA74BD3CBEE4D1D8F030781A665AA062ADDE749951BFD45BCA43A3A315BF46788B9BEF67472203893C996FEC2E35C974CD01CEDE3B3BBF62D5B6B00FB546FD77094F07022FBAF82E7766D92EBFBE14623D4A1B677CF2F7EB42A6CCFC5F82530B061914FA22BA0F9D2458B4E4FDC51C843B96F2F77E9617F42979EC240B0203010001#MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G16YEDA34PYMJS7MC82PYEHB2Q5G2SEKGYP5AA6YFABH6S6PKV63ER84ZGVV7TU2RZKHJYPZ5PZD2E7VE8EPR5S6547YAR38SNRPHR9B74QAVK5FEGYEB21QVNE3E28VBB6C46J6NC1JD80AG3T4JW49D7BKWT55GJQGU5FYKUQVBBDEF4GGNN779NTSBK5VRYS604N02BVGPDC10608004W3G98C@5.64.39.56:9001
-```
-
-This permanent address can now be shared with others, for example on a public site.
-
-Anyone wishing to contact you over Maxima can send you a message via your permanent MAX# address using:
-
-```bash title="Terminal"
-maxima action:send to:MAX#yourPubKey#staticMLSAddress application: data:
-```
-
-### Disabling contacts
-
-Having a permanent address means anyone who knows your MAX# address can add you as a contact which may not be desirable.
-
-To prevent anyone from adding you as a contact, **from your primary node** run the following command:
-
-```bash title="Terminal"
-maxextra action:allowallcontacts enable:false
-```
-
-This will allow users who know your permanent MAX# address to send messages to your node, but will reject any requests to add you as a contact.
-
-### Whitelisting contacts
-
-You can choose to whitelist specific people to allow them to add you as a contact, despite disabling contacts.
-
-Once allowed, they can add you as a contact and vice versa provided they have not disabled contacts.
-
-To whitelist someone, **from your primary node** run the following command, inserting their Maxima public key:
-
-```bash title="Terminal"
-maxextra action:addallowed publickey:INSERTPUBLICKEY
-```
-
-## Additional Help
-
-For additional help, please use the help commands from the Terminal:
-
-```bash title="Terminal"
-help command:maxima
-help command:maxcontacts
-help command:maxextra
-```
+---
+title: Advanced Maxima Options
+description: Learn how to use advanced Maxima options
+tag: user-guides
+---
+
+There are several advanced options available to users with access to a second Minima node that runs on a server.
+
+It is possible to use a server node as a [static MLS](/docs/user-guides/maxima/advanced-maxima-options#setting-your-static-mls), your server node will be the host used to manage the connections with your contacts. If not configured, your connections will be managed by randomly selected hosts.
+
+When using a Static MLS, you can then create a [permanent **MAX#** address](/docs/user-guides/maxima/advanced-maxima-options#setting-up-a-permanent-address) which can be shared instead of your contact address and allows anyone to message you or add you as a contact without worrying about your contact address expiring.
+
+If creating a permanent MAX# address, you can then [disable contacts](/docs/user-guides/maxima/advanced-maxima-options#disabling-contacts) - this still allows people to message you via your permanent address but does not allow them to add you as a contact. Specific contacts can be allowed if you choose to [whitelist](/docs/user-guides/maxima/advanced-maxima-options#whitelisting-contacts) them.
+
+## Setting your Static MLS
+
+You may wish to become your own MLS or use another unchanging MLS to ensure a more stable with your contacts.
+
+You can set up your own MLS by running another Minima node on a server that is open on the main Minima port (default port 9001).
+
+By running your own MLS, your online Contacts will always remain connected to you via your server node, instead of using a randomly selected server node that could go offline and changes every 12 hours.
+
+To set your own static MLS host, from your **server-based Minima node**, find its `P2P identity` using the `maxima` command via the Minima Terminal.
+
+```bash title="Terminal"
+maxima
+```
+
+```json title="Output"
+{
+ "command": "maxima",
+ "status": true,
+ "pending": false,
+ "response": {
+ "logs": true,
+ "name": "mlsnode",
+ "publickey": "0x30819F300D06092A864886F70D010101050003818D00308189028181009570D2AB5CB494803D700ECA81D183140B3C3D255558864917592B40FD48BBE9F583FCBCF1E45DD353DCC74044F6013C86092AF453797003CECEDCFF3CB1690111F8C49B1C80CF994C0C8E1E78C1F45E67B4C4544A13BAC03F45F4B2004B6FB6E694583CC3BBDC38C2CC2518E054D7D810F84E0E59F233CECF21AFBDCFBA0A110203010001",
+ "staticmls": false,
+ "mls": "MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G1JG4Q2698U35U5QFQZUYM1QF5R9RC1ZHQKF0D5Z1UCAEVNE862R2B1FCN5N1E27AHNBEMZUWWCY986UF25DNNVZ4N8PHBV76W52BDFCDKBYAPYDAVN3E49RDTQ4JFFSJHKHZQ5F33Q32N5WRCHSCDTGCQ24ZNQQAM8QYW9B7TDMC7R37BD4UTNU04YT9PTYVQ99YJF1SPATJWS10608005NVBJB9@94.131.105.228:9001",
+ "localidentity": "MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G16YEDA34PYMJS7MC82PYEHB2Q5G2SEKGYP5AA6YFABH6S6PKV63ER84ZGVV7TU2RZKHJYPZ5PZD2E7VE8EPR5S6547YAR38SNRPHR9B74QAVK5FEGYEB21QVNE3E28VBB6C46J6NC1JD80AG3T4JW49D7BKWT55GJQGU5FYKUQVBBDEF4GGNN779NTSBK5VRYS604N02BVGPDC10608004W3G98C@172.21.144.1:7001",
+ "p2pidentity": "MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G16YEDA34PYMJS7MC82PYEHB2Q5G2SEKGYP5AA6YFABH6S6PKV63ER84ZGVV7TU2RZKHJYPZ5PZD2E7VE8EPR5S6547YAR38SNRPHR9B74QAVK5FEGYEB21QVNE3E28VBB6C46J6NC1JD80AG3T4JW49D7BKWT55GJQGU5FYKUQVBBDEF4GGNN779NTSBK5VRYS604N02BVGPDC10608004W3G98C@5.64.39.56:9001",
+ "contact": "MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G19DCGVJUKP4Y93Z8NBZE5YAVMTHBZHQ4E4JR04P3J4QJHYWNVFEP5Y1TU7DAJ7WK54KFEHCKNAAZPAV5GAW1GN85JGZHDQCNTE07QZJ43KAY01Y7DHHSG57VBE9NYS4QKTJ2BHS6GUA1AWNT6PZC3VFZV49NGCA48800C49T8TD7J03FASUM3H13QHA7VSFRKA3D0T2RWU9H34106080075P6AZ4@194.163.178.243:9001",
+ "poll": 0
+ }
+}
+```
+
+On the primary node being used to communicate with your contacts, set your static MLS by running:
+
+```bash title="Terminal"
+maxextra action:staticmls host:serverp2pidentity
+```
+
+**Example:**
+
+```bash title="Terminal"
+maxextra action:staticmls host:MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G16YEDA34PYMJS7MC82PYEHB2Q5G2SEKGYP5AA6YFABH6S6PKV63ER84ZGVV7TU2RZKHJYPZ5PZD2E7VE8EPR5S6547YAR38SNRPHR9B74QAVK5FEGYEB21QVNE3E28VBB6C46J6NC1JD80AG3T4JW49D7BKWT55GJQGU5FYKUQVBBDEF4GGNN779NTSBK5VRYS604N02BVGPDC10608004W3G98C@5.64.39.56:9001
+```
+
+```json title="Output"
+{
+ "command": "maxextra",
+ "params": {
+ "action": "staticmls",
+ "host": "MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G16YEDA34PYMJS7MC82PYEHB2Q5G2SEKGYP5AA6YFABH6S6PKV63ER84ZGVV7TU2RZKHJYPZ5PZD2E7VE8EPR5S6547YAR38SNRPHR9B74QAVK5FEGYEB21QVNE3E28VBB6C46J6NC1JD80AG3T4JW49D7BKWT55GJQGU5FYKUQVBBDEF4GGNN779NTSBK5VRYS604N02BVGPDC10608004W3G98C@5.64.39.56:9001"
+ },
+ "status": true,
+ "pending": false,
+ "response": {
+ "staticmls": true,
+ "mls": "MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G16YEDA34PYMJS7MC82PYEHB2Q5G2SEKGYP5AA6YFABH6S6PKV63ER84ZGVV7TU2RZKHJYPZ5PZD2E7VE8EPR5S6547YAR38SNRPHR9B74QAVK5FEGYEB21QVNE3E28VBB6C46J6NC1JD80AG3T4JW49D7BKWT55GJQGU5FYKUQVBBDEF4GGNN779NTSBK5VRYS604N02BVGPDC10608004W3G98C@5.64.39.56:9001"
+ }
+}
+```
+
+To subsequently stop using a static MLS and return to using a random host, use
+
+```bash title="Terminal"
+maxextra action:staticmls host:clear
+```
+
+## Permanent Addresses
+
+For certain use cases where it is necessary to be **publicly contactable by someone who is not a contact**, you can create a **permanent address** for your node.
+
+To enable a permanent address for your node, you must set the Maxima Public Key of your primary node as "permanent" on your static MLS node.
+
+### Setting up a Permanent Address:
+
+**On the primary node you use for communication** which you have already configured to use a static MLS, find your Maxima Public Key using the `maxima` command.
+
+```bash title="Terminal"
+maxima
+```
+
+```json title="Output"
+{
+ "command":"maxima",
+ "status":true,
+ "pending":false,
+ "response":{
+ "logs":false,
+ "name":"yourname",
+ "publickey":"0x30819F300D06092A864886F70D010101050003818D0030818902818100958DD8EA74BD3CBEE4D1D8F030781A665AA062ADDE749951BFD45BCA43A3A315BF46788B9BEF67472203893C996FEC2E35C974CD01CEDE3B3BBF62D5B6B00FB546FD77094F07022FBAF82E7766D92EBFBE14623D4A1B677CF2F7EB42A6CCFC5F82530B061914FA22BA0F9D2458B4E4FDC51C843B96F2F77E9617F42979EC240B0203010001", // [!code highlight]
+ "staticmls":true,
+ "mls":"MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G16YEDA34PYMJS7MC82PYEHB2Q5G2SEKGYP5AA6YFABH6S6PKV63ER84ZGVV7TU2RZKHJYPZ5PZD2E7VE8EPR5S6547YAR38SNRPHR9B74QAVK5FEGYEB21QVNE3E28VBB6C46J6NC1JD80AG3T4JW49D7BKWT55GJQGU5FYKUQVBBDEF4GGNN779NTSBK5VRYS604N02BVGPDC10608004W3G98C@5.64.39.56:9001"
+ "localidentity":"MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G13YGKSTHJVZ77NAUBFHV1KPS0MHUZNSCFZQB3V2GN9AKFP12CB9SST1FY5DCN2FMM6MS5PB5RA6WQUM7UGQ9RMH1Q8ECU0YJAA6V271GR1HH7B84J1RT81W2QBWMWJSHRV0A2YVK91MYM6JQVAYSZF22P5U8SJSGTJTEZTS39V19B3KTQHVW9SR4J1T1BW1P6ZBF9K82QGQTBS10608004J5DQZ0@172.29.224.0:9001",
+ "p2pidentity":"MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G13YGKSTHJVZ77NAUBFHV1KPS0MHUZNSCFZQB3V2GN9AKFP12CB9SST1FY5DCN2FMM6MS5PB5RA6WQUM7UGQ9RMH1Q8ECU0YJAA6V271GR1HH7B84J1RT81W2QBWMWJSHRV0A2YVK91MYM6JQVAYSZF22P5U8SJSGTJTEZTS39V19B3KTQHVW9SR4J1T1BW1P6ZBF9K82QGQTBS10608004J5DQZ0@165.0.49.73:9001",
+ "contact":"MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G1FSDCR470HWPNA11N8DN9W2B15VYTRQS6WATHZ975GT1CVPMGDM439HHRUCMBRF3DJASTD8NPVW5EYV26HCGC2EB3N6JNPZF8QM4Q6Q393M049YQ0YB9CSE04Q4JCASWHQA54MMWWD8QARMUJGE1FAHKPF7CF7E87F0QCAU9PBVHT37AEB3MPAW9BGY6672NW12SHMVCS05JGK10608007RWBNFH@91.107.240.131:9001",
+ "poll":0
+ }
+}
+```
+
+Copy your Public Key, then **on the server static MLS node** enter the command:
+
+```bash title="Terminal"
+maxextra action:addpermanent publickey:0x30819F300D06092A864886F70D010101050003818D0030818902818100958DD8EA74BD3CBEE4D1D8F030781A665AA062ADDE749951BFD45BCA43A3A315BF46788B9BEF67472203893C996FEC2E35C974CD01CEDE3B3BBF62D5B6B00FB546FD77094F07022FBAF82E7766D92EBFBE14623D4A1B677CF2F7EB42A6CCFC5F82530B061914FA22BA0F9D2458B4E4FDC51C843B96F2F77E9617F42979EC240B0203010001
+```
+
+```json title="Output"
+{
+ "command": "maxextra",
+ "params": {
+ "action": "addpermanent",
+ "publickey": "0x30819F300D06092A864886F70D010101050003818D0030818902818100958DD8EA74BD3CBEE4D1D8F030781A665AA062ADDE749951BFD45BCA43A3A315BF46788B9BEF67472203893C996FEC2E35C974CD01CEDE3B3BBF62D5B6B00FB546FD77094F07022FBAF82E7766D92EBFBE14623D4A1B677CF2F7EB42A6CCFC5F82530B061914FA22BA0F9D2458B4E4FDC51C843B96F2F77E9617F42979EC240B0203010001"
+ },
+ "status": true,
+ "pending": false,
+ "response": "Added Permanent Maxima ID : 0x30819F300D06092A864886F70D010101050003818D0030818902818100958DD8EA74BD3CBEE4D1D8F030781A665AA062ADDE749951BFD45BCA43A3A315BF46788B9BEF67472203893C996FEC2E35C974CD01CEDE3B3BBF62D5B6B00FB546FD77094F07022FBAF82E7766D92EBFBE14623D4A1B677CF2F7EB42A6CCFC5F82530B061914FA22BA0F9D2458B4E4FDC51C843B96F2F77E9617F42979EC240B0203010001"
+}
+```
+
+Now your primary node will be have a Permanent Address in the format
+
+MAX#**yourPubKey**#**staticMLSAddress
+
+```plaintext
+MAX#0x30819F300D06092A864886F70D010101050003818D0030818902818100958DD8EA74BD3CBEE4D1D8F030781A665AA062ADDE749951BFD45BCA43A3A315BF46788B9BEF67472203893C996FEC2E35C974CD01CEDE3B3BBF62D5B6B00FB546FD77094F07022FBAF82E7766D92EBFBE14623D4A1B677CF2F7EB42A6CCFC5F82530B061914FA22BA0F9D2458B4E4FDC51C843B96F2F77E9617F42979EC240B0203010001#MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G16YEDA34PYMJS7MC82PYEHB2Q5G2SEKGYP5AA6YFABH6S6PKV63ER84ZGVV7TU2RZKHJYPZ5PZD2E7VE8EPR5S6547YAR38SNRPHR9B74QAVK5FEGYEB21QVNE3E28VBB6C46J6NC1JD80AG3T4JW49D7BKWT55GJQGU5FYKUQVBBDEF4GGNN779NTSBK5VRYS604N02BVGPDC10608004W3G98C@5.64.39.56:9001
+```
+
+This permanent address can now be shared with others, for example on a public site.
+
+Anyone wishing to contact you over Maxima can send you a message via your permanent MAX# address using:
+
+```bash title="Terminal"
+maxima action:send to:MAX#yourPubKey#staticMLSAddress application: data:
+```
+
+### Disabling contacts
+
+Having a permanent address means anyone who knows your MAX# address can add you as a contact which may not be desirable.
+
+To prevent anyone from adding you as a contact, **from your primary node** run the following command:
+
+```bash title="Terminal"
+maxextra action:allowallcontacts enable:false
+```
+
+This will allow users who know your permanent MAX# address to send messages to your node, but will reject any requests to add you as a contact.
+
+### Whitelisting contacts
+
+You can choose to whitelist specific people to allow them to add you as a contact, despite disabling contacts.
+
+Once allowed, they can add you as a contact and vice versa provided they have not disabled contacts.
+
+To whitelist someone, **from your primary node** run the following command, inserting their Maxima public key:
+
+```bash title="Terminal"
+maxextra action:addallowed publickey:INSERTPUBLICKEY
+```
+
+## Additional Help
+
+For additional help, please use the help commands from the Terminal:
+
+```bash title="Terminal"
+help command:maxima
+help command:maxcontacts
+help command:maxextra
+```
diff --git a/content/docs/user-guides/maxima-contacts.mdx b/content/docs/user-guides/maxima/maxima-contacts.mdx
similarity index 97%
rename from content/docs/user-guides/maxima-contacts.mdx
rename to content/docs/user-guides/maxima/maxima-contacts.mdx
index cccef1f..5d6ad49 100644
--- a/content/docs/user-guides/maxima-contacts.mdx
+++ b/content/docs/user-guides/maxima/maxima-contacts.mdx
@@ -1,186 +1,186 @@
----
-title: Manage Maxima contacts
-description: Learn how to manage your Maxima Contacts
-tag: user-guides
----
-
-Your Maxima Contacts are your friends, family or other connections that you wish to communicate with peer-to-peer.
-
-Only one person needs to add the contact address, both users will see their new contact immediately after adding.
-
-Currently a node can support between 10-20 contacts.
-
-## Sharing your Contact Address
-
-Contact addresses change randomly so they must be added as soon as they are shared. Once added, the Minima network will ensure that you remain connected to your contacts when their contact address changes, provided both people are online.
-
-If your friend has trouble adding you, refresh and re-share your latest contact address with them.
-
-1. In MaxContacts, go to the **Profile** page and select **Share Contact**
-2. Share your contact address with a friend and ask them to add you immediately
-
-Once they have added you, you will see your new contact on the **Contacts** page.
-
-That's it! You can now communicate with your contact over MaxSolo or Chatter!
-
-## Adding a new Maxima Contact
-
-1. In MaxContacts, go to the **Contacts** page and select **Add Contact** or **Add your first contact**
-
-
-
-2. Ask your friend for their contact address and paste it in the box shown
-
-
-
-Once added, you will see your new contact on the **Contacts** page and they will see you in their app.
-
-That's it! You can now communicate with your contact over MaxSolo or Chatter!
-
-## Checking the connection to your Contacts
-
-When you or a contact goes offline for a period of time, the connection between the two of you may be interrupted.
-
-When the connection is good you will see a green icon for network and a green icon for chain - this indicates you have recently been able to connect and are both on the same chain.
-
-**If the connection is yellow**, you and your contact may temporarily be disconnected. If this happens, one of you may be offline, simply wait some time and the connection will be re-established.
-
-**If the connection is red**, you and your contact may be temporarily or permanently disconnected. If this happens, you or your contact may have been offline for too long and the connection was broken. If the connection is not re-established automatically after 24 hours, you should delete and re-add your contact with their latest contact address.
-
-Provided you and your contact are online at least once every 24 hours, you should remain connected.
-
-
-
-### Sharing your Contact Address (Terminal)
-
-Contacts can also be managed using commands via the Terminal MiniDapp.
-
-To find your Maxima Contact Address
-
-1. Open the Terminal MiniDapp or Command Line interface where Minima is running
-2. Enter the following command
-
-```bash title="Terminal"
- maxima
-```
-
-**Exapmle output:**
-
-```json
-{
- "command": "maxima",
- "status": true,
- "response": {
- "logs": false,
- "name": "Alice",
- "publickey": "0x30819F300D06092A864886F70D010101050003818D00308189028181009645EF9BB7B4A3E98B87C6C68C072903EE4379DA8DF18AE8082B879A60147043977114E00AA3AE2BBDE380D356352E62D5FBCCB916C4F9EC27AC18D24B7A41F4ED26D63AD21578C421E0D303D7815253EF3EA6CB9410B1F439E8528FC0DDC99724F42937D756B4439ABDCDB485000DE42F16861957761EEB88F44AEA391D65EB0203010001",
- "localidentity": "MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G15W5TUDRFD53T65ZFHM6HG3WW0VE8DSTY3FHHBK0GAS7J9G18S23WTZH9Z0AKEN2NFF3G39YCD9ECBAVNJ5P2R2FJR17YGCD4WRQ87QEQ9MM7B91AU6447GD60UNG5957RPUKR5P845HUGSUGKKFZ3ESJ5P4UGKJFYQMMH1PYFEDMW2G03F45SB8C6ANEZFEN27K9BY3W7B5TC10608005FCUPAE@192.168.0.33:9001",
- "contact": "MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G15AU3QK5NKMR3NW3YCM4EZ99JMFQ5ZPK7ZC5CREZDC52W2NSRQWSJP8DHNC9DR2AP517RVET05JTW89BM1F6FBK2QN3YQ7CVJDARRBHY3Y08FQ99JSNW68D50KVD02UQKK8BJKMHAUAGG3JBCEFBDZGYBPMJJRQAYQSYDH7KR19M2J4P9ZASNEP1240J7SUZB0MCK0DBWB34WS10608007M53YUH@78.141.235.153:9001" // [!code highlight]
- }
-}
-```
-
-3. Copy the highlighted **"contact:"** address (from the last line) **including the IP address** and share it with your friends via a platform of your choice. **Ensure your friend adds you immediately.**
-
-### Adding a new Maxima Contact (Terminal)
-
-1. Ask your friend to send you their Contact Address
-2. Copy it
-3. Open the Minima Terminal MiniDapp or the Command Line interface where Minima is running
-4. Enter the following command, pasting their Contact Address on the end
-
-```bash title="Terminal"
- maxcontacts action:add contact: CONTACT_ADDRESS
-```
-
-**Exapmle:**
-
-```bash title="Terminal"
-maxcontacts action:add contact:MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G15AU3QK5NKMR3NW3YCM4EZ99JMFQ5ZPK7ZC5CREZDC52W2NSRQWSJP8DHNC9DR2AP517RVET05JTW89BM1F6FBK2QN3YQ7CVJDARRBHY3Y08FQ99JSNW68D50KVD02UQKK8BJKMHAUAGG3JBCEFBDZGYBPMJJRQAYQSYDH7KR19M2J4P9ZASNEP1240J7SUZB0MCK0DBWB34WS10608007M53YUH@78.141.235.153:9001
-```
-
-**Exapmle output:**
-
-```json
-{
- "command": "maxcontacts",
- "params": {
- "action": "add",
- "contact": "MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G15AU3QK5NKMR3NW3YCM4EZ99JMFQ5ZPK7ZC5CREZDC52W2NSRQWSJP8DHNC9DR2AP517RVET05JTW89BM1F6FBK2QN3YQ7CVJDARRBHY3Y08FQ99JSNW68D50KVD02UQKK8BJKMHAUAGG3JBCEFBDZGYBPMJJRQAYQSYDH7KR19M2J4P9ZASNEP1240J7SUZB0MCK0DBWB34WS10608007M53YUH@78.141.235.153:9001"
- },
- "status": true,
- "response": {
- "maxima": {
- "from": "0x30819F300D06092A864886F70D010101050003818D00308189028181009645EF9BB7B4A3E98B87C6C68C072903EE4379DA8DF18AE8082B879A60147043977114E00AA3AE2BBDE380D356352E62D5FBCCB916C4F9EC27AC18D24B7A41F4ED26D63AD21578C421E0D303D7815253EF3EA6CB9410B1F439E8528FC0DDC99724F42937D756B4439ABDCDB485000DE42F16861957761EEB88F44AEA391D65EB0203010001",
- "to": "0x30819F300D06092A864886F70D010101050003818D0030818902818100955E1EA85BD2DB1DE43AB2C4761299D9FA2E3343E18566DD86B0A290AFCDEA5C9E50D8DD896EC4AC9427DFDDD0167D9212BB05E67AE82D5C75D1D9F9B55BDAE351D4087E9299F2F2321A5053ED00BDAA510B9D2D15795080E6B639EB6E2155E6D39EF4AAEB956C4F4D853614C994E15CBBB21110133F3D8582CCA01AB92C64970203010001",
- "time": "Thu Jun 30 14:09:08 BST 2022",
- "timemilli": 1656594548748,
- "random": "0x71B501272FE27F565973998A284DD2FBAC83BE56F9D3BBFC9D6DF4608085BE2E",
- "application": "**maxima_contact_ctrl**",
- "data": "0x7B2264656C657465223A66616C73652C22696E74726F223A747275652C227075626C69636B6579223A223078333038313946333030443036303932413836343838364637304430313031303130353030303338313844303033303831383930323831383130303936343545463942423742344133453938423837433643363843303732393033454534333739444138444631384145383038324238373941363031343730343339373731313445303041413341453242424445333830443335363335324536324435464243434239313643344639454332374143313844323442374134314634454432364436334144323135373843343231453044333033443738313532353345463345413643423934313042314634333945383532384643304444433939373234463432393337443735364234343339414244434442343835303030444534324631363836313935373736314545423838463434414541333931443635454230323033303130303031222C2261646472657373223A224D7847313848474736464A3033383631345938435734365553364732303831304B30303730434430305A38333238324736304731355231345631355348315455383852363239533946444B35324A354E42453336315148383644374E454B30555659344D4643354B38334631464E455433473933483544455957574E35444E4A3135574D4356384A535230463753573641594555304659524134365A3939484D4355305A4E50433333473643325652344859354A5943514A524D59514744525050545148563756414A4447593839545455315736574833563936514A4A33315A43514D4A4E47514A364D313054434A553544344637364634464D4D545A474459533130363038303036314738454B47403137382E3137302E33392E39363A39303031222C226E616D65223A22416C696365222C226D696E696D6161646472657373223A224D784730383642503256534D5932554B544D54554E4845545746395A4D55553433364253374E445648343043573552535639504655454A574641434B573352222C22746F70626C6F636B223A223635333134222C22636865636B626C6F636B223A223635323634222C22636865636B68617368223A22307830303030303037443745453931393431314532314544373242453830384433313441314537363435313138444638443432354239384530374136443841393730227D",
- "msgid": "0xD900B339DE228141302C9759B39639517C4933C4B518A33255715E0D8F60C740",
- "delivered": true
- }
- }
-}
-```
-
-5. Check they have been added by running the `maxcontacts` command.
-
-That's it! You can return to the Home screen and open MaxSolo to start a conversation with your new Contact!
-
-### Checking the connection to your Contacts (Terminal)
-
-You must be properly connected to your contacts to successfully send messages.
-
-To check you are connected:
-
-1. Open the Minima Terminal MiniDapp or the Command Line interface where Minima is running
-2. Enter the following command
-
-```bash title="Terminal"
- maxcontacts
-```
-
-**Exapmle output:**
-
-```json
-{
- "command":"maxcontacts",
- "status":true,
- "response":{
- "contacts":[{
- "id":1,
- "publickey":"0x30819F300D06092A864886F70D010101050003818D00308189028181008F2B6054A85102087C7E43A3A06026804FE28723265C97CB8A6B3262BC54E0FDF6CE37854654A87841260D8814F3286555FEEAF00BA039C5822C101C60C3410AC2AEC91ABC823C4A829CF2EF13208A717F5DE86932B057356AECE8AC34AA3D0FE090C1ACD8ED583F820E3F566CFA907AA3FA5B53C0498C75BC3989F9D6B57FC90203010001",
- "currentaddress":"MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G1KHEJ2RCN1FDE843E66DP0E3DF43Q6QWAM5GJ4RU1A555CNR0SA5UR1YCBJ4P0PA3BYBFNGM41FRRH0GM91KANT3JD7KR32Z03WNFD4BK1JG7SCDZHEDG8F6U1MUFR35UJPWN755VDSCH97GNP9TMFFWJ5A42RK57Z6H2D097S2RH4MS3MNRJBNE1Z1B9TTU4SVM1H4FSH876C10608007FDQQ94@31.125.188.214:5001",
- "myaddress":"MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G15R14V15SH1TU88R629S9FDK52J5NBE361QH86D7NEK0UVY4MFC5K83F1FNET3G93H5DEYWWN5DNJ15WMCV8JSR0F7SW6AYEU0FYRA46Z99HMCU0ZNPC33G6C2VR4HY5JYCQJRMYQGDRPPTQHV7VAJDGY89TTU1W6WH3V96QJJ31ZCQMJNGQJ6M10TCJU5D4F76F4FMMTZGDYS106080061G8EKG@178.170.39.96:9001",
- "lastseen":1656174927269,
- "date":"Sat Jun 25 17:35:27 BST 2022",
- "extradata":{
- "name":"Bob",
- "minimaaddress":"MxG086JH4F7R41CNEW5ZJA4VVBET0H66AQZPC3UJ42SFPBYAC999U7EVBNTARKC",
- "topblock":"30664",
- "checkblock":"30614",
- "checkhash":"0x000000259DF90A73F54A36C28FC38009DA30D99F2D6E05E824BD6ED5C3191A62"
- },
- "chaintip":"65319",
- "samechain":true // [!code highlight]
- },
-```
-
-For each contact, ensure the **samechain** parameter is **true**. If it is false, you should re-add your contact.
+---
+title: Manage Maxima contacts
+description: Learn how to manage your Maxima Contacts
+tag: user-guides
+---
+
+Your Maxima Contacts are your friends, family or other connections that you wish to communicate with peer-to-peer.
+
+Only one person needs to add the contact address, both users will see their new contact immediately after adding.
+
+Currently a node can support between 10-20 contacts.
+
+## Sharing your Contact Address
+
+Contact addresses change randomly so they must be added as soon as they are shared. Once added, the Minima network will ensure that you remain connected to your contacts when their contact address changes, provided both people are online.
+
+If your friend has trouble adding you, refresh and re-share your latest contact address with them.
+
+1. In MaxContacts, go to the **Profile** page and select **Share Contact**
+2. Share your contact address with a friend and ask them to add you immediately
+
+Once they have added you, you will see your new contact on the **Contacts** page.
+
+That's it! You can now communicate with your contact over MaxSolo or Chatter!
+
+## Adding a new Maxima Contact
+
+1. In MaxContacts, go to the **Contacts** page and select **Add Contact** or **Add your first contact**
+
+
+
+2. Ask your friend for their contact address and paste it in the box shown
+
+
+
+Once added, you will see your new contact on the **Contacts** page and they will see you in their app.
+
+That's it! You can now communicate with your contact over MaxSolo or Chatter!
+
+## Checking the connection to your Contacts
+
+When you or a contact goes offline for a period of time, the connection between the two of you may be interrupted.
+
+When the connection is good you will see a green icon for network and a green icon for chain - this indicates you have recently been able to connect and are both on the same chain.
+
+**If the connection is yellow**, you and your contact may temporarily be disconnected. If this happens, one of you may be offline, simply wait some time and the connection will be re-established.
+
+**If the connection is red**, you and your contact may be temporarily or permanently disconnected. If this happens, you or your contact may have been offline for too long and the connection was broken. If the connection is not re-established automatically after 24 hours, you should delete and re-add your contact with their latest contact address.
+
+Provided you and your contact are online at least once every 24 hours, you should remain connected.
+
+
+
+### Sharing your Contact Address (Terminal)
+
+Contacts can also be managed using commands via the Terminal MiniDapp.
+
+To find your Maxima Contact Address
+
+1. Open the Terminal MiniDapp or Command Line interface where Minima is running
+2. Enter the following command
+
+```bash title="Terminal"
+ maxima
+```
+
+**Example output:**
+
+```json
+{
+ "command": "maxima",
+ "status": true,
+ "response": {
+ "logs": false,
+ "name": "Alice",
+ "publickey": "0x30819F300D06092A864886F70D010101050003818D00308189028181009645EF9BB7B4A3E98B87C6C68C072903EE4379DA8DF18AE8082B879A60147043977114E00AA3AE2BBDE380D356352E62D5FBCCB916C4F9EC27AC18D24B7A41F4ED26D63AD21578C421E0D303D7815253EF3EA6CB9410B1F439E8528FC0DDC99724F42937D756B4439ABDCDB485000DE42F16861957761EEB88F44AEA391D65EB0203010001",
+ "localidentity": "MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G15W5TUDRFD53T65ZFHM6HG3WW0VE8DSTY3FHHBK0GAS7J9G18S23WTZH9Z0AKEN2NFF3G39YCD9ECBAVNJ5P2R2FJR17YGCD4WRQ87QEQ9MM7B91AU6447GD60UNG5957RPUKR5P845HUGSUGKKFZ3ESJ5P4UGKJFYQMMH1PYFEDMW2G03F45SB8C6ANEZFEN27K9BY3W7B5TC10608005FCUPAE@192.168.0.33:9001",
+ "contact": "MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G15AU3QK5NKMR3NW3YCM4EZ99JMFQ5ZPK7ZC5CREZDC52W2NSRQWSJP8DHNC9DR2AP517RVET05JTW89BM1F6FBK2QN3YQ7CVJDARRBHY3Y08FQ99JSNW68D50KVD02UQKK8BJKMHAUAGG3JBCEFBDZGYBPMJJRQAYQSYDH7KR19M2J4P9ZASNEP1240J7SUZB0MCK0DBWB34WS10608007M53YUH@78.141.235.153:9001" // [!code highlight]
+ }
+}
+```
+
+3. Copy the highlighted **"contact:"** address (from the last line) **including the IP address** and share it with your friends via a platform of your choice. **Ensure your friend adds you immediately.**
+
+### Adding a new Maxima Contact (Terminal)
+
+1. Ask your friend to send you their Contact Address
+2. Copy it
+3. Open the Minima Terminal MiniDapp or the Command Line interface where Minima is running
+4. Enter the following command, pasting their Contact Address on the end
+
+```bash title="Terminal"
+ maxcontacts action:add contact: CONTACT_ADDRESS
+```
+
+**Example:**
+
+```bash title="Terminal"
+maxcontacts action:add contact:MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G15AU3QK5NKMR3NW3YCM4EZ99JMFQ5ZPK7ZC5CREZDC52W2NSRQWSJP8DHNC9DR2AP517RVET05JTW89BM1F6FBK2QN3YQ7CVJDARRBHY3Y08FQ99JSNW68D50KVD02UQKK8BJKMHAUAGG3JBCEFBDZGYBPMJJRQAYQSYDH7KR19M2J4P9ZASNEP1240J7SUZB0MCK0DBWB34WS10608007M53YUH@78.141.235.153:9001
+```
+
+**Example output:**
+
+```json
+{
+ "command": "maxcontacts",
+ "params": {
+ "action": "add",
+ "contact": "MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G15AU3QK5NKMR3NW3YCM4EZ99JMFQ5ZPK7ZC5CREZDC52W2NSRQWSJP8DHNC9DR2AP517RVET05JTW89BM1F6FBK2QN3YQ7CVJDARRBHY3Y08FQ99JSNW68D50KVD02UQKK8BJKMHAUAGG3JBCEFBDZGYBPMJJRQAYQSYDH7KR19M2J4P9ZASNEP1240J7SUZB0MCK0DBWB34WS10608007M53YUH@78.141.235.153:9001"
+ },
+ "status": true,
+ "response": {
+ "maxima": {
+ "from": "0x30819F300D06092A864886F70D010101050003818D00308189028181009645EF9BB7B4A3E98B87C6C68C072903EE4379DA8DF18AE8082B879A60147043977114E00AA3AE2BBDE380D356352E62D5FBCCB916C4F9EC27AC18D24B7A41F4ED26D63AD21578C421E0D303D7815253EF3EA6CB9410B1F439E8528FC0DDC99724F42937D756B4439ABDCDB485000DE42F16861957761EEB88F44AEA391D65EB0203010001",
+ "to": "0x30819F300D06092A864886F70D010101050003818D0030818902818100955E1EA85BD2DB1DE43AB2C4761299D9FA2E3343E18566DD86B0A290AFCDEA5C9E50D8DD896EC4AC9427DFDDD0167D9212BB05E67AE82D5C75D1D9F9B55BDAE351D4087E9299F2F2321A5053ED00BDAA510B9D2D15795080E6B639EB6E2155E6D39EF4AAEB956C4F4D853614C994E15CBBB21110133F3D8582CCA01AB92C64970203010001",
+ "time": "Thu Jun 30 14:09:08 BST 2022",
+ "timemilli": 1656594548748,
+ "random": "0x71B501272FE27F565973998A284DD2FBAC83BE56F9D3BBFC9D6DF4608085BE2E",
+ "application": "**maxima_contact_ctrl**",
+ "data": "0x7B2264656C657465223A66616C73652C22696E74726F223A747275652C227075626C69636B6579223A223078333038313946333030443036303932413836343838364637304430313031303130353030303338313844303033303831383930323831383130303936343545463942423742344133453938423837433643363843303732393033454534333739444138444631384145383038324238373941363031343730343339373731313445303041413341453242424445333830443335363335324536324435464243434239313643344639454332374143313844323442374134314634454432364436334144323135373843343231453044333033443738313532353345463345413643423934313042314634333945383532384643304444433939373234463432393337443735364234343339414244434442343835303030444534324631363836313935373736314545423838463434414541333931443635454230323033303130303031222C2261646472657373223A224D7847313848474736464A3033383631345938435734365553364732303831304B30303730434430305A38333238324736304731355231345631355348315455383852363239533946444B35324A354E42453336315148383644374E454B30555659344D4643354B38334631464E455433473933483544455957574E35444E4A3135574D4356384A535230463753573641594555304659524134365A3939484D4355305A4E50433333473643325652344859354A5943514A524D59514744525050545148563756414A4447593839545455315736574833563936514A4A33315A43514D4A4E47514A364D313054434A553544344637364634464D4D545A474459533130363038303036314738454B47403137382E3137302E33392E39363A39303031222C226E616D65223A22416C696365222C226D696E696D6161646472657373223A224D784730383642503256534D5932554B544D54554E4845545746395A4D55553433364253374E445648343043573552535639504655454A574641434B573352222C22746F70626C6F636B223A223635333134222C22636865636B626C6F636B223A223635323634222C22636865636B68617368223A22307830303030303037443745453931393431314532314544373242453830384433313441314537363435313138444638443432354239384530374136443841393730227D",
+ "msgid": "0xD900B339DE228141302C9759B39639517C4933C4B518A33255715E0D8F60C740",
+ "delivered": true
+ }
+ }
+}
+```
+
+5. Check they have been added by running the `maxcontacts` command.
+
+That's it! You can return to the Home screen and open MaxSolo to start a conversation with your new Contact!
+
+### Checking the connection to your Contacts (Terminal)
+
+You must be properly connected to your contacts to successfully send messages.
+
+To check you are connected:
+
+1. Open the Minima Terminal MiniDapp or the Command Line interface where Minima is running
+2. Enter the following command
+
+```bash title="Terminal"
+ maxcontacts
+```
+
+**Example output:**
+
+```json
+{
+ "command":"maxcontacts",
+ "status":true,
+ "response":{
+ "contacts":[{
+ "id":1,
+ "publickey":"0x30819F300D06092A864886F70D010101050003818D00308189028181008F2B6054A85102087C7E43A3A06026804FE28723265C97CB8A6B3262BC54E0FDF6CE37854654A87841260D8814F3286555FEEAF00BA039C5822C101C60C3410AC2AEC91ABC823C4A829CF2EF13208A717F5DE86932B057356AECE8AC34AA3D0FE090C1ACD8ED583F820E3F566CFA907AA3FA5B53C0498C75BC3989F9D6B57FC90203010001",
+ "currentaddress":"MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G1KHEJ2RCN1FDE843E66DP0E3DF43Q6QWAM5GJ4RU1A555CNR0SA5UR1YCBJ4P0PA3BYBFNGM41FRRH0GM91KANT3JD7KR32Z03WNFD4BK1JG7SCDZHEDG8F6U1MUFR35UJPWN755VDSCH97GNP9TMFFWJ5A42RK57Z6H2D097S2RH4MS3MNRJBNE1Z1B9TTU4SVM1H4FSH876C10608007FDQQ94@31.125.188.214:5001",
+ "myaddress":"MxG18HGG6FJ038614Y8CW46US6G20810K0070CD00Z83282G60G15R14V15SH1TU88R629S9FDK52J5NBE361QH86D7NEK0UVY4MFC5K83F1FNET3G93H5DEYWWN5DNJ15WMCV8JSR0F7SW6AYEU0FYRA46Z99HMCU0ZNPC33G6C2VR4HY5JYCQJRMYQGDRPPTQHV7VAJDGY89TTU1W6WH3V96QJJ31ZCQMJNGQJ6M10TCJU5D4F76F4FMMTZGDYS106080061G8EKG@178.170.39.96:9001",
+ "lastseen":1656174927269,
+ "date":"Sat Jun 25 17:35:27 BST 2022",
+ "extradata":{
+ "name":"Bob",
+ "minimaaddress":"MxG086JH4F7R41CNEW5ZJA4VVBET0H66AQZPC3UJ42SFPBYAC999U7EVBNTARKC",
+ "topblock":"30664",
+ "checkblock":"30614",
+ "checkhash":"0x000000259DF90A73F54A36C28FC38009DA30D99F2D6E05E824BD6ED5C3191A62"
+ },
+ "chaintip":"65319",
+ "samechain":true // [!code highlight]
+ },
+```
+
+For each contact, ensure the **samechain** parameter is **true**. If it is false, you should re-add your contact.
diff --git a/content/docs/user-guides/maxima/meta.json b/content/docs/user-guides/maxima/meta.json
new file mode 100644
index 0000000..cfaef6a
--- /dev/null
+++ b/content/docs/user-guides/maxima/meta.json
@@ -0,0 +1,5 @@
+{
+ "title": "Maxima",
+ "root": false,
+ "pages": ["maxima-contacts", "advanced-maxima-options"]
+}
diff --git a/content/docs/user-guides/approve-transactions.mdx b/content/docs/user-guides/mds/approve-transactions.mdx
similarity index 97%
rename from content/docs/user-guides/approve-transactions.mdx
rename to content/docs/user-guides/mds/approve-transactions.mdx
index eba29de..b20c0cf 100644
--- a/content/docs/user-guides/approve-transactions.mdx
+++ b/content/docs/user-guides/mds/approve-transactions.mdx
@@ -1,18 +1,18 @@
----
-title: Approve Transactions
-description: Learn how to approve transactions
-tag: user-guides
----
-
-When using MiniDapps that have READ permission, you will need to **accept or deny** any transactions or sensitive commands they trigger from the **Pending** MiniDapp.
-
-
-
-To review and accept or deny pending commands:
-
-1. Open the **Pending** MiniDapp.
-2. All actions awaiting approval will be listed in the order they were triggered.
-3. Review each command and select **Approve** to run the command or **Deny** to stop the command and remove it from the list.
-4. If your wallet if locked, you may be prompted to enter your password when approving a command.
-
-
+---
+title: Approve Transactions
+description: Learn how to approve transactions
+tag: user-guides
+---
+
+When using MiniDapps that have READ permission, you will need to **accept or deny** any transactions or sensitive commands they trigger from the **Pending** MiniDapp.
+
+
+
+To review and accept or deny pending commands:
+
+1. Open the **Pending** MiniDapp.
+2. All actions awaiting approval will be listed in the order they were triggered.
+3. Review each command and select **Approve** to run the command or **Deny** to stop the command and remove it from the list.
+4. If your wallet if locked, you may be prompted to enter your password when approving a command.
+
+
diff --git a/content/docs/user-guides/manage-minidapps.mdx b/content/docs/user-guides/mds/manage-minidapps.mdx
similarity index 97%
rename from content/docs/user-guides/manage-minidapps.mdx
rename to content/docs/user-guides/mds/manage-minidapps.mdx
index 5bffd22..f750178 100644
--- a/content/docs/user-guides/manage-minidapps.mdx
+++ b/content/docs/user-guides/mds/manage-minidapps.mdx
@@ -1,84 +1,84 @@
----
-title: Managing MiniDapps
-description: Learn how to manage your MiniDapps
-tag: user-guides
----
-
-Provided the MiniDapp system is enabled, a set of default MiniDapps will be installed when starting a new node. New or updated MiniDapps can be found in the **Dapp Store** MiniDapp.
-
-## Installing new MiniDapps
-
-1. Login to Minima and open the **Dapp Store** MiniDapp
-2. If the Dapp Store is in WRITE mode, you can install MiniDapps with one click then return to the home screen to open the new MiniDapp.
-
-
-
-3. If the Dapp Store is in READ mode, you must first download the MiniDapp to your device
-
-_Alternatively, MiniDapps can be downloaded from our [MiniDapp site.](https://minidapps.minima.global/)_
-
-
-
-
- If using Safari, ensure the MiniDapps are not unzipped during the download by
- changing the setting as follows:
- - Open Safari
- - Click Preferences
- - Under the **General** tab, uncheck the option **"Open “safe” files after
- downloading"**
-
-
-
-4. Return to the home screen and click on the + icon in the top right
-
-
-
-5. **Choose File** and select the MiniDapp you just downloaded
-
-6. Click **Install**, then return to the home screen to open it
-
-
-
-## Updating MiniDapps
-
-MiniDapps do not automatically update when a new version is released to the DAPP store, this gives you the flexibility to decide which version of a MiniDapp you wish to use and ensures that MiniDapp distribution is not centralized.
-
-When a new version of a MiniDapp becomes available, it is generally best practice to **update** a MiniDapp instead of installing the new one and deleting the old one, as each MiniDapp contains it's own data which is lost when deleting a MiniDapp.
-
-By updating a MiniDapp, all data will be transferred automatically to the new MiniDapp, preventing loss of data.
-
-**To update a MiniDapp to a new version:**
-
-1. Login to Minima and open the **Dapp Store** MiniDapp
-
-2. If the Dapp Store is in WRITE mode, you can update MiniDapps with one click then return to the home screen to open the new MiniDapp.
-
-3. If the Dapp Store is in READ mode, you must first download the MiniDapp to your device
-
-_Alternatively, MiniDapps can be downloaded from our [MiniDapp site.](https://minidapps.minima.global/)_
-
-3. Return to the Home screen and right click (or long press on mobile) on the MiniDapp you wish to update
-
-
-
-4. Select **Update**
-
-5. Find and select the MiniDapp you just downloaded
-
-6. Click **Update**
-
-## Deleting MiniDapps
-
-**Deleting a MiniDapp is irreversible. Any data stored in the MiniDapp's database will be lost when deleted.**
-
-**On-chain data will not be lost** as a result of deleting a MiniDapp, this means that deleting the Wallet MiniDapp for example, will not result in any loss of coins.
-
-To delete a MiniDapp:
-
-1. Right click on the MiniDapp to uninstall (or long press on mobile)
-
-2. Select **Delete MiniDapp**
-
-
-
-3. Select **Confirm**
+---
+title: Managing MiniDapps
+description: Learn how to manage your MiniDapps
+tag: user-guides
+---
+
+Provided the MiniDapp system is enabled, a set of default MiniDapps will be installed when starting a new node. New or updated MiniDapps can be found in the **Dapp Store** MiniDapp.
+
+## Installing new MiniDapps
+
+1. Login to Minima and open the **Dapp Store** MiniDapp
+2. If the Dapp Store is in WRITE mode, you can install MiniDapps with one click then return to the home screen to open the new MiniDapp.
+
+
+
+3. If the Dapp Store is in READ mode, you must first download the MiniDapp to your device
+
+_Alternatively, MiniDapps can be downloaded from our [MiniDapp site.](https://minidapps.minima.global/)_
+
+
+
+
+ If using Safari, ensure the MiniDapps are not unzipped during the download by
+ changing the setting as follows:
+ - Open Safari
+ - Click Preferences
+ - Under the **General** tab, uncheck the option **"Open “safe” files after
+ downloading"**
+
+
+
+4. Return to the home screen and click on the + icon in the top right
+
+
+
+5. **Choose File** and select the MiniDapp you just downloaded
+
+6. Click **Install**, then return to the home screen to open it
+
+
+
+## Updating MiniDapps
+
+MiniDapps do not automatically update when a new version is released to the DAPP store, this gives you the flexibility to decide which version of a MiniDapp you wish to use and ensures that MiniDapp distribution is not centralized.
+
+When a new version of a MiniDapp becomes available, it is generally best practice to **update** a MiniDapp instead of installing the new one and deleting the old one, as each MiniDapp contains it's own data which is lost when deleting a MiniDapp.
+
+By updating a MiniDapp, all data will be transferred automatically to the new MiniDapp, preventing loss of data.
+
+**To update a MiniDapp to a new version:**
+
+1. Login to Minima and open the **Dapp Store** MiniDapp
+
+2. If the Dapp Store is in WRITE mode, you can update MiniDapps with one click then return to the home screen to open the new MiniDapp.
+
+3. If the Dapp Store is in READ mode, you must first download the MiniDapp to your device
+
+_Alternatively, MiniDapps can be downloaded from our [MiniDapp site.](https://minidapps.minima.global/)_
+
+3. Return to the Home screen and right click (or long press on mobile) on the MiniDapp you wish to update
+
+
+
+4. Select **Update**
+
+5. Find and select the MiniDapp you just downloaded
+
+6. Click **Update**
+
+## Deleting MiniDapps
+
+**Deleting a MiniDapp is irreversible. Any data stored in the MiniDapp's database will be lost when deleted.**
+
+**On-chain data will not be lost** as a result of deleting a MiniDapp, this means that deleting the Wallet MiniDapp for example, will not result in any loss of coins.
+
+To delete a MiniDapp:
+
+1. Right click on the MiniDapp to uninstall (or long press on mobile)
+
+2. Select **Delete MiniDapp**
+
+
+
+3. Select **Confirm**
diff --git a/content/docs/user-guides/mds/meta.json b/content/docs/user-guides/mds/meta.json
new file mode 100644
index 0000000..e99c4a9
--- /dev/null
+++ b/content/docs/user-guides/mds/meta.json
@@ -0,0 +1,5 @@
+{
+ "title": "MiniDapps",
+ "root": false,
+ "pages": ["minidapp-permissions", "approve-transactions","manage-minidapps"]
+}
diff --git a/content/docs/user-guides/minidapp-permissions.mdx b/content/docs/user-guides/mds/minidapp-permissions.mdx
similarity index 88%
rename from content/docs/user-guides/minidapp-permissions.mdx
rename to content/docs/user-guides/mds/minidapp-permissions.mdx
index 1e129d1..106d41b 100644
--- a/content/docs/user-guides/minidapp-permissions.mdx
+++ b/content/docs/user-guides/mds/minidapp-permissions.mdx
@@ -1,23 +1,23 @@
----
-title: MiniDapp Permissions
-description: Learn how to set your MiniDapp permissions
-tag: user-guides
----
-
-By default, all MiniDapps will be given **READ** permission. Any transactions or sensitive commands triggered from read apps must be [approved](/docs/userguides/usingyournode/approvingtxns) from the Pending MiniDapp.
-
-MiniDapps with **WRITE** permission can transact or run any command without asking for your approval.
-
-
- Before giving a MiniDapp WRITE permissions, ensure your [wallet is
- locked](/docs/user-guides/lock-your-wallet) with a password. **You should only
- give WRITE permission to MiniDapps that you trust.**
-
-
-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)
- 
-3. Click **Confirm**
- 
+---
+title: MiniDapp Permissions
+description: Learn how to set your MiniDapp permissions
+tag: user-guides
+---
+
+By default, all MiniDapps will be given **READ** permission. Any transactions or sensitive commands triggered from read apps must be [approved](/docs/user-guides/mds/approve-transactions) from the Pending MiniDapp.
+
+MiniDapps with **WRITE** permission can transact or run any command without asking for your approval.
+
+
+ Before giving a MiniDapp WRITE permissions, ensure your [wallet is
+ locked](/docs/user-guides/lock-your-wallet) with a password. **You should only
+ give WRITE permission to MiniDapps that you trust.**
+
+
+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)
+ 
+3. Click **Confirm**
+ 
diff --git a/content/docs/user-guides/meg/meg-wallet-api.mdx b/content/docs/user-guides/meg/meg-wallet-api.mdx
new file mode 100644
index 0000000..7779d7c
--- /dev/null
+++ b/content/docs/user-guides/meg/meg-wallet-api.mdx
@@ -0,0 +1,570 @@
+---
+title: Add Minima to Your Exchange
+description: MEG user guides
+tag: user-guides
+---
+
+The Wallet API allows you to perform simple Wallet functionality for any number of users.
+
+This does NOT access the main wallet of the Minima node and does not save any of the private keys or data.
+
+Each API Endpoint requires certain parameters and can be sent as a POST or GET request.
+
+## Recommended setup
+
+When providing custodial wallet solutions for users, we highly recommend a dual-node setup, using an offline node for signing transactions and an online Mega MMR node for constructing and posting transactions, and any other actions that require on-chain information.
+
+You will also need a USB or other method to transfer the unsigned/signed transaction files between devices.
+
+We assume that no keys will be stored on either the online node or the offline node. Accounts (wallets) can be generated from the offline Minima node and keys stored securely elsewhere.
+
+## Pre-requisites
+
+For the following tutorials, you will need:
+
+1. An online [Mega MMR Minima node](/docs/run-a-node/mega-node) - this ensures the node is recording all coin proofs required for transactions.
+
+2. An online instance of [MEG](/docs/run-a-node/meg-setup) running
+
+3. An API user created in MEG
+
+4. (Optional) An offline Minima node with RPC enabled
+
+5. (Optional) An offline instance of MEG running
+
+
+## How to create a new wallet
+
+Generating wallets can optionally be done from a Minima node that is offline, ensuring that the private keys are never hot.
+
+**You will need to securely store all generated Wallet details for your users. This information will not be stored on the node and will not be shown again.**
+
+To create a new wallet with a secure random seed phrase, use the following Wallet API endpoint:
+
+```
+/wallet/create
+```
+
+Example:
+```
+curl http://127.0.0.1:8080/wallet/create -X POST --user api:123
+```
+
+The response contains
+
+| Response field | Description |
+|--------------|----------------------------------------------------|
+| `seedphrase` | the generated seed phrase |
+| `privatekey` | the associated private key |
+| `modifier` | the modifier (salt) used |
+| `publickey` | the associated public key |
+| `script` | the script associated with the address |
+| `address` | 0x address for receiving funds |
+| `miniaddress` | Mx address for receiving funds |
+
+
+ Either the `0x` or `Mx` address can be used to receive funds, however it is recommended to use the Mx address as this contains a checksum which is checked before a transaction is executed.
+
+
+## How to create a wallet from a seed phrase
+
+Alternatively, to create a wallet with your chosen seed phrase, use the following Wallet API endpoint and provide `seedphrase` as a parameter:
+
+```
+/wallet/seedphrase
+```
+
+Example:
+```
+curl http://127.0.0.1:8080/wallet/seedphrase -d "seedphrase=ORBIT LUXURY EXCHANGE GUN DETECT PALACE AWKWARD TOMORROW ADVICE SPOON RUG BOUNCE VIVID CHERRY ENEMY SOUND BREAD COCONUT ENFORCE TALK CATCH WANT VERIFY TWENTY" -X POST --user api:123
+```
+
+**You will need to securely store these details for your users. This information will not be stored on the node and will not be shown again.**
+
+
+## How to check the balance of an address
+
+To check the balance of a wallet that you have created, use the following Wallet API endpoint and provide `address` as a parameter.
+
+```
+/wallet/balance
+```
+
+Example:
+```
+curl http://127.0.0.1:8080/wallet/balance -d "address=MxG086U24F17MT50Y6VUPBPD6VJKTYVMR71WRSYURYUVZDN1VMG25FF39M0458A" -X POST --user api:123
+```
+
+The response contains
+
+| Response field | Description |
+|--------------|----------------------------------------------------|
+| `token` | name of the token |
+| `tokenid` | tokenid of the token |
+| `confirmed` | the confirmed balance (total balance with 3 or more block confirmations, including balance that may be locked in a contract) |
+| `unconfirmed` | the unconfirmed balance (total balance with less than 3 block confirmations) |
+| `sendable` | the sendable balance (total balance with 3 or more block confirmations that is available for use i.e. not locked in a contract)|
+| `coins` | the total number of coins (UTxOs) that make up the balance |
+| `total` | the total supply of Minima |
+
+## How to send from a wallet (online)
+
+To send an amount from a wallet that you have created, use the following Wallet API endpoint:
+
+```
+/wallet/send
+```
+
+And provide the following parameters:
+
+| Parameter | Description |
+|---------------|---------------------------------------------------------------------------------------------------------|
+| `tokenid` | TokenID of the token (defaults to Minima - 0x00) |
+| `amount` | Amount to send |
+| `toaddress` | Address to send to |
+| `fromaddress` | Address to send from (provided when creating the wallet) |
+| `privatekey` | Private Key of the FROM Address (provided when creating the wallet) |
+| `script` | The script of the FROM Address (provided when creating the wallet) |
+| `keyuses` | The number of times this address has been used (nonce) |
+| `burn` | Transaction Burn / Fee (optional) |
+
+
+
+Example
+
+```
+curl http://127.0.0.1:8080/wallet/send -d "tokenid=0x00&amount=0.01&toaddress=MxG080M5PYA0ZQG59YG9W106SEBD8FPAWATFTN8B1NNW6EW8KJYCCEDD2RP4G1A&fromaddress=MxG086U24F17MT50Y6VUPBPD6VJKTYVMR71WRSYURYUVZDN1VMG25FF39M0458A&privatekey=0xAA49...&script=RETURN SIGNEDBY(0xC79AA2E9D0FF21DD27A28717C3EB63737DE98931E46173B9227EAA7A1A2F8677)&keyuses=1&burn=0.01" -X POST --user api:123
+```
+
+From the response, you can capture the txpowid (i.e. the transaction id), which can then be checked to see when it is on-chain.
+
+
+You should ignore the `block` number in the response from the send command, this is the block number that the txpow was attempting to become, NOT the block that the transaction is in.
+
+
+
+### How to set the Key Uses
+
+When sending or signing with the Wallet API a keyuses(nonce) value is required. It must be increased each time the same private key is used. It must be a number between 1- 262,144.
+
+For functions where `keyuses` is a parameter, you can specify your own value by providing the `keyuses` parameter or use the value stored by MEG by providing the `publickey` parameter.
+
+To store the latest `keyuses` in the database, you must provide both the `keyuses` and `publickey` parameters.
+
+The actual keyuses database file can be found in the data folder `nonce.mv.db`. You can backup and reuse this file if you install MEG on another server.
+
+OR - you can set the MINIMUM nonce value to a high enough value without copying the database by using the `-minkeyuses` param when starting MEG.
+
+The current MAX value for all keyuses is displayed on the Admin page.
+
+
+## How to check an on-chain transaction (online)
+
+Once a transaction has been posted, you can check the block number it is in and number of block confirmations it has on-chain. This can only be done within the first 24 hours from the transaction being posted.
+
+Use following Wallet API endpoint, providing the `txpowid` of the transaction as a parameter - this can be found in the response from `send`, `posttxn` or `minetxn`)
+
+```
+/wallet/checktxpow
+```
+
+Example
+```
+curl http://127.0.0.1:8080/wallet/checktxpow -d "txpowid=0x0000170771B9339A3A80DD1B3450E932F7C4054414AC6FACA5376D83E71062F1" -X POST --user api:123
+```
+
+The response contains
+| Response field | Description |
+|-----------------|------------------------------------------------------------------------------|
+| `found` | was the transaction found on chain? |
+| `block` | the block number that the transaction is in |
+| `blockid` | the block hash that the transaction is in |
+| `tip` | the current top block |
+| `confirmations` | the number of block confirmations for the transaction |
+
+
+## How to get a transaction (txpow) details (online)
+
+Once a transaction has been posted, you can retrieve the details of the transaction from the node using the txpowid. This can only be done within the first 48 hours from the transaction being posted, then it is pruned.
+
+To get the transaction details, use following Wallet API endpoint, providing the `txpowid` of the transaction as a parameter - this can be found in the response from `send`, `posttxn` or `minetxn`)
+
+```
+/wallet/gettxpow
+```
+
+Example:
+```
+curl http://127.0.0.1:8080/wallet/gettxpow -d "txpowid=0x0000170771B9339A3A80DD1B3450E932F7C4054414AC6FACA5376D83E71062F1" -X POST --user api:123
+```
+
+The response contains the full txpow unit details.
+
+## How to estimate the burn
+
+To find out recent on-chain burn metrics, you can create an endpoint for the burn function which displays min, max, avg and median burn for the last 1, 10 and 50 blocks.
+
+## Example transactions
+
+The most secure method for creating & signing transactions is to create the transaction from an online node, transfer the transaction data (via USB for example) to an offline node for signing and then post the transaction from an online node.
+
+### Example 1 : Automatic coin selection
+
+The following example explains how to construct, sign and post a transaction where the coin inputs are automatically selected.
+
+This only uses endpoints provided by the wallet API.
+
+The required endpoints are as follows:
+
+
+
+
+**(Optional) Lock coins**
+
+Node status: Online
+
+If you intend to create multiple transactions from the same address without posting them, you can lock the coins - this prevents the same coins being used in more than one unposted transaction. Once you have finished creating unsigned transactions, you can unlock the coins.
+
+```
+/wallet/lockcoins
+```
+
+
+
+
+**Create unsigned transaction**
+
+Node status: Online
+
+This endpoint creates an unsigned transaction with automatic coin selection based on the amount and burn. The coin proofs are added to the transaction at this stage.
+
+```
+/wallet/unsignedtxn
+```
+
+Please refer to the Wallet API page in MEG for the relevant parameters.
+
+
+
+This transaction must be posted within 24 hours to ensure the coinproofs are valid.
+
+
+The response provides the data that must be signed with an online or offline node.
+
+
+
+
+**Sign the transaction**
+
+Using the data provided from the `unsignedtxn` response, you must sign the transaction, providing the private key associated with the `fromaddress`.
+
+
+Note that keyuses should be incremented each time the same private key is used to sign a transaction. See [How to set key uses](/docs/user-guides/meg-wallet-api#how-to-set-the-key-uses)
+
+
+Node status: Online/Offline
+
+```
+/wallet/signtxn
+```
+
+Example
+
+```bash title="Terminal"
+curl http://127.0.0.1:8080/wallet/signtxn -d "data=0x0000004230783735334136343137344146393930434136443241373142373142454430443737423035353033423137344533453135363537443738343339423041303830314600010100000020F57C0E43B92B6E3E416B7FC55DC4681A1E56A4771C7918D2F3A6C1A858F9E54300000020DE111E13DBA5054DFF657969BF3A76BFB6CE196F95F6EBEFE1B70FED0115EF1A0201080000000100000001000000000309C94400000310036A0001000000010200000020B2BBEC3A60E0B30271A4745D41A86317527F9BFF5ED70A36B2ABFBB9D189AA1100000020162E6AA063502A6B04C820371CB6A1F95495D7F6E8586F7919D245275631CD68020101000000010001000100000000010000000100000100000000002035BB59FF84D3A2269207537EE15CA3ADF2874C36945E86C384477E14ACDECC0F00000020DE111E13DBA5054DFF657969BF3A76BFB6CE196F95F6EBEFE1B70FED0115EF1A02010600000001000000010000000001000000010000010000000100000000010000010000010100000020F57C0E43B92B6E3E416B7FC55DC4681A1E56A4771C7918D2F3A6C1A858F9E54300000020DE111E13DBA5054DFF657969BF3A76BFB6CE196F95F6EBEFE1B70FED0115EF1A0201080000000100000001000000000309C94400000310036A0001000000031007AA00010900000000209D0387DD114382ABDB3EB1393B15B05F503BAD844EA38D41827C0EFC7D80770A0A0101000000002088DF4FFDEA4D537FDC89EF26F78D47CFA11E196CC7CD8AB3A1F9CE2ED8A3F871000100010000002088B515C841EF0CF8B2D262BB1058ED74CA2921FE105948A6AA8423C8CF7820580A0405F5E10100000000207073121CC6FB5956AD653699B2FAB27E9B8DA56C9C3BBF45A7467A911DB736FE0A01010000000020A33D04EDEEA5083A571ED162EFF6B3C02B206924B6647009E057333497A193B10A0405F5E1040000000020D448043506006022CC5B4189A9A5A55871B2F4A77FD040E9DF4F53EA2195EA5C0A0603D85C8466040100000020253B002D2F83C1C98EEBF4809B4B42A8A24699996F81D31BB68A0D8139B6650E0A062910776F53100000000020A3A3B04BDF61D95FE0907D1B68D82416A7BDDC7C34094E9A249DA7646EFFB3A70B080494C5FE246E5C3C0100000020D4F06AD3B17F187B4172BF1809AFD716A396E02D5B608CB4C346554A941087022C16018E4EEF5C922F5D746BD56F635E8F3B20CC1456BBEB0001010000005352455455524E205349474E454442592830784337394141324539443046463231444432374132383731374333454236333733374445393839333145343631373342393232374541413741314132463836373729000100000100&privatekey=0xAA49...&keyuses=2" -X POST --user api:123
+```
+
+The response will provide the data that is required for mining and posting the transaction.
+
+
+
+
+**Mine and Post the transaction**
+
+**Option 1: Mine and Post the transaction simultaneously**
+
+Node status: Online
+
+Post and mine the transaction simultaneously, providing the data from the `signtxn` response as a parameter.
+
+`/wallet/posttxn`
+
+The response will provide the `txpowid` that you can subsequently use to track the transaction.
+
+
+**Option 2: Mine and Post the transaction separately**
+
+1. ALTERNATIVELY, you can mine the transaction first to get the correct txpowid without posting the transaction to the network, providing the data from the `signtxn` response as a parameter.
+
+Node status: Online/Offline
+
+```
+/wallet/minetxn
+```
+
+2. To then post a pre-mined transaction to the network, use the following endpoint, providing the data from the `minetxn` response.
+
+Node status: Online
+
+```
+/wallet/postminedtxn
+```
+
+
+
+
+
+**Unlock the coins**
+
+You can repeat step 2 to create as many unsigned transactions from the same address as required, without posting them.
+
+Once you have finished creating unsigned transactions, you can unlock the coins.
+
+Node status: Online
+
+`/wallet/unlockcoins`
+
+
+
+
+**Check the transaction is on-chain**
+
+Within 24 hours of the transaction being posted, you can check the block number it is in and number of block confirmations it has on-chain.
+
+Use following Wallet API endpoint, providing the `txpowid` of the transaction as a parameter - this can be found in the response from `send`, `posttxn` or `minetxn`)
+
+Node status: Online
+
+```
+/wallet/checktxpow
+```
+
+
+
+
+
+### Example 2 : Custom coin selection
+
+The following example explains how to construct, sign and post a transaction with coin inputs of your choice.
+
+This only uses endpoints provided by the Wallet API.
+
+The required steps are as follows:
+
+
+
+
+**Get a list of coins**
+
+To spend from a specific address, search for the list of coins relevant to the address.
+
+Node status: Online
+
+```
+ /wallet/listcoins
+```
+
+
+Example:
+```bash title="Terminal"
+curl http://127.0.0.1:8080/wallet/listcoins -d "address=MxG086U24F17MT50Y6VUPBPD6VJKTYVMR71WRSYURYUVZDN1VMG25FF39M0458A" -X POST --user api:123
+```
+
+The response contains a list of coins with:
+
+| Response | Description |
+|----------------|-----------------------------------------------------------|
+| `coinid` | the unique id of the coin |
+| `amount` | the value of the coin |
+| `address` | the 0x address of the coin |
+| `miniaddress` | the Mx address of the coin |
+| `token` | the token name (if not Minima) |
+| `tokenid` | the tokenid of the coin (0x00 is Minima) |
+| `storestate` | true if the coin is storing the state |
+| `state` | the state variables stored in the coin |
+| `spent` | is the coin spent? |
+| `mmrentry` | the entry number of the coin in the mmr |
+| `created` | blocktime that the coin was created in |
+| `age` | how many blocks deep the coin is in the chain |
+
+
+
+
+**Construct a transaction**
+
+You can manually construct a transaction, providing a comma separated list of input coins. You will have to calculate how much to send (toamount) and how much change to return to the fromaddress.
+
+
+If the toamount + changeamount < coin amount , the remaining amount will be burned.
+
+
+Node status: Online
+
+```
+/wallet/constructtxn
+```
+
+Example:
+Note: This coin has a balance of 0.08, the toamount is 0.05 and the changeamount is 0.02, therefore 0.01 will be set as the burn amount.
+
+```bash title="Terminal"
+curl http://127.0.0.1:8080/wallet/constructtxn -d "tokenid=0x00&coinlist=0xF57C0E43B92B6E3E416B7FC55DC4681A1E56A4771C7918D2F3A6C1A858F9E543&toamount=0.05&toaddress=MxG080M5PYA0ZQG59YG9W106SEBD8FPAWATFTN8B1NNW6EW8KJYCCEDD2RP4G1A&fromaddress=MxG086U24F17MT50Y6VUPBPD6VJKTYVMR71WRSYURYUVZDN1VMG25FF39M0458A&changeaddress=MxG086U24F17MT50Y6VUPBPD6VJKTYVMR71WRSYURYUVZDN1VMG25FF39M0458A&changeamount=0.02&script=RETURN SIGNEDBY(0xC79AA2E9D0FF21DD27A28717C3EB63737DE98931E46173B9227EAA7A1A2F8677)" -X POST --user api:123
+```
+
+This transaction must be posted within 24 hours to ensure the coin proofs are valid.
+The response provides the data that must be signed with an online or offline node.
+
+
+
+
+**Sign the transaction**
+
+Node status: Online/Offline
+
+```
+/wallet/signtxn
+```
+
+Using the data provided from the `unsignedtxn` response, you must sign the transaction, providing the private key associated with the `fromaddress`.
+
+
+Note that keyuses should be incremented each time the same private key is used to sign a transaction. See [How to set key uses](/docs/user-guides/meg-wallet-api#how-to-set-the-key-uses)
+
+
+Example
+
+```
+curl http://127.0.0.1:8080/wallet/signtxn -d "data=0x0000004230783344413937354436384232314434413837443343383036373041414239464332394545303035424143394345443638413236433438423837383432423733343400010100000020F57C0E43B92B6E3E416B7FC55DC4681A1E56A4771C7918D2F3A6C1A858F9E54300000020DE111E13DBA5054DFF657969BF3A76BFB6CE196F95F6EBEFE1B70FED0115EF1A0201080000000100000001000000000309C94400000310036A0001000000010200000020B2BBEC3A60E0B30271A4745D41A86317527F9BFF5ED70A36B2ABFBB9D189AA1100000020162E6AA063502A6B04C820371CB6A1F95495D7F6E8586F7919D245275631CD68020105000000010001000100000000010000000100000100000000002035BB59FF84D3A2269207537EE15CA3ADF2874C36945E86C384477E14ACDECC0F00000020DE111E13DBA5054DFF657969BF3A76BFB6CE196F95F6EBEFE1B70FED0115EF1A02010200000001000100010000000001000000010000010000000100000000010000010000010100000020F57C0E43B92B6E3E416B7FC55DC4681A1E56A4771C7918D2F3A6C1A858F9E54300000020DE111E13DBA5054DFF657969BF3A76BFB6CE196F95F6EBEFE1B70FED0115EF1A0201080000000100000001000000000309C94400000310036A0001000000031007E000010900000000209D0387DD114382ABDB3EB1393B15B05F503BAD844EA38D41827C0EFC7D80770A0A0101000000002088DF4FFDEA4D537FDC89EF26F78D47CFA11E196CC7CD8AB3A1F9CE2ED8A3F871000100010000002088B515C841EF0CF8B2D262BB1058ED74CA2921FE105948A6AA8423C8CF7820580A0405F5E10100000000207073121CC6FB5956AD653699B2FAB27E9B8DA56C9C3BBF45A7467A911DB736FE0A01010000000020A33D04EDEEA5083A571ED162EFF6B3C02B206924B6647009E057333497A193B10A0405F5E1040000000020D448043506006022CC5B4189A9A5A55871B2F4A77FD040E9DF4F53EA2195EA5C0A0603D85C8466040100000020253B002D2F83C1C98EEBF4809B4B42A8A24699996F81D31BB68A0D8139B6650E0A062910776F53100000000020A3A3B04BDF61D95FE0907D1B68D82416A7BDDC7C34094E9A249DA7646EFFB3A70B080494C5FE246E5C3C0100000020D4F06AD3B17F187B4172BF1809AFD716A396E02D5B608CB4C346554A941087022C16018E4EEF5C922F5D746BD56F635E8F3B20CC1456BBEB0001010000005352455455524E205349474E454442592830784337394141324539443046463231444432374132383731374333454236333733374445393839333145343631373342393232374541413741314132463836373729000100000100&privatekey=0xAA49...&keyuses=2" -X POST --user api:123
+```
+
+The response will provide the data that is required for mining and posting the transaction.
+
+
+
+
+**Mine and Post the transaction**
+
+**Option 1: Mine and Post the transaction simultaneously**
+
+Node status: Online
+
+Post and mine the transaction simultaneously, providing the data from the `signtxn` response as a parameter.
+
+`/wallet/posttxn`
+
+The response will provide the `txpowid` that you can subsequently use to track the transaction.
+
+
+**Option 2: Mine and Post the transaction separately**
+
+1. ALTERNATIVELY, you can mine the transaction first to get the correct txpowid without posting the transaction to the network, providing the data from the `signtxn` response as a parameter.
+
+Node status: Online/Offline
+
+```
+/wallet/minetxn
+```
+
+2. To then post a pre-mined transaction to the network, use the following endpoint, providing the data from the `minetxn` response.
+
+Node status: Online
+
+```
+/wallet/postminedtxn
+```
+
+The transaction will be posted to the network.
+
+
+
+
+**Check the transaction is on-chain**
+
+Within 24 hours of the transaction being posted, you can check the block number it is in and number of block confirmations it has on-chain.
+
+Use following Wallet API endpoint, providing the `txpowid` of the transaction as a parameter - this can be found in the response from `send`, `posttxn` or `minetxn`)
+
+Node status: Online
+
+```
+/wallet/checktxpow
+```
+
+
+
+
+
+
+
+
+{/*
+## MySQL setup (Optional)
+
+REPLACE WITH LINK TO MYSQL PAGE
+
+We recommend setting up a connection from your Minima node to a MySQL database for the purpose of recording and storing full block history that is automatically pruned from the node after 12 hours.
+This way you can always query your SQL database for transactions.
+Download and install MySQL
+Create a database called archivedb on a port of your choice
+Create a user archiveuser with full access to archivedb
+Check the connection from the Minima node to the database using the following command into the Minima terminal
+
+mysql host:127.0.0.1:3306 user:archiveuser password:archiveuserpassword database:archivedb action:info
+
+You should see an output similar to the following:
+```
+{
+ "command":"mysql",
+ "params":{
+ "host":"127.0.0.1:3306",
+ "user":"archiveuser",
+ "password":"archiveuserpassword",
+ "database":"archivedb",
+ "action":"info"
+ },
+ "status":true,
+ "pending":false,
+ "response":{
+ "archive":{
+ "archivestart":860695,
+ "archiveend":960695,
+ "archivetotal":100000
+ },
+ "mysql":{
+ "mysqlstart":-1,
+ "mysqlend":-1,
+ "mysqltotal":0
+ },
+ "autobackup":false
+ }
+}
+```
+
+Set autobackups on, this will periodically sync blocks and txpow data from the node to the SQL database.
+
+```
+mysql host:127.0.0.1:3306 user:archiveuser password:archiveuserpassword database:archivedb action:autobackup enable:true
+```
+
+You should see an output similar to the following, with autobackup set to true.
+```
+{
+ "command":"mysql",
+ "params":{
+ "host":"127.0.0.1:3306",
+ "user":"archiveuser",
+ "password":"archiveuserpassword",
+ "database":"archivedb",
+ "action":"autobackup",
+ "enable":"true"
+ },
+ "status":true,
+ "pending":false,
+ "response":{
+ "autobackup":true
+ }
+}
+```
+The first backup will take place within 24 hours.
+Then to query for a specific txpow (block), you can use
+mysql ..LOGIN_DETAILS.. action:findtxpow txpowid:0x00FFEEDD.. */}
diff --git a/content/docs/user-guides/meg/meta.json b/content/docs/user-guides/meg/meta.json
new file mode 100644
index 0000000..6049abb
--- /dev/null
+++ b/content/docs/user-guides/meg/meta.json
@@ -0,0 +1,5 @@
+{
+ "title": "MEG",
+ "root": false,
+ "pages": ["meg-wallet-api"]
+}
diff --git a/content/docs/user-guides/mega-node/meta.json b/content/docs/user-guides/mega-node/meta.json
new file mode 100644
index 0000000..1c64db2
--- /dev/null
+++ b/content/docs/user-guides/mega-node/meta.json
@@ -0,0 +1,5 @@
+{
+ "title": "Mega Nodes",
+ "root": false,
+ "pages": ["public-wallet"]
+}
diff --git a/content/docs/run-a-node/public-wallet.mdx b/content/docs/user-guides/mega-node/public-wallet.mdx
similarity index 72%
rename from content/docs/run-a-node/public-wallet.mdx
rename to content/docs/user-guides/mega-node/public-wallet.mdx
index 70f2fd4..a55cdb1 100644
--- a/content/docs/run-a-node/public-wallet.mdx
+++ b/content/docs/user-guides/mega-node/public-wallet.mdx
@@ -1,34 +1,41 @@
----
-title: Host a Public Wallet
-description: Learn how to run a Public Wallet
-tag: run-a-node
----
-
-Users who are running a Mega node are able to set up a public wallet interface for users who are not able to run a node themselves.
-
-A Public wallet can only be enabled on [Mega nodes](/docs/run-a-node/mega-node) with the MiniDapp System (MDS) enabled.
-
-## What is a Public wallet?
-
-A Public wallet allows any user to hold, send and receive native Minima and other custom tokens or NFTs on the Minima blockchain in a non-custodial wallet.
-
-On accessing a public wallet, the user can generate a secret key which they must write down and keep secure - this effectively acts as their seed phrase to their funds.
-
-Logging in with their secret, a user will be provided with one native Minima wallet address for their personal use.
-
-Users of a Public wallet are able to login to any Public wallet with their secret key, however we only recommend always using the same node from a trusted provider. Using the same Public wallet every time also ensures the user's key uses are counted accurately.
-
-## How to start a Public wallet
-
-As a Mega node runner, you must first ensure that:
-
-- You have a Mega node running on a server with a public facing IP address
-- You have either performed a chain resync from an archive node, or imported a Mega MMR file from another Mega node runner. This is essential to ensure the node is tracking all available coins and to support any potential user of your Public wallet.
-
-To enable the Public wallet, run the following command from the Terminal MiniDapp:
-
-`mds action:publicmds enable:true`
-
-You will then be required to accept the pending command from the Pending MiniDapp.
-
-Once enabled, navigate to https://yourserverIP:9003/publicmds/ to access your Public wallet interface.
+---
+title: Host a Public Wallet
+description: Learn how to run a Public Wallet
+tag: user-guides
+---
+
+Users who are running a Mega node are able to set up a public wallet interface for users who are not able to run a node themselves.
+
+A Public wallet can only be enabled on [Mega nodes](/docs/run-a-node/mega-node) with the MiniDapp System (MDS) enabled.
+
+## What is a Public wallet?
+
+A Public wallet allows any user to hold, send, and receive native Minima and other custom tokens or NFTs created on Minima, in a non-custodial wallet.
+
+On accessing a public wallet, the user can generate a secret key which they must write down and keep secure - this effectively acts as the seed phrase to their funds.
+
+Logging in with their secret, a user will be provided with a native Minima wallet address for their personal use.
+
+Users of a Public wallet are able to login to any Public wallet with their secret key, however we only recommend always using the same node from a trusted provider. Using the same Public wallet every time also ensures the user's key uses are counted accurately.
+
+## How to start a Public wallet
+
+As a Mega node runner, you must first ensure that:
+
+- You have a Mega node running on a server with a public facing IP address
+- You have either performed a chain resync from an archive node, or imported a Mega MMR file from another Mega node runner. This is essential to ensure the node is tracking all available coins and to support any potential user of your Public wallet.
+
+To enable the Public wallet, run the following command from the Terminal MiniDapp:
+
+```
+mds action:publicmds enable:true
+```
+
+You will then be required to accept the pending command from the Pending MiniDapp.
+
+Once enabled, navigate to https://yourserverIP:9003/publicmds/ to access your Public wallet interface.
+
+
+## How to set a custom session ID
+
+You can set your own Session ID for the Public MDS by adding the `-publicmdsuid` start up parameter to your Mega node.
\ No newline at end of file
diff --git a/content/docs/user-guides/meta.json b/content/docs/user-guides/meta.json
index ca9bf6f..dc32016 100644
--- a/content/docs/user-guides/meta.json
+++ b/content/docs/user-guides/meta.json
@@ -1,34 +1,43 @@
-{
- "title": "User Guides",
- "root": true,
- "pages": [
- "---Guides---",
- "index",
- "jointhenetwork",
- "secure-your-seedphrase",
- "---General---",
- "check-node-status",
- "set-your-profile",
- "---Security---",
- "lock-your-wallet",
- "backup-your-wallet",
- "---MiniDapp System---",
- "minidapp-permissions",
- "approve-transactions",
- "manage-minidapps",
- "---Maxima---",
- "maxima-contacts",
- "advanced-maxima-options",
- "---Node Recovery---",
- "node-recovery/recover-options",
- "node-recovery/chain-resync",
- "node-recovery/restore-backup",
- "node-recovery/import-seed-phrase",
- "---Archive Node---",
- "manage-archive-node/archive-export",
- "manage-archive-node/archive-export-sql",
- "---Advanced---",
- "advanced/cold-storage",
- "advanced/log-messages"
- ]
-}
+{
+ "title": "User Guides",
+ "root": true,
+ "pages": [
+ "index",
+ "login",
+ "join-the-network",
+ "secure-your-seedphrase",
+ "---General---",
+ "check-node-status",
+ "set-your-profile",
+ "---Security---",
+ "security/lock-your-wallet",
+ "security/create-a-safe",
+ "security/backup-your-wallet",
+ "---MiniDapps---",
+ "mds/minidapp-permissions",
+ "mds/approve-transactions",
+ "mds/manage-minidapps",
+ "---Maxima---",
+ "maxima/maxima-contacts",
+ "maxima/advanced-maxima-options",
+ "---Node Recovery---",
+ "node-recovery/recovery-options",
+ "node-recovery/chain-resync",
+ "node-recovery/restore-backup",
+ "node-recovery/import-seed-phrase",
+ "---Archive Nodes---",
+ "archive-node/archive-export",
+ "---Mega Nodes---",
+ "mega-node/public-wallet",
+ "---MySQL Integration---",
+ "mysql/mysql-setup",
+ "mysql/mysql-exportto",
+ "mysql/mysql-exportfrom",
+ "mysql/restore-from-mysql",
+ "---Minima E-Gateway (MEG)---",
+ "meg/meg-wallet-api",
+ "---Advanced---",
+ "advanced/cold-storage",
+ "advanced/log-messages"
+ ]
+}
diff --git a/content/docs/user-guides/mysql/meta.json b/content/docs/user-guides/mysql/meta.json
new file mode 100644
index 0000000..3c68671
--- /dev/null
+++ b/content/docs/user-guides/mysql/meta.json
@@ -0,0 +1,10 @@
+{
+ "title": "MySQL",
+ "root": false,
+ "pages": [
+ "mysql-setup",
+ "mysql-exportto",
+ "mysql-exportfrom",
+ "restore-from-mysql"
+ ]
+}
diff --git a/content/docs/user-guides/mysql/mysql-exportfrom.mdx b/content/docs/user-guides/mysql/mysql-exportfrom.mdx
new file mode 100644
index 0000000..ba02691
--- /dev/null
+++ b/content/docs/user-guides/mysql/mysql-exportfrom.mdx
@@ -0,0 +1,62 @@
+---
+title: Export data from MySQL
+description: Learn how export data from MySQL
+tag: user-guides
+---
+
+## Raw file export
+
+From v1.0.39 onwards, a **.raw.dat** export can be exported from MySQL and be:
+
+1. Used to restore a node to the correct chain (with or without importing a seed phrase)
+2. Imported to backfill a Mega MMR node with a complete set of coins
+
+
+### How to export archive blocks in MySQL to a file
+
+From the Minima command line or Terminal MiniDapp, use:
+
+```bash title="Terminal"
+mysql action:rawexport file:archiveexport.raw.dat ...LOGIN DETAILS...
+```
+
+Optionally omit the `file` parameter to use an autogenerated file name.
+
+
+## How to import a .raw.dat file into MySQL
+
+
+To subsequently import a .dat file into the MySQL db, use
+
+```bash title="Terminal"
+mysql action:rawimport file:archiveexport.raw.dat ...LOGIN DETAILS...
+```
+
+
+## How to backup the tables from MySQL
+
+To Export the archive block data from MySQL to a file:
+
+1. Open MySQL workbench
+
+2. Double click on **minimaarchive** to open the database
+
+3. From the **Administration** tab, select **Data Export** (also available from the Server dropdown menu)
+
+
+
+4. Check the box for **archivedb** and check the boxes for **cascadedata** and **syncblock**
+
+
+We do not recommend exporting the coins table as this will be very large.
+
+
+5. Under Export Options, select **Export to self-contained file** and **Include Create Schema**. Optionally change the file path.
+
+
+
+6. Click **Start Export**
+
+The exported file will be unzipped, you should zip the exported file to reduce your storage requirement.
+
+This file can be imported to MySQL if required.
diff --git a/content/docs/user-guides/mysql/mysql-exportto.mdx b/content/docs/user-guides/mysql/mysql-exportto.mdx
new file mode 100644
index 0000000..43611bf
--- /dev/null
+++ b/content/docs/user-guides/mysql/mysql-exportto.mdx
@@ -0,0 +1,139 @@
+---
+title: Export Minima data to MySQL
+description: Learn how export data from Minima to MySQL
+tag: user-guides
+---
+
+Once your node is connected to a MySQL database, the following data can be exported from the node:
+
+| Table | Description |
+|--------------------|--------------------------------------------------------------------------|
+| `cascadedata` | if the node does not start at the genesis block, there will be compact block data for the cascade |
+| `syncblocks` | historical compact blocks (excludes transaction details) |
+| `coins` | (from v1.0.39) a coins table of all coins in the syncblocks |
+| `txpow` | (from v1.0.41) full txpow data, including all transaction and block details |
+
+## How to export archive blocks data
+
+To update the MySQL tables with the archive blocks (syncblocks) from your node, run the following command from the Minima Docker CLI or Minima Terminal MiniDapp:
+
+
+```bash title="Terminal"
+mysql action:update host:minimysql database:archivedb user:archiveuser password:youruserpassword
+```
+or if you have [set your login details](/docs/user-guides/mysql/mysql-setup#how-to-set-your-login-details), simply:
+
+```bash title="Terminal"
+mysql action:update
+```
+
+
+The archive blocks will start being transferred, please be patient and wait for it to finish, it will take some time.
+
+Example output:
+
+```json title="Output"
+{
+ "command":"mysql",
+ "params":{
+ "host":"minimysql",
+ "database":"archivedb",
+ "user":"archiveuser",
+ "password":"youruserpassword",
+ "action":"update"
+ },
+ "status":true,
+ "pending":false,
+ "response":{
+ "archive":{
+ "archivestart":1,
+ "archiveend":72206,
+ "archivetotal":72205
+ },
+ "mysql":{
+ "mysqlstart":1,
+ "mysqlend":72206,
+ "mysqltotal":72205
+ }
+ }
+}
+```
+
+Future updates will be incremental, only syncing the new blocks that are not already in the MySQL database.
+
+
+### Check the integrity
+
+To check that there are no missing blocks in the MySQL database, you can run:
+
+```bash title="Terminal"
+mysql action:integrity ...LOGIN DETAILS...
+```
+
+
+## How to export coins data
+
+To create a table in your MySQL archive database for all spent and unspent coins, you can use the `mysqlcoins` command.
+
+The coins table will be populated from the syncblock table, so this must be populated first. You can then run any SQL command against it to query the coins.
+
+
+The coins database is large and will take a while to populate, optionally you can create a second database in mysql workbench to keep the coinsdb separate to your existing archivedb.
+
+
+To populate the coins table, you can choose to specify the number of coins to update in one go by using the `maxcoins` parameter. To update the table will all the coins, remove the `maxcoins` parameter.
+
+The example below adds the first 100 coins to the database. Next time, it will start from where it left off.
+
+**From any node**
+```bash title="Terminal"
+mysqlcoins action:update maxcoins:100 ...LOGIN DETAILS...
+```
+
+**From docker**
+```bash title="Terminal"
+mysqlcoins action:update maxcoins:100 ...LOGIN DETAILS...
+```
+
+### How to query the coins
+
+To search for all coins at an address or with the address in a state variable:
+
+```bash title="Terminal"
+mysqlcoins action:search address: ...LOGIN DETAILS...
+```
+
+To run a WHERE query on the coins table, string data MUST be in single quotes and you can use multiple parameters.
+
+```bash title="Terminal"
+mysqlcoins action:search where: ...LOGIN DETAILS...
+```
+
+To run a full SQL query on the coins table:
+
+```bash title="Terminal"
+mysqlcoins action:search query: ...LOGIN DETAILS...
+```
+
+For full help, use `help command:mysqlcoins` or see [here](/docs/development/terminal-commands).
+
+## How to export transaction data
+
+To export all full txpow data to MySQL, your node must be running with the following additional startup parameters.
+
+
+| Startup Parameter | Description |
+|--------------------|--------------------------------------------------------------------------|
+| `-notifyalltxpow` | creates a NEWTXPOW notification for all transactions |
+| `-mysqlalltxpow` | Store all TxPoW in MySQL when mysql autobackup is enabled
+
+Provided MySQL auto backups are enabled, all txpow data will be pushed to MySQL. TxPoW data is only transferred to MySQL once they are pruned from the chain.
+This can take between 24-48 hours.
+
+## How to enable auto updates to MySQL
+
+To automatically update the MySQL database daily, run:
+
+```bash title="Terminal"
+mysql action:autobackup enable:true ...LOGIN DETAILS...
+```
\ No newline at end of file
diff --git a/content/docs/user-guides/mysql/mysql-setup.mdx b/content/docs/user-guides/mysql/mysql-setup.mdx
new file mode 100644
index 0000000..e4c6e84
--- /dev/null
+++ b/content/docs/user-guides/mysql/mysql-setup.mdx
@@ -0,0 +1,245 @@
+---
+title: MySQL Setup
+description: Learn how to integrate Minima with MySQL
+tag: user-guides
+---
+
+Minima data can be exported to an external MySQL database for storage and efficient querying.
+
+The following data can be exported to a table in a SQL database:
+
+| Table | Description |
+|--------------------|--------------------------------------------------------------------------|
+| `cascadedata` | if the node does not start at the genesis block, there will be compact block data for the cascade |
+| `syncblocks` | historical compact blocks (excludes transaction details) |
+| `coins` | (from v1.0.39) a coins table of all coins in the syncblocks |
+| `txpow` | (from v1.0.41) full txpow data, including all transaction and block details |
+
+{/* Exporting your node's chain data to MySQL means you can:
+
+- update the MySQL db with the archive blocks from your node
+- chain or seed re-sync directly from the MySQL database for any Minima node (if made publicly available)
+- export the archive blocks from MySQL to a .dat or .gzip file to be shared for re-syncing purposes
+- execute SQL queries on all coins since the Genesis block (NEW for v 1.0.39);
+- export the tables from MySQL to a SQL file
+- import the SQL file to another MySQL databaseThis setup uses two Docker containers */}
+
+## MySQL Setup
+
+
+
+
+
+{/*
+ */}
+
+**1. Install MySQL Workbench and MySQL Server**
+
+- Download the [MySQL Installer](https://dev.mysql.com/downloads/installer/) and select the appropriate version for your operating system.
+- During the installation process, you can choose **Custom Installation** if you only need **MySQL Workbench** and **MySQL Server**.
+- **Set a password for the root user** when prompted
+
+
+
+For Windows installations:
+- If you don’t want to open firewall ports, **uncheck** the option to **"Open Windows Firewall ports for network access"**.
+- To ensure MySQL Server starts with Windows, **check** the option to **"Start the MySQL Server at System Startup"**.
+
+
+**2. Open MySQL Workbench and Create a Connection to Your MySQL Server**
+
+- Open **MySQL Workbench**.
+- In the **MySQL Connections** section, click **+** to create a new connection if one doesn’t already exist.
+
+| Field | Description |
+|------------------|--------------------------------------------------------------------------------------------|
+| Connection name | Enter a name (e.g., **Local Server**). |
+| Hostname | Use **127.0.0.1** if MySQL Server is on your local machine, or enter the server’s IP address if remote. |
+| Port | **3306** (unless configured otherwise during installation). |
+| Username | **root** |
+| Password | Click on **Store in Vault** and enter the root password set during installation. |
+
+- Click **Test Connection** to confirm the connection settings, then click **OK** to save the connection.
+
+
+**3. Create a New Database**
+
+- In **MySQL Workbench**, select your connection to open it.
+- In the **Query** window, run the following command to create a new database named `minimaarchive`:
+ ```sql
+ CREATE DATABASE minimaarchive;
+ ```
+
+
+**4. Create users**
+
+- Create another user e.g. archiveuser with all privileges
+- Optionally create additional users e.g. a read-only user if required.
+
+Your database `minimaarchive` is now created and ready for use!
+
+
+
+
+
+**1. Install MySQL Workbench**
+
+Install MySQL Workbench from the [official website](https://dev.mysql.com/downloads/workbench/) and select the appropriate version for your operating system.
+
+**2. Setup a Docker network**
+
+- Open your Terminal/Command Line interface
+- Setup a Docker network, this will allow you to connect your node to your MySQL database that we will create in the next step
+
+```bash title="Terminal"
+docker network create -d bridge minimanetwork
+```
+
+Now you should see **minimanetwork** listed if you run
+
+```bash title="Terminal"
+docker network ls
+```
+
+**3. Start a MySQL database as a Docker container**
+
+You will need to set your own values for the following parameters:
+
+| Term | Description |
+|-----------------------|---------------------------------------------|
+| `MYSQL_ROOT_PASSWORD` | create a root password |
+| `MYSQL_DATABASE` | create a name for the archive database |
+| `MYSQL_USER` | create a user for the archive database |
+| `MYSQL_PASSWORD` | create a password for the `MYSQL_USER` |
+
+
+```bash title="Terminal"
+docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=yourrootpassword -e MYSQL_DATABASE=archivedb -e MYSQL_USER=archiveuser -e MYSQL_PASSWORD=youruserpassword --restart unless-stopped --network=minimanetwork --label=com.centurylinklabs.watchtower.enable=false --name minimysql mysql:8.0
+```
+
+This will:
+- create a Docker container called **minimySQL** which runs your MySQL database called **archivedb**
+- run on your port 3307 (mapped to 3306 in Docker)
+- create the user specified and give them access to the database
+- connect the MySQL db to the **minimanetwork** Docker network
+- disable Watchtower updates for the container
+
+**4. Connect Minima to the minimanetwork**
+
+```bash title="Terminal"
+docker network connect minimanetwork minimaarchive
+```
+
+Example output:
+
+```json title="Output"
+[
+ {
+ "Name": "minimanetwork",
+ "ConfigOnly": false,
+ "Containers": {
+ "182c4041ad365669b365ee6e0691e5488596ab1e974b791bba1306c74643bd03": {
+ "Name": "minimaarchive"
+ },
+ "38906df591a5ba642e755509e8c162e114b6dd56abc2ec2e76a0c673f5187b09": {
+ "Name": "minimysql"
+ }
+ }
+ }
+]
+```
+
+**5. Create a connection to the server**
+
+In MySQL Workbench, create a connection to the server
+
+| Field | Description |
+|------------------|--------------------------------------------------------------------------------------------|
+| Connection name | minimaarchive |
+| Hostname | Use **127.0.0.1** if Docker is on your local machine, or enter the server’s IP address if remote. |
+| Port | **3307** |
+| Username | **root** |
+| Password | Click on **Store in Vault** and enter the root password set during installation. |
+
+
+
+
+- Click Test Connection, then OK.
+
+Your database `minimaarchive` is now created and ready for use!
+
+
+
+
+
+## Check the connection
+
+From the Minima Docker CLI or Minima Terminal, run the command `mysql action:info` with your login details to check the current status
+
+```bash title="Terminal"
+mysql action:info host:127.0.0.1:3306 database:archivedb user:archiveuser password:youruserpassword
+```
+
+Example output:
+
+```json title="Output"
+{
+ "command":"mysql",
+ "params":{
+ "host":"127.0.0.1:3306",
+ "database":"archivedb",
+ "user":"archiveuser",
+ "password":"youruserpassword",
+ "action":"info"
+ },
+ "status":true,
+ "pending":false,
+ "response":{
+ "archive":{
+ "archivestart":1,
+ "archiveend":72106,
+ "archivetotal":72105
+ },
+ "mysql":{
+ "mysqlstart":-1,
+ "mysqlend":-1,
+ "mysqltotal":0
+ }
+ }
+}
+```
+
+In the above example, the Minima archive db contains 72105 blocks and the mysql has 0 blocks, as expected.
+
+
+Before running an update, you must check your node is on the correct tip block. Run the `status` command to check your tip block is up to date.
+
+
+
+## How to set your login details
+
+Set the MySQL login details so you don't need to type them in every time.
+
+```
+mysql action:setlogin ..LOGIN_DETAILS..
+```
+
+Example
+
+```
+mysql action:setlogin host:127.0.0.1:3306 database:archivedb user:archiveuser password:youruserpassword
+```
+
+Subsequently, you can omit the host, database, user and password parameters.
+
+## MySQL Functionality
+
+
+
+
+
+
diff --git a/content/docs/user-guides/mysql/restore-from-mysql.mdx b/content/docs/user-guides/mysql/restore-from-mysql.mdx
new file mode 100644
index 0000000..2989037
--- /dev/null
+++ b/content/docs/user-guides/mysql/restore-from-mysql.mdx
@@ -0,0 +1,65 @@
+---
+title: Restore a node from MySQL
+description: Learn how to restore a node from MySQL data
+tag: user-guides
+---
+
+
+## Resync from MySQL
+
+If a user has been offline for too long and cannot resync to the chain from the IBD alone, or has lost access to their node, they can connect to a MySQL database to perform a chain or seed resync, provided it is publicly accessible.
+
+This is an alternative option to re-syncing from an archive node.
+
+As with archive nodes, there are two options when using a MySQL database to re-sync your a node:
+
+- `Chain re-sync:` If a user has been offline for too long and their node is not on the correct tip block, they can re-sync to the latest block by performing a [chain re-sync](#to-perform-a-chain-re-sync) from a MySQL database. **The node will NOT be wiped during this process.**
+- `Seed re-sync:` If a user does not have a valid backup or has lost access to their node, they can restore access to their coins by performing a [seed re-sync](#to-perform-a-seed-re-sync) from a MySQL database using their 24 word seed phrase. **The node will first be wiped before the re-sync begins.**
+
+
+To re-sync using credentials for a read-only user, set the `user` and `password` parameters as the credentials for the read-only user you have set up in MySQL, and add `readonly:true` as a parameter in the following commands.
+
+
+### To perform a chain re-sync
+
+1. On the node requiring a re-sync, check the connection to the MySQL database, changing the ip:port as required
+
+```bash title="Terminal"
+mysql host:127.0.0.1:3307 database:archivedb user:archiveuser password:youruserpassword action:info
+```
+
+2. To start the chain re-sync, run
+
+```bash title="Terminal"
+mysql host:mysqlhost:port database:archivedb user:archiveuser password:youruserpassword action:resync
+```
+
+Your coins will remain safe throughout this process. Once complete, you will be on the correct tip block.
+
+### To perform a seed re-sync
+
+1. On the node requiring a re-sync, connect to check the MySQL archive database
+
+```bash title="Terminal"
+mysql host:127.0.0.1:3307 database:archivedb user:archiveuser password:youruserpassword action:info
+```
+
+2. To start the seed re-sync, run
+
+```bash title="Terminal"
+mysql host:mysqlhost:port database:archivedb user:archiveuser password:youruserpassword action:resync phrase:\"24 WORDS HERE\"
+```
+
+Optionally set the number of keys and keyuses relevant to you. If not specified, the defaults are keys:80 and keyuses:1000
+
+```bash title="Terminal"
+mysql host:mysqlhost:port database:archivedb user:archiveuser password:youruserpassword action:resync phrase:\"24 WORDS HERE\" keys:90 keyuses:2000
+```
+
+## Check an address history
+
+To check the unspent and spent coins for an address, run
+
+```bash title="Terminal"
+mysql host:127.0.0.1:3307 database:archivedb user:archiveuser password:youruserpassword action:addresscheck address:0x79...
+```
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..44e198c 100644
--- a/content/docs/user-guides/node-recovery/import-seed-phrase.mdx
+++ b/content/docs/user-guides/node-recovery/import-seed-phrase.mdx
@@ -1,129 +1,129 @@
----
-title: Import your seed phrase
-description: Learn how to import your seed phrase to recover your node
-tag: user-guides
----
-
-Performing a seed re-sync will **WIPE your node completely** before restoring your wallet from the given 24 word seed phrase.
-
-**Do not attempt to use any other MiniDapps whilst syncing is in progress.**
-
-
- If you have funds in MiniSwap, and you are importing your seed phrase, you
- will need to resync **TWICE**.
- First restore your seed phrase with QuickSync, then open the MiniSwap app, put
- it in WRITE mode and set up your API keys. This will add the MiniSwap script
- to your node. You must then perform a [chain
- re-sync](/docs/userguides/recovery/chainresync) to restore your MiniSwap
- coins.
-
-
-
- Transaction history will be deleted so you may wish to download this from the
- Wallet MiniDapp before proceeding.
-
-
-## Restore your Seed phrase with QuickSync
-
-
-
-
-
-
-1. Login to your MiniHub and open the Security MiniDapp
-2. Select **Restore node**
-3. Select **Import Seed Phrase**
-4. Enter the IP:port of a Mega node. If you do not have one, you can use the example IP provided, 34.32.59.133:9001. Then select **Next**.
-5. Enter your Seed Phrase carefully. Then select **Next**.
-6. Enter the number of Keys to create, if unsure then leave this as the default of 64. Then select **Next**.
-7. Enter Key Uses, if you have never restored your seed phrase before, use the default of 1000. If you have, enter a higher number e.g. 2000. This should be the highest number of times you could possibly have used your keys r.g. for signing transactions. Then select **Next**.
-8. Select **Restore**
-9. Wait for the sync to complete, please be patient whilst the keys are recreated and the wallet is restored. The node will shutdown when complete.
-10. Restart the node for the restore to take effect. Then allow a few minutes for the node to connect to the network.
-
-You will then be on the correct top block.
-
-
-
- 1. Access the Minima Terminal via the MiniDapp, Docker CLI, Command Line or RPC Client
-2. Enter the following command, then press Enter
-
-Example
-
-```bash title="Terminal"
-megammrsync action:resync host:34.32.59.133:9001 phrase:"YOUR 24 WORD SEED PHRASE" keyuses:2000
-```
-
-The re-sync will begin, please be patient whilst the keys are recreated and the wallet is restored.
-
-3. Check the logs to see when the process is complete. The node will shutdown automatically.
-
-4. Restart the node for the restore to take effect. Then allow a few minutes for the node to connect to the network.
-
-You will then be on the correct top block.
-
-For further help using the `megammrsync` command, use `help command:megammrsync` from the Terminal.
-
-
-
-
-## Legacy method (using an Archive file)
-
-
- If your device is connected to Microsoft Onedrive, iCloud or another app which
- automatically syncs locally changed files to the cloud, please pause syncing
- for the duration of your node recovery process as they can interfere.
-
-
-1. Open the Security MiniDapp
-2. Select **Archive reset**
-3. Select **Import seed phrase**
-4. Upload an archive file. If you do not have one, you can visit our [Discord server](https://discord.com/invite/minimaglobal) to get one or go to https://spartacusrex.com/archive and download the latest file.
-5. Continue to enter your seed phrase carefully
-6. Start the re-sync process, please be patient and leave the process to finish
-
-**Do not attempt to use any other MiniDapps whilst syncing is in progress.**
-
-7. Restart the node for the import to take effect
-
-## From the Terminal (advanced)
-
-
- This process requires you to type your 24 word seed phrase into an online
- device. Please ensure your device contains no malware before proceeding. This
- process should ONLY be used if you have no backup!
-
-
-1. Set up a new clean node that you wish to restore to and login to Minima
-2. Open the Terminal MiniDapp
-3. Decide if you wish to resync using an archive file (recommended) or by connecting to a running archive node
-
-**Using an archive file (recommended):**
-
-Download an archive file and move it into your Minima data folder (the default location for exported files and backups). If you do not have one, you can visit our [Discord server](https://discord.com/invite/minimaglobal) or go to https://spartacusrex.com/archive and download the latest file, then run the following command entering your seed phrase and setting your key uses.
-
-```bash title="Terminal"
-reset archivefile:archiveexport.gzip action:seedsync phrase:"TWENTY FOUR WORDS HERE" keyuses:
-```
-
-**Using an archive host:**
-
-Alternatively, you can sync from a running archive node using its host ip:
-
-```bash title="Terminal"
-archive action:resync phrase:"YOUR 24 WORD SEED PHRASE HERE" keyuses: host:
-```
-
-**_Parameters:_**
-
-- `host:` Enter the ip:port of an archive node you wish to re-sync from e.g. 10.198.89.98:9001.
-- `keyuses:` **(optional)** How many times at most did you use your keys for signing a transaction.. Every time you resync with seed phrase this needs to be higher as Minima Signatures are stateful. Defaults to 1000 - the max is 262144 for normal keys.
-- `keys:` **(optional)** The number of public/private key pairs to generate. All nodes are created with 64 addresses so 64 is the default, if you used `newaddress`, you can specify more.
-
-4. Press Enter and **enable logs by checking the box in the top right corner**
-
-**Do not attempt to use any other MiniDapps whilst syncing is in progress.**
-
-5. The restore will take a few minutes to begin and could take over 1 hour to complete, please be patient
-6. Once complete, the node will shut down
-7. Restart Minima and login to access your restored node
+---
+title: Import your seed phrase
+description: Learn how to import your seed phrase to recover your node
+tag: user-guides
+---
+
+Performing a seed re-sync will **WIPE your node completely** before restoring your wallet from the given 24 word seed phrase.
+
+**Do not attempt to use any other MiniDapps whilst syncing is in progress.**
+
+
+ If you have funds in MiniSwap, and you are importing your seed phrase, you
+ will need to resync **TWICE**.
+ First restore your seed phrase with QuickSync, then open the MiniSwap app, put
+ it in WRITE mode and set up your API keys. This will add the MiniSwap script
+ to your node. You must then perform a [chain
+ re-sync](/docs/user-guides/node-recovery/chain-resync) to restore your MiniSwap
+ coins.
+
+
+
+ Transaction history will be deleted so you may wish to download this from the
+ Wallet MiniDapp before proceeding.
+
+
+## Restore your Seed phrase with QuickSync
+
+
+
+
+
+
+1. Login to your MiniHub and open the Security MiniDapp
+2. Select **Restore node**
+3. Select **Import Seed Phrase**
+4. Enter the IP:port of a Mega node. If you do not have one, you can use the example IP provided, 34.32.59.133:9001. Then select **Next**.
+5. Enter your Seed Phrase carefully. Then select **Next**.
+6. Enter the number of Keys to create, if unsure then leave this as the default of 64. Then select **Next**.
+7. Enter Key Uses, if you have never restored your seed phrase before, use the default of 1000. If you have, enter a higher number e.g. 2000. This should be the highest number of times you could possibly have used your keys r.g. for signing transactions. Then select **Next**.
+8. Select **Restore**
+9. Wait for the sync to complete, please be patient whilst the keys are recreated and the wallet is restored. The node will shutdown when complete.
+10. Restart the node for the restore to take effect. Then allow a few minutes for the node to connect to the network.
+
+You will then be on the correct top block.
+
+
+
+ 1. Access the Minima Terminal via the MiniDapp, Docker CLI, Command Line or RPC Client
+2. Enter the following command, then press Enter
+
+Example
+
+```bash title="Terminal"
+megammrsync action:resync host:34.32.59.133:9001 phrase:"YOUR 24 WORD SEED PHRASE" keyuses:2000
+```
+
+The re-sync will begin, please be patient whilst the keys are recreated and the wallet is restored.
+
+3. Check the logs to see when the process is complete. The node will shutdown automatically.
+
+4. Restart the node for the restore to take effect. Then allow a few minutes for the node to connect to the network.
+
+You will then be on the correct top block.
+
+For further help using the `megammrsync` command, use `help command:megammrsync` from the Terminal.
+
+
+
+
+## Legacy method (using an Archive file)
+
+
+ If your device is connected to Microsoft Onedrive, iCloud or another app which
+ automatically syncs locally changed files to the cloud, please pause syncing
+ for the duration of your node recovery process as they can interfere.
+
+
+1. Open the Security MiniDapp
+2. Select **Archive reset**
+3. Select **Import seed phrase**
+4. Upload an archive file. If you do not have one, you can visit our [Discord server](https://discord.com/invite/minimaglobal) to get one or go to https://spartacusrex.com/archive and download the latest file.
+5. Continue to enter your seed phrase carefully
+6. Start the re-sync process, please be patient and leave the process to finish
+
+**Do not attempt to use any other MiniDapps whilst syncing is in progress.**
+
+7. Restart the node for the import to take effect
+
+## From the Terminal (advanced)
+
+
+ This process requires you to type your 24 word seed phrase into an online
+ device. Please ensure your device contains no malware before proceeding. This
+ process should ONLY be used if you have no backup!
+
+
+1. Set up a new clean node that you wish to restore to and login to Minima
+2. Open the Terminal MiniDapp
+3. Decide if you wish to resync using an archive file (recommended) or by connecting to a running archive node
+
+**Using an archive file (recommended):**
+
+Download an archive file and move it into your Minima data folder (the default location for exported files and backups). If you do not have one, you can visit our [Discord server](https://discord.com/invite/minimaglobal) or go to https://spartacusrex.com/archive and download the latest file, then run the following command entering your seed phrase and setting your key uses.
+
+```bash title="Terminal"
+reset archivefile:archiveexport.gzip action:seedsync phrase:"TWENTY FOUR WORDS HERE" keyuses:
+```
+
+**Using an archive host:**
+
+Alternatively, you can sync from a running archive node using its host ip:
+
+```bash title="Terminal"
+archive action:resync phrase:"YOUR 24 WORD SEED PHRASE HERE" keyuses: host:
+```
+
+**_Parameters:_**
+
+- `host:` Enter the ip:port of an archive node you wish to re-sync from e.g. 10.198.89.98:9001.
+- `keyuses:` **(optional)** How many times at most did you use your keys for signing a transaction.. Every time you resync with seed phrase this needs to be higher as Minima Signatures are stateful. Defaults to 1000 - the max is 262144 for normal keys.
+- `keys:` **(optional)** The number of public/private key pairs to generate. All nodes are created with 64 addresses so 64 is the default, if you used `newaddress`, you can specify more.
+
+4. Press Enter and **enable logs by checking the box in the top right corner**
+
+**Do not attempt to use any other MiniDapps whilst syncing is in progress.**
+
+5. The restore will take a few minutes to begin and could take over 1 hour to complete, please be patient
+6. Once complete, the node will shut down
+7. Restart Minima and login to access your restored node
diff --git a/content/docs/user-guides/node-recovery/meta.json b/content/docs/user-guides/node-recovery/meta.json
index 969712d..c224dc5 100644
--- a/content/docs/user-guides/node-recovery/meta.json
+++ b/content/docs/user-guides/node-recovery/meta.json
@@ -1,10 +1,10 @@
-{
- "title": "Node Recovery",
- "root": false,
- "pages": [
- "recover-options",
- "chain-resync",
- "restore-backup",
- "import-seed-phrase"
- ]
-}
+{
+ "title": "Node Recovery",
+ "root": false,
+ "pages": [
+ "recovery-options",
+ "chain-resync",
+ "restore-backup",
+ "import-seed-phrase"
+ ]
+}
diff --git a/content/docs/user-guides/node-recovery/recover-options.mdx b/content/docs/user-guides/node-recovery/recovery-options.mdx
similarity index 67%
rename from content/docs/user-guides/node-recovery/recover-options.mdx
rename to content/docs/user-guides/node-recovery/recovery-options.mdx
index 67f49a3..91be189 100644
--- a/content/docs/user-guides/node-recovery/recover-options.mdx
+++ b/content/docs/user-guides/node-recovery/recovery-options.mdx
@@ -1,50 +1,50 @@
----
-title: Recover Options
-description: Learn how to use advanced Maxima options
-tag: user-guides
----
-
-If you still have access to your wallet (i.e. your seed phrase is correct) but it is not in sync with the latest block, you should perform a **chain re-sync** only.
-
-If you have lost access to your node completely, you can either **restore a backup** that you took previously, or **restore from seed phrase**.
-
-## Chain resync
-
-If you **still have access to your wallet** (i.e. your seed phrase is correct) but it is not in sync with the latest block, you should perform a [**chain re-sync**](/docs/userguides/recovery/chainresync). This will put you on the correct chain with your latest wallet balance.
-
-The most common reason for a chain re-sync is if your node has been offline for too long and it cannot catch up with the chain automatically
-
-You will need:
-
-- a recent archive file, exported from an archive node, or
-- the IP address of a Mega node
-
-## Restore from backup
-
-To [**restore a backup**](/docs/userguides/recovery/restoreabackup) that you have previously taken to a new or existing device, you will need:
-
-- A backup of your node that you took previously,
-
-and, if the backup is older than 1 week
-
-- a recent archive file, exported from an archive node, or
-- the IP address of a Mega node
-
-to ensure the backup is properly restored to the chain tip.
-
-## Restore from Seed Phrase
-
-Alternatively, you can [**import your seed phrase**](/docs/userguides/recovery/importseed) if you do not have a backup. Your wallet will be recovered from the 24 word seed phrase you provide. This should only be used as a last resort.
-
-You will need:
-
-- Your 24 word seed phrase,
-
-and,
-
-- a recent archive file, exported from an archive node, or
-- the IP address of a Mega node
-
-All the above processes can be found in the Security MiniDapp.
-
-
+---
+title: Recovery Options
+description: Learn how to use advanced Maxima options
+tag: user-guides
+---
+
+If you still have access to your wallet (i.e. your seed phrase is correct) but it is not in sync with the latest block, you should perform a **chain re-sync** only.
+
+If you have lost access to your node completely, you can either **restore a backup** that you took previously, or **restore from seed phrase**.
+
+## Chain resync
+
+If you **still have access to your wallet** (i.e. your seed phrase is correct) but it is not in sync with the latest block, you should perform a [**chain re-sync**](/docs/user-guides/node-recovery/chain-resync). This will put you on the correct chain with your latest wallet balance.
+
+The most common reason for a chain re-sync is if your node has been offline for too long and it cannot catch up with the chain automatically
+
+You will need:
+
+- a recent archive file, exported from an archive node, or
+- the IP address of a Mega node
+
+## Restore from backup
+
+To [**restore a backup**](/docs/user-guides/node-recovery/restore-backup) that you have previously taken to a new or existing device, you will need:
+
+- A backup of your node that you took previously,
+
+and, if the backup is older than 1 week
+
+- a recent archive file, exported from an archive node, or
+- the IP address of a Mega node
+
+to ensure the backup is properly restored to the chain tip.
+
+## Restore from Seed Phrase
+
+Alternatively, you can [**import your seed phrase**](/docs/user-guides/node-recovery/import-seed-phrase) if you do not have a backup. Your wallet will be recovered from the 24 word seed phrase you provide. This should only be used as a last resort.
+
+You will need:
+
+- Your 24 word seed phrase,
+
+and,
+
+- a recent archive file, exported from an archive node, or
+- the IP address of a Mega node
+
+All the above processes can be found in the Security MiniDapp.
+
+
diff --git a/content/docs/user-guides/secure-your-seedphrase.mdx b/content/docs/user-guides/secure-your-seedphrase.mdx
index 7a87f53..1ab5d5b 100644
--- a/content/docs/user-guides/secure-your-seedphrase.mdx
+++ b/content/docs/user-guides/secure-your-seedphrase.mdx
@@ -1,41 +1,51 @@
----
-title: Secure your seedphrase
-description: Learn how to secure your seedphrase
-icon: Lock
-tag: user-guides
----
-
-Keeping your wallet secure involves:
-
-- Keeping the device your node is running on secure.
-- Writing down your seed phrase **immediately after starting your node.**
-- Locking your node with a password. See [Locking your node](/docs/user-guides/lock-your-wallet).
-- Backing up your node. See [Backing up your node](/docs/user-guides/backup-your-wallet).
-
-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.
-
-
-
-## How to find your seed phrase
-
-1. Open the **Security** MiniDapp and ensure your node is not locked
-2. Select **Manage Seed Phrase**
-3. Select **Show Seed Phrase**
-4. Grab a pen and paper and write down your Seed Phrase in the order specified
-
-
- **Write down your seed phrase carefully, in the _correct order_ and store it
- in a safe place offline.**
-
-
-It is also possible to view your seed phrase by running the `vault` command using the RPC client or Docker CLI.
-
-
-
- - **DON'T** take a screenshot of your seed phrase 2.
- - **DON'T** copy and paste your seed phrase to/from a mobile or computer which is connected to the internet
- - **DO** use a metal plate to record your seed phrase and store it somewhere safe
- - **DO** Make 2 copies of your seed phrase and give one to a trusted relative or store in a second location
- - For large amounts, consider signing your transactions offline. To do this you will need to run a node on an offline device and one node on an online device. See [Cold Storage Solution](/docs/userguides/walletsecurity/coldstoragesetup).
-
-
+---
+title: Secure your seed phrase
+description: Learn how to secure your seedphrase
+icon: Lock
+tag: user-guides
+---
+
+Keeping your wallet secure involves:
+
+- Keeping the device your node is running on secure.
+- Writing down your seed phrase **immediately after starting your node.**
+- Locking your node with a password. See [Locking your node](/docs/user-guides/lock-your-wallet).
+- Backing up your node. See [Backing up your node](/docs/user-guides/backup-your-wallet).
+
+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.
+
+
+## How to find your seed phrase
+
+
+
+
+
+
+1. Open the **Security** MiniDapp and ensure your node is not locked
+2. Select **Manage Seed Phrase**
+3. Select **Show Seed Phrase**
+4. Grab a pen and paper and write down your Seed Phrase in the order specified
+
+
+
+It is also possible to view your seed phrase by running the `vault` command from the Minima Terminal, RPC client or Docker CLI.
+
+
+
+
+
+
+ **Write down your seed phrase carefully, in the _correct order_ and store it
+ in a safe place offline.**
+
+
+
+
+ - **DON'T** take a screenshot of your seed phrase 2.
+ - **DON'T** copy and paste your seed phrase to/from a mobile or computer which is connected to the internet
+ - **DO** use a metal plate to record your seed phrase and store it somewhere safe
+ - **DO** Make 2 copies of your seed phrase and give one to a trusted relative or store in a second location
+ - For large amounts, consider signing your transactions offline. To do this you will need to run a node on an offline device and one node on an online device. See [Cold Storage Solution](docs/user-guides/advanced/cold-storage).
+
+
diff --git a/content/docs/user-guides/backup-your-wallet.mdx b/content/docs/user-guides/security/backup-your-wallet.mdx
similarity index 97%
rename from content/docs/user-guides/backup-your-wallet.mdx
rename to content/docs/user-guides/security/backup-your-wallet.mdx
index 645e4c5..6422a43 100644
--- a/content/docs/user-guides/backup-your-wallet.mdx
+++ b/content/docs/user-guides/security/backup-your-wallet.mdx
@@ -1,66 +1,66 @@
----
-title: Backup your wallet
-description: Learn how to backup your Minima wallet
-tag: user-guides
----
-
-Using a backup is the fastest and most convenient way to restore your wallet if you lose access to your node.
-
-**If you lose your device and do not have a valid backup, you will need to restore your wallet by [importing your seed phrase](/docs/user-guides/node-recovery/import-seed-phrase).**
-
-
- If your node is not locked, your backups will contain your unencrypted seed
- phrase. Backups of unlocked nodes must be kept as safe as your seed phrase!
-
-
-If your node is locked, your seed phrase will remain encrypted in the backup file.
-
-
-
-## Take a backup
-
-1. Open the **Security** MiniDapp and select **Backup node**.
-2. Set a **password** for the backup that will be required if you need to restore it.
-3. A backup file will be created and you will be prompted to download and **choose a location** to save it.
-
-
-Your password will be required if you restore this backup at a later date, **it cannot be changed or recovered** so you must remember it!
-
-Once you have saved your backup file, we recommend you store it off the device.
-
-
-
-## Enable auto backups
-
-1. Open the **Security** MiniDapp and select **Backup node**
-2. Enable auto backups
-3. Set a password for the auto backups. You must remember or write down this password as it cannot be recovered once set.
-
-Backups will be taken every 24 hours. The latest 14 backups will be kept on the node. You should periodically download these backups and store them on a different device to your node.
-
-### Points to remember
-
-- Take regular backups
-- Consider locking your node before taking a backup - when restoring the backup, the node will remain locked
-- The password used to lock the node can be different to the password used for a backup
-- Regularly download your backups and store them on a different device to your node
-
-## Using commands
-
-### To take a backup
-
-```bash title="Terminal"
-backup password:(optional) file:(optional) auto:(optional)
-```
-
-| Parameter | Description |
-| ---------- | --------------------------------------------------- |
-| `password` | The password to encrypt the backup file with |
-| `file` | The name of the backup file to create |
-| `auto` | Set to `true` to enable auto backups every 24 hours |
-
-
- Setting `auto:true` will backup your node every 24 hours however these backups
- cannot be password protected so we recommend locking your node first. To
- password protect your auto backups, you must use the Security minidapp.
-
+---
+title: Backup your wallet
+description: Learn how to backup your Minima wallet
+tag: user-guides
+---
+
+Using a backup is the fastest and most convenient way to restore your wallet if you lose access to your node.
+
+**If you lose your device and do not have a valid backup, you will need to restore your wallet by [importing your seed phrase](/docs/user-guides/node-recovery/import-seed-phrase).**
+
+
+ If your node is not locked, your backups will contain your unencrypted seed
+ phrase. Backups of unlocked nodes must be kept as safe as your seed phrase!
+
+
+If your node is locked, your seed phrase will remain encrypted in the backup file.
+
+
+
+## Take a backup
+
+1. Open the **Security** MiniDapp and select **Backup node**.
+2. Set a **password** for the backup that will be required if you need to restore it.
+3. A backup file will be created and you will be prompted to download and **choose a location** to save it.
+
+
+Your password will be required if you restore this backup at a later date, **it cannot be changed or recovered** so you must remember it!
+
+Once you have saved your backup file, we recommend you store it off the device.
+
+
+
+## Enable auto backups
+
+1. Open the **Security** MiniDapp and select **Backup node**
+2. Enable auto backups
+3. Set a password for the auto backups. You must remember or write down this password as it cannot be recovered once set.
+
+Backups will be taken every 24 hours. The latest 14 backups will be kept on the node. You should periodically download these backups and store them on a different device to your node.
+
+### Points to remember
+
+- Take regular backups
+- Consider locking your node before taking a backup - when restoring the backup, the node will remain locked
+- The password used to lock the node can be different to the password used for a backup
+- Regularly download your backups and store them on a different device to your node
+
+## Using commands
+
+### To take a backup
+
+```bash title="Terminal"
+backup password:(optional) file:(optional) auto:(optional)
+```
+
+| Parameter | Description |
+| ---------- | --------------------------------------------------- |
+| `password` | The password to encrypt the backup file with |
+| `file` | The name of the backup file to create |
+| `auto` | Set to `true` to enable auto backups every 24 hours |
+
+
+ Setting `auto:true` will backup your node every 24 hours however these backups
+ cannot be password protected so we recommend locking your node first. To
+ password protect your auto backups, you must use the Security minidapp.
+
diff --git a/content/docs/user-guides/security/create-a-safe.mdx b/content/docs/user-guides/security/create-a-safe.mdx
new file mode 100644
index 0000000..d136bb6
--- /dev/null
+++ b/content/docs/user-guides/security/create-a-safe.mdx
@@ -0,0 +1,58 @@
+---
+title: Create a Safe
+description: Learn how to create a Safe for your coins
+tag: user-guides
+---
+
+The Safe allows you to have a separate seed phrase to lock up the majority of your coins - this could be for Minima or other custom tokens.
+
+This means you can use the wallet for day-to-day spending (whatever you do not send to Safe) and have additional segregated Safes on the same node.
+
+Each Safe is secured with a seed phrase which should be different to your main node's seed phrase.
+
+You can then leave your node [unlocked](/docs/user-guides/lock-your-wallet) for daily use whilst keeping the majority of your holdings secured in a Safe with an alternative seed phrase.
+
+## Create a new Safe
+
+
+
+1. If you haven't already, make sure you have [taken note of your main seed phrase](/docs/user-guides/lock-your-wallet), this can be found in the Security MiniDapp.
+
+If you need to recover your node in the future, recovering your main seed phrase will also recover your Safes which will still remain locked.
+
+2. Open the Safe MiniDapp and select the token and amount you wish to lock in a Safe.
+3. Generate a new Seed Phrase and write it down!
+4. Confirm the seed phrase and create the Safe, optionally leaving a small amount of Minima available for daily use.
+
+
+**You should not use the same seed phrase as your node, this would provide no extra protection to your coins.**
+
+**It is NOT POSSIBLE to view/change this seed phrase once you have set it, so make sure you write it down and store it somewhere secure.**
+
+**If you forget it, your funds will be locked forever.**
+
+
+## To unlock a Safe
+
+1. Open the Safe MiniDapp and select **Unlock** for the Safe you want to collect.
+2. Choose the amount to withdraw - you can withdraw to the main wallet or to a specific address.
+3. Enter the seed phrase used when creating the Safe.
+4. Optionally enter a message
+5. Set the Key Uses - this is the number of times you have unlocked a Safe with this seed phrase.
+
+
+If you have previously unlocked this Safe or another Safe with this seed phrase, you must increase the key use from the previous time - it does not have to be incremented but must be a different value to one you've previously used.
+
+
+
+
+
+## Restoring a Safe
+
+If you need to recover your node in the future, recovering your main seed phrase will also recover your Safes which will still remain locked.
+
+If your main seed phrase is compromised, your Safes will remain locked and secure, as long as the seed phrases used for the Safes have not been compromised.
+
+You can restore a Safe seed phrase to a new node to recover the funds locked in a safe. This will NOT recover coins from your main wallet.
+
+When restoring a Safe seed phrase e.g. by importing the seed phrase from the Security minidapp, this seed phrase will become your new main seed phrase. To access your funds, you will need to unlock the Safe and (optionally) create a new one with a new seed phrase.
\ No newline at end of file
diff --git a/content/docs/user-guides/lock-your-wallet.mdx b/content/docs/user-guides/security/lock-your-wallet.mdx
similarity index 96%
rename from content/docs/user-guides/lock-your-wallet.mdx
rename to content/docs/user-guides/security/lock-your-wallet.mdx
index 2fbbb2f..5645cf3 100644
--- a/content/docs/user-guides/lock-your-wallet.mdx
+++ b/content/docs/user-guides/security/lock-your-wallet.mdx
@@ -1,92 +1,92 @@
----
-title: Lock your wallet
-description: Learn how to lock your Minima wallet
-tag: user-guides
----
-
-Locking your wallet ensures that if someone gets access to your node, your seed phrase is not visible and your coins cannot be spent. Your seed phrase and private keys will be encrypted with the password you set.
-
-You will able to receive funds as normal but will need to unlock your node when transacting. You can unlock your node at any time with the same password.
-
-## From the Security MiniDapp
-
-
-
-1. Ensure you have **taken note of your seed phrase** and are storing it somewhere safe.
-2. Open the Security MiniDapp and select **Lock private keys**
-3. Enter the same password twice
-
-
- Your password should be over 12 characters and can use alphanumeric characters and the symbols provided. Do not use spaces.
-
-**It is NOT POSSIBLE to view/change this password once you have set it**, so make sure you write it down and store it somewhere secure - treat it in the same way that you would your seed phrase!
-
-**If you forget it, you will need to [restore from an Archive node](/docs/user-guides/node-recovery/import-seed-phrase) using your 24 word seed phrase.**
-
-
-
-## Using commands (advanced)
-
-### To lock your node
-
-```bash title="Terminal"
-vault action:passwordlock password:123@bcXYZM1n1m@
-```
-
-Example:
-
-```bash
-vault action:passwordlock password:123@bcXYZM1n1m@
-
-## Example output
-{
- "command":"vault",
- "params":{
- "action":"passwordlock",
- "password":"123@bcXYZM1n1m@"
- },
- "status":true,
- "pending":false,
- "response":"All private keys wiped! Stored encrypted in UserDB"
-}
-```
-
-Your seed phrase is now encrypted and password protected.
-
-### To unlock your node
-
-```bash title="Terminal"
- vault action:passwordunlock password:123@bcXYZM1n1m@
-```
-
-Example:
-
-```bash
-vault action:passwordunlock password:123@bcXYZM1n1m@
-
-## Example output
-{
- "command":"vault",
- "params":{
- "action":"passwordunlock",
- "password":"123@bcXYZM1n1m@"
- },
- "status":true,
- "pending":false,
- "response":"All private keys restored!"
-}
-```
-
-Your seed phrase will be decrypted and your funds will no longer be password protected.
-
-### Transacting with a password locked node
-
-You may transact directly from the Terminal MiniDapp using the `send` function with the password parameter.
-
-```bash title="Terminal"
-send password:123@bcXYZM1n1m@ amount:5 address:MxG082FFHWG31QANAY66W2HK8CVGBRB3Z5RVTARY7T3Q75CGHB1A6CZH0B1KNDU
-```
-
-This will sign and then execute the transaction, only unlocking the node for that single transaction. Once complete, the node will be locked again automatically.
-
-The above solution is more secure than an unprotected node but the wallet is still effectively hot as it is connected to the internet and should not be used to store large amounts of funds.
+---
+title: Lock your wallet
+description: Learn how to lock your Minima wallet
+tag: user-guides
+---
+
+Locking your wallet ensures that if someone gets access to your node, your seed phrase is not visible and your coins cannot be spent. Your seed phrase and private keys will be encrypted with the password you set.
+
+You will able to receive funds as normal but will need to unlock your node when transacting. You can unlock your node at any time with the same password.
+
+## From the Security MiniDapp
+
+
+
+1. Ensure you have **taken note of your seed phrase** and are storing it somewhere safe.
+2. Open the Security MiniDapp and select **Lock private keys**
+3. Enter the same password twice
+
+
+ Your password should be over 12 characters and can use alphanumeric characters and the symbols provided. Do not use spaces.
+
+**It is NOT POSSIBLE to view/change this password once you have set it**, so make sure you write it down and store it somewhere secure - treat it in the same way that you would your seed phrase!
+
+**If you forget it, you will need to [restore from an Archive node](/docs/user-guides/node-recovery/import-seed-phrase) using your 24 word seed phrase.**
+
+
+
+## Using commands (advanced)
+
+### To lock your node
+
+```bash title="Terminal"
+vault action:passwordlock password:123@bcXYZM1n1m@
+```
+
+Example:
+
+```bash
+vault action:passwordlock password:123@bcXYZM1n1m@
+
+## Example output
+{
+ "command":"vault",
+ "params":{
+ "action":"passwordlock",
+ "password":"123@bcXYZM1n1m@"
+ },
+ "status":true,
+ "pending":false,
+ "response":"All private keys wiped! Stored encrypted in UserDB"
+}
+```
+
+Your seed phrase is now encrypted and password protected.
+
+### To unlock your node
+
+```bash title="Terminal"
+ vault action:passwordunlock password:123@bcXYZM1n1m@
+```
+
+Example:
+
+```bash
+vault action:passwordunlock password:123@bcXYZM1n1m@
+
+## Example output
+{
+ "command":"vault",
+ "params":{
+ "action":"passwordunlock",
+ "password":"123@bcXYZM1n1m@"
+ },
+ "status":true,
+ "pending":false,
+ "response":"All private keys restored!"
+}
+```
+
+Your seed phrase will be decrypted and your funds will no longer be password protected.
+
+### Transacting with a password locked node
+
+You may transact directly from the Terminal MiniDapp using the `send` function with the password parameter.
+
+```bash title="Terminal"
+send password:123@bcXYZM1n1m@ amount:5 address:MxG082FFHWG31QANAY66W2HK8CVGBRB3Z5RVTARY7T3Q75CGHB1A6CZH0B1KNDU
+```
+
+This will sign and then execute the transaction, only unlocking the node for that single transaction. Once complete, the node will be locked again automatically.
+
+The above solution is more secure than an unprotected node but the wallet is still effectively hot as it is connected to the internet and should not be used to store large amounts of funds.
diff --git a/content/docs/user-guides/security/meta.json b/content/docs/user-guides/security/meta.json
new file mode 100644
index 0000000..aec917a
--- /dev/null
+++ b/content/docs/user-guides/security/meta.json
@@ -0,0 +1,9 @@
+{
+ "title": "Security",
+ "root": false,
+ "pages": [
+ "lock-your-wallet",
+ "create-a-safe",
+ "backup-your-wallet"
+ ]
+}
diff --git a/content/docs/user-guides/set-your-profile.mdx b/content/docs/user-guides/set-your-profile.mdx
index 80084b6..b3a7acc 100644
--- a/content/docs/user-guides/set-your-profile.mdx
+++ b/content/docs/user-guides/set-your-profile.mdx
@@ -1,54 +1,64 @@
----
-title: Set your profile
-description: Learn how to set your Minima profile
-tag: user-guides
----
-
-Maxima allows you to communicate with friends and family and other Minima node runners, peer-to-peer. Simply set up your profile add some contacts to get started.
-
-There are several [MiniDapps](https://minidapps.minima.global/) that use Maxima:
-
-1. MaxContacts: Set your profile and add, remove and manage your contacts.
-2. MaxSolo: A one to one chat application
-3. Chatter: A decentralised social media platform
-
-## Setting your Maxima Profile
-
-Your Maxima Profile is the name that your Maxima contacts will see once you are connected with eachother. It will be shown when posting messages in MaxSolo or Chatter.
-
-1. Open the **MaxContacts** MiniDapp
-2. Go to the **Profile** page and select **Edit Display Name**
-
-
-
-3. Set your display name which will be seen by your contacts
-
-That's it!
-
-### Setting your Maxima Profile (Terminal)
-
-You can also set your profile using the following command:
-
-```bash title="Terminal"
-maxima action:setname name:Alice
-```
-
-Example output:
-
-```json title="Output"{
- "command":"maxima",
- "params":{
- "action":"setname",
- "name":"Alice"
- },
- "status":true,
- "response":{
- "name":"Alice"
- }
-}
-```
+---
+title: Set your profile
+description: Learn how to set your Minima profile
+tag: user-guides
+---
+
+Maxima allows you to communicate with friends and family and other Minima node runners, peer-to-peer. Simply set up your profile add some contacts to get started.
+
+There are several [MiniDapps](https://minidapps.minima.global/) that use Maxima:
+
+1. MaxContacts: Set your profile and add, remove and manage your contacts.
+2. MaxSolo: A one to one chat application
+3. Chatter: A decentralised social media platform
+
+## Setting your Maxima Profile
+
+Your Maxima Profile is the name that your Maxima contacts will see once you are connected with eachother. It will be shown when posting messages in MaxSolo or Chatter.
+
+1. Open the **MaxContacts** MiniDapp
+2. Go to the **Profile** page and select **Edit Display Name**
+
+
+
+3. Set your display name which will be seen by your contacts
+
+That's it!
+
+### Setting your Maxima Profile (Terminal)
+
+You can also set your profile using the following command:
+
+```bash title="Terminal"
+maxima action:setname name:Alice
+```
+
+Example output:
+
+```json title="Output"{
+ "command":"maxima",
+ "params":{
+ "action":"setname",
+ "name":"Alice"
+ },
+ "status":true,
+ "response":{
+ "name":"Alice"
+ }
+}
+```
+
+## Next Steps
+
+
+
+
\ No newline at end of file
diff --git a/mdx-components.tsx b/mdx-components.tsx
index b235f59..0bf27ea 100644
--- a/mdx-components.tsx
+++ b/mdx-components.tsx
@@ -5,8 +5,9 @@ import { Heading } from "fumadocs-ui/components/heading"
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 { Callout } from "fumadocs-ui/components/callout"
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,
@@ -42,6 +43,7 @@ export function useMDXComponents(components: MDXComponents): MDXComponents {
Accordion,
ThemeAwareSVG,
TypeTable,
+ Callout,
pre: ({ ref: _ref, ...props }) => (