Autocodec Self-Decoding Graphs

High Level Pure Functions FTW

High Level Why?

High Level Why? Dynamically load codecs Instantly discoverable, travels with data Content signalling

High Level Blob vs DSL

High Level Blob vs DSL Content addressed Wasm blob Alternate: schema More “correct” via DSL, but would likely be extremely complex “Worse is better” Adoptable, familiar Easy tooling “Do exactly what I mean” Openly extensible

Layout Options

Layout Options Direct Optional Field Bytes Codec Links Bytes Codec Links Bytes Codec Links

Layout Options Direct Optional Field Bytes Codec Links Compact (Bitswap friendly) Deep linking intact Redundancy (space) Bytes Codec Links Bytes Codec Links

Layout Options Wrap DAG Entry Points Bytes Links AC Wrapper Bytes Links Bytes Links AC Wrapper Bytes Links

Layout Options Wrap DAG Entry Points Bytes Links More nodes (deeper graphs) AC Wrapper Potentially Byzantine (stacked wrappers) Have to be careful to wrap all nodes Breaks all existing codecs… but the Wasm will fix that Bytes Links Bytes Links AC Wrapper Bytes Links

Layout Options Self-Describing AC Wrapper ABI Metadata

Layout Options Self-Describing All interfaces via Wasm ABI AC Wrapper MUST include raw IPLD decoder (e.g. from DAG-CBOR) MUST include one or more codecs, with a default MAY include transversal functions for output type ABI Metadata

Layout Options Execution & Bounding

Layout Options Execution & Bounding MUST terminate Gas or timeout or AOT cost dynamics (probably gas)

Mutation Who Encodes the Encoders?

Mutation Adaptive Optimization AC Wrapper

Mutation Adaptive Optimization Either signalling method is “just” a tag Don’t have to execute exactly this Wasm blob AC Wrapper

Mutation Adaptive Optimization Either signalling method is “just” a tag Don’t have to execute exactly this Wasm blob AC Wrapper

Mutation Adaptive Optimization Either signalling method is “just” a tag Don’t have to execute exactly this Wasm blob AC Wrapper 🚀

Mutation In Place Upgrades & Fixes …why? Deterministic codec: check it Wrong layer: just replace 🤷 If you REALLY want to… Convention (detect and replace) Back to AOT loading Discourages updates 👍+👎 Mutable pointer (e.g. IPNS) How often to check? Malicious updates?

Mutation In Place Upgrades & Fixes …why? Deterministic codec: check it Wrong layer: just replace 🤷 If you REALLY want to… Convention (detect and replace) Back to AOT loading Discourages updates 👍+👎 Mutable pointer (e.g. IPNS) How often to check? Malicious updates?

Mutation In Place Upgrades & Fixes …why? Deterministic codec: check it Wrong layer: just replace 🤷 If you REALLY want to… Convention (detect and replace) Back to AOT loading Discourages updates 👍+👎 Mutable pointer (e.g. IPNS) How often to check? Malicious updates? AC Wrapper

Mutation In Place Upgrades & Fixes …why? Deterministic codec: check it Wrong layer: just replace 🤷 If you REALLY want to… Convention (detect and replace) Back to AOT loading Discourages updates 👍+👎 Mutable pointer (e.g. IPNS) How often to check? Malicious updates? AC Wrapper 🥚🐣🐥

Mutation In Place Upgrades & Fixes …why? Deterministic codec: check it Wrong layer: just replace 🤷 If you REALLY want to… Convention (detect and replace) Back to AOT loading Discourages updates 👍+👎 Mutable pointer (e.g. IPNS) How often to check? Malicious updates? AC Wrapper 🥚 🐣 🐥🍗

Wrap Up 🎁

Wrap Up Summary

Wrap Up Summary Highly extensible Dynamic Concrete Pure function Optimizable

🎉 Thank You, IPFS þing 🇮🇸 https://fission.codes brooklyn@fission.codes @expede