BREAKING CHANGE: implement docusaurus

This commit is contained in:
jinhojang6 2023-06-01 19:37:55 +09:00 committed by Jinho Jang
parent 6b67180123
commit 5e4fac71b1
203 changed files with 11635 additions and 10767 deletions

View File

@ -1,3 +0,0 @@
node_modules/
public/
themes/navy/source/js/vendor/

View File

@ -1,10 +0,0 @@
{
"extends": "hexo",
"root": true,
"rules": {
"strict": "off"
},
"env": {
"browser": true
}
}

81
.gitignore vendored
View File

@ -1,61 +1,26 @@
# Dependencies
/node_modules
# Production
/build
# Generated files
.docusaurus
.cache-loader
# Misc
.DS_Store
.idea/
node_modules/
*.log
db.json
.deploy*/
package-lock.json
public/
# Composer
/vendor
composer.phar
# IntelliJ - PhpStorm and PyCharm
*.ipr
*.iws
# Eclipse
/.project
/.settings
/.classpath
# Logs
logs
error.log
access.log
# Netbeans
nbproject
.nbproject
.nbproject/*
nbproject/*
nbproject/private/
/nbbuild/
/nbdist/
nbactions.xml
nb-configuration.xml
# Thumbnails
._*
# Files that might appear on external disk
.Spotlight-V100
.Trashes
# SublimeText project files
/*.sublime-project
*.sublime-workspace
# Dart
packages
packages/*
# Vagrant
.vagrant
.vagrant/*
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
# built assets
themes/navy/source/js/vendor.js
themes/navy/source/js/vendor.js.map
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.yalc
yalc.lock
.idea
static/search-index.json

2
.husky/commit-msg Executable file
View File

@ -0,0 +1,2 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

5
.husky/pre-commit Executable file
View File

@ -0,0 +1,5 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
# yarn prettier:staged
yarn typecheck

2
.prettierignore Normal file
View File

@ -0,0 +1,2 @@
*.mdx
*.md

6
.prettierrc Normal file
View File

@ -0,0 +1,6 @@
{
"tabWidth": 2,
"semi": false,
"singleQuote": true,
"trailingComma": "all"
}

65
Jenkinsfile vendored
View File

@ -1,65 +0,0 @@
pipeline {
agent { label 'linux' }
options {
disableConcurrentBuilds()
/* manage how many builds we keep */
buildDiscarder(logRotator(
numToKeepStr: '20',
daysToKeepStr: '30',
))
}
environment {
GIT_USER = 'status-im-auto'
GIT_MAIL = 'auto@status.im'
/* Dev site deployment. */
DEV_SITE = 'dev.nimbus.team'
DEV_HOST = 'jenkins@node-01.do-ams3.sites.misc.statusim.net'
SCP_OPTS = 'StrictHostKeyChecking=no'
}
stages {
stage('Install Deps') {
steps {
sh 'yarn install'
}
}
stage('Build') {
steps {
sh 'yarn run clean'
sh 'yarn run build'
}
}
stage('Robot') {
when { expression { !GIT_BRANCH.endsWith('master') } }
steps { script {
sh 'echo "Disallow: /" >> public/robots.txt'
} }
}
stage('Publish Prod') {
when { expression { GIT_BRANCH.endsWith('master') } }
steps { script {
sshagent(credentials: ['status-im-auto-ssh']) {
sh 'yarn run deploy'
}
} }
}
stage('Publish Devel') {
when { expression { !GIT_BRANCH.endsWith('master') } }
steps { script {
sshagent(credentials: ['jenkins-ssh']) {
sh """
rsync -e 'ssh -o ${SCP_OPTS}' -r --delete public/. \
${env.DEV_HOST}:/var/www/${env.DEV_SITE}/
"""
}
} }
}
}
}

View File

@ -1,7 +0,0 @@
Copyright (c) 2013 Tommy Chen
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -1,32 +1,46 @@
# Nimbus Site
- [Description](#description)
- [How to Run Locally](#how-to-run-locally)
- [Configuration](#configuration)
- [Customization](#customization)
This repo holds the code for two sites:
## Description
* [nimbus.team](https://nimbus.team) - From `master`, built in [CI](https://ci.infra.status.im/job/website/job/nimbus.team/), served from `gh-pages`
* [dev.nimbus.team](https://dev.nimbus.team) - From `develop`, built in [CI](https://ci.infra.status.im/job/website/job/dev.nimbus.team/), serverd from dev host
This repository contains the content of your documentation website.
There is an `edit` button on each page, which will take you directly to the document you need to edit on the `develop` branch.
## How to Run Locally
The recommended flow is to create a PR against `develop`. We can then allow a large group of people to push directly to `develop` and show their changes on the staging site when asking for review, which should smooth out and speed up the process considerably for everyone. `master` is obviously protected, and will only have changes merged in from `develop` once accepted.
1. Clone this repository.
2. Install the dependencies:
```bash
$ yarn
```
3. Start and open the website in your browser:
```bash
$ yarn start
```
N.B. make sure you've set up [signed commits](https://docs.github.com/en/github/authenticating-to-github/signing-commits) before submitting a PR (this repository requires all commits to be signed).
## Configuration
Edit the `docusaurus.config.js` file in the repository's root directory, and update the value of the `businessUnit` field in presets section; below is a list of valid values:
- Logos
- Codex
- Waku
## Adding a New Page
Example:
```js
presets: [
[
'@acid-info/logos-docusaurus-preset',
{
businessUnit: 'Codex',
},
],
],
```
If you want to add a page, rather than just edit, you'll need to make sure it appears on the sidebar and is accessible to everyone.
This is probably enough in most cases, as the Logos plugins will fill in other configurations related to the specified business unit. If you find any error in the information coming from Logos Plugins, please head over to [Logos Docusaurus Plugins](https://github.com/acid-info/logos-docusaurus-plugins) and create an issue.
1. Add your page to `source/docs/<your_file_here>.md`
2. In `source/_data/sidebars.yml` add the appropriate text to the appropriate place.
3. In `themes/navy/languages/en.yml` edit the sidebars section to make sure that your new text in `sidebars.yml` is rendered correctly.
## Customization
## Testing locally
You can find the instructions on adding more documentation sections, localization, and versioning on the [Docusaurus](https://docusaurus.io/docs) website.
Make sure you have [Node.js](https://nodejs.org/) installed first.
1. Open Terminal and navigate to the project root directory,
2. Run `yarn install`
3. Run `yarn build`
4. Run `yarn devel`
5. Open http://localhost:8000 in a browser
This prevents the need for any global installs, and allows you to live reload any changes you make.
> Note that theme customization is limited; for further instructions on customizing your theme, head over to [Logos Docusaurus Theme](https://github.com/acid-info/logos-docusaurus-plugins/tree/main/packages/logos-docusaurus-theme/).

View File

@ -1,33 +0,0 @@
title: Nimbus
subtitle: "Light clients for everyone!"
description: "Nimbus is a research project and a client implementation for Ethereum 2.0 designed to perform well on embedded systems and personal mobile devices, including older smartphones with resource-restricted hardware."
author: Nimbus
language: en
timezone: UTC
url: https://dev.nimbus.team/
root: /
permalink: news/:year/:month/:day/:title/
archive_dir: news
code_dir: downloads/code
new_post_name: :year-:month-:day-:title.md # File name of new posts
post_asset_folder: true
per_page: 0
theme: navy
deploy:
type: git
branch: gh-pages
name: status-im-auto
repo: git@github.com:status-im/nimbus-site.git
theme_config:
favicon: img/favicon-32x32.png
highlight:
enable: true
line_number: false
disqus_shortname: hexojs
twitter: ethstatus
github: status-im

View File

@ -1,33 +0,0 @@
title: Nimbus
subtitle: "Light clients for everyone!"
description: "Nimbus is a research project and a client implementation for Ethereum 2.0 designed to perform well on embedded systems and personal mobile devices, including older smartphones with resource-restricted hardware."
author: Nimbus
language: en
timezone: UTC
url: https://nimbus.team/
root: /
permalink: news/:year/:month/:day/:title/
archive_dir: news
code_dir: downloads/code
new_post_name: :year-:month-:day-:title.md # File name of new posts
post_asset_folder: true
per_page: 0
theme: navy
deploy:
type: git
branch: gh-pages
name: status-im-auto
repo: git@github.com:status-im/nimbus-site.git
theme_config:
favicon: img/favicon-32x32.png
highlight:
enable: true
line_number: false
disqus_shortname: hexojs
twitter: ethstatus
github: status-im

3
babel.config.js Normal file
View File

@ -0,0 +1,3 @@
module.exports = {
presets: [require.resolve("@docusaurus/core/lib/babel/preset")],
};

70
docs/architect.md Normal file
View File

@ -0,0 +1,70 @@
---
title: Description and architecture
sidebar_position: 2
---
Nimbus is a suite of Ethereum client implementations designed to be as lightweight, easy to use and as adaptive as possible. The consensus client is the first of three Nimbus implementations to reach production. Meanwhile, an execution client and a true Ethereum light client are still in development.
From their programming language upward, Nimbus clients are optimized to conserve system resources, making them suitable to run on embedded systems and lower-specification devices. Nim, the language in which Nimbus clients are written, was chosen for the following reasons:
- It is an efficient, general-purpose systems programming language.
- It features Python-like syntax that compiles to C, enabling us to take advantage of the C language's mature tooling for code compilation and static code analysis.
- It has a high degree of reasonability for researchers.
- It is performant in production.
- The above qualities make it easy for us to bring research into production, resulting in more adaptive, dynamic clients.
Nimbus is fortunate to have multiple Nim contributors working on its client implementations as core team members. Additionally, the wider Nim community has expressed support for the Nimbus project.
<br/>
### Nimbus consensus client
Since the Nimbus consensus client's initial release in 2020, its representation in the Ethereum network has swung between 3% and 15%. We attribute this variance primarily to Nimbus' relative adoption among solo stakers and those providing services to the Rocket Pool network.
Larger node operators within the Lido network and those affiliated with centralized exchanges or other staking service providers—for which node count rises and falls with retail user interest—tend to favor alternate clients and need a strong reason to switch clients in the absence of risk.
The variation in Nimbus' representation arises from the flows of capital staked via different services. As more funds flow into centralized offerings using non-Nimbus clients, Nimbus' representation decreases. Conversely, the number of blocks produced by Nimbus clients increases when more ETH is staked via Rocketpool or by solo stakers.
The Nimbus consensus client offers significant advantages for all levels of user—from hobbyists to institutional operators—including:
- **Lightweight:** Nimbus consensus client strives to be as lightweight as possible in terms of resource overheads, leaving more headroom during times of heightened network usage. Operators also can run Nimbus together with other workloads on their server to reduce overall costs.
- **Flexible:** Nimbus consensus client is the only Ethereum client that offers the flexibility of running beacon node and validator clients independently, as operators often require. Additionally, it offers a simpler beacon node mode in which the beacon node assumes validator responsibilities, mitigating the need for operators to manage the two separately.
- **Convenient:** Nimbus will be among the first client teams to offer both a consensus and execution client, simplifying initial installation and making it easy for operators to receive tailored support.
<br/>
### Nimbus execution client
Following Ethereum's switch to proof-of-stake in 2022—aka, "The Merge"—Ethereum validators must operate clients on both the consensus and execution layers. Yet, today, no client team offers both an execution and consensus layer client.
<br/>
![architect](/subpages/architect.png)
<br/>
Although the Nimbus execution client is still in development, when in production, pairing the Eth1 and Eth2 Nimbus clients will make for a user-friendly and convenient option for all levels of Ethereum node operator in terms of both installation and subsequent support.
Like the Nimbus consensus client, the execution client is written in Nim and designed to be as lightweight as possible, preserving valuable system resources and running in environments other clients cannot.
<br/>
### Nimbus Portal
An absence of true light clients presents a major issue in today's web3 sector and contributes toward various centralizing tendencies on Ethereum. When users cannot validate on-chain data themselves—due to the technical or resource overheads of running their own validating node—they fall back on RPC nodes operated by centralized entities.
While convenient, this approach requires users to trust the data returned and represents a pale imitation of the true revolutionary promise of blockchain technology.
Nimbus Portal— our light client implementation—is among a few promising efforts to develop an Ethereum light client. Its development is part of a cross-team Ethereum Foundation initiative called Portal Network that seeks to realize the light client vision.
Alongside Nimbus Portal, Nimbus has developed a light web proxy that can run in the background of applications, providing on-chain data directly to wallet apps and Ethereum-native operating systems, among other use cases.
Ultimately, light clients will provide greater security to users, reveal new blockchain use cases and enable the Ethereum ecosystem to reduce its dependency on centralized entities that represent single points of failure or capture.
[See the docs](https://github.com/status-im/nimbus-eth2)

38
docs/index.md Normal file
View File

@ -0,0 +1,38 @@
---
title: About
sidebar_position: 1
---
Nimbus was created to promote client diversity and network decentralization on Ethereum in the belief that blockchain technology's full transformative potential can only be realized if running its infrastructure is widely accessible.
Ethereum's security—its resistance to external threats and censorship—comes from its decentralization. We believe that lowering the barrier to network participation will result in greater decentralization and, consequently, a more resilient network. As such, we are building each of the three Nimbus clients to be as lightweight, secure and easy to use as possible.
The Nimbus' consensus client—along with its still-in-development execution and light clients— are designed to perform well on a range of systems, including Raspberry Pis and mobile devices, lowering the barrier to entry to run Ethereum's infrastructure. Meanwhile, our resource-conserving optimizations benefit those operating more powerful systems by freeing resources for other tasks, without compromising on reward performance.
Those client teams earlier to market than Nimbus have typically developed for higher specification hardware, as one would expect from the first client implementations to serve a new, cutting-edge system like post-Merge Ethereum. While their implementations make for a more diverse client ecosystem and their R&D efforts have pushed the space forward tremendously, there remains a gap for an Ethereum client tailored to lower specification devices, that encourages increased network decentralization. Nimbus fills that gap.
In addition to striving for maximum accessibility via lighter client implementations, Nimbus' design goals are to provide an architecture that makes it simple to embed Nimbus into other software. The Nimbus Light Web Proxy, for example, enables decentralized applications to verify data received from external RPC end-points. Consequently, Nimbus reduces reliance on third-party software and service providers that introduce potential vulnerabilities through single points of failure.
<br/>
### Nimbus history
Status—the creator of the Ethereum-based decentralized messaging application—first announced Nimbus in August 2018 as a client implementation research project focused on sharding, light clients and next-generation Ethereum technologies, with a goal of addressing scalability and accessibility concerns. It was inspired by a vision of the future in which Ethereum "lives" in millions of embedded systems around the world rather than a few thousand powerful computers.
At its creation, Nimbus' goal was to research and build a client light enough to run on such resource-restricted devices and modular enough to allow for rapid iteration and implementation of research. Initially, the team planned to develop an energy- and compute-efficient, mobile-first client for the full web3 tech stack—decentralized logic, decentralized storage and decentralized messaging.
However, as research into the latter two branches slowed, Nimbus narrowed its focus to crafting a high-quality, lightweight Ethereum implementation to promote decentralization and strengthen the network against single-client failures.
<br/>
### Why "Nimbus"?
The name Nimbus was chosen because of its allusions to:
- A different kind of "dark cloud" computing.
- The spiritual symbolism of sanctity and holiness.
- Nim, the language in which it is written.
- A "bus" in communications systems architecture.

30
docs/roadmap.md Normal file
View File

@ -0,0 +1,30 @@
---
title: Development roadmap
sidebar_position: 4
---
As a leading Ethereum client implementation already in production, the Nimbus consensus client team's development priorities are largely dependent on Ethereum's core roadmap. Client implementations must support network updates, such as "The Merge" to proof-of-stake, to ensure users face minimal disruption during such events.
Known future upgrades and ecosystem developments guiding our research and development efforts include:
- **EIP-4844 (proto-danksharding):** After "The Merge" in 2022, the next major Ethereum upgrade is "The Surge," which aims to significantly increase the network's maximum transaction throughput via the implementation of an early form of sharding. The upgrade is expected in Q3 or Q4 2023.
- **Distributed Validator Technology:** DVT is an open-source protocol already use. It enables a group of validators to combine ETH to reach the minimum stake required to operate a validator.
Additionally, Nimbus maintains relationships with various user types, including solo stakers and liquid staking protocol operators, to ensure their feedback informs our work on the client implementations.
Consequently, Nimbus development follows a monthly update schedule that incorporates the above variables while remaining flexible and adaptive to unforeseen ecosystem advances (and potential crises.) Over the last year, for example, Nimbus has shipped more than 20 updates to its consensus client implementation.
<br/>
### Nimbus focus areas: 2023/24
Despite this responsive approach, the team is working on several focus areas during 2023 and 2024, including:
- Supporting EIP-4844 and distributed validator protocols.
- Releasing the Nimbus execution client—expected early 2024
- Enhancing the light client, Nimbus Portal.
[Contribute to Waku](https://github.com/status-im/nimbus-eth2)

28
docs/team.md Normal file
View File

@ -0,0 +1,28 @@
---
title: Core contributors
sidebar_position: 3
---
The Nimbus client suite is built and maintained by a passionate and driven team of 10 technologists from around the world.
Development work is divided into subgroups, each focusing on one of the three client implementations. Skillsets and requirements often overlap, meaning that some members take on responsibilities across the subgroups. Additionally, several team members are core contributors to Nim, the programming language in which Nimbus clients are written.
<br/>
### Nimbus consensus
The team maintaining the in-production Nimbus consensus client consists of a development lead, two supporting developers, a research officer and a senior data scientist. Combined, they draw on decades of experience both within the crypto and web3 sector, and at more traditional tech startups.
<br/>
### Nimbus execution
Building the Nimbus execution client is a team consisting of a development lead, supporting developer, research engineer and software engineer. Like the consensus subgroup, the Nimbus execution client team has a rich background in software development both within web3 and beyond it.
<br/>
### Nimbus Portal
Currently, the light client, Nimbus Portal, has one full-time developer with a background in software engineering and consultancy at various tech startups.
Nimbus is looking to expand the above structure and currently has multiple openings for core contributors. As an open-source public goods project Nimbus also welcomes community contributions.

130
docusaurus.config.js Normal file
View File

@ -0,0 +1,130 @@
// @ts-check
// Note: type annotations allow type checking and IDEs autocompletion
require('dotenv').config()
/** @type {import('@docusaurus/types').Config} */
const config = {
title: 'Nimbus',
url: 'https://url',
baseUrl: '/',
customFields: {
ghostAPiKey: process.env.GHOST_API_KEY,
},
markdown: {
mermaid: true,
},
// Even if you don't use internalization, you can use this field to set useful
// metadata like html lang. For example, if your site is Chinese, you may want
// to replace "en" with "zh-Hans".
i18n: {
defaultLocale: 'en',
locales: ['en'],
},
presets: [
[
'@acid-info/logos-docusaurus-preset',
/** @type {import('@acid-info/logos-docusaurus-preset').PluginOptions} */
({
businessUnit: 'Nimbus',
theme: {
name: 'default',
options: {
customCss: [require.resolve('./src/css/custom.scss')],
},
},
docs: {
routeBasePath: '/about',
versions: {
current: {
label: 'current',
},
},
lastVersion: 'current',
},
}),
],
],
themes: ['@docusaurus/theme-mermaid'],
themeConfig:
/** @type {import('@acid-info/logos-docusaurus-preset').ThemeConfig} */
({
colorMode: {
defaultMode: 'dark',
disableSwitch: false,
},
navbar: {
items: [
{
type: 'search',
},
{
label: 'About',
to: '/about',
},
{
label: 'Blog',
href: '/',
},
{
label: 'Github',
href: 'https://github.com/status-im',
},
{
type: 'localeDropdown',
position: 'right',
},
],
},
footer: {
copyright: 'Nimbus @2023<br/>All Rights Reserved.',
links: [
{
items: [
{
href: 'https://twitter.com/ethnimbus',
label: 'Twitter',
},
{
href: 'https://discord.gg/EP8DZnXu9y',
label: 'Discord',
},
{
href: '/',
label: 'Docs',
},
{
href: '/',
label: 'Github',
},
],
},
{
items: [
{
href: '/',
label: 'Contact us',
},
{
href: 'https://jobs.status.im/',
label: 'Work with us',
},
{
href: '/',
label: 'Privacy policy',
},
{
href: '/',
label: 'Temrs & conditions',
},
],
},
],
},
}),
}
module.exports = config

View File

@ -1,75 +0,0 @@
const log = require('fancy-log')
const gulp = require('gulp')
const gulpSass = require('gulp-sass')(require('sass'))
const rename = require("gulp-rename")
const cleanCSS = require('gulp-clean-css')
const rollup = require('gulp-better-rollup')
const webserver = require('gulp-webserver')
const terser = require('rollup-plugin-terser').terser
const browserSync = require('browser-sync').create()
const Hexo = require('hexo')
const runSequence = require('run-sequence')
const gitBranch = require('./scripts/git-branch')
const getEnv = function () {
return gitBranch() == 'master' ? 'prod' : 'dev'
}
const html = (done) => {
var hexo = new Hexo(process.cwd(), {
config: `_config.${getEnv()}.yml`,
watch: false,
})
hexo.init().then(function() {
return hexo.call('generate')
}).then(function() {
return hexo.exit()
}).then(function() {
return done()
}).catch(function(err) {
console.log(err)
hexo.exit(err)
return done(err)
})
}
const js = () =>
gulp.src('js/main.js')
.on('error', log.error)
.pipe(rollup({ plugins: [terser()] }, 'iife'))
.pipe(rename("main.min.js"))
.pipe(gulp.dest('public/js'))
const sass = () =>
gulp.src("./themes/navy/source/scss/main.scss")
.on('error', log.error)
.pipe(gulpSass())
.pipe(gulp.dest('./public/css'))
.pipe(browserSync.stream())
const css = () =>
gulp.src('./public/css/main.css')
.on('error', log.error)
.pipe(cleanCSS())
.pipe(rename("main.min.css"))
.pipe(gulp.dest('./public/css/'))
const devel = () => {
gulp.watch('./js/*.js', js)
gulp.watch(['./source/**/*.{md,yml}', './themes/navy/**/*'], html)
gulp.watch('./themes/navy/source/scss/*.scss', sass, css)
}
const server = () =>
gulp.src('./public').pipe(webserver({livereload: true, open: true}));
exports.html = html
exports.js = js
exports.sass = sass
exports.css = gulp.series(sass, css)
exports.devel = gulp.parallel(server, devel)
exports.build = gulp.parallel(html, js, exports.css)
exports.default = exports.build

View File

@ -1,218 +0,0 @@
let queue = [];
let config = {
'siteId': '',
'trackerUrl': '',
};
const commands = {
"set": set,
"trackPageview": trackPageview,
"setTrackerUrl": setTrackerUrl,
};
function set(key, value) {
config[key] = value;
}
function setTrackerUrl(value) {
return set("trackerUrl", value);
}
// convert object to query string
function stringifyObject(obj) {
var keys = Object.keys(obj);
return '?' +
keys.map(function(k) {
return encodeURIComponent(k) + '=' + encodeURIComponent(obj[k]);
}).join('&');
}
function randomString(n) {
var s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
return Array(n).join().split(',').map(() => s.charAt(Math.floor(Math.random() * s.length))).join('');
}
function getCookie(name) {
var cookies = document.cookie ? document.cookie.split('; ') : [];
for (var i = 0; i < cookies.length; i++) {
var parts = cookies[i].split('=');
if (decodeURIComponent(parts[0]) !== name) {
continue;
}
var cookie = parts.slice(1).join('=');
return decodeURIComponent(cookie);
}
return '';
}
function setCookie(name, data, args) {
name = encodeURIComponent(name);
data = encodeURIComponent(String(data));
var str = name + '=' + data;
if(args.path) {
str += ';path=' + args.path;
}
if (args.expires) {
str += ';expires='+args.expires.toUTCString();
}
document.cookie = str;
}
function newVisitorData() {
return {
isNewVisitor: true,
isNewSession: true,
pagesViewed: [],
previousPageviewId: '',
lastSeen: +new Date(),
}
}
function getData() {
let thirtyMinsAgo = new Date();
thirtyMinsAgo.setMinutes(thirtyMinsAgo.getMinutes() - 30);
let data = getCookie('_fathom');
if(! data) {
return newVisitorData();
}
try{
data = JSON.parse(data);
} catch(e) {
console.error(e);
return newVisitorData();
}
if(data.lastSeen < (+thirtyMinsAgo)) {
data.isNewSession = true;
}
return data;
}
function findTrackerUrl() {
const el = document.getElementById('fathom-script')
return el ? el.src.replace('tracker.js', 'collect') : '';
}
function trackPageview(vars) {
vars = vars || {};
// Respect "Do Not Track" requests
if('doNotTrack' in navigator && navigator.doNotTrack === "1") {
return;
}
// ignore prerendered pages
if( 'visibilityState' in document && document.visibilityState === 'prerender' ) {
return;
}
// if <body> did not load yet, try again at dom ready event
if( document.body === null ) {
document.addEventListener("DOMContentLoaded", () => {
trackPageview(vars);
})
return;
}
// parse request, use canonical if there is one
let req = window.location;
// do not track if not served over HTTP or HTTPS (eg from local filesystem)
if(req.host === '') {
return;
}
// find canonical URL
let canonical = document.querySelector('link[rel="canonical"][href]');
if(canonical) {
let a = document.createElement('a');
a.href = canonical.href;
// use parsed canonical as location object
req = a;
}
let path = vars.path || ( req.pathname + req.search );
if(!path) {
path = '/';
}
// determine hostname
let hostname = vars.hostname || ( req.protocol + "//" + req.hostname );
// only set referrer if not internal
let referrer = vars.referrer || '';
if(document.referrer.indexOf(hostname) < 0) {
referrer = document.referrer;
}
let data = getData();
const d = {
id: randomString(20),
pid: data.previousPageviewId || '',
p: path,
h: hostname,
r: referrer,
u: data.pagesViewed.indexOf(path) == -1 ? 1 : 0,
nv: data.isNewVisitor ? 1 : 0,
ns: data.isNewSession ? 1 : 0,
sid: config.siteId,
};
let url = config.trackerUrl || findTrackerUrl()
let img = document.createElement('img');
img.setAttribute('alt', '');
img.setAttribute('aria-hidden', 'true');
img.src = url + stringifyObject(d);
img.addEventListener('load', function() {
let now = new Date();
let midnight = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 24, 0, 0);
// update data in cookie
if( data.pagesViewed.indexOf(path) == -1 ) {
data.pagesViewed.push(path);
}
data.previousPageviewId = d.id;
data.isNewVisitor = false;
data.isNewSession = false;
data.lastSeen = +new Date();
setCookie('_fathom', JSON.stringify(data), { expires: midnight, path: '/' });
// remove tracking img from DOM
document.body.removeChild(img)
});
// in case img.onload never fires, remove img after 1s & reset src attribute to cancel request
window.setTimeout(() => {
if(!img.parentNode) {
return;
}
img.src = '';
document.body.removeChild(img)
}, 1000);
// add to DOM to fire request
document.body.appendChild(img);
}
// override global fathom object
const fathom = function() {
var args = [].slice.call(arguments);
var c = args.shift();
commands[c].apply(this, args);
};
// process existing queue
queue.forEach((i) => fathom.apply(undefined, i));
export default fathom

View File

@ -1,52 +0,0 @@
import fathom from './fathom.js'
const ghostApiUrl = 'https://our.status.im/ghost/api/v2'
const ghostApiKey = '10e7f8c1f793d2945ea1177076'
function customExcerpt(str) {
return str.split(/\s+/).slice(0,25).join(" ")
}
const newsPostTemplate = (post, excerpt) => (`
<div class="contribute blog">
<a href="https://our.status.im/${post.slug}" class="feature-image">
<img src="${post.feature_image}" alt="${post.title}"></a>
<h3>
<a href="https://our.status.im/${post.slug}">${post.title}</a>
</h3>
<p>${excerpt}</p>
<a href="https://our.status.im/${post.slug}">Read More <img src="/img/arrow_ogn.png"/></a>
</div>
`)
const fetchGhostBlogPosts = async () => {
let url = new URL(`${ghostApiUrl}/content/posts/`)
let params = {
key: ghostApiKey,
filter: 'tag:nimbus',
formats: 'plaintext',
order: 'published_at desc',
limit: 3,
}
url.search = new URLSearchParams(params).toString()
let resp = await fetch(url)
let json = await resp.json()
for (const post of json.posts.reverse()) {
let excerpt = post.custom_excerpt || customExcerpt(post.plaintext)
const div = document.querySelector('.contribute-wrap-blog')
div.insertAdjacentHTML('afterbegin', newsPostTemplate(post, excerpt))
}
}
const incrementFathomAnalytics = () => {
fathom('set', 'trackerUrl', '//fathom.status.im/collect');
fathom('set', 'siteId', 'KKAJT');
fathom('trackPageview');
}
document.addEventListener('DOMContentLoaded', (event) => {
fetchGhostBlogPosts()
incrementFathomAnalytics()
})

View File

@ -1,48 +1,53 @@
{
"name": "hexo-site",
"name": "nimbus-docusaurus-template",
"version": "0.0.0",
"private": true,
"hexo": {
"version": "4.2.1"
},
"scripts": {
"clean": "rm -rf public/*",
"build": "gulp build",
"devel": "gulp devel",
"eslint": "eslint .",
"deploy": "hexo deploy"
},
"devDependencies": {
"browser-sync": "2.27.7",
"cheerio": "^0.22.0",
"eslint": "8.6.0",
"eslint-config-hexo": "^4.2.0",
"fancy-log": "^1.3.3",
"gulp": "^4.0.2",
"gulp-better-rollup": "^4.0.1",
"gulp-clean-css": "^4.3.0",
"gulp-imagemin": "^8.0.0",
"gulp-rename": "^2.0.0",
"gulp-sass": "^5.1.0",
"gulp-webserver": "^0.9.1",
"hexo": "^4.2.1",
"hexo-deployer-git": "^3.0.0",
"hexo-generator-archive": "^1.0.0",
"hexo-generator-feed": "^3.0.0",
"hexo-generator-sitemap": "^2.2.0",
"hexo-renderer-ejs": "^2.0.0",
"hexo-renderer-marked": "^4.1.0",
"hexo-renderer-stylus": "^2.0.1",
"lodash": "^4.17.21",
"lunr": "^2.3.9",
"rename": "^1.0.4",
"rollup": "^2.63.0",
"rollup-plugin-terser": "^7.0.2",
"run-sequence": "^2.2.1",
"sass": "^1.45.2",
"watchify": "^4.0.0"
"docusaurus": "docusaurus",
"start": "docusaurus start",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"clear": "docusaurus clear",
"serve": "docusaurus serve",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids",
"typecheck": "tsc"
},
"dependencies": {
"date-fns": "^2.7.0"
"@acid-info/logos-docusaurus-preset": "^1.0.0-alpha.1",
"@docusaurus/core": "2.4.1",
"@docusaurus/preset-classic": "2.4.1",
"@docusaurus/theme-mermaid": "^2.4.1",
"@emotion/react": "^11.11.0",
"@emotion/styled": "^11.11.0",
"@mdx-js/react": "^1.6.22",
"clsx": "^1.2.1",
"dotenv": "^16.0.3",
"prism-react-renderer": "^1.3.5",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"sass": "^1.62.1",
"tsdx": "^0.14.1"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "2.4.1",
"@tsconfig/docusaurus": "^1.0.5",
"typescript": "^4.7.4"
},
"browserslist": {
"production": [
">0.5%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"engines": {
"node": ">=16.14"
}
}

View File

@ -1,2 +0,0 @@
title: {{ title }}
---

View File

@ -1,2 +0,0 @@
title: {{ title }}
---

View File

@ -1,23 +0,0 @@
'use strict'
const fs = require('fs')
const path = require('path')
const util = require('util')
function parseBranch(buf) {
const match = /ref: refs\/heads\/([^\n]+)/.exec(buf.toString())
return match ? match[1] : null
}
function gitHeadPath(cwd) {
const filepath = path.join(process.cwd(), '.git/HEAD')
if (!fs.existsSync(filepath)) {
throw new Error('.git/HEAD does not exist')
}
return filepath
}
const gitBranch = function() {
return parseBranch(fs.readFileSync(gitHeadPath()))
}
module.exports = gitBranch

View File

@ -1,161 +0,0 @@
/* global hexo */
'use strict';
var pathFn = require('path');
var _ = require('lodash');
var cheerio = require('cheerio');
var lunr = require('lunr');
var localizedPath = ['docs', 'api'];
function startsWith(str, start) {
return str.substring(0, start.length) === start;
}
hexo.extend.helper.register('page_nav', function() {
var type = this.page.canonical_path.split('/')[0];
var sidebar = this.site.data.sidebar[type];
var path = pathFn.basename(this.path);
var list = {};
var prefix = 'sidebar.' + type + '.';
for (var i in sidebar) {
for (var j in sidebar[i]) {
list[sidebar[i][j]] = j;
}
}
var keys = Object.keys(list);
var index = keys.indexOf("/docs/" + path);
var result = '';
if (index > 0) {
result += '<a href="' + keys[index - 1] + '" class="article-footer-prev" title="' + this.__(prefix + list[keys[index - 1]]) + '">'
+ '<i class="fa fa-chevron-left"></i><span>' + this.__('page.prev') + '</span></a>';
}
if (index < keys.length - 1) {
result += '<a href="' + keys[index + 1] + '" class="article-footer-next" title="' + this.__(prefix + list[keys[index + 1]]) + '">'
+ '<span>' + this.__('page.next') + '</span><i class="fa fa-chevron-right"></i></a>';
}
return result;
});
hexo.extend.helper.register('doc_sidebar', function(className) {
var type = this.page.canonical_path.split('/')[0];
var sidebar = this.site.data.sidebar[type];
var path = pathFn.basename(this.path);
var result = '';
var self = this;
var prefix = 'sidebar.' + type + '.';
_.each(sidebar, function(menu, title) {
result += '<strong class="' + className + '-title">' + self.__(prefix + title) + '</strong>';
_.each(menu, function(link, text) {
var itemClass = className + '-link';
if (link === path) itemClass += ' current';
result += '<a href="' + link + '" class="' + itemClass + '">' + self.__(prefix + text) + '</a>';
});
});
return result;
});
hexo.extend.helper.register('header_menu', function(className) {
var menu = this.site.data.menu;
var result = '';
var self = this;
var lang = this.page.lang;
var isEnglish = lang === 'en';
_.each(menu, function(path, title) {
if (!isEnglish && ~localizedPath.indexOf(title)) path = lang + path;
result += '<a href="' + self.url_for(path) + '" class="' + className + '-link">' + self.__('menu.' + title) + '</a>';
});
return result;
});
hexo.extend.helper.register('canonical_url', function(lang) {
var path = this.page.canonical_path;
if (lang && lang !== 'en') path = lang + '/' + path;
return this.config.url + '/' + path;
});
hexo.extend.helper.register('url_for_lang', function(path) {
var lang = this.page.lang;
var url = this.url_for(path);
if (lang !== 'en' && url[0] === '/') url = '/' + lang + url;
return url;
});
hexo.extend.helper.register('raw_link', function(path) {
return 'https://github.com/status-im/nimbus-site/edit/develop/source/' + path;
});
hexo.extend.helper.register('page_anchor', function(str) {
var $ = cheerio.load(str, {decodeEntities: false});
var headings = $('h1, h2, h3, h4, h5, h6');
if (!headings.length) return str;
headings.each(function() {
var id = $(this).attr('id');
$(this)
.addClass('article-heading')
.append('<a class="article-anchor" href="#' + id + '" aria-hidden="true"></a>');
});
return $.html();
});
hexo.extend.helper.register('lunr_index', function(data) {
var index = lunr(function() {
this.field('name', {boost: 10});
this.field('tags', {boost: 50});
this.field('description');
this.ref('id');
_.sortBy(data, 'name').forEach((item, i) => {
this.add(_.assign({ id: i }, item));
});
});
return JSON.stringify(index);
});
hexo.extend.helper.register('canonical_path_for_nav', function() {
var path = this.page.canonical_path;
if (startsWith(path, 'docs/') || startsWith(path, 'api/')) {
return path;
}
return '';
});
hexo.extend.helper.register('lang_name', function(lang) {
var data = this.site.data.languages[lang];
return data.name || data;
});
hexo.extend.helper.register('disqus_lang', function() {
var lang = this.page.lang;
var data = this.site.data.languages[lang];
return data.disqus_lang || lang;
});
hexo.extend.helper.register('hexo_version', function() {
return this.env.version;
});

View File

@ -1,19 +0,0 @@
/* global hexo */
'use strict';
hexo.extend.tag.register('note', function(args, content) {
var className = args.shift();
var header = '';
var result = '';
if (args.length) {
header += '<strong class="note-title">' + args.join(' ') + '</strong>';
}
result += '<blockquote class="note ' + className + '">' + header;
result += hexo.render.renderSync({text: content, engine: 'markdown'});
result += '</blockquote>';
return result;
}, true);

View File

@ -1 +0,0 @@
nimbus.team

View File

@ -1 +0,0 @@
en: English

View File

@ -1,6 +0,0 @@
docs: /docs/
tutorials: /tutorials/
plugins: /plugins/
chat: /chat/
blog: /news/
wip: /wip/

View File

@ -1,15 +0,0 @@
- name: pluto
description: A grammar for data manipulation
link: https://status-im.github.io/pluto/
thumbnail: pluto.jpg
tags:
- grammar
- data
- name: collectibles-chat
description: Extension for sending NFTs through Chat
link: https://gist.github.com/janherich/92747e730b2e115bcbe145114d024e66
thumbnail: cryptokitty.jpg
tags:
- chat
- NFTs
- collectibles

View File

@ -1,9 +0,0 @@
docs:
Nimbus:
introduction: /docs/index.html
design: /docs/design.html
eth1: /docs/eth1.html
eth2: /docs/eth2.html
fluffy: /docs/fluffy.html
libraries: /docs/libraries.html
contributor_guide: /docs/contributor_guide.html

View File

@ -1,60 +0,0 @@
---
- name: "Zahary Karadjov"
image: "/img/zahary.jpg"
statusLink: "https://join.status.im/user/0x049004fb151893f7112d754d92c650d6d35f8151ec0eff1c148812f8741474f7f8906436e782432680b40e96a2549c03d3dd7801c50928c2bf15d56f6d7d2e1246"
statusName: "Nutritious Judicious Flicker"
gitHubLink: "https://github.com/zah"
- name: "Mamy Ratsimbazafy"
image: "/img/mamy.jpg"
statusLink: "https://join.status.im/user/0x04d01118c9cbcf4f9d326c1185bff110d36c96890a37cc47e7ce91e8b53ccc088d9df8c828c0669fb97831502113c1195bb17f1ea25fbccffee6a7fb9e30782a82"
statusName: "Damp Soulful Allensbigearedbat"
gitHubLink: "https://github.com/mratsim"
- name: "Jacek Sieka"
image: "/img/jacek.jpg"
statusLink: "https://join.status.im/user/0x049bc24b377c7e97bb94ab993e48fcbfe38f96aad43a42418d7f33f5a99f6f89e2af91875bfe045205771f28c93be50380cdfe5772201fde7019d57f7ead9af9b5"
statusName: "Luminous Tall Trumpeterbird"
gitHubLink: "https://github.com/arnetheduck"
- name: "Yevhen Kabanov"
image: "/img/cheatfate.jpg"
statusLink: "https://join.status.im/user/0x0457e37e1d4e302f4c7483e94984eda22b7823c5d56ae537f30236468751d664720d8ba0d860b351bf88471aea97a536224c82739a515bc7c82385ffd0272c2af9"
statusName: "Wealthy Sore Arcticseal"
gitHubLink: "https://github.com/cheatfate"
- name: "Dustin Brody"
image: "/img/tersec_moot.png"
statusLink: "https://join.status.im/user/0x04da71e50ac5532bcef32104e20d82f2fc6d8135e4882b06b8668922498a7dd158f0e36daa9c1e794aaf45a06d8eae7caf79092dac848024901e02feb2dc3fc24e"
statusName: "Subdued Feline Teledu"
gitHubLink: "https://github.com/tersec"
- name: "Kim De Mey"
image: "/img/kdeme_moot.png"
statusLink: "https://join.status.im/user/0x04bdde57301c99af5b61d19a3320a3e73b28929186578cfdfbf4fd2a65e3c090336df3866c15832057f6892f4100c3d7dc6d41cad2cf52e6d66e20c9a41ef2184c"
statusName: "Cultivated Careless Sloth"
gitHubLink: "https://github.com/kdeme"
- name: "Andri Lim"
image: "/img/andri.jpg"
statusLink: "https://join.status.im/user/0x045a8d391b5c74fe116e4143a4f9ea80d449ae4f54513043ac2f3b25d4ba2099566578a57d74db424f2feebe45e136113d3b4179505c65b4afa8256ca4ca60e4db"
statusName: "Envious Mistyrose Hyracotherium"
gitHubLink: "https://github.com/jangko"
- name: "Jordan Hrycaj"
image: "/img/jordan.jpg"
statusLink: "https://join.status.im/u/0x042c2e0f066c94064869625e353bc0cf18da70318722e3ce9db615145c6276fe6f170e99462d1a93d64d4b75995ea6b60aeb196af54d3cd5e22bf4f975aaf99d8a"
statusName: "Lavender Troubled Wildcat"
gitHubLink: "https://github.com/mjfh"
- name: "Konrad Staniec"
image: "/img/konrad.jpg"
statusLink: "https://join.status.im/u/0x049c728f9dab202f932dca2b255584641ea560e4503b26850943e379472dab1e64c529480068a122bcd59e7f2a6afe7a64924965151067c2898e9ae438b20f7067"
statusName: "Good Bitesized Ichthyosaurs"
gitHubLink: "https://github.com/KonradStaniec"
- name: "Etan Kissling"
image: "/img/etan.jpg"
statusLink: "https://join.status.im/u/0x041af07ff6d52a28f940efc5eb38470db2811a60e82c7ae0983a19aad991983b11427322442573bef5154ec008ecf2b99fcdb3198cbac127b0dec17641838e8f09"
statusName: "Admired Blissful Thunderbird"
gitHubLink: "https://github.com/etan-status"

View File

@ -1,7 +0,0 @@
- name: How to extend your DApp via chat in Status
description: Send collectibles directly in chat
link: /tutorials/extensions_tutorial_chat_command.html
tags:
- extensions
- chat
- Ethereum

View File

@ -1,43 +0,0 @@
title: Nimbus
---
# Status Partners with the team behind the programming language Nim
*To bolster research efforts for Nimbus a sharding client for Ethereum status.im have partnered with the core team developing the Nim programming language.*
On August 1st, we [posted](https://our.status.im/introducing-nimbus-an/) about our research initiative called Nimbus a Nim implementation of a sharding client for Ethereum. Today we are pleased to announce our partnership with the team behind the [Nim programming language](https://nim-lang.org/); lead by [Andreas Rumpf](https://github.com/Araq). This partnership will not only support our ongoing sharding research, but promote the continued development of the underlying open source language serving as the basis of our work. The more developed, documented, and robust Nim is, the more in depth our R&D can be. Andreas and team have a strong vision for the future of the programming language and we want to support them in their efforts. This marks our ongoing support for open source projects as well as our commitment to our sharding research.
## Why Nim
We chose to work in Nim because it is a lightweight and efficient programming language that suits itself well to resource restricted devices. It also allows us to better learn the Ethereum protocol, as well as attract highly specialized developers with a deep understanding and appreciation for the advanced language features, such as its powerful meta-programming capabilities that give us the flexibility to meet future needs of creating intuitive domain-specific languages tailored to specific facets of Ethereum 2.0 development.
Finally, the language is backed by a very strong team of talented developers. Andreas started Nim's development in 2006, only two years later the compiler reached the important milestone of being able to compile itself, a process that is known as "bootstrapping". For years now users are deploying Nim applications in production.
Nim can be summarised as combining the very best aspects of the well known programming languages C, Python and Lisp: Nim is as fast as C, as readable as Python and as extensible as Lisp. This aspect makes Nim unique in the large landscape of existing programming languages.
Nim was envisioned from the start as a simple language with a focus on metaprogramming and with Status' support Nim's metaprogramming will not only cover its syntactic elements but also its semantics and its type system.
## The Partnership
Status will support Andreas and the Nim team with funding and resources needed to stay focused on the development of the programming language. The Nim team will add at least 2 paid full-time developers! They will fix bugs, respond to issues, and of course develop the compiler, the standard library as well as its tooling. So far, the language has been supported by the open source community and generous volunteers and donors who believe in the work. This has created a unique commitment to the project by all those involved but has meant a lack of dedicated and focused computer scientists solely focused on its development.
The Status Nimbus team is very familiar with Nim as core Status contributors [Dustin Brody](https://github.com/tersec), [Eugene Kabanov](https://github.com/cheatfate), [Jacek Sieka](https://github.com/arnetheduck), [Mamy Ratsimbazafy](https://github.com/mratsim), [Ryan Lipscombe](https://github.com/coffeepots), [Yuriy Glukhov](https://github.com/yglukhov) and [Zahary Karadjov](https://github.com/zah) are active contributors to the Nim ecosystem. There is already deep integration and collaboration between the Nimbus and Nim teams and this partnership will see even further collaboration and support of each other's work.
## A Look Ahead at the Roadmap
With Status' sponsorship, the Nim team has come up with an ambitious roadmap which makes Nim one of the most exciting languages to watch in the following years. Nim version 1.0 is the long overdue commitment to a stable language core that will preserve backwards compatibility for years to come. There are no hard deadlines to a release date, but a detailed milestone tracking all the issues that need to be resolved for v1.0 is available [here](https://github.com/nim-lang/Nim/milestone/2).
## Beyond the Partnership
In addition to the sponsorship of Nim's ongoing core development there will be a "grants program for Nim". Inspired by Google's Summer of Code, developers will be hired to work on specific Nim-related projects.
Examples for grants:
* Add [Language Server Protocol](https://langserver.org/) support to nimsuggest, for better editor and IDE integration.
* Improve Nim's package manager, "Nimble", to support reproducible builds.
* Improve Nim's tooling so that the result of macro expansions becomes easier to look at.
We look forward to working with Andreas and the team to push the development of Nim.
For more information about Nimbus, join us on [Riot](https://chat.status.im/) or [Github](https://github.com/status-im/nimbus).
You can learn more and get involved with Nim on [Github](https://github.com/nim-lang).

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square70x70logo src="/icon/mstile-70x70.png"/>
<square150x150logo src="/icon/mstile-150x150.png"/>
<square310x310logo src="/icon/mstile-310x310.png"/>
<wide310x150logo src="/icon/mstile-310x150.png"/>
<TileColor>#ff9c00</TileColor>
</tile>
</msapplication>
</browserconfig>

View File

@ -1,109 +0,0 @@
---
id: building
title: Getting Started with Nimbus
---
This document explains how to install, test, and run Nimbus on your local machine. To learn about what Nimbus is, see our original [intro post](https://our.status.im/nimbus-for-newbies/). To dig deeper, see the Nimbus [Ethereum 1.0](https://github.com/status-im/nimbus-eth1) and [Ethereum 2.0](https://github.com/status-im/nimbus-eth2) repositories.
### Building and running Nimbus
To run Nimbus in [Ethereum 1.0 mode](https://github.com/status-im/nimbus-eth1), first [install the prerequisites](https://github.com/status-im/nimbus-eth1#prerequisites).
Then:
```bash
git clone https://github.com/status-im/nimbus-eth1
cd nimbus-eth1
make update
# >>> WINDOWS ONLY <<<
make fetch-dlls # WINDOWS ONLY
# >>> WINDOWS ONLY <<<
make nimbus
./build/nimbus
```
Nimbus will now run and attempt to synchronize with the Ethereum 1.0 blockchain. It can currently reach block 1.5 million.
### Building and running the Ethereum 2.0 local beacon chain simulation
The beacon chain simulation runs several beacon nodes on the local machine, attaches several local validators to each, and builds a beacon chain between them.
**Prerequisites:** At the moment, Nimbus has to be built from source, and has the following external dependencies -- developer tools (C compiler, Make, Bash, Git), [PCRE](https://www.pcre.org/); follow the instructions outlined [here](https://github.com/status-im/nim-beacon-chain#prerequisites-for-everyone) to install them.
Once you've installed the prerequisites, you're ready to enter the Ethereum 2.0 realm of Nimbus:
```bash
git clone https://github.com/status-im/nim-beacon-chain
cd nim-beacon-chain
make
make test
```
To run the simulation:
```bash
make eth2_network_simulation
```
If you'd like to clean the previous run's data:
```bash
make clean_eth2_network_simulation_all
```
To change the number of validators and nodes:
```bash
# Clear data files from your last run and start the simulation with a new genesis block:
make VALIDATORS=192 NODES=6 USER_NODES=1 eth2_network_simulation
```
If youd like to see the nodes running on separated sub-terminals inside one big window, install [Multitail](https://www.vanheusden.com/multitail/index.php) (if you're on a Mac, follow the instructions [here](https://brewinstall.org/Install-multitail-on-Mac-with-Brew/)), then:
```
USE_MULTITAIL="yes" make eth2_network_simulation
```
Youll get something like this (click for full size):
[![](https://i.imgur.com/Pc99VDO.png)](https://i.imgur.com/Pc99VDO.png)
You can find out more about the beacon node simulation [here](https://our.status.im/nimbus-development-update-03/#beaconsimulation).
### Building and running the Ethereum 2.0 local state transition simulation
This simulation is primarily designed for researchers, but we'll cover it briefly here in case you're curious :)
The [state transition](https://github.com/ethereum/annotated-spec/blob/master/phase0/beacon-chain.md#beacon-chain-state-transition-function) simulation quickly runs the beacon chain state transition function in isolation and outputs JSON snapshots of the state (directly to the `nim-beacon-chain` directory). It runs without networking and blocks are processed without slot time delays.
```bash
# build the state simulator, then display its help ("-d:release" speeds it
# up substantially, allowing the simulation of longer runs in reasonable time)
make NIMFLAGS="-d:release" state_sim
build/state_sim --help
```
Use the output of the `help` command to pass desired values to the simulator - experiment with changing the number of slots, validators, , etc. to get different results.
The most important options are:
- `slots` : the number of slots to run the simulation for (default 192)
- `validators`: the number of validators (default 6400)
- `attesterRatio`: the expected fraction of attesters that actually do their work for every slot (default 0.73)
- `json_interval`: how often JSON snapshots of the state are outputted (default every 32 slots -- or once per epoch)
For example, to run the state simulator for 384 slots, with 20,000 validators, and an average of 66% of attesters doing their work every slot, while outputting snapshots of the state twice per epoch, run:
```
build/state_sim --slots=384 --validators=20000 --attesterRatio=0.66 --json_interval=16
```
### Medalla Ethereum 2.0 Testnet
There is a publicly available [Ethereum 2.0](https://our.status.im/tag/two-point-oh) multi-client testnet running until at least October. Read all about it [here](https://blog.ethereum.org/2020/08/03/eth2-quick-update-no-14/), and learn how you can join it in [the Nimbus beacon chain book](https://status-im.github.io/nimbus-eth2/medalla.html) 💛

View File

@ -1,47 +0,0 @@
---
id: contributor_guide
title: Contributor Guide
---
## How to help with funding
We have a donation box set up at address `0xDeb4A0e8d9a8dB30a9f53AF2dCc9Eb27060c6557`, as well as a [Gitcoin Grant page](https://gitcoin.co/grants/137/nimbus-2/).
We use funds from donations to:
- fund bounties
- fund audits of our production code
- fund hardware on which to build Nimbus for you, from Raspberry Pis to feature phones
If you'd like to donate a conditional amount, i.e. one that depends on a certain milestone or deadline, please [get in touch](mailto:jacek@status.im).
## How To Get Involved with Nimbus' development
- look around [the repo](https://github.com/status-im/nimbus-eth2), especially the [open issues](https://github.com/status-im/nimbus-eth2/issues)
- check out some [open bounties](https://gitcoin.co/explorer?keywords=nimbus&order_by=-web3_created)
- learn about the source code by [dissecting](https://github.com/status-im/nimbus-eth2/tree/master/tests)
To configure your setup for development:
```bash
git clone https://github.com/status-im/nimbus-eth2
cd nimbus-eth2
make update
```
[Build](/docs/eth2.html) and start hacking!
## Thought Experiments
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Still hoping to just have my <a href="https://twitter.com/ethstatus?ref_src=twsrc%5Etfw">@ethstatus</a> desktop wallet be my bn, and have my mobile device be my <a href="https://twitter.com/ethnimbus?ref_src=twsrc%5Etfw">@ethnimbus</a> vc 🤷🏽‍♀️😅. And then a nice little Rocketpool Staas run by <a href="https://twitter.com/search?q=%24SNT&amp;src=ctag&amp;ref_src=twsrc%5Etfw">$SNT</a>... And anonymous staking in &quot;dark pools&quot; build on application layer, fees paid to client/network nodes. 👌🏽😻.</p>&mdash; chloethedev.eth ⟠ δούλος 🏳️‍⚧️ (@Chloethedev) <a href="https://twitter.com/Chloethedev/status/1320710462032515072?ref_src=twsrc%5Etfw">October 26, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
If you have research ideas you'd like to throw at us, exotic hardware you'd like to test on, or anything else revolutionary cooking up in your mind let us know. We'll gladly experiment!
## Guidelines
Whatever you might expect to see in other projects applies here:
- Be nice to others
- When evaluating PRs, focus exclusively on the quality of the code
- If submitting code, make sure it's tested. All code MUST come with tests. To speed up the review, ping a [team member](/docs/team).
- If submitting typo fixes or documentation changes, speed up the review process by pinging a team member. [Jacek](https://github.com/arnetheduck) or [Sacha](https://github.com/unixpi) will usually review those very quickly. The same applies if submitting a tutorial for inclusion on the [official blog](https://our.status.im/tag/nimbus).

View File

@ -1,111 +0,0 @@
---
id: custom-nimbus-testnet
title: Creating your own Nimbus testnet
---
## Building your own Nimbus testnet
All beacon nodes joining your custom testnet MUST be compiled with the same beacon chain constants - i.e. if a node is compiled with 8 slots per epoch, one with 16 slots per epoch will not be compatible with it. With that in mind, let's do this step of building the basic beacon node binary from within `vendor/nim-beacon-chain`, and let's also build the tool that can generate validator keys.
> Note that you need Go 1.12+ installed to build the libp2p Go daemon!
If you haven't cloned the beacon chain implementation already, do it now:
```bash
git clone https://github.com/status-im/nim-beacon-chain
cd nim-beacon-chain
make update
# >>> WINDOWS ONLY <<<
make fetch-dlls # WINDOWS ONLY
# >>> WINDOWS ONLY <<<
```
Then let's build the binaries of the tools we'll need.
```bash
export NIMFLAGS="-d:release -d:SECONDS_PER_SLOT=6 -d:SHARD_COUNT=64 -d:SLOTS_PER_EPOCH=64" \
&& make beacon_node validator_keygen
```
This will place the `beacon_node` binary and the `validator_keygen` tool in `build/` in the current folder.
Let's generate the folders where the node will store its data and then add the validator keys in there. I picked 500 keys.
```bash
mkdir -p $HOME/testnets/custom-network/data
./build/validator_keygen --totalValidators=500 --outputDir="$HOME/testnets/custom-network"
```
This will have placed 500 private key files and 500 public key files into the specified output folder.
Next, let's have the node generate a testnet for us with all the bells and whistles we might need to have others connect to us.
```bash
export NETWORK_DIR=$HOME/testnets/custom-network && ./build/beacon_node \
--dataDir=$NETWORK_DIR/data \
createTestnet \
--networkId=666 \
--validatorsDir=$NETWORK_DIR \
--totalValidators=500 \
--outputGenesis=$NETWORK_DIR/genesis.json \
--outputNetwork=$NETWORK_DIR/custom-network.json \
--bootstrapAddress=$(curl -s ifconfig.me) \
--bootstrapPort=34000 \
--genesisOffset=600
```
- We set the home folder of the custom network, pass it to the required params and have it generate the genesis file and the metadata file for others to join us through.
- The bootstrap address part is dynamically generated from the ifconfig.me service - you can manually input your public IP address here if you know it or if that service fails to detect it - test with `curl -s ifconfig.me` on the command line.
- The port is optional but recommended so you don't get some cross-chain noise when accidentally connecting to other nodes on the default port.
- The `genesisOffset` flag sets the time of genesis to some time in the future - in this case 10 minutes. We do this to give everyone who intends to join ample chance to join on genesis time because if they don't and the chain expects validators to be there and perform their duties, they'll be seen as offline and penalized and eventually kicked off the beacon chain.
Running the above command will result in two new files being created. In my case `$HOME/testnets/custom-network/genesis.json` and `$HOME/testnets/custom-network/custom-network.json`.
Because these files that were generated are made for others joining you, we need to make a copy of the `custom-network` file so that we can launch our node, the bootstrap node.
```bash
cp $HOME/testnets/custom-network/custom-network.json $HOME/testnets/custom-network/custom-network_boot.json
```
Then open this new file and delete the `bootstrapNodes` object, all of it. If you don't, the node you run will try to connect to a bootstrap node that is effectively its-not-yet-running-self. Without the `bootstrapNodes` part, the node just _runs_ so others can connect _to_ it.
We are now ready to connect and to share these files with those who would connect to us.
The `genesis.json` file is the starting state, "block 0" of your testnet beacon chain. It contains the listed validators, initial shufflings, and everything the system needs in order to have the clients connecting to the network build on the same foundation.
The `custom-network.json` file is the "metadata" file of your new network - it has identified your node, the one this file was generated with - as the bootstrap node and included its enode address under `bootstrapNodes`, along with the other required data and the root of the genesis.
Let's run the original node now.
```bash
./build/beacon_node --network=$HOME/testnets/custom-network/custom-network_boot.json --stateSnapshot=$HOME/testnets/custom-network/genesis.json --tcpPort=34000 --udpPort=34000
```
You can host `custom-network.json` and `genesis.json` on a server somewhere or in a [Github Gist](https://gist.github.com) so anyone grabbing them will be able to join your network if they execute the command:
```bash
./build/beacon_node --network=$HOME/testnets/custom-network/custom-network.json --stateSnapshot=$HOME/testnets/custom-network/genesis2.json --tcpPort=34001 --udpPort=34001
```
Let's run another node on the same machine where the bootstrap node is running. This requires that we create a new data dir, otherwise it'll clash with the current node. Execute the following chain of commands:
```bash
export DATA_DIR=$HOME/testnets/custom-testnet/node-1 && mkdir -p $DATA_DIR/data && mkdir -p $DATA_DIR/validators && ./build/beacon_node \
--network=$HOME/testnets/custom-network/custom-network_boot.json \
--stateSnapshot=$HOME/testnets/custom-network/genesis.json \
--tcpPort=34000 \
--udpPort=34000 \
--dataDir:$DATA_DIR/data \
--nodename:node1
```
However, they MUST first build their beacon node with the same parameters you did in the beginning of this setup:
```bash
export NIMFLAGS="-d:release -d:SECONDS_PER_SLOT=6 -d:SHARD_COUNT=64 -d:SLOTS_PER_EPOCH=64" && make beacon_node
```
Congrats, you have a custom Nimbus testnet up and running! Host those startup files somewhere, distribute some validator keys, and others can join your testnet!
[![Screenshot-from-2019-03-29-21-25-15](https://our.status.im/content/images/2019/03/Screenshot-from-2019-03-29-21-25-15.png)](https://our.status.im/content/images/2019/03/Screenshot-from-2019-03-29-21-25-15.png)

View File

@ -1,35 +0,0 @@
---
id: design
title: Embeddable, Lightweight, and Self-Contained
---
## Design goals
One of our most important design goals is an application architecture that makes it **simple to embed Nimbus into other software.**
Another is to **minimize reliance on third-party software.**
A third is for the application binary to be as **lightweight as possible in terms of resources used.**
## Integration with Status
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">I can&#39;t wait to run Nimbus straight from Status Desktop <a href="https://twitter.com/hashtag/hyped?src=hash&amp;ref_src=twsrc%5Etfw">#hyped</a></p>&mdash; JARRAÐ HOPΞ (@jarradhope) <a href="https://twitter.com/jarradhope/status/1293473249347555334?ref_src=twsrc%5Etfw">August 12, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
As part of our first design goal, our primary objective here is for Nimbus to be tightly integrated into the [Status messaging app](https://status.im/).
The dream is for you to be able to run an eth2 validator on Status desktop.
## Commitment to Ethereum Improvement Proposals (EIP)
We are committed to open standards and to maintaining consensus with other Ethereum-compliant implementations. As such, the development of Nimbus and the changes in its protocols follow [the EIP process](https://github.com/ethereum/EIPs/).
We played a role in drafting [EIP-3076: Slashing Protection Interchange Format](https://eips.ethereum.org/EIPS/eip-3076).
## Licensing: MIT, Apache v2.0
Most of our work is licensed under Apache 2.0 and MIT. A permissive licensing structure with patent protection would
1. Ensure the compatibility with GPL 2.0 and LGPL 2.0
1. Extend the reach of the Ethereum platform
1. Foster the highest degree of adoption by governments and enterprise

View File

@ -1,29 +0,0 @@
---
id: eth1
title: Execution layer (eth1)
---
While our core focus so far has been the consensus layer, we are now devoting significant resources to our execution layer client.
## Quickstart
To run Nimbus' [execution layer client](https://github.com/status-im/nimbus-eth1), first [install the prerequisites](https://github.com/status-im/nimbus-eth1#prerequisites).
Then run the following commands:
```bash
git clone https://github.com/status-im/nimbus-eth1
cd nimbus-eth1
make update
# >>> WINDOWS ONLY <<<
make fetch-dlls # WINDOWS ONLY
# >>> WINDOWS ONLY <<<
make nimbus
./build/nimbus
```
Nimbus will now run and attempt to synchronize with the Ethereum blockchain.
For a more complete overview see the [repository README](https://github.com/status-im/nimbus-eth1).

View File

@ -1,95 +0,0 @@
---
id: eth2
title: Connecting to the eth2 chain
---
Depending on your objective, there are various ways to run Nimbus in [Ethereum 2.0 mode](https://github.com/status-im/nimbus-eth2).
Here is where we push our code: https://github.com/status-im/nimbus-eth2
The reference documentation is [the Nimbus Book](https://nimbus.guide): it explains all the ways in which you can play with Nimbus, and use Nimbus to either monitor the eth2 chain or become a fully-fledged validator.
It's hosted here: https://nimbus.guide
## Build and run the Ethereum 2.0 local beacon chain simulation
The beacon chain simulation runs several beacon nodes on the local machine, attaches several local validators to each, and builds a beacon chain between them.
**Prerequisites:** At the moment, Nimbus has to be built from source, and has the following external dependencies -- developer tools (C compiler, Make, Bash, Git), [PCRE](https://www.pcre.org/); follow the instructions outlined [here](https://github.com/status-im/nim-beacon-chain#prerequisites-for-everyone) to install them.
Once you've installed the prerequisites, you're ready to enter the Ethereum 2.0 realm of Nimbus:
```bash
git clone https://github.com/status-im/nim-beacon-chain
cd nim-beacon-chain
make
make test
```
To run the simulation:
```bash
make eth2_network_simulation
```
If you'd like to clean the previous run's data:
```bash
make clean_eth2_network_simulation_all
```
To change the number of validators and nodes:
```bash
# Clear data files from your last run and start the simulation with a new genesis block:
make VALIDATORS=192 NODES=6 USER_NODES=1 eth2_network_simulation
```
If youd like to see the nodes running on separated sub-terminals inside one big window, install [Multitail](https://www.vanheusden.com/multitail/index.php) (if you're on a Mac, follow the instructions [here](https://brewinstall.org/Install-multitail-on-Mac-with-Brew/)), then:
```
USE_MULTITAIL="yes" make eth2_network_simulation
```
Youll get something like this (click for full size):
[![](https://i.imgur.com/Pc99VDO.png)](https://i.imgur.com/Pc99VDO.png)
You can find out more about the beacon node simulation [here](https://our.status.im/nimbus-development-update-03/#beaconsimulation).
## Build and run the Ethereum 2.0 local state transition simulation
This simulation is primarily designed for researchers, but we'll cover it briefly here in case you're curious :)
The [state transition](https://github.com/ethereum/annotated-spec/blob/master/phase0/beacon-chain.md#beacon-chain-state-transition-function) simulation quickly runs the beacon chain state transition function in isolation and outputs JSON snapshots of the state (directly to the `nim-beacon-chain` directory). It runs without networking and blocks are processed without slot time delays.
```bash
# build the state simulator, then display its help ("-d:release" speeds it
# up substantially, allowing the simulation of longer runs in reasonable time)
make NIMFLAGS="-d:release" state_sim
build/state_sim --help
```
Use the output of the `help` command to pass desired values to the simulator - experiment with changing the number of slots, validators, , etc. to get different results.
The most important options are:
- `slots` : the number of slots to run the simulation for (default 192)
- `validators`: the number of validators (default 6400)
- `attesterRatio`: the expected fraction of attesters that actually do their work for every slot (default 0.73)
- `json_interval`: how often JSON snapshots of the state are outputted (default every 32 slots -- or once per epoch)
For example, to run the state simulator for 384 slots, with 20,000 validators, and an average of 66% of attesters doing their work every slot, while outputting snapshots of the state twice per epoch, run:
```
build/state_sim --slots=384 --validators=20000 --attesterRatio=0.66 --json_interval=16
```
## Medalla Ethereum 2.0 Testnet
There is a publicly available [Ethereum 2.0](https://our.status.im/tag/two-point-oh) multi-client testnet currently running. Read all about it [here](https://blog.ethereum.org/2020/08/03/eth2-quick-update-no-14/), and learn how you can join it in [the Nimbus beacon chain book](https://status-im.github.io/nimbus-eth2/medalla.html) 💛

View File

@ -1,14 +0,0 @@
---
id: eth2
title: Consensus layer (eth2)
---
Depending on your objective, there are various ways to run Nimbus' [consensus layer client](https://github.com/status-im/nimbus-eth2).
The reference documentation is [the Nimbus Book](https://nimbus.guide): it explains all the ways in which you can play with Nimbus, and use Nimbus to either monitor the beacon chain or become a fully-fledged validator.
We encourage you to check it out.

View File

@ -1,21 +0,0 @@
---
id: faq
title: Frequently Asked Questions
---
In talking to people both familiar and complete strangers to Ethereum clients, these questions were asked more than once.
### Q: When do you expect to have it production-ready?
Soon. We've got some network simulations and a [public testnet](https://our.status.im/the-nimbus-mvp-testnet-is-here/) already running for [Ethereum 2.0](https://out.status.im/tag/two-point-oh), and we're syncing up to block 1.5 million on Ethereum 1.0. To stay in the loop, please follow our development updates on [our blog](https://our.status.im/tag/nimbus).
### Q: How is a super-light node different from just calling Infura through Web3js?
A Web3js or any similar JavaScript package for communicating with the blockchain is basically a more advanced XMLHttpRequest / Fetch wrapper. What we mean by this is that these packages retrieve information from another node and trust it implicitly. They ask "has this transaction been confirmed?" and get a response that's either "yes" or "that transaction is unknown".
With light nodes, they ask "give me the data to check if this transaction has been confirmed" and then check on their own. This is a trust-minimized setup which combines the best of both worlds - very little storage and processing power required while allowing for cryptographic verification of the full node's claims.
### Q: What's the plan for mobile?
While true that Nimbus only compiles to C, C++ and JavaScript and iOS and Android don't support C natively (and we definitely don't want a JS version of Nimbus running on a mobile device), native compiles with Nim work for both Android and iOS, just like geth written in go works. It's all NDK/C API. We'll soon have published specific instructions on how to compile it for all manner of devices, but you can already give it a go by following the [build instructions](/docs/building.html). Nimbus already runs just fine on OS X and any flavor of Linux, including a [NanoPC-T4 ARM](https://twitter.com/bitfalls/status/1111329152928485377) computer.

View File

@ -1,32 +0,0 @@
---
id: fluffy
title: Fluffy, an ultra light client for Ethereum
---
Nimbus has joined the Ethereum Foundations Portal Network team as one of the launch clients for the portal network.
In a sentence, [the Portal Network](https://github.com/ethereum/stateless-ethereum-specs/blob/master/portal-network.md#network-functionality) is an in-progress cross-team effort to re-imagine the ethereum light client, and develop a practical and functional light client experience.
In particular, our aim is to work together with the EF to develop a new set of Ethereum protocols alongside the existing Eth protocol that will specifically serve this new way of accessing Ethereum data.
The overarching goal is to provide a mode of operation for Ethereum that serves common usage patterns, as opposed to keeping track of the full state at all times, as current clients do.
What we are talking about building here is **the perfect client for a wallet. An ultra-light client that contributes to the network and does not require syncing** (i.e. is immediately usable from a fresh install or after being offline).
As such, one of the end goals for us is to embed this sort of client directly inside the Status app.
This has the potential to both improve the security and privacy of our users (we will no longer have any reliance on Infura), as well as improve Ethereums resilience by allowing each user to contribute back to the health of the network.
## Resources
- [Our introductory post](https://our.status.im/nimbus-fluffly/)
- The Portal Wire protocol is added to the nim-eth repository, as Node Discovery v5.1 sub-protocol: https://github.com/status-im/nim-eth
- Specifications: https://github.com/ethereum/stateless-ethereum-specs/
- Website: https://www.ethportal.net/
- Some quick notes regarding first Portal Wire interop tests with ddht and trin- https://gist.github.com/kdeme/36795f5deae7d02ce1785e9c7d501e53
- Fluffy, our Portal Network client can be found in our nimbus-eth1 repository: https://github.com/status-im/nimbus-eth1/tree/master/fluffy
- Portal Network specifications: https://github.com/ethereum/stateless-ethereum-specs/blob/master/portal-network.md
- Portal Network website: https://www.ethportal.net/
- [The winding road to functional light clients](https://snakecharmers.ethereum.org/the-winding-road-to-functional-light-clients/) blog post series of Piper Merriam
- [This video talk](https://www.youtube.com/watch?v=MZxqRs_tLNs) about the subject.

View File

@ -1,31 +0,0 @@
title: A lighter Ethereum Client
---
## Overview
Nimbus is a client implementation for both Ethereum's consensus layer (eth2) and execution layer (eth1) that strives to be as lightweight as possible in terms of resources used. This allows it to perform well on embedded systems, embedded devices -- including Raspberry Pis and mobile devices.
However, **resource-restricted hardware is not the only thing Nimbus is good for.** Its low resource consumption makes it **easy to run Nimbus together with other workloads on your server** (this is especially valuable for stakers looking to lower the cost of their server instances).
## Programming language
[Nim](https://nim-lang.org/) is an efficient, general-purpose systems programming language with a Python-like syntax that compiles to C. Nim allows us to implement Ethereum rapidly and take advantage of the mature C-language tooling: in compilation of machine code, and in the analysis of static code.
The end result of implementing in Nim is code that:
1. Enables us to easily bring research into production
2. Has a high degree of reasonability for researchers
3. Is performant in production
Both the Nim core contributors and the wider Nim community have been very supportive of this choice.
## Light by design
Existing implementations of Ethereum have focused on desktop computers and servers. These implementations have played a major role in the initial success of Ethereum, however, their deployment on resource-restricted systems has been an afterthought.
We believe the ability to run a node on resource-restricted hardware is key to a safe and secure Ethereum going forward.
As such, **Nimbus strives to perform just as well on resource-restricted hardware as it does on desktop computers and servers.**

View File

@ -1,54 +0,0 @@
title: An Ethereum 2.0 Sharding Client
---
## Overview
Nimbus aims to be a [sharding](https://github.com/ethereum/wiki/wiki/Sharding-FAQ) client implementation for the Ethereum Blockchain Application Platform. Because the largest deployment of Ethereum will potentially be on embedded systems, Nimbus will be designed to perform well on IoT and personal mobile devices, including older smartphones with resource-restricted hardware. The extensible, configurable, and modular design of Nimbus will make it production ready for Web 3.0 and will ensure that it can be supported and maintained across all goals of Ethereum 2.0.
## GOALS
1. Create an Ethereum implementation suitable for resource-restricted devices.
1. Create an implementation team for the [Applied Research Objectives](https://hackmd.io/s/HkLkj55yb#objectives-in-applied-research) of [Ethereum Research](http://ethereumresearch.org/) (aka Ethereum Asia Pacific Limited), with focus on the following:
1. Proof of Stake (PoS)
1. Sharding
1. Stateless Clients
1. LES2
1. eWASM
1. Close the gap between research modeling and production.
1. Pledge to participate in, help implement, and conform to the [Ethereum Improvement Proposal](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1.md).
1. Implement permissive licensing.
1. Focus on production-ready [Web 3.0](https://medium.com/@matteozago/why-the-web-3-0-matters-and-you-should-know-about-it-a5851d63c949) Stack ([Whisper](https://github.com/ethereum/wiki/wiki/Whisper), [PSS](https://github.com/nolash/psstalk/blob/master/README.md), and [Swarm](https://swarm-guide.readthedocs.io/en/latest/introduction.html)) and its ongoing research and development.
1. Focus on marketing and promotion to address community concerns on scalability and to bolster Ethereum's dominant mindshare.
## REQUIREMENTS
[Nim](https://nim-lang.org/) is an efficient, general-purpose systems programming language with a Python-like syntax that compiles to C. Nim will allow us to implement Ethereum rapidly and to take advantage of the mature C-language tooling: in compilation of machine code, and in the analysis of static code.
With Ethereum research currently modeled in Python, the end result of implementing in Nim should be code that:
1. Enables us to easily bring research into production
1. Has a high degree of reasonability for researchers
1. Is performant in production
The core contributors and Nim community have been very supportive and enthusiastic for the project.
## Development on Embedded Systems
We believe that the largest successful deployment of Ethereum will reside on embedded systems: IoT devices and mobile personal devices, such as smartphones. Although Nimbus will support archival nodes, its first implementation will be as a light client, with focus on Proof of Stake and sharding.
Existing implementations of Ethereum have focused on desktop computers and servers. These implementations have played a major role in the initial success of Ethereum, and they are suitable for full and archival nodes. However, their deployment onto embedded systems has been an afterthought.
In addition, throughout the development of Status, we have found that the dominant Ethereum implementations, Geth and Parity, are unsuitable for our target platform unless they are profiled and optimised (in progress).
During the deployment of Status among 40,000 alpha testers, we found that a significant portion (23.6%) of users were still running old mobile devices. In addition, recently discovered [Spectre vulnerabilities](https://en.wikipedia.org/wiki/Spectre_(security_vulnerability)) have led to an increase in the demand for open processors. For these reasons, we propose a self-imposed constraint and a requirement that Status perform well on the following:
1. 2014 [SoC](https://en.wikipedia.org/wiki/System_on_a_chip) architectures, such as the [Cortex-A53](https://developer.arm.com/products/processors/cortex-a/cortex-a53) (Samsung Note 4 & [Raspberry Pi 3](https://www.raspberrypi.org/products/raspberry-pi-3-model-b/)) and the Apple A8 (iPhone 6)
1. [MIPS](https://en.wikipedia.org/wiki/MIPS_architecture)-based architectures, such as the [Onion Omega2](https://onion.io/omega2/)
1. Open-source processors, such as [RISC-V](https://en.wikipedia.org/wiki/RISC-V)
When the 2020 scalability goal is fully realised, this constraint will help ensure that Ethereum runs performantly on resource-restricted hardware that is at least 6 years old.

View File

@ -1,41 +0,0 @@
---
id: libraries
title: Explore our libraries
---
In addition to our [execution layer](https://github.com/status-im/nimbus-eth1) and [consensus layer](https://github.com/status-im/nimbus-eth2) clients we have developed several high-quality libraries (the product of our ethereum work in Nim). These include:
- Nim libp2p: https://github.com/status-im/nim-libp2p
- Nim BLS Curve: https://github.com/status-im/nim-blscurve
- Nim Waku - Waku is a fork of the original Whisper protocol that enables better usability for resource restricted devices: https://github.com/status-im/nim-waku
- Nim QUIC - QUIC is being adopted as the underlying protocol for HTTP/3 and has the potential to give us censorship resistance due to its resistance to deep packet inspection: https://github.com/status-im/nim-quic
- Cryptographic functions: https://github.com/cheatfate/nimcrypto
- Nim Chronicles - detailed logging for Nim: https://github.com/status-im/nim-chronicles
- Nim Chronos - async Nim: https://github.com/status-im/nim-chronos
- Nim Web3 - https://github.com/status-im/nim-web3
- Ethereum Smart Contracts in Nim: https://github.com/status-im/nim-eth-contracts
- Nim JSON-RPC - a library for routing JSON 2.0 format remote procedure calls over different transports: https://github.com/status-im/nim-json-rpc
- Nim Stint - a stack based arbitrary precision library: https://github.com/status-im/nim-stint
- Nim Libbacktrace: https://github.com/status-im/nim-libbacktrace
- Nim EthHash - proof of work algorithm from Ethereum 1.0 reimplemented in Nim: https://github.com/status-im/nim-ethash
- Nim Eth - Ethereum-related utilities written in Nim: https://github.com/status-im/nim-eth
- Documentation Generator - language agnostic (but Nim-preconfigured) generator for beautiful detailed documentation suites for sets of libraries: https://github.com/status-im/nimbus-docs-suite
- Nim presto - an efficient library for REST API implementation: https://github.com/status-im/nim-presto
We hope you take the time to check them out :)

View File

@ -1,5 +0,0 @@
---
id: libs
title: Software Libraries
---

View File

@ -1,168 +0,0 @@
---
id: milestones
title: Milestones
---
Timelines are approximate and affected by research, implementation considerations, and revisions made while the team produces a detailed implementation timeline.
## Formation of the Team, and Detailed Project Implementation Timeline
### January - February 2018
### Completed:
1. Form the initial team
1. Define the project's scope, architecture, and implementation timelines
### Goals:
1. Hire core contributors:
1. Five (5) full-time core contributors
1. Up to five (5) part-time core contributors
1. One (1) Technical Program Manager
1. One (1) Technical Writer
1. Up to ten (10) full-time core contributors by 2019
1. Create a detailed timeline for implementing the project as a deliverable
## Compatibility with Ethereum 1.0
### January - November 2018
As an initial goal, we will focus on implementing all components required for interoperability with the Ethereum ecosystem. We will publish these components as independently reusable modules and libraries.
However, before starting the implementation in Nim, we will develop an understanding of the existing implementations of Ethereum: [Go Ethereum](https://github.com/ethereum/go-ethereum/), [Pyethereum](https://github.com/ethereum/pyethereum), [Py-EVM](https://github.com/ethereum/py-evm), and [Parity](https://github.com/paritytech/parity).
The code will consist of independently reusable libraries that have the same permissive license as that of Nimbus itself:
1. [RLP encoding and decoding](https://github.com/status-im/nim-rlp)
1. [Handling of the state database and users' keyfiles](https://github.com/status-im/nim-eth-keyfile/blob/master/README.md)
1. Connecting to the Ethereum network
1. Ethereum Patricia Trees
1. [RLPx](https://github.com/ethereum/devp2p/blob/master/rlpx.md#introduction) sub-protocols
1. Ethereum [Ethash](https://github.com/ethereum/wiki/wiki/Ethash) function
1. Implementation of EVM
### Goals:
1. Nimbus is able to
1. Sync with the latest blockchain, from scratch
1. Accurately execute the entire transaction history
1. The team is familiar with all codebases used to implement Ethereum.
1. The team understands the main themes from [ethresear.ch](https://ethresear.ch/) and actively participates in EIPs.
## Sharding Phase 1
### July - November 2018
While implementing compatibility with Ethereum 1.0, we will gain early experience with the complete setup of sharding. As a result:
1. The client will implement the core features necessary for sharding Phase 1.
1. The team will actively participate in sharding-related EIPs.
### Goal:
The architecture of Nimbus supports sharding nodes.
## Auditing of Beta and Security
### November 2018 - March 2019
An independent security partner will continuously perform a security audit on the Nimbus codebase. We will also adopt frequent reviews of code, testing with automated fuzzing frameworks, and other practices that enhance security. In addition, we will develop a Nim-optimized fuzzing framework and will release it for use by the community at large.
### Goal:
Deliver a security-audited, production-ready client.
## Implementation of Whisper and PSS
### July - November 2018
We will set and advertise the bounties as soon as the P2P layer gets implemented. The core team will start working on this in July, unless already completed.
### Goals:
1. Make Nimbus the leading platform for conducting research into the scalability aspects of Whisper and PSS. We consider this a key requirement for implementing a fully decentralised Status messaging platform within the Ethereum network.
1. Deliver easy-to-use APIs for conducting large-scale and small-scale experiments within the network.
## Support for LES
### July - November 2018
We will optimize the architecture of Nimbus for implementing the [LES protocol](https://github.com/ethereum/wiki/wiki/Light-client-protocol). We will also optimize all internal state-handling operations such that they work efficiently and asynchronously. This will enable on-demand fetching of data from the network. This will also ensure that Nimbus runs with a high degree of concurrency and that the client UI is responsive.
### Goals:
1. Enable a Light Mode switch in Nimbus.
1. Successfully operate Nimbus in a mobile environment, without relying on a proxy service.
## Sharding Phase 2
### November 2018 - July 2019
We will focus on achieving compatibility with all other clients. In addition, we will implement an [eWASM](https://github.com/ewasm/design/blob/master/README.md) runtime and will add Nim as one of the languages that can target the new VM.
### Goals:
Implement the following in Nim:
1. CLI tools and APIs for running Phase 2 nodes and for interacting with the Validator Manager Contract (VMC)
1. The development tools that will target the eWASM runtime environment
## Casper Implementation
### December 2018 - February 2019
The team will closely follow the development of [Casper](https://blockgeeks.com/guides/ethereum-casper/) and will try to achieve and maintain compatibility with the existing Casper deployments.
## Implementation of Swarm
### January - July 2019
We will set and advertise the bounties as soon as the P2P layer gets implemented. The core team will start working on this in January, unless already completed.
### Goals:
Implement the following:
1. Ability to embed Nimbus into applications that deliver the complete Web 3.0 experience
1. Support for the [Ethereum Name Service](https://ens.domains/)
1. Support for a virtual file-system interface for accessing web content published on Swarm
1. Reusable APIs for publishing and obtaining content from Swarm
## Sharding Phase 3
### March - August 2019
We will leverage our LES-optimized architecture to deliver a fully stateless client optimized for mobile devices.
### Goals:
Implement support for the following:
1. Always-on operations on mobile devices, without disrupting the battery life or inducing significant bandwidth charges
1. Running stateless executor nodes in deployments of headless servers
## Ongoing Improvements in Sharding
### August - December 2019
### Goals:
1. Become one of the leading production-ready sharding implementations in the Ethereum ecosystem.
1. Take active part in the effort to specify the new programming models required for cross-shard interactions.
1. Provide an ongoing research into the applicability and performance characteristics of all super-quadratic sharding designs in a mobile environment.

View File

@ -1,6 +0,0 @@
---
id: options
title: Beyond the Basics
---
Let's look

View File

@ -1,21 +0,0 @@
---
id: resources
title: Resources
---
1. [Awesome Ethereum Virtual Machine](https://github.com/pirapira/awesome-ethereum-virtual-machine)
1. [Detailed introduction to the sharding proposal](https://github.com/ethereum/sharding/blob/develop/docs/doc.md)
1. [Sharding FAQ](https://github.com/ethereum/wiki/wiki/Sharding-FAQ)
1. [Ethereum 2.0: A presentation by Vitalik Buterin at BeyondBlock Taipei 2017](https://www.youtube.com/watch?v=9RtSod8EXn4&feature=youtu.be&t=11493)
1. [The Stateless Client Concept](https://ethresear.ch/t/the-stateless-client-concept/172)
1. [A Modest Proposal for Ethereum 2.0: A presentation by Vitalik Buterin at devcon three](https://youtu.be/hAhUfCjjkXc)
1. [Python Implementation of the EVM](https://github.com/ethereum/py-evm/blob/master/README.md)
1. [Discussion about sharding](https://ethresear.ch/c/sharding)
1. [Discussion on Casper, scalability, abstraction and other low-level protocol research topics](https://gitter.im/ethereum/research)
1. [ethereum/py-evm](https://gitter.im/ethereum/py-evm)
1. [Ethereum Sharding: Overview and Finality](https://medium.com/@icebearhww/ethereum-sharding-and-finality-65248951f649)
1. [Sharding - Mind Map](https://www.mindomo.com/mindmap/sharding-d7cf8b6dee714d01a77388cb5d9d2a01)
1. [On Settlement Finality](https://blog.ethereum.org/2016/05/09/on-settlement-finality/)
1. [Casper contract and full POS](https://ethresear.ch/t/casper-contract-and-full-pos/136/2)
1. [Ethereum Casper 101](http://notes.eth.sg/MYEwhswJwMzAtADgCwEYBM9kAYBGJ4wBTETKdGZdXAVmRvUQDYg=?view#)
1. [ethersphere/swarm, Light mode of operation](https://github.com/ethersphere/swarm/wiki/Light-mode-of-operation)

View File

@ -1,45 +0,0 @@
---
id: t0
title: Joining Nimbus Testnet0
---
This document is a very short guide on how to join our testnet. For a full explanation of what's going on behind the scenes, please see the official [announcement post](https://our.status.im/the-nimbus-mvp-testnet-is-here/).
## Joining Nimbus Testnet 0
_Note: in the below commands, the command `make` is universal to *nix systems like Linux / OS X. On Windows, it becomes available with [Git Bash](https://git-scm.com/download/win) if you install Git for Windows, but you can also install [MinGW64](https://github.com/status-im/nimbus#windows) (recommended)._
Here is the full process if you're starting from scratch, without even Nim installed (you still need RocksDB though, so [install that first](https://github.com/status-im/nimbus#rocksdb)), unless you're on Windows, in which case the "WINDOWS ONLY" part below will handle the problem for you:
```bash
# Ensure you have rocksdb installed before running this!
git clone https://github.com/status-im/nim-beacon-chain
cd nim-beacon-chain
make update # this might take a few minutes
# >>> WINDOWS ONLY <<<
make fetch-dlls # WINDOWS ONLY
# >>> WINDOWS ONLY <<<
make testnet0
./build/testnet0_node # this launches the testnet0-specific node you just built
```
Here is the full process if you've already run testnet0 before but might be stuck with old source code or old, incompatible cache.
```bash
cd nim-beacon-chain
make update # update dependencies
# >>> WINDOWS ONLY <<<
make fetch-dlls # WINDOWS ONLY
# >>> WINDOWS ONLY <<<
cd vendor/nim-beacon-chain
make clean-testnet0 testnet0 # clean cache and rebuild binary
./build/testnet0_node # this launches the testnet0-specific node you just built
```
Congratulations, you should now be joining us - your node will start syncing with the current state of our beacon chain. Once you're in sync, you should also start proposing your own blocks and providing attestations - exciting! You are now among [Ethereum 2.0 Nimbus pioneers](https://gitcoin.co/kudos/1160/nimbus_pilot)!
[![](https://our.status.im/content/images/2019/03/Annotation-2019-03-29-202131-1.png)](https://our.status.im/content/images/2019/03/Annotation-2019-03-29-202131-1.png)

View File

@ -1,42 +0,0 @@
---
id: t1
title: Joining Nimbus Testnet1
---
Testnet1 is a cutting edge highly breakable in-flux testnet we use to test new features. If you do join, please [take the time to report any bugs](https://github.com/status-im/nim-beacon-chain/issues).
## Joining Nimbus Testnet 1
Before following the instructions below, please make sure you have Go installed. Follow [official instructions](https://golang.org/doc/install) and make sure it's above version 1.12. This is required because we build the Libp2p Go daemon. You also need `git-lfs` installed - on Windows that's a command documented below, on other operating systems it can be installed using your system's package manager (e.g. `sudo apt-get install git-lfs`).
```bash
git clone https://github.com/status-im/nim-beacon-chain
cd nim-beacon-chain
git fetch
git checkout devel
make update
# >>> WINDOWS ONLY <<<
make fetch-dlls # WINDOWS ONLY
# >>> WINDOWS ONLY <<<
make clean-testnet1 testnet1
./scripts/testnet1.sh
```
Your node should be connecting to others now:
```bash
DBG 2019-07-12 09:39:47+02:00 UPnP topics="nat" tid=8215 msg="Internet Gateway Device found but it's not connected. Trying anyway."
DBG 2019-07-12 09:39:47+02:00 UPnP: added port mapping topics="nat" tid=8215 externalPort=9100 internalPort=9100 protocol=TCP
DBG 2019-07-12 09:39:47+02:00 UPnP: added port mapping topics="nat" tid=8215 externalPort=9100 internalPort=9100 protocol=UDP
INF 2019-07-12 09:39:47+02:00 Starting the LibP2P daemon tid=8215 announcedAddresses=@[/ip4/0.0.0.0/tcp/9100] hostAddress=/ip4/0.0.0.0/tcp/9100 keyFile=/home/swader/.cache/nimbus/BeaconNode/testnet1/privkey.protobuf
INF 2019-07-12 09:39:48+02:00 Connecting to bootstrap nodes tid=8215 bootstrapNodes="@[{PeerID: '12D3KooWQmdmkcSdRaeLy8dMf9mCMeakJtxgHfX5qGAfqmvu7wTX' Addresses: ['/ip4/188.166.38.238/tcp/9100']}]"
DBG 2019-07-12 09:39:49+02:00 Peer connected. Initiating sync tid=8215 bestSlot=0 peer=12*vu7wTX remoteBestSlot=4552
DBG 2019-07-12 09:39:49+02:00 Waiting for block headers tid=8215 fromPeer=12*vu7wTX peer=12*vu7wTX remoteBestSlot=4552
DBG 2019-07-12 09:39:51+02:00 Block headers received. Requesting block bodies tid=8215 peer=12*vu7wTX
DBG 2019-07-12 09:39:57+02:00 Block received tid=8215 blck="(slot: 16, parent_root: \"4EDB527C\", state_root: \"27EEB0FE\", proposer_slashings_len: 0, attester_slashings_len: 0, attestations_len: 0, deposits_len: 0, voluntary_exits_len: 0, transfers_len: 0, signature: \"b5dbe5e4\")" blockRoot=76BE6B5D
DBG 2019-07-12 09:39:57+02:00 Advancing state with empty slots tid=8215 stateSlot=0 targetSlot=15
INF 2019-07-12 09:39:57+02:00 Block resolved tid=8215 blck="(slot: 16, parent_root: \"4EDB527C\", state_root: \"27EEB0FE\", proposer_slashings_len: 0, attester_slashings_len: 0, attestations_len: 0, deposits_len: 0, voluntary_exits_len: 0, transfers_len: 0, signature: \"b5dbe5e4\")" blockRoot=76BE6B5D justifiedRoot=4EDB527C justifiedSlot=0
DBG 2019-07-12 09:39:57+02:00 Block received
```

View File

@ -1,6 +0,0 @@
layout: plugins
title: Extensions
data: plugins
partial: plugin
comments: false
---

View File

@ -1,3 +0,0 @@
title: Nimbus
layout: index
---

View File

@ -1 +0,0 @@
User-agent: *

View File

@ -0,0 +1 @@
export * from '@acid-info/logos-docusaurus-theme/lib/client/components/mdx'

7
src/css/custom.scss Normal file
View File

@ -0,0 +1,7 @@
:root {
}
body,
html {
overflow-x: hidden;
}

108
src/pages/index.mdx Normal file
View File

@ -0,0 +1,108 @@
import {
Hero,
HeroTitle,
HeroDescription,
HeroActions,
HeroAction,
CallToActionSection,
FeatureList,
Showcase,
HeroModel,
HeroInfo,
} from '../components/mdx'
<Hero size="large">
<HeroInfo>
<HeroTitle>The web3 managing standard</HeroTitle>
{/*
<HeroDescription>
Waku is a decentralized communications network that enables private, censorship-resistant messaging for web3 applications.
</HeroDescription>
* */}
<HeroDescription>
WAKU IS A DECENTRALIZED COMMUNICATIONS NETWORK.
</HeroDescription>
<HeroActions>
<HeroAction href="https://docs.waku.org" target="_blank">
Build on Waku
</HeroAction>
<HeroAction variant="filled" href="https://docs.waku.org" target="_blank">
Run Waku
</HeroAction>
</HeroActions>
</HeroInfo>
<HeroModel
modelUrl="/hero/bulanding-generic-hand-01.glb"
layout="floating"
renderer="ascii"
initialX={-0.9831336272264352}
initialY={-0.14592188008227222}
rotateSpeed={0.1}
asciiConfig={{
characters: ' .,:;ox%# ||| ||| waku @',
}}
/>
</Hero>
<FeatureList
id="features"
features={[
{
title: 'Private',
description:
'Waku leverages cutting-edge zero-knowledge encryption to ensure all messages and associated metadata benefit from rock-solid privacy guarantees.',
},
{
title: 'Runs anywhere',
description:
"Waku's modularity enables developers to integrate Waku protocols according to their use case and users' hardware restraints",
},
{
title: 'Scalable',
description:
'Waku aims to scale to support millions of users by dividing the flow of messages into shards—not every node needs to forward every message—while discovery protocols ensure users connect to the nodes serving relevant messages.',
},
{
title: 'Secure',
description:
"Waku's native incentivization mechanisms ensure a wide node distribution, making it highly secure and strengthening its privacy assurances.",
},
]}
/>
<CallToActionSection
title="User adoptions"
description="Waku has brought private, censorship-resistant communications to several notable web3 DApps, decentralizing their messaging components:"
label="Decentralize your DApp"
href="/join"
/>
<Showcase
id="showcase"
items={[
{
name: 'XMTP',
logo: '/showcase/xmtp-mark-white.svg',
description:
"Inter-blockchain account messaging protocol XMTP uses Waku's Go implementation to facilitate communication between nodes in its currently permissioned network.",
},
{
name: 'Status',
logo: '/showcase/status-mark-white.svg',
description:
"Waku powers many of the Status super app's features, including its private messaging.",
},
{
name: 'Railgun',
logo: '/showcase/railgun-mark-white.svg',
description:
'The privacy-focused DeFi protocol Railgun anonymizes Ethereum transactions with Waku. ',
},
]}
/>
<CallToActionSection
title="Join the community to discover what Waku can bring to your DApp"
label="Decentralize your DApp"
href="/join"
/>

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
static/hero/bust-hi.glb Normal file

Binary file not shown.

Binary file not shown.

BIN
static/hero/logos.glb Normal file

Binary file not shown.

View File

@ -0,0 +1,4 @@
<svg width="58" height="58" viewBox="0 0 58 58" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="58" height="58" rx="29" fill="white"/>
<path d="M23 39V19H29.737C31.2013 19 32.4164 19.2669 33.3823 19.8008C34.3544 20.3346 35.0804 21.0736 35.5603 22.0176C36.0402 22.9551 36.2802 24.0391 36.2802 25.2695C36.2802 26.4935 36.0371 27.571 35.5511 28.502C35.0712 29.4264 34.3452 30.1458 33.3731 30.6602C32.4072 31.1745 31.192 31.4316 29.7278 31.4316H24.6243V28.834H29.4693C30.3922 28.834 31.1428 28.694 31.7212 28.4141C32.3056 28.1341 32.7332 27.7272 33.004 27.1934C33.2747 26.6595 33.41 26.0182 33.41 25.2695C33.41 24.5143 33.2716 23.86 32.9947 23.3066C32.724 22.7533 32.2964 22.3301 31.7119 22.0371C31.1336 21.7376 30.3738 21.5879 29.4324 21.5879H25.8517V39H23ZM32.3303 29.9766L37 39H33.7515L29.174 29.9766H32.3303Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 845 B

View File

@ -0,0 +1,3 @@
<svg width="58" height="58" viewBox="0 0 58 58" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M33.6479 28.7455C30.3452 28.9358 28.2754 28.1665 24.9723 28.3573C24.1531 28.4033 23.3396 28.522 22.5412 28.7121C23.0288 22.6037 27.3519 17.2602 33.2306 16.9205C36.8381 16.7123 40.4439 18.9397 40.6394 22.5555C40.8319 26.1094 38.1221 28.487 33.6483 28.7451L33.6479 28.7455ZM24.779 41.24C21.323 41.4352 17.8692 39.3501 17.6817 35.9665C17.4972 32.6404 20.0937 30.4152 24.3794 30.1736C27.543 29.9953 29.5261 30.7157 32.6897 30.5369C33.4741 30.4939 34.2533 30.3828 35.0186 30.2048C34.5523 35.9214 30.411 40.9226 24.779 41.24ZM28.9999 1.4449C13.7812 1.44446 1.44434 13.7812 1.44434 29C1.44434 44.2189 13.7812 56.5556 28.9999 56.5556C44.2186 56.5556 56.5554 44.2184 56.5554 29C56.5554 13.7816 44.2186 1.44446 28.9999 1.44446" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 885 B

View File

@ -0,0 +1,10 @@
<svg width="57" height="58" viewBox="0 0 57 58" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_603_7836)">
<path d="M0 29C0 12.9837 12.8112 0 28.6147 0C44.4079 0 56.61 12.7424 56.9815 28.8744C56.9815 34.0217 55.2473 38.3527 50.9119 42.4328C47.2482 45.8808 41.0019 46.3874 36.4191 43.8139C33.1479 41.9015 30.627 37.8289 28.4908 34.8377L24.5268 40.9892H15.9796L24.0314 28.8739L16.2274 16.948H25.0223L28.5528 23.0996L32.0211 16.948H40.8782L32.8265 28.8744C32.8265 28.8744 36.6665 34.8377 38.7722 37.1602C40.8782 39.4828 44.7182 39.5455 47.1955 37.0346C49.9195 34.274 50.5292 32.0759 50.5403 28.8744C50.5828 16.4828 40.8709 6.52813 28.6147 6.52813C16.3687 6.52813 6.44139 16.5891 6.44139 29C6.44139 41.4108 16.3687 51.472 28.6147 51.472C30.3085 51.472 31.932 51.3277 33.5077 50.9696L34.8704 57.3096C32.6282 57.819 30.8169 58 28.6147 58C12.8112 58 0 45.0162 0 29Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_603_7836">
<rect width="57" height="58" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1015 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

View File

@ -1,42 +0,0 @@
menu:
overview: Overview
plugins: Plugins
themes: Themes
search: Search
blog: Blog
tutorials: Tutorials
index:
get_started: Get started
page:
contents: Contents
back_to_top: Back to Top
improve: Improve this doc
prev: Prev
next: Next
last_updated: "Last updated: %s"
sidebar:
docs:
Nimbus: Nimbus
introduction: What Is Nimbus?
eth1: Execution layer
eth2: Consensus layer
fluffy: Fluffy
libraries: Software Libraries
milestones: Milestones
design: Design
faq : FAQ
libs: Software Libraries
building: Getting Started
the_book: The Book
resources: Resources
team: Team
options: Beyond the Basics
contributor_guide: Contributor Guide
Testnet 0: Testnet 0
Testnet 1: Testnet 1
Custom Testnet: Custom Testnet
Guides: Guides
Ethereum 1: Ethereum 1

View File

@ -1,19 +0,0 @@
{% set page.title = 'News' %}
<div id="content-wrap">
<div class="wrapper">
<div class="inner">
{% for post in page.posts %}
{% if loop.index == 1 %}
{{ partial('partial/post', {post: post}) }}
{% else %}
<article class="article post archive-post" itemscope itemtype="http://schema.org/Article">
<a class="archive-post-link" href="{{ url_for(post.path) }}">
<strong class="archive-post-title" itemprop="name">{{ post.title }}</strong>
<span class="archive-post-date">{{ time_tag(post.date) }}</span>
</a>
</article>
{% endif %}
{% endfor %}
</div>
</div>
</div>

View File

@ -1,7 +0,0 @@
<div id="content-wrap">
<div class="wrapper">
<div class="inner">
{{ page.content }}
</div>
</div>
</div>

View File

@ -1,107 +0,0 @@
<div class="home-cover">
{{ partial('partial/header') }}
<div class="intro">
<h1>Nimbus</h1>
<p>We build lighter Ethereum clients</p>
<div class="intro-buttons">
<a class="button button--main" href="https://discord.gg/qnjVyhatUa">JOIN OUR DISCORD</a>
<a class="button button--main" href="http://subscribe.nimbus.team/">Stay updated</a>
</div>
</div>
</div>
<div class="home-wrap">
<div id="about" class="section-header section-header--main">
<h2 id="top-header">We build lighter Ethereum clients</h2>
<p>
Nimbus is a client implementation that strives to be as lightweight as possible in terms of resources used. This allows it to perform well on embedded systems, resource-restricted devices -- including Raspberry Pis and mobile devices -- and multi-purpose servers.
</p>
<a href="/docs">See our overview <img src="../img/arrow_orange.svg" /></a>
<div class="work-item">
<img class="work-item-image work-item-image-right" src="../img/graphic-platform-support.svg" />
<div class="work-item-inner">
<h2>Consensus layer (eth2)</h2>
<p>You can use Nimbus today to both monitor the beacon chain and join the network as a fully-fledged validator.
</p>
<a href="https://nimbus.guide">See our guide <img src="../img/arrow_orange.svg" /></a>
</div>
</div>
<div class="work-item">
<div class="work-item-inner">
<h2>Execution layer (eth1)</h2>
<p>We are working hard on a lightweight execution layer client to complement our consensus layer client.
</p>
<a href="https://github.com/status-im/nimbus-eth1">Keep up with our progress <img src="../img/arrow_orange.svg" /></a>
</div>
<img class="work-item-image work-item-image-right" src="../img/graphic-research.svg" />
</div>
<div class="work-item">
<img class="work-item-image work-item-image-right" src="../img/graphic-network.svg" />
<div class="work-item-inner">
<h2>Fluffy</h2>
<p>We're also working on the perfect client for a wallet. An ultra-light client that contributes to the network and does not require syncing.
</p>
<a href="https://our.status.im/nimbus-fluffly/">Read the introduction post <img src="../img/arrow_orange.svg" /></a>
</div>
</div>
<div class="work-item">
<div class="work-item-inner">
<h2>Free and open source philosophy</h2>
<p>Were building Nimbus as a common good with liberal licensing to allow for the widest deployment of Ethereum possible.
</p>
</div>
<img class="work-item-image work-item-image-right" src="../img/graphic-licensing.svg" />
</div>
</div>
<div id="contribute" class="sections">
<div class="inner-header">
<h2>Contribute</h2>
<p>Nimbus is an open source initiative in which anyone can get involved. There are a number of ways to contribute:</p>
</div>
<div class="contribute-wrap">
<div class="contribute">
<h3>Join the Team</h3>
<p>We are always looking for passionate and talented individuals to join our team.
<p>
<a href="https://status.im/our_team/open_positions.html">See list of open roles</a>
<span><a href="https://status.im/our_team/open_positions.html"><img src="../img/arrow_ogn.png" /></a></span>
</div>
<div class="contribute">
<h3>Support</h3>
<p>As a web3 public good, largely dependent on both Status and the Ethereum Foundation for funding, grants are our lifeblood. See <a href="https://etherscan.io/address/0xDeb4A0e8d9a8dB30a9f53AF2dCc9Eb27060c6557">here</a> for our donation address</p>
<p>
<a href="https://gitcoin.co/grants/137/nimbus">Support us on Gitcoin</a>
<span><a href="https://gitcoin.co/explorer?keywords=nimbus&order_by=-web3_created"><img src="../img/arrow_ogn.png" /></a></span>
</div>
<div class="contribute">
<h3>Join the Conversation</h3>
<p>We are an open community and happy to answer your questions and help you learn more about Nimbus.
<p>
<a href="https://discord.com/invite/qnjVyhatUa">Join us on Discord</a>
<span><a href="https://discord.com/invite/qnjVyhatUa"><img src="../img/arrow_ogn.png" /></a></span>
</div>
</div>
<div id="team" class="inner-header">
<h2>Core Contributors</h2>
<p>Were a diverse group of researchers, engineers, and scientists with a passion for web3 technologies. We work primarily in Nim.</p>
</div>
<div class="contribute-wrap">
{% for member in site.data.team %}
<div class="contribute">
<img class="contributor" src="{{ member.image }}" />
<h3>{{ member.name }}</h3>
<p><a href="{{ member.statusLink }}" style="color: #939ba1;">{{ member.statusName }}</a></p>
<p><a href="{{ member.gitHubLink }}">See Github profile</a>
<span><a href="{{ member.gitHubLink }}"><img src="../img/arrow_ogn.png" /></a></span>
</p>
</div>
{% endfor %}
</div>
<div class="inner-header">
<h2>Read our News</h2>
<p>Check out the latest Nimbus news:</p>
</div>
<div class="contribute-wrap contribute-wrap-blog">
</div>
</div>
</div>

View File

@ -1,14 +0,0 @@
<!DOCTYPE html>
<html lang="{{ page.lang }}">
{{ partial('partial/head') }}
<body>
<div id="container">
{% if page.source != 'index.md' %}
{{ partial('partial/header') }}
{% endif %}
{{ body }}
{{ partial('partial/footer') }}
</div>
{{ partial('partial/after_footer') }}
</body>
</html>

View File

@ -1,28 +0,0 @@
<div class="page-intro wrapper">
<header class="article-header">
<h1 class="article-title" itemprop="name">{{ page.title }}</h1>
<a href="{{ raw_link(page.source) }}" class="article-edit-link" title="{{ __('page.improve') }}">Edit on Github</a>
</header>
</div>
<div id="content-wrap">
<div id="content" class="wrapper">
<div id="content-inner">
{{ partial('partial/sidebar') }}
<article class="article-container" itemscope itemtype="http://schema.org/Article">
<div class="article-inner">
<div class="article">
<div class="inner">
<div class="article-content" itemprop="articleBody">
{{ page_anchor(page.content) }}
</div>
<footer class="article-footer">
<time class="article-footer-updated" datetime="{{ date_xml(page.updated) }}" itemprop="dateModified">{{ __('page.last_updated', date(page.updated)) }}</time>
{{ page_nav() }}
</footer>
</div>
</div>
</div>
</article>
</div>
</div>
</div>

View File

@ -1 +0,0 @@
{{ js('js/main.min') }}

View File

@ -1,18 +0,0 @@
{% if page.comments && config.disqus_shortname %}
<section id="comments">
<div id="disqus_thread"></div>
</section>
<script>
var disqus_shortname = '{{ config.disqus_shortname }}';
var disqus_url = '{{ url }}';
var disqus_title = {{ JSON.stringify(page.title) }};
var disqus_config = function(){
this.language = '{{ disqus_lang() }}';
};
(function(){
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'https://go.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
{% endif %}

View File

@ -1,44 +0,0 @@
<div class="footer footer--global">
<div class="footer-inner">
<div class="footer-table">
<div class="footer-table__column margin-top-15">
<p class="footer-header">Social links</p>
<ul class="footer-list">
<li class="footer-link footer-link--gt"><a href="https://gitter.im/status-im/nimbus" target="_blank"><span class="footer-icon"></span><span class="footer-link-label">Gitter</span></a></li>
<li class="footer-link footer-link--tw"><a href="https://twitter.com/ethnimbus" target="_blank"><span class="footer-icon"></span><span class="footer-link-label">Twitter</span></a></li>
<li class="footer-link footer-link--dc"><a href="https://discord.gg/XRxWahP" target="_blank"><span class="footer-icon"></span><span class="footer-link-label">Discord</span></a></li>
<li class="footer-link footer-link--st"><a href="https://join.status.im/chat/public/nimbus-general" target="_blank"><span class="footer-icon"></span><span class="footer-link-label">Status</span></a></li>
</ul>
</div>
<div class="footer-table__column margin-top-15">
<p class="footer-header">More</p>
<ul class="footer-list">
<li class="footer-link"><a href="https://nimbus.team/docs/" target="_blank">Overview</a></li>
<li class="footer-link"><a href="/docs/libraries.html" target="_blank">Github</a></li>
<li class="footer-link"><a href="https://news.nimbus.team/" target="_blank">News</a></li>
<li class="footer-link"><a href="https://subscribe.nimbus.team/" target="_blank">Newsletter</a></li>
<li class="footer-link"><a href="https://etherscan.io/address/0xDeb4A0e8d9a8dB30a9f53AF2dCc9Eb27060c6557" target="_blank">Donate</a></li>
<li class="footer-link"><a href="https://status.im/privacy-policy/" target="_blank">Privacy Policy</a></li>
</ul>
</div>
<div class="footer-table__column mobile-margin extend-width">
<p class="footer-header status-network"> The Status Network </p> <img src="/img/footer-logo.svg" width="30px" class="status-logo" alt="Status Logo">
<ul class="footer-project">
<li class="footer-link"><a href="https://status.im/" target="_blank">Status</a></li>
<li class="footer-link"><a href="https://keycard.tech/" target="_blank">Keycard</a></li>
<li class="footer-link"><a href="https://dap.ps/" target="_blank">dap.ps</a></li>
<li class="footer-link"><a href="https://assemble.fund/" target="_blank">Assemble</a></li>
<li class="footer-link"><a href="https://embark.status.im/" class="margin-left" target="_blank">Embark</a></li>
<li class="footer-link"><a href="https://subspace.status.im/" class="margin-left" target="_blank">Subspace</a></li>
<li class="footer-link"><a href="https://vac.dev/" class="margin-left" target="_blank">Vac</a></li>
</ul>
</div>
</div>
</div>
</div>

View File

@ -1,36 +0,0 @@
<head prefix="og: http://ogp.me/ns#">
<meta charset="utf-8">
<title>{% if page.title %}{{ page.title }} | {% endif %}{{ config.title }}</title>
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="text/javascript">
document.write("<base href='" + location.protocol + "//" + document.location.host + "' />");
</script>
<!-- Canonical links -->
<link rel="canonical" href="{{ url }}">
<!-- Alternative links -->
{% if page.layout == 'page' or page.layout == 'index' %}
{% for lang in site.data.languages %}
<link rel="alternative" hreflang="{{ loop.key }}" href="{{ canonical_url(loop.key) }}">
{% endfor %}
{% endif %}
<!-- Icon -->
<meta name="msapplication-TileColor" content="#ff9c00">
<meta name="msapplication-TileImage" content="{{ url_for('icon/mstile-144x144.png') }}">
<link rel="icon" type="image/png" href="/img/favicon-16x16.png" sizes="16x16" />
<link rel="icon" type="image/png" href="/img/favicon-32x32.png" sizes="32x32" />
<link rel="apple-touch-icon" sizes="76x76" href="/img/apple-touch-icon-76.png?v=0.0.5">
<link rel="apple-touch-icon" sizes="120x120" href="/img/apple-touch-icon-120.png?v=0.0.5">
<link rel="apple-touch-icon" sizes="152x152" href="/img/apple-touch-icon-152.png?v=0.0.5">
<link rel="apple-touch-icon" sizes="180x180" href="/img/apple-touch-icon-180.png?v=0.0.5">
<link rel="apple-touch-icon" href="/img/apple-touch-icon-1024.png?v=0.0.5">
<!-- CSS -->
{{ css('css/main.min') }}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
<!-- RSS -->
{{ feed_tag('atom.xml') }}
<meta property="og:image" content="/img/graphic-licensing.png" />
<meta property="og:title" content="Nimbus, a Lighter Ethereum Client" />
</head>

View File

@ -1,8 +0,0 @@
<ul class="main-nav">
<li id="about-header" class="item--to-show"><a href="#about">About</a></li>
<li><a href="#contribute">Contribute</a></li>
<li class="item--to-show"><a href="#team">Team</a></li>
<li class="item--to-show"> <a href="/docs">Overview</a></li>
<li class="item--to-show"> <a href="https://our.status.im/tag/nimbus/">News</a> </li>
<li class="item--to-show"> <a href="https://subscribe.nimbus.team/">Newsletter</a> </li>
</ul>

View File

@ -1,44 +0,0 @@
<div class="header">
<div class="header-left">
<a class="logo" href="/"></a>
{{ partial('partial/header-nav') }}
</div>
<div class="header-right">
<ul class="header-logos">
<li class="header-link header-link--tw"><a href="https://twitter.com/ethnimbus" target="_blank"><span class="header-icon"></span><span class="header-link-label"></span></a></li>
<li class="header-link header-link--gh"><a href="https://github.com/status-im/nimbus" target="_blank"><span class="header-icon"></span><span class="header-link-label"></span></a></li>
<li class="header-link header-link--gt"><a href="https://gitter.im/status-im/nimbus" target="_blank"><span class="header-icon"></span><span class="header-link-label"></span></a></li>
<li class="header-link header-link--st"><a href="https://join.status.im/chat/public/nimbus-general" target="_blank"><span class="header-icon"></span><span class="header-link-label"></span></a></li>
</ul>
</div>
</div>
<div class="mobile-nav-wrap">
<div class="mobile-nav-inner">
<a class="logo" href="/"></a>
<a class="icon-close mobile-nav-close" href="#"></a>
<ul class="mobile-nav">
<li><a href="https://our.status.im/tag/nimbus/">News</a></li>
<li><a href="http://subscribe.nimbus.team/">Newsletter</a></li>
<li><a href="/overview">Overview</a></li>
<li class="item--dropdown item--to-show">
<span>Projects</span>
<ul class="mobile-sub-nav">
<li><a href="https://incubate.status.im/" class="">Incubate</a></li>
<li><a href="https://nimbus.team/" class="">Nimbus</a></li>
<li><a href="https://embark.status.im/" class="">Embark</a></li>
<li><a href="https://keycard.tech/" class="">Hardwallet</a></li>
</ul>
</li>
<li><a href="https://status.im/contribute/" class="">Contribute</a></li>
</ul>
<div class="mobile-nav-footer">
<a href=" https://join.status.im/chat/public/nimbus-general" class="button button--orange">Nimbus Status Chat</a>
</div>
<header class="dropdown">
<nav>
{{ partial('partial/header-nav') }}
</nav>
</header>
</div>
</div>

View File

@ -1,16 +0,0 @@
<article class="article post" itemscope itemtype="http://schema.org/Article">
<header class="article-header">
{% if is_post() %}
<h1 class="article-title" itemprop="name">{{ post.title }}</h1>
{% else %}
<h1>
<a href="{{ url_for(post.path) }}" class="article-title" itemprop="name">{{ post.title }}</a>
</h1>
{% endif %}
<a href="{{ url_for(post.path) }}" class="article-date">{{ time_tag(post.date) }}</a>
</header>
<div class="article-content" itemprop="articleBody">
{{ page_anchor(post.content) }}
</div>
{{ partial('partial/comment') }}
</article>

View File

@ -1,23 +0,0 @@
<div class="search">
<input type="text" name="userSearch" id="userSearch" placeholder="Search...">
<script src="/js/jquery-3.3.1.min.js"></script>
<script src="/js/jquery.marcopolo.min.js" type="text/javascript"></script>
<script type="text/javascript" defer>
$('#userSearch').marcoPolo({
url: 'https://search.status.im/' + window.location.host + '/_search?size=5&_source=title,url&',
minChars: 3,
formatItem: function (data, $item) {
return data.title || data.url;
},
formatData: function (data) {
return data.hits.hits.map(function(obj) {
return obj._source;
});
},
onSelect: function (data, $item) {
window.location = data.url;
}
});
</script>
</div>
<div class="clear"></div>

View File

@ -1,10 +0,0 @@
<!-- GitHub star -->
<a class="github-button" href="https://github.com/status-im" data-icon="octicon-star" data-show-count="true" aria-label="Star status-im on GitHub">Star</a>
<!-- GitHub fork -->
<a class="github-button" href="https://github.com/status-im/nimbus/fork" data-icon="octicon-repo-forked" data-show-count="true" aria-label="Fork status-im/status-react on GitHub">Fork</a><!-- Tweet button -->
<!-- Twitter follow button -->
<a href="https://twitter.com/ethstatus" class="twitter-follow-button" data-show-count="true">Follow @ethstatus</a>
<!-- Github Button -->
<script async defer src="https://buttons.github.io/buttons.js"></script>
<!-- Twitter share button -->
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

View File

@ -1,5 +0,0 @@
<aside id="sidebar" role="navigation">
<div class="inner">
{{ doc_sidebar('sidebar') }}
</div>
</aside>

View File

@ -1,18 +0,0 @@
<li class="plugin on">
<div class="plugin-screenshot">
<noscript>
<img src="{{ url_for('themes/screenshots/' + plugin.name + '.png') }}" class="plugin-screenshot-img" alt="{{ plugin.name }}">
</noscript>
<img data-src="{{ url_for('themes/screenshots/' + plugin.name + '.png') }}" data-sizes="auto" class="plugin-screenshot-img lazyload" alt="{{ plugin.name }}">
{% if plugin.preview %}
<a href="{{ plugin.preview }}" class="plugin-preview-link" target="_blank"><i class="fa fa-eye"></i></a>
{% endif %}
</div>
<a href="{{ plugin.link }}" class="plugin-name" target="_blank">{{ plugin.name }}</a>
<p class="plugin-desc">{{ plugin.description }}</p>
<div class="plugin-tag-list">
{% for tag in plugin.tags %}
<a href="#{{ tag }}" class="plugin-tag">{{ tag }}</a>
{% endfor %}
</div>
</li>

View File

@ -1,7 +0,0 @@
<div id="content-wrap">
<div class="wrapper">
<div class="inner">
{{ partial('partial/post', {post: page}) }}
</div>
</div>
</div>

Some files were not shown because too many files have changed in this diff Show More