From d8f0ed83625cf3bdc4b8ac9704bb46c402737d67 Mon Sep 17 00:00:00 2001 From: "MADISONMK\\alejandro.martineza" Date: Wed, 6 Nov 2019 17:31:49 +0100 Subject: [PATCH] UML documentation added for smart contracts --- contracts/ContractInfo.md | 23 +---- contracts/README.md | 62 ++++++++++++ .../AlastriaIdentityIssuer.svg | 48 +++++++++ .../AlastriaIdentityManager.svg | 44 +++++++++ .../AlastriaIdentityServiceProvider.svg | 30 ++++++ .../uml/identityManager/AlastriaProxy.svg | 28 ++++++ contracts/uml/libs/Eidas.sol.svg | 45 +++++++++ contracts/uml/libs/Owned.sol.svg | 28 ++++++ .../registry/AlastriaCredentialRegistry.svg | 94 ++++++++++++++++++ .../registry/AlastriaPresentationRegistry.svg | 97 +++++++++++++++++++ .../registry/AlastriaPublicKeyRegistry.svg | 73 ++++++++++++++ 11 files changed, 554 insertions(+), 18 deletions(-) create mode 100644 contracts/README.md create mode 100644 contracts/uml/identityManager/AlastriaIdentityIssuer.svg create mode 100644 contracts/uml/identityManager/AlastriaIdentityManager.svg create mode 100644 contracts/uml/identityManager/AlastriaIdentityServiceProvider.svg create mode 100644 contracts/uml/identityManager/AlastriaProxy.svg create mode 100644 contracts/uml/libs/Eidas.sol.svg create mode 100644 contracts/uml/libs/Owned.sol.svg create mode 100644 contracts/uml/registry/AlastriaCredentialRegistry.svg create mode 100644 contracts/uml/registry/AlastriaPresentationRegistry.svg create mode 100644 contracts/uml/registry/AlastriaPublicKeyRegistry.svg diff --git a/contracts/ContractInfo.md b/contracts/ContractInfo.md index f215532..dcde2b0 100644 --- a/contracts/ContractInfo.md +++ b/contracts/ContractInfo.md @@ -1,20 +1,7 @@ | Contract Name | Address | ABI | | :------------ | :-------| :--- | -| AlastriaCredentialRegistry | 0x9f1b26710eff584f017507ad1a7424cc49f1b930 | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/__contracts_registry_AlastriaCredentialRegistry_sol_AlastriaCredentialRegistry.abi | -| AlastriaPublicKeyRegistry | 0x16e99506009a9bdcbc8546bc629c3d52d8f8264f | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/__contracts_registry_AlastriaPublicKeyRegistry_sol_AlastriaPublicKeyRegistry.abi | -| AlastriaIdentityManager | 0xe9dc6bce74e1ee0ccd7aa461c0c7c3ea0014aa4c | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/__contracts_identityManager_AlastriaIdentityManager_sol_AlastriaIdentityManager.abi | -| Eidas | 0x0682a91a56067e2ff44dd80c8dd18e3686a6b9a2 | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/__contracts_libs_Eidas_sol_Eidas.abi | -| AlastriaIdentityIssuer | 0x6dd3fab3903ec13fc4a8dfc4f0abc514bdd6cc10 | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/__contracts_identityManager_AlastriaIdentityIssuer_sol_AlastriaIdentityIssuer.abi | -| Owned | 0x9e2a69abfcee71f3126ddfb345c4f1898576a262 | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/__contracts_libs_Owned_sol_Owned.abi | -| AlastriaPresentationRegistry | 0x75d2d6505ce8f8c225d840da42dc33c8e8143501 | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/__contracts_registry_AlastriaPresentationRegistry_sol_AlastriaPresentationRegistry.abi | -| AlastriaProxy | 0x1b2d9c8cd59a3916af0a6ef2379f47bf7b410101 | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/__contracts_identityManager_AlastriaProxy_sol_AlastriaProxy.abi | -| AlastriaIdentityServiceProvider | 0x09fc73d0c18337a20602b1d3f1508e71b6361268 | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/__contracts_identityManager_AlastriaIdentityServiceProvider_sol_AlastriaIdentityServiceProvider.abi | -| AlastriaIdentityServiceProvider | 0x09fc73d0c18337a20602b1d3f1508e71b6361268 | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/__contracts_identityManager_AlastriaIdentityServiceProvider_sol_AlastriaIdentityServiceProvider.abi | -| AlastriaIdentityManager | 0xe9dc6bce74e1ee0ccd7aa461c0c7c3ea0014aa4c | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/__contracts_identityManager_AlastriaIdentityManager_sol_AlastriaIdentityManager.abi | -| Eidas | 0x0682a91a56067e2ff44dd80c8dd18e3686a6b9a2 | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/__contracts_libs_Eidas_sol_Eidas.abi | -| AlastriaPublicKeyRegistry | 0x16e99506009a9bdcbc8546bc629c3d52d8f8264f | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/__contracts_registry_AlastriaPublicKeyRegistry_sol_AlastriaPublicKeyRegistry.abi | -| Owned | 0x9e2a69abfcee71f3126ddfb345c4f1898576a262 | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/__contracts_libs_Owned_sol_Owned.abi | -| AlastriaPresentationRegistry | 0x75d2d6505ce8f8c225d840da42dc33c8e8143501 | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/__contracts_registry_AlastriaPresentationRegistry_sol_AlastriaPresentationRegistry.abi | -| AlastriaProxy | 0x1b2d9c8cd59a3916af0a6ef2379f47bf7b410101 | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/__contracts_identityManager_AlastriaProxy_sol_AlastriaProxy.abi | -| AlastriaCredentialRegistry | 0x9f1b26710eff584f017507ad1a7424cc49f1b930 | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/__contracts_registry_AlastriaCredentialRegistry_sol_AlastriaCredentialRegistry.abi | -| AlastriaIdentityIssuer | 0x6dd3fab3903ec13fc4a8dfc4f0abc514bdd6cc10 | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/__contracts_identityManager_AlastriaIdentityIssuer_sol_AlastriaIdentityIssuer.abi | +| Eidas | 0x8f1f24abbc31f71f7833f146baee96d1dff6cf39 | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/Eidas | +| AlastriaIdentityManager | 0x71e18c516483912c7730bdafb9e8b9aaca648aee | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/AlastriaIdentityManager | +| AlastriaCredentialRegistry | 0x07e3532daef5a6004f2e9bcc1da6cbc0fd2b6ed0 | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/AlastriaCredentialRegistry | +| AlastriaPresentationRegistry | 0x5148b9f4f8f6caa2b81e282e7da6f22e6a5b85d3 | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/AlastriaPresentationRegistry | +| AlastriaPublicKeyRegistry | 0x99101da661e3f498677ca647f60f4073127c52c0 | https://github.com/alastria/alastria-identity/blob/develop/contracts/abi/AlastriaPublicKeyRegistry | diff --git a/contracts/README.md b/contracts/README.md new file mode 100644 index 0000000..946c208 --- /dev/null +++ b/contracts/README.md @@ -0,0 +1,62 @@ + +# Smart Contracts Documentation + +``` +Last update @ 6/11/2019 +``` + +### 1. Identity Manager +|Contract | What it does | +| :------------- |:-------------| +| AlastriaIdentityManager.sol |It generates access tokens, creates identities, deploys an AlastriaProxy for each identity and sends transactions through the proxy of the sender| +![AlastriaIdentityManager.sol](./uml/identityManager/AlastriaIdentityManager.svg) + +|Contract | What it does | +| :------------- |:-------------| +| AlastriaProxy.sol | It is the Alastria ID itself. Only receives transactions from the IdentityManager and resends them to the target | +![AlastriaProxy.sol](./uml/identityManager/AlastriaProxy.svg) + +|Contract | What it does | +| :------------- |:-------------| +| AlastriaIdentityIssuer.sol | It keeps a registry of the issuers identities | +![AlastriaIdentityIssuer.sol](./uml/identityManager/AlastriaIdentityIssuer.svg) + +|Contract | What it does | +| :------------- |:-------------| +| AlastriaIdentityServiceProvider.sol |It keeps a registry of the service providers identities | +![AlastriaIdentityServiceProvider.sol](./uml/identityManager/AlastriaIdentityServiceProvider.svg) + + +### 2. Registry +|Contract | What it does | +|:------------- |:-------------| +| AlastriaCredentialRegistry.sol |It manages all the credentials and keeps the registry and the status | +![AlastriaCredentialRegistry.sol](./uml/registry/AlastriaCredentialRegistry.svg) + +|Contract | What it does | +|:------------- |:-------------| +| AlastriaPresentationRegistry.sol |It manages all the presentations and keeps the registry and the status | +![AlastriaPresentationRegistry.sol](./uml/registry/AlastriaPresentationRegistry.svg) + +|Contract | What it does | +|:------------- |:-------------| +| AlastriaPublicKeyRegistry.sol | It manages all the public keys and keeps the registry | +![AlastriaPublicKeyRegistry.sol](./uml/registry/AlastriaPublicKeyRegistry.svg) + +### 3. Libs + The previous contracts use some libraries which are: + +| Contract | What it does | +|:------------- |:-------------| +| Eidas.sol | It manages Eidas level of assurance for credentials| +![Eidas.sol](./uml/libs/Eidas.sol.svg) + +| Contract | What it does | +|:------------- |:-------------| +| Owned.sol | It assures that just the account which deployed a contract can update the version | +![Owned.sol](./uml/libs/Owned.sol.svg) + + +## Need Help? +Our identity core team will be happy to listen to you at [slack #identidaddigital](https://github.com/alastria/alastria-node/wiki/HELP) + diff --git a/contracts/uml/identityManager/AlastriaIdentityIssuer.svg b/contracts/uml/identityManager/AlastriaIdentityIssuer.svg new file mode 100644 index 0000000..1ac913b --- /dev/null +++ b/contracts/uml/identityManager/AlastriaIdentityIssuer.svg @@ -0,0 +1,48 @@ + + + + + + +UmlClassDiagram + + + +0 + +AlastriaIdentityIssuer + +Internal: +   issuers: mapping(address=>IdentityIssuer) + +Public: +    <<modifier>> onlyIdentityIssuer(_identityIssuer: address) +    <<modifier>> notIdentityIssuer(_identityIssuer: address) +    <<modifier>> alLeastLow(_level: Eidas.EidasLevel) +    constructor() +    addIdentityIssuer(_identityIssuer: address, _level: Eidas.EidasLevel) +    updateIdentityIssuerEidasLevel(_identityIssuer: address, _level: Eidas.EidasLevel) +    deleteIdentityIssuer(_identityIssuer: address) +    getEidasLevel(_identityIssuer: address): Eidas.EidasLevel + + + +0struct0 + +<<struct>> +IdentityIssuer + +level: Eidas.EidasLevel +active: bool + + + +0struct0->0 + + + + + diff --git a/contracts/uml/identityManager/AlastriaIdentityManager.svg b/contracts/uml/identityManager/AlastriaIdentityManager.svg new file mode 100644 index 0000000..3dba57d --- /dev/null +++ b/contracts/uml/identityManager/AlastriaIdentityManager.svg @@ -0,0 +1,44 @@ + + + + + + +UmlClassDiagram + + + +0 + +AlastriaIdentityManager + +Internal: +   timeToLive: uint +Public: +   version: uint256 +   alastriaCredentialRegistry: AlastriaCredentialRegistry +   alastriaPresentationRegistry: AlastriaPresentationRegistry +   alastriaPublicKeyRegistry: AlastriaPublicKeyRegistry +   identityKeys: mapping(address=>address) +   pendingIDs: mapping(address=>uint) + +Internal: +    checkMessageData(a: address): (t: bool) +Public: +    <<event>> PreparedAlastriaID(signAddress: address) +    <<event>> OperationWasNotSupported(method: string) +    <<event>> IdentityCreated(identity: address, creator: address, owner: address) +    <<event>> IdentityRecovered(oldAccount: address, newAccount: address, serviceProvider: address) +    <<modifier>> isPendingAndOnTime(_signAddress: address) +    <<modifier>> validAddress(addr: address) +    constructor(_version: uint256) +    prepareAlastriaID(_signAddress: address) +    createAlastriaIdentity(addPublicKeyCallData: bytes) +    delegateCall(_destination: address, _value: uint256, _data: bytes) +    recoverAccount(accountLost: address, newAccount: address) + + + diff --git a/contracts/uml/identityManager/AlastriaIdentityServiceProvider.svg b/contracts/uml/identityManager/AlastriaIdentityServiceProvider.svg new file mode 100644 index 0000000..2399dac --- /dev/null +++ b/contracts/uml/identityManager/AlastriaIdentityServiceProvider.svg @@ -0,0 +1,30 @@ + + + + + + +UmlClassDiagram + + + +0 + +AlastriaIdentityServiceProvider + +Internal: +   providers: mapping(address=>bool) + +Public: +    <<modifier>> onlyIdentityServiceProvider(_identityServiceProvider: address) +    <<modifier>> notIdentityServiceProvider(_identityServiceProvider: address) +    constructor() +    addIdentityServiceProvider(_identityServiceProvider: address) +    deleteIdentityServiceProvider(_identityServiceProvider: address) +    isIdentityServiceProvider(_identityServiceProvider: address): bool + + + diff --git a/contracts/uml/identityManager/AlastriaProxy.svg b/contracts/uml/identityManager/AlastriaProxy.svg new file mode 100644 index 0000000..0d2dd59 --- /dev/null +++ b/contracts/uml/identityManager/AlastriaProxy.svg @@ -0,0 +1,28 @@ + + + + + + +UmlClassDiagram + + + +0 + +AlastriaProxy + +Public: +   owner: address + +Public: +    <<fallback>> () +    <<event>> Forwarded(destination: address, value: uint, data: bytes) +    constructor() +    forward(destination: address, value: uint, data: bytes) + + + diff --git a/contracts/uml/libs/Eidas.sol.svg b/contracts/uml/libs/Eidas.sol.svg new file mode 100644 index 0000000..abd33e9 --- /dev/null +++ b/contracts/uml/libs/Eidas.sol.svg @@ -0,0 +1,45 @@ + + + + + + +UmlClassDiagram + + + +0 + +<<Library>> +Eidas + + + +Public: +    atLeastLow(_eidasLevel: EidasLevel): bool +    atLeast(_eidasLevel: EidasLevel, _level: EidasLevel): bool + + + +0enum0 + +<<enum>> +EidasLevel + +Null +Reputational +Low +Substantial +High + + + +0enum0->0 + + + + + diff --git a/contracts/uml/libs/Owned.sol.svg b/contracts/uml/libs/Owned.sol.svg new file mode 100644 index 0000000..c402e56 --- /dev/null +++ b/contracts/uml/libs/Owned.sol.svg @@ -0,0 +1,28 @@ + + + + + + +UmlClassDiagram + + + +0 + +Owned + +Public: +   owner: address + +Public: +    <<modifier>> onlyOwner() +    constructor() +    isOwner(addr: address): bool +    transfer(newOwner: address) + + + diff --git a/contracts/uml/registry/AlastriaCredentialRegistry.svg b/contracts/uml/registry/AlastriaCredentialRegistry.svg new file mode 100644 index 0000000..f52f8f3 --- /dev/null +++ b/contracts/uml/registry/AlastriaCredentialRegistry.svg @@ -0,0 +1,94 @@ + + + + + + +UmlClassDiagram + + + +0 + +AlastriaCredentialRegistry + +Private: +   issuerCredentialRegistry: mapping(address=>mapping(bytes32=>IssuerCredential)) +Public: +   version: int +   previousPublishedVersion: address +   STATUS_FIRST: Status +   STATUS_LAST: Status +   subjectCredentialRegistry: mapping(address=>mapping(bytes32=>SubjectCredential)) +   subjectCredentialList: mapping(address=>bytes32[]) + +Public: +    <<event>> SubjectCredentialDeleted(subjectCredentialHash: bytes32) +    <<event>> IssuerCredentialRevoked(issuerCredentialHash: bytes32, status: Status) +    <<modifier>> validAddress(addr: address) +    <<modifier>> validStatus(status: Status) +    constructor(_previousPublishedVersion: address) +    addSubjectCredential(subjectCredentialHash: bytes32, URI: string) +    deleteSubjectCredential(subjectCredentialHash: bytes32) +    getSubjectCredentialStatus(subject: address, subjectCredentialHash: bytes32): (exists: bool, status: Status) +    getSubjectCredentialList(subject: address): (uint, bytes32[]) +    updateCredentialStatus(issuerCredentialHash: bytes32, status: Status) +    getIssuerCredentialStatus(issuer: address, issuerCredentialHash: bytes32): (exists: bool, status: Status) +    getCredentialStatus(subjectStatus: Status, issuerStatus: Status): Status + + + +0struct0 + +<<struct>> +SubjectCredential + +exists: bool +status: Status +URI: string + + + +0struct0->0 + + + + + +0struct1 + +<<struct>> +IssuerCredential + +exists: bool +status: Status + + + +0struct1->0 + + + + + +0enum0 + +<<enum>> +Status + +Valid +AskIssuer +Revoked +DeletedBySubject + + + +0enum0->0 + + + + + diff --git a/contracts/uml/registry/AlastriaPresentationRegistry.svg b/contracts/uml/registry/AlastriaPresentationRegistry.svg new file mode 100644 index 0000000..2ccab90 --- /dev/null +++ b/contracts/uml/registry/AlastriaPresentationRegistry.svg @@ -0,0 +1,97 @@ + + + + + + +UmlClassDiagram + + + +0 + +AlastriaPresentationRegistry + +Private: +   receiverPresentationRegistry: mapping(address=>mapping(bytes32=>ReceiverPresentation)) +Public: +   version: int +   previousPublishedVersion: address +   STATUS_FIRST: Status +   STATUS_LAST: Status +   STATUS_SIZE: int +   subjectAllowed: bool[] +   receiverAllowed: bool[] +   backTransitionsAllowed: bool +   subjectPresentationRegistry: mapping(address=>mapping(bytes32=>SubjectPresentation)) +   subjectPresentationListRegistry: mapping(address=>bytes32[]) + +Public: +    <<event>> PresentationUpdated(hash: bytes32, status: Status) +    <<modifier>> validAddress(addr: address) +    <<modifier>> validStatus(status: Status) +    constructor(_previousPublishedVersion: address) +    addSubjectPresentation(subjectPresentationHash: bytes32, URI: string) +    updateSubjectPresentation(subjectPresentationHash: bytes32, status: Status) +    getSubjectPresentationStatus(subject: address, subjectPresentationHash: bytes32): (exists: bool, status: Status) +    getSubjectPresentationList(subject: address): (uint, bytes32[]) +    updateReceiverPresentation(receiverPresentationHash: bytes32, status: Status) +    getReceiverPresentationStatus(receiver: address, receiverPresentationHash: bytes32): (exists: bool, status: Status) +    getPresentationStatus(subjectStatus: Status, receiverStatus: Status): Status + + + +0struct0 + +<<struct>> +SubjectPresentation + +exists: bool +status: Status +URI: string + + + +0struct0->0 + + + + + +0struct1 + +<<struct>> +ReceiverPresentation + +exists: bool +status: Status + + + +0struct1->0 + + + + + +0enum0 + +<<enum>> +Status + +Valid +Received +AskDeletion +DeletionConfirmation + + + +0enum0->0 + + + + + diff --git a/contracts/uml/registry/AlastriaPublicKeyRegistry.svg b/contracts/uml/registry/AlastriaPublicKeyRegistry.svg new file mode 100644 index 0000000..cefae06 --- /dev/null +++ b/contracts/uml/registry/AlastriaPublicKeyRegistry.svg @@ -0,0 +1,73 @@ + + + + + + +UmlClassDiagram + + + +0 + +AlastriaPublicKeyRegistry + +Private: +   publicKeyRegistry: mapping(address=>mapping(bytes32=>PublicKey)) +Public: +   version: int +   previousPublishedVersion: address +   publicKeyList: mapping(address=>string[]) + +Internal: +    getKeyHash(inputKey: string): bytes32 +Public: +    <<event>> PublicKeyDeleted(publicKey: string) +    <<event>> PublicKeyRevoked(publicKey: string) +    <<modifier>> validAddress(addr: address) +    constructor(_previousPublishedVersion: address) +    addKey(publicKey: string) +    revokePublicKey(publicKey: string) +    deletePublicKey(publicKey: string) +    getCurrentPublicKey(subject: address): string +    getPublicKeyStatus(subject: address, publicKey: bytes32): (exists: bool, status: Status, startDate: uint, endDate: uint) + + + +0struct0 + +<<struct>> +PublicKey + +exists: bool +status: Status +startDate: uint +endDate: uint + + + +0struct0->0 + + + + + +0enum0 + +<<enum>> +Status + +Valid +DeletedBySubject + + + +0enum0->0 + + + + +