We are early in developing the GeoDID spec. For now, we are focused on storing
geojsonvector spatial data structures, and
geotiffraster data. The GeoDID specification is designed to be flexible and identify any spatial dataset in any format - even ones that haven't been developed yet.
did:geo. Per the DID specification, this string MUST be in lowercase. The remainder of the DID after the prefix, is specified below.
geo-did = "did:geo:" + geo-specific-identifier
geo-specific-identifier = new CID(0, 'dag-pb', hash, 'base58btc')
hash = multihash(byte, sha2-256)
byte = new TextEncoder().encode(ethereum address + UNIX Time)
<geo-specific-identifier>referenced above is created by computing a sha2-256 multihash on the byte representation of the DID controller's ethereum address + Unix time:
multihash(ethAddress + time, sha2-256).Then we create a new CID Block by encoding the multihash with a base58 encoding. This will return a cid that will act as the identifier for the GeoDID.
servicearray in the GeoDID will contain several references to other GeoDIDs and/or assets. The idea is that if the GeoDID is the root DID in the hierarchy, regardless of its type, then it has the base DID identifier. If the GeoDID is a sub-collection or sub-item then it is referenced via path, and if it is an asset within the sub-item's service array, then it is referenced via fragment.
resolve(<GeoDID ID>)method at contract address
<0x___TBD___>on Ethereum's Ropsten testnet. This contract method will first verify that the user has access to this GeoDID by checking to make sure that his address registered the GeoDID via the create method. The contract will store a mapping from the user's address to GeoDID IDs.
identityOwner(address identity)on the deployed version of the ERC1056 contract.
publicKeywith the id set as the DID with the fragment
authenticationarray of the DID document with type
ipfs://<CID>), or by resolving via a gateway, like
ipfs.io/ipfs/<GeoDID Document CID>
update(<GeoDID ID>)method at contract address
<0x_____>on the Ropsten testnet.
fetchVersionHistory(<GeoDID fragment>)and retrieve all the CIDs of historical GeoDID documents.
deactivate(<GeoDID fragment>)method. This simply sets that GeoDID's
false- it does not remove information from the smart contract about the historical versions of the GeoDID. It does, however, mean that future attempts to resolve that GeoDID will not succeed.