Entities

These are the root level protocol objects that have their own endpoints.

  • Board
  • Thread
  • Post
  • Vote
  • Address
  • Key
  • TrustState

These are the sub-level protocol objects that do not have their endpoints, and only provided integrated to the objects encapsulating them. You cannot query them on their own.

  • BoardOwner (sub-entity of Board)
  • Protocol (sub-entity of Address)
  • Client (sub-entity of Address)

Board

Boards are the Terminal top-level elements of the architecture. All posts belong to a board and a thread. Think of these as subreddits. They can have an owner, which is the person that created the board. This is the permanent moderator of the board. The permanent moderator can assign moderators for a limited timespan.

Boards have one admin, and can have multiple moderators. Admin is denoted in the Owner field, moderators are provided in the BoardOwners. Admins can add and remove moderators. Moderators cannot do anything except moderating. Admins can abdicate and come back from abdication.

Board Object

This is the spec of the standard Board entity a Mim node will provide you. The order of these fields are undefined, it can come in any order.

  • Fingerprint (64 characters, ASCII string)
  • Name (Min 2, Max 255 characters, Unicode string)
  • Creation (Unix Epoch Time, UTC, int64)
  • ProofOfWork (Min 0, Max 1024 characters, ASCII string)
  • Signature (Min 0, Max 512 characters, ASCII string)
  • Owner (0 or 64 characters, ASCII string)
  • BoardOwners (Mutable, Min 0 array of BoardOwner objects, max 100)
  • Description (Mutable, Min 0, Max 65535 characters, Unicode string)
  • LastUpdate (Mutable, Unix Epoch Time, UTC, int64)
  • UpdateProofOfWork (Mutable, Min 0, Max 1024 characters, ASCII string)
  • UpdateSignature (Mutable, Min 0, Max 512 characters, ASCII string)

Mutable fields in Board Object

'BoardOwners', 'Description', 'LastUpdate', 'UpdateProofOfWork', 'UpdateSignature'

Maximum uncompressed theoretical size

~280 Kilobytes, assuming 100 (max) board owners, and assuming 65535 (max) characters on description, all characrers 4 bytes each (unicode max). On average, boards will likely have 1-2 owners, and 500-600 characters description. If average, ~20 kilobytes. Variance is moderate, but be ready to handle extreme cases.

Board Example

{
  "fingerprint": "ea7d8e81e18e3791e0e89a4ebaba64c92c3f0f3c03c3057e2ef5e9fcb7f13891",
  "name": "My awesome board",
  "creation": 1442040412,
  "proof_of_work": "1:23:1509120719:[mimdata]::xUEBZA89/o7EZwtg:000000000000000000000000000000000GHiK",
  "signature": "30450221008829563cc1ac75659c440e9d737fb81d5a8f3f60cda48d041ed71c61adfcb5cb022026fbd30a651433778d4d94d774082ba66acd7dd1d43d8263e36972aba98c6a79",
  "owner": "f1c4f90dd4a45bdb83b47e04e158065b9c7c867ffd44ea925c1301ad6134f2bd",
  "board_owners": [
    {
      "key_fingerprint": "f1c4f90dd4a45bdb83b47e04e158065b9c7c867ffd44ea925c1301ad6134f2bd",
      "expiry": "",
      "level": 2
    }
  ],
  "description": "This is where you get to explain what your board is about.",
  "last_update": 1442044141,
  "update_proof_of_work": "1:24:1509120749:[mimdata]::hyVUb0vRzJsxkZ4Q:0001tD3/",
  "update_signature": "3046022100ce06189f3aea609a095aebb2a8ff4115af18c15abc0e84ff07ee7ba5687a3502022100bc7676c71e81208e179afc7fe0302ac1433ce22527d673ed291dd0965d4e5e58"
}

Board Index Form Example

This form is the compressed form of the full object. It is provided in the index so as to allow the requester to decide whether it wants to request this object or not. If the requester thinks this object is useful, it needs to request the full object to be able to do anything with it.

{
  "fingerprint": "edb4e3da4e8f1e99aba3743fc3de5a84f73e4fd32f5883759e743582a25cb466",
  "creation": 1442041028,
  "last_update": 1442099904,
  "page_number": 0 // Only appears on index form. Allows for faster queries.
}

Fields

Fingerprint

SHA256 hash of the entirety of the object. See entity concepts for how to come up and how to verify this.

Of all the three calculations (proof of work, signature, fingerprint), this should happen last.

Name

User-visible portion of the board. Between 2 and 255 unicode characters. Do not assume this always means 255 bytes! A unicode character can be and is often larger than a byte.

Creation

Creation date and time in UTC as an int64. This is the standard UNIX Epoch Time.

ProofOfWork

This field provides proof of work. To see how to create and verify this, see the relevant section in the Entity Concepts topic.

Signature

This field provides signatures. To see how to create and verify this, see the relevant section in the Entity Concepts topic.

Of all the three calculations (proof of work, signature, fingerprint), this should happen second.

Owner

Fingerprint of a Key that owns this. Can be empty.

BoardOwners

An array of BoardOwner objects. Can be empty. Updatable.

When you convert this to a string, concat everything without any sort of delineation.

Description

Description of the board. Admin of the board can update this.

LastUpdate

Update date and time in UTC as an int64. This is the standard UNIX Epoch Time.

UpdateProofOfWork

This field provides proof of work. To see how to create and verify this, see the relevant section in the Entity Concepts topic.

UpdateSignature

This field provides signatures. To see how to create and verify this, see the relevant section in the Entity Concepts topic.


BoardOwner (sub-entity of Board)

BoardOwner entities go into the updatable 'BoardOwners' field of a board. They are not distributed separately, but embedded into 'Board' objects. There is no upper limit on how many owners a board can have. A board can also have no owners, in which case it is not moderated by mods but by community by means of voting.

BoardOwner Object

  • KeyFingerprint (64 characters, ASCII string)
  • Expiry (Unix Epoch Time, UTC, int64, or empty)
  • Level (uint8. A number between 0-255)

Fields

KeyFingerprint

This is the fingerprint of the key the ownership is associated to.

Expiry

When the ownership expires. Can be empty. If empty, ownership lasts until revoked by the admin of the board.

Level

A number between 0 and 255. Values are given below:

1: Mod. Cannot add or remove mods. Cannot remove itself. Can moderate.

255: Abdicated admin. If an admin wants to remove itself, he or she sets his own level value to 0. Abdication is revocable. If the admin (the person on the immutable owner field) wants to return, he can remove this and he will be an admin.

Thread

Threads are a collection of posts. They have a header, which is the name of the thread. They can either be text-based, in which the user writes some text as the discussion starter, or link-based, in which the thread is a link to an external page.

Thread Object

  • Fingerprint (64 characters, ASCII string)
  • Board (64 characters, ASCII string)
  • Name (Min 2, Max 255 characters, Unicode string)
  • Body (Min 0, Max 65535 characters, Unicode string)
  • Link (Min 0, Max 5000 characters, Unicode string)
  • Owner (0 or 64 characters, ASCII string)
  • Creation (Unix Epoch Time, UTC, int64)
  • ProofOfWork (Min 0, Max 1024 characters, ASCII string)
  • Signature (Min 0, Max 512 characters, ASCII string)

Maximum uncompressed theoretical size

~280 Kilobytes, assuming 65535 (max) characters on body, 255 on name, and 5000 on link, all characrers 4 bytes each (unicode max). This wildly varies, be ready to handle extreme cases.

Thread Example

{
  "fingerprint": "ea7d8e81e18e3791e0e89a4ebaba64c92c3f0f3c03c3057e2ef5e9fcb7f13891",
  "board": "14fc9b8593050a15ebdf2ebae13150315fa9b14e4e921b03f9912c6a2560b8f2",
  "name": "My awesome thread",
  "body": "This is the body of the thread.",
  "link": "http://www.zombo.com",
  "owner": "f1c4f90dd4a45bdb83b47e04e158065b9c7c867ffd44ea925c1301ad6134f2bd",
  "creation": 1442040412,
  "proof_of_work": "1:23:1509120719:[mimdata]::xUEBZA89/o7EZwtg:000000000000000000000000000000000GHiK",
  "signature": "30450221008829563cc1ac75659c440e9d737fb81d5a8f3f60cda48d041ed71c61adfcb5cb022026fbd30a651433778d4d94d774082ba66acd7dd1d43d8263e36972aba98c6a79",
}

Thread Index Form Example

{
  "fingerprint": "edb4e3da4e8f1e99aba3743fc3de5a84f73e4fd32f5883759e743582a25cb466",
  "board": "71f12bb2278e400d7fec0a40c1944df32fbd0c6e91d10c7ec5e6bbf194b0f4e8",
  "creation": 1442041028,
  "page_number": 0 // Only appears on index form. Allows for faster queries.
}

Fields

Fingerprint

SHA256 hash of the entirety of the object. To come up with the fingerprint, convert all the fields except itself into and unicode string and run SHA256 hash over it.

Of all the three calculations (proof of work, signature, fingerprint), this should happen last.

Board

Fingerprint of the board this thread belongs to.

Name

Name of the thread. Between 2 and 255 unicode characters.

Body

Main text. Between 0 and 65535 characters unicode string. Can be empty.

The address the thread links to. Between 0 and 65535 characters unicode string. Can be empty.

Owner

Fingerprint of a Key that owns this. Can be empty.

Creation

See Board > Creation field.

ProofOfWork

This field provides a a Hashcash token and its signature. To generate the string that goes into Hashcash, convert all fields except 'Fingerprint' and itself to a unicode string, concatenate them, and run Hashcash over with the configuration options. See 'Entity Concepts' section for more info.

Signature

ECDSA signature of all fields except 'Fingerprint' and itself. Can be empty. For the exact ECDSA signature algorithm, please read on. [todo]


Post

Posts are comments written by users of the protocol. They can be replies directly to the thread, or to another post.

Post Object

  • Fingerprint (64 characters, ASCII string)
  • Board (64 characters, ASCII string)
  • Thread (64 characters, ASCII string)
  • Parent (64 characters, ASCII string)
  • Body (Min 0, Max 65535 characters, Unicode string)
  • Owner (0 or 64 characters, ASCII string)
  • Creation (Unix Epoch Time, UTC, int64)
  • ProofOfWork (Min 0, Max 1024 characters, ASCII string)
  • Signature (Min 0, Max 512 characters, ASCII string)

Maximum uncompressed theoretical size

~280 Kilobytes, assuming 65535 (max) characters on body, all characters 4 bytes each (unicode max). This wildly varies, so while average post length is 1000~ characters and is mostly ASCII (1 bytes), be ready to handle extreme cases.

Post Example

{
  "fingerprint": "ea7d8e81e18e3791e0e89a4ebaba64c92c3f0f3c03c3057e2ef5e9fcb7f13891",
  "board": "64c74b58966274583ebe2e177e8f53da090cecf91a8d21d173e1af48d3ea3f21",
  "thread": "f1c4f90dd4a45bdb83b47e04e158065b9c7c867ffd44ea925c1301ad6134f2bd",
  "parent": "f1c4f90dd4a45bdb83b47e04e158065b9c7c867ffd44ea925c1301ad6134f2bd", // if same as board, it's a direct post to the thread.
  "body": "This is my post.",
  "owner": "623429db9c6e9bd441b5d6ceaaeeb80a1066f4a0cdbc83722bb970f67700b22f",
  "creation": 1442040412,
  "proof_of_work": "1:23:1509120719:[mimdata]::xUEBZA89/o7EZwtg:000000000000000000000000000000000GHiK",
  "signature": "30450221008829563cc1ac75659c440e9d737fb81d5a8f3f60cda48d041ed71c61adfcb5cb022026fbd30a651433778d4d94d774082ba66acd7dd1d43d8263e36972aba98c6a79",
}

Post Index Form Example

{
  "fingerprint": "edb4e3da4e8f1e99aba3743fc3de5a84f73e4fd32f5883759e743582a25cb466",
  "board": "71f12bb2278e400d7fec0a40c1944df32fbd0c6e91d10c7ec5e6bbf194b0f4e8",
  "thread": "81b3c8d7ae3fa2b971e811834e61e4d6a30c246fb04ac309b267c1dc369cb902",
  "creation": 1442041028,
  "page_number": 0 // Only appears on index form. Allows for faster queries.
}

Fields

Fingerprint

See Thread > Fingerprint field.

Board

Fingerprint of the board this post belongs to.

Thread

Fingerprint of the thread this post belongs to.

Parent

Fingerprint of the entity that is the ancestor to this post.

Body

See Thread > Body field.

Owner

See Thread > Owner field.

Creation

See Board > Creation field.

ProofOfWork

See Thread > ProofOfWork field.

Signature

See Thread > Signature field.


Vote

Vote objects are emitted when people vote on threads or posts. These are signed by user's private keys, so the user can vote only once on a certain entity. If user's vote changes, his or her vote will update accordingly across the network.

Vote Object

  • Fingerprint (64 characters, ASCII string)
  • Board (64 characters, ASCII string)
  • Thread (64 characters, ASCII string)
  • Target (64 characters, ASCII string)
  • Owner (64 characters, ASCII string)
  • Creation (Unix Epoch Time, UTC, int64)
  • ProofOfWork (Min 0, Max 1024 characters, ASCII string)
  • Signature (Min 0, Max 512 characters, ASCII string)
  • Type (Mutable, uint8. A number between 0-255)
  • LastUpdate (Mutable, Unix Epoch Time, UTC, int64)
  • UpdateProofOfWork (Mutable, Min 0, Max 1024 characters, ASCII string)
  • UpdateSignature (Mutable, Min 0, Max 512 characters, ASCII string)

Mutable fields in Vote Object

'Type', 'LastUpdate', 'UpdateProofOfWork', 'UpdateSignature'

Maximum uncompressed theoretical size

~1 Kilobytes.

Vote Example

{
  "fingerprint": "ea7d8e81e18e3791e0e89a4ebaba64c92c3f0f3c03c3057e2ef5e9fcb7f13891",
  "board": "64c74b58966274583ebe2e177e8f53da090cecf91a8d21d173e1af48d3ea3f21",
  "thread": "f1c4f90dd4a45bdb83b47e04e158065b9c7c867ffd44ea925c1301ad6134f2bd",
  "target": "f1c4f90dd4a45bdb83b47e04e158065b9c7c867ffd44ea925c1301ad6134f2bd",
  "owner": "623429db9c6e9bd441b5d6ceaaeeb80a1066f4a0cdbc83722bb970f67700b22f",
  "creation": 1442040412,
  "proof_of_work": "1:23:1509120719:[mimdata]::xUEBZA89/o7EZwtg:000000000000000000000000000000000GHiK",
  "signature": "30450221008829563cc1ac75659c440e9d737fb81d5a8f3f60cda48d041ed71c61adfcb5cb022026fbd30a651433778d4d94d774082ba66acd7dd1d43d8263e36972aba98c6a79",
  "type": 1,
  "last_update": 1442044141,
  "update_proof_of_work": "1:24:1509120749:[mimdata]::hyVUb0vRzJsxkZ4Q:0001tD3/",
  "update_signature": "3046022100ce06189f3aea609a095aebb2a8ff4115af18c15abc0e84ff07ee7ba5687a3502022100bc7676c71e81208e179afc7fe0302ac1433ce22527d673ed291dd0965d4e5e58"
}

Vote Index Form Example

{
  "fingerprint": "edb4e3da4e8f1e99aba3743fc3de5a84f73e4fd32f5883759e743582a25cb466",
  "board": "71f12bb2278e400d7fec0a40c1944df32fbd0c6e91d10c7ec5e6bbf194b0f4e8",
  "thread": "81b3c8d7ae3fa2b971e811834e61e4d6a30c246fb04ac309b267c1dc369cb902",
  "target": "81b3c8d7ae3fa2b971e811834e61e4d6a30c246fb04ac309b267c1dc369cb902",
  "creation": 1442041028,
  "last_update": 1442099904,
  "page_number": 0 // Only appears on index form. Allows for faster queries.
}

Fields

Fingerprint

See Board > Fingerprint field.

Board

See Post > Board field.

Thread

See Post > Thread field.

Target

The target of this vote. Can be post or a thread.

Owner

See Post > Owner field.

Creation

See Post > Creation field.

ProofOfWork

See Post > ProofOfWork field.

Signature

See Post > Signature field.

Type

A value between 0 and 255. (uint8)

Type values

255: Neutral vote. This is assumed if no vote is available. If you see this, this was reverted back from some other type of vote.

1: Upvote (Applicable to Posts, Threads)

2: Downvote (Applicable to Posts, Threads)

3: Pinned (Applicable to Posts, Threads)

4: Blocked (Applicable to Posts, Threads, Boards)

LastUpdate

See Board > LastUpdate field.

UpdateProofOfWork

See Board > UpdateProofOfWork field.

UpdateSignature

See Board > UpdateSignature field.


Address

Address objects are IP addresses running a Mim client. They can be of a certain type, or be running a protocol extension. You decide whether to connect to these with protocol version and with the extensions they are running.

One interesting thing to note about the Address object is that nodes can only provide addresses that they have personally connected to. This keeps the address list from inflating.

The way it works is that when a local node pulls a list of full addresses from a remote, it removes all fields except the primary keys before saving it to its database. Since the fields are removed, if an address ends up being served to another remote node in this form, it will fail the DB checks and not be committed. The only way to have this node back into full data is to connect to it directly, in which case we put in the full info directly provided by the node that is being connected to. When the local fills in the full data by doing that, the data becomes available to other nodes, and it can be accepted to them.

Esentially:

  • Local node receives list of full addresses.
  • Local strips all but primary keys and saves them.
  • Remotes look at stripped forms of addresses and reject them.
  • If the local connects to any of the stripped nodes, it'll be updated with the full set of data.
  • Remotes only accept full sets of data, so only the addresses the local has personally connected to can be transmitted to other remotes.

Address Object

  • Location (Max 2500 characters ASCII string)
  • Sublocation (Max 2500 characters ASCII string)
  • LocationType (6 or 4 or 3, single integer)
  • Port (uint16. A number between 0-65535)
  • Type (Mutable, uint8. A number between 0-255)
  • LastOnline (Mutable, Unix Epoch Time, UTC, int64)
  • Protocol (Mutable, Protocol object)
  • Client (Mutable, Client object)

Mutable fields in Address Object

Address fields are mutable only when directly connected to that address. In other words, addresses are collected from the network only once. An update based on the data coming from another node which is not at the address is not permitted. This is so as to mitigate an attack vector in which the attacker cuts off or encourages the connections (DDoS) to an address by changing the details used to make dispatch decisions on other nodes.

'Type', 'LastOnline', 'Protocol', 'Client'

Maximum uncompressed theoretical size

~8 Kilobytes, assuming 100 (max) extensions each 64 characters ASCII (max), 255 characters unicode as client name (max). Average number of extensions is likely 0-1. Average length of client name is likely 7-10 bytes. If average, ~0.5 Kilobytes.

Address Example

{
  "location": "1.2.3.4",
  "sublocation": "",
  "location_type": 4,
  "port": 23432,
  "type": 2,
  "last_online": 1442044141,
  "protocol": {
    "version_major": 0,
    "version_minor": 1,
    "subprotocols": [
      {
        "name":"c0",
        "version_major":1,
        "version_minor":0,
        "supported_entities": ["board", "thread", "post", "vote", "key", "truststate"]
      }
    ]
  },
  "client": {
    "version_major": 2,
    "version_minor": 0,
    "version_patch": 0,
    "name": "Aether"
  }
}

Address Index Form Example

The index form of address is the address entity itself.

Fields

Location

Ip address, v4 or v6 (127.0.0.1) or root URL. (http://www.example.com)

Sublocation

If location is URL, this is the non-root part. i.e. (my_awesome_static_node)

Combined with the root URL above, this means the node is at http://www.example.com/my_awesome_static_node

LocationType

The type of IP address. It can either be 4 or 6 or 3. 3 means it's a URL.

Port

The Mim port of the address. An uint16 number between 0-65535.

Type

Mim type of the address. See type values below.

Type values

255: Static. This node is 'frozen'. It will not respond to filter queries, just to show all requests. An example of this node is a static website.

2: Live. This is a normal computer that stays online for durations longer than a few minutes. This is the default setting.

LastOnline

The date this node was last connected to.

Protocol

Protocol object which declares the protocol the address is running.


Protocol (sub-entity of Address)

Defines the protocol version and extensions the client is running. Protocol extensions are extensions to the Mim protocol where additional features and entities can be added.

Protocol Object

  • VersionMajor (uint8)
  • VersionMinor (uint16)
  • Extensions (array of strings, max 64 characters long each, ASCII max 100 extensions)

Fields

VersionMajor

Major version of the Mim protocol running on this address.

VersionMinor

Minor version of the Mim protocol running on this address.

Subprotocols

An array of objects, each of which define a subprotocol of Mim, alongside the entities supported by the node on this address. This list of objects are how a remote node determines which objects from which subprotocol are available for serving from this node. The fields are self-explanatory, and is provided below.

"subprotocols": [
  {
    "name":"c0",
    "version_major":1,
    "version_minor":0,
    "supported_entities": ["board", "thread", "post", "vote", "key", "truststate"]
  }
]

Client (sub-entity of Address)

Defines the client that is running on this address. This object is empty if the node is static.

Client Object

  • VersionMajor (uint8)
  • VersionMinor (uint16)
  • VersionPatch (uint16)
  • ClientName (Max 255 characters Unicode)

Fields

VersionMajor

Major version of the client running on this address.

VersionMinor

Minor version of the client running on this address.

VersionPatch

Minor version of the client running on this address.

ClientName

Name of the client running on this node. Max 255 characters Unicode.


Key

Keys represent unique users. Having a key is optional, i.e. you can write posts anonymously. However, the nodes might reject to receive these posts written in such a manner. If you do not have a key, you cannot vote.

Key Object

  • Fingerprint (64 characters, ASCII string)
  • Type (256 characters, ASCII String)
  • Key (Max 65536 characters ASCII string)
  • Name (Max 64 characters Unicode)
  • Creation (Unix Epoch Time, UTC, int64)
  • ProofOfWork (Min 0, Max 1024 characters, ASCII string)
  • Signature (Min 0, Max 512 characters, ASCII string)
  • Info (Mutable, Text, Unicode.)
  • LastUpdate (Mutable, Unix Epoch Time, UTC, int64)
  • UpdateProofOfWork (Mutable, Min 0, Max 1024 characters, ASCII string)
  • UpdateSignature (Mutable, Min 0, Max 512 characters, ASCII string)

Mutable fields in Key Object

'Info', 'LastUpdate', 'UpdateProofOfWork', 'UpdateSignature'

Maximum uncompressed theoretical size

~80 Kilobytes, Length of the key used by default is 512 characters ASCII. Average number of currency addresses for a key is 0-1 If average, ~6 Kilobytes.

Key Example

{
  "fingerprint": "ea7d8e81e18e3791e0e89a4ebaba64c92c3f0f3c03c3057e2ef5e9fcb7f13891",
  "type": "secp256k1",
  "name": "alice",
  "key": "04da41af852dad151094de0e84a7c8a111cf93d56a2028c8400a1e9f9e37adffd4328a256228cc30387af52e507e33c28cf1accfda524800cdd5f17845ebc63168",
  "creation": 1442040412,
  "proof_of_work": "1:23:1509120719:[mimdata]::xUEBZA89/o7EZwtg:000000000000000000000000000000000GHiK",
  "signature": "30450221008829563cc1ac75659c440e9d737fb81d5a8f3f60cda48d041ed71c61adfcb5cb022026fbd30a651433778d4d94d774082ba66acd7dd1d43d8263e36972aba98c6a79",
  "info": "This is the key information.",
  "last_update": 1442044141,
  "update_proof_of_work": "1:24:1509120749:[mimdata]::hyVUb0vRzJsxkZ4Q:0001tD3/",
  "update_signature": "3046022100ce06189f3aea609a095aebb2a8ff4115af18c15abc0e84ff07ee7ba5687a3502022100bc7676c71e81208e179afc7fe0302ac1433ce22527d673ed291dd0965d4e5e58"
}

Key Index Form Example

The index form of address is the address entity itself.

{
  "fingerprint": "edb4e3da4e8f1e99aba3743fc3de5a84f73e4fd32f5883759e743582a25cb466",
  "creation": 1442041028,
  "last_update": 1442099904,
  "page_number": 0 // Only appears on index form. Allows for faster queries.
}

Fingerprint

See Board > Fingerprint field.

Type

The type of the key, a string field, such as 'RSA2048'. There are no defined values of this field. Whatever you put there, make sure all other clients can decipher it. If this type is indecipherable to a client, it is required for the client to make a best-effort attempt to validate the key.

Key

The key itself.

Name

The user name of the person who owns the key.

Creation

See Thread > Creation field.

ProofOfWork

See Thread > ProofOfWork field.

Signature

See Thread > Signature field.

Info

Ideally, some information about the owner of the key, alternative contact methods etc. But it is effectively a text field for the owner of the key.

LastUpdate

See Board > LastUpdate field.

UpdateProofOfWork

See Board > UpdateProofOfWork field.

UpdateSignature

See Board > UpdateSignature field.


TrustState

TrustState objects are declarations of trust of an user for another. If an user trusts, or distrusts another, it emits a TrustState. If the user changes an existing TrustState to neutral, it updates the state with a 'neutral'.

TrustState Object

  • Fingerprint (64 characters, ASCII string)
  • Target (64 characters, ASCII string)
  • Owner (64 characters, ASCII string)
  • Creation (Unix Epoch Time, UTC, int64)
  • ProofOfWork (Min 0, Max 1024 characters, ASCII string)
  • Signature (Min 0, Max 512 characters, ASCII string)
  • Type (Mutable, uint8. A number between 0-255)
  • Domains (Mutable, Min 0, max 100 array of Board fingerprints)
  • Expiry (Mutable, Unix Epoch Time, UTC, int64)
  • LastUpdate (Mutable, Unix Epoch Time, UTC, int64)
  • UpdateProofOfWork (Mutable, Min 0, Max 1024 characters, ASCII string)
  • UpdateSignature (Mutable, Min 0, Max 512 characters, ASCII string)

Mutable fields in TrustState Object

'Type', 'Domains', 'Expiry' 'LastUpdate', 'UpdateProofOfWork', 'UpdateSignature'

Maximum uncompressed theoretical size

~7 Kilobytes, assuming 100 (max) domains. Average number of domains is likely 1-2. If average, ~1 Kilobytes.

TrustState Example

{
  "fingerprint": "ea7d8e81e18e3791e0e89a4ebaba64c92c3f0f3c03c3057e2ef5e9fcb7f13891",
  "target": "f1c4f90dd4a45bdb83b47e04e158065b9c7c867ffd44ea925c1301ad6134f2bd",
  "owner": "623429db9c6e9bd441b5d6ceaaeeb80a1066f4a0cdbc83722bb970f67700b22f",
  "creation": 1442040412,
  "proof_of_work": "1:23:1509120719:[mimdata]::xUEBZA89/o7EZwtg:000000000000000000000000000000000GHiK",
  "signature": "30450221008829563cc1ac75659c440e9d737fb81d5a8f3f60cda48d041ed71c61adfcb5cb022026fbd30a651433778d4d94d774082ba66acd7dd1d43d8263e36972aba98c6a79",
  "type": 2,
  "domains": [
    "64c74b58966274583ebe2e177e8f53da090cecf91a8d21d173e1af48d3ea3f21",
    "f9df663ad9cd758eb1ae510d595a5f722b558e8176e576e62031fbe4053b3943"
    ],
  "expiry": 1442044141,
  "last_update": 1442044141,
  "update_proof_of_work": "1:24:1509120749:[mimdata]::hyVUb0vRzJsxkZ4Q:0001tD3/",
  "update_signature": "3046022100ce06189f3aea609a095aebb2a8ff4115af18c15abc0e84ff07ee7ba5687a3502022100bc7676c71e81208e179afc7fe0302ac1433ce22527d673ed291dd0965d4e5e58"
}

TrustState Index Form Example

{
  "fingerprint": "edb4e3da4e8f1e99aba3743fc3de5a84f73e4fd32f5883759e743582a25cb466",
  "target": "81b3c8d7ae3fa2b971e811834e61e4d6a30c246fb04ac309b267c1dc369cb902",
  "creation": 1442041028,
  "last_update": 1442099904,
  "page_number": 0 // Only appears on index form. Allows for faster queries.
}

Fields

Fingerprint

See Board > Fingerprint field.

Target

The target key (user) of the trust assignment.

Owner

See Post > Owner field.

Creation

See Post > Creation field.

ProofOfWork

See Post > ProofOfWork field.

Signature

See Post > Signature field.

Type

A value between 0 and 255. (uint8)

Type values

255: Neutral trust state. This is assumed if no state is available. If you see this, this was reverted back from some other type of state.

1: Trusted. Owner of this TrustState trusts the user with the key TargetKey.

2: Distrusted. Owner of this TrustState has blocked the user with the key TargetKey.

Domains

An array of board fingerprints, in which the user is declared to be in the provided trust state. You cannot trust an user in one board and distrust in another. If you give a domain, in anywhere that is not the domain provided, the trust is assumed to be neutral. If you do not give a domain, the trust is in all boards.

Expiry

The UTC timestamp which declares when the trust expires. Can be empty. If empty, the trust does not expire.

LastUpdate

See Board > LastUpdate field.

UpdateProofOfWork

See Board > UpdateProofOfWork field.

UpdateSignature

See Board > UpdateSignature field.