Usage¶
Working with CIDv0¶
>>> from cid import make_cid, CIDv0
>>> # you can use a base58-encoded hash to create a CIDv0
>>> make_cid('QmaozNR7DZHQK1ZcU9p7QdrshMvXqWK6gpu5rmrkPdT3L4')
CIDv0(version=0, codec=dag-pb, multihash=b"\x12 \xb9M'..")
>>> # or you can provide an encoded CID string to create a new object
>>> cid = CIDv0('<base58 encoded hash>')
>>> # you can encode() a CID to get its string form for transmission
>>> cid.encode()
b'FFkvz99YBscguy5gspNsvf'
>>> # you can use this string representation to create a CID object as well
>>> make_cid(cid.encode())
CIDv0(version=0, codec=dag-pb, multihash=b'<base58 encoded hash>')
>>> # make_cid works with both str and bytes
>>> make_cid(b'QmaozNR7DZHQK1ZcU9p7QdrshMvXqWK6gpu5rmrkPdT3L4')
CIDv0(version=0, codec=dag-pb, multihash=b"\x12 \xb9M'..")
Working with CIDv1¶
>>> from cid import make_cid, CIDv1
>>> # you have to provide a multibase-encoded hash to create a CIDv1 object
>>> make_cid('zdj7WhuEjrB52m1BisYCtmjH1hSKa7yZ3jEZ9JcXaFRD51wVz')
CIDv1(version=1, codec=dag-pb, multihash=b"\x12 \xb9M'..")
>>> # or you can provide a multihash directly
>>> cid = CIDv1('dag-pb', '<multihash>')
CIDv1(version=1, codec=dag-pb, multihash=b'<multihash>')
>>> # you can encode the CID to get its string form
>>> cid.encode()
b'z7x3CtScH765HvShXT'
>>> # CIDv1 also supports multiple encodings, with the help of `py-multibase` package
>>> cid.encode('base64'), cid.encode('base8')
(b'mBcDxtdWx0aWhhc2g+', b'7134036155352661643226414134664076')
>>> # CIDv1 also supports make_cid with encoded CID strings
>>> make_cid(cid.encode('base64'))
CIDv1(version=1, codec=dag-pb, multihash=b'<multihash>')
Note
codec
provided to make_cid
should be a valid multicodec
codec, supported by py-multicodec
library.
Different encodings for CIDv1().encode(encoding)
is provided by py-multibase
library.
Converting between versions¶
>>> # you can convert a CIDv0 object to a CIDv1 object
>>> CIDv0('<multihash>').to_v1()
CIDv1(version=1, codec=dag-pb, multihash=b'<multihash>')
>>> # you can convert a CIDv1 object to a CIDv0 object as well
>>> CIDv1('dag-pb', '<multihash>').to_v0()
CIDv0(version=0, codec=dag-pb, multihash=b'<some randome hash>')
Warning
You can only convert a CIDv1
object to CIDv0
object if its codec is dag-pb
, otherwise conversion is not
possible
Likewise, when you convert a CIDv0
object to CIDv1
, its codec will be set to dag-pb
Equality across versions¶
>>> # equality will only work across same versions, two CIDs are different if their versions are different
>>> CIDv0('<multihash>') == CIDv1('dag-pb', '<multihash>').to_v0()
True
>>> CIDv0('<multihash>').to_v1() == CIDv1('dag-pb', '<multihash>')
True
>>> CIDv0('<multihash>') != CIDv1('dag-pb', '<multihash>')
True