<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.internetcomputer.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jan</id>
	<title>Internet Computer Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.internetcomputer.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jan"/>
	<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/wiki/Special:Contributions/Jan"/>
	<updated>2026-04-30T14:17:06Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=IC_Smart_Contract_Memory&amp;diff=6926</id>
		<title>IC Smart Contract Memory</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=IC_Smart_Contract_Memory&amp;diff=6926"/>
		<updated>2023-12-19T09:52:37Z</updated>

		<summary type="html">&lt;p&gt;Jan: corrected image&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Overall Architecture==&lt;br /&gt;
[[File:Memory types.png|alt=|thumb|512x512px|Figure 1. The two memories that can be accessed by the canister smart contracts.]]&lt;br /&gt;
Canister smart contracts running on the Internet Computer (IC) store data just like most other programs would. To this end, the IC offers developers two types of memory where data can be stored, as depicted in Figure 1. The first is the regular &#039;&#039;&#039;heap memory&#039;&#039;&#039; that is exposed as the Web Assembly virtual machine heap. This should be used as a scratch, temporary memory that will be cleared after any canister upgrade. The second type of memory is the &#039;&#039;&#039;stable memory&#039;&#039;&#039;, which is a larger memory used for permanent data storage. &lt;br /&gt;
&lt;br /&gt;
==Orthogonal Persistence==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rust&amp;quot;&amp;gt;&lt;br /&gt;
use ic_cdk_macros::{query, update};&lt;br /&gt;
use std::{cell::RefCell, collections::HashMap};&lt;br /&gt;
&lt;br /&gt;
thread_local! {&lt;br /&gt;
    static STORE: RefCell&amp;lt;HashMap&amp;lt;String, u64&amp;gt;&amp;gt; = RefCell::default();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[update]&lt;br /&gt;
fn insert(key: String, value: u64) {&lt;br /&gt;
    STORE.with(|store| store.borrow_mut().insert(key, value));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[query]&lt;br /&gt;
fn lookup(key: String) -&amp;gt; u64 {&lt;br /&gt;
    STORE.with(|store| *store.borrow().get(&amp;amp;key).unwrap_or(&amp;amp;0))&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The IC offers orthogonal persistence, an illusion given to programs to run forever: the heap of each canister is automatically preserved and restored the next time it is called. For that, the execution environment needs to determine efficiently which memory pages have been dirtied during message execution so that the modified pages are tracked and periodically persisted to disk. The listing above shows an example key-value store that illustrates how easy it is to use orthogonal persistence. The key-value store in this case is backed by a simple Rust HashMap stored on the heap by means of a thread-local variable. A RefCell is used to provide interior mutability. The example would also be possible without it, but mutating the thread-local variable would be unsafe in that case, as the Rust compiler cannot guarantee exclusive access to it.&lt;br /&gt;
&lt;br /&gt;
==Main Memory==&lt;br /&gt;
Canisters running on the IC are programmed either in Rust or Motoko. The canisters are then compiled down to web assembly (Wasm). All the variables and data structures defined in these higher-level languages are then stored in the Wasm heap. All accesses to data structures and variables defined in the higher-level languages are then translated to memory copy operations in Wasm (e.g., load, store, copy, grow). The Wasm main memory (also known as heap memory) has a maximum size of 4GiB, due to the 32-bit address space that backs the Wasm programs. The memory pages are persistent between calls to a canister (changes made by calls that throw exceptions are reverted, so these pages never enter an inconsistent state). However, they are reset when the canister&#039;s software bytecode is upgraded. Typically, canisters that need to be upgraded, serialize data in main memory to stable memory to perform upgrades. More precisely, because possible changes in data structures and in Wasm (and high-level language) compilers, the heap layout might change (i.e., data structure layouts) which could leave the canister in an unusable state when a canister is upgraded. Thus, the heap should not be used as a permanent memory, but rather as a (faster) scratch, temporary memory.&lt;br /&gt;
&lt;br /&gt;
==Stable Memory==&lt;br /&gt;
Next to the heap memory, canister developers can make use of the stable memory. This is an additional 64-bit addressable memory, which is currently 96GiB in size, with plans to increase it further in the future. Programs written in either Rust or Motoko need to explicitly use stable memory by using the API. This API offers primitives to copy memory back and forth between the Wasm heap and the stable memory. An alternative to using this lower level API directly is to use the stable structures API, which offers developers a collection of Rust data structures (e.g., B-trees) that operate directly in stable memory. Next to using the stable memory through stable data structures, a pattern often used by developers is to persist heap state between canister upgrades. This is achieved via serializing heap memory (or data structures), saving it to stable memory and applying the opposite operations (copying back and deserializing) when the upgrade is done.&lt;br /&gt;
&lt;br /&gt;
==Behind the scenes: Implementation==&lt;br /&gt;
To serve memory contents to canister smart contracts, the IC software stack has the following design. First, it is important to mention that every N (consensus) rounds, canister state (heap, stable memory and other data structures) are checkpointed on disk. This is called a checkpoint file. Whenever a canister executes messages after a checkpoint, all its memory resides in the checkpoint file. Therefore, all memory requested will be served from the checkpoint file. Memory modifications (i.e., dirtied pages in terms of operating systems) are saved in a data structure called the heap delta. The following paragraphs describe how this design enables orthogonal persistence.&lt;br /&gt;
&lt;br /&gt;
[[File:Screen_Shot_2022-12-01_at_14.30.58.png|512px|thumb|Figure 2. The memory faulting architecture which encompasses the checkpoint file and the heap delta.&lt;br /&gt;
.]]&lt;br /&gt;
&lt;br /&gt;
Any implementation of orthogonal persistence has to solve two problems: (1) How to map the persisted memory into the Wasm memory?; and (2) How to keep track of all modifications in the Wasm memory so that they can be persisted later. Page protection is used to solve both problems.The entire address space of the Wasm memory is divided into 4KiB pages. All pages are initially marked as inaccessible using the page protection flags of the operating system.&lt;br /&gt;
&lt;br /&gt;
The first memory access triggers a page fault, pauses the execution, and invokes a signal handler. The signal handler then fetches the corresponding page from persisted memory and marks the page as read-only. Subsequent read accesses to that page will succeed without any help from the signal handler. The first write access will trigger another page fault, however, and allow the signal handler to remember the page as modified and mark the page as readable and writable. All subsequent accesses to that page (both r/w) will succeed without invoking the signal handler.&lt;br /&gt;
&lt;br /&gt;
Invoking a signal handler and changing page protection flags are expensive operations. Messages that read or write large chunks of memory cause a storm of such operations, degrading performance of the whole system. This can cause severe slowdowns under heavy load.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Versioning: Heap Delta and Checkpoint Files==&lt;br /&gt;
&lt;br /&gt;
A canister executes update messages sequentially, one by one. Queries, in contrast, can run concurrently to each other and to update messages. The support for concurrent execution makes the memory implementation much more challenging. Imagine that a canister is executing an update message at (blockchain) block height H. At the same time, there could still be a previous long-running query that started earlier, at block height H-K. This means the same canister can have multiple versions of its memory active at the same time; this is used for the parallel execution of queries and update calls.&lt;br /&gt;
&lt;br /&gt;
A naive solution to this problem would be to copy the entire memory after each update message. That would be slow and use too much storage. Thus, our implementation takes a different route. It keeps track of the modified memory pages in a persistent tree data-structure  called Heap Delta that is based on Fast Mergeable Integer Maps. At a regular interval (i.e., every N rounds), there is a checkpoint event that commits the modified pages into the checkpoint file after cloning the file to preserve its previous version. Figure 2 shows how the Wasm memory is constructed from Heap Delta and the checkpoint file.&lt;br /&gt;
&lt;br /&gt;
====Memory-related performance optimizations====&lt;br /&gt;
&#039;&#039;&#039;Optimization 1:&#039;&#039;&#039; Memory mapping the checkpoint file pages.&lt;br /&gt;
This reduces the memory usage by sharing the pages between multiple calls being executed concurrently. This optimization also improves performance by avoiding page copying on read accesses. The number of signal handler invocations remains the same as before, so the issue of signal storms is still open after this optimization.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Optimization 2:&#039;&#039;&#039; Page Tracking in Queries&lt;br /&gt;
All pages dirtied by a query are discarded after execution. This means that the signal handler does not have to keep track of modified pages for query calls. As opposed to update calls, queries saw the introduction of a fast path that marks pages as readable and writable on the first access. This low-hanging fruit optimization made queries 1.5x-2x faster on average.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Optimization 3:&#039;&#039;&#039; Amortized Prefetching of Pages&lt;br /&gt;
The idea behind the most impactful optimization is simple: to reduce the number of page faults, more work is needed per signal handler invocation. Instead of fetching a single page at a time, the signal handler tries to speculatively prefetch pages. The right balance is required here because prefetching too many pages may degrade performance of small messages that access only a few pages. The optimization computes the largest contiguous range of accessed pages immediately preceding the current page. It uses the size of the range as a hint for prefetching more pages. This way the cost of prefetching is amortized by previously accessed pages. As a result, the optimization reduces the number of page faults in memory intensive messages by an order of magnitude.&lt;br /&gt;
&lt;br /&gt;
A downside of this approach is that prefetched page content needs to be compared with previous content after message execution to determine if a page was modified instead of relying on tracking write accesses via signal handlers.&lt;br /&gt;
&lt;br /&gt;
These optimizations bring substantial benefits for the performance of the memory faulting component of the execution environment. The optimizations allow the IC to improve its throughput for memory-intensive workloads.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* &#039;&#039;&#039;The Internet Computer project website (hosted on the IC): [https://internetcomputer.org/ internetcomputer.org]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=File:Memory_types.png&amp;diff=6925</id>
		<title>File:Memory types.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=File:Memory_types.png&amp;diff=6925"/>
		<updated>2023-12-19T09:52:16Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;types of canister smart contract memory&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=IC_Smart_Contract_Memory&amp;diff=6924</id>
		<title>IC Smart Contract Memory</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=IC_Smart_Contract_Memory&amp;diff=6924"/>
		<updated>2023-12-18T20:42:08Z</updated>

		<summary type="html">&lt;p&gt;Jan: heap memory description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Overall Architecture==&lt;br /&gt;
[[File:Screen Shot 2022-12-01 at 14.41.33.png|512px|thumb|Figure 1. The two memories that can be accessed by the canister smart contracts.]]&lt;br /&gt;
Canister smart contracts running on the Internet Computer (IC) store data just like most other programs would. To this end, the IC offers developers two types of memory where data can be stored, as depicted in Figure 1. The first is the regular &#039;&#039;&#039;heap memory&#039;&#039;&#039; that is exposed as the Web Assembly virtual machine heap. This should be used as a scratch, temporary memory that will be cleared after any canister upgrade. The second type of memory is the &#039;&#039;&#039;stable memory&#039;&#039;&#039;, which is a larger memory used for permanent data storage. &lt;br /&gt;
&lt;br /&gt;
==Orthogonal Persistence==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rust&amp;quot;&amp;gt;&lt;br /&gt;
use ic_cdk_macros::{query, update};&lt;br /&gt;
use std::{cell::RefCell, collections::HashMap};&lt;br /&gt;
&lt;br /&gt;
thread_local! {&lt;br /&gt;
    static STORE: RefCell&amp;lt;HashMap&amp;lt;String, u64&amp;gt;&amp;gt; = RefCell::default();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[update]&lt;br /&gt;
fn insert(key: String, value: u64) {&lt;br /&gt;
    STORE.with(|store| store.borrow_mut().insert(key, value));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[query]&lt;br /&gt;
fn lookup(key: String) -&amp;gt; u64 {&lt;br /&gt;
    STORE.with(|store| *store.borrow().get(&amp;amp;key).unwrap_or(&amp;amp;0))&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The IC offers orthogonal persistence, an illusion given to programs to run forever: the heap of each canister is automatically preserved and restored the next time it is called. For that, the execution environment needs to determine efficiently which memory pages have been dirtied during message execution so that the modified pages are tracked and periodically persisted to disk. The listing above shows an example key-value store that illustrates how easy it is to use orthogonal persistence. The key-value store in this case is backed by a simple Rust HashMap stored on the heap by means of a thread-local variable. A RefCell is used to provide interior mutability. The example would also be possible without it, but mutating the thread-local variable would be unsafe in that case, as the Rust compiler cannot guarantee exclusive access to it.&lt;br /&gt;
&lt;br /&gt;
==Main Memory==&lt;br /&gt;
Canisters running on the IC are programmed either in Rust or Motoko. The canisters are then compiled down to web assembly (Wasm). All the variables and data structures defined in these higher-level languages are then stored in the Wasm heap. All accesses to data structures and variables defined in the higher-level languages are then translated to memory copy operations in Wasm (e.g., load, store, copy, grow). The Wasm main memory (also known as heap memory) has a maximum size of 4GiB, due to the 32-bit address space that backs the Wasm programs. The memory pages are persistent between calls to a canister (changes made by calls that throw exceptions are reverted, so these pages never enter an inconsistent state). However, they are reset when the canister&#039;s software bytecode is upgraded. Typically, canisters that need to be upgraded, serialize data in main memory to stable memory to perform upgrades. More precisely, because possible changes in data structures and in Wasm (and high-level language) compilers, the heap layout might change (i.e., data structure layouts) which could leave the canister in an unusable state when a canister is upgraded. Thus, the heap should not be used as a permanent memory, but rather as a (faster) scratch, temporary memory.&lt;br /&gt;
&lt;br /&gt;
==Stable Memory==&lt;br /&gt;
Next to the heap memory, canister developers can make use of the stable memory. This is an additional 64-bit addressable memory, which is currently 96GiB in size, with plans to increase it further in the future. Programs written in either Rust or Motoko need to explicitly use stable memory by using the API. This API offers primitives to copy memory back and forth between the Wasm heap and the stable memory. An alternative to using this lower level API directly is to use the stable structures API, which offers developers a collection of Rust data structures (e.g., B-trees) that operate directly in stable memory. Next to using the stable memory through stable data structures, a pattern often used by developers is to persist heap state between canister upgrades. This is achieved via serializing heap memory (or data structures), saving it to stable memory and applying the opposite operations (copying back and deserializing) when the upgrade is done.&lt;br /&gt;
&lt;br /&gt;
==Behind the scenes: Implementation==&lt;br /&gt;
To serve memory contents to canister smart contracts, the IC software stack has the following design. First, it is important to mention that every N (consensus) rounds, canister state (heap, stable memory and other data structures) are checkpointed on disk. This is called a checkpoint file. Whenever a canister executes messages after a checkpoint, all its memory resides in the checkpoint file. Therefore, all memory requested will be served from the checkpoint file. Memory modifications (i.e., dirtied pages in terms of operating systems) are saved in a data structure called the heap delta. The following paragraphs describe how this design enables orthogonal persistence.&lt;br /&gt;
&lt;br /&gt;
[[File:Screen_Shot_2022-12-01_at_14.30.58.png|512px|thumb|Figure 2. The memory faulting architecture which encompasses the checkpoint file and the heap delta.&lt;br /&gt;
.]]&lt;br /&gt;
&lt;br /&gt;
Any implementation of orthogonal persistence has to solve two problems: (1) How to map the persisted memory into the Wasm memory?; and (2) How to keep track of all modifications in the Wasm memory so that they can be persisted later. Page protection is used to solve both problems.The entire address space of the Wasm memory is divided into 4KiB pages. All pages are initially marked as inaccessible using the page protection flags of the operating system.&lt;br /&gt;
&lt;br /&gt;
The first memory access triggers a page fault, pauses the execution, and invokes a signal handler. The signal handler then fetches the corresponding page from persisted memory and marks the page as read-only. Subsequent read accesses to that page will succeed without any help from the signal handler. The first write access will trigger another page fault, however, and allow the signal handler to remember the page as modified and mark the page as readable and writable. All subsequent accesses to that page (both r/w) will succeed without invoking the signal handler.&lt;br /&gt;
&lt;br /&gt;
Invoking a signal handler and changing page protection flags are expensive operations. Messages that read or write large chunks of memory cause a storm of such operations, degrading performance of the whole system. This can cause severe slowdowns under heavy load.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Versioning: Heap Delta and Checkpoint Files==&lt;br /&gt;
&lt;br /&gt;
A canister executes update messages sequentially, one by one. Queries, in contrast, can run concurrently to each other and to update messages. The support for concurrent execution makes the memory implementation much more challenging. Imagine that a canister is executing an update message at (blockchain) block height H. At the same time, there could still be a previous long-running query that started earlier, at block height H-K. This means the same canister can have multiple versions of its memory active at the same time; this is used for the parallel execution of queries and update calls.&lt;br /&gt;
&lt;br /&gt;
A naive solution to this problem would be to copy the entire memory after each update message. That would be slow and use too much storage. Thus, our implementation takes a different route. It keeps track of the modified memory pages in a persistent tree data-structure  called Heap Delta that is based on Fast Mergeable Integer Maps. At a regular interval (i.e., every N rounds), there is a checkpoint event that commits the modified pages into the checkpoint file after cloning the file to preserve its previous version. Figure 2 shows how the Wasm memory is constructed from Heap Delta and the checkpoint file.&lt;br /&gt;
&lt;br /&gt;
====Memory-related performance optimizations====&lt;br /&gt;
&#039;&#039;&#039;Optimization 1:&#039;&#039;&#039; Memory mapping the checkpoint file pages.&lt;br /&gt;
This reduces the memory usage by sharing the pages between multiple calls being executed concurrently. This optimization also improves performance by avoiding page copying on read accesses. The number of signal handler invocations remains the same as before, so the issue of signal storms is still open after this optimization.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Optimization 2:&#039;&#039;&#039; Page Tracking in Queries&lt;br /&gt;
All pages dirtied by a query are discarded after execution. This means that the signal handler does not have to keep track of modified pages for query calls. As opposed to update calls, queries saw the introduction of a fast path that marks pages as readable and writable on the first access. This low-hanging fruit optimization made queries 1.5x-2x faster on average.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Optimization 3:&#039;&#039;&#039; Amortized Prefetching of Pages&lt;br /&gt;
The idea behind the most impactful optimization is simple: to reduce the number of page faults, more work is needed per signal handler invocation. Instead of fetching a single page at a time, the signal handler tries to speculatively prefetch pages. The right balance is required here because prefetching too many pages may degrade performance of small messages that access only a few pages. The optimization computes the largest contiguous range of accessed pages immediately preceding the current page. It uses the size of the range as a hint for prefetching more pages. This way the cost of prefetching is amortized by previously accessed pages. As a result, the optimization reduces the number of page faults in memory intensive messages by an order of magnitude.&lt;br /&gt;
&lt;br /&gt;
A downside of this approach is that prefetched page content needs to be compared with previous content after message execution to determine if a page was modified instead of relying on tracking write accesses via signal handlers.&lt;br /&gt;
&lt;br /&gt;
These optimizations bring substantial benefits for the performance of the memory faulting component of the execution environment. The optimizations allow the IC to improve its throughput for memory-intensive workloads.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* &#039;&#039;&#039;The Internet Computer project website (hosted on the IC): [https://internetcomputer.org/ internetcomputer.org]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Node_Provider_Machine_Hardware_Guide&amp;diff=5145</id>
		<title>Node Provider Machine Hardware Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Node_Provider_Machine_Hardware_Guide&amp;diff=5145"/>
		<updated>2023-04-24T16:49:07Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What are the Hardware Requirements for Node Machines? ==&lt;br /&gt;
Node providers operate one or more node machines than run in the IC network. Gen1 Hardware requirements have been used by Node Providers to set up node machines during Genesis launch. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Gen2 Hardware requirements have been defined for the further growth of the IC network. The specifications for the Gen2 node machines are generic (instead of vendor specific) and supports VM memory encryption and attestation which will be needed in future features on the IC. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below are the up-to-date specifications for both the Gen2 node machines and Gen1 node machines. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Gen 2 Node Machine ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Generic specification Gen2 Node Machine ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Dual Socket AMD EPYC 7313 Milan 16C/32T 3 Ghz, 32K/512K/128M&lt;br /&gt;
optionally 7343, 7373, 73F3&lt;br /&gt;
|-&lt;br /&gt;
| 16x 32GB RDIMM, 3200MT/s, Dual Rank&lt;br /&gt;
|-&lt;br /&gt;
| 5x 6.4TB NVMe Mixed Mode (DWPD &amp;gt;= 3)&lt;br /&gt;
|-&lt;br /&gt;
| Dual Port 10G SFP or BASE-T&lt;br /&gt;
|-&lt;br /&gt;
| TPM 2.0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note the NVMe drives should be recognized by Linux as NVMe (i.e., show up as `/dev/nvme*` devices). SATA backplanes or any other hardware which prevents this should not be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Validated Configurations ===&lt;br /&gt;
DFINITY has [https://forum.dfinity.org/t/draft-motion-proposal-new-hardware-specification-and-remuneration-for-ic-nodes/14202/14?u=garym validated] the following Gen2 hardware configurations.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== Validated configuration: Dell ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 2 || AMD EPYC 7343 3.2GHz, 16C/32T, 128M Cache (190W) &lt;br /&gt;
|-&lt;br /&gt;
| 16 || 32GB RDIMM, 3200MT/s, Dual Rank 16Gb BASE x8&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 6.4TB Enterprise NVMe Mixed Use AG Drive U.2 Gen4 with carrier&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PowerEdge R6525 Motherboard, with 2 x 1Gb Onboard LOM (BCM5720)MLK V2&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Dual, Hot-plug, Redundant Power Supply (1+1) 1100W, Mixed Mode Titanium&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Intel X710 Dual Port 10GbE SFP+, OCP NIC 3.0&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Trusted Platform Module 2.0 V3&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Validated configuration: ASUS ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 2 || AMD EPYC 7313 (3,00 GHz, 16-Core, 128 MB)&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 32GB ECC Reg ATP DDR4 3200 RAM &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 6.4 TB NVMe Kioxia SSD 3D-NAND TLC U.3 (Kioxia CM6-V)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Asus Mainboard KMPP-D32 Series (without OCP 3.0, without Pike)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1600 Watt redundant PSU&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Broadcom 25 Gigabit P225P SFP28 Dual Port Network Card&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== Validated configurations: Supermicro &amp;amp; Gigabyte ====&lt;br /&gt;
Validation is being re-run on Supermicro and Gigabyte machines which match the spec. This section will be updated when those results are ready.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Gen 1 Node Machine ==&lt;br /&gt;
=== Node Machine Type 1 - Dell ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 1 || R6525&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Chassis - Supports Up to 10 NVMe drives, 12 drives total&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Dual 1 GB on Motherboard&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Low Profile PCIe Slots&lt;br /&gt;
|-&lt;br /&gt;
| - || 3 Year Basic NBD Support&lt;br /&gt;
|-&lt;br /&gt;
| - || iDrac Enterprise&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Dual port 10GbE Base - T Adapter Broadcom, PCIe Low Profile&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 3.2TB NVMe, Mixed Use, 2.5&amp;quot; with Carrier&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 32GB RDIMM (3200MT/s)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || AMD 7302 3GHz, 16C/32T, 128M, 155W, 3200&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Single Power Supply (800W)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || C13-C14, 3M, 125V 15A Power Cored&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Node Machine Type 1 - SuperMicro ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 1 || AS - 1023US - TR4&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Rome 7302 DP/UP 16C/32T 3.0&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 32GB DDR4-3200 2Rx4 ECC REG DIMM&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Samsung PM983 3.2TB NVMe PCIE/SATA Hybrid M.2 &amp;amp; 1 PCIE&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 800W Power Supply&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Std LP 2-port 10G RJ45, Intel x540&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Micron 5300 PRO 7.4TB, SATA, 2.5&#039;, 3D TLC, .6DWPD (with Caddie)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || C13/C14 13A Power Cord&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Node Machine Type 2 - Dell ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 1 || R6515&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 3.5&amp;quot; Chassis with up to 4 Hot-Plug Hard Drives and OS RAID&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Dual 1 Gb on Motherboard&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Low Profile PCIe Slots&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Standard Fan&lt;br /&gt;
|-&lt;br /&gt;
| - || 3 Year Basic NBD Support&lt;br /&gt;
|-&lt;br /&gt;
| - || iDrac Enterprise&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Dual Port 10GbE Base - T Adapter Broadcom, PCIe LOw Profile&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 480GB SSD SATA Mix Use 6Gbps 512 2.5in Hot-Plug AG Drive, 3.5in&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 8GB RDIMM, 3200 MT/s, Single Rank&lt;br /&gt;
|-&lt;br /&gt;
| 1 || AMD EPYC 7232P 3.10GHz, 8C/16T, 64M Cache (120W) DDR4-3200&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Dual Hot-Plug Redundant Power Supply (1+1), 550W&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Jumper Cord - C13/C14, .6M, 250V, 13A&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Node_Provider_Machine_Hardware_Guide&amp;diff=5144</id>
		<title>Node Provider Machine Hardware Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Node_Provider_Machine_Hardware_Guide&amp;diff=5144"/>
		<updated>2023-04-24T16:48:51Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What are the Hardware Requirements for Node Machines? ==&lt;br /&gt;
Node providers operate one or more node machines than run in the IC network. Gen1 Hardware requirements have been used by Node Providers to set up node machines during Genesis launch. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Gen2 Hardware requirements have been defined for the further growth of the IC network. The specifications for the Gen2 node machines are generic (instead of vendor specific) and supports VM memory encryption and attestation which will be needed in future features on the IC. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Below are the up-to-date specifications for both the Gen2 node machines and Gen1 node machines. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Gen 2 Node Machine ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Generic specification Gen2 Node Machine ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Dual Socket AMD EPYC 7313 Milan 16C/32T 3 Ghz, 32K/512K/128M&lt;br /&gt;
optionally 7343, 7373, 73F3&lt;br /&gt;
|-&lt;br /&gt;
| 16x 32GB RDIMM, 3200MT/s, Dual Rank&lt;br /&gt;
|-&lt;br /&gt;
| 5x 6.4TB NVMe Mixed Mode (DWPD &amp;gt;= 3)&lt;br /&gt;
|-&lt;br /&gt;
| Dual Port 10G SFP or BASE-T&lt;br /&gt;
|-&lt;br /&gt;
| TPM 2.0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note the NVMe drives should be recognized by Linux as NVMe (i.e., show up as `/dev/nvme*` devices). SATA backplanes or any other hardware which prevents this should not be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Validated Configurations ===&lt;br /&gt;
DFINITY has [https://forum.dfinity.org/t/draft-motion-proposal-new-hardware-specification-and-remuneration-for-ic-nodes/14202/14?u=garym validated] the following Gen2 hardware configurations.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== Validated configuration: Dell ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 2 || AMD EPYC 7343 3.2GHz, 16C/32T, 128M Cache (190W) &lt;br /&gt;
|-&lt;br /&gt;
| 16 || 32GB RDIMM, 3200MT/s, Dual Rank 16Gb BASE x8&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 6.4TB Enterprise NVMe Mixed Use AG Drive U.2 Gen4 with carrier&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PowerEdge R6525 Motherboard, with 2 x 1Gb Onboard LOM (BCM5720)MLK V2&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Dual, Hot-plug, Redundant Power Supply (1+1) 1100W, Mixed Mode Titanium&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Intel X710 Dual Port 10GbE SFP+, OCP NIC 3.0&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Trusted Platform Module 2.0 V3&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Validated configuration: ASUS ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 2 || AMD EPYC 7313 (3,00 GHz, 16-Core, 128 MB)&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 32GB ECC Reg ATP DDR4 3200 RAM &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 6.4 TB NVMe Kioxia SSD 3D-NAND TLC U.3 (Kioxia CM6-V)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Asus Mainboard KMPP-D32 Series (without OCP 3.0, without Pike)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1600 Watt redundant PSU&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Broadcom 25 Gigabit P225P SFP28 Dual Port Network Card&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== Validated configurations: Supermicro &amp;amp; Gigabyte ====&lt;br /&gt;
Validation is being re-run on Supermicro and Gigabyte machines which match the spec. This section will be updated when those results are ready.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Gen 1 Node Machine ==&lt;br /&gt;
=== Node Machine Type 1 - Dell ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 1 || R6525&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Chassis - Supports Up to 10 NVMe drives, 12 drives total&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Dual 1 GB on Motherboard&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Low Profile PCIe Slots&lt;br /&gt;
|-&lt;br /&gt;
| - || 3 Year Basic NBD Support&lt;br /&gt;
|-&lt;br /&gt;
| - || iDrac Enterprise&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Dual port 10GbE Base - T Adapter Broadcom, PCIe Low Profile&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 3.2TB NVMe, Mixed Use, 2.5&amp;quot; with Carrier&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 32GB RDIMM (3200MT/s)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || AMD 7302 3GHz, 16C/32T, 128M, 155W, 3200&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Single Power Supply (800W)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || C13-C14, 3M, 125V 15A Power Cored&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Node Machine Type 1 - SuperMicro ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 1 || AS - 1023US - TR4&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Rome 7302 DP/UP 16C/32T 3.0&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 32GB DDR4-3200 2Rx4 ECC REG DIMM&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Samsung PM983 3.2TB NVMe PCIE/SATA Hybrid M.2 &amp;amp; 1 PCIE&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 800W Power Supply&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Std LP 2-port 10G RJ45, Intel x540&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Micron 5300 PRO 7.4TB, SATA, 2.5&#039;, 3D TLC, .6DWPD (with Caddie)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || C13/C14 13A Power Cord&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Node Machine Type 2 - Dell ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 1 || R6515&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 3.5&amp;quot; Chassis with up to 4 Hot-Plug Hard Drives and OS RAID&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Dual 1 Gb on Motherboard&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Low Profile PCIe Slots&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Standard Fan&lt;br /&gt;
|-&lt;br /&gt;
| - || 3 Year Basic NBD Support&lt;br /&gt;
|-&lt;br /&gt;
| - || iDrac Enterprise&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Dual Port 10GbE Base - T Adapter Broadcom, PCIe LOw Profile&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 480GB SSD SATA Mix Use 6Gbps 512 2.5in Hot-Plug AG Drive, 3.5in&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 8GB RDIMM, 3200 MT/s, Single Rank&lt;br /&gt;
|-&lt;br /&gt;
| 1 || AMD EPYC 7232P 3.10GHz, 8C/16T, 64M Cache (120W) DDR4-3200&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Dual Hot-Plug Redundant Power Supply (1+1), 550W&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Jumper Cord - C13/C14, .6M, 250V, 13A&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Not_all_transactions_are_equal&amp;diff=4650</id>
		<title>Not all transactions are equal</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Not_all_transactions_are_equal&amp;diff=4650"/>
		<updated>2023-03-16T14:32:39Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Whilst it’s typical for blockchains to flaunt metrics around transactions per second (TX/s) or transactions per day (TX/d), comparisons between blockchains only make sense when those transactions are roughly equivalent i.e. TX/s comparisons only make sense to compare within a single problem domain. &lt;br /&gt;
&lt;br /&gt;
The ICP is a blockchain which aims to provide a general purpose world computer, capable of serving real web services directly to user&#039;s browsers without any need for web2 cloud providers. Individual transactions on the ICP can be considered to be richer and must do more computation than most other blockchains.&lt;br /&gt;
&lt;br /&gt;
This page aims to explain the differences between the work performed by transactions on the ICP vs those on Ethereum.&lt;br /&gt;
&lt;br /&gt;
== ETH vs. ICP execution throughput == &lt;br /&gt;
Both ETH and ICP are able to run (general-purpose) smart contracts. At the execution layer, contracts are translated to a lower-level virtual machine interpretable language. These are EVM in the case of ETH and a Wasm-compatible runtime in the ICP case. Both EVM and Wasm instructions include arithmetic instructions (e.g., add, mul, div), but also more smart-contract specific instructions (e.g., reading and writing memory). The latter are in general more expensive operations in terms of consumed resources, which is then translated to the amount of gas used for each opcode of ETH and cycles used for ICP.&lt;br /&gt;
&lt;br /&gt;
To compare the overall throughput of the two blockchains (i.e., how many ops per second can be handled), one needs to make several assumptions. First, it is assumed that the simpler EVM instructions (e.g., add, mul, div etc.) are roughly equivalent to the Wasm instructions of the same type, both kinds being translated to a similar x86 instruction executed by the hardware. The comparison is much more complex and not apples-to-apples for the more complex operations. For a proper comparison here one would need to either (1) thoroughly understand the design of both execution layers or (2) run a similar program/benchmark on both blockchains and compare their overall performance. These two options are time-consuming and would lead to longer-term research efforts.&lt;br /&gt;
For a quicker comparison, it can be assumed that all EVM instructions are equal in terms of gas cost (and also assume no fees are involved). Since ETH is currently burning approximately &#039;&#039;&#039;108B gas units per day&#039;&#039;&#039;, and assuming each instruction costs 1 gas unit (which vastly &#039;&#039;underestimates&#039;&#039; the costs of memory access operations), it is clear that the ETH blockchain is running less than 108B instructions per day.&lt;br /&gt;
&lt;br /&gt;
The IC executes more than 20 billion replicated Wasm instructions per second. Under the simplifying assumption that all instructions are comparable, this means the IC runs the daily number of ETH instructions in less than 6 seconds.&lt;br /&gt;
&lt;br /&gt;
To see this, consider that Ethereum executes 1,250,000 instructions and 15 transactions per second, which means that there are on average 83,333 instructions per transaction. While the IC executes 20 Billion instructions and 3,000 update calls per second, there are on average 6,666,667 instructions per call. Comparing the work intensity of the two blockchains, taking the ratio of instructions per transaction (6,666,667/83,333) ICP performs 80x the amount of computational work of Ethereum per transaction.&lt;br /&gt;
&lt;br /&gt;
To compare the two networks in terms of efficiency, one also needs to consider the replication factor. In ICP the typical replication factor is 13 versus approximately 550&#039;000 for Ethereum (a number that is steadily increasing and rose by approximately 100&#039;000 over the last 6 months).&lt;br /&gt;
Concluding, ICP is at least 3.4 million times more efficient than Ethereum.&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Not_all_transactions_are_equal&amp;diff=4649</id>
		<title>Not all transactions are equal</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Not_all_transactions_are_equal&amp;diff=4649"/>
		<updated>2023-03-16T14:31:54Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Whilst it’s typical for blockchains to flaunt metrics around transactions per second (TX/s) or transactions per day (TX/d), comparisons between blockchains only make sense when those transactions are roughly equivalent i.e. TX/s comparisons only make sense to compare within a single problem domain. &lt;br /&gt;
&lt;br /&gt;
The ICP is a blockchain which aims to provide a general purpose world computer, capable of serving real web services directly to user&#039;s browsers without any need for web2 cloud providers. Individual transactions on the ICP can be considered to be richer and must do more computation than most other blockchains.&lt;br /&gt;
&lt;br /&gt;
This page aims to explain the differences between the work performed by transactions on the ICP vs those on Ethereum.&lt;br /&gt;
&lt;br /&gt;
== ETH vs. ICP execution throughput == &lt;br /&gt;
Both ETH and ICP are able to run (general-purpose) smart contracts. At the execution layer, contracts are translated to a lower-level virtual machine interpretable language. These are EVM in the case of ETH and a Wasm-compatible runtime in the ICP case. Both EVM and Wasm instructions include arithmetic instructions (e.g., add, mul, div), but also more smart-contract specific instructions (e.g., reading and writing memory). The latter are in general more expensive operations in terms of consumed resources, which is then translated to the amount of gas used for each opcode of ETH and cycles used for ICP.&lt;br /&gt;
&lt;br /&gt;
To compare the overall throughput of the two blockchains (i.e., how many ops per second can be handled), one needs to make several assumptions. First, it is assumed that the simpler EVM instructions (e.g., add, mul, div etc.) are roughly equivalent to the Wasm instructions of the same type, both kinds being translated to a similar x86 instruction executed by the hardware. The comparison is much more complex and not apples-to-apples for the more complex operations. For a proper comparison here one would need to either (1) thoroughly understand the design of both execution layers or (2) run a similar program/benchmark on both blockchains and compare their overall performance. These two options are time-consuming and would lead to longer-term research efforts.&lt;br /&gt;
For a quicker comparison, it can be assumed that all EVM instructions are equal in terms of gas cost (and also assume no fees are involved). Since ETH is currently burning approximately &#039;&#039;&#039;108B gas units per day&#039;&#039;&#039;, and assuming each instruction costs 1 gas unit (which vastly &#039;&#039;underestimates&#039;&#039; the costs of memory access operations), it is clear that the ETH blockchain is running less than 108B instructions per day.&lt;br /&gt;
&lt;br /&gt;
The IC executes more than 20 billion replicated Wasm instructions per second. Under the simplifying assumption that all instructions are comparable, this means the IC runs the daily number of ETH instructions in less than 6 seconds.&lt;br /&gt;
&lt;br /&gt;
To see this, consider that Ethereum executes 1,250,000 instructions and 15 transactions per second, which means that there are on average 83,333 instructions per transaction. While the IC executes 20 Billion instructions and 3,000 update calls per second, there are on average 6,666,667 instructions per call. Comparing the work intensity of the two blockchains, taking the ratio of instructions per transaction (6,666,667/83,333) ICP performs 80x the amount of computational work of Ethereum per transaction.&lt;br /&gt;
&lt;br /&gt;
To compare the two networks in terms of efficiency, one also needs to consider the replication factor. In ICP the typical replication factor is 13 versus approximately 550&#039;000 for Ethereum (a number that is steadily increasing and rose by approximately 100&#039;000 over the last 6 months).&lt;br /&gt;
Concluding, ICP is about 3.4 million times more efficient than Ethereum.&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Not_all_transactions_are_equal&amp;diff=4648</id>
		<title>Not all transactions are equal</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Not_all_transactions_are_equal&amp;diff=4648"/>
		<updated>2023-03-16T14:26:53Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Whilst it’s typical for blockchains to flaunt metrics around transactions per second (TX/s) or transactions per day (TX/d), comparisons between blockchains only make sense when those transactions are roughly equivalent i.e. TX/s comparisons only make sense to compare within a single problem domain. &lt;br /&gt;
&lt;br /&gt;
The ICP is a blockchain which aims to provide a general purpose world computer, capable of serving real web services directly to user&#039;s browsers without any need for web2 cloud providers. Individual transactions on the ICP can be considered to be richer and must do more computation than most other blockchains.&lt;br /&gt;
&lt;br /&gt;
This page aims to explain the differences between the work performed by transactions on the ICP vs those on Ethereum.&lt;br /&gt;
&lt;br /&gt;
== ETH vs. ICP execution throughput == &lt;br /&gt;
Both ETH and ICP are able to run (general-purpose) smart contracts. At the execution layer, contracts are translated to a lower-level virtual machine interpretable language. These are EVM in the case of ETH and a Wasm-compatible runtime in the ICP case. Both EVM and Wasm instructions include arithmetic instructions (e.g., add, mul, div), but also more smart-contract specific instructions (e.g., reading and writing memory). The latter are in general more expensive operations in terms of consumed resources, which is then translated to the amount of gas used for each opcode of ETH and cycles used for ICP.&lt;br /&gt;
&lt;br /&gt;
To compare the overall throughput of the two blockchains (i.e., how many ops per second can be handled), one needs to make several assumptions. First, it is assumed that the simpler EVM instructions (e.g., add, mul, div etc.) are roughly equivalent to the Wasm instructions of the same type, both kinds being translated to a similar x86 instruction executed by the hardware. The comparison is much more complex and not apples-to-apples for the more complex operations. For a proper comparison here one would need to either (1) thoroughly understand the design of both execution layers or (2) run a similar program/benchmark on both blockchains and compare their overall performance. These two options are time-consuming and would lead to longer-term research efforts.&lt;br /&gt;
For a quicker comparison, it can be assumed that all EVM instructions are equal in terms of gas cost (and also assume no fees are involved). Since ETH is currently burning approximately &#039;&#039;&#039;108B gas units per day&#039;&#039;&#039;, and assuming each instruction costs 1 gas unit (which vastly &#039;&#039;underestimates&#039;&#039; the costs of memory access operations), it is clear that the ETH blockchain is running less than 108B instructions per day.&lt;br /&gt;
&lt;br /&gt;
The IC executes more than 20 billion replicated Wasm instructions per second. Under the simplifying assumption that all instructions are comparable, this means the IC runs the daily number of ETH instructions in less than 6 seconds.&lt;br /&gt;
&lt;br /&gt;
To see this, consider that Ethereum executes 1,250,000 instructions and 15 transactions per second, which means that there are on average 83,333 instructions per transaction. While the IC executes 20 Billion instructions and 3,000 update calls per second, there are on average 6,666,667 instructions per call. Comparing the work intensity of the two blockchains, taking the ratio of instructions per transaction (6,666,667/83,333) ICP performs 80x the amount of computational work of Ethereum per transaction.&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Notation&amp;diff=4354</id>
		<title>Notation</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Notation&amp;diff=4354"/>
		<updated>2023-02-24T16:54:06Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following is the notation used within the descriptions of the [[IC state manager|state manager]] and the [[IC message routing layer|message routing]] layer.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;v : τ&amp;lt;/math&amp;gt; means value &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; has type &amp;lt;math&amp;gt;τ&amp;lt;/math&amp;gt;.&lt;br /&gt;
* &amp;lt;math&amp;gt;X = a&amp;lt;/math&amp;gt; means that a type or a value &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; is an alias for &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;.&lt;br /&gt;
* &amp;lt;math&amp;gt;X := \text{[something]}&amp;lt;/math&amp;gt; means that &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; is defined to be &amp;lt;math&amp;gt;\text{[something]}&amp;lt;/math&amp;gt;&lt;br /&gt;
* A percent sign &amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt; preceded only by spaces starts a line comment &amp;lt;code&amp;gt;% [comment]&amp;lt;/code&amp;gt;&lt;br /&gt;
* We use &amp;lt;math&amp;gt;\cdot&amp;lt;/math&amp;gt; to denote that we do not care about the value some variable takes. For example, when quantifying over a set of tuples of the form &amp;lt;math&amp;gt;(x, y)&amp;lt;/math&amp;gt; we may use a &amp;lt;math&amp;gt;(x, \cdot)&amp;lt;/math&amp;gt; to express that we do not care about the value &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; takes in each of the tuples.&lt;br /&gt;
* Let &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; be a set or a sequence. We use &amp;lt;math&amp;gt;|X|&amp;lt;/math&amp;gt; to denote the size/length of the set/sequence.&lt;br /&gt;
* Let &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; be a sequence. We use &amp;lt;math&amp;gt;X[i]&amp;lt;/math&amp;gt; to access the element in &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; at index &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X[u…​v]&amp;lt;/math&amp;gt; to refer to a slice of the sequence starting at index &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; and ending at index &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt;. For example, for a sequence &amp;lt;math&amp;gt;X := (a, b, c, d)&amp;lt;/math&amp;gt;, the &amp;lt;math&amp;gt;slice X[2…​3] = (b, c)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* We define the concatenation of two ordered sequences &amp;lt;math&amp;gt;a := (x_1, …​, x_m)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;b := (y_1, …​, y_n)&amp;lt;/math&amp;gt; as &amp;lt;math&amp;gt;(x_1, …​, x_m, y_1, …​, y_n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* We often work with partial maps &amp;lt;math&amp;gt;M: X \mapsto Y&amp;lt;/math&amp;gt;, which we write as &amp;lt;math&amp;gt;\{ (x_1 \mapsto y_1), \dots, (x_n \mapsto y_n) \}&amp;lt;/math&amp;gt;, where &amp;lt;math&amp;gt;\forall~ i, 1 \leq i \leq n : x_i \in X \land y_i \in Y&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\nexists~ i, j, 1 \leq i, j \leq n: x_i = x_j \land i \neq j&amp;lt;/math&amp;gt;. We note that partial maps can be nested, i.e., the set &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; could again be a partial map&lt;br /&gt;
* We use square brackets to index into a partial map, for example &amp;lt;math&amp;gt;M[x] = y&amp;lt;/math&amp;gt; if &amp;lt;math&amp;gt;(x \mapsto y) \in M&amp;lt;/math&amp;gt;&lt;br /&gt;
* In case we work with nested partial maps, such as &amp;lt;math&amp;gt;M: X \mapsto (Y \mapsto Z)&amp;lt;/math&amp;gt;, for example, we usually write them as a single map &amp;lt;math&amp;gt;M: (X \times Y) \mapsto Z&amp;lt;/math&amp;gt;, i.e., &amp;lt;math&amp;gt;\{ ((x_1, y_1) \mapsto z_1), …​ ((x_m, y_n) \mapsto z_{mn}) \}&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Let &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; be a set. We define &amp;lt;math&amp;gt;\min(X) := \{ i | i \in X \land \nexists j \in X : j &amp;lt; i \}&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\max(X) := &lt;br /&gt;
\{ i | i \in X \land \nexists j \in X : j &amp;gt; i \}&amp;lt;/math&amp;gt;. Note that a set can contain multiple incomparable elements in which case &amp;lt;math&amp;gt;|\min(X)|&amp;lt;/math&amp;gt; or &amp;lt;math&amp;gt;|\max(X)|&amp;lt;/math&amp;gt; could be greater than 1.&lt;br /&gt;
* For partial maps &amp;lt;math&amp;gt;M : X \mapsto Y&amp;lt;/math&amp;gt;, we define the function &amp;lt;math&amp;gt;\text{dom}(M) := \{ i | (i ↦ ·) \in M \}&amp;lt;/math&amp;gt;.&lt;br /&gt;
* We define the map merge operator &amp;lt;math&amp;gt;A \cup B&amp;lt;/math&amp;gt; on partial maps &amp;lt;math&amp;gt;A: X \mapsto Y&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;B: X \mapsto Y&amp;lt;/math&amp;gt; as &amp;lt;math&amp;gt;(x \mapsto y) \in A \cup B&amp;lt;/math&amp;gt; iff &amp;lt;math&amp;gt;(x \mapsto y) \in A \lor (x \mapsto y) \in B&amp;lt;/math&amp;gt;. The operation fails if the domains of A and B are not disjoint.&lt;br /&gt;
* We define the &amp;lt;math&amp;gt;\text{merge}(S)&amp;lt;/math&amp;gt; operator, which, for a set of partial maps &amp;lt;code&amp;gt;S : Set&amp;lt;X ↦ Y&amp;gt;&amp;lt;/code&amp;gt; is defined as &amp;lt;math&amp;gt;\text{merge}(\{ M_1, …​, M_n \}) := M_1 ∪ …​ ∪ M_n&amp;lt;/math&amp;gt;.&lt;br /&gt;
* When working with sets of types with multiple fields, e.g., set &amp;lt;math&amp;gt;S = \{ t_1, …​, t_n \}&amp;lt;/math&amp;gt; of type &amp;lt;code&amp;gt;Set&amp;lt;T&amp;gt;&amp;lt;/code&amp;gt; where &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; has a field &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; of type &amp;lt;math&amp;gt;T_A&amp;lt;/math&amp;gt; we use &amp;lt;math&amp;gt;S.A&amp;lt;/math&amp;gt; to denote the set &amp;lt;math&amp;gt;\{ t_1.A, …​, t_n.A \}&amp;lt;/math&amp;gt; of type &amp;lt;code&amp;gt;Set&amp;lt;T_A&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* We do the same for nested partial maps where the innermost partial map is a type with multiple fields. For example, for a map &amp;lt;math&amp;gt;M : X \mapsto Y \mapsto T&amp;lt;/math&amp;gt; we use &amp;lt;math&amp;gt;M.A&amp;lt;/math&amp;gt; to denote the map &amp;lt;math&amp;gt;\{ (x \mapsto y \mapsto a) | (x \mapsto y \mapsto t) \in M \land a = t.A \}&amp;lt;/math&amp;gt; of type &amp;lt;math&amp;gt;X ↦ Y ↦ T_A&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Sometimes we need to drop the property of (nested) partial maps that each key maps to a unique value in which case we use the same notation, but replace the &amp;lt;math&amp;gt;\mapsto&amp;lt;/math&amp;gt; with a &amp;lt;math&amp;gt;\times&amp;lt;/math&amp;gt; in the type definition, i.e., use sets of key-value tuples of type &amp;lt;code&amp;gt;Set((X × …​ × Y) × V)&amp;lt;/code&amp;gt; tuples. We will use the same notational conventions as defined for partial maps above.&lt;br /&gt;
* We sometimes use &amp;lt;code&amp;gt;FAIL IF: p&amp;lt;/code&amp;gt; for some predicate &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; before function definitions in pseudocode. The semantic of this is that whenever p evaluates to false the actual implementation should fail, while the implementation given in the specification does not fail.&lt;br /&gt;
* We say that a function &amp;lt;math&amp;gt;H: X \rightarrow Y&amp;lt;/math&amp;gt; is collision resistant, if—​for practical purposes—​it it will never happen that one comes up with two values &amp;lt;math&amp;gt;x, x&#039; \in X&amp;lt;/math&amp;gt; so that &amp;lt;math&amp;gt;x \neq x&#039;&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;H(x) = H(x&#039;)&amp;lt;/math&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Node_Provider_Onboarding&amp;diff=4340</id>
		<title>Node Provider Onboarding</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Node_Provider_Onboarding&amp;diff=4340"/>
		<updated>2023-02-22T17:43:02Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Learn how to participate in the Internet Computer network as a Node Provider and to receive rewards for supporting the network.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.internetcomputer.org/wiki/Node_provider_hardware Node Hardware]&lt;br /&gt;
* Rack space with a 10Gb connectivity, RJ45 terminated on the nodes&lt;br /&gt;
* Public /28 IPv4 range and /64 IPv6 range&lt;br /&gt;
* [https://www.ledger.com/ Hardware wallet]&lt;br /&gt;
* [https://shop.nitrokey.com/shop/product/nkhs2-nitrokey-hsm-2-7/ NitroKey HSM]&lt;br /&gt;
* 11 ICP (10 of which are to be staked for the NNS proposal deposit)&lt;br /&gt;
* Basic understanding of neurons, staking, and governance proposals. For instance, understanding what it means to stake a neuron for 8 years.&lt;br /&gt;
* The technical knowledge to understand some minor steps that are not explicitly mentioned in these instructions. For instance, when to insert an HSM.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Please allocate at least 0.5 day for going through the first part, i.e., the registration of a new NP. It may even take a couple of days, depending on how quickly the community votes for the proposals. There is a also fair amount of complexity and the technical knowledge that needs to be absorbed in order to complete the steps. But this only needs to be done once.&amp;lt;br&amp;gt;&lt;br /&gt;
The next step, going to the DC and bringing up and onboarding the machines, is much quicker. Estimate to spend 10-15 minutes per machine. This time should go down to ~5 minutes as you gain experience. Also, multiple machines can be brought up in parallel.&lt;br /&gt;
&lt;br /&gt;
== I. Install the required tools ==&lt;br /&gt;
===&#039;&#039;&#039; A. Install ic-admin &#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ic-admin&amp;lt;/code&amp;gt; is the tool used to create and submit NNS proposals.&lt;br /&gt;
&lt;br /&gt;
==== MacOS ====&lt;br /&gt;
# Retrieve the file &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
curl &amp;quot;https://download.dfinity.systems/ic/7445081734e6d896d090295967d50710975c4f25/openssl-static-binaries/x86_64-darwin/ic-admin.gz&amp;quot; -o - | gunzip &amp;gt; ./ic-admin&lt;br /&gt;
chmod +x ./ic-admin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Verify the binary &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
diff &amp;lt;(shasum -a 256 ./ic-admin | cut -d&#039; &#039; -f1) &amp;lt;(echo 3f75026d2f28f171068e332a42c82a2795c93fbf5ab351baef30b30eb901cdba) &amp;amp;&amp;amp; echo &amp;quot;ic-admin checksum matches&amp;quot; || echo &amp;quot;***ERROR***: ic-admin checksum does not match&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
NOTE: The instructions below have been tested with the Ubuntu 20.04 release.&lt;br /&gt;
# Retrieve the file &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
curl &amp;quot;https://download.dfinity.systems/ic/7445081734e6d896d090295967d50710975c4f25/openssl-static-binaries/x86_64-linux/ic-admin.gz&amp;quot; -o - | gunzip &amp;gt; ./ic-admin&lt;br /&gt;
chmod +x ./ic-admin &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Verify the binary &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
diff &amp;lt;(shasum -a 256 ./ic-admin | cut -d&#039; &#039; -f1) &amp;lt;(echo e29bb9cc462e800b8b960ad49c412e5f5fdbb5ae2ae9fde0c13058422ba32802) &amp;amp;&amp;amp; echo &amp;quot;ic-admin checksum matches&amp;quot; || echo &amp;quot;***ERROR***: ic-admin checksum does not match&amp;quot; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039; B. Install dfx &#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;dfx&amp;lt;/code&amp;gt; allows generating a neuron hotkey, among other things &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
$ DFX_VERSION=0.9.3 sh -ci &amp;quot;$(curl -fsSL https://sdk.dfinity.org/install.sh)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Verify that the version is 0.9.3 &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
$ export PATH=$HOME/bin:$PATH&lt;br /&gt;
$ dfx --version dfx 0.9.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Create an identity for the Node Provider &#039;&#039;&#039;Hotkey&#039;&#039;&#039; &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
$ dfx identity new node-provider-hotkey&lt;br /&gt;
Creating identity: &amp;quot;node-provider-hotkey&amp;quot;.&lt;br /&gt;
Created identity: &amp;quot;node-provider-hotkey&amp;quot;.&lt;br /&gt;
$ dfx --identity node-provider-hotkey identity get-principal&lt;br /&gt;
wuyst-x5tpn-g5wri-mp3ps-vjtba-de3xs-w5xgb-crvek-tucbe-o5rqi-mae&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Note:&#039;&#039;&#039; The node provider hotkey is NOT the node provider principal. This is the hotkey that is used for the NNS proposal submissions only.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== II. Create and Manage Neuron via NNS Frontend Dapp and Internet Identity ==&lt;br /&gt;
&lt;br /&gt;
# Setup your hardware wallet: https://medium.com/dfinity/integrating-ledger-nano-with-the-nns-front-end-dapp-user-manual-9c5600925e16&lt;br /&gt;
# Send at least 11 ICPs to the hardware wallet address.&lt;br /&gt;
# Navigate to Neurons tab and create a Neuron by staking at least 10 ICP from your hardware wallet. Staking more ICP works as well, but 10 is the minimum.&lt;br /&gt;
# IMPORTANT! Confirm the transaction on your hardware wallet. &lt;br /&gt;
#: [[File:-docs-stake_neuron_1.png|1024px|stake neuron]]&lt;br /&gt;
#: &lt;br /&gt;
# After the Neuron has been created successfully, confirm to add NNS Dapp as hotkey in the dialogue and on your hardware wallet, and close the dialog after the action completes.&lt;br /&gt;
#: [[File:-docs-stake_neuron_2.png|1024px|neuron id]]&lt;br /&gt;
# Set the dissolve delay to at least 6 months, and confirm the choice in the dialogue and on your hardware wallet. After the action completes, you can close the &amp;quot;Follow Neurons&amp;quot;.&lt;br /&gt;
#:&lt;br /&gt;
#: [[File:dissolve_delay.png|480px|neuron id]]&lt;br /&gt;
# You will now see a Neuron listed with its ID. Copy the Neuron ID, since you will need it in the next steps to place the necessary proposals.&lt;br /&gt;
#: [[File:Neuron id.png|1024px]]&lt;br /&gt;
&lt;br /&gt;
== III. Add hotkeys ==&lt;br /&gt;
&lt;br /&gt;
# Select the Neuron you just created to open Neuron management view and press “Add hotkey” button.&lt;br /&gt;
#: [[File:Hotkey 1.png|800px]]&lt;br /&gt;
# A dialog will pop up where you can enter the principal you generated in step 2 (output from command &amp;lt;code&amp;gt;dfx --identity node-provider-hotkey identity get-principal&amp;lt;/code&amp;gt;). This will allow you to submit NNS proposals using &amp;lt;code&amp;gt;ic-admin&amp;lt;/code&amp;gt; and will not be used for anything else.&amp;lt;br&amp;gt;&lt;br /&gt;
#:Press the confirm button and confirm the transactions on your hardware wallet.&amp;lt;br&amp;gt;&lt;br /&gt;
#: [[File:Hotkey 2.png|800px]]&lt;br /&gt;
#:&lt;br /&gt;
# Get the Ledger Hardware Wallet Principal Id: Navigate back to ICP page and select your Ledger hardware wallet account. You will need to use this Ledger Hardware Wallet principal as the Node Provider principal in order to get the rewards directly into the secure hardware wallet.&lt;br /&gt;
[[File:Node provider principal 1.png|1024px]]&lt;br /&gt;
[[File:Node provider principal 2.png|800px]]&lt;br /&gt;
# Copy and save this Node Provider principal by clicking on the copy icon after the principal id. You&#039;ll need it in the next steps. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
NODE_PROVIDER_PRINCIPAL=fharn-5vyi2-4xb4a-64yyi-3jpmj-pga23-mxy25-d5uim-fqcro-eoefh-tae   # Ledger Hardware Wallet principal, from the NNS FrontEnd dapp https://nns.ic0.app/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IV. Configure your HSM ==&lt;br /&gt;
It&#039;s first necessary to install the necessary tools.&lt;br /&gt;
&lt;br /&gt;
=== MacOS ===&lt;br /&gt;
# Download this OpenSC binary: https://github.com/OpenSC/OpenSC/releases/download/0.22.0/OpenSC-0.22.0.dmg&lt;br /&gt;
# Double click the DMG image that you downloaded and then double click the OpenSC PKG file.&lt;br /&gt;
# If your system doesn&#039;t allow the installation software from an unidentified developer please follow these steps or contact your system administrator:&lt;br /&gt;
#* Choose the Apple menu &amp;amp;gt; System Preferences &amp;amp;gt; click Security and Privacy.&lt;br /&gt;
#* Click the lock Icon to unlock it, then enter an administrator name and password.&lt;br /&gt;
#* Ensure that you&#039;re on the tab named “General”.&lt;br /&gt;
#* You should see the OpenSC app and you should be able to enable its installation by choosing “Open anyway”.&lt;br /&gt;
# Click continue and install until the installation is complete.&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
NOTE: The instructions below have been tested with the Ubuntu 20.04 release.&lt;br /&gt;
&lt;br /&gt;
# Install pcscd and opensc&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository universe&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install pcscd opensc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== V. Setup the HSM ==&lt;br /&gt;
&lt;br /&gt;
# Initialize the HSM. &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sc-hsm-tool --initialize --so-pin 3537363231383830 --pin 358138&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Change the HSM so-pin. &lt;br /&gt;
#* &#039;&#039;&#039;WARNING:&#039;&#039;&#039; The new HSM so pin must have 16 hexadecimal digits. This is not very well known, and some HSM users have lost access to a Nitrokey HSM because they tried using regular characters and the command below accepted it. &lt;br /&gt;
#* &#039;&#039;&#039;Do NOT change the user pin. It must remain as the default for the onboarding scripts to work&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
pkcs11-tool --login --login-type so --so-pin 3537363231383830 --change-pin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Create a keypair on the HSM. Enter the default pin 358138 when prompted. &lt;br /&gt;
#* &#039;&#039;&#039;Note:&#039;&#039;&#039; Before initializing the HSM key please refer to the [https://docs.nitrokey.com/pro/openpgp.html Nitrokey HSM documentation] if you wish to create a backup. Creating a backup of the HSM device is NOT possible after the key has already been created. &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
pkcs11-tool -k --key-type EC:prime256v1 --login -d 01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== VI. Get the node operator principal from the HSM ==&lt;br /&gt;
# Configure dfx identity (skip this step if you already configured it for an other HSM).&lt;br /&gt;
#* &#039;&#039;&#039;Note:&#039;&#039;&#039; Depending on your installation, the path to the &amp;lt;code&amp;gt;--hsm-pkcs11-lib-path&amp;lt;/code&amp;gt; might be different on your platform. You can locate the correct path with the following command: &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
find / -name opensc-pkcs11.so 2&amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#* MacOS &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
dfx identity new node-operator-hsm --hsm-key-id 01 --hsm-pkcs11-lib-path /Library/OpenSC/lib/opensc-pkcs11.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#*  Linux &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
dfx identity new node-operator-hsm --hsm-key-id 01 --hsm-pkcs11-lib-path /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Get the principal. &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
$ NODE_OPERATOR_PRINCIPAL=$(DFX_HSM_PIN=358138 dfx --identity node-operator-hsm identity get-principal)&lt;br /&gt;
$ echo $NODE_OPERATOR_PRINCIPAL&lt;br /&gt;
&lt;br /&gt;
uqquy-76uhn-2mys5-xxxxx-xxxxx-xxxxx-xxxxx-xxxxx-xxxxx-xxxxx-xxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== VII. Register your NP principal to the network ==&lt;br /&gt;
&lt;br /&gt;
In the next codeblock: &lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;NEURON_ID&amp;lt;/code&amp;gt; value with your neuron ID from the NNS Frontend Dapp&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;NODE_PROVIDER_PRINCIPAL&amp;lt;/code&amp;gt; value with the Ledger Hardware Wallet principal that you got from the NNS Frontend DAPP.&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;NODE_PROVIDER_NAME&amp;lt;/code&amp;gt; value with the name of the entity that will provide the nodes.&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039;&#039;&#039; Please make sure that you also update the &amp;lt;code&amp;gt;--summary&amp;lt;/code&amp;gt; and include a link to the forum discussion, your company&#039;s web page, and/or to another place that can convince the voting community that you are making a legitimate request. This way you will avoid the community voting NO to your proposal and you losing the staked ICPs.&lt;br /&gt;
&lt;br /&gt;
# Create the Proposal &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
NODE_PROVIDER_NAME=&amp;quot;My Company&amp;quot;&lt;br /&gt;
NODE_PROVIDER_PRINCIPAL=fharn-5vyi2-4xb4a-64yyi-3jpmj-pga23-mxy25-d5uim-fqcro-eoefh-tae   # Ledger Hardware Wallet principal, from the NNS FE dapp https://ic0.app/&lt;br /&gt;
NEURON_ID=13419667327548602649  # Coming from the NNS FrontEnd dapp https://nns.ic0.app/&lt;br /&gt;
./ic-admin \&lt;br /&gt;
        --nns-url https://ic0.app \&lt;br /&gt;
        -s ~/.config/dfx/identity/node-provider-hotkey/identity.pem \&lt;br /&gt;
    propose-to-add-or-remove-node-provider add \&lt;br /&gt;
        --proposer $NEURON_ID \&lt;br /&gt;
        --proposal-title &amp;quot;Register a node provider &#039;${NODE_PROVIDER_NAME}&#039;&amp;quot; \&lt;br /&gt;
        --summary &amp;quot;Register a node provider &#039;${NODE_PROVIDER_NAME}&#039;, in line with the announcement and discussion at https://forum.dfinity.org/t/...&amp;quot; \&lt;br /&gt;
        --node-provider-pid &amp;quot;$NODE_PROVIDER_PRINCIPAL&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Find the proposal on https://dashboard.internetcomputer.org/governance and &#039;&#039;&#039;wait until it is executed before proceeding to next step.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== VIII. Ensure that your datacenter is registered in the network ==&lt;br /&gt;
# Search for your data center on https://dashboard.internetcomputer.org/centers. &lt;br /&gt;
#* If you found the datacenter that is hosting your nodes, remember its ID, and skip the following section. Otherwise, proceed with the registration of a new DC. [[File:dc_id.png|1024px]]&lt;br /&gt;
&lt;br /&gt;
=== Create a data center record for a new DC ===&lt;br /&gt;
In the next block of code:&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;--proposer&amp;lt;/code&amp;gt; argument value with your Neuron ID from the NNS Frontend Dapp. &lt;br /&gt;
* Replace the JSON fields from &amp;lt;code&amp;gt;–data-centers-to-add&amp;lt;/code&amp;gt; argument and their corresponding values in &amp;lt;code&amp;gt;--summary&amp;lt;/code&amp;gt; with: &amp;lt;code&amp;gt;&amp;amp;quot;id&amp;amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* The ID should be combination of two letters representing a city that your datacenter is in, and an incrementing number. Search data center IDs on https://dashboard.internetcomputer.org, and find a combination of two letters and a number that’s not yet registered. Examples:&lt;br /&gt;
** dl1 (Dallas, no IDs with “dl” prefix)&lt;br /&gt;
** zh10 (Zurich, numbers 0-9 are already registered) &lt;br /&gt;
[[File:dc_id.png|1024px]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;quot;region&amp;amp;quot;&amp;lt;/code&amp;gt; represents the local region of a datacenter and is formulated as a three-part string divided by commas. The three parts making the string are continent, country code, and region, in the given order. Examples:&lt;br /&gt;
** North America,US,Florida&lt;br /&gt;
** Europe,DE,Bavaria&lt;br /&gt;
** Asia,SG,Singapore&lt;br /&gt;
[[File:datacenter_region.png|1024px]] &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;quot;owner&amp;amp;quot;&amp;lt;/code&amp;gt; The entity that provides your datacenter facilities. &lt;br /&gt;
** Search https://dashboard.internetcomputer.org for existing data center providers. &lt;br /&gt;
** If there’s match, make sure you use the same exact some name for your datacenter. &lt;br /&gt;
** Otherwise, name the data center owner to your best knowledge. [[File:datacenter_owner.png|1024px]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;quot;gps&amp;amp;quot;&amp;lt;/code&amp;gt; GPS coordinates. &lt;br /&gt;
** Find your datacenter on https://www.google.com/maps/. &lt;br /&gt;
** Right click on location, and select the GPS coordinates (first item in the menu) in order to copy them.&lt;br /&gt;
[[File:maps.png|480px|alt=Getting GPS coordinates|Getting GPS coordinates]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Create the proposal: &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
NEURON_ID=13419667327548602649  # Coming from the NNS FE dapp https://nns.ic0.app/&lt;br /&gt;
$ ./ic-admin \&lt;br /&gt;
        --nns-url https://ic0.app \&lt;br /&gt;
        -s ~/.config/dfx/identity/node-provider-hotkey/identity.pem \&lt;br /&gt;
    propose-to-add-or-remove-data-centers \&lt;br /&gt;
        --summary &amp;quot;Register a Flexential datacenter as dl1 in North America,US,Texas&amp;quot; \&lt;br /&gt;
        --skip-confirmation \&lt;br /&gt;
        --proposer $NEURON_ID \&lt;br /&gt;
        --data-centers-to-add &#039;{&lt;br /&gt;
            &amp;quot;id&amp;quot;: &amp;quot;dl1&amp;quot;,&lt;br /&gt;
            &amp;quot;region&amp;quot;: &amp;quot;North America,US,Texas&amp;quot;,&lt;br /&gt;
            &amp;quot;owner&amp;quot;: &amp;quot;Flexential&amp;quot;,&lt;br /&gt;
            &amp;quot;gps&amp;quot;: [&lt;br /&gt;
                33.00803, -96.66614&lt;br /&gt;
            ]&lt;br /&gt;
        }&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Find the proposal on https://dashboard.internetcomputer.org/governance and wait until it&#039;s executed before proceeding to next step.&lt;br /&gt;
&lt;br /&gt;
== IX. Create a node operator record ==&lt;br /&gt;
In the next codeblock:&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;NEURON_ID&amp;lt;/code&amp;gt; variable value with your neuron ID obtained from the NNS frontend dapp.&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;NODE_PROVIDER_PRINCIPAL&amp;lt;/code&amp;gt; variable value with the Ledger Hardware Wallet principal obtained from the NNS frontend dapp.&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;DC_ID&amp;lt;/code&amp;gt; variable value with id of your datacenter.&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;NODE_ALLOWANCE&amp;lt;/code&amp;gt; variable value with number of nodes you are providing.&lt;br /&gt;
&lt;br /&gt;
# Create the proposal: &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
NEURON_ID=13419667327548602649  # Coming from the NNS FE dapp https://nns.ic0.app/&lt;br /&gt;
NODE_PROVIDER_PRINCIPAL=fharn-5vyi2-4xb4a-64yyi-3jpmj-pga23-mxy25-d5uim-fqcro-eoefh-tae   # Ledger Hardware Wallet principal, from the NNS FE dapp https://nns.ic0.app/&lt;br /&gt;
NODE_OPERATOR_PRINCIPAL=$(DFX_HSM_PIN=358138 dfx --identity node-operator-hsm identity get-principal)&lt;br /&gt;
NODE_PROVIDER_NAME=&amp;quot;My Company&amp;quot;&lt;br /&gt;
NODE_ALLOWANCE=28&lt;br /&gt;
DC_ID=dl1&lt;br /&gt;
&lt;br /&gt;
./ic-admin \&lt;br /&gt;
        --nns-url https://ic0.app \&lt;br /&gt;
        -s ~/.config/dfx/identity/node-provider-hotkey/identity.pem \&lt;br /&gt;
    propose-to-add-node-operator \&lt;br /&gt;
        $NODE_PROVIDER_PRINCIPAL \&lt;br /&gt;
        --summary &amp;quot;Node provider &#039;$NODE_PROVIDER_NAME&#039; is adding $NODE_ALLOWANCE nodes in the $DC_ID data center&amp;quot; \&lt;br /&gt;
        --proposer $NEURON_ID \&lt;br /&gt;
        --node-operator-principal-id $NODE_OPERATOR_PRINCIPAL \&lt;br /&gt;
        --node-allowance $NODE_ALLOWANCE \&lt;br /&gt;
        --dc-id $DC_ID&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Find the proposal on https://dashboard.internetcomputer.org/governance and wait until it&#039;s executed before proceeding to next step.&lt;br /&gt;
&lt;br /&gt;
== X. Onboard nodes ==&lt;br /&gt;
&lt;br /&gt;
# Follow the instructions to onboard new nodes.&lt;br /&gt;
#* [[IC OS Installation Runbook - PowerEdge R6525]]&lt;br /&gt;
#* [[IC OS Installation Runbook - Supermicro]]&lt;br /&gt;
# Verify that all the nodes were successfully onboarded by checking their status on the dashboard is set to either “Up” or “Unassigned”, or by checking the output from &amp;lt;code&amp;gt;ic-admin get-topology&amp;lt;/code&amp;gt; command.&lt;br /&gt;
#* The internal dashboard can be searched by your provider principal.&lt;br /&gt;
[[File:onboarded_nodes.png|1024px|onboarded nodes]]&lt;br /&gt;
&lt;br /&gt;
== XI. Set the reward configuration for your nodes ==&lt;br /&gt;
In the next codeblock:&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;NEURON_ID&amp;lt;/code&amp;gt; variable value with your neuron ID obtained from the NNS frontend dapp.&amp;lt;br&amp;gt;&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;&amp;lt;NODE_X_PRINCIPAL&amp;gt;&amp;lt;/code&amp;gt; placeholders with your node principals.&amp;lt;br&amp;gt;&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;&amp;lt;number-of-nodes&amp;gt;&amp;lt;/code&amp;gt; placeholder with the number of nodes you listed.&lt;br /&gt;
* Note: The current maximum number of nodes per node operator are 28.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
NEURON_ID=13419667327548602649  # Coming from the NNS FE dapp https://nns.ic0.app/&lt;br /&gt;
NODE_OPERATOR_PRINCIPAL=$(DFX_HSM_PIN=358138 dfx --identity node-operator-hsm identity get-principal)&lt;br /&gt;
&lt;br /&gt;
./ic-admin \&lt;br /&gt;
        --nns-url https://ic0.app \&lt;br /&gt;
        -s ~/.config/dfx/identity/node-provider-hotkey/identity.pem \&lt;br /&gt;
    propose-to-update-node-operator-config \&lt;br /&gt;
        --proposer $NEURON_ID \&lt;br /&gt;
        --summary &amp;quot;Set rewards for the following nodes:&lt;br /&gt;
&lt;br /&gt;
        * &amp;lt;NODE_1_PRINCIPAL&amp;gt;&lt;br /&gt;
        * &amp;lt;NODE_2_PRINCIPAL&amp;gt;&lt;br /&gt;
        * ...&lt;br /&gt;
        &amp;quot; \&lt;br /&gt;
        --node-operator-id $NODE_OPERATOR_PRINCIPAL \&lt;br /&gt;
        --rewardable-nodes &#039;{&amp;quot;type0&amp;quot;: &amp;lt;number-of-nodes&amp;gt;}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* &#039;&#039;&#039;The Internet Computer project website (hosted on the IC): [https://internetcomputer.org/ internetcomputer.org]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Node_Provider_Onboarding&amp;diff=4339</id>
		<title>Node Provider Onboarding</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Node_Provider_Onboarding&amp;diff=4339"/>
		<updated>2023-02-22T17:42:30Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Learn how to participate in the Internet Computer network as a Node Provider and receive rewards for supporting the network.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.internetcomputer.org/wiki/Node_provider_hardware Node Hardware]&lt;br /&gt;
* Rack space with a 10Gb connectivity, RJ45 terminated on the nodes&lt;br /&gt;
* Public /28 IPv4 range and /64 IPv6 range&lt;br /&gt;
* [https://www.ledger.com/ Hardware wallet]&lt;br /&gt;
* [https://shop.nitrokey.com/shop/product/nkhs2-nitrokey-hsm-2-7/ NitroKey HSM]&lt;br /&gt;
* 11 ICP (10 of which are to be staked for the NNS proposal deposit)&lt;br /&gt;
* Basic understanding of neurons, staking, and governance proposals. For instance, understanding what it means to stake a neuron for 8 years.&lt;br /&gt;
* The technical knowledge to understand some minor steps that are not explicitly mentioned in these instructions. For instance, when to insert an HSM.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Please allocate at least 0.5 day for going through the first part, i.e., the registration of a new NP. It may even take a couple of days, depending on how quickly the community votes for the proposals. There is a also fair amount of complexity and the technical knowledge that needs to be absorbed in order to complete the steps. But this only needs to be done once.&amp;lt;br&amp;gt;&lt;br /&gt;
The next step, going to the DC and bringing up and onboarding the machines, is much quicker. Estimate to spend 10-15 minutes per machine. This time should go down to ~5 minutes as you gain experience. Also, multiple machines can be brought up in parallel.&lt;br /&gt;
&lt;br /&gt;
== I. Install the required tools ==&lt;br /&gt;
===&#039;&#039;&#039; A. Install ic-admin &#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ic-admin&amp;lt;/code&amp;gt; is the tool used to create and submit NNS proposals.&lt;br /&gt;
&lt;br /&gt;
==== MacOS ====&lt;br /&gt;
# Retrieve the file &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
curl &amp;quot;https://download.dfinity.systems/ic/7445081734e6d896d090295967d50710975c4f25/openssl-static-binaries/x86_64-darwin/ic-admin.gz&amp;quot; -o - | gunzip &amp;gt; ./ic-admin&lt;br /&gt;
chmod +x ./ic-admin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Verify the binary &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
diff &amp;lt;(shasum -a 256 ./ic-admin | cut -d&#039; &#039; -f1) &amp;lt;(echo 3f75026d2f28f171068e332a42c82a2795c93fbf5ab351baef30b30eb901cdba) &amp;amp;&amp;amp; echo &amp;quot;ic-admin checksum matches&amp;quot; || echo &amp;quot;***ERROR***: ic-admin checksum does not match&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
NOTE: The instructions below have been tested with the Ubuntu 20.04 release.&lt;br /&gt;
# Retrieve the file &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
curl &amp;quot;https://download.dfinity.systems/ic/7445081734e6d896d090295967d50710975c4f25/openssl-static-binaries/x86_64-linux/ic-admin.gz&amp;quot; -o - | gunzip &amp;gt; ./ic-admin&lt;br /&gt;
chmod +x ./ic-admin &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Verify the binary &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
diff &amp;lt;(shasum -a 256 ./ic-admin | cut -d&#039; &#039; -f1) &amp;lt;(echo e29bb9cc462e800b8b960ad49c412e5f5fdbb5ae2ae9fde0c13058422ba32802) &amp;amp;&amp;amp; echo &amp;quot;ic-admin checksum matches&amp;quot; || echo &amp;quot;***ERROR***: ic-admin checksum does not match&amp;quot; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039; B. Install dfx &#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;dfx&amp;lt;/code&amp;gt; allows generating a neuron hotkey, among other things &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
$ DFX_VERSION=0.9.3 sh -ci &amp;quot;$(curl -fsSL https://sdk.dfinity.org/install.sh)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Verify that the version is 0.9.3 &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
$ export PATH=$HOME/bin:$PATH&lt;br /&gt;
$ dfx --version dfx 0.9.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Create an identity for the Node Provider &#039;&#039;&#039;Hotkey&#039;&#039;&#039; &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
$ dfx identity new node-provider-hotkey&lt;br /&gt;
Creating identity: &amp;quot;node-provider-hotkey&amp;quot;.&lt;br /&gt;
Created identity: &amp;quot;node-provider-hotkey&amp;quot;.&lt;br /&gt;
$ dfx --identity node-provider-hotkey identity get-principal&lt;br /&gt;
wuyst-x5tpn-g5wri-mp3ps-vjtba-de3xs-w5xgb-crvek-tucbe-o5rqi-mae&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Note:&#039;&#039;&#039; The node provider hotkey is NOT the node provider principal. This is the hotkey that is used for the NNS proposal submissions only.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== II. Create and Manage Neuron via NNS Frontend Dapp and Internet Identity ==&lt;br /&gt;
&lt;br /&gt;
# Setup your hardware wallet: https://medium.com/dfinity/integrating-ledger-nano-with-the-nns-front-end-dapp-user-manual-9c5600925e16&lt;br /&gt;
# Send at least 11 ICPs to the hardware wallet address.&lt;br /&gt;
# Navigate to Neurons tab and create a Neuron by staking at least 10 ICP from your hardware wallet. Staking more ICP works as well, but 10 is the minimum.&lt;br /&gt;
# IMPORTANT! Confirm the transaction on your hardware wallet. &lt;br /&gt;
#: [[File:-docs-stake_neuron_1.png|1024px|stake neuron]]&lt;br /&gt;
#: &lt;br /&gt;
# After the Neuron has been created successfully, confirm to add NNS Dapp as hotkey in the dialogue and on your hardware wallet, and close the dialog after the action completes.&lt;br /&gt;
#: [[File:-docs-stake_neuron_2.png|1024px|neuron id]]&lt;br /&gt;
# Set the dissolve delay to at least 6 months, and confirm the choice in the dialogue and on your hardware wallet. After the action completes, you can close the &amp;quot;Follow Neurons&amp;quot;.&lt;br /&gt;
#:&lt;br /&gt;
#: [[File:dissolve_delay.png|480px|neuron id]]&lt;br /&gt;
# You will now see a Neuron listed with its ID. Copy the Neuron ID, since you will need it in the next steps to place the necessary proposals.&lt;br /&gt;
#: [[File:Neuron id.png|1024px]]&lt;br /&gt;
&lt;br /&gt;
== III. Add hotkeys ==&lt;br /&gt;
&lt;br /&gt;
# Select the Neuron you just created to open Neuron management view and press “Add hotkey” button.&lt;br /&gt;
#: [[File:Hotkey 1.png|800px]]&lt;br /&gt;
# A dialog will pop up where you can enter the principal you generated in step 2 (output from command &amp;lt;code&amp;gt;dfx --identity node-provider-hotkey identity get-principal&amp;lt;/code&amp;gt;). This will allow you to submit NNS proposals using &amp;lt;code&amp;gt;ic-admin&amp;lt;/code&amp;gt; and will not be used for anything else.&amp;lt;br&amp;gt;&lt;br /&gt;
#:Press the confirm button and confirm the transactions on your hardware wallet.&amp;lt;br&amp;gt;&lt;br /&gt;
#: [[File:Hotkey 2.png|800px]]&lt;br /&gt;
#:&lt;br /&gt;
# Get the Ledger Hardware Wallet Principal Id: Navigate back to ICP page and select your Ledger hardware wallet account. You will need to use this Ledger Hardware Wallet principal as the Node Provider principal in order to get the rewards directly into the secure hardware wallet.&lt;br /&gt;
[[File:Node provider principal 1.png|1024px]]&lt;br /&gt;
[[File:Node provider principal 2.png|800px]]&lt;br /&gt;
# Copy and save this Node Provider principal by clicking on the copy icon after the principal id. You&#039;ll need it in the next steps. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
NODE_PROVIDER_PRINCIPAL=fharn-5vyi2-4xb4a-64yyi-3jpmj-pga23-mxy25-d5uim-fqcro-eoefh-tae   # Ledger Hardware Wallet principal, from the NNS FrontEnd dapp https://nns.ic0.app/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IV. Configure your HSM ==&lt;br /&gt;
It&#039;s first necessary to install the necessary tools.&lt;br /&gt;
&lt;br /&gt;
=== MacOS ===&lt;br /&gt;
# Download this OpenSC binary: https://github.com/OpenSC/OpenSC/releases/download/0.22.0/OpenSC-0.22.0.dmg&lt;br /&gt;
# Double click the DMG image that you downloaded and then double click the OpenSC PKG file.&lt;br /&gt;
# If your system doesn&#039;t allow the installation software from an unidentified developer please follow these steps or contact your system administrator:&lt;br /&gt;
#* Choose the Apple menu &amp;amp;gt; System Preferences &amp;amp;gt; click Security and Privacy.&lt;br /&gt;
#* Click the lock Icon to unlock it, then enter an administrator name and password.&lt;br /&gt;
#* Ensure that you&#039;re on the tab named “General”.&lt;br /&gt;
#* You should see the OpenSC app and you should be able to enable its installation by choosing “Open anyway”.&lt;br /&gt;
# Click continue and install until the installation is complete.&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
NOTE: The instructions below have been tested with the Ubuntu 20.04 release.&lt;br /&gt;
&lt;br /&gt;
# Install pcscd and opensc&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository universe&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install pcscd opensc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== V. Setup the HSM ==&lt;br /&gt;
&lt;br /&gt;
# Initialize the HSM. &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sc-hsm-tool --initialize --so-pin 3537363231383830 --pin 358138&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Change the HSM so-pin. &lt;br /&gt;
#* &#039;&#039;&#039;WARNING:&#039;&#039;&#039; The new HSM so pin must have 16 hexadecimal digits. This is not very well known, and some HSM users have lost access to a Nitrokey HSM because they tried using regular characters and the command below accepted it. &lt;br /&gt;
#* &#039;&#039;&#039;Do NOT change the user pin. It must remain as the default for the onboarding scripts to work&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
pkcs11-tool --login --login-type so --so-pin 3537363231383830 --change-pin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Create a keypair on the HSM. Enter the default pin 358138 when prompted. &lt;br /&gt;
#* &#039;&#039;&#039;Note:&#039;&#039;&#039; Before initializing the HSM key please refer to the [https://docs.nitrokey.com/pro/openpgp.html Nitrokey HSM documentation] if you wish to create a backup. Creating a backup of the HSM device is NOT possible after the key has already been created. &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
pkcs11-tool -k --key-type EC:prime256v1 --login -d 01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== VI. Get the node operator principal from the HSM ==&lt;br /&gt;
# Configure dfx identity (skip this step if you already configured it for an other HSM).&lt;br /&gt;
#* &#039;&#039;&#039;Note:&#039;&#039;&#039; Depending on your installation, the path to the &amp;lt;code&amp;gt;--hsm-pkcs11-lib-path&amp;lt;/code&amp;gt; might be different on your platform. You can locate the correct path with the following command: &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
find / -name opensc-pkcs11.so 2&amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#* MacOS &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
dfx identity new node-operator-hsm --hsm-key-id 01 --hsm-pkcs11-lib-path /Library/OpenSC/lib/opensc-pkcs11.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#*  Linux &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
dfx identity new node-operator-hsm --hsm-key-id 01 --hsm-pkcs11-lib-path /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Get the principal. &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
$ NODE_OPERATOR_PRINCIPAL=$(DFX_HSM_PIN=358138 dfx --identity node-operator-hsm identity get-principal)&lt;br /&gt;
$ echo $NODE_OPERATOR_PRINCIPAL&lt;br /&gt;
&lt;br /&gt;
uqquy-76uhn-2mys5-xxxxx-xxxxx-xxxxx-xxxxx-xxxxx-xxxxx-xxxxx-xxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== VII. Register your NP principal to the network ==&lt;br /&gt;
&lt;br /&gt;
In the next codeblock: &lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;NEURON_ID&amp;lt;/code&amp;gt; value with your neuron ID from the NNS Frontend Dapp&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;NODE_PROVIDER_PRINCIPAL&amp;lt;/code&amp;gt; value with the Ledger Hardware Wallet principal that you got from the NNS Frontend DAPP.&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;NODE_PROVIDER_NAME&amp;lt;/code&amp;gt; value with the name of the entity that will provide the nodes.&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039;&#039;&#039; Please make sure that you also update the &amp;lt;code&amp;gt;--summary&amp;lt;/code&amp;gt; and include a link to the forum discussion, your company&#039;s web page, and/or to another place that can convince the voting community that you are making a legitimate request. This way you will avoid the community voting NO to your proposal and you losing the staked ICPs.&lt;br /&gt;
&lt;br /&gt;
# Create the Proposal &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
NODE_PROVIDER_NAME=&amp;quot;My Company&amp;quot;&lt;br /&gt;
NODE_PROVIDER_PRINCIPAL=fharn-5vyi2-4xb4a-64yyi-3jpmj-pga23-mxy25-d5uim-fqcro-eoefh-tae   # Ledger Hardware Wallet principal, from the NNS FE dapp https://ic0.app/&lt;br /&gt;
NEURON_ID=13419667327548602649  # Coming from the NNS FrontEnd dapp https://nns.ic0.app/&lt;br /&gt;
./ic-admin \&lt;br /&gt;
        --nns-url https://ic0.app \&lt;br /&gt;
        -s ~/.config/dfx/identity/node-provider-hotkey/identity.pem \&lt;br /&gt;
    propose-to-add-or-remove-node-provider add \&lt;br /&gt;
        --proposer $NEURON_ID \&lt;br /&gt;
        --proposal-title &amp;quot;Register a node provider &#039;${NODE_PROVIDER_NAME}&#039;&amp;quot; \&lt;br /&gt;
        --summary &amp;quot;Register a node provider &#039;${NODE_PROVIDER_NAME}&#039;, in line with the announcement and discussion at https://forum.dfinity.org/t/...&amp;quot; \&lt;br /&gt;
        --node-provider-pid &amp;quot;$NODE_PROVIDER_PRINCIPAL&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Find the proposal on https://dashboard.internetcomputer.org/governance and &#039;&#039;&#039;wait until it is executed before proceeding to next step.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== VIII. Ensure that your datacenter is registered in the network ==&lt;br /&gt;
# Search for your data center on https://dashboard.internetcomputer.org/centers. &lt;br /&gt;
#* If you found the datacenter that is hosting your nodes, remember its ID, and skip the following section. Otherwise, proceed with the registration of a new DC. [[File:dc_id.png|1024px]]&lt;br /&gt;
&lt;br /&gt;
=== Create a data center record for a new DC ===&lt;br /&gt;
In the next block of code:&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;--proposer&amp;lt;/code&amp;gt; argument value with your Neuron ID from the NNS Frontend Dapp. &lt;br /&gt;
* Replace the JSON fields from &amp;lt;code&amp;gt;–data-centers-to-add&amp;lt;/code&amp;gt; argument and their corresponding values in &amp;lt;code&amp;gt;--summary&amp;lt;/code&amp;gt; with: &amp;lt;code&amp;gt;&amp;amp;quot;id&amp;amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* The ID should be combination of two letters representing a city that your datacenter is in, and an incrementing number. Search data center IDs on https://dashboard.internetcomputer.org, and find a combination of two letters and a number that’s not yet registered. Examples:&lt;br /&gt;
** dl1 (Dallas, no IDs with “dl” prefix)&lt;br /&gt;
** zh10 (Zurich, numbers 0-9 are already registered) &lt;br /&gt;
[[File:dc_id.png|1024px]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;quot;region&amp;amp;quot;&amp;lt;/code&amp;gt; represents the local region of a datacenter and is formulated as a three-part string divided by commas. The three parts making the string are continent, country code, and region, in the given order. Examples:&lt;br /&gt;
** North America,US,Florida&lt;br /&gt;
** Europe,DE,Bavaria&lt;br /&gt;
** Asia,SG,Singapore&lt;br /&gt;
[[File:datacenter_region.png|1024px]] &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;quot;owner&amp;amp;quot;&amp;lt;/code&amp;gt; The entity that provides your datacenter facilities. &lt;br /&gt;
** Search https://dashboard.internetcomputer.org for existing data center providers. &lt;br /&gt;
** If there’s match, make sure you use the same exact some name for your datacenter. &lt;br /&gt;
** Otherwise, name the data center owner to your best knowledge. [[File:datacenter_owner.png|1024px]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;quot;gps&amp;amp;quot;&amp;lt;/code&amp;gt; GPS coordinates. &lt;br /&gt;
** Find your datacenter on https://www.google.com/maps/. &lt;br /&gt;
** Right click on location, and select the GPS coordinates (first item in the menu) in order to copy them.&lt;br /&gt;
[[File:maps.png|480px|alt=Getting GPS coordinates|Getting GPS coordinates]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Create the proposal: &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
NEURON_ID=13419667327548602649  # Coming from the NNS FE dapp https://nns.ic0.app/&lt;br /&gt;
$ ./ic-admin \&lt;br /&gt;
        --nns-url https://ic0.app \&lt;br /&gt;
        -s ~/.config/dfx/identity/node-provider-hotkey/identity.pem \&lt;br /&gt;
    propose-to-add-or-remove-data-centers \&lt;br /&gt;
        --summary &amp;quot;Register a Flexential datacenter as dl1 in North America,US,Texas&amp;quot; \&lt;br /&gt;
        --skip-confirmation \&lt;br /&gt;
        --proposer $NEURON_ID \&lt;br /&gt;
        --data-centers-to-add &#039;{&lt;br /&gt;
            &amp;quot;id&amp;quot;: &amp;quot;dl1&amp;quot;,&lt;br /&gt;
            &amp;quot;region&amp;quot;: &amp;quot;North America,US,Texas&amp;quot;,&lt;br /&gt;
            &amp;quot;owner&amp;quot;: &amp;quot;Flexential&amp;quot;,&lt;br /&gt;
            &amp;quot;gps&amp;quot;: [&lt;br /&gt;
                33.00803, -96.66614&lt;br /&gt;
            ]&lt;br /&gt;
        }&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Find the proposal on https://dashboard.internetcomputer.org/governance and wait until it&#039;s executed before proceeding to next step.&lt;br /&gt;
&lt;br /&gt;
== IX. Create a node operator record ==&lt;br /&gt;
In the next codeblock:&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;NEURON_ID&amp;lt;/code&amp;gt; variable value with your neuron ID obtained from the NNS frontend dapp.&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;NODE_PROVIDER_PRINCIPAL&amp;lt;/code&amp;gt; variable value with the Ledger Hardware Wallet principal obtained from the NNS frontend dapp.&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;DC_ID&amp;lt;/code&amp;gt; variable value with id of your datacenter.&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;NODE_ALLOWANCE&amp;lt;/code&amp;gt; variable value with number of nodes you are providing.&lt;br /&gt;
&lt;br /&gt;
# Create the proposal: &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
NEURON_ID=13419667327548602649  # Coming from the NNS FE dapp https://nns.ic0.app/&lt;br /&gt;
NODE_PROVIDER_PRINCIPAL=fharn-5vyi2-4xb4a-64yyi-3jpmj-pga23-mxy25-d5uim-fqcro-eoefh-tae   # Ledger Hardware Wallet principal, from the NNS FE dapp https://nns.ic0.app/&lt;br /&gt;
NODE_OPERATOR_PRINCIPAL=$(DFX_HSM_PIN=358138 dfx --identity node-operator-hsm identity get-principal)&lt;br /&gt;
NODE_PROVIDER_NAME=&amp;quot;My Company&amp;quot;&lt;br /&gt;
NODE_ALLOWANCE=28&lt;br /&gt;
DC_ID=dl1&lt;br /&gt;
&lt;br /&gt;
./ic-admin \&lt;br /&gt;
        --nns-url https://ic0.app \&lt;br /&gt;
        -s ~/.config/dfx/identity/node-provider-hotkey/identity.pem \&lt;br /&gt;
    propose-to-add-node-operator \&lt;br /&gt;
        $NODE_PROVIDER_PRINCIPAL \&lt;br /&gt;
        --summary &amp;quot;Node provider &#039;$NODE_PROVIDER_NAME&#039; is adding $NODE_ALLOWANCE nodes in the $DC_ID data center&amp;quot; \&lt;br /&gt;
        --proposer $NEURON_ID \&lt;br /&gt;
        --node-operator-principal-id $NODE_OPERATOR_PRINCIPAL \&lt;br /&gt;
        --node-allowance $NODE_ALLOWANCE \&lt;br /&gt;
        --dc-id $DC_ID&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Find the proposal on https://dashboard.internetcomputer.org/governance and wait until it&#039;s executed before proceeding to next step.&lt;br /&gt;
&lt;br /&gt;
== X. Onboard nodes ==&lt;br /&gt;
&lt;br /&gt;
# Follow the instructions to onboard new nodes.&lt;br /&gt;
#* [[IC OS Installation Runbook - PowerEdge R6525]]&lt;br /&gt;
#* [[IC OS Installation Runbook - Supermicro]]&lt;br /&gt;
# Verify that all the nodes were successfully onboarded by checking their status on the dashboard is set to either “Up” or “Unassigned”, or by checking the output from &amp;lt;code&amp;gt;ic-admin get-topology&amp;lt;/code&amp;gt; command.&lt;br /&gt;
#* The internal dashboard can be searched by your provider principal.&lt;br /&gt;
[[File:onboarded_nodes.png|1024px|onboarded nodes]]&lt;br /&gt;
&lt;br /&gt;
== XI. Set the reward configuration for your nodes ==&lt;br /&gt;
In the next codeblock:&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;NEURON_ID&amp;lt;/code&amp;gt; variable value with your neuron ID obtained from the NNS frontend dapp.&amp;lt;br&amp;gt;&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;&amp;lt;NODE_X_PRINCIPAL&amp;gt;&amp;lt;/code&amp;gt; placeholders with your node principals.&amp;lt;br&amp;gt;&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;&amp;lt;number-of-nodes&amp;gt;&amp;lt;/code&amp;gt; placeholder with the number of nodes you listed.&lt;br /&gt;
* Note: The current maximum number of nodes per node operator are 28.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
NEURON_ID=13419667327548602649  # Coming from the NNS FE dapp https://nns.ic0.app/&lt;br /&gt;
NODE_OPERATOR_PRINCIPAL=$(DFX_HSM_PIN=358138 dfx --identity node-operator-hsm identity get-principal)&lt;br /&gt;
&lt;br /&gt;
./ic-admin \&lt;br /&gt;
        --nns-url https://ic0.app \&lt;br /&gt;
        -s ~/.config/dfx/identity/node-provider-hotkey/identity.pem \&lt;br /&gt;
    propose-to-update-node-operator-config \&lt;br /&gt;
        --proposer $NEURON_ID \&lt;br /&gt;
        --summary &amp;quot;Set rewards for the following nodes:&lt;br /&gt;
&lt;br /&gt;
        * &amp;lt;NODE_1_PRINCIPAL&amp;gt;&lt;br /&gt;
        * &amp;lt;NODE_2_PRINCIPAL&amp;gt;&lt;br /&gt;
        * ...&lt;br /&gt;
        &amp;quot; \&lt;br /&gt;
        --node-operator-id $NODE_OPERATOR_PRINCIPAL \&lt;br /&gt;
        --rewardable-nodes &#039;{&amp;quot;type0&amp;quot;: &amp;lt;number-of-nodes&amp;gt;}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* &#039;&#039;&#039;The Internet Computer project website (hosted on the IC): [https://internetcomputer.org/ internetcomputer.org]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Node_Provider_Onboarding&amp;diff=4338</id>
		<title>Node Provider Onboarding</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Node_Provider_Onboarding&amp;diff=4338"/>
		<updated>2023-02-22T17:42:15Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Learn how to participate in the Internet Computer network as a Node Provider and receive the rewards for supporting the network.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.internetcomputer.org/wiki/Node_provider_hardware Node Hardware]&lt;br /&gt;
* Rack space with a 10Gb connectivity, RJ45 terminated on the nodes&lt;br /&gt;
* Public /28 IPv4 range and /64 IPv6 range&lt;br /&gt;
* [https://www.ledger.com/ Hardware wallet]&lt;br /&gt;
* [https://shop.nitrokey.com/shop/product/nkhs2-nitrokey-hsm-2-7/ NitroKey HSM]&lt;br /&gt;
* 11 ICP (10 of which are to be staked for the NNS proposal deposit)&lt;br /&gt;
* Basic understanding of neurons, staking, and governance proposals. For instance, understanding what it means to stake a neuron for 8 years.&lt;br /&gt;
* The technical knowledge to understand some minor steps that are not explicitly mentioned in these instructions. For instance, when to insert an HSM.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Please allocate at least 0.5 day for going through the first part, i.e., the registration of a new NP. It may even take a couple of days, depending on how quickly the community votes for the proposals. There is a also fair amount of complexity and the technical knowledge that needs to be absorbed in order to complete the steps. But this only needs to be done once.&amp;lt;br&amp;gt;&lt;br /&gt;
The next step, going to the DC and bringing up and onboarding the machines, is much quicker. Estimate to spend 10-15 minutes per machine. This time should go down to ~5 minutes as you gain experience. Also, multiple machines can be brought up in parallel.&lt;br /&gt;
&lt;br /&gt;
== I. Install the required tools ==&lt;br /&gt;
===&#039;&#039;&#039; A. Install ic-admin &#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ic-admin&amp;lt;/code&amp;gt; is the tool used to create and submit NNS proposals.&lt;br /&gt;
&lt;br /&gt;
==== MacOS ====&lt;br /&gt;
# Retrieve the file &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
curl &amp;quot;https://download.dfinity.systems/ic/7445081734e6d896d090295967d50710975c4f25/openssl-static-binaries/x86_64-darwin/ic-admin.gz&amp;quot; -o - | gunzip &amp;gt; ./ic-admin&lt;br /&gt;
chmod +x ./ic-admin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Verify the binary &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
diff &amp;lt;(shasum -a 256 ./ic-admin | cut -d&#039; &#039; -f1) &amp;lt;(echo 3f75026d2f28f171068e332a42c82a2795c93fbf5ab351baef30b30eb901cdba) &amp;amp;&amp;amp; echo &amp;quot;ic-admin checksum matches&amp;quot; || echo &amp;quot;***ERROR***: ic-admin checksum does not match&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
NOTE: The instructions below have been tested with the Ubuntu 20.04 release.&lt;br /&gt;
# Retrieve the file &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
curl &amp;quot;https://download.dfinity.systems/ic/7445081734e6d896d090295967d50710975c4f25/openssl-static-binaries/x86_64-linux/ic-admin.gz&amp;quot; -o - | gunzip &amp;gt; ./ic-admin&lt;br /&gt;
chmod +x ./ic-admin &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Verify the binary &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
diff &amp;lt;(shasum -a 256 ./ic-admin | cut -d&#039; &#039; -f1) &amp;lt;(echo e29bb9cc462e800b8b960ad49c412e5f5fdbb5ae2ae9fde0c13058422ba32802) &amp;amp;&amp;amp; echo &amp;quot;ic-admin checksum matches&amp;quot; || echo &amp;quot;***ERROR***: ic-admin checksum does not match&amp;quot; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039; B. Install dfx &#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;dfx&amp;lt;/code&amp;gt; allows generating a neuron hotkey, among other things &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
$ DFX_VERSION=0.9.3 sh -ci &amp;quot;$(curl -fsSL https://sdk.dfinity.org/install.sh)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Verify that the version is 0.9.3 &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
$ export PATH=$HOME/bin:$PATH&lt;br /&gt;
$ dfx --version dfx 0.9.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Create an identity for the Node Provider &#039;&#039;&#039;Hotkey&#039;&#039;&#039; &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
$ dfx identity new node-provider-hotkey&lt;br /&gt;
Creating identity: &amp;quot;node-provider-hotkey&amp;quot;.&lt;br /&gt;
Created identity: &amp;quot;node-provider-hotkey&amp;quot;.&lt;br /&gt;
$ dfx --identity node-provider-hotkey identity get-principal&lt;br /&gt;
wuyst-x5tpn-g5wri-mp3ps-vjtba-de3xs-w5xgb-crvek-tucbe-o5rqi-mae&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Note:&#039;&#039;&#039; The node provider hotkey is NOT the node provider principal. This is the hotkey that is used for the NNS proposal submissions only.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== II. Create and Manage Neuron via NNS Frontend Dapp and Internet Identity ==&lt;br /&gt;
&lt;br /&gt;
# Setup your hardware wallet: https://medium.com/dfinity/integrating-ledger-nano-with-the-nns-front-end-dapp-user-manual-9c5600925e16&lt;br /&gt;
# Send at least 11 ICPs to the hardware wallet address.&lt;br /&gt;
# Navigate to Neurons tab and create a Neuron by staking at least 10 ICP from your hardware wallet. Staking more ICP works as well, but 10 is the minimum.&lt;br /&gt;
# IMPORTANT! Confirm the transaction on your hardware wallet. &lt;br /&gt;
#: [[File:-docs-stake_neuron_1.png|1024px|stake neuron]]&lt;br /&gt;
#: &lt;br /&gt;
# After the Neuron has been created successfully, confirm to add NNS Dapp as hotkey in the dialogue and on your hardware wallet, and close the dialog after the action completes.&lt;br /&gt;
#: [[File:-docs-stake_neuron_2.png|1024px|neuron id]]&lt;br /&gt;
# Set the dissolve delay to at least 6 months, and confirm the choice in the dialogue and on your hardware wallet. After the action completes, you can close the &amp;quot;Follow Neurons&amp;quot;.&lt;br /&gt;
#:&lt;br /&gt;
#: [[File:dissolve_delay.png|480px|neuron id]]&lt;br /&gt;
# You will now see a Neuron listed with its ID. Copy the Neuron ID, since you will need it in the next steps to place the necessary proposals.&lt;br /&gt;
#: [[File:Neuron id.png|1024px]]&lt;br /&gt;
&lt;br /&gt;
== III. Add hotkeys ==&lt;br /&gt;
&lt;br /&gt;
# Select the Neuron you just created to open Neuron management view and press “Add hotkey” button.&lt;br /&gt;
#: [[File:Hotkey 1.png|800px]]&lt;br /&gt;
# A dialog will pop up where you can enter the principal you generated in step 2 (output from command &amp;lt;code&amp;gt;dfx --identity node-provider-hotkey identity get-principal&amp;lt;/code&amp;gt;). This will allow you to submit NNS proposals using &amp;lt;code&amp;gt;ic-admin&amp;lt;/code&amp;gt; and will not be used for anything else.&amp;lt;br&amp;gt;&lt;br /&gt;
#:Press the confirm button and confirm the transactions on your hardware wallet.&amp;lt;br&amp;gt;&lt;br /&gt;
#: [[File:Hotkey 2.png|800px]]&lt;br /&gt;
#:&lt;br /&gt;
# Get the Ledger Hardware Wallet Principal Id: Navigate back to ICP page and select your Ledger hardware wallet account. You will need to use this Ledger Hardware Wallet principal as the Node Provider principal in order to get the rewards directly into the secure hardware wallet.&lt;br /&gt;
[[File:Node provider principal 1.png|1024px]]&lt;br /&gt;
[[File:Node provider principal 2.png|800px]]&lt;br /&gt;
# Copy and save this Node Provider principal by clicking on the copy icon after the principal id. You&#039;ll need it in the next steps. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
NODE_PROVIDER_PRINCIPAL=fharn-5vyi2-4xb4a-64yyi-3jpmj-pga23-mxy25-d5uim-fqcro-eoefh-tae   # Ledger Hardware Wallet principal, from the NNS FrontEnd dapp https://nns.ic0.app/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IV. Configure your HSM ==&lt;br /&gt;
It&#039;s first necessary to install the necessary tools.&lt;br /&gt;
&lt;br /&gt;
=== MacOS ===&lt;br /&gt;
# Download this OpenSC binary: https://github.com/OpenSC/OpenSC/releases/download/0.22.0/OpenSC-0.22.0.dmg&lt;br /&gt;
# Double click the DMG image that you downloaded and then double click the OpenSC PKG file.&lt;br /&gt;
# If your system doesn&#039;t allow the installation software from an unidentified developer please follow these steps or contact your system administrator:&lt;br /&gt;
#* Choose the Apple menu &amp;amp;gt; System Preferences &amp;amp;gt; click Security and Privacy.&lt;br /&gt;
#* Click the lock Icon to unlock it, then enter an administrator name and password.&lt;br /&gt;
#* Ensure that you&#039;re on the tab named “General”.&lt;br /&gt;
#* You should see the OpenSC app and you should be able to enable its installation by choosing “Open anyway”.&lt;br /&gt;
# Click continue and install until the installation is complete.&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
NOTE: The instructions below have been tested with the Ubuntu 20.04 release.&lt;br /&gt;
&lt;br /&gt;
# Install pcscd and opensc&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository universe&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install pcscd opensc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== V. Setup the HSM ==&lt;br /&gt;
&lt;br /&gt;
# Initialize the HSM. &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sc-hsm-tool --initialize --so-pin 3537363231383830 --pin 358138&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Change the HSM so-pin. &lt;br /&gt;
#* &#039;&#039;&#039;WARNING:&#039;&#039;&#039; The new HSM so pin must have 16 hexadecimal digits. This is not very well known, and some HSM users have lost access to a Nitrokey HSM because they tried using regular characters and the command below accepted it. &lt;br /&gt;
#* &#039;&#039;&#039;Do NOT change the user pin. It must remain as the default for the onboarding scripts to work&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
pkcs11-tool --login --login-type so --so-pin 3537363231383830 --change-pin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Create a keypair on the HSM. Enter the default pin 358138 when prompted. &lt;br /&gt;
#* &#039;&#039;&#039;Note:&#039;&#039;&#039; Before initializing the HSM key please refer to the [https://docs.nitrokey.com/pro/openpgp.html Nitrokey HSM documentation] if you wish to create a backup. Creating a backup of the HSM device is NOT possible after the key has already been created. &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
pkcs11-tool -k --key-type EC:prime256v1 --login -d 01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== VI. Get the node operator principal from the HSM ==&lt;br /&gt;
# Configure dfx identity (skip this step if you already configured it for an other HSM).&lt;br /&gt;
#* &#039;&#039;&#039;Note:&#039;&#039;&#039; Depending on your installation, the path to the &amp;lt;code&amp;gt;--hsm-pkcs11-lib-path&amp;lt;/code&amp;gt; might be different on your platform. You can locate the correct path with the following command: &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
find / -name opensc-pkcs11.so 2&amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#* MacOS &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
dfx identity new node-operator-hsm --hsm-key-id 01 --hsm-pkcs11-lib-path /Library/OpenSC/lib/opensc-pkcs11.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#*  Linux &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
dfx identity new node-operator-hsm --hsm-key-id 01 --hsm-pkcs11-lib-path /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Get the principal. &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
$ NODE_OPERATOR_PRINCIPAL=$(DFX_HSM_PIN=358138 dfx --identity node-operator-hsm identity get-principal)&lt;br /&gt;
$ echo $NODE_OPERATOR_PRINCIPAL&lt;br /&gt;
&lt;br /&gt;
uqquy-76uhn-2mys5-xxxxx-xxxxx-xxxxx-xxxxx-xxxxx-xxxxx-xxxxx-xxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== VII. Register your NP principal to the network ==&lt;br /&gt;
&lt;br /&gt;
In the next codeblock: &lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;NEURON_ID&amp;lt;/code&amp;gt; value with your neuron ID from the NNS Frontend Dapp&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;NODE_PROVIDER_PRINCIPAL&amp;lt;/code&amp;gt; value with the Ledger Hardware Wallet principal that you got from the NNS Frontend DAPP.&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;NODE_PROVIDER_NAME&amp;lt;/code&amp;gt; value with the name of the entity that will provide the nodes.&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039;&#039;&#039; Please make sure that you also update the &amp;lt;code&amp;gt;--summary&amp;lt;/code&amp;gt; and include a link to the forum discussion, your company&#039;s web page, and/or to another place that can convince the voting community that you are making a legitimate request. This way you will avoid the community voting NO to your proposal and you losing the staked ICPs.&lt;br /&gt;
&lt;br /&gt;
# Create the Proposal &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
NODE_PROVIDER_NAME=&amp;quot;My Company&amp;quot;&lt;br /&gt;
NODE_PROVIDER_PRINCIPAL=fharn-5vyi2-4xb4a-64yyi-3jpmj-pga23-mxy25-d5uim-fqcro-eoefh-tae   # Ledger Hardware Wallet principal, from the NNS FE dapp https://ic0.app/&lt;br /&gt;
NEURON_ID=13419667327548602649  # Coming from the NNS FrontEnd dapp https://nns.ic0.app/&lt;br /&gt;
./ic-admin \&lt;br /&gt;
        --nns-url https://ic0.app \&lt;br /&gt;
        -s ~/.config/dfx/identity/node-provider-hotkey/identity.pem \&lt;br /&gt;
    propose-to-add-or-remove-node-provider add \&lt;br /&gt;
        --proposer $NEURON_ID \&lt;br /&gt;
        --proposal-title &amp;quot;Register a node provider &#039;${NODE_PROVIDER_NAME}&#039;&amp;quot; \&lt;br /&gt;
        --summary &amp;quot;Register a node provider &#039;${NODE_PROVIDER_NAME}&#039;, in line with the announcement and discussion at https://forum.dfinity.org/t/...&amp;quot; \&lt;br /&gt;
        --node-provider-pid &amp;quot;$NODE_PROVIDER_PRINCIPAL&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Find the proposal on https://dashboard.internetcomputer.org/governance and &#039;&#039;&#039;wait until it is executed before proceeding to next step.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== VIII. Ensure that your datacenter is registered in the network ==&lt;br /&gt;
# Search for your data center on https://dashboard.internetcomputer.org/centers. &lt;br /&gt;
#* If you found the datacenter that is hosting your nodes, remember its ID, and skip the following section. Otherwise, proceed with the registration of a new DC. [[File:dc_id.png|1024px]]&lt;br /&gt;
&lt;br /&gt;
=== Create a data center record for a new DC ===&lt;br /&gt;
In the next block of code:&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;--proposer&amp;lt;/code&amp;gt; argument value with your Neuron ID from the NNS Frontend Dapp. &lt;br /&gt;
* Replace the JSON fields from &amp;lt;code&amp;gt;–data-centers-to-add&amp;lt;/code&amp;gt; argument and their corresponding values in &amp;lt;code&amp;gt;--summary&amp;lt;/code&amp;gt; with: &amp;lt;code&amp;gt;&amp;amp;quot;id&amp;amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* The ID should be combination of two letters representing a city that your datacenter is in, and an incrementing number. Search data center IDs on https://dashboard.internetcomputer.org, and find a combination of two letters and a number that’s not yet registered. Examples:&lt;br /&gt;
** dl1 (Dallas, no IDs with “dl” prefix)&lt;br /&gt;
** zh10 (Zurich, numbers 0-9 are already registered) &lt;br /&gt;
[[File:dc_id.png|1024px]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;quot;region&amp;amp;quot;&amp;lt;/code&amp;gt; represents the local region of a datacenter and is formulated as a three-part string divided by commas. The three parts making the string are continent, country code, and region, in the given order. Examples:&lt;br /&gt;
** North America,US,Florida&lt;br /&gt;
** Europe,DE,Bavaria&lt;br /&gt;
** Asia,SG,Singapore&lt;br /&gt;
[[File:datacenter_region.png|1024px]] &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;quot;owner&amp;amp;quot;&amp;lt;/code&amp;gt; The entity that provides your datacenter facilities. &lt;br /&gt;
** Search https://dashboard.internetcomputer.org for existing data center providers. &lt;br /&gt;
** If there’s match, make sure you use the same exact some name for your datacenter. &lt;br /&gt;
** Otherwise, name the data center owner to your best knowledge. [[File:datacenter_owner.png|1024px]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;quot;gps&amp;amp;quot;&amp;lt;/code&amp;gt; GPS coordinates. &lt;br /&gt;
** Find your datacenter on https://www.google.com/maps/. &lt;br /&gt;
** Right click on location, and select the GPS coordinates (first item in the menu) in order to copy them.&lt;br /&gt;
[[File:maps.png|480px|alt=Getting GPS coordinates|Getting GPS coordinates]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Create the proposal: &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
NEURON_ID=13419667327548602649  # Coming from the NNS FE dapp https://nns.ic0.app/&lt;br /&gt;
$ ./ic-admin \&lt;br /&gt;
        --nns-url https://ic0.app \&lt;br /&gt;
        -s ~/.config/dfx/identity/node-provider-hotkey/identity.pem \&lt;br /&gt;
    propose-to-add-or-remove-data-centers \&lt;br /&gt;
        --summary &amp;quot;Register a Flexential datacenter as dl1 in North America,US,Texas&amp;quot; \&lt;br /&gt;
        --skip-confirmation \&lt;br /&gt;
        --proposer $NEURON_ID \&lt;br /&gt;
        --data-centers-to-add &#039;{&lt;br /&gt;
            &amp;quot;id&amp;quot;: &amp;quot;dl1&amp;quot;,&lt;br /&gt;
            &amp;quot;region&amp;quot;: &amp;quot;North America,US,Texas&amp;quot;,&lt;br /&gt;
            &amp;quot;owner&amp;quot;: &amp;quot;Flexential&amp;quot;,&lt;br /&gt;
            &amp;quot;gps&amp;quot;: [&lt;br /&gt;
                33.00803, -96.66614&lt;br /&gt;
            ]&lt;br /&gt;
        }&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Find the proposal on https://dashboard.internetcomputer.org/governance and wait until it&#039;s executed before proceeding to next step.&lt;br /&gt;
&lt;br /&gt;
== IX. Create a node operator record ==&lt;br /&gt;
In the next codeblock:&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;NEURON_ID&amp;lt;/code&amp;gt; variable value with your neuron ID obtained from the NNS frontend dapp.&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;NODE_PROVIDER_PRINCIPAL&amp;lt;/code&amp;gt; variable value with the Ledger Hardware Wallet principal obtained from the NNS frontend dapp.&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;DC_ID&amp;lt;/code&amp;gt; variable value with id of your datacenter.&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;NODE_ALLOWANCE&amp;lt;/code&amp;gt; variable value with number of nodes you are providing.&lt;br /&gt;
&lt;br /&gt;
# Create the proposal: &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
NEURON_ID=13419667327548602649  # Coming from the NNS FE dapp https://nns.ic0.app/&lt;br /&gt;
NODE_PROVIDER_PRINCIPAL=fharn-5vyi2-4xb4a-64yyi-3jpmj-pga23-mxy25-d5uim-fqcro-eoefh-tae   # Ledger Hardware Wallet principal, from the NNS FE dapp https://nns.ic0.app/&lt;br /&gt;
NODE_OPERATOR_PRINCIPAL=$(DFX_HSM_PIN=358138 dfx --identity node-operator-hsm identity get-principal)&lt;br /&gt;
NODE_PROVIDER_NAME=&amp;quot;My Company&amp;quot;&lt;br /&gt;
NODE_ALLOWANCE=28&lt;br /&gt;
DC_ID=dl1&lt;br /&gt;
&lt;br /&gt;
./ic-admin \&lt;br /&gt;
        --nns-url https://ic0.app \&lt;br /&gt;
        -s ~/.config/dfx/identity/node-provider-hotkey/identity.pem \&lt;br /&gt;
    propose-to-add-node-operator \&lt;br /&gt;
        $NODE_PROVIDER_PRINCIPAL \&lt;br /&gt;
        --summary &amp;quot;Node provider &#039;$NODE_PROVIDER_NAME&#039; is adding $NODE_ALLOWANCE nodes in the $DC_ID data center&amp;quot; \&lt;br /&gt;
        --proposer $NEURON_ID \&lt;br /&gt;
        --node-operator-principal-id $NODE_OPERATOR_PRINCIPAL \&lt;br /&gt;
        --node-allowance $NODE_ALLOWANCE \&lt;br /&gt;
        --dc-id $DC_ID&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Find the proposal on https://dashboard.internetcomputer.org/governance and wait until it&#039;s executed before proceeding to next step.&lt;br /&gt;
&lt;br /&gt;
== X. Onboard nodes ==&lt;br /&gt;
&lt;br /&gt;
# Follow the instructions to onboard new nodes.&lt;br /&gt;
#* [[IC OS Installation Runbook - PowerEdge R6525]]&lt;br /&gt;
#* [[IC OS Installation Runbook - Supermicro]]&lt;br /&gt;
# Verify that all the nodes were successfully onboarded by checking their status on the dashboard is set to either “Up” or “Unassigned”, or by checking the output from &amp;lt;code&amp;gt;ic-admin get-topology&amp;lt;/code&amp;gt; command.&lt;br /&gt;
#* The internal dashboard can be searched by your provider principal.&lt;br /&gt;
[[File:onboarded_nodes.png|1024px|onboarded nodes]]&lt;br /&gt;
&lt;br /&gt;
== XI. Set the reward configuration for your nodes ==&lt;br /&gt;
In the next codeblock:&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;NEURON_ID&amp;lt;/code&amp;gt; variable value with your neuron ID obtained from the NNS frontend dapp.&amp;lt;br&amp;gt;&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;&amp;lt;NODE_X_PRINCIPAL&amp;gt;&amp;lt;/code&amp;gt; placeholders with your node principals.&amp;lt;br&amp;gt;&lt;br /&gt;
* Replace the &amp;lt;code&amp;gt;&amp;lt;number-of-nodes&amp;gt;&amp;lt;/code&amp;gt; placeholder with the number of nodes you listed.&lt;br /&gt;
* Note: The current maximum number of nodes per node operator are 28.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
NEURON_ID=13419667327548602649  # Coming from the NNS FE dapp https://nns.ic0.app/&lt;br /&gt;
NODE_OPERATOR_PRINCIPAL=$(DFX_HSM_PIN=358138 dfx --identity node-operator-hsm identity get-principal)&lt;br /&gt;
&lt;br /&gt;
./ic-admin \&lt;br /&gt;
        --nns-url https://ic0.app \&lt;br /&gt;
        -s ~/.config/dfx/identity/node-provider-hotkey/identity.pem \&lt;br /&gt;
    propose-to-update-node-operator-config \&lt;br /&gt;
        --proposer $NEURON_ID \&lt;br /&gt;
        --summary &amp;quot;Set rewards for the following nodes:&lt;br /&gt;
&lt;br /&gt;
        * &amp;lt;NODE_1_PRINCIPAL&amp;gt;&lt;br /&gt;
        * &amp;lt;NODE_2_PRINCIPAL&amp;gt;&lt;br /&gt;
        * ...&lt;br /&gt;
        &amp;quot; \&lt;br /&gt;
        --node-operator-id $NODE_OPERATOR_PRINCIPAL \&lt;br /&gt;
        --rewardable-nodes &#039;{&amp;quot;type0&amp;quot;: &amp;lt;number-of-nodes&amp;gt;}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* &#039;&#039;&#039;The Internet Computer project website (hosted on the IC): [https://internetcomputer.org/ internetcomputer.org]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=HTTPS_outcalls&amp;diff=3168</id>
		<title>HTTPS outcalls</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=HTTPS_outcalls&amp;diff=3168"/>
		<updated>2022-10-04T12:07:59Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;On the Internet Computer blockchain, canister smart contracts can make HTTP outcalls to specified URLs, either to directly obtain off-chain data, or to interact with off-chain systems, such as Web 2.0 services or enterprise IT infrastructure. The results of these calls are processed and agreed by consensus, preventing nondeterminism. This avoids the need for trusted oracles and bridges.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Often, smart contract software needs to obtain real-world data, which originates from outside the secure and unstoppable on-chain universe that the blockchain that hosts them provides. Smart contracts may also need to interact with off-chain systems that are outside this universe. Because of the way blockchains work, historically this has presented major hurdles to blockchain developers.&lt;br /&gt;
&lt;br /&gt;
For example, to obtain off-chain data, smart contracts have traditionally interacted with centrally-operated oracle services, such as [https://chain.link/ Chainlink]. These services are provided by trusted intermediaries, such as corporations, which perform the role of copying off-chain data onto the blockchain where it can be accessed by smart contracts. The problem is that these services must a) be trusted to be honest, and not get hacked, or otherwise become faulty, and b) be paid. Moreover, they cannot help when smart contracts need to &#039;&#039;interact&#039;&#039; with off-chain services, for example by calling into web-based APIs. To solve for these needs, the Internet Computer provides an &amp;quot;HTTPS outcall&amp;quot; feature.&lt;br /&gt;
&lt;br /&gt;
HTTPS outcalls allow canister smart contracts hosted on the Internet Computer to request a URL, for example to download a time series recording the recent prices of an asset published by a centralized crypto exchange such as [https://pro.coinbase.com/ Coinbase Pro]. When this occurs, every node in the subnet blockchain hosting the smart contract requests the URL separately. Each node then locally passes the result they obtained to a special function implemented by the requesting canister smart contract using a [[query call]], which pre-processes the result with the aim of making it consistent with the results the other nodes have obtained and pre-processed (in our Coinbase example, since each node would request the time series at a slightly different moment, the results could be different).&lt;br /&gt;
&lt;br /&gt;
If the pre-processed results obtained by query calls to the canister smart contract are sufficiently consistent across all the nodes, the result is agreed by consensus, and provided back to the smart contract that requested the URL so that it can continue trustlessly processing the original smart contract call (TX).&lt;br /&gt;
&lt;br /&gt;
In order to trigger an action in an off-chain system, a smart contract may include a cryptographic [[chain key]] signature in its request for a URL. This allows the target service to validate that the request it has received was generated by a genuine smart contract execution that was agreed by consensus. In such architectures, when an off-chain service receives a valid request for a URL, it must take care to only execute it once, since many nodes will make the same request, and for each subsequent request after the first, it should return exactly the same result.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
The canister HTTPS outcalls feature has been implemented as an extension of the IC protocol stack, particularly its consensus layer. The possibility of the IC protocol stack allowing for such extensions shows the powerful architecture of the IC and its consensus protocol. In this section we give details on the architecture of the feature: We show which components of the stack needed to be extended and which new components were required and explain a protocol flow through the stack.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS Outcall Request Lifecycle ===&lt;br /&gt;
[[File:HTTPS outcall request lifecycle.png|thumb|700px|HTTPS outcall request lifecycle]]&lt;br /&gt;
The figure above shows the process an HTTPS outcall request goes through, along with the new components that were added to make this feature work. The numbered arrows indicate the steps as follows:&lt;br /&gt;
# A canister makes an HTTPS outcall request to the management canister in the execution layer. The request is stored in the replicated state of the corresponding subnet.&lt;br /&gt;
# A new component in the Consensus layer, called the “HTTP pool manager”, is reading state changes and keeps track of outstanding HTTPS requests.&lt;br /&gt;
#Whenever the HTTP pool manager sees a new request, it forwards it to the networking layer, to a new component that is called “HTTP adapter shim”. This is a relatively lightweight component that is responsible for communicating with the “HTTP adapter”, which is a separate process running alongside the replica process, but is isolated for security reasons.&lt;br /&gt;
# The HTTP adapter shim forwards the request to the HTTP adapter using RPC.&lt;br /&gt;
# The HTTP adapter on each node issues the requested HTTPS request to the remote server.&lt;br /&gt;
# A response is returned from the server to each HTTP adapter.&lt;br /&gt;
# Each HTTP adapter returns the response to the HTTP adapter shim component.&lt;br /&gt;
# The HTTP adapter shim invokes an optional transform function on the calling canister. The purpose of this function is explained in detail below, but in short, it should help in making all responses exactly the same so that the subnet can reach consensus on them.&lt;br /&gt;
# The HTTP adapter shim forwards the transformed response to the HTTP pool manager&lt;br /&gt;
# The Consensus layer then distributes shares of the response to all peers, so that the block maker can see that enough peers received exactly the same response as it has received.&lt;br /&gt;
# The block maker then includes the response in a block.&lt;br /&gt;
# The response is made available to the execution layer.&lt;br /&gt;
# A callback is invoked to return the response to the canister asynchronously.&lt;br /&gt;
&lt;br /&gt;
== How to reach consensus on result? ==&lt;br /&gt;
&lt;br /&gt;
As explained above, every node makes a given HTTP request to the target server and receives a response. There are multiple reasons why the responses are not necessarily the same on all replicas for the same API query:&lt;br /&gt;
* Typical implementations of web servers add variable elements to otherwise equal content, e.g., timestamps or unique identifiers. In this case, the actual content, e.g., requested asset prices, can be the same in each response, while those variable fields differ.&lt;br /&gt;
* Not all APIs are implemented such that they are nicely queryable to return the same response data in each response. E.g., financial data APIs may return data elements in different order in different responses or may have different starting timestamps of responses.&lt;br /&gt;
In order for the replicas to agree on a single response value as part of consensus, the different responses need to be equal. To achieve this property, each replica invokes a so-called transformation function on its received response and continues processing with the transformed response. The transformed response is used for the attempt to achieve consensus as explained earlier by first broadcasting an artifact corresponding to the transformed response through which a block making replica can observe whether a given response has a sufficient number of equal transformed responses.&lt;br /&gt;
&lt;br /&gt;
We next look at some examples on how consensus can be reached for HTTP responses. We illustrate the different cases below with an example of a simple weather API.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== All responses are equal ===&lt;br /&gt;
&lt;br /&gt;
The simplest case is that of all responses received by replicas being equal. In this case, no transformation function is needed as the responses themselves are already equal and consensus can be achieved on them.&lt;br /&gt;
&lt;br /&gt;
[[File:all_responses_equal.png|center|700px|Identical responses – easy to reach consensus]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Some responses are not equal ===&lt;br /&gt;
&lt;br /&gt;
Assuming the case that less than one third of the responses can be arbitrarily different to the others and the others are all equal. The different responses can be a result of the server responding differently or nodes being compromised and falsifying the received (correct) response. This case is handled exactly as above by not requiring a transformation function and the IC consensus protocol taking care of the subset of deviating responses and going with the majority of replicas.&lt;br /&gt;
&lt;br /&gt;
[[File:some_responses_not_equal.png|center|700px|At least two thirds of responses are equal – easy to reach consensus]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Variable parts in all responses ===&lt;br /&gt;
&lt;br /&gt;
The most general case is that of each response returned by the HTTP server being different due to the reasons outlined further above, e.g., variable parts being contained therein. This case requires a transformation function to &amp;quot;normalize&amp;quot; the responses to be pairwise equal (for at least two thirds of the replicas). The transformed responses then can be consented on by the protocol as in the cases above. Clearly, less than one third of the responses can still be arbitrarily different as in the case above and  we can still reach consensus.&lt;br /&gt;
&lt;br /&gt;
[[File:variable_parts_in_all_responses.png|center|700px|Identical responses after transformation – easy to reach consensus]]&lt;br /&gt;
&lt;br /&gt;
As can be seen, all the above cases can be handled easily with an extension of the IC&#039;s consensus protocol. The important part is that the canister developer needs to provide the transformation function if required, i.e., in the typical case of using APIs. We refer the reader to the feature documentation for a recipe to write a transformation function and further information to help developers getting started with the feature.&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Network_Nervous_System&amp;diff=3028</id>
		<title>Network Nervous System</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Network_Nervous_System&amp;diff=3028"/>
		<updated>2022-09-05T20:19:20Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;The NNS is the decentralized autonomous organization (DAO) that governs the Internet Computer (IC). It is a fully on-chain, decentralized system and is, for instance, responsible for making protocol level upgrades to continuously improve the Internet Computer. It does this by an implementation of liquid democracy in which ICP neuron holders vote on proposals that shape the development of the Internet Computer. Once such a proposal is accepted, it is autonomously executed.&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;While other blockchains take weeks or months to upgrade (sometimes called hard fork) and typically require substantial manual work and coordination to do so, the IC upgrades itself on a weekly basis (https://dashboard.internetcomputer.org/releases). Its ability to upgrade and iterate is a comparative &amp;quot;superpower.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The NNS is realized by a set of &#039;&#039;[[canisters|canisters]]&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
==NNS canisters==&lt;br /&gt;
# &#039;&#039;&#039;Ledger canister:&#039;&#039;&#039; The ledger canister stores the ICP utility &#039;&#039;token balance&#039;&#039; of each principal and the history of ICP &#039;&#039;transactions&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Governance canister:&#039;&#039;&#039; The governance canister receives and stores &#039;&#039;Proposals&#039;&#039;, which are suggestions for how the Internet Computer should be changed. These proposals can then be voted on. The governance canister also tracks &#039;&#039;Neurons&#039;&#039;, which determine who is allowed to participate in governance.&lt;br /&gt;
# &#039;&#039;&#039;Registry canister:&#039;&#039;&#039; The registry canister stores the configuration of the whole Internet Computer, e.g., which nodes belong to a certain subnet and the software each node should run.&lt;br /&gt;
# &#039;&#039;&#039;Cycles minting canister&#039;&#039;&#039;: This canister is responsible for minting &#039;&#039;cycles&#039;&#039;, the fuel for canisters for computation, communication and storage. New cycles can be minted when a new canister is newly created or when an existing canister is topped up with additional cycles.&lt;br /&gt;
# &#039;&#039;&#039;Root canister&#039;&#039;&#039;: The root canister is the controller of all other NNS canisters and responsible for upgrading them.&lt;br /&gt;
# &#039;&#039;&#039;Lifeline canister&#039;&#039;&#039;: The lifeline canister is the controller of the root canister and responsible for upgrading it. &lt;br /&gt;
# &#039;&#039;&#039;Archive canisters&#039;&#039;&#039;: The canisters that store the history of the ledger transactions once there are too many transactions to keep in a single canister.&lt;br /&gt;
#&#039;&#039;&#039;Genesis token canister:&#039;&#039;&#039; This is the canister that was used to initialize the neurons that already existed during genesis.&lt;br /&gt;
&lt;br /&gt;
The canisters that users of the Internet Computer are interacting with the most are the first two: the ledger canister for making transactions, and the governance canister for staking tokens and submitting and voting on proposals.&lt;br /&gt;
&lt;br /&gt;
==Ledger canister &amp;amp; ICP utility tokens in the NNS==&lt;br /&gt;
[[ICP token|ICP utility tokens]] are managed by the ledger canister, which stores two things: accounts and transactions. An account record keeps track of how many tokens are in the possession of a given [[principal]] (i.e., an identity by which a user is authenticated on the Internet Computer). Tokens can then be sent from one account to another, and this is recorded in the transactions of the ledger canister.&lt;br /&gt;
&lt;br /&gt;
In the NNS, ICP utility tokens are used for three different things:&lt;br /&gt;
&lt;br /&gt;
# ICP tokens facilitate &#039;&#039;&#039;participation in governance&#039;&#039;&#039; (more below on how the neurons are connected with the tokens).&lt;br /&gt;
# Those who participate in governance and those who provide compute capacity by operating note machines are &#039;&#039;&#039;rewarded&#039;&#039;&#039; in ICP tokens.&lt;br /&gt;
# ICP tokens are used for &#039;&#039;&#039;conversion into cycles&#039;&#039;&#039;, which are fuel for canisters for computation, communication and storage.&lt;br /&gt;
&lt;br /&gt;
==Governance Canister==&lt;br /&gt;
The governance canister is responsible for holding &#039;&#039;neurons&#039;&#039;, determining who is allowed to participate in governance. Moreover, it stores proposals, which are suggestions for changes to the Internet Computer, and the information associated with proposals that decides if these suggestions should be implemented. If a proposal is adopted, the governance canister automatically executes the decision. Finally, the governance canister distributes rewards to those neurons who participated in voting and contributed to the decision making.&lt;br /&gt;
&lt;br /&gt;
==Neurons==&lt;br /&gt;
Neurons contain &#039;&#039;locked&#039;&#039; ICP utility tokens. These staked tokens are not liquid and cannot be transferred freely to others.&lt;br /&gt;
&lt;br /&gt;
===Neuron Attributes===&lt;br /&gt;
Each neuron stores a number of neuron attributes. Some of the most important ones are the following:&lt;br /&gt;
&lt;br /&gt;
* How many ICP tokens are &#039;&#039;locked&#039;&#039; in the neuron. This information is accessible both by a neuron referencing an account on the ledger canister that stores the neuron&#039;s balance and by a cached stake on the governance canister.&lt;br /&gt;
* A &#039;&#039;controller&#039;&#039; principal, which identifies who manages the neuron&#039;s actions.&lt;br /&gt;
* A unique &#039;&#039;neuron ID&#039;&#039;&lt;br /&gt;
*The neuron&#039;s &#039;&#039;dissolve delay.&#039;&#039; Intuitively, the dissolve delay defines the earliest time when the locked ICP tokens can be unlocked. This time can be increased to up to 8 years but it can only be decreased by waiting for time to pass. A neuron can either be &#039;&#039;non-dissolving&#039;&#039;, &#039;&#039;dissolving&#039;&#039;, or &#039;&#039;dissolved.&#039;&#039; If a neuron is non-dissolving, its set dissolve delay is kept stable and the timer is not running down. The neuron can then be set to dissolving, which means that the dissolve delay is decreasing with the time. Finally, if a the dissolve delay reaches 0, the neuron is dissolved and the locked tokens can be transferred out of the neuron. &lt;br /&gt;
*The &#039;&#039;age&#039;&#039;, which is between 0 and 4 years. A neuron&#039;s age determines the time since when then neuron has last entered the non-dissolving state.&lt;br /&gt;
A neuron&#039;s dissolve delay determines a neuron&#039;s &#039;&#039;eligibility&#039;&#039; to participate in voting. Namely, only those neurons with tokens locked for at least six months are eligible to participate in governance. This incentivizes neuron holders to vote such that the value of their tokens is maximized for a future date. Assuming the value of the tokens is a rough proxy for the network’s success, this incentivizes neuron holders to vote in the long-term interest of the Internet Computer.&lt;br /&gt;
&lt;br /&gt;
A neuron&#039;s &#039;&#039;voting power&#039;&#039; depends on how many tokens a neuron has locked, as well as the neuron&#039;s dissolve delay and age. Intuitively, those who are more committed to the Internet Computer, as they have locked their tokens for longer or have already staked them for a long time, have more voting power. The voting power increases with the dissolve delay and the age.&lt;br /&gt;
&lt;br /&gt;
Finally, the number of rewards that each neuron receives depends on the number of votes that the neuron participated in as well as the neuron&#039;s voting power.&lt;br /&gt;
&lt;br /&gt;
===How to lock tokens in a neuron&amp;lt;ref&amp;gt;https://medium.com/dfinity/the-network-nervous-system-governing-the-internet-computer-1d176605d66a&amp;lt;/ref&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
As a user, there are different [[ICP staking options]] to stake ICP utility tokens in a neuron. The effect of such an operation is that these ICP tokens are transferred to a ledger account that is associated with a newly created neuron. The tokens are thus locked and cannot be used freely by the neuron holder.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example.&#039;&#039;&#039; &#039;&#039;Let’s assume that User B, who has an account (A1) on the ledger canister, would like to lock a hundred tokens in a neuron. To do so, User B sends a command to the NNS specifying the number of tokens and User B’s corresponding principal ID.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;A transaction is then recorded on the ledger, which specifies that some tokens are sent from the original account (A1) of the user to a new account (A2), which also creates the new account (A2) that holds the locked tokens. A new neuron is created in the governance canister that specifies that User B is the one controlling this neuron and that specifies that the amount of locked tokens is defined by the new ledger account A2.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Externally, it’s not visible that the new account (A2) holds locked tokens or is in any way related to the original account (A1). Nevertheless, this account is in fact controlled by the neuron, which means that the tokens are not liquid and that User B cannot transfer the tokens or convert the tokens into cycles.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The main reason for a user to lock tokens in a neuron is to be able to participate in voting and get voting rewards. Both are described in more detail below.&lt;br /&gt;
&lt;br /&gt;
==Proposals==&lt;br /&gt;
A proposal is a suggestion for a change to the Internet Computer. More technically, a proposal describes a &#039;&#039;method&#039;&#039; in a canister that is called if the proposal is accepted. Moreover, it describes the &#039;&#039;parameters&#039;&#039; with which the method will be called.&lt;br /&gt;
&lt;br /&gt;
The Internet Computer supports a variety of different proposal &#039;&#039;topics&#039;&#039;. Here are some examples of topics that are supported in the NNS governance canister:&lt;br /&gt;
* #SubnetManagement Proposals: This considers topology changes. The example proposal above about whether a node should be added to a subnet falls into this category.&lt;br /&gt;
* #NodeAdmin Proposals: This concerns the administration of node machines. An example of a proposal could specify that all of the nodes in a subnet should be updated.&lt;br /&gt;
* #NetworkEconomics Proposals: This concerns the administration of network economics. For example: what rewards should be paid to the node machine providers?&lt;br /&gt;
*#Motion Proposals: These proposals do not have a direct execution of a method as a consequence but are merely there to record the opinion of the community on a specified matter.&lt;br /&gt;
&lt;br /&gt;
==Voting and proposal lifecycle==&lt;br /&gt;
&lt;br /&gt;
=== Submitting a proposal ===&lt;br /&gt;
Any eligible neuron can make and [https://wiki.internetcomputer.org/index.php?title=Neuron_Attributes_and_Commands#Make_Proposal submit a proposal]. To avoid being inundated by useless proposals, a user submitting a proposal has to pay a fee of 1 ICP when submitting a proposal, that they will receive back if the proposal is adopted (but that they will not receive back if the proposal is rejected).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example.&#039;&#039;&#039; &#039;&#039;Let’s consider a User C who would like to suggest that a new subnet is created that initially consists of two nodes: Node 1 and Node 2. Once User C controls a neuron, they can submit a proposal by specifying their neuron ID, the type of proposal that they would like to submit, and the proposal’s parameters. In our example, the proposal specifies that a new subnet should be created and the proposal&#039;s parameters consist of the initial nodes Node 1 and Node 2. Upon the receipt of this proposal, the governance canister first checks that this user is indeed the one controlling the neuron with the given ID and that this neuron is eligible to vote. If the requirements are met, the proposal is added to the governance canister.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
After a proposal is submitted by an eligible neuron, the proposal is created and stored in the governance canister. Moreover, the governance canister computes and stores additional information with each proposal. First, the [[voting power]] of each neuron is computed and stored together with the proposal. The sum of all of these voting powers also determines the &#039;&#039;total voting power&#039;&#039; associated with a given proposal.&lt;br /&gt;
&lt;br /&gt;
When a new proposal is created, the number of “yes” votes associated with the proposal is already increased by the proposer’s voting power. This reflects that the proposal already has the support of the user submitting it.&lt;br /&gt;
&lt;br /&gt;
Moreover, each proposal has an associated &#039;&#039;voting period,&#039;&#039; which determines the period of time over which votes for this proposal are accepted.&lt;br /&gt;
&lt;br /&gt;
===Viewing NNS Proposals===&lt;br /&gt;
You can see all the NNS proposals on the Internet Computer dashboard: https://dashboard.internetcomputer.org/governance&lt;br /&gt;
&lt;br /&gt;
===Discussing NNS Proposals===&lt;br /&gt;
Voters can freely discuss proposal anywhere they like. A lot of NNS proposals are discussed on the developer forum: https://forum.dfinity.org/c/roadmap/29.&lt;br /&gt;
&lt;br /&gt;
===Voting on a proposal===&lt;br /&gt;
After a proposal is submitted and added to the governance canister, other users who control neurons can [[ICP voting options|vote on the proposal]]. Currently, the most user-friendly way to vote on NNS proposals is via the NNS Frontend dapp: https://nns.ic0.app/. For voting, users would first learn which are the open proposals on the governance canister that they can actually vote on. This information is available, for example on Internet Computer dashboard: https://dashboard.internetcomputer.org/governance or in the [[NNS frontend dapp]]. &lt;br /&gt;
&lt;br /&gt;
If a neuron votes in favor of a proposal, the governance canister adds this neuron’s voting power, as stored with the proposal, to the “Yes”-votes associated with the proposal. Likewise, if a neuron votes against a proposal, the governance canister adds the neuron’s voting power to the “No”-votes of the proposal.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example.&#039;&#039;&#039; &#039;&#039;Assume that a given User D would like to reject the proposal that was just added by User C. To do so, User D would send their neuron ID and a “no” vote to the governance canister. The governance canister would check that the vote is coming from the correct user who controls the neuron and confirm that the neuron is eligible to vote. If the conditions are met, the governance canister would then add the voting power of User D to the “no” votes.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
====Neuron following and liquid democracy====&lt;br /&gt;
Users may not have the time or knowledge to participate in all voting decisions. Therefore, instead of directly voting on proposals, neuron holders may choose to delegate their vote to other neurons that they trust with certain decisions. This concept of delegating the right to vote to other voters who then effectively vote with more voting power is called &#039;&#039;liquid democracy.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Concretely, for each proposal topic a neuron can [[How to follow neurons|specify a set of other neurons that it would like to &#039;&#039;follow&#039;&#039;]] &#039;&#039;(so-called followees)&#039;&#039;. In addition, a neuron can specify a set of followees for &amp;quot;all other topics&amp;quot; that are not covered by specific rules. The governance canister keeps track of this relation of follower and followee neurons. It then automatically casts a vote for a follower neuron based on the decision of the followees. In particular, if more than 50% of the followees vote &amp;quot;yes&amp;quot;, then a &amp;quot;yes&amp;quot; vote is cast for the follower and if at least 50% of the followees vote &amp;quot;no&amp;quot;, then a &amp;quot;no&amp;quot; vote is cast for the follower. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;. &#039;&#039;Consider neuron N1 that follows the set of neurons {N2, N3, N4, N5} on all proposal topics. Consider now that a proposal is submitted by another neuron N6. Assume in a first scenario that first N2 votes &amp;quot;No&amp;quot; and then N3 votes &amp;quot;No&amp;quot; on the proposal. In that case, the governance canister will also send a &amp;quot;No&amp;quot; vote for N1 two out of four followees voted &amp;quot;No&amp;quot; (which also means that it is not possible anymore to get more than 50% &amp;quot;Yes&amp;quot; votes). Assume a second scenario where N2 votes &amp;quot;Yes&amp;quot; and then N3 votes &amp;quot;Yes&amp;quot; on the proposal. In that case, no vote is sent yet for N1. However, if either N4 and N5 also send a &amp;quot;Yes&amp;quot; vote, a &amp;quot;Yes&amp;quot; vote is also cast for N1.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This liquid democracy has great advantages. First, it allows even neurons that do not have enough knowledge of a certain topic to nevertheless participate in governance by choosing the neurons that they trust with certain decisions and by delegating their vote to them. In particular, a neuron can choose a different set of followees for different topics. Moreover, this mechanism allows neuron holders to get voting rewards from voting participation even if they do not have time to actively participate in all voting decision.&lt;br /&gt;
&lt;br /&gt;
=== Proposal decision and wait-for-quiet ===&lt;br /&gt;
A proposal can be &#039;&#039;decided&#039;&#039; in two ways:&lt;br /&gt;
# &#039;&#039;&#039;Absolute Majority before the voting period ends&#039;&#039;&#039;: At any point, even before the voting period ends, if an absolute majority (more than half of the total voting power stored in the proposal) has voted Yes, then the proposal is adopted and if an absolute majority has voted No, then the proposal is rejected.&lt;br /&gt;
# &#039;&#039;&#039;Simple Majority at the voting period’s end&#039;&#039;&#039;: When the voting period ends, if a simple majority (more than half of the cast votes) has voted Yes and the number of these Yes-votes constitute at least 3% of the total voting power, then the proposal is adopted. Otherwise, the proposal is rejected.&lt;br /&gt;
&lt;br /&gt;
What also plays into this is the fact that the governance voting algorithm also applies &#039;&#039;wait-for-quiet&#039;&#039;. The idea of wait-for-quiet is to decide proposals quickly when all voters agree, but increase the time that neurons can vote for proposals that are controversial. That means that the voting period can be dynamically increased, depending on the neurons’ votes. In particular, each time a proposal’s outcome is turned (either a Yes-majority is turned to a No-majority or vice versa), the proposal’s deadline is increased. Currently, a proposal&#039;s initial voting period is 4 days and can be increased by at most another 4 days. That is, the voting period that is taken into account for the above rules can be between 4 and 8 days, depending on the voting activity.&lt;br /&gt;
&lt;br /&gt;
=== Proposal execution ===&lt;br /&gt;
Recall that a proposal defines a method, a canister, and some parameters. As soon as a proposal is adopted, the defined method on the specified canister is called with the given parameters. This is done fully automatically by the governance canister. &lt;br /&gt;
&lt;br /&gt;
== Voting Rewards ==&lt;br /&gt;
Contributing to decision-making is one incentive for voters to lock their neurons, but they are also &#039;&#039;rewarded&#039;&#039; for participating in network governance.&lt;br /&gt;
&lt;br /&gt;
Specifically, each day the governance canister considers which proposal can be settled. It is then considered for each neuron in how many proposals they participated and with which voting power. Depending on this, the neurons get rewarded. Concretely, rewards are added to the neuron&#039;s attribute that is called &#039;&#039;maturity.&#039;&#039; Maturity represents ICP utility token that are not yet minted. &lt;br /&gt;
&lt;br /&gt;
A neuron holder can then profit from the maturity in two ways:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Spawn maturity:&#039;&#039;&#039; A neuron holder can choose to [[How to spawn a neuron|spawn a new neuron]] to get liquid ICP utility tokens worth the voting rewards. Spawning a new neuron has the effect that a new neuron with a new associated account on the ledger will be created, which contains the amount of staked ICP utility token equivalent to the maturity of the original neuron. In fact, the new tokens are minted and transferred to the new account, which is also recorded in the ledger canister. The new neuron has a small dissolve delay of 7 days. This means that users only need to wait a short amount of time to be able to unlock the tokens and use them freely, no matter what dissolve delay the original neuron has.&lt;br /&gt;
# &#039;&#039;&#039;Merge maturity&#039;&#039;&#039;: A neuron holder can choose to [[merge maturity]] to reinvest the voting rewards in the existing neuron. This neuron operation adds the ICP utility token equivalent of the maturity to the neuron&#039;s stake and adjusts the neuron&#039;s age accordingly. Effectively this means that the maturity is reinvested in the neuron and contributes to the neuron&#039;s voting power.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Cycles Minting Canister and Cycles&amp;lt;ref&amp;gt;https://medium.com/dfinity/the-network-nervous-system-governing-the-internet-computer-1d176605d66a&amp;lt;/ref&amp;gt;==&lt;br /&gt;
Besides governance participation and voting rewards, tokens can also be converted into cycles, which fuel computation and storage on the Internet Computer. Each canister on the Internet Computer, except for those on the NNS, uses cycles for computations and has some cycles stored within it. While the token price may vary over time, the goal of the cycles is to keep the price of computation roughly consistent over time.&lt;br /&gt;
&lt;br /&gt;
The canister responsible for converting ICP utility tokens into cycles is the &#039;&#039;Cycles Minting Canister.&#039;&#039; To convert cycles for creating or topping-up a canister, a user needs to send ICP utility tokens to the Cycles Minting Canister. This canister then burns the tokens and mints the cycles. &lt;br /&gt;
&lt;br /&gt;
The Cycles Minting Canister only facilitates the conversion of ICP utility tokens to cycles but not the other way around. Cycles are burned in canisters when they use computation and storage over time. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example.&#039;&#039;&#039; &#039;&#039;Consider User E who runs a canister on the Internet Computer and would like to top up the cycles of this canister so that it can perform even more computations. Also assume that this canister currently has 700 trillion cycles and User E would like to increase this number by 200 trillion. To do so, the user would send a command to the NNS that specifies the action of topping up their canister. Upon receiving this command, a transaction is made from the user’s account to the Cycles Minting Canister. As a result of this transaction, the Cycles Minting Canister would burn the tokens, mint new cycles, and send these freshly minted cycles to the user’s canister, meaning the canister balance is now 900 trillion cycles.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/dfinity/the-network-nervous-system-governing-the-internet-computer-1d176605d66a Medium article]&lt;br /&gt;
* [https://dfinity.org/howitworks/network-nervous-system-nns Video]&lt;br /&gt;
&lt;br /&gt;
=References=&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Network_Nervous_System&amp;diff=3027</id>
		<title>Network Nervous System</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Network_Nervous_System&amp;diff=3027"/>
		<updated>2022-09-05T20:16:06Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;The NNS is the decentralized autonomous organization (DAO) that governs the Internet Computer (IC). It is a fully on-chain, decentralized system and is, for instance, responsible for making protocol level upgrades to continuously improve the Internet Computer. It does this by an implementation of liquid democracy in which ICP neuron holders vote on proposals that shape the development of the Internet Computer. Once such a proposal is accepted, it is autonomously executed.&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;While other blockchains take weeks or months to upgrade (sometimes called hard fork) and typically require substantial manual work and coordination to do so, the IC upgrades itself on a weekly basis. Its ability to upgrade and iterate is a comparative &amp;quot;superpower&amp;quot;: https://dashboard.internetcomputer.org/releases&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The NNS is realized by a set of &#039;&#039;[[canisters|canisters]]&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
==NNS canisters==&lt;br /&gt;
# &#039;&#039;&#039;Ledger canister:&#039;&#039;&#039; The ledger canister stores the ICP utility &#039;&#039;token balance&#039;&#039; of each principal and the history of ICP &#039;&#039;transactions&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Governance canister:&#039;&#039;&#039; The governance canister receives and stores &#039;&#039;Proposals&#039;&#039;, which are suggestions for how the Internet Computer should be changed. These proposals can then be voted on. The governance canister also tracks &#039;&#039;Neurons&#039;&#039;, which determine who is allowed to participate in governance.&lt;br /&gt;
# &#039;&#039;&#039;Registry canister:&#039;&#039;&#039; The registry canister stores the configuration of the whole Internet Computer, e.g., which nodes belong to a certain subnet and the software each node should run.&lt;br /&gt;
# &#039;&#039;&#039;Cycles minting canister&#039;&#039;&#039;: This canister is responsible for minting &#039;&#039;cycles&#039;&#039;, the fuel for canisters for computation, communication and storage. New cycles can be minted when a new canister is newly created or when an existing canister is topped up with additional cycles.&lt;br /&gt;
# &#039;&#039;&#039;Root canister&#039;&#039;&#039;: The root canister is the controller of all other NNS canisters and responsible for upgrading them.&lt;br /&gt;
# &#039;&#039;&#039;Lifeline canister&#039;&#039;&#039;: The lifeline canister is the controller of the root canister and responsible for upgrading it. &lt;br /&gt;
# &#039;&#039;&#039;Archive canisters&#039;&#039;&#039;: The canisters that store the history of the ledger transactions once there are too many transactions to keep in a single canister.&lt;br /&gt;
#&#039;&#039;&#039;Genesis token canister:&#039;&#039;&#039; This is the canister that was used to initialize the neurons that already existed during genesis.&lt;br /&gt;
&lt;br /&gt;
The canisters that users of the Internet Computer are interacting with the most are the first two: the ledger canister for making transactions, and the governance canister for staking tokens and submitting and voting on proposals.&lt;br /&gt;
&lt;br /&gt;
==Ledger canister &amp;amp; ICP utility tokens in the NNS==&lt;br /&gt;
[[ICP token|ICP utility tokens]] are managed by the ledger canister, which stores two things: accounts and transactions. An account record keeps track of how many tokens are in the possession of a given [[principal]] (i.e., an identity by which a user is authenticated on the Internet Computer). Tokens can then be sent from one account to another, and this is recorded in the transactions of the ledger canister.&lt;br /&gt;
&lt;br /&gt;
In the NNS, ICP utility tokens are used for three different things:&lt;br /&gt;
&lt;br /&gt;
# ICP tokens facilitate &#039;&#039;&#039;participation in governance&#039;&#039;&#039; (more below on how the neurons are connected with the tokens).&lt;br /&gt;
# Those who participate in governance and those who provide compute capacity by operating note machines are &#039;&#039;&#039;rewarded&#039;&#039;&#039; in ICP tokens.&lt;br /&gt;
# ICP tokens are used for &#039;&#039;&#039;conversion into cycles&#039;&#039;&#039;, which are fuel for canisters for computation, communication and storage.&lt;br /&gt;
&lt;br /&gt;
==Governance Canister==&lt;br /&gt;
The governance canister is responsible for holding &#039;&#039;neurons&#039;&#039;, determining who is allowed to participate in governance. Moreover, it stores proposals, which are suggestions for changes to the Internet Computer, and the information associated with proposals that decides if these suggestions should be implemented. If a proposal is adopted, the governance canister automatically executes the decision. Finally, the governance canister distributes rewards to those neurons who participated in voting and contributed to the decision making.&lt;br /&gt;
&lt;br /&gt;
==Neurons==&lt;br /&gt;
Neurons contain &#039;&#039;locked&#039;&#039; ICP utility tokens. These staked tokens are not liquid and cannot be transferred freely to others.&lt;br /&gt;
&lt;br /&gt;
===Neuron Attributes===&lt;br /&gt;
Each neuron stores a number of neuron attributes. Some of the most important ones are the following:&lt;br /&gt;
&lt;br /&gt;
* How many ICP tokens are &#039;&#039;locked&#039;&#039; in the neuron. This information is accessible both by a neuron referencing an account on the ledger canister that stores the neuron&#039;s balance and by a cached stake on the governance canister.&lt;br /&gt;
* A &#039;&#039;controller&#039;&#039; principal, which identifies who manages the neuron&#039;s actions.&lt;br /&gt;
* A unique &#039;&#039;neuron ID&#039;&#039;&lt;br /&gt;
*The neuron&#039;s &#039;&#039;dissolve delay.&#039;&#039; Intuitively, the dissolve delay defines the earliest time when the locked ICP tokens can be unlocked. This time can be increased to up to 8 years but it can only be decreased by waiting for time to pass. A neuron can either be &#039;&#039;non-dissolving&#039;&#039;, &#039;&#039;dissolving&#039;&#039;, or &#039;&#039;dissolved.&#039;&#039; If a neuron is non-dissolving, its set dissolve delay is kept stable and the timer is not running down. The neuron can then be set to dissolving, which means that the dissolve delay is decreasing with the time. Finally, if a the dissolve delay reaches 0, the neuron is dissolved and the locked tokens can be transferred out of the neuron. &lt;br /&gt;
*The &#039;&#039;age&#039;&#039;, which is between 0 and 4 years. A neuron&#039;s age determines the time since when then neuron has last entered the non-dissolving state.&lt;br /&gt;
A neuron&#039;s dissolve delay determines a neuron&#039;s &#039;&#039;eligibility&#039;&#039; to participate in voting. Namely, only those neurons with tokens locked for at least six months are eligible to participate in governance. This incentivizes neuron holders to vote such that the value of their tokens is maximized for a future date. Assuming the value of the tokens is a rough proxy for the network’s success, this incentivizes neuron holders to vote in the long-term interest of the Internet Computer.&lt;br /&gt;
&lt;br /&gt;
A neuron&#039;s &#039;&#039;voting power&#039;&#039; depends on how many tokens a neuron has locked, as well as the neuron&#039;s dissolve delay and age. Intuitively, those who are more committed to the Internet Computer, as they have locked their tokens for longer or have already staked them for a long time, have more voting power. The voting power increases with the dissolve delay and the age.&lt;br /&gt;
&lt;br /&gt;
Finally, the number of rewards that each neuron receives depends on the number of votes that the neuron participated in as well as the neuron&#039;s voting power.&lt;br /&gt;
&lt;br /&gt;
===How to lock tokens in a neuron&amp;lt;ref&amp;gt;https://medium.com/dfinity/the-network-nervous-system-governing-the-internet-computer-1d176605d66a&amp;lt;/ref&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
As a user, there are different [[ICP staking options]] to stake ICP utility tokens in a neuron. The effect of such an operation is that these ICP tokens are transferred to a ledger account that is associated with a newly created neuron. The tokens are thus locked and cannot be used freely by the neuron holder.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example.&#039;&#039;&#039; &#039;&#039;Let’s assume that User B, who has an account (A1) on the ledger canister, would like to lock a hundred tokens in a neuron. To do so, User B sends a command to the NNS specifying the number of tokens and User B’s corresponding principal ID.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;A transaction is then recorded on the ledger, which specifies that some tokens are sent from the original account (A1) of the user to a new account (A2), which also creates the new account (A2) that holds the locked tokens. A new neuron is created in the governance canister that specifies that User B is the one controlling this neuron and that specifies that the amount of locked tokens is defined by the new ledger account A2.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Externally, it’s not visible that the new account (A2) holds locked tokens or is in any way related to the original account (A1). Nevertheless, this account is in fact controlled by the neuron, which means that the tokens are not liquid and that User B cannot transfer the tokens or convert the tokens into cycles.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The main reason for a user to lock tokens in a neuron is to be able to participate in voting and get voting rewards. Both are described in more detail below.&lt;br /&gt;
&lt;br /&gt;
==Proposals==&lt;br /&gt;
A proposal is a suggestion for a change to the Internet Computer. More technically, a proposal describes a &#039;&#039;method&#039;&#039; in a canister that is called if the proposal is accepted. Moreover, it describes the &#039;&#039;parameters&#039;&#039; with which the method will be called.&lt;br /&gt;
&lt;br /&gt;
The Internet Computer supports a variety of different proposal &#039;&#039;topics&#039;&#039;. Here are some examples of topics that are supported in the NNS governance canister:&lt;br /&gt;
* #SubnetManagement Proposals: This considers topology changes. The example proposal above about whether a node should be added to a subnet falls into this category.&lt;br /&gt;
* #NodeAdmin Proposals: This concerns the administration of node machines. An example of a proposal could specify that all of the nodes in a subnet should be updated.&lt;br /&gt;
* #NetworkEconomics Proposals: This concerns the administration of network economics. For example: what rewards should be paid to the node machine providers?&lt;br /&gt;
*#Motion Proposals: These proposals do not have a direct execution of a method as a consequence but are merely there to record the opinion of the community on a specified matter.&lt;br /&gt;
&lt;br /&gt;
==Voting and proposal lifecycle==&lt;br /&gt;
&lt;br /&gt;
=== Submitting a proposal ===&lt;br /&gt;
Any eligible neuron can make and [https://wiki.internetcomputer.org/index.php?title=Neuron_Attributes_and_Commands#Make_Proposal submit a proposal]. To avoid being inundated by useless proposals, a user submitting a proposal has to pay a fee of 1 ICP when submitting a proposal, that they will receive back if the proposal is adopted (but that they will not receive back if the proposal is rejected).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example.&#039;&#039;&#039; &#039;&#039;Let’s consider a User C who would like to suggest that a new subnet is created that initially consists of two nodes: Node 1 and Node 2. Once User C controls a neuron, they can submit a proposal by specifying their neuron ID, the type of proposal that they would like to submit, and the proposal’s parameters. In our example, the proposal specifies that a new subnet should be created and the proposal&#039;s parameters consist of the initial nodes Node 1 and Node 2. Upon the receipt of this proposal, the governance canister first checks that this user is indeed the one controlling the neuron with the given ID and that this neuron is eligible to vote. If the requirements are met, the proposal is added to the governance canister.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
After a proposal is submitted by an eligible neuron, the proposal is created and stored in the governance canister. Moreover, the governance canister computes and stores additional information with each proposal. First, the [[voting power]] of each neuron is computed and stored together with the proposal. The sum of all of these voting powers also determines the &#039;&#039;total voting power&#039;&#039; associated with a given proposal.&lt;br /&gt;
&lt;br /&gt;
When a new proposal is created, the number of “yes” votes associated with the proposal is already increased by the proposer’s voting power. This reflects that the proposal already has the support of the user submitting it.&lt;br /&gt;
&lt;br /&gt;
Moreover, each proposal has an associated &#039;&#039;voting period,&#039;&#039; which determines the period of time over which votes for this proposal are accepted.&lt;br /&gt;
&lt;br /&gt;
===Viewing NNS Proposals===&lt;br /&gt;
You can see all the NNS proposals on the Internet Computer dashboard: https://dashboard.internetcomputer.org/governance&lt;br /&gt;
&lt;br /&gt;
===Discussing NNS Proposals===&lt;br /&gt;
Voters can freely discuss proposal anywhere they like. A lot of NNS proposals are discussed on the developer forum: https://forum.dfinity.org/c/roadmap/29.&lt;br /&gt;
&lt;br /&gt;
===Voting on a proposal===&lt;br /&gt;
After a proposal is submitted and added to the governance canister, other users who control neurons can [[ICP voting options|vote on the proposal]]. Currently, the most user-friendly way to vote on NNS proposals is via the NNS Frontend dapp: https://nns.ic0.app/. For voting, users would first learn which are the open proposals on the governance canister that they can actually vote on. This information is available, for example on Internet Computer dashboard: https://dashboard.internetcomputer.org/governance or in the [[NNS frontend dapp]]. &lt;br /&gt;
&lt;br /&gt;
If a neuron votes in favor of a proposal, the governance canister adds this neuron’s voting power, as stored with the proposal, to the “Yes”-votes associated with the proposal. Likewise, if a neuron votes against a proposal, the governance canister adds the neuron’s voting power to the “No”-votes of the proposal.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example.&#039;&#039;&#039; &#039;&#039;Assume that a given User D would like to reject the proposal that was just added by User C. To do so, User D would send their neuron ID and a “no” vote to the governance canister. The governance canister would check that the vote is coming from the correct user who controls the neuron and confirm that the neuron is eligible to vote. If the conditions are met, the governance canister would then add the voting power of User D to the “no” votes.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
====Neuron following and liquid democracy====&lt;br /&gt;
Users may not have the time or knowledge to participate in all voting decisions. Therefore, instead of directly voting on proposals, neuron holders may choose to delegate their vote to other neurons that they trust with certain decisions. This concept of delegating the right to vote to other voters who then effectively vote with more voting power is called &#039;&#039;liquid democracy.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Concretely, for each proposal topic a neuron can [[How to follow neurons|specify a set of other neurons that it would like to &#039;&#039;follow&#039;&#039;]] &#039;&#039;(so-called followees)&#039;&#039;. In addition, a neuron can specify a set of followees for &amp;quot;all other topics&amp;quot; that are not covered by specific rules. The governance canister keeps track of this relation of follower and followee neurons. It then automatically casts a vote for a follower neuron based on the decision of the followees. In particular, if more than 50% of the followees vote &amp;quot;yes&amp;quot;, then a &amp;quot;yes&amp;quot; vote is cast for the follower and if at least 50% of the followees vote &amp;quot;no&amp;quot;, then a &amp;quot;no&amp;quot; vote is cast for the follower. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;. &#039;&#039;Consider neuron N1 that follows the set of neurons {N2, N3, N4, N5} on all proposal topics. Consider now that a proposal is submitted by another neuron N6. Assume in a first scenario that first N2 votes &amp;quot;No&amp;quot; and then N3 votes &amp;quot;No&amp;quot; on the proposal. In that case, the governance canister will also send a &amp;quot;No&amp;quot; vote for N1 two out of four followees voted &amp;quot;No&amp;quot; (which also means that it is not possible anymore to get more than 50% &amp;quot;Yes&amp;quot; votes). Assume a second scenario where N2 votes &amp;quot;Yes&amp;quot; and then N3 votes &amp;quot;Yes&amp;quot; on the proposal. In that case, no vote is sent yet for N1. However, if either N4 and N5 also send a &amp;quot;Yes&amp;quot; vote, a &amp;quot;Yes&amp;quot; vote is also cast for N1.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This liquid democracy has great advantages. First, it allows even neurons that do not have enough knowledge of a certain topic to nevertheless participate in governance by choosing the neurons that they trust with certain decisions and by delegating their vote to them. In particular, a neuron can choose a different set of followees for different topics. Moreover, this mechanism allows neuron holders to get voting rewards from voting participation even if they do not have time to actively participate in all voting decision.&lt;br /&gt;
&lt;br /&gt;
=== Proposal decision and wait-for-quiet ===&lt;br /&gt;
A proposal can be &#039;&#039;decided&#039;&#039; in two ways:&lt;br /&gt;
# &#039;&#039;&#039;Absolute Majority before the voting period ends&#039;&#039;&#039;: At any point, even before the voting period ends, if an absolute majority (more than half of the total voting power stored in the proposal) has voted Yes, then the proposal is adopted and if an absolute majority has voted No, then the proposal is rejected.&lt;br /&gt;
# &#039;&#039;&#039;Simple Majority at the voting period’s end&#039;&#039;&#039;: When the voting period ends, if a simple majority (more than half of the cast votes) has voted Yes and the number of these Yes-votes constitute at least 3% of the total voting power, then the proposal is adopted. Otherwise, the proposal is rejected.&lt;br /&gt;
&lt;br /&gt;
What also plays into this is the fact that the governance voting algorithm also applies &#039;&#039;wait-for-quiet&#039;&#039;. The idea of wait-for-quiet is to decide proposals quickly when all voters agree, but increase the time that neurons can vote for proposals that are controversial. That means that the voting period can be dynamically increased, depending on the neurons’ votes. In particular, each time a proposal’s outcome is turned (either a Yes-majority is turned to a No-majority or vice versa), the proposal’s deadline is increased. Currently, a proposal&#039;s initial voting period is 4 days and can be increased by at most another 4 days. That is, the voting period that is taken into account for the above rules can be between 4 and 8 days, depending on the voting activity.&lt;br /&gt;
&lt;br /&gt;
=== Proposal execution ===&lt;br /&gt;
Recall that a proposal defines a method, a canister, and some parameters. As soon as a proposal is adopted, the defined method on the specified canister is called with the given parameters. This is done fully automatically by the governance canister. &lt;br /&gt;
&lt;br /&gt;
== Voting Rewards ==&lt;br /&gt;
Contributing to decision-making is one incentive for voters to lock their neurons, but they are also &#039;&#039;rewarded&#039;&#039; for participating in network governance.&lt;br /&gt;
&lt;br /&gt;
Specifically, each day the governance canister considers which proposal can be settled. It is then considered for each neuron in how many proposals they participated and with which voting power. Depending on this, the neurons get rewarded. Concretely, rewards are added to the neuron&#039;s attribute that is called &#039;&#039;maturity.&#039;&#039; Maturity represents ICP utility token that are not yet minted. &lt;br /&gt;
&lt;br /&gt;
A neuron holder can then profit from the maturity in two ways:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Spawn maturity:&#039;&#039;&#039; A neuron holder can choose to [[How to spawn a neuron|spawn a new neuron]] to get liquid ICP utility tokens worth the voting rewards. Spawning a new neuron has the effect that a new neuron with a new associated account on the ledger will be created, which contains the amount of staked ICP utility token equivalent to the maturity of the original neuron. In fact, the new tokens are minted and transferred to the new account, which is also recorded in the ledger canister. The new neuron has a small dissolve delay of 7 days. This means that users only need to wait a short amount of time to be able to unlock the tokens and use them freely, no matter what dissolve delay the original neuron has.&lt;br /&gt;
# &#039;&#039;&#039;Merge maturity&#039;&#039;&#039;: A neuron holder can choose to [[merge maturity]] to reinvest the voting rewards in the existing neuron. This neuron operation adds the ICP utility token equivalent of the maturity to the neuron&#039;s stake and adjusts the neuron&#039;s age accordingly. Effectively this means that the maturity is reinvested in the neuron and contributes to the neuron&#039;s voting power.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Cycles Minting Canister and Cycles&amp;lt;ref&amp;gt;https://medium.com/dfinity/the-network-nervous-system-governing-the-internet-computer-1d176605d66a&amp;lt;/ref&amp;gt;==&lt;br /&gt;
Besides governance participation and voting rewards, tokens can also be converted into cycles, which fuel computation and storage on the Internet Computer. Each canister on the Internet Computer, except for those on the NNS, uses cycles for computations and has some cycles stored within it. While the token price may vary over time, the goal of the cycles is to keep the price of computation roughly consistent over time.&lt;br /&gt;
&lt;br /&gt;
The canister responsible for converting ICP utility tokens into cycles is the &#039;&#039;Cycles Minting Canister.&#039;&#039; To convert cycles for creating or topping-up a canister, a user needs to send ICP utility tokens to the Cycles Minting Canister. This canister then burns the tokens and mints the cycles. &lt;br /&gt;
&lt;br /&gt;
The Cycles Minting Canister only facilitates the conversion of ICP utility tokens to cycles but not the other way around. Cycles are burned in canisters when they use computation and storage over time. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example.&#039;&#039;&#039; &#039;&#039;Consider User E who runs a canister on the Internet Computer and would like to top up the cycles of this canister so that it can perform even more computations. Also assume that this canister currently has 700 trillion cycles and User E would like to increase this number by 200 trillion. To do so, the user would send a command to the NNS that specifies the action of topping up their canister. Upon receiving this command, a transaction is made from the user’s account to the Cycles Minting Canister. As a result of this transaction, the Cycles Minting Canister would burn the tokens, mint new cycles, and send these freshly minted cycles to the user’s canister, meaning the canister balance is now 900 trillion cycles.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/dfinity/the-network-nervous-system-governing-the-internet-computer-1d176605d66a Medium article]&lt;br /&gt;
* [https://dfinity.org/howitworks/network-nervous-system-nns Video]&lt;br /&gt;
&lt;br /&gt;
=References=&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Network_Nervous_System&amp;diff=3026</id>
		<title>Network Nervous System</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Network_Nervous_System&amp;diff=3026"/>
		<updated>2022-09-05T20:13:18Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;The NNS is the decentralized autonomous organization (DAO) that governs the Internet Computer (IC). It is a fully on-chain, decentralized system and is, for instance, responsible for making protocol level upgrades to continuously improve the Internet Computer. It does this by an implementation of liquid democracy in which ICP neuron holders vote on proposals that shape the development of the Internet Computer.&lt;br /&gt;
Once a proposal is accepted, it is autonomously executed.&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;While other blockchains take weeks or months to upgrade (sometimes called hard fork), the IC upgrades itself on a weekly basis. Its ability to upgrade and iterate is a comparative &amp;quot;superpower&amp;quot;: https://dashboard.internetcomputer.org/releases&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The NNS is realized by a set of &#039;&#039;[[canisters|canisters]]&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
==NNS canisters==&lt;br /&gt;
# &#039;&#039;&#039;Ledger canister:&#039;&#039;&#039; The ledger canister stores the ICP utility &#039;&#039;token balance&#039;&#039; of each principal and the history of ICP &#039;&#039;transactions&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Governance canister:&#039;&#039;&#039; The governance canister receives and stores &#039;&#039;Proposals&#039;&#039;, which are suggestions for how the Internet Computer should be changed. These proposals can then be voted on. The governance canister also tracks &#039;&#039;Neurons&#039;&#039;, which determine who is allowed to participate in governance.&lt;br /&gt;
# &#039;&#039;&#039;Registry canister:&#039;&#039;&#039; The registry canister stores the configuration of the whole Internet Computer, e.g., which nodes belong to a certain subnet and the software each node should run.&lt;br /&gt;
# &#039;&#039;&#039;Cycles minting canister&#039;&#039;&#039;: This canister is responsible for minting &#039;&#039;cycles&#039;&#039;, the fuel for canisters for computation, communication and storage. New cycles can be minted when a new canister is newly created or when an existing canister is topped up with additional cycles.&lt;br /&gt;
# &#039;&#039;&#039;Root canister&#039;&#039;&#039;: The root canister is the controller of all other NNS canisters and responsible for upgrading them.&lt;br /&gt;
# &#039;&#039;&#039;Lifeline canister&#039;&#039;&#039;: The lifeline canister is the controller of the root canister and responsible for upgrading it. &lt;br /&gt;
# &#039;&#039;&#039;Archive canisters&#039;&#039;&#039;: The canisters that store the history of the ledger transactions once there are too many transactions to keep in a single canister.&lt;br /&gt;
#&#039;&#039;&#039;Genesis token canister:&#039;&#039;&#039; This is the canister that was used to initialize the neurons that already existed during genesis.&lt;br /&gt;
&lt;br /&gt;
The canisters that users of the Internet Computer are interacting with the most are the first two: the ledger canister for making transactions, and the governance canister for staking tokens and submitting and voting on proposals.&lt;br /&gt;
&lt;br /&gt;
==Ledger canister &amp;amp; ICP utility tokens in the NNS==&lt;br /&gt;
[[ICP token|ICP utility tokens]] are managed by the ledger canister, which stores two things: accounts and transactions. An account record keeps track of how many tokens are in the possession of a given [[principal]] (i.e., an identity by which a user is authenticated on the Internet Computer). Tokens can then be sent from one account to another, and this is recorded in the transactions of the ledger canister.&lt;br /&gt;
&lt;br /&gt;
In the NNS, ICP utility tokens are used for three different things:&lt;br /&gt;
&lt;br /&gt;
# ICP tokens facilitate &#039;&#039;&#039;participation in governance&#039;&#039;&#039; (more below on how the neurons are connected with the tokens).&lt;br /&gt;
# Those who participate in governance and those who provide compute capacity by operating note machines are &#039;&#039;&#039;rewarded&#039;&#039;&#039; in ICP tokens.&lt;br /&gt;
# ICP tokens are used for &#039;&#039;&#039;conversion into cycles&#039;&#039;&#039;, which are fuel for canisters for computation, communication and storage.&lt;br /&gt;
&lt;br /&gt;
==Governance Canister==&lt;br /&gt;
The governance canister is responsible for holding &#039;&#039;neurons&#039;&#039;, determining who is allowed to participate in governance. Moreover, it stores proposals, which are suggestions for changes to the Internet Computer, and the information associated with proposals that decides if these suggestions should be implemented. If a proposal is adopted, the governance canister automatically executes the decision. Finally, the governance canister distributes rewards to those neurons who participated in voting and contributed to the decision making.&lt;br /&gt;
&lt;br /&gt;
==Neurons==&lt;br /&gt;
Neurons contain &#039;&#039;locked&#039;&#039; ICP utility tokens. These staked tokens are not liquid and cannot be transferred freely to others.&lt;br /&gt;
&lt;br /&gt;
===Neuron Attributes===&lt;br /&gt;
Each neuron stores a number of neuron attributes. Some of the most important ones are the following:&lt;br /&gt;
&lt;br /&gt;
* How many ICP tokens are &#039;&#039;locked&#039;&#039; in the neuron. This information is accessible both by a neuron referencing an account on the ledger canister that stores the neuron&#039;s balance and by a cached stake on the governance canister.&lt;br /&gt;
* A &#039;&#039;controller&#039;&#039; principal, which identifies who manages the neuron&#039;s actions.&lt;br /&gt;
* A unique &#039;&#039;neuron ID&#039;&#039;&lt;br /&gt;
*The neuron&#039;s &#039;&#039;dissolve delay.&#039;&#039; Intuitively, the dissolve delay defines the earliest time when the locked ICP tokens can be unlocked. This time can be increased to up to 8 years but it can only be decreased by waiting for time to pass. A neuron can either be &#039;&#039;non-dissolving&#039;&#039;, &#039;&#039;dissolving&#039;&#039;, or &#039;&#039;dissolved.&#039;&#039; If a neuron is non-dissolving, its set dissolve delay is kept stable and the timer is not running down. The neuron can then be set to dissolving, which means that the dissolve delay is decreasing with the time. Finally, if a the dissolve delay reaches 0, the neuron is dissolved and the locked tokens can be transferred out of the neuron. &lt;br /&gt;
*The &#039;&#039;age&#039;&#039;, which is between 0 and 4 years. A neuron&#039;s age determines the time since when then neuron has last entered the non-dissolving state.&lt;br /&gt;
A neuron&#039;s dissolve delay determines a neuron&#039;s &#039;&#039;eligibility&#039;&#039; to participate in voting. Namely, only those neurons with tokens locked for at least six months are eligible to participate in governance. This incentivizes neuron holders to vote such that the value of their tokens is maximized for a future date. Assuming the value of the tokens is a rough proxy for the network’s success, this incentivizes neuron holders to vote in the long-term interest of the Internet Computer.&lt;br /&gt;
&lt;br /&gt;
A neuron&#039;s &#039;&#039;voting power&#039;&#039; depends on how many tokens a neuron has locked, as well as the neuron&#039;s dissolve delay and age. Intuitively, those who are more committed to the Internet Computer, as they have locked their tokens for longer or have already staked them for a long time, have more voting power. The voting power increases with the dissolve delay and the age.&lt;br /&gt;
&lt;br /&gt;
Finally, the number of rewards that each neuron receives depends on the number of votes that the neuron participated in as well as the neuron&#039;s voting power.&lt;br /&gt;
&lt;br /&gt;
===How to lock tokens in a neuron&amp;lt;ref&amp;gt;https://medium.com/dfinity/the-network-nervous-system-governing-the-internet-computer-1d176605d66a&amp;lt;/ref&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
As a user, there are different [[ICP staking options]] to stake ICP utility tokens in a neuron. The effect of such an operation is that these ICP tokens are transferred to a ledger account that is associated with a newly created neuron. The tokens are thus locked and cannot be used freely by the neuron holder.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example.&#039;&#039;&#039; &#039;&#039;Let’s assume that User B, who has an account (A1) on the ledger canister, would like to lock a hundred tokens in a neuron. To do so, User B sends a command to the NNS specifying the number of tokens and User B’s corresponding principal ID.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;A transaction is then recorded on the ledger, which specifies that some tokens are sent from the original account (A1) of the user to a new account (A2), which also creates the new account (A2) that holds the locked tokens. A new neuron is created in the governance canister that specifies that User B is the one controlling this neuron and that specifies that the amount of locked tokens is defined by the new ledger account A2.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Externally, it’s not visible that the new account (A2) holds locked tokens or is in any way related to the original account (A1). Nevertheless, this account is in fact controlled by the neuron, which means that the tokens are not liquid and that User B cannot transfer the tokens or convert the tokens into cycles.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The main reason for a user to lock tokens in a neuron is to be able to participate in voting and get voting rewards. Both are described in more detail below.&lt;br /&gt;
&lt;br /&gt;
==Proposals==&lt;br /&gt;
A proposal is a suggestion for a change to the Internet Computer. More technically, a proposal describes a &#039;&#039;method&#039;&#039; in a canister that is called if the proposal is accepted. Moreover, it describes the &#039;&#039;parameters&#039;&#039; with which the method will be called.&lt;br /&gt;
&lt;br /&gt;
The Internet Computer supports a variety of different proposal &#039;&#039;topics&#039;&#039;. Here are some examples of topics that are supported in the NNS governance canister:&lt;br /&gt;
* #SubnetManagement Proposals: This considers topology changes. The example proposal above about whether a node should be added to a subnet falls into this category.&lt;br /&gt;
* #NodeAdmin Proposals: This concerns the administration of node machines. An example of a proposal could specify that all of the nodes in a subnet should be updated.&lt;br /&gt;
* #NetworkEconomics Proposals: This concerns the administration of network economics. For example: what rewards should be paid to the node machine providers?&lt;br /&gt;
*#Motion Proposals: These proposals do not have a direct execution of a method as a consequence but are merely there to record the opinion of the community on a specified matter.&lt;br /&gt;
&lt;br /&gt;
==Voting and proposal lifecycle==&lt;br /&gt;
&lt;br /&gt;
=== Submitting a proposal ===&lt;br /&gt;
Any eligible neuron can make and [https://wiki.internetcomputer.org/index.php?title=Neuron_Attributes_and_Commands#Make_Proposal submit a proposal]. To avoid being inundated by useless proposals, a user submitting a proposal has to pay a fee of 1 ICP when submitting a proposal, that they will receive back if the proposal is adopted (but that they will not receive back if the proposal is rejected).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example.&#039;&#039;&#039; &#039;&#039;Let’s consider a User C who would like to suggest that a new subnet is created that initially consists of two nodes: Node 1 and Node 2. Once User C controls a neuron, they can submit a proposal by specifying their neuron ID, the type of proposal that they would like to submit, and the proposal’s parameters. In our example, the proposal specifies that a new subnet should be created and the proposal&#039;s parameters consist of the initial nodes Node 1 and Node 2. Upon the receipt of this proposal, the governance canister first checks that this user is indeed the one controlling the neuron with the given ID and that this neuron is eligible to vote. If the requirements are met, the proposal is added to the governance canister.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
After a proposal is submitted by an eligible neuron, the proposal is created and stored in the governance canister. Moreover, the governance canister computes and stores additional information with each proposal. First, the [[voting power]] of each neuron is computed and stored together with the proposal. The sum of all of these voting powers also determines the &#039;&#039;total voting power&#039;&#039; associated with a given proposal.&lt;br /&gt;
&lt;br /&gt;
When a new proposal is created, the number of “yes” votes associated with the proposal is already increased by the proposer’s voting power. This reflects that the proposal already has the support of the user submitting it.&lt;br /&gt;
&lt;br /&gt;
Moreover, each proposal has an associated &#039;&#039;voting period,&#039;&#039; which determines the period of time over which votes for this proposal are accepted.&lt;br /&gt;
&lt;br /&gt;
===Viewing NNS Proposals===&lt;br /&gt;
You can see all the NNS proposals on the Internet Computer dashboard: https://dashboard.internetcomputer.org/governance&lt;br /&gt;
&lt;br /&gt;
===Discussing NNS Proposals===&lt;br /&gt;
Voters can freely discuss proposal anywhere they like. A lot of NNS proposals are discussed on the developer forum: https://forum.dfinity.org/c/roadmap/29.&lt;br /&gt;
&lt;br /&gt;
===Voting on a proposal===&lt;br /&gt;
After a proposal is submitted and added to the governance canister, other users who control neurons can [[ICP voting options|vote on the proposal]]. Currently, the most user-friendly way to vote on NNS proposals is via the NNS Frontend dapp: https://nns.ic0.app/. For voting, users would first learn which are the open proposals on the governance canister that they can actually vote on. This information is available, for example on Internet Computer dashboard: https://dashboard.internetcomputer.org/governance or in the [[NNS frontend dapp]]. &lt;br /&gt;
&lt;br /&gt;
If a neuron votes in favor of a proposal, the governance canister adds this neuron’s voting power, as stored with the proposal, to the “Yes”-votes associated with the proposal. Likewise, if a neuron votes against a proposal, the governance canister adds the neuron’s voting power to the “No”-votes of the proposal.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example.&#039;&#039;&#039; &#039;&#039;Assume that a given User D would like to reject the proposal that was just added by User C. To do so, User D would send their neuron ID and a “no” vote to the governance canister. The governance canister would check that the vote is coming from the correct user who controls the neuron and confirm that the neuron is eligible to vote. If the conditions are met, the governance canister would then add the voting power of User D to the “no” votes.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
====Neuron following and liquid democracy====&lt;br /&gt;
Users may not have the time or knowledge to participate in all voting decisions. Therefore, instead of directly voting on proposals, neuron holders may choose to delegate their vote to other neurons that they trust with certain decisions. This concept of delegating the right to vote to other voters who then effectively vote with more voting power is called &#039;&#039;liquid democracy.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Concretely, for each proposal topic a neuron can [[How to follow neurons|specify a set of other neurons that it would like to &#039;&#039;follow&#039;&#039;]] &#039;&#039;(so-called followees)&#039;&#039;. In addition, a neuron can specify a set of followees for &amp;quot;all other topics&amp;quot; that are not covered by specific rules. The governance canister keeps track of this relation of follower and followee neurons. It then automatically casts a vote for a follower neuron based on the decision of the followees. In particular, if more than 50% of the followees vote &amp;quot;yes&amp;quot;, then a &amp;quot;yes&amp;quot; vote is cast for the follower and if at least 50% of the followees vote &amp;quot;no&amp;quot;, then a &amp;quot;no&amp;quot; vote is cast for the follower. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;. &#039;&#039;Consider neuron N1 that follows the set of neurons {N2, N3, N4, N5} on all proposal topics. Consider now that a proposal is submitted by another neuron N6. Assume in a first scenario that first N2 votes &amp;quot;No&amp;quot; and then N3 votes &amp;quot;No&amp;quot; on the proposal. In that case, the governance canister will also send a &amp;quot;No&amp;quot; vote for N1 two out of four followees voted &amp;quot;No&amp;quot; (which also means that it is not possible anymore to get more than 50% &amp;quot;Yes&amp;quot; votes). Assume a second scenario where N2 votes &amp;quot;Yes&amp;quot; and then N3 votes &amp;quot;Yes&amp;quot; on the proposal. In that case, no vote is sent yet for N1. However, if either N4 and N5 also send a &amp;quot;Yes&amp;quot; vote, a &amp;quot;Yes&amp;quot; vote is also cast for N1.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This liquid democracy has great advantages. First, it allows even neurons that do not have enough knowledge of a certain topic to nevertheless participate in governance by choosing the neurons that they trust with certain decisions and by delegating their vote to them. In particular, a neuron can choose a different set of followees for different topics. Moreover, this mechanism allows neuron holders to get voting rewards from voting participation even if they do not have time to actively participate in all voting decision.&lt;br /&gt;
&lt;br /&gt;
=== Proposal decision and wait-for-quiet ===&lt;br /&gt;
A proposal can be &#039;&#039;decided&#039;&#039; in two ways:&lt;br /&gt;
# &#039;&#039;&#039;Absolute Majority before the voting period ends&#039;&#039;&#039;: At any point, even before the voting period ends, if an absolute majority (more than half of the total voting power stored in the proposal) has voted Yes, then the proposal is adopted and if an absolute majority has voted No, then the proposal is rejected.&lt;br /&gt;
# &#039;&#039;&#039;Simple Majority at the voting period’s end&#039;&#039;&#039;: When the voting period ends, if a simple majority (more than half of the cast votes) has voted Yes and the number of these Yes-votes constitute at least 3% of the total voting power, then the proposal is adopted. Otherwise, the proposal is rejected.&lt;br /&gt;
&lt;br /&gt;
What also plays into this is the fact that the governance voting algorithm also applies &#039;&#039;wait-for-quiet&#039;&#039;. The idea of wait-for-quiet is to decide proposals quickly when all voters agree, but increase the time that neurons can vote for proposals that are controversial. That means that the voting period can be dynamically increased, depending on the neurons’ votes. In particular, each time a proposal’s outcome is turned (either a Yes-majority is turned to a No-majority or vice versa), the proposal’s deadline is increased. Currently, a proposal&#039;s initial voting period is 4 days and can be increased by at most another 4 days. That is, the voting period that is taken into account for the above rules can be between 4 and 8 days, depending on the voting activity.&lt;br /&gt;
&lt;br /&gt;
=== Proposal execution ===&lt;br /&gt;
Recall that a proposal defines a method, a canister, and some parameters. As soon as a proposal is adopted, the defined method on the specified canister is called with the given parameters. This is done fully automatically by the governance canister. &lt;br /&gt;
&lt;br /&gt;
== Voting Rewards ==&lt;br /&gt;
Contributing to decision-making is one incentive for voters to lock their neurons, but they are also &#039;&#039;rewarded&#039;&#039; for participating in network governance.&lt;br /&gt;
&lt;br /&gt;
Specifically, each day the governance canister considers which proposal can be settled. It is then considered for each neuron in how many proposals they participated and with which voting power. Depending on this, the neurons get rewarded. Concretely, rewards are added to the neuron&#039;s attribute that is called &#039;&#039;maturity.&#039;&#039; Maturity represents ICP utility token that are not yet minted. &lt;br /&gt;
&lt;br /&gt;
A neuron holder can then profit from the maturity in two ways:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Spawn maturity:&#039;&#039;&#039; A neuron holder can choose to [[How to spawn a neuron|spawn a new neuron]] to get liquid ICP utility tokens worth the voting rewards. Spawning a new neuron has the effect that a new neuron with a new associated account on the ledger will be created, which contains the amount of staked ICP utility token equivalent to the maturity of the original neuron. In fact, the new tokens are minted and transferred to the new account, which is also recorded in the ledger canister. The new neuron has a small dissolve delay of 7 days. This means that users only need to wait a short amount of time to be able to unlock the tokens and use them freely, no matter what dissolve delay the original neuron has.&lt;br /&gt;
# &#039;&#039;&#039;Merge maturity&#039;&#039;&#039;: A neuron holder can choose to [[merge maturity]] to reinvest the voting rewards in the existing neuron. This neuron operation adds the ICP utility token equivalent of the maturity to the neuron&#039;s stake and adjusts the neuron&#039;s age accordingly. Effectively this means that the maturity is reinvested in the neuron and contributes to the neuron&#039;s voting power.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Cycles Minting Canister and Cycles&amp;lt;ref&amp;gt;https://medium.com/dfinity/the-network-nervous-system-governing-the-internet-computer-1d176605d66a&amp;lt;/ref&amp;gt;==&lt;br /&gt;
Besides governance participation and voting rewards, tokens can also be converted into cycles, which fuel computation and storage on the Internet Computer. Each canister on the Internet Computer, except for those on the NNS, uses cycles for computations and has some cycles stored within it. While the token price may vary over time, the goal of the cycles is to keep the price of computation roughly consistent over time.&lt;br /&gt;
&lt;br /&gt;
The canister responsible for converting ICP utility tokens into cycles is the &#039;&#039;Cycles Minting Canister.&#039;&#039; To convert cycles for creating or topping-up a canister, a user needs to send ICP utility tokens to the Cycles Minting Canister. This canister then burns the tokens and mints the cycles. &lt;br /&gt;
&lt;br /&gt;
The Cycles Minting Canister only facilitates the conversion of ICP utility tokens to cycles but not the other way around. Cycles are burned in canisters when they use computation and storage over time. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example.&#039;&#039;&#039; &#039;&#039;Consider User E who runs a canister on the Internet Computer and would like to top up the cycles of this canister so that it can perform even more computations. Also assume that this canister currently has 700 trillion cycles and User E would like to increase this number by 200 trillion. To do so, the user would send a command to the NNS that specifies the action of topping up their canister. Upon receiving this command, a transaction is made from the user’s account to the Cycles Minting Canister. As a result of this transaction, the Cycles Minting Canister would burn the tokens, mint new cycles, and send these freshly minted cycles to the user’s canister, meaning the canister balance is now 900 trillion cycles.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/dfinity/the-network-nervous-system-governing-the-internet-computer-1d176605d66a Medium article]&lt;br /&gt;
* [https://dfinity.org/howitworks/network-nervous-system-nns Video]&lt;br /&gt;
&lt;br /&gt;
=References=&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Users_interact_with_dapps_without_tokens&amp;diff=3025</id>
		<title>Users interact with dapps without tokens</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Users_interact_with_dapps_without_tokens&amp;diff=3025"/>
		<updated>2022-09-05T13:25:35Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;On the Internet Computer, a browser is all you need to interact with smart contracts. You do not have to overcome any hurdles such as creating a wallet, hold tokens, or pay expensive gas fees. This is in contrast to other blockchains, where users need to acquire tokens to do anything.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A key property that enables everyone to directly use a dapp is the &#039;&#039;reverse gas&#039;&#039; model. &lt;br /&gt;
&lt;br /&gt;
===Reverse Gas Model (AKA &amp;quot;canister pays&amp;quot;)===&lt;br /&gt;
In the &amp;quot;Reverse Gas model&amp;quot; developers pre-pay costs by loading canisters with computation cycles. So users can interact with a dapp without having to pay in tokens. Cycles are stable in cost are obtained by converting ICP tokens. This allows developers to know in advance how much they will need to spend on computation.&lt;br /&gt;
&lt;br /&gt;
As an example, the Motoko Playground dapp is hosted and executed entirely on-chain and it does not require visitors to pay for the computation: https://m7sm4-2iaaa-aaaab-qabra-cai.raw.ic0.app/. The [http://identity.ic0.app Internet Identity app] is also a free to use application running on the IC.&lt;br /&gt;
&lt;br /&gt;
===Examples===&lt;br /&gt;
There are many IC applications that allow to interact without tokens. One of the forerunning apps is [http://identity.ic0.app Internet Identity app] which allows to authenticate to many other apps. NFT Marketplaces like [https://entrepot.app/ Entrepot] allow to sign in with various wallets without the need of tokens.&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Users_interact_with_dapps_without_tokens&amp;diff=3024</id>
		<title>Users interact with dapps without tokens</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Users_interact_with_dapps_without_tokens&amp;diff=3024"/>
		<updated>2022-09-05T13:24:07Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;On the Internet Computer, a browser is all you need to interact with smart contracts. You do not have to overcome any hurdles such as creating a wallet, hold tokens, or pay expensive gas fees. This is in contrast to other blockchains, where users need to acquire tokens to do anything.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A key property that enables everyone to directly use a dapp is the &#039;&#039;reverse gas&#039;&#039; model. &lt;br /&gt;
&lt;br /&gt;
===Reverse Gas Model (AKA &amp;quot;canister pays&amp;quot;)===&lt;br /&gt;
Internet Computer dapps adopt a &amp;quot;Reverse Gas model&amp;quot; where developers load canisters with computation cycles in advance which in turn allows users to interact with a dapp without having to pay in tokens. Cycles are stable in cost are obtained by converting ICP tokens. This allows developers to know in advance how much they will need to spend on computation.&lt;br /&gt;
&lt;br /&gt;
As an example, the Motoko Playground dapp is hosted and executed entirely on-chain and it does not require visitors to pay for the computation: https://m7sm4-2iaaa-aaaab-qabra-cai.raw.ic0.app/. The [http://identity.ic0.app Internet Identity app] is also a free to use application running on the IC.&lt;br /&gt;
&lt;br /&gt;
===Examples===&lt;br /&gt;
There are many IC applications that allow to interact without tokens. One of the forerunning apps is [http://identity.ic0.app Internet Identity app] which allows to authenticate to many other apps. NFT Marketplaces like [https://entrepot.app/ Entrepot] allow to sign in with various wallets without the need of tokens.&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Users_interact_with_dapps_without_tokens&amp;diff=3023</id>
		<title>Users interact with dapps without tokens</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Users_interact_with_dapps_without_tokens&amp;diff=3023"/>
		<updated>2022-09-05T11:55:52Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;On the Internet Computer, a browser is all you need to interact with smart contracts. You do not have to overcome hurdles such as creating a wallet, hold tokens or pay expensive gas fees. This is in contrast with other blockchains, where users need to acquire tokens to do anything.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Reverse Gas Model (AKA &amp;quot;canister pays&amp;quot;)===&lt;br /&gt;
Internet Computer dapps adopt a &amp;quot;Reverse Gas model&amp;quot; where developers load canisters with computation cycles in advance which in turn allows users to interact with a dapp without having to pay in tokens. Cycles are stable in cost are obtained by converting ICP tokens. This allows developers to know in advance how much they will need to spend on computation.&lt;br /&gt;
&lt;br /&gt;
As an example, the Motoko Playground dapp is hosted and executed entirely on-chain and it does not require visitors to pay for the computation: https://m7sm4-2iaaa-aaaab-qabra-cai.raw.ic0.app/. The [http://identity.ic0.app Internet Identity app] is also a free to use application running on the IC.&lt;br /&gt;
&lt;br /&gt;
===Examples===&lt;br /&gt;
There are many IC applications that allow to interact without tokens. One of the forerunning apps is [http://identity.ic0.app Internet Identity app] which allows to authenticate to many other apps. NFT Marketplaces like [https://entrepot.app/ Entrepot] allow to sign in with various wallets without the need of tokens.&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Multi-block_TXs&amp;diff=2951</id>
		<title>Multi-block TXs</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Multi-block_TXs&amp;diff=2951"/>
		<updated>2022-08-30T09:25:30Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Note: this is a feature in the release process. Check to see current production network status.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The Internet Computer blockchain can stretch the execution of a single transaction across multiple blocks. This allows very-long running smart contract computations to be initiated.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
By contrast, traditional blockchains that host smart contracts, always need to finish processing a transaction within a single block. In practice this means that when a smart contract function is invoked by a transaction, it must complete execution within the per-block &amp;quot;gas limit&amp;quot; ([[gas]] is the equivalent of [[cycles]] on the Internet Computer).&lt;br /&gt;
&lt;br /&gt;
The Internet Computer is designed to allow &#039;&#039;any&#039;&#039; online system or service to be built using smart contracts called canisters, to support a &amp;quot;blockchain singularity.&amp;quot; This means that when a transaction invokes a smart contract, the computation involved must be able to run for a very long time if required, and consume as many computational [[cycles]] as needed.&lt;br /&gt;
&lt;br /&gt;
This means that on the Internet Computer, a smart contract is capable of performing complex AI calculations, or applying a graphical filter to an image, say — although there is still a &amp;quot;max cycles limit,&amp;quot; it&#039;s just very high.&lt;br /&gt;
&lt;br /&gt;
Multi-block TXs are made possible by a broader aspect of the Internet Computer&#039;s design, called [[Deterministic Time Slicing (DTS)]].&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=How_much_does_it_cost_to_run_a_dapp_on_the_Internet_Computer%3F&amp;diff=2858</id>
		<title>How much does it cost to run a dapp on the Internet Computer?</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=How_much_does_it_cost_to_run_a_dapp_on_the_Internet_Computer%3F&amp;diff=2858"/>
		<updated>2022-08-25T13:44:58Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Computation and Storage Costs==&lt;br /&gt;
&lt;br /&gt;
The Internet Computer requires computation operations and storage to be supported by [[cycles]]. Cycles are generated from the conversion of Internet Computer (ICP) utility tokens.&lt;br /&gt;
&lt;br /&gt;
==The Role of the Network Nervous System (NNS) in Defining Costs==&lt;br /&gt;
&lt;br /&gt;
The Internet Computer is a decentralized public utility, controlled by the NNS –– the network’s open, algorithmic governance system. The NNS fundamentally controls how many cycles are required for low-level computation actions for computation and storage. The number of cycles needed for individual computations will vary based on a number of factors considered by the NNS, including proposals from the community.&lt;br /&gt;
&lt;br /&gt;
==Details: Cost of Compute and Storage Transactions on the Internet Computer==&lt;br /&gt;
Canisters (dapps/smart contracts) computations running on the Internet Computer blockchain are fueled by “cycles”, which play a similar role to “gas” on Ethereum. There are several major differences, however. One of the most fundamental differences is that Ethereum leverages “user pays” and the Internet Computer leverages “smart contract pays” (sometimes called “reverse gas”) model. Whereas the Ethereum blockchain requires end-users to send payments for the gas smart contracts consumed with every transaction, on the Internet Computer, canisters (dapps/smart contracts)are pre-charged with cycles, such that contracts effectively pay for their own computation - freeing users from the responsibility.&lt;br /&gt;
&lt;br /&gt;
See below for details on the cost of compute and storage transactions&amp;lt;ref&amp;gt;https://sdk.dfinity.org/docs/developers-guide/computation-and-storage-costs.html&amp;lt;/ref&amp;gt; on the Internet Computer as of July 26, 2021.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Table 1. Cycles Cost per Transaction (as of July 26, 2021)&lt;br /&gt;
|-&lt;br /&gt;
! Transaction !! Description !! All Application Subnets&lt;br /&gt;
|-&lt;br /&gt;
| Canister Created || For creating canisters on a subnet || 100&#039;000&#039;000&#039;000&lt;br /&gt;
|-&lt;br /&gt;
| Compute Percent Allocated Per Second || For each percent of the reserved compute allocation (a scarce resource). || 100&#039;000&lt;br /&gt;
|-&lt;br /&gt;
| Update Message Execution || For every update message executed || 590&#039;000&lt;br /&gt;
|-&lt;br /&gt;
| Ten Update Instructions Execution || For every 10 instructions executed when executing update type messages || 4&lt;br /&gt;
|-&lt;br /&gt;
| Xnet Call || For every inter-canister call performed (includes the cost for sending the request and receiving the response) || 260&#039;000&lt;br /&gt;
|-&lt;br /&gt;
| Xnet Byte Transmission || For every byte sent in an inter-canister call (for bytes sent in the request and response) || 1&#039;000&lt;br /&gt;
|-&lt;br /&gt;
| Ingress Message Reception || For every ingress message received || 1&#039;200&#039;000&lt;br /&gt;
|-&lt;br /&gt;
| Ingress Byte Reception || For every byte received in an ingress message || 2&#039;000&lt;br /&gt;
|-&lt;br /&gt;
| GB Storage Per Second || For storing a GB of data per second || 127&#039;000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The $USD cost for transactions below is based on the above cycle costs. 1 XDR is equal to 1 Trillion cycles. As of July 26, 2021, the exchange rate for 1 XDR = $1.42. The exchange rate for USD &amp;lt;&amp;gt; XDR may vary and it will impact the conversion rate. For XDR exchange rates please visit: https://www.imf.org/external/np/fin/data/rms_sdrv.aspx&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Table 2. Cost per Transaction in $USD (as of July 26, 2021)&lt;br /&gt;
|-&lt;br /&gt;
! Transaction !! Description !! All Application Subnets&lt;br /&gt;
|-&lt;br /&gt;
| Canister Created || For creating canisters on a subnet || $0.142&lt;br /&gt;
|-&lt;br /&gt;
| Compute Percent Allocated Per Second || For each percent of the reserved compute allocation (a scarce resource). || $0.000000142&lt;br /&gt;
|-&lt;br /&gt;
| Update Message Execution || For every update message executed || $0.0000008378&lt;br /&gt;
|-&lt;br /&gt;
| Ten Update Instructions Execution || For every 10 instructions executed when executing update type messages || $0.00000000000568&lt;br /&gt;
|-&lt;br /&gt;
| Xnet Call || For every inter-canister call performed (includes the cost for sending the request and receiving the response) || $0.0000003692&lt;br /&gt;
|-&lt;br /&gt;
| Xnet Byte Transmission || For every byte sent in an inter-canister call (for bytes sent in the request and response) || $0.00000000142&lt;br /&gt;
|-&lt;br /&gt;
| Ingress Message Reception || For every ingress message received || $0.000001704&lt;br /&gt;
|-&lt;br /&gt;
| Ingress Byte Reception || For every byte received in an ingress message || $0.00000000284&lt;br /&gt;
|-&lt;br /&gt;
| GB Storage Per Second || For storing a GB of data per second || $0.00000018034&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==References== &lt;br /&gt;
&lt;br /&gt;
{{reflist}}&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=How_much_does_it_cost_to_run_a_dapp_on_the_Internet_Computer%3F&amp;diff=2857</id>
		<title>How much does it cost to run a dapp on the Internet Computer?</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=How_much_does_it_cost_to_run_a_dapp_on_the_Internet_Computer%3F&amp;diff=2857"/>
		<updated>2022-08-25T13:44:35Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Computation and Storage Costs==&lt;br /&gt;
&lt;br /&gt;
The Internet Computer requires computation operations and storage to be supported by [[cycles]]. Cycles are generated from the conversion of Internet Computer (ICP) utility tokens.&lt;br /&gt;
&lt;br /&gt;
==The Role of the Network Nervous System (NNS) in Defining Costs==&lt;br /&gt;
&lt;br /&gt;
The Internet Computer is a decentralized public utility, controlled by the NNS –– the network’s open, algorithmic governance system. The NNS fundamentally controls how many cycles are required for low-level computation actions for computation and storage. The number of cycles needed for individual computations will vary based on a number of factors considered by the NNS, including proposals from the community.&lt;br /&gt;
&lt;br /&gt;
==Details: Cost of Compute and Storage Transactions on the Internet Computer==&lt;br /&gt;
Canisters (dapps/smart contracts) computations running on the Internet Computer blockchain are fueled by “cycles”, which play a similar role to “gas” on Ethereum. There are several major differences, however. One of the most fundamental differences is that Ethereum leverages “user pays” and the Internet Computer leverages “smart contract pays” (sometimes called “reverse gas”) model. Whereas the Ethereum blockchain requires end-users to send payments for the gas smart contracts consumed with every transaction, on the Internet Computer, canisters (dapps/smart contracts)are pre-charged with cycles, such that contracts effectively pay for their own computation - freeing users from the responsibility.&lt;br /&gt;
&lt;br /&gt;
See below for details on the cost of compute and storage transactions&amp;lt;ref&amp;gt;https://sdk.dfinity.org/docs/developers-guide/computation-and-storage-costs.html&amp;lt;/ref&amp;gt; on the Internet Computer as of July 26, 2021.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Table 1. Cycles Cost per Transaction (as of July 26, 2021)&lt;br /&gt;
|-&lt;br /&gt;
! Transaction !! Description !! All Application Subnets&lt;br /&gt;
|-&lt;br /&gt;
| Canister Created || For creating canisters on a subnet || 100&#039;000&#039;000&#039;000&lt;br /&gt;
|-&lt;br /&gt;
| Compute Percent Allocated Per Second || For each percent of the reserved compute allocation (a scarce resource). || 100_000&lt;br /&gt;
|-&lt;br /&gt;
| Update Message Execution || For every update message executed || 590&#039;000&lt;br /&gt;
|-&lt;br /&gt;
| Ten Update Instructions Execution || For every 10 instructions executed when executing update type messages || 4&lt;br /&gt;
|-&lt;br /&gt;
| Xnet Call || For every inter-canister call performed (includes the cost for sending the request and receiving the response) || 260&#039;000&lt;br /&gt;
|-&lt;br /&gt;
| Xnet Byte Transmission || For every byte sent in an inter-canister call (for bytes sent in the request and response) || 1&#039;000&lt;br /&gt;
|-&lt;br /&gt;
| Ingress Message Reception || For every ingress message received || 1&#039;200&#039;000&lt;br /&gt;
|-&lt;br /&gt;
| Ingress Byte Reception || For every byte received in an ingress message || 2&#039;000&lt;br /&gt;
|-&lt;br /&gt;
| GB Storage Per Second || For storing a GB of data per second || 127&#039;000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The $USD cost for transactions below is based on the above cycle costs. 1 XDR is equal to 1 Trillion cycles. As of July 26, 2021, the exchange rate for 1 XDR = $1.42. The exchange rate for USD &amp;lt;&amp;gt; XDR may vary and it will impact the conversion rate. For XDR exchange rates please visit: https://www.imf.org/external/np/fin/data/rms_sdrv.aspx&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Table 2. Cost per Transaction in $USD (as of July 26, 2021)&lt;br /&gt;
|-&lt;br /&gt;
! Transaction !! Description !! All Application Subnets&lt;br /&gt;
|-&lt;br /&gt;
| Canister Created || For creating canisters on a subnet || $0.142&lt;br /&gt;
|-&lt;br /&gt;
| Compute Percent Allocated Per Second || For each percent of the reserved compute allocation (a scarce resource). || $0.000000142&lt;br /&gt;
|-&lt;br /&gt;
| Update Message Execution || For every update message executed || $0.0000008378&lt;br /&gt;
|-&lt;br /&gt;
| Ten Update Instructions Execution || For every 10 instructions executed when executing update type messages || $0.00000000000568&lt;br /&gt;
|-&lt;br /&gt;
| Xnet Call || For every inter-canister call performed (includes the cost for sending the request and receiving the response) || $0.0000003692&lt;br /&gt;
|-&lt;br /&gt;
| Xnet Byte Transmission || For every byte sent in an inter-canister call (for bytes sent in the request and response) || $0.00000000142&lt;br /&gt;
|-&lt;br /&gt;
| Ingress Message Reception || For every ingress message received || $0.000001704&lt;br /&gt;
|-&lt;br /&gt;
| Ingress Byte Reception || For every byte received in an ingress message || $0.00000000284&lt;br /&gt;
|-&lt;br /&gt;
| GB Storage Per Second || For storing a GB of data per second || $0.00000018034&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==References== &lt;br /&gt;
&lt;br /&gt;
{{reflist}}&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Internet_Identity&amp;diff=2785</id>
		<title>Internet Identity</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Internet_Identity&amp;diff=2785"/>
		<updated>2022-08-16T09:08:12Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In order to access and interact with applications running on the Internet Computer, it is often necessary for users to authenticate. One of the most commonly used methods to authenticate on the Internet Computer is via Internet Identity.&lt;br /&gt;
&lt;br /&gt;
Internet Identity (II)(https://identity.ic0.app/) is a blockchain authentication framework supported by the Internet Computer. Users begin the process by creating identity &amp;quot;anchors&amp;quot; to which they assign compatible cryptographically enabled devices, such as the fingerprint sensor on a laptop, the face ID system on a phone, or a portable HSM, such as a YubiKey or Ledger wallet. Thereafter, they can signup and authenticate to dapps running on the Internet Computer using any of the devices they have assigned to their anchor. This provides a high level of convenience, allowing users to authenticate to dapps with a very low level of friction, yet, while also benefiting from a high level of security and without the need to directly manage or handle cryptographic key material themselves. The system offers some degree of privacy for users, by ensuring that whenever an anchor is used to interact with a dapp, the dapp sees a specially generated pseudonym for that dapp, which prevents the dapp from tracking users across the various dapps they use. A user can create as many identity anchors as they wish.&lt;br /&gt;
&lt;br /&gt;
Unlike most authentication methods, users are not required to set and manage passwords or provide any personal identifying information to dapps or to Internet Identity.&lt;br /&gt;
&lt;br /&gt;
==How the technology works==&lt;br /&gt;
&lt;br /&gt;
Internet Identity builds on Web Authentication (WebAuthn) API supported by modern web browsers and operating systems, and the &amp;quot;chain key cryptography&amp;quot; framework that powers the Internet Computer. Essentially, the Internet Computer signs the list of public keys inside the devices assigned to each anchor using its master chain key, which client side code, for example running in the web browser, is aware of.&lt;br /&gt;
&lt;br /&gt;
Dapps that integrate with Internet Identity prompt the user to authenticate using an identity anchor. If the user doesn&#039;t have an identity anchor yet, it is easy to create one and add authentication methods to it. For more details, see [https://smartcontracts.org/docs/ic-identity-guide/auth-how-to.html How to use Internet Identity]. For each device added, a pair of cryptographic keys (private and public key) is generated. The public key is stored on the Internet Computer blockchain, while the private key remains locked inside the authentication device together with any biometric data that governs access to it. Adding multiple authentication devices to an identity anchor allows the user to access dapps across all of their devices.&lt;br /&gt;
&lt;br /&gt;
When a user accesses a dapp that uses Internet Identity for authentication, they first specify the identity anchor they want to use. After authenticating using an identity anchor using an assigned device, their browser connects to Internet Identity and generates a session key for use with that dapp. Finally, the user is asked to authorize access to the dapp.&lt;br /&gt;
&lt;br /&gt;
The user&#039;s browser downloads the authorization and then redirects the user to the dapp. The dapp verifies the authorization from Internet Identity and grants the user access as an application-specific anonymous identity that we call a pseudonym. Internally, users have a different pseudonym for each dapp, but a pseudonym for any single dapp is the same across all of the user&#039;s devices. All devices of a particular user simple represent different methods they can use to authenticate their Internet Identity anchor.&lt;br /&gt;
&lt;br /&gt;
A user can register as many identity anchors as they want for redundancy, or different purposes. For example, a user may create an anchor for use with SocialFi or GameFi, and another for use with pure DeFi. They may only feel comfortable adding facial recognition to their SocialFi and GameFi anchor, say, and only use more secure portable HSM devices like YubiKeys and Ledger wallets with their pure DeFi anchor.&lt;br /&gt;
&lt;br /&gt;
===Registration===&lt;br /&gt;
&lt;br /&gt;
When registering a new identity anchor, the user’s browser first generates a fresh session key pair. Once the user activates their secure device, it generates a fresh key pair that will act as the master key pair for this identity anchor. The secure device then signs a delegation from the master public key {{code | master_pk}} to the session public key {{code | session_pk}}, so that the browser can sign a registration ingress message under {{code | session_pk}} using a delegated signature under the principal &lt;br /&gt;
{{Code|&amp;lt;nowiki&amp;gt;SHA224(master_pk) · 0x02&amp;lt;/nowiki&amp;gt;}}.&lt;br /&gt;
&lt;br /&gt;
Note that the secret key corresponding to {{code | master_pk}} never leaves the secure device, while the secret key corresponding to {{code | session_pk}} is kept in browser storage where the same-origin policy shields it from being accessed by other canisters than the II canister.&lt;br /&gt;
The II canister creates a new II anchor and links the principal to the identity anchor. When the user adds an additional device to the anchor, the II canister adds the principals derived from the master public key of the new device to the anchor. &lt;br /&gt;
&lt;br /&gt;
All subsequent operations for this identity anchor must be authenticated under one of the principals associated with the anchor. The user’s browser will use an existing session key pair if the browser memory for the II canister origin contains one with a valid delegation, or creates a new one by repeating the previous procedure. Note that II does not use local storage for II – that&#039;s why the user always has to use biometrics/tap the Yubikey. Once the user closes the tab, the delegation is gone.&lt;br /&gt;
&lt;br /&gt;
===Authentication===&lt;br /&gt;
A single page load can involve multiple signed requests and responses. To avoid a user having to activate their security token for each individual message, the user’s browser will generate a session key pair for each relying canister and have the public key for the session certified by the II canister.&lt;br /&gt;
&lt;br /&gt;
More specifically, when the user visits a relying canister and clicks to login with Internet Identity, the user’s browser generates a fresh session key pair and stores it in the browser storage for the relying canister; we refer to the public key as {{code |rel_session_pk}}. The browser is then redirected to the II canister, passing {{code |rel_session_pk}} along by encoding it as part of the URL.&lt;br /&gt;
&lt;br /&gt;
The browser signs an ingress message to log in to the II canister using the authentication procedure above, meaning, re-using a valid session key for the II canister if one exists, or creating a new one if not.&lt;br /&gt;
&lt;br /&gt;
When the user clicks to agree to authenticate to the relying canister, the browser creates a second ingress message to the II canister (also signed with the session public key) that contains the relying canister identity and the relying session public key {{code |rel_session_pk}} &lt;br /&gt;
&lt;br /&gt;
The II canister computes a unique self-authenticating principal for this user anchor and this relying canister as&lt;br /&gt;
&lt;br /&gt;
{{Code|&amp;lt;nowiki&amp;gt;SHA224(|id_provider| · id_provider · seed) · 02&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
where the seed is computed based on a secret salt held by the II canister, the user’s identity anchor, and the relying canister as&lt;br /&gt;
&lt;br /&gt;
{{Code|&amp;lt;nowiki&amp;gt;SHA256(|salt| · salt · |anchor| · anchor · |rel_canister_id| · rel_canister_id)&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
where anchor is the user’s identity anchor, {{code | rel_canister_id}} is the principal of the relying canister, and seed is a secret seed held by the II canister. &lt;br /&gt;
&lt;br /&gt;
The salt was randomly chosen when the II canister was initialized and is stored in the II canister state. This offers some privacy against canisters that try to track users by linking principals that belong to the same identity anchor. The privacy guarantee does not hold against an adversary who knows the secret seed, though, e.g., a node provider participating in the subnet of the II canister. Note that this only affects privacy, not security: knowledge of the seed does not enable the adversary to impersonate any users.&lt;br /&gt;
&lt;br /&gt;
In its response, the II canister includes the nonce as well as a certified variable (also known as a canister signature) linking the relying canister ID to {{code |rel_session_pk}} and an expiry  time. The user’s browser is then redirected to the relying canister, where it signs ingress messages under {{code |rel_session_pk}}. &lt;br /&gt;
&lt;br /&gt;
==User experience==&lt;br /&gt;
&lt;br /&gt;
[[https://identity.ic0.app/ |Internet Identity]] does &#039;&#039;&#039;not&#039;&#039;&#039; use passwords and usernames to log in. Internet Identity takes advantage of the Web Authentication (WebAuthn) API to provide secure cryptographic authentication. This means that a user authenticates by &amp;quot;something they have&amp;quot; (e.g a phone, yubikey, etc...) rather than &amp;quot;something they know&amp;quot; (e.g. a password).&lt;br /&gt;
&lt;br /&gt;
From the point of view of the user, a user would use the following methods to authenticate:&lt;br /&gt;
&lt;br /&gt;
#Computers&lt;br /&gt;
##Yubikey or Ledger hardware wallet (with computers with USB ports)&lt;br /&gt;
##Thumbprint or face recognition (with computers with electronic fingerprint recognition features like [https://en.wikipedia.org/wiki/Touch_ID Touch ID] or [[wikipedia:Features_new_to_Windows_10#Windows_Hello|Windows Hello]])&lt;br /&gt;
#Smartphones&lt;br /&gt;
##Face ID (for smartphones with facial recognition systems)&lt;br /&gt;
##Thumbprint (for smartphones with electronic fingerprint recognition features like [https://en.wikipedia.org/wiki/Touch_ID Touch ID])&lt;br /&gt;
&lt;br /&gt;
==Key Features==&lt;br /&gt;
&lt;br /&gt;
===Ease of Use===&lt;br /&gt;
Internet Identity provides a secure way for users to generate identity anchors and authenticate to applications running on the Internet Computer without the need to remember and manage passwords.&lt;br /&gt;
&lt;br /&gt;
===Privacy===&lt;br /&gt;
No personal identifying information is needed to generate an anchor and as Internet Identity generates different pseudonyms for different applications, privacy is provided for users as interactions across dapps cannot be tracked. &lt;br /&gt;
&lt;br /&gt;
===Availability===&lt;br /&gt;
Since an anchor&#039;s key material is generated and stored on the user&#039;s device, it is not the case that a particular service or application can hinder the availability of an individual&#039;s anchor as a method of authentication.&lt;br /&gt;
&lt;br /&gt;
==Key Concepts==&lt;br /&gt;
&lt;br /&gt;
===Anchor===&lt;br /&gt;
An anchor is a number attached to a user&#039;s identity. This number is auto-generated by the system and there is only one per identity. &lt;br /&gt;
&lt;br /&gt;
Example: {{code | 193431}}&lt;br /&gt;
&lt;br /&gt;
===Devices===&lt;br /&gt;
Users can add many devices to the same identity anchor. A common example is that users may add their smartphone and desktop computer to an identity anchor. It is recommended to add multiple devices in case users lose access to a device. Devices names are chosen by the user and there can be many per identity.&lt;br /&gt;
&lt;br /&gt;
Example:  &lt;br /&gt;
&lt;br /&gt;
*{{code | &amp;quot;Macbook Pro Alice&amp;quot;}}&lt;br /&gt;
*{{code | &amp;quot;iPhone Alice&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
==Recovery Mechanisms==&lt;br /&gt;
&lt;br /&gt;
In addition to adding multiple devices and using security keys, a user can set up account recovery at the prompt by clicking Add a recovery mechanism to an Identity Anchor.&lt;br /&gt;
&lt;br /&gt;
===Seed Phrase===&lt;br /&gt;
&lt;br /&gt;
A user can select this option to generate a cryptographically-secure seed phrase that they can use to recover an Identity Anchor. It is important that the user ensures this phrase is stored somewhere safe and is known only to the user, as anyone who knows the seed phrase will be able to take full control of this Identity Anchor. Note that the first string in a user&#039;s seed phrase is the Identity Anchor. This number to begin the recovery process.&lt;br /&gt;
&lt;br /&gt;
The user must click the copy button and then continue or the seed phrase will not be registered.&lt;br /&gt;
&lt;br /&gt;
===Security Key===&lt;br /&gt;
&lt;br /&gt;
A dedicated security key can be used to recover an Identity Anchor in the event that a user loses access to their authorized devices. This key must be different from the ones the user actively used to authenticate to Internet Identity using the given Identity Anchor. This key should be kept somewhere safe and ensure it is available only to the user. As above, anyone in possession of this security key will be able to take full control of the user&#039;s Identity Anchor. A user will need to know the Identity Anchor to begin recovery.&lt;br /&gt;
&lt;br /&gt;
==Security==&lt;br /&gt;
&lt;br /&gt;
Internet Identity is a canister running on the NNS network, so developers can verify it is running the code it is claimed to run. To verify the code, see [https://medium.com/dfinity/internet-identity-the-end-of-usernames-and-passwords-ff45e4861bf7 Verifying the Internet Identity Code: A Walkthrough].&lt;br /&gt;
&lt;br /&gt;
==Support==&lt;br /&gt;
&lt;br /&gt;
To see current support of WebAuthn, see [https://caniuse.com/?search=webauthn Webauthn Support].&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
&lt;br /&gt;
===How do I get an Identity Anchor from Internet Identity?===&lt;br /&gt;
The one and only place to generate an Identity Anchor is to visit https://identity.ic0.app/.&lt;br /&gt;
&lt;br /&gt;
Detailed instructions can be found by visiting https://smartcontracts.org/docs/ic-identity-guide/auth-how-to.html&lt;br /&gt;
&lt;br /&gt;
===Do I really need to link another device or save the seed-phrase?===&lt;br /&gt;
Although it is not necessary, it is really useful to link another device or to save the seed-phrase in case you lose access to your Identity Anchor on a particular device. Further, as your Identity Anchor may be used to generate accounts for wallets or dapps, access to these may also be lost if you lose access to your Identity Anchor.&lt;br /&gt;
&lt;br /&gt;
===What happens if I lose my device?===&lt;br /&gt;
If you lose your device and want to recover, you can click on the &#039;Lost access and want to recover&#039; link at https://identity.ic0.app/.&lt;br /&gt;
&lt;br /&gt;
If you have an Identity Anchor tied to only one device and you lose that one device, you will be locked out. As a best practice, we recommend adding multiple devices and recovery mechanisms to every Identity Anchor.&lt;br /&gt;
&lt;br /&gt;
===How can I add more devices?===&lt;br /&gt;
If you want to add another device, you can click on the &#039;Already have an anchor but using a new device?&#039; link at https://identity.ic0.app/&lt;br /&gt;
&lt;br /&gt;
Detailed instructions can be found here: https://smartcontracts.org/docs/ic-identity-guide/auth-how-to.html#_add_a_device&lt;br /&gt;
&lt;br /&gt;
===Does Internet Identity share my personal information with dapps when I authenticate?===&lt;br /&gt;
No. Internet Identity uses a different Principal (a &amp;quot;pseudonym&amp;quot;) for each dapp that you authenticate to using Internet Identity. Since the pseudonyms Internet Identity generates for you are different for each dapp, dapps cannot use them to track you outside of their realm.&lt;br /&gt;
&lt;br /&gt;
===Does Internet Identity support Windows Hello?===&lt;br /&gt;
Yes! Internet Identity supports authenticating via Windows Hello. If Windows Hello is set up on your PC then Internet Identity will offer you to authenticate through Windows Hello.&lt;br /&gt;
&lt;br /&gt;
Detailed instructions can be found here: https://smartcontracts.org/docs/ic-identity-guide/hello-guide.html&lt;br /&gt;
&lt;br /&gt;
===Why can&#039;t I log in with a new device?===&lt;br /&gt;
If you can&#039;t log in with an existing Identity Anchor, it may be the case that the anchor hasn&#039;t been added to the new device. If this is the case, simply visit https://identity.ic0.app/ , click on the &#039;Already have an anchor but using a new device?&#039; link, add the device and try again. &lt;br /&gt;
&lt;br /&gt;
It may also be the case that the face ID or the fingerprint system is not enabled on the device. Ensure that these are enabled, and try to log in again. &lt;br /&gt;
&lt;br /&gt;
=== Is there a way to revoke a dapp&#039;s access to my Identity Anchor?===&lt;br /&gt;
There is no explicit revocation method, but privilege delegation to Internet Identity is limited in time, so will expire. Alternatively, simply once the browser tab is closed, the delegation is gone. &lt;br /&gt;
&lt;br /&gt;
== See also==&lt;br /&gt;
&lt;br /&gt;
*[https://smartcontracts.org/docs/ic-identity-guide/what-is-ic-identity.html What is Internet Identity]&lt;br /&gt;
*[https://medium.com/dfinity/internet-identity-the-end-of-usernames-and-passwords-ff45e4861bf7 Internet Identity: Easy Web3 Authentication]&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=SNS_Tokenization_Considerations&amp;diff=2762</id>
		<title>SNS Tokenization Considerations</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=SNS_Tokenization_Considerations&amp;diff=2762"/>
		<updated>2022-07-28T08:20:10Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tokenizing and decentralising an application via an SNS requires planning and consideration for tokenomics and governance.  The following steps can be used by a developer or founder to better prepare for the launch of a token.&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Identify The Tokenization Goal ===&lt;br /&gt;
The first step of a tokenization strategy is identifying the goal of launching a token.  The act of tokenizing an application is an intentional decision by a developer or founder to sacrifice ownership and control over their application.  The tokenization goal should provide justification for that sacrifice.  Application owners will choose to tokenize for many different reasons, including:&lt;br /&gt;
* To raise funds for further development or growth&lt;br /&gt;
* To attract additional developers to the application&lt;br /&gt;
* To increase the user base of the application&lt;br /&gt;
* To align the company to a specific mission&lt;br /&gt;
* To serve as a utility token within the application&lt;br /&gt;
&lt;br /&gt;
Tokenomic decisions will present many trade-offs and it is difficult to optimize to multiple goals.  Identifying the main goal of launching a token will help the developer or founder in further steps.&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Identify and Plan the Token Audience ===&lt;br /&gt;
Once a tokenomic goal is identified, identifying the target audience for owning the token is next.  Think through the type of person or entity who would best achieve the identified goal from step 1.  Consider whether the intended audience should have a skill set, a specific resource or contain certain knowledge that will align with the goal of tokenization.  Consider also the intended breadth of the token ownership, including whether the strategic goal is more achievable with few token holders or with thousands or millions of holders.&lt;br /&gt;
&lt;br /&gt;
Next, plan a communication strategy for how your target audience will become informed about the token. How will they know about the token launch?   &lt;br /&gt;
 Consider what their goals will be in owning the token and craft the communications to highlight them. Understanding the goals of your intended audience and the best methods to communicate with them is necessary planning to have a successful token launch.&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Determine Level of Ownership and Control ===&lt;br /&gt;
The act of tokenizing an application is an act of giving some percentage of ownership and control over the application.  The founder or developer should consider how much ownership and control to give up.  This decision will directly impact the initial token distribution.  Some considerations that should factor into this decision include:&lt;br /&gt;
* How aligned are the initial token holders to the core mission of the application?&lt;br /&gt;
* Is there a limit in scope of control that the token holders should have?&lt;br /&gt;
* What is the optimal long term ownership and control structure for the application?&lt;br /&gt;
* Who will make future contributions to the application&#039;s code base?&lt;br /&gt;
&lt;br /&gt;
The more control and ownership a token is provided, the more valuable that token will be.  However, more ownership and control provided to the initial token distribution also leads to increased risks to the application&#039;s mission, development and engagement.&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Design the Tokenomic Inflation ===&lt;br /&gt;
Most tokens have an established token inflation rate and the SNS allows the token designers to set the initial inflation rate, the final inflation rate and the time to achieve that final inflation rate.  The configuration of these parameters should be used to drive intended behavior by the token holders.  Some considerations include:&lt;br /&gt;
* Higher inflation rates will encourage more staking of the token.  This is advantageous if the intended purpose of the token is governance over the application.  It&#039;s disadvantageous if the intended purpose of the token is utility within the application.&lt;br /&gt;
* If the purpose of the token is utility within the application or to reward user growth of the application, set the inflation rate to mimic the projected growth trajectory of the application.  Periods of higher growth rates for the application should have higher inflation rates to ensure the application ecosystem operates efficiently.&lt;br /&gt;
* Higher inflation rates pose more risks to the token value and sustainability of the token.&lt;br /&gt;
* Remember that the token holders will be able to adjust the inflation parameters later on.&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Design the Staking Parameters ===&lt;br /&gt;
The SNS allows the application&#039;s developer to set a dissolve delay bonus and age bonus for staked tokens.  For both of these configurations, setting higher parameter values will result in more long-term staking.  This is valuable if the purpose of the token is primarily for governance of the application and the expected lifetime of the application is many years or decades.  The downside of configuring higher dissolve delay and age bonuses is that it could result in more tokens locked long term, which may impact the ecosystem if the token is used for utility or other rewards.&lt;br /&gt;
&lt;br /&gt;
The launch of a token for an application is not just a technical challenge.  It requires an overall strategy, including a clear goal and communication strategy.&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=SNS_Tokenization_Considerations&amp;diff=2761</id>
		<title>SNS Tokenization Considerations</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=SNS_Tokenization_Considerations&amp;diff=2761"/>
		<updated>2022-07-28T08:19:38Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tokenizing and decentralising an application via an SNS requires planning and consideration for tokenomics.  The following steps can be used by a developer or founder to better prepare for the launch of a token.&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Identify The Tokenization Goal ===&lt;br /&gt;
The first step of a tokenization strategy is identifying the goal of launching a token.  The act of tokenizing an application is an intentional decision by a developer or founder to sacrifice ownership and control over their application.  The tokenization goal should provide justification for that sacrifice.  Application owners will choose to tokenize for many different reasons, including:&lt;br /&gt;
* To raise funds for further development or growth&lt;br /&gt;
* To attract additional developers to the application&lt;br /&gt;
* To increase the user base of the application&lt;br /&gt;
* To align the company to a specific mission&lt;br /&gt;
* To serve as a utility token within the application&lt;br /&gt;
&lt;br /&gt;
Tokenomic decisions will present many trade-offs and it is difficult to optimize to multiple goals.  Identifying the main goal of launching a token will help the developer or founder in further steps.&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Identify and Plan the Token Audience ===&lt;br /&gt;
Once a tokenomic goal is identified, identifying the target audience for owning the token is next.  Think through the type of person or entity who would best achieve the identified goal from step 1.  Consider whether the intended audience should have a skill set, a specific resource or contain certain knowledge that will align with the goal of tokenization.  Consider also the intended breadth of the token ownership, including whether the strategic goal is more achievable with few token holders or with thousands or millions of holders.&lt;br /&gt;
&lt;br /&gt;
Next, plan a communication strategy for how your target audience will become informed about the token. How will they know about the token launch?   &lt;br /&gt;
 Consider what their goals will be in owning the token and craft the communications to highlight them. Understanding the goals of your intended audience and the best methods to communicate with them is necessary planning to have a successful token launch.&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Determine Level of Ownership and Control ===&lt;br /&gt;
The act of tokenizing an application is an act of giving some percentage of ownership and control over the application.  The founder or developer should consider how much ownership and control to give up.  This decision will directly impact the initial token distribution.  Some considerations that should factor into this decision include:&lt;br /&gt;
* How aligned are the initial token holders to the core mission of the application?&lt;br /&gt;
* Is there a limit in scope of control that the token holders should have?&lt;br /&gt;
* What is the optimal long term ownership and control structure for the application?&lt;br /&gt;
* Who will make future contributions to the application&#039;s code base?&lt;br /&gt;
&lt;br /&gt;
The more control and ownership a token is provided, the more valuable that token will be.  However, more ownership and control provided to the initial token distribution also leads to increased risks to the application&#039;s mission, development and engagement.&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Design the Tokenomic Inflation ===&lt;br /&gt;
Most tokens have an established token inflation rate and the SNS allows the token designers to set the initial inflation rate, the final inflation rate and the time to achieve that final inflation rate.  The configuration of these parameters should be used to drive intended behavior by the token holders.  Some considerations include:&lt;br /&gt;
* Higher inflation rates will encourage more staking of the token.  This is advantageous if the intended purpose of the token is governance over the application.  It&#039;s disadvantageous if the intended purpose of the token is utility within the application.&lt;br /&gt;
* If the purpose of the token is utility within the application or to reward user growth of the application, set the inflation rate to mimic the projected growth trajectory of the application.  Periods of higher growth rates for the application should have higher inflation rates to ensure the application ecosystem operates efficiently.&lt;br /&gt;
* Higher inflation rates pose more risks to the token value and sustainability of the token.&lt;br /&gt;
* Remember that the token holders will be able to adjust the inflation parameters later on.&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Design the Staking Parameters ===&lt;br /&gt;
The SNS allows the application&#039;s developer to set a dissolve delay bonus and age bonus for staked tokens.  For both of these configurations, setting higher parameter values will result in more long-term staking.  This is valuable if the purpose of the token is primarily for governance of the application and the expected lifetime of the application is many years or decades.  The downside of configuring higher dissolve delay and age bonuses is that it could result in more tokens locked long term, which may impact the ecosystem if the token is used for utility or other rewards.&lt;br /&gt;
&lt;br /&gt;
The launch of a token for an application is not just a technical challenge.  It requires an overall strategy, including a clear goal and communication strategy.&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=SNS_Tokenization_Considerations&amp;diff=2760</id>
		<title>SNS Tokenization Considerations</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=SNS_Tokenization_Considerations&amp;diff=2760"/>
		<updated>2022-07-28T08:18:55Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tokenizing and decentralising an application via an SNS requires planning and consideration for optimizing its effectiveness.  The following steps can be used by a developer or founder to better prepare for the launch of a token.&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Identify The Tokenization Goal ===&lt;br /&gt;
The first step of a tokenization strategy is identifying the goal of launching a token.  The act of tokenizing an application is an intentional decision by a developer or founder to sacrifice ownership and control over their application.  The tokenization goal should provide justification for that sacrifice.  Application owners will choose to tokenize for many different reasons, including:&lt;br /&gt;
* To raise funds for further development or growth&lt;br /&gt;
* To attract additional developers to the application&lt;br /&gt;
* To increase the user base of the application&lt;br /&gt;
* To align the company to a specific mission&lt;br /&gt;
* To serve as a utility token within the application&lt;br /&gt;
&lt;br /&gt;
Tokenomic decisions will present many trade-offs and it is difficult to optimize to multiple goals.  Identifying the main goal of launching a token will help the developer or founder in further steps.&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Identify and Plan the Token Audience ===&lt;br /&gt;
Once a tokenomic goal is identified, identifying the target audience for owning the token is next.  Think through the type of person or entity who would best achieve the identified goal from step 1.  Consider whether the intended audience should have a skill set, a specific resource or contain certain knowledge that will align with the goal of tokenization.  Consider also the intended breadth of the token ownership, including whether the strategic goal is more achievable with few token holders or with thousands or millions of holders.&lt;br /&gt;
&lt;br /&gt;
Next, plan a communication strategy for how your target audience will become informed about the token. How will they know about the token launch?   &lt;br /&gt;
 Consider what their goals will be in owning the token and craft the communications to highlight them. Understanding the goals of your intended audience and the best methods to communicate with them is necessary planning to have a successful token launch.&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Determine Level of Ownership and Control ===&lt;br /&gt;
The act of tokenizing an application is an act of giving some percentage of ownership and control over the application.  The founder or developer should consider how much ownership and control to give up.  This decision will directly impact the initial token distribution.  Some considerations that should factor into this decision include:&lt;br /&gt;
* How aligned are the initial token holders to the core mission of the application?&lt;br /&gt;
* Is there a limit in scope of control that the token holders should have?&lt;br /&gt;
* What is the optimal long term ownership and control structure for the application?&lt;br /&gt;
* Who will make future contributions to the application&#039;s code base?&lt;br /&gt;
&lt;br /&gt;
The more control and ownership a token is provided, the more valuable that token will be.  However, more ownership and control provided to the initial token distribution also leads to increased risks to the application&#039;s mission, development and engagement.&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Design the Tokenomic Inflation ===&lt;br /&gt;
Most tokens have an established token inflation rate and the SNS allows the token designers to set the initial inflation rate, the final inflation rate and the time to achieve that final inflation rate.  The configuration of these parameters should be used to drive intended behavior by the token holders.  Some considerations include:&lt;br /&gt;
* Higher inflation rates will encourage more staking of the token.  This is advantageous if the intended purpose of the token is governance over the application.  It&#039;s disadvantageous if the intended purpose of the token is utility within the application.&lt;br /&gt;
* If the purpose of the token is utility within the application or to reward user growth of the application, set the inflation rate to mimic the projected growth trajectory of the application.  Periods of higher growth rates for the application should have higher inflation rates to ensure the application ecosystem operates efficiently.&lt;br /&gt;
* Higher inflation rates pose more risks to the token value and sustainability of the token.&lt;br /&gt;
* Remember that the token holders will be able to adjust the inflation parameters later on.&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Design the Staking Parameters ===&lt;br /&gt;
The SNS allows the application&#039;s developer to set a dissolve delay bonus and age bonus for staked tokens.  For both of these configurations, setting higher parameter values will result in more long-term staking.  This is valuable if the purpose of the token is primarily for governance of the application and the expected lifetime of the application is many years or decades.  The downside of configuring higher dissolve delay and age bonuses is that it could result in more tokens locked long term, which may impact the ecosystem if the token is used for utility or other rewards.&lt;br /&gt;
&lt;br /&gt;
The launch of a token for an application is not just a technical challenge.  It requires an overall strategy, including a clear goal and communication strategy.&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=SNS_Tokenization_Considerations&amp;diff=2759</id>
		<title>SNS Tokenization Considerations</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=SNS_Tokenization_Considerations&amp;diff=2759"/>
		<updated>2022-07-28T08:18:35Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tokenizing and an application via an SNS requires planning and consideration for optimizing its effectiveness.  The following steps can be used by a developer or founder to better prepare for the launch of a token.&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Identify The Tokenization Goal ===&lt;br /&gt;
The first step of a tokenization strategy is identifying the goal of launching a token.  The act of tokenizing an application is an intentional decision by a developer or founder to sacrifice ownership and control over their application.  The tokenization goal should provide justification for that sacrifice.  Application owners will choose to tokenize for many different reasons, including:&lt;br /&gt;
* To raise funds for further development or growth&lt;br /&gt;
* To attract additional developers to the application&lt;br /&gt;
* To increase the user base of the application&lt;br /&gt;
* To align the company to a specific mission&lt;br /&gt;
* To serve as a utility token within the application&lt;br /&gt;
&lt;br /&gt;
Tokenomic decisions will present many trade-offs and it is difficult to optimize to multiple goals.  Identifying the main goal of launching a token will help the developer or founder in further steps.&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Identify and Plan the Token Audience ===&lt;br /&gt;
Once a tokenomic goal is identified, identifying the target audience for owning the token is next.  Think through the type of person or entity who would best achieve the identified goal from step 1.  Consider whether the intended audience should have a skill set, a specific resource or contain certain knowledge that will align with the goal of tokenization.  Consider also the intended breadth of the token ownership, including whether the strategic goal is more achievable with few token holders or with thousands or millions of holders.&lt;br /&gt;
&lt;br /&gt;
Next, plan a communication strategy for how your target audience will become informed about the token. How will they know about the token launch?   &lt;br /&gt;
 Consider what their goals will be in owning the token and craft the communications to highlight them. Understanding the goals of your intended audience and the best methods to communicate with them is necessary planning to have a successful token launch.&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Determine Level of Ownership and Control ===&lt;br /&gt;
The act of tokenizing an application is an act of giving some percentage of ownership and control over the application.  The founder or developer should consider how much ownership and control to give up.  This decision will directly impact the initial token distribution.  Some considerations that should factor into this decision include:&lt;br /&gt;
* How aligned are the initial token holders to the core mission of the application?&lt;br /&gt;
* Is there a limit in scope of control that the token holders should have?&lt;br /&gt;
* What is the optimal long term ownership and control structure for the application?&lt;br /&gt;
* Who will make future contributions to the application&#039;s code base?&lt;br /&gt;
&lt;br /&gt;
The more control and ownership a token is provided, the more valuable that token will be.  However, more ownership and control provided to the initial token distribution also leads to increased risks to the application&#039;s mission, development and engagement.&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Design the Tokenomic Inflation ===&lt;br /&gt;
Most tokens have an established token inflation rate and the SNS allows the token designers to set the initial inflation rate, the final inflation rate and the time to achieve that final inflation rate.  The configuration of these parameters should be used to drive intended behavior by the token holders.  Some considerations include:&lt;br /&gt;
* Higher inflation rates will encourage more staking of the token.  This is advantageous if the intended purpose of the token is governance over the application.  It&#039;s disadvantageous if the intended purpose of the token is utility within the application.&lt;br /&gt;
* If the purpose of the token is utility within the application or to reward user growth of the application, set the inflation rate to mimic the projected growth trajectory of the application.  Periods of higher growth rates for the application should have higher inflation rates to ensure the application ecosystem operates efficiently.&lt;br /&gt;
* Higher inflation rates pose more risks to the token value and sustainability of the token.&lt;br /&gt;
* Remember that the token holders will be able to adjust the inflation parameters later on.&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Design the Staking Parameters ===&lt;br /&gt;
The SNS allows the application&#039;s developer to set a dissolve delay bonus and age bonus for staked tokens.  For both of these configurations, setting higher parameter values will result in more long-term staking.  This is valuable if the purpose of the token is primarily for governance of the application and the expected lifetime of the application is many years or decades.  The downside of configuring higher dissolve delay and age bonuses is that it could result in more tokens locked long term, which may impact the ecosystem if the token is used for utility or other rewards.&lt;br /&gt;
&lt;br /&gt;
The launch of a token for an application is not just a technical challenge.  It requires an overall strategy, including a clear goal and communication strategy.&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Internet_Computer_performance&amp;diff=2402</id>
		<title>Internet Computer performance</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Internet_Computer_performance&amp;diff=2402"/>
		<updated>2022-05-25T14:32:53Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A key objective of the Internet Computer is to provide a public compute layer that replaces traditional IT. A natural concern is that this will cause an increase in global energy consumption, which is bad for the environment, because the Internet Computer is a blockchain network. However, this is not the case.&lt;br /&gt;
&lt;br /&gt;
The Internet Computer works very differently to other blockchains, and is powered by advanced new cryptography. Internally, the network is able to strictly limit the replication of data and computation, while still providing the liveness and security guarantees expected of a blockchain. It also has the ability to assign different “trust levels” to units of blockchain code that it hosts (“smart contracts”), which changes the level of replication applied to their computations and data. In its current state of development, it is already orders of magnitude more efficient than other blockchains, but it is designed to eventually become more efficient that traditional IT too.&lt;br /&gt;
&lt;br /&gt;
Like all blockchains, the Internet Computer network directly applies replication, in combination with advanced cryptography, to create a tamperproof platform with far better liveness guarantees than traditional IT. Yet, it also limits replication, while using the replication that occurs to drive efficiency, for example by scaling out “query” transactions. Systems and services built using traditional IT platform often heavily reply upon replication, but because replication is tagged-on, rather than being a core part of how the underlying platform works, we believe that in the long run the Internet Computer will be substantially more efficient.&lt;br /&gt;
&lt;br /&gt;
For example, a large online service might be built on Amazon Web Services using a database in a master-slave configuration, Kubernetes instances of web workers, memcached instances for caching the results of database queries, and a CDN (content distribution network) that caches web content they serve on the edge of the network. This already creates a large amount of replication without creating a tamperproof platform, nor providing liveness guarantees. For example, each slave node of the database replicates its computations and data, and regular snapshots will also be taken as backups, data used by the web workers is replicated by the memcached instances, and each work will also cache data in its memory, while the product of web queries will be replicated all over the world on CDN nodes.&lt;br /&gt;
&lt;br /&gt;
Because replication is at the core of the design of the Internet Computer, it can derive powerful security, liveness and other properties from replication, while also applying it more efficiently. For example, because the Internet Computer is a single logical blockchain and platform, as it grows larger, the utilization of the underlying node hardware upon which it runs can be made higher than, say, a standalone server machine in a data center. A key objective of the Internet Computer is, over time, to provide a public compute platform that provides a more power efficient way for the world to build systems and services.&lt;br /&gt;
&lt;br /&gt;
== Performance experiments == &lt;br /&gt;
Here, we describe the DFINITY Foundation&#039;s performance evaluation of the Internet Computer. The [https://forum.dfinity.org/t/internet-computer-performance-dec-1-2021-load-testing/9240 current measurements] are from May 2022.&lt;br /&gt;
&lt;br /&gt;
Scalability of the Internet Computer is facilitated by sharding the IC into subnet blockchains. Every subnet blockchain can process &#039;&#039;&#039;update calls&#039;&#039;&#039; (writes) from ingress messages independently from other subnets. The IC can scale up by adding more subnets at the cost of having more network traffic (as applications potentially need to communicate across subnets). In its current form, the IC should be able to scale out to hundreds of subnets.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Query calls&#039;&#039;&#039; (reads) can be processed locally by nodes in a subnet. The response to a query call can therefore have low latency since the query just needs a response by a single node and does not require inter-node communication or agreement. The more nodes a subnet has, the more query calls it can handle; and the more nodes the IC has, the more query calls it can handle.&lt;br /&gt;
&lt;br /&gt;
== Test setup ==&lt;br /&gt;
&lt;br /&gt;
The experiments were run concurrently against all subnets other than the NNS and some of the most utilized application subnets to avoid disturbance of active IC users. &lt;br /&gt;
The IC has a set of boundary nodes that route calls to the core nodes that host the subnets. The experiments sent loads against the subnets directly and are did not route traffic through the boundary nodes. Boundary nodes have additional rate limiting, which is currently set slightly more conservative compared to what the IC can handle and running against the boundary nodes would therefore be  unsuitable for performance evaluation. &lt;br /&gt;
The experiment targeted all nodes in every subnet concurrently, much the same as what boundary nodes would be doing if we would use them.&lt;br /&gt;
&lt;br /&gt;
The experiment consisted of installing one counter canister in every subnet. This counter canister is essentially a no-op canister. It only maintains a counter, which can be queried via query calls and incremented via update calls. The counter value is not using orthogonal persistence, so the overhead for the execution layer of the IC is minimal. Stressing the counter canister can be seen as a way to determine the system overhead or baseline performance.&lt;br /&gt;
&lt;br /&gt;
== Measurements ==&lt;br /&gt;
&lt;br /&gt;
The following measurements were made on May 24, 2022, with 31 application subnets (having each 13 nodes) out of a total of 35 subnets (4 are system subnets such as the NNS and SNS subnets that have more nodes).&lt;br /&gt;
&lt;br /&gt;
=== Update calls ===&lt;br /&gt;
The Internet Computer sustained more than &#039;&#039;&#039;20&#039;841 updates/second&#039;&#039;&#039; calls to application canisters for a period of four minute (averaging &#039;&#039;&#039;672 updates/second&#039;&#039;&#039; per subnet).&lt;br /&gt;
The update calls measured here are triggered from ingress messages sent from outside the IC.&lt;br /&gt;
&lt;br /&gt;
=== Query calls ===&lt;br /&gt;
Arguably more important are query calls, since they contribute to more than 90% of the traffic observed on the IC.&lt;br /&gt;
The Internet Computer processed &#039;&#039;&#039;1&#039;125&#039;982 queries per second&#039;&#039;&#039; calls to application canisters (averaging &#039;&#039;&#039;2&#039;792 queries per second&#039;&#039;&#039; per node).&lt;br /&gt;
During the experiment each load is increased incrementally and run for a period of 5 minutes.&lt;br /&gt;
&lt;br /&gt;
== Energy consumption == &lt;br /&gt;
The following is an approximation of mainnet power consumption. &lt;br /&gt;
The average power consumption of an Internet Computer node is 700&amp;amp;thinsp;W.&lt;br /&gt;
If we assume a power usage effectiveness (PUE)  [https://en.wikipedia.org/wiki/Power_usage_effectiveness 1], [https://energyinnovation.org/2020/03/17/how-much-energy-do-data-centers-really-use/ 2],  of 2.33 that leads to a total power consumption of 1631.0&amp;amp;thinsp;W including cooling and other data center operations costs.&lt;br /&gt;
Given a total of 518 nodes and 11 boundary nodes in mainnet, resulting in a worst case of 862799W to operate all IC nodes for mainnet (including also system subnets). &lt;br /&gt;
This is a worst case analysis for power consumption of nodes as we would normally expect them to throttle when not fully utilized and thereby reducing power consumption.&lt;br /&gt;
&lt;br /&gt;
Given the maximum rate of updates and queries that we can currently support in the IC, one update call would consume 38.95&amp;amp;thinsp;J (Joules) and one query call 0.59&amp;amp;thinsp;J. These figures are for a hypothetically fully utilized IC.&lt;br /&gt;
With the current approximate rate of 3300 transactions/s, the IC uses 261.45&amp;amp;thinsp;J per transaction.&lt;br /&gt;
&lt;br /&gt;
In the future, the energy consumption will be much lower as the overhead of the system subnets will be comparatively smaller, boundary nodes will contain caching, and the replica software much more optimised.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Putting this in context == &lt;br /&gt;
We can see that even with conservative estimations, the energy consumption of the Internet Computer is substantially lower than competing blockchain projects, but also existing (highly optimized) web2 tech. See the table below to put IC performance in perspective. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Energy consumption comparison&lt;br /&gt;
|-&lt;br /&gt;
! Source !! Cost (measured in Joules (J))&lt;br /&gt;
|-&lt;br /&gt;
| One Internet Computer transaction || 261&amp;amp;thinsp;J&lt;br /&gt;
|-&lt;br /&gt;
| One Google search || 1&#039;080&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://store.chipkin.com/articles/did-you-know-it-takes-00003-kwh-per-google-search-and-more&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Solana transaction || 1&#039;837&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://solana.com/news/solana-energy-usage-report-november-2021#ref1&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Ethereum 2 transaction || 126&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://blog.ethereum.org/2021/05/18/country-power-no-more/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Cardano transaction || 1&#039;972&#039;440&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://www.trgdatacenters.com/most-environment-friendly-cryptocurrencies/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Ethereum transaction || 692&#039;820&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://digiconomist.net/ethereum-energy-consumption/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Bitcoin transaction || 6&#039;995&#039;592&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://digiconomist.net/bitcoin-energy-consumption&amp;lt;/ref&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion and next steps ==&lt;br /&gt;
The Internet Computer today already shows impressive performance. On top of that, it should be possible to further scale out the IC using:&lt;br /&gt;
* More subnets: This will immediately increase the query and update call throughput. While adding subnets might eventually lead to other scalability problems, the IC in its current shape should be able to support hundreds of subnets.&lt;br /&gt;
* Performance improvements: Performance can also be improved by better single machine, network and consensus performance tuning. Increasing the performance by at least an order of magnitude is plausible.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/dfinity/the-internet-computers-transaction-speed-and-finality-outpace-other-l1-blockchains-8e7d25e4b2ef The Internet Computer’s Transaction Speed and Finality Outpace Other L1 Blockchains]&lt;br /&gt;
* [https://forum.dfinity.org/t/internet-computer-performance-dec-1-2021-load-testing/9240 Internet Computer Performance - Dec 1, 2021 Load testing]&lt;br /&gt;
=== References === &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Internet_Computer_performance&amp;diff=2401</id>
		<title>Internet Computer performance</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Internet_Computer_performance&amp;diff=2401"/>
		<updated>2022-05-25T14:18:55Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A key objective of the Internet Computer is to provide a public compute layer that replaces traditional IT. A natural concern is that this will cause an increase in global energy consumption, which is bad for the environment, because the Internet Computer is a blockchain network. However, this is not the case.&lt;br /&gt;
&lt;br /&gt;
The Internet Computer works very differently to other blockchains, and is powered by advanced new cryptography. Internally, the network is able to strictly limit the replication of data and computation, while still providing the liveness and security guarantees expected of a blockchain. It also has the ability to assign different “trust levels” to units of blockchain code that it hosts (“smart contracts”), which changes the level of replication applied to their computations and data. In its current state of development, it is already orders of magnitude more efficient than other blockchains, but it is designed to eventually become more efficient that traditional IT too.&lt;br /&gt;
&lt;br /&gt;
Like all blockchains, the Internet Computer network directly applies replication, in combination with advanced cryptography, to create a tamperproof platform with far better liveness guarantees than traditional IT. Yet, it also limits replication, while using the replication that occurs to drive efficiency, for example by scaling out “query” transactions. Systems and services built using traditional IT platform often heavily reply upon replication, but because replication is tagged-on, rather than being a core part of how the underlying platform works, we believe that in the long run the Internet Computer will be substantially more efficient.&lt;br /&gt;
&lt;br /&gt;
For example, a large online service might be built on Amazon Web Services using a database in a master-slave configuration, Kubernetes instances of web workers, memcached instances for caching the results of database queries, and a CDN (content distribution network) that caches web content they serve on the edge of the network. This already creates a large amount of replication without creating a tamperproof platform, nor providing liveness guarantees. For example, each slave node of the database replicates its computations and data, and regular snapshots will also be taken as backups, data used by the web workers is replicated by the memcached instances, and each work will also cache data in its memory, while the product of web queries will be replicated all over the world on CDN nodes.&lt;br /&gt;
&lt;br /&gt;
Because replication is at the core of the design of the Internet Computer, it can derive powerful security, liveness and other properties from replication, while also applying it more efficiently. For example, because the Internet Computer is a single logical blockchain and platform, as it grows larger, the utilization of the underlying node hardware upon which it runs can be made higher than, say, a standalone server machine in a data center. A key objective of the Internet Computer is, over time, to provide a public compute platform that provides a more power efficient way for the world to build systems and services.&lt;br /&gt;
&lt;br /&gt;
== Performance experiments == &lt;br /&gt;
Here, we describe the DFINITY Foundation&#039;s performance evaluation of the Internet Computer. The [https://forum.dfinity.org/t/internet-computer-performance-dec-1-2021-load-testing/9240 current measurements] are from May 2022.&lt;br /&gt;
&lt;br /&gt;
Scalability of the Internet Computer is facilitated by sharding the IC into subnet blockchains. Every subnet blockchain can process &#039;&#039;&#039;update calls&#039;&#039;&#039; (writes) from ingress messages independently from other subnets. The IC can scale up by adding more subnets at the cost of having more network traffic (as applications potentially need to communicate across subnets). In its current form, the IC should be able to scale out to hundreds of subnets.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Query calls&#039;&#039;&#039; (reads) can be processed locally by nodes in a subnet. The response to a query call can therefore have low latency since the query just needs a response by a single node and does not require inter-node communication or agreement. The more nodes a subnet has, the more query calls it can handle; and the more nodes the IC has, the more query calls it can handle.&lt;br /&gt;
&lt;br /&gt;
== Test setup ==&lt;br /&gt;
&lt;br /&gt;
The experiments were run concurrently against all subnets other than the NNS and some of the most utilized application subnets to avoid disturbance of active IC users. &lt;br /&gt;
The IC has a set of boundary nodes that route calls to the core nodes that host the subnets. The experiments sent loads against the subnets directly and are did not route traffic through the boundary nodes. Boundary nodes have additional rate limiting, which is currently set slightly more conservative compared to what the IC can handle and running against the boundary nodes would therefore be  unsuitable for performance evaluation. &lt;br /&gt;
The experiment targeted all nodes in every subnet concurrently, much the same as what boundary nodes would be doing if we would use them.&lt;br /&gt;
&lt;br /&gt;
The experiment consisted of installing one counter canister in every subnet. This counter canister is essentially a no-op canister. It only maintains a counter, which can be queried via query calls and incremented via update calls. The counter value is not using orthogonal persistence, so the overhead for the execution layer of the IC is minimal. Stressing the counter canister can be seen as a way to determine the system overhead or baseline performance.&lt;br /&gt;
&lt;br /&gt;
== Measurements ==&lt;br /&gt;
&lt;br /&gt;
The following measurements were made on May 24, 2022, with 31 application subnets (having each 13 nodes) out of a total of 35 subnets (4 are system subnets such as the NNS and SNS subnets that have more nodes).&lt;br /&gt;
&lt;br /&gt;
=== Update calls ===&lt;br /&gt;
The Internet Computer sustained more than &#039;&#039;&#039;20&#039;841 updates/second&#039;&#039;&#039; calls to application canisters for a period of four minute (averaging &#039;&#039;&#039;672 updates/second&#039;&#039;&#039; per subnet).&lt;br /&gt;
The update calls measured here are triggered from ingress messages sent from outside the IC.&lt;br /&gt;
&lt;br /&gt;
=== Query calls ===&lt;br /&gt;
Arguably more important are query calls, since they contribute to more than 90% of the traffic observed on the IC.&lt;br /&gt;
The Internet Computer processed &#039;&#039;&#039;1&#039;125&#039;982 queries per second&#039;&#039;&#039; calls to application canisters (averaging &#039;&#039;&#039;2&#039;792 queries per second&#039;&#039;&#039; per node).&lt;br /&gt;
During the experiment each load is increased incrementally and run for a period of 5 minutes.&lt;br /&gt;
&lt;br /&gt;
== Energy consumption == &lt;br /&gt;
The following is an approximation of mainnet power consumption. &lt;br /&gt;
The peak power consumption of an Internet Computer node is 700&amp;amp;thinsp;W with an average of 500&amp;amp;thinsp;W.&lt;br /&gt;
If we assume a power usage effectiveness (PUE)  [https://en.wikipedia.org/wiki/Power_usage_effectiveness 1], [https://energyinnovation.org/2020/03/17/how-much-energy-do-data-centers-really-use/ 2],  of 2.33 that leads to a total power consumption of 1631.0&amp;amp;thinsp;W including cooling and other data center operations costs.&lt;br /&gt;
Given a total of 518 nodes and 11 boundary nodes in mainnet, resulting in a worst case of 862799W to operate all IC nodes for mainnet (including also system subnets). &lt;br /&gt;
This is a worst case analysis for power consumption of nodes as we would normally expect them to throttle when not fully utilized and thereby reducing power consumption.&lt;br /&gt;
&lt;br /&gt;
Given the maximum rate of updates and queries that we can currently support in the IC, one update call would consume 38.95&amp;amp;thinsp;J (Joules) and one query call 0.59&amp;amp;thinsp;J. These figures are for a hypothetically fully utilized IC.&lt;br /&gt;
With the current approximate rate of 3300 transactions/s, the IC uses 261.45&amp;amp;thinsp;J per transaction.&lt;br /&gt;
&lt;br /&gt;
In the future, the costs will be much lower as the overhead of the system subnets will be comparatively smaller, boundary nodes will contain caching, and the replica software much more optimised.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Putting this in context == &lt;br /&gt;
We can see that even with conservative estimations, the energy consumption of the Internet Computer is substantially lower than competing blockchain projects, but also existing (highly optimized) web2 tech. See the table below to put IC performance in perspective. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Energy consumption comparison&lt;br /&gt;
|-&lt;br /&gt;
! Source !! Cost (measured in Joules (J))&lt;br /&gt;
|-&lt;br /&gt;
| One Internet Computer transaction || 261&amp;amp;thinsp;J&lt;br /&gt;
|-&lt;br /&gt;
| One Google search || 1&#039;080&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://store.chipkin.com/articles/did-you-know-it-takes-00003-kwh-per-google-search-and-more&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Solana transaction || 1&#039;837&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://solana.com/news/solana-energy-usage-report-november-2021#ref1&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Ethereum 2 transaction || 126&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://blog.ethereum.org/2021/05/18/country-power-no-more/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Cardano transaction || 1&#039;972&#039;440&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://www.trgdatacenters.com/most-environment-friendly-cryptocurrencies/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Ethereum transaction || 692&#039;820&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://digiconomist.net/ethereum-energy-consumption/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Bitcoin transaction || 6&#039;995&#039;592&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://digiconomist.net/bitcoin-energy-consumption&amp;lt;/ref&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion and next steps ==&lt;br /&gt;
The Internet Computer today already shows impressive performance. On top of that, it should be possible to further scale out the IC using:&lt;br /&gt;
* More subnets: This will immediately increase the query and update call throughput. While adding subnets might eventually lead to other scalability problems, the IC in its current shape should be able to support hundreds of subnets.&lt;br /&gt;
* Performance improvements: Performance can also be improved by better single machine, network and consensus performance tuning. Increasing the performance by at least an order of magnitude is plausible.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/dfinity/the-internet-computers-transaction-speed-and-finality-outpace-other-l1-blockchains-8e7d25e4b2ef The Internet Computer’s Transaction Speed and Finality Outpace Other L1 Blockchains]&lt;br /&gt;
* [https://forum.dfinity.org/t/internet-computer-performance-dec-1-2021-load-testing/9240 Internet Computer Performance - Dec 1, 2021 Load testing]&lt;br /&gt;
=== References === &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Internet_Computer_performance&amp;diff=2400</id>
		<title>Internet Computer performance</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Internet_Computer_performance&amp;diff=2400"/>
		<updated>2022-05-25T14:18:02Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A key objective of the Internet Computer is to provide a public compute layer that replaces traditional IT. A natural concern is that this will cause an increase in global energy consumption, which is bad for the environment, because the Internet Computer is a blockchain network. However, this is not the case.&lt;br /&gt;
&lt;br /&gt;
The Internet Computer works very differently to other blockchains, and is powered by advanced new cryptography. Internally, the network is able to strictly limit the replication of data and computation, while still providing the liveness and security guarantees expected of a blockchain. It also has the ability to assign different “trust levels” to units of blockchain code that it hosts (“smart contracts”), which changes the level of replication applied to their computations and data. In its current state of development, it is already orders of magnitude more efficient than other blockchains, but it is designed to eventually become more efficient that traditional IT too.&lt;br /&gt;
&lt;br /&gt;
Like all blockchains, the Internet Computer network directly applies replication, in combination with advanced cryptography, to create a tamperproof platform with far better liveness guarantees than traditional IT. Yet, it also limits replication, while using the replication that occurs to drive efficiency, for example by scaling out “query” transactions. Systems and services built using traditional IT platform often heavily reply upon replication, but because replication is tagged-on, rather than being a core part of how the underlying platform works, we believe that in the long run the Internet Computer will be substantially more efficient.&lt;br /&gt;
&lt;br /&gt;
For example, a large online service might be built on Amazon Web Services using a database in a master-slave configuration, Kubernetes instances of web workers, memcached instances for caching the results of database queries, and a CDN (content distribution network) that caches web content they serve on the edge of the network. This already creates a large amount of replication without creating a tamperproof platform, nor providing liveness guarantees. For example, each slave node of the database replicates its computations and data, and regular snapshots will also be taken as backups, data used by the web workers is replicated by the memcached instances, and each work will also cache data in its memory, while the product of web queries will be replicated all over the world on CDN nodes.&lt;br /&gt;
&lt;br /&gt;
Because replication is at the core of the design of the Internet Computer, it can derive powerful security, liveness and other properties from replication, while also applying it more efficiently. For example, because the Internet Computer is a single logical blockchain and platform, as it grows larger, the utilization of the underlying node hardware upon which it runs can be made higher than, say, a standalone server machine in a data center. A key objective of the Internet Computer is, over time, to provide a public compute platform that provides a more power efficient way for the world to build systems and services.&lt;br /&gt;
&lt;br /&gt;
== Performance experiments == &lt;br /&gt;
Here, we describe the DFINITY Foundation&#039;s performance evaluation of the Internet Computer. The [https://forum.dfinity.org/t/internet-computer-performance-dec-1-2021-load-testing/9240 current measurements] are from May 2022.&lt;br /&gt;
&lt;br /&gt;
Scalability of the Internet Computer is facilitated by sharding the IC into subnet blockchains. Every subnet blockchain can process &#039;&#039;&#039;update calls&#039;&#039;&#039; (writes) from ingress messages independently from other subnets. The IC can scale up by adding more subnets at the cost of having more network traffic (as applications potentially need to communicate across subnets). In its current form, the IC should be able to scale out to hundreds of subnets.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Query calls&#039;&#039;&#039; (reads) can be processed locally by nodes in a subnet. The response to a query call can therefore have low latency since the query just needs a response by a single node and does not require inter-node communication or agreement. The more nodes a subnet has, the more query calls it can handle; and the more nodes the IC has, the more query calls it can handle.&lt;br /&gt;
&lt;br /&gt;
== Test setup ==&lt;br /&gt;
&lt;br /&gt;
The experiments were run concurrently against all subnets other than the NNS and some of the most utilized application subnets to avoid disturbance of active IC users. &lt;br /&gt;
The IC has a set of boundary nodes that route calls to the core nodes that host the subnets. The experiments sent loads against the subnets directly and are did not route traffic through the boundary nodes. Boundary nodes have additional rate limiting, which is currently set slightly more conservative compared to what the IC can handle and running against the boundary nodes would therefore be  unsuitable for performance evaluation. &lt;br /&gt;
The experiment targeted all nodes in every subnet concurrently, much the same as what boundary nodes would be doing if we would use them.&lt;br /&gt;
&lt;br /&gt;
The experiment consisted of installing one counter canister in every subnet. This counter canister is essentially a no-op canister. It only maintains a counter, which can be queried via query calls and incremented via update calls. The counter value is not using orthogonal persistence, so the overhead for the execution layer of the IC is minimal. Stressing the counter canister can be seen as a way to determine the system overhead or baseline performance.&lt;br /&gt;
&lt;br /&gt;
== Measurements ==&lt;br /&gt;
&lt;br /&gt;
The following measurements were made on May 24, 2022, with 31 application subnets (having each 13 nodes) out of a total of 35 subnets (4 are system subnets such as the NNS and SNS subnets that have more nodes).&lt;br /&gt;
&lt;br /&gt;
=== Update calls ===&lt;br /&gt;
The Internet Computer sustained more than &#039;&#039;&#039;20&#039;841 updates/second&#039;&#039;&#039; calls to application canisters for a period of four minute (averaging &#039;&#039;&#039;672 updates/second&#039;&#039;&#039; per subnet).&lt;br /&gt;
The update calls measured here are triggered from ingress messages sent from outside the IC.&lt;br /&gt;
&lt;br /&gt;
=== Query calls ===&lt;br /&gt;
Arguably more important are query calls, since they contribute to more than 90% of the traffic observed on the IC.&lt;br /&gt;
The Internet Computer processed &#039;&#039;&#039;1&#039;125&#039;982 queries per second&#039;&#039;&#039; calls to application canisters (averaging &#039;&#039;&#039;2&#039;792 queries per second&#039;&#039;&#039; per node).&lt;br /&gt;
During the experiment each load is increased incrementally and run for a period of 5 minutes.&lt;br /&gt;
&lt;br /&gt;
== Energy consumption == &lt;br /&gt;
The following is an approximation of mainnet power consumption. &lt;br /&gt;
The peak power consumption of an Internet Computer node is 700&amp;amp;thinsp;W with an average of 500&amp;amp;thinsp;W.&lt;br /&gt;
If we assume a power usage effectiveness (PUE)  [https://en.wikipedia.org/wiki/Power_usage_effectiveness 1], [https://energyinnovation.org/2020/03/17/how-much-energy-do-data-centers-really-use/ 2],  of 2.33 that leads to a total power consumption of 1631.0&amp;amp;thinsp;W including cooling and other data center operations costs.&lt;br /&gt;
Given a total of 518 nodes and 11 boundary nodes in mainnet, resulting in a worst case of 862799W to operate all IC nodes for mainnet (including also system subnets). &lt;br /&gt;
This is a worst case analysis for power consumption of nodes as we would normally expect them to throttle when not fully utilized and thereby reducing power consumption.&lt;br /&gt;
In the future, the costs will be much lower as the overhead of the system subnets will be comparatively smaller, boundary nodes will contain caching, and the replica software much more optimised.&lt;br /&gt;
&lt;br /&gt;
Given the maximum rate of updates and queries that we can currently support in the IC, one update call would consume 38.95&amp;amp;thinsp;J (Joules) and one query call 0.59&amp;amp;thinsp;J. These figures are for a hypothetically fully utilized IC.&lt;br /&gt;
With the current approximate rate of 3300 transactions/s, the IC uses 261.45&amp;amp;thinsp;J per transaction.&lt;br /&gt;
&lt;br /&gt;
== Putting this in context == &lt;br /&gt;
We can see that even with conservative estimations, the energy consumption of the Internet Computer is substantially lower than competing blockchain projects, but also existing (highly optimized) web2 tech. See the table below to put IC performance in perspective. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Energy consumption comparison&lt;br /&gt;
|-&lt;br /&gt;
! Source !! Cost (measured in Joules (J))&lt;br /&gt;
|-&lt;br /&gt;
| One Internet Computer transaction || 261&amp;amp;thinsp;J&lt;br /&gt;
|-&lt;br /&gt;
| One Google search || 1&#039;080&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://store.chipkin.com/articles/did-you-know-it-takes-00003-kwh-per-google-search-and-more&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Solana transaction || 1&#039;837&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://solana.com/news/solana-energy-usage-report-november-2021#ref1&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Ethereum 2 transaction || 126&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://blog.ethereum.org/2021/05/18/country-power-no-more/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Cardano transaction || 1&#039;972&#039;440&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://www.trgdatacenters.com/most-environment-friendly-cryptocurrencies/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Ethereum transaction || 692&#039;820&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://digiconomist.net/ethereum-energy-consumption/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Bitcoin transaction || 6&#039;995&#039;592&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://digiconomist.net/bitcoin-energy-consumption&amp;lt;/ref&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion and next steps ==&lt;br /&gt;
The Internet Computer today already shows impressive performance. On top of that, it should be possible to further scale out the IC using:&lt;br /&gt;
* More subnets: This will immediately increase the query and update call throughput. While adding subnets might eventually lead to other scalability problems, the IC in its current shape should be able to support hundreds of subnets.&lt;br /&gt;
* Performance improvements: Performance can also be improved by better single machine, network and consensus performance tuning. Increasing the performance by at least an order of magnitude is plausible.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/dfinity/the-internet-computers-transaction-speed-and-finality-outpace-other-l1-blockchains-8e7d25e4b2ef The Internet Computer’s Transaction Speed and Finality Outpace Other L1 Blockchains]&lt;br /&gt;
* [https://forum.dfinity.org/t/internet-computer-performance-dec-1-2021-load-testing/9240 Internet Computer Performance - Dec 1, 2021 Load testing]&lt;br /&gt;
=== References === &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Internet_Computer_performance&amp;diff=2399</id>
		<title>Internet Computer performance</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Internet_Computer_performance&amp;diff=2399"/>
		<updated>2022-05-25T14:15:48Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A key objective of the Internet Computer is to provide a public compute layer that replaces traditional IT. A natural concern is that this will cause an increase in global energy consumption, which is bad for the environment, because the Internet Computer is a blockchain network. However, this is not the case.&lt;br /&gt;
&lt;br /&gt;
The Internet Computer works very differently to other blockchains, and is powered by advanced new cryptography. Internally, the network is able to strictly limit the replication of data and computation, while still providing the liveness and security guarantees expected of a blockchain. It also has the ability to assign different “trust levels” to units of blockchain code that it hosts (“smart contracts”), which changes the level of replication applied to their computations and data. In its current state of development, it is already orders of magnitude more efficient than other blockchains, but it is designed to eventually become more efficient that traditional IT too.&lt;br /&gt;
&lt;br /&gt;
Like all blockchains, the Internet Computer network directly applies replication, in combination with advanced cryptography, to create a tamperproof platform with far better liveness guarantees than traditional IT. Yet, it also limits replication, while using the replication that occurs to drive efficiency, for example by scaling out “query” transactions. Systems and services built using traditional IT platform often heavily reply upon replication, but because replication is tagged-on, rather than being a core part of how the underlying platform works, we believe that in the long run the Internet Computer will be substantially more efficient.&lt;br /&gt;
&lt;br /&gt;
For example, a large online service might be built on Amazon Web Services using a database in a master-slave configuration, Kubernetes instances of web workers, memcached instances for caching the results of database queries, and a CDN (content distribution network) that caches web content they serve on the edge of the network. This already creates a large amount of replication without creating a tamperproof platform, nor providing liveness guarantees. For example, each slave node of the database replicates its computations and data, and regular snapshots will also be taken as backups, data used by the web workers is replicated by the memcached instances, and each work will also cache data in its memory, while the product of web queries will be replicated all over the world on CDN nodes.&lt;br /&gt;
&lt;br /&gt;
Because replication is at the core of the design of the Internet Computer, it can derive powerful security, liveness and other properties from replication, while also applying it more efficiently. For example, because the Internet Computer is a single logical blockchain and platform, as it grows larger, the utilization of the underlying node hardware upon which it runs can be made higher than, say, a standalone server machine in a data center. A key objective of the Internet Computer is, over time, to provide a public compute platform that provides a more power efficient way for the world to build systems and services.&lt;br /&gt;
&lt;br /&gt;
== Performance experiments == &lt;br /&gt;
Here, we describe the DFINITY Foundation&#039;s performance evaluation of the Internet Computer. The [https://forum.dfinity.org/t/internet-computer-performance-dec-1-2021-load-testing/9240 current measurements] are from May 2022.&lt;br /&gt;
&lt;br /&gt;
Scalability of the Internet Computer is facilitated by sharding the IC into subnet blockchains. Every subnet blockchain can process &#039;&#039;&#039;update calls&#039;&#039;&#039; (writes) from ingress messages independently from other subnets. The IC can scale up by adding more subnets at the cost of having more network traffic (as applications potentially need to communicate across subnets). In its current form, the IC should be able to scale out to hundreds of subnets.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Query calls&#039;&#039;&#039; (reads) can be processed locally by nodes in a subnet. The response to a query call can therefore have low latency since the query just needs a response by a single node and does not require inter-node communication or agreement. The more nodes a subnet has, the more query calls it can handle; and the more nodes the IC has, the more query calls it can handle.&lt;br /&gt;
&lt;br /&gt;
== Test setup ==&lt;br /&gt;
&lt;br /&gt;
The experiments were run concurrently against all subnets other than the NNS and some of the most utilized application subnets to avoid disturbance of active IC users. &lt;br /&gt;
The IC has a set of boundary nodes that route calls to the core nodes that host the subnets. The experiments sent loads against the subnets directly and are did not route traffic through the boundary nodes. Boundary nodes have additional rate limiting, which is currently set slightly more conservative compared to what the IC can handle and running against the boundary nodes would therefore be  unsuitable for performance evaluation. &lt;br /&gt;
The experiment targeted all nodes in every subnet concurrently, much the same as what boundary nodes would be doing if we would use them.&lt;br /&gt;
&lt;br /&gt;
The experiment consisted of installing one counter canister in every subnet. This counter canister is essentially a no-op canister. It only maintains a counter, which can be queried via query calls and incremented via update calls. The counter value is not using orthogonal persistence, so the overhead for the execution layer of the IC is minimal. Stressing the counter canister can be seen as a way to determine the system overhead or baseline performance.&lt;br /&gt;
&lt;br /&gt;
== Measurements ==&lt;br /&gt;
&lt;br /&gt;
The following measurements were made on May 24, 2022, with 31 application subnets (having each 13 nodes) out of a total of 35 subnets (4 are system subnets such as the NNS and SNS subnets that have more nodes).&lt;br /&gt;
&lt;br /&gt;
=== Update calls ===&lt;br /&gt;
The Internet Computer sustained more than &#039;&#039;&#039;20&#039;841 updates/second&#039;&#039;&#039; calls to application canisters for a period of four minute (averaging &#039;&#039;&#039;672 updates/second&#039;&#039;&#039; per subnet).&lt;br /&gt;
The update calls measured here are triggered from ingress messages sent from outside the IC.&lt;br /&gt;
&lt;br /&gt;
=== Query calls ===&lt;br /&gt;
Arguably more important are query calls, since they contribute to more than 90% of the traffic observed on the IC.&lt;br /&gt;
The Internet Computer processed &#039;&#039;&#039;1&#039;125&#039;982 queries per second&#039;&#039;&#039; calls to application canisters (averaging &#039;&#039;&#039;2&#039;792 queries per second&#039;&#039;&#039; per node).&lt;br /&gt;
During the experiment each load is increased incrementally and run for a period of 5 minutes.&lt;br /&gt;
&lt;br /&gt;
== Energy consumption == &lt;br /&gt;
The following is an approximation of mainnet power consumption. &lt;br /&gt;
The peak power consumption of an Internet Computer node is 700&amp;amp;thinsp;W with an average of 500&amp;amp;thinsp;W.&lt;br /&gt;
If we assume a power usage effectiveness (PUE)  [https://en.wikipedia.org/wiki/Power_usage_effectiveness 1], [https://energyinnovation.org/2020/03/17/how-much-energy-do-data-centers-really-use/ 2],  of 2.33 that leads to a total power consumption of 1631.0W including cooling and other data center operations costs.&lt;br /&gt;
Given a total of 518 nodes and 11 boundary nodes in mainnet, resulting in a worst case of 862799W to operate all IC nodes for mainnet. This is a worst case analysis for power consumption of nodes as we would normally expect them to throttle when not fully utilized and thereby reducing power consumption.&lt;br /&gt;
&lt;br /&gt;
Given the maximum rate of updates and queries that we can currently support in the IC, one update call would consume 38.95&amp;amp;thinsp;J (Joules) and one query call 0.59&amp;amp;thinsp;J. These figures are for a hypothetically fully utilized IC.&lt;br /&gt;
With the current approximate rate of 3300 transactions/s, the IC uses 261.45&amp;amp;thinsp;J per transaction.&lt;br /&gt;
&lt;br /&gt;
== Putting this in context == &lt;br /&gt;
We can see that even with conservative estimations, the energy consumption of the Internet Computer is substantially lower than competing blockchain projects, but also existing (highly optimized) web2 tech. See the table below to put IC performance in perspective. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Energy consumption comparison&lt;br /&gt;
|-&lt;br /&gt;
! Source !! Cost (measured in Joules (J))&lt;br /&gt;
|-&lt;br /&gt;
| One Internet Computer transaction || 261&amp;amp;thinsp;J&lt;br /&gt;
|-&lt;br /&gt;
| One Google search || 1&#039;080&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://store.chipkin.com/articles/did-you-know-it-takes-00003-kwh-per-google-search-and-more&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Solana transaction || 1&#039;837&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://solana.com/news/solana-energy-usage-report-november-2021#ref1&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Ethereum 2 transaction || 126&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://blog.ethereum.org/2021/05/18/country-power-no-more/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Cardano transaction || 1&#039;972&#039;440&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://www.trgdatacenters.com/most-environment-friendly-cryptocurrencies/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Ethereum transaction || 692&#039;820&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://digiconomist.net/ethereum-energy-consumption/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Bitcoin transaction || 6&#039;995&#039;592&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://digiconomist.net/bitcoin-energy-consumption&amp;lt;/ref&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion and next steps ==&lt;br /&gt;
The Internet Computer today already shows impressive performance. On top of that, it should be possible to further scale out the IC using:&lt;br /&gt;
* More subnets: This will immediately increase the query and update call throughput. While adding subnets might eventually lead to other scalability problems, the IC in its current shape should be able to support hundreds of subnets.&lt;br /&gt;
* Performance improvements: Performance can also be improved by better single machine, network and consensus performance tuning. Increasing the performance by at least an order of magnitude is plausible.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/dfinity/the-internet-computers-transaction-speed-and-finality-outpace-other-l1-blockchains-8e7d25e4b2ef The Internet Computer’s Transaction Speed and Finality Outpace Other L1 Blockchains]&lt;br /&gt;
* [https://forum.dfinity.org/t/internet-computer-performance-dec-1-2021-load-testing/9240 Internet Computer Performance - Dec 1, 2021 Load testing]&lt;br /&gt;
=== References === &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Internet_Computer_performance&amp;diff=2398</id>
		<title>Internet Computer performance</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Internet_Computer_performance&amp;diff=2398"/>
		<updated>2022-05-25T14:13:32Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A key objective of the Internet Computer is to provide a public compute layer that replaces traditional IT. A natural concern is that this will cause an increase in global energy consumption, which is bad for the environment, because the Internet Computer is a blockchain network. However, this is not the case.&lt;br /&gt;
&lt;br /&gt;
The Internet Computer works very differently to other blockchains, and is powered by advanced new cryptography. Internally, the network is able to strictly limit the replication of data and computation, while still providing the liveness and security guarantees expected of a blockchain. It also has the ability to assign different “trust levels” to units of blockchain code that it hosts (“smart contracts”), which changes the level of replication applied to their computations and data. In its current state of development, it is already orders of magnitude more efficient than other blockchains, but it is designed to eventually become more efficient that traditional IT too.&lt;br /&gt;
&lt;br /&gt;
Like all blockchains, the Internet Computer network directly applies replication, in combination with advanced cryptography, to create a tamperproof platform with far better liveness guarantees than traditional IT. Yet, it also limits replication, while using the replication that occurs to drive efficiency, for example by scaling out “query” transactions. Systems and services built using traditional IT platform often heavily reply upon replication, but because replication is tagged-on, rather than being a core part of how the underlying platform works, we believe that in the long run the Internet Computer will be substantially more efficient.&lt;br /&gt;
&lt;br /&gt;
For example, a large online service might be built on Amazon Web Services using a database in a master-slave configuration, Kubernetes instances of web workers, memcached instances for caching the results of database queries, and a CDN (content distribution network) that caches web content they serve on the edge of the network. This already creates a large amount of replication without creating a tamperproof platform, nor providing liveness guarantees. For example, each slave node of the database replicates its computations and data, and regular snapshots will also be taken as backups, data used by the web workers is replicated by the memcached instances, and each work will also cache data in its memory, while the product of web queries will be replicated all over the world on CDN nodes.&lt;br /&gt;
&lt;br /&gt;
Because replication is at the core of the design of the Internet Computer, it can derive powerful security, liveness and other properties from replication, while also applying it more efficiently. For example, because the Internet Computer is a single logical blockchain and platform, as it grows larger, the utilization of the underlying node hardware upon which it runs can be made higher than, say, a standalone server machine in a data center. A key objective of the Internet Computer is, over time, to provide a public compute platform that provides a more power efficient way for the world to build systems and services.&lt;br /&gt;
&lt;br /&gt;
== Performance experiments == &lt;br /&gt;
Here, we describe the DFINITY Foundation&#039;s performance evaluation of the Internet Computer. The [https://forum.dfinity.org/t/internet-computer-performance-dec-1-2021-load-testing/9240 current measurements] are from May 2022.&lt;br /&gt;
&lt;br /&gt;
Scalability of the Internet Computer is facilitated by sharding the IC into subnet blockchains. Every subnet blockchain can process &#039;&#039;&#039;update calls&#039;&#039;&#039; (writes) from ingress messages independently from other subnets. The IC can scale up by adding more subnets at the cost of having more network traffic (as applications potentially need to communicate across subnets). In its current form, the IC should be able to scale out to hundreds of subnets.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Query calls&#039;&#039;&#039; (reads) can be processed locally by nodes in a subnet. The response to a query call can therefore have low latency since the query just needs a response by a single node and does not require inter-node communication or agreement. The more nodes a subnet has, the more query calls it can handle; and the more nodes the IC has, the more query calls it can handle.&lt;br /&gt;
&lt;br /&gt;
== Test setup ==&lt;br /&gt;
&lt;br /&gt;
The experiments were run concurrently against all subnets other than the NNS and some of the most utilized application subnets to avoid disturbance of active IC users. &lt;br /&gt;
The IC has a set of boundary nodes that route calls to the core nodes that host the subnets. The experiments sent loads against the subnets directly and are did not route traffic through the boundary nodes. Boundary nodes have additional rate limiting, which is currently set slightly more conservative compared to what the IC can handle and running against the boundary nodes would therefore be  unsuitable for performance evaluation. &lt;br /&gt;
The experiment targeted all nodes in every subnet concurrently, much the same as what boundary nodes would be doing if we would use them.&lt;br /&gt;
&lt;br /&gt;
The experiment consisted of installing one counter canister in every subnet. This counter canister is essentially a no-op canister. It only maintains a counter, which can be queried via query calls and incremented via update calls. The counter value is not using orthogonal persistence, so the overhead for the execution layer of the IC is minimal. Stressing the counter canister can be seen as a way to determine the system overhead or baseline performance.&lt;br /&gt;
&lt;br /&gt;
== Measurements ==&lt;br /&gt;
&lt;br /&gt;
The following measurements were made on May 24, 2022, with 31 application subnets (having each 13 nodes) out of a total of 35 subnets (4 are system subnets such as the NNS and SNS subnets that have more nodes).&lt;br /&gt;
&lt;br /&gt;
=== Update calls ===&lt;br /&gt;
The Internet Computer sustained more than &#039;&#039;&#039;20&#039;841 updates/second&#039;&#039;&#039; calls to application canisters for a period of four minute (averaging &#039;&#039;&#039;672 updates/second&#039;&#039;&#039; per subnet).&lt;br /&gt;
The update calls measured here are triggered from ingress messages sent from outside the IC.&lt;br /&gt;
&lt;br /&gt;
=== Query calls ===&lt;br /&gt;
Arguably more important are query calls, since they contribute to more than 90% of the traffic observed on the IC.&lt;br /&gt;
The Internet Computer processed &#039;&#039;&#039;1&#039;125&#039;982 queries per second&#039;&#039;&#039; calls to application canisters (averaging &#039;&#039;&#039;2&#039;792 queries per second&#039;&#039;&#039; per node).&lt;br /&gt;
During the experiment each load is increased incrementally and run for a period of 5 minutes.&lt;br /&gt;
&lt;br /&gt;
== Energy consumption == &lt;br /&gt;
The following is an approximation of mainnet power consumption. The peak power consumption of our nodes is 700W.&lt;br /&gt;
If we assume a power usage effectiveness (PUE)  [https://en.wikipedia.org/wiki/Power_usage_effectiveness 1], [https://energyinnovation.org/2020/03/17/how-much-energy-do-data-centers-really-use/ 2],  of 2.33 that leads to a total power consumption of 1631.0W including cooling and other data center operations costs.&lt;br /&gt;
Given a total of 518 nodes and 11 boundary nodes in mainnet, resulting in a worst case of 862799W to operate all IC nodes for mainnet. This is a worst case analysis for power consumption of nodes as we would normally expect them to throttle when not fully utilized and thereby reducing power consumption.&lt;br /&gt;
&lt;br /&gt;
Given the maximum rate of updates and queries that we can currently support in the IC, one update call would consume 38.95J (Joules) and one query call 0.59J. These figures are for a hypothetically fully utilized IC.&lt;br /&gt;
With the current approximate rate of 3300 transactions/s, the IC uses 261.45J per transaction.&lt;br /&gt;
&lt;br /&gt;
== Putting this in context == &lt;br /&gt;
We can see that even with conservative estimations, the energy consumption of the Internet Computer is substantially lower than competing blockchain projects, but also existing (highly optimized) web2 tech. See the table below to put IC performance in perspective. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Energy consumption comparison&lt;br /&gt;
|-&lt;br /&gt;
! Source !! Cost (measured in Joules (J))&lt;br /&gt;
|-&lt;br /&gt;
| One Internet Computer transaction || 261&amp;amp;thinsp;J&lt;br /&gt;
|-&lt;br /&gt;
| One Google search || 1&#039;080&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://store.chipkin.com/articles/did-you-know-it-takes-00003-kwh-per-google-search-and-more&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Solana transaction || 1&#039;837&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://solana.com/news/solana-energy-usage-report-november-2021#ref1&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Ethereum 2 transaction || 126&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://blog.ethereum.org/2021/05/18/country-power-no-more/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Cardano transaction || 1&#039;972&#039;440&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://www.trgdatacenters.com/most-environment-friendly-cryptocurrencies/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Ethereum transaction || 692&#039;820&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://digiconomist.net/ethereum-energy-consumption/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Bitcoin transaction || 6&#039;995&#039;592&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://digiconomist.net/bitcoin-energy-consumption&amp;lt;/ref&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion and next steps ==&lt;br /&gt;
The Internet Computer today already shows impressive performance. On top of that, it should be possible to further scale out the IC using:&lt;br /&gt;
* More subnets: This will immediately increase the query and update call throughput. While adding subnets might eventually lead to other scalability problems, the IC in its current shape should be able to support hundreds of subnets.&lt;br /&gt;
* Performance improvements: Performance can also be improved by better single machine, network and consensus performance tuning. Increasing the performance by at least an order of magnitude is plausible.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/dfinity/the-internet-computers-transaction-speed-and-finality-outpace-other-l1-blockchains-8e7d25e4b2ef The Internet Computer’s Transaction Speed and Finality Outpace Other L1 Blockchains]&lt;br /&gt;
* [https://forum.dfinity.org/t/internet-computer-performance-dec-1-2021-load-testing/9240 Internet Computer Performance - Dec 1, 2021 Load testing]&lt;br /&gt;
=== References === &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Internet_Computer_performance&amp;diff=2397</id>
		<title>Internet Computer performance</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Internet_Computer_performance&amp;diff=2397"/>
		<updated>2022-05-25T14:09:09Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A key objective of the Internet Computer is to provide a public compute layer that replaces traditional IT. A natural concern is that this will cause an increase in global energy consumption, which is bad for the environment, because the Internet Computer is a blockchain network. However, this is not the case.&lt;br /&gt;
&lt;br /&gt;
The Internet Computer works very differently to other blockchains, and is powered by advanced new cryptography. Internally, the network is able to strictly limit the replication of data and computation, while still providing the liveness and security guarantees expected of a blockchain. It also has the ability to assign different “trust levels” to units of blockchain code that it hosts (“smart contracts”), which changes the level of replication applied to their computations and data. In its current state of development, it is already orders of magnitude more efficient than other blockchains, but it is designed to eventually become more efficient that traditional IT too.&lt;br /&gt;
&lt;br /&gt;
Like all blockchains, the Internet Computer network directly applies replication, in combination with advanced cryptography, to create a tamperproof platform with far better liveness guarantees than traditional IT. Yet, it also limits replication, while using the replication that occurs to drive efficiency, for example by scaling out “query” transactions. Systems and services built using traditional IT platform often heavily reply upon replication, but because replication is tagged-on, rather than being a core part of how the underlying platform works, we believe that in the long run the Internet Computer will be substantially more efficient.&lt;br /&gt;
&lt;br /&gt;
For example, a large online service might be built on Amazon Web Services using a database in a master-slave configuration, Kubernetes instances of web workers, memcached instances for caching the results of database queries, and a CDN (content distribution network) that caches web content they serve on the edge of the network. This already creates a large amount of replication without creating a tamperproof platform, nor providing liveness guarantees. For example, each slave node of the database replicates its computations and data, and regular snapshots will also be taken as backups, data used by the web workers is replicated by the memcached instances, and each work will also cache data in its memory, while the product of web queries will be replicated all over the world on CDN nodes.&lt;br /&gt;
&lt;br /&gt;
Because replication is at the core of the design of the Internet Computer, it can derive powerful security, liveness and other properties from replication, while also applying it more efficiently. For example, because the Internet Computer is a single logical blockchain and platform, as it grows larger, the utilization of the underlying node hardware upon which it runs can be made higher than, say, a standalone server machine in a data center. A key objective of the Internet Computer is, over time, to provide a public compute platform that provides a more power efficient way for the world to build systems and services.&lt;br /&gt;
&lt;br /&gt;
== Performance experiments == &lt;br /&gt;
Here, we describe the DFINITY Foundation&#039;s performance evaluation of the Internet Computer. The [https://forum.dfinity.org/t/internet-computer-performance-dec-1-2021-load-testing/9240 current measurements] are from May 2022.&lt;br /&gt;
&lt;br /&gt;
Scalability of the Internet Computer is facilitated by sharding the IC into subnet blockchains. Every subnet blockchain can process &#039;&#039;&#039;update calls&#039;&#039;&#039; (writes) from ingress messages independently from other subnets. The IC can scale up by adding more subnets at the cost of having more network traffic (as applications potentially need to communicate across subnets). In its current form, the IC should be able to scale out to hundreds of subnets.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Query calls&#039;&#039;&#039; (reads) can be processed locally by nodes in a subnet. The response to a query call can therefore have low latency since the query just needs a response by a single node and does not require inter-node communication or agreement. The more nodes a subnet has, the more query calls it can handle; and the more nodes the IC has, the more query calls it can handle.&lt;br /&gt;
&lt;br /&gt;
== Test setup ==&lt;br /&gt;
&lt;br /&gt;
The experiments were run concurrently against all subnets other than the NNS and some of the most utilized application subnets to avoid disturbance of active IC users. &lt;br /&gt;
The IC has a set of boundary nodes that route calls to the core nodes that host the subnets. The experiments sent loads against the subnets directly and are did not route traffic through the boundary nodes. Boundary nodes have additional rate limiting, which is currently set slightly more conservative compared to what the IC can handle and running against the boundary nodes would therefore be  unsuitable for performance evaluation. &lt;br /&gt;
The experiment targeted all nodes in every subnet concurrently, much the same as what boundary nodes would be doing if we would use them.&lt;br /&gt;
&lt;br /&gt;
The experiment consisted of installing one counter canister in every subnet. This counter canister is essentially a no-op canister. It only maintains a counter, which can be queried via query calls and incremented via update calls. The counter value is not using orthogonal persistence, so the overhead for the execution layer of the IC is minimal. Stressing the counter canister can be seen as a way to determine the system overhead or baseline performance.&lt;br /&gt;
&lt;br /&gt;
== Measurements ==&lt;br /&gt;
&lt;br /&gt;
The following measurements were made on May 24, 2022, with 31 application subnets out of a total of 35 subnets (4 are system subnets such as the NNS and SNS subnets).&lt;br /&gt;
&lt;br /&gt;
=== Update calls ===&lt;br /&gt;
The Internet Computer sustained more than &#039;&#039;&#039;20&#039;841 updates/second&#039;&#039;&#039; calls to application canisters for a period of four minute.&lt;br /&gt;
The update calls measured here are triggered from ingress messages sent from outside the IC.&lt;br /&gt;
&lt;br /&gt;
=== Query calls ===&lt;br /&gt;
Arguably more important are query calls, since they contribute to more than 90% of the traffic observed on the IC.&lt;br /&gt;
The Internet Computer processed &#039;&#039;&#039;1&#039;447&#039;520 queries per second&#039;&#039;&#039; calls to application canisters.&lt;br /&gt;
During the experiment each load is increased incrementally and run for a period of 5 minutes.&lt;br /&gt;
&lt;br /&gt;
== Energy consumption == &lt;br /&gt;
The following is an approximation of mainnet power consumption. The peak power consumption of our nodes is 700W.&lt;br /&gt;
If we assume a power usage effectiveness (PUE)  [https://en.wikipedia.org/wiki/Power_usage_effectiveness 1], [https://energyinnovation.org/2020/03/17/how-much-energy-do-data-centers-really-use/ 2],  of 2.33 that leads to a total power consumption of 1631.0W including cooling and other data center operations costs.&lt;br /&gt;
Given a total of 518 nodes and 11 boundary nodes in mainnet, resulting in a worst case of 862799W to operate all IC nodes for mainnet. This is a worst case analysis for power consumption of nodes as we would normally expect them to throttle when not fully utilized and thereby reducing power consumption.&lt;br /&gt;
&lt;br /&gt;
Given the maximum rate of updates and queries that we can currently support in the IC, one update call would consume 38.95J (Joules) and one query call 0.59J. These figures are for a hypothetically fully utilized IC.&lt;br /&gt;
With the current approximate rate of 3300 transactions/s, the IC uses 261.45J per transaction.&lt;br /&gt;
&lt;br /&gt;
== Putting this in context == &lt;br /&gt;
We can see that even with conservative estimations, the energy consumption of the Internet Computer is substantially lower than competing blockchain projects, but also existing (highly optimized) web2 tech. See the table below to put IC performance in perspective. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Energy consumption comparison&lt;br /&gt;
|-&lt;br /&gt;
! Source !! Cost (measured in Joules (J))&lt;br /&gt;
|-&lt;br /&gt;
| One Internet Computer transaction || 261&amp;amp;thinsp;J&lt;br /&gt;
|-&lt;br /&gt;
| One Google search || 1&#039;080&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://store.chipkin.com/articles/did-you-know-it-takes-00003-kwh-per-google-search-and-more&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Solana transaction || 1&#039;837&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://solana.com/news/solana-energy-usage-report-november-2021#ref1&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Ethereum 2 transaction || 126&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://blog.ethereum.org/2021/05/18/country-power-no-more/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Cardano transaction || 1&#039;972&#039;440&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://www.trgdatacenters.com/most-environment-friendly-cryptocurrencies/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Ethereum transaction || 692&#039;820&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://digiconomist.net/ethereum-energy-consumption/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Bitcoin transaction || 6&#039;995&#039;592&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://digiconomist.net/bitcoin-energy-consumption&amp;lt;/ref&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion and next steps ==&lt;br /&gt;
The Internet Computer today already shows impressive performance. On top of that, it should be possible to further scale out the IC using:&lt;br /&gt;
* More subnets: This will immediately increase the query and update call throughput. While adding subnets might eventually lead to other scalability problems, the IC in its current shape should be able to support hundreds of subnets.&lt;br /&gt;
* Performance improvements: Performance can also be improved by better single machine, network and consensus performance tuning. Increasing the performance by at least an order of magnitude is plausible.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/dfinity/the-internet-computers-transaction-speed-and-finality-outpace-other-l1-blockchains-8e7d25e4b2ef The Internet Computer’s Transaction Speed and Finality Outpace Other L1 Blockchains]&lt;br /&gt;
* [https://forum.dfinity.org/t/internet-computer-performance-dec-1-2021-load-testing/9240 Internet Computer Performance - Dec 1, 2021 Load testing]&lt;br /&gt;
=== References === &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Internet_Computer_performance&amp;diff=2396</id>
		<title>Internet Computer performance</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Internet_Computer_performance&amp;diff=2396"/>
		<updated>2022-05-25T14:06:49Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A key objective of the Internet Computer is to provide a public compute layer that replaces traditional IT. A natural concern is that this will cause an increase in global energy consumption, which is bad for the environment, because the Internet Computer is a blockchain network. However, this is not the case.&lt;br /&gt;
&lt;br /&gt;
The Internet Computer works very differently to other blockchains, and is powered by advanced new cryptography. Internally, the network is able to strictly limit the replication of data and computation, while still providing the liveness and security guarantees expected of a blockchain. It also has the ability to assign different “trust levels” to units of blockchain code that it hosts (“smart contracts”), which changes the level of replication applied to their computations and data. In its current state of development, it is already orders of magnitude more efficient than other blockchains, but it is designed to eventually become more efficient that traditional IT too.&lt;br /&gt;
&lt;br /&gt;
Like all blockchains, the Internet Computer network directly applies replication, in combination with advanced cryptography, to create a tamperproof platform with far better liveness guarantees than traditional IT. Yet, it also limits replication, while using the replication that occurs to drive efficiency, for example by scaling out “query” transactions. Systems and services built using traditional IT platform often heavily reply upon replication, but because replication is tagged-on, rather than being a core part of how the underlying platform works, we believe that in the long run the Internet Computer will be substantially more efficient.&lt;br /&gt;
&lt;br /&gt;
For example, a large online service might be built on Amazon Web Services using a database in a master-slave configuration, Kubernetes instances of web workers, memcached instances for caching the results of database queries, and a CDN (content distribution network) that caches web content they serve on the edge of the network. This already creates a large amount of replication without creating a tamperproof platform, nor providing liveness guarantees. For example, each slave node of the database replicates its computations and data, and regular snapshots will also be taken as backups, data used by the web workers is replicated by the memcached instances, and each work will also cache data in its memory, while the product of web queries will be replicated all over the world on CDN nodes.&lt;br /&gt;
&lt;br /&gt;
Because replication is at the core of the design of the Internet Computer, it can derive powerful security, liveness and other properties from replication, while also applying it more efficiently. For example, because the Internet Computer is a single logical blockchain and platform, as it grows larger, the utilization of the underlying node hardware upon which it runs can be made higher than, say, a standalone server machine in a data center. A key objective of the Internet Computer is, over time, to provide a public compute platform that provides a more power efficient way for the world to build systems and services.&lt;br /&gt;
&lt;br /&gt;
== Performance experiments == &lt;br /&gt;
Here, we describe the DFINITY Foundation&#039;s performance evaluation of the Internet Computer. The [https://forum.dfinity.org/t/internet-computer-performance-dec-1-2021-load-testing/9240 current measurements] are from May 2022.&lt;br /&gt;
&lt;br /&gt;
Scalability of the Internet Computer is facilitated by sharding the IC into subnet blockchains. Every subnet blockchain can process &#039;&#039;&#039;update calls&#039;&#039;&#039; (writes) from ingress messages independently from other subnets. The IC can scale up by adding more subnets at the cost of having more network traffic (as applications potentially need to communicate across subnets). In its current form, the IC should be able to scale out to hundreds of subnets.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Query calls&#039;&#039;&#039; (reads) can be processed locally by nodes in a subnet. The response to a query call can therefore have low latency since the query just needs a response by a single node and does not require inter-node communication or agreement. The more nodes a subnet has, the more query calls it can handle; and the more nodes the IC has, the more query calls it can handle.&lt;br /&gt;
&lt;br /&gt;
== Test setup ==&lt;br /&gt;
&lt;br /&gt;
The experiments were run concurrently against all subnets other than the NNS and some of the most utilized application subnets to avoid disturbance of active IC users. &lt;br /&gt;
The IC has a set of boundary nodes that route calls to the core nodes that host the subnets. The experiments sent loads against the subnets directly and are did not route traffic through the boundary nodes. Boundary nodes have additional rate limiting, which is currently set slightly more conservative compared to what the IC can handle and running against the boundary nodes would therefore be  unsuitable for performance evaluation. &lt;br /&gt;
The experiment targeted all nodes in every subnet concurrently, much the same as what boundary nodes would be doing if we would use them.&lt;br /&gt;
&lt;br /&gt;
The experiment consisted of installing one counter canister in every subnet. This counter canister is essentially a no-op canister. It only maintains a counter, which can be queried via query calls and incremented via update calls. The counter value is not using orthogonal persistence, so the overhead for the execution layer of the IC is minimal. Stressing the counter canister can be seen as a way to determine the system overhead or baseline performance.&lt;br /&gt;
&lt;br /&gt;
== Measurements ==&lt;br /&gt;
&lt;br /&gt;
The following measurements were made on May 24, 2022, with 31 application subnets out of a total of 35 subnets (4 are system subnets such as the NNS and SNS subnets).&lt;br /&gt;
&lt;br /&gt;
=== Update calls ===&lt;br /&gt;
The Internet Computer can currently sustain more than &#039;&#039;&#039;25&#039;300 updates/second&#039;&#039;&#039; calls to application canisters for a period of four minutes, with peaks over &#039;&#039;&#039;22&#039;150 updates/second.&#039;&#039;&#039;&lt;br /&gt;
The update calls measured here are triggered from ingress messages sent from outside the IC.&lt;br /&gt;
&lt;br /&gt;
=== Query calls ===&lt;br /&gt;
Arguably more important are query calls, since they contribute to more than 90% of the traffic observed on the IC.&lt;br /&gt;
The Internet Computer can currently process up to &#039;&#039;&#039;1&#039;450&#039;395 queries per second&#039;&#039;&#039; calls to application canisters.&lt;br /&gt;
During the experiment each load is increased incrementally and run for a period of 5 minutes.&lt;br /&gt;
&lt;br /&gt;
== Energy consumption == &lt;br /&gt;
The following is an approximation of mainnet power consumption. The peak power consumption of our nodes is 700W.&lt;br /&gt;
If we assume a power usage effectiveness (PUE)  [https://en.wikipedia.org/wiki/Power_usage_effectiveness 1], [https://energyinnovation.org/2020/03/17/how-much-energy-do-data-centers-really-use/ 2],  of 2.33 that leads to a total power consumption of 1631.0W including cooling and other data center operations costs.&lt;br /&gt;
Given a total of 518 nodes and 11 boundary nodes in mainnet, resulting in a worst case of 862799W to operate all IC nodes for mainnet. This is a worst case analysis for power consumption of nodes as we would normally expect them to throttle when not fully utilized and thereby reducing power consumption.&lt;br /&gt;
&lt;br /&gt;
Given the maximum rate of updates and queries that we can currently support in the IC, one update call would consume 38.95J (Joules) and one query call 0.59J. These figures are for a hypothetically fully utilized IC.&lt;br /&gt;
With the current approximate rate of 3300 transactions/s, the IC uses 261.45J per transaction.&lt;br /&gt;
&lt;br /&gt;
== Putting this in context == &lt;br /&gt;
We can see that even with conservative estimations, the energy consumption of the Internet Computer is substantially lower than competing blockchain projects, but also existing (highly optimized) web2 tech. See the table below to put IC performance in perspective. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Energy consumption comparison&lt;br /&gt;
|-&lt;br /&gt;
! Source !! Cost (measured in Joules (J))&lt;br /&gt;
|-&lt;br /&gt;
| One Internet Computer transaction || 261&amp;amp;thinsp;J&lt;br /&gt;
|-&lt;br /&gt;
| One Google search || 1&#039;080&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://store.chipkin.com/articles/did-you-know-it-takes-00003-kwh-per-google-search-and-more&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Solana transaction || 1&#039;837&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://solana.com/news/solana-energy-usage-report-november-2021#ref1&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Ethereum 2 transaction || 126&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://blog.ethereum.org/2021/05/18/country-power-no-more/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Cardano transaction || 1&#039;972&#039;440&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://www.trgdatacenters.com/most-environment-friendly-cryptocurrencies/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Ethereum transaction || 692&#039;820&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://digiconomist.net/ethereum-energy-consumption/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Bitcoin transaction || 6&#039;995&#039;592&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://digiconomist.net/bitcoin-energy-consumption&amp;lt;/ref&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion and next steps ==&lt;br /&gt;
The Internet Computer today already shows impressive performance. On top of that, it should be possible to further scale out the IC using:&lt;br /&gt;
* More subnets: This will immediately increase the query and update call throughput. While adding subnets might eventually lead to other scalability problems, the IC in its current shape should be able to support hundreds of subnets.&lt;br /&gt;
* Performance improvements: Performance can also be improved by better single machine, network and consensus performance tuning. Increasing the performance by at least an order of magnitude is plausible.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/dfinity/the-internet-computers-transaction-speed-and-finality-outpace-other-l1-blockchains-8e7d25e4b2ef The Internet Computer’s Transaction Speed and Finality Outpace Other L1 Blockchains]&lt;br /&gt;
* [https://forum.dfinity.org/t/internet-computer-performance-dec-1-2021-load-testing/9240 Internet Computer Performance - Dec 1, 2021 Load testing]&lt;br /&gt;
=== References === &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Internet_Computer_performance&amp;diff=2395</id>
		<title>Internet Computer performance</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Internet_Computer_performance&amp;diff=2395"/>
		<updated>2022-05-25T13:41:04Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A key objective of the Internet Computer is to provide a public compute layer that replaces traditional IT. A natural concern is that this will cause an increase in global energy consumption, which is bad for the environment, because the Internet Computer is a blockchain network. However, this is not the case.&lt;br /&gt;
&lt;br /&gt;
The Internet Computer works very differently to other blockchains, and is powered by advanced new cryptography. Internally, the network is able to strictly limit the replication of data and computation, while still providing the liveness and security guarantees expected of a blockchain. It also has the ability to assign different “trust levels” to units of blockchain code that it hosts (“smart contracts”), which changes the level of replication applied to their computations and data. In its current state of development, it is already orders of magnitude more efficient than other blockchains, but it is designed to eventually become more efficient that traditional IT too.&lt;br /&gt;
&lt;br /&gt;
Like all blockchains, the Internet Computer network directly applies replication, in combination with advanced cryptography, to create a tamperproof platform with far better liveness guarantees than traditional IT. Yet, it also limits replication, while using the replication that occurs to drive efficiency, for example by scaling out “query” transactions. Systems and services built using traditional IT platform often heavily reply upon replication, but because replication is tagged-on, rather than being a core part of how the underlying platform works, we believe that in the long run the Internet Computer will be substantially more efficient.&lt;br /&gt;
&lt;br /&gt;
For example, a large online service might be built on Amazon Web Services using a database in a master-slave configuration, Kubernetes instances of web workers, memcached instances for caching the results of database queries, and a CDN (content distribution network) that caches web content they serve on the edge of the network. This already creates a large amount of replication without creating a tamperproof platform, nor providing liveness guarantees. For example, each slave node of the database replicates its computations and data, and regular snapshots will also be taken as backups, data used by the web workers is replicated by the memcached instances, and each work will also cache data in its memory, while the product of web queries will be replicated all over the world on CDN nodes.&lt;br /&gt;
&lt;br /&gt;
Because replication is at the core of the design of the Internet Computer, it can derive powerful security, liveness and other properties from replication, while also applying it more efficiently. For example, because the Internet Computer is a single logical blockchain and platform, as it grows larger, the utilization of the underlying node hardware upon which it runs can be made higher than, say, a standalone server machine in a data center. A key objective of the Internet Computer is, over time, to provide a public compute platform that provides a more power efficient way for the world to build systems and services.&lt;br /&gt;
&lt;br /&gt;
== Performance experiments == &lt;br /&gt;
Here, we describe the DFINITY Foundation&#039;s performance evaluation of the Internet Computer. The [https://forum.dfinity.org/t/internet-computer-performance-dec-1-2021-load-testing/9240 current measurements] are from May 2022.&lt;br /&gt;
&lt;br /&gt;
Scalability of the Internet Computer is facilitated by sharding the IC into subnet blockchains. Every subnet blockchain can process &#039;&#039;&#039;update calls&#039;&#039;&#039; (writes) from ingress messages independently from other subnets. The IC can scale up by adding more subnets at the cost of having more network traffic (as applications potentially need to communicate across subnets). In its current form, the IC should be able to scale out to hundreds of subnets.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Query calls&#039;&#039;&#039; (reads) can be processed locally by nodes in a subnet. The response to a query call can therefore have low latency since the query just needs a response by a single node and does not require inter-node communication or agreement. The more nodes a subnet has, the more query calls it can handle; and the more nodes the IC has, the more query calls it can handle.&lt;br /&gt;
&lt;br /&gt;
== Test setup ==&lt;br /&gt;
&lt;br /&gt;
The experiments were run concurrently against all subnets other than the NNS and some of the most utilized application subnets to avoid disturbance of active IC users. &lt;br /&gt;
The IC has a set of boundary nodes that route calls to the core nodes that host the subnets. The experiments sent loads against the subnets directly and are did not route traffic through the boundary nodes. Boundary nodes have additional rate limiting, which is currently set slightly more conservative compared to what the IC can handle and running against the boundary nodes would therefore be  unsuitable for performance evaluation. &lt;br /&gt;
The experiment targeted all nodes in every subnet concurrently, much the same as what boundary nodes would be doing if we would use them.&lt;br /&gt;
&lt;br /&gt;
The experiment consisted of installing one counter canister in every subnet. This counter canister is essentially a no-op canister. It only maintains a counter, which can be queried via query calls and incremented via update calls. The counter value is not using orthogonal persistence, so the overhead for the execution layer of the IC is minimal. Stressing the counter canister can be seen as a way to determine the system overhead or baseline performance.&lt;br /&gt;
&lt;br /&gt;
== Measurements ==&lt;br /&gt;
&lt;br /&gt;
=== Update calls ===&lt;br /&gt;
The Internet Computer can currently sustain more than &#039;&#039;&#039;22&#039;000 updates/second&#039;&#039;&#039; for a period of four minutes, with peaks over &#039;&#039;&#039;22&#039;150 updates/second.&#039;&#039;&#039;&lt;br /&gt;
The update calls measured here are triggered from ingress messages sent from outside the IC.&lt;br /&gt;
&lt;br /&gt;
=== Query calls ===&lt;br /&gt;
Arguably more important are query calls, since they contribute to more than 90% of the traffic observed on the IC.&lt;br /&gt;
The Internet Computer can currently process up to &#039;&#039;&#039;1&#039;450&#039;395 queries per second.&#039;&#039;&#039;&lt;br /&gt;
During the experiment each load is increased incrementally and run for a period of 5 minutes.&lt;br /&gt;
&lt;br /&gt;
== Energy consumption == &lt;br /&gt;
The following is an approximation of mainnet power consumption. The peak power consumption of our nodes is 700W.&lt;br /&gt;
If we assume a power usage effectiveness (PUE)  [https://en.wikipedia.org/wiki/Power_usage_effectiveness 1], [https://energyinnovation.org/2020/03/17/how-much-energy-do-data-centers-really-use/ 2],  of 2.33 that leads to a total power consumption of 1631.0W including cooling and other data center operations costs.&lt;br /&gt;
Given a total of 518 nodes and 11 boundary nodes in mainnet, resulting in a worst case of 862799W to operate all IC nodes for mainnet. This is a worst case analysis for power consumption of nodes as we would normally expect them to throttle when not fully utilized and thereby reducing power consumption.&lt;br /&gt;
&lt;br /&gt;
Given the maximum rate of updates and queries that we can currently support in the IC, one update call would consume 38.95J (Joules) and one query call 0.59J. These figures are for a hypothetically fully utilized IC.&lt;br /&gt;
With the current approximate rate of 3300 transactions/s, the IC uses 261.45J per transaction.&lt;br /&gt;
&lt;br /&gt;
== Putting this in context == &lt;br /&gt;
We can see that even with conservative estimations, the energy consumption of the Internet Computer is substantially lower than competing blockchain projects, but also existing (highly optimized) web2 tech. See the table below to put IC performance in perspective. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Energy consumption comparison&lt;br /&gt;
|-&lt;br /&gt;
! Source !! Cost (measured in Joules (J))&lt;br /&gt;
|-&lt;br /&gt;
| One Internet Computer transaction || 261&amp;amp;thinsp;J&lt;br /&gt;
|-&lt;br /&gt;
| One Google search || 1&#039;080&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://store.chipkin.com/articles/did-you-know-it-takes-00003-kwh-per-google-search-and-more&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Solana transaction || 1&#039;837&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://solana.com/news/solana-energy-usage-report-november-2021#ref1&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Ethereum 2 transaction || 126&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://blog.ethereum.org/2021/05/18/country-power-no-more/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Cardano transaction || 1&#039;972&#039;440&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://www.trgdatacenters.com/most-environment-friendly-cryptocurrencies/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Ethereum transaction || 692&#039;820&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://digiconomist.net/ethereum-energy-consumption/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Bitcoin transaction || 6&#039;995&#039;592&#039;000&amp;amp;thinsp;J&amp;lt;ref&amp;gt;https://digiconomist.net/bitcoin-energy-consumption&amp;lt;/ref&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion and next steps ==&lt;br /&gt;
The Internet Computer today already shows impressive performance. On top of that, it should be possible to further scale out the IC using:&lt;br /&gt;
* More subnets: This will immediately increase the query and update call throughput. While adding subnets might eventually lead to other scalability problems, the IC in its current shape should be able to support hundreds of subnets.&lt;br /&gt;
* Performance improvements: Performance can also be improved by better single machine, network and consensus performance tuning. Increasing the performance by at least an order of magnitude is plausible.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/dfinity/the-internet-computers-transaction-speed-and-finality-outpace-other-l1-blockchains-8e7d25e4b2ef The Internet Computer’s Transaction Speed and Finality Outpace Other L1 Blockchains]&lt;br /&gt;
* [https://forum.dfinity.org/t/internet-computer-performance-dec-1-2021-load-testing/9240 Internet Computer Performance - Dec 1, 2021 Load testing]&lt;br /&gt;
=== References === &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Internet_Computer_performance&amp;diff=2394</id>
		<title>Internet Computer performance</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Internet_Computer_performance&amp;diff=2394"/>
		<updated>2022-05-25T13:39:02Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A key objective of the Internet Computer is to provide a public compute layer that replaces traditional IT. A natural concern is that this will cause an increase in global energy consumption, which is bad for the environment, because the Internet Computer is a blockchain network. However, this is not the case.&lt;br /&gt;
&lt;br /&gt;
The Internet Computer works very differently to other blockchains, and is powered by advanced new cryptography. Internally, the network is able to strictly limit the replication of data and computation, while still providing the liveness and security guarantees expected of a blockchain. It also has the ability to assign different “trust levels” to units of blockchain code that it hosts (“smart contracts”), which changes the level of replication applied to their computations and data. In its current state of development, it is already orders of magnitude more efficient than other blockchains, but it is designed to eventually become more efficient that traditional IT too.&lt;br /&gt;
&lt;br /&gt;
Like all blockchains, the Internet Computer network directly applies replication, in combination with advanced cryptography, to create a tamperproof platform with far better liveness guarantees than traditional IT. Yet, it also limits replication, while using the replication that occurs to drive efficiency, for example by scaling out “query” transactions. Systems and services built using traditional IT platform often heavily reply upon replication, but because replication is tagged-on, rather than being a core part of how the underlying platform works, we believe that in the long run the Internet Computer will be substantially more efficient.&lt;br /&gt;
&lt;br /&gt;
For example, a large online service might be built on Amazon Web Services using a database in a master-slave configuration, Kubernetes instances of web workers, memcached instances for caching the results of database queries, and a CDN (content distribution network) that caches web content they serve on the edge of the network. This already creates a large amount of replication without creating a tamperproof platform, nor providing liveness guarantees. For example, each slave node of the database replicates its computations and data, and regular snapshots will also be taken as backups, data used by the web workers is replicated by the memcached instances, and each work will also cache data in its memory, while the product of web queries will be replicated all over the world on CDN nodes.&lt;br /&gt;
&lt;br /&gt;
Because replication is at the core of the design of the Internet Computer, it can derive powerful security, liveness and other properties from replication, while also applying it more efficiently. For example, because the Internet Computer is a single logical blockchain and platform, as it grows larger, the utilization of the underlying node hardware upon which it runs can be made higher than, say, a standalone server machine in a data center. A key objective of the Internet Computer is, over time, to provide a public compute platform that provides a more power efficient way for the world to build systems and services.&lt;br /&gt;
&lt;br /&gt;
== Performance experiments == &lt;br /&gt;
Here, we describe the DFINITY Foundation&#039;s performance evaluation of the Internet Computer. The [https://forum.dfinity.org/t/internet-computer-performance-dec-1-2021-load-testing/9240 current measurements] are from May 2022.&lt;br /&gt;
&lt;br /&gt;
Scalability of the Internet Computer is facilitated by sharding the IC into subnet blockchains. Every subnet blockchain can process &#039;&#039;&#039;update calls&#039;&#039;&#039; (writes) from ingress messages independently from other subnets. The IC can scale up by adding more subnets at the cost of having more network traffic (as applications potentially need to communicate across subnets). In its current form, the IC should be able to scale out to hundreds of subnets.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Query calls&#039;&#039;&#039; (reads) can be processed locally by nodes in a subnet. The response to a query call can therefore have low latency since the query just needs a response by a single node and does not require inter-node communication or agreement. The more nodes a subnet has, the more query calls it can handle; and the more nodes the IC has, the more query calls it can handle.&lt;br /&gt;
&lt;br /&gt;
== Test setup ==&lt;br /&gt;
&lt;br /&gt;
The experiments were run concurrently against all subnets other than the NNS and some of the most utilized application subnets to avoid disturbance of active IC users. &lt;br /&gt;
The IC has a set of boundary nodes that route calls to the core nodes that host the subnets. The experiments sent loads against the subnets directly and are did not route traffic through the boundary nodes. Boundary nodes have additional rate limiting, which is currently set slightly more conservative compared to what the IC can handle and running against the boundary nodes would therefore be  unsuitable for performance evaluation. &lt;br /&gt;
The experiment targeted all nodes in every subnet concurrently, much the same as what boundary nodes would be doing if we would use them.&lt;br /&gt;
&lt;br /&gt;
The experiment consisted of installing one counter canister in every subnet. This counter canister is essentially a no-op canister. It only maintains a counter, which can be queried via query calls and incremented via update calls. The counter value is not using orthogonal persistence, so the overhead for the execution layer of the IC is minimal. Stressing the counter canister can be seen as a way to determine the system overhead or baseline performance.&lt;br /&gt;
&lt;br /&gt;
== Measurements ==&lt;br /&gt;
&lt;br /&gt;
=== Update calls ===&lt;br /&gt;
The Internet Computer can currently sustain more than &#039;&#039;&#039;22&#039;000 updates/second&#039;&#039;&#039; for a period of four minutes, with peaks over &#039;&#039;&#039;22&#039;150 updates/second.&#039;&#039;&#039;&lt;br /&gt;
The update calls measured here are triggered from ingress messages sent from outside the IC.&lt;br /&gt;
&lt;br /&gt;
=== Query calls ===&lt;br /&gt;
Arguably more important are query calls, since they contribute to more than 90% of the traffic observed on the IC.&lt;br /&gt;
The Internet Computer can currently process up to &#039;&#039;&#039;1&#039;450&#039;395 queries per second.&#039;&#039;&#039;&lt;br /&gt;
During the experiment each load is increased incrementally and run for a period of 5 minutes.&lt;br /&gt;
&lt;br /&gt;
== Energy consumption == &lt;br /&gt;
The following is an approximation of mainnet power consumption. The peak power consumption of our nodes is 700W.&lt;br /&gt;
If we assume a power usage effectiveness (PUE)  [https://en.wikipedia.org/wiki/Power_usage_effectiveness 1], [https://energyinnovation.org/2020/03/17/how-much-energy-do-data-centers-really-use/ 2],  of 2.33 that leads to a total power consumption of 1631.0W including cooling and other data center operations costs.&lt;br /&gt;
Given a total of 518 nodes and 11 boundary nodes in mainnet, resulting in a worst case of 862799W to operate all IC nodes for mainnet. This is a worst case analysis for power consumption of nodes as we would normally expect them to throttle when not fully utilized and thereby reducing power consumption.&lt;br /&gt;
&lt;br /&gt;
Given the maximum rate of updates and queries that we can currently support in the IC, one update call would consume 38.95J (Joules) and one query call 0.59J. These figures are for a hypothetically fully utilized IC.&lt;br /&gt;
With the current approximate rate of 3300 transactions/s, the IC uses 261.45J per transaction.&lt;br /&gt;
&lt;br /&gt;
== Putting this in context == &lt;br /&gt;
We can see that even with conservative estimations, the energy consumption of the Internet Computer is substantially lower than competing blockchain projects, but also existing (highly optimized) web2 tech. See the table below to put IC performance in perspective. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Energy consumption comparison&lt;br /&gt;
|-&lt;br /&gt;
! Source !! Cost (measured in Joules (J))&lt;br /&gt;
|-&lt;br /&gt;
| One Internet Computer transaction || 261 J&lt;br /&gt;
|-&lt;br /&gt;
| One Google search || 1&#039;080J&amp;lt;ref&amp;gt;https://store.chipkin.com/articles/did-you-know-it-takes-00003-kwh-per-google-search-and-more&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Solana transaction || 1&#039;837 J&amp;lt;ref&amp;gt;https://solana.com/news/solana-energy-usage-report-november-2021#ref1&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Ethereum 2 transaction || 126&#039;000 J&amp;lt;ref&amp;gt;https://blog.ethereum.org/2021/05/18/country-power-no-more/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Cardano transaction || 1&#039;972&#039;440 J&amp;lt;ref&amp;gt;https://www.trgdatacenters.com/most-environment-friendly-cryptocurrencies/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Ethereum transaction || 692&#039;820&#039;000 J&amp;lt;ref&amp;gt;https://digiconomist.net/ethereum-energy-consumption/&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| One Bitcoin transaction || 6&#039;995&#039;592&#039;000 J&amp;lt;ref&amp;gt;https://digiconomist.net/bitcoin-energy-consumption&amp;lt;/ref&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion and next steps ==&lt;br /&gt;
The Internet Computer today already shows impressive performance. On top of that, it should be possible to further scale out the IC using:&lt;br /&gt;
* More subnets: This will immediately increase the query and update call throughput. While adding subnets might eventually lead to other scalability problems, the IC in its current shape should be able to support hundreds of subnets.&lt;br /&gt;
* Performance improvements: Performance can also be improved by better single machine, network and consensus performance tuning. Increasing the performance by at least an order of magnitude is plausible.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/dfinity/the-internet-computers-transaction-speed-and-finality-outpace-other-l1-blockchains-8e7d25e4b2ef The Internet Computer’s Transaction Speed and Finality Outpace Other L1 Blockchains]&lt;br /&gt;
* [https://forum.dfinity.org/t/internet-computer-performance-dec-1-2021-load-testing/9240 Internet Computer Performance - Dec 1, 2021 Load testing]&lt;br /&gt;
=== References === &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Internet_Computer_wiki&amp;diff=2393</id>
		<title>Internet Computer wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Internet_Computer_wiki&amp;diff=2393"/>
		<updated>2022-05-25T13:36:17Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Welcome!==&lt;br /&gt;
&lt;br /&gt;
This is a general source of information about the &#039;&#039;&#039;Internet Computer (IC)&#039;&#039;&#039;, the world&#039;s fastest and most powerful blockchain network&amp;lt;ref&amp;gt;https://medium.com/dfinity/the-internet-computers-transaction-speed-and-finality-outpace-other-l1-blockchains-8e7d25e4b2ef&amp;lt;/ref&amp;gt;. Created for and by the IC community, topics vary from cryptography, network governance, user experience, tokenomics, developer tutorials and more.&lt;br /&gt;
&lt;br /&gt;
==Introduction to the Internet Computer==&lt;br /&gt;
The Internet computer is the fastest and most scalable general-purpose blockchain. It was launched as an open source project by [https://dfinity.org/ DFINITY] in May 2021 with the aim of realising a blockchain singularity through hosting dapps, content, and performing computation for billions of users. In building the Internet Computer there have been a number of notable technological developments in cryptography ([https://medium.com/dfinity/chain-key-technology-one-public-key-for-the-internet-computer-6a3644901e28 chain-key cryptography]), programming languages such as [https://wiki.internetcomputer.org/wiki/Motoko Motoko] and others. &lt;br /&gt;
&lt;br /&gt;
===Most common place to start===&lt;br /&gt;
* [https://dfinity.org/icig.pdf Internet Computer: Infographic]&lt;br /&gt;
&amp;lt;!-- Link is going to nowhere. Should be updated if target is clear. Uncommented for now.&lt;br /&gt;
* [https://internetcomputer.org/education#online-courses/ Internet Computer: Online Courses]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[Glossary]]&lt;br /&gt;
&lt;br /&gt;
===For a general audience===&lt;br /&gt;
* [[Internet Computer overview]]&lt;br /&gt;
* [[Internet Computer vision]]&lt;br /&gt;
* [https://dfinity.org/roadmap/ Internet Computer roadmap]&lt;br /&gt;
&lt;br /&gt;
===For a more technical audience===&lt;br /&gt;
* [https://eprint.iacr.org/2022/087 &amp;quot;Internet Computer for Geeks&amp;quot; paper]&lt;br /&gt;
* The [https://dfinity.org/howitworks &amp;quot;How it works&amp;quot; series] with videos and in-depth articles on various topics.&lt;br /&gt;
* [https://www.reddit.com/r/dfinity/comments/ozboyi/megathread_technical_amas/ Technical AMAs on Reddit by different IC and DFINITY teams]&lt;br /&gt;
&lt;br /&gt;
== Internet Identity Introduction == &lt;br /&gt;
One of the core benefits of building on the Internet Computer is that end users do not need to pay fees or use tokens to access and use dapps. As an alternative to authenticating from a wallet, users can authenticate with an Internet Identity. Learn more information about Internet Identity (II), a blockchain authentication framework supported by the Internet Computer:&lt;br /&gt;
&lt;br /&gt;
* [[What is Internet Identity]]&lt;br /&gt;
* [[How to create an Internet Identity]]&lt;br /&gt;
* [[Internet Identity technical overview]]&lt;br /&gt;
* [https://identity.ic0.app/ Create an Internet Identity]&lt;br /&gt;
&lt;br /&gt;
==IC for Dapp Users ==&lt;br /&gt;
&lt;br /&gt;
If you use or are interested in using dapps on the Internet Computer, this section will help you understand the user experience benefits of the IC, how to use Internet Identity, or find more IC dapps.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* [[Introduction to the Internet Computer for dapp users]]&lt;br /&gt;
* [[Index of dapps on the Internet Computer]]&lt;br /&gt;
&lt;br /&gt;
See more in [[Internet Computer for dapp users]]&lt;br /&gt;
&lt;br /&gt;
== IC for ICP Token-holders, Stakers, and Neuron Holders==&lt;br /&gt;
&lt;br /&gt;
The Internet Computer is governed by on-chain governance system called the Network Nervous System (NNS). To participate on governance, users need to stake ICP tokens. This section will explain how the NNS works, ICP tokens, staking, voting, rewards, and options for managing one&#039;s ICP.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* [[ICP token]]&lt;br /&gt;
* [[Tutorials for acquiring, managing, and staking ICP]]&lt;br /&gt;
* [[Staking, voting and rewards]]&lt;br /&gt;
* [[Governance of the Internet Computer]]&lt;br /&gt;
* [[Network Nervous System]]&lt;br /&gt;
* [[Total supply, circulating supply, and staked_ICP]]&lt;br /&gt;
&lt;br /&gt;
See more in [[Internet Computer token-holders, investors, and neuron holders]].&lt;br /&gt;
&lt;br /&gt;
== IC for Smart Contract and Dapp Developers ==&lt;br /&gt;
&lt;br /&gt;
The Internet Computer (IC) is a new platform for executing smart contracts. This section contains information for developers, including links to documentation, developer forums, and relevant dashboards.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* [[Canisters (dapps/smart contracts)]]&lt;br /&gt;
* [https://smartcontracts.org/ Developer documentation on smartcontract.org]&lt;br /&gt;
* [https://forum.dfinity.org/ IC community developer forum]&lt;br /&gt;
&amp;lt;!--* [[Index of libraries for Internet Computer development]]--&amp;gt;&lt;br /&gt;
&amp;lt;!--* [[Best practices for a high traffic dapp launch]]--&amp;gt;&lt;br /&gt;
* [[Bitcoin integration]]&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve been programming smart contracts on Ethereum before, you should read [[The Internet Computer for Ethereum Developers]].&lt;br /&gt;
&lt;br /&gt;
See more in [[Internet Computer for smart contract and dapp developers]].&lt;br /&gt;
&lt;br /&gt;
== IC for the Curious, Researchers and Blockchain Enthusiasts ==&lt;br /&gt;
&lt;br /&gt;
This section is for those interested in how the Internet Computer works under the hood. It touches many different subject areas from cryptography, consensus protocols, virtual machines, operating systems, networking, distributed systems, etc.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* [https://dfinity.org/howitworks/ How the Internet Computer Works]&lt;br /&gt;
* [https://dashboard.internetcomputer.org/ Internet Computer dashboard] &lt;br /&gt;
* [[Internet Computer performance]]&lt;br /&gt;
* [[DFINITY Foundation]]&lt;br /&gt;
* [[Bitcoin integration]]&lt;br /&gt;
&lt;br /&gt;
See more in [[Internet Computer for researchers and blockchain enthusiasts]].&lt;br /&gt;
&lt;br /&gt;
== For Node Providers == &lt;br /&gt;
Node providers invest in and operate node hardware, which powers the Internet Computer with processing and storage capacity. Running these nodes in data centers provides the high performance and the cost-effectiveness of the Internet Computer. Every node provider is allowed a limited amount of nodes.&lt;br /&gt;
* [[Node Provider Onboarding]]&lt;br /&gt;
* [[IC OS Installation Runbook - Supermicro]]&lt;br /&gt;
* [[IC OS Installation Runbook - Dell Poweredge]]&lt;br /&gt;
* [[Node rewards]]&lt;br /&gt;
&lt;br /&gt;
== Technical Working Groups == &lt;br /&gt;
* [[Identity &amp;amp; Authentication]]&lt;br /&gt;
* [[Developer Tooling]]&lt;br /&gt;
* [[Ledger &amp;amp; Tokenization]]&lt;br /&gt;
&lt;br /&gt;
== FAQs, Tutorials, and How-tos==&lt;br /&gt;
Tutorials are guided introductions to user stories, intended for first-time users and characterized by a shallow learning curve. How-Tos are step-by-step instructions for specific, narrow goals.&lt;br /&gt;
&lt;br /&gt;
===FAQs===&lt;br /&gt;
* [[FAQ]]&lt;br /&gt;
&lt;br /&gt;
===Best Practices===&lt;br /&gt;
Example:&lt;br /&gt;
* [[Managing ICP holdings]]&lt;br /&gt;
* [[Managing Internet Identity]]&lt;br /&gt;
* [[Maximizing Voting and NNS Rewards]] &lt;br /&gt;
See more in [[Best Practices]]&lt;br /&gt;
&lt;br /&gt;
=== Tutorials ===&lt;br /&gt;
Example:&lt;br /&gt;
* [[Tutorials for acquiring, managing, and staking ICP]]&lt;br /&gt;
* [[How-To: Claim neurons for seed participants]]&lt;br /&gt;
* [[How-To: Create an NNS motion proposal]]&lt;br /&gt;
* [[How-To: Set your neuron to follow another neuron]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See more in [[How-Tos]].&lt;br /&gt;
&lt;br /&gt;
==Contributing to the Wiki==&lt;br /&gt;
&lt;br /&gt;
=== How to contribute ===&lt;br /&gt;
Anyone can read the wiki. You can also edit pages, all you need to do is [https://wiki.internetcomputer.org/wiki/Special:CreateAccount create an account]. See more in [[Contributing to the wiki]].&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Internet_Computer_wiki&amp;diff=2392</id>
		<title>Internet Computer wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Internet_Computer_wiki&amp;diff=2392"/>
		<updated>2022-05-25T13:34:52Z</updated>

		<summary type="html">&lt;p&gt;Jan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Welcome!==&lt;br /&gt;
&lt;br /&gt;
This is a general source of information about the &#039;&#039;&#039;Internet Computer (IC)&#039;&#039;&#039;, the world&#039;s fastest and most powerful blockchain network&amp;lt;ref&amp;gt;https://medium.com/dfinity/the-internet-computers-transaction-speed-and-finality-outpace-other-l1-blockchains-8e7d25e4b2ef&amp;lt;/ref&amp;gt;. Created for and by the IC community, topics vary from cryptography, network governance, user experience, tokenomics, developer tutorials and more.&lt;br /&gt;
&lt;br /&gt;
==Introduction to the Internet Computer==&lt;br /&gt;
The Internet computer is the fastest and most scalable general-purpose blockchain. It was launched as an open source project by [https://dfinity.org/ DFINITY] in May 2021 with the aim of realising a blockchain singularity through hosting dapps, content, and performing computation for billions of users. In building the Internet Computer there have been a number of notable technological developments in cryptography ([https://medium.com/dfinity/chain-key-technology-one-public-key-for-the-internet-computer-6a3644901e28 chain-key cryptography]), programming languages such as [https://wiki.internetcomputer.org/wiki/Motoko Motoko] and others. &lt;br /&gt;
&lt;br /&gt;
===Most common place to start===&lt;br /&gt;
* [https://dfinity.org/icig.pdf Internet Computer: Infographic]&lt;br /&gt;
&amp;lt;!-- Link is going to nowhere. Should be updated if target is clear. Uncommented for now.&lt;br /&gt;
* [https://internetcomputer.org/education#online-courses/ Internet Computer: Online Courses]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[Glossary]]&lt;br /&gt;
&lt;br /&gt;
===For a general audience===&lt;br /&gt;
* [[Internet Computer overview]]&lt;br /&gt;
* [[Internet Computer vision]]&lt;br /&gt;
* [https://dfinity.org/roadmap/ Internet Computer roadmap]&lt;br /&gt;
&lt;br /&gt;
===For a more technical audience===&lt;br /&gt;
* [https://eprint.iacr.org/2022/087 &amp;quot;Internet Computer for Geeks&amp;quot; paper]&lt;br /&gt;
* The [https://dfinity.org/howitworks &amp;quot;How it works&amp;quot; series] with videos and in-depth articles on various topics.&lt;br /&gt;
* [https://www.reddit.com/r/dfinity/comments/ozboyi/megathread_technical_amas/ Technical AMAs on Reddit by different IC and DFINITY teams]&lt;br /&gt;
&lt;br /&gt;
== Internet Identity Introduction == &lt;br /&gt;
One of the core benefits of building on the Internet Computer is that end users do not need to pay fees or use tokens to access and use dapps. As an alternative to authenticating from a wallet, users can authenticate with an Internet Identity. Learn more information about Internet Identity (II), a blockchain authentication framework supported by the Internet Computer:&lt;br /&gt;
&lt;br /&gt;
* [[What is Internet Identity]]&lt;br /&gt;
* [[How to create an Internet Identity]]&lt;br /&gt;
* [[Internet Identity technical overview]]&lt;br /&gt;
* [https://identity.ic0.app/ Create an Internet Identity]&lt;br /&gt;
&lt;br /&gt;
==IC for Dapp Users ==&lt;br /&gt;
&lt;br /&gt;
If you use or are interested in using dapps on the Internet Computer, this section will help you understand the user experience benefits of the IC, how to use Internet Identity, or find more IC dapps.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* [[Introduction to the Internet Computer for dapp users]]&lt;br /&gt;
* [[Index of dapps on the Internet Computer]]&lt;br /&gt;
&lt;br /&gt;
See more in [[Internet Computer for dapp users]]&lt;br /&gt;
&lt;br /&gt;
== IC for ICP Token-holders, Stakers, and Neuron Holders==&lt;br /&gt;
&lt;br /&gt;
The Internet Computer is governed by on-chain governance system called the Network Nervous System (NNS). To participate on governance, users need to stake ICP tokens. This section will explain how the NNS works, ICP tokens, staking, voting, rewards, and options for managing one&#039;s ICP.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* [[ICP token]]&lt;br /&gt;
* [[Tutorials for acquiring, managing, and staking ICP]]&lt;br /&gt;
* [[Staking, voting and rewards]]&lt;br /&gt;
* [[Governance of the Internet Computer]]&lt;br /&gt;
* [[Network Nervous System]]&lt;br /&gt;
* [[Total supply, circulating supply, and staked_ICP]]&lt;br /&gt;
&lt;br /&gt;
See more in [[Internet Computer token-holders, investors, and neuron holders]].&lt;br /&gt;
&lt;br /&gt;
== IC for Smart Contract and Dapp Developers ==&lt;br /&gt;
&lt;br /&gt;
The Internet Computer (IC) is a new platform for executing smart contracts. This section contains information for developers, including links to documentation, developer forums, and relevant dashboards.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* [[Canisters (dapps/smart contracts)]]&lt;br /&gt;
* [https://smartcontracts.org/ Developer documentation on smartcontract.org]&lt;br /&gt;
* [https://forum.dfinity.org/ IC community developer forum]&lt;br /&gt;
&amp;lt;!--* [[Index of libraries for Internet Computer development]]--&amp;gt;&lt;br /&gt;
&amp;lt;!--* [[Best practices for a high traffic dapp launch]]--&amp;gt;&lt;br /&gt;
* [[Bitcoin integration]]&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve been programming smart contracts on Ethereum before, you should read [[The Internet Computer for Ethereum Developers]].&lt;br /&gt;
&lt;br /&gt;
See more in [[Internet Computer for smart contract and dapp developers]].&lt;br /&gt;
&lt;br /&gt;
== IC for the Curious, Researchers and Blockchain Enthusiasts ==&lt;br /&gt;
&lt;br /&gt;
This section is for those interested in how the Internet Computer works under the hood. It touches many different subject areas from cryptography, consensus protocols, virtual machines, operating systems, networking, distributed systems, etc.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* [https://dfinity.org/howitworks/ How the Internet Computer Works]&lt;br /&gt;
* [https://dashboard.internetcomputer.org/ Internet Computer dashboard] &lt;br /&gt;
* [[Internet Computer performance and energy consumption]]&lt;br /&gt;
* [[DFINITY Foundation]]&lt;br /&gt;
* [[Bitcoin integration]]&lt;br /&gt;
&lt;br /&gt;
See more in [[Internet Computer for researchers and blockchain enthusiasts]].&lt;br /&gt;
&lt;br /&gt;
== For Node Providers == &lt;br /&gt;
Node providers invest in and operate node hardware, which powers the Internet Computer with processing and storage capacity. Running these nodes in data centers provides the high performance and the cost-effectiveness of the Internet Computer. Every node provider is allowed a limited amount of nodes.&lt;br /&gt;
* [[Node Provider Onboarding]]&lt;br /&gt;
* [[IC OS Installation Runbook - Supermicro]]&lt;br /&gt;
* [[IC OS Installation Runbook - Dell Poweredge]]&lt;br /&gt;
* [[Node rewards]]&lt;br /&gt;
&lt;br /&gt;
== Technical Working Groups == &lt;br /&gt;
* [[Identity &amp;amp; Authentication]]&lt;br /&gt;
* [[Developer Tooling]]&lt;br /&gt;
* [[Ledger &amp;amp; Tokenization]]&lt;br /&gt;
&lt;br /&gt;
== FAQs, Tutorials, and How-tos==&lt;br /&gt;
Tutorials are guided introductions to user stories, intended for first-time users and characterized by a shallow learning curve. How-Tos are step-by-step instructions for specific, narrow goals.&lt;br /&gt;
&lt;br /&gt;
===FAQs===&lt;br /&gt;
* [[FAQ]]&lt;br /&gt;
&lt;br /&gt;
===Best Practices===&lt;br /&gt;
Example:&lt;br /&gt;
* [[Managing ICP holdings]]&lt;br /&gt;
* [[Managing Internet Identity]]&lt;br /&gt;
* [[Maximizing Voting and NNS Rewards]] &lt;br /&gt;
See more in [[Best Practices]]&lt;br /&gt;
&lt;br /&gt;
=== Tutorials ===&lt;br /&gt;
Example:&lt;br /&gt;
* [[Tutorials for acquiring, managing, and staking ICP]]&lt;br /&gt;
* [[How-To: Claim neurons for seed participants]]&lt;br /&gt;
* [[How-To: Create an NNS motion proposal]]&lt;br /&gt;
* [[How-To: Set your neuron to follow another neuron]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See more in [[How-Tos]].&lt;br /&gt;
&lt;br /&gt;
==Contributing to the Wiki==&lt;br /&gt;
&lt;br /&gt;
=== How to contribute ===&lt;br /&gt;
Anyone can read the wiki. You can also edit pages, all you need to do is [https://wiki.internetcomputer.org/wiki/Special:CreateAccount create an account]. See more in [[Contributing to the wiki]].&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Jan</name></author>
	</entry>
</feed>