Apr 02, 1-2 PM (62)
Apr 02, 2-3 PM (46)
Apr 02, 3-4 PM (47)
Apr 02, 4-5 PM (38)
Apr 02, 5-6 PM (35)
Apr 02, 6-7 PM (25)
Apr 02, 7-8 PM (24)
Apr 02, 8-9 PM (32)
Apr 02, 9-10 PM (17)
Apr 02, 10-11 PM (27)
Apr 02, 11-12 AM (47)
Apr 03, 12-1 AM (8)
Apr 03, 1-2 AM (9)
Apr 03, 2-3 AM (13)
Apr 03, 3-4 AM (0)
Apr 03, 4-5 AM (2)
Apr 03, 5-6 AM (6)
Apr 03, 6-7 AM (6)
Apr 03, 7-8 AM (50)
Apr 03, 8-9 AM (35)
Apr 03, 9-10 AM (6)
Apr 03, 10-11 AM (10)
Apr 03, 11-12 PM (14)
Apr 03, 12-1 PM (50)
Apr 03, 1-2 PM (38)
Apr 03, 2-3 PM (60)
Apr 03, 3-4 PM (15)
Apr 03, 4-5 PM (10)
Apr 03, 5-6 PM (5)
Apr 03, 6-7 PM (14)
Apr 03, 7-8 PM (20)
Apr 03, 8-9 PM (6)
Apr 03, 9-10 PM (15)
Apr 03, 10-11 PM (20)
Apr 03, 11-12 AM (17)
Apr 04, 12-1 AM (6)
Apr 04, 1-2 AM (1)
Apr 04, 2-3 AM (4)
Apr 04, 3-4 AM (1)
Apr 04, 4-5 AM (1)
Apr 04, 5-6 AM (5)
Apr 04, 6-7 AM (10)
Apr 04, 7-8 AM (3)
Apr 04, 8-9 AM (3)
Apr 04, 9-10 AM (5)
Apr 04, 10-11 AM (35)
Apr 04, 11-12 PM (9)
Apr 04, 12-1 PM (24)
Apr 04, 1-2 PM (11)
Apr 04, 2-3 PM (8)
Apr 04, 3-4 PM (12)
Apr 04, 4-5 PM (3)
Apr 04, 5-6 PM (9)
Apr 04, 6-7 PM (2)
Apr 04, 7-8 PM (3)
Apr 04, 8-9 PM (5)
Apr 04, 9-10 PM (17)
Apr 04, 10-11 PM (21)
Apr 04, 11-12 AM (23)
Apr 05, 12-1 AM (2)
Apr 05, 1-2 AM (0)
Apr 05, 2-3 AM (2)
Apr 05, 3-4 AM (1)
Apr 05, 4-5 AM (1)
Apr 05, 5-6 AM (9)
Apr 05, 6-7 AM (13)
Apr 05, 7-8 AM (4)
Apr 05, 8-9 AM (1)
Apr 05, 9-10 AM (0)
Apr 05, 10-11 AM (7)
Apr 05, 11-12 PM (7)
Apr 05, 12-1 PM (5)
Apr 05, 1-2 PM (2)
Apr 05, 2-3 PM (3)
Apr 05, 3-4 PM (3)
Apr 05, 4-5 PM (18)
Apr 05, 5-6 PM (3)
Apr 05, 6-7 PM (2)
Apr 05, 7-8 PM (2)
Apr 05, 8-9 PM (0)
Apr 05, 9-10 PM (5)
Apr 05, 10-11 PM (19)
Apr 05, 11-12 AM (18)
Apr 06, 12-1 AM (4)
Apr 06, 1-2 AM (6)
Apr 06, 2-3 AM (12)
Apr 06, 3-4 AM (11)
Apr 06, 4-5 AM (5)
Apr 06, 5-6 AM (7)
Apr 06, 6-7 AM (4)
Apr 06, 7-8 AM (8)
Apr 06, 8-9 AM (24)
Apr 06, 9-10 AM (15)
Apr 06, 10-11 AM (9)
Apr 06, 11-12 PM (2)
Apr 06, 12-1 PM (36)
Apr 06, 1-2 PM (42)
Apr 06, 2-3 PM (22)
Apr 06, 3-4 PM (8)
Apr 06, 4-5 PM (31)
Apr 06, 5-6 PM (18)
Apr 06, 6-7 PM (3)
Apr 06, 7-8 PM (11)
Apr 06, 8-9 PM (6)
Apr 06, 9-10 PM (9)
Apr 06, 10-11 PM (29)
Apr 06, 11-12 AM (16)
Apr 07, 12-1 AM (8)
Apr 07, 1-2 AM (8)
Apr 07, 2-3 AM (3)
Apr 07, 3-4 AM (4)
Apr 07, 4-5 AM (1)
Apr 07, 5-6 AM (17)
Apr 07, 6-7 AM (6)
Apr 07, 7-8 AM (14)
Apr 07, 8-9 AM (35)
Apr 07, 9-10 AM (38)
Apr 07, 10-11 AM (25)
Apr 07, 11-12 PM (63)
Apr 07, 12-1 PM (38)
Apr 07, 1-2 PM (49)
Apr 07, 2-3 PM (45)
Apr 07, 3-4 PM (23)
Apr 07, 4-5 PM (36)
Apr 07, 5-6 PM (19)
Apr 07, 6-7 PM (22)
Apr 07, 7-8 PM (21)
Apr 07, 8-9 PM (20)
Apr 07, 9-10 PM (16)
Apr 07, 10-11 PM (41)
Apr 07, 11-12 AM (21)
Apr 08, 12-1 AM (13)
Apr 08, 1-2 AM (6)
Apr 08, 2-3 AM (9)
Apr 08, 3-4 AM (9)
Apr 08, 4-5 AM (4)
Apr 08, 5-6 AM (21)
Apr 08, 6-7 AM (40)
Apr 08, 7-8 AM (72)
Apr 08, 8-9 AM (41)
Apr 08, 9-10 AM (24)
Apr 08, 10-11 AM (56)
Apr 08, 11-12 PM (43)
Apr 08, 12-1 PM (36)
Apr 08, 1-2 PM (64)
Apr 08, 2-3 PM (45)
Apr 08, 3-4 PM (16)
Apr 08, 4-5 PM (16)
Apr 08, 5-6 PM (17)
Apr 08, 6-7 PM (27)
Apr 08, 7-8 PM (11)
Apr 08, 8-9 PM (11)
Apr 08, 9-10 PM (6)
Apr 08, 10-11 PM (50)
Apr 08, 11-12 AM (18)
Apr 09, 12-1 AM (7)
Apr 09, 1-2 AM (5)
Apr 09, 2-3 AM (2)
Apr 09, 3-4 AM (4)
Apr 09, 4-5 AM (6)
Apr 09, 5-6 AM (15)
Apr 09, 6-7 AM (36)
Apr 09, 7-8 AM (21)
Apr 09, 8-9 AM (25)
Apr 09, 9-10 AM (33)
Apr 09, 10-11 AM (18)
Apr 09, 11-12 PM (58)
Apr 09, 12-1 PM (49)
Apr 09, 1-2 PM (4)
3,004 commits this week Apr 02, 2026 - Apr 09, 2026
chore(deps): bump github.com/blinklabs-io/plutigo from 0.1.0 to 0.1.2
Bumps [github.com/blinklabs-io/plutigo](https://github.com/blinklabs-io/plutigo) from 0.1.0 to 0.1.2.
- [Release notes](https://github.com/blinklabs-io/plutigo/releases)
- [Changelog](https://github.com/blinklabs-io/plutigo/blob/main/RELEASE_NOTES.md)
- [Commits](https://github.com/blinklabs-io/plutigo/compare/v0.1.0...v0.1.2)

---
updated-dependencies:
- dependency-name: github.com/blinklabs-io/plutigo
  dependency-version: 0.1.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
chore(deps): bump docker/login-action from 4.0.0 to 4.1.0 (#669)
Bumps [docker/login-action](https://github.com/docker/login-action) from 4.0.0 to 4.1.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/b45d80f862d83dbcd57f89517bcf500b2ab88fb2...4907a6ddec9925e35a0a9e82d7399ccc52663121)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: 4.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
chore(deps): bump blinklabs-io/go from 1.25.8-1 to 1.26.1-1 (#668)
Bumps [blinklabs-io/go](https://github.com/blinklabs-io/docker-go) from 1.25.8-1 to 1.26.1-1.
- [Release notes](https://github.com/blinklabs-io/docker-go/releases)
- [Commits](https://github.com/blinklabs-io/docker-go/compare/v1.25.8-1...v1.26.1-1)

---
updated-dependencies:
- dependency-name: blinklabs-io/go
  dependency-version: 1.26.1-1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
chore(deps): bump github.com/SundaeSwap-finance/ogmigo/v6 (#666)
Bumps [github.com/SundaeSwap-finance/ogmigo/v6](https://github.com/SundaeSwap-finance/ogmigo) from 6.2.0 to 6.2.1.
- [Release notes](https://github.com/SundaeSwap-finance/ogmigo/releases)
- [Commits](https://github.com/SundaeSwap-finance/ogmigo/compare/v6.2.0...v6.2.1)

---
updated-dependencies:
- dependency-name: github.com/SundaeSwap-finance/ogmigo/v6
  dependency-version: 6.2.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
chore(deps): bump github.com/go-telegram/bot from 1.19.0 to 1.20.0 (#660)
Bumps [github.com/go-telegram/bot](https://github.com/go-telegram/bot) from 1.19.0 to 1.20.0.
- [Release notes](https://github.com/go-telegram/bot/releases)
- [Changelog](https://github.com/go-telegram/bot/blob/main/CHANGELOG.md)
- [Commits](https://github.com/go-telegram/bot/compare/v1.19.0...v1.20.0)

---
updated-dependencies:
- dependency-name: github.com/go-telegram/bot
  dependency-version: 1.20.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
docs: explain the @Transactional / StructuredTaskScope trade-off
The fork/join block in queryMetadataBatch is deliberate: parallelising
the two CIP-26 queries (metadata + logos) saves a round-trip at the
cost of losing the outer readOnly transaction context inside the
forked virtual threads. Since CIP-26 rows are only written during
the periodic offchain token-registry sync, the read-skew risk is
negligible for our use case.

Document the caveat, the reasoning, and the revert recipe so a
future reader is not surprised when they notice that each fork
opens its own transaction.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
perf: batch CIP-68 reference NFT lookups with window-function query
Replace the N+1 per-subject CIP-68 query pattern in TokenQueryService
with a single native SQL call using ROW_NUMBER() OVER (PARTITION BY
policy_id, asset_name ORDER BY slot DESC) + row-value tuple IN.

Before: 1 (or 2 with logos) CIP-26 queries + K individual CIP-68
queries, where K = number of CIP-68 fungible tokens in the batch.
A wallet with 50 CIP-68 tokens triggered 51-52 round-trips.

After: 2 or 3 queries total (CIP-26 metadata, CIP-26 logos when
enabled, CIP-68 latest-by-slot) regardless of batch size. The CIP-68
query is skipped entirely when no fungible token candidates are
present.

Implementation uses Spring Data JPA's custom repository fragment
pattern (MetadataReferenceNftRepositoryCustom + Impl suffix,
auto-detected). Dynamic SQL builds the correct number of positional
placeholders at call time; values are bound via Query.setParameter
so there is no SQL injection surface. The native query is portable
across H2 2.2.x and PostgreSQL 12+.

The derived method findFirstByPolicyIdAndAssetNameAndLabelOrderBySlotDesc
had only one production caller and is removed. Test stubs are updated
to mock the new batch method; ArgumentCaptor verifies that the
fungible-to-reference-NFT prefix conversion still produces the
correct PolicyAssetPair input.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>