in_sync

Program protocol_core.aleo

Program ID
protocol_core.aleo
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)
Structs
Proposal
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)
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 heightTimestampTransition IDFunction callState












Not implemented