From 9fb14f5a1f9d69f5d5ff057ae70b64c107d4acee Mon Sep 17 00:00:00 2001 From: Gleb Karavatski Date: Wed, 2 Oct 2024 15:26:13 +0300 Subject: [PATCH] add husky and cspell for grammar check --- .husky/_/.gitignore | 1 + .husky/_/applypatch-msg | 2 + .husky/_/commit-msg | 2 + .husky/_/h | 22 + .husky/_/husky.sh | 9 + .husky/_/post-applypatch | 2 + .husky/_/post-checkout | 2 + .husky/_/post-commit | 2 + .husky/_/post-merge | 2 + .husky/_/post-rewrite | 2 + .husky/_/pre-applypatch | 2 + .husky/_/pre-auto-gc | 2 + .husky/_/pre-commit | 14 + .husky/_/pre-merge-commit | 2 + .husky/_/pre-push | 2 + .husky/_/pre-rebase | 2 + .husky/_/prepare-commit-msg | 2 + cspell.json | 289 ++++ docs/contribute/README.md | 3 +- docs/contribute/docs/guidelines.md | 2 +- docs/develop/archive/mining.md | 2 +- docs/develop/archive/tg-bot-integration.mdx | 4 +- docs/develop/dapps/apis/sdk.mdx | 2 +- docs/develop/dapps/apis/toncenter.md | 2 +- .../dapps/asset-processing/overview.md | 2 +- docs/develop/dapps/defi/nft.md | 2 +- docs/develop/dapps/telegram-apps/notcoin.mdx | 2 +- .../dapps/telegram-apps/publishing.mdx | 2 +- docs/develop/dapps/ton-connect/integration.md | 6 +- .../dapps/ton-connect/protocol/README.md | 12 +- .../ton-connect/protocol/wallet-guidelines.md | 18 +- docs/develop/dapps/ton-connect/react.mdx | 2 +- .../develop/dapps/ton-connect/transactions.md | 2 +- .../dapps/tutorials/how-to-run-ton-site.md | 2 +- docs/develop/data-formats/library-cells.md | 8 +- docs/develop/data-formats/tl.md | 2 +- .../ethereum-to-ton/blockchain-services.md | 4 +- .../ethereum-to-ton/solidity-vs-func.md | 4 +- docs/develop/func/literals_identifiers.md | 8 +- docs/develop/get-started-with-ton.mdx | 2 +- docs/develop/howto/faq.md | 4 +- docs/develop/network/dht.md | 8 +- .../oracles/about_blockchain_oracles.md | 2 +- docs/develop/oracles/red_stone.mdx | 2 +- .../guidelines/message-modes-cookbook.mdx | 8 +- docs/develop/smart-contracts/messages.md | 8 +- docs/develop/smart-contracts/sdk/toncli.md | 2 +- .../security/things-to-focus.md | 2 +- .../smart-contracts/tutorials/multisig-js.md | 2 +- docs/learn/glossary.md | 6 +- .../fee-calculation-instructions.md | 2 +- .../tvm-instructions/tvm-initialization.md | 2 +- .../tvm-instructions/tvm-upgrade-2023-07.md | 10 +- .../crosschain/bridge-addresses.md | 4 +- docs/participate/explorers.mdx | 8 +- .../network-maintenance/staking-incentives.md | 2 +- docs/participate/nodes/collators.md | 12 +- .../nodes/node-maintenance-and-security.md | 2 +- docs/participate/wallets/contracts.md | 4 +- .../dapps/ton-connect/tg-bot-integration.mdx | 2 +- .../smart-contracts/tutorials/multisig-js.md | 2 +- package-lock.json | 1283 +++++++++++++++-- package.json | 7 +- src/grammar/commands-dictionary.txt | 22 + src/grammar/names-dictionary.txt | 22 + src/grammar/tvm-dictionary.txt | 977 +++++++++++++ .../carry_all_the_remaining_value.svg | 0 ...he_remaining_value_and_if_error_bounce.svg | 0 ...emaining_value_and_pay_fees_separately.svg | 0 ...ay_fees_separately_and_if_error_bounce.svg | 0 70 files changed, 2669 insertions(+), 190 deletions(-) create mode 100644 .husky/_/.gitignore create mode 100755 .husky/_/applypatch-msg create mode 100755 .husky/_/commit-msg create mode 100644 .husky/_/h create mode 100644 .husky/_/husky.sh create mode 100755 .husky/_/post-applypatch create mode 100755 .husky/_/post-checkout create mode 100755 .husky/_/post-commit create mode 100755 .husky/_/post-merge create mode 100755 .husky/_/post-rewrite create mode 100755 .husky/_/pre-applypatch create mode 100755 .husky/_/pre-auto-gc create mode 100755 .husky/_/pre-commit create mode 100755 .husky/_/pre-merge-commit create mode 100755 .husky/_/pre-push create mode 100755 .husky/_/pre-rebase create mode 100755 .husky/_/prepare-commit-msg create mode 100644 cspell.json create mode 100644 src/grammar/commands-dictionary.txt create mode 100644 src/grammar/names-dictionary.txt create mode 100644 src/grammar/tvm-dictionary.txt rename "static/img/docs/message-modes-cookbook/\321\201arry_all_the_remaining_value.svg" => static/img/docs/message-modes-cookbook/carry_all_the_remaining_value.svg (100%) rename "static/img/docs/message-modes-cookbook/\321\201arry_all_the_remaining_value_and_if_error_bounce.svg" => static/img/docs/message-modes-cookbook/carry_all_the_remaining_value_and_if_error_bounce.svg (100%) rename "static/img/docs/message-modes-cookbook/\321\201arry_all_the_remaining_value_and_pay_fees_separately.svg" => static/img/docs/message-modes-cookbook/carry_all_the_remaining_value_and_pay_fees_separately.svg (100%) rename "static/img/docs/message-modes-cookbook/\321\201arry_all_the_remaining_value_and_pay_fees_separately_and_if_error_bounce.svg" => static/img/docs/message-modes-cookbook/carry_all_the_remaining_value_and_pay_fees_separately_and_if_error_bounce.svg (100%) diff --git a/.husky/_/.gitignore b/.husky/_/.gitignore new file mode 100644 index 00000000000..c9cdc63b070 --- /dev/null +++ b/.husky/_/.gitignore @@ -0,0 +1 @@ +_ \ No newline at end of file diff --git a/.husky/_/applypatch-msg b/.husky/_/applypatch-msg new file mode 100755 index 00000000000..16aae78f5ba --- /dev/null +++ b/.husky/_/applypatch-msg @@ -0,0 +1,2 @@ +#!/usr/bin/env sh +. "$(dirname "$0")/h" \ No newline at end of file diff --git a/.husky/_/commit-msg b/.husky/_/commit-msg new file mode 100755 index 00000000000..16aae78f5ba --- /dev/null +++ b/.husky/_/commit-msg @@ -0,0 +1,2 @@ +#!/usr/bin/env sh +. "$(dirname "$0")/h" \ No newline at end of file diff --git a/.husky/_/h b/.husky/_/h new file mode 100644 index 00000000000..bf7c8964081 --- /dev/null +++ b/.husky/_/h @@ -0,0 +1,22 @@ +#!/usr/bin/env sh +[ "$HUSKY" = "2" ] && set -x +n=$(basename "$0") +s=$(dirname "$(dirname "$0")")/$n + +[ ! -f "$s" ] && exit 0 + +if [ -f "$HOME/.huskyrc" ]; then + echo "husky - '~/.huskyrc' is DEPRECATED, please move your code to ~/.config/husky/init.sh" +fi +i="${XDG_CONFIG_HOME:-$HOME/.config}/husky/init.sh" +[ -f "$i" ] && . "$i" + +[ "${HUSKY-}" = "0" ] && exit 0 + +export PATH="node_modules/.bin:$PATH" +sh -e "$s" "$@" +c=$? + +[ $c != 0 ] && echo "husky - $n script failed (code $c)" +[ $c = 127 ] && echo "husky - command not found in PATH=$PATH" +exit $c diff --git a/.husky/_/husky.sh b/.husky/_/husky.sh new file mode 100644 index 00000000000..f9d0637909f --- /dev/null +++ b/.husky/_/husky.sh @@ -0,0 +1,9 @@ +echo "husky - DEPRECATED + +Please remove the following two lines from $0: + +#!/usr/bin/env sh +. \"\$(dirname -- \"\$0\")/_/husky.sh\" + +They WILL FAIL in v10.0.0 +" \ No newline at end of file diff --git a/.husky/_/post-applypatch b/.husky/_/post-applypatch new file mode 100755 index 00000000000..16aae78f5ba --- /dev/null +++ b/.husky/_/post-applypatch @@ -0,0 +1,2 @@ +#!/usr/bin/env sh +. "$(dirname "$0")/h" \ No newline at end of file diff --git a/.husky/_/post-checkout b/.husky/_/post-checkout new file mode 100755 index 00000000000..16aae78f5ba --- /dev/null +++ b/.husky/_/post-checkout @@ -0,0 +1,2 @@ +#!/usr/bin/env sh +. "$(dirname "$0")/h" \ No newline at end of file diff --git a/.husky/_/post-commit b/.husky/_/post-commit new file mode 100755 index 00000000000..16aae78f5ba --- /dev/null +++ b/.husky/_/post-commit @@ -0,0 +1,2 @@ +#!/usr/bin/env sh +. "$(dirname "$0")/h" \ No newline at end of file diff --git a/.husky/_/post-merge b/.husky/_/post-merge new file mode 100755 index 00000000000..16aae78f5ba --- /dev/null +++ b/.husky/_/post-merge @@ -0,0 +1,2 @@ +#!/usr/bin/env sh +. "$(dirname "$0")/h" \ No newline at end of file diff --git a/.husky/_/post-rewrite b/.husky/_/post-rewrite new file mode 100755 index 00000000000..16aae78f5ba --- /dev/null +++ b/.husky/_/post-rewrite @@ -0,0 +1,2 @@ +#!/usr/bin/env sh +. "$(dirname "$0")/h" \ No newline at end of file diff --git a/.husky/_/pre-applypatch b/.husky/_/pre-applypatch new file mode 100755 index 00000000000..16aae78f5ba --- /dev/null +++ b/.husky/_/pre-applypatch @@ -0,0 +1,2 @@ +#!/usr/bin/env sh +. "$(dirname "$0")/h" \ No newline at end of file diff --git a/.husky/_/pre-auto-gc b/.husky/_/pre-auto-gc new file mode 100755 index 00000000000..16aae78f5ba --- /dev/null +++ b/.husky/_/pre-auto-gc @@ -0,0 +1,2 @@ +#!/usr/bin/env sh +. "$(dirname "$0")/h" \ No newline at end of file diff --git a/.husky/_/pre-commit b/.husky/_/pre-commit new file mode 100755 index 00000000000..4595a1494cc --- /dev/null +++ b/.husky/_/pre-commit @@ -0,0 +1,14 @@ +#!/usr/bin/env sh + +STAGED=$(git diff --cached --name-only) + +echo "Running cspell on staged files..." +echo "$STAGED" | xargs ./node_modules/.bin/cspell --show-suggestions + +if [ $? -ne 0 ]; then + echo "❌ Commit failed: Spelling errors detected by cspell." + exit 1 +fi + +echo "✅ No spelling errors found." +exit 0 diff --git a/.husky/_/pre-merge-commit b/.husky/_/pre-merge-commit new file mode 100755 index 00000000000..16aae78f5ba --- /dev/null +++ b/.husky/_/pre-merge-commit @@ -0,0 +1,2 @@ +#!/usr/bin/env sh +. "$(dirname "$0")/h" \ No newline at end of file diff --git a/.husky/_/pre-push b/.husky/_/pre-push new file mode 100755 index 00000000000..16aae78f5ba --- /dev/null +++ b/.husky/_/pre-push @@ -0,0 +1,2 @@ +#!/usr/bin/env sh +. "$(dirname "$0")/h" \ No newline at end of file diff --git a/.husky/_/pre-rebase b/.husky/_/pre-rebase new file mode 100755 index 00000000000..16aae78f5ba --- /dev/null +++ b/.husky/_/pre-rebase @@ -0,0 +1,2 @@ +#!/usr/bin/env sh +. "$(dirname "$0")/h" \ No newline at end of file diff --git a/.husky/_/prepare-commit-msg b/.husky/_/prepare-commit-msg new file mode 100755 index 00000000000..16aae78f5ba --- /dev/null +++ b/.husky/_/prepare-commit-msg @@ -0,0 +1,2 @@ +#!/usr/bin/env sh +. "$(dirname "$0")/h" \ No newline at end of file diff --git a/cspell.json b/cspell.json new file mode 100644 index 00000000000..1b21740f331 --- /dev/null +++ b/cspell.json @@ -0,0 +1,289 @@ +{ + "$schema": "https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json", + "version": "0.2", + "language": "en", + "files": [ + "**/*.md", + "**/*.mdx", + ], + "dictionaries": ["tvm-instructions", "names", "commands"], + "dictionaryDefinitions": [ + { + "name":"tvm-instructions", + "path":"./src/grammar/tvm-dictionary.txt" + }, + { + "name":"names", + "path":"./src/grammar/names-dictionary.txt" + }, + { + "name":"commands", + "path":"./src/grammar/commands-dictionary.txt" + }, + ], + "words": [ + "ADNL", + "ASIC", + "ASICS", + "Aiogram", + "Altcoin", + "Astralyx", + "Blockczech", + "Blockczech R&D Lab", + "CRC16-CCITT", + "Ceora", + "Cheatsheet", + "Cheatsheets", + "Circom", + "Coalus", + "Coinvent", + "Comptime", + "cpell", + "DICTGET", + "DIMM", + "DYOR", + "Datagram", + "Decompilation", + "Descr", + "ECDH", + "Egbt", + "EvaCodes", + "Everscale", + "Excno", + "Extracurrency", + "Fift", + "Gbit", + "Gbps", + "Gravi", + "Hackathon", + "Highlevel", + "IPFS", + "InMsgDescr", + "Indo-European", + "Januar", + "Jetton", + "Jettons", + "Kademlia", + "Keccak", + "Masterchain", + "Mbit", + "Merkle", + "Metaverse", + "Multiplatform", + "Mytonctrl", + "NVME", + "Notcoin", + "Offchain", + "OutMsgDescr", + "PRNG", + "Pixelplex", + "Prer", + "Prerequisites", + "RAWRESERVE", + "RLDP", + "Reindexing", + "Relatedly", + "STON.fi", + "Satoshi", + "Seamus", + "Shardchain", + "Snarkjs", + "Solana", + "Soulbound", + "Speedrun", + "Stablecoin", + "Stablecoins", + "TIMELOCK", + "TWWW", + "Testne", + "Threadripper-based", + "Timeouted", + "Toncoin", + "Toncoins", + "Underload", + "Uninit", + "WAGMI", + "Watchlist", + "Weil", + "Workstreams", + "XLARGE", + "XMODEM", + "Ybgx", + "aabbcc", + "accountchain", + "accountchains", + "aiogram", + "altcoin", + "altcoins", + "asms", + "basechain", + "berfest", + "bitmask", + "bitstring", + "bitstrings", + "blockbook", + "bounceable", + "bytestring", + "catchain", + "cheatsheet", + "cheatsheets", + "chksgn", + "ciphertexts", + "codomain", + "comptime", + "crosschain", + "cryptobot", + "cryptosystem", + "cryptosystems", + "datagram", + "datagrams", + "decompilation", + "decompiles", + "decompiling", + "deeplink", + "dnsresolve", + "dracones", + "ed25519_chksign", + "exitcode", + "extracurrencies", + "extracurrency", + "fiftlib", + "float", + "frontends", + "gamification", + "gennaio", + "getgems", + "hashmark", + "hashmarks", + "hashrate", + "hashrates", + "hehehe", + "highlevel", + "highload", + "hmac", + "inclusivity", + "inplace", + "int", + "ints", + "ipfs", + "janvier", + "jetton", + "jettons", + "jojo", + "keccak", + "keyblocks", + "keypair", + "keystream", + "leaderboard", + "leaderboards", + "liteserver", + "liteservers", + "long", + "masterchain", + "mathrm", + "micropayment", + "micropayments", + "mintable", + "multichain", + "multisignature", + "mystore", + "mystore.ton", + "mytonctrl", + "nacl", + "nanocoins", + "nanogram", + "nanotons", + "newkeypair", + "nextra", + "nonexist", + "precomplied", + "preimage", + "prer", + "presales", + "previsit", + "pythonlib", + "qrcode", + "quadtree", + "quadtrees", + "randomizer", + "reindex", + "respecifying", + "runvmcode", + "seamus", + "seck256r1", + "seck256r1-signature", + "secp256k1", + "secp256r1", + "selfcheck", + "seqno", + "seqnos", + "shardblocks", + "shardchain", + "shardchains", + "skillset", + "softstack", + "stablecoin", + "stablecoins", + "startapp", + "stdlibs", + "subarrays", + "subdictionary", + "subnetwork", + "subnetworks", + "subresolver", + "sunt", + "superserver", + "tick-tock", + "timeouted", + "tock", + "tokenomics", + "tvmbeta", + "udict", + "uint", + "unbounceable", + "underload", + "underloaded", + "unixtime", + "workchain", + "workchains", + "xguard", + "xlarge", + "xtwitter", + "yourname", + "zerostate", + ], + "ignoreRegExpList": [ + "\\(#.*\\)", + "^\\[.+\\]: .+", // link declarations like [foo]: /ref/stdlib-ownable#bar + "\\[.+\\]\\[.+\\]", // links like [`Resumable{:tact}`][res] + "\\[.*\\]\\(.+\\)", // links like [`self.toCell().asSlice(){:tact}`](/ref/core-cells#cellasslice) + "address\\(\".+\"\\)", // Ton addresses + "mathrm\\{.+\\}", // LaTeX subset + "\\[#.+\\]", // [#nativereserve-combining-modes-with-flags] + "href=\".+\"", // href="/cookbook/dexes/stonfi" + "\".+\": \".+\"", // "from": "kQBrSAP2y7QIUw4_1q0qciHfqdFmOYR9CC1oinn7kyWWRuoV", + "Urls", + "EQ.+", // addresses + "Pub.+", // addresses + "kf.+", // addresses + "[Tt]on\\w*", + "```[\\s\\S]*```", // code snippets + "\/?([\\w\\-]+\/)*[\\w\\-]+\\.[a-zA-Z]{1,5}", // path + ], + "flagWords": [], + "ignorePaths": [ + "static", + "node_modules", + "package.json", + "cspell.json", + "docusaurus.config.js", + "prism-theme.js", + "src", + "deployment", + "docs/learn/tvm-instructions/instructions.csv", + "docs/learn/tvm-instructions/generate_md.py", + "sidebars.js", + "i18n", + ".husky", + ] +} diff --git a/docs/contribute/README.md b/docs/contribute/README.md index fcfd168523e..c1c0898b325 100644 --- a/docs/contribute/README.md +++ b/docs/contribute/README.md @@ -30,11 +30,10 @@ You can use Gitpod (a free, online, VS code-like IDE) for contributing. It will - **Most important**: look around. Match the overall style of the project. This includes formatting, naming files, naming objects in code, naming things in documentation, and so on. - **For documentation**: When editing documentation, do not wrap lines at 80 characters; instead, configure your editor to soft-wrap. +- **Grammar**: `cpell` will check the spelling and suggest corrections in case of mistakes automatically before creating new commit. Feel free to add specific `words` to `cspell.json` config to include them in the verification dictionary. Don't worry too much about styles in general; the maintainers will help you fix them as they review your code. - - ### Pull Requests So you have decided to contribute code back to upstream by opening a pull request. You've put in a lot of effort, and we appreciate it. We will do our best to work with you and get the pull request reviewed. diff --git a/docs/contribute/docs/guidelines.md b/docs/contribute/docs/guidelines.md index c9cbc828117..2df2375b989 100644 --- a/docs/contribute/docs/guidelines.md +++ b/docs/contribute/docs/guidelines.md @@ -10,7 +10,7 @@ Documentations pages is primarily intended for documentation purposes and not as To make it easier for readers to navigate through the documentation, it is important to use a consistent format throughout the document. Use headings, subheadings, bullet points, and numbered lists to break up the text and make it easier to read. ## Provide examples in special section -Providing examples can help readers better understand the content and how to apply it. If you are writing documentation page and need refer several exmaples, please create special section Examples right before References and See Also sections. Do not mix description and examples in documentation pages. +Providing examples can help readers better understand the content and how to apply it. If you are writing documentation page and need refer several examples, please create special section Examples right before References and See Also sections. Do not mix description and examples in documentation pages. Use code snippets, screenshots, or diagrams to illustrate your points and make the documentation more engaging. ## Keep it up to date diff --git a/docs/develop/archive/mining.md b/docs/develop/archive/mining.md index d12b5253afe..06ebe2e6632 100644 --- a/docs/develop/archive/mining.md +++ b/docs/develop/archive/mining.md @@ -116,7 +116,7 @@ No, all miners take different roads to find the solution. A faster machine has a #### How much income will my machine generate? Please see [Income estimates](#hardware-estimates). #### Can I use my BTC/ETH rig to mine TON? -No, TON uses a single SHA256 hashing method which is different from BTC, ETH, and others. ASICS or FPGAs wbich are built for mining other cryptos will not help. +No, TON uses a single SHA256 hashing method which is different from BTC, ETH, and others. ASICS or FPGAs which are built for mining other cryptos will not help. #### What is better, a single fast machine or several slow ones? This is controversial. See: miner software launches threads for each core on the system, and each core gets its own set of keys to process, so if you have one machine capable to run 64 threads and 4 x machines capable to run 16 threads each, then they will be exactly as successful assuming that the speed of each thread is the same. diff --git a/docs/develop/archive/tg-bot-integration.mdx b/docs/develop/archive/tg-bot-integration.mdx index 878472c2335..c7d2c393427 100644 --- a/docs/develop/archive/tg-bot-integration.mdx +++ b/docs/develop/archive/tg-bot-integration.mdx @@ -278,7 +278,7 @@ Now you can run the bot (`npm run compile` and `npm run start` then) and send `/ We will use connector in many places, so let's move connector creating code to a separate file: ```ts -// src/ton-connect/conenctor.ts +// src/ton-connect/connector.ts import TonConnect from '@tonconnect/sdk'; import { TonConnectStorage } from './storage'; @@ -492,7 +492,7 @@ async function onChooseWalletClick ... Here we define buttons handlers list and `callback_query` parser. Unfortunately callback data is always string, so we have to pass JSON to the `callback_data` and parse it later in the `callback_query` handler. Then we are looking for the requested method and call it with passed parameters. -Now we should add `conenct-wallet-menu.ts` import to the `main.ts` +Now we should add `connect-wallet-menu.ts` import to the `main.ts` ```ts // src/main.ts diff --git a/docs/develop/dapps/apis/sdk.mdx b/docs/develop/dapps/apis/sdk.mdx index 6ee7ae78e52..297a8df670c 100644 --- a/docs/develop/dapps/apis/sdk.mdx +++ b/docs/develop/dapps/apis/sdk.mdx @@ -40,7 +40,7 @@ There are different ways to connect to blockchain: |[mytonlib](https://github.com/igroman787/mytonlib)|Native ADNL| Native Python SDK library for working with The Open Network | |[TonTools](https://github.com/yungwine/TonTools)|via RPC ([Orbs](https://www.orbs.com/ton-access/) / [Toncenter](https://toncenter.com/api/v2/) / etc)|TonTools is a high-level OOP library for Python, which can be used to interact with TON Blockchain.| |[tonpy](https://github.com/disintar/tonpy)|Native ADNL| Python package that provides data structures and API to interact with TON blockchain. | -|[tvm_valuetypes](https://github.com/toncenter/tvm_valuetypes)|*offchain-only*| library is collection of utilits for handling TVM types. | +|[tvm_valuetypes](https://github.com/toncenter/tvm_valuetypes)|*offchain-only*| library is collection of utilities for handling TVM types. | |[pytvm](https://github.com/yungwine/pytvm) | *offchain* | Python TVM emulator using bindings to C++ standard emulator | diff --git a/docs/develop/dapps/apis/toncenter.md b/docs/develop/dapps/apis/toncenter.md index ab40fb1842a..6d1bf27c92d 100644 --- a/docs/develop/dapps/apis/toncenter.md +++ b/docs/develop/dapps/apis/toncenter.md @@ -47,7 +47,7 @@ Indexers allow to list jetton wallets, NFTs, transactions by certain filters, no ### Anton -Written in Go, Anton is an open source The Open Network blockchain indexer available under the Apache Licence 2.0. Anton is designed to provide a scalable and flexible solution for developers to access and analyze blockchain data. Our goal is to help developers and users understand how the blockchain is being used, as well as make it possible for developers to add their own contracts with their own message schemas to our explorer. +Written in Go, Anton is an open source The Open Network blockchain indexer available under the Apache License 2.0. Anton is designed to provide a scalable and flexible solution for developers to access and analyze blockchain data. Our goal is to help developers and users understand how the blockchain is being used, as well as make it possible for developers to add their own contracts with their own message schemas to our explorer. * [Project GitHub](https://github.com/tonindexer/anton) - to run your own indexer * [Swagger API documentation](https://github.com/tonindexer/anton), [API Query Examples](https://github.com/tonindexer/anton/blob/main/docs/API.md) - to use, study the documentation and examples diff --git a/docs/develop/dapps/asset-processing/overview.md b/docs/develop/dapps/asset-processing/overview.md index a7aedd4df5d..159d376a444 100644 --- a/docs/develop/dapps/asset-processing/overview.md +++ b/docs/develop/dapps/asset-processing/overview.md @@ -23,7 +23,7 @@ For example: ![](/img/docs/asset-processing/alicemsgDAG.svg) * `Alice` use e.g [Tonkeeper](https://tonkeeper.com/) to send an `external message` to her wallet. -* `external message` is the input message for `wallet A v4` contract with empty soure (a message from nowhere, such as [Tonkeeper](https://tonkeeper.com/)). +* `external message` is the input message for `wallet A v4` contract with empty source (a message from nowhere, such as [Tonkeeper](https://tonkeeper.com/)). * `outgoing message` is the output message for `wallet A v4` contract and input message for `wallet B v4` contract with `wallet A v4` source and `wallet B v4` destination. As a result there are 2 transactions with their set of input and output messages. diff --git a/docs/develop/dapps/defi/nft.md b/docs/develop/dapps/defi/nft.md index 2985ca09901..53a162395bf 100644 --- a/docs/develop/dapps/defi/nft.md +++ b/docs/develop/dapps/defi/nft.md @@ -33,7 +33,7 @@ There is TON DNS service, which works fully onchain. It allows users to buy doma NFT Telegram usernames from Fragment can also be used in TON DNS; `yourname.t.me` is a valid domain. -### Usecases of TON Domains +### Use cases of TON Domains 1. You can set domain to resolve to your wallet address, so a person unfamiliar with crypto can transfer money not to `EQDyo...zuDf` but to easily readable `mystore.ton`. 2. You can attach a [TON Site](/develop/dapps/tutorials/how-to-run-ton-site) to the domain; then, it will be accessible in TON Web3 network under a convenient name. diff --git a/docs/develop/dapps/telegram-apps/notcoin.mdx b/docs/develop/dapps/telegram-apps/notcoin.mdx index 85bced60a25..f4193a1f1a9 100644 --- a/docs/develop/dapps/telegram-apps/notcoin.mdx +++ b/docs/develop/dapps/telegram-apps/notcoin.mdx @@ -15,7 +15,7 @@ Notcoin was created by Open Builders, developers of the TON blockchain. Is a pio - **Gamification**: NotCoin integrates game-like elements into its ecosystem, encouraging user engagement and participation through challenges, achievements, and rewards. This approach significantly differs from the typical transaction-based model of other cryptocurrencies, making it more accessible and enjoyable for a broader audience. - **Social Dynamics**: The platform leverages social networks and community building as a core part of its strategy. Users are motivated to invite friends and participate in community events, fostering a sense of belonging and significantly contributing to its viral spread. -- **Digital Scarcity and Rewards**: NotCoin employs a mechanism of digital scarcity, ensuring that the asset remains valuable and sought after. This is coupled with a rewards system that incentivizes active participation and contribution to the community. +- **Digital Scarcity and Rewards**: NotCoin employs a mechanism of digital scarcity, ensuring that the asset remains valuable and sought after. This is coupled with a rewards system that incentives active participation and contribution to the community. - **Innovative Technology**: The underlying technology of NotCoin is designed for scalability, security, and ease of use. This ensures that as the platform grows, it remains efficient and accessible to users worldwide. - **Environmental Considerations**: NotCoin takes a conscious approach to its environmental impact, utilizing energy-efficient methods in its operation and promoting sustainable practices within its community. diff --git a/docs/develop/dapps/telegram-apps/publishing.mdx b/docs/develop/dapps/telegram-apps/publishing.mdx index b9f4e4ecb22..b2e432e42fd 100644 --- a/docs/develop/dapps/telegram-apps/publishing.mdx +++ b/docs/develop/dapps/telegram-apps/publishing.mdx @@ -51,7 +51,7 @@ To transmit data from the user back to the bot, the Mini App can call the [Teleg **Good for:** -- **Сustom data input interfaces** (a personalized calendar for selecting dates; selecting data from a list with advanced search options; a randomizer that lets the user “spin a wheel” and chooses one of the available options, etc.) +- **Custom data input interfaces** (a personalized calendar for selecting dates; selecting data from a list with advanced search options; a randomizer that lets the user “spin a wheel” and chooses one of the available options, etc.) - **Reusable components** that do not depend on a particular bot. ### Inline Button Mini Apps diff --git a/docs/develop/dapps/ton-connect/integration.md b/docs/develop/dapps/ton-connect/integration.md index 9d0847c8257..4fccdf2a41f 100644 --- a/docs/develop/dapps/ton-connect/integration.md +++ b/docs/develop/dapps/ton-connect/integration.md @@ -481,7 +481,11 @@ verify_key.verify(hashlib.sha256(signed).digest(), base64.b64decode(signature)) # b'\x0eT\xd6\xb5\xd5\xe8HvH\x0b\x10\xdc\x8d\xfc\xd3#n\x93\xa8\xe9\xb9\x00\xaaH%\xb5O\xac:\xbd\xcaM' ``` -After implementing the above parameters, if an attacker tries to impersonate a user and doesn't provide a valid signature, the following error will be displayed: `nacl.exceptions.BadSignatureError: Signature was forged or corrupt`. +After implementing the above parameters, if an attacker tries to impersonate a user and doesn't provide a valid signature, the following error will be displayed: + +```bash +nacl.exceptions.BadSignatureError: Signature was forged or corrupt. +``` ## Next steps diff --git a/docs/develop/dapps/ton-connect/protocol/README.md b/docs/develop/dapps/ton-connect/protocol/README.md index c0901113265..ee59fbaf733 100644 --- a/docs/develop/dapps/ton-connect/protocol/README.md +++ b/docs/develop/dapps/ton-connect/protocol/README.md @@ -28,11 +28,19 @@ Please take the [JS SDK](/develop/dapps/ton-connect/developers) as a reference a #### How do you detect whether the app is embedded in the wallet? -JS SDK does that for you; just get wallets list `connector.getWallets()` and check `embedded` property of the corresponding list item. If you build your own SDK you should check `window.[targetWalletJsBridgeKey].tonconnect.isWalletBrowser`. +JS SDK does that for you; just get wallets list +```js +`connector.getWallets()` +``` +and check `embedded` property of the corresponding list item. If you build your own SDK you should check `window.[targetWalletJsBridgeKey].tonconnect.isWalletBrowser`. #### How do you detect if the wallet is a browser extension? -Like with embedded apps (see above), JS SDK detects it for you via `injected` property of the corresponding `connector.getWallets()` list item. If you build your own SDK you should check that `window.[targetWalletJsBridgeKey].tonconnect` exists. +Like with embedded apps (see above), JS SDK detects it for you via `injected` property of the corresponding +```js +`connector.getWallets()` +``` +list item. If you build your own SDK you should check that `window.[targetWalletJsBridgeKey].tonconnect` exists. #### How to implement backend authorization with tonconnect? diff --git a/docs/develop/dapps/ton-connect/protocol/wallet-guidelines.md b/docs/develop/dapps/ton-connect/protocol/wallet-guidelines.md index 38b20ae6bb5..3e95fce39f6 100644 --- a/docs/develop/dapps/ton-connect/protocol/wallet-guidelines.md +++ b/docs/develop/dapps/ton-connect/protocol/wallet-guidelines.md @@ -11,16 +11,16 @@ ### Hide the Testnet from ordinary users. Testnet is used exclusively by developers. Ordinary users should not see the Testnet. -This means that switching to Testnet should not be readily available and users SHOULD NOT be prompted to switch wallet to Testnet even if DAppis in Testnet. +This means that switching to Testnet should not be readily available and users SHOULD NOT be prompted to switch wallet to Testnet even if DApp is in Testnet. Users switch to Testnet, don't understand this action, can't switch back to Mainnet. -For these reasons, dapps do not need to switch networks in runtime, on the contrary, it is more preferable to have different instances of DAppon different domains dapp.com, Testnet.dapp.com. +For these reasons, dapps do not need to switch networks in runtime, on the contrary, it is more preferable to have different instances of DApp on different domains dapp.com, Testnet.dapp.com. For the same reason there is no `NetworkChanged` or `ChainChanged` event in the Ton Connect protocol. -### Do not send anything if the DAppis in Testnet and the wallet is in Mainnet. +### Do not send anything if the DApp is in Testnet and the wallet is in Mainnet. - It is necessary to prevent loss of funds when DApptries to send a transaction in Testnet, and the wallet sends it in Mainnet. + It is necessary to prevent loss of funds when DApp tries to send a transaction in Testnet, and the wallet sends it in Mainnet. Dapps should explicitly indicate `network` field in `SendTransaction` request. @@ -40,21 +40,21 @@ We think of a wallet as a physical wallet that can contain many "bank cards" (ac In most cases the sender address is not important to dapp, in these cases the user can select the appropriate account at the time of approving the transaction and the transaction will be sent from selected account. -In some cases, it is important for DAppto send the transaction from a specific address, in which case it explicitly specifies the `from` field in `SendTransaction` request. If `from` parameter is set, the wallet should DO NOT ALLOW user to select the sender's address; If sending from the specified address is impossible, the wallet should show an alert and DO NOT ALLOW TO SEND this transaction. +In some cases, it is important for DApp to send the transaction from a specific address, in which case it explicitly specifies the `from` field in `SendTransaction` request. If `from` parameter is set, the wallet should DO NOT ALLOW user to select the sender's address; If sending from the specified address is impossible, the wallet should show an alert and DO NOT ALLOW TO SEND this transaction. ### Login flow -When DAppconnects the wallet, the user selects in the wallet one of their accounts that they want to log into dapp. +When DApp connects the wallet, the user selects in the wallet one of their accounts that they want to log into DApp. -Regardless of what accounts the user uses next in the wallet, DAppworks with the account he received on the connection. +Regardless of what accounts the user uses next in the wallet, DApp works with the account he received on the connection. Just like if you logged into a web service with one of your email accounts - if you then change the email account in the email service, the web service continues to use the one he got when you logged in. For this reason, the protocol does not provide the `AccountChanged` event. -To switch account user need to disconnect (Log out) and connect (Login) again in DAppUI. +To switch account user need to disconnect (Log out) and connect (Login) again in DApp UI. -We recommend wallets provide the ability to disconnect session with a specified DAppbecause the DAppmay have an incomplete UI. +We recommend wallets provide the ability to disconnect session with a specified DApp because the DApp may have an incomplete UI. ## See Also diff --git a/docs/develop/dapps/ton-connect/react.mdx b/docs/develop/dapps/ton-connect/react.mdx index f7dee24c9bb..e74dc128738 100644 --- a/docs/develop/dapps/ton-connect/react.mdx +++ b/docs/develop/dapps/ton-connect/react.mdx @@ -329,7 +329,7 @@ await tonConnectUI.disconnect(); ## Examples -* Step-by-step [TON Hello World guide](https://ton-community.github.io/tutorials/03-client/) to create a simple DAppwith React UI. +* Step-by-step [TON Hello World guide](https://ton-community.github.io/tutorials/03-client/) to create a simple DApp with React UI. * [Demo dApp](https://github.com/ton-connect/demo-dapp-with-react-ui) - Example of a DApp with `@tonconnect/ui-react`. * [ton.vote](https://github.com/orbs-network/ton-vote) - Example of React website with TON Connect implementation. diff --git a/docs/develop/dapps/ton-connect/transactions.md b/docs/develop/dapps/ton-connect/transactions.md index 8d97fcaadb8..fa4744ebdb2 100644 --- a/docs/develop/dapps/ton-connect/transactions.md +++ b/docs/develop/dapps/ton-connect/transactions.md @@ -3,7 +3,7 @@ TON Connect 2.0 has more powerful options than just authenticating users in the dApp: it's possible to send outgoing messages via connected wallets! You will understand: -- how to send messages from the DAppto the blockchain +- how to send messages from the DApp to the blockchain - how to send multiple messages in one transaction - how to deploy a contract using TON Connect diff --git a/docs/develop/dapps/tutorials/how-to-run-ton-site.md b/docs/develop/dapps/tutorials/how-to-run-ton-site.md index 74c4b2c50a1..623e26ea42e 100644 --- a/docs/develop/dapps/tutorials/how-to-run-ton-site.md +++ b/docs/develop/dapps/tutorials/how-to-run-ton-site.md @@ -44,7 +44,7 @@ Build it from sources using `./build.sh`, and run as in the step 2 for linux. Go ## 👀 Further steps -### 🔍 Сhecking availability of the site +### 🔍 Checking availability of the site After completing all the steps of the method you selected, the TON Proxy should have started. If everything was successful, your site will be available at the ADNL address received at the corresponding step. diff --git a/docs/develop/data-formats/library-cells.md b/docs/develop/data-formats/library-cells.md index a9cd18e63c2..ab1d453d45f 100644 --- a/docs/develop/data-formats/library-cells.md +++ b/docs/develop/data-formats/library-cells.md @@ -3,7 +3,7 @@ ## Introduction One of the native feature of how TON stores data in Cells is deduplication: in storage, messages, blocks, transactions and so on duplicate cells are stored only once. This tremendously decrease size of serialized data, and allows efficient storage of step-wise updated data. -For the same reason many structures in TON are simultaneously rich, convinient and efficient: block structure contains the same copy of each message in many places: in Message queue, in list of Transaction, in Merkle updates and so on: since duplication has no overhead we can store data multiple times where we need it without worring about efficiency. +For the same reason many structures in TON are simultaneously rich, convenient and efficient: block structure contains the same copy of each message in many places: in Message queue, in list of Transaction, in Merkle updates and so on: since duplication has no overhead we can store data multiple times where we need it without warring about efficiency. Library cells employ a deduplication mechanism on-chain, allowing the integration of this technology into custom smart contracts. :::info @@ -14,7 +14,7 @@ If you store jetton-wallet code as library cell (1 cell and 256+8 bits, instead Lets consider basechain step from block 1'000'000 to block 1'000'001. While each block contains small amount of data (usually less than 1000 transactions), the whole Basechain state contains millions of accounts and since blockchain need to keep integrity of the data (in particular to commit merkle root hash of whole state to the block) whole tree of the state need to be updated. -For the blockchains of previous generations this means that generally you keep track of only recent states because storing separate chain states for each block will require too much space. But in TON Blockchain due to deduplication, for each block you only add to storage new cells. This not only make processing faster but also allows you to efficiently work with history: check balances, states and even run getmethods for any point in history without much overhead! +For the blockchains of previous generations this means that generally you keep track of only recent states because storing separate chain states for each block will require too much space. But in TON Blockchain due to deduplication, for each block you only add to storage new cells. This not only make processing faster but also allows you to efficiently work with history: check balances, states and even run get methods for any point in history without much overhead! For the case when we have a family of similar contracts (for instance jetton-wallets), node stores duplicating data (the same code of each jetton-wallet) only once. Library Cells allows to utilize deduplication mechanism for such contracts to decrease storage and forward fees. @@ -28,11 +28,11 @@ Library cell is [exotic cell](/develop/data-formats/exotic-cells) that contains For TVM, library cells works as follows: whenever TVM receives a command to open a cell to a slice (TVM Instruction: `CTOS`, funC method: `.begin_parse()`), it searches cell with the corresponding hash from library cell in the Masterchain library context. If found it, it opens referenced cell and returns its slice. -Opening library cell costs the same as opening ordinar cell, so it can be used as transparent replacement for static cells that however occupy much less space (and thus costs less fees for storage and sending). +Opening library cell costs the same as opening ordinary cell, so it can be used as transparent replacement for static cells that however occupy much less space (and thus costs less fees for storage and sending). Note that it is possible to create a library cell that references another library cell, which in turn references another, and so on. For such case `.begin_parse()` will raise exception. Such library however can be unwrapped step-wise with `XLOAD` opcode. -Another important peculiarities of Library Cell is that since it contains hash of referenced cell it is ultimatively reference to some satic data. You can not change data to which this library cell is referenced. +Another important peculiarities of Library Cell is that since it contains hash of referenced cell it is ultimately reference to some static data. You can not change data to which this library cell is referenced. To be found in the Masterchain library context and thus referenced by a Library Cell, a source Cell needs to be published in the Masterchain. This means that a smart contract existing in the Masterchain needs to add this cell to its state with the `public=true` flag. This can be accomplished using the `SETLIBCODE` opcode. diff --git a/docs/develop/data-formats/tl.md b/docs/develop/data-formats/tl.md index b4b768bdced..d6377cda98a 100644 --- a/docs/develop/data-formats/tl.md +++ b/docs/develop/data-formats/tl.md @@ -26,7 +26,7 @@ we get: `[0xFE, 0x8C, 0x01, 0x00, array bytes]`, 396+4 = 400, which is a multipl ## Non-obvious serialization rules -Often, a 4-byte prefix is written before the schema itself - its ID. The schema ID is a CRC32 with an IEEEE table from the schema text, while symbols such as `;` and brackets `()` are previously removed from the text. The serialization of a schema with an ID prefix is called **boxed**, this allows the parser to determine which schema comes before it if there are multiple options. +Often, a 4-byte prefix is written before the schema itself - its ID. The schema ID is a CRC32 with an IEEE table from the schema text, while symbols such as `;` and brackets `()` are previously removed from the text. The serialization of a schema with an ID prefix is called **boxed**, this allows the parser to determine which schema comes before it if there are multiple options. How to determine whether to serialize as boxed or not? If our schema is part of another schema, then we need to look at how the field type is specified, if it is specified explicitly, then we serialize without a prefix, if not explicitly (there are many such types), then we need to serialize as boxed. Example: ```tlb diff --git a/docs/develop/ethereum-to-ton/blockchain-services.md b/docs/develop/ethereum-to-ton/blockchain-services.md index 83b0abccc48..0e4a976aa6c 100644 --- a/docs/develop/ethereum-to-ton/blockchain-services.md +++ b/docs/develop/ethereum-to-ton/blockchain-services.md @@ -20,11 +20,11 @@ One of the key advantages of TON Proxy is its ability to bypass blockades impose In addition, TON Proxy helps to speed up Internet connection speeds. It automatically selects the servers with the lowest load, which improves the quality of connection and the speed of Internet access. -## Decentralised storage +## Decentralized storage Ethereum is not suitable for storing large amounts of data. Therefore, decentralized storage on Ethereum typically involves using distributed file systems to store and retrieve data in a decentralized and secure manner. One popular approach to decentralized storage on Ethereum is the InterPlanetary File System (IPFS), which is a peer-to-peer file system that allows users to store and retrieve files from a network of distributed nodes. -TON network has its own decentralised storage service, that is used by the TON Blockchain to store archive copies of blocks and status data (snapshots), but also available for storing users’ files or other services running on the platform, with torrent-like access technology. The most popular use case is to store NFT metadata directly on TON storage, not using additional distributed file storage services like IPFS. +TON network has its own decentralized storage service, that is used by the TON Blockchain to store archive copies of blocks and status data (snapshots), but also available for storing users’ files or other services running on the platform, with torrent-like access technology. The most popular use case is to store NFT metadata directly on TON storage, not using additional distributed file storage services like IPFS. ## Payment services diff --git a/docs/develop/ethereum-to-ton/solidity-vs-func.md b/docs/develop/ethereum-to-ton/solidity-vs-func.md index 3dbd92fd810..17a096c478b 100644 --- a/docs/develop/ethereum-to-ton/solidity-vs-func.md +++ b/docs/develop/ethereum-to-ton/solidity-vs-func.md @@ -5,13 +5,13 @@ Solidity is an object-oriented, high-level, strictly-typed language influenced b FunC is also a high-level language, used to program smart contracts on TON Blockchain, being a domain-specific, C-like, statically-typed language. -In the sections below will be analysed briefly the following aspects of these languages, i.e. data types, storage, functions, flow control structures and dictionaries (hashmaps). +In the sections below will be analyzed briefly the following aspects of these languages, i.e. data types, storage, functions, flow control structures and dictionaries (hashmaps). ## Storage layout Solidity provides a flat storage model, which means that all state variables are stored in a single, continuous block of memory called the storage. The storage is a key-value store where each key is a 256-bit (32-byte) integer that represents the storage slot number, and each value is the 256-bit word stored at that slot. The slots are numbered sequentially starting from zero, and each slot can store a single word. Solidity allows the programmer to specify the storage layout by using the storage keyword to define state variables. The order in which the variables are defined determines their position in the storage. -Permanent storage data in TON Blockchain is stored as a cell. Cells play the role of memory in the stack-based TVM. A cell can be transformed into a slice, and then the data bits and references to other cells from the cell can be obtained by loading them from the slice. Data bits and references to other cells can be stored into a builder, and then the builder can be finalised into a new cell. +Permanent storage data in TON Blockchain is stored as a cell. Cells play the role of memory in the stack-based TVM. A cell can be transformed into a slice, and then the data bits and references to other cells from the cell can be obtained by loading them from the slice. Data bits and references to other cells can be stored into a builder, and then the builder can be finalized into a new cell. ## Data types diff --git a/docs/develop/func/literals_identifiers.md b/docs/develop/func/literals_identifiers.md index ef17d1c8a77..7754d148a7b 100644 --- a/docs/develop/func/literals_identifiers.md +++ b/docs/develop/func/literals_identifiers.md @@ -54,11 +54,11 @@ These are invalid identifiers: - `_` Some more uncommon examples of valid identifiers: -- `123validname` +- `123valid` - `2+2=2*2` -- `-alsovalidname` -- `0xefefefhahaha` -- `{hehehe}` +- `-valid` +- `0xdead` +- `{valid}` - ``pa{--}in"`aaa`"`` These are also invalid identifiers: diff --git a/docs/develop/get-started-with-ton.mdx b/docs/develop/get-started-with-ton.mdx index 87e7ec3cfd1..be214f663a6 100644 --- a/docs/develop/get-started-with-ton.mdx +++ b/docs/develop/get-started-with-ton.mdx @@ -19,7 +19,7 @@ This learning path contains __5 modules__ and should take you around __45 minute In this tutorial, you'll learn how to easily make blockchain transactions using JavaScript. You could learn to do it without this tutorial, but this approach is convenient and user-friendly. 1. You will make your own TON Wallet with Tonkeeper -2. You will use a Testnet faucet to topup your wallet for testing +2. You will use a Testnet faucet to top up your wallet for testing 3. You will understand essential concepts of TON smart contracts (Addresses, Cells) 4. You will learn how to interact with TON using TypeScript SDK and API provider 5. You will compile your first transaction using NFT Miner console application diff --git a/docs/develop/howto/faq.md b/docs/develop/howto/faq.md index 914b2d2647a..6f6a543b83a 100644 --- a/docs/develop/howto/faq.md +++ b/docs/develop/howto/faq.md @@ -46,7 +46,7 @@ In addition, the current TON architecture lacks a market-based mechanism for det ### What is the RPC method used to retrieve block information? -Blocks produced by Validators. Existing blocks available via Liteservers. Liteservers accessible via Lite Сlients. On top of Lite Сlient built 3rd-party tools like wallets, explorers, dapps, etc. +Blocks produced by Validators. Existing blocks available via Liteservers. Liteservers accessible via Lite Clients. On top of Lite Client built 3rd-party tools like wallets, explorers, dapps, etc. - To access the Lite Client core check out this section of our GitHub: [ton-blockchain/tonlib](https://github.com/ton-blockchain/ton/tree/master/tonlib) @@ -222,7 +222,7 @@ To protect message chains from being halted at non-existing contracts TON use "b ### Does the upgradability of a smart-contract pose a threat to its users? -Currently, the ability to update smart contracts is a normal practice and is widely used in most modern protocols. This is because updatability allows for bug fixes, adding new features and improving security. +Currently, the ability to update smart contracts is a normal practice and is widely used in most modern protocols. This is because upgradability allows for bug fixes, adding new features and improving security. How to mitigate the risks: diff --git a/docs/develop/network/dht.md b/docs/develop/network/dht.md index 87c6d20a057..0972b36f302 100644 --- a/docs/develop/network/dht.md +++ b/docs/develop/network/dht.md @@ -156,7 +156,13 @@ After we have filled in `tonNode.shardPublicOverlayId`, we serialize it and get We need to use the resulting key ID as `name` to fill in the `pub.overlay name:bytes = PublicKey` structure, wrapping it in TL bytes array. Next, we serialize it, and we get the key ID now from it. -The resulting id will be the key to use in `dht.findValue`, and the `name` field's value will be the word `nodes`. We repeat the process from the previous section, everything is the same as last time, but `updateRule` will be [dht.updateRule.overlayNodes](#dhtupdateruleoverlaynodes). +The resulting id will be the key to use in + +```bash +dht.findValue +``` + +, and the `name` field's value will be the word `nodes`. We repeat the process from the previous section, everything is the same as last time, but `updateRule` will be [dht.updateRule.overlayNodes](#dhtupdateruleoverlaynodes). After validation - we will get the public keys (`id`) of the nodes that have information about our workchain and shard. To get the ADNL addresses of the nodes, we need to make IDs from the keys (using the hashing method) and repeat the procedure described above for each of the ADNL addresses, as with the ADNL address of the `foundation.ton` domain. diff --git a/docs/develop/oracles/about_blockchain_oracles.md b/docs/develop/oracles/about_blockchain_oracles.md index ffd9a724b6f..c723b6f016e 100644 --- a/docs/develop/oracles/about_blockchain_oracles.md +++ b/docs/develop/oracles/about_blockchain_oracles.md @@ -32,7 +32,7 @@ These oracles are developed individually for certain smart contracts and may not ### Crosschain oracles -These oracles are used to transfer data between different blockchains and are a critical component of bridges. They are used for decentralized applications that use cross-chain transactions, such as cross-chain transfer of cryptoassets from one network to another. +These oracles are used to transfer data between different blockchains and are a critical component of bridges. They are used for decentralized applications that use cross-chain transactions, such as cross-chain transfer of crypto assets from one network to another. ## Application of blockchain oracles diff --git a/docs/develop/oracles/red_stone.mdx b/docs/develop/oracles/red_stone.mdx index 915eab006f6..5d00dce9d2e 100644 --- a/docs/develop/oracles/red_stone.mdx +++ b/docs/develop/oracles/red_stone.mdx @@ -4,7 +4,7 @@ import ThemedImage from '@theme/ThemedImage'; ## How RedStone oracles work with TON -RedStone oracles use an alternative design of providing oracle data to smart contracts. Instead of constantly persisting data on the contract's storage (by data providers), the information is brought on-chain only when needed (by end users). Until that moment data remains in the decentralised cache layer, which is powered by RedStone light cache gateways and +RedStone oracles use an alternative design of providing oracle data to smart contracts. Instead of constantly persisting data on the contract's storage (by data providers), the information is brought on-chain only when needed (by end users). Until that moment data remains in the decentralized cache layer, which is powered by RedStone light cache gateways and streams data broadcasting protocol. Data is transferred to the contract by end users, who should attach signed data packages to their function invocations. The information integrity is verified on-chain through signature checking. diff --git a/docs/develop/smart-contracts/guidelines/message-modes-cookbook.mdx b/docs/develop/smart-contracts/guidelines/message-modes-cookbook.mdx index 0a154d4e3b6..a2b18e54cdb 100644 --- a/docs/develop/smart-contracts/guidelines/message-modes-cookbook.mdx +++ b/docs/develop/smart-contracts/guidelines/message-modes-cookbook.mdx @@ -67,7 +67,7 @@ if an error occurs during action processing - bounce the message in addition to We currently have 100 Toncoin in the balance of our smart contract. After receiving an internal message with 50 Toncoin we carry all the remaining value of the inbound message in addition to the value initially indicated in the new message, the transaction fee is 3 Toncoin and will be deducted from the message. -![](/img/docs/message-modes-cookbook/сarry_all_the_remaining_value.svg) +![](/img/docs/message-modes-cookbook/carry_all_the_remaining_value.svg) | Mode and Flags | Code | |:-|:-| @@ -78,7 +78,7 @@ the transaction fee is 3 Toncoin and will be deducted from the message. We currently have 100 Toncoin in the balance of our smart contract. After receiving an internal message with 50 Toncoin we carry all the remaining value of the inbound message in addition to the value initially indicated in the new message, the transaction fee is 3 Toncoin and will be paid separately (from the smart contract balance). -![](/img/docs/message-modes-cookbook/сarry_all_the_remaining_value_and_pay_fees_separately.svg) +![](/img/docs/message-modes-cookbook/carry_all_the_remaining_value_and_pay_fees_separately.svg) | Mode and Flags | Code | |:-|:-| @@ -89,7 +89,7 @@ the transaction fee is 3 Toncoin and will be paid separately (from the smart con We currently have 100 Toncoin in the balance of our smart contract. After receiving an internal message with 50 Toncoin we carry all the remaining value of the inbound message in addition to the value initially indicated in the new message, the transaction fee is 3 Toncoin and will be deducted from the message, if an error occurs during action processing - bounce the message in addition to rolling back the transaction. -![](/img/docs/message-modes-cookbook/сarry_all_the_remaining_value_and_if_error_bounce.svg) +![](/img/docs/message-modes-cookbook/carry_all_the_remaining_value_and_if_error_bounce.svg) | Mode and Flags | Code | |:-|:-| @@ -100,7 +100,7 @@ the transaction fee is 3 Toncoin and will be deducted from the message, if an er We currently have 100 Toncoin in the balance of our smart contract. After receiving an internal message with 50 Toncoin we send a message, we transfer the entire contract balance in addition to the original amount received, the transaction fee is 3 Toncoin and will be paid separately (from the smart contract balance), if an error occurs during action processing - bounce the message in addition to rolling back the transaction. -![](/img/docs/message-modes-cookbook/сarry_all_the_remaining_value_and_pay_fees_separately_and_if_error_bounce.svg) +![](/img/docs/message-modes-cookbook/carry_all_the_remaining_value_and_pay_fees_separately_and_if_error_bounce.svg) | Mode and Flags | Code | |:-|:-| diff --git a/docs/develop/smart-contracts/messages.md b/docs/develop/smart-contracts/messages.md index 73047ffc229..e9fb59d5583 100644 --- a/docs/develop/smart-contracts/messages.md +++ b/docs/develop/smart-contracts/messages.md @@ -131,7 +131,7 @@ Indeed, in the elector code above we serialize coins' amounts via `.store_coins( * First bit stands for empty extra-currencies dictionary. * Then we have two 4-bit long fields. They encode 0 as `VarUInteger 16`. In fact, since `ihr_fee` and `fwd_fee` will be overwritten, we may as well put there zeroes. * Then we put zero to `created_lt` and `created_at` fields. Those fields will be overwritten as well; however, in contrast to fees, these fields have a fixed length and are thus encoded as 64- and 32-bit long strings. -* _(we had alredy serialized the message header and passed to init/body at that moment)_ +* _(we had already serialized the message header and passed to init/body at that moment)_ * Next zero-bit means that there is no `init` field. * The last zero-bit means that msg_body will be serialized in-place. * After that, message body (with arbitrary layout) is encoded. @@ -165,8 +165,8 @@ More configuration parameters and there values can be found [here](/develop/howt As you might've noticed, we send messages with `send_raw_message` which, apart from consuming the message itself, also accepts the mode. This mode is used to determine the mode for sending messages, including whether to pay for fuel separately and how to handle errors. When the TON Virtual Machine (TVM) analyses and processes messages, it performs differentiated processing depending on the mode value. Easily confused is that the value of the mode parameter has two variables, namely mode and flag. Mode and flag have different functions: -- mode : defines the basic behaviour when sending a message, e.g. whether to carry a balance, whether to wait for message processing results, etc. Different mode values represent different sending characteristics, and different values can be combined to meet specific sending requirements. -- flag : as an addition to the mode, it is used to configure specific message behaviour, such as paying transfer fees separately or ignoring processing errors. The flag is added to the mode to create the final message sending mode. +- mode : defines the basic behavior when sending a message, e.g. whether to carry a balance, whether to wait for message processing results, etc. Different mode values represent different sending characteristics, and different values can be combined to meet specific sending requirements. +- flag : as an addition to the mode, it is used to configure specific message behavior, such as paying transfer fees separately or ignoring processing errors. The flag is added to the mode to create the final message sending mode. When using the `send_raw_message` function, it is important to select the appropriate mode and flag combination for your needs. To figure out the mode that best suits your needs, take a look at the following table: @@ -233,5 +233,5 @@ Let's look at an example to make it clearer. Let's imagine a situation where we | Send all received tokens together with the contract balance | `mode` = 128, `flag` = 0 | `send_raw_message(msg, 128)` | `balance` - 0, `send` - 100 + 50 - 3 = 147 | Send all received tokens together with the contract balance, if there was an error in processing the action - bounce the message in addition to rolling back the transaction | `mode` = 128, `flag` = 16 | `send_raw_message(msg, 144)` | `balance` - 0 + `147 (bounced)`, `send` - 100 + 50 - 3 = `bounce` message with 147 | Send all received tokens together with the contract balance and destroy smart-contract | `mode` = 128, `flag` = 32 | `send_raw_message(msg, 160)` | `balance` - 0, `send` - 100 + 50 - 3 = 147 -| Send all received tokens together with the contract balance and destroy smart-contract, if there was an error in processing the action - bounce the message in addition to rolling back the transaction. `IMPORTANT: Avoid this behaviour because the refunds will go to an already deleted contract.` | `mode` = 128, `flag` = 32 + 16 | `send_raw_message(msg, 176)` | `balance` - 0 + `147 (bounced)`, `send` - 100 + 50 - 3 = `bounce` message with 147 +| Send all received tokens together with the contract balance and destroy smart-contract, if there was an error in processing the action - bounce the message in addition to rolling back the transaction. `IMPORTANT: Avoid this behavior because the refunds will go to an already deleted contract.` | `mode` = 128, `flag` = 32 + 16 | `send_raw_message(msg, 176)` | `balance` - 0 + `147 (bounced)`, `send` - 100 + 50 - 3 = `bounce` message with 147 diff --git a/docs/develop/smart-contracts/sdk/toncli.md b/docs/develop/smart-contracts/sdk/toncli.md index b3c3c7fba84..be9f5b0f36f 100644 --- a/docs/develop/smart-contracts/sdk/toncli.md +++ b/docs/develop/smart-contracts/sdk/toncli.md @@ -61,7 +61,7 @@ During installation, on the first screen, you need to click the `Add Python to P 3) Open the terminal as an administrator and `pip install toncli` by installing `toncli` -4) Unzip the downloaded archive and add [libcrypto-1_1-x64.dll](https://disk.yandex.ru/d/BJk7WPwr_JT0fw) to unziped files +4) Unzip the downloaded archive and add [libcrypto-1_1-x64.dll](https://disk.yandex.ru/d/BJk7WPwr_JT0fw) to unzipped files 5) Open the folder in the console for windows users: diff --git a/docs/develop/smart-contracts/security/things-to-focus.md b/docs/develop/smart-contracts/security/things-to-focus.md index 4f6364ba3ec..6056feb79e5 100644 --- a/docs/develop/smart-contracts/security/things-to-focus.md +++ b/docs/develop/smart-contracts/security/things-to-focus.md @@ -50,7 +50,7 @@ Contracts in the blockchain can reside in separate shards, processed by other se It is helpful to think through the roadmap of exit codes for the code flow (and have it documented) before starting programming your TON smart contract. -### 9. Func functions that have medhod_id identifiers have method IDs +### 9. Func functions that have method_id identifiers have method IDs They can be either set explicitly `"method_id(5)"`, or implicitly by a func compiler. In this case, they can be found among methods declarations in the .fift assembly file. Two of them are predefined: one for receiving messages inside of blockchain `(0)`, commonly named `recv_internal`, and one for receiving messages from outside `(-1)`, `recv_external`. diff --git a/docs/develop/smart-contracts/tutorials/multisig-js.md b/docs/develop/smart-contracts/tutorials/multisig-js.md index 3ae9e21110e..c1b2a5dcbf6 100644 --- a/docs/develop/smart-contracts/tutorials/multisig-js.md +++ b/docs/develop/smart-contracts/tutorials/multisig-js.md @@ -152,7 +152,7 @@ And of course you can get public properties from `MultisigWallet`, `MultisigOrde * MultisigOrderBuilder - `messages` - array of `MessageWithMode` to be added to the order - - `querryId` - golbal time until which the order is valid + - `queryId` - global time until which the order is valid * MultisigOrder - `payload` - `Cell` with order payload diff --git a/docs/learn/glossary.md b/docs/learn/glossary.md index f74be990bb2..474e15fe8c1 100644 --- a/docs/learn/glossary.md +++ b/docs/learn/glossary.md @@ -282,7 +282,7 @@ __________ ### Metaverse -**Metaverse** — a digital universe similar to a videogame where users create avatars and interact with the digital representations of other people or users. +**Metaverse** — a digital universe similar to a video game where users create avatars and interact with the digital representations of other people or users. ### Moon @@ -443,7 +443,7 @@ ________ ### TVL -**TVL** (Total Value Locked) — Тotal value locked represents the number of assets currently being staked in a specific protocol. +**TVL** (Total Value Locked) — Total value locked represents the number of assets currently being staked in a specific protocol. ### TVM @@ -487,7 +487,7 @@ ___________ ### Watchlist -**Wаtchlist** — a customizable list of cryptocurrencies whose price action an investor wishes to follow. +**Watchlist** — a customizable list of cryptocurrencies whose price action an investor wishes to follow. ### Workchain diff --git a/docs/learn/tvm-instructions/fee-calculation-instructions.md b/docs/learn/tvm-instructions/fee-calculation-instructions.md index ba558258840..15c1c738c3d 100644 --- a/docs/learn/tvm-instructions/fee-calculation-instructions.md +++ b/docs/learn/tvm-instructions/fee-calculation-instructions.md @@ -24,7 +24,7 @@ This update is activated by Config8 `version` >= 6. The idea behind this extension of c7 by unpacked config parameters is the following: this data will be retrieved from global configuration by transaction executor, so it is already presented in memory of executor. However (before extension) smart-contract need to get all of these parameters one-by-one from configuration dictionary which is expensive and potentially unpredictable by gas (since cost depends on number of parameters). -Due payment is needed so contract can properly assess storage fees: when message sent in default (bouncable) mode to smart-contract, storage fees are deducted (or added to due_payment field that contains storage fee related debt) prior message value is added to balance. Thus, if contract after processing message send gas excesses back with mode=64, that means that if contract balance hit 0, on next transactions storage fees start accruing in due_payment (and not deducted from incoming messages). That way debt will silently accumulate until account freezes. `DUEPAYMENT` allows developer explicitly account/withhold comission for storage and thus prevent any issues. +Due payment is needed so contract can properly assess storage fees: when message sent in default (bounceable) mode to smart-contract, storage fees are deducted (or added to due_payment field that contains storage fee related debt) prior message value is added to balance. Thus, if contract after processing message send gas excesses back with mode=64, that means that if contract balance hit 0, on next transactions storage fees start accruing in due_payment (and not deducted from incoming messages). That way debt will silently accumulate until account freezes. `DUEPAYMENT` allows developer explicitly account/withhold commission for storage and thus prevent any issues. ## New opcodes diff --git a/docs/learn/tvm-instructions/tvm-initialization.md b/docs/learn/tvm-instructions/tvm-initialization.md index 2516ac4a279..3983b2468be 100644 --- a/docs/learn/tvm-instructions/tvm-initialization.md +++ b/docs/learn/tvm-instructions/tvm-initialization.md @@ -28,7 +28,7 @@ A new instance of TVM is initialized prior to the execution of a smart contract - Control register **c3** (code dictionary) is initialized by the cell with the smart contract code like **cc** (current continuation) described above. -- Control register **c4** (root of persistent data) is initialized by the persistent data of the smart contract, stored in its `data` section. In case of a frozen or uninitialized state of the account, the data must be supplied in the `init` field of the incoming message. Notice, that the persistent data of the smart contract does not need to be loaded in its entirery for this to occur. The root is loaded instead, and TVM may load other cells by their references from the root only when they are accessed, thus providing a form of virtual memory. +- Control register **c4** (root of persistent data) is initialized by the persistent data of the smart contract, stored in its `data` section. In case of a frozen or uninitialized state of the account, the data must be supplied in the `init` field of the incoming message. Notice, that the persistent data of the smart contract does not need to be loaded in its entirely for this to occur. The root is loaded instead, and TVM may load other cells by their references from the root only when they are accessed, thus providing a form of virtual memory. - Control register **c5** (root of actions) is initialized by an empty cell. The "output action" primitives of TVM, such as `SENDMSG`, accumulate _output actions_ (e.g., outbound messages) in this register, to be performed upon successful termination of the smart contract. The TL-B scheme for its serialization is [described below](#control-register-c5) diff --git a/docs/learn/tvm-instructions/tvm-upgrade-2023-07.md b/docs/learn/tvm-instructions/tvm-upgrade-2023-07.md index 57273f48283..7c060fe919c 100644 --- a/docs/learn/tvm-instructions/tvm-upgrade-2023-07.md +++ b/docs/learn/tvm-instructions/tvm-upgrade-2023-07.md @@ -17,7 +17,7 @@ This upgrade launched [run](https://t.me/tonblockchain/223) on the Mainnet from * **13**: `tuple` with information about previous blocks. **10** Currently code of the smart contract is presented on TVM level only as executable continuation -and can not be transformed to cell. This code is often used to authorize a neighbour contract +and can not be transformed to cell. This code is often used to authorize a neighbor contract of the same kind, for instance jetton-wallet authorizes jetton-wallet. For now we need to explicitly store code cell in storage which make storage and init_wrapper more cumbersome than it could be. Using **10** for code is compatible to Everscale update of tvm. @@ -33,7 +33,7 @@ Meanwhile, is often desired to account storage fees. **13** Currently there is no way to retrieve data on previous blocks. One of the kill features of TON is that every structure is a Merkle-proof friendly bag (tree) of cells, moreover TVM is cell and merkle-proof friendly as well. -That way, if we include information on the blocks to TVM context it will be possible to make many trustless scenarios: contract A may check transactions on contract B (without B's cooperation), it is possible to recover broken chains of messages (when recover-contract gets and cheks proofs that some transaction occured but reverted), knowing masterchain block hashes is also required to make some validation fisherman functions onchain. +That way, if we include information on the blocks to TVM context it will be possible to make many trustless scenarios: contract A may check transactions on contract B (without B's cooperation), it is possible to recover broken chains of messages (when recover-contract gets and checks proofs that some transaction occurred but reverted), knowing masterchain block hashes is also required to make some validation fisherman functions onchain. Block ids are presented in the following format: ``` @@ -56,7 +56,7 @@ Rule of thumb when choosing gas cost on new opcodes is that it should not be les | `MYCODE` | _`- c`_ | Retrieves code of smart-contract from c7 | | `INCOMINGVALUE` | _`- t`_ | Retrieves value of incoming message from c7 | | `STORAGEFEES` | _`- i`_ | Retrieves value of storage phase fees from c7 | -| `PREVBLOCKSINFOTUPLE` | _`- t`_ | Retrives PrevBlocksInfo: `[last_mc_blocks, prev_key_block]` from c7 | +| `PREVBLOCKSINFOTUPLE` | _`- t`_ | Retrieves PrevBlocksInfo: `[last_mc_blocks, prev_key_block]` from c7 | | `PREVMCBLOCKS` | _`- t`_ | Retrieves only `last_mc_blocks` | | `PREVKEYBLOCK` | _`- t`_ | Retrieves only `prev_key_block` | | `GLOBALID` | _`- i`_ | Retrieves `global_id` from 19 network config | @@ -108,7 +108,7 @@ Gas cost is equal to 10 plus opcode length: 26 for most opcodes, +8 for `LSHIFT# Currently arguments of all stack operations are bounded by 256. That means that if stack become deeper than 256 it becomes difficult to manage deep stack elements. In most cases there are no safety reasons for that limit, i.e. arguments are not limited to prevent too expensive operations. -For some mass stack operations, such as `ROLLREV` (where computation time lineary depends on argument value) gas cost also lineary depends on argument value. +For some mass stack operations, such as `ROLLREV` (where computation time linearly depends on argument value) gas cost also linearly depends on argument value. - Arguments of `PICK`, `ROLL`, `ROLLREV`, `BLKSWX`, `REVX`, `DROPX`, `XCHGX`, `CHKDEPTH`, `ONLYTOPX`, `ONLYX` are now unlimited. - `ROLL`, `ROLLREV`, `REVX`, `ONLYTOPX` consume more gas when arguments are big: additional gas cost is `max(arg-255,0)` (for argument less than 256 the gas consumption is constant and corresponds to the current behavior) - For `BLKSWX`, additional cost is `max(arg1+arg2-255,0)` (this does not correspond to the current behavior, since currently both `arg1` and `arg2` are limited to 255). @@ -275,5 +275,5 @@ Gas cost: ## Sending messages Currently it is difficult to calculate cost of sending message in contract (which leads to some approximations like in [jettons](https://github.com/ton-blockchain/token-contract/blob/main/ft/jetton-wallet.fc#L94)) and impossible to bounce request back if action phase is incorrect. It is also impossible to accurately subtract from incoming message sum of "constant fee for contract logic" and "gas expenses". -- `SENDMSG` takes a cell and mode as input. Creates an output action and returns a fee for creating a message. Mode has the same effect as in the case of SENDRAWMSG. Additionally `+1024` means - do not create an action, only estimate fee. Other modes affect the fee calculation as follows: `+64` substitutes the entire balance of the incoming message as an outcoming value (slightly inaccurate, gas expenses that cannot be estimated before the computation is completed are not taken into account), `+128` substitutes the value of the entire balance of the contract before the start of the computation phase (slightly inaccurate, since gas expenses that cannot be estimated before the completion of the computation phase are not taken into account). +- `SENDMSG` takes a cell and mode as input. Creates an output action and returns a fee for creating a message. Mode has the same effect as in the case of SENDRAWMSG. Additionally `+1024` means - do not create an action, only estimate fee. Other modes affect the fee calculation as follows: `+64` substitutes the entire balance of the incoming message as an outgoing value (slightly inaccurate, gas expenses that cannot be estimated before the computation is completed are not taken into account), `+128` substitutes the value of the entire balance of the contract before the start of the computation phase (slightly inaccurate, since gas expenses that cannot be estimated before the completion of the computation phase are not taken into account). - `SENDRAWMSG`, `RAWRESERVE`, `SETLIBCODE`, `CHANGELIB` - `+16` flag is added, that means in the case of action fail - bounce transaction. No effect if `+2` is used. diff --git a/docs/participate/crosschain/bridge-addresses.md b/docs/participate/crosschain/bridge-addresses.md index 81c50a721dd..4bc871ee2b4 100644 --- a/docs/participate/crosschain/bridge-addresses.md +++ b/docs/participate/crosschain/bridge-addresses.md @@ -82,7 +82,7 @@ Governance Address - [kf83VnnXuaqQV1Ts2qvUr6agacM0ydOux5NNa1mcU-cEO693](https:// TON Address - [Ef8jPzrhTYloKgTCsGgEFNx7OdH-sJ98etJnwrIVSsFxH9mu](https://testnet.tonscan.org/address/Ef8jPzrhTYloKgTCsGgEFNx7OdH-sJ98etJnwrIVSsFxH9mu) - EVM Addresss - 0xeb05E1B6AC0d574eF2CF29FDf01cC0bA3D8F9Bf1 + EVM Address - 0xeb05E1B6AC0d574eF2CF29FDf01cC0bA3D8F9Bf1 * Oracle 2 @@ -203,7 +203,7 @@ Governance Address - [kf9NLH8CsGUkEKGYzCxaLd9Th6T5YkO-MXsCEU9Rw1fiRhf9](https:// TON Address - [Ef8jPzrhTYloKgTCsGgEFNx7OdH-sJ98etJnwrIVSsFxH9mu](https://testnet.tonscan.org/address/Ef8jPzrhTYloKgTCsGgEFNx7OdH-sJ98etJnwrIVSsFxH9mu) - EVM Addresss - 0xeb05E1B6AC0d574eF2CF29FDf01cC0bA3D8F9Bf1 + EVM Address - 0xeb05E1B6AC0d574eF2CF29FDf01cC0bA3D8F9Bf1 * Oracle 2 diff --git a/docs/participate/explorers.mdx b/docs/participate/explorers.mdx index 42c328ca58a..a54da52c4a9 100644 --- a/docs/participate/explorers.mdx +++ b/docs/participate/explorers.mdx @@ -45,7 +45,7 @@ Good explorer for everyday use. It provides a comprehensive view of the TON Bloc - **Convenient for everyday use** - Convenient for developers - TON DNS support -- Сontract types +- Contract types - Contract disassembler ### Links @@ -71,7 +71,7 @@ This explorer is more oriented towards developers than ordinary users. ### Features - **Convenient for developers** -- Сontract types +- Contract types - Contract disassembler ### Links @@ -107,7 +107,7 @@ When viewing the wallet address, you can find out which NFT it stores and, when ### Features - Convenient for developers -- Сontract types +- Contract types - **Specialized in NFT** ### Links @@ -125,7 +125,7 @@ Also, it has a feature that allows you to see the computation phase of the trans - Convenient for developers - Extended information about the computation phase -- Сontract types +- Contract types - Contract disassembler ### Links diff --git a/docs/participate/network-maintenance/staking-incentives.md b/docs/participate/network-maintenance/staking-incentives.md index 43870f437e9..d228fb03a9d 100644 --- a/docs/participate/network-maintenance/staking-incentives.md +++ b/docs/participate/network-maintenance/staking-incentives.md @@ -83,7 +83,7 @@ Learn current TON Blockchain stats [here](https://tontech.io/stats/). On TON Blockchain, there are generally two ways validators can be penalized for misbehaving: idle and malicious misbehaving; both of which are prohibited and may result in being fined (in a process called slashing) for their actions. -If a validator does not participate in block creation and transaction signing for a significant amount of time during a validation round, it is potentially fined using the _Standard fine_ parameter. As of April 2023, the Standard fine accrued is 101 TON (Network Parameter `ConfigParam40:MisbehaviourPunishmentConfig`). +If a validator does not participate in block creation and transaction signing for a significant amount of time during a validation round, it is potentially fined using the _Standard fine_ parameter. As of April 2023, the Standard fine accrued is 101 TON (Network Parameter `ConfigParam40:MisbehaviorPunishmentConfig`). On TON, slashing penalties (fines given to validators) allow any network participant to file a complaint if they believe a validator is misbehaving. During this process, the participant issuing the complaint must attach cryptographic proofs of misbehavior for Elector submission. During the `stake_held_for` dispute resolution period, all validators operating on the network check the validity of complaints and vote whether they will pursue the complaint collectively (while determining the legitimacy of misbehaving proofs and fine allotment). diff --git a/docs/participate/nodes/collators.md b/docs/participate/nodes/collators.md index cee7f4552e4..54ccbc00ea4 100644 --- a/docs/participate/nodes/collators.md +++ b/docs/participate/nodes/collators.md @@ -6,17 +6,17 @@ This feature is testnet only right now! Participate on your own risk. The key feature of TON blockchain is the ability to distribute transaction processing over network nodes, and switching from "everybody checks all transactions" to "every transaction is checked by secure validator subset". This ability to infinitely horizontally scale throughput over shards when one workchain splits to required number of *shardchains* distinguishes TON from other L1 networks. -However it is necessary to regularly rotate validator subsets which process one or another shard to prevent collusion. At the same time to process transactions validators obiviously should know state of the shard prior transaction. The simplest approach is to require all validators to know state of all shards. +However it is necessary to regularly rotate validator subsets which process one or another shard to prevent collusion. At the same time to process transactions validators obviously should know state of the shard prior transaction. The simplest approach is to require all validators to know state of all shards. This approach works well while number of TON users is within range of a few millions and TPS (transactions per second) is under hundred. However, in the future, when TON will process many thousands transactions per second and server hundred millions or billions of people, no single server would be able to keep actual state of whole network. Fortunately, TON was designed with such loads in mind and supports sharding both throughput and state update. -This is achieived through separation of two roles: +This is achieved through separation of two roles: * *Collator* - actor which watch for only part of the network, know actual state and *collate* (generate) next blocks * *Validator* - actor which gets new blocks from *Collator*, checks it's validity and signs it effectively guaranteeing correctness at the risk of losing the stake. -At the same time architecture of TON allows *Validator* effectively validate new blocks without actually storing state of blockchain, by cheking specially crafted proofs. +At the same time architecture of TON allows *Validator* effectively validate new blocks without actually storing state of blockchain, by checking specially crafted proofs. -That way, when throughput of TON will be to heavy to be processed by single machine, network will consist of subnetwork of collators each of which will process only part of the chains it is capable to process and subnetwork of validators which will form many secure sets for commiting new transactions. +That way, when throughput of TON will be to heavy to be processed by single machine, network will consist of subnetwork of collators each of which will process only part of the chains it is capable to process and subnetwork of validators which will form many secure sets for committing new transactions. Currently, TON testnet is used for testing this *Validator*/*Collator* separation, where some validators works as usual, and some validators do not collate blocks for themselves and receive them from collators. @@ -97,7 +97,7 @@ Global config should contain at least one of two secions: `liteservers` and `lit ] ``` -Lite Client and Tonlib support this config and can choose a suitable Liteserver for each query. Note that each Liteserver monitors masterchain by default, and each server in `liteservers_v2` is implicitly configured to accept queries about masterchain. Shard `wc:shard_pfx` in the config means that the server accepts queries about shard `wc:shard_pfx`, its ancestors and its descendsnts (just like configuration of collators). +Lite Client and Tonlib support this config and can choose a suitable Liteserver for each query. Note that each Liteserver monitors masterchain by default, and each server in `liteservers_v2` is implicitly configured to accept queries about masterchain. Shard `wc:shard_pfx` in the config means that the server accepts queries about shard `wc:shard_pfx`, its ancestors and its descendants (just like configuration of collators). ## Full collated data By default validators proposing new block in validator set do not attach data that proves "prior to block" state. This data should be obtained by other validators from locally stored state. That way old (from master branch) and new nodes may reach consensus, but new validators should keep eye on all network state. @@ -108,7 +108,7 @@ Upgrade to new protocol when validators will share blocks with collated data att # Next steps -The practical ability to separate *Validator* and *Collator* roles is the main milestone on the road to limitless throughput, but to create truly decentralised and censorship-resistant network it necessary to +The practical ability to separate *Validator* and *Collator* roles is the main milestone on the road to limitless throughput, but to create truly decentralized and censorship-resistant network it necessary to - ensure independence and redundancy of *Collators* - ensure stable and secure way to interaction of Validators and Collators - ensure suitable financial model for Collators which incentivize durable collation of new blocks diff --git a/docs/participate/nodes/node-maintenance-and-security.md b/docs/participate/nodes/node-maintenance-and-security.md index 8b2a31fd5d2..8c3bde2cc23 100644 --- a/docs/participate/nodes/node-maintenance-and-security.md +++ b/docs/participate/nodes/node-maintenance-and-security.md @@ -7,7 +7,7 @@ This document assumes that a validator is installed using the configuration and ## Maintenance ### Database grooming -TON Node/Validator keeps it's database within the path specified by `--db` flag of `validator-engine`, usually `/var/ton-work/db`, this directory is created and managed by the node but it is recommended to perform a database grooming/cleanup task once a month to remove some artefacts. +TON Node/Validator keeps it's database within the path specified by `--db` flag of `validator-engine`, usually `/var/ton-work/db`, this directory is created and managed by the node but it is recommended to perform a database grooming/cleanup task once a month to remove some artifacts. :::caution Do not forget to stop validator process You **must** stop the validator process before performing the steps outlined below, failure to do that will likely cause database corruption. diff --git a/docs/participate/wallets/contracts.md b/docs/participate/wallets/contracts.md index a8508d3ba85..49d8c94162b 100644 --- a/docs/participate/wallets/contracts.md +++ b/docs/participate/wallets/contracts.md @@ -52,7 +52,7 @@ Wallet source code: It is the most modern wallet version at the moment. It still has all the functionality of the previous versions, but also introduces something very powerful — `plugins`. -This feature allows developers to implement complex logic that will work in tandem with a user's wallet. For example, some DApp may require a user to pay a small amount of coins every day to use some features, so the user will need to install the plugin on their wallet by signing a transaction. This plugin will send coins to the destination address every day when it will be reqested by an external message. +This feature allows developers to implement complex logic that will work in tandem with a user's wallet. For example, some DApp may require a user to pay a small amount of coins every day to use some features, so the user will need to install the plugin on their wallet by signing a transaction. This plugin will send coins to the destination address every day when it will be requested by an external message. This is a very customizable feature which is unique to TON Blockchain. @@ -153,7 +153,7 @@ Failed transaction may be replayed. old queries may be cleaned in one tx. If number of expired queries will be higher, contract will stuck. That means that it is not recommended to set too high expiration date: -number of queries during expiration timespan should not exceed 1000. +number of queries during expiration time span should not exceed 1000. Also, number of expired queries cleaned in one transaction should be below 100. diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/develop/dapps/ton-connect/tg-bot-integration.mdx b/i18n/zh-CN/docusaurus-plugin-content-docs/current/develop/dapps/ton-connect/tg-bot-integration.mdx index bc927d9e3fb..5fca8104cc6 100644 --- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/develop/dapps/ton-connect/tg-bot-integration.mdx +++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/develop/dapps/ton-connect/tg-bot-integration.mdx @@ -279,7 +279,7 @@ bot.onText(/\/connect/, async msg => { 我们会在许多地方使用连接器,因此让我们将创建连接器的代码移动到一个单独的文件中: ```ts -// src/ton-connect/conenctor.ts +// src/ton-connect/connector.ts import TonConnect from '@tonconnect/sdk'; import { TonConnectStorage } from './storage'; diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/develop/smart-contracts/tutorials/multisig-js.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/develop/smart-contracts/tutorials/multisig-js.md index ee29c9a91c8..3c8e5d17e26 100644 --- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/develop/smart-contracts/tutorials/multisig-js.md +++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/develop/smart-contracts/tutorials/multisig-js.md @@ -184,7 +184,7 @@ order2b.clearSignatures(); - MultisigOrderBuilder - `messages` - 要添加到订单的`MessageWithMode`数组 - - `querryId` - 订单有效的全局时间 + - `queryId` - 订单有效的全局时间 - MultisigOrder - `payload` - 带有订单有效载荷的`Cell` diff --git a/package-lock.json b/package-lock.json index cc8db0ecb64..f3c5867e10e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,7 +33,9 @@ "@docusaurus/tsconfig": "^3.5.2", "@types/react": "^18.3.10", "@typescript-eslint/parser": "^6.19.0", + "cspell": "^8.14.2", "eslint": "^8.56.0", + "husky": "^9.1.6", "typescript": "^5.6.2" }, "engines": { @@ -2362,6 +2364,543 @@ "node": ">=0.1.90" } }, + "node_modules/@cspell/cspell-bundled-dicts": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-8.14.2.tgz", + "integrity": "sha512-Kv2Utj/RTSxfufGXkkoTZ/3ErCsYWpCijtDFr/FwSsM7mC0PzLpdlcD9xjtgrJO5Kwp7T47iTG21U4Mwddyi8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/dict-ada": "^4.0.2", + "@cspell/dict-aws": "^4.0.3", + "@cspell/dict-bash": "^4.1.3", + "@cspell/dict-companies": "^3.1.4", + "@cspell/dict-cpp": "^5.1.12", + "@cspell/dict-cryptocurrencies": "^5.0.0", + "@cspell/dict-csharp": "^4.0.2", + "@cspell/dict-css": "^4.0.13", + "@cspell/dict-dart": "^2.0.3", + "@cspell/dict-django": "^4.1.0", + "@cspell/dict-docker": "^1.1.7", + "@cspell/dict-dotnet": "^5.0.2", + "@cspell/dict-elixir": "^4.0.3", + "@cspell/dict-en_us": "^4.3.23", + "@cspell/dict-en-common-misspellings": "^2.0.4", + "@cspell/dict-en-gb": "1.1.33", + "@cspell/dict-filetypes": "^3.0.4", + "@cspell/dict-fonts": "^4.0.0", + "@cspell/dict-fsharp": "^1.0.1", + "@cspell/dict-fullstack": "^3.2.0", + "@cspell/dict-gaming-terms": "^1.0.5", + "@cspell/dict-git": "^3.0.0", + "@cspell/dict-golang": "^6.0.9", + "@cspell/dict-google": "^1.0.1", + "@cspell/dict-haskell": "^4.0.1", + "@cspell/dict-html": "^4.0.5", + "@cspell/dict-html-symbol-entities": "^4.0.0", + "@cspell/dict-java": "^5.0.7", + "@cspell/dict-julia": "^1.0.1", + "@cspell/dict-k8s": "^1.0.6", + "@cspell/dict-latex": "^4.0.0", + "@cspell/dict-lorem-ipsum": "^4.0.0", + "@cspell/dict-lua": "^4.0.3", + "@cspell/dict-makefile": "^1.0.0", + "@cspell/dict-monkeyc": "^1.0.6", + "@cspell/dict-node": "^5.0.1", + "@cspell/dict-npm": "^5.0.18", + "@cspell/dict-php": "^4.0.8", + "@cspell/dict-powershell": "^5.0.5", + "@cspell/dict-public-licenses": "^2.0.7", + "@cspell/dict-python": "^4.2.4", + "@cspell/dict-r": "^2.0.1", + "@cspell/dict-ruby": "^5.0.2", + "@cspell/dict-rust": "^4.0.5", + "@cspell/dict-scala": "^5.0.3", + "@cspell/dict-software-terms": "^4.0.6", + "@cspell/dict-sql": "^2.1.5", + "@cspell/dict-svelte": "^1.0.2", + "@cspell/dict-swift": "^2.0.1", + "@cspell/dict-terraform": "^1.0.0", + "@cspell/dict-typescript": "^3.1.6", + "@cspell/dict-vue": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@cspell/cspell-json-reporter": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-8.14.2.tgz", + "integrity": "sha512-TZavcnNIZKX1xC/GNj80RgFVKHCT4pHT0qm9jCsQFH2QJfyCrUlkEvotKGSQ04lAyCwWg6Enq95qhouF8YbKUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/cspell-types": "8.14.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@cspell/cspell-pipe": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-8.14.2.tgz", + "integrity": "sha512-aWMoXZAXEre0/M9AYWOW33YyOJZ06i4vvsEpWBDWpHpWQEmsR/7cMMgld8Pp3wlEjIUclUAKTYmrZ61PFWU/og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@cspell/cspell-resolver": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-8.14.2.tgz", + "integrity": "sha512-pSyBsAvslaN0dx0pHdvECJEuFDDBJGAD6G8U4BVbIyj2OPk0Ox0HrZIj6csYxxoJERAgNO/q7yCPwa4j9NNFXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "global-directory": "^4.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@cspell/cspell-service-bus": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-8.14.2.tgz", + "integrity": "sha512-WUF7xf3YgXYIqjmBwLcVugYIrYL4WfXchgSo9rmbbnOcAArzsK+HKfzb4AniZAJ1unxcIQ0JnVlRmnCAKPjjLg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@cspell/cspell-types": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-8.14.2.tgz", + "integrity": "sha512-MRY8MjBNOKGMDSkxAKueYAgVL43miO+lDcLCBBP+7cNXqHiUFMIZteONcGp3kJT0dWS04dN6lKAXvaNF0aWcng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@cspell/dict-ada": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-4.0.2.tgz", + "integrity": "sha512-0kENOWQeHjUlfyId/aCM/mKXtkEgV0Zu2RhUXCBr4hHo9F9vph+Uu8Ww2b0i5a4ZixoIkudGA+eJvyxrG1jUpA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-aws": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-4.0.4.tgz", + "integrity": "sha512-6AWI/Kkf+RcX/J81VX8+GKLeTgHWEr/OMhGk3dHQzWK66RaqDJCGDqi7494ghZKcBB7dGa3U5jcKw2FZHL/u3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-bash": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.1.4.tgz", + "integrity": "sha512-W/AHoQcJYn3Vn/tUiXX2+6D/bhfzdDshwcbQWv9TdiNlXP9P6UJjDKWbxyA5ogJCsR2D0X9Kx11oV8E58siGKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-companies": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.1.4.tgz", + "integrity": "sha512-y9e0amzEK36EiiKx3VAA+SHQJPpf2Qv5cCt5eTUSggpTkiFkCh6gRKQ97rVlrKh5GJrqinDwYIJtTsxuh2vy2Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-cpp": { + "version": "5.1.16", + "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-5.1.16.tgz", + "integrity": "sha512-32fU5RkuOM55IRcxjByiSoKbjr+C4danDfYjHaQNRWdvjzJzci3fLDGA2wTXiclkgDODxGiV8LCTUwCz+3TNWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-cryptocurrencies": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-5.0.0.tgz", + "integrity": "sha512-Z4ARIw5+bvmShL+4ZrhDzGhnc9znaAGHOEMaB/GURdS/jdoreEDY34wdN0NtdLHDO5KO7GduZnZyqGdRoiSmYA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-csharp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.2.tgz", + "integrity": "sha512-1JMofhLK+4p4KairF75D3A924m5ERMgd1GvzhwK2geuYgd2ZKuGW72gvXpIV7aGf52E3Uu1kDXxxGAiZ5uVG7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-css": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.13.tgz", + "integrity": "sha512-WfOQkqlAJTo8eIQeztaH0N0P+iF5hsJVKFuhy4jmARPISy8Efcv8QXk2/IVbmjJH0/ZV7dKRdnY5JFVXuVz37g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-dart": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.2.1.tgz", + "integrity": "sha512-yriKm7QkoPx3JPSSOcw6iX9gOb2N50bOo/wqWviqPYbhpMRh9Xiv6dkUy3+ot+21GuShZazO8X6U5+Vw67XEwg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-data-science": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.1.tgz", + "integrity": "sha512-xeutkzK0eBe+LFXOFU2kJeAYO6IuFUc1g7iRLr7HeCmlC4rsdGclwGHh61KmttL3+YHQytYStxaRBdGAXWC8Lw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-django": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.1.0.tgz", + "integrity": "sha512-bKJ4gPyrf+1c78Z0Oc4trEB9MuhcB+Yg+uTTWsvhY6O2ncFYbB/LbEZfqhfmmuK/XJJixXfI1laF2zicyf+l0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-docker": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.7.tgz", + "integrity": "sha512-XlXHAr822euV36GGsl2J1CkBIVg3fZ6879ZOg5dxTIssuhUOCiV2BuzKZmt6aIFmcdPmR14+9i9Xq+3zuxeX0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-dotnet": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-5.0.5.tgz", + "integrity": "sha512-gjg0L97ee146wX47dnA698cHm85e7EOpf9mVrJD8DmEaqoo/k1oPy2g7c7LgKxK9XnqwoXxhLNnngPrwXOoEtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-elixir": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-4.0.3.tgz", + "integrity": "sha512-g+uKLWvOp9IEZvrIvBPTr/oaO6619uH/wyqypqvwpmnmpjcfi8+/hqZH8YNKt15oviK8k4CkINIqNhyndG9d9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-en_us": { + "version": "4.3.23", + "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.3.23.tgz", + "integrity": "sha512-l0SoEQBsi3zDSl3OuL4/apBkxjuj4hLIg/oy6+gZ7LWh03rKdF6VNtSZNXWAmMY+pmb1cGA3ouleTiJIglbsIg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-en-common-misspellings": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.0.4.tgz", + "integrity": "sha512-lvOiRjV/FG4pAGZL3PN2GCVHSTCE92cwhfLGGkOsQtxSmef6WCHfHwp9auafkBlX0yFQSKDfq6/TlpQbjbJBtQ==", + "dev": true, + "license": "CC BY-SA 4.0" + }, + "node_modules/@cspell/dict-en-gb": { + "version": "1.1.33", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb/-/dict-en-gb-1.1.33.tgz", + "integrity": "sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-filetypes": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-3.0.4.tgz", + "integrity": "sha512-IBi8eIVdykoGgIv5wQhOURi5lmCNJq0we6DvqKoPQJHthXbgsuO1qrHSiUVydMiQl/XvcnUWTMeAlVUlUClnVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-fonts": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-fonts/-/dict-fonts-4.0.0.tgz", + "integrity": "sha512-t9V4GeN/m517UZn63kZPUYP3OQg5f0OBLSd3Md5CU3eH1IFogSvTzHHnz4Wqqbv8NNRiBZ3HfdY/pqREZ6br3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-fsharp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-fsharp/-/dict-fsharp-1.0.1.tgz", + "integrity": "sha512-23xyPcD+j+NnqOjRHgW3IU7Li912SX9wmeefcY0QxukbAxJ/vAN4rBpjSwwYZeQPAn3fxdfdNZs03fg+UM+4yQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-fullstack": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.2.0.tgz", + "integrity": "sha512-sIGQwU6G3rLTo+nx0GKyirR5dQSFeTIzFTOrURw51ISf+jKG9a3OmvsVtc2OANfvEAOLOC9Wfd8WYhmsO8KRDQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-gaming-terms": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.0.5.tgz", + "integrity": "sha512-C3riccZDD3d9caJQQs1+MPfrUrQ+0KHdlj9iUR1QD92FgTOF6UxoBpvHUUZ9YSezslcmpFQK4xQQ5FUGS7uWfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-git": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-git/-/dict-git-3.0.0.tgz", + "integrity": "sha512-simGS/lIiXbEaqJu9E2VPoYW1OTC2xrwPPXNXFMa2uo/50av56qOuaxDrZ5eH1LidFXwoc8HROCHYeKoNrDLSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-golang": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.12.tgz", + "integrity": "sha512-LEPeoqd+4O+vceHF73S7D7+LYfrAjOvp4Dqzh4MT30ruzlQ77yHRSuYOJtrFN1GK5ntAt/ILSVOKg9sgsz1Llg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-google": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-google/-/dict-google-1.0.1.tgz", + "integrity": "sha512-dQr4M3n95uOhtloNSgB9tYYGXGGEGEykkFyRtfcp5pFuEecYUa0BSgtlGKx9RXVtJtKgR+yFT/a5uQSlt8WjqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-haskell": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-4.0.1.tgz", + "integrity": "sha512-uRrl65mGrOmwT7NxspB4xKXFUenNC7IikmpRZW8Uzqbqcu7ZRCUfstuVH7T1rmjRgRkjcIjE4PC11luDou4wEQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-html": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.5.tgz", + "integrity": "sha512-p0brEnRybzSSWi8sGbuVEf7jSTDmXPx7XhQUb5bgG6b54uj+Z0Qf0V2n8b/LWwIPJNd1GygaO9l8k3HTCy1h4w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-html-symbol-entities": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.0.tgz", + "integrity": "sha512-HGRu+48ErJjoweR5IbcixxETRewrBb0uxQBd6xFGcxbEYCX8CnQFTAmKI5xNaIt2PKaZiJH3ijodGSqbKdsxhw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-java": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.7.tgz", + "integrity": "sha512-ejQ9iJXYIq7R09BScU2y5OUGrSqwcD+J5mHFOKbduuQ5s/Eh/duz45KOzykeMLI6KHPVxhBKpUPBWIsfewECpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-julia": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-julia/-/dict-julia-1.0.1.tgz", + "integrity": "sha512-4JsCLCRhhLMLiaHpmR7zHFjj1qOauzDI5ZzCNQS31TUMfsOo26jAKDfo0jljFAKgw5M2fEG7sKr8IlPpQAYrmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-k8s": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.6.tgz", + "integrity": "sha512-srhVDtwrd799uxMpsPOQqeDJY+gEocgZpoK06EFrb4GRYGhv7lXo9Fb+xQMyQytzOW9dw4DNOEck++nacDuymg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-latex": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-latex/-/dict-latex-4.0.0.tgz", + "integrity": "sha512-LPY4y6D5oI7D3d+5JMJHK/wxYTQa2lJMSNxps2JtuF8hbAnBQb3igoWEjEbIbRRH1XBM0X8dQqemnjQNCiAtxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-lorem-ipsum": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-4.0.0.tgz", + "integrity": "sha512-1l3yjfNvMzZPibW8A7mQU4kTozwVZVw0AvFEdy+NcqtbxH+TvbSkNMqROOFWrkD2PjnKG0+Ea0tHI2Pi6Gchnw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-lua": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-4.0.3.tgz", + "integrity": "sha512-lDHKjsrrbqPaea13+G9s0rtXjMO06gPXPYRjRYawbNmo4E/e3XFfVzeci3OQDQNDmf2cPOwt9Ef5lu2lDmwfJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-makefile": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-makefile/-/dict-makefile-1.0.0.tgz", + "integrity": "sha512-3W9tHPcSbJa6s0bcqWo6VisEDTSN5zOtDbnPabF7rbyjRpNo0uHXHRJQF8gAbFzoTzBBhgkTmrfSiuyQm7vBUQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-monkeyc": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.6.tgz", + "integrity": "sha512-oO8ZDu/FtZ55aq9Mb67HtaCnsLn59xvhO/t2mLLTHAp667hJFxpp7bCtr2zOrR1NELzFXmKln/2lw/PvxMSvrA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-node": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-5.0.1.tgz", + "integrity": "sha512-lax/jGz9h3Dv83v8LHa5G0bf6wm8YVRMzbjJPG/9rp7cAGPtdrga+XANFq+B7bY5+jiSA3zvj10LUFCFjnnCCg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-npm": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.1.4.tgz", + "integrity": "sha512-yzqVTY4P5neom4z9orV2IFOqDZ7fDotmisP7nwQkEmftoELgn5CUtNdnJhWDoDQQn6yrxOxA8jEqmyETIWzN4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-php": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-4.0.10.tgz", + "integrity": "sha512-NfTZdp6kcZDF1PvgQ6cY0zE4FUO5rSwNmBH/iwCBuaLfJAFQ97rgjxo+D2bic4CFwNjyHutnHPtjJBRANO5XQw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-powershell": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-5.0.8.tgz", + "integrity": "sha512-Eg64BccQp5oEJ+V/O2G27KaLWmuOL2AWMOs2470adUihOleRfW8j9XwAEGCS+JKSnDb2mksWA72Z6kDqH138IQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-public-licenses": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.8.tgz", + "integrity": "sha512-Sup+tFS7cDV0fgpoKtUqEZ6+fA/H+XUgBiqQ/Fbs6vUE3WCjJHOIVsP+udHuyMH7iBfJ4UFYOYeORcY4EaKdMg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-python": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.6.tgz", + "integrity": "sha512-Hkz399qDGEbfXi9GYa2hDl7GahglI86JmS2F1KP8sfjLXofUgtnknyC5NWc86nzHcP38pZiPqPbTigyDYw5y8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/dict-data-science": "^2.0.1" + } + }, + "node_modules/@cspell/dict-r": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-r/-/dict-r-2.0.1.tgz", + "integrity": "sha512-KCmKaeYMLm2Ip79mlYPc8p+B2uzwBp4KMkzeLd5E6jUlCL93Y5Nvq68wV5fRLDRTf7N1LvofkVFWfDcednFOgA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-ruby": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-5.0.3.tgz", + "integrity": "sha512-V1xzv9hN6u8r6SM4CkYdsxs4ov8gjXXo0Twfx5kWhLXbEVxTXDMt7ohLTqpy2XlF5mutixZdbHMeFiAww8v+Ug==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-rust": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.0.5.tgz", + "integrity": "sha512-DIvlPRDemjKQy8rCqftAgGNZxY5Bg+Ps7qAIJjxkSjmMETyDgl0KTVuaJPt7EK4jJt6uCZ4ILy96npsHDPwoXA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-scala": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-5.0.3.tgz", + "integrity": "sha512-4yGb4AInT99rqprxVNT9TYb1YSpq58Owzq7zi3ZS5T0u899Y4VsxsBiOgHnQ/4W+ygi+sp+oqef8w8nABR2lkg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-software-terms": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-4.1.3.tgz", + "integrity": "sha512-5Wn5JG4IzCboX5pjISdkipsPKGaz1//iuBZdHl4US5x7mO4jOGXLpjzx6ZoPM4PXUlMEFz9NJRCDepAu8fXVtA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-sql": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.1.5.tgz", + "integrity": "sha512-FmxanytHXss7GAWAXmgaxl3icTCW7YxlimyOSPNfm+njqeUDjw3kEv4mFNDDObBJv8Ec5AWCbUDkWIpkE3IpKg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-svelte": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-svelte/-/dict-svelte-1.0.2.tgz", + "integrity": "sha512-rPJmnn/GsDs0btNvrRBciOhngKV98yZ9SHmg8qI6HLS8hZKvcXc0LMsf9LLuMK1TmS2+WQFAan6qeqg6bBxL2Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-swift": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-swift/-/dict-swift-2.0.1.tgz", + "integrity": "sha512-gxrCMUOndOk7xZFmXNtkCEeroZRnS2VbeaIPiymGRHj5H+qfTAzAKxtv7jJbVA3YYvEzWcVE2oKDP4wcbhIERw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-terraform": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-terraform/-/dict-terraform-1.0.1.tgz", + "integrity": "sha512-29lmUUnZgPh+ieZ5hunick8hzNIpNRtiJh9vAusNskPCrig3RTW6u7F+GG1a8uyslbzSw+Irjf40PTOan1OJJA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-typescript": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.1.6.tgz", + "integrity": "sha512-1beC6O4P/j23VuxX+i0+F7XqPVc3hhiAzGJHEKqnWf5cWAXQtg0xz3xQJ5MvYx2a7iLaSa+lu7+05vG9UHyu9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-vue": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-vue/-/dict-vue-3.0.0.tgz", + "integrity": "sha512-niiEMPWPV9IeRBRzZ0TBZmNnkK3olkOPYxC1Ny2AX4TGlYRajcW0WUtoSHmvvjZNfWLSg2L6ruiBeuPSbjnG6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dynamic-import": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-8.14.2.tgz", + "integrity": "sha512-5MbqtIligU7yPwHWU/5yFCgMvur4i1bRAF1Cy8y2dDtHsa204S/w/SaXs+51EFLp2eNbCiBisCBrwJFT7R1RxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "import-meta-resolve": "^4.1.0" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@cspell/filetypes": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-8.14.2.tgz", + "integrity": "sha512-ZevArA0mWeVTTqHicxCPZIAeCibpY3NwWK/x6d1Lgu7RPk/daoGAM546Q2SLChFu+r10tIH7pRG212A6Q9ihPA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@cspell/strong-weak-map": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-8.14.2.tgz", + "integrity": "sha512-7sRzJc392CQYNNrtdPEfOHJdRqsqf6nASCtbS5A9hL2UrdWQ4uN7r/D+Y1HpuizwY9eOkZvarcFfsYt5wE0Pug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@cspell/url": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/@cspell/url/-/url-8.14.2.tgz", + "integrity": "sha512-YmWW+B/2XQcCynLpiAQF77Bitm5Cynw3/BICZkbdveKjJkUzEmXB+U2qWuwXOyU8xUYuwkP63YM8McnI567rUA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0" + } + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -5481,6 +6020,13 @@ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "license": "MIT" }, + "node_modules/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", + "dev": true, + "license": "MIT" + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -5952,12 +6498,41 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk-template": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-1.1.0.tgz", + "integrity": "sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/chalk/chalk-template?sponsor=1" + } + }, + "node_modules/chalk-template/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" @@ -6128,6 +6703,46 @@ "node": ">=6" } }, + "node_modules/clear-module": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/clear-module/-/clear-module-4.1.2.tgz", + "integrity": "sha512-LWAxzHqdHsAZlPlEyJ2Poz6AIs384mPeqLVCru2p0BrP9G/kVGuhNyZYClLO6cXlnuJjzC8xtsJIuMjKqLXoAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^2.0.0", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clear-module/node_modules/parent-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-2.0.0.tgz", + "integrity": "sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clear-module/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/cli-boxes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", @@ -6266,6 +6881,23 @@ "node": ">= 6" } }, + "node_modules/comment-json": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", + "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.3", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/common-path-prefix": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", @@ -6457,41 +7089,354 @@ "webpack": "^5.1.0" } }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "license": "MIT", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/core-js": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz", + "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.38.1.tgz", + "integrity": "sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "license": "MIT", + "dependencies": { + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/crypto-random-string/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cspell": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/cspell/-/cspell-8.14.2.tgz", + "integrity": "sha512-ii/W7fwO4chNQVYl1C/8k7RW8EXzLb69rvg08p8mSJx8B2UasVJ9tuJpTH2Spo1jX6N3H0dKPWUbd1fAmdAhPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/cspell-json-reporter": "8.14.2", + "@cspell/cspell-pipe": "8.14.2", + "@cspell/cspell-types": "8.14.2", + "@cspell/dynamic-import": "8.14.2", + "@cspell/url": "8.14.2", + "chalk": "^5.3.0", + "chalk-template": "^1.1.0", + "commander": "^12.1.0", + "cspell-dictionary": "8.14.2", + "cspell-gitignore": "8.14.2", + "cspell-glob": "8.14.2", + "cspell-io": "8.14.2", + "cspell-lib": "8.14.2", + "fast-glob": "^3.3.2", + "fast-json-stable-stringify": "^2.1.0", + "file-entry-cache": "^9.0.0", + "get-stdin": "^9.0.0", + "semver": "^7.6.3", + "strip-ansi": "^7.1.0" + }, + "bin": { + "cspell": "bin.mjs", + "cspell-esm": "bin.mjs" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/streetsidesoftware/cspell?sponsor=1" + } + }, + "node_modules/cspell-config-lib": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-8.14.2.tgz", + "integrity": "sha512-yHP1BdcH5dbjb8qiZr6+bxEnJ+rxTULQ00wBz3eBPWCghJywEAYYvMWoYuxVtPpndlkKYC1wJAHsyNkweQyepA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/cspell-types": "8.14.2", + "comment-json": "^4.2.5", + "yaml": "^2.5.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cspell-config-lib/node_modules/yaml": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", + "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/cspell-dictionary": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-8.14.2.tgz", + "integrity": "sha512-gWuAvf6queGGUvGbfAxxUq55cZ0OevWPbjnCrSB0PpJ4tqdFd8dLcvVrIKzoE2sBXKPw2NDkmoEngs6iGavC0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/cspell-pipe": "8.14.2", + "@cspell/cspell-types": "8.14.2", + "cspell-trie-lib": "8.14.2", + "fast-equals": "^5.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cspell-gitignore": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-8.14.2.tgz", + "integrity": "sha512-lrO/49NaKBpkR7vFxv4OOY+oHmsG5+gNQejrBBWD9Nv9vvjJtz/G36X/rcN6M6tFcQQMWwa01kf04nxz8Ejuhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/url": "8.14.2", + "cspell-glob": "8.14.2", + "cspell-io": "8.14.2", + "find-up-simple": "^1.0.0" + }, + "bin": { + "cspell-gitignore": "bin.mjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cspell-glob": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-8.14.2.tgz", + "integrity": "sha512-9Q1Kgoo1ev3fKTpp9y5n8M4RLxd8B0f5o4y5FQe4dBU0j/bt+/YDrLZNWDm77JViV606XQ6fimG1FTTq6pT9/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/url": "8.14.2", + "micromatch": "^4.0.7" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cspell-grammar": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-8.14.2.tgz", + "integrity": "sha512-eYwceVP80FGYVJenE42ALnvEKOXaXjq4yVbb1Ni1umO/9qamLWNCQ1RP6rRACy5e/cXviAbhrQ5Mtw6n+pyPEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/cspell-pipe": "8.14.2", + "@cspell/cspell-types": "8.14.2" + }, + "bin": { + "cspell-grammar": "bin.mjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cspell-io": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-8.14.2.tgz", + "integrity": "sha512-uaKpHiY3DAgfdzgKMQml6U8F8o9udMuYxGqYa5FVfN7D5Ap7B2edQzSLTUYwxrFEn4skSfp6XY73+nzJvxzH4Q==", + "dev": true, + "license": "MIT", "dependencies": { - "is-glob": "^4.0.3" + "@cspell/cspell-service-bus": "8.14.2", + "@cspell/url": "8.14.2" }, "engines": { - "node": ">=10.13.0" + "node": ">=18" } }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "node_modules/cspell-lib": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-8.14.2.tgz", + "integrity": "sha512-d2oiIXHXnADmnhIuFLOdNE63L7OUfzgpLbYaqAWbkImCUDkevfGrOgnX8TJ03fUgZID4nvQ+3kgu/n2j4eLZjQ==", + "dev": true, "license": "MIT", "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" + "@cspell/cspell-bundled-dicts": "8.14.2", + "@cspell/cspell-pipe": "8.14.2", + "@cspell/cspell-resolver": "8.14.2", + "@cspell/cspell-types": "8.14.2", + "@cspell/dynamic-import": "8.14.2", + "@cspell/filetypes": "8.14.2", + "@cspell/strong-weak-map": "8.14.2", + "@cspell/url": "8.14.2", + "clear-module": "^4.1.2", + "comment-json": "^4.2.5", + "cspell-config-lib": "8.14.2", + "cspell-dictionary": "8.14.2", + "cspell-glob": "8.14.2", + "cspell-grammar": "8.14.2", + "cspell-io": "8.14.2", + "cspell-trie-lib": "8.14.2", + "env-paths": "^3.0.0", + "fast-equals": "^5.0.1", + "gensequence": "^7.0.0", + "import-fresh": "^3.3.0", + "resolve-from": "^5.0.0", + "vscode-languageserver-textdocument": "^1.0.12", + "vscode-uri": "^3.0.8", + "xdg-basedir": "^5.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "node_modules/cspell-lib/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cspell-lib/node_modules/xdg-basedir": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", + "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -6500,112 +7445,98 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/core-js": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz", - "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==", - "hasInstallScript": true, + "node_modules/cspell-trie-lib": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-8.14.2.tgz", + "integrity": "sha512-rZMbaEBGoyy4/zxKECaMyVyGLbuUxYmZ5jlEgiA3xPtEdWwJ4iWRTo5G6dWbQsXoxPYdAXXZ0/q0GQ2y6Jt0kw==", + "dev": true, "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "dependencies": { + "@cspell/cspell-pipe": "8.14.2", + "@cspell/cspell-types": "8.14.2", + "gensequence": "^7.0.0" + }, + "engines": { + "node": ">=18" } }, - "node_modules/core-js-compat": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", - "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "node_modules/cspell/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3" + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/core-js-pure": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.38.1.tgz", - "integrity": "sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ==", - "hasInstallScript": true, + "node_modules/cspell/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" + "node_modules/cspell/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "node_modules/cspell/node_modules/file-entry-cache": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz", + "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==", + "dev": true, "license": "MIT", "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "flat-cache": "^5.0.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=18" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/cspell/node_modules/flat-cache": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", + "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", + "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "flatted": "^3.3.1", + "keyv": "^4.5.4" }, "engines": { - "node": ">= 8" + "node": ">=18" } }, - "node_modules/crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "node_modules/cspell/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^1.0.1" + "ansi-regex": "^6.0.1" }, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/crypto-random-string/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/css-declaration-sorter": { @@ -7420,6 +8351,19 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/env-paths": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", + "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -8002,6 +8946,16 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, + "node_modules/fast-equals": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", + "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -8229,6 +9183,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/find-up-simple": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.0.tgz", + "integrity": "sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", @@ -8524,6 +9491,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gensequence": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-7.0.0.tgz", + "integrity": "sha512-47Frx13aZh01afHJTB3zTtKIlFI6vWY+MYCN9Qpew6i52rfKjnhCF/l1YlC8UmEMvvntZZ6z4PiCcmyuedR2aQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -8558,6 +9535,19 @@ "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", "license": "ISC" }, + "node_modules/get-stdin": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", + "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -8637,6 +9627,32 @@ "node": "*" } }, + "node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "4.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-directory/node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/global-dirs": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", @@ -8857,6 +9873,16 @@ "node": ">=8" } }, + "node_modules/has-own-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", + "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", @@ -9435,6 +10461,22 @@ "node": ">=10.17.0" } }, + "node_modules/husky": { + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.6.tgz", + "integrity": "sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==", + "dev": true, + "license": "MIT", + "bin": { + "husky": "bin.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -9530,6 +10572,17 @@ "node": ">=8" } }, + "node_modules/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -15171,6 +16224,16 @@ "entities": "^2.0.0" } }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -17268,6 +18331,20 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "dev": true, + "license": "MIT" + }, "node_modules/watchpack": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", diff --git a/package.json b/package.json index 564286dfabf..6c8e8ba2ec0 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ "write-translations": "docusaurus write-translations", "write-heading-ids": "docusaurus write-heading-ids", "typecheck": "tsc", - "lint": "eslint --ext .js,.jsx,.ts,.tsx ." + "lint": "eslint --ext .js,.jsx,.ts,.tsx .", + "spell": "cspell --show-suggestions" }, "dependencies": { "@docusaurus/core": "^3.5.2", @@ -45,8 +46,10 @@ "@docusaurus/tsconfig": "^3.5.2", "@types/react": "^18.3.10", "@typescript-eslint/parser": "^6.19.0", + "cspell": "^8.14.2", "eslint": "^8.56.0", - "typescript": "^5.6.2" + "typescript": "^5.6.2", + "husky": "^9.1.6" }, "browserslist": { "production": [ diff --git a/src/grammar/commands-dictionary.txt b/src/grammar/commands-dictionary.txt new file mode 100644 index 00000000000..b3bd19c75b6 --- /dev/null +++ b/src/grammar/commands-dictionary.txt @@ -0,0 +1,22 @@ +clcf +tulpn +drvcf +setwebpass +IGNORE_MINIMAL_REQS +containerd.io +docker-buildx-plugin +newbot +mybots +mysite +mywallet +cskip +stdlib +utime +getconfig +plzip +strdump +delcustomoverlay +showcustomoverlays +sendfile +getWallets +findValue \ No newline at end of file diff --git a/src/grammar/names-dictionary.txt b/src/grammar/names-dictionary.txt new file mode 100644 index 00000000000..5356777a87d --- /dev/null +++ b/src/grammar/names-dictionary.txt @@ -0,0 +1,22 @@ +Durov +akifoq +romanovichim +thedailyton +thedaily +Pavel's +Pavel +Slava +Vadim +Volkov +Diffie-Hellman +Schnorr +Golev +Gusarich +xssnick +psylopunk +yungwine +Playmuse +Ristretto +Eruda +Ratelance +Onda diff --git a/src/grammar/tvm-dictionary.txt b/src/grammar/tvm-dictionary.txt new file mode 100644 index 00000000000..da8acbab97f --- /dev/null +++ b/src/grammar/tvm-dictionary.txt @@ -0,0 +1,977 @@ + +CONDSELCHK +LSHIFTADDDIVMODC_VAR +HASHEXTA_SHA256 +DEBUGSTR +PFXDICTGETJMP +QMULDIVMOD +DICTUSET +QMODPOW2C +PUSHCTRX +POPROOT +IFREFELSE +NOP +QMULMODPOW2_VAR +SGN +QNOT +LDSLICE +SDCNTLEAD0 +SETCONTCTR +POPSAVE +DICTREPLACEGET +SCHKBITREFS +ISNULL +CLEVEL +ISNNEG +GLOBALID +HASHEXTAR_KECCAK512 +REPEATEND +NULLSWAPIF +STZEROES +IFELSEREF +ATEXITALT +SSKIPLAST +DICTGETPREVEQ +SDATASIZEQ +DICTIMAX +DEBUG +SDCUTLAST +DICTUGETEXECZ +BLS_G1_ADD +STREF_ALT +STBREFR_ALT +PLDULE8Q +LDILE4 +UNTIL +DICTADDREF +LSHIFTDIVR +ZERO +XCHGX +DICTISETB +STUXR +IFNBITJMPREF +PFXDICTDEL +GETPARAM +POW2 +LDMSGADDR +MULRSHIFTCMOD +BCHKBITREFSQ +QLSHIFTDIVR +RIST255_MUL +QLSHIFTMODC_VAR +DICTSET +STUXRQ +QLSHIFTADDDIVMODC_VAR +AGAIN +STI +SPLITQ +TUPLEVAR +QRSHIFTMOD +QAND +GETSTORAGEFEE +DICTUREMMIN +HASHEXTAR_KECCAK256 +IFNOTJMP +QUFITS +STZERO +DICTUGET +MULRSHIFTR +LDUXQ +CDEPTHI +DUEPAYMENT +PLDILE4 +DICTIREMMIN +QLSHIFTMOD +NULLSWAPIF2 +SETGLOBVAR +PLDREFIDX +CALLXVARARGS +PUSHINT_4 +STSAME +RETURNVARARGS +HASHEXTAR_SHA512 +LDULE8 +TRYARGS +FIRSTQ +DIV_BASE +SAVEBOTH +PREPAREDICT +MULRSHIFTC_VAR +DROPX +DUP2 +LSHIFTDIV +BLS_G1_ZERO +MULDIVC +COMPOSBOTH +QMODPOW2 +DICTIADDGETREF +SWAP2 +CHKBIT +QMULADDRSHIFTRMOD +GTINT +DICTIGETPREV +LDREFRTOS +SUBDICTIRPGET +OR +RSHIFTMOD +SCUTFIRST +DICTUMINREF +QMODPOW2R_VAR +DICTUGETJMPZ +RUNVM +SUBDICTRPGET +LSHIFTADDDIVMODC +LSHIFTDIVR_VAR +XOR +SREMPTY +LDILE8 +DICTISETGETB +SETRAND +RETVARARGS +MULDIVMODC +QLSHIFTADDDIVMOD +POPCTRX +LDZEROES +CALLREF +BLS_G2_MUL +SDSFXREV +STSLICER +MULDIVR +REPEAT +PLDILE4Q +QMULRSHIFT_VAR +ADDDIVMOD +POP +PUSHREF +NEGATE +EXECUTE +IFJMPREF +STIRQ +DICTUREMMAX +UNTILBRK +MULRSHIFT +STREF2CONST +XCHG_0I +LDGRAMS +SWAP +LESS +STILE4 +DICTUGETOPTREF +PLDUQ +LDMSGADDRQ +THROWIF +STORAGEFEES +SDPSFX +STREFRQ +ENDS +DUMP +NULLROTRIFNOT +NULLSWAPIFNOT +DIV +PUSHSLICE_REFS +MULMODPOW2 +SETFIRST +XCHG_IJ +GETGLOBVAR +DUMPSTK +XCPU2 +BLOCKLT +QMULMODPOW2R_VAR +LSHIFTMODR_VAR +INDEX3 +GREATER +SREFS +HASHEXTR_BLAKE2B +CALLXARGS +IFNOTJMPREF +DICTIREMMINREF +SDATASIZE +BLKDROP2 +LSHIFTADDDIVMODR_VAR +LSHIFTDIVMOD +DICTUSETGETB +ACCEPT +QMODPOW2R +MINMAX +QLSHIFTDIV_VAR +STUR +PFXDICTADD +DICTGETPREV +DICTREMMIN +PFXDICTGETQ +MULADDDIVMODC +DEPTH +QMODC +DICTUADD +PUSHREFSLICE +DICTUREMMINREF +RIST255_PUSHL +REWRITESTDADDRQ +DICTMAX +MODC +THROWARGANYIFNOT +DICTADDB +SDPFXREV +AGAINENDBRK +INDEXVAR +PUSHSLICE +SAVEALT +DICTUREPLACEGETREF +SDPPFX +DICTUMAX +SDFIRST +DICTADD +BOOLEVAL +QLSHIFTDIVC +PLDI +MULRSHIFTR_VAR +DICTSETREF +DICTMIN +STREFCONST +LDREF +UFITSX +SSKIPFIRST +CALLCCARGS +DICTUADDGET +DICTUMIN +BLS_G1_ISZERO +XCPU +MULMODPOW2R +ATEXIT +MULADDRSHIFTRMOD +IFRET +SECONDQ +DICTIGETJMPZ +DICTREPLACEB +SDCNTTRAIL1 +LSHIFTADDDIVMODR +PLDDICTS +BLESSNUMARGS +BLKPUSH +GASCONSUMED +MULMODPOW2C_VAR +CDATASIZE +QMULMODR +PUSHNEGPOW2 +QRSHIFTC +QDIVMODR +PREVBLOCKSINFOTUPLE +DICTUGETPREVEQ +HASHEXT_KECCAK512 +CMP +DIVC +NULLSWAPIFNOT2 +LDULE4Q +QLSHIFT +EQINT +THROWARGANYIF +LDDICTS +QLSHIFTADDDIVMODC +CONFIGROOT +SETEXITALT +QLSHIFTADDDIVMODR +RIST255_QMUL +DICTIGETREF +HASHEXTA_SHA512 +ADDRSHIFTMODR +STUQ +IFREF +XCHG3_ALT +LSHIFTDIVMODC_VAR +LSHIFTDIVC +DICTSETGETREF +PREVKEYBLOCK +GETFORWARDFEE +PFXDICTGET +SDBEGINSXQ +RSHIFTMODR_VAR +QRSHIFTCMOD +LSHIFTMOD +DICTSETGETB +MIN +CONFIGDICT +PUSHINT_LONG +INVERT +RSHIFT +REVERSE +NIP +XC2PU +ENDXC +RETDATA +QDIVMOD +MULADDDIVMOD +QADDRSHIFTMODC +RETURNARGS +SDPSFXREV +BCHKREFSQ +PLDDICT +BLS_G2_ADD +STILE8 +ISNPOS +MODPOW2_VAR +LSHIFTDIVMODR_VAR +BLS_G1_SUB +GETFORWARDFEESIMPLE +LDU +PUSHCONT_SHORT +QMULRSHIFTMOD +FIRST +THROW +ADDRSHIFTMOD +HASHEXTA_KECCAK512 +CHKBOOL +DIVMOD +BLS_FASTAGGREGATEVERIFY +STVARINT16 +MULCONST +QMULMODPOW2C +SDEQ +STBQ +XCTOS +PLDDICTQ +DICTGETNEXTEQ +QMULMOD +EQUAL +THIRD +EXPLODEVAR +PLDILE8 +DICTIDELGETREF +IFBITJMP +UNTILEND +QMULMODPOW2R +THROWIFNOT_SHORT +MODR +QMULDIV +BLESS +SECOND +MULADDRSHIFTMOD +HASHEXTR_KECCAK256 +DICTUGETREF +SETSECONDQ +DICTIGETJMP +PUSH +DICTADDGETREF +QMULDIVMODC +BBITS +CALLCC +GETGASFEE +STGRAMS +HASHEXTR_SHA512 +ONLYX +THROWANYIFNOT +DICTUSETB +ISNEG +UNPACKFIRSTVAR +PAIR +QDEC +QMULDIVC +RIST255_QMULBASE +QLSHIFTDIVMODR_VAR +TRUE +QADDDIVMODR +CADR +WHILEBRK +QRSHIFT_VAR +PFXDICTGETEXEC +ENDC +RANDU256 +THROWANY +PUSH2 +JMPXDATA +MULDIVMODR +DICTGETREF +DIVMODC +LSHIFTDIVMODC +LSHIFT_VAR +QMULRSHIFTRMOD_VAR +SHA256U +QMUL +SETINDEXQ +QADDDIVMODC +IFJMP +BLS_G2_ZERO +QLSHIFT_VAR +QRSHIFTMOD_VAR +THROW_SHORT +SETINDEX +UFITS +DICTIGETEXECZ +QFITSX +NULL +MULDIV +RAND +QTLEN +GETGASFEESIMPLE +XCHG3 +QLSHIFTADDDIVMOD_VAR +INDEX2 +QMULRSHIFTRMOD +SETSECOND +STREFR +UNTUPLEVAR +DROP +XCHG_0I_LONG +COMPOS +DICTUGETPREV +PFXDICTSET +QSUBR +SDEPTH +STIXRQ +QMULRSHIFT +STSLICEQ +COMMIT +SUB +QADDDIVMOD +QADDRSHIFTMOD +DICTIMAXREF +QLSHIFTMOD_VAR +QMULMODPOW2 +RAWRESERVEX +PU2XC +MULADDDIVMODR +PICK +LTIME +QRSHIFTRMOD +HASHEXTR_SHA256 +STSLICE_ALT +DICTISET +MYCODE +NULLROTRIF2 +SETCP +QLSHIFTDIVC_VAR +QMULMODPOW2C_VAR +IFNBITJMP +REPEATENDBRK +REPEATBRK +UNTUPLE +DICTMAXREF +ADDDIVMODR +UBITSIZE +SETINDEXVARQ +PLDUX +DICTUMAXREF +RSHIFTR +BITSIZE +DICTGETOPTREF +DICTIGETPREVEQ +QLSHIFTMODC +REWRITEVARADDR +CDEPTHIX +STONE +CHKDEPTH +BLKSWX +INDEX +QRSHIFTR +BLS_G1_MULTIEXP +HASHCU +DICTIREPLACE +THROWARGIFNOT +SEMPTY +DICTSETGET +NEQ +DICTUGETNEXTEQ +DICTUADDB +QLSHIFTDIVMODC +BRANCH +LDI +LDIXQ +SUBDICTURPGET +TUPLE +CALLCCVARARGS +QMULRSHIFTC_VAR +BREMBITREFS +DICTIMINREF +LSHIFTMODC_VAR +CONFIGOPTPARAM +STU_ALT +BLS_G2_MULTIEXP +DICTADDGETB +UNTRIPLE +STB +QFITS +BREMBITS +PLDUZ +SCHKBITS +HASHEXT_SHA256 +DICTIREMMAX +RSHIFTMOD_VAR +ROT2 +CHKTUPLE +NEWDICT +DICTISETREF +ROT +MULDIVMOD +DICTUREPLACE +STIR +SBITS +CALLDICT +SDBEGINSQ +QDIVR +HASHEXT_SHA512 +SETCP0 +NEWC +STIX +FITS +DICTUGETJMP +BLS_G1_NEG +ISPOS +SETCONTVARARGS +CALLDICT_LONG +DICTIREPLACEREF +MULRSHIFTCMOD_VAR +PREVMCBLOCKS +ADDDIVMODC +INC +QLSHIFTDIVR_VAR +DICTIDEL +DICTDEL +QINC +PLDIX +SETTHIRDQ +NOW +CADDR +LDSLICEQ +DICTUSETGETOPTREF +DICTIGETNEXTEQ +SDBEGINS +ADDRAND +STVARUINT32 +DICTUADDREF +LDI_ALT +MULMODR +PARSEMSGADDRQ +DICTUDELGET +CDDDR +PLDULE8 +STBRQ +MULMODPOW2C +CONFIGPARAM +LDVARUINT32 +DICTIADDREF +IFNOTRET +DICTIADDGETB +QMULDIVR +INDEXQ +STBREFR +SENDRAWMSG +DIVMODR +LSHIFTDIV_VAR +RIST255_FROMHASH +RSHIFTRMOD +SUBSLICE +PLDILE8Q +DICTIREPLACEB +RSHIFTC_VAR +SDSKIPLAST +PLDUXQ +LSHIFTDIVMODR +P256_CHKSIGNS +RANDSEED +STI_ALT +DEC +MODPOW2C +QLSHIFTDIV +THROWARGIF +GETORIGINALFWDFEE +POP_LONG +STREFQ +PUXC2 +BLS_G2_INGROUP +THROWANYIF +DICTREMMAXREF +SKIPDICT +AND +QPOW2 +MODPOW2R_VAR +BDEPTH +DICTIADDB +DICTREPLACEGETREF +DICTIMIN +EXPLODE +LDVARINT32 +COMPOSALT +FITSX +TPUSH +ROTREV +STULE4 +PUSHSLICE_LONG +STBREFRQ +BLKDROP +CHASHI +IF +IFNOTRETALT +QDIVC +HASHEXTAR_BLAKE2B +DICTIADDGET +QRSHIFTC_VAR +DICTREMMAX +XCHG2 +QRSHIFTMODC_VAR +SUBDICTUGET +WHILEEND +STUXQ +IFELSE +TWO +MUL +BCHKREFS +SDSKIPFIRST +ECRECOVER +DICTDELGETREF +PLDREF +DICTIDELGET +SCHKREFSQ +DICTSETB +DICTSETGETOPTREF +CDATASIZEQ +MULADDRSHIFTCMOD +QMULRSHIFTR_VAR +QMULRSHIFTMOD_VAR +LDDICT +PUXCPU +SINGLE +HASHSU +SDEMPTY +QADDRSHIFTRMOD +QMULRSHIFTCMOD +UNPACKFIRST +PUSHPOW2DEC +MULRSHIFTRMOD_VAR +CDDR +JMPREF +SUBDICTIGET +LDSLICEX +LDVARINT16 +SETCONTARGS +DICTIREMMAXREF +QRSHIFTR_VAR +DICTMINREF +THENRETALT +PUSHCONT +PUSH_LONG +NOT +SDBEGINSX +IFNOTREF +LESSINT +UNTILENDBRK +DICTPUSHCONST +BLS_G2_ISZERO +SETGASLIMIT +MULRSHIFTMOD +LDSAME +PUSH3 +QNEGATE +THROWARGANY +SDSFX +TRY +LSHIFTMODC +RSHIFTR_VAR +BLS_G1_INGROUP +STBREF +QLSHIFTDIVMOD +BLS_PAIRING +DICTREMMINREF +QLSHIFTDIVMODR +IFREFELSEREF +SETCP_SPECIAL +SETCONTCTRX +REWRITEVARADDRQ +MODPOW2R +HASHEXTA_KECCAK256 +DICTIGETEXEC +STULE8 +BLS_MAP_TO_G1 +NULLROTRIF +ROLLX +MULMODPOW2R_VAR +QRSHIFTMODR_VAR +AGAINEND +BLS_G2_NEG +ONE +DICTUDEL +REVX +NULLROTRIFNOT2 +DICTUDELGETREF +DICTREPLACEGETB +MODPOW2C_VAR +CHANGELIB +PUSHPOW2 +DICTDELGET +QMULADDDIVMODR +TPOP +QLSHIFTDIVMOD_VAR +ROLL +LDSLICEXQ +STREF +STIXR +QMULRSHIFTC +BCHKBITREFS +SETALTCTR +STDICTS +STBR +OVER +LSHIFTMODR +CDEPTH +DICTUADDGETREF +ADDRSHIFTCMOD +QMULADDDIVMOD +POPCTR +DICTISETGETREF +DIVR +DICTUSETGET +QMODPOW2_VAR +SDLEXCMP +SCHKBITSQ +SDPFX +DICTUSETGETREF +RIST255_SUB +GEQ +LDILE8Q +QXOR +ISTUPLE +GETPRECOMPILEDGAS +BLS_VERIFY +MULRSHIFTRMOD +ISNAN +SPLIT +ADD +STU +PUSHCTR +SENDMSG +TUCK +DICTIGETNEXT +XCPUXC +PLDIQ +LDULE4 +LDONES +TRIPLE +AGAINBRK +PLDU +DICTUREPLACEGETB +ISZERO +INCOMINGVALUE +PLDULE4Q +STIXQ +DROP2 +IFNOT +LSHIFT +QLSHIFTDIVMODC_VAR +BLS_MAP_TO_G2 +RAWRESERVE +RIST255_VALIDATE +QADDRSHIFTMODR +DICTADDGET +QDIV +BREFS +ONLYTOPX +SDCNTTRAIL0 +HASHEXT_KECCAK256 +LDILE4Q +PUSHINT_16 +PLDIXQ +CHKNAN +DICTGETNEXT +SAMEALT +SETTHIRD +SETGLOB +ROLLREV +STBREFQ +RET +P256_CHKSIGNU +MULRSHIFT_VAR +LSHIFTDIVMOD_VAR +-ROLLX +HASHEXTR_KECCAK512 +CHKSIGNU +RIST255_QVALIDATE +SETNUMVARARGS +BLS_G2_SUB +DUP +DICTIGETOPTREF +RSHIFTMODC_VAR +DICTUREPLACEREF +STONES +NEQINT +PLDSLICE +JMPXVARARGS +LSHIFTDIVC_VAR +SETCPX +RUNVMX +THIRDQ +SDPPFXREV +JMPDICT +LDIQ +WHILEENDBRK +INDEXVARQ +DICTREPLACE +SETCODE +RIST255_QADD +ADDCONST +LSHIFTADDDIVMOD +BLS_AGGREGATE +LDU_ALT +LDUQ +SUBR +RSHIFTCMOD +QADD +BCHKBITSQ +THROWARG +DICTIREPLACEGETREF +QMULADDRSHIFTCMOD +SETRETCTR +LSHIFTADDDIVMOD_VAR +BALANCE +THROWIF_SHORT +DICTIGET +RIST255_MULBASE +IFBITJMPREF +LAST +WHILE +XCHG_1I +LDDICTQ +DICTUREPLACEB +RSHIFT_VAR +QMULRSHIFTR +RIST255_QSUB +RETALT +BLS_PUSHR +STIQ +SETLIBCODE +PLDSLICEX +QLSHIFTMODR_VAR +SAMEALTSAVE +NIL +LDULE8Q +RIST255_ADD +BLESSARGS +SUBDICTGET +SETNUMARGS +QMODR +QMULDIVMODR +STURQ +SCHKBITREFSQ +DICTIREPLACEGET +MULMOD +MULMODC +SDCNTLEAD1 +BBITREFS +TEN +STUX +ADDRSHIFTRMOD +DICTUGETNEXT +DICTUGETEXEC +OVER2 +SDCUTFIRST +DICTGET +PFXDICTREPLACE +QMULMODC +MULRSHIFTMOD_VAR +GETGLOB +QMULADDRSHIFTMOD +XLOADQ +ABS +QOR +SDSUBSTR +JMPXARGS +SETINDEXVAR +LEQ +QLSHIFTMODR +BCHKBITS +UNPAIR +BLS_AGGREGATEVERIFY +HASHEXT_BLAKE2B +MODPOW2 +QDIVMODC +QADDRSHIFTCMOD +STSLICE +STDICT +PUSHREFCONT +PUXC +DICTUREMMAXREF +TLEN +SCHKREFS +RSHIFTC +QRSHIFT +ADDRSHIFTMODC +DICTEMPTY +BREMREFS +CONDSEL +CHASHIX +PFXDICTCONSTGETJMP +UNPACKEDCONFIGTUPLE +SAVE +STSLICECONST +DICTIREPLACEGETB +DICTUADDGETB +LSHIFTMOD_VAR +DICTIADD +MOD +THENRET +BLKSWAP +BLS_G1_MUL +PUSHNAN +PLDSLICEQ +QMULADDDIVMODC +MULMODPOW2_VAR +QUFITSX +SBITREFS +SETFIRSTQ +DICTUREPLACEGET +LDSLICE_ALT +BCHKBITSQ_VAR +LDIX +JMPX +RETARGS +MYADDR +THROWIFNOT +JMPREFDATA +DICTISETGETOPTREF +QMULRSHIFTCMOD_VAR +QLSHIFTADDDIVMODR_VAR +HASHEXTA_BLAKE2B +UNSINGLE +DICTREPLACEREF +PUSHINT_8 +BCHKBITS_VAR +HASHEXTAR_SHA256 +CTOS +IFRETALT +PARSEMSGADDR +DICTUSETREF +STVARINT32 +PLDULE4 +MULRSHIFTC +PLDSLICEXQ +DICTISETGET +QMOD +STSLICERQ +XLOAD +CHKSIGNS +PLDREFVAR +BLESSVARARGS +PUSHROOT +MAX +LDUX +CALLXARGS_VAR +CLEVELMASK +SETCONTARGS_N +QSUB +SCUTLAST +QMODPOW2C_VAR +REWRITESTDADDR +LDBLOB +ADDRSHIFT +ADDRSHIFTR +ADDRSHIFTRMOD +ADDRSHIFTC +MULADDRSHIFT +MULADDRSHIFTR +MULADDRSHIFTRMOD +HASHEXT +HASHEXTR +HASHEXTA +HASHEXTAR +CHKSIGN +SETCODEPAGE +MULADDRSHIFTC +SETCODEPAGE +PUSHINT \ No newline at end of file diff --git "a/static/img/docs/message-modes-cookbook/\321\201arry_all_the_remaining_value.svg" b/static/img/docs/message-modes-cookbook/carry_all_the_remaining_value.svg similarity index 100% rename from "static/img/docs/message-modes-cookbook/\321\201arry_all_the_remaining_value.svg" rename to static/img/docs/message-modes-cookbook/carry_all_the_remaining_value.svg diff --git "a/static/img/docs/message-modes-cookbook/\321\201arry_all_the_remaining_value_and_if_error_bounce.svg" b/static/img/docs/message-modes-cookbook/carry_all_the_remaining_value_and_if_error_bounce.svg similarity index 100% rename from "static/img/docs/message-modes-cookbook/\321\201arry_all_the_remaining_value_and_if_error_bounce.svg" rename to static/img/docs/message-modes-cookbook/carry_all_the_remaining_value_and_if_error_bounce.svg diff --git "a/static/img/docs/message-modes-cookbook/\321\201arry_all_the_remaining_value_and_pay_fees_separately.svg" b/static/img/docs/message-modes-cookbook/carry_all_the_remaining_value_and_pay_fees_separately.svg similarity index 100% rename from "static/img/docs/message-modes-cookbook/\321\201arry_all_the_remaining_value_and_pay_fees_separately.svg" rename to static/img/docs/message-modes-cookbook/carry_all_the_remaining_value_and_pay_fees_separately.svg diff --git "a/static/img/docs/message-modes-cookbook/\321\201arry_all_the_remaining_value_and_pay_fees_separately_and_if_error_bounce.svg" b/static/img/docs/message-modes-cookbook/carry_all_the_remaining_value_and_pay_fees_separately_and_if_error_bounce.svg similarity index 100% rename from "static/img/docs/message-modes-cookbook/\321\201arry_all_the_remaining_value_and_pay_fees_separately_and_if_error_bounce.svg" rename to static/img/docs/message-modes-cookbook/carry_all_the_remaining_value_and_pay_fees_separately_and_if_error_bounce.svg