Skip to content

Commit

Permalink
Merge branch 'master' into oggy/tidy-up-canister-calls
Browse files Browse the repository at this point in the history
  • Loading branch information
Dfinity-Bjoern authored Jan 3, 2025
2 parents 61a6b7f + ad2505b commit db28c6e
Show file tree
Hide file tree
Showing 148 changed files with 1,358 additions and 6,694 deletions.
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,5 @@ stats.py
unlighthouse.config.ts
# Local Netlify folder
.netlify
roadmap.json
roadmap.d.ts
/roadmap/roadmap.json
/roadmap/roadmap.d.ts
13 changes: 5 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,11 +142,6 @@ This audience should be kept in mind when writing docs. For example:
### Documentation types
The structure and content of the documentation page will vary based on the document type. Some common types are:

#### Overview
An overview of a documentation section or broad concept of ICP. When creating an overview page that discusses the capabilities of ICP, the benefits and attributes of the possible capabilities should be written about, not only the currently implemented workflows. For example, instead of writing about the currently implemented Bitcoin and Ethereum integrations, the [Chain Fusion overview](/docs/current/developer-docs/multi-chain/overview) page discusses ICP’s cross-chain functionalities and benefits on a much broader scale beyond the two current integrations.

For overview pages, using bullet point lists to describe specific benefits or features of ICP is recommended.

#### Feature or tool detail page
A page that details a specific tool or feature. Feature or tool pages should provide a deeper explanation of a specific feature or tool, why a developer should use it, and how they can use it. It should describe the currently implemented workflows the feature/tool supports, and should not include details of conceptual ideas that are not currently live for developers to use (future roadmap items, possible improvements in the future, etc.)

Expand Down Expand Up @@ -605,23 +600,25 @@ The list of tags is not final, and will be updated as the project evolves. For n
- `DAO`
- `DeFi`
- `Enterprise`
- `Games`
- `Gaming`
- `Metaverse`
- `NFT`
- `SocialFi`
- `Tools / Infrastructure`
- `Wallet`
- `Analytics`
- `Creator Economy`
### Object schema
```
```json
{
id: string,
name: string,
oneLiner: string, // short description of the project
website: string, // URL starting with `https://`
tags: ('AI' | 'Chain Fusion' | 'Bitcoin' | 'Ethereum' | 'DAO' | 'DeFi' | 'Enterprise' | 'Games' | 'Metaverse' | 'NFT' | 'SocialFi' | 'Tools / Infrastructure' | 'Wallet')[],
tags: ('AI' | 'Chain Fusion' | 'Bitcoin' | 'Ethereum' | 'DAO' | 'DeFi' | 'Enterprise' | 'Gaming' | 'Metaverse' | 'NFT' | 'SocialFi' | 'Tools / Infrastructure' | 'Wallet' | 'Analytics' | 'Creator Economy')[],
description: string, // description of the project
stats: string, // eg. "10,000 users"
logo: string, // url to logo file, eg. /img/showcase/awesome-icp-project_logo.webp
Expand Down
55 changes: 55 additions & 0 deletions blog/news-and-updates/2024-12-28-update.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
---
title: Developer weekly update December 18, 2024
description: This week, we're going to take a look at the road ahead for ICP developers in 2025 and dive into some roadmap items and ongoing initiatives that we'll see take the stage in the new year.
tags: [Devs]
image: /img/blog/dev-update-blog-dec-18.jpg
---

# Developer weekly update December 18, 2024

![December 18 2024](../../static/img/blog/dev-update-blog-dec-18.jpg)

Hello developers, and welcome to this week's developer weekly update! This week, we're going to take a look at the road ahead for ICP developers in 2025 and dive into some roadmap items and ongoing initiatives that we'll see take the stage in the new year. Let's get started!

## Roadmap milestones

In 2025, ICP will work toward several roadmap milestones, including:

- Flux: Focused on increasing network compute capacity and scalability, Flux plans to implement asynchronous checkpointing and canister migration between subnets.

- Ignition: Part of the decentralized AI roadmap, the Ignition milestone will expand compute and memory capabilities of canisters.

- Helium: Next up in the Chain Fusion roadmap is an integration with Solana through a Solana RPC canister.

- Niobium: The long-awaited vetKeys feature enabling decentralized key management.

You can view details about the roadmap on [internetcomputer.org](https://internetcomputer.org/roadmap).

## Decentralized AI: DeAI Manifesto

Decentralized AI on ICP is just getting started and will be a major topic of conversation and development in 2025. Recently, the DeAI working group put together the [DeAI Manifesto](https://deaimanifesto.com/), a set of parameters and values that they believe will drive decentralized AI across all ecosystems—not just ICP. Some of these values include:

- DeAI is safe AI.

- DeAI is responsible AI.

- DeAI is verifiable. AI

You can read and sign the [DeAI Manifesto](https://deaimanifesto.com/) to participate in DeAI on ICP.

## ICP developer ecosystem growth

In the [Electric Capital 2024 Developer Report](https://www.developerreport.com/developer-report), the ICP developer community ranked highly across several different statistics, including:

- In 2024, ICP was the third largest ecosystem for new developers.

- In 2024, ICP was the second highest chain for full-time developer growth.

- In Africa, ICP was the third most popular blockchain ecosystem.

More details can be found [on X](https://x.com/dfinity/status/1867619158906876252).

That'll wrap up this week and this year! Tune back in 2025 for more developer updates!

-DFINITY

33 changes: 16 additions & 17 deletions docs/developer-docs/ai/ai-on-chain.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ keywords: [intermediate, tutorial, machine learning, ml, mnist, rust]
import useBaseUrl from "@docusaurus/useBaseUrl";
import { MarkdownChipRow } from "/src/components/Chip/MarkdownChipRow";
import '/src/components/CenterImages/center.scss';
import TabItem from "@theme/TabItem";
import Tabs from "@theme/Tabs";

# Image classification sample

<MarkdownChipRow labels={["Advanced", "Tutorial", "Rust" ]} />



ICP's unique ability to run compute at scale allows AI and neural networks to run directly onchain within a canister smart contract.

To showcase this capability, this demo example displays how an AI that identifies an image can be deployed as a smart contract with a frontend and backend, both running onchain.
Expand Down Expand Up @@ -72,19 +72,24 @@ Currently, Wasm execution is not optimized for this workload. A single call exec

## Deploying the demo

### Prerequisites
<Tabs>
<TabItem value="prereq" label="Prerequisites" default>

<input type="checkbox"/> <a href="/docs/current/developer-docs/getting-started/install">Install the IC SDK.</a>

<input type="checkbox"/> Download and install <a href="https://doc.rust-lang.org/book/ch01-01-installation.html">Rust.</a>

- [x] Download and install the Rust programming language and Cargo as described in the [Rust installation instructions](https://doc.rust-lang.org/book/ch01-01-installation.html) for your operating system.
<input type="checkbox"/> Download and install <a href="https://git-scm.com/downloads">git.</a>

- [x] Download and install the IC SDK package as described in the [installing the IC SDK](/docs/current/developer-docs/getting-started/install) page.
<input type="checkbox"/> Download and install <a href="https://github.com/WebAssembly/wasi-sdk/releases/tag/wasi-sdk-21"><code>wasi-skd-21.0</code>.</a>

- [x] Download and install [git](https://git-scm.com/downloads).
<input type="checkbox"/> Export `CC_wasm32_wasi` in your shell such that it points to WASI clang and sysroot: <code>export CC_wasm32_wasi="/path/to/wasi-sdk-21.0/bin/clang --sysroot=/path/to/wasi-sdk-21.0/share/wasi-sysroot"</code>

- [x] Install [`wasi-skd-21.0`](https://github.com/WebAssembly/wasi-sdk/releases/tag/wasi-sdk-21).
<input type="checkbox"/> Download and install <a href="https://github.com/wasm-forge/wasi2ic"><code>wasi2ic</code> and make sure that `wasi2ic` binary is in your <code>$PATH</code>.</a>

- [x] Export `CC_wasm32_wasi` in your shell such that it points to WASI clang and sysroot: `export CC_wasm32_wasi="/path/to/wasi-sdk-21.0/bin/clang --sysroot=/path/to/wasi-sdk-21.0/share/wasi-sysroot"`
</TabItem>
</Tabs>

- [x] Install [`wasi2ic`](https://github.com/wasm-forge/wasi2ic) and make sure that `wasi2ic` binary is in your `$PATH`.

### Downloading the example

Expand Down Expand Up @@ -120,17 +125,11 @@ rustup target add wasm32-wasi

### Deploying the code

To deploy the example, first start `dfx`:
To deploy the example, first start `dfx`, then deploy the project:

```
dfx start --clean --background
```

Then to deploy the canisters, run the command:

```
dfx deploy // Deploy locally
dfx deploy --network ic // Deploy to the mainnet
dfx deploy
```

## Using the demo
Expand Down
51 changes: 9 additions & 42 deletions docs/developer-docs/ai/machine-learning-sample.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,13 @@ keywords: [intermediate, tutorial, machine learning, ml, mnist, rust]
import { MarkdownChipRow } from "/src/components/Chip/MarkdownChipRow";
import useBaseUrl from "@docusaurus/useBaseUrl";
import '/src/components/CenterImages/center.scss';
import TabItem from "@theme/TabItem";
import Tabs from "@theme/Tabs";

# Machine learning sample

<MarkdownChipRow labels={["Advanced", "Tutorial", "Rust" ]} />




Machine learning is a form of artificial intelligence (AI) that observes statistical algorithms and their data to learn patterns and generalizations. By analyzing these data patterns, machine learning algorithms can execute tasks by predicting the correct result with high accuracy.

One common machine learning model that is used to train data sets is the Modified National Institute of Standards and Technology (MNIST) database which contains a collection of handwritten numbers. This database is commonly used for training different image processing systems and testing different machine learning platforms.
Expand All @@ -23,14 +22,15 @@ For example, if the user draws the digit `5`, the machine learning model will so

This project is based off of one [found within the Rust Burn examples](https://github.com/tracel-ai/burn/tree/main/examples/mnist-inference-web).

### Prerequisites

- [x] [Download and install Rust](https://www.rust-lang.org/tools/install).
<Tabs>
<TabItem value="prereq" label="Prerequisites" default>

- [x] [Download and install Node.js](https://nodejs.org/en/download) `16.0.0` or newer.
<input type="checkbox"/> <a href="/docs/current/developer-docs/getting-started/install">Install the IC SDK.</a>

- [x] [Download and install the IC SDK](/docs/current/developer-docs/getting-started/install).
<input type="checkbox"/> Download and install <a href="https://doc.rust-lang.org/book/ch01-01-installation.html">Rust.</a>

</TabItem>
</Tabs>

## Creating a new project

Expand All @@ -43,40 +43,7 @@ dfx start --clean --background
dfx new machine_learning_sample
```

You will be prompted to select the language that your backend canister will use. Select 'Rust':

```
? Select a backend language: ›
Motoko
❯ Rust
TypeScript (Azle)
Python (Kybra)
```

:::info
`dfx` versions `v0.17.0` and newer support this `dfx new` interactive prompt. [Learn more about `dfx v0.17.0`](/blog/2024/02/14/news-and-updates/update#dfx-v0170).
:::

Then, select a frontend framework for your frontend canister. Select 'Vanilla JS':

```
? Select a frontend framework: ›
SvelteKit
React
Vue
❯ Vanilla JS
No JS template
No frontend canister
```

Lastly, you can include extra features to be added to your project:

```
? Add extra features (space to select, enter to confirm) ›
⬚ Internet Identity
⬚ Bitcoin (Regtest)
⬚ Frontend tests
```
You will be prompted to select the language that your backend canister will use. Select 'Rust'. For the frontend, select 'Vanilla JS.'

Then, navigate into the new project directory:

Expand Down
2 changes: 1 addition & 1 deletion docs/developer-docs/daos/sns/overview.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ keywords: [advanced, governance, concept, sns, introduction]

import { MarkdownChipRow } from "/src/components/Chip/MarkdownChipRow";

# SNS overview
# What is an SNS?

<MarkdownChipRow labels={["Advanced", "Governance", "Concept"]} />

Expand Down
2 changes: 0 additions & 2 deletions docs/developer-docs/daos/sns/tokenomics/rewards.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@ Each SNS can be individually configured with parameters that define, among other
how an SNS uses rewards to incentivize certain behavior for the governance participants
and the dapp users.

## Rewards Overview

The goal of this article is to explain the design of the SNS reward scheme.

The full potential of tokenization can be unlocked by a tokenized open governance system,
Expand Down
3 changes: 1 addition & 2 deletions docs/developer-docs/daos/sns/tokenomics/tokenomics-intro.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@ Therefore when launching or maintaining an SNS, it is important to understand to
The described concepts are also relevant for
[other DAOs](../overview#dao-alternatives).

## Tokenomics overview
### What is tokenomics?
## What is tokenomics?
A token is a digital asset on a blockchain. Tokenomics describes the economics of a token system on a blockchain. It is a game changer for decentralized autonomous organization (DAOs) compared to traditional apps running on a Web 2.0 infrastructure, because it enables the introduction of new incentive systems and use cases. Tokenizing a DAO allows, for instance, that anyone in the world can purchase tokens and thereby contribute to initial funding for the DAO. Moreover, tokens can be paid to early adopters and active users, which will help attract users.

Tokenomics covers a wide range of topics, such as
Expand Down
12 changes: 8 additions & 4 deletions docs/developer-docs/defi/cycles/cycles-wallet.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ keywords: [beginner, tutorial, cycles, cycles wallet]

import { MarkdownChipRow } from "/src/components/Chip/MarkdownChipRow";
import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip";
import TabItem from "@theme/TabItem";
import Tabs from "@theme/Tabs";

# Using a cycles wallet

<MarkdownChipRow labels={["Beginner", "Tutorial"]} />



As discussed in [tokens and cycles](/docs/current/developer-docs/getting-started/tokens-and-cycles), ICP tokens can be converted into **cycles** to power <GlossaryTooltip>canister</GlossaryTooltip> operations. Cycles reflect the operational cost of communication, computation, and storage that dapps consume.

Unlike ICP tokens, cycles are only associated with canisters and not with user or developer <GlossaryTooltip>principals</GlossaryTooltip>. Because only canisters require cycles to perform operations and pay for the resources they use, users and developers can manage the distribution and ownership of cycles through a special type of canister called a **cycles wallet**.
Expand Down Expand Up @@ -78,9 +78,13 @@ Authorizing a principal as a custodian does not automatically grant the principa

## Creating a cycles wallet

### Prerequisites
<Tabs>
<TabItem value="prereq" label="Prerequisites" default>

<input type="checkbox"/> <a href="/docs/current/developer-docs/getting-started/install">Install the IC SDK.</a>

- [x] Install the [IC SDK](/docs/current/developer-docs/getting-started/install).
</TabItem>
</Tabs>

If you are **deploying locally**, your local cycles wallet is created in the background when you register a new canister principal using `dfx canister create` or when you register, build, and deploy a canister with `dfx deploy`.

Expand Down
2 changes: 1 addition & 1 deletion docs/developer-docs/defi/dex/overview.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ keywords: [intermediate, defi, overview, dex, decentralized exchange, exchange]

import { MarkdownChipRow } from "/src/components/Chip/MarkdownChipRow";

# Decentralized exchange overview
# Decentralized exchanges

<MarkdownChipRow labels={["Beginner", "Concept"]} />

Expand Down
17 changes: 10 additions & 7 deletions docs/developer-docs/defi/exchange-rate-canister.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ keywords: [intermediate, tutorial, exchange rate canister]

import { MarkdownChipRow } from "/src/components/Chip/MarkdownChipRow";
import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip";
import TabItem from "@theme/TabItem";
import Tabs from "@theme/Tabs";

# Exchange rate canister

<MarkdownChipRow labels={["Intermediate" , "Tutorial"]} />



The exchange rate canister, referred to as the XRC, is a canister that runs on the **uzr34 system subnet**. The XRC uses [HTTPS outcalls](https://internetcomputer.org/https-outcalls/) to fetch data from major cryptocurrency exchanges by using the exchange's public API to retrieve real time or historical cryptocurrency pricing information. The XRC also queries the public APIs for foreign exchange data providers around the world periodically in order to get forex rates.

The XRC canister can be used by dapps such as decentralized exchanges (DEXs) to provide functionality such as comparing exchange rates against market rates to determine the value of assets that are held in a canister smart contract. For example, the cycle minting canister of the <GlossaryTooltip>NNS</GlossaryTooltip> uses the XRC to obtain the current ICP/XDR exchange rates, which it requires for the conversion of ICP to cycles.
Expand Down Expand Up @@ -93,13 +93,16 @@ Alternatively, you can run a local XRC demo application to test the functionalit
It is worth noting that this sample dapp is very simple. If there is an error, it always returns `0` because the return value is simply a float.
:::

### Prerequisites

- [x] Download and install the IC SDK package as described in the [download and install](/docs/current/developer-docs/getting-started/install) page.
<Tabs>
<TabItem value="prereq" label="Prerequisites" default>

- [x] Download and install [Nodejs and npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm).
<input type="checkbox"/> <a href="/docs/current/developer-docs/getting-started/install">Install the IC SDK.</a>
<div>
</div>
<input type="checkbox"/> Download and install <a href="https://git-scm.com/downloads">git.</a>

- [x] Download and install [git](https://git-scm.com/downloads).
</TabItem>
</Tabs>

Then, clone the sample repository, install the dependencies, and build the canisters with the following commands:

Expand Down
15 changes: 10 additions & 5 deletions docs/developer-docs/defi/nfts/nft-collections.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ keywords: [intermediate, tutorial, nft collection, create an nft, icrc-7, icrc-3

import { MarkdownChipRow } from "/src/components/Chip/MarkdownChipRow";
import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip";
import TabItem from "@theme/TabItem";
import Tabs from "@theme/Tabs";

# Creating an NFT collection

<MarkdownChipRow labels={["Intermediate", "NFTs", "Tutorial"]} />



An NFT collection is a series of non-fungible tokens that each have a unique identifier value. Each token's metadata may be the same, such as the name, image, and description, or each token's data can be unique and associated with a 'rarity' value, where some metadata values are less common than others. Rarity metadata attributes are common in generative NFT collections, often referring to an NFT collection where the artwork for each image has been randomly generated and some components only appear in a select few of the generated images.

For this basic NFT example, you will create a collection where each token has the same metadata values, with the only difference between each NFT being their unique token identifier value.
Expand All @@ -27,11 +27,16 @@ This example combines three standards: ICRC-3, ICRC-7, and ICRC-37:

## Creating an NFT collection

### Prerequisites
<Tabs>
<TabItem value="prereq" label="Prerequisites" default>

- Download and install the [IC SDK](/docs/current/developer-docs/getting-started/install).
<input type="checkbox"/> <a href="/docs/current/developer-docs/getting-started/install">Install the IC SDK.</a>
<div>
</div>
<input type="checkbox"/> Download and install <a href="https://git-scm.com/downloads">git.</a>

- Download and install [git](https://git-scm.com/downloads).
</TabItem>
</Tabs>

### Step 1: Download the NFT example project.

Expand Down
Loading

0 comments on commit db28c6e

Please sign in to comment.