dart_cid 0.1.0  dart_cid: ^0.1.0 copied to clipboard
dart_cid: ^0.1.0 copied to clipboard
A dart-lang implementation for creating self-describing content-addressed identifiers for distributed systems (CIDs).
dart_cid #
A dart implementation of
cid ("content id") = human-friendly
(readable/typeable) unique ID for distributed/decentralised systems.
Why π€· #
In a database that is distributed, creating IDs that reference records with virtually no risk of collision is a must. We need a standardized way of creating IDs for both the server and the client-side of our app, in an offline-first approach.
As we are using Flutter for developing our application, we needed a way to create these IDs using the Dart language.
What? π #
If you are a newbie when it comes to
cids and how they are applicable
to distributed scenarios,
we highly encourage you
to check the dwyl/cid
repo.
Although it was made for Elixir,
you can find more about real-life situations
of how these are used,
especially with IPFS.
And yes, it will answer the
obvious question of
Why are you not using UUIDs? π
How? π‘ #
Using this package is as easy as pie.
You just need an input string that will
be hashed and used to create a corresponding cid.
This cid will be, as the name implies,
the content identifier -
something that will identify that string.
Let's see it in action.
Installing #
Add the following to your
pubspec.yaml file, under dependencies.
dependencies:
  dart_cid: ^0.1.0
and run the following command to fetch the dependencies.
flutter pub get
Usage #
Creating a CID #
Now just call the createCid() function!
You may decide what
multibase
you want to use.
This library tries to support the official/default bases.
If you see one that's missing,
do open
an issue.
import 'package:dart_cid/dart_cid.dart';
String input = 'hello world';
final output = CID.createCid(input, Multibase.base58btc);
and you're done! π
You just created your own fancy cid!
Note
Every
cidgenerated with this package will use therawcodec and will be hashed using thesha2-258algorithm. You may choose which base you want to encode it as, though.
Decoding a CID #
If you're given a CID and you wish to decode it,
you can use the decodeCid() function.
CIDInfo cidInfo = decodeCid("some_cid");
This function will return an instance of CIDInfo,
holding relevant information of the provided CID.
Considerations #
The previous code snippet
will yield the following cid.
zb2rhj7crUKTQYRGCRATFaQ6YFLTde2YzdqbbhAASkL9uRDXn
We can use the
IPFS cid inspector
to see the information that is
hashed into the string.
Open https://cid.ipfs.tech/#zb2rhj7crUKTQYRGCRATFaQ6YFLTde2YzdqbbhAASkL9uRDXn and see it for yourself!

As you can see,
the cid contains leading identifiers
that clarify which representation is used,
along with the content-hash.
It includes:
- multibase
prefix which specifies the encoding of the cid.
- cidversion
- multicodec which indicates the format of the target content.
For more information about the format of
cids, check this link -> https://docs.ipfs.tech/concepts/content-addressing/#cid-versions
I need help! β #
If you have some feedback or have any question, do not hesitate and open an issue! We are here to help and are happy for your contribution!
License #
MIT