Registrar Backers
Unlike witness backers, registrar backers have associated metadata that specifies the registry or ledger upon which the registrar backer anchors the KEL events.
Originally it was proposed that registrar backers be indicated by using a transferable identifier derivation code but have an inception event with a null next field. This would make the registrar identifier effectively non-transferable but provide an inception event that could anchor meta-data. However, this would break a lot of witness-related code, which expects that the witness identifiers are explicit, not merely effectively non-transferable.
This revised proposal uses explicit non-transferable identifiers for backers but adds a new config trait to indicate that the backers are registrars and adds a new seal type to indicate the anchor for the metadata.
Config Trait
RB
for registrar backers or ledger registry backed instead of witness pool backed.
Registrar Seal
{
"bi": "BACDEFG8JZAoTNZH3ULvaU6JR2nmwyYAfSVPzhzS6b5CM",
"d" : "EaAoTNZH3ULvYAfSVPzhzS6b5CMaU6JR2nmwyZ-i0d8J"
}
The bi
field in the seal is the non-transferable identifier of the registrar backer (backer identifier). The first seal appearing in the a
field list in the containing event with that registrar backer identifier is the authoritative one for that registrar (in the event that there are multiple registrar seals for the same bi
value).
The seal must appear in the same establishment event that designates the registrar backer identifier as a backer identifer in the event's backer's list. Attached to the designating establishment event is a bare, bar
, message that includes the registrar's metadata. Metadata could include, the address used to source events onto the ledger and a service endpoint for the leger registrar and a corresponding ledger oracle.
The d
in the seal MUST BE the SAID of the associated metadata SAD. The SAD may appear as the value of the sd
seal data field in a bare, bar
message..
Bare Message
The bare, bar
, message provides either a solicited or unsolicited disclosure of anchored data. It includes a reference to the establishment event, and its route indicates that it contains registrar metadata.
{
"v": "KERI10JSON00011c_",
"t": "bar",
"d": "EFGKDDA8JZAoTNZH3ULvaU6JR2nmwyYAfSVPzhzS6b5CM",
"r": "process/registrar/bitcoin",
"a":
{
"d" : "EaU6JR2nmwyZ-i0d8JZAoTNZH3ULvYAfSVPzhzS6b5CM",
"i" : "EAoTNZH3ULvYAfSVPzhzS6baU6JR2nmwyZ-i0d8JZ5CM",
"s" : "5",
"bi", "BACDEFG8JZAoTNZH3ULvaU6JR2nmwyYAfSVPzhzS6b5CM",
"sd":
{
"d": "EaAoTNZH3ULvYAfSVPzhzS6b5CMaU6JR2nmwyZ-i0d8J",
"stuff": "meta data field"
}
}
}
The r
field is the route. It is the equivalent of the resource path in a ReST interface but because KERI must support peer-to-peer asynchronous protocols (i.e. can't depend on http or ReST) the messages explicitly include a route that indicates resource being returned when unsolicited or the return route when solicited.
in the a
block:
d
, i
, and s
indicate the event holdeing the backer seal. said of event, identifier prefix of the event, sequence number of event.
bi
is from the backer identifier from the backer seal.
sd
is the seal data SAD field block. The nested d
said of this block MUST be the d
field in the associated seal.
As an option, a registrar's metadata could be updated by anchoring a new metadata seal and promulgating a new bare, bar
, message whose route indicates that it is updating leger registrar metadata. This allows registrar metadata to be updated in an interaction event.
A more secure approach to updating registrar metadata is to rotate the registrar's identifier in an establishment event and then provide the new metadata as the metadata for the new registrar identifier.
Prod Message
The prod, pro
, message provides a solicitation, i.e. a disclosure request, for disclosure via a bare, 'bar` response.
{
"v": "KERI10JSON00011c_",
"t": "pro",
"d": "EZ-i0d8JZAoTNZH3ULaU6JR2nmwyvYAfSVPzhzS6b5CM",
"r": "registrar/bitcoin",
"rr": "process/registrar/bitcoin",
"q":
{
"d" : "EaU6JR2nmwyZ-i0d8JZAoTNZH3ULvYAfSVPzhzS6b5CM",
"i" : "EAoTNZH3ULvYAfSVPzhzS6baU6JR2nmwyZ-i0d8JZ5CM",
"s" : "5",
"bi", "BACDEFG8JZAoTNZH3ULvaU6JR2nmwyYAfSVPzhzS6b5CM",
"sd": "EaAoTNZH3ULvYAfSVPzhzS6b5CMaU6JR2nmwyZ-i0d8J"
}
}
The r
field is the route. It is the equivalent of the resource path in a ReST interface but because KERI must support peer-to-peer asynchronous protocols (i.e. can't depend on http or ReST) the messages explicitly include a route to the resource being requested.
The rr
field is the return route. Because KERI must support peer-to-peer asynchronous protocols (i.e. can't depend on http or ReST) the messages explicitly includes a return route so that the resource being requested is returned to the correct processor on the receiving end.
The request message, in this case the pro
, prod, includes both route, r
and return route, rr
fields. The route is the path to the resource on the server host and the return route tells the server host how to return it. The r
field in the corresponding bare, bar
message is assigned the value of the rr
field in the triggering pro
, prod message.
An unsolicited bare, bar
message uses a well known value for the resource as determined by agreement or the type of data being sent unsolicited. That is resource dependent.
in the q block:
d
, i
, and s
indicate the event holdeing the backer seal. said of event, identifier prefix of the event, sequence number of event.
bi
is from the backer identifier from the back seal.
sd
field is the said d
from the backer seal i.e. seal data said