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!"