Skip to content

An implementation of The Kimberley Process' certificate issuing process built on the Ethereum blockchain

License

Notifications You must be signed in to change notification settings

triage/KPCSEthereum

Repository files navigation

KimberlyProcessEthereum

An implementation of The Kimberley Process's certificate issuance and validation system built on the Ethereum blockchain.


My complete thoughts on diamonds, the diamond industry and The Kimberley Process are available here: http://romancingthestones.diamonds


About

The Kimberley Process (KP) is a joint government, industry and civil society initiative to stem the flow of conflict diamonds – rough diamonds used by rebel movements to finance wars against legitimate governments.

Implementation of the KP is outlined in the KPCS Core Document.

In order to bring both transparency and integrity to the KP, my proposal is to put the entirety of the certificate issuance process, including all participants, authorities, observers, agents and parties, on the Ethereum blockchain. The specific features of the blockchain (cryptographically-enforced security, immutability, transparency, public availability of data) could be a dramatic improvement over the current system of paper certificates and their known weaknesses, such as forgery, varying certificate security features and design, and overly-generous expiration dates (and therefore the possibility of re-use).

A more general overview of my proposal is available here on Medium.com


Definitions

Participant

Member countries that are participants in The Kimberley Process. Here is a current list of participant countries

Participant Authority

An authority designated by the Particpant with the power to issue certificates. For example, the Ministry of Mines and Mineral Resources (Sierra Leone). These authorities do not issue certificates directly, but rather delegate those powers to specific employees, or agents.

Participant Agent

An individual designated by a Participant Authority with the power to issue certificates.

Party

An entity or individual acting as either the source or destination of the shipment of rough diamonds over international borders, ie a rough diamond trader, manufacturer or mining company.


Certificate issuance process:

1. A certificate is created by the exporting party, with references to:

  • the importing party we are sending the shipment to
  • the source participant
  • the destination participant
//Certificate.sol:
    function Certificate(address _kpcs,
        address _exporter,
        address _importer,
        address _participantSource,
        address _participantDestination)
    ...
}

Each certificate must contain the following data:

  1. Participants

    • Origins: geological origins where goods were mined from. Note: This value is not set directly, but is derived from the origins of the parsels.
    • Source: participant country the shipment is being sent from.
    • Destination: participant country the shipment is being sent to.
  2. Agents

    • Exporting: agent delegated by source participant's exporting authority the power to sign certificates.
    • Importing: agent delegated by destination participant's importing authority the power to sign certificates.
  3. Parties

    • Exporting: entity or individual goods are being sent from
    • Importing: entity or individual goods are being sent to
  4. Parsels

    • An array consisting of parsels of goods included in the shipment. Data includes:
      • carats
      • value
      • geological origins

2. Parsels are added to the certificate:

//Certificate.sol
function addParsel(uint carats,
	uint value,
	address[] origins) {
		...
}

Each parsel contains:

  • Carats
  • Assessed value
  • Addresses of participant countries of geological origins

Finally, the creator must call: Certificate.completedAddingParsels to complete the parsel addition process, and request the authorities and parties to sign the certificate

3. Await signatures from:

  1. Importing party
  2. Exporting authority's agent
  3. Importing authority's agent
//Certificate.sol
function sign() {
	...
}

Upon receipt of the last required signature (order is unimportant), the certificate is issued and shipment is cleared for the final step: validation.

4. Certificate must be added to the main instance of KPCS.

This ensures that all participants noted on the certificate are recognized by the main instance of KPCS, therefore validating the certificate and adding a reference to it to from the main KPCS instance.

5. Importing authority marks shipment as received:

//Certificate.sol:
function markAsReceived() {
	...
}

Upon acknowleged receipt of the shipment, the importing authority marks the certificate as received, completing the certificate. Note: according to the KPCS Core Document, this step is optional.

About

An implementation of The Kimberley Process' certificate issuing process built on the Ethereum blockchain

Resources

License

Stars

Watchers

Forks

Packages

No packages published