Skip to content

Commit 20415c1

Browse files
committed
WIP V5 follower, leader & channel ticks
1 parent 757b7e3 commit 20415c1

File tree

6 files changed

+371
-395
lines changed

6 files changed

+371
-395
lines changed

validator_worker/src/channel.rs

Lines changed: 14 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{
2-
error::Error,
3-
// follower::TickStatus,
2+
error::{Error, TickError},
3+
follower,
44
sentry_interface::{campaigns::all_campaigns, Validator, Validators},
55
SentryApi,
66
};
@@ -11,17 +11,17 @@ use primitives::{
1111
use slog::Logger;
1212
use std::collections::{hash_map::Entry, HashSet};
1313

14-
pub enum TickError {
15-
Validation,
16-
}
17-
1814
pub async fn channel_tick<A: Adapter + 'static>(
1915
adapter: A,
2016
config: &Config,
2117
logger: &Logger,
2218
channel: Channel,
2319
validators: Validators,
2420
) -> Result<ChannelId, Error<A::AdapterError>> {
21+
let tick = channel
22+
.find_validator(adapter.whoami())
23+
.ok_or_else(|| Error::ChannelNotIntendedForUs)?;
24+
2525
let sentry = SentryApi::init(
2626
adapter,
2727
logger.clone(),
@@ -50,51 +50,20 @@ pub async fn channel_tick<A: Adapter + 'static>(
5050
return Err(Error::Validation);
5151
}
5252

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+
};
6061

6162
// Validation #3
6263
// Accounting.balances != NewState.balances
6364

64-
6565
// Validation #4
6666
// 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-
}
9867

9968
Ok(channel.id())
10069
}

0 commit comments

Comments
 (0)