The explorer is out of sync. The last synced block is 187 hours ago. Current block height: explorer: 2206528 / node: 2327807 / ref: 2327807
import arcane_access.aleo; import arcanetoken_v2_0.aleo; program arcane_amm_v2_1_1.aleo; struct PoolKey: token1 as u64; token2 as u64; record PoolAdmin: owner as address.private; pool_key as field.private; struct PoolInfo: id as field; token1_id as u64; token2_id as u64; reserve1 as u128; reserve2 as u128; lp_total_supply as u128; swap_fee as u128; struct DepositKey: holder as address; pool_key as field; deposit_id as field; record LpTokenReceipt: owner as address.private; token1_id as u64.private; token2_id as u64.private; deposit_id as field.private; struct ExtraAmount: token_id as u64; token_amount as u128; struct CollectedFee: fee_token_id as u64; pool_fee as u128; protocol_fee as u128; struct ProtocolFeeConfig: rate as u64; foundation as address; record ExtraAmountVoucher: owner as address.private; token_id as u64.private; voucher as field.private; mapping amm_pools: key as field.public; value as PoolInfo.public; mapping amm_deposits: key as field.public; value as u128.public; mapping amm_extras: key as field.public; value as ExtraAmount.public; mapping protocol_fee: key as field.public; value as ProtocolFeeConfig.public; mapping accrued_protocol_fees: key as u64.public; value as u128.public; function set_protocol_fee_private: input r0 as arcane_access.aleo/Access.record; input r1 as field.private; input r2 as ProtocolFeeConfig.private; call arcane_access.aleo/check_access_private r0 into r3 r4; async set_protocol_fee_private r4 r1 r2 into r5; output r3 as arcane_access.aleo/Access.record; output r5 as arcane_amm_v2_1_1.aleo/set_protocol_fee_private.future; finalize set_protocol_fee_private: input r0 as arcane_access.aleo/check_access_private.future; input r1 as field.public; input r2 as ProtocolFeeConfig.public; await r0; is.eq r1 1field into r3; contains amm_pools[r1] into r4; or r3 r4 into r5; assert.eq r5 true; set r2 into protocol_fee[r1]; function set_protocol_fee_public: input r0 as field.private; input r1 as ProtocolFeeConfig.private; call arcane_access.aleo/check_access_public self.caller into r2; async set_protocol_fee_public r2 r0 r1 into r3; output r3 as arcane_amm_v2_1_1.aleo/set_protocol_fee_public.future; finalize set_protocol_fee_public: input r0 as arcane_access.aleo/check_access_public.future; input r1 as field.public; input r2 as ProtocolFeeConfig.public; await r0; is.eq r1 1field into r3; contains amm_pools[r1] into r4; or r3 r4 into r5; assert.eq r5 true; set r2 into protocol_fee[r1]; function transfer_protocol_fees: input r0 as u64.private; input r1 as address.private; input r2 as u128.private; call arcanetoken_v2_0.aleo/transfer_public r0 r1 r2 into r3; async transfer_protocol_fees r3 r0 r1 r2 into r4; output r4 as arcane_amm_v2_1_1.aleo/transfer_protocol_fees.future; finalize transfer_protocol_fees: input r0 as arcanetoken_v2_0.aleo/transfer_public.future; input r1 as u64.public; input r2 as address.public; input r3 as u128.public; await r0; get.or_use accrued_protocol_fees[r1] 0u128 into r4; gte r4 r3 into r5; assert.eq r5 true; get protocol_fee[1field] into r6; is.eq r6.foundation r2 into r7; assert.eq r7 true; sub r4 r3 into r8; set r8 into accrued_protocol_fees[r1]; function create_pool: input r0 as address.private; input r1 as arcanetoken_v2_0.aleo/ArcaneToken.record; input r2 as u128.private; input r3 as arcanetoken_v2_0.aleo/ArcaneToken.record; input r4 as u128.private; input r5 as u128.private; gt r2 0u128 into r6; gt r4 0u128 into r7; and r6 r7 into r8; assert.eq r8 true; lte r5 10000u128 into r9; assert.eq r9 true; is.neq r1.token_id r3.token_id into r10; assert.eq r10 true; gte r1.amount r2 into r11; gte r3.amount r4 into r12; and r11 r12 into r13; assert.eq r13 true; lt r1.token_id r3.token_id into r14; assert.eq r14 true; call arcanetoken_v2_0.aleo/transfer_private_to_public r1 aleo1rfkc4hvgjfpkcxydxhd5rjup3fu63zquuzmw7gv6ynytp55h4ggq0tjc3r r2 into r15 r16; call arcanetoken_v2_0.aleo/transfer_private_to_public r3 aleo1rfkc4hvgjfpkcxydxhd5rjup3fu63zquuzmw7gv6ynytp55h4ggq0tjc3r r4 into r17 r18; gt r1.token_id r3.token_id into r19; ternary r19 r3.token_id r1.token_id into r20; lte r1.token_id r3.token_id into r21; ternary r21 r3.token_id r1.token_id into r22; cast r20 r22 into r23 as PoolKey; hash.bhp256 r23 into r24 as field; cast r0 r24 into r25 as PoolAdmin.record; async create_pool r16 r18 r24 r1.token_id r2 r3.token_id r4 r5 into r26; output r25 as PoolAdmin.record; output r15 as arcanetoken_v2_0.aleo/ArcaneToken.record; output r17 as arcanetoken_v2_0.aleo/ArcaneToken.record; output r26 as arcane_amm_v2_1_1.aleo/create_pool.future; finalize create_pool: input r0 as arcanetoken_v2_0.aleo/transfer_private_to_public.future; input r1 as arcanetoken_v2_0.aleo/transfer_private_to_public.future; input r2 as field.public; input r3 as u64.public; input r4 as u128.public; input r5 as u64.public; input r6 as u128.public; input r7 as u128.public; await r0; await r1; contains amm_pools[r2] into r8; not r8 into r9; assert.eq r9 true; mul r4 r6 into r10; cast r2 r3 r5 r4 r6 r10 r7 into r11 as PoolInfo; set r11 into amm_pools[r2]; function transfer_pool_ownership: input r0 as PoolAdmin.record; input r1 as address.private; is.eq r0.owner self.caller into r2; assert.eq r2 true; cast r1 r0.pool_key into r3 as PoolAdmin.record; output r3 as PoolAdmin.record; function add_amm_liquidity: input r0 as address.private; input r1 as arcanetoken_v2_0.aleo/ArcaneToken.record; input r2 as u128.private; input r3 as u128.private; input r4 as arcanetoken_v2_0.aleo/ArcaneToken.record; input r5 as u128.private; input r6 as u128.private; input r7 as field.private; call arcanetoken_v2_0.aleo/transfer_private_to_public r1 aleo1rfkc4hvgjfpkcxydxhd5rjup3fu63zquuzmw7gv6ynytp55h4ggq0tjc3r r2 into r8 r9; call arcanetoken_v2_0.aleo/transfer_private_to_public r4 aleo1rfkc4hvgjfpkcxydxhd5rjup3fu63zquuzmw7gv6ynytp55h4ggq0tjc3r r5 into r10 r11; cast r0 r1.token_id r4.token_id r7 into r12 as LpTokenReceipt.record; async add_amm_liquidity r9 r11 r7 r1.token_id r2 r3 r4.token_id r5 r6 into r13; output r8 as arcanetoken_v2_0.aleo/ArcaneToken.record; output r10 as arcanetoken_v2_0.aleo/ArcaneToken.record; output r12 as LpTokenReceipt.record; output r13 as arcane_amm_v2_1_1.aleo/add_amm_liquidity.future; finalize add_amm_liquidity: input r0 as arcanetoken_v2_0.aleo/transfer_private_to_public.future; input r1 as arcanetoken_v2_0.aleo/transfer_private_to_public.future; input r2 as field.public; input r3 as u64.public; input r4 as u128.public; input r5 as u128.public; input r6 as u64.public; input r7 as u128.public; input r8 as u128.public; await r0; await r1; gt r3 r6 into r9; ternary r9 r6 r3 into r10; lte r3 r6 into r11; ternary r11 r6 r3 into r12; cast r10 r12 into r13 as PoolKey; hash.bhp256 r13 into r14 as field; get amm_pools[r14] into r15; mul r4 r15.lp_total_supply into r16; div r16 r15.reserve1 into r17; mul r7 r15.lp_total_supply into r18; div r18 r15.reserve2 into r19; lt r17 r19 into r20; ternary r20 r17 r19 into r21; add r15.reserve1 r4 into r22; add r15.reserve2 r7 into r23; add r15.lp_total_supply r21 into r24; cast r15.id r15.token1_id r15.token2_id r22 r23 r24 r15.swap_fee into r25 as PoolInfo; set r25 into amm_pools[r14]; contains amm_deposits[r2] into r26; not r26 into r27; assert.eq r27 true; set r21 into amm_deposits[r2]; function remove_amm_liquidity: input r0 as address.private; input r1 as LpTokenReceipt.record; input r2 as u128.private; input r3 as u128.private; input r4 as field.private; input r5 as field.private; is.neq r4 r5 into r6; assert.eq r6 true; call arcanetoken_v2_0.aleo/transfer_public_to_private r1.token1_id r0 r2 into r7 r8; call arcanetoken_v2_0.aleo/transfer_public_to_private r1.token2_id r0 r3 into r9 r10; cast r0 r1.token1_id r4 into r11 as ExtraAmountVoucher.record; cast r0 r1.token2_id r5 into r12 as ExtraAmountVoucher.record; async remove_amm_liquidity r8 r10 r1.deposit_id r1.token1_id r1.token2_id r2 r3 r4 r5 into r13; output r7 as arcanetoken_v2_0.aleo/ArcaneToken.record; output r9 as arcanetoken_v2_0.aleo/ArcaneToken.record; output r11 as ExtraAmountVoucher.record; output r12 as ExtraAmountVoucher.record; output r13 as arcane_amm_v2_1_1.aleo/remove_amm_liquidity.future; finalize remove_amm_liquidity: input r0 as arcanetoken_v2_0.aleo/transfer_public_to_private.future; input r1 as arcanetoken_v2_0.aleo/transfer_public_to_private.future; input r2 as field.public; input r3 as u64.public; input r4 as u64.public; input r5 as u128.public; input r6 as u128.public; input r7 as field.public; input r8 as field.public; await r0; await r1; gt r3 r4 into r9; ternary r9 r4 r3 into r10; lte r3 r4 into r11; ternary r11 r4 r3 into r12; cast r10 r12 into r13 as PoolKey; hash.bhp256 r13 into r14 as field; get amm_pools[r14] into r15; get amm_deposits[r2] into r16; mul r16 r15.reserve1 into r17; div r17 r15.lp_total_supply into r18; mul r16 r15.reserve2 into r19; div r19 r15.lp_total_supply into r20; sub r18 r5 into r21; sub r20 r6 into r22; contains amm_extras[r7] into r23; not r23 into r24; assert.eq r24 true; cast r3 r21 into r25 as ExtraAmount; set r25 into amm_extras[r7]; contains amm_extras[r8] into r26; not r26 into r27; assert.eq r27 true; cast r4 r22 into r28 as ExtraAmount; set r28 into amm_extras[r8]; sub r15.reserve1 r18 into r29; sub r15.reserve2 r20 into r30; sub r15.lp_total_supply r16 into r31; cast r15.id r15.token1_id r15.token2_id r29 r30 r31 r15.swap_fee into r32 as PoolInfo; set r32 into amm_pools[r14]; remove amm_deposits[r2]; function remove_amm_liquidity_part: input r0 as address.private; input r1 as LpTokenReceipt.record; input r2 as u128.private; input r3 as u128.private; call arcanetoken_v2_0.aleo/transfer_public_to_private r1.token1_id r0 r2 into r4 r5; call arcanetoken_v2_0.aleo/transfer_public_to_private r1.token2_id r0 r3 into r6 r7; cast r1.owner r1.token1_id r1.token2_id r1.deposit_id into r8 as LpTokenReceipt.record; async remove_amm_liquidity_part r5 r7 r1.deposit_id r1.token1_id r1.token2_id r2 r3 into r9; output r4 as arcanetoken_v2_0.aleo/ArcaneToken.record; output r6 as arcanetoken_v2_0.aleo/ArcaneToken.record; output r8 as LpTokenReceipt.record; output r9 as arcane_amm_v2_1_1.aleo/remove_amm_liquidity_part.future; finalize remove_amm_liquidity_part: input r0 as arcanetoken_v2_0.aleo/transfer_public_to_private.future; input r1 as arcanetoken_v2_0.aleo/transfer_public_to_private.future; input r2 as field.public; input r3 as u64.public; input r4 as u64.public; input r5 as u128.public; input r6 as u128.public; await r0; await r1; gt r3 r4 into r7; ternary r7 r4 r3 into r8; lte r3 r4 into r9; ternary r9 r4 r3 into r10; cast r8 r10 into r11 as PoolKey; hash.bhp256 r11 into r12 as field; get amm_pools[r12] into r13; get amm_deposits[r2] into r14; mul r14 r13.reserve1 into r15; div r15 r13.lp_total_supply into r16; mul r14 r13.reserve2 into r17; div r17 r13.lp_total_supply into r18; sub r16 r5 into r19; sub r18 r6 into r20; mul r19 r13.lp_total_supply into r21; div r21 r13.reserve1 into r22; mul r20 r13.lp_total_supply into r23; div r23 r13.reserve2 into r24; lt r22 r24 into r25; ternary r25 r22 r24 into r26; sub r13.reserve1 r5 into r27; sub r13.reserve2 r6 into r28; sub r13.lp_total_supply r14 into r29; add r29 r26 into r30; cast r13.id r13.token1_id r13.token2_id r27 r28 r30 r13.swap_fee into r31 as PoolInfo; set r31 into amm_pools[r12]; set r26 into amm_deposits[r2]; function swap_amm: input r0 as address.private; input r1 as arcanetoken_v2_0.aleo/ArcaneToken.record; input r2 as u128.private; input r3 as u64.private; input r4 as u128.private; input r5 as field.private; gt r4 0u128 into r6; assert.eq r6 true; call arcanetoken_v2_0.aleo/transfer_private_to_public r1 aleo1rfkc4hvgjfpkcxydxhd5rjup3fu63zquuzmw7gv6ynytp55h4ggq0tjc3r r2 into r7 r8; call arcanetoken_v2_0.aleo/transfer_public_to_private r3 r0 r4 into r9 r10; cast r0 r3 r5 into r11 as ExtraAmountVoucher.record; async swap_amm r8 r10 r1.token_id r2 r3 r4 r5 into r12; output r7 as arcanetoken_v2_0.aleo/ArcaneToken.record; output r9 as arcanetoken_v2_0.aleo/ArcaneToken.record; output r11 as ExtraAmountVoucher.record; output r12 as arcane_amm_v2_1_1.aleo/swap_amm.future; finalize swap_amm: input r0 as arcanetoken_v2_0.aleo/transfer_private_to_public.future; input r1 as arcanetoken_v2_0.aleo/transfer_public_to_private.future; input r2 as u64.public; input r3 as u128.public; input r4 as u64.public; input r5 as u128.public; input r6 as field.public; await r0; await r1; gt r2 r4 into r7; ternary r7 r4 r2 into r8; lte r2 r4 into r9; ternary r9 r4 r2 into r10; cast r8 r10 into r11 as PoolKey; hash.bhp256 r11 into r12 as field; get amm_pools[r12] into r13; cast 0u64 aleo1rfkc4hvgjfpkcxydxhd5rjup3fu63zquuzmw7gv6ynytp55h4ggq0tjc3r into r14 as ProtocolFeeConfig; get.or_use protocol_fee[1field] r14 into r15; get.or_use protocol_fee[r12] r15 into r16; is.eq r13.token1_id r2 into r17; ternary r17 r13.reserve1 r13.reserve2 into r18; is.eq r13.token2_id r2 into r19; ternary r19 r13.reserve1 r13.reserve2 into r20; sub 10000u128 r13.swap_fee into r21; mul r3 r21 into r22; mul r22 r20 into r23; mul r18 10000u128 into r24; add r24 r22 into r25; div r23 r25 into r26; gte r26 r5 into r27; assert.eq r27 true; mul r3 10000u128 into r28; mul r28 r20 into r29; mul r18 10000u128 into r30; add r30 r28 into r31; div r29 r31 into r32; sub r32 r26 into r33; cast r16.rate into r34 as u128; mul r33 r34 into r35; div.w r35 10000u128 into r36; sub r33 r36 into r37; sub r26 r5 into r38; cast r4 r38 into r39 as ExtraAmount; add r18 r3 into r40; sub r20 r26 into r41; sub r41 r36 into r42; is.eq r13.token1_id r2 into r43; ternary r43 r40 r42 into r44; is.eq r13.token2_id r2 into r45; ternary r45 r40 r42 into r46; cast r13.id r13.token1_id r13.token2_id r44 r46 r13.lp_total_supply r13.swap_fee into r47 as PoolInfo; cast r4 r37 r36 into r48 as CollectedFee; set r39 into amm_extras[r6]; set r47 into amm_pools[r12]; get.or_use accrued_protocol_fees[r48.fee_token_id] 0u128 into r49; add r49 r48.protocol_fee into r50; set r50 into accrued_protocol_fees[r48.fee_token_id]; function swap_public_amm: input r0 as address.private; input r1 as u64.private; input r2 as u128.private; input r3 as u64.private; input r4 as u128.private; input r5 as field.private; gt r4 0u128 into r6; assert.eq r6 true; call arcanetoken_v2_0.aleo/transfer_public_from r1 self.caller aleo1rfkc4hvgjfpkcxydxhd5rjup3fu63zquuzmw7gv6ynytp55h4ggq0tjc3r r2 into r7; call arcanetoken_v2_0.aleo/transfer_public r3 r0 r4 into r8; cast r0 r3 r5 into r9 as ExtraAmountVoucher.record; async swap_public_amm r7 r8 r1 r2 r3 r4 r5 into r10; output r9 as ExtraAmountVoucher.record; output r10 as arcane_amm_v2_1_1.aleo/swap_public_amm.future; finalize swap_public_amm: input r0 as arcanetoken_v2_0.aleo/transfer_public_from.future; input r1 as arcanetoken_v2_0.aleo/transfer_public.future; input r2 as u64.public; input r3 as u128.public; input r4 as u64.public; input r5 as u128.public; input r6 as field.public; await r0; await r1; gt r2 r4 into r7; ternary r7 r4 r2 into r8; lte r2 r4 into r9; ternary r9 r4 r2 into r10; cast r8 r10 into r11 as PoolKey; hash.bhp256 r11 into r12 as field; get amm_pools[r12] into r13; cast 0u64 aleo1rfkc4hvgjfpkcxydxhd5rjup3fu63zquuzmw7gv6ynytp55h4ggq0tjc3r into r14 as ProtocolFeeConfig; get.or_use protocol_fee[1field] r14 into r15; get.or_use protocol_fee[r12] r15 into r16; is.eq r13.token1_id r2 into r17; ternary r17 r13.reserve1 r13.reserve2 into r18; is.eq r13.token2_id r2 into r19; ternary r19 r13.reserve1 r13.reserve2 into r20; sub 10000u128 r13.swap_fee into r21; mul r3 r21 into r22; mul r22 r20 into r23; mul r18 10000u128 into r24; add r24 r22 into r25; div r23 r25 into r26; gte r26 r5 into r27; assert.eq r27 true; mul r3 10000u128 into r28; mul r28 r20 into r29; mul r18 10000u128 into r30; add r30 r28 into r31; div r29 r31 into r32; sub r32 r26 into r33; cast r16.rate into r34 as u128; mul r33 r34 into r35; div.w r35 10000u128 into r36; sub r33 r36 into r37; sub r26 r5 into r38; cast r4 r38 into r39 as ExtraAmount; add r18 r3 into r40; sub r20 r26 into r41; sub r41 r36 into r42; is.eq r13.token1_id r2 into r43; ternary r43 r40 r42 into r44; is.eq r13.token2_id r2 into r45; ternary r45 r40 r42 into r46; cast r13.id r13.token1_id r13.token2_id r44 r46 r13.lp_total_supply r13.swap_fee into r47 as PoolInfo; cast r4 r37 r36 into r48 as CollectedFee; set r39 into amm_extras[r6]; set r47 into amm_pools[r12]; get.or_use accrued_protocol_fees[r48.fee_token_id] 0u128 into r49; add r49 r48.protocol_fee into r50; set r50 into accrued_protocol_fees[r48.fee_token_id]; function redeem_voucher: input r0 as ExtraAmountVoucher.record; input r1 as u128.private; call arcanetoken_v2_0.aleo/transfer_public_to_private r0.token_id r0.owner r1 into r2 r3; async redeem_voucher r3 r0.token_id r0.voucher r1 into r4; output r2 as arcanetoken_v2_0.aleo/ArcaneToken.record; output r4 as arcane_amm_v2_1_1.aleo/redeem_voucher.future; finalize redeem_voucher: input r0 as arcanetoken_v2_0.aleo/transfer_public_to_private.future; input r1 as u64.public; input r2 as field.public; input r3 as u128.public; await r0; get amm_extras[r2] into r4; is.eq r4.token_id r1 into r5; is.eq r4.token_amount r3 into r6; and r5 r6 into r7; assert.eq r7 true; remove amm_extras[r2];
Block height | Timestamp | Transition ID | Function call | State |
1,958,570 | 2024-04-10 09:03:28 | au1cxp9c3hyldh8w473ku5hfmhcdmydsawj8r7z3mkz3u28c4l73c8s8w5tnp | swap_amm | Accepted |
1,946,046 | 2024-04-09 13:08:45 | au1w32ec6udc0d298vdpdjuugtswhrk69nwvw8x46pczvls587eu5qsxal2jp | create_pool | Accepted |
1,945,981 | 2024-04-09 13:02:50 | au1enxddyjhpqu8glvyj0g9qz0py039nl6l0ujyuxfz4k4qzd99csqsxcwjnq | create_pool | Accepted |
1,945,914 | 2024-04-09 12:56:43 | au1sf53vwhxun7f7ev8tfardsx96a2r4hqx0k0e2erxq9zk6gvw5szql3tjea | create_pool | Accepted |