forked from TrueCloudLab/frostfs-node
[#493] cmd/node: Add contracts section to config
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
parent
8a0a75a6b2
commit
0eea25375e
5 changed files with 139 additions and 0 deletions
67
cmd/neofs-node/config/contracts/config.go
Normal file
67
cmd/neofs-node/config/contracts/config.go
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
package contractsconfig
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
||||||
|
"github.com/nspcc-dev/neofs-node/cmd/neofs-node/config"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
subsection = "contracts"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Netmap returns value of "netmap" config parameter
|
||||||
|
// from "contracts" section.
|
||||||
|
//
|
||||||
|
// Throws panic if value is not is not a 20-byte LE hex-encoded string.
|
||||||
|
func Netmap(c *config.Config) util.Uint160 {
|
||||||
|
return contractAddress(c, "netmap")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Balance returns value of "balance" config parameter
|
||||||
|
// from "contracts" section.
|
||||||
|
//
|
||||||
|
// Throws panic if value is not is not a 20-byte LE hex-encoded string.
|
||||||
|
func Balance(c *config.Config) util.Uint160 {
|
||||||
|
return contractAddress(c, "balance")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Container returns value of "container" config parameter
|
||||||
|
// from "contracts" section.
|
||||||
|
//
|
||||||
|
// Throws panic if value is not is not a 20-byte LE hex-encoded string.
|
||||||
|
func Container(c *config.Config) util.Uint160 {
|
||||||
|
return contractAddress(c, "container")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reputation returns value of "reputation" config parameter
|
||||||
|
// from "contracts" section.
|
||||||
|
//
|
||||||
|
// Throws panic if value is not is not a 20-byte LE hex-encoded string.
|
||||||
|
func Reputation(c *config.Config) util.Uint160 {
|
||||||
|
return contractAddress(c, "reputation")
|
||||||
|
}
|
||||||
|
|
||||||
|
func contractAddress(c *config.Config, name string) util.Uint160 {
|
||||||
|
v := config.String(c.Sub(subsection), name)
|
||||||
|
if v == "" {
|
||||||
|
panic(fmt.Errorf(
|
||||||
|
"empty %s contract address, see `contracts.%s` section",
|
||||||
|
name,
|
||||||
|
name,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
addr, err := util.Uint160DecodeStringLE(v)
|
||||||
|
if err != nil {
|
||||||
|
panic(fmt.Errorf(
|
||||||
|
"can't parse %s contract address %s: %w",
|
||||||
|
name,
|
||||||
|
v,
|
||||||
|
err,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
return addr
|
||||||
|
}
|
54
cmd/neofs-node/config/contracts/config_test.go
Normal file
54
cmd/neofs-node/config/contracts/config_test.go
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
package contractsconfig_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
||||||
|
"github.com/nspcc-dev/neofs-node/cmd/neofs-node/config"
|
||||||
|
contractsconfig "github.com/nspcc-dev/neofs-node/cmd/neofs-node/config/contracts"
|
||||||
|
configtest "github.com/nspcc-dev/neofs-node/cmd/neofs-node/config/test"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestContractsSection(t *testing.T) {
|
||||||
|
t.Run("defaults", func(t *testing.T) {
|
||||||
|
empty := configtest.EmptyConfig()
|
||||||
|
|
||||||
|
require.Panics(t, func() { contractsconfig.Balance(empty) })
|
||||||
|
require.Panics(t, func() { contractsconfig.Container(empty) })
|
||||||
|
require.Panics(t, func() { contractsconfig.Netmap(empty) })
|
||||||
|
require.Panics(t, func() { contractsconfig.Reputation(empty) })
|
||||||
|
})
|
||||||
|
|
||||||
|
const path = "../../../../config/example/node"
|
||||||
|
|
||||||
|
expBalance, err := util.Uint160DecodeStringLE("5263abba1abedbf79bb57f3e40b50b4425d2d6cd")
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
expConatiner, err := util.Uint160DecodeStringLE("5d084790d7aa36cea7b53fe897380dab11d2cd3c")
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
expNetmap, err := util.Uint160DecodeStringLE("0cce9e948dca43a6b592efe59ddb4ecb89bdd9ca")
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
expReputation, err := util.Uint160DecodeStringLE("441995f631c1da2b133462b71859494a5cd45e90")
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
var fileConfigTest = func(c *config.Config) {
|
||||||
|
balance := contractsconfig.Balance(c)
|
||||||
|
container := contractsconfig.Container(c)
|
||||||
|
netmap := contractsconfig.Netmap(c)
|
||||||
|
reputation := contractsconfig.Reputation(c)
|
||||||
|
|
||||||
|
require.Equal(t, expBalance, balance)
|
||||||
|
require.Equal(t, expConatiner, container)
|
||||||
|
require.Equal(t, expNetmap, netmap)
|
||||||
|
require.Equal(t, expReputation, reputation)
|
||||||
|
}
|
||||||
|
|
||||||
|
configtest.ForEachFileType(path, fileConfigTest)
|
||||||
|
|
||||||
|
t.Run("ENV", func(t *testing.T) {
|
||||||
|
configtest.ForEnvFileType(path, fileConfigTest)
|
||||||
|
})
|
||||||
|
}
|
|
@ -19,6 +19,12 @@ NEOFS_GRPC_TLS_ENABLED=true
|
||||||
NEOFS_GRPC_TLS_CERTIFICATE=/path/to/cert
|
NEOFS_GRPC_TLS_CERTIFICATE=/path/to/cert
|
||||||
NEOFS_GRPC_TLS_KEY=/path/to/key
|
NEOFS_GRPC_TLS_KEY=/path/to/key
|
||||||
|
|
||||||
|
# Contracts section
|
||||||
|
NEOFS_CONTRACTS_BALANCE=5263abba1abedbf79bb57f3e40b50b4425d2d6cd
|
||||||
|
NEOFS_CONTRACTS_CONTAINER=5d084790d7aa36cea7b53fe897380dab11d2cd3c
|
||||||
|
NEOFS_CONTRACTS_NETMAP=0cce9e948dca43a6b592efe59ddb4ecb89bdd9ca
|
||||||
|
NEOFS_CONTRACTS_REPUTATION=441995f631c1da2b133462b71859494a5cd45e90
|
||||||
|
|
||||||
# Storage engine section
|
# Storage engine section
|
||||||
NEOFS_STORAGE_SHARD_NUM=2
|
NEOFS_STORAGE_SHARD_NUM=2
|
||||||
## 0 shard
|
## 0 shard
|
||||||
|
|
|
@ -25,6 +25,12 @@
|
||||||
"key": "/path/to/key"
|
"key": "/path/to/key"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"contracts": {
|
||||||
|
"balance": "5263abba1abedbf79bb57f3e40b50b4425d2d6cd",
|
||||||
|
"container": "5d084790d7aa36cea7b53fe897380dab11d2cd3c",
|
||||||
|
"netmap": "0cce9e948dca43a6b592efe59ddb4ecb89bdd9ca",
|
||||||
|
"reputation": "441995f631c1da2b133462b71859494a5cd45e90"
|
||||||
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
"shard_num": 2,
|
"shard_num": 2,
|
||||||
"shard": {
|
"shard": {
|
||||||
|
|
|
@ -23,6 +23,12 @@ grpc:
|
||||||
certificate: /path/to/cert
|
certificate: /path/to/cert
|
||||||
key: /path/to/key
|
key: /path/to/key
|
||||||
|
|
||||||
|
contracts:
|
||||||
|
balance: 5263abba1abedbf79bb57f3e40b50b4425d2d6cd
|
||||||
|
container: 5d084790d7aa36cea7b53fe897380dab11d2cd3c
|
||||||
|
netmap: 0cce9e948dca43a6b592efe59ddb4ecb89bdd9ca
|
||||||
|
reputation: 441995f631c1da2b133462b71859494a5cd45e90
|
||||||
|
|
||||||
storage:
|
storage:
|
||||||
shard_num: 2
|
shard_num: 2
|
||||||
shard:
|
shard:
|
||||||
|
|
Loading…
Reference in a new issue