►
Description
EIP-2535: https://eips.ethereum.org/EIPS/eip-2535
The episode on EIP-173 - https://youtu.be/64VfajtPGJ4
Follow at Twitter:
Nick Mudge @mudgen | Pooja Ranjan @poojaranjan19 | William Schwab @William94029369 | Alita Moore @alitamoore85
Contact Ethereum Cat Herders
Discord: https://discord.gg/sgdnxZe
Twitter: https://twitter.com/EthCatHerders
Medium: https://medium.com/ethereum-cat-herders
GitHub: https://github.com/ethereum-cat-herders/PM
Email: support@ethereumcatherders.com
Website: https://www.ethereumcatherders.com/
A
Today
we
have
got
a
very
special
guest
who
has
been
here
on
the
show
earlier
to
talk
about
another
proposal:
eip173
the
contract
ownership
standard
that
is
already
implemented
in
open
zeppelin
and
some
of
the
other
projects.
So
if
you
are
working
on
something
similar
must
watch
that
episode.
I
will
add
the
link
below
welcome
back
nick,
very
happy
to
have
you
here
today.
We
are
going
to
talk
about
another
proposal
that
is
eip2535
diamond
standard,
but
before
that
please
introduce
yourself
to
our
new
viewers.
B
Hi
there
yeah,
so
I'm
nick
and
I'm
a
solidity
developer.
A
standards
author,
yeah
so
and
I've
worked
on
various
projects
been
working
with
solidity
and
ethereum
for
a
couple
years:
yeah.
Okay,
so
let
me
share
my
screen.
B
All
right,
so
I
thought
I'd
start
off
with
some
benefits
of
of
a
diamond,
so
a
diamond
is
a
contract
that
implements
the
diamond
standard,
and
so
let's
look
at
some
reasons
why
someone
might
want
to
have
a
diamond
okay.
So
the
first
reason
here
is
a
stable
contract
address
that
provides
needed
functionality.
C
B
B
So
that,
if
you
want
to
diamonds,
can
be
upgraded
and
they
they
keep
their
their
address,
just
like
a
like,
if
you're
familiar
with
other
upgradeable
contracts
like
open,
zeppelin's
proxy
contracts
it.
This
provides
the
same
benefit
here
of
when
you
can
upgrade
your
diamond
to
add
additional
functionality
to
your
diamond
to
do
different
things
and
you
have
a
stable
address.
It's
not
going
to
change
okay
and
then
so
so
the
second
benefit
here
single
address
with
functionality
of
multiple
contracts.
B
So
one
thing:
that's
different
from
diamonds
versus
proxy
contracts
like
open,
zeppelin's,
proxy
contract.
Is
that
a
diamond
utilizes
multiple
contracts,
whereas
open
zeppelin's
proxy
contract
it
it
just
has
one
implementation
contract
and
only
proxy
contract
only
pulls
functions
from
one
contract
where
the
diamond
can
pull,
pull
and
use
functions
for
multiple
contracts.
B
Okay,
good,
so
why
so?
The
question
might
be
asked:
why
would
you
want
to
have
a
diamond
that
can
use
multiple
contracts?
Why
not
just
use
one
contract
for
its
implementation?
You
know
like,
like
a
regular
proxy
that
just
uses
one
implementation
contract.
Why
use
multiple
so
there's
different
reasons
that
that
you
might
want
to
do
this?
B
One
reason
is
for
is
for
fine-grained
upgrades,
which
means
that
if
you
have
a
diamond
and
it
provides
some
functionality-
and
you
realize
that
you
want
to
change
something
in
the
contract-
you
want
to
upgrade
it
or
you,
then
maybe
you
just
want
to
change
one
small
thing,
or
maybe
you
just
want
to
add
one
function
or
replace
one
function
and
with
a
diamond
you
can
do
that.
B
So
that's
that's
one
benefit
of
a
diamond.
Is
that
you
can
you
can
change
just
the
parts
of
the
diamond
that
you
want
to
change
and
nothing
else
all
right,
so
there's
I
have
on
this
list
another
a
number
of
benefits,
I'm
not
going
to
discuss
them
all,
because
this
is
more
of
an
introduction.
B
Oh
yeah,
so
one
other
big
use
case
for
diamonds.
Is
it
solves
the
24
kilobyte
maximum
contract
size
limitation?
So
this
this
happens
with
upgradable
contracts.
Where
you
you
have
your
upgradeable
contract,
it's
great!
It's
you
know,
implementing
your
your
non-fungible
tokens
or
or
your
d5
protocol.
Whatever
your
your
system
is
your
diamond,
your
excuse
me,
your
upgradable
contract
is
doing
it
and
then
you,
you
realize
that
you
need
to
upgrade
it
to
add
some
more
functionality.
B
B
One
of
the
things
can
happen
is
you'll
hit.
The
max
contract
size
limit
so
like
contracts
on
ethereum
can
only
be
get
so
big
and
then
they
can't
be
deployed
anymore
and
that
max
is
24.
Kilobytes
and
the
diamond
doesn't
have
that
problem
and
it
doesn't
have
that
problem
because
it
uses
multiple,
multiple
contracts
or
implementations
and
for
the
diamond
standard
we
call
it
faucets,
so
diamond
uses
multiple
faucets.
B
A
Yeah,
I
may
have
a
question
here,
so
this
contract
size
limit.
I
understand
that
this
is
something
added
in
like
a
later
version
of
diamond
protocol,
right
diamond
proposal
that
you
had
initially.
So
why
not
to
come
up
with
a
separate
proposal
for
that
or
why
to
add
it
in
the
existing
one?
Does
it
add
value
to
your
existing
proposal.
C
No,
it's
always
been
there.
I'm
sorry.
I
got
confused
with
the
diamond
storage
version,
yeah,
no
problem,
it's
okay!
Oh.
B
A
B
Yeah,
so
we
could
cover,
we
could
cover
that
a
little
bit
or
recover
it
now.
D
B
B
That
that
you
can,
you
know,
deploy
your
diamond
to
a
test
net
and
have
you
know,
people
start
using
it
and
then
get
feedback
and
then
go
ahead
and
upgrade
your
your
diamond
and
then
there's
another
thing
about
a
diamond
is:
is
it's
upgradable,
but
you
have
the
option
of
making
it
no
longer
upgradable
anymore,
so
that
can
help
with
development.
B
If
that,
if
you
know
during
testing
or
you
know,
you're
letting
users
try
out
the
application
on
a
test
network
and
you
can
upgrade
as
much
as
you
want,
but
for
this
particular
application
you
want
to
be
immutable
when
you
deploy
it
on
ethereum
main
net.
You
have
that
option
with
a
diamond
where
you
can,
you
can
just
make
it
so
that
it
can
no
longer
be
upgraded
and.
D
B
D
I'm
more
just
picking
and
choosing
what
you
like,
what
what
parts
of
the
of
these
benefits
you
want
like
you
could
get
the
split
code,
so
you
don't
run
into
the
24kb
limit
but
still
choose
to
make
it
immutable
like
you,
don't
have
to
necessarily
take
all
the
options
that
you're
offering
here
you
can
sort
of
customize
how
you
want
to
use
your
own
diamond.
Oh.
B
B
Yeah
so
I'd
say:
that's
some
of
the
the
good
benefits
there
I
mean.
Another
benefit
is
that
there
can
be
some
in
some
applications.
There
can
be
some
gas
savings
using
a
diamond
because,
because
a
diamond
can
be
unlimited
in
size,
you
can
it
enables
you
to
access
contract
storage
within
a
diamond.
Without
you
know,
without
having
to
do
calls
external
function,
calls
to
other
contracts.
B
Good
yeah,
so
let's
look
at
that
all
right.
So
what
is
a
diamond
how's
it
implemented.
So,
as
has
been
discussed,
the
diamond
is
a
contract
that
gets
its
external
functions
from
other
contracts
and
inside
of
diamond.
It
has
a
mapping
which
maps
functions
to
other
contracts
and
these
other
contracts,
I'm
calling
faucets.
B
You
know
like
faucets
from
a
diamond
different
sides
of
a
diamond.
So
what
happens?
When
you
call
a
function
on
a
diamond,
then
the
diamond
looks
uses
that
mapping
and
goes.
Oh.
This
function
is
being
called
and
that
that
function
comes
from
this
other
faucet
and
it
is
able
to
pull
the
the
code.
The
function
from
that
other
faucet
and
execute
it
within
the
diamond.
So
the
diamond
really
uses
other
contracts
as
its
as
its
library
of
functions.
D
B
Yeah
I
mean
it's,
I
mean
I'm
saying
the
word
library
more
conceptually.
The
solidity
has
a
library
functionality,
I'm
not
you
know
not
using
library
functionality
here,
solidity,
library,
functionality,
I'm
just
more
conceptually
saying
that
you
know
a
diamond
uses
other
con
other
other
faucets
as
its
library
of
functions,
but
I'm
not
talking
about
solidity's
library.
B
Yeah,
but
that's
good
to
distinguish
that
because
then
yeah,
what
I'm
talking
about?
What
I
mean
by
that
li
solidity's
library
functionality
does
work
within
diamonds
for
things
and
it's
very
useful
with
diamonds.
I
found.
B
B
So
every
diamond
has
this
function,
that's
how
you
add,
add
stuff
and
change
it.
That's
the
upgrade
function
and
then
a
diamond
has
four
standard
functions
that
are
used
to
tell
you
what's
in
the
diamond.
Like
you
know,
if
you
have
a
diamond,
you
want
to
know
what
functions
does
it
have
and
where
do
those
functions
come
from,
and
so
these
four
standard
functions
give
you
that
information.
So
at
any
time
you
can
look
into
a
diamond,
it
makes
it
transparent.
B
D
So
maybe
you
could
detail
how
this,
how
this
differs
from
normal
importing
like
let's
say
that
I'm
using
safe
math
from
opencephalon,
or
something
like
that,
so
usually
I
can
just
import
the
contract.
I
have
all
those
functions
available.
It
sounds
like
there's
something
much
more
modular
happening
here.
So
how
exactly
does
this
differ
from
a
normal
import.
B
B
And
so
that's
where
this
diamond
cut
function
comes
on
where
the
diamond
cup
function
allows
you
to
add
functionality
from
other
already
deployed
contracts,
so
you
know
versus
where
you're
importing,
if
you're
importing
something
you're,
creating
a
contract
that
that's
going
to
be
deployed
and
you're
importing
all
the
things
and
you
it's
all
going
to
be
added
to
one
contract.
That's
going
to
be
deployed
with
a
diamond.
D
So
for
a
normal
import,
you're
saying
that
we're
putting
all
of
that
code
inside
the
contract
before
deploy
and
then
that
contract
itself
contains
sort
of
all
the
imported
code.
Inside
of
it
also,
and
then
it
gets
sent
to
the
then
it
gets
sent
to
the
chain,
whereas
over
here
what
you're
dealing
with
is
you're
actually
connecting
components
from
different
blocks
from
different
parts
of
the
blockchain
and
sort
of
creating
a
cross
functionality
between
contracts
that
are
already
deployed.
B
Yeah,
that's
correct
great
yeah,
which,
which
brings
up
an
interesting
factor.
Another
benefit
is,
is
that
you
know
you
can
deploy
contracts
onto
the
the
network.
Faucets
these
these
these
contracts
that
get
used
by
diamonds.
You
can
deploy
them
to
the
network,
and
then
you
can
deploy
your
your
diamonds
and
then
you
can
connect
the
two.
But
the
cool
thing
is
that
these
faucets
you
deploy,
can
be
used
by
any
number
of
diamonds.
So
you
have
this.
D
B
D
B
And
then
yeah
so
then
I
think
the
the
three
main
components.
D
It
looks
like
that
is
close
to
the
end
of
your
list.
I've
got
a
bunch
of
technical
questions.
I'd
like
to
ask
you
about
this.
Would
this
be
a
good
time
for
me
to
sort
of
move
into
that?
Absolutely
okay,
great,
so,
first
just
actually
sort
of
in
the
coding
style.
I'm
curious
about
the
way
that
you
put
this
together
the
actual
standard
itself.
I
have
not
made
it
through
through
the
implementations
and
the
examples
that
you've
given.
D
Would
you
say
that
it
follows
more
of
a
object-oriented
or
more
of
a
functional
standard,
as
in
when
we're
looking
at
a
diamond
working
is
or
is
there
some
kind
of
object,
that's
getting
mutated
or
is
there
like?
I
mean?
Maybe
you
could
describe
that
that
process
about
exactly
how
the
data
is
getting
passed
around
or
how
the
contracts
are
connecting
to
each
other
and
bringing
in
data
from
each
other
yeah
sure.
B
So
the
diamond
uses
an
operation
code
from
the
from
ebm,
which
is
delegate
call
and
so
and
delegate
call
allows
a
contract
to
borrow
the
code
from
another
contract
and
execute
it
as
its
own
and
that's
really
what
a
diamond
does
when
a
function
external
function
call
is
called
on
a
diamond.
The
diamond
goes
okay,
I
got
this.
I
got
this
function
call
and
it
finds
out.
E
So
I'm
just
going
to
chime
in
really
quickly
when
you
say
it
calls
a
function,
does
it
return
the
function
or
is
it
like
an
op
code
in
the
sense
that
it
only
sends
out
like
the
parameters
and
then
receives
the
result.
B
Oh,
so
that's
a
good
question,
and
this
goes
so
yeah.
I
can
be
more
specific
when
an
external
function
is
called
on
a
diamond,
a
diamond.
It's
a
contract,
ethereum
contract
and
you
can
have
a
fallback
function
and
that's
how
it
works
is
a
diamond
has
a
fallback
function.
The
fallback
function
is
when
you
call
a
function
on
a
contract
and
that
contract
doesn't
have
that
function.
What
happens?
Is
it
executes
its
fallback
function?
B
So
when
you
call
a
function
on
a
diamond
it
just
it
goes
that
that
call
goes
to
the
fallback
function
and
then
the
fallback
function
then
uses
delegate
call
to
call
the
function
on
the
on
the
faucet
now
about
return
and
once
it
once
it
calls
that
that
function
on
the
faucet
that
that
function
might
have
return
values,
and
so
the
diamond
gets
those
return,
values
and
also
and
returns
those
return
values
to
the
caller.
Whoever
called
the
diamond
gets
the
return
values.
B
Does
that
answer
your
question
so
like
a
guy
like
when
you
call
a
function
and
that
function
has
parameters?
Okay,
the
diamond
gets
that
forwards
it
to
a
faucet
pause.
It
executes
it
lots,
it
has
return
values.
Faucet
gives
it
to
the
the
diamond
diamond
then
go
ahead
and
also
returns
the
return
values
yeah.
E
That
makes
sense
it's
just
it
sounds.
That's
really
cool
actually,
so
it
kind
of
sounds
like
you're
sort
of
separating
the
actual
computation
from
this
from
the
contract.
So
that's
cool
yeah
that
answers.
D
My
question:
thank
you,
yeah.
I
am
curious
about
the
gas
overhead
now
this
might
be
a
good
time
to
even
segue
a
bit
into
proxy
contracts.
Proxy
contracts
have
been
a
pattern
for
a
while
and
used
for
upgradability,
but
proxy
contracts.
The
best
man,
knowledge
also
make
judicious
use
of
use
of
delegate
call.
Am
I
correct
about
that?
That's.
D
How
would
you
differentiate
between
diamonds
and
the
regular,
I
so
to
speak
proxy
contract
patterns
that
we've
seen
up
until
now?
I
I'm
seeing
with
the
diamonds
that
you
can
pull
in
specific
functions
and
also
that
there's
much
more
granular
control
of
those
functions
inside
the
contract.
But
maybe
you
could
compare
and
contrast
proxy
contracts
and
titans.
B
B
They
have,
they
only
have
only
one
implementation
contract,
so
so
they
work
the
same
way.
A
proxy
contract
has
a
fallback
function.
You
call
you
call
external
function
on
the
proxy
contract
the
fallback
gets
executed,
which
then
does
delegate
call
to
to
call
on
the
implementation
contract.
So
the
proxy
contract
works
similarly
to
a
diamond.
B
In
that
way,
different
big
differences,
as
I
said
diamond,
can,
is
mapped
to
lock,
potentially
mapped
to
lots
of
different
faucets,
not
just
one,
and
so
so
that
that
also
solves
the
max
contract
size
problem
I
talked
about
earlier.
A
proxy
contract
will
run
into
the
max
contract
size
if
it
gets
too
big,
because
it
only
has
one
implementation
contract
and
that
implementation
contract
can
get
too
big,
but
a
diamond
could
have
tons
of
faucets
and
they
could
all
be
small
faucets,
so
they
never
get
the
max
contract
size.
D
B
Yeah,
so
that
that
flow
is
is
very,
very
similar,
so
with
a
proxy
contract,
you
know
the
external
call
happens
or
the
fallback
function
executes
and
then
there's
a
lookup
in
state
in
in
contract
state
to
find
out.
What's
the
implementation
contract
address
and
it
uses
that
to
execute
the
function
and
the
diamond
is
the
same
thing
yeah.
So
it's
like
the
flow
is
the
is
this.
B
The
only
difference
is
that
I
think
a
proxy
doesn't
really
need
a
mapping,
a
map
to
map
the
function
call
to
the
implementation,
because
the
implementation
contract
is
the
same
for
all
function
calls,
whereas
a
diamond
you
have,
you
have
to
have
a
map,
an
actual
mapping,
that
maps
function
calls
to
two
faucets,
but
basically
the
flow
is
the
same.
There.
D
So
gas
gas
cost
between
the
two
should
be
roughly
like.
Roughly
analogous,
it
should
be
roughly
the
same
gas
for
either
a
proxy
or
for
or
for
a
diamond,
that's
correct.
They're
the
same
I
would
actually
like
to
to
segue
from
that
into
the
topic
of
gas.
So
this
it's
by
pushing
storage
off
to
the
different
facets
on
the
diamond.
So
it
seems
like
you
so
you've
solved
a
lot
of
storage
issues,
but
by
pushing
it
to
delegate
call
we'll
make
calling
these
functions
slightly
more
expensive.
B
Right
now,
I
I
don't
see
it
as
prohibitive.
It's
you
know
the
with
the
diamond.
It's
sort
of
it
has
has
qualities
that
mitigates
itself
for
gas,
so
that
it,
you
know,
because
you're,
where
you're
calling
delegate
callers,
there's
a
little
bit
more
gas
to
call
a
diamond
or
a
proxy
contract
than
calling
a
regular
contract,
but
it
makes
up
for
it
in
a
few
ways.
B
One
of
the
ways,
for
example,
is
that
when
you,
when
you
compile
a
a
a
contract,
you
can
solidity,
has
an
optimizer
and
the
optimizer
can
has.
This
has
a
basically
a
setting
and
the
higher
you
make
that
setting
the
more
the
more
gas
efficient
the
the
contract
becomes
when
you
call
functions
on
it,
but
also
the
higher
that
setting
it
kind
of
more
gas
efficient
when
you
call
functions,
but
it
also
increases
the
by
code,
the
size
of
your
contract.
B
B
If
you
can't
have
a
very
high
setting,
I
mean
in
some
cases
it
depends
how
big
your
contract
is.
But
if
your
contract
is
getting
close
to
the
limit,
then
you
can't
have
a
high
a
high
setting
for
your
opt
for
the
optimizer
so
but
with
with
so
that
so
that
so
then
you
have
to
have
it
lower,
which
means
the
gas
cost
to
call.
Your
functions
is
more
because
that
setting
is
lower,
but
with
a
faucet.
B
Special
use
case
functions
to
your
diamond
for
gas,
for
gas
cost
reasons,
for
an
example
is
like,
let's
say,
you're
implementing
a
non-fungible
token
a
contract,
and
you
realize
that
you
know
you
might
want
to
have
batch
functions
for
transferring
a
whole
bunch
of
your
non-fungible
tokens
at
once.
You
can
do
that
in
a
diamond.
You
can
implement
those
those
functions
and
you
can
implement
other
functions
that
give
you
gas
savings,
possibility
again
you're
not
going
to
hit
the
max
contract
size
limit.
B
So
those
are
just
a
couple
examples
where
you
know
with
a
diamond.
You
can
do
these
extra
things
for
gas.
D
As
in
you're
saying
that
you've
definitely
got
a
balance
here,
even
if
you
do
end
up
spending
more
on
delegate
calls
versus
regular
function,
calls
the
fact
that
you
can
optimize
a
number
of
smaller
contracts
much
more
easily
than
one
large
contract
already
should
offset
gas
costs
to
a
certain
degree,
and
certainly
also,
if
you're
talking
about
people
who
are
running
up
against
one
of
24
kilobytes.
So
it's
not
like.
They
really
have
another
option
in
the
cards.
Anyway,
I
mean
so
yeah.
B
Okay,
and
so
for
these
two
smaller
contracts
to
work,
they
have
to
call
each
other
and
those
function
calls
between
each
other
cost
gas.
But
if
you
use
the
diamond
all
that
functionality
is
within
itself
and
there's
no
there's
just
no
there's
not
this
function.
Call
between
contracts
is
not
there,
so
you
save
gas
there,
because
you
don't
have
to
make
an
extra
function.
Call
does
that
make
sense.
D
D
But
without
using
proxy,
you
actually
just
literally
split
it
into
two
contracts
and
have
the
contracts
call
each
other
yeah.
You.
B
D
I
understand
what
you're
saying
uh-huh
I
did
want
to
ask
you.
I
saw
that
trails
bits
should
be
auditing.
The
standard
I
wanted
to
ask
about.
Are
there
potential
dangers
with
especially
with
using
the
fallback
functions
this
way
as
or
maybe
I'll
put
that
in
a
more
general
sense
in
general
people,
a
lot
of
times
are
loath
to
put
extra
functionality
inside
fallback
functions.
B
Function
as
long
as
the
fallback
function
is
written
right,
then
it's
fine.
I
guess
one
thing
one
one
thing
is:
is
that
the
fallback
function
like
you
don't
want
to?
A
B
You
should
know
what
you're
adding
and
it's
very
easy
to
look
in
the
source
code
of
a
function
and
go
look
because
I
myself,
I
don't
think
I've
ever
used
self-destruct
yet
so,
like
I
mean,
but
so
like
you
don't
want
to
call
self-destruct,
you
know
and
have
a
faucet
and
a
function
that
calls
unless,
like
you,
you
really
want
to
do
that.
B
You
want
to
delete
your
diamond
for
some
reason
in
some
particular
case
so
like
I
would
say
that
the
fallback
function
is
secure
and
good,
but
like
as
a
solidity
programmer,
there's
you
can
you
know
you
can
of
course
mess
things
up
so,
but
you
know
some
of
these
ways
to
mess
things
up
are
so
stupid
that
you
know
and.
D
B
Yeah
yeah,
not
knowing
solidity
or
yeah,
I
mean
I,
I
don't
know
what
else
exactly
so.
There's
that
let's
see
there's
another
case.
This
is
another
like
another
security
thing,
and
I
another
security
thing
is
that
you
have
a
faucet,
that's
deployed,
and
then
you
can
add
this
faucet
to
a
diamond
and
then
and
then
maybe
that
faucet
again
has
self-destruct
in
it
somewhere.
So
you,
don't
you
don't
call
the
faucet
through
the
diamond.
You
just
call
a
function
directly
on
the
faucet
itself
and
that
that
hat
and
that
function
has
self-destruct.
B
B
Right
it'll
fail
or
or
like
the
calls,
will
succeed.
Well,
the
calls
will
succeed,
but
they
won't
do
any
like
okay.
B
Anything
so
is
possible
to
in
in
in
that
fallback
function,
it's
possible
to
add
a
check
to
see
that
that
your
faucet
actually
has
code
in
it
or
not,
so
that
you
know
to
prevent
this
case
where
you
know
before
you
call
your
del
your
faucet
function,
you
check,
is
there
contract
code
there
and
if
there
is,
then
you
go
ahead
and
call
it,
and
then
that
prevents
you
from
from
you
know
thinking
you
ran
a
function
on
a
faucet
when
you
didn't.
B
But
I
don't
put
that
in
the
fallback,
because
I
don't
put
that
check
in
the
fallback,
because
it
costs
gas
and
right,
and
I
just
think
that
people
should
not
use
self.
They
shouldn't
be
self.
If
they
don't
want
self
destruct,
they
shouldn't
use
it.
It's
just
for
them
to
use
it
when
they
don't
when
they,
when
they
don't
want
to
open
zeppelin's
proxies,
does
the
same
thing:
they
don't
they
don't
do
a
a
code,
a
check
for
code
before
you
know
calling
the
implement
they
don't
do
either
for
gas
reasons.
B
B
But,
for
example,
trail
bits-
I
don't
think
agrees
with
that.
They
think
that
should
always
check
that
a
contract
has
code
before
calling
delegate
calling
it
that's
how
they
feel.
A
Yeah
so
after
all
these
technical
details,
now,
let's
just
come
out
about
the
usage,
I
have
heard
that
many
of
the
projects
have
already
started
using
this
proposal
in
their
project.
They
have
started
implementing
it.
So
would
you
be
able
to
help
us
understand
the
proposal
being
used
as
decentralized
on-chain
governance
and
which
are
the
projects
that
they
are
already
using?
It.
B
Yeah
yeah
sounds
good,
so
there's
a
company
called
derivadex,
which
is
they're
building
a
decentralized
exchange
on
ethereum,
that
is
for
derivative
tokens.
So
you
know
buying
selling
exchange
stuff,
so
they're
using
the
the
diamond
diamond
standard
and
they're
using
it
for
their
governance.
And
so
the
idea
is
that
and
they
have
a
governance
token
as
well.
So
the
idea
is
that
people
who
have
their
governance
token.
B
They
can
vote
on
proposals
that
or
that
changes
how
their
exchange
works,
how
their
their
and
so
so
they
people
can
can
submit
executable
proposals
that
can
get
be
executed
on
chain
and
people
vote
for
it.
B
Then
it
gets
executed
and
they
use
the
diamond
because
it
allows
proposals
to
add,
remove
or
replace
functionality
to
their
protocol,
because
yeah
yeah,
because
they're
because
dura
derivadex
is
you
know,
built
basically
as
a
diamond
with
a
bunch
of
one
big
diamond
with
a
bunch
of
functionality
and
and
now
now
the
community
can
have,
has
the
ability
to
add,
remove
or
replace
functions
to
that,
and
so
that
that's
the
idea
that
there's
you
know,
there's
some
security
things
that
that
duradex
is
handling
like
they
have
to
make
sure
that
any
proposals
that
get
executed
are
are
good.
B
You
know
and
that
they're
not
they're,
not
you
know
bad,
they
don't
do
bad
stuff.
So
so
that's
that's
what
they're
doing
and
then
there's
another
d5
protocol,
which
is
called
barnbridge.
That
wants
to
do
something
similar
where
they
they
use
the
diamond
again
as
a
way
for
their
community
to
create,
do
cause
changes
to
their
protocol.
A
Right
so
when
we
talk
about
the
governance
token,
this
proposal
does
it
has
to
do
anything
related
to
you
know
how
much
share
a
person
should
be
getting
because
that's
very
important
in
governance
and
when
it
comes
to
tao
and
other
stuff,
it
becomes
sometimes
challenging
like
how
much
voting
rights
should
be
assigned
for
a
particular
thing.
So
does
that
also
like
answer
those
kind
of
queries,
it
helped
the
proposal.
B
Yeah
like
well,
I
know
that
drove
decks.
They
they
have.
You
know
you
have
to,
I
think,
they're
going
to
release
their
their
source
code
sometime
for
their
their
thing,
but
it's
the
token
and
based
on
how
much
token
you
have
you
have
more
voting
rights
and
things
like
that,
and
I
don't
know
if
that
answers
your
question
about
it.
A
Right
so,
if
I
understand
correct,
that
is
the
project
that
has
asked
for
audit
right,
that's
correct.
D
Okay,
is
that
a
fully
unchained
procedure,
I'm
just
curious,
like
I
mean
the
voting,
does
the
voting
trigger
everything
on
chain,
or
is
there
still
some
off-chain
coordination
involved
with
that
sound
chain?
Yeah.
A
Yeah,
I'm
I
mean
I
was
reading
about
this
proposal
somewhere,
and
I
found
that
the
bond
bridge,
as
you
mentioned,
the
upcoming
project
that
has
actually
written
some
good
words
about
this
particular
proposal.
If
I
may
read
out
for
the
people
here,
bandwidth
will
be
a
dow
that
is
controlled
by
the
bond
community.
The
barn
bridge
tower
will
have
full
control
over
the
protocols
and
the
feature
that
are
built
into
it.
A
We
are
doing
this
through
the
use
of
the
diamond
standard
2535,
which
allows
us
to
upgrade
to
the
protocol
without
having
all
the
members
removed
from
their
token
and
to
switch
to
a
version
2
of
the
protocol
that
time
arises
and
the
bond
bridge
dow
will
have
full
control
over
the
diamonds,
which
provides
amazing
flexibility
in
the
web
3
space.
I
have
seen
this
kind
this
challenge
when,
when
a
java
is
moving
from
one
version
to
another
version,
upgrading
they
have
lot
of
issues
related
to
you
know
their
voters
their
their
members
stuff.
A
B
Well,
thank
you
yeah,
there's,
there's
more
too,
like
there's,
there's
a
game.
It's
like
called
either
real.
I
I
can't
I
kind
of
forget
the
moment,
but
there's
a
game.
That's
that
has
non-fungible
tokens
and
nfts
and
that
that's
using
the
diamond
standard
by
using
a
diamond
avocachi
is
a
project.
That's
using
the
time
standard.
B
Okay,
sure
yeah
I
mean
I
can
tell
you
that
avogadro,
it
has
a
lot
of
interesting
functionality.
It'll
have
a
lot
of
on-chain
interesting
functionality.
It
has
a
composable
parts
where
you
have
a
like.
A
navigation.
Is
this
this
creature,
this
ghost
and
it
can
have
wearables.
So
you
can,
you
can
hold
a
wand
or
a
sword
and
so
and
that's
going
to
be
on
chain.
So
so
you'll
have
this.
B
So
so
you'll
have
these
this
composability
or
where
tokens
are
owning
other
ones,
as
avagachis
can
also
hold
erc20
tokens
and
stuff
like
that,
so
that
so
this
so
it
it's,
I've
started
that
implementation
and-
and
it's
the
composability
part
so
far-
has
been
based
on
another
standard,
which
is
erc
998,
which
allows
this
non-fungible
token
to
own
other
non-functional
tokens
and
other
composable
functionality.
A
B
Oh
totally
totally
I
I've
been
promoting
like
people
who
make
videos
and
and
tutorials
about
solidity
to
to
also
start
writing
more
about
this.
It's
more
of
an
advanced
thing.
I
think
a
diamond
like
someone,
just
learning
solidity
and
learning
a
diamond
is
too
much,
but
after
someone
gets
comfortable
with
solidity,
then
they're
learning
a
diamond
is
as
a
good
thing
and
I
I
education
would
definitely
help
on
it.
A
B
That's
a
good
question,
so,
let's
see,
I
think
I
think
it
was
released
in
like
march
of
this
year,
the
diamond
standard.
So
it's
it's
still
pretty
new
and
it's
it's
it's.
It's
really.
I
feel
like
it's
really
improved
and
gotten
better
over
times,
and
so
you
know
I.
I
always
think
that
that
the
standard
is
like.
Oh,
it's
not
going
to
change
much.
It's
probably
pretty
much
done,
but
then
but
then
something
happens
and
you
know
something
gets
discovered
or
we
find
we
learn.
B
I
learned
something
or
someone
else
learned
something
and
then
there's
more
to
add
to
the
standard
or
or
and
take
things
away.
I
I've
taken
things
away
and
then
I've
added
stuff.
So
I
I
don't
know
when
when
I'll
move
it,
you
know,
I
guess
when
things
stop
improving,
but
you
know
right
now:
it's
it's!
You
know
again.
I
feel
pretty
confident
right
now
that
it's
not
gonna
it's.
You
know
that
it's
not
going
to
change.
B
I
think
right
now
the
only
thing
that's
going
to
change
in
the
standard
is
that
I'll
add
more
like
information
like
more
security
considerations
like
we
talked
about,
don't
call
self-destruct
with
dealt
with
with
delegate
call.
You
know,
that's
a
security
consideration.
I
could
add
that
to
the
standard,
and
so
just
like
more
information,
but
for
as
far
as
like
changing
the
implement.
Like
the
specifics
of
the
specification,
like
you
know,
it's
I
don't
know
like
right
now.
I
don't
know
of
any
changes
to
add
to
it.
B
A
That's
interesting,
so
I
mean
like
it's
safe
to
assume
that
it
may
take
a
couple
of
more
months
to
get
into
the
next
state,
because
that's
author's
choice,
right
when
author
is
ready,
he
can
move
it
to
the
next
state
and
move
it
to
the
last
call,
and
then
editors
will
review
it
again
and
further.
It
will
proceed.
B
Yeah,
yeah
and-
and
I
want
to
I
want
to
mention
so
as
I
see
as
we
talked
about
earlier-
the
diamond
standard
came
out
in
march
and
it
was
written
a
certain
way
and
it
was
fine
and
then
I
had
some
months
later.
I
did
a
pretty
big
rewrite
on
it,
because
this
new
thing
was
made
possible,
which
is
diamond
storage,
which
is
this
which
solves
a
problem
with
with
this.
B
This
pattern
of
having
a
fallback
that
calls
other
contracts
and
the
problem
is
is,
is
how
to
handle
state
variables,
like
so
with
a
proxy
contract.
B
You
know
you
have
an
implementation
that
has
state
variables
and
then
you
upgrade
with
a
new
implementation
that
new
implementation
might
have
different
state
variables
into
the
alignment
and
coordination
of
state
variables
between
upgrades
has
been
a
problem
in
the
past,
and
so
diamond
storage
really
really
helps
solve
the
the
problems
with
that
by
and
basically
what
diamond
storage
does
is
it
allows
developers
to
create
a
namespace
section
of
contract
storage
like
that
you
can
specify
a
place
in
contract
storage
for
functionality
and
that's
part
of
it,
so
that,
then
you
can
have
you
know
multi
different
faucets
can
have
their
own
places
for
their
state
variables
and
it's
also
possible
for
faucets
to
share
their
data
in
a
diamond,
and
so
the
diamond
store
makes
that
possible,
but
that
that
only
you
know
this
diamond
storage
capability
was
only
made
possible
on
this
earlier
this
year,
when
solidity
language
changed
and
there's
this
new
feature
that
that
was
added
that
made
it
possible
so
that
that's
what
happened
with
her
and
that's
always
a
really
really
great
benefit
an
addition
to
the
diamond
standard
which
didn't
have
that
before.
A
A
I
hope
that
it
becomes
standard
really
soon
like
whenever
you
are
ready
to
move
it
to
the
next
stage,
because
that's
already
been
implemented
in
some
of
the
projects
with.
That
being
said,
I
hope
to
see
you
again
nick
because
I
see
that
there
are
some
more
proposals
coming
up
from
your
end
for
people
who
are
watching
us
on
youtube
contact
details.
So
the
account
where
you
can
follow
would
be
provided
in
the
description
section
below
and
leave
your
questions
comments.
A
We
will
we'll
bring
it
to
the
authors
if
you
have
any
further
and
if
you
are
implementing
it,
let
us
know
more
about
it
so
that
we
can
support
every
proposal
that
is
coming
into
this
series.
Hope
to
see
you
guys
soon
again,
with
another
episode
of
p
penny
till
then
goodbye,
it's
pooja,
ranjan
signing
off.
Thank
you.
Everyone.