A library to use an adjusted Paxos protocol with Solid inboxes and Linked Data Notifications.
The algorithm is the general Paxos algorithm with two adjustments:
- every message has an accompanying Acknowledgement, allowing the sender to be sure the Linked Data Notification was delivered in the inbox
- the second step of the second phase (the
Accepted
step) has been extended to allow a user to reject a consensus value.
To start the processing of inbox elements and sending outbox elements, the inboxCron
and outboxCron
functions have to be executed once, they will in turn start the cronjobs.
To start a consensus, you must use the sendPrepare
function and give the Paxos element, this should be an object similar to the following:
{
"name": "The name of the paxos algorithm, used as an ID",
"instance": "The instance of the paxos algorithm, usually this increases by 1 every time a new consensus is started",
"round": "The paxos round of one instance",
"inbox": "http://example.com/inbox/of/the/proposer",
"inboxArray": ["list of", "inboxes of all acceptors"]
}
Furthermore, the value to be agreed upon should be stored in ${name}|${instance}|value to accept
.
This library will then exchange messages with the acceptors automatically (via the cronjobs) until user interaction is required to accept or reject the value.
The list of pending accepts to which the user has to respond can be found in the localStorage with key "awaitingAccepts"
.
To respond to this pending accept, the createAccepted
function should be used with the element to which is replied upon as first argument and a boolean indicating whether it is accepted as the second.
When one of the Acceptors rejects the value, the instance is noted as failed.