►
From YouTube: 🏆 ZkProtest Explanation + Demo [1st Place Hackathon Winner - Mina Protocol+Developer Dao Hackathon]
Description
Github (source code) : https://github.com/RexanWONG/zk-protest
ZkProtest is a privacy-focused decentralized zkApp built using SnarkyJS, zero knowledge proofs, and deployed on the Mina blockchain.
It aims to enable anonymous and secure protests where participants can join and support various causes while preserving their privacy.
As a result, ZkProtest allowing users to join and support causes without compromising their personal information.
Privacy preserving, accountable, untraceable
A
Hey
guys,
my
name
is
Roxanne
and
today
I'm
going
to
be
presenting
my
CK
application
for
the
developer
without
hackathon
bicycle
application
is
called
SDK
protest.
So
let's
talk
about
the
current
problems
with
protests
these
days.
First,
the
current
problem
is
the
lack
of
privacy
related
to
protests.
Traditional
protests
and
activism
usually
involve
public
Gatherings
and
visible
participation
yeah.
A
So
because
of
this,
people
can
get
easily
tracked
from
CCTV
cameras
in
traditional
protest
and
for
online
protest
or
partition
platforms
such
as
changeling
with
Coreg.
They
often
like
sufficient
privacy
and
security
measures.
You
can
literally
easily
be
easily
be
tracked
because
for
these
kind
of
platforms
like
change.org,
you,
you
usually
sign
up
with
like
a
Google
account
and
it's
very
easy
to
track
your
identity
using
a
Google
account
and
obviously
for
some
protests.
You
might
not
want
people
to
know
that
you're
participating
in
those
protests.
A
Another
current
problem
with
protests
is
data,
integrity
and
manipulation.
Ports
have
currently
rely
on
accurate
representation
of
participant,
rumors
and
support
levels,
but
then
the
current
systems
are
suspectable
to
data
manipulation
and
tampering
undermining
The
credibility
and
impact
of
the
produce
protest
movements.
This
is
especially
true
for
say,
like
those
physical
protest,
those
traditional
protests,
public
Gatherings,
were
usually
the
figures
like
made
up,
not
it's
just
approximate
figure,
so
it
would
literally
manipulate
the
Integrity
of
the
data.
A
Therefore,
we
could
come
to
the
conclusion
that,
in
order
to
adjust
the
challenges
of
privacy,
data,
integrity
and
user
Security
in
all
sorts
of
protests
and
petitions
are
robust
and
Secure
Solutions
is
imperative.
Therefore,
what
we're
trying
to
find
right
now
for
protest
is
a
privacy
preserving
focused
solution.
A
So
that's
why,
for
this
hackathon
I
built
CK
protest,
CK
process
is
a
privacy,
focused,
decentralized,
CK
application,
which
is
built
using
sake.js,
serial
knowledge,
proof
and
it's
deployed
on
the
Meetup
blockchain.
So
it
aims
to
enable
Anonymous
and
secure
protests
where
participants
can
join
and
support
various
causes
while
preserving
their
privacy.
It
sounds
great.
You
can,
like
literally
support
any
cause
you
want,
and
basically
no
one
knows
that
you
supported
that
100.
As
a
result,
CK
protest
allows
users
to
join
and
support
causes
without
compromising
their
personal
information.
A
Talk
about
the
technical
implementation
of
of
what
I
built
for
single
programs
in
the
hackathon
so
for
secure
protesting.
The
hackathon
I
built
a
very
simpler
simplified
version
of
what
CK
protests
is
supposed
to
be
for
the
hackathon,
but
it
still
demonstrates
the
potential
that
CK
process
has
so
this
user
flow
over
here
is
essentially
like
the
flow
of
someone
joining
some
kind
of
joining
some
kind
of
protest.
So
imagine
over
here
we
have
like
some
kind
of
protest.
A
Let's
say
the
protest
is
something
like
like
you're
not
allowed
to
put
milk
before
cereal
when
you're
for
your
breakfast
for
your
cereal.
So
let's
say
that's
the
protest
of
petition
and
after
that,
when
that
protest
is
created,
the
initials
there
will
be
initial
state.
So
initially
there
will
be
initialized
stay
over
here,
which
industrialize
two
things.
The
first
thing
is
the
number
of
attendees,
so
that
would
signify
like
the
number
of
people
in
support
of
that
protest.
Partitional
movement,
so
in
our
case
in
the
Ethereal
in
the
middle,
cannot
be
before
serial
example.
A
Obviously,
initialized
state
number
of
attendees
is
set
to
zero
at
first.
The
second
thing
that
is
also
said
is
called
something
called
the
tree
root
and
the
tree
root
is
basically
a
Virgo
tree,
so
this
Mercury
of
this
protest
would
hold
the
information
about
the
users,
so
it
will
hold
the
hash
of
a
username
and
a
song.
So
the
salt
is
just
like
the
cryptographic
random
number.
A
So
essentially,
all
you
can
say
is
that
the
tree
root
is
basically
a
Mercury
which
holds
user
data,
so
it
will
hold
the
hash
of
the
user's
username
and
a
cryptographic
random
number
and
that
hash
will
be
stored
in
that
Brooklyn
tree.
A
So
just
as
a
future
note,
because
this
is
a
hackathon
and
obviously
in
hackathon
put
the
limited
time,
you
don't
have
that
much
time
to
build
big
things
at
first,
but
in
the
future
the
future
we
plan
to
replace,
like
the
government
ID
put
the
government
ID
Yeah.
So
basically,
this
is
like
a
username,
but
in
the
future
this
can
be
provided
really
useful.
A
If
this
username
can
replace
with
some
kind
of
government
ID,
so
therefore
people
can
actually
verify
that
these
are
actually
human
and
started
joining
these
protests
instead
of,
like
Bots,
spamming,
the
protests
stuff
like
that,
unlike
Twitter,
so
we
have
like
a
list
of
in
the
future.
We
have
some
kind
of
list
of
the
government
IDs
and
then,
after
that,
make
sure
that
they
pick
one
of
the
lists
from
the
government
ID
and
put
it
as
the
username
prompt
over
here.
A
That's
just
for
the
future,
and
that
also
shows
one
of
the
impact
of
secure
protests,
all
right,
so
I'm
getting
pretty
off
topic
right
now,
anyways
after
the
initial
State,
there
will
be
two
functions
that
the
user
can
call.
The
first
function
is
called
join
the
protest
and
the
second
one
is
get
the
count.
So
let's
talk
about
get
count
first,
because
it's
an
easier
one
to
talk
about.
So
this
is
the
function,
get
count.
If
the
user
calls
this
function,
it
will
return
the
number
of
attendees
in
this
protest.
A
So
in
this
case,
after
the
initial
state,
if
we
call
this
function
get
count,
it
will
just
return.
Zero
because
number
of
attendees
is
zero.
All
right.
Let's
talk
about
the
hard
part
right
now.
Let's
talk
about
the
joint
process,
part
right
now,
so
assume
that
your
user
assume
you're
Alice,
so
your
user
one
and
then
that
user,
one
obviously
as
I
mentioned,
stored
the
hash
of
the
username
and
assault.
So
you
want
to
join
protests
as
Alice.
The
first
thing
that
the
joint
protest
function
does
is
that
it
verifies
the
user.
A
What
does
that
mean?
It
verifies
if
the
user
is
in
the
miracle
tree.
So
essentially
what
the
is
like
a
seek.
It's
not
proof,
especially
what
the
user
does
is
that
they
have
to
provide
their
their
username
and
then,
after
that,
in
the
in
this
function
the
username
will
be
hashed.
A
It
will
be
hashed
with
the
with
a
solid
again
with
the
corresponding
sound
and
after
that,
it
checks
to
make
sure
that
this
hash
is
the
exact
same
as
the
we
should
present
in
one
of
the
three
routes
of
the
local
tree,
and
this
is
actually
C
is
not
proof.
So
in
the
end,
we
managed
to
hide
the
actual.
A
The
actual
details,
like
the
actual
username
of
the
of
the
user,
we
just
compare
them
using
the
hash,
so
we
utilize
the
seek
it's
not
approved
over
here
to
check
if
the
user
is
a
local
tree.
So
if
that's
the
case,
if
it's
true,
then
the
if
the
user
is
already
part
of
the
protest,
we
just
stop.
The
function.
A
They're
not
obviously
not
allowed
to
join
the
protest
twice,
but
if
that's
not
the
case,
we're
gonna
obviously
create
the
Poseidon
hash
from
the
user's
username
and
the
song
If,
and
then
because,
like
it's
literally
a
new
entry,
we
have
never
seen
this
user
before
assume
like
it's
Charlie,
which
is
calling
this
function,
so
we
will
add
the
users
hash
into
the
protesters
vocal
tree.
So
if
it's
Charlie,
which
is
calling
this
function,
we
will
see
that
the
user
Charlie
is
not
in
the
broker
tree,
so
they
will
create
the
hash.
A
Just
like
this,
you
create
Charlie
plus
the
assault,
the
random
number,
and
it
will
add
that
hash
into
the
tree
root.
So
there
will
be
like
the
list
of
users
which
support
the
protest
and
then
finally,
number
of
attendees
is
obviously
incremented
by
one
so
essentially
yeah.
This
is
the
technical
overflow
of
of
how
the
of
how
this
workflow
for
the
hackathon
or
TK
Pro
test
works.
A
So
I'm
going
to
show
you
a
demo
of
what
I
built
for
CK
protest
for
this
hackathon.
So
for
this
hackathon,
as
you
can
see,
I
don't
have
a
UI
at
the
moment,
so
that's
definitely
something
that
I
can
build
in
the
future,
but
to
make
up
with
that
I
rated
some
tests
to
test
this
CK
protest
contract.
So
this
is
the
CK
process
contract
and
these
are
the
tests
that
I've
written
so
I'm
going
to
test
to
make
sure
that
the
contract
can
be
deployed.
It
allows
users
to
join
the
protest.
A
It
will
reject
any
user
which
is
already
part
of
the
protest.
It's
that
CK
secret
I'm
talking
about,
and
it
will
also
update
the
tree
root
when
a
user
joins
the
protest
and
it
will
successfully
get
the
number
of
attendees.
So
let's
run
tests
to
make
sure
that
all
of
these
crucial
parts
of
secret
protest
works.
So
I'm
going
to
open
up
my
terminal
right
now
and
I'm
going
to
run
the
command
npm
run
test
watch
mode.
A
So
it's
gonna
I
need
to
navigate
to
the
contracts
directory
first
because
I'm
in
the
contracts
directory.
How
do
you
and
I
can
finally
run
the
command
npm
run
test
w
ow
great?
So
it's
it's
beginning
to
run
the
test
right
now
and
obviously,
as
you
can
see,
because
secret
proofs,
it's
really
computationally
and
intensive,
it
takes
a
really
long
time
to
run,
seek
your
proofs.
A
A
So
great,
as
you
can
see,
the
proofs
for
the
tests
have
finished
and
all
of
the
tests
have
passed
the
secret
process
contract
is
successfully
deployed.
It
also
allows
the
users
to
join
protest.
It
will
reject
the
user
that
has
already
joined
protest.
A
It
also
updated
the
tree
root
of
the
users
and
it
will
also
get
the
number
of
attendees
all
these
are
successful
and
all
the
function
works
right
now
and
definitely
the
next
step
in
this
is
to
create
a
UI,
but
this
is
just
a
demo
to
show
that
all
the
functions
in
the
CK
protest.
Smart
contract
works.
A
In
summary,
we,
these
are
some
of
the
technologies
that
we
that
are
used
for
for
the
hackathon
against
Nike
JS
I
use
some
CQ
snap
proofs
use
some
cryptographic,
hash
functions
to
kind
of
use,
local
trees.
A
All
right
now,
I'm
going
to
talk
about
the
impact
that
the
secret
protest
can
have
I.
Think
already
talking
about
the
impact
a
little
bit
about
the
government
IDs,
but
I'm
just
going
to
continue
over
here.
So
the
impact
is
that
it
allows
people
to
engage
in
protests
without
compromising
their
identities,
offering
a
safe
space
for
expression.
So
obviously
this
is
a
pretty
important
thing
in
like
democracy,
people
want
to
people
want
to
protest.
A
A
He
might
not
want
to
disclose
his
identity
or
something
so
you
can
use
the
seeking
protest
to
protect
his
identity
and
also
make
a
big
impact,
make
a
voice
increase
in
number
of
attendees,
and
it's
also
been
a
very
beneficial
areas
where
freedom
of
speech
is
limited,
because
if
freedom
of
speech
limited,
then,
if
anyone
in
that
place,
managed
wants
to
create
some
kind
of
movement,
they'll
get
easily
tracked
and
they
might
get
severe
consequences.
So
it
permits
participants
to
support
causes
without
the
risk
of
punishment.
A
A
So
that's
the
most
important
thing
is
privacy
for
serving
it's
accountable,
and
it's
untraceable
to
who
you
are
here
are
some
things
to
consider
in
the
future,
as
I
mentioned
because
of
the
short
Span
in
the
hackathon,
we
can
just
build
as
much
as
we
can
build,
but
in
the
future
I'm
planning
to
build
a
front
end,
so
I'm
planning
to
build
a
UI
where
users
can
interact
with
the
CK
App,
instead
of
just
like
typing
commands
into
the
terminal
testing
stuff,
like
that.
A
Another
important
thing
that
I
want
to
add
is
the
ability
to
create
protest.
So,
as
you
can
see
in
this
currently
workflow
that
I
showed
you
guys
just
now.
I
just
show
you,
the
workflow
of
someone
of
like
users
joining
a
just
like
a
single
protest
in
the
future.
I
want
to
have
like
a
list
of
different
protests
and
users
can
join
these
protests,
choose
which
protest
they
want
to
join
and
then
for
each
protest.
It's
the
same
thing
they
had
for
each
protest.
A
They
have
a
different
number
of
attendees
and
for
each
process
they
have
a
different
local
three
of
the
users
which
are
registered
sort
of
like
in
that
that
process
and
finally,
I
think
we
can
improve
our
business
model.
A
We
can
actually
copy
the
business
models
out
of
existing
protest
sites
such
as
change.org,
and
we
can
do
interesting
stuff
such
as,
like
donations,
donations
to
the
protests
like
users
can
donate
to
the
protest
organizer
with
leaner
tokens
and
then,
after
as
the
organizer
of
this
as
a
developers
of
the
CG
protests,
we
can
take
a
cut
from
that
donations
in
the
future
and
that
will
help
also
fund
our
our
secret
protests
in
the
future.
A
In
the
future,
there's
going
to
be
actually
a
pretty
low
cost
considerably
low
cost
of
of
funding,
because
it's
just
cold,
it's
just
deploy
a
smart
contract,
just
create
UI
for
it.
It's
gonna,
be
pretty
low
cost,
probably
a
little
bit,
of
course,
for
like
the
domain
fee
and
stuff
like
that,
but
we
can
always
deploy
for
sale,
GitHub
pages
of
free
Alternatives,
something
like
that.
A
Probably
I
think
the
biggest
cost
from
the
secret
protest
would
is
that
the
machine
will
probably
be
overheating
because
of
the
car
computationally
intensive
time
it
takes
for
the
secret
proofs
to
be
approved.
Anyways
I
hope
you
enjoyed
this
presentation
about
secret
protest
and
thank
you
very
much.