The explorer is out of sync. The last synced block is 522 hours ago. Current block height: explorer: 2206528 / node: 2539890 / ref: 2492275

Program zkdao_v0_0_2.aleo

Program ID
zkdao_v0_0_2.aleo
Owner signature
sign1jcadr2khupuj4ky4j99ll6f3u8ar2dd22wmxlgerhhlkndey3cpmw6u0z4ph7tu48qj09n23k2na83w3n3fyq2t4n5jv8t83cu2cxq5jg89h08lg4q6tvfgqsfcdkmqrqusq8249v7lrf853j9mdx4rhpjfw5fstl5q2ugr80xrn7d94v0f8heam63hh2xpckwvsew5m4jcqj0r92v8
Times called
63
Similar programs
Imports
-
Mappings
block_double_admin (field -> boolean)
reset_admin (field -> boolean)
block_double_member (field -> boolean)
reset_member (field -> boolean)
admin_global (field -> AdminGlobal)
admins (field -> boolean)
admin_req (field -> Admin)
membership (field -> Membership)
proposals (field -> Proposal)
Structs
Membership
Admin
AdminGlobal
Proposal
Records
-
Functions
-
Transitions
grant_admin_initial(address) -> () finalize(field)
remove_admin_initial(address) -> () finalize(field)
request_admin(address) -> () finalize(field)
approve_admin(address) -> () finalize(field, field)
grant_admin(address) -> () finalize(field)
request_remove_admin(field) -> () finalize(field)
approve_remove_admin(field) -> () finalize(field, field)
remove_admin(field) -> () finalize(field)
approve_destruct() -> () finalize(field)
destruct_owner() -> ()
request_membership(address) -> () finalize(field)
approve_membership(address) -> () finalize(field, field)
grant_membership(address) -> () finalize(field)
unblock_admin(address) -> () finalize(field)
backdoor_reset_admin() -> ()
propose(field) -> () finalize(field, field)
vote_member(field) -> () finalize(field, field)
vote_admin(field) -> () finalize(field, field)
pass_proposal(field) -> () finalize(field)
unblock_member(address) -> () finalize(field)
backdoor_reset_member() -> ()
Program Source Code (Aleo Instruction) Upload Leo source

program zkdao_v0_0_2.aleo;

struct Membership:
    requests as boolean;
    approvals as field;
    granted as boolean;

struct Admin:
    requests as boolean;
    approvals as field;
    remove_requests as boolean;
    remove_approvals as field;
    granted as boolean;

struct AdminGlobal:
    num_admins as field;
    destruct_approvals as field;
    destructed as boolean;

struct Proposal:
    approvals as field;
    approved as boolean;

mapping block_double_admin:
    key as field.public;
    value as boolean.public;

mapping reset_admin:
    key as field.public;
    value as boolean.public;

mapping block_double_member:
    key as field.public;
    value as boolean.public;

mapping reset_member:
    key as field.public;
    value as boolean.public;

mapping admin_global:
    key as field.public;
    value as AdminGlobal.public;

mapping admins:
    key as field.public;
    value as boolean.public;

mapping admin_req:
    key as field.public;
    value as Admin.public;

mapping membership:
    key as field.public;
    value as Membership.public;

mapping proposals:
    key as field.public;
    value as Proposal.public;

function grant_admin_initial:
    input r0 as address.private;
    hash.bhp256 self.caller into r1 as field;
    assert.eq r1 5471346192118974203811093312871574098188146069506081670514657699548656288468field;
    hash.bhp256 r0 into r2 as field;
    async grant_admin_initial r2 into r3;
    output r3 as zkdao_v0_0_2.aleo/grant_admin_initial.future;
finalize grant_admin_initial:
    input r0 as field.public;
    cast 0field 0field false into r1 as AdminGlobal;
    get.or_use admin_global[0field] r1 into r2;
    assert.eq r2.destructed false;
    get.or_use admins[r0] false into r3;
    assert.eq r3 false;
    set true into admins[r0];
    add r2.num_admins 1field into r4;
    cast r4 r2.destruct_approvals r2.destructed into r5 as AdminGlobal;
    set r5 into admin_global[0field];

function remove_admin_initial:
    input r0 as address.private;
    hash.bhp256 self.caller into r1 as field;
    assert.eq r1 5471346192118974203811093312871574098188146069506081670514657699548656288468field;
    hash.bhp256 r0 into r2 as field;
    async remove_admin_initial r2 into r3;
    output r3 as zkdao_v0_0_2.aleo/remove_admin_initial.future;
finalize remove_admin_initial:
    input r0 as field.public;
    cast 0field 0field false into r1 as AdminGlobal;
    get.or_use admin_global[0field] r1 into r2;
    assert.eq r2.destructed false;
    gt r2.num_admins 0field into r3;
    assert.eq r3 true;
    get admins[r0] into r4;
    assert.eq r4 true;
    set false into admins[r0];
    sub r2.num_admins 1field into r5;
    cast r5 r2.destruct_approvals r2.destructed into r6 as AdminGlobal;
    set r6 into admin_global[0field];

function request_admin:
    input r0 as address.private;
    hash.bhp256 r0 into r1 as field;
    async request_admin r1 into r2;
    output r2 as zkdao_v0_0_2.aleo/request_admin.future;
finalize request_admin:
    input r0 as field.public;
    cast false 0field false 0field false into r1 as Admin;
    get.or_use admin_req[r0] r1 into r2;
    cast true r2.approvals r2.remove_requests r2.remove_approvals r2.granted into r3 as Admin;
    set r3 into admin_req[r0];

function approve_admin:
    input r0 as address.private;
    hash.bhp256 r0 into r1 as field;
    hash.bhp256 self.caller into r2 as field;
    async approve_admin r2 r1 into r3;
    output r3 as zkdao_v0_0_2.aleo/approve_admin.future;
finalize approve_admin:
    input r0 as field.public;
    input r1 as field.public;
    set false into reset_admin[0field];
    get admins[r0] into r2;
    get.or_use block_double_admin[r0] false into r3;
    assert.eq r2 true;
    assert.eq r3 false;
    get admin_req[r1] into r4;
    assert.eq r4.requests true;
    add r4.approvals 1field into r5;
    cast r4.requests r5 r4.remove_requests r4.remove_approvals r4.granted into r6 as Admin;
    set r6 into admin_req[r1];
    set true into block_double_admin[r0];

function grant_admin:
    input r0 as address.private;
    hash.bhp256 r0 into r1 as field;
    async grant_admin r1 into r2;
    output r2 as zkdao_v0_0_2.aleo/grant_admin.future;
finalize grant_admin:
    input r0 as field.public;
    get admin_req[r0] into r1;
    gte r1.approvals 3field into r2;
    assert.eq r2 true;
    cast false 0field false 0field true into r3 as Admin;
    set r3 into admin_req[r0];
    set true into admins[r0];
    get admin_global[0field] into r4;
    add r4.num_admins 1field into r5;
    cast r5 r4.destruct_approvals r4.destructed into r6 as AdminGlobal;
    set r6 into admin_global[0field];
    set true into reset_admin[0field];

function request_remove_admin:
    input r0 as field.private;
    async request_remove_admin r0 into r1;
    output r1 as zkdao_v0_0_2.aleo/request_remove_admin.future;
finalize request_remove_admin:
    input r0 as field.public;
    cast false 0field false 0field false into r1 as Admin;
    get.or_use admin_req[r0] r1 into r2;
    cast r2.requests r2.approvals true r2.remove_approvals r2.granted into r3 as Admin;
    set r3 into admin_req[r0];

function approve_remove_admin:
    input r0 as field.private;
    hash.bhp256 self.caller into r1 as field;
    async approve_remove_admin r1 r0 into r2;
    output r2 as zkdao_v0_0_2.aleo/approve_remove_admin.future;
finalize approve_remove_admin:
    input r0 as field.public;
    input r1 as field.public;
    set false into reset_admin[0field];
    get admins[r0] into r2;
    get.or_use block_double_admin[r0] false into r3;
    assert.eq r2 true;
    assert.eq r3 false;
    get admin_req[r1] into r4;
    assert.eq r4.remove_requests true;
    add r4.remove_approvals 1field into r5;
    cast r4.requests r4.approvals r4.remove_requests r5 r4.granted into r6 as Admin;
    set r6 into admin_req[r1];
    set true into block_double_admin[r0];

function remove_admin:
    input r0 as field.private;
    async remove_admin r0 into r1;
    output r1 as zkdao_v0_0_2.aleo/remove_admin.future;
finalize remove_admin:
    input r0 as field.public;
    get admin_req[r0] into r1;
    gte r1.remove_approvals 3field into r2;
    assert.eq r2 true;
    cast false 0field false 0field false into r3 as Admin;
    set r3 into admin_req[r0];
    set false into admins[r0];
    get admin_global[0field] into r4;
    gt r4.num_admins 0field into r5;
    assert.eq r5 true;
    sub r4.num_admins 1field into r6;
    cast r6 r4.destruct_approvals r4.destructed into r7 as AdminGlobal;
    set r7 into admin_global[0field];
    set true into reset_admin[0field];

function approve_destruct:
    hash.bhp256 self.caller into r0 as field;
    async approve_destruct r0 into r1;
    output r1 as zkdao_v0_0_2.aleo/approve_destruct.future;
finalize approve_destruct:
    input r0 as field.public;
    set false into reset_admin[0field];
    get admins[r0] into r1;
    get.or_use block_double_admin[r0] false into r2;
    assert.eq r1 true;
    assert.eq r2 false;
    get admin_global[0field] into r3;
    assert.eq r3.destructed false;
    add r3.destruct_approvals 1field into r4;
    cast r3.num_admins r4 r3.destructed into r5 as AdminGlobal;
    set r5 into admin_global[0field];
    set true into block_double_admin[r0];

function destruct_owner:
    async destruct_owner  into r0;
    output r0 as zkdao_v0_0_2.aleo/destruct_owner.future;
finalize destruct_owner:
    get admin_global[0field] into r0;
    gte r0.destruct_approvals 3field into r1;
    assert.eq r1 true;
    cast r0.num_admins r0.destruct_approvals true into r2 as AdminGlobal;
    set r2 into admin_global[0field];
    set true into reset_admin[0field];

function request_membership:
    input r0 as address.private;
    hash.bhp256 r0 into r1 as field;
    async request_membership r1 into r2;
    output r2 as zkdao_v0_0_2.aleo/request_membership.future;
finalize request_membership:
    input r0 as field.public;
    cast false 0field false into r1 as Membership;
    get.or_use membership[r0] r1 into r2;
    cast true r2.approvals r2.granted into r3 as Membership;
    set r3 into membership[r0];

function approve_membership:
    input r0 as address.private;
    hash.bhp256 r0 into r1 as field;
    hash.bhp256 self.caller into r2 as field;
    async approve_membership r2 r1 into r3;
    output r3 as zkdao_v0_0_2.aleo/approve_membership.future;
finalize approve_membership:
    input r0 as field.public;
    input r1 as field.public;
    set false into reset_admin[0field];
    get admins[r0] into r2;
    get.or_use block_double_admin[r0] false into r3;
    assert.eq r2 true;
    assert.eq r3 false;
    get membership[r1] into r4;
    assert.eq r4.requests true;
    add r4.approvals 1field into r5;
    cast r4.requests r5 r4.granted into r6 as Membership;
    set r6 into membership[r1];
    set true into block_double_admin[r0];

function grant_membership:
    input r0 as address.private;
    hash.bhp256 r0 into r1 as field;
    async grant_membership r1 into r2;
    output r2 as zkdao_v0_0_2.aleo/grant_membership.future;
finalize grant_membership:
    input r0 as field.public;
    get membership[r0] into r1;
    gte r1.approvals 3field into r2;
    assert.eq r2 true;
    cast false 0field true into r3 as Membership;
    set r3 into membership[r0];
    set true into reset_admin[0field];

function unblock_admin:
    input r0 as address.private;
    hash.bhp256 r0 into r1 as field;
    async unblock_admin r1 into r2;
    output r2 as zkdao_v0_0_2.aleo/unblock_admin.future;
finalize unblock_admin:
    input r0 as field.public;
    get block_double_admin[r0] into r1;
    assert.eq r1 true;
    get reset_admin[0field] into r2;
    assert.eq r2 true;
    set false into block_double_admin[r0];

function backdoor_reset_admin:
    async backdoor_reset_admin  into r0;
    output r0 as zkdao_v0_0_2.aleo/backdoor_reset_admin.future;
finalize backdoor_reset_admin:
    set true into reset_admin[0field];

function propose:
    input r0 as field.private;
    hash.bhp256 self.caller into r1 as field;
    async propose r1 r0 into r2;
    output r2 as zkdao_v0_0_2.aleo/propose.future;
finalize propose:
    input r0 as field.public;
    input r1 as field.public;
    get membership[r0] into r2;
    assert.eq r2.granted true;
    cast 0field false into r3 as Proposal;
    set r3 into proposals[r1];

function vote_member:
    input r0 as field.private;
    hash.bhp256 self.caller into r1 as field;
    async vote_member r1 r0 into r2;
    output r2 as zkdao_v0_0_2.aleo/vote_member.future;
finalize vote_member:
    input r0 as field.public;
    input r1 as field.public;
    set false into reset_member[0field];
    get membership[r0] into r2;
    get.or_use block_double_member[r0] false into r3;
    assert.eq r2.granted true;
    assert.eq r3 false;
    get proposals[r1] into r4;
    add r4.approvals 1field into r5;
    cast r5 r4.approved into r6 as Proposal;
    set r6 into proposals[r1];
    set true into block_double_member[r0];

function vote_admin:
    input r0 as field.private;
    hash.bhp256 self.caller into r1 as field;
    async vote_admin r1 r0 into r2;
    output r2 as zkdao_v0_0_2.aleo/vote_admin.future;
finalize vote_admin:
    input r0 as field.public;
    input r1 as field.public;
    set false into reset_member[0field];
    get admins[r0] into r2;
    get.or_use block_double_member[r0] false into r3;
    assert.eq r2 true;
    assert.eq r3 false;
    get proposals[r1] into r4;
    add r4.approvals 1field into r5;
    cast r5 r4.approved into r6 as Proposal;
    set r6 into proposals[r1];
    set true into block_double_member[r0];

function pass_proposal:
    input r0 as field.private;
    async pass_proposal r0 into r1;
    output r1 as zkdao_v0_0_2.aleo/pass_proposal.future;
finalize pass_proposal:
    input r0 as field.public;
    get proposals[r0] into r1;
    gte r1.approvals 3field into r2;
    assert.eq r2 true;
    add r1.approvals 1field into r3;
    cast r3 r1.approved into r4 as Proposal;
    set r4 into proposals[r0];
    set true into reset_member[0field];

function unblock_member:
    input r0 as address.private;
    hash.bhp256 r0 into r1 as field;
    async unblock_member r1 into r2;
    output r2 as zkdao_v0_0_2.aleo/unblock_member.future;
finalize unblock_member:
    input r0 as field.public;
    get block_double_member[r0] into r1;
    assert.eq r1 true;
    get reset_member[0field] into r2;
    assert.eq r2 true;
    set false into block_double_member[r0];

function backdoor_reset_member:
    async backdoor_reset_member  into r0;
    output r0 as zkdao_v0_0_2.aleo/backdoor_reset_member.future;
finalize backdoor_reset_member:
    set true into reset_member[0field];

Block heightTimestampTransition IDFunction callState
117,5702023-10-29 09:54:16au1wzheelgepzsj302e3xj8hxsulvthkpxs7wzn3jlk4fhzrxsrgvzqjrmxazgrant_admin_initialRejected
117,5542023-10-29 09:53:02au13x6stla4fzk0akhdas55e6wdgpwvqddtc0gfjhlnkzlt843ycsysuve3cpdestruct_ownerAccepted
117,5432023-10-29 09:52:08au1wx7mqcff02wmz2shgd3w9m0u9ae7fxan3ncd686cnyfur04d3uxqlxd9yaunblock_adminRejected
117,5422023-10-29 09:52:06au1074nucf4u7q4t08hudqmu0kjvyl0ul60fm2jkd89dge88axst5psa33d6cunblock_adminRejected
117,5402023-10-29 09:51:55au1unpvgq3hchtp62k345lpgemvvkz5vjxqd5gghhtqp04rpw2xjcxsnw6n5qunblock_adminRejected
117,5252023-10-29 09:50:44au1ztjs8vnac37qht59enh7x4gnkqql7twvz60sax9nnd8c9mz9nqgsz5ev4wapprove_destructAccepted
117,5242023-10-29 09:50:37au1p6g7yz3tv78rt6hcefmtvwa9mz8mfz3zzl8ygmzc6n6dyqjuucyqe5dy3eapprove_destructAccepted
117,5222023-10-29 09:50:28au1dfdvds4uyrptpv8ph6rmchulr5u49squ2jamz0c4ylyr65g40qqs7ctjm4approve_destructAccepted
117,4712023-10-29 09:46:23au1clyq4pdqgy2cwhu6lf7fsjzndxyuv5dt3f2w6sz9dst3zrvwwyzqv5266munblock_memberAccepted
117,4572023-10-29 09:45:14au18dycfq709rxxhf9t462xuaaqcg7ndml9ssvv6gzwa50recmjlqqs0py5yzunblock_adminRejected
117,4552023-10-29 09:45:04au1sknfqht79fy6kwl5aya57edgyquw2nekz2ly2m5xvy2a4p8ge5zqtd4gmyunblock_adminRejected
117,4532023-10-29 09:44:56au1fmshm4mc5ey5r3v9ypjxjtl62f9gp67kwlv6vyq64m6v8sfm5qrsxnvrl5unblock_adminRejected
117,4382023-10-29 09:43:47au14wfk48klt9uqjy84x506a2dc76w62g267vgu22s9rcwrh3m0uqrsla7t44pass_proposalAccepted
117,3912023-10-29 09:40:06au1wp4phwfp35czwdeanny4ml9kz6xhhph8nvu6qs89a9jlns70eyzqau4e7tvote_memberAccepted
117,3532023-10-29 09:37:05au1kfu2rda6ful3ktj7dtu3e5mpcrpg2d7s6yjk864cv530w6wl2g9seesk8hunblock_memberRejected
117,3432023-10-29 09:36:06au1qw0uqu85u4grs2c0k7l8enffalselwsuxz3fhh0qvuym6a69wsqshtd3cwunblock_adminRejected
117,3412023-10-29 09:35:54au1zmqyr524dre5mtw8tafucv02j2sqgpl3zy37f2dlfnl4qmx6cu8qvqtj6runblock_adminRejected
117,3392023-10-29 09:35:45au1rvzjz96d8uyld66pfplj6wxfynutp6pvl5v8k5vm2l9fd4j23szs7rt58wunblock_adminRejected
117,3312023-10-29 09:35:10au1t4zt4mxsax9shauvqrkgz0z7f5a3e9dpp5uqrk9whav2uanhqgxsdm0rl2vote_adminAccepted
117,3292023-10-29 09:35:03au1n0ep0kvqe3ye2qnxvn55z7t2kutent5mv7juw67295v22qgmncgqvrw04hvote_adminAccepted
117,3272023-10-29 09:34:54au1n65jcyz4s5u5pyrtxht82kx7k6t4dkrkh2x8ajn58qk5qdza0g8sltt2revote_memberRejected
117,2982023-10-29 09:32:44au13nuu3safjkdxw6xjrtlx95u0jty6y9xmtzr9gsflh5jq2pvtn58s2mw58yunblock_adminRejected
117,2962023-10-29 09:32:36au1jjk5yusxxdjtwyy323q0s4s623z5yddymvgd8mr8k7qpc2nzduqqtq8xv0unblock_adminRejected
117,2952023-10-29 09:32:34au1j0yvyfwxtev6z64w33h8jckjk28c29aak5fj3ctsqd73xjvwpvpscllut6unblock_adminRejected
117,2822023-10-29 09:31:37au1wqt3czv3lu4kc6k9wj8tqyxz6rhmdpdtm6cj4wz2w53euh8k8sqshe9dnvunblock_adminRejected
117,2712023-10-29 09:30:49au12ans6j5nlmxnu0d62hycg2kvmwwjt5l97uzqnzhsmwhqtnhtnvzqhks89mproposeAccepted
117,2512023-10-29 09:29:15au143ga4klzpwtzjmed0m7en68xtsuwzsn59pkc20t00e6n3m825s9qx4hhkvunblock_adminAccepted
117,2492023-10-29 09:29:08au1uhsm8s7xmwu42rzhkfhqfju4zgxmttfmydh88kfyama2s5huugqqjf8qk5unblock_adminAccepted
117,2482023-10-29 09:29:02au14ts8757wqr2qa56vfsn73khhr3s22u3k8p7u60cffavg0x3x3v8s3k0mrkunblock_adminAccepted
117,2372023-10-29 09:28:09au1lx47xve04e2zaet7vsk5c9xhr6zut3vrefkhnmjtk5fwqyk68uzqcqt5e4grant_membershipAccepted


















Not implemented