Dove
🛠️ Diem/Pontem Move package manager
Install / Use
/learn @pontem-network/DoveREADME
Dove
Move language package manager for Diem and Pontem networks.
See documentation at https://docs.pontem.network/.
Installation
- If you are using Mac OS see how to install OpenSSL.
Using pre-compiled binaries:
Just visit releases page and download binaries you are going to use.
Using source code:
Clone this repository and follow documentation:
git clone git@github.com:pontem-network/dove.git
cd dove
cargo install --path ./dove
See help:
dove -h
Create new project:
dove new first_project
This command will create first_project/ directory with special Move.toml manifest file and sources/ directory for Move source code.
Build project:
dove build
See ./build/ folder to get scripts/modules binaries.
Clean build directory:
dove clean
The contents of the directories will be deleted:
<PROJECT_DIR>/storage<PROJECT_DIR>/build
Clear build directory and global cache:
dove clean --global
The contents of the directories will be deleted:
<PROJECT_DIR>/storage<PROJECT_DIR>/build~/.move/
Pallet Transactions
Command call allows you to create and publish transactions for Polkadot chain with Move Pallete on board.
call takes script identifier, type parameters, and arguments and creates a transaction file as an artifact of work.
dove call [CALL] [OPTIONS]
Input parameters
[CALL]- Call declaration-a/--argsScript arguments, e.g. 10 20 30-t,--typeScript type parameters, e.g. 0x1::Dfinance::USD-g/--gasLimitation of gas consumption per operation. A positive integer is expected-u/--urlThe url of the substrate node to query [default: ws://localhost:9944]. HTTP, HTTPS, WS protocols are supported. It is recommended to use WS. When using HTTP or HTTPS, you cannot get the publication status.--accountAccount from whom to publish. Address or test account name or name wallet key. Example: //Alice, alice, bob, NAME_WALLET_KEY... or 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY. When used in combination with--secretis ignored.-s/--secretSecret phrase. If a secret phrase is specified, you do not need to specify.
Example:
dove call 'store_u64(60)'
This command searches for the script by name 'store_u64' in the script directory. Then it compiles it and creates a transaction file.
This command will fail if:
- There is no script with the name given name 'store_u64'.
- There is more than one script with the name 'store_64'.
- The passed parameters or type parameters do not match the script parameters.
- There are syntax errors in the script.
You can use type parameters like in the Move language.
Example:
dove call 'create_account<0x01::PONT::PONT>()'
You allow can use SS58 address format:
dove call 'create_account<0x1::MyToken::Token>()'
dove call 'create_account<ADDRESS_ALIAS::MyToken::Token>()'
dove call 'create_account(ADDRESS_ALIAS, 10, true, [10, 20, 30, 40], 0x1, SS58_ADDRESS)'
Supported types:
- Numbers (u8, u64, u128)
- Boolean
- Vectors
- Type parameters (generics).
- SS58 format address
- Addresses in hexadecimal format
- ADDRESS_ALIAS - Address alias. Specified in the "addresses" section of Move.toml
For more commands and parameters look at help:
dove call --help
More
If you look for examples, guidelines how to write modules/scripts or tests, visit Pontem Documentation.
Resource Viewer
Resource viewer is currently out of date and pending migration inside dove in future versions.
See documentation.
Executor
Migrated inside Dove, see help:
dove run --help
Manage wallet keys
Command key allows you to save the secret keys to the wallet on your computer and access them under an alias.
Saved key can be used when publishing a module or bundle $ dove deploy <FILE_NAME> --account <NAME_KEY> ...,
as well as when execute a transaction $ dove call <CALL> --account <NAME_KEY> ....
Keys are stored on your computer in the ~/.move/ directory. Before saving, they are encrypted with the aes + password.
Adding a key:
dove key add --alias <NAME_KEY>
After executing this command, you will be prompted to enter a password and a secret phrase from your wallet.
If you don't want to protect the key with a password, use the --nopassword flag(Not recommended):
dove key add --alias <NAME_KEY> --nopassword
View list of saved keys
dove key list
Deleting a key
Deleting a key by name:
dove key delete --alias <NAME_KEY>
Deleting all saved keys:
dove key delete --all
Publishing a module or package
$ dove deploy [FILE_NAME|PATH_TO_FILE] [OPTIONS]
Input parameters
[FILE_NAME]- Name of module or package to be published.[PATH_TO_FILE]- Path to the file to be published. Expected file extension:pacbundlemvmodulemvttransaction
-g/--gasLimitation of gas consumption per operation. A positive integer is expected-u/--urlThe url of the substrate node to query [default: ws://localhost:9944]. HTTP, HTTPS, WS protocols are supported. It is recommended to use WS. When using HTTP or HTTPS, you cannot get the publication status.--accountAccount from whom to publish. Address or test account name or name wallet key. Example: //Alice, alice, bob, NAME_WALLET_KEY... or 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY. When used in combination with--secretis ignored.-s/--secretSecret phrase. If a secret phrase is specified, you do not need to specify.modules_excludeNames of modules to exclude from the package process.
Examples:
dove deploy
dove deploy PACKAGE_NAME --account WALLET_KEY --gas 300
dove deploy PACKAGE_NAME --secret --url ws://127.0.0.1:9944 --gas 400 --modules_exclude MODULE_NAME_1 MODULE_NAME_2 ..
dove deploy MODULE_NAME --secret --url https://127.0.0.1:9933 --gas 400
dove deploy PATH/TO/FILE --account //Alice --gas 300
Resource Viewer
Move Resource Viewer is a tool to query BCS resources data from blockchain nodes storage and represent them in JSON or human readable format.
- The viewer makes a request to the blockchain node by a sending specific query (address + resource type).
- The viewer send another request to node and query resource type layout.
- The viewer restores resources using response data and type layout.
Usage example
Query the user's store contract balance:
dove view "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY::Store::Store<u64>" --api "ws://127.0.0.1:9946"
Input parameters
[QUERY]resource type-path, e.g.:0x1::Account::Balance<0x1::PONT::PONT>5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY::Store::Store<u64>- In general:
0xDEADBEEF::Module::Struct< 0xBADBEEF::Mod::Struct<...>, ... > - Inner address can be omitted, it's inherited by parent:
0xDEADBEEF::Module::Struct<Mod::Struct>expands to0xDEADBEEF::Module::Struct<0xDEADBEEF::Mod::Struct> - Query can ends with index
[42]forvec-resources
- Output options:
-o/--outputfs-path to output file-j/--jsonsets output format to json. Can be omitted if output file extension is.json, so then json format will be chosen automatically.--json-schemaadditional json-schema export, fs-path to output schema file.
For more info check out --help.
Output
Two output formats supported:
- Move-like text
- JSON
The structure of the output in JSON is described in the scheme, which can be obtained by calling with the --json-schema parameter.
Move-like example:
resource 00000000::Account::Balance<00000000::Coins::BTC> {
coin: resource 00000000::Dfinance::T<00000000::Coins::BTC> {
value: 1000000000u128
}
}
JSON example:
{
"is_resource": true,
"type": {
"address": "0000000000000000000000000000000000000001",
"module": "Account",
"name": "Balance",
"type_params": [
{
"Struct": {
"address": "0000000000000000000000000000000000000001",
"module": "Coins",
"name": "BTC",
"type_params": []
}
}
]
},
"value": [
{
"id": "coin",
"value": {
"Struct": {
"is_resource": true,
"type": {
"address": "0000000000000000000000000000000000000001",
"module": "Dfinance",
"name": "T",
"type_params": [
{
"Struct": {
"address": "0000000000000000000000000000000000000001",
"module": "Coins",
"name": "BTC",
"type_params": []
}
}
]
},
"value": [
{
"id": "value",
"value": {
"U128": 1000000000
}
}
]
}
}
}
]
}
LICENSE
Related Skills
node-connect
346.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
107.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
346.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
346.4kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
