The explorer is out of sync. The last synced block is 185 hours ago. Current block height: explorer: 2206528 / node: 2326046 / ref: 2326045

Program arcanetoken_v2_0.aleo

Program ID
arcanetoken_v2_0.aleo
Owner signature
sign1vjk7uxa3apzm84ht33fwehuzetnyssayxfq8z6n6uxwrq9v2kvqspzfsc5fnpw3lhtkw5a2kxrsxs8wtnjsdemc7kll740ctypf5yqcm8555plq8qm58hteazn04fgnvceu4hnp7zj3ekzquseymgmanpdnzxhqtsugxlmvxwjmkv6xc8al30jgjgj4cfrs9ks4pt9temfjpz6aaa0u
Times called
17
Similar programs
0
Imports
-
Mappings
arcane_registered_tokens (u64 -> ArcaneTokenInfo)
arcane_balances (field -> u128)
arcane_allowances (field -> u128)
arcane_supplies (u64 -> u128)
Structs
BalanceKey
SpenderKey
ArcaneTokenInfo
Records
ArcaneToken
Functions
-
Transitions
create_arcane_token(u64, u8, u128) -> () finalize(ArcaneTokenInfo)
allow(u64, address, u128) -> () finalize(u64, address, address, u128)
split(ArcaneToken, address, u128, address) -> (ArcaneToken, ArcaneToken)
mint_private(u64, address, u128) -> ArcaneToken finalize(u64, address, u128)
mint_public(u64, address, u128) -> () finalize(u64, address, field, u128)
burn_private(ArcaneToken, u128) -> ArcaneToken finalize(u64, u128)
transfer_public_from(u64, address, address, u128) -> () finalize(field, field, field, u128)
transfer_public(u64, public address, public u128) -> () finalize(field, field, u128)
transfer_private(ArcaneToken, address, u128) -> (ArcaneToken, ArcaneToken)
transfer_private_to_public(ArcaneToken, address, u128) -> ArcaneToken finalize(field, u128)
transfer_public_to_private(u64, address, u128) -> ArcaneToken finalize(field, u128)
Program Source Code (Aleo Instruction) Upload Leo source

program arcanetoken_v2_0.aleo;

struct BalanceKey:
    token_id as u64;
    addr as address;

struct SpenderKey:
    token_id as u64;
    funds_owner as address;
    spender as address;

record ArcaneToken:
    owner as address.private;
    token_id as u64.private;
    amount as u128.private;

struct ArcaneTokenInfo:
    token_id as u64;
    decimals as u8;
    max_supply as u128;
    admin as address;

mapping arcane_registered_tokens:
    key as u64.public;
    value as ArcaneTokenInfo.public;

mapping arcane_balances:
    key as field.public;
    value as u128.public;

mapping arcane_allowances:
    key as field.public;
    value as u128.public;

mapping arcane_supplies:
    key as u64.public;
    value as u128.public;

function create_arcane_token:
    input r0 as u64.private;
    input r1 as u8.private;
    input r2 as u128.private;
    cast r0 r1 r2 self.caller into r3 as ArcaneTokenInfo;
    async create_arcane_token r3 into r4;
    output r4 as arcanetoken_v2_0.aleo/create_arcane_token.future;
finalize create_arcane_token:
    input r0 as ArcaneTokenInfo.public;
    contains arcane_registered_tokens[r0.token_id] into r1;
    not r1 into r2;
    assert.eq r2 true;
    set r0 into arcane_registered_tokens[r0.token_id];

function allow:
    input r0 as u64.private;
    input r1 as address.private;
    input r2 as u128.private;
    async allow r0 self.caller r1 r2 into r3;
    output r3 as arcanetoken_v2_0.aleo/allow.future;
finalize allow:
    input r0 as u64.public;
    input r1 as address.public;
    input r2 as address.public;
    input r3 as u128.public;
    contains arcane_registered_tokens[r0] into r4;
    assert.eq r4 true;
    cast r0 r1 r2 into r5 as SpenderKey;
    hash.bhp256 r5 into r6 as field;
    set r3 into arcane_allowances[r6];

function split:
    input r0 as ArcaneToken.record;
    input r1 as address.private;
    input r2 as u128.private;
    input r3 as address.private;
    cast r1 r0.token_id r2 into r4 as ArcaneToken.record;
    sub r0.amount r2 into r5;
    cast r3 r0.token_id r5 into r6 as ArcaneToken.record;
    output r4 as ArcaneToken.record;
    output r6 as ArcaneToken.record;

function mint_private:
    input r0 as u64.private;
    input r1 as address.private;
    input r2 as u128.private;
    cast r1 r0 r2 into r3 as ArcaneToken.record;
    async mint_private r0 self.caller r2 into r4;
    output r3 as ArcaneToken.record;
    output r4 as arcanetoken_v2_0.aleo/mint_private.future;
finalize mint_private:
    input r0 as u64.public;
    input r1 as address.public;
    input r2 as u128.public;
    get arcane_registered_tokens[r0] into r3;
    is.eq r3.admin r1 into r4;
    cast 0field into r5 as address;
    is.eq r3.admin r5 into r6;
    or r4 r6 into r7;
    assert.eq r7 true;
    get.or_use arcane_supplies[r0] 0u128 into r8;
    add r8 r2 into r9;
    is.eq r3.max_supply 0u128 into r10;
    lte r9 r3.max_supply into r11;
    or r10 r11 into r12;
    assert.eq r12 true;
    set r9 into arcane_supplies[r0];

function mint_public:
    input r0 as u64.private;
    input r1 as address.private;
    input r2 as u128.private;
    cast r0 r1 into r3 as BalanceKey;
    hash.bhp256 r3 into r4 as field;
    async mint_public r0 self.caller r4 r2 into r5;
    output r5 as arcanetoken_v2_0.aleo/mint_public.future;
finalize mint_public:
    input r0 as u64.public;
    input r1 as address.public;
    input r2 as field.public;
    input r3 as u128.public;
    get arcane_registered_tokens[r0] into r4;
    is.eq r4.admin r1 into r5;
    cast 0field into r6 as address;
    is.eq r4.admin r6 into r7;
    or r5 r7 into r8;
    assert.eq r8 true;
    get.or_use arcane_balances[r2] 0u128 into r9;
    add r9 r3 into r10;
    set r10 into arcane_balances[r2];
    get.or_use arcane_supplies[r0] 0u128 into r11;
    add r11 r3 into r12;
    is.eq r4.max_supply 0u128 into r13;
    lte r12 r4.max_supply into r14;
    or r13 r14 into r15;
    assert.eq r15 true;
    set r12 into arcane_supplies[r0];

function burn_private:
    input r0 as ArcaneToken.record;
    input r1 as u128.private;
    cast r0.owner r0.token_id r1 into r2 as ArcaneToken.record;
    async burn_private r0.token_id r1 into r3;
    output r2 as ArcaneToken.record;
    output r3 as arcanetoken_v2_0.aleo/burn_private.future;
finalize burn_private:
    input r0 as u64.public;
    input r1 as u128.public;
    get arcane_registered_tokens[r0] into r2;
    get.or_use arcane_supplies[r0] 0u128 into r3;
    sub r3 r1 into r4;
    is.eq r2.max_supply 0u128 into r5;
    gte r4 0u128 into r6;
    or r5 r6 into r7;
    assert.eq r7 true;
    set r4 into arcane_supplies[r0];

function transfer_public_from:
    input r0 as u64.private;
    input r1 as address.private;
    input r2 as address.private;
    input r3 as u128.private;
    cast r0 r1 into r4 as BalanceKey;
    hash.bhp256 r4 into r5 as field;
    cast r0 r2 into r6 as BalanceKey;
    hash.bhp256 r6 into r7 as field;
    cast r0 r1 self.caller into r8 as SpenderKey;
    hash.bhp256 r8 into r9 as field;
    async transfer_public_from r5 r7 r9 r3 into r10;
    output r10 as arcanetoken_v2_0.aleo/transfer_public_from.future;
finalize transfer_public_from:
    input r0 as field.public;
    input r1 as field.public;
    input r2 as field.public;
    input r3 as u128.public;
    get arcane_balances[r0] into r4;
    sub r4 r3 into r5;
    set r5 into arcane_balances[r0];
    get.or_use arcane_balances[r1] 0u128 into r6;
    add r6 r3 into r7;
    set r7 into arcane_balances[r1];
    get.or_use arcane_allowances[r2] 0u128 into r8;
    gte r8 r3 into r9;
    assert.eq r9 true;

function transfer_public:
    input r0 as u64.private;
    input r1 as address.public;
    input r2 as u128.public;
    cast r0 self.caller into r3 as BalanceKey;
    hash.bhp256 r3 into r4 as field;
    cast r0 r1 into r5 as BalanceKey;
    hash.bhp256 r5 into r6 as field;
    async transfer_public r4 r6 r2 into r7;
    output r7 as arcanetoken_v2_0.aleo/transfer_public.future;
finalize transfer_public:
    input r0 as field.public;
    input r1 as field.public;
    input r2 as u128.public;
    get arcane_balances[r0] into r3;
    sub r3 r2 into r4;
    set r4 into arcane_balances[r0];
    get.or_use arcane_balances[r1] 0u128 into r5;
    add r5 r2 into r6;
    set r6 into arcane_balances[r1];

function transfer_private:
    input r0 as ArcaneToken.record;
    input r1 as address.private;
    input r2 as u128.private;
    cast r1 r0.token_id r2 into r3 as ArcaneToken.record;
    sub r0.amount r2 into r4;
    cast r0.owner r0.token_id r4 into r5 as ArcaneToken.record;
    output r3 as ArcaneToken.record;
    output r5 as ArcaneToken.record;

function transfer_private_to_public:
    input r0 as ArcaneToken.record;
    input r1 as address.private;
    input r2 as u128.private;
    sub r0.amount r2 into r3;
    cast r0.owner r0.token_id r3 into r4 as ArcaneToken.record;
    cast r0.token_id r1 into r5 as BalanceKey;
    hash.bhp256 r5 into r6 as field;
    async transfer_private_to_public r6 r2 into r7;
    output r4 as ArcaneToken.record;
    output r7 as arcanetoken_v2_0.aleo/transfer_private_to_public.future;
finalize transfer_private_to_public:
    input r0 as field.public;
    input r1 as u128.public;
    get.or_use arcane_balances[r0] 0u128 into r2;
    add r2 r1 into r3;
    set r3 into arcane_balances[r0];

function transfer_public_to_private:
    input r0 as u64.private;
    input r1 as address.private;
    input r2 as u128.private;
    cast r1 r0 r2 into r3 as ArcaneToken.record;
    cast r0 self.caller into r4 as BalanceKey;
    hash.bhp256 r4 into r5 as field;
    async transfer_public_to_private r5 r2 into r6;
    output r3 as ArcaneToken.record;
    output r6 as arcanetoken_v2_0.aleo/transfer_public_to_private.future;
finalize transfer_public_to_private:
    input r0 as field.public;
    input r1 as u128.public;
    get arcane_balances[r0] into r2;
    sub r2 r1 into r3;
    set r3 into arcane_balances[r0];

Block heightTimestampTransition IDFunction callState
1,958,5702024-04-10 09:03:28au1utxvj5udrvacwtyncy4a5cjmetjnkhp2uz4ts00fz52v05l46s8q9hj5jrtransfer_public_to_privateAccepted
1,958,5702024-04-10 09:03:28au1jvv0u3mwd8nmzr52q0th6tkz34jk7edhytv27d7p92znpru66g9scq7475burn_privateAccepted
1,958,5702024-04-10 09:03:28au1wh5m8u68ey4qm3dmrjnd9269wk8fgs0npqhd8jkff87kge834gps4d49tfburn_privateAccepted
1,958,5702024-04-10 09:03:28au10rqv450y5wcfruth5sjl5w5ewx0k0xt7gvmh5ch3lf0ma560gvqqxxzqcjtransfer_private_to_publicAccepted
1,958,5702024-04-10 09:03:28au1upg8eecvthvncaqww4wfzq2y7ewqjhwtt9ged5x0q3wn62emwcpqvwda70mint_privateAccepted
1,946,0462024-04-09 13:08:45au1u5chpz8yxgu2ty0vdlgc47pgyz9wxzlyfywueqn8xfsatzjm2uyspstfqftransfer_private_to_publicAccepted
1,946,0462024-04-09 13:08:45au1dlltkjwjxknm3lgw6slt3la4l37a92a8mduacrlgtmqs00j74y8stftkcktransfer_private_to_publicAccepted
1,945,9812024-04-09 13:02:50au1lexjqvzr2yc0gut0mwmep9qcz2cgxdu3gtmsr8qladlzmswm2s9sj6zqc4transfer_private_to_publicAccepted
1,945,9812024-04-09 13:02:50au1rhczf2rrhxle6qerp28c6a9ypzjavprmvmusmq76t67r9p46rcxqyyv5gntransfer_private_to_publicAccepted
1,945,9142024-04-09 12:56:43au1pxpd3k22fkfr2c6dnln6nafx6lweatzc5en4jlwl42hztf3e7ups3g0qdgtransfer_private_to_publicAccepted
1,945,9142024-04-09 12:56:43au1pjyu5hw50fz79esk7psdzr3qlsrvuexga44ukm536vff6yrcdgfqkkd4w0transfer_private_to_publicAccepted
1,945,8412024-04-09 12:49:41au1r0lhrn2ac6n3u9u8pvskwc70flg9s45dhh77xrtq239nf592kcrs9qvpp2mint_privateAccepted
1,945,8222024-04-09 12:47:54au107th4gr2u6r5snl8xlag4w76v3ljaru9nzclejft8qgqswmufv8qtm864umint_privateAccepted
1,945,8012024-04-09 12:46:03au16a80jzt285xzgcay54ewk8kc0hd8msj7upnzvjajpykvhwcjfyrqhjttrcmint_privateAccepted
1,945,7832024-04-09 12:44:14au1apkctv5tycc8fh9eezz0xgnej72f3s20h938cra29unz5m70ygyqq9hftxcreate_arcane_tokenAccepted
1,945,7732024-04-09 12:43:16au1fnwhcnvvn7fypltndpyecqy5ns93r9dh8a33pltktu3mqvyg7yyqqmhug8create_arcane_tokenAccepted
1,945,7402024-04-09 12:40:09au1hgc22jedarm9lgnwnnxs22cx8mg4nxsapzjk8l0q727x9lkcfuxqvfh57kcreate_arcane_tokenAccepted








Not implemented