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-apiallows 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 transaction
- GET /v2/pox- Retrieve current Proof of Transfer (PoX) relevant information
- POST /v2/contracts/call-read/<contract>/<function>- Evaluate and return the result of calling a Clarity function
- POST /v2/fees/transaction- Evaluate a given transaction and provide transaction fee estimation data
- GET /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-nodemay 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.