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

feat: add Tags in object/bucket/group #215

Merged
merged 4 commits into from
Dec 7, 2023
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
4 changes: 2 additions & 2 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ on:
- develop

env:
GreenfieldTag: v1.1.0
GreenfieldStorageProviderTag: v1.0.5
GreenfieldTag: develop
ruojunm marked this conversation as resolved.
Show resolved Hide resolved
GreenfieldStorageProviderTag: feat-add-tags
GOPRIVATE: github.com/bnb-chain
GH_ACCESS_TOKEN: ${{ secrets.GH_TOKEN }}
MYSQL_USER: root
Expand Down
36 changes: 31 additions & 5 deletions client/api_basic.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,19 @@ import (
"strings"
"time"

"github.com/cometbft/cometbft/votepool"
"github.com/cosmos/cosmos-sdk/client/grpc/tmservice"

"cosmossdk.io/errors"
gosdktypes "github.com/bnb-chain/greenfield-go-sdk/types"
"github.com/bnb-chain/greenfield/sdk/types"
"github.com/cometbft/cometbft/proto/tendermint/p2p"
ctypes "github.com/cometbft/cometbft/rpc/core/types"
bfttypes "github.com/cometbft/cometbft/types"
"github.com/cometbft/cometbft/votepool"
"github.com/cosmos/cosmos-sdk/client/grpc/tmservice"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/tx"
"google.golang.org/grpc"

gosdktypes "github.com/bnb-chain/greenfield-go-sdk/types"
"github.com/bnb-chain/greenfield/sdk/types"
storageTypes "github.com/bnb-chain/greenfield/x/storage/types"
)

// IBasicClient interface defines basic functions of greenfield Client.
Expand Down Expand Up @@ -50,6 +51,7 @@ type IBasicClient interface {

BroadcastVote(ctx context.Context, vote votepool.Vote) error
QueryVote(ctx context.Context, eventType int, eventHash []byte) (*ctypes.ResultQueryVote, error)
SetTag(ctx context.Context, resourceGRN string, tags storageTypes.ResourceTags, opts gosdktypes.SetTagsOptions) (string, error)
}

// EnableTrace support trace error info the request and the response
Expand Down Expand Up @@ -439,3 +441,27 @@ func (c *Client) BroadcastVote(ctx context.Context, vote votepool.Vote) error {
func (c *Client) QueryVote(ctx context.Context, eventType int, eventHash []byte) (*ctypes.ResultQueryVote, error) {
return c.chainClient.QueryVote(ctx, eventType, eventHash)
}

// SetTag - Set tag for a given existing resource GRN (a bucket, a object or a group)
//
// This API sends a request to the greenfield chain to set tags for the given resource.
//
// - ctx: Context variables for the current API call.
//
// - resourceGRN: The GRN of resource that needs to set tags
//
// - tags: the tags to be set for the given resource
//
// - opts: The Options indicates the meta to construct setTag msg and the way to send transaction
//
// - ret1: Transaction hash return from blockchain.
//
// - ret2: Return error if SetTag failed, otherwise return nil.
func (c *Client) SetTag(ctx context.Context, resourceGRN string, tags storageTypes.ResourceTags, opts gosdktypes.SetTagsOptions) (string, error) {
msgSetTag := storageTypes.NewMsgSetTag(c.MustGetDefaultAccount().GetAddress(), resourceGRN, &tags)
resp, err := c.BroadcastTx(ctx, []sdk.Msg{msgSetTag}, opts.TxOpts)
if err != nil {
return "", err
}
return resp.TxResponse.TxHash, err
}
15 changes: 9 additions & 6 deletions client/api_bucket.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,16 @@ import (
"strings"
"time"

sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/tx"
govTypes "github.com/cosmos/cosmos-sdk/x/gov/types"
"github.com/rs/zerolog/log"

gnfdsdk "github.com/bnb-chain/greenfield/sdk/types"
gnfdTypes "github.com/bnb-chain/greenfield/types"
"github.com/bnb-chain/greenfield/types/s3util"
permTypes "github.com/bnb-chain/greenfield/x/permission/types"
storageTypes "github.com/bnb-chain/greenfield/x/storage/types"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/tx"
govTypes "github.com/cosmos/cosmos-sdk/x/gov/types"
"github.com/rs/zerolog/log"

"github.com/bnb-chain/greenfield-go-sdk/pkg/utils"
"github.com/bnb-chain/greenfield-go-sdk/types"
Expand Down Expand Up @@ -151,8 +152,10 @@ func (c *Client) CreateBucket(ctx context.Context, bucketName string, primaryAdd
}
}

createBucketMsg := storageTypes.NewMsgCreateBucket(c.MustGetDefaultAccount().GetAddress(), bucketName,
visibility, address, paymentAddr, 0, nil, opts.ChargedQuota)
createBucketMsg := storageTypes.NewMsgCreateBucket(c.MustGetDefaultAccount().GetAddress(), bucketName, visibility, address, paymentAddr, 0, nil, opts.ChargedQuota)
if opts.Tags != nil {
createBucketMsg.Tags = *opts.Tags
}

err = createBucketMsg.ValidateBasic()
if err != nil {
Expand Down
11 changes: 7 additions & 4 deletions client/api_group.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@ import (
"time"

sdkmath "cosmossdk.io/math"
"github.com/bnb-chain/greenfield-go-sdk/types"
gnfdTypes "github.com/bnb-chain/greenfield/types"
permTypes "github.com/bnb-chain/greenfield/x/permission/types"
storageTypes "github.com/bnb-chain/greenfield/x/storage/types"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/rs/zerolog/log"

"github.com/bnb-chain/greenfield-go-sdk/pkg/utils"
"github.com/bnb-chain/greenfield-go-sdk/types"
gnfdTypes "github.com/bnb-chain/greenfield/types"
permTypes "github.com/bnb-chain/greenfield/x/permission/types"
storageTypes "github.com/bnb-chain/greenfield/x/storage/types"
)

// IGroupClient interface defines functions related to Group.
Expand Down Expand Up @@ -70,6 +70,9 @@ type IGroupClient interface {
// - ret3: Return error when the request failed, otherwise return nil.
func (c *Client) CreateGroup(ctx context.Context, groupName string, opt types.CreateGroupOptions) (string, error) {
createGroupMsg := storageTypes.NewMsgCreateGroup(c.MustGetDefaultAccount().GetAddress(), groupName, opt.Extra)
if opt.Tags != nil {
createGroupMsg.Tags = *opt.Tags
}
return c.sendTxn(ctx, createGroupMsg, opt.TxOpts)
}

Expand Down
4 changes: 4 additions & 0 deletions client/api_object.go
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,10 @@ func (c *Client) CreateObject(ctx context.Context, bucketName, objectName string

createObjectMsg := storageTypes.NewMsgCreateObject(c.MustGetDefaultAccount().GetAddress(), bucketName, objectName,
uint64(size), visibility, expectCheckSums, contentType, redundancyType, math.MaxUint, nil)
if opts.Tags != nil {
createObjectMsg.Tags = *opts.Tags
}

err = createObjectMsg.ValidateBasic()
if err != nil {
return "", err
Expand Down
8 changes: 4 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ go 1.20
require (
cosmossdk.io/errors v1.0.0-beta.7
cosmossdk.io/math v1.0.1
github.com/bnb-chain/greenfield v1.1.0
github.com/bnb-chain/greenfield v1.0.2-0.20231205022545-1760620afde0
github.com/bnb-chain/greenfield-common/go v0.0.0-20230906132736-eb2f0efea228
github.com/cometbft/cometbft v0.37.2
github.com/consensys/gnark-crypto v0.7.0
Expand Down Expand Up @@ -143,13 +143,13 @@ require (
)

replace (
cosmossdk.io/api => github.com/bnb-chain/greenfield-cosmos-sdk/api v0.0.0-20230816082903-b48770f5e210
cosmossdk.io/math => github.com/bnb-chain/greenfield-cosmos-sdk/math v0.0.0-20230816082903-b48770f5e210
cosmossdk.io/api => github.com/bnb-chain/greenfield-cosmos-sdk/api v0.0.0-20231129013257-1e407f209b02
cosmossdk.io/math => github.com/bnb-chain/greenfield-cosmos-sdk/math v0.0.0-20231129013257-1e407f209b02
github.com/btcsuite/btcd => github.com/btcsuite/btcd v0.23.0
github.com/cometbft/cometbft => github.com/bnb-chain/greenfield-cometbft v1.1.0
github.com/cometbft/cometbft-db => github.com/bnb-chain/greenfield-cometbft-db v0.8.1-alpha.1
github.com/confio/ics23/go => github.com/cosmos/cosmos-sdk/ics23/go v0.8.0
github.com/cosmos/cosmos-sdk => github.com/bnb-chain/greenfield-cosmos-sdk v1.1.0
github.com/cosmos/cosmos-sdk => github.com/bnb-chain/greenfield-cosmos-sdk v1.0.2-0.20231129013257-1e407f209b02
github.com/cosmos/iavl => github.com/bnb-chain/greenfield-iavl v0.20.1
github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7
)
16 changes: 8 additions & 8 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -152,20 +152,20 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB
github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s=
github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c=
github.com/bnb-chain/greenfield v1.1.0 h1:YecOCXjSoxGNm2zJvJhxdquo4eox5b3MiDFFVW+0ka8=
github.com/bnb-chain/greenfield v1.1.0/go.mod h1:HMfL/0AqbhkVKTEQIWowu6jHXTxSB94QzgJ4gWHTWlA=
github.com/bnb-chain/greenfield v1.0.2-0.20231205022545-1760620afde0 h1:dnwMwE6IVg54Jzeaa8fN+BbLBJWVPcURs/2hKZipRuk=
github.com/bnb-chain/greenfield v1.0.2-0.20231205022545-1760620afde0/go.mod h1:hF7FWoXDx3ddImH3OGUNrlTdwkWKNIYUOGL+Yrq0nsg=
github.com/bnb-chain/greenfield-cometbft v1.1.0 h1:jqnkDWIZW6f/rUn5/pE26YZMT9xzpp0qTswNy7FPRBk=
github.com/bnb-chain/greenfield-cometbft v1.1.0/go.mod h1:NZ2/ZJK2HYe3++0CsPiw4LTG6UrC6pH7fQ3VOz6pqJw=
github.com/bnb-chain/greenfield-cometbft-db v0.8.1-alpha.1 h1:XcWulGacHVRiSCx90Q8Y//ajOrLNBQWR/KDB89dy3cU=
github.com/bnb-chain/greenfield-cometbft-db v0.8.1-alpha.1/go.mod h1:ey1CiK4bYo1RBNJLRiVbYr5CMdSxci9S/AZRINLtppI=
github.com/bnb-chain/greenfield-common/go v0.0.0-20230906132736-eb2f0efea228 h1:WywBaew30hZuqDTOQbkRV3uBg6XHjNIE1s3AXVXbG+8=
github.com/bnb-chain/greenfield-common/go v0.0.0-20230906132736-eb2f0efea228/go.mod h1:K9jK80fbahciC+FAvrch8Qsbw9ZkvVgjfKsqrzPTAVA=
github.com/bnb-chain/greenfield-cosmos-sdk v1.1.0 h1:hHORuliVfVdkyWmCQ9I5C0pe8zIsgDUmG/IyVudRFe0=
github.com/bnb-chain/greenfield-cosmos-sdk v1.1.0/go.mod h1:Yrvq+J1Lsm7OHFX+M/AZWBTGt1TRHUTC4VYOMlvW3fs=
github.com/bnb-chain/greenfield-cosmos-sdk/api v0.0.0-20230816082903-b48770f5e210 h1:GHPbV2bC+gmuO6/sG0Tm8oGal3KKSRlyE+zPscDjlA8=
github.com/bnb-chain/greenfield-cosmos-sdk/api v0.0.0-20230816082903-b48770f5e210/go.mod h1:vhsZxXE9tYJeYB5JR4hPhd6Pc/uPf7j1T8IJ7p9FdeM=
github.com/bnb-chain/greenfield-cosmos-sdk/math v0.0.0-20230816082903-b48770f5e210 h1:FLVOn4+OVbsKi2+YJX5kmD27/4dRu4FW7xCXFhzDO5s=
github.com/bnb-chain/greenfield-cosmos-sdk/math v0.0.0-20230816082903-b48770f5e210/go.mod h1:An0MllWJY6PxibUpnwGk8jOm+a/qIxlKmL5Zyp9NnaM=
github.com/bnb-chain/greenfield-cosmos-sdk v1.0.2-0.20231129013257-1e407f209b02 h1:x9F+rt7H4VOS4JfoqMFFvq3RGW27oSxIFPTI/cMK4tQ=
github.com/bnb-chain/greenfield-cosmos-sdk v1.0.2-0.20231129013257-1e407f209b02/go.mod h1:Yrvq+J1Lsm7OHFX+M/AZWBTGt1TRHUTC4VYOMlvW3fs=
github.com/bnb-chain/greenfield-cosmos-sdk/api v0.0.0-20231129013257-1e407f209b02 h1:cwuShQ+MlvwkfbOz79BRF4aYjgKAuSyugoCtXE8tWgM=
github.com/bnb-chain/greenfield-cosmos-sdk/api v0.0.0-20231129013257-1e407f209b02/go.mod h1:vhsZxXE9tYJeYB5JR4hPhd6Pc/uPf7j1T8IJ7p9FdeM=
github.com/bnb-chain/greenfield-cosmos-sdk/math v0.0.0-20231129013257-1e407f209b02 h1:RMrZep7e2dcMk4E5YysMdCn6PekI3vA2WHfnMQ/kg18=
github.com/bnb-chain/greenfield-cosmos-sdk/math v0.0.0-20231129013257-1e407f209b02/go.mod h1:An0MllWJY6PxibUpnwGk8jOm+a/qIxlKmL5Zyp9NnaM=
github.com/bnb-chain/greenfield-iavl v0.20.1 h1:y3L64GU99otNp27/xLVBTDbv4eroR6CzoYz0rbaVotM=
github.com/bnb-chain/greenfield-iavl v0.20.1/go.mod h1:oLksTs8dfh7DYIKBro7hbRQ+ewls7ghJ27pIXlbEXyI=
github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
Expand Down
83 changes: 5 additions & 78 deletions types/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ type GroupsResult struct {
// GroupMembers indicates the group member info
type GroupMembers struct {
// Group defines the basic group info
Group *GroupInfo `xml:"Group"`
Group *storageType.GroupInfo `xml:"Group"`
// Operator defines operator address of group
Operator string `xml:"Operator"`
// CreateAt defines the block number when the group created
Expand All @@ -153,7 +153,7 @@ type GroupMembers struct {
// ObjectMeta is the structure for metadata service user object
type ObjectMeta struct {
// ObjectInfo defines the information of the object.
ObjectInfo *ObjectInfo `xml:"ObjectInfo"`
ObjectInfo *storageType.ObjectInfo `xml:"ObjectInfo"`
// LockedBalance defines locked balance of object
LockedBalance string `xml:"LockedBalance"`
// Removed defines the object is deleted or not
Expand Down Expand Up @@ -201,7 +201,7 @@ type GlobalVirtualGroupFamily struct {
// BucketMetaWithVGF BucketMeta is the structure for metadata service user bucket
type BucketMetaWithVGF struct {
// BucketInfo defines the information of the bucket.
BucketInfo *BucketInfo `xml:"BucketInfo"`
BucketInfo *storageType.BucketInfo `xml:"BucketInfo"`
// Removed defines the bucket is deleted or not
Removed bool `xml:"Removed"`
// DeleteAt defines the block number when the bucket deleted.
Expand All @@ -225,7 +225,7 @@ type BucketMetaWithVGF struct {
// BucketMeta is the structure for metadata service user bucket
type BucketMeta struct {
// BucketInfo defines the information of the bucket.
BucketInfo *BucketInfo `xml:"BucketInfo"`
BucketInfo *storageType.BucketInfo `xml:"BucketInfo"`
// Removed defines the bucket is deleted or not
Removed bool `xml:"Removed"`
// DeleteAt defines the block number when the bucket deleted.
Expand All @@ -244,65 +244,6 @@ type BucketMeta struct {
UpdateTime int64 `xml:"UpdateTime"`
}

// ObjectInfo differ from ObjectInfo in greenfield as it adds uint64/int64 unmarshal guide in json part
type ObjectInfo struct {
// Owner defines the object owner
Owner string `xml:"Owner"`
// BucketName is the name of the bucket
BucketName string `xml:"BucketName"`
// ObjectName is the name of object
ObjectName string `xml:"ObjectName"`
// Id is the unique identifier of object
Id uint64 `xml:"Id"`
// LocalVirtualGroupId defines the lvg id of object
LocalVirtualGroupId uint32 `xml:"LocalVirtualGroupId"`
// PayloadSize is the total size of the object payload
PayloadSize uint64 `xml:"PayloadSize"`
// Visibility defines the highest permissions for object. When an object is public, everyone can access it.
Visibility storageType.VisibilityType `xml:"Visibility"`
// ContentType define the format of the object which should be a standard MIME type.
ContentType string `xml:"ContentType"`
// CreateAt define the block number when the object created
CreateAt int64 `xml:"CreateAt"`
// ObjectStatus define the upload status of the object.
ObjectStatus storageType.ObjectStatus `xml:"ObjectStatus"`
// RedundancyType define the type of the redundancy which can be multi-replication or EC.
RedundancyType storageType.RedundancyType `xml:"RedundancyType"`
// SourceType define the source of the object.
SourceType storageType.SourceType `xml:"SourceType"`
// Checksums define the root hash of the pieces which stored in a SP.
Checksums [][]byte `xml:"Checksums"`
}

// BucketInfo differ from BucketInfo in greenfield as it adds uint64/int64 unmarshal guide in json part
type BucketInfo struct {
// Owner is the account address of bucket creator, it is also the bucket owner.
Owner string `xml:"Owner"`
// BucketName is a globally unique name of bucket
BucketName string `xml:"BucketName"`
// Visibility defines the highest permissions for bucket. When a bucket is public, everyone can get storage objects in it.
Visibility storageType.VisibilityType `xml:"Visibility"`
// Id is the unique identification for bucket.
Id uint64 `xml:"Id"`
// SourceType defines which chain the user should send the bucket management transactions to
SourceType storageType.SourceType `xml:"SourceType"`
// CreateAt define the block number when the bucket created
CreateAt int64 `xml:"CreateAt"`
// PaymentAddress is the address of the payment account
PaymentAddress string `xml:"PaymentAddress"`
// PrimarySpId is the unique id of the primary sp. Objects belongs to this bucket will never
// leave this SP, unless you explicitly shift them to another SP.
PrimarySpId uint32 `xml:"PrimarySpId"`
// GlobalVirtualGroupFamilyId defines the unique id of gvg family
GlobalVirtualGroupFamilyId uint32 `xml:"GlobalVirtualGroupFamilyId"`
// ChargedReadQuota defines the traffic quota for read in bytes per month.
// The available read data for each user is the sum of the free read data provided by SP and
// the ChargeReadQuota specified here.
ChargedReadQuota uint64 `xml:"ChargedReadQuota"`
// BucketStatus define the status of the bucket.
BucketStatus storageType.BucketStatus `xml:"BucketStatus"`
}

// ListBucketsByBucketIDResponse is response type for the ListBucketsByBucketID
type ListBucketsByBucketIDResponse struct {
// Buckets defines the information of a bucket map
Expand All @@ -318,7 +259,7 @@ type ListGroupsByGroupIDResponse struct {
// GroupMeta is the structure for group information
type GroupMeta struct {
// Group defines the basic group info
Group *GroupInfo `xml:"Group"`
Group *storageType.GroupInfo `xml:"Group"`
// NumberOfMembers defines how many members in this group
NumberOfMembers int64 `xml:"NumberOfMembers"`
// Operator defines operator address of group
Expand All @@ -335,20 +276,6 @@ type GroupMeta struct {
Removed bool `xml:"Removed"`
}

// GroupInfo differ from GroupInfo in greenfield as it adds uint64/int64 unmarshal guide in json part
type GroupInfo struct {
// Owner is the owner of the group. It can not changed once it created.
Owner string `xml:"Owner"`
// GroupName is the name of group which is unique under an account.
GroupName string `xml:"GroupName"`
// SourceType
SourceType storageType.SourceType `xml:"SourceType"`
// Id is the unique identifier of group
Id uint64 `xml:"Id"`
// Extra is used to store extra info for the group
Extra string `xml:"Extra"`
}

type PaymentAccounts struct {
// refundable defines the payment account is refundable or not
PaymentAccount *PaymentAccount `xml:"PaymentAccount"`
Expand Down
11 changes: 9 additions & 2 deletions types/option.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,18 @@ import (
sdk "github.com/cosmos/cosmos-sdk/types"
)

type SetTagsOptions struct {
TxOpts *gnfdsdktypes.TxOption // TxOpts defines the options to customize a transaction.
}

// CreateBucketOptions indicates the metadata to construct `CreateBucket` msg of storage module.
type CreateBucketOptions struct {
Visibility storageTypes.VisibilityType // Visibility defines the bucket public status.
TxOpts *gnfdsdktypes.TxOption // TxOpts defines the options to customize a transaction.
PaymentAddress string // PaymentAddress indicates the HEX-encoded string of the payment address.
ChargedQuota uint64 // ChargedQuota defines the read data that users are charged for, measured in bytes.
IsAsyncMode bool // indicate whether to create the bucket in asynchronous mode.
Tags *storageTypes.ResourceTags // set tags when creating bucket
}

// MigrateBucketOptions indicates the metadata to construct `MigrateBucket` msg of storage module.
Expand Down Expand Up @@ -122,12 +127,14 @@ type CreateObjectOptions struct {
IsReplicaType bool // IsReplicaType indicates whether the object uses REDUNDANCY_REPLICA_TYPE.
IsAsyncMode bool // IsAsyncMode indicate whether to create the object in asynchronous mode.
IsSerialComputeMode bool // IsSerialComputeMode indicate whether to compute integrity hash in serial way or parallel way when creating an object.
Tags *storageTypes.ResourceTags // set tags when creating bucket
}

// CreateGroupOptions indicates the metadata to construct `CreateGroup` msg.
type CreateGroupOptions struct {
Extra string // Extra defines the extra meta for a group.
TxOpts *gnfdsdktypes.TxOption // TxOpts defines the options to customize a transaction.
Extra string // Extra defines the extra meta for a group.
TxOpts *gnfdsdktypes.TxOption // TxOpts defines the options to customize a transaction.
Tags *storageTypes.ResourceTags // set tags when creating bucket
}

// UpdateGroupMemberOption indicates the metadata to construct `UpdateGroupMembers` msg.
Expand Down
Loading