Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix/Child objects ACL #2716

Merged
merged 8 commits into from
Mar 20, 2024
Merged
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 @@ -20,6 +20,7 @@ Changelog for NeoFS Node
- Empty filter value is now treated as `NOT_PRESENT` op by CLI `acl extended create` cmd (#2742)
- Storage nodes no longer accept objects with header larger than 16KB (#2749)
- IR sends NeoFS chain GAS to netmap nodes every epoch, not per a configurable blocks number (#2777)
- Big objects are split with the new split scheme (#2667)

### Removed
- Object notifications incl. NATS (#2750)
Expand Down
4 changes: 4 additions & 0 deletions cmd/neofs-cli/modules/object/head.go
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,10 @@
cmd.Printf("Split PreviousID: %s\n", prev)
}

if first, ok := obj.FirstID(); ok {
cmd.Printf("Split FirstID: %s\n", first)

Check warning on line 189 in cmd/neofs-cli/modules/object/head.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/object/head.go#L188-L189

Added lines #L188 - L189 were not covered by tests
}

for _, child := range obj.Children() {
cmd.Printf("Split ChildID: %s\n", child.String())
}
Expand Down
77 changes: 68 additions & 9 deletions cmd/neofs-cli/modules/object/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -380,24 +380,23 @@
if idLinking, ok := splitInfo.Link(); ok {
common.PrintVerbose(cmd, "Collecting split members using linking object %s...", idLinking)

var children []oid.ID

Check warning on line 383 in cmd/neofs-cli/modules/object/util.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/object/util.go#L383

Added line #L383 was not covered by tests
addrObj.SetObject(idLinking)
prmHead.SetAddress(addrObj)
prmHead.SetRawFlag(false)
// client is already set

res, err := internal.HeadObject(ctx, prmHead)
if err == nil {
children := res.Header().Children()

common.PrintVerbose(cmd, "Received split members from the linking object: %v", children)
if splitInfo.SplitID() == nil {
children, err = getChildrenFromV2Link(ctx, cmd, cli, key, addrObj)
} else {
children, err = getChildrenFromV1Link(ctx, cmd, cli, key, addrObj)

Check warning on line 389 in cmd/neofs-cli/modules/object/util.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/object/util.go#L386-L389

Added lines #L386 - L389 were not covered by tests
}

if err == nil {

Check warning on line 392 in cmd/neofs-cli/modules/object/util.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/object/util.go#L392

Added line #L392 was not covered by tests
// include linking object
return append(children, idLinking)
}

// linking object is not required for
// object collecting
common.PrintVerbose(cmd, "failed to get linking object's header: %w", err)
common.PrintVerbose(cmd, "failed to get children from the link object: %w", err)

Check warning on line 399 in cmd/neofs-cli/modules/object/util.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/object/util.go#L399

Added line #L399 was not covered by tests
}

if idSplit := splitInfo.SplitID(); idSplit != nil {
Expand Down Expand Up @@ -483,3 +482,63 @@

return chain
}

type payloadWriter struct {
payload []byte
}

func (pw *payloadWriter) Write(p []byte) (n int, err error) {
pw.payload = append(pw.payload, p...)
return len(p), nil

Check warning on line 492 in cmd/neofs-cli/modules/object/util.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/object/util.go#L490-L492

Added lines #L490 - L492 were not covered by tests
}

func getChildrenFromV2Link(ctx context.Context, cmd *cobra.Command, cli *client.Client, key *ecdsa.PrivateKey, linkAddr oid.Address) ([]oid.ID, error) {
var prmGet internal.GetObjectPrm
pw := &payloadWriter{}

Check warning on line 497 in cmd/neofs-cli/modules/object/util.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/object/util.go#L495-L497

Added lines #L495 - L497 were not covered by tests

prmGet.SetClient(cli)
prmGet.SetPrivateKey(*key)
prmGet.SetAddress(linkAddr)
prmGet.SetPayloadWriter(pw)
Prepare(cmd, &prmGet)

Check warning on line 503 in cmd/neofs-cli/modules/object/util.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/object/util.go#L499-L503

Added lines #L499 - L503 were not covered by tests

_, err := internal.GetObject(ctx, prmGet)
if err != nil {
return nil, fmt.Errorf("link object getting: %w", err)

Check warning on line 507 in cmd/neofs-cli/modules/object/util.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/object/util.go#L505-L507

Added lines #L505 - L507 were not covered by tests
}

var link object.Link
err = link.Unmarshal(pw.payload)
if err != nil {
return nil, fmt.Errorf("failed to decode linking object's payload: %w", err)

Check warning on line 513 in cmd/neofs-cli/modules/object/util.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/object/util.go#L510-L513

Added lines #L510 - L513 were not covered by tests
}

res := make([]oid.ID, 0, len(link.Objects()))
for _, child := range link.Objects() {
res = append(res, child.ObjectID())

Check warning on line 518 in cmd/neofs-cli/modules/object/util.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/object/util.go#L516-L518

Added lines #L516 - L518 were not covered by tests
}

common.PrintVerbose(cmd, "Received split members from the linking object: %v", res)

Check warning on line 521 in cmd/neofs-cli/modules/object/util.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/object/util.go#L521

Added line #L521 was not covered by tests

return res, nil

Check warning on line 523 in cmd/neofs-cli/modules/object/util.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/object/util.go#L523

Added line #L523 was not covered by tests
}

func getChildrenFromV1Link(ctx context.Context, cmd *cobra.Command, cli *client.Client, key *ecdsa.PrivateKey, linkAddr oid.Address) ([]oid.ID, error) {
var prmHead internal.HeadObjectPrm

Check warning on line 527 in cmd/neofs-cli/modules/object/util.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/object/util.go#L526-L527

Added lines #L526 - L527 were not covered by tests

prmHead.SetClient(cli)
prmHead.SetPrivateKey(*key)
prmHead.SetAddress(linkAddr)
Prepare(cmd, &prmHead)

Check warning on line 532 in cmd/neofs-cli/modules/object/util.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/object/util.go#L529-L532

Added lines #L529 - L532 were not covered by tests

res, err := internal.HeadObject(ctx, prmHead)
if err == nil {
children := res.Header().Children()

Check warning on line 536 in cmd/neofs-cli/modules/object/util.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/object/util.go#L534-L536

Added lines #L534 - L536 were not covered by tests

common.PrintVerbose(cmd, "Received split members from the linking object: %v", children)

Check warning on line 538 in cmd/neofs-cli/modules/object/util.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/object/util.go#L538

Added line #L538 was not covered by tests

return children, nil

Check warning on line 540 in cmd/neofs-cli/modules/object/util.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/object/util.go#L540

Added line #L540 was not covered by tests
}

return nil, fmt.Errorf("receiving link object's header: %w", err)

Check warning on line 543 in cmd/neofs-cli/modules/object/util.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/object/util.go#L543

Added line #L543 was not covered by tests
}
44 changes: 40 additions & 4 deletions cmd/neofs-cli/modules/storagegroup/put.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"github.com/nspcc-dev/neofs-node/cmd/neofs-cli/internal/key"
objectCli "github.com/nspcc-dev/neofs-node/cmd/neofs-cli/modules/object"
"github.com/nspcc-dev/neofs-node/pkg/services/object_manager/storagegroup"
"github.com/nspcc-dev/neofs-sdk-go/client"
cid "github.com/nspcc-dev/neofs-sdk-go/container/id"
"github.com/nspcc-dev/neofs-sdk-go/object"
oid "github.com/nspcc-dev/neofs-sdk-go/object/id"
Expand Down Expand Up @@ -80,6 +81,7 @@
headPrm internalclient.HeadObjectPrm
putPrm internalclient.PutObjectPrm
getCnrPrm internalclient.GetContainerPrm
getPrm internalclient.GetObjectPrm

Check warning on line 84 in cmd/neofs-cli/modules/storagegroup/put.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/storagegroup/put.go#L84

Added line #L84 was not covered by tests
)

cli := internalclient.GetSDKClientByFlag(ctx, cmd, commonflags.RPC)
Expand All @@ -96,12 +98,19 @@
headPrm.SetClient(cli)
headPrm.SetPrivateKey(*pk)

headPrm.SetRawFlag(true)
getPrm.SetClient(cli)
getPrm.SetPrivateKey(*pk)
objectCli.Prepare(cmd, &getPrm)

Check warning on line 104 in cmd/neofs-cli/modules/storagegroup/put.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/storagegroup/put.go#L101-L104

Added lines #L101 - L104 were not covered by tests

sg, err := storagegroup.CollectMembers(sgHeadReceiver{
ctx: ctx,
cmd: cmd,
key: pk,
ownerID: &ownerID,
prm: headPrm,
prmHead: headPrm,
cli: cli,
getPrm: getPrm,

Check warning on line 113 in cmd/neofs-cli/modules/storagegroup/put.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/storagegroup/put.go#L111-L113

Added lines #L111 - L113 were not covered by tests
}, cnr, members, !resGetCnr.Container().IsHomomorphicHashingDisabled())
common.ExitOnErr(cmd, "could not collect storage group members: %w", err)

Expand Down Expand Up @@ -138,13 +147,40 @@
cmd *cobra.Command
key *ecdsa.PrivateKey
ownerID *user.ID
prm internalclient.HeadObjectPrm
prmHead internalclient.HeadObjectPrm
cli *client.Client
getPrm internalclient.GetObjectPrm
}

type payloadWriter struct {
payload []byte
}

func (pw *payloadWriter) Write(p []byte) (n int, err error) {
pw.payload = append(pw.payload, p...)
return len(p), nil

Check warning on line 161 in cmd/neofs-cli/modules/storagegroup/put.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/storagegroup/put.go#L159-L161

Added lines #L159 - L161 were not covered by tests
}

func (c sgHeadReceiver) Get(addr oid.Address) (object.Object, error) {
pw := &payloadWriter{}
c.getPrm.SetPayloadWriter(pw)
c.getPrm.SetAddress(addr)

Check warning on line 167 in cmd/neofs-cli/modules/storagegroup/put.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/storagegroup/put.go#L164-L167

Added lines #L164 - L167 were not covered by tests

res, err := internalclient.GetObject(c.ctx, c.getPrm)
if err != nil {
return object.Object{}, fmt.Errorf("rpc error: %w", err)

Check warning on line 171 in cmd/neofs-cli/modules/storagegroup/put.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/storagegroup/put.go#L169-L171

Added lines #L169 - L171 were not covered by tests
}

obj := res.Header()
obj.SetPayload(pw.payload)

Check warning on line 175 in cmd/neofs-cli/modules/storagegroup/put.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/storagegroup/put.go#L174-L175

Added lines #L174 - L175 were not covered by tests

return *obj, nil

Check warning on line 177 in cmd/neofs-cli/modules/storagegroup/put.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/storagegroup/put.go#L177

Added line #L177 was not covered by tests
}

func (c sgHeadReceiver) Head(addr oid.Address) (any, error) {
c.prm.SetAddress(addr)
c.prmHead.SetAddress(addr)

Check warning on line 181 in cmd/neofs-cli/modules/storagegroup/put.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/storagegroup/put.go#L181

Added line #L181 was not covered by tests

res, err := internalclient.HeadObject(c.ctx, c.prm)
res, err := internalclient.HeadObject(c.ctx, c.prmHead)

Check warning on line 183 in cmd/neofs-cli/modules/storagegroup/put.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-cli/modules/storagegroup/put.go#L183

Added line #L183 was not covered by tests

var errSplitInfo *object.SplitInfoError

Expand Down
108 changes: 87 additions & 21 deletions cmd/neofs-node/object.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"errors"
"fmt"

lru "github.com/hashicorp/golang-lru/v2"
"github.com/nspcc-dev/neofs-api-go/v2/object"
objectGRPC "github.com/nspcc-dev/neofs-api-go/v2/object/grpc"
replicatorconfig "github.com/nspcc-dev/neofs-node/cmd/neofs-node/config/replicator"
Expand All @@ -28,6 +29,7 @@
putsvcV2 "github.com/nspcc-dev/neofs-node/pkg/services/object/put/v2"
searchsvc "github.com/nspcc-dev/neofs-node/pkg/services/object/search"
searchsvcV2 "github.com/nspcc-dev/neofs-node/pkg/services/object/search/v2"
"github.com/nspcc-dev/neofs-node/pkg/services/object/split"
"github.com/nspcc-dev/neofs-node/pkg/services/object/util"
"github.com/nspcc-dev/neofs-node/pkg/services/object_manager/placement"
"github.com/nspcc-dev/neofs-node/pkg/services/policer"
Expand Down Expand Up @@ -224,6 +226,26 @@

c.workers = append(c.workers, c.shared.policer)

sGet := getsvc.New(
getsvc.WithLogger(c.log),
getsvc.WithLocalStorageEngine(ls),
getsvc.WithClientConstructor(coreConstructor),
getsvc.WithTraverserGenerator(
traverseGen.WithTraverseOptions(
placement.SuccessAfter(1),
),
),
getsvc.WithNetMapSource(c.netMapSource),
getsvc.WithKeyStorage(keyStorage),
)

Check warning on line 240 in cmd/neofs-node/object.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-node/object.go#L229-L240

Added lines #L229 - L240 were not covered by tests

*c.cfgObject.getSvc = *sGet // need smth better

Check warning on line 242 in cmd/neofs-node/object.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-node/object.go#L242

Added line #L242 was not covered by tests

sGetV2 := getsvcV2.NewService(
getsvcV2.WithInternalService(sGet),
getsvcV2.WithKeyStorage(keyStorage),
)

Check warning on line 247 in cmd/neofs-node/object.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-node/object.go#L244-L247

Added lines #L244 - L247 were not covered by tests

sPut := putsvc.NewService(
putsvc.WithKeyStorage(keyStorage),
putsvc.WithClientConstructor(putConstructor),
Expand All @@ -235,6 +257,7 @@
putsvc.WithNetworkState(c.cfgNetmap.state),
putsvc.WithWorkerPools(c.cfgObject.pool.putRemote, c.cfgObject.pool.putLocal),
putsvc.WithLogger(c.log),
putsvc.WithSplitChainVerifier(split.NewVerifier(sGet)),

Check warning on line 260 in cmd/neofs-node/object.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-node/object.go#L260

Added line #L260 was not covered by tests
)

sPutV2 := putsvcV2.NewService(
Expand All @@ -260,26 +283,6 @@
searchsvcV2.WithKeyStorage(keyStorage),
)

sGet := getsvc.New(
getsvc.WithLogger(c.log),
getsvc.WithLocalStorageEngine(ls),
getsvc.WithClientConstructor(coreConstructor),
getsvc.WithTraverserGenerator(
traverseGen.WithTraverseOptions(
placement.SuccessAfter(1),
),
),
getsvc.WithNetMapSource(c.netMapSource),
getsvc.WithKeyStorage(keyStorage),
)

*c.cfgObject.getSvc = *sGet // need smth better

sGetV2 := getsvcV2.NewService(
getsvcV2.WithInternalService(sGet),
getsvcV2.WithKeyStorage(keyStorage),
)

sDelete := deletesvc.New(
deletesvc.WithLogger(c.log),
deletesvc.WithHeadService(sGet),
Expand Down Expand Up @@ -312,6 +315,13 @@
},
)

// cachedFirstObjectsNumber is a total cached objects number; the V2 split scheme
// expects the first part of the chain to hold a user-defined header of the original
// object which should be treated as a header to use for the eACL rules check; so
// every object part in every chain will try to refer to the first part, so caching
// should help a lot here
const cachedFirstObjectsNumber = 1000

Check warning on line 323 in cmd/neofs-node/object.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-node/object.go#L323

Added line #L323 was not covered by tests

aclSvc := v2.New(
v2.WithLogger(c.log),
v2.WithIRFetcher(newCachedIRFetcher(irFetcher)),
Expand All @@ -325,7 +335,8 @@
SetNetmapState(c.cfgNetmap.state).
SetEACLSource(c.cfgObject.eaclSource).
SetValidator(eaclSDK.NewValidator()).
SetLocalStorage(ls),
SetLocalStorage(ls).
SetHeaderSource(cachedHeaderSource(sGet, cachedFirstObjectsNumber)),

Check warning on line 339 in cmd/neofs-node/object.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-node/object.go#L338-L339

Added lines #L338 - L339 were not covered by tests
),
),
)
Expand Down Expand Up @@ -535,3 +546,58 @@
func (e storageEngine) Put(o *objectSDK.Object) error {
return engine.Put(e.engine, o)
}

func cachedHeaderSource(getSvc *getsvc.Service, cacheSize int) headerSource {
hs := headerSource{getsvc: getSvc}

Check warning on line 551 in cmd/neofs-node/object.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-node/object.go#L550-L551

Added lines #L550 - L551 were not covered by tests

if cacheSize > 0 {
var err error
hs.cache, err = lru.New[oid.Address, *objectSDK.Object](cacheSize)
if err != nil {
panic(fmt.Errorf("unexpected error in lru.New: %w", err))

Check warning on line 557 in cmd/neofs-node/object.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-node/object.go#L553-L557

Added lines #L553 - L557 were not covered by tests
}
}

return hs

Check warning on line 561 in cmd/neofs-node/object.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-node/object.go#L561

Added line #L561 was not covered by tests
}

type headerSource struct {
getsvc *getsvc.Service
cache *lru.Cache[oid.Address, *objectSDK.Object]
}

type headerWriter struct {
h *objectSDK.Object
}

func (h *headerWriter) WriteHeader(o *objectSDK.Object) error {
h.h = o
return nil

Check warning on line 575 in cmd/neofs-node/object.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-node/object.go#L573-L575

Added lines #L573 - L575 were not covered by tests
}

func (h headerSource) Head(address oid.Address) (*objectSDK.Object, error) {
if h.cache != nil {
Copy link
Member

Choose a reason for hiding this comment

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

Why would it be nil?

Copy link
Member Author

@carpawell carpawell Mar 6, 2024

Choose a reason for hiding this comment

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

cacheSize may be zero so no caching is done then. hardcoded for now but may be useful in the future

Copy link
Member

Choose a reason for hiding this comment

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

Seems very artificial to me (likely cache can have zero size and still be instantiated), but OK.

Copy link
Member Author

Choose a reason for hiding this comment

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

we have a config param that explicitly says "no caching, please" (but for morph values mostly)

cacheSize may be zero

i meant you can change one const and it is not caching anymore, you may make it configurable and just init it with a value you read and zero value is already supported. i agree, it may look strange without a real use-case and config param but since it is already done, why not?

head, ok := h.cache.Get(address)
cthulhu-rider marked this conversation as resolved.
Show resolved Hide resolved
if ok {
return head, nil

Check warning on line 582 in cmd/neofs-node/object.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-node/object.go#L578-L582

Added lines #L578 - L582 were not covered by tests
}
}

var hw headerWriter

Check warning on line 586 in cmd/neofs-node/object.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-node/object.go#L586

Added line #L586 was not covered by tests

// no custom common prms since a caller is expected to be a container
// participant so no additional headers, access tokens, etc
var prm getsvc.HeadPrm
prm.SetHeaderWriter(&hw)
prm.WithAddress(address)
prm.WithRawFlag(true)

Check warning on line 593 in cmd/neofs-node/object.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-node/object.go#L590-L593

Added lines #L590 - L593 were not covered by tests

err := h.getsvc.Head(context.Background(), prm)
if err != nil {
return nil, fmt.Errorf("reading header: %w", err)

Check warning on line 597 in cmd/neofs-node/object.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-node/object.go#L595-L597

Added lines #L595 - L597 were not covered by tests
}

h.cache.Add(address, hw.h)

Check warning on line 600 in cmd/neofs-node/object.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-node/object.go#L600

Added line #L600 was not covered by tests

return hw.h, nil

Check warning on line 602 in cmd/neofs-node/object.go

View check run for this annotation

Codecov / codecov/patch

cmd/neofs-node/object.go#L602

Added line #L602 was not covered by tests
}
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ require (
github.com/nspcc-dev/neo-go v0.105.1
github.com/nspcc-dev/neofs-api-go/v2 v2.14.1-0.20240228163253-cb87bbd5e4eb
github.com/nspcc-dev/neofs-contract v0.19.1
github.com/nspcc-dev/neofs-sdk-go v1.0.0-rc.11.0.20240221185518-cbaf23c6aa7a
github.com/nspcc-dev/neofs-sdk-go v1.0.0-rc.11.0.20240228185329-d1bb0881274a
github.com/nspcc-dev/tzhash v1.8.0
github.com/olekukonko/tablewriter v0.0.5
github.com/panjf2000/ants/v2 v2.9.0
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -140,8 +140,8 @@ github.com/nspcc-dev/neofs-contract v0.19.1 h1:U1Uh+MlzfkalO0kRJ2pADZyHrmAOroC6K
github.com/nspcc-dev/neofs-contract v0.19.1/go.mod h1:ZOGouuwuHpgvYkx/LCGufGncIzEUhYEO18LL4cWEbyw=
github.com/nspcc-dev/neofs-crypto v0.4.1 h1:B6S0zXMWrVFlf/GlII6xKRGWU0VE7dHM+QkoKAO7AQA=
github.com/nspcc-dev/neofs-crypto v0.4.1/go.mod h1:0SHn+sSn+lrrIvonLR8MgbOlBhXZKhc4rw/l2htYeA0=
github.com/nspcc-dev/neofs-sdk-go v1.0.0-rc.11.0.20240221185518-cbaf23c6aa7a h1:vmN8Sm8Wna5BrgkGBvt5cnPTzU4Fu0JzC6VnwDNiDIA=
github.com/nspcc-dev/neofs-sdk-go v1.0.0-rc.11.0.20240221185518-cbaf23c6aa7a/go.mod h1:icGhc6HFg+yKivBUoP7cut62SASuijDiWD5Txd6vWqY=
github.com/nspcc-dev/neofs-sdk-go v1.0.0-rc.11.0.20240228185329-d1bb0881274a h1:YbLj8AtTVGvQ5Mi482dmftKIimqTsI5OXxjIPJefzEo=
github.com/nspcc-dev/neofs-sdk-go v1.0.0-rc.11.0.20240228185329-d1bb0881274a/go.mod h1:0WwnMTpMvbeKkU57+aLRtpOB7vu0eIpz7bu342ng8Gk=
github.com/nspcc-dev/rfc6979 v0.2.1 h1:8wWxkamHWFmO790GsewSoKUSJjVnL1fmdRpokU/RgRM=
github.com/nspcc-dev/rfc6979 v0.2.1/go.mod h1:Tk7h5kyUWkhjyO3zUgFFhy1v2vQv3BvQEntakdtqrWc=
github.com/nspcc-dev/tzhash v1.8.0 h1:pJvzME2mZzP/h5rcy/Wb6amT9FJBFeKbJ3HEnWEeUpY=
Expand Down
Loading
Loading