ICRC-3 Draft v2 and Next Steps

My understanding is that the binary representation of candid is NOT guaranteed. It may change from spec to spec.

I don’t think the binary format will change. We may add some more types in the future, but it won’t change the existing format. However, the binary representation of a fixed value is not unique, different implementations can get different raw bytes. So we cannot compute hash based on the binary data.

In Rust, we have a IDLValue type which allows to decode the binary data directly without using the subtyping rule. The variant is roughly equivalent to the Value type defined here. But manipulating a generic value like IDLValue/Value is always verbose and inconvenient. Ideally, we can convert the generic value into something native in the host language, which can make access the data easier.