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

Moved Atala Prism model to file separated from workspace. #285

Merged
merged 1 commit into from
Jan 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
77 changes: 77 additions & 0 deletions docs/architecture/structurizr/prism_model.dsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
didSubject = person "DID Subject" "The entity identified by a DID and described by a DID document"
didController = person "DID Controller" "An entity that has the capability to make changes to a DID document"
vcIssuer = person "VC Issuer" "A verified entity that can Issue verifiable credentials"
vcHolder = person "VC Holder" "A user with a wallet that wants to keep their credentials decentralised and private"
vcVerifier = person "VC Verifier" "Wants to identify if a credential or part of a credential is valid"

enterprise "IOG" {
atalaPrism = softwareSystem "Atala PRISM" "Exposes a suite of operations to create, manage and resolve standards based DIDs in a user-controlled manner, and a suite of operations to issue, manage and verify standards based VCs in a privacy preserving manner" {
mobileApp = container "Mobile App" "" "" "Mobile App" {
appCode = component "Mobile App Logic"

# Reference: https://livebook.manning.com/book/self-sovereign-identity/chapter-9/36
# A digital agent is to a digital wallet what an operating system is to a computer or smart-phone.
# It is the software that enables a person to take actions, perform communications, store information, and track usage of the digital wallet.
edgeAgent = component "Edge Agent" "A software that enables a person to take actions, perform communications, store information, and track usage of the digital wallet"
wallet = component "Wallet" "A software (and optionally hardware) that enables the wallet’s controller to generate, store, manage, and protect cryptographic keys, secrets, and other sensitive private data"
bbSDK = component "Building Block SDK" "Client side logic for BBs"
bbClient = component "Building Block HTTP Client" "OpenAPI generated stubs for all BBs"

# relations within container
appCode -> edgeAgent "Operates"
edgeAgent -> wallet "Uses"
edgeAgent -> bbSDK "Uses"
bbSDK -> bbClient "Uses"
}

apiGateway = container "API Gateway" "Acts as the the entry point to API exposed by the backend microservices. Main functions: API backend documentation, TLS endpoint, reverse proxy, authentication & authorization, traffic monitoring, rate limiting, etc" "Middleware"

pollux = container "Pollux" "Exposes a suite of credential operations to issue, manage and verify standards based verifiable credentials in a privacy preserving manner" "Service BB"
mercury = container "Mercury" "Exposes secure, standards based communications protocols to establish and manage trusted, peer-to-peer connections and interactions between DIDs in a transport agnostic and interoperable manner" "Service BB"
pluto = container "Pluto" "Exposes storage operations to securely store, manage, and recover verifiable data linked to DIDs in a portable, storage agnostic manner" "Service BB"
apollo = container "Apollo" "A suite of cryptographic primitives to ensure properties of integrity, authenticity and confidentiality of any data we store and process in a provably secure manner (* provides this to all components -> embedded)" "Library BB"
athena = container "Athena" "A self-improving machine learning building block to increase the intelligence of data-driven predictive processes in a privacy preserving manner" "???"

castorGroup = group "Castor" {
!include castor_containers.dsl
}

dltGroup = group "DLT Proxy" {
!include iris_containers.dsl
}

# relations to/from containers within Prism
mobileApp -> apiGateway "Makes API calls to BB" "REST/HTTPS"
apiGateway -> castorApi "Routes requests to" "REST/HTTP"
apiGateway -> pollux "Routes requests to" "REST/HTTP"
apiGateway -> mercury "Routes requests to" "REST/HTTP"
apiGateway -> pluto "Routes requests to" "REST/HTTP"

castorApi -> iris "Makes API calls to" "gRPC/HTTP2"
pollux -> iris "Makes API calls to" "gRPC/HTTP2"
msgQueue -> pollux "Notifies DLT changes to"

# relations to/from components within Prism
mobileApp.edgeAgent -> apiGateway "Communicates with Mercury Cloud Agent" "DIDComm"
mobileApp.bbClient -> apiGateway "Makes API calls to BB" "REST/HTTPS"
msgQueue -> castorWorker.dltEventConsumer "Notifies DLT changes to"
}

cardanoDLT = softwareSystem "Cardano Blockchain" "" "Existing System"

# relations to/from software system within IOG
atalaPrism.cardanoNode -> cardanoDLT "Interacts with" "TCP"
}

# relations between people and software systems
didSubject -> atalaPrism "Uses"
didController -> atalaPrism "Makes changes to a DID document using"
vcIssuer -> atalaPrism "Issues verifiable credentials to holder using"
vcHolder -> atalaPrism "Keeps credentials, shares credentials or partial info on them with others using"
vcVerifier -> atalaPrism "Verifies credentials or partial credentials"

didSubject -> atalaPrism.mobileApp "Uses"
didController -> atalaPrism.mobileApp "Uses"
vcIssuer -> atalaPrism.mobileApp "Uses"
vcHolder -> atalaPrism.mobileApp "Uses"
vcVerifier -> atalaPrism.mobileApp "Uses"
79 changes: 1 addition & 78 deletions docs/architecture/structurizr/workspace.dsl
Original file line number Diff line number Diff line change
Expand Up @@ -3,84 +3,7 @@ workspace {
!identifiers hierarchical

model {

didSubject = person "DID Subject" "The entity identified by a DID and described by a DID document"
didController = person "DID Controller" "An entity that has the capability to make changes to a DID document"
vcIssuer = person "VC Issuer" "A verified entity that can Issue verifiable credentials"
vcHolder = person "VC Holder" "A user with a wallet that wants to keep their credentials decentralised and private"
vcVerifier = person "VC Verifier" "Wants to identify if a credential or part of a credential is valid"

enterprise "IOG" {
atalaPrism = softwareSystem "Atala PRISM" "Exposes a suite of operations to create, manage and resolve standards based DIDs in a user-controlled manner, and a suite of operations to issue, manage and verify standards based VCs in a privacy preserving manner" {
mobileApp = container "Mobile App" "" "" "Mobile App" {
appCode = component "Mobile App Logic"

# Reference: https://livebook.manning.com/book/self-sovereign-identity/chapter-9/36
# A digital agent is to a digital wallet what an operating system is to a computer or smart-phone.
# It is the software that enables a person to take actions, perform communications, store information, and track usage of the digital wallet.
edgeAgent = component "Edge Agent" "A software that enables a person to take actions, perform communications, store information, and track usage of the digital wallet"
wallet = component "Wallet" "A software (and optionally hardware) that enables the wallet’s controller to generate, store, manage, and protect cryptographic keys, secrets, and other sensitive private data"
bbSDK = component "Building Block SDK" "Client side logic for BBs"
bbClient = component "Building Block HTTP Client" "OpenAPI generated stubs for all BBs"

# relations within container
appCode -> edgeAgent "Operates"
edgeAgent -> wallet "Uses"
edgeAgent -> bbSDK "Uses"
bbSDK -> bbClient "Uses"
}

apiGateway = container "API Gateway" "Acts as the the entry point to API exposed by the backend microservices. Main functions: API backend documentation, TLS endpoint, reverse proxy, authentication & authorization, traffic monitoring, rate limiting, etc" "Middleware"

pollux = container "Pollux" "Exposes a suite of credential operations to issue, manage and verify standards based verifiable credentials in a privacy preserving manner" "Service BB"
mercury = container "Mercury" "Exposes secure, standards based communications protocols to establish and manage trusted, peer-to-peer connections and interactions between DIDs in a transport agnostic and interoperable manner" "Service BB"
pluto = container "Pluto" "Exposes storage operations to securely store, manage, and recover verifiable data linked to DIDs in a portable, storage agnostic manner" "Service BB"
apollo = container "Apollo" "A suite of cryptographic primitives to ensure properties of integrity, authenticity and confidentiality of any data we store and process in a provably secure manner (* provides this to all components -> embedded)" "Library BB"
athena = container "Athena" "A self-improving machine learning building block to increase the intelligence of data-driven predictive processes in a privacy preserving manner" "???"

castorGroup = group "Castor" {
!include castor_containers.dsl
}

dltGroup = group "DLT Proxy" {
!include iris_containers.dsl
}

# relations to/from containers within Prism
mobileApp -> apiGateway "Makes API calls to BB" "REST/HTTPS"
apiGateway -> castorApi "Routes requests to" "REST/HTTP"
apiGateway -> pollux "Routes requests to" "REST/HTTP"
apiGateway -> mercury "Routes requests to" "REST/HTTP"
apiGateway -> pluto "Routes requests to" "REST/HTTP"

castorApi -> iris "Makes API calls to" "gRPC/HTTP2"
pollux -> iris "Makes API calls to" "gRPC/HTTP2"
msgQueue -> pollux "Notifies DLT changes to"

# relations to/from components within Prism
mobileApp.edgeAgent -> apiGateway "Communicates with Mercury Cloud Agent" "DIDComm"
mobileApp.bbClient -> apiGateway "Makes API calls to BB" "REST/HTTPS"
msgQueue -> castorWorker.dltEventConsumer "Notifies DLT changes to"
}

cardanoDLT = softwareSystem "Cardano Blockchain" "" "Existing System"

# relations to/from software system within IOG
atalaPrism.cardanoNode -> cardanoDLT "Interacts with" "TCP"
}

# relations between people and software systems
didSubject -> atalaPrism "Uses"
didController -> atalaPrism "Makes changes to a DID document using"
vcIssuer -> atalaPrism "Issues verifiable credentials to holder using"
vcHolder -> atalaPrism "Keeps credentials, shares credentials or partial info on them with others using"
vcVerifier -> atalaPrism "Verifies credentials or partial credentials"

didSubject -> atalaPrism.mobileApp "Uses"
didController -> atalaPrism.mobileApp "Uses"
vcIssuer -> atalaPrism.mobileApp "Uses"
vcHolder -> atalaPrism.mobileApp "Uses"
vcVerifier -> atalaPrism.mobileApp "Uses"
!include prism_model.dsl
}

views {
Expand Down