1
- import React , { useState , useEffect } from ' react' ;
2
- import ' katex/dist/katex.min.css' ;
3
- import Latex from ' react-latex-next' ;
1
+ import React , { useState , useEffect } from " react" ;
2
+ import " katex/dist/katex.min.css" ;
3
+ import Latex from " react-latex-next" ;
4
4
5
5
const RewardSimulator : React . FC = ( ) => {
6
6
const [ publisherStake , setPublisherStake ] = useState ( 200 ) ;
@@ -17,12 +17,13 @@ const RewardSimulator: React.FC = () => {
17
17
const totalStake = publisherStake + delegatorStake ;
18
18
const eligibleAmount = Math . min ( totalStake , maxCap ) ;
19
19
const totalReward = ( rewardRate / 100 ) * eligibleAmount ;
20
-
21
- const publisherRewardBase = ( rewardRate / 100 ) * Math . min ( publisherStake , maxCap ) ;
20
+
21
+ const publisherRewardBase =
22
+ ( rewardRate / 100 ) * Math . min ( publisherStake , maxCap ) ;
22
23
const delegatorRewardBase = totalReward - publisherRewardBase ;
23
-
24
+
24
25
const delegatorFeeAmount = ( delegatorFee / 100 ) * delegatorRewardBase ;
25
-
26
+
26
27
const finalDelegatorReward = delegatorRewardBase - delegatorFeeAmount ;
27
28
const finalPublisherReward = publisherRewardBase + delegatorFeeAmount ;
28
29
@@ -31,79 +32,79 @@ const RewardSimulator: React.FC = () => {
31
32
} ;
32
33
33
34
calculateRewards ( ) ;
34
- } , [ publisherStake , delegatorStake , maxCap , delegatorFee , rewardRate ] ) ;
35
+ } , [ publisherStake , delegatorStake , maxCap , delegatorFee , rewardRate ] ) ;
35
36
36
- return (
37
- < div className = "border border-gray-300 dark:border-gray-700 p-6 rounded-lg" >
38
- < h3 className = "text-lg font-semibold mb-4" > Reward Simulator</ h3 >
39
- < div className = "grid grid-cols-1 sm:grid-cols-2 gap-4" >
40
- < div >
41
- < label className = "block mb-2" >
42
- < Latex > { 'Publisher Stake ($S_p^p$):' } </ Latex >
43
- </ label >
44
- < input
45
- type = "number"
46
- value = { publisherStake }
47
- onChange = { ( e ) => setPublisherStake ( Number ( e . target . value ) ) }
48
- className = "w-full p-2 border rounded bg-transparent"
49
- />
50
- </ div >
51
- < div >
52
- < label className = "block mb-2" >
53
- < Latex > { 'Delegator Stake ($S_p^d$):' } </ Latex >
54
- </ label >
55
- < input
56
- type = "number"
57
- value = { delegatorStake }
58
- onChange = { ( e ) => setDelegatorStake ( Number ( e . target . value ) ) }
59
- className = "w-full p-2 border rounded bg-transparent"
60
- />
37
+ return (
38
+ < div className = "border border-gray-300 dark:border-gray-700 p-6 rounded-lg" >
39
+ < h3 className = "text-lg font-semibold mb-4" > Reward Simulator</ h3 >
40
+ < div className = "grid grid-cols-1 sm:grid-cols-2 gap-4" >
41
+ < div >
42
+ < label className = "block mb-2" >
43
+ < Latex > { "Publisher Stake ($S_p^p$):" } </ Latex >
44
+ </ label >
45
+ < input
46
+ type = "number"
47
+ value = { publisherStake }
48
+ onChange = { ( e ) => setPublisherStake ( Number ( e . target . value ) ) }
49
+ className = "w-full p-2 border rounded bg-transparent"
50
+ />
51
+ </ div >
52
+ < div >
53
+ < label className = "block mb-2" >
54
+ < Latex > { "Delegator Stake ($S_p^d$):" } </ Latex >
55
+ </ label >
56
+ < input
57
+ type = "number"
58
+ value = { delegatorStake }
59
+ onChange = { ( e ) => setDelegatorStake ( Number ( e . target . value ) ) }
60
+ className = "w-full p-2 border rounded bg-transparent"
61
+ />
62
+ </ div >
63
+ < div >
64
+ < label className = "block mb-2" >
65
+ < Latex > { "Maximum Cap ($C_p$):" } </ Latex >
66
+ </ label >
67
+ < input
68
+ type = "number"
69
+ value = { maxCap }
70
+ onChange = { ( e ) => setMaxCap ( Number ( e . target . value ) ) }
71
+ className = "w-full p-2 border rounded bg-transparent"
72
+ />
73
+ </ div >
74
+ < div >
75
+ < label className = "block mb-2" >
76
+ < Latex > { "Delegator Fee ($f$) (%):" } </ Latex >
77
+ </ label >
78
+ < input
79
+ type = "number"
80
+ value = { delegatorFee }
81
+ onChange = { ( e ) => setDelegatorFee ( Number ( e . target . value ) ) }
82
+ className = "w-full p-2 border rounded bg-transparent"
83
+ />
84
+ </ div >
85
+ < div >
86
+ < label className = "block mb-2" >
87
+ < Latex > { "Reward Rate ($r$) (%):" } </ Latex >
88
+ </ label >
89
+ < input
90
+ type = "number"
91
+ value = { rewardRate }
92
+ onChange = { ( e ) => setRewardRate ( Number ( e . target . value ) ) }
93
+ className = "w-full p-2 border rounded bg-transparent"
94
+ />
95
+ </ div >
61
96
</ div >
62
- < div >
63
- < label className = "block mb-2" >
64
- < Latex > { 'Maximum Cap ($C_p$):' } </ Latex >
65
- </ label >
66
- < input
67
- type = "number"
68
- value = { maxCap }
69
- onChange = { ( e ) => setMaxCap ( Number ( e . target . value ) ) }
70
- className = "w-full p-2 border rounded bg-transparent"
71
- />
97
+ < div className = "mt-6" >
98
+ < h4 className = "font-semibold mb-2" > Calculated Rewards:</ h4 >
99
+ < p >
100
+ < Latex > { `Publisher Reward ($R^p_p$): ${ publisherReward } ` } </ Latex >
101
+ </ p >
102
+ < p >
103
+ < Latex > { `Delegator Reward ($R^d_p$): ${ delegatorReward } ` } </ Latex >
104
+ </ p >
72
105
</ div >
73
- < div >
74
- < label className = "block mb-2" >
75
- < Latex > { 'Delegator Fee ($f$) (%):' } </ Latex >
76
- </ label >
77
- < input
78
- type = "number"
79
- value = { delegatorFee }
80
- onChange = { ( e ) => setDelegatorFee ( Number ( e . target . value ) ) }
81
- className = "w-full p-2 border rounded bg-transparent"
82
- />
83
- </ div >
84
- < div >
85
- < label className = "block mb-2" >
86
- < Latex > { 'Reward Rate ($r$) (%):' } </ Latex >
87
- </ label >
88
- < input
89
- type = "number"
90
- value = { rewardRate }
91
- onChange = { ( e ) => setRewardRate ( Number ( e . target . value ) ) }
92
- className = "w-full p-2 border rounded bg-transparent"
93
- />
94
- </ div >
95
- </ div >
96
- < div className = "mt-6" >
97
- < h4 className = "font-semibold mb-2" > Calculated Rewards:</ h4 >
98
- < p >
99
- < Latex > { `Publisher Reward ($R^p_p$): ${ publisherReward } ` } </ Latex >
100
- </ p >
101
- < p >
102
- < Latex > { `Delegator Reward ($R^d_p$): ${ delegatorReward } ` } </ Latex >
103
- </ p >
104
106
</ div >
105
- </ div >
106
- ) ;
107
+ ) ;
107
108
} ;
108
109
109
- export default RewardSimulator ;
110
+ export default RewardSimulator ;
0 commit comments