Skip to content

Mini Blockfrost

Dolos provides an HTTP endpoint to access data using Blockfrost OpenAPI specification.

Usage

If enabled via configuration, Dolos will expose a TCP port accepting HTTP connections. The default port number is 3000, but this value can be changed via configuration.

Once you have the daemon running you can hit the endpoint using any HTTP client (cURL, Postman, your browser, etc).

This is an example of querying for the latest block using curl:

Terminal window
$ curl localhost:3000/blocks/latest | jq -S
{
"block_vrf": "vrf_vk1wz88xjus636xa3u3qwmhwqqawf4dwed96yh7r6k9t36xtk2m635q4tfmmz",
"confirmations": 0,
"epoch": 895,
"epoch_slot": 74777,
"fees": "1088620",
"hash": "7577092717e9f764d9cda887beaf5b1da022f58fbe140f0c6f0e122fac7c383c",
"height": 3121489,
"next_block": null,
"op_cert": "221826dc3e1061793f486026c1e02416ac3829f38c3e7388acd3540ba46d576d",
"op_cert_counter": "7",
"output": "10106802795",
"previous_block": "1e16f870725c163da2f63301794c99c95861d01afbea75b8902f76485e5e8af8",
"size": 12025,
"slot": 77402777,
"slot_leader": "pool1vurgy6s6u7yq36shf9yspesh3rrnd36km8xkghpcr4smgfz278m",
"time": 1744058777,
"tx_count": 2
}

Using the Blockfrost SDKs

Blockfrost’s SDKs can (to the most part) be adapted to be used with the Dolos MiniBF endpoint. An example with the Python SDK looks like this:

import json
from blockfrost import BlockFrostApi
api = BlockFrostApi(
project_id=None,
base_url="http://localhost:3000",
api_version=None,
)
api.api_version = None # The API version defaults to "v0" on __init__.
print(json.dumps(api.block_latest().to_dict(), indent=2))

Using a Tx Builder

The endpoints required for most tx builders to work are supported. Libraries like Lucid, Lucid-evolution, Blaze, MeshJS, etc can be used by pointing their corresponding provider configuration to Dolos Mini-BF endpoint.

Configuration

The serve.minibf section controls the options for the MiniBF endpoint that can be used by clients.

propertytypeexample
listen_addressstring”[::]:3000”
permissive_corsbooleantrue
token_registry_urlstring”https://token-registry.io”
urlstring”https://minibf.local”
max_scan_itemsinteger3000
  • listen_address: the local address (IP:PORT) to listen for incoming connections ([::] represents any IP address).
  • permissive_cors: allow cross-origin requests from any origin.
  • token_registry_url: optional token registry base URL used for off-chain asset metadata.
  • url: optional public URL used in the / root response.
  • max_scan_items: caps page-based scans for heavy endpoints (defaults to 3000 if unset).

This is an example of the serve.minibf fragment with a dolos.toml configuration file.

[serve.minibf]
listen_address = "[::]:3000"
permissive_cors = true
token_registry_url = "https://token-registry.io"
url = "https://minibf.local"
max_scan_items = 3000

Check the Configuration Schema for detailed info on how to set this up.

Coverage

Dolos provides many, but not all of the Blockfrost endpoints. The following list represent the endpoints currently supported by Dolos:

EndpointDescription
/Service info (version, revision)
/healthHealth check
/health/clockClock health
/metricsPrometheus metrics
/accounts/{stake_address}Get account information for a stake address
/accounts/{stake_address}/addressesGet addresses for a stake address
/accounts/{stake_address}/addresses/assetsGet assets held across a stake address’s addresses
/accounts/{stake_address}/addresses/totalGet lifetime received/sent totals for a stake address
/accounts/{stake_address}/delegationsGet delegations for a stake address
/accounts/{stake_address}/historyGet the per-epoch stake history for a stake address
/accounts/{stake_address}/mirsGet MIRs for a stake address
/accounts/{stake_address}/registrationsGet registrations for a stake address
/accounts/{stake_address}/rewardsGet rewards for a stake address
/accounts/{stake_address}/transactionsGet transactions for a stake address
/accounts/{stake_address}/utxosGet UTXOs for a stake address
/accounts/{stake_address}/withdrawalsGet withdrawals for a stake address
/addresses/{address}Get general information for a specific address
/addresses/{address}/extendedGet address information with extended asset data
/addresses/{address}/totalGet lifetime received/sent totals for a specific address
/addresses/{address}/transactionsGet transactions for a specific address
/addresses/{address}/txsAlias of /addresses/{address}/transactions
/addresses/{address}/utxosGet UTXOs for a specific address
/addresses/{address}/utxos/{asset}Get UTXOs for a specific address and asset
/assetsList assets in order of first mint
/assets/policy/{policy_id}Get assets minted under a specific policy
/assets/{subject}Get asset information
/assets/{subject}/addressesGet addresses holding a specific asset
/assets/{subject}/transactionsGet transactions involving a specific asset
/assets/{subject}/txsAlias of /assets/{subject}/transactions (hashes only)
/blocks/latestGet latest block information
/blocks/latest/txsGet transactions for the latest block
/blocks/latest/txs/cborGet transactions with CBOR data for the latest block
/blocks/epoch/{epoch_number}/slot/{slot_number}Get block by epoch and epoch-relative slot
/blocks/slot/{slot_number}Get block by slot number
/blocks/{hash_or_number}Get block information
/blocks/{hash_or_number}/addressesGet addresses in a specific block
/blocks/{hash_or_number}/nextGet next block
/blocks/{hash_or_number}/previousGet previous block
/blocks/{hash_or_number}/txsGet transactions for a specific block
/blocks/{hash_or_number}/txs/cborGet transactions with CBOR data for a specific block
/epochs/latestGet latest epoch information
/epochs/latest/parametersGet latest epoch parameters
/epochs/{epoch}Get information for a specific epoch
/epochs/{epoch}/blocksGet blocks in a specific epoch
/epochs/{epoch}/blocks/{pool_id}Get blocks minted by a specific pool in a specific epoch
/epochs/{epoch}/nextGet the epochs following a specific epoch
/epochs/{epoch}/parametersGet epoch parameters
/epochs/{epoch}/previousGet the epochs preceding a specific epoch
/epochs/{epoch}/stakesGet epoch stake distribution
/epochs/{epoch}/stakes/{pool_id}Get epoch stake distribution for a specific pool
/genesisGet genesis information
/governance/committeeGet the current constitutional committee
/governance/dreps/{drep_id}Get DRep information
/governance/dreps/{drep_id}/delegatorsGet delegators for a specific DRep
/governance/dreps/{drep_id}/metadataGet DRep metadata
/governance/dreps/{drep_id}/votesGet votes cast by a DRep
/governance/proposalsGet list of governance proposals
/governance/proposals/{tx_hash}/{cert_index}Get governance proposal information
/governance/proposals/{gov_action_id}Get governance proposal by CIP-129 action id
/governance/proposals/{gov_action_id}/metadataGet metadata of a proposal by CIP-129 id
/governance/proposals/{gov_action_id}/parametersGet parameter change of a proposal by CIP-129 id
/governance/proposals/{gov_action_id}/withdrawalsGet withdrawals of a proposal by CIP-129 id
/governance/proposals/{tx_hash}/{cert_index}/metadataGet metadata of a specific proposal
/governance/proposals/{tx_hash}/{cert_index}/parametersGet parameter change of a specific proposal
/governance/proposals/{tx_hash}/{cert_index}/withdrawalsGet withdrawals of a specific proposal
/metadata/txs/labels/{label}Get metadata for transactions with a specific label
/metadata/txs/labels/{label}/cborGet CBOR metadata for transactions with a specific label
/networkGet network information
/network/erasGet network eras information
/poolsGet list of registered pools
/pools/extendedGet extended pool information
/pools/retiredGet list of retired pools
/pools/retiringGet list of retiring pools
/pools/{id}Get information for a specific pool
/pools/{id}/delegatorsGet delegators for a specific pool
/pools/{id}/historyGet history for a specific pool
/pools/{id}/metadataGet metadata for a specific pool
/pools/{id}/relaysGet relays for a specific pool
/pools/{id}/updatesGet certificate updates for a specific pool
/scripts/{script_hash}Get script information
/scripts/{script_hash}/jsonGet script JSON
/scripts/{script_hash}/cborGet script CBOR
/scripts/{script_hash}/utxosGet live UTxOs that hold the script as a reference
/scripts/datum/{datum_hash}Get datum by hash
/scripts/datum/{datum_hash}/cborGet datum CBOR by hash
/tx/submitSubmit a transaction
/txs/{tx_hash}Get transaction information
/txs/{tx_hash}/cborGet CBOR data for a transaction
/txs/{tx_hash}/delegationsGet delegations for a specific transaction
/txs/{tx_hash}/metadataGet metadata for a specific transaction
/txs/{tx_hash}/metadata/cborGet CBOR metadata for a specific transaction
/txs/{tx_hash}/mirsGet MIRs for a specific transaction
/txs/{tx_hash}/pool_retiresGet pool retirements for a specific transaction
/txs/{tx_hash}/pool_updatesGet pool updates for a specific transaction
/txs/{tx_hash}/redeemersGet redeemers for a specific transaction
/txs/{tx_hash}/required_signersGet required signers for a specific transaction
/txs/{tx_hash}/stakesGet stakes for a specific transaction
/txs/{tx_hash}/utxosGet UTXOs for a specific transaction
/txs/{tx_hash}/withdrawalsGet withdrawals for a specific transaction
/utils/addresses/xpub/{xpub}/{role}/{index}Derive an address from an xpub

Lifetime totals and sync.max_history

/addresses/{address}/total and /accounts/{stake_address}/addresses/total fold every transaction kept in the archive. When sync.max_history is set, blocks pruned by housekeeping are not counted, so the sums and tx_count only cover the retained window. Run with full history if you need true lifetime totals.