Skip to content
This repository has been archived by the owner on Jun 29, 2022. It is now read-only.

[WIP] dag-cbor: add a draft spec #73

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions formats/DagCBOR.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# DagCBOR Spec

The CBOR IPLD format is called DagCBOR to disambiguate it from regular CBOR.
Most CBOR objects are valid DagCBOR. The only hard restriction is that any field
with the tag 42 must be a valid CID.

## Link Format

As with all IPLD formats, DagCBOR must be able to encode merkle-links. In
DagCBOR, links are encoded using the raw-binary (identity, NUL) multibase in a
field with a byte-string type (major type 2), with the tag 42.

(the inclusion of the multibase exists for historical reasons)

## Map Key Restriction

In DagCBOR, map keys must be strings (TODO: drop this? We already have
unpathable map keys). Furthermore, map keys should avoid using `/` as this is
unpathable (TODO: drop this? IMO, we should support path escaping out of the
box).

## Canonical DagCBOR

Canonical DagCBOR should:

1. Use no tags other than the CID tag (42). Other tags may be lost in
conversion.
2. Should use the canonical CBOR encoding and field ordering. Other orderings
will yield different CIDs.
3. Should only use string map keys. Some implementations may not be able to
handle non-string keys.