From b046d99112740ae63ec48317f117c608da7d9e81 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?L=C3=A9o=20Vincent?=
<28714795+leovct@users.noreply.github.com>
Date: Tue, 8 Oct 2024 11:03:47 +0200
Subject: [PATCH] feat: ethernaut lvl 26 (#26)
* feat: add wip solution 26 ethernaut
* feat: solution
* docs: update
* docs: update READMEs and add arch diagram for level 26
---
README.md | 2 +-
docs/EthernautCTF.md | 39 -
docs/ethernaut-ctf/EthernautCTF.md | 45 +
.../ethernaut-lvl-26.excalidraw | 2733 +++++++++++++++++
.../ethernaut-lvl-26.png | Bin 0 -> 3025814 bytes
docs/{ => ethernaut-ctf}/ethernaut.png | Bin
test/EthernautCTF/DoubleEntryExploit.t.sol | 150 +
7 files changed, 2929 insertions(+), 40 deletions(-)
delete mode 100644 docs/EthernautCTF.md
create mode 100644 docs/ethernaut-ctf/EthernautCTF.md
create mode 100644 docs/ethernaut-ctf/architecture-diagrams/ethernaut-lvl-26.excalidraw
create mode 100644 docs/ethernaut-ctf/architecture-diagrams/ethernaut-lvl-26.png
rename docs/{ => ethernaut-ctf}/ethernaut.png (100%)
create mode 100644 test/EthernautCTF/DoubleEntryExploit.t.sol
diff --git a/README.md b/README.md
index cd4ae4b..314a6b1 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@ Puzzl3s š§© is an engaging collection of web3-based puzzles and Capture The Fla
The following challenges are being or have been solved:
- [Damn Vulnerable DeFi V4](docs/DamnVulnerableDeFiV4.md)
-- [EthernautCTF](docs/EthernautCTF.md)
+- [EthernautCTF](docs/ethernaut-ctf/EthernautCTF.md)
- [QuillCTF](docs/QuillCTF.md)
## Exploit
diff --git a/docs/EthernautCTF.md b/docs/EthernautCTF.md
deleted file mode 100644
index d87885f..0000000
--- a/docs/EthernautCTF.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# [EthernautCTF](https://ethernaut.openzeppelin.com/)
-
-
-
-| NĀ° | Contract | Done | Exploit PoC | Description |
-| --- | ---------------------------------------------------------- | :--: | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| 01 | [Fallback](../src/EthernautCTF/Fallback.sol) | ā
| [FallbackExploit](../test/EthernautCTF/FallbackExploit.t.sol) | Call a contract with some value to target the `receive` method. |
-| 02 | [Fallout](../src/EthernautCTF/Fallout.sol) | ā
| [FalloutExploit](../test/EthernautCTF/FalloutExploit.t.sol) | Typo in the constructor name. |
-| 03 | [CoinFlip](../src/EthernautCTF/CoinFlip.sol) | ā
| [CoinFlipExploit](../test/EthernautCTF/CoinFlipExploit.t.sol) | The contract relies on `block.number` to generate a random value. |
-| 04 | [Telephone](../src/EthernautCTF/Telephone.sol) | ā
| [TelephoneExploit](../test/EthernautCTF/TelephoneExploit.t.sol) | Use a helper contract to make sure `tx.origin` and `msg.sender` are different. |
-| 05 | [Token](../src/EthernautCTF/Token.sol) | ā
| [TokenExploit](../test/EthernautCTF/TokenExploit.t.sol) | Exploit overflows and underflows of the `0.6.0` solidity compiler. |
-| 06 | [Delegation](../src/EthernautCTF/Delegation.sol) | ā | [DelegationExploit](../test/EthernautCTF/DelegationExploit.t.sol) | Make use of the `delegatecall` to overwrite the storage of the main contract. |
-| 07 | [Force](../src/EthernautCTF/Force.sol) | ā
| [ForceExploit](../test/EthernautCTF/ForceExploit.t.sol) | Create a contract, fund it with some ether and use the `selfdestruct` method to send the contract balance to any other contract (e.g. a contract without any implementation). |
-| 08 | [Vault](../src/EthernautCTF/Vault.sol) | ā
| [VaultExploit](../test/EthernautCTF/VaultExploit.t.sol) | Read the password from the contract storage. |
-| 09 | [King](../src/EthernautCTF/King.sol) | ā
| [KingExploit](../test/EthernautCTF/KingExploit.t.sol) | Implement a helper contract that reverts when receiving ether. |
-| 10 | [Reentrance](../src/EthernautCTF/Reentrance.sol) | ā
| [ReentranceExploit](../test/EthernautCTF/ReentranceExploit.t.sol) | Perform all state changes before making external calls to avoid re-entrancy exploits. |
-| 11 | [Elevator](../src/EthernautCTF/Elevator.sol) | ā
| [ElevatorExploit](../test/EthernautCTF/ElevatorExploit.t.sol) | When calling an external contract, always check the returned value before using it! |
-| 12 | [Privacy](../src/EthernautCTF/Privacy.sol) | ā
| [PrivacyExploit](../test/EthernautCTF/PrivacyExploit.t.sol) | Read the key from the contract storage |
-| 13 | [GatekeeperOne](../src/EthernautCTF/GatekeeperOne.sol) | ā
| [GatekeeperOneExploit](../test/EthernautCTF/GatekeeperOneExploit.t.sol) | - Estimate the amount of gas a contract call would take using `gasleft` and binary search (dichotomy).
- Another method is to use a `while` loop and to consume the gas tiny bits by tiny bits until the call succeeds.
- Perform operations using bit masks. |
-| 14 | [GatekeeperTwo](../src/EthernautCTF/GatekeeperTwo.sol) | ā
| [GatekeeperTwoExploit](../test/EthernautCTF/GatekeeperTwoExploit.t.sol) | - Create a contract that has a size equal to zero by putting all the logic inside the constructor. Indeed, a contract does not have source code available during construction.
- Solidity does not support bitwise negation, but a simple way to perform the operation is to use the XOR operation (`^`) with `0xff` (ones). |
-| 15 | [NaughtCoin](../src/EthernautCTF/NaughtCoin.sol) | ā
| [NaughtCoinExploit](../test/EthernautCTF/NaughtCoinExploit.t.sol) | Use the ERC20 `allowance` and `transferFrom` methods to send tokens on behalf of a nother address. |
-| 16 | [Preservation](../src/EthernautCTF/Preservation.sol) (\*) | ā
| [PreservationExploit](../test/EthernautCTF/PreservationExploit.t.sol) | Make use of the `delegatecall` to overwrite the storage of the main contract. This time it involved a bit more creativity as it required to overwrite an address (20 bytes) using a uint256 (32 bytes). |
-| 17 | [Recovery](../src/EthernautCTF/Recovery.sol) | ā
| [RecoveryExploit](../test/EthernautCTF/RecoveryExploit.t.sol) | The address of an Ethereum contract is deterministically computed from the address of its creator (sender) and its nonce (how many transactions the creator has sent). The sender and nonce are RLP-encoded and then hashed with keccak256. For a Solidity implementation, check the exploit code. |
-| 18 | [MagicNumber](../src/EthernautCTF/MagicNumber.sol) | ā
| [MagicNumberExploit](../test/EthernautCTF/MagicNumberExploit.t.sol) | - Use raw bytecode to create the smallest possible contract.
- Learn about initialization code to be able to run any runtime code.
- Learn about `create` to create a contract from the initialization code. |
-| 19 | [AlienCode](../src/EthernautCTF/AlienCodex.sol) | ā
| [AlienCodeExploit](../test/EthernautCTF/AlienCodexExploit.t.sol.txt) | Take advantage of an array underflow vulnerability in the contract, to allow the attacker to manipulate the contract's storage. |
-| 20 | [Denial](../src/EthernautCTF/Denial.sol) | ā
| [DenialExploit](../test/EthernautCTF/DenialExploit.t.sol) | - Always set the amount of gas when using a low-level call. It will prevent the external contract to consume all the gas.
- Check the return value of low-level calls, especially when the address is controlled by someone else. |
-| 21 | [Shop](../src/EthernautCTF/Shop.sol) | ā
| [ShopExploit](../test/EthernautCTF/ShopExploit.t.sol) | - When calling an external contract, always check the returned value before using it!
- This challenge is very similar to challenge 11. |
-| 22 | [Dex](../src/EthernautCTF/Dex.sol) | ā
| [DexExploit](../test/EthernautCTF/DexExploit.t.sol) | The contract uses a division operation to compute the swap amount which can be exploited because of a precision loss. Indeed, Solidity does not support floating points. |
-| 23 | [DexTwo](../src/EthernautCTF/DexTwo.sol) | ā
| [DexTwoExploit](../test/EthernautCTF/DexTwoExploit.t.sol) | The `swap` method does not check the addresses of the ERC20 tokens. This is a very bad practice since an exploiter can manipulate the balances of those tokens. Indeed, the swap amount is computed based on the token balances, so anyone can drain the tokens of the contract. |
-| 24 | [PuzzleWallet](../src/EthernautCTF/PuzzleWallet.sol) | ā
| [PuzzleWalletExploit](../test/EthernautCTF/PuzzleWalletExploit.t.sol) | When writing a Proxy contract, and more generally any contract that uses `delegatecall`, always make sure that the sensible storage values are not colliding with other values. The storage layout should be identical, for those values, on both the proxy and the implementation contracts. |
-| 25 | [Motorbike](../src/EthernautCTF/Motorbike.sol) | ā | | |
-| 26 | [DoubleEntry](../src/EthernautCTF/DoubleEntry.sol) | ā | | |
-| 27 | GoodSamaritan | ā | | |
-| 28 | [GatekeeperThree](../src/EthernautCTF/GatekeeperThree.sol) | ā
| [GatekeeperThreeExploit](../test/EthernautCTF/GatekeeperThreeExploit.t.sol) | - Make sure the `constructor` method is spelled properly.
- Do not use `tx.origin` to check the origin of the caller.
- Private variables are not private on a public blockchain.
- It's easy to implement a contract that do not accepts ether. |
-| 29 | [Switch](../src/EthernautCTF/Switch.sol) | ā | | |
-| 30 | [HigherOrder](../src/EthernautCTF/HigherOrder.sol) | ā
| [HigherOrderExploit](../test/EthernautCTF/HigherOrderExploit.t.sol) | Reading function parameters (or any other value) using `calldataload` is dangerous because it will always return a 32-byte value and not the expected type of the variable. |
-| 31 | [Stake](../src/EthernautCTF/Stake.sol) | ā
| [StakeExploit](../test/EthernautCTF/StakeExploit.t.sol) | The contract updates the balance of the user before making sure the tokens have been transfered to the contract. |
-
-(\*) I opened a [PR](https://github.com/OpenZeppelin/ethernaut/pull/756) to prevent cheating in challenge 16.
diff --git a/docs/ethernaut-ctf/EthernautCTF.md b/docs/ethernaut-ctf/EthernautCTF.md
new file mode 100644
index 0000000..95a5715
--- /dev/null
+++ b/docs/ethernaut-ctf/EthernautCTF.md
@@ -0,0 +1,45 @@
+# [EthernautCTF](https://ethernaut.openzeppelin.com/)
+
+
+
+| NĀ° | Contract | Done | Exploit PoC | Description |
+| --- | ------------------------------------------------------------- | :--: | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| 01 | [Fallback](../../src/EthernautCTF/Fallback.sol) | ā
| [FallbackExploit](../../test/EthernautCTF/FallbackExploit.t.sol) | Call a contract with some value to target the `receive` method. |
+| 02 | [Fallout](../../src/EthernautCTF/Fallout.sol) | ā
| [FalloutExploit](../../test/EthernautCTF/FalloutExploit.t.sol) | Typo in the constructor name. |
+| 03 | [CoinFlip](../../src/EthernautCTF/CoinFlip.sol) | ā
| [CoinFlipExploit](../../test/EthernautCTF/CoinFlipExploit.t.sol) | The contract relies on `block.number` to generate a random value. |
+| 04 | [Telephone](../../src/EthernautCTF/Telephone.sol) | ā
| [TelephoneExploit](../../test/EthernautCTF/TelephoneExploit.t.sol) | Use a helper contract to make sure `tx.origin` and `msg.sender` are different. |
+| 05 | [Token](../../src/EthernautCTF/Token.sol) | ā
| [TokenExploit](../../test/EthernautCTF/TokenExploit.t.sol) | Exploit overflows and underflows of the `0.6.0` solidity compiler. |
+| 06 | [Delegation](../../src/EthernautCTF/Delegation.sol) | ā | [DelegationExploit](../../test/EthernautCTF/DelegationExploit.t.sol) | Make use of the `delegatecall` to overwrite the storage of the main contract. |
+| 07 | [Force](../../src/EthernautCTF/Force.sol) | ā
| [ForceExploit](../../test/EthernautCTF/ForceExploit.t.sol) | Create a contract, fund it with some ether and use the `selfdestruct` method to send the contract balance to any other contract (e.g. a contract without any implementation). |
+| 08 | [Vault](../../src/EthernautCTF/Vault.sol) | ā
| [VaultExploit](../../test/EthernautCTF/VaultExploit.t.sol) | Read the password from the contract storage. |
+| 09 | [King](../../src/EthernautCTF/King.sol) | ā
| [KingExploit](../../test/EthernautCTF/KingExploit.t.sol) | Implement a helper contract that reverts when receiving ether. |
+| 10 | [Reentrance](../../src/EthernautCTF/Reentrance.sol) | ā
| [ReentranceExploit](../../test/EthernautCTF/ReentranceExploit.t.sol) | Perform all state changes before making external calls to avoid re-entrancy exploits. |
+| 11 | [Elevator](../../src/EthernautCTF/Elevator.sol) | ā
| [ElevatorExploit](../../test/EthernautCTF/ElevatorExploit.t.sol) | When calling an external contract, always check the returned value before using it! |
+| 12 | [Privacy](../../src/EthernautCTF/Privacy.sol) | ā
| [PrivacyExploit](../../test/EthernautCTF/PrivacyExploit.t.sol) | Read the key from the contract storage |
+| 13 | [GatekeeperOne](../../src/EthernautCTF/GatekeeperOne.sol) | ā
| [GatekeeperOneExploit](../../test/EthernautCTF/GatekeeperOneExploit.t.sol) | - Estimate the amount of gas a contract call would take using `gasleft` and binary search (dichotomy).
- Another method is to use a `while` loop and to consume the gas tiny bits by tiny bits until the call succeeds.
- Perform operations using bit masks. |
+| 14 | [GatekeeperTwo](../../src/EthernautCTF/GatekeeperTwo.sol) | ā
| [GatekeeperTwoExploit](../../test/EthernautCTF/GatekeeperTwoExploit.t.sol) | - Create a contract that has a size equal to zero by putting all the logic inside the constructor. Indeed, a contract does not have source code available during construction.
- Solidity does not support bitwise negation, but a simple way to perform the operation is to use the XOR operation (`^`) with `0xff` (ones). |
+| 15 | [NaughtCoin](../../src/EthernautCTF/NaughtCoin.sol) | ā
| [NaughtCoinExploit](../../test/EthernautCTF/NaughtCoinExploit.t.sol) | Use the ERC20 `allowance` and `transferFrom` methods to send tokens on behalf of a nother address. |
+| 16 | [Preservation](../../src/EthernautCTF/Preservation.sol) (\*) | ā
| [PreservationExploit](../../test/EthernautCTF/PreservationExploit.t.sol) | Make use of the `delegatecall` to overwrite the storage of the main contract. This time it involved a bit more creativity as it required to overwrite an address (20 bytes) using a uint256 (32 bytes). |
+| 17 | [Recovery](../../src/EthernautCTF/Recovery.sol) | ā
| [RecoveryExploit](../../test/EthernautCTF/RecoveryExploit.t.sol) | The address of an Ethereum contract is deterministically computed from the address of its creator (sender) and its nonce (how many transactions the creator has sent). The sender and nonce are RLP-encoded and then hashed with keccak256. For a Solidity implementation, check the exploit code. |
+| 18 | [MagicNumber](../../src/EthernautCTF/MagicNumber.sol) | ā
| [MagicNumberExploit](../../test/EthernautCTF/MagicNumberExploit.t.sol) | - Use raw bytecode to create the smallest possible contract.
- Learn about initialization code to be able to run any runtime code.
- Learn about `create` to create a contract from the initialization code. |
+| 19 | [AlienCode](../../src/EthernautCTF/AlienCodex.sol) | ā
| [AlienCodeExploit](../../test/EthernautCTF/AlienCodexExploit.t.sol.txt) | Take advantage of an array underflow vulnerability in the contract, to allow the attacker to manipulate the contract's storage. |
+| 20 | [Denial](../../src/EthernautCTF/Denial.sol) | ā
| [DenialExploit](../../test/EthernautCTF/DenialExploit.t.sol) | - Always set the amount of gas when using a low-level call. It will prevent the external contract to consume all the gas.
- Check the return value of low-level calls, especially when the address is controlled by someone else. |
+| 21 | [Shop](../../src/EthernautCTF/Shop.sol) | ā
| [ShopExploit](../../test/EthernautCTF/ShopExploit.t.sol) | - When calling an external contract, always check the returned value before using it!
- This challenge is very similar to challenge 11. |
+| 22 | [Dex](../../src/EthernautCTF/Dex.sol) | ā
| [DexExploit](../../test/EthernautCTF/DexExploit.t.sol) | The contract uses a division operation to compute the swap amount which can be exploited because of a precision loss. Indeed, Solidity does not support floating points. |
+| 23 | [DexTwo](../../src/EthernautCTF/DexTwo.sol) | ā
| [DexTwoExploit](../../test/EthernautCTF/DexTwoExploit.t.sol) | The `swap` method does not check the addresses of the ERC20 tokens. This is a very bad practice since an exploiter can manipulate the balances of those tokens. Indeed, the swap amount is computed based on the token balances, so anyone can drain the tokens of the contract. |
+| 24 | [PuzzleWallet](../../src/EthernautCTF/PuzzleWallet.sol) | ā
| [PuzzleWalletExploit](../../test/EthernautCTF/PuzzleWalletExploit.t.sol) | When writing a Proxy contract, and more generally any contract that uses `delegatecall`, always make sure that the sensible storage values are not colliding with other values. The storage layout should be identical, for those values, on both the proxy and the implementation contracts. |
+| 25 | [Motorbike](../../src/EthernautCTF/Motorbike.sol) | ā | | |
+| 26 | [DoubleEntry](../../src/EthernautCTF/DoubleEntry.sol) | ā
| [DoubleEntryExploit](../../test/EthernautCTF/DoubleEntryExploit.t.sol) | - When delegating calls from a deprecated token to another token (or any other contract), avoid sending new tokens in place of old tokens.
- This level is made of a lot of different contracts, you can find an architecture diagram [below](#level-26). |
+| 27 | GoodSamaritan | ā | | |
+| 28 | [GatekeeperThree](../../src/EthernautCTF/GatekeeperThree.sol) | ā
| [GatekeeperThreeExploit](../../test/EthernautCTF/GatekeeperThreeExploit.t.sol) | - Make sure the `constructor` method is spelled properly.
- Do not use `tx.origin` to check the origin of the caller.
- Private variables are not private on a public blockchain.
- It's easy to implement a contract that do not accepts ether. |
+| 29 | [Switch](../../src/EthernautCTF/Switch.sol) | ā | | |
+| 30 | [HigherOrder](../../src/EthernautCTF/HigherOrder.sol) | ā
| [HigherOrderExploit](../../test/EthernautCTF/HigherOrderExploit.t.sol) | Reading function parameters (or any other value) using `calldataload` is dangerous because it will always return a 32-byte value and not the expected type of the variable. |
+| 31 | [Stake](../../src/EthernautCTF/Stake.sol) | ā
| [StakeExploit](../../test/EthernautCTF/StakeExploit.t.sol) | The contract updates the balance of the user before making sure the tokens have been transfered to the contract. |
+
+(\*) I opened a [PR](https://github.com/OpenZeppelin/ethernaut/pull/756) to prevent cheating in challenge 16.
+
+## Architecture Diagrams
+
+### Level 26
+
+
diff --git a/docs/ethernaut-ctf/architecture-diagrams/ethernaut-lvl-26.excalidraw b/docs/ethernaut-ctf/architecture-diagrams/ethernaut-lvl-26.excalidraw
new file mode 100644
index 0000000..ce14582
--- /dev/null
+++ b/docs/ethernaut-ctf/architecture-diagrams/ethernaut-lvl-26.excalidraw
@@ -0,0 +1,2733 @@
+{
+ "type": "excalidraw",
+ "version": 2,
+ "source": "https://excalidraw.com",
+ "elements": [
+ {
+ "type": "rectangle",
+ "version": 593,
+ "versionNonce": 1632213552,
+ "index": "bfW",
+ "isDeleted": false,
+ "id": "rP_idqv8cApLA9hD977zM",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -3907.7214756767908,
+ "y": 5710.364990052536,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 851.7862726772837,
+ "height": 105.82467122203292,
+ "seed": 1141920816,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 3
+ },
+ "boundElements": [
+ {
+ "type": "text",
+ "id": "48_uCXQmmYIb23V-NmOJI"
+ },
+ {
+ "id": "z_SzqkwP_77zPg7OyYMMO",
+ "type": "arrow"
+ }
+ ],
+ "updated": 1728377800529,
+ "link": null,
+ "locked": false
+ },
+ {
+ "type": "text",
+ "version": 568,
+ "versionNonce": 182770224,
+ "index": "bfX",
+ "isDeleted": false,
+ "id": "48_uCXQmmYIb23V-NmOJI",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -3604.4123008249653,
+ "y": 5745.777325663553,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 245.1679229736328,
+ "height": 35,
+ "seed": 290868784,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800531,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "š CryptoVault SC",
+ "textAlign": "center",
+ "verticalAlign": "middle",
+ "containerId": "rP_idqv8cApLA9hD977zM",
+ "originalText": "š CryptoVault SC",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "text",
+ "version": 986,
+ "versionNonce": 58119216,
+ "index": "bfY",
+ "isDeleted": false,
+ "id": "sHR13uObvzhSDjq_krx6a",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -3895.460042610329,
+ "y": 5845.5281208663255,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 924.0557250976562,
+ "height": 315,
+ "seed": 2009925680,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [
+ {
+ "id": "rk3r3iu9sOyP4IqJaPRMV",
+ "type": "arrow"
+ }
+ ],
+ "updated": 1728377800529,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "- constructor(address): set the tokens recipient\n\n- setUnderlying(address): set the underlying token\n=> This function is public but it can only be called once.\n\n- sweepToken(IERC20): call the transfer method to send the\nfull IERC20 token (!= underlying) balance of the CryptoVault SC to\n the tokens recipient.\n=> This function can be called by anyone.",
+ "textAlign": "left",
+ "verticalAlign": "top",
+ "containerId": null,
+ "originalText": "- constructor(address): set the tokens recipient\n\n- setUnderlying(address): set the underlying token\n=> This function is public but it can only be called once.\n\n- sweepToken(IERC20): call the transfer method to send the\nfull IERC20 token (!= underlying) balance of the CryptoVault SC to\n the tokens recipient.\n=> This function can be called by anyone.",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "rectangle",
+ "version": 780,
+ "versionNonce": 859031248,
+ "index": "bfZ",
+ "isDeleted": false,
+ "id": "Xs_5j2iXwJr6ocM2AJ23t",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -2613.3146081485183,
+ "y": 5804.932515608616,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 362.6862283122974,
+ "height": 105.82467122203292,
+ "seed": 324829744,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 3
+ },
+ "boundElements": [
+ {
+ "type": "text",
+ "id": "YblOkvWU42Ux83gg6xu6l"
+ },
+ {
+ "id": "rk3r3iu9sOyP4IqJaPRMV",
+ "type": "arrow"
+ }
+ ],
+ "updated": 1728377800529,
+ "link": null,
+ "locked": false
+ },
+ {
+ "type": "text",
+ "version": 805,
+ "versionNonce": 1470764080,
+ "index": "bfa",
+ "isDeleted": false,
+ "id": "YblOkvWU42Ux83gg6xu6l",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -2568.1074345441275,
+ "y": 5822.844851219633,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 272.2718811035156,
+ "height": 70,
+ "seed": 1122810928,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800532,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "š® Tokens Recipient\nAddress",
+ "textAlign": "center",
+ "verticalAlign": "middle",
+ "containerId": "Xs_5j2iXwJr6ocM2AJ23t",
+ "originalText": "š® Tokens Recipient\nAddress",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "arrow",
+ "version": 1156,
+ "versionNonce": 1018326224,
+ "index": "bfb",
+ "isDeleted": false,
+ "id": "rk3r3iu9sOyP4IqJaPRMV",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "dashed",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -2970.4043175126726,
+ "y": 5860.672867216299,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 335.24803476893885,
+ "height": 0.34968444702280976,
+ "seed": 1214625328,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "startBinding": {
+ "elementId": "sHR13uObvzhSDjq_krx6a",
+ "focus": -0.9041428098993307,
+ "gap": 1,
+ "fixedPoint": null
+ },
+ "endBinding": {
+ "elementId": "Xs_5j2iXwJr6ocM2AJ23t",
+ "focus": -0.06383314101221657,
+ "gap": 21.84167459521632,
+ "fixedPoint": null
+ },
+ "lastCommittedPoint": null,
+ "startArrowhead": null,
+ "endArrowhead": "arrow",
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 335.24803476893885,
+ 0.34968444702280976
+ ]
+ ],
+ "elbowed": false
+ },
+ {
+ "type": "arrow",
+ "version": 870,
+ "versionNonce": 1871939632,
+ "index": "bfc",
+ "isDeleted": false,
+ "id": "ZWwuiMQzQi0_sV_BvZ8da",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "dashed",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -3194.7732188132586,
+ "y": 5932.560159384642,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 931.5804564093892,
+ "height": 621.3785618823913,
+ "seed": 1756327984,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "startBinding": null,
+ "endBinding": {
+ "elementId": "JTHbs6ZMBme709i2nin2O",
+ "focus": -0.8830908699254634,
+ "gap": 10.50590233862522,
+ "fixedPoint": null
+ },
+ "lastCommittedPoint": null,
+ "startArrowhead": null,
+ "endArrowhead": "arrow",
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 680.9626394192851,
+ 136.26985242623323
+ ],
+ [
+ 931.5804564093892,
+ 621.3785618823913
+ ]
+ ],
+ "elbowed": false
+ },
+ {
+ "type": "rectangle",
+ "version": 946,
+ "versionNonce": 728519376,
+ "index": "bfd",
+ "isDeleted": false,
+ "id": "-R0pzbF_OyRdD_kjKs_Bo",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -3936.687454598129,
+ "y": 6255.349361627788,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 922.1432738286609,
+ "height": 105.82467122203292,
+ "seed": 196209200,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 3
+ },
+ "boundElements": [
+ {
+ "type": "text",
+ "id": "PF7Y36TEH8YjjCj9zSYJ2"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false
+ },
+ {
+ "type": "text",
+ "version": 954,
+ "versionNonce": 196611632,
+ "index": "bfe",
+ "isDeleted": false,
+ "id": "PF7Y36TEH8YjjCj9zSYJ2",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -3658.7637669025485,
+ "y": 6290.761697238805,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 366.2958984375,
+ "height": 35,
+ "seed": 1549083696,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800532,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "šŖ Legacy Token SC (LGT)",
+ "textAlign": "center",
+ "verticalAlign": "middle",
+ "containerId": "-R0pzbF_OyRdD_kjKs_Bo",
+ "originalText": "šŖ Legacy Token SC (LGT)",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "text",
+ "version": 1670,
+ "versionNonce": 905541840,
+ "index": "bff",
+ "isDeleted": false,
+ "id": "3IepVvGqeStvBVs9KuIW8",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -3924.1985634980856,
+ "y": 6388.440746600132,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 1452.10737991333,
+ "height": 560,
+ "seed": 1753292336,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [
+ {
+ "id": "PK1nma1rY9IJHYswjdT5t",
+ "type": "arrow"
+ },
+ {
+ "id": "-M5379M-9S2K50ICJE_1x",
+ "type": "arrow"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "- ERC20 + Ownable contract\n\n- mint(address, amount): transfer an amount of tokens\nfrom address 0x0 to the specified address (!= 0x0).\n=> This function can only be called by the deployer.\n\n- delegateToNewContract(DelegateERC20): set the delegate contract.\n=> This function can only be called by the deployer.\n=> The delegate contract should be the DoubleEntryPoint Token SC (DET).\n\n- transfer(address, value): if the delegate is not set, use ERC20\ntransfer, otherwise, use DelegateERC20 transfer.\n - ERC20 transfer: move an amount of LGT token from the caller address to the specified address.\n - DelegateERC20 transfer: call to the DET, set by the owner.\n\n=> This function can be called by anyone.",
+ "textAlign": "left",
+ "verticalAlign": "top",
+ "containerId": null,
+ "originalText": "- ERC20 + Ownable contract\n\n- mint(address, amount): transfer an amount of tokens\nfrom address 0x0 to the specified address (!= 0x0).\n=> This function can only be called by the deployer.\n\n- delegateToNewContract(DelegateERC20): set the delegate contract.\n=> This function can only be called by the deployer.\n=> The delegate contract should be the DoubleEntryPoint Token SC (DET).\n\n- transfer(address, value): if the delegate is not set, use ERC20\ntransfer, otherwise, use DelegateERC20 transfer.\n - ERC20 transfer: move an amount of LGT token from the caller address to the specified address.\n - DelegateERC20 transfer: call to the DET, set by the owner.\n\n=> This function can be called by anyone.",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "arrow",
+ "version": 973,
+ "versionNonce": 1527987248,
+ "index": "bfg",
+ "isDeleted": false,
+ "id": "PK1nma1rY9IJHYswjdT5t",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "dashed",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -3954.640178319646,
+ "y": 6487.936452163622,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 151.22551673325802,
+ "height": 664.4783853935267,
+ "seed": 1092474928,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [
+ {
+ "type": "text",
+ "id": "LzRFJRCkRq_g3oC9iH8q5"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "startBinding": {
+ "elementId": "3IepVvGqeStvBVs9KuIW8",
+ "focus": -0.6402781493179066,
+ "gap": 30.441614821561416,
+ "fixedPoint": null
+ },
+ "endBinding": null,
+ "lastCommittedPoint": null,
+ "startArrowhead": null,
+ "endArrowhead": "arrow",
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ -131.46613901821343,
+ -162.19510703228502
+ ],
+ [
+ 19.759377715044593,
+ -664.4783853935267
+ ]
+ ],
+ "elbowed": false
+ },
+ {
+ "type": "text",
+ "version": 43,
+ "versionNonce": 1073137712,
+ "index": "bfh",
+ "isDeleted": false,
+ "id": "LzRFJRCkRq_g3oC9iH8q5",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -4180.970288869251,
+ "y": 6308.241345131337,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 189.7279430627823,
+ "height": 35,
+ "seed": 437473840,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800532,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "mint 100 LGT",
+ "textAlign": "center",
+ "verticalAlign": "middle",
+ "containerId": "PK1nma1rY9IJHYswjdT5t",
+ "originalText": "mint 100 LGT",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "arrow",
+ "version": 172,
+ "versionNonce": 398210608,
+ "index": "bfi",
+ "isDeleted": false,
+ "id": "zsinc7-7Lpaf2tpniFqIN",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "dashed",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -2943.6739478046757,
+ "y": 6616.024883389524,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 652.7820129252268,
+ "height": 0,
+ "seed": 1783204912,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "startBinding": null,
+ "endBinding": null,
+ "lastCommittedPoint": null,
+ "startArrowhead": null,
+ "endArrowhead": "arrow",
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 652.7820129252268,
+ 0
+ ]
+ ],
+ "elbowed": false
+ },
+ {
+ "type": "arrow",
+ "version": 1133,
+ "versionNonce": 2045609168,
+ "index": "bfj",
+ "isDeleted": false,
+ "id": "7hPKcr7ZyAwufE6Krjex9",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -2994.1730920831587,
+ "y": 6865.716759782468,
+ "strokeColor": "#e03131",
+ "backgroundColor": "transparent",
+ "width": 709.195553601638,
+ "height": 156.89606092496524,
+ "seed": 195593776,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [
+ {
+ "type": "text",
+ "id": "wkt6pk5IssL-iOR_4AKdi"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "startBinding": null,
+ "endBinding": null,
+ "lastCommittedPoint": null,
+ "startArrowhead": null,
+ "endArrowhead": "arrow",
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 397.4092355119283,
+ 94.06008062164528
+ ],
+ [
+ 709.195553601638,
+ 156.89606092496524
+ ]
+ ],
+ "elbowed": false
+ },
+ {
+ "type": "text",
+ "version": 137,
+ "versionNonce": 810435120,
+ "index": "bfk",
+ "isDeleted": false,
+ "id": "wkt6pk5IssL-iOR_4AKdi",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -2827.6517655067773,
+ "y": 6924.7768404041135,
+ "strokeColor": "#e03131",
+ "backgroundColor": "transparent",
+ "width": 461.77581787109375,
+ "height": 70,
+ "seed": 1528315952,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800532,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "2. delegateTransfer(CryptoVault, \namount, tokensRecipient)",
+ "textAlign": "center",
+ "verticalAlign": "middle",
+ "containerId": "7hPKcr7ZyAwufE6Krjex9",
+ "originalText": "2. delegateTransfer(CryptoVault, amount, tokensRecipient)",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "rectangle",
+ "version": 1063,
+ "versionNonce": 1099197136,
+ "index": "bfl",
+ "isDeleted": false,
+ "id": "JTHbs6ZMBme709i2nin2O",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -2260.193106319578,
+ "y": 6564.444623605657,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 922.1432738286609,
+ "height": 105.82467122203292,
+ "seed": 1484831280,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 3
+ },
+ "boundElements": [
+ {
+ "type": "text",
+ "id": "ln2DNFnrqmAu1a5YHrzhj"
+ },
+ {
+ "id": "ZWwuiMQzQi0_sV_BvZ8da",
+ "type": "arrow"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false
+ },
+ {
+ "type": "text",
+ "version": 1088,
+ "versionNonce": 1537637424,
+ "index": "bfm",
+ "isDeleted": false,
+ "id": "ln2DNFnrqmAu1a5YHrzhj",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -2022.7573946982163,
+ "y": 6599.856959216674,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 447.2718505859375,
+ "height": 35,
+ "seed": 1187640368,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800532,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "šŖ DoubleEntry Token SC (DET)",
+ "textAlign": "center",
+ "verticalAlign": "middle",
+ "containerId": "JTHbs6ZMBme709i2nin2O",
+ "originalText": "šŖ DoubleEntry Token SC (DET)",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "text",
+ "version": 1562,
+ "versionNonce": 21926096,
+ "index": "bfn",
+ "isDeleted": false,
+ "id": "UAzBqkfKfLj3lh0La6sgE",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -2238.594406392961,
+ "y": 6696.101770606712,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 1053.0797294974327,
+ "height": 490,
+ "seed": 1272704560,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [
+ {
+ "id": "soJgNdyqHU80aQ9kSKC4t",
+ "type": "arrow"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "- ERC20 + DelegateERC20 + Ownable\n\n- constructor(address, address, address, address): set many addresses\nsuch as:\n - the Legacy Token address, also called delegated from\n - the CryptoVault address\n - the Forta address\n - the player address\n\n- delegateTransfer(address, value, address): move an amount of DET tokens\nfrom the first address (!= 0x0) to the second address (!= 0x0).\n=> The function always returns true.\n=> The function can only be called by the legacy token.\n=> Let's avoid the fortaNotify modifier for now.",
+ "textAlign": "left",
+ "verticalAlign": "top",
+ "containerId": null,
+ "originalText": "- ERC20 + DelegateERC20 + Ownable\n\n- constructor(address, address, address, address): set many addresses\nsuch as:\n - the Legacy Token address, also called delegated from\n - the CryptoVault address\n - the Forta address\n - the player address\n\n- delegateTransfer(address, value, address): move an amount of DET tokens\nfrom the first address (!= 0x0) to the second address (!= 0x0).\n=> The function always returns true.\n=> The function can only be called by the legacy token.\n=> Let's avoid the fortaNotify modifier for now.",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "arrow",
+ "version": 426,
+ "versionNonce": 1832625200,
+ "index": "bfo",
+ "isDeleted": false,
+ "id": "z_SzqkwP_77zPg7OyYMMO",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "dashed",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -2275.5406340550153,
+ "y": 6786.975449405452,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 765.0006705280566,
+ "height": 986.4653479665867,
+ "seed": 278833200,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [
+ {
+ "type": "text",
+ "id": "GWphkDuh6asF4aQBmUDQO"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "startBinding": null,
+ "endBinding": {
+ "elementId": "rP_idqv8cApLA9hD977zM",
+ "focus": -0.8832506943093104,
+ "gap": 15.39389841643515,
+ "fixedPoint": null
+ },
+ "lastCommittedPoint": null,
+ "startArrowhead": null,
+ "endArrowhead": "arrow",
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ -765.0006705280566,
+ -986.4653479665867
+ ]
+ ],
+ "elbowed": false
+ },
+ {
+ "type": "text",
+ "version": 20,
+ "versionNonce": 602371632,
+ "index": "bfp",
+ "isDeleted": false,
+ "id": "GWphkDuh6asF4aQBmUDQO",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -2755.2009384700636,
+ "y": 6276.242775422159,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 194.3199383020401,
+ "height": 35,
+ "seed": 1627005488,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800532,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "mint 100 DET",
+ "textAlign": "center",
+ "verticalAlign": "middle",
+ "containerId": "z_SzqkwP_77zPg7OyYMMO",
+ "originalText": "mint 100 DET",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "arrow",
+ "version": 464,
+ "versionNonce": 412589616,
+ "index": "bfq",
+ "isDeleted": false,
+ "id": "-M5379M-9S2K50ICJE_1x",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "dashed",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -2274.398005532131,
+ "y": 6873.64755155738,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 191.93454888185033,
+ "height": 142.53493975903893,
+ "seed": 1272339504,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "startBinding": null,
+ "endBinding": {
+ "elementId": "3IepVvGqeStvBVs9KuIW8",
+ "focus": -0.5869115883517928,
+ "gap": 5.758629170775748,
+ "fixedPoint": null
+ },
+ "lastCommittedPoint": null,
+ "startArrowhead": null,
+ "endArrowhead": "arrow",
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ -191.93454888185033,
+ -142.53493975903893
+ ]
+ ],
+ "elbowed": false
+ },
+ {
+ "type": "rectangle",
+ "version": 1742,
+ "versionNonce": 350002384,
+ "index": "bfr",
+ "isDeleted": false,
+ "id": "y3EusiMCvePFDZwcdnTKM",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -128.4738323017309,
+ "y": 6256.851678660103,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 826.888206455522,
+ "height": 105.82467122203292,
+ "seed": 1125865008,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 3
+ },
+ "boundElements": [
+ {
+ "type": "text",
+ "id": "SLb2N2OgdvQOoTpewwbNM"
+ },
+ {
+ "id": "vpUuKCd8JTZwE-Z3MzbYv",
+ "type": "arrow"
+ },
+ {
+ "id": "bvMsV3jd3FKGP5rK497__",
+ "type": "arrow"
+ },
+ {
+ "id": "hEsL9la-mGAxGH_bjcIve",
+ "type": "arrow"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false
+ },
+ {
+ "type": "text",
+ "version": 1763,
+ "versionNonce": 1845047344,
+ "index": "bfs",
+ "isDeleted": false,
+ "id": "SLb2N2OgdvQOoTpewwbNM",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": 203.02829247144024,
+ "y": 6292.26401427112,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 163.8839569091797,
+ "height": 35,
+ "seed": 1001459760,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800532,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "šØ Forta SC",
+ "textAlign": "center",
+ "verticalAlign": "middle",
+ "containerId": "y3EusiMCvePFDZwcdnTKM",
+ "originalText": "šØ Forta SC",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "arrow",
+ "version": 1409,
+ "versionNonce": 1590723280,
+ "index": "bft",
+ "isDeleted": false,
+ "id": "vpUuKCd8JTZwE-Z3MzbYv",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "dashed",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -1916.018863185941,
+ "y": 6921.015368277094,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 1762.8084922978624,
+ "height": 591.4462649085408,
+ "seed": 1300204080,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "startBinding": null,
+ "endBinding": {
+ "elementId": "y3EusiMCvePFDZwcdnTKM",
+ "focus": 0.7883541915847945,
+ "gap": 24.736538586347706,
+ "fixedPoint": null
+ },
+ "lastCommittedPoint": null,
+ "startArrowhead": null,
+ "endArrowhead": "arrow",
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 846.9437184560802,
+ -89.46184631909455
+ ],
+ [
+ 1762.8084922978624,
+ -591.4462649085408
+ ]
+ ],
+ "elbowed": false
+ },
+ {
+ "type": "rectangle",
+ "version": 1067,
+ "versionNonce": 378130992,
+ "index": "bfu",
+ "isDeleted": false,
+ "id": "653H4gbSch6sH8TUDU8Qz",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -1001.5594216630207,
+ "y": 6883.158170411934,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 362.6862283122974,
+ "height": 105.82467122203292,
+ "seed": 1399768112,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 3
+ },
+ "boundElements": [
+ {
+ "type": "text",
+ "id": "pcw_IPYPLcEBnr4AFN_7y"
+ },
+ {
+ "id": "soJgNdyqHU80aQ9kSKC4t",
+ "type": "arrow"
+ },
+ {
+ "id": "egtIWLpSp04qKJGZMrjxx",
+ "type": "arrow"
+ },
+ {
+ "id": "bvMsV3jd3FKGP5rK497__",
+ "type": "arrow"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false
+ },
+ {
+ "type": "text",
+ "version": 1086,
+ "versionNonce": 1103342128,
+ "index": "bfv",
+ "isDeleted": false,
+ "id": "pcw_IPYPLcEBnr4AFN_7y",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -881.8682888606318,
+ "y": 6918.570506022951,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 123.30396270751953,
+ "height": 35,
+ "seed": 191282736,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800532,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "š© Player",
+ "textAlign": "center",
+ "verticalAlign": "middle",
+ "containerId": "653H4gbSch6sH8TUDU8Qz",
+ "originalText": "š© Player",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "arrow",
+ "version": 1087,
+ "versionNonce": 334498864,
+ "index": "bfw",
+ "isDeleted": false,
+ "id": "soJgNdyqHU80aQ9kSKC4t",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "dashed",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -1918.394640939082,
+ "y": 6961.716022201597,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 894.4588205753917,
+ "height": 32.59229556344599,
+ "seed": 911177776,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "startBinding": null,
+ "endBinding": {
+ "elementId": "653H4gbSch6sH8TUDU8Qz",
+ "focus": 0.13128846618807297,
+ "gap": 22.376398700669597,
+ "fixedPoint": null
+ },
+ "lastCommittedPoint": null,
+ "startArrowhead": null,
+ "endArrowhead": "arrow",
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 447.774506259223,
+ -32.59229556344599
+ ],
+ [
+ 894.4588205753917,
+ -32.59229556344599
+ ]
+ ],
+ "elbowed": false
+ },
+ {
+ "type": "diamond",
+ "version": 748,
+ "versionNonce": 1812598480,
+ "index": "bfx",
+ "isDeleted": false,
+ "id": "Isy5gd5p9c0ov2PVBuBYZ",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -3820.859295240317,
+ "y": 5515.586803405635,
+ "strokeColor": "#2f9e44",
+ "backgroundColor": "transparent",
+ "width": 196.6017280359921,
+ "height": 160,
+ "seed": 940634672,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [
+ {
+ "type": "text",
+ "id": "htd7HF4WrhhjgLjQp92cq"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false
+ },
+ {
+ "type": "text",
+ "version": 684,
+ "versionNonce": 1781457968,
+ "index": "bfy",
+ "isDeleted": false,
+ "id": "htd7HF4WrhhjgLjQp92cq",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -3753.340858283418,
+ "y": 5560.586803405635,
+ "strokeColor": "#2f9e44",
+ "backgroundColor": "transparent",
+ "width": 61.263990104198456,
+ "height": 70,
+ "seed": 932391984,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800532,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "100 \nLGT",
+ "textAlign": "center",
+ "verticalAlign": "middle",
+ "containerId": "Isy5gd5p9c0ov2PVBuBYZ",
+ "originalText": "100 LGT",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "diamond",
+ "version": 2396,
+ "versionNonce": 327136464,
+ "index": "bfz",
+ "isDeleted": false,
+ "id": "GjJO5cHzO7-b28_9q1NjK",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -2235.18655336989,
+ "y": 5780.099513315659,
+ "strokeColor": "#f08c00",
+ "backgroundColor": "transparent",
+ "width": 196.6017280359921,
+ "height": 160,
+ "seed": 1052649008,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [
+ {
+ "type": "text",
+ "id": "FNXHZjm1dFzNB2E8gmL-u"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false
+ },
+ {
+ "type": "text",
+ "version": 2343,
+ "versionNonce": 354606640,
+ "index": "bg0",
+ "isDeleted": false,
+ "id": "FNXHZjm1dFzNB2E8gmL-u",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -2169.964115939969,
+ "y": 5825.099513315659,
+ "strokeColor": "#f08c00",
+ "backgroundColor": "transparent",
+ "width": 65.85598915815353,
+ "height": 70,
+ "seed": 1517936688,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800532,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "100\nDET",
+ "textAlign": "center",
+ "verticalAlign": "middle",
+ "containerId": "GjJO5cHzO7-b28_9q1NjK",
+ "originalText": "100\nDET",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "rectangle",
+ "version": 292,
+ "versionNonce": 1230019280,
+ "index": "bg1",
+ "isDeleted": false,
+ "id": "hDGqtfO_8cd2Qnc01MK6Q",
+ "fillStyle": "hachure",
+ "strokeWidth": 4,
+ "strokeStyle": "dashed",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -3911.971190366058,
+ "y": 6007.353649439452,
+ "strokeColor": "#e03131",
+ "backgroundColor": "transparent",
+ "width": 915.0560414039398,
+ "height": 164.6631929848473,
+ "seed": 984504880,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 3
+ },
+ "boundElements": [
+ {
+ "id": "_N8dT6gMoGX2CcHdBeTHk",
+ "type": "arrow"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false
+ },
+ {
+ "type": "rectangle",
+ "version": 557,
+ "versionNonce": 632764976,
+ "index": "bg2",
+ "isDeleted": false,
+ "id": "2IX7loakYOAJZBIZTi9Xk",
+ "fillStyle": "hachure",
+ "strokeWidth": 4,
+ "strokeStyle": "dashed",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -3954.712465213911,
+ "y": 6724.75764507297,
+ "strokeColor": "#e03131",
+ "backgroundColor": "transparent",
+ "width": 1442.5810345024595,
+ "height": 158.04323261644205,
+ "seed": 1380160560,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 3
+ },
+ "boundElements": [
+ {
+ "id": "_N8dT6gMoGX2CcHdBeTHk",
+ "type": "arrow"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false
+ },
+ {
+ "type": "rectangle",
+ "version": 745,
+ "versionNonce": 538230992,
+ "index": "bg3",
+ "isDeleted": false,
+ "id": "6hRIenb11AUHcqn3dX2Nw",
+ "fillStyle": "hachure",
+ "strokeWidth": 4,
+ "strokeStyle": "dashed",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -2258.7155327538885,
+ "y": 6994.265290062831,
+ "strokeColor": "#e03131",
+ "backgroundColor": "transparent",
+ "width": 1092.5672516169193,
+ "height": 214.50890574762212,
+ "seed": 1998687792,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 3
+ },
+ "boundElements": [
+ {
+ "id": "KuGV3wTaAEHe7KNskJ909",
+ "type": "arrow"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false
+ },
+ {
+ "type": "arrow",
+ "version": 858,
+ "versionNonce": 691041328,
+ "index": "bg4",
+ "isDeleted": false,
+ "id": "_N8dT6gMoGX2CcHdBeTHk",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -2975.627723330529,
+ "y": 6163.281453379512,
+ "strokeColor": "#e03131",
+ "backgroundColor": "#fcc2d7",
+ "width": 248.0571569413055,
+ "height": 543.7248018648747,
+ "seed": 36718640,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [
+ {
+ "type": "text",
+ "id": "RFJS4RxnGGfoXY3ockCyv"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "startBinding": {
+ "elementId": "hDGqtfO_8cd2Qnc01MK6Q",
+ "focus": -0.8093697242712792,
+ "gap": 21.287425631587666,
+ "fixedPoint": null
+ },
+ "endBinding": {
+ "elementId": "2IX7loakYOAJZBIZTi9Xk",
+ "focus": 0.7141793833078073,
+ "gap": 17.751389828583797,
+ "fixedPoint": null
+ },
+ "lastCommittedPoint": null,
+ "startArrowhead": null,
+ "endArrowhead": "arrow",
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 175.00706878794426,
+ 226.17849315704416
+ ],
+ [
+ 248.0571569413055,
+ 543.7248018648747
+ ]
+ ],
+ "elbowed": false
+ },
+ {
+ "type": "text",
+ "version": 130,
+ "versionNonce": 1938266160,
+ "index": "bg5",
+ "isDeleted": false,
+ "id": "RFJS4RxnGGfoXY3ockCyv",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -2938.5765871597723,
+ "y": 6371.959946536555,
+ "strokeColor": "#e03131",
+ "backgroundColor": "#fcc2d7",
+ "width": 275.911865234375,
+ "height": 35,
+ "seed": 1868022320,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800532,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "1. sweepToken(LGT)",
+ "textAlign": "center",
+ "verticalAlign": "middle",
+ "containerId": "_N8dT6gMoGX2CcHdBeTHk",
+ "originalText": "1. sweepToken(LGT)",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "diamond",
+ "version": 2494,
+ "versionNonce": 494038576,
+ "index": "bg6",
+ "isDeleted": false,
+ "id": "L3lmIIulY2CV_n_PBAvTu",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -3605.311753035344,
+ "y": 5505.904303201241,
+ "strokeColor": "#2f9e44",
+ "backgroundColor": "transparent",
+ "width": 196.6017280359921,
+ "height": 160,
+ "seed": 2105539632,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [
+ {
+ "type": "text",
+ "id": "YTzjJNGKjzEn1AVQH7GPI"
+ },
+ {
+ "id": "T31d609h6m-hQSg9XYXg3",
+ "type": "arrow"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false
+ },
+ {
+ "type": "text",
+ "version": 2441,
+ "versionNonce": 1497698864,
+ "index": "bg7",
+ "isDeleted": false,
+ "id": "YTzjJNGKjzEn1AVQH7GPI",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -3540.0893156054226,
+ "y": 5550.904303201241,
+ "strokeColor": "#2f9e44",
+ "backgroundColor": "transparent",
+ "width": 65.85598915815353,
+ "height": 70,
+ "seed": 1318123056,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800532,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "100\nDET",
+ "textAlign": "center",
+ "verticalAlign": "middle",
+ "containerId": "L3lmIIulY2CV_n_PBAvTu",
+ "originalText": "100\nDET",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "arrow",
+ "version": 362,
+ "versionNonce": 1801791536,
+ "index": "bg8",
+ "isDeleted": false,
+ "id": "T31d609h6m-hQSg9XYXg3",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -3394.1220752243344,
+ "y": 5588.197765652512,
+ "strokeColor": "#f08c00",
+ "backgroundColor": "#fcc2d7",
+ "width": 1183.8676424090304,
+ "height": 201.19504130762198,
+ "seed": 124956720,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [
+ {
+ "type": "text",
+ "id": "8pfb189-t9YLIHq4CkbV6"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "startBinding": {
+ "elementId": "L3lmIIulY2CV_n_PBAvTu",
+ "focus": -0.020563469583827026,
+ "gap": 10.986933280538473,
+ "fixedPoint": null
+ },
+ "endBinding": null,
+ "lastCommittedPoint": null,
+ "startArrowhead": null,
+ "endArrowhead": "arrow",
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 608.0998495699923,
+ 21.215791999095927
+ ],
+ [
+ 1183.8676424090304,
+ 201.19504130762198
+ ]
+ ],
+ "elbowed": false
+ },
+ {
+ "type": "text",
+ "version": 151,
+ "versionNonce": 1564691504,
+ "index": "bg9",
+ "isDeleted": false,
+ "id": "8pfb189-t9YLIHq4CkbV6",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -3056.0401699902795,
+ "y": 5556.913557651608,
+ "strokeColor": "#f08c00",
+ "backgroundColor": "#fcc2d7",
+ "width": 540.035888671875,
+ "height": 105,
+ "seed": 1879910960,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800532,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "3. move 100 DET (and not LGT)\nfrom the CryptoVault SC to the tokens\nrecipient address (= drain)",
+ "textAlign": "center",
+ "verticalAlign": "middle",
+ "containerId": "T31d609h6m-hQSg9XYXg3",
+ "originalText": "3. move 100 DET (and not LGT)\nfrom the CryptoVault SC to the tokens\nrecipient address (= drain)",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "rectangle",
+ "version": 611,
+ "versionNonce": 519086640,
+ "index": "bgA",
+ "isDeleted": false,
+ "id": "Gja0MX1o2W22Iqs2FjoKS",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -120.32875695582425,
+ "y": 6875.484569814227,
+ "strokeColor": "#1971c2",
+ "backgroundColor": "transparent",
+ "width": 819.1057401575265,
+ "height": 110.58917406609544,
+ "seed": 323511344,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 3
+ },
+ "boundElements": [
+ {
+ "type": "text",
+ "id": "NukRE_cYcKUtTg8VYFWKS"
+ },
+ {
+ "id": "hEsL9la-mGAxGH_bjcIve",
+ "type": "arrow"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false
+ },
+ {
+ "type": "text",
+ "version": 565,
+ "versionNonce": 2037007920,
+ "index": "bgB",
+ "isDeleted": false,
+ "id": "NukRE_cYcKUtTg8VYFWKS",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": 169.55215419959916,
+ "y": 6913.279156847275,
+ "strokeColor": "#1971c2",
+ "backgroundColor": "transparent",
+ "width": 239.3439178466797,
+ "height": 35,
+ "seed": 1594646064,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800532,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "š¤ Detection Bot",
+ "textAlign": "center",
+ "verticalAlign": "middle",
+ "containerId": "Gja0MX1o2W22Iqs2FjoKS",
+ "originalText": "š¤ Detection Bot",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "text",
+ "version": 2209,
+ "versionNonce": 117234736,
+ "index": "bgC",
+ "isDeleted": false,
+ "id": "3P2Rk-Wgk8NtiKf651Lq8",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -106.48030744502921,
+ "y": 7008.64895970838,
+ "strokeColor": "#1971c2",
+ "backgroundColor": "transparent",
+ "width": 722.3436889648438,
+ "height": 280,
+ "seed": 1145116720,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "- handleTransaction(address, bytes calldata): check\nif the call should be authorized or not.\n\nTo prevent the CryptoVault DET from being drained:\n1. check that the signature is different from the\ndelegaTransfer(address, value, address) signature\n2. check that the third parameter, origSender is\ndifferent from the CryptoVault SC address",
+ "textAlign": "left",
+ "verticalAlign": "top",
+ "containerId": null,
+ "originalText": "- handleTransaction(address, bytes calldata): check\nif the call should be authorized or not.\n\nTo prevent the CryptoVault DET from being drained:\n1. check that the signature is different from the\ndelegaTransfer(address, value, address) signature\n2. check that the third parameter, origSender is\ndifferent from the CryptoVault SC address",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "arrow",
+ "version": 1354,
+ "versionNonce": 418528976,
+ "index": "bgD",
+ "isDeleted": false,
+ "id": "smeNTZ99n5TQtWSEVxiNO",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": 954.1626490135359,
+ "y": 6559.06026448125,
+ "strokeColor": "#1971c2",
+ "backgroundColor": "transparent",
+ "width": 220.40207503164584,
+ "height": 58.015252367355515,
+ "seed": 1456378416,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [
+ {
+ "type": "text",
+ "id": "WbbN8EBYmvQXL7_4X6IdV"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "startBinding": null,
+ "endBinding": null,
+ "lastCommittedPoint": null,
+ "startArrowhead": null,
+ "endArrowhead": "arrow",
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 220.40207503164584,
+ 58.015252367355515
+ ]
+ ],
+ "elbowed": false
+ },
+ {
+ "type": "text",
+ "version": 106,
+ "versionNonce": 715259952,
+ "index": "bgE",
+ "isDeleted": false,
+ "id": "WbbN8EBYmvQXL7_4X6IdV",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": 915.529763189515,
+ "y": 6535.567890664927,
+ "strokeColor": "#1971c2",
+ "backgroundColor": "transparent",
+ "width": 297.6678466796875,
+ "height": 105,
+ "seed": 1838992432,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800532,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "3. raiseAlert(address)\nwhen the call\nlooks suspicious",
+ "textAlign": "center",
+ "verticalAlign": "middle",
+ "containerId": "smeNTZ99n5TQtWSEVxiNO",
+ "originalText": "3. raiseAlert(address)\nwhen the call\nlooks suspicious",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "arrow",
+ "version": 1457,
+ "versionNonce": 1407313104,
+ "index": "bgF",
+ "isDeleted": false,
+ "id": "KuGV3wTaAEHe7KNskJ909",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -159.26335593782005,
+ "y": 6304.668303829374,
+ "strokeColor": "#1971c2",
+ "backgroundColor": "transparent",
+ "width": 1109.4048748361379,
+ "height": 673.8228641410178,
+ "seed": 1116980784,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [
+ {
+ "type": "text",
+ "id": "srFyi37CkJENDaRdLrd15"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "startBinding": null,
+ "endBinding": {
+ "elementId": "6hRIenb11AUHcqn3dX2Nw",
+ "focus": 0.5338616167323716,
+ "gap": 15.774122092437665,
+ "fixedPoint": null
+ },
+ "lastCommittedPoint": null,
+ "startArrowhead": null,
+ "endArrowhead": "arrow",
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ -668.996568378529,
+ 151.87854880798022
+ ],
+ [
+ -1109.4048748361379,
+ 673.8228641410178
+ ]
+ ],
+ "elbowed": false
+ },
+ {
+ "type": "text",
+ "version": 46,
+ "versionNonce": 282229296,
+ "index": "bgG",
+ "isDeleted": false,
+ "id": "srFyi37CkJENDaRdLrd15",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -965.5298828124428,
+ "y": 6421.546852637354,
+ "strokeColor": "#1971c2",
+ "backgroundColor": "transparent",
+ "width": 274.5399169921875,
+ "height": 70,
+ "seed": 312180784,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800532,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "4. revert to prevent\nan exploit",
+ "textAlign": "center",
+ "verticalAlign": "middle",
+ "containerId": "KuGV3wTaAEHe7KNskJ909",
+ "originalText": "4. revert to prevent\nan exploit",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "arrow",
+ "version": 440,
+ "versionNonce": 502057680,
+ "index": "bgH",
+ "isDeleted": false,
+ "id": "nV60sHWbj3aybFzzgjh3w",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -678.2023575773392,
+ "y": 5554.0906121484495,
+ "strokeColor": "#e03131",
+ "backgroundColor": "transparent",
+ "width": 191.81323228077554,
+ "height": 0,
+ "seed": 1033632304,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "startBinding": null,
+ "endBinding": null,
+ "lastCommittedPoint": null,
+ "startArrowhead": null,
+ "endArrowhead": "arrow",
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 191.81323228077554,
+ 0
+ ]
+ ],
+ "elbowed": false
+ },
+ {
+ "type": "text",
+ "version": 518,
+ "versionNonce": 473303600,
+ "index": "bgI",
+ "isDeleted": false,
+ "id": "ZsUvxetrUZtnVyJUxMAew",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -460.7346698770307,
+ "y": 5538.180745075471,
+ "strokeColor": "#e03131",
+ "backgroundColor": "transparent",
+ "width": 96.79592895507812,
+ "height": 35,
+ "seed": 1719481392,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "Exploit",
+ "textAlign": "left",
+ "verticalAlign": "top",
+ "containerId": null,
+ "originalText": "Exploit",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "arrow",
+ "version": 401,
+ "versionNonce": 1907028176,
+ "index": "bgJ",
+ "isDeleted": false,
+ "id": "EtAzT5GeqGlC32zXqFQrk",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -675.6163884710522,
+ "y": 5627.778417539086,
+ "strokeColor": "#f08c00",
+ "backgroundColor": "transparent",
+ "width": 192.32221667629938,
+ "height": 0,
+ "seed": 321334832,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "startBinding": null,
+ "endBinding": null,
+ "lastCommittedPoint": null,
+ "startArrowhead": null,
+ "endArrowhead": "arrow",
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 192.32221667629938,
+ 0
+ ]
+ ],
+ "elbowed": false
+ },
+ {
+ "type": "text",
+ "version": 678,
+ "versionNonce": 123028528,
+ "index": "bgK",
+ "isDeleted": false,
+ "id": "svWJfn36lXruPs-BFB7Ps",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -458.1931476735408,
+ "y": 5607.405118532099,
+ "strokeColor": "#f08c00",
+ "backgroundColor": "transparent",
+ "width": 291.36783742904663,
+ "height": 35,
+ "seed": 1283582000,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "Result of the exploit",
+ "textAlign": "left",
+ "verticalAlign": "top",
+ "containerId": null,
+ "originalText": "Result of the exploit",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "arrow",
+ "version": 461,
+ "versionNonce": 917788368,
+ "index": "bgL",
+ "isDeleted": false,
+ "id": "KjK6fTeK3fba1gUz5Ky32",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -668.635302696036,
+ "y": 5703.784816144704,
+ "strokeColor": "#1971c2",
+ "backgroundColor": "transparent",
+ "width": 192.32221667629938,
+ "height": 0,
+ "seed": 1047880240,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "startBinding": null,
+ "endBinding": null,
+ "lastCommittedPoint": null,
+ "startArrowhead": null,
+ "endArrowhead": "arrow",
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 192.32221667629938,
+ 0
+ ]
+ ],
+ "elbowed": false
+ },
+ {
+ "type": "text",
+ "version": 627,
+ "versionNonce": 2122137136,
+ "index": "bgM",
+ "isDeleted": false,
+ "id": "1i8l9LC-pPBBufqSmaVLZ",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -451.4860468486586,
+ "y": 5689.942684864258,
+ "strokeColor": "#1971c2",
+ "backgroundColor": "transparent",
+ "width": 426.1038134098053,
+ "height": 35,
+ "seed": 1474927664,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "Prevent the exploit with Forta",
+ "textAlign": "left",
+ "verticalAlign": "top",
+ "containerId": null,
+ "originalText": "Prevent the exploit with Forta",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "text",
+ "version": 373,
+ "versionNonce": 564198608,
+ "index": "bgN",
+ "isDeleted": false,
+ "id": "Me39P32xb8Kwi2fDP_1sO",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -635.3984117989539,
+ "y": 5457.736582305544,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 92.48396301269531,
+ "height": 35,
+ "seed": 1791399472,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "Legend",
+ "textAlign": "left",
+ "verticalAlign": "top",
+ "containerId": null,
+ "originalText": "Legend",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "rectangle",
+ "version": 456,
+ "versionNonce": 43382832,
+ "index": "bgO",
+ "isDeleted": false,
+ "id": "bFNMEoOKDSW0DrKaoA9rd",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "dotted",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -715.3335901733562,
+ "y": 5433.06725797412,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 750.6452608627119,
+ "height": 338.2119213996739,
+ "seed": 1274302512,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 3
+ },
+ "boundElements": [],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false
+ },
+ {
+ "type": "line",
+ "version": 201,
+ "versionNonce": 336126672,
+ "index": "bgP",
+ "isDeleted": false,
+ "id": "TulA22p8OcJy1sVyqekRt",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -3579.9182708371472,
+ "y": 5647.393042028003,
+ "strokeColor": "#f08c00",
+ "backgroundColor": "transparent",
+ "width": 145.2329506646347,
+ "height": 119.78373088845683,
+ "seed": 1935329840,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "startBinding": null,
+ "endBinding": null,
+ "lastCommittedPoint": null,
+ "startArrowhead": null,
+ "endArrowhead": null,
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 145.2329506646347,
+ -119.78373088845683
+ ]
+ ]
+ },
+ {
+ "type": "line",
+ "version": 181,
+ "versionNonce": 931623472,
+ "index": "bgQ",
+ "isDeleted": false,
+ "id": "un7KZn4Fo-mkYbfHM4Zng",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -3595.384828920477,
+ "y": 5513.185350124466,
+ "strokeColor": "#f08c00",
+ "backgroundColor": "transparent",
+ "width": 190.66391267798053,
+ "height": 138.78855146324804,
+ "seed": 467797040,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "startBinding": null,
+ "endBinding": null,
+ "lastCommittedPoint": null,
+ "startArrowhead": null,
+ "endArrowhead": null,
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 190.66391267798053,
+ 138.78855146324804
+ ]
+ ]
+ },
+ {
+ "type": "text",
+ "version": 2761,
+ "versionNonce": 2089027792,
+ "index": "bgR",
+ "isDeleted": false,
+ "id": "Y9sLVsHO4ucOWhN6ScPvb",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -120.52993962157052,
+ "y": 6394.425932053266,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "width": 833.979692876339,
+ "height": 280,
+ "seed": 1668415024,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [
+ {
+ "id": "vpUuKCd8JTZwE-Z3MzbYv",
+ "type": "arrow"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "- setDetectionBot(address): assign a bot to the msg.sender\n\n- notify(address, bytes calldata): call the handleTransaction\nmethod of the bot of the user (first address) with the\nparameters: address and bytes calldata.\n\n- raiseAlert(address): checks if the sender is the bot of the\naddress, if yes, increase the number of alerts raised.",
+ "textAlign": "left",
+ "verticalAlign": "top",
+ "containerId": null,
+ "originalText": "- setDetectionBot(address): assign a bot to the msg.sender\n\n- notify(address, bytes calldata): call the handleTransaction\nmethod of the bot of the user (first address) with the\nparameters: address and bytes calldata.\n\n- raiseAlert(address): checks if the sender is the bot of the\naddress, if yes, increase the number of alerts raised.",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "arrow",
+ "version": 78,
+ "versionNonce": 70888496,
+ "index": "bgS",
+ "isDeleted": false,
+ "id": "egtIWLpSp04qKJGZMrjxx",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -618.4996492588989,
+ "y": 6933.9671159388745,
+ "strokeColor": "#1971c2",
+ "backgroundColor": "transparent",
+ "width": 477.9296912681557,
+ "height": 0,
+ "seed": 1794291760,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [
+ {
+ "type": "text",
+ "id": "111OecMqxMA_jrswaWtiW"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "startBinding": {
+ "elementId": "653H4gbSch6sH8TUDU8Qz",
+ "focus": -0.03975235755113571,
+ "gap": 20.373544091822623,
+ "fixedPoint": null
+ },
+ "endBinding": null,
+ "lastCommittedPoint": null,
+ "startArrowhead": null,
+ "endArrowhead": "arrow",
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 477.9296912681557,
+ 0
+ ]
+ ],
+ "elbowed": false
+ },
+ {
+ "type": "text",
+ "version": 19,
+ "versionNonce": 249803824,
+ "index": "bgT",
+ "isDeleted": false,
+ "id": "111OecMqxMA_jrswaWtiW",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -466.93675827569996,
+ "y": 6916.4671159388745,
+ "strokeColor": "#1971c2",
+ "backgroundColor": "transparent",
+ "width": 174.8039093017578,
+ "height": 35,
+ "seed": 1984705072,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800533,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "1. deploy bot",
+ "textAlign": "center",
+ "verticalAlign": "middle",
+ "containerId": "egtIWLpSp04qKJGZMrjxx",
+ "originalText": "1. deploy bot",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "arrow",
+ "version": 105,
+ "versionNonce": 848602672,
+ "index": "bgU",
+ "isDeleted": false,
+ "id": "bvMsV3jd3FKGP5rK497__",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -617.5721032192205,
+ "y": 6910.755276296,
+ "strokeColor": "#1971c2",
+ "backgroundColor": "transparent",
+ "width": 469.6745315150465,
+ "height": 555.1015217691347,
+ "seed": 208038960,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [
+ {
+ "type": "text",
+ "id": "Rd_PJZv1yFh_kgwR7UhTB"
+ }
+ ],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "startBinding": {
+ "elementId": "653H4gbSch6sH8TUDU8Qz",
+ "focus": 0.801480738119244,
+ "gap": 21.30109013150104,
+ "fixedPoint": null
+ },
+ "endBinding": {
+ "elementId": "y3EusiMCvePFDZwcdnTKM",
+ "focus": 0.8599490178285263,
+ "gap": 19.42373940244397,
+ "fixedPoint": null
+ },
+ "lastCommittedPoint": null,
+ "startArrowhead": null,
+ "endArrowhead": "arrow",
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 469.6745315150465,
+ -555.1015217691347
+ ]
+ ],
+ "elbowed": false
+ },
+ {
+ "type": "text",
+ "version": 44,
+ "versionNonce": 1790815792,
+ "index": "bgV",
+ "isDeleted": false,
+ "id": "Rd_PJZv1yFh_kgwR7UhTB",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": -539.6187791120879,
+ "y": 6580.704515411433,
+ "strokeColor": "#1971c2",
+ "backgroundColor": "transparent",
+ "width": 313.76788330078125,
+ "height": 105,
+ "seed": 388589104,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1728377800533,
+ "link": null,
+ "locked": false,
+ "fontSize": 28,
+ "fontFamily": 5,
+ "text": "2. \nsetDetectionBot(botA\nddress)",
+ "textAlign": "center",
+ "verticalAlign": "middle",
+ "containerId": "bvMsV3jd3FKGP5rK497__",
+ "originalText": "2. setDetectionBot(botAddress)",
+ "autoResize": true,
+ "lineHeight": 1.25
+ },
+ {
+ "type": "arrow",
+ "version": 208,
+ "versionNonce": 260071472,
+ "index": "bgW",
+ "isDeleted": false,
+ "id": "hEsL9la-mGAxGH_bjcIve",
+ "fillStyle": "hachure",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "angle": 0,
+ "x": 716.9637471772448,
+ "y": 6938.077304327186,
+ "strokeColor": "#1971c2",
+ "backgroundColor": "transparent",
+ "width": 176.72070920912256,
+ "height": 614.5804115633086,
+ "seed": 58531888,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": {
+ "type": 2
+ },
+ "boundElements": [],
+ "updated": 1728377800530,
+ "link": null,
+ "locked": false,
+ "startBinding": {
+ "elementId": "Gja0MX1o2W22Iqs2FjoKS",
+ "focus": 0.9899134851543925,
+ "gap": 18.1867639755435,
+ "fixedPoint": null
+ },
+ "endBinding": {
+ "elementId": "y3EusiMCvePFDZwcdnTKM",
+ "focus": -0.9382012841666914,
+ "gap": 20.74070054218737,
+ "fixedPoint": null
+ },
+ "lastCommittedPoint": null,
+ "startArrowhead": null,
+ "endArrowhead": "arrow",
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 176.72070920912256,
+ -375.63875458022267
+ ],
+ [
+ 2.1913275187330328,
+ -614.5804115633086
+ ]
+ ],
+ "elbowed": false
+ }
+ ],
+ "appState": {
+ "gridSize": 20,
+ "gridStep": 5,
+ "gridModeEnabled": false,
+ "viewBackgroundColor": "#ffffff"
+ },
+ "files": {}
+}
\ No newline at end of file
diff --git a/docs/ethernaut-ctf/architecture-diagrams/ethernaut-lvl-26.png b/docs/ethernaut-ctf/architecture-diagrams/ethernaut-lvl-26.png
new file mode 100644
index 0000000000000000000000000000000000000000..e111314ef6fed98635dd4908ae77f50c580ace19
GIT binary patch
literal 3025814
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