The explorer is out of sync. The last synced block is 575 hours ago. Current block height: explorer: 2206528 / node: 2573398 / ref: 2492275

Program arcane_amm_v2_0.aleo

Program ID
arcane_amm_v2_0.aleo
Owner signature
sign1a3v0k9cz627rdnydq7nra3vly9wmkwg0wmu038yhuy0n568myyph5tu7n3qzfsgugn8dtg6wqn6mve60jeahu7vqhky9aav8lkdcgq05lsr6h7xlxljuvex20rcdr67g9ea7mgwt50f4dhp7w9mlav3aqspnwce4s30mhd0qrhfy79pspgw9wlx9nyxfmnygqh78w5m36ahqu8a9qz8
Times called
174855
Similar programs
0
Mappings
amm_pools (field -> PoolInfo)
amm_deposits (field -> u128)
amm_extras (field -> ExtraAmount)
Structs
PoolKey
PoolInfo
DepositKey
ExtraAmount
Records
PoolAdmin
LpTokenReceipt
ExtraAmountVoucher
Functions
-
Transitions
create_pool(address, arcanetoken.aleo/ArcaneToken, u128, arcanetoken.aleo/ArcaneToken, u128, u128) -> (PoolAdmin, arcanetoken.aleo/ArcaneToken, arcanetoken.aleo/ArcaneToken) finalize(field, u64, u128, u64, u128, u128)
transfer_pool_ownership(PoolAdmin, address) -> PoolAdmin
add_amm_liquidity(address, arcanetoken.aleo/ArcaneToken, u128, u128, arcanetoken.aleo/ArcaneToken, u128, u128, field) -> (arcanetoken.aleo/ArcaneToken, arcanetoken.aleo/ArcaneToken, LpTokenReceipt) finalize(field, u64, u128, u128, u64, u128, u128)
remove_amm_liquidity(address, LpTokenReceipt, u128, u128, field, field) -> (arcanetoken.aleo/ArcaneToken, arcanetoken.aleo/ArcaneToken, ExtraAmountVoucher, ExtraAmountVoucher) finalize(field, u64, u64, u128, u128, field, field)
swap_amm(address, arcanetoken.aleo/ArcaneToken, u128, u64, u128, field) -> (arcanetoken.aleo/ArcaneToken, arcanetoken.aleo/ArcaneToken, ExtraAmountVoucher) finalize(u64, u128, u64, u128, field)
redeem_voucher(ExtraAmountVoucher, u128) -> arcanetoken.aleo/ArcaneToken finalize(u64, field, u128)
create_pool_pric(address, credits.aleo/credits, u64, arcanetoken.aleo/ArcaneToken, u128, u128) -> (PoolAdmin, credits.aleo/credits, arcanetoken.aleo/ArcaneToken) finalize(field, u64, u128, u64, u128, u128)
add_amm_liquidity_pric(address, credits.aleo/credits, u64, arcanetoken.aleo/ArcaneToken, u128, field) -> (credits.aleo/credits, arcanetoken.aleo/ArcaneToken, LpTokenReceipt) finalize(field, u128, u64, u128)
remove_amm_liquidity_pric(address, LpTokenReceipt, u64, u128, field, field) -> (credits.aleo/credits, arcanetoken.aleo/ArcaneToken, ExtraAmountVoucher, ExtraAmountVoucher) finalize(field, u64, u64, u128, u128, field, field)
swap_amm_puc_in(address, u128, u64, u128, field) -> (arcanetoken.aleo/ArcaneToken, ExtraAmountVoucher) finalize(u128, u64, u128, field)
swap_amm_pric_in(address, credits.aleo/credits, u64, u64, u128, field) -> (credits.aleo/credits, arcanetoken.aleo/ArcaneToken, ExtraAmountVoucher) finalize(u128, u64, u128, field)
swap_amm_pric_out(address, arcanetoken.aleo/ArcaneToken, u128, u64, field) -> (arcanetoken.aleo/ArcaneToken, credits.aleo/credits, ExtraAmountVoucher) finalize(u64, u128, u128, field)
redeem_voucher_pric(ExtraAmountVoucher, u64) -> credits.aleo/credits finalize(field, u128)
init_demo_pools(field) -> ()
Program Source Code (Aleo Instruction) Upload Leo source

import credits.aleo;
import arcanetoken.aleo;

program arcane_amm_v2_0.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;

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;

function create_pool:
    input r0 as address.private;
    input r1 as arcanetoken.aleo/ArcaneToken.record;
    input r2 as u128.private;
    input r3 as arcanetoken.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.aleo/transfer_private_to_public_arc r1 aleo1hy8w46tflux7zwpeaw8ny7tq6wkzqux40z75a9ah3q9tqa4t758qltkqu7 r2 into r15 r16;
    call arcanetoken.aleo/transfer_private_to_public_arc r3 aleo1hy8w46tflux7zwpeaw8ny7tq6wkzqux40z75a9ah3q9tqa4t758qltkqu7 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.aleo/ArcaneToken.record;
    output r17 as arcanetoken.aleo/ArcaneToken.record;
    output r26 as arcane_amm_v2_0.aleo/create_pool.future;
finalize create_pool:
    input r0 as arcanetoken.aleo/transfer_private_to_public_arc.future;
    input r1 as arcanetoken.aleo/transfer_private_to_public_arc.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.aleo/ArcaneToken.record;
    input r2 as u128.private;
    input r3 as u128.private;
    input r4 as arcanetoken.aleo/ArcaneToken.record;
    input r5 as u128.private;
    input r6 as u128.private;
    input r7 as field.private;
    call arcanetoken.aleo/transfer_private_to_public_arc r1 aleo1hy8w46tflux7zwpeaw8ny7tq6wkzqux40z75a9ah3q9tqa4t758qltkqu7 r2 into r8 r9;
    call arcanetoken.aleo/transfer_private_to_public_arc r4 aleo1hy8w46tflux7zwpeaw8ny7tq6wkzqux40z75a9ah3q9tqa4t758qltkqu7 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.aleo/ArcaneToken.record;
    output r10 as arcanetoken.aleo/ArcaneToken.record;
    output r12 as LpTokenReceipt.record;
    output r13 as arcane_amm_v2_0.aleo/add_amm_liquidity.future;
finalize add_amm_liquidity:
    input r0 as arcanetoken.aleo/transfer_private_to_public_arc.future;
    input r1 as arcanetoken.aleo/transfer_private_to_public_arc.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.aleo/transfer_public_to_private_arc r1.token1_id r0 r2 into r7 r8;
    call arcanetoken.aleo/transfer_public_to_private_arc 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.aleo/ArcaneToken.record;
    output r9 as arcanetoken.aleo/ArcaneToken.record;
    output r11 as ExtraAmountVoucher.record;
    output r12 as ExtraAmountVoucher.record;
    output r13 as arcane_amm_v2_0.aleo/remove_amm_liquidity.future;
finalize remove_amm_liquidity:
    input r0 as arcanetoken.aleo/transfer_public_to_private_arc.future;
    input r1 as arcanetoken.aleo/transfer_public_to_private_arc.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 swap_amm:
    input r0 as address.private;
    input r1 as arcanetoken.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.aleo/transfer_private_to_public_arc r1 aleo1hy8w46tflux7zwpeaw8ny7tq6wkzqux40z75a9ah3q9tqa4t758qltkqu7 r2 into r7 r8;
    call arcanetoken.aleo/transfer_public_to_private_arc 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.aleo/ArcaneToken.record;
    output r9 as arcanetoken.aleo/ArcaneToken.record;
    output r11 as ExtraAmountVoucher.record;
    output r12 as arcane_amm_v2_0.aleo/swap_amm.future;
finalize swap_amm:
    input r0 as arcanetoken.aleo/transfer_private_to_public_arc.future;
    input r1 as arcanetoken.aleo/transfer_public_to_private_arc.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;
    is.eq r13.token1_id r2 into r14;
    ternary r14 r13.reserve1 r13.reserve2 into r15;
    is.eq r13.token2_id r2 into r16;
    ternary r16 r13.reserve1 r13.reserve2 into r17;
    sub 10000u128 r13.swap_fee into r18;
    mul r3 r18 into r19;
    mul r19 r17 into r20;
    mul r15 10000u128 into r21;
    add r21 r19 into r22;
    div r20 r22 into r23;
    gte r23 r5 into r24;
    assert.eq r24 true;
    sub r23 r5 into r25;
    cast r4 r25 into r26 as ExtraAmount;
    set r26 into amm_extras[r6];
    add r15 r3 into r27;
    sub r17 r23 into r28;
    is.eq r13.token1_id r2 into r29;
    ternary r29 r27 r28 into r30;
    is.eq r13.token2_id r2 into r31;
    ternary r31 r27 r28 into r32;
    cast r13.id r13.token1_id r13.token2_id r30 r32 r13.lp_total_supply r13.swap_fee into r33 as PoolInfo;
    set r33 into amm_pools[r12];

function redeem_voucher:
    input r0 as ExtraAmountVoucher.record;
    input r1 as u128.private;
    call arcanetoken.aleo/transfer_public_to_private_arc 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.aleo/ArcaneToken.record;
    output r4 as arcane_amm_v2_0.aleo/redeem_voucher.future;
finalize redeem_voucher:
    input r0 as arcanetoken.aleo/transfer_public_to_private_arc.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];

function create_pool_pric:
    input r0 as address.private;
    input r1 as credits.aleo/credits.record;
    input r2 as u64.private;
    input r3 as arcanetoken.aleo/ArcaneToken.record;
    input r4 as u128.private;
    input r5 as u128.private;
    gt r2 0u64 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;
    gte r1.microcredits r2 into r10;
    gte r3.amount r4 into r11;
    and r10 r11 into r12;
    assert.eq r12 true;
    call credits.aleo/transfer_private_to_public r1 aleo1hy8w46tflux7zwpeaw8ny7tq6wkzqux40z75a9ah3q9tqa4t758qltkqu7 r2 into r13 r14;
    call arcanetoken.aleo/transfer_private_to_public_arc r3 aleo1hy8w46tflux7zwpeaw8ny7tq6wkzqux40z75a9ah3q9tqa4t758qltkqu7 r4 into r15 r16;
    gt 0u64 r3.token_id into r17;
    ternary r17 r3.token_id 0u64 into r18;
    lte 0u64 r3.token_id into r19;
    ternary r19 r3.token_id 0u64 into r20;
    cast r18 r20 into r21 as PoolKey;
    hash.bhp256 r21 into r22 as field;
    cast r0 r22 into r23 as PoolAdmin.record;
    cast r2 into r24 as u128;
    async create_pool_pric r14 r16 r22 0u64 r24 r3.token_id r4 r5 into r25;
    output r23 as PoolAdmin.record;
    output r13 as credits.aleo/credits.record;
    output r15 as arcanetoken.aleo/ArcaneToken.record;
    output r25 as arcane_amm_v2_0.aleo/create_pool_pric.future;
finalize create_pool_pric:
    input r0 as credits.aleo/transfer_private_to_public.future;
    input r1 as arcanetoken.aleo/transfer_private_to_public_arc.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 add_amm_liquidity_pric:
    input r0 as address.private;
    input r1 as credits.aleo/credits.record;
    input r2 as u64.private;
    input r3 as arcanetoken.aleo/ArcaneToken.record;
    input r4 as u128.private;
    input r5 as field.private;
    call credits.aleo/transfer_private_to_public r1 aleo1hy8w46tflux7zwpeaw8ny7tq6wkzqux40z75a9ah3q9tqa4t758qltkqu7 r2 into r6 r7;
    call arcanetoken.aleo/transfer_private_to_public_arc r3 aleo1hy8w46tflux7zwpeaw8ny7tq6wkzqux40z75a9ah3q9tqa4t758qltkqu7 r4 into r8 r9;
    cast r0 0u64 r3.token_id r5 into r10 as LpTokenReceipt.record;
    cast r2 into r11 as u128;
    async add_amm_liquidity_pric r7 r9 r5 r11 r3.token_id r4 into r12;
    output r6 as credits.aleo/credits.record;
    output r8 as arcanetoken.aleo/ArcaneToken.record;
    output r10 as LpTokenReceipt.record;
    output r12 as arcane_amm_v2_0.aleo/add_amm_liquidity_pric.future;
finalize add_amm_liquidity_pric:
    input r0 as credits.aleo/transfer_private_to_public.future;
    input r1 as arcanetoken.aleo/transfer_private_to_public_arc.future;
    input r2 as field.public;
    input r3 as u128.public;
    input r4 as u64.public;
    input r5 as u128.public;
    await r0;
    await r1;
    gt 0u64 r4 into r6;
    ternary r6 r4 0u64 into r7;
    lte 0u64 r4 into r8;
    ternary r8 r4 0u64 into r9;
    cast r7 r9 into r10 as PoolKey;
    hash.bhp256 r10 into r11 as field;
    get amm_pools[r11] into r12;
    mul r3 r12.lp_total_supply into r13;
    div r13 r12.reserve1 into r14;
    mul r5 r12.lp_total_supply into r15;
    div r15 r12.reserve2 into r16;
    lt r14 r16 into r17;
    ternary r17 r14 r16 into r18;
    add r12.reserve1 r3 into r19;
    add r12.reserve2 r5 into r20;
    add r12.lp_total_supply r18 into r21;
    cast r12.id r12.token1_id r12.token2_id r19 r20 r21 r12.swap_fee into r22 as PoolInfo;
    set r22 into amm_pools[r11];
    contains amm_deposits[r2] into r23;
    not r23 into r24;
    assert.eq r24 true;
    set r18 into amm_deposits[r2];

function remove_amm_liquidity_pric:
    input r0 as address.private;
    input r1 as LpTokenReceipt.record;
    input r2 as u64.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 credits.aleo/transfer_public_to_private r0 r2 into r7 r8;
    call arcanetoken.aleo/transfer_public_to_private_arc 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;
    cast r2 into r13 as u128;
    async remove_amm_liquidity_pric r8 r10 r1.deposit_id r1.token1_id r1.token2_id r13 r3 r4 r5 into r14;
    output r7 as credits.aleo/credits.record;
    output r9 as arcanetoken.aleo/ArcaneToken.record;
    output r11 as ExtraAmountVoucher.record;
    output r12 as ExtraAmountVoucher.record;
    output r14 as arcane_amm_v2_0.aleo/remove_amm_liquidity_pric.future;
finalize remove_amm_liquidity_pric:
    input r0 as credits.aleo/transfer_public_to_private.future;
    input r1 as arcanetoken.aleo/transfer_public_to_private_arc.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 swap_amm_puc_in:
    input r0 as address.private;
    input r1 as u128.private;
    input r2 as u64.private;
    input r3 as u128.private;
    input r4 as field.private;
    gt r3 0u128 into r5;
    assert.eq r5 true;
    call arcanetoken.aleo/transfer_public_to_private_arc r2 r0 r3 into r6 r7;
    cast r0 r2 r4 into r8 as ExtraAmountVoucher.record;
    async swap_amm_puc_in r7 r1 r2 r3 r4 into r9;
    output r6 as arcanetoken.aleo/ArcaneToken.record;
    output r8 as ExtraAmountVoucher.record;
    output r9 as arcane_amm_v2_0.aleo/swap_amm_puc_in.future;
finalize swap_amm_puc_in:
    input r0 as arcanetoken.aleo/transfer_public_to_private_arc.future;
    input r1 as u128.public;
    input r2 as u64.public;
    input r3 as u128.public;
    input r4 as field.public;
    await r0;
    gt 0u64 r2 into r5;
    ternary r5 r2 0u64 into r6;
    lte 0u64 r2 into r7;
    ternary r7 r2 0u64 into r8;
    cast r6 r8 into r9 as PoolKey;
    hash.bhp256 r9 into r10 as field;
    get amm_pools[r10] into r11;
    is.eq r11.token1_id 0u64 into r12;
    ternary r12 r11.reserve1 r11.reserve2 into r13;
    is.eq r11.token2_id 0u64 into r14;
    ternary r14 r11.reserve1 r11.reserve2 into r15;
    sub 10000u128 r11.swap_fee into r16;
    mul r1 r16 into r17;
    mul r17 r15 into r18;
    mul r13 10000u128 into r19;
    add r19 r17 into r20;
    div r18 r20 into r21;
    gte r21 r3 into r22;
    assert.eq r22 true;
    sub r21 r3 into r23;
    cast r2 r23 into r24 as ExtraAmount;
    set r24 into amm_extras[r4];
    add r13 r1 into r25;
    sub r15 r21 into r26;
    is.eq r11.token1_id 0u64 into r27;
    ternary r27 r25 r26 into r28;
    is.eq r11.token2_id 0u64 into r29;
    ternary r29 r25 r26 into r30;
    cast r11.id r11.token1_id r11.token2_id r28 r30 r11.lp_total_supply r11.swap_fee into r31 as PoolInfo;
    set r31 into amm_pools[r10];

function swap_amm_pric_in:
    input r0 as address.private;
    input r1 as credits.aleo/credits.record;
    input r2 as u64.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;
    gt r2 0u64 into r7;
    assert.eq r7 true;
    call credits.aleo/transfer_private_to_public r1 aleo1hy8w46tflux7zwpeaw8ny7tq6wkzqux40z75a9ah3q9tqa4t758qltkqu7 r2 into r8 r9;
    call arcanetoken.aleo/transfer_public_to_private_arc r3 r0 r4 into r10 r11;
    cast r0 r3 r5 into r12 as ExtraAmountVoucher.record;
    cast r2 into r13 as u128;
    async swap_amm_pric_in r9 r11 r13 r3 r4 r5 into r14;
    output r8 as credits.aleo/credits.record;
    output r10 as arcanetoken.aleo/ArcaneToken.record;
    output r12 as ExtraAmountVoucher.record;
    output r14 as arcane_amm_v2_0.aleo/swap_amm_pric_in.future;
finalize swap_amm_pric_in:
    input r0 as credits.aleo/transfer_private_to_public.future;
    input r1 as arcanetoken.aleo/transfer_public_to_private_arc.future;
    input r2 as u128.public;
    input r3 as u64.public;
    input r4 as u128.public;
    input r5 as field.public;
    await r0;
    await r1;
    gt 0u64 r3 into r6;
    ternary r6 r3 0u64 into r7;
    lte 0u64 r3 into r8;
    ternary r8 r3 0u64 into r9;
    cast r7 r9 into r10 as PoolKey;
    hash.bhp256 r10 into r11 as field;
    get amm_pools[r11] into r12;
    is.eq r12.token1_id 0u64 into r13;
    ternary r13 r12.reserve1 r12.reserve2 into r14;
    is.eq r12.token2_id 0u64 into r15;
    ternary r15 r12.reserve1 r12.reserve2 into r16;
    sub 10000u128 r12.swap_fee into r17;
    mul r2 r17 into r18;
    mul r18 r16 into r19;
    mul r14 10000u128 into r20;
    add r20 r18 into r21;
    div r19 r21 into r22;
    gte r22 r4 into r23;
    assert.eq r23 true;
    sub r22 r4 into r24;
    cast r3 r24 into r25 as ExtraAmount;
    set r25 into amm_extras[r5];
    add r14 r2 into r26;
    sub r16 r22 into r27;
    is.eq r12.token1_id 0u64 into r28;
    ternary r28 r26 r27 into r29;
    is.eq r12.token2_id 0u64 into r30;
    ternary r30 r26 r27 into r31;
    cast r12.id r12.token1_id r12.token2_id r29 r31 r12.lp_total_supply r12.swap_fee into r32 as PoolInfo;
    set r32 into amm_pools[r11];

function swap_amm_pric_out:
    input r0 as address.private;
    input r1 as arcanetoken.aleo/ArcaneToken.record;
    input r2 as u128.private;
    input r3 as u64.private;
    input r4 as field.private;
    gt r3 0u64 into r5;
    assert.eq r5 true;
    call arcanetoken.aleo/transfer_private_to_public_arc r1 aleo1hy8w46tflux7zwpeaw8ny7tq6wkzqux40z75a9ah3q9tqa4t758qltkqu7 r2 into r6 r7;
    call credits.aleo/transfer_public_to_private r0 r3 into r8 r9;
    cast r0 0u64 r4 into r10 as ExtraAmountVoucher.record;
    cast r3 into r11 as u128;
    async swap_amm_pric_out r7 r9 r1.token_id r2 r11 r4 into r12;
    output r6 as arcanetoken.aleo/ArcaneToken.record;
    output r8 as credits.aleo/credits.record;
    output r10 as ExtraAmountVoucher.record;
    output r12 as arcane_amm_v2_0.aleo/swap_amm_pric_out.future;
finalize swap_amm_pric_out:
    input r0 as arcanetoken.aleo/transfer_private_to_public_arc.future;
    input r1 as credits.aleo/transfer_public_to_private.future;
    input r2 as u64.public;
    input r3 as u128.public;
    input r4 as u128.public;
    input r5 as field.public;
    await r0;
    await r1;
    gt r2 0u64 into r6;
    ternary r6 0u64 r2 into r7;
    lte r2 0u64 into r8;
    ternary r8 0u64 r2 into r9;
    cast r7 r9 into r10 as PoolKey;
    hash.bhp256 r10 into r11 as field;
    get amm_pools[r11] into r12;
    is.eq r12.token1_id r2 into r13;
    ternary r13 r12.reserve1 r12.reserve2 into r14;
    is.eq r12.token2_id r2 into r15;
    ternary r15 r12.reserve1 r12.reserve2 into r16;
    sub 10000u128 r12.swap_fee into r17;
    mul r3 r17 into r18;
    mul r18 r16 into r19;
    mul r14 10000u128 into r20;
    add r20 r18 into r21;
    div r19 r21 into r22;
    gte r22 r4 into r23;
    assert.eq r23 true;
    sub r22 r4 into r24;
    cast 0u64 r24 into r25 as ExtraAmount;
    set r25 into amm_extras[r5];
    add r14 r3 into r26;
    sub r16 r22 into r27;
    is.eq r12.token1_id r2 into r28;
    ternary r28 r26 r27 into r29;
    is.eq r12.token2_id r2 into r30;
    ternary r30 r26 r27 into r31;
    cast r12.id r12.token1_id r12.token2_id r29 r31 r12.lp_total_supply r12.swap_fee into r32 as PoolInfo;
    set r32 into amm_pools[r11];

function redeem_voucher_pric:
    input r0 as ExtraAmountVoucher.record;
    input r1 as u64.private;
    is.eq r0.token_id 0u64 into r2;
    assert.eq r2 true;
    call credits.aleo/transfer_public_to_private r0.owner r1 into r3 r4;
    cast r1 into r5 as u128;
    async redeem_voucher_pric r4 r0.voucher r5 into r6;
    output r3 as credits.aleo/credits.record;
    output r6 as arcane_amm_v2_0.aleo/redeem_voucher_pric.future;
finalize redeem_voucher_pric:
    input r0 as credits.aleo/transfer_public_to_private.future;
    input r1 as field.public;
    input r2 as u128.public;
    await r0;
    get amm_extras[r1] into r3;
    is.eq r3.token_id 0u64 into r4;
    is.eq r3.token_amount r2 into r5;
    and r4 r5 into r6;
    assert.eq r6 true;
    remove amm_extras[r1];

function init_demo_pools:
    input r0 as field.private;
    async init_demo_pools  into r1;
    output r1 as arcane_amm_v2_0.aleo/init_demo_pools.future;
finalize init_demo_pools:
    gt 1u64 2u64 into r0;
    ternary r0 2u64 1u64 into r1;
    lte 1u64 2u64 into r2;
    ternary r2 2u64 1u64 into r3;
    cast r1 r3 into r4 as PoolKey;
    hash.bhp256 r4 into r5 as field;
    mul 100000000000000u128 100000000000000u128 into r6;
    cast r5 1u64 2u64 100000000000000u128 100000000000000u128 r6 10u128 into r7 as PoolInfo;
    contains amm_pools[r5] into r8;
    not r8 into r9;
    assert.eq r9 true;
    set r7 into amm_pools[r5];
    gt 1u64 3u64 into r10;
    ternary r10 3u64 1u64 into r11;
    lte 1u64 3u64 into r12;
    ternary r12 3u64 1u64 into r13;
    cast r11 r13 into r14 as PoolKey;
    hash.bhp256 r14 into r15 as field;
    mul 100000000000000u128 50000000000u128 into r16;
    cast r15 1u64 3u64 100000000000000u128 50000000000u128 r16 10u128 into r17 as PoolInfo;
    set r17 into amm_pools[r15];
    gt 1u64 4u64 into r18;
    ternary r18 4u64 1u64 into r19;
    lte 1u64 4u64 into r20;
    ternary r20 4u64 1u64 into r21;
    cast r19 r21 into r22 as PoolKey;
    hash.bhp256 r22 into r23 as field;
    mul 100000000000000u128 500000000000u128 into r24;
    cast r23 1u64 4u64 100000000000000u128 500000000000u128 r24 10u128 into r25 as PoolInfo;
    set r25 into amm_pools[r23];
    gt 2u64 3u64 into r26;
    ternary r26 3u64 2u64 into r27;
    lte 2u64 3u64 into r28;
    ternary r28 3u64 2u64 into r29;
    cast r27 r29 into r30 as PoolKey;
    hash.bhp256 r30 into r31 as field;
    mul 100000000000000u128 50000000000u128 into r32;
    cast r31 2u64 3u64 100000000000000u128 50000000000u128 r32 10u128 into r33 as PoolInfo;
    set r33 into amm_pools[r31];
    gt 2u64 4u64 into r34;
    ternary r34 4u64 2u64 into r35;
    lte 2u64 4u64 into r36;
    ternary r36 4u64 2u64 into r37;
    cast r35 r37 into r38 as PoolKey;
    hash.bhp256 r38 into r39 as field;
    mul 100000000000000u128 500000000000u128 into r40;
    cast r39 2u64 4u64 100000000000000u128 500000000000u128 r40 10u128 into r41 as PoolInfo;
    set r41 into amm_pools[r39];
    gt 3u64 4u64 into r42;
    ternary r42 4u64 3u64 into r43;
    lte 3u64 4u64 into r44;
    ternary r44 4u64 3u64 into r45;
    cast r43 r45 into r46 as PoolKey;
    hash.bhp256 r46 into r47 as field;
    mul 50000000000u128 500000000000u128 into r48;
    cast r47 3u64 4u64 50000000000u128 500000000000u128 r48 10u128 into r49 as PoolInfo;
    set r49 into amm_pools[r47];

Block heightTimestampTransition IDFunction callState
2,206,5272024-04-26 14:44:24au1jw27kl7d0ynkkm6dqpsas605knept2qaw0xxd7yc4th0s0zzeugqq99965swap_ammAccepted
2,206,5172024-04-26 14:43:22au1exlrjthwx5wqw8a0vcnm0gvxwhsec2fp2xmvdpnx5d8tyganpqgqnlhj9cswap_amm_pric_outAccepted
2,206,5142024-04-26 14:43:07au1f5xz76nm5a6aecmmmsj26l47ttx3vjs3xgka0etpylq2ug8zzqpq72mu84swap_amm_pric_outAccepted
2,206,5072024-04-26 14:42:18au169fgr40z3a0cywserlcl6rctjh933377q8vwtee7dwz4yjq84v9sc43pjaadd_amm_liquidityAccepted
2,206,5052024-04-26 14:42:11au1l6c6fvdwsurr9ypa6v6an2ea25k7t9uk0qfnzhxkkh7s8g4zq5zqfxs3azswap_amm_pric_inAccepted
2,206,5042024-04-26 14:42:06au1gqct755emf5rju9gjt9g3k9hg6thyc7wh7khfp3wwnepf78uvv8qmd79s7add_amm_liquidityAccepted
2,206,5012024-04-26 14:41:44au1uw4x0rcs2ys4crfe6vt82afyv9tusvgt697pqvxarctk8xtwucrs3ep8qtswap_ammAccepted
2,206,4952024-04-26 14:41:09au1etdprgvmrmjusuad68gv03drawfa0mjp7jj2d5mttx335l5gl5pqs3wracswap_amm_pric_outAccepted
2,206,4672024-04-26 14:38:33au1zz8dyd4347stskfuw2jneduwmd8jeev7xhx677jhc4a3v9kl3sgse33ttgswap_amm_pric_outAccepted
2,206,4542024-04-26 14:37:20au14zf9t6rh8sc2llj675j6986kxyg44gmnjt9hrvtx75yar78ruy9qhjc0auadd_amm_liquidityAccepted
2,206,4522024-04-26 14:37:07au1jpyn4asssf54szmpahgysku3cy35n9055klrca632dduhhexsyrqw0dllfadd_amm_liquidityAccepted
2,206,4472024-04-26 14:36:42au1q3hxyjrtn60rnmrxvsng3xe4t2726q259jddu4f68f3fp98wngzsu5aqycadd_amm_liquidity_pricAccepted
2,206,4422024-04-26 14:36:16au1xakln0lhu7jhsseu2feqam68uctp79s9233sgjwqkt2eelrkecrsktzmhzswap_ammAccepted
2,206,4152024-04-26 14:33:38au1ew8gul5n5gsaq54z3tw4nzzhzzdct5h6c6gdfxkucymccfnzuy8sq8wytrswap_amm_pric_outAccepted
2,206,4142024-04-26 14:33:35au14gyr7lutvzceyr6lne4k0usyvykgl42mw8f233zn9jzretervspqlm08qjswap_amm_pric_outAccepted
2,206,3882024-04-26 14:30:58au1gvlt0vx3fte8t0y2clrmwmd3lleeeue2wd0ymyc8hagx7kghsgqspt27p0add_amm_liquidityAccepted
2,206,3822024-04-26 14:30:27au105xnajvsvhy05dsp3nrvd40mk0nvw7m6jvpnnwjdj9nyefpagsgsxjlw3jadd_amm_liquidity_pricAccepted
2,206,3802024-04-26 14:30:16au1w2k7s62alskj7y0atupkxz9aqlc96uaavtyaw5wr35rparjwmvzqatfjrkswap_amm_pric_outAccepted
2,206,3732024-04-26 14:29:31au196u9uqgqavyccjg6vc7pfdjsk6nam80rlmh6zl57gw42g039rg9qjukv40add_amm_liquidityAccepted
2,206,3702024-04-26 14:29:08au16tdm6gplyvj3uh2fes76dyk85gwfqdggh0gp0x76vrxfxum2zuzsn7g62padd_amm_liquidity_pricAccepted
2,206,3662024-04-26 14:28:48au1hcnee8tny4cczfnc8vrfax9lg3xytlpz0v8ljx0x77w08pgltvzqcp23rjswap_amm_pric_inAccepted
2,206,3502024-04-26 14:27:24au1g046g97k420wr5s8ycp5ngr0nvvkxam0v4dxvhjxzewq6skg2crs6zkwzvadd_amm_liquidity_pricAccepted
2,206,3482024-04-26 14:27:10au1gnzv8ndu9v742dsdnl8pkj0uwkd4scnj0x0ppy3vkfxqmkx8gspq99dkh6swap_amm_pric_inAccepted
2,206,3372024-04-26 14:26:07au1kw8x99xyac3kdp4kyjgv4l3qls46dp947vs8khaapdhnm5ld4gfqmejd5jadd_amm_liquidityAccepted
2,206,3372024-04-26 14:26:07au13725ukculqwrf3hhsjm4a0aw8j4kgj4u0u8x8luseh29ldy7qsgqlf5tfjswap_amm_pric_inAccepted
2,206,3302024-04-26 14:25:24au1mpna4nzh5anmpqfe9rf8224wttam5du3zfj5vurpqn8gxx0np5yqu88k5vswap_ammAccepted
2,206,3292024-04-26 14:25:20au12yyyfw4fxadkj292w4l9e6he3q7ml577ln2453ur3hxvkt2ktu9s6rshlqswap_ammAccepted
2,206,3272024-04-26 14:25:06au1y5h3tu8yhfadq78979m6d2tz939zrl037g94mwv8duzjufadqc8qjgxuqnswap_ammAccepted
2,206,3262024-04-26 14:25:00au1plm8caxywsa8v3llh3xgnmyvzlpz4vxla35ur9dkzapvvfeavqxqkakfpcswap_amm_pric_outAccepted
2,206,3252024-04-26 14:24:55au1r6v7lwyc00nw092g4gwuvjr7pvwxxj3ryzfyx90g8cazuagv85pqqgjqzyswap_ammAccepted






Not implemented