Architecture
Understand the architecture of the Stacks Blockchain API.
The stacks-node
has its own minimal set of http endpoints referred to as RPC endpoints
.
- The
stacks-blockchain-api
allows clients to access RPC endpoints by proxying requests to a load-balanced pool ofstacks-nodes
. - For more details on RPC endpoints, see: RPC Endpoints Documentation
- Common RPC endpoints include:
POST /v2/transactions
- Broadcast a transactionGET /v2/pox
- Retrieve current Proof of Transfer (PoX) relevant informationPOST /v2/contracts/call-read/<contract>/<function>
- Evaluate and return the result of calling a Clarity functionPOST /v2/fees/transaction
- Evaluate a given transaction and provide transaction fee estimation dataGET /v2/accounts/<address>
- Fetch the current nonce required for creating transactions
The Stacks Blockchain API implements additional endpoints that provide data unavailable directly from Stacks nodes due to various constraints.
- The
stacks-node
may not persist certain data or may not serve it efficiently to many clients. For instance, while it can return the current STX balance of an account, it cannot provide a history of account transactions. - The API implements the Rosetta specification by Coinbase, an open standard designed to simplify blockchain deployment and interaction. More information can be found at Rosetta API.
- The API includes support for the Blockchain Naming System (BNS) endpoints. Details are available at BNS Documentation.
- For Express.js routes, see the directory
/src/api/routes
.
The API creates an "event observer" http server which listens for events from a stacks-node "event emitter".
Events are HTTP POST requests containing:
- Blocks
- Transactions
Byproducts of executed transactions such as:
- Asset transfers
- Smart-contract log data
- Execution cost data
The API processes and stores these events as relational data in PostgreSQL. For the "event observer" code, see /src/event-stream
.
All http endpoints and responses are defined in OpenAPI and JSON Schema.
- See
/docs/openapi.yaml
- These are used to auto-generate the docs at https://hirosystems.github.io/stacks-blockchain-api/
- JSON Schemas are converted into TypeScript interfaces, which are used internally by the db controller module to transform SQL query results into the correct object shapes.
- OpenAPI and JSON Schemas are also used to generate a standalone @stacks/blockchain-api-client.
The easiest/quickest way to develop in this repo is using the VS Code debugger. It uses docker-compose to set up a stacks-node and Postgres instance.
Alternatively, you can run npm run dev:integrated
which does the same thing but without a debugger.