forked from TrueCloudLab/frostfs-node
[#486] innerring: Use fee provider interface in invoke
package
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
parent
1f3bb33db8
commit
91a1896b8b
7 changed files with 135 additions and 24 deletions
|
@ -22,10 +22,14 @@ func AlphabetEmit(cli *client.Client, con util.Uint160) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// AlphabetVote invokes vote method on alphabet contract.
|
// AlphabetVote invokes vote method on alphabet contract.
|
||||||
func AlphabetVote(cli *client.Client, con util.Uint160, epoch uint64, keys keys.PublicKeys) error {
|
func AlphabetVote(cli *client.Client, con util.Uint160, fee SideFeeProvider, epoch uint64, keys keys.PublicKeys) error {
|
||||||
if cli == nil {
|
if cli == nil {
|
||||||
return client.ErrNilClient
|
return client.ErrNilClient
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !cli.NotaryEnabled() {
|
||||||
|
return cli.Invoke(con, fee.SideChainFee(), voteMethod, int64(epoch), keys)
|
||||||
|
}
|
||||||
|
|
||||||
return cli.NotaryInvoke(con, voteMethod, int64(epoch), keys)
|
return cli.NotaryInvoke(con, voteMethod, int64(epoch), keys)
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,11 +32,19 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
// Mint assets in contract.
|
// Mint assets in contract.
|
||||||
func Mint(cli *client.Client, con util.Uint160, p *MintBurnParams) error {
|
func Mint(cli *client.Client, con util.Uint160, fee SideFeeProvider, p *MintBurnParams) error {
|
||||||
if cli == nil {
|
if cli == nil {
|
||||||
return client.ErrNilClient
|
return client.ErrNilClient
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !cli.NotaryEnabled() {
|
||||||
|
return cli.Invoke(con, fee.SideChainFee(), mintMethod,
|
||||||
|
p.ScriptHash,
|
||||||
|
p.Amount,
|
||||||
|
p.Comment,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
return cli.NotaryInvoke(con, mintMethod,
|
return cli.NotaryInvoke(con, mintMethod,
|
||||||
p.ScriptHash,
|
p.ScriptHash,
|
||||||
p.Amount,
|
p.Amount,
|
||||||
|
@ -45,11 +53,19 @@ func Mint(cli *client.Client, con util.Uint160, p *MintBurnParams) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Burn minted assets.
|
// Burn minted assets.
|
||||||
func Burn(cli *client.Client, con util.Uint160, p *MintBurnParams) error {
|
func Burn(cli *client.Client, con util.Uint160, fee SideFeeProvider, p *MintBurnParams) error {
|
||||||
if cli == nil {
|
if cli == nil {
|
||||||
return client.ErrNilClient
|
return client.ErrNilClient
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !cli.NotaryEnabled() {
|
||||||
|
return cli.Invoke(con, fee.SideChainFee(), burnMethod,
|
||||||
|
p.ScriptHash,
|
||||||
|
p.Amount,
|
||||||
|
p.Comment,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
return cli.NotaryInvoke(con, burnMethod,
|
return cli.NotaryInvoke(con, burnMethod,
|
||||||
p.ScriptHash,
|
p.ScriptHash,
|
||||||
p.Amount,
|
p.Amount,
|
||||||
|
@ -58,11 +74,21 @@ func Burn(cli *client.Client, con util.Uint160, p *MintBurnParams) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// LockAsset invokes Lock method.
|
// LockAsset invokes Lock method.
|
||||||
func LockAsset(cli *client.Client, con util.Uint160, p *LockParams) error {
|
func LockAsset(cli *client.Client, con util.Uint160, fee SideFeeProvider, p *LockParams) error {
|
||||||
if cli == nil {
|
if cli == nil {
|
||||||
return client.ErrNilClient
|
return client.ErrNilClient
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !cli.NotaryEnabled() {
|
||||||
|
return cli.Invoke(con, fee.SideChainFee(), lockMethod,
|
||||||
|
p.ID,
|
||||||
|
p.User.BytesBE(),
|
||||||
|
p.LockAccount.BytesBE(),
|
||||||
|
p.Amount,
|
||||||
|
int64(p.Until),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
return cli.NotaryInvoke(con, lockMethod,
|
return cli.NotaryInvoke(con, lockMethod,
|
||||||
p.ID,
|
p.ID,
|
||||||
p.User.BytesBE(),
|
p.User.BytesBE(),
|
||||||
|
|
|
@ -5,10 +5,25 @@ import (
|
||||||
"crypto/ecdsa"
|
"crypto/ecdsa"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
|
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/encoding/fixedn"
|
||||||
crypto "github.com/nspcc-dev/neofs-crypto"
|
crypto "github.com/nspcc-dev/neofs-crypto"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
// SideFeeProvider is an interface that used by invoker package method to
|
||||||
|
// get extra fee for all non notary smart contract invocations in side chain.
|
||||||
|
SideFeeProvider interface {
|
||||||
|
SideChainFee() fixedn.Fixed8
|
||||||
|
}
|
||||||
|
|
||||||
|
// MainFeeProvider is an interface that used by invoker package method to
|
||||||
|
// get extra fee for all non notary smart contract invocations in main chain.
|
||||||
|
MainFeeProvider interface {
|
||||||
|
MainChainFee() fixedn.Fixed8
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
// InnerRingIndex returns index of the `key` in the inner ring list from sidechain
|
// InnerRingIndex returns index of the `key` in the inner ring list from sidechain
|
||||||
// along with total size of inner ring list. If key is not in the inner ring list,
|
// along with total size of inner ring list. If key is not in the inner ring list,
|
||||||
// then returns `-1` as index.
|
// then returns `-1` as index.
|
||||||
|
|
|
@ -14,7 +14,7 @@ type (
|
||||||
Signature []byte
|
Signature []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
// ContainerParams for container put invocation.
|
// RemoveContainerParams for container delete invocation.
|
||||||
RemoveContainerParams struct {
|
RemoveContainerParams struct {
|
||||||
ContainerID []byte
|
ContainerID []byte
|
||||||
Signature []byte
|
Signature []byte
|
||||||
|
@ -27,11 +27,19 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
// RegisterContainer invokes Put method.
|
// RegisterContainer invokes Put method.
|
||||||
func RegisterContainer(cli *client.Client, con util.Uint160, p *ContainerParams) error {
|
func RegisterContainer(cli *client.Client, con util.Uint160, fee SideFeeProvider, p *ContainerParams) error {
|
||||||
if cli == nil {
|
if cli == nil {
|
||||||
return client.ErrNilClient
|
return client.ErrNilClient
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !cli.NotaryEnabled() {
|
||||||
|
return cli.Invoke(con, fee.SideChainFee(), putContainerMethod,
|
||||||
|
p.Container,
|
||||||
|
p.Signature,
|
||||||
|
p.Key.Bytes(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
return cli.NotaryInvoke(con, putContainerMethod,
|
return cli.NotaryInvoke(con, putContainerMethod,
|
||||||
p.Container,
|
p.Container,
|
||||||
p.Signature,
|
p.Signature,
|
||||||
|
@ -39,12 +47,19 @@ func RegisterContainer(cli *client.Client, con util.Uint160, p *ContainerParams)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterContainer invokes Delete method.
|
// RemoveContainer invokes Delete method.
|
||||||
func RemoveContainer(cli *client.Client, con util.Uint160, p *RemoveContainerParams) error {
|
func RemoveContainer(cli *client.Client, con util.Uint160, fee SideFeeProvider, p *RemoveContainerParams) error {
|
||||||
if cli == nil {
|
if cli == nil {
|
||||||
return client.ErrNilClient
|
return client.ErrNilClient
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !cli.NotaryEnabled() {
|
||||||
|
return cli.Invoke(con, fee.SideChainFee(), deleteContainerMethod,
|
||||||
|
p.ContainerID,
|
||||||
|
p.Signature,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
return cli.NotaryInvoke(con, deleteContainerMethod,
|
return cli.NotaryInvoke(con, deleteContainerMethod,
|
||||||
p.ContainerID,
|
p.ContainerID,
|
||||||
p.Signature,
|
p.Signature,
|
||||||
|
|
|
@ -19,8 +19,8 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewContainerClient creates wrapper to access data from container contract.
|
// NewContainerClient creates wrapper to access data from container contract.
|
||||||
func NewContainerClient(cli *client.Client, contract util.Uint160) (*wrapContainer.Wrapper, error) {
|
func NewContainerClient(cli *client.Client, contract util.Uint160, fee SideFeeProvider) (*wrapContainer.Wrapper, error) {
|
||||||
staticClient, err := client.NewStatic(cli, contract, extraFee)
|
staticClient, err := client.NewStatic(cli, contract, fee.SideChainFee())
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
@ -34,8 +34,8 @@ func NewContainerClient(cli *client.Client, contract util.Uint160) (*wrapContain
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewNetmapClient creates wrapper to access data from netmap contract.
|
// NewNetmapClient creates wrapper to access data from netmap contract.
|
||||||
func NewNetmapClient(cli *client.Client, contract util.Uint160) (*wrapNetmap.Wrapper, error) {
|
func NewNetmapClient(cli *client.Client, contract util.Uint160, fee SideFeeProvider) (*wrapNetmap.Wrapper, error) {
|
||||||
staticClient, err := client.NewStatic(cli, contract, extraFee)
|
staticClient, err := client.NewStatic(cli, contract, fee.SideChainFee())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("can't create netmap static client: %w", err)
|
return nil, fmt.Errorf("can't create netmap static client: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -49,8 +49,8 @@ func NewNetmapClient(cli *client.Client, contract util.Uint160) (*wrapNetmap.Wra
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewAuditClient creates wrapper to work with Audit contract.
|
// NewAuditClient creates wrapper to work with Audit contract.
|
||||||
func NewAuditClient(cli *client.Client, contract util.Uint160) (*auditWrapper.ClientWrapper, error) {
|
func NewAuditClient(cli *client.Client, contract util.Uint160, fee SideFeeProvider) (*auditWrapper.ClientWrapper, error) {
|
||||||
staticClient, err := client.NewStatic(cli, contract, extraFee)
|
staticClient, err := client.NewStatic(cli, contract, fee.SideChainFee())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -59,8 +59,8 @@ func NewAuditClient(cli *client.Client, contract util.Uint160) (*auditWrapper.Cl
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewBalanceClient creates wrapper to work with Balance contract.
|
// NewBalanceClient creates wrapper to work with Balance contract.
|
||||||
func NewBalanceClient(cli *client.Client, contract util.Uint160) (*balanceWrapper.Wrapper, error) {
|
func NewBalanceClient(cli *client.Client, contract util.Uint160, fee SideFeeProvider) (*balanceWrapper.Wrapper, error) {
|
||||||
staticClient, err := client.NewStatic(cli, contract, extraFee)
|
staticClient, err := client.NewStatic(cli, contract, fee.SideChainFee())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "could not create static client of Balance contract")
|
return nil, errors.Wrap(err, "could not create static client of Balance contract")
|
||||||
}
|
}
|
||||||
|
@ -74,8 +74,8 @@ func NewBalanceClient(cli *client.Client, contract util.Uint160) (*balanceWrappe
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewReputationClient creates wrapper to work with reputation contract.
|
// NewReputationClient creates wrapper to work with reputation contract.
|
||||||
func NewReputationClient(cli *client.Client, contract util.Uint160) (*reputationWrapper.ClientWrapper, error) {
|
func NewReputationClient(cli *client.Client, contract util.Uint160, fee SideFeeProvider) (*reputationWrapper.ClientWrapper, error) {
|
||||||
staticClient, err := client.NewStatic(cli, contract, 0)
|
staticClient, err := client.NewStatic(cli, contract, fee.SideChainFee())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "could not create static client of reputation contract")
|
return nil, errors.Wrap(err, "could not create static client of reputation contract")
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,11 +31,20 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
// CashOutCheque invokes Cheque method.
|
// CashOutCheque invokes Cheque method.
|
||||||
func CashOutCheque(cli *client.Client, con util.Uint160, p *ChequeParams) error {
|
func CashOutCheque(cli *client.Client, con util.Uint160, fee MainFeeProvider, p *ChequeParams) error {
|
||||||
if cli == nil {
|
if cli == nil {
|
||||||
return client.ErrNilClient
|
return client.ErrNilClient
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !cli.NotaryEnabled() {
|
||||||
|
return cli.Invoke(con, fee.MainChainFee(), chequeMethod,
|
||||||
|
p.ID,
|
||||||
|
p.User.BytesBE(),
|
||||||
|
p.Amount,
|
||||||
|
p.LockAccount.BytesBE(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
return cli.NotaryInvoke(con, chequeMethod,
|
return cli.NotaryInvoke(con, chequeMethod,
|
||||||
p.ID,
|
p.ID,
|
||||||
p.User.BytesBE(),
|
p.User.BytesBE(),
|
||||||
|
@ -45,10 +54,14 @@ func CashOutCheque(cli *client.Client, con util.Uint160, p *ChequeParams) error
|
||||||
}
|
}
|
||||||
|
|
||||||
// AlphabetUpdate invokes alphabetUpdate method.
|
// AlphabetUpdate invokes alphabetUpdate method.
|
||||||
func AlphabetUpdate(cli *client.Client, con util.Uint160, id []byte, list keys.PublicKeys) error {
|
func AlphabetUpdate(cli *client.Client, con util.Uint160, fee MainFeeProvider, id []byte, list keys.PublicKeys) error {
|
||||||
if cli == nil {
|
if cli == nil {
|
||||||
return client.ErrNilClient
|
return client.ErrNilClient
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !cli.NotaryEnabled() {
|
||||||
|
return cli.Invoke(con, fee.MainChainFee(), alphabetUpdateMethod, id, list)
|
||||||
|
}
|
||||||
|
|
||||||
return cli.NotaryInvoke(con, alphabetUpdateMethod, id, list)
|
return cli.NotaryInvoke(con, alphabetUpdateMethod, id, list)
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ const (
|
||||||
approvePeerMethod = "addPeer"
|
approvePeerMethod = "addPeer"
|
||||||
updatePeerStateMethod = "updateState"
|
updatePeerStateMethod = "updateState"
|
||||||
setConfigMethod = "setConfig"
|
setConfigMethod = "setConfig"
|
||||||
|
setInnerRingMethod = "updateInnerRing"
|
||||||
getNetmapSnapshotMethod = "netmap"
|
getNetmapSnapshotMethod = "netmap"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -51,29 +52,44 @@ func Epoch(cli *client.Client, con util.Uint160) (int64, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetNewEpoch invokes newEpoch method.
|
// SetNewEpoch invokes newEpoch method.
|
||||||
func SetNewEpoch(cli *client.Client, con util.Uint160, epoch uint64) error {
|
func SetNewEpoch(cli *client.Client, con util.Uint160, fee SideFeeProvider, epoch uint64) error {
|
||||||
if cli == nil {
|
if cli == nil {
|
||||||
return client.ErrNilClient
|
return client.ErrNilClient
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !cli.NotaryEnabled() {
|
||||||
|
return cli.Invoke(con, fee.SideChainFee(), setNewEpochMethod, int64(epoch))
|
||||||
|
}
|
||||||
|
|
||||||
return cli.NotaryInvoke(con, setNewEpochMethod, int64(epoch))
|
return cli.NotaryInvoke(con, setNewEpochMethod, int64(epoch))
|
||||||
}
|
}
|
||||||
|
|
||||||
// ApprovePeer invokes addPeer method.
|
// ApprovePeer invokes addPeer method.
|
||||||
func ApprovePeer(cli *client.Client, con util.Uint160, peer []byte) error {
|
func ApprovePeer(cli *client.Client, con util.Uint160, fee SideFeeProvider, peer []byte) error {
|
||||||
if cli == nil {
|
if cli == nil {
|
||||||
return client.ErrNilClient
|
return client.ErrNilClient
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !cli.NotaryEnabled() {
|
||||||
|
return cli.Invoke(con, fee.SideChainFee(), approvePeerMethod, peer)
|
||||||
|
}
|
||||||
|
|
||||||
return cli.NotaryInvoke(con, approvePeerMethod, peer)
|
return cli.NotaryInvoke(con, approvePeerMethod, peer)
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdatePeerState invokes addPeer method.
|
// UpdatePeerState invokes addPeer method.
|
||||||
func UpdatePeerState(cli *client.Client, con util.Uint160, args *UpdatePeerArgs) error {
|
func UpdatePeerState(cli *client.Client, con util.Uint160, fee SideFeeProvider, args *UpdatePeerArgs) error {
|
||||||
if cli == nil {
|
if cli == nil {
|
||||||
return client.ErrNilClient
|
return client.ErrNilClient
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !cli.NotaryEnabled() {
|
||||||
|
return cli.Invoke(con, fee.SideChainFee(), updatePeerStateMethod,
|
||||||
|
int64(args.Status.ToV2()),
|
||||||
|
args.Key.Bytes(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
return cli.NotaryInvoke(con, updatePeerStateMethod,
|
return cli.NotaryInvoke(con, updatePeerStateMethod,
|
||||||
int64(args.Status.ToV2()),
|
int64(args.Status.ToV2()),
|
||||||
args.Key.Bytes(),
|
args.Key.Bytes(),
|
||||||
|
@ -81,11 +97,19 @@ func UpdatePeerState(cli *client.Client, con util.Uint160, args *UpdatePeerArgs)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetConfig invokes setConfig method.
|
// SetConfig invokes setConfig method.
|
||||||
func SetConfig(cli *client.Client, con util.Uint160, args *SetConfigArgs) error {
|
func SetConfig(cli *client.Client, con util.Uint160, fee SideFeeProvider, args *SetConfigArgs) error {
|
||||||
if cli == nil {
|
if cli == nil {
|
||||||
return client.ErrNilClient
|
return client.ErrNilClient
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !cli.NotaryEnabled() {
|
||||||
|
return cli.Invoke(con, fee.SideChainFee(), setConfigMethod,
|
||||||
|
args.ID,
|
||||||
|
args.Key,
|
||||||
|
args.Value,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
return cli.NotaryInvoke(con, setConfigMethod,
|
return cli.NotaryInvoke(con, setConfigMethod,
|
||||||
args.ID,
|
args.ID,
|
||||||
args.Key,
|
args.Key,
|
||||||
|
@ -93,6 +117,20 @@ func SetConfig(cli *client.Client, con util.Uint160, args *SetConfigArgs) error
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetInnerRing invokes update inner ring method. This should be used only
|
||||||
|
// without notary support.
|
||||||
|
func SetInnerRing(cli *client.Client, con util.Uint160, fee SideFeeProvider, list keys.PublicKeys) error {
|
||||||
|
if cli == nil {
|
||||||
|
return client.ErrNilClient
|
||||||
|
}
|
||||||
|
|
||||||
|
if !cli.NotaryEnabled() {
|
||||||
|
return cli.Invoke(con, fee.SideChainFee(), setInnerRingMethod, list)
|
||||||
|
}
|
||||||
|
|
||||||
|
return cli.NotaryInvoke(con, setInnerRingMethod, list)
|
||||||
|
}
|
||||||
|
|
||||||
// NetmapSnapshot returns current netmap node infos.
|
// NetmapSnapshot returns current netmap node infos.
|
||||||
// Consider using pkg/morph/client/netmap for this.
|
// Consider using pkg/morph/client/netmap for this.
|
||||||
func NetmapSnapshot(cli *client.Client, con util.Uint160) (*netmap.Netmap, error) {
|
func NetmapSnapshot(cli *client.Client, con util.Uint160) (*netmap.Netmap, error) {
|
||||||
|
|
Loading…
Reference in a new issue