Program protocol_core.aleo
Program ID
protocol_core.aleo
Deployment transaction
Owner signature
sign1v99mlnrsjcl4w33zcdmn5wks2y2s3t29usfrveph9ay8rjhk5vq7tx6fdqlxwtgnkdwzx53ru5p2x97tszd7ucs5jcnle2trevavyqch7y00jwagn9ae9ytnk5qj7za66k5nruz2ex0y87flnlkctk2eqq62xlryqk35v7q8k82fxepzes2rqz8rhsaz07yqr0p85g3mhrpssa09z2n
Times called
0
Similar programs
0
Imports
-
Mappings
validator_sets (u64 -> [address; 16u32])
validator_sets_length (boolean -> u64)
vote_approval_threshold (boolean -> u8)
proposals (field -> Proposal)
votes (field -> [boolean; 16u32])
custodies (field -> CustodyState)
validator_sets_length (boolean -> u64)
vote_approval_threshold (boolean -> u8)
proposals (field -> Proposal)
votes (field -> [boolean; 16u32])
custodies (field -> CustodyState)
Structs
Proposal
CustodyState
Share
CustodyState
Share
Records
-
Functions
-
Transitions
initiate_validators(public [address; 16u32], public u8) -> () finalize([address; 16u32], u8)
initiate_proposal(public Proposal) -> () finalize(address, [address; 16u32], u8, u64)
vote(public Proposal, public u8, public boolean) -> () finalize(address, [address; 16u32], u8, u64, u8, boolean)
accept_proposal(public Proposal, public boolean) -> () finalize(address, [address; 16u32], u8, u64, boolean)
custody_data_as_program(public field, public [address; 16u32]) -> () finalize(field, [address; 16u32])
request_data_as_program(public field, public [address; 16u32], public u64) -> () finalize(field, [address; 16u32], u64)
process_request_as_validator(public field, public u64, public u8) -> () finalize(field, u64, u8)
initiate_proposal(public Proposal) -> () finalize(address, [address; 16u32], u8, u64)
vote(public Proposal, public u8, public boolean) -> () finalize(address, [address; 16u32], u8, u64, u8, boolean)
accept_proposal(public Proposal, public boolean) -> () finalize(address, [address; 16u32], u8, u64, boolean)
custody_data_as_program(public field, public [address; 16u32]) -> () finalize(field, [address; 16u32])
request_data_as_program(public field, public [address; 16u32], public u64) -> () finalize(field, [address; 16u32], u64)
process_request_as_validator(public field, public u64, public u8) -> () finalize(field, u64, u8)
Program Source Code (Aleo Instruction) Upload Leo source
program protocol_core.aleo; struct Proposal: validators as [address; 16u32]; threshold as u8; current_validator_set_index as u64; struct CustodyState: validator_set_index as u64; validator_fee as u64; requested as boolean; submitted_shares as u8; struct Share: share_val as field; index as field; mapping validator_sets: key as u64.public; value as [address; 16u32].public; mapping validator_sets_length: key as boolean.public; value as u64.public; mapping vote_approval_threshold: key as boolean.public; value as u8.public; mapping proposals: key as field.public; value as Proposal.public; mapping votes: key as field.public; value as [boolean; 16u32].public; mapping custodies: key as field.public; value as CustodyState.public; function initiate_validators: input r0 as [address; 16u32].public; input r1 as u8.public; assert.eq self.caller aleo1wamjqlka7d0gazlxdys6n8e8zeee3ymedwvw8elvh7529kwd45rq0plgax; async initiate_validators r0 r1 into r2; output r2 as protocol_core.aleo/initiate_validators.future; finalize initiate_validators: input r0 as [address; 16u32].public; input r1 as u8.public; contains validator_sets_length[true] into r2; not r2 into r3; assert.eq r3 true; set 1u64 into validator_sets_length[true]; set r0 into validator_sets[0u64]; set r1 into vote_approval_threshold[true]; function initiate_proposal: input r0 as Proposal.public; async initiate_proposal self.caller r0.validators r0.threshold r0.current_validator_set_index into r1; output r1 as protocol_core.aleo/initiate_proposal.future; finalize initiate_proposal: input r0 as address.public; input r1 as [address; 16u32].public; input r2 as u8.public; input r3 as u64.public; cast r1 r2 r3 into r4 as Proposal; hash.bhp256 r4 into r5 as field; get validator_sets_length[true] into r6; sub r6 1u64 into r7; assert.eq r4.current_validator_set_index r7; get validator_sets[r4.current_validator_set_index] into r8; is.eq r0 r8[0] into r9; is.eq r0 r8[1] into r10; or r9 r10 into r11; is.eq r0 r8[2] into r12; or r11 r12 into r13; is.eq r0 r8[3] into r14; or r13 r14 into r15; is.eq r0 r8[4] into r16; or r15 r16 into r17; is.eq r0 r8[5] into r18; or r17 r18 into r19; is.eq r0 r8[6] into r20; or r19 r20 into r21; is.eq r0 r8[7] into r22; or r21 r22 into r23; is.eq r0 r8[8] into r24; or r23 r24 into r25; is.eq r0 r8[9] into r26; or r25 r26 into r27; is.eq r0 r8[10] into r28; or r27 r28 into r29; is.eq r0 r8[11] into r30; or r29 r30 into r31; is.eq r0 r8[12] into r32; or r31 r32 into r33; is.eq r0 r8[13] into r34; or r33 r34 into r35; is.eq r0 r8[14] into r36; or r35 r36 into r37; is.eq r0 r8[15] into r38; or r37 r38 into r39; set r4 into proposals[r5]; function vote: input r0 as Proposal.public; input r1 as u8.public; input r2 as boolean.public; async vote self.caller r0.validators r0.threshold r0.current_validator_set_index r1 r2 into r3; output r3 as protocol_core.aleo/vote.future; finalize vote: input r0 as address.public; input r1 as [address; 16u32].public; input r2 as u8.public; input r3 as u64.public; input r4 as u8.public; input r5 as boolean.public; cast r1 r2 r3 into r6 as Proposal; hash.bhp256 r6 into r7 as field; get validator_sets_length[true] into r8; sub r8 1u64 into r9; assert.eq r6.current_validator_set_index r9; get validator_sets[r6.current_validator_set_index] into r10; is.eq r4 0u8 into r11; is.eq r4 1u8 into r12; is.eq r4 2u8 into r13; is.eq r4 3u8 into r14; is.eq r4 4u8 into r15; is.eq r4 5u8 into r16; is.eq r4 6u8 into r17; is.eq r4 7u8 into r18; is.eq r4 8u8 into r19; is.eq r4 9u8 into r20; is.eq r4 10u8 into r21; is.eq r4 11u8 into r22; is.eq r4 12u8 into r23; is.eq r4 13u8 into r24; is.eq r4 14u8 into r25; is.eq r4 15u8 into r26; cast 0group into r27 as address; ternary r26 r10[15] r27 into r28; ternary r25 r10[14] r28 into r29; ternary r24 r10[13] r29 into r30; ternary r23 r10[12] r30 into r31; ternary r22 r10[11] r31 into r32; ternary r21 r10[10] r32 into r33; ternary r20 r10[9] r33 into r34; ternary r19 r10[8] r34 into r35; ternary r18 r10[7] r35 into r36; ternary r17 r10[6] r36 into r37; ternary r16 r10[5] r37 into r38; ternary r15 r10[4] r38 into r39; ternary r14 r10[3] r39 into r40; ternary r13 r10[2] r40 into r41; ternary r12 r10[1] r41 into r42; ternary r11 r10[0] r42 into r43; assert.eq r43 r0; cast false false false false false false false false false false false false false false false false into r44 as [boolean; 16u32]; get.or_use votes[r7] r44 into r45; is.eq r4 0u8 into r46; ternary r46 r5 r45[0] into r47; is.eq r4 1u8 into r48; ternary r48 r5 r45[1] into r49; is.eq r4 2u8 into r50; ternary r50 r5 r45[2] into r51; is.eq r4 3u8 into r52; ternary r52 r5 r45[3] into r53; is.eq r4 4u8 into r54; ternary r54 r5 r45[4] into r55; is.eq r4 5u8 into r56; ternary r56 r5 r45[5] into r57; is.eq r4 6u8 into r58; ternary r58 r5 r45[6] into r59; is.eq r4 7u8 into r60; ternary r60 r5 r45[7] into r61; is.eq r4 8u8 into r62; ternary r62 r5 r45[8] into r63; is.eq r4 9u8 into r64; ternary r64 r5 r45[9] into r65; is.eq r4 10u8 into r66; ternary r66 r5 r45[10] into r67; is.eq r4 11u8 into r68; ternary r68 r5 r45[11] into r69; is.eq r4 12u8 into r70; ternary r70 r5 r45[12] into r71; is.eq r4 13u8 into r72; ternary r72 r5 r45[13] into r73; is.eq r4 14u8 into r74; ternary r74 r5 r45[14] into r75; is.eq r4 15u8 into r76; ternary r76 r5 r45[15] into r77; cast r47 r49 r51 r53 r55 r57 r59 r61 r63 r65 r67 r69 r71 r73 r75 r77 into r78 as [boolean; 16u32]; set r78 into votes[r7]; function accept_proposal: input r0 as Proposal.public; input r1 as boolean.public; async accept_proposal self.caller r0.validators r0.threshold r0.current_validator_set_index r1 into r2; output r2 as protocol_core.aleo/accept_proposal.future; finalize accept_proposal: input r0 as address.public; input r1 as [address; 16u32].public; input r2 as u8.public; input r3 as u64.public; input r4 as boolean.public; cast r1 r2 r3 into r5 as Proposal; hash.bhp256 r5 into r6 as field; get validator_sets_length[true] into r7; sub r7 1u64 into r8; assert.eq r5.current_validator_set_index r8; get validator_sets[r5.current_validator_set_index] into r9; is.eq r0 r9[0] into r10; is.eq r0 r9[1] into r11; or r10 r11 into r12; is.eq r0 r9[2] into r13; or r12 r13 into r14; is.eq r0 r9[3] into r15; or r14 r15 into r16; is.eq r0 r9[4] into r17; or r16 r17 into r18; is.eq r0 r9[5] into r19; or r18 r19 into r20; is.eq r0 r9[6] into r21; or r20 r21 into r22; is.eq r0 r9[7] into r23; or r22 r23 into r24; is.eq r0 r9[8] into r25; or r24 r25 into r26; is.eq r0 r9[9] into r27; or r26 r27 into r28; is.eq r0 r9[10] into r29; or r28 r29 into r30; is.eq r0 r9[11] into r31; or r30 r31 into r32; is.eq r0 r9[12] into r33; or r32 r33 into r34; is.eq r0 r9[13] into r35; or r34 r35 into r36; is.eq r0 r9[14] into r37; or r36 r37 into r38; is.eq r0 r9[15] into r39; or r38 r39 into r40; get vote_approval_threshold[true] into r41; get votes[r6] into r42; cast r42[0] into r43 as u8; cast r42[1] into r44 as u8; add r43 r44 into r45; cast r42[2] into r46 as u8; add r45 r46 into r47; cast r42[3] into r48 as u8; add r47 r48 into r49; cast r42[4] into r50 as u8; add r49 r50 into r51; cast r42[5] into r52 as u8; add r51 r52 into r53; cast r42[6] into r54 as u8; add r53 r54 into r55; cast r42[7] into r56 as u8; add r55 r56 into r57; cast r42[8] into r58 as u8; add r57 r58 into r59; cast r42[9] into r60 as u8; add r59 r60 into r61; cast r42[10] into r62 as u8; add r61 r62 into r63; cast r42[11] into r64 as u8; add r63 r64 into r65; cast r42[12] into r66 as u8; add r65 r66 into r67; cast r42[13] into r68 as u8; add r67 r68 into r69; cast r42[14] into r70 as u8; add r69 r70 into r71; cast r42[15] into r72 as u8; add r71 r72 into r73; gte r73 r41 into r74; assert.eq r74 true; add r7 1u64 into r75; set r75 into validator_sets_length[true]; set r5.validators into validator_sets[r7]; set r5.threshold into vote_approval_threshold[true]; function custody_data_as_program: input r0 as field.public; input r1 as [address; 16u32].public; assert.eq self.caller secret_custody_protocol.aleo; async custody_data_as_program r0 r1 into r2; output r2 as protocol_core.aleo/custody_data_as_program.future; finalize custody_data_as_program: input r0 as field.public; input r1 as [address; 16u32].public; contains custodies[r0] into r2; not r2 into r3; assert.eq r3 true; get validator_sets_length[true] into r4; sub r4 1u64 into r5; get validator_sets[r5] into r6; assert.eq r1 r6; cast r5 0u64 false 0u8 into r7 as CustodyState; set r7 into custodies[r0]; function request_data_as_program: input r0 as field.public; input r1 as [address; 16u32].public; input r2 as u64.public; assert.eq self.caller secret_custody_protocol.aleo; async request_data_as_program r0 r1 r2 into r3; output r3 as protocol_core.aleo/request_data_as_program.future; finalize request_data_as_program: input r0 as field.public; input r1 as [address; 16u32].public; input r2 as u64.public; get custodies[r0] into r3; not r3.requested into r4; assert.eq r4 true; get validator_sets[r3.validator_set_index] into r5; assert.eq r1 r5; cast r3.validator_set_index r2 true 0u8 into r6 as CustodyState; set r6 into custodies[r0]; function process_request_as_validator: input r0 as field.public; input r1 as u64.public; input r2 as u8.public; assert.eq self.caller protocol_transfers.aleo; async process_request_as_validator r0 r1 r2 into r3; output r3 as protocol_core.aleo/process_request_as_validator.future; finalize process_request_as_validator: input r0 as field.public; input r1 as u64.public; input r2 as u8.public; get custodies[r0] into r3; assert.eq r3.requested true; assert.eq r1 r3.validator_fee; lt r3.submitted_shares r2 into r4; assert.eq r4 true; add r3.submitted_shares 1u8 into r5; cast r3.validator_set_index r3.validator_fee true r5 into r6 as CustodyState; set r6 into custodies[r0];
Block height | Timestamp | Transition ID | Function call | State |