WEBVTT
Kind: captions
Language: en

00:00:04.200 --> 00:00:07.280 align:start position:0%
 
hi<00:00:04.950><c> my</c><00:00:05.910><c> name</c><00:00:06.030><c> is</c><00:00:06.060><c> Michael</c><00:00:06.420><c> Sproul</c><00:00:06.690><c> I</c><00:00:06.900><c> work</c><00:00:07.109><c> at</c>

00:00:07.280 --> 00:00:07.290 align:start position:0%
hi my name is Michael Sproul I work at
 

00:00:07.290 --> 00:00:09.560 align:start position:0%
hi my name is Michael Sproul I work at
Sigma<00:00:07.710><c> Prime</c><00:00:08.100><c> in</c><00:00:08.400><c> Australia</c><00:00:08.969><c> all</c><00:00:09.270><c> that</c>

00:00:09.560 --> 00:00:09.570 align:start position:0%
Sigma Prime in Australia all that
 

00:00:09.570 --> 00:00:12.500 align:start position:0%
Sigma Prime in Australia all that
distance<00:00:10.080><c> away</c><00:00:10.440><c> on</c><00:00:11.250><c> the</c><00:00:11.460><c> lighthouse</c><00:00:12.030><c> f2</c>

00:00:12.500 --> 00:00:12.510 align:start position:0%
distance away on the lighthouse f2
 

00:00:12.510 --> 00:00:13.879 align:start position:0%
distance away on the lighthouse f2
client<00:00:12.870><c> and</c><00:00:13.019><c> today</c><00:00:13.410><c> I'm</c><00:00:13.530><c> gonna</c><00:00:13.650><c> be</c><00:00:13.769><c> talking</c>

00:00:13.879 --> 00:00:13.889 align:start position:0%
client and today I'm gonna be talking
 

00:00:13.889 --> 00:00:18.740 align:start position:0%
client and today I'm gonna be talking
about<00:00:14.070><c> optimizing</c><00:00:14.730><c> aetherium</c><00:00:15.389><c> -</c><00:00:17.210><c> so</c><00:00:18.210><c> with</c>

00:00:18.740 --> 00:00:18.750 align:start position:0%
about optimizing aetherium - so with
 

00:00:18.750 --> 00:00:21.439 align:start position:0%
about optimizing aetherium - so with
aetherium<00:00:19.050><c> -</c><00:00:19.380><c> we</c><00:00:19.710><c> have</c><00:00:19.920><c> the</c><00:00:20.360><c> benefit</c><00:00:21.360><c> of</c>

00:00:21.439 --> 00:00:21.449 align:start position:0%
aetherium - we have the benefit of
 

00:00:21.449 --> 00:00:23.810 align:start position:0%
aetherium - we have the benefit of
having<00:00:21.600><c> a</c><00:00:21.810><c> nice</c><00:00:22.160><c> executable</c><00:00:23.160><c> specification</c>

00:00:23.810 --> 00:00:23.820 align:start position:0%
having a nice executable specification
 

00:00:23.820 --> 00:00:26.420 align:start position:0%
having a nice executable specification
it's<00:00:24.359><c> written</c><00:00:24.600><c> in</c><00:00:24.720><c> Python</c><00:00:25.170><c> and</c><00:00:25.410><c> it's</c><00:00:26.220><c> written</c>

00:00:26.420 --> 00:00:26.430 align:start position:0%
it's written in Python and it's written
 

00:00:26.430 --> 00:00:28.820 align:start position:0%
it's written in Python and it's written
with<00:00:26.550><c> a</c><00:00:26.670><c> focus</c><00:00:27.029><c> on</c><00:00:27.180><c> being</c><00:00:27.510><c> very</c><00:00:27.869><c> clear</c><00:00:28.199><c> very</c>

00:00:28.820 --> 00:00:28.830 align:start position:0%
with a focus on being very clear very
 

00:00:28.830 --> 00:00:30.470 align:start position:0%
with a focus on being very clear very
readable

00:00:30.470 --> 00:00:30.480 align:start position:0%
readable
 

00:00:30.480 --> 00:00:32.659 align:start position:0%
readable
now<00:00:31.170><c> with</c><00:00:31.350><c> lighthouse</c><00:00:31.710><c> our</c><00:00:31.980><c> implementation</c>

00:00:32.659 --> 00:00:32.669 align:start position:0%
now with lighthouse our implementation
 

00:00:32.669 --> 00:00:34.910 align:start position:0%
now with lighthouse our implementation
is<00:00:32.850><c> in</c><00:00:33.059><c> rust</c><00:00:33.360><c> and</c><00:00:33.690><c> we</c><00:00:34.050><c> have</c><00:00:34.170><c> a</c><00:00:34.199><c> focus</c><00:00:34.559><c> on</c><00:00:34.710><c> being</c>

00:00:34.910 --> 00:00:34.920 align:start position:0%
is in rust and we have a focus on being
 

00:00:34.920 --> 00:00:37.939 align:start position:0%
is in rust and we have a focus on being
fast<00:00:35.340><c> and</c><00:00:35.699><c> secure</c><00:00:35.940><c> which</c><00:00:36.839><c> you</c><00:00:37.379><c> know</c><00:00:37.500><c> we</c><00:00:37.800><c> also</c>

00:00:37.939 --> 00:00:37.949 align:start position:0%
fast and secure which you know we also
 

00:00:37.949 --> 00:00:39.680 align:start position:0%
fast and secure which you know we also
want<00:00:38.190><c> to</c><00:00:38.220><c> be</c><00:00:38.309><c> readable</c><00:00:38.580><c> but</c><00:00:38.940><c> most</c><00:00:39.360><c> of</c><00:00:39.449><c> all</c><00:00:39.540><c> we</c>

00:00:39.680 --> 00:00:39.690 align:start position:0%
want to be readable but most of all we
 

00:00:39.690 --> 00:00:42.049 align:start position:0%
want to be readable but most of all we
want<00:00:39.720><c> to</c><00:00:39.900><c> be</c><00:00:39.960><c> secure</c><00:00:40.470><c> and</c><00:00:40.729><c> performance</c><00:00:41.729><c> also</c>

00:00:42.049 --> 00:00:42.059 align:start position:0%
want to be secure and performance also
 

00:00:42.059 --> 00:00:43.399 align:start position:0%
want to be secure and performance also
helps<00:00:42.269><c> with</c><00:00:42.360><c> security</c><00:00:42.809><c> because</c><00:00:43.019><c> it</c><00:00:43.140><c> helps</c><00:00:43.350><c> us</c>

00:00:43.399 --> 00:00:43.409 align:start position:0%
helps with security because it helps us
 

00:00:43.409 --> 00:00:46.310 align:start position:0%
helps with security because it helps us
avoid<00:00:43.650><c> denial</c><00:00:44.220><c> of</c><00:00:44.280><c> service</c><00:00:44.549><c> attacks</c><00:00:45.110><c> so</c><00:00:46.110><c> we're</c>

00:00:46.310 --> 00:00:46.320 align:start position:0%
avoid denial of service attacks so we're
 

00:00:46.320 --> 00:00:47.990 align:start position:0%
avoid denial of service attacks so we're
the<00:00:46.440><c> spec</c><00:00:46.739><c> might</c><00:00:47.010><c> prioritize</c><00:00:47.549><c> readability</c>

00:00:47.990 --> 00:00:48.000 align:start position:0%
the spec might prioritize readability
 

00:00:48.000 --> 00:00:50.060 align:start position:0%
the spec might prioritize readability
and<00:00:48.210><c> use</c><00:00:48.600><c> some</c><00:00:48.809><c> quadratic</c><00:00:49.320><c> time</c><00:00:49.500><c> algorithms</c>

00:00:50.060 --> 00:00:50.070 align:start position:0%
and use some quadratic time algorithms
 

00:00:50.070 --> 00:00:52.070 align:start position:0%
and use some quadratic time algorithms
in<00:00:50.220><c> lighthouse</c><00:00:51.000><c> and</c><00:00:51.299><c> in</c><00:00:51.479><c> most</c><00:00:51.720><c> death</c><00:00:51.930><c> to</c>

00:00:52.070 --> 00:00:52.080 align:start position:0%
in lighthouse and in most death to
 

00:00:52.080 --> 00:00:53.329 align:start position:0%
in lighthouse and in most death to
clients<00:00:52.440><c> you</c><00:00:52.470><c> really</c><00:00:52.769><c> want</c><00:00:52.920><c> to</c><00:00:52.979><c> make</c><00:00:53.100><c> sure</c>

00:00:53.329 --> 00:00:53.339 align:start position:0%
clients you really want to make sure
 

00:00:53.339 --> 00:00:55.399 align:start position:0%
clients you really want to make sure
that<00:00:53.879><c> you're</c><00:00:54.030><c> running</c><00:00:54.120><c> quickly</c><00:00:54.479><c> and</c><00:00:54.750><c> using</c>

00:00:55.399 --> 00:00:55.409 align:start position:0%
that you're running quickly and using
 

00:00:55.409 --> 00:00:57.530 align:start position:0%
that you're running quickly and using
linear<00:00:55.710><c> time</c><00:00:56.030><c> algorithms</c><00:00:57.030><c> are</c><00:00:57.180><c> pretty</c><00:00:57.360><c> close</c>

00:00:57.530 --> 00:00:57.540 align:start position:0%
linear time algorithms are pretty close
 

00:00:57.540 --> 00:00:59.240 align:start position:0%
linear time algorithms are pretty close
to<00:00:57.720><c> that</c><00:00:57.750><c> particularly</c><00:00:58.530><c> over</c><00:00:58.860><c> the</c><00:00:58.949><c> set</c><00:00:59.129><c> of</c>

00:00:59.240 --> 00:00:59.250 align:start position:0%
to that particularly over the set of
 

00:00:59.250 --> 00:01:00.859 align:start position:0%
to that particularly over the set of
validators<00:00:59.699><c> which</c><00:00:59.879><c> could</c><00:01:00.089><c> be</c><00:01:00.210><c> you</c><00:01:00.540><c> know</c><00:01:00.629><c> up</c><00:01:00.839><c> to</c>

00:01:00.859 --> 00:01:00.869 align:start position:0%
validators which could be you know up to
 

00:01:00.869 --> 00:01:05.020 align:start position:0%
validators which could be you know up to
4<00:01:01.290><c> million</c><00:01:01.500><c> validators</c><00:01:02.040><c> you</c><00:01:02.250><c> know</c><00:01:02.369><c> in</c><00:01:03.180><c> a</c><00:01:03.299><c> list</c>

00:01:05.020 --> 00:01:05.030 align:start position:0%
4 million validators you know in a list
 

00:01:05.030 --> 00:01:08.270 align:start position:0%
4 million validators you know in a list
so<00:01:06.030><c> first</c><00:01:06.960><c> of</c><00:01:07.080><c> all</c><00:01:07.170><c> one</c><00:01:07.409><c> example</c><00:01:07.770><c> of</c><00:01:07.979><c> where</c><00:01:08.159><c> the</c>

00:01:08.270 --> 00:01:08.280 align:start position:0%
so first of all one example of where the
 

00:01:08.280 --> 00:01:10.639 align:start position:0%
so first of all one example of where the
spec<00:01:08.640><c> is</c><00:01:08.939><c> slightly</c><00:01:09.689><c> inefficient</c><00:01:10.289><c> in</c><00:01:10.439><c> how</c><00:01:10.590><c> it</c>

00:01:10.639 --> 00:01:10.649 align:start position:0%
spec is slightly inefficient in how it
 

00:01:10.649 --> 00:01:12.859 align:start position:0%
spec is slightly inefficient in how it
phrases<00:01:11.609><c> things</c><00:01:11.820><c> is</c><00:01:12.000><c> the</c><00:01:12.180><c> shuffling</c><00:01:12.689><c> of</c>

00:01:12.859 --> 00:01:12.869 align:start position:0%
phrases things is the shuffling of
 

00:01:12.869 --> 00:01:16.429 align:start position:0%
phrases things is the shuffling of
validators<00:01:14.329><c> so</c><00:01:15.329><c> we</c><00:01:15.479><c> use</c><00:01:15.630><c> this</c><00:01:15.750><c> one</c><00:01:16.049><c> at</c><00:01:16.170><c> a</c><00:01:16.229><c> time</c>

00:01:16.429 --> 00:01:16.439 align:start position:0%
validators so we use this one at a time
 

00:01:16.439 --> 00:01:18.889 align:start position:0%
validators so we use this one at a time
sort<00:01:17.219><c> of</c><00:01:17.280><c> shuffling</c><00:01:17.729><c> in</c><00:01:17.939><c> the</c><00:01:18.030><c> spec</c><00:01:18.270><c> to</c><00:01:18.450><c> swap</c><00:01:18.750><c> or</c>

00:01:18.889 --> 00:01:18.899 align:start position:0%
sort of shuffling in the spec to swap or
 

00:01:18.899 --> 00:01:21.560 align:start position:0%
sort of shuffling in the spec to swap or
not<00:01:19.020><c> shuffling</c><00:01:19.469><c> and</c><00:01:19.619><c> the</c><00:01:20.549><c> spec</c><00:01:20.789><c> says</c><00:01:21.119><c> you</c><00:01:21.450><c> know</c>

00:01:21.560 --> 00:01:21.570 align:start position:0%
not shuffling and the spec says you know
 

00:01:21.570 --> 00:01:23.810 align:start position:0%
not shuffling and the spec says you know
for<00:01:21.780><c> each</c><00:01:21.869><c> index</c><00:01:22.320><c> which</c><00:01:22.799><c> index</c><00:01:23.310><c> does</c><00:01:23.490><c> this</c><00:01:23.609><c> get</c>

00:01:23.810 --> 00:01:23.820 align:start position:0%
for each index which index does this get
 

00:01:23.820 --> 00:01:25.730 align:start position:0%
for each index which index does this get
shuffled<00:01:24.030><c> to</c><00:01:24.299><c> and</c><00:01:24.450><c> it</c><00:01:24.539><c> does</c><00:01:24.689><c> H</c><00:01:24.929><c> index</c><00:01:25.350><c> one</c><00:01:25.560><c> at</c><00:01:25.679><c> a</c>

00:01:25.730 --> 00:01:25.740 align:start position:0%
shuffled to and it does H index one at a
 

00:01:25.740 --> 00:01:29.080 align:start position:0%
shuffled to and it does H index one at a
time<00:01:26.119><c> and</c><00:01:27.119><c> it</c><00:01:27.659><c> also</c><00:01:27.810><c> does</c><00:01:28.109><c> this</c><00:01:28.259><c> thing</c><00:01:28.530><c> where</c>

00:01:29.080 --> 00:01:29.090 align:start position:0%
time and it also does this thing where
 

00:01:29.090 --> 00:01:32.539 align:start position:0%
time and it also does this thing where
it<00:01:30.090><c> will</c><00:01:30.299><c> extract</c><00:01:30.750><c> committees</c><00:01:31.289><c> on</c><00:01:31.590><c> demand</c><00:01:32.310><c> so</c>

00:01:32.539 --> 00:01:32.549 align:start position:0%
it will extract committees on demand so
 

00:01:32.549 --> 00:01:34.219 align:start position:0%
it will extract committees on demand so
if<00:01:32.729><c> you</c><00:01:32.850><c> get</c><00:01:32.969><c> an</c><00:01:33.060><c> attestation</c><00:01:33.630><c> from</c><00:01:34.140><c> the</c>

00:01:34.219 --> 00:01:34.229 align:start position:0%
if you get an attestation from the
 

00:01:34.229 --> 00:01:36.020 align:start position:0%
if you get an attestation from the
network<00:01:34.530><c> and</c><00:01:34.799><c> you</c><00:01:34.829><c> need</c><00:01:35.070><c> to</c><00:01:35.159><c> know</c><00:01:35.310><c> well</c><00:01:35.789><c> who</c>

00:01:36.020 --> 00:01:36.030 align:start position:0%
network and you need to know well who
 

00:01:36.030 --> 00:01:38.270 align:start position:0%
network and you need to know well who
the<00:01:36.179><c> validate</c><00:01:36.539><c> is</c><00:01:36.659><c> in</c><00:01:36.840><c> this</c><00:01:37.219><c> committee</c><00:01:38.219><c> for</c>

00:01:38.270 --> 00:01:38.280 align:start position:0%
the validate is in this committee for
 

00:01:38.280 --> 00:01:39.950 align:start position:0%
the validate is in this committee for
this<00:01:38.520><c> attestation</c><00:01:38.939><c> it'll</c><00:01:39.390><c> compute</c><00:01:39.810><c> the</c>

00:01:39.950 --> 00:01:39.960 align:start position:0%
this attestation it'll compute the
 

00:01:39.960 --> 00:01:42.169 align:start position:0%
this attestation it'll compute the
shuffling<00:01:40.380><c> and</c><00:01:40.590><c> then</c><00:01:41.310><c> extract</c><00:01:41.850><c> the</c><00:01:41.939><c> Committee</c>

00:01:42.169 --> 00:01:42.179 align:start position:0%
shuffling and then extract the Committee
 

00:01:42.179 --> 00:01:44.029 align:start position:0%
shuffling and then extract the Committee
on<00:01:42.359><c> demand</c><00:01:43.020><c> and</c><00:01:43.200><c> then</c><00:01:43.320><c> throw</c><00:01:43.560><c> it</c><00:01:43.649><c> away</c><00:01:43.740><c> and</c>

00:01:44.029 --> 00:01:44.039 align:start position:0%
on demand and then throw it away and
 

00:01:44.039 --> 00:01:45.319 align:start position:0%
on demand and then throw it away and
recompute<00:01:44.460><c> it</c><00:01:44.640><c> when</c><00:01:44.909><c> you</c><00:01:44.999><c> get</c><00:01:45.119><c> another</c>

00:01:45.319 --> 00:01:45.329 align:start position:0%
recompute it when you get another
 

00:01:45.329 --> 00:01:47.660 align:start position:0%
recompute it when you get another
attestation<00:01:45.749><c> for</c><00:01:46.079><c> the</c><00:01:46.140><c> same</c><00:01:46.289><c> committee</c><00:01:46.670><c> which</c>

00:01:47.660 --> 00:01:47.670 align:start position:0%
attestation for the same committee which
 

00:01:47.670 --> 00:01:50.809 align:start position:0%
attestation for the same committee which
is<00:01:47.700><c> not</c><00:01:47.969><c> so</c><00:01:48.119><c> efficient</c><00:01:48.479><c> so</c><00:01:49.369><c> why</c><00:01:50.369><c> not</c><00:01:50.520><c> just</c>

00:01:50.809 --> 00:01:50.819 align:start position:0%
is not so efficient so why not just
 

00:01:50.819 --> 00:01:53.209 align:start position:0%
is not so efficient so why not just
shuffle<00:01:51.359><c> all</c><00:01:51.659><c> the</c><00:01:51.869><c> validators</c><00:01:52.319><c> once</c><00:01:52.590><c> at</c><00:01:53.100><c> the</c>

00:01:53.209 --> 00:01:53.219 align:start position:0%
shuffle all the validators once at the
 

00:01:53.219 --> 00:01:55.429 align:start position:0%
shuffle all the validators once at the
beginning<00:01:53.310><c> of</c><00:01:53.520><c> the</c><00:01:53.640><c> epoch</c><00:01:54.200><c> cash</c><00:01:55.200><c> that</c>

00:01:55.429 --> 00:01:55.439 align:start position:0%
beginning of the epoch cash that
 

00:01:55.439 --> 00:01:56.899 align:start position:0%
beginning of the epoch cash that
shuffling<00:01:55.890><c> and</c><00:01:56.069><c> then</c><00:01:56.219><c> read</c><00:01:56.429><c> the</c><00:01:56.579><c> committees</c>

00:01:56.899 --> 00:01:56.909 align:start position:0%
shuffling and then read the committees
 

00:01:56.909 --> 00:01:59.239 align:start position:0%
shuffling and then read the committees
off<00:01:57.060><c> that</c><00:01:57.240><c> on</c><00:01:57.420><c> demand</c><00:01:57.600><c> as</c><00:01:57.899><c> you</c><00:01:58.049><c> need</c><00:01:58.200><c> to</c><00:01:58.249><c> and</c>

00:01:59.239 --> 00:01:59.249 align:start position:0%
off that on demand as you need to and
 

00:01:59.249 --> 00:02:01.700 align:start position:0%
off that on demand as you need to and
that's<00:01:59.399><c> exactly</c><00:01:59.609><c> what</c><00:01:59.850><c> we</c><00:01:59.939><c> do</c><00:02:00.060><c> and</c><00:02:00.420><c> we</c><00:02:01.289><c> use</c><00:02:01.499><c> an</c>

00:02:01.700 --> 00:02:01.710 align:start position:0%
that's exactly what we do and we use an
 

00:02:01.710 --> 00:02:03.590 align:start position:0%
that's exactly what we do and we use an
algorithm<00:02:02.189><c> that</c><00:02:02.219><c> proto</c><00:02:02.789><c> lambda</c><00:02:03.179><c> came</c><00:02:03.329><c> up</c><00:02:03.450><c> with</c>

00:02:03.590 --> 00:02:03.600 align:start position:0%
algorithm that proto lambda came up with
 

00:02:03.600 --> 00:02:05.929 align:start position:0%
algorithm that proto lambda came up with
I<00:02:03.840><c> think</c><00:02:04.200><c> proto's</c><00:02:04.560><c> probably</c><00:02:04.889><c> here</c><00:02:05.009><c> somewhere</c>

00:02:05.929 --> 00:02:05.939 align:start position:0%
I think proto's probably here somewhere
 

00:02:05.939 --> 00:02:08.809 align:start position:0%
I think proto's probably here somewhere
and<00:02:06.299><c> it</c><00:02:06.479><c> ends</c><00:02:06.810><c> up</c><00:02:06.869><c> being</c><00:02:07.079><c> 250</c><00:02:08.039><c> times</c><00:02:08.280><c> faster</c>

00:02:08.809 --> 00:02:08.819 align:start position:0%
and it ends up being 250 times faster
 

00:02:08.819 --> 00:02:11.960 align:start position:0%
and it ends up being 250 times faster
than<00:02:09.360><c> shuffling</c><00:02:10.050><c> the</c><00:02:10.530><c> list</c><00:02:10.860><c> one</c><00:02:11.280><c> at</c><00:02:11.370><c> a</c><00:02:11.460><c> time</c><00:02:11.670><c> so</c>

00:02:11.960 --> 00:02:11.970 align:start position:0%
than shuffling the list one at a time so
 

00:02:11.970 --> 00:02:14.630 align:start position:0%
than shuffling the list one at a time so
250<00:02:12.659><c> times</c><00:02:12.870><c> speed</c><00:02:13.110><c> up</c><00:02:13.230><c> is</c><00:02:13.440><c> not</c><00:02:13.620><c> bad</c><00:02:13.799><c> and</c><00:02:14.010><c> then</c>

00:02:14.630 --> 00:02:14.640 align:start position:0%
250 times speed up is not bad and then
 

00:02:14.640 --> 00:02:16.940 align:start position:0%
250 times speed up is not bad and then
there's<00:02:14.970><c> also</c><00:02:15.209><c> the</c><00:02:15.629><c> benefit</c><00:02:15.989><c> of</c><00:02:16.049><c> not</c><00:02:16.440><c> redoing</c>

00:02:16.940 --> 00:02:16.950 align:start position:0%
there's also the benefit of not redoing
 

00:02:16.950 --> 00:02:17.809 align:start position:0%
there's also the benefit of not redoing
the<00:02:17.190><c> computation</c>

00:02:17.809 --> 00:02:17.819 align:start position:0%
the computation
 

00:02:17.819 --> 00:02:20.420 align:start position:0%
the computation
each<00:02:17.939><c> time</c><00:02:18.359><c> you</c><00:02:18.780><c> get</c><00:02:18.900><c> an</c><00:02:19.019><c> attestation</c><00:02:19.260><c> so</c><00:02:19.829><c> it's</c>

00:02:20.420 --> 00:02:20.430 align:start position:0%
each time you get an attestation so it's
 

00:02:20.430 --> 00:02:25.250 align:start position:0%
each time you get an attestation so it's
250<00:02:20.909><c> times</c><00:02:21.209><c> or</c><00:02:21.450><c> better</c><00:02:23.180><c> in</c><00:02:24.180><c> lighthouse</c><00:02:25.049><c> what</c>

00:02:25.250 --> 00:02:25.260 align:start position:0%
250 times or better in lighthouse what
 

00:02:25.260 --> 00:02:27.289 align:start position:0%
250 times or better in lighthouse what
this<00:02:25.379><c> looks</c><00:02:25.590><c> like</c><00:02:25.650><c> is</c><00:02:25.980><c> we</c><00:02:26.099><c> have</c><00:02:26.280><c> three</c><00:02:26.730><c> caches</c>

00:02:27.289 --> 00:02:27.299 align:start position:0%
this looks like is we have three caches
 

00:02:27.299 --> 00:02:30.110 align:start position:0%
this looks like is we have three caches
of<00:02:27.769><c> shuffled</c><00:02:28.769><c> validators</c><00:02:29.280><c> one</c><00:02:29.849><c> for</c><00:02:30.060><c> the</c>

00:02:30.110 --> 00:02:30.120 align:start position:0%
of shuffled validators one for the
 

00:02:30.120 --> 00:02:32.209 align:start position:0%
of shuffled validators one for the
previous<00:02:30.510><c> epoch</c><00:02:30.870><c> the</c><00:02:31.170><c> current</c><00:02:31.499><c> epoch</c><00:02:31.799><c> and</c><00:02:32.040><c> for</c>

00:02:32.209 --> 00:02:32.219 align:start position:0%
previous epoch the current epoch and for
 

00:02:32.219 --> 00:02:35.390 align:start position:0%
previous epoch the current epoch and for
the<00:02:32.280><c> next</c><00:02:32.549><c> epoch</c><00:02:32.790><c> and</c><00:02:33.469><c> when</c><00:02:34.469><c> we</c><00:02:34.560><c> hit</c><00:02:34.829><c> an</c><00:02:35.010><c> epoch</c>

00:02:35.390 --> 00:02:35.400 align:start position:0%
the next epoch and when we hit an epoch
 

00:02:35.400 --> 00:02:36.979 align:start position:0%
the next epoch and when we hit an epoch
transition<00:02:36.030><c> so</c><00:02:36.269><c> when</c><00:02:36.420><c> we</c><00:02:36.510><c> move</c><00:02:36.719><c> from</c><00:02:36.750><c> one</c>

00:02:36.979 --> 00:02:36.989 align:start position:0%
transition so when we move from one
 

00:02:36.989 --> 00:02:39.500 align:start position:0%
transition so when we move from one
epoch<00:02:37.379><c> to</c><00:02:37.530><c> the</c><00:02:37.620><c> next</c><00:02:37.950><c> we</c><00:02:38.609><c> update</c><00:02:38.790><c> these</c><00:02:39.180><c> caches</c>

00:02:39.500 --> 00:02:39.510 align:start position:0%
epoch to the next we update these caches
 

00:02:39.510 --> 00:02:42.920 align:start position:0%
epoch to the next we update these caches
by<00:02:39.989><c> shifting</c><00:02:40.980><c> them</c><00:02:41.129><c> along</c><00:02:41.400><c> by</c><00:02:41.579><c> one</c><00:02:41.790><c> and</c><00:02:42.030><c> then</c>

00:02:42.920 --> 00:02:42.930 align:start position:0%
by shifting them along by one and then
 

00:02:42.930 --> 00:02:45.740 align:start position:0%
by shifting them along by one and then
computing<00:02:43.859><c> from</c><00:02:44.040><c> scratch</c><00:02:44.340><c> the</c><00:02:44.909><c> shuffling</c><00:02:45.480><c> for</c>

00:02:45.740 --> 00:02:45.750 align:start position:0%
computing from scratch the shuffling for
 

00:02:45.750 --> 00:02:49.009 align:start position:0%
computing from scratch the shuffling for
the<00:02:45.810><c> next</c><00:02:46.079><c> epoch</c><00:02:46.200><c> and</c><00:02:47.299><c> this</c><00:02:48.299><c> works</c><00:02:48.569><c> perfectly</c>

00:02:49.009 --> 00:02:49.019 align:start position:0%
the next epoch and this works perfectly
 

00:02:49.019 --> 00:02:52.220 align:start position:0%
the next epoch and this works perfectly
so<00:02:49.950><c> long</c><00:02:50.219><c> as</c><00:02:50.370><c> you</c><00:02:50.639><c> do</c><00:02:50.819><c> know</c><00:02:51.030><c> the</c><00:02:51.239><c> seed</c><00:02:51.540><c> for</c><00:02:52.169><c> the</c>

00:02:52.220 --> 00:02:52.230 align:start position:0%
so long as you do know the seed for the
 

00:02:52.230 --> 00:02:55.159 align:start position:0%
so long as you do know the seed for the
next<00:02:52.260><c> epoch</c><00:02:52.709><c> and</c><00:02:52.980><c> by</c><00:02:53.909><c> design</c><00:02:54.090><c> in</c><00:02:54.419><c> a</c><00:02:54.510><c> stew</c><00:02:54.780><c> we</c>

00:02:55.159 --> 00:02:55.169 align:start position:0%
next epoch and by design in a stew we
 

00:02:55.169 --> 00:02:56.689 align:start position:0%
next epoch and by design in a stew we
are<00:02:55.290><c> meant</c><00:02:55.469><c> to</c><00:02:55.530><c> know</c><00:02:55.680><c> the</c><00:02:55.799><c> seed</c><00:02:56.010><c> for</c><00:02:56.459><c> the</c><00:02:56.519><c> next</c>

00:02:56.689 --> 00:02:56.699 align:start position:0%
are meant to know the seed for the next
 

00:02:56.699 --> 00:02:59.479 align:start position:0%
are meant to know the seed for the next
epoch<00:02:56.819><c> so</c><00:02:57.000><c> when</c><00:02:57.689><c> we're</c><00:02:57.840><c> transitioning</c><00:02:58.409><c> from</c><00:02:58.769><c> B</c>

00:02:59.479 --> 00:02:59.489 align:start position:0%
epoch so when we're transitioning from B
 

00:02:59.489 --> 00:03:02.300 align:start position:0%
epoch so when we're transitioning from B
to<00:02:59.519><c> C</c><00:02:59.840><c> into</c><00:03:00.840><c> the</c><00:03:01.049><c> current</c><00:03:01.319><c> epoch</c><00:03:01.560><c> we</c><00:03:01.919><c> already</c>

00:03:02.300 --> 00:03:02.310 align:start position:0%
to C into the current epoch we already
 

00:03:02.310 --> 00:03:04.909 align:start position:0%
to C into the current epoch we already
know<00:03:02.489><c> the</c><00:03:03.090><c> round</c><00:03:03.540><c> our</c><00:03:03.689><c> mix</c><00:03:03.930><c> and</c><00:03:04.169><c> the</c><00:03:04.290><c> seed</c><00:03:04.530><c> for</c>

00:03:04.909 --> 00:03:04.919 align:start position:0%
know the round our mix and the seed for
 

00:03:04.919 --> 00:03:06.439 align:start position:0%
know the round our mix and the seed for
the<00:03:05.010><c> next</c><00:03:05.250><c> epoch</c><00:03:05.370><c> and</c><00:03:05.699><c> we're</c><00:03:05.879><c> able</c><00:03:06.120><c> to</c><00:03:06.180><c> compute</c>

00:03:06.439 --> 00:03:06.449 align:start position:0%
the next epoch and we're able to compute
 

00:03:06.449 --> 00:03:09.020 align:start position:0%
the next epoch and we're able to compute
that<00:03:06.659><c> shuffling</c><00:03:07.250><c> at</c><00:03:08.250><c> least</c><00:03:08.489><c> that's</c><00:03:08.699><c> the</c><00:03:08.790><c> case</c>

00:03:09.020 --> 00:03:09.030 align:start position:0%
that shuffling at least that's the case
 

00:03:09.030 --> 00:03:11.780 align:start position:0%
that shuffling at least that's the case
with<00:03:09.510><c> the</c><00:03:09.599><c> spec</c><00:03:09.840><c> today</c><00:03:10.549><c> when</c><00:03:11.549><c> we</c><00:03:11.669><c> were</c>

00:03:11.780 --> 00:03:11.790 align:start position:0%
with the spec today when we were
 

00:03:11.790 --> 00:03:15.080 align:start position:0%
with the spec today when we were
implementing<00:03:12.530><c> V</c><00:03:13.530><c> 0.8</c><00:03:14.250><c> of</c><00:03:14.459><c> the</c><00:03:14.609><c> spec</c><00:03:14.849><c> we</c>

00:03:15.080 --> 00:03:15.090 align:start position:0%
implementing V 0.8 of the spec we
 

00:03:15.090 --> 00:03:16.879 align:start position:0%
implementing V 0.8 of the spec we
noticed<00:03:15.599><c> that</c><00:03:15.750><c> our</c><00:03:15.870><c> next</c><00:03:16.319><c> epoch</c><00:03:16.620><c> cache</c>

00:03:16.879 --> 00:03:16.889 align:start position:0%
noticed that our next epoch cache
 

00:03:16.889 --> 00:03:18.979 align:start position:0%
noticed that our next epoch cache
actually<00:03:17.430><c> broke</c><00:03:17.730><c> and</c><00:03:18.239><c> we</c><00:03:18.419><c> were</c><00:03:18.510><c> going</c><00:03:18.659><c> oh</c><00:03:18.810><c> this</c>

00:03:18.979 --> 00:03:18.989 align:start position:0%
actually broke and we were going oh this
 

00:03:18.989 --> 00:03:20.959 align:start position:0%
actually broke and we were going oh this
is<00:03:19.109><c> weird</c><00:03:19.319><c> like</c><00:03:19.590><c> maybe</c><00:03:19.859><c> you</c><00:03:20.579><c> know</c><00:03:20.669><c> maybe</c><00:03:20.790><c> the</c>

00:03:20.959 --> 00:03:20.969 align:start position:0%
is weird like maybe you know maybe the
 

00:03:20.969 --> 00:03:23.509 align:start position:0%
is weird like maybe you know maybe the
spec<00:03:21.239><c> isn't</c><00:03:21.810><c> meant</c><00:03:21.989><c> to</c><00:03:22.049><c> be</c><00:03:22.109><c> like</c><00:03:22.349><c> this</c><00:03:22.650><c> and</c><00:03:23.430><c> we</c>

00:03:23.509 --> 00:03:23.519 align:start position:0%
spec isn't meant to be like this and we
 

00:03:23.519 --> 00:03:24.800 align:start position:0%
spec isn't meant to be like this and we
went<00:03:23.639><c> digging</c><00:03:23.849><c> through</c><00:03:24.120><c> some</c><00:03:24.299><c> Docs</c><00:03:24.540><c> and</c><00:03:24.750><c> we</c>

00:03:24.800 --> 00:03:24.810 align:start position:0%
went digging through some Docs and we
 

00:03:24.810 --> 00:03:25.999 align:start position:0%
went digging through some Docs and we
were<00:03:24.900><c> going</c><00:03:25.109><c> oh</c><00:03:25.169><c> this</c><00:03:25.259><c> is</c><00:03:25.379><c> really</c><00:03:25.620><c> strange</c><00:03:25.859><c> you</c>

00:03:25.999 --> 00:03:26.009 align:start position:0%
were going oh this is really strange you
 

00:03:26.009 --> 00:03:28.069 align:start position:0%
were going oh this is really strange you
know<00:03:26.159><c> the</c><00:03:26.280><c> random</c><00:03:26.549><c> mix</c><00:03:26.759><c> is</c><00:03:26.879><c> updating</c><00:03:27.449><c> right</c>

00:03:28.069 --> 00:03:28.079 align:start position:0%
know the random mix is updating right
 

00:03:28.079 --> 00:03:30.649 align:start position:0%
know the random mix is updating right
till<00:03:28.379><c> the</c><00:03:28.409><c> red</c><00:03:28.799><c> arrow</c><00:03:29.040><c> just</c><00:03:29.819><c> before</c><00:03:30.269><c> the</c><00:03:30.419><c> start</c>

00:03:30.649 --> 00:03:30.659 align:start position:0%
till the red arrow just before the start
 

00:03:30.659 --> 00:03:33.259 align:start position:0%
till the red arrow just before the start
of<00:03:30.810><c> the</c><00:03:30.959><c> next</c><00:03:31.079><c> epoch</c><00:03:31.609><c> which</c><00:03:32.609><c> means</c><00:03:32.909><c> that</c><00:03:33.150><c> the</c>

00:03:33.259 --> 00:03:33.269 align:start position:0%
of the next epoch which means that the
 

00:03:33.269 --> 00:03:34.759 align:start position:0%
of the next epoch which means that the
block<00:03:33.449><c> proposer</c><00:03:33.840><c> at</c><00:03:34.169><c> the</c><00:03:34.290><c> start</c><00:03:34.560><c> of</c><00:03:34.620><c> the</c>

00:03:34.759 --> 00:03:34.769 align:start position:0%
block proposer at the start of the
 

00:03:34.769 --> 00:03:36.979 align:start position:0%
block proposer at the start of the
current<00:03:35.069><c> epoch</c><00:03:35.310><c> here</c><00:03:35.579><c> has</c><00:03:36.150><c> less</c><00:03:36.509><c> than</c><00:03:36.540><c> once</c>

00:03:36.979 --> 00:03:36.989 align:start position:0%
current epoch here has less than once
 

00:03:36.989 --> 00:03:39.379 align:start position:0%
current epoch here has less than once
lot<00:03:37.409><c> of</c><00:03:37.680><c> notice</c><00:03:38.430><c> that</c><00:03:38.639><c> they</c><00:03:38.819><c> are</c><00:03:38.849><c> the</c><00:03:39.209><c> block</c>

00:03:39.379 --> 00:03:39.389 align:start position:0%
lot of notice that they are the block
 

00:03:39.389 --> 00:03:40.909 align:start position:0%
lot of notice that they are the block
proposer<00:03:39.720><c> so</c><00:03:40.079><c> you</c><00:03:40.470><c> know</c><00:03:40.590><c> they're</c><00:03:40.709><c> kind</c><00:03:40.859><c> of</c>

00:03:40.909 --> 00:03:40.919 align:start position:0%
proposer so you know they're kind of
 

00:03:40.919 --> 00:03:42.229 align:start position:0%
proposer so you know they're kind of
doing<00:03:41.069><c> their</c><00:03:41.280><c> epoch</c><00:03:41.549><c> transition</c><00:03:42.000><c> and</c><00:03:42.150><c> then</c>

00:03:42.229 --> 00:03:42.239 align:start position:0%
doing their epoch transition and then
 

00:03:42.239 --> 00:03:44.809 align:start position:0%
doing their epoch transition and then
they<00:03:42.329><c> going</c><00:03:42.540><c> oh</c><00:03:42.659><c> crap</c><00:03:43.109><c> I'm</c><00:03:43.319><c> the</c><00:03:43.590><c> I'm</c><00:03:44.489><c> the</c><00:03:44.639><c> block</c>

00:03:44.809 --> 00:03:44.819 align:start position:0%
they going oh crap I'm the I'm the block
 

00:03:44.819 --> 00:03:46.069 align:start position:0%
they going oh crap I'm the I'm the block
proposed<00:03:45.060><c> that</c><00:03:45.180><c> I</c><00:03:45.269><c> better</c><00:03:45.449><c> get</c><00:03:45.599><c> on</c><00:03:45.750><c> this</c><00:03:45.900><c> and</c>

00:03:46.069 --> 00:03:46.079 align:start position:0%
proposed that I better get on this and
 

00:03:46.079 --> 00:03:49.309 align:start position:0%
proposed that I better get on this and
propose<00:03:46.620><c> a</c><00:03:46.650><c> block</c><00:03:47.599><c> so</c><00:03:48.599><c> we</c><00:03:48.629><c> clarified</c><00:03:49.109><c> this</c>

00:03:49.309 --> 00:03:49.319 align:start position:0%
propose a block so we clarified this
 

00:03:49.319 --> 00:03:52.069 align:start position:0%
propose a block so we clarified this
with<00:03:49.949><c> the</c><00:03:50.220><c> spec</c><00:03:50.729><c> and</c><00:03:51.060><c> found</c><00:03:51.840><c> out</c><00:03:51.959><c> that</c>

00:03:52.069 --> 00:03:52.079 align:start position:0%
with the spec and found out that
 

00:03:52.079 --> 00:03:53.179 align:start position:0%
with the spec and found out that
actually<00:03:52.229><c> no</c><00:03:52.500><c> it's</c><00:03:52.620><c> not</c><00:03:52.799><c> meant</c><00:03:53.009><c> to</c><00:03:53.040><c> be</c><00:03:53.129><c> like</c>

00:03:53.179 --> 00:03:53.189 align:start position:0%
actually no it's not meant to be like
 

00:03:53.189 --> 00:03:56.330 align:start position:0%
actually no it's not meant to be like
this<00:03:53.459><c> and</c><00:03:53.720><c> really</c><00:03:54.720><c> we</c><00:03:55.229><c> should</c><00:03:55.470><c> be</c><00:03:55.650><c> looking</c><00:03:56.159><c> at</c>

00:03:56.330 --> 00:03:56.340 align:start position:0%
this and really we should be looking at
 

00:03:56.340 --> 00:03:59.210 align:start position:0%
this and really we should be looking at
the<00:03:56.729><c> the</c><00:03:57.659><c> read</c><00:03:57.840><c> a</c><00:03:57.870><c> mix</c><00:03:58.199><c> from</c><00:03:58.349><c> to</c><00:03:58.620><c> epochs</c><00:03:58.979><c> back</c>

00:03:59.210 --> 00:03:59.220 align:start position:0%
the the read a mix from to epochs back
 

00:03:59.220 --> 00:04:01.129 align:start position:0%
the the read a mix from to epochs back
so<00:03:59.759><c> where</c><00:04:00.000><c> the</c><00:04:00.090><c> green</c><00:04:00.299><c> arrow</c><00:04:00.509><c> is</c><00:04:00.719><c> there</c><00:04:00.959><c> and</c>

00:04:01.129 --> 00:04:01.139 align:start position:0%
so where the green arrow is there and
 

00:04:01.139 --> 00:04:04.339 align:start position:0%
so where the green arrow is there and
that<00:04:01.169><c> was</c><00:04:01.650><c> fixed</c><00:04:01.919><c> in</c><00:04:02.189><c> V</c><00:04:02.400><c> 0.8</c><00:04:03.000><c> 0.3</c><00:04:03.449><c> of</c><00:04:04.019><c> the</c><00:04:04.139><c> spec</c>

00:04:04.339 --> 00:04:04.349 align:start position:0%
that was fixed in V 0.8 0.3 of the spec
 

00:04:04.349 --> 00:04:07.429 align:start position:0%
that was fixed in V 0.8 0.3 of the spec
so<00:04:05.000><c> something</c><00:04:06.000><c> surprising</c><00:04:06.180><c> here</c><00:04:06.810><c> is</c><00:04:06.959><c> that</c><00:04:07.169><c> by</c>

00:04:07.429 --> 00:04:07.439 align:start position:0%
so something surprising here is that by
 

00:04:07.439 --> 00:04:09.709 align:start position:0%
so something surprising here is that by
implementing<00:04:07.949><c> an</c><00:04:08.280><c> optimization</c><00:04:09.060><c> it</c><00:04:09.239><c> actually</c>

00:04:09.709 --> 00:04:09.719 align:start position:0%
implementing an optimization it actually
 

00:04:09.719 --> 00:04:12.020 align:start position:0%
implementing an optimization it actually
allowed<00:04:09.959><c> us</c><00:04:09.989><c> to</c><00:04:10.169><c> discover</c><00:04:10.500><c> a</c><00:04:10.889><c> bug</c><00:04:11.370><c> in</c><00:04:11.609><c> the</c><00:04:11.790><c> spec</c>

00:04:12.020 --> 00:04:12.030 align:start position:0%
allowed us to discover a bug in the spec
 

00:04:12.030 --> 00:04:15.349 align:start position:0%
allowed us to discover a bug in the spec
and<00:04:12.919><c> I</c><00:04:13.919><c> think</c><00:04:14.250><c> this</c><00:04:14.430><c> speaks</c><00:04:14.579><c> to</c><00:04:14.909><c> something</c>

00:04:15.349 --> 00:04:15.359 align:start position:0%
and I think this speaks to something
 

00:04:15.359 --> 00:04:17.810 align:start position:0%
and I think this speaks to something
more<00:04:15.629><c> general</c><00:04:16.079><c> in</c><00:04:16.259><c> the</c><00:04:16.829><c> etherium</c><00:04:17.280><c> space</c><00:04:17.519><c> which</c>

00:04:17.810 --> 00:04:17.820 align:start position:0%
more general in the etherium space which
 

00:04:17.820 --> 00:04:19.520 align:start position:0%
more general in the etherium space which
is<00:04:18.000><c> that</c><00:04:18.329><c> by</c><00:04:18.449><c> having</c><00:04:18.479><c> a</c><00:04:18.870><c> diversity</c><00:04:19.289><c> of</c>

00:04:19.520 --> 00:04:19.530 align:start position:0%
is that by having a diversity of
 

00:04:19.530 --> 00:04:21.319 align:start position:0%
is that by having a diversity of
implementations<00:04:20.280><c> in</c><00:04:20.489><c> different</c><00:04:20.820><c> languages</c>

00:04:21.319 --> 00:04:21.329 align:start position:0%
implementations in different languages
 

00:04:21.329 --> 00:04:22.909 align:start position:0%
implementations in different languages
and<00:04:21.599><c> with</c><00:04:21.989><c> different</c><00:04:22.169><c> optimizations</c>

00:04:22.909 --> 00:04:22.919 align:start position:0%
and with different optimizations
 

00:04:22.919 --> 00:04:24.110 align:start position:0%
and with different optimizations
phrasing<00:04:23.370><c> the</c><00:04:23.400><c> same</c><00:04:23.669><c> thing</c><00:04:23.940><c> in</c><00:04:24.090><c> different</c>

00:04:24.110 --> 00:04:24.120 align:start position:0%
phrasing the same thing in different
 

00:04:24.120 --> 00:04:26.750 align:start position:0%
phrasing the same thing in different
ways<00:04:24.509><c> that</c><00:04:25.169><c> can</c><00:04:25.440><c> actually</c><00:04:25.620><c> lead</c><00:04:25.949><c> to</c><00:04:25.979><c> clarity</c>

00:04:26.750 --> 00:04:26.760 align:start position:0%
ways that can actually lead to clarity
 

00:04:26.760 --> 00:04:28.640 align:start position:0%
ways that can actually lead to clarity
of<00:04:26.969><c> the</c><00:04:27.449><c> specification</c><00:04:28.080><c> and</c><00:04:28.229><c> I</c><00:04:28.260><c> think</c><00:04:28.469><c> that's</c>

00:04:28.640 --> 00:04:28.650 align:start position:0%
of the specification and I think that's
 

00:04:28.650 --> 00:04:30.409 align:start position:0%
of the specification and I think that's
something<00:04:28.860><c> that's</c><00:04:29.130><c> really</c><00:04:29.520><c> important</c><00:04:30.300><c> and</c>

00:04:30.409 --> 00:04:30.419 align:start position:0%
something that's really important and
 

00:04:30.419 --> 00:04:31.790 align:start position:0%
something that's really important and
it's<00:04:30.570><c> a</c><00:04:30.630><c> good</c><00:04:30.750><c> way</c><00:04:30.900><c> to</c><00:04:30.930><c> design</c><00:04:31.320><c> so</c>

00:04:31.790 --> 00:04:31.800 align:start position:0%
it's a good way to design so
 

00:04:31.800 --> 00:04:36.770 align:start position:0%
it's a good way to design so
we're<00:04:34.340><c> let's</c><00:04:35.340><c> talk</c><00:04:35.520><c> a</c><00:04:35.550><c> bit</c><00:04:35.729><c> more</c><00:04:35.759><c> about</c><00:04:36.210><c> epoch</c>

00:04:36.770 --> 00:04:36.780 align:start position:0%
we're let's talk a bit more about epoch
 

00:04:36.780 --> 00:04:38.839 align:start position:0%
we're let's talk a bit more about epoch
processing<00:04:37.319><c> because</c><00:04:38.250><c> there's</c><00:04:38.430><c> a</c><00:04:38.490><c> few</c><00:04:38.669><c> more</c>

00:04:38.839 --> 00:04:38.849 align:start position:0%
processing because there's a few more
 

00:04:38.849 --> 00:04:40.309 align:start position:0%
processing because there's a few more
optimizations<00:04:39.599><c> that</c><00:04:39.750><c> we</c><00:04:39.810><c> do</c><00:04:39.930><c> around</c><00:04:40.199><c> this</c>

00:04:40.309 --> 00:04:40.319 align:start position:0%
optimizations that we do around this
 

00:04:40.319 --> 00:04:42.080 align:start position:0%
optimizations that we do around this
maybe<00:04:40.770><c> less</c><00:04:41.039><c> important</c><00:04:41.490><c> than</c><00:04:41.610><c> the</c><00:04:41.669><c> shuffling</c>

00:04:42.080 --> 00:04:42.090 align:start position:0%
maybe less important than the shuffling
 

00:04:42.090 --> 00:04:44.350 align:start position:0%
maybe less important than the shuffling
one<00:04:42.270><c> which</c><00:04:42.479><c> is</c><00:04:42.629><c> such</c><00:04:42.840><c> a</c><00:04:42.870><c> massive</c><00:04:43.139><c> speed</c><00:04:43.530><c> up</c>

00:04:44.350 --> 00:04:44.360 align:start position:0%
one which is such a massive speed up
 

00:04:44.360 --> 00:04:48.260 align:start position:0%
one which is such a massive speed up
with<00:04:45.360><c> the</c><00:04:45.479><c> epoch</c><00:04:45.750><c> processing</c><00:04:46.580><c> the</c><00:04:47.580><c> the</c><00:04:48.000><c> spec</c>

00:04:48.260 --> 00:04:48.270 align:start position:0%
with the epoch processing the the spec
 

00:04:48.270 --> 00:04:50.689 align:start position:0%
with the epoch processing the the spec
occasionally<00:04:49.139><c> will</c><00:04:49.289><c> iterate</c><00:04:49.470><c> over</c><00:04:49.889><c> lists</c><00:04:50.580><c> of</c>

00:04:50.689 --> 00:04:50.699 align:start position:0%
occasionally will iterate over lists of
 

00:04:50.699 --> 00:04:52.430 align:start position:0%
occasionally will iterate over lists of
added<00:04:50.970><c> stations</c><00:04:51.330><c> and</c><00:04:51.479><c> validators</c><00:04:51.930><c> kind</c><00:04:52.349><c> of</c>

00:04:52.430 --> 00:04:52.440 align:start position:0%
added stations and validators kind of
 

00:04:52.440 --> 00:04:55.700 align:start position:0%
added stations and validators kind of
redundantly<00:04:53.009><c> and</c><00:04:53.870><c> one</c><00:04:54.870><c> example</c><00:04:55.139><c> of</c><00:04:55.289><c> this</c><00:04:55.470><c> is</c>

00:04:55.700 --> 00:04:55.710 align:start position:0%
redundantly and one example of this is
 

00:04:55.710 --> 00:04:58.189 align:start position:0%
redundantly and one example of this is
when<00:04:56.069><c> you're</c><00:04:56.220><c> calculating</c><00:04:56.430><c> the</c><00:04:56.970><c> reward</c><00:04:57.870><c> for</c><00:04:58.139><c> a</c>

00:04:58.189 --> 00:04:58.199 align:start position:0%
when you're calculating the reward for a
 

00:04:58.199 --> 00:05:01.339 align:start position:0%
when you're calculating the reward for a
proposer<00:04:59.060><c> based</c><00:05:00.060><c> on</c><00:05:00.330><c> the</c><00:05:00.750><c> other</c><00:05:00.930><c> stations</c>

00:05:01.339 --> 00:05:01.349 align:start position:0%
proposer based on the other stations
 

00:05:01.349 --> 00:05:03.439 align:start position:0%
proposer based on the other stations
that<00:05:01.500><c> they've</c><00:05:01.650><c> included</c><00:05:01.830><c> in</c><00:05:02.250><c> their</c><00:05:02.370><c> blocks</c><00:05:02.639><c> it</c>

00:05:03.439 --> 00:05:03.449 align:start position:0%
that they've included in their blocks it
 

00:05:03.449 --> 00:05:07.040 align:start position:0%
that they've included in their blocks it
uses<00:05:03.810><c> time</c><00:05:04.169><c> o</c><00:05:04.500><c> V</c><00:05:05.190><c> times</c><00:05:05.759><c> a</c><00:05:06.000><c> so</c><00:05:06.509><c> it's</c><00:05:06.719><c> kind</c><00:05:06.900><c> of</c><00:05:06.960><c> a</c>

00:05:07.040 --> 00:05:07.050 align:start position:0%
uses time o V times a so it's kind of a
 

00:05:07.050 --> 00:05:08.540 align:start position:0%
uses time o V times a so it's kind of a
quadratic<00:05:07.409><c> u</c><00:05:07.650><c> time</c><00:05:07.860><c> where</c><00:05:08.099><c> V</c><00:05:08.250><c> is</c><00:05:08.280><c> the</c>

00:05:08.540 --> 00:05:08.550 align:start position:0%
quadratic u time where V is the
 

00:05:08.550 --> 00:05:10.100 align:start position:0%
quadratic u time where V is the
validators<00:05:09.030><c> and</c><00:05:09.210><c> a</c><00:05:09.330><c> is</c><00:05:09.479><c> the</c><00:05:09.629><c> pending</c><00:05:09.930><c> out</c><00:05:10.020><c> of</c>

00:05:10.100 --> 00:05:10.110 align:start position:0%
validators and a is the pending out of
 

00:05:10.110 --> 00:05:11.869 align:start position:0%
validators and a is the pending out of
stations<00:05:10.409><c> and</c><00:05:10.590><c> really</c><00:05:11.250><c> that</c><00:05:11.400><c> validators</c>

00:05:11.869 --> 00:05:11.879 align:start position:0%
stations and really that validators
 

00:05:11.879 --> 00:05:13.670 align:start position:0%
stations and really that validators
because<00:05:12.210><c> that</c><00:05:12.330><c> list</c><00:05:12.659><c> is</c><00:05:12.810><c> so</c><00:05:12.990><c> large</c><00:05:13.229><c> we</c><00:05:13.500><c> really</c>

00:05:13.670 --> 00:05:13.680 align:start position:0%
because that list is so large we really
 

00:05:13.680 --> 00:05:15.439 align:start position:0%
because that list is so large we really
don't<00:05:13.860><c> want</c><00:05:14.009><c> any</c><00:05:14.219><c> sort</c><00:05:14.580><c> of</c><00:05:14.610><c> quadratic</c><00:05:15.120><c> factor</c>

00:05:15.439 --> 00:05:15.449 align:start position:0%
don't want any sort of quadratic factor
 

00:05:15.449 --> 00:05:18.200 align:start position:0%
don't want any sort of quadratic factor
in<00:05:15.599><c> there</c><00:05:15.840><c> with</c><00:05:16.440><c> that</c><00:05:16.639><c> this</c><00:05:17.639><c> is</c><00:05:17.789><c> the</c><00:05:17.879><c> code</c><00:05:18.060><c> from</c>

00:05:18.200 --> 00:05:18.210 align:start position:0%
in there with that this is the code from
 

00:05:18.210 --> 00:05:19.550 align:start position:0%
in there with that this is the code from
the<00:05:18.270><c> spec</c><00:05:18.509><c> where</c><00:05:18.659><c> you</c><00:05:18.719><c> can</c><00:05:18.840><c> see</c><00:05:18.990><c> the</c><00:05:19.110><c> nested</c>

00:05:19.550 --> 00:05:19.560 align:start position:0%
the spec where you can see the nested
 

00:05:19.560 --> 00:05:21.709 align:start position:0%
the spec where you can see the nested
for-loops<00:05:20.520><c> giving</c><00:05:21.000><c> you</c><00:05:21.060><c> the</c><00:05:21.150><c> quadratic</c><00:05:21.539><c> time</c>

00:05:21.709 --> 00:05:21.719 align:start position:0%
for-loops giving you the quadratic time
 

00:05:21.719 --> 00:05:25.129 align:start position:0%
for-loops giving you the quadratic time
thing<00:05:21.960><c> so</c><00:05:22.169><c> there's</c><00:05:22.349><c> the</c><00:05:23.419><c> the</c><00:05:24.419><c> loop</c><00:05:24.629><c> over</c><00:05:24.780><c> the</c>

00:05:25.129 --> 00:05:25.139 align:start position:0%
thing so there's the the loop over the
 

00:05:25.139 --> 00:05:26.930 align:start position:0%
thing so there's the the loop over the
validators<00:05:26.129><c> and</c><00:05:26.310><c> then</c><00:05:26.430><c> the</c><00:05:26.520><c> loop</c><00:05:26.669><c> over</c><00:05:26.819><c> the</c>

00:05:26.930 --> 00:05:26.940 align:start position:0%
validators and then the loop over the
 

00:05:26.940 --> 00:05:30.619 align:start position:0%
validators and then the loop over the
other<00:05:27.120><c> stations</c><00:05:27.509><c> within</c><00:05:27.719><c> that</c><00:05:29.120><c> so</c><00:05:30.120><c> rather</c>

00:05:30.619 --> 00:05:30.629 align:start position:0%
other stations within that so rather
 

00:05:30.629 --> 00:05:32.450 align:start position:0%
other stations within that so rather
than<00:05:30.900><c> doing</c><00:05:31.050><c> that</c><00:05:31.289><c> quadratic</c><00:05:31.650><c> time</c><00:05:31.949><c> thing</c><00:05:32.250><c> in</c>

00:05:32.450 --> 00:05:32.460 align:start position:0%
than doing that quadratic time thing in
 

00:05:32.460 --> 00:05:34.189 align:start position:0%
than doing that quadratic time thing in
light<00:05:32.759><c> house</c><00:05:32.940><c> what</c><00:05:33.150><c> we</c><00:05:33.240><c> do</c><00:05:33.389><c> is</c><00:05:33.629><c> just</c><00:05:33.659><c> a</c><00:05:34.020><c> linear</c>

00:05:34.189 --> 00:05:34.199 align:start position:0%
light house what we do is just a linear
 

00:05:34.199 --> 00:05:37.159 align:start position:0%
light house what we do is just a linear
pass<00:05:34.620><c> over</c><00:05:35.460><c> the</c><00:05:35.610><c> over</c><00:05:36.479><c> the</c><00:05:36.569><c> validators</c><00:05:37.020><c> and</c>

00:05:37.159 --> 00:05:37.169 align:start position:0%
pass over the over the validators and
 

00:05:37.169 --> 00:05:39.379 align:start position:0%
pass over the over the validators and
the<00:05:37.259><c> attestation</c><00:05:37.590><c> so</c><00:05:38.039><c> we</c><00:05:38.699><c> do</c><00:05:38.819><c> it</c><00:05:38.909><c> in</c><00:05:39.029><c> three</c>

00:05:39.379 --> 00:05:39.389 align:start position:0%
the attestation so we do it in three
 

00:05:39.389 --> 00:05:41.029 align:start position:0%
the attestation so we do it in three
parts<00:05:39.810><c> we</c><00:05:39.960><c> first</c><00:05:40.199><c> go</c><00:05:40.380><c> over</c><00:05:40.409><c> the</c><00:05:40.620><c> validators</c>

00:05:41.029 --> 00:05:41.039 align:start position:0%
parts we first go over the validators
 

00:05:41.039 --> 00:05:42.769 align:start position:0%
parts we first go over the validators
get<00:05:41.219><c> some</c><00:05:41.550><c> basic</c><00:05:41.880><c> info</c><00:05:42.180><c> like</c><00:05:42.389><c> whether</c><00:05:42.599><c> they're</c>

00:05:42.769 --> 00:05:42.779 align:start position:0%
get some basic info like whether they're
 

00:05:42.779 --> 00:05:44.300 align:start position:0%
get some basic info like whether they're
active<00:05:42.960><c> in</c><00:05:43.229><c> the</c><00:05:43.289><c> current</c><00:05:43.560><c> epoch</c><00:05:43.830><c> things</c><00:05:44.190><c> like</c>

00:05:44.300 --> 00:05:44.310 align:start position:0%
active in the current epoch things like
 

00:05:44.310 --> 00:05:46.189 align:start position:0%
active in the current epoch things like
that<00:05:44.460><c> then</c><00:05:45.210><c> we</c><00:05:45.360><c> iterate</c><00:05:45.479><c> over</c><00:05:45.750><c> the</c><00:05:46.050><c> other</c>

00:05:46.189 --> 00:05:46.199 align:start position:0%
that then we iterate over the other
 

00:05:46.199 --> 00:05:48.860 align:start position:0%
that then we iterate over the other
stations<00:05:46.650><c> to</c><00:05:46.860><c> find</c><00:05:47.099><c> out</c><00:05:47.250><c> how</c><00:05:47.880><c> people</c><00:05:47.940><c> voted</c><00:05:48.690><c> in</c>

00:05:48.860 --> 00:05:48.870 align:start position:0%
stations to find out how people voted in
 

00:05:48.870 --> 00:05:50.990 align:start position:0%
stations to find out how people voted in
things<00:05:49.770><c> whether</c><00:05:50.009><c> they</c><00:05:50.159><c> voted</c><00:05:50.460><c> on</c><00:05:50.520><c> the</c><00:05:50.639><c> correct</c>

00:05:50.990 --> 00:05:51.000 align:start position:0%
things whether they voted on the correct
 

00:05:51.000 --> 00:05:54.019 align:start position:0%
things whether they voted on the correct
Kaspar<00:05:51.870><c> FFG</c><00:05:52.319><c> targets</c><00:05:52.830><c> and</c><00:05:53.009><c> sources</c><00:05:53.400><c> and</c><00:05:53.580><c> then</c>

00:05:54.019 --> 00:05:54.029 align:start position:0%
Kaspar FFG targets and sources and then
 

00:05:54.029 --> 00:05:56.180 align:start position:0%
Kaspar FFG targets and sources and then
we<00:05:54.120><c> do</c><00:05:54.240><c> one</c><00:05:54.479><c> final</c><00:05:54.750><c> pass</c><00:05:55.139><c> to</c><00:05:55.440><c> sum</c><00:05:55.710><c> up</c><00:05:55.889><c> some</c>

00:05:56.180 --> 00:05:56.190 align:start position:0%
we do one final pass to sum up some
 

00:05:56.190 --> 00:05:58.100 align:start position:0%
we do one final pass to sum up some
balances<00:05:56.699><c> so</c><00:05:57.029><c> different</c><00:05:57.389><c> types</c><00:05:57.599><c> of</c><00:05:57.779><c> total</c>

00:05:58.100 --> 00:05:58.110 align:start position:0%
balances so different types of total
 

00:05:58.110 --> 00:06:00.260 align:start position:0%
balances so different types of total
balances<00:05:58.560><c> for</c><00:05:58.740><c> validators</c><00:05:59.250><c> and</c><00:05:59.400><c> in</c><00:05:59.969><c> total</c>

00:06:00.260 --> 00:06:00.270 align:start position:0%
balances for validators and in total
 

00:06:00.270 --> 00:06:04.670 align:start position:0%
balances for validators and in total
that's<00:06:00.389><c> order</c><00:06:01.110><c> V</c><00:06:01.440><c> plus</c><00:06:01.680><c> a</c><00:06:01.949><c> time</c><00:06:02.849><c> and</c><00:06:03.259><c> the</c><00:06:04.259><c> sum</c>

00:06:04.670 --> 00:06:04.680 align:start position:0%
that's order V plus a time and the sum
 

00:06:04.680 --> 00:06:06.170 align:start position:0%
that's order V plus a time and the sum
of<00:06:04.710><c> the</c><00:06:04.830><c> total</c><00:06:04.979><c> balances</c><00:06:05.490><c> just</c><00:06:05.669><c> as</c><00:06:05.789><c> an</c><00:06:05.940><c> example</c>

00:06:06.170 --> 00:06:06.180 align:start position:0%
of the total balances just as an example
 

00:06:06.180 --> 00:06:09.680 align:start position:0%
of the total balances just as an example
these<00:06:07.050><c> are</c><00:06:07.110><c> the</c><00:06:07.490><c> totals</c><00:06:08.490><c> we</c><00:06:08.639><c> compute</c><00:06:09.000><c> so</c><00:06:09.240><c> the</c>

00:06:09.680 --> 00:06:09.690 align:start position:0%
these are the totals we compute so the
 

00:06:09.690 --> 00:06:12.559 align:start position:0%
these are the totals we compute so the
total<00:06:10.080><c> balance</c><00:06:10.229><c> of</c><00:06:10.590><c> all</c><00:06:10.830><c> the</c><00:06:10.949><c> people</c><00:06:11.250><c> who</c><00:06:12.240><c> were</c>

00:06:12.559 --> 00:06:12.569 align:start position:0%
total balance of all the people who were
 

00:06:12.569 --> 00:06:14.269 align:start position:0%
total balance of all the people who were
active<00:06:12.930><c> in</c><00:06:12.990><c> the</c><00:06:13.050><c> current</c><00:06:13.319><c> epoch</c><00:06:13.620><c> all</c><00:06:13.949><c> the</c>

00:06:14.269 --> 00:06:14.279 align:start position:0%
active in the current epoch all the
 

00:06:14.279 --> 00:06:17.029 align:start position:0%
active in the current epoch all the
validators<00:06:14.729><c> who</c><00:06:15.560><c> attested</c><00:06:16.560><c> in</c><00:06:16.650><c> the</c><00:06:16.770><c> current</c>

00:06:17.029 --> 00:06:17.039 align:start position:0%
validators who attested in the current
 

00:06:17.039 --> 00:06:18.709 align:start position:0%
validators who attested in the current
epoch<00:06:17.279><c> who</c><00:06:17.819><c> were</c><00:06:17.940><c> tested</c><00:06:18.300><c> to</c><00:06:18.389><c> the</c><00:06:18.479><c> correct</c>

00:06:18.709 --> 00:06:18.719 align:start position:0%
epoch who were tested to the correct
 

00:06:18.719 --> 00:06:23.659 align:start position:0%
epoch who were tested to the correct
target<00:06:18.990><c> etc</c><00:06:19.710><c> so</c><00:06:20.279><c> on</c><00:06:20.430><c> and</c><00:06:20.550><c> so</c><00:06:20.669><c> forth</c><00:06:22.099><c> as</c><00:06:23.099><c> I</c><00:06:23.490><c> said</c>

00:06:23.659 --> 00:06:23.669 align:start position:0%
target etc so on and so forth as I said
 

00:06:23.669 --> 00:06:25.909 align:start position:0%
target etc so on and so forth as I said
before<00:06:23.930><c> usually</c><00:06:24.930><c> when</c><00:06:25.379><c> you</c><00:06:25.469><c> implement</c><00:06:25.680><c> an</c>

00:06:25.909 --> 00:06:25.919 align:start position:0%
before usually when you implement an
 

00:06:25.919 --> 00:06:27.619 align:start position:0%
before usually when you implement an
optimization<00:06:26.610><c> you</c><00:06:26.879><c> run</c><00:06:27.060><c> the</c><00:06:27.210><c> risk</c><00:06:27.419><c> of</c>

00:06:27.619 --> 00:06:27.629 align:start position:0%
optimization you run the risk of
 

00:06:27.629 --> 00:06:32.240 align:start position:0%
optimization you run the risk of
breaking<00:06:28.529><c> your</c><00:06:29.400><c> your</c><00:06:30.180><c> client</c><00:06:30.599><c> and</c><00:06:30.719><c> and</c><00:06:31.250><c> you</c>

00:06:32.240 --> 00:06:32.250 align:start position:0%
breaking your your client and and you
 

00:06:32.250 --> 00:06:34.070 align:start position:0%
breaking your your client and and you
know<00:06:32.370><c> running</c><00:06:32.759><c> afoul</c><00:06:33.090><c> of</c><00:06:33.389><c> what</c><00:06:33.539><c> the</c><00:06:33.629><c> spec</c><00:06:33.870><c> says</c>

00:06:34.070 --> 00:06:34.080 align:start position:0%
know running afoul of what the spec says
 

00:06:34.080 --> 00:06:37.550 align:start position:0%
know running afoul of what the spec says
you<00:06:34.259><c> should</c><00:06:34.440><c> be</c><00:06:34.529><c> doing</c><00:06:34.879><c> so</c><00:06:35.960><c> what</c><00:06:36.960><c> we</c><00:06:37.080><c> what</c><00:06:37.440><c> we</c>

00:06:37.550 --> 00:06:37.560 align:start position:0%
you should be doing so what we what we
 

00:06:37.560 --> 00:06:39.140 align:start position:0%
you should be doing so what we what we
really<00:06:37.800><c> need</c><00:06:37.949><c> to</c><00:06:37.979><c> do</c><00:06:38.159><c> is</c><00:06:38.370><c> when</c><00:06:38.550><c> we</c><00:06:38.639><c> implement</c>

00:06:39.140 --> 00:06:39.150 align:start position:0%
really need to do is when we implement
 

00:06:39.150 --> 00:06:41.480 align:start position:0%
really need to do is when we implement
an<00:06:39.240><c> optimization</c><00:06:39.810><c> we</c><00:06:39.930><c> need</c><00:06:40.110><c> to</c><00:06:40.490><c> guarantee</c>

00:06:41.480 --> 00:06:41.490 align:start position:0%
an optimization we need to guarantee
 

00:06:41.490 --> 00:06:43.159 align:start position:0%
an optimization we need to guarantee
that<00:06:41.940><c> it</c><00:06:42.060><c> has</c><00:06:42.210><c> the</c><00:06:42.389><c> correct</c><00:06:42.599><c> behavior</c><00:06:42.719><c> and</c>

00:06:43.159 --> 00:06:43.169 align:start position:0%
that it has the correct behavior and
 

00:06:43.169 --> 00:06:45.650 align:start position:0%
that it has the correct behavior and
isn't<00:06:43.979><c> going</c><00:06:44.130><c> to</c><00:06:44.190><c> break</c><00:06:44.339><c> out</c><00:06:44.460><c> by</c><00:06:44.580><c> it</c><00:06:44.639><c> so</c>

00:06:45.650 --> 00:06:45.660 align:start position:0%
isn't going to break out by it so
 

00:06:45.660 --> 00:06:47.600 align:start position:0%
isn't going to break out by it so
in<00:06:45.840><c> roughly</c><00:06:46.200><c> increasing</c><00:06:46.890><c> order</c><00:06:47.100><c> of</c><00:06:47.190><c> strength</c>

00:06:47.600 --> 00:06:47.610 align:start position:0%
in roughly increasing order of strength
 

00:06:47.610 --> 00:06:49.760 align:start position:0%
in roughly increasing order of strength
we've<00:06:48.270><c> got</c><00:06:48.480><c> you</c><00:06:48.780><c> know</c><00:06:48.900><c> looking</c><00:06:49.440><c> at</c><00:06:49.500><c> the</c><00:06:49.590><c> code</c>

00:06:49.760 --> 00:06:49.770 align:start position:0%
we've got you know looking at the code
 

00:06:49.770 --> 00:06:51.020 align:start position:0%
we've got you know looking at the code
looking<00:06:50.040><c> at</c><00:06:50.130><c> the</c><00:06:50.250><c> spec</c><00:06:50.610><c> looking</c><00:06:50.910><c> at</c><00:06:50.970><c> the</c>

00:06:51.020 --> 00:06:51.030 align:start position:0%
looking at the spec looking at the
 

00:06:51.030 --> 00:06:52.370 align:start position:0%
looking at the spec looking at the
optimized<00:06:51.390><c> version</c><00:06:51.600><c> and</c><00:06:51.930><c> just</c><00:06:52.110><c> kind</c><00:06:52.350><c> of</c>

00:06:52.370 --> 00:06:52.380 align:start position:0%
optimized version and just kind of
 

00:06:52.380 --> 00:06:54.440 align:start position:0%
optimized version and just kind of
rockin<00:06:53.130><c> that</c><00:06:53.250><c> they're</c><00:06:53.400><c> the</c><00:06:53.520><c> same</c><00:06:53.700><c> that's</c><00:06:54.240><c> the</c>

00:06:54.440 --> 00:06:54.450 align:start position:0%
rockin that they're the same that's the
 

00:06:54.450 --> 00:06:55.880 align:start position:0%
rockin that they're the same that's the
weakest<00:06:54.870><c> guarantee</c><00:06:55.350><c> you</c><00:06:55.470><c> can</c><00:06:55.620><c> do</c><00:06:55.740><c> because</c>

00:06:55.880 --> 00:06:55.890 align:start position:0%
weakest guarantee you can do because
 

00:06:55.890 --> 00:06:58.970 align:start position:0%
weakest guarantee you can do because
people<00:06:56.160><c> are</c><00:06:56.340><c> pretty</c><00:06:56.520><c> terrible</c><00:06:57.380><c> and</c><00:06:58.380><c> then</c>

00:06:58.970 --> 00:06:58.980 align:start position:0%
people are pretty terrible and then
 

00:06:58.980 --> 00:07:01.040 align:start position:0%
people are pretty terrible and then
moving<00:06:59.160><c> into</c><00:06:59.370><c> like</c><00:06:59.580><c> unit</c><00:07:00.000><c> tests</c><00:07:00.480><c> the</c><00:07:00.720><c> etherium</c>

00:07:01.040 --> 00:07:01.050 align:start position:0%
moving into like unit tests the etherium
 

00:07:01.050 --> 00:07:02.840 align:start position:0%
moving into like unit tests the etherium
foundations<00:07:01.530><c> test</c><00:07:01.860><c> vectors</c><00:07:02.280><c> which</c><00:07:02.520><c> have</c><00:07:02.670><c> been</c>

00:07:02.840 --> 00:07:02.850 align:start position:0%
foundations test vectors which have been
 

00:07:02.850 --> 00:07:06.920 align:start position:0%
foundations test vectors which have been
super<00:07:03.240><c> useful</c><00:07:03.560><c> and</c><00:07:04.560><c> then</c><00:07:05.400><c> into</c><00:07:05.730><c> fuzzing</c><00:07:06.360><c> so</c>

00:07:06.920 --> 00:07:06.930 align:start position:0%
super useful and then into fuzzing so
 

00:07:06.930 --> 00:07:08.300 align:start position:0%
super useful and then into fuzzing so
we've<00:07:07.110><c> been</c><00:07:07.260><c> doing</c><00:07:07.470><c> quite</c><00:07:07.650><c> a</c><00:07:07.740><c> bit</c><00:07:07.800><c> of</c><00:07:07.920><c> fuzzing</c>

00:07:08.300 --> 00:07:08.310 align:start position:0%
we've been doing quite a bit of fuzzing
 

00:07:08.310 --> 00:07:10.790 align:start position:0%
we've been doing quite a bit of fuzzing
on<00:07:08.460><c> lighthouse</c><00:07:08.850><c> both</c><00:07:09.540><c> crash</c><00:07:09.930><c> fuzzing</c><00:07:10.410><c> to</c><00:07:10.620><c> see</c>

00:07:10.790 --> 00:07:10.800 align:start position:0%
on lighthouse both crash fuzzing to see
 

00:07:10.800 --> 00:07:12.440 align:start position:0%
on lighthouse both crash fuzzing to see
you<00:07:11.130><c> know</c><00:07:11.220><c> make</c><00:07:11.460><c> sure</c><00:07:11.490><c> functions</c><00:07:12.000><c> never</c><00:07:12.210><c> crash</c>

00:07:12.440 --> 00:07:12.450 align:start position:0%
you know make sure functions never crash
 

00:07:12.450 --> 00:07:14.000 align:start position:0%
you know make sure functions never crash
-<00:07:12.690><c> regardless</c><00:07:13.350><c> of</c><00:07:13.440><c> what</c><00:07:13.530><c> inputs</c><00:07:13.800><c> you</c><00:07:13.890><c> give</c>

00:07:14.000 --> 00:07:14.010 align:start position:0%
- regardless of what inputs you give
 

00:07:14.010 --> 00:07:15.980 align:start position:0%
- regardless of what inputs you give
them<00:07:14.190><c> and</c><00:07:14.340><c> differential</c><00:07:15.090><c> fuzzing</c><00:07:15.480><c> comparing</c>

00:07:15.980 --> 00:07:15.990 align:start position:0%
them and differential fuzzing comparing
 

00:07:15.990 --> 00:07:18.080 align:start position:0%
them and differential fuzzing comparing
two<00:07:16.200><c> different</c><00:07:16.230><c> implementations</c><00:07:17.100><c> and</c><00:07:17.370><c> midis</c>

00:07:18.080 --> 00:07:18.090 align:start position:0%
two different implementations and midis
 

00:07:18.090 --> 00:07:20.000 align:start position:0%
two different implementations and midis
doing<00:07:18.330><c> more</c><00:07:18.510><c> work</c><00:07:18.660><c> along</c><00:07:18.990><c> those</c><00:07:19.170><c> lines</c><00:07:19.410><c> in</c><00:07:19.800><c> the</c>

00:07:20.000 --> 00:07:20.010 align:start position:0%
doing more work along those lines in the
 

00:07:20.010 --> 00:07:23.240 align:start position:0%
doing more work along those lines in the
next<00:07:20.250><c> couple</c><00:07:21.150><c> of</c><00:07:21.270><c> months</c><00:07:21.510><c> and</c><00:07:21.660><c> also</c><00:07:22.470><c> similar</c>

00:07:23.240 --> 00:07:23.250 align:start position:0%
next couple of months and also similar
 

00:07:23.250 --> 00:07:25.040 align:start position:0%
next couple of months and also similar
to<00:07:23.490><c> that</c><00:07:23.580><c> randomized</c><00:07:24.180><c> testing</c><00:07:24.630><c> property</c>

00:07:25.040 --> 00:07:25.050 align:start position:0%
to that randomized testing property
 

00:07:25.050 --> 00:07:27.130 align:start position:0%
to that randomized testing property
testing<00:07:25.470><c> similar</c><00:07:25.950><c> to</c><00:07:26.070><c> quick</c><00:07:26.280><c> check</c><00:07:26.520><c> and</c>

00:07:27.130 --> 00:07:27.140 align:start position:0%
testing similar to quick check and
 

00:07:27.140 --> 00:07:29.060 align:start position:0%
testing similar to quick check and
because<00:07:28.140><c> I've</c><00:07:28.260><c> got</c><00:07:28.440><c> a</c><00:07:28.470><c> bit</c><00:07:28.620><c> of</c><00:07:28.710><c> a</c><00:07:28.770><c> formal</c>

00:07:29.060 --> 00:07:29.070 align:start position:0%
because I've got a bit of a formal
 

00:07:29.070 --> 00:07:30.620 align:start position:0%
because I've got a bit of a formal
verification<00:07:29.220><c> background</c><00:07:29.850><c> I've</c><00:07:30.030><c> got</c><00:07:30.540><c> this</c>

00:07:30.620 --> 00:07:30.630 align:start position:0%
verification background I've got this
 

00:07:30.630 --> 00:07:32.600 align:start position:0%
verification background I've got this
itch<00:07:30.900><c> that</c><00:07:31.260><c> I</c><00:07:31.590><c> haven't</c><00:07:31.740><c> scratched</c><00:07:32.040><c> yet</c><00:07:32.400><c> for</c>

00:07:32.600 --> 00:07:32.610 align:start position:0%
itch that I haven't scratched yet for
 

00:07:32.610 --> 00:07:34.760 align:start position:0%
itch that I haven't scratched yet for
formal<00:07:32.880><c> verification</c><00:07:33.030><c> and</c><00:07:33.750><c> that</c><00:07:34.320><c> you</c><00:07:34.650><c> know</c>

00:07:34.760 --> 00:07:34.770 align:start position:0%
formal verification and that you know
 

00:07:34.770 --> 00:07:36.620 align:start position:0%
formal verification and that you know
we'll<00:07:35.190><c> see</c><00:07:35.370><c> if</c><00:07:35.610><c> I</c><00:07:35.790><c> get</c><00:07:35.910><c> around</c><00:07:36.120><c> to</c><00:07:36.210><c> scratching</c>

00:07:36.620 --> 00:07:36.630 align:start position:0%
we'll see if I get around to scratching
 

00:07:36.630 --> 00:07:41.930 align:start position:0%
we'll see if I get around to scratching
that<00:07:38.030><c> yeah</c><00:07:39.030><c> I</c><00:07:40.040><c> think</c><00:07:41.040><c> I've</c><00:07:41.340><c> got</c><00:07:41.490><c> time</c><00:07:41.670><c> so</c><00:07:41.880><c> I'm</c>

00:07:41.930 --> 00:07:41.940 align:start position:0%
that yeah I think I've got time so I'm
 

00:07:41.940 --> 00:07:45.290 align:start position:0%
that yeah I think I've got time so I'm
gonna<00:07:42.060><c> do</c><00:07:42.210><c> this</c><00:07:42.300><c> section</c><00:07:42.570><c> as</c><00:07:42.810><c> well</c><00:07:43.460><c> as</c><00:07:44.460><c> well</c><00:07:45.270><c> as</c>

00:07:45.290 --> 00:07:45.300 align:start position:0%
gonna do this section as well as well as
 

00:07:45.300 --> 00:07:47.330 align:start position:0%
gonna do this section as well as well as
optimizing<00:07:45.840><c> for</c><00:07:46.170><c> performance</c><00:07:46.650><c> another</c><00:07:47.130><c> thing</c>

00:07:47.330 --> 00:07:47.340 align:start position:0%
optimizing for performance another thing
 

00:07:47.340 --> 00:07:49.370 align:start position:0%
optimizing for performance another thing
we<00:07:47.430><c> can</c><00:07:47.550><c> optimize</c><00:07:47.730><c> for</c><00:07:48.270><c> when</c><00:07:48.900><c> we're</c><00:07:49.020><c> making</c><00:07:49.290><c> an</c>

00:07:49.370 --> 00:07:49.380 align:start position:0%
we can optimize for when we're making an
 

00:07:49.380 --> 00:07:52.550 align:start position:0%
we can optimize for when we're making an
F<00:07:49.500><c> to</c><00:07:49.680><c> client</c><00:07:50.040><c> is</c><00:07:50.250><c> the</c><00:07:50.910><c> profit</c><00:07:51.330><c> that</c><00:07:51.600><c> the</c><00:07:51.870><c> that</c>

00:07:52.550 --> 00:07:52.560 align:start position:0%
F to client is the profit that the that
 

00:07:52.560 --> 00:07:54.950 align:start position:0%
F to client is the profit that the that
the<00:07:52.650><c> validator</c><00:07:53.070><c> will</c><00:07:53.370><c> bring</c><00:07:53.700><c> in</c><00:07:53.880><c> for</c><00:07:54.780><c> being</c><00:07:54.900><c> a</c>

00:07:54.950 --> 00:07:54.960 align:start position:0%
the validator will bring in for being a
 

00:07:54.960 --> 00:07:56.690 align:start position:0%
the validator will bring in for being a
validator<00:07:55.320><c> and</c><00:07:55.530><c> there's</c><00:07:56.130><c> one</c><00:07:56.280><c> interesting</c>

00:07:56.690 --> 00:07:56.700 align:start position:0%
validator and there's one interesting
 

00:07:56.700 --> 00:07:58.160 align:start position:0%
validator and there's one interesting
problem<00:07:56.970><c> here</c><00:07:57.150><c> that</c><00:07:57.180><c> caught</c><00:07:57.480><c> my</c><00:07:57.630><c> eye</c><00:07:57.660><c> a</c><00:07:57.810><c> few</c>

00:07:58.160 --> 00:07:58.170 align:start position:0%
problem here that caught my eye a few
 

00:07:58.170 --> 00:07:59.900 align:start position:0%
problem here that caught my eye a few
months<00:07:58.380><c> ago</c><00:07:58.470><c> and</c><00:07:58.770><c> I'm</c><00:07:58.890><c> maybe</c><00:07:59.310><c> a</c><00:07:59.400><c> bit</c><00:07:59.580><c> obsessed</c>

00:07:59.900 --> 00:07:59.910 align:start position:0%
months ago and I'm maybe a bit obsessed
 

00:07:59.910 --> 00:08:01.490 align:start position:0%
months ago and I'm maybe a bit obsessed
with<00:08:00.030><c> it</c><00:08:00.150><c> if</c><00:08:00.330><c> if</c><00:08:00.660><c> you</c><00:08:00.780><c> talk</c><00:08:00.960><c> to</c><00:08:01.080><c> anyone</c><00:08:01.290><c> around</c>

00:08:01.490 --> 00:08:01.500 align:start position:0%
with it if if you talk to anyone around
 

00:08:01.500 --> 00:08:05.360 align:start position:0%
with it if if you talk to anyone around
CP<00:08:02.150><c> and</c><00:08:03.150><c> that</c><00:08:03.870><c> is</c><00:08:04.020><c> the</c><00:08:04.230><c> attestation</c><00:08:04.620><c> inclusion</c>

00:08:05.360 --> 00:08:05.370 align:start position:0%
CP and that is the attestation inclusion
 

00:08:05.370 --> 00:08:08.870 align:start position:0%
CP and that is the attestation inclusion
problem<00:08:06.260><c> so</c><00:08:07.260><c> this</c><00:08:07.350><c> problem</c><00:08:07.590><c> is</c><00:08:07.830><c> kind</c><00:08:08.820><c> of</c>

00:08:08.870 --> 00:08:08.880 align:start position:0%
problem so this problem is kind of
 

00:08:08.880 --> 00:08:12.020 align:start position:0%
problem so this problem is kind of
leading<00:08:09.840><c> on</c><00:08:10.110><c> from</c><00:08:10.410><c> what</c><00:08:10.700><c> we</c><00:08:11.700><c> were</c><00:08:11.790><c> talking</c>

00:08:12.020 --> 00:08:12.030 align:start position:0%
leading on from what we were talking
 

00:08:12.030 --> 00:08:13.490 align:start position:0%
leading on from what we were talking
about<00:08:12.090><c> before</c><00:08:12.270><c> with</c><00:08:12.660><c> aggregating</c><00:08:13.320><c> out</c><00:08:13.380><c> of</c>

00:08:13.490 --> 00:08:13.500 align:start position:0%
about before with aggregating out of
 

00:08:13.500 --> 00:08:15.560 align:start position:0%
about before with aggregating out of
stations<00:08:13.860><c> is</c><00:08:14.070><c> if</c><00:08:14.610><c> you've</c><00:08:14.850><c> got</c><00:08:15.030><c> a</c><00:08:15.060><c> whole</c><00:08:15.330><c> bunch</c>

00:08:15.560 --> 00:08:15.570 align:start position:0%
stations is if you've got a whole bunch
 

00:08:15.570 --> 00:08:17.420 align:start position:0%
stations is if you've got a whole bunch
of<00:08:15.690><c> aggregation</c><00:08:16.410><c> if</c><00:08:16.980><c> you've</c><00:08:17.160><c> got</c><00:08:17.280><c> a</c><00:08:17.310><c> whole</c>

00:08:17.420 --> 00:08:17.430 align:start position:0%
of aggregation if you've got a whole
 

00:08:17.430 --> 00:08:18.980 align:start position:0%
of aggregation if you've got a whole
bunch<00:08:17.610><c> of</c><00:08:17.670><c> other</c><00:08:17.880><c> stations</c><00:08:18.360><c> from</c><00:08:18.540><c> the</c><00:08:18.690><c> network</c>

00:08:18.980 --> 00:08:18.990 align:start position:0%
bunch of other stations from the network
 

00:08:18.990 --> 00:08:21.500 align:start position:0%
bunch of other stations from the network
and<00:08:19.980><c> you've</c><00:08:20.130><c> got</c><00:08:20.310><c> more</c><00:08:20.610><c> than</c><00:08:20.850><c> you</c><00:08:20.940><c> can</c><00:08:21.120><c> fit</c><00:08:21.330><c> in</c>

00:08:21.500 --> 00:08:21.510 align:start position:0%
and you've got more than you can fit in
 

00:08:21.510 --> 00:08:24.620 align:start position:0%
and you've got more than you can fit in
a<00:08:21.600><c> single</c><00:08:21.930><c> block</c><00:08:22.910><c> deciding</c><00:08:23.910><c> which</c><00:08:24.120><c> ones</c><00:08:24.390><c> to</c>

00:08:24.620 --> 00:08:24.630 align:start position:0%
a single block deciding which ones to
 

00:08:24.630 --> 00:08:26.690 align:start position:0%
a single block deciding which ones to
include<00:08:25.020><c> in</c><00:08:25.260><c> the</c><00:08:25.380><c> block</c><00:08:25.590><c> such</c><00:08:26.370><c> that</c><00:08:26.610><c> you</c>

00:08:26.690 --> 00:08:26.700 align:start position:0%
include in the block such that you
 

00:08:26.700 --> 00:08:28.460 align:start position:0%
include in the block such that you
maximize<00:08:26.880><c> the</c><00:08:27.540><c> profit</c><00:08:27.900><c> that</c><00:08:28.050><c> you</c><00:08:28.110><c> get</c><00:08:28.320><c> from</c>

00:08:28.460 --> 00:08:28.470 align:start position:0%
maximize the profit that you get from
 

00:08:28.470 --> 00:08:30.590 align:start position:0%
maximize the profit that you get from
the<00:08:28.620><c> rewards</c><00:08:29.040><c> is</c><00:08:29.220><c> actually</c><00:08:30.180><c> an</c><00:08:30.270><c> np-hard</c>

00:08:30.590 --> 00:08:30.600 align:start position:0%
the rewards is actually an np-hard
 

00:08:30.600 --> 00:08:33.409 align:start position:0%
the rewards is actually an np-hard
problem<00:08:31.200><c> and</c><00:08:32.190><c> it's</c><00:08:32.460><c> an</c><00:08:32.580><c> instance</c><00:08:33.000><c> of</c><00:08:33.150><c> this</c>

00:08:33.409 --> 00:08:33.419 align:start position:0%
problem and it's an instance of this
 

00:08:33.419 --> 00:08:34.969 align:start position:0%
problem and it's an instance of this
classical<00:08:34.050><c> computer</c><00:08:34.410><c> science</c><00:08:34.710><c> problem</c>

00:08:34.969 --> 00:08:34.979 align:start position:0%
classical computer science problem
 

00:08:34.979 --> 00:08:38.719 align:start position:0%
classical computer science problem
called<00:08:35.280><c> maximum</c><00:08:36.090><c> coverage</c><00:08:37.010><c> and</c><00:08:38.010><c> just</c><00:08:38.400><c> to</c><00:08:38.520><c> show</c>

00:08:38.719 --> 00:08:38.729 align:start position:0%
called maximum coverage and just to show
 

00:08:38.729 --> 00:08:39.740 align:start position:0%
called maximum coverage and just to show
you<00:08:38.820><c> exactly</c><00:08:39.030><c> what</c><00:08:39.270><c> that</c><00:08:39.390><c> looks</c><00:08:39.539><c> like</c>

00:08:39.740 --> 00:08:39.750 align:start position:0%
you exactly what that looks like
 

00:08:39.750 --> 00:08:42.770 align:start position:0%
you exactly what that looks like
so<00:08:40.580><c> attestation</c><00:08:41.580><c> inclusion</c><00:08:42.180><c> says</c><00:08:42.419><c> something</c>

00:08:42.770 --> 00:08:42.780 align:start position:0%
so attestation inclusion says something
 

00:08:42.780 --> 00:08:45.410 align:start position:0%
so attestation inclusion says something
like<00:08:42.830><c> we</c><00:08:43.830><c> have</c><00:08:44.039><c> a</c><00:08:44.219><c> whole</c><00:08:44.400><c> bunch</c><00:08:44.640><c> of</c><00:08:44.850><c> other</c>

00:08:45.410 --> 00:08:45.420 align:start position:0%
like we have a whole bunch of other
 

00:08:45.420 --> 00:08:48.140 align:start position:0%
like we have a whole bunch of other
stations<00:08:45.750><c> n</c><00:08:46.050><c> data</c><00:08:46.410><c> stations</c><00:08:46.890><c> and</c><00:08:47.160><c> we</c><00:08:47.910><c> need</c><00:08:48.060><c> to</c>

00:08:48.140 --> 00:08:48.150 align:start position:0%
stations n data stations and we need to
 

00:08:48.150 --> 00:08:51.320 align:start position:0%
stations n data stations and we need to
find<00:08:48.390><c> a</c><00:08:48.660><c> subset</c><00:08:49.200><c> of</c><00:08:49.380><c> these</c><00:08:49.950><c> of</c><00:08:50.280><c> some</c><00:08:51.090><c> maximum</c>

00:08:51.320 --> 00:08:51.330 align:start position:0%
find a subset of these of some maximum
 

00:08:51.330 --> 00:08:54.470 align:start position:0%
find a subset of these of some maximum
size<00:08:51.840><c> such</c><00:08:52.710><c> that</c><00:08:52.980><c> the</c><00:08:53.160><c> sum</c><00:08:53.550><c> of</c><00:08:53.610><c> the</c><00:08:53.850><c> rewards</c><00:08:54.330><c> we</c>

00:08:54.470 --> 00:08:54.480 align:start position:0%
size such that the sum of the rewards we
 

00:08:54.480 --> 00:08:56.270 align:start position:0%
size such that the sum of the rewards we
get<00:08:54.660><c> for</c><00:08:54.930><c> all</c><00:08:54.960><c> the</c><00:08:55.380><c> validators</c><00:08:56.010><c> that</c><00:08:56.160><c> we've</c>

00:08:56.270 --> 00:08:56.280 align:start position:0%
get for all the validators that we've
 

00:08:56.280 --> 00:08:57.890 align:start position:0%
get for all the validators that we've
covered<00:08:56.550><c> with</c><00:08:57.000><c> those</c><00:08:57.120><c> outer</c><00:08:57.330><c> stations</c><00:08:57.750><c> is</c>

00:08:57.890 --> 00:08:57.900 align:start position:0%
covered with those outer stations is
 

00:08:57.900 --> 00:08:58.970 align:start position:0%
covered with those outer stations is
maximal

00:08:58.970 --> 00:08:58.980 align:start position:0%
maximal
 

00:08:58.980 --> 00:09:01.390 align:start position:0%
maximal
and<00:08:59.240><c> the</c><00:09:00.240><c> abstract</c><00:09:00.780><c> version</c><00:09:01.050><c> of</c><00:09:01.140><c> this</c><00:09:01.200><c> problem</c>

00:09:01.390 --> 00:09:01.400 align:start position:0%
and the abstract version of this problem
 

00:09:01.400 --> 00:09:04.280 align:start position:0%
and the abstract version of this problem
weighted<00:09:02.400><c> maximum</c><00:09:02.850><c> coverage</c><00:09:03.150><c> says</c><00:09:03.480><c> we</c><00:09:04.140><c> have</c>

00:09:04.280 --> 00:09:04.290 align:start position:0%
weighted maximum coverage says we have
 

00:09:04.290 --> 00:09:06.680 align:start position:0%
weighted maximum coverage says we have
some<00:09:04.530><c> set</c><00:09:04.860><c> of</c><00:09:04.890><c> sets</c><00:09:05.400><c> and</c><00:09:05.700><c> we</c><00:09:06.000><c> need</c><00:09:06.150><c> to</c><00:09:06.270><c> find</c><00:09:06.480><c> a</c>

00:09:06.680 --> 00:09:06.690 align:start position:0%
some set of sets and we need to find a
 

00:09:06.690 --> 00:09:08.930 align:start position:0%
some set of sets and we need to find a
subset<00:09:07.200><c> of</c><00:09:07.230><c> those</c><00:09:07.470><c> sets</c><00:09:07.800><c> of</c><00:09:08.070><c> the</c><00:09:08.280><c> maximum</c><00:09:08.700><c> size</c>

00:09:08.930 --> 00:09:08.940 align:start position:0%
subset of those sets of the maximum size
 

00:09:08.940 --> 00:09:11.870 align:start position:0%
subset of those sets of the maximum size
so<00:09:09.570><c> that</c><00:09:09.600><c> when</c><00:09:09.960><c> we</c><00:09:10.080><c> Union</c><00:09:10.650><c> all</c><00:09:11.010><c> the</c><00:09:11.400><c> sets</c><00:09:11.670><c> in</c>

00:09:11.870 --> 00:09:11.880 align:start position:0%
so that when we Union all the sets in
 

00:09:11.880 --> 00:09:15.020 align:start position:0%
so that when we Union all the sets in
that<00:09:12.030><c> subset</c><00:09:12.510><c> together</c><00:09:12.900><c> the</c><00:09:13.740><c> combined</c><00:09:14.640><c> weight</c>

00:09:15.020 --> 00:09:15.030 align:start position:0%
that subset together the combined weight
 

00:09:15.030 --> 00:09:19.760 align:start position:0%
that subset together the combined weight
of<00:09:15.330><c> all</c><00:09:15.510><c> those</c><00:09:15.660><c> elements</c><00:09:15.870><c> is</c><00:09:16.290><c> maximal</c>

00:09:19.760 --> 00:09:19.770 align:start position:0%
 
 

00:09:19.770 --> 00:09:21.800 align:start position:0%
 
the<00:09:20.310><c> problem</c><00:09:20.610><c> with</c><00:09:20.730><c> np-hard</c><00:09:21.210><c> problems</c><00:09:21.600><c> is</c>

00:09:21.800 --> 00:09:21.810 align:start position:0%
the problem with np-hard problems is
 

00:09:21.810 --> 00:09:27.170 align:start position:0%
the problem with np-hard problems is
that<00:09:22.590><c> they're</c><00:09:22.800><c> hard</c><00:09:22.980><c> and</c><00:09:25.100><c> usually</c><00:09:26.180><c> solving</c>

00:09:27.170 --> 00:09:27.180 align:start position:0%
that they're hard and usually solving
 

00:09:27.180 --> 00:09:28.940 align:start position:0%
that they're hard and usually solving
them<00:09:27.300><c> exactly</c><00:09:27.600><c> requires</c><00:09:28.500><c> a</c><00:09:28.620><c> sort</c><00:09:28.920><c> of</c>

00:09:28.940 --> 00:09:28.950 align:start position:0%
them exactly requires a sort of
 

00:09:28.950 --> 00:09:30.770 align:start position:0%
them exactly requires a sort of
exponential<00:09:29.430><c> or</c><00:09:29.760><c> semi</c><00:09:30.060><c> exponential</c><00:09:30.660><c> time</c>

00:09:30.770 --> 00:09:30.780 align:start position:0%
exponential or semi exponential time
 

00:09:30.780 --> 00:09:34.040 align:start position:0%
exponential or semi exponential time
algorithm<00:09:31.370><c> so</c><00:09:32.370><c> for</c><00:09:32.910><c> now</c><00:09:33.060><c> we're</c><00:09:33.480><c> using</c><00:09:33.540><c> a</c>

00:09:34.040 --> 00:09:34.050 align:start position:0%
algorithm so for now we're using a
 

00:09:34.050 --> 00:09:36.200 align:start position:0%
algorithm so for now we're using a
greedy<00:09:34.470><c> algorithm</c><00:09:34.800><c> that</c><00:09:35.220><c> works</c><00:09:35.370><c> quite</c><00:09:35.760><c> simply</c>

00:09:36.200 --> 00:09:36.210 align:start position:0%
greedy algorithm that works quite simply
 

00:09:36.210 --> 00:09:39.550 align:start position:0%
greedy algorithm that works quite simply
by<00:09:36.960><c> just</c><00:09:37.560><c> starting</c><00:09:38.400><c> with</c><00:09:38.640><c> an</c><00:09:38.760><c> empty</c><00:09:38.970><c> solution</c>

00:09:39.550 --> 00:09:39.560 align:start position:0%
by just starting with an empty solution
 

00:09:39.560 --> 00:09:42.410 align:start position:0%
by just starting with an empty solution
looking<00:09:40.560><c> at</c><00:09:40.710><c> the</c><00:09:40.950><c> the</c><00:09:41.550><c> list</c><00:09:41.760><c> of</c><00:09:42.000><c> other</c>

00:09:42.410 --> 00:09:42.420 align:start position:0%
looking at the the list of other
 

00:09:42.420 --> 00:09:44.450 align:start position:0%
looking at the the list of other
stations<00:09:42.720><c> that</c><00:09:42.960><c> you've</c><00:09:43.140><c> got</c><00:09:43.350><c> and</c><00:09:43.560><c> greedily</c>

00:09:44.450 --> 00:09:44.460 align:start position:0%
stations that you've got and greedily
 

00:09:44.460 --> 00:09:46.340 align:start position:0%
stations that you've got and greedily
choosing<00:09:45.270><c> the</c><00:09:45.420><c> best</c><00:09:45.630><c> adder</c><00:09:45.870><c> stations</c>

00:09:46.340 --> 00:09:46.350 align:start position:0%
choosing the best adder stations
 

00:09:46.350 --> 00:09:48.020 align:start position:0%
choosing the best adder stations
repeatedly<00:09:46.980><c> and</c><00:09:47.160><c> adding</c><00:09:47.490><c> them</c><00:09:47.700><c> to</c><00:09:48.000><c> your</c>

00:09:48.020 --> 00:09:48.030 align:start position:0%
repeatedly and adding them to your
 

00:09:48.030 --> 00:09:50.780 align:start position:0%
repeatedly and adding them to your
solution<00:09:48.480><c> and</c><00:09:48.870><c> so</c><00:09:49.860><c> the</c><00:09:49.980><c> best</c><00:09:50.190><c> data</c><00:09:50.370><c> stations</c>

00:09:50.780 --> 00:09:50.790 align:start position:0%
solution and so the best data stations
 

00:09:50.790 --> 00:09:52.550 align:start position:0%
solution and so the best data stations
are<00:09:51.240><c> going</c><00:09:51.480><c> to</c><00:09:51.540><c> be</c><00:09:51.600><c> the</c><00:09:51.690><c> ones</c><00:09:51.840><c> that</c><00:09:51.960><c> cover</c><00:09:52.230><c> new</c>

00:09:52.550 --> 00:09:52.560 align:start position:0%
are going to be the ones that cover new
 

00:09:52.560 --> 00:09:54.260 align:start position:0%
are going to be the ones that cover new
validators<00:09:53.130><c> that</c><00:09:53.310><c> are</c><00:09:53.400><c> not</c><00:09:53.520><c> yet</c><00:09:53.640><c> covered</c><00:09:53.880><c> by</c>

00:09:54.260 --> 00:09:54.270 align:start position:0%
validators that are not yet covered by
 

00:09:54.270 --> 00:09:56.330 align:start position:0%
validators that are not yet covered by
other<00:09:54.930><c> stations</c><00:09:55.380><c> included</c><00:09:55.800><c> on</c><00:09:55.890><c> chain</c><00:09:56.160><c> or</c>

00:09:56.330 --> 00:09:56.340 align:start position:0%
other stations included on chain or
 

00:09:56.340 --> 00:09:57.800 align:start position:0%
other stations included on chain or
adder<00:09:56.490><c> stations</c><00:09:56.910><c> already</c><00:09:57.300><c> in</c><00:09:57.390><c> your</c><00:09:57.510><c> solution</c>

00:09:57.800 --> 00:09:57.810 align:start position:0%
adder stations already in your solution
 

00:09:57.810 --> 00:10:00.950 align:start position:0%
adder stations already in your solution
and<00:09:58.140><c> that</c><00:09:59.070><c> include</c><00:09:59.700><c> of</c><00:09:59.940><c> those</c><00:10:00.300><c> validators</c><00:10:00.840><c> the</c>

00:10:00.950 --> 00:10:00.960 align:start position:0%
and that include of those validators the
 

00:10:00.960 --> 00:10:02.630 align:start position:0%
and that include of those validators the
ones<00:10:01.110><c> that</c><00:10:01.230><c> include</c><00:10:01.350><c> the</c><00:10:01.650><c> most</c><00:10:01.800><c> high</c><00:10:02.160><c> balanced</c>

00:10:02.630 --> 00:10:02.640 align:start position:0%
ones that include the most high balanced
 

00:10:02.640 --> 00:10:04.310 align:start position:0%
ones that include the most high balanced
validators<00:10:03.390><c> because</c><00:10:03.600><c> the</c><00:10:03.750><c> reward</c><00:10:04.080><c> that</c><00:10:04.170><c> you</c>

00:10:04.310 --> 00:10:04.320 align:start position:0%
validators because the reward that you
 

00:10:04.320 --> 00:10:07.460 align:start position:0%
validators because the reward that you
get<00:10:04.470><c> paid</c><00:10:04.710><c> is</c><00:10:05.150><c> proportional</c><00:10:06.150><c> to</c><00:10:06.450><c> the</c><00:10:06.690><c> balance</c>

00:10:07.460 --> 00:10:07.470 align:start position:0%
get paid is proportional to the balance
 

00:10:07.470 --> 00:10:09.380 align:start position:0%
get paid is proportional to the balance
of<00:10:07.650><c> the</c><00:10:07.920><c> validator</c><00:10:08.310><c> who's</c><00:10:08.700><c> at</c><00:10:08.910><c> a</c><00:10:08.940><c> station</c><00:10:09.300><c> you</c>

00:10:09.380 --> 00:10:09.390 align:start position:0%
of the validator who's at a station you
 

00:10:09.390 --> 00:10:13.820 align:start position:0%
of the validator who's at a station you
include<00:10:11.090><c> this</c><00:10:12.090><c> greedy</c><00:10:12.750><c> algorithm</c><00:10:13.020><c> performs</c>

00:10:13.820 --> 00:10:13.830 align:start position:0%
include this greedy algorithm performs
 

00:10:13.830 --> 00:10:16.550 align:start position:0%
include this greedy algorithm performs
quite<00:10:14.010><c> well</c><00:10:14.330><c> within</c><00:10:15.330><c> a</c><00:10:15.510><c> factor</c><00:10:15.870><c> of</c><00:10:15.900><c> one</c><00:10:16.170><c> minus</c>

00:10:16.550 --> 00:10:16.560 align:start position:0%
quite well within a factor of one minus
 

00:10:16.560 --> 00:10:19.370 align:start position:0%
quite well within a factor of one minus
one<00:10:16.710><c> on</c><00:10:16.860><c> a</c><00:10:17.100><c> of</c><00:10:17.340><c> optimality</c><00:10:17.880><c> so</c><00:10:18.330><c> it's</c><00:10:19.170><c> always</c>

00:10:19.370 --> 00:10:19.380 align:start position:0%
one on a of optimality so it's always
 

00:10:19.380 --> 00:10:21.950 align:start position:0%
one on a of optimality so it's always
going<00:10:19.650><c> to</c><00:10:19.740><c> get</c><00:10:19.890><c> you</c><00:10:19.980><c> at</c><00:10:20.130><c> least</c><00:10:20.390><c> 63</c><00:10:21.390><c> percent</c><00:10:21.840><c> of</c>

00:10:21.950 --> 00:10:21.960 align:start position:0%
going to get you at least 63 percent of
 

00:10:21.960 --> 00:10:23.510 align:start position:0%
going to get you at least 63 percent of
the<00:10:22.110><c> maximum</c><00:10:22.500><c> reward</c><00:10:22.680><c> that</c><00:10:23.010><c> you</c><00:10:23.100><c> could</c><00:10:23.340><c> get</c>

00:10:23.510 --> 00:10:23.520 align:start position:0%
the maximum reward that you could get
 

00:10:23.520 --> 00:10:26.360 align:start position:0%
the maximum reward that you could get
and<00:10:24.110><c> in</c><00:10:25.110><c> a</c><00:10:25.350><c> lot</c><00:10:25.500><c> of</c><00:10:25.530><c> cases</c><00:10:25.770><c> it</c><00:10:25.980><c> will</c><00:10:26.070><c> do</c><00:10:26.190><c> better</c>

00:10:26.360 --> 00:10:26.370 align:start position:0%
and in a lot of cases it will do better
 

00:10:26.370 --> 00:10:26.870 align:start position:0%
and in a lot of cases it will do better
than<00:10:26.550><c> that</c>

00:10:26.870 --> 00:10:26.880 align:start position:0%
than that
 

00:10:26.880 --> 00:10:28.700 align:start position:0%
than that
there's<00:10:27.090><c> the</c><00:10:27.420><c> sort</c><00:10:27.720><c> of</c><00:10:27.750><c> pathological</c><00:10:28.230><c> cases</c>

00:10:28.700 --> 00:10:28.710 align:start position:0%
there's the sort of pathological cases
 

00:10:28.710 --> 00:10:31.010 align:start position:0%
there's the sort of pathological cases
that<00:10:29.040><c> hit</c><00:10:29.280><c> this</c><00:10:29.460><c> lower</c><00:10:29.850><c> bound</c><00:10:30.060><c> a</c><00:10:30.300><c> kind</c><00:10:30.900><c> of</c>

00:10:31.010 --> 00:10:31.020 align:start position:0%
that hit this lower bound a kind of
 

00:10:31.020 --> 00:10:34.430 align:start position:0%
that hit this lower bound a kind of
unusual<00:10:31.790><c> but</c><00:10:32.790><c> nonetheless</c><00:10:33.270><c> I</c><00:10:33.750><c> would</c><00:10:34.110><c> like</c><00:10:34.290><c> to</c>

00:10:34.430 --> 00:10:34.440 align:start position:0%
unusual but nonetheless I would like to
 

00:10:34.440 --> 00:10:36.950 align:start position:0%
unusual but nonetheless I would like to
look<00:10:34.560><c> into</c><00:10:34.740><c> doing</c><00:10:35.010><c> some</c><00:10:35.400><c> exact</c><00:10:35.790><c> solving</c><00:10:36.210><c> using</c>

00:10:36.950 --> 00:10:36.960 align:start position:0%
look into doing some exact solving using
 

00:10:36.960 --> 00:10:38.840 align:start position:0%
look into doing some exact solving using
integer<00:10:37.800><c> linear</c><00:10:37.860><c> programming</c><00:10:38.400><c> at</c><00:10:38.550><c> some</c><00:10:38.700><c> point</c>

00:10:38.840 --> 00:10:38.850 align:start position:0%
integer linear programming at some point
 

00:10:38.850 --> 00:10:40.060 align:start position:0%
integer linear programming at some point
in<00:10:38.910><c> the</c><00:10:38.970><c> future</c><00:10:39.060><c> I</c><00:10:39.240><c> think</c><00:10:39.300><c> that</c><00:10:39.540><c> could</c><00:10:39.690><c> be</c><00:10:39.780><c> fun</c>

00:10:40.060 --> 00:10:40.070 align:start position:0%
in the future I think that could be fun
 

00:10:40.070 --> 00:10:42.590 align:start position:0%
in the future I think that could be fun
but<00:10:41.070><c> it</c><00:10:41.190><c> might</c><00:10:41.370><c> require</c><00:10:41.550><c> kind</c><00:10:42.000><c> of</c><00:10:42.090><c> scheduling</c>

00:10:42.590 --> 00:10:42.600 align:start position:0%
but it might require kind of scheduling
 

00:10:42.600 --> 00:10:45.110 align:start position:0%
but it might require kind of scheduling
your<00:10:42.810><c> block</c><00:10:43.440><c> production</c><00:10:44.100><c> well</c><00:10:44.370><c> in</c><00:10:44.490><c> advance</c><00:10:44.820><c> of</c>

00:10:45.110 --> 00:10:45.120 align:start position:0%
your block production well in advance of
 

00:10:45.120 --> 00:10:46.730 align:start position:0%
your block production well in advance of
when<00:10:45.240><c> you</c><00:10:45.390><c> actually</c><00:10:45.750><c> need</c><00:10:45.900><c> to</c><00:10:45.930><c> produce</c><00:10:46.260><c> the</c>

00:10:46.730 --> 00:10:46.740 align:start position:0%
when you actually need to produce the
 

00:10:46.740 --> 00:10:51.200 align:start position:0%
when you actually need to produce the
block<00:10:47.310><c> which</c><00:10:47.490><c> could</c><00:10:47.700><c> be</c><00:10:47.850><c> not</c><00:10:48.150><c> so</c><00:10:48.300><c> good</c><00:10:49.910><c> yeah</c><00:10:50.910><c> so</c>

00:10:51.200 --> 00:10:51.210 align:start position:0%
block which could be not so good yeah so
 

00:10:51.210 --> 00:10:54.230 align:start position:0%
block which could be not so good yeah so
in<00:10:51.450><c> conclusion</c><00:10:52.250><c> optimizing</c><00:10:53.250><c> s</c><00:10:53.430><c> 2</c><00:10:53.670><c> is</c><00:10:53.910><c> a</c><00:10:53.940><c> lot</c><00:10:54.150><c> of</c>

00:10:54.230 --> 00:10:54.240 align:start position:0%
in conclusion optimizing s 2 is a lot of
 

00:10:54.240 --> 00:10:56.030 align:start position:0%
in conclusion optimizing s 2 is a lot of
fun<00:10:54.480><c> and</c><00:10:54.690><c> all</c><00:10:55.350><c> the</c><00:10:55.530><c> clients</c><00:10:55.860><c> should</c>

00:10:56.030 --> 00:10:56.040 align:start position:0%
fun and all the clients should
 

00:10:56.040 --> 00:10:57.440 align:start position:0%
fun and all the clients should
definitely<00:10:56.400><c> be</c><00:10:56.550><c> doing</c><00:10:56.820><c> it</c><00:10:56.910><c> and</c><00:10:57.060><c> I'm</c><00:10:57.120><c> sure</c><00:10:57.150><c> they</c>

00:10:57.440 --> 00:10:57.450 align:start position:0%
definitely be doing it and I'm sure they
 

00:10:57.450 --> 00:11:01.880 align:start position:0%
definitely be doing it and I'm sure they
are<00:10:59.000><c> there's</c><00:11:00.000><c> a</c><00:11:00.060><c> link</c><00:11:00.330><c> between</c><00:11:00.890><c> performance</c>

00:11:01.880 --> 00:11:01.890 align:start position:0%
are there's a link between performance
 

00:11:01.890 --> 00:11:04.490 align:start position:0%
are there's a link between performance
and<00:11:02.100><c> security</c><00:11:02.750><c> so</c><00:11:03.750><c> avoiding</c><00:11:04.170><c> denial</c><00:11:04.410><c> of</c>

00:11:04.490 --> 00:11:04.500 align:start position:0%
and security so avoiding denial of
 

00:11:04.500 --> 00:11:07.250 align:start position:0%
and security so avoiding denial of
service<00:11:04.770><c> optimization</c><00:11:05.460><c> is</c><00:11:05.550><c> important</c><00:11:06.000><c> and</c><00:11:06.260><c> if</c>

00:11:07.250 --> 00:11:07.260 align:start position:0%
service optimization is important and if
 

00:11:07.260 --> 00:11:09.140 align:start position:0%
service optimization is important and if
we<00:11:07.770><c> are</c><00:11:07.890><c> all</c><00:11:08.010><c> optimizing</c><00:11:08.640><c> and</c><00:11:08.790><c> writing</c><00:11:08.970><c> things</c>

00:11:09.140 --> 00:11:09.150 align:start position:0%
we are all optimizing and writing things
 

00:11:09.150 --> 00:11:10.250 align:start position:0%
we are all optimizing and writing things
in<00:11:09.240><c> different</c><00:11:09.390><c> ways</c><00:11:09.600><c> there's</c><00:11:09.840><c> a</c><00:11:09.900><c> chance</c><00:11:10.110><c> we</c>

00:11:10.250 --> 00:11:10.260 align:start position:0%
in different ways there's a chance we
 

00:11:10.260 --> 00:11:12.240 align:start position:0%
in different ways there's a chance we
might<00:11:10.290><c> find</c><00:11:10.800><c> some</c><00:11:10.950><c> more</c><00:11:11.010><c> spec</c><00:11:11.430><c> bugs</c><00:11:11.670><c> which</c><00:11:12.000><c> you</c>

00:11:12.240 --> 00:11:12.250 align:start position:0%
might find some more spec bugs which you
 

00:11:12.250 --> 00:11:14.880 align:start position:0%
might find some more spec bugs which you
lots<00:11:12.700><c> of</c><00:11:12.790><c> fun</c><00:11:12.940><c> sir</c><00:11:13.300><c> thank</c><00:11:14.020><c> you</c><00:11:14.080><c> very</c><00:11:14.200><c> much</c>

00:11:14.880 --> 00:11:14.890 align:start position:0%
lots of fun sir thank you very much
 

00:11:14.890 --> 00:11:27.180 align:start position:0%
lots of fun sir thank you very much
[Applause]

00:11:27.180 --> 00:11:27.190 align:start position:0%
 
 

00:11:27.190 --> 00:11:29.250 align:start position:0%
 
you

