Skip to content

Commit 7cfdaab

Browse files
authored
chore: add reward notif (#2053)
1 parent a02a8e0 commit 7cfdaab

File tree

4 files changed

+257
-5
lines changed

4 files changed

+257
-5
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
"@cosmjs/tendermint-rpc": "^0.32.1",
5656
"@datadog/browser-logs": "^5.23.3",
5757
"@dydxprotocol/v4-client-js": "3.4.0",
58-
"@dydxprotocol/v4-localization": "1.1.373",
58+
"@dydxprotocol/v4-localization": "1.1.374",
5959
"@dydxprotocol/v4-proto": "^7.0.0-dev.0",
6060
"@emotion/is-prop-valid": "^1.3.0",
6161
"@hugocxl/react-to-image": "^0.0.9",

pnpm-lock.yaml

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/constants/clc.ts

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
export const TRADING_LEAGUE_REWARDS_DETAILS_ROUND_2 = {
2+
claimDeadline: '2026-01-31T23:59:59.000Z',
3+
claimStartTime: '2026-01-01T00:00:00.000Z',
4+
assumedPrice: 0.33,
5+
estimatedWalletRewards: {
6+
dydx19d870eyk3qh46y2h7kg9kzssa4gwhuktna3uql: 40000,
7+
dydx15pnlwr3mkaph2u3kxvvdprzncmuw9l7h525n5k: 40000,
8+
dydx1qe9qjrmedx3pjqg98acn3tfxhxrteduskfctn0: 35000,
9+
dydx1hsest59cpjhzlpslwdsjmvwapjyd0cfthmn3ja: 32000,
10+
dydx172rtxnesdvgx89nr9umykly7wtwvsk8z2rteme: 29500,
11+
dydx1jxe3l4h2ychf66q5f37qxfpx2jh6l3zjum39rz: 25000,
12+
dydx1klkt566wcz4hel793gah0t43lqlpqwg04h8uhf: 25000,
13+
dydx197azmzp9hhntrff92lvjhks294v3eazdfcal83: 22500,
14+
dydx1xpc9hhel8pq62z8dv2c87davmk03g4cf3297fh: 19500,
15+
dydx1y7m4kmlgj5my4g5l2hk0rujy0n8y8hqws0fa2y: 17000,
16+
dydx1m9hg73dtn5ku8ulmj8rjmdqh0hk7uuhawc69cn: 15500,
17+
dydx1rgmc9rjk9d5q2x9h4c6l9y77r9ul0n6dpg5n8f: 15000,
18+
dydx1a3ggqr30aduu4nhf92xxv8zqceczqdsg078lk4: 15000,
19+
dydx16y908xy4pg2q07a8ydfzxwcryy8uzwt044uvu0: 15000,
20+
dydx1vh0w3zk8frkwpru40dk7h9c6tegfm9rcjj3ghk: 14500,
21+
dydx1snmymvxr6hvhl5gqv8aq8fvyyxjvk6dkhwqez3: 13500,
22+
dydx13aeza8l3mrcr8d34g9z8tcunncl74gprf7t98g: 13500,
23+
dydx1pj9ldud50jrrxv30vp5pssh0p6jj7sk6hlufag: 10500,
24+
dydx102d67xwnxufuy0egj6kw3x9994wzxwzscmdcy6: 10500,
25+
dydx1wdm2vfjzqjn2k37n86aqz7ccf5qpdpwj5serjr: 9000,
26+
dydx1mlf3afr8k6fh6k9sk9ktauylwh6ckwg8t70zhg: 9000,
27+
dydx12v3g68sjcn0s4v3jlc5jtuklv5arps2y6syjuz: 8500,
28+
dydx1fhkd3hzwwk9jrrsnuuq78uf5asjra4l8fhnsma: 8500,
29+
dydx18cc9ykg9jhmhphqnzevt9hvx0924gkzgvhkg3f: 8500,
30+
dydx1tr4k95ttntc4852pldhjaqwp5magt3m6j620tt: 8000,
31+
dydx1avw959lk9lg4u88atedw7988aluyanhmu26mtx: 7500,
32+
dydx1uyyz3nsm4rpgjja9zhhvrvd63wcmyhuphtk2qk: 7500,
33+
dydx1afskx2knwm4fp6s5ydkaf0txnlxux7qavr8xws: 7000,
34+
dydx1l8p5yw52ka6c09lwnw8q6k8fych5gp25ah9c8k: 7000,
35+
dydx1wvg5l490ce2wckt74cvxlskkwsrdje8sz20292: 7000,
36+
dydx179gwlz4fx20dntagmyzgu2uem5f95ej05qzpse: 7000,
37+
dydx13z3sg996n7mu0pvy0yf26fsmmnn9uladre4w2r: 7000,
38+
dydx1l8t5jpsc0r94ljqrjlqxk4z0z6qx7cxp7hp3uw: 7000,
39+
dydx1n76jumjapfqkpnyqgvvqcv8762m06k4yl6cr5y: 7000,
40+
dydx17tch34sk5gzmn92zc5srwjngqgfqxcfex9339j: 6500,
41+
dydx1aw5qvzhjgtyukhx4g8hxxsh0e8pfn28gdp0ley: 6000,
42+
dydx1sdx3cdcvkvygkq24tcsa9z2z4lkszfu44q0lgs: 5500,
43+
dydx12r9zw52gcejn4smmcvvjc5d24cr2drkknv4kkh: 5000,
44+
dydx130h5uc3ejwjtdhaacp5jydnccte86d3s09pfw6: 5000,
45+
dydx1uz7qvyf59qx8x57gfd9a7uedk42m4vpadsu6wg: 5000,
46+
dydx1p8e28y4msnlqrdsp352l35x7myevu54m60jznd: 4000,
47+
dydx1eue0sumfls5hu59ka0ut49unxdn40q2lu2c7hp: 4000,
48+
dydx1xa8vpn0e9gjfhaqhnl06rjhjngg54mywk0aax8: 4000,
49+
dydx13esn47l9dsd9hzkzmra9q3xwdt5dt34apm2877: 3500,
50+
dydx1xdwvhke36ta6g9ma58hnrqe8m5wkla7qy097cn: 3500,
51+
dydx1rmt5tm8eesmp06nwsy0ulcy8x3d65wz3x2al25: 3500,
52+
dydx1nr4swq0m7xd0duuccwfgl045x2zt6gmtp8dlnw: 3500,
53+
dydx1f3l724ezg3m9eykkyem6xamguqyf434ptzpkda: 3500,
54+
dydx10ur40x9pcn8pdz5h6t9tjt0smuyuazvv0vvldf: 3500,
55+
dydx1m9js03rpj88rta3c5gcx7w6h0h2ulu40wqryhv: 3000,
56+
dydx1qmx0way5kd9umj9vgsyeg4e2sh9m3s293mpgq9: 3000,
57+
dydx1x89rwrgsd287j8nyrk084c2rqwxv9zxypv7nht: 3000,
58+
dydx1de4c2mlgkw6g8mfyq7pnkfaeje0h4rcdpfptap: 3000,
59+
dydx1njex4w6u3f8em7rdqraevyscfyev5s4gka06yw: 3000,
60+
dydx1eds2v66jspluc26rztn07qd0m8548096qk06tw: 3000,
61+
dydx137knwu32kuvshpanxsz6plfnsjymxun89u6lwz: 3000,
62+
dydx10wv0ur56cq3wyk5v58cjnux4745xc85fe7uurj: 3000,
63+
dydx1tz6xaeuwu8edptyq82aleveduymuemf4lvhttn: 3000,
64+
dydx1ehcctnrgr9uq65z4dgkxfz9jhkf9x4ylld6aef: 3000,
65+
dydx10a2avqqa6dmgp0gx83pdyz4dp7pllhu0x5d3xx: 3000,
66+
dydx14mlqzx6v5ajmerfqwmeu2asr32a0qs2dfc5970: 3000,
67+
dydx18qu7qjy674dmzmq4qd5qj6nvc3kfhhfslmp5u5: 3000,
68+
dydx1erkqndnmndy5fmgny7wh0v4a72qy3q6vdhhvn0: 3000,
69+
dydx1eqszeg4snqjp7qw7tgkl2mchucalkf46jefw27: 3000,
70+
dydx18023tv2kw8c03us8nl77ma00466zqqzgzh7l6y: 3000,
71+
dydx13j3xankqf8xjv84a6gmlr25u2nq4w2cy774kjz: 3000,
72+
dydx1gd5k000vvuhm6aexjemktfaevzy53wm3cyyp20: 3000,
73+
dydx163jxd5fpspu96dyn4et0364thlgtzsumk8ruvf: 3000,
74+
dydx1afr2uvufcw4qwr4k9le2g8yxughnztncm3j5v9: 3000,
75+
dydx187dq90qnnentgfxwynf8cmjjahrn6jy07m4k5g: 3000,
76+
dydx1cuasd5stzaahvmtxnd9mj0rutf92q5a4lzl2vd: 3000,
77+
dydx188q90vue8dhggrpvsk40drwv7h446ev9dtvdjg: 3000,
78+
dydx14wl379fsahkev7xj8k4jaya2vp2fayexs35mzk: 3000,
79+
dydx13gfqeuw48waxl9m50seajkgq6h37pz80w7l04g: 3000,
80+
dydx1q8pg5tldgfv6kfzdcp8g5y3c6vvr7n7yauq8zk: 2500,
81+
dydx1h94vyztjrp4t6m6vymnfaq9zt9ww5snfqqxhzn: 2500,
82+
dydx1hmsgjf9qkaud966z63nwcn9p9l36jl5r3z9gqq: 2500,
83+
dydx13yr5xfrf0r72f9l8zmyu9khmzlt0lj6e2ps7ql: 2500,
84+
dydx190769ssnqlk89zsplrh6aegjly30k6e5vqn2g6: 2500,
85+
dydx109dq6uwrkg9px936zh7w66dvyjswthhmg32jjx: 2000,
86+
dydx1pa4dlv44a5wpya29t8trjs44w7s9r96y0j0580: 2000,
87+
dydx1wyhxdz7aej4ze80f3szmdveufz56zanhv6ej7t: 2000,
88+
dydx1k47wywwmxwu90jrj5dxlcw43jl92rra3qfv409: 2000,
89+
dydx1qcmtnyl3t7xtc6hewc05u35cxx38up6thlqnra: 2000,
90+
dydx1muahvk8j3lqpdymsx3s05rxr0sc0yy72k5yvdx: 2000,
91+
dydx1rgvj3snmdsxersda2zyfre2km0de2hxyydynlp: 2000,
92+
dydx1r0jdema35fkl4k4q0808955n56rjeq92rhz7jh: 2000,
93+
dydx1vd27pygl6y4qndpmd4hc86fqvdj7tj4hhf6hee: 1500,
94+
dydx1tdmpay2z3q4zpzefq4pp65t4als8ujzrrfud9r: 1500,
95+
dydx1py5jha7vg3lm2xknefn33zyv0sj40fy2fhyjvt: 1500,
96+
dydx1fs456vxznh5ajpqwa59x4etzv0tq6eg6asq0ls: 1500,
97+
dydx184pvt88rcnsfkps38k69nwem26fsefcx2krrej: 1500,
98+
dydx1fapz906ddzt8glslkrd36cctnqzcwwawppvlv0: 1500,
99+
dydx13erzx7unukhpe2vplet2z0kpdqj30wzh5muhem: 1500,
100+
dydx1u4up78lpppuua56vlsvnhqctcw2emgsxqc0ty6: 1500,
101+
dydx14r34ern0duvaerpypl6lh0lyeesa5454hr5ctr: 1500,
102+
dydx1xr46hn6jgm3j6akwfgpmfzlpm50cnpptj8d6jr: 1500,
103+
dydx1lacuh4rh5vzkv00ctrsstevyh35s3ql77g2tcu: 1500,
104+
dydx15zcrkaq3w2k0gqdha3r4c5pqlz4nrjtfn67vww: 1500,
105+
dydx1jfl3c74shcqpq7kvaa6ac7g3pmg2warlrfa2mk: 1500,
106+
dydx1keelhggvqu9qley30qx9s8evu4f9jznxugh5pn: 1500,
107+
dydx1607xpmlwf6ehf2gnracmzrstf9zflqs5hhl2l5: 1500,
108+
dydx1mrkn5wkt8xy6ajlvjkq5fm8j9lq6er48xk84tr: 1500,
109+
dydx17c2u8cj7jswzkj5ev8cakx285tw7d5q4mwrt27: 1500,
110+
dydx1y8vy456kawy2gt2d8zxwqjn4ttdp76zmc023pp: 1500,
111+
dydx164d2zx5tsuaup94t49lcmhkazc4zsdae8elrwc: 1500,
112+
dydx1864p4pym4hnddvfeq32zlej9y89m2yc7h8jn22: 1500,
113+
dydx17qvwdpdljavs8ksg89pdjuqf3nmzdu6x92wst9: 1500,
114+
dydx1svafrk74j7gy3yk6594ln47l5ejeuah6hzv00t: 1500,
115+
dydx15jan3n0g57f7wd9wfq45t8trga52yhj2zu6ky2: 1500,
116+
dydx1edu3jw2pakcq3r8fdde93ej3eclzx8utp3c355: 1500,
117+
dydx1wfxtn2m4j7f2tfjfl9tfaw4ffysc2mzh39zjlr: 1500,
118+
dydx15jldkg89x34u6wmy2qw2rxmgjtxj0zdyu34n9p: 1500,
119+
dydx1c5sprm6rz2usnj2lrs90tpczy4n88hlz6clau8: 1500,
120+
dydx1jnsey8ggez76uug9xvmmeutdjz7y2ass0ecf78: 1500,
121+
dydx1sfmzn7vrek3x4zmk8jgx5s2nqgq0tw2hu3ajhf: 1500,
122+
dydx1kahh3jcyh5x34z73xzv8lrek6ywq3zqq5k78w0: 1500,
123+
dydx1l727655ld94sd4mgrvstyhpnknzva6x949j5km: 1500,
124+
dydx1plcdfmmez7xa8wevq3ssmv3v4kekhvr2z5e9qr: 1500,
125+
dydx1au6ek6rnxre3ra393u3g588mhzzj9nzjvxatq4: 1500,
126+
dydx14gkzm985h58vmjm9ckhfnlcvhzcyfhqkhr9dy4: 1500,
127+
dydx1cteyp74m3ym9ps8nr4ktm9gltvmfj3glmws44q: 1000,
128+
dydx1csrt84ze7pxkhr3jdyjlk057y30walygzwldrf: 1000,
129+
dydx1uwyn5tzq9n3ud4ezm37lfqrcfetgxapsu0ach2: 1000,
130+
dydx1kn4e686xfcuwvntsy74rh9ktf72fhhfxzlc85y: 1000,
131+
dydx1kf3h0u4cmjsen54zk2lr4f2j88m59a50v0r0kj: 1000,
132+
dydx1um23reecq7p9yfve92jmg4w06sptjt3vw2vm2h: 1000,
133+
dydx18c5f8qsxcxqusg45ka7d6n3n8qeerqk2fauchu: 1000,
134+
dydx19nguaevz6768uyk3z4jrge4utwms93a0y77jxf: 1000,
135+
dydx12fdr5ppm4vyhd54x84n8878h2wcshqgkejkuxl: 1000,
136+
dydx1t73wulju7kzgzq5hljp6uwyd8ufenejj80nlwh: 1000,
137+
dydx1gqjjglznj0u3v36hpj0nzss39ccprav3hehfgn: 1000,
138+
dydx1v5g96ajdl652jrtvgdz65c3f0aus5g0uyrfk7l: 1000,
139+
dydx1lxc8dcw0v4sram0287kmv0v7g73yehl644jvtc: 1000,
140+
dydx1e7nngz28j92c6hmjh57n0q4tqul8utcrzfax0m: 1000,
141+
dydx19z6mfaw668eecnrsdyxnfz22rn4rclq4thj4p5: 1000,
142+
dydx1uktr3yqtjky04ddkdsdvgsnefa5v0a2dapgz9g: 1000,
143+
dydx1x5ap3q26sfh9nqu6knxd6748p2s7nthqf66msz: 1000,
144+
dydx14flnc25tppft4lv6gpwq9kwcsxprvxf0cr8pwm: 1000,
145+
dydx1x6lt3each6yswn68rjkwl8j40wys6386wumpx9: 1000,
146+
dydx1af63pr5p8pyfu2nakwyjs5hjx5jj8kuu0d2980: 1000,
147+
dydx1jx6lmnanuhczyntpcjlwyfwwn8vjk34e0yuqvv: 1000,
148+
dydx1lqv8k0f8h9kvm0g74urd3330r93j8f8ef6watp: 1000,
149+
dydx1rlzzqaz08v2t0r64fppuacr9rvmw0zxt98tgcp: 500,
150+
dydx1q8cednyr7sdy5s0u4jgvyh3de4nzt8078de3nu: 500,
151+
dydx13r7n4klw0tv2sj8hzjrtdkwuws6ra7wxuual6t: 500,
152+
dydx1dz6frxlgpph46mj8c9782w6ag4qy7pn89usp2q: 500,
153+
dydx1652u6kkczjvxmjz8rg7tgqcjw0shexayxgcnjs: 500,
154+
dydx1c5w07e9n23amjqvv46rva2zanw7lelxse5kp0z: 500,
155+
dydx1drr5ydek02a5kezncmnl66mlqafgaxvymuly98: 500,
156+
dydx1fh3763g2s0qus7ws82l6naufj4sww46cnw49pz: 500,
157+
dydx1mt44hpstxml2swhjara3hudl5wtnuq73ugy4yv: 500,
158+
dydx1wpxg935c52j236wmq7rzy94yn3pjdd220r23xy: 500,
159+
dydx1x4nxgjy2emk2ysfafch0yj8a6s8ttxwrur8fgt: 500,
160+
dydx1nqdhw7c25mdmswyhxjgtpnpf87pfq8m0fhal32: 500,
161+
dydx13e3zh3vn87qyyqefmamemg0k2vdqer3v0nmh69: 500,
162+
dydx1te024wtlhclslwf4vg4gvvupmgzrvj3egmuntk: 500,
163+
dydx147fq0dfk625h325xjd9wcvx55am8578aj8eul3: 500,
164+
dydx1squ2wfcsysec2x0xk374jaqqt6gf3w9tn73dmf: 500,
165+
dydx1xtcq873fs2a7mkyqcwpfftul8ernpfklgmmtrt: 500,
166+
} as Record<string, number>,
167+
};

src/hooks/useNotificationTypes.tsx

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import tw from 'twin.macro';
88

99
import { AMOUNT_RESERVED_FOR_GAS_USDC, AMOUNT_USDC_BEFORE_REBALANCE } from '@/constants/account';
1010
import { CHAIN_INFO } from '@/constants/chains';
11+
import { TRADING_LEAGUE_REWARDS_DETAILS_ROUND_2 } from '@/constants/clc';
1112
import { DialogTypes } from '@/constants/dialogs';
1213
import { STRING_KEYS } from '@/constants/localization';
1314
import {
@@ -611,6 +612,90 @@ export const notificationTypes: NotificationTypeConfig[] = [
611612
});
612613
}
613614
}, [decimalSeparator, dydxAddress, groupSeparator, selectedLocale, stringGetter, trigger]);
615+
616+
const qualifiedForRound2 = useMemo(() => {
617+
return (
618+
Date.now() < new Date(TRADING_LEAGUE_REWARDS_DETAILS_ROUND_2.claimDeadline).getTime() &&
619+
Date.now() > new Date(TRADING_LEAGUE_REWARDS_DETAILS_ROUND_2.claimStartTime).getTime() &&
620+
TRADING_LEAGUE_REWARDS_DETAILS_ROUND_2.estimatedWalletRewards[
621+
dydxAddress?.toLowerCase() ?? ''
622+
] != null
623+
);
624+
}, [dydxAddress]);
625+
626+
const tokenRewardPrice = useAppSelector(BonsaiCore.rewardParams.data).tokenPrice;
627+
628+
useEffect(() => {
629+
if (qualifiedForRound2 && dydxAddress != null && tokenRewardPrice != null) {
630+
const estimatedUsdRewardAmount =
631+
TRADING_LEAGUE_REWARDS_DETAILS_ROUND_2.estimatedWalletRewards[
632+
dydxAddress.toLowerCase()
633+
] ?? 0;
634+
635+
const adjustedUsdRewardAmount =
636+
(estimatedUsdRewardAmount / TRADING_LEAGUE_REWARDS_DETAILS_ROUND_2.assumedPrice) *
637+
tokenRewardPrice;
638+
639+
const formattedRewardAmount = formatNumberOutput(
640+
adjustedUsdRewardAmount,
641+
OutputType.Number,
642+
{
643+
decimalSeparator,
644+
groupSeparator,
645+
selectedLocale,
646+
fractionDigits: USD_DECIMALS,
647+
minimumFractionDigits: USD_DECIMALS,
648+
}
649+
);
650+
651+
trigger({
652+
id: `jan-2026-trading-league-rewards-round-2`,
653+
displayData: {
654+
icon: <Icon iconName={IconName.Sparkles} />,
655+
title: stringGetter({
656+
key: STRING_KEYS.TRADING_LEAGUE_REWARD_CLAIM_TITLE,
657+
}),
658+
body: stringGetter({
659+
key: STRING_KEYS.TRADING_LEAGUE_REWARD_CLAIM_BODY,
660+
params: {
661+
REWARD_AMOUNT: formattedRewardAmount,
662+
CLAIM_DEADLINE: new Date(
663+
TRADING_LEAGUE_REWARDS_DETAILS_ROUND_2.claimDeadline
664+
).toLocaleDateString(selectedLocale, { month: 'short', day: 'numeric' }),
665+
LEARN_MORE_LINK: (
666+
<Link
667+
href="https://dydx.forum/t/dydx-trading-leagues-pilot-program-request-1m-in-dydx-from-the-community-treasury/4613/24"
668+
isAccent
669+
isInline
670+
>
671+
{stringGetter({ key: STRING_KEYS.HERE })}
672+
</Link>
673+
),
674+
},
675+
}),
676+
toastSensitivity: 'foreground',
677+
groupKey: NotificationType.RewardsProgramUpdates,
678+
actionAltText: stringGetter({ key: STRING_KEYS.CLAIM }),
679+
renderActionSlot: () => (
680+
<Link href="https://www.dydx.xyz/trading-league-rewards" isAccent>
681+
{stringGetter({ key: STRING_KEYS.CLAIM })}
682+
</Link>
683+
),
684+
},
685+
updateKey: [`jan-2026-trading-league-rewards-round-2`, dydxAddress],
686+
});
687+
}
688+
// eslint-disable-next-line react-hooks/exhaustive-deps
689+
}, [
690+
Boolean(tokenRewardPrice),
691+
qualifiedForRound2,
692+
dydxAddress,
693+
stringGetter,
694+
trigger,
695+
decimalSeparator,
696+
groupSeparator,
697+
selectedLocale,
698+
]);
614699
},
615700
},
616701
{

0 commit comments

Comments
 (0)