This package was initialized via substreams init
and is being updated with custom modules to support the Bitcoin Mainnet blockchain streaming service using substreams.
Nodes available for streaming:
https://docs.substreams.dev/reference-material/chains-and-endpoints
substreams build
substreams auth
substreams gui # Get streaming!
Optionally, the substreams package can be published to the Substreams Registry
substreams registry login # Login to substreams.dev
substreams registry publish # Publish your Substreams to substreams.dev
The modules in this repository answer some interesting questions when developing a blockchain application:
For every block, the map_block_meta
module retrieves the most relevant information of the block (number, hash, and parent hash).
For every block, the map_transactions
modules summaries transaction number of vin and vout, the total valut of btc sent
First, generate the Protobuf code, which are the outputs of the Substreams:
> make protogen
Then, build the Rust code using the cargo
command-line tool:
> make build
Now, you are ready to run the Substreams. The Substreams contained in this project are independent of each other, so you must specify which Substreams module you want to run.
map_block_meta
In the following command, you retrieve the metadata of the block with number 819113
. You specify the starting block by using the --start-block
parameter.
> substreams run -e bitcoin.substreams.pinax.network:443 substreams.yaml map_block_meta --start-block 819113 --stop-block +1
----------- BLOCK #819,113 (00000000000000000003aefe02ab07a4a7c5a27bb674b062732286a71ab1ab51) age=14887h34m15.239171s ---------------
{
"@module": "map_block_meta",
"@block": 819113,
"@type": "btc.block_meta.v1.BlockMeta",
"@data": {
"number": "819113",
"hash": "00000000000000000003aefe02ab07a4a7c5a27bb674b062732286a71ab1ab51",
"parentHash": "000000000000000000001be3e5929be506d4e2c8cd1b7ba4fa9422032434368f"
}
}
Total Read Bytes (server-side consumption): 18468136
all done
map_transactions
In the following command, you retrieve the transactions of the block with number 819113
. You specify the starting block by using the --start-block
parameter.
> substreams run -e bitcoin.substreams.pinax.network:443 substreams.yaml map_transactions --start-block 819113 --stop-block +1
----------- BLOCK #819,113 (00000000000000000003aefe02ab07a4a7c5a27bb674b062732286a71ab1ab51) age=14887h34m58.667977s ---------------
{
"@module": "map_transactions",
"@block": 819113,
"@type": "btc.transaction.v1.Transactions",
"@data": {
"transactions": [
{
"hash": "7fd5fc5b33bcc1ad1a8b4ec41f6e629cfecf56c59dd7ccd1ddc89a25794eadaa",
"vinCount": "1",
"voutCount": "3",
"btcValue": 6.68892541
},
{
"hash": "18400008ffffbab7c20dd958a3728b27835d829ad20281253f282d3c988c67c3",
"vinCount": "1",
"voutCount": "2",
"btcValue": 0.00271144
},
{
"hash": "b4bca993feef5317fe49c7b80ae338a21848dad92880511899c3c44ec94de9db",
"vinCount": "2",
"voutCount": "2",
"btcValue": 11.77902854
},
...
]
}
}
Total Read Bytes (server-side consumption): 18468136
all done
map_block_full
In the following command, you retrieve the full block with number 819113
. You specify the starting block by using the --start-block
parameter.
> substreams run -e mainnet.btc.streamingfast.io:443 substreams.yaml map_block_full --start-block 819113 --stop-block +1
----------- BLOCK #819,113 (00000000000000000003aefe02ab07a4a7c5a27bb674b062732286a71ab1ab51) age=14887h35m39.133286s ---------------
{
"@module": "map_block_full",
"@block": 819113,
"@type": "sf.bitcoin.type.v1.Block",
"@data": {
"hash": "00000000000000000003aefe02ab07a4a7c5a27bb674b062732286a71ab1ab51",
"size": 1657488,
"strippedSize": 778518,
"weight": 3993042,
"height": "819113",
"version": 549453824,
"versionHex": "20c00000",
"merkleRoot": "2bfcbd4b2c0a65cb6dca81be051585e4472b897118230421cd825048988bd9da",
"tx": [
{
"hex": "010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff4d03a97f0c1062696e616e63652f4f01810484759750fabe6d6d60ea3fe9c408ae6720935cfe1e6f27760e1b6ac15bc480a570fa0a1f57d55bbf10000000000000000000324275c2310000000000ffffffff037d7dde270000000017a914ca35b1f4d02907314852f09935b9604507f8d700870000000000000000266a24aa21a9ed03ece2a729b585010ccc51683b78d4c1fa9fb9c2962bea9e7ca52391a01f3e4a00000000000000002b6a2952534b424c4f434b3a48b0a986da46abf8c290ca66802e0bb6adb91ac2da9662a3d3973828005961910120000000000000000000000000000000000000000000000000000000000000000000000000",
"txid": "7fd5fc5b33bcc1ad1a8b4ec41f6e629cfecf56c59dd7ccd1ddc89a25794eadaa",
"hash": "02449bf72568202119ed1d46064232d6ac2138a6bb4e6751dfdccfa62ed567c1",
"size": 295,
"vsize": 268,
"weight": 1072,
"version": 1,
"vin": [
{
"sequence": 4294967295,
"txinwitness": [
"0000000000000000000000000000000000000000000000000000000000000000"
],
"coinbase": "03a97f0c1062696e616e63652f4f01810484759750fabe6d6d60ea3fe9c408ae6720935cfe1e6f27760e1b6ac15bc480a570fa0a1f57d55bbf10000000000000000000324275c2310000000000"
}
],
"vout": [
{
"value": 6.68892541,
"scriptPubKey": {
"asm": "OP_HASH160 ca35b1f4d02907314852f09935b9604507f8d700 OP_EQUAL",
"hex": "a914ca35b1f4d02907314852f09935b9604507f8d70087",
"type": "scripthash"
}
},
{
"n": 1,
"scriptPubKey": {
"asm": "OP_RETURN aa21a9ed03ece2a729b585010ccc51683b78d4c1fa9fb9c2962bea9e7ca52391a01f3e4a",
"hex": "6a24aa21a9ed03ece2a729b585010ccc51683b78d4c1fa9fb9c2962bea9e7ca52391a01f3e4a",
"type": "nulldata"
}
},
{
"n": 2,
"scriptPubKey": {
"asm": "OP_RETURN 52534b424c4f434b3a48b0a986da46abf8c290ca66802e0bb6adb91ac2da9662a3d397382800596191",
"hex": "6a2952534b424c4f434b3a48b0a986da46abf8c290ca66802e0bb6adb91ac2da9662a3d397382800596191",
"type": "nulldata"
}
}
]
},
...
]
}
}
Total Read Bytes (server-side consumption): 18468136
all done
map_block_meta
allows you to view a basic information about a block
substreams gui substreams-bitcoin-main@v0.1.1 map_block_meta
map_block_full
allows you to view a complete block, as received by a Substreams module
substreams gui substreams-bitcoin-main@v0.1.1 map_block_full
map_filter_transaction
allows you to find a transaction by specifying either to
or from
value in the parameters. You might need to scope your search to the blocks you know you are going to find that transaction. Check with your preferred block explorer first.
substreams gui substreams-bitcoin-main@v0.1.1 map_transactions