The explorer is out of sync. The last synced block is 642 hours ago. Current block height: explorer: 2206528 / node: 2615139 / ref: ?

Program multisig_11471047.aleo

Program ID
multisig_11471047.aleo
Owner signature
sign1ddnykr40dv99jknvvux5mumefgv3t54f0gul4qs9rufc4uz72yplndg6dm8ypjvdu3gp363uftyeesvsljpseya5f0mqxxentezn6qffmld7e4vm2kzgyjlge3ggyyey24760gftwv30faflcdgansp7q5dgy78gdshhk83hp46kg398hqt93w6xstu443fduz9xszj9le6sxzdtntu
Times called
85
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_11471047.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_11471047.aleo/initialize.future;
finalize initialize:
    input r0 as address.public;
    cast aleo1gtvqth4kckpw7lp0macdtfmkr86gah7pcya6hfj9cckvj40yjsfq8vrn56 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 aleo1gtvqth4kckpw7lp0macdtfmkr86gah7pcya6hfj9cckvj40yjsfq8vrn56 2u8 into r4 as Action;
    contains next_nonce[r4] into r5;
    not r5 into r6;
    assert.eq r6 true;
    set 1u64 into next_nonce[r4];
    set 1u8 into required_sigs[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_11471047.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_11471047.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_11471047.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_11471047.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_11471047.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 aleo1gtvqth4kckpw7lp0macdtfmkr86gah7pcya6hfj9cckvj40yjsfq8vrn56;
    async set_required_sigs_ r0 r1 into r2;
    output r2 as multisig_11471047.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 aleo1gtvqth4kckpw7lp0macdtfmkr86gah7pcya6hfj9cckvj40yjsfq8vrn56;
    async add_signer_ r0 into r1;
    output r1 as multisig_11471047.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 aleo1gtvqth4kckpw7lp0macdtfmkr86gah7pcya6hfj9cckvj40yjsfq8vrn56;
    async remove_signer_ r0 into r1;
    output r1 as multisig_11471047.aleo/remove_signer_.future;
finalize remove_signer_:
    input r0 as address.public;
    remove signers[r0];

Block heightTimestampTransition IDFunction callState
1,930,7172024-04-08 12:32:09au1thmtf7lcg6vtqvtaa8a7a4wffsvd7za82n9w78f6t0u9r6k3758qskw08uverifyRejected
1,930,7172024-04-08 12:32:09au1qndyumagghacu82seuvx97pd9alqmcea4xr2z6atkydkjw335czqauwsvsissue_authorizationRejected
1,930,7172024-04-08 12:32:09au1qehhyxq6evr29mguc0pz2599dsf0ydupy9jdr767ukfpxu6enyzqraqqv5add_signer_Rejected
1,930,7172024-04-08 12:32:09au1hft5tcaxcarn0a2lseggmm26ecxxwkwcy9u36dsfryud64ht8sgsfmaja4issue_authorizationRejected
1,930,7172024-04-08 12:32:09au19q9wham5na2v5p85vkzmskk49a4hj0rkl4h3wx4edr4qf0wnsv8s3gkxjsissue_authorizationRejected
1,930,7172024-04-08 12:32:09au16cku4khkp4rddme592clp2ftnu98ghuxkm7m9vxpn8nxj8xnuyxqktgrpmsignRejected
1,930,7172024-04-08 12:32:09au1xec2pvx46yufanfts5ctf8ttfw5s5udvrlm6z548adyfm25tdqrsdwujayadd_signer_Rejected
1,930,7172024-04-08 12:32:09au1e2qt84puaqr0nevyz8zw3vrxd0akq2k35z2y0t326l84euphxgysgd0culverifyRejected
1,930,7172024-04-08 12:32:09au1nfqxa8e4qw354v30hj0gs9x0e7kq0hkacdwl7gncxvm6w358wcgszaugsmsignRejected
1,930,7172024-04-08 12:32:09au1f2t7fxx2af74gljn32f0msa9utlk5gkq8mwfqhwk6dh24y5r5qxs873ctcadd_signer_Rejected
1,930,7172024-04-08 12:32:09au1yp6x9u4psttw7ejzpjfc5yn6sumqwrzkyamzjssugcfquguhacxqjjpkg0verifyRejected
1,930,7172024-04-08 12:32:09au1rs3dzz9e979x5lymscpghunk9gw67txje7jsc8k8xyzm2qnmxspq3yx3e2signRejected
1,930,7172024-04-08 12:32:09au1vzgwhfud6cv22h2u0sp4pt24d5ymw0azryvma5tfhumj6t42lqxqqzfyf9issue_authorizationRejected
1,930,7172024-04-08 12:32:09au18w66vean6uu0x26nue4z76djmqq0zdmed5j90ctyf75505px3ygqfyrvfrverifyRejected
1,930,7172024-04-08 12:32:09au1p763zfck0a2xct09653acdtp27tyqvw5j4daavwd3z3jpaw2qsgqfqxmy4initializeRejected
1,930,7172024-04-08 12:32:09au156kmgjne57jlkwcvstq3up2p0528uvegy8gxz59mgl9r9y629urqfxp0utadd_signer_Rejected
1,930,7172024-04-08 12:32:09au1dy44ctmd969p26qgpeh2wmga60exhzwwyan7h6c7v27ufsd3a5yqn0eswvsignRejected
1,930,6752024-04-08 12:28:00au17dq5mzsze4us72rvj6e3s46hg8ul3yggfszvs053eaqn6trqzgzqdzw4nvsignRejected
1,930,6752024-04-08 12:28:00au1vuw2m8mghqvq5fur9dzcnt6de5czg5tm0w4agwexv00v3673rc8sn69hfjissue_authorizationRejected
1,930,6752024-04-08 12:28:00au1g5qjxmpck49qm5u2uhu5ysvrdm7eccfc3xurfesq0zqdjjr4tuxsyra8tsadd_signer_Rejected
1,930,6752024-04-08 12:28:00au1xt8fwtwjscj2vs6d9c0m9rf4u8246nqztlpnrya530ymqht8qqpq87vr45issue_authorizationRejected
1,930,6752024-04-08 12:28:00au1w3g95n9m0yjkc5yc3ka6acydvf4njy6kmempgww4v0ght0wmpvqqmz0m8tverifyRejected
1,930,6752024-04-08 12:28:00au15ams4728jdr98yd3edh806us046padrh3e5l6x7sgf5n4qkm7c9qrwdqrmverifyRejected
1,930,6752024-04-08 12:28:00au18ly6vqfqc45dr22cwm4l0mtdnpv0dx5zj48fefdj6jgt8q442yyq8mx2tesignRejected
1,930,6752024-04-08 12:28:00au1tjsyj8xaes6krrpa7aa2zqnmxmny7yyrnrctz880wdxxuqex6ggsgzcep5issue_authorizationRejected
1,930,6752024-04-08 12:28:00au1z5hu8v2rq0rvn23ks6q59w5ywyk8dfkdk2dpyrcptf2qgh6dssrqes3ll0signRejected
1,930,6752024-04-08 12:28:00au138e7sh20fx4jz2jzcewvpnpm5sk03v3krsa7al9wp8rakwe9zqxsnfhul9verifyRejected
1,930,6752024-04-08 12:28:00au1lamdr3dlpf8ydnjka2ttvr73cwc345lgladna34at3r3paj6fupsrw4y46initializeRejected
1,930,6752024-04-08 12:28:00au15259kqfxtwp2ypn2macnhgtw6wunmhzhekgga63a2qpfxzdrgqxs6mqqzrverifyRejected
1,930,6752024-04-08 12:28:00au1djrfcc8d8na6l9utznj6t5kh4vuv94z2v37x5yy9vuw6qw78kgrsap5m23issue_authorizationRejected














Not implemented