├── components ├── index.js └── FAQBox.mdx ├── .gitignore ├── .env ├── public ├── favicon.ico ├── assets │ ├── logos │ │ ├── 100.png │ │ ├── lnd.png │ │ ├── knots.png │ │ ├── wall.jpg │ │ ├── fulcrum.png │ │ ├── ansible-dark.png │ │ ├── ansible-light.png │ │ ├── btcrpcexpl.svg │ │ ├── nginx.svg │ │ ├── bitcoin.svg │ │ ├── nostr.svg │ │ └── electrs.svg │ └── buttons │ │ ├── linux.png │ │ ├── firefox.png │ │ ├── netscape.png │ │ ├── notepad.png │ │ └── freeware-guide.png ├── img │ ├── system │ │ ├── xkcd.webp │ │ └── computers.webp │ ├── microbolt-banner.webp │ ├── nostr │ │ ├── nostr-logo.webp │ │ ├── nostr-relay.webp │ │ └── umbrel-nostr-relay-webapp.webp │ ├── lightning │ │ ├── mobileapp │ │ │ ├── zeus.webp │ │ │ └── zeus-features.webp │ │ ├── webapp │ │ │ └── thunderhub.webp │ │ └── lnd │ │ │ └── remote-scb-backup.webp │ └── bitcoin │ │ ├── bitcoin-client │ │ ├── urinals.gif │ │ ├── bitcoin-ots-check.webp │ │ └── mastering-bitcoin.webp │ │ ├── electrum-server │ │ ├── electrs.webp │ │ └── fulcrum.webp │ │ ├── desktop-signing-app │ │ ├── sparrow.webp │ │ ├── sparrow-stages.webp │ │ ├── sparrow-tor-proxy.webp │ │ ├── sparrow-electrum-no-proxy.webp │ │ └── sparrow-electrum-tor-no-proxy.webp │ │ ├── mining-pool │ │ └── publicpool-homepage.webp │ │ └── blockchain-explorer │ │ ├── mempool-preview.webp │ │ └── btc-rpc-explorer-homepage.webp └── .well-known │ └── lnurlp │ └── notepad ├── pages ├── en │ ├── docs │ │ ├── nostr │ │ │ ├── _meta.js │ │ │ └── nostr_relay.mdx │ │ ├── bitcoin │ │ │ ├── electrum_server │ │ │ │ ├── _meta.js │ │ │ │ └── electrs.mdx │ │ │ ├── bitcoin_client │ │ │ │ └── _meta.js │ │ │ ├── blockchain_explorer │ │ │ │ └── _meta.js │ │ │ ├── _meta.js │ │ │ ├── bitcoin_client.mdx │ │ │ ├── blockchain_explorer.mdx │ │ │ ├── electrum_server.mdx │ │ │ └── desktop_signing_app.mdx │ │ ├── lightning │ │ │ ├── _meta.js │ │ │ └── mobile_app.mdx │ │ ├── _meta.js │ │ ├── system │ │ │ ├── _meta.js │ │ │ ├── remote_access.mdx │ │ │ ├── system_config.mdx │ │ │ ├── preparations.mdx │ │ │ └── privacy.mdx │ │ ├── system.md │ │ ├── bitcoin.md │ │ ├── lightning.md │ │ ├── nostr.md │ │ └── index.md │ ├── faq.mdx │ ├── _meta.js │ ├── about.md │ ├── index.mdx │ └── ansible.mdx ├── ca │ ├── docs │ │ ├── nostr │ │ │ ├── _meta.js │ │ │ └── nostr_relay.mdx │ │ ├── bitcoin │ │ │ ├── electrum_server │ │ │ │ └── _meta.js │ │ │ ├── bitcoin_client │ │ │ │ └── _meta.js │ │ │ ├── blockchain_explorer │ │ │ │ └── _meta.js │ │ │ ├── _meta.js │ │ │ ├── bitcoin_client.mdx │ │ │ ├── blockchain_explorer.mdx │ │ │ └── electrum_server.mdx │ │ ├── lightning │ │ │ ├── _meta.js │ │ │ └── mobile_app.mdx │ │ ├── _meta.js │ │ ├── system │ │ │ ├── _meta.js │ │ │ ├── remote_access.mdx │ │ │ ├── system_config.mdx │ │ │ ├── preparations.mdx │ │ │ └── privacy.mdx │ │ ├── system.md │ │ ├── bitcoin.md │ │ ├── lightning.md │ │ ├── nostr.md │ │ └── index.md │ ├── faq.mdx │ ├── _meta.js │ ├── about.md │ ├── index.mdx │ └── ansible.mdx ├── _app.jsx └── index.module.css ├── middleware.js ├── package.json ├── README ├── crowdin.yml ├── locales ├── en.js └── ca.js ├── next.config.mjs ├── crowdin.sh ├── LICENSE └── theme.config.jsx /components/index.js: -------------------------------------------------------------------------------- 1 | export * from './FAQBox.mdx' -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .crowdin.yml 2 | .next 3 | node_modules -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | NEXT_TELEMETRY_DISABLED=1 2 | VERCEL_FORCE_NO_BUILD_CACHE=1 -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /pages/en/docs/nostr/_meta.js: -------------------------------------------------------------------------------- 1 | export default { 2 | nostr_relay: "Nostr Relay", 3 | web_app: "Web App" 4 | } -------------------------------------------------------------------------------- /public/assets/logos/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/assets/logos/100.png -------------------------------------------------------------------------------- /public/assets/logos/lnd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/assets/logos/lnd.png -------------------------------------------------------------------------------- /public/img/system/xkcd.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/system/xkcd.webp -------------------------------------------------------------------------------- /pages/ca/docs/nostr/_meta.js: -------------------------------------------------------------------------------- 1 | export default { 2 | nostr_relay: "Relé Nostr", 3 | web_app: "Aplicació web" 4 | } -------------------------------------------------------------------------------- /public/assets/logos/knots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/assets/logos/knots.png -------------------------------------------------------------------------------- /public/assets/logos/wall.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/assets/logos/wall.jpg -------------------------------------------------------------------------------- /pages/ca/docs/bitcoin/electrum_server/_meta.js: -------------------------------------------------------------------------------- 1 | export default { 2 | fulcrum: "Fulcrum", 3 | electrs: "Electrs" 4 | } -------------------------------------------------------------------------------- /pages/en/docs/bitcoin/electrum_server/_meta.js: -------------------------------------------------------------------------------- 1 | export default { 2 | fulcrum: "Fulcrum", 3 | electrs: "Electrs" 4 | } -------------------------------------------------------------------------------- /public/assets/buttons/linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/assets/buttons/linux.png -------------------------------------------------------------------------------- /public/assets/logos/fulcrum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/assets/logos/fulcrum.png -------------------------------------------------------------------------------- /public/img/microbolt-banner.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/microbolt-banner.webp -------------------------------------------------------------------------------- /public/img/nostr/nostr-logo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/nostr/nostr-logo.webp -------------------------------------------------------------------------------- /public/img/system/computers.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/system/computers.webp -------------------------------------------------------------------------------- /public/assets/buttons/firefox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/assets/buttons/firefox.png -------------------------------------------------------------------------------- /public/assets/buttons/netscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/assets/buttons/netscape.png -------------------------------------------------------------------------------- /public/assets/buttons/notepad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/assets/buttons/notepad.png -------------------------------------------------------------------------------- /public/img/nostr/nostr-relay.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/nostr/nostr-relay.webp -------------------------------------------------------------------------------- /public/assets/logos/ansible-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/assets/logos/ansible-dark.png -------------------------------------------------------------------------------- /public/assets/logos/ansible-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/assets/logos/ansible-light.png -------------------------------------------------------------------------------- /pages/ca/docs/bitcoin/bitcoin_client/_meta.js: -------------------------------------------------------------------------------- 1 | export default { 2 | bitcoin_knots: "Bitcoin Knots", 3 | bitcoin_core: "Bitcoin Core" 4 | } -------------------------------------------------------------------------------- /pages/en/docs/bitcoin/bitcoin_client/_meta.js: -------------------------------------------------------------------------------- 1 | export default { 2 | bitcoin_knots: "Bitcoin Knots", 3 | bitcoin_core: "Bitcoin Core" 4 | } -------------------------------------------------------------------------------- /public/assets/buttons/freeware-guide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/assets/buttons/freeware-guide.png -------------------------------------------------------------------------------- /public/img/lightning/mobileapp/zeus.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/lightning/mobileapp/zeus.webp -------------------------------------------------------------------------------- /public/img/lightning/webapp/thunderhub.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/lightning/webapp/thunderhub.webp -------------------------------------------------------------------------------- /pages/ca/docs/bitcoin/blockchain_explorer/_meta.js: -------------------------------------------------------------------------------- 1 | export default { 2 | mempool_space: "Mempool Space", 3 | btc_rpc_explorer: "BTC RPC Explorer" 4 | } -------------------------------------------------------------------------------- /pages/en/docs/bitcoin/blockchain_explorer/_meta.js: -------------------------------------------------------------------------------- 1 | export default { 2 | mempool_space: "Mempool Space", 3 | btc_rpc_explorer: "BTC RPC Explorer" 4 | } -------------------------------------------------------------------------------- /public/img/bitcoin/bitcoin-client/urinals.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/bitcoin/bitcoin-client/urinals.gif -------------------------------------------------------------------------------- /public/img/bitcoin/electrum-server/electrs.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/bitcoin/electrum-server/electrs.webp -------------------------------------------------------------------------------- /public/img/bitcoin/electrum-server/fulcrum.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/bitcoin/electrum-server/fulcrum.webp -------------------------------------------------------------------------------- /public/img/lightning/lnd/remote-scb-backup.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/lightning/lnd/remote-scb-backup.webp -------------------------------------------------------------------------------- /public/img/nostr/umbrel-nostr-relay-webapp.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/nostr/umbrel-nostr-relay-webapp.webp -------------------------------------------------------------------------------- /public/img/lightning/mobileapp/zeus-features.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/lightning/mobileapp/zeus-features.webp -------------------------------------------------------------------------------- /public/img/bitcoin/desktop-signing-app/sparrow.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/bitcoin/desktop-signing-app/sparrow.webp -------------------------------------------------------------------------------- /public/img/bitcoin/bitcoin-client/bitcoin-ots-check.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/bitcoin/bitcoin-client/bitcoin-ots-check.webp -------------------------------------------------------------------------------- /public/img/bitcoin/bitcoin-client/mastering-bitcoin.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/bitcoin/bitcoin-client/mastering-bitcoin.webp -------------------------------------------------------------------------------- /public/img/bitcoin/mining-pool/publicpool-homepage.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/bitcoin/mining-pool/publicpool-homepage.webp -------------------------------------------------------------------------------- /public/img/bitcoin/blockchain-explorer/mempool-preview.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/bitcoin/blockchain-explorer/mempool-preview.webp -------------------------------------------------------------------------------- /public/img/bitcoin/desktop-signing-app/sparrow-stages.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/bitcoin/desktop-signing-app/sparrow-stages.webp -------------------------------------------------------------------------------- /public/img/bitcoin/desktop-signing-app/sparrow-tor-proxy.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/bitcoin/desktop-signing-app/sparrow-tor-proxy.webp -------------------------------------------------------------------------------- /public/img/bitcoin/blockchain-explorer/btc-rpc-explorer-homepage.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/bitcoin/blockchain-explorer/btc-rpc-explorer-homepage.webp -------------------------------------------------------------------------------- /public/img/bitcoin/desktop-signing-app/sparrow-electrum-no-proxy.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/bitcoin/desktop-signing-app/sparrow-electrum-no-proxy.webp -------------------------------------------------------------------------------- /pages/en/docs/lightning/_meta.js: -------------------------------------------------------------------------------- 1 | export default { 2 | lightning_client: "Lightning client", 3 | channel_backup: "Channel backup", 4 | web_app: "Web app", 5 | mobile_app: "Mobile app" 6 | } -------------------------------------------------------------------------------- /public/img/bitcoin/desktop-signing-app/sparrow-electrum-tor-no-proxy.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microbolt-guide/website/HEAD/public/img/bitcoin/desktop-signing-app/sparrow-electrum-tor-no-proxy.webp -------------------------------------------------------------------------------- /pages/ca/docs/lightning/_meta.js: -------------------------------------------------------------------------------- 1 | export default { 2 | lightning_client: "Client Lightning", 3 | channel_backup: "Còpia de seguretat dels canals", 4 | web_app: "Aplicació web", 5 | mobile_app: "Aplicació mòbil" 6 | } -------------------------------------------------------------------------------- /pages/en/faq.mdx: -------------------------------------------------------------------------------- 1 | import { FAQBox } from '@components' 2 | 3 | # FAQ 4 | 5 | Here we collect the answers to the most common questions. 6 | 7 | 8 | When people start asking questions. 9 | -------------------------------------------------------------------------------- /pages/ca/faq.mdx: -------------------------------------------------------------------------------- 1 | import { FAQBox } from '@components' 2 | 3 | # FAQ 4 | 5 | Aquí recollim les respostes a les preguntes més habituals. 6 | 7 | 8 | Quan la gent comenci a fer preguntes. 9 | -------------------------------------------------------------------------------- /pages/ca/docs/_meta.js: -------------------------------------------------------------------------------- 1 | export default { 2 | index: "Introducció", 3 | system: "Sistema", 4 | bitcoin: "Bitcoin", 5 | "-- More": { 6 | title: "Més", 7 | type: "separator" 8 | }, 9 | lightning: "Lightning", 10 | nostr: "Nostr" 11 | }; -------------------------------------------------------------------------------- /pages/en/docs/_meta.js: -------------------------------------------------------------------------------- 1 | export default { 2 | index: "Introduction", 3 | system: "System", 4 | bitcoin: "Bitcoin", 5 | "-- More": { 6 | title: "More", 7 | type: "separator" 8 | }, 9 | lightning: "Lightning", 10 | nostr: "Nostr" 11 | } -------------------------------------------------------------------------------- /pages/en/docs/system/_meta.js: -------------------------------------------------------------------------------- 1 | export default { 2 | preparations: "Preparations", 3 | operating_system: "Operating system", 4 | remote_access: "Remote access", 5 | system_config: "System configuration", 6 | security: "Security", 7 | privacy: "Privacy" 8 | } -------------------------------------------------------------------------------- /pages/ca/docs/system/_meta.js: -------------------------------------------------------------------------------- 1 | export default { 2 | preparations: "Preparacions", 3 | operating_system: "Sistema operatiu", 4 | remote_access: "Accés remot", 5 | system_config: "Configuració del sistema", 6 | security: "Seguretat", 7 | privacy: "Privacitat" 8 | } -------------------------------------------------------------------------------- /pages/en/docs/bitcoin/_meta.js: -------------------------------------------------------------------------------- 1 | export default { 2 | bitcoin_client: "Bitcoin client", 3 | electrum_server: "Electrum server", 4 | desktop_signing_app: "Desktop signing app", 5 | blockchain_explorer: "Blockchain explorer", 6 | mining_pool: "Mining Pool" 7 | } -------------------------------------------------------------------------------- /pages/ca/docs/bitcoin/_meta.js: -------------------------------------------------------------------------------- 1 | export default { 2 | bitcoin_client: "Client Bitcoin", 3 | electrum_server: "Servidor Electrum", 4 | desktop_signing_app: "Aplicació de signatura d'escriptori", 5 | blockchain_explorer: "Explorador de cadena de blocs", 6 | mining_pool: "Pool de Mineria" 7 | } -------------------------------------------------------------------------------- /middleware.js: -------------------------------------------------------------------------------- 1 | export { middleware } from 'nextra/locales' 2 | 3 | export const config = { 4 | // Matcher ignoring `/_next/` and `/api/` 5 | // Also ignoring custom paths like `.well-known` and `assets` 6 | matcher: [ 7 | '/((?!api|_next/static|_next/image|favicon.ico|icon.svg|apple-icon.png|manifest|\\.well-known|assets).*)' 8 | ] 9 | } -------------------------------------------------------------------------------- /pages/en/docs/system.md: -------------------------------------------------------------------------------- 1 | # System 2 | 3 | This guide builds on the easily available and very flexible personal computers. 4 | No matter the size or consumption, as long as you feel comfortable with it. 5 | 6 | ![](/img/system/computers.webp) 7 | 8 | In the following sections, we will start it up and prepare the operating system 9 | for your Microbolt. -------------------------------------------------------------------------------- /pages/ca/docs/system.md: -------------------------------------------------------------------------------- 1 | # Sistema 2 | 3 | Aquesta guia es basa en els ordinadors personals de fàcil accés i molt 4 | flexibles. 5 | No importa la mida ni el consum, sempre que et sentis còmode amb ella. 6 | 7 | ![](/img/system/computers.webp) 8 | 9 | En els següents apartats, l'iniciarem i prepararem el sistema operatiu per al 10 | teu Microbolt. -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "dev": "next", 4 | "build": "next build", 5 | "start": "next start", 6 | "push": "./crowdin.sh push", 7 | "pull": "./crowdin.sh pull" 8 | }, 9 | "dependencies": { 10 | "next": "^14.2.15", 11 | "nextra": "^3.0.11", 12 | "nextra-theme-docs": "^3.0.11", 13 | "react": "^18.3.1", 14 | "react-dom": "^18.3.1", 15 | "react-icons": "^5.3.0" 16 | } 17 | } -------------------------------------------------------------------------------- /components/FAQBox.mdx: -------------------------------------------------------------------------------- 1 | export function FAQBox({ title, children }) { 2 | return ( 3 |
6 | 7 | 8 | {title} 9 | 10 | 11 |
12 | {children} 13 |
14 |
15 | ) 16 | } -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | __ __ _ _ _ _ 2 | | \/ (_) | | | | | 3 | | \ / |_ ___ _ __ ___ | |__ ___ | | |_ 4 | | |\/| | |/ __| '__/ _ \| '_ \ / _ \| | __| 5 | | | | | | (__| | | (_) | |_) | (_) | | |_ 6 | |_| |_|_|\___|_| \___/|_.__/ \___/|_|\__| https://microbolt.guide 7 | ________________________________________________________________________________ 8 | 9 | 10 | This repository contains all sources and is used for Issue tracking. -------------------------------------------------------------------------------- /crowdin.yml: -------------------------------------------------------------------------------- 1 | # Put the commented values in your .crowdin.yml file 2 | # project_id: "CROWDIN_PROJECT_ID" 3 | # api_token: "CROWDIN_PERSONAL_TOKEN" 4 | base_path: "." 5 | base_url: "https://api.crowdin.com" 6 | 7 | preserve_hierarchy: true 8 | 9 | files: [ 10 | { 11 | source: "/locales/en.js", 12 | translation: "/locales/%two_letters_code%.js" 13 | }, 14 | { 15 | source: "/pages/en/**/*", 16 | translation: "/pages/%two_letters_code%/**/%original_file_name%" 17 | } 18 | ] -------------------------------------------------------------------------------- /locales/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | LANGUAGE_NAME: 'English', 3 | FEEDBACK: 'Question? Give us feedback →', 4 | DESCRIPTION: 'Build your own DIY Bitcoin full node. No need to trust anyone else.', 5 | SEARCH_PLACEHOLDER: 'Search documentation…', 6 | BANNER_TEXT: '🎉 Microbolt 2.0.2 is out! Read more →', 7 | TOC_TITLE: 'On This Page', 8 | TOC_L10N_TEXT: 'Help translate Microbolt', 9 | BACK_TO_TOP: 'Scroll to top', 10 | EDIT_TEXT: 'Edit this page on GitHub →', 11 | GIT_TIMESTAMP: 'Last updated on' 12 | } -------------------------------------------------------------------------------- /pages/en/_meta.js: -------------------------------------------------------------------------------- 1 | export default { 2 | index: { 3 | type: "page", 4 | title: "Microbolt", 5 | display: "hidden", 6 | theme: { 7 | layout: "raw" 8 | } 9 | }, 10 | docs: { 11 | type: "page", 12 | title: "Documentation" 13 | }, 14 | ansible: { 15 | type: "page", 16 | title: "Ansible" 17 | }, 18 | about: { 19 | type: "page", 20 | title: "About", 21 | theme: { 22 | typesetting: "article" 23 | } 24 | }, 25 | faq: { 26 | type: "page", 27 | title: "FAQ" 28 | } 29 | } -------------------------------------------------------------------------------- /pages/ca/_meta.js: -------------------------------------------------------------------------------- 1 | export default { 2 | index: { 3 | type: "page", 4 | title: "Microbolt", 5 | display: "hidden", 6 | theme: { 7 | layout: "raw" 8 | } 9 | }, 10 | docs: { 11 | type: "page", 12 | title: "Documentació" 13 | }, 14 | ansible: { 15 | type: "page", 16 | title: "Ansible" 17 | }, 18 | about: { 19 | type: "page", 20 | title: "Quant a", 21 | theme: { 22 | typesetting: "article" 23 | } 24 | }, 25 | faq: { 26 | type: "page", 27 | title: "FAQ" 28 | } 29 | } -------------------------------------------------------------------------------- /locales/ca.js: -------------------------------------------------------------------------------- 1 | export default { 2 | LANGUAGE_NAME: 'Català', 3 | FEEDBACK: 'APM? Dona\'ns feedback →', 4 | DESCRIPTION: 'Construeix el teu propi node complet de Bitcoin. No cal confiar en ningú més.', 5 | SEARCH_PLACEHOLDER: 'Cerca a la documentació…', 6 | BANNER_TEXT: '🎉 Microbolt 2.0.2 ja està disponible! Llegeix més →', 7 | TOC_TITLE: 'En aquesta pàgina', 8 | TOC_L10N_TEXT: 'Ajuda a traduir Microbolt', 9 | BACK_TO_TOP: 'Torna a dalt', 10 | EDIT_TEXT: 'Edita aquesta pàgina a GitHub →', 11 | GIT_TIMESTAMP: 'Última actualització el' 12 | } -------------------------------------------------------------------------------- /public/.well-known/lnurlp/notepad: -------------------------------------------------------------------------------- 1 | { 2 | "status": "OK", 3 | "tag": "payRequest", 4 | "commentAllowed": 255, 5 | "callback": "https://getalby.com/lnurlp/doitwithnotepad/callback", 6 | "metadata": "[[\"text/identifier\",\"doitwithnotepad@getalby.com\"],[\"text/plain\",\"Sats for doitwithnotepad\"]]", 7 | "minSendable": 1000, 8 | "maxSendable": 250000000, 9 | "payerData": { 10 | "name": { 11 | "mandatory": false 12 | }, 13 | "email": { 14 | "mandatory": false 15 | }, 16 | "pubkey": { 17 | "mandatory": false 18 | } 19 | }, 20 | "nostrPubkey": "79f00d3f5a19ec806189fcab03c1be4ff81d18ee4f653c88fac41fe03570f432", 21 | "allowsNostr": true 22 | } -------------------------------------------------------------------------------- /next.config.mjs: -------------------------------------------------------------------------------- 1 | import nextra from 'nextra' 2 | import path from 'path' 3 | 4 | const withNextra = nextra({ 5 | theme: 'nextra-theme-docs', 6 | themeConfig: './theme.config.jsx' 7 | //defaultShowCopyCode: true, 8 | }) 9 | 10 | export default withNextra({ 11 | i18n: { 12 | locales: ['ca', 'en'], 13 | defaultLocale: 'ca', 14 | }, 15 | webpack: (config) => { 16 | config.resolve.alias['@components'] = path.join(process.cwd(), 'components'); 17 | return config; 18 | }, 19 | redirects: () => { 20 | return [ 21 | { 22 | source: '/docs', 23 | destination: '/docs/index', 24 | statusCode: 302 25 | } 26 | ] 27 | }, 28 | reactStrictMode: true 29 | }) -------------------------------------------------------------------------------- /crowdin.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | # rename ./pages/*/index.mdx to ./pages/*/index.mdx.html or vice versa 5 | # if argument is .mdx, the script will rename .mdx to .mdx.html 6 | # if no argument is passed, the script will rename .mdx.html to .mdx 7 | process_file() { 8 | find ./pages/* \ 9 | -maxdepth 1 \ 10 | -name "index${1:-.mdx.html}" \ 11 | -exec sh \ 12 | -c 'mv "$1" "${1%.html}${2}"' _ {} "${1:+.html}" \; 13 | } 14 | 15 | trap process_file INT EXIT 16 | 17 | case "$1" in 18 | push) 19 | process_file .mdx 20 | crowdin "$1" --identity ./.crowdin.yml 21 | crowdin "$1" translations --identity ./.crowdin.yml 22 | ;; 23 | pull) 24 | crowdin "$1" sources --identity ./.crowdin.yml 25 | crowdin "$1" --identity ./.crowdin.yml 26 | ;; 27 | *) 28 | printf "%s\n" "Usage: ${0##*/} {push|pull}" 29 | trap - INT EXIT; exit 1 30 | ;; 31 | esac -------------------------------------------------------------------------------- /pages/en/docs/bitcoin.md: -------------------------------------------------------------------------------- 1 | # Bitcoin 2 | 3 | The base of a sovereign Bitcoin node is a fully validating Bitcoin client. 4 | It will download the whole blockchain and validate every single transaction that 5 | ever happened. After this verification, the client can check the validity of all 6 | future transactions. 7 | 8 | Your Bitcoin client also acts as a data source for other applications, like the 9 | Electrum server (to use with your software and hardware wallets), blockchain 10 | explorer or Lightning client. 11 | 12 | --- 13 | 14 | We first install Bitcoin Client and *crum on the node. 15 | We then set up the powerful Sparrow desktop wallet on your computer and connect 16 | it to your *crum server for secure and private base layer operations, such as 17 | sending and receiving payments from and to your hardware wallet. 18 | Finally, we install BTC RPC Explorer on the node, a lite blockchain explorer 19 | with a clean web UI for privately checking your transactions and the mempool. -------------------------------------------------------------------------------- /pages/en/docs/bitcoin/bitcoin_client.mdx: -------------------------------------------------------------------------------- 1 | import { Callout, Cards } from 'nextra/components' 2 | 3 | import { FaBitcoin } from "react-icons/fa" 4 | import { GiKnot } from "react-icons/gi" 5 | 6 | # Bitcoin client 7 | 8 | 9 | This may take some time 10 | 11 | Bitcoin will download the full Bitcoin blockchain, and validate all 12 | transactions since 2009. We're talking about more than 800.000 blocks with a 13 | size of over 500 GB, so this is not an easy task. 14 | 15 | 16 | Choose your client, when you're done jump to the Electrum server section 17 | 18 | 19 | } 21 | title="Bitcoin Knots" 22 | href="bitcoin_client/bitcoin_knots" 23 | /> 24 | } 26 | title="Bitcoin Core" 27 | href="bitcoin_client/bitcoin_core" 28 | /> 29 | 30 | 31 | 32 | Installing more than one client is not recommended and not compatible, we do not 33 | support it 34 | -------------------------------------------------------------------------------- /pages/ca/docs/bitcoin/bitcoin_client.mdx: -------------------------------------------------------------------------------- 1 | import { Callout, Cards } from 'nextra/components' 2 | 3 | import { FaBitcoin } from "react-icons/fa" 4 | import { GiKnot } from "react-icons/gi" 5 | 6 | # Client Bitcoin 7 | 8 | 9 | Això pot trigar una mica 10 | 11 | Bitcoin descarregarà la cadena de blocs completa de Bitcoin i validarà totes les 12 | transaccions des del 2009. Estem parlant de més de 800.000 blocs amb una mida de 13 | més de 500 GB, per la qual cosa no és una tasca fàcil. 14 | 15 | 16 | Trieu el vostre client, quan hàgiu acabat, aneu a la secció del servidor 17 | Electrum 18 | 19 | 20 | } 22 | title="Bitcoin Knots" 23 | href="bitcoin_client/bitcoin_knots" 24 | /> 25 | } 27 | title="Bitcoin Core" 28 | href="bitcoin_client/bitcoin_core" 29 | /> 30 | 31 | 32 | 33 | No es recomana instal·lar més d'un client i no és compatible, no donem suport 34 | -------------------------------------------------------------------------------- /pages/ca/docs/bitcoin.md: -------------------------------------------------------------------------------- 1 | # Bitcoin 2 | 3 | La base d'un node sobirà de Bitcoin és un client de Bitcoin totalment validat. 4 | Baixarà tota la cadena de blocs i validarà cada transacció que s'hagi produït. 5 | Després d'aquesta verificació, el client pot comprovar la validesa de totes les 6 | transaccions futures. 7 | 8 | El vostre client Bitcoin també actua com a font de dades per a altres 9 | aplicacions, com ara el servidor Electrum (per utilitzar-lo amb les vostres 10 | carteres de programari i maquinari), l'explorador de cadena de blocs o el client 11 | Lightning. 12 | 13 | --- 14 | 15 | Primer instal·lem Bitcoin Client i *crum al node. A continuació, configurem la 16 | potent cartera d'escriptori Sparrow al vostre ordinador i la connectem al vostre 17 | servidor *crum per a operacions de capa base segures i privades, com ara enviar 18 | i rebre pagaments des de i cap a la vostra cartera de maquinari. Finalment, 19 | instal·lem BTC RPC Explorer al node, un explorador de cadena de blocs lleuger 20 | amb una interfície d'usuari web neta per comprovar de manera privada les vostres 21 | transaccions i el mempool. -------------------------------------------------------------------------------- /pages/en/docs/bitcoin/blockchain_explorer.mdx: -------------------------------------------------------------------------------- 1 | import { Cards } from 'nextra/components' 2 | 3 | import { FaSwimmingPool } from "react-icons/fa" 4 | import { SiGooglemaps } from "react-icons/si" 5 | 6 | # Blockchain explorer 7 | 8 | After the Microbolt runs your own fully validated node, and even acts as a 9 | backend for your hardware signing device with Electrum server, an 10 | important puzzle piece to improve privacy and financial sovereignty is your own 11 | Blockchain Explorer. 12 | It lets you query transactions, addresses, and blocks of your choice. 13 | You no longer need to leak information by querying a third-party blockchain 14 | explorer that can be used to get your location and cluster addresses. 15 | 16 | Choose your explorer, when you're done jump to the Mining Pool section 17 | 18 | 19 | } 21 | title="Mempool Space" 22 | href="blockchain_explorer/mempool_space" 23 | /> 24 | } 26 | title="BTC RPC Explorer" 27 | href="blockchain_explorer/btc_rpc_explorer" 28 | /> 29 | -------------------------------------------------------------------------------- /public/assets/logos/btcrpcexpl.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pages/ca/docs/bitcoin/blockchain_explorer.mdx: -------------------------------------------------------------------------------- 1 | import { Cards } from 'nextra/components' 2 | 3 | import { FaSwimmingPool } from "react-icons/fa" 4 | import { SiGooglemaps } from "react-icons/si" 5 | 6 | # Explorador de cadena de blocs 7 | 8 | Després que Microbolt executi el vostre propi node totalment validat, i fins i 9 | tot actuï com a backend per al vostre dispositiu de signatura de maquinari amb 10 | el servidor Electrum, una peça important del trencaclosques per millorar la 11 | privadesa i la sobirania financera és el vostre propi explorador de cadena de 12 | blocs. 13 | Us permet consultar transaccions, adreces i blocs que trieu. Ja no necessiteu 14 | filtrar informació consultant un explorador de cadena de blocs de tercers que es 15 | pot utilitzar per obtenir la vostra ubicació i adreces de clúster. 16 | 17 | Trieu el vostre explorador, quan hàgiu acabat, aneu a la secció de Pool de 18 | Mineria 19 | 20 | 21 | } 23 | title="Mempool Space" 24 | href="blockchain_explorer/mempool_space" 25 | /> 26 | } 28 | title="BTC RPC Explorer" 29 | href="blockchain_explorer/btc_rpc_explorer" 30 | /> 31 | -------------------------------------------------------------------------------- /pages/en/docs/lightning.md: -------------------------------------------------------------------------------- 1 | # Lightning 2 | 3 | Now you're all set up for Bitcoin. But Bitcoin is not primarily designed for 4 | fast and cheap payments. The blockchain that records all transactions cannot 5 | grow without limit if we want to keep the whole system decentralized and nodes 6 | like this Microbolt feasible. 7 | 8 | Building on top of the Bitcoin base layer, the Lightning Network enables instant 9 | and cheap everyday payments. Your coffee purchase doesn't necessarily need to be 10 | validated and recorded by all Bitcoin nodes worldwide if you think about it. 11 | 12 | Check out 13 | [Understanding the Lightning Network](https://bitcoinmagazine.com/technical/understanding-the-lightning-network-part-building-a-bidirectional-payment-channel-1464710791) 14 | from Bitcoin Magazine to learn more about how it works. 15 | 16 | --- 17 | 18 | To enable the Lightning Network on your Microbolt, we install a Lightning 19 | Client. We then set up an automatic Static Channel Backup to protect ourselves 20 | in case of failure of the SSD drives. We'll then add a web-based node management 21 | tool. Finally, we'll install a mobile app to make on-chain and LN payments and 22 | manage our node while we're on the go. Together, they make operating your node a 23 | breeze. -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017-2020 Stadicus 4 | Copyright (c) 2021-2023 RaspiBolt contributors 5 | Copyright (c) 2022-2023 2FakTor 6 | Copyright (c) 2024 doitwithnotepad 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in all 16 | copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 24 | SOFTWARE. -------------------------------------------------------------------------------- /pages/en/docs/system/remote_access.mdx: -------------------------------------------------------------------------------- 1 | import { Callout, Steps } from 'nextra/components' 2 | 3 | # Remote access 4 | 5 | We connect to our personal computer by using `ssh` (Secure Shell). 6 | 7 | ## Enable the use of hostname to connect to the node 8 | 9 | To be able to use the `nakamoto01` hostname instead of the IP address, we must 10 | install this necessary software package 11 | 12 | 13 | ### Install `avahi` 14 | 15 | ```sh copy 16 | apk add avahi 17 | ``` 18 | 19 | ### Add service to runlevel 20 | 21 | ```sh copy 22 | rc-update add avahi-daemon 23 | ``` 24 | 25 | ### Start service 26 | 27 | ```sh copy 28 | rc-service avahi-daemon start 29 | ``` 30 | 31 | ### Log out 32 | 33 | ```sh copy 34 | exit 35 | ``` 36 | 37 | 38 | ## Access with Secure Shell 39 | 40 | Now it’s time to connect to the Microbolt via `ssh` and get to work. 41 | 42 | 43 | Since windows 10 1809 and higher, windows have 44 | [`openSSH`](https://github.com/PowerShell/openssh-portable) installed by 45 | default. 46 | 47 | macOS have also `openSSH` installed by default. 48 | 49 | If you are on a Linux/*BSD/plan9 systems you know what to do ;) 50 | 51 | 52 | ```sh copy 53 | ssh root@nakamoto01 54 | ``` 55 | 56 | 57 | You will be prompted for the password you have chosen previously 58 | -------------------------------------------------------------------------------- /pages/ca/docs/lightning.md: -------------------------------------------------------------------------------- 1 | # Lightning 2 | 3 | Ara ja esteu preparat per a Bitcoin. Però Bitcoin no està dissenyat 4 | principalment per a pagaments ràpids i barats. La cadena de blocs que registra 5 | totes les transaccions no pot créixer sense límits si volem mantenir tot el 6 | sistema descentralitzat i els nodes com Microbolt factibles. 7 | 8 | A sobre de la capa base de Bitcoin, Lightning Network permet pagaments 9 | quotidians instantanis i econòmics. Comprar un cafè no necessàriament ha de ser 10 | validat i registrat per tots els nodes de Bitcoin a tot el món si ho penseu 11 | fredament. 12 | 13 | Consulteu 14 | [Understanding the Lightning Network](https://bitcoinmagazine.com/technical/understanding-the-lightning-network-part-building-a-bidirectional-payment-channel-1464710791) 15 | de la revista Bitcoin per obtenir més informació sobre com funciona. 16 | 17 | --- 18 | 19 | Per habilitar la xarxa Lightning al vostre Microbolt, instal·lem un client 20 | Lightning. A continuació, configurem una còpia de seguretat automàtica del canal 21 | estàtic per protegir-nos en cas de fallada de les unitats SSD. A continuació, 22 | afegirem una eina de gestió de nodes basada en la web. I finalment, instal·larem 23 | una aplicació mòbil per fer pagaments on-chain i LN, i poder gestionar el nostre 24 | node enqualsevol lloc i moment. Junts, fan que operar el vostre node sigui molt 25 | fàcil. -------------------------------------------------------------------------------- /pages/ca/docs/system/remote_access.mdx: -------------------------------------------------------------------------------- 1 | import { Callout, Steps } from 'nextra/components' 2 | 3 | # Accés remot 4 | 5 | Ens connectem al nostre ordinador personal mitjançant `ssh` (Secure Shell). 6 | 7 | ## Habiliteu l'ús del nom d'amfitrió per connectar-vos al node 8 | 9 | Per poder utilitzar el nom d'amfitrió `nakamoto01` en comptes de l'adreça IP, 10 | és necessari instal·lar aquest paquet de programari 11 | 12 | 13 | ### Instal·leu `avahi` 14 | 15 | ```sh copy 16 | apk add avahi 17 | ``` 18 | 19 | ### Afegeix el servei al nivell d'execució 20 | 21 | ```sh copy 22 | rc-update add avahi-daemon 23 | ``` 24 | 25 | ### Inicia el servei 26 | 27 | ```sh copy 28 | rc-service avahi-daemon start 29 | ``` 30 | 31 | ### Tancar sessió 32 | 33 | ```sh copy 34 | exit 35 | ``` 36 | 37 | 38 | ## Accés with Secure Shell 39 | 40 | Ara és el moment de connectar-se al Microbolt mitjançant `ssh` i posar-se a 41 | treballar. 42 | 43 | 44 | Des de windows 10 1809 i posterior, windows té 45 | [`openSSH`](https://github.com/PowerShell/openssh-portable) instal·lat per 46 | defecte. 47 | 48 | macOS també té `openSSH` instal·lat per defecte. 49 | 50 | Si esteu en un sistema Linux/*BSD/plan9, ja sabeu què fer ;) 51 | 52 | 53 | ```sh copy 54 | ssh root@nakamoto01 55 | ``` 56 | 57 | 58 | Se us demanarà la contrasenya que heu escollit anteriorment 59 | -------------------------------------------------------------------------------- /public/assets/logos/nginx.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/assets/logos/bitcoin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /pages/en/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: About 3 | --- 4 | 5 | # About Microbolt 6 | 7 | Microbolt was created by `doitwithnotepad` to provide a clear and understandable 8 | guide for building a Bitcoin and Lightning node on Alpine Linux. It was also 9 | designed with the idea of offering options, not being restricted to a single 10 | stack, and being as lightweight, security-oriented, and simple as possible. 11 | 12 | ## Credits 13 | 14 | Microbolt nodes are powered by the following open source projects, many of which 15 | you can contribute to in various ways: 16 | 17 | - https://raspibolt.org 18 | - https://v2.minibolt.info 19 | - https://alpinelinux.org 20 | - https://kernel.org 21 | - https://www.busybox.net 22 | - https://musl.libc.org 23 | - https://man.openbsd.org/doas 24 | - https://www.sudo.ws 25 | - https://caddyserver.com 26 | - https://nginx.org 27 | - https://git.alpinelinux.org/awall/about 28 | - https://bitcoinknots.org 29 | - https://bitcoin.org 30 | - https://fulcrumserver.org 31 | - https://github.com/romanz/electrs 32 | - https://mempool.space 33 | - https://bitcoinexplorer.org 34 | - https://web.public-pool.io 35 | - https://www.sparrowwallet.com 36 | - https://lightning.network 37 | - https://corelightning.org 38 | - https://github.com/lightningnetwork/lnd 39 | - https://www.thunderhub.io 40 | - https://zeusln.com 41 | - https://sr.ht/~gheartsfield/nostr-rs-relay 42 | - https://github.com/getumbrel/umbrel 43 | - and many more 44 | 45 | ## Donations 46 | 47 | If you like Microbolt and want to support the project, consider making a 48 | donation via Lightning. Donations help us maintain and improve the project. 49 | 50 | You can send donations to the following Lightning address: 51 | 52 | ![Lightning Donation QR Code](/assets/ln-donations.svg) 53 | 54 |
55 | notepad@microbolt.guide 56 | 57 | Thank you for your support! 🎉 -------------------------------------------------------------------------------- /pages/ca/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Quant a 3 | --- 4 | 5 | # Quant a Microbolt 6 | 7 | Microbolt va ser creat per `doitwithnotepad` per proporcionar una guia clara i 8 | comprensible per construir un node de Bitcoin i Lightning a Alpine Linux. També 9 | es va dissenyar amb la idea d'oferir opcions, no restringint-se a un sol 10 | "stack", i sent el més lleuger, orientat a la seguretat i senzill possible. 11 | 12 | ## Crèdits 13 | 14 | Els nodes de Microbolt estan impulsats pels següents projectes de codi obert, 15 | molts dels quals podeu contribuir de diverses maneres: 16 | 17 | - https://raspibolt.org 18 | - https://v2.minibolt.info 19 | - https://alpinelinux.org 20 | - https://kernel.org 21 | - https://www.busybox.net 22 | - https://musl.libc.org 23 | - https://man.openbsd.org/doas 24 | - https://www.sudo.ws 25 | - https://caddyserver.com 26 | - https://nginx.org 27 | - https://git.alpinelinux.org/awall/about 28 | - https://bitcoinknots.org 29 | - https://bitcoin.org 30 | - https://fulcrumserver.org 31 | - https://github.com/romanz/electrs 32 | - https://mempool.space 33 | - https://bitcoinexplorer.org 34 | - https://web.public-pool.io 35 | - https://www.sparrowwallet.com 36 | - https://lightning.network 37 | - https://corelightning.org 38 | - https://github.com/lightningnetwork/lnd 39 | - https://www.thunderhub.io 40 | - https://zeusln.com 41 | - https://sr.ht/~gheartsfield/nostr-rs-relay 42 | - https://github.com/getumbrel/umbrel 43 | - i molts més 44 | 45 | ## Donatius 46 | 47 | Si t'agrada Microbolt i vols donar suport al projecte, considera fer una donació 48 | via Lightning. Les donacions ens ajuden a mantenir i millorar el projecte. 49 | 50 | Pots enviar donacions a la següent adreça Lightning: 51 | 52 | ![Lightning Donation QR Code](/assets/ln-donations.svg) 53 | 54 |
55 | notepad@microbolt.guide 56 | 57 | Gràcies pel teu suport! 🎉 -------------------------------------------------------------------------------- /pages/en/docs/nostr.md: -------------------------------------------------------------------------------- 1 | # Nostr 2 | 3 | ![Nostr Logo](/img/nostr/nostr-logo.webp) 4 | 5 | ## What is Nostr? 6 | 7 | Nostr is a straightforward and open protocol for global, decentralized, and 8 | censorship-resistant social media. It offers numerous advantages for users and 9 | is completely free, requiring no ID or third-party verification to begin 10 | connecting with like-minded individuals and expanding your community. While 11 | nostr is sometimes confused as just another social media platform, it goes 12 | beyond that. Explore the resources provided here to discover its significant 13 | potential. 14 | 15 | This protocol is based on relays. Relays are servers that can be operated by 16 | anyone. By opening a persistent connection with the server, clients (or apps) 17 | can push and pull events in real-time. 18 | 19 | [Relays](https://usenostr.org/#relays) are the central element of the nostr 20 | protocol, responsible for storing events received from clients. 21 | 22 | Crucially, relays do not communicate with each other. Only the relays you're 23 | connected to will receive and store your events. This is a key feature of nostr, 24 | emphasizing the lack of communication between relays. Therefore, you should 25 | connect to as many relays as you wish to share your data with. 26 | 27 | Clients should always provide users the flexibility to connect to multiple 28 | relays. Users can also decide whether they want to read, write, or do both with 29 | the relays they're connected to. This means I can choose to connect to a 30 | specific relay to access content without necessarily sharing my own events 31 | there, or vice versa. 32 | 33 | You can obtain more info about nostr on these additional resources: 34 | 35 | * [austritch.net](https://www.austrich.net/nostr) 36 | * [awesome-nostr](https://www.nostr.net) 37 | * [use-nostr](https://usenostr.org) 38 | * [Nostr.how](https://nostr.how/en/what-is-nostr) 39 | * [gzuuus slideshow](https://www.canva.com/design/DAFcs32eM7k/1twoK\_IqInXQm5txlZBLCg/view) 40 | * [nostr.com](https://nostr.com) -------------------------------------------------------------------------------- /pages/ca/docs/nostr.md: -------------------------------------------------------------------------------- 1 | # Nostr 2 | 3 | ![Nostr Logo](/img/nostr/nostr-logo.webp) 4 | 5 | ## Què és Nostr? 6 | 7 | Nostr és un protocol senzill i obert per a les xarxes socials globals, 8 | descentralitzades i resistents a la censura. Ofereix nombrosos avantatges per 9 | als usuaris i és totalment gratuït, i no requereix cap identificació ni 10 | verificació de tercers per començar a connectar-se amb persones afins i expandir 11 | la teva comunitat. Tot i que nostr de vegades es confon com una altra plataforma 12 | de xarxes socials, va més enllà d'això. Explora els recursos que s'ofereixen 13 | aquí per descobrir el seu potencial significatiu. 14 | 15 | Aquest protocol es basa en relés. Els relés són servidors que poden ser operats 16 | per qualsevol persona. En obrir una connexió persistent amb el servidor, els 17 | clients (o les aplicacions) poden "enviar i rebre" esdeveniments en temps real. 18 | 19 | Els [Relés](https://usenostr.org/#relays) són l'element central del protocol 20 | nostr, responsable d'emmagatzemar els esdeveniments rebuts dels clients. 21 | 22 | Crucialment, els relés no es comuniquen entre si. Només els relés als quals 23 | esteu connectats rebran i emmagatzemaran els vostres esdeveniments. Aquesta és 24 | una característica clau de nostr, emfatitzant la falta de comunicació entre els 25 | relés. Per tant, heu de connectar-vos a tants relés com vulgueu compartir les 26 | vostres dades. 27 | 28 | Els clients sempre haurien de proporcionar als usuaris la flexibilitat per 29 | connectar-se a múltiples relés. Els usuaris també poden decidir si volen llegir, 30 | escriure o fer tots dos amb els relés als quals estan connectats. Això significa 31 | que puc triar connectar-me a un relé específic per accedir al contingut sense 32 | necessàriament compartir els meus propis esdeveniments allà, o viceversa. 33 | 34 | Podeu obtenir més informació sobre nostr en aquests recursos addicionals: 35 | 36 | * [austritch.net](https://www.austrich.net/nostr) 37 | * [awesome-nostr](https://www.nostr.net) 38 | * [use-nostr](https://usenostr.org) 39 | * [Nostr.how](https://nostr.how/en/what-is-nostr) 40 | * [gzuuus slideshow](https://www.canva.com/design/DAFcs32eM7k/1twoK\_IqInXQm5txlZBLCg/view) 41 | * [nostr.com](https://nostr.com) -------------------------------------------------------------------------------- /pages/en/docs/bitcoin/electrum_server.mdx: -------------------------------------------------------------------------------- 1 | import { Callout, Cards } from 'nextra/components' 2 | 3 | import { FaFulcrum } from "react-icons/fa" 4 | import { FaReact } from "react-icons/fa" 5 | 6 | # Electrum server 7 | 8 | 9 | This may take some time 10 | 11 | Electrum must first fully index the blockchain and compact its database before 12 | you can connect to it with your signing devices. This can take up to ~1.5 - 4 13 | days or more, depending on the hardware. 14 | 15 | 16 | We will set up an Electrum server for use with your Bitcoin software or hardware 17 | signing device. 18 | 19 | 20 | Make sure that you have reduced the database cache of Bitcoin client 21 | 22 | 23 | ## Bitcoin with signing devices 24 | 25 | The best way to safely keep your bitcoin key pairs (meaning the best combination 26 | of security and usability) is to use a signing device (like 27 | [SeedSigner](https://seedsigner.com), 28 | [Passport](https://foundationdevices.com), 29 | [BitBox](https://shiftcrypto.ch/bitbox02), [Coldcard](https://coldcard.com), 30 | [Jade](https://blockstream.com/jade) or [Trezor](https://trezor.io)) in 31 | combination with your own Bitcoin node. This gives you security, privacy and 32 | eliminates the need to trust a third party to verify transactions. 33 | 34 | Bitcoin client on the Microbolt itself is not meant to hold funds. 35 | 36 | One possibility to use Bitcoin client with your Bitcoin signing devices is to 37 | use an Electrum server as middleware. It imports data from Bitcoin client and 38 | provides it to signing software supporting the Electrum protocol. Desktop 39 | signing apps like [Sparrow](https://sparrowwallet.com), the 40 | [BitBoxApp](https://shiftcrypto.ch/app), [Electrum](https://electrum.org) or 41 | [Specter Desktop](https://specter.solutions/desktop) that support signing 42 | devices can then be used with your own sovereign Bitcoin node. 43 | 44 | Choose your server, when you're done jump to the Desktop wallet section 45 | 46 | 47 | } 49 | title="Fulcrum" 50 | href="electrum_server/fulcrum" 51 | /> 52 | } 54 | title="Electrs" 55 | href="electrum_server/electrs" 56 | /> 57 | 58 | 59 | 60 | Installing more than one server is not recommended and not compatible, we do not 61 | support it 62 | -------------------------------------------------------------------------------- /pages/_app.jsx: -------------------------------------------------------------------------------- 1 | import { useEffect, useRef, useMemo } from 'react' 2 | import { useRouter } from 'nextra/hooks' 3 | 4 | export default function MyApp({ Component, pageProps }) { 5 | const { route, events } = useRouter() 6 | const hueRef = useRef(0) // Initial hue value 7 | const intervalIdRef = useRef() // Ref to store interval ID 8 | 9 | const styles = useMemo(() => ({ 10 | '/system': { hue: '204', sat: '100%' }, 11 | '/bitcoin': { hue: '34', sat: '93%' }, 12 | '/lightning': { hue: '52', sat: '98%' }, 13 | '/nostr': { hue: '281', sat: '58%' }, 14 | '/faq': { hue: '5', sat: '97%' }, 15 | }), []) 16 | 17 | useEffect(() => { 18 | const handleRouteChange = (url) => { 19 | // Clear any existing interval 20 | if (intervalIdRef.current) { 21 | clearInterval(intervalIdRef.current); 22 | intervalIdRef.current = null; 23 | } 24 | 25 | const matchingStyle = Object.entries(styles).find(([route, style]) => url.includes(route)); 26 | 27 | if (!matchingStyle) { 28 | intervalIdRef.current = setInterval(() => { 29 | hueRef.current++; 30 | if (hueRef.current > 360) { // Upper limit 31 | hueRef.current = 0; // Reset to lower limit 32 | } 33 | document.documentElement.style.setProperty( 34 | '--nextra-primary-hue', 35 | hueRef.current 36 | ); 37 | document.documentElement.style.setProperty( 38 | '--nextra-primary-saturation', 39 | '100%' 40 | ); 41 | }, 30); // Change hue every 30ms 42 | } else { 43 | const [, style] = matchingStyle; 44 | document.documentElement.style.setProperty( 45 | '--nextra-primary-hue', 46 | style.hue 47 | ); 48 | document.documentElement.style.setProperty( 49 | '--nextra-primary-saturation', 50 | style.sat 51 | ); 52 | } 53 | } 54 | 55 | // Call handleRouteChange immediately with the current URL 56 | handleRouteChange(route) 57 | 58 | // When the component is mounted, subscribe to router events 59 | events.on('routeChangeComplete', handleRouteChange) 60 | 61 | // If the component is unmounted, unsubscribe from the event 62 | return () => { 63 | events.off('routeChangeComplete', handleRouteChange) 64 | // Clear any existing interval when the component is unmounted 65 | if (intervalIdRef.current) { 66 | clearInterval(intervalIdRef.current) 67 | } 68 | } 69 | }, [events, route, styles]) 70 | 71 | return 72 | } -------------------------------------------------------------------------------- /pages/ca/docs/bitcoin/electrum_server.mdx: -------------------------------------------------------------------------------- 1 | import { Callout, Cards } from 'nextra/components' 2 | 3 | import { FaFulcrum } from "react-icons/fa" 4 | import { FaReact } from "react-icons/fa" 5 | 6 | # Servidor Electrum 7 | 8 | 9 | Això pot trigar una mica 10 | 11 | Electrum primer ha d'indexar completament la cadena de blocs i compactar la seva 12 | base de dades abans de poder connectar-hi amb els vostres dispositius de 13 | signatura. Això pot trigar fins a ~1,5 - 4 dies o més, depenent del maquinari. 14 | 15 | 16 | 17 | Assegureu-vos que heu reduït la memòria cau de la base de dades del client 18 | Bitcoin 19 | 20 | 21 | Configurarem un servidor Electrum per utilitzar-lo amb el vostre programari o 22 | dispositiu de signatura de maquinari de Bitcoin. 23 | 24 | ## Bitcoin amb dispositius de signatura 25 | 26 | La millor manera de mantenir de manera segura els vostres parells de claus de 27 | bitcoins (és a dir, la millor combinació de seguretat i usabilitat) és utilitzar 28 | un dispositiu de signatura (com [SeedSigner](https://seedsigner.com), 29 | [Passaport](https://foundationdevices.com), 30 | [BitBox](https://shiftcrypto.ch/bitbox02), [Coldcard](https://coldcard.com), 31 | [Jade](https://blockstream.com/jade/) o [Trezor](https://trezor.io)) en 32 | ombinació amb el vostre propi node Bitcoin. Això us proporciona seguretat, 33 | privadesa i elimina la necessitat de confiar en un tercer per verificar les 34 | transaccions. 35 | 36 | El client de Bitcoin al mateix Microbolt no està destinat a contenir fons. 37 | 38 | Una possibilitat d'utilitzar el client Bitcoin amb els vostres dispositius de 39 | signatura de Bitcoin és utilitzar un servidor Electrum com a programari 40 | intermediari. Importa dades del client Bitcoin i les proporciona al programari 41 | de signatura que admet el protocol Electrum. Aplicacions de signatura 42 | d'escriptori com [Sparrow](https://sparrowwallet.com), 43 | [BitBoxApp](https://shiftcrypto.ch/app), [Electrum](https://electrum.org) o 44 | [Specter Desktop](https://specter.solutions/desktop) que admet els dispositius 45 | de signatura es pot utilitzar amb el vostre propi node sobirà de Bitcoin. 46 | 47 | Trieu el vostre servidor, quan hàgiu acabat, aneu a la secció de Cartera 48 | d'escriptori 49 | 50 | 51 | } 53 | title="Fulcrum" 54 | href="electrum_server/fulcrum" 55 | /> 56 | } 58 | title="Electrs" 59 | href="electrum_server/electrs" 60 | /> 61 | 62 | 63 | 64 | No es recomana instal·lar més d'un servidor i no és compatible, no donem suport 65 | -------------------------------------------------------------------------------- /pages/en/index.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Home 3 | --- 4 | 5 | import styles from '../index.module.css' 6 | 7 |
8 | 9 |
10 | 11 |
12 |

Make your own Bitcoin
node with Microbolt

13 |

Simple, powerful, secure and flexible node implementation with 14 | everything you love from Bitcoin and more

15 | 16 | Start your journey → 17 |
18 | 19 |
20 |
21 |

A

22 |

23 |
24 |
25 |

Bitcoin

26 |
27 |
28 | 100% 32 |

ordinals free

33 |
34 |
35 |
36 | btc rpc expl logo 40 |

explorer

41 |
42 |

mempool

43 |
44 |
45 | caddy logo 50 | nginx logo 55 |
56 |
57 |

2.6x

58 |

faster

59 |

on IBD

60 |
61 |
62 | LND logo 66 |
67 |
68 | nostr logo 72 |
73 |
74 | Ansible logo 78 |

ready

79 |
80 |
81 |

awall

82 |

ufw

83 |
84 |
85 |

electrum indexer

86 |
87 |
88 |

Alpine Linux

89 |
90 |
91 | 92 |
93 |

Testimonials

94 |
95 |

I discovered your guide while looking for a better alternative to 96 | RaspiBolt. I truly appreciate the support for Alpine, which is 97 | arguably one of the best distros available, as well as Bitcoin Knots

98 |

- Anonymous Telegram user

99 |
100 |
101 | 102 |
103 | 104 |
-------------------------------------------------------------------------------- /pages/ca/index.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Inici 3 | --- 4 | 5 | import styles from '../index.module.css' 6 | 7 |
8 | 9 |
10 | 11 |
12 |

Fes el teu propi node Bitcoin
amb Microbolt

13 |

Implementació de node simple, potent, 14 | segura i flexible amb tot el que t'agrada de Bitcoin i més

15 | 16 | Comença el teu viatge → 17 |
18 | 19 |
20 |
21 |

A

22 |

23 |
24 |
25 |

Bitcoin

26 |
27 |
28 | 100% 32 |

lliure d'ordinals

33 |
34 |
35 |
36 | btc rpc expl logo 40 |

explorer

41 |
42 |

mempool

43 |
44 |
45 | caddy logo 50 | nginx logo 55 |
56 |
57 |

2.6x

58 |

més ràpid

59 |

en IBD

60 |
61 |
62 | LND logo 66 |
67 |
68 | nostr logo 72 |
73 |
74 | Ansible logo 78 |

llest

79 |
80 |
81 |

awall

82 |

ufw

83 |
84 |
85 |

indexador electrum

86 |
87 |
88 |

Alpine Linux

89 |
90 |
91 | 92 |
93 |

Testimonis

94 |
95 |

I discovered your guide while looking for a better alternative to 96 | RaspiBolt. I truly appreciate the support for Alpine, which is 97 | arguably one of the best distros available, as well as Bitcoin Knots

98 |

- Usuari Anònim de Telegram

99 |
100 |
101 | 102 |
103 | 104 |
-------------------------------------------------------------------------------- /public/assets/logos/nostr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /pages/en/docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Introduction 3 | --- 4 | 5 | # Microbolt 6 | 7 | ![](/img/microbolt-banner.webp) 8 | 9 | Build your own “do-everything-yourself” Bitcoin full node that will make you a 10 | sovereign peer in the Bitcoin and Lightning network. 11 | 12 | No need to trust anyone else. 13 | 14 | ## What is the Microbolt? 15 | 16 | Microbolt is more than a fork of [RaspiBolt](https://raspibolt.org) and 17 | [MiniBolt](https://minibolt.info), made for all kind of computers, not only 18 | Raspberry Pi's. 19 | 20 | With this guide, you can set up a Bitcoin and Lightning node from scratch, doing 21 | everything yourself. You will learn about Linux, Bitcoin, and Lightning. As a 22 | result, you'll have your very own Microbolt node, built by you and no one else. 23 | 24 | There are many reasons why you should run your own Bitcoin node. 25 | 26 | * **Keep Bitcoin decentralized.** Use your node to help enforce your Bitcoin 27 | consensus rules. 28 | * **Take back your sovereignty.** Let your node validate your own Bitcoin 29 | transactions. No need to ask someone else to tell you what's happening in the 30 | Bitcoin network. 31 | * **Improve your privacy.** Connect your wallets to your node so that you no 32 | longer need to reveal their whole financial history to external servers. 33 | * **Be part of Lightning.** Run your own Lightning node for everyday 34 | payments and help building a robust, decentralized Bitcoin Lightning network. 35 | 36 | Did we mention that it's fun, as well? 37 | 38 | ## Microbolt overview 39 | 40 | This guide explains how to set up your own Bitcoin node on a Computer. But it 41 | works on most hardware platforms because it only uses standard Alpine Linux 42 | commands. 43 | 44 | ### Features 45 | 46 | Your Bitcoin node will offer the following functionality: 47 | 48 | 🟠 **Bitcoin**: direct and trustless participation in the Bitcoin peer-to-peer 49 | network, full validation of blocks and transactions 50 | 51 | ⚛️ **Electrum server**: connect your compatible wallets (including hardware 52 | wallets) to your own node 53 | 54 | ⛓️ **Blockchain Explorer**: web-based Explorer to privately look up 55 | transactions, blocks, and more 56 | 57 | ⚡ **Lightning**: full client with stable long-term channels and web-based and 58 | mobile-based management interfaces 59 | 60 | 🪽 **Nostr**: global, decentralized, and censorship-resistant social media 61 | 62 | 🔋 **Always on**: services are constantly synced and available 24/7 63 | 64 | 🧅 **Reachable from anywhere**: connect to all your services through the Tor 65 | network 66 | 67 | ### Target audience 68 | 69 | We strive to give foolproof instructions. But the goal is also to do everything 70 | ourselves. Shortcuts that involve trusting someone else are not allowed. This 71 | makes this guide quite technical, but we try to make it as straightforward as 72 | possible. You'll gain a basic understanding of the how and why. 73 | 74 | If you like to learn about Linux, Bitcoin, and Lightning, then this guide is for 75 | you. 76 | 77 | ### Structure 78 | 79 | We aim to keep the core of this guide well maintained and up-to-date: 80 | 81 | 1. [System](./docs/system.md): prepare the hardware and set up the operating 82 | system 83 | 1. [Bitcoin](./docs/bitcoin.md): sync your own Bitcoin full node, Electrum 84 | server, and Blockchain Explorer 85 | 1. [Lightning](./docs/lightning.md): run your own Lightning client with 86 | web-based node management 87 | 1. [Nostr](./docs/nostr.md): utilize decentralized and censorship-resistant 88 | social networks 89 | 90 | ## Community 91 | 92 | This is NOT a community project. `doitwithnotepad` retain the final say in 93 | disputes or arguments within the community. 94 | 95 | Find help and other Microbolt users on the following platforms: 96 | 97 | * [Github Issues](https://github.com/microbolt-guide/microbolt/issues) 98 | * Telegram group: [t.me/microbolt_official](https://t.me/microbolt_official) 99 | 100 | And feel free to join the many other contributors if you see something that can 101 | be improved! -------------------------------------------------------------------------------- /pages/ca/docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Introducció 3 | --- 4 | 5 | # Microbolt 6 | 7 | ![](/img/microbolt-banner.webp) 8 | 9 | Construeix el teu propi node complet de Bitcoin "fes-ho tot tu mateix" que et 10 | convertirà en un parell sobirà a la xarxa de Bitcoin i Lightning. 11 | 12 | No cal confiar en ningú més. 13 | 14 | ## Què és el Microbolt? 15 | 16 | Microbolt és més que una bifurcació de [RaspiBolt](https://raspibolt.org) i 17 | [MiniBolt](https://minibolt.info), feta per a tota mena d'ordinadors, no només 18 | Raspberry Pi's. 19 | 20 | Amb aquesta guia, pots configurar un node de Bitcoin i Lightning des de zero, 21 | fent-ho tot tu mateix. Aprendràs sobre Linux, Bitcoin i Lightning. Com a 22 | resultat, tindreu el vostre propi node Microbolt, construït per tu i per ningú 23 | més. 24 | 25 | Hi ha moltes raons per les quals hauries d'executar el teu propi node de 26 | Bitcoin. 27 | 28 | * **Mantingueu Bitcoin descentralitzat.** Utilitzeu el vostre node per ajudar a 29 | fer complir les vostres regles de consens de Bitcoin. 30 | * **Recupera la teva sobirania.** Deixa que el teu node validi les teves pròpies 31 | transaccions de Bitcoin. No cal demanar a algú més que us expliqui què està 32 | passant a la xarxa Bitcoin. 33 | * **Millora la teva privadesa.** Connecta les teves carteres al teu node perquè 34 | ja no hagis de revelar tot el seu historial financer a servidors externs. 35 | * **Forma part de Lightning.** Executeu el vostre propi node Lightning per als 36 | pagaments diaris i ajudeu a crear una xarxa Bitcoin Lightning robusta i 37 | descentralitzada. 38 | 39 | Hem esmentat que també és divertit? 40 | 41 | ## Visió general de Microbolt 42 | 43 | Aquesta guia explica com configurar el vostre propi node Bitcoin en un 44 | ordinador. Però funciona a la majoria de plataformes de maquinari perquè només 45 | utilitza ordres estàndard de Alpine Linux. 46 | 47 | ### Característiques 48 | 49 | El vostre node Bitcoin oferirà la següent funcionalitat: 50 | 51 | 🟠 **Bitcoin**: participació directa i sense confiança a la xarxa peer-to-peer 52 | de Bitcoin, validació completa de blocs i transaccions 53 | 54 | ⚛️ **Servidor Electrum**: connecteu les vostres carteres compatibles (incloses 55 | les carteres de maquinari) al vostre propi node 56 | 57 | ⛓️ **Explorador de cadena de blocs**: explorador web per cercar de manera 58 | privada transaccions, blocs i molt més 59 | 60 | ⚡ **Lightning**: client complet amb canals estables a llarg termini i 61 | interfícies de gestió web i mòbil 62 | 63 | 🪽 **Nostr**: xarxes socials globals, descentralitzades i resistents a la 64 | censura 65 | 66 | 🔋 **Sempre actiu**: els serveis es sincronitzen constantment i estan 67 | disponibles les 24 hores del dia 68 | 69 | 🧅 **Arribable des de qualsevol lloc**: connecteu-vos a tots els vostres serveis 70 | a través de la xarxa Tor 71 | 72 | ### Públic objectiu 73 | 74 | Ens esforcem per donar instruccions infal·libles. Però l'objectiu també és 75 | fer-ho tot nosaltres mateixos. No es permeten les dreceres que impliquin confiar 76 | en una altra persona. Això fa que aquesta guia sigui força tècnica, però 77 | intentem que sigui el més senzill possible. Aconseguiràs una comprensió bàsica 78 | del com i el perquè. 79 | 80 | Si voleu aprendre sobre Linux, Bitcoin i Lightning, aquesta guia és per tu. 81 | 82 | ### Estructura 83 | 84 | El nostre objectiu és mantenir el nucli d'aquesta guia ben mantingut i 85 | actualitzat: 86 | 87 | 1. [Sistema](./docs/system.md): prepareu el maquinari i configureu el sistema 88 | operatiu 89 | 1. [Bitcoin](./docs/bitcoin.md): sincronitza el vostre propi node complet de 90 | Bitcoin, el servidor Electrum i l'explorador de cadena de blocs 91 | 1. [Lightning](./docs/lightning.md): executeu el vostre propi client Lightning 92 | amb la gestió de nodes web 93 | 1. [Nostr](./docs/nostr.md): utilitzeu xarxes socials descentralitzades i 94 | resistents a la censura 95 | 96 | ## Comunitat 97 | 98 | Aquest NO és un projecte comunitari. `doitwithnotepad` te l'última paraula en 99 | disputes o discussions dins de la comunitat. 100 | 101 | Trobeu ajuda i altres usuaris de Microbolt a les plataformes següents: 102 | 103 | * [Problemes de Github](https://github.com/microbolt-guide/microbolt/issues) 104 | * Grup de Telegram: [t.me/microbolt_official](https://t.me/microbolt_official) 105 | 106 | I no dubteu a unir-vos a altres col·laboradors si veieu alguna cosa que es pot 107 | millorar! -------------------------------------------------------------------------------- /pages/en/docs/system/system_config.mdx: -------------------------------------------------------------------------------- 1 | import { Callout, Steps, Tabs } from 'nextra/components' 2 | 3 | # System configuration 4 | 5 | You are now on the command line of your own Bitcoin node. Let's start with the 6 | configuration. 7 | 8 | ## Defaults 9 | 10 | This guide have no defaults in mind, you can choose whathever tools you want 11 | 12 | 13 | However, from Microbolt we recommend `EDITOR=vim` and `SU=doas` 14 | 15 | 16 | 17 | ### Define which **text editor**, **root privileges tool** and **compile flags** defaults you want 18 | 19 | ```sh 20 | vi /etc/profile.d/defaults.sh 21 | ``` 22 | 23 | ```sh copy filename="/etc/profile.d/defaults.sh" 24 | # Text editor 25 | export EDITOR=vim # or notepad,vi,neovim,emacs,nano,micro... 26 | # Root privileges tool 27 | export SU=doas # or sudo... 28 | # Compile flags 29 | export CC="clang" 30 | export CXX="${CC}++" 31 | export CFLAGS="-O3 -pipe -march=native -fPIE" 32 | export CXXFLAGS="$CFLAGS" 33 | export LDFLAGS="-pie -Wl,--as-needed" 34 | export MAKEFLAGS="-j$(nproc)" 35 | # Environment variables 36 | export CARGO_HOME="./.cargo" 37 | export npm_config_cache="./npm-cache" 38 | export npm_config_devdir="./.gyp" 39 | export ROCKSDB_INCLUDE_DIR=/usr/include 40 | export ROCKSDB_LIB_DIR=/usr/lib 41 | export PROTOC=protoc-c 42 | ``` 43 | 44 | ### Source the changes 45 | 46 | ```sh copy 47 | . /etc/profile.d/defaults.sh 48 | ``` 49 | 50 | ### Install 51 | 52 | 53 | Your choice may need additional steps, it's your responsibility 54 | 55 | 56 | ```sh copy 57 | apk add $EDITOR $SU 58 | ``` 59 | 60 | ### Install other necessary tools 61 | 62 | ```sh copy 63 | apk add logrotate 64 | ``` 65 | 66 | 67 | ## Add the admin user 68 | 69 | We will use the primary user `satoshi` instead of `root` to make this guide more 70 | universal. 71 | 72 | 73 | ### Create a new user called `satoshi` with your `password [A]` 74 | 75 | ```sh copy 76 | adduser satoshi 77 | ``` 78 | 79 | ### Make this new user a superuser by adding it to the `wheel` user group 80 | 81 | ```sh copy 82 | adduser satoshi wheel 83 | ``` 84 | 85 | ### Allow members of the **wheel** group to use root privileges with `$SU` 86 | 87 | 88 | 89 | ```sh copy 90 | sed 's/# permit persist :wheel/permit persist keepenv :wheel/' /etc/doas.conf > _ 91 | mv -f _ /etc/doas.conf 92 | ``` 93 | 94 | 95 | ```sh copy 96 | printf "%s\n" \ 97 | "%wheel ALL=(ALL) ALL" \ 98 | "Defaults env_keep += \"*\"" \ 99 | > /etc/sudoers.d/wheel 100 | ``` 101 | 102 | 103 | 104 | ### Log out 105 | 106 | ```sh copy 107 | exit 108 | ``` 109 | 110 | ### Log in with `satoshi` admin user 111 | 112 | ```sh copy 113 | ssh satoshi@nakamoto01 114 | ``` 115 | 116 | 117 | ## System update 118 | 119 | 120 | Do this regularly every few weeks/months for security-related updates. 121 | 122 | 123 | 124 | ### Update the operating system and all installed software packages 125 | 126 | ```sh copy 127 | $SU apk update 128 | ``` 129 | 130 | ### Upgrade the Alpine Package Manager itself 131 | 132 | ```sh copy 133 | $SU apk add --upgrade apk-tools 134 | ``` 135 | 136 | ### Upgrade all installed packages 137 | 138 | ```sh copy 139 | $SU apk upgrade --available 140 | ``` 141 | 142 | 143 | 144 | All services that have been upgraded need to be restarted, to begin using the 145 | upgraded version 146 | 147 | ```sh copy 148 | $SU rc-service restart 149 | ``` 150 | 151 | If the kernel is upgraded, it's required to reboot to begin using the upgraded 152 | version 153 | 154 | ```sh copy 155 | sync && reboot 156 | ``` 157 | 158 | 159 | ## Check drive performance 160 | 161 | Performant unit storage is essential for your node. 162 | 163 | Let's check if your drive works well as-is. 164 | 165 | * Your disk should be detected as `/dev/`. Check if this is the case by 166 | listing the names of connected block devices 167 | 168 | ```sh copy 169 | blkid 170 | ``` 171 | 172 | * Install the software to measure the performance of your \ 173 | ```sh copy 174 | $SU apk add hdparm 175 | ``` 176 | 177 | * Measure the speed of your drive 178 | ```sh copy 179 | $SU hdparm -t --direct /dev/ 180 | ``` 181 | 182 | ```output filename="output" 183 | /dev/sda: 184 | Timing O_DIRECT disk reads: 690 MB in 3.00 seconds = 229.82 MB/sec 185 | ``` 186 | 187 | 188 | If the measured speeds are more than 150 MB/sec, you're good 189 | -------------------------------------------------------------------------------- /pages/ca/docs/system/system_config.mdx: -------------------------------------------------------------------------------- 1 | import { Callout, Steps, Tabs } from 'nextra/components' 2 | 3 | # Configuració del sistema 4 | 5 | Ara esteu a la línia d'ordres del vostre propi node Bitcoin. Comencem amb la 6 | configuració. 7 | 8 | ## Valors per defecte 9 | 10 | Aquesta guia no té cap valor predeterminat en ment, podeu triar les eines que 11 | vulgueu 12 | 13 | 14 | Tot i aixi, desde Microbolt recomanem `EDITOR=vim` i `SU=doas` 15 | 16 | 17 | 18 | ### Definiu quin **editor de text**, **eina d'escalada de privilegis** i **indicadors del compilador** que voleu 19 | 20 | ```sh 21 | vi /etc/profile.d/defaults.sh 22 | ``` 23 | 24 | ```sh copy filename="/etc/profile.d/defaults.sh" 25 | # Text editor 26 | export EDITOR=vim # or notepad,vi,neovim,emacs,nano,micro... 27 | # Root privileges tool 28 | export SU=doas # or sudo... 29 | # Compile flags 30 | export CC="clang" 31 | export CXX="${CC}++" 32 | export CFLAGS="-O3 -pipe -march=native -fPIE" 33 | export CXXFLAGS="$CFLAGS" 34 | export LDFLAGS="-pie -Wl,--as-needed" 35 | export MAKEFLAGS="-j$(nproc)" 36 | # Environment variables 37 | export CARGO_HOME="./.cargo" 38 | export npm_config_cache="./npm-cache" 39 | export npm_config_devdir="./.gyp" 40 | export ROCKSDB_INCLUDE_DIR=/usr/include 41 | export ROCKSDB_LIB_DIR=/usr/lib 42 | export PROTOC=protoc-c 43 | ``` 44 | 45 | ### Aplica els canvis 46 | 47 | ```sh copy 48 | . /etc/profile.d/defaults.sh 49 | ``` 50 | 51 | ### Instal·leu 52 | 53 | 54 | La vostra elecció pot necessitar passos addicionals, és la vostra 55 | responsabilitat 56 | 57 | 58 | ```sh copy 59 | apk add $EDITOR $SU 60 | ``` 61 | 62 | ### Instal·leu altres eines necessaries 63 | 64 | ```sh copy 65 | apk add logrotate 66 | ``` 67 | 68 | 69 | ## Afegeix l'usuari administrador 70 | 71 | Utilitzarem l'usuari principal `satoshi` en comptes de `root` per fer que 72 | aquesta guia sigui més universal. 73 | 74 | 75 | ### Creeu un usuari nou anomenat `satoshi` amb la vostra `contrasenya [A]` 76 | 77 | ```sh copy 78 | adduser satoshi 79 | ``` 80 | 81 | ### Fes d'aquest nou usuari un superusuari afegint-lo al grup d'usuaris `wheel` 82 | 83 | ```sh copy 84 | adduser satoshi wheel 85 | ``` 86 | 87 | ### Permet als membres del grup **wheel** utilitzar privilegis de root amb `$SU` 88 | 89 | 90 | 91 | ```sh copy 92 | sed 's/# permit persist :wheel/permit persist keepenv :wheel/' /etc/doas.conf > _ 93 | mv -f _ /etc/doas.conf 94 | ``` 95 | 96 | 97 | ```sh copy 98 | printf "%s\n" \ 99 | "%wheel ALL=(ALL) ALL" \ 100 | "Defaults env_keep += \"*\"" \ 101 | > /etc/sudoers.d/wheel 102 | ``` 103 | 104 | 105 | 106 | ### Tancar sessió 107 | 108 | ```sh copy 109 | exit 110 | ``` 111 | 112 | ### Inicieu sessió amb l'usuari administrador `satoshi` 113 | 114 | ```sh copy 115 | ssh satoshi@nakamoto01 116 | ``` 117 | 118 | 119 | ## Actualització del sistema 120 | 121 | 122 | Feu-ho regularment cada poques setmanes/mesos per obtenir actualitzacions 123 | relacionades amb la seguretat. 124 | 125 | 126 | 127 | ### Actualitzeu el sistema operatiu i tots els paquets de programari instal·lats 128 | 129 | ```sh copy 130 | $SU apk update 131 | ``` 132 | 133 | ### Actualitzeu el Alpine Package Manager 134 | 135 | ```sh copy 136 | $SU apk add --upgrade apk-tools 137 | ``` 138 | 139 | ### Actualitza tots els paquets instal·lats 140 | 141 | ```sh copy 142 | $SU apk upgrade --available 143 | ``` 144 | 145 | 146 | 147 | Tots els serveis que s'han actualitzat s'han de reiniciar per començar a 148 | utilitzar la versió actualitzada 149 | 150 | ```sh copy 151 | $SU rc-service restart 152 | ``` 153 | 154 | Si s'actualitza el nucli, cal que es reiniciï per començar a utilitzar la versió 155 | actualitzada 156 | 157 | ```sh copy 158 | sync && reboot 159 | ``` 160 | 161 | 162 | ## Comproveu el rendiment de la unitat de disc 163 | 164 | És essencial per al node un emmagatzematge amb un cert rendiment. 165 | 166 | Comprovem si la vostra unitat funciona bé tal com està. 167 | 168 | * El vostre disc s'hauria de detectar com a `/dev/`. Comproveu si aquest 169 | és el cas enumerant els noms dels dispositius de bloc connectats 170 | 171 | ```sh copy 172 | blkid 173 | ``` 174 | 175 | * Instal·leu el programari per mesurar el rendiment del vostre \ 176 | 177 | ```sh copy 178 | $SU apk add hdparm 179 | ``` 180 | 181 | * Mesureu la velocitat de la vostra unitat 182 | 183 | ```sh copy 184 | $SU hdparm -t --direct /dev/ 185 | ``` 186 | 187 | ```output filename="output" 188 | /dev/sda: 189 | Timing O_DIRECT disk reads: 690 MB in 3.00 seconds = 229.82 MB/sec 190 | ``` 191 | 192 | 193 | Si les velocitats mesurades són superiors a 150 MB/s, està bé 194 | -------------------------------------------------------------------------------- /pages/en/docs/system/preparations.mdx: -------------------------------------------------------------------------------- 1 | import { Callout, Tabs } from 'nextra/components' 2 | 3 | # Preparations 4 | 5 | Let's get all the necessary hardware parts and prepare some passwords. 6 | 7 | ## Computer 8 | 9 | This guide builds on the readily available personal computer. 10 | 11 | While a personal computer is the best choice for most, this guide also works 12 | with other computing platforms, cloud servers, or virtual machines that run 13 | Alpine Linux. It only uses standard Linux instructions. 14 | 15 | ### Hardware requirements 16 | 17 | You need the following: 18 | * CPU: >2010 gen processor 19 | * RAM: >2GB (Bitcoin client only), >4GB (everything else) 20 | * Internal storage: >=2TB HDD, an SSD is recommended 21 | * USB/SD drive: >=1GB 22 | * Temporary monitor screen 23 | * Temporary keyboard USB/PS2 24 | 25 | You might also want to get this optional hardware: 26 | * UPS (uninterruptible power supply) 27 | 28 | ## Write down your passwords 29 | 30 | You will need several passwords, and it's easiest to write them all down in the 31 | beginning, instead of bumping into them throughout the guide. They should be 32 | unique and very secure, at least 12 characters in length. Do **not use uncommon 33 | special characters**, spaces, or quotes (‘ or “). 34 | 35 | ``` 36 | [ A ] Master user password 37 | [ B ] Bitcoin RPC password 38 | [ C ] LND wallet password 39 | [ D ] BTC-RPC-Explorer password (optional) 40 | [ E ] ThunderHub password 41 | ``` 42 | 43 | ![](/img/system/xkcd.webp) 44 | 45 | If you need inspiration for creating your passwords: the 46 | [xkcd: Password Strength](https://xkcd.com/936/) comic is funny and contains a 47 | lot of truth. Store a copy of your passwords somewhere safe (preferably in an 48 | open-source password manager like [KeePassXC](https://keepassxc.org/)), or 49 | whatever password manager you're already using, and keep your original notes out 50 | of sight once your system is up and running. 51 | 52 | ## The command line 53 | 54 | We will work on the command line of the PC, which may be new to you. Find some 55 | basic information below. It will help you navigate and interact with your PC. 56 | 57 | You enter commands and the PC answers by printing the results below your 58 | command. 59 | 60 | To clarify where a command begins, every command in this guide are contained in 61 | a highlight box: 62 | 63 | ```sh 64 | example command # don't use me on real terminal 65 | ``` 66 | 67 | The system response is marked with the `output` title on the box: 68 | 69 | ```sh filename="output" 70 | example output # i'm the result of the `example command` 71 | ``` 72 | 73 | Some boxes have the path to the file we need to edit, with the `desired changes` 74 | also highlighted: 75 | 76 | ```nginx filename="/path/to/config/file" {2} 77 | # Comment 78 | config_variable="desired changes" 79 | ``` 80 | 81 | * **Auto-complete commands**: You can use the `` key for auto-completion 82 | when you enter commands, i.e., for commands, directories, or filenames. 83 | * **Command history**: by pressing ⬆️ (arrow up) and ⬇️ (arrow down) on your 84 | keyboard, you can recall previously entered commands. 85 | * **Use admin privileges**: Our regular user has no direct admin privileges. If 86 | a command needs to edit the system configuration, we must use the desired 87 | **root privileged tool** command as a prefix. Instead of editing a system file 88 | with, `$EDITOR /path/to/config/file`, we use `$SU $EDITOR /path/to/config/file`. 89 | 90 | 91 | For security reasons, service users like `bitcoin` cannot use the `$SU` command 92 | and are not able to login. 93 | 94 | 95 | * **Copy / Paste**: Copy usually works with `` or ``. 96 | Paste usually works with `` or ``. 97 | 98 | * **Using your favorite text editor**: We do not assume the text editor you want 99 | to use. Here are examples of how to use a couple of popular text editors: 100 | 101 | 102 | 103 | If you use the `vi` editor (installed by default) to create new text files or 104 | edit existing ones, you might know that it's not complicated, but saving and 105 | exiting are not intuitive. 106 | 107 | **Insert**: hit ``, write/delete/edit/paste text, and hit the `` key 108 | when you're done editing 109 | 110 | **Save**: hit `<:>`, and hit the `` key 111 | 112 | **Exit**: hit `<:>`, and hit the `` key 113 | 114 | 115 | If you use the `nano` editor (needs to be installed manually) to create new text 116 | files or edit existing ones, you might know that it's not complicated, but 117 | saving and exiting are not intuitive. 118 | 119 | **Save**: hit ``, confirm the filename, and hit the `` key 120 | 121 | **Exit**: hit `` 122 | 123 | 124 | 125 | ## Secure your home network and devices 126 | 127 | While the guide will show you how to secure your node, you will interact with it 128 | from your computer and mobile phone and use your home internet network. Before 129 | building your Microbolt, it is recommended to secure your home network and 130 | devices. Follow Parts 1 and 2 of this ["How to Secure Your Home Network Against 131 | Threats"](https://restoreprivacy.com/secure-home-network/) tutorial by Heinrich 132 | Long, and try to implement as many points as possible (some might not apply to 133 | your router/device). -------------------------------------------------------------------------------- /pages/ca/docs/system/preparations.mdx: -------------------------------------------------------------------------------- 1 | import { Callout, Tabs } from 'nextra/components' 2 | 3 | # Preparacions 4 | 5 | Aconseguim totes les peces de maquinari necessàries i preparem algunes 6 | contrasenyes. 7 | 8 | ## Ordinador 9 | 10 | Aquesta guia es basa en ordinadors personals, ja que son fàcilment disponibles. 11 | 12 | Tot i que un ordinador personal és la millor opció per a la majoria, aquesta 13 | guia també funciona amb altres plataformes informàtiques, servidors en núvol o 14 | màquines virtuals que executen Alpine Linux. Només utilitza instruccions 15 | estàndard de Linux. 16 | 17 | ### Requisits de maquinari 18 | 19 | Necessites el següent: 20 | * CPU: processador > 2010 gen 21 | * RAM: > 2 GB (només client Bitcoin), > 4 GB (tota la resta) 22 | * Emmagatzematge intern: >=2TB HDD, es recomana un SSD 23 | * Unitat USB/SD: >=1 GB 24 | * Pantalla de monitor temporal 25 | * Teclat temporal USB/PS2 26 | 27 | És possible que també vulgueu obtenir aquest maquinari opcional: 28 | * SAI (font d'alimentació ininterrompuda) 29 | 30 | ## Anoteu les vostres contrasenyes 31 | 32 | Necessitareu diverses contrasenyes, i és més fàcil escriure-les totes al 33 | principi, en lloc de trobar-les al llarg de la guia. Han de ser úniques i molt 34 | segures, almenys 12 caràcters. **No utilitzeu caràcters especials**, espais o 35 | cometes poc habituals (‘ o “). 36 | 37 | ``` 38 | [ A ] Contrasenya mestre d'usuari 39 | [ B ] Contrasenya de Bitcoin RPC 40 | [ C ] Contrasenya de cartera LND 41 | [ D ] Contrasenya de BTC-RPC-Explorer (opcional) 42 | [ E ] Contrasenya de ThunderHub 43 | ``` 44 | 45 | ![](/img/system/xkcd.webp) 46 | 47 | Si necessiteu inspiració per crear les vostres contrasenyes: el còmic 48 | [xkcd: Password Strength](https://xkcd.com/936/) és divertit i conté molta 49 | veritat. Emmagatzemeu una còpia de les vostres contrasenyes en un lloc segur 50 | (preferiblement en un gestor de contrasenyes de codi obert com 51 | [KeePassXC](https://keepassxc.org/)), o qualsevol gestor de contrasenyes que ja 52 | estigueu utilitzant, i manteniu les vostres notes originals fora de vista una 53 | vegada que el vostre sistema estigui en funcionament. 54 | 55 | ## La línia d'ordres 56 | 57 | Treballarem en la línia de comandament del PC, que pot ser nova per a tu. 58 | Trobareu informació bàsica a continuació. T'ajudarà a navegar i interactuar amb 59 | el teu PC. 60 | 61 | Introduïu ordres i el PC respon imprimint els resultats sota la vostra ordre. 62 | 63 | Per a aclarir on comença una ordre, totes les ordres d'aquesta guia es troben en 64 | un quadre ressaltat: 65 | 66 | ```sh 67 | ordre exemple # no em facis servir en el terminal real 68 | ``` 69 | 70 | La resposta del sistema està marcada amb el títol `output` al quadre: 71 | 72 | ```sh filename="output" 73 | sortida exemple # sóc el resultat de "ordre exemple". 74 | ``` 75 | 76 | Alguns quadres tenen el camí al fitxer que necessitem editar, amb els 77 | `canvis desitjats` també ressaltats: 78 | 79 | ```nginx filename="/path/to/config/file" {2} 80 | # Comentari 81 | config_variable="canvis desitjats" 82 | ``` 83 | 84 | * **Compleció automàtica d'ordres**: Podeu utilitzar la tecla `` per a la 85 | compleció automàtica quan introduïu ordres, és a dir, per a ordres, directoris o 86 | noms de fitxer. 87 | * **Historial d'ordres**: en prémer ⬆️ (fletxa amunt) i ⬇️ (fletxa avall) al 88 | teclat, podreu trobar les ordres introduïdes prèviament. 89 | * **Utilitza privilegis d'administrador**: El nostre usuari normal no té 90 | privilegis d'administrador directes. Si una ordre necessita editar la 91 | configuració del sistema, hem d'utilitzar l'ordre desitjada 92 | **eina privilegiada de root** com a prefix. En lloc d'editar un fitxer de 93 | sistema amb, `$EDITOR /path/to/config/file`, utilitzem 94 | `$SU $EDITOR /path/to/config/file`. 95 | 96 | 97 | Per raons de seguretat, els usuaris de servei com `bitcoin` no poden utilitzar 98 | l'ordre `$SU` i no poden iniciar sessió. 99 | 100 | 101 | * **Copiar / Enganxar**: Copiar normalment funciona amb `` o 102 | ``. Enganxar normalment funciona amb `` o 103 | ``. 104 | 105 | * **Ús del vostre editor de text preferit**: No assumim l'editor de text que 106 | voleu utilitzar. A continuació us expliquem com utilitzar un parell d'editors de 107 | text populars: 108 | 109 | 110 | 111 | Si utilitzeu l'editor `vi` (instal·lat per defecte) per a crear fitxers de text 112 | nous o editar-ne d'existents, heu de saber que no és complicat, però desar i 113 | sortir no són intuïtius. 114 | 115 | **Insertar**: premeu ``, escriviu/suprimiu/editeu/enganxeu text, i premeu 116 | la tecla `` quan hàgiu acabat d'editar 117 | 118 | **Desar**: premeu `<:>`, i premeu la tecla `` 119 | 120 | **Sortir**: premeu `<:>`, i premeu la tecla `` 121 | 122 | 123 | Si utilitzeu l'editor `nano` (cal instal·lar-lo manualment) per a crear fitxers 124 | de text nous o editar-ne d'existents, heu de saber que no és complicat, però 125 | desar i sortir no són intuïtius. 126 | 127 | **Desar**: premeu ``, confirmeu el nom del fitxer, i premeu la tecla 128 | `` 129 | 130 | **Sortir**: premeu `` 131 | 132 | 133 | 134 | ## Assegureu la vostra xarxa domèstica i els vostres dispositius 135 | 136 | Tot i que la guia us mostrarà com protegir el vostre node, interactuareu amb ell 137 | des del vostre ordinador i telèfon mòbil i utilitzareu la vostra xarxa 138 | d'internet domèstica. Abans de construir el vostre Microbolt, es recomana 139 | protegir la vostra xarxa domèstica i els vostres dispositius. Seguiu les parts 1 140 | i 2 d'aquest tutorial ["How to Secure Your Home Network Against 141 | Threats"](https://restoreprivacy.com/secure-home-network/) de Heinrich Long i 142 | intenteu implementar tants punts com sigui possible (alguns poden no aplicar-se 143 | al vostre router/dispositiu). -------------------------------------------------------------------------------- /public/assets/logos/electrs.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 12 | 13 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /pages/en/docs/nostr/nostr_relay.mdx: -------------------------------------------------------------------------------- 1 | import { Steps } from 'nextra/components' 2 | 3 | # Nostr Relay 4 | 5 | A [nostr relay written in Rust](https://sr.ht/~gheartsfield/nostr-rs-relay) with 6 | support for the entire relay protocol and data persistence using SQLite. 7 | 8 | ![Nostr Relay](/img/nostr/nostr-relay.webp) 9 | 10 | ## Preparations 11 | 12 | 13 | ### Install dependencies 14 | 15 | These are build dependencies (safe to remove after installation, if you want) 16 | 17 | ```sh copy 18 | $SU apk add --virtual .build-deps cargo cargo-auditable clang-dev cmake git \ 19 | make pkgconf protobuf-c-compiler sqlite-dev 20 | ``` 21 | 22 | These are runtime dependencies 23 | 24 | ```sh copy 25 | $SU apk add sqlite 26 | ``` 27 | 28 | ### Create the `nostr` user/group 29 | 30 | ```sh copy 31 | $SU addgroup -S nostr 32 | ``` 33 | 34 | ```sh copy 35 | $SU adduser \ 36 | -S \ 37 | -D \ 38 | -H \ 39 | -h /dev/null \ 40 | -s /sbin/nologin \ 41 | -G nostr \ 42 | -g nostr \ 43 | nostr 44 | ``` 45 | 46 | ### Add the user `satoshi` to the group `nostr` as well 47 | 48 | ```sh copy 49 | $SU adduser satoshi nostr && exec su -l satoshi 50 | ``` 51 | 52 | 53 | ## Installation 54 | 55 | 56 | ### Clone the source code 57 | 58 | We get the latest release of the nostr-rs-relay source code, compile it to an 59 | executable binary and install it. 60 | 61 | * Download the source code for the latest nostr-rs-relay release. You can check 62 | the [release page](https://git.sr.ht/~gheartsfield/nostr-rs-relay/refs) to see 63 | if a newer release is available. Other releases might not have been properly 64 | tested with the rest of the Microbolt configuration, though. 65 | 66 | ```sh copy 67 | cd /tmp 68 | ``` 69 | 70 | ```sh copy 71 | VERSION=0.9.0 72 | ``` 73 | 74 | ```sh copy 75 | git clone --branch $VERSION https://git.sr.ht/~gheartsfield/nostr-rs-relay && cd nostr-rs-relay 76 | ``` 77 | 78 | ### Configure, compile and install 79 | 80 | * Now compile the source code into an executable binary and install it. 81 | 82 | ```sh copy 83 | cargo auditable build \ 84 | --bin nostr-rs-relay \ 85 | --release \ 86 | --locked \ 87 | --jobs "$(nproc)" 88 | ``` 89 | 90 | ```sh copy 91 | $SU install -m 0755 -o root -g root -t /usr/bin ./target/release/nostr-rs-relay 92 | ``` 93 | 94 | ```sh copy 95 | $SU install -D -m 0660 -o nostr -g nostr ./config.toml /etc/nostr-rs-relay/config.toml 96 | ``` 97 | 98 | ### Strip installed binaries 99 | 100 | ```sh copy 101 | $SU strip /usr/bin/nostr-rs-relay 102 | ``` 103 | 104 | ### Cleanup 105 | 106 | ```sh copy 107 | cd 108 | rm -rf /tmp/nostr-rs-relay 109 | $SU apk del .build-deps 110 | ``` 111 | 112 | 113 | ## Configuration 114 | 115 | * Modify the config file with the following content 116 | 117 | ```sh copy 118 | $SU $EDITOR /etc/nostr-rs-relay/config.toml 119 | ``` 120 | 121 | ```toml filename="/etc/nostr-rs-relay/config.toml" {2,4,6,8,10} 122 | [...] 123 | #relay_url = "wss://nostr.example.com/" 124 | [...] 125 | name = "Microbolt Nostr Relay" 126 | [...] 127 | description = "A Nostr Relay running on Microbolt" 128 | [...] 129 | address = "127.0.0.1" 130 | [...] 131 | port = 8880 132 | [...] 133 | ``` 134 | 135 | ### Autostart on boot 136 | 137 | Nostr Relay needs to start automatically on system boot. 138 | 139 | * Create the nostr-rs-relay init.d unit and copy/paste the following configuration 140 | 141 | ```sh copy 142 | $SU $EDITOR /etc/init.d/nostr-rs-relay 143 | ``` 144 | 145 | ```sh copy filename="/etc/init.d/nostr-rs-relay" 146 | #!/sbin/openrc-run 147 | 148 | : ${NOSTR_RELAY_CONFIGFILE:=/etc/nostr-rs-relay/config.toml} 149 | : ${NOSTR_RELAY_DATADIR:=/var/lib/nostr-rs-relay} 150 | : ${NOSTR_RELAY_LOGDIR:=/var/log/nostr-rs-relay} 151 | : ${NOSTR_RELAY_USER:=nostr} 152 | : ${NOSTR_RELAY_GROUP:=nostr} 153 | : ${NOSTR_RELAY_BIN:=/usr/bin/nostr-rs-relay} 154 | : ${NOSTR_RELAY_RUST_LOG:=info,nostr_rs_relay=info} 155 | : ${NOSTR_RELAY_OPTS=${NOSTR_RELAY_OPTS}} 156 | : ${NOSTR_RELAY_SIGTERM_TIMEOUT:=600} 157 | 158 | NOSTR_RELAY_PIDDIR="/run/nostr-rs-relay" 159 | 160 | required_files="${NOSTR_RELAY_CONFIGFILE}" 161 | pidfile="${NOSTR_RELAY_PIDDIR}/${SVCNAME}.pid" 162 | retry="${NOSTR_RELAY_SIGTERM_TIMEOUT}" 163 | 164 | name="Nostr Relay" 165 | description="A Rust implementation of Nostr relay" 166 | 167 | command="${NOSTR_RELAY_BIN}" 168 | command_args="--db ${NOSTR_RELAY_DATADIR} 169 | --config ${NOSTR_RELAY_CONFIGFILE} 170 | ${NOSTR_RELAY_OPTS}" 171 | command_user="${NOSTR_RELAY_USER}:${NOSTR_RELAY_GROUP}" 172 | command_background="true" 173 | 174 | start_stop_daemon_args="--env RUST_LOG=${NOSTR_RELAY_RUST_LOG} 175 | --stdout ${NOSTR_RELAY_LOGDIR}/debug.log 176 | --stderr ${NOSTR_RELAY_LOGDIR}/debug.log" 177 | 178 | depend() { 179 | need net 180 | after logger firewall 181 | } 182 | 183 | start_pre() { 184 | checkpath --file --mode 0660 --owner "${command_user}" "${NOSTR_RELAY_CONFIGFILE}" 185 | checkpath --directory --mode 0750 --owner "${command_user}" "${NOSTR_RELAY_DATADIR}" 186 | checkpath --directory --mode 0755 --owner "${command_user}" "${NOSTR_RELAY_LOGDIR}" 187 | checkpath --directory --mode 0755 --owner "${command_user}" "${NOSTR_RELAY_PIDDIR}" 188 | } 189 | 190 | stop() { 191 | ebegin "Stopping ${SVCNAME}" 192 | pkill -TERM -P "$(cat ${pidfile})" > /dev/null 2>&1 193 | start-stop-daemon \ 194 | --stop \ 195 | --pidfile="${pidfile}" \ 196 | --retry="${NOSTR_RELAY_SIGTERM_TIMEOUT}" \ 197 | --exec="${NOSTR_RELAY_BIN}" 198 | eend $? 199 | } 200 | ``` 201 | 202 | * Enable execution permission 203 | 204 | ```sh copy 205 | $SU chmod +x /etc/init.d/nostr-rs-relay 206 | ``` 207 | 208 | ### Enable logrotate 209 | 210 | * Enter the complete next configuration. Save and exit 211 | 212 | ```sh copy filename="/etc/logrotate.d/nostr-rs-relay" 213 | /var/log/nostr-rs-relay/*.log { 214 | weekly 215 | missingok 216 | rotate 104 217 | compress 218 | delaycompress 219 | notifempty 220 | create 0640 nostr nostr 221 | sharedscripts 222 | postrotate 223 | kill -HUP `cat /run/nostr-rs-relay/nostr-rs-relay.pid` 224 | endscript 225 | } 226 | ``` 227 | 228 | * Test 229 | 230 | ```sh copy 231 | $SU logrotate /etc/logrotate.d/nostr-rs-relay --debug 232 | ``` 233 | 234 | ## Enable and start Nostr relay 235 | 236 | ```sh copy 237 | $SU rc-update add nostr-rs-relay 238 | ``` 239 | 240 | ```sh copy 241 | $SU rc-service nostr-rs-relay start 242 | ``` 243 | 244 | * Check the log to see Nostr relay output. Exit with Ctrl-C 245 | 246 | ```sh copy 247 | tail -f /var/log/nostr-rs-relay/debug.log 248 | ``` 249 | 250 | * Ensure the service is working and listening at the default `8880` port 251 | 252 | ```sh copy 253 | $SU netstat -lntup | grep LISTEN | grep nostr 254 | ``` 255 | 256 | ```output filename="output" 257 | tcp 0 0 0.0.0.0:8880 0.0.0.0:* LISTEN 7030/nostr-rs-relay 258 | ``` 259 | 260 | ## For the future: Nostr relay update 261 | 262 | Follow again [Nostr relay](./nostr_relay) page replacing the environment 263 | variable `VERSION=x.xx` value for the latest if it has not been already changed 264 | in this guide. 265 | 266 | * Update the Nostr relay configuration if necessary (see release notes) 267 | 268 | ```sh copy 269 | $SU $EDITOR /etc/nostr-rs-relay/config.toml 270 | ``` 271 | 272 | * Restart the service to apply the changes 273 | 274 | ```sh copy 275 | $SU rc-service nostr-rs-relay restart 276 | ``` -------------------------------------------------------------------------------- /pages/ca/docs/nostr/nostr_relay.mdx: -------------------------------------------------------------------------------- 1 | import { Steps } from 'nextra/components' 2 | 3 | # Relé Nostr 4 | 5 | Un [relé de nostr escrit en Rust](https://sr.ht/~gheartsfield/nostr-rs-relay) 6 | amb suport per a tot el protocol de relés i persistència de dades utilitzant 7 | SQLite. 8 | 9 | ![Nostr Relé](/img/nostr/nostr-relay.webp) 10 | 11 | ## Preparacions 12 | 13 | 14 | ### Instal·leu dependències 15 | 16 | Aquestes són dependències de construcció (es pot eliminar després de la 17 | instal·lació, si voleu) 18 | 19 | ```sh copy 20 | $SU apk add --virtual .build-deps cargo cargo-auditable clang-dev cmake git \ 21 | make pkgconf protobuf-c-compiler sqlite-dev 22 | ``` 23 | 24 | Aquestes són dependències en temps d'execució 25 | 26 | ```sh copy 27 | $SU apk add sqlite 28 | ``` 29 | 30 | ### Creeu l'usuari/grup `nostr` 31 | 32 | ```sh copy 33 | $SU addgroup -S nostr 34 | ``` 35 | 36 | ```sh copy 37 | $SU adduser \ 38 | -S \ 39 | -D \ 40 | -H \ 41 | -h /dev/null \ 42 | -s /sbin/nologin \ 43 | -G nostr \ 44 | -g nostr \ 45 | nostr 46 | ``` 47 | 48 | ### Afegiu també l'usuari `satoshi` al grup `nostr` 49 | 50 | ```sh copy 51 | $SU adduser satoshi nostr && exec su -l satoshi 52 | ``` 53 | 54 | 55 | ## Instal·lació 56 | 57 | 58 | ### Clona el codi font 59 | 60 | Obtenim l'última versió del codi font de nostr-rs-relay, el compilem en un 61 | binari executable i l'instal·lem. 62 | 63 | * Baixeu el codi font de la darrera versió de nostr-rs-relay. Podeu consultar la 64 | [pàgina de llançament](https://git.sr.ht/~gheartsfield/nostr-rs-relay/refs) per 65 | veure si hi ha disponible una versió més recent. Tanmateix, és possible que 66 | altres versions no s'hagin provat correctament amb la resta de la configuració 67 | de Microbolt. 68 | 69 | ```sh copy 70 | cd /tmp 71 | ``` 72 | 73 | ```sh copy 74 | VERSION=0.9.0 75 | ``` 76 | 77 | ```sh copy 78 | git clone --branch $VERSION https://git.sr.ht/~gheartsfield/nostr-rs-relay && cd nostr-rs-relay 79 | ``` 80 | 81 | ### Configurar, compilar i instal·lar 82 | 83 | * Ara compileu el codi font en un binari executable i instal·leu-lo. 84 | 85 | ```sh copy 86 | cargo auditable build \ 87 | --bin nostr-rs-relay \ 88 | --release \ 89 | --locked \ 90 | --jobs "$(nproc)" 91 | ``` 92 | 93 | ```sh copy 94 | $SU install -m 0755 -o root -g root -t /usr/bin ./target/release/nostr-rs-relay 95 | ``` 96 | 97 | ```sh copy 98 | $SU install -D -m 0660 -o nostr -g nostr ./config.toml /etc/nostr-rs-relay/config.toml 99 | ``` 100 | 101 | ### "Strip" els binaris instal·lats 102 | 103 | ```sh copy 104 | $SU strip /usr/bin/nostr-rs-relay 105 | ``` 106 | 107 | ### Neteja 108 | 109 | ```sh copy 110 | cd 111 | rm -rf /tmp/nostr-rs-relay 112 | $SU apk del .build-deps 113 | ``` 114 | 115 | 116 | ## Configuració 117 | 118 | * Modifiqueu el fitxer de configuració amb el contingut següent 119 | 120 | ```sh copy 121 | $SU $EDITOR /etc/nostr-rs-relay/config.toml 122 | ``` 123 | 124 | ```toml filename="/etc/nostr-rs-relay/config.toml" {2,4,6,8,10} 125 | [...] 126 | #relay_url = "wss://nostr.example.com/" 127 | [...] 128 | name = "Microbolt Nostr Relay" 129 | [...] 130 | description = "A Nostr Relay running on Microbolt" 131 | [...] 132 | address = "127.0.0.1" 133 | [...] 134 | port = 8880 135 | [...] 136 | ``` 137 | 138 | ### Inici automàtic a l'arrencada 139 | 140 | Nostr Relay s'ha d'iniciar automàticament a l'arrencada del sistema. 141 | 142 | * Creeu la unitat nostr-rs-relay init.d i copieu/enganxeu la configuració 143 | següent 144 | 145 | ```sh copy 146 | $SU $EDITOR /etc/init.d/nostr-rs-relay 147 | ``` 148 | 149 | ```sh copy filename="/etc/init.d/nostr-rs-relay" 150 | #!/sbin/openrc-run 151 | 152 | : ${NOSTR_RELAY_CONFIGFILE:=/etc/nostr-rs-relay/config.toml} 153 | : ${NOSTR_RELAY_DATADIR:=/var/lib/nostr-rs-relay} 154 | : ${NOSTR_RELAY_LOGDIR:=/var/log/nostr-rs-relay} 155 | : ${NOSTR_RELAY_USER:=nostr} 156 | : ${NOSTR_RELAY_GROUP:=nostr} 157 | : ${NOSTR_RELAY_BIN:=/usr/bin/nostr-rs-relay} 158 | : ${NOSTR_RELAY_RUST_LOG:=info,nostr_rs_relay=info} 159 | : ${NOSTR_RELAY_OPTS=${NOSTR_RELAY_OPTS}} 160 | : ${NOSTR_RELAY_SIGTERM_TIMEOUT:=600} 161 | 162 | NOSTR_RELAY_PIDDIR="/run/nostr-rs-relay" 163 | 164 | required_files="${NOSTR_RELAY_CONFIGFILE}" 165 | pidfile="${NOSTR_RELAY_PIDDIR}/${SVCNAME}.pid" 166 | retry="${NOSTR_RELAY_SIGTERM_TIMEOUT}" 167 | 168 | name="Nostr Relay" 169 | description="A Rust implementation of Nostr relay" 170 | 171 | command="${NOSTR_RELAY_BIN}" 172 | command_args="--db ${NOSTR_RELAY_DATADIR} 173 | --config ${NOSTR_RELAY_CONFIGFILE} 174 | ${NOSTR_RELAY_OPTS}" 175 | command_user="${NOSTR_RELAY_USER}:${NOSTR_RELAY_GROUP}" 176 | command_background="true" 177 | 178 | start_stop_daemon_args="--env RUST_LOG=${NOSTR_RELAY_RUST_LOG} 179 | --stdout ${NOSTR_RELAY_LOGDIR}/debug.log 180 | --stderr ${NOSTR_RELAY_LOGDIR}/debug.log" 181 | 182 | depend() { 183 | need net 184 | after logger firewall 185 | } 186 | 187 | start_pre() { 188 | checkpath --file --mode 0660 --owner "${command_user}" "${NOSTR_RELAY_CONFIGFILE}" 189 | checkpath --directory --mode 0750 --owner "${command_user}" "${NOSTR_RELAY_DATADIR}" 190 | checkpath --directory --mode 0755 --owner "${command_user}" "${NOSTR_RELAY_LOGDIR}" 191 | checkpath --directory --mode 0755 --owner "${command_user}" "${NOSTR_RELAY_PIDDIR}" 192 | } 193 | 194 | stop() { 195 | ebegin "Stopping ${SVCNAME}" 196 | pkill -TERM -P "$(cat ${pidfile})" > /dev/null 2>&1 197 | start-stop-daemon \ 198 | --stop \ 199 | --pidfile="${pidfile}" \ 200 | --retry="${NOSTR_RELAY_SIGTERM_TIMEOUT}" \ 201 | --exec="${NOSTR_RELAY_BIN}" 202 | eend $? 203 | } 204 | ``` 205 | 206 | * Habilita el permís d'execució 207 | 208 | ```sh copy 209 | $SU chmod +x /etc/init.d/nostr-rs-relay 210 | ``` 211 | 212 | ### Habilita logrotate 213 | 214 | * Introduïu la configuració següent completa. Guardar i sortir 215 | 216 | ```sh copy filename="/etc/logrotate.d/nostr-rs-relay" 217 | /var/log/nostr-rs-relay/*.log { 218 | weekly 219 | missingok 220 | rotate 104 221 | compress 222 | delaycompress 223 | notifempty 224 | create 0640 nostr nostr 225 | sharedscripts 226 | postrotate 227 | kill -HUP `cat /run/nostr-rs-relay/nostr-rs-relay.pid` 228 | endscript 229 | } 230 | ``` 231 | 232 | * Prova 233 | 234 | ```sh copy 235 | $SU logrotate /etc/logrotate.d/nostr-rs-relay --debug 236 | ``` 237 | 238 | ## Activa i inicia Nostr relay 239 | 240 | ```sh copy 241 | $SU rc-update add nostr-rs-relay 242 | ``` 243 | 244 | ```sh copy 245 | $SU rc-service nostr-rs-relay start 246 | ``` 247 | 248 | * Comproveu el registre per veure la sortida del relé Nostr. Sortiu amb `Ctrl-C` 249 | 250 | ```sh copy 251 | tail -f /var/log/nostr-rs-relay/debug.log 252 | ``` 253 | 254 | * Assegureu-vos que el servei estigui funcionant i escoltant al port 255 | predeterminat `8880` 256 | 257 | ```sh copy 258 | $SU netstat -lntup | grep LISTEN | grep nostr 259 | ``` 260 | 261 | ```output filename="output" 262 | tcp 0 0 0.0.0.0:8880 0.0.0.0:* LISTEN 7030/nostr-rs-relay 263 | ``` 264 | 265 | ## Per al futur: actualització de Nostr relay 266 | 267 | Torneu a seguir la pàgina [Relé Nostr](./nostr_relay) substituint el valor de la 268 | variable d'entorn `VERSION=x.xx` per l'últim si encara no s'ha modificat en 269 | aquesta guia. 270 | 271 | * Actualitzeu la configuració del relé Nostr si cal (vegeu les notes de la 272 | versió) 273 | 274 | ```sh copy 275 | $SU $EDITOR /etc/nostr-rs-relay/config.toml 276 | ``` 277 | 278 | * Reinicieu el servei per aplicar els canvis 279 | 280 | ```sh copy 281 | $SU rc-service nostr-rs-relay restart 282 | ``` -------------------------------------------------------------------------------- /pages/en/ansible.mdx: -------------------------------------------------------------------------------- 1 | import { Callout, Steps, Tabs } from 'nextra/components' 2 | import { FAQBox } from '@components' 3 | 4 | # Microbolt ❤️ Cloud 5 | 6 | Ansible is a simple IT automation tool that can make your applications and 7 | systems easier to deploy. It is a powerful tool that can be used to automate the 8 | deployment and configuration of your Microbolt node(s). 9 | 10 | Someone once said, 11 | 12 | 13 | "Ain't nobody got time to sit through RaspiBolt more than once. Once you've 14 | learned how to build a Bitcoin node with your hands the next ones should just 15 | build themselves." 16 | 17 | — 1ma (Unhosted Marcellus) 18 | 19 | 20 | and here we are. 21 | 22 | 23 | This guide assumes you have a basic understanding of Proxmox/Debian and can read 24 | basic shell commands or scripts, identify variables, and modify them as needed. 25 | Default values are provided for all variables, but you can customize them to 26 | suit your requirements. You don't need to be a Proxmox/Debian expert, but you 27 | should be able to SSH into your system. Installing Proxmox/Debian is out of 28 | scope. 29 | 30 | 31 | ## Prerequisites 32 | 33 | 34 | | Variable | Description | Default | 35 | | ---------------- | ------------------- | ------------------------------- | 36 | | `blank` | Blank template ID | `9000` | 37 | | `alpine` | Alpine template ID | `9010` | 38 | | `storage` | Storage ID | `local-zfs` | 39 | | `ssd` | SSD flag | `1` | 40 | | `username` | Cloud-init username | `satoshi` | 41 | | `ssh_keyfile` | SSH key file | `/etc/pve/priv/authorized_keys` | 42 | | `password` | Cloud-init password | `changeme` | 43 | | `microbolt` | Microbolt VM ID | `2140` | 44 | | `name` | Microbolt VM name | `nakamoto01` | 45 | | `cores` | Microbolt VM cores | `4` | 46 | | `memory` | Microbolt VM memory | `8192` | 47 | | `vlan` | Microbolt VM VLAN | `1` | 48 | | `second_storage` | Second storage ID | `local-zfs` | 49 | | `second_ssd` | Second SSD flag | `1` | 50 | 51 | 52 | SSH into your Proxmox/Debian server and run the following commands. 53 | 54 | 55 | ### Blank template 56 | 57 | It is highly recommended to create a blank Linux template if you are using 58 | Proxmox/Debian. You'll thank me later. 59 | 60 | ```sh copy 61 | qm create "${blank:-9000}" \ 62 | --name template \ 63 | --ostype l26 \ 64 | --agent enabled=1,fstrim_cloned_disks=1 \ 65 | --cpu host \ 66 | --balloon 0 \ 67 | --vga serial0 \ 68 | --scsihw virtio-scsi-pci \ 69 | --net0 virtio,bridge=vmbr0,firewall=1 \ 70 | --serial0 socket 71 | qm template "${blank:-9000}" 72 | ``` 73 | 74 | ### Alpine cloud template 75 | 76 | Clone the blank template 77 | 78 | ```sh copy 79 | qm clone "${blank:-9000}" "${alpine:-9010}" \ 80 | --name alpine-3.20 \ 81 | --full 82 | ``` 83 | 84 | Download the cloud image 85 | 86 | ```sh copy 87 | wget https://dl-cdn.alpinelinux.org/alpine/v3.20/releases/cloud/\ 88 | nocloud_alpine-3.20.3-x86_64-bios-cloudinit-r0.qcow2 89 | ``` 90 | 91 | Create the Alpine cloud template 92 | 93 | 94 | To use your own SSH keys from GitHub, simply replace `` with your 95 | actual GitHub username. 96 | 97 | ```sh 98 | wget -qO- https://github.com/.keys > ./github_keys 99 | export ssh_keyfile=./github_keys 100 | ``` 101 | 102 | 103 | ```sh copy 104 | qm set "${alpine:-9010}" \ 105 | --scsi0 "${storage:-local-zfs}:0,import-from=$(pwd)/nocloud_alpine-3.20.3-x86_64-bios-cloudinit-r0.qcow2,iothread=1,discard=on,ssd=${ssd:-1}" \ 106 | --ide0 "${storage:-local-zfs}:cloudinit" \ 107 | --tags alpine \ 108 | --ciuser "${username:-satoshi}" \ 109 | --sshkeys "${ssh_keyfile:-/etc/pve/priv/authorized_keys}" \ 110 | --cipassword "${password:-changeme}" \ 111 | --ipconfig0 "ip6=auto,ip=dhcp" \ 112 | --boot order=scsi0 \ 113 | --ciupgrade 1 \ 114 | --scsihw virtio-scsi-single 115 | qm template "${alpine:-9010}" 116 | ``` 117 | 118 | Clean up 119 | 120 | ```sh copy 121 | rm nocloud_alpine-3.20.3-x86_64-bios-cloudinit-r0.qcow2 122 | ``` 123 | 124 | ### Microbolt VM 125 | 126 | Clone the Alpine cloud template 127 | 128 | ```sh copy 129 | qm clone "${alpine:-9010}" "${microbolt:-2140}" \ 130 | --name "${name:-nakamoto01}" \ 131 | --full 132 | ``` 133 | 134 | Set the Microbolt VM 135 | 136 | ```sh copy 137 | qm set "${microbolt:-2140}" \ 138 | --onboot 1 \ 139 | --cores "${cores:-2}" \ 140 | --memory "${memory:-8192}" \ 141 | --net0 "virtio,bridge=vmbr0,firewall=1,tag=${vlan:-1}" \ 142 | --tags "alpine,microbolt" 143 | ``` 144 | 145 | Rezise the disk(s) 146 | 147 | 148 | 149 | ```sh copy 150 | qm disk resize "${microbolt:-2140}" scsi0 2048G 151 | ``` 152 | 153 | 154 | ```sh copy 155 | qm set "${microbolt:-2140}" \ 156 | --scsi1 "${second_storage:-local-zfs}:2048,iothread=1,discard=on,ssd=${second_ssd:-1}" 157 | qm disk resize "${microbolt:-2140}" scsi0 32G 158 | ``` 159 | 160 | 161 | 162 | Start the VM 163 | 164 | ```sh copy 165 | qm start "${microbolt:-2140}" 166 | ``` 167 | 168 | 169 | ## Installation 170 | 171 | Run the following commands on your main machine. 172 | 173 | 174 | ### Install Ansible 175 | 176 | 177 | 178 | ```sh copy 179 | apk add ansible 180 | ``` 181 | 182 | 183 | 184 | For some Linux distributions, refer to the [installation 185 | guide](https://docs.ansible.com/ansible/latest/installation_guide/installation_distros.html). 186 | Other Unix-like systems can also check the [installation 187 | instructions](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html). 188 | 189 | 190 | 191 | 192 | First, install [Homebrew](https://brew.sh). 193 | 194 | 195 | ```sh copy 196 | brew install ansible 197 | ``` 198 | 199 | 200 | 201 | Ansible does not support Windows natively. For more information, refer to the 202 | [Windows FAQ](https://docs.ansible.com/ansible/latest/os_guide/windows_faq.html#windows-faq-ansible). 203 | To use Ansible on Windows, consider using WSL. Learn more about the reasons 204 | [here](https://blog.rolpdog.com/2020/03/why-no-ansible-controller-for-windows.html). 205 | 206 | 207 | 208 | 209 | ### Clone the repository 210 | 211 | ```sh copy 212 | git clone https://github.com/microbolt-guide/ansible.git && cd ansible 213 | ``` 214 | 215 | ### Configure the inventory 216 | 217 | ```sh copy 218 | cp inventory/hosts.ini.example inventory/hosts.ini 219 | ``` 220 | 221 | Edit the `hosts.ini` file 222 | 223 | ```sh copy 224 | vi inventory/hosts.ini 225 | ``` 226 | 227 | ### Configure the variables 228 | 229 | Edit the global variables in `group_vars/all.yaml` file 230 | 231 | ```sh copy 232 | vi inventory/group_vars/all.yaml 233 | ``` 234 | 235 | And/or modify for a single host, view examples inside the `host_vars` directory 236 | 237 | ```sh copy 238 | cat inventory/host_vars/nakamoto01.yaml.example 239 | ``` 240 | 241 | ### Run the playbook 242 | 243 | ```sh copy 244 | ./deploy.sh 245 | ``` 246 | 247 | ### Start and enable the services 248 | 249 | ```sh copy 250 | ./services.sh start enable 251 | ``` 252 | 253 | 254 | {

DONE 🎉

} -------------------------------------------------------------------------------- /pages/en/docs/lightning/mobile_app.mdx: -------------------------------------------------------------------------------- 1 | import { Callout, Tabs } from 'nextra/components' 2 | import { FAQBox } from '@components' 3 | 4 | # Mobile app 5 | 6 | We install [Zeus](https://zeusln.app), a cross-platform mobile app that connect 7 | to your LN node over local network or over Tor. Make payments with lightning or 8 | on-chain and manage your channels while you're on the go. 9 | 10 | ![Zeus mockup](/img/lightning/mobileapp/zeus.webp) 11 | 12 | ## Preparations 13 | 14 | ### Configure LND 15 | 16 | * Edit this line 17 | 18 | ```sh copy 19 | $SU $EDITOR /etc/lnd/lnd.conf 20 | ``` 21 | 22 | ```conf filename="/etc/lnd/lnd.conf" {2} 23 | [...] 24 | restlisten=localhost:8080 25 | [...] 26 | ``` 27 | 28 | ### Reverse proxy 29 | 30 | In the [Security section](../system/security#reverse-proxy), we set up a reverse 31 | proxy. Now we can add the LND rest configuration. 32 | 33 | * Enable the reverse proxy to route external encrypted HTTPS traffic internally 34 | to the LND rest. 35 | 36 | 37 | 38 | ```sh copy 39 | $SU $EDITOR /etc/caddy/streams/lnd-rest.caddy 40 | ``` 41 | 42 | ```nginx copy filename="/etc/caddy/streams/lnd-rest.caddy" 43 | :8081 { 44 | route { 45 | proxy 127.0.0.1:8080 46 | } 47 | } 48 | ``` 49 | 50 | * Reload Caddy 51 | 52 | ```sh copy 53 | $SU rc-service caddy restart 54 | ``` 55 | 56 | 57 | ```sh copy 58 | $SU $EDITOR /etc/nginx/sites-available/lnd-rest-reverse-proxy.conf 59 | ``` 60 | 61 | ```nginx copy filename="/etc/nginx/sites-available/lnd-rest-reverse-proxy.conf" 62 | server { 63 | listen 8081 ssl; 64 | 65 | location / { 66 | proxy_pass https://127.0.0.1:8080; 67 | proxy_ssl_verify off; 68 | proxy_set_header Host $host; 69 | proxy_set_header Upgrade $http_upgrade; 70 | proxy_set_header Connection "Upgrade"; 71 | proxy_set_header X-Real-IP $remote_addr; 72 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 73 | proxy_set_header X-Forwarded-Proto $scheme; 74 | } 75 | } 76 | ``` 77 | 78 | ```sh copy 79 | $SU ln \ 80 | -s \ 81 | ../sites-available/lnd-rest-reverse-proxy.conf \ 82 | /etc/nginx/sites-enabled/lnd-rest-reverse-proxy.conf 83 | ``` 84 | 85 | * Test and reload NGINX configuration 86 | 87 | ```sh copy 88 | $SU nginx -t 89 | $SU rc-service nginx restart 90 | ``` 91 | 92 | 93 | 94 | ### Firewall 95 | 96 | * Configure the firewall to allow incoming HTTPS requests 97 | 98 | 99 | 100 | ```sh copy 101 | $SU $EDITOR /etc/awall/optional/lnd-rest.json 102 | ``` 103 | 104 | ```json copy filename="/etc/awall/optional/lnd-rest.json" 105 | { 106 | "description": "Allow LND rest SSL", 107 | 108 | "filter": [ 109 | { 110 | "in": "internet", 111 | "out": "_fw", 112 | "service": { "proto": "tcp", "port": 8081 }, 113 | "action": "accept", 114 | "conn-limit": { "count": 10, "interval": 60 } 115 | } 116 | ] 117 | } 118 | ``` 119 | 120 | * Enable it 121 | 122 | ```sh copy 123 | $SU awall enable lnd-rest 124 | $SU awall activate 125 | ``` 126 | 127 | 128 | ```sh copy 129 | $SU ufw limit 8081/tcp comment 'Allow LND rest SSL' 130 | ``` 131 | 132 | 133 | 134 | 135 | * Add the following lines in the section for “location-hidden services” in the 136 | `torrc` file. Save and exit. 137 | 138 | ```sh copy 139 | $SU $EDITOR /etc/tor/torrc 140 | ``` 141 | 142 | ```sh copy filename="/etc/tor/torrc" 143 | # Hidden Service LND REST 144 | HiddenServiceDir /var/lib/tor/lnd-rest/ 145 | HiddenServiceVersion 3 146 | HiddenServicePoWDefensesEnabled 1 147 | HiddenServicePort 8081 127.0.0.1:8081 148 | ``` 149 | 150 | * Reload Tor configuration and get your connection address. 151 | 152 | ```sh copy 153 | $SU rc-service tor reload 154 | $SU cat /var/lib/tor/lnd-rest/hostname 155 | ``` 156 | 157 | ```output filename="output" 158 | abcdefg..............xyz.onion 159 | ``` 160 | 161 | * Save the onion address in a safe place (e.g., password manager). You should 162 | now be able to connect to your LND rest remotely via Tor using your hostname and 163 | port `8081` 164 | 165 | 166 | ### Create a lndconnect QR code 167 | 168 | * Install `qrencode` 169 | 170 | ```sh copy 171 | $SU apk add libqrencode-tools 172 | ``` 173 | 174 | * There is a utility tool called `lndconnect`, but instead of installing it we 175 | can generate a qr with a valid lndconnect url very easily like this 176 | 177 | 178 | 179 | 180 | Define the hostname or IP address of your node in the `HOP` variable. Leave 181 | blank to use the default value `nakamoto01.local`. 182 | 183 | ```sh 184 | HOP=192.168.21.40 185 | ``` 186 | 187 | 188 | ```sh copy 189 | printf "%s" \ 190 | "lndconnect://" \ 191 | "${HOP:-nakamoto01.local}" \ 192 | ":8081" \ 193 | "?cert=" \ 194 | "$( 195 | grep -v 'CERTIFICATE' /var/lib/lnd/tls.cert |\ 196 | tr -d '=' |\ 197 | tr '/+' '_-' 198 | )" \ 199 | "&macaroon=" \ 200 | "$( 201 | base64 /var/lib/lnd/data/chain/bitcoin/mainnet/admin.macaroon |\ 202 | tr -d '=' |\ 203 | tr '/+' '_-' 204 | )" |\ 205 | tr -d '\n' |\ 206 | qrencode -t ansiutf8 -o - 207 | ``` 208 | 209 | 210 | ```sh copy 211 | printf "%s" \ 212 | "lndconnect://" \ 213 | "$($SU cat /var/lib/tor/lnd-rest/hostname)" \ 214 | ":8081" \ 215 | "?cert=" \ 216 | "$( 217 | grep -v 'CERTIFICATE' /var/lib/lnd/tls.cert |\ 218 | tr -d '=' |\ 219 | tr '/+' '_-' 220 | )" \ 221 | "&macaroon=" \ 222 | "$( 223 | base64 /var/lib/lnd/data/chain/bitcoin/mainnet/admin.macaroon |\ 224 | tr -d '=' |\ 225 | tr '/+' '_-' 226 | )" |\ 227 | tr -d '\n' |\ 228 | qrencode -t ansiutf8 -o - 229 | ``` 230 | 231 | 232 | 233 | * It will be a big QR code, so maximize your terminal window and use `<->` 234 | to shrink the code further to fit the screen 235 | 236 | * Keep the SSH session with the QR code opened, it will be needed later 237 | 238 | ## Installation 239 | 240 | ### Install the Zeus app 241 | 242 | Download the Zeus app for your mobile phone. Check the [Zeus 243 | website](https://zeusln.app) for the direct download links to the Apple App 244 | Store or Google Play. 245 | 246 | On Android, if you can't or do not want to use Google Play, you can use 247 | [Obtanium](https://github.com/ImranR98/Obtainium) [how-to add 248 | app](https://github.com/ImranR98/Obtainium/wiki#add-app-page), the [F-Droid 249 | store](https://f-droid.org/en/packages/app.zeusln.zeus) or simply [download the 250 | APK](https://zeusln.app), tap it and install it. If it's the first time you 251 | install an APK on your phone you will be asked to authorize the app to install 252 | unknown apps, simply follow the on-screen instructions to do so. 253 | 254 | ## Configuration 255 | 256 | ### Connect Zeus to your node 257 | 258 | * Open Zeus and tap on `ADVANCED SET-UP` 259 | * Tap on `+ Connect a node` 260 | * Enter a Nickname for your node (e.g., "Microbolt") 261 | * Click on "scan button" at the top right and, if prompted, allow Zeus to use 262 | the camera 263 | * Scan the QR code generated earlier 264 | * Click on `SAVE NODE CONFIG`. Zeus is now connecting to your node, and it might 265 | take a while the first time. 266 | 267 | ### Security 268 | 269 | Anyone using Zeus on your phone has control over your node and all its funds. It 270 | is strongly recommended to set up a password for the app. 271 | 272 | * In the app, tap on the `node icon` in the top-left corner 273 | * Click on `Security` and `Set/Change Password` or `Set/Change PIN` to enter a 274 | password or PIN 275 | * Save your password or PIN somewhere safe, e.g., in your password manager 276 | 277 | ## Zeus in action 278 | 279 | Below is a list of Zeus existing and planned features at 2024-03-16: 280 | 281 | ![Zeus features](/img/lightning/mobileapp/zeus-features.webp) 282 | 283 | ## Update 284 | 285 | To update Zeus, update the app using the same method you used to install it. -------------------------------------------------------------------------------- /pages/ca/ansible.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ansible 3 | --- 4 | 5 | import { Callout, Steps, Tabs } from 'nextra/components' 6 | import { FAQBox } from '@components' 7 | 8 | # Microbolt ❤️ Cloud 9 | 10 | Ansible és una eina senzilla d'automatització informàtica que pot facilitar el 11 | desplegament de les teves aplicacions i sistemes. És una eina potent que es pot 12 | utilitzar per automatitzar el desplegament i la configuració del(s) vostre(s) 13 | node(s) Microbolt. 14 | 15 | Algú va dir una vegada: 16 | 17 | 18 | "Ain't nobody got time to sit through RaspiBolt more than once. Once you've 19 | learned how to build a Bitcoin node with your hands the next ones should just 20 | build themselves." 21 | 22 | — 1ma (Unhosted Marcellus) 23 | 24 | 25 | i aquí estem. 26 | 27 | 28 | Aquesta guia assumeix que teniu un coneixement bàsic de Proxmox/Debian i que 29 | podeu llegir ordres o scripts bàsics de l'intèrpret d'ordres, identificar 30 | variables i modificar-les segons sigui necessari. Es proporcionen valors per 31 | defecte per a totes les variables, però podeu personalitzar-los perquè s'adaptin 32 | a les vostres necessitats. No cal que sigueu un expert Proxmox/Debian, però 33 | hauríeu de ser capaços de fer SSH al teu sistema. Instal·lar Proxmox/Debian està 34 | fora d'abast. 35 | 36 | 37 | ## Prerequisits 38 | 39 | 40 | | Variable | Descripció | Valor per defecte | 41 | | ---------------- | ------------------- | ------------------------------- | 42 | | `blank` | Blank template ID | `9000` | 43 | | `alpine` | Alpine template ID | `9010` | 44 | | `storage` | Storage ID | `local-zfs` | 45 | | `ssd` | SSD flag | `1` | 46 | | `username` | Cloud-init username | `satoshi` | 47 | | `ssh_keyfile` | SSH key file | `/etc/pve/priv/authorized_keys` | 48 | | `password` | Cloud-init password | `changeme` | 49 | | `microbolt` | Microbolt VM ID | `2140` | 50 | | `name` | Microbolt VM name | `nakamoto01` | 51 | | `cores` | Microbolt VM cores | `4` | 52 | | `memory` | Microbolt VM memory | `8192` | 53 | | `vlan` | Microbolt VM VLAN | `1` | 54 | | `second_storage` | Second storage ID | `local-zfs` | 55 | | `second_ssd` | Second SSD flag | `1` | 56 | 57 | 58 | SSH al vostre servidor Proxmox/Debian i executeu les ordres següents. 59 | 60 | 61 | ### Plantilla en blanc 62 | 63 | Es recomana molt crear una plantilla en blanc de Linux si estàs utilitzant 64 | Proxmox/Debian. M'ho agrairàs més tard. 65 | 66 | ```sh copy 67 | qm create "${blank:-9000}" \ 68 | --name template \ 69 | --ostype l26 \ 70 | --agent enabled=1,fstrim_cloned_disks=1 \ 71 | --cpu host \ 72 | --balloon 0 \ 73 | --vga serial0 \ 74 | --scsihw virtio-scsi-pci \ 75 | --net0 virtio,bridge=vmbr0,firewall=1 \ 76 | --serial0 socket 77 | qm template "${blank:-9000}" 78 | ``` 79 | 80 | ### Plantilla d'Alpine cloud 81 | 82 | Clona la plantilla en blanc 83 | 84 | ```sh copy 85 | qm clone "${blank:-9000}" "${alpine:-9010}" \ 86 | --name alpine-3.20 \ 87 | --full 88 | ``` 89 | 90 | Descarrega la imatge de cloud d'Alpine 91 | 92 | ```sh copy 93 | wget https://dl-cdn.alpinelinux.org/alpine/v3.20/releases/cloud/\ 94 | nocloud_alpine-3.20.3-x86_64-bios-cloudinit-r0.qcow2 95 | ``` 96 | 97 | Crea la plantilla d'Alpine cloud 98 | 99 | 100 | Per utilitzar les teves pròpies claus SSH de GitHub, simplement substitueix 101 | `` pel teu nom d'usuari real de GitHub. 102 | 103 | ```sh 104 | wget -qO- https://github.com/.keys > ./github_keys 105 | export ssh_keyfile=./github_keys 106 | ``` 107 | 108 | 109 | ```sh copy 110 | qm set "${alpine:-9010}" \ 111 | --scsi0 "${storage:-local-zfs}:0,import-from=$(pwd)/nocloud_alpine-3.20.3-x86_64-bios-cloudinit-r0.qcow2,iothread=1,discard=on,ssd=${ssd:-1}" \ 112 | --ide0 "${storage:-local-zfs}:cloudinit" \ 113 | --tags alpine \ 114 | --ciuser "${username:-satoshi}" \ 115 | --sshkeys "${ssh_keyfile:-/etc/pve/priv/authorized_keys}" \ 116 | --cipassword "${password:-changeme}" \ 117 | --ipconfig0 "ip6=auto,ip=dhcp" \ 118 | --boot order=scsi0 \ 119 | --ciupgrade 1 \ 120 | --scsihw virtio-scsi-single 121 | qm template "${alpine:-9010}" 122 | ``` 123 | 124 | Neteja 125 | 126 | ```sh copy 127 | rm nocloud_alpine-3.20.3-x86_64-bios-cloudinit-r0.qcow2 128 | ``` 129 | 130 | ### Microbolt VM 131 | 132 | Clona la plantilla d'Alpine cloud 133 | 134 | ```sh copy 135 | qm clone "${alpine:-9010}" "${microbolt:-2140}" \ 136 | --name "${name:-nakamoto01}" \ 137 | --full 138 | ``` 139 | 140 | Configura la Microbolt VM 141 | 142 | ```sh copy 143 | qm set "${microbolt:-2140}" \ 144 | --onboot 1 \ 145 | --cores "${cores:-2}" \ 146 | --memory "${memory:-8192}" \ 147 | --net0 "virtio,bridge=vmbr0,firewall=1,tag=${vlan:-1}" \ 148 | --tags "alpine,microbolt" 149 | ``` 150 | 151 | Redimensiona el(s) disc(s) 152 | 153 | 154 | 155 | ```sh copy 156 | qm disk resize "${microbolt:-2140}" scsi0 2048G 157 | ``` 158 | 159 | 160 | ```sh copy 161 | qm set "${microbolt:-2140}" \ 162 | --scsi1 "${second_storage:-local-zfs}:2048,iothread=1,discard=on,ssd=${second_ssd:-1}" 163 | qm disk resize "${microbolt:-2140}" scsi0 32G 164 | ``` 165 | 166 | 167 | 168 | Inicia la VM 169 | 170 | ```sh copy 171 | qm start "${microbolt:-2140}" 172 | ``` 173 | 174 | 175 | ## Instal·lació 176 | 177 | Executeu les ordres següents a la màquina principal. 178 | 179 | 180 | ### Instal·la Ansible 181 | 182 | 183 | 184 | ```sh copy 185 | apk add ansible 186 | ``` 187 | 188 | 189 | 190 | Per a algunes distribucions de Linux, consulta la [guia 191 | d'instal·lació](https://docs.ansible.com/ansible/latest/installation_guide/installation_distros.html). 192 | Altres sistemes Unix-like també poden consultar les [instruccions 193 | d'instal·lació](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html). 194 | 195 | 196 | 197 | 198 | Primer, instal·la [Homebrew](https://brew.sh). 199 | 200 | 201 | ```sh copy 202 | brew install ansible 203 | ``` 204 | 205 | 206 | 207 | Ansible no suporta Windows nativament. Per a més informació, consulta les [FAQ 208 | de Windows](https://docs.ansible.com/ansible/latest/os_guide/windows_faq.html#windows-faq-ansible). 209 | Per utilitzar Ansible a Windows, considera utilitzar WSL. Aprèn més sobre les 210 | raons 211 | [aquí](https://blog.rolpdog.com/2020/03/why-no-ansible-controller-for-windows.html). 212 | 213 | 214 | 215 | 216 | ### Clona el repositori 217 | 218 | ```sh copy 219 | git clone https://github.com/microbolt-guide/ansible.git && cd ansible 220 | ``` 221 | 222 | ### Configura l'inventari 223 | 224 | ```sh copy 225 | cp inventory/hosts.ini.example inventory/hosts.ini 226 | ``` 227 | 228 | Edita el fitxer `hosts.ini` 229 | 230 | ```sh copy 231 | vi inventory/hosts.ini 232 | ``` 233 | 234 | ### Configura les variables 235 | 236 | Edita les variables globals al fitxer `group_vars/all.yaml` 237 | 238 | ```sh copy 239 | vi inventory/group_vars/all.yaml 240 | ``` 241 | 242 | I/o modifica per a un sol host, consulta exemples dins del directori `host_vars` 243 | 244 | ```sh copy 245 | cat inventory/host_vars/nakamoto01.yaml.example 246 | ``` 247 | 248 | ### Executa el playbook 249 | 250 | ```sh copy 251 | ./deploy.sh 252 | ``` 253 | 254 | ### Inicia i habilita els serveis 255 | 256 | ```sh copy 257 | ./services.sh start enable 258 | ``` 259 | 260 | 261 | {

FET 🎉

} -------------------------------------------------------------------------------- /pages/ca/docs/lightning/mobile_app.mdx: -------------------------------------------------------------------------------- 1 | import { Callout, Tabs } from 'nextra/components' 2 | import { FAQBox } from '@components' 3 | 4 | # Aplicació mòbil 5 | 6 | Instal·lem [Zeus](https://zeusln.app), una aplicació mòbil multiplataforma que 7 | es connecta al teu node de LN a través de la xarxa local o a través de Tor. Fes 8 | pagaments amb lightning o a la cadena de blocs i gestiona els teus canals mentre 9 | ets en remot. 10 | 11 | ![Esborrany de Zeus](/img/lightning/mobileapp/zeus.webp) 12 | 13 | ## Preparatius 14 | 15 | ### Configura LND 16 | 17 | * Edita aquesta línia 18 | 19 | ```sh copy 20 | $SU $EDITOR /etc/lnd/lnd.conf 21 | ``` 22 | 23 | ```conf filename="/etc/lnd/lnd.conf" {2} 24 | [...] 25 | restlisten=localhost:8080 26 | [...] 27 | ``` 28 | 29 | ### Servidor intermediari invers 30 | 31 | A la secció de [Seguretat](../system/security#servidor-intermediari-invers), hem 32 | configurat un servidor intermediari invers. Ara podem afegir la configuració de 33 | LND rest. 34 | 35 | * Habilita el servidor intermediari invers per encaminar el trànsit HTTPS extern 36 | xifrat internament cap a LND rest 37 | 38 | 39 | 40 | ```sh copy 41 | $SU $EDITOR /etc/caddy/streams/lnd-rest.caddy 42 | ``` 43 | 44 | ```nginx copy filename="/etc/caddy/streams/lnd-rest.caddy" 45 | :8081 { 46 | route { 47 | proxy 127.0.0.1:8080 48 | } 49 | } 50 | ``` 51 | 52 | * Torna a carregar el Caddy 53 | 54 | ```sh copy 55 | $SU rc-service caddy restart 56 | ``` 57 | 58 | 59 | ```sh copy 60 | $SU $EDITOR /etc/nginx/sites-available/lnd-rest-reverse-proxy.conf 61 | ``` 62 | 63 | ```nginx copy filename="/etc/nginx/sites-available/lnd-rest-reverse-proxy.conf" 64 | server { 65 | listen 8081 ssl; 66 | 67 | location / { 68 | proxy_pass https://127.0.0.1:8080; 69 | proxy_ssl_verify off; 70 | proxy_set_header Host $host; 71 | proxy_set_header Upgrade $http_upgrade; 72 | proxy_set_header Connection "Upgrade"; 73 | proxy_set_header X-Real-IP $remote_addr; 74 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 75 | proxy_set_header X-Forwarded-Proto $scheme; 76 | } 77 | } 78 | ``` 79 | 80 | ```sh copy 81 | $SU ln \ 82 | -s \ 83 | ../sites-available/lnd-rest-reverse-proxy.conf \ 84 | /etc/nginx/sites-enabled/lnd-rest-reverse-proxy.conf 85 | ``` 86 | 87 | * Prova i torna a carregar la configuració de NGINX 88 | 89 | ```sh copy 90 | $SU nginx -t 91 | $SU rc-service nginx restart 92 | ``` 93 | 94 | 95 | 96 | ### Firewall 97 | 98 | * Configura el tallafoc per permetre les sol·licituds HTTPS entrants 99 | 100 | 101 | 102 | ```sh copy 103 | $SU $EDITOR /etc/awall/optional/lnd-rest.json 104 | ``` 105 | 106 | ```json copy filename="/etc/awall/optional/lnd-rest.json" 107 | { 108 | "description": "Allow LND rest SSL", 109 | 110 | "filter": [ 111 | { 112 | "in": "internet", 113 | "out": "_fw", 114 | "service": { "proto": "tcp", "port": 8081 }, 115 | "action": "accept", 116 | "conn-limit": { "count": 10, "interval": 60 } 117 | } 118 | ] 119 | } 120 | ``` 121 | 122 | * Habilitar-ho 123 | 124 | ```sh copy 125 | $SU awall enable lnd-rest 126 | $SU awall activate 127 | ``` 128 | 129 | 130 | ```sh copy 131 | $SU ufw limit 8081/tcp comment 'Allow LND rest SSL' 132 | ``` 133 | 134 | 135 | 136 | 137 | * Afegiu les línies següents a la secció de "location-hidden services" al fitxer 138 | `torrc`. 139 | 140 | ```sh copy 141 | $SU $EDITOR /etc/tor/torrc 142 | ``` 143 | 144 | ```sh copy filename="/etc/tor/torrc" 145 | # Hidden Service LND REST 146 | HiddenServiceDir /var/lib/tor/lnd-rest/ 147 | HiddenServiceVersion 3 148 | HiddenServicePoWDefensesEnabled 1 149 | HiddenServicePort 8081 127.0.0.1:8081 150 | ``` 151 | 152 | * Torneu a carregar la configuració de Tor i obteniu la vostra adreça de 153 | connexió. 154 | 155 | ```sh copy 156 | $SU rc-service tor reload 157 | $SU cat /var/lib/tor/lnd-rest/hostname 158 | ``` 159 | 160 | ```output filename="output" 161 | abcdefg..............xyz.onion 162 | ``` 163 | 164 | * Desa l'adreça onion en un lloc segur (per exemple, un gestor de contrasenyes). 165 | Ara hauries de poder connectar-te al teu LND de forma remota a través de Tor 166 | utilitzant el teu nom d'amfitrió i el port `8081`. 167 | 168 | 169 | ### Crea un codi QR de lndconnect 170 | 171 | * Instal·la `qrencode` 172 | 173 | ```sh copy 174 | $SU apk add libqrencode-tools 175 | ``` 176 | 177 | * Hi ha una eina utilitària anomenada `lndconnect`, però en lloc d'instal·lar-la 178 | podem generar fàcilment un codi QR amb una URL de lndconnect vàlida de la 179 | següent manera 180 | 181 | 182 | 183 | 184 | Definiu el nom d'amfitrió o l'adreça IP del vostre node a la variable `HOP`. 185 | Deixeu-ho en blanc per a utilitzar el valor per defecte `nakamoto01.local`. 186 | 187 | ```sh 188 | HOP=192.168.21.40 189 | ``` 190 | 191 | 192 | ```sh copy 193 | printf "%s" \ 194 | "lndconnect://" \ 195 | "${HOP:-nakamoto01.local}" \ 196 | ":8081" \ 197 | "?cert=" \ 198 | "$( 199 | grep -v 'CERTIFICATE' /var/lib/lnd/tls.cert |\ 200 | tr -d '=' |\ 201 | tr '/+' '_-' 202 | )" \ 203 | "&macaroon=" \ 204 | "$( 205 | base64 /var/lib/lnd/data/chain/bitcoin/mainnet/admin.macaroon |\ 206 | tr -d '=' |\ 207 | tr '/+' '_-' 208 | )" |\ 209 | tr -d '\n' |\ 210 | qrencode -t ansiutf8 -o - 211 | ``` 212 | 213 | 214 | ```sh copy 215 | printf "%s" \ 216 | "lndconnect://" \ 217 | "$($SU cat /var/lib/tor/lnd-rest/hostname)" \ 218 | ":8081" \ 219 | "?cert=" \ 220 | "$( 221 | grep -v 'CERTIFICATE' /var/lib/lnd/tls.cert |\ 222 | tr -d '=' |\ 223 | tr '/+' '_-' 224 | )" \ 225 | "&macaroon=" \ 226 | "$( 227 | base64 /var/lib/lnd/data/chain/bitcoin/mainnet/admin.macaroon |\ 228 | tr -d '=' |\ 229 | tr '/+' '_-' 230 | )" |\ 231 | tr -d '\n' |\ 232 | qrencode -t ansiutf8 -o - 233 | ``` 234 | 235 | 236 | 237 | * Serà un codi QR gran, així que maximitza la finestra del terminal i utilitza 238 | `<->` per reduir encara més el codi perquè s'ajusti a la pantalla 239 | 240 | * Mantén oberta la sessió SSH amb el codi QR, serà necessària més endavant 241 | 242 | ## Instal·lació 243 | 244 | ### Instal·la l'aplicació Zeus 245 | 246 | Descarrega l'aplicació Zeus per al teu telèfon mòbil. Consulta el [lloc web de 247 | Zeus](https://zeusln.app) per obtenir els enllaços de descàrrega directa a l'App 248 | Store d'Apple o a Google Play. 249 | 250 | A Android, si no pots o no vols utilitzar Google Play, pots utilitzar 251 | [Obtanium](https://github.com/ImranR98/Obtainium) [com afegir 252 | l'aplicació](https://github.com/ImranR98/Obtainium/wiki#add-app-page), la 253 | [botiga F-Droid](https://f-droid.org/en/packages/app.zeusln.zeus) o simplement 254 | [descarregar el fitxer APK](https://zeusln.app), clica'l i instal·la'l. Si és la 255 | primera vegada que instal·les un APK al teu telèfon, se't demanarà autorització, 256 | simplement segueix les instruccions que apareixen a la pantalla per fer-ho. 257 | 258 | ## Configuració 259 | 260 | ### Connecta Zeus al teu node 261 | 262 | * Obre Zeus i toca `ADVANCED SET-UP` 263 | * Clica `+ Connect a node` 264 | * Introdueix un Nickname per al teu node (per exemple, "Microbolt") 265 | * Fes clic al "botó d'escanejar" a la part superior dreta i, si se't demana, 266 | permet a Zeus utilitzar la càmera 267 | * Escaneja el codi QR generat anteriorment 268 | * Fes clic a `SAVE NODE CONFIG`. Ara Zeus s'està connectant al teu node, i pot 269 | trigar una estona la primera vegada. 270 | 271 | ### Seguretat 272 | 273 | Anyone using Zeus on your phone has control over your node and all its funds. It 274 | is strongly recommended to set up a password for the app. 275 | 276 | Qualsevol que utilitzi Zeus al teu telèfon té control sobre el teu node i tots 277 | els seus fons. Es recomana encaridament configurar una contrasenya per a 278 | l'aplicació. 279 | 280 | * A l'aplicació, toca la `icona del node` a la part superior esquerra 281 | * Fes clic a `Security` i `Set/Change Password` o `Set/Change PIN` per introduir 282 | una contrasenya o PIN 283 | * Desa la teva contrasenya o PIN en algun lloc segur, per exemple, en el teu 284 | gestor de contrasenyes 285 | 286 | ## Zeus en acció 287 | 288 | A continuació es mostra una llista de les funcions actuals i planificades de 289 | Zeus a 2024-03-16: 290 | 291 | ![Funcionalitats de Zeus](/img/lightning/mobileapp/zeus-features.webp) 292 | 293 | ## Actualització 294 | 295 | Per actualitzar Zeus, actualitza l'aplicació utilitzant el mateix mètode que vas 296 | utilitzar per instal·lar-la. -------------------------------------------------------------------------------- /theme.config.jsx: -------------------------------------------------------------------------------- 1 | import { useRouter } from 'nextra/hooks' 2 | import { useConfig } from 'nextra-theme-docs' 3 | 4 | // Start of l10n strings on /locales/*.js 5 | // Dynamically import all locale files 6 | const locales = require.context('./locales', false, /\.js$/) 7 | const localizedStrings = {} 8 | 9 | // Loop through each locale file and add its strings to the localizedStrings object 10 | locales.keys().forEach((key) => { 11 | const locale = key.replace('./', '').replace('.js', '') 12 | localizedStrings[locale] = locales(key).default 13 | }) 14 | 15 | // Generate the list of locales 16 | const i18n = Object.keys(localizedStrings).map(locale => ({ 17 | locale, 18 | name: localizedStrings[locale].LANGUAGE_NAME 19 | })) 20 | 21 | // Extract localized strings 22 | const l10n = (key) => { 23 | return Object.fromEntries( 24 | Object.entries(localizedStrings).map(([locale, strings]) => [locale, strings[key]]) 25 | ) 26 | } 27 | 28 | // Extract localized strings 29 | const FEEDBACK = l10n('FEEDBACK') 30 | const DESCRIPTION = l10n('DESCRIPTION') 31 | const SEARCH_PLACEHOLDER = l10n('SEARCH_PLACEHOLDER') 32 | const BANNER_TEXT = l10n('BANNER_TEXT') 33 | const TOC_TITLE = l10n('TOC_TITLE') 34 | const TOC_L10N_TEXT = l10n('TOC_L10N_TEXT') 35 | const BACK_TO_TOP = l10n('BACK_TO_TOP') 36 | const EDIT_TEXT = l10n('EDIT_TEXT') 37 | const GIT_TIMESTAMP = l10n('GIT_TIMESTAMP') 38 | 39 | const BANNER_KEY = 'microbolt-2' 40 | const BANNER_LINK = 'https://t.me/microbolt_official' 41 | const TOC_L10N_LINK = 'https://crowdin.com/project/microbolt' 42 | // End of l10n strings 43 | 44 | export const MOBLogo = (props) => ( 45 | 46 | 50 | 54 | 58 | 62 | 66 | 70 | 71 | ) 72 | 73 | export const TGLogo = (props) => ( 74 | 75 | 79 | 80 | ) 81 | 82 | export default { 83 | docsRepositoryBase: "https://github.com/microbolt-guide/microbolt/blob/main", 84 | feedback: { 85 | content() { 86 | const { locale } = useRouter() 87 | return FEEDBACK[locale] 88 | }, 89 | labels: 'feedback' 90 | }, 91 | head: function useHead() { 92 | const config = useConfig() 93 | const { locale } = useRouter() 94 | const description = 95 | config.frontMatter.description || DESCRIPTION[locale] 96 | const image = 97 | config.frontMatter.image || 98 | 'https://raw.githubusercontent.com/microbolt-guide/microbolt/main/public/img/microbolt-banner.webp' 99 | const title = `${config.title} – Microbolt` 100 | return ( 101 | <> 102 | {title} 103 | 104 | 105 | 106 | {/* Favicons, meta */} 107 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | ) 120 | }, 121 | i18n, 122 | logo: ( 123 | <> 124 | 125 | 128 | Microbolt 129 | 130 | 131 | ), 132 | project: { 133 | link: 'https://github.com/microbolt-guide/microbolt' 134 | }, 135 | chat: { 136 | link: 'https://t.me/microbolt_official', 137 | icon: 138 | }, 139 | search: { 140 | placeholder() { 141 | const { locale } = useRouter() 142 | return SEARCH_PLACEHOLDER[locale] 143 | } 144 | }, 145 | banner: { 146 | dismissible: true, 147 | key: BANNER_KEY, 148 | content() { 149 | const { locale } = useRouter() 150 | return ( 151 | {BANNER_TEXT[locale]} 152 | ) 153 | } 154 | }, 155 | sidebar: { 156 | defaultMenuCollapseLevel: 1, 157 | autoCollapse: true, 158 | toggleButton: true 159 | }, 160 | toc: { 161 | title() { 162 | const { locale } = useRouter() 163 | return TOC_TITLE[locale] 164 | }, 165 | backToTop: function BackToTop() { 166 | const { locale } = useRouter() 167 | return BACK_TO_TOP[locale] 168 | }, 169 | extraContent() { 170 | const { locale } = useRouter() 171 | return ( 172 | 177 | {TOC_L10N_TEXT[locale]} 178 | 179 | ) 180 | } 181 | }, 182 | editLink: { 183 | content() { 184 | const { locale } = useRouter() 185 | return EDIT_TEXT[locale] 186 | } 187 | }, 188 | navigation: { 189 | prev: true, 190 | next: true 191 | }, 192 | gitTimestamp: function useGitTimestamp({ timestamp }) { 193 | const { locale } = useRouter() 194 | return ( 195 | <> 196 | {GIT_TIMESTAMP[locale]}{' '} 197 | 204 | 205 | ) 206 | }, 207 | footer: { 208 | content: ( 209 | 210 | Made with Notepad 211 | Freeware Guide 212 | Get Firefox 213 | Linux powered 214 | Netscape NOW 215 | 216 | ) 217 | } 218 | } -------------------------------------------------------------------------------- /pages/en/docs/system/privacy.mdx: -------------------------------------------------------------------------------- 1 | import { Callout, Tabs } from 'nextra/components' 2 | import { FAQBox } from '@components' 3 | 4 | # Privacy 5 | 6 | We configure Tor and I2P to run your node anonymously. 7 | 8 | Running your own Bitcoin and Lightning node at home makes you a direct, 9 | sovereign peer on the Bitcoin network. However, if not configured without 10 | privacy in mind, it also tells the world that there is someone with Bitcoin at 11 | that address. 12 | 13 | We'll also make it easy to connect to your node from outside your home network 14 | as an added benefit. 15 | 16 | True, it's only your IP address that is revealed, but using services like 17 | [iplocation.net](https://www.iplocation.net), your physical address can be 18 | determined quite accurately. Especially with Lightning, your IP address would be 19 | widely used. We need to make sure that you keep your privacy. 20 | 21 | ## Tor Project 22 | 23 | We use Tor, a free software built by the 24 | [Tor Project](https://www.torproject.org). It allows you to anonymize internet 25 | traffic by routing it through a network of nodes, hiding your location and usage 26 | profile. 27 | 28 | It is called "Tor" for "The Onion Router": information is routed through many 29 | hops and encrypted multiple times. Each node decrypts only the layer of 30 | information addressed to it, learning only the previous and the next hop of the 31 | whole route. The data package is peeled like an onion until it reaches the final 32 | destination. 33 | 34 | ### Preparation 35 | 36 | Create `tor` group and user 37 | 38 | ```sh copy 39 | $SU addgroup -S tor 40 | ``` 41 | 42 | ```sh copy 43 | $SU adduser \ 44 | -S \ 45 | -D \ 46 | -H \ 47 | -h /dev/null \ 48 | -s /sbin/nologin \ 49 | -G tor \ 50 | -g tor \ 51 | tor 52 | ``` 53 | 54 | ### Install 55 | 56 | ```sh copy 57 | $SU apk add tor 58 | ``` 59 | 60 | ### Tor configuration 61 | 62 | Bitcoin client will communicate directly with the Tor daemon to route all 63 | traffic through the Tor network. We need to enable Tor to accept instructions 64 | through its control port, with the proper authentication. 65 | 66 | * Edit the Tor configuration 67 | 68 | ```sh copy 69 | $SU cp /etc/tor/torrc.sample /etc/tor/torrc 70 | $SU $EDITOR /etc/tor/torrc 71 | ``` 72 | 73 | * Uncomment the following lines 74 | 75 | ```conf filename="/etc/tor/torrc" {4,8} 76 | ... 77 | ## The port on which Tor will listen for local connections from Tor 78 | ## controller applications, as documented in control-spec.txt. 79 | ControlPort 9051 80 | ## If you enable the controlport, be sure to enable one of these 81 | ## authentication methods, to prevent attackers from accessing it. 82 | #HashedControlPassword 24:972860B76453A77B40CA2BB8C1A7982072093276A3D701AD685353 83 | CookieAuthentication 1 84 | 85 | ############### This section is just for location-hidden services ### 86 | ... 87 | ``` 88 | 89 | * Add under `CookieAuthentication 1` 90 | 91 | ```conf copy filename="/etc/tor/torrc" 92 | CookieAuthFile /var/lib/tor/control_auth_cookie 93 | CookieAuthFileGroupReadable 1 94 | DataDirectoryGroupReadable 1 95 | ``` 96 | 97 | * Start Tor and add service to runlevel 98 | 99 | ```sh copy 100 | $SU rc-service tor start 101 | $SU rc-update add tor default 102 | ``` 103 | 104 | * Ensure that the Tor service is working and listening at the default ports 105 | `9050` and `9051` 106 | 107 | ```sh copy 108 | $SU netstat -lntup | grep LISTEN | grep tor 109 | ``` 110 | 111 | ```output filename="output" 112 | tcp 0 0 127.0.0.1:9051 0.0.0.0:* LISTEN 3359/tor 113 | tcp 0 0 127.0.0.1:9050 0.0.0.0:* LISTEN 3359/tor 114 | ``` 115 | 116 | * Check the logs to see Tor in real time updates output logs. Exit with `Ctrl-C` 117 | 118 | ```sh copy 119 | $SU tail -f /var/log/tor/notices.log 120 | ``` 121 | 122 | Not all network traffic is routed over the Tor network. But we now have the base 123 | to configure sensitive applications to use it. 124 | 125 | 126 | If you want to log into your Microbolt with SSH when you're away, you can easily 127 | do so by adding a Tor hidden service. This makes "calling home" very easy, 128 | without the need to configure anything on your internet router. 129 | 130 | {

Server

} 131 | 132 | * Add the following lines in the "location hidden services" section, below 133 | "`## This section is just for location-hidden services ##`" in the torrc file 134 | 135 | 136 | It's interesting to put the same port as done on `dropbear`/`openssh`, default 137 | `22` 138 | 139 | 140 | ```sh copy 141 | $SU $EDITOR /etc/tor/torrc 142 | ``` 143 | 144 | ```conf copy filename="/etc/tor/torrc" {5} 145 | # Hidden Service SSH server 146 | HiddenServiceDir /var/lib/tor/ssh/ 147 | HiddenServiceVersion 3 148 | HiddenServicePoWDefensesEnabled 1 149 | HiddenServicePort 2222 127.0.0.1:2222 150 | ``` 151 | 152 | * Reload the Tor configuration to apply the configuration 153 | 154 | ```sh copy 155 | $SU rc-service tor reload 156 | ``` 157 | 158 | * Get the SSH Onion address 159 | 160 | ```sh copy 161 | $SU cat /var/lib/tor/ssh/hostname 162 | ``` 163 | 164 | ```output filename="output" 165 | abcdefg..............xyz.onion 166 | ``` 167 | 168 | * Save the Tor address in a secure location, e.g. your password manager 169 | 170 | {

Client

} 171 | 172 | You also need to have Tor installed on your regular computer where you start the 173 | SSH connection. Usage of SSH over Tor differs by client and operating system. 174 | 175 | 176 | 177 | Popular tools like `torify` or `torsocks` are not available on Windows, and 178 | `torifier` are abandoned. 179 | 180 | To work around this, first, make sure Tor is installed and running on your 181 | Windows. Run as admin: 182 | 183 | 184 | First you need to install [chocolatey](https://chocolatey.org/install) 185 | 186 | 187 | ```sh copy 188 | choco install tor 189 | choco install nmap --version=7.92.0.20220321 190 | tor --service start 191 | ``` 192 | 193 | Check tor service are working 194 | 195 | ```sh copy 196 | netstat -aon | findstr ":9050" 197 | ``` 198 | 199 | ```output filename="output" 200 | TCP 127.0.0.1:9050 0.0.0.0:0 LISTENING 23656 201 | ``` 202 | 203 | You can SSH to your PC "out of the box" with the following proxy command: 204 | 205 | ```sh copy 206 | ssh ` 207 | -o "ProxyCommand ncat --proxy-type socks5 --proxy 127.0.0.1:9050 %h %p" ` 208 | satoshi@abcdefg..............xyz.onion -p 2222 209 | ``` 210 | 211 | * For a more permanent solution, add these six lines below to your local SSH 212 | config file. Choose any HOSTNICKNAME you want, save, and exit 213 | 214 | ```sh copy 215 | notepad .ssh/config 216 | ``` 217 | 218 | ```conf filename="~/.ssh/config" 219 | Host HOSTNICKNAME 220 | Hostname abcdefg..............xyz.onion 221 | User satoshi 222 | Port 2222 223 | CheckHostIP no 224 | ProxyCommand ncat --proxy-type socks5 --proxy 127.0.0.1:9050 %h %p 225 | ``` 226 | 227 | * Restart Tor 228 | 229 | ```sh copy 230 | tor --service stop 231 | tor --service start 232 | ``` 233 | 234 | * You should now be able to SSH to your PC with 235 | 236 | ```sh copy 237 | ssh HOSTNICKNAME 238 | ``` 239 | 240 | 241 | Using `torify` or `torsocks` may not work due to Apple's 242 | _System Integrity Protection (SIP)_ which will deny access to `/usr/bin/ssh`. 243 | 244 | To work around this, first, make sure Tor is installed and running on your Mac: 245 | 246 | 247 | First you need to install [homebrew](https://brew.sh/) 248 | 249 | 250 | ```sh copy 251 | brew install tor && brew services start tor 252 | ``` 253 | 254 | You can SSH to your PC "out of the box" with the following proxy command: 255 | 256 | ```sh 257 | ssh \ 258 | -o "ProxyCommand nc -X 5 -x 127.0.0.1:9050 %h %p" \ 259 | satoshi@abcdefg..............xyz.onion -p 2222 260 | ``` 261 | 262 | * For a more permanent solution, add these six lines below to your local SSH 263 | config file. Choose any HOSTNICKNAME you want, save, and exit 264 | 265 | ```sh copy 266 | vi .ssh/config 267 | ``` 268 | 269 | ```conf filename="~/.ssh/config" 270 | Host HOSTNICKNAME 271 | Hostname abcdefg..............xyz.onion 272 | User satoshi 273 | Port 2222 274 | CheckHostIP no 275 | ProxyCommand /usr/bin/nc -x localhost:9050 %h %p 276 | ``` 277 | 278 | * Restart Tor 279 | 280 | ```sh copy 281 | brew services restart tor 282 | ``` 283 | 284 | * You should now be able to SSH to your PC with 285 | 286 | ```sh copy 287 | ssh HOSTNICKNAME 288 | ``` 289 | 290 | 291 | * Use `torify` or `torsocks`, both work similarly; just use whatever you have 292 | available 293 | 294 | ```sh 295 | torify ssh admin@abcdefg..............xyz.onion -p 2222 296 | ``` 297 | 298 | ```sh 299 | torsocks ssh admin@abcdefg..............xyz.onion -p 2222 300 | ``` 301 | 302 | 303 |
304 | 305 | ## I2P Project 306 | 307 | [I2P](https://geti2p.net) is a universal anonymous network layer. All 308 | communications over I2P are anonymous and end-to-end encrypted, participants 309 | don't reveal their real IP addresses. I2P allows people from all around the 310 | world to communicate and share information without restrictions. 311 | 312 | I2P client is software used for building and using anonymous I2P networks. Such 313 | networks are commonly used for anonymous peer-to-peer applications (filesharing, 314 | cryptocurrencies) and anonymous client-server applications (websites, instant 315 | messengers, chat-servers). 316 | 317 | We are to use [i2pd](https://i2pd.readthedocs.io/en/latest/) (I2P Daemon), a 318 | full-featured C++ implementation of the I2P client, as a Tor network complement. 319 | 320 | ### I2P installation 321 | 322 | ```sh copy 323 | $SU apk add i2pd 324 | ``` 325 | 326 | * Start the i2p service and add to runlevel 327 | 328 | ```sh copy 329 | $SU rc-service i2pd start 330 | $SU rc-update add i2pd default 331 | ``` 332 | * Ensure that the i2pd service is working and listening at the default ports 333 | 334 | ```sh copy 335 | $SU netstat -lntup | grep LISTEN | grep i2pd 336 | ``` 337 | 338 | ```output filename="output" 339 | tcp 0 0 127.0.0.1:4447 0.0.0.0:* LISTEN 3571/i2pd 340 | tcp 0 0 127.0.0.1:4444 0.0.0.0:* LISTEN 3571/i2pd 341 | tcp 0 0 127.0.0.1:7656 0.0.0.0:* LISTEN 3571/i2pd 342 | tcp 0 0 0.0.0.0:26697 0.0.0.0:* LISTEN 3571/i2pd 343 | tcp 0 0 127.0.0.1:6668 0.0.0.0:* LISTEN 3571/i2pd 344 | tcp 0 0 127.0.0.1:7070 0.0.0.0:* LISTEN 3571/i2pd 345 | ``` 346 | 347 | * See `i2p` in action by monitoring its log file. Exit with `Ctrl-C` 348 | 349 | ```sh copy 350 | $SU tail -f /var/log/i2pd/i2pd.log 351 | ``` -------------------------------------------------------------------------------- /pages/ca/docs/system/privacy.mdx: -------------------------------------------------------------------------------- 1 | import { Callout, Tabs } from 'nextra/components' 2 | import { FAQBox } from '@components' 3 | 4 | # Privacitat 5 | 6 | Configurem Tor i I2P per executar el vostre node de manera anònima. 7 | 8 | Fer funcionar el vostre propi node Bitcoin i Lightning a casa us converteix en 9 | un parell directe i sobirà de la xarxa Bitcoin. Tanmateix, si no es configura 10 | sense tenir en compte la privadesa, també diu al món que hi ha algú amb Bitcoin 11 | a aquesta adreça. 12 | 13 | També us facilitarem la connexió al vostre node des de fora de la vostra xarxa 14 | domèstica com a avantatge addicional. 15 | 16 | És cert que només es revela la vostra adreça IP, però utilitzant serveis com 17 | [iplocation.net](https://www.iplocation.net), la vostra adreça física es pot 18 | determinar amb força precisió. Especialment amb Lightning, la vostra adreça IP 19 | seria àmpliament utilitzada. Hem d'assegurar-nos que mantingueu la vostra 20 | privadesa. 21 | 22 | ## Projecte Tor 23 | 24 | Utilitzem Tor, un programari lliure creat pel 25 | [Projecte Tor](https://www.torproject.org). Us permet anonimitzar el trànsit 26 | d'Internet encaminant-lo a través d'una xarxa de nodes, amagant la vostra 27 | ubicació i perfil d'ús. 28 | 29 | Es diu "Tor" per "The Onion Router": la informació s'encamina a través de molts 30 | salts i es xifra diverses vegades. Cada node desxifra només la capa d'informació 31 | adreçada a ell, aprenent només el salt anterior i el següent de tota la ruta. El 32 | paquet de dades es pela com una ceba fins que arriba a la destinació final. 33 | 34 | ### Preparatius 35 | 36 | Crea un grup i un usuari `tor` 37 | 38 | ```sh copy 39 | $SU addgroup -S tor 40 | ``` 41 | 42 | ```sh copy 43 | $SU adduser \ 44 | -S \ 45 | -D \ 46 | -H \ 47 | -h /dev/null \ 48 | -s /sbin/nologin \ 49 | -G tor \ 50 | -g tor \ 51 | tor 52 | ``` 53 | 54 | ### Instal·lació 55 | 56 | ```sh copy 57 | $SU apk add tor 58 | ``` 59 | 60 | ### Configuració de Tor 61 | 62 | El client Bitcoin es comunicarà directament amb el 'daemon' Tor per encaminar 63 | tot el trànsit a través de la xarxa Tor. Hem d'habilitar Tor perquè accepti 64 | instruccions a través del seu port de control, amb l'autenticació adequada. 65 | 66 | * Editeu la configuració de Tor 67 | 68 | ```sh copy 69 | $SU cp /etc/tor/torrc.sample /etc/tor/torrc 70 | $SU $EDITOR /etc/tor/torrc 71 | ``` 72 | 73 | * Descomenteu les següents línies 74 | 75 | ```conf filename="/etc/tor/torrc" {4,8} 76 | ... 77 | ## The port on which Tor will listen for local connections from Tor 78 | ## controller applications, as documented in control-spec.txt. 79 | ControlPort 9051 80 | ## If you enable the controlport, be sure to enable one of these 81 | ## authentication methods, to prevent attackers from accessing it. 82 | #HashedControlPassword 24:972860B76453A77B40CA2BB8C1A7982072093276A3D701AD685353 83 | CookieAuthentication 1 84 | 85 | ############### This section is just for location-hidden services ### 86 | ... 87 | ``` 88 | 89 | * Afegiu sota `Cookie Authentication 1` 90 | 91 | ```conf copy filename="/etc/tor/torrc" 92 | CookieAuthFile /var/lib/tor/control_auth_cookie 93 | CookieAuthFileGroupReadable 1 94 | DataDirectoryGroupReadable 1 95 | ``` 96 | 97 | * Inicieu Tor i afegiu el servei al nivell d'execució 98 | 99 | ```sh copy 100 | $SU rc-service tor start 101 | $SU rc-update add tor default 102 | ``` 103 | 104 | * Assegureu-vos que el servei Tor funciona i escolta als ports predeterminats 105 | `9050` i `9051` 106 | 107 | ```sh copy 108 | $SU netstat -lntup | grep LISTEN | grep tor 109 | ``` 110 | 111 | ```output filename="output" 112 | tcp 0 0 127.0.0.1:9051 0.0.0.0:* LISTEN 3359/tor 113 | tcp 0 0 127.0.0.1:9050 0.0.0.0:* LISTEN 3359/tor 114 | ``` 115 | 116 | * Comproveu els registres per veure els registres de sortida de les 117 | actualitzacions de Tor en temps real. Sortiu amb `Ctrl-C` 118 | 119 | ```sh copy 120 | $SU tail -f /var/log/tor/notices.log 121 | ``` 122 | 123 | No tot el trànsit de xarxa s'encamina a través de la xarxa Tor. Però ara tenim 124 | la base per configurar aplicacions sensibles per utilitzar-la. 125 | 126 | 127 | Si voleu iniciar sessió al vostre Microbolt amb SSH quan no sou a casa, podeu 128 | fer-ho fàcilment afegint un servei ocult Tor. Això fa que "trucar a casa" sigui 129 | molt fàcil, sense necessitat de configurar res al vostre encaminador d'Internet. 130 | 131 | {

Servidor

} 132 | 133 | * Afegiu les línies següents a la secció "serveis d'ubicació ocults", a sota de 134 | "`## This section is just for location-hidden services ##`" al fitxer torrc 135 | 136 | 137 | És interessant posar el mateix port que es fa a `dropbear`/`openssh`, per 138 | defecte `22` 139 | 140 | 141 | ```sh copy 142 | $SU $EDITOR /etc/tor/torrc 143 | ``` 144 | 145 | ```conf copy filename="/etc/tor/torrc" {5} 146 | # Hidden Service SSH server 147 | HiddenServiceDir /var/lib/tor/ssh/ 148 | HiddenServiceVersion 3 149 | HiddenServicePoWDefensesEnabled 1 150 | HiddenServicePort 2222 127.0.0.1:2222 151 | ``` 152 | 153 | * Torneu a carregar la configuració de Tor per aplicar la configuració 154 | 155 | ```sh copy 156 | $SU rc-service tor reload 157 | ``` 158 | 159 | * Obteniu l'adreça SSH Onion 160 | 161 | ```sh copy 162 | $SU cat /var/lib/tor/ssh/hostname 163 | ``` 164 | 165 | ```output filename="output" 166 | abcdefg..............xyz.onion 167 | ``` 168 | 169 | * Deseu l'adreça Tor en una ubicació segura, p.ex. el vostre gestor de 170 | contrasenyes 171 | 172 | {

Client

} 173 | 174 | També heu de tenir Tor instal·lat al vostre ordinador habitual on inicieu la 175 | connexió SSH. L'ús de SSH a Tor difereix segons el client i el sistema operatiu. 176 | 177 | 178 | 179 | Les eines populars com `torify` o `torsocks` no estan disponibles a Windows i 180 | `torifier` esta abandonat. 181 | 182 | Per solucionar-ho, primer, assegureu-vos que Tor estigui instal·lat i funcionant 183 | al vostre Windows. Executeu com a administrador: 184 | 185 | 186 | Primer heu d'instal·lar [chocolatey](https://chocolatey.org/install) 187 | 188 | 189 | ```sh copy 190 | choco install tor 191 | choco install nmap --version=7.92.0.20220321 192 | tor --service start 193 | ``` 194 | 195 | Comproveu que el servei funcioni 196 | 197 | ```sh copy 198 | netstat -aon | findstr ":9050" 199 | ``` 200 | 201 | ```output filename="output" 202 | TCP 127.0.0.1:9050 0.0.0.0:0 LISTENING 23656 203 | ``` 204 | 205 | Podeu fer SSH al vostre ordinador "out of the box" amb la següent comanda de 206 | proxy: 207 | 208 | ```sh copy 209 | ssh ` 210 | -o "ProxyCommand ncat --proxy-type socks5 --proxy 127.0.0.1:9050 %h %p" ` 211 | satoshi@abcdefg..............xyz.onion -p 2222 212 | ``` 213 | 214 | * Per obtenir una solució més permanent, afegiu aquestes sis línies a 215 | continuació al fitxer de configuració SSH local. Trieu qualsevol HOSTNICKNAME 216 | que vulgueu, deseu i sortiu 217 | 218 | ```sh copy 219 | notepad .ssh/config 220 | ``` 221 | 222 | ```conf filename="~/.ssh/config" 223 | Host HOSTNICKNAME 224 | Hostname abcdefg..............xyz.onion 225 | User satoshi 226 | Port 2222 227 | CheckHostIP no 228 | ProxyCommand ncat --proxy-type socks5 --proxy 127.0.0.1:9050 %h %p 229 | ``` 230 | 231 | * Reinicieu Tor 232 | 233 | ```sh copy 234 | tor --service stop 235 | tor --service start 236 | ``` 237 | 238 | * Ara hauríeu de poder fer SSH al vostre PC amb 239 | 240 | ```sh copy 241 | ssh HOSTNICKNAME 242 | ``` 243 | 244 | 245 | L'ús de `torify` o `torsocks` pot no funcionar a causa de la 246 | _Protecció d'integritat del sistema (SIP)_ d'Apple que denegarà l'accés a 247 | `/usr/bin/ssh`. 248 | 249 | Per solucionar-ho, primer, assegureu-vos que Tor estigui instal·lat i en 250 | funcionament al vostre Mac: 251 | 252 | 253 | Primer heu d'instal·lar [homebrew](https://brew.sh/) 254 | 255 | 256 | ```sh copy 257 | brew install tor && brew services start tor 258 | ``` 259 | 260 | Podeu fer SSH al vostre ordinador "out of the box" amb la següent comanda de 261 | proxy: 262 | 263 | ```sh 264 | ssh \ 265 | -o "ProxyCommand nc -X 5 -x 127.0.0.1:9050 %h %p" \ 266 | satoshi@abcdefg..............xyz.onion -p 2222 267 | ``` 268 | 269 | * Per obtenir una solució més permanent, afegiu aquestes sis línies a 270 | continuació al fitxer de configuració SSH local. Trieu qualsevol HOSTNICKNAME 271 | que vulgueu, deseu i sortiu 272 | 273 | ```sh copy 274 | vi .ssh/config 275 | ``` 276 | 277 | ```conf filename="~/.ssh/config" 278 | Host HOSTNICKNAME 279 | Hostname abcdefg..............xyz.onion 280 | User satoshi 281 | Port 2222 282 | CheckHostIP no 283 | ProxyCommand /usr/bin/nc -x localhost:9050 %h %p 284 | ``` 285 | 286 | * Reinicieu Tor 287 | 288 | ```sh copy 289 | brew services restart tor 290 | ``` 291 | 292 | * Ara hauríeu de poder fer SSH al vostre PC amb 293 | 294 | ```sh copy 295 | ssh HOSTNICKNAME 296 | ``` 297 | 298 | 299 | * Utilitzeu `torify` o `torsocks`, tots dos funcionen de la mateixa manera; 300 | només utilitzeu el que tingueu disponible 301 | 302 | ```sh 303 | torify ssh admin@abcdefg..............xyz.onion -p 2222 304 | ``` 305 | 306 | ```sh 307 | torsocks ssh admin@abcdefg..............xyz.onion -p 2222 308 | ``` 309 | 310 | 311 |
312 | 313 | ## Projecte I2P 314 | 315 | [I2P](https://geti2p.net) és una capa de xarxa anònima universal. Totes les 316 | comunicacions a través d'I2P són anònimes i xifrades d'extrem a extrem, els 317 | participants no revelen les seves adreces IP reals. I2P permet a persones de tot 318 | el món comunicar-se i compartir informació sense restriccions. 319 | 320 | El client I2P és un programari utilitzat per construir i utilitzar xarxes I2P 321 | anònimes. Aquestes xarxes s'utilitzen habitualment per a aplicacions 322 | peer-to-peer anònimes (compartició de fitxers, criptomonedes) i aplicacions 323 | client-servidor anònimes (llocs web, missatgeria instantània, servidors de xat). 324 | 325 | Hem d'utilitzar [i2pd](https://i2pd.readthedocs.io/en/latest/) (I2P Daemon), una 326 | implementació C++ amb totes les funcions del client I2P, com a complement de 327 | xarxa Tor. 328 | 329 | ### Instal·lació d'I2P 330 | 331 | ```sh copy 332 | $SU apk add i2pd 333 | ``` 334 | 335 | * Inicieu el servei i2p i afegiu-lo al nivell d'execució 336 | 337 | ```sh copy 338 | $SU rc-service i2pd start 339 | $SU rc-update add i2pd default 340 | ``` 341 | * Assegureu-vos que el servei i2pd funciona i escolta als ports predeterminats 342 | 343 | ```sh copy 344 | $SU netstat -lntup | grep LISTEN | grep i2pd 345 | ``` 346 | 347 | ```output filename="output" 348 | tcp 0 0 127.0.0.1:4447 0.0.0.0:* LISTEN 3571/i2pd 349 | tcp 0 0 127.0.0.1:4444 0.0.0.0:* LISTEN 3571/i2pd 350 | tcp 0 0 127.0.0.1:7656 0.0.0.0:* LISTEN 3571/i2pd 351 | tcp 0 0 0.0.0.0:26697 0.0.0.0:* LISTEN 3571/i2pd 352 | tcp 0 0 127.0.0.1:6668 0.0.0.0:* LISTEN 3571/i2pd 353 | tcp 0 0 127.0.0.1:7070 0.0.0.0:* LISTEN 3571/i2pd 354 | ``` 355 | 356 | * Vegeu `i2p` en acció supervisant el seu fitxer de registre. Sortiu amb 357 | `Ctrl-C` 358 | 359 | ```sh copy 360 | $SU tail -f /var/log/i2pd/i2pd.log 361 | ``` -------------------------------------------------------------------------------- /pages/index.module.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap'); 2 | @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@100..900&display=swap'); 3 | 4 | .homeContent { 5 | display: flex; 6 | flex-direction: column; 7 | align-items: center; 8 | justify-content: center; 9 | min-height: calc(100vh - 236px); 10 | padding: 3rem 1rem; 11 | width: 100%; 12 | max-width: 90rem; 13 | margin: 0 auto; 14 | } 15 | 16 | /* hero */ 17 | .hero { 18 | display: flex; 19 | flex-direction: column; 20 | align-items: flex-start; 21 | gap: 1rem; 22 | margin-bottom: 5rem; 23 | width: 100%; 24 | max-width: 500px; 25 | } 26 | 27 | .title { 28 | font-size: 3.125rem; 29 | font-size: min(4.375rem, max(8vw, 2.5rem)); 30 | font-weight: 700; 31 | font-feature-settings: initial; 32 | letter-spacing: -.12rem; 33 | margin-left: -0.2rem; 34 | line-height: 1.1; 35 | background-image: linear-gradient(146deg, #181818, #757a7d 85%, #eee); 36 | color: transparent; 37 | background-clip: text; 38 | } 39 | 40 | :is(html[class~="dark"] .title) { 41 | background-image: linear-gradient(146deg, #eee, #757a7d 85%, #181818); 42 | } 43 | 44 | .subtitle { 45 | font-size: 1.3rem; 46 | font-size: min(1.3rem, max(3.5vw, 1.2rem)); 47 | font-feature-settings: initial; 48 | line-height: 1.6; 49 | } 50 | 51 | .button { 52 | display: inline-block; 53 | padding: 0.75rem 1.5rem; 54 | margin-top: 1rem; 55 | font-size: 1rem; 56 | font-weight: bold; 57 | color: #fff; 58 | background-color: hsl(var(--nextra-primary-hue), var(--nextra-primary-saturation), 25%); 59 | border: none; 60 | border-radius: 0.5rem; 61 | text-align: center; 62 | text-decoration: none; 63 | transition: background-color 0.3s ease; 64 | } 65 | 66 | .button:hover { 67 | background-color: hsl(var(--nextra-primary-hue), var(--nextra-primary-saturation), 40%); 68 | } 69 | 70 | /* testimonials */ 71 | .endorsements { 72 | display: flex; 73 | flex-direction: column; 74 | align-items: center; 75 | gap: 1rem; 76 | margin-top: 2rem; 77 | width: 100%; 78 | max-width: 500px; 79 | } 80 | 81 | .endorsements h1 { 82 | font-family: 'Open Sans', sans-serif; 83 | font-size: 3em; 84 | font-size: min(3rem, max(5vw, 1.5rem)); 85 | font-weight: 800; 86 | margin: 0; 87 | align-self: flex-start; 88 | } 89 | 90 | .endorsement { 91 | background: #f9f9f9; 92 | color: #333; 93 | padding: 1rem; 94 | border-radius: 0.5rem; 95 | box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); 96 | position: relative; 97 | width: 100%; 98 | text-align: center; 99 | } 100 | 101 | .endorsement::before { 102 | content: '“'; 103 | font-size: 3rem; 104 | color: #ccc; 105 | position: absolute; 106 | top: -1.5rem; 107 | left: 0rem; 108 | } 109 | 110 | :is(html[class~="dark"] .endorsement) { 111 | background: #333; 112 | color: #f9f9f9; 113 | box-shadow: 0 2px 4px rgba(61, 61, 61, 0.1); 114 | } 115 | 116 | .endorsement p { 117 | font-family: 'Open Sans', sans-serif; 118 | font-size: 1.3rem; 119 | font-size: min(1.3rem, max(3.5vw, 1.2rem)); 120 | line-height: 1.5; 121 | } 122 | 123 | /* bento */ 124 | .grid { 125 | display: grid; 126 | grid-gap: 0.5rem; 127 | 128 | align-self: center; 129 | 130 | width: 100%; 131 | max-width: 500px; 132 | 133 | grid-template-columns: repeat(4, 1fr); 134 | grid-template-rows: repeat(12, 2fr); 135 | 136 | grid-template-areas: 137 | "com com com com" 138 | "com com com com" 139 | "btc btc btc btc" 140 | "ord ord ord ord" 141 | "exp exp exp exp" 142 | "prx prx prx prx" 143 | "lnd lnd lnd lnd" 144 | "nos nos nos nos" 145 | "cld cld cld cld" 146 | "fwd fwd fwd fwd" 147 | "elc elc elc elc" 148 | "bil bil alp alp"; 149 | } 150 | 151 | .item { 152 | display: flex; 153 | flex-direction: column; 154 | justify-content: center; 155 | align-items: center; 156 | background: #eeeeee; 157 | color: #181818; 158 | border-radius: 1.5rem; 159 | outline: 1px solid #dddddd10; 160 | box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); 161 | } 162 | 163 | :is(html[class~="dark"] .item) { 164 | background: #181818; 165 | color: #eeeeee; 166 | box-shadow: 0 4px 8px rgba(61, 61, 61, 0.1); 167 | } 168 | 169 | .item img { 170 | width: 80%; 171 | height: auto; 172 | } 173 | 174 | .item h1, 175 | .item h2, 176 | .item h3, 177 | .item h4, 178 | .item .btcrpc { 179 | font-family: 'Open Sans', sans-serif; 180 | font-weight: bold; 181 | align-self: center; 182 | text-align: center; 183 | margin: 0; 184 | } 185 | 186 | .item h1 { 187 | font-size: clamp(3rem, 10vw, 3rem); 188 | } 189 | 190 | .item h2 { 191 | font-size: 5rem; 192 | } 193 | 194 | .item h3 { 195 | font-size: 1rem; 196 | } 197 | 198 | .item h4 { 199 | font-size: 1.5rem; 200 | } 201 | 202 | /* i18n */ 203 | .grid .item:nth-child(1) { 204 | grid-area: bil; 205 | background: linear-gradient(75deg, #428ecc 50%, #cfd8dc 50%); 206 | display: flex; 207 | flex-direction: row; 208 | justify-content: space-around; 209 | } 210 | 211 | .grid .item:nth-child(1) h1 { 212 | font-size: clamp(5.5rem, 10vw, 7.5rem); 213 | color: #eeeeee; 214 | } 215 | 216 | .grid .item:nth-child(1) .jp { 217 | font-family: 'Noto Sans JP', sans-serif; 218 | font-weight: 800; 219 | font-size: 4rem; 220 | color: #556f7b; 221 | } 222 | 223 | /* Bitcoin */ 224 | .grid .item:nth-child(2) { 225 | grid-area: btc; 226 | background-image: 227 | url("/assets/logos/bitcoin.svg"), 228 | url("/assets/logos/knots.png"); 229 | background-size: 200px; 230 | background-repeat: no-repeat; 231 | background-position: 232 | bottom -5em left -5em, 233 | top -5em right -5em; 234 | } 235 | 236 | /* ordinals */ 237 | .grid .item:nth-child(3) { 238 | grid-area: ord; 239 | } 240 | 241 | /* explorers */ 242 | .grid .item:nth-child(4) { 243 | grid-area: exp; 244 | background: linear-gradient(to top, #3cc9e2 25%, #9857ff 50%, #181818 50%); 245 | color: #eeeeee; 246 | position: relative; 247 | background-size: 100% 200%; 248 | background-position: center; 249 | } 250 | 251 | .grid .item:nth-child(4) h1, 252 | .grid .item:nth-child(4) .btcrpc { 253 | margin: auto; 254 | } 255 | 256 | @keyframes moveBackground { 257 | 0% { 258 | background-position: top; 259 | } 260 | 261 | 100% { 262 | background-position: center; 263 | } 264 | } 265 | 266 | .grid .item:nth-child(4):hover { 267 | animation: moveBackground 1s ease-in-out both; 268 | } 269 | 270 | .grid .item:nth-child(4)::after { 271 | content: ''; 272 | position: absolute; 273 | top: 10%; 274 | right: 1.5rem; 275 | width: 2rem; 276 | height: 80%; 277 | background-color: white; 278 | border-radius: 0.4rem; 279 | opacity: 0.4; 280 | } 281 | 282 | .grid .item:nth-child(4) .btcrpc img { 283 | width: 3rem; 284 | margin-right: 0.5rem; 285 | } 286 | 287 | .grid .item:nth-child(4) .btcrpc { 288 | display: flex; 289 | } 290 | 291 | .grid .item:nth-child(4) .mem { 292 | color: #181818; 293 | } 294 | 295 | /* reverse proxy */ 296 | .grid .item:nth-child(5) { 297 | grid-area: prx; 298 | } 299 | 300 | .grid .item:nth-child(5) img { 301 | flex-grow: 1; 302 | } 303 | 304 | :is(html[class~="dark"] .item img[src*="caddy-light.svg"]) { 305 | content: url("/assets/logos/caddy-dark.svg"); 306 | } 307 | 308 | /* comparision */ 309 | .grid .item:nth-child(6) { 310 | grid-area: com; 311 | line-height: 1; 312 | } 313 | 314 | .grid .item:nth-child(6) h1 { 315 | font-size: 12rem; 316 | background: linear-gradient(15deg, #ffb61a, #f7931a, #aa6511); 317 | background-clip: text; 318 | color: transparent; 319 | } 320 | 321 | /* lightning */ 322 | .grid .item:nth-child(7) { 323 | grid-area: lnd; 324 | } 325 | 326 | /* nostr */ 327 | .grid .item:nth-child(8) { 328 | grid-area: nos; 329 | } 330 | 331 | /* ansible */ 332 | .grid .item:nth-child(9) { 333 | grid-area: cld; 334 | } 335 | 336 | :is(html[class~="dark"] .item img[src*="ansible-light.png"]) { 337 | content: url("/assets/logos/ansible-dark.png"); 338 | } 339 | 340 | /* firewall */ 341 | .grid .item:nth-child(10) { 342 | grid-area: fwd; 343 | background-image: url("/assets/logos/wall.jpg"); 344 | background-size: 840px; 345 | background-repeat: no-repeat; 346 | background-position: center; 347 | } 348 | 349 | .grid .item:nth-child(10) h1 { 350 | font-size: clamp(5em, 10vw, 6rem); 351 | color: #eeeeee; 352 | } 353 | 354 | :is(html[class~="dark"] .grid .item:nth-child(10) h1) { 355 | color: #181818; 356 | } 357 | 358 | /* electrum */ 359 | .grid .item:nth-child(11) { 360 | grid-area: elc; 361 | background-image: 362 | url("/assets/logos/electrs.svg"), 363 | url("/assets/logos/fulcrum.png"); 364 | background-size: 200px; 365 | background-repeat: no-repeat; 366 | background-position: 367 | bottom -5em right -5em, 368 | top -5em left -5em; 369 | } 370 | 371 | .grid .item:nth-child(11) h1 { 372 | width: 90%; 373 | } 374 | 375 | /* alpine */ 376 | .grid .item:nth-child(12) { 377 | grid-area: alp; 378 | } 379 | 380 | .grid .item:nth-child(12) h1 { 381 | background: linear-gradient(15deg, #078ecc, #055980, #022333); 382 | background-clip: text; 383 | color: transparent; 384 | width: 90%; 385 | } 386 | 387 | /* responsive */ 388 | @media (width >=800px) { 389 | 390 | /* testimonials */ 391 | .hero, 392 | .endorsements { 393 | max-width: 800px; 394 | } 395 | 396 | /* bento */ 397 | .grid { 398 | grid-template-columns: repeat(5, 1fr); 399 | grid-template-rows: repeat(8, 1fr); 400 | 401 | grid-template-areas: 402 | "com com com com com" 403 | "com com com com com" 404 | "bil bil btc btc btc" 405 | "exp exp exp fwd fwd" 406 | "nos nos nos fwd fwd" 407 | "lnd lnd cld cld cld" 408 | "elc elc elc prx prx" 409 | "alp alp ord ord ord"; 410 | 411 | max-width: 800px; 412 | } 413 | 414 | /* i18n */ 415 | .grid .item:nth-child(1) h1 { 416 | font-size: 7.5rem; 417 | } 418 | 419 | .grid .item:nth-child(1) .jp { 420 | font-size: 5.5rem; 421 | } 422 | 423 | /* comparision */ 424 | .grid .item:nth-child(6) h1 { 425 | font-size: 17rem; 426 | } 427 | 428 | /* lightning & nostr */ 429 | .grid .item:nth-child(7) img, 430 | .grid .item:nth-child(8) img { 431 | width: 100%; 432 | height: auto; 433 | } 434 | } 435 | 436 | @media (width >=1400px) { 437 | 438 | /* testimonials */ 439 | .hero, 440 | .endorsements { 441 | max-width: 1400px; 442 | } 443 | 444 | .endorsement { 445 | max-width: 800px; 446 | } 447 | 448 | /* bento */ 449 | .grid { 450 | grid-template-columns: repeat(7, 1fr); 451 | grid-template-rows: repeat(9, 1fr); 452 | 453 | grid-template-areas: 454 | "bil btc btc ord ord exp exp" 455 | "bil btc btc ord ord exp exp" 456 | "prx prx com com com lnd lnd" 457 | "prx prx com com com lnd lnd" 458 | "prx prx com com com nos nos" 459 | "cld cld com com com nos nos" 460 | "cld cld com com com fwd fwd" 461 | "elc elc com com com fwd fwd" 462 | "elc elc alp alp alp fwd fwd"; 463 | 464 | max-height: 900px; 465 | max-width: 1400px; 466 | } 467 | 468 | /* i18n */ 469 | .grid .item:nth-child(1) h1 { 470 | font-size: 4.5rem; 471 | } 472 | 473 | .grid .item:nth-child(1) .jp { 474 | font-size: 3.5rem; 475 | } 476 | 477 | /* ordinals */ 478 | .grid .item:nth-child(3) img { 479 | width: 65%; 480 | height: auto; 481 | } 482 | 483 | /* explorers */ 484 | .grid .item:nth-child(4)::after { 485 | width: 1.5rem; 486 | } 487 | 488 | /* comparision */ 489 | .grid .item:nth-child(6) h1 { 490 | font-size: 17rem; 491 | } 492 | 493 | /* lightning & nostr */ 494 | .grid .item:nth-child(7) img, 495 | .grid .item:nth-child(8) img { 496 | width: 90%; 497 | height: auto; 498 | } 499 | } -------------------------------------------------------------------------------- /pages/en/docs/bitcoin/electrum_server/electrs.mdx: -------------------------------------------------------------------------------- 1 | import { Steps, Tabs } from 'nextra/components' 2 | import { FAQBox } from '@components' 3 | 4 | # Electrs 5 | 6 | We set up [Electrs](https://github.com/romanz/electrs) to serve as a full 7 | Electrum server for use with your Bitcoin software or hardware signing device. 8 | 9 | ![](/img/bitcoin/electrum-server/electrs.webp) 10 | 11 | ## Preparations 12 | 13 | 14 | ### Install dependencies 15 | 16 | These are build dependencies (safe to remove after installation, if you want) 17 | 18 | ```sh copy 19 | $SU apk add --virtual .build-deps cargo cargo-auditable clang-dev cmake git \ 20 | gnupg rocksdb-dev 21 | ``` 22 | 23 | These are runtime dependencies 24 | 25 | ```sh copy 26 | $SU apk add rocksdb 27 | ``` 28 | 29 | ### Create the `electrs` user/group 30 | 31 | ```sh copy 32 | $SU addgroup -S electrs 33 | ``` 34 | 35 | ```sh copy 36 | $SU adduser \ 37 | -S \ 38 | -D \ 39 | -H \ 40 | -h /dev/null \ 41 | -s /sbin/nologin \ 42 | -G electrs \ 43 | -g electrs \ 44 | electrs 45 | ``` 46 | 47 | ### Add `electrs` user to the `bitcoin` group 48 | 49 | ```sh copy 50 | $SU adduser electrs bitcoin 51 | ``` 52 | 53 | ### Add the user `satoshi` to the group `electrs` as well 54 | 55 | ```sh copy 56 | $SU adduser satoshi electrs && exec su -l satoshi 57 | ``` 58 | 59 | ### Reverse proxy 60 | 61 | In the [Security section](../../system/security#reverse-proxy), we already set 62 | up a reverse proxy. Now we can add the Electrum server configuration. 63 | 64 | * Enable the reverse proxy to add SSL/TLS encryption to the Electrum server 65 | communication. Create the configuration file and paste the following content 66 | 67 | 68 | 69 | ```sh copy 70 | $SU $EDITOR /etc/caddy/streams/electrum.caddy 71 | ``` 72 | 73 | ```nginx copy filename="/etc/caddy/streams/electrum.caddy" 74 | :50002 { 75 | route { 76 | tls 77 | proxy { 78 | upstream 127.0.0.1:50001 79 | } 80 | } 81 | } 82 | ``` 83 | 84 | * Reload Caddy 85 | 86 | ```sh copy 87 | $SU rc-service caddy reload 88 | ``` 89 | 90 | 91 | ```sh copy 92 | $SU $EDITOR /etc/nginx/streams-available/electrum-reverse-proxy.conf 93 | ``` 94 | 95 | ```nginx copy filename="/etc/nginx/streams-available/electrum-reverse-proxy.conf" 96 | upstream electrum { 97 | server 127.0.0.1:50001; 98 | } 99 | 100 | server { 101 | listen 50002 ssl; 102 | proxy_pass electrum; 103 | } 104 | ``` 105 | 106 | ```sh copy 107 | $SU ln \ 108 | -s \ 109 | ../streams-available/electrum-reverse-proxy.conf \ 110 | /etc/nginx/streams-enabled/electrum-reverse-proxy.conf 111 | ``` 112 | 113 | * Test and reload NGINX configuration 114 | 115 | ```sh copy 116 | $SU nginx -t 117 | $SU rc-service nginx restart 118 | ``` 119 | 120 | 121 | 122 | ### Firewall 123 | 124 | * Configure the firewall to allow incoming requests 125 | 126 | 127 | 128 | ```sh copy 129 | $SU $EDITOR /etc/awall/optional/electrum.json 130 | ``` 131 | 132 | ```json copy filename="/etc/awall/optional/electrum.json" 133 | { 134 | "description": "Allow Electrum SSL", 135 | 136 | "filter": [ 137 | { 138 | "in": "internet", 139 | "out": "_fw", 140 | "service": { "proto": "tcp", "port": 50002 }, 141 | "action": "accept", 142 | "conn-limit": { "count": 10, "interval": 60 } 143 | } 144 | ] 145 | } 146 | ``` 147 | 148 | * Enable it 149 | 150 | ```sh copy 151 | $SU awall enable electrum 152 | $SU awall activate 153 | ``` 154 | 155 | 156 | ```sh copy 157 | $SU ufw limit 50002/tcp comment 'Allow Electrum SSL' 158 | ``` 159 | 160 | 161 | 162 | 163 | ## Installation 164 | 165 | An easy and performant way to run an Electrum server is to use 166 | [Electrs](https://github.com/romanz/electrs), the Electrum Server in Rust. There 167 | are no binaries available, so we will compile the application ourselves. 168 | 169 | 170 | ### Download source code 171 | 172 | We get the latest release of the Electrs source code, verify it, compile it to 173 | an executable binary and install it. 174 | 175 | * Download the source code for the latest Electrs release. You can check the 176 | [release page](https://github.com/romanz/electrs/releases) to see if a newer 177 | release is available. Other releases might not have been properly tested with 178 | the rest of the Microbolt configuration, though. 179 | 180 | ```sh copy 181 | cd /tmp 182 | ``` 183 | 184 | ```sh copy 185 | VERSION=0.10.6 186 | ``` 187 | 188 | ```sh copy 189 | git clone --branch v$VERSION https://github.com/romanz/electrs.git && cd electrs 190 | ``` 191 | 192 | ### Signature check 193 | 194 | * To avoid using bad source code, verify that the release has been properly 195 | signed by the main developer [Roman Zeyde](https://github.com/romanz). 196 | 197 | ```sh copy 198 | wget -qO- https://romanzey.de/pgp.txt | gpg --import 199 | ``` 200 | 201 | ```sh copy 202 | git verify-tag v$VERSION 203 | ``` 204 | 205 | ### Configure, compile and install 206 | 207 | * Now compile the source code into an executable binary and install it. The 208 | compilation process can take up to one hour. 209 | 210 | ```sh copy 211 | cargo auditable build \ 212 | --bin electrs \ 213 | --features "metrics_process" \ 214 | --release \ 215 | --locked \ 216 | --jobs "$(nproc)" 217 | ``` 218 | 219 | ```sh copy 220 | $SU install -m 0755 -o root -g root -t /usr/bin ./target/release/electrs 221 | ``` 222 | 223 | ```sh copy 224 | $SU install -D -m 0660 -o electrs -g electrs ./doc/config_example.toml /etc/electrs/config.toml 225 | ``` 226 | 227 | ### Strip installed binaries 228 | 229 | ```sh copy 230 | $SU strip -v /usr/bin/electrs 231 | ``` 232 | 233 | ### Cleanup 234 | 235 | ```sh copy 236 | cd 237 | $SU rm -rf /tmp/electrs 238 | $SU apk del .build-deps 239 | ``` 240 | 241 | 242 | ## Configuration 243 | 244 | * Modify the config file with the following content 245 | 246 | ```sh copy 247 | $SU $EDITOR /etc/electrs/config.toml 248 | ``` 249 | 250 | ```toml filename="/etc/electrs/config.toml" {2,4,6,7} 251 | [...] 252 | cookie_file = "/var/lib/bitcoind/.cookie" 253 | [...] 254 | #db_dir = "/some/fast/storage/with/big/size" 255 | [...] 256 | daemon_dir = "/var/lib/bitcoind" 257 | ``` 258 | 259 | 260 | To use your Electrum server when you're on the go, you can easily create a Tor 261 | hidden service. This way, you can connect the BitBoxApp or Electrum wallet also 262 | remotely, or even share the connection details with friends and family. Note 263 | that the remote device needs to have Tor installed as well. 264 | 265 | * Add the following lines in the section for "location-hidden services" in the 266 | `torrc` file. 267 | 268 | ```sh copy 269 | $SU $EDITOR /etc/tor/torrc 270 | ``` 271 | 272 | ```sh copy filename="/etc/tor/torrc" 273 | # Hidden Service Electrum 274 | HiddenServiceDir /var/lib/tor/electrum/ 275 | HiddenServiceVersion 3 276 | HiddenServicePoWDefensesEnabled 1 277 | HiddenServicePort 50002 127.0.0.1:50002 278 | ``` 279 | 280 | * Reload Tor configuration and get your connection address. 281 | 282 | ```sh copy 283 | $SU rc-service tor reload 284 | $SU cat /var/lib/tor/electrum/hostname 285 | ``` 286 | 287 | ```output filename="output" 288 | abcdefg..............xyz.onion 289 | ``` 290 | 291 | * You should now be able to connect to your Electrum server remotely via Tor 292 | using your hostname and port `50002` 293 | 294 | 295 | ### Autostart on boot 296 | 297 | Electrs needs to start automatically on system boot. 298 | 299 | * Create the Electrs init.d unit and copy/paste the following configuration. 300 | Save and exit. 301 | 302 | ```sh copy 303 | $SU $EDITOR /etc/init.d/electrs 304 | ``` 305 | 306 | ```sh copy filename="/etc/init.d/electrs" 307 | #!/sbin/openrc-run 308 | 309 | : ${ELECTRS_CONFIGFILE:=/etc/electrs/config.toml} 310 | : ${ELECTRS_DATADIR:=/var/lib/electrs} 311 | : ${ELECTRS_LOGDIR:=/var/log/electrs} 312 | : ${ELECTRS_USER:=electrs} 313 | : ${ELECTRS_GROUP:=electrs} 314 | : ${ELECTRS_BIN:=/usr/bin/electrs} 315 | : ${ELECTRS_OPTS=${ELECTRS_OPTS}} 316 | : ${ELECTRS_SIGTERM_TIMEOUT:=600} 317 | 318 | ELECTRS_PIDDIR="/run/electrs" 319 | 320 | required_files="${ELECTRS_CONFIGFILE}" 321 | pidfile="${ELECTRS_PIDDIR}/${SVCNAME}.pid" 322 | retry="${ELECTRS_SIGTERM_TIMEOUT}" 323 | 324 | name="Electrs" 325 | description="Efficient re-implementation of Electrum Server in Rust" 326 | 327 | command="${ELECTRS_BIN}" 328 | command_args="--conf ${ELECTRS_CONFIGFILE} 329 | --skip-default-conf-files 330 | --db-dir ${ELECTRS_DATADIR} 331 | --timestamp 332 | --skip-block-download-wait 333 | ${ELECTRS_OPTS}" 334 | command_user="${ELECTRS_USER}:${ELECTRS_GROUP}" 335 | command_background="true" 336 | 337 | start_stop_daemon_args="--stdout ${ELECTRS_LOGDIR}/debug.log 338 | --stderr ${ELECTRS_LOGDIR}/debug.log" 339 | 340 | depend() { 341 | use bitcoind 342 | after bitcoind 343 | } 344 | 345 | start_pre() { 346 | checkpath --file --mode 0660 --owner "${command_user}" "${ELECTRS_CONFIGFILE}" 347 | checkpath --directory --mode 0750 --owner "${command_user}" "${ELECTRS_DATADIR}" 348 | checkpath --directory --mode 0755 --owner "${command_user}" "${ELECTRS_LOGDIR}" 349 | checkpath --directory --mode 0755 --owner "${command_user}" "${ELECTRS_PIDDIR}" 350 | checkconfig 351 | } 352 | 353 | start_post() { 354 | checkpath --file --owner "${command_user}" "${pidfile}" 355 | } 356 | 357 | checkconfig() { 358 | if ! grep -qs '^cookie_file = ' "${ELECTRS_CONFIGFILE}" 359 | then 360 | eerror "" 361 | eerror "ERROR: You must set a cookie_file path to run Electrs." 362 | eerror "The setting must appear in ${ELECTRS_CONFIGFILE}" 363 | eerror "" 364 | return 1 365 | fi 366 | } 367 | ``` 368 | 369 | * Enable execution permission 370 | 371 | ```sh copy 372 | $SU chmod +x /etc/init.d/electrs 373 | ``` 374 | 375 | ### Enable logrotate 376 | 377 | * Enter the complete next configuration. Save and exit 378 | 379 | ```sh copy 380 | $SU $EDITOR /etc/logrotate.d/electrs 381 | ``` 382 | 383 | ```sh copy filename="/etc/logrotate.d/electrs" 384 | /var/log/electrs/*.log { 385 | weekly 386 | missingok 387 | rotate 104 388 | compress 389 | delaycompress 390 | notifempty 391 | create 0640 electrs electrs 392 | sharedscripts 393 | postrotate 394 | kill -HUP `cat /run/electrs/electrs.pid` 395 | endscript 396 | } 397 | ``` 398 | 399 | * Test 400 | 401 | ```sh copy 402 | $SU logrotate /etc/logrotate.d/electrs --debug 403 | ``` 404 | 405 | ## Enable and start Electrs 406 | 407 | ```sh copy 408 | $SU rc-update add electrs 409 | ``` 410 | 411 | ```sh copy 412 | $SU rc-service electrs start 413 | ``` 414 | 415 | * Check the log to see Electrs output. Exit with `Ctrl-C` 416 | 417 | ```sh copy 418 | tail -f /var/log/electrs/debug.log 419 | ``` 420 | 421 | Electrs will now index the whole Bitcoin blockchain so that it can provide all 422 | necessary information to signing devices. With this, the signing devices you use 423 | no longer need to connect to any third-party server to communicate with the 424 | Bitcoin peer-to-peer network. 425 | 426 | ## For the future: Electrs upgrade 427 | 428 | Follow again [Electrs](./electrs) page replacing the environment variable 429 | `VERSION=x.xx` value for the latest if it has not been already changed in this 430 | guide. 431 | 432 | * Update the Electrs configuration if necessary (see release notes) 433 | 434 | ```sh copy 435 | $SU $EDITOR /etc/electrs/electrs.toml 436 | ``` 437 | 438 | * Restart the service to apply the changes 439 | 440 | ```sh copy 441 | $SU rc-service electrs restart 442 | ``` -------------------------------------------------------------------------------- /pages/en/docs/bitcoin/desktop_signing_app.mdx: -------------------------------------------------------------------------------- 1 | import { Callout, Tabs } from 'nextra/components' 2 | import { FAQBox } from '@components' 3 | 4 | # Desktop signing app 5 | 6 | We install [Sparrow Wallet](https://github.com/sparrowwallet/sparrow) on a 7 | computer and connect it to your Electrum server on your node for private bitcoin 8 | on-chain transactions. 9 | 10 | ![Sparrow wallet](/img/bitcoin/desktop-signing-app/sparrow.webp) 11 | 12 | ## Introduction 13 | 14 | Sparrow Wallet is an excellent software signing device to use with your 15 | Microbolt: it's reliable and transparently shows what it's doing under the hood. 16 | 17 | You can also use the following alternatives instead of Sparrow Wallet, according 18 | to your preferences and needs: 19 | 20 | * **Electrum Wallet Desktop**: a well-established poweruser wallet 21 | * **Specter Desktop**: a multisig-focused wallet (this wallet connects 22 | directly to Bitcoin Core) 23 | * **BitBoxApp**: wallet for users of BitBox hardware signing devices 24 | 25 | We will connect Sparrow Wallet to our own Electrum server as it is the most 26 | private option. For more information about the privacy and security trade-offs 27 | of the various server connection options, read the following 28 | [article](https://www.sparrowwallet.com/docs/best-practices.html) by Craig Raw, 29 | the author of the software. 30 | 31 | ![Sparrow stages](/img/bitcoin/desktop-signing-app/sparrow-stages.webp) 32 | 33 | We will set up Sparrow to connect to the Electum server within your local 34 | network. There is also an optional section that explains how to connect Sparrow 35 | to the Electrum server using Tor for when you're on the move. 36 | 37 | Sparrow also connects to a couple of external services to get the Bitcoin price 38 | and communicate with the Whirlpool server during CoinJoin operations. By 39 | default, it uses clearnet which leaks your computer IP address to these services 40 | and degrade your privacy. However, Sparrow can also connect to them using a Tor 41 | proxy. There is an optional section that explains how to set this proxy up. 42 | 43 | ## Installation 44 | 45 | On your local computer, download, verify and install Sparrow Wallet. 46 | 47 | * Using the instructions on [this page](https://www.sparrowwallet.com/download): 48 | * Download the required version for your OS 49 | * Download the manifest and manifest signature files 50 | * Verify the release 51 | * Install Sparrow Wallet 52 | 53 | ## Connection 54 | 55 | We now configure Sparrow to connect to your node within your local network. 56 | 57 | ### Launch Sparrow 58 | 59 | * Launch Sparrow 60 | * Read carefully the introductory messages and click on "Next" several times 61 | * When you reach the "Connecting to a Private Electrum Server" message, click on 62 | "Configure Server" 63 | 64 | ### Connect to Electrum server 65 | 66 | * Click on the "Private Electrum" tab 67 | * On the "URL" line, paste `nakamoto01`, `nakamoto01.local` or your node IP 68 | (e.g., `192.168.X.Y`) in the first box and `50002` in the second box 69 | * Enable SSL by clicking on the slider 70 | * Click on "Test Connection". A green tick should appear on the button and you 71 | should see something similar to the following output: 72 | 73 | ```output filename="output" 74 | Connected to [...] on protocol version 1.4 75 | [...] 76 | ``` 77 | 78 | ![Sparrow connect to Electrum](/img/bitcoin/desktop-signing-app/sparrow-electrum-no-proxy.webp) 79 | 80 | If there is a connection error message, try the following troubleshooting: 81 | 82 | * Make sure that your computer is not connected to any "guest" WiFi network at 83 | home. A "guest" WiFi network prevents the computer to connect to any other 84 | devices on the local network, such as your node. 85 | * If you have used Sparrow Wallet before on this computer, try to connect again 86 | after deleting the existing certificates that are stored within the `certs` 87 | folder: 88 | 89 | 90 | 91 | `%AppData%\Sparrow\certs` 92 | 93 | 94 | `~/.sparrow/certs` 95 | 96 | 97 | 98 | Let's go back to the signing app and check that it is connected to our own 99 | Electrum server. 100 | 101 | * Close the server configuration window 102 | * Check the icon in the bottom right corner of the window status icon 103 | * The icon should be a blue slider button and a mouse over should display 104 | 105 | `Connected to ssl://nakamoto01:50002 at height [...]` 106 | 107 | 🎉 You're set! Sparrow is now configured to connect to your Electrum server from 108 | within your local network. 109 | 110 | 111 | For maximal privacy, we highly recommend that you set up the Tor proxy when 112 | using Sparrow within your local network over clearnet. 113 | 114 | 115 | 116 | If you want to use Sparrow outside your home network, when you're on the go, you 117 | can use a connection over Tor. 118 | 119 | {

Server Tor address

} 120 | 121 | To connect via Tor to Electrum, the server must have a Tor hidden service 122 | connection address. Make sure you have set up a Tor hidden service as explained 123 | in the "Electrum server" guide. 124 | 125 | If you've already set up the hidden service but lost the connection address, 126 | you can obtain it again by running the following command on your node: 127 | 128 | ```sh copy 129 | $SU cat /var/lib/tor/electrum/hostname 130 | ``` 131 | 132 | ```output filename="output" 133 | abcd...1234.onion 134 | ``` 135 | 136 | {

Sparrow configuration

} 137 | 138 | * Open Sparrow 139 | * Navigate to the server configuration page by hitting `

` or `<,>` 140 | on macOS, then click on "Server" 141 | * Click on the "Private Electrum" tab. If you've already have an existing 142 | clearnet connection, click on "Edit Existing Connection". 143 | * On the "URL" line, paste your Tor hidden service connection address (e.g. 144 | "abcd...1234.onion") in the first box and `50002` in the second box 145 | * Enable SSL by clicking on the slider 146 | * Click on "Test Connection". A green tick should appear on the button and you 147 | should see something similar to the following output: 148 | 149 | ```output filename="output" 150 | Connected to [...] on protocol version 1.4 151 | [...] 152 | ``` 153 | 154 | ![Sparrow connect to Electrum via Tor](/img/bitcoin/desktop-signing-app/sparrow-electrum-tor-no-proxy.webp) 155 | 156 | 🎉 You're set! Sparrow is now configured to connect to your node over Tor and 157 | you can use it wherever you are. 158 | 159 | 160 | 161 | If a Tor proxy is configured in Sparrow, all external connections use Tor. This 162 | includes rate fetching, coinjoin etc - even transaction broadcasting is then 163 | done via external service (like blockstream.info) over Tor for additional 164 | privacy. Where-ever possible, the onion URLs of these services are used. 165 | 166 | Sparrow can be configured to use an internal (bundled) or external Tor proxy. To 167 | use the internal proxy, an onion Electrum server URL must be specified, and the 168 | 'Use Proxy' toggle must be off. Therefore, the following section only applies if 169 | you connect to your Electrum server using the local IP address within your local 170 | network (e.g., `nakamoto01`, `nakamoto01.local` or `192.168.X.Y`). If you're 171 | using a Tor onion address to connect to your node, then Sparrow is already using 172 | the internal proxy and there is nothing else to be done! 173 | 174 | If you're using a local connection, we recommend that you set up this external 175 | Tor proxy as described below for maximal privacy. 176 | 177 | {

Preparations on your computer

} 178 | 179 | For Sparrow Wallet to connect to the external services via Tor, Tor has to be 180 | running on your computer. You can run the Tor Browser and use port 9150 on 181 | localhost or else run Tor as a background service and use port 9050. 182 | 183 | Here, we'll use the Tor as a background service and port 9050 as it is easier 184 | and simpler to set up. 185 | 186 | 187 | 188 | To work around this, first, make sure Tor is installed and running on your 189 | Windows. Run as admin: 190 | 191 | 192 | First you need to install [chocolatey](https://chocolatey.org/install) 193 | 194 | 195 | ```sh copy 196 | choco install tor 197 | tor --service start 198 | ``` 199 | 200 | Check tor service are working 201 | 202 | ```sh copy 203 | netstat -aon | findstr ":9050" 204 | ``` 205 | 206 | ```output filename="output" 207 | TCP 127.0.0.1:9050 0.0.0.0:0 LISTENING 23656 208 | ``` 209 | 210 | 211 | To work around this, first, make sure Tor is installed and running on your Mac: 212 | 213 | 214 | First you need to install [homebrew](https://brew.sh/) 215 | 216 | 217 | ```sh copy 218 | brew install tor && brew services start tor 219 | ``` 220 | 221 | 222 | There are countless Linux distributions, but the instructions for some of the 223 | most notable Linux families are: 224 | 225 | * Alpine-based OS: `apk add tor` and `rc-service tor start` 226 | * Gentoo-based OS: `emerge net-vpn/tor` and `rc-service tor start` 227 | * openSUSE-based OS: `zypper install tor` and `systemctl start tor` 228 | * RedHat-based OS: `yum install tor` and `systemctl start tor` 229 | * Debian-based OS: `apt install tor` and `systemctl start tor` 230 | 231 | Done 232 | 233 | 234 | 235 | {

Signing app configuration

} 236 | 237 | * Open Sparrow 238 | * Navigate to the server configuration page by hitting `

` or `<,>` 239 | on macOS, then click on "Server" 240 | * Click on the "Private Electrum" tab. If you've already have an existing 241 | clearnet connection, click on "Edit Existing Connection". 242 | * Enable the Tor proxy by clicking on the "Use proxy" slider 243 | * On the "Proxy URL" line, paste `127.0.0.1` in the first box and either `9050` 244 | in the second box. 245 | * Click on "Test Connection". A green tick should appear on the button and you 246 | should see something similar to the following output: 247 | 248 | ```output filename="output" 249 | Connected to [...] on protocol version 1.4 250 | [...] 251 | ``` 252 | 253 | ![Tor daemon proxy usage](/img/bitcoin/desktop-signing-app/sparrow-tor-proxy.webp) 254 | 255 | Now, let's go back to the signing app and check that the proxy is working 256 | properly. 257 | 258 | * Close the server configuration window 259 | * Check the two icons in the bottom right corner of the signing app window 260 | status icons 261 | * The first icon should be grey, not red; and a mouse hover should display 262 | "External Tor proxy enabled" 263 | 264 | 🎉 You're set! Sparrow Wallet is now configured to use the Tor proxy when 265 | fetching the Bitcoin price and when communicating with the Whirlpool server 266 | during CoinJoins. 267 | 268 | 269 | ## Sparrow in action 270 | 271 | Congratulations, you have now a Bitcoin desktop signing app, capable of securing 272 | your bitcoin keys, running with your own trustless Bitcoin full node! 273 | 274 | Sparrow is a powerful signing app that allows you to use the most advanced 275 | features for securing your bitcoin keys and preserve your privacy. 276 | 277 | With Sparrow you can: 278 | 279 | * Connect any hardware signing device 280 | * "Send" and "receive" bitcoins 281 | * Have full control throughout the transaction creation and signing process: 282 | coin control, PSBT, labelling, byte level transaction viewer... 283 | * Create batched transactions to save on miner fees 284 | * Create multisig for improved security 285 | * Coinjoin your coins for improved privacy 286 | * Analyse your tansactions with the built-in blockchain explorer 287 | 288 | For more information, tutorials and support, visit the Sparrow documentation 289 | [webpage](https://sparrowwallet.com/docs) and their Telegram 290 | [group](https://t.me/sparrowwallet). 291 | 292 | ## For the future: Sparrow update 293 | 294 | Sparrow will automatically notify you when an update is available. Simply 295 | install the updates using the usual method for your OS. --------------------------------------------------------------------------------