Skip to content

Commit

Permalink
Merge branch 'master' into canister-history
Browse files Browse the repository at this point in the history
  • Loading branch information
jessiemongeon1 authored Oct 27, 2023
2 parents 86919f7 + 6961a2c commit a39727a
Show file tree
Hide file tree
Showing 83 changed files with 3,406 additions and 364 deletions.
60 changes: 60 additions & 0 deletions blog/news-and-updates/2023-10-25-update.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
---
title: Developer weekly update October 25, 2023
description: This week, we're excited to share the first video tutorial in the developer journey series, announce the name for the dfx version manager, and take a look at the details of a proposed new workflow for SNS launches.
tags: [Devs]
image: /img/blog/dev-update-blog-oct-25.jpg
---

# Developer weekly update October 25, 2023

![October 25 2023](../../static/img/blog/dev-update-blog-oct-25.jpg)

Hello developers and welcome back to developer weekly! This week, we're excited to share the first video tutorial in the developer journey series, announce the name for the `dfx` version manager, and take a look at the details of a proposed new workflow for SNS launches.

## Developer journey video series

In previous dev updates, we've introduced the developer journey documentation series and provided updates when new 'levels' of the tutorial series have been published. In today's update, we're excited to share that the first video corresponding to the documentation has been released!

The first video, **ICP Developer Journey 0.1 | Overview of the Internet Computer** corresponds to the very first page in the developer journey series, which can be found [here](/docs/current/tutorials/developer-journey/level-0/ic-overview).

New videos will be released every week, and will follow each page of the developer journey documentation - that means there will be a total of 36 videos!

The first video can be found on the DFINITY Youtube channel:

[![ICP Developer Journey 0.1 | Overview of the Internet Computer](https://img.youtube.com/vi/oBUpJ4CqmN0/0.jpg)](https://youtu.be/oBUpJ4CqmN0?si=q5r223tFnWoZTMGz)

## `dfx` version manager name decision

Last week, we asked for your feedback on naming an upcoming tool known as the `dfx` version manager. The results are in, and a name has been decided!

The `dfx` version manager will be called **dfxvm**.

Stay tuned for more updates on this new tool!

## Proposed new SNS workflow

Recently, a new SNS hand-off workflow has been proposed on the developer forum. This new workflow has been proposed because there has been a high amount of friction during the canister hand-off process, especially when handing off the SNS's asset canister.

For an SNS to be launched, the dapp's canisters must be handed over from the developers to the SNS itself. Prior to August 2023, this process included the following steps:

- An SNS is first approved to be launched through an NNS proposal.

- The dapp's canisters are then created and initialized, with the SNS governance canister's ID being publicly known.

- Then, developers hand over the dapp's canisters to the SNS.

- The SNS root canister is set as the controller of the canisters, and the SNS's proposal methods are configured so that they can only be called by the governance canister.

- Lastly, an NNS proposal is used to start the SNS decentralization swap and launch the SNS.

This process was amended in August 2023 to simplify and condense several steps, ultimately providing an SNS to be created through a single NNS proposal. In this revised workflow, the dapp's canisters are handed over from the developers to the NNS, then an NNS proposal creates the SNS canisters, initializes them, hands them over to the SNS, then starts the decentralization swap and launches the SNS.

This is how the SNS process currently operates.

The newly proposed workflow takes this current workflow and adds an additional step where once the SNS is launched, the SNS community upgrades the dapp's canisters through an SNS proposal. Within this upgrade, they can set the privileges within the dapp appropriately.

You can read more about this proposed workflow and provide your thoughts on the [developer forum](https://forum.dfinity.org/t/handing-over-dapp-canisters-to-an-sns-dao/23877).

That'll wrap up this week. Tune back in next week for more developer updates!

-DFINITY
8 changes: 4 additions & 4 deletions blog/news-and-updates/team-spotlight-fi.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Team spotlight - Financial integration
description: For this spotlight showcase, we're going to dive into the financial integration team, also known as the team behind the development of the IC ledgers and token standards.
description: For this spotlight showcase, we're going to dive into the financial integration (FI) team, also known as the team behind the development of the IC ledgers and token standards.
tags: [Team spotlight]
image: /img/blog/dev-update-blog-FI.jpg
---
Expand All @@ -11,7 +11,7 @@ Hello IC developers and welcome to another DFINITY team spotlight! For this spot

**To dive right in, what is the purpose of the Financial Integration team?**

*The Financial Integration team has three responsibilities:*
*The Financial Integration team contributes to the IC as follows:*

- *The development of the Ledgers and the standards around fungible tokens.*

Expand All @@ -23,9 +23,9 @@ Hello IC developers and welcome to another DFINITY team spotlight! For this spot

*The team is composed of 5 developers and 1 researcher.*

**Tokens and their tokenomics are a core piece of blockchains and interacting with them. On a fundamental level, what role do tokens and tokenomics play on the IC?**
**Tokens and tokenomics are are essential concepts for blockchains. On a fundamental level, what role do tokens and tokenomics play on the IC?**

*Tokens and tokenomics are essential in the Internet Computer (IC). Tokens serve as a medium of exchange and incentivize participation by rewarding users, developers, and validators. They can also enable decentralized applications (DApps) through smart contracts and play a role in governance, allowing token holders to influence network decisions. Additionally, tokens promote decentralization, reduce reliance on intermediaries, facilitate interoperability between blockchains, and define economic models for various projects. In essence, tokens and tokenomics are the foundational elements that drive the functionality, security, and growth of the IC and other blockchain networks.*
*The Internet Computer's utility token is ICP, named after the Internet Computer Protocol. This utility token is used for several functions within the network, such as staking to participate in the governance of the network, for getting cycles powering canister smart contracts, or the protocol rewards independent node providers (NPs) with newly minted ICP tokens for having their sovereign nodes contribute to the protocol. There are various other tokens that the community has created or governance tokens that were created in the process of decentralizing dapps by means of SNSs. Similar to the ICP token, SNS communities use SNS tokens to govern their dapp in a decentralized fashion.*

**Could you explain the difference between ICP, an ICRC token, and an ICRC-1 token? When would developers use one over another?**

Expand Down
14 changes: 5 additions & 9 deletions docs/concepts/governance.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,18 @@
# Neurons and governance

## Overview
As a decentralized blockchain, all changes to the configuration and behavior of the Internet Computer are controlled by a governance body called the Network Nervous System (NNS). The NNS controls many aspects of the Internet Computer blockchain including the following:
As a decentralized blockchain, all changes to the configuration and behavior of the Internet Computer are controlled by a governance system called the Network Nervous System (NNS). The NNS controls many aspects of the Internet Computer blockchain including:

- Which data center providers participate in the network.

- The number, location, and ownership of the nodes accepted from a data center provider.

- Assignment of nodes to subnet blockchains.

- Whether upgrades to canisters or to a new protocol version are allowed or not.
- Upgrades to newer protocol versions or upgrades of system canisters.

In addition, only members of the governance body can vote to adopt or reject requests to upgrade Internet Computer replicas or modify the Internet Computer protocol.
## Who can vote?

## Voting rights for stakeholders
To favor the long-term sustainability of ICP over short-term interests, only ICP token holders who stake their tokens can participate in the governance process. A staked amount of ICP is called a **neuron**. The amount of ICP staked in a neuron can only be converted back to ICP after the neuron’s lock-up period, called the “dissolve delay”, has elapsed. The longer the dissolve delay of a neuron, the higher the voting power associated with the neuron.

Because tokens on the Internet Computer are generally liquid, they do not represent a stable enough commitment on the part of their holders for them to be used for governance purposes. To provide the stability required for responsible governance, tokens can be converted to **neurons**. A neuron represents a number of ICP tokens that cannot be exchanged for a minimum period of time (the lock-up period).

When a person or organization has some number of ICP tokens locked up in a neuron, the neuron holder has the right to vote on proposals, and to be paid for voting in proportion to the number of ICP locked up, the length of the lock-up period and the relative number of votes cast.

The Internet Computer blockchain tracks the number of ICP tokens that are locked up in neurons and provides the logic necessary for voting in conjunction with managing ICP token account balances.
Neuron holders constitute the governing body of the NNS. Through their neurons, they can vote on proposals and thereby govern the ICP. To incentivize governance participation, neuron holders receive voting rewards. These rewards depend on the number of votes cast and the amount of ICP staked in the respective neurons.
96 changes: 96 additions & 0 deletions docs/concepts/what-is-ic.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# What is the Internet Computer?

The **Internet Computer** is a blockchain that enables developers, organizations, and entrepreneurs to build and deploy secure, autonomous, and tamper-proof **[canisters](/how-it-works/canister-lifecycle/)**, an evolution of **smart contracts**.

As a dapp developer, you might find it useful to think of the Internet Computer as providing the following key features:

- A **globally-accessible, public blockchain** for running smart contracts at web speed, that can serve interactive web content to users. You can read more about the architecture of the IC [here](/how-it-works/architecture-of-the-internet-computer/).

- A secure cryptographic protocol (**[Internet Computer protocol](/how-it-works/core-ic-protocol-overview/)**) run by nodes machines operated by independent node providers in independent data centers all over the world. This guarantees the secure execution of smart contracts.

- A **network of independent blockchains**, known as [subnets](./nodes-subnets.md), connected using [chain-key cryptography](/how-it-works/#Chain-key-cryptography) that can [scale out](/how-it-works/scalability/) its capacity as required.

## An open blockchain

The Internet Computer is a blockchain hosted on node machines operated by independent parties and located in geographically distributed data centers. The nodes run the [Internet Computer protocol](/how-it-works/core-ic-protocol-overview/), an advanced cryptographic fault-tolerant protocol which ensures that smart contracts running on the blockchain cannot be tampered with or stopped. The Internet Computer is composed of individual subnet blockchains running in parallel and connected using [chain-key cryptography](/how-it-works/#Chain-key-cryptography). This means that canisters running on a subnet can seamlessly call canisters hosted in any other subnet of the Internet Computer blockchain.

Another important feature of the Internet Computer is that it runs under the control of a decentralized, permissionless governance system, called **[Network Nervous System](/how-it-works/#Network-nervous-system)** (NNS), which runs completely on-chain. The NNS can make decisions on several topics, including scaling out the Internet Computer by creating new subnet blockchains, updating the node machines, and configuring parameters used in the Internet Computer protocol. Anyone can participate in the governance and submit new proposals to the NNS or vote on open proposals. To do so, users have to stake ICP, the Internet Computer utility token, and [create a **neuron** with the NNS](/docs/current/tokenomics/token-holders/nns-app-quickstart).

## Building the next generation of software and services

The Internet Computer protocol reduces platform-based risks and paves the way for innovation by re-imagining how software is built, deployed, and accessed.

For example, with the Internet Computer, developers can focus on writing code using canisters without environment-related distractions such as:

- Physical or virtual network configuration requirements.

- Load balancing services.

- Firewalls, network topology, or port management.

- Database configuration and maintenance.

- Storage volumes and devices.

By enabling developers to focus on building applications and delivering value, the Internet Computer helps simplify the development process, reduce time to market, and foster innovation.

For end-users, the Internet Computer provides a secure environment for accessing dapps with fewer risks. Because of the inherent security of the blockchain, programs running on the Internet Computer cannot be hijacked by malicious code, which also reduces the total cost of ownership for both application end-users or organizations.

In addition, because dapps can be "autonomous" and public, developers can write services that communicate with each other and share functions in ways that increase productivity and efficiency while leaving room to innovate and improve projects with confidence.

The Internet Computer also enables developers to use [cryptographically-secure identities](/how-it-works/web-authentication-identity/) to enforce access controls, reducing the need to rely on usernames and passwords or external identity management plug-ins.

## Learn more

- [Architecture of the Internet Computer](/how-it-works/architecture-of-the-internet-computer/).

- [The Internet Computer Protocol](/how-it-works/core-ic-protocol-overview/).

- [Peer-to-peer layer](/how-it-works/peer-to-peer-p2p/).

- [Consensus layer](/how-it-works/consensus/).

- [Message routing layer](/how-it-works/message-routing/).

- [Execution layer](/how-it-works/execution-layer/).

- [Chain-key cryptography](/how-it-works/chain-key-technology/).

- [Chain-key tokens](/how-it-works/chain-key-tokens/).

- [The Network Nervous System](https://internetcomputer.org/nns/).

- [Service Nervous Systems](https://internetcomputer.org/sns/).

- [Canisters](/how-it-works/canister-lifecycle/).

- [Internet Identity](/how-it-works/web-authentication-identity/).

## Get started developing on the IC

- Get started developing on the IC by embarking on your [developer journey](/docs/current/tutorials/developer-journey).

- [Designing a dapp](/docs/current/developer-docs/backend/design-dapps).

- [Building backend canisters with Motoko](/docs/current/developer-docs/backend/motoko/).

- [Building backend canisters with Rust](/docs/current/developer-docs/backend/rust/).

## Connect with the IC community

- [Developer Discord community](https://discord.com/invite/cA7y6ezyE2), which is a large chatroom for IC developers to ask questions, get help, or chat with other developers asynchronously via text chat.

- [Developer journey forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893).

- [Developer tooling working group](https://www.google.com/calendar/event?eid=MHY0cjBubmlnYXY1cTkzZzVzcmozb3ZjZm5fMjAyMzEwMDVUMTcwMDAwWiBjX2Nnb2VxOTE3cnBlYXA3dnNlM2lzMWhsMzEwQGc&ctz=Europe/Zurich).

- [Motoko bootcamp](https://github.com/motoko-bootcamp/bootcamp-2022), a week-long crash course to learning all things Motoko.

- [Motoko developer working group](https://www.google.com/calendar/event?eid=ZWVnb2luaHU0ZjduMTNpZHI3MWJkcWVwNWdfMjAyMzEwMTJUMTUwMDAwWiBjX2Nnb2VxOTE3cnBlYXA3dnNlM2lzMWhsMzEwQGc&ctz=Europe/Zurich).

- [Upcoming events and conferences](https://dfinity.org/events-and-news/).

- [Upcoming hackathons](https://dfinity.org/hackathons/).

- [Weekly developer office hours](https://discord.gg/4a7SZzRk?event=1164114241893187655) to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on our [developer Discord](https://discord.com/invite/cA7y6ezyE2) group.

4 changes: 2 additions & 2 deletions docs/developer-docs/gas-cost.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,9 @@ To derive the estimated cost for a GB Storage per month, we assume a 30 day mont
| HTTPS outcall request message size (per byte) | For sending an HTTPS outcall to a server outside the IC, per request byte (http_request) | Sending canister | $0.000000006806072 | $0.000000017800496 |
| HTTPS outcall response message size (per byte) | For sending an HTTPS outcall to a server outside the IC, per reserved response byte (http_request) | Sending canister | $0.000000013612144 | $0.000000035600992 |

Cost per Transaction in USD (XDR/USD exchange rate as of November 23, 2022):
Cost per Transaction in USD (XDR/USD exchange rate as of November 23, 2022).

Assuming a 30-day month — 
The following table shows the calculated storage cost per GB for a 30-day month:

| | | 13-node Application Subnets | 34-node Application Subnets |
|----------------------|------------------------------------|-----------------------------|-----------------------------|
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,44 @@ match result {

You can reference the crate's implementation logic [here](https://sourcegraph.com/github.com/dfinity/ic/-/blob/rs/validator/src/ingress_validation.rs?L605) for additional context.

## Verifying signatures with the library `@dfinity/standalone-sig-verifier-web`

An `npm` library has been created as a JavaScript/TypeScript wrapper for the [`ic-standalone-sig-verifier`](https://github.com/dfinity/ic/tree/master/rs/crypto/standalone-sig-verifier) Rust crate.


The following is an example of how this library can be used:

```javascript
import initSigVerifier, {verifyIcSignature} from '@dfinity/standalone-sig-verifier-web';

async function example(dataRaw, signatureRaw, derPublicKey, root_key) {
// load wasm module
await initSigVerifier();
try {
// call the signature verification wasm function
verifyIcSignature(dataRaw, signatureRaw, derPublicKey, root_key);
console.log('signature verified successfully')
} catch (error) {
// the library throws an error if the signature is invalid
console.error('signature verification failed', error)
}
}
```

:::caution

When using this library, you should keep the following in mind:

- Verifying signatures on the frontend is unsafe, as malicious actors could modify frontend code in order to bypass signature verification. Therefore, it is recommended that this library be used for demos, backends, or other situations where the code either cannot be modified or where modifications do not create a security risk.

- This library is built from the `ic`'s `master` branch, meaning the API used may change.

- This library's resulting Wasm module is large (400 kB when gzipped); this should be taken into consideration for your project.

:::

You can download the library [here](https://www.npmjs.com/package/@dfinity/standalone-sig-verifier-web).

## Resources

- Rust [ic-validator-ingress-message](https://github.com/dfinity/ic/tree/master/rs/validator) crate.
Expand Down
Loading

0 comments on commit a39727a

Please sign in to comment.