1
1
use crate :: {
2
- error:: Error ,
3
- // follower::TickStatus ,
2
+ error:: { Error , TickError } ,
3
+ follower,
4
4
sentry_interface:: { campaigns:: all_campaigns, Validator , Validators } ,
5
5
SentryApi ,
6
6
} ;
@@ -11,17 +11,17 @@ use primitives::{
11
11
use slog:: Logger ;
12
12
use std:: collections:: { hash_map:: Entry , HashSet } ;
13
13
14
- pub enum TickError {
15
- Validation ,
16
- }
17
-
18
14
pub async fn channel_tick < A : Adapter + ' static > (
19
15
adapter : A ,
20
16
config : & Config ,
21
17
logger : & Logger ,
22
18
channel : Channel ,
23
19
validators : Validators ,
24
20
) -> Result < ChannelId , Error < A :: AdapterError > > {
21
+ let tick = channel
22
+ . find_validator ( adapter. whoami ( ) )
23
+ . ok_or_else ( || Error :: ChannelNotIntendedForUs ) ?;
24
+
25
25
let sentry = SentryApi :: init (
26
26
adapter,
27
27
logger. clone ( ) ,
@@ -50,51 +50,20 @@ pub async fn channel_tick<A: Adapter + 'static>(
50
50
return Err ( Error :: Validation ) ;
51
51
}
52
52
53
- // Get Last Approved State & Last Approved NewState
54
- let last_approve_state = sentry. get_last_approved ( channel. id ( ) ) . await ?;
55
- let new_state_balances = last_approve_state
56
- . last_approved
57
- . and_then ( |last_approved| last_approved. new_state )
58
- . map ( |new_state_msg| new_state_msg. msg . into_inner ( ) . balances )
59
- . unwrap_or_default ( ) ;
53
+ // TODO: Add timeout
54
+ let _tick_result =
55
+ match tick {
56
+ primitives:: Validator :: Leader ( _v) => todo ! ( ) ,
57
+ primitives:: Validator :: Follower ( _v) => follower:: tick ( & sentry, channel, accounting. balances )
58
+ . await
59
+ . map_err ( |err| Error :: FollowerTick ( channel. id ( ) , TickError :: Tick ( err) ) ) ?,
60
+ } ;
60
61
61
62
// Validation #3
62
63
// Accounting.balances != NewState.balances
63
64
64
-
65
65
// Validation #4
66
66
// OUTPACE Rules:
67
- let ( accounting_spenders, accounting_earners) = (
68
- accounting
69
- . balances
70
- . spenders
71
- . values ( )
72
- . sum :: < Option < UnifiedNum > > ( )
73
- . ok_or ( Error :: Overflow ) ?,
74
- accounting
75
- . balances
76
- . earners
77
- . values ( )
78
- . sum :: < Option < UnifiedNum > > ( )
79
- . ok_or ( Error :: Overflow ) ?,
80
- ) ;
81
- let ( new_state_spenders, new_state_earners) = (
82
- new_state_balances
83
- . spenders
84
- . values ( )
85
- . sum :: < Option < UnifiedNum > > ( )
86
- . ok_or ( Error :: Overflow ) ?,
87
- new_state_balances
88
- . earners
89
- . values ( )
90
- . sum :: < Option < UnifiedNum > > ( )
91
- . ok_or ( Error :: Overflow ) ?,
92
- ) ;
93
- // sum(accounting.balances.spenders) > sum(new_state.balances.spenders)
94
- // sum(accounting.balances.earners) > sum(new_state.balances.earners)
95
- if !( accounting_spenders > new_state_spenders) || !( accounting_earners > new_state_earners) {
96
- return Err ( Error :: Validation ) ;
97
- }
98
67
99
68
Ok ( channel. id ( ) )
100
69
}
0 commit comments