@blinklabs/dingo 0.28.0 → 0.29.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -22,7 +22,7 @@ A high-performance Cardano blockchain node implementation in Go by Blink Labs. D
22
22
  - Peer governance with dynamic peer selection, ledger peers, and topology support
23
23
  - Chain rollback support for handling forks with automatic state restoration
24
24
  - Fast bootstrapping via built-in Mithril client
25
- - Multiple API servers: UTxO RPC, Blockfrost-compatible REST, Mesh (Coinbase Rosetta)
25
+ - Multiple API servers: UTxO RPC, WIP Blockfrost-compatible REST, Mesh (Coinbase Rosetta)
26
26
 
27
27
  Note: On Windows systems, named pipes are used instead of Unix sockets for node-to-client communication.
28
28
 
@@ -163,14 +163,13 @@ storageMode: "api"
163
163
 
164
164
  ## API Servers
165
165
 
166
- Dingo includes four API servers, all disabled by default. Enable them by setting a non-zero port. All API servers except Bark require `storageMode: "api"`.
166
+ Dingo includes three API servers. All APIs require `storageMode: "api"` and start automatically on their default ports in that mode. Set an individual port to 0 to disable a specific API. The Blockfrost server provides a WIP Blockfrost-compatible REST API with a growing subset of the compatibility surface.
167
167
 
168
168
  | API | Port Env Var | Default | Protocol |
169
169
  |-----|-------------|---------|----------|
170
170
  | UTxO RPC | `DINGO_UTXORPC_PORT` | disabled | gRPC |
171
171
  | Blockfrost | `DINGO_BLOCKFROST_PORT` | disabled | REST |
172
172
  | Mesh (Rosetta) | `DINGO_MESH_PORT` | disabled | REST |
173
- | Bark | `DINGO_BARK_PORT` | disabled | RPC |
174
173
 
175
174
  ```bash
176
175
  # Enable Blockfrost API on port 3100 and UTxO RPC on port 9090
@@ -209,6 +208,8 @@ CARDANO_BLOCK_PRODUCER=true \
209
208
  ./dingo
210
209
  ```
211
210
 
211
+ When `storageMode=core`, the Badger blob store defaults to mmap-only settings: `block-cache-size=0`, `index-cache-size=0`, and `compression=false`. When `storageMode=api`, the default Badger profile is `block-cache-size=268435456`, `index-cache-size=0`, and `compression=true`. YAML, environment variable, and CLI Badger options override those defaults only when explicitly set.
212
+
212
213
  See `dingo.yaml.example` for the full set of configuration options.
213
214
 
214
215
  ## Fast Bootstrapping with Mithril
@@ -313,8 +314,11 @@ BadgerDB Options:
313
314
  - `data-dir` - Directory for database files
314
315
  - `block-cache-size` - Block cache size in bytes
315
316
  - `index-cache-size` - Index cache size in bytes
317
+ - `compression` - Enable Snappy compression
316
318
  - `gc` - Enable garbage collection
317
319
 
320
+ Leave the mode-sensitive Badger settings unset if you want Dingo's storage-mode defaults. `storageMode=core` uses `block-cache-size=0`, `index-cache-size=0`, and `compression=false`; `storageMode=api` uses `block-cache-size=268435456`, `index-cache-size=0`, and `compression=true`.
321
+
318
322
  Google Cloud Storage Options:
319
323
  - `bucket` - GCS bucket name
320
324
  - `project-id` - Google Cloud project ID
@@ -436,9 +440,8 @@ For information on developing custom storage plugins, see [PLUGIN_DEVELOPMENT.md
436
440
  - [x] Genesis snapshot capture
437
441
  - [x] API Servers
438
442
  - [x] UTxO RPC (gRPC)
439
- - [x] Blockfrost-compatible REST API
443
+ - [ ] WIP Blockfrost-compatible REST API
440
444
  - [x] Mesh (Coinbase Rosetta) API
441
- - [x] Bark block archive API
442
445
  - [x] Mithril Bootstrap
443
446
  - [x] Built-in Mithril client
444
447
  - [x] Ledger state import (UTxOs, accounts, pools, DReps, epochs)
package/RELEASE_NOTES.md CHANGED
@@ -1,6 +1,89 @@
1
1
  # Release Notes
2
2
 
3
3
 
4
+ ## v0.29.0 (March 31, 2026)
5
+
6
+ **Title:** Smoother operations and API refinements
7
+
8
+ **Date:** March 31, 2026
9
+
10
+ **Version:** v0.29.0
11
+
12
+ Hi folks! Here’s what we shipped in v0.29.0.
13
+
14
+ ### ✨ What's New
15
+
16
+ - **Conway-era transaction builders and txpump:** End-to-end testing is easier because you can now generate and run newer-era transactions in automated runs.
17
+ - **Devnet and testnet helpers:** Spinning up test environments is simpler because you now have wallet-focused tests, a configurator script, local devnet helpers, a Dingo testnet spec, and Antithesis `docker-compose` wiring.
18
+ - **Storage disk-usage metrics:** Capacity planning is easier because the blob store and metadata store now export disk-usage (`DiskSize`) Prometheus gauge metrics.
19
+
20
+ ### 💪 Improvements
21
+
22
+ - **Faster post-snapshot replay:** Restarts are faster because chain-sync now uses a Mithril trust-boundary slot to skip replay work already covered by a snapshot.
23
+ - **Configurable CBOR cache sizing:** Performance tuning is simpler because you can now set the CBOR cache size in configuration.
24
+ - **More predictable Badger defaults:** Deployments are more consistent because storage-mode-specific defaults only apply when values are truly unset.
25
+ - **More accurate Blockfrost responses:** Block and epoch data is more reliable because latest block, epoch, and protocol-parameter responses are now sourced from ledger state and the database.
26
+
27
+ ### 🔧 Fixes
28
+
29
+ - **Safer rollbacks behind snapshots:** Rollback behavior is more rock-solid because the Mithril trust-boundary now resets when a rollback crosses it.
30
+ - **Rock-solid rollback recovery:** Recovery is smoother because “rollback point not found” now follows the same handling path as `local_tip_plateau`.
31
+ - **Rock-solid WatchTx rollbacks:** Transaction watching is more reliable because WatchTx now supports undo and rollback during chain reorganizations.
32
+
33
+ ### 📋 What You Need to Know
34
+
35
+ - **No action required:** You're all set—just upgrade to v0.29.0.
36
+ - **Replay and rollback near snapshots:** Testing runs may look different because chain-sync replay now respects the Mithril trust-boundary and resets it on rollback.
37
+
38
+ ### 🙏 Thank You
39
+
40
+ Thank you for trying!
41
+
42
+ ---
43
+
44
+
45
+ ## v0.28.0 (March 30, 2026)
46
+
47
+ **Title:** Network-aware metrics and steadier block production
48
+
49
+ **Date:** March 30, 2026
50
+
51
+ **Version:** v0.28.0
52
+
53
+ Hi folks! Here's what we shipped in v0.28.0.
54
+
55
+ ### ✨ What's New
56
+
57
+ - **Network-labelled Prometheus metrics and build info:** Dashboard setup is easier because every Prometheus metric now carries a `network` label automatically, and a new `dingo_build_info` gauge exposes version, commit, and Go version at a glance.
58
+ - **Tip gap and epoch gauges:** Sync monitoring is simpler because three new gauges track tip gap (wall-clock slot minus chain tip), Shelley genesis start time, and epoch length.
59
+ - **Transaction metadata label index (Blockfrost):** Metadata queries are faster because a new transaction metadata label table powers indexed lookups with deterministic pagination and rollback-safe cleanup.
60
+
61
+ ### 💪 Improvements
62
+
63
+ - **Smarter chain selection near tip:** Tip following is steadier because chain selection now prefers the actually-delivered chainsync tip over the advertised remote tip and sticks with the incumbent peer when two peers report the same frontier.
64
+ - **Paginated DumpHistory (UTxO RPC):** Large history queries are more reliable because `DumpHistory` now uses a chain iterator with `next_token` pagination and sensible defaults when `max_items` is omitted.
65
+ - **Leaner TxSubmission pipeline:** CPU usage under load is lower because the unnecessary rate limiter on the pull-based TxSubmission protocol was removed, eliminating a tight retry loop that starved chainsync and blockfetch.
66
+ - **Leios protocols gated behind config:** Compatibility with non-Leios peers is more rock-solid because Leios mini-protocols are now only registered when `EnableLeios` is set, preventing muxer errors from peers that reject unknown protocols.
67
+
68
+ ### 🔧 Fixes
69
+
70
+ - **Post-Mithril leader election:** Block production after a Mithril bootstrap is more reliable because `EpochNonce()` now falls through to the database when the in-memory nonce is empty, and `CaptureGenesisSnapshot()` falls back to the latest epoch start slot when slot 0 yields no pools.
71
+ - **Forged-block rollback exemption:** Fork resolution after slot battles is correct because the rollback loop detector now exempts rollbacks through slots where the node forged a block.
72
+ - **Richer UTxO RPC responses:** Script evaluation and data queries are more complete because `evalTx` now includes redeemer payloads and `readData` now returns parsed datums.
73
+
74
+ ### 📋 What You Need to Know
75
+
76
+ - **Metrics dashboards:** If you run Prometheus dashboards, all metrics now include a `network` label — update your queries or selectors if you filter by metric name alone.
77
+ - **Leios users:** If you use Leios mode, make sure `EnableLeios` is set in your configuration; the protocols are no longer registered by default.
78
+ - **Default make target:** `make` no longer runs tests by default — use `make test` explicitly.
79
+
80
+ ### 🙏 Thank You
81
+
82
+ Thank you for trying!
83
+
84
+ ---
85
+
86
+
4
87
  ## v0.27.7 (March 24, 2026)
5
88
 
6
89
  **Title:** Steadier sync and leaner storage
@@ -1,5 +1,7 @@
1
1
  # Example config file for dingo
2
- # The values shown below correspond to the in-code defaults
2
+ # The values shown below correspond to the in-code defaults unless a
3
+ # setting is left commented out to preserve a storage-mode-specific
4
+ # runtime default.
3
5
 
4
6
  # Public bind address for the Dingo server
5
7
  bindAddr: "0.0.0.0"
@@ -19,12 +21,21 @@ database:
19
21
  badger:
20
22
  # Data directory for BadgerDB storage
21
23
  data-dir: ".dingo/badger"
22
- # Block cache size in bytes (default: 1610612736 ~1.5GB)
23
- block-cache-size: 1610612736
24
- # Index cache size in bytes (default: 536870912 ~512MB)
25
- index-cache-size: 536870912
24
+ # Block cache size in bytes.
25
+ # Leave unset to use the storage-mode default:
26
+ # - 0 when storageMode: "core"
27
+ # - 268435456 (256MB) when storageMode: "api"
28
+ # block-cache-size: 0
29
+ # Index cache size in bytes.
30
+ # Leave unset to use the runtime default (0 in both core and api modes).
31
+ # index-cache-size: 0
26
32
  # Enable garbage collection (default: true)
27
33
  gc: true
34
+ # Enable Snappy compression.
35
+ # Leave unset to use the storage-mode default:
36
+ # - false when storageMode: "core"
37
+ # - true when storageMode: "api"
38
+ # compression: false
28
39
  gcs:
29
40
  # Google Cloud Storage bucket name
30
41
  bucket: ""
@@ -128,26 +139,26 @@ relayPort: 3001
128
139
 
129
140
  # Storage mode controls how much data is persisted.
130
141
  # - "core": Only consensus data (UTxOs, certs, pools, pparams). Suitable for
131
- # block producers and relay nodes with no APIs enabled.
142
+ # block producers and relay nodes. API ports are ignored in core mode.
132
143
  # - "api": Core data plus full transaction metadata (witnesses, scripts, datums,
133
- # redeemers). Required when any API is enabled.
134
- # APIs will refuse to start if storage mode is not "api".
144
+ # redeemers). All APIs start automatically on their default ports.
135
145
  #
136
146
  # Can be overridden with DINGO_STORAGE_MODE
137
147
  storageMode: "core"
138
148
 
139
- # API ports (0 = disabled, default)
140
- # All APIs require storageMode: "api"
149
+ # API ports — only used when storageMode is "api".
150
+ # In API mode, all APIs start on their default ports. Set a port to 0 to
151
+ # disable an individual API.
141
152
  #
142
- # UTxO RPC gRPC API port
153
+ # UTxO RPC gRPC API port (default: 9090)
143
154
  # Can be overridden with DINGO_UTXORPC_PORT
144
- utxorpcPort: 0
145
- # Blockfrost-compatible REST API port
155
+ utxorpcPort: 9090
156
+ # Blockfrost-compatible REST API port (default: 3000)
146
157
  # Can be overridden with DINGO_BLOCKFROST_PORT
147
- blockfrostPort: 0
148
- # Mesh (Coinbase Rosetta) REST API port
158
+ blockfrostPort: 3000
159
+ # Mesh (Coinbase Rosetta) REST API port (default: 8080)
149
160
  # Can be overridden with DINGO_MESH_PORT
150
- meshPort: 0
161
+ meshPort: 8080
151
162
 
152
163
  # base url of bark archive server
153
164
  barkBaseUrl: ""
@@ -162,21 +173,31 @@ barkPort: 0
162
173
  # ---
163
174
  # Deployment pattern examples (uncomment one block):
164
175
  #
165
- # Relay node (core storage, no APIs):
176
+ # Relay node (core storage, API ports ignored):
166
177
  # storageMode: "core"
167
178
  # blockProducer: false
168
179
  #
169
- # Data node (API storage, one or more API ports enabled):
180
+ # Data node (all APIs start on defaults automatically):
170
181
  # storageMode: "api"
171
- # utxorpcPort: 9090
172
- # blockfrostPort: 3100
182
+ # # Override individual ports or set to 0 to disable:
183
+ # # blockfrostPort: 3100
184
+ # # meshPort: 0 # disable Mesh API
185
+ # # With storageMode: "api", leave mode-sensitive Badger settings unset to keep:
186
+ # # block-cache-size: 268435456
187
+ # # index-cache-size: 0
188
+ # # compression: true
173
189
  #
174
- # Validator / block producer (core storage, no APIs):
190
+ # Validator / block producer (core storage, API ports ignored):
175
191
  # storageMode: "core"
176
192
  # blockProducer: true
177
193
  # shelleyVrfKey: "/keys/vrf.skey"
178
194
  # shelleyKesKey: "/keys/kes.skey"
179
195
  # shelleyOperationalCertificate: "/keys/opcert.cert"
196
+ # # With storageMode: "core", Badger blob defaults switch to mmap-only:
197
+ # # block-cache-size: 0
198
+ # # index-cache-size: 0
199
+ # # compression: false
200
+ # # You can still override any of those explicitly under database.blob.badger.
180
201
  # # Optional forging tolerances (0 = defaults)
181
202
  # forgeSyncToleranceSlots: 0
182
203
  # forgeStaleGapThresholdSlots: 0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blinklabs/dingo",
3
- "version": "0.28.0",
3
+ "version": "0.29.1",
4
4
  "description": "Dingo is a Cardano blockchain data node",
5
5
  "main": "index.js",
6
6
  "bin": {