---
eip: <to be assigned>
title: ERC: Identity Proxy Contract
author: David Ammouial (@davux) <[email protected]>
status: Draft
type: Standards Track
category: ERC
created: 2019-06-04
---
Identity contracts
This ERC describes the interface used for identity management: creation of an identity, update of the information corresponding to an identity, and action on behalf of an identity.
There is a need to standardize the interface for contract-based digital identities to be used, so as to allow for interoperability between implementations.
Owner
The owner of an identity (i.e. Proxy contract) is an Ethereum address recognized by the Proxy contract to originate transactions that the Proxy contract will forward. While the address of a Proxy contract is permanent, owners may be added and removed as needed.
This EIP defines 2 interfaces: Proxy
and Id
. This is subject to change in the future.
This interface provides the following functions:
constructor
The constructor is used to instantiate a new identity (i.e. Proxy contract). It takes a firstOwner
address of that proxy.
constructor(firstOwner) public
forward
Used to instruct the smart contract to execute a given function (in the form of its bytecode data
) and/or transfer a certain value
of ethers to a given destination
smart contract.
function forward(address destination, uint value, bytes data) public;
id
Returns the address of current Id contract.
function id() public returns (address)
setId
Used to define the newId
address of the Id contract to be used for this Proxy identity.
function setId(address newId) public
isOwner
Returns whether a given address is allowed to execute forward
on the smart contract.
function isOwner(address) public returns (bool);
addOwner
function addOwner(address newOwner) public;
Used to add a newOwner
address as an owner of the smart contract.
renounce
Used to renounce ownership of the smart contract.
function renounce() public;
In addition, this EIP defines the following events:
OwnerAdded
This event is emitted everytime a newOwner
address is added to the contract.
OwnerAdded(address indexed newOwner)
OwnerRemoved
This event is emitted everytime a formerOwner
address is removed from the contract.
OwnerRemoved(address indexed formerOwner)
The Proxy contract defined above is meant to be permanent and minimalistic so as to reduce the probability of a need for upgrade. To achieve that purpose, the Id contract is meant to provide additional information and for its logic and/or ABI to evolve over time as need arises.
The Id contract provides the following functions.
constructor
The constructor instantiates the Id contract. It takes as only argument the _controller
address, i.e. the address of the Proxy contract that this contract extends.
profiles
This function returns the URL of the profile for a given profileName
.
function profiles(bytes16 profileName) public returns (string url);
Any profileName
may be used. The name public
is reserved and is optionally used to provide publicly discoverable information about the corresponding identity. The returned URL SHOULD be the location of a Verifiable Presentation as defined by the Verifiable Credentials Working Group at the W3C.
setProfile
This function sets the url
for the profile of a given name
.
function setProfile(bytes16 name, string url) public;
For digital identity to be self-sovereign, it needs to be able to rely on a trusted, decentralized backbone. Ethereum blockchain is a satisfying component for that requisite.
This EIP doesn't introduce any known backwards compatibility issues. However, it does a similar job as other ERCs such as ERC-725 and others, and there are plans to integrate the most recent developments into this EIP.
MyTrust mobile application provides an implementation of the Proxy and Id contracts.
Copyright and related rights waived via CC0.