From 532d1e0a07cbc2a3f4de1fc5728e85df7254bc79 Mon Sep 17 00:00:00 2001 From: Iuga Mihai Date: Mon, 26 Feb 2024 16:20:10 +0200 Subject: [PATCH 1/7] chain simulator docs --- docs/sdk-and-tools/chain-simulator.md | 28 +++++++++++++++++++++++++++ docs/sdk-and-tools/overview.md | 8 ++++++++ sidebars.js | 1 + 3 files changed, 37 insertions(+) create mode 100644 docs/sdk-and-tools/chain-simulator.md diff --git a/docs/sdk-and-tools/chain-simulator.md b/docs/sdk-and-tools/chain-simulator.md new file mode 100644 index 000000000..540cc8fa0 --- /dev/null +++ b/docs/sdk-and-tools/chain-simulator.md @@ -0,0 +1,28 @@ +--- +id: chain-simulator +title: Chain simulator +--- + + +## Overview + +Chain simulator is a binary that provides all the `mx-chain-proxy-go` endpoints and includes additional endpoints +for specific operations. + + +## Architectural Overview + +This simulator is designed to replicate the behavior of a local testnet. Unlike a traditional testnet, this simulator +operates without a consensus group, allowing for isolated testing and development. + +This simulator is designed to replicate the behavior of a local testnet. Unlike a traditional testnet, this simulator +operates without a consensus group, allowing for isolated testing and development. + +## Features + +- Implements all `mx-chain-proxy-go` endpoints. +- Extra endpoints for specific operations. +- Simulates the behavior of a local testnet without a consensus group. + +The GitHub repository for the chain simulator and more information +about how to use can be found [HERE](https://github.com/multiversx/mx-chain-simulator-go). \ No newline at end of file diff --git a/docs/sdk-and-tools/overview.md b/docs/sdk-and-tools/overview.md index 2e016c4fe..d0506e71d 100644 --- a/docs/sdk-and-tools/overview.md +++ b/docs/sdk-and-tools/overview.md @@ -163,6 +163,14 @@ Events notifier is an external service that can be used to fetch block events an [comment]: # (mx-context-auto) +### Chain simulator + +Chain simulator is designed to replicate the behavior of a local testnet. + +| Name | Description | +|---------------------------------------------------|------------------------------| +| [Chain simulator](/sdk-and-tools/chain-simulator) | A service for local testing. | + ### Devcontainers (for VSCode or GitHub Codespaces) | Name | Description | diff --git a/sidebars.js b/sidebars.js index 07d87b941..d575cbf4c 100644 --- a/sidebars.js +++ b/sidebars.js @@ -248,6 +248,7 @@ const sidebars = { ], }, "sdk-and-tools/notifier", + "sdk-and-tools/chain-simulator", "sdk-and-tools/google-bigquery", "sdk-and-tools/devcontainers", { From dfee4c8cd6660573a4e5011b836b5f0decd59029 Mon Sep 17 00:00:00 2001 From: Iuga Mihai Date: Mon, 26 Feb 2024 16:20:43 +0200 Subject: [PATCH 2/7] empty line --- docs/sdk-and-tools/chain-simulator.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sdk-and-tools/chain-simulator.md b/docs/sdk-and-tools/chain-simulator.md index 540cc8fa0..11c70ccdc 100644 --- a/docs/sdk-and-tools/chain-simulator.md +++ b/docs/sdk-and-tools/chain-simulator.md @@ -25,4 +25,4 @@ operates without a consensus group, allowing for isolated testing and developmen - Simulates the behavior of a local testnet without a consensus group. The GitHub repository for the chain simulator and more information -about how to use can be found [HERE](https://github.com/multiversx/mx-chain-simulator-go). \ No newline at end of file +about how to use can be found [HERE](https://github.com/multiversx/mx-chain-simulator-go). From 390a55720c617ef88162967e8f492e6b249da9db Mon Sep 17 00:00:00 2001 From: Iuga Mihai Date: Mon, 26 Feb 2024 16:22:11 +0200 Subject: [PATCH 3/7] add bot markers --- docs/developers/tutorials/your-first-dapp.md | 3 ++- docs/sdk-and-tools/chain-simulator.md | 4 ++++ docs/sdk-and-tools/overview.md | 2 ++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/developers/tutorials/your-first-dapp.md b/docs/developers/tutorials/your-first-dapp.md index fb36daca8..d365a6b47 100644 --- a/docs/developers/tutorials/your-first-dapp.md +++ b/docs/developers/tutorials/your-first-dapp.md @@ -71,6 +71,8 @@ In the end, we'll have three subfolders: wallet, contract and dapp. For convenie ![img](/developers/tutorial/folder-structure.png) +[comment]: # (mx-context-auto) + ### **Create the owner wallet** The smart contract can only be deployed on the blockchain by an owner, so let's create an owner's wallet **PEM file**. The owner can also update the contract, later on, if needed. Keep in mind we only use PEM wallets for testing and playing around with non-production code. For real applications please follow best practices, use secure wallets that can be generated [here](https://wallet.multiversx.com). @@ -205,7 +207,6 @@ Then edit this instruction, and change it to the contract address that was shown ![img](/developers/tutorial/config-screenshot.png) - [comment]: # (mx-context-auto) ### **Build the dApp** diff --git a/docs/sdk-and-tools/chain-simulator.md b/docs/sdk-and-tools/chain-simulator.md index 11c70ccdc..4fa58aa07 100644 --- a/docs/sdk-and-tools/chain-simulator.md +++ b/docs/sdk-and-tools/chain-simulator.md @@ -3,12 +3,14 @@ id: chain-simulator title: Chain simulator --- +[comment]: # (mx-context-auto) ## Overview Chain simulator is a binary that provides all the `mx-chain-proxy-go` endpoints and includes additional endpoints for specific operations. +[comment]: # (mx-context-auto) ## Architectural Overview @@ -18,6 +20,8 @@ operates without a consensus group, allowing for isolated testing and developmen This simulator is designed to replicate the behavior of a local testnet. Unlike a traditional testnet, this simulator operates without a consensus group, allowing for isolated testing and development. +[comment]: # (mx-context-auto) + ## Features - Implements all `mx-chain-proxy-go` endpoints. diff --git a/docs/sdk-and-tools/overview.md b/docs/sdk-and-tools/overview.md index d0506e71d..27a9a7947 100644 --- a/docs/sdk-and-tools/overview.md +++ b/docs/sdk-and-tools/overview.md @@ -171,6 +171,8 @@ Chain simulator is designed to replicate the behavior of a local testnet. |---------------------------------------------------|------------------------------| | [Chain simulator](/sdk-and-tools/chain-simulator) | A service for local testing. | +[comment]: # (mx-context-auto) + ### Devcontainers (for VSCode or GitHub Codespaces) | Name | Description | From 10728a7951e76e5d844da893ebf191b1fb6ff931 Mon Sep 17 00:00:00 2001 From: Iuga Mihai Date: Tue, 27 Feb 2024 12:04:48 +0200 Subject: [PATCH 4/7] remove duplicated paragraph --- docs/sdk-and-tools/chain-simulator.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/sdk-and-tools/chain-simulator.md b/docs/sdk-and-tools/chain-simulator.md index 4fa58aa07..e43daf064 100644 --- a/docs/sdk-and-tools/chain-simulator.md +++ b/docs/sdk-and-tools/chain-simulator.md @@ -17,13 +17,13 @@ for specific operations. This simulator is designed to replicate the behavior of a local testnet. Unlike a traditional testnet, this simulator operates without a consensus group, allowing for isolated testing and development. -This simulator is designed to replicate the behavior of a local testnet. Unlike a traditional testnet, this simulator -operates without a consensus group, allowing for isolated testing and development. [comment]: # (mx-context-auto) ## Features +paragraf + - Implements all `mx-chain-proxy-go` endpoints. - Extra endpoints for specific operations. - Simulates the behavior of a local testnet without a consensus group. From a2b447bdd1a123a2282c2045e795a9939642c7a3 Mon Sep 17 00:00:00 2001 From: Iuga Mihai Date: Tue, 27 Feb 2024 12:39:59 +0200 Subject: [PATCH 5/7] diagram --- docs/sdk-and-tools/chain-simulator.md | 2 + static/technology/chainsimulator.drawio | 58 ++++++++++++++++++++++++ static/technology/chainsimulator.png | Bin 0 -> 44788 bytes 3 files changed, 60 insertions(+) create mode 100644 static/technology/chainsimulator.drawio create mode 100644 static/technology/chainsimulator.png diff --git a/docs/sdk-and-tools/chain-simulator.md b/docs/sdk-and-tools/chain-simulator.md index e43daf064..d3e2a91be 100644 --- a/docs/sdk-and-tools/chain-simulator.md +++ b/docs/sdk-and-tools/chain-simulator.md @@ -14,6 +14,8 @@ for specific operations. ## Architectural Overview +![img](/technology/chainsimulator.png) + This simulator is designed to replicate the behavior of a local testnet. Unlike a traditional testnet, this simulator operates without a consensus group, allowing for isolated testing and development. diff --git a/static/technology/chainsimulator.drawio b/static/technology/chainsimulator.drawio new file mode 100644 index 000000000..a236f596d --- /dev/null +++ b/static/technology/chainsimulator.drawio @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/technology/chainsimulator.png b/static/technology/chainsimulator.png new file mode 100644 index 0000000000000000000000000000000000000000..314f921ad3e85dae31409eb4cd1f898dc7c45beb GIT binary patch literal 44788 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%0D|wRqYb`y7F)#Ie%4eg_nP<+}U(qkFDoxnD)v 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 literal 0 HcmV?d00001 From e49b454442477bbdd76ce5d6918d111b38b5bcff Mon Sep 17 00:00:00 2001 From: Iuga Mihai Date: Tue, 27 Feb 2024 12:44:06 +0200 Subject: [PATCH 6/7] indexer diagram --- static/technology/indexer.drawio | 102 +++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 static/technology/indexer.drawio diff --git a/static/technology/indexer.drawio b/static/technology/indexer.drawio new file mode 100644 index 000000000..265c9bb85 --- /dev/null +++ b/static/technology/indexer.drawio @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 44f5222f743345d76bfed1188e1259fb83f4e6fe Mon Sep 17 00:00:00 2001 From: Iuga Mihai Date: Tue, 27 Feb 2024 15:45:53 +0200 Subject: [PATCH 7/7] fixes after reviews --- docs/sdk-and-tools/chain-simulator.md | 15 +++++++++++---- docs/sdk-and-tools/overview.md | 3 ++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/docs/sdk-and-tools/chain-simulator.md b/docs/sdk-and-tools/chain-simulator.md index d3e2a91be..246087a90 100644 --- a/docs/sdk-and-tools/chain-simulator.md +++ b/docs/sdk-and-tools/chain-simulator.md @@ -7,9 +7,18 @@ title: Chain simulator ## Overview -Chain simulator is a binary that provides all the `mx-chain-proxy-go` endpoints and includes additional endpoints +Chain simulator is a piece of software that provides all the `mx-chain-proxy-go` endpoints and includes additional endpoints for specific operations. +Instead of setting up a local testnet with a proxy and nodes, using chain simulator is a simpler option. +It mimics the behavior of a local testnet, making it easier to test smart contracts in a simulated environment. + +The chain simulator offers faster testing since it eliminates the need for consensus, allowing blocks to be generated +in milliseconds rather than the typical 6-second intervals on a local testnet. + +The chain simulator provides new endpoints that allow developers to replicate the state of a contract from the mainnet to the simulator. +This enables testing with the same state as on the mainnet, facilitating more accurate and realistic development scenarios. + [comment]: # (mx-context-auto) ## Architectural Overview @@ -24,11 +33,9 @@ operates without a consensus group, allowing for isolated testing and developmen ## Features -paragraf - - Implements all `mx-chain-proxy-go` endpoints. - Extra endpoints for specific operations. - Simulates the behavior of a local testnet without a consensus group. The GitHub repository for the chain simulator and more information -about how to use can be found [HERE](https://github.com/multiversx/mx-chain-simulator-go). +about how to use can be found [here](https://github.com/multiversx/mx-chain-simulator-go). diff --git a/docs/sdk-and-tools/overview.md b/docs/sdk-and-tools/overview.md index 27a9a7947..78c449bbe 100644 --- a/docs/sdk-and-tools/overview.md +++ b/docs/sdk-and-tools/overview.md @@ -165,7 +165,8 @@ Events notifier is an external service that can be used to fetch block events an ### Chain simulator -Chain simulator is designed to replicate the behavior of a local testnet. +Chain simulator is designed to replicate the behavior of a local testnet. +It can also be pre-initialized / initialized with blockchain state from other networks, such as mainnet or something similar. | Name | Description | |---------------------------------------------------|------------------------------|