From 7d7c0144349914786c7153443b81b4139050907d Mon Sep 17 00:00:00 2001
From: Evgeniy Zayats <zayatsevgeniy@nspcc.io>
Date: Thu, 7 Nov 2024 00:11:09 +0000
Subject: [PATCH] Intergrate NeoFS

closes #108

Signed-off-by: Evgeniy Zayats <zayatsevgeniy@nspcc.io>
---
 .../configs/plugins/oracleService.json        |   2 +-
 .../Neo.CLI/wallets/wallet1.json              |  57 +++++++++-
 .../Neo.CLI/wallets/wallet2.json              |  57 +++++++++-
 .../Neo.CLI/wallets/wallet3.json              |  57 +++++++++-
 .../Neo.CLI/wallets/wallet4.json              |  57 +++++++++-
 .../NeoFS/chain/docker-compose.yml            |  44 ++++++++
 .../NeoFS/chain/neo-wallet1-config.yml        |   4 +
 .../NeoFS/chain/neo-wallet2-config.yml        |   4 +
 .../NeoFS/chain/neo-wallet3-config.yml        |   4 +
 .../chain/neofs-main-chain-wallet-config.yml  |   4 +
 .../NeoFS/chain/neofs-main-chain-wallet.json  |  50 +++++++++
 .../NeoFS/chain/protocol.privnet.yml          |  71 ++++++++++++
 docker-compose-eco-network/NeoFS/ir/az.json   |  68 ++++++++++++
 .../NeoFS/ir/cfg/config.yml                   | 102 ++++++++++++++++++
 .../NeoFS/ir/cli-cfg.yml                      |   2 +
 .../NeoFS/ir/docker-compose.yml               |  33 ++++++
 .../NeoFS/multipurpose-wallet/config.yml      |   4 +
 .../multipurpose-wallet/local_config.yml      |   4 +
 .../NeoFS/multipurpose-wallet/wallet.json     |  30 ++++++
 .../NeoFS/neofs-adm.yml                       |   4 +
 .../NeoFS/sn/cfg/config.yml                   |  64 +++++++++++
 .../NeoFS/sn/cli-cfg.yml                      |   2 +
 .../NeoFS/sn/docker-compose.yml               |  40 +++++++
 .../NeoFS/sn/local-cli-cfg.yml                |   2 +
 .../NeoFS/sn/wallet01.json                    |  32 ++++++
 docker-compose-eco-network/cleanNeoFS.sh      |  12 +++
 docker-compose-eco-network/docker-compose.yml |   3 +-
 .../runDetachedCompose-EcoNodes.sh            |   1 +
 docker-compose-eco-network/startNeoFS.sh      |  84 +++++++++++++++
 29 files changed, 891 insertions(+), 7 deletions(-)
 create mode 100644 docker-compose-eco-network/NeoFS/chain/docker-compose.yml
 create mode 100644 docker-compose-eco-network/NeoFS/chain/neo-wallet1-config.yml
 create mode 100644 docker-compose-eco-network/NeoFS/chain/neo-wallet2-config.yml
 create mode 100644 docker-compose-eco-network/NeoFS/chain/neo-wallet3-config.yml
 create mode 100644 docker-compose-eco-network/NeoFS/chain/neofs-main-chain-wallet-config.yml
 create mode 100644 docker-compose-eco-network/NeoFS/chain/neofs-main-chain-wallet.json
 create mode 100644 docker-compose-eco-network/NeoFS/chain/protocol.privnet.yml
 create mode 100644 docker-compose-eco-network/NeoFS/ir/az.json
 create mode 100644 docker-compose-eco-network/NeoFS/ir/cfg/config.yml
 create mode 100644 docker-compose-eco-network/NeoFS/ir/cli-cfg.yml
 create mode 100644 docker-compose-eco-network/NeoFS/ir/docker-compose.yml
 create mode 100644 docker-compose-eco-network/NeoFS/multipurpose-wallet/config.yml
 create mode 100644 docker-compose-eco-network/NeoFS/multipurpose-wallet/local_config.yml
 create mode 100644 docker-compose-eco-network/NeoFS/multipurpose-wallet/wallet.json
 create mode 100644 docker-compose-eco-network/NeoFS/neofs-adm.yml
 create mode 100644 docker-compose-eco-network/NeoFS/sn/cfg/config.yml
 create mode 100644 docker-compose-eco-network/NeoFS/sn/cli-cfg.yml
 create mode 100644 docker-compose-eco-network/NeoFS/sn/docker-compose.yml
 create mode 100644 docker-compose-eco-network/NeoFS/sn/local-cli-cfg.yml
 create mode 100644 docker-compose-eco-network/NeoFS/sn/wallet01.json
 create mode 100755 docker-compose-eco-network/cleanNeoFS.sh
 create mode 100755 docker-compose-eco-network/startNeoFS.sh

diff --git a/docker-compose-eco-network/Neo.CLI/configs/plugins/oracleService.json b/docker-compose-eco-network/Neo.CLI/configs/plugins/oracleService.json
index a90a1d43..2240f588 100644
--- a/docker-compose-eco-network/Neo.CLI/configs/plugins/oracleService.json
+++ b/docker-compose-eco-network/Neo.CLI/configs/plugins/oracleService.json
@@ -12,7 +12,7 @@
       "Timeout": 5000
     },
     "NeoFS": {
-      "EndPoint": "http://127.0.0.1:8080",
+      "EndPoint": "http://neofs-storage-node:5005",
       "Timeout": 15000
     },
     "AutoStart": true
diff --git a/docker-compose-eco-network/Neo.CLI/wallets/wallet1.json b/docker-compose-eco-network/Neo.CLI/wallets/wallet1.json
index a09fc2b8..a698077b 100644
--- a/docker-compose-eco-network/Neo.CLI/wallets/wallet1.json
+++ b/docker-compose-eco-network/Neo.CLI/wallets/wallet1.json
@@ -1 +1,56 @@
-{"name":null,"version":"1.0","scrypt":{"n":16384,"r":8,"p":8},"accounts":[{"address":"NYwF2kBmTmrnggGYPUuKLiu3xWFCDUJnTX","label":null,"isDefault":false,"lock":false,"key":"6PYLXgdYBcgKHSrkFQzgaSzRNDPTrg9W55uWMdqFiYv3muCyxtt6nBfawP","contract":{"script":"DCEDXNH0auFCisGk0LtdU\u002B2JFVcJ\u002Bednq\u002Bg5pAI0lJStZVBBVuezJw==","parameters":[{"name":"signature","type":"Signature"}],"deployed":false},"extra":null},{"address":"NforeidHBjJDK6sGdxiAMRfQwW8UnkwMFm","label":null,"isDefault":false,"lock":false,"key":"6PYLXgdYBcgKHSrkFQzgaSzRNDPTrg9W55uWMdqFiYv3muCyxtt6nBfawP","contract":{"script":"EwwhA1zR9GrhQorBpNC7XVPtiRVXCfnnZ6voOaQCNJSUrWVQDCECf8MjXSSxDgcBAltpaDPynqOMmq6A4Ts92U0Aqsmw1IsMIQKNu0KTOf\u002BFy/DKBfb1CpqnIBE4ymRYpePHg2f5BLidLwwhA7vEo2UkjJZSANeVfiV14U6TKgT35D\u002BDTGibvctybETDFEGe0Nw6","parameters":[{"name":"parameter0","type":"Signature"},{"name":"parameter1","type":"Signature"},{"name":"parameter2","type":"Signature"}],"deployed":false},"extra":null}],"extra":null}
+{
+    "name": null,
+    "version": "1.0",
+    "scrypt": {
+        "n": 16384,
+        "r": 8,
+        "p": 8
+    },
+    "accounts": [
+        {
+            "address": "NYwF2kBmTmrnggGYPUuKLiu3xWFCDUJnTX",
+            "label": null,
+            "isDefault": false,
+            "lock": false,
+            "key": "6PYLXgdYBcgKHSrkFQzgaSzRNDPTrg9W55uWMdqFiYv3muCyxtt6nBfawP",
+            "contract": {
+                "script": "DCEDXNH0auFCisGk0LtdU\u002B2JFVcJ\u002Bednq\u002Bg5pAI0lJStZVBBVuezJw==",
+                "parameters": [
+                    {
+                        "name": "signature",
+                        "type": "Signature"
+                    }
+                ],
+                "deployed": false
+            },
+            "extra": null
+        },
+        {
+            "address": "NforeidHBjJDK6sGdxiAMRfQwW8UnkwMFm",
+            "label": null,
+            "isDefault": false,
+            "lock": false,
+            "key": "6PYLXgdYBcgKHSrkFQzgaSzRNDPTrg9W55uWMdqFiYv3muCyxtt6nBfawP",
+            "contract": {
+                "script": "EwwhA1zR9GrhQorBpNC7XVPtiRVXCfnnZ6voOaQCNJSUrWVQDCECf8MjXSSxDgcBAltpaDPynqOMmq6A4Ts92U0Aqsmw1IsMIQKNu0KTOf\u002BFy/DKBfb1CpqnIBE4ymRYpePHg2f5BLidLwwhA7vEo2UkjJZSANeVfiV14U6TKgT35D\u002BDTGibvctybETDFEGe0Nw6",
+                "parameters": [
+                    {
+                        "name": "parameter0",
+                        "type": "Signature"
+                    },
+                    {
+                        "name": "parameter1",
+                        "type": "Signature"
+                    },
+                    {
+                        "name": "parameter2",
+                        "type": "Signature"
+                    }
+                ],
+                "deployed": false
+            },
+            "extra": null
+        }
+    ],
+    "extra": null
+}
\ No newline at end of file
diff --git a/docker-compose-eco-network/Neo.CLI/wallets/wallet2.json b/docker-compose-eco-network/Neo.CLI/wallets/wallet2.json
index 150ad682..8510bd0c 100644
--- a/docker-compose-eco-network/Neo.CLI/wallets/wallet2.json
+++ b/docker-compose-eco-network/Neo.CLI/wallets/wallet2.json
@@ -1 +1,56 @@
-{"name":null,"version":"1.0","scrypt":{"n":16384,"r":8,"p":8},"accounts":[{"address":"Nii9kBJ3p9EVCVAsiQTvDpk5GsTZxWADSm","label":null,"isDefault":false,"lock":false,"key":"6PYQSMuevDXx6AdiuPkoKTH4RdedSK5NQV6Dg2qz8MMBQnysJvT8UwY3aA","contract":{"script":"DCECjbtCkzn/hcvwygX29QqapyAROMpkWKXjx4Nn\u002BQS4nS9BVuezJw==","parameters":[{"name":"signature","type":"Signature"}],"deployed":false},"extra":null},{"address":"NforeidHBjJDK6sGdxiAMRfQwW8UnkwMFm","label":null,"isDefault":false,"lock":false,"key":"6PYLXgdYBcgKHSrkFQzgaSzRNDPTrg9W55uWMdqFiYv3muCyxtt6nBfawP","contract":{"script":"EwwhA1zR9GrhQorBpNC7XVPtiRVXCfnnZ6voOaQCNJSUrWVQDCECf8MjXSSxDgcBAltpaDPynqOMmq6A4Ts92U0Aqsmw1IsMIQKNu0KTOf\u002BFy/DKBfb1CpqnIBE4ymRYpePHg2f5BLidLwwhA7vEo2UkjJZSANeVfiV14U6TKgT35D\u002BDTGibvctybETDFEGe0Nw6","parameters":[{"name":"parameter0","type":"Signature"},{"name":"parameter1","type":"Signature"},{"name":"parameter2","type":"Signature"}],"deployed":false},"extra":null}],"extra":null}
+{
+    "name": null,
+    "version": "1.0",
+    "scrypt": {
+        "n": 16384,
+        "r": 8,
+        "p": 8
+    },
+    "accounts": [
+        {
+            "address": "Nii9kBJ3p9EVCVAsiQTvDpk5GsTZxWADSm",
+            "label": null,
+            "isDefault": false,
+            "lock": false,
+            "key": "6PYQSMuevDXx6AdiuPkoKTH4RdedSK5NQV6Dg2qz8MMBQnysJvT8UwY3aA",
+            "contract": {
+                "script": "DCECjbtCkzn/hcvwygX29QqapyAROMpkWKXjx4Nn\u002BQS4nS9BVuezJw==",
+                "parameters": [
+                    {
+                        "name": "signature",
+                        "type": "Signature"
+                    }
+                ],
+                "deployed": false
+            },
+            "extra": null
+        },
+        {
+            "address": "NforeidHBjJDK6sGdxiAMRfQwW8UnkwMFm",
+            "label": null,
+            "isDefault": false,
+            "lock": false,
+            "key": "6PYQSMuevDXx6AdiuPkoKTH4RdedSK5NQV6Dg2qz8MMBQnysJvT8UwY3aA",
+            "contract": {
+                "script": "EwwhA1zR9GrhQorBpNC7XVPtiRVXCfnnZ6voOaQCNJSUrWVQDCECf8MjXSSxDgcBAltpaDPynqOMmq6A4Ts92U0Aqsmw1IsMIQKNu0KTOf\u002BFy/DKBfb1CpqnIBE4ymRYpePHg2f5BLidLwwhA7vEo2UkjJZSANeVfiV14U6TKgT35D\u002BDTGibvctybETDFEGe0Nw6",
+                "parameters": [
+                    {
+                        "name": "parameter0",
+                        "type": "Signature"
+                    },
+                    {
+                        "name": "parameter1",
+                        "type": "Signature"
+                    },
+                    {
+                        "name": "parameter2",
+                        "type": "Signature"
+                    }
+                ],
+                "deployed": false
+            },
+            "extra": null
+        }
+    ],
+    "extra": null
+}
\ No newline at end of file
diff --git a/docker-compose-eco-network/Neo.CLI/wallets/wallet3.json b/docker-compose-eco-network/Neo.CLI/wallets/wallet3.json
index a4c89abd..6de169b1 100644
--- a/docker-compose-eco-network/Neo.CLI/wallets/wallet3.json
+++ b/docker-compose-eco-network/Neo.CLI/wallets/wallet3.json
@@ -1 +1,56 @@
-{"name":null,"version":"1.0","scrypt":{"n":16384,"r":8,"p":8},"accounts":[{"address":"NbHq1jqbGSWdS4ksRMHK5H2wwhLUFV4iiR","label":null,"isDefault":false,"lock":false,"key":"6PYShBje4RK83KP7akyAV1XQC2AKzq3mGcEfjLnh1JxFashAPCAyRRrLBf","contract":{"script":"DCEDu8SjZSSMllIA15V\u002BJXXhTpMqBPfkP4NMaJu9y3JsRMNBVuezJw==","parameters":[{"name":"signature","type":"Signature"}],"deployed":false},"extra":null},{"address":"NforeidHBjJDK6sGdxiAMRfQwW8UnkwMFm","label":null,"isDefault":false,"lock":false,"key":"6PYLXgdYBcgKHSrkFQzgaSzRNDPTrg9W55uWMdqFiYv3muCyxtt6nBfawP","contract":{"script":"EwwhA1zR9GrhQorBpNC7XVPtiRVXCfnnZ6voOaQCNJSUrWVQDCECf8MjXSSxDgcBAltpaDPynqOMmq6A4Ts92U0Aqsmw1IsMIQKNu0KTOf\u002BFy/DKBfb1CpqnIBE4ymRYpePHg2f5BLidLwwhA7vEo2UkjJZSANeVfiV14U6TKgT35D\u002BDTGibvctybETDFEGe0Nw6","parameters":[{"name":"parameter0","type":"Signature"},{"name":"parameter1","type":"Signature"},{"name":"parameter2","type":"Signature"}],"deployed":false},"extra":null}],"extra":null}
+{
+    "name": null,
+    "version": "1.0",
+    "scrypt": {
+        "n": 16384,
+        "r": 8,
+        "p": 8
+    },
+    "accounts": [
+        {
+            "address": "NbHq1jqbGSWdS4ksRMHK5H2wwhLUFV4iiR",
+            "label": null,
+            "isDefault": false,
+            "lock": false,
+            "key": "6PYShBje4RK83KP7akyAV1XQC2AKzq3mGcEfjLnh1JxFashAPCAyRRrLBf",
+            "contract": {
+                "script": "DCEDu8SjZSSMllIA15V\u002BJXXhTpMqBPfkP4NMaJu9y3JsRMNBVuezJw==",
+                "parameters": [
+                    {
+                        "name": "signature",
+                        "type": "Signature"
+                    }
+                ],
+                "deployed": false
+            },
+            "extra": null
+        },
+        {
+            "address": "NforeidHBjJDK6sGdxiAMRfQwW8UnkwMFm",
+            "label": null,
+            "isDefault": false,
+            "lock": false,
+            "key": "6PYShBje4RK83KP7akyAV1XQC2AKzq3mGcEfjLnh1JxFashAPCAyRRrLBf",
+            "contract": {
+                "script": "EwwhA1zR9GrhQorBpNC7XVPtiRVXCfnnZ6voOaQCNJSUrWVQDCECf8MjXSSxDgcBAltpaDPynqOMmq6A4Ts92U0Aqsmw1IsMIQKNu0KTOf\u002BFy/DKBfb1CpqnIBE4ymRYpePHg2f5BLidLwwhA7vEo2UkjJZSANeVfiV14U6TKgT35D\u002BDTGibvctybETDFEGe0Nw6",
+                "parameters": [
+                    {
+                        "name": "parameter0",
+                        "type": "Signature"
+                    },
+                    {
+                        "name": "parameter1",
+                        "type": "Signature"
+                    },
+                    {
+                        "name": "parameter2",
+                        "type": "Signature"
+                    }
+                ],
+                "deployed": false
+            },
+            "extra": null
+        }
+    ],
+    "extra": null
+}
\ No newline at end of file
diff --git a/docker-compose-eco-network/Neo.CLI/wallets/wallet4.json b/docker-compose-eco-network/Neo.CLI/wallets/wallet4.json
index 0174d5e2..1331e2a6 100644
--- a/docker-compose-eco-network/Neo.CLI/wallets/wallet4.json
+++ b/docker-compose-eco-network/Neo.CLI/wallets/wallet4.json
@@ -1 +1,56 @@
-{"name":null,"version":"1.0","scrypt":{"n":16384,"r":8,"p":8},"accounts":[{"address":"NVbsa9tHHwLdAh1g1YiA8nPSR8yf4x3ubm","label":null,"isDefault":false,"lock":false,"key":"6PYK6catsTacNKLPwrh23asihVxVZyq4dBBomqi3Hxgyg8K5uCs2qDoue2","contract":{"script":"DCECf8MjXSSxDgcBAltpaDPynqOMmq6A4Ts92U0Aqsmw1ItBVuezJw==","parameters":[{"name":"signature","type":"Signature"}],"deployed":false},"extra":null},{"address":"NforeidHBjJDK6sGdxiAMRfQwW8UnkwMFm","label":null,"isDefault":false,"lock":false,"key":"6PYLXgdYBcgKHSrkFQzgaSzRNDPTrg9W55uWMdqFiYv3muCyxtt6nBfawP","contract":{"script":"EwwhA1zR9GrhQorBpNC7XVPtiRVXCfnnZ6voOaQCNJSUrWVQDCECf8MjXSSxDgcBAltpaDPynqOMmq6A4Ts92U0Aqsmw1IsMIQKNu0KTOf\u002BFy/DKBfb1CpqnIBE4ymRYpePHg2f5BLidLwwhA7vEo2UkjJZSANeVfiV14U6TKgT35D\u002BDTGibvctybETDFEGe0Nw6","parameters":[{"name":"parameter0","type":"Signature"},{"name":"parameter1","type":"Signature"},{"name":"parameter2","type":"Signature"}],"deployed":false},"extra":null}],"extra":null}
+{
+    "name": null,
+    "version": "1.0",
+    "scrypt": {
+        "n": 16384,
+        "r": 8,
+        "p": 8
+    },
+    "accounts": [
+        {
+            "address": "NVbsa9tHHwLdAh1g1YiA8nPSR8yf4x3ubm",
+            "label": null,
+            "isDefault": false,
+            "lock": false,
+            "key": "6PYK6catsTacNKLPwrh23asihVxVZyq4dBBomqi3Hxgyg8K5uCs2qDoue2",
+            "contract": {
+                "script": "DCECf8MjXSSxDgcBAltpaDPynqOMmq6A4Ts92U0Aqsmw1ItBVuezJw==",
+                "parameters": [
+                    {
+                        "name": "signature",
+                        "type": "Signature"
+                    }
+                ],
+                "deployed": false
+            },
+            "extra": null
+        },
+        {
+            "address": "NforeidHBjJDK6sGdxiAMRfQwW8UnkwMFm",
+            "label": null,
+            "isDefault": false,
+            "lock": false,
+            "key": "6PYK6catsTacNKLPwrh23asihVxVZyq4dBBomqi3Hxgyg8K5uCs2qDoue2",
+            "contract": {
+                "script": "EwwhA1zR9GrhQorBpNC7XVPtiRVXCfnnZ6voOaQCNJSUrWVQDCECf8MjXSSxDgcBAltpaDPynqOMmq6A4Ts92U0Aqsmw1IsMIQKNu0KTOf\u002BFy/DKBfb1CpqnIBE4ymRYpePHg2f5BLidLwwhA7vEo2UkjJZSANeVfiV14U6TKgT35D\u002BDTGibvctybETDFEGe0Nw6",
+                "parameters": [
+                    {
+                        "name": "parameter0",
+                        "type": "Signature"
+                    },
+                    {
+                        "name": "parameter1",
+                        "type": "Signature"
+                    },
+                    {
+                        "name": "parameter2",
+                        "type": "Signature"
+                    }
+                ],
+                "deployed": false
+            },
+            "extra": null
+        }
+    ],
+    "extra": null
+}
\ No newline at end of file
diff --git a/docker-compose-eco-network/NeoFS/chain/docker-compose.yml b/docker-compose-eco-network/NeoFS/chain/docker-compose.yml
new file mode 100644
index 00000000..d7fa4a02
--- /dev/null
+++ b/docker-compose-eco-network/NeoFS/chain/docker-compose.yml
@@ -0,0 +1,44 @@
+networks:
+  private_net:
+    external: true
+
+services:
+  neofs-main-chain:
+    image: nspccdev/neo-go:0.106.3
+    container_name: neofs-main-chain
+    command: ["node", "--config-path", "/config", "--privnet", "--debug"]
+    ports:
+      - "5000:5000"
+      - "5001:5001"
+    healthcheck:
+      test: [ "CMD", "/neo-go", "query", "height", "-r", "http://127.0.0.1:5000" ]
+      interval: 5s
+      timeout: 1s
+      retries: 5
+      start_period: 5s
+    hostname: neofs-main-chain
+    restart: "no"
+    networks:
+      - private_net
+    stop_signal: SIGKILL
+    volumes:
+    # config file
+    - ./protocol.privnet.yml:/config/protocol.privnet.yml
+    # wallet of this node
+    - ./neofs-main-chain-wallet.json:/wallets/neofs-main-chain-wallet.json
+    # wallets of neocompiler nodes
+    - ../../Neo.CLI/wallets/wallet1.json:/wallets/wallet1.json
+    - ../../Neo.CLI/wallets/wallet2.json:/wallets/wallet2.json
+    - ../../Neo.CLI/wallets/wallet3.json:/wallets/wallet3.json
+    # multipurpose wallet
+    - ../multipurpose-wallet/wallet.json:/wallets/multipurpose-wallet.json
+    # wallets' configs
+    - ./neofs-main-chain-wallet-config.yml:/wallets/neofs-main-chain-wallet-config.yml
+    - ./neo-wallet1-config.yml:/wallets/neo-wallet1-config.yml
+    - ./neo-wallet2-config.yml:/wallets/neo-wallet2-config.yml
+    - ./neo-wallet3-config.yml:/wallets/neo-wallet3-config.yml
+    - ../multipurpose-wallet/config.yml:/wallets/multipurpose-wallet-config.yml
+    # binaries and directory with neofs-contract
+    - ../neo-go:/neo-go
+    - ../neofs-cli:/neofs-cli
+    - ../neofs-contract:/neofs-contract
diff --git a/docker-compose-eco-network/NeoFS/chain/neo-wallet1-config.yml b/docker-compose-eco-network/NeoFS/chain/neo-wallet1-config.yml
new file mode 100644
index 00000000..e53a6527
--- /dev/null
+++ b/docker-compose-eco-network/NeoFS/chain/neo-wallet1-config.yml
@@ -0,0 +1,4 @@
+---
+
+Path: "/wallets/wallet1.json"
+Password: "one"
diff --git a/docker-compose-eco-network/NeoFS/chain/neo-wallet2-config.yml b/docker-compose-eco-network/NeoFS/chain/neo-wallet2-config.yml
new file mode 100644
index 00000000..7747247b
--- /dev/null
+++ b/docker-compose-eco-network/NeoFS/chain/neo-wallet2-config.yml
@@ -0,0 +1,4 @@
+---
+
+Path: "/wallets/wallet2.json"
+Password: "one"
diff --git a/docker-compose-eco-network/NeoFS/chain/neo-wallet3-config.yml b/docker-compose-eco-network/NeoFS/chain/neo-wallet3-config.yml
new file mode 100644
index 00000000..e228ceef
--- /dev/null
+++ b/docker-compose-eco-network/NeoFS/chain/neo-wallet3-config.yml
@@ -0,0 +1,4 @@
+---
+
+Path: "/wallets/wallet3.json"
+Password: "one"
diff --git a/docker-compose-eco-network/NeoFS/chain/neofs-main-chain-wallet-config.yml b/docker-compose-eco-network/NeoFS/chain/neofs-main-chain-wallet-config.yml
new file mode 100644
index 00000000..588ca983
--- /dev/null
+++ b/docker-compose-eco-network/NeoFS/chain/neofs-main-chain-wallet-config.yml
@@ -0,0 +1,4 @@
+---
+
+Path: "/wallets/neofs-main-chain-wallet.json"
+Password: "one"
diff --git a/docker-compose-eco-network/NeoFS/chain/neofs-main-chain-wallet.json b/docker-compose-eco-network/NeoFS/chain/neofs-main-chain-wallet.json
new file mode 100644
index 00000000..280ae49d
--- /dev/null
+++ b/docker-compose-eco-network/NeoFS/chain/neofs-main-chain-wallet.json
@@ -0,0 +1,50 @@
+{
+  "version": "3.0",
+  "name":null,
+  "accounts": [
+    {
+      "address": "Nhfg3TbpwogLvDGVvAvqyThbsHgoSUKwtn",
+      "key": "6PYM8VdX2BSm7BSXKzV4Fz6S3R9cDLLWNrD9nMjxW352jEv3fsC8N3wNLY",
+      "label": "single",
+      "contract": {
+        "script": "DCECs2Ir9AF73+MXxYrtX0x1PyBrfbiWBG+n13S7xL9/jcJBVuezJw==",
+        "parameters": [
+          {
+            "name": "parameter0",
+            "type": "Signature"
+          }
+        ],
+        "deployed": false
+      },
+      "lock": false,
+      "extra":null,
+      "isDefault": false
+    },
+    {
+      "address": "NfgHwwTi3wHAS8aFAN243C5vGbkYDpqLHP",
+      "key": "6PYM8VdX2BSm7BSXKzV4Fz6S3R9cDLLWNrD9nMjxW352jEv3fsC8N3wNLY",
+      "label": "consensus",
+      "contract": {
+        "script": "EQwhArNiK/QBe9/jF8WK7V9MdT8ga324lgRvp9d0u8S/f43CEUGe0Nw6",
+        "parameters": [
+          {
+            "name": "parameter0",
+            "type": "Signature"
+          }
+        ],
+        "deployed": false
+      },
+      "lock": false,
+      "extra":null,
+      "isDefault": false
+    }
+  ],
+  "scrypt": {
+    "n": 16384,
+    "r": 8,
+    "p": 8
+  },
+  "extra": {
+    "Tokens": null
+  }
+}
diff --git a/docker-compose-eco-network/NeoFS/chain/protocol.privnet.yml b/docker-compose-eco-network/NeoFS/chain/protocol.privnet.yml
new file mode 100644
index 00000000..219e3f06
--- /dev/null
+++ b/docker-compose-eco-network/NeoFS/chain/protocol.privnet.yml
@@ -0,0 +1,71 @@
+ProtocolConfiguration:
+  Magic: 56753
+  MaxTraceableBlocks: 2102400
+  MaxTransactionsPerBlock: 5000
+  InitialGASSupply: 5200000000000000
+  TimePerBlock: 3s
+  MemPoolSize: 50000
+  StandbyCommittee:
+  - 035cd1f46ae1428ac1a4d0bb5d53ed89155709f9e767abe839a402349494ad6550
+  - 028dbb429339ff85cbf0ca05f6f50a9aa7201138ca6458a5e3c78367f904b89d2f
+  - 03bbc4a365248c965200d7957e2575e14e932a04f7e43f834c689bbdcb726c44c3
+  - 027fc3235d24b10e0701025b696833f29ea38c9aae80e13b3dd94d00aac9b0d48b
+  SeedList:
+  - eco-neo-csharp-node1-running:20333
+  - eco-neo-csharp-node2-running:20334
+  - eco-neo-csharp-node3-running:20335
+  - eco-neo-csharp-node4-running:20336
+  ValidatorsCount: 4
+  VerifyTransactions: false
+  P2PSigExtensions: false
+
+ApplicationConfiguration:
+  SkipBlockVerification: false
+  DBConfiguration:
+    Type: "boltdb"
+    BoltDBOptions:
+      FilePath: "./db/privnet.bolt"
+  P2P:
+    Addresses:
+      - ":5001"
+    DialTimeout: 3s
+    ProtoTickInterval: 2s
+    PingInterval: 30s
+    PingTimeout: 90s
+    MaxPeers: 10
+    AttemptConnPeers: 10
+    MinPeers: 4
+  Relay: true
+  RPC:
+    Addresses:
+      - ":5000"
+    Enabled: true
+    SessionEnabled: true
+    EnableCORSWorkaround: false
+    MaxGasInvoke: 15
+  Prometheus:
+    Addresses:
+      - ":20001"
+    Enabled: false
+  Pprof:
+    Addresses:
+      - ":20011"
+    Enabled: false
+  Consensus:
+    Enabled: false
+    UnlockWallet:
+      Path: "/wallets/neofs-main-chain-wallet.json"
+      Password: "one"
+  Oracle:
+    Enabled: true
+    NeoFS:
+      Nodes:
+        - neofs-storage-node:5005
+    UnlockWallet:
+      Path: "/wallets/neofs-main-chain-wallet.json"
+      Password: "one"
+  P2PNotary:
+    Enabled: false
+    UnlockWallet:
+      Path: "/wallets/neofs-main-chain-wallet.json"
+      Password: "one"
diff --git a/docker-compose-eco-network/NeoFS/ir/az.json b/docker-compose-eco-network/NeoFS/ir/az.json
new file mode 100644
index 00000000..025a2ea5
--- /dev/null
+++ b/docker-compose-eco-network/NeoFS/ir/az.json
@@ -0,0 +1,68 @@
+{
+  "version": "3.0",
+  "name": null,
+  "accounts": [
+    {
+      "address": "Nhfg3TbpwogLvDGVvAvqyThbsHgoSUKwtn",
+      "key": "6PYM8VdX2BSm7BSXKzV4Fz6S3R9cDLLWNrD9nMjxW352jEv3fsC8N3wNLY",
+      "label": "single",
+      "contract": {
+        "script": "DCECs2Ir9AF73+MXxYrtX0x1PyBrfbiWBG+n13S7xL9/jcJBVuezJw==",
+        "parameters": [
+          {
+            "name": "parameter0",
+            "type": "Signature"
+          }
+        ],
+        "deployed": false
+      },
+      "lock": false,
+      "extra": null,
+      "isDefault": false
+    },
+    {
+      "address": "NfgHwwTi3wHAS8aFAN243C5vGbkYDpqLHP",
+      "key": "6PYM8VdX2BSm7BSXKzV4Fz6S3R9cDLLWNrD9nMjxW352jEv3fsC8N3wNLY",
+      "label": "consensus",
+      "contract": {
+        "script": "EQwhArNiK/QBe9/jF8WK7V9MdT8ga324lgRvp9d0u8S/f43CEUGe0Nw6",
+        "parameters": [
+          {
+            "name": "parameter0",
+            "type": "Signature"
+          }
+        ],
+        "deployed": false
+      },
+      "lock": false,
+      "extra": null,
+      "isDefault": false
+    },
+    {
+      "address": "NfgHwwTi3wHAS8aFAN243C5vGbkYDpqLHP",
+      "key": "6PYM8VdX2BSm7BSXKzV4Fz6S3R9cDLLWNrD9nMjxW352jEv3fsC8N3wNLY",
+      "label": "committee",
+      "contract": {
+        "script": "EQwhArNiK/QBe9/jF8WK7V9MdT8ga324lgRvp9d0u8S/f43CEUGe0Nw6",
+        "parameters": [
+          {
+            "name": "parameter0",
+            "type": "Signature"
+          }
+        ],
+        "deployed": false
+      },
+      "lock": false,
+      "extra": null,
+      "isDefault": true
+    }
+  ],
+  "scrypt": {
+    "n": 16384,
+    "r": 8,
+    "p": 8
+  },
+  "extra": {
+    "Tokens": null
+  }
+}
diff --git a/docker-compose-eco-network/NeoFS/ir/cfg/config.yml b/docker-compose-eco-network/NeoFS/ir/cfg/config.yml
new file mode 100644
index 00000000..d7aeb329
--- /dev/null
+++ b/docker-compose-eco-network/NeoFS/ir/cfg/config.yml
@@ -0,0 +1,102 @@
+# Logger section
+logger:
+  level: debug  # Minimum enabled logging level
+
+# Wallet settings
+wallet:
+  path: /wallet.json  # Path to NEP-6 NEO wallet file
+  address: Nhfg3TbpwogLvDGVvAvqyThbsHgoSUKwtn  # Account address in the wallet; ignore to use default address
+  password: one  # Account password in the wallet
+
+# Profiler section
+pprof:
+  enabled: false
+  address: :9060  # Endpoint for application pprof profiling; disabled by default
+  shutdown_timeout: 30s  # Timeout for profiling HTTP server graceful shutdown
+
+# Application metrics section
+prometheus:
+  enabled: false
+  address: :9070  # Endpoint for application prometheus metrics; disabled by default
+  shutdown_timeout: 30s  # Timeout for metrics HTTP server graceful shutdown
+
+# Toggling the sidechain-only mode
+without_mainnet: false
+
+# Neo main chain RPC settings
+mainnet:
+  endpoints: # List of websocket RPC endpoints in mainchain; ignore if mainchain is disabled
+    - ws://neofs-main-chain:5000/ws
+
+# NeoFS chain RPC settings
+morph:
+  validators:  # List of hex-encoded 33-byte public keys of sidechain validators to vote for at application startup
+    - 02b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc2
+  consensus:
+    magic: 15405
+    committee:
+      - 02b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc2
+    storage:
+      type: boltdb
+      path: /neofs_chain/db.bolt
+    time_per_block: 1s
+    max_traceable_blocks: 200000
+    seed_nodes:
+      - :5004
+    rpc:
+      listen:
+        - ":5003"
+    p2p:
+      dial_timeout: 3s
+      proto_tick_interval:
+      listen:
+        - ":5004"
+      peers:
+        min: 0
+        max: 10
+        attempts: 5
+      ping:
+        interval: 30s
+        timeout: 90s
+    set_roles_in_genesis: true
+
+fschain_autodeploy: true
+
+# Network time settings
+timers:
+  stop_estimation:
+    mul: 1  # Multiplier in x/y relation of when to stop basic income estimation within the epoch
+    div: 4  # Divider in x/y relation of when to stop basic income estimation within the epoch
+  collect_basic_income:
+    mul: 1  # Multiplier in x/y relation of when to start basic income asset collection within the epoch
+    div: 2  # Divider in x/y relation of when to start basic income asset collecting within the epoch
+  distribute_basic_income:
+    mul: 3  # Multiplier in x/y relation of when to start basic income asset distribution within the epoch
+    div: 4  # Divider in x/y relation of when to start basic income asset distribution within the epoch
+
+# Storage node GAS emission settings
+emit:
+  storage:
+    amount: 1000000000  # Fixed8 value of sidechain GAS emitted to all storage nodes once per GAS emission cycle; disabled by default
+  
+# Storage node removal settings
+netmap_cleaner:
+  enabled: true  # Enable voting for removing stale storage nodes from network map
+  threshold: 3  # Number of NeoFS epoch without bootstrap request from storage node before it considered stale
+  
+# Audit settings
+audit:
+  pdp:
+    max_sleep_interval: 100ms  # Maximum timeout between object.RangeHash requests to the storage node
+    
+# Settlement settings
+settlement:
+  basic_income_rate: 100000000  # Optional: override basic income rate value from network config; applied only in debug mode
+  audit_fee: 100000  # Optional: override audit fee value from network config; applied only in debug mode
+
+control:
+  grpc:
+    endpoint: :5002
+
+contracts:
+  neofs: 6a715fe77786ad16a5f543e45c7ba242f196d01b
diff --git a/docker-compose-eco-network/NeoFS/ir/cli-cfg.yml b/docker-compose-eco-network/NeoFS/ir/cli-cfg.yml
new file mode 100644
index 00000000..1b4dfa29
--- /dev/null
+++ b/docker-compose-eco-network/NeoFS/ir/cli-cfg.yml
@@ -0,0 +1,2 @@
+wallet: /wallet.json
+password: "one"
diff --git a/docker-compose-eco-network/NeoFS/ir/docker-compose.yml b/docker-compose-eco-network/NeoFS/ir/docker-compose.yml
new file mode 100644
index 00000000..ed869d69
--- /dev/null
+++ b/docker-compose-eco-network/NeoFS/ir/docker-compose.yml
@@ -0,0 +1,33 @@
+networks:
+  private_net:
+    external: true
+
+volumes:
+  neofs_chain_inner_ring:
+
+services:
+  neofs-innerring:
+    image: nspccdev/neofs-ir:0.43.0
+    hostname: neofs-innerring
+    container_name: neofs-innerring
+    restart: "no"
+    ports:
+      - "5002:5002"
+      - "5003:5003"
+      - "5004:5004"
+    networks:
+      - private_net
+    stop_signal: SIGKILL
+    volumes:
+      - neofs_chain_inner_ring:/neofs_chain/
+      - ./cfg:/etc/neofs/ir
+      - ./az.json:/wallet.json
+      - ./cli-cfg.yml:/cli-cfg.yml
+      - ../neofs-cli:/neofs-cli
+    command: [ "neofs-ir", "--config", "/etc/neofs/ir/config.yml" ]
+    healthcheck:
+      test: ["CMD", "/neofs-cli", "control", "healthcheck", "-c", "/cli-cfg.yml", "--endpoint", "localhost:5002", "--ir"]
+      interval: 5s
+      timeout: 5s
+      retries: 600
+      start_period: 60s
diff --git a/docker-compose-eco-network/NeoFS/multipurpose-wallet/config.yml b/docker-compose-eco-network/NeoFS/multipurpose-wallet/config.yml
new file mode 100644
index 00000000..5b63243a
--- /dev/null
+++ b/docker-compose-eco-network/NeoFS/multipurpose-wallet/config.yml
@@ -0,0 +1,4 @@
+---
+
+Path: "/wallets/multipurpose-wallet.json"
+Password: ""
diff --git a/docker-compose-eco-network/NeoFS/multipurpose-wallet/local_config.yml b/docker-compose-eco-network/NeoFS/multipurpose-wallet/local_config.yml
new file mode 100644
index 00000000..63d449e1
--- /dev/null
+++ b/docker-compose-eco-network/NeoFS/multipurpose-wallet/local_config.yml
@@ -0,0 +1,4 @@
+---
+
+Path: "./NeoFS/wallets/wallet.json"
+Password: ""
diff --git a/docker-compose-eco-network/NeoFS/multipurpose-wallet/wallet.json b/docker-compose-eco-network/NeoFS/multipurpose-wallet/wallet.json
new file mode 100644
index 00000000..ce68d604
--- /dev/null
+++ b/docker-compose-eco-network/NeoFS/multipurpose-wallet/wallet.json
@@ -0,0 +1,30 @@
+{
+  "version": "3.0",
+  "accounts": [
+    {
+      "address": "NbUgTSFvPmsRxmGeWpuuGeJUoRoi6PErcM",
+      "key": "6PYP7YrwGnLuu4WYQbEe3WJiC44aKmqwqawLsp7H3oh5vocS9xTv2ZfTp3",
+      "label": "",
+      "contract": {
+        "script": "DCEDGmxvu98CyjUXRfqGubpalFLXhaxPf8K3VIyipGxPz0pBVuezJw==",
+        "parameters": [
+          {
+            "name": "parameter0",
+            "type": "Signature"
+          }
+        ],
+        "deployed": false
+      },
+      "lock": false,
+      "isdefault": false
+    }
+  ],
+  "scrypt": {
+    "n": 16384,
+    "r": 8,
+    "p": 8
+  },
+  "extra": {
+    "Tokens": null
+  }
+}
diff --git a/docker-compose-eco-network/NeoFS/neofs-adm.yml b/docker-compose-eco-network/NeoFS/neofs-adm.yml
new file mode 100644
index 00000000..b190c36a
--- /dev/null
+++ b/docker-compose-eco-network/NeoFS/neofs-adm.yml
@@ -0,0 +1,4 @@
+rpc-endpoint: http://localhost:5003
+credentials:
+  az: "one"
+  contract: "one"
\ No newline at end of file
diff --git a/docker-compose-eco-network/NeoFS/sn/cfg/config.yml b/docker-compose-eco-network/NeoFS/sn/cfg/config.yml
new file mode 100644
index 00000000..cd1272e6
--- /dev/null
+++ b/docker-compose-eco-network/NeoFS/sn/cfg/config.yml
@@ -0,0 +1,64 @@
+# Logger section
+logger:
+  level: debug # Minimum enabled logging level
+
+# Profiler section
+pprof:
+  enabled: false
+  address: :9080  # Server address
+  shutdown_timeout: 15s  # Timeout for profiling HTTP server graceful shutdown
+
+# Application metrics section
+prometheus:
+  enabled: false
+  address: :9090  # Server address
+  shutdown_timeout: 15s  # Timeout for metrics HTTP server graceful shutdown
+
+# NeoFS chain section
+morph:
+  dial_timeout: 60s  # Timeout for side chain NEO RPC client connection
+  endpoints:  # Side chain NEO RPC endpoints
+    - ws://neofs-innerring:5003/ws
+
+# Tree section
+tree:
+  enabled: true
+
+# Storage engine configuration
+storage:
+  shard:
+    0:
+      writecache:
+        enabled: false
+        path: /storage/wc0  # Write-cache root directory
+
+      metabase:
+        path: /storage/meta0  # Path to the metabase
+
+      blobstor:
+        - type: peapod
+          path: /storage/peapod0.db
+        - type: fstree
+          path: /storage/fstree0  # FSTree root directory
+          depth: 2
+
+      pilorama:
+        path: /storage/pilorama0  # Path to the pilorama database
+
+    1:
+      writecache:
+        enabled: false
+        path: /storage/wc1  # Write-cache root directory
+
+      metabase:
+        path: /storage/meta1  # Path to the metabase
+
+      blobstor:
+        - type: peapod
+          path: /storage/peapod1.db
+        - type: fstree
+          path: /storage/fstree1  # FSTree root directory
+          depth: 2
+
+      pilorama:
+        path: /storage/pilorama1  # Path to the pilorama database
diff --git a/docker-compose-eco-network/NeoFS/sn/cli-cfg.yml b/docker-compose-eco-network/NeoFS/sn/cli-cfg.yml
new file mode 100644
index 00000000..02c7aae4
--- /dev/null
+++ b/docker-compose-eco-network/NeoFS/sn/cli-cfg.yml
@@ -0,0 +1,2 @@
+wallet: /wallet.json
+password: ""
diff --git a/docker-compose-eco-network/NeoFS/sn/docker-compose.yml b/docker-compose-eco-network/NeoFS/sn/docker-compose.yml
new file mode 100644
index 00000000..827aea9a
--- /dev/null
+++ b/docker-compose-eco-network/NeoFS/sn/docker-compose.yml
@@ -0,0 +1,40 @@
+networks:
+  private_net:
+    external: true
+
+volumes:
+  neofs_storage:
+
+services:
+  neofs-storage-node:
+    image: nspccdev/neofs-storage:0.43.0
+    hostname: neofs-storage-node
+    container_name: neofs-storage-node
+    restart: "no"
+    ports:
+      - "5005:5005"
+      - "5006:5006"
+    networks:
+      - private_net
+    volumes:
+      - neofs_storage:/storage
+      - ./wallet01.json:/wallet.json
+      - ../multipurpose-wallet/config.yml:/wallets/multipurpose-wallet-config.yml
+      - ../multipurpose-wallet/wallet.json:/wallets/multipurpose-wallet.json
+      - ../neofs-cli:/neofs-cli
+      - ./cli-cfg.yml:/cli-cfg.yml
+      - ./cfg:/etc/neofs/storage
+    stop_signal: SIGKILL
+    command: [ "neofs-node", "--config", "/etc/neofs/storage/config.yml" ]
+    environment:
+      - NEOFS_NODE_WALLET_PATH=./wallet.json
+      - NEOFS_NODE_WALLET_PASSWORD=
+      - NEOFS_NODE_ADDRESSES=neofs-storage-node:5005
+      - NEOFS_GRPC_0_ENDPOINT=0.0.0.0:5005
+      - NEOFS_CONTROL_GRPC_ENDPOINT=0.0.0.0:5006
+    healthcheck:
+      test: ["CMD", "/neofs-cli", "control", "healthcheck", "-c", "/cli-cfg.yml", "--endpoint", "neofs-storage-node:5006"]
+      interval: 5s
+      timeout: 5s
+      retries: 5
+      start_period: 20s
diff --git a/docker-compose-eco-network/NeoFS/sn/local-cli-cfg.yml b/docker-compose-eco-network/NeoFS/sn/local-cli-cfg.yml
new file mode 100644
index 00000000..d310456a
--- /dev/null
+++ b/docker-compose-eco-network/NeoFS/sn/local-cli-cfg.yml
@@ -0,0 +1,2 @@
+wallet: ./NeoFS/sn/wallet01.json
+password: ""
diff --git a/docker-compose-eco-network/NeoFS/sn/wallet01.json b/docker-compose-eco-network/NeoFS/sn/wallet01.json
new file mode 100644
index 00000000..e5b6bb37
--- /dev/null
+++ b/docker-compose-eco-network/NeoFS/sn/wallet01.json
@@ -0,0 +1,32 @@
+{
+    "version":"3.0",
+    "accounts":[
+       {
+          "address":"NejLbQpojKJWec4NQRMBhzsrmCyhXfGJJe",
+          "key":"6PYSS8ccmBcttfcw2YJh8VcNSoeQbQLuJLQ7HoKeYF5roRmGs9LUvmKcWz",
+          "label":"",
+          "contract":{
+             "script":"DCECK7QEHFDWB/+HHex+TNd3g4jg6mhJ2EzL2aqPMuFqgTFBVuezJw==",
+             "parameters":[
+                {
+                   "name":"parameter0",
+                   "type":"Signature"
+                }
+             ],
+             "deployed":false
+          },
+          "lock":false,
+          "extra":null,
+          "isDefault":true
+       }
+    ],
+    "name":null,
+    "scrypt":{
+       "n":16384,
+       "r":8,
+       "p":8
+    },
+    "extra":{
+       "Tokens":null
+    }
+ }
diff --git a/docker-compose-eco-network/cleanNeoFS.sh b/docker-compose-eco-network/cleanNeoFS.sh
new file mode 100755
index 00000000..d4e8146c
--- /dev/null
+++ b/docker-compose-eco-network/cleanNeoFS.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+docker-compose -f NeoFS/chain/docker-compose.yml down
+docker-compose -f NeoFS/ir/docker-compose.yml down
+docker-compose -f NeoFS/sn/docker-compose.yml down
+docker volume rm ir_neofs_chain_inner_ring
+docker volume rm sn_neofs_storage
+rm NeoFS/neofs-contract.tar.gz
+rm -rf NeoFS/neofs-contract
+rm NeoFS/neofs-cli
+rm NeoFS/neofs-adm
+rm NeoFS/neo-go
diff --git a/docker-compose-eco-network/docker-compose.yml b/docker-compose-eco-network/docker-compose.yml
index 6067cbc1..6c056817 100644
--- a/docker-compose-eco-network/docker-compose.yml
+++ b/docker-compose-eco-network/docker-compose.yml
@@ -3,7 +3,7 @@
 # ================================================================================
 networks:
   private_net:
-    driver: bridge
+    external: true
   inside_auto_heal:
     internal: true
 
@@ -216,7 +216,6 @@ services:
 # ================== AUTO REAL ===================================================
 # ================================================================================
 
-
 # ================================================================================
 # ======================= THANKS FOR CREATING ME =================================
 # ================================================================================
diff --git a/docker-compose-eco-network/runDetachedCompose-EcoNodes.sh b/docker-compose-eco-network/runDetachedCompose-EcoNodes.sh
index 77328583..8938c379 100755
--- a/docker-compose-eco-network/runDetachedCompose-EcoNodes.sh
+++ b/docker-compose-eco-network/runDetachedCompose-EcoNodes.sh
@@ -1,4 +1,5 @@
 #!/bin/bash
 echo "RUNNING custom version [4 neo-cli CN + 1RPC watchonly + autoheal]";
+docker network create private_net
 docker compose up -d
 #docker compose up -d eco-neo-csharp-node1-running eco-neo-csharp-node2-running eco-neo-csharp-node3-running eco-neo-csharp-node4-running eco-neo-csharp-noderpc1-running eco-neo-autoheal
\ No newline at end of file
diff --git a/docker-compose-eco-network/startNeoFS.sh b/docker-compose-eco-network/startNeoFS.sh
new file mode 100755
index 00000000..a9e19537
--- /dev/null
+++ b/docker-compose-eco-network/startNeoFS.sh
@@ -0,0 +1,84 @@
+#!/bin/bash
+
+NEO_GO_BINARY_VERSION=v0.106.3
+NEOFS_CLI_BINARY_VERSION=v0.43.0
+NEOFS_ADM_BINARY_VERSION=v0.43.0
+NEOFS_CONTRACTS_VERSION=v0.20.0
+
+NEOFS_MAIN_CHAIN_SERVICE_NAME=neofs-main-chain
+NEOFS_MAIN_CHAIN_RPC_ENDPOINT=http://localhost:5000
+NEOFS_STORAGE_NODE_RPC_ENDPOINT=localhost:5005
+NEOFS_STORAGE_NODE_GRPC_ENDPOINT=neofs-storage-node:5006
+MULTIPURPOSE_WALLET_ADDRESS=NbUgTSFvPmsRxmGeWpuuGeJUoRoi6PErcM
+MULTISIG_ACCOUNT_ADDRESS=NforeidHBjJDK6sGdxiAMRfQwW8UnkwMFm
+NEOFS_INNERRING_SERVICE_NAME=neofs-innerring
+NEOFS_STORAGE_NODE_SERVICE_NAME=neofs-storage-node
+NEOFS_CONTRACT_ADDRESS=NNT3JzjNC5pnkNxCDTqJuUNnrarDGu5pFM
+
+echo "download neofs binaries and contracts"
+
+curl -sSL "https://github.com/nspcc-dev/neo-go/releases/download/$NEO_GO_BINARY_VERSION/neo-go-linux-amd64" -o NeoFS/neo-go
+curl -sSL "https://github.com/nspcc-dev/neofs-node/releases/download/$NEOFS_CLI_BINARY_VERSION/neofs-cli-linux-amd64" -o NeoFS/neofs-cli
+curl -sSL "https://github.com/nspcc-dev/neofs-node/releases/download/$NEOFS_ADM_BINARY_VERSION/neofs-adm-linux-amd64" -o NeoFS/neofs-adm
+curl -sSL "https://github.com/nspcc-dev/neofs-contract/releases/download/$NEOFS_CONTRACTS_VERSION/neofs-contract-$NEOFS_CONTRACTS_VERSION.tar.gz" -o NeoFS/neofs-contract.tar.gz
+mkdir NeoFS/neofs-contract
+tar -xf NeoFS/neofs-contract.tar.gz -C NeoFS/neofs-contract --strip-components 1 
+chmod 755 NeoFS/neofs-cli
+chmod 755 NeoFS/neofs-adm
+chmod 755 NeoFS/neo-go
+
+echo "start $NEOFS_MAIN_CHAIN_SERVICE_NAME service"
+docker-compose -f NeoFS/chain/docker-compose.yml up -d
+until [ "$(docker inspect --format='{{.State.Health.Status}}' $NEOFS_MAIN_CHAIN_SERVICE_NAME)" == "healthy" ]; do
+  echo "Waiting for $NEOFS_MAIN_CHAIN_SERVICE_NAME to become healthy..."
+  sleep 5
+done
+echo "$NEOFS_MAIN_CHAIN_SERVICE_NAME is healthy! keep going..."
+
+echo "deploy neofs contract"
+echo "transfer some money first for the contract deployment"
+docker exec $NEOFS_MAIN_CHAIN_SERVICE_NAME neo-go wallet nep17 transfer --out transfer_tx.json --token 'GAS' --to "$MULTIPURPOSE_WALLET_ADDRESS" --rpc-endpoint "$NEOFS_MAIN_CHAIN_RPC_ENDPOINT" --wallet-config '/wallets/neo-wallet1-config.yml' --from "$MULTISIG_ACCOUNT_ADDRESS" --amount 9000
+docker exec $NEOFS_MAIN_CHAIN_SERVICE_NAME neo-go wallet sign --in transfer_tx.json --out transfer_tx2.json --wallet-config '/wallets/neo-wallet2-config.yml' --address "$MULTISIG_ACCOUNT_ADDRESS"
+docker exec $NEOFS_MAIN_CHAIN_SERVICE_NAME neo-go wallet sign --in transfer_tx2.json --wallet-config '/wallets/neo-wallet3-config.yml' --address "$MULTISIG_ACCOUNT_ADDRESS" --rpc-endpoint  "$NEOFS_MAIN_CHAIN_RPC_ENDPOINT" --await
+echo "and now actually deploy the contract"
+docker exec $NEOFS_MAIN_CHAIN_SERVICE_NAME neo-go contract deploy --manifest '/neofs-contract/neofs/manifest.json' --rpc-endpoint  "$NEOFS_MAIN_CHAIN_RPC_ENDPOINT" --wallet-config '/wallets/multipurpose-wallet-config.yml' --force --timeout '10s' --in '/neofs-contract/neofs/contract.nef' [ true ffffffffffffffffffffffffffffffffffffffff [ 02b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc2 ] [ InnerRingCandidateFee 10000000000 WithdrawFee 10000000000 ] ]
+echo "neofs contract deployed"
+
+echo "start $NEOFS_INNERRING_SERVICE_NAME service"
+docker-compose -f NeoFS/ir/docker-compose.yml up -d
+until [ "$(docker inspect --format='{{.State.Health.Status}}' $NEOFS_INNERRING_SERVICE_NAME)" == "healthy" ]; do
+  echo "Waiting for $NEOFS_INNERRING_SERVICE_NAME to become healthy..."
+  sleep 5
+done
+echo "$NEOFS_INNERRING_SERVICE_NAME is healthy! keep going..."
+
+echo "add some money to neofs storage node wallet"
+./NeoFS/neofs-adm -c ./NeoFS/neofs-adm.yml morph refill-gas --storage-wallet ./NeoFS/sn/wallet01.json --gas 10.0 --alphabet-wallets ./NeoFS/ir
+
+echo "start $NEOFS_STORAGE_NODE_SERVICE_NAME service"
+docker-compose -f NeoFS/sn/docker-compose.yml up -d
+until [ "$(docker inspect --format='{{.State.Health.Status}}' $NEOFS_INNERRING_SERVICE_NAME)" == "healthy" ]; do
+  echo "Waiting for $NEOFS_INNERRING_SERVICE_NAME to become healthy..."
+  sleep 5
+done
+echo "$NEOFS_STORAGE_NODE_SERVICE_NAME is health! keep going..."
+echo "wait a minute until storage node is bootstrapping"
+sleep 60
+echo "tick new epoch to speed up storage node bootstrapping"
+./NeoFS/neofs-adm -c ./NeoFS/neofs-adm.yml morph force-new-epoch --alphabet-wallets ./NeoFS/ir
+until docker exec neofs-storage-node /neofs-cli control healthcheck -c /cli-cfg.yml --endpoint $NEOFS_STORAGE_NODE_GRPC_ENDPOINT | grep -q "Network status: ONLINE"; do
+  echo "Waiting for network status to be ONLINE..."
+  sleep 5
+done
+echo "$NEOFS_STORAGE_NODE_SERVICE_NAME is ONLINE! Lets create containers and objects"
+
+echo "transfer some money to the neofs contract"
+docker exec $NEOFS_MAIN_CHAIN_SERVICE_NAME neo-go wallet nep17 transfer --token 'GAS' --to "$NEOFS_CONTRACT_ADDRESS" --rpc-endpoint "$NEOFS_MAIN_CHAIN_RPC_ENDPOINT" --wallet-config '/wallets/multipurpose-wallet-config.yml' --from "$MULTIPURPOSE_WALLET_ADDRESS" --amount 100 --await --force
+
+echo "create container"
+container_id=$(docker exec neofs-storage-node /neofs-cli --config /wallets/multipurpose-wallet-config.yml container create --rpc-endpoint "$NEOFS_STORAGE_NODE_RPC_ENDPOINT" --wallet /wallets/multipurpose-wallet.json --await --policy 'REP 1' | grep -oP "(?<=container ID: ).*")
+echo "Container ID: $container_id"
+
+echo "upload object"
+docker exec neofs-storage-node /neofs-cli --config /wallets/multipurpose-wallet-config.yml object put --cid "$container_id" --file /wallets/multipurpose-wallet-config.yml --no-progress --timeout '60s' --rpc-endpoint "$NEOFS_STORAGE_NODE_RPC_ENDPOINT" --wallet /wallets/multipurpose-wallet.json
+echo "we are done!"