bsdb

package
v0.1.2-fix-4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 26, 2023 License: GPL-3.0 Imports: 16 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// DeletedObjectsDefaultSize defines the default size of ListDeletedObjectsByBlockNumberRange response
	DeletedObjectsDefaultSize = 1000
	// ExpiredBucketsDefaultSize defines the default size of ListExpiredBucketsBySp response
	ExpiredBucketsDefaultSize = 1000
)

define metadata query statement

View Source
const (
	// BucketTableName defines the name of bucket table
	BucketTableName = "buckets"
	// ObjectTableName defines the name of object table
	ObjectTableName = "objects"
	// EpochTableName defines the name of epoch table
	EpochTableName = "epoch"
	// PermissionTableName defines the name of permission table
	PermissionTableName = "permission"
	// StatementTableName defines the name of statement table
	StatementTableName = "statements"
	// GroupTableName defines the name of group table
	GroupTableName = "groups"
)

define table name constant of block syncer db

Variables

This section is empty.

Functions

func InitDB

func InitDB(config *config.SQLDBConfig) (*gorm.DB, error)

InitDB init a block syncer db instance

func LoadDBConfigFromEnv

func LoadDBConfigFromEnv(config *config.SQLDBConfig)

LoadDBConfigFromEnv load block syncer db user and password from env vars

Types

type BSDB

type BSDB interface {
	Metadata
}

BSDB contains all the methods required by block syncer database

type BsDBImpl

type BsDBImpl struct {
	// contains filtered or unexported fields
}

BsDBImpl block syncer database, implements BSDB interface

func NewBsDB

func NewBsDB(config *config.SQLDBConfig) (*BsDBImpl, error)

NewBsDB return a block syncer db instance

func (*BsDBImpl) GetBucketByID

func (b *BsDBImpl) GetBucketByID(bucketID int64, isFullList bool) (*Bucket, error)

GetBucketByID get buckets info by a bucket id

func (*BsDBImpl) GetBucketByName

func (b *BsDBImpl) GetBucketByName(bucketName string, isFullList bool) (*Bucket, error)

GetBucketByName get buckets info by a bucket name

func (*BsDBImpl) GetGroupsByGroupIDAndAccount added in v0.1.2

func (b *BsDBImpl) GetGroupsByGroupIDAndAccount(groupIDList []common.Hash, account common.Hash) ([]*Group, error)

GetGroupsByGroupIDAndAccount get groups info by group id list and account id

func (*BsDBImpl) GetLatestBlockNumber

func (b *BsDBImpl) GetLatestBlockNumber() (int64, error)

GetLatestBlockNumber get current latest block number

func (*BsDBImpl) GetObjectByName added in v0.1.1

func (b *BsDBImpl) GetObjectByName(objectName string, bucketName string, isFullList bool) (*Object, error)

GetObjectByName get object info by an object name

func (*BsDBImpl) GetPaymentByBucketID

func (b *BsDBImpl) GetPaymentByBucketID(bucketID int64, isFullList bool) (*StreamRecord, error)

GetPaymentByBucketID get payment info by a bucket id

func (*BsDBImpl) GetPaymentByBucketName

func (b *BsDBImpl) GetPaymentByBucketName(bucketName string, isFullList bool) (*StreamRecord, error)

GetPaymentByBucketName get payment info by a bucket name

func (*BsDBImpl) GetPaymentByPaymentAddress

func (b *BsDBImpl) GetPaymentByPaymentAddress(paymentAddress common.Address) (*StreamRecord, error)

GetPaymentByPaymentAddress get payment info by a payment address

func (*BsDBImpl) GetPermissionByResourceAndPrincipal added in v0.1.2

func (b *BsDBImpl) GetPermissionByResourceAndPrincipal(resourceType, resourceID, principalType, principalValue string) (*Permission, error)

GetPermissionByResourceAndPrincipal get permission by resource type & ID, principal type & value

func (*BsDBImpl) GetPermissionsByResourceAndPrincipleType added in v0.1.2

func (b *BsDBImpl) GetPermissionsByResourceAndPrincipleType(resourceType, resourceID, principalType string) ([]*Permission, error)

GetPermissionsByResourceAndPrincipleType get permission by resource type & ID, principal type

func (*BsDBImpl) GetStatementsByPolicyID added in v0.1.2

func (b *BsDBImpl) GetStatementsByPolicyID(policyIDList []common.Hash) ([]*Statement, error)

GetStatementsByPolicyID get statements info by a policy id

func (*BsDBImpl) GetUserBuckets

func (b *BsDBImpl) GetUserBuckets(accountID common.Address) ([]*Bucket, error)

GetUserBuckets get buckets info by a user address

func (*BsDBImpl) GetUserBucketsCount

func (b *BsDBImpl) GetUserBucketsCount(accountID common.Address) (int64, error)

GetUserBucketsCount get buckets count by a user address

func (*BsDBImpl) ListDeletedObjectsByBlockNumberRange

func (b *BsDBImpl) ListDeletedObjectsByBlockNumberRange(startBlockNumber int64, endBlockNumber int64, isFullList bool) ([]*Object, error)

ListDeletedObjectsByBlockNumberRange list deleted objects info by a block number range

func (*BsDBImpl) ListExpiredBucketsBySp added in v0.1.2

func (b *BsDBImpl) ListExpiredBucketsBySp(createAt int64, primarySpAddress string, limit int64) ([]*Bucket, error)

ListExpiredBucketsBySp lists expired buckets

func (*BsDBImpl) ListObjectsByBucketName

func (b *BsDBImpl) ListObjectsByBucketName(bucketName string) ([]*Object, error)

ListObjectsByBucketName list objects info by a bucket name

type Bucket

type Bucket struct {
	// ID defines db auto_increment id of bucket
	ID uint64 `gorm:"id"`
	// Owner is the account address of bucket creator, it is also the bucket owner.
	Owner common.Address `gorm:"owner"`
	// Operator defines the operator address of bucket
	Operator common.Address `gorm:"operator"`
	// BucketName is a globally unique name of bucket
	BucketName string `gorm:"bucket_name"`
	// Visibility defines the highest permissions for bucket. When a bucket is public, everyone can get storage obj
	Visibility string `gorm:"visibility"`
	// ID is the unique identification for bucket.
	BucketID common.Hash `gorm:"bucket_id"`
	// SourceType defines which chain the user should send the bucket management transactions to
	SourceType string `gorm:"source_type"`
	// CreateAt defines the block number when the bucket created.
	CreateAt int64 `gorm:"create_at"`
	// CreateTime defines the timestamp when the bucket created
	CreateTime int64 `gorm:"create_time"`
	// CreateTxHash defines the creation transaction hash of bucket
	CreateTxHash common.Hash `gorm:"create_tx_hash"`
	// PaymentAddress is the address of the payment account
	PaymentAddress common.Address `gorm:"payment_address"`
	// PrimarySpAddress is the address of the primary sp. Objects belong to this bucket will never
	// leave this SP, unless you explicitly shift them to another SP.
	PrimarySpAddress common.Address `gorm:"primary_sp_address"`
	// ReadQuota defines the traffic quota for read
	ChargedReadQuota uint64 `gorm:"charged_read_quota"`
	// PaymentPriceTime defines price time of payment
	PaymentPriceTime int64 `gorm:"payment_price_time"`
	// Removed defines the bucket is deleted or not
	Removed bool `gorm:"removed"`
	// Status defines the status of bucket
	Status string `gorm:"column:status"`
	// DeleteAt defines the block number when the bucket deleted.
	DeleteAt int64 `gorm:"delete_at"`
	// DeleteReason defines the deleted reason of bucket
	DeleteReason string `gorm:"delete_reason"`
	// UpdateAt defines the block number when the bucket update.
	UpdateAt int64 `gorm:"column:update_at"`
	// UpdateTxHash defines the update transaction hash of bucket
	UpdateTxHash common.Hash `gorm:"update_tx_hash"`
	// UpdateTime defines the timestamp when the bucket update.
	UpdateTime int64 `gorm:"column:update_time"`
}

Bucket is the structure for user bucket

func (*Bucket) TableName

func (b *Bucket) TableName() string

TableName is used to set Bucket table name in database

type Epoch

type Epoch struct {
	// OneRowID defines if the table only has one row
	OneRowID bool `gorm:"one_row_id;not null;default:true;primaryKey"`
	// BlockHeight defines the latest block number
	BlockHeight int64 `gorm:"block_height;type:bigint(64)"`
	// BlockHash defines the latest block hash
	BlockHash common.Hash `gorm:"block_hash;type:BINARY(32)"`
	// UpdateTime defines the update time of the latest block
	UpdateTime int64 `gorm:"update_time;type:bigint(64)"`
}

Epoch stores current information of the latest block

func (*Epoch) TableName

func (e *Epoch) TableName() string

TableName is used to set Epoch table name in database

type Group added in v0.1.2

type Group struct {
	// ID defines db auto_increment id of group
	ID uint64 `gorm:"column:id"`
	// Owner is the account address of group creator
	Owner common.Address `gorm:"column:owner"`
	// GroupID is the unique identification for bucket.
	GroupID common.Hash `gorm:"column:group_id"`
	// GroupName defines the name of the group
	GroupName string `gorm:"column:group_name"`
	// SourceType defines which chain the user should send the bucket management transactions to
	SourceType string `gorm:"column:source_type"`
	// AccountID defines the group user address
	AccountID common.Hash `gorm:"column:account_id"`
	// Operator defines operator address of group
	Operator common.Address `gorm:"column:operator"`
	// CreateAt defines the block number when the group created
	CreateAt int64 `gorm:"column:create_at"`
	// CreateTime defines the timestamp when the group created
	CreateTime int64 `gorm:"column:create_time"`
	// UpdateAt defines the block number when the group updated
	UpdateAt int64 `gorm:"column:update_at"`
	// UpdateTime defines the timestamp when the group updated
	UpdateTime int64 `gorm:"column:update_time"`
	// Removed defines the group is deleted or not
	Removed bool `gorm:"column:removed"`
}

Group is the structure for group information

func (*Group) TableName added in v0.1.2

func (g *Group) TableName() string

TableName is used to set Group table name in database

type Metadata

type Metadata interface {
	// GetUserBuckets get buckets info by a user address
	GetUserBuckets(accountID common.Address) ([]*Bucket, error)
	// GetUserBucketsCount get buckets count by a user address
	GetUserBucketsCount(accountID common.Address) (int64, error)
	// GetBucketByName get buckets info by a bucket name
	GetBucketByName(bucketName string, isFullList bool) (*Bucket, error)
	// GetBucketByID get buckets info by by a bucket id
	GetBucketByID(bucketID int64, isFullList bool) (*Bucket, error)
	// GetLatestBlockNumber get current latest block number
	GetLatestBlockNumber() (int64, error)
	// GetPaymentByBucketName get bucket payment info by a bucket name
	GetPaymentByBucketName(bucketName string, isFullList bool) (*StreamRecord, error)
	// GetPaymentByBucketID get bucket payment info by a bucket id
	GetPaymentByBucketID(bucketID int64, isFullList bool) (*StreamRecord, error)
	// GetPaymentByPaymentAddress get bucket payment info by a payment address
	GetPaymentByPaymentAddress(address common.Address) (*StreamRecord, error)
	// GetPermissionByResourceAndPrincipal get permission info by resource type & id, principal type & value
	GetPermissionByResourceAndPrincipal(resourceType, resourceID, principalType, principalValue string) (*Permission, error)
	// GetStatementsByPolicyID get statements info by a policy id
	GetStatementsByPolicyID(policyIDList []common.Hash) ([]*Statement, error)
	// GetPermissionsByResourceAndPrincipleType get permissions info by resource type & id, principal type
	GetPermissionsByResourceAndPrincipleType(resourceType, resourceID, principalType string) ([]*Permission, error)
	// GetGroupsByGroupIDAndAccount get groups info by group id list and account id
	GetGroupsByGroupIDAndAccount(groupIDList []common.Hash, account common.Hash) ([]*Group, error)
	// ListObjectsByBucketName list objects info by a bucket name
	ListObjectsByBucketName(bucketName string) ([]*Object, error)
	// ListDeletedObjectsByBlockNumberRange list deleted objects info by a block number range
	ListDeletedObjectsByBlockNumberRange(startBlockNumber int64, endBlockNumber int64, isFullList bool) ([]*Object, error)
	// ListExpiredBucketsBySp list expired buckets by sp
	ListExpiredBucketsBySp(createAt int64, primarySpAddress string, limit int64) ([]*Bucket, error)
	// GetObjectByName get object info by an object name
	GetObjectByName(objectName string, bucketName string, isFullList bool) (*Object, error)
}

Metadata contains all the methods required by block syncer db database

type Object

type Object struct {
	// ID defines db auto_increment id of object
	ID uint64 `gorm:"id"`
	// Creator defines the account address of object creator
	Creator common.Address `gorm:"creator"`
	// Operator defines the operator address of object
	Operator common.Address `gorm:"operator"`
	// Owner defines the account address of object owner
	Owner common.Address `gorm:"owner"`
	// BucketName is the name of the bucket
	BucketName string `gorm:"bucket_name"`
	// ObjectName is the name of object
	ObjectName string `gorm:"object_name"`
	// ObjectID is the unique identifier of object
	ObjectID common.Hash `gorm:"object_id"`
	// BucketID is the unique identifier of bucket
	BucketID common.Hash `gorm:"bucket_id"`
	// PayloadSize is the total size of the object payload
	PayloadSize uint64 `gorm:"payload_size"`
	// Visibility defines the highest permissions for bucket. When a bucket is public, everyone can get storage obj
	Visibility string `gorm:"visibility"`
	// ContentType defines the format of the object which should be a standard MIME type
	ContentType string `gorm:"content_type"`
	// CreateAt defines the block number when the object created
	CreateAt int64 `gorm:"create_at"`
	// CreateTime defines the timestamp when the object created
	CreateTime int64 `gorm:"create_time"`
	// ObjectStatus defines the upload status of the object.
	ObjectStatus string `gorm:"column:status"`
	// RedundancyType defines the type of the redundancy which can be multi-replication or EC
	RedundancyType string `gorm:"redundancy_type"`
	// SourceType defines the source of the object.
	SourceType string `gorm:"source_type"`
	// CheckSums defines the root hash of the pieces which stored in a SP
	Checksums pq.ByteaArray `gorm:"check_sums;type:text"`
	// SecondarySpAddresses defines the addresses of secondary_sps
	SecondarySpAddresses pq.StringArray `gorm:"secondary_sp_addresses;type:text"`
	// LockedBalance defines locked balance of object
	LockedBalance common.Hash `gorm:"locked_balance"`
	// Removed defines the object is deleted or not
	Removed bool `gorm:"removed"`
	// UpdateTime defines the time when the object updated
	UpdateTime int64 `gorm:"update_time"`
	// UpdateAt defines the block number when the object updated
	UpdateAt int64 `gorm:"update_at"`
	// DeleteAt defines the block number when the object deleted
	DeleteAt int64 `gorm:"delete_at"`
	// DeleteReason defines the deleted reason of object
	DeleteReason string `gorm:"delete_reason"`
	// CreateTxHash defines the creation transaction hash of object
	CreateTxHash common.Hash `gorm:"create_tx_hash"`
	// UpdateTxHash defines the update transaction hash of object
	UpdateTxHash common.Hash `gorm:"update_tx_hash"`
	// SealTxHash defines the sealed transaction hash of object
	SealTxHash common.Hash `gorm:"column:sealed_tx_hash"`
}

Object is the structure for user object

func (*Object) TableName

func (o *Object) TableName() string

TableName is used to set Object table name in database

type Permission added in v0.1.2

type Permission struct {
	// ID defines db auto_increment id of permission
	ID uint64 `gorm:"id"`
	// PrincipalType defines the type of principal
	PrincipalType int32 `gorm:"principal_type"`
	// PrincipalValue defines the value of principal
	// When the type is an account, its value is sdk.AccAddress().String();
	// when the type is a group, its value is math.Uint().String()
	PrincipalValue string `gorm:"principal_value"`
	// ResourceType defines the type of resource that grants permission for
	ResourceType string `gorm:"resource_type"`
	// ResourceID defines the bucket/object/group id of the resource that grants permission for
	ResourceID common.Hash `gorm:"resource_id"`
	// PolicyID is a unique u256 sequence for each policy. It also is used as NFT tokenID
	PolicyID common.Hash `gorm:"policy_id"`
	// CreateTimestamp defines the create time of permission
	CreateTimestamp int64 `gorm:"create_timestamp"`
	// UpdateTimestamp defines the update time of permission
	UpdateTimestamp int64 `gorm:"update_timestamp"`
	// ExpirationTime defines the expiration time of permission
	ExpirationTime int64 `gorm:"expiration_time;type:bigint(64)"`
	// Removed defines the permission is deleted or not
	Removed bool `gorm:"removed"`
}

Permission is the structure to verify action permission

func (Permission) Eval added in v0.1.2

func (p Permission) Eval(action permtypes.ActionType, blockTime time.Time, opts *permtypes.VerifyOptions, statements []*Statement) permtypes.Effect

Eval is used to evaluate the execution results of permission policies.

func (*Permission) TableName added in v0.1.2

func (p *Permission) TableName() string

TableName is used to set Permission table name in database

type Statement added in v0.1.2

type Statement struct {
	// ID defines db auto_increment id of statement
	ID uint64 `gorm:"id"`
	// PolicyID is a unique u256 sequence for each policy. It also is used as NFT tokenID
	PolicyID common.Hash `gorm:"policy_id"`
	// Effect define the impact of permissions, which is Allow/Deny
	Effect string `gorm:"effect"`
	// ActionValue define the operation type you can act. greenfield defines a set of permission
	// that you can specify in a permissionInfo
	ActionValue int `gorm:"action_value"`
	// Resources CAN ONLY BE USED IN bucket level. Support fuzzy match and limit to 5
	// If no sub-resource is specified in a statement, then all objects in the bucket are accessible by the principal.
	// However, if the sub-resource is defined as 'bucket/test_*,' in the statement, then only objects with a 'test_'
	// prefix can be accessed by the principal.
	Resources pq.StringArray `gorm:"resources"`
	// ExpirationTime defines how long the permission is valid. If not explicitly specified, it means it will not expire.
	ExpirationTime int64 `gorm:"expiration_time"`
	// LimitSize defines the total data size that is allowed to operate. If not explicitly specified, it means it will not limit.
	LimitSize uint64 `gorm:"limit_size"`
	// Removed defines the statement is deleted or not
	Removed bool `gorm:"removed"`
}

Statement defines the details content of the permission, include effect/actions/sub-resources

func (*Statement) Eval added in v0.1.2

Eval is used to evaluate the execution results of statement policies.

func (*Statement) TableName added in v0.1.2

func (s *Statement) TableName() string

TableName is used to set Statements table name in database

type StreamRecord

type StreamRecord struct {
	// ID defines db auto_increment id of stream record
	ID uint64 `gorm:"id"`
	// Account defines the account address
	Account common.Address `gorm:"account"`
	// CrudTimestamp defines the latest update timestamp of the stream record
	CrudTimestamp int64 `gorm:"crud_timestamp"`
	// NetflowRate defines the per-second rate that an account's balance is changing.
	// It is the sum of the account's inbound and outbound flow rates.
	NetflowRate *common.Big `gorm:"netflow_rate"`
	// StaticBalance defines the balance of the stream account at the latest CRUD timestamp.
	StaticBalance *common.Big `gorm:"static_balance"`
	// BufferBalance defines reserved balance of the stream account
	// If the netflow rate is negative, the reserved balance is `netflow_rate * reserve_time`
	BufferBalance *common.Big `gorm:"buffer_balance"`
	// LockBalance defines the locked balance of the stream account after it puts a new object and before the object is sealed
	LockBalance *common.Big `gorm:"lock_balance"`
	// Status defines the status of the stream account
	Status string `gorm:"status"`
	// SettleTimestamp defines the unix timestamp when the stream account will be settled
	SettleTimestamp int64 `gorm:"column:settle_timestamp"`
	// OutFlows defines the accumulated outflow rates of the stream account
	OutFlows []byte `gorm:"out_flows;type:longblob"`
}

func (*StreamRecord) TableName

func (s *StreamRecord) TableName() string

TableName is used to set StreamRecord table name in database

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL