Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ Changelog for NeoFS Node
### Changed
- SN retries notary requests if `insufficient amount of gas` error appears (#3739)
- Speed up metabase resync by using batch operations (#3804)
- Notary events parsing is now done via NeoGo `scparser` package (#3813)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure it's worth mentioning at all, it's deeply internal to node. And this is outdated wrt 0.51.1 release as well.


### Removed

Expand Down
62 changes: 17 additions & 45 deletions pkg/morph/event/container/delete_notary.go
Original file line number Diff line number Diff line change
@@ -1,35 +1,10 @@
package container

import (
"github.com/nspcc-dev/neo-go/pkg/vm/opcode"
"github.com/nspcc-dev/neo-go/pkg/smartcontract/scparser"
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
)

func (d *Delete) setContainerID(v []byte) {
if v != nil {
d.containerID = v
}
}

func (d *Delete) setSignature(v []byte) {
if v != nil {
d.signature = v
}
}

func (d *Delete) setToken(v []byte) {
if v != nil {
d.token = v
}
}

var deleteFieldSetters = []func(*Delete, []byte){
// order on stack is reversed
(*Delete).setToken,
(*Delete).setSignature,
(*Delete).setContainerID,
}

const (
// DeleteNotaryEvent is method name for container delete operations
// in `Container` contract. Is used as identificator for notary
Expand All @@ -40,27 +15,24 @@ const (
// ParseDeleteNotary from NotaryEvent into container event structure.
func ParseDeleteNotary(ne event.NotaryEvent) (event.Event, error) {
const expectedItemNumDelete = 3
var (
ev Delete
currentOp opcode.Opcode
)

fieldNum := 0
var ev Delete

for _, op := range ne.Params() {
currentOp = op.Code()

switch {
case opcode.PUSHDATA1 <= currentOp && currentOp <= opcode.PUSHDATA4:
if fieldNum == expectedItemNumDelete {
return nil, event.UnexpectedArgNumErr(DeleteNotaryEvent)
}
args, err := event.GetArgs(ne, expectedItemNumDelete)
if err != nil {
return nil, err
}

deleteFieldSetters[fieldNum](&ev, op.Param())
fieldNum++
default:
return nil, event.UnexpectedOpcode(DeleteNotaryEvent, op.Code())
}
ev.containerID, err = event.GetValueFromArg(args, 0, ne.Type().String(), scparser.GetBytesFromInstr)
if err != nil {
return nil, err
}
ev.signature, err = event.GetValueFromArg(args, 1, ne.Type().String(), scparser.GetBytesFromInstr)
if err != nil {
return nil, err
}
ev.token, err = event.GetValueFromArg(args, 2, ne.Type().String(), scparser.GetBytesFromInstr)
if err != nil {
return nil, err
}

ev.notaryRequest = ne.Raw()
Expand Down
73 changes: 21 additions & 52 deletions pkg/morph/event/container/eacl_notary.go
Original file line number Diff line number Diff line change
@@ -1,42 +1,10 @@
package container

import (
"github.com/nspcc-dev/neo-go/pkg/vm/opcode"
"github.com/nspcc-dev/neo-go/pkg/smartcontract/scparser"
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
)

func (x *SetEACL) setTable(v []byte) {
if v != nil {
x.table = v
}
}

func (x *SetEACL) setSignature(v []byte) {
if v != nil {
x.signature = v
}
}

func (x *SetEACL) setPublicKey(v []byte) {
if v != nil {
x.publicKey = v
}
}

func (x *SetEACL) setToken(v []byte) {
if v != nil {
x.token = v
}
}

var setEACLFieldSetters = []func(*SetEACL, []byte){
// order on stack is reversed
(*SetEACL).setToken,
(*SetEACL).setPublicKey,
(*SetEACL).setSignature,
(*SetEACL).setTable,
}

const (
// SetEACLNotaryEvent is method name for container EACL operations
// in `Container` contract. Is used as identificator for notary
Expand All @@ -47,27 +15,28 @@ const (
// ParseSetEACLNotary from NotaryEvent into container event structure.
func ParseSetEACLNotary(ne event.NotaryEvent) (event.Event, error) {
const expectedItemNumEACL = 4
var (
ev SetEACL
currentOp opcode.Opcode
)

fieldNum := 0
var ev SetEACL

for _, op := range ne.Params() {
currentOp = op.Code()

switch {
case opcode.PUSHDATA1 <= currentOp && currentOp <= opcode.PUSHDATA4:
if fieldNum == expectedItemNumEACL {
return nil, event.UnexpectedArgNumErr(SetEACLNotaryEvent)
}
args, err := event.GetArgs(ne, expectedItemNumEACL)
if err != nil {
return nil, err
}

setEACLFieldSetters[fieldNum](&ev, op.Param())
fieldNum++
default:
return nil, event.UnexpectedOpcode(SetEACLNotaryEvent, op.Code())
}
ev.table, err = event.GetValueFromArg(args, 0, ne.Type().String(), scparser.GetBytesFromInstr)
if err != nil {
return nil, err
}
ev.signature, err = event.GetValueFromArg(args, 1, ne.Type().String(), scparser.GetBytesFromInstr)
if err != nil {
return nil, err
}
ev.publicKey, err = event.GetValueFromArg(args, 2, ne.Type().String(), scparser.GetBytesFromInstr)
if err != nil {
return nil, err
}
ev.token, err = event.GetValueFromArg(args, 3, ne.Type().String(), scparser.GetBytesFromInstr)
if err != nil {
return nil, err
}

ev.notaryRequest = ne.Raw()
Expand Down
12 changes: 6 additions & 6 deletions pkg/morph/event/container/load_notary.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package container

import (
"github.com/nspcc-dev/neo-go/pkg/network/payload"
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
"github.com/nspcc-dev/neo-go/pkg/smartcontract/scparser"
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
)

Expand All @@ -24,25 +24,25 @@ func (r Report) MorphEvent() {}
// ParsePutReport from NotaryEvent into container event structure.
func ParsePutReport(ne event.NotaryEvent) (event.Event, error) {
const expectedItemNumAnnounceLoad = 4
args, err := getArgsFromEvent(ne, expectedItemNumAnnounceLoad)
args, err := event.GetArgs(ne, expectedItemNumAnnounceLoad)
if err != nil {
return nil, err
}
var ev Report

ev.NodeKey, err = getValueFromArg(args, 0, "reporter's key", stackitem.ByteArrayT, event.BytesFromOpcode)
ev.CID, err = event.GetValueFromArg(args, 0, ne.Type().String(), scparser.GetBytesFromInstr)
if err != nil {
return nil, err
}
ev.ObjectsNumber, err = getValueFromArg(args, 1, "objects number", stackitem.IntegerT, event.IntFromOpcode)
ev.StorageSize, err = event.GetValueFromArg(args, 1, ne.Type().String(), scparser.GetInt64FromInstr)
if err != nil {
return nil, err
}
ev.StorageSize, err = getValueFromArg(args, 2, "container's size", stackitem.IntegerT, event.IntFromOpcode)
ev.ObjectsNumber, err = event.GetValueFromArg(args, 2, ne.Type().String(), scparser.GetInt64FromInstr)
if err != nil {
return nil, err
}
ev.CID, err = getValueFromArg(args, 3, "container ID", stackitem.ByteArrayT, event.BytesFromOpcode)
ev.NodeKey, err = event.GetValueFromArg(args, 3, ne.Type().String(), scparser.GetBytesFromInstr)
if err != nil {
return nil, err
}
Expand Down
Loading
Loading