The explorer is out of sync. The last synced block is 190 hours ago. Current block height: explorer: 2206528 / node: 2329664 / ref: 2329664

Program arcane_access.aleo

Program ID
arcane_access.aleo
Owner signature
sign1cc6ax43h0fna3ms8vhmeegpm3cs2hdqednhawma3mwrm6sdv0vp8n5adz4a0yz6awurs8ll92le9g76dff33y8v28swfuxqzm8ydvqgm8555plq8qm58hteazn04fgnvceu4hnp7zj3ekzquseymgmanpdnzxhqtsugxlmvxwjmkv6xc8al30jgjgj4cfrs9ks4pt9temfjpzw40mcz
Times called
1
Similar programs
0
Imports
-
Mappings
public_access (address -> boolean)
grant_ability (address -> boolean)
revoke_ability (address -> boolean)
ban_list (field -> boolean)
Structs
-
Records
Access
Functions
-
Transitions
check_access_private(Access) -> Access finalize(field)
check_access_public(address) -> () finalize(address)
grant_private(Access, address, field, boolean, boolean) -> (Access, Access) finalize(field)
grant_public(address, field, boolean, boolean) -> Access finalize(address, address, boolean, boolean)
revoke_private(Access, field, address) -> Access finalize(field, address)
revoke_public(field, address) -> () finalize(address, field, address)
Program Source Code (Aleo Instruction) Upload Leo source

program arcane_access.aleo;

record Access:
    owner as address.private;
    access_id as field.private;
    is_able_to_grant as boolean.private;
    is_able_to_revoke as boolean.private;

mapping public_access:
    key as address.public;
    value as boolean.public;

mapping grant_ability:
    key as address.public;
    value as boolean.public;

mapping revoke_ability:
    key as address.public;
    value as boolean.public;

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

function check_access_private:
    input r0 as Access.record;
    cast r0.owner r0.access_id r0.is_able_to_grant r0.is_able_to_revoke into r1 as Access.record;
    async check_access_private r0.access_id into r2;
    output r1 as Access.record;
    output r2 as arcane_access.aleo/check_access_private.future;
finalize check_access_private:
    input r0 as field.public;
    get.or_use ban_list[r0] false into r1;
    not r1 into r2;
    assert.eq r2 true;

function check_access_public:
    input r0 as address.private;
    async check_access_public r0 into r1;
    output r1 as arcane_access.aleo/check_access_public.future;
finalize check_access_public:
    input r0 as address.public;
    is.eq r0 aleo16e5ckxpxh0pshx03shk43mc5l8m7lgrrrk2vjefw3muypc4xuc9sea9wmc into r1;
    get.or_use public_access[r0] false into r2;
    or r1 r2 into r3;
    assert.eq r3 true;

function grant_private:
    input r0 as Access.record;
    input r1 as address.private;
    input r2 as field.private;
    input r3 as boolean.private;
    input r4 as boolean.private;
    assert.eq r0.is_able_to_grant true;
    cast r0.owner r0.access_id r0.is_able_to_grant r0.is_able_to_revoke into r5 as Access.record;
    cast r1 r2 r3 r4 into r6 as Access.record;
    async grant_private r0.access_id into r7;
    output r5 as Access.record;
    output r6 as Access.record;
    output r7 as arcane_access.aleo/grant_private.future;
finalize grant_private:
    input r0 as field.public;
    get.or_use ban_list[r0] false into r1;
    not r1 into r2;
    assert.eq r2 true;

function grant_public:
    input r0 as address.private;
    input r1 as field.private;
    input r2 as boolean.private;
    input r3 as boolean.private;
    cast r0 r1 r2 r3 into r4 as Access.record;
    async grant_public self.caller r0 r2 r3 into r5;
    output r4 as Access.record;
    output r5 as arcane_access.aleo/grant_public.future;
finalize grant_public:
    input r0 as address.public;
    input r1 as address.public;
    input r2 as boolean.public;
    input r3 as boolean.public;
    is.eq r0 aleo16e5ckxpxh0pshx03shk43mc5l8m7lgrrrk2vjefw3muypc4xuc9sea9wmc into r4;
    get.or_use public_access[r0] false into r5;
    or r4 r5 into r6;
    assert.eq r6 true;
    get.or_use grant_ability[r0] false into r7;
    or r4 r7 into r8;
    assert.eq r8 true;
    set r2 into grant_ability[r1];
    set r3 into revoke_ability[r1];

function revoke_private:
    input r0 as Access.record;
    input r1 as field.private;
    input r2 as address.private;
    assert.eq r0.is_able_to_revoke true;
    cast r0.owner r0.access_id r0.is_able_to_grant r0.is_able_to_revoke into r3 as Access.record;
    async revoke_private r1 r2 into r4;
    output r3 as Access.record;
    output r4 as arcane_access.aleo/revoke_private.future;
finalize revoke_private:
    input r0 as field.public;
    input r1 as address.public;
    set true into ban_list[r0];
    set false into grant_ability[r1];
    set false into revoke_ability[r1];

function revoke_public:
    input r0 as field.private;
    input r1 as address.private;
    async revoke_public self.caller r0 r1 into r2;
    output r2 as arcane_access.aleo/revoke_public.future;
finalize revoke_public:
    input r0 as address.public;
    input r1 as field.public;
    input r2 as address.public;
    is.eq r0 aleo16e5ckxpxh0pshx03shk43mc5l8m7lgrrrk2vjefw3muypc4xuc9sea9wmc into r3;
    get.or_use public_access[r0] false into r4;
    or r3 r4 into r5;
    assert.eq r5 true;
    get.or_use revoke_ability[r0] false into r6;
    or r3 r6 into r7;
    assert.eq r7 true;
    set true into ban_list[r1];
    set false into grant_ability[r2];
    set false into revoke_ability[r2];

Block heightTimestampTransition IDFunction callState
1,944,2852024-04-09 10:23:48au12tn9wvgu4x245umc96h0myryy0ku698qj4mga45rav3rjwwygvrsdqmtpucheck_access_publicAccepted








Not implemented