From 3c103f2b7d413982ec005dfb385fca2cc986e03d Mon Sep 17 00:00:00 2001 From: Jessie Mongeon Date: Mon, 18 Nov 2024 17:26:34 -0600 Subject: [PATCH 01/47] docs audit 1 --- .../smart-contracts/compile.mdx | 56 +++++----------- .../developer-docs/smart-contracts/create.mdx | 62 ++++++++---------- .../smart-contracts/install.mdx | 64 ++++++------------- sidebars.js | 46 +++++++------ submodules/motoko | 2 +- submodules/sdk | 2 +- 6 files changed, 90 insertions(+), 142 deletions(-) diff --git a/docs/developer-docs/smart-contracts/compile.mdx b/docs/developer-docs/smart-contracts/compile.mdx index 0ed83a48d5..5d16c12c34 100644 --- a/docs/developer-docs/smart-contracts/compile.mdx +++ b/docs/developer-docs/smart-contracts/compile.mdx @@ -11,43 +11,21 @@ import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; ## Overview -After you have written the code for your project's canisters, you need to compile the code into a WebAssembly module before it can be deployed on ICP. - -## How code is compiled to Wasm - -WebAssembly (Wasm) is a platform independent binary format that can be executed in the Wasm virtual machine. -Many modern compilers support Wasm as the compilation target along with the traditional targets such as x86 and arm32. - -There are three types of Wasm depending on where the Wasm virtual machine is hosted and how it interacts with users and the host environment: - -- **Web browser**: the Wasm program interacts with the users via the JavaScript bindings of the browser. The primary toolchain for compiling Wasm for browsers is [Emscripten](https://emscripten.org/). Note that such Wasm programs are incompatible with ICP. - -- **WASI**: this abbreviation stands for [WebAssembly System Interface](https://wasi.dev/). It is becoming the standard for running Wasm programs outside of Web browsers. Major Wasm runtimes such as Wasmtime and Wasmer support this standard. Compilers denote this target as `wasm32-wasi`. ICP does not directly support WASI, but it is possible to preprocess a WASI program and make it runnable on ICP with the community project [`wasi2ic`](https://github.com/wasm-forge/wasi2ic). - -- **Vanilla Wasm**: there is no standard API for interacting with users and the host environment. Every host environment provides their own API. ICP uses this approach and provides the set of functions called the System API to the Wasm program. Many compilers denote this target as `wasm32-unknown-unknown` since they do not know the target host environment and do not make any assumptions about the available APIs. - -The Canister Development Kit (CDK) of supported programming language comes with build scripts that link the System API and compile the code to Wasm programs that are compatible with ICP: - -- Rust and Motoko compile to the `wasm32-unknown-unknown` target directly under the hood. -- Azle and Kybra first compile to the `wasm32-wasi` target and then convert the Wasm binary to `wasm32-unknown-unknown` using the `wasi2ic` tool. - -For convenience of developers, `dfx` wraps the CDK specific build scripts and provides the `dfx build` command to compile the code to a Wasm binary. +After you have written the code for your project's canisters, you need to compile the code into a WebAssembly module before it can be deployed on ICP. ## Compiling your canister -To compile your canister's Wasm module, you can use the `dfx build` command. +To compile your canister's Wasm module, you can use the [`dfx build`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-build) command. -:::info +:::tip `dfx` isn't the only workflow that can be used for compiling code. For example, Rust canisters can be compiled using `cargo`. ::: -The `dfx build` command looks for source code to compile for each canister configured under the `canisters` section in the `dfx.json` configuration file. It can be used to compile a specific canister or all canisters defined in the project's [`dfx.json`](/docs/current/developer-docs/developer-tools/cli-tools/dfx-json-reference) file. - -Check out the [default project template](/docs/current/developer-docs/getting-started/default-template) for more information on `dfx.json`. +`dfx build` looks for source code to compile for each canister configured under the `canisters` section in the [`dfx.json`](/docs/current/developer-docs/developer-tools/cli-tools/dfx-json-reference) file. It can be used to compile a specific canister or all canisters defined in the project. Before using the `dfx build` command, first you need to [create the canister](/docs/current/developer-docs/smart-contracts/create) and verify the location of your project's files and their file names. If you modify these settings, be sure to edit your project's `dfx.json` file to reflect the current intended configuration. -Then, [compile your canister code](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-build) with the command: +Compile your canister code from within the project's directory: ```bash dfx build @@ -58,8 +36,6 @@ Compilation happens on the local machine of the developer. Compiled Wasm binary is then installed on the target canister, which costs [cycles](/docs/current/developer-docs/getting-started/cycles/cycles-faucet). ::: -This command must be run from within the project's directory. - When this command is executed, the following steps happen: - The source code for each canister defined in `dfx.json` is compiled into a Wasm module. @@ -68,22 +44,22 @@ When this command is executed, the following steps happen: - If a canister being built is written in Rust, the build process checks for Rust vulnerabilities. -:::info -When a canister is deployed with [`dfx deploy`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-deploy), the `dfx build` command is run in the background as part of the deployment process. -::: +## How code is compiled to Wasm -Once your canister has been compiled, it is ready to be deployed. +WebAssembly (Wasm) is a platform independent binary format that can be executed in the Wasm virtual machine. +Many modern compilers support Wasm as the compilation target along with the traditional targets such as x86 and arm32. -## Next steps +There are three types of Wasm depending on where the Wasm virtual machine is hosted and how it interacts with users and the host environment: -- [Deploy canisters](/docs/current/developer-docs/smart-contracts/deploy/overview) +- **Web browser**: the Wasm program interacts with the users via the JavaScript bindings of the browser. The primary toolchain for compiling Wasm for browsers is [Emscripten](https://emscripten.org/). Note that such Wasm programs are incompatible with ICP. -- [Delete canisters](/docs/current/developer-docs/smart-contracts/maintain/delete) +- **WASI**: this abbreviation stands for [WebAssembly System Interface](https://wasi.dev/). It is becoming the standard for running Wasm programs outside of Web browsers. Major Wasm runtimes such as Wasmtime and Wasmer support this standard. Compilers denote this target as `wasm32-wasi`. ICP does not directly support WASI, but it is possible to preprocess a WASI program and make it runnable on ICP with the community project [`wasi2ic`](https://github.com/wasm-forge/wasi2ic). -- [Canister history](/docs/current/developer-docs/smart-contracts/maintain/history) +- **Vanilla Wasm**: there is no standard API for interacting with users and the host environment. Every host environment provides their own API. ICP uses this approach and provides the set of functions called the System API to the Wasm program. Many compilers denote this target as `wasm32-unknown-unknown` since they do not know the target host environment and do not make any assumptions about the available APIs. -- [Import canisters](/docs/current/developer-docs/smart-contracts/maintain/import) +The Canister Development Kit (CDK) of supported programming language comes with build scripts that link the System API and compile the code to Wasm programs that are compatible with ICP: -- [Recover canisters](/docs/current/developer-docs/smart-contracts/maintain/recovery) +- Rust and Motoko compile to the `wasm32-unknown-unknown` target directly under the hood. +- Azle and Kybra first compile to the `wasm32-wasi` target and then convert the Wasm binary to `wasm32-unknown-unknown` using the `wasi2ic` tool. -- [Canister settings](/docs/current/developer-docs/smart-contracts/maintain/settings) +For convenience of developers, `dfx` wraps the CDK specific build scripts and provides the `dfx build` command to compile the code to a Wasm binary. diff --git a/docs/developer-docs/smart-contracts/create.mdx b/docs/developer-docs/smart-contracts/create.mdx index 4843d420f5..da92188c77 100644 --- a/docs/developer-docs/smart-contracts/create.mdx +++ b/docs/developer-docs/smart-contracts/create.mdx @@ -11,58 +11,46 @@ import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; ## Overview -Canisters contain both code and state. Once you have written the code for a canister, the canister doesn't exist until it is registered with IC, either locally or the mainnet. +Canisters contain both code and state. Once you have written the code for a canister, the canister doesn't exist until it is registered with ICP, either locally, on the playground, or on the mainnet. -A canister can be created without first compiling any code. When canisters are created with [`dfx canister create`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-create), they are empty and do not contain program code. The code must be compiled into Wasm and installed into the empty canister before it can be deployed. +## Creating canisters -## Creating canisters +Canisters are created with [`dfx canister create`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-create). They are initially empty and do not contain program code. The code must be compiled into Wasm and installed into the empty canister before it can be deployed. -When a canister is created, either locally or on the mainnet, the following steps happen: +Create your canisters from within the project's directory: -- The canister ID is registered with the local replica or the mainnet for each canister in the project's `dfx.json` file. +- `dfx canister create hello_world`: Create a canister locally. -- The following canister components are created: - - List of controllers. - - Cycles balance. - - Reserved cycles balance. - - Canister status. - - Resource reservations. +- `dfx canister create hello_world --network=playground`: Create a canister on the playground. -- The canister's ID is returned in the command line. +- `dfx canister create hello_world --network=ic`: Create a canister on the mainnet. -To create a canister locally, the `dfx canister create` command can be used: +- `dfx canister create --all --network=ic`: Create all canisters in the project's `dfx.json` file. -```bash -dfx canister create hello_world // Create a canister locally -dfx canister create hello_world --network ic // Create a canister on the mainnet -dfx canister create --all --network ic // Create all canisters in the project's dfx.json file -``` - -:::caution +:::caution Creating a canister on the mainnet will cost [cycles](/docs/current/developer-docs/getting-started/cycles/cycles-faucet). ::: -At this step, settings can be configured for the canister using the optional flags. [View the full list of settings that can be configured](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#options-1). - -Once your canister has been created, it is ready to be compiled. - -## Errors related to canister creation - -Common errors related to canister creation include: - -- [Canister not found](/docs/current/references/execution-errors#canister-not-found) -- [Maximum number of canisters reached](/docs/current/references/execution-errors#maximum-number-of-canisters-reached) +::tip +Settings can be configured for a canister using optional flags. [View the full list of settings that can be configured](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#options-1). +::: -## Next steps +When a canister is created, the following steps happen: -- [Compile canister code](/docs/current/developer-docs/smart-contracts/compile) +- A canister ID is registered with the local replica or the mainnet for each canister in the project's `dfx.json` file. -- [Delete canisters](/docs/current/developer-docs/smart-contracts/maintain/delete) +- The following canister components are created: + - List of controllers. + - Cycles balance. + - Reserved cycles balance. + - Canister status. + - Resource reservations. -- [Canister history](/docs/current/developer-docs/smart-contracts/maintain/history) +- Each canister ID is returned in the command line. -- [Import canisters](/docs/current/developer-docs/smart-contracts/maintain/import) +## Errors related to canister creation -- [Recover canisters](/docs/current/developer-docs/smart-contracts/maintain/recovery) +Common errors related to canister creation include: -- [Canister settings](/docs/current/developer-docs/smart-contracts/maintain/settings) +- [Canister not found](/docs/current/references/execution-errors#canister-not-found) +- [Maximum number of canisters reached](/docs/current/references/execution-errors#maximum-number-of-canisters-reached) \ No newline at end of file diff --git a/docs/developer-docs/smart-contracts/install.mdx b/docs/developer-docs/smart-contracts/install.mdx index 21889508af..9388212065 100644 --- a/docs/developer-docs/smart-contracts/install.mdx +++ b/docs/developer-docs/smart-contracts/install.mdx @@ -11,38 +11,42 @@ import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; ## Overview -When a canister has been initially created, it is empty and does not contain code or state. It only contains information such as the settings, canister ID, cycles balance, and controllers. You can learn more about creating a canister [in the creation documentation](/docs/current/developer-docs/smart-contracts/create). +When a canister has been initially created, it is empty and does not contain code or state. It only contains information such as the settings, canister ID, cycles balance, and controllers. [Learn more about creating a canister](/docs/current/developer-docs/smart-contracts/create). -When a canister's code is installed, the following components are created: +## Installing canister code -- The canister's code in the form of a canister module. +Code must be installed into a canister using the [`dfx canister install`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-install) command: -- The canister's state, including the canister's memory and global values. +- `dfx canister install hello_world`: Install canister code locally. -- Additional IC-specific information, such as the canister's input and output queues. +- `dfx canister install hello_world --network=playground`: Install canister code on the playground. -## Installing canister code +- `dfx canister install hello_world --network=ic`: Install canister code on the mainnet. -Code must be installed into the canister using the [`dfx canister install`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-install) command: +- `dfx canister install --all --network=ic`: Install code for all canisters in the project's `dfx.json` file. -``` -dfx canister install canister_name // install canister code locally -dfx canister install canister_name --network ic // install canister code on the mainnet -dfx canister install --all // install all canisters in the project's dfx.json file -``` +:::caution +Installing code in a canister on the mainnet will cost [cycles](/docs/current/developer-docs/getting-started/cycles/cycles-faucet) +::: -:::caution -Creating a canister on the mainnet will cost [cycles](/docs/current/developer-docs/getting-started/cycles/cycles-faucet) +::tip +Settings can be configured for a canister using optional flags. [View the full list of settings that can be configured](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#options-1). ::: -At this step, settings can be configured for the canister using the optional flags. [View the full list of settings that can be configured](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#options-1). +When a canister's code is installed, the following components are created: + +- The canister's code in the form of a canister module. + +- The canister's state, including the canister's memory and global values. + +- Additional IC-specific information, such as the canister's input and output queues. ## Installing a gzip-compressed WebAssembly module The size of programs that can be installed on ICP is currently limited to 2 MiB. WebAssembly modules that are (slightly) larger than 2 MiB can still be installed on ICP by using gzip file compression before uploading; ICP will then decompress the file and install the contained WebAssembly module. -The WebAssembly module is compressed using `gzip` and then uploaded by `dfx install`, you may need to add `--mode reinstall` or `--mode upgrade` when uploading the module to an existing canister. +The WebAssembly module is compressed using `gzip` and then uploaded by `dfx canister install`, you may need to add `--mode reinstall` or `--mode upgrade` when uploading the module to an existing canister. ``` bash gzip my-canister.wasm @@ -51,18 +55,6 @@ dfx canister install my-canister --wasm my-canister.wasm.gz Compression is currently not supported by `dfx deploy`. -## Troubleshooting - -### Failed to install Wasm module, no such file or directory. - -If you receive an error such as: - -``` -Error: Failed to install wasm module to canister 'test'. Caused by: Failed to install wasm module to canister 'test'. Failed to read /home/gabriel/projects/motoko-test/.dfx/local/canisters/test/test.wasm. No such file or directory (os error 2) -``` - -You may need to run `dfx build`, as this error indicates that the canister's Wasm module may not exist because it was not compiled. [Learn more about how to compile a canister's Wasm module](compile.mdx). Alternatively, you can run `dfx deploy`, as it runs `dfx build` and `dfx install` as part of the deployment process. - ## Errors related to Wasm modules Common errors related to installation and Wasm modules include: @@ -78,18 +70,4 @@ Common errors related to installation and Wasm modules include: - [Wasm module too many globals](/docs/current/references/execution-errors#wasm-module-too-many-globals). - [Wasm module function complexity too high](/docs/current/references/execution-errors#wasm-module-function-complexity-too-high). - [Wasm module function too large](/docs/current/references/execution-errors#wasm-module-function-too-large). -- [Wasm module code section too large](/docs/current/references/execution-errors#wasm-module-code-section-too-large). - -## Next steps - -- [Create canisters](/docs/current/developer-docs/smart-contracts/create). - -- [Delete canisters](/docs/current/developer-docs/smart-contracts/maintain/delete). - -- [Canister history](/docs/current/developer-docs/smart-contracts/maintain/history). - -- [Import canisters](//docs/current/developer-docs/smart-contracts/maintain/import). - -- [Recover canisters](/docs/current/developer-docs/smart-contracts/maintain/recovery). - -- [Canister settings](/docs/current/developer-docs/smart-contracts/maintain/settings). +- [Wasm module code section too large](/docs/current/references/execution-errors#wasm-module-code-section-too-large). \ No newline at end of file diff --git a/sidebars.js b/sidebars.js index 4107710e94..d6c41d5499 100644 --- a/sidebars.js +++ b/sidebars.js @@ -94,37 +94,43 @@ const sidebars = { items: [ "developer-docs/smart-contracts/overview/introduction", "developer-docs/smart-contracts/overview/inside-canisters", - "developer-docs/smart-contracts/overview/canister-lifecycle", "developer-docs/smart-contracts/overview/trust-in-canisters", ], }, + "developer-docs/smart-contracts/overview/canister-lifecycle", { type: "category", - label: "Write", + label: "Create & install", items: [ { - label: "Overview", + type: "category", + label: "Write", + items: [ + { + label: "Overview", + type: "doc", + id: "developer-docs/smart-contracts/write/overview", + }, + "developer-docs/smart-contracts/write/resources", + ], + }, + { + type: "doc", + label: "Create", + id: "developer-docs/smart-contracts/create", + }, + { type: "doc", - id: "developer-docs/smart-contracts/write/overview", + label: "Compile", + id: "developer-docs/smart-contracts/compile", + }, + { + type: "doc", + label: "Install", + id: "developer-docs/smart-contracts/install", }, - "developer-docs/smart-contracts/write/resources", ], }, - { - type: "doc", - label: "Create", - id: "developer-docs/smart-contracts/create", - }, - { - type: "doc", - label: "Compile", - id: "developer-docs/smart-contracts/compile", - }, - { - type: "doc", - label: "Install", - id: "developer-docs/smart-contracts/install", - }, { type: "category", label: "Deploy", diff --git a/submodules/motoko b/submodules/motoko index ef798794cd..074ffca17f 160000 --- a/submodules/motoko +++ b/submodules/motoko @@ -1 +1 @@ -Subproject commit ef798794cdaddbdd7b3d08ad6e948ab74d0f426b +Subproject commit 074ffca17f95a3da876d8d0dda4d123cd5c16674 diff --git a/submodules/sdk b/submodules/sdk index b86e9650ff..806f064bf3 160000 --- a/submodules/sdk +++ b/submodules/sdk @@ -1 +1 @@ -Subproject commit b86e9650ff8e9ee4c333532a356fe475f6aa1c48 +Subproject commit 806f064bf3865f190d4d48486605125cf5618ff2 From a1437e2b1a9947b58e24716e1a01904fa6ba861b Mon Sep 17 00:00:00 2001 From: Jessie Mongeon Date: Tue, 19 Nov 2024 16:20:52 -0600 Subject: [PATCH 02/47] docs audit --- .../smart-contracts/call/arguments.mdx | 113 ---- .../smart-contracts/call/overview.mdx | 71 +-- .../candid/candid-concepts.mdx | 104 +--- .../smart-contracts/candid/candid-howto.mdx | 192 +------ .../smart-contracts/candid/index.mdx | 19 - .../smart-contracts/compile.mdx | 38 +- .../developer-docs/smart-contracts/create.mdx | 22 +- .../deploy/custom-testnets.mdx | 39 +- .../smart-contracts/deploy/overview.mdx | 235 +-------- .../smart-contracts/install.mdx | 20 +- .../write/auto-scaling-architecture.mdx | 484 ------------------ .../smart-contracts/write/overview.mdx | 356 ++++++++++--- .../smart-contracts/write/resources.mdx | 76 --- plugins/utils/redirects.js | 5 +- roadmap/roadmap.json | 87 ++-- sidebars.js | 28 +- 16 files changed, 494 insertions(+), 1395 deletions(-) delete mode 100644 docs/developer-docs/smart-contracts/call/arguments.mdx delete mode 100644 docs/developer-docs/smart-contracts/candid/index.mdx delete mode 100644 docs/developer-docs/smart-contracts/write/auto-scaling-architecture.mdx delete mode 100644 docs/developer-docs/smart-contracts/write/resources.mdx diff --git a/docs/developer-docs/smart-contracts/call/arguments.mdx b/docs/developer-docs/smart-contracts/call/arguments.mdx deleted file mode 100644 index 5d61cf96c4..0000000000 --- a/docs/developer-docs/smart-contracts/call/arguments.mdx +++ /dev/null @@ -1,113 +0,0 @@ ---- -keywords: [beginner, tutorial, call, passing arguments] ---- - - -import TabItem from "@theme/TabItem"; -import { AdornedTabs } from "/src/components/Tabs/AdornedTabs"; -import { AdornedTab } from "/src/components/Tabs/AdornedTab"; -import { BetaChip } from "/src/components/Chip/BetaChip"; -import { MarkdownChipRow } from "/src/components/Chip/MarkdownChipRow"; -import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; - -# Passing arguments - - - -## Overview - -This document aims to provide examples of passing different argument types to a canister. - -## Arrays - -An `array` is a collection of items of the same data type. - -The following example defines an array of numbers and a function that returns the array. - - - - -Motoko differentiates between immutable arrays, which cannot be altered, and mutable arrays, which can be modified. - -```motoko -import Nat "mo:base/Nat"; - -actor { - let _numbers1 : [Nat] = [1, 2, 3, 4, 5, 6, 7]; // Immutable array - let _numbers2 : [var Nat] = [var 1, 2, 3, 4, 5, 6, 7] ; // Mutable array - - public func get_numbers(numbers1: [Nat]) : async [Nat] { - return numbers1; - } -} -``` - -The `Array` Motoko base library provides utility functions on arrays. To learn more about the `Array` Motoko base library, refer to the [Motoko base library reference on Array](/docs/current/motoko/main/base/Array) and the [Motoko language quick reference on arrays](/docs/current/motoko/main/reference/language-manual#arrays). - - - - - -Rust uses the `vec` type to represent vectors (sequences, lists, arrays). - -```rust -let numbers = vec![1, 2, 3, 4, 5, 6, 7 ]; -#[query] -fn get_numbers(numbers: Vec) -> Vec { - numbers -} -``` - - - -}> - -Azle refers to the `Vec` type to represent the equivalent of an `array` in TypeScript. This is because `Vec` aligns with the [Candid](/docs/current/developer-docs/smart-contracts/candid/candid-concepts) type. - -```typescript -import { IDL, query } from 'azle'; - -export default class { - @query([], IDL.Vec(IDL.Nat8)) - get_numbers(): Nat { - return [1, 2, 3, 4, 5, 6, 7]; - } -} -``` - -To learn more about variants in Typescript via Azle, refer to [the Azle code](https://github.com/demergent-labs/azle/blob/main/tests/end_to_end/candid_rpc/class_syntax/complex_types/src/candid_types.ts#L3). - - - -}> - -```python -from kybra import int32, query, Vec - -@query -def get_numbers() -> Vec[int32]: - return [1, 2, 3, 4, 5, 6, 7] -``` - -To learn more about variants in Python in Kybra, refer to [the Kybra book reference on variants](https://demergent-labs.github.io/kybra/reference/candid/variant.html). - - - - - -You can pass a variant as an argument by explicitly specifying the canister name and method name using the `dfx` tool in the following format: - -```bash - dfx canister call canister_name method_name '(variant {})' -``` -Assuming you have a method named `get_text` that accepts a `Variant` parameter, as exemplified in other examples: - -```bash - dfx canister call canister_name get_text '(variant {Sun})' -``` -To learn more about calling a method from a canister in bash, refer to the `dfx` reference on the [dfx canister call command](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-call). - -For additional examples, refer to [type variant in the Candid Reference](/docs/current/references/candid-ref#type-variant--n--t--) - - - diff --git a/docs/developer-docs/smart-contracts/call/overview.mdx b/docs/developer-docs/smart-contracts/call/overview.mdx index 008a97ddcf..2f39295037 100644 --- a/docs/developer-docs/smart-contracts/call/overview.mdx +++ b/docs/developer-docs/smart-contracts/call/overview.mdx @@ -13,25 +13,40 @@ import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; -## Introduction - To interact with a canister's methods, there are two primary types of calls that can be used: update calls and query calls. -Canisters implement methods that can be called via update or query calls. A query method can be called as both an update and a query, whereas update methods can be called only as an update. - **Update calls** can make modifications to a canister's state, while **query calls** cannot. -
-Update vs Query -
+A query method can be called as both an update and a query, whereas update methods can be called only as an update. + +| Update calls | Query Calls | +| :----------: | :------: | +| Slow (1-2s) | Fast (200-400ms) | +| Can modify state | Can't modify state | +| Goes through consensus | Does not go through consensus | +| Synchronous response | Synchronous response | +| Executed on all nodes of a subnet | Executed on a single node | + See the reference on [ingress messages](/docs/current/references/ingress-messages) for a more technical discussion of this topic. ## Update calls -Update calls are executed on all nodes of a subnet since the result must go through consensus. This makes them slower compared to query calls. They are submitted asynchronously and answered synchronously. +Update calls are executed on all nodes of a subnet since the result of the call must go through consensus. This makes them slower than query calls. They are submitted asynchronously and answered synchronously. + +### Making update calls + +To make a update call to a canister, use the [`dfx canister call`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-call) command with the `--update` flag: + + +- `dfx canister call --update ` : Make an update call to a canister deployed locally. The local replica must be running to create a canister locally. Start it with `dfx start --background`. + +- `dfx canister call --update --network=playground`: Make an update call to a canister deployed on the playground. Making update calls to canisters deployed on the playground is free, but canisters are temporary and will be removed after 20 minutes. + +- `dfx canister call --update --network=ic`: Make an update call to a canister deployed on the mainnet. Update calls will cost [cycles](/docs/current/developer-docs/gas-cost). -### Example update call + +### Using update calls from within canisters @@ -119,11 +134,21 @@ Kybra canisters must be deployed from a Python virtual environment. [Learn more Query calls, also referred to as non-replicated queries, are executed on a single node and return a synchronous response. Since they execute on a single node, they do not go through consensus and can be much faster than update calls. +### Making query calls + +To make a query call to a canister, use the [`dfx canister call`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-call) command with the `--query` flag: + +- `dfx canister call --query `: Make a query call to a canister deployed locally. The local replica must be running to create a canister locally. Start it with `dfx start --background`. + +- `dfx canister call --query --network=playground`: Make a query call to a canister deployed on the playground. Query calls are free, but canisters are temporary and will be removed after 20 minutes. + +- `dfx canister call --query --network=ic`: Make a query call to a canister deployed on the mainnet. Query calls are free. + :::caution -The downside of query calls is that the response is not trusted since it's coming from a single node. An update call or a certified query (see below) should be used for security-critical calls. +The downside of query calls is that the response is not trusted since it's coming from a single node. An update call or a [certified query](#certified-queries) should be used for security-critical calls. ::: -### Example query call +### Using query calls from within canisters @@ -187,34 +212,23 @@ Kybra canisters must be deployed from a Python virtual environment. [Learn more -## Comparison of update calls vs query calls - -| Update calls | Query Calls | -| :----------: | :------: | -| Slow (1-2s) | Fast (200-400ms) | -| Can modify state | Can't modify state | -| Goes through consensus | Does not go through consensus | -| Synchronous response | Synchronous response | -| Executed on all nodes of a subnet | Executed on a single node | - - ## ICP message executions Calls to canisters can be initiated by end users or other canisters. A call is processed by the canister in one or more message executions. A message execution is a set of consecutive instructions that ICP executes on behalf of the canister. Typically, a call is processed within a single message execution unless there are calls to other canisters involved, in which case the call will be split across several message executions. -Learn more about the properties of ICP message executions. +[Learn more about the properties of ICP message executions.](/docs/current/references/execution-errors) ## Other types of calls ### Composite queries -Composite queries are query calls that can call other queries (on the same subnet). They can only be invoked by end users, and not by other canisters. +Composite queries are query calls that can call other queries on the same subnet. They can only be invoked by end users and not by other canisters. ### Certified queries -Certified queries use certified variables to prove the authenticity of a piece of data that comes along with the query's response. Certified variables can be set via an update call and can then be read via a query call. +Certified queries use certified variables to prove the authenticity of a piece of data that comes along with the query's response. Certified variables can be set via an update call, then read via a query call. ### Replicated queries @@ -232,12 +246,9 @@ Authorized calls that return a value of `()` indicate that the function was succ ## Making calls with IDLs -On the protocol level, calls on ICP use blobs to describe arguments and results passed to and returned from canisters. It's typically easier to use an [Interface description language](https://en.wikipedia.org/wiki/Interface_description_language) (IDL) to define a canister's interfaces that can be called by end users or other canisters. +On the protocol level, calls on ICP use blobs to describe arguments and results passed to and returned from canisters. It's typically easier to use an [interface description language](https://en.wikipedia.org/wiki/Interface_description_language) (IDL) to define a canister's interfaces that can be called by end users or other canisters. -While any IDL can be used for this purpose, most canisters on ICP use Candid, a specialized IDL that is developed for ICP and makes use of some of the unique features and properties of ICP. -- [What is Candid?](/docs/current/developer-docs/smart-contracts/candid/candid-concepts) -- [Using Candid](/docs/current/developer-docs/smart-contracts/candid/candid-howto) -- [Generating Candid files for Rust canisters](/docs/current/developer-docs/backend/rust/generating-candid) +While any IDL can be used for this purpose, most canisters on ICP use [Candid](/docs/current/developer-docs/smart-contracts/candid/candid-concepts), a specialized IDL that is developed for ICP. ## Errors related to calling canisters diff --git a/docs/developer-docs/smart-contracts/candid/candid-concepts.mdx b/docs/developer-docs/smart-contracts/candid/candid-concepts.mdx index 13da12c298..724bea1ddf 100644 --- a/docs/developer-docs/smart-contracts/candid/candid-concepts.mdx +++ b/docs/developer-docs/smart-contracts/candid/candid-concepts.mdx @@ -20,7 +20,7 @@ While Candid is a robust, type safe, and future-proof way to facilitate communic [Learn more in the Candid reference documentation](/docs/current/references/candid-ref). ::: -A typical interface description in Candid might look like this: +Example interface description using Candid: ```candid service counter : { @@ -41,13 +41,13 @@ In this example, the described service `counter` consists of the following publi As this example illustrates, every method has a sequence of argument and result types. A method can also include annotations, like the `query` notation shown in this example, that are specific to the Internet Computer. -Given this simple interface description, it is possible for you to interact with this `counter` service directly from the command line or through a web-based frontend or programmatically from a Rust program or through another programming or scripting language. +Given this simple interface description, it is possible for you to interact with this `counter` service directly from the command line, through a web-based frontend, or programmatically from a scripting language. In addition to interoperability, Candid supports the evolution of service interfaces by precisely specifying the changes that can be made without breaking existing clients. For example, you can safely add new optional parameters to a service without losing compatibility for existing clients. -## Why create a new IDL? +### Why create a new IDL? -At first glance, you might think that other technologies, such as JSON, XML, or Protobuf, would suffice. However, Candid provides a unique combination of features that are not found in these other technologies. The features that make Candid particularly well-suited for developing dapps for the Internet Computer include the following: +The features that make Candid particularly well-suited for developing dapps for the Internet Computer include the following: - Many languages like JSON, XML, and Protobuf only describe how to map individual values to bytes or characters. These data description languages do not describe services as a whole. These languages focus on the data types you want to transfer instead of the methods that make use of those data types. @@ -61,25 +61,7 @@ At first glance, you might think that other technologies, such as JSON, XML, or ## Candid types and values -Candid is a strongly typed system with a set of types that canonically cover most uses. It has: - -- Unbounded integral number types (`nat`, `int`). - -- Bounded integral number (`nat8`,`nat16`, `nat32`, `nat64`, `int8`,`int16`, `int32`, `int64`). - -- Floating point types (`float32`, `float64`). - -- The Boolean type (`bool`). - -- Types for textual (`text`) and binary (`blob`) data. - -- Container types, including variants (`opt`, `vec`, `record`, `variant`). - -- Reference types (`service`, `func`, `principal`). - -- The special `null`, `reserved` and `empty` types. - -All types are described in detail in the [reference](/docs/current/references/candid-ref) section. +Candid is a strongly typed system with a set of types that canonically cover most uses. All types are described in detail in the [reference](/docs/current/references/candid-ref) documentation. The philosophy behind this set of types is that they are sufficient to describe the **structure** of data, so that information can be encoded, passed around and decoded, but intentionally do not describe **semantic** constraints beyond what’s needed to describe the representation. For example, there’s no way to express that a number should be even, that a vector has a certain length, or that the elements of a vector are sorted. @@ -89,15 +71,7 @@ Candid supports this set of types to allow a natural mapping of data types based Once you are familiar with the Candid types, you can use them to describe a service. A Candid service description file (a `.DID` file) can either be written by hand or generated from a service implementation. -Before you explore how to generate service descriptions for a specific host language, let’s take a closer look at the structure of a sample service description and its constituent parts. - -The simplest service description specifies a service with no public methods and would look like this: - -```candid -service : {} -``` - -This service is not very useful, so let’s add a simple `ping` method: +The simplest service description specifies a service with a `ping` method: ```candid service : { @@ -105,22 +79,29 @@ service : { } ``` -This example describes a service that supports a single public method called `ping`. Method names can be arbitrary strings, and you can quote them (`"method with spaces"`) if they are not plain identifiers. +## Generating service descriptions -Methods declare a **sequence** of arguments and result types. In the case of this `ping` method, no arguments are passed and no results are returned, so the empty sequence \`() \` is used for both arguments and results. +Depending on the language you use to implement your service, you can get the Candid service description generated from your code. -Now that you’ve seen the simplest case, let’s consider a slightly more complex service description. This service consists of two methods, `reverse` and `divMod`, and each method includes a sequence of argument and result types: +For example, in Motoko, you can write a canister like this: -```candid -service : { - reverse : (text) -> (text); - divMod : (dividend : nat, divisor : nat) -> (div : nat, mod : nat); +```motoko no-repl +actor { + var v : Int = 0; + public func add(d : Nat) : async () { v += d; }; + public func subtract(d : Nat) : async () { v -= d; }; + public query func get() : async Int { v }; + public func subscribe(handler : func (Int) -> async ()) { … } } ``` -The method `reverse` expects a single parameter of type `text` and returns one value of type `text`. +When you compile this program, the Motoko compiler automatically generates a Candid service description file with the interface shown above. + +In other languages, like Rust or C, you can still develop your service using the types that are native to that language, for example, using native Rust types. After you develop a service in a language like Rust, however, there’s currently no way to automatically generate the service description in Candid. Therefore, if you write a program for a service in Rust or C, you need to write the Candid interface description manually following the conventions described in the [Candid specification](https://github.com/dfinity/candid). -The method `divMod` expects and returns two values, all of type `nat`. +For examples of how to write Candid service descriptions for Rust programs, see the [Rust CDK examples](https://github.com/dfinity/cdk-rs/tree/next/examples) and the [Rust tutorials](/docs/current/developer-docs/backend/rust/). [Learn how to generate Candid files for Rust canisters](/docs/current/developer-docs/backend/rust/generating-candid). + +Regardless of the host language you use, it is important to know the mapping between host language types and Candid types. In the [supported types](/docs/current/references/candid-ref) reference section, you’ll find Candid type mapping described for Motoko, Rust, and JavaScript. ## Service `InitArgs` @@ -140,17 +121,7 @@ An example of this service definition can be found in the [EVM RPC canister's Ca ## Naming arguments and results -In the previous example, the signature for the `divMod` method includes names for the argument and result values. Naming the arguments or results for a method is purely for documentation purposes. The name you use does not change the method’s type or the values being passed. Instead, arguments and results are identified by their **position**, independent of the name. - -In particular, Candid does not prevent you from changing the type to: - -``` candid - divMod : (dividend : nat, divisor : nat) -> (mod : nat, div : nat); -``` - -or passing the above `divMod` to a service expecting a method that returns `mod` first. - -This is thus very different from named **record** fields, which are semantically relevant. +Naming the arguments or results for a method is purely for documentation purposes. The name you use does not change the method’s type or the values being passed. Instead, arguments and results are identified by their **position**, independent of the name. This is thus very different from named **record** fields, which are semantically relevant. ## Reusing complex types @@ -169,7 +140,7 @@ service address_book : { } ``` -These type definitions merely abbreviate an **existing** type, they do not define a new type. It does not matter whether you use `address` in the function signature, or write out the records. Also, two abbreviations with different names but equivalent definitions, describe the same type and are interchangeable. In other words, Candid uses **structural** typing. +These type definitions merely abbreviate an **existing** type, they do not define a new type. It does not matter whether you use `address` in the function signature or write out the records. Also, two abbreviations with different names but equivalent definitions, describe the same type and are interchangeable. In other words, Candid uses **structural** typing. ## Specifying a query method @@ -182,7 +153,7 @@ service address_book : { } ``` -This annotation indicates that the `get_address` method can be invoked as an ICP **query call**. As discussed in [query and update methods](/docs/current/concepts/canisters-code#query-and-update-methods), a query provides an efficient way to retrieve information from a canister without going through consensus, so being able to identify a method as a query is one of the key benefits of using Candid to interact with ICP. +This annotation indicates that the `get_address` method can be invoked as an ICP **query call**. As discussed in [query and update methods](/docs/current/developer-docs/smart-contracts/call/overview), a query provides an efficient way to retrieve information from a canister without going through consensus, so being able to identify a method as a query is one of the key benefits of using Candid to interact with ICP. ## Encoding and decoding @@ -276,33 +247,8 @@ The Candid **binary** format does not include the actual field names, merely num 2797692922 = "John"; 3046132756 = "Doe" }) ``` - ::: -## Generating service descriptions - -In the [section above](#candid-service-descriptions), you learned how to write a Candid service description from scratch. But often, that is not even needed. Depending on the language you use to implement your service, you can get the Candid service description generated from your code. - -For example, in Motoko, you can write a canister like this: - -```motoko no-repl -actor { - var v : Int = 0; - public func add(d : Nat) : async () { v += d; }; - public func subtract(d : Nat) : async () { v -= d; }; - public query func get() : async Int { v }; - public func subscribe(handler : func (Int) -> async ()) { … } -} -``` - -When you compile this program, the Motoko compiler automatically generates a Candid service description file with the interface shown above. - -In other languages, like Rust or C, you can still develop your service using the types that are native to that language, for example, using native Rust types. After you develop a service in a language like Rust, however, there’s currently no way to automatically generate the service description in Candid. Therefore, if you write a program for a service in Rust or C, you need to write the Candid interface description manually following the conventions described in the [Candid specification](https://github.com/dfinity/candid). - -For examples of how to write Candid service descriptions for Rust programs, see the [Rust CDK examples](https://github.com/dfinity/cdk-rs/tree/next/examples) and the [Rust tutorials](/docs/current/developer-docs/backend/rust/). [Learn how to generate Candid files for Rust canisters](/docs/current/developer-docs/backend/rust/generating-candid). - -Regardless of the host language you use, it is important to know the mapping between host language types and Candid types. In the [supported types](/docs/current/references/candid-ref) reference section, you’ll find Candid type mapping described for Motoko, Rust, and JavaScript. - ## Best practices ### Use descriptive type names diff --git a/docs/developer-docs/smart-contracts/candid/candid-howto.mdx b/docs/developer-docs/smart-contracts/candid/candid-howto.mdx index 2aa5fdf976..92c3a7aba1 100644 --- a/docs/developer-docs/smart-contracts/candid/candid-howto.mdx +++ b/docs/developer-docs/smart-contracts/candid/candid-howto.mdx @@ -11,53 +11,30 @@ import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; # Overview -As discussed in the [Candid concepts](./candid-concepts.mdx) page, Candid provides a language-agnostic way to interact with canisters. +Candid provides a language-agnostic way to interact with canisters. :::info -While Candid is a robust, type safe, and future-proof way to facilitate communication between canisters, it is not required. Arbitrary bytes can be exchanged if all canisters that are part of the communication stream are designed to understand them (such that they are using the same underlying protocol, written in the same language, etc.). +While Candid is a robust, type-safe, and future-proof way to facilitate communication between canisters, it is not required. Arbitrary bytes can be exchanged if all canisters that are part of the communication stream are designed to understand them (such that they are using the same underlying protocol, written in the same language, etc.). [Learn more in the Candid reference documentation](/docs/current/references/candid-ref). ::: By using Candid, you can specify input argument values and display return values from canister methods regardless of whether you interact with ICP from a terminal using the IC SDK, through a web browser, or from a program written in JavaScript, Motoko, Rust, or any other language. -As a concrete example, let’s assume there is a `counter` canister already deployed on the network with the following Candid interface: - -```candid -service Counter : { -  inc : (step: nat) -> (nat); -} -``` - -Now, let’s explore how to interact with this canister in different scenarios with the help of Candid. - ## The `.did` file Candid types can be used to describe a service via a Candid service description file (`.did` file), which can either be manually written or generated from a service implementation. ### Auto-generated `.did` files -If you write a canister in Motoko, for example, the compiler automatically generates a Candid description when you compile the program. If you use `dfx`, you will typically see the auto-generated `.did` files in the `/declarations` directory of your project. Since these files are auto-generated, it is recommended that they not be manually edited. Even if you change the `.did` files in your project, they will be overwritten in the next `dfx build`. +If you write a canister in Motoko, the compiler automatically generates a Candid description when you compile the program. If you use `dfx`, you will typically see the auto-generated `.did` files in the `/declarations` directory of your project. Since these files are auto-generated, it is recommended that you do not manually edit them; they will be overwritten in the next `dfx build`. -For canisters written in Rust, the Candid extractor tool can be used with the IC CDK version `0.11.0` and newer. View the full instructions for using the [Candid extractor](/docs/current/developer-docs/backend/rust/generating-candid). +For canisters written in Rust, the Candid extractor tool can be used with the Rust [IC CDK](https://crates.io/crates/ic-cdk) versions `0.11.0` and newer. View the full instructions for using the [Candid extractor](/docs/current/developer-docs/backend/rust/generating-candid). ### Writing `.did` files -In other languages, you will have to write the Candid interface description manually. The most simple interface description can be found below, which defines a service with no public methods: - -```candid -service : {} -``` - -To add a public method, add the method's name, followed by the data types that the method accepts and returns: - -```candid -service : { -  ping : () -> (); -} -``` +For other languages, you will have to write the Candid interface description manually. Define a service, then add a public method's name, followed by the data types that the method accepts and returns: -In this `ping` method, it does not accept any types and does not return any types. Here is an example that defines the public method `greet`, which accepts type `text` and returns type `text` using a query call. @@ -84,174 +61,61 @@ import A "a.did";  // Imports only type definitions import service B "b.did";  // Imports both type definitions and main service ``` -## Interact with a service in a terminal - -One of the most common ways you interact with canisters and the ICP is by using the IC SDK. - -Within the IC SDK, the `dfx` tool provides the `dfx canister call` command to call a specific deployed canister—essentially a smart contract that runs on the IC—and, if applicable, a method of the service provided by the smart contract. - -When you run the `dfx canister call` command, you can pass arguments to a method by specifying them as [Candid textual values](./candid-concepts.mdx#textual-values). - -When you pass Candid textual values on the command-line, you can specify multiple argument values separated by commas (`,`) and wrapped inside parentheses. For example, specifying `(42, true)` represents two argument values, where the first argument is the number `42` and the second argument is a boolean value of `true`. - -The following example illustrates using the `dfx canister call` command to call the `counter` canister service and pass arguments for the `inc` method: - -```bash -$ dfx canister call counter inc '(42)' -(43) -``` - -To figure out how to create more complex Candid arguments, please refer to the [Candid reference](/docs/current/references/candid-ref). And for Candid arguments too long to fit the command line, please use the `--argument-file` flag of [`dfx canister call`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-call). - -You can also omit the arguments and let the IC SDK generate a random value that matches the method type. For example: - -```bash -$ dfx canister call counter inc -Unspecified argument, sending the following random argument: -(1_543_454_453) - -(1_543_454_454) -``` - -For more information about using `dfx` and the `dfx canister call` command, see [command-line reference](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/) and [dfx canister](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister) documentation. - -## Interact with a service from a browser - -The Candid interface description language provides a common language for specifying the signature of a canister. Based on the type signature of the service offered by the smart contract, Candid provides a web interface, the Candid UI, that allows you to call canister functions for testing and debugging from a web browser without writing any frontend code. - -To use the Candid web interface to test the `counter` canister: - -- #### Step 1:  Find the Candid UI canister identifier associated with the `counter` canister using the `dfx canister id __Candid_UI` command. - -``` bash -dfx canister id __Candid_UI -``` - -The command displays the canister identifier for the Candid UI with output similar to the following: +## Interact with a service -``` -r7inp-6aaaa-aaaaa-aaabq-cai -``` +### Command line -#### Step 2:  Start the canister execution environment locally by running the following command: +To interact with a service, use [`dfx canister call`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-call) -```bash -dfx start --clean --background -``` +To pass Candid arguments to the `dfx canister call` command, please refer to the [Candid reference](/docs/current/references/candid-ref), or, for Candid arguments too long to fit the command line, please use the `--argument-file` flag. -- #### Step 3:  Open a browser and navigate to the address and port number specified in the `dfx.json` configuration file. +You can also omit the arguments and let the IC SDK generate a random value that matches the method type. -By default, the `local` canister execution environment binds to the `127.0.0.1:4943` address and port number. +### Browser -- #### Step 4:  Add the required `canisterId` parameter and the Candid UI canister identifier returned by the `dfx canister id` command. +The Candid interface description language provides a common language for specifying the signature of a canister. Based on the type signature of the service offered by the smart contract, Candid provides a web interface (the Candid UI) that allows you to call canister functions for testing and debugging from a web browser without writing any frontend code. -For example, the full URL should look similar to the following, but with the `CANDID-UI-CANISTER-IDENTIFIER` that was returned by the `dfx canister id` command: +When a canister is deployed, it will return a Candid UI URL as part of the output, indicated as the "backend canister URL." The full URL should look similar to the following, but with the `canister_id` reflecting your project's canister ID. ``` -http://127.0.0.1:4943/?canisterId= -``` - -The browser displays a form for you to specify a canister identifier or choose a Candid description (`.did`) file. - -![candid ui select id](_attachments/candid-ui-select-id.png) - -If you aren’t sure which canister identifier to use, you can run the `dfx canister id` command to look up the identifier for a specific canister name. - -For example, if you want to view the functions for the `counter` service description, you could look up the canister identifier by running the following command: - -```bash -dfx canister id counter +http://127.0.0.1:4943/?canisterId= // Local URL +https://a4gq6-oaaaa-aaaab-qaa4q-cai.icp0.io/?id=ts425-saaaa-aaaab-qbksq-cai // Playground or Mainnet URL ``` -- #### Step 5:  Specify a canister identifier or description file, then click **Go** to display the service description. - -- #### Step 6:  Review the list of function calls and types defined in the program. - -- #### Step 7:  Type a value of the appropriate type for a function, or click **Random** to generate a value, then click **Call** or **Query** to see the result. - -For more information about the tool that creates a Web interface from the Candid interface of any canister, see the [Candid UI](https://github.com/dfinity/candid/tree/master/tools/ui) repository. +For more information about the tool that creates a web interface from the Candid interface of any canister, see the [Candid UI](https://github.com/dfinity/candid/tree/master/tools/ui) repository. :::caution At this time, it is not possible to disable the Candid UI from being installed and deployed for your canister. ::: -## Interact with a service from a Motoko canister +### Interact with a service from a Motoko canister -If you are writing a canister in Motoko, the Motoko compiler automatically translates the signature of your canister’s top-level `actor` or `actor class` into a Candid description, and the `dfx build` command ensures that the service description is properly referenced where it needs to be. +If you are writing a canister in Motoko, the Motoko compiler automatically translates the signature of your canister’s top-level `actor` or `actor class` into a Candid description, and the `dfx build` command ensures that the service description is properly referenced where it needs to be. It ensures that the canister identifier and the Candid description are passed to the Motoko compiler correctly. The Motoko compiler then translates the Candid type into the appropriate native Motoko type. This translation enables you to call the canister's method natively. For additional information on the type mapping between Candid and Motoko, you can consult the [supported types](/docs/current/references/candid-ref) reference section. -For example, if you want to write a `hello` canister that calls the `counter` canister in Motoko: - -``` motoko -import Counter "canister:Counter"; -import Nat "mo:base/Nat"; -actor { -  public func greet() : async Text { -    let result = await Counter.inc(1); -    "The current counter is " # Nat.toText(result) -  }; -} -``` +Motoko canisters auto-generate a Candid description file, located in your project build directory at `.dfx/local/canisters/hello/hello.did`. -In this example, when the import dependency on the `counter` canister—the `import Counter "canister:Counter"` declaration—is processed by the `dfx build` command, the `dfx build` command ensures that the `counter` canister identifier and the Candid description are passed to the Motoko compiler correctly. The Motoko compiler then translates the Candid type into the appropriate native Motoko type. This translation enables you to call the `inc` method natively—as if it were a Motoko function—even if the `counter` canister is implemented in a different language and even if you do not have the source code for the imported canister. For additional information on the type mapping between Candid and Motoko, you can consult the [supported types](/docs/current/references/candid-ref) reference section. - -The Motoko compiler and `dfx build` command also auto-generate the Candid description for the `hello` canister to allow other canisters or tools to interact with the `hello` canister seamlessly. The generated Candid description is located in your project build directory at `.dfx/local/canisters/hello/hello.did`. - -## Interact with a service from a Rust canister +### Interact with a service from a Rust canister If you write a canister in Rust, the `dfx build` command ensures that the service description is properly referenced where it needs to be. However, you need to write the Candid service description manually, following the conventions described in the [Candid specification](https://github.com/dfinity/candid/blob/master/spec/Candid.md#core-grammar). -For example, if you want to write a `hello` canister that calls the `counter` canister in Rust: - -```rust -use ic_cdk_macros::*; - -#[import(canister = "counter")] -struct Counter; - -#[update] -async fn greet() -> String { -    let result = Counter::inc(1.into()).await; -    format!("The current counter is {}", result) -} -``` - -When the import macro on the `counter` canister—the `#[import(canister = "counter")]` declaration—is processed by the `dfx build` command, the `dfx build` command ensures that the `counter` canister identifier and the Candid description are passed to the Rust CDK correctly. The Rust CDK then translates the Candid type into the appropriate native Rust type. This translation enables you to call the `inc` method natively—as if it were a Rust function—even if the `counter` canister is implemented in a different language and even if you do not have the source code for the imported canister. For additional information on the type mapping between Candid and Rust, you can consult the [supported types](/docs/current/references/candid-ref) reference section. - -For other canisters and tools to interact with the `hello` canister, you need to manually create a `.did` file: - -```candid -service : { -    greet : () -> (text); -} -``` +The Rust CDK then translates the Candid type into the appropriate native Rust type. This translation enables you to call the canister's method natively. For additional information on the type mapping between Candid and Rust, you can consult the [supported types](/docs/current/references/candid-ref) reference section. There is also an experimental feature to generate a Candid service description automatically; see this [test case](https://github.com/dfinity/candid/blob/master/rust/candid/tests/types.rs#L99) as an example. For additional information and libraries to help you create Candid services or canisters in Rust, see the documentation for the [Candid crate](https://docs.rs/candid/), [Rust CDK examples](https://github.com/dfinity/cdk-rs/tree/next/examples) and the [Rust tutorials](/docs/current/developer-docs/backend/rust/). -## Interact with a service from JavaScript +### Interact with a service from JavaScript The [dfinity/agent npm package](https://www.npmjs.com/package/@dfinity/agent) includes support for importing canisters using Candid. -For example, if you want to call the `counter` canister, you can write the following JavaScript program: - -```javascript -import counter from 'ic:canisters/counter'; -import BigNumber from 'bignumber.js'; -(async () => { -  const result = await counter.inc(new BigNumber(42)); -  console.log("The current counter is " + result.toString()); -})(); -``` - -When the import dependency of counter canister is processed by the `dfx build` command and the `webpack` configuration, this processing ensures that the canister identifier and the Candid description are passed to the JavaScript program correctly. Behind the scenes, the Candid service description is translated into a JavaScript module, located at `.dfx/local/canister/counter/counter.did.js`, by `dfx build`. The `dfinity/agent` package then translates the Candid type into native JavaScript values and enables you to call the `inc` method natively—as if it were a JavaScript function—even if the `counter` canister is implemented in a different language and even if you do not have the source code for the imported canister. For additional information on the type mapping between Candid and JavaScript, you can consult the [supported types](/docs/current/references/candid-ref) reference section. +When the import dependency of a canister is processed by the `dfx build` command and the `webpack` configuration, this processing ensures that the canister identifier and the Candid description are passed to the JavaScript program correctly. Behind the scenes, the Candid service description is translated into a JavaScript module, located at `.dfx/local/canister/counter/counter.did.js` by `dfx build`. The `dfinity/agent` package then translates the Candid type into native JavaScript values and enables you to call the canister's method natively. For additional information on the type mapping between Candid and JavaScript, you can consult the [supported types](/docs/current/references/candid-ref) reference section. ## Publish Candid interfaces privately -By default, `dfx` makes the `candid:service` metadata information public to promote interoperability and make it convenient to use the Candid UI. The Candid UI reads this metadata to determine the interface of your canister, and it doesn’t publish any more information than what is already public. This metadata can be returned through the `dfx` command: +By default, `dfx` makes the `candid:service` metadata information public to promote interoperability and make it convenient to use the Candid UI. The Candid UI reads this metadata to determine the interface of your canister. It doesn’t publish any more information than what is already public. This metadata can be returned through the [`dfx canister metadata`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-metadata) command: ``` -dfx canister metadata candid:service +dfx canister metadata candid:service ``` However, you can make this metadata information private so that it is only readable by the controllers of your canister. To do this, add the following configuration information to your canister's definition in the project's `dfx.json` file: @@ -265,12 +129,12 @@ However, you can make this metadata information private so that it is only reada       ] ``` -Then, redeploy your canister and confirm that the interface is no longer published publicly. +Then, redeploy your canister and confirm that the interface is no longer public. ## Create a new Candid implementation -In addition to the Candid implementations for Motoko, Rust, and JavaScript, there are community-supported Candid libraries for the following host languages: +There are community-supported Candid libraries for the following host languages: -   [AssemblyScript](https://github.com/rckprtr/cdk-as/tree/master/packages/cdk/assembly/candid) @@ -286,4 +150,4 @@ In addition to the Candid implementations for Motoko, Rust, and JavaScript, ther If you want to create a Candid implementation to support a language or tool for which an implementation is not currently available, you should consult the [Candid specification](https://github.com/dfinity/candid/blob/master/spec/Candid.md). -If you add a Candid implementation for a new language or tool, you can use the official [Candid test data](https://github.com/dfinity/candid/tree/master/test) to test and verify that your implementation is compatible with Candid, even in slightly more obscure corner cases. +If you add a Candid implementation for a new language or tool, you can use the official [Candid test data](https://github.com/dfinity/candid/tree/master/test) to test and verify that your implementation is compatible with Candid, even in slightly more obscure corner cases. \ No newline at end of file diff --git a/docs/developer-docs/smart-contracts/candid/index.mdx b/docs/developer-docs/smart-contracts/candid/index.mdx deleted file mode 100644 index 41f8c7670f..0000000000 --- a/docs/developer-docs/smart-contracts/candid/index.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -keywords: [beginner, concept, overview, candid] ---- - -import { MarkdownChipRow } from "/src/components/Chip/MarkdownChipRow"; - -# Candid - - - -Welcome to the Candid documentation for developers. - -This **Candid documentation** explains what Candid is and how you can use it when developing dapps to run on ICP. The information here is intended primarily for backend and frontend developers who want to deploy canisters on ICP. If you want to **implement** support for a new language or **extend** existing Candid features, you should refer to the formal [Candid specification](https://github.com/dfinity/candid/blob/master/spec/Candid.md) for background information and details about the internal structure of the language. - -- The [Candid concepts](candid-concepts.mdx) section introduces the purpose and key features of the Candid interface description language. It includes an overview of how Candid works and some simple examples to give you a working knowledge of how you can apply Candid to your use case. - -- The [using Candid](candid-howto.mdx) section explains how to perform typical tasks. - -- The [reference](/docs/current/references/candid-ref) section provides links to Candid tools and libraries and detailed reference information about Candid-supported types. diff --git a/docs/developer-docs/smart-contracts/compile.mdx b/docs/developer-docs/smart-contracts/compile.mdx index 5d16c12c34..4a9ccd7e1a 100644 --- a/docs/developer-docs/smart-contracts/compile.mdx +++ b/docs/developer-docs/smart-contracts/compile.mdx @@ -11,38 +11,46 @@ import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; ## Overview -After you have written the code for your project's canisters, you need to compile the code into a WebAssembly module before it can be deployed on ICP. +After you have [written the code](/docs/current/developer-docs/smart-contracts/write/overview) for your project's canisters and [created them](/docs/current/developer-docs/smart-contracts/create), you need to compile the code into a WebAssembly module before it can be deployed on ICP. -## Compiling your canister +:::danger -To compile your canister's Wasm module, you can use the [`dfx build`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-build) command. +You must [create your canisters](/docs/current/developer-docs/smart-contracts/create) before you can build them, otherwise you will receive an error that they do not exist. -:::tip -`dfx` isn't the only workflow that can be used for compiling code. For example, Rust canisters can be compiled using `cargo`. ::: `dfx build` looks for source code to compile for each canister configured under the `canisters` section in the [`dfx.json`](/docs/current/developer-docs/developer-tools/cli-tools/dfx-json-reference) file. It can be used to compile a specific canister or all canisters defined in the project. -Before using the `dfx build` command, first you need to [create the canister](/docs/current/developer-docs/smart-contracts/create) and verify the location of your project's files and their file names. If you modify these settings, be sure to edit your project's `dfx.json` file to reflect the current intended configuration. +Verify the location of your project's files and their file names. Be sure to edit your project's `dfx.json` file to reflect the current intended configuration if necessary. + +## Compiling your canister + +To compile your canister's Wasm module, you can use the [`dfx build`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-build) command. -Compile your canister code from within the project's directory: +Compile your canisters from within the project's directory: -```bash -dfx build -``` +- `dfx build `: Compile a canister locally. The local replica must be running to compile a canister locally. Start it with `dfx start --background`. -:::caution +- `dfx build --network=playground`: Compile a canister on the playground. Compiling a canister on the playground is free, but canisters are temporary and will be removed after 20 minutes. + +- `dfx build --network=ic`: Compile a canister on the mainnet. Compiling a canister on the mainnet will cost [cycles](/docs/current/developer-docs/gas-cost). + +- `dfx build --network=ic`: Compile all canisters in the project's `dfx.json` file on the mainnet. + +:::tip Compilation happens on the local machine of the developer. -Compiled Wasm binary is then installed on the target canister, which costs [cycles](/docs/current/developer-docs/getting-started/cycles/cycles-faucet). + +`dfx build` isn't the only workflow that can be used for compiling code. For example, Rust canisters can be compiled using `cargo`. ::: + When this command is executed, the following steps happen: -- The source code for each canister defined in `dfx.json` is compiled into a Wasm module. +- The source code for a canister is compiled into a Wasm module. -- If a canister being built is written in Motoko, type declarations are automatically generated using Candid. +- If a canister is written in Motoko, type declarations are automatically generated using Candid. -- If a canister being built is written in Rust, the build process checks for Rust vulnerabilities. +- If a canister is written in Rust, the build process checks for Rust vulnerabilities. ## How code is compiled to Wasm diff --git a/docs/developer-docs/smart-contracts/create.mdx b/docs/developer-docs/smart-contracts/create.mdx index da92188c77..f6abbef75a 100644 --- a/docs/developer-docs/smart-contracts/create.mdx +++ b/docs/developer-docs/smart-contracts/create.mdx @@ -15,24 +15,20 @@ Canisters contain both code and state. Once you have written the code for a `: Create a canister locally. The local replica must be running to create a canister locally. Start it with `dfx start --background`. -- `dfx canister create hello_world --network=playground`: Create a canister on the playground. +- `dfx canister create --network=playground`: Create a canister on the playground. Creating a canister on the playground is free, but canisters are temporary and will be removed after 20 minutes. -- `dfx canister create hello_world --network=ic`: Create a canister on the mainnet. +- `dfx canister create --network=ic`: Create a canister on the mainnet. Creating a canister on the mainnet will cost [cycles](/docs/current/developer-docs/gas-cost). -- `dfx canister create --all --network=ic`: Create all canisters in the project's `dfx.json` file. +- `dfx canister create --all --network=ic`: Create all canisters in the project's `dfx.json` file on the mainnet. -:::caution -Creating a canister on the mainnet will cost [cycles](/docs/current/developer-docs/getting-started/cycles/cycles-faucet). -::: - -::tip -Settings can be configured for a canister using optional flags. [View the full list of settings that can be configured](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#options-1). +:::tip +Settings can be configured while creating a canister using optional flags. [View the full list of settings](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-create). ::: When a canister is created, the following steps happen: @@ -52,5 +48,5 @@ When a canister is created, the following steps happen: Common errors related to canister creation include: -- [Canister not found](/docs/current/references/execution-errors#canister-not-found) -- [Maximum number of canisters reached](/docs/current/references/execution-errors#maximum-number-of-canisters-reached) \ No newline at end of file +- [Canister not found](/docs/current/references/execution-errors#canister-not-found). +- [Maximum number of canisters reached](/docs/current/references/execution-errors#maximum-number-of-canisters-reached). \ No newline at end of file diff --git a/docs/developer-docs/smart-contracts/deploy/custom-testnets.mdx b/docs/developer-docs/smart-contracts/deploy/custom-testnets.mdx index 488944c165..4460ad74d9 100644 --- a/docs/developer-docs/smart-contracts/deploy/custom-testnets.mdx +++ b/docs/developer-docs/smart-contracts/deploy/custom-testnets.mdx @@ -7,9 +7,9 @@ import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; ## Overview -ICP does not have a public testnet network that developers can use to deploy and test canister smart contracts because canisters deployed to the mainnet can be upgraded and changed, plus deployment costs are fairly low compared to other chains. +ICP does not have a public testnet network that developers can use to deploy and test canisters because canisters deployed to the mainnet can be upgraded and changed. Plus, deployment costs are fairly low compared to other chains. -To provide a testnet-like environment, ICP has a smart contract [playground](https://m7sm4-2iaaa-aaaab-qabra-cai.ic0.app/) network that can be used for small-scale, temporary testing. Canisters deployed to the playground are restricted to certain parameters. These limitations are: +To provide a testnet-like environment, ICP has a [playground](https://m7sm4-2iaaa-aaaab-qabra-cai.ic0.app/) network that can be used for small-scale, temporary testing. Canisters deployed to the playground are restricted to certain parameters. These limitations are: - Cycle transfer instructions are silently ignored by the playground. - Canisters can use at most 1GiB of memory. @@ -171,47 +171,16 @@ This definition uses the following parameters: - `providers`: The network provider; can be `localhost` or any other domain name. Domain names must be a full URL, such as `https://domain.com`. - `type`: The type of network, either `ephemeral` or `persistent`. Ephemeral networks do not retain the same IDs for canisters, while persistent networks will retain the same canister IDs. -### Configuring a wallet +:::caution If you are using a cycles wallet, the cycles wallet for each network is stored separately. -:::caution -Please note that the cycles wallet will be removed from dfx in a future release. +[Learn more about cycles wallets](/docs/current/developer-docs/defi/cycles/cycles-wallet). -It is recommended to use the cycles ledger instead. ::: -To use the same cycles wallet as on the main `ic` network, first make sure the correct identity is set by running the command: - -```bash -dfx identity use -``` - -Then, read the `ic` network's currently configured wallet using: - -```bash -dfx identity get-wallet --network ic -``` - -Set the wallet for the newly defined network with the command: - -```bash -dfx identity set-wallet --network myNetwork -``` - -These commands can be used together, such as: - -```bash -dfx identity set-wallet "$(dfx identity get-wallet --network ic)" --network myNetwork -``` - -If you prefer to use a separate cycles wallet for the staging environment, follow the instructions in the step 'Creating a cycles wallet' in the [deploying to the mainnet guide](/docs/current/developer-docs/getting-started/deploy/mainnet). - - ## Resources -- [Deploying to playground](/docs/current/developer-docs/getting-started/deploy/testnet). - - [Defining custom `dfx` networks](/docs/current/developer-docs/developer-tools/cli-tools/advanced-dfx/networks-json). - [Using the playground UI](/docs/current/developer-docs/developer-tools/ide/playground). diff --git a/docs/developer-docs/smart-contracts/deploy/overview.mdx b/docs/developer-docs/smart-contracts/deploy/overview.mdx index f97a19b93d..9d4158d1e3 100644 --- a/docs/developer-docs/smart-contracts/deploy/overview.mdx +++ b/docs/developer-docs/smart-contracts/deploy/overview.mdx @@ -1,5 +1,5 @@ --- -keywords: [beginner, tutorial, deploy, deploy canisters] +keywords: [beginner, tutorial, deploy, deploy canisters, local deployment, local dev, mainnet deployment, mainnet, playground, deploy playground, deploy to playground] --- import TabItem from "@theme/TabItem"; @@ -13,21 +13,17 @@ import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; -After you have built a canister, you can +After you have [built](/docs/current/developer-docs/smart-contracts/install) a canister, you can deploy it to: -- The local canister execution environment on your machine where -  no tokens or cycles are required -- The playground on the mainnet, a testnet-like sandbox -  environment. No tokens or cycles are required to deploy and run your canister -  smart contract, but it will be removed after 20 minutes. -- Mainnet for production use. This deployment method will require -  cycles. +- The local replica where no tokens or cycles are required. -This page will guide you through all 3 deployment methods. +- The playground on the mainnet, which is a testnet-like sandbox environment. No tokens or cycles are required to deploy and run your canister on the playground, but it will be removed after 20 minutes. -:::info -This page details using the `dfx deploy` command, which does several processes in the background, including: +- The mainnet, designed for production use. This deployment method will cost cycles. + +:::danger +`dfx deploy` does several processes in the background, including: - [Creating each canister](/docs/current/developer-docs/smart-contracts/create) listed in the `dfx.json` file. @@ -40,68 +36,29 @@ This page details using the `dfx deploy` command, which does several processes i ## Testnets -Most blockchain networks have separate testnets that allow smart contract -developers to test their projects in a production-like environment at -significantly lower cost than on the mainnet. Because the execution of canisters is -fairly cheap on ICP, and ICP smart contracts can be upgraded once deployed, there is no testnet for ICP. +Most blockchain networks have separate testnets that allow developers to test their projects in a production-like environment at a significantly lower cost than on the mainnet. Because the execution of canisters on ICP is fairly cheap and canisters can be upgraded once deployed, there is no testnet for ICP. + Developers are encouraged to test their canister smart contracts locally or directly on the mainnet. -However, the [playground](/docs/current/developer-docs/getting-started/deploy/testnet) sandbox environment can be used as a testnet-like deployment option. It does not require cycles or tokens to deploy and operate a canister, but it has limitations, and canisters will be automatically removed after 20 minutes. +However, tools such as [ICP Ninja](https://icp.ninja) (a web IDE) and the [playground](/docs/current/developer-docs/developer-tools/ide/playground) (available from the CLI) can be used as testnet-like deployment options. They do not require cycles or tokens to deploy and operate a canister, but they do have limitations and canisters will be automatically removed after 20 minutes. -For the majority of developers, the playground option can be used for most workflows, as will be demonstrated below. For more advanced developers and use cases, there are two possible options for a testnet-like environment: +For most developers, the playground option can be used. For more advanced developers and use cases, there are two possible options for a testnet-like environment: - [Private testnets](/docs/current/developer-docs/smart-contracts/deploy/custom-testnets): Developers can deploy their own custom instance of the playground on the mainnet, allowing for full customization of the playground's parameters. - [Synthetic testnets](/docs/current/developer-docs/smart-contracts/deploy/custom-testnets): The `dfx` named network feature can be used to create custom local networks that can be used for local testing segmented from other projects deployed locally. -## Deployment - -Before you deploy your canister, open a new terminal and navigate to your project -directory. Verify the canisters you'd like to deploy are configured in the -project's `dfx.json` file. - -:::info - -Need to create a project? Check out the -[Hello, world!](/docs/current/developer-docs/getting-started/hello-world) sample -project. - -An example `dfx.json` file can be found in the -[default project template document](/docs/current/developer-docs/getting-started/hello-world). -::: - -### Local deployment - -Start the local canister execution environment: - -```bash -dfx start -``` - -To deploy locally, use the command: - -```bash -dfx deploy -``` - -### Deploying to playground - -To deploy to the playground, use the command: +## Deploying canisters -```bash -dfx deploy --playground -``` - -### Deploying to mainnet +Verify you are in your project's directory and the canisters you'd like to deploy are configured in the project's `dfx.json` file. -To deploy to the mainnet, use the command: +- `dfx deploy hello_world`: Deploy a canister locally. The local replica must be running to deploy a canister locally. Start it with `dfx start --background`. -```bash -dfx deploy --network ic -``` +- `dfx deploy hello_world --network=playground`: Deploy a canister on the playground. Deploying a canister on the playground is free, but canisters are temporary and will be removed after 20 minutes. -Deploying canisters to the mainnet will cost cycles. [Learn more about cycles and how to acquire them](/docs/developer-docs/getting-started/cycles/cycles-faucet.mdx). +- `dfx deploy hello_world --network=ic`: Deploy a canister on the mainnet. Deploying a canister on the mainnet will cost [cycles](/docs/current/developer-docs/gas-cost). +- `dfx deploy --network=ic`: Deploy all canisters in the project's `dfx.json` file on the mainnet. ## Sharing links to canisters @@ -113,29 +70,12 @@ You can use the following URL format to access a canister in the web browser: https://.icp0.io ``` -For example, to access a canister with a canister ID of `5h5yf-eiaaa-aaaaa-qaada-cai`: - -``` -https://5h5yf-eiaaa-aaaaa-qaada-cai.icp0.io -``` - :::info If you are sharing a link to a frontend (asset) canister, the frontend of the dapp will be displayed. -If you are sharing a link to a backend canisters, the [CandidUI](/docs/current/developer-docs/smart-contracts/candid/candid-concepts) will be displayed. +If you are sharing a link to a backend canisters, the [Candid UI](/docs/current/developer-docs/smart-contracts/candid/candid-concepts) will be displayed. ::: -### Deploying specific canisters - -The `deploy` command deploys all canisters configured in your `dfx.json` file. -To deploy just one canister, specify the canister's name: - -```bash -dfx deploy hello_backend ## Deploy locally -dfx deploy hello_backend --playground ## Deploy to the playground -dfx deploy hello_backend --network ic ## Deploy to the mainnet -``` - ## Use a custom Motoko version with `dfx deploy` To use a custom Motoko version with `dfx deploy`, export the following @@ -149,11 +89,7 @@ DFX_MOC_PATH="$(vessel bin)/moc" dfx deploy ## Setting a canister's init arguments You can set a canister's init arguments when the canister is deployed by passing -the `--argument` flag in either the `dfx install` or `dfx deploy` commands: - -```bash -dfx canister install --argument "(arg in candid)" -``` +the `--argument` flag: ```bash dfx deploy --argument "(arg in candid)" @@ -181,133 +117,4 @@ Alternatively, init arguments can be set in `dfx.json` in `dfx` versions ``` If an init argument is set in `dfx.json` and set with the CLI command, the -argument set in the CLI command is used. - -## Setting tasks to execute once a canister has been deployed - -For certain workflows, it may be important to have a canister execute a task or -call as soon as the canister is deployed or started. For this workflow, using -[timers](/docs/current/developer-docs/smart-contracts/advanced-features/periodic-tasks) can be useful. - -Here is an example: - - - - -This example creates a periodic timer that gets called immediately after the -canister starts: - -```motoko -import Time "mo:base/Time"; -import Timer "mo:base/Timer"; -import Nat64 "mo:base/Nat64"; -import Debug "mo:base/Debug"; - -actor { - system func timer(setGlobalTimer : Nat64 -> ()) : async () { - let next = Nat64.fromIntWrap(Time.now()) + 20_000_000_000; - setGlobalTimer(next); // absolute time in nanoseconds - Debug.print("Tick!"); - } -} -``` - -You can learn more in the -[Motoko Timer library documentation](/docs/current/motoko/main/base/Timer). - - - - - -This example creates a periodic timer that gets called immediately after the -canister starts: - -```rust -#[ic_cdk::init] -fn init(timer_interval_secs: u64) { -    let interval = std::time::Duration::from_secs(timer_interval_secs); -    ic_cdk::println!("Starting a periodic task with interval {interval:?}"); -    ic_cdk_timers::set_timer_interval(interval, || { -        COUNTER.fetch_add(1, Ordering::Relaxed); -    }); -} -``` - - - -}> - -This example creates a periodic timer that gets called immediately after the -canister starts: - -```typescript -import { IDL, setTimer, update } from 'azle'; - -export default class { - @init([], IDL.Nat64) - createTimer(): bigint { - const timerId = setTimer(1_000n, () => - console.log('timer callback called') - ); - - return timerId; - } -} -``` - - - -}> - -This example creates a periodic timer that gets called immediately after the -canister starts: - -```python -from kybra import ( - blob, - Duration, - ic, - query, - Record, - TimerId, - update, - void, -) - -class TimerIds(Record): - single: TimerId - -@init -def set_timers(delay: Duration, interval: Duration) -> TimerIds: - - single_id = ic.set_timer(delay, one_time_timer_callback) - - return { - "single": single_id, - } - -def one_time_timer_callback(): - ic.print("one_time_timer_callback called") -``` - -:::caution - -Kybra canisters must be deployed from a Python virtual environment. [Learn more in the Kybra docs](/docs/current/developer-docs/backend/python/). - -::: - - - - - -## Next steps - -- [Delete canisters](../maintain/delete) - -- [Canister history](../maintain/history) - -- [Import canisters](../maintain/import) - -- [Recover canisters](../maintain/recovery) - -- [Canister settings](../maintain/settings) +argument set in the CLI command is used. \ No newline at end of file diff --git a/docs/developer-docs/smart-contracts/install.mdx b/docs/developer-docs/smart-contracts/install.mdx index 9388212065..d3d8736d79 100644 --- a/docs/developer-docs/smart-contracts/install.mdx +++ b/docs/developer-docs/smart-contracts/install.mdx @@ -15,23 +15,15 @@ When a canister has been initially created, i ## Installing canister code -Code must be installed into a canister using the [`dfx canister install`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-install) command: +Code must be installed into a canister using the [`dfx canister install`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-install) command from the project's directory: -- `dfx canister install hello_world`: Install canister code locally. +- `dfx canister install hello_world`: Install canister code locally. The local replica must be running to create a canister locally. Start it with `dfx start --background`. -- `dfx canister install hello_world --network=playground`: Install canister code on the playground. +- `dfx canister install hello_world --network=playground`: Install canister code on the playground. Installing code in a canister on the playground is free, but canisters are temporary and will be removed after 20 minutes. -- `dfx canister install hello_world --network=ic`: Install canister code on the mainnet. +- `dfx canister install hello_world --network=ic`: Install canister code on the mainnet. Installing code in a canister on the mainnet will cost [cycles](/docs/current/developer-docs/gas-cost). -- `dfx canister install --all --network=ic`: Install code for all canisters in the project's `dfx.json` file. - -:::caution -Installing code in a canister on the mainnet will cost [cycles](/docs/current/developer-docs/getting-started/cycles/cycles-faucet) -::: - -::tip -Settings can be configured for a canister using optional flags. [View the full list of settings that can be configured](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#options-1). -::: +- `dfx canister install --all --network=ic`: Install code for all canisters in the project's `dfx.json` file on the mainnet. When a canister's code is installed, the following components are created: @@ -44,7 +36,7 @@ When a canister's code is installed, the following components are created: ## Installing a gzip-compressed WebAssembly module The size of programs that can be installed on ICP is currently limited to 2 MiB. -WebAssembly modules that are (slightly) larger than 2 MiB can still be installed on ICP by using gzip file compression before uploading; ICP will then decompress the file and install the contained WebAssembly module. +WebAssembly modules that are (slightly) larger than 2 MiB can still be installed on ICP by using gzip file compression before uploading. ICP will then decompress the file and install the contained WebAssembly module. The WebAssembly module is compressed using `gzip` and then uploaded by `dfx canister install`, you may need to add `--mode reinstall` or `--mode upgrade` when uploading the module to an existing canister. diff --git a/docs/developer-docs/smart-contracts/write/auto-scaling-architecture.mdx b/docs/developer-docs/smart-contracts/write/auto-scaling-architecture.mdx deleted file mode 100644 index 72a39b51e0..0000000000 --- a/docs/developer-docs/smart-contracts/write/auto-scaling-architecture.mdx +++ /dev/null @@ -1,484 +0,0 @@ ---- -keywords: [beginner, write, resources, architecture, multi-canister, primary canister, secondary canister] ---- - -import { MarkdownChipRow } from "/src/components/Chip/MarkdownChipRow"; -import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; - -# Auto-scaling example - - - -## Overview - -Projects deployed on ICP can use a variety of different architectures with regard to how services and assets are organized. Projects may use a single canister to hold the entire dapp's assets and functions, or they may separate services across different canisters, deploy different canisters on different subnets, or separate different data into different canisters. - -:::caution - -This page demonstrates the concept of auto-scaling architectures using an older workflow with heap storage. For current projects, it is recommended to use either a single canister architecture with stable memory, as described in the [write overview page](/docs/current/developer-docs/smart-contracts/write/overview), or create an auto-scaling architecture that creates new canisters on a different subnet. - -::: - -One multi-canister architecture option is to configure a primary canister that has the ability to spawn other canisters based on certain criteria, such as when a new user is created or if the application's total data reaches a certain amount. - -## Auto-scaling example - -This guide will provide an example of a multi-canister architecture where there are two types of canisters: - -- Primary canister: Spawns secondary canisters whenever the application's storage limit is reached. - -- Secondary canister: Stores data. In this example, each secondary data canister is storing text notes that are each limited to 1 MiB of storage. Whenever a secondary canister reaches 2 GiB of total used storage, the primary canister will create another secondary canister to store additional data. - -This architecture is used to prevent the application from trapping or resulting in data loss due to running out of available heap storage in a single canister. - -The full code example can be found in the [sample's GitHub repo](https://github.com/hoosan/auto-scaling-notes/tree/main). This guide will walk through the code logic of the primary ('main') canister and the secondary ('datastore') canister. - -First, this primary canister (stored in the `Main.mo` file) imports a variety of packages from the Motoko base library and data from the `IC.mo`, `Types.mo`, and `Datastore.mo` files: - -```motoko no-repl -import Cycles "mo:base/ExperimentalCycles"; -import Debug "mo:base/Debug"; -import Iter "mo:base/Iter"; -import HashMap "mo:base/HashMap"; -import Option "mo:base/Option"; -import List "mo:base/List"; -import Principal "mo:base/Principal"; -import Result "mo:base/Result"; -import Nat "mo:base/Nat"; - -import ICType "./IC"; -import Types "./Types"; -import Datastore "./Datastore"; - -``` - -Then, it creates a shared actor class containing type definitions: - -```motoko no-repl -shared ({ caller }) actor class Self() { - -  type UserId = Types.UserId; -  type NoteId = Types.NoteId; -  type User = Types.User; -  type DatastoreCanisterId = Types.DatastoreCanisterId; -  type Byte = Types.Byte; -  type Note = Types.Note; -  type DefiniteNote = Types.DefiniteNote; -``` - - -Bind the caller principal to an _admin variable: - -```motoko no-repl -  let _admin : Principal = caller; -``` - -Set a variable for the management canister: - -```motoko no-repl -  // The IC management canister. -  let IC : ICType.Self = actor "aaaaa-aa"; -``` - -Currently, a single canister smart contract is limited to 4 GiB of heap storage. In this project, you will ensure that the datastore canister does not meet this limit by restricting the memory usage to 2 GiB: - -```motoko no-repl -  let DATASTORE_CANISTER_CAPACITY : Byte = 2_000_000_000; -``` - -This application will store notes. Each note will be limited to 1 MiB: - -```motoko no-repl -  let NOTE_DATA_SIZE = 1_000_000; -``` - -The number of notes on a single datastore canister can be calculated as follows: - -```motoko no-repl -  // DATASTORE_CANISTER_CAPACITY / NOTE_DATA_SIZE -  let _numberOfDataPerCanister : Nat = DATASTORE_CANISTER_CAPACITY / NOTE_DATA_SIZE; -``` - -Configure stable variables for the application: - -```motoko no-repl -  stable var _count = 0; -  stable var _currentDatastoreCanisterId : ?DatastoreCanisterId = null; -  stable var _stableUsers : [(UserId, User)] = []; -  stable var _stableDatastoreCanisterIds : [DatastoreCanisterId] = []; - -  let _users = HashMap.fromIter( -    _stableUsers.vals(), 10, Principal.equal, Principal.hash -  ); -  var _datastoreCanisterIds = List.fromArray(_stableDatastoreCanisterIds); -  var _dataStoreCanister : ?Types.Datastore = null; -``` - -Define a series of functions for different purposes: - -```motoko no-repl -  // Returns the current number of notes. -  public query func count() : async Nat { -    _count; -  }; - -  // Returns the number of notes on a single datastore canister. -  public query func numberOfDataPerCanister() : async Nat { -    _numberOfDataPerCanister; -  }; - -  // Returns the number of secondary (datastore) canisters -  public query func sizeOfDatastoreCanisterIds() : async Nat { -    List.size(_datastoreCanisterIds); -  }; - -  // Returns the cycle balance. Useful for monitoring. -  public query func balance() : async Nat { -    Cycles.balance() -  }; - -  // Returns a canister id of the current secondary (datastore) canister. -  // Traps if there is no secondary canister. -  public query ({ caller }) func currentDatastoreCanisterId(): async Result.Result { -    switch _currentDatastoreCanisterId { -      case null { #err "A datastore canister is currently null." }; -      case (?canisterId_) { #ok canisterId_ }; -    } -  }; - -  // Returns a canister id of the canister containing a note of [noteId] -  // Traps if: -  //   - [caller] is not a registered user. -  //   - [noteId] exceeds [_count]. -  //   - [index] exceeds the size of [_datastoreCanisterIds] list. -  public query ({ caller }) func getCanisterIdByNoteId(noteId: NoteId) : async Result.Result { -    if (not (_isUserRegistered caller)) { return #err "You are not registered." }; -    if (noteId >= _count) { return #err "Out of bounds error."}; -    let index = noteId / _numberOfDataPerCanister; -    switch (List.get(List.reverse(_datastoreCanisterIds), index)){ -      case null { #err ("Canister ID is not found. index: " # Nat.toText(index) # " size: " # Nat.toText(List.size(_datastoreCanisterIds)))  }; -      case (?id) { #ok id }; -    } -  }; - -  // Returns [user_.id]. -  // Traps if [caller] is not a registered user. -  public query ({ caller }) func userId(): async Result.Result { -    switch (_users.get(caller)) { -      case (?user_) { #ok (user_.id) }; -      case null { #err "You are not registered." }; -    } -  }; - -  // Returns [_datastoreCanisterIds] as a array. -  // Traps if [caller] is not a registered user. -  public query ({ caller }) func datastoreCanisterIds(): async Result.Result<[DatastoreCanisterId],Text> { -    if (not (_isUserRegistered caller)) { return #err "You are not registered." }; -    #ok (List.toArray(_datastoreCanisterIds)) -  }; - -  // Register [caller] as a new user. -  // Returns [caller] if the registration process successfully finishes. -  // Traps if: -  //   - [caller] is not a registered user. -  //   - [caller] is the anonymous identity. -  public shared ({ caller }) func register(): async Result.Result{ -    if (Principal.isAnonymous(caller)) { return #err "You need to be authenticated." }; -    switch (_users.get(caller)) { -      case (?_) { -        #err "This principal id is already in use." -      }; -      case null { -        let user = { -          id = caller; -          var name = ""; -        }; -        _users.put(caller, user); -        #ok caller -      }; -    } -  }; -``` - -Define the logic to create a new note in the current datastore caller: - -```motoko no-repl -  // Traps if: -  //   - [caller] is not a registered user. -  //   - there is no datastore canister. -  //   - it fails to generate a new datastore canister. -  public shared ({ caller }) func createNote(title: Text, content: Text) : async Result.Result { -    if (not (_isUserRegistered caller)) { return #err "You are not registered." }; - -    // Check the current datastore has reached its limit. -    if (_count % _numberOfDataPerCanister == 0){ -      // Generate a new datastore canister -      switch (await _generateDataStoreCanister()){ -        case (#err m) { return #err m }; -        case (#ok canisterId_){ -          _currentDatastoreCanisterId := ?canisterId_; -        }; -      } -    }; - -    let noteId = _count; -    _count += 1; - -    switch _currentDatastoreCanisterId { -      case null { #err "A datastore canister is currently null." }; -      case (?canisterId_){ -        let dataStoreCanister = _getDatastoreCanister(canisterId_); -        await dataStoreCanister.createNote(caller, canisterId_, noteId, title, content); -      } -    } -  }; - -  // Returns `true` if [caller] is a registered user. -  public shared query ({ caller }) func isRegistered(): async Bool { -    _isUserRegistered(caller) -  }; - -  // Sets [_dataStoreCanister] to an actor of a datastore canister. -  // Returns an actor of a datastore canister. -  private func _getDatastoreCanister(canisterId: Principal) : Types.Datastore { -    switch _dataStoreCanister { -      case null { -        let canister = actor (Principal.toText(canisterId)) : Types.Datastore; -        _dataStoreCanister := ?canister; -        canister -      }; -      case (?d) { return d } -    } -  }; -``` - -Below is the logic that spawns a new canister from this master canister: - -```motoko no-repl -  // Generates a new datastore canister. -  // Returns a canister id of the generated canister. -  // Traps if it fails to generate a new canister. -  private func _generateDataStoreCanister(): async Result.Result{ -    try { -      Cycles.add(4_000_000_000_000); -      let noteStoreCanister = await Datastore.Self(NOTE_DATA_SIZE); -      let canisterId = Principal.fromActor(noteStoreCanister); - -      _currentDatastoreCanisterId := ?canisterId; -      _dataStoreCanister := ?noteStoreCanister; -      _datastoreCanisterIds := List.push(canisterId, _datastoreCanisterIds); - -      let settings: ICType.CanisterSettings = { -        controllers = [_admin]; -      }; -      let params: ICType.UpdateSettings = { -        canister_id = canisterId; -        settings = settings; -      }; -      await IC.update_settings(params); - -      #ok (canisterId) -    } catch (e) { -      #err "An error occurred in generating a datastore canister." -    } -  }; - -  // Returns `true` if [principal] is a registered user. -  private func _isUserRegistered(principal: Principal): Bool { -    Option.isSome(_users.get(principal)) -  }; -``` - -Lastly, the code defines the upgrade logic for the canister: - -```motoko no-repl -  // The work required before a canister upgrade begins. -  system func preupgrade() { -    Debug.print("Starting pre-upgrade hook..."); -    _stableUsers := Iter.toArray(_users.entries()); -    _stableDatastoreCanisterIds := List.toArray(_datastoreCanisterIds); -    Debug.print("pre-upgrade finished."); -  }; - -  // The work required after a canister upgrade ends. -  system func postupgrade() { -    Debug.print("Starting post-upgrade hook..."); -    _stableUsers := []; -    _stableDatastoreCanisterIds := []; -    Debug.print("post-upgrade finished."); -  }; - -}; -``` - -Then, each secondary canister created by the primary canister will implement the following code (in this example, stored in the `Datastore.mo` file) : - -```motoko no-repl -import Array "mo:base/Array"; -import Buffer "mo:base/Buffer"; -import Debug "mo:base/Debug"; -import Result "mo:base/Result"; -import Nat "mo:base/Nat"; -import Text "mo:base/Text"; -import Iter "mo:base/Iter"; -import Time "mo:base/Time"; -import List "mo:base/List"; -import HashMap "mo:base/HashMap"; -import Hash "mo:base/Hash"; -import Option "mo:base/Option"; -import Principal "mo:base/Principal"; - -import Types "./Types"; -import Note "./Note"; - -shared ({ caller }) actor class Self(_noteDataSize: Types.Byte): async Types.Datastore { - -  type UserId = Types.UserId; -  type NoteId = Types.NoteId; -  type Note = Types.Note; -  type DefiniteNote = Types.DefiniteNote; -  type Byte = Types.Byte; - -  // Stable variables -  stable var _stableDatastores : [(NoteId, Note)] = []; - -  // Bind [caller] and [_main] -  let _main : Principal = caller; - -  let _datastores = HashMap.fromIter(_stableDatastores.vals(), 10, Nat.equal, Hash.hash); - -  // Creates a new note in a canister. -  // Returns a created note. -  // Traps if: -  //   - [caller] is not [_main]. (Design choice: one cannot directly access a secondary (datastore) canister.) -  //   - the data size exceeds the limit. -  public shared ({ caller }) func createNote(userId: UserId, canisterId: Principal, noteId: NoteId, title: Text, content: Text) : async Result.Result { -    if (_main != caller) { return #err "You can only create a note by calling the main canister." }; -    if (_isLimit (title # content)) { return #err "The data size exceeded the limit." }; -    let note = Note.create(noteId, canisterId, userId, title, content); -    _datastores.put(noteId, note); -    #ok (Note.freeze(note)) -  }; - -  // Returns a note of [noteId]. -  // Traps if: -  //   - a note does not exist for a given [noteId]. -  //   - [caller] is not the owner of a note. -  public query ({ caller }) func getNoteById(noteId: NoteId) : async Result.Result { -    switch (_datastores.get(noteId)) { -      case null { -        #err ("A note does not exist for ID: " # Nat.toText(noteId)) -      }; -      case (?note_){ -        if (not _isAuthenticated(note_, caller)) { return #err "You are not authenticated." }; -        #ok (Note.freeze(note_)) -      }; -    } -  }; - -  // Returns all notes of [caller]. -  // Returns an empty array if [caller] does not have any note in a canister. -  public query ({ caller }) func getAllNotes() : async [DefiniteNote] { -    let notes: HashMap.HashMap = HashMap.mapFilter(_datastores, Nat.equal, Hash.hash, func (_: NoteId, note: Note) { -      if (note.userId == caller){ -        return ?Note.freeze(note); -      } else { -        return null; -      }; -    }); -    Iter.toArray(notes.vals()) -  }; - -  // Updates a note of the [caller]. -  // Returns an updated note. -  // Traps if: -  //   - there is no note associated with a given [noteId]. -  //   - [caller] is not the owner of a note. -  //   - the data size exceeds the limit. -  public shared ({ caller }) func updateNote(noteId: NoteId, title: ?Text, content: ?Text) : async Result.Result { -    switch (_datastores.get(noteId)) { -      case null { -        #err ("A note does not exist for ID: " # Nat.toText(noteId)) -      }; -      case (?note_){ -        if (not _isAuthenticated(note_, caller)) { return #err "You are not authenticated." }; -        if (_hasUpdateReachedLimit(note_, title, content)) { return #err "The data size exceeded the limit." }; - -        let updatedNote = Note.update(note_, title, content); -        _datastores.put(noteId, updatedNote); -        #ok (Note.freeze(updatedNote)) -      }; -    } -  }; - -  // Deletes a note of [noteId] -  // Returns [noteId] of a deleted note. -  // Traps if: -  //   - there is no note associated with a given [noteId]. -  //   - [caller] is not the owner of a note. -  public shared ({ caller }) func deleteNote(noteId: NoteId) : async Result.Result { -    switch (_datastores.get(noteId)) { -      case null { -        #err ("A note does not exist for ID: " # Nat.toText(noteId)) -      }; -      case (?note_){ -        if (not _isAuthenticated(note_, caller)) { return #err "You are not authenticated." }; -        _datastores.delete(noteId); -        #ok (note_.id) -      }; -    } -  }; - -  // Returns `true` if the owner of [note] is [userId]. -  private func _isAuthenticated(note: Note, userId: UserId) : Bool { -    note.userId == userId -  }; - -  // Returns `true` if the data size exceeds the limit. -  private func _isLimit(t: Text) : Bool { -    Text.encodeUtf8(t).size() > _noteDataSize -  }; - -  // Returns `true` if the data size of an updated note exceeds the limit. -  private func _hasUpdateReachedLimit(note: Note, title: ?Text, content: ?Text) : Bool { -    switch(title, content){ -      case (?t, ?c){ -        _isLimit(t # c) -      }; -      case (?t, null){ -        _isLimit(t # note.content) -      }; -      case (null, ?c){ -        _isLimit(note.title # c) -      }; -      case (null, null){ -        false -      }; -    } -  }; - -  // Below, we implement the upgrade hooks for our canister. -  // See https://smartcontracts.org/docs/language-guide/upgrades.html - -  // The work required before a canister upgrade begins. -  system func preupgrade() { -    Debug.print("Starting pre-upgrade hook..."); -    _stableDatastores := Iter.toArray(_datastores.entries()); -    Debug.print("pre-upgrade finished."); -  }; - -  // The work required after a canister upgrade ends. -  system func postupgrade() { -    Debug.print("Starting post-upgrade hook..."); -    _stableDatastores := []; -    Debug.print("post-upgrade finished."); -  }; - -} -``` - -## Resources - -- [Autoscaling notes - Motoko](https://github.com/hoosan/auto-scaling-notes): Live preview: https://yflxa-iaaaa-aaaai-acfja-cai.ic0.app/ - -- [Scaled storage - Rust](https://github.com/scroobius-pip/scaled_storage). diff --git a/docs/developer-docs/smart-contracts/write/overview.mdx b/docs/developer-docs/smart-contracts/write/overview.mdx index e3e6a9b20c..08a790ff49 100644 --- a/docs/developer-docs/smart-contracts/write/overview.mdx +++ b/docs/developer-docs/smart-contracts/write/overview.mdx @@ -4,97 +4,298 @@ keywords: [beginner, write, resources, architecture, single canister, multi-cani import { MarkdownChipRow } from "/src/components/Chip/MarkdownChipRow"; import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; +import TabItem from "@theme/TabItem"; +import { AdornedTabs } from "/src/components/Tabs/AdornedTabs"; +import { AdornedTab } from "/src/components/Tabs/AdornedTab"; +import { BetaChip } from "/src/components/Chip/BetaChip"; -# Write overview +# Write +ICP supports a wide range of applications and architecture types. +Apps can range from single smart contracts to complex, multi-canister projects that are controlled by a DAO and everything in between. -ICP supports a wide range of application and architecture types. -Apps can range from single smart contracts to complex, multi-canister projects that are controlled by a DAO, and everything in between. -To begin writing and structuring your smart application, there are a few different workflows you can follow. -- **Standard workflow**: - The developer writes both the frontend code and the backend code. - The frontend code is hosted onchain in a canister and is served to the browser together with other web assets such as HTML and CSS. - When the frontend code runs in the browser, it calls functions of the backend canister. +You can begin writing and structuring your application using one of two primary workflows: -- **Framework-based workflow**: +- **Standard workflow**: The developer writes both the frontend code and the backend code, then deploys both to ICP as canisters. - - [Juno](/docs/current/developer-docs/web-apps/frameworks/juno) is a community project that is tailored for Web2 developers. - It takes care of hosting code and data in canisters such that developers can write Web3 applications using familiar Web2 concepts and patterns. - For more details please follow [the official Juno documentation](https://juno.build/docs/intro). +- **Framework-based workflow**: An external framework is used to help facilitate creating and deploying canisters. [Learn more about frameworks](#framework-based-workflow). - - [Bitfinity EVM](/docs/current/developer-docs/backend/solidity/) is tailored for Solidity developers. - It is a canister that runs an instance of the Ethereum virtual machine and allows developers to upload and execute smart contracts written in Solidity. - For more details please follow [the official Bitfinity documentation](https://docs.bitfinity.network/). +## Standard workflow -This page will focus on the standard workflow of writing applications consisting of the frontend and the backend components. - -## Choosing the programming language for the backend +### Choosing the programming language for the backend The backend stores the application’s data and contains the core logic. Several languages are supported, such as: -- **Rust**: supported by [DFINITY](https://github.com/dfinity/cdk-rs). - Among ICP languages, Rust is the language with the most production coverage. - All system smart contracts, such as [the DAO governing ICP](https://github.com/dfinity/ic/tree/master/rs/nns), [the ICP ledger](https://github.com/dfinity/ic/tree/master/rs/ledger_suite/icp), the [Bitcoin](https://github.com/dfinity/bitcoin-canister) and [Ethereum](https://github.com/dfinity/ic/tree/master/rs/ethereum) integration smart contracts, are written in Rust. - This language gives the developer full control over all aspects of the smart contract starting from performance to memory management. - The only disadvantage of Rust is that it is lower-level compared to other languages and requires more expert programming skills to write safe and secure code. - [Learn more about using Rust](/docs/current/developer-docs/backend/rust). +- **[Rust](/docs/current/developer-docs/backend/rust/)**: Supported by [DFINITY](https://github.com/dfinity/cdk-rs). Currently, Rust is the language with the most production coverage for ICP applications. +All system smart contracts, such as [the DAO governing ICP](https://github.com/dfinity/ic/tree/master/rs/nns), [the ICP ledger](https://github.com/dfinity/ic/tree/master/rs/ledger_suite/icp), and the [Bitcoin](https://github.com/dfinity/bitcoin-canister) and [Ethereum](https://github.com/dfinity/ic/tree/master/rs/ethereum) integration smart contracts, are written in Rust. This language gives the developer full control over all aspects of the smart contract, starting from performance to memory management. +The only disadvantage of Rust is that it is lower-level compared to other languages and requires more expert programming skills to write safe and secure code. +[Learn more about using Rust](/docs/current/developer-docs/backend/rust). + +- **[Motoko](/docs/current/motoko/main/getting-started/motoko-introduction)**: Supported by [DFINITY](https://github.com/dfinity/motoko). Motoko is production-ready and was specifically designed to onboard developers onto ICP and leverage the actor-based programming model of ICP. It is a high-level language with a garbage collector and syntax that is similar to TypeScript. +Examples of production smart contracts that use Motoko include [ICDex](https://github.com/iclighthouse/ICDex) and [CycleOps](https://github.com/CycleOperators/cycles-manager).[Learn more about using Motoko](/docs/current/motoko/main/getting-started/motoko-introduction). + +- **TypeScript (beta)**: Supported by [Demergent Labs](https://github.com/demergent-labs) under the name Azle. Azle is in beta. Please check [the Azle website](https://demergent-labs.github.io/azle/) for more information. -- **Motoko**: supported by [DFINITY](https://github.com/dfinity/motoko). - Motoko is production ready and was specifically designed to onboard developers onto ICP and leverage the actor-based programming model of ICP. - It is a high-level language with a garbage collector and syntax that is similar to TypeScript. - Examples of production smart contracts that use Motoko: [Sonic DEX](https://github.com/sonicdex/sonic-v1), [ICDex](https://github.com/iclighthouse/ICDex), [Cycles manager](https://github.com/CycleOperators/cycles-manager). - [Learn more about using Motoko](/docs/current/motoko/main/getting-started/motoko-introduction). +- **Python (beta)**: Supported by [Demergent Labs](https://github.com/demergent-labs) under the name Kybra. Kybra is in beta. Please check [the Kybra website](https://demergent-labs.github.io/kybra/kybra.html) for more information. -- **TypeScript (beta)**: supported by [Demergent Labs](https://github.com/demergent-labs) under the name Azle. - Currently Azle is in beta, but already allows writing smart contracts that run on ICP. - Please check [the Azle website](https://demergent-labs.github.io/azle/) for updates on when it will be ready for production. +- **[C++](https://docs.icpp.world/)**: Supported through the [C++ CDK](https://docs.icpp.world/). -- **Python (beta)**: supported by [Demergent Labs](https://github.com/demergent-labs) under the name Kybra. - Currently Kybra is in beta, but already allows writing smart contracts that run on ICP. - Please check [the Kybra website](https://demergent-labs.github.io/kybra/kybra.html) for updates on when it will be ready for production. +### Choosing a web framework for the frontend -## Choosing the web framework for the frontend -The [HTTP Gateway protocol](/docs/current/references/http-gateway-protocol-spec) of ICP allows browsers to load the web assets such as JS, HTML, CSS from a canister via HTTP. -This means that web assets can be stored fully onchain and developers don’t need traditional centralized web hosting to serve the UI of their application. +The [HTTP Gateway protocol](/docs/current/references/http-gateway-protocol-spec) of ICP allows browsers to load web assets such as JS, HTML, and CSS from a canister via HTTP. +This means that web assets can be stored fully onchain and developers don’t need to use traditional centralized web hosting to serve the UI of their application. The typical development workflow of the frontend is: -1. The developer writes HTML, JS, CSS code. -1. The developer uses the default asset canister created by `dfx` or writes their own custom canister to store the web assets onchain. -1. Users open the application in the browser by navigating to the URL `https://.icp0.io` or a custom domain that the developer has registered for the canister. -1. The canister serves the web assets to the browser via its `http_request` endpoint that gets invoked for each HTTP request. -1. When the JS code runs in the browser, it can call the backend canister endpoints using the [ICP JavaScript agent](/docs/current/developer-docs/web-apps/browser-js/js-request-api) library, which is analogous to `web3.js` and `ethers.js` of Ethereum. +1. The developer writes frontend code such as HTML, JS, or CSS. +2. The developer configures their `dfx.json` file to include a frontend canister with type "assets". +3. The developer deploys the project. `dfx` will compile the frontend asset files into an asset canister. +4. Users open the application in the browser by navigating to the URL `https://.icp0.io` or a [custom domain](/docs/current/developer-docs/web-apps/custom-domains/using-custom-domains) if one has been registered for the canister. +5. The canister serves the web assets to the browser via its `http_request` endpoint that gets invoked for each HTTP request. +6. When the JS code runs in the browser, it can call the backend canister endpoints using the [ICP JavaScript agent](/docs/current/developer-docs/web-apps/browser-js/js-request-api) library, which is analogous to `web3.js` and `ethers.js` of Ethereum. Since ICP supports general HTML, JS, and CSS code, any web framework should be compatible with ICP. -SvelteKit, React, Vue have been used successfully in production. -`dfx v0.17.0` and newer can be used to automatically generate project templates using frameworks such as these. -[Learn more about using these frameworks](/docs/current/developer-docs/web-apps/browser-js/js-frameworks). +For example, SvelteKit, React, and Vue have been used successfully in production. `dfx v0.17.0` and newer can be used to generate project templates that include one of these frameworks. [Learn more](/docs/current/developer-docs/web-apps/browser-js/js-frameworks). + +#### Limitations +One feature of modern web frameworks that currently doesn’t work in a canister is server-side rendering (SSR). That’s because SSR requires running JS code in the canister. +In the future, this might become possible with Azle. Until then, if SSR is required, then one solution is to host the frontend outside of ICP while keeping the core logic in the backend canister. + +Having no frontend at all is also a valid option for smart contracts that don’t have a UI and are callable only by users or other smart contracts. + +### Creating a new project + +[Install the IC SDK](/docs/current/developer-docs/getting-started/install). + +Create a new project. When prompted, select your backend language and frontend framework of choice: + +```bash +dfx new hello +``` + +The [`dfx new`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-new) command creates a new project directory, template files, and a new `` Git repository for your project. + +:::tip +You can also obtain projects from other sources, such as [ICP Ninja](https://icp.ninja) or the [sample repository](https://github.com/dfinity/examples). +::: + +:::caution +When creating new projects with `dfx new`, only alphanumeric characters and underscores should be used. This is to assure that project names are valid within Motoko, JavaScript, and other contexts. +::: + +Navigate into your project directory: + +``` +cd hello +``` + +By default, the project structure will resemble the following: + + + + +```bash +hello/ +├── README.md # Default project documentation +├── dfx.json # Project configuration file +├── node_modules # Libraries for frontend development +├── package-lock.json +├── package.json +├── src # Source files directory +│ ├── hello_backend +│ │ └── main.mo +│ ├── hello_frontend +│ ├── assets +│ │ ├── logo.png +│ │ ├── main.css +│ │ └── sample-asset.txt +│ └── src +│ ├── index.html +│ └── index.js +└── webpack.config.js +``` + + + + +```bash +hello/ +├── README.md # Default project documentation +├── dfx.json # Project configuration file +├── node_modules # Libraries for frontend development +├── package-lock.json +├── package.json +├── src # Source files directory +│ ├── hello_backend +│ │ └── Cargo.toml +│ │ └── hello_backend.did +│ │ └── src +│ │ ├── lib.rs +│ ├── hello_frontend +│ ├── assets +│ │ ├── logo.png +│ │ ├── main.css +│ │ └── sample-asset.txt +│ └── src +│ ├── index.html +│ └── index.js +└── webpack.config.js +``` + + + +}> + +```bash + hello/ +├── README.md # Default project documentation +├── dfx.json # Project configuration file +├── node_modules +├── package-lock.json # Libraries for frontend development +├── package.json +├── src # Source files directory +│   ├── hello_backend +| | └── index.ts +│ ├── hello_frontend +│ ├── assets +│ │ ├── logo.png +│ │ ├── main.css +│ │ └── sample-asset.txt +│ └── src +│ ├── index.html +│ └── index.js +└── tsconfig.json +``` + + + + +}> + +``` +hello/ +├── README.md # Default project documentation +├── dfx.json # Project configuration file +├── node_modules # Libraries for frontend development +├── package-lock.json +├── package.json +├── src # Source files directory +│ ├── hello_backend +│ │ └── hello_backend.did +│ │ └── src +│ │ ├── main.py +│ ├── hello_frontend +│ ├── assets +│ │ ├── logo.png +│ │ ├── main.css +│ │ └── sample-asset.txt +│ └── src +│ ├── index.html +│ └── index.js +└── tsconfig.json +``` + + + + +In this directory, the following files and directories are notable: + +- `README.md`: The default README file to be used for documenting your project. +- `dfx.json`: The default configuration file used to set configurable options for your project. +- `src/`: The source directory that contains all of your dapp's source files. +- `hello_backend`: The source directory that contains your dapp's backend code files. +- `hello_frontend`: The source directory that contains your dapp's frontend code files. + +### Reviewing the default program code + +The backend canister's code will be located in the `src/hello_backend` subdirectory. + + + + +```motoko title="src/hello_backend/main.mo" + +actor { +public query func greet(name : Text) : async Text { + return "Hello, " # name # "!"; +}; +}; +``` + + + + +```rust title="src/hello_backend/src/lib.rs" +#[ic_cdk::query] +fn greet(name: String) -> String { + format!("Hello, {}!", name) +} +``` + + + +}> + +```typescript title="src/hello_backend/src/index.ts" +import { IDL, query, update } from 'azle'; + +export default class { + message: string = 'Hello world!'; + + @query([], IDL.Text) + getMessage(): string { + return this.message; + } + + @update([IDL.Text]) + setMessage(message: string): void { + this.message = message; + } +} +``` + + + +}> -One feature of modern web frameworks that currently doesn’t work in a canister is server-side rendering (SSR). -That’s because SSR requires running JS code in the canister. -In the future, this might become possible with Azle. -Until then, if SSR is required, then one solution is to host the frontend outside of ICP while keeping the core logic in the backend canister. +```python title="src/hello_backend/src/main.py" +from kybra import query -Having no frontend at all is also a valid option for smart contracts that don’t have a UI and are callable only by other smart contracts. +@query +def greet(name: str) -> str: + return f"Hello, {name}!" +``` + + + + + +## Framework-based workflow + +### Juno +[Juno](/docs/current/developer-docs/web-apps/frameworks/juno) is a community project that is tailored for Web2 developers. It takes care of hosting code and data in canisters such that developers can write Web3 applications using familiar Web2 concepts and patterns. For more details, please follow [the official Juno documentation](https://juno.build/docs/intro). + + +### Bitfinity EVM + +[Bitfinity EVM](/docs/current/developer-docs/backend/solidity/) is tailored for Solidity developers. It is a canister that runs an instance of the Ethereum virtual machine and allows developers to upload and execute smart contracts written in Solidity. For more details, please follow [the official Bitfinity documentation](https://docs.bitfinity.network/). ## Architecture considerations -A common question when developing an application is how and where to store the data. -In contrast to traditional platforms, ICP does not provide a database. -Instead, ICP automatically persists changes in the canister state including its Wasm and stable memories. -This means that developers have a lot of freedom in organizing and storing the data. -The recommended practice is to use already existing libraries, such as the Rust [stable-structures](https://github.com/dfinity/stable-structures) library, to store data in the stable memory. - -Another question that developers should ask is how to structure their application’s canisters. -It is possible to build an application consisting of multiple canisters that communicate with each other. -A common pitfall for new developers is designing the application for millions of users from the get go without understanding the underlying trade-offs of the system. +A common question when developing an application is how and where to store the data. In contrast to traditional platforms, ICP does not provide a database. +Instead, ICP automatically persists changes in the canister state, including its Wasm and stable memories. +This means that developers have a lot of freedom in organizing and storing the data. The recommended practice is to use already existing libraries, such as the Rust [stable-structures](https://github.com/dfinity/stable-structures) library, to store data in the stable memory. + +Another question that developers should ask is how to structure their application. It is possible to build an application consisting of multiple canisters that communicate with each other. +A common pitfall for new developers is designing the application for millions of users from the get-go without understanding the underlying trade-offs of the system. It is better to start with the simplest possible architecture and iteratively improve it with user growth. ### Single canister architecture + This is the simplest possible architecture and the recommended starting point for most developers. -A single canister can host the entire application stack including its web assets, core logic, and data. To write a single canister that hosts frontend assets and backend core logic, you will need to use a library for the assets storage API, such as the `ic-certified-assets` library for Rust canisters. A few examples of single canister projects include: +A single canister can host the entire application stack, including its web assets, core logic, and data. To write a single canister that hosts frontend assets and backend core logic, you will need to use a library for the asset storage API, such as the `ic-certified-assets` library for Rust canisters. A few examples of single canister projects include: - [HTTPS greet example](https://github.com/krpeacock/server/tree/main/examples/http_greet). @@ -102,39 +303,34 @@ A single canister can host the entire applica Even though this architecture is simple, it can scale to thousands of users and gigabytes of data. -:::info -Note that by default, `dfx` generates a dual canister project where one canister is the backend canister and the other canister is the frontend canister that stores web assets. This is because having a dedicated canister for the frontend allows any language to be used for the backend canister without needing to use a library for the assets storage API. -::: +### Canister per service architecture +Canisters can be thought of as microservices, where each canister is responsible for a specific service of the application, such as managing users, storing data, or processing data. +Note that all benefits and disadvantages of the traditional microservice architecture apply here as well. +The default project structure that [`dfx new`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-new) generates can be viewed as the simplest microservice architecture, with the frontend canister being responsible for serving web assets and the backend canister being responsible for the core logic and of the application. ### Canister per subnet architecture -ICP scales horizontally via subnets, so smart contracts can also scale by utilizing more subnets. + +ICP scales horizontally via subnets, so applications can also scale by utilizing more subnets. One way to achieve this is to have one or multiple canisters per subnet and then shard data over these canisters to distribute the load. This is the most scalable architecture and could, in theory, support millions of users and terabytes of data. -Since the application data and logic is distributed over multiple subnets, this requires expert knowledge of distributed programming. -In other words, the cost of development and maintenance is much higher compared to the single canister architecture. - -### Canister per service architecture -Canisters can be considered as microservices, where each canister is responsible for a specific service of the application such as managing users, storing data, or processing data. -Note that all benefits and disadvantages of the traditional microservice architecture apply here as well. -The default project structure that `dfx` generates can be viewed as the simplest microservice architecture with the frontend canister being responsible for serving web assets and the backend canister being responsible for the core logic and of the application. +Since the application data and logic are distributed over multiple subnets, this requires expert knowledge of distributed programming. +The cost of development and maintenance is much higher compared to the single-canister architecture. ### Canister per user architecture This architecture is based on the vision that Web3 users should have full control over their data. The idea is to create a canister per user and make the user the controller of their canister. The main canister of the application would then orchestrate user canisters to implement the application’s functionality. -Since users are controllers of their canisters, they can install their own code, decide how to participate in the application and determine what data to share. +Since users are controllers of their canisters, they can install their own code, decide how to participate in the application, and determine what data to share. These user benefits come at large development costs because the main canister needs to be programmed in such a way that it can handle all possible actions of potentially malicious user canisters. This is a new and unprecedented way of programming. -There hasn’t been a successful implementation of this vision yet. +**There hasn’t been a successful implementation of this vision yet.** A couple of projects that opted for this architecture, but only [NFID Vaults](https://nfidvaults.com) have given the ownership of canisters to the users. -A common misconception is that the canister-per-user architecture is the most scalable, actually canister-per-subnet is more performant because it can utilize multiple subnets without having the overhead of too many canisters. +A common misconception is that the canister-per-user architecture is the most scalable; actually, canister-per-subnet is more performant because it can utilize multiple subnets without having the overhead of too many canisters. ### Multi-canister architecture samples -- [Quickstart scaling - Rust](https://github.com/GLicDEV/quickstart_scaling/) - -- [Auto-scaling notes - Motoko](/docs/current/developer-docs/smart-contracts/write/auto-scaling-architecture): Note: This example uses heap storage. It is recommended to utilize stable memory when writing new canisters intended for production. Live preview: https://yflxa-iaaaa-aaaai-acfja-cai.ic0.app/ - - [Auto-scaling storage - Motoko](https://github.com/PrimLabs/ICSP) -- [Scaled storage - Rust](https://github.com/scroobius-pip/scaled_storage) +- [Quick start scaling - Rust](https://github.com/GLicDEV/quickstart_scaling/) + +- [Scaled storage - Rust](https://github.com/scroobius-pip/scaled_storage) \ No newline at end of file diff --git a/docs/developer-docs/smart-contracts/write/resources.mdx b/docs/developer-docs/smart-contracts/write/resources.mdx deleted file mode 100644 index c3772978cd..0000000000 --- a/docs/developer-docs/smart-contracts/write/resources.mdx +++ /dev/null @@ -1,76 +0,0 @@ ---- -keywords: [beginner, write, resources, concept, ide, cdk] ---- - -import { MarkdownChipRow } from "/src/components/Chip/MarkdownChipRow"; -import { Tooltip } from "/src/components/Tooltip/Tooltip"; - -# Resources - - - -## Overview - -After learning about the different [workflows](./overview.mdx) that can be followed when creating a canister, the [languages](./overview.mdx#choosing-the-programming-language-for-the-backend) that can be used, and the components that go into a canister, its time to write the canister code. - -To write canister code, several different tools can be used. - -## Canister development kits (CDKs) - -A canister development kit (CDK) provides programming languages with the necessary features and functionality to create, deploy, and manage canisters. CDKs are a popular choice for developers who prefer a standard development workflow. - -To develop using a CDK, see the documentation for the CDK of your choice below. - -DFINITY maintained CDKs include: - -- [Motoko](/docs/current/motoko/main/getting-started/motoko-introduction). - -- [Rust](/docs/current/developer-docs/backend/rust/) - -Community contributed and maintained CDKs include: - -- [Kybra: Python CDK - Beta](/docs/current/developer-docs/backend/python/). - -- [Azle: TypeScript CDK - Beta](/docs/current/developer-docs/backend/typescript/). - -- [C++ CDK](https://docs.icpp.world/). - -## Integrated development environments (IDEs) - -Another popular tool used in standard development workflows are integrated development environments (IDEs). IDEs are commonly used in conjunction with CDKs to create, edit, and manage code files. Any IDE can be used to create and edit canister code. Some examples with documentation include: - -- [Playground](/docs/current/developer-docs/developer-tools/ide/playground). - -- [Visual Studio Code](/docs/current/developer-docs/developer-tools/ide/vs-code). - -- [Gitpod](/docs/current/developer-docs/developer-tools/ide/gitpod). - - -## Frameworks - -As an alternative approach to the standard development workflow, a framework-based approach can be used. Frameworks offer additional services, such handling the canister deployment and data hosting for you. Currently supported frameworks include: - -- [Juno](/docs/current/developer-docs/web-apps/frameworks/juno). - -- [Bitfinity EVM](/docs/current/developer-docs/backend/solidity/). - -## Writing canister code tutorials - -Want to follow a tutorial for writing canister code? Check out these written and video tutorial resources: - -- [Hello, world getting started example](/docs/current/developer-docs/getting-started/hello-world). - -- [Developer ladder: 1.3: Deploying your first dapp - Documentation](/docs/current/tutorials/developer-journey/level-1/1.3-first-dapp). - -- [Developer ladder: 1.3: Deploying your first dapp - Video walkthrough](https://www.youtube.com/watch?v=oBUpJ4CqmN0). - -- [Developer ladder 2.1: Canister upgrades, storage, and persistence - Documentation](/docs/current/tutorials/developer-journey/level-2/2.1-storage-persistence). - -- [Developer ladder 2.1: Canister upgrades, storage, and persistence - Video walkthrough](https://www.youtube.com/watch?v=-aXjKSz_oXc). - -- [Sample projects](/docs/current/samples/overview). - -- [Zero to dApp education video series](https://youtube.com/playlist?list=PLuhDt1vhGcrcRcHvSKmxIgJAh1b3rcR7N&si=sIElj5bAkJeMqDoA). - -- [ICP YouTube channel](https://www.youtube.com/dfinity). - diff --git a/plugins/utils/redirects.js b/plugins/utils/redirects.js index 509112966a..37f4de70dd 100644 --- a/plugins/utils/redirects.js +++ b/plugins/utils/redirects.js @@ -427,7 +427,7 @@ const redirects = ` /docs/current/developer-docs/integrations/vetkeys/technology-overview /docs/current/references/vetkeys-overview /docs/current/developer-docs/developer-tools/cli-tools/networks-json /docs/current/developer-docs/developer-tools/cli-tools/advanced-dfx/networks-json /docs/current/developer-docs/production/system-canisters /docs/current/developer-docs/smart-contracts/advanced-features/system-canisters - /docs/current/developer-docs/backend/arguments /docs/current/developer-docs/smart-contracts/call/arguments + /docs/current/developer-docs/backend/arguments /docs/current/developer-docs/smart-contracts/call/overview /docs/current/developer-docs/frontend/index /docs/current/developer-docs/web-apps/application-frontends/overview /docs/current/developer-docs/integrations/https-outcalls/https-outcalls-get /docs/current/developer-docs/smart-contracts/advanced-features/https-outcalls/https-outcalls-get /docs/current/developer-docs/integrations/https-outcalls/https-outcalls-how-to-use /docs/current/developer-docs/smart-contracts/advanced-features/https-outcalls/https-outcalls-how-to-use @@ -627,6 +627,9 @@ const redirects = ` /docs/current/developer-docs/integrations/rosetta/staking-tutorial/ /docs/current/developer-docs/defi/rosetta/icp_rosetta/construction_api/staking/stake_icp /docs/current/developer-docs/getting-started/cycles/cycles-wallet /docs/current/developer-docs/defi/cycles/cycles-wallet /docs/current/developer-docs/getting-started/quickstart/juno-quickstart /docs/current/developer-docs/web-apps/frameworks/juno + /docs/current/developer-docs/smart-contracts/write/auto-scaling-architecture /docs/current/developer-docs/smart-contracts/write/overview + /docs/current/developer-docs/smart-contracts/write/resources /docs/current/developer-docs/smart-contracts/write/overview + /docs/current/developer-docs/smart-contracts/call/arguments /docs/current/developer-docs/smart-contracts/call/overview ` .split(/[\r\n]+/) .map((line) => line.trim().replace(/^#.*$/, "").trim()) diff --git a/roadmap/roadmap.json b/roadmap/roadmap.json index b1789043b3..a2341fa69a 100644 --- a/roadmap/roadmap.json +++ b/roadmap/roadmap.json @@ -3,12 +3,45 @@ "name": "Compute Platform", "description": "Blockchain Singularity — all computations of the world can run on ICP. ICP is a decentralized compute platform operating as an extension of the Internet, offering cost effective compute and storage services, with infrastructure provided by independent entities around the globe. The platform allows anyone to deploy canister smart contracts on the Internet and run them in a decentralized manner.", "milestones": [ + { + "name": "Increase scalability and compute capacity", + "milestone_id": "Flux", + "description": "ICP subnets can handle even more compute load, by better handling many distinct canisters and by using more CPU threads. When a subnet's load grows even beyond that, this milestone introduces canister migration, which enables better load balancing between subnets, ensuring all ICP subnets are well utilized.", + "eta": null, + "status": "in_progress", + "elements": [ + { + "title": "Asynchronous Checkpointing", + "overview": "Replicas currently persist the replicated state to disk every couple hundreds of rounds in a process called checkpointing. Currently some parts of checkpointing are done synchronously, which leads to drops in the execution rate in the checkpointing rounds and users have to wait longer for their responses during these rounds. The goal of this feature is to make more checkpointing steps run asynchronously in the background to make the IC's performance more consistent and predictable.", + "forum": "", + "proposal": "", + "docs": "", + "eta": "", + "status": "in_progress", + "is_community": false, + "in_beta": false, + "milestone_id": "Flux" + }, + { + "title": "Canister migration", + "overview": "Migrating canisters between subnets. Important for balancing subnet utilization and scaling the IC.", + "status": "future", + "forum": "", + "proposal": "", + "docs": "", + "eta": "", + "is_community": false, + "in_beta": false, + "milestone_id": "Flux" + } + ] + }, { "name": "Reduced End-to-end Latency", "milestone_id": "Tokamak", "description": "This milestone marks a significant reduction of user-perceived end-to-end latency for processing ingress messages. It is achieved by multiple concerted measures at different levels of the protocol stack and brings the user experience of Web3 closer to Web2.", "eta": "November 2024", - "status": "in_progress", + "status": "deployed", "elements": [ { "title": "QUIC-based transport and P2P layer for consensus", @@ -29,7 +62,7 @@ "proposal": "", "docs": "", "eta": "Q2 2024", - "status": "in_progress", + "status": "deployed", "is_community": false, "in_beta": false, "milestone_id": "Tokamak" @@ -53,7 +86,7 @@ "milestone_id": "Stellarator", "description": "Increased storage capacity of ICP subnets, storage per canister smart contract, and message throughput between subnets. Those improvements lead to each subnet being able to host larger workloads and better utilization of ICP’s hardware resources. The world's largest smart contracts can now grow even larger, far surpassing smart contracts on any other chain.", "eta": "November 2024", - "status": "in_progress", + "status": "deployed", "elements": [ { "title": "Increase Stable Memory Limit to 500GiB", @@ -99,7 +132,7 @@ "proposal": "", "docs": "", "eta": "", - "status": "in_progress", + "status": "deployed", "is_community": false, "in_beta": false, "milestone_id": "Stellarator" @@ -111,7 +144,7 @@ "proposal": "", "docs": "", "eta": "", - "status": "in_progress", + "status": "deployed", "is_community": false, "in_beta": false, "milestone_id": "Stellarator" @@ -147,6 +180,17 @@ "is_community": false, "in_beta": false }, + { + "title": "Query call metrics", + "overview": "Metrics about query calls executed for a canister during a time period. Requirement for a fair charging of cycles for query calls.", + "forum": "", + "proposal": "", + "docs": "", + "eta": "", + "status": "deployed", + "is_community": true, + "in_beta": false + }, { "title": "Increase Stable Memory Limit to 32GiB", "overview": "Increasing the stable memory limit of a canister from 8GiB to 32 GiB.", @@ -414,17 +458,6 @@ "milestone_id": "Future features", "eta": "none", "elements": [ - { - "title": "Asynchronous Checkpointing", - "overview": "Replicas currently persist the replicated state to disk every couple hundreds of rounds in a process called checkpointing. Currently some parts of checkpointing are done synchronously, which leads to drops in the execution rate in the checkpointing rounds and users have to wait longer for their responses during these rounds. The goal of this feature is to make more checkpointing steps run asynchronously in the background to make the IC's performance more consistent and predictable.", - "forum": "", - "proposal": "", - "docs": "", - "eta": "", - "status": "in_progress", - "is_community": false, - "in_beta": false - }, { "title": "Best-effort messaging", "overview": "Extend canister messaging by an additional message type that enables more scalable and responsive dApps.", @@ -448,17 +481,6 @@ "is_community": false, "in_beta": false }, - { - "title": "Query call metrics", - "overview": "Metrics about query calls executed for a canister during a time period. Requirement for a fair charging of cycles for query calls.", - "forum": "", - "proposal": "", - "docs": "", - "eta": "", - "status": "in_progress", - "is_community": true, - "in_beta": false - }, { "title": "Charging for query calls", "overview": "Charge a fair price in cycles for executed query calls. Currently query calls are free and only update calls are charged for.", @@ -621,17 +643,6 @@ "is_community": false, "in_beta": false }, - { - "title": "Canister migration", - "overview": "Migrating canisters between subnets. Important for balancing subnet utilization and scaling the IC.", - "status": "future", - "forum": "", - "proposal": "", - "docs": "", - "eta": "", - "is_community": false, - "in_beta": false - }, { "title": "Subnet deletion", "overview": "Enable subnets to be deleted via NNS proposals.", diff --git a/sidebars.js b/sidebars.js index d6c41d5499..57761cbc54 100644 --- a/sidebars.js +++ b/sidebars.js @@ -103,16 +103,9 @@ const sidebars = { label: "Create & install", items: [ { - type: "category", + type: "doc", label: "Write", - items: [ - { - label: "Overview", - type: "doc", - id: "developer-docs/smart-contracts/write/overview", - }, - "developer-docs/smart-contracts/write/resources", - ], + id: "developer-docs/smart-contracts/write/overview", }, { type: "doc", @@ -152,11 +145,6 @@ const sidebars = { label: "Overview", id: "developer-docs/smart-contracts/call/overview", }, - { - type: "doc", - label: "Passing in arguments", - id: "developer-docs/smart-contracts/call/arguments", - }, { type: "category", label: "Candid", @@ -222,7 +210,7 @@ const sidebars = { items: [ { type: "doc", - label: "Async code and inter-canister calls", + label: "Async code & inter-canister calls", id: "developer-docs/smart-contracts/advanced-features/async-code", }, { @@ -624,7 +612,7 @@ const sidebars = { }, { type: "doc", - label: "Identity and access management", + label: "Identity & access management", id: "developer-docs/security/security-best-practices/iam", }, { @@ -634,7 +622,7 @@ const sidebars = { }, { type: "doc", - label: "Data integrity and authenticity", + label: "Data integrity & authenticity", id: "developer-docs/security/security-best-practices/data-integrity-and-authenticity", }, { @@ -659,7 +647,7 @@ const sidebars = { }, { type: "doc", - label: "Observability and monitoring", + label: "Observability & monitoring", id: "developer-docs/security/security-best-practices/observability-and-monitoring", }, { @@ -975,7 +963,7 @@ const sidebars = { }, { type: "category", - label: "Staking and neuron management", + label: "Staking & neuron management", link: { type: "doc", id: "developer-docs/defi/rosetta/icp_rosetta/construction_api/staking/index", @@ -994,7 +982,7 @@ const sidebars = { }, { type: "category", - label: "Voting and following", + label: "Voting & following", link: { type: "doc", id: "developer-docs/defi/rosetta/icp_rosetta/construction_api/voting/index", From df5db706b117f5cac44ec9b10bccb1e86d4da4b1 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon Date: Tue, 19 Nov 2024 16:48:36 -0600 Subject: [PATCH 03/47] docs audit --- plugins/utils/redirects.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/plugins/utils/redirects.js b/plugins/utils/redirects.js index 37f4de70dd..84d6e4377f 100644 --- a/plugins/utils/redirects.js +++ b/plugins/utils/redirects.js @@ -62,12 +62,12 @@ const redirects = ` /docs/current/developer-docs/quickstart/local-quickstart /docs/current/developer-docs/getting-started/install/ /docs/current/developer-docs/setup/install/index.mdx /docs/current/developer-docs/getting-started/install/ - /docs/candid-guide /docs/current/developer-docs/smart-contracts/candid/ + /docs/candid-guide /docs/current/developer-docs/smart-contracts/candid/candid-concepts /docs/candid-guide/candid /docs/current/developer-docs/smart-contracts/candid/candid-concepts - /docs/candid-guide/candid-intro /docs/current/developer-docs/smart-contracts/candid/ + /docs/candid-guide/candid-intro /docs/current/developer-docs/smart-contracts/candid/candid-concepts /docs/candid-guide/candid-ref /docs/current/references/candid-ref /docs/candid-guide/candid-types /docs/current/references/candid-ref - /docs/current/developer-docs/build/candid/candid-intro /docs/current/developer-docs/smart-contracts/candid/ + /docs/current/developer-docs/build/candid/candid-intro /docs/current/developer-docs/smart-contracts/candid/candid-concepts /docs/current/developer-docs/build/candid/candid-howto /docs/current/developer-docs/smart-contracts/candid/candid-howto /docs/current/developer-docs/build/ /docs/current/developer-docs/smart-contracts/write/overview @@ -88,7 +88,7 @@ const redirects = ` /docs/current/developer-docs/build/agents/ /docs/current/developer-docs/developer-tools/off-chain/agents/overview /docs/current/developer-docs/build/agents/javascript/javascript-intro /docs/current/developer-docs/developer-tools/off-chain/agents/javascript-agent /docs/current/developer-docs/build/agents/javascript/* /docs/current/developer-docs/developer-tools/off-chain/agents/javascript-agent - /docs/current/developer-docs/build/languages/candid/* /docs/current/developer-docs/smart-contracts/candid/:splat + /docs/current/developer-docs/build/languages/candid/* /docs/current/developer-docs/smart-contracts/candid/candid-concepts /docs/current/developer-docs/build/cdks/motoko-dfinity/* /docs/current/motoko/main/:splat /docs/current/developer-docs/build/cdks/cdk-rs-dfinity/* /docs/current/developer-docs/backend/rust/:splat /docs/current/developer-docs/build/languages/motoko/* /docs/current/motoko/main/:splat @@ -578,7 +578,7 @@ const redirects = ` /docs/current/developer-docs/integrations/internet-identity /docs/current/developer-docs/identity/internet-identity/overview /bitcoin /bitcoin-integration /bootcamp /education-hub - /docs/candid-guide/candid-concepts.html /docs/current/developer-docs/smart-contracts/candid/ + /docs/candid-guide/candid-concepts.html /docs/current/developer-docs/smart-contracts/candid/candid-concepts /docs/current/blog/features/vetkey-primer /blog/features/vetkey-primer /docs/current/concepts/chain-key-technology/ /docs/current/developer-docs/multi-chain/overview /docs/current/concepts/concepts-intro.html /docs/current/developer-docs/getting-started/network-overview @@ -630,6 +630,7 @@ const redirects = ` /docs/current/developer-docs/smart-contracts/write/auto-scaling-architecture /docs/current/developer-docs/smart-contracts/write/overview /docs/current/developer-docs/smart-contracts/write/resources /docs/current/developer-docs/smart-contracts/write/overview /docs/current/developer-docs/smart-contracts/call/arguments /docs/current/developer-docs/smart-contracts/call/overview + /docs/current/developer-docs/smart-contracts/candid/ /docs/current/developer-docs/smart-contracts/candid/candid-concepts ` .split(/[\r\n]+/) .map((line) => line.trim().replace(/^#.*$/, "").trim()) From 254c022c272577d921d1aaec544866e35c2ce4a1 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:06:16 -0600 Subject: [PATCH 04/47] Update install.mdx --- docs/developer-docs/smart-contracts/install.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/developer-docs/smart-contracts/install.mdx b/docs/developer-docs/smart-contracts/install.mdx index d3d8736d79..4ef4b57fd3 100644 --- a/docs/developer-docs/smart-contracts/install.mdx +++ b/docs/developer-docs/smart-contracts/install.mdx @@ -35,8 +35,8 @@ When a canister's code is installed, the following components are created: ## Installing a gzip-compressed WebAssembly module -The size of programs that can be installed on ICP is currently limited to 2 MiB. -WebAssembly modules that are (slightly) larger than 2 MiB can still be installed on ICP by using gzip file compression before uploading. ICP will then decompress the file and install the contained WebAssembly module. +The size of programs that can be installed on ICP is currently limited to 10 MiB. +WebAssembly modules that are (slightly) larger than 10 MiB can still be installed on ICP by using gzip file compression before uploading. ICP will then decompress the file and install the contained WebAssembly module. The WebAssembly module is compressed using `gzip` and then uploaded by `dfx canister install`, you may need to add `--mode reinstall` or `--mode upgrade` when uploading the module to an existing canister. @@ -62,4 +62,4 @@ Common errors related to installation and Wasm modules include: - [Wasm module too many globals](/docs/current/references/execution-errors#wasm-module-too-many-globals). - [Wasm module function complexity too high](/docs/current/references/execution-errors#wasm-module-function-complexity-too-high). - [Wasm module function too large](/docs/current/references/execution-errors#wasm-module-function-too-large). -- [Wasm module code section too large](/docs/current/references/execution-errors#wasm-module-code-section-too-large). \ No newline at end of file +- [Wasm module code section too large](/docs/current/references/execution-errors#wasm-module-code-section-too-large). From a2d2c148d9b6f4a9420308816c4feb9b9bb3f6ea Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:08:25 -0600 Subject: [PATCH 05/47] Update install.mdx --- docs/developer-docs/smart-contracts/install.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/developer-docs/smart-contracts/install.mdx b/docs/developer-docs/smart-contracts/install.mdx index 4ef4b57fd3..1cbba60a99 100644 --- a/docs/developer-docs/smart-contracts/install.mdx +++ b/docs/developer-docs/smart-contracts/install.mdx @@ -13,6 +13,8 @@ import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; When a canister has been initially created, it is empty and does not contain code or state. It only contains information such as the settings, canister ID, cycles balance, and controllers. [Learn more about creating a canister](/docs/current/developer-docs/smart-contracts/create). +Canister code must be [compiled](/docs/current/developer-docs/smart-contracts/compile) into Wasm. Then, the Wasm module can be installed into the empty canister. + ## Installing canister code Code must be installed into a canister using the [`dfx canister install`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-install) command from the project's directory: From 445e0541d6b02c7923ec2c524cbc0e6ad32de5ae Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:21:05 -0600 Subject: [PATCH 06/47] Update overview.mdx --- .../smart-contracts/write/overview.mdx | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/developer-docs/smart-contracts/write/overview.mdx b/docs/developer-docs/smart-contracts/write/overview.mdx index 08a790ff49..0fdfb13c30 100644 --- a/docs/developer-docs/smart-contracts/write/overview.mdx +++ b/docs/developer-docs/smart-contracts/write/overview.mdx @@ -150,7 +150,7 @@ hello/ }> ```bash - hello/ +hello/ ├── README.md # Default project documentation ├── dfx.json # Project configuration file ├── node_modules @@ -221,7 +221,7 @@ The backend canister's code will be located in the `src/hello_backend` subdirect actor { public query func greet(name : Text) : async Text { return "Hello, " # name # "!"; -}; + }; }; ``` @@ -243,17 +243,17 @@ fn greet(name: String) -> String { import { IDL, query, update } from 'azle'; export default class { - message: string = 'Hello world!'; + message: string = 'Hello world!'; - @query([], IDL.Text) - getMessage(): string { - return this.message; - } + @query([], IDL.Text) + getMessage(): string { + return this.message; + } - @update([IDL.Text]) - setMessage(message: string): void { - this.message = message; - } + @update([IDL.Text]) + setMessage(message: string): void { + this.message = message; + } } ``` @@ -333,4 +333,4 @@ A common misconception is that the canister-per-user architecture is the most sc - [Quick start scaling - Rust](https://github.com/GLicDEV/quickstart_scaling/) -- [Scaled storage - Rust](https://github.com/scroobius-pip/scaled_storage) \ No newline at end of file +- [Scaled storage - Rust](https://github.com/scroobius-pip/scaled_storage) From 2630710754249399712dc61572c1385c7dada4fb Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:22:45 -0600 Subject: [PATCH 07/47] Update overview.mdx --- .../smart-contracts/write/overview.mdx | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/docs/developer-docs/smart-contracts/write/overview.mdx b/docs/developer-docs/smart-contracts/write/overview.mdx index 0fdfb13c30..3dc79f4533 100644 --- a/docs/developer-docs/smart-contracts/write/overview.mdx +++ b/docs/developer-docs/smart-contracts/write/overview.mdx @@ -240,21 +240,13 @@ fn greet(name: String) -> String { }> ```typescript title="src/hello_backend/src/index.ts" -import { IDL, query, update } from 'azle'; +import { Canister, query, text } from 'azle'; -export default class { - message: string = 'Hello world!'; - - @query([], IDL.Text) - getMessage(): string { - return this.message; - } - - @update([IDL.Text]) - setMessage(message: string): void { - this.message = message; - } -} +export default Canister({ + greet: query([text], text, (name) => { + return `Hello, ${name}!`; + }) +}) ``` From 83ae69b9f41a7c66e6e5fcd38a8d476c5e99186b Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:26:29 -0600 Subject: [PATCH 08/47] Update overview.mdx --- docs/developer-docs/smart-contracts/write/overview.mdx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/developer-docs/smart-contracts/write/overview.mdx b/docs/developer-docs/smart-contracts/write/overview.mdx index 3dc79f4533..94a4da3704 100644 --- a/docs/developer-docs/smart-contracts/write/overview.mdx +++ b/docs/developer-docs/smart-contracts/write/overview.mdx @@ -68,7 +68,13 @@ Having no frontend at all is also a valid option for smart contracts that don’ ### Creating a new project -[Install the IC SDK](/docs/current/developer-docs/getting-started/install). + + + + [Install the IC SDK](/docs/current/developer-docs/getting-started/install). + + + Create a new project. When prompted, select your backend language and frontend framework of choice: From 3d80f46db961d01a98352aa90a9f7d5c69d4c65d Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:34:48 -0600 Subject: [PATCH 09/47] Update create.mdx --- docs/developer-docs/smart-contracts/create.mdx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/developer-docs/smart-contracts/create.mdx b/docs/developer-docs/smart-contracts/create.mdx index f6abbef75a..120d854ac2 100644 --- a/docs/developer-docs/smart-contracts/create.mdx +++ b/docs/developer-docs/smart-contracts/create.mdx @@ -15,6 +15,14 @@ Canisters contain both code and state. Once you have written the code for a + + + [Install the IC SDK](/docs/current/developer-docs/getting-started/install). + + + + Canisters are created with [`dfx canister create`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-create). They are initially empty and do not contain program code. The code must be [compiled](/docs/current/developer-docs/smart-contracts/compile) into Wasm and [installed](/docs/current/developer-docs/smart-contracts/install) into the empty canister before it can be deployed. Create your canisters from within the project's directory: @@ -49,4 +57,4 @@ When a canister is created, the following steps happen: Common errors related to canister creation include: - [Canister not found](/docs/current/references/execution-errors#canister-not-found). -- [Maximum number of canisters reached](/docs/current/references/execution-errors#maximum-number-of-canisters-reached). \ No newline at end of file +- [Maximum number of canisters reached](/docs/current/references/execution-errors#maximum-number-of-canisters-reached). From b10dec0f68eeb808fa0a20b00ed699592d471a57 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:35:08 -0600 Subject: [PATCH 10/47] Update compile.mdx --- docs/developer-docs/smart-contracts/compile.mdx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/developer-docs/smart-contracts/compile.mdx b/docs/developer-docs/smart-contracts/compile.mdx index 4a9ccd7e1a..e47345bd05 100644 --- a/docs/developer-docs/smart-contracts/compile.mdx +++ b/docs/developer-docs/smart-contracts/compile.mdx @@ -25,6 +25,14 @@ Verify the location of your project's files and their file names. Be sure to edi ## Compiling your canister + + + + [Install the IC SDK](/docs/current/developer-docs/getting-started/install). + + + + To compile your canister's Wasm module, you can use the [`dfx build`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-build) command. Compile your canisters from within the project's directory: From 961a3991b984e4d2d7a8711cb856d16697119dda Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:37:24 -0600 Subject: [PATCH 11/47] Update create.mdx --- docs/developer-docs/smart-contracts/create.mdx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/developer-docs/smart-contracts/create.mdx b/docs/developer-docs/smart-contracts/create.mdx index 120d854ac2..af22361c1a 100644 --- a/docs/developer-docs/smart-contracts/create.mdx +++ b/docs/developer-docs/smart-contracts/create.mdx @@ -18,7 +18,10 @@ Canisters contain both code and state. Once you have written the code for a - [Install the IC SDK](/docs/current/developer-docs/getting-started/install). + +
+
+
From 9ca2d5b58c8a0b3f4c8d69ea4dd3b6d24df89aa6 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:38:25 -0600 Subject: [PATCH 12/47] Update compile.mdx --- docs/developer-docs/smart-contracts/compile.mdx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/developer-docs/smart-contracts/compile.mdx b/docs/developer-docs/smart-contracts/compile.mdx index e47345bd05..f54387eaab 100644 --- a/docs/developer-docs/smart-contracts/compile.mdx +++ b/docs/developer-docs/smart-contracts/compile.mdx @@ -28,7 +28,13 @@ Verify the location of your project's files and their file names. Be sure to edi - [Install the IC SDK](/docs/current/developer-docs/getting-started/install). + +
+
+
+
+
+
From b2dea3c158d937294b27304b2a2a088e16fd963f Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:39:42 -0600 Subject: [PATCH 13/47] Update install.mdx --- docs/developer-docs/smart-contracts/install.mdx | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/developer-docs/smart-contracts/install.mdx b/docs/developer-docs/smart-contracts/install.mdx index 1cbba60a99..fb4858911a 100644 --- a/docs/developer-docs/smart-contracts/install.mdx +++ b/docs/developer-docs/smart-contracts/install.mdx @@ -17,6 +17,23 @@ Canister code must be [compiled](/docs/current/developer-docs/smart-contracts/co ## Installing canister code + + + + +
+
+
+
+
+
+
+
+
+ + + + Code must be installed into a canister using the [`dfx canister install`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-install) command from the project's directory: - `dfx canister install hello_world`: Install canister code locally. The local replica must be running to create a canister locally. Start it with `dfx start --background`. From a259d52242caa71f78b61347e3ecba335d822275 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:40:48 -0600 Subject: [PATCH 14/47] Update overview.mdx --- .../smart-contracts/deploy/overview.mdx | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/docs/developer-docs/smart-contracts/deploy/overview.mdx b/docs/developer-docs/smart-contracts/deploy/overview.mdx index 9d4158d1e3..1b9d62921b 100644 --- a/docs/developer-docs/smart-contracts/deploy/overview.mdx +++ b/docs/developer-docs/smart-contracts/deploy/overview.mdx @@ -50,6 +50,25 @@ For most developers, the playground option can be used. For more advanced develo ## Deploying canisters + + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + Verify you are in your project's directory and the canisters you'd like to deploy are configured in the project's `dfx.json` file. - `dfx deploy hello_world`: Deploy a canister locally. The local replica must be running to deploy a canister locally. Start it with `dfx start --background`. @@ -117,4 +136,4 @@ Alternatively, init arguments can be set in `dfx.json` in `dfx` versions ``` If an init argument is set in `dfx.json` and set with the CLI command, the -argument set in the CLI command is used. \ No newline at end of file +argument set in the CLI command is used. From a87a7a315b4ade7b6d6d278236225a3350550a23 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:58:55 -0600 Subject: [PATCH 15/47] Update custom-testnets.mdx --- .../deploy/custom-testnets.mdx | 49 ++++++------------- 1 file changed, 16 insertions(+), 33 deletions(-) diff --git a/docs/developer-docs/smart-contracts/deploy/custom-testnets.mdx b/docs/developer-docs/smart-contracts/deploy/custom-testnets.mdx index 4460ad74d9..4ace735bb4 100644 --- a/docs/developer-docs/smart-contracts/deploy/custom-testnets.mdx +++ b/docs/developer-docs/smart-contracts/deploy/custom-testnets.mdx @@ -9,7 +9,7 @@ import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; ICP does not have a public testnet network that developers can use to deploy and test canisters because canisters deployed to the mainnet can be upgraded and changed. Plus, deployment costs are fairly low compared to other chains. -To provide a testnet-like environment, ICP has a [playground](https://m7sm4-2iaaa-aaaab-qabra-cai.ic0.app/) network that can be used for small-scale, temporary testing. Canisters deployed to the playground are restricted to certain parameters. These limitations are: +ICP offers a [playground](https://m7sm4-2iaaa-aaaab-qabra-cai.ic0.app/) network as a testnet-like environment for small-scale, temporary testing. Canisters deployed to the playground are restricted to certain parameters. These limitations are: - Cycle transfer instructions are silently ignored by the playground. - Canisters can use at most 1GiB of memory. @@ -34,40 +34,21 @@ To create a private testnet, you can create a custom instance of the playground. - Allowing some or all of the functions that the public playground does not allow, such as sending cycles to other canisters. -Using a custom playground can also help simplify development for teams, since the whole team can use a custom playground without needing to manage individual cycle balances. +Using a custom playground can also help simplify development for teams since the whole team can use a custom playground without needing to manage individual cycle balances. ### Creating a custom playground instance -- #### Step 1: Clone the playground repo with the command: +#### 1. [Install the Motoko playground locally](https://github.com/dfinity/motoko-playground/tree/main?tab=readme-ov-file#running-locally) following the instructions in the playground's repository.  -``` -git clone https://github.com/dfinity/motoko-playground -``` - -- #### Step 2: To create a separate pool, first use the current playground [pool and `wasm-utils` canisters as the starting point](https://github.com/dfinity/motoko-playground/tree/main/service). - -- #### Step 3: Then, edit the `pool/Main.mo` file to change your custom playground settings. - -Some settings you may want to change are: - -- Add [access control](https://github.com/dfinity/motoko-playground/blob/main/service/pool/Main.mo#L134) as desired, such as creating an `allowList` of principals that are permitted to use the custom playground. +#### 2. Edit the `service/pool/Main.mo` file to change the custom playground settings, such as: -- Configure the [canister's time to live](https://github.com/dfinity/motoko-playground/blob/main/service/pool/Types.mo#L22). +- Add access control as desired, such as creating an `allowList` of principals that are permitted to use the custom playground. -- Change the [Wasm transformation to fit your desired configuration](https://github.com/dfinity/motoko-playground/blob/main/service/pool/Main.mo#L150). In some cases, this may just be `wasm = args.wasm_module`, since if there is an `allowlist` in place, the principals allowed to install canisters can be trusted, such as: +- Configure the [canister's time to live](https://github.com/dfinity/motoko-playground/blob/main/service/pool/Types.mo#L27). -```motoko no-repl -let wasm = args.wasm_module; -``` - -- #### Step 4: Then deploy the pool canister, and if necessary, deploy the `wasm-utils` canister: - -``` -dfx deploy pool -dfx deploy wasm-utils -``` +- Change the [Wasm transformation to fit your desired configuration](https://github.com/dfinity/motoko-playground/blob/main/service/pool/Main.mo#L348). In some cases, this may just be `wasm = args.wasm_module`, since if there is an `allowlist` in place, the principals allowed to install canisters can be trusted. -- #### Step 5: Lastly, define the local playground network in your project's `dfx.json` file. +#### 3. Lastly, define the local playground network in your project's `dfx.json` file. In this definition, you will need to set the playground canister's ID (the `pool` canister ID) and define the amount of seconds before a canister is returned to the pool, as shown below: @@ -86,12 +67,14 @@ In this definition, you will need to set the playground canister's ID (the `pool If the value `` is set as `playground`, then the command `dfx deploy --playground` will deploy to your custom playground. Otherwise, the command has to use `--network `. :::info -This network definition can also go into the `networks.json` file, so it applies to every project, not just the current project since `dfx.json` files are project-specific. To see where the `networks.json` file is located, use the command `dfx info networks-json-path`. +This network definition can also go into the `networks.json` file, so it applies to every project. To see where the `networks.json` file is located, use the command `dfx info networks-json-path`. ::: +#### 4. To use the custom playground, [deploy it locally](https://github.com/dfinity/motoko-playground?tab=readme-ov-file#deploy-the-motoko-playground-to-your-local-replica-using-the-following-command). + ## Synthetic testnet -Another option to create a custom testnet is to use the `dfx` named network functionality. You can create a custom named network for each project, therefore creating a synthetic testnet that is segmented from the other locally tested projects in your environment. Local deployments mirror the mainnet as closely as possible, but local deployments only run a single subnet. Using a custom local network allows you to test integrations with services and estimate deployment costs. +Another option to create a custom testnet is to use the `dfx` named network functionality. You can create a custom named network for each project, therefore creating a synthetic testnet that is segmented from the other locally tested projects in your environment. Local deployments mirror the mainnet as closely as possible, but they only run a single subnet. Using a custom local network allows you to test integrations with services and estimate deployment costs. In a custom network, it is possible to run any `dfx` command that would otherwise take `--network ic` but using `--network myNetwork` instead. `myNetwork` can be replaced with any other name, except the three reserved ones: `ic`, `local`, and `playground`. @@ -107,7 +90,7 @@ dfx info networks-json-path This will return the file path where your system's `networks.json` file is located. Networks defined in this file can be used by any project in your local environment. -- #### Step 1: To define a custom network, you can edit the `networks.json` file to define a binding address such as `localhost` or any other domain name. +#### 1. Edit the `networks.json` file to define a binding address such as `localhost` or any other domain name. For example: @@ -141,19 +124,19 @@ To define multiple networks, use multiple definitions on different domain names: } ``` -- #### Step 2: Then, to deploy to one of these networks, use the `--network` flag with `dfx deploy`: +#### 2. Deploy to one of these networks with `dfx deploy`: ```bash dfx deploy --network myNetwork2 ``` -### Project specific networks +### Project-specific networks Alternatively, networks can also be defined in a project's `dfx.json` file. Only canisters defined in that `dfx.json` file can be deployed to that network. -To define a project-specific network, add a "networks" section to your `dfx.json` file, such as: +To define a project-specific network, add a "networks" section to your `dfx.json` file: ```json title="dfx.json" "networks": { From bcf076c9e4037d9125cef10afdbc67c19a88395b Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 14:29:29 -0600 Subject: [PATCH 16/47] Update overview.mdx --- docs/developer-docs/smart-contracts/write/overview.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/developer-docs/smart-contracts/write/overview.mdx b/docs/developer-docs/smart-contracts/write/overview.mdx index 94a4da3704..f6f7b58cac 100644 --- a/docs/developer-docs/smart-contracts/write/overview.mdx +++ b/docs/developer-docs/smart-contracts/write/overview.mdx @@ -71,7 +71,7 @@ Having no frontend at all is also a valid option for smart contracts that don’ - [Install the IC SDK](/docs/current/developer-docs/getting-started/install). + Install the IC SDK. From 2d5c19649896ad6b0e6f2536f8345c3ae2a0644c Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 14:29:49 -0600 Subject: [PATCH 17/47] Update create.mdx --- docs/developer-docs/smart-contracts/create.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/developer-docs/smart-contracts/create.mdx b/docs/developer-docs/smart-contracts/create.mdx index af22361c1a..b9bbb1c685 100644 --- a/docs/developer-docs/smart-contracts/create.mdx +++ b/docs/developer-docs/smart-contracts/create.mdx @@ -18,10 +18,10 @@ Canisters contain both code and state. Once you have written the code for a - + Install the IC SDK.
- + Write a smart contract.
From 014ac29b8ae8684948397146012ce575e68ad51f Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 14:30:11 -0600 Subject: [PATCH 18/47] Update compile.mdx --- docs/developer-docs/smart-contracts/compile.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/developer-docs/smart-contracts/compile.mdx b/docs/developer-docs/smart-contracts/compile.mdx index f54387eaab..5093d4b28f 100644 --- a/docs/developer-docs/smart-contracts/compile.mdx +++ b/docs/developer-docs/smart-contracts/compile.mdx @@ -28,13 +28,13 @@ Verify the location of your project's files and their file names. Be sure to edi - + Install the IC SDK.
- + Write a smart contract.
- + Create your canister.
From 68aac31a731d51add6a0e29830a70ffa773da6f7 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 14:30:35 -0600 Subject: [PATCH 19/47] Update install.mdx --- docs/developer-docs/smart-contracts/install.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/developer-docs/smart-contracts/install.mdx b/docs/developer-docs/smart-contracts/install.mdx index fb4858911a..f365d338e2 100644 --- a/docs/developer-docs/smart-contracts/install.mdx +++ b/docs/developer-docs/smart-contracts/install.mdx @@ -20,16 +20,16 @@ Canister code must be [compiled](/docs/current/developer-docs/smart-contracts/co - + Install the IC SDK.
- + Write a smart contract.
- + Create your canister.
- + Compile your canister code into Wasm.
From 79070c2d90b2e71476a0ada8b0c705364c9f09c8 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 14:31:13 -0600 Subject: [PATCH 20/47] Update overview.mdx --- .../developer-docs/smart-contracts/deploy/overview.mdx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/developer-docs/smart-contracts/deploy/overview.mdx b/docs/developer-docs/smart-contracts/deploy/overview.mdx index 1b9d62921b..713e79c4f0 100644 --- a/docs/developer-docs/smart-contracts/deploy/overview.mdx +++ b/docs/developer-docs/smart-contracts/deploy/overview.mdx @@ -53,19 +53,19 @@ For most developers, the playground option can be used. For more advanced develo - + Install the IC SDK.
- + Write a smart contract.
- + Create your canister.
- + Compile your canister code into Wasm.
- + Install the Wasm module into your canister.
From 9dba0356ee1b08d43e2f8ae0b0d36d4516febe2b Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 15:05:23 -0600 Subject: [PATCH 21/47] Update custom-testnets.mdx --- .../deploy/custom-testnets.mdx | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/docs/developer-docs/smart-contracts/deploy/custom-testnets.mdx b/docs/developer-docs/smart-contracts/deploy/custom-testnets.mdx index 4ace735bb4..1675bc55a9 100644 --- a/docs/developer-docs/smart-contracts/deploy/custom-testnets.mdx +++ b/docs/developer-docs/smart-contracts/deploy/custom-testnets.mdx @@ -96,12 +96,12 @@ For example: ```json title="networks.json" { -  "myNetwork1": { -    "bind": "localhost:4943", -    "replica": { -      "subnet_type": "application" -    } -  } + "myNetwork1": { + "bind": "localhost:4943", + "replica": { + "subnet_type": "application" + } + } } ``` @@ -109,18 +109,18 @@ To define multiple networks, use multiple definitions on different domain names: ```json title="networks.json" { -  "myNetwork1": { -    "bind": "localhost:4943", -    "replica": { -      "subnet_type": "application" -    } -  }, -  "myNetwork2": { -    "bind": "127.0.0.1:4943", -    "replica": { -      "subnet_type": "application" -    } -  } + "myNetwork1": { + "bind": "localhost:4943", + "replica": { + "subnet_type": "application" + } + }, + "myNetwork2": { + "bind": "127.0.0.1:4943", + "replica": { + "subnet_type": "application" + } + } } ``` From 94808b221c775481f7029a131defec54de1f90a4 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 15:17:25 -0600 Subject: [PATCH 22/47] Update overview.mdx --- .../smart-contracts/call/overview.mdx | 44 ++++--------------- 1 file changed, 9 insertions(+), 35 deletions(-) diff --git a/docs/developer-docs/smart-contracts/call/overview.mdx b/docs/developer-docs/smart-contracts/call/overview.mdx index 2f39295037..0b156c8986 100644 --- a/docs/developer-docs/smart-contracts/call/overview.mdx +++ b/docs/developer-docs/smart-contracts/call/overview.mdx @@ -85,18 +85,9 @@ fn inc() { }> ```typescript -import { IDL, update } from 'azle'; +Azle code coming soon. -export default class { - counter: bigint = 0n; - - @update([], IDL.Nat64) - inc(): bigint { - this.counter += 1n; - - return this.counter; - } -} +[Learn more about Azle.](https://demergent-labs.github.io/azle/) ``` @@ -104,19 +95,9 @@ export default class { }> ```python -from kybra import nat64, query, update +Kybra code coming soon. -counter: nat64 = 0 - -@query -def count() -> nat64: - return counter - -@update -def inc() -> nat64: - global counter - counter += 1 - return counter +[Learn more about Kybra.](https://demergent-labs.github.io/kybra/) ``` :::caution @@ -180,14 +161,9 @@ fn greet(name: String) -> String { }> ```typescript -import { IDL, query } from 'azle'; +Azle code coming soon. -export default class { - @query([], IDL.Text) - greet(name){ - return "Hello, {name}"; - } -} +[Learn more about Azle.](https://demergent-labs.github.io/azle/) ``` @@ -195,11 +171,9 @@ export default class { }> ```python -from kybra import query +Kybra code coming soon. -@query -def greet(name: str) -> str: - return f"Hello, {name}!" +[Learn more about Kybra.](https://demergent-labs.github.io/kybra/) ``` :::caution @@ -262,4 +236,4 @@ Common errors related to calling canisters include: - [Canister made a call with too large payload](/docs/current/references/execution-errors#canister-made-a-call-with-too-large-payload). -- [Canister made a call with too long timeout](/docs/current/references/execution-errors#canister-made-a-call-with-too-long-timeout). \ No newline at end of file +- [Canister made a call with too long timeout](/docs/current/references/execution-errors#canister-made-a-call-with-too-long-timeout). From ba3284c2fee9b2447369588a2ab77f830262aa7f Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 15:24:01 -0600 Subject: [PATCH 23/47] Update overview.mdx --- docs/developer-docs/smart-contracts/call/overview.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/developer-docs/smart-contracts/call/overview.mdx b/docs/developer-docs/smart-contracts/call/overview.mdx index 0b156c8986..d60fcd910a 100644 --- a/docs/developer-docs/smart-contracts/call/overview.mdx +++ b/docs/developer-docs/smart-contracts/call/overview.mdx @@ -74,7 +74,7 @@ thread_local! { static COUNTER: RefCell = RefCell::new(Nat::from(0_u32)); } -#[ic_cdk_macros::update] +#[ic_cdk::update] fn inc() { COUNTER.with(|counter| *counter.borrow_mut() += 1_u32); } From eeca321e7ae400b0c49ec841a7525f80e78f2e40 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon Date: Wed, 20 Nov 2024 15:50:50 -0600 Subject: [PATCH 24/47] Dev weekly update Nov 20 2024 --- blog/news-and-updates/2024-11-20-update.mdx | 48 ++++++++++++++++++ .../level-0/01-ic-overview.mdx | 8 +++ .../developer-journey/level-0/02-ic-terms.mdx | 8 +++ .../developer-journey/level-0/03-dev-env.mdx | 8 +++ .../level-0/04-intro-canisters.mdx | 8 +++ .../level-0/05-intro-languages.mdx | 16 ++++++ .../level-0/06-intro-dfx.mdx | 16 ++++++ .../level-1/1.1-live-demo.mdx | 8 +++ .../level-1/1.2-motoko-lvl1.mdx | 8 +++ .../level-1/1.3-first-dapp.mdx | 8 +++ .../level-1/1.4-using-cycles.mdx | 8 +++ .../level-1/1.5-deploying-canisters.mdx | 8 +++ .../level-1/1.6-managing-canisters.mdx | 8 +++ .../level-2/2.1-storage-persistence.mdx | 8 +++ .../level-2/2.2-advanced-canister-calls.mdx | 8 +++ .../level-2/2.3-third-party-canisters.mdx | 8 +++ .../level-2/2.4-intro-candid.mdx | 8 +++ .../level-2/2.5-unit-testing.mdx | 8 +++ .../level-2/2.6-motoko-lvl2.mdx | 8 +++ .../level-3/3.1-package-managers.mdx | 8 +++ .../level-3/3.2-https-outcalls.mdx | 8 +++ .../level-3/3.3-certified-data.mdx | 8 +++ .../level-3/3.4-intro-to-agents.mdx | 8 +++ .../level-3/3.5-identities-and-auth.mdx | 8 +++ .../level-3/3.6-motoko-lvl3.mdx | 8 +++ .../level-4/4.1-icp-ledger.mdx | 8 +++ .../level-4/4.2-icrc-tokens.mdx | 8 +++ .../level-4/4.3-ckbtc-and-bitcoin.mdx | 8 +++ .../level-4/4.4-nns-governance.mdx | 8 +++ .../level-4/4.5-using-quill.mdx | 8 +++ .../level-4/4.6-motoko-lvl4.mdx | 8 +++ .../level-5/5.1-vetKeys-tutorial.mdx | 8 +++ .../level-5/5.2-ICP-ETH-tutorial.mdx | 8 +++ .../level-5/5.3-token-swap-tutorial.mdx | 8 +++ .../level-5/5.4-NFT-tutorial.mdx | 8 +++ .../level-5/5.5-auction-tutorial.mdx | 8 +++ .../level-5/5.6-next-steps.mdx | 8 +++ .../hackathon-prep-course/10-resources.mdx | 10 +++- static/img/blog/dev-update-blog-nov-20.jpg | Bin 0 -> 344974 bytes submodules/sdk | 2 +- 40 files changed, 362 insertions(+), 2 deletions(-) create mode 100644 blog/news-and-updates/2024-11-20-update.mdx create mode 100644 static/img/blog/dev-update-blog-nov-20.jpg diff --git a/blog/news-and-updates/2024-11-20-update.mdx b/blog/news-and-updates/2024-11-20-update.mdx new file mode 100644 index 0000000000..07fdd9a081 --- /dev/null +++ b/blog/news-and-updates/2024-11-20-update.mdx @@ -0,0 +1,48 @@ +--- +title: Developer weekly update November 20, 2024 +description: This week, we have tooling updates for PocketIC, dfx, and Motoko. +tags: [Devs] +image: /img/blog/dev-update-blog-nov-20.jpg +--- + +# Developer weekly update November 20, 2024 + +![November 20 2024](../../static/img/blog/dev-update-blog-nov-20.jpg) + +Hello developers, and welcome to this week's developer weekly update! This week, we have tooling updates for PocketIC, dfx, and Motoko. Let's get started! + +## PocketIC 7.0.0 + +A new version of PocketIC has been released! This version is packed with new features, including: + +- Windows support for using the Rust library natively on Windows if Windows Subsystem for Linux (WSL) is installed. + +- New server endpoint: `/instances//_/topology` + +- New Rust library module for using the management canister: `pocket_ic::management_canister`. + +- Bitcoin integration support via the management canister. + +[Read more on the forum](https://forum.dfinity.org/t/pocketic-version-7-0-0-bitcoin-integration-and-windows-support/37344). + +## `dfx v0.24.2` + +The latest version of `dfx` has been released this past week. This release includes new features such as: + +- All commands will use the `DFX_NETWORK` environment variable by default if it is set. The `--network` flag will take precedence if provided. + +- `dfx generate` honors the `--network` flag. + +- Support for the canister log allowed viewer list. + +[Read the full release notes](https://github.com/dfinity/sdk/releases/tag/0.24.2). + +## Motoko v0.13.2 + +The most recent version of Motoko enables an actor's self identifier to be available in the top-level block, allowing functions to refer to self from the initializer. + +[Read the full release notes](https://github.com/dfinity/motoko/releases/tag/0.13.2). + +That'll wrap up this week. Tune back in next week for more developer updates! + +-DFINITY \ No newline at end of file diff --git a/docs/tutorials/developer-journey/level-0/01-ic-overview.mdx b/docs/tutorials/developer-journey/level-0/01-ic-overview.mdx index 25a5dc3d33..fbbe723675 100644 --- a/docs/tutorials/developer-journey/level-0/01-ic-overview.mdx +++ b/docs/tutorials/developer-journey/level-0/01-ic-overview.mdx @@ -130,7 +130,11 @@ II can be integrated with dapps on ICP and helps secure your online identity by Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -146,7 +150,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-0/02-ic-terms.mdx b/docs/tutorials/developer-journey/level-0/02-ic-terms.mdx index 567d03bc8a..71b35eb5fa 100644 --- a/docs/tutorials/developer-journey/level-0/02-ic-terms.mdx +++ b/docs/tutorials/developer-journey/level-0/02-ic-terms.mdx @@ -90,7 +90,11 @@ This page introduces some of the most commonly used terminology that developers Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -106,7 +110,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-0/03-dev-env.mdx b/docs/tutorials/developer-journey/level-0/03-dev-env.mdx index 9dd6929b47..bec73a3337 100644 --- a/docs/tutorials/developer-journey/level-0/03-dev-env.mdx +++ b/docs/tutorials/developer-journey/level-0/03-dev-env.mdx @@ -126,7 +126,11 @@ You'll use this working directory to contain the projects that you build through Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -142,7 +146,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-0/04-intro-canisters.mdx b/docs/tutorials/developer-journey/level-0/04-intro-canisters.mdx index 96cfc37437..2e6931b2b1 100644 --- a/docs/tutorials/developer-journey/level-0/04-intro-canisters.mdx +++ b/docs/tutorials/developer-journey/level-0/04-intro-canisters.mdx @@ -92,7 +92,11 @@ If a canister runs out of cycles, the canister is uninstalled. The code and stat Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -108,7 +112,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-0/05-intro-languages.mdx b/docs/tutorials/developer-journey/level-0/05-intro-languages.mdx index a32c27562a..d816b1fd2d 100644 --- a/docs/tutorials/developer-journey/level-0/05-intro-languages.mdx +++ b/docs/tutorials/developer-journey/level-0/05-intro-languages.mdx @@ -27,7 +27,11 @@ It is possible to use multiple languages within a single dapp's development. Dif Motoko is a language that has been specifically designed by DFINITY for canister development on ICP. It supports the unique features and workflows on ICP while providing a robust yet familiar programming environment. Motoko is easy to learn and use for application development, as it has a familiar set of rules and syntax for developers that have a background with application-layer languages, such as JavaScript, Ruby, Python, or Solidity. +<<<<<<< Updated upstream Since Motoko has been developed and designed for ICP, this developer ladder series will use Motoko for all tutorials and code walkthroughs. +======= +Since Motoko has been developed and designed for ICP, this developer journey series will use Motoko for all tutorials and code walkthroughs. +>>>>>>> Stashed changes ### Motoko attributes: @@ -55,7 +59,11 @@ Since Motoko has been developed and designed for ICP, this developer ladder seri Rust is supported on ICP through the IC SDK and the DFINITY Rust CDK. The IC SDK automatically comes with the Rust CDK as part of the software, but the Rust CDK can be installed separately if the IC SDK is not installed. Rust is a good choice for developers who are already familiar with Rust environments, come from a background in C or C++, or are developing large, complex projects that would benefit from having a mature library ecosystem. +<<<<<<< Updated upstream Many of the tutorials in this developer ladder series are available in a Rust version that displays identical functionality. These will be linked where applicable for those that want to follow along with Rust, though not all tutorials will have a Rust version. +======= +Many of the tutorials in this developer journey series are available in a Rust version that displays identical functionality. These will be linked where applicable for those that want to follow along with Rust, though not all tutorials will have a Rust version. +>>>>>>> Stashed changes ### Rust attributes: @@ -122,7 +130,11 @@ C++ is available through the [icpp-pro CDK](https://docs.icpp.world/) developed Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -138,7 +150,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-0/06-intro-dfx.mdx b/docs/tutorials/developer-journey/level-0/06-intro-dfx.mdx index 02fbc982b2..7c7f2ee091 100644 --- a/docs/tutorials/developer-journey/level-0/06-intro-dfx.mdx +++ b/docs/tutorials/developer-journey/level-0/06-intro-dfx.mdx @@ -131,7 +131,11 @@ Lastly, you can include extra features to be added to your project: When no flags are used, the `dfx new` command will create a new project using the default Motoko template. To create a project using the Rust project template, the flag `--type=rust` should be included in the command. +<<<<<<< Updated upstream In this tutorial series, you will be using Motoko for the development language, so you do not need to pass any additional flags with this command. +======= +In this developer journey, you will be using Motoko for our development language, so you do not need to pass any additional flags with this command. +>>>>>>> Stashed changes :::info When creating new projects with `dfx`, only alphanumeric characters and underscores should be used. This is to assure that project names are valid within Motoko, JavaScript, and other contexts. @@ -230,7 +234,11 @@ Let's explore these settings a bit further: ## Reviewing the default program code +<<<<<<< Updated upstream Now that you've explored the default project structure, let's take a look at the default program code located in the `main.mo` file. This is located in the `src/hello_world_backend` directory. The developer ladder will cover frontend development and the default files located in the frontend canister directory in a later tutorial. +======= +Now that you've explored the default project structure, let's take a look at the default program code located in the `main.mo` file. This is located in the `src/hello_world_backend` directory. The developer journey will cover frontend development and the default files located in the frontend canister directory in a later tutorial. +>>>>>>> Stashed changes New Motoko projects will always include a default, template `main.mo` file. To take a look at the file's default contents, open the `src/hello_world_backend/main.mo` file in a code or text editor. The code will resemble the following: @@ -255,7 +263,11 @@ You'll explore actor objects, classes, and asynchronous messages in a future tut Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -271,7 +283,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-1/1.1-live-demo.mdx b/docs/tutorials/developer-journey/level-1/1.1-live-demo.mdx index eb345e5e02..ee9aa7ea25 100644 --- a/docs/tutorials/developer-journey/level-1/1.1-live-demo.mdx +++ b/docs/tutorials/developer-journey/level-1/1.1-live-demo.mdx @@ -169,7 +169,11 @@ You can play around with this user interface by inputting different text, such a Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -185,7 +189,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-1/1.2-motoko-lvl1.mdx b/docs/tutorials/developer-journey/level-1/1.2-motoko-lvl1.mdx index fc9780c46a..7571ac780e 100644 --- a/docs/tutorials/developer-journey/level-1/1.2-motoko-lvl1.mdx +++ b/docs/tutorials/developer-journey/level-1/1.2-motoko-lvl1.mdx @@ -310,7 +310,11 @@ The output of this canister call will be: Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -326,7 +330,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - [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 the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-1/1.3-first-dapp.mdx b/docs/tutorials/developer-journey/level-1/1.3-first-dapp.mdx index 77b964ba66..49f34aa398 100644 --- a/docs/tutorials/developer-journey/level-1/1.3-first-dapp.mdx +++ b/docs/tutorials/developer-journey/level-1/1.3-first-dapp.mdx @@ -1017,7 +1017,11 @@ You can find the [finished code's repo](https://github.com/jessiemongeon1/dev-jo Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -1033,7 +1037,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-1/1.4-using-cycles.mdx b/docs/tutorials/developer-journey/level-1/1.4-using-cycles.mdx index 259eb4ce26..ee142e6893 100644 --- a/docs/tutorials/developer-journey/level-1/1.4-using-cycles.mdx +++ b/docs/tutorials/developer-journey/level-1/1.4-using-cycles.mdx @@ -235,7 +235,11 @@ To further explore cycle management please see the following articles: Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -251,7 +255,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-1/1.5-deploying-canisters.mdx b/docs/tutorials/developer-journey/level-1/1.5-deploying-canisters.mdx index c15abce0e1..b026549f93 100644 --- a/docs/tutorials/developer-journey/level-1/1.5-deploying-canisters.mdx +++ b/docs/tutorials/developer-journey/level-1/1.5-deploying-canisters.mdx @@ -137,7 +137,11 @@ To avoid burning through your cycles, once you are finished with this tutorial c Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -151,7 +155,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-1/1.6-managing-canisters.mdx b/docs/tutorials/developer-journey/level-1/1.6-managing-canisters.mdx index bc3408e826..ba53a575d9 100644 --- a/docs/tutorials/developer-journey/level-1/1.6-managing-canisters.mdx +++ b/docs/tutorials/developer-journey/level-1/1.6-managing-canisters.mdx @@ -411,7 +411,11 @@ dfx canister delete --network ic --all Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -427,7 +431,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-2/2.1-storage-persistence.mdx b/docs/tutorials/developer-journey/level-2/2.1-storage-persistence.mdx index 5bddc84813..a24d92183d 100644 --- a/docs/tutorials/developer-journey/level-2/2.1-storage-persistence.mdx +++ b/docs/tutorials/developer-journey/level-2/2.1-storage-persistence.mdx @@ -250,7 +250,11 @@ Now, navigate back to the Candid UI URL provided in the output and click the 'Ca Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -264,7 +268,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-2/2.2-advanced-canister-calls.mdx b/docs/tutorials/developer-journey/level-2/2.2-advanced-canister-calls.mdx index 681b27f80e..cb79fa4f88 100644 --- a/docs/tutorials/developer-journey/level-2/2.2-advanced-canister-calls.mdx +++ b/docs/tutorials/developer-journey/level-2/2.2-advanced-canister-calls.mdx @@ -268,7 +268,11 @@ The output should resemble the following: Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -282,7 +286,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-2/2.3-third-party-canisters.mdx b/docs/tutorials/developer-journey/level-2/2.3-third-party-canisters.mdx index 5571a88b1f..0b6c40c301 100644 --- a/docs/tutorials/developer-journey/level-2/2.3-third-party-canisters.mdx +++ b/docs/tutorials/developer-journey/level-2/2.3-third-party-canisters.mdx @@ -202,7 +202,11 @@ Now, you can interact with the II canister locally using the CLI or the Candid U Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -218,7 +222,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-2/2.4-intro-candid.mdx b/docs/tutorials/developer-journey/level-2/2.4-intro-candid.mdx index b23cfafcd1..084095c520 100644 --- a/docs/tutorials/developer-journey/level-2/2.4-intro-candid.mdx +++ b/docs/tutorials/developer-journey/level-2/2.4-intro-candid.mdx @@ -360,7 +360,11 @@ Lastly, call the 'get' method again to return our final counter value: Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -376,7 +380,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-2/2.5-unit-testing.mdx b/docs/tutorials/developer-journey/level-2/2.5-unit-testing.mdx index 7fe6c15ed1..f80e9320a2 100644 --- a/docs/tutorials/developer-journey/level-2/2.5-unit-testing.mdx +++ b/docs/tutorials/developer-journey/level-2/2.5-unit-testing.mdx @@ -459,7 +459,11 @@ To learn more about Github workflows, check out the [Github documentation](https Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -475,7 +479,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-2/2.6-motoko-lvl2.mdx b/docs/tutorials/developer-journey/level-2/2.6-motoko-lvl2.mdx index 9b49827bc8..6f895e2a30 100644 --- a/docs/tutorials/developer-journey/level-2/2.6-motoko-lvl2.mdx +++ b/docs/tutorials/developer-journey/level-2/2.6-motoko-lvl2.mdx @@ -433,7 +433,11 @@ This command makes a call to the `daemon` canister, directly to the public funct Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -449,7 +453,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-3/3.1-package-managers.mdx b/docs/tutorials/developer-journey/level-3/3.1-package-managers.mdx index 41531c0bed..a1e839c90c 100644 --- a/docs/tutorials/developer-journey/level-3/3.1-package-managers.mdx +++ b/docs/tutorials/developer-journey/level-3/3.1-package-managers.mdx @@ -218,7 +218,11 @@ actor characterCount { Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -234,7 +238,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-3/3.2-https-outcalls.mdx b/docs/tutorials/developer-journey/level-3/3.2-https-outcalls.mdx index cb90b2e3a5..e32422fe2f 100644 --- a/docs/tutorials/developer-journey/level-3/3.2-https-outcalls.mdx +++ b/docs/tutorials/developer-journey/level-3/3.2-https-outcalls.mdx @@ -829,7 +829,11 @@ You can play with a version of this canister running onchain: https://a4gq6-oaaa Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -845,7 +849,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-3/3.3-certified-data.mdx b/docs/tutorials/developer-journey/level-3/3.3-certified-data.mdx index d35c1af7cc..d8892fc981 100644 --- a/docs/tutorials/developer-journey/level-3/3.3-certified-data.mdx +++ b/docs/tutorials/developer-journey/level-3/3.3-certified-data.mdx @@ -362,7 +362,11 @@ Canisters using HTTP asset certification: Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The IC community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for IC developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for IC developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -378,7 +382,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-3/3.4-intro-to-agents.mdx b/docs/tutorials/developer-journey/level-3/3.4-intro-to-agents.mdx index e91192d4b4..8c3d348f06 100644 --- a/docs/tutorials/developer-journey/level-3/3.4-intro-to-agents.mdx +++ b/docs/tutorials/developer-journey/level-3/3.4-intro-to-agents.mdx @@ -256,7 +256,11 @@ That'll wrap things up for this module! You can read more about agents, such as Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -272,7 +276,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-3/3.5-identities-and-auth.mdx b/docs/tutorials/developer-journey/level-3/3.5-identities-and-auth.mdx index 23ac1ef07d..871a4c6cd3 100644 --- a/docs/tutorials/developer-journey/level-3/3.5-identities-and-auth.mdx +++ b/docs/tutorials/developer-journey/level-3/3.5-identities-and-auth.mdx @@ -368,7 +368,11 @@ You've now integrated Internet Identity into a local dapp! That'll wrap things u Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -384,7 +388,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-3/3.6-motoko-lvl3.mdx b/docs/tutorials/developer-journey/level-3/3.6-motoko-lvl3.mdx index b51f864754..460d368bd2 100644 --- a/docs/tutorials/developer-journey/level-3/3.6-motoko-lvl3.mdx +++ b/docs/tutorials/developer-journey/level-3/3.6-motoko-lvl3.mdx @@ -624,7 +624,11 @@ actor { Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -638,7 +642,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-4/4.1-icp-ledger.mdx b/docs/tutorials/developer-journey/level-4/4.1-icp-ledger.mdx index ee5e7fe3d3..845ce86063 100644 --- a/docs/tutorials/developer-journey/level-4/4.1-icp-ledger.mdx +++ b/docs/tutorials/developer-journey/level-4/4.1-icp-ledger.mdx @@ -330,7 +330,11 @@ After navigating to this URL in a web browser, the Candid UI will resemble the f Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -346,7 +350,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-4/4.2-icrc-tokens.mdx b/docs/tutorials/developer-journey/level-4/4.2-icrc-tokens.mdx index 8a14ae24a1..29c2c93733 100644 --- a/docs/tutorials/developer-journey/level-4/4.2-icrc-tokens.mdx +++ b/docs/tutorials/developer-journey/level-4/4.2-icrc-tokens.mdx @@ -493,7 +493,11 @@ This URL will display the following Candid UI: Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -509,7 +513,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-4/4.3-ckbtc-and-bitcoin.mdx b/docs/tutorials/developer-journey/level-4/4.3-ckbtc-and-bitcoin.mdx index 1fd59b1e7d..ec70a239d3 100644 --- a/docs/tutorials/developer-journey/level-4/4.3-ckbtc-and-bitcoin.mdx +++ b/docs/tutorials/developer-journey/level-4/4.3-ckbtc-and-bitcoin.mdx @@ -344,7 +344,11 @@ dfx canister call basic_bitcoin get_balance '("n2dcQfuwFw7M2UYzLfM6P7DwewsQaygb8 Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -360,7 +364,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-4/4.4-nns-governance.mdx b/docs/tutorials/developer-journey/level-4/4.4-nns-governance.mdx index c1263b3ff6..b98473ba39 100644 --- a/docs/tutorials/developer-journey/level-4/4.4-nns-governance.mdx +++ b/docs/tutorials/developer-journey/level-4/4.4-nns-governance.mdx @@ -287,7 +287,11 @@ For additional information the NNS dapp, proposals, and neuron staking, check ou Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -303,7 +307,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-4/4.5-using-quill.mdx b/docs/tutorials/developer-journey/level-4/4.5-using-quill.mdx index 811d8d9991..04d9544929 100644 --- a/docs/tutorials/developer-journey/level-4/4.5-using-quill.mdx +++ b/docs/tutorials/developer-journey/level-4/4.5-using-quill.mdx @@ -439,7 +439,11 @@ quill get-proposal-info 131693 Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -455,7 +459,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-4/4.6-motoko-lvl4.mdx b/docs/tutorials/developer-journey/level-4/4.6-motoko-lvl4.mdx index 9b1294ef31..54a8767dbd 100644 --- a/docs/tutorials/developer-journey/level-4/4.6-motoko-lvl4.mdx +++ b/docs/tutorials/developer-journey/level-4/4.6-motoko-lvl4.mdx @@ -623,7 +623,11 @@ actor { Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -639,7 +643,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-5/5.1-vetKeys-tutorial.mdx b/docs/tutorials/developer-journey/level-5/5.1-vetKeys-tutorial.mdx index 5dd0d4ce66..38080ab18a 100644 --- a/docs/tutorials/developer-journey/level-5/5.1-vetKeys-tutorial.mdx +++ b/docs/tutorials/developer-journey/level-5/5.1-vetKeys-tutorial.mdx @@ -789,7 +789,11 @@ Then, you can see the note has been saved in the 'Your notes' section: Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -805,7 +809,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-5/5.2-ICP-ETH-tutorial.mdx b/docs/tutorials/developer-journey/level-5/5.2-ICP-ETH-tutorial.mdx index 229fb5fc8d..1c8153cfc1 100644 --- a/docs/tutorials/developer-journey/level-5/5.2-ICP-ETH-tutorial.mdx +++ b/docs/tutorials/developer-journey/level-5/5.2-ICP-ETH-tutorial.mdx @@ -353,7 +353,11 @@ Some JSON-RPC APIs may only return a `NonceTooLow` status when successfully subm Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -369,7 +373,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-5/5.3-token-swap-tutorial.mdx b/docs/tutorials/developer-journey/level-5/5.3-token-swap-tutorial.mdx index 1a60cda632..bfd8d2532b 100644 --- a/docs/tutorials/developer-journey/level-5/5.3-token-swap-tutorial.mdx +++ b/docs/tutorials/developer-journey/level-5/5.3-token-swap-tutorial.mdx @@ -803,7 +803,11 @@ dfx canister call token_b icrc1_balance_of 'record { Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -819,7 +823,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-5/5.4-NFT-tutorial.mdx b/docs/tutorials/developer-journey/level-5/5.4-NFT-tutorial.mdx index 9eee5172d2..d3836698b4 100644 --- a/docs/tutorials/developer-journey/level-5/5.4-NFT-tutorial.mdx +++ b/docs/tutorials/developer-journey/level-5/5.4-NFT-tutorial.mdx @@ -568,7 +568,11 @@ This will return long output, such as: Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -584,7 +588,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-5/5.5-auction-tutorial.mdx b/docs/tutorials/developer-journey/level-5/5.5-auction-tutorial.mdx index 6ebe454f79..3c61c3027f 100644 --- a/docs/tutorials/developer-journey/level-5/5.5-auction-tutorial.mdx +++ b/docs/tutorials/developer-journey/level-5/5.5-auction-tutorial.mdx @@ -372,7 +372,11 @@ If you scroll down, you will see the option to place another bid, followed by th Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -388,7 +392,11 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-5/5.6-next-steps.mdx b/docs/tutorials/developer-journey/level-5/5.6-next-steps.mdx index 31e72e963a..64595d3421 100644 --- a/docs/tutorials/developer-journey/level-5/5.6-next-steps.mdx +++ b/docs/tutorials/developer-journey/level-5/5.6-next-steps.mdx @@ -88,7 +88,11 @@ Several of ICP's repositories are open-source, and external contributions are en ## Developer resources +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -104,6 +108,10 @@ Several of ICP's repositories are open-source, and external contributions are en - [Upcoming hackathons](https://dfinity.org/hackathons/). +<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/hackathon-prep-course/10-resources.mdx b/docs/tutorials/hackathon-prep-course/10-resources.mdx index cc700ad441..08a75ed304 100644 --- a/docs/tutorials/hackathon-prep-course/10-resources.mdx +++ b/docs/tutorials/hackathon-prep-course/10-resources.mdx @@ -20,7 +20,11 @@ To learn more about ICP, a specific feature or workflow, or get help from other - [Awesome Internet Computer repo.](/docs/current/home) +<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for IC developers to ask questions, get help, or chat with other developers asynchronously via text chat. +======= +- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for IC developers to ask questions, get help, or chat with other developers asynchronously via text chat. +>>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -36,4 +40,8 @@ To learn more about ICP, a specific feature or workflow, or get help from other - [Upcoming hackathons](https://dfinity.org/hackathons/). -- Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. \ No newline at end of file +<<<<<<< Updated upstream +- Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. +======= +- [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.internetcomputer.org) group. +>>>>>>> Stashed changes diff --git a/static/img/blog/dev-update-blog-nov-20.jpg b/static/img/blog/dev-update-blog-nov-20.jpg new file mode 100644 index 0000000000000000000000000000000000000000..306c13b9d2af6cc8bc014b8892ffc71575dbd571 GIT binary patch literal 344974 zcmbrm2~-nX5H=VD#g#m_r@jY71qD|G^~n}mMMY2vvZxQ0sJP(*vO_Rw5S8afSVa*M zR4|}I+#mu%M3jIiQG!MV2^cVhmNf~Grn{LN|5?t=`RAND^Xu`TS-SgH)vfxzuj)GX zWvq?#huap{EhN2hdZex3H)*Vyk)y|s2b>5E3y+A5ie|*0zi=_(ze|@>Qq$6} zXWY1%dFO6!-aTG^!Tl#spB0w~o|l%rs($^ZMpRq(wo%gb>9h39*Kh4VADz<08Qy{pkkd7g$f2v0@*+L(O%an&TV)t>#c4~2Z3{HOVv_C*7_rTt#n|F?ym`~S7F|8rsg*Sfxu zrt0ef=jl%;K_r6ufH+T+j*Fd4vLxmF-+xSEB_vLO^w81pwy?T)FkPCV>4N=ohX%Et z<7m@jzy7krY!%IRLwuLzHIAl>SC5f0LY^IcQBtBai~9L7kr{AblD7OuB`jKtpwi?t}6be#N-uHw>F#MW6tK7wjVObAkqk-9Z~ z>nmVB(l-m{sv4M;&vVHrA+&bsRAWNid&&S=L9n=rLK3B8jKqB#I|lI!{ANJh{{ z&o0iIHl8$#4eADhG2@wbQOlG;+wUN;K7_P!r~xUAwHom zz}D#=7?KIvQoDmt9+-26$?Wy6;=w7>WM53S7EltNoxJMS-$anb#>&B@W-TB!onzHG0hS zM~3D(T%A&64|Dn3k3ot;^1&HX$4FUB7ws4c@s6`pqA-Ws5#i_^4h)7o0zvAzd5mNs zq}2|YW*3Z+{OHyYf=bb*G?*4d2n+BN&b15>BRRnN?Bc}~HdxzUH^`_(BWG_Al~~u< zDZRiWNt57R!XIutt&u&vR!f{75cA|D}&=_fV#Wq4PM}spv9-#88Fz2gCt>Gf*XzUHjPlzJM6lxGx z8W2m!V|#f?C^|q`^mjQlty;7_SlOeE!L3`GfM;M$6Zn{V@jUg*A)T$o+AK&%oE|1czn){(Cw8>(}pqOjIPOb`vI9teGp4Bu2B}%?z(mte!7pMy~1#Tcpm;vO%_ z07-+DP48oGkS)9?lWIoj;)B4uH*L86IAlfZRC>N4c3aQ~VdK9plEL;&SWH8tU;Ggb zBJSLVY7;;d>Z8~tscKlx>#R~<^%oRx`yZKNWYKxYA!8<_3v9RR=iMvTi+Jrgw33^+ zbkCk_rdYzkl1Ii!*Vg|z2cwE<19BdXK|_@|bM(rf7OwttCWga2;CDOq`#7-MSTQ&w z9F1IKJv)4wpJ;2WINGLWRmANBCJpOfEt&tgjxhaRy7p6C{o{YH1^Hj(EfE%*-@59< zk6!c4H(b4RRoeFyp{7Z-!{x_j$8`Np2w(Z6et zx4O8acZ@XguFn?ko~{#Lu#M8wH_!gO*bV*ocXsvkUz=`-Z&#Th3A10#^Eoa&@>iNg zqet2)Zsr-`+m3p&Va$Ff6i)6or3}>EdibRI?dEKW{%EO5M5)PL|EH1Ld#a%Hvrea9 zjkJ{66uOUGwTF!tYVVZStvnfYvMbRy&0>6bpOsZp-|l-%7rIKMb=+MKtoG^MB#_F< zeDGIn$oBda&2lS&pHMM?QDd4O=`xeb!kKXC?Bl*1^{%)8c6onuYJr*Z7c6cHM%$WJ zS@^ZSfVs|Edkh%jPgdk(nXBKD_vVN?zjg_tk?wHD_LgM^B zSAwL=cp+2Dr|jP{b9~drO~0b1R@fO_tm=wZ|17?JsqjKUkLCLsdi-F3FYeKl748c% zH};>pf=p|?vi9Mg$SNDVU1$C0j`uzg`jQf-^gX1Sy36M6i@v$7AFs(xGrPaHUg!{0ynq$VenvsYgqN*;b=+gPykTh=1G z)Aa@&L}z3q9yw**lb{b<*P1wWUapEcz51BmA <3~BZa1@vz8Q`4&-0V_{DTjsU5 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

&@&u;mrSN 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 z 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%0AT7;XSLX;95}6zCp`gCblDvQ2K> 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 UH|p9wHH?|!VBDjD^zqGq0T^Ao(f|Me literal 0 HcmV?d00001 diff --git a/submodules/sdk b/submodules/sdk index 806f064bf3..0cf8c452a5 160000 --- a/submodules/sdk +++ b/submodules/sdk @@ -1 +1 @@ -Subproject commit 806f064bf3865f190d4d48486605125cf5618ff2 +Subproject commit 0cf8c452a5e51fddb73f9cf0a8d1878b122fcce8 From fce036b83f1d112e324777bd1abb5b98442ff177 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 16:00:54 -0600 Subject: [PATCH 25/47] Update compile.mdx --- docs/developer-docs/smart-contracts/compile.mdx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/developer-docs/smart-contracts/compile.mdx b/docs/developer-docs/smart-contracts/compile.mdx index 5093d4b28f..3449332eb1 100644 --- a/docs/developer-docs/smart-contracts/compile.mdx +++ b/docs/developer-docs/smart-contracts/compile.mdx @@ -2,8 +2,12 @@ keywords: [beginner, tutorial, compile] --- +import TabItem from "@theme/TabItem"; +import Tabs from "/src/components/Tabs"; +import { AdornedTabs } from "/src/components/Tabs/AdornedTabs"; +import { AdornedTab } from "/src/components/Tabs/AdornedTab"; +import { BetaChip } from "/src/components/Chip/BetaChip"; import { MarkdownChipRow } from "/src/components/Chip/MarkdownChipRow"; -import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; # Compile From 93e53f8a838e6fb65dca8a9add2bcf9808da4b1d Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 16:01:17 -0600 Subject: [PATCH 26/47] Update create.mdx --- docs/developer-docs/smart-contracts/create.mdx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/developer-docs/smart-contracts/create.mdx b/docs/developer-docs/smart-contracts/create.mdx index b9bbb1c685..7162251dba 100644 --- a/docs/developer-docs/smart-contracts/create.mdx +++ b/docs/developer-docs/smart-contracts/create.mdx @@ -2,6 +2,11 @@ keywords: [beginner, tutorial, create, create canister] --- +import TabItem from "@theme/TabItem"; +import Tabs from "/src/components/Tabs"; +import { AdornedTabs } from "/src/components/Tabs/AdornedTabs"; +import { AdornedTab } from "/src/components/Tabs/AdornedTab"; +import { BetaChip } from "/src/components/Chip/BetaChip"; import { MarkdownChipRow } from "/src/components/Chip/MarkdownChipRow"; import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; From c4c0990b8efa3fadc25f22b8fd375941b3a82c59 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 16:01:59 -0600 Subject: [PATCH 27/47] Update overview.mdx --- docs/developer-docs/smart-contracts/deploy/overview.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/developer-docs/smart-contracts/deploy/overview.mdx b/docs/developer-docs/smart-contracts/deploy/overview.mdx index 713e79c4f0..fd55c3c1d5 100644 --- a/docs/developer-docs/smart-contracts/deploy/overview.mdx +++ b/docs/developer-docs/smart-contracts/deploy/overview.mdx @@ -3,6 +3,7 @@ keywords: [beginner, tutorial, deploy, deploy canisters, local deployment, local --- import TabItem from "@theme/TabItem"; +import Tabs from "/src/components/Tabs"; import { AdornedTabs } from "/src/components/Tabs/AdornedTabs"; import { AdornedTab } from "/src/components/Tabs/AdornedTab"; import { BetaChip } from "/src/components/Chip/BetaChip"; From 14b2f9de648ef80341424ad59fa08142ebde9dd8 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 16:02:48 -0600 Subject: [PATCH 28/47] Update install.mdx --- docs/developer-docs/smart-contracts/install.mdx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/developer-docs/smart-contracts/install.mdx b/docs/developer-docs/smart-contracts/install.mdx index f365d338e2..7bbefc260f 100644 --- a/docs/developer-docs/smart-contracts/install.mdx +++ b/docs/developer-docs/smart-contracts/install.mdx @@ -2,6 +2,11 @@ keywords: [beginner, tutorial, install, install code, canister install] --- +import TabItem from "@theme/TabItem"; +import Tabs from "/src/components/Tabs"; +import { AdornedTabs } from "/src/components/Tabs/AdornedTabs"; +import { AdornedTab } from "/src/components/Tabs/AdornedTab"; +import { BetaChip } from "/src/components/Chip/BetaChip"; import { MarkdownChipRow } from "/src/components/Chip/MarkdownChipRow"; import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; From 1630afc0070e17d3368da46c73589589066baffb Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 16:03:11 -0600 Subject: [PATCH 29/47] Update overview.mdx --- docs/developer-docs/smart-contracts/write/overview.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/developer-docs/smart-contracts/write/overview.mdx b/docs/developer-docs/smart-contracts/write/overview.mdx index f6f7b58cac..7045795f5d 100644 --- a/docs/developer-docs/smart-contracts/write/overview.mdx +++ b/docs/developer-docs/smart-contracts/write/overview.mdx @@ -5,6 +5,7 @@ keywords: [beginner, write, resources, architecture, single canister, multi-cani import { MarkdownChipRow } from "/src/components/Chip/MarkdownChipRow"; import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; import TabItem from "@theme/TabItem"; +import Tabs from "/src/components/Tabs"; import { AdornedTabs } from "/src/components/Tabs/AdornedTabs"; import { AdornedTab } from "/src/components/Tabs/AdornedTab"; import { BetaChip } from "/src/components/Chip/BetaChip"; From d84abf7be890f20d91dd40af6845532165f94988 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Wed, 20 Nov 2024 16:58:30 -0600 Subject: [PATCH 30/47] Update candid-howto.mdx --- docs/developer-docs/smart-contracts/candid/candid-howto.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/developer-docs/smart-contracts/candid/candid-howto.mdx b/docs/developer-docs/smart-contracts/candid/candid-howto.mdx index 92c3a7aba1..3ee957c4db 100644 --- a/docs/developer-docs/smart-contracts/candid/candid-howto.mdx +++ b/docs/developer-docs/smart-contracts/candid/candid-howto.mdx @@ -9,7 +9,7 @@ import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; -# Overview +## Overview Candid provides a language-agnostic way to interact with canisters. @@ -150,4 +150,4 @@ There are community-supported Candid libraries for the following host languages: If you want to create a Candid implementation to support a language or tool for which an implementation is not currently available, you should consult the [Candid specification](https://github.com/dfinity/candid/blob/master/spec/Candid.md). -If you add a Candid implementation for a new language or tool, you can use the official [Candid test data](https://github.com/dfinity/candid/tree/master/test) to test and verify that your implementation is compatible with Candid, even in slightly more obscure corner cases. \ No newline at end of file +If you add a Candid implementation for a new language or tool, you can use the official [Candid test data](https://github.com/dfinity/candid/tree/master/test) to test and verify that your implementation is compatible with Candid, even in slightly more obscure corner cases. From 153cd1b136baa647e0ad1c7ee047d9d951952f15 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon Date: Wed, 20 Nov 2024 17:00:34 -0600 Subject: [PATCH 31/47] fix tabs --- docs/developer-docs/smart-contracts/compile.mdx | 2 +- docs/developer-docs/smart-contracts/create.mdx | 2 +- docs/developer-docs/smart-contracts/deploy/overview.mdx | 2 +- docs/developer-docs/smart-contracts/install.mdx | 2 +- docs/developer-docs/smart-contracts/write/overview.mdx | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/developer-docs/smart-contracts/compile.mdx b/docs/developer-docs/smart-contracts/compile.mdx index 3449332eb1..197f6a01ca 100644 --- a/docs/developer-docs/smart-contracts/compile.mdx +++ b/docs/developer-docs/smart-contracts/compile.mdx @@ -3,7 +3,7 @@ keywords: [beginner, tutorial, compile] --- import TabItem from "@theme/TabItem"; -import Tabs from "/src/components/Tabs"; +import Tabs from '@theme/Tabs'; import { AdornedTabs } from "/src/components/Tabs/AdornedTabs"; import { AdornedTab } from "/src/components/Tabs/AdornedTab"; import { BetaChip } from "/src/components/Chip/BetaChip"; diff --git a/docs/developer-docs/smart-contracts/create.mdx b/docs/developer-docs/smart-contracts/create.mdx index 7162251dba..74693bf332 100644 --- a/docs/developer-docs/smart-contracts/create.mdx +++ b/docs/developer-docs/smart-contracts/create.mdx @@ -3,7 +3,7 @@ keywords: [beginner, tutorial, create, create canister] --- import TabItem from "@theme/TabItem"; -import Tabs from "/src/components/Tabs"; +import Tabs from '@theme/Tabs'; import { AdornedTabs } from "/src/components/Tabs/AdornedTabs"; import { AdornedTab } from "/src/components/Tabs/AdornedTab"; import { BetaChip } from "/src/components/Chip/BetaChip"; diff --git a/docs/developer-docs/smart-contracts/deploy/overview.mdx b/docs/developer-docs/smart-contracts/deploy/overview.mdx index fd55c3c1d5..29f20c1137 100644 --- a/docs/developer-docs/smart-contracts/deploy/overview.mdx +++ b/docs/developer-docs/smart-contracts/deploy/overview.mdx @@ -3,7 +3,7 @@ keywords: [beginner, tutorial, deploy, deploy canisters, local deployment, local --- import TabItem from "@theme/TabItem"; -import Tabs from "/src/components/Tabs"; +import Tabs from '@theme/Tabs'; import { AdornedTabs } from "/src/components/Tabs/AdornedTabs"; import { AdornedTab } from "/src/components/Tabs/AdornedTab"; import { BetaChip } from "/src/components/Chip/BetaChip"; diff --git a/docs/developer-docs/smart-contracts/install.mdx b/docs/developer-docs/smart-contracts/install.mdx index 7bbefc260f..8aea9ca674 100644 --- a/docs/developer-docs/smart-contracts/install.mdx +++ b/docs/developer-docs/smart-contracts/install.mdx @@ -3,7 +3,7 @@ keywords: [beginner, tutorial, install, install code, canister install] --- import TabItem from "@theme/TabItem"; -import Tabs from "/src/components/Tabs"; +import Tabs from '@theme/Tabs'; import { AdornedTabs } from "/src/components/Tabs/AdornedTabs"; import { AdornedTab } from "/src/components/Tabs/AdornedTab"; import { BetaChip } from "/src/components/Chip/BetaChip"; diff --git a/docs/developer-docs/smart-contracts/write/overview.mdx b/docs/developer-docs/smart-contracts/write/overview.mdx index 7045795f5d..bf109609d6 100644 --- a/docs/developer-docs/smart-contracts/write/overview.mdx +++ b/docs/developer-docs/smart-contracts/write/overview.mdx @@ -5,7 +5,7 @@ keywords: [beginner, write, resources, architecture, single canister, multi-cani import { MarkdownChipRow } from "/src/components/Chip/MarkdownChipRow"; import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; import TabItem from "@theme/TabItem"; -import Tabs from "/src/components/Tabs"; +import Tabs from '@theme/Tabs'; import { AdornedTabs } from "/src/components/Tabs/AdornedTabs"; import { AdornedTab } from "/src/components/Tabs/AdornedTab"; import { BetaChip } from "/src/components/Chip/BetaChip"; From 9793aa079a80aa3f24561e763156719fa9f632be Mon Sep 17 00:00:00 2001 From: Jessie Mongeon Date: Wed, 20 Nov 2024 17:10:34 -0600 Subject: [PATCH 32/47] fix conflicts --- .../level-0/01-ic-overview.mdx | 8 -------- .../developer-journey/level-0/02-ic-terms.mdx | 8 -------- .../developer-journey/level-0/03-dev-env.mdx | 8 -------- .../level-0/04-intro-canisters.mdx | 8 -------- .../level-0/05-intro-languages.mdx | 20 ++++--------------- .../level-0/06-intro-dfx.mdx | 12 ++--------- .../level-1/1.1-live-demo.mdx | 8 -------- .../level-1/1.2-motoko-lvl1.mdx | 8 -------- .../level-1/1.3-first-dapp.mdx | 8 -------- .../level-1/1.4-using-cycles.mdx | 8 -------- .../level-1/1.5-deploying-canisters.mdx | 8 -------- .../level-1/1.6-managing-canisters.mdx | 8 -------- .../level-2/2.1-storage-persistence.mdx | 12 ++++------- .../level-2/2.2-advanced-canister-calls.mdx | 12 ++++------- .../level-2/2.3-third-party-canisters.mdx | 12 ++++------- .../level-2/2.4-intro-candid.mdx | 12 ++++------- .../level-2/2.5-unit-testing.mdx | 12 ++++------- .../level-2/2.6-motoko-lvl2.mdx | 12 ++++------- .../level-3/3.1-package-managers.mdx | 12 ++++------- .../level-3/3.2-https-outcalls.mdx | 12 ++++------- .../level-3/3.3-certified-data.mdx | 8 +++----- .../level-3/3.4-intro-to-agents.mdx | 12 ++++------- .../level-3/3.5-identities-and-auth.mdx | 12 ++++------- .../level-3/3.6-motoko-lvl3.mdx | 12 ++++------- .../level-4/4.1-icp-ledger.mdx | 12 ++++------- .../level-4/4.2-icrc-tokens.mdx | 12 ++++------- .../level-4/4.3-ckbtc-and-bitcoin.mdx | 12 ++++------- .../level-4/4.4-nns-governance.mdx | 12 ++++------- .../level-4/4.5-using-quill.mdx | 12 ++++------- .../level-4/4.6-motoko-lvl4.mdx | 12 ++++------- .../level-5/5.1-vetKeys-tutorial.mdx | 12 ++++------- .../level-5/5.2-ICP-ETH-tutorial.mdx | 12 ++++------- .../level-5/5.3-token-swap-tutorial.mdx | 12 ++++------- .../level-5/5.4-NFT-tutorial.mdx | 12 ++++------- .../level-5/5.5-auction-tutorial.mdx | 12 ++++------- .../level-5/5.6-next-steps.mdx | 12 ++++------- .../hackathon-prep-course/10-resources.mdx | 8 +++----- 37 files changed, 104 insertions(+), 300 deletions(-) diff --git a/docs/tutorials/developer-journey/level-0/01-ic-overview.mdx b/docs/tutorials/developer-journey/level-0/01-ic-overview.mdx index fbbe723675..25a5dc3d33 100644 --- a/docs/tutorials/developer-journey/level-0/01-ic-overview.mdx +++ b/docs/tutorials/developer-journey/level-0/01-ic-overview.mdx @@ -130,11 +130,7 @@ II can be integrated with dapps on ICP and helps secure your online identity by Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -150,11 +146,7 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-0/02-ic-terms.mdx b/docs/tutorials/developer-journey/level-0/02-ic-terms.mdx index 71b35eb5fa..567d03bc8a 100644 --- a/docs/tutorials/developer-journey/level-0/02-ic-terms.mdx +++ b/docs/tutorials/developer-journey/level-0/02-ic-terms.mdx @@ -90,11 +90,7 @@ This page introduces some of the most commonly used terminology that developers Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -110,11 +106,7 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-0/03-dev-env.mdx b/docs/tutorials/developer-journey/level-0/03-dev-env.mdx index 0ec3194ad4..1a89e34e73 100644 --- a/docs/tutorials/developer-journey/level-0/03-dev-env.mdx +++ b/docs/tutorials/developer-journey/level-0/03-dev-env.mdx @@ -126,11 +126,7 @@ You'll use this working directory to contain the projects that you build through Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -146,11 +142,7 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-0/04-intro-canisters.mdx b/docs/tutorials/developer-journey/level-0/04-intro-canisters.mdx index 2e6931b2b1..96cfc37437 100644 --- a/docs/tutorials/developer-journey/level-0/04-intro-canisters.mdx +++ b/docs/tutorials/developer-journey/level-0/04-intro-canisters.mdx @@ -92,11 +92,7 @@ If a canister runs out of cycles, the canister is uninstalled. The code and stat Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -112,11 +108,7 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-0/05-intro-languages.mdx b/docs/tutorials/developer-journey/level-0/05-intro-languages.mdx index d816b1fd2d..174e262017 100644 --- a/docs/tutorials/developer-journey/level-0/05-intro-languages.mdx +++ b/docs/tutorials/developer-journey/level-0/05-intro-languages.mdx @@ -27,11 +27,7 @@ It is possible to use multiple languages within a single dapp's development. Dif Motoko is a language that has been specifically designed by DFINITY for canister development on ICP. It supports the unique features and workflows on ICP while providing a robust yet familiar programming environment. Motoko is easy to learn and use for application development, as it has a familiar set of rules and syntax for developers that have a background with application-layer languages, such as JavaScript, Ruby, Python, or Solidity. -<<<<<<< Updated upstream Since Motoko has been developed and designed for ICP, this developer ladder series will use Motoko for all tutorials and code walkthroughs. -======= -Since Motoko has been developed and designed for ICP, this developer journey series will use Motoko for all tutorials and code walkthroughs. ->>>>>>> Stashed changes ### Motoko attributes: @@ -59,11 +55,7 @@ Since Motoko has been developed and designed for ICP, this developer journey ser Rust is supported on ICP through the IC SDK and the DFINITY Rust CDK. The IC SDK automatically comes with the Rust CDK as part of the software, but the Rust CDK can be installed separately if the IC SDK is not installed. Rust is a good choice for developers who are already familiar with Rust environments, come from a background in C or C++, or are developing large, complex projects that would benefit from having a mature library ecosystem. -<<<<<<< Updated upstream Many of the tutorials in this developer ladder series are available in a Rust version that displays identical functionality. These will be linked where applicable for those that want to follow along with Rust, though not all tutorials will have a Rust version. -======= -Many of the tutorials in this developer journey series are available in a Rust version that displays identical functionality. These will be linked where applicable for those that want to follow along with Rust, though not all tutorials will have a Rust version. ->>>>>>> Stashed changes ### Rust attributes: @@ -130,11 +122,9 @@ C++ is available through the [icpp-pro CDK](https://docs.icpp.world/) developed Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -150,11 +140,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-0/06-intro-dfx.mdx b/docs/tutorials/developer-journey/level-0/06-intro-dfx.mdx index ca51674628..4daeda815a 100644 --- a/docs/tutorials/developer-journey/level-0/06-intro-dfx.mdx +++ b/docs/tutorials/developer-journey/level-0/06-intro-dfx.mdx @@ -131,7 +131,7 @@ Lastly, you can include extra features to be added to your project: When no flags are used, the `dfx new` command will create a new project using the default Motoko template. To create a project using the Rust project template, the flag `--type=rust` should be included in the command. -<<<<<<< Updated upstream + In this tutorial series, you will be using Motoko for the development language, so you do not need to pass any additional flags with this command. ======= In this developer journey, you will be using Motoko for our development language, so you do not need to pass any additional flags with this command. @@ -234,7 +234,7 @@ Let's explore these settings a bit further: ## Reviewing the default program code -<<<<<<< Updated upstream + Now that you've explored the default project structure, let's take a look at the default program code located in the `main.mo` file. This is located in the `src/hello_world_backend` directory. The developer ladder will cover frontend development and the default files located in the frontend canister directory in a later tutorial. ======= Now that you've explored the default project structure, let's take a look at the default program code located in the `main.mo` file. This is located in the `src/hello_world_backend` directory. The developer journey will cover frontend development and the default files located in the frontend canister directory in a later tutorial. @@ -263,11 +263,7 @@ You'll explore actor objects, classes, and asynchronous messages in a future tut Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -283,11 +279,7 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-1/1.1-live-demo.mdx b/docs/tutorials/developer-journey/level-1/1.1-live-demo.mdx index 33bd72d131..19ade8ec07 100644 --- a/docs/tutorials/developer-journey/level-1/1.1-live-demo.mdx +++ b/docs/tutorials/developer-journey/level-1/1.1-live-demo.mdx @@ -169,11 +169,7 @@ You can play around with this user interface by inputting different text, such a Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -189,11 +185,7 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-1/1.2-motoko-lvl1.mdx b/docs/tutorials/developer-journey/level-1/1.2-motoko-lvl1.mdx index 7571ac780e..fc9780c46a 100644 --- a/docs/tutorials/developer-journey/level-1/1.2-motoko-lvl1.mdx +++ b/docs/tutorials/developer-journey/level-1/1.2-motoko-lvl1.mdx @@ -310,11 +310,7 @@ The output of this canister call will be: Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -330,11 +326,7 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream - [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 the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-1/1.3-first-dapp.mdx b/docs/tutorials/developer-journey/level-1/1.3-first-dapp.mdx index e74d6a4e53..bf3df76b22 100644 --- a/docs/tutorials/developer-journey/level-1/1.3-first-dapp.mdx +++ b/docs/tutorials/developer-journey/level-1/1.3-first-dapp.mdx @@ -1017,11 +1017,7 @@ You can find the [finished code's repo](https://github.com/jessiemongeon1/dev-jo Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -1037,11 +1033,7 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-1/1.4-using-cycles.mdx b/docs/tutorials/developer-journey/level-1/1.4-using-cycles.mdx index ee142e6893..259eb4ce26 100644 --- a/docs/tutorials/developer-journey/level-1/1.4-using-cycles.mdx +++ b/docs/tutorials/developer-journey/level-1/1.4-using-cycles.mdx @@ -235,11 +235,7 @@ To further explore cycle management please see the following articles: Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -255,11 +251,7 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-1/1.5-deploying-canisters.mdx b/docs/tutorials/developer-journey/level-1/1.5-deploying-canisters.mdx index b026549f93..c15abce0e1 100644 --- a/docs/tutorials/developer-journey/level-1/1.5-deploying-canisters.mdx +++ b/docs/tutorials/developer-journey/level-1/1.5-deploying-canisters.mdx @@ -137,11 +137,7 @@ To avoid burning through your cycles, once you are finished with this tutorial c Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -155,11 +151,7 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-1/1.6-managing-canisters.mdx b/docs/tutorials/developer-journey/level-1/1.6-managing-canisters.mdx index ba53a575d9..bc3408e826 100644 --- a/docs/tutorials/developer-journey/level-1/1.6-managing-canisters.mdx +++ b/docs/tutorials/developer-journey/level-1/1.6-managing-canisters.mdx @@ -411,11 +411,7 @@ dfx canister delete --network ic --all Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -431,11 +427,7 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-2/2.1-storage-persistence.mdx b/docs/tutorials/developer-journey/level-2/2.1-storage-persistence.mdx index 320aae514a..ae119c469f 100644 --- a/docs/tutorials/developer-journey/level-2/2.1-storage-persistence.mdx +++ b/docs/tutorials/developer-journey/level-2/2.1-storage-persistence.mdx @@ -250,11 +250,9 @@ Now, navigate back to the Candid UI URL provided in the output and click the 'Ca Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -268,11 +266,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-2/2.2-advanced-canister-calls.mdx b/docs/tutorials/developer-journey/level-2/2.2-advanced-canister-calls.mdx index a221c1c928..a3b371ac58 100644 --- a/docs/tutorials/developer-journey/level-2/2.2-advanced-canister-calls.mdx +++ b/docs/tutorials/developer-journey/level-2/2.2-advanced-canister-calls.mdx @@ -268,11 +268,9 @@ The output should resemble the following: Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -286,11 +284,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-2/2.3-third-party-canisters.mdx b/docs/tutorials/developer-journey/level-2/2.3-third-party-canisters.mdx index e9fbcd365d..747db83d50 100644 --- a/docs/tutorials/developer-journey/level-2/2.3-third-party-canisters.mdx +++ b/docs/tutorials/developer-journey/level-2/2.3-third-party-canisters.mdx @@ -202,11 +202,9 @@ Now, you can interact with the II canister locally using the CLI or the Candid U Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -222,11 +220,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-2/2.4-intro-candid.mdx b/docs/tutorials/developer-journey/level-2/2.4-intro-candid.mdx index 7cad694044..0ab9102553 100644 --- a/docs/tutorials/developer-journey/level-2/2.4-intro-candid.mdx +++ b/docs/tutorials/developer-journey/level-2/2.4-intro-candid.mdx @@ -360,11 +360,9 @@ Lastly, call the 'get' method again to return our final counter value: Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -380,11 +378,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-2/2.5-unit-testing.mdx b/docs/tutorials/developer-journey/level-2/2.5-unit-testing.mdx index 634fccdf51..08a45b72d3 100644 --- a/docs/tutorials/developer-journey/level-2/2.5-unit-testing.mdx +++ b/docs/tutorials/developer-journey/level-2/2.5-unit-testing.mdx @@ -459,11 +459,9 @@ To learn more about Github workflows, check out the [Github documentation](https Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -479,11 +477,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-2/2.6-motoko-lvl2.mdx b/docs/tutorials/developer-journey/level-2/2.6-motoko-lvl2.mdx index 3c80854bb0..7ff5c7774f 100644 --- a/docs/tutorials/developer-journey/level-2/2.6-motoko-lvl2.mdx +++ b/docs/tutorials/developer-journey/level-2/2.6-motoko-lvl2.mdx @@ -433,11 +433,9 @@ This command makes a call to the `daemon` canister, directly to the public funct Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -453,11 +451,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-3/3.1-package-managers.mdx b/docs/tutorials/developer-journey/level-3/3.1-package-managers.mdx index 58478a8453..19b387e4f7 100644 --- a/docs/tutorials/developer-journey/level-3/3.1-package-managers.mdx +++ b/docs/tutorials/developer-journey/level-3/3.1-package-managers.mdx @@ -218,11 +218,9 @@ actor characterCount { Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -238,11 +236,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-3/3.2-https-outcalls.mdx b/docs/tutorials/developer-journey/level-3/3.2-https-outcalls.mdx index fc218a4063..98e35cb1b8 100644 --- a/docs/tutorials/developer-journey/level-3/3.2-https-outcalls.mdx +++ b/docs/tutorials/developer-journey/level-3/3.2-https-outcalls.mdx @@ -829,11 +829,9 @@ You can play with a version of this canister running onchain: https://a4gq6-oaaa Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -849,11 +847,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-3/3.3-certified-data.mdx b/docs/tutorials/developer-journey/level-3/3.3-certified-data.mdx index e908d06faa..712f187143 100644 --- a/docs/tutorials/developer-journey/level-3/3.3-certified-data.mdx +++ b/docs/tutorials/developer-journey/level-3/3.3-certified-data.mdx @@ -362,7 +362,7 @@ Canisters using HTTP asset certification: Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The IC community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for IC developers to ask questions, get help, or chat with other developers asynchronously via text chat. ======= - [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for IC developers to ask questions, get help, or chat with other developers asynchronously via text chat. @@ -382,11 +382,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-3/3.4-intro-to-agents.mdx b/docs/tutorials/developer-journey/level-3/3.4-intro-to-agents.mdx index 640bfde7d3..719399196f 100644 --- a/docs/tutorials/developer-journey/level-3/3.4-intro-to-agents.mdx +++ b/docs/tutorials/developer-journey/level-3/3.4-intro-to-agents.mdx @@ -256,11 +256,9 @@ That'll wrap things up for this module! You can read more about agents, such as Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -276,11 +274,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-3/3.5-identities-and-auth.mdx b/docs/tutorials/developer-journey/level-3/3.5-identities-and-auth.mdx index 2230558429..711ea35067 100644 --- a/docs/tutorials/developer-journey/level-3/3.5-identities-and-auth.mdx +++ b/docs/tutorials/developer-journey/level-3/3.5-identities-and-auth.mdx @@ -368,11 +368,9 @@ You've now integrated Internet Identity into a local dapp! That'll wrap things u Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -388,11 +386,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-3/3.6-motoko-lvl3.mdx b/docs/tutorials/developer-journey/level-3/3.6-motoko-lvl3.mdx index bf677399ff..15a70ec388 100644 --- a/docs/tutorials/developer-journey/level-3/3.6-motoko-lvl3.mdx +++ b/docs/tutorials/developer-journey/level-3/3.6-motoko-lvl3.mdx @@ -624,11 +624,9 @@ actor { Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -642,11 +640,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-4/4.1-icp-ledger.mdx b/docs/tutorials/developer-journey/level-4/4.1-icp-ledger.mdx index 4a3728bdd1..9c21d01cab 100644 --- a/docs/tutorials/developer-journey/level-4/4.1-icp-ledger.mdx +++ b/docs/tutorials/developer-journey/level-4/4.1-icp-ledger.mdx @@ -330,11 +330,9 @@ After navigating to this URL in a web browser, the Candid UI will resemble the f Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -350,11 +348,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-4/4.2-icrc-tokens.mdx b/docs/tutorials/developer-journey/level-4/4.2-icrc-tokens.mdx index 5282e7a0ac..403a77113a 100644 --- a/docs/tutorials/developer-journey/level-4/4.2-icrc-tokens.mdx +++ b/docs/tutorials/developer-journey/level-4/4.2-icrc-tokens.mdx @@ -493,11 +493,9 @@ This URL will display the following Candid UI: Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -513,11 +511,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-4/4.3-ckbtc-and-bitcoin.mdx b/docs/tutorials/developer-journey/level-4/4.3-ckbtc-and-bitcoin.mdx index 9a33d37225..deb01d2eea 100644 --- a/docs/tutorials/developer-journey/level-4/4.3-ckbtc-and-bitcoin.mdx +++ b/docs/tutorials/developer-journey/level-4/4.3-ckbtc-and-bitcoin.mdx @@ -344,11 +344,9 @@ dfx canister call basic_bitcoin get_balance '("n2dcQfuwFw7M2UYzLfM6P7DwewsQaygb8 Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -364,11 +362,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-4/4.4-nns-governance.mdx b/docs/tutorials/developer-journey/level-4/4.4-nns-governance.mdx index b98473ba39..9871bbb7f2 100644 --- a/docs/tutorials/developer-journey/level-4/4.4-nns-governance.mdx +++ b/docs/tutorials/developer-journey/level-4/4.4-nns-governance.mdx @@ -287,11 +287,9 @@ For additional information the NNS dapp, proposals, and neuron staking, check ou Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -307,11 +305,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-4/4.5-using-quill.mdx b/docs/tutorials/developer-journey/level-4/4.5-using-quill.mdx index 04d9544929..71d6fd1901 100644 --- a/docs/tutorials/developer-journey/level-4/4.5-using-quill.mdx +++ b/docs/tutorials/developer-journey/level-4/4.5-using-quill.mdx @@ -439,11 +439,9 @@ quill get-proposal-info 131693 Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -459,11 +457,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-4/4.6-motoko-lvl4.mdx b/docs/tutorials/developer-journey/level-4/4.6-motoko-lvl4.mdx index 54a8767dbd..0b178c52fa 100644 --- a/docs/tutorials/developer-journey/level-4/4.6-motoko-lvl4.mdx +++ b/docs/tutorials/developer-journey/level-4/4.6-motoko-lvl4.mdx @@ -623,11 +623,9 @@ actor { Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -643,11 +641,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-5/5.1-vetKeys-tutorial.mdx b/docs/tutorials/developer-journey/level-5/5.1-vetKeys-tutorial.mdx index 6c74fd417f..0789169e8c 100644 --- a/docs/tutorials/developer-journey/level-5/5.1-vetKeys-tutorial.mdx +++ b/docs/tutorials/developer-journey/level-5/5.1-vetKeys-tutorial.mdx @@ -789,11 +789,9 @@ Then, you can see the note has been saved in the 'Your notes' section: Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -809,11 +807,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-5/5.2-ICP-ETH-tutorial.mdx b/docs/tutorials/developer-journey/level-5/5.2-ICP-ETH-tutorial.mdx index 9f258a10b8..1fdc02a255 100644 --- a/docs/tutorials/developer-journey/level-5/5.2-ICP-ETH-tutorial.mdx +++ b/docs/tutorials/developer-journey/level-5/5.2-ICP-ETH-tutorial.mdx @@ -359,11 +359,9 @@ Some JSON-RPC APIs may only return a `NonceTooLow` status when successfully subm Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -379,11 +377,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-5/5.3-token-swap-tutorial.mdx b/docs/tutorials/developer-journey/level-5/5.3-token-swap-tutorial.mdx index 62c6017884..0faaf42b90 100644 --- a/docs/tutorials/developer-journey/level-5/5.3-token-swap-tutorial.mdx +++ b/docs/tutorials/developer-journey/level-5/5.3-token-swap-tutorial.mdx @@ -810,11 +810,9 @@ dfx canister call token_b icrc1_balance_of 'record { Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -830,11 +828,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-5/5.4-NFT-tutorial.mdx b/docs/tutorials/developer-journey/level-5/5.4-NFT-tutorial.mdx index ea728a1f7d..674f1309dc 100644 --- a/docs/tutorials/developer-journey/level-5/5.4-NFT-tutorial.mdx +++ b/docs/tutorials/developer-journey/level-5/5.4-NFT-tutorial.mdx @@ -575,11 +575,9 @@ This will return long output, such as: Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -595,11 +593,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-5/5.5-auction-tutorial.mdx b/docs/tutorials/developer-journey/level-5/5.5-auction-tutorial.mdx index 5311786033..1459991677 100644 --- a/docs/tutorials/developer-journey/level-5/5.5-auction-tutorial.mdx +++ b/docs/tutorials/developer-journey/level-5/5.5-auction-tutorial.mdx @@ -372,11 +372,9 @@ If you scroll down, you will see the option to place another bid, followed by th Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -392,11 +390,9 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-5/5.6-next-steps.mdx b/docs/tutorials/developer-journey/level-5/5.6-next-steps.mdx index 64595d3421..92adbdeb29 100644 --- a/docs/tutorials/developer-journey/level-5/5.6-next-steps.mdx +++ b/docs/tutorials/developer-journey/level-5/5.6-next-steps.mdx @@ -88,11 +88,9 @@ Several of ICP's repositories are open-source, and external contributions are en ## Developer resources -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes + - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). @@ -108,10 +106,8 @@ Several of ICP's repositories are open-source, and external contributions are en - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/hackathon-prep-course/10-resources.mdx b/docs/tutorials/hackathon-prep-course/10-resources.mdx index 08a75ed304..dc249fad7b 100644 --- a/docs/tutorials/hackathon-prep-course/10-resources.mdx +++ b/docs/tutorials/hackathon-prep-course/10-resources.mdx @@ -20,7 +20,7 @@ To learn more about ICP, a specific feature or workflow, or get help from other - [Awesome Internet Computer repo.](/docs/current/home) -<<<<<<< Updated upstream + - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for IC developers to ask questions, get help, or chat with other developers asynchronously via text chat. ======= - [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for IC developers to ask questions, get help, or chat with other developers asynchronously via text chat. @@ -40,8 +40,6 @@ To learn more about ICP, a specific feature or workflow, or get help from other - [Upcoming hackathons](https://dfinity.org/hackathons/). -<<<<<<< Updated upstream + - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. -======= -- [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.internetcomputer.org) group. ->>>>>>> Stashed changes + From bbc2020ad63fcf288b8a8c79d282d96a073ec47a Mon Sep 17 00:00:00 2001 From: Jessie Mongeon Date: Wed, 20 Nov 2024 17:12:19 -0600 Subject: [PATCH 33/47] fix conflicts --- .../developer-journey/level-0/05-intro-languages.mdx | 4 ---- .../developer-journey/level-2/2.1-storage-persistence.mdx | 4 ---- .../developer-journey/level-2/2.2-advanced-canister-calls.mdx | 4 ---- .../developer-journey/level-2/2.3-third-party-canisters.mdx | 4 ---- docs/tutorials/developer-journey/level-2/2.4-intro-candid.mdx | 4 ---- docs/tutorials/developer-journey/level-2/2.5-unit-testing.mdx | 4 ---- docs/tutorials/developer-journey/level-2/2.6-motoko-lvl2.mdx | 4 ---- .../developer-journey/level-3/3.1-package-managers.mdx | 4 ---- .../developer-journey/level-3/3.2-https-outcalls.mdx | 4 ---- .../developer-journey/level-3/3.3-certified-data.mdx | 2 -- .../developer-journey/level-3/3.4-intro-to-agents.mdx | 4 ---- .../developer-journey/level-3/3.5-identities-and-auth.mdx | 4 ---- docs/tutorials/developer-journey/level-3/3.6-motoko-lvl3.mdx | 4 ---- docs/tutorials/developer-journey/level-4/4.1-icp-ledger.mdx | 4 ---- docs/tutorials/developer-journey/level-4/4.2-icrc-tokens.mdx | 4 ---- .../developer-journey/level-4/4.3-ckbtc-and-bitcoin.mdx | 4 ---- .../developer-journey/level-4/4.4-nns-governance.mdx | 4 ---- docs/tutorials/developer-journey/level-4/4.5-using-quill.mdx | 4 ---- docs/tutorials/developer-journey/level-4/4.6-motoko-lvl4.mdx | 4 ---- .../developer-journey/level-5/5.1-vetKeys-tutorial.mdx | 4 ---- .../developer-journey/level-5/5.2-ICP-ETH-tutorial.mdx | 4 ---- .../developer-journey/level-5/5.3-token-swap-tutorial.mdx | 4 ---- docs/tutorials/developer-journey/level-5/5.4-NFT-tutorial.mdx | 4 ---- .../developer-journey/level-5/5.5-auction-tutorial.mdx | 4 ---- docs/tutorials/developer-journey/level-5/5.6-next-steps.mdx | 4 ---- 25 files changed, 98 deletions(-) diff --git a/docs/tutorials/developer-journey/level-0/05-intro-languages.mdx b/docs/tutorials/developer-journey/level-0/05-intro-languages.mdx index 174e262017..a32c27562a 100644 --- a/docs/tutorials/developer-journey/level-0/05-intro-languages.mdx +++ b/docs/tutorials/developer-journey/level-0/05-intro-languages.mdx @@ -122,10 +122,8 @@ C++ is available through the [icpp-pro CDK](https://docs.icpp.world/) developed Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -140,10 +138,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). diff --git a/docs/tutorials/developer-journey/level-2/2.1-storage-persistence.mdx b/docs/tutorials/developer-journey/level-2/2.1-storage-persistence.mdx index ae119c469f..c569b1273e 100644 --- a/docs/tutorials/developer-journey/level-2/2.1-storage-persistence.mdx +++ b/docs/tutorials/developer-journey/level-2/2.1-storage-persistence.mdx @@ -250,10 +250,8 @@ Now, navigate back to the Candid UI URL provided in the output and click the 'Ca Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -266,10 +264,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-2/2.2-advanced-canister-calls.mdx b/docs/tutorials/developer-journey/level-2/2.2-advanced-canister-calls.mdx index a3b371ac58..c08daf44e4 100644 --- a/docs/tutorials/developer-journey/level-2/2.2-advanced-canister-calls.mdx +++ b/docs/tutorials/developer-journey/level-2/2.2-advanced-canister-calls.mdx @@ -268,10 +268,8 @@ The output should resemble the following: Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -284,10 +282,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-2/2.3-third-party-canisters.mdx b/docs/tutorials/developer-journey/level-2/2.3-third-party-canisters.mdx index 747db83d50..a89f1576bd 100644 --- a/docs/tutorials/developer-journey/level-2/2.3-third-party-canisters.mdx +++ b/docs/tutorials/developer-journey/level-2/2.3-third-party-canisters.mdx @@ -202,10 +202,8 @@ Now, you can interact with the II canister locally using the CLI or the Candid U Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -220,10 +218,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-2/2.4-intro-candid.mdx b/docs/tutorials/developer-journey/level-2/2.4-intro-candid.mdx index 0ab9102553..d732fae54f 100644 --- a/docs/tutorials/developer-journey/level-2/2.4-intro-candid.mdx +++ b/docs/tutorials/developer-journey/level-2/2.4-intro-candid.mdx @@ -360,10 +360,8 @@ Lastly, call the 'get' method again to return our final counter value: Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -378,10 +376,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-2/2.5-unit-testing.mdx b/docs/tutorials/developer-journey/level-2/2.5-unit-testing.mdx index 08a45b72d3..d8f5710824 100644 --- a/docs/tutorials/developer-journey/level-2/2.5-unit-testing.mdx +++ b/docs/tutorials/developer-journey/level-2/2.5-unit-testing.mdx @@ -459,10 +459,8 @@ To learn more about Github workflows, check out the [Github documentation](https Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -477,10 +475,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-2/2.6-motoko-lvl2.mdx b/docs/tutorials/developer-journey/level-2/2.6-motoko-lvl2.mdx index 7ff5c7774f..68b9daf376 100644 --- a/docs/tutorials/developer-journey/level-2/2.6-motoko-lvl2.mdx +++ b/docs/tutorials/developer-journey/level-2/2.6-motoko-lvl2.mdx @@ -433,10 +433,8 @@ This command makes a call to the `daemon` canister, directly to the public funct Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -451,10 +449,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-3/3.1-package-managers.mdx b/docs/tutorials/developer-journey/level-3/3.1-package-managers.mdx index 19b387e4f7..670751d230 100644 --- a/docs/tutorials/developer-journey/level-3/3.1-package-managers.mdx +++ b/docs/tutorials/developer-journey/level-3/3.1-package-managers.mdx @@ -218,10 +218,8 @@ actor characterCount { Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -236,10 +234,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-3/3.2-https-outcalls.mdx b/docs/tutorials/developer-journey/level-3/3.2-https-outcalls.mdx index 98e35cb1b8..9c1a657229 100644 --- a/docs/tutorials/developer-journey/level-3/3.2-https-outcalls.mdx +++ b/docs/tutorials/developer-journey/level-3/3.2-https-outcalls.mdx @@ -829,10 +829,8 @@ You can play with a version of this canister running onchain: https://a4gq6-oaaa Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -847,10 +845,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-3/3.3-certified-data.mdx b/docs/tutorials/developer-journey/level-3/3.3-certified-data.mdx index 712f187143..b57cd61fd1 100644 --- a/docs/tutorials/developer-journey/level-3/3.3-certified-data.mdx +++ b/docs/tutorials/developer-journey/level-3/3.3-certified-data.mdx @@ -382,10 +382,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-3/3.4-intro-to-agents.mdx b/docs/tutorials/developer-journey/level-3/3.4-intro-to-agents.mdx index 719399196f..8163f35a1c 100644 --- a/docs/tutorials/developer-journey/level-3/3.4-intro-to-agents.mdx +++ b/docs/tutorials/developer-journey/level-3/3.4-intro-to-agents.mdx @@ -256,10 +256,8 @@ That'll wrap things up for this module! You can read more about agents, such as Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -274,10 +272,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-3/3.5-identities-and-auth.mdx b/docs/tutorials/developer-journey/level-3/3.5-identities-and-auth.mdx index 711ea35067..6d3dc6ddbb 100644 --- a/docs/tutorials/developer-journey/level-3/3.5-identities-and-auth.mdx +++ b/docs/tutorials/developer-journey/level-3/3.5-identities-and-auth.mdx @@ -368,10 +368,8 @@ You've now integrated Internet Identity into a local dapp! That'll wrap things u Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -386,10 +384,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-3/3.6-motoko-lvl3.mdx b/docs/tutorials/developer-journey/level-3/3.6-motoko-lvl3.mdx index 15a70ec388..417aaa827b 100644 --- a/docs/tutorials/developer-journey/level-3/3.6-motoko-lvl3.mdx +++ b/docs/tutorials/developer-journey/level-3/3.6-motoko-lvl3.mdx @@ -624,10 +624,8 @@ actor { Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -640,10 +638,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-4/4.1-icp-ledger.mdx b/docs/tutorials/developer-journey/level-4/4.1-icp-ledger.mdx index 9c21d01cab..b15fe0ce6b 100644 --- a/docs/tutorials/developer-journey/level-4/4.1-icp-ledger.mdx +++ b/docs/tutorials/developer-journey/level-4/4.1-icp-ledger.mdx @@ -330,10 +330,8 @@ After navigating to this URL in a web browser, the Candid UI will resemble the f Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -348,10 +346,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-4/4.2-icrc-tokens.mdx b/docs/tutorials/developer-journey/level-4/4.2-icrc-tokens.mdx index 403a77113a..3edcdd6ce0 100644 --- a/docs/tutorials/developer-journey/level-4/4.2-icrc-tokens.mdx +++ b/docs/tutorials/developer-journey/level-4/4.2-icrc-tokens.mdx @@ -493,10 +493,8 @@ This URL will display the following Candid UI: Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -511,10 +509,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-4/4.3-ckbtc-and-bitcoin.mdx b/docs/tutorials/developer-journey/level-4/4.3-ckbtc-and-bitcoin.mdx index deb01d2eea..7acc981d66 100644 --- a/docs/tutorials/developer-journey/level-4/4.3-ckbtc-and-bitcoin.mdx +++ b/docs/tutorials/developer-journey/level-4/4.3-ckbtc-and-bitcoin.mdx @@ -344,10 +344,8 @@ dfx canister call basic_bitcoin get_balance '("n2dcQfuwFw7M2UYzLfM6P7DwewsQaygb8 Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -362,10 +360,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-4/4.4-nns-governance.mdx b/docs/tutorials/developer-journey/level-4/4.4-nns-governance.mdx index 9871bbb7f2..c1263b3ff6 100644 --- a/docs/tutorials/developer-journey/level-4/4.4-nns-governance.mdx +++ b/docs/tutorials/developer-journey/level-4/4.4-nns-governance.mdx @@ -287,10 +287,8 @@ For additional information the NNS dapp, proposals, and neuron staking, check ou Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -305,10 +303,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-4/4.5-using-quill.mdx b/docs/tutorials/developer-journey/level-4/4.5-using-quill.mdx index 71d6fd1901..811d8d9991 100644 --- a/docs/tutorials/developer-journey/level-4/4.5-using-quill.mdx +++ b/docs/tutorials/developer-journey/level-4/4.5-using-quill.mdx @@ -439,10 +439,8 @@ quill get-proposal-info 131693 Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -457,10 +455,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-4/4.6-motoko-lvl4.mdx b/docs/tutorials/developer-journey/level-4/4.6-motoko-lvl4.mdx index 0b178c52fa..9b1294ef31 100644 --- a/docs/tutorials/developer-journey/level-4/4.6-motoko-lvl4.mdx +++ b/docs/tutorials/developer-journey/level-4/4.6-motoko-lvl4.mdx @@ -623,10 +623,8 @@ actor { Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -641,10 +639,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-5/5.1-vetKeys-tutorial.mdx b/docs/tutorials/developer-journey/level-5/5.1-vetKeys-tutorial.mdx index 0789169e8c..e44b24c627 100644 --- a/docs/tutorials/developer-journey/level-5/5.1-vetKeys-tutorial.mdx +++ b/docs/tutorials/developer-journey/level-5/5.1-vetKeys-tutorial.mdx @@ -789,10 +789,8 @@ Then, you can see the note has been saved in the 'Your notes' section: Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -807,10 +805,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-5/5.2-ICP-ETH-tutorial.mdx b/docs/tutorials/developer-journey/level-5/5.2-ICP-ETH-tutorial.mdx index 1fdc02a255..4156d4d955 100644 --- a/docs/tutorials/developer-journey/level-5/5.2-ICP-ETH-tutorial.mdx +++ b/docs/tutorials/developer-journey/level-5/5.2-ICP-ETH-tutorial.mdx @@ -359,10 +359,8 @@ Some JSON-RPC APIs may only return a `NonceTooLow` status when successfully subm Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -377,10 +375,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-5/5.3-token-swap-tutorial.mdx b/docs/tutorials/developer-journey/level-5/5.3-token-swap-tutorial.mdx index 0faaf42b90..c18f873932 100644 --- a/docs/tutorials/developer-journey/level-5/5.3-token-swap-tutorial.mdx +++ b/docs/tutorials/developer-journey/level-5/5.3-token-swap-tutorial.mdx @@ -810,10 +810,8 @@ dfx canister call token_b icrc1_balance_of 'record { Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -828,10 +826,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-5/5.4-NFT-tutorial.mdx b/docs/tutorials/developer-journey/level-5/5.4-NFT-tutorial.mdx index 674f1309dc..0fa48340e9 100644 --- a/docs/tutorials/developer-journey/level-5/5.4-NFT-tutorial.mdx +++ b/docs/tutorials/developer-journey/level-5/5.4-NFT-tutorial.mdx @@ -575,10 +575,8 @@ This will return long output, such as: Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -593,10 +591,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-5/5.5-auction-tutorial.mdx b/docs/tutorials/developer-journey/level-5/5.5-auction-tutorial.mdx index 1459991677..93dbb9dbe9 100644 --- a/docs/tutorials/developer-journey/level-5/5.5-auction-tutorial.mdx +++ b/docs/tutorials/developer-journey/level-5/5.5-auction-tutorial.mdx @@ -372,10 +372,8 @@ If you scroll down, you will see the option to place another bid, followed by th Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The ICP community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -390,10 +388,8 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). ## Next steps diff --git a/docs/tutorials/developer-journey/level-5/5.6-next-steps.mdx b/docs/tutorials/developer-journey/level-5/5.6-next-steps.mdx index 92adbdeb29..31e72e963a 100644 --- a/docs/tutorials/developer-journey/level-5/5.6-next-steps.mdx +++ b/docs/tutorials/developer-journey/level-5/5.6-next-steps.mdx @@ -88,10 +88,8 @@ Several of ICP's repositories are open-source, and external contributions are en ## Developer resources - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for ICP developers to ask questions, get help, or chat with other developers asynchronously via text chat. - - [Developer ladder 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). @@ -106,8 +104,6 @@ Several of ICP's repositories are open-source, and external contributions are en - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. - - Submit your feedback to the [ICP Developer feedback board](http://dx.internetcomputer.org). From a83067dcc5920de5c9069cf2a507099b2e0efb1c Mon Sep 17 00:00:00 2001 From: Jessie Mongeon Date: Wed, 20 Nov 2024 17:14:23 -0600 Subject: [PATCH 34/47] fix conflicts --- docs/tutorials/developer-journey/level-0/06-intro-dfx.mdx | 8 +------- .../developer-journey/level-3/3.3-certified-data.mdx | 3 --- docs/tutorials/hackathon-prep-course/10-resources.mdx | 4 ---- 3 files changed, 1 insertion(+), 14 deletions(-) diff --git a/docs/tutorials/developer-journey/level-0/06-intro-dfx.mdx b/docs/tutorials/developer-journey/level-0/06-intro-dfx.mdx index 4daeda815a..4aa148643d 100644 --- a/docs/tutorials/developer-journey/level-0/06-intro-dfx.mdx +++ b/docs/tutorials/developer-journey/level-0/06-intro-dfx.mdx @@ -131,11 +131,7 @@ Lastly, you can include extra features to be added to your project: When no flags are used, the `dfx new` command will create a new project using the default Motoko template. To create a project using the Rust project template, the flag `--type=rust` should be included in the command. - In this tutorial series, you will be using Motoko for the development language, so you do not need to pass any additional flags with this command. -======= -In this developer journey, you will be using Motoko for our development language, so you do not need to pass any additional flags with this command. ->>>>>>> Stashed changes :::info When creating new projects with `dfx`, only alphanumeric characters and underscores should be used. This is to assure that project names are valid within Motoko, JavaScript, and other contexts. @@ -236,9 +232,7 @@ Let's explore these settings a bit further: Now that you've explored the default project structure, let's take a look at the default program code located in the `main.mo` file. This is located in the `src/hello_world_backend` directory. The developer ladder will cover frontend development and the default files located in the frontend canister directory in a later tutorial. -======= -Now that you've explored the default project structure, let's take a look at the default program code located in the `main.mo` file. This is located in the `src/hello_world_backend` directory. The developer journey will cover frontend development and the default files located in the frontend canister directory in a later tutorial. ->>>>>>> Stashed changes += New Motoko projects will always include a default, template `main.mo` file. To take a look at the file's default contents, open the `src/hello_world_backend/main.mo` file in a code or text editor. The code will resemble the following: diff --git a/docs/tutorials/developer-journey/level-3/3.3-certified-data.mdx b/docs/tutorials/developer-journey/level-3/3.3-certified-data.mdx index b57cd61fd1..3419c0af92 100644 --- a/docs/tutorials/developer-journey/level-3/3.3-certified-data.mdx +++ b/docs/tutorials/developer-journey/level-3/3.3-certified-data.mdx @@ -364,9 +364,6 @@ Did you get stuck somewhere in this tutorial, or feel like you need additional h - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for IC developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for IC developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). diff --git a/docs/tutorials/hackathon-prep-course/10-resources.mdx b/docs/tutorials/hackathon-prep-course/10-resources.mdx index dc249fad7b..fd6b447464 100644 --- a/docs/tutorials/hackathon-prep-course/10-resources.mdx +++ b/docs/tutorials/hackathon-prep-course/10-resources.mdx @@ -20,11 +20,7 @@ To learn more about ICP, a specific feature or workflow, or get help from other - [Awesome Internet Computer repo.](/docs/current/home) - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for IC developers to ask questions, get help, or chat with other developers asynchronously via text chat. -======= -- [Developer Discord community](https://discord.internetcomputer.org), which is a large chatroom for IC developers to ask questions, get help, or chat with other developers asynchronously via text chat. ->>>>>>> Stashed changes - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). From 5f63a9629b0091ffaa1e3b54b20f37ed7af60de3 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon Date: Wed, 20 Nov 2024 17:16:16 -0600 Subject: [PATCH 35/47] fix conflicts --- blog/news-and-updates/2024-11-20-update.mdx | 48 ------------------ .../level-0/06-intro-dfx.mdx | 2 - .../level-3/3.3-certified-data.mdx | 1 - .../hackathon-prep-course/10-resources.mdx | 1 - static/img/blog/dev-update-blog-nov-20.jpg | Bin 344974 -> 0 bytes 5 files changed, 52 deletions(-) delete mode 100644 blog/news-and-updates/2024-11-20-update.mdx delete mode 100644 static/img/blog/dev-update-blog-nov-20.jpg diff --git a/blog/news-and-updates/2024-11-20-update.mdx b/blog/news-and-updates/2024-11-20-update.mdx deleted file mode 100644 index 07fdd9a081..0000000000 --- a/blog/news-and-updates/2024-11-20-update.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Developer weekly update November 20, 2024 -description: This week, we have tooling updates for PocketIC, dfx, and Motoko. -tags: [Devs] -image: /img/blog/dev-update-blog-nov-20.jpg ---- - -# Developer weekly update November 20, 2024 - -![November 20 2024](../../static/img/blog/dev-update-blog-nov-20.jpg) - -Hello developers, and welcome to this week's developer weekly update! This week, we have tooling updates for PocketIC, dfx, and Motoko. Let's get started! - -## PocketIC 7.0.0 - -A new version of PocketIC has been released! This version is packed with new features, including: - -- Windows support for using the Rust library natively on Windows if Windows Subsystem for Linux (WSL) is installed. - -- New server endpoint: `/instances//_/topology` - -- New Rust library module for using the management canister: `pocket_ic::management_canister`. - -- Bitcoin integration support via the management canister. - -[Read more on the forum](https://forum.dfinity.org/t/pocketic-version-7-0-0-bitcoin-integration-and-windows-support/37344). - -## `dfx v0.24.2` - -The latest version of `dfx` has been released this past week. This release includes new features such as: - -- All commands will use the `DFX_NETWORK` environment variable by default if it is set. The `--network` flag will take precedence if provided. - -- `dfx generate` honors the `--network` flag. - -- Support for the canister log allowed viewer list. - -[Read the full release notes](https://github.com/dfinity/sdk/releases/tag/0.24.2). - -## Motoko v0.13.2 - -The most recent version of Motoko enables an actor's self identifier to be available in the top-level block, allowing functions to refer to self from the initializer. - -[Read the full release notes](https://github.com/dfinity/motoko/releases/tag/0.13.2). - -That'll wrap up this week. Tune back in next week for more developer updates! - --DFINITY \ No newline at end of file diff --git a/docs/tutorials/developer-journey/level-0/06-intro-dfx.mdx b/docs/tutorials/developer-journey/level-0/06-intro-dfx.mdx index 4aa148643d..b20ca4c355 100644 --- a/docs/tutorials/developer-journey/level-0/06-intro-dfx.mdx +++ b/docs/tutorials/developer-journey/level-0/06-intro-dfx.mdx @@ -230,9 +230,7 @@ Let's explore these settings a bit further: ## Reviewing the default program code - Now that you've explored the default project structure, let's take a look at the default program code located in the `main.mo` file. This is located in the `src/hello_world_backend` directory. The developer ladder will cover frontend development and the default files located in the frontend canister directory in a later tutorial. -= New Motoko projects will always include a default, template `main.mo` file. To take a look at the file's default contents, open the `src/hello_world_backend/main.mo` file in a code or text editor. The code will resemble the following: diff --git a/docs/tutorials/developer-journey/level-3/3.3-certified-data.mdx b/docs/tutorials/developer-journey/level-3/3.3-certified-data.mdx index 3419c0af92..162459fd29 100644 --- a/docs/tutorials/developer-journey/level-3/3.3-certified-data.mdx +++ b/docs/tutorials/developer-journey/level-3/3.3-certified-data.mdx @@ -362,7 +362,6 @@ Canisters using HTTP asset certification: Did you get stuck somewhere in this tutorial, or feel like you need additional help understanding some of the concepts? The IC community has several resources available for developers, like working groups and bootcamps, along with our Discord community, forum, and events such as hackathons. Here are a few to check out: - - [Developer Discord](https://discord.internetcomputer.org), which is a large chatroom for IC developers to ask questions, get help, or chat with other developers asynchronously via text chat. - [Developer ladder forum discussion](https://forum.dfinity.org/t/developer-journey-feedback-and-discussion/23893). diff --git a/docs/tutorials/hackathon-prep-course/10-resources.mdx b/docs/tutorials/hackathon-prep-course/10-resources.mdx index fd6b447464..e4b66ae820 100644 --- a/docs/tutorials/hackathon-prep-course/10-resources.mdx +++ b/docs/tutorials/hackathon-prep-course/10-resources.mdx @@ -36,6 +36,5 @@ To learn more about ICP, a specific feature or workflow, or get help from other - [Upcoming hackathons](https://dfinity.org/hackathons/). - - Weekly developer office hours to ask questions, get clarification, and chat with other developers live via voice chat. This is hosted on the [Discord](https://discord.internetcomputer.org) server. diff --git a/static/img/blog/dev-update-blog-nov-20.jpg b/static/img/blog/dev-update-blog-nov-20.jpg deleted file mode 100644 index 306c13b9d2af6cc8bc014b8892ffc71575dbd571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 344974 zcmbrm2~-nX5H=VD#g#m_r@jY71qD|G^~n}mMMY2vvZxQ0sJP(*vO_Rw5S8afSVa*M zR4|}I+#mu%M3jIiQG!MV2^cVhmNf~Grn{LN|5?t=`RAND^Xu`TS-SgH)vfxzuj)GX zWvq?#huap{EhN2hdZex3H)*Vyk)y|s2b>5E3y+A5ie|*0zi=_(ze|@>Qq$6} zXWY1%dFO6!-aTG^!Tl#spB0w~o|l%rs($^ZMpRq(wo%gb>9h39*Kh4VADz<08Qy{pkkd7g$f2v0@*+L(O%an&TV)t>#c4~2Z3{HOVv_C*7_rTt#n|F?ym`~S7F|8rsg*Sfxu zrt0ef=jl%;K_r6ufH+T+j*Fd4vLxmF-+xSEB_vLO^w81pwy?T)FkPCV>4N=ohX%Et z<7m@jzy7krY!%IRLwuLzHIAl>SC5f0LY^IcQBtBai~9L7kr{AblD7OuB`jKtpwi?t}6be#N-uHw>F#MW6tK7wjVObAkqk-9Z~ z>nmVB(l-m{sv4M;&vVHrA+&bsRAWNid&&S=L9n=rLK3B8jKqB#I|lI!{ANJh{{ z&o0iIHl8$#4eADhG2@wbQOlG;+wUN;K7_P!r~xUAwHom zz}D#=7?KIvQoDmt9+-26$?Wy6;=w7>WM53S7EltNoxJMS-$anb#>&B@W-TB!onzHG0hS zM~3D(T%A&64|Dn3k3ot;^1&HX$4FUB7ws4c@s6`pqA-Ws5#i_^4h)7o0zvAzd5mNs zq}2|YW*3Z+{OHyYf=bb*G?*4d2n+BN&b15>BRRnN?Bc}~HdxzUH^`_(BWG_Al~~u< zDZRiWNt57R!XIutt&u&vR!f{75cA|D}&=_fV#Wq4PM}spv9-#88Fz2gCt>Gf*XzUHjPlzJM6lxGx z8W2m!V|#f?C^|q`^mjQlty;7_SlOeE!L3`GfM;M$6Zn{V@jUg*A)T$o+AK&%oE|1czn){(Cw8>(}pqOjIPOb`vI9teGp4Bu2B}%?z(mte!7pMy~1#Tcpm;vO%_ z07-+DP48oGkS)9?lWIoj;)B4uH*L86IAlfZRC>N4c3aQ~VdK9plEL;&SWH8tU;Ggb zBJSLVY7;;d>Z8~tscKlx>#R~<^%oRx`yZKNWYKxYA!8<_3v9RR=iMvTi+Jrgw33^+ zbkCk_rdYzkl1Ii!*Vg|z2cwE<19BdXK|_@|bM(rf7OwttCWga2;CDOq`#7-MSTQ&w z9F1IKJv)4wpJ;2WINGLWRmANBCJpOfEt&tgjxhaRy7p6C{o{YH1^Hj(EfE%*-@59< zk6!c4H(b4RRoeFyp{7Z-!{x_j$8`Np2w(Z6et zx4O8acZ@XguFn?ko~{#Lu#M8wH_!gO*bV*ocXsvkUz=`-Z&#Th3A10#^Eoa&@>iNg zqet2)Zsr-`+m3p&Va$Ff6i)6or3}>EdibRI?dEKW{%EO5M5)PL|EH1Ld#a%Hvrea9 zjkJ{66uOUGwTF!tYVVZStvnfYvMbRy&0>6bpOsZp-|l-%7rIKMb=+MKtoG^MB#_F< zeDGIn$oBda&2lS&pHMM?QDd4O=`xeb!kKXC?Bl*1^{%)8c6onuYJr*Z7c6cHM%$WJ zS@^ZSfVs|Edkh%jPgdk(nXBKD_vVN?zjg_tk?wHD_LgM^B zSAwL=cp+2Dr|jP{b9~drO~0b1R@fO_tm=wZ|17?JsqjKUkLCLsdi-F3FYeKl748c% zH};>pf=p|?vi9Mg$SNDVU1$C0j`uzg`jQf-^gX1Sy36M6i@v$7AFs(xGrPaHUg!{0ynq$VenvsYgqN*;b=+gPykTh=1G z)Aa@&L}z3q9yw**lb{b<*P1wWUapEcz51BmA <3~BZa1@vz8Q`4&-0V_{DTjsU5 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

&@&u;mrSN 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 z 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%0AT7;XSLX;95}6zCp`gCblDvQ2K> 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 UH|p9wHH?|!VBDjD^zqGq0T^Ao(f|Me From ea1d7965d02885eacd908a06ea09feff174e673b Mon Sep 17 00:00:00 2001 From: Jessie Mongeon Date: Thu, 21 Nov 2024 12:32:00 -0600 Subject: [PATCH 36/47] revert subs --- submodules/internetidentity | 2 +- submodules/motoko | 2 +- submodules/quill | 2 +- submodules/response-verfication | 2 +- submodules/samples | 2 +- submodules/sdk | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/submodules/internetidentity b/submodules/internetidentity index ad5aebfb8b..29f7f61ae3 160000 --- a/submodules/internetidentity +++ b/submodules/internetidentity @@ -1 +1 @@ -Subproject commit ad5aebfb8b54b5bdf4aaaba98b80766abb57d72a +Subproject commit 29f7f61ae375ab2a0250db9df3e94efff1ad23b7 diff --git a/submodules/motoko b/submodules/motoko index 6473b70b56..074ffca17f 160000 --- a/submodules/motoko +++ b/submodules/motoko @@ -1 +1 @@ -Subproject commit 6473b70b563003b60f69ebcd6921a1b3b518d246 +Subproject commit 074ffca17f95a3da876d8d0dda4d123cd5c16674 diff --git a/submodules/quill b/submodules/quill index 5a5a9ad4a7..88158f521f 160000 --- a/submodules/quill +++ b/submodules/quill @@ -1 +1 @@ -Subproject commit 5a5a9ad4a72ea9fa9f0adad5c3b11b00ced78db9 +Subproject commit 88158f521f5f777bfe3ce68e5b21e1f2bc9fcadd diff --git a/submodules/response-verfication b/submodules/response-verfication index af036cdc23..58770d8ae3 160000 --- a/submodules/response-verfication +++ b/submodules/response-verfication @@ -1 +1 @@ -Subproject commit af036cdc2303117ed72fe7d148d84e6b5ddf84ef +Subproject commit 58770d8ae39b99bfa5bb5ddd341e422f76552839 diff --git a/submodules/samples b/submodules/samples index 309d31ad06..24aca5b979 160000 --- a/submodules/samples +++ b/submodules/samples @@ -1 +1 @@ -Subproject commit 309d31ad063168c5ce84a179de19e2f8383a8b59 +Subproject commit 24aca5b979fd7f3690ee31890b466c19f45a027d diff --git a/submodules/sdk b/submodules/sdk index 1c22db89ac..0cf8c452a5 160000 --- a/submodules/sdk +++ b/submodules/sdk @@ -1 +1 @@ -Subproject commit 1c22db89ac1f9f96384902c91aa27bac1c1eff36 +Subproject commit 0cf8c452a5e51fddb73f9cf0a8d1878b122fcce8 From f5d17ba05f12fce8e331a6aeeac268bd531bf441 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon Date: Thu, 21 Nov 2024 14:42:37 -0600 Subject: [PATCH 37/47] init --- .../smart-contracts/maintain/delete.mdx | 34 +------- .../smart-contracts/maintain/history.mdx | 77 +++++++------------ submodules/internetidentity | 2 +- submodules/motoko | 2 +- submodules/quill | 2 +- submodules/sdk | 2 +- 6 files changed, 32 insertions(+), 87 deletions(-) diff --git a/docs/developer-docs/smart-contracts/maintain/delete.mdx b/docs/developer-docs/smart-contracts/maintain/delete.mdx index f047bc4f7f..cd15797a5d 100644 --- a/docs/developer-docs/smart-contracts/maintain/delete.mdx +++ b/docs/developer-docs/smart-contracts/maintain/delete.mdx @@ -5,45 +5,15 @@ keywords: [beginner, tutorial, maintain canisters, delete canisters, delete] import { MarkdownChipRow } from "/src/components/Chip/MarkdownChipRow"; import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; - # Delete ## Overview -If you want to permanently delete a specific canister or all canisters for a specific project on a given deployment (either local or remote), you can do so by running the command: - -``` -dfx canister delete // Delete local canister -dfx canister delete --network ic // Delete canister on mainnet -``` - -Deleting a canister removes the canister identifier, code, and state. Before you can delete a canister, however, you must first stop the canister to clear any pending message requests or replies. - -## Delete all canisters - -To delete all canisters for a project: - -- #### Step 1: Open a new terminal and navigate to your project directory. - -- #### Step 2: Start the local canister execution environment, if necessary. - -In most cases, this step is only necessary if you are running the canisters locally. - -If you were deleting canisters to run on a remote execution environment, e.g. ICP blockchain, you would include the `--network` command-line option to perform tasks on the environment specified under this parameter. - -- #### Step 3: Check the status of the project canisters running on the local canister execution environment by running the following command: - -dfx canister status --all - -- #### Step 4: Stop all of the project canisters by running the following command: - -dfx canister stop --all - -- #### Step 5: Delete all of the project canisters by running the following command: +If you want to permanently delete a specific canister or all canisters for a project, you can use the [`dfx canister delete`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-delete) command. -dfx canister delete --all +Deleting a canister removes the canister identifier, code, and state. Before you can delete a canister, you must first stop the canister to clear any pending message requests or replies. ## Errors related to canister deletion diff --git a/docs/developer-docs/smart-contracts/maintain/history.mdx b/docs/developer-docs/smart-contracts/maintain/history.mdx index 62e56f4c84..739ba0401a 100644 --- a/docs/developer-docs/smart-contracts/maintain/history.mdx +++ b/docs/developer-docs/smart-contracts/maintain/history.mdx @@ -10,14 +10,13 @@ import { BetaChip } from "/src/components/Chip/BetaChip" import { MarkdownChipRow } from "/src/components/Chip/MarkdownChipRow"; import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; - # History ## Overview -The Internet Computer tracks the history of a deployed canister through the canister's Wasm module hashes and controller changes. This tracking provides insight into the canister's history, such as what code has been used to run the canister, and which controller deployed that code. +The Internet Computer tracks the history of a deployed canister through the canister's Wasm module hashes and controller changes. This tracking provides insight into the canister's history, such as what code has been used to run the canister and which controller deployed that code. Viewing a canister's history can be important in use cases such as: @@ -31,8 +30,8 @@ Canister history was introduced and released by the NNS DAO proposal [122617](ht Canister history information is made available via inter-canister calls made to the `canister_info` method of the management canister, using a canister's ID as an argument for the call. A canister's history stores the 20 most recent changes to the canister, including the canister's creation, Wasm module installations, reinstallations, upgrades, and changes to the list of canister controllers. It is important to note that since only the 20 most recent changes are stored, this feature cannot be used for auditing canisters that are frequently changed within a short period of time. -:::info -Note that canister history is only available for changes that have happened since this feature was rolled out on 023-06-05, 9:47:46 AM UTC, across all subnets. +:::danger +Canister history is only available for changes that have happened since this feature was rolled out on 023-06-05, 9:47:46 AM UTC, across all subnets. ::: You can read more about this feature on the [developer forum](https://forum.dfinity.org/t/canister-history-on-the-ic/21745). @@ -48,11 +47,15 @@ To get a canister's history, make a call to the IC management canister's `canist actor { let IC = actor "aaaaa-aa" : actor { - - canister_info : { canister_id : Principal } -> - async (); - + canister_info : { + canister_id : Principal; + num_requested_changes : ?Nat64; + } -> async { + total_num_changes : Nat64; + // module_hash : ?Blob; + controllers : [Principal]; }; + } }; ``` @@ -60,57 +63,29 @@ actor { -```rust -use candid::{CandidType, Principal}; -use ic_cdk::api::management_canister::main::{ - canister_info, CanisterChange, - CanisterChangeDetails::{CodeDeployment, CodeUninstall, ControllersChange, Creation}, - CanisterChangeOrigin::{FromCanister, FromUser}, - CanisterInfoRequest, CanisterInfoResponse, -}; -use serde::Deserialize; - -/// Returns canister info with all available canister changes for a canister characterized by a given principal. -/// Traps if the canister_info management call is rejected (in particular, if the principal does not characterize a canister). -#[ic_cdk::update] -async fn info(canister_id: Principal) -> CanisterInfoResponse { - let request = CanisterInfoRequest { - canister_id, - num_requested_changes: Some(20), - }; - canister_info(request).await.unwrap().0 -} -``` +View the [Rust `canister-info` sample project](https://github.com/dfinity/examples/blob/master/rust/canister-info/src/lib.rs) for a detailed example of how to use `canister_info` in a Rust canister. }> ```typescript -import { call, IDL, Principal, query, update } from 'azle'; -import { - CanisterInfoArgs, - CanisterInfoResult, -} from 'azle/canisters/management'; - -type State = { - createdCanisterId: Principal; -}; -let state: State = { - createdCanisterId: Principal.fromText('aaaaa-aa') -}; +Azle code coming soon. -export default class { - @update([CanisterInfoArgs], CanisterInfoResult) - async getCanisterInfo(args: CanisterInfoArgs): Promise { - return await call('aaaaa-aa', 'canister_info', { - paramIdlTypes: [CanisterInfoArgs], - returnIdlType: CanisterInfoResult, - args: [args] - }); - } -} +[Learn more about Azle](https://demergent-labs.github.io/azle/get_started.html). + +``` + + + +}> + +```typescript + +Kybra code coming soon. + +[Learn more about Kybra](https://demergent-labs.github.io/kybra/). ``` diff --git a/submodules/internetidentity b/submodules/internetidentity index 29f7f61ae3..ad5aebfb8b 160000 --- a/submodules/internetidentity +++ b/submodules/internetidentity @@ -1 +1 @@ -Subproject commit 29f7f61ae375ab2a0250db9df3e94efff1ad23b7 +Subproject commit ad5aebfb8b54b5bdf4aaaba98b80766abb57d72a diff --git a/submodules/motoko b/submodules/motoko index 074ffca17f..a5f51a7fff 160000 --- a/submodules/motoko +++ b/submodules/motoko @@ -1 +1 @@ -Subproject commit 074ffca17f95a3da876d8d0dda4d123cd5c16674 +Subproject commit a5f51a7fffcd393f562bdaa8bccca65dd3bae844 diff --git a/submodules/quill b/submodules/quill index 88158f521f..5a5a9ad4a7 160000 --- a/submodules/quill +++ b/submodules/quill @@ -1 +1 @@ -Subproject commit 88158f521f5f777bfe3ce68e5b21e1f2bc9fcadd +Subproject commit 5a5a9ad4a72ea9fa9f0adad5c3b11b00ced78db9 diff --git a/submodules/sdk b/submodules/sdk index 0cf8c452a5..1c22db89ac 160000 --- a/submodules/sdk +++ b/submodules/sdk @@ -1 +1 @@ -Subproject commit 0cf8c452a5e51fddb73f9cf0a8d1878b122fcce8 +Subproject commit 1c22db89ac1f9f96384902c91aa27bac1c1eff36 From 98902dc9512a3226611235e837743e69fc0e7b3c Mon Sep 17 00:00:00 2001 From: Jessie Mongeon Date: Thu, 21 Nov 2024 16:59:07 -0600 Subject: [PATCH 38/47] init --- .../smart-contracts/maintain/control.mdx | 32 +- .../smart-contracts/maintain/delete.mdx | 2 +- .../smart-contracts/maintain/history.mdx | 36 +- .../smart-contracts/maintain/import.mdx | 205 +++--------- .../smart-contracts/maintain/logs.mdx | 90 +---- .../smart-contracts/maintain/recovery.mdx | 2 +- .../smart-contracts/maintain/settings.mdx | 310 +++--------------- .../smart-contracts/maintain/snapshots.mdx | 38 +-- .../smart-contracts/maintain/state.mdx | 31 +- .../smart-contracts/maintain/storage.mdx | 11 +- .../smart-contracts/maintain/trapping.mdx | 49 ++- .../smart-contracts/maintain/upgrade.mdx | 21 +- 12 files changed, 201 insertions(+), 626 deletions(-) diff --git a/docs/developer-docs/smart-contracts/maintain/control.mdx b/docs/developer-docs/smart-contracts/maintain/control.mdx index 8e6e3c0d81..78e8bde741 100644 --- a/docs/developer-docs/smart-contracts/maintain/control.mdx +++ b/docs/developer-docs/smart-contracts/maintain/control.mdx @@ -9,39 +9,19 @@ import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; # Control - + ## Overview -A canister is managed by a list of controllers. A controller is specified by a principal, which can be self-authenticating, e.g. a `dfx` developer identity, or another canister. Canisters can have multiple controllers where each controller has the same administrative rights, or it has no controller, in which case the canister becomes immutable, or blackholed, and cannot be upgraded or deleted. +A canister is managed by a list of controllers. A controller is specified by a principal, which can be self-authenticating, e.g. a `dfx` developer identity, or another canister. Canisters can have multiple controllers where each has the same administrative rights, or it can have no controller, in which case the canister becomes immutable (blackholed) and cannot be upgraded or deleted. ## Setting the controllers of a canister -The controllers of a canister are set when the canister is created. If no explicit controller settings are specified, the default controller is the principal that created the canister. If the canister is created with `dfx` then the default controller list contains the current developer identity. +When a canister is created, the default controller list contains the developer identity used to create the canister. Additional controllers can be specified during canister creation or they can be added in the future. -## Update the controllers of a canister +To specify controllers upon canister creation, the [`dfx canister create --controller`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-create) command can be used. -The controllers of a canister can be updated by any of the existing controllers. To update the controllers with `dfx`, the following commands can be used: - -### Add a controller - -```sh -dfx canister update-settings CANISTER_NAME --add-controller CONTROLLER -``` - -### Remove a controller - -```sh -dfx canister update-settings CANISTER_NAME --remove-controller CONTROLLER -``` - -### Set the controller - -The following command sets only the specified controller and removes all other controllers: - -```sh -dfx canister update-settings CANISTER_NAME --set-controller CONTROLLER -``` +To update a canister's controllers after the canister has been created, the [`dfx canister update-settings`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-update-settings) command can be used with the `--add-controller` or `--remove-controller` flag to add or remove controllers respectively. ## Actions available only to controllers @@ -68,7 +48,7 @@ A canister that can be used for this purpose is the [Threshold canister](https:/ The [Launchtrail canister](https://github.com/spinner-cash/launchtrail) can be used to schedule the upgrade of a canister at a future time to give the public enough time to review the proposed changes. The canister also keeps a complete record of all actions and their execution results. The Launchtrail canister itself should be immutable without a controller. -### Decentralized Autonomous Organization (DAO) +### Decentralized autonomous organization (DAO) A canister is controlled by a DAO, and all upgrades and administrative actions are decided by a vote of the DAO members. The most common DAO model for applications on the Internet Computer is the [Service Nervous System (SNS)](/docs/developer-docs/daos/sns/index.mdx). diff --git a/docs/developer-docs/smart-contracts/maintain/delete.mdx b/docs/developer-docs/smart-contracts/maintain/delete.mdx index cd15797a5d..1a90ecde6b 100644 --- a/docs/developer-docs/smart-contracts/maintain/delete.mdx +++ b/docs/developer-docs/smart-contracts/maintain/delete.mdx @@ -7,7 +7,7 @@ import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; # Delete - + ## Overview diff --git a/docs/developer-docs/smart-contracts/maintain/history.mdx b/docs/developer-docs/smart-contracts/maintain/history.mdx index 739ba0401a..6f155bcf45 100644 --- a/docs/developer-docs/smart-contracts/maintain/history.mdx +++ b/docs/developer-docs/smart-contracts/maintain/history.mdx @@ -44,19 +44,29 @@ To get a canister's history, make a call to the IC management canister's `canist ```motoko -actor { - let IC = - actor "aaaaa-aa" : actor { - canister_info : { - canister_id : Principal; - num_requested_changes : ?Nat64; - } -> async { - total_num_changes : Nat64; - // module_hash : ?Blob; - controllers : [Principal]; - }; - } -}; +import Principal "mo:base/Principal"; + +actor Info { + type canister_info_args = { + canister_id : Principal; + num_requested_changes : ?Nat64 + }; + + type canister_info_result = { + total_num_changes : Nat64; + module_hash : ?Blob; + controllers : [Principal] + }; + + let IC = actor "aaaaa-aa" : actor { + canister_info : {canister_id : Principal} -> async canister_info_result + }; + + public func getInfo() : async canister_info_result { + await IC.canister_info {canister_id = Principal.fromActor(Info)} + } + +} ``` diff --git a/docs/developer-docs/smart-contracts/maintain/import.mdx b/docs/developer-docs/smart-contracts/maintain/import.mdx index 910b8a36d9..93795236e7 100644 --- a/docs/developer-docs/smart-contracts/maintain/import.mdx +++ b/docs/developer-docs/smart-contracts/maintain/import.mdx @@ -19,11 +19,11 @@ Third-party canisters include canisters created by DFINITY or by developers in I - Using non-production data and environments. - Faster completion time when run locally. -To pull these canisters from the mainnet to be tested using a local replica, the [`dfx deps`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-deps) command and workflow can be used. +To pull these canisters from the mainnet to be tested locally, the [`dfx deps`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-deps) command and workflow can be used. In this workflow, a **service provider** configures a canister to be `pullable`, then deploys the canister to the mainnet. A service provider can be any community developer creating a public, third-party canister. -Then a **service consumer** can pull the canister as a dependency directly from the mainnet and then deploy the dependency on a local replica. +Then a **service consumer** can pull the canister as a dependency directly from the mainnet and then deploy the dependency locally. ## Determining if a canister should be `pullable` @@ -39,39 +39,9 @@ If a service canister depends on other canisters, those dependencies should also If the canister is meant for personal use and not intended for others, the canister should not be `pullable`. -If a canister Wasm is published for other developers to use the canister should not be `pullable` since the canister ID of the instance is not static. Users can test integrations locally and deploy them directly. An example of this canister type is the asset canister generated by dfx. +If a canister's Wasm is published for other developers to use, then the canister should not be `pullable` since the canister ID of the instance is not static. Users can test integrations locally and deploy them directly using the Wasm file directly. -## `Pullable` dfx.json example - -For a canister to be `pullable`, the `dfx.json` file must include a `pullable` definition: - -```json -{ - "canisters": { - "service": { - "type": "motoko", - "main": "src/pullable/main.mo", - "pullable": { - "dependencies": [], - "wasm_url": "https://github.com/lwshang/pullable/releases/latest/download/service.wasm", - "init_guide": "A natural number, e.g. 1" - } - } - } -} -``` - -:::caution -The Wasm module of a `pullable` canister must be hosted via a URL so that service consumers can download it. - -GitHub Releases are a good, free option if the project is open source on GitHub. The GitHub URL schema is: - -`https://github.com///releases/latest/download/` - -In a future version of this feature, direct Wasm downloads from the replica will likely be supported. -::: - -## Service provider workflow overview +## Service provider workflow First, a service provider must configure a canister to be `pullable` by setting it as such in the `dfx.json` file. An example of a provider `dfx.json` which has a `pullable` "service" canister can be found below: @@ -95,39 +65,42 @@ An example of a provider `dfx.json` which has a `pullable` "service" canister ca } ``` +:::danger +The Wasm module of a `pullable` canister must be hosted via a public URL where service consumers can download it. + +GitHub Releases are a good, free option if the project is open source on GitHub. The GitHub URL schema is: + +`https://github.com///releases/latest/download/` + +::: + The `pullable` object will be serialized as a part of the `dfx` metadata and attached to the Wasm. -To better understand the `pullable` object, let's look at each property in depth. +To better understand the `pullable` object, let's look at each property in depth: - `wasm_url`: A URL used to download the canister Wasm module which will be deployed locally. -- `wasm_hash`: A SHA256 hash of the Wasm module located at `wasm_url`. This field is optional. In most cases, the Wasm module at `wasm_url` will be the same as the onchain Wasm module. This means that dfx can read the state tree to obtain and verify the module hash. In some cases, the Wasm module at `wasm_url` is not the same as the onchain Wasm module. For example, the Internet Identity canister provides a `development` variant to be integrated locally. In these cases, `wasm_hash` provides the expected hash, and `dfx` verifies the downloaded Wasm against this. +- `wasm_hash`: A SHA256 hash of the Wasm module located at `wasm_url`. This field is optional. In most cases, the Wasm module at `wasm_url` will be the same as the onchain Wasm module. This means that `dfx` can read the state tree to obtain and verify the module hash. In some cases, the Wasm module at `wasm_url` is not the same as the onchain Wasm module. For example, the Internet Identity canister provides a `development` variant to be integrated locally. In these cases, `wasm_hash` provides the expected hash, and `dfx` verifies the downloaded Wasm against this. :::caution -If the `wasm_hash` of the Wasm module at `wasm_url` does not match, dfx will abort with an error message indicating that there is a hash mismatch. In this scenario, the service consumer should contact the service provider. It is the responsibility of the service provider to assure that the correct Wasm module can be downloaded from the `wasm_url`. +If the `wasm_hash` of the Wasm module at `wasm_url` does not match, `dfx` will abort with an error message indicating that there is a hash mismatch. In this scenario, the service consumer should contact the service provider. It is the responsibility of the service provider to assure that the correct Wasm module can be downloaded from the `wasm_url`. ::: -- `dependencies`: An array of Canister IDs (`Principal`) of direct dependencies. +- `dependencies`: An array of canister IDs (`Principal`) of direct dependencies. - `init_guide`: A message to guide consumers how to initialize the canister. ### Canister metadata requirements -A service provider canister used in production or in a production environment running on the mainnet should have public `dfx` metadata. - -The canister Wasm downloaded from `wasm_url` should have the following metadata (public or private): - -- `candid:service` -- `candid:args` -- `dfx` +A service provider canister used in production or in a production environment running on the mainnet should have public `dfx` metadata and public or private `candid:service` and `candid:args` metadata. All metadata sections are handled by `dfx` when the canister is built. ### Deployment process -Service providers will use the following deployment process to deploy their `pullable` canister. +Service providers should use the following deployment process to deploy their `pullable` canister. -- #### Step 1: Deploy the canister to the mainnet with the command: +- #### Step 1: From within your project's repo, deploy the canister to the mainnet with the command: ``` -dfx deploy --network ic +dfx deploy --network ic ``` - #### Step 2: If you're using GitHub, `git tag` and `GitHub release` with the commands: @@ -140,9 +113,8 @@ git push --tags You can follow [this guide](https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository#creating-a-release) to create a release. - #### Step 3: Attach the Wasm to the release assets. -Edit the release and attach the deployed Wasm as a release asset. -The deployed Wasm file will be located at: +Edit the release and attach the deployed Wasm as a release asset. The deployed Wasm file will be located at: ``` .dfx/ic/canisters//.wasm @@ -158,15 +130,15 @@ The workflow with CI will follow these steps: 2. Download the canister Wasm from the release assets (`wget https://github.com/lwshang/pullable/releases/latest/download/service.wasm`). 3. Install (upgrade) the canister using the downloaded Wasm (`dfx canister --network ic install service --wasm service.wasm --argument '(1 : nat)' --mode upgrade`). -## Service consumer workflow overview +## Consumer workflow -The following workflow can be used for service consumers to pull a `pullable` canister as a dependency. +The following workflow can be used for consumers to pull a `pullable` canister as a dependency. -### Step 1: Declare "pull" dependencies in `dfx.json`. +- #### Step 1: Declare "pull" dependencies in `dfx.json`. -First, to pull the dependencies from the mainnet, the `dfx.json` file must include the `dependencies` configuration for the canister. +First, the `dfx.json` file must include the `dependencies` configuration for the canister. -An example `dfx.json` in which the service consumer is developing a canister named "dapp", which has two pull dependencies, can be found below: +An example `dfx.json` in which the consumer is developing a canister named "dapp" that has two pull dependencies can be found below: - "dep_b" has canister ID of `yhgn4-myaaa-aaaaa-aabta-cai` on the mainnet. - "dep_c" has canister ID of `yahli-baaaa-aaaaa-aabtq-cai` on the mainnet. @@ -193,9 +165,13 @@ An example `dfx.json` in which the service consumer is developing a canister nam } ``` -### Step 2: Pull the dependencies using the `dfx deps pull` command. +- #### Step 2: Pull the dependencies using the `dfx deps pull` command. + +:::danger +`dfx deps pull` connects to the mainnet by default (`--network ic`). You can choose other network as usual, e.g. `--network local`. +::: -Running the command `dfx deps pull` will do the following: +Running this command will do the following: 1. First, it will resolve the dependency graph by fetching the `dependencies` field in the `dfx` metadata recursively. 2. Then, it will download the Wasm of all direct and indirect dependencies from `wasm_url` into the shared cache. @@ -205,7 +181,7 @@ Running the command `dfx deps pull` will do the following: 6. The `candid:service` of direct dependencies is saved as `deps/candid/.did`. 7. The `deps/pulled.json` which contains major info of all direct and indirect dependencies is saved. -For the example project, you will find following files in `deps/`: +For the example project, you will find the following files in `deps/`: - `yhgn4-myaaa-aaaaa-aabta-cai.did` and `yahli-baaaa-aaaaa-aabtq-cai.did`: Candid files that can be imported by "dapp". - `pulled.json`: A json file with the following content: @@ -245,13 +221,9 @@ In this file, you can see there are three dependencies: - `yhgn4-myaaa-aaaaa-aabta-cai`: "dep_b" in `dfx.json`. - `yahli-baaaa-aaaaa-aabtq-cai`: "dep_c" in `dfx.json`. -- `yofga-2qaaa-aaaaa-aabsq-cai`: an indirect dependency that both "dep_b" and "dep_c" depend on. +- `yofga-2qaaa-aaaaa-aabsq-cai`: An indirect dependency that both "dep_b" and "dep_c" depend on. -:::caution -`dfx deps pull` connects to the mainnet by default (`--network ic`). You can choose other network as usual, e.g. `--network local`. -::: - -### Step 3: Set init arguments using `dfx deps init` +- #### Step 3: Set init arguments using `dfx deps init` Running the command `dfx deps init` will iterate over all dependencies in the `pulled.json` file and set an empty argument for any that do not need an `init` argument. Then, it will print the list of dependencies that do require an `init` argument. @@ -263,27 +235,23 @@ Using the example above, you can run the following commands: ``` dfx deps init +``` + +

+Output WARN: The following canister(s) require an init argument. Please run `dfx deps init ` to set them individually: yofga-2qaaa-aaaaa-aabsq-cai yahli-baaaa-aaaaa-aabtq-cai (dep_c) -``` +
- If you try to set an `init` argument for an individual dependency without an argument, it will result in the following error: ``` -dfx deps init yofga-2qaaa-aaaaa-aabsq-cai Error: Canister yofga-2qaaa-aaaaa-aabsq-cai requires an init argument. The following info might be helpful: init_guide => A natural number, e.g. 10. candid:args => (nat) ``` -``` -dfx deps init deps_c -Error: Canister yahli-baaaa-aaaaa-aabtq-cai (dep_c) requires an init argument. The following info might be helpful: -init_guide => A natural number, e.g. 20. -candid:args => (nat) -``` - - To set an init argument with an argument using the `--argument` flag, the following commands can be used: ``` @@ -312,112 +280,35 @@ The resulting generated file `init.json` will have the following content: } ``` -### Step 4: Deploy the pulled dependencies on a local replica using the `dfx deps deploy` command. +- #### Step 4: Deploy the pulled dependencies on a local replica using the `dfx deps deploy` command. Running the `dfx deps deploy` command will: 1. First, create the dependencies on the local replica with the same mainnet canister ID. 2. Then, it will install the downloaded Wasm with the init arguments in the `init.json` file. -You can also specify the name or principal to deploy one particular dependency. +You can also specify the canister name or principal to deploy one particular dependency. Using the example above, you can run the following command to deploy all dependencies: ``` dfx deps deploy +``` + +
+Output Creating canister: yofga-2qaaa-aaaaa-aabsq-cai Installing canister: yofga-2qaaa-aaaaa-aabsq-cai Creating canister: yhgn4-myaaa-aaaaa-aabta-cai (dep_b) Installing canister: yhgn4-myaaa-aaaaa-aabta-cai (dep_b) Creating canister: yahli-baaaa-aaaaa-aabtq-cai (dep_c) Installing canister: yahli-baaaa-aaaaa-aabtq-cai (dep_c) -``` - -To deploy one particular dependency, the following command can be used: - -``` -dfx deps deploy yofga-2qaaa-aaaaa-aabsq-cai -Installing canister: yofga-2qaaa-aaaaa-aabsq-cai -``` - -``` -dfx deps deploy dep_b -Installing canister: yhgn4-myaaa-aaaaa-aabta-cai (dep_b) -``` +
:::info `dfx deps deploy` always creates the canister with the anonymous identity so that dependencies and application canisters will have different controllers. It will also always install the canister in "reinstall" mode so that the canister status will be discarded. ::: -## Interactive example - -Now that you've explored the concepts and overview of using the `dfx deps` workflow, let's take a look at using an interactive example to demonstrate the functionality. - -This example project will demonstrate an application canister pulling its dependency from the mainnet and integrating with it locally. - -In this example, the `app` canister defines a method called `double_service` which makes an inter-canister call to the `service` canister. - -- #### Step 1: First, assure that you have installed the [IC SDK](https://github.com/dfinity/sdk). - -- #### Step 2: Then, open a terminal window and create a new dfx project with the command: - -``` -dfx new pull_deps_example -``` - -- #### Step 3: Then, open the project's `dfx.json` file in a text or code editor. Declare the pull dependency with the following configuration: - -``` -{ - "canisters": { - "service": { - "type": "pull", - "id": "ig5e5-aqaaa-aaaan-qdxya-cai" - } - }, -} -``` - -Save the file. - -- #### Step 4: Use `dfx deps pull` to pull from the mainnet: - -``` -dfx deps pull -Fetching dependencies of canister ig5e5-aqaaa-aaaan-qdxya-cai... -Found 1 dependencies: -ig5e5-aqaaa-aaaan-qdxya-cai -Pulling canister ig5e5-aqaaa-aaaan-qdxya-cai... -``` - -- #### Step 5: Configure the `init` argument: - -``` -dfx deps init service --argument 1 -``` - -- #### Step 6: Deploy on a local replica with the commands: - -``` -dfx start --clean --background -dfx deps deploy -dfx deploy app -``` - -- #### Step 7: Test the app by making the following call: - -``` -dfx canister call app double_service -``` - -In this step, the `app` canister's `double_service` method is being called, which sends an inter-canister call to the `service` canister. The call will succeed since both canisters are now deployed on the local replica. - -The output will resemble the following: - -``` -(2 : nat) -``` - ## Frequently asked questions - #### Why download the Wasm into shared cache instead of a project subfolder? diff --git a/docs/developer-docs/smart-contracts/maintain/logs.mdx b/docs/developer-docs/smart-contracts/maintain/logs.mdx index 5e99b5b927..08b1c246de 100644 --- a/docs/developer-docs/smart-contracts/maintain/logs.mdx +++ b/docs/developer-docs/smart-contracts/maintain/logs.mdx @@ -23,7 +23,11 @@ The canister logging feature is designed to p - Queries, only if called in replicated mode. -A canister's controller is able to retrieve the canister's logs, even when executions trap, using `dfx canister logs`. +A canister's controller is able to retrieve the canister's logs, even when executions trap, using [`dfx canister logs`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-logs): + +``` +dfx canister logs +``` :::info Non-replicated calls are not currently supported for logging. @@ -31,9 +35,9 @@ Non-replicated calls are not currently supported for logging. ## Log visibility -By default, a canister's logs are only visible to the controllers of the canister. A canister's logs can be made public with the `--log-visibility` flag: +By default, a canister's logs are only visible to the controllers of the canister. A canister's logs can be made public by updating the canister's settings with [`dfx canister update-settings`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-update-settings) command: -``` +```bash dfx canister update-settings CANISTER_ID --log-visibility public ``` @@ -41,84 +45,18 @@ dfx canister update-settings CANISTER_ID --log-visibility public Canister log allow lists enable principals that are not controllers of the canister to view the logs without the logs being public. Log allow lists are supported in `dfx` versions `0.24.2` and newer. -To add a principal to the canister's log allow list, update the canister's settings with the `--set-log-viewer` or `--add-log-viewer` flags: +To add a principal to the canister's log allow list, update the canister's settings with the flags: -``` -dfx canister update-settings CANISTER_ID --set-log-viewer PRINCIPAL_ID // Set a single principal as a log viewer -dfx canister update-settings CANISTER_ID --add-log-viewer PRINCIPAL_ID // Add a principal to a list of log viewers -``` +- `dfx canister update-settings CANISTER_ID --set-log-viewer PRINCIPAL_ID`: Set a single principal as a log viewer. -You can also configure a principal as a log viewer when you create a canister with: +- `dfx canister update-settings CANISTER_ID --add-log-viewer PRINCIPAL_ID`: Add a principal to a list of log viewers. -``` -dfx canister create CANISTER_NAME --log-viewer PRINCIPAL_ID -``` +- `dfx canister update-settings CANISTER_ID --remove-log-viewer PRINCIPAL_ID`: Remove a principal from the log viewer list. -Or, you can set the `canisters[].initialization_values.log_visibility.allowed_viewers` configuration setting in your project's `dfx.json` file. - -To remove a principal from the canister's log allow list, use the `--remove-log-viewer` flag: +You can also configure a principal as a log viewer when you create a canister: ``` -dfx canister update-settings CANISTER_ID --remove-log-viewer PRINCIPAL_ID -``` - -## Using `dfx` - -A canister's logs can be viewed using the [`dfx canister logs`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister/#dfx-canister-logs) command. - -As an example, consider a Rust canister with the following code: - -```rust -use std::cell::RefCell; - -use candid::{Nat, Principal}; -use ic_cdk::{ - export_candid, println, -}; - -thread_local! { - // create a cell that holds a counter - static COUNTER: std::cell::RefCell = RefCell::default(); -} - - -#[ic_cdk::update] -fn produce_logs() { - // print the counter value - COUNTER.with_borrow_mut(|counter| { - println!("counter: {}", *counter); - *counter += 1; - }); -} - -export_candid!(); -``` - -This simple canister provides an incremental counter method that includes a print function that will return output to the command line and the canister's logs. - -:::info -Note that this example uses update calls, as non-replicated query calls do not currently support logging. -::: - -You can call the canister's method and view the associated logged output for each call. For example, if this canister is deployed as `logs_backend`, you can call the canister's `produce_logs` method a few times to increment the counter and get the following command line output: - -``` -dfx canister call logs_backend produce_logs -2024-06-04 21:14:25.882276 UTC: [Canister br5f7-7uaaa-aaaaa-qaaca-cai] counter: 0 -() -dfx canister call logs_backend produce_logs -2024-06-04 21:18:18.094003 UTC: [Canister br5f7-7uaaa-aaaaa-qaaca-cai] counter: 1 -() -dfx canister call logs_backend produce_logs -2024-06-04 21:18:46.036022 UTC: [Canister br5f7-7uaaa-aaaaa-qaaca-cai] counter: 2 -() +dfx canister create CANISTER_NAME --log-viewer PRINCIPAL_ID ``` -Then, you can call the canister's logs, which in this case will return the same output that was logged to the command line: - -``` -dfx canister logs logs_backend -[0. 2024-06-04T21:14:25.882276Z]: counter: 0 -[1. 2024-06-04T21:18:18.094003Z]: counter: 1 -[2. 2024-06-04T21:18:46.036022Z]: counter: 2 -``` \ No newline at end of file +Or, you can set the `canisters[].initialization_values.log_visibility.allowed_viewers` configuration setting in your project's `dfx.json` file. diff --git a/docs/developer-docs/smart-contracts/maintain/recovery.mdx b/docs/developer-docs/smart-contracts/maintain/recovery.mdx index f52eb61d83..14b9dfff8d 100644 --- a/docs/developer-docs/smart-contracts/maintain/recovery.mdx +++ b/docs/developer-docs/smart-contracts/maintain/recovery.mdx @@ -11,7 +11,7 @@ import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; ## Overview -A canister is managed and maintained by **controllers**. A controller can be a single developer identity, a list of developer identities, or another canister. If a canister does not have a controller, it cannot be upgraded, deleted, or otherwise maintained. Canisters can have several controllers. If access to a canister's controller(s) is lost, the canister cannot be upgraded or further maintained. If a canister's code traps with an unrecoverable error and cannot be upgraded, the canister can potentially be recovered using canister snapshots or an NNS proposal. +A canister is managed and maintained by **controllers**. A controller can be a single developer identity, a list of developer identities, or another canister. If a canister does not have a controller, it cannot be upgraded, deleted, or otherwise maintained. If access to a canister's controller(s) is lost, the canister cannot be deleted, upgraded or further maintained. If a canister's code traps with an unrecoverable error and cannot be upgraded, the canister can potentially be recovered using canister snapshots or an NNS proposal. ## Canister snapshots diff --git a/docs/developer-docs/smart-contracts/maintain/settings.mdx b/docs/developer-docs/smart-contracts/maintain/settings.mdx index dd3675042d..5d5e08e118 100644 --- a/docs/developer-docs/smart-contracts/maintain/settings.mdx +++ b/docs/developer-docs/smart-contracts/maintain/settings.mdx @@ -9,162 +9,90 @@ import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; # Settings - + ## Overview -Each canister has a group of possible settings that control its behavior. Only a controller of the canister can read and modify its settings. Currently, there are seven canister setting fields: +Each canister has a group of possible settings that control its behavior. + +:::caution +Only a controller of the canister can read and modify a canister's settings. +::: + +Currently, there are seven canister setting fields: 1. `controllers`: The list of controllers of the canister. -1. `compute_allocation`: Amount of compute that this canister has allocated. -1. `memory_allocation`: Amount of memory (storage) that this canister has allocated. -1. `freezing_threshold`: A safety threshold to protect against canister deletion due to running out of cycles. +1. `compute_allocation`: Amount of compute that the canister has allocated. +1. `memory_allocation`: Amount of memory (storage) that the canister has allocated. +1. `freezing_threshold`: A safety threshold to prevent the canister from running out of cycles and avoid being deleted. 1. `reserved_cycles_limit`: A safety threshold to protect against spending too many cycles for resource reservation. 1. `wasm_memory_limit`: A safety threshold to protect against reaching the 4GiB hard limit of 32-bit Wasm memory. 1. `log_visibility`: Controls who can read the canister logs. -## Viewing a canister's current settings +## Viewing current settings There are two ways to read the settings of a canister: -1. Command line: `dfx canister status `. Note that this command returns canister settings together with other canister status information. -1. Programmatically: Call the `canister_status` endpoint of the IC management canister. The canister settings will be in the `settings` field of the result. +1. Command line: [`dfx canister status `](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-status). Note that this command returns the canister's settings, along with other canister status information. +2. Programmatically: Call the [`canister_status`](https://internetcomputer.org/docs/current/references/ic-interface-spec) endpoint of the IC management canister. The canister's settings will be in the `settings` field of the result. -Note that only a controller of the canister can read canister settings. - -An example of using `dfx` in a command line: +### Command line ```bash -> dfx canister status ajuq4-ruaaa-aaaaa-qaaga-cai +dfx canister status ajuq4-ruaaa-aaaaa-qaaga-cai +``` + +
+Output +``` Canister status call result for ajuq4-ruaaa-aaaaa-qaaga-cai. -Controllers: bi7oa-57tth-fsnsf-6xrdb-rruo4-fsiws-xkedg-2uzrc-t6jas-7fo3c-jqe bnz7o-iuaaa-aaaaa-qaaaa-cai +Status: Running +Controllers: hoqq7-3eo6j-dee4s-aiabk-6rqxw-kwgyo-rhru7-bdgmk-k5ipv-chkhx-cqe mwylj-4aaaa-aaaak-aflyq-cai Memory allocation: 0 Compute allocation: 0 Freezing threshold: 2_592_000 +Idle cycles burned per day: 31_243_414 +Memory Size: Nat(3057320) +Balance: 196_157_756_924 Cycles +Reserved: 0 Cycles Reserved cycles limit: 5_000_000_000_000 Cycles -Wasm memory limit: 0 Bytes -... +Wasm memory limit: 3_221_225_472 Bytes +Module hash: 0x46cb1e5494b8467a13d0b6a68156b044eb79ce1325aa4bd4a697e36c9b967129 +Number of queries: 1_469 +Instructions spent in queries: 429_285_142 +Total query request payload size (bytes): 1_626_898 +Total query response payload size (bytes): 1_161_862 +Log visibility: controllers ``` +
-An example of programmatically reading canister settings: +### Programmatically -```motoko -actor { - let IC = - actor "aaaaa-aa" : actor { - - canister_status : { canister_id : Principal } -> - async (); - - }; -}; -``` +For an example of how to use `canister_status` in your Motoko code, view the [sample application](https://github.com/dfinity/examples/blob/master/motoko/query_stats/src/query_stats_backend/main.mo). -```rust -use ic_cdk::api::call::CallResult; -use ic_cdk::api::management_canister::main::{ - canister_status, CanisterIdRecord, DefiniteCanisterSettings, -}; - -#[ic_cdk::update] -async fn read_canister_settings() -> CallResult { - let response = canister_status(CanisterIdRecord { - canister_id: ic_cdk::id(), - }) - .await? - .0; - println!("settings: {:?}", response.settings); - Ok(response.settings) -} -``` +For an example of how to use `canister_status` in your Rust code, view the [sample application](https://github.com/dfinity/examples/blob/master/rust/query_stats/src/lib.rs). }> -```typescript -import { call, IDL, Principal, query, update } from 'azle'; -import { - CanisterStatusArgs, - CanisterStatusResult, -} from 'azle/canisters/management'; - -type State = { - createdCanisterId: Principal; -}; - -let state: State = { - createdCanisterId: Principal.fromText('aaaaa-aa') -}; - -export default class { - - @update([CanisterStatusArgs], CanisterStatusResult) - async getCanisterStatus( - args: CanisterStatusArgs - ): Promise { - return await call('aaaaa-aa', 'canister_status', { - paramIdlTypes: [CanisterStatusArgs], - returnIdlType: CanisterStatusResult, - args: [args] - }); - } -} -``` +Azle code coming soon. + +[Learn more about Azle](https://demergent-labs.github.io/azle/the_azle_book.html). }> -```python -from kybra import ( - Async, - blob, - CallResult, - match, - nat, - Principal, - query, - update, - void, -) -from kybra.canisters.management import ( - CanisterStatusArgs, - CanisterStatusResult - management_canister, -) - -class GetCanisterStatusResult(Variant, total=False): - Ok: CanisterStatusResult - Err: str - - -class State(TypedDict): - created_canister_id: Principal - - -state: State = {"created_canister_id": Principal.from_str("aaaaa-aa")} - -@update -def get_canister_status(args: CanisterStatusArgs) -> Async[GetCanisterStatusResult]: - canister_status_result_call_result: CallResult[ - CanisterStatusResult - ] = yield management_canister.canister_status({"canister_id": args["canister_id"]}) - - return match( - canister_status_result_call_result, - { - "Ok": lambda canister_status_result: {"Ok": canister_status_result}, - "Err": lambda err: {"Err": err}, - }, - ) -``` +Kybra code coming soon. + +[Learn more about Kybra](https://demergent-labs.github.io/kybra/). @@ -174,153 +102,19 @@ def get_canister_status(args: CanisterStatusArgs) -> Async[GetCanisterStatusResu There are two ways to modify the settings of a canister: 1. Command line: `dfx canister update-settings -- `. -1. Programmatically: Call the `update_settings` endpoint of the IC management canister. +1. Programmatically: Call the [`update_settings`](/docs/current/references/ic-interface-spec#ic-update_settings) endpoint of the IC management canister. Note that only a controller of the canister can modify canister settings. -An example of using `dfx` in a command line: +### Command line ```bash -> dfx canister update-settings ajuq4-ruaaa-aaaaa-qaaga-cai --wasm-memory-limit 3000000000 -> dfx canister status ajuq4-ruaaa-aaaaa-qaaga-cai -... -Wasm memory limit: 3_000_000_000 Bytes -... +dfx canister update-settings ajuq4-ruaaa-aaaaa-qaaga-cai --wasm-memory-limit 3000000000 ``` -An example of programmatically modifying canister settings: +### Programmatically - - - -```motoko -actor { - let IC = - actor "aaaaa-aa" : actor { - update_settings : { canister_id : Principal } -> - async (); - }; -}; -``` - - - - -```rust -use ic_cdk::api::call::CallResult; -use ic_cdk::api::management_canister::main::{ - update_settings, CanisterSettings, UpdateSettingsArgument, -}; -use candid::Nat; - -#[ic_cdk::update] -async fn modify_canister_settings() -> CallResult<()> { - update_settings(UpdateSettingsArgument{ - canister_id: ic_cdk::id(), - settings: CanisterSettings { - wasm_memory_limit: Some(Nat::from(3_000_000_000_u64)), - // Other fields remain the same. - .. CanisterSettings::default() - } - }) - .await -} -``` - - - -}> - -```typescript -import { call, IDL, Principal, query, update } from 'azle'; -import { - UpdateSettingsArgs, -} from 'azle/canisters/management'; - -type State = { - createdCanisterId: Principal; -}; - -let state: State = { - createdCanisterId: Principal.fromText('aaaaa-aa') -}; - -export default class { - @update([IDL.Principal], IDL.Bool) - async executeUpdateSettings(canisterId: Principal): Promise { - await call('aaaaa-aa', 'update_settings', { - paramIdlTypes: [UpdateSettingsArgs], - args: [ - { - canister_id: canisterId, - settings: { - controllers: [], - compute_allocation: [1n], - memory_allocation: [3_000_000n], - freezing_threshold: [2_000_000n], - reserved_cycles_limit: [] - }, - sender_canister_version: [] - } - ] - }); - - return true; - } -} -``` - - - -}> - -```python -from kybra import ( - Async, - blob, - CallResult, - match, - nat, - Principal, - query, - update, - void, -) -from kybra.canisters.management import ( - management_canister, -) - -from typing import TypedDict - - -class State(TypedDict): - created_canister_id: Principal - - -state: State = {"created_canister_id": Principal.from_str("aaaaa-aa")} - - -@update -def execute_update_settings(canister_id: Principal) -> Async[DefaultResult]: - call_result: CallResult[void] = yield management_canister.update_settings( - { - "canister_id": canister_id, - "settings": { - "controllers": None, - "compute_allocation": 1, - "memory_allocation": 3_000_000, - "freezing_threshold": 2_000_000, - }, - } - ) - - return match( - call_result, {"Ok": lambda _: {"Ok": True}, "Err": lambda err: {"Err": err}} - ) -``` - - - +From within your canister, make a call to the [`update_settings`](/docs/current/references/ic-interface-spec#ic-update_settings) endpoint of the IC management canister. ## Controllers @@ -339,7 +133,7 @@ For example, an idle canister that has compute allocation of 50% for one hour wi :::info The rental fee increases the amount of cycles a canister consumes while idle or frozen. To successfully increase the compute allocation, a canister must have sufficient cycles -to run for at least [freezing threshold](#freezing-threshold) seconds. +to run for at least the current [freezing threshold](#freezing-threshold) number of seconds. ::: The default value of compute allocation is 0%. @@ -362,7 +156,7 @@ Canisters pay a rental fee for memory allocation, meaning that the payment depen :::info The rental fee increases the amount of cycles a canister consumes while idle or frozen. To successfully increase the memory allocation, a canister must have sufficient cycles -to run for at least [freezing threshold](#freezing-threshold) seconds. +to run for at least the current [freezing threshold](#freezing-threshold) number of seconds. ::: The default value of memory allocation is 0 bytes, which means that there is no default memory allocation. @@ -382,7 +176,7 @@ A frozen canister does not execute messages and pays only for renting resources See also the `idle_cycles_burned_per_day` field in the canister's status to learn how many cycles a canister consumes in its idle or frozen state. ::: -The default value of the freezing threshold is 2592000 (approximately 30 days). +The default value of the freezing threshold is 2_592_000 (approximately 30 days). ## Reserved cycles limit diff --git a/docs/developer-docs/smart-contracts/maintain/snapshots.mdx b/docs/developer-docs/smart-contracts/maintain/snapshots.mdx index 47e5eacdf0..72ea83b43c 100644 --- a/docs/developer-docs/smart-contracts/maintain/snapshots.mdx +++ b/docs/developer-docs/smart-contracts/maintain/snapshots.mdx @@ -19,69 +19,65 @@ Canister snapshots are supported in `dfx` version 0.23.0 and newer. ## Creating a snapshot -To create a snapshot, first the canister must be stopped. Then, use the `dfx canister snapshot create` command: +To create a snapshot, first the canister must be stopped. Then, use the [`dfx canister snapshot create`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-snapshot-create) command: ``` dfx canister stop dfx canister snapshot create ``` +
+Output + +``` +Created a new snapshot of canister hello_backend. Snapshot ID: 0000000000000000800000000010000a0101 +``` + +
+ Only a controller of a canister can take a snapshot or roll a canister back to a snapshot. :::info Currently, only one snapshot per canister can be saved. Taking another snapshot of a canister that already has a snapshot saved will overwrite the previous snapshot. -::: -:::info To take a snapshot of a canister on the mainnet, include the flag `--network ic` in the two commands shown above. ::: -The canister snapshot ID will be returned: - -``` -Created a new snapshot of canister hello_backend. Snapshot ID: 0000000000000000800000000010000a0101 -``` -This ID can be used to load the snapshot at a later time. To list all snapshots saved for a canister, use the command: +The Snapshot ID can be used to load the snapshot at a later time. To list all snapshots saved for a canister, use the command [`dfx canister snapshot list`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-snapshot-list): ``` dfx canister snapshot list ``` -The snapshot ID, snapshot size, and timestamp of when the snapshot was taken will be returned: +
+Output ``` 0000000000000000800000000010000a0101: 2.39MiB, taken at 2024-09-16 19:40:23 UTC ``` +
+ ## Loading a snapshot -To load a saved snapshot, first the canister must be stopped. Then, use the `dfx canister snapshot load` command: +To load a saved snapshot, first the canister must be stopped. Then, use the [`dfx canister snapshot load`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-snapshot-load) command: ``` dfx canister stop dfx canister snapshot load ``` -:::info -To load a snapshot on the mainnet, include the flag `--network ic` in the two commands shown above. -::: - Loading a snapshot will replace the canister's current code and data with the snapshot code and data. Any new data that was added to the canister after the snapshot was taken will be deleted. ## Deleting snapshots -To delete a saved snapshot, use the command: +To delete a saved snapshot, use the command [`dfx canister snapshot delete`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-snapshot-delete) ``` dfx canister snapshot delete ``` -:::info -To delete a snapshot on the mainnet, include the flag `--network ic` in the command shown above. -::: - - ## Errors related to canister snapshots Common errors related to canister snapshots include: diff --git a/docs/developer-docs/smart-contracts/maintain/state.mdx b/docs/developer-docs/smart-contracts/maintain/state.mdx index c84b3311bb..7a7b1a553a 100644 --- a/docs/developer-docs/smart-contracts/maintain/state.mdx +++ b/docs/developer-docs/smart-contracts/maintain/state.mdx @@ -7,7 +7,7 @@ import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; # State - + ## Overview @@ -15,31 +15,10 @@ After you deploy a canister, it can begin rec Although canisters are normally placed in the Running state by default, there are cases where you might want to temporarily or permanently stop a canister. For example, you might want to stop a canister before upgrading it. Stopping a canister helps to ensure proper handling of any messages that are in progress and need to either run to completion or be rolled back. You might also want to stop a canister to clear its message queue cleanly as a prerequisite to deleting the canister. -You can check the current status of all canisters or a specified canister by running the `dfx canister status` command. For example, to see the status for all canisters running on the local canister execution environment, you would run the following command: +To modify the state of a canister: - dfx canister status --all +- [`dfx canister status `](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-status): Check if the canister is Running, Stopping, or Stopped. This command also returns details about the canister's settings. -This command returns output similar to the following if canisters are currently running: +- [`dfx canister stop `](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-stop): Stop the canister. The canister's status will change to Stopping if it has in-flight messages that must be addressed before it can be stopped. - Canister status_check's status is Running. - Canister status_check_assets's status is Running. - -You can stop canisters that are currently running by running the `dfx canister stop` command. - - dfx canister stop --all - -This command displays output similar to the following: - - Stopping code for canister status_check, with canister_id 75hes-oqbaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-q - Stopping code for canister status_check_assets, with canister_id cxeji-wacaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-q - -If you were to rerun the `dfx canister status` command, you might see a status of `Stopped` indicating that there were no pending messages that needed to processed or a status of `Stopping` indicating that there were messages in-flight that needed to be addressed. - -To restart a canister-for example, after a successful canister upgrade—you can run the `dfx canister start` command. For example, to restart all of the canisters, you would run the following command: - - dfx canister start --all - -This command displays output similar to the following: - - Starting code for canister status_check, with canister_id 75hes-oqbaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-q - Starting code for canister status_check_assets, with canister_id cxeji-wacaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-q +- [`dfx canister start `](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-start): Start the canister. After a canister has been stopped with `dfx canister stop`, the only way to restart it is through `dfx canister start`. Other commands, such as `dfx deploy`, do not start the canister if it has been manually stopped. diff --git a/docs/developer-docs/smart-contracts/maintain/storage.mdx b/docs/developer-docs/smart-contracts/maintain/storage.mdx index 1a5fdbcead..166fdebb79 100644 --- a/docs/developer-docs/smart-contracts/maintain/storage.mdx +++ b/docs/developer-docs/smart-contracts/maintain/storage.mdx @@ -7,13 +7,13 @@ import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; # Storage - + ## Overview When developing projects on ICP, there are two primary forms of data storage that your canisters can utilize. The first type of storage is the canister's **heap memory**, sometimes referred to as the canister's *main memory*. Heap memory is **temporary**, and any data stored in a canister's heap memory is cleared whenever the canister is reinstalled or upgraded. -The second type of storage available to a canister is **stable memory**. Stable memory is a unique feature of ICP that  defines a separate data store aside from a canister's regular Wasm heap memory data storage. It is a secondary storage type that can be used to store data long-term, since all data stored in stable memory will persist across all canister processes. +The second type of storage available to a canister is **stable memory**. Stable memory is a unique feature of ICP that defines a separate data store aside from a canister's regular Wasm heap memory data storage. It is a secondary storage type that can be used to store data long-term, since all data stored in stable memory will persist across all canister processes. ## Heap memory @@ -31,7 +31,7 @@ By default, a canister's stable memory is empty. The maximum storage limit for s ## Storage cost -Storage cost is calculated on the GiB of storage used by a canister per second, costing `127_000` cycles on a 13-node subnet and `127_000 / 13 * 34` cycles on a subnet with 34 nodes. In USD, this works out to about $0.431 and $1.127, respectively, for storing 1 GiB of data for a 30-day month. The cost is the same whether the canister is using heap memory, stable memory, or both. +Storage cost is calculated based on the GiB of storage used by a canister per second, costing `127_000` cycles on a 13-node subnet and `127_000 / 13 * 34` cycles on a subnet with 34 nodes. In USD, this works out to about $0.431 and $1.127, respectively, for storing 1 GiB of data for a 30-day month. The cost is the same whether the canister is using heap memory, stable memory, or both. [Learn more about storage costs](/docs/current/developer-docs/gas-cost). @@ -39,11 +39,10 @@ Storage cost is calculated on the GiB of storage used by a canister per second, ### Motoko storage handling -In Motoko canisters, stable memory can be utilized through the Motoko **stable storage** and **stable variable** features. Stable storage is a Motoko-specific term used to refer to Motoko's implementation of stable memory used to persist data across canister upgrades. Stable variables are Motoko-defined variables that use the `stable` modifying keyword to indicate that the variable's value should persist across canister upgrades, such as: +In Motoko canisters, stable memory can be utilized through the Motoko **stable storage** and **stable variable** features. Stable storage is a Motoko-specific term used to refer to Motoko's implementation of stable memory to persist data across canister upgrades. Stable variables are Motoko-defined variables that use the `stable` modifying keyword to indicate that the variable's value should persist across canister upgrades, such as: ```motoko actor Counter { - stable var value = 0; public func inc() : async Nat { value += 1; @@ -108,7 +107,7 @@ This garbage collector is still in beta testing and should be used with caution. To utilize stable memory for canisters written in Rust, the crates [ic-stable-memory](https://github.com/seniorjoinu/ic-stable-memory) and [ic-stable-structures](https://github.com/dfinity/stable-structures) can be used. It is recommended to review the documentation for these crates to learn more, or [review the tutorial on the stable structures crate](https://mmapped.blog/posts/14-stable-structures.html). -As good practice, stable memory should be versioned since the stable memory decoding mechanism may need to guess the data's format in situations where the serialization format or stable data layout of a canister drastically changes. To make this process easier, stable memory should be versioned. This can be as simple as declaring that the first byte of the canister's stable memory will be used to represent the version number. +As good practice, stable memory should be versioned since the stable memory decoding mechanism may need to guess the data's format in situations where the serialization format or stable data layout of a canister drastically changes. This can be as simple as declaring that the first byte of the canister's stable memory will be used to represent the version number. To utilize stable memory when upgrading a Rust canister, the following workflow is used: diff --git a/docs/developer-docs/smart-contracts/maintain/trapping.mdx b/docs/developer-docs/smart-contracts/maintain/trapping.mdx index 6e6b0aad4d..892293aa46 100644 --- a/docs/developer-docs/smart-contracts/maintain/trapping.mdx +++ b/docs/developer-docs/smart-contracts/maintain/trapping.mdx @@ -1,24 +1,30 @@ +--- +keywords: [beginner, tutorial, maintain canisters, canister trapping, traps, traps during upgrades, handling traps] +--- + +import { MarkdownChipRow } from "/src/components/Chip/MarkdownChipRow"; +import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; + # Trapping -## Overview + +## Overview Trapping, in the context of WebAssembly code, refers to an interruption of code execution that returns an error. Trapping is defined by [the WebAssembly documentation](https://webassembly.github.io/spec/core/intro/overview.html) as: - *“Under some conditions, certain instructions may produce a trap, which immediately aborts execution. Traps cannot be handled by WebAssembly code, but are reported to the outside environment, where they typically can be caught.”* - On ICP, canister code is compiled into WebAssembly before it is executed. This means that canisters can trap. Some example cases when canisters might trap include: -- Canister code panics (e.g. in Rust) -- Dividing by zero -- Calling a System API in a context that is not permitted by ICP ([see overview of imports for a list of APIs and which contexts they are available in](/docs/current/references/ic-interface-spec#system-api-imports)) -- Accessing [heap data](/docs/current/developer-docs/smart-contracts/maintain/storage) that is out of bounds +- Canister code panics (e.g. in Rust). +- Dividing by zero. +- Calling a System API in a context that is not permitted by ICP ([see a list of APIs and which contexts they are available in](/docs/current/references/ic-interface-spec#system-api-imports)). +- Accessing [heap data](/docs/current/developer-docs/smart-contracts/maintain/storage) that is out of bounds. ## What happens when a canister traps? -If a canister traps during a message execution, then two things happen: +If a canister traps during a message execution, two things happen: - Message execution immediately ends and an error is returned. - Any state changes made by the canister during this message execution will be rolled back. @@ -29,42 +35,31 @@ If a canister traps during a message execution, then two things happen: Using pre_ and post_upgrade hooks is discouraged. It is error-prone and can render a canister unusable. Per best practices, using these methods should be avoided if possible. ::: -Special care should be taken when writing a `pre_upgrade` hook for your canister which will run during an upgrade. If the [pre_upgrade](/docs/current/references/ic-interface-spec#system-api-upgrades) hook traps, -then the canister upgrade would fail. This is extremely important as it can mean your canister can be permanently bricked if such a trap occurs -in the `pre_upgrade` hook as this will always run against the current canister's Wasm module. +Special care should be taken when writing a `pre_upgrade` hook for your canister which will run during an upgrade against the current canister's Wasm module. If the [pre_upgrade](/docs/current/references/ic-interface-spec#system-api-upgrades) hook traps, then the canister upgrade will fail. This is extremely important as it can mean your canister can be permanently unrecoverable. In order to avoid unexpected surprises, it is strongly recommended that your canisters use stable memory directly, which removes the need for having a `pre_upgrade` hook in the first place. - ## Traps during inter-canister calls -Trapping is an important concern when using inter-canister calls. Since the state is rolled back only for the current message execution, this means -that if there's a trap in a callback handler execution, the state only rolls back to the point before this message execution. In particular, any -state changes made by the canister before making the inter-canister call and calling `await` to wait for the response will not be rolled back -(as this was a separate message execution that happened before the callback handler was invoked). - - -This is quite important as it might affect how one can implement canisters safely. Generally speaking, traps should be avoided in callback handler -invocations. If this is not possible, then it's recommended to use the [cleanup system API call](/docs/current/references/ic-interface-spec#system-api-call) to ensure that any cleanup action is performed (e.g. releasing a lock that was acquired before making an inter-canister call). +Trapping is an important concern when using inter-canister calls. Since the state is rolled back only for the current message execution, this means that if there's a trap in a callback handler execution, the state only rolls back to the point before this message execution. In particular, any state changes made by the canister before making the inter-canister call and calling `await` to wait for the response will not be rolled back (as this was a separate message execution that happened before the callback handler was invoked). +This is quite important as it might affect how one can implement canisters safely. Generally speaking, traps should be avoided in callback handler invocations. If this is not possible, then it's recommended to use the [cleanup system API call](/docs/current/references/ic-interface-spec#system-api-call) to ensure that any cleanup action is performed (e.g. releasing a lock that was acquired before making an inter-canister call). ## When to use traps explicitly - -Traps can also be useful in certain situations. If you encounter an unrecoverable error while processing a message, it might be better to trap and -roll back any changes made in that message execution to avoid leaving your canister in a weird state. Another case would be if an invariant that -should generally hold is violated -- again a trap might be the best option to ensure that there's no further damage done and the broken invariant -can be investigated and fixed. - +Traps can also be useful in certain situations. If you encounter an unrecoverable error while processing a message, it might be better to trap and roll back any changes made in that message execution to avoid leaving your canister in a weird state. Another case would be if an invariant that should generally hold is violated. ## Troubleshooting why your canister trapped Some of the common root causes of canister traps include: - *“Heap out of bounds”*: Usually means that your canister is attempting to access heap memory that has not been allocated yet. This typically points to a programming error. Look for places where memory is allocated (e.g. creating vectors) and whether you try to access such memory before allocating it. + - *“Stable memory out of bounds”*: Similar to *“heap out of bounds”* but for stable memory. + - *“Integer division by zero”*: The canister attempted to divide by zero. Inspect the canister's code for any division operations. -- *“Unreachable”*: Typically produced when the canister panic's, e.g. for Rust canisters. Unfortunately, the system does not capture a backtrace at the moment, so you won't see more information. It's recommended to use the [panic hook](https://github.com/dfinity/cdk-rs/blob/08cbe397fcbaf62dd1edbec218492f967e80dd00/src/ic-cdk/src/printer.rs#L5) so that panic's are converted to an explicit call to [ic0.trap](/docs/current/references/ic-interface-spec#debugging-aids) which will append an error message that will be more useful for debugging. + +- *“Unreachable”*: Typically produced when the canister panic's, e.g. for Rust canisters. It's recommended to use the [panic hook](https://github.com/dfinity/cdk-rs/blob/08cbe397fcbaf62dd1edbec218492f967e80dd00/src/ic-cdk/src/printer.rs#L5) so that panic's are converted to an explicit call to [ic0.trap](/docs/current/references/ic-interface-spec#debugging-aids) which will append an error message that will be more useful for debugging. ## Errors related to canister trapping diff --git a/docs/developer-docs/smart-contracts/maintain/upgrade.mdx b/docs/developer-docs/smart-contracts/maintain/upgrade.mdx index bd0252614a..817a47eee8 100644 --- a/docs/developer-docs/smart-contracts/maintain/upgrade.mdx +++ b/docs/developer-docs/smart-contracts/maintain/upgrade.mdx @@ -11,28 +11,21 @@ import { GlossaryTooltip } from "/src/components/Tooltip/GlossaryTooltip"; ## Overview -Unlike a canister reinstall that preserves the canister identifier but no state, a canister upgrade enables you to preserve the state of a deployed canister, and change the code. +Unlike a canister reinstall that preserves the canister identifier but no state, a canister upgrade enables you to preserve the state of a deployed canister and change the code. For example, assume you have a dapp that manages professional profiles and social connections. If you want to add a new feature to the dapp, you need to be able to update the canister code without losing any of the previously-stored data. A canister upgrade enables you to update existing canister identifiers with program changes without losing the program state. +:::tip To preserve state when you are upgrading a canister written in Motoko, be sure to use the `stable` keyword to identify the variables you want to preserve. For more information about preserving variable state in Motoko, see [stable variables and upgrade methods](/docs/current/motoko/main/canister-maintenance/upgrades). +::: -To upgrade a canister: +To upgrade a canister, first you must: -- #### Step 1: Open a new terminal and navigate to your project directory. +1. Edit the canister's code and save the changes. - Start `dfx` with the command `dfx start --background`. +2. Use [`dfx build`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-build) to compile the code into a new Wasm module. -- #### Step 2: Verify you have canister identifiers for all of the canisters you want to upgrade. - - Note that your canister code must identify the variables for which to maintain state by using the `stable` keyword in the variable declaration. - - For more information about declaring stable variables, see the [**Motoko documentation**](/docs/current/motoko/main/stable-memory/stablememory). - -- #### Step 3: Upgrade all of the canisters by running the following command: - - dfx canister install --all --mode upgrade // Local - dfx canister install --all --mode upgrade --network ic // Mainnet +3. Use [`dfx canister install --mode upgrade`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-install) to install the new Wasm module. ## Errors related to canister upgrades From e02362614c6462e7bec964a61806617a6fcdf220 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon Date: Fri, 22 Nov 2024 09:16:17 -0600 Subject: [PATCH 39/47] fix link --- docs/developer-docs/smart-contracts/maintain/import.mdx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/developer-docs/smart-contracts/maintain/import.mdx b/docs/developer-docs/smart-contracts/maintain/import.mdx index 93795236e7..6cf2e1725e 100644 --- a/docs/developer-docs/smart-contracts/maintain/import.mdx +++ b/docs/developer-docs/smart-contracts/maintain/import.mdx @@ -239,9 +239,13 @@ dfx deps init
Output + +``` WARN: The following canister(s) require an init argument. Please run `dfx deps init ` to set them individually: yofga-2qaaa-aaaaa-aabsq-cai yahli-baaaa-aaaaa-aabtq-cai (dep_c) +``` +
- If you try to set an `init` argument for an individual dependency without an argument, it will result in the following error: From cb0a39a79bdb6a5ba1ac783bb8a27841975df7a7 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon Date: Fri, 22 Nov 2024 13:19:53 -0600 Subject: [PATCH 40/47] update code snippets --- .../smart-contracts/maintain/history.mdx | 15 ++------------- .../smart-contracts/maintain/import.mdx | 2 +- .../smart-contracts/maintain/logs.mdx | 12 ++++++------ .../smart-contracts/maintain/recovery.mdx | 17 ----------------- .../smart-contracts/maintain/settings.mdx | 17 +++++++---------- .../smart-contracts/maintain/storage.mdx | 2 +- 6 files changed, 17 insertions(+), 48 deletions(-) diff --git a/docs/developer-docs/smart-contracts/maintain/history.mdx b/docs/developer-docs/smart-contracts/maintain/history.mdx index 6f155bcf45..44ed083d9c 100644 --- a/docs/developer-docs/smart-contracts/maintain/history.mdx +++ b/docs/developer-docs/smart-contracts/maintain/history.mdx @@ -73,31 +73,20 @@ actor Info { -View the [Rust `canister-info` sample project](https://github.com/dfinity/examples/blob/master/rust/canister-info/src/lib.rs) for a detailed example of how to use `canister_info` in a Rust canister. +```rust file=../../../references/samples/rust/canister-info/src/lib.rs +``` }> -```typescript - -Azle code coming soon. - [Learn more about Azle](https://demergent-labs.github.io/azle/get_started.html). -``` - }> -```typescript - -Kybra code coming soon. - [Learn more about Kybra](https://demergent-labs.github.io/kybra/). -``` -
\ No newline at end of file diff --git a/docs/developer-docs/smart-contracts/maintain/import.mdx b/docs/developer-docs/smart-contracts/maintain/import.mdx index 6cf2e1725e..37ce6a3b54 100644 --- a/docs/developer-docs/smart-contracts/maintain/import.mdx +++ b/docs/developer-docs/smart-contracts/maintain/import.mdx @@ -100,7 +100,7 @@ Service providers should use the following deployment process to deploy their `p - #### Step 1: From within your project's repo, deploy the canister to the mainnet with the command: ``` -dfx deploy --network ic +dfx deploy --network ic ``` - #### Step 2: If you're using GitHub, `git tag` and `GitHub release` with the commands: diff --git a/docs/developer-docs/smart-contracts/maintain/logs.mdx b/docs/developer-docs/smart-contracts/maintain/logs.mdx index 08b1c246de..6ee3077c4a 100644 --- a/docs/developer-docs/smart-contracts/maintain/logs.mdx +++ b/docs/developer-docs/smart-contracts/maintain/logs.mdx @@ -26,7 +26,7 @@ The canister logging feature is designed to p A canister's controller is able to retrieve the canister's logs, even when executions trap, using [`dfx canister logs`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-logs): ``` -dfx canister logs +dfx canister logs ``` :::info @@ -38,7 +38,7 @@ Non-replicated calls are not currently supported for logging. By default, a canister's logs are only visible to the controllers of the canister. A canister's logs can be made public by updating the canister's settings with [`dfx canister update-settings`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-update-settings) command: ```bash -dfx canister update-settings CANISTER_ID --log-visibility public +dfx canister update-settings --log-visibility public ``` ### Log viewer allow lists @@ -47,16 +47,16 @@ Canister log allow lists enable principals that are not controllers of the canis To add a principal to the canister's log allow list, update the canister's settings with the flags: -- `dfx canister update-settings CANISTER_ID --set-log-viewer PRINCIPAL_ID`: Set a single principal as a log viewer. +- `dfx canister update-settings --set-log-viewer PRINCIPAL_ID`: Set a single principal as a log viewer. -- `dfx canister update-settings CANISTER_ID --add-log-viewer PRINCIPAL_ID`: Add a principal to a list of log viewers. +- `dfx canister update-settings --add-log-viewer PRINCIPAL_ID`: Add a principal to a list of log viewers. -- `dfx canister update-settings CANISTER_ID --remove-log-viewer PRINCIPAL_ID`: Remove a principal from the log viewer list. +- `dfx canister update-settings --remove-log-viewer PRINCIPAL_ID`: Remove a principal from the log viewer list. You can also configure a principal as a log viewer when you create a canister: ``` -dfx canister create CANISTER_NAME --log-viewer PRINCIPAL_ID +dfx canister create --log-viewer PRINCIPAL_ID ``` Or, you can set the `canisters[].initialization_values.log_visibility.allowed_viewers` configuration setting in your project's `dfx.json` file. diff --git a/docs/developer-docs/smart-contracts/maintain/recovery.mdx b/docs/developer-docs/smart-contracts/maintain/recovery.mdx index 14b9dfff8d..86fca0769f 100644 --- a/docs/developer-docs/smart-contracts/maintain/recovery.mdx +++ b/docs/developer-docs/smart-contracts/maintain/recovery.mdx @@ -20,20 +20,3 @@ One method for recovering a canister is to roll the canister back to a snapshot ## Recovering a canister that does not have controllers If a canister is unable to be upgraded via any of the canister's existing controllers, either due to the canister not having controllers or loss of access to the canister's controllers, there is no supported method to recover that canister. - -## Recovering a canister with an NNS proposal - -If a canister does not have a snapshot that can be used for recovery, one possible last resort recovery method can be used, however it requires that the canister have the NNS root canister `r7inp-6aaaa-aaaaa-aaabq-cai` configured as a controller of the canister. - -To add the NNS root canister as a controller of your canister, use the command: - -```sh -dfx canister update-settings CANISTER_NAME --network ic --add-controller r7inp-6aaaa-aaaaa-aaabq-cai -``` - -:::info -This step cannot be taken after access to a canister's controllers is already lost, since only a current controller of the canister can add additional controllers. If a canister's code has failed and cannot be upgraded, but access to the canister's controllers is possible, then this step can be performed. -::: - -Then, when the canister needs to be recovered, it may be recovered by using the System Canister Management NNS proposal used for upgrading all system canisters. When submitting this proposal, include the canister ID of the broken canister and a new Wasm module for the canister. Once this proposal is submitted, the NNS DAO will vote on whether to upgrade the canister using the proposed new Wasm file or not. If the proposal is passed, the canister will be upgraded and potentially recovered. - diff --git a/docs/developer-docs/smart-contracts/maintain/settings.mdx b/docs/developer-docs/smart-contracts/maintain/settings.mdx index 5d5e08e118..53dd8e2be0 100644 --- a/docs/developer-docs/smart-contracts/maintain/settings.mdx +++ b/docs/developer-docs/smart-contracts/maintain/settings.mdx @@ -33,7 +33,7 @@ Currently, there are seven canister setting fields: There are two ways to read the settings of a canister: -1. Command line: [`dfx canister status `](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-status). Note that this command returns the canister's settings, along with other canister status information. +1. Command line: [`dfx canister status `](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-status). Note that this command returns the canister's settings, along with other canister status information. 2. Programmatically: Call the [`canister_status`](https://internetcomputer.org/docs/current/references/ic-interface-spec) endpoint of the IC management canister. The canister's settings will be in the `settings` field of the result. ### Command line @@ -71,27 +71,24 @@ Log visibility: controllers -For an example of how to use `canister_status` in your Motoko code, view the [sample application](https://github.com/dfinity/examples/blob/master/motoko/query_stats/src/query_stats_backend/main.mo). +```motoko no-repl file=../../../references/samples/motoko/query_stats/src/query_stats_backend/main.mo +``` -For an example of how to use `canister_status` in your Rust code, view the [sample application](https://github.com/dfinity/examples/blob/master/rust/query_stats/src/lib.rs). - +```rust file=../../../references/samples/rust/query_stats/src/query_stats_backend/src/lib.rs +``` }> -Azle code coming soon. - [Learn more about Azle](https://demergent-labs.github.io/azle/the_azle_book.html). }> -Kybra code coming soon. - [Learn more about Kybra](https://demergent-labs.github.io/kybra/). @@ -101,7 +98,7 @@ Kybra code coming soon. There are two ways to modify the settings of a canister: -1. Command line: `dfx canister update-settings -- `. +1. Command line: `dfx canister update-settings -- `. 1. Programmatically: Call the [`update_settings`](/docs/current/references/ic-interface-spec#ic-update_settings) endpoint of the IC management canister. Note that only a controller of the canister can modify canister settings. @@ -109,7 +106,7 @@ Note that only a controller of the canister can modify canister settings. ### Command line ```bash -dfx canister update-settings ajuq4-ruaaa-aaaaa-qaaga-cai --wasm-memory-limit 3000000000 +dfx canister update-settings my_canister --wasm-memory-limit 3000000000 ``` ### Programmatically diff --git a/docs/developer-docs/smart-contracts/maintain/storage.mdx b/docs/developer-docs/smart-contracts/maintain/storage.mdx index 166fdebb79..6cb008eaf1 100644 --- a/docs/developer-docs/smart-contracts/maintain/storage.mdx +++ b/docs/developer-docs/smart-contracts/maintain/storage.mdx @@ -105,7 +105,7 @@ This garbage collector is still in beta testing and should be used with caution. ### Rust storage handling -To utilize stable memory for canisters written in Rust, the crates [ic-stable-memory](https://github.com/seniorjoinu/ic-stable-memory) and [ic-stable-structures](https://github.com/dfinity/stable-structures) can be used. It is recommended to review the documentation for these crates to learn more, or [review the tutorial on the stable structures crate](https://mmapped.blog/posts/14-stable-structures.html). +To utilize stable memory for canisters written in Rust, the crate [ic-stable-structures](https://github.com/dfinity/stable-structures) can be used. It is recommended to review the documentation for these crates to learn more, or [review the tutorial on the stable structures crate](https://mmapped.blog/posts/14-stable-structures.html). As good practice, stable memory should be versioned since the stable memory decoding mechanism may need to guess the data's format in situations where the serialization format or stable data layout of a canister drastically changes. This can be as simple as declaring that the first byte of the canister's stable memory will be used to represent the version number. From d14224d57376b4a16f3daeeb98dfe1a7e9d5f7f7 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Fri, 22 Nov 2024 13:28:41 -0600 Subject: [PATCH 41/47] Update docs/developer-docs/smart-contracts/maintain/settings.mdx --- docs/developer-docs/smart-contracts/maintain/settings.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/developer-docs/smart-contracts/maintain/settings.mdx b/docs/developer-docs/smart-contracts/maintain/settings.mdx index 53dd8e2be0..6b80af0ad4 100644 --- a/docs/developer-docs/smart-contracts/maintain/settings.mdx +++ b/docs/developer-docs/smart-contracts/maintain/settings.mdx @@ -77,7 +77,7 @@ Log visibility: controllers -```rust file=../../../references/samples/rust/query_stats/src/query_stats_backend/src/lib.rs +```rust file=../../../references/samples/rust/query_stats/src/lib.rs ``` From 6cb6fce8ada43335608cc2db2f4b30907525482b Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Fri, 22 Nov 2024 15:42:13 -0600 Subject: [PATCH 42/47] Update overview.mdx --- docs/developer-docs/smart-contracts/call/overview.mdx | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/docs/developer-docs/smart-contracts/call/overview.mdx b/docs/developer-docs/smart-contracts/call/overview.mdx index fad8ff6515..5ef5910778 100644 --- a/docs/developer-docs/smart-contracts/call/overview.mdx +++ b/docs/developer-docs/smart-contracts/call/overview.mdx @@ -95,16 +95,6 @@ To make a query call to a canister, use the [`dfx canister call`](/docs/current/ - `dfx canister call --query --network=ic`: Make a query call to a canister deployed on the mainnet. Query calls are free. -### Making query calls - -To make a query call to a canister, use the [`dfx canister call`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-canister#dfx-canister-call) command with the `--query` flag: - -- `dfx canister call --query `: Make a query call to a canister deployed locally. The local replica must be running to create a canister locally. Start it with `dfx start --background`. - -- `dfx canister call --query --network=playground`: Make a query call to a canister deployed on the playground. Query calls are free, but canisters are temporary and will be removed after 20 minutes. - -- `dfx canister call --query --network=ic`: Make a query call to a canister deployed on the mainnet. Query calls are free. - :::caution The downside of query calls is that the response is not trusted since it's coming from a single node. An update call or a [certified query](#certified-queries) should be used for security-critical calls. ::: From 4d0af1c556436c4e0baa7fd3c78b8337877d9301 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Fri, 22 Nov 2024 15:42:34 -0600 Subject: [PATCH 43/47] Update overview.mdx --- docs/developer-docs/smart-contracts/write/overview.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/developer-docs/smart-contracts/write/overview.mdx b/docs/developer-docs/smart-contracts/write/overview.mdx index 0e0fec65d4..4b01b8aa23 100644 --- a/docs/developer-docs/smart-contracts/write/overview.mdx +++ b/docs/developer-docs/smart-contracts/write/overview.mdx @@ -270,6 +270,7 @@ fn greet(name: String) -> String { ### Juno [Juno](/docs/current/developer-docs/web-apps/frameworks/juno) is a community project that is tailored for Web2 developers. It takes care of hosting code and data in canisters such that developers can write Web3 applications using familiar Web2 concepts and patterns. For more details, please follow [the official Juno documentation](https://juno.build/docs/intro). + ### Bitfinity EVM [Bitfinity EVM](/docs/current/developer-docs/backend/solidity/) is tailored for Solidity developers. It is a canister that runs an instance of the Ethereum virtual machine and allows developers to upload and execute smart contracts written in Solidity. For more details, please follow [the official Bitfinity documentation](https://docs.bitfinity.network/). From 1e2cbb7ef000f41a5bfc67d44a4819aea2ffcbc9 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Fri, 22 Nov 2024 15:43:04 -0600 Subject: [PATCH 44/47] Update overview.mdx --- docs/developer-docs/smart-contracts/write/overview.mdx | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docs/developer-docs/smart-contracts/write/overview.mdx b/docs/developer-docs/smart-contracts/write/overview.mdx index 4b01b8aa23..fafbdf66ba 100644 --- a/docs/developer-docs/smart-contracts/write/overview.mdx +++ b/docs/developer-docs/smart-contracts/write/overview.mdx @@ -301,11 +301,6 @@ A single canister can host the entire application stack, including its web asset Even though this architecture is simple, it can scale to thousands of users and gigabytes of data. -### Canister per service architecture -Canisters can be thought of as microservices, where each canister is responsible for a specific service of the application, such as managing users, storing data, or processing data. -Note that all benefits and disadvantages of the traditional microservice architecture apply here as well. -The default project structure that [`dfx new`](/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-new) generates can be viewed as the simplest microservice architecture, with the frontend canister being responsible for serving web assets and the backend canister being responsible for the core logic and of the application. - ### Canister per subnet architecture ICP scales horizontally via subnets, so applications can also scale by utilizing more subnets. From 25e4fb876fe8fc49b2be289450437a1a73495afa Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Fri, 22 Nov 2024 15:43:40 -0600 Subject: [PATCH 45/47] Update docs/developer-docs/smart-contracts/write/overview.mdx --- docs/developer-docs/smart-contracts/write/overview.mdx | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/developer-docs/smart-contracts/write/overview.mdx b/docs/developer-docs/smart-contracts/write/overview.mdx index fafbdf66ba..f9294facf4 100644 --- a/docs/developer-docs/smart-contracts/write/overview.mdx +++ b/docs/developer-docs/smart-contracts/write/overview.mdx @@ -15,7 +15,6 @@ import { BetaChip } from "/src/components/Chip/BetaChip"; ICP supports a wide range of applications and architecture types. - Apps can range from a single canister to complex, multi-canister projects and everything in between. You can begin writing and structuring your application using one of two primary workflows: From 404cf7785b61e80fb08946a9e24986761a9ad271 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Fri, 22 Nov 2024 15:43:45 -0600 Subject: [PATCH 46/47] Update docs/developer-docs/smart-contracts/write/overview.mdx --- docs/developer-docs/smart-contracts/write/overview.mdx | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/developer-docs/smart-contracts/write/overview.mdx b/docs/developer-docs/smart-contracts/write/overview.mdx index f9294facf4..7d176e407a 100644 --- a/docs/developer-docs/smart-contracts/write/overview.mdx +++ b/docs/developer-docs/smart-contracts/write/overview.mdx @@ -290,7 +290,6 @@ The default project structure that [`dfx new`](/docs/current/developer-docs/deve ### Single canister architecture -This is the simplest possible architecture and the recommended starting point for most developers. A single canister can host the entire application stack, including its web assets, core logic, and data. To write a single canister that hosts frontend assets and backend core logic, you will need to use a library for the asset storage API, such as the `ic-certified-assets` library for Rust canisters. A few examples of single canister projects include: From 2270aca2b69d38ac7f4cb5443b5005756c2c6982 Mon Sep 17 00:00:00 2001 From: Jessie Mongeon <133128541+jessiemongeon1@users.noreply.github.com> Date: Fri, 22 Nov 2024 15:43:59 -0600 Subject: [PATCH 47/47] Update docs/developer-docs/smart-contracts/write/overview.mdx --- docs/developer-docs/smart-contracts/write/overview.mdx | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/developer-docs/smart-contracts/write/overview.mdx b/docs/developer-docs/smart-contracts/write/overview.mdx index 7d176e407a..fdc353021e 100644 --- a/docs/developer-docs/smart-contracts/write/overview.mdx +++ b/docs/developer-docs/smart-contracts/write/overview.mdx @@ -290,7 +290,6 @@ The default project structure that [`dfx new`](/docs/current/developer-docs/deve ### Single canister architecture - A single canister can host the entire application stack, including its web assets, core logic, and data. To write a single canister that hosts frontend assets and backend core logic, you will need to use a library for the asset storage API, such as the `ic-certified-assets` library for Rust canisters. A few examples of single canister projects include: - [HTTPS greet example](https://github.com/krpeacock/server/tree/main/examples/http_greet).