diff --git a/cmd/neofs-ir/defaults.go b/cmd/neofs-ir/defaults.go index 74926b0c0..7a1f95a1e 100644 --- a/cmd/neofs-ir/defaults.go +++ b/cmd/neofs-ir/defaults.go @@ -47,10 +47,12 @@ func defaultConfiguration(cfg *viper.Viper) { cfg.SetDefault("node.persistent_state.path", ".neofs-ir-state") - cfg.SetDefault("morph.endpoint.client", "") + cfg.SetDefault("morph.endpoint.client", []string{}) + cfg.SetDefault("morph.dial_timeout", 15*time.Second) cfg.SetDefault("morph.validators", []string{}) - cfg.SetDefault("mainnet.endpoint.client", "") + cfg.SetDefault("mainnet.endpoint.client", []string{}) + cfg.SetDefault("mainnet.dial_timeout", 15*time.Second) cfg.SetDefault("wallet.path", "") // inner ring node NEP-6 wallet cfg.SetDefault("wallet.address", "") // account address @@ -64,8 +66,9 @@ func defaultConfiguration(cfg *viper.Viper) { cfg.SetDefault("contracts.proxy", "") cfg.SetDefault("contracts.processing", "") cfg.SetDefault("contracts.reputation", "") + cfg.SetDefault("contracts.subnet", "") + cfg.SetDefault("contracts.proxy", "") - cfg.SetDefault("timers.epoch", "0") cfg.SetDefault("timers.emit", "0") cfg.SetDefault("timers.stop_estimation.mul", 1) cfg.SetDefault("timers.stop_estimation.div", 4) diff --git a/config/example/ir.env b/config/example/ir.env new file mode 100644 index 000000000..30fb21960 --- /dev/null +++ b/config/example/ir.env @@ -0,0 +1,165 @@ +# Logger level: one of "debug", "info" (default), "warn", "error", "dpanic", "panic", "fatal" +NEOFS_IR_LOGGER_LEVEL=info + +# Path to NEP-6 NEO wallet file +NEOFS_IR_WALLET_PATH=/path/to/wallet.json +# Account address in the wallet; ignore to use default address +NEOFS_IR_WALLET_ADDRESS=NUHtW3eM6a4mmFCgyyr4rj4wygsTKB88XX +# Account password in the wallet +NEOFS_IR_WALLET_PASSWORD=secret + +# Run application in single chain environment without mainchain +NEOFS_IR_WITHOUT_MAINNET=false + +# Timeout for RPC client connection to sidechain +NEOFS_IR_MORPH_DIAL_TIMEOUT=5s +# List of websocket RPC endpoints in sidechain +NEOFS_IR_MORPH_ENDPOINT_CLIENT="wss://sidechain1.fs.neo.org:30333/ws wss://sidechain2.fs.neo.org:30333/ws" +# List of hex-encoded 33-byte public keys of sidechain validators to vote for at application startup +NEOFS_IR_MORPH_VALIDATORS="0283120f4c8c1fc1d792af5063d2def9da5fddc90bc1384de7fcfdda33c3860170" + +# Timeout for RPC client connection; ignore if mainchain is disabled +NEOFS_IR_MAINNET_DIAL_TIMEOUT=5s +# List of websocket RPC endpoints in mainchain; ignore if mainchain is disabled +NEOFS_IR_MORPH_ENDPOINT_CLIENT="wss://mainchain1.fs.neo.org:30333/ws wss://mainchain2.fs.neo.org:30333/ws" + +# List of hex-encoded 33-byte public keys that have rights to use the control service +NEOFS_IR_CONTROL_AUTHORIZED_KEYS="035839e45d472a3b7769a2a1bd7d54c4ccd4943c3b40f547870e83a8fcbfb3ce11 028f42cfcb74499d7b15b35d9bff260a1c8d27de4f446a627406a382d8961486d6" +# Endpoint that is listened by the control service; disabled by default +NEOFS_IR_CONTROL_GRPC_ENDPOINT=127.0.0.1:8090 + +# Disable synchronization of sidechain committee and mainchain role management contract; ignore if mainchain is disabled +NEOFS_IR_GOVERNANCE_DISABLE=false + +# Path to application state file +NEOFS_IR_NODE_PERSISTENT_STATE_PATH=.neofs-ir-state + +# Path to UN/LOCODE database file +NEOFS_IR_LOCODE_DB_PATH=/path/to/locode.db + +# Fixed8 value of extra GAS fee for mainchain contract invocation; ignore if notary is enabled in mainchain +NEOFS_IR_FEE_MAIN_CHAIN=50000000 +# Fixed8 value of extra GAS fee for sidechain contract invocation; ignore if notary is enabled in sidechain +NEOFS_IR_FEE_SIDE_CHAIN=200000000 +# Fixed8 value of extra GAS fee for named conatiner registration in container contract; ignore if notary is enabled in sidechain +NEOFS_IR_FEE_NAMED_CONTAINER_REGISTER=2500000000 + +# Number of sidechain blocks between GAS emission cycles; disabled by default +NEOFS_IR_TIMERS_EMIT=240 +# Multiplier in x/y relation of when to stop basic income estimation within the epoch +NEOFS_IR_TIMERS_STOP_ESTIMATION_MUL=1 +# Divider in x/y relation of when to stop basic income estimation within the epoch +NEOFS_IR_TIMERS_STOP_ESTIMATION_DIV=4 +# Multiplier in x/y relation of when to start basic income asset collection within the epoch +NEOFS_IR_TIMERS_COLLECT_BASIC_INCOME_MUL=1 +# Divider in x/y relation of when to start basic income asset collecting within the epoch +NEOFS_IR_TIMERS_COLLECT_BASIC_INCOME_DIV=2 +# Multiplier in x/y relation of when to start basic income asset distribution within the epoch +NEOFS_IR_TIMERS_DISTRIBUTE_BASIC_INCOME_MUL=3 +# Divider in x/y relation of when to start basic income asset distribution within the epoch +NEOFS_IR_TIMERS_DISTRIBUTE_BASIC_INCOME_DIV=4 + +# Fixed8 value of sidechain GAS emitted to all storage nodes once per GAS emission cycle; disabled by default +NEOFS_IR_EMIT_STORAGE_AMOUNT=800000000 +# Fixed8 value of sidechain GAS transferred to account that received a deposit from mainchain +NEOFS_IR_EMIT_MINT_VALUE=20000000 +# LRU cache size of all deposit receivers to avoid double GAS emission +NEOFS_IR_EMIT_MINT_CACHE_SIZE=1000 +# Lifetime of records in LRU cache of all deposit receivers in NeoFS epochs +NEOFS_IR_EMIT_MINT_CACHE_THRESHOLD=1 +# Fixed8 value of inner ring wallet balance threshold when GAS emission for deposit receivers is disabled +NEOFS_IR_EMIT_GAS_BALANCE_THRESHOLD=100000000000 + +# Number of workers to process events from alphabet contract in parallel +NEOFS_IR_WORKERS_ALPHABET=10 +# Number of workers to process events from balance contract in parallel +NEOFS_IR_WORKERS_BALANCE=10 +# Number of workers to process events from container contract in parallel +NEOFS_IR_WORKERS_CONTAINER=10 +# Number of workers to process events from neofs contract in parallel +NEOFS_IR_WORKERS_NEOFS=10 +# Number of workers to process events from netmap contract in parallel +NEOFS_IR_WORKERS_NETMAP=10 +# Number of workers to process events from reputation contract in parallel +NEOFS_IR_WORKERS_REPUTATION=10 +# Number of workers to process events from subnet contract in parallel +NEOFS_IR_WORKERS_SUBNET=10 + +# Timeout for object.Get operation during data audit +NEOFS_IR_AUDIT_TIMEOUT_GET=5s +# Timeout for object.Head operation during data audit +NEOFS_IR_AUDIT_TIMEOUT_HEAD=5s +# Timeout for object.RangeHash operation during data audit +NEOFS_IR_AUDIT_TIMEOUT_RANGEHASH=5s +# Timeout for object.Search operation during data audit +NEOFS_IR_AUDIT_TIMEOUT_SEARCH=10s +# Number of workers to process audit routine in parallel +NEOFS_IR_AUDIT_TASK_EXEC_POOL_SIZE=10 +# Maximum amount of simultaneous audit jobs +NEOFS_IR_AUDIT_TASK_QUEUE_CAPACITY=100 +# Number of workers to process PDP part of data audit in parallel +NEOFS_IR_AUDIT_PDP_PAIRS_POOL_SIZE=10 +# Maximum timeout between object.RangeHash requests to the storage node +NEOFS_IR_AUDIT_PDP_MAX_SLEEP_INTERVAL=5s +# Number of workers to process PoR part of data audit in parallel +NEOFS_IR_AUDIT_POR_POOL_SIZE=10 + +# Duration between internal state update about current list of inner ring nodes +NEOFS_IR_INDEXER_CACHE_TIMEOUT=15s + +# Enable voting for removing stale storage nodes from network map +NEOFS_IR_NETMAP_CLEANER_ENABLED=true +# Number of NeoFS epoch without bootstrap request from storage node before it considered stale +NEOFS_IR_NETMAP_CLEANER_THRESHOLD=3 + +# Address of NeoFS contract in mainchain; ignore if mainchain is disabled +NEOFS_IR_CONTRACTS_NEOFS=ee3dee6d05dc79c24a5b8f6985e10d68b7cacc62 +# Address of processing contract in mainchain; ignore if mainchain is disabled or notary is disabled in mainchain +NEOFS_IR_CONTRACTS_PROCESSING=597f5894867113a41e192801709c02497f611de8 +# Optional: override address of audit contract in sidechain +NEOFS_IR_CONTRACTS_AUDIT=219e37aed2180b87e7fe945dbf97d67125e8d73f +# Optional: override address of balance contract in sidechain +NEOFS_IR_CONTRACTS_BALANCE=d2aa48d14b17b11bc4c68205027884a96706dd16 +# Optional: override address of container contract in sidechain +NEOFS_IR_CONTRACTS_CONTAINER=ed4a7a66fe3f9bfe50f214b49be8f215a3c886b6 +# Optional: override address of neofsid contract in sidechain +NEOFS_IR_CONTRACTS_NEOFSID=9f5866decbc751a099e74c7c7bc89f609201755a +# Optional: override address of netmap contract in sidechain +NEOFS_IR_CONTRACTS_NETMAP=83c600c81d47a1b1b7cf58eb49ae7ee7240dc742 +# Optional: override address of proxy contract in sidechain; ignore if notary is disabled in sidechain +NEOFS_IR_CONTRACTS_PROXY=abc8794bb40a21f2db5f21ae62741eb46c8cad1c +# Optional: override address of reputation contract in sidechain +NEOFS_IR_CONTRACTS_REPUTATION=d793b842ff0c103fe89e385069e82a27602135ff +# Optional: override address of subnet contract in sidechain +NEOFS_IR_CONTRACTS_SUBNET=e9266864d3c562c6e17f2bb9cb1392aaa293d93a +# Optional: override amount of alphabet contracts +NEOFS_IR_CONTRACTS_ALPHABET_AMOUNT=7 +# Optional: override address of az alphabet contract in sidechain +NEOFS_IR_CONTRACTS_ALPHABET_AZ=c1d211fceeb4b1dc76b8e4054d11fdf887e418ea +# Optional: override address of buky alphabet contract in sidechain +NEOFS_IR_CONTRACTS_ALPHABET_BUKY=e2ba789320899658b100f331bdebb74474757920 +# Optional: override address of vedi alphabet contract in sidechain +NEOFS_IR_CONTRACTS_ALPHABET_VEDI=9623c11fd49aa18220458fbaae0396749c669e19 +# Optional: override address of glagoli alphabet contract in sidechain +NEOFS_IR_CONTRACTS_ALPHABET_GLAGOLI=39617441b8e06c55e4fc3ce660be9101b6c1f866 +# Optional: override address of dobro alphabet contract in sidechain +NEOFS_IR_CONTRACTS_ALPHABET_DOBRO=e6122b65d45c8feeb04455d67814394c147ed4d1 +# Optional: override address of yest contract in sidechain +NEOFS_IR_CONTRACTS_ALPHABET_YEST=cdbca5cb5d48a4472923844d0e3ee6328cf86d38 +# Optional: override address of zhivete contract in sidechain +NEOFS_IR_CONTRACTS_ALPHABET_ZHIVETE=f584699bc2ff457d339fb09f16217042c1a42101 + +# Endpoint for application pprof profiling; disabled by default +NEOFS_IR_PROFILER_ADDRESS=127.0.0.1:6060 +# Timeout for profiling HTTP server graceful shutdown +NEOFS_IR_PROFILER_SHUTDOWN_TIMEOUT=30s + +# Endpoint for application prometheus metrics; disabled by default +NEOFS_IR_METRICS_ADDRESS=127.0.0.1:9090 +# Timeout for metrics HTTP server graceful shutdown +NEOFS_IR_METRICS_SHUTDOWN_TIMEOUT=30s + +# Optional: override basic income rate value from network config; applied only in debug mode +NEOFS_IR_SETTLEMENT_BASIC_INCOME_RATE=100 +# Optional: override audit fee value from network config; applied only in debug mode +NEOFS_IR_SETTLEMENT_AUDIT_FEE=100 diff --git a/config/example/ir.yaml b/config/example/ir.yaml new file mode 100644 index 000000000..ddb800ab0 --- /dev/null +++ b/config/example/ir.yaml @@ -0,0 +1,136 @@ +--- + +logger: + level: info # Logger level: one of "debug", "info" (default), "warn", "error", "dpanic", "panic", "fatal" + +wallet: + path: /path/to/wallet.json # Path to NEP-6 NEO wallet file + address: NUHtW3eM6a4mmFCgyyr4rj4wygsTKB88XX # Account address in the wallet; ignore to use default address + password: secret # Account password in the wallet + +without_mainnet: false # Run application in single chain environment without mainchain + +morph: + dial_timeout: 5s # Timeout for RPC client connection to sidechain + endpoint: + client: # List of websocket RPC endpoints in sidechain + - wss://sidechain1.fs.neo.org:30333/ws + - wss://sidechain2.fs.neo.org:30333/ws + validators: # List of hex-encoded 33-byte public keys of sidechain validators to vote for at application startup + - 0283120f4c8c1fc1d792af5063d2def9da5fddc90bc1384de7fcfdda33c3860170 + +mainnet: + dial_timeout: 5s # Timeout for RPC client connection to mainchain; ignore if mainchain is disabled + endpoint: + client: # List of websocket RPC endpoints in mainchain; ignore if mainchain is disabled + - wss://mainchain1.fs.neo.org:30333/ws + - wss://mainchain.fs.neo.org:30333/ws + +control: + authorized_keys: # List of hex-encoded 33-byte public keys that have rights to use the control service + - 035839e45d472a3b7769a2a1bd7d54c4ccd4943c3b40f547870e83a8fcbfb3ce11 + - 028f42cfcb74499d7b15b35d9bff260a1c8d27de4f446a627406a382d8961486d6 + grpc: + endpoint: 127.0.0.1:8090 # Endpoint that is listened by the control service; disabled by default + +governance: + disable: false # Disable synchronization of sidechain committee and mainchain role management contract; ignore if mainchain is disabled + +node: + persistent_state: + path: .neofs-ir-state # Path to application state file + +locode: + db: + path: /path/to/locode.db # Path to UN/LOCODE database file + +fee: + main_chain: 50000000 # Fixed8 value of extra GAS fee for mainchain contract invocation; ignore if notary is enabled in mainchain + side_chain: 200000000 # Fixed8 value of extra GAS fee for sidechain contract invocation; ignore if notary is enabled in sidechain + named_container_register: 2500000000 # Fixed8 value of extra GAS fee for named conatiner registration in container contract; ignore if notary is enabled in sidechain + +timers: + emit: 240 # Number of sidechain blocks between GAS emission cycles; disabled by default + 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 + +emit: + storage: + amount: 800000000 # Fixed8 value of sidechain GAS emitted to all storage nodes once per GAS emission cycle; disabled by default + mint: + value: 20000000 # Fixed8 value of sidechain GAS transferred to account that received a deposit from mainchain + cache_size: 1000 # LRU cache size of all deposit receivers to avoid double GAS emission + threshold: 1 # Lifetime of records in LRU cache of all deposit receivers in NeoFS epochs + gas: + balance_threshold: 100000000000 # Fixed8 value of inner ring wallet balance threshold when GAS emission for deposit receivers is disabled; disabled by default + +workers: + alphabet: 10 # Number of workers to process events from alphabet contract in parallel + balance: 10 # Number of workers to process events from balance contract in parallel + container: 10 # Number of workers to process events from container contract in parallel + neofs: 10 # Number of workers to process events from neofs contracts in parallel + netmap: 10 # Number of workers to process events from netmap contract in parallel + reputation: 10 # Number of workers to process events from reputation contract in parallel + subnet: 10 # Number of workers to process events from subnet contract in parallel + +audit: + timeout: + get: 5s # Timeout for object.Get operation during data audit + head: 5s # Timeout for object.Head operation during data audit + rangehash: 5s # Timeout for object.RangeHash operation during data audit + search: 10s # Timeout for object.Search operation during data audit + task: + exec_pool_size: 10 # Number of workers to process audit routine in parallel + queue_capacity: 100 # Maximum amount of simultaneous audit jobs + pdp: + pairs_pool_size: 10 # Number of workers to process PDP part of data audit in parallel + max_sleep_interval: 5s # Maximum timeout between object.RangeHash requests to the storage node + por: + pool_size: 10 # Number of workers to process PoR part of data audit in parallel + +indexer: + cache_timeout: 15s # Duration between internal state update about current list of inner ring nodes + +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 + +contracts: + neofs: ee3dee6d05dc79c24a5b8f6985e10d68b7cacc62 # Address of NeoFS contract in mainchain; ignore if mainchain is disabled + processing: 597f5894867113a41e192801709c02497f611de8 # Address of processing contract in mainchain; ignore if mainchain is disabled or notary is disabled in mainchain + audit: 219e37aed2180b87e7fe945dbf97d67125e8d73f # Optional: override address of audit contract in sidechain + balance: d2aa48d14b17b11bc4c68205027884a96706dd16 # Optional: override address of balance contract in sidechain + container: ed4a7a66fe3f9bfe50f214b49be8f215a3c886b6 # Optional: override address of container contract in sidechain + neofsid: 9f5866decbc751a099e74c7c7bc89f609201755a # Optional: override address of neofsid contract in sidechain + netmap: 83c600c81d47a1b1b7cf58eb49ae7ee7240dc742 # Optional: override address of netmap contract in sidechain + proxy: abc8794bb40a21f2db5f21ae62741eb46c8cad1c # Optional: override address of proxy contract in sidechain; ignore if notary is disabled in sidechain + reputation: d793b842ff0c103fe89e385069e82a27602135ff # Optional: override address of reputation contract in sidechain + subnet: e9266864d3c562c6e17f2bb9cb1392aaa293d93a # Optional: override address of subnet contract in sidechain + alphabet: + amount: 7 # Optional: override amount of alphabet contracts + az: c1d211fceeb4b1dc76b8e4054d11fdf887e418ea # Optional: override address of az alphabet contract in sidechain + buky: e2ba789320899658b100f331bdebb74474757920 # Optional: override address of buky alphabet contract in sidechain + vedi: 9623c11fd49aa18220458fbaae0396749c669e19 # Optional: override address of vedi alphabet contract in sidechain + glagoli: 39617441b8e06c55e4fc3ce660be9101b6c1f866 # Optional: override address of glagoli alphabet contract in sidechain + dobro: e6122b65d45c8feeb04455d67814394c147ed4d1 # Optional: override address of dobro alphabet contract in sidechain + yest: cdbca5cb5d48a4472923844d0e3ee6328cf86d38 # Optional: override address of yest contract in sidechain + zhivete: f584699bc2ff457d339fb09f16217042c1a42101 # Optional: override address of zhivete contract in sidechain + +profiler: + address: 127.0.0.1:6060 # Endpoint for application pprof profiling; disabled by default + shutdown_timeout: 30s # Timeout for profiling HTTP server graceful shutdown + +metrics: + address: 127.0.0.1:9090 # Endpoint for application prometheus metrics; disabled by default + shutdown_timeout: 30s # Timeout for metrics HTTP server graceful shutdown + +settlement: + basic_income_rate: 100 # Optional: override basic income rate value from network config; applied only in debug mode + audit_fee: 100 # Optional: override audit fee value from network config; applied only in debug mode