Tento příspěvek čerpá z oficiálního tutoriálu.
Postup vývoje na lokálním prostředí (zdroj oficiální tutoriál)
Nový projekt se vytvoří příkazem dfx new
a nazveme jej stejně jako v oficiálním tutoriálu – explore_hello
. Vytvoří se složka explore_hello
se soubory projektu a pokud máte nainstalován node.js
, přidá se i vzorový front-endový kód a závislosti. Pro zajištění toho, že název projektu bude platný při použití JavaScriptu, Motoka a dalších, je doporučeno používat v názvu pouze písmena, číslovky a podtržítka.
dfx new explore_hello
Fetching manifest https://sdk.dfinity.org/manifest.json
Creating new project "explore_hello"...
CREATE explore_hello/README.md (1.18KB)...
CREATE explore_hello/dfx.json (504B)...
CREATE explore_hello/.gitignore (165B)...
CREATE explore_hello/src/explore_hello/main.mo (107B)...
CREATE explore_hello/src/explore_hello_assets/assets/sample-asset.txt (24B)...
CREATE explore_hello/webpack.config.js (2.15KB)...
CREATE explore_hello/src/explore_hello_assets/public/index.js (161B)...
CREATE explore_hello/package.json (292B)...
⠁ Installing node dependencies...
...
⠄ Installing node dependencies...
...
Creating git repository...
===============================================================================
Welcome to the internet computer developer community!
You're using dfx 0.6.26
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄▄▄▀▀▀▀▀▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▀▀▀▀▀▀▄▄▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄▀ ▀▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▀ ▀▄▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄▀ ▀▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▀ ▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄ ▀▄▄▄▄▄▄▄▄▄▄▄▄▀ ▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▀
▀▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▀ ▀▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄
▀▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▀ ▀▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▀
▀▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▀ ▀▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▀▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▀▀ ▀▀▄▄▄▄▄▄▄▄▄▄▄▄▄▄▀
▀▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀
To learn more before you start coding, see the documentation available online:
- Quick Start: https://sdk.dfinity.org/docs/quickstart/quickstart-intro.html
- SDK Developer Tools: https://sdk.dfinity.org/docs/developers-guide/sdk-guide.html
- Motoko Language Guide: https://sdk.dfinity.org/docs/language-guide/motoko.html
- Motoko Quick Reference: https://sdk.dfinity.org/docs/language-guide/language-manual.html
If you want to work on programs right away, try the following commands to get started:
cd explore_hello
dfx help
dfx new --help
===============================================================================
Takto může vypadat vygenerovaná struktura projektu
.
├── dfx.json
├── node_modules
├── package.json
├── package-lock.json
├── README.md
├── src
│ ├── explore_hello
| │ └── main.mo
│ └── explore_hello_assets
| ├── assets
| │ └── sample-asset.txt
| └── public
| └── index.js
|
└── webpack.config.js
Složka obsahuje minimálně tyto soubory a složky:
– README
soubor
– dfx.json
konfigurační soubor
– src
adresář se zdrojovými soubory
Src složka obsahuje minimálně soubor main.mo, který může vypadat následovně
actor {
public func greet(name : Text) : async Text {
return "Hello, " # name # "!";
};
};
Pokud máte nainstalován node.js
, budete mít ještě další složky a soubory pro front-end aplikace. Front-end soubory jsou ve složce assets
. Více informací o konfiguračním souboru dfx.json
najdete v tomto příspěvku.
Spuštění lokální sítě
Před tím, než můžete sestavit (build) projekt, musíte se připojit do sítě Internet Computeru buď lokálně, nebo vzdáleně. Pro připojení lokálně potřebujete konfigurační soubor dfx.json
. V kořenovém souboru zadejte příkaz dfx start
.
dfx start May 16 09:09:11.594 INFO ic-starter. Configuration: ValidatedConfig { replica_path: Some("/home/vitfo/.cache/dfinity/versions/0.6.26/replica"), replica_version: "0.1.0", log_level: Warning, subnet_id: fscpm-uiaaa-aaaaa-aaaap-yai, cargo_bin: "cargo", cargo_opts: "", state_dir: "/home/vitfo/bin/explore_hello/.dfx/state/replicated_state", http_listen_addr: V4(127.0.0.1:0), http_port_file: Some("/home/vitfo/bin/explore_hello/.dfx/replica-configuration/replica-1.port"), metrics_addr: None, hypervisor_create_funds_whitelist: "*", artifact_pool_dir: "/home/vitfo/bin/explore_hello/.dfx/state/replicated_state/node-100/ic_consensus_pool", crypto_root: "/home/vitfo/bin/explore_hello/.dfx/state/replicated_state/node-100/crypto", state_manager_root: "/home/vitfo/bin/explore_hello/.dfx/state/replicated_state/node-100/state", registry_file: "/home/vitfo/bin/explore_hello/.dfx/state/replicated_state/registry.proto", bootstrap_registry: None, state_dir_holder: None }, Application: starter May 16 09:09:11.595 INFO Initialize replica configuration "/home/vitfo/bin/explore_hello/.dfx/state/replicated_state/ic.json5", Application: starter May 16 09:09:11.678 INFO Executing "/home/vitfo/.cache/dfinity/versions/0.6.26/replica" "--replica-version" "0.1.0" "--config-file" "/home/vitfo/bin/explore_hello/.dfx/state/replicated_state/ic.json5", Application: starter May 16 09:09:12.762 ERRO s:fscpm-uiaaa-aaaaa-aaaap-yai/n:ob7lq-y5gzp-lesds-zr2en-wauue-kf3np-ikln6-jkmj6-fnkwa-p7vci-7qe/ic_messaging/xnet_endpoint No XNet configuration for node ob7lq-y5gzp-lesds-zr2en-wauue-kf3np-ikln6-jkmj6-fnkwa-p7vci-7qe. This is an error in production, but may be ignored in single-subnet test deployments. May 16 09:09:13.765 WARN s:fscpm-uiaaa-aaaaa-aaaap-yai/n:ob7lq-y5gzp-lesds-zr2en-wauue-kf3np-ikln6-jkmj6-fnkwa-p7vci-7qe/ic_http_handler/ic_http_handler NNS subnet not found in network topology. Skipping fetching the delegation. Starting webserver on port 42219 for replica at "http://localhost:42219" binding to: V4(127.0.0.1:8000) replica(s): http://localhost:42219/
Registrování identifikátorů kanystrů
Po připojení k síti je možné vygenerovat síťově specifický identifikátor kanystru pro projekt. Registraci jedinečného identifikátoru kanystru pro projekt provedete příkazem dfx canister create --all
.
dfx canister create --all Creating canister "explore_hello"... Creating the canister using the wallet canister... Creating a wallet canister on the local network. The wallet canister on the "local" network for user "default" is "r7inp-6aaaa-aaaaa-aaabq-cai" "explore_hello" canister created with canister id: "rkp4c-7iaaa-aaaaa-aaaca-cai" Creating canister "explore_hello_assets"... Creating the canister using the wallet canister... "explore_hello_assets" canister created with canister id: "rno2w-sqaaa-aaaaa-aaacq-cai"
Pokud jste připojeni lokálně, identifikátory jsou platné pouze lokálně a jsou uloženy v souboru ./dfx/local/canister_ids
.
{
"explore_hello": {
"local": "rkp4c-7iaaa-aaaaa-aaaca-cai"
},
"explore_hello_assets": {
"local": "rno2w-sqaaa-aaaaa-aaacq-cai"
}
}
Sestavení (build) programu
Kompilace programu do spustitelného WebAssembly modulu se provede přílazem dfx build
.
dfx build
Building canisters...
Building frontend...
Pokud jste lokálně, přidá tento příkaz složku canisters do složky .dfx/local
.
.
└── local
├── canister_ids.json
├── canisters
│ ├── explore_hello
│ │ ├── explore_hello.did
│ │ ├── explore_hello.did.js
│ │ ├── explore_hello.d.ts
│ │ ├── explore_hello.js
│ │ └── explore_hello.wasm
│ ├── explore_hello_assets
│ │ ├── assets
│ │ │ ├── index.js
│ │ │ ├── index.js.map
│ │ │ └── sample-asset.txt
│ │ ├── assetstorage.did
│ │ ├── assetstorage.wasm
│ │ ├── explore_hello_assets.did
│ │ ├── explore_hello_assets.did.js
│ │ ├── explore_hello_assets.d.ts
│ │ ├── explore_hello_assets.js
│ │ └── explore_hello_assets.wasm
│ └── idl
└── wallets.json
explore_hello.did
obsahuje popis rozhraní hlavního programu
service : { greet: (text) -> (text); }
explore_hello.did.js
obsahuje JavaScriptovou reprezentaci rozhraní funkcí programu
export default ({ IDL }) => { return IDL.Service({ 'greet' : IDL.Func([IDL.Text], [IDL.Text], []) }); }; export const init = ({ IDL }) => { return []; };
explore_hello.js
obsahuje JavaScriptovou reprezentaci rozhraní programu
import actorInterface from "ic:idl/explore_hello"; export default ic.agent.makeActorFactory(actorInterface)({ canisterId: "rkp4c-7iaaa-aaaaa-aaaca-cai", });
explore_hello.wasm
obsahuje zkompilovaný WebAssembly assetů projektu
(module
(type $t0 (func (param i32 i32)))
(type $t1 (func (param i64)))
(type $t2 (func (param i32 i32 i32 i32 i32 i32 i32 i32)))
(type $t3 (func (result i32)))
...
(func $bigint_trap (type $t7)
i32.const 65540
i32.const 21
call $ic0.trap
unreachable)
(func $rts_trap (type $t0) (param $str i32) (param $len i32)
local.get $str
local.get $len
call $ic0.trap
unreachable)
(func $trans_state4 (type $t7)
block $B0
i32.const 65536
i32.load
i32.const 3
i32.eq
if $I1
br $B0
end
...
Adresář canisters/explore_hello_assets
obsahuje podobné soubory, ale pro front-endovou část projektu.
Nasazení projektu lokálně
WebAssembly moduly a canister_manifest.json
jsou požadovány pro nasazení programu na síť Internet Computeru. Lokální nasazení se provede příkazem dfx canister install --all
.
dfx canister install --all
Installing code for canister explore_hello, with canister_id rkp4c-7iaaa-aaaaa-aaaca-cai
Installing code for canister explore_hello_assets, with canister_id rno2w-sqaaa-aaaaa-aaacq-cai
Authorizing our identity (default) to the asset canister...
Uploading assets to asset canister...
Nyní je možné zavolat kanystr (dfx canister call
) a také si zobrazit front-endovou část tak jak bylo popsáno v předchozím příspěvku.
Zdroj: sdk.dfinity.org/docs/developers-guide/tutorials/explore-templates.html