Program ast_finance.aleo
Program ID
ast_finance.aleo
Deployment transaction
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)
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
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)
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 height | Timestamp | Transition ID | Function call | State |