SlideShare a Scribd company logo
MASKED AUTHENTICATED MESSAGE
Junwei
Transaction Address ?
20°C
21°C
21°C
?? ?
?? ?
Transaction Address ?
20°C
21°C
21°C
4°C
7°C
5°C
20°C 4°C 21°C 7°C 21°C 5°C
IOTA MAM ?
•
• root side_key
• Seed
•
•
MAM Summary
MAM
MAM Channel
Message Chain
Youtube
Message chain
MAM
Data = 20°C
Message 0
Address AAA
Data = 21°C
Message 1
Address BBB
Data = 21°C
Message 2
Address CCC
• Public Mode
• Private Mode
• Restricter Mode
Channel Mode
Public Mode
address = root
address
Public Mode
next_root
root = AAA
next_root = BBB
Payload = 20°C
Address = AAA
address = next_root
root = BBB
next_root = CCC
Payload = 21°C
Address = CCC
address = next_root
Private Mode
address = hash(root)
root
root
Private Mode
root = AAA
next_root = BBB
Payload = 20°C
Address = QWE
address = hash(next_root)
QWE = hash(BBB)
root = BBB
next_root = CCC
Payload = 21°C
Address = ASD
address = hash(next_root)
ASD = hash(CCC)
Restricter Mode
address = hash(root)
side_key
root = AAA
next_root = BBB
Payload = %IOP
Address = QWE
address = hash(next_root)
QWE = hash(BBB)
sidekey =
fishfish
payload
decrypted =
20°C
root = BBB
next_root = CCC
Payload = %JKL
Address = ASD
address = hash(next_root)
ASD = hash(CCC)
sidekey =
fishfish
payload
decrypted =
21°C
root side_key
Restricter Mode
20°C
21°C
21°C
20°C 21°C 21°C
MAM
Demo
https://bit.ly/2yrO8RV
Private ModePublic Mode Restricter Mode
"state": {
"subscribed": [],
"channel": {
"side_key": null,
"mode": "public",
"next_root": "CJ...SD",
"security": "2",
"start": 1,
"count": 1,
"next_count": 1,
"index": 0
},
"seed": "OJ...LL"
},
"payload": "AH...A9",
"root": "KERFP...AQFUI",
"address": "KERFP...AQFUI"
"state": {
"subscribed": [],
"channel": {
"side_key": null,
"mode": "private",
"next_root": "MP...CR",
"security": "2",
"start": 1,
"count": 1,
"next_count": 1,
"index": 0
},
"seed": "ZS...KN"
},
"payload": "AH...Z9",
"root": "HXMCV...XOBLU",
"address": "UDJSG...HKYEQ"
""state": {
"subscribed": [],
"channel": {
"side_key": “UC…WC”,
"mode": "restricted",
"next_root": "FZ...ZB",
"security": "2",
"start": 1,
"count": 1,
"next_count": 1,
"index": 0
},
"seed": "KO...FM"
},
"payload": "AH...99",
"root": "ATYBW...LGVMX",
"address": "JANOP...SFWEL"
MAM object
"state": {
"subscribed": [],
"channel": {
“side_key": String
“mode”: String
"next_root": String
“security": Int
"start": Int
"count": Int,
"next_count": Int,
"index": Int
},
"seed": String
},
"payload": String
“root”: String
"address": String
side_key
Restricted Mode
side_key
"state": {
"subscribed": [],
"channel": {
“side_key": String
“mode”: String
"next_root": String
“security": Int
"start": Int
"count": Int,
"next_count": Int,
"index": Int
},
"seed": String
},
"payload": String
“root”: String
"address": String
mode
Public Mode
address
Private Mode
root
root address
Restricted Mode
root
side_key
"state": {
"subscribed": [],
"channel": {
“side_key": String
“mode”: String
"next_root": String
“security": Int
"start": Int
"count": Int,
"next_count": Int,
"index": Int
},
"seed": String
},
"payload": String
“root”: String
"address": String
next_root
next_root Message chain
next_root
MerkleTree
root
A”=Hash(A’)
Hash(A”B”)
A’
A B
B’
B”=Hash(B’) C”=Hash(C’)
C’
C D
D’
D”=Hash(D’)
Hash(C”D”)
next_root
priavte_Key=
fun(seed,key index,sec.level)
address=hash*(Private_key)
"state": {
"subscribed": [],
"channel": {
“side_key": String
“mode”: String
"next_root": String
“security": Int
"start": Int
"count": Int,
"next_count": Int,
"index": Int
},
"seed": String
},
"payload": String
“root”: String
"address": String
security
1 , 2 , 3
"state": {
"subscribed": [],
"channel": {
“side_key": String
“mode”: String
"next_root": String
“security": Int
"start": Int
"count": Int,
"next_count": Int,
"index": Int
},
"seed": String
},
"payload": String
“root”: String
"address": String
start
Message chain
MerkleTree Seed
start
0’
0
root
private_key
address
1”=Hash(1’)
1’
1 2
2’
2”=Hash(2’)
root
start 0 1
"state": {
"subscribed": [],
"channel": {
"side_key": null,
"mode": "public",
"next_root": “HM..LU”,
"security": "2",
"start": 1,
"count": 1,
"next_count": 1,
"index": 0
},
"seed": "OJ...LL"
},
"payload": "AH...A9",
"root": "KERFP...AQFUI",
"address": "KERFP...AQFUI"
"state": {
"subscribed": [],
"channel": {
"side_key": null,
"mode": "public",
"next_root": “AT..MX”,
"security": "2",
"start": 2,
"count": 1,
"next_count": 1,
"index": 0
},
"seed": "OJ...LL"
},
"payload": "AH...Z9",
"root": "HXMCV...XOBLU",
"address": “HXMCV...XOBLU"
""state": {
"subscribed": [],
"channel": {
"side_key": null,
"mode": "public",
"next_root": "FZ...ZB",
"security": "2",
"start": 3,
"count": 1,
"next_count": 1,
"index": 0
},
"seed": "OJ...LL"
},
"payload": "AH...99",
"root": "ATYBW...LGVMX",
"address": "ATYBW...LGVMX"
"state": {
"subscribed": [],
"channel": {
“side_key": String
“mode”: String
"next_root": String
“security": Int
"start": Int
"count": Int,
"next_count": Int,
"index": Int
},
"seed": String
},
"payload": String
“root”: String
"address": String
count
MerkleTree
count
0’
0
root 1”=Hash(1’)
1’
1 2
2’
2”=Hash(2’)
root
count 1 2
private_key
address
"state": {
"subscribed": [],
"channel": {
“side_key": String
“mode”: String
"next_root": String
“security": Int
"start": Int
"count": Int,
"next_count": Int,
"index": Int
},
"seed": String
},
"payload": String
“root”: String
"address": String
next_count
next_root
MerkleTree
next_count MerkleTree
0’
0
root
1’
1 2
2’
root
root
3’
3 4
4’ 5’
5 6
6’
priavte_Key
address
start
count
next_count
next_root
0 1 3
1 2 4
2 4
BBB CCC
AAA
BBB
CCC
"state": {
"subscribed": [],
"channel": {
“side_key": String
“mode”: String
"next_root": String
“security": Int
"start": Int
"count": Int,
"next_count": Int,
"index": Int
},
"seed": String
},
"payload": String
“root”: String
"address": String
index
index key index
index
root
index 0 1 2 3
"state": {
"subscribed": [],
"channel": {
“side_key": String
“mode”: String
"next_root": String
“security": Int
"start": Int
"count": Int,
"next_count": Int,
"index": Int
},
"seed": String
},
"payload": String
“root”: String
"address": String
seed
Seed Message chain
Message chain Seed
"state": {
"subscribed": [],
"channel": {
“side_key": String
“mode”: String
"next_root": String
“security": Int
"start": Int
"count": Int,
"next_count": Int,
"index": Int
},
"seed": String
},
"payload": String
“root”: String
"address": String
payload
message nonce signature number of sibilings siblings
"state": {
"subscribed": [],
"channel": {
“side_key": String
“mode”: String
"next_root": String
“security": Int
"start": Int
"count": Int,
"next_count": Int,
"index": Int
},
"seed": String
},
"payload": String
“root”: String
"address": String
root
Merkle Root
root
root
"state": {
"subscribed": [],
"channel": {
“side_key": String
“mode”: String
"next_root": String
“security": Int
"start": Int
"count": Int,
"next_count": Int,
"index": Int
},
"seed": String
},
"payload": String
“root”: String
"address": String
address
attchedToTangle
MAM Bundle
MAM Bundle
Transaction[0] Transaction[1] Transaction[2]
Signature Section MAM Section
address=KERFP.. address=KERFP.. address=KERFP..
MerkleTree (1/2) MerkleTree (2/2) Message
*Signature = sec.lvl * 2187[trytes]
*MAM Section 2187[trytes]
i.e.:sec.lvl=2
MAM Section
MAM Section
nextRoot Branch Index Siblings Completed
MAM Section - nextRoot
merkle tree
MAM Section - Branch Index
root
index 0 1 2 3
Branch Index
MAM Section - Siblings
Branch Index
= 0
root
A”=Hash(A’)
Hash(A”B”)
A’
A B
B’
B”=Hash(B’) C”=Hash(C’)
C’
C D
D’
D”=Hash(D’)
Hash(C”D”)
Sibilings of A’
Branch Index
Sibings
MAM Section -  Completed
MessageTrytes
Branch
Index
0
Siblings of Branch Index = 0
B” =Hash(B’) Hash(C”D”)
nextRoot
HM..LU
Message
20°C
message
nextRoot branch_index Siblings
messageTrytes
root sideKey
Side_key
Transaction[2]
MAM Section
address=KERFP..
Message
Signature Section
MAM Section
Bundle Signature
Signature
Transaction Signature Section
Signature Section - Signing
Private Key = key seed branch_index security
Priavate Key
Signed Data
MessageTrytes
Signature
length = sec.lvl * 2187[trytes]
MAM Fetch
MAM Fetch
MAM
root
Bundle
side_key MAM Secion
messageTrytes : nextRoot ,Branch Index ,Sibilings
branch_index address
branch_index address siblings
temp_root
if temp_root = root
• Snapshot
• Tangle Transaction confirmed
•
• ABmushi - IOTA: MAM Eloquently Explained : https://medium.com/@abmushi/iota-mam-eloquently-explained-d7505863b413
• Paul Handy - Introducing Masked Authenticated Messaging : https://blog.iota.org/introducing-masked-authenticated-messaging-e55c1822d50e
• mobilefish.com - IOTA tutorial [19-21]: Masked Authenticated Messaging : https://www.youtube.com/channel/UCG5_CT_KjexxjbgNE4lVGkg/
videos
• iotaledger - MAM/mam.rs : https://github.com/iotaledger/MAM/blob/master/mam/src/mam.rs
• iotaledger - mam.client.js : https://github.com/iotaledger/mam.client.js
• - IOTA: MAM Eloquently Explained ( ) : https://hackmd.io/s/HyxIu0asf#MAM-Publish-102-MAM-Section-—-nextRoot
• HexRabbit - Iota MAM : https://hackmd.io/s/rJkpIrrbM
reference
MerkleTree
MerkleTree HashTree
hash
Merkle hash
hash
MerkleTree

More Related Content

What's hot

Caching and tuning fun for high scalability @ LOAD2012
Caching and tuning fun for high scalability @ LOAD2012Caching and tuning fun for high scalability @ LOAD2012
Caching and tuning fun for high scalability @ LOAD2012
Wim Godden
 
Who moved my pixels?!
Who moved my pixels?!Who moved my pixels?!
Who moved my pixels?!
Mikhail Sosonkin
 
Cassandra introduction @ ParisJUG
Cassandra introduction @ ParisJUGCassandra introduction @ ParisJUG
Cassandra introduction @ ParisJUG
Duyhai Doan
 
MongoDB 3.2 - Analytics
MongoDB 3.2  - AnalyticsMongoDB 3.2  - Analytics
MongoDB 3.2 - Analytics
Massimo Brignoli
 
Reading the .explain() Output
Reading the .explain() OutputReading the .explain() Output
Reading the .explain() Output
MongoDB
 
Distributed algorithms for big data @ GeeCon
Distributed algorithms for big data @ GeeConDistributed algorithms for big data @ GeeCon
Distributed algorithms for big data @ GeeCon
Duyhai Doan
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the code
Wim Godden
 
MongoDB - Back to Basics - La tua prima Applicazione
MongoDB - Back to Basics - La tua prima ApplicazioneMongoDB - Back to Basics - La tua prima Applicazione
MongoDB - Back to Basics - La tua prima Applicazione
Massimo Brignoli
 
Powerful Analysis with the Aggregation Pipeline
Powerful Analysis with the Aggregation PipelinePowerful Analysis with the Aggregation Pipeline
Powerful Analysis with the Aggregation Pipeline
MongoDB
 
Coding Horrors
Coding HorrorsCoding Horrors
Coding Horrors
Mark Baker
 
ETL for Pros: Getting Data Into MongoDB
ETL for Pros: Getting Data Into MongoDBETL for Pros: Getting Data Into MongoDB
ETL for Pros: Getting Data Into MongoDB
MongoDB
 
ETL for Pros: Getting Data Into MongoDB
ETL for Pros: Getting Data Into MongoDBETL for Pros: Getting Data Into MongoDB
ETL for Pros: Getting Data Into MongoDB
MongoDB
 
Web Integration Patterns in the Era of HTML5
Web Integration Patterns in the Era of HTML5Web Integration Patterns in the Era of HTML5
Web Integration Patterns in the Era of HTML5
johnwilander
 
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)MongoSF
 
MongoDB Days Silicon Valley: Data Analysis and MapReduce with MongoDB
MongoDB Days Silicon Valley: Data Analysis and MapReduce with MongoDBMongoDB Days Silicon Valley: Data Analysis and MapReduce with MongoDB
MongoDB Days Silicon Valley: Data Analysis and MapReduce with MongoDB
MongoDB
 
MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용
I Goo Lee
 
[DRAFT] Workshop - Technical Introduction to joola.io
[DRAFT] Workshop - Technical Introduction to joola.io[DRAFT] Workshop - Technical Introduction to joola.io
[DRAFT] Workshop - Technical Introduction to joola.io
Itay Weinberger
 
NoSQL を Ruby で実践するための n 個の方法
NoSQL を Ruby で実践するための n 個の方法NoSQL を Ruby で実践するための n 個の方法
NoSQL を Ruby で実践するための n 個の方法Tomohiro Nishimura
 
Fluentdがよくわからなかった話
Fluentdがよくわからなかった話Fluentdがよくわからなかった話
Fluentdがよくわからなかった話
Shunsuke Michii
 

What's hot (20)

Caching and tuning fun for high scalability @ LOAD2012
Caching and tuning fun for high scalability @ LOAD2012Caching and tuning fun for high scalability @ LOAD2012
Caching and tuning fun for high scalability @ LOAD2012
 
Who moved my pixels?!
Who moved my pixels?!Who moved my pixels?!
Who moved my pixels?!
 
Cassandra introduction @ ParisJUG
Cassandra introduction @ ParisJUGCassandra introduction @ ParisJUG
Cassandra introduction @ ParisJUG
 
MongoDB 3.2 - Analytics
MongoDB 3.2  - AnalyticsMongoDB 3.2  - Analytics
MongoDB 3.2 - Analytics
 
Reading the .explain() Output
Reading the .explain() OutputReading the .explain() Output
Reading the .explain() Output
 
Distributed algorithms for big data @ GeeCon
Distributed algorithms for big data @ GeeConDistributed algorithms for big data @ GeeCon
Distributed algorithms for big data @ GeeCon
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the code
 
MongoDB - Back to Basics - La tua prima Applicazione
MongoDB - Back to Basics - La tua prima ApplicazioneMongoDB - Back to Basics - La tua prima Applicazione
MongoDB - Back to Basics - La tua prima Applicazione
 
Powerful Analysis with the Aggregation Pipeline
Powerful Analysis with the Aggregation PipelinePowerful Analysis with the Aggregation Pipeline
Powerful Analysis with the Aggregation Pipeline
 
Coding Horrors
Coding HorrorsCoding Horrors
Coding Horrors
 
ETL for Pros: Getting Data Into MongoDB
ETL for Pros: Getting Data Into MongoDBETL for Pros: Getting Data Into MongoDB
ETL for Pros: Getting Data Into MongoDB
 
ETL for Pros: Getting Data Into MongoDB
ETL for Pros: Getting Data Into MongoDBETL for Pros: Getting Data Into MongoDB
ETL for Pros: Getting Data Into MongoDB
 
Web Integration Patterns in the Era of HTML5
Web Integration Patterns in the Era of HTML5Web Integration Patterns in the Era of HTML5
Web Integration Patterns in the Era of HTML5
 
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
 
MongoDB Days Silicon Valley: Data Analysis and MapReduce with MongoDB
MongoDB Days Silicon Valley: Data Analysis and MapReduce with MongoDBMongoDB Days Silicon Valley: Data Analysis and MapReduce with MongoDB
MongoDB Days Silicon Valley: Data Analysis and MapReduce with MongoDB
 
MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용
 
[DRAFT] Workshop - Technical Introduction to joola.io
[DRAFT] Workshop - Technical Introduction to joola.io[DRAFT] Workshop - Technical Introduction to joola.io
[DRAFT] Workshop - Technical Introduction to joola.io
 
NoSQL を Ruby で実践するための n 個の方法
NoSQL を Ruby で実践するための n 個の方法NoSQL を Ruby で実践するための n 個の方法
NoSQL を Ruby で実践するための n 個の方法
 
Fluentdがよくわからなかった話
Fluentdがよくわからなかった話Fluentdがよくわからなかった話
Fluentdがよくわからなかった話
 
Pdxpugday2010 pg90
Pdxpugday2010 pg90Pdxpugday2010 pg90
Pdxpugday2010 pg90
 

Similar to IOTA MAM介紹

Webinar: Strongly Typed Languages and Flexible Schemas
Webinar: Strongly Typed Languages and Flexible SchemasWebinar: Strongly Typed Languages and Flexible Schemas
Webinar: Strongly Typed Languages and Flexible Schemas
MongoDB
 
Strongly Typed Languages and Flexible Schemas
Strongly Typed Languages and Flexible SchemasStrongly Typed Languages and Flexible Schemas
Strongly Typed Languages and Flexible Schemas
Norberto Leite
 
Composable Data Processing with Apache Spark
Composable Data Processing with Apache SparkComposable Data Processing with Apache Spark
Composable Data Processing with Apache Spark
Databricks
 
Streaming Operational Data with MariaDB MaxScale
Streaming Operational Data with MariaDB MaxScaleStreaming Operational Data with MariaDB MaxScale
Streaming Operational Data with MariaDB MaxScale
MariaDB plc
 
Casting for not so strange actors
Casting for not so strange actorsCasting for not so strange actors
Casting for not so strange actors
zucaritask
 
MySQLConf2009: Taking ActiveRecord to the Next Level
MySQLConf2009: Taking ActiveRecord to the Next LevelMySQLConf2009: Taking ActiveRecord to the Next Level
MySQLConf2009: Taking ActiveRecord to the Next Level
Blythe Dunham
 
Alexander Mostovenko "Modern approach to localization in javascript with the ...
Alexander Mostovenko "Modern approach to localization in javascript with the ...Alexander Mostovenko "Modern approach to localization in javascript with the ...
Alexander Mostovenko "Modern approach to localization in javascript with the ...
OdessaJS Conf
 
MongoDB全機能解説2
MongoDB全機能解説2MongoDB全機能解説2
MongoDB全機能解説2Takahiro Inoue
 
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
South Tyrol Free Software Conference
 
Look Ma, “update DB to HTML5 using C++”, no hands! 
Look Ma, “update DB to HTML5 using C++”, no hands! Look Ma, “update DB to HTML5 using C++”, no hands! 
Look Ma, “update DB to HTML5 using C++”, no hands! aleks-f
 
GraphQL & Relay - 串起前後端世界的橋樑
GraphQL & Relay - 串起前後端世界的橋樑GraphQL & Relay - 串起前後端世界的橋樑
GraphQL & Relay - 串起前後端世界的橋樑
Pokai Chang
 
The rise of json in rdbms land jab17
The rise of json in rdbms land jab17The rise of json in rdbms land jab17
The rise of json in rdbms land jab17
alikonweb
 
Implementing Server Side Data Synchronization for Mobile Apps
Implementing Server Side Data Synchronization for Mobile AppsImplementing Server Side Data Synchronization for Mobile Apps
Implementing Server Side Data Synchronization for Mobile Apps
Michele Orselli
 
Class 2: Welcome part 2
Class 2: Welcome part 2Class 2: Welcome part 2
Class 2: Welcome part 2
Marc Gouw
 
MongoDB World 2018: Load Spikes, GDPR, & Natural Disasters... Oh My! Scaling ...
MongoDB World 2018: Load Spikes, GDPR, & Natural Disasters... Oh My! Scaling ...MongoDB World 2018: Load Spikes, GDPR, & Natural Disasters... Oh My! Scaling ...
MongoDB World 2018: Load Spikes, GDPR, & Natural Disasters... Oh My! Scaling ...
MongoDB
 
ELK Stack - Turn boring logfiles into sexy dashboard
ELK Stack - Turn boring logfiles into sexy dashboardELK Stack - Turn boring logfiles into sexy dashboard
ELK Stack - Turn boring logfiles into sexy dashboard
Georg Sorst
 
Streaming Way to Webscale: How We Scale Bitly via Streaming
Streaming Way to Webscale: How We Scale Bitly via StreamingStreaming Way to Webscale: How We Scale Bitly via Streaming
Streaming Way to Webscale: How We Scale Bitly via Streaming
All Things Open
 
lldb – Debugger auf Abwegen
lldb – Debugger auf Abwegenlldb – Debugger auf Abwegen
lldb – Debugger auf Abwegen
inovex GmbH
 
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
DataStax Academy
 

Similar to IOTA MAM介紹 (20)

Webinar: Strongly Typed Languages and Flexible Schemas
Webinar: Strongly Typed Languages and Flexible SchemasWebinar: Strongly Typed Languages and Flexible Schemas
Webinar: Strongly Typed Languages and Flexible Schemas
 
Data exchange formats
Data exchange formatsData exchange formats
Data exchange formats
 
Strongly Typed Languages and Flexible Schemas
Strongly Typed Languages and Flexible SchemasStrongly Typed Languages and Flexible Schemas
Strongly Typed Languages and Flexible Schemas
 
Composable Data Processing with Apache Spark
Composable Data Processing with Apache SparkComposable Data Processing with Apache Spark
Composable Data Processing with Apache Spark
 
Streaming Operational Data with MariaDB MaxScale
Streaming Operational Data with MariaDB MaxScaleStreaming Operational Data with MariaDB MaxScale
Streaming Operational Data with MariaDB MaxScale
 
Casting for not so strange actors
Casting for not so strange actorsCasting for not so strange actors
Casting for not so strange actors
 
MySQLConf2009: Taking ActiveRecord to the Next Level
MySQLConf2009: Taking ActiveRecord to the Next LevelMySQLConf2009: Taking ActiveRecord to the Next Level
MySQLConf2009: Taking ActiveRecord to the Next Level
 
Alexander Mostovenko "Modern approach to localization in javascript with the ...
Alexander Mostovenko "Modern approach to localization in javascript with the ...Alexander Mostovenko "Modern approach to localization in javascript with the ...
Alexander Mostovenko "Modern approach to localization in javascript with the ...
 
MongoDB全機能解説2
MongoDB全機能解説2MongoDB全機能解説2
MongoDB全機能解説2
 
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
 
Look Ma, “update DB to HTML5 using C++”, no hands! 
Look Ma, “update DB to HTML5 using C++”, no hands! Look Ma, “update DB to HTML5 using C++”, no hands! 
Look Ma, “update DB to HTML5 using C++”, no hands! 
 
GraphQL & Relay - 串起前後端世界的橋樑
GraphQL & Relay - 串起前後端世界的橋樑GraphQL & Relay - 串起前後端世界的橋樑
GraphQL & Relay - 串起前後端世界的橋樑
 
The rise of json in rdbms land jab17
The rise of json in rdbms land jab17The rise of json in rdbms land jab17
The rise of json in rdbms land jab17
 
Implementing Server Side Data Synchronization for Mobile Apps
Implementing Server Side Data Synchronization for Mobile AppsImplementing Server Side Data Synchronization for Mobile Apps
Implementing Server Side Data Synchronization for Mobile Apps
 
Class 2: Welcome part 2
Class 2: Welcome part 2Class 2: Welcome part 2
Class 2: Welcome part 2
 
MongoDB World 2018: Load Spikes, GDPR, & Natural Disasters... Oh My! Scaling ...
MongoDB World 2018: Load Spikes, GDPR, & Natural Disasters... Oh My! Scaling ...MongoDB World 2018: Load Spikes, GDPR, & Natural Disasters... Oh My! Scaling ...
MongoDB World 2018: Load Spikes, GDPR, & Natural Disasters... Oh My! Scaling ...
 
ELK Stack - Turn boring logfiles into sexy dashboard
ELK Stack - Turn boring logfiles into sexy dashboardELK Stack - Turn boring logfiles into sexy dashboard
ELK Stack - Turn boring logfiles into sexy dashboard
 
Streaming Way to Webscale: How We Scale Bitly via Streaming
Streaming Way to Webscale: How We Scale Bitly via StreamingStreaming Way to Webscale: How We Scale Bitly via Streaming
Streaming Way to Webscale: How We Scale Bitly via Streaming
 
lldb – Debugger auf Abwegen
lldb – Debugger auf Abwegenlldb – Debugger auf Abwegen
lldb – Debugger auf Abwegen
 
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
 

Recently uploaded

weather web application report.pdf
weather web application report.pdfweather web application report.pdf
weather web application report.pdf
Pratik Pawar
 
MCQ Soil mechanics questions (Soil shear strength).pdf
MCQ Soil mechanics questions (Soil shear strength).pdfMCQ Soil mechanics questions (Soil shear strength).pdf
MCQ Soil mechanics questions (Soil shear strength).pdf
Osamah Alsalih
 
CW RADAR, FMCW RADAR, FMCW ALTIMETER, AND THEIR PARAMETERS
CW RADAR, FMCW RADAR, FMCW ALTIMETER, AND THEIR PARAMETERSCW RADAR, FMCW RADAR, FMCW ALTIMETER, AND THEIR PARAMETERS
CW RADAR, FMCW RADAR, FMCW ALTIMETER, AND THEIR PARAMETERS
veerababupersonal22
 
Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&BDesign and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
Sreedhar Chowdam
 
Fundamentals of Electric Drives and its applications.pptx
Fundamentals of Electric Drives and its applications.pptxFundamentals of Electric Drives and its applications.pptx
Fundamentals of Electric Drives and its applications.pptx
manasideore6
 
Gen AI Study Jams _ For the GDSC Leads in India.pdf
Gen AI Study Jams _ For the GDSC Leads in India.pdfGen AI Study Jams _ For the GDSC Leads in India.pdf
Gen AI Study Jams _ For the GDSC Leads in India.pdf
gdsczhcet
 
PPT on GRP pipes manufacturing and testing
PPT on GRP pipes manufacturing and testingPPT on GRP pipes manufacturing and testing
PPT on GRP pipes manufacturing and testing
anoopmanoharan2
 
AKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdf
AKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdfAKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdf
AKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdf
SamSarthak3
 
Water billing management system project report.pdf
Water billing management system project report.pdfWater billing management system project report.pdf
Water billing management system project report.pdf
Kamal Acharya
 
Understanding Inductive Bias in Machine Learning
Understanding Inductive Bias in Machine LearningUnderstanding Inductive Bias in Machine Learning
Understanding Inductive Bias in Machine Learning
SUTEJAS
 
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming PipelinesHarnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
Christina Lin
 
DESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABS
DESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABSDESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABS
DESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABS
itech2017
 
Student information management system project report ii.pdf
Student information management system project report ii.pdfStudent information management system project report ii.pdf
Student information management system project report ii.pdf
Kamal Acharya
 
road safety engineering r s e unit 3.pdf
road safety engineering  r s e unit 3.pdfroad safety engineering  r s e unit 3.pdf
road safety engineering r s e unit 3.pdf
VENKATESHvenky89705
 
Technical Drawings introduction to drawing of prisms
Technical Drawings introduction to drawing of prismsTechnical Drawings introduction to drawing of prisms
Technical Drawings introduction to drawing of prisms
heavyhaig
 
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理
zwunae
 
DfMAy 2024 - key insights and contributions
DfMAy 2024 - key insights and contributionsDfMAy 2024 - key insights and contributions
DfMAy 2024 - key insights and contributions
gestioneergodomus
 
Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...
Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...
Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...
AJAYKUMARPUND1
 
Basic Industrial Engineering terms for apparel
Basic Industrial Engineering terms for apparelBasic Industrial Engineering terms for apparel
Basic Industrial Engineering terms for apparel
top1002
 
Investor-Presentation-Q1FY2024 investor presentation document.pptx
Investor-Presentation-Q1FY2024 investor presentation document.pptxInvestor-Presentation-Q1FY2024 investor presentation document.pptx
Investor-Presentation-Q1FY2024 investor presentation document.pptx
AmarGB2
 

Recently uploaded (20)

weather web application report.pdf
weather web application report.pdfweather web application report.pdf
weather web application report.pdf
 
MCQ Soil mechanics questions (Soil shear strength).pdf
MCQ Soil mechanics questions (Soil shear strength).pdfMCQ Soil mechanics questions (Soil shear strength).pdf
MCQ Soil mechanics questions (Soil shear strength).pdf
 
CW RADAR, FMCW RADAR, FMCW ALTIMETER, AND THEIR PARAMETERS
CW RADAR, FMCW RADAR, FMCW ALTIMETER, AND THEIR PARAMETERSCW RADAR, FMCW RADAR, FMCW ALTIMETER, AND THEIR PARAMETERS
CW RADAR, FMCW RADAR, FMCW ALTIMETER, AND THEIR PARAMETERS
 
Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&BDesign and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
 
Fundamentals of Electric Drives and its applications.pptx
Fundamentals of Electric Drives and its applications.pptxFundamentals of Electric Drives and its applications.pptx
Fundamentals of Electric Drives and its applications.pptx
 
Gen AI Study Jams _ For the GDSC Leads in India.pdf
Gen AI Study Jams _ For the GDSC Leads in India.pdfGen AI Study Jams _ For the GDSC Leads in India.pdf
Gen AI Study Jams _ For the GDSC Leads in India.pdf
 
PPT on GRP pipes manufacturing and testing
PPT on GRP pipes manufacturing and testingPPT on GRP pipes manufacturing and testing
PPT on GRP pipes manufacturing and testing
 
AKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdf
AKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdfAKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdf
AKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdf
 
Water billing management system project report.pdf
Water billing management system project report.pdfWater billing management system project report.pdf
Water billing management system project report.pdf
 
Understanding Inductive Bias in Machine Learning
Understanding Inductive Bias in Machine LearningUnderstanding Inductive Bias in Machine Learning
Understanding Inductive Bias in Machine Learning
 
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming PipelinesHarnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
 
DESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABS
DESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABSDESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABS
DESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABS
 
Student information management system project report ii.pdf
Student information management system project report ii.pdfStudent information management system project report ii.pdf
Student information management system project report ii.pdf
 
road safety engineering r s e unit 3.pdf
road safety engineering  r s e unit 3.pdfroad safety engineering  r s e unit 3.pdf
road safety engineering r s e unit 3.pdf
 
Technical Drawings introduction to drawing of prisms
Technical Drawings introduction to drawing of prismsTechnical Drawings introduction to drawing of prisms
Technical Drawings introduction to drawing of prisms
 
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理
 
DfMAy 2024 - key insights and contributions
DfMAy 2024 - key insights and contributionsDfMAy 2024 - key insights and contributions
DfMAy 2024 - key insights and contributions
 
Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...
Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...
Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...
 
Basic Industrial Engineering terms for apparel
Basic Industrial Engineering terms for apparelBasic Industrial Engineering terms for apparel
Basic Industrial Engineering terms for apparel
 
Investor-Presentation-Q1FY2024 investor presentation document.pptx
Investor-Presentation-Q1FY2024 investor presentation document.pptxInvestor-Presentation-Q1FY2024 investor presentation document.pptx
Investor-Presentation-Q1FY2024 investor presentation document.pptx
 

IOTA MAM介紹

  • 2.
  • 8.
  • 10. • • root side_key • Seed • • MAM Summary MAM
  • 13. Data = 20°C Message 0 Address AAA Data = 21°C Message 1 Address BBB Data = 21°C Message 2 Address CCC
  • 14. • Public Mode • Private Mode • Restricter Mode Channel Mode
  • 15. Public Mode address = root address
  • 16. Public Mode next_root root = AAA next_root = BBB Payload = 20°C Address = AAA address = next_root root = BBB next_root = CCC Payload = 21°C Address = CCC address = next_root
  • 17. Private Mode address = hash(root) root
  • 18. root Private Mode root = AAA next_root = BBB Payload = 20°C Address = QWE address = hash(next_root) QWE = hash(BBB) root = BBB next_root = CCC Payload = 21°C Address = ASD address = hash(next_root) ASD = hash(CCC)
  • 19. Restricter Mode address = hash(root) side_key
  • 20. root = AAA next_root = BBB Payload = %IOP Address = QWE address = hash(next_root) QWE = hash(BBB) sidekey = fishfish payload decrypted = 20°C root = BBB next_root = CCC Payload = %JKL Address = ASD address = hash(next_root) ASD = hash(CCC) sidekey = fishfish payload decrypted = 21°C root side_key Restricter Mode
  • 21.
  • 23.
  • 25. Private ModePublic Mode Restricter Mode "state": { "subscribed": [], "channel": { "side_key": null, "mode": "public", "next_root": "CJ...SD", "security": "2", "start": 1, "count": 1, "next_count": 1, "index": 0 }, "seed": "OJ...LL" }, "payload": "AH...A9", "root": "KERFP...AQFUI", "address": "KERFP...AQFUI" "state": { "subscribed": [], "channel": { "side_key": null, "mode": "private", "next_root": "MP...CR", "security": "2", "start": 1, "count": 1, "next_count": 1, "index": 0 }, "seed": "ZS...KN" }, "payload": "AH...Z9", "root": "HXMCV...XOBLU", "address": "UDJSG...HKYEQ" ""state": { "subscribed": [], "channel": { "side_key": “UC…WC”, "mode": "restricted", "next_root": "FZ...ZB", "security": "2", "start": 1, "count": 1, "next_count": 1, "index": 0 }, "seed": "KO...FM" }, "payload": "AH...99", "root": "ATYBW...LGVMX", "address": "JANOP...SFWEL"
  • 27. "state": { "subscribed": [], "channel": { “side_key": String “mode”: String "next_root": String “security": Int "start": Int "count": Int, "next_count": Int, "index": Int }, "seed": String }, "payload": String “root”: String "address": String side_key Restricted Mode side_key
  • 28. "state": { "subscribed": [], "channel": { “side_key": String “mode”: String "next_root": String “security": Int "start": Int "count": Int, "next_count": Int, "index": Int }, "seed": String }, "payload": String “root”: String "address": String mode Public Mode address Private Mode root root address Restricted Mode root side_key
  • 29. "state": { "subscribed": [], "channel": { “side_key": String “mode”: String "next_root": String “security": Int "start": Int "count": Int, "next_count": Int, "index": Int }, "seed": String }, "payload": String “root”: String "address": String next_root next_root Message chain next_root MerkleTree
  • 30. root A”=Hash(A’) Hash(A”B”) A’ A B B’ B”=Hash(B’) C”=Hash(C’) C’ C D D’ D”=Hash(D’) Hash(C”D”) next_root priavte_Key= fun(seed,key index,sec.level) address=hash*(Private_key)
  • 31. "state": { "subscribed": [], "channel": { “side_key": String “mode”: String "next_root": String “security": Int "start": Int "count": Int, "next_count": Int, "index": Int }, "seed": String }, "payload": String “root”: String "address": String security 1 , 2 , 3
  • 32. "state": { "subscribed": [], "channel": { “side_key": String “mode”: String "next_root": String “security": Int "start": Int "count": Int, "next_count": Int, "index": Int }, "seed": String }, "payload": String “root”: String "address": String start Message chain MerkleTree Seed
  • 34. "state": { "subscribed": [], "channel": { "side_key": null, "mode": "public", "next_root": “HM..LU”, "security": "2", "start": 1, "count": 1, "next_count": 1, "index": 0 }, "seed": "OJ...LL" }, "payload": "AH...A9", "root": "KERFP...AQFUI", "address": "KERFP...AQFUI" "state": { "subscribed": [], "channel": { "side_key": null, "mode": "public", "next_root": “AT..MX”, "security": "2", "start": 2, "count": 1, "next_count": 1, "index": 0 }, "seed": "OJ...LL" }, "payload": "AH...Z9", "root": "HXMCV...XOBLU", "address": “HXMCV...XOBLU" ""state": { "subscribed": [], "channel": { "side_key": null, "mode": "public", "next_root": "FZ...ZB", "security": "2", "start": 3, "count": 1, "next_count": 1, "index": 0 }, "seed": "OJ...LL" }, "payload": "AH...99", "root": "ATYBW...LGVMX", "address": "ATYBW...LGVMX"
  • 35. "state": { "subscribed": [], "channel": { “side_key": String “mode”: String "next_root": String “security": Int "start": Int "count": Int, "next_count": Int, "index": Int }, "seed": String }, "payload": String “root”: String "address": String count MerkleTree
  • 37. "state": { "subscribed": [], "channel": { “side_key": String “mode”: String "next_root": String “security": Int "start": Int "count": Int, "next_count": Int, "index": Int }, "seed": String }, "payload": String “root”: String "address": String next_count next_root MerkleTree next_count MerkleTree
  • 38.
  • 39. 0’ 0 root 1’ 1 2 2’ root root 3’ 3 4 4’ 5’ 5 6 6’ priavte_Key address start count next_count next_root 0 1 3 1 2 4 2 4 BBB CCC AAA BBB CCC
  • 40. "state": { "subscribed": [], "channel": { “side_key": String “mode”: String "next_root": String “security": Int "start": Int "count": Int, "next_count": Int, "index": Int }, "seed": String }, "payload": String “root”: String "address": String index index key index
  • 42. "state": { "subscribed": [], "channel": { “side_key": String “mode”: String "next_root": String “security": Int "start": Int "count": Int, "next_count": Int, "index": Int }, "seed": String }, "payload": String “root”: String "address": String seed Seed Message chain Message chain Seed
  • 43. "state": { "subscribed": [], "channel": { “side_key": String “mode”: String "next_root": String “security": Int "start": Int "count": Int, "next_count": Int, "index": Int }, "seed": String }, "payload": String “root”: String "address": String payload message nonce signature number of sibilings siblings
  • 44. "state": { "subscribed": [], "channel": { “side_key": String “mode”: String "next_root": String “security": Int "start": Int "count": Int, "next_count": Int, "index": Int }, "seed": String }, "payload": String “root”: String "address": String root Merkle Root
  • 46. "state": { "subscribed": [], "channel": { “side_key": String “mode”: String "next_root": String “security": Int "start": Int "count": Int, "next_count": Int, "index": Int }, "seed": String }, "payload": String “root”: String "address": String address attchedToTangle
  • 48. MAM Bundle Transaction[0] Transaction[1] Transaction[2] Signature Section MAM Section address=KERFP.. address=KERFP.. address=KERFP.. MerkleTree (1/2) MerkleTree (2/2) Message *Signature = sec.lvl * 2187[trytes] *MAM Section 2187[trytes] i.e.:sec.lvl=2
  • 49. MAM Section MAM Section nextRoot Branch Index Siblings Completed
  • 50. MAM Section - nextRoot merkle tree
  • 51. MAM Section - Branch Index root index 0 1 2 3 Branch Index
  • 52. MAM Section - Siblings Branch Index = 0 root A”=Hash(A’) Hash(A”B”) A’ A B B’ B”=Hash(B’) C”=Hash(C’) C’ C D D’ D”=Hash(D’) Hash(C”D”) Sibilings of A’ Branch Index Sibings
  • 53. MAM Section -  Completed MessageTrytes Branch Index 0 Siblings of Branch Index = 0 B” =Hash(B’) Hash(C”D”) nextRoot HM..LU Message 20°C message nextRoot branch_index Siblings messageTrytes root sideKey Side_key Transaction[2] MAM Section address=KERFP.. Message
  • 54. Signature Section MAM Section Bundle Signature Signature Transaction Signature Section
  • 55. Signature Section - Signing Private Key = key seed branch_index security Priavate Key Signed Data MessageTrytes Signature length = sec.lvl * 2187[trytes]
  • 57. MAM Fetch MAM root Bundle side_key MAM Secion messageTrytes : nextRoot ,Branch Index ,Sibilings branch_index address branch_index address siblings temp_root if temp_root = root
  • 58. • Snapshot • Tangle Transaction confirmed •
  • 59. • ABmushi - IOTA: MAM Eloquently Explained : https://medium.com/@abmushi/iota-mam-eloquently-explained-d7505863b413 • Paul Handy - Introducing Masked Authenticated Messaging : https://blog.iota.org/introducing-masked-authenticated-messaging-e55c1822d50e • mobilefish.com - IOTA tutorial [19-21]: Masked Authenticated Messaging : https://www.youtube.com/channel/UCG5_CT_KjexxjbgNE4lVGkg/ videos • iotaledger - MAM/mam.rs : https://github.com/iotaledger/MAM/blob/master/mam/src/mam.rs • iotaledger - mam.client.js : https://github.com/iotaledger/mam.client.js • - IOTA: MAM Eloquently Explained ( ) : https://hackmd.io/s/HyxIu0asf#MAM-Publish-102-MAM-Section-—-nextRoot • HexRabbit - Iota MAM : https://hackmd.io/s/rJkpIrrbM reference
  • 60.