Orchestrate implements a microservices architecture composed of APIs and workers. Workers communicate using a publish-subscribe pattern with Apache Kafka as a message broker. All messages are standardized using protobuf and grpc.
The abstraction of components, communicating between microservices through a central message broker, and a defined protocol for message exchanges, makes Orchestrate highly maintainable, loosely coupled with other services, and easy to test.
Each API and worker can be configured using its own set of environment variables, and global environment variables. The Docker Compose file in the Orchestrate Quickstart provides an example of how to configure and execute the services.
Command line options are also available, and take precedence over environment variables.
- Tx-Crafter crafts transaction payloads. Crafting transaction payloads includes setting the gas price and gas limit of the transaction, and requesting faucet crediting.
- Tx-Signer signs transactions.
- Tx-Sender sends transactions to the blockchain and stores the transaction envelope.
- Tx-Listener listens for transaction receipts and loads the transaction envelope.
Internal Orchestrate APIs
- Envelope Store API stores the transaction envelope while the transaction is being mined.
- Contract Registry API stores the contract ABI, bytecode, and deployed bytecode.
- Chain Registry API stores chain configurations including the chain URL, chain name, listener configuration, and block information.
- Kafka message broker service enables communication between workers following a publish-subscribe pattern.
- Redis database service is used as distributed cache to store nonce values.
- Postgres database service is used by the envelope store to store transaction execution contexts.
- HashiCorp Vault for key management.