Repository files navigation

substratum_node

Purpose

SubstratumNetwork is an open-source network that allows anyone to allocate spare computing resources to make the internet a free and fair place for the entire world. It is a worldwide collection of nodes that securely delivers content without the need of a VPN or Tor.

Because there's no single authority delivering or monitoring content, censorship and geo-restricted sites won't be an issue on SubstratumNetwork. It doesn't matter where you live or what content you're accessing, everyone in the world sees the exact same content.

SubstratumNode is the foundation of SubstratumNetwork.

It is what the average user runs to earn SUB and dedicate some of their computers' resources towards the network. People who run a SubstratumNode can be rewarded with cryptocurrency for each time they serve content.

SubstratumNodes work together to relay CORES packages and content on the network. When a user requests a site, nodes use artificial intelligence to find the most expedient and secure way to get the information to that user. Multiple nodes work to fulfill a single request in order to maintain a necessary level of anonymity.

Tools / Environment Setup

SubstratumNode software is written in Rust. We use rustup to install what we need (e.g. rustc, cargo, etc). Follow instructions here.

The node sub-project also uses Docker for a few things:

  • Running SubstratumNode needs to be able to listen on port 53, but Ubuntu 16.04 Desktop uses that port for something else. So, we created the Dockerfile and helper scripts in substratum_node/node/docker/linux_node/ to allow SubstratumNode to run on that platform. It isn't needed for running on Mac or Windows, or on Ubuntu 16.04 Server.
  • TestingDocker also offered a convenient way for us to run our end-to-end integration tests for Mac and Linux on CI. SubstratumNode needs to be started with root privileges in order to connect to certain ports (e.g. 53, 80). The Jenkins agent that runs on Windows has the needed privileges by default, but the agents that run on Mac and Linux do not. We created the Dockerfile in substratum_node/node/docker/integration_tests to work around this limitation.

You'll need an Internet connection when you build so that cargo can pull down dependencies.

How To

We build and run tests for SubstratumNode using bash scripts located in the ci directory of each sub-project. Use ci/all.sh at the top level to clean, build, and run tests for all sub-projects in one step. It will run the node integration tests as well, so if you're running on Mac or Linux make sure the Docker daemon is running. On Windows, we run this script in a git bash terminal.

Wondering where all our tests are? The convention in Rust is to write unit tests in same file as the source.

Run SubstratumNode locally

Note: Currently, your DNS must be manually set to 127.0.0.1 in order to route traffic through SubstratumNode. Find instructions for your platform here.

Once you've successfully built the node executable and completed the manual setup steps, you can run SubstratumNode locally from the command line:

<path to workspace>/substratum_node/node/target/release/node --dns_servers 8.8.8.8

In the above example, we're using Google's DNS, 8.8.8.8, but you can use your preferred DNS. If you can't choose just one favorite DNS, you can also specify multiple, separated by a comma (,).

Why do we send in dns_servers? SubstratumNodes still need to talk to the greater Internet. See the ProxyClient README for more information.

Disclosure

We run tests on every push to master on these platforms:

  • Ubuntu 16.04 Desktop 64-bit
  • MacOS High Sierra
  • Windows 10 64-bit

SubstratumNode doesn't reliably build on 32-bit Windows due to issues with the build tools for that platform. We recommend using a 64-bit version to build.

We do plan to release binaries that will run on 32-bit Windows, but they will likely be built on 64-bit Windows.

Copyright (c) 2017-2018, Substratum LLC (https://substratum.net) and/or its affiliates. All rights reserved.

About

WE ARE THE FOUNDATION OF THE DECENTRALIZED WEB.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

substratum_node

Purpose

SubstratumNetwork is an open-source network that allows anyone to allocate spare computing resources to make the internet a free and fair place for the entire world. It is a worldwide collection of nodes that securely delivers content without the need of a VPN or Tor.

Because there's no single authority delivering or monitoring content, censorship and geo-restricted sites won't be an issue on SubstratumNetwork. It doesn't matter where you live or what content you're accessing, everyone in the world sees the exact same content.

SubstratumNode is the foundation of SubstratumNetwork.

It is what the average user runs to earn SUB and dedicate some of their computers' resources towards the network. People who run a SubstratumNode can be rewarded with cryptocurrency for each time they serve content.

SubstratumNodes work together to relay CORES packages and content on the network. When a user requests a site, nodes use artificial intelligence to find the most expedient and secure way to get the information to that user. Multiple nodes work to fulfill a single request in order to maintain a necessary level of anonymity.

Tools / Environment Setup

SubstratumNode software is written in Rust. We use rustup to install what we need (e.g. rustc, cargo, etc). Follow instructions here.

The node sub-project also uses Docker for a few things:

  • Running SubstratumNode needs to be able to listen on port 53, but Ubuntu 16.04 Desktop uses that port for something else. So, we created the Dockerfile and helper scripts in substratum_node/node/docker/linux_node/ to allow SubstratumNode to run on that platform. It isn't needed for running on Mac or Windows, or on Ubuntu 16.04 Server.
  • TestingDocker also offered a convenient way for us to run our end-to-end integration tests for Mac and Linux on CI. SubstratumNode needs to be started with root privileges in order to connect to certain ports (e.g. 53, 80). The Jenkins agent that runs on Windows has the needed privileges by default, but the agents that run on Mac and Linux do not. We created the Dockerfile in substratum_node/node/docker/integration_tests to work around this limitation.

You'll need an Internet connection when you build so that cargo can pull down dependencies.

How To

We build and run tests for SubstratumNode using bash scripts located in the ci directory of each sub-project. Use ci/all.sh at the top level to clean, build, and run tests for all sub-projects in one step. It will run the node integration tests as well, so if you're running on Mac or Linux make sure the Docker daemon is running. On Windows, we run this script in a git bash terminal.

Wondering where all our tests are? The convention in Rust is to write unit tests in same file as the source.

Run SubstratumNode locally

Note: Currently, your DNS must be manually set to 127.0.0.1 in order to route traffic through SubstratumNode. Find instructions for your platform here.

Once you've successfully built the node executable and completed the manual setup steps, you can run SubstratumNode locally from the command line:

<path to workspace>/substratum_node/node/target/release/node --dns_servers 8.8.8.8

In the above example, we're using Google's DNS, 8.8.8.8, but you can use your preferred DNS. If you can't choose just one favorite DNS, you can also specify multiple, separated by a comma (,).

Why do we send in dns_servers? SubstratumNodes still need to talk to the greater Internet. See the ProxyClient README for more information.

Disclosure

We run tests on every push to master on these platforms:

  • Ubuntu 16.04 Desktop 64-bit
  • MacOS High Sierra
  • Windows 10 64-bit

SubstratumNode doesn't reliably build on 32-bit Windows due to issues with the build tools for that platform. We recommend using a 64-bit version to build.

We do plan to release binaries that will run on 32-bit Windows, but they will likely be built on 64-bit Windows.

Copyright (c) 2017-2018, Substratum LLC (https://substratum.net) and/or its affiliates. All rights reserved.

About

WE ARE THE FOUNDATION OF THE DECENTRALIZED WEB.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

substratum_node

Purpose

SubstratumNetwork is an open-source network that allows anyone to allocate spare computing resources to make the internet a free and fair place for the entire world. It is a worldwide collection of nodes that securely delivers content without the need of a VPN or Tor.

Because there's no single authority delivering or monitoring content, censorship and geo-restricted sites won't be an issue on SubstratumNetwork. It doesn't matter where you live or what content you're accessing, everyone in the world sees the exact same content.

SubstratumNode is the foundation of SubstratumNetwork.

It is what the average user runs to earn SUB and dedicate some of their computers' resources towards the network. People who run a SubstratumNode can be rewarded with cryptocurrency for each time they serve content.

SubstratumNodes work together to relay CORES packages and content on the network. When a user requests a site, nodes use artificial intelligence to find the most expedient and secure way to get the information to that user. Multiple nodes work to fulfill a single request in order to maintain a necessary level of anonymity.

Tools / Environment Setup

SubstratumNode software is written in Rust. We use rustup to install what we need (e.g. rustc, cargo, etc). Follow instructions here.

The node sub-project also uses Docker for a few things:

  • Running SubstratumNode needs to be able to listen on port 53, but Ubuntu 16.04 Desktop uses that port for something else. So, we created the Dockerfile and helper scripts in substratum_node/node/docker/linux_node/ to allow SubstratumNode to run on that platform. It isn't needed for running on Mac or Windows, or on Ubuntu 16.04 Server.
  • TestingDocker also offered a convenient way for us to run our end-to-end integration tests for Mac and Linux on CI. SubstratumNode needs to be started with root privileges in order to connect to certain ports (e.g. 53, 80). The Jenkins agent that runs on Windows has the needed privileges by default, but the agents that run on Mac and Linux do not. We created the Dockerfile in substratum_node/node/docker/integration_tests to work around this limitation.

You'll need an Internet connection when you build so that cargo can pull down dependencies.

How To

We build and run tests for SubstratumNode using bash scripts located in the ci directory of each sub-project. Use ci/all.sh at the top level to clean, build, and run tests for all sub-projects in one step. It will run the node integration tests as well, so if you're running on Mac or Linux make sure the Docker daemon is running. On Windows, we run this script in a git bash terminal.

Wondering where all our tests are? The convention in Rust is to write unit tests in same file as the source.

Run SubstratumNode locally

Note: Currently, your DNS must be manually set to 127.0.0.1 in order to route traffic through SubstratumNode. Find instructions for your platform here.

Once you've successfully built the node executable and completed the manual setup steps, you can run SubstratumNode locally from the command line:

<path to workspace>/substratum_node/node/target/release/node --dns_servers 8.8.8.8

In the above example, we're using Google's DNS, 8.8.8.8, but you can use your preferred DNS. If you can't choose just one favorite DNS, you can also specify multiple, separated by a comma (,).

Why do we send in dns_servers? SubstratumNodes still need to talk to the greater Internet. See the ProxyClient README for more information.

Disclosure

We run tests on every push to master on these platforms:

  • Ubuntu 16.04 Desktop 64-bit
  • MacOS High Sierra
  • Windows 10 64-bit

SubstratumNode doesn't reliably build on 32-bit Windows due to issues with the build tools for that platform. We recommend using a 64-bit version to build.

We do plan to release binaries that will run on 32-bit Windows, but they will likely be built on 64-bit Windows.

Copyright (c) 2017-2018, Substratum LLC (https://substratum.net) and/or its affiliates. All rights reserved.

About

WE ARE THE FOUNDATION OF THE DECENTRALIZED WEB.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

substratum_node

Purpose

SubstratumNetwork is an open-source network that allows anyone to allocate spare computing resources to make the internet a free and fair place for the entire world. It is a worldwide collection of nodes that securely delivers content without the need of a VPN or Tor.

Because there's no single authority delivering or monitoring content, censorship and geo-restricted sites won't be an issue on SubstratumNetwork. It doesn't matter where you live or what content you're accessing, everyone in the world sees the exact same content.

SubstratumNode is the foundation of SubstratumNetwork.

It is what the average user runs to earn SUB and dedicate some of their computers' resources towards the network. People who run a SubstratumNode can be rewarded with cryptocurrency for each time they serve content.

SubstratumNodes work together to relay CORES packages and content on the network. When a user requests a site, nodes use artificial intelligence to find the most expedient and secure way to get the information to that user. Multiple nodes work to fulfill a single request in order to maintain a necessary level of anonymity.

Tools / Environment Setup

SubstratumNode software is written in Rust. We use rustup to install what we need (e.g. rustc, cargo, etc). Follow instructions here.

The node sub-project also uses Docker for a few things:

  • Running SubstratumNode needs to be able to listen on port 53, but Ubuntu 16.04 Desktop uses that port for something else. So, we created the Dockerfile and helper scripts in substratum_node/node/docker/linux_node/ to allow SubstratumNode to run on that platform. It isn't needed for running on Mac or Windows, or on Ubuntu 16.04 Server.
  • TestingDocker also offered a convenient way for us to run our end-to-end integration tests for Mac and Linux on CI. SubstratumNode needs to be started with root privileges in order to connect to certain ports (e.g. 53, 80). The Jenkins agent that runs on Windows has the needed privileges by default, but the agents that run on Mac and Linux do not. We created the Dockerfile in substratum_node/node/docker/integration_tests to work around this limitation.

You'll need an Internet connection when you build so that cargo can pull down dependencies.

How To

We build and run tests for SubstratumNode using bash scripts located in the ci directory of each sub-project. Use ci/all.sh at the top level to clean, build, and run tests for all sub-projects in one step. It will run the node integration tests as well, so if you're running on Mac or Linux make sure the Docker daemon is running. On Windows, we run this script in a git bash terminal.

Wondering where all our tests are? The convention in Rust is to write unit tests in same file as the source.

Run SubstratumNode locally

Note: Currently, your DNS must be manually set to 127.0.0.1 in order to route traffic through SubstratumNode. Find instructions for your platform here.

Once you've successfully built the node executable and completed the manual setup steps, you can run SubstratumNode locally from the command line:

<path to workspace>/substratum_node/node/target/release/node --dns_servers 8.8.8.8

In the above example, we're using Google's DNS, 8.8.8.8, but you can use your preferred DNS. If you can't choose just one favorite DNS, you can also specify multiple, separated by a comma (,).

Why do we send in dns_servers? SubstratumNodes still need to talk to the greater Internet. See the ProxyClient README for more information.

Disclosure

We run tests on every push to master on these platforms:

  • Ubuntu 16.04 Desktop 64-bit
  • MacOS High Sierra
  • Windows 10 64-bit

SubstratumNode doesn't reliably build on 32-bit Windows due to issues with the build tools for that platform. We recommend using a 64-bit version to build.

We do plan to release binaries that will run on 32-bit Windows, but they will likely be built on 64-bit Windows.

Copyright (c) 2017-2018, Substratum LLC (https://substratum.net) and/or its affiliates. All rights reserved.

About

WE ARE THE FOUNDATION OF THE DECENTRALIZED WEB.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

substratum_node

Purpose

SubstratumNetwork is an open-source network that allows anyone to allocate spare computing resources to make the internet a free and fair place for the entire world. It is a worldwide collection of nodes that securely delivers content without the need of a VPN or Tor.

Because there's no single authority delivering or monitoring content, censorship and geo-restricted sites won't be an issue on SubstratumNetwork. It doesn't matter where you live or what content you're accessing, everyone in the world sees the exact same content.

SubstratumNode is the foundation of SubstratumNetwork.

It is what the average user runs to earn SUB and dedicate some of their computers' resources towards the network. People who run a SubstratumNode can be rewarded with cryptocurrency for each time they serve content.

SubstratumNodes work together to relay CORES packages and content on the network. When a user requests a site, nodes use artificial intelligence to find the most expedient and secure way to get the information to that user. Multiple nodes work to fulfill a single request in order to maintain a necessary level of anonymity.

Tools / Environment Setup

SubstratumNode software is written in Rust. We use rustup to install what we need (e.g. rustc, cargo, etc). Follow instructions here.

The node sub-project also uses Docker for a few things:

  • Running SubstratumNode needs to be able to listen on port 53, but Ubuntu 16.04 Desktop uses that port for something else. So, we created the Dockerfile and helper scripts in substratum_node/node/docker/linux_node/ to allow SubstratumNode to run on that platform. It isn't needed for running on Mac or Windows, or on Ubuntu 16.04 Server.
  • TestingDocker also offered a convenient way for us to run our end-to-end integration tests for Mac and Linux on CI. SubstratumNode needs to be started with root privileges in order to connect to certain ports (e.g. 53, 80). The Jenkins agent that runs on Windows has the needed privileges by default, but the agents that run on Mac and Linux do not. We created the Dockerfile in substratum_node/node/docker/integration_tests to work around this limitation.

You'll need an Internet connection when you build so that cargo can pull down dependencies.

How To

We build and run tests for SubstratumNode using bash scripts located in the ci directory of each sub-project. Use ci/all.sh at the top level to clean, build, and run tests for all sub-projects in one step. It will run the node integration tests as well, so if you're running on Mac or Linux make sure the Docker daemon is running. On Windows, we run this script in a git bash terminal.

Wondering where all our tests are? The convention in Rust is to write unit tests in same file as the source.

Run SubstratumNode locally

Note: Currently, your DNS must be manually set to 127.0.0.1 in order to route traffic through SubstratumNode. Find instructions for your platform here.

Once you've successfully built the node executable and completed the manual setup steps, you can run SubstratumNode locally from the command line:

<path to workspace>/substratum_node/node/target/release/node --dns_servers 8.8.8.8

In the above example, we're using Google's DNS, 8.8.8.8, but you can use your preferred DNS. If you can't choose just one favorite DNS, you can also specify multiple, separated by a comma (,).

Why do we send in dns_servers? SubstratumNodes still need to talk to the greater Internet. See the ProxyClient README for more information.

Disclosure

We run tests on every push to master on these platforms:

  • Ubuntu 16.04 Desktop 64-bit
  • MacOS High Sierra
  • Windows 10 64-bit

SubstratumNode doesn't reliably build on 32-bit Windows due to issues with the build tools for that platform. We recommend using a 64-bit version to build.

We do plan to release binaries that will run on 32-bit Windows, but they will likely be built on 64-bit Windows.

Copyright (c) 2017-2018, Substratum LLC (https://substratum.net) and/or its affiliates. All rights reserved.

About

WE ARE THE FOUNDATION OF THE DECENTRALIZED WEB.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

substratum_node

Purpose

SubstratumNetwork is an open-source network that allows anyone to allocate spare computing resources to make the internet a free and fair place for the entire world. It is a worldwide collection of nodes that securely delivers content without the need of a VPN or Tor.

Because there's no single authority delivering or monitoring content, censorship and geo-restricted sites won't be an issue on SubstratumNetwork. It doesn't matter where you live or what content you're accessing, everyone in the world sees the exact same content.

SubstratumNode is the foundation of SubstratumNetwork.

It is what the average user runs to earn SUB and dedicate some of their computers' resources towards the network. People who run a SubstratumNode can be rewarded with cryptocurrency for each time they serve content.

SubstratumNodes work together to relay CORES packages and content on the network. When a user requests a site, nodes use artificial intelligence to find the most expedient and secure way to get the information to that user. Multiple nodes work to fulfill a single request in order to maintain a necessary level of anonymity.

Tools / Environment Setup

SubstratumNode software is written in Rust. We use rustup to install what we need (e.g. rustc, cargo, etc). Follow instructions here.

The node sub-project also uses Docker for a few things:

  • Running SubstratumNode needs to be able to listen on port 53, but Ubuntu 16.04 Desktop uses that port for something else. So, we created the Dockerfile and helper scripts in substratum_node/node/docker/linux_node/ to allow SubstratumNode to run on that platform. It isn't needed for running on Mac or Windows, or on Ubuntu 16.04 Server.
  • TestingDocker also offered a convenient way for us to run our end-to-end integration tests for Mac and Linux on CI. SubstratumNode needs to be started with root privileges in order to connect to certain ports (e.g. 53, 80). The Jenkins agent that runs on Windows has the needed privileges by default, but the agents that run on Mac and Linux do not. We created the Dockerfile in substratum_node/node/docker/integration_tests to work around this limitation.

You'll need an Internet connection when you build so that cargo can pull down dependencies.

How To

We build and run tests for SubstratumNode using bash scripts located in the ci directory of each sub-project. Use ci/all.sh at the top level to clean, build, and run tests for all sub-projects in one step. It will run the node integration tests as well, so if you're running on Mac or Linux make sure the Docker daemon is running. On Windows, we run this script in a git bash terminal.

Wondering where all our tests are? The convention in Rust is to write unit tests in same file as the source.

Run SubstratumNode locally

Note: Currently, your DNS must be manually set to 127.0.0.1 in order to route traffic through SubstratumNode. Find instructions for your platform here.

Once you've successfully built the node executable and completed the manual setup steps, you can run SubstratumNode locally from the command line:

<path to workspace>/substratum_node/node/target/release/node --dns_servers 8.8.8.8

In the above example, we're using Google's DNS, 8.8.8.8, but you can use your preferred DNS. If you can't choose just one favorite DNS, you can also specify multiple, separated by a comma (,).

Why do we send in dns_servers? SubstratumNodes still need to talk to the greater Internet. See the ProxyClient README for more information.

Disclosure

We run tests on every push to master on these platforms:

  • Ubuntu 16.04 Desktop 64-bit
  • MacOS High Sierra
  • Windows 10 64-bit

SubstratumNode doesn't reliably build on 32-bit Windows due to issues with the build tools for that platform. We recommend using a 64-bit version to build.

We do plan to release binaries that will run on 32-bit Windows, but they will likely be built on 64-bit Windows.

Copyright (c) 2017-2018, Substratum LLC (https://substratum.net) and/or its affiliates. All rights reserved.

About

WE ARE THE FOUNDATION OF THE DECENTRALIZED WEB.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

substratum_node

Purpose

SubstratumNetwork is an open-source network that allows anyone to allocate spare computing resources to make the internet a free and fair place for the entire world. It is a worldwide collection of nodes that securely delivers content without the need of a VPN or Tor.

Because there's no single authority delivering or monitoring content, censorship and geo-restricted sites won't be an issue on SubstratumNetwork. It doesn't matter where you live or what content you're accessing, everyone in the world sees the exact same content.

SubstratumNode is the foundation of SubstratumNetwork.

It is what the average user runs to earn SUB and dedicate some of their computers' resources towards the network. People who run a SubstratumNode can be rewarded with cryptocurrency for each time they serve content.

SubstratumNodes work together to relay CORES packages and content on the network. When a user requests a site, nodes use artificial intelligence to find the most expedient and secure way to get the information to that user. Multiple nodes work to fulfill a single request in order to maintain a necessary level of anonymity.

Tools / Environment Setup

SubstratumNode software is written in Rust. We use rustup to install what we need (e.g. rustc, cargo, etc). Follow instructions here.

The node sub-project also uses Docker for a few things:

  • Running SubstratumNode needs to be able to listen on port 53, but Ubuntu 16.04 Desktop uses that port for something else. So, we created the Dockerfile and helper scripts in substratum_node/node/docker/linux_node/ to allow SubstratumNode to run on that platform. It isn't needed for running on Mac or Windows, or on Ubuntu 16.04 Server.
  • TestingDocker also offered a convenient way for us to run our end-to-end integration tests for Mac and Linux on CI. SubstratumNode needs to be started with root privileges in order to connect to certain ports (e.g. 53, 80). The Jenkins agent that runs on Windows has the needed privileges by default, but the agents that run on Mac and Linux do not. We created the Dockerfile in substratum_node/node/docker/integration_tests to work around this limitation.

You'll need an Internet connection when you build so that cargo can pull down dependencies.

How To

We build and run tests for SubstratumNode using bash scripts located in the ci directory of each sub-project. Use ci/all.sh at the top level to clean, build, and run tests for all sub-projects in one step. It will run the node integration tests as well, so if you're running on Mac or Linux make sure the Docker daemon is running. On Windows, we run this script in a git bash terminal.

Wondering where all our tests are? The convention in Rust is to write unit tests in same file as the source.

Run SubstratumNode locally

Note: Currently, your DNS must be manually set to 127.0.0.1 in order to route traffic through SubstratumNode. Find instructions for your platform here.

Once you've successfully built the node executable and completed the manual setup steps, you can run SubstratumNode locally from the command line:

<path to workspace>/substratum_node/node/target/release/node --dns_servers 8.8.8.8

In the above example, we're using Google's DNS, 8.8.8.8, but you can use your preferred DNS. If you can't choose just one favorite DNS, you can also specify multiple, separated by a comma (,).

Why do we send in dns_servers? SubstratumNodes still need to talk to the greater Internet. See the ProxyClient README for more information.

Disclosure

We run tests on every push to master on these platforms:

  • Ubuntu 16.04 Desktop 64-bit
  • MacOS High Sierra
  • Windows 10 64-bit

SubstratumNode doesn't reliably build on 32-bit Windows due to issues with the build tools for that platform. We recommend using a 64-bit version to build.

We do plan to release binaries that will run on 32-bit Windows, but they will likely be built on 64-bit Windows.

Copyright (c) 2017-2018, Substratum LLC (https://substratum.net) and/or its affiliates. All rights reserved.

About

WE ARE THE FOUNDATION OF THE DECENTRALIZED WEB.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

substratum_node

Purpose

SubstratumNetwork is an open-source network that allows anyone to allocate spare computing resources to make the internet a free and fair place for the entire world. It is a worldwide collection of nodes that securely delivers content without the need of a VPN or Tor.

Because there's no single authority delivering or monitoring content, censorship and geo-restricted sites won't be an issue on SubstratumNetwork. It doesn't matter where you live or what content you're accessing, everyone in the world sees the exact same content.

SubstratumNode is the foundation of SubstratumNetwork.

It is what the average user runs to earn SUB and dedicate some of their computers' resources towards the network. People who run a SubstratumNode can be rewarded with cryptocurrency for each time they serve content.

SubstratumNodes work together to relay CORES packages and content on the network. When a user requests a site, nodes use artificial intelligence to find the most expedient and secure way to get the information to that user. Multiple nodes work to fulfill a single request in order to maintain a necessary level of anonymity.

Tools / Environment Setup

SubstratumNode software is written in Rust. We use rustup to install what we need (e.g. rustc, cargo, etc). Follow instructions here.

The node sub-project also uses Docker for a few things:

  • Running SubstratumNode needs to be able to listen on port 53, but Ubuntu 16.04 Desktop uses that port for something else. So, we created the Dockerfile and helper scripts in substratum_node/node/docker/linux_node/ to allow SubstratumNode to run on that platform. It isn't needed for running on Mac or Windows, or on Ubuntu 16.04 Server.
  • TestingDocker also offered a convenient way for us to run our end-to-end integration tests for Mac and Linux on CI. SubstratumNode needs to be started with root privileges in order to connect to certain ports (e.g. 53, 80). The Jenkins agent that runs on Windows has the needed privileges by default, but the agents that run on Mac and Linux do not. We created the Dockerfile in substratum_node/node/docker/integration_tests to work around this limitation.

You'll need an Internet connection when you build so that cargo can pull down dependencies.

How To

We build and run tests for SubstratumNode using bash scripts located in the ci directory of each sub-project. Use ci/all.sh at the top level to clean, build, and run tests for all sub-projects in one step. It will run the node integration tests as well, so if you're running on Mac or Linux make sure the Docker daemon is running. On Windows, we run this script in a git bash terminal.

Wondering where all our tests are? The convention in Rust is to write unit tests in same file as the source.

Run SubstratumNode locally

Note: Currently, your DNS must be manually set to 127.0.0.1 in order to route traffic through SubstratumNode. Find instructions for your platform here.

Once you've successfully built the node executable and completed the manual setup steps, you can run SubstratumNode locally from the command line:

<path to workspace>/substratum_node/node/target/release/node --dns_servers 8.8.8.8

In the above example, we're using Google's DNS, 8.8.8.8, but you can use your preferred DNS. If you can't choose just one favorite DNS, you can also specify multiple, separated by a comma (,).

Why do we send in dns_servers? SubstratumNodes still need to talk to the greater Internet. See the ProxyClient README for more information.

Disclosure

We run tests on every push to master on these platforms:

  • Ubuntu 16.04 Desktop 64-bit
  • MacOS High Sierra
  • Windows 10 64-bit

SubstratumNode doesn't reliably build on 32-bit Windows due to issues with the build tools for that platform. We recommend using a 64-bit version to build.

We do plan to release binaries that will run on 32-bit Windows, but they will likely be built on 64-bit Windows.

Copyright (c) 2017-2018, Substratum LLC (https://substratum.net) and/or its affiliates. All rights reserved.

About

WE ARE THE FOUNDATION OF THE DECENTRALIZED WEB.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages