📄 | .gitignore |
📄 | README.md |
📁 | assets |
📄 | index.js |
📄 | package.json |
📁 | schemas |
Sharding Abaddon's Soul
Important
- Abaddon's soul is never committed to the database. It is sharded, and discarded. At no stage is it compromised.
- All messages are private and encrypted either between the individuals involved or between the group.
Event Flow
Invitee | Response | Secret Shard |
---|---|---|
Khan | Accepted | 8019f3e33db69e5ef15288ad22ce231f357e03bb1fd7c2cda17eb0b898d9b29efef1829a909769238ce27 |
Dan | Accepted | 802b19843774fa19badbf25224a2df7fcd1280bd2a788d166aca3a0c9457e61ee73a0a86b44076589ed8c |
Jak | Rejected | N/A |
Al | Accepted | 8032fa602ac434418b8feaf9f66bfc67c86ad30075ad4fdd9bb20ab34c8c5486f9cd781a64d10f7d323ca |
Smeggy | Never Responded | N/A |
Leggy | Accepted | 804029ae6b9f99a086195fa5ddc479d025e8aff114e2da1fe7784bf669f480e351c688260cd90a7c86a3f |
Bob | Accepted | 8059ca4a762f57f8b74d470e0f0d5ac82090fc4c4b3718d416007b49b12f327b4f31fabadc4873592a479 |
1. Invitations
Abaddon the Despoiler selects a list of his best reavers from his Chaos Army.
Abaddon hits confirm and the invitations send.
What does this do?
- Writes a
secret_root
object to the database, references the author as Abaddon with his ID - Links together all relevant information for any specific secret sharing process
- Each receives a
secret_invite
that references the rootId
Therefore
- Abaddon is not restricted to just sharding his SSB key, he can shard anything he likes.
- Abaddon can send out more invitations.
All of Abaddon's different secret sharing root
events can be summoned using:
api.secrets.root.get(callback)
api.secrets.root.stream()
Invites can be viewed through the API and a FlumeView... something along the lines of:
api.secrets.invites.get(rootId, callback)
api.secrets.invites.stream(rootId)
2. Responses
Each ally recieves a secret_invite
and, if they're a dependable evil ally, they can send back a secret_response
to either accept
or reject
the trust that Abaddon has placed in them. If they're not a regular scuttler, its likely they might not respond in time before Abaddon makes his final decision to share his soul.
What does this do?
- A response writes a
secret_response
that indicates whether they accepted the invite or not - References the rootId so can be easily filtered through the API / a FlumeView
api.secrets.responses.get(rootId, callback)
api.secrets.responses.stream(rootId)
3. Trustees
Abaddon decides its time to proceed with his super evil plan and shard his soul...
I now have enough super evil allies. I can split my soul into pieces and give them each a piece so I can become immortal. Muhahahahaaa...
What does this do?
- Displays a list of all invited folk
- Shows a tick and a checkbox next to those that responded and accepted Abaddon's invite.
- Shows a cross next to those that rejected his invite.
- Shows a circle (or something) next to those who have yet to respond.
Therefore
- Abaddon can now select the ones he really trusts, his inner circle.
- Abaddon can now set a
quorum
of cosigners required to combine his sharded soul and make him mortal again. - Abaddon can now select whether he wants the final cosigners to know who eachother are. Does he trust them enough not to conspire against his evil plans for immortality?
- Abaddon then hits send, his soul is sharded as he screams into the abyss.
Generates a
secret_trustees
event which includes:- IDs of the final cosigners
- The required number of cosigners to release his secret
If Abaddon enabled it, those within that group of final cosigners can now see who eachother are.
- Immediately triggers the Secrets event
api.secrets.trustees.get(rootId, callback)
api.secrets.trustees.stream(rootId)
Questions
- Does having a secretive or non-secretive sharding require two different types of event? Or is it just a boolean flag? Needs clarification as it depends how the data is scuttled...
4. Secrets
Immediately after Abaddon has confirmed the sharding of his soul, and the trustees log has been created, each member of the trustees will be gossiped a private message detailing their own shard. The author is Abaddon and the recipient
What does this do?
- Each trustee receives a shard of Abaddon's soul.
api.secrets.pieces.get(rootId, callback)
api.secrets.pieces.stream(rootId)
// Needs more thought... Should the trustees know the root? Do they need to?
Note:
secret_invite
andsecret_response
looks a lot like Patchbay'sssb-chess
:chess_invite
andchess_accept
.
Built with git-ssb-web