Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Request for Comment on Proposed EIP Standard for Storing GeoTimelines To and Retrieving GeoTimelines from Blockchain #95

Open
marleymarl opened this issue Apr 27, 2020 · 3 comments

Comments

@marleymarl
Copy link
Owner

marleymarl commented Apr 27, 2020

As drafted here: https://github.com/marleymarl/EIPs/edit/eip-2611/EIPS/eip-2611.md

Content below.


eip: 2611
title: Geotimeline Contact Tracing Data Standard
author: Greg Marlin (@marleymarl)
discussions-to: #95
status: Draft
type: Standards Track
category: ERC
created: 2020-04-23

Simple Summary

A standard interface for storing to and retrieving from the blockchain historical points of location and time, collectively those points forming a geotimeline for individuals, for the purpose of contact tracing for COVID-19 and any other pandemic, in an anonymous and private way, while at the same time ensuring data integrity.

Abstract

This standard outlines a smart contract interface for recording and retrieving geotimelines for the purpose of contact tracing. The key issue is that it is important to share this data and at the same time maintain privacy and anonymity of both confirmed cases of COVID and of those people wanting to check their geotimelines against that data. At the same time it is important to provide a way to ensure that the data is entered through trusted parties. The Geotimeline standard enables contact tracing organizations to be whitelisted before securely, anonymously and privately storing this information and making it available for retrieval.

Motivation

Contact tracing is a critical activity for reducing the spread of COVID-19 and other pandemic viruses, and in helping to mitigate risks after the end of quarantine periods. Key issues related to contact tracing include data integrity and availability, as well as individual privacy and anonymity.

The GeoTimeline international team of volunteers have been working on an open source map data input front-end component library that makes it easy to capture geotimelines, points of location and time that each represent a set of historical footprints that identify to one person but protect privacy and anonymity through the assignment of random uuids.

Contact tracing workers capture this information by clicking on a map and adding a date and time to associate with that latitude and longitude point using a pop-up modal form. After a set of these points with date and time are collected, they are saved as one geotimeline.

The GeoTimeline Application can be used by contact tracing organization that are typically made up of many human team members interviewing people and recording the information.

This standard addresses the issues of privacy and anonymity as well as data integraty and availability in the following ways:

  • Contact tracing organizations are added to a whitelist to add geotimeline data to the blockchain using their public wallet addresses.
  • Thus only whitelisted organization addresses can sign transactions to add data
  • Privacy and anonymity of the individual people whose whereabouts and status are represented by the geotimeline are protected through no Personally Identifiable Information being associated with the geotimeline. Each geotimeline is made up only of the data points of date/time and lat/long points. The identifier is the id generated for the geotimeline on the blockchain, which is the index of the geotimeline in the geotimelines array.

By applying this standard, GeoTimeline will integrate secure signing and authentication of a trusted party through the integration of an Ethereum wallet on the frontend (using MetaMask / web3.js) to be used to prove the organization entering the data is a verified organization. The geotimelines will be represented on the blockchain as an address with associated geotimeline bounding box coordinates and status (confirmed case, suspect, not suspect, recovered). Nothing will be able to be tied back to an individual's personal identity by looking at the blockchain. At the same time they key information that is needed to be open and available will be there and queryable, namely the geotimeline information.

Specification

Methods

geotimeline

Returns the hash of set of footprints associated with a timeline address, along with it geotimeline bounding box values (2 geohashes representing top-left and bottom-right lat/lon values and 2 timestamps representing earliest time and latest time)

function geotimeline(uint geotimelineId) public view returns(string geotimelineHash, uint earliestTime, uint latestTime, string upperLeftGeoHash, string bottomRightGeoHash, string status)

getAllGeoTimelines

Returns all timeine addresses that fall within geotimeline bounding box values (timestamps falling in between earliestTime and lastestTime and geohashes falling in between upperLeftGeoHash and bottomRightGeoHash)

function getAllGeoTimelines(uint earliestTime, uint latestTime, string upperLeftGeoHash, string bottomRightGeoHash) public view returns(GeoTimeline[], geotimelines)

addGeoTimeline

Saves a timeline using an IPFS hash representing all footprints in a geotimeline, along with its bounding box values of start date/time, end date/time, upper-left geohash and bottom-right geohash as well as status (confired case, not suspect, suspect, recovered)

function addGeoTimeline(string geotimelineHash, uint earliesttime, uint latesttime, string upperLeftGeoHash, string bottomRightGeoHash, string status) public onlyVerifiedOrganization(msg.sender) returns(uint geotimelineId)

addVerifiedOrganization

Adds the wallet address of a contact tracing organization to a list of approved addresses that can add geotimeline data

function addVerifiedOrganization(address newVerifiedOrganization, string _name) public onlyOwner returns(uint verifiedOrganizationId)

isVerifiedOrganization

Adds the wallet address of a contact tracing organization to a list of approved addresses that can add geotimeline data

function isVerifiedOrganization(address verifiedOrganization) public constant returns(bool)

updateTimelineStatus

Updates the status of a given timeline to reflect a new value (non suspect, suspect, confirmed, recovered)

function updateTimelineStatus(uint geotimelineId, string newStatus) public returns(bool success)

Events

GeoTimelineAdded

MUST trigger when a new geotimeline is added.

event GeoTimelineAdded(uint geotimelineId)

VerifiedOrganizationAdded

MUST trigger when a new verifiedOrganization is added.

event VerifiedOrganizationAdded(address verifiedOrganization)

VerifiedOrganizationRemoved

MUST trigger when a verifiedOrganization is removed.

event VerifiedOrganizationRemoved(address verifiedOrganization)

ConfirmedCaseUpdate

MUST trigger when the status of a geotimeine is updated to confirmed.

event ConfirmedCaseUpdate(uint geotimelineId, string status);

Rationale

The proposed solution was designed to provide a way to address key issues of data integrity and availability, while at the same time ensuring anonymity and privacy of the individuals whose geotimelines are being stored on and retrieved from the blockchain.

By creating an EIP, we hope to increase the use of Ethereum as an open immutable data store for contact tracing data and encourage contact tracing organizations to thus make this data open and available while preserving privacy and anonymity.

Test Cases

GeoTimeline will be implementing this within its project and will be approaching contact tracing organizations to use it within the framework of the overall contact tracing solution. This section will be updated when GeoTimeline has deployed a smart contract based on this standard to the Ropsten test network.

Implementation

Copyright

Copyright and related rights waived via CC0.

@marleymarl
Copy link
Owner Author

Based on comment from @finneykewa we should look to add a Whitelister role (e.g. that would be used by a verifiedOrganization testing center) that would enable them to add individuals to the whitelist to add geotimelines to the blockchain. In this case the individuals would be in essence verifiedOrganizations but could be limited to the number of geotimelines they can add (e.g. 1 per address). In practical terms this could be bundled with a wallet (mobile or browser-based) that a testing center could issue to the individual being tested as part of the testing workflow.

@BaNazari
Copy link
Collaborator

BaNazari commented May 1, 2020

isVerifiedOrganization
Adds the wallet address of a contact tracing organization to a list of approved addresses that can add geotimeline data

Seems this definition is repeated from the previous one.

@marleymarl
Copy link
Owner Author

isVerifiedOrganization
Adds the wallet address of a contact tracing organization to a list of approved addresses that can add geotimeline data

Seems this definition is repeated from the previous one.

You are right, nice catch. :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants