MEDIACHAIN

An open data network for creative works

on IPFS

(soon)

An increasingly centralized internet has stifled innovation 

                              and created problems for publishing, discovery, attribution, and monetization of media.

Platform network effects are impossible to compete with 

Creator identity divorced from works

Even open data still siloed

Solution: a protocol for publishing, discovering, and reusing media metadata

L-SPACE

reference (centralized) implementation

Participants make Statements about a work

Statements

by: Pablo Picasso
title: Bull
year: 1958

-Love, MoMA

can be derived from existing metadata through Translators

Statements

signed with the participant's keypair

Statements

form a tree(-ish)

Statements

walked to form a complete picture

Tree

title: Horse and Barge,
artist: David Cox

-Tate
title: Horse and Barge,
artist: ???,
year: 1820

-MoMA
title: Horse and Barge,
artist: David Cox,
year: 1820

anyone can contribute, but untrusted statements discarded at read time

Tree

title: Horse and Barge,
artist: David Cox

-Tate
title: Horse and Barge,
artist: ???,
year: 1820

-MoMA
title: Horse and Barge,
artist: David Cox,
year: 1820
title: I Like Cheese

-Donald Trump

Mediachain <3 IPFS

IPLD = Graph DB

@link
@link
@link
@link
@link
@link
ipns://
IPFS
IPFS
IPLD
IPLD
IPLD

(all shown IPLD syntax to be considered schematic/experimental)

Vertices

ImageBlob
Person
RawMetadataBlob

Vertices

{
  "sourcedFrom": {
    "@link": "QmeP3JJgXunsiVKZ4ffd7tgbXEZjtMg5f2eLjC9cRYvLBc"
  },
  "author": {
    "@link": "QmbTcS3DuahG3npWbkmnND2XGFkoPBmTeFr9TgCemnnh8s"
  },
  "title": "Horse and Barge",
  "thumbnail": {
    "@link": "QmZozKTkUGUTsV94MbNLrezyF8ep5kn8ifZmt7w3r2Pn3W"
  },
  "signed": {
    "publicKeyId": "+tate",
    "signature": "87604ba565dd4ad6452640463605f0f5"
  }
}

ImageBlob

Vertices

{
    "name": "David Cox",
    "passname": "+davidcox"
}

Person

Vertices

{
  "acno": "A00169",
  "acquisitionYear": 1927,
  "classification": "on paper, unique",
  "contributors": [
    {
      "birthYear": 1783,
      "date": "1783–1859",
      "fc": "David Cox",
      "id": 117,
      "role": "artist"
    }
  ],
  "creditLine": "Bequeathed by J.R. Holliday 1927",
  "dateText": "date not known",
  "id": 2858,
  "medium": "Watercolour on paper. Verso: graphite on paper",
  "thumbnailUrl": "http://www.tate.org.uk/art/images/work/A/A00/A00169_8.jpg",
  "title": "Horse and Barge"
}

RawMetadataBlob (raw JSON text)

Root

Mutable, signed pointer for merges

Root

Exactly equivalent to IPNS!

ipns://QmXSyBgdatMpHnPmP...
ipfs://QmbTcS3DuahG3npWb...

Edges

Preserve

Transpose

or

parent
parent
child
child

Preserve direction

Preserve direction

{
  "sourcedFrom": {
    "@link": "QmeP3JJgXunsiVKZ4f..."
  },
  "author": {
    "@link": "QmbTcS3DuahG3npWbkmn..."
  },
  "title": "Horse and Barge",
  "thumbnail": {
    "@link": "QmZozKTkUGUTsV94MbNL..."
  },
  "signed": {
    "publicKeyId": "+tate",
    "signature": "17363ad405d98f3..."
  },
  "modifiedBy": {
    "@link": "QmbmtAMrHNjHypZuzaHAY..."
  }
}
{
  "sourcedFrom": {
    "@link": "QmPoWhsvGJ5w9f4Z4x6q..."
  },
  "author": {
    "@link": "QmbTcS3DuahG3npWbkmnN..."
  },
  "title": "Horse and Barge",
  "pubDate": "1820",
  "signed": {
    "publicKeyId": "+moma",
    "signature": "b5804628cdad90..."
  }
}

Parent

Child

QmbmtAMrHNjHypZuzaHAY...

Traversable

Traverse root to leaves as with normal graph

No append

Parent hash depends on all children so must write entire tree at once

Transpose

(only applies to modifiedBy relationship)

modifying

{
  "sourcedFrom": {
    "@link": "QmeP3JJgXunsiVKZ4..."
  },
  "author": {
    "@link": "QmbTcS3DuahG3npWb..."
  },
  "title": "Horse and Barge",
  "thumbnail": {
    "@link": "QmZozKTkUGUTsV94M..."
  },
  "signed": {
    "publicKeyId": "+tate",
    "signature": "87604ba565d..."
  }
}
{
  "sourcedFrom": {
    "@link": "QmPoWhsvGJ5w9f4Z..."
  },
  "author": {
    "@link": "QmbTcS3DuahG3npW..."
  },
  "title": "Horse and Barge",
  "pubDate": "1820",
  "signed": {
    "publicKeyId": "+moma",
    "signature": "b5804628cdad..."
  },
  "modifying": {
    "@link": "QmeqmtCxJDLTjYZ..."
  }
}

Parent

Child

Transpose

QmeqmtCxJDLTjYZ...

Appendable

Each node is immutable, specifies parent

Traversals?

No obvious way to traverse from the root

Allows permissionless appends

Even link properties?

(pending final decisions)

  "sourcedFrom": {
    "@link": "QmeP3JJgXunsi...",
    "importedOn": "2016-03-26T06:44:40+00:00"
  }

Complete tree

Complete tree

{
  "sourcedFrom": {
    "@link": "QmeP3JJgXunsiVKZ4f..."
  },
  "author": {
    "@link": "QmbTcS3DuahG3npWbkmn..."
  },
  "title": "Horse and Barge",
  "thumbnail": {
    "@link": "QmZozKTkUGUTsV94MbNL..."
  },
  "signed": {
    "publicKeyId": "+tate",
    "signature": "17363ad405d98f3..."
  },
  "modifiedBy": {
    "@link": "QmbmtAMrHNjHypZuzaHAY..."
  }
}
{
  "sourcedFrom": {
    "@link": "QmPoWhsvGJ5w9f4Z4x6q..."
  },
  "author": {
    "@link": "QmbTcS3DuahG3npWbkmnN..."
  },
  "title": "Horse and Barge",
  "pubDate": "1820",
  "signed": {
    "publicKeyId": "+moma",
    "signature": "b5804628cdad90..."
  }
}
{
    "name": "David Cox",
    "passname": "+davidcox"
}
{
  "acno": "A00169",
  "acquisitionYear": 1927,
  "classification": "on paper, unique",
  "contributors": [
    {
      "birthYear": 1783,
      "date": "1783–1859",
      "fc": "David Cox",
      "id": 117,
      "role": "artist"
    }
  ],
  "creditLine": "Bequeathed by J.R. Holliday 1927",
  "dateText": "date not known",
  "id": 2858,
  "medium": "Watercolour on paper. Verso: graphite on paper",
  "thumbnailUrl": "http://www.tate.org.uk/art/images/work/A/A00/A00169_8.jpg",
  "title": "Horse and Barge"
}
{
  "Title": "Horse and Barge",
  "Artist": "David Cox",
  "Date": "1820",
  "Medium": "Watercolour on paper",
  "MoMANumber": "1.9999",
  "DateAcquired": "1997-01-15",
  "CuratorApproved": "Y",
  "ObjectID": "9999-9",
  "URL": "http://www.moma.org/collection/works/9999"
}
ipns://QmXSyBgdatMpHnPmP...

(some vertices/edges omitted for clarity)

Adding TinkerPop

Gremlin

g.v("#15:3").out("described-by").out("authored-by").out("described-by")
ipns://QmXSyBgdatMpHnPmPx.../described-by/authored-by/described-by

Equivalent Traversals

(where "#15:3" and "QmX..." correspond to this tree's toplevel identifier)

{
  "sourcedFrom": {
    "@link": "QmeP3JJgXunsiVKZ4f..."
  },
  "authoredBy": {
    "@link": "QmbTcS3DuahG3npWbkmn..."
  },
  "title": "Horse and Barge",
  "thumbnail": {
    "@link": "QmZozKTkUGUTsV94MbNL..."
  },
  "signed": {
    "publicKeyId": "+tate",
    "signature": "17363ad405d98f3..."
  },
  "modifiedBy": {
    "@link": "QmbmtAMrHNjHypZuzaHAY..."
  }
}
{
    "name": "David Cox",
    "passname": "+davidcox"
}
ipns://QmXSyB...
{
  "describedBy":
    { "@link" : "Q..." }
}
{
  "describedBy":
    { "@link" : "Q..." }
}

Gremlin

IPLD

Naive implementation

Traverse as if entire graph is local

Fetch + cache missing objects

Naive traverse reqiuires 1 RT/edge (w/o cache)

TinkerPop challenges

IPLD addressing only supports following named out edges (@link keys)

= ??? ms

g.V(n).repeat(in('modifiedBy')).times(2).emit().path().by('title')

TinkerPop challenges

Remote must fulfill more complex requests

Simplified feature set

Transport needs to be graph-aware

Next Challenges

Identity

Distributed index/search

Performance and Reliability

Eventual consistency???

Baby Steps

Structured export + L-SPACE as write-through cache

Raw OrientDB dumps

Fully distributed future

Thank you!

http://mediachain-slack.herokuapp.com

@mine_labs

@parkan

mediachain/L-SPACE

We're Hiring!

Mediachain <3 IPFS

By Arkadiy Kukarkin

Mediachain <3 IPFS

Presentation for IPFS meetup 3/30/2016

  • 2,131