blob

package
v0.0.0-...-bcdd5ea Latest Latest
Warning

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

Go to latest
Published: Oct 22, 2026 License: Apache-2.0, MIT Imports: 16 Imported by: 12

Documentation

Index

Constants

View Source
const BlobAcceptedErrorName = "BlobAccepted"

BlobAcceptedErrorName is the stable receipt-failure name when reject is invoked for a blob the invoking space has accepted — accepted blobs are released via `/blob/remove`, never rejected.

View Source
const BlobDigestMismatchErrorName = "BlobDigestMismatch"

BlobDigestMismatchErrorName is the stable receipt-failure name when the digest the storage node computed for the received data differs from the digest in the accept arguments or, when they name only a digest code, the digest in the `/http/put` receipt.

View Source
const InvalidCauseErrorName = "InvalidCause"

InvalidCauseErrorName is the stable receipt-failure name when the linked `/blob/remove` task's subject does not equal Space or its digest does not equal Digest.

View Source
const MaxBlobSize = (256 << 20) * 127 / 128

MaxBlobSize is the network-wide ceiling on a single blob, in bytes, as shipped to a storage node: the most raw bytes a default-configured piri accepts in one piece. Piri's default piece ceiling is a 256 MiB PADDED piece (piri pkg/pdp/piecesize, DefaultMaxPaddedSize), and Fr32 padding leaves 127/128 of it for data — 266338304 (~254 MiB). Piri's piece config is raise-only (an operator may accept more, never less), so a client sharding uploads at this constant is safe against every conforming node.

This measures the stored artifact. An encrypting client must choose its plaintext split below this, leaving room for its envelope framing.

View Source
const MissingCauseErrorName = "MissingCause"

MissingCauseErrorName is the stable receipt-failure name when an abort's Add is missing or does not resolve to a known `/blob/add` task — without it the upload service cannot recover which storage node holds the parked blob.

View Source
const UnknownCauseErrorName = "UnknownCause"

UnknownCauseErrorName is the stable receipt-failure name when a release's Cause is undefined, the linked invocation is not present in the request container, or the linked invocation is not a `/blob/remove` task.

View Source
const UnsupportedDigestCodeErrorName = "UnsupportedDigestCode"

UnsupportedDigestCodeErrorName is the stable receipt-failure name when a `/blob/add` or `/blob/allocate` names a digest code the executor does not support, or the executor does not support adding a blob by digest code at all. A client that receives it can fall back to computing the digest before adding the blob.

Variables

View Source
var Abort = binding.Bind[*AbortArguments, *AbortOK](command.MustParse("/blob/abort"))

Abort (/blob/abort) abandons an in-flight upload of a PARKED blob — allocated but never accepted, whether or not the bytes ever reached the storage node. It is the client-facing abandon verb: an upload ends in exactly one of `/blob/accept` (commit) or an abort that the upload service translates into `/blob/reject` on the storage node holding the allocation.

Served by the upload service (subject = the space). A parked blob has no registration or acceptance to look the storage node up by, so the service recovers it from the receipt chain of the Add task, and forwards a `/blob/reject` of the allocation the add made. A missing or unknown Add fails with MissingCause. Blobs the space has accepted are released via `/blob/remove` instead; if the node refuses the translated reject with BlobAccepted, the service surfaces that named failure in the abort receipt. The abort mutates no upload-service state, so a failed abort is safely retryable.

Idempotent: aborting an unknown or already-rejected blob succeeds. The receipt carries no payload (Unit).

View Source
var Accept = binding.Bind[*AcceptArguments, *AcceptOK](command.MustParse("/blob/accept"))
View Source
var Allocate = binding.Bind[*AllocateArguments, *AllocateOK](command.MustParse("/blob/allocate"))
View Source
var ErrBlobAccepted = errors.New(BlobAcceptedErrorName, "blob has been accepted by the space; release the claim via /blob/remove")
View Source
var ErrBlobDigestMismatch = errors.New(BlobDigestMismatchErrorName, "received data does not hash to the reported digest")

ErrBlobDigestMismatch is the failure for a digest mismatch.

View Source
var ErrInvalidCause = errors.New(InvalidCauseErrorName, "cause invocation does not match release arguments")
View Source
var ErrMissingCause = errors.New(MissingCauseErrorName, "abort requires the /blob/add task that parked the blob")
View Source
var ErrUnknownCause = errors.New(UnknownCauseErrorName, "unknown cause invocation")
View Source
var ErrUnsupportedDigestCode = errors.New(UnsupportedDigestCodeErrorName, "adding a blob by digest code is supported only for sha2-256")

ErrUnsupportedDigestCode is the failure for an unsupported digest code.

View Source
var List = binding.Bind[*ListArguments, *ListOK](command.MustParse("/blob/list"))
View Source
var Reject = binding.Bind[*RejectArguments, *RejectOK](command.MustParse("/blob/reject"))

Reject (/blob/reject) is the "don't accept" inverse of `/blob/accept`: it retires a PARKED blob — allocated, never accepted, whether or not its bytes were ever received. A blob's lifecycle on a storage node ends in exactly one of `/blob/accept` (commit: aggregation, location claim, registration) or `/blob/reject` (drop: allocation released, bytes deleted).

Served by storage nodes (subject = the provider DID, invoked by the upload service under its registration delegation, typically translating a client `/blob/abort`). The allocation is named by the `/blob/allocate` task that made it, and the node knows which space and blob it is for. The node drops the allocation and deletes any received bytes once no space holds an allocation or acceptance for them.

A blob that the allocation's space has accepted is refused with BlobAccepted — a space's accepted blobs are released via `/blob/remove`, never rejected. The guard is scoped to that space, not the digest: another space's acceptance of the same bytes must not block the reject — the node simply drops this allocation and retains the bytes for the space that still claims them.

Idempotent: rejecting an unknown or already-rejected blob succeeds. The receipt carries no payload (Unit).

View Source
var Release = binding.Bind[*ReleaseArguments, *ReleaseOK](command.MustParse("/blob/release"))

Release (/blob/release) is the claim-release inverse of `/blob/allocate`: it drops one space's reference to a blob on a storage node. It is the upload service's translation of a client `/blob/remove`.

Served by storage nodes (subject = the provider DID, invoked by the upload service under its registration delegation; the space travels in the arguments, matching Allocate/Accept). The node drops the space's allocation, acceptance and location claim. Bytes are physically deleted only when no space claims the digest anymore — and an accepted blob's bytes may additionally be retained until its PDP aggregate root is fully retired on-chain. Physical deletion is always asynchronous: the removal machinery re-verifies zero claims before every destructive step.

The release carries Cause, a link to the originating `/blob/remove` task, and the remove invocation itself MUST ride in the request container so the node can verify the release is legitimate rather than trusting the upload service: the node rejects releases whose cause invocation is absent or not a `/blob/remove` task (UnknownCause), or whose subject/digest do not match the release's Space/Digest (InvalidCause).

Idempotent: releasing an unknown or already-released blob succeeds. The receipt carries no payload (Unit).

View Source
var Remove = binding.Bind[*RemoveArguments, *RemoveOK](command.MustParse("/blob/remove"))

Remove (/blob/remove) releases a space's claim on an ACCEPTED blob.

Served by the upload service (subject = the space). The service validates the caller's space authority, recovers every storage node holding the blob (the primary via the registration's receipt chain, plus any non-failed replicas), forwards a `/blob/release` to each, and deregisters the blob last — so the receipt chain to the primary survives for a retry if every forward fails. Forwarding is best-effort: the node-side handler is idempotent and unclaimed allocations expire, so a missed node is reconciled by provider-side hygiene.

Parked (never-accepted) blobs are abandoned via `/blob/abort` instead.

Idempotent: removing an unknown or already-removed blob succeeds. The receipt carries no payload (Unit).

View Source
var Replicate = binding.Bind[*ReplicateArguments, *ReplicateOK](command.MustParse("/blob/replicate"))

Replicate is a capability that allows an agent to replicate a Blob into a space identified by did:key in the `with` field.

A Replicate capability may only be invoked after a `/blob/accept` receipt has been receieved, indicating the source node has successfully received the blob. Each Replicate task MUST target a different node, and they MUST NOT target the original upload target.

The Replicate task receipt includes async tasks for `/blob/replica/allocate` and `/blob/replica/transfer`. Successful completion of the `/blob/replica/transfer` task indicates the replication target has transferred and stored the blob. The number of `/blob/replica/allocate` and `/blob/replica/transfer` tasks corresponds directly to number of replicas requested.

View Source
var Retrieve = binding.Bind[*RetrieveArguments, *RetrieveOK](command.MustParse("/blob/retrieve"))

Retrieve is the service-level retrieval capability (e.g. used by the indexer to fetch content claims from a Piri node). It is NOT space-scoped: any holder of a valid delegation for `/blob/retrieve` may fetch the blob by digest, regardless of which space it was originally stored under.

For user-facing retrieval that requires an allocation in a specific space see `libforge/commands/content.Retrieve` (the `/content/retrieve` capability).

Functions

This section is empty.

Types

type AbortArguments

type AbortArguments struct {
	Add cid.Cid `cborgen:"add" dagjsongen:"add"`
}

AbortArguments abandons the space's in-flight upload of a parked (never-accepted) blob. The space is the invocation subject. Add is the `/blob/add` task link: the upload service follows its receipt chain to the storage node holding the upload and the allocation it made there. A parked blob has no registration or acceptance to look the node up by.

func (*AbortArguments) MarshalCBOR

func (t *AbortArguments) MarshalCBOR(w io.Writer) error

func (*AbortArguments) MarshalDagJSON

func (t *AbortArguments) MarshalDagJSON(w io.Writer) error

func (*AbortArguments) UnmarshalCBOR

func (t *AbortArguments) UnmarshalCBOR(r io.Reader) (err error)

func (*AbortArguments) UnmarshalDagJSON

func (t *AbortArguments) UnmarshalDagJSON(r io.Reader) (err error)

type AbortOK

type AbortOK = commands.Unit

type AcceptArguments

type AcceptArguments struct {
	Space did.DID         `cborgen:"space" dagjsongen:"space"`
	Blob  BlobSpec        `cborgen:"blob" dagjsongen:"blob"`
	Put   promise.AwaitOK `cborgen:"_put" dagjsongen:"_put"`
}

func (*AcceptArguments) MarshalCBOR

func (t *AcceptArguments) MarshalCBOR(w io.Writer) error

func (*AcceptArguments) MarshalDagJSON

func (t *AcceptArguments) MarshalDagJSON(w io.Writer) error

func (*AcceptArguments) UnmarshalCBOR

func (t *AcceptArguments) UnmarshalCBOR(r io.Reader) (err error)

func (*AcceptArguments) UnmarshalDagJSON

func (t *AcceptArguments) UnmarshalDagJSON(r io.Reader) (err error)

type AcceptOK

type AcceptOK struct {
	Site cid.Cid `cborgen:"site" dagjsongen:"site"`
	// PDP is a promise of the `/pdp/accept` task result, which completes when
	// the piece has been aggregated and root added to the node's PDP dataset.
	PDP promise.AwaitOK `cborgen:"pdp" dagjsongen:"pdp"`
}

func (*AcceptOK) MarshalCBOR

func (t *AcceptOK) MarshalCBOR(w io.Writer) error

func (*AcceptOK) MarshalDagJSON

func (t *AcceptOK) MarshalDagJSON(w io.Writer) error

func (*AcceptOK) UnmarshalCBOR

func (t *AcceptOK) UnmarshalCBOR(r io.Reader) (err error)

func (*AcceptOK) UnmarshalDagJSON

func (t *AcceptOK) UnmarshalDagJSON(r io.Reader) (err error)

type AddArguments

type AddArguments struct {
	Blob BlobSpec `cborgen:"blob" dagjsongen:"blob"`
}

func (*AddArguments) MarshalCBOR

func (t *AddArguments) MarshalCBOR(w io.Writer) error

func (*AddArguments) MarshalDagJSON

func (t *AddArguments) MarshalDagJSON(w io.Writer) error

func (*AddArguments) UnmarshalCBOR

func (t *AddArguments) UnmarshalCBOR(r io.Reader) (err error)

func (*AddArguments) UnmarshalDagJSON

func (t *AddArguments) UnmarshalDagJSON(r io.Reader) (err error)

type AddOK

type AddOK struct {
	// Site is a promise of the `/blob/accept` task result, which contains a
	// location claim for the blob, describing where it can be retrieved from.
	Site promise.AwaitOK `cborgen:"site" dagjsongen:"site"`
}

func (*AddOK) MarshalCBOR

func (t *AddOK) MarshalCBOR(w io.Writer) error

func (*AddOK) MarshalDagJSON

func (t *AddOK) MarshalDagJSON(w io.Writer) error

func (*AddOK) UnmarshalCBOR

func (t *AddOK) UnmarshalCBOR(r io.Reader) (err error)

func (*AddOK) UnmarshalDagJSON

func (t *AddOK) UnmarshalDagJSON(r io.Reader) (err error)

type AllocateArguments

type AllocateArguments struct {
	Space did.DID  `cborgen:"space" dagjsongen:"space"`
	Blob  BlobSpec `cborgen:"blob" dagjsongen:"blob"`
	Cause cid.Cid  `cborgen:"cause" dagjsongen:"cause"`
}

func (*AllocateArguments) MarshalCBOR

func (t *AllocateArguments) MarshalCBOR(w io.Writer) error

func (*AllocateArguments) MarshalDagJSON

func (t *AllocateArguments) MarshalDagJSON(w io.Writer) error

func (*AllocateArguments) UnmarshalCBOR

func (t *AllocateArguments) UnmarshalCBOR(r io.Reader) (err error)

func (*AllocateArguments) UnmarshalDagJSON

func (t *AllocateArguments) UnmarshalDagJSON(r io.Reader) (err error)

type AllocateOK

type AllocateOK struct {
	Size    uint64       `cborgen:"size" dagjsongen:"size"`
	Address *BlobAddress `cborgen:"address,omitempty" dagjsongen:"address,omitempty"`
}

func (*AllocateOK) MarshalCBOR

func (t *AllocateOK) MarshalCBOR(w io.Writer) error

func (*AllocateOK) MarshalDagJSON

func (t *AllocateOK) MarshalDagJSON(w io.Writer) error

func (*AllocateOK) UnmarshalCBOR

func (t *AllocateOK) UnmarshalCBOR(r io.Reader) (err error)

func (*AllocateOK) UnmarshalDagJSON

func (t *AllocateOK) UnmarshalDagJSON(r io.Reader) (err error)

type Blob

type Blob struct {
	Digest multihash.Multihash `cborgen:"digest" dagjsongen:"digest"`
	Size   uint64              `cborgen:"size" dagjsongen:"size"`
}

func (*Blob) MarshalCBOR

func (t *Blob) MarshalCBOR(w io.Writer) error

func (*Blob) MarshalDagJSON

func (t *Blob) MarshalDagJSON(w io.Writer) error

func (*Blob) UnmarshalCBOR

func (t *Blob) UnmarshalCBOR(r io.Reader) (err error)

func (*Blob) UnmarshalDagJSON

func (t *Blob) UnmarshalDagJSON(r io.Reader) (err error)

type BlobAddress

type BlobAddress struct {
	URL     commands.CborURL  `cborgen:"url" dagjsongen:"url"`
	Headers map[string]string `cborgen:"headers" dagjsongen:"headers"`
	Expires int64             `cborgen:"expires" dagjsongen:"expires"`
}

func (*BlobAddress) MarshalCBOR

func (t *BlobAddress) MarshalCBOR(w io.Writer) error

func (*BlobAddress) MarshalDagJSON

func (t *BlobAddress) MarshalDagJSON(w io.Writer) error

func (*BlobAddress) UnmarshalCBOR

func (t *BlobAddress) UnmarshalCBOR(r io.Reader) (err error)

func (*BlobAddress) UnmarshalDagJSON

func (t *BlobAddress) UnmarshalDagJSON(r io.Reader) (err error)

type BlobSpec

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

BlobSpec describes a blob in the arguments of the capabilities that can add a blob before its digest is known: `/blob/add`, `/blob/allocate`, `/blob/accept` and the body of `/http/put`. It names the blob's size and either its digest, when the digest is known in advance, or only the code of the multihash function its digest is to be computed with, when both parties compute it as the data streams. A spec naming a digest has the digest's code too.

Construct one with SpecFromBlob, SpecFromDigest or SpecFromDigestCode. Encoding the zero value fails, as does decoding a spec that names both a digest and a digest code, or neither. The codec is hand-written (codec.go), over the generated codec of BlobSpecModel.

func SpecFromBlob

func SpecFromBlob(b Blob) BlobSpec

SpecFromBlob returns the spec of a blob whose digest is known.

func SpecFromDigest

func SpecFromDigest(digest multihash.Multihash, size uint64) BlobSpec

SpecFromDigest returns the spec of a blob of size bytes whose digest is known. Its digest code is the digest's own; a digest that is not a multihash has code 0.

func SpecFromDigestCode

func SpecFromDigestCode(code, size uint64) BlobSpec

SpecFromDigestCode returns the spec of a blob of size bytes whose digest is to be computed with the multihash function code.

func (BlobSpec) Digest

func (s BlobSpec) Digest() (multihash.Multihash, bool)

Digest returns the blob's digest, when the spec names one.

func (BlobSpec) DigestCode

func (s BlobSpec) DigestCode() uint64

DigestCode returns the code of the multihash function the blob's digest is computed with: the one the spec names, or its digest's own.

func (BlobSpec) MarshalCBOR

func (s BlobSpec) MarshalCBOR(w io.Writer) error

func (BlobSpec) MarshalDagJSON

func (s BlobSpec) MarshalDagJSON(w io.Writer) error

func (BlobSpec) Size

func (s BlobSpec) Size() uint64

Size returns the size of the blob.

func (*BlobSpec) UnmarshalCBOR

func (s *BlobSpec) UnmarshalCBOR(r io.Reader) error

func (*BlobSpec) UnmarshalDagJSON

func (s *BlobSpec) UnmarshalDagJSON(r io.Reader) error

type BlobSpecModel

type BlobSpecModel struct {
	Digest     multihash.Multihash `cborgen:"digest,omitempty" dagjsongen:"digest,omitempty"`
	DigestCode *uint64             `cborgen:"digestCode,omitempty" dagjsongen:"digestCode,omitempty"`
	Size       uint64              `cborgen:"size" dagjsongen:"size"`
}

BlobSpecModel is the encoded form of a BlobSpec: the fields of both of its variants, so a spec decodes in one bounded pass. Exactly one of Digest and DigestCode is set in a valid spec.

func (*BlobSpecModel) MarshalCBOR

func (t *BlobSpecModel) MarshalCBOR(w io.Writer) error

func (*BlobSpecModel) MarshalDagJSON

func (t *BlobSpecModel) MarshalDagJSON(w io.Writer) error

func (*BlobSpecModel) UnmarshalCBOR

func (t *BlobSpecModel) UnmarshalCBOR(r io.Reader) (err error)

func (*BlobSpecModel) UnmarshalDagJSON

func (t *BlobSpecModel) UnmarshalDagJSON(r io.Reader) (err error)

type ListArguments

type ListArguments struct {
	Cursor *string `cborgen:"cursor,omitempty" dagjsongen:"cursor,omitempty"`
	Size   *uint64 `cborgen:"size,omitempty" dagjsongen:"size,omitempty"`
}

func (*ListArguments) MarshalCBOR

func (t *ListArguments) MarshalCBOR(w io.Writer) error

func (*ListArguments) MarshalDagJSON

func (t *ListArguments) MarshalDagJSON(w io.Writer) error

func (*ListArguments) UnmarshalCBOR

func (t *ListArguments) UnmarshalCBOR(r io.Reader) (err error)

func (*ListArguments) UnmarshalDagJSON

func (t *ListArguments) UnmarshalDagJSON(r io.Reader) (err error)

type ListBlobItem

type ListBlobItem struct {
	Blob       Blob  `cborgen:"blob" dagjsongen:"blob"`
	InsertedAt int64 `cborgen:"insertedAt" dagjsongen:"insertedAt"`
}

func (*ListBlobItem) MarshalCBOR

func (t *ListBlobItem) MarshalCBOR(w io.Writer) error

func (*ListBlobItem) MarshalDagJSON

func (t *ListBlobItem) MarshalDagJSON(w io.Writer) error

func (*ListBlobItem) UnmarshalCBOR

func (t *ListBlobItem) UnmarshalCBOR(r io.Reader) (err error)

func (*ListBlobItem) UnmarshalDagJSON

func (t *ListBlobItem) UnmarshalDagJSON(r io.Reader) (err error)

type ListOK

type ListOK struct {
	Cursor  *string        `cborgen:"cursor,omitempty" dagjsongen:"cursor,omitempty"`
	Size    uint64         `cborgen:"size" dagjsongen:"size"`
	Results []ListBlobItem `cborgen:"results" dagjsongen:"results"`
}

func (*ListOK) MarshalCBOR

func (t *ListOK) MarshalCBOR(w io.Writer) error

func (*ListOK) MarshalDagJSON

func (t *ListOK) MarshalDagJSON(w io.Writer) error

func (*ListOK) UnmarshalCBOR

func (t *ListOK) UnmarshalCBOR(r io.Reader) (err error)

func (*ListOK) UnmarshalDagJSON

func (t *ListOK) UnmarshalDagJSON(r io.Reader) (err error)

type RejectArguments

type RejectArguments struct {
	Allocation cid.Cid `cborgen:"allocation" dagjsongen:"allocation"`
}

RejectArguments drops the allocation Allocation names, the link to the `/blob/allocate` task that made it, for a parked (never-accepted) blob on the storage node. The node knows the space and blob the allocation is for, and deletes any received bytes once no space holds an allocation or acceptance for them.

func (*RejectArguments) MarshalCBOR

func (t *RejectArguments) MarshalCBOR(w io.Writer) error

func (*RejectArguments) MarshalDagJSON

func (t *RejectArguments) MarshalDagJSON(w io.Writer) error

func (*RejectArguments) UnmarshalCBOR

func (t *RejectArguments) UnmarshalCBOR(r io.Reader) (err error)

func (*RejectArguments) UnmarshalDagJSON

func (t *RejectArguments) UnmarshalDagJSON(r io.Reader) (err error)

type RejectOK

type RejectOK = commands.Unit

type ReleaseArguments

type ReleaseArguments struct {
	Space  did.DID             `cborgen:"space" dagjsongen:"space"`
	Digest multihash.Multihash `cborgen:"digest" dagjsongen:"digest"`
	// Cause is the link to the `/blob/remove` task this release translates.
	// The linked invocation MUST be present in the request container; the
	// node verifies its subject equals Space and its digest equals Digest
	// before dropping the claim.
	Cause cid.Cid `cborgen:"cause" dagjsongen:"cause"`
}

ReleaseArguments drops Space's claim on the blob identified by Digest on a storage node. Space is explicit (matching Allocate/Accept) because the invocation subject is the provider, and storage nodes key allocations and acceptances by (digest, space): release drops one space's claim, and the node performs physical deletion only once no space claims the digest at all. Cause proves the release originates from the space: it links the `/blob/remove` task the release translates.

func (*ReleaseArguments) MarshalCBOR

func (t *ReleaseArguments) MarshalCBOR(w io.Writer) error

func (*ReleaseArguments) MarshalDagJSON

func (t *ReleaseArguments) MarshalDagJSON(w io.Writer) error

func (*ReleaseArguments) UnmarshalCBOR

func (t *ReleaseArguments) UnmarshalCBOR(r io.Reader) (err error)

func (*ReleaseArguments) UnmarshalDagJSON

func (t *ReleaseArguments) UnmarshalDagJSON(r io.Reader) (err error)

type ReleaseOK

type ReleaseOK = commands.Unit

type RemoveArguments

type RemoveArguments struct {
	Digest multihash.Multihash `cborgen:"digest" dagjsongen:"digest"`
}

RemoveArguments releases the invoking space's claim on the blob identified by Digest. The space is the invocation subject — it is not repeated in the arguments (compare ReleaseArguments, the provider-rooted leg, where the subject is the provider and the space must travel explicitly).

func (*RemoveArguments) MarshalCBOR

func (t *RemoveArguments) MarshalCBOR(w io.Writer) error

func (*RemoveArguments) MarshalDagJSON

func (t *RemoveArguments) MarshalDagJSON(w io.Writer) error

func (*RemoveArguments) UnmarshalCBOR

func (t *RemoveArguments) UnmarshalCBOR(r io.Reader) (err error)

func (*RemoveArguments) UnmarshalDagJSON

func (t *RemoveArguments) UnmarshalDagJSON(r io.Reader) (err error)

type RemoveOK

type RemoveOK = commands.Unit

type ReplicateArguments

type ReplicateArguments struct {
	// Blob is the blob that must be replicated.
	Blob Blob `cborgen:"blob" dagjsongen:"blob"`
	// Replicas is the number of replicas to ensure.
	// e.g. Replicas: 3 will ensure 3 copies of the data exist in a network in total.
	Replicas uint64 `cborgen:"replicas" dagjsongen:"replicas"`
	// Site is a link to a location commitment indicating where the Blob must be
	// fetched from.
	Site cid.Cid `cborgen:"site" dagjsongen:"site"`
}

func (*ReplicateArguments) MarshalCBOR

func (t *ReplicateArguments) MarshalCBOR(w io.Writer) error

func (*ReplicateArguments) MarshalDagJSON

func (t *ReplicateArguments) MarshalDagJSON(w io.Writer) error

func (*ReplicateArguments) UnmarshalCBOR

func (t *ReplicateArguments) UnmarshalCBOR(r io.Reader) (err error)

func (*ReplicateArguments) UnmarshalDagJSON

func (t *ReplicateArguments) UnmarshalDagJSON(r io.Reader) (err error)

type ReplicateOK

type ReplicateOK struct {
	// Site resolves to additional locations for the blob. They are links to
	// `/blob/replica/transfer` tasks.
	Site []promise.AwaitOK `cborgen:"site" dagjsongen:"site"`
}

func (*ReplicateOK) MarshalCBOR

func (t *ReplicateOK) MarshalCBOR(w io.Writer) error

func (*ReplicateOK) MarshalDagJSON

func (t *ReplicateOK) MarshalDagJSON(w io.Writer) error

func (*ReplicateOK) UnmarshalCBOR

func (t *ReplicateOK) UnmarshalCBOR(r io.Reader) (err error)

func (*ReplicateOK) UnmarshalDagJSON

func (t *ReplicateOK) UnmarshalDagJSON(r io.Reader) (err error)

type RetrieveArguments

type RetrieveArguments struct {
	Blob RetrieveBlob `cborgen:"blob" dagjsongen:"blob"`
}

RetrieveArguments is the argument shape of the `/blob/retrieve` capability — a service-level (not space-scoped) retrieval handle. Compare to `content.RetrieveArguments` which is space-scoped and carries a byte Range; the `/blob/retrieve` flow is consumed by service principals (e.g. the indexer) fetching content claims that aren't bound to any space.

func (*RetrieveArguments) MarshalCBOR

func (t *RetrieveArguments) MarshalCBOR(w io.Writer) error

func (*RetrieveArguments) MarshalDagJSON

func (t *RetrieveArguments) MarshalDagJSON(w io.Writer) error

func (*RetrieveArguments) UnmarshalCBOR

func (t *RetrieveArguments) UnmarshalCBOR(r io.Reader) (err error)

func (*RetrieveArguments) UnmarshalDagJSON

func (t *RetrieveArguments) UnmarshalDagJSON(r io.Reader) (err error)

type RetrieveBlob

type RetrieveBlob struct {
	Digest multihash.Multihash `cborgen:"digest" dagjsongen:"digest"`
}

RetrieveBlob identifies a blob solely by its content multihash. Used by the service-level `/blob/retrieve` capability where the caller is fetching data by hash without prior knowledge of the byte size.

func (*RetrieveBlob) MarshalCBOR

func (t *RetrieveBlob) MarshalCBOR(w io.Writer) error

func (*RetrieveBlob) MarshalDagJSON

func (t *RetrieveBlob) MarshalDagJSON(w io.Writer) error

func (*RetrieveBlob) UnmarshalCBOR

func (t *RetrieveBlob) UnmarshalCBOR(r io.Reader) (err error)

func (*RetrieveBlob) UnmarshalDagJSON

func (t *RetrieveBlob) UnmarshalDagJSON(r io.Reader) (err error)

type RetrieveOK

type RetrieveOK struct{}

RetrieveOK is the success return for `/blob/retrieve`. The blob bytes themselves are streamed back through the response container's body (the libforge HTTPHeader retrieval transport); the typed OK record is empty.

func (*RetrieveOK) MarshalCBOR

func (t *RetrieveOK) MarshalCBOR(w io.Writer) error

func (*RetrieveOK) MarshalDagJSON

func (t *RetrieveOK) MarshalDagJSON(w io.Writer) error

func (*RetrieveOK) UnmarshalCBOR

func (t *RetrieveOK) UnmarshalCBOR(r io.Reader) (err error)

func (*RetrieveOK) UnmarshalDagJSON

func (t *RetrieveOK) UnmarshalDagJSON(r io.Reader) (err error)

Directories

Path Synopsis
gen command

Jump to

Keyboard shortcuts

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