WEBVTT
Kind: captions
Language: en

00:00:00.000 --> 00:00:04.350 align:start position:0%
 
foreign

00:00:04.350 --> 00:00:04.360 align:start position:0%
 
 

00:00:04.360 --> 00:00:13.150 align:start position:0%
 
[Music]

00:00:13.150 --> 00:00:13.160 align:start position:0%
 
 

00:00:13.160 --> 00:00:15.829 align:start position:0%
 
welcome<00:00:14.160><c> to</c><00:00:14.340><c> this</c><00:00:14.519><c> lightning</c><00:00:14.940><c> talk</c><00:00:15.120><c> about</c><00:00:15.480><c> the</c>

00:00:15.829 --> 00:00:15.839 align:start position:0%
welcome to this lightning talk about the
 

00:00:15.839 --> 00:00:18.529 align:start position:0%
welcome to this lightning talk about the
unspecified<00:00:16.379><c> evaluation</c><00:00:17.100><c> order</c><00:00:17.400><c> in</c><00:00:18.000><c> solidity</c>

00:00:18.529 --> 00:00:18.539 align:start position:0%
unspecified evaluation order in solidity
 

00:00:18.539 --> 00:00:20.630 align:start position:0%
unspecified evaluation order in solidity
or<00:00:19.080><c> how</c><00:00:19.260><c> our</c><00:00:19.440><c> colleague</c><00:00:19.859><c> Tina</c><00:00:20.340><c> and</c><00:00:20.520><c> Richard</c>

00:00:20.630 --> 00:00:20.640 align:start position:0%
or how our colleague Tina and Richard
 

00:00:20.640 --> 00:00:22.370 align:start position:0%
or how our colleague Tina and Richard
who<00:00:21.300><c> unfortunately</c><00:00:21.660><c> couldn't</c><00:00:21.900><c> make</c><00:00:22.140><c> it</c><00:00:22.260><c> to</c>

00:00:22.370 --> 00:00:22.380 align:start position:0%
who unfortunately couldn't make it to
 

00:00:22.380 --> 00:00:24.769 align:start position:0%
who unfortunately couldn't make it to
Bogota<00:00:22.740><c> won</c><00:00:23.520><c> the</c><00:00:23.760><c> underhanded</c><00:00:24.300><c> solidity</c>

00:00:24.769 --> 00:00:24.779 align:start position:0%
Bogota won the underhanded solidity
 

00:00:24.779 --> 00:00:26.750 align:start position:0%
Bogota won the underhanded solidity
contest<00:00:25.199><c> the</c><00:00:25.800><c> goal</c><00:00:26.039><c> of</c><00:00:26.160><c> the</c><00:00:26.279><c> underhanded</c>

00:00:26.750 --> 00:00:26.760 align:start position:0%
contest the goal of the underhanded
 

00:00:26.760 --> 00:00:29.089 align:start position:0%
contest the goal of the underhanded
solidity<00:00:27.180><c> contest</c><00:00:27.660><c> is</c><00:00:28.199><c> to</c><00:00:28.380><c> provide</c><00:00:28.619><c> harmless</c>

00:00:29.089 --> 00:00:29.099 align:start position:0%
solidity contest is to provide harmless
 

00:00:29.099 --> 00:00:31.669 align:start position:0%
solidity contest is to provide harmless
or<00:00:29.400><c> unsuspicious</c><00:00:30.060><c> looking</c><00:00:30.359><c> smart</c><00:00:30.960><c> contracts</c>

00:00:31.669 --> 00:00:31.679 align:start position:0%
or unsuspicious looking smart contracts
 

00:00:31.679 --> 00:00:34.490 align:start position:0%
or unsuspicious looking smart contracts
with<00:00:32.160><c> hidden</c><00:00:32.520><c> bugs</c><00:00:32.880><c> or</c><00:00:33.059><c> pitfalls</c><00:00:33.719><c> thereby</c>

00:00:34.490 --> 00:00:34.500 align:start position:0%
with hidden bugs or pitfalls thereby
 

00:00:34.500 --> 00:00:37.130 align:start position:0%
with hidden bugs or pitfalls thereby
exposing<00:00:35.219><c> weird</c><00:00:35.399><c> behavior</c><00:00:35.880><c> and</c><00:00:36.059><c> solidity</c><00:00:36.540><c> in</c>

00:00:37.130 --> 00:00:37.140 align:start position:0%
exposing weird behavior and solidity in
 

00:00:37.140 --> 00:00:40.069 align:start position:0%
exposing weird behavior and solidity in
a<00:00:37.260><c> fun</c><00:00:37.380><c> way</c><00:00:37.680><c> let's</c><00:00:38.579><c> Jump</c><00:00:38.880><c> Right</c><00:00:39.120><c> In</c><00:00:39.420><c> here's</c><00:00:40.020><c> an</c>

00:00:40.069 --> 00:00:40.079 align:start position:0%
a fun way let's Jump Right In here's an
 

00:00:40.079 --> 00:00:42.770 align:start position:0%
a fun way let's Jump Right In here's an
excerpt<00:00:40.500><c> from</c><00:00:40.739><c> the</c><00:00:40.980><c> solidity</c><00:00:41.460><c> docs</c><00:00:41.940><c> what</c><00:00:42.540><c> it's</c>

00:00:42.770 --> 00:00:42.780 align:start position:0%
excerpt from the solidity docs what it's
 

00:00:42.780 --> 00:00:45.590 align:start position:0%
excerpt from the solidity docs what it's
basically<00:00:43.140><c> saying</c><00:00:43.500><c> is</c><00:00:43.739><c> the</c><00:00:44.280><c> evaluation</c><00:00:44.700><c> the</c>

00:00:45.590 --> 00:00:45.600 align:start position:0%
basically saying is the evaluation the
 

00:00:45.600 --> 00:00:47.810 align:start position:0%
basically saying is the evaluation the
evaluation<00:00:45.960><c> order</c><00:00:46.260><c> of</c><00:00:46.559><c> Expressions</c><00:00:47.100><c> is</c><00:00:47.640><c> not</c>

00:00:47.810 --> 00:00:47.820 align:start position:0%
evaluation order of Expressions is not
 

00:00:47.820 --> 00:00:50.889 align:start position:0%
evaluation order of Expressions is not
specified<00:00:48.420><c> IF</c><00:00:49.260><c> function</c><00:00:49.620><c> f</c><00:00:50.039><c> takes</c><00:00:50.579><c> two</c>

00:00:50.889 --> 00:00:50.899 align:start position:0%
specified IF function f takes two
 

00:00:50.899 --> 00:00:53.029 align:start position:0%
specified IF function f takes two
arguments<00:00:51.899><c> which</c><00:00:52.200><c> are</c><00:00:52.379><c> further</c><00:00:52.620><c> function</c>

00:00:53.029 --> 00:00:53.039 align:start position:0%
arguments which are further function
 

00:00:53.039 --> 00:00:56.389 align:start position:0%
arguments which are further function
calls<00:00:53.460><c> to</c><00:00:53.520><c> functions</c><00:00:54.000><c> G</c><00:00:54.300><c> and</c><00:00:54.660><c> H</c><00:00:54.960><c> it's</c><00:00:55.800><c> unclear</c>

00:00:56.389 --> 00:00:56.399 align:start position:0%
calls to functions G and H it's unclear
 

00:00:56.399 --> 00:00:58.850 align:start position:0%
calls to functions G and H it's unclear
in<00:00:56.879><c> which</c><00:00:57.000><c> order</c><00:00:57.239><c> they</c><00:00:57.539><c> are</c><00:00:57.719><c> evaluated</c>

00:00:58.850 --> 00:00:58.860 align:start position:0%
in which order they are evaluated
 

00:00:58.860 --> 00:01:01.970 align:start position:0%
in which order they are evaluated
I<00:00:59.640><c> don't</c><00:00:59.820><c> function</c><00:01:00.239><c> G</c><00:01:00.480><c> is</c><00:01:00.660><c> a</c><00:01:00.780><c> related</c><00:01:01.079><c> first</c><00:01:01.440><c> or</c>

00:01:01.970 --> 00:01:01.980 align:start position:0%
I don't function G is a related first or
 

00:01:01.980 --> 00:01:04.430 align:start position:0%
I don't function G is a related first or
function<00:01:02.399><c> H</c><00:01:02.820><c> is</c><00:01:03.059><c> evaluated</c><00:01:03.539><c> first</c><00:01:03.780><c> but</c><00:01:04.140><c> we</c><00:01:04.320><c> can</c>

00:01:04.430 --> 00:01:04.440 align:start position:0%
function H is evaluated first but we can
 

00:01:04.440 --> 00:01:06.710 align:start position:0%
function H is evaluated first but we can
never<00:01:04.559><c> be</c><00:01:04.739><c> sure</c><00:01:04.920><c> which</c><00:01:05.280><c> one</c><00:01:05.939><c> obviously</c>

00:01:06.710 --> 00:01:06.720 align:start position:0%
never be sure which one obviously
 

00:01:06.720 --> 00:01:08.750 align:start position:0%
never be sure which one obviously
function<00:01:07.140><c> f</c><00:01:07.380><c> is</c><00:01:07.560><c> evaluated</c><00:01:07.920><c> last</c><00:01:08.220><c> because</c><00:01:08.580><c> it</c>

00:01:08.750 --> 00:01:08.760 align:start position:0%
function f is evaluated last because it
 

00:01:08.760 --> 00:01:10.490 align:start position:0%
function f is evaluated last because it
depends<00:01:09.119><c> on</c><00:01:09.360><c> the</c><00:01:09.540><c> result</c><00:01:09.780><c> of</c><00:01:10.260><c> the</c><00:01:10.380><c> other</c>

00:01:10.490 --> 00:01:10.500 align:start position:0%
depends on the result of the other
 

00:01:10.500 --> 00:01:13.030 align:start position:0%
depends on the result of the other
functions<00:01:11.159><c> let's</c><00:01:11.820><c> consider</c><00:01:12.240><c> this</c><00:01:12.479><c> example</c>

00:01:13.030 --> 00:01:13.040 align:start position:0%
functions let's consider this example
 

00:01:13.040 --> 00:01:15.770 align:start position:0%
functions let's consider this example
what<00:01:14.040><c> let's</c><00:01:14.700><c> say</c><00:01:14.880><c> we</c><00:01:15.060><c> call</c><00:01:15.180><c> a</c><00:01:15.360><c> function</c><00:01:15.600><c> with</c>

00:01:15.770 --> 00:01:15.780 align:start position:0%
what let's say we call a function with
 

00:01:15.780 --> 00:01:17.870 align:start position:0%
what let's say we call a function with
an<00:01:15.900><c> argument</c><00:01:16.200><c> of</c><00:01:16.439><c> two</c><00:01:16.619><c> what's</c><00:01:17.400><c> the</c><00:01:17.580><c> correct</c>

00:01:17.870 --> 00:01:17.880 align:start position:0%
an argument of two what's the correct
 

00:01:17.880 --> 00:01:18.950 align:start position:0%
an argument of two what's the correct
result<00:01:18.060><c> here</c>

00:01:18.950 --> 00:01:18.960 align:start position:0%
result here
 

00:01:18.960 --> 00:01:20.690 align:start position:0%
result here
is<00:01:19.439><c> it</c><00:01:19.560><c> four</c><00:01:19.740><c> or</c><00:01:19.979><c> five</c>

00:01:20.690 --> 00:01:20.700 align:start position:0%
is it four or five
 

00:01:20.700 --> 00:01:22.850 align:start position:0%
is it four or five
well<00:01:21.240><c> it</c><00:01:21.600><c> depends</c><00:01:21.840><c> on</c><00:01:22.020><c> the</c><00:01:22.140><c> evaluation</c><00:01:22.560><c> order</c>

00:01:22.850 --> 00:01:22.860 align:start position:0%
well it depends on the evaluation order
 

00:01:22.860 --> 00:01:25.310 align:start position:0%
well it depends on the evaluation order
and<00:01:23.640><c> it's</c><00:01:23.820><c> not</c><00:01:24.119><c> really</c><00:01:24.360><c> specified</c><00:01:24.840><c> for</c><00:01:25.140><c> the</c>

00:01:25.310 --> 00:01:25.320 align:start position:0%
and it's not really specified for the
 

00:01:25.320 --> 00:01:26.870 align:start position:0%
and it's not really specified for the
solidity<00:01:25.740><c> compiler</c>

00:01:26.870 --> 00:01:26.880 align:start position:0%
solidity compiler
 

00:01:26.880 --> 00:01:28.749 align:start position:0%
solidity compiler
this<00:01:27.420><c> is</c><00:01:27.540><c> not</c><00:01:27.659><c> unique</c><00:01:27.960><c> to</c><00:01:28.140><c> solidity</c>

00:01:28.749 --> 00:01:28.759 align:start position:0%
this is not unique to solidity
 

00:01:28.759 --> 00:01:31.370 align:start position:0%
this is not unique to solidity
insufficient<00:01:29.759><c> specification</c><00:01:30.479><c> to</c><00:01:31.020><c> of</c>

00:01:31.370 --> 00:01:31.380 align:start position:0%
insufficient specification to of
 

00:01:31.380 --> 00:01:33.830 align:start position:0%
insufficient specification to of
expected<00:01:31.920><c> Behavior</c><00:01:32.460><c> can</c><00:01:33.000><c> be</c><00:01:33.119><c> found</c><00:01:33.299><c> in</c><00:01:33.540><c> all</c>

00:01:33.830 --> 00:01:33.840 align:start position:0%
expected Behavior can be found in all
 

00:01:33.840 --> 00:01:35.450 align:start position:0%
expected Behavior can be found in all
kinds<00:01:34.080><c> of</c><00:01:34.140><c> different</c><00:01:34.380><c> programming</c><00:01:34.979><c> languages</c>

00:01:35.450 --> 00:01:35.460 align:start position:0%
kinds of different programming languages
 

00:01:35.460 --> 00:01:38.030 align:start position:0%
kinds of different programming languages
a<00:01:36.299><c> big</c><00:01:36.420><c> headache</c><00:01:36.960><c> for</c><00:01:37.140><c> everyone</c><00:01:37.320><c> involved</c>

00:01:38.030 --> 00:01:38.040 align:start position:0%
a big headache for everyone involved
 

00:01:38.040 --> 00:01:40.670 align:start position:0%
a big headache for everyone involved
does<00:01:38.700><c> this</c><00:01:38.880><c> matter</c><00:01:39.060><c> in</c><00:01:39.299><c> practice</c><00:01:39.540><c> yes</c><00:01:40.500><c> of</c>

00:01:40.670 --> 00:01:40.680 align:start position:0%
does this matter in practice yes of
 

00:01:40.680 --> 00:01:43.550 align:start position:0%
does this matter in practice yes of
course<00:01:40.860><c> it</c><00:01:41.700><c> does</c><00:01:41.880><c> as</c><00:01:42.600><c> it</c><00:01:42.840><c> can</c><00:01:43.020><c> lead</c><00:01:43.380><c> to</c>

00:01:43.550 --> 00:01:43.560 align:start position:0%
course it does as it can lead to
 

00:01:43.560 --> 00:01:47.149 align:start position:0%
course it does as it can lead to
unexpected<00:01:44.400><c> Behavior</c><00:01:44.939><c> results</c><00:01:45.560><c> by</c><00:01:46.560><c> analyzing</c>

00:01:47.149 --> 00:01:47.159 align:start position:0%
unexpected Behavior results by analyzing
 

00:01:47.159 --> 00:01:48.890 align:start position:0%
unexpected Behavior results by analyzing
the<00:01:47.460><c> code</c><00:01:47.640><c> generator</c><00:01:48.119><c> of</c><00:01:48.360><c> the</c><00:01:48.479><c> solidity</c>

00:01:48.890 --> 00:01:48.900 align:start position:0%
the code generator of the solidity
 

00:01:48.900 --> 00:01:51.289 align:start position:0%
the code generator of the solidity
compiler<00:01:49.500><c> our</c><00:01:49.979><c> collecting</c><00:01:50.520><c> and</c><00:01:50.759><c> found</c><00:01:51.000><c> three</c>

00:01:51.289 --> 00:01:51.299 align:start position:0%
compiler our collecting and found three
 

00:01:51.299 --> 00:01:54.469 align:start position:0%
compiler our collecting and found three
cases<00:01:51.780><c> of</c><00:01:52.200><c> unusual</c><00:01:52.920><c> evaluation</c><00:01:53.460><c> orders</c><00:01:54.000><c> which</c>

00:01:54.469 --> 00:01:54.479 align:start position:0%
cases of unusual evaluation orders which
 

00:01:54.479 --> 00:01:57.230 align:start position:0%
cases of unusual evaluation orders which
this<00:01:54.659><c> talk</c><00:01:54.899><c> is</c><00:01:55.259><c> about</c><00:01:55.439><c> yes</c><00:01:56.340><c> most</c><00:01:56.820><c> of</c><00:01:56.939><c> the</c><00:01:57.119><c> time</c>

00:01:57.230 --> 00:01:57.240 align:start position:0%
this talk is about yes most of the time
 

00:01:57.240 --> 00:01:59.450 align:start position:0%
this talk is about yes most of the time
evaluation<00:01:57.960><c> order</c><00:01:58.259><c> is</c><00:01:58.560><c> as</c><00:01:58.740><c> expected</c><00:01:59.220><c> from</c>

00:01:59.450 --> 00:01:59.460 align:start position:0%
evaluation order is as expected from
 

00:01:59.460 --> 00:02:02.450 align:start position:0%
evaluation order is as expected from
Left<00:01:59.640><c> of</c><00:01:59.880><c> right</c><00:02:00.060><c> but</c><00:02:00.840><c> not</c><00:02:01.020><c> always</c><00:02:01.259><c> first</c><00:02:02.159><c> two</c>

00:02:02.450 --> 00:02:02.460 align:start position:0%
Left of right but not always first two
 

00:02:02.460 --> 00:02:04.609 align:start position:0%
Left of right but not always first two
examples<00:02:02.939><c> are</c><00:02:03.299><c> the</c><00:02:03.479><c> opcodes</c><00:02:03.899><c> add</c><00:02:04.200><c> mode</c><00:02:04.439><c> and</c>

00:02:04.609 --> 00:02:04.619 align:start position:0%
examples are the opcodes add mode and
 

00:02:04.619 --> 00:02:07.609 align:start position:0%
examples are the opcodes add mode and
mule<00:02:04.920><c> mode</c><00:02:05.520><c> and</c><00:02:06.240><c> here</c><00:02:06.659><c> the</c><00:02:06.899><c> evaluation</c><00:02:07.320><c> order</c>

00:02:07.609 --> 00:02:07.619 align:start position:0%
mule mode and here the evaluation order
 

00:02:07.619 --> 00:02:10.190 align:start position:0%
mule mode and here the evaluation order
surprisingly<00:02:08.340><c> is</c><00:02:08.520><c> from</c><00:02:08.640><c> right</c><00:02:08.819><c> to</c><00:02:09.060><c> left</c><00:02:09.239><c> so</c><00:02:09.959><c> if</c>

00:02:10.190 --> 00:02:10.200 align:start position:0%
surprisingly is from right to left so if
 

00:02:10.200 --> 00:02:14.690 align:start position:0%
surprisingly is from right to left so if
we<00:02:10.440><c> evaluate</c><00:02:11.039><c> F</c><00:02:11.459><c> of</c><00:02:11.700><c> 2</c><00:02:11.940><c> it</c><00:02:12.900><c> first</c><00:02:13.200><c> evaluates</c>

00:02:14.690 --> 00:02:14.700 align:start position:0%
we evaluate F of 2 it first evaluates
 

00:02:14.700 --> 00:02:18.830 align:start position:0%
we evaluate F of 2 it first evaluates
a<00:02:15.379><c> incremented</c><00:02:16.379><c> by</c><00:02:16.620><c> one</c><00:02:16.860><c> and</c><00:02:17.580><c> only</c><00:02:17.840><c> later</c>

00:02:18.830 --> 00:02:18.840 align:start position:0%
a incremented by one and only later
 

00:02:18.840 --> 00:02:21.949 align:start position:0%
a incremented by one and only later
evaluates<00:02:19.800><c> the</c><00:02:20.280><c> first</c><00:02:20.459><c> argument</c><00:02:20.959><c> which</c>

00:02:21.949 --> 00:02:21.959 align:start position:0%
evaluates the first argument which
 

00:02:21.959 --> 00:02:25.190 align:start position:0%
evaluates the first argument which
results<00:02:22.459><c> in</c><00:02:23.459><c> add</c><00:02:23.879><c> mode</c><00:02:24.180><c> with</c><00:02:24.540><c> argument</c><00:02:24.900><c> three</c>

00:02:25.190 --> 00:02:25.200 align:start position:0%
results in add mode with argument three
 

00:02:25.200 --> 00:02:26.510 align:start position:0%
results in add mode with argument three
two

00:02:26.510 --> 00:02:26.520 align:start position:0%
two
 

00:02:26.520 --> 00:02:28.190 align:start position:0%
two
instead<00:02:27.239><c> of</c>

00:02:28.190 --> 00:02:28.200 align:start position:0%
instead of
 

00:02:28.200 --> 00:02:31.869 align:start position:0%
instead of
2<00:02:28.560><c> 2</c><00:02:29.340><c> as</c><00:02:30.060><c> you</c><00:02:30.180><c> might</c><00:02:30.360><c> have</c><00:02:30.540><c> expected</c>

00:02:31.869 --> 00:02:31.879 align:start position:0%
2 2 as you might have expected
 

00:02:31.879 --> 00:02:34.250 align:start position:0%
2 2 as you might have expected
interestingly<00:02:32.900><c> this</c><00:02:33.900><c> is</c><00:02:34.020><c> actually</c>

00:02:34.250 --> 00:02:34.260 align:start position:0%
interestingly this is actually
 

00:02:34.260 --> 00:02:37.850 align:start position:0%
interestingly this is actually
documented<00:02:35.040><c> in</c><00:02:35.280><c> the</c><00:02:35.819><c> solidity</c><00:02:36.720><c> however</c><00:02:37.500><c> not</c>

00:02:37.850 --> 00:02:37.860 align:start position:0%
documented in the solidity however not
 

00:02:37.860 --> 00:02:40.729 align:start position:0%
documented in the solidity however not
where<00:02:38.040><c> you</c><00:02:38.220><c> expect</c><00:02:38.480><c> in</c><00:02:39.480><c> solidity</c><00:02:40.020><c> there</c><00:02:40.620><c> are</c>

00:02:40.729 --> 00:02:40.739 align:start position:0%
where you expect in solidity there are
 

00:02:40.739 --> 00:02:42.589 align:start position:0%
where you expect in solidity there are
currently<00:02:40.980><c> two</c><00:02:41.160><c> ways</c><00:02:41.519><c> on</c><00:02:41.700><c> how</c><00:02:41.879><c> code</c><00:02:42.120><c> can</c><00:02:42.420><c> be</c>

00:02:42.589 --> 00:02:42.599 align:start position:0%
currently two ways on how code can be
 

00:02:42.599 --> 00:02:45.589 align:start position:0%
currently two ways on how code can be
compiled<00:02:43.080><c> the</c><00:02:43.680><c> default</c><00:02:44.040><c> code</c><00:02:44.340><c> generation</c><00:02:44.879><c> and</c>

00:02:45.589 --> 00:02:45.599 align:start position:0%
compiled the default code generation and
 

00:02:45.599 --> 00:02:48.290 align:start position:0%
compiled the default code generation and
the<00:02:45.780><c> new</c><00:02:45.900><c> code</c><00:02:46.140><c> generation</c><00:02:46.860><c> via</c><00:02:47.459><c> the</c><00:02:47.940><c> UL</c><00:02:47.940><c> IR</c>

00:02:48.290 --> 00:02:48.300 align:start position:0%
the new code generation via the UL IR
 

00:02:48.300 --> 00:02:52.070 align:start position:0%
the new code generation via the UL IR
pipeline<00:02:49.440><c> in</c><00:02:50.099><c> in</c><00:02:50.220><c> the</c><00:02:51.080><c> documentation</c>

00:02:52.070 --> 00:02:52.080 align:start position:0%
pipeline in in the documentation
 

00:02:52.080 --> 00:02:55.610 align:start position:0%
pipeline in in the documentation
describing<00:02:53.040><c> the</c><00:02:54.000><c> Euro</c><00:02:54.780><c> pipeline</c><00:02:55.200><c> it's</c>

00:02:55.610 --> 00:02:55.620 align:start position:0%
describing the Euro pipeline it's
 

00:02:55.620 --> 00:02:58.369 align:start position:0%
describing the Euro pipeline it's
actually<00:02:55.860><c> documented</c><00:02:56.640><c> that</c><00:02:57.300><c> here</c><00:02:57.599><c> the</c>

00:02:58.369 --> 00:02:58.379 align:start position:0%
actually documented that here the
 

00:02:58.379 --> 00:03:00.350 align:start position:0%
actually documented that here the
evaluation<00:02:58.860><c> order</c><00:02:59.099><c> will</c><00:02:59.459><c> no</c><00:02:59.640><c> longer</c><00:02:59.879><c> be</c><00:03:00.000><c> from</c>

00:03:00.350 --> 00:03:00.360 align:start position:0%
evaluation order will no longer be from
 

00:03:00.360 --> 00:03:03.890 align:start position:0%
evaluation order will no longer be from
right<00:03:00.599><c> to</c><00:03:00.780><c> left</c><00:03:01.019><c> but</c><00:03:01.440><c> also</c><00:03:02.099><c> left</c><00:03:02.400><c> right</c><00:03:02.900><c> the</c>

00:03:03.890 --> 00:03:03.900 align:start position:0%
right to left but also left right the
 

00:03:03.900 --> 00:03:05.630 align:start position:0%
right to left but also left right the
most<00:03:04.080><c> interesting</c><00:03:04.500><c> one</c><00:03:04.680><c> is</c><00:03:05.040><c> the</c><00:03:05.220><c> order</c><00:03:05.400><c> of</c>

00:03:05.630 --> 00:03:05.640 align:start position:0%
most interesting one is the order of
 

00:03:05.640 --> 00:03:08.150 align:start position:0%
most interesting one is the order of
evaluation<00:03:06.120><c> inside</c><00:03:06.480><c> events</c><00:03:07.140><c> this</c><00:03:07.860><c> one</c><00:03:07.980><c> is</c>

00:03:08.150 --> 00:03:08.160 align:start position:0%
evaluation inside events this one is
 

00:03:08.160 --> 00:03:09.410 align:start position:0%
evaluation inside events this one is
really<00:03:08.400><c> special</c>

00:03:09.410 --> 00:03:09.420 align:start position:0%
really special
 

00:03:09.420 --> 00:03:11.630 align:start position:0%
really special
the<00:03:10.019><c> parameters</c><00:03:10.620><c> are</c><00:03:10.800><c> evaluated</c><00:03:11.220><c> in</c><00:03:11.519><c> a</c>

00:03:11.630 --> 00:03:11.640 align:start position:0%
the parameters are evaluated in a
 

00:03:11.640 --> 00:03:13.190 align:start position:0%
the parameters are evaluated in a
bizarre<00:03:12.000><c> order</c>

00:03:13.190 --> 00:03:13.200 align:start position:0%
bizarre order
 

00:03:13.200 --> 00:03:15.530 align:start position:0%
bizarre order
first<00:03:13.860><c> the</c><00:03:14.340><c> indexed</c><00:03:14.760><c> parameters</c><00:03:15.300><c> are</c>

00:03:15.530 --> 00:03:15.540 align:start position:0%
first the indexed parameters are
 

00:03:15.540 --> 00:03:17.990 align:start position:0%
first the indexed parameters are
evaluated<00:03:15.959><c> from</c><00:03:16.319><c> right</c><00:03:16.500><c> to</c><00:03:16.680><c> left</c><00:03:16.920><c> then</c><00:03:17.700><c> the</c>

00:03:17.990 --> 00:03:18.000 align:start position:0%
evaluated from right to left then the
 

00:03:18.000 --> 00:03:20.330 align:start position:0%
evaluated from right to left then the
remaining<00:03:18.420><c> parameters</c><00:03:19.019><c> are</c><00:03:19.440><c> evaluated</c><00:03:19.920><c> from</c>

00:03:20.330 --> 00:03:20.340 align:start position:0%
remaining parameters are evaluated from
 

00:03:20.340 --> 00:03:24.470 align:start position:0%
remaining parameters are evaluated from
left<00:03:20.580><c> to</c><00:03:20.819><c> right</c><00:03:21.260><c> wow</c><00:03:22.260><c> who</c><00:03:22.739><c> knew</c><00:03:23.040><c> that</c>

00:03:24.470 --> 00:03:24.480 align:start position:0%
left to right wow who knew that
 

00:03:24.480 --> 00:03:26.330 align:start position:0%
left to right wow who knew that
with<00:03:24.840><c> solidity</c><00:03:25.319><c> death</c><00:03:25.560><c> has</c><00:03:25.800><c> this</c><00:03:26.040><c> in</c><00:03:26.220><c> mind</c>

00:03:26.330 --> 00:03:26.340 align:start position:0%
with solidity death has this in mind
 

00:03:26.340 --> 00:03:29.630 align:start position:0%
with solidity death has this in mind
when<00:03:26.700><c> coding</c><00:03:27.300><c> no</c><00:03:28.019><c> one</c><00:03:28.260><c> right</c>

00:03:29.630 --> 00:03:29.640 align:start position:0%
when coding no one right
 

00:03:29.640 --> 00:03:32.149 align:start position:0%
when coding no one right
this<00:03:30.180><c> can</c><00:03:30.360><c> lead</c><00:03:30.540><c> to</c><00:03:31.260><c> really</c><00:03:31.440><c> strange</c><00:03:31.860><c> or</c>

00:03:32.149 --> 00:03:32.159 align:start position:0%
this can lead to really strange or
 

00:03:32.159 --> 00:03:33.949 align:start position:0%
this can lead to really strange or
unexpected<00:03:32.819><c> Behavior</c>

00:03:33.949 --> 00:03:33.959 align:start position:0%
unexpected Behavior
 

00:03:33.959 --> 00:03:36.890 align:start position:0%
unexpected Behavior
and<00:03:34.500><c> this</c><00:03:34.680><c> is</c><00:03:34.800><c> what</c><00:03:35.040><c> tenen</c><00:03:35.519><c> leveraged</c><00:03:36.120><c> and</c>

00:03:36.890 --> 00:03:36.900 align:start position:0%
and this is what tenen leveraged and
 

00:03:36.900 --> 00:03:38.330 align:start position:0%
and this is what tenen leveraged and
used<00:03:37.080><c> for</c><00:03:37.319><c> his</c><00:03:37.560><c> submission</c><00:03:37.920><c> to</c><00:03:38.220><c> the</c>

00:03:38.330 --> 00:03:38.340 align:start position:0%
used for his submission to the
 

00:03:38.340 --> 00:03:41.449 align:start position:0%
used for his submission to the
underhanded<00:03:38.879><c> solidity</c><00:03:39.300><c> contest</c><00:03:39.780><c> 2022</c>

00:03:41.449 --> 00:03:41.459 align:start position:0%
underhanded solidity contest 2022
 

00:03:41.459 --> 00:03:43.910 align:start position:0%
underhanded solidity contest 2022
he<00:03:41.940><c> wrote</c><00:03:42.180><c> a</c><00:03:42.420><c> simple</c><00:03:42.599><c> decentralized</c><00:03:43.500><c> exchange</c>

00:03:43.910 --> 00:03:43.920 align:start position:0%
he wrote a simple decentralized exchange
 

00:03:43.920 --> 00:03:47.030 align:start position:0%
he wrote a simple decentralized exchange
where<00:03:44.459><c> liquidity</c><00:03:45.060><c> providers</c><00:03:45.780><c> and</c><00:03:46.440><c> the</c><00:03:46.680><c> admin</c>

00:03:47.030 --> 00:03:47.040 align:start position:0%
where liquidity providers and the admin
 

00:03:47.040 --> 00:03:49.490 align:start position:0%
where liquidity providers and the admin
shared<00:03:47.760><c> the</c><00:03:47.879><c> collected</c><00:03:48.299><c> fees</c><00:03:48.720><c> in</c><00:03:49.379><c> a</c>

00:03:49.490 --> 00:03:49.500 align:start position:0%
shared the collected fees in a
 

00:03:49.500 --> 00:03:51.649 align:start position:0%
shared the collected fees in a
legitimate<00:03:50.040><c> tax</c><00:03:50.340><c> the</c><00:03:50.879><c> admin</c><00:03:51.239><c> shouldn't</c><00:03:51.599><c> be</c>

00:03:51.649 --> 00:03:51.659 align:start position:0%
legitimate tax the admin shouldn't be
 

00:03:51.659 --> 00:03:53.089 align:start position:0%
legitimate tax the admin shouldn't be
able<00:03:51.840><c> to</c><00:03:51.959><c> screw</c><00:03:52.260><c> over</c><00:03:52.440><c> the</c><00:03:52.620><c> liquidity</c>

00:03:53.089 --> 00:03:53.099 align:start position:0%
able to screw over the liquidity
 

00:03:53.099 --> 00:03:55.430 align:start position:0%
able to screw over the liquidity
providers<00:03:53.760><c> by</c><00:03:54.599><c> changing</c><00:03:55.019><c> the</c><00:03:55.140><c> fees</c>

00:03:55.430 --> 00:03:55.440 align:start position:0%
providers by changing the fees
 

00:03:55.440 --> 00:03:58.070 align:start position:0%
providers by changing the fees
afterwards<00:03:56.099><c> this</c><00:03:57.000><c> is</c><00:03:57.120><c> the</c><00:03:57.299><c> heart</c><00:03:57.420><c> of</c><00:03:57.659><c> tenant</c>

00:03:58.070 --> 00:03:58.080 align:start position:0%
afterwards this is the heart of tenant
 

00:03:58.080 --> 00:04:00.949 align:start position:0%
afterwards this is the heart of tenant
submission<00:03:58.500><c> looks</c><00:03:59.340><c> legit</c><00:03:59.760><c> right</c>

00:04:00.949 --> 00:04:00.959 align:start position:0%
submission looks legit right
 

00:04:00.959 --> 00:04:03.589 align:start position:0%
submission looks legit right
what's<00:04:01.500><c> wrong</c><00:04:01.739><c> here</c><00:04:02.040><c> let's</c><00:04:02.760><c> see</c>

00:04:03.589 --> 00:04:03.599 align:start position:0%
what's wrong here let's see
 

00:04:03.599 --> 00:04:06.050 align:start position:0%
what's wrong here let's see
so<00:04:04.080><c> the</c><00:04:04.200><c> admin</c><00:04:04.620><c> calls</c><00:04:05.519><c> functions</c><00:04:05.879><c> change</c>

00:04:06.050 --> 00:04:06.060 align:start position:0%
so the admin calls functions change
 

00:04:06.060 --> 00:04:08.630 align:start position:0%
so the admin calls functions change
admin<00:04:06.540><c> fees</c><00:04:06.840><c> once</c><00:04:07.260><c> he</c><00:04:07.379><c> wants</c><00:04:07.680><c> to</c><00:04:07.799><c> update</c><00:04:08.459><c> the</c>

00:04:08.630 --> 00:04:08.640 align:start position:0%
admin fees once he wants to update the
 

00:04:08.640 --> 00:04:11.990 align:start position:0%
admin fees once he wants to update the
fee<00:04:09.000><c> it</c><00:04:09.840><c> looks</c><00:04:10.140><c> like</c><00:04:10.379><c> function</c><00:04:11.220><c> retire</c><00:04:11.700><c> old</c>

00:04:11.990 --> 00:04:12.000 align:start position:0%
fee it looks like function retire old
 

00:04:12.000 --> 00:04:15.710 align:start position:0%
fee it looks like function retire old
admin<00:04:12.360><c> fee</c><00:04:12.659><c> is</c><00:04:12.780><c> called</c><00:04:12.959><c> first</c><00:04:13.319><c> which</c><00:04:14.819><c> execute</c>

00:04:15.710 --> 00:04:15.720 align:start position:0%
admin fee is called first which execute
 

00:04:15.720 --> 00:04:19.129 align:start position:0%
admin fee is called first which execute
claim<00:04:16.199><c> fee</c><00:04:16.500><c> this</c><00:04:16.799><c> by</c><00:04:17.100><c> and</c><00:04:17.280><c> distributes</c><00:04:18.139><c> the</c>

00:04:19.129 --> 00:04:19.139 align:start position:0%
claim fee this by and distributes the
 

00:04:19.139 --> 00:04:21.590 align:start position:0%
claim fee this by and distributes the
fees<00:04:20.040><c> based</c><00:04:20.340><c> on</c><00:04:20.459><c> the</c><00:04:20.639><c> old</c><00:04:20.760><c> fee</c><00:04:21.180><c> amount</c><00:04:21.359><c> to</c><00:04:21.479><c> the</c>

00:04:21.590 --> 00:04:21.600 align:start position:0%
fees based on the old fee amount to the
 

00:04:21.600 --> 00:04:24.290 align:start position:0%
fees based on the old fee amount to the
liquidity<00:04:22.019><c> provider</c><00:04:22.979><c> before</c><00:04:23.580><c> calling</c><00:04:24.120><c> set</c>

00:04:24.290 --> 00:04:24.300 align:start position:0%
liquidity provider before calling set
 

00:04:24.300 --> 00:04:26.930 align:start position:0%
liquidity provider before calling set
new<00:04:24.600><c> admin</c><00:04:25.020><c> fee</c><00:04:25.380><c> which</c><00:04:25.979><c> updates</c><00:04:26.400><c> the</c><00:04:26.639><c> admin</c>

00:04:26.930 --> 00:04:26.940 align:start position:0%
new admin fee which updates the admin
 

00:04:26.940 --> 00:04:29.810 align:start position:0%
new admin fee which updates the admin
fee<00:04:27.240><c> to</c><00:04:27.840><c> the</c><00:04:27.960><c> new</c><00:04:28.080><c> admin</c><00:04:28.440><c> fee</c><00:04:28.800><c> but</c><00:04:29.580><c> remember</c>

00:04:29.810 --> 00:04:29.820 align:start position:0%
fee to the new admin fee but remember
 

00:04:29.820 --> 00:04:32.510 align:start position:0%
fee to the new admin fee but remember
what<00:04:30.120><c> we</c><00:04:30.360><c> just</c><00:04:30.540><c> learned</c><00:04:30.840><c> before</c><00:04:31.520><c> indexed</c>

00:04:32.510 --> 00:04:32.520 align:start position:0%
what we just learned before indexed
 

00:04:32.520 --> 00:04:34.790 align:start position:0%
what we just learned before indexed
events<00:04:32.940><c> are</c><00:04:33.360><c> evaluated</c><00:04:33.900><c> from</c><00:04:34.199><c> right</c><00:04:34.380><c> to</c><00:04:34.620><c> left</c>

00:04:34.790 --> 00:04:34.800 align:start position:0%
events are evaluated from right to left
 

00:04:34.800 --> 00:04:37.969 align:start position:0%
events are evaluated from right to left
so<00:04:35.400><c> actually</c><00:04:35.759><c> set</c><00:04:36.479><c> admin</c><00:04:36.960><c> fees</c><00:04:37.259><c> evaluated</c>

00:04:37.969 --> 00:04:37.979 align:start position:0%
so actually set admin fees evaluated
 

00:04:37.979 --> 00:04:40.850 align:start position:0%
so actually set admin fees evaluated
first<00:04:38.520><c> so</c><00:04:39.120><c> the</c><00:04:39.360><c> fee</c><00:04:39.600><c> is</c><00:04:39.660><c> updated</c><00:04:40.020><c> and</c><00:04:40.740><c> only</c>

00:04:40.850 --> 00:04:40.860 align:start position:0%
first so the fee is updated and only
 

00:04:40.860 --> 00:04:44.050 align:start position:0%
first so the fee is updated and only
afterwards<00:04:41.840><c> retire</c><00:04:42.840><c> old</c><00:04:43.080><c> admin</c><00:04:43.500><c> fee</c>

00:04:44.050 --> 00:04:44.060 align:start position:0%
afterwards retire old admin fee
 

00:04:44.060 --> 00:04:46.730 align:start position:0%
afterwards retire old admin fee
distribute<00:04:45.060><c> the</c><00:04:45.479><c> liquidity</c><00:04:46.139><c> fee</c><00:04:46.440><c> to</c><00:04:46.560><c> the</c>

00:04:46.730 --> 00:04:46.740 align:start position:0%
distribute the liquidity fee to the
 

00:04:46.740 --> 00:04:49.550 align:start position:0%
distribute the liquidity fee to the
liquidity<00:04:47.479><c> liquidity</c><00:04:48.479><c> providers</c><00:04:49.020><c> based</c><00:04:49.440><c> on</c>

00:04:49.550 --> 00:04:49.560 align:start position:0%
liquidity liquidity providers based on
 

00:04:49.560 --> 00:04:52.790 align:start position:0%
liquidity liquidity providers based on
the<00:04:49.680><c> new</c><00:04:49.800><c> fee</c><00:04:50.580><c> really</c><00:04:51.300><c> surprising</c>

00:04:52.790 --> 00:04:52.800 align:start position:0%
the new fee really surprising
 

00:04:52.800 --> 00:04:54.890 align:start position:0%
the new fee really surprising
so<00:04:53.340><c> one</c><00:04:53.580><c> important</c><00:04:53.940><c> thing</c><00:04:54.120><c> to</c><00:04:54.360><c> mention</c><00:04:54.479><c> here</c>

00:04:54.890 --> 00:04:54.900 align:start position:0%
so one important thing to mention here
 

00:04:54.900 --> 00:04:57.710 align:start position:0%
so one important thing to mention here
the<00:04:55.380><c> solidity</c><00:04:55.860><c> compiler</c><00:04:56.699><c> as</c><00:04:57.120><c> that</c><00:04:57.300><c> has</c><00:04:57.540><c> two</c>

00:04:57.710 --> 00:04:57.720 align:start position:0%
the solidity compiler as that has two
 

00:04:57.720 --> 00:05:00.469 align:start position:0%
the solidity compiler as that has two
ways<00:04:58.080><c> to</c><00:04:58.139><c> compile</c><00:04:58.560><c> code</c><00:04:59.040><c> the</c><00:04:59.400><c> default</c><00:04:59.699><c> way</c><00:04:59.940><c> and</c>

00:05:00.469 --> 00:05:00.479 align:start position:0%
ways to compile code the default way and
 

00:05:00.479 --> 00:05:03.710 align:start position:0%
ways to compile code the default way and
the<00:05:00.660><c> new</c><00:05:00.840><c> way</c><00:05:01.020><c> using</c><00:05:01.500><c> the</c><00:05:01.740><c> Yule</c><00:05:02.220><c> IR</c><00:05:02.639><c> pipeline</c>

00:05:03.710 --> 00:05:03.720 align:start position:0%
the new way using the Yule IR pipeline
 

00:05:03.720 --> 00:05:06.110 align:start position:0%
the new way using the Yule IR pipeline
in<00:05:04.320><c> the</c><00:05:04.500><c> Yule</c><00:05:04.919><c> IR</c><00:05:05.100><c> pipeline</c><00:05:05.699><c> this</c><00:05:05.820><c> is</c><00:05:05.940><c> no</c>

00:05:06.110 --> 00:05:06.120 align:start position:0%
in the Yule IR pipeline this is no
 

00:05:06.120 --> 00:05:07.730 align:start position:0%
in the Yule IR pipeline this is no
longer<00:05:06.360><c> true</c><00:05:06.600><c> they</c><00:05:07.199><c> are</c><00:05:07.380><c> the</c><00:05:07.500><c> function</c>

00:05:07.730 --> 00:05:07.740 align:start position:0%
longer true they are the function
 

00:05:07.740 --> 00:05:09.710 align:start position:0%
longer true they are the function
evaluation<00:05:08.340><c> order</c><00:05:08.639><c> is</c><00:05:08.940><c> strictly</c><00:05:09.300><c> from</c><00:05:09.540><c> left</c>

00:05:09.710 --> 00:05:09.720 align:start position:0%
evaluation order is strictly from left
 

00:05:09.720 --> 00:05:12.710 align:start position:0%
evaluation order is strictly from left
to<00:05:09.960><c> right</c><00:05:10.100><c> however</c><00:05:11.100><c> by</c><00:05:11.639><c> default</c><00:05:12.000><c> the</c><00:05:12.240><c> solidity</c>

00:05:12.710 --> 00:05:12.720 align:start position:0%
to right however by default the solidity
 

00:05:12.720 --> 00:05:16.189 align:start position:0%
to right however by default the solidity
compiler<00:05:13.259><c> uses</c><00:05:13.560><c> the</c><00:05:13.800><c> old</c><00:05:13.979><c> code</c><00:05:14.940><c> generation</c>

00:05:16.189 --> 00:05:16.199 align:start position:0%
compiler uses the old code generation
 

00:05:16.199 --> 00:05:19.010 align:start position:0%
compiler uses the old code generation
but<00:05:16.860><c> this</c><00:05:17.160><c> may</c><00:05:17.400><c> change</c><00:05:17.639><c> at</c><00:05:18.360><c> any</c><00:05:18.479><c> time</c><00:05:18.720><c> in</c><00:05:18.960><c> the</c>

00:05:19.010 --> 00:05:19.020 align:start position:0%
but this may change at any time in the
 

00:05:19.020 --> 00:05:20.330 align:start position:0%
but this may change at any time in the
future

00:05:20.330 --> 00:05:20.340 align:start position:0%
future
 

00:05:20.340 --> 00:05:22.629 align:start position:0%
future
thanks<00:05:20.940><c> a</c><00:05:21.120><c> lot</c><00:05:21.180><c> happy</c><00:05:21.600><c> to</c><00:05:21.840><c> take</c><00:05:22.020><c> any</c><00:05:22.380><c> question</c>

00:05:22.629 --> 00:05:22.639 align:start position:0%
thanks a lot happy to take any question
 

00:05:22.639 --> 00:05:26.029 align:start position:0%
thanks a lot happy to take any question
one<00:05:23.639><c> minute</c><00:05:23.820><c> left</c>

00:05:26.029 --> 00:05:26.039 align:start position:0%
one minute left
 

00:05:26.039 --> 00:05:29.039 align:start position:0%
one minute left
foreign

