Releases: xmtp/xmtpd
v1.0.0
XMTPD v1.0.0 Release Summary
🏁 Production Readiness
XMTPD v1.0.0 marks the transition to production readiness.
This release focuses on stability, performance, and reliability, finalizing the core components needed for mainnet deployment.
It includes extensive testing, performance optimization, and hardening of blockchain integration, database operations, and gateway behavior.
🚀 Highlights
Core Platform & Stability
- Production-ready architecture with full settlement, attestation, and reporting flows verified.
- Improved vector clock performance and selection logic.
- Enhanced concurrency handling in the submitter and attestation workers.
- Introduced typed blockchain errors and rejection handling for on-chain reverts.
- Added rate limiter for improved system control under load.
- Multiple fixes to ensure stable startup, HA behavior, and consistent report generation.
Blockchain & Settlement
- Finalized payer report flow with 5 incremental improvements:
- Smarter generation and Knuth-based distribution intervals.
- Honors chain as the single source of truth.
- Prevents duplicate or empty reports.
- Only triggers settlement after all reports are processed.
- Logs usage and settlement progress for observability.
- Added batch publishing of payer envelopes.
- Improved blockchain metrics and on-chain validation reporting.
- Updated to v2025.11.26-1 contract release with new ABIs.
API & Gateway
- Added new
GetNodesgateway endpoint. - Support for Connect-Go protocol.
- CORS support for API requests.
- Partitioned gateway envelopes for scalability.
- Added partially covering indexes to speed up API queries and pruning.
Database & Performance
- Major pruner improvements:
- Speed boosted with indexed queries.
- Prevents deletion of unsettled envelopes.
- Added automatic SQL metrics generation for visibility.
- Retries added to SQL operations for robustness.
- Condensed migrator upgrades and removed legacy tables.
CLI Enhancements
- Introduced
versioncommand and updated to latest contract ABIs. - Added AppChain management and parameter handling.
- Improved funds and withdrawal workflows.
- CLI now fully supports modern admin flows and reflects production configuration.
Observability & Testing
- Expanded metrics for SQL, blockchain, and system performance.
- Improved logging consistency and added diagnostic logging for startup and reports.
- Supports tracing of failed transactions and fetch reports per worker.
What's Changed
- Update Protos by @github-actions[bot] in #1151
- Add explicit path in protos change by @fbac in #1152
- Do a proper delete of gen protos and re-run with newest by @mkysel in #1153
- Update the Gateway image in staging by @mkysel in #1157
- Enhance vector clock performance by @fbac in #1158
- Bump the gomod-updates group with 2 updates by @dependabot[bot] in #1160
- No timeout on migration 16 by @fbac in #1163
- Partial implementation of CLI funds commands by @mkysel in #1165
- Remove grpc-gateway by @fbac in #1167
- Add GetNodes gateway endpoint by @fbac in #1169
- Do not start GRPC server unless specified by @mkysel in #1171
- refactor: use WaitGroup.Go to simplify code by @juejinyuxitu in #1172
- Finish withdrawal flow for CLI by @mkysel in #1170
- Bump foundry to 1.3.5 by @mkysel in #1179
- Fix script post move by @mkysel in #1181
- Start the rate fetcher by @mkysel in #1180
- Implement AppChain CLI management and split param setting from update by @mkysel in #1182
- Add reports test scaffolding by @mkysel in #1178
- Allow gateway to enable gRPC reflection by @fbac in #1185
- Speed up pruner by adding a partially covering index by @mkysel in #1186
- Fix Identity update StoreLog under HA by @mkysel in #1184
- Enable XDBG tests again by @mkysel in #1191
- Infer parameter types in CLI so raw is not required by @mkysel in #1192
- Update GetNodes endpoint by @fbac in #1199
- Sort nodeIDs before packing by @fbac in #1202
- Update Protos by @github-actions[bot] in #1203
- Add a mini test for nodeID packing by @mkysel in #1205
- Fix ErrMessageAtStartSequenceIDNotFound during report generation by @mkysel in #1206
- Bump github.com/docker/docker from 28.4.0+incompatible to 28.5.0+incompatible in the gomod-updates group by @dependabot[bot] in #1212
- Trace failed transactions by @fbac in #1211
- Log event only when stored by @fbac in #1217
- Fix integration test which races with payer reports by @mkysel in #1221
- Prevent concurrent attestation from generating multiple envelopes by @mkysel in #1218
- Fix semantic merge conflict by @mkysel in #1224
- Payer reports: do not report others as frequently by @mkysel in #1220
- Rework Submitter Concurrency by @mkysel in #1219
- Make activeNodeIDs order predictable and fix broken test by @mkysel in #1230
- Log minutes for better debuggability by @fbac in #1231
- Return typed errors from blockchain by @fbac in #1233
- Submission rejected based on on-chain revert errors by @fbac in #1234
- Attest and submit filters by @fbac in #1235
- Submitter state and transition tests by @fbac in #1236
- Log fetch reports per worker by @fbac in #1237
- Fix attestation worker critical path by @fbac in #1238
- Bump github.com/quic-go/quic-go from 0.54.0 to 0.54.1 in /tools by @dependabot[bot] in #1239
- Bump the gomod-updates group with 2 updates by @dependabot[bot] in #1241
- Acquire HA generator lock by @mkysel in #1247
- Handle PayerReportAlreadySubmitted by @fbac in #1246
- Update Protos by @github-actions[bot] in #1253
- Manually generate protos by @mkysel in #1258
- Standardize logging by @fbac in #1262
- refactor: omit unnecessary reassignment by @spuradage in #1266
- Update Protos by @github-actions[bot] in #1267
- Add a partially covering index to speed up API queries by @mkysel in #1268
- Reduce subscribe worker batch size by @mkysel in #1270
- Fix payer report logger chain by @fbac in #1269
- Add logging to diagnose startup issues by @mkysel in #1271
- Speed up Vector Clock selection by @mkysel in #1272
- Update Protos by @github-actions[bot] in #1273
- Fix SQL Upgrade 20 by @mkysel in #1274
- Pass limit to the SQL query by @mkysel in #1275
- Unify vector selector queries by @mkysel in #1276
- Bubble up payer report verifier results by @fbac in #1264
- Initial stab at 0.6.0 contracts by @mkysel in #1254
- Add rate limiter and example by @neekolas in #1255
- Bump github.com/consensys/gnark-crypto from 0.18.0 to 0.18.1 by @dependabot[bot] in #1285
- Bump github.com/consensys/gnark-crypto from 0.14.0 to 0.18.1 in /tools by @dependabot[bot] in #1284
- Remove BlockUntilDesiredCursorReached clutch from payer by @mkysel in #1281
- Limit blockchain payload size by @mkysel in #1282
- Bump github.com/redis/go-redis/v9 from 9.14.0 to 9.16.0 in the gomod-updates group by @dependabot[bot] in #1278
- refactor: replace interface{} with any for clarity and modernization by @fengyuchuanshen in #1295
- Partitioned Gateway Envelopes by @mkysel in #1279
- Condense migrator upgrades and remove dead tables by @mkysel in #1296
- Optimize filter by topic queries by @mkysel in #1297
- Support connect-go protocol by @fbac in #1277
- Allow and handle CORS by @fbac in #1299
- ...
v0.5.1
XMTPD v0.5.1 Release Summary
🚀 Highlights
Core Upgrades
- Upgraded to Go 1.25.
- Enforced stricter Go standards across the codebase.
- Updated dependencies including Docker, Mapstructure, go-jose, gRPC, and more.
Migrator & Database
- Idempotent migrations: prevent duplicate registrations of nodes with existing pubkeys.
- Migrator writer established as source of truth.
- Added migration client.
- Database is created if not already present; migration requires DB to exist.
- Improved bulk move from previous → current states.
CLI Enhancements
- Made the new Cobra CLI canonical.
- Expanded CLI tooling with:
- Parameter manager commands (admin & missing elements).
- Group message bootstrapper.
- Pause/unpause appchain contracts.
- Hidden mint underlying token command.
- On-chain parameter management with full CLI coverage.
- HTTP config path support.
- Normalized error handling and silenced extra CLI usage output.
- Introduced payload generator.
- Added goreleaser workflow for building CLI and Homebrew publishing.
Smart Contracts
- Added missing contracts and upgraded to v0.5.5 contracts.
- Introduced pause/unpause workflows for appchain contracts.
- Updated Foundry to align with the contracts repo.
Observability & Testing
- Enabled
TestCanGenerateAndAttestReport. - Added ability to skip specific race tests.
- Normalized expiry calculation to UTC 24h days.
- Validation results now bubble up consistently.
Infrastructure & Misc
- Adopted good improvements from node-go pruner.
- Added on-chain errors dictionary.
- Support for using anvil with deployed gateways.
What's Changed
- build: update checkout action to v5 by @rejected-l in #1039
- Take the good improvements from node-go pruner by @mkysel in #1041
- Upgrade to go 1.25 by @fbac in #1044
- Bump github.com/docker/docker from 27.5.0+incompatible to 28.0.0+incompatible in /tools by @dependabot[bot] in #1051
- Idempotent migration: do not migrate nodes with pubkey already registered by @mkysel in #1043
- Migrator writer is the source of truth by @fbac in #1042
- Bump github.com/go-viper/mapstructure/v2 from 2.3.0 to 2.4.0 by @dependabot[bot] in #1058
- Enable TestCanGenerateAndAttestReport by @fbac in #1060
- Create db if not exists by @fbac in #1059
- Fix update protos by @fbac in #1056
- Bump github.com/go-jose/go-jose/v4 from 4.0.4 to 4.0.5 in /tools by @dependabot[bot] in #1061
- Update Protos by @github-actions[bot] in #1062
- Bump the gomod-updates group with 2 updates by @dependabot[bot] in #1069
- Migration client by @fbac in #1057
- First stage of parameter CLI admin by @mkysel in #1070
- Group message bootstrapper CLI by @mkysel in #1071
- Pause/unpause appchain contracts by @mkysel in #1072
- Add missing contracts and upgrade to v0.5.5 by @mkysel in #1073
- Require database exists if migration is enabled by @fbac in #1074
- Add onchain errors dictionary by @fbac in #1052
- Minor updates to PAUSED workflow by @mkysel in #1086
- Pass contract options correctly by @fbac in #1087
- Update foundry to version used in contracts repository by @fbac in #1088
- More pause CLI commands by @mkysel in #1090
- Bump github.com/go-viper/mapstructure/v2 from 2.2.1 to 2.4.0 in /tools by @dependabot[bot] in #1089
- Rework rate manager to use param manager and add tests by @mkysel in #1091
- Param management for all missing elements. No CLI commands yet by @mkysel in #1092
- Bulk move from previous to current by @mkysel in #1099
- All missing CLI commands by @mkysel in #1094
- Bump the gomod-updates group with 4 updates by @dependabot[bot] in #1101
- Make new cobra CLI canon by @mkysel in #1100
- Update Protos by @github-actions[bot] in #1106
- Ability to skip specific tests on race by @fbac in #1095
- Normalize expiry calculation to UTC with fixed 24h days by @mkysel in #1108
- Use anvil with deployed gateways by @mkysel in #1109
- Force Go standards by @fbac in #1105
- Bubble up validation results by @fbac in #1113
- Bump the gomod-updates group with 4 updates by @dependabot[bot] in #1125
- Add hidden mint underlying token CLI command by @mkysel in #1129
- Silence CLI usage print and unify error handling by @mkysel in #1130
- Add payload generator by @fbac in #1111
- Allow using HTTP config paths in the CLI by @mkysel in #1131
- Create goreleaser process for building CLI and brew pushing by @mkysel in #1133
New Contributors
- @rejected-l made their first contribution in #1039
Full Changelog: v0.5.0...v0.5.1
v0.5.0
XMTPD v0.5.0 Release Summary
🚀 Highlights
CLI Overhaul
- New
xmtpd-clibuilt onspf13/cobrafor a more structured and extensible command-line experience.
Blockchain & Indexer Improvements
- Validation now checks chains against
chainID. - Dynamic discovery of backfill block page size.
- Configurable prune batch size.
- Indexer updates progress even when no logs are found.
- Improved gateway stability with multiple bug fixes and panic prevention.
- Blockchain publisher can bootstrap messages and guarantee data integrity after subscription failures.
- App messages are now routed to the blockchain.
Metrics & Observability
- New metrics on subscription events.
- Additional logging for:
- Shutdown events
- Replication metrics
- Out-of-order errors
- Added
pprofHTTP server for profiling. - Introduced
GetVersionmetadata endpoint.
Stability & Reliability
- Defensive checks for valid message expiration.
- Prevention of writes to closed channels.
- Fixes for:
- Flaky registry tests
- Off-by-one backfill block sizing
- Better error silencing and handling during shutdown.
Infrastructure & CI
- Support for deploying multiple images in a single run.
- Condensed CI actions.
- Skip test report uploads for fork PRs.
- Added migrator service for DB migrations.
- Keepalive config for chain client.
- Shellcheck compliance and typo fixes.
Protocol & Contract Updates
- Upgraded to v0.5.1 contracts.
- Reintroduced HTTP JSON-RPC client.
- Multiple Protobuf updates, including removal of
targetOriginator.
Refactors
- Cleaner map handling via
maps.Copy. - Separated DB worker from sync loop.
- Validation-free
isCommitdetermination.
What's Changed
- Add new xmtpd-cli based on spf13/cobra by @fbac in #880
- Add more debug info to duplicate inserts by @mkysel in #882
- Skip DD test report upload for fork PRs by @mkysel in #884
- chore: fix typos by @coderwander in #883
- Make shellcheck happy by @mkysel in #890
- Update metrics on subscription by @mkysel in #889
- Validate provided chains with chainID by @fbac in #887
- Update Protos by @github-actions[bot] in #886
- Update Protos by @github-actions[bot] in #895
- Bump github.com/go-chi/chi/v5 from 5.2.0 to 5.2.2 in /tools by @dependabot[bot] in #899
- Bump the gomod-updates group with 3 updates by @dependabot[bot] in #902
- Fix backfill block size off-by-1 by @mkysel in #903
- Always run API with /healthz endpoint by @mkysel in #904
- Close timing gap in socket discovery by @mkysel in #905
- Skip attestation test until a fix is found by @mkysel in #914
- Silence error during shutdown by @mkysel in #912
- Revert gen protos to xmtp/protos:main branch by @fbac in #915
- Update protos and remove targetOriginator by @mkysel in #916
- Add defensive checks for valid expiration by @mkysel in #911
- Check for closed channel by @fbac in #920
- Bump github.com/go-viper/mapstructure/v2 from 2.2.1 to 2.3.0 by @dependabot[bot] in #922
- Indexer updates backfill progress on no logs by @fbac in #919
- chore: fix some minor issues in the comments by @mountdisk in #926
- Print the data we need for out-of-order errors by @mkysel in #931
- Log replication.metrics shutdown by @fbac in #896
- Check closed channels by @fbac in #921
- Update Protos by @github-actions[bot] in #935
- Separate DB worker from sync by @mkysel in #932
- Prevent write-to-closed-channel panics by @mkysel in #933
- chore: fix some comments by @rustfix in #943
- Update Protos by @github-actions[bot] in #939
- Bump the gomod-updates group with 3 updates by @dependabot[bot] in #925
- Fix flaky registry tests by @mkysel in #938
- Update Protos by @github-actions[bot] in #945
- Condense CI actions by @mkysel in #946
- Add keepalive config to chain client by @fbac in #944
- GetVersion metadata endpoint by @fbac in #957
- Add pprof http server by @fbac in #923
- Discover backfill block page size dynamically by @fbac in #949
- Bump golang.org/x/crypto from 0.39.0 to 0.40.0 in the gomod-updates group by @dependabot[bot] in #965
- Make prune batch size configurable by @mkysel in #964
- Fix shellcheck error by @fbac in #967
- Backfill page on sub error by @fbac in #947
- Deploy multiple images in one go by @mkysel in #972
- Bump golang.org/x/oauth2 from 0.25.0 to 0.27.0 in /tools by @dependabot[bot] in #977
- Bump github.com/testcontainers/testcontainers-go from 0.37.0 to 0.38.0 in the gomod-updates group by @dependabot[bot] in #978
- Guarantee data integrity after sub fails completely by @fbac in #971
- refactor: use maps.Copy for cleaner map handling by @pingshuijie in #984
- Fix missing return by @fbac in #989
- Bump google.golang.org/grpc from 1.73.0 to 1.74.2 in the gomod-updates group by @dependabot[bot] in #990
- Validation free isCommit determination by @mkysel in #987
- Upgrade to v0.5.1 contracts by @fbac in #988
- Route app messages to the blockchain by @mkysel in #992
- Bump github.com/docker/docker from 28.3.0+incompatible to 28.3.3+incompatible by @dependabot[bot] in #1000
- Multiple gateway fixes by @mkysel in #1003
- Fix XDBG tests (partially) by @mkysel in #1004
- Teach blockchain publisher to bootstrap messages by @fbac in #998
- Add migrator service by @fbac in #897
- Prevent dependsOn for non-commits: by @mkysel in #1008
- Fix originator in indexer storer by @mkysel in #1009
- Bump the gomod-updates group with 4 updates by @dependabot[bot] in #1007
- Add a log when shutting down gateway by @mkysel in #1010
- Update Protos by @github-actions[bot] in #1021
- Bump the gomod-updates group with 2 updates by @dependabot[bot] in #1030
- Reintroduce HTTP JSON-RPC client by @fbac in #1001
New Contributors
- @coderwander made their first contribution in #883
- @mountdisk made their first contribution in #926
- @rustfix made their first contribution in #943
- @pingshuijie made their first contribution in #984
Full Changelog: v0.4.0...v0.5.0
v0.4.0
⚠️ Important Notes
- Contract Changes: Upgrading to
v0.4.0requires pointing your nodes to new smart contracts. Refer to thexmtpd-infrastructurerepo for updated contract addresses. - Pruning Support: This release introduces database pruning. You can now configure data retention limits and automatically discard older messages.
🧩 Major Features
Multi-Chain Indexing
Indexing support has been expanded to multiple chains, including smart chain selection, deployment-aware block tracking, and support for parameterized chain registries.
Parameter Registry Integration
The RateRegistry and NodeRegistry contracts now integrate with a central Parameter Registry, simplifying on-chain configuration and unifying admin flows.
Pruning and Data Retention
Initial support for node-side data pruning. Operators can configure how much data to retain and initiate pruning cycles via the new CLI tooling.
Improved Indexer + Blockchain Metrics
Even deeper visibility into system behavior with new metrics for the indexer, blockchain backfill, congestion, and storage layer performance.
gRPC Improvements
- gRPC API responses are now sanitized, hiding internal error messages.
- New API:
GetNewestEnvelope - New API:
GetReaderNodefor payers
CLI & Dev Enhancements
- Added
get ratesandprunecommands to the CLI - Docker Compose and DevContainer improvements for easier local development
- Stress test tooling now includes TPS tracking and concurrency limits
📊 Metrics Additions
- Payer gRPC client metrics
- Indexer stress test metrics (TPS, envelope rate)
- MLS method invocation statistics
- OpenMetrics negotiation format now supported
Stay tuned for the updated Grafana dashboards that incorporate these.
All PR's
- Reentrant add node to network by @fbac in #707
- Add from-0.3.0 upgrade tests by @mkysel in #710
- No more image baking (lets leave that to the bakeoff shows) by @mkysel in #711
- Bump github.com/prometheus/client_golang from 1.21.0 to 1.22.0 in the gomod-updates group by @dependabot in #714
- chore: fix some struct names in comment by @fivecut in #716
- Bump golang.org/x/net from 0.36.0 to 0.38.0 by @dependabot in #718
- chore: fix comment by @closeobserve in #713
- Bump golang.org/x/net from 0.36.0 to 0.38.0 in /tools by @dependabot in #717
- Bump the gomod-updates group with 2 updates by @dependabot in #724
- Generate metrics catalog by @mkysel in #719
- Sanitize gRPC API error responses to prevent exposure of internal error details in the logging interceptor by @mkysel in #728
- Add pkg merkle by @fbac in #712
- Fix docker down by @mkysel in #729
- fix err logging_test.go by @sky-coderay in #731
- Expose MLS method invocation statistics by @mkysel in #730
- docs(readme): add license and twitter badge by @Ocheretovich in #732
- CalculateBalanceNodesCount to handle int by @fbac in #733
- Add Prometheus metrics to Payer gRPC client operations and consolidate MLS validation service initialization by @mkysel in #735
- ci: bump actions/checkout to v4 by @dizer-ti in #737
- Add DevContainer setup by @neekolas in #723
- Even more indexer/blockchain metrics by @mkysel in #736
- Add poor's man identity updates stress test by @fbac in #738
- Handle concurrency limiter in stress test and dump analytics by @mkysel in #739
- Add TPS to stress test by @mkysel in #740
- Do not block forever on read-your-own-commits by @mkysel in #743
- Fix issue with identity update storer by @neekolas in #744
- Do not require 0x prefix for stress tests by @mkysel in #742
- Add GetNewestEnvelope API Endpoint by @neekolas in #741
- Add more test coverage for pkg/merkle by @fbac in #734
- Bump the gomod-updates group with 2 updates by @dependabot in #746
- Teach CLI the get rates command by @mkysel in #748
- Add dummy chain watcher by @fbac in #747
- Add expiry field to gateway envelopes by @mkysel in #752
- Clarify error to help with support by @mkysel in #757
- Manual protos build by @mkysel in #758
- Update docker-compose-register.yml to use latest xmtpd-cli version (sha-a96bf04) by @finnfisher-de in #766
- Add scaffolding for XMTPD DB prune / data retention by @mkysel in #772
- Add GetReaderNode payer API endpoint by @fbac in #771
- Remove nightly PAT by @fbac in #773
- Update Protos by @github-actions in #775
- Bump the gomod-updates group with 2 updates by @dependabot in #776
- Set payer expiration all the way through from client to XMTPD database by @mkysel in #769
- Initial prune implementation by @mkysel in #774
- Update Protos by @github-actions in #782
- Add multi-chain support by @fbac in #755
- Derive DB name from primary key in pruner by @mkysel in #778
- Test pruner and refactor newDB by @mkysel in #788
- Migrate test cleanup functions to use Go's built-in t.Cleanup mechanism across test utilities and test files by @mkysel in #789
- Add prune release to rel from tag by @mkysel in #791
- Fix junit-upload-github-action deprecation warning by @mkysel in #790
- Fix deployments by @fbac in #793
- Require MLS validation service by @fbac in #798
- feat: Matched Sequential Proof Implementation by @deluca-mike in #749
- Validate hex addresses by @fbac in #801
- refactor: replace context.WithCancel with t.Context in tests by @pengqiseven in #799
- Modular multi-chain indexer by @fbac in #800
- Enable openmetrics negotiation format by @mkysel in #809
- Rework compose up/down by @mkysel in #822
- Speed up generation by removing all cruft from builder by @mkysel in #821
- Use pre-baked image for all anvil-based tests by @mkysel in #823
- Propagate ctx cancellation to IndexLogs by @fbac in #811
- Fix problematic tests using risky pattern by @mkysel in #824
- Add header to metrics catalog by @mkysel in #825
- Remove paths from CI by @mkysel in #826
- Speed up CLI container construction in dev/up by @mkysel in #829
- Migrate RateRegistry and NodeRegistry contracts to 0.4.0 version with parameter registry integration and updated data types by @mkysel in #810
- Add parameter registry ABI and implement set maxcanonical by @mkysel in #830
- Migrate to V4 rates contract by @mkysel in #833
- Allow operator defined backfill block size by @mkysel in #834
- Update structure of docs by @jhaaaa in #806
- Do not require BIN for abigen by @mkysel in #853
- Use 040 contracts with ABI and new addresses by @mkysel in #854
- Update Protos by @github-actions in #856
- Add settlement chain and PayerRegistry indexing by @fbac in #847
- Start indexing at custom block height by @fbac in #827
- Load env config via JSON by @mkysel in #855
- Bump github.com/docker/docker from 28.1.1+incompatible to 28.2.2+incompatible in the gomod-updates group by @dependabot in #861
- Update Protos by @github-actions in #859
- Move to 0.4.3 contracts by @mkysel in #864
- Revamped reorg detection by @fbac in #858
- Refactor large options configs using the functional options pattern by @mkysel in #866
- Introduce XDBG integration tests by @mkysel in #865
- Use JSON-RPC ...
v0.3.0
Important Notes
- To upgrade to 0.3.0 you will need to change the smart contracts your deployed nodes point to. Please look to
xmtpd-infrastructurefor the latest contract addresses. - Upgrading to 0.3.0 will wipe your local database. All sequence_id's will restart from 0, and all smart contracts will be indexed from the start.
Major Features
New Nodes Registry
We have upgraded the Nodes Registry to have more fine-grained admin roles, and better tracking of node status. This is a breaking change and requires all nodes to wipe their local database and start clean.
Metrics. Metrics. Metrics.
We have added dozens of Prometheus metrics to the node and payer services, tracking performance and reliability. We plan to release an open source Grafana dashboard to make sense of these metrics in the coming weeks.
Fee Tracking
xmtpd is now tracking fee consumption on every message, to set the network up for reaching consensus on Payer spends.
Better payer service nonce management
Payers can send a lot of blockchain transactions concurrently. We have substantially improved our nonce manager to handle this kind of workload and avoid nonce-reuse errors and long delays due to nonce gaps. The payer service can now run in HA mode with more than 1 replica.
GRPC Gateway Support
We now support HTTP clients as well as GRPC through GRPC Gateway
All PR's
- Use v5 for caching by @mkysel in #508
- Fix CLI version print by @mkysel in #509
- Improve version checking system by @mkysel in #506
- Lint generators and commit dirty changes by @mkysel in #507
- chore: update to foundry v1.0.0 by @fbac in #523
- Bump github.com/ethereum/go-ethereum from 1.14.12 to 1.14.13 in /tools by @dependabot in #526
- Some good logging by @mkysel in #525
- Bump the gomod-updates group with 2 updates by @dependabot in #539
- Fix foundry version check by @neekolas in #534
- Add 0.2.0 upgrade test by @mkysel in #545
- Add LoggingMisbehaviorService by @neekolas in #413
- Allow running without payer key by @mkysel in #547
- Verifiable payer by @mkysel in #544
- feat!: enhancements to XMTP Nodes Registry by @fbac in #524
- Add payers table by @neekolas in #535
- Link payer to gateway envelopes by @neekolas in #536
- Add fee calculation helpers by @neekolas in #537
- Add fees to UnsignedOriginatorEnvelope by @neekolas in #548
- Track unsettled usage by @neekolas in #549
- Remove error print by @mkysel in #565
- Add migration tools for node registry by @neekolas in #555
- XMTP Node Registry enhancements by @fbac in #572
- feat: Payer interface by @fbac in #558
- Drive-by fixes to logger and fatal by @mkysel in #577
- Surface xmtpd-infra as a resource to node operators by @jhaaaa in #582
- SQL Nonce Manager for HA Payer by @mkysel in #578
- Change payer envelope to bytes field by @neekolas in #553
- Post 0.2.1 release chores by @mkysel in #584
- Add initial Rates contract by @neekolas in #557
- Make RatesManager upgradeable and deployable by @neekolas in #559
- Ingest rates from smart contract by @neekolas in #573
- Add admin functions for rates contract by @neekolas in #575
- Add base sepolia output by @fbac in #585
- Prepare migrator for v1 to v2 migration by @fbac in #576
- Update Protos by @github-actions in #588
- Add CLI tool for adding rates to the contract by @neekolas in #586
- IPayerReport interface by @fbac in #581
- Calculate fees independently in sync by @neekolas in #556
- Breaking!: Integrate NodesV2 by @fbac in #589
- Update contracts deployment scripts by @fbac in #596
- Improve Grammar and Clarity in Documentation by @SITADRITA1 in #564
- Fix TestPublishIdentityUpdate test by @mkysel in #607
- Monitoring setup by @mkysel in #606
- Fix TestAddRates by @mkysel in #608
- Normalize contract deployment keys by @fbac in #600
- Add xmtp_testnet-playground environment config by @fbac in #601
- Rename minMonthlyFee to minMonthlyFeeMicroDollars by @fbac in #602
- Bump google.golang.org/grpc from 1.70.0 to 1.71.0 in the gomod-updates group by @dependabot in #599
- Update Protos by @github-actions in #594
- add grpc-gateway by @insipx in #579
- Print registrant in expected form by @mkysel in #613
- Start storing congestion per minute by @neekolas in #598
- Add env.json by @fbac in #611
- Replace geth client with Arbitrum fork by @neekolas in #618
- Disable upgrade tests by @neekolas in #619
- Bump golang.org/x/net from 0.35.0 to 0.36.0 in /tools by @dependabot in #627
- Bump golang.org/x/net from 0.35.0 to 0.36.0 by @dependabot in #626
- More nonce improvements by @mkysel in #625
- feat: contracts cleanup by @deluca-mike in #620
- Add payer metrics by @mkysel in #622
- Use testcontainers in upgrade tests by @fbac in #603
- Do not skip storing messages in indexer by @fbac in #621
- Test utility to start an anvil instance by @neekolas in #629
- Calculate congestion from last 5 minutes of data by @neekolas in #609
- Get target rate per minute from smart contract by @neekolas in #610
- Utility to get most recent 5 minutes of congestion by @neekolas in #616
- More sync metrics by @mkysel in #634
- Use real congestion rates by @neekolas in #617
- Fix CI error by @mkysel in #635
- Update migrator docs by @fbac in #590
- Bump github.com/docker/docker from 27.5.0+incompatible to 28.0.1+incompatible in the gomod-updates group by @dependabot in #638
- fix correction by @futreall in #637
- Run abigen by @neekolas in #640
- Use retry library by @mkysel in #641
- Indexer metrics + indexer refactors by @mkysel in #639
- Bump github.com/containerd/containerd from 1.7.25 to 1.7.27 in /tools by @dependabot in #644
- Improve nonce replenishment by @mkysel in #642
- Switch anvil to mixed mode mining by @mkysel in #647
- chore: fix some comments by @linghuying in #649
- Update Protos by @github-actions in #650
- Fix prom metrics by @mkysel in #648
- fix spelling errors by @Bilogweb3 in #651
- Re-enable upgrade tests by @mkysel in #657
- Bump github.com/golang-jwt/jwt/v5 from 5.2.1 to 5.2.2 by @dependabot in #662
- Bump github.com/golang-jwt/jwt/v4 from 4.5.1 to 4.5.2 in /tools by @dependabot in #663
- Update Protos by @github-actions in #664
- Fix generate identity hang and add more metrics by @mkysel in #666
- Update Protos by @github-actions in #667
- Auth as PAT in nightly automation by @fbac in #668
- docs(readme): add badge and link to lint workflow by @Ocheretovich in #677
- chore: add icon and link to release by @Ocheretovich in #678
- Rework retry and Fix Version Verifier by @mkysel in #679
- Fix GRPC KeepAlive by @mkysel in #680
- Generate payer reports by @neekolas in https://github.com/xmtp/xmtpd/p...
v0.2.3
What's Changed
- Fix generate identity hang and add more metrics by @mkysel in #666
- Fix GRPC KeepAlive by @mkysel in #680
- Fix abigen 0.2-dev by @mkysel in #673
- Cherry Pick Changes For ETH Client by @neekolas in #676
- 0.2-dev Rework retry by @mkysel in #675
- 0.2-dev Fix Version Verifier by @mkysel in #674
Full Changelog: v0.2.2...v0.2.3
v0.2.2
v0.2.1
Changelog
v0.2.1 (2025-03-04)
Merged pull requests:
- Surface xmtpd-infra as a resource to node operators #582 (jhaaaa)
- Drive-by fixes to logger and fatal #577 (mkysel)
- Remove error print #565 (mkysel)
- Allow running without payer key #547 (mkysel)
- Add 0.2.0 upgrade test #545 (mkysel)
- Some good logging #525 (mkysel)
- Fix CLI version print #509 (mkysel)
- Use v5 for caching #508 (mkysel)
- Improve version checking system #506 (mkysel)