Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
990 commits
Select commit Hold shift + click to select a range
238bad4
feat: add tron support for internal transactions
cranycrane Dec 9, 2025
221c05b
refactor: tron - optimize fixStateRoot called only when needed and re…
cranycrane Jan 16, 2026
51018d8
refactor: tron - internal transactions to detect SELFDESTRUCT contracts
cranycrane Jan 16, 2026
0313225
fix: tron - do check for "to" not being empty to avoid error
cranycrane Jan 16, 2026
803f025
fix: tron - check for receipt not nil in GetTransaction
cranycrane Jan 17, 2026
5ed86b5
fix: tron - validate checksum before getting addrDesc
cranycrane Jan 17, 2026
ac8eeae
fix: tron - internal TX type to not be overwritten
cranycrane Jan 17, 2026
2f4e6a6
feat: tron send tx
cranycrane Jan 31, 2026
1f34cd7
refactor(core): add generic chain-extra hooks to parser + ethereum tx…
cranycrane Feb 21, 2026
b3aa9f0
feat(api): expose chainExtraData in API tx and worker mapping
cranycrane Feb 21, 2026
1296abd
feat(tron): build tron extra tx metadata from HTTP endpoints
cranycrane Feb 21, 2026
e1c8fee
feat(tron): integrate HTTP-backed block/tx enrichment in tronrpc
cranycrane Feb 21, 2026
a78a949
feat(tron): normalize tx/block ids to no-0x on API-facing outputs
cranycrane Feb 21, 2026
2b0aa31
feat(server): generic template extension + chainExtra rendering
cranycrane Feb 21, 2026
8f9b11a
chore(config): tron http endpoint config
cranycrane Feb 21, 2026
ceee43e
test(tron): update rpc/integration fixtures and assertions
cranycrane Feb 21, 2026
93fd1f9
docs(tron): add Tron API specifics
cranycrane Feb 21, 2026
0a3b4c8
feat(tron): GetBlock in paralell
cranycrane Feb 21, 2026
fb0c15a
feat(tron): optimized updating of best block after notification or pe…
cranycrane Feb 21, 2026
480a32d
refactor(tron): hex normalization in one place
cranycrane Feb 21, 2026
2caa1b0
refactor(tron): parseTronExtra method for getting tron data
cranycrane Feb 21, 2026
49667e6
refactor(tron): remove duplicated getBlockRaw
cranycrane Feb 21, 2026
d0e6b0d
feat(tron): get mempool transactions
cranycrane Feb 21, 2026
cfa097f
feat(tron): compatible estimate energy and eth-type RPC call
cranycrane Feb 21, 2026
afd0642
chore(tron): export tron extra types to include them in API docs
cranycrane Feb 22, 2026
4964a56
docs(tron): add tron-extra data structure
cranycrane Feb 22, 2026
c1f4a7c
chore(tron): update public tron tests with tron-specific data
cranycrane Feb 22, 2026
afbdf07
fix: updated circular dependency and libraries
etimofeeva Feb 27, 2026
90803a2
chore:fixed the whitespace typo
etimofeeva Feb 27, 2026
ef4f2a6
fix(tron): transaction info by block returns empty list instead of em…
cranycrane Feb 28, 2026
a39e0c6
fix(tron): strip "0x" prefix for HTTP backend methods
cranycrane Feb 28, 2026
87aabe2
feat(api): create ChainExtraData with "payloadType" identifying speci…
cranycrane Feb 28, 2026
ff4d402
refactor(tron): adapt UI to new ChainExtraData structure
cranycrane Feb 28, 2026
bb1e4d2
refactor(tron): remove aliases for tronExtraData
cranycrane Feb 28, 2026
ede08ed
test(tron): do not fail on returned empty list "{}"
cranycrane Feb 28, 2026
d04dbf5
dosc: updated blockbook-api.ts with chainExtraData types
cranycrane Feb 28, 2026
db21ffa
chore(tron): show tx fees in TRX (not SUN)
cranycrane Feb 28, 2026
2cae158
tracing(tron): blockbook_rpc_fallback_calls_total metric
pragmaxim Mar 3, 2026
d74bfed
fix(tron): drop CancelUnfreezeV2Amount as it was not persisted and used
pragmaxim Mar 6, 2026
58c2773
fix: retry on error prevents shutdown sequence on sigterm
pragmaxim Mar 6, 2026
2d94120
fix: gasLimit to not be omitempty
cranycrane Mar 11, 2026
e36bbf6
fix: gasLimit to be 0 for Tron transactions
cranycrane Mar 11, 2026
d59c9b9
Revert "fix: retry on error prevents shutdown sequence on sigterm"
cranycrane Mar 12, 2026
227de08
fix(tron): work correctly with tx status
cranycrane Mar 12, 2026
ad3079e
chore(tron): enable mempool and periodic refetch
cranycrane Mar 12, 2026
761259c
fix(tron): recognition of transaction's status
cranycrane Mar 17, 2026
91d4085
tests(tron): fixed testdata after d7803211 commit
cranycrane Mar 18, 2026
50f642e
feat(tron): fetch solidified txs from /walletsolidity/ endpoint and p…
cranycrane Mar 18, 2026
3d21de6
refactor(UI): tx view to be split on btc/eth chain type and possible …
cranycrane Mar 18, 2026
51d652f
feat(tron): add tron tx's fee limit
cranycrane Mar 18, 2026
bd5b595
feat(tron): resync mempool when received new block notification
cranycrane Mar 19, 2026
d53b05c
feat: add ability to add chain-specific data to api.Address
cranycrane Mar 19, 2026
cdecb3a
feat(tron): get account's tron-specific data
cranycrane Mar 19, 2026
4eb68d5
refacotr(tron): http endpoints in separate file
cranycrane Mar 19, 2026
3ff65c0
tests(tron): test chainExtraData in account response
cranycrane Mar 20, 2026
4325b45
feat(UI): extend address view with custom chainExtraData
cranycrane Mar 20, 2026
ef2bf21
refactor(tron): cleanup tron_template.go
cranycrane Mar 20, 2026
40e0f85
feat(tron): use /walletsolidity/ endpoint for solidified requests
cranycrane Mar 20, 2026
dc6122a
chore(tron): get internal data only through solidified API
cranycrane Mar 20, 2026
55851d2
feat(tron): fetch and save current best number of solidified block
cranycrane Mar 20, 2026
11b4395
feat(tron): get block data depending if it is "solidified"
cranycrane Mar 20, 2026
83e5caa
feat(tron): correctly GetTransaction from /wallet or /walletsolidity …
cranycrane Mar 20, 2026
ba6ca26
feat(tron): do not cache pending transactions to ensure it gets confi…
cranycrane Mar 20, 2026
427a5a5
fix(tron): nil mempool error
cranycrane Mar 20, 2026
bb05f7a
debug(tronHttp): error print with more information when request denied
cranycrane Mar 23, 2026
b13c60e
fix(tron): the /getaccountresource is not accessible from /walletsoli…
cranycrane Mar 23, 2026
482e41e
fix(tron): tronrpc tests
cranycrane Mar 23, 2026
3073b83
fix(tron): EthereumTypeEstimateGas failing due to mismatch in expecte…
cranycrane Mar 24, 2026
66db7cd
fix(tron): do not convert address to Tron address when empty string p…
cranycrane Mar 25, 2026
6a6521d
tests(tron): test tx fallbacks to /wallet endpoint when not solidified
cranycrane Mar 25, 2026
8af292e
refactor(tron): GetTransaction - do not check if tx is in mempool, fe…
cranycrane Mar 25, 2026
241b389
feat(tron): improve tx UI/UX
cranycrane Mar 25, 2026
a458858
feat(tron): fallback when txInfo not present when getting block
cranycrane Mar 25, 2026
0d57435
tests(tron): e2e api tests
pragmaxim Mar 25, 2026
eb2bb76
tests(tron): removing tron_testnet_nile from tests.json
pragmaxim Mar 25, 2026
f9bce75
enhancement(tron): derive fullnode and solidity HTTP URLs from rpc_ur…
pragmaxim Mar 25, 2026
9effb48
enhancement(ci/cd): tighten Wait for Sync conditions
pragmaxim Mar 27, 2026
ce206f3
erc4626 (#1431)
pragmaxim Mar 27, 2026
aebc576
chore: bump blockbook to version 0.6.0 (#1425)
vdovhanych Mar 27, 2026
99a3ce1
fix: fix NIL token decimals to 6 from 18
etimofeeva Mar 26, 2026
4ee0e7b
fix: remove code except for contracts
etimofeeva Mar 27, 2026
c4e97eb
fixing compilation error in tests
pragmaxim Mar 27, 2026
311f1c1
feat(tron): split bandwidth into staked and free fields
matusbalascak Mar 27, 2026
07284f0
ci/cd: deploy with dpkg -i
pragmaxim Mar 30, 2026
aca6e98
tron_testnet: reduce memory requirements
pragmaxim Mar 31, 2026
7a205c2
ci/cd(fix): handle permissions consistently
pragmaxim Mar 31, 2026
fd1359a
tron_testnet(fix): pre-create locations for tron Node logs
pragmaxim Mar 31, 2026
81d7381
tron_testnet(fix): fixing invalid logging
pragmaxim Mar 31, 2026
6e4a033
tron_testnet(fix): set --output-dir
pragmaxim Mar 31, 2026
054c78c
tron(fix): reduce xmx
pragmaxim Mar 31, 2026
f4a1b16
tron_testnet_nile(fix): fixing blockbook package name
pragmaxim Mar 31, 2026
9543193
fixing package_names in configuration
pragmaxim Mar 31, 2026
2b2764b
support build/deploy of backend-only coins
pragmaxim Mar 31, 2026
dabebc4
hoodi/sepolia(fix): incorrect backend config parameter
pragmaxim Apr 1, 2026
001cbd9
fix: propagate BB_BUILD_ENV to docker image
pragmaxim Apr 1, 2026
fe6c524
tron: testnet version upgrade
pragmaxim Apr 1, 2026
f8cc60d
tron: synthesizeGenesisTxInfo for testnet
pragmaxim Apr 1, 2026
b1cdea2
tron: synthesizeGenesisTxByID for testnet
pragmaxim Apr 1, 2026
e69f1b7
fix: make build git_commit deterministic
pragmaxim Apr 2, 2026
e67d3be
enhancement: support - in coin aliases and config names
pragmaxim Apr 2, 2026
0df7252
eth-classic(tests): integration and e2e tests
pragmaxim Apr 2, 2026
b65af4d
ci/cd(fix): normalization in wait_for_sync for coin names with dash
pragmaxim Apr 2, 2026
069b689
ci/cd(fix): eth-classic backend http.port fix
pragmaxim Apr 5, 2026
00e8745
ci/cd: include backend into deployment
pragmaxim Apr 5, 2026
da00524
ci/cd(fix): derive debug log file name correctly
pragmaxim Apr 5, 2026
aa4f87b
ethereum-classic: removing rpc tests
pragmaxim Apr 6, 2026
4fa121d
ci/cd(fix): runner user must own the build directory
pragmaxim Apr 6, 2026
4f6aa01
tron_testnet_nile(fix): use different shortcut and network from mainnet
pragmaxim Apr 7, 2026
b91b740
ci/cd(fix): connectivity tests should have lower timeout
pragmaxim Apr 7, 2026
ecda32d
ci/cd(fix): ethereum_archive - erigon does not support ws.addr flag
pragmaxim Apr 7, 2026
3a65fa1
ci/cd(fix): builds with PORTABLE=1
pragmaxim Apr 7, 2026
e8da827
etc(tests): adding --http.vhosts to ethereum classic
pragmaxim Apr 7, 2026
42d8366
etc(tests): adding integration tests to ethereum-classic
pragmaxim Apr 7, 2026
cafcada
eth(upgrade): bump erigon and prysm to latest versions
pragmaxim Apr 8, 2026
ba7099e
eth_sepolia(upgrade): bump erigon and prysm to latest versions
pragmaxim Apr 9, 2026
f0d0bc8
fix: override mq url in config from env vars
pragmaxim Apr 14, 2026
9385afd
fix: propagate mq url env var into docker
pragmaxim Apr 14, 2026
5fe558d
Remove string.ToLower normalization for token fiat rates (#1458)
cranycrane Apr 14, 2026
10eeae9
Updated test-websocket page to allow ethereum/tron presets for testin…
cranycrane Apr 14, 2026
6f2173d
1465 tron recognize account activation (#1466)
cranycrane Apr 15, 2026
adaf4e4
chore(tron-nile): rename shortcut/network to tTRX (#1470)
cranycrane Apr 15, 2026
0a8a439
feat: Tron tx balance history logic to correctly map (un)freezing and…
cranycrane Apr 15, 2026
93a8b11
ci/cd: backend_mode: auto, always, never
pragmaxim Apr 15, 2026
e51efcb
ci/cd: rename bb_deply to bbcli
pragmaxim Apr 15, 2026
5c5d740
ci/cd: cleanup after --backend-mode implementation
pragmaxim Apr 15, 2026
f4497bf
chore(config): configurable debouncedelay, increasing for POL, ARB
pragmaxim Apr 20, 2026
61d0289
chore(config): explicit trace_timeout for heavy debug_traceBlockByHas…
pragmaxim Apr 21, 2026
fa350e8
improving pagination defaults for GetBlock
pragmaxim Apr 21, 2026
9070456
adding missing erc4626 ts types
pragmaxim Apr 21, 2026
772e29e
fix: removing erc4626 ts types
pragmaxim Apr 22, 2026
a12a630
Adding general getContractInfo EVM endpoint (#1477)
pragmaxim Apr 28, 2026
7c9ac4d
chore(erc4624): remove ContractInfo duplication from api types
pragmaxim Apr 28, 2026
badc795
chore(memory): explicitly release bulk indexing memory before chain t…
pragmaxim Apr 25, 2026
69334d1
chore(memory): ContractsCacheMaxBytes should be lower for tip than fo…
pragmaxim Apr 26, 2026
0d47375
chore(memory): make hot lru cache contractIndex lifetime follow hot-a…
pragmaxim Apr 27, 2026
12c5d96
chore(memory): backend-list reconciliation when queryBackendOnMempool…
pragmaxim Apr 27, 2026
32b15a4
chore(memory): mempoolTxTimeoutHours=12 for high TPS chains
pragmaxim Apr 27, 2026
9d31787
chore(memory): turn unbounded CachedContracts to LRU
pragmaxim Apr 27, 2026
5eff360
chore(memory): turn unbounded cachedAddressAliasRecords to lazy LRU
pragmaxim Apr 27, 2026
c98f60c
chore(memory): drop bsc -dbcache=1500000000 override
pragmaxim Apr 27, 2026
4bea981
chore(memory): small hygine memory freeing fixes
pragmaxim Apr 27, 2026
f7bfc3b
chore(memory): set trace_timeout and increase resyncindexdebounce on …
pragmaxim Apr 27, 2026
8307952
chore(memory): bound amount of requests in flight on WS connection
pragmaxim Apr 27, 2026
9942fc2
fix(btc): accept non-standard tx versions outside int32 range
pragmaxim Apr 27, 2026
bbee823
chore(ws-caps): ip address rate limiting
pragmaxim Apr 29, 2026
8cc43a5
chore(ws-caps): estimateFee.blocks cap
pragmaxim Apr 29, 2026
083e154
chore(ws-caps): subscribeAddresses caps
pragmaxim Apr 29, 2026
93220d3
chore(ws-caps): accountInfo pagination clamping
pragmaxim Apr 29, 2026
565e778
chore(ws-caps): trust X-Real-Ip from private networks
pragmaxim Apr 29, 2026
1aeefc8
chore(ws-caps): periodically sweep limiter from a goroutine
pragmaxim Apr 29, 2026
ac44dae
chore(ws-caps): account-history paging cap
pragmaxim Apr 29, 2026
b3c22ef
chore(ws-caps): configurable trusted proxy CIDR allowlist
pragmaxim Apr 29, 2026
7c2030c
chore(ws-caps): trusted proxy docs
pragmaxim Apr 29, 2026
43da531
chore(ws-caps): drain WS goroutines before RocksDB close
pragmaxim Apr 29, 2026
c0c0991
chore(ws-caps): RocksDB must not close until tracked WS work is done
pragmaxim Apr 29, 2026
2d5b161
Strip IPv6 zone from parseAddr and add link-local zone test
Copilot Apr 30, 2026
8fffaf1
Fix test name casing and add zone-stripping verification test
Copilot Apr 30, 2026
f495091
fix(consensus): Improving consensus node monitoring
pragmaxim Apr 30, 2026
b7f3ee0
fix(fiat): improve errors
pragmaxim May 3, 2026
fad2280
fix(avalanche): retry unfinalized RPC responses
pragmaxim May 1, 2026
7b1cf88
1484 add metric to alternative fee providers (#1485)
cranycrane May 4, 2026
394e29d
fix(erc20): stop ERC20 batch fallback from amplifying RPC calls
pragmaxim May 5, 2026
408d9f6
fix(erc20): swallowed error
pragmaxim May 6, 2026
eba989d
fix(erc20): prefer non-batch call for single contract
pragmaxim May 6, 2026
42e06d4
mempool(mev): decrease mempool timeout for MEV-protected coins
pragmaxim May 5, 2026
6912d27
enhancement(fees): extend infura fetching period, better stale infura…
pragmaxim May 6, 2026
a9ed3ed
mempool(mev): cleanup
pragmaxim May 6, 2026
3e4c0da
1486 remove obsolete socketio interface (#1487)
cranycrane May 6, 2026
dbf6a0d
Stateful ERC4626 - introducing persistent cache to eliminate high eth…
pragmaxim May 8, 2026
61ba7d4
fix(fiat): denominate ETH archive token rates in USD to remove ETH-US…
cranycrane May 4, 2026
2d027ee
feat(contrib): add reset eth token rates script to wipe existing toke…
cranycrane May 4, 2026
606d0ef
feat(fiat): change platformVsCurrency to "usd" for ethereum.json config
cranycrane May 4, 2026
3f2dbb4
Zcash: zebra 4.1.0 -> 4.4.1
cranycrane May 6, 2026
d059b1a
feat: zcashrpc uses getnetworkinfo to fetch current backend name and …
cranycrane May 7, 2026
69613d9
Bcash: 28.0.1 -> 29.0.0
cranycrane May 7, 2026
d22e280
chore(erc4626): e2e tests
pragmaxim May 8, 2026
202513f
chore(erc4626): Unify parsing in tests
pragmaxim May 8, 2026
249b20d
fix(erc4626): prevent vacuous opt-in test pass
Copilot May 8, 2026
fa22e1f
chore(agents): agentic local testing
pragmaxim May 10, 2026
5538935
chore(agents): important facts to avoid regressions
pragmaxim May 10, 2026
b40c4bf
chore(agents): unifying contrib scripts
pragmaxim May 12, 2026
0b70975
chore(agents): caching gh variables into $XDG_CACHE_HOME
pragmaxim May 12, 2026
dcda95a
chore(agents): cleanup
pragmaxim May 13, 2026
e8f1a8c
perf(ws): skip mempool tx loading for AccountDetailsBasic
pragmaxim May 5, 2026
31998b5
perf(ws): skip mempool tx loading for AccountDetailsBasic on xpubs
pragmaxim May 5, 2026
dd1f650
perf(ws): more tests
pragmaxim May 14, 2026
426ac88
perf(ws): Deduplicate address descriptors before counting and fix mat…
pragmaxim May 7, 2026
91c2683
feat: tron returns staking/voting data for accounts (#1467)
cranycrane May 22, 2026
29c73c2
fix: skip ZMQ initialization when message_queue_binding is empty (#1460)
tuan-phan May 22, 2026
fef0e88
Limit xpub descriptor expansion
pragmaxim May 21, 2026
c2cea8a
Handle xpub descriptor limit errors
pragmaxim May 21, 2026
7da3d93
Enforce maxXpubAddressDerivations against the actual cumulative deriv…
pragmaxim May 23, 2026
6fbbeaf
Limit fiat timestamp requests
pragmaxim May 21, 2026
41a1099
Handle websocket work_limit without disconnecting channel
Copilot May 21, 2026
94b22a3
fix: return zero for empty comma-separated input
Copilot May 21, 2026
cab9433
fix(evm): ERC721 Ownership Index Desync After Reorg of a Self-Transfer
pragmaxim May 27, 2026
0554ff6
feat: added avalanche priority fees and corrected existing ones (#1376)
etimofeeva May 27, 2026
0387f16
chore(openapi): openapi.yaml fully tested against btc and etherem BBs
pragmaxim May 25, 2026
7491ad4
chore(openapi): CI/CD validation and smoke tests
pragmaxim May 25, 2026
c7b1879
chore(openapi): port doc and examples from api.md to openapi.yaml
pragmaxim May 25, 2026
b1cd7b6
chore(openapi): rewriting e2e tests from Golang to TS
pragmaxim May 26, 2026
a015e8b
chore(openapi): cleanup and LOC reduction
pragmaxim May 26, 2026
c49cfef
chore(openapi): package-lock.json, big but necessary
pragmaxim May 26, 2026
8a36b41
chore(openapi): blockbook-api.ts openapi.yaml parity
pragmaxim May 26, 2026
04f0de2
chore(openapi): openapi.yaml improvements
pragmaxim May 26, 2026
081e538
fix(openapi): the fragment-only $ref throws can't resolve reference
pragmaxim May 27, 2026
d5bc28a
evm(rpc): reducing trace_timeout
pragmaxim May 15, 2026
8e638c7
chore(sync): Retry transient missing-tip block fetches before unwindi…
pragmaxim May 15, 2026
8cd6fc3
chore(sync): watch chanOsSignal
pragmaxim May 15, 2026
2551364
chore(sync): reflect looping in metrics
pragmaxim May 15, 2026
2e91810
chore(sync): optimize getBestBlockHeight calls
pragmaxim May 15, 2026
4263864
chore(sync): Renamed notFoundRetries => retries at all five usages
pragmaxim May 15, 2026
6beffb8
chore(sync): improve logging
pragmaxim May 15, 2026
0e976da
chore(sync): new stale tip based prometheus metrics
pragmaxim May 15, 2026
9589dbd
chore(sync): average_block_time_seconds prometheus metrics for utxo c…
pragmaxim May 15, 2026
d7b1184
chore(sync): IndexBlockNotFoundRetries + IndexReorgEvents metrics
pragmaxim May 15, 2026
3dd1008
chore(sync): prevent syncing from getting stuck
pragmaxim May 23, 2026
938114a
chore(sync): new sync yield metric
pragmaxim May 23, 2026
f3284bc
chore(sync): configuration and documentation
pragmaxim May 23, 2026
65a78bf
chore(sync): mermaid documentation
pragmaxim May 24, 2026
56b3c90
fix(sync): improving validation
pragmaxim May 27, 2026
19ff83a
feat(ethrpc): observe JSON-RPC calls for block sync and emit error re…
cranycrane May 27, 2026
8e0b671
fix(config): duck-typing issue prevents config propagation
pragmaxim May 27, 2026
4180ccd
fix(config): increase arbitrum block_addresses_to_keep
pragmaxim May 27, 2026
db77f25
fix(metrics): maxPendingHits for address_hotness
pragmaxim May 27, 2026
ba2e659
fix(metrics): reinitialize hits map to release oversized buckets
pragmaxim May 28, 2026
666f74d
fix(sync): syncing stuck because coordinator stopped reading worker a…
pragmaxim May 28, 2026
1c24b43
fix(sync): prevent config value to break syncing
pragmaxim May 29, 2026
a540611
update to Zebra 4.5.0 (#1532)
cranycrane May 29, 2026
42a41b6
chore(sync): subscription-watchdog
pragmaxim May 29, 2026
04bc97c
chore(sync): improving test coverage
pragmaxim May 29, 2026
4f2fe4f
fix(polygon): change deprecated fiat rate param "matic-network" to "p…
cranycrane May 29, 2026
a49590f
feat(evm-metrics): emit eth sync error JSON-RPC error code instead of…
cranycrane May 29, 2026
baea266
chore(sync): sync diagram about EVM newHeads WS
pragmaxim May 29, 2026
801a9ff
fix(sync): advance EVM tip from newHeads header, not an HTTP re-query
cranycrane May 30, 2026
5fca5cc
chore(sync): newHeads (re)establisthing fix
pragmaxim May 31, 2026
39998ec
fix(sync): heal real EVM tip rollback masked by the monotonic guard
pragmaxim May 31, 2026
8f0d66a
refactor(eth): drop write-only bestHeaderTime field
pragmaxim May 31, 2026
fb782be
fix(tron): stop watchdog poll from masking a dead ZeroMQ feed
pragmaxim May 31, 2026
6108c9a
docs(tron): record the non-monotonic tip tradeoff vs the EVM guard
pragmaxim May 31, 2026
dc7134d
docs(sync): document the NotFound over-disconnect tradeoff in handleFork
pragmaxim May 31, 2026
cba66d9
fix(rpc): bound shutdown by clamping rpc_timeout and aborting Tron RPC
pragmaxim Jun 1, 2026
dc1fbf1
fix(rpc): cancel in-flight sync RPCs on shutdown (BTC + Tron HTTP)
pragmaxim Jun 1, 2026
8cf9c8e
fix(api): report fast EVM chains as synced while the resync loop runs
pragmaxim Jun 1, 2026
774e813
enhancement(prof): enable profiling on dev blockbooks
pragmaxim Jun 2, 2026
d0a80f8
fix(sync): bound the RPC dial so a hung reconnect can't park the tip …
pragmaxim Jun 2, 2026
23960fb
feat(evm-metrics): make a stalled sync observable
pragmaxim Jun 2, 2026
bb2ae15
fix(ci/cd): deploy did not call systemctl daemon-reload after install
pragmaxim Jun 2, 2026
5618370
chore(prof): remote blockbook profiling
pragmaxim Jun 2, 2026
f3ddc60
chore(mempool): polygon_archive runs on quicknode, disable mempool sync
pragmaxim Jun 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 10 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
root = true

[*.md]
indent_style = space
indent_size = 4
trim_trailing_whitespace = false
max_line_length = 80
insert_final_newline = true
charset = utf-8
end_of_line = lf
52 changes: 52 additions & 0 deletions .github/actions/export-env-vars/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: Export Repository Variables
description: Export all repository/environment variables from a JSON map into GITHUB_ENV.

inputs:
vars_json:
description: JSON object map of repository/environment variables.
required: true

runs:
using: composite
steps:
- name: Export variables to GITHUB_ENV
shell: bash
env:
VARS_JSON: ${{ inputs.vars_json }}
run: |
python3 - <<'PY'
import json
import os
import uuid

vars_map = json.loads(os.environ.get("VARS_JSON", "{}"))
env_path = os.environ["GITHUB_ENV"]
alias_prefixes = (
"BB_DEV_RPC_URL_HTTP_",
"BB_DEV_RPC_URL_WS_",
"BB_DEV_MQ_URL_",
"BB_PROD_RPC_URL_HTTP_",
"BB_PROD_RPC_URL_WS_",
"BB_PROD_MQ_URL_",
"BB_RPC_BIND_HOST_",
"BB_RPC_ALLOW_IP_",
"BB_DEV_API_URL_HTTP_",
"BB_DEV_API_URL_WS_",
)

def write_env_var(env_file, key, value):
delimiter = f"__{uuid.uuid4().hex}__"
env_file.write(f"{key}<<{delimiter}\n{value}\n{delimiter}\n")

with open(env_path, "a", encoding="utf-8") as env_file:
for key, value in vars_map.items():
text = "" if value is None else str(value)
normalized = key
for prefix in alias_prefixes:
if key.startswith(prefix):
alias = key[len(prefix):]
# Blockbook env lookups use lowercase coin aliases from configs/coins.
normalized = prefix + alias.lower().replace("-", "_")
break
write_env_var(env_file, normalized, text)
PY
7 changes: 7 additions & 0 deletions .github/bin/bbcli
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/usr/bin/env bash
set -euo pipefail

script_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
repo_root="$(cd -- "${script_dir}/../.." && pwd)"

exec "${repo_root}/.github/scripts/run.py" "$@"
49 changes: 49 additions & 0 deletions .github/scripts/backend_decision.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#!/usr/bin/env python3

from __future__ import annotations

import os
import shlex
import sys
from pathlib import Path

import backend_policy
from coin_rpc import CoinRPCError, load_config, resolve_build_env


def format_shell(decision: dict, build_env: str) -> str:
pairs = {
"BACKEND_SHOULD_BUILD": "1" if decision["should_build_backend"] else "0",
"BACKEND_REASON": decision["reason"],
"BACKEND_RPC_ENV": decision["rpc_env"],
"BACKEND_RPC_HOST": decision["rpc_host"],
"BACKEND_COIN_ALIAS": decision["coin_alias"],
"BACKEND_BUILD_ENV": build_env,
}
return "\n".join(f"{key}={shlex.quote(str(value))}" for key, value in pairs.items())


def main(argv: list[str] | None = None) -> None:
args = list(sys.argv[1:] if argv is None else argv)
if len(args) != 1:
raise CoinRPCError(f"usage: {Path(sys.argv[0]).name} <coin>")
coin = args[0]
config_path = Path("configs") / "coins" / f"{coin}.json"
if not config_path.is_file():
raise CoinRPCError(f"missing coin config {config_path}")
build_env = resolve_build_env()
decision = backend_policy.compute_backend_decision(
coin=coin,
config=load_config(config_path),
build_env=build_env,
backend_mode=backend_policy.BACKEND_MODE_AUTO,
)
print(format_shell(decision, build_env))


if __name__ == "__main__":
try:
main()
except CoinRPCError as exc:
print(str(exc), file=sys.stderr)
raise SystemExit(1)
57 changes: 57 additions & 0 deletions .github/scripts/backend_policy.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#!/usr/bin/env python3

from __future__ import annotations

import os
from typing import Mapping

from coin_rpc import get_coin_alias, rpc_hostname, rpc_url_env_name

BACKEND_MODE_AUTO = "auto"
BACKEND_MODE_ALWAYS = "always"
BACKEND_MODE_NEVER = "never"


def should_build_backend(
*,
backend_mode: str,
rpc_url: str,
) -> tuple[bool, str]:
if backend_mode == BACKEND_MODE_NEVER:
return False, "backend-mode-never"
if backend_mode == BACKEND_MODE_ALWAYS:
return True, "backend-mode-always"
if not rpc_url:
return True, "rpc-url-env-missing-or-empty"
rpc_host = rpc_hostname(rpc_url)
if not rpc_host:
return False, "rpc-host-missing"
if rpc_host in {"localhost", "127.0.0.1", "::1"}:
return True, f"rpc-host-is-local-{rpc_host}"
return False, f"rpc-host-is-remote-{rpc_host}"


def compute_backend_decision(
*,
coin: str,
config: dict,
build_env: str,
backend_mode: str,
env: Mapping[str, str] | None = None,
) -> dict:
if env is None:
env = os.environ
coin_alias = get_coin_alias(config, coin)
rpc_env = rpc_url_env_name(coin_alias, build_env)
rpc_url = env.get(rpc_env, "").strip()
should_build, reason = should_build_backend(
backend_mode=backend_mode,
rpc_url=rpc_url,
)
return {
"coin_alias": coin_alias,
"rpc_env": rpc_env,
"rpc_host": rpc_hostname(rpc_url),
"should_build_backend": should_build,
"reason": reason,
}
Loading