@blinklabs/dingo 0.31.1 → 0.32.0
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/ARCHITECTURE.md +16 -16
- package/README.md +18 -13
- package/RELEASE_NOTES.md +33 -0
- package/package.json +1 -1
package/ARCHITECTURE.md
CHANGED
|
@@ -22,7 +22,7 @@ Dingo is a high-performance Cardano blockchain node implementation in Go. This d
|
|
|
22
22
|
- [Transaction Mempool](#transaction-mempool)
|
|
23
23
|
- [Block Production](#block-production)
|
|
24
24
|
- [Mithril Bootstrap](#mithril-bootstrap)
|
|
25
|
-
- [
|
|
25
|
+
- [External Interfaces](#external-interfaces)
|
|
26
26
|
- [Design Patterns](#design-patterns)
|
|
27
27
|
- [Threading and Concurrency](#threading-and-concurrency)
|
|
28
28
|
- [Configuration](#configuration)
|
|
@@ -79,7 +79,7 @@ graph TB
|
|
|
79
79
|
Meta["MetadataStore<br/>sqlite / postgres / mysql"]
|
|
80
80
|
end
|
|
81
81
|
|
|
82
|
-
subgraph "
|
|
82
|
+
subgraph "External Interfaces"
|
|
83
83
|
URPC["UTxO RPC<br/><i>utxorpc/</i>"]
|
|
84
84
|
BFA["Blockfrost API<br/><i>blockfrost/</i>"]
|
|
85
85
|
Mesh["Mesh API<br/><i>mesh/</i>"]
|
|
@@ -490,10 +490,10 @@ dingo/
|
|
|
490
490
|
│ ├── submit.go # Submit service
|
|
491
491
|
│ ├── sync.go # Sync service
|
|
492
492
|
│ └── watch.go # Watch service
|
|
493
|
-
├── bark/ # Bark archive
|
|
494
|
-
│ ├── bark.go #
|
|
495
|
-
│ ├── archive.go # Archive
|
|
496
|
-
│ └── blob.go #
|
|
493
|
+
├── bark/ # Bark Dingo-to-Dingo C2 and archive protocol
|
|
494
|
+
│ ├── bark.go # Bark server lifecycle and transport setup
|
|
495
|
+
│ ├── archive.go # Archive service interface
|
|
496
|
+
│ └── blob.go # Remote archive blob adapter with security window
|
|
497
497
|
├── mithril/ # Mithril snapshot bootstrap
|
|
498
498
|
│ ├── bootstrap.go # Bootstrap orchestration
|
|
499
499
|
│ ├── client.go # Mithril aggregator client
|
|
@@ -538,7 +538,7 @@ type Node struct {
|
|
|
538
538
|
ledgerState *ledger.LedgerState // UTXO/state tracking
|
|
539
539
|
snapshotMgr *snapshot.Manager // Stake snapshot capture
|
|
540
540
|
utxorpc *utxorpc.Utxorpc // UTxO RPC server
|
|
541
|
-
bark *bark.Bark //
|
|
541
|
+
bark *bark.Bark // Bark C2/archive server
|
|
542
542
|
blockfrostAPI *blockfrost.Blockfrost // Blockfrost REST API
|
|
543
543
|
meshAPI *mesh.Server // Mesh (Rosetta) API
|
|
544
544
|
ouroboros *ouroboros.Ouroboros // Protocol handlers
|
|
@@ -557,7 +557,7 @@ When `Node.Run()` is called, components are initialized in this order:
|
|
|
557
557
|
3. ChainManager initialization
|
|
558
558
|
4. Ouroboros protocol handler creation
|
|
559
559
|
5. LedgerState creation (UTXO tracking, validation)
|
|
560
|
-
6. Bark
|
|
560
|
+
6. Bark remote archive adapter (if configured)
|
|
561
561
|
7. LedgerState start
|
|
562
562
|
8. Snapshot manager start (captures genesis snapshot)
|
|
563
563
|
9. Mempool setup
|
|
@@ -567,7 +567,7 @@ When `Node.Run()` is called, components are initialized in this order:
|
|
|
567
567
|
13. Stalled client recycler (background goroutine)
|
|
568
568
|
14. PeerGovernor (topology + churn + ledger peers)
|
|
569
569
|
15. UTxO RPC server (if port configured)
|
|
570
|
-
16. Bark archive server (if port configured)
|
|
570
|
+
16. Bark C2/archive server (if port configured)
|
|
571
571
|
17. Blockfrost API (if port configured)
|
|
572
572
|
18. Mesh API (if port configured)
|
|
573
573
|
19. Block forger + leader election (if block producer mode)
|
|
@@ -582,7 +582,7 @@ Graceful shutdown proceeds in phases:
|
|
|
582
582
|
Phase 1: Stop accepting new work
|
|
583
583
|
Block forger, leader election, chain selector,
|
|
584
584
|
peer governor, snapshot manager, UTxO RPC,
|
|
585
|
-
Bark, Blockfrost API, Mesh API
|
|
585
|
+
Bark C2/archive server, Blockfrost API, Mesh API
|
|
586
586
|
|
|
587
587
|
Phase 2: Drain and close connections
|
|
588
588
|
Mempool, ConnectionManager
|
|
@@ -679,7 +679,7 @@ Dingo uses a dual-layer storage architecture with pluggable backends:
|
|
|
679
679
|
Dingo supports two storage modes, configured via `storageMode`:
|
|
680
680
|
|
|
681
681
|
- `core` (default): Minimal storage for chain following and block production.
|
|
682
|
-
- `api`: Extended storage with transaction indexes, address lookups, and asset tracking. Required when any API server (Blockfrost, Mesh, UTxO RPC) is enabled.
|
|
682
|
+
- `api`: Extended storage with transaction indexes, address lookups, and asset tracking. Required when any client-facing API server (Blockfrost, Mesh, UTxO RPC) is enabled. Bark is a separate Dingo-to-Dingo protocol and is not part of that API surface.
|
|
683
683
|
|
|
684
684
|
### Tiered CBOR Cache
|
|
685
685
|
|
|
@@ -977,13 +977,13 @@ The `mithril/` package enables fast initial sync by downloading and importing a
|
|
|
977
977
|
|
|
978
978
|
This is exposed via the `dingo mithril` CLI subcommand and the `dingo load` command.
|
|
979
979
|
|
|
980
|
-
##
|
|
980
|
+
## External Interfaces
|
|
981
981
|
|
|
982
|
-
Dingo provides
|
|
982
|
+
Dingo provides three client-facing APIs plus Bark. All are optional and gated by port configuration. UTxO RPC, Blockfrost, and Mesh are general-purpose external APIs and require `storageMode: api`. Bark is different: it is Dingo's own protocol for Dingo-to-Dingo C2/archive services, not a general-purpose application API.
|
|
983
983
|
|
|
984
984
|
### Blockfrost API (`blockfrost/`)
|
|
985
985
|
|
|
986
|
-
A Blockfrost-compatible REST API that provides read access to chain data.
|
|
986
|
+
A Blockfrost-compatible REST API that provides read access to chain data. The current implementation exposes the latest, epoch, network, and pool subset. It uses an adapter pattern to translate between Dingo's internal state and Blockfrost response types and supports cursor-based pagination.
|
|
987
987
|
|
|
988
988
|
### Mesh API (`mesh/`)
|
|
989
989
|
|
|
@@ -995,7 +995,7 @@ A gRPC server implementing the UTxO RPC specification with query, submit, sync,
|
|
|
995
995
|
|
|
996
996
|
### Bark (`bark/`)
|
|
997
997
|
|
|
998
|
-
|
|
998
|
+
Bark is Dingo's own protocol for Dingo-to-Dingo control-plane and archive services. It exposes archive access over Connect/gRPC and also supplies a remote archive adapter with a configurable security window, allowing Dingo to fetch historical blocks from a remote Bark instance instead of storing them locally.
|
|
999
999
|
|
|
1000
1000
|
## Design Patterns
|
|
1001
1001
|
|
|
@@ -1066,7 +1066,7 @@ Key configuration areas:
|
|
|
1066
1066
|
- CBOR cache sizing (hot entries, block LRU)
|
|
1067
1067
|
- Chainsync client limits and stall timeout
|
|
1068
1068
|
- Block producer credentials (VRF key, KES key, operational certificate)
|
|
1069
|
-
-
|
|
1069
|
+
- External interface ports (Blockfrost, Mesh, UTxO RPC, Bark)
|
|
1070
1070
|
|
|
1071
1071
|
## Stake Snapshots
|
|
1072
1072
|
|
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
|
|
25
|
+
- Multiple external interfaces: general-purpose APIs (UTxO RPC, Blockfrost-compatible REST, Mesh/Rosetta) plus Bark for Dingo-to-Dingo C2 and archive services
|
|
26
26
|
|
|
27
27
|
Note: On Windows systems, named pipes are used instead of Unix sockets for node-to-client communication.
|
|
28
28
|
|
|
@@ -132,11 +132,15 @@ docker run -p 3001:3001 \
|
|
|
132
132
|
|
|
133
133
|
The image is based on Debian bookworm-slim and includes `cardano-cli`, `nview`, and `txtop`. Mithril snapshot support is built into dingo natively (`dingo mithril sync`). The Dockerfile sets `CARDANO_DATABASE_PATH=/data/db` and `CARDANO_SOCKET_PATH=/ipc/dingo.socket`, overriding the local defaults of `.dingo` and `dingo.socket` — the volume mounts above map to these container paths.
|
|
134
134
|
|
|
135
|
-
| Port | Service |
|
|
136
|
-
|
|
137
|
-
| 3001 | Ouroboros NtN (node-to-node) |
|
|
138
|
-
| 3002 | Ouroboros NtC over TCP |
|
|
139
|
-
| 12798 | Prometheus metrics |
|
|
135
|
+
| Port | Service | Default |
|
|
136
|
+
|------|---------|---------|
|
|
137
|
+
| 3001 | Ouroboros NtN (node-to-node) | Enabled |
|
|
138
|
+
| 3002 | Ouroboros NtC over TCP | Enabled |
|
|
139
|
+
| 12798 | Prometheus metrics | Enabled |
|
|
140
|
+
| 3000 | Blockfrost REST API | Disabled |
|
|
141
|
+
| 8080 | Mesh (Rosetta) REST API | Disabled |
|
|
142
|
+
| 9090 | UTxO RPC (gRPC) | Disabled |
|
|
143
|
+
| — | Bark archive (gRPC) | Disabled (example when enabled: 9091) |
|
|
140
144
|
|
|
141
145
|
## Storage Modes
|
|
142
146
|
|
|
@@ -161,15 +165,16 @@ Or in `dingo.yaml`:
|
|
|
161
165
|
storageMode: "api"
|
|
162
166
|
```
|
|
163
167
|
|
|
164
|
-
## API Servers
|
|
168
|
+
## API Servers and Bark
|
|
165
169
|
|
|
166
|
-
Dingo includes three
|
|
170
|
+
Dingo includes three general-purpose external APIs plus Bark. UTxO RPC, Blockfrost, and Mesh are client-facing APIs and require `storageMode: "api"`. Bark is different: it is Dingo's own protocol for Dingo-to-Dingo C2/archive services, not a general-purpose application API. Set an individual port to 0 to disable a specific interface. The Blockfrost server currently exposes the latest, epoch, network, and pool subset.
|
|
167
171
|
|
|
168
|
-
|
|
|
169
|
-
|
|
170
|
-
| UTxO RPC | `DINGO_UTXORPC_PORT` | disabled | gRPC |
|
|
171
|
-
| Blockfrost | `DINGO_BLOCKFROST_PORT` | disabled | REST |
|
|
172
|
-
| Mesh (Rosetta) | `DINGO_MESH_PORT` | disabled | REST |
|
|
172
|
+
| Interface | Port Env Var | Default | Protocol | Role |
|
|
173
|
+
|-----------|--------------|---------|----------|------|
|
|
174
|
+
| UTxO RPC | `DINGO_UTXORPC_PORT` | disabled | gRPC | General-purpose client API |
|
|
175
|
+
| Blockfrost | `DINGO_BLOCKFROST_PORT` | disabled | REST | General-purpose client API |
|
|
176
|
+
| Mesh (Rosetta) | `DINGO_MESH_PORT` | disabled | REST | General-purpose client API |
|
|
177
|
+
| Bark | `DINGO_BARK_PORT` | disabled | Connect/gRPC | Dingo-to-Dingo C2/archive protocol |
|
|
173
178
|
|
|
174
179
|
```bash
|
|
175
180
|
# Enable Blockfrost API on port 3100 and UTxO RPC on port 9090
|
package/RELEASE_NOTES.md
CHANGED
|
@@ -1,6 +1,39 @@
|
|
|
1
1
|
# Release Notes
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
## v0.31.1 (April 4, 2026)
|
|
5
|
+
|
|
6
|
+
**Title:** Clearer rollback recovery outcomes
|
|
7
|
+
|
|
8
|
+
**Date:** April 4, 2026
|
|
9
|
+
|
|
10
|
+
**Version:** v0.31.1
|
|
11
|
+
|
|
12
|
+
Hi folks! Here’s what we shipped in v0.31.1.
|
|
13
|
+
|
|
14
|
+
### ✨ What's New
|
|
15
|
+
|
|
16
|
+
- **Clearer rollback recovery status:** Recovery is simpler to understand because chain recovery now reports clearer outcomes after a local rollback.
|
|
17
|
+
|
|
18
|
+
### 💪 Improvements
|
|
19
|
+
|
|
20
|
+
- **More consistent recovery staleness checks:** Recovery decisions are more rock-solid because staleness checks are now based on the primary chain tip.
|
|
21
|
+
|
|
22
|
+
### 🔧 Fixes
|
|
23
|
+
|
|
24
|
+
- **Rollback-aware recovery test coverage:** Reliability is more rock-solid because recovery and chainsync tests now validate rollback-aware behavior.
|
|
25
|
+
|
|
26
|
+
### 📋 What You Need to Know
|
|
27
|
+
|
|
28
|
+
- **No action required:** You're all set—just upgrade to v0.31.1.
|
|
29
|
+
|
|
30
|
+
### 🙏 Thank You
|
|
31
|
+
|
|
32
|
+
Thank you for trying!
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
|
|
4
37
|
## v0.31.0 (April 3, 2026)
|
|
5
38
|
|
|
6
39
|
**Title:** Storage safeguards and smarter peer sync
|