Architecture

High-Level Diagram

erDiagram CARDANO-NODE ||--o{ CARDANO-WALLET : sends-blocks-and-receives-txs CARDANO-NODE ||--o{ CARDANO-DB-SYNC : sends-blocks CARDANO-NODE ||--o{ CARDANO-SUBMIT-API : receives-txs CARDANO-DB-SYNC ||--|| POSTGRESQL : dumps-into POSTGRESQL ||--|| CARDANO-GRAPHQL : is-queried POSTGRESQL ||--|| CARDANO-EXPLORER-API : is-queried

Components

cardano-node

The core cardano-node, which will support Ouroboros Praos.

Supported environments: Linux (64-bits), MacOS (64-bits), Windows (64-bits), Docker

cardano-db-sync

A necessary middleware to power both cardano-rest and cardano-graphql. This middleware stores blockchain data fetched from cardano-node in an intermediate database to enable higher-level interfaces for blockchain exploration.

Supported environments: Linux (64-bits), MacOS (64-bits), Docker

cardano-wallet

cardano-wallet An HTTP REST API is recommended for 3rd party wallets and small exchanges who do not want to manage UTxOs for transactions themselves. Use it to send and receive payments from hierarchical deterministic wallets on the Cardano blockchain via HTTP REST or a command-line interface.

Supported environments: Linux (64-bits), MacOS (64-bits), Windows (64-bits), Docker

cardano-rest

cardano-rest is made of two HTTP APIs that are used to retrieve transactions, addresses, and time periods (epochs and slots) from the cardano-db-sync component and submit an already serialized transaction to the network using cardano-explorer-api & cardano-submit-api respectively. The cardano-submit-api uses the same API as the cardano-sl:explorer to ease migration from already integrated clients. New integration should however look into cardano-graphql.

Supported environments: Linux (64-bits), MacOS (64-bits), Docker

cardano-graphql

HTTP GraphQL API for Cardano. A more flexible alternative for blockchain exploration than cardano-rest.

Supported environments: Linux (64-bits), MacOS (64-bits), Docker

Choosing the right component

graph TD QMakeTx{Do you need to
make transactions?} QManageUTxO{Do you want to
implement your own wallet?} QAlreadyIntegrated{Do you already have
an integration with
cardano-sl?} GraphQL{cardano-graphql} Rest{cardano-rest} SDK{SDK} Wallet{cardano-wallet} QMakeTx-->|yes| QManageUTxO QMakeTx-->|no| QAlreadyIntegrated QAlreadyIntegrated-->|yes| Rest QAlreadyIntegrated-->|no| GraphQL QManageUTxO-->|yes| SDK QManageUTxO-->|no| Wallet

Notes

See also input-output-hk/adrestia.