Documentation ¶
Index ¶
- Variables
- func IsRevisionMismatch(err error) bool
- type ContractSet
- func (cs *ContractSet) Acquire(id types.FileContractID) (*SafeContract, bool)
- func (cs *ContractSet) Close() error
- func (cs *ContractSet) ConvertV130Contract(c V130Contract, cr V130CachedRevision) error
- func (cs *ContractSet) Delete(c *SafeContract)
- func (cs *ContractSet) FormContract(params modules.ContractParams, txnBuilder transactionBuilder, ...) (rc modules.RenterContract, formationTxnSet []types.Transaction, ...)
- func (cs *ContractSet) IDs() []types.FileContractID
- func (cs *ContractSet) InsertContract(rc modules.RecoverableContract, revTxn types.Transaction, roots []crypto.Hash, ...) (modules.RenterContract, error)
- func (cs *ContractSet) Len() int
- func (cs *ContractSet) NewDownloader(host modules.HostDBEntry, id types.FileContractID, ...) (_ *Downloader, err error)
- func (cs *ContractSet) NewEditor(host modules.HostDBEntry, id types.FileContractID, ...) (_ *Editor, err error)
- func (cs *ContractSet) NewRawSession(host modules.HostDBEntry, currentHeight types.BlockHeight, hdb hostDB, ...) (_ *Session, err error)
- func (cs *ContractSet) NewSession(host modules.HostDBEntry, id types.FileContractID, ...) (_ *Session, err error)
- func (cs *ContractSet) PublicKey(id types.FileContractID) (crypto.PublicKey, bool)
- func (cs *ContractSet) Renew(oldContract *SafeContract, params modules.ContractParams, ...) (rc modules.RenterContract, formationTxnSet []types.Transaction, err error)
- func (cs *ContractSet) RenewContract(conn net.Conn, fcid types.FileContractID, params modules.ContractParams, ...) (_ modules.RenterContract, _ []types.Transaction, err error)
- func (cs *ContractSet) Return(c *SafeContract)
- func (cs *ContractSet) View(id types.FileContractID) (modules.RenterContract, bool)
- func (cs *ContractSet) ViewAll() []modules.RenterContract
- type Downloader
- type Editor
- type MerkleRootSet
- type SafeContract
- func (c *SafeContract) CommitPaymentIntent(t *unappliedWalTxn, signedTxn types.Transaction, amount types.Currency, ...) error
- func (c *SafeContract) LastRevision() types.FileContractRevision
- func (c *SafeContract) Metadata() modules.RenterContract
- func (c *SafeContract) PublicKey() crypto.PublicKey
- func (c *SafeContract) RecordPaymentIntent(rev types.FileContractRevision, amount types.Currency, ...) (*unappliedWalTxn, error)
- func (c *SafeContract) Sign(hash crypto.Hash) crypto.Signature
- func (c *SafeContract) UpdateUtility(utility modules.ContractUtility) error
- func (c *SafeContract) Utility() modules.ContractUtility
- type Session
- func (s *Session) Append(data []byte) (_ modules.RenterContract, _ crypto.Hash, err error)
- func (s *Session) Close() error
- func (s *Session) HostSettings() modules.HostExternalSettings
- func (s *Session) Lock(id types.FileContractID, secretKey crypto.SecretKey) (types.FileContractRevision, []types.TransactionSignature, error)
- func (s *Session) Read(w io.Writer, req modules.LoopReadRequest, cancel <-chan struct{}) (_ modules.RenterContract, err error)
- func (s *Session) ReadSection(root crypto.Hash, offset, length uint32) (_ modules.RenterContract, _ []byte, err error)
- func (s *Session) RecoverSectorRoots(lastRev types.FileContractRevision, sk crypto.SecretKey) (_ types.Transaction, _ []crypto.Hash, err error)
- func (s *Session) Replace(data []byte, sectorIndex uint64, trim bool) (_ modules.RenterContract, _ crypto.Hash, err error)
- func (s *Session) SectorRoots(req modules.LoopSectorRootsRequest) (_ modules.RenterContract, _ []crypto.Hash, err error)
- func (s *Session) Settings() (modules.HostExternalSettings, error)
- func (s *Session) Unlock() error
- func (s *Session) Write(actions []modules.LoopWriteAction) (_ modules.RenterContract, err error)
- type V130CachedRevision
- type V130Contract
Constants ¶
This section is empty.
Variables ¶
var ( // ErrInvalidHeaderData is returned when we try to deserialize the header from // a []byte with incorrect data ErrInvalidHeaderData = errors.New("invalid header data") // ErrInvalidSectorNumber is returned when the requested sector doesnt' exist ErrInvalidSectorNumber = errors.New("invalid sector given - it does not exist") // ErrInvalidVersion is returned when the version of the file we are trying to // read does not match the current refCounterHeaderSize ErrInvalidVersion = errors.New("invalid file version") // ErrInvalidUpdateInstruction is returned when trying to parse a WAL update // instruction that is too short to possibly contain all the required data. ErrInvalidUpdateInstruction = errors.New("instructions slice is too short to contain the required data") // ErrRefCounterNotExist is returned when there is no refcounter file with // the given path ErrRefCounterNotExist = errors.New("refcounter does not exist") // ErrUpdateWithoutUpdateSession is returned when an update operation is // called without an open update session ErrUpdateWithoutUpdateSession = errors.New("an update operation was called without an open update session") // ErrUpdateAfterDelete is returned when an update operation is attempted to // be created after a delete ErrUpdateAfterDelete = errors.New("updates cannot be created after a deletion") )
var ( // ErrBadHostVersion indicates that the host is using an older, incompatible // version of the renter-host protocol. ErrBadHostVersion = errors.New("Bad host version; host does not support required protocols") )
Functions ¶
func IsRevisionMismatch ¶
IsRevisionMismatch returns true if err was caused by the host reporting a different revision number than expected.
Types ¶
type ContractSet ¶ added in v1.3.1
type ContractSet struct {
// contains filtered or unexported fields
}
A ContractSet provides safe concurrent access to a set of contracts. Its purpose is to serialize modifications to individual contracts, as well as to provide operations on the set as a whole.
func NewContractSet ¶ added in v1.3.1
func NewContractSet(dir string, rl *ratelimit.RateLimit, deps modules.Dependencies) (*ContractSet, error)
NewContractSet returns a ContractSet storing its contracts in the specified dir.
func (*ContractSet) Acquire ¶ added in v1.3.1
func (cs *ContractSet) Acquire(id types.FileContractID) (*SafeContract, bool)
Acquire looks up the contract for the specified host key and locks it before returning it. If the contract is not present in the set, Acquire returns false and a zero-valued RenterContract.
func (*ContractSet) Close ¶ added in v1.3.1
func (cs *ContractSet) Close() error
Close closes all contracts in a contract set, this means rendering it unusable for I/O
func (*ContractSet) ConvertV130Contract ¶ added in v1.3.1
func (cs *ContractSet) ConvertV130Contract(c V130Contract, cr V130CachedRevision) error
ConvertV130Contract creates a contract file for a v130 contract.
func (*ContractSet) Delete ¶ added in v1.3.1
func (cs *ContractSet) Delete(c *SafeContract)
Delete removes a contract from the set. The contract must have been previously acquired by Acquire. If the contract is not present in the set, Delete is a no-op.
func (*ContractSet) FormContract ¶ added in v1.3.1
func (cs *ContractSet) FormContract(params modules.ContractParams, txnBuilder transactionBuilder, tpool transactionPool, hdb hostDB, cancel <-chan struct{}) (rc modules.RenterContract, formationTxnSet []types.Transaction, sweepTxn types.Transaction, sweepParents []types.Transaction, err error)
FormContract forms a contract with a host and submits the contract transaction to tpool. The contract is added to the ContractSet and its metadata is returned.
func (*ContractSet) IDs ¶ added in v1.3.1
func (cs *ContractSet) IDs() []types.FileContractID
IDs returns the fcid of each contract with in the set. The contracts are not locked.
func (*ContractSet) InsertContract ¶ added in v1.4.0
func (cs *ContractSet) InsertContract(rc modules.RecoverableContract, revTxn types.Transaction, roots []crypto.Hash, sk crypto.SecretKey) (modules.RenterContract, error)
InsertContract inserts an existing contract into the set.
func (*ContractSet) Len ¶ added in v1.3.1
func (cs *ContractSet) Len() int
Len returns the number of contracts in the set.
func (*ContractSet) NewDownloader ¶ added in v1.3.1
func (cs *ContractSet) NewDownloader(host modules.HostDBEntry, id types.FileContractID, currentHeight types.BlockHeight, hdb hostDB, cancel <-chan struct{}) (_ *Downloader, err error)
NewDownloader initiates the download request loop with a host, and returns a Downloader.
func (*ContractSet) NewEditor ¶ added in v1.3.1
func (cs *ContractSet) NewEditor(host modules.HostDBEntry, id types.FileContractID, currentHeight types.BlockHeight, hdb hostDB, cancel <-chan struct{}) (_ *Editor, err error)
NewEditor initiates the contract revision process with a host, and returns an Editor.
func (*ContractSet) NewRawSession ¶ added in v1.4.0
func (cs *ContractSet) NewRawSession(host modules.HostDBEntry, currentHeight types.BlockHeight, hdb hostDB, cancel <-chan struct{}) (_ *Session, err error)
NewRawSession creates a new session unassociated with any contract.
func (*ContractSet) NewSession ¶ added in v1.4.0
func (cs *ContractSet) NewSession(host modules.HostDBEntry, id types.FileContractID, currentHeight types.BlockHeight, hdb hostDB, logger *log.Logger, cancel <-chan struct{}) (_ *Session, err error)
NewSession initiates the RPC loop with a host and returns a Session.
func (*ContractSet) PublicKey ¶ added in v1.5.7
func (cs *ContractSet) PublicKey(id types.FileContractID) (crypto.PublicKey, bool)
PublicKey returns the public key capable of verifying the renter's signature on a contract.
func (*ContractSet) Renew ¶ added in v1.3.1
func (cs *ContractSet) Renew(oldContract *SafeContract, params modules.ContractParams, txnBuilder transactionBuilder, tpool transactionPool, hdb hostDB, cancel <-chan struct{}) (rc modules.RenterContract, formationTxnSet []types.Transaction, err error)
Renew negotiates a new contract for data already stored with a host, and submits the new contract transaction to tpool. The new contract is added to the ContractSet and its metadata is returned.
func (*ContractSet) RenewContract ¶ added in v1.5.7
func (cs *ContractSet) RenewContract(conn net.Conn, fcid types.FileContractID, params modules.ContractParams, txnBuilder modules.TransactionBuilder, tpool modules.TransactionPool, hdb hostDB, pt *modules.RPCPriceTable) (_ modules.RenterContract, _ []types.Transaction, err error)
RenewContract takes an established connection to a host and renews the contract with that host.
func (*ContractSet) Return ¶ added in v1.3.1
func (cs *ContractSet) Return(c *SafeContract)
Return returns a locked contract to the set and unlocks it. The contract must have been previously acquired by Acquire. If the contract is not present in the set, Return panics.
func (*ContractSet) View ¶ added in v1.3.1
func (cs *ContractSet) View(id types.FileContractID) (modules.RenterContract, bool)
View returns a copy of the contract with the specified host key. The contract is not locked. Certain fields, including the MerkleRoots, are set to nil for safety reasons. If the contract is not present in the set, View returns false and a zero-valued RenterContract.
func (*ContractSet) ViewAll ¶ added in v1.3.1
func (cs *ContractSet) ViewAll() []modules.RenterContract
ViewAll returns the metadata of each contract in the set. The contracts are not locked.
type Downloader ¶
type Downloader struct {
// contains filtered or unexported fields
}
A Downloader retrieves sectors by calling the download RPC on a host. Downloaders are NOT thread- safe; calls to Sector must be serialized.
func (*Downloader) Close ¶
func (hd *Downloader) Close() error
Close cleanly terminates the download loop with the host and closes the connection.
func (*Downloader) Download ¶ added in v1.4.0
func (hd *Downloader) Download(root crypto.Hash, offset, length uint32) (_ modules.RenterContract, _ []byte, err error)
Download retrieves the requested sector data and revises the underlying contract to pay the host proportionally to the data retrieved.
type Editor ¶
type Editor struct {
// contains filtered or unexported fields
}
A Editor modifies a Contract by calling the revise RPC on a host. It Editors are NOT thread-safe; calls to Upload must happen in serial.
func (*Editor) Close ¶
Close cleanly terminates the revision loop with the host and closes the connection.
func (*Editor) HostSettings ¶ added in v1.5.7
func (he *Editor) HostSettings() modules.HostExternalSettings
HostSettings returns the settings that are active in the current session.
type MerkleRootSet ¶ added in v1.3.1
MerkleRootSet is a set of Merkle roots, and gets encoded more efficiently.
func (MerkleRootSet) MarshalJSON ¶ added in v1.3.1
func (mrs MerkleRootSet) MarshalJSON() ([]byte, error)
MarshalJSON defines a JSON encoding for a MerkleRootSet.
func (*MerkleRootSet) UnmarshalJSON ¶ added in v1.3.1
func (mrs *MerkleRootSet) UnmarshalJSON(b []byte) error
UnmarshalJSON attempts to decode a MerkleRootSet, falling back on the legacy decoding of a []crypto.Hash if that fails.
type SafeContract ¶ added in v1.3.1
type SafeContract struct {
// contains filtered or unexported fields
}
A SafeContract contains the most recent revision transaction negotiated with a host, and the secret key used to sign it.
func (*SafeContract) CommitPaymentIntent ¶ added in v1.5.7
func (c *SafeContract) CommitPaymentIntent(t *unappliedWalTxn, signedTxn types.Transaction, amount types.Currency, details modules.SpendingDetails) error
CommitPaymentIntent will commit the intent to pay a host for an rpc by committing the signed txn in the contract's header.
func (*SafeContract) LastRevision ¶ added in v1.5.7
func (c *SafeContract) LastRevision() types.FileContractRevision
LastRevision returns the most recent revision
func (*SafeContract) Metadata ¶ added in v1.3.1
func (c *SafeContract) Metadata() modules.RenterContract
Metadata returns the metadata of a renter contract
func (*SafeContract) PublicKey ¶ added in v1.5.7
func (c *SafeContract) PublicKey() crypto.PublicKey
PublicKey returns the public key capable of verifying the renter's signature on a contract.
func (*SafeContract) RecordPaymentIntent ¶ added in v1.5.7
func (c *SafeContract) RecordPaymentIntent(rev types.FileContractRevision, amount types.Currency, details modules.SpendingDetails) (*unappliedWalTxn, error)
RecordPaymentIntent will records the changes we are about to make to the revision in order to pay a host for an RPC.
func (*SafeContract) Sign ¶ added in v1.5.7
func (c *SafeContract) Sign(hash crypto.Hash) crypto.Signature
Sign will sign the given hash using the safecontract's secret key
func (*SafeContract) UpdateUtility ¶ added in v1.3.3
func (c *SafeContract) UpdateUtility(utility modules.ContractUtility) error
UpdateUtility updates the utility field of a contract.
func (*SafeContract) Utility ¶ added in v1.3.3
func (c *SafeContract) Utility() modules.ContractUtility
Utility returns the contract utility for the contract.
type Session ¶ added in v1.4.0
type Session struct {
// contains filtered or unexported fields
}
A Session is an ongoing exchange of RPCs via the renter-host protocol.
TODO: The session type needs access to a logger. Probably the renter logger.
func (*Session) Append ¶ added in v1.4.0
Append calls the Write RPC with a single Append action, returning the updated contract and the Merkle root of the appended sector.
func (*Session) Close ¶ added in v1.4.0
Close cleanly terminates the protocol session with the host and closes the connection.
func (*Session) HostSettings ¶ added in v1.5.7
func (s *Session) HostSettings() modules.HostExternalSettings
HostSettings returns the currently active host settings of the session.
func (*Session) Lock ¶ added in v1.4.0
func (s *Session) Lock(id types.FileContractID, secretKey crypto.SecretKey) (types.FileContractRevision, []types.TransactionSignature, error)
Lock calls the Lock RPC, locking the supplied contract and returning its most recent revision.
func (*Session) Read ¶ added in v1.4.0
func (s *Session) Read(w io.Writer, req modules.LoopReadRequest, cancel <-chan struct{}) (_ modules.RenterContract, err error)
Read calls the Read RPC, writing the requested data to w. The RPC can be cancelled (with a granularity of one section) via the cancel channel.
func (*Session) ReadSection ¶ added in v1.4.0
func (s *Session) ReadSection(root crypto.Hash, offset, length uint32) (_ modules.RenterContract, _ []byte, err error)
ReadSection calls the Read RPC with a single section and returns the requested data. A Merkle proof is always requested.
func (*Session) RecoverSectorRoots ¶ added in v1.4.0
func (s *Session) RecoverSectorRoots(lastRev types.FileContractRevision, sk crypto.SecretKey) (_ types.Transaction, _ []crypto.Hash, err error)
RecoverSectorRoots calls the contract roots download RPC and returns the requested sector roots. The Revision and Signature fields of req are filled in automatically. If a Merkle proof is requested, it is verified.
func (*Session) Replace ¶ added in v1.5.7
func (s *Session) Replace(data []byte, sectorIndex uint64, trim bool) (_ modules.RenterContract, _ crypto.Hash, err error)
Replace calls the Write RPC with a series of actions that replace the sector at the specified index with data, returning the updated contract and the Merkle root of the new sector.
func (*Session) SectorRoots ¶ added in v1.4.0
func (s *Session) SectorRoots(req modules.LoopSectorRootsRequest) (_ modules.RenterContract, _ []crypto.Hash, err error)
SectorRoots calls the contract roots download RPC and returns the requested sector roots. The Revision and Signature fields of req are filled in automatically. If a Merkle proof is requested, it is verified.
func (*Session) Settings ¶ added in v1.4.0
func (s *Session) Settings() (modules.HostExternalSettings, error)
Settings calls the Settings RPC, returning the host's reported settings.
func (*Session) Unlock ¶ added in v1.4.0
Unlock calls the Unlock RPC, unlocking the currently-locked contract.
func (*Session) Write ¶ added in v1.4.0
func (s *Session) Write(actions []modules.LoopWriteAction) (_ modules.RenterContract, err error)
Write implements the Write RPC, except for ActionUpdate. A Merkle proof is always requested.
type V130CachedRevision ¶ added in v1.3.1
type V130CachedRevision struct { Revision types.FileContractRevision `json:"revision"` MerkleRoots modules.MerkleRootSet `json:"merkleroots"` }
A V130CachedRevision contains changes that would be applied to a RenterContract if a contract revision succeeded.
type V130Contract ¶ added in v1.3.1
type V130Contract struct { HostPublicKey types.SiaPublicKey `json:"hostpublickey"` ID types.FileContractID `json:"id"` LastRevision types.FileContractRevision `json:"lastrevision"` LastRevisionTxn types.Transaction `json:"lastrevisiontxn"` MerkleRoots MerkleRootSet `json:"merkleroots"` SecretKey crypto.SecretKey `json:"secretkey"` StartHeight types.BlockHeight `json:"startheight"` DownloadSpending types.Currency `json:"downloadspending"` StorageSpending types.Currency `json:"storagespending"` UploadSpending types.Currency `json:"uploadspending"` TotalCost types.Currency `json:"totalcost"` ContractFee types.Currency `json:"contractfee"` TxnFee types.Currency `json:"txnfee"` SiafundFee types.Currency `json:"siafundfee"` }
A V130Contract specifies the v130 contract format.
func (*V130Contract) EndHeight ¶ added in v1.3.1
func (c *V130Contract) EndHeight() types.BlockHeight
EndHeight returns the height at which the host is no longer obligated to store contract data.
func (*V130Contract) RenterFunds ¶ added in v1.3.1
func (c *V130Contract) RenterFunds() types.Currency
RenterFunds returns the funds remaining in the contract's Renter payout as of the most recent revision.