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
- Filter by originator improvements by @mkysel in #1298
- Automatically generate metrics for SQL queries by @mkysel in #1306
- refactor: use WaitGroup.Go to simplify code by @rustversion in #1283
- Improve blockchain metrics by @fbac in #1305
- Bump the gomod-updates group with 4 updates by @dependabot[bot] in #1307
- Publish metrics (for real) by @fbac in #1312
- Nits for nonce management by @mkysel in #1311
- Attest only on last sequence ID seen by @fbac in #1313
- refactor: replace Split in loops with more efficient SplitSeq by @tinyfoolish in #1318
- Expiry old payer reports by @fbac in #1314
- Fix default payer report config by @fbac in #1320
- Update connect docs by @fbac in #1304
- Allow batch publishing payer envelopes by @mkysel in #1321
- Bump github.com/dvsekhvalnov/jose2go from 1.6.0 to 1.7.0 in /tools by @dependabot[bot] in #1328
- refactor: replace interface{} with any for clarity and modernization by @black5box in #1329
- chore: fix some typos in comment by @vetclippy in #1300
- Fix invalid concurrent access to TX object by @mkysel in #1333
- Do not allow pruner to delete unsettled envelopes by @mkysel in #1332
- Fix generation timing hazard and add tests by @mkysel in #1331
- Can't run payer reports without DB by @mkysel in #1334
- Turn prints into logs by @mkysel in #1340
- PayerReports-1: Knuth distribution intervals by @fbac in #1336
- PayerReports-2: Log string ID on fetch report by @fbac in #1337
- PayerReports-3: Do not increment usage for reserved topic envelopes by @fbac in #1338
- PayerReports-4: Honor chain as the source of truth by @fbac in #1341
- Add retries to SQL operations by @mkysel in #1342
- Bump golang.org/x/crypto from 0.41.0 to 0.45.0 in /tools by @dependabot[bot] in #1344
- Bump golang.org/x/crypto from 0.43.0 to 0.45.0 by @dependabot[bot] in #1343
- Update Protos by @github-actions[bot] in #1349
- PayerReports-5: Do not generate zero length reports by @fbac in #1347
- Fix sorted stream system invariant by @mkysel in #1345
- Teach CLI the version command + upgrade to newest contract ABIs by @mkysel in #1346
- Bump the gomod-updates group with 3 updates by @dependabot[bot] in #1357
- Track latest local sequence ID by @fbac in #1358
- Update Protos by @github-actions[bot] in #1366
- Fix typos by @fbac in #1382
- Only trigger settler after all reports by @mkysel in #1384
- Enable payer report tests by hacking time by @mkysel in #1386
- Log usage settled by @mkysel in #1387
- refactor: replace sort.Slice with slices.Sort for natural ordering by @liuyueyangxmu in #1389
- CI: migrate workflows to checkout v6 by @rejected-l in #1388
- Run workers in order generate->submit->settle with a 5 min delay by @mkysel in #1385
- Remove protocol error SettleUsageFailed by @fbac in #1390
- Formalize v2025.11.26-1 smart contract release by @mkysel in #1391
- Fix merkle comment typo by @fbac in #1393
New Contributors
- @juejinyuxitu made their first contribution in #1172
- @spuradage made their first contribution in #1266
- @fengyuchuanshen made their first contribution in #1295
- @rustversion made their first contribution in #1283
- @tinyfoolish made their first contribution in #1318
- @black5box made their first contribution in #1329
- @vetclippy made their first contribution in #1300
- @liuyueyangxmu made their first contribution in #1389
Full Changelog: v0.5.1...v1.0.0