Nov 11, 9-10 AM (33)
Nov 11, 10-11 AM (23)
Nov 11, 11-12 PM (10)
Nov 11, 12-1 PM (119)
Nov 11, 1-2 PM (50)
Nov 11, 2-3 PM (43)
Nov 11, 3-4 PM (33)
Nov 11, 4-5 PM (22)
Nov 11, 5-6 PM (31)
Nov 11, 6-7 PM (68)
Nov 11, 7-8 PM (31)
Nov 11, 8-9 PM (17)
Nov 11, 9-10 PM (24)
Nov 11, 10-11 PM (34)
Nov 11, 11-12 AM (20)
Nov 12, 12-1 AM (4)
Nov 12, 1-2 AM (2)
Nov 12, 2-3 AM (6)
Nov 12, 3-4 AM (5)
Nov 12, 4-5 AM (5)
Nov 12, 5-6 AM (3)
Nov 12, 6-7 AM (15)
Nov 12, 7-8 AM (36)
Nov 12, 8-9 AM (51)
Nov 12, 9-10 AM (53)
Nov 12, 10-11 AM (32)
Nov 12, 11-12 PM (46)
Nov 12, 12-1 PM (56)
Nov 12, 1-2 PM (48)
Nov 12, 2-3 PM (21)
Nov 12, 3-4 PM (29)
Nov 12, 4-5 PM (59)
Nov 12, 5-6 PM (15)
Nov 12, 6-7 PM (15)
Nov 12, 7-8 PM (16)
Nov 12, 8-9 PM (10)
Nov 12, 9-10 PM (15)
Nov 12, 10-11 PM (33)
Nov 12, 11-12 AM (14)
Nov 13, 12-1 AM (12)
Nov 13, 1-2 AM (8)
Nov 13, 2-3 AM (6)
Nov 13, 3-4 AM (8)
Nov 13, 4-5 AM (2)
Nov 13, 5-6 AM (3)
Nov 13, 6-7 AM (27)
Nov 13, 7-8 AM (28)
Nov 13, 8-9 AM (55)
Nov 13, 9-10 AM (69)
Nov 13, 10-11 AM (53)
Nov 13, 11-12 PM (42)
Nov 13, 12-1 PM (40)
Nov 13, 1-2 PM (107)
Nov 13, 2-3 PM (36)
Nov 13, 3-4 PM (43)
Nov 13, 4-5 PM (27)
Nov 13, 5-6 PM (58)
Nov 13, 6-7 PM (14)
Nov 13, 7-8 PM (14)
Nov 13, 8-9 PM (32)
Nov 13, 9-10 PM (13)
Nov 13, 10-11 PM (23)
Nov 13, 11-12 AM (19)
Nov 14, 12-1 AM (3)
Nov 14, 1-2 AM (3)
Nov 14, 2-3 AM (2)
Nov 14, 3-4 AM (3)
Nov 14, 4-5 AM (26)
Nov 14, 5-6 AM (2)
Nov 14, 6-7 AM (10)
Nov 14, 7-8 AM (11)
Nov 14, 8-9 AM (28)
Nov 14, 9-10 AM (36)
Nov 14, 10-11 AM (48)
Nov 14, 11-12 PM (39)
Nov 14, 12-1 PM (42)
Nov 14, 1-2 PM (31)
Nov 14, 2-3 PM (36)
Nov 14, 3-4 PM (21)
Nov 14, 4-5 PM (18)
Nov 14, 5-6 PM (29)
Nov 14, 6-7 PM (22)
Nov 14, 7-8 PM (14)
Nov 14, 8-9 PM (8)
Nov 14, 9-10 PM (5)
Nov 14, 10-11 PM (31)
Nov 14, 11-12 AM (25)
Nov 15, 12-1 AM (30)
Nov 15, 1-2 AM (7)
Nov 15, 2-3 AM (1)
Nov 15, 3-4 AM (2)
Nov 15, 4-5 AM (0)
Nov 15, 5-6 AM (0)
Nov 15, 6-7 AM (3)
Nov 15, 7-8 AM (2)
Nov 15, 8-9 AM (2)
Nov 15, 9-10 AM (3)
Nov 15, 10-11 AM (3)
Nov 15, 11-12 PM (11)
Nov 15, 12-1 PM (4)
Nov 15, 1-2 PM (0)
Nov 15, 2-3 PM (9)
Nov 15, 3-4 PM (6)
Nov 15, 4-5 PM (1)
Nov 15, 5-6 PM (1)
Nov 15, 6-7 PM (13)
Nov 15, 7-8 PM (11)
Nov 15, 8-9 PM (22)
Nov 15, 9-10 PM (4)
Nov 15, 10-11 PM (19)
Nov 15, 11-12 AM (26)
Nov 16, 12-1 AM (1)
Nov 16, 1-2 AM (2)
Nov 16, 2-3 AM (4)
Nov 16, 3-4 AM (3)
Nov 16, 4-5 AM (1)
Nov 16, 5-6 AM (0)
Nov 16, 6-7 AM (0)
Nov 16, 7-8 AM (0)
Nov 16, 8-9 AM (6)
Nov 16, 9-10 AM (6)
Nov 16, 10-11 AM (1)
Nov 16, 11-12 PM (3)
Nov 16, 12-1 PM (3)
Nov 16, 1-2 PM (6)
Nov 16, 2-3 PM (5)
Nov 16, 3-4 PM (10)
Nov 16, 4-5 PM (4)
Nov 16, 5-6 PM (8)
Nov 16, 6-7 PM (11)
Nov 16, 7-8 PM (14)
Nov 16, 8-9 PM (4)
Nov 16, 9-10 PM (9)
Nov 16, 10-11 PM (38)
Nov 16, 11-12 AM (24)
Nov 17, 12-1 AM (0)
Nov 17, 1-2 AM (7)
Nov 17, 2-3 AM (4)
Nov 17, 3-4 AM (4)
Nov 17, 4-5 AM (3)
Nov 17, 5-6 AM (8)
Nov 17, 6-7 AM (7)
Nov 17, 7-8 AM (36)
Nov 17, 8-9 AM (40)
Nov 17, 9-10 AM (29)
Nov 17, 10-11 AM (83)
Nov 17, 11-12 PM (31)
Nov 17, 12-1 PM (49)
Nov 17, 1-2 PM (47)
Nov 17, 2-3 PM (51)
Nov 17, 3-4 PM (41)
Nov 17, 4-5 PM (29)
Nov 17, 5-6 PM (23)
Nov 17, 6-7 PM (27)
Nov 17, 7-8 PM (26)
Nov 17, 8-9 PM (18)
Nov 17, 9-10 PM (25)
Nov 17, 10-11 PM (27)
Nov 17, 11-12 AM (28)
Nov 18, 12-1 AM (7)
Nov 18, 1-2 AM (6)
Nov 18, 2-3 AM (8)
Nov 18, 3-4 AM (7)
Nov 18, 4-5 AM (3)
Nov 18, 5-6 AM (5)
Nov 18, 6-7 AM (1)
Nov 18, 7-8 AM (15)
Nov 18, 8-9 AM (31)
Nov 18, 9-10 AM (13)
3,448 commits this week Nov 11, 2025 - Nov 18, 2025
fix: navigation to notifications center when last notification is removed
For some reason (at least to me, unknown), the notifications returned by useNotificationsCenter
hook is initially undefined.
This means that when the last notification is removed, the hook returns undefined and the
navigation to the notifications center is not triggered.
Changed the check: when notifications is not undefined, even if an empty array, the navigation
must be triggered.
Move expensive block clone outside lock scope in subscribe()
The deadlock was caused by holding the app state reference (from
get_app_state_readonly()) while cloning block data inside create_resource().
Block cloning is expensive and was blocking other subscription threads trying
to acquire locks on the same app state, even with 2048 DashMap shards.

Changes:
1. Clone block_data BEFORE acquiring app state lock
2. Explicitly drop(block_app_state) immediately after create_resource()
   to release the shared lock early

This eliminates lock hold time during the expensive clone operation, allowing
subscription threads to proceed concurrently without blocking on slow clones.

Thread backtraces showed lock_exclusive_slow() with only 2-3 concurrent
inserters despite 2048 shards, indicating the issue was lock hold duration
(expensive clone) not shard collision probability.
refactor(mobile): update EarnRewardsBanner component and related hooks
- Replaced the illustration in the EarnRewardsBanner with a new governance image.
- Added a linear gradient background to enhance the visual appeal of the banner.
- Adjusted styles for better layout and spacing within the banner.
- Removed the test button for toggling the banner display in development mode.
- Simplified the useEarnRewardsBanner hook by removing unnecessary options and logic.
- Updated localization strings for the EarnRewardsBanner.