@@ -5,6 +5,11 @@ const {createSnapshot, restoreSnapshot} = require("../helpers/snapshot.js")
55const { contract, accounts, web3} = require ( "@openzeppelin/test-environment" )
66const { time} = require ( "@openzeppelin/test-helpers" )
77
8+ const BN = web3 . utils . BN
9+ const chai = require ( 'chai' )
10+ chai . use ( require ( 'bn-chai' ) ( BN ) )
11+ const expect = chai . expect
12+
813describe ( 'KeepRandomBeaconOperator/PricingRewards' , function ( ) {
914 let serviceContract ;
1015 let operatorContract ;
@@ -36,10 +41,8 @@ describe('KeepRandomBeaconOperator/PricingRewards', function() {
3641 let entryFeeEstimate = await serviceContract . entryFeeEstimate ( 0 ) ;
3742 await serviceContract . methods [ 'requestRelayEntry()' ] ( { value : entryFeeEstimate , from : accounts [ 0 ] } ) ;
3843
39- let delayFactor = await operatorContract . delayFactor . call ( ) ;
40-
41- let expectedDelayFactor = web3 . utils . toBN ( 10000000000000000 ) ;
42- assert . isTrue ( expectedDelayFactor . eq ( delayFactor ) ) ;
44+ let delayFactor = await operatorContract . delayFactor . call ( ) ;
45+ expect ( delayFactor ) . to . eq . BN ( '10000000000000000' )
4346 } ) ;
4447
4548 it ( "should correctly evaluate delay factor at the first submission block" , async ( ) => {
@@ -49,21 +52,23 @@ describe('KeepRandomBeaconOperator/PricingRewards', function() {
4952 await time . advanceBlockTo ( web3 . utils . toBN ( await web3 . eth . getBlockNumber ( ) ) . addn ( 1 ) ) ;
5053
5154 let delayFactor = await operatorContract . delayFactor . call ( ) ;
52-
53- let expectedDelayFactor = web3 . utils . toBN ( 10000000000000000 ) ;
54- assert . isTrue ( expectedDelayFactor . eq ( delayFactor ) ) ;
55+ expect ( delayFactor ) . to . eq . BN ( '10000000000000000' )
5556 } ) ;
5657
5758 it ( "should correctly evaluate delay factor at the second submission block" , async ( ) => {
59+ let startBlock = await operatorContract . currentRequestStartBlock ( )
5860 let entryFeeEstimate = await serviceContract . entryFeeEstimate ( 0 ) ;
5961 await serviceContract . methods [ 'requestRelayEntry()' ] ( { value : entryFeeEstimate , from : accounts [ 0 ] } ) ;
6062
6163 await time . advanceBlockTo ( web3 . utils . toBN ( await web3 . eth . getBlockNumber ( ) ) . addn ( 2 ) ) ;
6264
6365 let delayFactor = await operatorContract . delayFactor . call ( ) ;
64-
65- let expectedDelayFactor = web3 . utils . toBN ( '9896104600694443' ) ;
66- assert . isTrue ( expectedDelayFactor . eq ( delayFactor ) ) ;
66+ // currentRequestStartBlock = 0
67+ // T_received = 2
68+ // T_deadline = 0 + 384 + 1 = 385
69+ // T_begin = 0 + 1 = 1
70+ // [(T_deadline - T_received) / (T_deadline - T_begin)]^2 = [(385 - 2) / (385 - 1)]^2
71+ expect ( delayFactor ) . to . eq . BN ( '9947984483506943' )
6772 } ) ;
6873
6974 it ( "should correctly evaluate delay factor in the last block before timeout" , async ( ) => {
@@ -74,9 +79,12 @@ describe('KeepRandomBeaconOperator/PricingRewards', function() {
7479 await time . advanceBlockTo ( relayEntryTimeout . addn ( await web3 . eth . getBlockNumber ( ) ) ) ;
7580
7681 let delayFactor = await operatorContract . delayFactor . call ( ) ;
77-
78- let expectedDelayFactor = web3 . utils . toBN ( '271267361111' ) ;
79- assert . isTrue ( expectedDelayFactor . eq ( delayFactor ) ) ;
82+ // currentRequestStartBlock = 0
83+ // T_received = 384
84+ // T_deadline = 0 + 384 + 1 = 385
85+ // T_begin = 0 + 1 = 1
86+ // [(T_deadline - T_received) / (T_deadline - T_begin)]^2 = [(385 - 384) / (385 - 1)]^2
87+ expect ( delayFactor ) . to . eq . BN ( '67816840277' )
8088 } ) ;
8189
8290 it ( "should correctly evaluate rewards for entry submitted " +
@@ -100,18 +108,9 @@ describe('KeepRandomBeaconOperator/PricingRewards', function() {
100108
101109 let rewards = await operatorContract . getNewEntryRewardsBreakdown . call ( ) ;
102110
103- assert . isTrue (
104- expectedGroupMemberReward . eq ( rewards . groupMemberReward ) ,
105- "unexpected group member reward"
106- ) ;
107- assert . isTrue (
108- expectedSubmitterReward . eq ( rewards . submitterReward ) ,
109- "unexpected submitter reward"
110- ) ;
111- assert . isTrue (
112- expectedSubsidy . eq ( rewards . subsidy ) ,
113- "unexpected subsidy"
114- ) ;
111+ expect ( rewards . groupMemberReward ) . to . eq . BN ( expectedGroupMemberReward )
112+ expect ( rewards . submitterReward ) . to . eq . BN ( expectedSubmitterReward )
113+ expect ( rewards . subsidy ) . to . eq . BN ( expectedSubsidy )
115114 } ) ;
116115
117116 it ( "should correctly evaluate rewards for entry submitted " +
@@ -137,18 +136,9 @@ describe('KeepRandomBeaconOperator/PricingRewards', function() {
137136
138137 let rewards = await operatorContract . getNewEntryRewardsBreakdown . call ( ) ;
139138
140- assert . isTrue (
141- expectedGroupMemberReward . eq ( rewards . groupMemberReward ) ,
142- "unexpected group member reward"
143- ) ;
144- assert . isTrue (
145- expectedSubmitterReward . eq ( rewards . submitterReward ) ,
146- "unexpected submitter reward"
147- ) ;
148- assert . isTrue (
149- expectedSubsidy . eq ( rewards . subsidy ) ,
150- "unexpected subsidy"
151- ) ;
139+ expect ( rewards . groupMemberReward ) . to . eq . BN ( expectedGroupMemberReward )
140+ expect ( rewards . submitterReward ) . to . eq . BN ( expectedSubmitterReward )
141+ expect ( rewards . subsidy ) . to . eq . BN ( expectedSubsidy )
152142 } ) ;
153143
154144 it ( "should correctly evaluate rewards for the entry submitted " +
@@ -162,10 +152,10 @@ describe('KeepRandomBeaconOperator/PricingRewards', function() {
162152
163153 await time . advanceBlockTo ( web3 . utils . toBN ( await web3 . eth . getBlockNumber ( ) ) . addn ( 2 ) ) ;
164154
165- // There is one block of delay so the delay factor is 0.9896104600694443 .
155+ // There is one block of delay so the delay factor is 0.9947984483506943 .
166156 // Group member reward should be scaled by the delay factor:
167- // 1987000 * 0.9896104600694443 = ~1966355
168- let expectedGroupMemberReward = web3 . utils . toBN ( "1966355 " ) ;
157+ // 1987000 * 0.9947984483506943 = ~1966355
158+ let expectedGroupMemberReward = web3 . utils . toBN ( "1976664 " ) ;
169159
170160 // The entire entry verification fee is paid to the submitter
171161 // regardless of their gas expenditure. The submitter is free to spend
@@ -174,37 +164,28 @@ describe('KeepRandomBeaconOperator/PricingRewards', function() {
174164 //
175165 // To incentivize a race for the submitter position, the submitter
176166 // receives delay penalty * group size * 0.05 as an extra reward:
177- // 1987000 * (1 - 0.9896104600694443 ) * 64 * 5% = ~66060
167+ // 1987000 * (1 - 0.9947984483506943 ) * 64 * 5% = ~33073
178168 //
179- // 70070000000 + 66060 = 70070066060
180- let expectedSubmitterReward = web3 . utils . toBN ( "70070066060 " ) ;
169+ // 70070000000 + 33073 = 70070033073
170+ let expectedSubmitterReward = web3 . utils . toBN ( "70070033073 " ) ;
181171
182172 // If the amount paid out to the signing group in group rewards and the
183173 // submitter’s extra reward is less than the profit margin, the
184174 // difference is added to the beacon’s request subsidy pool to
185175 // incentivize customers to request entries.
186176 //
187177 // profit margin: 1987000 * 64 = 127168000
188- // paid member rewards: 1966355 * 64 = 125846720
189- // submitter extra reward: 66060
178+ // paid member rewards: 1976664 * 64 = 126506496
179+ // submitter extra reward: 33073
190180 //
191- // 127168000 - 125846720 - 66060 = 1255220
192- let expectedSubsidy = web3 . utils . toBN ( "1255220 " ) ;
181+ // 127168000 - 126506496 - 33073 = 628431
182+ let expectedSubsidy = web3 . utils . toBN ( "628431 " ) ;
193183
194184 let rewards = await operatorContract . getNewEntryRewardsBreakdown . call ( ) ;
195185
196- assert . isTrue (
197- expectedGroupMemberReward . eq ( rewards . groupMemberReward ) ,
198- "unexpected group member reward"
199- ) ;
200- assert . isTrue (
201- expectedSubmitterReward . eq ( rewards . submitterReward ) ,
202- "unexpected submitter reward"
203- ) ;
204- assert . isTrue (
205- expectedSubsidy . eq ( rewards . subsidy ) ,
206- "unexpected subsidy"
207- ) ;
186+ expect ( rewards . groupMemberReward ) . to . eq . BN ( expectedGroupMemberReward )
187+ expect ( rewards . submitterReward ) . to . eq . BN ( expectedSubmitterReward )
188+ expect ( rewards . subsidy ) . to . eq . BN ( expectedSubsidy )
208189 } ) ;
209190
210191 it ( "should correctly evaluate rewards for the entry submitted " +
@@ -220,10 +201,10 @@ describe('KeepRandomBeaconOperator/PricingRewards', function() {
220201 await time . advanceBlockTo ( relayEntryTimeout . addn ( await web3 . eth . getBlockNumber ( ) ) ) ;
221202
222203 // There is one block left before the timeout so the delay factor is
223- // 0.0000271267361111 .
204+ // 0.000067816840277 .
224205 // Group member reward should be scaled by the delay factor:
225- // 1382000000 * 0.0000271267361111 = ~37489
226- let expectedGroupMemberReward = web3 . utils . toBN ( "37489 " ) ;
206+ // 1382000000 * 0.0000067816840277 = ~9372
207+ let expectedGroupMemberReward = web3 . utils . toBN ( "9372 " ) ;
227208
228209 // The entire entry verification fee is paid to the submitter
229210 // regardless of their gas expenditure. The submitter is free to spend
@@ -232,36 +213,27 @@ describe('KeepRandomBeaconOperator/PricingRewards', function() {
232213 //
233214 // To incentivize a race for the submitter position, the submitter
234215 // receives delay penalty * group size * 0.05 as an extra reward:
235- // 1382000000 * (1 - 0.0000271267361111 ) * 64 * 5% = ~4422280034
216+ // 1382000000 * (1 - 0.0000067816840277 ) * 64 * 5% = ~4422370008
236217 //
237- // 100040000000 + 4422280034 = 104462280034
238- let expectedSubmitterReward = web3 . utils . toBN ( "104462280034 " ) ;
218+ // 100040000000 + 4422370008 = 104462370008
219+ let expectedSubmitterReward = web3 . utils . toBN ( "104462370008 " ) ;
239220
240221 // If the amount paid out to the signing group in group rewards and the
241222 // submitter’s extra reward is less than the profit margin, the
242223 // difference is added to the beacon’s request subsidy pool to
243224 // incentivize customers to request entries.
244225 //
245226 // profit margin: 1382000000 * 64 = 88448000000
246- // paid member rewards: 37489 * 64 = 2399296
227+ // paid member rewards: 9372 * 64 = 599808
247228 // submitter extra reward: 4422280034
248229 //
249- // 88448000000 - 2399296 - 4422280034 = 84023320670
250- let expectedSubsidy = web3 . utils . toBN ( "84023320670 " ) ;
230+ // 88448000000 - 599808 - 4422370008 = 84025030184
231+ let expectedSubsidy = web3 . utils . toBN ( "84025030184 " ) ;
251232
252233 let rewards = await operatorContract . getNewEntryRewardsBreakdown . call ( ) ;
253234
254- assert . isTrue (
255- expectedGroupMemberReward . eq ( rewards . groupMemberReward ) ,
256- "unexpected group member reward"
257- ) ;
258- assert . isTrue (
259- expectedSubmitterReward . eq ( rewards . submitterReward ) ,
260- "unexpected submitter reward"
261- ) ;
262- assert . isTrue (
263- expectedSubsidy . eq ( rewards . subsidy ) ,
264- "unexpected subsidy"
265- ) ;
235+ expect ( rewards . groupMemberReward ) . to . eq . BN ( expectedGroupMemberReward )
236+ expect ( rewards . submitterReward ) . to . eq . BN ( expectedSubmitterReward )
237+ expect ( rewards . subsidy ) . to . eq . BN ( expectedSubsidy )
266238 } ) ;
267239} ) ;
0 commit comments