@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 +8 -5
- package/RELEASE_NOTES.md +83 -0
- package/dingo.yaml.example +42 -21
- package/package.json +1 -1
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
|
|
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
|
-
- [
|
|
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
|
package/dingo.yaml.example
CHANGED
|
@@ -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
|
|
23
|
-
|
|
24
|
-
#
|
|
25
|
-
|
|
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
|
|
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).
|
|
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
|
|
140
|
-
#
|
|
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:
|
|
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:
|
|
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:
|
|
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,
|
|
176
|
+
# Relay node (core storage, API ports ignored):
|
|
166
177
|
# storageMode: "core"
|
|
167
178
|
# blockProducer: false
|
|
168
179
|
#
|
|
169
|
-
# Data node (
|
|
180
|
+
# Data node (all APIs start on defaults automatically):
|
|
170
181
|
# storageMode: "api"
|
|
171
|
-
#
|
|
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,
|
|
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
|