Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
777 commits
Select commit Hold shift + click to select a range
d63225d
end-to-end API tests for all evm coins
pragmaxim Feb 25, 2026
e9bdd62
fix: filter out invalid tokens without any holding fields
pragmaxim Feb 25, 2026
496f8e0
fix: add validation for negative ranges
pragmaxim Feb 25, 2026
0703a69
fix: retry sync on various errors + log swallowed errors
pragmaxim Feb 26, 2026
87c20fd
hardening e2e tests for newly discovered bugs
pragmaxim Feb 26, 2026
da37dfd
fiat: e2e tests
pragmaxim Feb 26, 2026
e568383
log warning that hostnames differ
pragmaxim Feb 27, 2026
95eaa9b
adding github workflow with e2e tests on self-hosted runners
pragmaxim Mar 2, 2026
6249ddf
ci: avoid building docker image each time
pragmaxim Mar 2, 2026
f8f9e5c
ci: do not upper case env vars
pragmaxim Mar 2, 2026
fcf1329
ci: avoid mixing runners for caching reasons
pragmaxim Mar 2, 2026
28e8502
ci: fixing non-deterministic race condition
pragmaxim Mar 2, 2026
c36e24b
ci: add BB_API_* env vars
pragmaxim Mar 2, 2026
2fa948a
ci: fail fast e2e abort if BB is unavailable
pragmaxim Mar 2, 2026
d33d606
ci: safety net timeout
pragmaxim Mar 3, 2026
73b3f2a
ci: bb connectivity suite
pragmaxim Mar 3, 2026
3bc29ea
ci: deploy workflow matrix
pragmaxim Mar 4, 2026
23a4a84
ci: _archive fallback in env resolution
pragmaxim Mar 4, 2026
84c652d
e2e tests should run on specific runners
pragmaxim Mar 5, 2026
ca942e2
not run e2e tests against Base chain
pragmaxim Mar 5, 2026
4607063
fixing packaging problem during build time
pragmaxim Mar 6, 2026
680ac91
fix: add missing strings import
pragmaxim Mar 13, 2026
6442dd1
ws origin allowlist
pragmaxim Feb 16, 2026
22fc431
fixes #1426 scientific notation parsing error
pragmaxim Mar 4, 2026
33b99cc
enhancement: limit /api/sendtx body size
pragmaxim Mar 11, 2026
f8349fc
enhancement: reject oversized websocket messages
pragmaxim Mar 11, 2026
e4fdb5e
enhancement: avoid template.JSStr
pragmaxim Mar 11, 2026
a08fa8f
enhancement: improving unsound mempool rsync log messages
pragmaxim Mar 13, 2026
3a9d427
fix: lower case coin alias in BB_RUNNER_ variables
pragmaxim Mar 16, 2026
1287b7f
fix: decrease shell boundaries crossing for E2E_REGEX passing
pragmaxim Mar 16, 2026
d4be5a9
fix: remove bsc_archive from tests.json
pragmaxim Mar 16, 2026
ee31ca9
fix: lookup coins in tests without _archive suffix
pragmaxim Mar 16, 2026
13aaa7e
deploy: expect BB_API_URL_* variables to be without _archive alias
pragmaxim Mar 16, 2026
7544c00
deploy: wait for blockbook to be synced after deploy before e2e tests
pragmaxim Mar 16, 2026
67fee60
deploy: rename BB_API_URL to BB_TEST_API_URL as a convention for coin…
pragmaxim Mar 16, 2026
a91dcc6
ci/cd: introducing test name config
pragmaxim Mar 17, 2026
f8ae668
ci/cd: removing unused env_resolution
pragmaxim Mar 17, 2026
e23bfbd
ci/cd: both suffix & infix archive fallback mechanism
pragmaxim Mar 17, 2026
f99e617
ci/cd: build + deploy steps
pragmaxim Mar 17, 2026
24a76f0
ci/cd: build groups BBs by runner and call make with all of them
pragmaxim Mar 17, 2026
ea4cbe7
ci/cd: batter naming for GH action
pragmaxim Mar 17, 2026
b4b2b93
ci/cd: use apt-get as originally
pragmaxim Mar 17, 2026
cce3899
ci/cd: transparent deploy progress for troubleshooting
pragmaxim Mar 17, 2026
7d37154
ci/cd: cleanup
pragmaxim Mar 17, 2026
8139873
ci/cd: prod & dev environments
pragmaxim Mar 18, 2026
a1f1403
ci/cd: /root-path/{branch_or_tag}/{coin_alias}/blockbook.deb
pragmaxim Mar 18, 2026
ab37884
ci/cd: conditional backend building
pragmaxim Mar 18, 2026
c0abe5d
ci/cd: coin/coin_alias usage should be sound
pragmaxim Mar 18, 2026
4a86daa
ci/cd: cleanup domain filtering
pragmaxim Mar 19, 2026
4446042
ci/cd: validation logic
pragmaxim Mar 19, 2026
b5bc614
ci/cd: sub-commands help
pragmaxim Mar 19, 2026
0bfa88c
ci/cd: bin/bb_deploy wrapper
pragmaxim Mar 19, 2026
f6e5804
ci/cd: env vars section and naming matrix in documentation
pragmaxim Mar 19, 2026
ea5c98a
ci/cd: final cleanup
pragmaxim Mar 19, 2026
a21412c
Security fix for potential DoS issue (#1363)
etimofeeva Mar 23, 2026
f5eb9ee
eth (+testnets) 3.2.1 → 3.3.3
Dehumanizer77 Jan 19, 2026
281d692
prysm 6.1.2 → 7.1.0
Dehumanizer77 Jan 6, 2026
116cd1a
Update Firo daemon 0.14.15.3
justanwar Mar 10, 2026
176fffb
bump Qtum 29.1
icodeface Nov 17, 2025
450f016
fluxd v9.0.5
TheTrunk Nov 11, 2025
ae6bab5
ci/cd: missing python3 execution
pragmaxim Mar 19, 2026
dfd7828
ci/cd: prod/dev labels fix
pragmaxim Mar 19, 2026
50d7728
ci/cd: bb_deploy watch shows logs even after finishing
pragmaxim Mar 19, 2026
171f28f
ci/cd: adding bitcoin_regtest integration and e2e tests
pragmaxim Mar 20, 2026
0c0305f
ci/cd: conditional backend building against loopback instead of BB_BA…
pragmaxim Mar 23, 2026
46dd022
ci/cd: propagate dev/prod environments into backend building/testing
pragmaxim Mar 23, 2026
9a4dfcb
ci/cd: renaming BB_TEST to BB_DEV env vars to be compliant with the rest
pragmaxim Mar 23, 2026
cdb9918
ci/cd: use test_name for during endpoint resolution
pragmaxim Mar 23, 2026
632f31a
ci/cd: conditional Wants=backend.service if rpc_url is local
pragmaxim Mar 23, 2026
e220086
feat: tron support implementation
cranycrane Oct 28, 2025
fcf210f
test(tron): unit+integration tests
cranycrane Oct 28, 2025
bd15c5e
chore(tron): update SendRawTransaction to current interface
cranycrane Oct 28, 2025
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
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