You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Jun 12, 2022. It is now read-only.
This unofficial discussion thread is for the Hydro Community to discuss ERC-1484!
Simple Summary
A protocol for aggregating digital identity information that's broadly interoperable with existing, proposed, and hypothetical future digital identity standards.
Abstract
This EIP proposes an identity management and aggregation framework on the Ethereum blockchain. It allows entities to claim an identity via a singular Identity Registry smart contract, associate this Identity with Ethereum addresses in a variety of meaningful ways, and use it to interface with smart contracts, enabling arbitrarily complex identity-related functionality.
Motivation
Emerging identity standards and related frameworks proposed by the Ethereum community (including ERCs/EIPs 725, 735, 780, 1056, etc.) define and instrumentalize digital identity in a variety of ways. As existing approaches mature, new standards emerge, and isolated, non-standard approaches to identity develop, managing multiple identities will become increasingly burdensome and involve the unnecessary duplication of work.
The proliferation of on-chain identity solutions can be traced back to the fact that each codifies a notion of identity and links it to specific aspects of Ethereum (claims protocols, per-identity smart contracts, signature verification schemes, etc.). This proposal eschews that approach, instead introducing a protocol layer in between the Ethereum network and individual identity applications. This solves identity management and interoperability challenges by enabling any identity-driven application to leverage an un-opinionated identity management protocol.
Definitions
Identity Registry: A single smart contract which is the hub for all Identities. The primary responsibility of the Registry is to enforce a global namespace for Identities, which are individually denominated by Ethereum Identification Numbers (EINs).
Identity: A data structure containing all the information relevant to a particular identity. They are denominated by EINs (incrementing uints), which are unique but uninformative.
Associated Address: An Ethereum address publicly associated with an Identity. In order for an address to become an Associated Address for an Identity, the Identity must produce signed messages from the candidate address and an existing Associated Address indicating this intent. Identities can remove an Associated Address by producing a signed message indicating intent to disassociate itself from the Identity. Signatures are stored in the Registry to prevent replay attacks. An address may only be an Associated Address for one Identity at any given time.
Provider: An Ethereum address (typically but not by definition a smart contract) authorized to add and remove Associated Addresses, Providers, and Resolvers from Identities who have authorized the Provider to act on their behalf. Providers exist to facilitate user adoption, and make it easier to manage Identities.
Resolver: A smart contract containing arbitrary information pertaining to Identities. A resolver may implement an identity standard, such as ERC-725, or may consist of a smart contract leveraging or declaring identifying information about Identities. These could be simple attestation structures or more sophisticated financial dApps, social media dApps, etc. Each Resolver added to an Identity makes the Identity more informative.
Recovery Address: An Ethereum address (either an account or smart contract) that can be used to recover lost identities as outlined in the Recovery section.
Poison Pill: In the event of irrecoverable control of an Identity, the Poison Pill offers a contingency measure to permanently disable the Identity. It removes all Associated Addresses and Providers while preserving the Identity (and optionally, Resolvers). Evidence of the existence of the Identity persists, while control over the Identity is nullified.
Specification
A digital identity in this proposal can be viewed as an omnibus account, containing more information about an identity than any individual identity application could. This omnibus identity is resolvable to an unlimited number of sub-identities called Resolvers. Resolvers recognize identities by any of their Associated Addresses. The protocol allows for an atomic entity, the Identity, to be resolvable to abstract data structures, the Resolvers.
The protocol revolves around claiming an Identity and managing Associated Addresses and Resolvers. Identities delegate much of this responsibility to one or more Providers. Provider smart contracts or addresses may add and remove Resolvers indiscriminately, but may only add and remove Associated Addresses or other Providers with the appropriate permissions.
Identity Registry
The Identity Registry contains functionality to mint new Identities and for existing Identities to manage their Providers, Associated Addresses, and Resolvers. It is important to note that this registry fundamentally requires transactions for every aspect of building out an Identity. However, recognizing the importance of accessibility to dApps and identity applications, we empower Providers to build out Identities on the behalf of users, without requiring users to pay gas costs.
Due to the fact that multiple addresses can be associated with a given identity (though not the reverse), Identities are denominated by EINs. This uint can be encoded in QR format or transformed into more user-intuitive formats, such as a string, in registries at the Provider or Resolver levels.
Address Management
The address management function consists of trustlessly connecting multiple user-owned Associated Addresses to an Identity. It does not give special status to any particular Associated Address, rather leaving this specification to identity applications built on top of the protocol - for instance, management, action, claim and encryption keys denominated in the ERC-725 standard, or Identifiers and delegates as denominated in ERC-1056. This allows a user to access common identity data from multiple wallets while still:
retaining flexibility to interact with contracts outside of their identity
taking advantage of address-specific permissions established at the application layer of a user's identity.
Trustlessness in the address management function is achieved through a signature and verification scheme that requires two signatures - one from an address already within the registry and one from the address to be claimed. Importantly, the transaction need not come from the original user, which allows entities, governments, etc. to bear the overhead of creating a core identity. To prevent a compromised Associated Address from unilaterally removing other Associated Addresses, removal of an Associated Address also requires a signature from the address to be removed.
Provider Management
While the protocol allows for users to directly call identity management functions, it also aims to be more robust and future-proof by allowing arbitrary smart contracts to perform identity management functions on a user's behalf. A Provider set by an identity can perform address management and resolver management functions by passing a user's EIN in function calls. In order to prevent Identities from adding an initial Provider that does not implement the functionality to add other Providers, identities may add Providers directly from the Identity Registry.
Resolver Management
A Resolver is any smart contract that encodes information which resolves to an Identity. We remain agnostic about the specific information that can be encoded in a resolver and the functionality that this enables. The existence of resolvers is primarily what makes this ERC an identity protocol rather than an identity application. Resolvers resolve abstract data in smart contracts to an atomic entity, the Identity.
Recovery
The specification includes a Recovery Address to account for instances when users lose control over an Associated Address. Upon Identity creation, the public Recovery Address is passed as a parameter by a provider. Recovery functionality is triggered in three scenarios:
1. Changing Recovery Address: If a recovery key is lost, a provider can initiateRecoveryAddressChange through a Provider. To prevent malicious behavior from someone who has gained control of an Associated Address or Provider and is changing the Recovery Address to one under their control, this triggers a 14 day challenge period during which the old Recovery Address may reject the change. If the Recovery Address does not reject the change within 14 days, the Recovery Address is changed. However, during the fourteen day period, the Recovery Address can dispute the change request by calling triggerRecovery.
2. Recovery: Recovery occurs when a user recognizes that an Associated Address or the Recovery Address belonging to the user is lost or stolen. In this instance a Recovery Address must call triggerRecovery. This removes all Associated Addresses and Providers from the corresponding Identity and replaces them with an address passed in the function call. The Identity and associated Resolvers maintain integrity. The user is now responsible for adding the appropriate un-compromised addresses back to their Identity.
3. Poison Pill
The Recovery scheme offers considerable power to a Recovery Address; accordingly, the Poison Pill is a nuclear option to combat malicious control over an Identity when a Recovery Address is compromised. If a malicious actor compromises a user's Recovery Address and triggers recovery, any address removed in the Recovery process can call triggerPoisonPill within 14 days to permanently disable the Identity. The user would then need to create a new Identity, and would be responsible for engaging in recovery schemes for any identity applications built in the Resolver or Provider layers.
Alternative Recovery Considerations
We considered many possible alternatives when devising the Recovery process outlined above. We ultimately selected the scheme that was most un-opinionated, modular, and consistent with the philosophy behind the Associated Address, Provider, and Resolver components. Still, we feel that it is important to highlight some of the other recovery options we considered, to provide a rationale as to how we settled on what we did.
High Level Concerns
Fundamentally, a Recovery scheme needs to be resilient to a compromised address taking control of a user's Identity. A secondary concern is preventing a compromised address from maliciously destroying a user's identity due to off-chain utility, which is not an optimal scenario, but is strictly better than if they've gained control.
Alternative 1: Nuclear Option
This approach would allow any Associated Address to destroy an Identity whenever another Associated Address is compromised. While this may seem severe, we strongly considered it because this ERC is an identity protocol, not an identity application. This means that though a user's compromised Identity is destroyed, they should still have recourse to whatever restoration mechanisms are available in each of their actual identities at the Resolver and/or Provider level. We ultimately dismissed this approach for two main reasons:
It is not robust in cases where a user has only one Associated Address
It would increase the frequency of recovery requests to identity applications due to its unforgiving nature.
Alternative 2: Unilateral Address Removal via Providers
This would allow Providers to remove an Associated Address without a signature from said address. This implementation would allow Providers to include arbitrarily sophisticated schemes for removing a rogue address - for instance, multi-sig requirements, centralized off-chain verification, user controlled master addresses, deferral to a jurisdictional contract, and more. To prevent a compromised Associated Address from simply setting a malicious Provider to remove un-compromised addresses, it would have required a waiting period between when a Provider is set and when they would be able to remove an Associated Address. We dismissed this approach because we felt it placed too high of a burden on Providers. If a Provider offered a sophisticated range of functionality to a user, but post-deployment a threat was found in the Recovery logic of the provider, Provider-specific infrastructure would need to be rebuilt. We also considered including a flag that would allow a user to decide whether or not a Provider may remove Associated Addresses unilaterally. Ultimately, we concluded that only allowing removal of Associated Addresses via the Recovery Address enables equally sophisticated recovery logic while separating the functionality from Providers, leaving less room for users to relinquish control to potentially flawed implementations.
Importantly, the Recovery Address can be a user-controlled wallet or another address such as a multisig wallet or smart contract. This allows for sophisticated recovery structures that can be compliant, e.g. with standards such as DID.
Rationale
We find that at a protocol layer, identities should not rely on specific claim or attestation structures, but should instead be a part of a trustless framework upon which arbitrarily sophisticated claim and attestation structures may be built.
The main criticism of existing identity solutions is that they're overly restrictive. We aim to limit requirements, keep identities modular and future-proof, and remain un-opinionated regarding any functionality a particular identity component may have. This proposal gives users the option to interact on the blockchain using an arbitrarily robust Identity rather than just an address.
Preforms the same logic as mintIdentity, but is called by a Provider. This function requires a signature for the associatedAddress to confirm their consent.
pragma solidity^0.4.24;
contractERC1484 {
event IdentityMinted(
uintindexedein,
addressrecoveryAddress,
addressassociatedAddress,
addressprovider,
address[] resolvers,
booldelegated
);
event AddressAdded(uintindexedein, addressaddedAddress, addressapprovingAddress, addressprovider);
event AddressRemoved(uintindexedein, addressremovedAddress, addressprovider);
event ProviderAdded(uintindexedein, addressprovider, booldelegated);
event ProviderRemoved(uintindexedein, addressprovider, booldelegated);
event ResolverAdded(uintindexedein, addressresolvers, addressprovider);
event ResolverRemoved(uintindexedein, addressresolvers, addressprovider);
event RecoveryAddressChangeInitiated(uintindexedein, addressoldRecoveryAddress, addressnewRecoveryAddress);
event RecoveryTriggered(
uintindexedein,
addressrecoveryAddress,
address[] oldAssociatedAddresses,
address[] oldProviders,
addressnewAssociatedAddress
);
event Poisoned(
uintindexedein,
addressrecoveryAddress,
address[] oldAssociatedAddresses,
address[] oldProviders,
address[] oldResolvers,
addresspoisoner,
boolresolversCleared
);
function identityExists(uintein) publicviewreturns (bool);
function hasIdentity(address_address) publicviewreturns (bool);
function getEIN(address_address) publicviewreturns (uintein);
function isAddressFor(uintein, address_address) publicviewreturns (bool);
function isProviderFor(uintein, addressprovider) publicviewreturns (bool);
function isResolverFor(uintein, addressresolver) publicviewreturns (bool);
function getDetails(uintein) publicviewreturns (
addressrecoveryAddress, address[] associatedAddresses, address[] providers, address[] resolvers
);
function mintIdentity(addressrecoveryAddress, addressprovider, address[] resolvers) publicreturns (uintein);
function mintIdentityDelegated(
addressrecoveryAddress, addressassociatedAddress, address[] resolvers, uint8v, bytes32r, bytes32s
) publicreturns (uintein);
function addAddress(
uintein, addressaddressToAdd, addressapprovingAddress, uint8[2] v, bytes32[2] r, bytes32[2] s, uintsalt
) public;
function removeAddress(uintein, addressaddressToRemove, uint8v, bytes32r, bytes32s, uintsalt) public;
function addProviders(address[] providers) public;
function addProviders(uintein, address[] providers) public;
function removeProviders(address[] providers) public;
function removeProviders(uintein, address[] providers) public;
function addResolvers(uintein, address[] resolvers) public;
function removeResolvers(uintein, address[] resolvers) public;
function initiateRecoveryAddressChange(uintein, addressnewRecoveryAddress) public;
function triggerRecovery(uintein, addressnewAssociatedAddress, uint8v, bytes32r, bytes32s) public;
function triggerPoisonPill(uintein, address[] firstChunk, address[] lastChunk, boolclearResolvers) public;
}
Backwards Compatibility
Identities established under this standard consist of existing Ethereum addresses; accordingly, there are no backwards compatibility issues. Deployed, non-upgradeable smart contracts that wish to become Resolvers for Identities will need to write wrapper contracts that resolve addresses to EIN-denominated Identities.
ERC-1484 Hydro Community Discussion Forum
This unofficial discussion thread is for the Hydro Community to discuss ERC-1484!
Simple Summary
A protocol for aggregating digital identity information that's broadly interoperable with existing, proposed, and hypothetical future digital identity standards.
Abstract
This EIP proposes an identity management and aggregation framework on the Ethereum blockchain. It allows entities to claim an identity via a singular
Identity Registry
smart contract, associate thisIdentity
with Ethereum addresses in a variety of meaningful ways, and use it to interface with smart contracts, enabling arbitrarily complex identity-related functionality.Motivation
Emerging identity standards and related frameworks proposed by the Ethereum community (including ERCs/EIPs 725, 735, 780, 1056, etc.) define and instrumentalize digital identity in a variety of ways. As existing approaches mature, new standards emerge, and isolated, non-standard approaches to identity develop, managing multiple identities will become increasingly burdensome and involve the unnecessary duplication of work.
The proliferation of on-chain identity solutions can be traced back to the fact that each codifies a notion of identity and links it to specific aspects of Ethereum (claims protocols, per-identity smart contracts, signature verification schemes, etc.). This proposal eschews that approach, instead introducing a protocol layer in between the Ethereum network and individual identity applications. This solves identity management and interoperability challenges by enabling any identity-driven application to leverage an un-opinionated identity management protocol.
Definitions
Identity Registry
: A single smart contract which is the hub for allIdentities
. The primary responsibility of theRegistry
is to enforce a global namespace forIdentities
, which are individually denominated by Ethereum Identification Numbers (EINs).Identity
: A data structure containing all the information relevant to a particular identity. They are denominated by EINs (incrementinguint
s), which are unique but uninformative.Associated Address
: An Ethereum address publicly associated with anIdentity
. In order for an address to become anAssociated Address
for anIdentity
, theIdentity
must produce signed messages from the candidate address and an existingAssociated Address
indicating this intent. Identities can remove anAssociated Address
by producing a signed message indicating intent to disassociate itself from theIdentity
. Signatures are stored in theRegistry
to prevent replay attacks. An address may only be anAssociated Address
for oneIdentity
at any given time.Provider
: An Ethereum address (typically but not by definition a smart contract) authorized to add and removeAssociated Addresses
,Providers
, andResolvers
fromIdentities
who have authorized theProvider
to act on their behalf.Providers
exist to facilitate user adoption, and make it easier to manageIdentities
.Resolver
: A smart contract containing arbitrary information pertaining toIdentities
. A resolver may implement an identity standard, such as ERC-725, or may consist of a smart contract leveraging or declaring identifying information aboutIdentities
. These could be simple attestation structures or more sophisticated financial dApps, social media dApps, etc. EachResolver
added to anIdentity
makes theIdentity
more informative.Recovery Address
: An Ethereum address (either an account or smart contract) that can be used to recover lost identities as outlined in the Recovery section.Poison Pill
: In the event of irrecoverable control of anIdentity
, thePoison Pill
offers a contingency measure to permanently disable theIdentity
. It removes allAssociated Addresses
andProviders
while preserving theIdentity
(and optionally,Resolvers
). Evidence of the existence of theIdentity
persists, while control over theIdentity
is nullified.Specification
A digital identity in this proposal can be viewed as an omnibus account, containing more information about an identity than any individual identity application could. This omnibus identity is resolvable to an unlimited number of sub-identities called
Resolvers
.Resolvers
recognize identities by any of theirAssociated Addresses
. The protocol allows for an atomic entity, theIdentity
, to be resolvable to abstract data structures, theResolvers
.The protocol revolves around claiming an
Identity
and managingAssociated Addresses
andResolvers
. Identities delegate much of this responsibility to one or moreProviders
.Provider
smart contracts or addresses may add and removeResolvers
indiscriminately, but may only add and removeAssociated Addresses
or otherProviders
with the appropriate permissions.Identity Registry
The
Identity Registry
contains functionality to mint newIdentities
and for existingIdentities
to manage theirProviders
,Associated Addresses
, andResolvers
. It is important to note that this registry fundamentally requires transactions for every aspect of building out anIdentity
. However, recognizing the importance of accessibility to dApps and identity applications, we empowerProviders
to build outIdentities
on the behalf of users, without requiring users to pay gas costs.Due to the fact that multiple addresses can be associated with a given identity (though not the reverse),
Identities
are denominated by EINs. Thisuint
can be encoded in QR format or transformed into more user-intuitive formats, such as astring
, in registries at theProvider
orResolver
levels.Address Management
The address management function consists of trustlessly connecting multiple user-owned
Associated Addresses
to anIdentity
. It does not give special status to any particularAssociated Address
, rather leaving this specification to identity applications built on top of the protocol - for instance,management
,action
,claim
andencryption
keys denominated in the ERC-725 standard, orIdentifiers
anddelegates
as denominated in ERC-1056. This allows a user to access common identity data from multiple wallets while still:Trustlessness in the address management function is achieved through a signature and verification scheme that requires two signatures - one from an address already within the registry and one from the address to be claimed. Importantly, the transaction need not come from the original user, which allows entities, governments, etc. to bear the overhead of creating a core identity. To prevent a compromised
Associated Address
from unilaterally removing otherAssociated Addresses
, removal of anAssociated Address
also requires a signature from the address to be removed.Provider Management
While the protocol allows for users to directly call identity management functions, it also aims to be more robust and future-proof by allowing arbitrary smart contracts to perform identity management functions on a user's behalf. A
Provider
set by an identity can perform address management and resolver management functions by passing a user'sEIN
in function calls. In order to preventIdentities
from adding an initialProvider
that does not implement the functionality to add otherProviders
, identities may addProviders
directly from theIdentity Registry
.Resolver Management
A
Resolver
is any smart contract that encodes information which resolves to anIdentity
. We remain agnostic about the specific information that can be encoded in a resolver and the functionality that this enables. The existence of resolvers is primarily what makes this ERC an identity protocol rather than an identity application.Resolvers
resolve abstract data in smart contracts to an atomic entity, theIdentity
.Recovery
The specification includes a
Recovery Address
to account for instances when users lose control over anAssociated Address
. UponIdentity
creation, the publicRecovery Address
is passed as a parameter by a provider. Recovery functionality is triggered in three scenarios:1. Changing Recovery Address: If a recovery key is lost, a provider can initiateRecoveryAddressChange through a Provider. To prevent malicious behavior from someone who has gained control of an
Associated Address
orProvider
and is changing theRecovery Address
to one under their control, this triggers a 14 day challenge period during which the oldRecovery Address
may reject the change. If theRecovery Address
does not reject the change within 14 days, theRecovery Address
is changed. However, during the fourteen day period, theRecovery Address
can dispute the change request by calling triggerRecovery.2. Recovery: Recovery occurs when a user recognizes that an
Associated Address
or theRecovery Address
belonging to the user is lost or stolen. In this instance aRecovery Address
must call triggerRecovery. This removes allAssociated Addresses
andProviders
from the correspondingIdentity
and replaces them with an address passed in the function call. TheIdentity
and associatedResolvers
maintain integrity. The user is now responsible for adding the appropriate un-compromised addresses back to theirIdentity
.3. Poison Pill
The Recovery scheme offers considerable power to a
Recovery Address
; accordingly, thePoison Pill
is a nuclear option to combat malicious control over anIdentity
when aRecovery Address
is compromised. If a malicious actor compromises a user'sRecovery Address
and triggers recovery, any address removed in theRecovery
process can call triggerPoisonPill within 14 days to permanently disable theIdentity
. The user would then need to create a newIdentity
, and would be responsible for engaging in recovery schemes for any identity applications built in theResolver
orProvider
layers.Alternative Recovery Considerations
We considered many possible alternatives when devising the Recovery process outlined above. We ultimately selected the scheme that was most un-opinionated, modular, and consistent with the philosophy behind the
Associated Address
,Provider
, andResolver
components. Still, we feel that it is important to highlight some of the other recovery options we considered, to provide a rationale as to how we settled on what we did.High Level Concerns
Fundamentally, a Recovery scheme needs to be resilient to a compromised address taking control of a user's
Identity
. A secondary concern is preventing a compromised address from maliciously destroying a user's identity due to off-chain utility, which is not an optimal scenario, but is strictly better than if they've gained control.Alternative 1: Nuclear Option
This approach would allow any
Associated Address
to destroy anIdentity
whenever anotherAssociated Address
is compromised. While this may seem severe, we strongly considered it because this ERC is an identity protocol, not an identity application. This means that though a user's compromisedIdentity
is destroyed, they should still have recourse to whatever restoration mechanisms are available in each of their actual identities at theResolver
and/orProvider
level. We ultimately dismissed this approach for two main reasons:Associated Address
Alternative 2: Unilateral Address Removal via Providers
This would allow
Providers
to remove anAssociated Address
without a signature from said address. This implementation would allowProviders
to include arbitrarily sophisticated schemes for removing a rogue address - for instance, multi-sig requirements, centralized off-chain verification, user controlled master addresses, deferral to a jurisdictional contract, and more. To prevent a compromisedAssociated Address
from simply setting a maliciousProvider
to remove un-compromised addresses, it would have required a waiting period between when aProvider
is set and when they would be able to remove anAssociated Address
. We dismissed this approach because we felt it placed too high of a burden onProviders
. If aProvider
offered a sophisticated range of functionality to a user, but post-deployment a threat was found in the Recovery logic of the provider,Provider
-specific infrastructure would need to be rebuilt. We also considered including a flag that would allow a user to decide whether or not aProvider
may removeAssociated Addresses
unilaterally. Ultimately, we concluded that only allowing removal ofAssociated Addresses
via theRecovery Address
enables equally sophisticated recovery logic while separating the functionality fromProviders
, leaving less room for users to relinquish control to potentially flawed implementations.Importantly, the
Recovery Address
can be a user-controlled wallet or another address such as a multisig wallet or smart contract. This allows for sophisticated recovery structures that can be compliant, e.g. with standards such as DID.Rationale
We find that at a protocol layer, identities should not rely on specific claim or attestation structures, but should instead be a part of a trustless framework upon which arbitrarily sophisticated claim and attestation structures may be built.
The main criticism of existing identity solutions is that they're overly restrictive. We aim to limit requirements, keep identities modular and future-proof, and remain un-opinionated regarding any functionality a particular identity component may have. This proposal gives users the option to interact on the blockchain using an arbitrarily robust
Identity
rather than just an address.Implementation
The reference implementation for ERC-1484 may be found in hydrogen-dev/ERC-1484.
identityExists
Returns a
bool
indicating whether or not anIdentity
denominated by the passedEIN
exists.hasIdentity
Returns a
bool
indicating whether or not the passed_address
is associated with anIdentity
.getEIN
Returns the
EIN
associated with the passed_address
. Throws if the address is not associated with anEIN
.isAddressFor
Returns a
bool
indicating whether or not the passed_address
is associated with the passedEIN
.isProviderFor
Returns a
bool
indicating whether or not the passedprovider
has been set by the passedEIN
.isResolverFor
Returns a
bool
indicating whether or not the passedresolver
has been set by the passedEIN
.getDetails
Returns the
recoveryAddress
,associatedAddresses
,providers
andresolvers
of the passedEIN
.mintIdentity
Mints an
Identity
, setting theProvider
to themsg.sender
. Returns theEIN
of the newIdentity
.Triggers event: IdentityMinted
mintIdentityDelegated
Preforms the same logic as
mintIdentity
, but is called by aProvider
. This function requires a signature for theassociatedAddress
to confirm their consent.Triggers event: IdentityMinted
addAddress
Adds the
addressToAdd
to the passedEIN
. Requires signatures from both theaddressToAdd
and theapprovingAddress
.Triggers event: AddressAdded
removeAddress
Removes an
addressToRemove
from the passedEIN
. Requires a signature from theaddressToRemove
.Triggers event: AddressRemoved
addProviders
Adds an array of
Providers
to theIdentity
of themsg.sender
.Triggers event: ProviderAdded
addProviders
Adds an array of
Providers
to theIdentity
referenced by the passedEIN
. This must be called by aProvider
.Triggers event: ProviderAdded
removeProviders
Removes an array of
Providers
from theIdentity
of themsg.sender
.Triggers event: ProviderRemoved
removeProviders
Removes an array of
Providers
to theIdentity
referenced by the passedEIN
. This must be called by aProvider
.Triggers event: ProviderRemoved
addResolvers
Adds an array of
Resolvers
to the passedEIN
. This must be called by aProvider
.Triggers event: ResolverAdded
removeResolvers
Removes an array of
Resolvers
from the passedEIN
. This must be called by aProvider
.Triggers event: ResolverRemoved
initiateRecoveryAddressChange
Initiates a change in the current
recoveryAddress
for a givenEIN
.Triggers event: RecoveryAddressChangeInitiated
triggerRecovery
Triggers
EIN
recovery from the currentrecoveryAddress
, or the oldrecoveryAddress
if changed within the last 2 weeks.Triggers event: RecoveryTriggered
triggerPoisonPill
Triggers the
poison pill
on anEIN
. This renders theIdentity
permanently unusable.Triggers event: Poisoned
Events
IdentityMinted
MUST be triggered when an
Identity
is minted.AddressAdded
MUST be triggered when an address is added to an
Identity
.AddressRemoved
MUST be triggered when an address is removed from an
Identity
.ProviderAdded
MUST be triggered when a provider is added to an
Identity
.ProviderRemoved
MUST be triggered when a provider is removed.
ResolverAdded
MUST be triggered when a resolver is added.
ResolverRemoved
MUST be triggered when a resolver is removed.
RecoveryAddressChangeInitiated
MUST be triggered when a recovery address change is initiated.
RecoveryTriggered
MUST be triggered when recovery is initiated.
Poisoned
MUST be triggered when an
Identity
is poisoned.Solidity Interface
Backwards Compatibility
Identities
established under this standard consist of existing Ethereum addresses; accordingly, there are no backwards compatibility issues. Deployed, non-upgradeable smart contracts that wish to becomeResolvers
forIdentities
will need to write wrapper contracts that resolve addresses toEIN
-denominatedIdentities
.Additional References
Copyright
Copyright and related rights waived via CC0.
The text was updated successfully, but these errors were encountered: