Documentation ¶
Index ¶
- Constants
- func InitDB(config *config.SQLDBConfig) (*gorm.DB, error)
- func LoadDBConfigFromEnv(config *config.SQLDBConfig)
- type BSDB
- type BsDBImpl
- func (b *BsDBImpl) GetBucketByID(bucketID int64, isFullList bool) (*Bucket, error)
- func (b *BsDBImpl) GetBucketByName(bucketName string, isFullList bool) (*Bucket, error)
- func (b *BsDBImpl) GetGroupsByGroupIDAndAccount(groupIDList []common.Hash, account common.Hash) ([]*Group, error)
- func (b *BsDBImpl) GetLatestBlockNumber() (int64, error)
- func (b *BsDBImpl) GetObjectByName(objectName string, bucketName string, isFullList bool) (*Object, error)
- func (b *BsDBImpl) GetPaymentByBucketID(bucketID int64, isFullList bool) (*StreamRecord, error)
- func (b *BsDBImpl) GetPaymentByBucketName(bucketName string, isFullList bool) (*StreamRecord, error)
- func (b *BsDBImpl) GetPaymentByPaymentAddress(paymentAddress common.Address) (*StreamRecord, error)
- func (b *BsDBImpl) GetPermissionByResourceAndPrincipal(resourceType, resourceID, principalType, principalValue string) (*Permission, error)
- func (b *BsDBImpl) GetPermissionsByResourceAndPrincipleType(resourceType, resourceID, principalType string) ([]*Permission, error)
- func (b *BsDBImpl) GetStatementsByPolicyID(policyIDList []common.Hash) ([]*Statement, error)
- func (b *BsDBImpl) GetUserBuckets(accountID common.Address) ([]*Bucket, error)
- func (b *BsDBImpl) GetUserBucketsCount(accountID common.Address) (int64, error)
- func (b *BsDBImpl) ListDeletedObjectsByBlockNumberRange(startBlockNumber int64, endBlockNumber int64, isFullList bool) ([]*Object, error)
- func (b *BsDBImpl) ListExpiredBucketsBySp(createAt int64, primarySpAddress string, limit int64) ([]*Bucket, error)
- func (b *BsDBImpl) ListObjectsByBucketName(bucketName string) ([]*Object, error)
- type Bucket
- type Epoch
- type Group
- type Metadata
- type Object
- type Permission
- type Statement
- type StreamRecord
Constants ¶
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
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 ¶
GetBucketByID get buckets info by a bucket id
func (*BsDBImpl) GetBucketByName ¶
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 ¶
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
GetStatementsByPolicyID get statements info by a policy id
func (*BsDBImpl) GetUserBuckets ¶
GetUserBuckets get buckets info by a user address
func (*BsDBImpl) GetUserBucketsCount ¶
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
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
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
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
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
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
func (s *Statement) Eval(action permtypes.ActionType, opts *permtypes.VerifyOptions) permtypes.Effect
Eval is used to evaluate the execution results of statement policies.
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