Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Version Updates
Merging this PR will release new versions of the following packages based on your change files.
go-ipfs-sidecar
[0.10.0]
go-ipfs v0.10.0 Release
We're happy to announce go-ipfs 0.10.0. This release brings some big changes to the IPLD internals of go-ipfs that make working with non-UnixFS DAGs easier than ever. There are also a variety of new commands and configuration options available.
As usual, this release includes important fixes, some of which may be critical for security. Unless the fix addresses a bug being exploited in the wild, the fix will not be called out in the release notes. Please make sure to update ASAP. See our release process for details.
🛠 TLDR: BREAKING CHANGES
ipfs dag get
dag-json
dag-pb
objects returned bydag get
ipfs dag put
dag-json
, and data is serialized todag-cbor
at rest.--format
and--input-enc
were removed and replaced with--store-codec
and--input-codec
dag-pb
objects stored viadag put
Keep reading to learn more details.
🔦 Highlights
🌲 IPLD Levels Up
The handling of data serialization as well as many aspects of DAG traversal and pathing have been migrated from older libraries, including go-merkledag and go-ipld-format to the new go-ipld-prime library and its components. This allows us to use many of the newer tools afforded by go-ipld-prime, stricter and more uniform codec implementations, support for additional (pluggable) codecs, and some minor performance improvements.
This is significant refactor of a core component that touches many parts of IPFS, and does come with some breaking changes:
PluginIPLD
interface has been changed to utilize go-ipld-prime. There is a demonstration of the change in the bundled git plugin.dag put
anddag get
change:dag get
now takes theoutput-codec
option which accepts a multicodec name used to encode the output. By default this isdag-json
, which is a strict and deterministic subset of JSON created by the IPLD team. Users may notice differences from the previously plain Go JSON output, particularly where bytes are concerned which are now encoded using a form similar to CIDs:{"/":{"bytes":"unpadded-base64-bytes"}}
rather than the previously Go-specific plain padded base64 string. See the dag-json specification for an explanation of these forms.dag get
no longer prints an additional new-line character at the end of the encoded block output. This means that the output as presented bydag get
are the exact bytes of the requested node. A round-trip of such bytes back in throughdag put
using the same codec should result in the same CID.dag put
uses theinput-codec
option to specify the multicodec name of the format data is being provided in, and thestore-codec
option to specify the multicodec name of the format the data should be stored in at rest. These formerly defaulted tojson
andcbor
respectively. They now default todag-json
anddag-cbor
respectively but may be changed to any supported codec (bundled or loaded via plugin) by its multicodec name.json
andcbor
multicodec names (as used byinput-enc
andformat
options) are now no longer aliases fordag-json
anddag-cbor
respectively. Instead, they now refer to their proper multicodec types.cbor
refers to a plain CBOR format, which will not encode CIDs and does not have strict deterministic encoding rules.json
is a plain JSON format, which also won't encode CIDs and will encode bytes in the Go-specific padded base64 string format rather than the dag-json method of byte encoding. See https://ipld.io/specs/codecs/ for more information on IPLD codecs.protobuf
is no longer used as the codec name fordag-pb
raw
is used to mean Bytes in the IPLD Data Modeldag
API in a form that mirrors the protobuf schema used to define the binary format. This unifies the implementations and specification of dag-pb across the IPLD and IPFS stacks. Previously, additional layers of code for file and directory handling within IPFS between protobuf serialization and UnixFS obscured the protobuf representation. Much of this code has now been replaced and there are fewer layers of transformation. This means that interacting with dag-pb data via thedag
API will use different forms:dag get
on a dag-pb block would present the block serialized as JSON as{"data":"padded-base64-bytes","links":[{"Name":"foo","Size":100,"Cid":{"/":"Qm..."}},...]}
.{"Data":{"/":{"bytes":"unpadded-base64-bytes"}},"Links":[{"Name":"foo","Tsize":100,"Hash":{"/":"Qm..."}},...]}
. Aside from the change in byte formatting, most field names have changed:data
→Data
,links
→Links
,Size
→Tsize
,Cid
→Hash
. Note that this output can be changed now using theoutput-codec
option to specify an alternative codec.dag put
and astore-codec
option ofdag-pb
now requires that the input conform to this dag-pb specified form. Previously, input using{"data":"...","links":[...]}
was accepted, now it must be{"Data":"...","Links":[...]}
.dag get QmFoo/NamedLink
whereNamedLink
was one of the links whose name wasNamedLink
. This functionality remains the same, but by prefixing the path with/ipld/
we enter data model pathing semantics and candag get /ipld/QmFoo/Links/0/Hash
to navigate to links or/ipld/QmFoo/Data
to simply retrieve the data section of the node, for example.Ⓜ Multibase Command
go-ipfs now provides utility commands for working with multibase:
This release adds an
Internal
section to the configuration file that is designed to help advanced users optimize their setups without needing a custom binary. TheInternal
section is not guaranteed to be the same from release to release and may not be covered by migrations. If you use theInternal
section you should be making sure to check the config documentation between releases for any changes.🐚 Programmatic shell completions command
ipfs commands completion bash
will generate a bash completion script for go-ipfs commands📜 Profile collection command
Performance profiles can now be collected using
ipfs diag profile
. If you need to do some debugging or have an issue to submit the collected profiles are very useful to have around.🍎 Mac OS notarized binaries
The go-ipfs and related migration binaries (for both Intel and Apple Sillicon) are now signed and notarized to make Mac OS installation easier.
👨👩👦 Improved MDNS
There is a completed implementation of the revised libp2p MDNS spec. This should result in better MDNS discovery and better local/offline operation as a result.
🚗 CAR import statistics
dag import
command now supports--stats
option which will include the number of imported blocks and their total size in the output.🕸 Peering command
This release adds
swarm peering
command for easy management of the peering subsystem. Peer in the peering subsystem is maintained to be connected at all times, and gets reconnected on disconnect with a back-off.See
ipfs swarm peering --help
for more details.Changelog
Full Changelog
(ipld/go-ipld-prime#228)
go vet
happyIsFDCostlyTransport
(libp2p/go-addr-util#31)go vet
andsaticcheck
issues (libp2p/go-libp2p-testing#33)go generate
to generate the latest codecsContributors