Program izar_token_v0.aleo
Program ID
izar_token_v0.aleo
Deployment transaction
Owner signature
sign18s2wxyjgfw6fxpglh29hznuzre95wdls22t96ay5aehtdv442cpx595cx9rl9t70eqxz92zn9k9hp6kwdk7fs3u426rldwkxfsmywp86ga6zl947jlq8alq05erfde9a8ml5wldfnpranq9fe0wwnrfrpneyxsu92acwj2nzflc8gy5l820uyft7z9nu6uydssqunp5dkksq23l27e4
Times called
5602
Similar programs
Imports
-
Mappings
accounts (Account -> u128)
token_meta (field -> IzarTokenMeta)
contract_owner (boolean -> address)
initialed (boolean -> boolean)
token_meta (field -> IzarTokenMeta)
contract_owner (boolean -> address)
initialed (boolean -> boolean)
Structs
Account
IzarTokenMeta
IzarTokenMeta
Records
IzarToken
Functions
-
Transitions
initial(address) -> () finalize(address)
transfer_ownership(address) -> () finalize(address, address)
regist_token(IzarTokenMeta) -> () finalize(IzarTokenMeta, address)
verify_token(field, u32, field) -> () finalize(field, u32, field)
mint_public(public address, public u128, public field) -> () finalize(Account, u128, address)
mint_private(address, u128, field) -> IzarToken finalize(address, field)
burn_public(public address, public u128, public field) -> () finalize(Account, u128, address)
burn_private(address, IzarToken, u128) -> IzarToken finalize(address, field)
transfer_public(public address, public u128, public field) -> () finalize(Account, Account, u128)
transfer_private(IzarToken, address, u128) -> (IzarToken, IzarToken)
transfer_private_to_public(IzarToken, public address, public u128) -> IzarToken finalize(Account, u128)
transfer_public_to_private(public address, public u128, public field) -> IzarToken finalize(Account, u128)
transfer_ownership(address) -> () finalize(address, address)
regist_token(IzarTokenMeta) -> () finalize(IzarTokenMeta, address)
verify_token(field, u32, field) -> () finalize(field, u32, field)
mint_public(public address, public u128, public field) -> () finalize(Account, u128, address)
mint_private(address, u128, field) -> IzarToken finalize(address, field)
burn_public(public address, public u128, public field) -> () finalize(Account, u128, address)
burn_private(address, IzarToken, u128) -> IzarToken finalize(address, field)
transfer_public(public address, public u128, public field) -> () finalize(Account, Account, u128)
transfer_private(IzarToken, address, u128) -> (IzarToken, IzarToken)
transfer_private_to_public(IzarToken, public address, public u128) -> IzarToken finalize(Account, u128)
transfer_public_to_private(public address, public u128, public field) -> IzarToken finalize(Account, u128)
Program Source Code (Aleo Instruction) Upload Leo source
program izar_token_v0.aleo; struct Account: holder as address; token_id as field; struct IzarTokenMeta: from_chain_id as u32; from_asset_addr as field; record IzarToken: owner as address.private; amount as u128.private; token_id as field.private; mapping accounts: key as Account.public; value as u128.public; mapping token_meta: key as field.public; value as IzarTokenMeta.public; mapping contract_owner: key as boolean.public; value as address.public; mapping initialed: key as boolean.public; value as boolean.public; function initial: input r0 as address.private; async initial r0 into r1; output r1 as izar_token_v0.aleo/initial.future; finalize initial: input r0 as address.public; get.or_use initialed[true] false into r1; not r1 into r2; assert.eq r2 true; set r0 into contract_owner[true]; set true into initialed[true]; function transfer_ownership: input r0 as address.private; async transfer_ownership self.caller r0 into r1; output r1 as izar_token_v0.aleo/transfer_ownership.future; finalize transfer_ownership: input r0 as address.public; input r1 as address.public; get.or_use initialed[true] false into r2; assert.eq r2 true; get contract_owner[true] into r3; assert.eq r3 r0; set r1 into contract_owner[true]; function regist_token: input r0 as IzarTokenMeta.private; async regist_token r0 self.caller into r1; output r1 as izar_token_v0.aleo/regist_token.future; finalize regist_token: input r0 as IzarTokenMeta.public; input r1 as address.public; get.or_use initialed[true] false into r2; assert.eq r2 true; get contract_owner[true] into r3; assert.eq r3 r1; hash.bhp256 r0 into r4 as field; contains token_meta[r4] into r5; not r5 into r6; assert.eq r6 true; set r0 into token_meta[r4]; function verify_token: input r0 as field.private; input r1 as u32.private; input r2 as field.private; async verify_token r0 r1 r2 into r3; output r3 as izar_token_v0.aleo/verify_token.future; finalize verify_token: input r0 as field.public; input r1 as u32.public; input r2 as field.public; get token_meta[r0] into r3; assert.eq r3.from_chain_id r1; assert.eq r3.from_asset_addr r2; function mint_public: input r0 as address.public; input r1 as u128.public; input r2 as field.public; cast r0 r2 into r3 as Account; async mint_public r3 r1 self.caller into r4; output r4 as izar_token_v0.aleo/mint_public.future; finalize mint_public: input r0 as Account.public; input r1 as u128.public; input r2 as address.public; get contract_owner[true] into r3; assert.eq r3 r2; contains token_meta[r0.token_id] into r4; assert.eq r4 true; get.or_use accounts[r0] 0u128 into r5; add r5 r1 into r6; set r6 into accounts[r0]; function mint_private: input r0 as address.private; input r1 as u128.private; input r2 as field.private; cast r0 r1 r2 into r3 as IzarToken.record; async mint_private self.caller r2 into r4; output r3 as IzarToken.record; output r4 as izar_token_v0.aleo/mint_private.future; finalize mint_private: input r0 as address.public; input r1 as field.public; get contract_owner[true] into r2; assert.eq r2 r0; contains token_meta[r1] into r3; assert.eq r3 true; function burn_public: input r0 as address.public; input r1 as u128.public; input r2 as field.public; cast r0 r2 into r3 as Account; async burn_public r3 r1 self.caller into r4; output r4 as izar_token_v0.aleo/burn_public.future; finalize burn_public: input r0 as Account.public; input r1 as u128.public; input r2 as address.public; get contract_owner[true] into r3; assert.eq r3 r2; contains token_meta[r0.token_id] into r4; assert.eq r4 true; get.or_use accounts[r0] 0u128 into r5; sub r5 r1 into r6; set r6 into accounts[r0]; function burn_private: input r0 as address.private; input r1 as IzarToken.record; input r2 as u128.private; sub r1.amount r2 into r3; cast r1.owner r3 r1.token_id into r4 as IzarToken.record; async burn_private self.caller r1.token_id into r5; output r4 as IzarToken.record; output r5 as izar_token_v0.aleo/burn_private.future; finalize burn_private: input r0 as address.public; input r1 as field.public; get contract_owner[true] into r2; assert.eq r2 r0; contains token_meta[r1] into r3; assert.eq r3 true; function transfer_public: input r0 as address.public; input r1 as u128.public; input r2 as field.public; cast self.caller r2 into r3 as Account; cast r0 r2 into r4 as Account; async transfer_public r3 r4 r1 into r5; output r5 as izar_token_v0.aleo/transfer_public.future; finalize transfer_public: input r0 as Account.public; input r1 as Account.public; input r2 as u128.public; contains token_meta[r1.token_id] into r3; assert.eq r3 true; get.or_use accounts[r0] 0u128 into r4; sub r4 r2 into r5; set r5 into accounts[r0]; get.or_use accounts[r1] 0u128 into r6; add r6 r2 into r7; set r7 into accounts[r1]; function transfer_private: input r0 as IzarToken.record; input r1 as address.private; input r2 as u128.private; sub r0.amount r2 into r3; cast r0.owner r3 r0.token_id into r4 as IzarToken.record; cast r1 r2 r0.token_id into r5 as IzarToken.record; output r4 as IzarToken.record; output r5 as IzarToken.record; function transfer_private_to_public: input r0 as IzarToken.record; input r1 as address.public; input r2 as u128.public; sub r0.amount r2 into r3; cast r0.owner r3 r0.token_id into r4 as IzarToken.record; cast r1 r0.token_id into r5 as Account; async transfer_private_to_public r5 r2 into r6; output r4 as IzarToken.record; output r6 as izar_token_v0.aleo/transfer_private_to_public.future; finalize transfer_private_to_public: input r0 as Account.public; input r1 as u128.public; get.or_use accounts[r0] 0u128 into r2; add r2 r1 into r3; set r3 into accounts[r0]; function transfer_public_to_private: input r0 as address.public; input r1 as u128.public; input r2 as field.public; cast r0 r1 r2 into r3 as IzarToken.record; cast self.caller r2 into r4 as Account; async transfer_public_to_private r4 r1 into r5; output r3 as IzarToken.record; output r5 as izar_token_v0.aleo/transfer_public_to_private.future; finalize transfer_public_to_private: input r0 as Account.public; input r1 as u128.public; contains token_meta[r0.token_id] into r2; assert.eq r2 true; get.or_use accounts[r0] 0u128 into r3; sub r3 r1 into r4; set r4 into accounts[r0];