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

Program multisig_1713438024.aleo

Program ID
multisig_1713438024.aleo
Owner signature
sign1rhxe45aputc6r62xf2kmtueelzxpm6svfyq0gtnw6dfml48fqqqacw7lma227nrckfe4n5agf83lcg9u0pvl95y2t0h7qp6d8l6egppfmld7e4vm2kzgyjlge3ggyyey24760gftwv30faflcdgansp7q5dgy78gdshhk83hp46kg398hqt93w6xstu443fduz9xszj9le6sxgflt2v
Times called
164
Similar programs
Imports
-
Mappings
next_nonce (Action -> u64)
signers (address -> boolean)
required_sigs (Action -> u8)
has_signed (Signature -> boolean)
sigs (Proposal -> u8)
has_signed_cancellation (Signature -> boolean)
cancellation_sigs (Proposal -> u8)
Structs
Action
Proposal
Signature
Records
Authorization
Functions
-
Transitions
initialize() -> () finalize(address)
sign(Proposal) -> () finalize(Signature)
sign_cancellation(Proposal) -> () finalize(Signature)
issue_authorization(address, Proposal) -> Authorization finalize(address)
verify(Authorization, u8, field) -> () finalize(Proposal)
cancel(Proposal) -> () finalize(Proposal)
set_required_sigs_(Action, u8) -> () finalize(Action, u8)
add_signer_(address) -> () finalize(address)
remove_signer_(address) -> () finalize(address)
Program Source Code (Aleo Instruction) Upload Leo source

program multisig_1713438024.aleo;

struct Action:
    program_address as address;
    action_id as u8;

struct Proposal:
    action as Action;
    argument_hash as field;
    nonce as u64;

struct Signature:
    proposal as Proposal;
    signer as address;

record Authorization:
    owner as address.private;
    proposal as Proposal.private;

mapping next_nonce:
    key as Action.public;
    value as u64.public;

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

mapping required_sigs:
    key as Action.public;
    value as u8.public;

mapping has_signed:
    key as Signature.public;
    value as boolean.public;

mapping sigs:
    key as Proposal.public;
    value as u8.public;

mapping has_signed_cancellation:
    key as Signature.public;
    value as boolean.public;

mapping cancellation_sigs:
    key as Proposal.public;
    value as u8.public;

function initialize:
    async initialize self.signer into r0;
    output r0 as multisig_1713438024.aleo/initialize.future;
finalize initialize:
    input r0 as address.public;
    cast aleo1jw3ulj8qazvlhgtkv8k6wshckenzwfmkvk7zmglg8648gdl80yqs3pkxfg 0u8 into r1 as Action;
    contains next_nonce[r1] into r2;
    not r2 into r3;
    assert.eq r3 true;
    set 1u64 into next_nonce[r1];
    set true into signers[r0];
    cast aleo1jw3ulj8qazvlhgtkv8k6wshckenzwfmkvk7zmglg8648gdl80yqs3pkxfg 2u8 into r4 as Action;
    contains next_nonce[r4] into r5;
    not r5 into r6;
    assert.eq r6 true;
    set 1u8 into required_sigs[r4];
    set 1u8 into required_sigs[r1];
    set 2u64 into next_nonce[r4];

function sign:
    input r0 as Proposal.private;
    cast r0 self.signer into r1 as Signature;
    async sign r1 into r2;
    output r2 as multisig_1713438024.aleo/sign.future;
finalize sign:
    input r0 as Signature.public;
    contains signers[r0.signer] into r1;
    assert.eq r1 true;
    contains has_signed[r0] into r2;
    not r2 into r3;
    assert.eq r3 true;
    set true into has_signed[r0];
    get.or_use sigs[r0.proposal] 0u8 into r4;
    add r4 1u8 into r5;
    set r5 into sigs[r0.proposal];

function sign_cancellation:
    input r0 as Proposal.private;
    assert.eq r0.argument_hash 0field;
    cast r0 self.signer into r1 as Signature;
    async sign_cancellation r1 into r2;
    output r2 as multisig_1713438024.aleo/sign_cancellation.future;
finalize sign_cancellation:
    input r0 as Signature.public;
    contains signers[r0.signer] into r1;
    assert.eq r1 true;
    contains has_signed_cancellation[r0] into r2;
    not r2 into r3;
    assert.eq r3 true;
    set true into has_signed_cancellation[r0];
    get.or_use cancellation_sigs[r0.proposal] 0u8 into r4;
    add r4 1u8 into r5;
    set r5 into cancellation_sigs[r0.proposal];

function issue_authorization:
    input r0 as address.private;
    input r1 as Proposal.private;
    cast r0 r1 into r2 as Authorization.record;
    async issue_authorization self.signer into r3;
    output r2 as Authorization.record;
    output r3 as multisig_1713438024.aleo/issue_authorization.future;
finalize issue_authorization:
    input r0 as address.public;
    contains signers[r0] into r1;
    assert.eq r1 true;

function verify:
    input r0 as Authorization.record;
    input r1 as u8.private;
    input r2 as field.private;
    assert.eq r0.proposal.action.program_address self.caller;
    assert.eq r0.proposal.action.action_id r1;
    assert.eq r0.proposal.argument_hash r2;
    async verify r0.proposal into r3;
    output r3 as multisig_1713438024.aleo/verify.future;
finalize verify:
    input r0 as Proposal.public;
    get sigs[r0] into r1;
    get required_sigs[r0.action] into r2;
    gte r1 r2 into r3;
    assert.eq r3 true;
    get.or_use next_nonce[r0.action] 0u64 into r4;
    assert.eq r0.nonce r4;
    add r4 1u64 into r5;
    set r5 into next_nonce[r0.action];

function cancel:
    input r0 as Proposal.private;
    async cancel r0 into r1;
    output r1 as multisig_1713438024.aleo/cancel.future;
finalize cancel:
    input r0 as Proposal.public;
    get cancellation_sigs[r0] into r1;
    get required_sigs[r0.action] into r2;
    gte r1 r2 into r3;
    assert.eq r3 true;
    get.or_use next_nonce[r0.action] 0u64 into r4;
    assert.eq r0.nonce r4;
    add r4 1u64 into r5;
    set r5 into next_nonce[r0.action];

function set_required_sigs_:
    input r0 as Action.private;
    input r1 as u8.private;
    assert.eq self.caller aleo1jw3ulj8qazvlhgtkv8k6wshckenzwfmkvk7zmglg8648gdl80yqs3pkxfg;
    async set_required_sigs_ r0 r1 into r2;
    output r2 as multisig_1713438024.aleo/set_required_sigs_.future;
finalize set_required_sigs_:
    input r0 as Action.public;
    input r1 as u8.public;
    set r1 into required_sigs[r0];

function add_signer_:
    input r0 as address.private;
    assert.eq self.caller aleo1jw3ulj8qazvlhgtkv8k6wshckenzwfmkvk7zmglg8648gdl80yqs3pkxfg;
    async add_signer_ r0 into r1;
    output r1 as multisig_1713438024.aleo/add_signer_.future;
finalize add_signer_:
    input r0 as address.public;
    set true into signers[r0];

function remove_signer_:
    input r0 as address.private;
    assert.eq self.caller aleo1jw3ulj8qazvlhgtkv8k6wshckenzwfmkvk7zmglg8648gdl80yqs3pkxfg;
    async remove_signer_ r0 into r1;
    output r1 as multisig_1713438024.aleo/remove_signer_.future;
finalize remove_signer_:
    input r0 as address.public;
    remove signers[r0];

Block heightTimestampTransition IDFunction callState
2,204,8982024-04-26 12:03:24au1lph2m2hv3adj2k6sk6svx8e035us7rvwvg277pnl22dtexju8qyqky8dzfsignAccepted
2,204,8982024-04-26 12:03:24au1r9uxc0hejyqcxmhckzhfacwzk00z3vm38cvxdzkgcj4kpphzaqrqmfhf39issue_authorizationAccepted
2,204,8982024-04-26 12:03:24au1mxzk77md0pr6h4rzv4ekjzddyqdvqchcwm3z4p69vmc479j9juxq4mcfnwverifyAccepted
2,204,8982024-04-26 12:03:24au1mce7tr70xsag5y9099rua79mdjyctgtkdq0qg8mpktw3dau4lqxsldwwdvverifyAccepted
2,204,8982024-04-26 12:03:24au1atunevtfpt4cfe5smxwgf8ssj5wfwanlahu3z30utfa49hydtgzsxly35tsignAccepted
2,204,8982024-04-26 12:03:24au1aph5vcjmuhrla6jhpcvr6gahzc8aguczc6zfksn4pvz937kjpvpseqrglyissue_authorizationAccepted
2,204,6302024-04-26 11:37:01au1ymantue329uyu5u3uek7w4yprr5tc8995qvhzcmurlch8s9kpggs22saapsignAccepted
2,204,6302024-04-26 11:37:01au120e9z78n7luwqtrwkfyg2yhdx9yqvars2qvqqhgysgtgynw3z58suv48npverifyAccepted
2,204,6302024-04-26 11:37:01au1l7y57t8qlaawcqxcqjjd9rp9qfc69jc5zxu54ga66c24cts8vvps66z0pfissue_authorizationAccepted
2,204,4522024-04-26 11:19:16au1kc9hvh8he8gs8h52j7e3ew6wv66q8755uvdncx3q770098py7yyqd4gehcsignAccepted
2,204,3642024-04-26 11:11:59au16l4y73pspfn239n7xg8uhqe3ac68drgx3vf6jj7lkksu65sx3crsgjvpwcverifyAccepted
2,204,3642024-04-26 11:11:59au1k9ypckskujk9mr4dr6t0f3mskfwz2nj0lh9cl2cq9dug0rn6lurqkhx0d9issue_authorizationAccepted
2,204,3642024-04-26 11:11:59au1ef74q8kr623ekh53xu6vyvrxwe2lwwgy33hau7lq5njqyxkhasqscf7arhsignAccepted
2,204,3122024-04-26 11:07:32au1fsj3jv0tx94gh93akr0wm0sl48ey6z5lnzpr36a9zqms6qxxxurqrcjcadsignAccepted
2,204,3122024-04-26 11:07:32au1z6nl4ltkhyj4zacadmlj9505hz4thktxu3zzmfcxhm7k64jx6v8qmk7cseverifyAccepted
2,204,3122024-04-26 11:07:32au19pglcrw2w3rwuf8mfxeljrgvcr67y8r8t0m63e88qhyc9htk5y8qd23tqjverifyAccepted
2,204,3122024-04-26 11:07:32au1hsul8rsyhvsuz850ql4gk5d3una9fqpdmvgpmtdfg40ynmldxs8s7e59mhsignAccepted
2,204,3122024-04-26 11:07:32au1ya86r7uvfl8ayteqnp78q77z2j6u3634vf32xrjcsu95385avv9snru4pfissue_authorizationAccepted
2,204,3122024-04-26 11:07:32au1qhuqlsv07njp8dhwp80ymyuk9rk3kfruh6f0hmrgptskl5sd5s9sgtwvx5issue_authorizationAccepted
2,204,2352024-04-26 11:00:34au1qujzgyes545l6gc0edrcx06txpyz9kvld66dvylrh6gwl9dhrgqqzaked7verifyAccepted
2,204,2352024-04-26 11:00:34au1ysy0hl9ymxaha2wdtupsxyfmgepjlgcl9xh5kfluh8uv5fslcvzq5zpan2issue_authorizationAccepted
2,204,2352024-04-26 11:00:34au1cpqxff4cpwfe8kd20knd8uncwhx3gg9dpgx7qmvz4xmxjuaw7qqsg3wsvpsignAccepted
2,204,2352024-04-26 11:00:34au19t47fn5m36mm9pecj2x9eavg388t0puramlqmra56rzxpdc3vupq3pue8jissue_authorizationAccepted
2,204,2352024-04-26 11:00:34au17kv2nmckdxxffe04l4nfadf3tdgr8rps8rsu665ljtymtmn35q9sct5fctsignAccepted
2,204,2352024-04-26 11:00:34au1zpuag7sgk3xa0w79e6gq0h3pp4ldw93usdynpaqhuuu0q2aqx5zqjnd4yxverifyAccepted
2,204,1642024-04-26 10:54:26au138l6y3f0zpddy6thwd8fj7qv2svar0uqyt4acd4fl2kzyazd3gpssz8vm7signAccepted
2,204,0992024-04-26 10:49:26au1mxux56836huyrrycexxk6w2l2mfs7gu4jkm4a47vqjzpg8gfgsqqwwm9hasignAccepted
2,203,9952024-04-26 10:39:26au1qpesxwpht4l5l3t5l4nnl08gadteewn2k9u3zhlucddjyg07dcpqjakxzwsignAccepted
2,190,7152024-04-25 13:39:01au1d92zku86r0txu4p68mdgw45tnfnk2qlx4af2zljwpywqe8eqjvpqc6wuqeissue_authorizationRejected
2,190,7152024-04-25 13:39:01au18nqe8hyaepekfr26ynndkqty76u703kkaz0r92zrjtc2jm2fpv8q0yt4wqverifyRejected














Not implemented