[#1320] English Check

Signed-off-by: Elizaveta Chichindaeva <elizaveta@nspcc.ru>
This commit is contained in:
Elizaveta Chichindaeva 2022-04-21 14:28:05 +03:00 committed by LeL
parent d99800ee93
commit cc7a723d77
182 changed files with 802 additions and 802 deletions

View file

@ -14,7 +14,7 @@
NeoFS Nodes are organized in a peer-to-peer network that takes care of storing NeoFS Nodes are organized in a peer-to-peer network that takes care of storing
and distributing user's data. Any Neo user may participate in the network and and distributing user's data. Any Neo user may participate in the network and
get paid for providing storage resources to other users or store his data in get paid for providing storage resources to other users or store their data in
NeoFS and pay a competitive price for it. NeoFS and pay a competitive price for it.
Users can reliably store object data in the NeoFS network and have a transparent Users can reliably store object data in the NeoFS network and have a transparent
@ -40,7 +40,7 @@ developers to integrate applications without rewriting their code.
# Supported platforms # Supported platforms
For now we only support GNU/Linux on amd64 CPUs with AVX/AVX2 instructions. More Now, we only support GNU/Linux on amd64 CPUs with AVX/AVX2 instructions. More
platforms will be officially supported after release `1.0`. platforms will be officially supported after release `1.0`.
The latest version of neofs-node works with neofs-contract The latest version of neofs-node works with neofs-contract

View file

@ -5,14 +5,14 @@
Admin tool provides an easier way to deploy and maintain private installation Admin tool provides an easier way to deploy and maintain private installation
of NeoFS. Private installation provides a set of N3 consensus nodes, NeoFS of NeoFS. Private installation provides a set of N3 consensus nodes, NeoFS
Alphabet, and Storage nodes. Admin tool generates consensus keys, initializes Alphabet, and Storage nodes. Admin tool generates consensus keys, initializes
side chain, and provides functions to update the network and register new the sidechain, and provides functions to update the network and register new
Storage nodes. Storage nodes.
## Build ## Build
To build binary locally, use `make bin/neofs-adm` command. To build binary locally, use `make bin/neofs-adm` command.
For clean build inside a docker container use `make docker/bin/neofs-adm`. For clean build inside a docker container, use `make docker/bin/neofs-adm`.
Build docker image with `make image-adm`. Build docker image with `make image-adm`.
@ -25,18 +25,18 @@ contracts. Find them in the latest release of
### Config ### Config
Config section provides `init` command that creates configuration file for the Config section provides `init` command that creates a configuration file for
private installation deployment and updates. Config file is optional, all private installation deployment and updates. Config file is optional, all
parameters can be passed by arguments or read from standard input (wallet parameters can be passed by arguments or read from standard input (wallet
passwords). passwords).
Config example: Config example:
```yaml ```yaml
rpc-endpoint: https://address:port # side chain RPC node endpoint rpc-endpoint: https://address:port # sidechain RPC node endpoint
alphabet-wallets: /path # path to consensus node / alphabet wallets storage alphabet-wallets: /path # path to consensus node / alphabet wallets storage
network: network:
max_object_size: 67108864 # max size of single NeoFS object, bytes max_object_size: 67108864 # max size of a single NeoFS object, bytes
epoch_duration: 240 # duration of NeoFS epoch in blocks, consider block generation frequency in side chain epoch_duration: 240 # duration of a NeoFS epoch in blocks, consider block generation frequency in the sidechain
basic_income_rate: 0 # basic income rate, for private consider 0 basic_income_rate: 0 # basic income rate, for private consider 0
fee: fee:
audit: 0 # network audit fee, for private installation consider 0 audit: 0 # network audit fee, for private installation consider 0
@ -61,11 +61,11 @@ credentials: # passwords for consensus node / alphabet wallets
- `generate-alphabet` generates a set of wallets for consensus and - `generate-alphabet` generates a set of wallets for consensus and
Alphabet nodes. Alphabet nodes.
- `init` initializes side chain by deploying smart contracts and - `init` initializes the sidechain by deploying smart contracts and
setting provided NeoFS network configuration. setting provided NeoFS network configuration.
- `generate-storage-wallet` generates wallet for the Storage node that - `generate-storage-wallet` generates a wallet for the Storage node that
is ready for deployment. It also transfers a bit of side chain GAS, so this is ready for deployment. It also transfers a bit of sidechain GAS, so this
wallet can be used for NeoFS bootstrap. wallet can be used for NeoFS bootstrap.
#### Network maintenance #### Network maintenance
@ -73,20 +73,20 @@ credentials: # passwords for consensus node / alphabet wallets
- `force-new-epoch` increments NeoFS epoch number and executes new epoch - `force-new-epoch` increments NeoFS epoch number and executes new epoch
handlers in NeoFS nodes. handlers in NeoFS nodes.
- `refill-gas` transfers side chain GAS to the specified wallet. - `refill-gas` transfers sidechain GAS to the specified wallet.
- `update-contracts` updates contracts to a new version. - `update-contracts` updates contracts to a new version.
#### Container migration #### Container migration
If the network has to be redeployed, these commands will migrate all container meta If a network has to be redeployed, these commands will migrate all container meta
info. These commands **do not migrate actual objects**. info. These commands **do not migrate actual objects**.
- `dump-containers` saves all containers and metadata registered in the container - `dump-containers` saves all containers and metadata registered in the container
contract to a file. contract to a file.
- `restore-containers` restores previously saved containers by their repeated registration in - `restore-containers` restores previously saved containers by their repeated registration in
container contract. the container contract.
#### Network info #### Network info

View file

@ -1,6 +1,6 @@
# Step-by-step private NeoFS deployment # Step-by-step private NeoFS deployment
This is a short guide on how to deploy private NeoFS storage network on bare This is a short guide on how to deploy a private NeoFS storage network on bare
metal without docker images. This guide does not cover details on how to start metal without docker images. This guide does not cover details on how to start
consensus, Alphabet, or Storage nodes. This guide covers only `neofs-adm` consensus, Alphabet, or Storage nodes. This guide covers only `neofs-adm`
related configuration details. related configuration details.
@ -14,13 +14,13 @@ To follow this guide you need:
## Step 1: Prepare network configuration ## Step 1: Prepare network configuration
To start the network, you need a set of consensus nodes, the same number of To start a network, you need a set of consensus nodes, the same number of
Alphabet nodes and any number of Storage nodes. While the number of Storage Alphabet nodes and any number of Storage nodes. While the number of Storage
nodes can be scaled almost infinitely, the number of consensus and Alphabet nodes can be scaled almost infinitely, the number of consensus and Alphabet
nodes can't be changed so easily right now. Consider this before going any further. nodes can't be changed so easily right now. Consider this before going any further.
It is easier to use`neofs-adm` with predefined configuration. First, create It is easier to use`neofs-adm` with a predefined configuration. First, create
network configuration file. In this example, there is going to be only one a network configuration file. In this example, there is going to be only one
consensus / Alphabet node in the network. consensus / Alphabet node in the network.
``` ```
@ -43,7 +43,7 @@ credentials:
az: hunter2 az: hunter2
``` ```
For private installation it is recommended to set all **fees** and **basic For private installation, it is recommended to set all **fees** and **basic
income rate** to 0. income rate** to 0.
As for **epoch duration**, consider consensus node block generation frequency. As for **epoch duration**, consider consensus node block generation frequency.
@ -63,7 +63,7 @@ alphabet-wallets: /home/user/deploy/alphabet-wallets
wallet[0]: hunter2 wallet[0]: hunter2
``` ```
Do not lose wallet files and network config. Store it in encrypted backed up Do not lose wallet files and network config. Store it in an encrypted backed up
storage. storage.
## Step 2: Launch consensus nodes ## Step 2: Launch consensus nodes
@ -72,7 +72,7 @@ Configure blockchain nodes with the generated wallets from the previous step.
Config examples can be found in Config examples can be found in
[neo-go repository](https://github.com/nspcc-dev/neo-go/tree/master/config). [neo-go repository](https://github.com/nspcc-dev/neo-go/tree/master/config).
Gather public keys from **all** generated wallets. We are interested in first Gather public keys from **all** generated wallets. We are interested in the first
`simple signature contract` public key. `simple signature contract` public key.
``` ```
@ -90,7 +90,7 @@ NiMKabp3ddi3xShmLAXhTfbnuWb4cSJT6E (1 out of 1 multisig contract):
Put the list of public keys into `ProtocolConfiguration.StandbyCommittee` Put the list of public keys into `ProtocolConfiguration.StandbyCommittee`
section. Specify the wallet path and the password in `ApplicationConfiguration.P2PNotary` section. Specify the wallet path and the password in `ApplicationConfiguration.P2PNotary`
and `ApplicationConfiguration.UnlockWallet` sections. If config includes and `ApplicationConfiguration.UnlockWallet` sections. If config includes
`ProtocolConfiguration.NativeActivations` section, then add notary `ProtocolConfiguration.NativeActivations` section, add notary
contract `Notary: [0]`. contract `Notary: [0]`.
```yaml ```yaml
@ -110,15 +110,15 @@ ApplicationConfiguration:
Password: "hunter2" Password: "hunter2"
``` ```
Then, launch consensus node. They should connect to each other and start Then, launch consensus nodes. They should connect to each other and start
producing blocks in consensus. You might want to deploy additional RPC producing blocks in consensus. You might want to deploy additional RPC
nodes at this stage because Storage nodes should be connected to the chain too. nodes at this stage because Storage nodes should be connected to the chain too.
It is not recommended to use consensus node as an RPC node due to security policies It is not recommended to use a consensus node as an RPC node due to security policies
and possible overload issues. and possible overload issues.
## Step 3: Initialize side chain ## Step 3: Initialize sidechain
Use archive with compiled NeoFS contracts to initialize side chain. Use archive with compiled NeoFS contracts to initialize the sidechain.
``` ```
$ tar -xzvf neofs-contract-v0.11.0.tar.gz $ tar -xzvf neofs-contract-v0.11.0.tar.gz
@ -154,7 +154,7 @@ Waiting for transactions to persist...
## Step 4: Launch Alphabet nodes ## Step 4: Launch Alphabet nodes
Configure Alphabet nodes with the wallets generated in step 1. For Configure Alphabet nodes with the wallets generated in step 1. For
`morph.validators` use list of public keys from `morph.validators` use a list of public keys from
`ProtocolConfiguration.StandbyCommittee`. `ProtocolConfiguration.StandbyCommittee`.
```yaml ```yaml
@ -174,7 +174,7 @@ contracts:
## Step 4: Launch Storage node ## Step 4: Launch Storage node
Generate a new wallet for Storage node. Generate a new wallet for a Storage node.
``` ```
$ neofs-adm -c foo.network.yml morph generate-storage-wallet --storage-wallet ./sn01.json --initial-gas 10.0 $ neofs-adm -c foo.network.yml morph generate-storage-wallet --storage-wallet ./sn01.json --initial-gas 10.0
@ -186,7 +186,7 @@ Ngr7p8Z9S22XDH6VkUG9oXobv8zZRAWwwv (simple signature contract):
0355eccb72cd46f09a3e5237eaa0f4949cceb5ecfa5a225bd3bb9fd021c4d75b85 0355eccb72cd46f09a3e5237eaa0f4949cceb5ecfa5a225bd3bb9fd021c4d75b85
``` ```
Configure Storage node to use this wallet. Configure the Storage node to use this wallet.
``` ```
node: node:
@ -196,7 +196,7 @@ node:
password: "foobar" password: "foobar"
``` ```
Storage node will be included in the network map in next NeoFS epoch. To The storage node will be included in the network map in the next NeoFS epoch. To
speed up this process, you can increment epoch counter immediately. speed up this process, you can increment epoch counter immediately.
``` ```
@ -207,5 +207,5 @@ Waiting for transactions to persist...
--- ---
After that NeoFS Storage is ready to work. You can access it directly or After that, NeoFS Storage is ready to work. You can access it directly or
with protocol gates. with protocol gates.

View file

@ -1,13 +1,13 @@
# NeoFS subnetwork creation # NeoFS subnetwork creation
This is a short guide on how to create NeoFS subnetworks. This guide This is a short guide on how to create NeoFS subnetworks. This guide
considers that side chain and inner ring (alphabet nodes) have already considers that the sidechain and the inner ring (alphabet nodes) have already been
been deployed and side chain contains deployed `subnet` contract. deployed and the sidechain contains a deployed `subnet` contract.
## Prerequisites ## Prerequisites
To follow this guide you need: To follow this guide, you need:
- neo-go side chain RPC endpoint; - neo-go sidechain RPC endpoint;
- latest released version of [neofs-adm](https://github.com/nspcc-dev/neofs-node/releases); - latest released version of [neofs-adm](https://github.com/nspcc-dev/neofs-node/releases);
- wallet with NeoFS account. - wallet with NeoFS account.
@ -21,13 +21,13 @@ $ neofs-adm morph subnet create \
Create subnet request sent successfully. ID: 4223489767. Create subnet request sent successfully. ID: 4223489767.
``` ```
**NOTE:** use `--notary` only in notary-enabled environmental. You need to **NOTE:** use `--notary` only in a notary-enabled environment. You need to
have sufficient notary deposit (not expired with enough GAS balance). This have a sufficient notary deposit (not expired, with enough GAS balance). This
is the only one command that requires alphabet signature and, therefore, is the only command that requires an alphabet signature and, therefore,
the only one command that needs `--notary` flag. Your subnet ID will differ the only command that needs `--notary` flag. Your subnet ID will differ
from the example. from the example.
Default account in the wallet that was passed with `-w` flag is the owner The default account in the wallet that has been passed with `-w` flag is the owner
of the just created subnetwork. of the just created subnetwork.
You can check if your subnetwork was created successfully: You can check if your subnetwork was created successfully:

View file

@ -1,24 +1,24 @@
# Managing Subnetworks # Managing Subnetworks
This is a short guide on how to manage NeoFS subnetworks. This guide This is a short guide on how to manage NeoFS subnetworks. This guide
considers that side chain and inner ring (alphabet nodes) have already considers that the sidechain and the inner ring (alphabet nodes) have already been
been deployed and side chain contains deployed `subnet` contract. deployed, and the sidechain contains a deployed `subnet` contract.
## Prerequisites ## Prerequisites
- neo-go side chain RPC endpoint; - neo-go sidechain RPC endpoint;
- latest released version of [neofs-adm](https://github.com/nspcc-dev/neofs-node/releases); - latest released version of [neofs-adm](https://github.com/nspcc-dev/neofs-node/releases);
- [created](subnetwork-creation.md) subnetwork; - [created](subnetwork-creation.md) subnetwork;
- wallet with account that owns the subnetwork; - wallet with the account that owns the subnetwork;
- public key of the Storage Node; - public key of the Storage Node;
- public keys of the node and client administrators; - public keys of the node and client administrators;
- owner IDs of the NeoFS users. - owner IDs of the NeoFS users.
## Add node administrator ## Add node administrator
Node administrators are the accounts that can manage (add and delete nodes) Node administrators are accounts that can manage (add and delete nodes)
whitelist of the nodes that could be included to the subnetwork. Only subnet the whitelist of the nodes which can be included to a subnetwork. Only the subnet
owner is allowed to add and remove node administrators from subnetwork. owner is allowed to add and remove node administrators from the subnetwork.
```shell ```shell
$ neofs-adm morph subnet admin add \ $ neofs-adm morph subnet admin add \
@ -33,7 +33,7 @@ Add admin request sent successfully.
Adding a node to a subnetwork means that the node becomes able to service Adding a node to a subnetwork means that the node becomes able to service
containers that have been created in that subnetwork. Addition only changes containers that have been created in that subnetwork. Addition only changes
list of the allowed nodes. Node is not required to be bootstrapped at the the list of the allowed nodes. Node is not required to be bootstrapped at the
moment of its inclusion. moment of its inclusion.
```shell ```shell
@ -45,14 +45,14 @@ $ neofs-adm morph subnet node add \
Add node request sent successfully. Add node request sent successfully.
``` ```
**NOTE:** owner of the subnetwork is also allowed to add nodes. **NOTE:** the owner of the subnetwork is also allowed to add nodes.
## Add client administrator ## Add client administrator
Client administrators are the accounts that can manage (add and delete Client administrators are accounts that can manage (add and delete
nodes) whitelist of the clients that can creates containers in the nodes) the whitelist of the clients that can create containers in the
subnetwork. Only subnet owner is allowed to add and remove client subnetwork. Only the subnet owner is allowed to add and remove client
administrators from subnetwork. administrators from the subnetwork.
```shell ```shell
$ neofs-adm morph subnet admin add \ $ neofs-adm morph subnet admin add \
@ -65,8 +65,8 @@ $ neofs-adm morph subnet admin add \
Add admin request sent successfully. Add admin request sent successfully.
``` ```
**NOTE:** you do not need to create group explicitly, it would be created **NOTE:** you do not need to create a group explicitly, it will be created
right after the first client admin has been added. Group ID is 4-byte right after the first client admin is added. Group ID is a 4-byte
positive integer number. positive integer number.
## Add client ## Add client
@ -81,17 +81,17 @@ $ neofs-adm morph subnet client add \
Add client request sent successfully. Add client request sent successfully.
``` ```
**NOTE:** owner of the subnetwork is also allowed to add clients. This is **NOTE:** the owner of the subnetwork is also allowed to add clients. This is
the only one command that accepts `ownerID`, not the public key. the only one command that accepts `ownerID`, not the public key.
Administrator can manage only his group (a group where that administrator Administrator can manage only their group (a group where that administrator
has been added by subnet owner). has been added by the subnet owner).
# Bootstrapping Storage Node # Bootstrapping Storage Node
After subnetwork [creation](subnetwork-creation.md) and inclusion node to it, the After a subnetwork [is created](subnetwork-creation.md) and a node is included into it, the
node could be bootstrapped and service subnetwork containers. node could be bootstrapped and service subnetwork containers.
For bootstrapping you need to specify ID of the subnetwork in the node's For bootstrapping, you need to specify the ID of the subnetwork in the node's
configuration: configuration:
```yaml ```yaml
@ -108,7 +108,7 @@ node:
**NOTE:** specifying subnetwork that is denied for the node is not an error: **NOTE:** specifying subnetwork that is denied for the node is not an error:
that configuration value would be ignored. You do not need to specify zero that configuration value would be ignored. You do not need to specify zero
(with 0 ID) subnetwork: its inclusion is implicit. On the contrary, to exclude (with 0 ID) subnetwork: its inclusion is implicit. On the contrary, to exclude
node from the default zero subnetwork you need to specify it explicitly: a node from the default zero subnetwork, you need to specify it explicitly:
```yaml ```yaml
... ...
@ -122,11 +122,11 @@ node:
# Creating container in non-zero subnetwork # Creating container in non-zero subnetwork
Creating containers without using `--subnet` flag is equivalent to the Creating containers without using `--subnet` flag is equivalent to
creating container in the zero subnetwork. creating container in the zero subnetwork.
To create container in a private network your wallet must have been added to To create a container in a private network, your wallet must be added to
the client whitelist by client admins or subnet owners: the client whitelist by the client admins or the subnet owners:
```shell ```shell
$ neofs-cli container create \ $ neofs-cli container create \

View file

@ -31,12 +31,12 @@ type cache struct {
type initializeContext struct { type initializeContext struct {
clientContext clientContext
cache cache
// CommitteeAcc is used for retrieving committee address and verification script. // CommitteeAcc is used for retrieving the committee address and the verification script.
CommitteeAcc *wallet.Account CommitteeAcc *wallet.Account
// ConsensusAcc is used for retrieving committee address and verification script. // ConsensusAcc is used for retrieving the committee address and the verification script.
ConsensusAcc *wallet.Account ConsensusAcc *wallet.Account
Wallets []*wallet.Wallet Wallets []*wallet.Wallet
// ContractWallet is a wallet for providing contract group signature. // ContractWallet is a wallet for providing the contract group signature.
ContractWallet *wallet.Wallet ContractWallet *wallet.Wallet
// Accounts contains simple signature accounts in the same order as in Wallets. // Accounts contains simple signature accounts in the same order as in Wallets.
Accounts []*wallet.Account Accounts []*wallet.Account

View file

@ -18,7 +18,7 @@ import (
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem" "github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
) )
// initialAlphabetNEOAmount represents total amount of GAS distributed between alphabet nodes. // initialAlphabetNEOAmount represents the total amount of GAS distributed between alphabet nodes.
const initialAlphabetNEOAmount = native.NEOTotalSupply const initialAlphabetNEOAmount = native.NEOTotalSupply
func (c *initializeContext) registerCandidates() error { func (c *initializeContext) registerCandidates() error {

View file

@ -12,9 +12,9 @@ import (
const ( const (
gasInitialTotalSupply = 30000000 * native.GASFactor gasInitialTotalSupply = 30000000 * native.GASFactor
// initialAlphabetGASAmount represents amount of GAS given to each alphabet node. // initialAlphabetGASAmount represents the amount of GAS given to each alphabet node.
initialAlphabetGASAmount = 10_000 * native.GASFactor initialAlphabetGASAmount = 10_000 * native.GASFactor
// initialProxyGASAmount represents amount of GAS given to proxy contract. // initialProxyGASAmount represents the amount of GAS given to a proxy contract.
initialProxyGASAmount = 50_000 * native.GASFactor initialProxyGASAmount = 50_000 * native.GASFactor
) )

View file

@ -8,7 +8,7 @@ import (
) )
// StringifySubnetClientGroupID returns string representation of SubnetClientGroupID using MarshalText. // StringifySubnetClientGroupID returns string representation of SubnetClientGroupID using MarshalText.
// Returns string with message on error. // Returns a string with a message on error.
func StringifySubnetClientGroupID(id *SubnetClientGroupID) string { func StringifySubnetClientGroupID(id *SubnetClientGroupID) string {
text, err := id.MarshalText() text, err := id.MarshalText()
if err != nil { if err != nil {
@ -21,14 +21,14 @@ func StringifySubnetClientGroupID(id *SubnetClientGroupID) string {
// MarshalText encodes SubnetClientGroupID into text format according to NeoFS API V2 protocol: // MarshalText encodes SubnetClientGroupID into text format according to NeoFS API V2 protocol:
// value in base-10 integer string format. // value in base-10 integer string format.
// //
// Implements encoding.TextMarshaler. // It implements encoding.TextMarshaler.
func (x *SubnetClientGroupID) MarshalText() ([]byte, error) { func (x *SubnetClientGroupID) MarshalText() ([]byte, error) {
num := x.GetValue() // NPE safe, returns zero on nil num := x.GetValue() // NPE safe, returns zero on nil
return []byte(strconv.FormatUint(uint64(num), 10)), nil return []byte(strconv.FormatUint(uint64(num), 10)), nil
} }
// UnmarshalText decodes SubnetID from the text according to NeoFS API V2 protocol: // UnmarshalText decodes the SubnetID from the text according to NeoFS API V2 protocol:
// should be base-10 integer string format with bitsize = 32. // should be base-10 integer string format with bitsize = 32.
// //
// Returns strconv.ErrRange if integer overflows uint32. // Returns strconv.ErrRange if integer overflows uint32.
@ -47,13 +47,13 @@ func (x *SubnetClientGroupID) UnmarshalText(txt []byte) error {
return nil return nil
} }
// Marshal encodes SubnetClientGroupID into a binary format of NeoFS API V2 protocol // Marshal encodes the SubnetClientGroupID into a binary format of NeoFS API V2 protocol
// (Protocol Buffers with direct field order). // (Protocol Buffers with direct field order).
func (x *SubnetClientGroupID) Marshal() ([]byte, error) { func (x *SubnetClientGroupID) Marshal() ([]byte, error) {
return proto.Marshal(x) return proto.Marshal(x)
} }
// Unmarshal decodes SubnetClientGroupID from NeoFS API V2 binary format (see Marshal). Must not be called on nil. // Unmarshal decodes the SubnetClientGroupID from NeoFS API V2 binary format (see Marshal). Must not be called on nil.
func (x *SubnetClientGroupID) Unmarshal(data []byte) error { func (x *SubnetClientGroupID) Unmarshal(data []byte) error {
return proto.Unmarshal(data, x) return proto.Unmarshal(data, x)
} }

View file

@ -25,19 +25,19 @@ type BalanceOfPrm struct {
client.PrmBalanceGet client.PrmBalanceGet
} }
// BalanceOfRes groups resulting values of BalanceOf operation. // BalanceOfRes groups the resulting values of BalanceOf operation.
type BalanceOfRes struct { type BalanceOfRes struct {
cliRes *client.ResBalanceGet cliRes *client.ResBalanceGet
} }
// Balance returns current balance. // Balance returns the current balance.
func (x BalanceOfRes) Balance() *accounting.Decimal { func (x BalanceOfRes) Balance() *accounting.Decimal {
return x.cliRes.Amount() return x.cliRes.Amount()
} }
// BalanceOf requests current balance of NeoFS user. // BalanceOf requests the current balance of a NeoFS user.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
func BalanceOf(prm BalanceOfPrm) (res BalanceOfRes, err error) { func BalanceOf(prm BalanceOfPrm) (res BalanceOfRes, err error) {
res.cliRes, err = prm.cli.BalanceGet(context.Background(), prm.PrmBalanceGet) res.cliRes, err = prm.cli.BalanceGet(context.Background(), prm.PrmBalanceGet)
@ -50,7 +50,7 @@ type ListContainersPrm struct {
client.PrmContainerList client.PrmContainerList
} }
// ListContainersRes groups resulting values of ListContainers operation. // ListContainersRes groups the resulting values of ListContainers operation.
type ListContainersRes struct { type ListContainersRes struct {
cliRes *client.ResContainerList cliRes *client.ResContainerList
} }
@ -60,9 +60,9 @@ func (x ListContainersRes) IDList() []cid.ID {
return x.cliRes.Containers() return x.cliRes.Containers()
} }
// ListContainers requests list of NeoFS user's containers. // ListContainers requests a list of NeoFS user's containers.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
func ListContainers(prm ListContainersPrm) (res ListContainersRes, err error) { func ListContainers(prm ListContainersPrm) (res ListContainersRes, err error) {
res.cliRes, err = prm.cli.ContainerList(context.Background(), prm.PrmContainerList) res.cliRes, err = prm.cli.ContainerList(context.Background(), prm.PrmContainerList)
@ -75,7 +75,7 @@ type PutContainerPrm struct {
client.PrmContainerPut client.PrmContainerPut
} }
// PutContainerRes groups resulting values of PutContainer operation. // PutContainerRes groups the resulting values of PutContainer operation.
type PutContainerRes struct { type PutContainerRes struct {
cliRes *client.ResContainerPut cliRes *client.ResContainerPut
} }
@ -85,14 +85,14 @@ func (x PutContainerRes) ID() *cid.ID {
return x.cliRes.ID() return x.cliRes.ID()
} }
// PutContainer sends request to save container in NeoFS. // PutContainer sends a request to save the container in NeoFS.
// //
// Operation is asynchronous and no guaranteed even in the absence of errors. // Operation is asynchronous and not guaranteed even in the absence of errors.
// The required time is also not predictable. // The required time is also not predictable.
// //
// Success can be verified by reading by identifier. // Success can be verified by reading by identifier.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
func PutContainer(prm PutContainerPrm) (res PutContainerRes, err error) { func PutContainer(prm PutContainerPrm) (res PutContainerRes, err error) {
res.cliRes, err = prm.cli.ContainerPut(context.Background(), prm.PrmContainerPut) res.cliRes, err = prm.cli.ContainerPut(context.Background(), prm.PrmContainerPut)
@ -110,7 +110,7 @@ func (x *GetContainerPrm) SetContainer(id cid.ID) {
x.cliPrm.SetContainer(id) x.cliPrm.SetContainer(id)
} }
// GetContainerRes groups resulting values of GetContainer operation. // GetContainerRes groups the resulting values of GetContainer operation.
type GetContainerRes struct { type GetContainerRes struct {
cliRes *client.ResContainerGet cliRes *client.ResContainerGet
} }
@ -120,9 +120,9 @@ func (x GetContainerRes) Container() *container.Container {
return x.cliRes.Container() return x.cliRes.Container()
} }
// GetContainer reads container from NeoFS by ID. // GetContainer reads a container from NeoFS by ID.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
func GetContainer(prm GetContainerPrm) (res GetContainerRes, err error) { func GetContainer(prm GetContainerPrm) (res GetContainerRes, err error) {
res.cliRes, err = prm.cli.ContainerGet(context.Background(), prm.cliPrm) res.cliRes, err = prm.cli.ContainerGet(context.Background(), prm.cliPrm)
@ -135,17 +135,17 @@ type DeleteContainerPrm struct {
client.PrmContainerDelete client.PrmContainerDelete
} }
// DeleteContainerRes groups resulting values of DeleteContainer operation. // DeleteContainerRes groups the resulting values of DeleteContainer operation.
type DeleteContainerRes struct{} type DeleteContainerRes struct{}
// DeleteContainer sends request to remove container from NeoFS by ID. // DeleteContainer sends a request to remove a container from NeoFS by ID.
// //
// Operation is asynchronous and no guaranteed even in the absence of errors. // Operation is asynchronous and not guaranteed even in the absence of errors.
// The required time is also not predictable. // The required time is also not predictable.
// //
// Success can be verified by reading by identifier. // Success can be verified by reading by identifier.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
func DeleteContainer(prm DeleteContainerPrm) (res DeleteContainerRes, err error) { func DeleteContainer(prm DeleteContainerPrm) (res DeleteContainerRes, err error) {
_, err = prm.cli.ContainerDelete(context.Background(), prm.PrmContainerDelete) _, err = prm.cli.ContainerDelete(context.Background(), prm.PrmContainerDelete)
@ -158,7 +158,7 @@ type EACLPrm struct {
client.PrmContainerEACL client.PrmContainerEACL
} }
// EACLRes groups resulting values of EACL operation. // EACLRes groups the resulting values of EACL operation.
type EACLRes struct { type EACLRes struct {
cliRes *client.ResContainerEACL cliRes *client.ResContainerEACL
} }
@ -170,7 +170,7 @@ func (x EACLRes) EACL() *eacl.Table {
// EACL reads eACL table from NeoFS by container ID. // EACL reads eACL table from NeoFS by container ID.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
func EACL(prm EACLPrm) (res EACLRes, err error) { func EACL(prm EACLPrm) (res EACLRes, err error) {
res.cliRes, err = prm.cli.ContainerEACL(context.Background(), prm.PrmContainerEACL) res.cliRes, err = prm.cli.ContainerEACL(context.Background(), prm.PrmContainerEACL)
@ -183,17 +183,17 @@ type SetEACLPrm struct {
client.PrmContainerSetEACL client.PrmContainerSetEACL
} }
// SetEACLRes groups resulting values of SetEACL operation. // SetEACLRes groups the resulting values of SetEACL operation.
type SetEACLRes struct{} type SetEACLRes struct{}
// SetEACL requests to save eACL table in NeoFS. // SetEACL requests to save an eACL table in NeoFS.
// //
// Operation is asynchronous and no guaranteed even in the absence of errors. // Operation is asynchronous and no guaranteed even in the absence of errors.
// The required time is also not predictable. // The required time is also not predictable.
// //
// Success can be verified by reading by container identifier. // Success can be verified by reading by container identifier.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
func SetEACL(prm SetEACLPrm) (res SetEACLRes, err error) { func SetEACL(prm SetEACLPrm) (res SetEACLRes, err error) {
_, err = prm.cli.ContainerSetEACL(context.Background(), prm.PrmContainerSetEACL) _, err = prm.cli.ContainerSetEACL(context.Background(), prm.PrmContainerSetEACL)
@ -206,7 +206,7 @@ type NetworkInfoPrm struct {
client.PrmNetworkInfo client.PrmNetworkInfo
} }
// NetworkInfoRes groups resulting values of NetworkInfo operation. // NetworkInfoRes groups the resulting values of NetworkInfo operation.
type NetworkInfoRes struct { type NetworkInfoRes struct {
cliRes *client.ResNetworkInfo cliRes *client.ResNetworkInfo
} }
@ -218,7 +218,7 @@ func (x NetworkInfoRes) NetworkInfo() *netmap.NetworkInfo {
// NetworkInfo reads information about the NeoFS network. // NetworkInfo reads information about the NeoFS network.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
func NetworkInfo(prm NetworkInfoPrm) (res NetworkInfoRes, err error) { func NetworkInfo(prm NetworkInfoPrm) (res NetworkInfoRes, err error) {
res.cliRes, err = prm.cli.NetworkInfo(context.Background(), prm.PrmNetworkInfo) res.cliRes, err = prm.cli.NetworkInfo(context.Background(), prm.PrmNetworkInfo)
@ -231,7 +231,7 @@ type NodeInfoPrm struct {
client.PrmEndpointInfo client.PrmEndpointInfo
} }
// NodeInfoRes groups resulting values of NodeInfo operation. // NodeInfoRes groups the resulting values of NodeInfo operation.
type NodeInfoRes struct { type NodeInfoRes struct {
cliRes *client.ResEndpointInfo cliRes *client.ResEndpointInfo
} }
@ -241,14 +241,14 @@ func (x NodeInfoRes) NodeInfo() *netmap.NodeInfo {
return x.cliRes.NodeInfo() return x.cliRes.NodeInfo()
} }
// LatestVersion returns latest NeoFS API version in use. // LatestVersion returns the latest NeoFS API version in use.
func (x NodeInfoRes) LatestVersion() *version.Version { func (x NodeInfoRes) LatestVersion() *version.Version {
return x.cliRes.LatestVersion() return x.cliRes.LatestVersion()
} }
// NodeInfo requests information about the remote server from NeoFS netmap. // NodeInfo requests information about the remote server from NeoFS netmap.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
func NodeInfo(prm NodeInfoPrm) (res NodeInfoRes, err error) { func NodeInfo(prm NodeInfoPrm) (res NodeInfoRes, err error) {
res.cliRes, err = prm.cli.EndpointInfo(context.Background(), prm.PrmEndpointInfo) res.cliRes, err = prm.cli.EndpointInfo(context.Background(), prm.PrmEndpointInfo)
@ -261,7 +261,7 @@ type CreateSessionPrm struct {
client.PrmSessionCreate client.PrmSessionCreate
} }
// CreateSessionRes groups resulting values of CreateSession operation. // CreateSessionRes groups the resulting values of CreateSession operation.
type CreateSessionRes struct { type CreateSessionRes struct {
cliRes *client.ResSessionCreate cliRes *client.ResSessionCreate
} }
@ -276,9 +276,9 @@ func (x CreateSessionRes) SessionKey() []byte {
return x.cliRes.PublicKey() return x.cliRes.PublicKey()
} }
// CreateSession opens new unlimited session with the remote node. // CreateSession opens a new unlimited session with the remote node.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
func CreateSession(prm CreateSessionPrm) (res CreateSessionRes, err error) { func CreateSession(prm CreateSessionPrm) (res CreateSessionRes, err error) {
res.cliRes, err = prm.cli.SessionCreate(context.Background(), prm.PrmSessionCreate) res.cliRes, err = prm.cli.SessionCreate(context.Background(), prm.PrmSessionCreate)
@ -304,7 +304,7 @@ func (x *PutObjectPrm) SetPayloadReader(rdr io.Reader) {
x.rdr = rdr x.rdr = rdr
} }
// PutObjectRes groups resulting values of PutObject operation. // PutObjectRes groups the resulting values of PutObject operation.
type PutObjectRes struct { type PutObjectRes struct {
id *oidSDK.ID id *oidSDK.ID
} }
@ -316,7 +316,7 @@ func (x PutObjectRes) ID() *oidSDK.ID {
// PutObject saves the object in NeoFS network. // PutObject saves the object in NeoFS network.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
func PutObject(prm PutObjectPrm) (*PutObjectRes, error) { func PutObject(prm PutObjectPrm) (*PutObjectRes, error) {
var putPrm client.PrmObjectPutInit var putPrm client.PrmObjectPutInit
@ -404,19 +404,19 @@ type DeleteObjectPrm struct {
objectAddressPrm objectAddressPrm
} }
// DeleteObjectRes groups resulting values of DeleteObject operation. // DeleteObjectRes groups the resulting values of DeleteObject operation.
type DeleteObjectRes struct { type DeleteObjectRes struct {
addrTombstone *addressSDK.Address addrTombstone *addressSDK.Address
} }
// TombstoneAddress returns address of the created object with tombstone. // TombstoneAddress returns the address of the created object with tombstone.
func (x DeleteObjectRes) TombstoneAddress() *addressSDK.Address { func (x DeleteObjectRes) TombstoneAddress() *addressSDK.Address {
return x.addrTombstone return x.addrTombstone
} }
// DeleteObject marks object to be removed from NeoFS through tombstone placement. // DeleteObject marks an object to be removed from NeoFS through tombstone placement.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
func DeleteObject(prm DeleteObjectPrm) (*DeleteObjectRes, error) { func DeleteObject(prm DeleteObjectPrm) (*DeleteObjectRes, error) {
var delPrm client.PrmObjectDelete var delPrm client.PrmObjectDelete
@ -467,27 +467,27 @@ type GetObjectPrm struct {
headerCallback func(*object.Object) headerCallback func(*object.Object)
} }
// SetHeaderCallback sets callback which is called on the object after the header is received, // SetHeaderCallback sets callback which is called on the object after the header is received
// but before the payload is written. // but before the payload is written.
func (p *GetObjectPrm) SetHeaderCallback(f func(*object.Object)) { func (p *GetObjectPrm) SetHeaderCallback(f func(*object.Object)) {
p.headerCallback = f p.headerCallback = f
} }
// GetObjectRes groups resulting values of GetObject operation. // GetObjectRes groups the resulting values of GetObject operation.
type GetObjectRes struct { type GetObjectRes struct {
hdr *object.Object hdr *object.Object
} }
// Header returns header of the request object. // Header returns the header of the request object.
func (x GetObjectRes) Header() *object.Object { func (x GetObjectRes) Header() *object.Object {
return x.hdr return x.hdr
} }
// GetObject reads the object by address. // GetObject reads an object by address.
// //
// Interrupts on any writer error. If successful, payload is written to writer. // Interrupts on any writer error. If successful, payload is written to the writer.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
// For raw reading, returns *object.SplitInfoError error if object is virtual. // For raw reading, returns *object.SplitInfoError error if object is virtual.
func GetObject(prm GetObjectPrm) (*GetObjectRes, error) { func GetObject(prm GetObjectPrm) (*GetObjectRes, error) {
var getPrm client.PrmObjectGet var getPrm client.PrmObjectGet
@ -552,24 +552,24 @@ type HeadObjectPrm struct {
mainOnly bool mainOnly bool
} }
// SetMainOnlyFlag sets flag to get only main fields of object header in terms of NeoFS API. // SetMainOnlyFlag sets flag to get only main fields of an object header in terms of NeoFS API.
func (x *HeadObjectPrm) SetMainOnlyFlag(v bool) { func (x *HeadObjectPrm) SetMainOnlyFlag(v bool) {
x.mainOnly = v x.mainOnly = v
} }
// HeadObjectRes groups resulting values of HeadObject operation. // HeadObjectRes groups the resulting values of HeadObject operation.
type HeadObjectRes struct { type HeadObjectRes struct {
hdr *object.Object hdr *object.Object
} }
// Header returns requested object header. // Header returns the requested object header.
func (x HeadObjectRes) Header() *object.Object { func (x HeadObjectRes) Header() *object.Object {
return x.hdr return x.hdr
} }
// HeadObject reads object header by address. // HeadObject reads an object header by address.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
// For raw reading, returns *object.SplitInfoError error if object is virtual. // For raw reading, returns *object.SplitInfoError error if object is virtual.
func HeadObject(prm HeadObjectPrm) (*HeadObjectRes, error) { func HeadObject(prm HeadObjectPrm) (*HeadObjectRes, error) {
var cliPrm client.PrmObjectHead var cliPrm client.PrmObjectHead
@ -629,7 +629,7 @@ func (x *SearchObjectsPrm) SetFilters(filters object.SearchFilters) {
x.filters = filters x.filters = filters
} }
// SearchObjectsRes groups resulting values of SearchObjects operation. // SearchObjectsRes groups the resulting values of SearchObjects operation.
type SearchObjectsRes struct { type SearchObjectsRes struct {
ids []oidSDK.ID ids []oidSDK.ID
} }
@ -639,9 +639,9 @@ func (x SearchObjectsRes) IDList() []oidSDK.ID {
return x.ids return x.ids
} }
// SearchObjects selects objects from container which match the filters. // SearchObjects selects objects from the container which match the filters.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
func SearchObjects(prm SearchObjectsPrm) (*SearchObjectsRes, error) { func SearchObjects(prm SearchObjectsPrm) (*SearchObjectsRes, error) {
var cliPrm client.PrmObjectSearch var cliPrm client.PrmObjectSearch
@ -712,7 +712,7 @@ func (x *HashPayloadRangesPrm) TZ() {
x.tz = true x.tz = true
} }
// SetRanges sets list of payload ranges to hash. // SetRanges sets a list of payload ranges to hash.
func (x *HashPayloadRangesPrm) SetRanges(rngs []*object.Range) { func (x *HashPayloadRangesPrm) SetRanges(rngs []*object.Range) {
x.rngs = rngs x.rngs = rngs
} }
@ -722,19 +722,19 @@ func (x *HashPayloadRangesPrm) SetSalt(salt []byte) {
x.salt = salt x.salt = salt
} }
// HashPayloadRangesRes groups resulting values of HashPayloadRanges operation. // HashPayloadRangesRes groups the resulting values of HashPayloadRanges operation.
type HashPayloadRangesRes struct { type HashPayloadRangesRes struct {
cliRes *client.ResObjectHash cliRes *client.ResObjectHash
} }
// HashList returns list of hashes of the payload ranges keeping order. // HashList returns a list of hashes of the payload ranges keeping order.
func (x HashPayloadRangesRes) HashList() [][]byte { func (x HashPayloadRangesRes) HashList() [][]byte {
return x.cliRes.Checksums() return x.cliRes.Checksums()
} }
// HashPayloadRanges requests hashes (by default SHA256) of the object payload ranges. // HashPayloadRanges requests hashes (by default SHA256) of the object payload ranges.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
// Returns an error if number of received hashes differs with the number of requested ranges. // Returns an error if number of received hashes differs with the number of requested ranges.
func HashPayloadRanges(prm HashPayloadRangesPrm) (*HashPayloadRangesRes, error) { func HashPayloadRanges(prm HashPayloadRangesPrm) (*HashPayloadRangesRes, error) {
var cliPrm client.PrmObjectHash var cliPrm client.PrmObjectHash
@ -801,14 +801,14 @@ func (x *PayloadRangePrm) SetRange(rng *object.Range) {
x.rng = rng x.rng = rng
} }
// PayloadRangeRes groups resulting values of PayloadRange operation. // PayloadRangeRes groups the resulting values of PayloadRange operation.
type PayloadRangeRes struct{} type PayloadRangeRes struct{}
// PayloadRange reads object payload range from NeoFS and writes it to specified writer. // PayloadRange reads object payload range from NeoFS and writes it to the specified writer.
// //
// Interrupts on any writer error. // Interrupts on any writer error.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
// For raw reading, returns *object.SplitInfoError error if object is virtual. // For raw reading, returns *object.SplitInfoError error if object is virtual.
func PayloadRange(prm PayloadRangePrm) (*PayloadRangeRes, error) { func PayloadRange(prm PayloadRangePrm) (*PayloadRangeRes, error) {
var cliPrm client.PrmObjectRange var cliPrm client.PrmObjectRange

View file

@ -5,8 +5,8 @@
// the NeoFS CLI application does not fully use the client's flexible interface. // the NeoFS CLI application does not fully use the client's flexible interface.
// //
// In this regard, this package provides functions over base API client necessary for the application. // In this regard, this package provides functions over base API client necessary for the application.
// This allows you to concentrate the entire spectrum of the client's use in one place (this will be convenient // This allows you to concentrate the entire spectrum of the client's use in one place (this will be convenient
// both when updating the base client and for evaluating the UX of SDK library). So it is expected that all // both when updating the base client and for evaluating the UX of SDK library). So it is expected that all
// application packages will be limited to this package for the development of functionality requiring // application packages will be limited to this package for the development of functionality requiring
// NeoFS API communication. // NeoFS API communication.
package internal package internal

View file

@ -16,7 +16,7 @@ type commonPrm struct {
cli *client.Client cli *client.Client
} }
// SetClient sets base client for NeoFS API communication. // SetClient sets the base client for NeoFS API communication.
func (x *commonPrm) SetClient(cli *client.Client) { func (x *commonPrm) SetClient(cli *client.Client) {
x.cli = cli x.cli = cli
} }
@ -25,7 +25,7 @@ type containerIDPrm struct {
cnrID *cid.ID cnrID *cid.ID
} }
// SetContainerID sets container identifier. // SetContainerID sets the container identifier.
func (x *containerIDPrm) SetContainerID(id *cid.ID) { func (x *containerIDPrm) SetContainerID(id *cid.ID) {
x.cnrID = id x.cnrID = id
} }
@ -34,7 +34,7 @@ type sessionTokenPrm struct {
sessionToken *session.Token sessionToken *session.Token
} }
// SetSessionToken sets token of the session within which request should be sent. // SetSessionToken sets the token of the session within which the request should be sent.
func (x *sessionTokenPrm) SetSessionToken(tok *session.Token) { func (x *sessionTokenPrm) SetSessionToken(tok *session.Token) {
x.sessionToken = tok x.sessionToken = tok
} }
@ -43,7 +43,7 @@ type bearerTokenPrm struct {
bearerToken *token.BearerToken bearerToken *token.BearerToken
} }
// SetBearerToken sets bearer token to be attached to the request. // SetBearerToken sets the bearer token to be attached to the request.
func (x *bearerTokenPrm) SetBearerToken(tok *token.BearerToken) { func (x *bearerTokenPrm) SetBearerToken(tok *token.BearerToken) {
x.bearerToken = tok x.bearerToken = tok
} }
@ -69,7 +69,7 @@ type payloadWriterPrm struct {
wrt io.Writer wrt io.Writer
} }
// SetPayloadWriter sets writer of the object payload. // SetPayloadWriter sets the writer of the object payload.
func (x *payloadWriterPrm) SetPayloadWriter(wrt io.Writer) { func (x *payloadWriterPrm) SetPayloadWriter(wrt io.Writer) {
x.wrt = wrt x.wrt = wrt
} }

View file

@ -61,7 +61,7 @@ var wellKnownBasicACL = map[string]acl.BasicACL{
const sessionTokenFlag = "session" const sessionTokenFlag = "session"
// path to a file with encoded session token // path to a file with an encoded session token
var sessionTokenPath string var sessionTokenPath string
var ( var (

View file

@ -13,10 +13,10 @@ const (
DialTimeoutDefault = 5 * time.Second DialTimeoutDefault = 5 * time.Second
) )
// DialTimeout returns value of "dial_timeout" config parameter // DialTimeout returns the value of "dial_timeout" config parameter
// from "apiclient" section. // from "apiclient" section.
// //
// Returns DialTimeoutDefault if value is not positive duration. // Returns DialTimeoutDefault if the value is not positive duration.
func DialTimeout(c *config.Config) time.Duration { func DialTimeout(c *config.Config) time.Duration {
v := config.DurationSafe(c.Sub(subsection), "dial_timeout") v := config.DurationSafe(c.Sub(subsection), "dial_timeout")
if v > 0 { if v > 0 {

View file

@ -4,9 +4,9 @@ import (
"strings" "strings"
) )
// Sub returns subsection of the Config by name. // Sub returns a subsection of the Config by name.
// //
// Returns nil if subsection if missing. // Returns nil if subsection is missing.
func (x *Config) Sub(name string) *Config { func (x *Config) Sub(name string) *Config {
// copy path in order to prevent consequent violations // copy path in order to prevent consequent violations
ln := len(x.path) ln := len(x.path)
@ -29,7 +29,7 @@ func (x *Config) Sub(name string) *Config {
} }
} }
// Value returns configuration value by name. // Value returns the configuration value by name.
// //
// Result can be casted to a particular type // Result can be casted to a particular type
// via corresponding function (e.g. StringSlice). // via corresponding function (e.g. StringSlice).

View file

@ -15,10 +15,10 @@ func panicOnErr(err error) {
} }
} }
// StringSlice reads configuration value // StringSlice reads a configuration value
// from c by name and casts it to []string. // from c by name and casts it to a []string.
// //
// Panics if value can not be casted. // Panics if the value can not be casted.
func StringSlice(c *Config, name string) []string { func StringSlice(c *Config, name string) []string {
x, err := cast.ToStringSliceE(c.Value(name)) x, err := cast.ToStringSliceE(c.Value(name))
panicOnErr(err) panicOnErr(err)
@ -26,18 +26,18 @@ func StringSlice(c *Config, name string) []string {
return x return x
} }
// StringSliceSafe reads configuration value // StringSliceSafe reads a configuration value
// from c by name and casts it to []string. // from c by name and casts it to a []string.
// //
// Returns nil if value can not be casted. // Returns nil if the value can not be casted.
func StringSliceSafe(c *Config, name string) []string { func StringSliceSafe(c *Config, name string) []string {
return cast.ToStringSlice(c.Value(name)) return cast.ToStringSlice(c.Value(name))
} }
// String reads configuration value // String reads a configuration value
// from c by name and casts it to string. // from c by name and casts it to a string.
// //
// Panics if value can not be casted. // Panics if the value can not be casted.
func String(c *Config, name string) string { func String(c *Config, name string) string {
x, err := cast.ToStringE(c.Value(name)) x, err := cast.ToStringE(c.Value(name))
panicOnErr(err) panicOnErr(err)
@ -45,18 +45,18 @@ func String(c *Config, name string) string {
return x return x
} }
// StringSafe reads configuration value // StringSafe reads a configuration value
// from c by name and casts it to string. // from c by name and casts it to a string.
// //
// Returns "" if value can not be casted. // Returns "" if the value can not be casted.
func StringSafe(c *Config, name string) string { func StringSafe(c *Config, name string) string {
return cast.ToString(c.Value(name)) return cast.ToString(c.Value(name))
} }
// Duration reads configuration value // Duration reads a configuration value
// from c by name and casts it to time.Duration. // from c by name and casts it to time.Duration.
// //
// Panics if value can not be casted. // Panics if the value can not be casted.
func Duration(c *Config, name string) time.Duration { func Duration(c *Config, name string) time.Duration {
x, err := cast.ToDurationE(c.Value(name)) x, err := cast.ToDurationE(c.Value(name))
panicOnErr(err) panicOnErr(err)
@ -64,18 +64,18 @@ func Duration(c *Config, name string) time.Duration {
return x return x
} }
// DurationSafe reads configuration value // DurationSafe reads a configuration value
// from c by name and casts it to time.Duration. // from c by name and casts it to time.Duration.
// //
// Returns 0 if value can not be casted. // Returns 0 if the value can not be casted.
func DurationSafe(c *Config, name string) time.Duration { func DurationSafe(c *Config, name string) time.Duration {
return cast.ToDuration(c.Value(name)) return cast.ToDuration(c.Value(name))
} }
// Bool reads configuration value // Bool reads a configuration value
// from c by name and casts it to bool. // from c by name and casts it to bool.
// //
// Panics if value can not be casted. // Panics if the value can not be casted.
func Bool(c *Config, name string) bool { func Bool(c *Config, name string) bool {
x, err := cast.ToBoolE(c.Value(name)) x, err := cast.ToBoolE(c.Value(name))
panicOnErr(err) panicOnErr(err)
@ -83,18 +83,18 @@ func Bool(c *Config, name string) bool {
return x return x
} }
// BoolSafe reads configuration value // BoolSafe reads a configuration value
// from c by name and casts it to bool. // from c by name and casts it to bool.
// //
// Returns false if value can not be casted. // Returns false if the value can not be casted.
func BoolSafe(c *Config, name string) bool { func BoolSafe(c *Config, name string) bool {
return cast.ToBool(c.Value(name)) return cast.ToBool(c.Value(name))
} }
// Uint32 reads configuration value // Uint32 reads a configuration value
// from c by name and casts it to uint32. // from c by name and casts it to uint32.
// //
// Panics if value can not be casted. // Panics if the value can not be casted.
func Uint32(c *Config, name string) uint32 { func Uint32(c *Config, name string) uint32 {
x, err := cast.ToUint32E(c.Value(name)) x, err := cast.ToUint32E(c.Value(name))
panicOnErr(err) panicOnErr(err)
@ -102,18 +102,18 @@ func Uint32(c *Config, name string) uint32 {
return x return x
} }
// Uint32Safe reads configuration value // Uint32Safe reads a configuration value
// from c by name and casts it to uint32. // from c by name and casts it to uint32.
// //
// Returns 0 if value can not be casted. // Returns 0 if the value can not be casted.
func Uint32Safe(c *Config, name string) uint32 { func Uint32Safe(c *Config, name string) uint32 {
return cast.ToUint32(c.Value(name)) return cast.ToUint32(c.Value(name))
} }
// Uint reads configuration value // Uint reads a configuration value
// from c by name and casts it to uint64. // from c by name and casts it to uint64.
// //
// Panics if value can not be casted. // Panics if the value can not be casted.
func Uint(c *Config, name string) uint64 { func Uint(c *Config, name string) uint64 {
x, err := cast.ToUint64E(c.Value(name)) x, err := cast.ToUint64E(c.Value(name))
panicOnErr(err) panicOnErr(err)
@ -121,18 +121,18 @@ func Uint(c *Config, name string) uint64 {
return x return x
} }
// UintSafe reads configuration value // UintSafe reads a configuration value
// from c by name and casts it to uint64. // from c by name and casts it to uint64.
// //
// Returns 0 if value can not be casted. // Returns 0 if the value can not be casted.
func UintSafe(c *Config, name string) uint64 { func UintSafe(c *Config, name string) uint64 {
return cast.ToUint64(c.Value(name)) return cast.ToUint64(c.Value(name))
} }
// Int reads configuration value // Int reads a configuration value
// from c by name and casts it to int64. // from c by name and casts it to int64.
// //
// Panics if value can not be casted. // Panics if the value can not be casted.
func Int(c *Config, name string) int64 { func Int(c *Config, name string) int64 {
x, err := cast.ToInt64E(c.Value(name)) x, err := cast.ToInt64E(c.Value(name))
panicOnErr(err) panicOnErr(err)
@ -140,15 +140,15 @@ func Int(c *Config, name string) int64 {
return x return x
} }
// IntSafe reads configuration value // IntSafe reads a configuration value
// from c by name and casts it to int64. // from c by name and casts it to int64.
// //
// Returns 0 if value can not be casted. // Returns 0 if the value can not be casted.
func IntSafe(c *Config, name string) int64 { func IntSafe(c *Config, name string) int64 {
return cast.ToInt64(c.Value(name)) return cast.ToInt64(c.Value(name))
} }
// SizeInBytesSafe reads configuration value // SizeInBytesSafe reads a configuration value
// from c by name and casts it to size in bytes (uint64). // from c by name and casts it to size in bytes (uint64).
// //
// The suffix can be single-letter (b, k, m, g, t) or with // The suffix can be single-letter (b, k, m, g, t) or with

View file

@ -11,47 +11,47 @@ const (
subsection = "contracts" subsection = "contracts"
) )
// Netmap returns value of "netmap" config parameter // Netmap returns the value of "netmap" config parameter
// from "contracts" section. // from "contracts" section.
// //
// Returns zero filled script hash if value is not set. // Returns zero filled script hash if the value is not set.
// Throws panic if value is not a 20-byte LE hex-encoded string. // Throws panic if the value is not a 20-byte LE hex-encoded string.
func Netmap(c *config.Config) util.Uint160 { func Netmap(c *config.Config) util.Uint160 {
return contractAddress(c, "netmap") return contractAddress(c, "netmap")
} }
// Balance returns value of "balance" config parameter // Balance returns the value of "balance" config parameter
// from "contracts" section. // from "contracts" section.
// //
// Returns zero filled script hash if value is not set. // Returns zero filled script hash if the value is not set.
// Throws panic if value is not a 20-byte LE hex-encoded string. // Throws panic if the value is not a 20-byte LE hex-encoded string.
func Balance(c *config.Config) util.Uint160 { func Balance(c *config.Config) util.Uint160 {
return contractAddress(c, "balance") return contractAddress(c, "balance")
} }
// Container returns value of "container" config parameter // Container returns the value of "container" config parameter
// from "contracts" section. // from "contracts" section.
// //
// Returns zero filled script hash if value is not set. // Returns zero filled script hash if the value is not set.
// Throws panic if value is not a 20-byte LE hex-encoded string. // Throws panic if the value is not a 20-byte LE hex-encoded string.
func Container(c *config.Config) util.Uint160 { func Container(c *config.Config) util.Uint160 {
return contractAddress(c, "container") return contractAddress(c, "container")
} }
// Reputation returns value of "reputation" config parameter // Reputation returnsthe value of "reputation" config parameter
// from "contracts" section. // from "contracts" section.
// //
// Returns zero filled script hash if value is not set. // Returns zero filled script hash if the value is not set.
// Throws panic if value is not a 20-byte LE hex-encoded string. // Throws panic if the value is not a 20-byte LE hex-encoded string.
func Reputation(c *config.Config) util.Uint160 { func Reputation(c *config.Config) util.Uint160 {
return contractAddress(c, "reputation") return contractAddress(c, "reputation")
} }
// Proxy returns value of "proxy" config parameter // Proxy returnsthe value of "proxy" config parameter
// from "contracts" section. // from "contracts" section.
// //
// Returns zero filled script hash if value is not set. // Returns zero filled script hash if the value is not set.
// Throws panic if value is not a 20-byte LE hex-encoded string. // Throws panic if the value is not a 20-byte LE hex-encoded string.
func Proxy(c *config.Config) util.Uint160 { func Proxy(c *config.Config) util.Uint160 {
return contractAddress(c, "proxy") return contractAddress(c, "proxy")
} }

View file

@ -21,10 +21,10 @@ const (
GRPCEndpointDefault = "" GRPCEndpointDefault = ""
) )
// AuthorizedKeys parses and returns array of "authorized_keys" config // AuthorizedKeys parses and returns an array of "authorized_keys" config
// parameter from "control" section. // parameter from "control" section.
// //
// Returns empty list if not set. // Returns an empty list if not set.
func AuthorizedKeys(c *config.Config) keys.PublicKeys { func AuthorizedKeys(c *config.Config) keys.PublicKeys {
strKeys := config.StringSliceSafe(c.Sub(subsection), "authorized_keys") strKeys := config.StringSliceSafe(c.Sub(subsection), "authorized_keys")
pubs := make(keys.PublicKeys, 0, len(strKeys)) pubs := make(keys.PublicKeys, 0, len(strKeys))
@ -41,7 +41,7 @@ func AuthorizedKeys(c *config.Config) keys.PublicKeys {
return pubs return pubs
} }
// GRPC returns structure that provides access to "grpc" subsection of // GRPC returns a structure that provides access to "grpc" subsection of
// "control" section. // "control" section.
func GRPC(c *config.Config) GRPCConfig { func GRPC(c *config.Config) GRPCConfig {
return GRPCConfig{ return GRPCConfig{
@ -49,9 +49,9 @@ func GRPC(c *config.Config) GRPCConfig {
} }
} }
// Endpoint returns value of "endpoint" config parameter. // Endpoint returns the value of "endpoint" config parameter.
// //
// Returns GRPCEndpointDefault if value is not a non-empty string. // Returns GRPCEndpointDefault if the value is not a non-empty string.
func (g GRPCConfig) Endpoint() string { func (g GRPCConfig) Endpoint() string {
v := config.String(g.cfg, "endpoint") v := config.String(g.cfg, "endpoint")
if v != "" { if v != "" {

View file

@ -11,7 +11,7 @@ const (
subsection = "storage" subsection = "storage"
// ShardPoolSizeDefault is a default value of routine pool size per-shard to // ShardPoolSizeDefault is a default value of routine pool size per-shard to
// process object PUT operations in storage engine. // process object PUT operations in a storage engine.
ShardPoolSizeDefault = 20 ShardPoolSizeDefault = 20
) )
@ -47,9 +47,9 @@ func IterateShards(c *config.Config, required bool, f func(*shardconfig.Config))
} }
} }
// ShardPoolSize returns value of "shard_pool_size" config parameter from "storage" section. // ShardPoolSize returns the value of "shard_pool_size" config parameter from "storage" section.
// //
// Returns ShardPoolSizeDefault if value is not a positive number. // Returns ShardPoolSizeDefault if the value is not a positive number.
func ShardPoolSize(c *config.Config) uint32 { func ShardPoolSize(c *config.Config) uint32 {
v := config.Uint32Safe(c.Sub(subsection), "shard_pool_size") v := config.Uint32Safe(c.Sub(subsection), "shard_pool_size")
if v > 0 { if v > 0 {
@ -59,9 +59,9 @@ func ShardPoolSize(c *config.Config) uint32 {
return ShardPoolSizeDefault return ShardPoolSizeDefault
} }
// ShardErrorThreshold returns value of "shard_ro_error_threshold" config parameter from "storage" section. // ShardErrorThreshold returns the value of "shard_ro_error_threshold" config parameter from "storage" section.
// //
// Returns 0 if the value is missing. // Returns 0 if the the value is missing.
func ShardErrorThreshold(c *config.Config) uint32 { func ShardErrorThreshold(c *config.Config) uint32 {
return config.Uint32Safe(c.Sub(subsection), "shard_ro_error_threshold") return config.Uint32Safe(c.Sub(subsection), "shard_ro_error_threshold")
} }

View file

@ -28,9 +28,9 @@ func From(c *config.Config) *Config {
return (*Config)(c) return (*Config)(c)
} }
// Size returns value of "size" config parameter. // Size returns the value of "size" config parameter.
// //
// Returns SizeDefault if value is not a positive number. // Returns SizeDefault if the value is not a positive number.
func (x *Config) Size() uint64 { func (x *Config) Size() uint64 {
s := config.SizeInBytesSafe( s := config.SizeInBytesSafe(
(*config.Config)(x), (*config.Config)(x),
@ -44,9 +44,9 @@ func (x *Config) Size() uint64 {
return SizeDefault return SizeDefault
} }
// ShallowDepth returns value of "depth" config parameter. // ShallowDepth returns the value of "depth" config parameter.
// //
// Returns ShallowDepthDefault if value is not a positive number. // Returns ShallowDepthDefault if the value is not a positive number.
func (x *Config) ShallowDepth() uint64 { func (x *Config) ShallowDepth() uint64 {
d := config.UintSafe( d := config.UintSafe(
(*config.Config)(x), (*config.Config)(x),
@ -60,9 +60,9 @@ func (x *Config) ShallowDepth() uint64 {
return ShallowDepthDefault return ShallowDepthDefault
} }
// ShallowWidth returns value of "width" config parameter. // ShallowWidth returns the value of "width" config parameter.
// //
// Returns ShallowWidthDefault if value is not a positive number. // Returns ShallowWidthDefault if the value is not a positive number.
func (x *Config) ShallowWidth() uint64 { func (x *Config) ShallowWidth() uint64 {
d := config.UintSafe( d := config.UintSafe(
(*config.Config)(x), (*config.Config)(x),
@ -76,9 +76,9 @@ func (x *Config) ShallowWidth() uint64 {
return ShallowWidthDefault return ShallowWidthDefault
} }
// OpenedCacheSize returns value of "opened_cache_capacity" config parameter. // OpenedCacheSize returns the value of "opened_cache_capacity" config parameter.
// //
// Returns OpenedCacheSizeDefault if value is not a positive number. // Returns OpenedCacheSizeDefault if the value is not a positive number.
func (x *Config) OpenedCacheSize() int { func (x *Config) OpenedCacheSize() int {
d := config.IntSafe( d := config.IntSafe(
(*config.Config)(x), (*config.Config)(x),

View file

@ -29,9 +29,9 @@ func From(c *config.Config) *Config {
return (*Config)(c) return (*Config)(c)
} }
// Path returns value of "path" config parameter. // Path returns the value of "path" config parameter.
// //
// Panics if value is not a non-empty string. // Panics if the value is not a non-empty string.
func (x *Config) Path() string { func (x *Config) Path() string {
p := config.String( p := config.String(
(*config.Config)(x), (*config.Config)(x),
@ -45,9 +45,9 @@ func (x *Config) Path() string {
return p return p
} }
// Perm returns value of "perm" config parameter as a fs.FileMode. // Perm returns the value of "perm" config parameter as a fs.FileMode.
// //
// Returns PermDefault if value is not a non-zero number. // Returns PermDefault if the value is not a non-zero number.
func (x *Config) Perm() fs.FileMode { func (x *Config) Perm() fs.FileMode {
p := config.UintSafe( p := config.UintSafe(
(*config.Config)(x), (*config.Config)(x),
@ -61,9 +61,9 @@ func (x *Config) Perm() fs.FileMode {
return fs.FileMode(p) return fs.FileMode(p)
} }
// ShallowDepth returns value of "depth" config parameter. // ShallowDepth returns the value of "depth" config parameter.
// //
// Returns ShallowDepthDefault if value is out of // Returns ShallowDepthDefault if the value is out of
// [1:fstree.MaxDepth] range. // [1:fstree.MaxDepth] range.
func (x *Config) ShallowDepth() int { func (x *Config) ShallowDepth() int {
d := config.IntSafe( d := config.IntSafe(
@ -78,9 +78,9 @@ func (x *Config) ShallowDepth() int {
return ShallowDepthDefault return ShallowDepthDefault
} }
// Compress returns value of "compress" config parameter. // Compress returns the value of "compress" config parameter.
// //
// Returns false if value is not a valid bool. // Returns false if the value is not a valid bool.
func (x *Config) Compress() bool { func (x *Config) Compress() bool {
return config.BoolSafe( return config.BoolSafe(
(*config.Config)(x), (*config.Config)(x),
@ -88,18 +88,18 @@ func (x *Config) Compress() bool {
) )
} }
// UncompressableContentTypes returns value of "compress_skip_content_types" config parameter. // UncompressableContentTypes returns the value of "compress_skip_content_types" config parameter.
// //
// Returns nil if a value is missing or is invalid. // Returns nil if a the value is missing or is invalid.
func (x *Config) UncompressableContentTypes() []string { func (x *Config) UncompressableContentTypes() []string {
return config.StringSliceSafe( return config.StringSliceSafe(
(*config.Config)(x), (*config.Config)(x),
"compression_exclude_content_types") "compression_exclude_content_types")
} }
// SmallSizeLimit returns value of "small_object_size" config parameter. // SmallSizeLimit returns the value of "small_object_size" config parameter.
// //
// Returns SmallSizeLimitDefault if value is not a positive number. // Returns SmallSizeLimitDefault if the value is not a positive number.
func (x *Config) SmallSizeLimit() uint64 { func (x *Config) SmallSizeLimit() uint64 {
l := config.SizeInBytesSafe( l := config.SizeInBytesSafe(
(*config.Config)(x), (*config.Config)(x),

View file

@ -52,9 +52,9 @@ func (x *Config) GC() *gcconfig.Config {
) )
} }
// RefillMetabase returns value of "resync_metabase" config parameter. // RefillMetabase returns the value of "resync_metabase" config parameter.
// //
// Returns false if value is not a valid bool. // Returns false if the value is not a valid bool.
func (x *Config) RefillMetabase() bool { func (x *Config) RefillMetabase() bool {
return config.BoolSafe( return config.BoolSafe(
(*config.Config)(x), (*config.Config)(x),
@ -62,9 +62,9 @@ func (x *Config) RefillMetabase() bool {
) )
} }
// Mode return value of "mode" config parameter. // Mode return the value of "mode" config parameter.
// //
// Panics if read value is not one of predefined // Panics if read the value is not one of predefined
// shard modes. // shard modes.
func (x *Config) Mode() (m shard.Mode) { func (x *Config) Mode() (m shard.Mode) {
s := config.StringSafe( s := config.StringSafe(

View file

@ -24,10 +24,10 @@ func From(c *config.Config) *Config {
return (*Config)(c) return (*Config)(c)
} }
// RemoverBatchSize returns value of "remover_batch_size" // RemoverBatchSize returns the value of "remover_batch_size"
// config parameter. // config parameter.
// //
// Returns RemoverBatchSizeDefault if value is not a positive number. // Returns RemoverBatchSizeDefault if the value is not a positive number.
func (x *Config) RemoverBatchSize() int { func (x *Config) RemoverBatchSize() int {
s := config.IntSafe( s := config.IntSafe(
(*config.Config)(x), (*config.Config)(x),
@ -41,10 +41,10 @@ func (x *Config) RemoverBatchSize() int {
return RemoverBatchSizeDefault return RemoverBatchSizeDefault
} }
// RemoverSleepInterval returns value of "remover_sleep_interval" // RemoverSleepInterval returns the value of "remover_sleep_interval"
// config parameter. // config parameter.
// //
// Returns RemoverSleepIntervalDefault if value is not a positive number. // Returns RemoverSleepIntervalDefault if the value is not a positive number.
func (x *Config) RemoverSleepInterval() time.Duration { func (x *Config) RemoverSleepInterval() time.Duration {
s := config.DurationSafe( s := config.DurationSafe(
(*config.Config)(x), (*config.Config)(x),

View file

@ -21,9 +21,9 @@ func From(c *config.Config) *Config {
return (*Config)(c) return (*Config)(c)
} }
// Path returns value of "path" config parameter. // Path returns the value of "path" config parameter.
// //
// Panics if value is not a non-empty string. // Panics if the value is not a non-empty string.
func (x *Config) Path() string { func (x *Config) Path() string {
p := config.String( p := config.String(
(*config.Config)(x), (*config.Config)(x),
@ -37,9 +37,9 @@ func (x *Config) Path() string {
return p return p
} }
// Perm returns value of "perm" config parameter as a fs.FileMode. // Perm returns the value of "perm" config parameter as a fs.FileMode.
// //
// Returns PermDefault if value is not a positive number. // Returns PermDefault if the value is not a positive number.
func (x *Config) Perm() fs.FileMode { func (x *Config) Perm() fs.FileMode {
p := config.UintSafe( p := config.UintSafe(
(*config.Config)(x), (*config.Config)(x),

View file

@ -33,14 +33,14 @@ func From(c *config.Config) *Config {
// Enabled returns true if write-cache is enabled and false otherwise. // Enabled returns true if write-cache is enabled and false otherwise.
// //
// Panics if value is not a boolean. // Panics if the value is not a boolean.
func (x *Config) Enabled() bool { func (x *Config) Enabled() bool {
return config.Bool((*config.Config)(x), "enabled") return config.Bool((*config.Config)(x), "enabled")
} }
// Path returns value of "path" config parameter. // Path returns the value of "path" config parameter.
// //
// Panics if value is not a non-empty string. // Panics if the value is not a non-empty string.
func (x *Config) Path() string { func (x *Config) Path() string {
p := config.String( p := config.String(
(*config.Config)(x), (*config.Config)(x),
@ -54,9 +54,9 @@ func (x *Config) Path() string {
return p return p
} }
// MemSize returns value of "memcache_capacity" config parameter. // MemSize returns the value of "memcache_capacity" config parameter.
// //
// Returns MemSizeDefault if value is not a positive number. // Returns MemSizeDefault if the value is not a positive number.
func (x *Config) MemSize() uint64 { func (x *Config) MemSize() uint64 {
s := config.SizeInBytesSafe( s := config.SizeInBytesSafe(
(*config.Config)(x), (*config.Config)(x),
@ -70,9 +70,9 @@ func (x *Config) MemSize() uint64 {
return MemSizeDefault return MemSizeDefault
} }
// SmallObjectSize returns value of "small_object_size" config parameter. // SmallObjectSize returns the value of "small_object_size" config parameter.
// //
// Returns SmallSizeDefault if value is not a positive number. // Returns SmallSizeDefault if the value is not a positive number.
func (x *Config) SmallObjectSize() uint64 { func (x *Config) SmallObjectSize() uint64 {
s := config.SizeInBytesSafe( s := config.SizeInBytesSafe(
(*config.Config)(x), (*config.Config)(x),
@ -86,9 +86,9 @@ func (x *Config) SmallObjectSize() uint64 {
return SmallSizeDefault return SmallSizeDefault
} }
// MaxObjectSize returns value of "max_object_size" config parameter. // MaxObjectSize returns the value of "max_object_size" config parameter.
// //
// Returns MaxSizeDefault if value is not a positive number. // Returns MaxSizeDefault if the value is not a positive number.
func (x *Config) MaxObjectSize() uint64 { func (x *Config) MaxObjectSize() uint64 {
s := config.SizeInBytesSafe( s := config.SizeInBytesSafe(
(*config.Config)(x), (*config.Config)(x),
@ -102,9 +102,9 @@ func (x *Config) MaxObjectSize() uint64 {
return MaxSizeDefault return MaxSizeDefault
} }
// WorkersNumber returns value of "workers_number" config parameter. // WorkersNumber returns the value of "workers_number" config parameter.
// //
// Returns WorkersNumberDefault if value is not a positive number. // Returns WorkersNumberDefault if the value is not a positive number.
func (x *Config) WorkersNumber() int { func (x *Config) WorkersNumber() int {
c := config.IntSafe( c := config.IntSafe(
(*config.Config)(x), (*config.Config)(x),
@ -118,9 +118,9 @@ func (x *Config) WorkersNumber() int {
return WorkersNumberDefault return WorkersNumberDefault
} }
// SizeLimit returns value of "capacity" config parameter. // SizeLimit returns the value of "capacity" config parameter.
// //
// Returns SizeLimitDefault if value is not a positive number. // Returns SizeLimitDefault if the value is not a positive number.
func (x *Config) SizeLimit() uint64 { func (x *Config) SizeLimit() uint64 {
c := config.SizeInBytesSafe( c := config.SizeInBytesSafe(
(*config.Config)(x), (*config.Config)(x),

View file

@ -17,9 +17,9 @@ var (
// which provides access to gRPC server configurations. // which provides access to gRPC server configurations.
type Config config.Config type Config config.Config
// Endpoint returns value of "endpoint" config parameter. // Endpoint returns the value of "endpoint" config parameter.
// //
// Panics if value is not a non-empty string. // Panics if the value is not a non-empty string.
func (x *Config) Endpoint() string { func (x *Config) Endpoint() string {
v := config.StringSafe( v := config.StringSafe(
(*config.Config)(x), (*config.Config)(x),
@ -54,9 +54,9 @@ type TLSConfig struct {
cfg *config.Config cfg *config.Config
} }
// KeyFile returns value of "key" config parameter. // KeyFile returns the value of "key" config parameter.
// //
// Panics if value is not a non-empty string. // Panics if the value is not a non-empty string.
func (tls TLSConfig) KeyFile() string { func (tls TLSConfig) KeyFile() string {
v := config.StringSafe(tls.cfg, "key") v := config.StringSafe(tls.cfg, "key")
if v == "" { if v == "" {
@ -66,9 +66,9 @@ func (tls TLSConfig) KeyFile() string {
return v return v
} }
// CertificateFile returns value of "certificate" config parameter. // CertificateFile returns the value of "certificate" config parameter.
// //
// Panics if value is not a non-empty string. // Panics if the value is not a non-empty string.
func (tls TLSConfig) CertificateFile() string { func (tls TLSConfig) CertificateFile() string {
v := config.StringSafe(tls.cfg, "certificate") v := config.StringSafe(tls.cfg, "certificate")
if v == "" { if v == "" {

View file

@ -11,7 +11,7 @@ const EnvPrefix = "neofs"
// EnvSeparator is a section separator in ENV variables. // EnvSeparator is a section separator in ENV variables.
const EnvSeparator = "_" const EnvSeparator = "_"
// Env returns ENV variable key for particular config parameter. // Env returns ENV variable key for a particular config parameter.
func Env(path ...string) string { func Env(path ...string) string {
return strings.ToUpper( return strings.ToUpper(
strings.Join( strings.Join(

View file

@ -10,10 +10,10 @@ const (
LevelDefault = "info" LevelDefault = "info"
) )
// Level returns value of "level" config parameter // Level returns the value of "level" config parameter
// from "logger" section. // from "logger" section.
// //
// Returns LevelDefault if value is not a non-empty string. // Returns LevelDefault if the value is not a non-empty string.
func Level(c *config.Config) string { func Level(c *config.Config) string {
v := config.StringSafe( v := config.StringSafe(
c.Sub("logger"), c.Sub("logger"),

View file

@ -13,18 +13,18 @@ const (
DialTimeoutDefault = 5 * time.Second DialTimeoutDefault = 5 * time.Second
) )
// RPCEndpoint returns list of values of "rpc_endpoint" config parameter // RPCEndpoint returns a list of the values of "rpc_endpoint" config parameter
// from "mainchain" section. // from "mainchain" section.
// //
// Returns empty list if value is not a non-empty string array. // Returns empty list if the value is not a non-empty string array.
func RPCEndpoint(c *config.Config) []string { func RPCEndpoint(c *config.Config) []string {
return config.StringSliceSafe(c.Sub(subsection), "rpc_endpoint") return config.StringSliceSafe(c.Sub(subsection), "rpc_endpoint")
} }
// DialTimeout returns value of "dial_timeout" config parameter // DialTimeout returns the value of "dial_timeout" config parameter
// from "mainchain" section. // from "mainchain" section.
// //
// Returns DialTimeoutDefault if value is not positive duration. // Returns DialTimeoutDefault if the value is not positive duration.
func DialTimeout(c *config.Config) time.Duration { func DialTimeout(c *config.Config) time.Duration {
v := config.DurationSafe(c.Sub(subsection), "dial_timeout") v := config.DurationSafe(c.Sub(subsection), "dial_timeout")
if v > 0 { if v > 0 {

View file

@ -16,10 +16,10 @@ const (
AddressDefault = "" AddressDefault = ""
) )
// ShutdownTimeout returns value of "shutdown_timeout" config parameter // ShutdownTimeout returns the value of "shutdown_timeout" config parameter
// from "metrics" section. // from "metrics" section.
// //
// Returns ShutdownTimeoutDefault if value is not positive duration. // Returns ShutdownTimeoutDefault if the value is not positive duration.
func ShutdownTimeout(c *config.Config) time.Duration { func ShutdownTimeout(c *config.Config) time.Duration {
v := config.DurationSafe(c.Sub(subsection), "shutdown_timeout") v := config.DurationSafe(c.Sub(subsection), "shutdown_timeout")
if v > 0 { if v > 0 {
@ -29,10 +29,10 @@ func ShutdownTimeout(c *config.Config) time.Duration {
return ShutdownTimeoutDefault return ShutdownTimeoutDefault
} }
// Address returns value of "address" config parameter // Address returns the value of "address" config parameter
// from "metrics" section. // from "metrics" section.
// //
// Returns AddressDefault if value is not set. // Returns AddressDefault if the value is not set.
func Address(c *config.Config) string { func Address(c *config.Config) string {
v := config.StringSafe(c.Sub(subsection), "address") v := config.StringSafe(c.Sub(subsection), "address")
if v != "" { if v != "" {

View file

@ -24,7 +24,7 @@ const (
MaxConnPerHostDefault = 10 MaxConnPerHostDefault = 10
) )
// RPCEndpoint returns list of values of "rpc_endpoint" config parameter // RPCEndpoint returns list of the values of "rpc_endpoint" config parameter
// from "morph" section. // from "morph" section.
// //
// Throws panic if list is empty. // Throws panic if list is empty.
@ -37,10 +37,10 @@ func RPCEndpoint(c *config.Config) []string {
return v return v
} }
// DialTimeout returns value of "dial_timeout" config parameter // DialTimeout returns the value of "dial_timeout" config parameter
// from "morph" section. // from "morph" section.
// //
// Returns DialTimeoutDefault if value is not positive duration. // Returns DialTimeoutDefault if the value is not positive duration.
func DialTimeout(c *config.Config) time.Duration { func DialTimeout(c *config.Config) time.Duration {
v := config.DurationSafe(c.Sub(subsection), "dial_timeout") v := config.DurationSafe(c.Sub(subsection), "dial_timeout")
if v > 0 { if v > 0 {
@ -50,7 +50,7 @@ func DialTimeout(c *config.Config) time.Duration {
return DialTimeoutDefault return DialTimeoutDefault
} }
// DisableCache returns value of "disable_cache" config parameter // DisableCache returns the value of "disable_cache" config parameter
// from "morph" section. // from "morph" section.
func DisableCache(c *config.Config) bool { func DisableCache(c *config.Config) bool {
return config.BoolSafe(c.Sub(subsection), "disable_cache") return config.BoolSafe(c.Sub(subsection), "disable_cache")

View file

@ -45,12 +45,12 @@ const (
NotificationTimeoutDefault = 5 * time.Second NotificationTimeoutDefault = 5 * time.Second
) )
// Key returns value of "key" config parameter // Key returns the value of "key" config parameter
// from "node" section. // from "node" section.
// //
// If value is not set, fallbacks to Wallet section. // If the value is not set, fallbacks to Wallet section.
// //
// Panics if value is incorrect filename of binary encoded private key. // Panics if the value is incorrect filename of binary encoded private key.
func Key(c *config.Config) *keys.PrivateKey { func Key(c *config.Config) *keys.PrivateKey {
v := config.StringSafe(c.Sub(subsection), "key") v := config.StringSafe(c.Sub(subsection), "key")
if v == "" { if v == "" {
@ -73,7 +73,7 @@ func Key(c *config.Config) *keys.PrivateKey {
return key return key
} }
// Wallet returns value of node private key from "node" section. // Wallet returns the value of a node private key from "node" section.
// //
// Panics if section contains invalid values. // Panics if section contains invalid values.
func Wallet(c *config.Config) *keys.PrivateKey { func Wallet(c *config.Config) *keys.PrivateKey {
@ -103,10 +103,10 @@ func (x stringAddressGroup) NumberOfAddresses() int {
return len(x) return len(x)
} }
// BootstrapAddresses returns value of "addresses" config parameter // BootstrapAddresses returns the value of "addresses" config parameter
// from "node" section as network.AddressGroup. // from "node" section as network.AddressGroup.
// //
// Panics if value is not a string list of valid NeoFS network addresses. // Panics if the value is not a string list of valid NeoFS network addresses.
func BootstrapAddresses(c *config.Config) (addr network.AddressGroup) { func BootstrapAddresses(c *config.Config) (addr network.AddressGroup) {
v := config.StringSlice(c.Sub(subsection), "addresses") v := config.StringSlice(c.Sub(subsection), "addresses")
@ -136,10 +136,10 @@ func Attributes(c *config.Config) (attrs []string) {
return return
} }
// Relay returns value of "relay" config parameter // Relay returns the value of "relay" config parameter
// from "node" section. // from "node" section.
// //
// Returns false if value is not set. // Returns false if the value is not set.
func Relay(c *config.Config) bool { func Relay(c *config.Config) bool {
return config.BoolSafe(c.Sub(subsection), "relay") return config.BoolSafe(c.Sub(subsection), "relay")
} }
@ -152,9 +152,9 @@ func PersistentSessions(c *config.Config) PersistentSessionsConfig {
} }
} }
// Path returns value of "path" config parameter. // Path returns the value of "path" config parameter.
// //
// Returns PersistentStatePathDefault if value is not a non-empty string. // Returns PersistentStatePathDefault if the value is not a non-empty string.
func (p PersistentSessionsConfig) Path() string { func (p PersistentSessionsConfig) Path() string {
return config.String(p.cfg, "path") return config.String(p.cfg, "path")
} }
@ -167,9 +167,9 @@ func PersistentState(c *config.Config) PersistentStateConfig {
} }
} }
// Path returns value of "path" config parameter. // Path returns the value of "path" config parameter.
// //
// Returns PersistentStatePathDefault if value is not a non-empty string. // Returns PersistentStatePathDefault if the value is not a non-empty string.
func (p PersistentStateConfig) Path() string { func (p PersistentStateConfig) Path() string {
v := config.String(p.cfg, "path") v := config.String(p.cfg, "path")
if v != "" { if v != "" {
@ -188,16 +188,16 @@ func (x *SubnetConfig) Init(root config.Config) {
*x = SubnetConfig(*root.Sub(subsection).Sub("subnet")) *x = SubnetConfig(*root.Sub(subsection).Sub("subnet"))
} }
// ExitZero returns value of "exit_zero" config parameter as bool. // ExitZero returns the value of "exit_zero" config parameter as bool.
// Returns false if value can not be cast. // Returns false if the value can not be cast.
func (x SubnetConfig) ExitZero() bool { func (x SubnetConfig) ExitZero() bool {
return config.BoolSafe((*config.Config)(&x), "exit_zero") return config.BoolSafe((*config.Config)(&x), "exit_zero")
} }
// IterateSubnets casts value of "entries" config parameter to string slice, // IterateSubnets casts the value of "entries" config parameter to string slice,
// iterates over all of its elements and passes them to f. // iterates over all of its elements and passes them to f.
// //
// Does nothing if value can not be cast to string slice. // Does nothing if the value can not be cast to string slice.
func (x SubnetConfig) IterateSubnets(f func(string)) { func (x SubnetConfig) IterateSubnets(f func(string)) {
ids := config.StringSliceSafe((*config.Config)(&x), "entries") ids := config.StringSliceSafe((*config.Config)(&x), "entries")
@ -214,34 +214,34 @@ func Notification(c *config.Config) NotificationConfig {
} }
} }
// Enabled returns value of "enabled" config parameter from "notification" // Enabled returns the value of "enabled" config parameter from "notification"
// subsection of "node" section. // subsection of "node" section.
// //
// Returns false if value is not presented. // Returns false if the value is not presented.
func (n NotificationConfig) Enabled() bool { func (n NotificationConfig) Enabled() bool {
return config.BoolSafe(n.cfg, "enabled") return config.BoolSafe(n.cfg, "enabled")
} }
// DefaultTopic returns value of "default_topic" config parameter from // DefaultTopic returns the value of "default_topic" config parameter from
// "notification" subsection of "node" section. // "notification" subsection of "node" section.
// //
// Returns empty string if value is not presented. // Returns empty string if the value is not presented.
func (n NotificationConfig) DefaultTopic() string { func (n NotificationConfig) DefaultTopic() string {
return config.StringSafe(n.cfg, "default_topic") return config.StringSafe(n.cfg, "default_topic")
} }
// Endpoint returns value of "endpoint" config parameter from "notification" // Endpoint returns the value of "endpoint" config parameter from "notification"
// subsection of "node" section. // subsection of "node" section.
// //
// Returns empty string if value is not presented. // Returns empty string if the value is not presented.
func (n NotificationConfig) Endpoint() string { func (n NotificationConfig) Endpoint() string {
return config.StringSafe(n.cfg, "endpoint") return config.StringSafe(n.cfg, "endpoint")
} }
// Timeout returns value of "timeout" config parameter from "notification" // Timeout returns the value of "timeout" config parameter from "notification"
// subsection of "node" section. // subsection of "node" section.
// //
// Returns NotificationTimeoutDefault if value is not positive. // Returns NotificationTimeoutDefault if the value is not positive.
func (n NotificationConfig) Timeout() time.Duration { func (n NotificationConfig) Timeout() time.Duration {
v := config.DurationSafe(n.cfg, "timeout") v := config.DurationSafe(n.cfg, "timeout")
if v > 0 { if v > 0 {
@ -251,26 +251,26 @@ func (n NotificationConfig) Timeout() time.Duration {
return NotificationTimeoutDefault return NotificationTimeoutDefault
} }
// CertPath returns value of "certificate_path" config parameter from "notification" // CertPath returns the value of "certificate_path" config parameter from "notification"
// subsection of "node" section. // subsection of "node" section.
// //
// Returns empty string if value is not presented. // Returns empty string if the value is not presented.
func (n NotificationConfig) CertPath() string { func (n NotificationConfig) CertPath() string {
return config.StringSafe(n.cfg, "certificate") return config.StringSafe(n.cfg, "certificate")
} }
// KeyPath returns value of "key_path" config parameter from // KeyPath returns the value of "key_path" config parameter from
// "notification" subsection of "node" section. // "notification" subsection of "node" section.
// //
// Returns empty string if value is not presented. // Returns empty string if the value is not presented.
func (n NotificationConfig) KeyPath() string { func (n NotificationConfig) KeyPath() string {
return config.StringSafe(n.cfg, "key") return config.StringSafe(n.cfg, "key")
} }
// CAPath returns value of "ca_path" config parameter from // CAPath returns the value of "ca_path" config parameter from
// "notification" subsection of "node" section. // "notification" subsection of "node" section.
// //
// Returns empty string if value is not presented. // Returns empty string if the value is not presented.
func (n NotificationConfig) CAPath() string { func (n NotificationConfig) CAPath() string {
return config.StringSafe(n.cfg, "ca") return config.StringSafe(n.cfg, "ca")
} }

View file

@ -28,9 +28,9 @@ func Put(c *config.Config) PutConfig {
} }
} }
// PoolSizeRemote returns value of "pool_size_remote" config parameter. // PoolSizeRemote returns the value of "pool_size_remote" config parameter.
// //
// Returns PutPoolSizeDefault if value is not positive number. // Returns PutPoolSizeDefault if the value is not a positive number.
func (g PutConfig) PoolSizeRemote() int { func (g PutConfig) PoolSizeRemote() int {
v := config.Int(g.cfg, "pool_size_remote") v := config.Int(g.cfg, "pool_size_remote")
if v > 0 { if v > 0 {

View file

@ -8,10 +8,10 @@ func defaultOpts() *opts {
return new(opts) return new(opts)
} }
// Option allows to set optional parameter of the Config. // Option allows to set an optional parameter of the Config.
type Option func(*opts) type Option func(*opts)
// WithConfigFile returns option to set system path // WithConfigFile returns an option to set the system path
// to the configuration file. // to the configuration file.
func WithConfigFile(path string) Option { func WithConfigFile(path string) Option {
return func(o *opts) { return func(o *opts) {

View file

@ -13,10 +13,10 @@ const (
HeadTimeoutDefault = 5 * time.Second HeadTimeoutDefault = 5 * time.Second
) )
// HeadTimeout returns value of "head_timeout" config parameter // HeadTimeout returns the value of "head_timeout" config parameter
// from "policer" section. // from "policer" section.
// //
// Returns HeadTimeoutDefault if value is not positive duration. // Returns HeadTimeoutDefault if the value is not positive duration.
func HeadTimeout(c *config.Config) time.Duration { func HeadTimeout(c *config.Config) time.Duration {
v := config.DurationSafe(c.Sub(subsection), "head_timeout") v := config.DurationSafe(c.Sub(subsection), "head_timeout")
if v > 0 { if v > 0 {

View file

@ -16,10 +16,10 @@ const (
AddressDefault = "" AddressDefault = ""
) )
// ShutdownTimeout returns value of "shutdown_timeout" config parameter // ShutdownTimeout returns the value of "shutdown_timeout" config parameter
// from "profiler" section. // from "profiler" section.
// //
// Returns ShutdownTimeoutDefault if value is not positive duration. // Returns ShutdownTimeoutDefault if the value is not positive duration.
func ShutdownTimeout(c *config.Config) time.Duration { func ShutdownTimeout(c *config.Config) time.Duration {
v := config.DurationSafe(c.Sub(subsection), "shutdown_timeout") v := config.DurationSafe(c.Sub(subsection), "shutdown_timeout")
if v > 0 { if v > 0 {
@ -29,10 +29,10 @@ func ShutdownTimeout(c *config.Config) time.Duration {
return ShutdownTimeoutDefault return ShutdownTimeoutDefault
} }
// Address returns value of "address" config parameter // Address returns the value of "address" config parameter
// from "profiler" section. // from "profiler" section.
// //
// Returns AddressDefault if value is not set. // Returns AddressDefault if the value is not set.
func Address(c *config.Config) string { func Address(c *config.Config) string {
v := config.StringSafe(c.Sub(subsection), "address") v := config.StringSafe(c.Sub(subsection), "address")
if v != "" { if v != "" {

View file

@ -13,10 +13,10 @@ const (
PutTimeoutDefault = 5 * time.Second PutTimeoutDefault = 5 * time.Second
) )
// PutTimeout returns value of "put_timeout" config parameter // PutTimeout returns the value of "put_timeout" config parameter
// from "replicator" section. // from "replicator" section.
// //
// Returns PutTimeoutDefault if value is not positive duration. // Returns PutTimeoutDefault if the value is not positive duration.
func PutTimeout(c *config.Config) time.Duration { func PutTimeout(c *config.Config) time.Duration {
v := config.DurationSafe(c.Sub(subsection), "put_timeout") v := config.DurationSafe(c.Sub(subsection), "put_timeout")
if v > 0 { if v > 0 {

View file

@ -11,7 +11,7 @@ import (
func fromFile(path string) *config.Config { func fromFile(path string) *config.Config {
var p config.Prm var p config.Prm
os.Clearenv() // ENVs have priority over config files so we do this in tests os.Clearenv() // ENVs have priority over config files, so we do this in tests
return config.New(p, return config.New(p,
config.WithConfigFile(path), config.WithConfigFile(path),

View file

@ -21,10 +21,10 @@ import (
const ( const (
newEpochNotification = "NewEpoch" newEpochNotification = "NewEpoch"
// notaryDepositExtraBlocks is amount of extra blocks to overlap two deposits, // notaryDepositExtraBlocks is the amount of extra blocks to overlap two deposits,
// we do that to make sure that there won't be any blocks without deposited // we do that to make sure that there won't be any blocks without deposited
// assets in notary contract; make sure it is bigger than any extra rounding // assets in a notary contract; make sure it is bigger than any extra rounding
// value in notary client. // value in a notary client.
notaryDepositExtraBlocks = 300 notaryDepositExtraBlocks = 300
// amount of tries(blocks) before notary deposit timeout. // amount of tries(blocks) before notary deposit timeout.

View file

@ -15,16 +15,16 @@ type clientCache interface {
Get(client.NodeInfo) (client.Client, error) Get(client.NodeInfo) (client.Client, error)
} }
// clientKeyRemoteProvider must provide remote writer and take into account // clientKeyRemoteProvider must provide a remote writer and take into account
// that requests must be sent via passed api client and must be signed with // that requests must be sent via the passed api client and must be signed with
// passed private key. // the passed private key.
type clientKeyRemoteProvider interface { type clientKeyRemoteProvider interface {
WithClient(client.Client) reputationcommon.WriterProvider WithClient(client.Client) reputationcommon.WriterProvider
} }
// remoteTrustProvider is implementation of reputation RemoteWriterProvider interface. // remoteTrustProvider is an implementation of reputation RemoteWriterProvider interface.
// It caches clients, checks if it is the end of the route and checks either current // It caches clients, checks if it is the end of the route and checks either the current
// node is remote target or not. // node is a remote target or not.
// //
// remoteTrustProvider requires to be provided with clientKeyRemoteProvider. // remoteTrustProvider requires to be provided with clientKeyRemoteProvider.
type remoteTrustProvider struct { type remoteTrustProvider struct {

View file

@ -27,7 +27,7 @@ func (NopReputationWriter) Close() error {
return nil return nil
} }
// OnlyKeyRemoteServerInfo if implementation of reputation.ServerInfo // OnlyKeyRemoteServerInfo is an implementation of reputation.ServerInfo
// interface but with only public key data. // interface but with only public key data.
type OnlyKeyRemoteServerInfo struct { type OnlyKeyRemoteServerInfo struct {
Key []byte Key []byte

View file

@ -11,7 +11,7 @@ import (
eigentrustctrl "github.com/nspcc-dev/neofs-node/pkg/services/reputation/eigentrust/controller" eigentrustctrl "github.com/nspcc-dev/neofs-node/pkg/services/reputation/eigentrust/controller"
) )
// InitialTrustSource is implementation of the // InitialTrustSource is an implementation of the
// reputation/eigentrust/calculator's InitialTrustSource interface. // reputation/eigentrust/calculator's InitialTrustSource interface.
type InitialTrustSource struct { type InitialTrustSource struct {
NetMap netmap.Source NetMap netmap.Source
@ -19,7 +19,7 @@ type InitialTrustSource struct {
var ErrEmptyNetMap = errors.New("empty NepMap") var ErrEmptyNetMap = errors.New("empty NepMap")
// InitialTrust returns `initialTrust` as initial trust value. // InitialTrust returns `initialTrust` as an initial trust value.
func (i InitialTrustSource) InitialTrust(reputation.PeerID) (reputation.TrustValue, error) { func (i InitialTrustSource) InitialTrust(reputation.PeerID) (reputation.TrustValue, error) {
nm, err := i.NetMap.GetNetMap(1) nm, err := i.NetMap.GetNetMap(1)
if err != nil { if err != nil {
@ -34,13 +34,13 @@ func (i InitialTrustSource) InitialTrust(reputation.PeerID) (reputation.TrustVal
return reputation.TrustOne.Div(nodeCount), nil return reputation.TrustOne.Div(nodeCount), nil
} }
// DaughtersTrustCalculator wraps EigenTrust calculator and implements // DaughtersTrustCalculator wraps EigenTrust calculator and implements the
// eigentrust/calculator's DaughtersTrustCalculator interface. // eigentrust/calculator's DaughtersTrustCalculator interface.
type DaughtersTrustCalculator struct { type DaughtersTrustCalculator struct {
Calculator *eigencalc.Calculator Calculator *eigencalc.Calculator
} }
// Calculate converts and passes values to wrapped calculator. // Calculate converts and passes values to the wrapped calculator.
func (c *DaughtersTrustCalculator) Calculate(ctx eigentrustctrl.IterationContext) { func (c *DaughtersTrustCalculator) Calculate(ctx eigentrustctrl.IterationContext) {
calcPrm := eigencalc.CalculatePrm{} calcPrm := eigencalc.CalculatePrm{}
epochIteration := eigentrust.EpochIteration{} epochIteration := eigentrust.EpochIteration{}

View file

@ -14,16 +14,16 @@ import (
var ErrIncorrectContextPanicMsg = "could not write intermediate trust: passed context incorrect" var ErrIncorrectContextPanicMsg = "could not write intermediate trust: passed context incorrect"
// ConsumerStorageWriterProvider is implementation of reputation.WriterProvider // ConsumerStorageWriterProvider is an implementation of the reputation.WriterProvider
// interface that provides ConsumerTrustWriter writer. // interface that provides ConsumerTrustWriter writer.
type ConsumerStorageWriterProvider struct { type ConsumerStorageWriterProvider struct {
Log *logger.Logger Log *logger.Logger
Storage *consumerstorage.Storage Storage *consumerstorage.Storage
} }
// ConsumerTrustWriter is implementation of reputation.Writer interface // ConsumerTrustWriter is an implementation of the reputation.Writer interface
// that writes passed consumer's Trust values to Consumer storage. After writing // that writes passed consumer's Trust values to the Consumer storage. After writing
// that values can be used in eigenTrust algorithm's iterations. // that, values can be used in eigenTrust algorithm's iterations.
type ConsumerTrustWriter struct { type ConsumerTrustWriter struct {
log *logger.Logger log *logger.Logger
storage *consumerstorage.Storage storage *consumerstorage.Storage

View file

@ -43,7 +43,7 @@ func NewFinalWriterProvider(prm FinalWriterProviderPrm, opts ...FinalWriterOptio
} }
} }
// FinalWriterProvider is implementation of reputation.eigentrust.calculator // FinalWriterProvider is an implementation of the reputation.eigentrust.calculator
// IntermediateWriterProvider interface. It inits FinalWriter. // IntermediateWriterProvider interface. It inits FinalWriter.
type FinalWriterProvider struct { type FinalWriterProvider struct {
prm FinalWriterProviderPrm prm FinalWriterProviderPrm
@ -60,7 +60,7 @@ func (fwp FinalWriterProvider) InitIntermediateWriter(
}, nil }, nil
} }
// FinalWriter is implementation of reputation.eigentrust.calculator IntermediateWriter // FinalWriter is an implementation of the reputation.eigentrust.calculator IntermediateWriter
// interface that writes GlobalTrust to contract directly. // interface that writes GlobalTrust to contract directly.
type FinalWriter struct { type FinalWriter struct {
privatKey *ecdsa.PrivateKey privatKey *ecdsa.PrivateKey

View file

@ -10,16 +10,16 @@ import (
"go.uber.org/zap" "go.uber.org/zap"
) )
// DaughterStorageWriterProvider is implementation of reputation.WriterProvider // DaughterStorageWriterProvider is an implementation of the reputation.WriterProvider
// interface that provides DaughterTrustWriter writer. // interface that provides DaughterTrustWriter writer.
type DaughterStorageWriterProvider struct { type DaughterStorageWriterProvider struct {
Log *logger.Logger Log *logger.Logger
Storage *daughters.Storage Storage *daughters.Storage
} }
// DaughterTrustWriter is implementation of reputation.Writer interface // DaughterTrustWriter is an implementation of the reputation.Writer interface
// that writes passed daughter's Trust values to Daughter storage. After writing // that writes passed daughter's Trust values to Daughter storage. After writing
// that values can be used in eigenTrust algorithm's iterations. // that, values can be used in eigenTrust algorithm's iterations.
type DaughterTrustWriter struct { type DaughterTrustWriter struct {
log *logger.Logger log *logger.Logger
storage *daughters.Storage storage *daughters.Storage

View file

@ -87,7 +87,7 @@ type RemoteTrustWriter struct {
log *logger.Logger log *logger.Logger
} }
// Write sends trust value to remote node via ReputationService.AnnounceIntermediateResult RPC. // Write sends a trust value to a remote node via ReputationService.AnnounceIntermediateResult RPC.
func (rtp *RemoteTrustWriter) Write(t reputation.Trust) error { func (rtp *RemoteTrustWriter) Write(t reputation.Trust) error {
epoch := rtp.eiCtx.Epoch() epoch := rtp.eiCtx.Epoch()
i := rtp.eiCtx.I() i := rtp.eiCtx.I()

View file

@ -10,14 +10,14 @@ import (
"github.com/nspcc-dev/neofs-node/pkg/services/reputation/eigentrust/storage/daughters" "github.com/nspcc-dev/neofs-node/pkg/services/reputation/eigentrust/storage/daughters"
) )
// DaughterTrustIteratorProvider is implementation of the // DaughterTrustIteratorProvider is an implementation of the
// reputation/eigentrust/calculator's DaughterTrustIteratorProvider interface. // reputation/eigentrust/calculator's DaughterTrustIteratorProvider interface.
type DaughterTrustIteratorProvider struct { type DaughterTrustIteratorProvider struct {
DaughterStorage *daughters.Storage DaughterStorage *daughters.Storage
ConsumerStorage *consumerstorage.Storage ConsumerStorage *consumerstorage.Storage
} }
// InitDaughterIterator returns iterator over received // InitDaughterIterator returns an iterator over the received
// local trusts for ctx.Epoch() epoch from daughter p. // local trusts for ctx.Epoch() epoch from daughter p.
func (ip *DaughterTrustIteratorProvider) InitDaughterIterator(ctx eigentrustcalc.Context, func (ip *DaughterTrustIteratorProvider) InitDaughterIterator(ctx eigentrustcalc.Context,
p reputation.PeerID) (eigentrustcalc.TrustIterator, error) { p reputation.PeerID) (eigentrustcalc.TrustIterator, error) {
@ -34,7 +34,7 @@ func (ip *DaughterTrustIteratorProvider) InitDaughterIterator(ctx eigentrustcalc
return daughterIterator, nil return daughterIterator, nil
} }
// InitAllDaughtersIterator returns iterator over all // InitAllDaughtersIterator returns an iterator over all
// daughters of the current node(manager) and all local // daughters of the current node(manager) and all local
// trusts received from them for ctx.Epoch() epoch. // trusts received from them for ctx.Epoch() epoch.
func (ip *DaughterTrustIteratorProvider) InitAllDaughtersIterator( func (ip *DaughterTrustIteratorProvider) InitAllDaughtersIterator(
@ -49,7 +49,7 @@ func (ip *DaughterTrustIteratorProvider) InitAllDaughtersIterator(
return iter, nil return iter, nil
} }
// InitConsumersIterator returns iterator over all daughters // InitConsumersIterator returns an iterator over all daughters
// of the current node(manager) and all their consumers' local // of the current node(manager) and all their consumers' local
// trusts for ctx.Epoch() epoch and ctx.I() iteration. // trusts for ctx.Epoch() epoch and ctx.I() iteration.
func (ip *DaughterTrustIteratorProvider) InitConsumersIterator( func (ip *DaughterTrustIteratorProvider) InitConsumersIterator(

View file

@ -15,7 +15,7 @@ type commonPrm struct {
ctx context.Context ctx context.Context
} }
// SetClient sets base client for NeoFS API communication. // SetClient sets the base client for NeoFS API communication.
// //
// Required parameter. // Required parameter.
func (x *commonPrm) SetClient(cli coreclient.Client) { func (x *commonPrm) SetClient(cli coreclient.Client) {
@ -36,24 +36,24 @@ type AnnounceLocalPrm struct {
cliPrm client.PrmAnnounceLocalTrust cliPrm client.PrmAnnounceLocalTrust
} }
// SetEpoch sets epoch in which the trust was assessed. // SetEpoch sets the epoch in which the trust was assessed.
func (x *AnnounceLocalPrm) SetEpoch(epoch uint64) { func (x *AnnounceLocalPrm) SetEpoch(epoch uint64) {
x.cliPrm.SetEpoch(epoch) x.cliPrm.SetEpoch(epoch)
} }
// SetTrusts sets list of local trust values. // SetTrusts sets a list of local trust values.
func (x *AnnounceLocalPrm) SetTrusts(ts []reputation.Trust) { func (x *AnnounceLocalPrm) SetTrusts(ts []reputation.Trust) {
x.cliPrm.SetValues(ts) x.cliPrm.SetValues(ts)
} }
// AnnounceLocalRes groups resulting values of AnnounceLocal operation. // AnnounceLocalRes groups the resulting values of AnnounceLocal operation.
type AnnounceLocalRes struct{} type AnnounceLocalRes struct{}
// AnnounceLocal sends estimations of local trust to the remote node. // AnnounceLocal sends estimations of local trust to the remote node.
// //
// Client, context and key must be set. // Client, context and key must be set.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
func AnnounceLocal(prm AnnounceLocalPrm) (res AnnounceLocalRes, err error) { func AnnounceLocal(prm AnnounceLocalPrm) (res AnnounceLocalRes, err error) {
var cliRes *client.ResAnnounceLocalTrust var cliRes *client.ResAnnounceLocalTrust
@ -73,30 +73,30 @@ type AnnounceIntermediatePrm struct {
cliPrm client.PrmAnnounceIntermediateTrust cliPrm client.PrmAnnounceIntermediateTrust
} }
// SetEpoch sets number of the epoch when the trust calculation's iteration was executed. // SetEpoch sets the number of the epoch when the trust calculation's iteration was executed.
func (x *AnnounceIntermediatePrm) SetEpoch(epoch uint64) { func (x *AnnounceIntermediatePrm) SetEpoch(epoch uint64) {
x.cliPrm.SetEpoch(epoch) x.cliPrm.SetEpoch(epoch)
} }
// SetIteration sets number of the iteration of the trust calculation algorithm. // SetIteration sets the number of the iteration of the trust calculation algorithm.
func (x *AnnounceIntermediatePrm) SetIteration(iter uint32) { func (x *AnnounceIntermediatePrm) SetIteration(iter uint32) {
x.cliPrm.SetIteration(iter) x.cliPrm.SetIteration(iter)
} }
// SetTrust sets current global trust value computed at the iteration. // SetTrust sets the current global trust value computed at the iteration.
func (x *AnnounceIntermediatePrm) SetTrust(t reputation.PeerToPeerTrust) { func (x *AnnounceIntermediatePrm) SetTrust(t reputation.PeerToPeerTrust) {
x.cliPrm.SetCurrentValue(t) x.cliPrm.SetCurrentValue(t)
} }
// AnnounceIntermediateRes groups resulting values of AnnounceIntermediate operation. // AnnounceIntermediateRes groups the resulting values of AnnounceIntermediate operation.
type AnnounceIntermediateRes struct{} type AnnounceIntermediateRes struct{}
// AnnounceIntermediate sends global trust value calculated at the specified iteration // AnnounceIntermediate sends the global trust value calculated at the specified iteration
// and epoch to to the remote node. // and epoch to to the remote node.
// //
// Client, context and key must be set. // Client, context and key must be set.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
func AnnounceIntermediate(prm AnnounceIntermediatePrm) (res AnnounceIntermediateRes, err error) { func AnnounceIntermediate(prm AnnounceIntermediatePrm) (res AnnounceIntermediateRes, err error) {
var cliRes *client.ResAnnounceIntermediateTrust var cliRes *client.ResAnnounceIntermediateTrust

View file

@ -4,8 +4,8 @@
// the Reputation service does not fully use the client's flexible interface. // the Reputation service does not fully use the client's flexible interface.
// //
// In this regard, this package provides functions over base API client necessary for the application. // In this regard, this package provides functions over base API client necessary for the application.
// This allows you to concentrate the entire spectrum of the client's use in one place (this will be convenient // This allows you to concentrate the entire spectrum of the client's use in one place (this will be convenient
// both when updating the base client and for evaluating the UX of SDK library). So it is expected that all // both when updating the base client and for evaluating the UX of SDK library). So, it is expected that all
// Reputation service packages will be limited to this package for the development of functionality requiring // Reputation service packages will be limited to this package for the development of functionality requiring
// NeoFS API communication. // NeoFS API communication.
package internal package internal

View file

@ -8,7 +8,7 @@ import (
// IterationHandler is a callback of a certain block advance. // IterationHandler is a callback of a certain block advance.
type IterationHandler func() type IterationHandler func()
// IterationsTicker represents fixed tick number block timer. // IterationsTicker represents a fixed tick number block timer.
// //
// It can tick the blocks and perform certain actions // It can tick the blocks and perform certain actions
// on block time intervals. // on block time intervals.
@ -25,12 +25,12 @@ type IterationsTicker struct {
// NewIterationsTicker creates a new IterationsTicker. // NewIterationsTicker creates a new IterationsTicker.
// //
// It guaranties that handler would be called the // It guaranties that a handler would be called the
// specified amount of times in the specified amount // specified amount of times in the specified amount
// of blocks. After the last meaningful Tick IterationsTicker // of blocks. After the last meaningful Tick, IterationsTicker
// becomes no-op timer. // becomes no-op timer.
// //
// Returns error only if times is greater than totalBlocks. // Returns an error only if times is greater than totalBlocks.
func NewIterationsTicker(totalBlocks uint64, times uint64, h IterationHandler) (*IterationsTicker, error) { func NewIterationsTicker(totalBlocks uint64, times uint64, h IterationHandler) (*IterationsTicker, error) {
period := totalBlocks / times period := totalBlocks / times

View file

@ -1,17 +1,17 @@
# N3 Mainnet Storage node configuration # N3 Mainnet Storage node configuration
Here is the template for simple storage node configuration in N3 Mainnet. Here is a template for simple storage node configuration in N3 Mainnet.
Make sure to specify correct values instead of `<...>` placeholders. Make sure to specify correct values instead of `<...>` placeholders.
Do not change `contracts` section. Run latest neofs-node release with Do not change `contracts` section. Run the latest neofs-node release with
fixed config `neofs-node -c config.yml` the fixed config `neofs-node -c config.yml`
To use NeoFS in the Mainnet you need to deposit assets to NeoFS contract. To use NeoFS in the Mainnet, you need to deposit assets to NeoFS contract.
The contract sript hash is `2cafa46838e8b564468ebd868dcafdd99dce6221` The contract sript hash is `2cafa46838e8b564468ebd868dcafdd99dce6221`
(N3 address `NNxVrKjLsRkWsmGgmuNXLcMswtxTGaNQLk`) (N3 address `NNxVrKjLsRkWsmGgmuNXLcMswtxTGaNQLk`)
## Tips ## Tips
Use `grpcs://` scheme in announced address if you enable TLS in grpc server. Use `grpcs://` scheme in the announced address if you enable TLS in grpc server.
```yaml ```yaml
node: node:
addresses: addresses:

View file

@ -1,7 +1,7 @@
# N3 Testnet Storage node configuration # N3 Testnet Storage node configuration
There is a prepared configuration for NeoFS Storage Node deployment in There is a prepared configuration for NeoFS Storage Node deployment in
N3 Testnet. The easiest way to deploy Storage Node is to use prepared N3 Testnet. The easiest way to deploy a Storage Node is to use the prepared
docker image and run it with docker-compose. docker image and run it with docker-compose.
## Build image ## Build image
@ -19,20 +19,20 @@ Successfully tagged nspccdev/neofs-storage-testnet:0.25.1
## Deploy node ## Deploy node
To run storage node in N3 Testnet environment you should deposit GAS assets, To run a storage node in N3 Testnet environment, you should deposit GAS assets,
update docker-compose file and start the node. update docker-compose file and start the node.
### Deposit ### Deposit
Storage Node owner should deposit GAS to NeoFS smart contract. It generates a The Storage Node owner should deposit GAS to NeoFS smart contract. It generates a
bit of side chain GAS in node's wallet. Side chain GAS used to send bootstrap tx. bit of sidechain GAS in the node's wallet. Sidechain GAS is used to send bootstrap tx.
First obtain GAS in N3 Testnet chain. You can do that with First, obtain GAS in N3 Testnet chain. You can do that with
[faucet](https://neowish.ngd.network) service. [faucet](https://neowish.ngd.network) service.
Then make a deposit by transferring GAS to NeoFS contract in N3 Testnet. Then, make a deposit by transferring GAS to NeoFS contract in N3 Testnet.
You can provide scripthash in the `data` argument of transfer tx to make a You can provide scripthash in the `data` argument of transfer tx to make a
deposit to specified account. Otherwise, deposit is made to tx sender. deposit to a specified account. Otherwise, deposit is made to the tx sender.
NeoFS contract scripthash in N3 Testnet is `b65d8243ac63983206d17e5221af0653a7266fa1`, NeoFS contract scripthash in N3 Testnet is `b65d8243ac63983206d17e5221af0653a7266fa1`,
so the address is `NadZ8YfvkddivcFFkztZgfwxZyKf1acpRF`. so the address is `NadZ8YfvkddivcFFkztZgfwxZyKf1acpRF`.
@ -49,7 +49,7 @@ neo-go wallet nep17 transfer -w wallet.json -r https://rpc01.testnet.n3.nspcc.ru
### Configure ### Configure
Then configure `node_config.env` file. Change endpoints values. Both Next, configure `node_config.env` file. Change endpoints values. Both
should contain your **public** IP. should contain your **public** IP.
``` ```
@ -79,8 +79,8 @@ Subdivision: [SPE] Sankt-Peterburg
Coordinates: 59.53, 30.15 Coordinates: 59.53, 30.15
``` ```
It is recommended to pass node's key as a file. To do so convert your wallet It is recommended to pass the node's key as a file. To do so, convert your wallet
WIF to 32-byte hex (via `neofs-cli` for example) and save it to file. WIF to 32-byte hex (via `neofs-cli` for example) and save it to a file.
``` ```
// Print WIF in a 32-byte hex format // Print WIF in a 32-byte hex format
@ -96,7 +96,7 @@ ScriptHash3.0BE dc4b0b44d01c16667880062e2fd4508f9939fedf
$ echo '11ab917cd99170cb8d0d48e78fca317564e6b3aaff7f7058952d6175cdca0f56' | xxd -r -p > my_wallet.key $ echo '11ab917cd99170cb8d0d48e78fca317564e6b3aaff7f7058952d6175cdca0f56' | xxd -r -p > my_wallet.key
``` ```
Then specify path to this file in `docker-compose.yml` Then, specify the path to this file in `docker-compose.yml`
```yaml ```yaml
volumes: volumes:
- neofs_storage:/storage - neofs_storage:/storage
@ -105,8 +105,8 @@ Then specify path to this file in `docker-compose.yml`
NeoFS objects will be stored on your machine. By default, docker-compose NeoFS objects will be stored on your machine. By default, docker-compose
configured to store objects in named docker volume `neofs_storage`. You can is configured to store objects in named docker volume `neofs_storage`. You can
specify directory on the filesystem to store objects there. specify a directory on the filesystem to store objects there.
```yaml ```yaml
volumes: volumes:
@ -116,12 +116,12 @@ specify directory on the filesystem to store objects there.
### Start ### Start
Run node with `docker-compose up` command and stop it with `docker-compose down`. Run the node with `docker-compose up` command and stop it with `docker-compose down`.
### Debug ### Debug
To print node logs use `docker logs neofs-testnet`. To print debug messages in To print node logs, use `docker logs neofs-testnet`. To print debug messages in
log, setup log level to debug with this env: log, set up log level to debug with this env:
```yaml ```yaml
environment: environment:

View file

@ -19,8 +19,8 @@ describing the most significant changes done in this release. Add
and changes. Describe each change in detail with a reference to GitHub issues if and changes. Describe each change in detail with a reference to GitHub issues if
possible. possible.
Update supported version of neofs-contract in `README.md` if there were Update the supported version of neofs-contract in `README.md` if there were
changes between releases. changes in releases.
## Tag the release ## Tag the release
@ -64,4 +64,4 @@ Close corresponding vX.Y.Z GitHub milestone.
Prepare pull-request for Prepare pull-request for
[neofs-devenv](https://github.com/nspcc-dev/neofs-devenv). [neofs-devenv](https://github.com/nspcc-dev/neofs-devenv).
Rebuild NeoFS LOCODE database via CLI `util locode generate` command (if needed). Rebuild NeoFS LOCODE database via CLI `util locode generate` command (if needed).

View file

@ -35,31 +35,31 @@ type MultiAddressClient interface {
RawForAddress(network.Address, func(cli *rawclient.Client) error) error RawForAddress(network.Address, func(cli *rawclient.Client) error) error
} }
// NodeInfo groups information about NeoFS storage node needed for Client construction. // NodeInfo groups information about a NeoFS storage node needed for Client construction.
type NodeInfo struct { type NodeInfo struct {
addrGroup network.AddressGroup addrGroup network.AddressGroup
key []byte key []byte
} }
// SetAddressGroup sets group of network addresses. // SetAddressGroup sets a group of network addresses.
func (x *NodeInfo) SetAddressGroup(v network.AddressGroup) { func (x *NodeInfo) SetAddressGroup(v network.AddressGroup) {
x.addrGroup = v x.addrGroup = v
} }
// AddressGroup returns group of network addresses. // AddressGroup returns a group of network addresses.
func (x NodeInfo) AddressGroup() network.AddressGroup { func (x NodeInfo) AddressGroup() network.AddressGroup {
return x.addrGroup return x.addrGroup
} }
// SetPublicKey sets public key in a binary format. // SetPublicKey sets a public key in a binary format.
// //
// Argument must not be mutated. // Argument must not be mutated.
func (x *NodeInfo) SetPublicKey(v []byte) { func (x *NodeInfo) SetPublicKey(v []byte) {
x.key = v x.key = v
} }
// PublicKey returns public key in a binary format. // PublicKey returns a public key in a binary format.
// //
// Result must not be mutated. // Result must not be mutated.
func (x *NodeInfo) PublicKey() []byte { func (x *NodeInfo) PublicKey() []byte {

View file

@ -33,7 +33,7 @@ func NodeInfoFromRawNetmapElement(dst *NodeInfo, info interface {
return nil return nil
} }
// NodeInfoFromNetmapElement fills NodeInfo structure from the interface of parsed netmap member's descriptor. // NodeInfoFromNetmapElement fills NodeInfo structure from the interface of the parsed netmap member's descriptor.
// //
// Args must not be nil. // Args must not be nil.
func NodeInfoFromNetmapElement(dst *NodeInfo, info interface { func NodeInfoFromNetmapElement(dst *NodeInfo, info interface {
@ -43,7 +43,7 @@ func NodeInfoFromNetmapElement(dst *NodeInfo, info interface {
nodeInfoFromKeyAddr(dst, info.PublicKey(), info.Addresses()) nodeInfoFromKeyAddr(dst, info.PublicKey(), info.Addresses())
} }
// AssertKeyResponseCallback returns client response callback which checks if the response was signed by expected key. // AssertKeyResponseCallback returns client response callback which checks if the response was signed by the expected key.
// Returns ErrWrongPublicKey in case of key mismatch. // Returns ErrWrongPublicKey in case of key mismatch.
func AssertKeyResponseCallback(expectedKey []byte) func(client.ResponseMetaInfo) error { func AssertKeyResponseCallback(expectedKey []byte) func(client.ResponseMetaInfo) error {
return func(info client.ResponseMetaInfo) error { return func(info client.ResponseMetaInfo) error {

View file

@ -15,36 +15,36 @@ type RemovalWitness struct {
token *session.Token token *session.Token
} }
// ContainerID returns identifier of the container // ContainerID returns the identifier of the container
// to be removed. // to be removed.
func (x RemovalWitness) ContainerID() *cid.ID { func (x RemovalWitness) ContainerID() *cid.ID {
return x.cid return x.cid
} }
// SetContainerID sets identifier of the container // SetContainerID sets the identifier of the container
// to be removed. // to be removed.
func (x *RemovalWitness) SetContainerID(id *cid.ID) { func (x *RemovalWitness) SetContainerID(id *cid.ID) {
x.cid = id x.cid = id
} }
// Signature returns signature of the container identifier. // Signature returns the signature of the container identifier.
func (x RemovalWitness) Signature() []byte { func (x RemovalWitness) Signature() []byte {
return x.sig return x.sig
} }
// SetSignature sets signature of the container identifier. // SetSignature sets a signature of the container identifier.
func (x *RemovalWitness) SetSignature(sig []byte) { func (x *RemovalWitness) SetSignature(sig []byte) {
x.sig = sig x.sig = sig
} }
// SessionToken returns token of the session within // SessionToken returns the token of the session within
// which container was removed. // which the container was removed.
func (x RemovalWitness) SessionToken() *session.Token { func (x RemovalWitness) SessionToken() *session.Token {
return x.token return x.token
} }
// SetSessionToken sets token of the session within // SetSessionToken sets the token of the session within
// which container was removed. // which the container was removed.
func (x *RemovalWitness) SetSessionToken(tok *session.Token) { func (x *RemovalWitness) SetSessionToken(tok *session.Token) {
x.token = tok x.token = tok
} }

View file

@ -18,7 +18,7 @@ var (
// CheckFormat conducts an initial check of the v2 container data. // CheckFormat conducts an initial check of the v2 container data.
// //
// It is expected that if a container fails this test, // It is expected that if a container fails this test,
// it will not be inner-ring approved. // it will not be approved by the inner ring.
func CheckFormat(c *container.Container) error { func CheckFormat(c *container.Container) error {
if c.PlacementPolicy() == nil { if c.PlacementPolicy() == nil {
return errNilPolicy return errNilPolicy

View file

@ -11,23 +11,23 @@ import (
// Source is an interface that wraps // Source is an interface that wraps
// basic container receiving method. // basic container receiving method.
type Source interface { type Source interface {
// Get reads the container from the storage by identifier. // Get reads the container from the storage by its identifier.
// It returns the pointer to requested container and any error encountered. // It returns the pointer to the requested container and any error encountered.
// //
// Get must return exactly one non-nil value. // Get must return exactly one non-nil value.
// Get must return an error of type apistatus.ContainerNotFound if the container is not in storage. // Get must return an error of type apistatus.ContainerNotFound if the container is not in the storage.
// //
// Implementations must not retain the container pointer and modify // Implementations must not retain the container pointer and modify
// the container through it. // the container through it.
Get(*cid.ID) (*container.Container, error) Get(*cid.ID) (*container.Container, error)
} }
// IsErrNotFound checks if error returned by Source.Get corresponds // IsErrNotFound checks if the error returned by Source.Get corresponds
// to missing container. // to the missing container.
func IsErrNotFound(err error) bool { func IsErrNotFound(err error) bool {
return errors.As(err, new(apistatus.ContainerNotFound)) return errors.As(err, new(apistatus.ContainerNotFound))
} }
// ErrEACLNotFound is returned by eACL storage implementations when // ErrEACLNotFound is returned by eACL storage implementations when
// requested eACL table is not in storage. // the requested eACL table is not in the storage.
var ErrEACLNotFound = errors.New("extended ACL table is not set for this container") var ErrEACLNotFound = errors.New("extended ACL table is not set for this container")

View file

@ -1,7 +1,7 @@
package netmap package netmap
// AnnouncedKeys is an interface of utility for working with announced public keys of the storage nodes. // AnnouncedKeys is an interface of utility for working with the announced public keys of the storage nodes.
type AnnouncedKeys interface { type AnnouncedKeys interface {
// Checks if key was announced by local node. // Checks if the key was announced by a local node.
IsLocalKey(key []byte) bool IsLocalKey(key []byte) bool
} }

View file

@ -1,7 +1,7 @@
package netmap package netmap
// State groups current system state parameters. // State groups the current system state parameters.
type State interface { type State interface {
// CurrentEpoch returns number of current NeoFS epoch. // CurrentEpoch returns the number of the current NeoFS epoch.
CurrentEpoch() uint64 CurrentEpoch() uint64
} }

View file

@ -8,18 +8,18 @@ import (
// basic network map receiving method. // basic network map receiving method.
type Source interface { type Source interface {
// GetNetMap reads the diff-th past network map from the storage. // GetNetMap reads the diff-th past network map from the storage.
// Calling with zero diff returns latest network map. // Calling with zero diff returns the latest network map.
// It returns the pointer to requested network map and any error encountered. // It returns the pointer to the requested network map and any error encountered.
// //
// GetNetMap must return exactly one non-nil value. // GetNetMap must return exactly one non-nil value.
// GetNetMap must return ErrNotFound if the network map is not in storage. // GetNetMap must return ErrNotFound if the network map is not in the storage.
// //
// Implementations must not retain the network map pointer and modify // Implementations must not retain the network map pointer and modify
// the network map through it. // the network map through it.
GetNetMap(diff uint64) (*netmap.Netmap, error) GetNetMap(diff uint64) (*netmap.Netmap, error)
// GetNetMapByEpoch reads network map by the epoch number from the storage. // GetNetMapByEpoch reads network map by the epoch number from the storage.
// It returns the pointer to requested network map and any error encountered. // It returns the pointer to the requested network map and any error encountered.
// //
// Must return exactly one non-nil value. // Must return exactly one non-nil value.
// //
@ -27,19 +27,19 @@ type Source interface {
// the network map through it. // the network map through it.
GetNetMapByEpoch(epoch uint64) (*netmap.Netmap, error) GetNetMapByEpoch(epoch uint64) (*netmap.Netmap, error)
// Epoch reads current epoch from the storage. // Epoch reads the current epoch from the storage.
// It returns number of the current epoch and any error encountered. // It returns thw number of the current epoch and any error encountered.
// //
// Must return exactly one non-default value. // Must return exactly one non-default value.
Epoch() (uint64, error) Epoch() (uint64, error)
} }
// GetLatestNetworkMap requests and returns latest network map from storage. // GetLatestNetworkMap requests and returns the latest network map from the storage.
func GetLatestNetworkMap(src Source) (*netmap.Netmap, error) { func GetLatestNetworkMap(src Source) (*netmap.Netmap, error) {
return src.GetNetMap(0) return src.GetNetMap(0)
} }
// GetPreviousNetworkMap requests and returns previous from latest network map from storage. // GetPreviousNetworkMap requests and returns previous from the latest network map from the storage.
func GetPreviousNetworkMap(src Source) (*netmap.Netmap, error) { func GetPreviousNetworkMap(src Source) (*netmap.Netmap, error) {
return src.GetNetMap(1) return src.GetNetMap(1)
} }

View file

@ -19,12 +19,12 @@ import (
"github.com/nspcc-dev/neofs-sdk-go/storagegroup" "github.com/nspcc-dev/neofs-sdk-go/storagegroup"
) )
// FormatValidator represents object format validator. // FormatValidator represents an object format validator.
type FormatValidator struct { type FormatValidator struct {
*cfg *cfg
} }
// FormatValidatorOption represents FormatValidator constructor option. // FormatValidatorOption represents a FormatValidator constructor option.
type FormatValidatorOption func(*cfg) type FormatValidatorOption func(*cfg)
type cfg struct { type cfg struct {
@ -37,7 +37,7 @@ type cfg struct {
// DeleteHandler is an interface of delete queue processor. // DeleteHandler is an interface of delete queue processor.
type DeleteHandler interface { type DeleteHandler interface {
// DeleteObjects objects places objects to removal queue. // DeleteObjects places objects to a removal queue.
// //
// Returns apistatus.LockNonRegularObject if at least one object // Returns apistatus.LockNonRegularObject if at least one object
// is locked. // is locked.
@ -85,7 +85,7 @@ func NewFormatValidator(opts ...FormatValidatorOption) *FormatValidator {
// Does not validate payload checksum and content. // Does not validate payload checksum and content.
// If unprepared is true, only fields set by user are validated. // If unprepared is true, only fields set by user are validated.
// //
// Returns nil error if object has valid structure. // Returns nil error if the object has valid structure.
func (v *FormatValidator) Validate(obj *object.Object, unprepared bool) error { func (v *FormatValidator) Validate(obj *object.Object, unprepared bool) error {
if obj == nil { if obj == nil {
return errNilObject return errNilObject
@ -153,7 +153,7 @@ func (v *FormatValidator) checkOwnerKey(id *owner.ID, key []byte) error {
return nil return nil
} }
// ValidateContent validates payload content according to object type. // ValidateContent validates payload content according to the object type.
func (v *FormatValidator) ValidateContent(o *object.Object) error { func (v *FormatValidator) ValidateContent(o *object.Object) error {
switch o.Type() { switch o.Type() {
case object.TypeRegular: case object.TypeRegular:
@ -169,7 +169,7 @@ func (v *FormatValidator) ValidateContent(o *object.Object) error {
return fmt.Errorf("(%T) could not unmarshal tombstone content: %w", v, err) return fmt.Errorf("(%T) could not unmarshal tombstone content: %w", v, err)
} }
// check if tombstone has the same expiration in body and header // check if the tombstone has the same expiration in the body and the header
exp, err := expirationEpochAttribute(o) exp, err := expirationEpochAttribute(o)
if err != nil { if err != nil {
return err return err
@ -179,7 +179,7 @@ func (v *FormatValidator) ValidateContent(o *object.Object) error {
return errTombstoneExpiration return errTombstoneExpiration
} }
// mark all objects from tombstone body as removed in storage engine // mark all objects from the tombstone body as removed in the storage engine
cid := o.ContainerID() cid := o.ContainerID()
idList := tombstone.Members() idList := tombstone.Members()
addrList := make([]*addressSDK.Address, 0, len(idList)) addrList := make([]*addressSDK.Address, 0, len(idList))
@ -226,7 +226,7 @@ func (v *FormatValidator) ValidateContent(o *object.Object) error {
return errors.New("missing locked members") return errors.New("missing locked members")
} }
// mark all objects from lock list as locked in storage engine // mark all objects from lock list as locked in the storage engine
locklist := make([]oid.ID, num) locklist := make([]oid.ID, num)
lock.ReadMembers(locklist) lock.ReadMembers(locklist)
@ -303,7 +303,7 @@ func (v *FormatValidator) checkAttributes(obj *object.Object) error {
var errIncorrectOwner = errors.New("incorrect object owner") var errIncorrectOwner = errors.New("incorrect object owner")
func (v *FormatValidator) checkOwner(obj *object.Object) error { func (v *FormatValidator) checkOwner(obj *object.Object) error {
// TODO: use appropriate functionality after neofs-api-go#352 // TODO: use an appropriate functionality after neofs-api-go#352
if len(obj.OwnerID().ToV2().GetValue()) != owner.NEO3WalletSize { if len(obj.OwnerID().ToV2().GetValue()) != owner.NEO3WalletSize {
return errIncorrectOwner return errIncorrectOwner
} }
@ -311,21 +311,21 @@ func (v *FormatValidator) checkOwner(obj *object.Object) error {
return nil return nil
} }
// WithNetState returns options to set network state interface. // WithNetState returns options to set the network state interface.
func WithNetState(netState netmap.State) FormatValidatorOption { func WithNetState(netState netmap.State) FormatValidatorOption {
return func(c *cfg) { return func(c *cfg) {
c.netState = netState c.netState = netState
} }
} }
// WithDeleteHandler returns option to set delete queue processor. // WithDeleteHandler returns an option to set delete queue processor.
func WithDeleteHandler(v DeleteHandler) FormatValidatorOption { func WithDeleteHandler(v DeleteHandler) FormatValidatorOption {
return func(c *cfg) { return func(c *cfg) {
c.deleteHandler = v c.deleteHandler = v
} }
} }
// WithLocker returns option to set object lock storage. // WithLocker returns an option to set object lock storage.
func WithLocker(v Locker) FormatValidatorOption { func WithLocker(v Locker) FormatValidatorOption {
return func(c *cfg) { return func(c *cfg) {
c.locker = v c.locker = v

View file

@ -5,7 +5,7 @@ import (
addressSDK "github.com/nspcc-dev/neofs-sdk-go/object/address" addressSDK "github.com/nspcc-dev/neofs-sdk-go/object/address"
) )
// AddressOf returns address of the object. // AddressOf returns the address of the object.
func AddressOf(obj *object.Object) *addressSDK.Address { func AddressOf(obj *object.Object) *addressSDK.Address {
if obj != nil { if obj != nil {
addr := addressSDK.NewAddress() addr := addressSDK.NewAddress()

View file

@ -2,11 +2,11 @@ package config
/* /*
Config package contains GlobalConfig structure that implements config Config package contains GlobalConfig structure that implements config
reader from both local and global configurations. Most of the time inner ring reader from both local and global configurations. Most of the time the inner ring
does not need this, as for application it has static config with timeouts, does not need this; as for application, it has static config with timeouts,
caches sizes etc. However there are routines that use global configuration caches sizes etc. However, there are routines that use global configuration
values that can be changed in runtime, e.g. basic income rate. Local values that can be changed in runtime, e.g. basic income rate. Local
configuration value overrides global one so it is easy to debug and test configuration value overrides the global one so it is easy to debug and test
in different environments. in different environments.
Implemented as a part of https://github.com/nspcc-dev/neofs-node/issues/363 Implemented as a part of https://github.com/nspcc-dev/neofs-node/issues/363

View file

@ -46,13 +46,13 @@ type IrFetcherWithoutNotary struct {
} }
// InnerRingKeys fetches list of innerring keys from NeoFSAlphabet // InnerRingKeys fetches list of innerring keys from NeoFSAlphabet
// role in side chain. // role in the sidechain.
func (fN IrFetcherWithNotary) InnerRingKeys() (keys.PublicKeys, error) { func (fN IrFetcherWithNotary) InnerRingKeys() (keys.PublicKeys, error) {
return fN.cli.NeoFSAlphabetList() return fN.cli.NeoFSAlphabetList()
} }
// InnerRingKeys fetches list of innerring keys from netmap contract // InnerRingKeys fetches list of innerring keys from netmap contract
// in side chain. // in the sidechain.
func (f IrFetcherWithoutNotary) InnerRingKeys() (keys.PublicKeys, error) { func (f IrFetcherWithoutNotary) InnerRingKeys() (keys.PublicKeys, error) {
return f.nm.GetInnerRingList() return f.nm.GetInnerRingList()
} }

View file

@ -24,12 +24,12 @@ type Client struct {
c clientcore.Client c clientcore.Client
} }
// WrapBasicClient wraps client.Client instance to use it for NeoFS API RPC. // WrapBasicClient wraps a client.Client instance to use it for NeoFS API RPC.
func (x *Client) WrapBasicClient(c clientcore.Client) { func (x *Client) WrapBasicClient(c clientcore.Client) {
x.c = c x.c = c
} }
// SetPrivateKey sets private key to sign RPC requests. // SetPrivateKey sets a private key to sign RPC requests.
func (x *Client) SetPrivateKey(key *ecdsa.PrivateKey) { func (x *Client) SetPrivateKey(key *ecdsa.PrivateKey) {
x.key = key x.key = key
} }
@ -41,17 +41,17 @@ type SearchSGPrm struct {
cnrID *cid.ID cnrID *cid.ID
} }
// SetContainerID sets ID of the container to search for storage groups. // SetContainerID sets the ID of the container to search for storage groups.
func (x *SearchSGPrm) SetContainerID(id *cid.ID) { func (x *SearchSGPrm) SetContainerID(id *cid.ID) {
x.cnrID = id x.cnrID = id
} }
// SearchSGRes groups resulting values of SearchSG operation. // SearchSGRes groups the resulting values of SearchSG operation.
type SearchSGRes struct { type SearchSGRes struct {
cliRes []oid.ID cliRes []oid.ID
} }
// IDList returns list of IDs of storage groups in container. // IDList returns a list of IDs of storage groups in the container.
func (x SearchSGRes) IDList() []oid.ID { func (x SearchSGRes) IDList() []oid.ID {
return x.cliRes return x.cliRes
} }
@ -60,7 +60,7 @@ var sgFilter = storagegroup.SearchQuery()
// SearchSG lists objects of storage group type in the container. // SearchSG lists objects of storage group type in the container.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
func (x Client) SearchSG(prm SearchSGPrm) (*SearchSGRes, error) { func (x Client) SearchSG(prm SearchSGPrm) (*SearchSGRes, error) {
var cliPrm client.PrmObjectSearch var cliPrm client.PrmObjectSearch
@ -109,19 +109,19 @@ type GetObjectPrm struct {
getObjectPrm getObjectPrm
} }
// GetObjectRes groups resulting values of GetObject operation. // GetObjectRes groups the resulting values of GetObject operation.
type GetObjectRes struct { type GetObjectRes struct {
obj *object.Object obj *object.Object
} }
// Object returns received object. // Object returns the received object.
func (x GetObjectRes) Object() *object.Object { func (x GetObjectRes) Object() *object.Object {
return x.obj return x.obj
} }
// GetObject reads the object by address. // GetObject reads the object by address.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
func (x Client) GetObject(prm GetObjectPrm) (*GetObjectRes, error) { func (x Client) GetObject(prm GetObjectPrm) (*GetObjectRes, error) {
var cliPrm client.PrmObjectGet var cliPrm client.PrmObjectGet
@ -185,20 +185,20 @@ func (x *HeadObjectPrm) SetTTL(ttl uint32) {
x.local = ttl < 2 x.local = ttl < 2
} }
// HeadObjectRes groups resulting values of HeadObject operation. // HeadObjectRes groups the resulting values of HeadObject operation.
type HeadObjectRes struct { type HeadObjectRes struct {
hdr *object.Object hdr *object.Object
} }
// Header returns received object header. // Header returns the received object header.
func (x HeadObjectRes) Header() *object.Object { func (x HeadObjectRes) Header() *object.Object {
return x.hdr return x.hdr
} }
// HeadObject reads short object header by address. // HeadObject reads short object header by address.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
// For raw requests, returns *object.SplitInfoError error if requested object is virtual. // For raw requests, returns *object.SplitInfoError error if the requested object is virtual.
func (x Client) HeadObject(prm HeadObjectPrm) (*HeadObjectRes, error) { func (x Client) HeadObject(prm HeadObjectPrm) (*HeadObjectRes, error) {
var cliPrm client.PrmObjectHead var cliPrm client.PrmObjectHead
@ -239,9 +239,9 @@ func (x Client) HeadObject(prm HeadObjectPrm) (*HeadObjectRes, error) {
}, nil }, nil
} }
// GetObjectPayload reads object by address from NeoFS via Client and returns its payload. // GetObjectPayload reads an object by address from NeoFS via Client and returns its payload.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
func GetObjectPayload(ctx context.Context, c Client, addr *addressSDK.Address) ([]byte, error) { func GetObjectPayload(ctx context.Context, c Client, addr *addressSDK.Address) ([]byte, error) {
var prm GetObjectPrm var prm GetObjectPrm
@ -275,12 +275,12 @@ func headObject(ctx context.Context, c Client, addr *addressSDK.Address, raw boo
return obj.Header(), nil return obj.Header(), nil
} }
// GetRawObjectHeaderLocally reads raw short object header from server's local storage by address via Client. // GetRawObjectHeaderLocally reads the raw short object header from the server's local storage by address via Client.
func GetRawObjectHeaderLocally(ctx context.Context, c Client, addr *addressSDK.Address) (*object.Object, error) { func GetRawObjectHeaderLocally(ctx context.Context, c Client, addr *addressSDK.Address) (*object.Object, error) {
return headObject(ctx, c, addr, true, 1) return headObject(ctx, c, addr, true, 1)
} }
// GetObjectHeaderFromContainer reads short object header by address via Client with TTL = 10 // GetObjectHeaderFromContainer reads the short object header by address via Client with TTL = 10
// for deep traversal of the container. // for deep traversal of the container.
func GetObjectHeaderFromContainer(ctx context.Context, c Client, addr *addressSDK.Address) (*object.Object, error) { func GetObjectHeaderFromContainer(ctx context.Context, c Client, addr *addressSDK.Address) (*object.Object, error) {
return headObject(ctx, c, addr, false, 10) return headObject(ctx, c, addr, false, 10)
@ -298,12 +298,12 @@ func (x *HashPayloadRangePrm) SetRange(rng *object.Range) {
x.rng = rng x.rng = rng
} }
// HashPayloadRangeRes groups resulting values of HashPayloadRange operation. // HashPayloadRangeRes groups the resulting values of HashPayloadRange operation.
type HashPayloadRangeRes struct { type HashPayloadRangeRes struct {
h []byte h []byte
} }
// Hash returns hash of the object payload range. // Hash returns the hash of the object payload range.
func (x HashPayloadRangeRes) Hash() []byte { func (x HashPayloadRangeRes) Hash() []byte {
return x.h return x.h
} }
@ -311,7 +311,7 @@ func (x HashPayloadRangeRes) Hash() []byte {
// HashPayloadRange requests to calculate Tillich-Zemor hash of the payload range of the object // HashPayloadRange requests to calculate Tillich-Zemor hash of the payload range of the object
// from the remote server's local storage. // from the remote server's local storage.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
func (x Client) HashPayloadRange(prm HashPayloadRangePrm) (res HashPayloadRangeRes, err error) { func (x Client) HashPayloadRange(prm HashPayloadRangePrm) (res HashPayloadRangeRes, err error) {
var cliPrm client.PrmObjectHash var cliPrm client.PrmObjectHash
@ -348,7 +348,7 @@ func (x Client) HashPayloadRange(prm HashPayloadRangePrm) (res HashPayloadRangeR
// HashObjectRange reads Tillich-Zemor hash of the object payload range by address // HashObjectRange reads Tillich-Zemor hash of the object payload range by address
// from the remote server's local storage via Client. // from the remote server's local storage via Client.
// //
// Returns any error prevented the operation from completing correctly in error return. // Returns any error which prevented the operation from completing correctly in error return.
func HashObjectRange(ctx context.Context, c Client, addr *addressSDK.Address, rng *object.Range) ([]byte, error) { func HashObjectRange(ctx context.Context, c Client, addr *addressSDK.Address, rng *object.Range) ([]byte, error) {
var prm HashPayloadRangePrm var prm HashPayloadRangePrm

View file

@ -4,9 +4,9 @@
// However, although it encapsulates a useful piece of business logic (e.g. the signature mechanism), // However, although it encapsulates a useful piece of business logic (e.g. the signature mechanism),
// the IR application does not fully use the client's flexible interface. // the IR application does not fully use the client's flexible interface.
// //
// In this regard, this package represents an abstraction - a type-wrapper over the base client. // In this regard, this package represents an abstraction -- a type-wrapper over the base client.
// The type provides the minimum interface necessary for the application, and also allows you to concentrate // The type provides the minimum interface necessary for the application and also allows you to concentrate
// the entire spectrum of the client's use in one place (this will be convenient both when updating the base client // the entire spectrum of the client's use in one place (this will be convenient both when updating the base client
// and for evaluating the UX of SDK library). So it is expected that all application packages will be limited // and for evaluating the UX of SDK library). So, it is expected that all application packages will be limited
// to this package for the development of functionality requiring NeoFS API communication. // to this package for the development of functionality requiring NeoFS API communication.
package neofsapiclient package neofsapiclient

View file

@ -21,16 +21,16 @@ type (
// Contracts is an interface of the storage // Contracts is an interface of the storage
// of the alphabet contract addresses. // of the alphabet contract addresses.
Contracts interface { Contracts interface {
// GetByIndex must return address of the // GetByIndex must return the address of the
// alphabet contract by index of the glagolitic // alphabet contract by index of the glagolitic
// letter (e.g 0 for Az, 40 for Izhitsa). // letter (e.g 0 for Az, 40 for Izhitsa).
// //
// Must return false if index does not // Must return false if the index does not
// match to any alphabet contract. // match any alphabet contract.
GetByIndex(int) (util.Uint160, bool) GetByIndex(int) (util.Uint160, bool)
} }
// Processor of events produced for alphabet contracts in sidechain. // Processor of events produced for alphabet contracts in the sidechain.
Processor struct { Processor struct {
log *zap.Logger log *zap.Logger
pool *ants.Pool pool *ants.Pool
@ -53,7 +53,7 @@ type (
} }
) )
// New creates neofs mainnet contract processor instance. // New creates a neofs mainnet contract processor instance.
func New(p *Params) (*Processor, error) { func New(p *Params) (*Processor, error) {
switch { switch {
case p.Log == nil: case p.Log == nil:

View file

@ -1,11 +1,11 @@
package audit package audit
// Start is a event to start new round of data audit. // Start is an event to start a new round of data audit.
type Start struct { type Start struct {
epoch uint64 epoch uint64
} }
// MorphEvent implements Event interface. // MorphEvent implements the Event interface.
func (a Start) MorphEvent() {} func (a Start) MorphEvent() {}
func NewAuditStartEvent(epoch uint64) Start { func NewAuditStartEvent(epoch uint64) Start {

View file

@ -12,7 +12,7 @@ func (ap *Processor) handleNewAuditRound(ev event.Event) {
ap.log.Info("new round of audit", zap.Uint64("epoch", epoch)) ap.log.Info("new round of audit", zap.Uint64("epoch", epoch))
// send event to the worker pool // send an event to the worker pool
err := ap.pool.Submit(func() { ap.processStartAudit(epoch) }) err := ap.pool.Submit(func() { ap.processStartAudit(epoch) })
if err != nil { if err != nil {

View file

@ -33,7 +33,7 @@ type (
Reset() int Reset() int
} }
// Processor of events related with data audit. // Processor of events related to data audit.
Processor struct { Processor struct {
log *zap.Logger log *zap.Logger
pool *ants.Pool pool *ants.Pool
@ -77,22 +77,22 @@ func (x SearchSGPrm) Context() context.Context {
return x.ctx return x.ctx
} }
// CID returns identifier of the container to search SG in. // CID returns the identifier of the container to search SG in.
func (x SearchSGPrm) CID() *cid.ID { func (x SearchSGPrm) CID() *cid.ID {
return x.id return x.id
} }
// NodeInfo returns information about storage node to communicate with. // NodeInfo returns information about a storage node to communicate with.
func (x SearchSGPrm) NodeInfo() client.NodeInfo { func (x SearchSGPrm) NodeInfo() client.NodeInfo {
return x.info return x.info
} }
// SearchSGDst groups target values which Processor expects from SG searching to process. // SearchSGDst groups the target values which Processor expects from SG searching to process.
type SearchSGDst struct { type SearchSGDst struct {
ids []oidSDK.ID ids []oidSDK.ID
} }
// WriteIDList writes list of identifiers of storage group objects stored in the container. // WriteIDList writes a list of identifiers of storage group objects stored in the container.
func (x *SearchSGDst) WriteIDList(ids []oidSDK.ID) { func (x *SearchSGDst) WriteIDList(ids []oidSDK.ID) {
x.ids = ids x.ids = ids
} }
@ -112,8 +112,8 @@ type epochAuditReporter struct {
} }
// ProcessorPoolSize limits pool size for audit Processor. Processor manages // ProcessorPoolSize limits pool size for audit Processor. Processor manages
// audit tasks and fills queue for next epoch. This process must not be interrupted // audit tasks and fills queue for the next epoch. This process must not be interrupted
// by new audit epoch, so we limit pool size for processor to one. // by a new audit epoch, so we limit the pool size for the processor to one.
const ProcessorPoolSize = 1 const ProcessorPoolSize = 1
// New creates audit processor instance. // New creates audit processor instance.

View file

@ -14,7 +14,7 @@ func (bp *Processor) handleLock(ev event.Event) {
zap.String("type", "lock"), zap.String("type", "lock"),
zap.String("value", hex.EncodeToString(lock.ID()))) zap.String("value", hex.EncodeToString(lock.ID())))
// send event to the worker pool // send an event to the worker pool
err := bp.pool.Submit(func() { bp.processLock(&lock) }) err := bp.pool.Submit(func() { bp.processLock(&lock) })
if err != nil { if err != nil {

View file

@ -22,7 +22,7 @@ type (
ToFixed8(int64) int64 ToFixed8(int64) int64
} }
// Processor of events produced by balance contract in morph chain. // Processor of events produced by balance contract in the morphchain.
Processor struct { Processor struct {
log *zap.Logger log *zap.Logger
pool *ants.Pool pool *ants.Pool
@ -45,7 +45,7 @@ const (
lockNotification = "Lock" lockNotification = "Lock"
) )
// New creates balance contract processor instance. // New creates a balance contract processor instance.
func New(p *Params) (*Processor, error) { func New(p *Params) (*Processor, error) {
switch { switch {
case p.Log == nil: case p.Log == nil:

View file

@ -17,7 +17,7 @@ func (cp *Processor) handlePut(ev event.Event) {
zap.String("type", "container put"), zap.String("type", "container put"),
zap.String("id", base58.Encode(id[:]))) zap.String("id", base58.Encode(id[:])))
// send event to the worker pool // send an event to the worker pool
err := cp.pool.Submit(func() { cp.processContainerPut(put) }) err := cp.pool.Submit(func() { cp.processContainerPut(put) })
if err != nil { if err != nil {
@ -33,7 +33,7 @@ func (cp *Processor) handleDelete(ev event.Event) {
zap.String("type", "container delete"), zap.String("type", "container delete"),
zap.String("id", base58.Encode(del.ContainerID()))) zap.String("id", base58.Encode(del.ContainerID())))
// send event to the worker pool // send an event to the worker pool
err := cp.pool.Submit(func() { cp.processContainerDelete(&del) }) err := cp.pool.Submit(func() { cp.processContainerDelete(&del) })
if err != nil { if err != nil {
@ -50,7 +50,7 @@ func (cp *Processor) handleSetEACL(ev event.Event) {
zap.String("type", "set EACL"), zap.String("type", "set EACL"),
) )
// send event to the worker pool // send an event to the worker pool
err := cp.pool.Submit(func() { err := cp.pool.Submit(func() {
cp.processSetEACL(e) cp.processSetEACL(e)

View file

@ -38,8 +38,8 @@ type putContainerContext struct {
name, zone string // from container structure name, zone string // from container structure
} }
// Process new container from the user by checking container sanity // Process a new container from the user by checking the container sanity
// and sending approve tx back to morph. // and sending approve tx back to the morph.
func (cp *Processor) processContainerPut(put putEvent) { func (cp *Processor) processContainerPut(put putEvent) {
if !cp.alphabetState.IsAlphabet() { if !cp.alphabetState.IsAlphabet() {
cp.log.Info("non alphabet mode, ignore container put") cp.log.Info("non alphabet mode, ignore container put")

View file

@ -78,7 +78,7 @@ func (cp *Processor) checkSetEACL(e container.SetEACL) error {
} }
} }
// statement below is a little hack, but if we write token from event to container, // statement below is a little hack, but if we write a token from an event to the container,
// checkKeyOwnership method will work just as it should: // checkKeyOwnership method will work just as it should:
// * tok == nil => we will check if key is a container owner's key // * tok == nil => we will check if key is a container owner's key
// * tok != nil => we will check if token was signed correctly (context is checked at the statement above) // * tok != nil => we will check if token was signed correctly (context is checked at the statement above)

View file

@ -20,7 +20,7 @@ type (
IsAlphabet() bool IsAlphabet() bool
} }
// Processor of events produced by container contract in morph chain. // Processor of events produced by container contract in the sidechain.
Processor struct { Processor struct {
log *zap.Logger log *zap.Logger
pool *ants.Pool pool *ants.Pool
@ -48,7 +48,7 @@ type (
// NetworkState is an interface of a component // NetworkState is an interface of a component
// that provides access to network state. // that provides access to network state.
type NetworkState interface { type NetworkState interface {
// Epoch must return number of the current epoch. // Epoch must return the number of the current epoch.
// //
// Must return any error encountered // Must return any error encountered
// which did not allow reading the value. // which did not allow reading the value.
@ -62,7 +62,7 @@ const (
setEACLNotification = "setEACL" setEACLNotification = "setEACL"
) )
// New creates container contract processor instance. // New creates a container contract processor instance.
func New(p *Params) (*Processor, error) { func New(p *Params) (*Processor, error) {
switch { switch {
case p.Log == nil: case p.Log == nil:

View file

@ -14,11 +14,11 @@ var (
errEmptySidechain = errors.New("sidechain list is empty") errEmptySidechain = errors.New("sidechain list is empty")
) )
// newAlphabetList returns updated list of sidechain keys with no more than 1\3 // newAlphabetList returns an updated list of sidechain keys with no more than 1\3
// of new keys from mainnet list. Function returns `errEmptySidechain` if // of new keys from the mainnet list. The function returns `errEmptySidechain` if
// sidechain list is empty. Function returns `errNotEnoughKeys` if mainnet // the sidechain list is empty. The function returns `errNotEnoughKeys` if the mainnet
// list contains less keys than sidechain list. Function returns (nil, nil) if // list contains less keys than the sidechain list. The function returns (nil, nil) if
// mainnet list contains all keys from sidechain list. // the mainnet list contains all keys from the sidechain list.
// //
// Sorts passed slices. // Sorts passed slices.
func newAlphabetList(sidechain, mainnet keys.PublicKeys) (keys.PublicKeys, error) { func newAlphabetList(sidechain, mainnet keys.PublicKeys) (keys.PublicKeys, error) {
@ -84,8 +84,8 @@ func newAlphabetList(sidechain, mainnet keys.PublicKeys) (keys.PublicKeys, error
} }
// updateInnerRing function removes `before` keys from `innerRing` and adds // updateInnerRing function removes `before` keys from `innerRing` and adds
// `after` keys in the list. If length of `before` and `after` is not the same // `after` keys in the list. If the length of `before` and `after` is not the same,
// then function returns errNotEqualLen // the function returns errNotEqualLen
func updateInnerRing(innerRing, before, after keys.PublicKeys) (keys.PublicKeys, error) { func updateInnerRing(innerRing, before, after keys.PublicKeys) (keys.PublicKeys, error) {
lnBefore := len(before) lnBefore := len(before)
if lnBefore != len(after) { if lnBefore != len(after) {

View file

@ -60,14 +60,14 @@ func (gp *Processor) processAlphabetSync(txHash util.Uint256) {
Hash: &txHash, Hash: &txHash,
} }
// 1. Vote to side chain committee via alphabet contracts. // 1. Vote to sidechain committee via alphabet contracts.
err = gp.voter.VoteForSidechainValidator(votePrm) err = gp.voter.VoteForSidechainValidator(votePrm)
if err != nil { if err != nil {
gp.log.Error("can't vote for side chain committee", gp.log.Error("can't vote for side chain committee",
zap.String("error", err.Error())) zap.String("error", err.Error()))
} }
// 2. Update NeoFSAlphabet role in side chain. // 2. Update NeoFSAlphabet role in the sidechain.
innerRing, err := gp.irFetcher.InnerRingKeys() innerRing, err := gp.irFetcher.InnerRingKeys()
if err != nil { if err != nil {
gp.log.Error("can't fetch inner ring list from side chain", gp.log.Error("can't fetch inner ring list from side chain",
@ -109,7 +109,7 @@ func (gp *Processor) processAlphabetSync(txHash util.Uint256) {
} }
if !gp.notaryDisabled { if !gp.notaryDisabled {
// 3. Update notary role in side chain. // 3. Update notary role in the sidechain.
updPrm := client.UpdateNotaryListPrm{} updPrm := client.UpdateNotaryListPrm{}
@ -123,7 +123,7 @@ func (gp *Processor) processAlphabetSync(txHash util.Uint256) {
} }
} }
// 4. Update NeoFS contract in main net. // 4. Update NeoFS contract in the mainnet.
epoch := gp.epochState.EpochCounter() epoch := gp.epochState.EpochCounter()
buf := make([]byte, 8) buf := make([]byte, 8)

View file

@ -16,9 +16,9 @@ import (
"go.uber.org/zap" "go.uber.org/zap"
) )
// ProcessorPoolSize limits pool size for governance Processor. Processor manages // ProcessorPoolSize limits the pool size for governance Processor. Processor manages
// governance sync tasks. This process must not be interrupted by other sync // governance sync tasks. This process must not be interrupted by other sync
// operation, so we limit pool size for processor to one. // operation, so we limit the pool size for the processor to one.
const ProcessorPoolSize = 1 const ProcessorPoolSize = 1
type ( type (
@ -91,7 +91,7 @@ type (
} }
) )
// New creates balance contract processor instance. // New creates a balance contract processor instance.
func New(p *Params) (*Processor, error) { func New(p *Params) (*Processor, error) {
switch { switch {
case p.Log == nil: case p.Log == nil:

View file

@ -8,12 +8,12 @@ import (
) )
const ( const (
// lockAccountLifeTime defines amount of epochs when lock account is valid. // lockAccountLifeTime defines the amount of epochs when lock account is valid.
lockAccountLifetime uint64 = 20 lockAccountLifetime uint64 = 20
) )
// Process deposit event by invoking balance contract and sending native // Process deposit event by invoking a balance contract and sending native
// gas in morph chain. // gas in the sidechain.
func (np *Processor) processDeposit(deposit *neofsEvent.Deposit) { func (np *Processor) processDeposit(deposit *neofsEvent.Deposit) {
if !np.alphabetState.IsAlphabet() { if !np.alphabetState.IsAlphabet() {
np.log.Info("non alphabet mode, ignore deposit") np.log.Info("non alphabet mode, ignore deposit")
@ -26,7 +26,7 @@ func (np *Processor) processDeposit(deposit *neofsEvent.Deposit) {
prm.SetAmount(np.converter.ToBalancePrecision(deposit.Amount())) prm.SetAmount(np.converter.ToBalancePrecision(deposit.Amount()))
prm.SetID(deposit.ID()) prm.SetID(deposit.ID())
// send transferX to balance contract // send transferX to a balance contract
err := np.balanceClient.Mint(prm) err := np.balanceClient.Mint(prm)
if err != nil { if err != nil {
np.log.Error("can't transfer assets to balance contract", zap.Error(err)) np.log.Error("can't transfer assets to balance contract", zap.Error(err))
@ -35,7 +35,7 @@ func (np *Processor) processDeposit(deposit *neofsEvent.Deposit) {
curEpoch := np.epochState.EpochCounter() curEpoch := np.epochState.EpochCounter()
receiver := deposit.To() receiver := deposit.To()
// check if receiver already received some mint GAS emissions // check if the receiver has already received some mint GAS emissions
// we should lock there even though LRU cache is already thread save // we should lock there even though LRU cache is already thread save
// we lock there because GAS transfer AND cache update must be atomic // we lock there because GAS transfer AND cache update must be atomic
np.mintEmitLock.Lock() np.mintEmitLock.Lock()
@ -52,7 +52,7 @@ func (np *Processor) processDeposit(deposit *neofsEvent.Deposit) {
} }
// get gas balance of the node // get gas balance of the node
// before gas transfer check if the balance is greater than threshold // before gas transfer check if the balance is greater than the threshold
balance, err := np.morphClient.GasBalance() balance, err := np.morphClient.GasBalance()
if err != nil { if err != nil {
np.log.Error("can't get gas balance of the node", zap.Error(err)) np.log.Error("can't get gas balance of the node", zap.Error(err))
@ -78,7 +78,7 @@ func (np *Processor) processDeposit(deposit *neofsEvent.Deposit) {
np.mintEmitCache.Add(receiver.String(), curEpoch) np.mintEmitCache.Add(receiver.String(), curEpoch)
} }
// Process withdraw event by locking assets in balance account. // Process withdraw event by locking assets in the balance account.
func (np *Processor) processWithdraw(withdraw *neofsEvent.Withdraw) { func (np *Processor) processWithdraw(withdraw *neofsEvent.Withdraw) {
if !np.alphabetState.IsAlphabet() { if !np.alphabetState.IsAlphabet() {
np.log.Info("non alphabet mode, ignore withdraw") np.log.Info("non alphabet mode, ignore withdraw")
@ -108,8 +108,8 @@ func (np *Processor) processWithdraw(withdraw *neofsEvent.Withdraw) {
} }
} }
// Process cheque event by transferring assets from lock account back to // Process cheque event by transferring assets from the lock account back to
// reserve account. // the reserve account.
func (np *Processor) processCheque(cheque *neofsEvent.Cheque) { func (np *Processor) processCheque(cheque *neofsEvent.Cheque) {
if !np.alphabetState.IsAlphabet() { if !np.alphabetState.IsAlphabet() {
np.log.Info("non alphabet mode, ignore cheque") np.log.Info("non alphabet mode, ignore cheque")

View file

@ -6,8 +6,8 @@ import (
"go.uber.org/zap" "go.uber.org/zap"
) )
// Process config event by setting configuration value from main chain in // Process config event by setting configuration value from the mainchain in
// side chain. // the sidechain.
func (np *Processor) processConfig(config *neofsEvent.Config) { func (np *Processor) processConfig(config *neofsEvent.Config) {
if !np.alphabetState.IsAlphabet() { if !np.alphabetState.IsAlphabet() {
np.log.Info("non alphabet mode, ignore config") np.log.Info("non alphabet mode, ignore config")

View file

@ -14,7 +14,7 @@ func (np *Processor) HandleNewEpochTick(ev event.Event) {
_ = ev.(timerEvent.NewEpochTick) _ = ev.(timerEvent.NewEpochTick)
np.log.Info("tick", zap.String("type", "epoch")) np.log.Info("tick", zap.String("type", "epoch"))
// send event to the worker pool // send an event to the worker pool
err := np.pool.Submit(func() { np.processNewEpochTick() }) err := np.pool.Submit(func() { np.processNewEpochTick() })
if err != nil { if err != nil {
@ -30,7 +30,7 @@ func (np *Processor) handleNewEpoch(ev event.Event) {
zap.String("type", "new epoch"), zap.String("type", "new epoch"),
zap.Uint64("value", epochEvent.EpochNumber())) zap.Uint64("value", epochEvent.EpochNumber()))
// send event to the worker pool // send an event to the worker pool
err := np.pool.Submit(func() { err := np.pool.Submit(func() {
np.processNewEpoch(epochEvent) np.processNewEpoch(epochEvent)
@ -49,7 +49,7 @@ func (np *Processor) handleAddPeer(ev event.Event) {
zap.String("type", "add peer"), zap.String("type", "add peer"),
) )
// send event to the worker pool // send an event to the worker pool
err := np.pool.Submit(func() { err := np.pool.Submit(func() {
np.processAddPeer(newPeer) np.processAddPeer(newPeer)

View file

@ -6,17 +6,17 @@ import "github.com/nspcc-dev/neo-go/pkg/util"
type netmapCleanupTick struct { type netmapCleanupTick struct {
epoch uint64 epoch uint64
// txHash is used in notary environmental // txHash is used in notary environment
// for calculating unique but same for // for calculating unique but same for
// all notification receivers values. // all notification receivers values.
txHash util.Uint256 txHash util.Uint256
} }
// TxHash returns hash of the TX that triggers // TxHash returns the hash of the TX that triggers
// synchronization process. // synchronization process.
func (s netmapCleanupTick) TxHash() util.Uint256 { func (s netmapCleanupTick) TxHash() util.Uint256 {
return s.txHash return s.txHash
} }
// MorphEvent implements Event interface. // MorphEvent implements the Event interface.
func (netmapCleanupTick) MorphEvent() {} func (netmapCleanupTick) MorphEvent() {}

View file

@ -14,13 +14,13 @@ var errMissingRequiredAttr = errors.New("missing required attribute in DB record
// and adds a group of related attributes. // and adds a group of related attributes.
// //
// If n contains at least one of the LOCODE-derived attributes, // If n contains at least one of the LOCODE-derived attributes,
// an error returns. // an error is returned.
// //
// If n contains UN-LOCODE attribute and its value does not // If n contains UN-LOCODE attribute and its value does not
// match the UN/LOCODE format, an error returns. // match the UN/LOCODE format, an error is returned.
// //
// New attributes are formed from the record of DB instance (Prm). // New attributes are formed from the record of DB instance (Prm).
// If DB entry R was found w/o errors, then new attributes are: // If DB entry R was found w/o errors, new attributes are:
// * CountryCode: R.CountryCode().String(); // * CountryCode: R.CountryCode().String();
// * Country: R.CountryName(); // * Country: R.CountryName();
// * Location: Record.LocationName(); // * Location: Record.LocationName();
@ -32,7 +32,7 @@ var errMissingRequiredAttr = errors.New("missing required attribute in DB record
func (v *Validator) VerifyAndUpdate(n *netmap.NodeInfo) error { func (v *Validator) VerifyAndUpdate(n *netmap.NodeInfo) error {
mAttr := uniqueAttributes(n.Attributes()) mAttr := uniqueAttributes(n.Attributes())
// check if derived attributes are presented // check if the derived attributes are presented
for attrKey := range v.mAttr { for attrKey := range v.mAttr {
if _, ok := mAttr[attrKey]; ok { if _, ok := mAttr[attrKey]; ok {
return fmt.Errorf("attribute derived from %s is presented: %s", return fmt.Errorf("attribute derived from %s is presented: %s",

View file

@ -16,11 +16,11 @@ type Prm struct {
DB DB DB DB
} }
// Validator is an utility that verifies and updates // Validator is a utility that verifies and updates
// node attributes associated with its geographical location // node attributes associated with its geographical location
// (LOCODE). // (LOCODE).
// //
// For correct operation, Validator must be created // For correct operation, the Validator must be created
// using the constructor (New) based on the required parameters // using the constructor (New) based on the required parameters
// and optional components. After successful creation, // and optional components. After successful creation,
// the Validator is immediately ready to work through API. // the Validator is immediately ready to work through API.

View file

@ -3,7 +3,7 @@ package maddress
// Validator is an utility that verifies node // Validator is an utility that verifies node
// multiaddress. // multiaddress.
// //
// For correct operation, Validator must be created // For correct operation, the Validator must be created
// using the constructor (New). After successful creation, // using the constructor (New). After successful creation,
// the Validator is immediately ready to work through API. // the Validator is immediately ready to work through API.
type Validator struct{} type Validator struct{}

View file

@ -17,7 +17,7 @@ import (
"go.uber.org/zap" "go.uber.org/zap"
) )
// CalculatePrm groups required parameters of // CalculatePrm groups the required parameters of
// Calculator.CalculateForEpoch call. // Calculator.CalculateForEpoch call.
type CalculatePrm struct { type CalculatePrm struct {
// Number of epoch to perform the calculation. // Number of epoch to perform the calculation.

View file

@ -5,7 +5,7 @@ import (
"go.uber.org/zap" "go.uber.org/zap"
) )
// Calculator represents component for calculating payments // Calculator represents a component for calculating payments
// based on data audit results and sending remittances to the chain. // based on data audit results and sending remittances to the chain.
type Calculator struct { type Calculator struct {
prm *CalculatorPrm prm *CalculatorPrm
@ -26,7 +26,7 @@ func defaultOptions() *options {
} }
} }
// NewCalculator creates, initializes and returns new Calculator instance. // NewCalculator creates, initializes and returns a new Calculator instance.
func NewCalculator(p *CalculatorPrm, opts ...CalculatorOption) *Calculator { func NewCalculator(p *CalculatorPrm, opts ...CalculatorOption) *Calculator {
o := defaultOptions() o := defaultOptions()
@ -40,7 +40,7 @@ func NewCalculator(p *CalculatorPrm, opts ...CalculatorOption) *Calculator {
} }
} }
// WithLogger returns option to specify logging component. // WithLogger returns an option to specify the logging component.
func WithLogger(l *logger.Logger) CalculatorOption { func WithLogger(l *logger.Logger) CalculatorOption {
return func(o *options) { return func(o *options) {
o.log = l o.log = l

View file

@ -73,9 +73,9 @@ func (inc *IncomeSettlementContext) Collect() {
common.TransferAssets(inc.exchange, txTable, common.BasicIncomeCollectionDetails(inc.epoch)) common.TransferAssets(inc.exchange, txTable, common.BasicIncomeCollectionDetails(inc.epoch))
} }
// avgEstimation returns estimation value for single container. Right now it // avgEstimation returns estimation value for a single container. Right now it
// simply calculates average of all announcements, however it can be smarter and // simply calculates an average of all announcements, however it can be smarter and
// base result on reputation of announcers and clever math. // base the result on reputation of the announcers and clever math.
func (inc *IncomeSettlementContext) avgEstimation(e *cntClient.Estimations) (avg uint64) { func (inc *IncomeSettlementContext) avgEstimation(e *cntClient.Estimations) (avg uint64) {
if len(e.Values) == 0 { if len(e.Values) == 0 {
return 0 return 0

View file

@ -6,21 +6,21 @@ import (
subnetid "github.com/nspcc-dev/neofs-sdk-go/subnet/id" subnetid "github.com/nspcc-dev/neofs-sdk-go/subnet/id"
) )
// Delete represents notification about NeoFS subnet removal. // Delete represents a notification about NeoFS subnet removal.
// Generated by a contract when intending to delete a subnet. // Generated by a contract when intending to delete a subnet.
type Delete interface { type Delete interface {
// Contains ID of the subnet to be removed. // Contains the ID of the subnet to be removed.
eventWithID eventWithID
} }
// DeleteValidator asserts intent to remove a subnet. // DeleteValidator asserts intent to remove a subnet.
type DeleteValidator struct{} type DeleteValidator struct{}
// Assert processes the attempt to remove a subnet. Approves the removal through nil return. // Assert processes the attempt to remove a subnet. It approves the removal through nil return.
// //
// All read errors of Delete are forwarded. // All read errors of Delete are forwarded.
// //
// Returns an error on: // It returns an error on:
// * zero subnet creation; // * zero subnet creation;
// * empty ID or different from the one wired into info; // * empty ID or different from the one wired into info;
// * empty owner ID or different from the one wired into info. // * empty owner ID or different from the one wired into info.

View file

@ -9,34 +9,34 @@ import (
subnetid "github.com/nspcc-dev/neofs-sdk-go/subnet/id" subnetid "github.com/nspcc-dev/neofs-sdk-go/subnet/id"
) )
// Put represents notification about NeoFS subnet creation. // Put represents a notification about NeoFS subnet creation.
// Generated by a contract when intending to create a subnet. // Generated by a contract when intending to create a subnet.
type Put interface { type Put interface {
// Contains ID of the subnet to be created. // Contains the ID of the subnet to be created.
eventWithID eventWithID
// ReadCreator reads user ID of the subnet creator. // ReadCreator reads the user ID of the subnet creator.
// Returns an error if ID is missing. // Returns an error if the ID is missing.
ReadCreator(id *owner.ID) error ReadCreator(id *owner.ID) error
// ReadInfo reads information about subnet to be created. // ReadInfo reads information about a subnet to be created.
ReadInfo(info *subnet.Info) error ReadInfo(info *subnet.Info) error
} }
// PutValidator asserts intent to create a subnet. // PutValidator asserts intent to create a subnet.
type PutValidator struct{} type PutValidator struct{}
// errDiffOwner is returned when subnet owners differ. // errDiffOwner is returned when the subnet owners differ.
var errDiffOwner = errors.New("diff subnet owners") var errDiffOwner = errors.New("diff subnet owners")
// errDiffID is returned when subnet IDs differ. // errDiffID is returned when the subnet IDs differ.
var errDiffID = errors.New("diff subnet IDs") var errDiffID = errors.New("diff subnet IDs")
// Assert processes the attempt to create a subnet. Approves the creation through nil return. // Assert processes the attempt to create a subnet. It approves the creation through nil return.
// //
// All read errors of Put are forwarded. // All read errors of Put are forwarded.
// //
// Returns an error on: // It returns an error on:
// * zero subnet creation; // * zero subnet creation;
// * empty ID or different from the one wired into info; // * empty ID or different from the one wired into info;
// * empty owner ID or different from the one wired into info. // * empty owner ID or different from the one wired into info.
@ -68,12 +68,12 @@ func (x PutValidator) Assert(event Put) error {
return fmt.Errorf("read info: %w", err) return fmt.Errorf("read info: %w", err)
} }
// check if explicit ID equals to the one from info // check if the explicit ID equals to the one from info
if !subnet.IDEquals(info, id) { if !subnet.IDEquals(info, id) {
return errDiffID return errDiffID
} }
// check if explicit creator equals to the one from info // check if the explicit creator equals to the one from info
if !subnet.IsOwner(info, creator) { if !subnet.IsOwner(info, creator) {
return errDiffOwner return errDiffOwner
} }

View file

@ -139,13 +139,13 @@ func (s *Server) voteForSidechainValidator(prm governance.VoteValidatorPrm) erro
} }
// VoteForSidechainValidator calls vote method on alphabet contracts with // VoteForSidechainValidator calls vote method on alphabet contracts with
// provided list of keys. // the provided list of keys.
func (s *Server) VoteForSidechainValidator(prm governance.VoteValidatorPrm) error { func (s *Server) VoteForSidechainValidator(prm governance.VoteValidatorPrm) error {
sort.Sort(prm.Validators) sort.Sort(prm.Validators)
return s.voteForSidechainValidator(prm) return s.voteForSidechainValidator(prm)
} }
// WriteReport composes audit result structure from audit report // WriteReport composes the audit result structure from the audit report
// and sends it to Audit contract. // and sends it to Audit contract.
func (s *Server) WriteReport(r *audit.Report) error { func (s *Server) WriteReport(r *audit.Report) error {
res := r.Result() res := r.Result()
@ -157,9 +157,9 @@ func (s *Server) WriteReport(r *audit.Report) error {
return s.auditClient.PutAuditResult(prm) return s.auditClient.PutAuditResult(prm)
} }
// ResetEpochTimer resets block timer that produces events to update epoch // ResetEpochTimer resets the block timer that produces events to update epoch
// counter in netmap contract. Used to synchronize this even production // counter in the netmap contract. It is used to synchronize this even production
// based on block with notification of last epoch. // based on the block with a notification of the last epoch.
func (s *Server) ResetEpochTimer(h uint32) error { func (s *Server) ResetEpochTimer(h uint32) error {
s.epochTimer.Tick(h) s.epochTimer.Tick(h)
return s.epochTimer.Reset() return s.epochTimer.Reset()
@ -169,7 +169,7 @@ func (s *Server) setHealthStatus(hs control.HealthStatus) {
s.healthStatus.Store(hs) s.healthStatus.Store(hs)
} }
// HealthStatus returns current health status of IR application. // HealthStatus returns the current health status of the IR application.
func (s *Server) HealthStatus() control.HealthStatus { func (s *Server) HealthStatus() control.HealthStatus {
return s.healthStatus.Load().(control.HealthStatus) return s.healthStatus.Load().(control.HealthStatus)
} }

View file

@ -36,8 +36,8 @@ type subnetConfig struct {
queueSize uint32 queueSize uint32
} }
// makes IR server to catch Subnet notifications from sidechain listener, // makes IR server to catch Subnet notifications from the sidechain listener,
// and to release corresponding processing queue on stop. // and to release the corresponding processing queue on stop.
func (s *Server) initSubnet(cfg subnetConfig) { func (s *Server) initSubnet(cfg subnetConfig) {
s.registerStarter(func() error { s.registerStarter(func() error {
var err error var err error
@ -92,11 +92,11 @@ const (
notarySubnetCreateEvName = "put" notarySubnetCreateEvName = "put"
) )
// makes IR server to listen notifications of Subnet contract. // makes the IR server to listen to notifications of Subnet contract.
// All required resources must be initialized before (initSubnet). // All required resources must be initialized before (initSubnet).
// Works in one of two modes (configured): notary and non-notary. // It works in one of two modes (configured): notary and non-notary.
// //
// All handlers are executed only if local node is an alphabet one. // All handlers are executed only if the local node is an alphabet one.
// //
// Events (notary): // Events (notary):
// * put (parser: subnetevents.ParseNotaryPut, handler: catchSubnetCreation); // * put (parser: subnetevents.ParseNotaryPut, handler: catchSubnetCreation);
@ -183,15 +183,15 @@ type putSubnetEvent struct {
ev subnetevents.Put ev subnetevents.Put
} }
// ReadID unmarshals subnet ID from a binary NeoFS API protocol's format. // ReadID unmarshals the subnet ID from a binary NeoFS API protocol's format.
func (x putSubnetEvent) ReadID(id *subnetid.ID) error { func (x putSubnetEvent) ReadID(id *subnetid.ID) error {
return id.Unmarshal(x.ev.ID()) return id.Unmarshal(x.ev.ID())
} }
var errMissingSubnetOwner = errors.New("missing subnet owner") var errMissingSubnetOwner = errors.New("missing subnet owner")
// ReadCreator unmarshals subnet creator from a binary NeoFS API protocol's format. // ReadCreator unmarshals the subnet creator from a binary NeoFS API protocol's format.
// Returns an error if byte array is empty. // Returns an error if the byte array is empty.
func (x putSubnetEvent) ReadCreator(id *owner.ID) error { func (x putSubnetEvent) ReadCreator(id *owner.ID) error {
data := x.ev.Owner() data := x.ev.Owner()
@ -210,12 +210,12 @@ func (x putSubnetEvent) ReadCreator(id *owner.ID) error {
return nil return nil
} }
// ReadInfo unmarshal subnet info from a binary NeoFS API protocol's format. // ReadInfo unmarshal the subnet info from a binary NeoFS API protocol's format.
func (x putSubnetEvent) ReadInfo(info *subnet.Info) error { func (x putSubnetEvent) ReadInfo(info *subnet.Info) error {
return info.Unmarshal(x.ev.Info()) return info.Unmarshal(x.ev.Info())
} }
// handleSubnetCreation handles event of subnet creation parsed via subnetevents.ParsePut. // handleSubnetCreation handles an event of subnet creation parsed via subnetevents.ParsePut.
// //
// Validates the event using irsubnet.PutValidator. Logs message about (dis)agreement. // Validates the event using irsubnet.PutValidator. Logs message about (dis)agreement.
func (s *Server) handleSubnetCreation(e event.Event) { func (s *Server) handleSubnetCreation(e event.Event) {
@ -260,7 +260,7 @@ func (s *Server) handleSubnetCreation(e event.Event) {
} }
} }
// catchSubnetRemoval catches event of subnet removal from listener and queues the processing. // catchSubnetRemoval catches an event of subnet removal from listener and queues the processing.
func (s *Server) catchSubnetRemoval(e event.Event) { func (s *Server) catchSubnetRemoval(e event.Event) {
err := s.subnetHandler.workerPool.Submit(func() { err := s.subnetHandler.workerPool.Submit(func() {
s.handleSubnetRemoval(e) s.handleSubnetRemoval(e)

View file

@ -55,7 +55,7 @@ func defaultCfg() *cfg {
} }
} }
// New creates and returns new Blobovnicza instance. // New creates and returns a new Blobovnicza instance.
func New(opts ...Option) *Blobovnicza { func New(opts ...Option) *Blobovnicza {
c := defaultCfg() c := defaultCfg()
@ -76,7 +76,7 @@ func WithPath(path string) Option {
} }
} }
// WithPermissions returns option to specify permission bits // WithPermissions returns an option to specify permission bits
// of Blobovnicza's system path. // of Blobovnicza's system path.
func WithPermissions(perm fs.FileMode) Option { func WithPermissions(perm fs.FileMode) Option {
return func(c *cfg) { return func(c *cfg) {
@ -84,7 +84,7 @@ func WithPermissions(perm fs.FileMode) Option {
} }
} }
// WithObjectSizeLimit returns option to specify maximum size // WithObjectSizeLimit returns an option to specify the maximum size
// of the objects stored in Blobovnicza. // of the objects stored in Blobovnicza.
func WithObjectSizeLimit(lim uint64) Option { func WithObjectSizeLimit(lim uint64) Option {
return func(c *cfg) { return func(c *cfg) {
@ -92,7 +92,7 @@ func WithObjectSizeLimit(lim uint64) Option {
} }
} }
// WithFullSizeLimit returns option to set maximum sum size // WithFullSizeLimit returns an option to set the maximum sum size
// of all stored objects. // of all stored objects.
func WithFullSizeLimit(lim uint64) Option { func WithFullSizeLimit(lim uint64) Option {
return func(c *cfg) { return func(c *cfg) {
@ -100,14 +100,14 @@ func WithFullSizeLimit(lim uint64) Option {
} }
} }
// WithLogger returns option to specify Blobovnicza's logger. // WithLogger returns an option to specify Blobovnicza's logger.
func WithLogger(l *logger.Logger) Option { func WithLogger(l *logger.Logger) Option {
return func(c *cfg) { return func(c *cfg) {
c.log = l.With(zap.String("component", "Blobovnicza")) c.log = l.With(zap.String("component", "Blobovnicza"))
} }
} }
// ReadOnly returns option to open Blobovnicza in read-only mode. // ReadOnly returns an option to open Blobovnicza in read-only mode.
func ReadOnly() Option { func ReadOnly() Option {
return func(c *cfg) { return func(c *cfg) {
c.boltOptions.ReadOnly = true c.boltOptions.ReadOnly = true

View file

@ -9,9 +9,9 @@ import (
"go.uber.org/zap" "go.uber.org/zap"
) )
// Open opens an internal database at configured path with configured permissions. // Open opens an internal database at the configured path with the configured permissions.
// //
// If the database file does not exist then it will be created automatically. // If the database file does not exist, it will be created automatically.
func (b *Blobovnicza) Open() error { func (b *Blobovnicza) Open() error {
b.log.Debug("creating directory for BoltDB", b.log.Debug("creating directory for BoltDB",
zap.String("path", b.path), zap.String("path", b.path),
@ -39,7 +39,7 @@ func (b *Blobovnicza) Open() error {
// Init initializes internal database structure. // Init initializes internal database structure.
// //
// If Blobovnicza is already initialized, then no action is taken. // If Blobovnicza is already initialized, no action is taken.
// //
// Should not be called in read-only configuration. // Should not be called in read-only configuration.
func (b *Blobovnicza) Init() error { func (b *Blobovnicza) Init() error {

View file

@ -12,16 +12,16 @@ type DeletePrm struct {
addr *addressSDK.Address addr *addressSDK.Address
} }
// DeleteRes groups resulting values of Delete operation. // DeleteRes groups the resulting values of Delete operation.
type DeleteRes struct { type DeleteRes struct {
} }
// SetAddress sets address of the requested object. // SetAddress sets the address of the requested object.
func (p *DeletePrm) SetAddress(addr *addressSDK.Address) { func (p *DeletePrm) SetAddress(addr *addressSDK.Address) {
p.addr = addr p.addr = addr
} }
// Delete removes object from Blobovnicza by address. // Delete removes an object from Blobovnicza by address.
// //
// Returns any error encountered that // Returns any error encountered that
// did not allow to completely delete the object. // did not allow to completely delete the object.

View file

@ -6,8 +6,8 @@ import (
apistatus "github.com/nspcc-dev/neofs-sdk-go/client/status" apistatus "github.com/nspcc-dev/neofs-sdk-go/client/status"
) )
// IsErrNotFound checks if error returned by Blobovnicza Get/Delete method // IsErrNotFound checks if the error returned by Blobovnicza Get/Delete method
// corresponds to missing object. // corresponds to the missing object.
func IsErrNotFound(err error) bool { func IsErrNotFound(err error) bool {
return errors.As(err, new(apistatus.ObjectNotFound)) return errors.As(err, new(apistatus.ObjectNotFound))
} }

View file

@ -13,12 +13,12 @@ type GetPrm struct {
addr *addressSDK.Address addr *addressSDK.Address
} }
// GetRes groups resulting values of Get operation. // GetRes groups the resulting values of Get operation.
type GetRes struct { type GetRes struct {
obj []byte obj []byte
} }
// SetAddress sets address of the requested object. // SetAddress sets the address of the requested object.
func (p *GetPrm) SetAddress(addr *addressSDK.Address) { func (p *GetPrm) SetAddress(addr *addressSDK.Address) {
p.addr = addr p.addr = addr
} }
@ -28,12 +28,12 @@ func (p *GetRes) Object() []byte {
return p.obj return p.obj
} }
// Get reads the object from Blobovnicza by address. // Get reads an object from Blobovnicza by address.
// //
// Returns any error encountered that // Returns any error encountered that
// did not allow to completely read the object. // did not allow to completely read the object.
// //
// Returns an error of type apistatus.ObjectNotFound if requested object is not // Returns an error of type apistatus.ObjectNotFound if the requested object is not
// presented in Blobovnicza. // presented in Blobovnicza.
func (b *Blobovnicza) Get(prm *GetPrm) (*GetRes, error) { func (b *Blobovnicza) Get(prm *GetPrm) (*GetRes, error) {
var ( var (

View file

@ -3,7 +3,7 @@ package blobovnicza
// ID represents Blobovnicza identifier. // ID represents Blobovnicza identifier.
type ID []byte type ID []byte
// NewIDFromBytes constructs ID from byte slice. // NewIDFromBytes constructs an ID from a byte slice.
func NewIDFromBytes(v []byte) *ID { func NewIDFromBytes(v []byte) *ID {
return (*ID)(&v) return (*ID)(&v)
} }

Some files were not shown because too many files have changed in this diff Show more