Documentation ¶
Index ¶
- Constants
- type Contract
- func (c *Contract) CommitDownload(t *writeaheadlog.Transaction, signedRev types.StorageContractRevision, ...) (err error)
- func (c *Contract) CommitRevision(signedRevision types.StorageContractRevision, costs ...common.BigInt) (err error)
- func (c *Contract) CommitTxns() (err error)
- func (c *Contract) CommitUpload(t *writeaheadlog.Transaction, signedRev types.StorageContractRevision, ...) (err error)
- func (c *Contract) Header() ContractHeader
- func (c *Contract) LatestRevisionValidation(rev types.StorageContractRevision) (err error)
- func (c *Contract) MerkleRoots() ([]common.Hash, error)
- func (c *Contract) Metadata() (meta storage.ContractMetaData)
- func (c *Contract) RollbackUndoMem(undoHeader ContractHeader) (err error)
- func (c *Contract) RollbackUndoWal(t *writeaheadlog.Transaction) (err error)
- func (c *Contract) Status() (stats storage.ContractStatus)
- func (c *Contract) UndoRevisionLog(contractHeader ContractHeader) (t *writeaheadlog.Transaction, err error)
- func (c *Contract) UpdateStatus(status storage.ContractStatus) (err error)
- type ContractHeader
- type DB
- func (db *DB) Close()
- func (db *DB) DeleteContractHeader(id storage.ContractID) (err error)
- func (db *DB) DeleteHeaderAndRoots(id storage.ContractID) (err error)
- func (db *DB) DeleteMerkleRoots(id storage.ContractID) (err error)
- func (db *DB) EmptyDB() (err error)
- func (db *DB) FetchAll() (chs []ContractHeader, allRoots [][]common.Hash, err error)
- func (db *DB) FetchAllContractID() (ids []storage.ContractID)
- func (db *DB) FetchAllHeader() (chs []ContractHeader, err error)
- func (db *DB) FetchAllRoots() (allRoots [][]common.Hash, err error)
- func (db *DB) FetchContractHeader(id storage.ContractID) (ch ContractHeader, err error)
- func (db *DB) FetchHeaderAndRoots(id storage.ContractID) (ch ContractHeader, roots []common.Hash, err error)
- func (db *DB) FetchMerkleRoots(id storage.ContractID) (roots []common.Hash, err error)
- func (db *DB) StoreContractHeader(ch ContractHeader) (err error)
- func (db *DB) StoreHeaderAndRoots(ch ContractHeader, roots []common.Hash) (err error)
- func (db *DB) StoreMerkleRoots(id storage.ContractID, roots []common.Hash) (err error)
- func (db *DB) StoreSingleRoot(id storage.ContractID, root common.Hash) (err error)
- type RateLimit
- type StorageContractSet
- func (scs *StorageContractSet) Acquire(id storage.ContractID) (c *Contract, exists bool)
- func (scs *StorageContractSet) Close() (err error)
- func (scs *StorageContractSet) Contracts() map[storage.ContractID]*Contract
- func (scs *StorageContractSet) Delete(c *Contract) (err error)
- func (scs *StorageContractSet) EmptyDB() (err error)
- func (scs *StorageContractSet) GetContractIDByHostID(hostID enode.ID) storage.ContractID
- func (scs *StorageContractSet) IDs() (ids []storage.ContractID)
- func (scs *StorageContractSet) InsertContract(ch ContractHeader, roots []common.Hash) (cm storage.ContractMetaData, err error)
- func (scs *StorageContractSet) RetrieveAllContractsMetaData() (cms []storage.ContractMetaData)
- func (scs *StorageContractSet) RetrieveContractMetaData(id storage.ContractID) (cm storage.ContractMetaData, exist bool)
- func (scs *StorageContractSet) RetrieveRateLimit() (readBPS, writeBPS int64, packetSize uint64)
- func (scs *StorageContractSet) Return(c *Contract) (err error)
- func (scs *StorageContractSet) SetRateLimit(readBPS, writeBPS int64, packetSize uint64)
Constants ¶
const ( // SectorSize is used to define the size of data sector, which is 4 MiB SectorSize = uint64(1 << 22) )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Contract ¶
type Contract struct {
// contains filtered or unexported fields
}
Contract is a data structure that stored the contract information
func (*Contract) CommitDownload ¶
func (c *Contract) CommitDownload(t *writeaheadlog.Transaction, signedRev types.StorageContractRevision, bandwidth common.BigInt) (err error)
CommitDownload will update the contract header information after each file download information will be stored in both db and memory
func (*Contract) CommitRevision ¶
func (c *Contract) CommitRevision(signedRevision types.StorageContractRevision, costs ...common.BigInt) (err error)
CommitRevision unify the CommitUpload and CommitDownload signature and use memory snapshot instead of WAL.Transaction log
func (*Contract) CommitTxns ¶
CommitTxns will apply all un-applied transactions
func (*Contract) CommitUpload ¶
func (c *Contract) CommitUpload(t *writeaheadlog.Transaction, signedRev types.StorageContractRevision, storageCost, bandwidthCost common.BigInt) (err error)
CommitUpload will update the contract header and merkle root information after each file upload information will be stored in both db and memory
func (*Contract) Header ¶
func (c *Contract) Header() ContractHeader
Header will return the contract header information of the contract
func (*Contract) LatestRevisionValidation ¶
func (c *Contract) LatestRevisionValidation(rev types.StorageContractRevision) (err error)
LatestRevisionValidation will validate the storage host revision passed in, check if they have the same latest revision
func (*Contract) MerkleRoots ¶
MerkleRoots will return the merkle roots information of the contract
func (*Contract) Metadata ¶
func (c *Contract) Metadata() (meta storage.ContractMetaData)
Metadata will generate contract meta data based on the contract information
func (*Contract) RollbackUndoMem ¶
func (c *Contract) RollbackUndoMem(undoHeader ContractHeader) (err error)
RollbackUndoMem will execute rollback from memory undo record
func (*Contract) RollbackUndoWal ¶
func (c *Contract) RollbackUndoWal(t *writeaheadlog.Transaction) (err error)
RollbackUndoWal will execute rollback from WAL undo record
func (*Contract) Status ¶
func (c *Contract) Status() (stats storage.ContractStatus)
Status will return the current status of the contract
func (*Contract) UndoRevisionLog ¶
func (c *Contract) UndoRevisionLog(contractHeader ContractHeader) (t *writeaheadlog.Transaction, err error)
UndoRevisionLog will record pre-revision contract revision, which is not stored in the database. once negotiation has completed, CommitUpload/CommitDownload will be called to record the actual contract revision and store it into database
func (*Contract) UpdateStatus ¶
func (c *Contract) UpdateStatus(status storage.ContractStatus) (err error)
UpdateStatus will update the current contract status
type ContractHeader ¶
type ContractHeader struct { ID storage.ContractID EnodeID enode.ID LatestContractRevision types.StorageContractRevision // Convert the PrivateKey from string to ecdsa private key // and convert the ecdsa private key to string // //Encode Private Key to String: hex.EncodeToString(crypto.FromECDSA(k.PrivateKey)) //Change the string back to private key: privkey, err := crypto.HexToECDSA(keyJSON.PrivateKey) PrivateKey string StartHeight uint64 // contract cost UploadCost common.BigInt DownloadCost common.BigInt StorageCost common.BigInt TotalCost common.BigInt GasFee common.BigInt ContractFee common.BigInt // status specifies if the contract is good for file uploading or renewing. // it also specifies if the contract is canceled Status storage.ContractStatus }
ContractHeader specifies contract's general information
type DB ¶
type DB struct {
// contains filtered or unexported fields
}
DB is the database wrapper that is used to store the contract set information
func OpenDB ¶
OpenDB will create a new level db. If the db already existed, it will open the db instead
func (*DB) Close ¶
func (db *DB) Close()
Close will close the level db, therefore, another process can open it again
func (*DB) DeleteContractHeader ¶
func (db *DB) DeleteContractHeader(id storage.ContractID) (err error)
DeleteContractHeader will delete the contract header information from the contractsetdb, based on the contract id provided
func (*DB) DeleteHeaderAndRoots ¶
func (db *DB) DeleteHeaderAndRoots(id storage.ContractID) (err error)
DeleteHeaderAndRoots will delete both contract header and contract roots information from the contract set database
func (*DB) DeleteMerkleRoots ¶
func (db *DB) DeleteMerkleRoots(id storage.ContractID) (err error)
DeleteMerkleRoots will delete the contract roots information from the contractsetdb, based on the contract id provided
func (*DB) FetchAll ¶
func (db *DB) FetchAll() (chs []ContractHeader, allRoots [][]common.Hash, err error)
FetchAll will fetch all contract header and merkle roots information
func (*DB) FetchAllContractID ¶
func (db *DB) FetchAllContractID() (ids []storage.ContractID)
FetchAllContractID will fetch all contract ID stored in the contract set db
func (*DB) FetchAllHeader ¶
func (db *DB) FetchAllHeader() (chs []ContractHeader, err error)
FetchAllHeader will fetch all contract header information from the database
func (*DB) FetchAllRoots ¶
FetchAllRoots will fetch all merkle roots information from the database
func (*DB) FetchContractHeader ¶
func (db *DB) FetchContractHeader(id storage.ContractID) (ch ContractHeader, err error)
FetchContractHeader will retrieve the contract header information based on the contract id provided
func (*DB) FetchHeaderAndRoots ¶
func (db *DB) FetchHeaderAndRoots(id storage.ContractID) (ch ContractHeader, roots []common.Hash, err error)
FetchHeaderAndRoots will fetch both contract header and contract roots information from the contract set database
func (*DB) FetchMerkleRoots ¶
FetchMerkleRoots will retrieve the contract roots information based on the contract id provided
func (*DB) StoreContractHeader ¶
func (db *DB) StoreContractHeader(ch ContractHeader) (err error)
StoreContractHeader will stored the contract header information into the database
func (*DB) StoreHeaderAndRoots ¶
func (db *DB) StoreHeaderAndRoots(ch ContractHeader, roots []common.Hash) (err error)
StoreHeaderAndRoots will store both contract header and contract roots information into the contract set database
func (*DB) StoreMerkleRoots ¶
StoreMerkleRoots will store the contract roots information into the database
func (*DB) StoreSingleRoot ¶
StoreSingleRoot will store one root into the database. If the contract id already have merkle roots stored in the database, append the new root into it. Otherwise store the root as a new root
type RateLimit ¶
type RateLimit struct {
// contains filtered or unexported fields
}
RateLimit is the data structure that defines the read and write speed limit in terms of bytes per second. It also defines the packet size per transfer.
func NewRateLimit ¶
NewRateLimit will initialize the RateLimit object, where readBPS specifies the read bytes per second, writeBPS specify the write bytes per second, and the packet size specifies the size of data can be uploaded each time. readBPS -> 0: unlimited read writeBPS -> 0: unlimited write packetSize -> 0: 4 MiB by default
func (*RateLimit) RetrieveRateLimit ¶
RetrieveRateLimit will return the current rate limit settings
func (*RateLimit) SetRateLimit ¶
SetRateLimit will set the rate limit based on the value user provided
type StorageContractSet ¶
type StorageContractSet struct {
// contains filtered or unexported fields
}
StorageContractSet is used to record all contract signed by the storage client
func New ¶
func New(persistDir string) (scs *StorageContractSet, err error)
New will initialize the StorageContractSet object, as well as loading the data that already stored in the database
func (*StorageContractSet) Acquire ¶
func (scs *StorageContractSet) Acquire(id storage.ContractID) (c *Contract, exists bool)
Acquire will acquire the contract from the contractSet, the contract acquired from the contract set will be locked. Once acquired, the contract must be returned to unlock it.
func (*StorageContractSet) Close ¶
func (scs *StorageContractSet) Close() (err error)
Close will close the database and closing the writeaheadlog
func (*StorageContractSet) Contracts ¶
func (scs *StorageContractSet) Contracts() map[storage.ContractID]*Contract
Contracts is used to get all active contracts signed by the storage client
func (*StorageContractSet) Delete ¶
func (scs *StorageContractSet) Delete(c *Contract) (err error)
Delete will delete a storage contract from the contract set the contract must be acquired using the Acquire function
func (*StorageContractSet) EmptyDB ¶
func (scs *StorageContractSet) EmptyDB() (err error)
EmptyDB will clear all data stored in the contractset database
func (*StorageContractSet) GetContractIDByHostID ¶
func (scs *StorageContractSet) GetContractIDByHostID(hostID enode.ID) storage.ContractID
GetContractIDByHostID will retrieve the contractID based on the hostID provided
func (*StorageContractSet) IDs ¶
func (scs *StorageContractSet) IDs() (ids []storage.ContractID)
IDs return a list of storage contract id stored in the contract set
func (*StorageContractSet) InsertContract ¶
func (scs *StorageContractSet) InsertContract(ch ContractHeader, roots []common.Hash) (cm storage.ContractMetaData, err error)
InsertContract will insert the formed or renewed contract into the storage contract set allow contract manager further to maintain them
func (*StorageContractSet) RetrieveAllContractsMetaData ¶
func (scs *StorageContractSet) RetrieveAllContractsMetaData() (cms []storage.ContractMetaData)
RetrieveAllContractsMetaData will return all ContractMetaData stored in the contract set in the form of list
func (*StorageContractSet) RetrieveContractMetaData ¶
func (scs *StorageContractSet) RetrieveContractMetaData(id storage.ContractID) (cm storage.ContractMetaData, exist bool)
RetrieveContractMetaData will return ContractMetaData based on the contract id provided
func (*StorageContractSet) RetrieveRateLimit ¶
func (scs *StorageContractSet) RetrieveRateLimit() (readBPS, writeBPS int64, packetSize uint64)
RetrieveRateLimit will retrieve the current rate limit settings
func (*StorageContractSet) Return ¶
func (scs *StorageContractSet) Return(c *Contract) (err error)
Return will unlock the contract acquired from the contractSet using the acquire function the contract must be acquired using the Acquire function first before using this function
func (*StorageContractSet) SetRateLimit ¶
func (scs *StorageContractSet) SetRateLimit(readBPS, writeBPS int64, packetSize uint64)
SetRateLimit will set the rate limit based on the value user provided