forked from TrueCloudLab/frostfs-node
53 lines
1.4 KiB
Go
53 lines
1.4 KiB
Go
|
package client
|
||
|
|
||
|
import "github.com/nspcc-dev/neo-go/pkg/encoding/fixedn"
|
||
|
|
||
|
// customFees represents source of customized per-operation fees.
|
||
|
// Can be initialized using var declaration.
|
||
|
//
|
||
|
// Instances are not thread-safe, so they mean initially filling, and then only reading.
|
||
|
type customFees map[string]fixedn.Fixed8
|
||
|
|
||
|
// setFeeForMethod sets fee for the operation executed using specified contract method.
|
||
|
func (x *customFees) setFeeForMethod(method string, fee fixedn.Fixed8) {
|
||
|
m := *x
|
||
|
if m == nil {
|
||
|
m = make(map[string]fixedn.Fixed8, 1)
|
||
|
*x = m
|
||
|
}
|
||
|
|
||
|
m[method] = fee
|
||
|
}
|
||
|
|
||
|
// returns customized for the operation executed using specified contract method.
|
||
|
// Returns false if fee is not customized.
|
||
|
func (x customFees) feeForMethod(method string) (fixedn.Fixed8, bool) {
|
||
|
v, ok := x[method]
|
||
|
return v, ok
|
||
|
}
|
||
|
|
||
|
// 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
|
||
|
}
|
||
|
|
||
|
// sets default fee for all operations.
|
||
|
func (x *fees) setDefault(fee fixedn.Fixed8) {
|
||
|
x.defaultFee = fee
|
||
|
}
|
||
|
|
||
|
// 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 fee, ok := x.customFees.feeForMethod(method); ok {
|
||
|
return fee
|
||
|
}
|
||
|
|
||
|
return x.defaultFee
|
||
|
}
|