[Music]
really glad to be here today my name is
Andrew and this is my this is my
coworker DC Posh and we are from the Dao
team over the past few days there has
been a lot of talk around um the
fragmentation of ethereum and how all
the l2s are separate and creates a bad
user EXP experence for trying to
interrupt between these
l2s the past few months we've been
working on something new at D that we're
excited to show you today this is a step
forward towards unifying ethereum using
technology that already exists today
while maintaining the core values of
permissionless and
trustless and let's get started with DC
introducing the problem of rment and
what it looks like today sounds great
hey everyone yes I didn't forget about
this by the way they scheduled us back
to back so I just got off of a panel on
the next stage over came straight here
glad to see you all um let's talk about
this
so we're gonna oh see do you have the
clicker yeah perfect thank you so the
problem we're going to talk about today
is one that I think many of you are
going to be very familiar with uh how
many of you here have used poly Market
how many of you here have ever seen a
screen that says something like you know
only send this token on this chain other
funds might be
lost all right more than half for sure
um and this is a very common ux right
now so it's like select polygon as the
network not polygon ZK evm or you may
lose funds um and it's also a problem
that you've probably heard a lot at
Devcon where it's like a lot of the
talks here like about uh rollup
fragmentation and about chain
abstraction and about things like that
and I think the aspect of what we're
about to show you that we're really
excited about is that we're going to
only talk about things today that work
today um so so I think there's a lot of
interesting sort of forward-looking
things that people are talking about
around things like uh chain specific
addresses around things like uh wallets
that have bridging built into them uh
but we're going to talk about things
that work right now with wallets sort of
on any chain um and even with you know
custodial apps like coinbase like
binance like lemon um yeah what we're
what we're shooting for is something
like this is from one of vitalik's
recent pieces this idea of one ethereum
something that feels like a cohesive
ecosystem and what we're shooting for is
something that feels as easy to use as
smooth as something like Apple pay so
you have you know like one action you
click Send and it does whatever you
wanted it to do
yeah I'm going to talk very briefly
about sort of the background of like
create to about cross-chain accounts
about sort of the ideas that inspired
this um and then we're going to talk
about intent addresses which is the new
thing we're presenting today um how many
people here have heard of or like know
what create 2
is oh hey wow that is okay very
technical audience that's great perfect
yeah so it lets us commit to a uh it
lets us commit to a contract we can make
an address that only one specific
contract with specific functionality can
exist at that address the sort of
original main use case for this what a
lot of it has been so far is these
cross-chain accounts um so we should do
the next slide with the diagram on it
yeah perfect so this is this idea of
like okay EAS work everywhere you have
things that only work on certain chains
um so for example like if you heard of
the winter mute hack two years ago um
where they had a a Nosa safe that hadn't
yet been deployed on a different chain
and then someone sent funds to it it was
a sa time um with this you know with
like uh cross-chain accounts Universal
accounts you can use create 2 and 4337
to make an account that just works on
every chain um and even like new evm
chains that don't exist yet that one
specific contract will be Deployable
there um there's a whole nice design
space around that and we thought what if
we could go one level deeper what if we
could make this more General um and so
what an intent address is um let's do
yes perfect so intent address lets you
accomplish an arbitrary action just by
sending funds to that
address um so if you can imagine like
let's say I want to put $70 into poly
Market we can generate an address that
represents that intent and then if I
send $70 worth of any coin on any chain
to that address then a reers will be
able to come in and permissionless do
the rest but only that so there's no you
know counterparty risk you're not
necessarily trusting anyone um it's just
by sending money to this address you're
expressing an intent of like I want $70
to show up in this uh you know uh other
place on this specific
chain and so these are the kinds of
things so sending funds via a transfer
via a permit and you can accomplish all
kinds of things like a deposit that was
the example that I started with you can
do swapping and bridging you can even do
arbitrary contract calls um on the
receiving side we did a really nice
launch with our friends at ethereum OS
uh Freedom Factory you know they make a
new uh a new kind of Hardware wallet and
the pre-sale for that involves like
minting a pre-order nft and that's an
arbitrary contract call but you can
still do it via single
transfer um yeah with that I'm going to
hand it back to Andrew and he's going to
walk you through the different steps of
like how we can do progressively more
with intent
addresses one way you can think of
intent addresses that would make it
easier is think of it as sending funds
to someone's wallet address and they
execute a contract call on your behalf
now this sounds kind of worrying you're
sending tokens to someone that you
potentially don't trust and they can do
anything on chain with your
funds this is what the problem that
intent addresses solve you send
uh tokens to an intent address and this
intent address permissionless and
trustless guarantees that only one
action can be executed on chain how do
we do this we we use create 2 like DC
mentioned to do this for those of you
that don't know create two um is a way
of deploying smart
contracts it takes a hash of your
contract code and generates a
deterministic address that you know
beforehand if you change the code you
change the address that the contract is
deployed to this way you know beforehand
exactly what the contract is going to do
when you send the tokens to this
address so we'll use an example here of
minting an nft on using
usdc so I transfer tokens to this create
2 address and then now anyone can come
in deploy the contract to the address
and this contract can only do one thing
it can only mint an nft with a contract
you specify it mints the nft by sending
tokens to that contract and gives the
nft back to the
user now what's the point of doing all
this to all this fancy stuff with create
2 when you can just use your EA wallet
the first thing it enables is a single
wallet popup to uh execute this contract
interaction the normal flow has always
been approve the contract then uh
execute the contract call this is
something we' become numb to in ethereum
and a terrible ux for users that we've
just accepted as something that we have
to deal with with intent addresses if
you noticed all you have to do all the
user has to sign is one transfer
interaction no more two popups just a
single popup to uh execute an on- train
call another benefit this gives you is
it allows people to pay or to interact
with contracts on chain using an
exchange so you can now mint and nft
interact with any contract on chain with
a coinbase or a binance account you
transfer funds to a predetermined
create2 address and that address
executes the uh contract call on your
behalf now how does this move us towards
a unified
ethereum one really cool thing uh in
intent addresses enable you to do is
arbitrary bridging so you can set an
intent address which sends the funds
into a bridge and then on the other side
retrieves the funds out from the bridge
here's an example of how we can do that
so now let's say I want to maintain nft
on base but I only have ethereum on
optimism what can I do with intent
addresses to do this I'll first transfer
my ethereum to an intent address
a relayer comes in
trustless and swaps the ethereum for me
and sends it to a bridge in the contract
I can guarantee that at least X dollar
of usdc must come out of the swap
otherwise the contract reverts and the
relayer relayer can't execute that
function so the relayer completes the
swap sends it into a bridge like
cctp and the later later on the
destination chain this is the cool part
I can now trustless execute the contract
call on the destination chain how do we
do this when the bridge completes it
transfers usdc to the same intent
address on the destination chain this
contract because um optimism and base
are both evm
chains I can use the same contract code
and have it hash to the same create 2
address on both chains so the contract
on the destination chain will
now approve the nft contract and make a
call with
usdc you've just seen how I trustless
sent funds to an intent address and had
my intent completed on the on a separate
chain completely separate chain fully
trustless fully permissionless anyone
can come in to complete this contract
call and your funds will never be stuck
because you yourself can complete it
what doeses this enable for you well I
don't need uh as a user I don't need to
have gas on the destination chain if
someone is building an app with intent
addresses the relayer holds gas on both
chains and the user only needs to hold
gas on the source chain this is because
the relayer completes the contract call
for you on the destination
chain what's next from here well cctp
and other Bridges often take a few
minutes for example cctp can take up to
20 minutes to complete the
bridge how can we do this instantly I
want to do something on another chain
and have it instantly
complete here's how fast finish and
claiming works on the source chain the
flow is the same I send eth to a
contract a relayer comes in swaps it and
initiates a bridge for
me now on the destination chain the
relayer will as as soon as they start
that Source transaction they have a
guarantee that if the bridge if they
trust the bridge 20 minutes later the
funds will arrive so what they can do is
they will they can immediately execute
the contract call for me so they call um
a fast finish function on an escrow
contract and this mins the nft for the
user what the escrow contract does is it
tracks who finished this um this
contract call for the user
and then later when the bridge completes
instead of sending that to the contract
or to the user you send it to the
relayer who finished the contract call
on behalf of the user so if you look at
the funds of the relayer on the
destination chain they execute the
contract call they're down let's say 100
usdc to Mint the nft and then 20 minutes
later when the bridge arrives they get
paid back for that 100 usdc that um
they did they executed on behalf of the
user so 20 minutes later the bridge
completes the bridge transfers the usdc
to in uh the intent address and then now
the relayer can deploy the intent
address and because the relayer address
is tracked in the escrow
contract the intent address knows to
send the funds to the relayer instead of
the user
to summarize what intent addresses does
for unifying ethereum it builds a better
user experience no more two wallet
roundtrips only a single wallet popup
you can pay with your coinbase account
or your binance and this enables a
larger user based to interact with your
app you sponsor gas on the destination
chain so your user no longer has to hold
gas on Two Chains to interact with your
contract better
interoperability you user can pay you
with any coin on any chain and have
trustless and permissionless guarantees
that the intended uh intended action
they wanted to execute gets
executed funds will never be stuck
because the user can themsel can
complete the action if no relayer comes
in and does it for
them how have we used this in the real
world now one of our partners small
brain Games built this app called
tomorrow news it's a prediction Market
that lets you bet on tomorrow's New York
Times
headline you enter in what you think the
New York Times headline is and the more
accurate it is the more you get paid
out however they only accept
ethereum what we did for them is we
built a a deposit flow that allows users
to send any coin on any chain and it
automatically Bridges and swaps using
the intent address mechanism to deposit
funds into the app
another one of our partners is freedom
Factory they're building an open source
open Hardware Hardware phone Hardware
wallet that runs on
ethereum they have a checkout page that
only accepts usdc on base and what we
allow enable them to do is accept um any
coin on any chain to pay for their
wallet if a user doesn't have ether D
gen on base they can pay with their
coins on optimism their coins on
ethereum their coins on um binance smart
chain yeah let's play the demo um I
think they've got
it here's a quick demo of intent
addresses so oh it's got no audio I'll
I'll just narrate it um so this is this
is the the uh like an example of an
intent address in action so we're going
to click any crypto this is actually uh
the Diop pay model um this is our our uh
what we've built around content
addresses shows all of the different
tokens we're going to do a single
transfer in in one token oh over to this
side okay deal
um and almost immediately you should see
the safe payment completed as soon as
that shows the fast finish on the
destination chain has already cleared um
rollup ethereum is really fast and cheap
now we have one cent one second
transactions really beautiful and so you
can see this is already done and then
under the hood 20 minutes later the
relayer will get paid back back via
cctp that's all we've got
there sweet should we do the the
bonuses um perfect uh we have a few
bonus round things where we're going to
show some other things we can do with
intent addresses beyond all of the stuff
we just showed you so the core of it is
like make an experience that kind of
feels as nice as like Apple pay or
Google pay but it lets you do anything
on ethereum from one transfer um but
what if you don't even have gas on the
source chain we talked about not having
gas on the destination chain um for
assets that support it like usdc uh we
can do entirely gasless intense this way
by just having the user sign a message
that is a permit for example a usdc
permit message um and then the relayer
does everything else then uh another
interesting place that we can go with
this
so intent addresses have this property
that they are ephemeral um so we create
an intent address representing one
specific action and then once that
action is done that contract doesn't
need to exist anymore uh self-destruct
some of you are probably familiar with
the history but it's been like a problem
op code in the past um it it used to
have a gas refund associated with it
that was deleted because it caused
problems but at this point self-destruct
only exists within atomically within a
single transaction you can create a
contract you can self-destruct it later
within that same transaction so we
actually think that there's no more
reason to not have the refund and having
the refund would be really nice for use
cases like this it would make intent
addresses a bit cheaper and it would
incentivize anyone who's using ephemeral
addresses like this to clean up after
themselves and not pollute the state
tree um and then lastly uh you know once
this is more um once this idea has more
mileage on it and we know the common use
patterns right now is a new thing it's
exciting once it's sort of uh more Lindy
we could write an ERC that allows a
really beautiful Progressive uux where
wallets that support it can show the
intent where I say I'm sending you know
what I'm actually proposing is a
transfer to an address but it will show
you yeah you're actually sending you
know this much usdc to vitalic eth over
on you know optimism this other chain um
it can surface that to you and then for
wallets that don't support it it'll just
show as a transfer to a be address but
it degrades gracefully at still
works uh I think that's just about all
we've got let's go to let's go to
questions wow guys you have 15 questions
lined up yeah this is so interesting so
let's start with the first one uh what
is the incentive for relayer to deploy
the create two wallet since deploy
contract is usually
expensive you want to do that so there
are two ways you can do this um if
you're running an app and want to use
intent address for your app you can run
your own Reay to provide a better user
experience for your users your users
won't have to pay gas and you can do
cross-chain um cross-chain actions on
their behalf another way you can
incentivize relays is to have um a
tipping mechanism so the user sends some
tokens to the contract and then you can
bake into the contract that the relayer
collects like a 3% fee or however much
you want to incentivize relaters to pick
pick up these uh intents and complete
them for the
user yeah another thing i' would say is
deploying contracts is actually not that
expensive on L2 um which is this system
is definitely built for for you know the
the the rollup Universe um one nice
thing there is that these contracts are
very small because uh we're doing you
know like minimalist proxy you know uh
uh contracts that point to like a
mutable implementation contract and they
just have Constructor ARG ments that
basically encode the parameters of the
action of the transfer the payment
whatever it is and so the size of
contract code that you're deploying for
one of these intent addresses is fairly
small um I'll answer this next one
because it's closely related do intent
addresses lead to increased chain State
bloat this is why we would like the self
self-destruct refund back um we actually
run our intent addresses currently
without chain State bloat with
self-destruct at the end
uh but there's currently no incentive to
do that you don't actually gain anything
from it um and so having that also come
with like a b effectively like a gas
discount for cleaning up after yourself
would be
great okay next question is if multiple
people transfer tokens to an intent
address uh how can the contract know who
sent what and in order to reward them
separately
totally so the intended way an intent
address is to be used is um you generate
like an intent address per user or per
interaction and this way you know like
which user is going to send tokens to
the contract and if other people send it
it could be like funding for U the user
so for example with the nft example for
each user that wants to Mint the nft in
your app you could generate a new intent
address specifying them as the recipient
and then you could also for example
purchase a gift for your friend and
transfer to tokens to that intent
address but the intended way it's to be
used is once per interaction per user
totally and that said it does support
multiple assets going in so you can do
this very nice thing let's say I want to
do an action that takes $100 I want to
place a poly Market bet I can send you
know $50 vers worth of token a and $50
worth of token B to an intent address
over here on on Bas for example and any
realer can come in you know swap those
however it needs needs the intent
address is just going to guarantee that
like whatever they do $100 of usdc have
to go into the bridge and then fast
finish it on the other
side so you can do multi payments but
yeah it's it's not there there's they're
one per action okay next question is uh
do these intent addresses look like
accounts on a salana except for the
relayer the taker is eth I I don't know
about that okay um how much would it
cost to incur the trigger uh to to start
to trigger the the action on um intent
address assum it's just ear C20
transfer so in our experience uh in
particular on l2s it's really cheap to
use this intent contract mechanism so
for an the gas cost you pay as a relayer
is the cost to deploy the contract and
then the cost to execute the function on
the contract so for in 20 transfer
that's like much less than a Cent and
the cost of deploying the contract is
also less than a cent so in our
experience on l2s it's been less than an
incent to use uh intent
addresses totally this is connected to
the next question which is uh what is
the additional cost of deploying
contract code for every
transaction um yeah actually I have a
two-part answer to this so uh
currently we know we're seeing these
intent addresses these intents going
through for for you know on the order of
a cent in gas costs if blobs go more
into price Discovery and blobs become
more expensive the interesting thing
here is uh you know all of the other
things you know compute contract
deployment all of these things actually
stay cheap on L2 the
one scarce resource at that point is
call data and there's some really nice
things we can do to optimize how much
call data we use so we we anticipate
this is going to Stage okay that's it th
up thank you very much thank you
everyone thanks