Skip to content

Commit 2de9c23

Browse files
author
Leonard Lyubich
committed
[#907] morph/event/container: Parse PutNamed event
Implement `ParsePutNamedNotary` function which parses `PutNamed` structure from `event.NotaryEvent`. Share common code with `ParsePutNotary` function. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
1 parent eebb816 commit 2de9c23

File tree

1 file changed

+58
-10
lines changed

1 file changed

+58
-10
lines changed

pkg/morph/event/container/put_notary.go

+58-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package container
22

33
import (
4+
"fmt"
5+
6+
"github.com/nspcc-dev/neo-go/pkg/network/payload"
47
"github.com/nspcc-dev/neo-go/pkg/vm/opcode"
58
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
69
)
@@ -42,34 +45,79 @@ const (
4245
// in `Container` contract. Is used as identificator for notary
4346
// put container requests.
4447
PutNotaryEvent = "put"
48+
49+
// PutNotaryEvent is an ID of notary "put named container" notification.
50+
PutNamedNotaryEvent = "putNamed"
4551
)
4652

47-
// ParsePutNotary from NotaryEvent into container event structure.
48-
func ParsePutNotary(ne event.NotaryEvent) (event.Event, error) {
53+
func parsePutNotary(ev *Put, raw *payload.P2PNotaryRequest, ops []event.Op) error {
4954
var (
50-
ev Put
5155
currentOp opcode.Opcode
56+
fieldNum = 0
5257
)
5358

54-
fieldNum := 0
55-
56-
for _, op := range ne.Params() {
59+
for _, op := range ops {
5760
currentOp = op.Code()
5861

5962
switch {
6063
case opcode.PUSHDATA1 <= currentOp && currentOp <= opcode.PUSHDATA4:
6164
if fieldNum == expectedItemNumPut {
62-
return nil, event.UnexpectedArgNumErr(PutNotaryEvent)
65+
return event.UnexpectedArgNumErr(PutNotaryEvent)
6366
}
6467

65-
putFieldSetters[fieldNum](&ev, op.Param())
68+
putFieldSetters[fieldNum](ev, op.Param())
6669
fieldNum++
6770
default:
68-
return nil, event.UnexpectedOpcode(PutNotaryEvent, op.Code())
71+
return event.UnexpectedOpcode(PutNotaryEvent, op.Code())
6972
}
7073
}
7174

72-
ev.notaryRequest = ne.Raw()
75+
ev.notaryRequest = raw
76+
77+
return nil
78+
}
79+
80+
// ParsePutNotary from NotaryEvent into container event structure.
81+
func ParsePutNotary(ne event.NotaryEvent) (event.Event, error) {
82+
var ev Put
83+
84+
err := parsePutNotary(&ev, ne.Raw(), ne.Params())
85+
if err != nil {
86+
return nil, err
87+
}
88+
89+
return ev, nil
90+
}
91+
92+
// ParsePutNamedNotary parses PutNamed event structure from generic event.NotaryEvent.
93+
func ParsePutNamedNotary(ne event.NotaryEvent) (event.Event, error) {
94+
ops := ne.Params()
95+
96+
const putNamedAdditionalArgs = 2 // PutNamed has same args as Put + (name, zone) (2)
97+
98+
if len(ops) != expectedItemNumPut+putNamedAdditionalArgs {
99+
return nil, event.UnexpectedArgNumErr(PutNamedNotaryEvent)
100+
}
101+
102+
var (
103+
ev PutNamed
104+
err error
105+
)
106+
107+
ev.zone, err = event.StringFromOpcode(ops[0])
108+
if err != nil {
109+
return nil, fmt.Errorf("parse arg zone: %w", err)
110+
}
111+
112+
ev.name, err = event.StringFromOpcode(ops[1])
113+
if err != nil {
114+
return nil, fmt.Errorf("parse arg name: %w", err)
115+
}
116+
117+
err = parsePutNotary(&ev.Put, ne.Raw(), ops[putNamedAdditionalArgs:])
118+
if err != nil {
119+
return nil, err
120+
}
73121

74122
return ev, nil
75123
}

0 commit comments

Comments
 (0)