File tree Expand file tree Collapse file tree 1 file changed +24
-0
lines changed Expand file tree Collapse file tree 1 file changed +24
-0
lines changed Original file line number Diff line number Diff line change @@ -1330,6 +1330,30 @@ pub fn validate_tally_transaction<'a>(
1330
1330
}
1331
1331
. into ( ) ) ;
1332
1332
}
1333
+ } else {
1334
+ // Validate that the value returned to the data request launcher is correct
1335
+ let expected_tally_value = if honests_count == 0 {
1336
+ // If there are no honests because the data request fails, all rewards are returned
1337
+ // The returned commit-and-reveal fees depends on the amount of commits and reveals observed
1338
+ dr_state. data_request . witnesses as u64 * dr_state. data_request . witness_reward
1339
+ + ( dr_state. data_request . witnesses as usize - commits_count) as u64
1340
+ * dr_state. data_request . commit_and_reveal_fee
1341
+ + ( dr_state. data_request . witnesses as usize - reveals_count) as u64
1342
+ * dr_state. data_request . commit_and_reveal_fee
1343
+ } else {
1344
+ // For non-revealers, the commit-and-reveal fee is refunded
1345
+ // For liars (which can be both revealers and non-revealers) and errors, the reward is refunded
1346
+ ( commits_count - reveals_count) as u64 * dr_state. data_request . commit_and_reveal_fee
1347
+ + ( errors_count + liars_count) as u64 * dr_state. data_request . witness_reward
1348
+ } ;
1349
+
1350
+ if total_tally_value != expected_tally_value {
1351
+ return Err ( TransactionError :: InvalidTallyValue {
1352
+ value : total_tally_value,
1353
+ expected_value : expected_tally_value,
1354
+ }
1355
+ . into ( ) ) ;
1356
+ }
1333
1357
}
1334
1358
1335
1359
Ok ( ( ta_tx. outputs . iter ( ) . collect ( ) , tally_extra_fee) )
You can’t perform that action at this time.
0 commit comments