├── CNAME ├── _data └── statuses.yml ├── assets ├── cip-124 │ ├── cube.png │ ├── ring.png │ ├── gossip.gif │ ├── gossip.png │ ├── gossip1.png │ ├── gossip2.png │ ├── gossip3.png │ ├── gossip4.png │ ├── gossip5.png │ ├── gossip6.png │ ├── b_hash_tree.png │ ├── b_hash_tree_1.png │ ├── b_hash_tree_2.png │ └── merkle_search_tree.png ├── cip-145 │ ├── ex1.png │ ├── ex2.png │ ├── ex3.png │ ├── ex4.png │ ├── ex5.png │ └── lattice.png ├── cip-101 │ └── safe-did.png ├── cip-11 │ └── idx-example.png ├── general │ └── readme-banner.png └── cip-85 │ └── collection-graphic.png ├── .gitignore ├── index.html ├── _includes ├── discussion_links.html ├── cipnums.html ├── superseded_by.html ├── authorlist.html ├── ciptable.html ├── anchor_headings.html └── toc.html ├── tables ├── networkIds.csv └── streamtypes.csv ├── .github ├── ISSUE_TEMPLATE │ ├── config.yml │ └── bug-report.yml └── workflows │ └── pages.yml ├── 404.html ├── CIPs ├── cip-113.md ├── cip-2.md ├── cip-88.md ├── cip-59.md ├── cip-82.md ├── cip-21.md ├── cip-3.md ├── cip-1.md ├── cip-5.md ├── cip-110.md ├── cip-142.md ├── cip-120.md ├── cip-69.md ├── cip-101.md ├── cip-8.md ├── cip-146.md ├── cip-23.md ├── cip-71.md ├── cip-7.md ├── cip-94.md ├── cip-145.md ├── cip-19.md ├── cip-85.md ├── cip-20.md └── cip-79.md ├── LICENSE ├── README.md ├── Gemfile ├── _config.yml ├── Gemfile.lock ├── _layouts └── cip.html └── cip-template.md /CNAME: -------------------------------------------------------------------------------- 1 | chainagnostic.org 2 | -------------------------------------------------------------------------------- /_data/statuses.yml: -------------------------------------------------------------------------------- 1 | - Living 2 | - Final 3 | - Review 4 | - Draft 5 | - Withdrawn 6 | - Superseded 7 | -------------------------------------------------------------------------------- /assets/cip-124/cube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-124/cube.png -------------------------------------------------------------------------------- /assets/cip-124/ring.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-124/ring.png -------------------------------------------------------------------------------- /assets/cip-145/ex1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-145/ex1.png -------------------------------------------------------------------------------- /assets/cip-145/ex2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-145/ex2.png -------------------------------------------------------------------------------- /assets/cip-145/ex3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-145/ex3.png -------------------------------------------------------------------------------- /assets/cip-145/ex4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-145/ex4.png -------------------------------------------------------------------------------- /assets/cip-145/ex5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-145/ex5.png -------------------------------------------------------------------------------- /assets/cip-124/gossip.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-124/gossip.gif -------------------------------------------------------------------------------- /assets/cip-124/gossip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-124/gossip.png -------------------------------------------------------------------------------- /assets/cip-124/gossip1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-124/gossip1.png -------------------------------------------------------------------------------- /assets/cip-124/gossip2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-124/gossip2.png -------------------------------------------------------------------------------- /assets/cip-124/gossip3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-124/gossip3.png -------------------------------------------------------------------------------- /assets/cip-124/gossip4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-124/gossip4.png -------------------------------------------------------------------------------- /assets/cip-124/gossip5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-124/gossip5.png -------------------------------------------------------------------------------- /assets/cip-124/gossip6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-124/gossip6.png -------------------------------------------------------------------------------- /assets/cip-145/lattice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-145/lattice.png -------------------------------------------------------------------------------- /assets/cip-101/safe-did.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-101/safe-did.png -------------------------------------------------------------------------------- /assets/cip-11/idx-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-11/idx-example.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | _site 2 | .sass-cache 3 | .jekyll-cache 4 | .jekyll-metadata 5 | vendor 6 | .DS_Store 7 | cspell.json 8 | -------------------------------------------------------------------------------- /assets/cip-124/b_hash_tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-124/b_hash_tree.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Home 4 | --- 5 | 6 | {% include ciptable.html cips=site.pages %} 7 | -------------------------------------------------------------------------------- /assets/cip-124/b_hash_tree_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-124/b_hash_tree_1.png -------------------------------------------------------------------------------- /assets/cip-124/b_hash_tree_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-124/b_hash_tree_2.png -------------------------------------------------------------------------------- /assets/general/readme-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/general/readme-banner.png -------------------------------------------------------------------------------- /assets/cip-85/collection-graphic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-85/collection-graphic.png -------------------------------------------------------------------------------- /assets/cip-124/merkle_search_tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ceramicnetwork/CIPs/HEAD/assets/cip-124/merkle_search_tree.png -------------------------------------------------------------------------------- /_includes/discussion_links.html: -------------------------------------------------------------------------------- 1 | {% assign links=include.links|split:"," %} 2 | {% for link in links %} 3 | {{ link | strip | xml_escape }} 4 | {% endfor %} -------------------------------------------------------------------------------- /_includes/cipnums.html: -------------------------------------------------------------------------------- 1 | {% assign cips=include.cips|split:"," %} 2 | {% for num in cips %} 3 | {{num|strip}}{% if forloop.last == false %}, {% endif %} 4 | {% endfor %} 5 | -------------------------------------------------------------------------------- /tables/networkIds.csv: -------------------------------------------------------------------------------- 1 | name, code 2 | mainnet, 0x00 3 | testnet-clay, 0x01 4 | dev-unstable, 0x02 5 | inmemory, 0xFF 6 | local, 0x01_0000_0000 - 0x01_FFFF_FFFF 7 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Do you want to discuss CIP ideas or ask questions about the process? 4 | url: https://forum.ceramic.network/c/discussion-about-ceramic-improvement-proposals/ 5 | about: Use the Ceramic forum for CIP-related discussion! 6 | -------------------------------------------------------------------------------- /_includes/superseded_by.html: -------------------------------------------------------------------------------- 1 | {% assign cips=include.cips|split:"," %} 2 | {% for cip in cips %} 3 | {% if cip contains "https://" %} 4 | {{ cip | strip | xml_escape }} 5 | {% else %} 6 | {{cip|strip}} 7 | {% endif %} 8 | {% if forloop.last == false %}, {% endif %} 9 | {% endfor %} 10 | -------------------------------------------------------------------------------- /404.html: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: /404.html 3 | layout: default 4 | --- 5 | 6 | 19 | 20 |
21 |

404

22 | 23 |

Page not found :(

24 |

The requested page could not be found.

25 |
26 | -------------------------------------------------------------------------------- /_includes/authorlist.html: -------------------------------------------------------------------------------- 1 | {%- assign authors=include.authors|split:"," -%} 2 | {%- for author in authors -%} 3 | {%- if author contains "<" -%} 4 | {%- assign authorparts=author|split:"<" -%} 5 | "}}">{{authorparts[0]|strip}} 6 | {%- elsif author contains "(@" -%} 7 | {%- assign authorparts=author|split:"(@" -%} 8 | {{authorparts[0]|strip}} 9 | {%- else -%} 10 | {{author}} 11 | {%- endif -%} 12 | {% if forloop.last == false %}, {% endif %} 13 | {%- endfor -%} -------------------------------------------------------------------------------- /CIPs/cip-113.md: -------------------------------------------------------------------------------- 1 | --- 2 | cip: 113 3 | title: MutableList Streamtype 4 | author: Spencer T Brody (@stbrody), Mohsin Zaidi (@smrz2001), Sergey Ukustov (@ukstv), Joel Thorstensson (@oed) 5 | discussions-to: https://github.com/ceramicnetwork/CIP/issues/113 6 | status: Withdrawn 7 | category: RFC 8 | created: 2021-11-18 9 | edited: 2023-05-24 10 | --- 11 | 12 | ## Simple Summary 13 | 14 | Introduces a new StreamType, MutableList, that can store an ever-growing list of items, and provides logarithmic access and iteration for most common access patterns 15 | 16 | 17 | **This CIP is a work in progress. A rough draft of the proposal is available here: notion.so/threebox/MutableList-StreamType-41f5555c55514886b1acbf0c90af4adf** 18 | 19 | ## Copyright 20 | 21 | Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). 22 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug-report.yml: -------------------------------------------------------------------------------- 1 | name: Bug Report 2 | description: File a bug report about automations in this repo. 3 | labels: ['bug'] 4 | 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: Thanks for taking the time to fill out this bug report! 9 | - type: input 10 | id: pull-request 11 | attributes: 12 | label: Pull Request 13 | description: Link to the pull request where the issue occurred 14 | validations: 15 | required: false 16 | - type: textarea 17 | id: what-happened 18 | attributes: 19 | label: What happened? 20 | description: Also tell us, what did you expect to happen? 21 | placeholder: Tell us what you see! 22 | validations: 23 | required: true 24 | - type: textarea 25 | id: logs 26 | attributes: 27 | label: Relevant log output 28 | description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. Remove any PII if relevant. 29 | render: shell 30 | 31 | -------------------------------------------------------------------------------- /tables/streamtypes.csv: -------------------------------------------------------------------------------- 1 | name, code, description, specification 2 | Tile, 0x00, A stream type representing a json document, https://cips.ceramic.network/CIPs/cip-8 3 | CAIP-10 Link, 0x01, Link blockchain accounts to DIDs, https://cips.ceramic.network/CIPs/cip-7 4 | Model, 0x02, Defines a schema shared by group of documents in ComposeDB, https://github.com/ceramicnetwork/js-ceramic/tree/main/packages/stream-model 5 | Model Instance Document, 0x03, Represents a json document in ComposeDB, https://github.com/ceramicnetwork/js-ceramic/tree/main/packages/stream-model-instance 6 | UNLOADABLE, 0x04, A stream that is not meant to be loaded, https://github.com/ceramicnetwork/js-ceramic/blob/main/packages/stream-model/src/model.ts#L163-L165 7 | EventId, 0x05, An event id encoded as a cip-124 EventID, https://cips.ceramic.network/CIPs/cip-124 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Ceramic 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Readme Banner](assets/general/readme-banner.png) 2 | # Ceramic Improvement Proposals (CIPs) 3 | [![](https://img.shields.io/badge/Chat%20on-Discord-orange.svg?style=flat)](https://discord.gg/5CZzG7V) 4 | 5 | The goal of the Ceramic Improvement Proposals (CIPs) is to create standards and document improvements to Ceramic. This includes standards for the Ceramic platform, such as core protocol specifications, Ceramic APIs, and usage conventions such as streamtypes, and DID methods. 6 | 7 | 8 | # CIP Status Page 9 | On the [status page](https://cips.ceramic.network) an up to date list of CIPs and their statuses. 10 | 11 | 12 | # Contributing 13 | Before contributing consider discussing and validating your idea on the [Ceramic forum](https://forum.ceramic.network/) before creating a CIP. 14 | 15 | To create a new CIP simply follow these steps: 16 | 17 | 1. Review [CIP-1](https://cips.ceramic.network/CIPs/cip-1). 18 | 2. Fork the repository. 19 | 3. Add your CIP to your fork of the repository. There is a [template CIP here](https://github.com/ceramicnetwork/CIPs/blob/main/cip-template.md). 20 | 4. Submit a Pull Request. 21 | 22 | # Editors 23 | - Aaron Goldman ([@AaronGoldman](https://github.com/AaronGoldman)) 24 | - Michael Sena ([@michaelsena](http://github.com/michaelsena)) 25 | - Joel Thorstensson ([@oed](http://github.com/oed)) 26 | - Spencer T Brody ([@stbrody](http://github.com/stbrody)) 27 | 28 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | # Hello! This is where you manage which Jekyll version is used to run. 3 | # When you want to use a different version, change it below, save the 4 | # file and run `bundle install`. Run Jekyll with `bundle exec`, like so: 5 | # 6 | # bundle exec jekyll serve 7 | # 8 | # This will help ensure the proper Jekyll version is running. 9 | # Happy Jekylling! 10 | gem "jekyll", "~> 4.2.2" 11 | # This is the default theme for new Jekyll sites. You may change this to anything you like. 12 | gem "minima", "~> 2.5" 13 | # If you want to use GitHub Pages, remove the "gem "jekyll"" above and 14 | # uncomment the line below. To upgrade, run `bundle update github-pages`. 15 | # gem "github-pages", group: :jekyll_plugins 16 | # If you have any plugins, put them here! 17 | group :jekyll_plugins do 18 | gem "jekyll-feed", "~> 0.12" 19 | end 20 | 21 | # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem 22 | # and associated library. 23 | platforms :mingw, :x64_mingw, :mswin, :jruby do 24 | gem "tzinfo", "~> 1.2" 25 | gem "tzinfo-data" 26 | end 27 | 28 | # Performance-booster for watching directories on Windows 29 | gem "wdm", "~> 0.1.1", :platforms => [:mingw, :x64_mingw, :mswin] 30 | 31 | # Lock `http_parser.rb` gem to `v0.6.x` on JRuby builds since newer versions of the gem 32 | # do not have a Java counterpart. 33 | gem "http_parser.rb", "~> 0.6.0", :platforms => [:jruby] 34 | -------------------------------------------------------------------------------- /_includes/ciptable.html: -------------------------------------------------------------------------------- 1 | 10 | {% for status in site.data.statuses %} 11 | {% assign cips = include.cips|where:"status",status|sort:"cip" %} 12 | {% assign count = cips|size %} 13 | {% if count > 0 %} 14 |

{{status}}

15 | 16 | 17 | {% if status == "Last Call" %} 18 | 19 | 20 | {% else %} 21 | 22 | {% endif %} 23 | 24 | {% for page in cips %} 25 | 26 | 27 | {% if status == "Last Call" and page.last-call-deadline != undefined %} 28 | 29 | {% endif %} 30 | 31 | 32 | 33 | {% endfor %} 34 |
NumberReview endsTitleAuthor
NumberTitleAuthor
{{page.cip|xml_escape}}{{ page.last-call-deadline | xml_escape }}{{page.title|xml_escape}}{% include authorlist.html authors=page.author %}
35 | {% endif %} 36 | {% endfor %} 37 | -------------------------------------------------------------------------------- /CIPs/cip-2.md: -------------------------------------------------------------------------------- 1 | --- 2 | cip: 2 3 | title: Ceramic Community Discord 4 | author: Michael Sena (@michaelsena) 5 | discussions-to: https://github.com/ceramicnetwork/CIP/issues/39 6 | status: Final 7 | category: Meta 8 | created: 2020-06-14 9 | edited: 2020-06-14 10 | --- 11 | 12 | ## Simple Summary 13 | 14 | This proposes Discord as a platform for fast-paced conversations about the Ceramic network. 15 | 16 | ## Abstract 17 | 18 | The Ceramic community needs a place where people can join to discuss things related to Ceramic. 19 | 20 | ## Motivation 21 | 22 | As an open source, decentralized protocol, it is important for Ceramic to have an open forum for community engagement. Discord provides a nice way to do that and is something many members of the web3 community are familiar with using. Unlike Slack, Discord has a nice identity model that doesn't require users creating new identities/logins for each community they join. 23 | 24 | ## Implementation 25 | 26 | **Join Discord:** Join the Ceramic Network Discord [here](https://discord.gg/6VRZpGP). 27 | 28 | ## Copyright 29 | Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). 30 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | # Welcome to Jekyll! 2 | # 3 | # This config file is meant for settings that affect your whole blog, values 4 | # which you are expected to set up once and rarely edit after that. If you find 5 | # yourself editing this file very often, consider using Jekyll's data files 6 | # feature for the data you need to update frequently. 7 | # 8 | # For technical reasons, this file is *NOT* reloaded automatically when you use 9 | # 'bundle exec jekyll serve'. If you change this file, please restart the server process. 10 | # 11 | # If you need help with YAML syntax, here are some quick references for you: 12 | # https://learn-the-web.algonquindesign.ca/topics/markdown-yaml-cheat-sheet/#yaml 13 | # https://learnxinyminutes.com/docs/yaml/ 14 | # 15 | # Site settings 16 | # These are used to personalize your new site. If you look in the HTML files, 17 | # you will see them accessed via {{ site.title }}, {{ site.email }}, and so on. 18 | # You can create any custom variable you would like, and they will be accessible 19 | # in the templates via {{ site.myvariable }}. 20 | 21 | title: Ceramic Improvement Proposals 22 | description: >- # this means to ignore newlines until "baseurl:" 23 | Protocol improvements and standards for Ceramic. 24 | url: "https://cips.ceramic.network" 25 | repository: ceramicnetwork/CIPs 26 | twitter_username: ceramicnetwork 27 | github_username: ceramicnetwork 28 | 29 | 30 | header_pages: 31 | - index.html 32 | 33 | # Build settings 34 | theme: minima 35 | highlighter: rouge 36 | markdown: kramdown 37 | plugins: 38 | - jekyll-feed 39 | 40 | permalink: /:slug 41 | 42 | defaults: 43 | - scope: 44 | path: "CIPs" 45 | values: 46 | layout: "cip" 47 | 48 | exclude: 49 | - cip-template.md 50 | -------------------------------------------------------------------------------- /.github/workflows/pages.yml: -------------------------------------------------------------------------------- 1 | # This workflow uses actions that are not certified by GitHub. 2 | # They are provided by a third-party and are governed by 3 | # separate terms of service, privacy policy, and support 4 | # documentation. 5 | 6 | # Sample workflow for building and deploying a Jekyll site to GitHub Pages 7 | name: Deploy Jekyll site to Pages 8 | 9 | on: 10 | # Runs on pushes targeting the default branch 11 | push: 12 | branches: ["main"] 13 | 14 | # Allows you to run this workflow manually from the Actions tab 15 | workflow_dispatch: 16 | 17 | # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages 18 | permissions: 19 | contents: read 20 | pages: write 21 | id-token: write 22 | 23 | # Allow one concurrent deployment 24 | concurrency: 25 | group: "pages" 26 | cancel-in-progress: true 27 | 28 | jobs: 29 | # Build job 30 | build: 31 | runs-on: ubuntu-latest 32 | steps: 33 | - name: Checkout 34 | uses: actions/checkout@v3 35 | - name: Setup Ruby 36 | uses: ruby/setup-ruby@0a29871fe2b0200a17a4497bae54fe5df0d973aa # v1.115.3 37 | with: 38 | ruby-version: '2.6' # Not needed with a .ruby-version file 39 | bundler-cache: true # runs 'bundle install' and caches installed gems automatically 40 | cache-version: 1 # Increment this number if you need to re-download cached gems 41 | - name: Setup Pages 42 | id: pages 43 | uses: actions/configure-pages@v2 44 | - name: Build with Jekyll 45 | # Outputs to the './_site' directory by default 46 | run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}" --trace 47 | env: 48 | JEKYLL_ENV: production 49 | - name: Upload artifact 50 | # Automatically uploads an artifact from the './_site' directory by default 51 | uses: actions/upload-pages-artifact@v1 52 | 53 | # Deployment job 54 | deploy: 55 | environment: 56 | name: github-pages 57 | url: ${{ steps.deployment.outputs.page_url }} 58 | runs-on: ubuntu-latest 59 | needs: build 60 | steps: 61 | - name: Deploy to GitHub Pages 62 | id: deployment 63 | uses: actions/deploy-pages@v1 64 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | addressable (2.8.1) 5 | public_suffix (>= 2.0.2, < 6.0) 6 | colorator (1.1.0) 7 | concurrent-ruby (1.1.10) 8 | em-websocket (0.5.3) 9 | eventmachine (>= 0.12.9) 10 | http_parser.rb (~> 0) 11 | eventmachine (1.2.7) 12 | ffi (1.15.5) 13 | forwardable-extended (2.6.0) 14 | http_parser.rb (0.8.0) 15 | i18n (1.12.0) 16 | concurrent-ruby (~> 1.0) 17 | jekyll (4.2.2) 18 | addressable (~> 2.4) 19 | colorator (~> 1.0) 20 | em-websocket (~> 0.5) 21 | i18n (~> 1.0) 22 | jekyll-sass-converter (~> 2.0) 23 | jekyll-watch (~> 2.0) 24 | kramdown (~> 2.3) 25 | kramdown-parser-gfm (~> 1.0) 26 | liquid (~> 4.0) 27 | mercenary (~> 0.4.0) 28 | pathutil (~> 0.9) 29 | rouge (~> 3.0) 30 | safe_yaml (~> 1.0) 31 | terminal-table (~> 2.0) 32 | jekyll-feed (0.16.0) 33 | jekyll (>= 3.7, < 5.0) 34 | jekyll-sass-converter (2.2.0) 35 | sassc (> 2.0.1, < 3.0) 36 | jekyll-seo-tag (2.8.0) 37 | jekyll (>= 3.8, < 5.0) 38 | jekyll-watch (2.2.1) 39 | listen (~> 3.0) 40 | kramdown (2.4.0) 41 | rexml 42 | kramdown-parser-gfm (1.1.0) 43 | kramdown (~> 2.0) 44 | liquid (4.0.3) 45 | listen (3.7.1) 46 | rb-fsevent (~> 0.10, >= 0.10.3) 47 | rb-inotify (~> 0.9, >= 0.9.10) 48 | mercenary (0.4.0) 49 | minima (2.5.1) 50 | jekyll (>= 3.5, < 5.0) 51 | jekyll-feed (~> 0.9) 52 | jekyll-seo-tag (~> 2.1) 53 | pathutil (0.16.2) 54 | forwardable-extended (~> 2.6) 55 | public_suffix (5.0.0) 56 | rb-fsevent (0.11.2) 57 | rb-inotify (0.10.1) 58 | ffi (~> 1.0) 59 | rexml (3.2.5) 60 | rouge (3.30.0) 61 | safe_yaml (1.0.5) 62 | sassc (2.4.0) 63 | ffi (~> 1.9) 64 | terminal-table (2.0.0) 65 | unicode-display_width (~> 1.1, >= 1.1.1) 66 | unicode-display_width (1.8.0) 67 | 68 | PLATFORMS 69 | universal-darwin-21 70 | x86_64-linux 71 | 72 | DEPENDENCIES 73 | http_parser.rb (~> 0.6.0) 74 | jekyll (~> 4.2.2) 75 | jekyll-feed (~> 0.12) 76 | minima (~> 2.5) 77 | tzinfo (~> 1.2) 78 | tzinfo-data 79 | wdm (~> 0.1.1) 80 | 81 | BUNDLED WITH 82 | 2.3.24 83 | -------------------------------------------------------------------------------- /CIPs/cip-88.md: -------------------------------------------------------------------------------- 1 | --- 2 | cip: 88 3 | title: Ceramic namespace in JSON schemas 4 | author: Paul Le Cam (@PaulLeCam) 5 | status: Withdrawn 6 | category: RFC 7 | created: 2021-03-01 8 | edited: 2023-05-24 9 | --- 10 | 11 | ## Simple Summary 12 | 13 | Define a standard extension point for Ceramic-specific metadata in a JSON schema. 14 | 15 | ## Abstract 16 | 17 | This CIP defines a reserved namespace for Ceramic-specific metadata in a JSON schema, along with a reference table for standard uses of this namespace. 18 | 19 | ## Motivation 20 | 21 | As commented in https://github.com/ceramicnetwork/CIP/issues/82#issuecomment-787449788 the `$id` cannot be used to define Ceramic-specific extensions as intended in [CIP-82](https://github.com/ceramicnetwork/CIP/blob/main/CIPs/CIP-82/CIP-82.md). 22 | 23 | A previous version of this CIP relied on creating a custom namespace for Ceramic-specific metadata using the non-standard `$ceramic` key, but it was not compatible with the "strict mode" of the JSON validation library used in Ceramic (AJV). 24 | Instead, this CIP relies on the `$comment` field that is supported by AJV's strict mode. 25 | 26 | ## Specification 27 | 28 | ### Namespace 29 | 30 | A JSON schema property can contain a `$comment` field, that must be a string starting with `cip88:`: 31 | 32 | ```js 33 | { 34 | type: 'string', 35 | maxLength: 150, 36 | $comment: 'ceramic:ref:', 37 | } 38 | ``` 39 | 40 | ### Reference table 41 | 42 | | Type | CIP | Status | 43 | | ------------------ | -------------------------------------------------------------------------------------------------------- | ------ | 44 | | `ref` | [StreamID json-schema definition](https://github.com/ceramicnetwork/CIP/blob/main/CIPs/CIP-82/CIP-82.md) | Draft | 45 | | `appendCollection` | [AppendCollection schemas](https://github.com/ceramicnetwork/CIP/blob/main/CIPs/CIP-85/CIP-85.md) | Draft | 46 | | `collectionSlice` | [AppendCollection schemas](https://github.com/ceramicnetwork/CIP/blob/main/CIPs/CIP-85/CIP-85.md) | Draft | 47 | 48 | ## Rationale 49 | 50 | Using the `$comment` property allows to add a metadata string to a schema in a spec-compliant way (compatible with AJV's strict mode). 51 | 52 | The string value must match the following pattern: `cip88:[type-specific string]`. 53 | 54 | A unique `type`, possibly followed by an additional type-specific string, should make it easy to add custom extensions and build tools based on having the `$comment` value start with `cip88:`. 55 | 56 | Finally, providing a reference table in this CIP should allow for easy discovery and avoid conflicts between extensions. 57 | 58 | ## Backwards Compatibility 59 | 60 | [CIP-82](https://github.com/ceramicnetwork/CIP/blob/main/CIPs/CIP-82/CIP-82.md) and [CIP-85](https://github.com/ceramicnetwork/CIP/pull/85) are updated to this new format. 61 | 62 | ## Implementation 63 | 64 | None yet. 65 | 66 | ## Security Considerations 67 | 68 | None I'm aware of. 69 | 70 | ## Copyright 71 | 72 | Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). 73 | -------------------------------------------------------------------------------- /CIPs/cip-59.md: -------------------------------------------------------------------------------- 1 | --- 2 | cip: 59 3 | title: StreamID encoding 4 | author: Joel Thorstensson (@oed) 5 | discussions-to: https://github.com/ceramicnetwork/CIP/issues/59 6 | status: Final 7 | category: Core 8 | created: 2020-08-12 9 | edited: 2020-09-24 10 | --- 11 | 12 | ## Simple Summary 13 | 14 | Specification for how to encode a Stream Id (StreamID) 15 | 16 | 17 | ## Abstract 18 | A StreamID is composed of a streamid-multicodec, a stream type varint, and a CID. 19 | 20 | 21 | ## Motivation 22 | A specific encoding for StreamIDs allows us to distinguish them from CIDs as well as provide more information about the given stream. CommitIDs are a subset of a StreamID which refers to a specific commit in a stream. 23 | 24 | 25 | ## Specification 26 | #### StreamID 27 | 28 | StreamIDs are defined as: 29 | 30 | ```html 31 | ::= 32 | 33 | # e.g. using CIDv1 34 | ::= 35 | ``` 36 | 37 | Where 38 | 39 | - `` is a [multibase](https://github.com/multiformats/multibase) code (1 or 2 bytes), to ease encoding StreamIDs into various bases. **NOTE:** *Binary* (not text-based) protocols and formats may omit the multibase prefix when the encoding is unambiguous. 40 | - `` is a [multicodec](https://github.com/multiformats/multicodec) used to indicate that it's a StreamID. 41 | - `` is a [varint](https://github.com/multiformats/unsigned-varint) representing the stream type of the stream. 42 | - `` is the bytes from the [CID](https://github.com/multiformats/cid) of the *genesis record*, stripped of the multibase prefix. 43 | 44 | #### CommitID 45 | 46 | The CommitID adds some additional information at the end. If it represents the genesis commit the zero byte is added (`0x00`) otherwise the CID that represents the commit is added. 47 | 48 | CommitIDs are defined as: 49 | 50 | ```html 51 | ::= 52 | 53 | # e.g. using CIDv1 and representing the genesis commit 54 | ::= <0x00> 55 | 56 | # e.g. using CIDv1 and representing the an arbitrary commit in the log 57 | ::= 58 | 59 | ``` 60 | 61 | Where 62 | 63 | - `` is either the zero byte (`0x00`) or a [CID](https://github.com/multiformats/cid). 64 | 65 | ### StreamID multicodec 66 | The multicodec for StreamID is `0xce` 67 | 68 | ### Recommendations 69 | For compatibility with browser urls it's recommended to encode the StreamID using [`base36`](https://github.com/multiformats/multibase). 70 | 71 | ### Registered values 72 | Using the table linked below stream types can be be publicly registered by submitting a new CIP that adds it to the table. 73 | 74 | * [StreamType table](../tables/streamtypes.csv) 75 | 76 | ## Rationale 77 | A Ceramic stream can be identified using the CID of the *genesis commit* of the event log, as well as the stream type of the stream. Using the StreamID a Ceramic node can query the network for the latest *tip* of the stream. 78 | 79 | By having the stream type in the StreamID, Ceramic implementations can be optimize to use the correct stream type handler before needing to sync parts of the event log. 80 | 81 | 82 | ## Backwards Compatibility 83 | Previously testnet versions of Ceramic has been using CIDs to represent StreamIDs. This is a breaking change to only allow the StreamID format specified above. 84 | 85 | 86 | ## Implementation 87 | * [js-ceramic](https://github.com/ceramicnetwork/js-ceramic) 88 | 89 | 90 | ## Copyright 91 | Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). 92 | -------------------------------------------------------------------------------- /CIPs/cip-82.md: -------------------------------------------------------------------------------- 1 | --- 2 | cip: 82 3 | title: StreamID json-schema definition 4 | author: Paul Le Cam (@PaulLeCam) 5 | discussions-to: https://github.com/ceramicnetwork/CIP/issues/82 6 | status: Withdrawn 7 | category: RFC 8 | created: 2021-02-15 9 | edited: 2023-05-24 10 | requires: 88 11 | --- 12 | 13 | ## Simple Summary 14 | 15 | Provide a static way to define a string in a JSON schema represents a Ceramic StreamID, optionally with static references to the schema(s) that must be used by the referenced stream. 16 | 17 | ## Abstract 18 | 19 | This CIP defines a standard way to add a reference to an existing Ceramic stream in a JSON schema and references to existing JSON schemas, so it is possible to access this information about Ceramic streams at build time rather than only at runtime on created streams. 20 | 21 | ## Motivation 22 | 23 | It is sometimes necessary to reference Ceramic streams from other streams, such as a list containing the streamIDs of individual Ceramic streams. 24 | Currently, we are sometimes using definitions that can be referenced in a schema using `"$ref": "#/definitions/CeramicDocId"` for example, but this has not be defined as a standard. 25 | Using local definitions to a schema also has the downside of providing no guaranty of being unique or having the definition matching any standard. 26 | 27 | Furthermore, IDX definitions contain a `schema` property that references an existing schema, guarantying the IDX record associated to the definition matches this schema. 28 | This CIP provides a way to implement similar logic for any schema independently of IDX. 29 | 30 | Using this CIP, a `NotesList` schema could explicitly reference a `Note` schema with the following example: 31 | 32 | ``` 33 | { 34 | $schema: 'http://json-schema.org/draft-07/schema#', 35 | title: 'Notes', 36 | type: 'object', 37 | properties: { 38 | notes: { 39 | type: 'array', 40 | title: 'list', 41 | items: { 42 | type: 'object', 43 | title: 'item', 44 | properties: { 45 | note: { $ref: '#/definitions/NoteDocID' }, 46 | title: { 47 | type: 'string', 48 | maxLength: 100, 49 | }, 50 | }, 51 | required: ['note'], 52 | }, 53 | }, 54 | }, 55 | definitions: { 56 | NoteDocID: { 57 | type: 'string', 58 | maxLength: 150, 59 | $comment: 'cip88:ref:', 60 | }, 61 | }, 62 | } 63 | ``` 64 | 65 | This way, by loading the `Notes` schema, it is possible by a tool/library to discover the `Note` schema the same way loading a IDX definition allows the discovery of the record's schema. 66 | 67 | ## Specification 68 | 69 | References to Ceramic schema should use a `string` with the `$comment` field using the `cip88:ref` type, and optionally with a schema string of the StreamID (implicit reference to latest version) or CommitID (specific version) of the supported schema(s). 70 | Multiple schemas can be provided, using the `|` character as separator. 71 | 72 | ```js 73 | { 74 | type: 'string', 75 | maxLength: 150, 76 | $comment: 'cip88:ref:', 77 | } 78 | ``` 79 | 80 | ## Rationale 81 | 82 | This CIP uses the `$comment` field as defined in [CIP-88](https://github.com/ceramicnetwork/CIP/blob/main/CIPs/CIP-88/CIP-88.md). 83 | 84 | This spec allows to either define a single schema or multiple ones sparated by the `|` character. 85 | The use case would be to support different schemas for a single reference, for example a "media" schema could reference an "image" schema, but also the "audio" and "video" ones as acceptable document schemas: `$comment: 'cip88:ref:|