package ledger import ( "context" "errors" "fmt" "github.com/carlosframework/platform/internal/release" ) func claimRawPutBlob(ctx context.Context, st release.Store, sqid, app, name string, body []byte) (string, error) { if !ValidName(name) { return "", fmt.Errorf("ledger: invalid ledger name %q", name) } if len(body) > MaxBlob { return "", fmt.Errorf("ledger: blob %d bytes exceeds cap %d", len(body), MaxBlob) } sha := SHA256Hex(body) if _, err := st.Put(ctx, BlobKey(sqid, app, name, sha), body, ""); err != nil { // Content-addressed: an existing object with this key IS this // content. A create-only conflict means it's already there. if errors.Is(err, release.ErrCASConflict) { return sha, nil } return "", err } return sha, nil }