forked from TrueCloudLab/frostfs-node
[#338] ir: Drop named named put fee
Named put fee value used only when notary disabled. Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
This commit is contained in:
parent
656fd7f376
commit
81718afb39
10 changed files with 9 additions and 125 deletions
|
@ -51,9 +51,8 @@ func setControlDefaults(cfg *viper.Viper) {
|
||||||
|
|
||||||
func setFeeDefaults(cfg *viper.Viper) {
|
func setFeeDefaults(cfg *viper.Viper) {
|
||||||
// extra fee values for working mode without notary contract
|
// extra fee values for working mode without notary contract
|
||||||
cfg.SetDefault("fee.main_chain", 5000_0000) // 0.5 Fixed8
|
cfg.SetDefault("fee.main_chain", 5000_0000) // 0.5 Fixed8
|
||||||
cfg.SetDefault("fee.side_chain", 2_0000_0000) // 2.0 Fixed8
|
cfg.SetDefault("fee.side_chain", 2_0000_0000) // 2.0 Fixed8
|
||||||
cfg.SetDefault("fee.named_container_register", 25_0000_0000) // 25.0 Fixed8
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func setEmitDefaults(cfg *viper.Viper) {
|
func setEmitDefaults(cfg *viper.Viper) {
|
||||||
|
|
|
@ -28,7 +28,6 @@ FROSTFS_IR_LOCODE_DB_PATH=/path/to/locode.db
|
||||||
|
|
||||||
FROSTFS_IR_FEE_MAIN_CHAIN=50000000
|
FROSTFS_IR_FEE_MAIN_CHAIN=50000000
|
||||||
FROSTFS_IR_FEE_SIDE_CHAIN=200000000
|
FROSTFS_IR_FEE_SIDE_CHAIN=200000000
|
||||||
FROSTFS_IR_FEE_NAMED_CONTAINER_REGISTER=2500000000
|
|
||||||
|
|
||||||
FROSTFS_IR_TIMERS_EMIT=240
|
FROSTFS_IR_TIMERS_EMIT=240
|
||||||
FROSTFS_IR_TIMERS_STOP_ESTIMATION_MUL=1
|
FROSTFS_IR_TIMERS_STOP_ESTIMATION_MUL=1
|
||||||
|
|
|
@ -49,7 +49,6 @@ locode:
|
||||||
fee:
|
fee:
|
||||||
main_chain: 50000000 # Fixed8 value of extra GAS fee for mainchain contract invocation; ignore if notary is enabled in mainchain
|
main_chain: 50000000 # Fixed8 value of extra GAS fee for mainchain contract invocation; ignore if notary is enabled in mainchain
|
||||||
side_chain: 200000000 # Fixed8 value of extra GAS fee for sidechain contract invocation; ignore if notary is enabled in sidechain
|
side_chain: 200000000 # Fixed8 value of extra GAS fee for sidechain contract invocation; ignore if notary is enabled in sidechain
|
||||||
named_container_register: 2500000000 # Fixed8 value of extra GAS fee for named conatiner registration in container contract; ignore if notary is enabled in sidechain
|
|
||||||
|
|
||||||
timers:
|
timers:
|
||||||
emit: 240 # Number of sidechain blocks between GAS emission cycles; disabled by default
|
emit: 240 # Number of sidechain blocks between GAS emission cycles; disabled by default
|
||||||
|
|
|
@ -8,19 +8,15 @@ import (
|
||||||
// FeeConfig is an instance that returns extra fee values for contract
|
// FeeConfig is an instance that returns extra fee values for contract
|
||||||
// invocations without notary support.
|
// invocations without notary support.
|
||||||
type FeeConfig struct {
|
type FeeConfig struct {
|
||||||
registerNamedCnr,
|
|
||||||
mainchain,
|
mainchain,
|
||||||
sidechain fixedn.Fixed8
|
sidechain fixedn.Fixed8
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewFeeConfig constructs FeeConfig from viper.Viper instance. Latter must not be nil.
|
// NewFeeConfig constructs FeeConfig from viper.Viper instance. Latter must not be nil.
|
||||||
//
|
|
||||||
// Fee for named container registration is taken from "fee.named_container_register" value.
|
|
||||||
func NewFeeConfig(v *viper.Viper) *FeeConfig {
|
func NewFeeConfig(v *viper.Viper) *FeeConfig {
|
||||||
return &FeeConfig{
|
return &FeeConfig{
|
||||||
registerNamedCnr: fixedn.Fixed8(v.GetInt64("fee.named_container_register")),
|
mainchain: fixedn.Fixed8(v.GetInt64("fee.main_chain")),
|
||||||
mainchain: fixedn.Fixed8(v.GetInt64("fee.main_chain")),
|
sidechain: fixedn.Fixed8(v.GetInt64("fee.side_chain")),
|
||||||
sidechain: fixedn.Fixed8(v.GetInt64("fee.side_chain")),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,8 +27,3 @@ func (f FeeConfig) MainChainFee() fixedn.Fixed8 {
|
||||||
func (f FeeConfig) SideChainFee() fixedn.Fixed8 {
|
func (f FeeConfig) SideChainFee() fixedn.Fixed8 {
|
||||||
return f.sidechain
|
return f.sidechain
|
||||||
}
|
}
|
||||||
|
|
||||||
// NamedContainerRegistrationFee returns additional GAS fee for named container registration in FrostFS network.
|
|
||||||
func (f FeeConfig) NamedContainerRegistrationFee() fixedn.Fixed8 {
|
|
||||||
return f.registerNamedCnr
|
|
||||||
}
|
|
||||||
|
|
|
@ -18,7 +18,6 @@ func TestConfig(t *testing.T) {
|
||||||
fee:
|
fee:
|
||||||
main_chain: 50000000
|
main_chain: 50000000
|
||||||
side_chain: 200000000
|
side_chain: 200000000
|
||||||
named_container_register: 2500000000
|
|
||||||
`,
|
`,
|
||||||
)
|
)
|
||||||
v := viper.New()
|
v := viper.New()
|
||||||
|
@ -29,7 +28,6 @@ fee:
|
||||||
config := NewFeeConfig(v)
|
config := NewFeeConfig(v)
|
||||||
require.Equal(t, fixedn.Fixed8(50000000), config.MainChainFee(), "main chain fee invalid")
|
require.Equal(t, fixedn.Fixed8(50000000), config.MainChainFee(), "main chain fee invalid")
|
||||||
require.Equal(t, fixedn.Fixed8(200000000), config.SideChainFee(), "side chain fee invalid")
|
require.Equal(t, fixedn.Fixed8(200000000), config.SideChainFee(), "side chain fee invalid")
|
||||||
require.Equal(t, fixedn.Fixed8(2500000000), config.NamedContainerRegistrationFee(), "named container register fee invalid")
|
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("nothing set", func(t *testing.T) {
|
t.Run("nothing set", func(t *testing.T) {
|
||||||
|
@ -43,7 +41,6 @@ fee:
|
||||||
config := NewFeeConfig(v)
|
config := NewFeeConfig(v)
|
||||||
require.Equal(t, fixedn.Fixed8(0), config.MainChainFee(), "main chain fee invalid")
|
require.Equal(t, fixedn.Fixed8(0), config.MainChainFee(), "main chain fee invalid")
|
||||||
require.Equal(t, fixedn.Fixed8(0), config.SideChainFee(), "side chain fee invalid")
|
require.Equal(t, fixedn.Fixed8(0), config.SideChainFee(), "side chain fee invalid")
|
||||||
require.Equal(t, fixedn.Fixed8(0), config.NamedContainerRegistrationFee(), "named container register fee invalid")
|
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("partially set", func(t *testing.T) {
|
t.Run("partially set", func(t *testing.T) {
|
||||||
|
@ -62,7 +59,6 @@ fee:
|
||||||
config := NewFeeConfig(v)
|
config := NewFeeConfig(v)
|
||||||
require.Equal(t, fixedn.Fixed8(10), config.MainChainFee(), "main chain fee invalid")
|
require.Equal(t, fixedn.Fixed8(10), config.MainChainFee(), "main chain fee invalid")
|
||||||
require.Equal(t, fixedn.Fixed8(0), config.SideChainFee(), "side chain fee invalid")
|
require.Equal(t, fixedn.Fixed8(0), config.SideChainFee(), "side chain fee invalid")
|
||||||
require.Equal(t, fixedn.Fixed8(0), config.NamedContainerRegistrationFee(), "named container register fee invalid")
|
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -387,14 +387,6 @@ func (s *Server) initClientsFromMorph() (*serverMorphClients, error) {
|
||||||
container.AsAlphabet(),
|
container.AsAlphabet(),
|
||||||
)
|
)
|
||||||
|
|
||||||
if s.sideNotaryConfig.disabled {
|
|
||||||
// in non-notary environments we customize fee for named container registration
|
|
||||||
// because it takes much more additional GAS than other operations.
|
|
||||||
morphCnrOpts = append(morphCnrOpts,
|
|
||||||
container.WithCustomFeeForNamedPut(s.feeConfig.NamedContainerRegistrationFee()),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
result.CnrClient, err = container.NewFromMorph(s.morphClient, s.contracts.container, fee, morphCnrOpts...)
|
result.CnrClient, err = container.NewFromMorph(s.morphClient, s.contracts.container, fee, morphCnrOpts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -56,10 +56,6 @@ func NewFromMorph(cli *client.Client, contract util.Uint160, fee fixedn.Fixed8,
|
||||||
opts[i](o)
|
opts[i](o)
|
||||||
}
|
}
|
||||||
|
|
||||||
if o.feePutNamedSet {
|
|
||||||
o.staticOpts = append(o.staticOpts, client.WithCustomFee(putNamedMethod, o.feePutNamed))
|
|
||||||
}
|
|
||||||
|
|
||||||
sc, err := client.NewStatic(cli, contract, fee, o.staticOpts...)
|
sc, err := client.NewStatic(cli, contract, fee, o.staticOpts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("can't create container static client: %w", err)
|
return nil, fmt.Errorf("can't create container static client: %w", err)
|
||||||
|
@ -83,9 +79,6 @@ func (c Client) ContractAddress() util.Uint160 {
|
||||||
type Option func(*opts)
|
type Option func(*opts)
|
||||||
|
|
||||||
type opts struct {
|
type opts struct {
|
||||||
feePutNamedSet bool
|
|
||||||
feePutNamed fixedn.Fixed8
|
|
||||||
|
|
||||||
staticOpts []client.StaticClientOption
|
staticOpts []client.StaticClientOption
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,11 +104,3 @@ func AsAlphabet() Option {
|
||||||
o.staticOpts = append(o.staticOpts, client.AsAlphabet())
|
o.staticOpts = append(o.staticOpts, client.AsAlphabet())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithCustomFeeForNamedPut returns option to specify custom fee for each Put operation with named container.
|
|
||||||
func WithCustomFeeForNamedPut(fee fixedn.Fixed8) Option {
|
|
||||||
return func(o *opts) {
|
|
||||||
o.feePutNamed = fee
|
|
||||||
o.feePutNamedSet = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,35 +0,0 @@
|
||||||
package client
|
|
||||||
|
|
||||||
import "github.com/nspcc-dev/neo-go/pkg/encoding/fixedn"
|
|
||||||
|
|
||||||
// setFeeForMethod sets fee for the operation executed using specified contract method.
|
|
||||||
func (x *fees) setFeeForMethod(method string, fee fixedn.Fixed8) {
|
|
||||||
if x.customFees == nil {
|
|
||||||
x.customFees = make(map[string]fixedn.Fixed8, 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
x.customFees[method] = fee
|
|
||||||
}
|
|
||||||
|
|
||||||
// fees represents source of per-operation fees.
|
|
||||||
// Can be initialized using var declaration.
|
|
||||||
//
|
|
||||||
// Instances are not thread-safe, so they mean initially filling, and then only reading.
|
|
||||||
type fees struct {
|
|
||||||
defaultFee fixedn.Fixed8
|
|
||||||
|
|
||||||
// customFees represents source of customized per-operation fees.
|
|
||||||
customFees map[string]fixedn.Fixed8
|
|
||||||
}
|
|
||||||
|
|
||||||
// returns fee for the operation executed using specified contract method.
|
|
||||||
// Returns customized value if it is set. Otherwise, returns default value.
|
|
||||||
func (x fees) feeForMethod(method string) fixedn.Fixed8 {
|
|
||||||
if x.customFees != nil {
|
|
||||||
if fee, ok := x.customFees[method]; ok {
|
|
||||||
return fee
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return x.defaultFee
|
|
||||||
}
|
|
|
@ -1,32 +0,0 @@
|
||||||
package client
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/encoding/fixedn"
|
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestFees(t *testing.T) {
|
|
||||||
var v fees
|
|
||||||
|
|
||||||
const method = "some method"
|
|
||||||
|
|
||||||
var (
|
|
||||||
fee fixedn.Fixed8
|
|
||||||
def = fixedn.Fixed8(13)
|
|
||||||
)
|
|
||||||
|
|
||||||
v.defaultFee = def
|
|
||||||
|
|
||||||
fee = v.feeForMethod(method)
|
|
||||||
require.True(t, fee.Equal(def))
|
|
||||||
|
|
||||||
const customFee = fixedn.Fixed8(10)
|
|
||||||
|
|
||||||
v.setFeeForMethod(method, customFee)
|
|
||||||
|
|
||||||
fee = v.feeForMethod(method)
|
|
||||||
|
|
||||||
require.Equal(t, customFee, fee)
|
|
||||||
}
|
|
|
@ -27,7 +27,7 @@ type staticOpts struct {
|
||||||
tryNotary bool
|
tryNotary bool
|
||||||
alpha bool // use client's key to sign notary request's main TX
|
alpha bool // use client's key to sign notary request's main TX
|
||||||
|
|
||||||
fees fees
|
fee fixedn.Fixed8
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithNotary returns notary status of the client.
|
// WithNotary returns notary status of the client.
|
||||||
|
@ -63,7 +63,7 @@ func NewStatic(client *Client, scriptHash util.Uint160, fee fixedn.Fixed8, opts
|
||||||
scScriptHash: scriptHash,
|
scScriptHash: scriptHash,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.fees.defaultFee = fee
|
c.fee = fee
|
||||||
|
|
||||||
for i := range opts {
|
for i := range opts {
|
||||||
opts[i](&c.staticOpts)
|
opts[i](&c.staticOpts)
|
||||||
|
@ -125,8 +125,6 @@ func (i *InvokePrmOptional) SetControlTX(b bool) {
|
||||||
// If fee for the operation executed using specified method is customized, then StaticClient uses it.
|
// If fee for the operation executed using specified method is customized, then StaticClient uses it.
|
||||||
// Otherwise, default fee is used.
|
// Otherwise, default fee is used.
|
||||||
func (s StaticClient) Invoke(prm InvokePrm) error {
|
func (s StaticClient) Invoke(prm InvokePrm) error {
|
||||||
fee := s.fees.feeForMethod(prm.method)
|
|
||||||
|
|
||||||
if s.tryNotary {
|
if s.tryNotary {
|
||||||
if s.alpha {
|
if s.alpha {
|
||||||
var (
|
var (
|
||||||
|
@ -149,15 +147,15 @@ func (s StaticClient) Invoke(prm InvokePrm) error {
|
||||||
vubP = &vub
|
vubP = &vub
|
||||||
}
|
}
|
||||||
|
|
||||||
return s.client.NotaryInvoke(s.scScriptHash, fee, nonce, vubP, prm.method, prm.args...)
|
return s.client.NotaryInvoke(s.scScriptHash, s.fee, nonce, vubP, prm.method, prm.args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
return s.client.NotaryInvokeNotAlpha(s.scScriptHash, fee, prm.method, prm.args...)
|
return s.client.NotaryInvokeNotAlpha(s.scScriptHash, s.fee, prm.method, prm.args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
return s.client.Invoke(
|
return s.client.Invoke(
|
||||||
s.scScriptHash,
|
s.scScriptHash,
|
||||||
fee,
|
s.fee,
|
||||||
prm.method,
|
prm.method,
|
||||||
prm.args...,
|
prm.args...,
|
||||||
)
|
)
|
||||||
|
@ -211,11 +209,3 @@ func AsAlphabet() StaticClientOption {
|
||||||
o.alpha = true
|
o.alpha = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithCustomFee returns option to specify custom fee for the operation executed using
|
|
||||||
// specified contract method.
|
|
||||||
func WithCustomFee(method string, fee fixedn.Fixed8) StaticClientOption {
|
|
||||||
return func(o *staticOpts) {
|
|
||||||
o.fees.setFeeForMethod(method, fee)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue