in_sync

Program ast_finance.aleo

Program ID
ast_finance.aleo
Owner signature
sign1u22jaw6hnzkxc7z4w7rlxgwnefxzjgnuchfe2nectmacr0d44uqjgt9q8pnz0tmwht7qhmh7lqwqzwxj0drtc64h9593k8qh2k33vqrrwv6l6pk0uvxkxtjmulvvethdplftet9t0wafzj4qhk6w6j8jqd7tf7wcrwtga2mwwek7xcwsnts62gpq3wm2vzdzfn85jka6gpaqy7hk0lm
Times called
0
Similar programs
Imports
Mappings
validator (u8 -> Validator)
ast_balance (address -> u64)
admin (u8 -> address)
is_initialized (u8 -> boolean)
current_batch_height (u8 -> u32)
withdrawals (address -> withdrawal_state)
pending_withdrawal (u8 -> u64)
Structs
Validator
withdrawal_state
Records
-
Functions
-
Transitions
initialize(public u64, public address, public address) -> () finalize(u64, address, address)
update_config(public u64, public address) -> () finalize(u64, address, address)
deposit(public u64, public address) -> () finalize(address, address, u64)
claim_redeem(public u64) -> () finalize(address, u64)
claim_unbond() -> ()
claim_withdrawal(public address, public u64) -> () finalize(address, u64)
Program Source Code (Aleo Instruction) Upload Leo source

import credits.aleo;

program ast_finance.aleo;

struct Validator:
    validator_address as address;
    total_stake_credits as u64;
    reward_fee as u64;
    total_ast_balance as u64;

struct withdrawal_state:
    microcredits as u64;
    claim_block as u32;

mapping validator:
    key as u8.public;
    value as Validator.public;

mapping ast_balance:
    key as address.public;
    value as u64.public;

mapping admin:
    key as u8.public;
    value as address.public;

mapping is_initialized:
    key as u8.public;
    value as boolean.public;

mapping current_batch_height:
    key as u8.public;
    value as u32.public;

mapping withdrawals:
    key as address.public;
    value as withdrawal_state.public;

mapping pending_withdrawal:
    key as u8.public;
    value as u64.public;

function initialize:
    input r0 as u64.public;
    input r1 as address.public;
    input r2 as address.public;
    assert.eq self.caller aleo1kf3dgrz9lqyklz8kqfy0hpxxyt78qfuzshuhccl02a5x43x6nqpsaapqru;
    lt r0 1000u64 into r3;
    assert.eq r3 true;
    async initialize r0 r1 r2 into r4;
    output r4 as ast_finance.aleo/initialize.future;
finalize initialize:
    input r0 as u64.public;
    input r1 as address.public;
    input r2 as address.public;
    get.or_use is_initialized[0u8] false into r3;
    assert.eq r3 false;
    set true into is_initialized[0u8];
    cast r1 0u64 r0 0u64 into r4 as Validator;
    set r2 into admin[0u8];
    set r4 into validator[0u8];
    set 0u64 into pending_withdrawal[0u8];
    set 0u64 into pending_withdrawal[1u8];
    set 0u32 into current_batch_height[0u8];

function update_config:
    input r0 as u64.public;
    input r1 as address.public;
    lt r0 1000u64 into r2;
    assert.eq r2 true;
    async update_config r0 self.caller r1 into r3;
    output r3 as ast_finance.aleo/update_config.future;
finalize update_config:
    input r0 as u64.public;
    input r1 as address.public;
    input r2 as address.public;
    get admin[0u8] into r3;
    is.eq r1 r3 into r4;
    assert.eq r4 true;
    get validator[0u8] into r5;
    cast r5.validator_address r5.total_stake_credits r0 r5.total_ast_balance into r6 as Validator;
    set r5 into validator[0u8];

function deposit:
    input r0 as u64.public;
    input r1 as address.public;
    call credits.aleo/transfer_public_as_signer ast_finance.aleo r0 into r2;
    call credits.aleo/bond_public r1 ast_finance.aleo r0 into r3;
    async deposit r2 r3 self.caller r1 r0 into r4;
    output r4 as ast_finance.aleo/deposit.future;
finalize deposit:
    input r0 as credits.aleo/transfer_public_as_signer.future;
    input r1 as credits.aleo/bond_public.future;
    input r2 as address.public;
    input r3 as address.public;
    input r4 as u64.public;
    await r0;
    await r1;
    get validator[0u8] into r5;
    is.eq r5.validator_address r3 into r6;
    assert.eq r6 true;
    cast r5.total_ast_balance into r7 as u128;
    mul r7 1000u128 into r8;
    add r5.total_stake_credits r4 into r9;
    cast r9 into r10 as u128;
    mul r8 r10 into r11;
    cast r5.total_stake_credits into r12 as u128;
    mul r12 1000u128 into r13;
    div r11 r13 into r14;
    sub r14 r14 into r15;
    cast r15 into r16 as u64;
    add r5.total_stake_credits r4 into r17;
    add r5.total_ast_balance r16 into r18;
    cast r5.validator_address r17 r5.reward_fee r18 into r19 as Validator;
    get.or_use ast_balance[r2] 0u64 into r20;
    set r19 into validator[0u8];
    add r20 r16 into r21;
    set r21 into ast_balance[r2];

function claim_redeem:
    input r0 as u64.public;
    call credits.aleo/unbond_public r0 into r1;
    async claim_redeem r1 self.caller r0 into r2;
    output r2 as ast_finance.aleo/claim_redeem.future;
finalize claim_redeem:
    input r0 as credits.aleo/unbond_public.future;
    input r1 as address.public;
    input r2 as u64.public;
    await r0;
    get.or_use current_batch_height[0u8] 0u32 into r3;
    add block.height 360u32 into r4;
    is.eq r3 0u32 into r5;
    gte r3 r4 into r6;
    or r5 r6 into r7;
    assert.eq r7 true;
    get validator[0u8] into r8;
    cast r8.total_ast_balance into r9 as u128;
    cast r2 into r10 as u128;
    mul r9 r10 into r11;
    mul r11 1000u128 into r12;
    cast r8.total_stake_credits into r13 as u128;
    mul r13 1000u128 into r14;
    div r12 r14 into r15;
    cast r15 into r16 as u64;
    mul r16 r8.reward_fee into r17;
    cast 1000u128 into r18 as u64;
    div r17 r18 into r19;
    add r16 r19 into r20;
    sub r8.total_stake_credits r2 into r21;
    sub r8.total_ast_balance r16 into r22;
    sub r22 r19 into r23;
    cast r8.validator_address r21 r8.reward_fee r23 into r24 as Validator;
    get.or_use ast_balance[r1] 0u64 into r25;
    get.or_use admin[0u8] ast_finance.aleo into r26;
    get.or_use ast_balance[r26] 0u64 into r27;
    gte r25 r20 into r28;
    assert.eq r28 true;
    cast 0u64 0u32 into r29 as withdrawal_state;
    get.or_use withdrawals[r1] r29 into r30;
    div block.height 1000u32 into r31;
    mul r31 1000u32 into r32;
    add r32 1000u32 into r33;
    ternary r5 r33 r3 into r34;
    add r30.microcredits r2 into r35;
    cast r35 r34 into r36 as withdrawal_state;
    set r36 into withdrawals[r1];
    set r24 into validator[0u8];
    sub r25 r20 into r37;
    set r37 into ast_balance[r1];
    add r27 r19 into r38;
    set r38 into ast_balance[r26];

function claim_unbond:
    call credits.aleo/claim_unbond_public  into r0;
    async claim_unbond r0 into r1;
    output r1 as ast_finance.aleo/claim_unbond.future;
finalize claim_unbond:
    input r0 as credits.aleo/claim_unbond_public.future;
    await r0;
    remove current_batch_height[0u8];
    get pending_withdrawal[0u8] into r1;
    get pending_withdrawal[1u8] into r2;
    add r2 r1 into r3;
    set 0u64 into pending_withdrawal[0u8];
    set r3 into pending_withdrawal[1u8];

function claim_withdrawal:
    input r0 as address.public;
    input r1 as u64.public;
    call credits.aleo/transfer_public r0 r1 into r2;
    async claim_withdrawal r2 r0 r1 into r3;
    output r3 as ast_finance.aleo/claim_withdrawal.future;
finalize claim_withdrawal:
    input r0 as credits.aleo/transfer_public.future;
    input r1 as address.public;
    input r2 as u64.public;
    await r0;
    get withdrawals[r1] into r3;
    gte block.height r3.claim_block into r4;
    assert.eq r4 true;
    assert.eq r3.microcredits r2;
    remove withdrawals[r1];
    get pending_withdrawal[1u8] into r5;
    sub r5 r2 into r6;
    set r6 into pending_withdrawal[1u8];

Block heightTimestampTransition IDFunction callState














Not implemented