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