The explorer is out of sync. The last synced block is 321 hours ago. Current block height: explorer: 2206528 / node: 2412350 / ref: 2412352

Program aleo_store_nft.aleo

Program ID
aleo_store_nft.aleo
Owner signature
sign13xv498v443cvzp5jm4vfa9ncps98mksncaleml22rp2edccfccqeh80jsnx6z8whvgcphf0j79uukeawp6zy58rc8vwvywf8kr44sqqh7y00jwagn9ae9ytnk5qj7za66k5nruz2ex0y87flnlkctk2eqq62xlryqk35v7q8k82fxepzes2rqz8rhsaz07yqr0p85g3mhrpsskfpm39
Times called
80820
Similar programs
Imports
Mappings
collectionPublicData (CollectionId -> CollectionPublicData)
tokenExists (TokenId -> boolean)
publicTokenData (TokenId -> TokenData)
publicTokenOwners (TokenId -> address)
mintWhitelists (AddressCollectionMintId -> u64)
collectionMintData (CollectionMintId -> MintData)
tokenMintData (TokenMintId -> TokenData)
mintTokenNumbers (IndexCollectionMintId -> u128)
mintLengths (CollectionMintId -> u128)
listings (TokenId -> Listing)
Structs
TokenId
String64
TokenData
CollectionId
CollectionData
CollectionPublicData
CollectionMintId
MintData
AddressCollectionMintId
TokenMintId
IndexCollectionMintId
Listing
Records
Token
Collection
CollectionOwnerProof
CollectionHolderProof
TokenOwnerProof
Functions
-
Transitions
create_collection(u128, CollectionData, public CollectionPublicData) -> Collection finalize(CollectionId, CollectionPublicData)
update_collection_public_data(Collection, public CollectionPublicData) -> Collection finalize(CollectionId, CollectionPublicData)
transfer_collection(Collection, address) -> Collection
freeze_collection_updates(Collection) -> Collection finalize(CollectionId)
mint_private(Collection, public u128, address, TokenData) -> (Token, Collection) finalize(TokenId)
burn_private(Collection, Token) -> Collection finalize(TokenId)
burn_public(Collection, public TokenId) -> Collection finalize(CollectionId, TokenId)
transfer_token_private(Token, address) -> Token
transfer_token_public(public TokenId, public address) -> () finalize(TokenId, address, address)
transfer_t_private_to_public(Token, public address) -> () finalize(TokenData, TokenId, address)
transfer_t_public_to_private(public TokenId, public TokenData, public address) -> Token finalize(TokenId, TokenData, address)
update_token_data_private(Collection, Token, TokenData) -> (Token, Collection)
update_token_data_public(Collection, public TokenId, public TokenData) -> Collection finalize(TokenId, TokenData)
set_collection_mint(Collection, public u128, public MintData) -> Collection finalize(CollectionMintId, MintData)
create_token_mint(Collection, public u128, public u128, public TokenData) -> Collection finalize(CollectionMintId, u128, TokenData)
update_token_mint(Collection, public u128, public u128, public u128, public TokenData) -> Collection finalize(TokenMintId, u128, TokenData)
remove_token_mint(Collection, public u128, public u128, public u128) -> Collection finalize(IndexCollectionMintId, u128)
update_whitelist(Collection, public u128, public address, public u64) -> Collection finalize(AddressCollectionMintId, u64)
mint_public(public IndexCollectionMintId, public u128, credits.aleo/credits, public address, public u64) -> (credits.aleo/credits, credits.aleo/credits) finalize(IndexCollectionMintId, u128, address, u64, address)
prove_collection_ownership(Collection, address, public u32) -> (CollectionOwnerProof, Collection) finalize(u32)
prove_token_ownership(Token, address, public u32) -> (TokenOwnerProof, Token) finalize(u32)
prove_collection_holdership(Token, address, public u32) -> (CollectionHolderProof, Token) finalize(u32)
mint_alias(public u128, address, String64) -> Token finalize(TokenId)
update_alias_metadata_private(Token, String64) -> Token
update_alias_metadata_public(public TokenId, public String64) -> () finalize(TokenId, String64, address)
create_alias_collection() -> Collection
create_listing(public TokenId, public u64) -> () finalize(address, TokenId, u64)
update_listing(public TokenId, public u64) -> () finalize(address, TokenId, u64)
cancel_listing(public TokenId) -> () finalize(address, TokenId)
accept_listing(public Listing, credits.aleo/credits, public u64, public address, public TokenId, public TokenData) -> (Token, credits.aleo/credits, credits.aleo/credits, credits.aleo/credits, credits.aleo/credits) finalize(Listing, TokenId, TokenData, u64, address)
Program Source Code (Aleo Instruction) Upload Leo source

import credits.aleo;

program aleo_store_nft.aleo;

struct TokenId:
    token_number as u128;
    collection_number as u128;

struct String64:
    part0 as u128;
    part1 as u128;
    part2 as u128;
    part3 as u128;

struct TokenData:
    metadata_uri as String64;
    transferable as boolean;

record Token:
    owner as address.private;
    id as TokenId.private;
    data as TokenData.private;

struct CollectionId:
    collection_number as u128;

struct CollectionData:
    updatable as boolean;

record Collection:
    owner as address.private;
    id as CollectionId.private;
    data as CollectionData.private;

struct CollectionPublicData:
    royalty_fees as u64;
    royalty_address as address;
    metadata_uri as String64;
    base_uri as String64;
    publicizable as boolean;

struct CollectionMintId:
    collection_number as u128;
    mint_number as u128;

struct MintData:
    whitelist as boolean;
    price as u64;
    treasury as address;
    start as u32;
    end as u32;
    random as boolean;

struct AddressCollectionMintId:
    addr as address;
    collection_number as u128;
    mint_number as u128;

struct TokenMintId:
    collection_number as u128;
    token_number as u128;
    mint_number as u128;

struct IndexCollectionMintId:
    index as u128;
    collection_number as u128;
    mint_number as u128;

struct Listing:
    seller as address;
    price as u64;

record CollectionOwnerProof:
    owner as address.private;
    prover as address.private;
    id as CollectionId.private;
    is_owner as boolean.private;
    height as u32.private;

record CollectionHolderProof:
    owner as address.private;
    prover as address.private;
    id as CollectionId.private;
    is_holder as boolean.private;
    height as u32.private;

record TokenOwnerProof:
    owner as address.private;
    prover as address.private;
    id as TokenId.private;
    is_owner as boolean.private;
    height as u32.private;

mapping collectionPublicData:
    key as CollectionId.public;
    value as CollectionPublicData.public;

mapping tokenExists:
    key as TokenId.public;
    value as boolean.public;

mapping publicTokenData:
    key as TokenId.public;
    value as TokenData.public;

mapping publicTokenOwners:
    key as TokenId.public;
    value as address.public;

mapping mintWhitelists:
    key as AddressCollectionMintId.public;
    value as u64.public;

mapping collectionMintData:
    key as CollectionMintId.public;
    value as MintData.public;

mapping tokenMintData:
    key as TokenMintId.public;
    value as TokenData.public;

mapping mintTokenNumbers:
    key as IndexCollectionMintId.public;
    value as u128.public;

mapping mintLengths:
    key as CollectionMintId.public;
    value as u128.public;

mapping listings:
    key as TokenId.public;
    value as Listing.public;

function create_collection:
    input r0 as u128.private;
    input r1 as CollectionData.private;
    input r2 as CollectionPublicData.public;
    assert.neq r0 0u128;
    cast r0 into r3 as CollectionId;
    cast self.caller r3 r1 into r4 as Collection.record;
    async create_collection r3 r2 into r5;
    output r4 as Collection.record;
    output r5 as aleo_store_nft.aleo/create_collection.future;
finalize create_collection:
    input r0 as CollectionId.public;
    input r1 as CollectionPublicData.public;
    contains collectionPublicData[r0] into r2;
    not r2 into r3;
    assert.eq r3 true;
    set r1 into collectionPublicData[r0];

function update_collection_public_data:
    input r0 as Collection.record;
    input r1 as CollectionPublicData.public;
    cast r0.owner r0.id r0.data into r2 as Collection.record;
    async update_collection_public_data r0.id r1 into r3;
    output r2 as Collection.record;
    output r3 as aleo_store_nft.aleo/update_collection_public_data.future;
finalize update_collection_public_data:
    input r0 as CollectionId.public;
    input r1 as CollectionPublicData.public;
    get collectionPublicData[r0] into r2;
    assert.eq r2.publicizable r1.publicizable;
    set r1 into collectionPublicData[r0];

function transfer_collection:
    input r0 as Collection.record;
    input r1 as address.private;
    cast r1 r0.id r0.data into r2 as Collection.record;
    output r2 as Collection.record;

function freeze_collection_updates:
    input r0 as Collection.record;
    cast false into r1 as CollectionData;
    cast r0.owner r0.id r1 into r2 as Collection.record;
    async freeze_collection_updates r0.id into r3;
    output r2 as Collection.record;
    output r3 as aleo_store_nft.aleo/freeze_collection_updates.future;
finalize freeze_collection_updates:
    input r0 as CollectionId.public;
    assert.eq true true;

function mint_private:
    input r0 as Collection.record;
    input r1 as u128.public;
    input r2 as address.private;
    input r3 as TokenData.private;
    cast r0.owner r0.id r0.data into r4 as Collection.record;
    cast r1 r0.id.collection_number into r5 as TokenId;
    cast r2 r5 r3 into r6 as Token.record;
    async mint_private r5 into r7;
    output r6 as Token.record;
    output r4 as Collection.record;
    output r7 as aleo_store_nft.aleo/mint_private.future;
finalize mint_private:
    input r0 as TokenId.public;
    contains tokenExists[r0] into r1;
    not r1 into r2;
    assert.eq r2 true;
    set true into tokenExists[r0];

function burn_private:
    input r0 as Collection.record;
    input r1 as Token.record;
    assert.eq r1.id.collection_number r0.id.collection_number;
    assert.eq r0.data.updatable true;
    cast r0.data.updatable into r2 as CollectionData;
    cast r0.owner r0.id r2 into r3 as Collection.record;
    async burn_private r1.id into r4;
    output r3 as Collection.record;
    output r4 as aleo_store_nft.aleo/burn_private.future;
finalize burn_private:
    input r0 as TokenId.public;
    remove tokenExists[r0];

function burn_public:
    input r0 as Collection.record;
    input r1 as TokenId.public;
    assert.eq r1.collection_number r0.id.collection_number;
    assert.eq r0.data.updatable true;
    cast r0.owner r0.id r0.data into r2 as Collection.record;
    async burn_public r0.id r1 into r3;
    output r2 as Collection.record;
    output r3 as aleo_store_nft.aleo/burn_public.future;
finalize burn_public:
    input r0 as CollectionId.public;
    input r1 as TokenId.public;
    contains listings[r1] into r2;
    contains publicTokenData[r1] into r3;
    assert.eq r3 true;
    remove tokenExists[r1];
    remove publicTokenData[r1];
    remove listings[r1];
    remove publicTokenOwners[r1];

function transfer_token_private:
    input r0 as Token.record;
    input r1 as address.private;
    assert.eq r0.data.transferable true;
    cast r1 r0.id r0.data into r2 as Token.record;
    output r2 as Token.record;

function transfer_token_public:
    input r0 as TokenId.public;
    input r1 as address.public;
    async transfer_token_public r0 r1 self.caller into r2;
    output r2 as aleo_store_nft.aleo/transfer_token_public.future;
finalize transfer_token_public:
    input r0 as TokenId.public;
    input r1 as address.public;
    input r2 as address.public;
    get publicTokenOwners[r0] into r3;
    get publicTokenData[r0] into r4;
    assert.eq r3 r2;
    assert.eq r4.transferable true;
    set r1 into publicTokenOwners[r0];

function transfer_t_private_to_public:
    input r0 as Token.record;
    input r1 as address.public;
    is.eq self.caller r1 into r2;
    or r0.data.transferable r2 into r3;
    assert.eq r3 true;
    async transfer_t_private_to_public r0.data r0.id r1 into r4;
    output r4 as aleo_store_nft.aleo/transfer_t_private_to_public.future;
finalize transfer_t_private_to_public:
    input r0 as TokenData.public;
    input r1 as TokenId.public;
    input r2 as address.public;
    cast r1.collection_number into r3 as CollectionId;
    get collectionPublicData[r3] into r4;
    assert.eq r4.publicizable true;
    set r0 into publicTokenData[r1];
    set r2 into publicTokenOwners[r1];

function transfer_t_public_to_private:
    input r0 as TokenId.public;
    input r1 as TokenData.public;
    input r2 as address.public;
    is.eq self.caller r2 into r3;
    or r1.transferable r3 into r4;
    assert.eq r4 true;
    cast r2 r0 r1 into r5 as Token.record;
    async transfer_t_public_to_private r0 r1 self.caller into r6;
    output r5 as Token.record;
    output r6 as aleo_store_nft.aleo/transfer_t_public_to_private.future;
finalize transfer_t_public_to_private:
    input r0 as TokenId.public;
    input r1 as TokenData.public;
    input r2 as address.public;
    get publicTokenData[r0] into r3;
    get publicTokenOwners[r0] into r4;
    assert.eq r4 r2;
    assert.eq r1 r3;
    remove publicTokenOwners[r0];
    remove publicTokenData[r0];

function update_token_data_private:
    input r0 as Collection.record;
    input r1 as Token.record;
    input r2 as TokenData.private;
    assert.eq r1.id.collection_number r0.id.collection_number;
    assert.eq r0.data.updatable true;
    cast r0.owner r0.id r0.data into r3 as Collection.record;
    cast r1.owner r1.id r2 into r4 as Token.record;
    output r4 as Token.record;
    output r3 as Collection.record;

function update_token_data_public:
    input r0 as Collection.record;
    input r1 as TokenId.public;
    input r2 as TokenData.public;
    assert.eq r1.collection_number r0.id.collection_number;
    assert.eq r0.data.updatable true;
    cast r0.owner r0.id r0.data into r3 as Collection.record;
    async update_token_data_public r1 r2 into r4;
    output r3 as Collection.record;
    output r4 as aleo_store_nft.aleo/update_token_data_public.future;
finalize update_token_data_public:
    input r0 as TokenId.public;
    input r1 as TokenData.public;
    set r1 into publicTokenData[r0];

function set_collection_mint:
    input r0 as Collection.record;
    input r1 as u128.public;
    input r2 as MintData.public;
    cast r0.owner r0.id r0.data into r3 as Collection.record;
    cast r0.id.collection_number r1 into r4 as CollectionMintId;
    async set_collection_mint r4 r2 into r5;
    output r3 as Collection.record;
    output r5 as aleo_store_nft.aleo/set_collection_mint.future;
finalize set_collection_mint:
    input r0 as CollectionMintId.public;
    input r1 as MintData.public;
    cast r0.collection_number into r2 as CollectionId;
    get collectionPublicData[r2] into r3;
    assert.eq r3.publicizable true;
    set r1 into collectionMintData[r0];

function create_token_mint:
    input r0 as Collection.record;
    input r1 as u128.public;
    input r2 as u128.public;
    input r3 as TokenData.public;
    cast r0.owner r0.id r0.data into r4 as Collection.record;
    cast r0.id.collection_number r2 into r5 as CollectionMintId;
    async create_token_mint r5 r1 r3 into r6;
    output r4 as Collection.record;
    output r6 as aleo_store_nft.aleo/create_token_mint.future;
finalize create_token_mint:
    input r0 as CollectionMintId.public;
    input r1 as u128.public;
    input r2 as TokenData.public;
    get.or_use mintLengths[r0] 0u128 into r3;
    cast r3 r0.collection_number r0.mint_number into r4 as IndexCollectionMintId;
    cast r0.collection_number r1 r0.mint_number into r5 as TokenMintId;
    add r3 1u128 into r6;
    set r6 into mintLengths[r0];
    set r1 into mintTokenNumbers[r4];
    set r2 into tokenMintData[r5];

function update_token_mint:
    input r0 as Collection.record;
    input r1 as u128.public;
    input r2 as u128.public;
    input r3 as u128.public;
    input r4 as TokenData.public;
    cast r0.owner r0.id r0.data into r5 as Collection.record;
    cast r0.id.collection_number r1 r2 into r6 as TokenMintId;
    async update_token_mint r6 r3 r4 into r7;
    output r5 as Collection.record;
    output r7 as aleo_store_nft.aleo/update_token_mint.future;
finalize update_token_mint:
    input r0 as TokenMintId.public;
    input r1 as u128.public;
    input r2 as TokenData.public;
    cast r1 r0.collection_number r0.mint_number into r3 as IndexCollectionMintId;
    get mintTokenNumbers[r3] into r4;
    assert.eq r4 r0.token_number;
    set r2 into tokenMintData[r0];

function remove_token_mint:
    input r0 as Collection.record;
    input r1 as u128.public;
    input r2 as u128.public;
    input r3 as u128.public;
    cast r3 r0.id.collection_number r2 into r4 as IndexCollectionMintId;
    cast r0.owner r0.id r0.data into r5 as Collection.record;
    async remove_token_mint r4 r1 into r6;
    output r5 as Collection.record;
    output r6 as aleo_store_nft.aleo/remove_token_mint.future;
finalize remove_token_mint:
    input r0 as IndexCollectionMintId.public;
    input r1 as u128.public;
    get mintTokenNumbers[r0] into r2;
    assert.eq r2 r1;
    cast r0.collection_number r0.mint_number into r3 as CollectionMintId;
    get mintLengths[r3] into r4;
    sub r4 1u128 into r5;
    set r5 into mintLengths[r3];
    cast r5 r0.collection_number r0.mint_number into r6 as IndexCollectionMintId;
    get mintTokenNumbers[r6] into r7;
    set r7 into mintTokenNumbers[r0];
    remove mintTokenNumbers[r6];
    cast r0.collection_number r1 r0.mint_number into r8 as TokenMintId;
    remove tokenMintData[r8];

function update_whitelist:
    input r0 as Collection.record;
    input r1 as u128.public;
    input r2 as address.public;
    input r3 as u64.public;
    cast r0.owner r0.id r0.data into r4 as Collection.record;
    cast r2 r0.id.collection_number r1 into r5 as AddressCollectionMintId;
    async update_whitelist r5 r3 into r6;
    output r4 as Collection.record;
    output r6 as aleo_store_nft.aleo/update_whitelist.future;
finalize update_whitelist:
    input r0 as AddressCollectionMintId.public;
    input r1 as u64.public;
    set r1 into mintWhitelists[r0];

function mint_public:
    input r0 as IndexCollectionMintId.public;
    input r1 as u128.public;
    input r2 as credits.aleo/credits.record;
    input r3 as address.public;
    input r4 as u64.public;
    call credits.aleo/transfer_private r2 r3 r4 into r5 r6;
    async mint_public r0 r1 r3 r4 self.caller into r7;
    output r6 as credits.aleo/credits.record;
    output r5 as credits.aleo/credits.record;
    output r7 as aleo_store_nft.aleo/mint_public.future;
finalize mint_public:
    input r0 as IndexCollectionMintId.public;
    input r1 as u128.public;
    input r2 as address.public;
    input r3 as u64.public;
    input r4 as address.public;
    cast r0.collection_number r0.mint_number into r5 as CollectionMintId;
    get collectionMintData[r5] into r6;
    get mintLengths[r5] into r7;
    rand.chacha into r8 as u128;
    rem r8 r7 into r9;
    ternary r6.random r9 r0.index into r10;
    cast r10 r5.collection_number r5.mint_number into r11 as IndexCollectionMintId;
    get mintTokenNumbers[r11] into r12;
    is.eq r12 r1 into r13;
    or r6.random r13 into r14;
    assert.eq r14 true;
    cast r12 r5.collection_number into r15 as TokenId;
    contains tokenExists[r15] into r16;
    not r16 into r17;
    assert.eq r17 true;
    cast r4 r5.collection_number r5.mint_number into r18 as AddressCollectionMintId;
    get.or_use mintWhitelists[r18] 0u64 into r19;
    ternary r6.whitelist r19 1u64 into r20;
    sub r20 1u64 into r21;
    set r21 into mintWhitelists[r18];
    is.eq r6.start 0u32 into r22;
    lte r6.start block.height into r23;
    or r22 r23 into r24;
    assert.eq r24 true;
    is.eq r6.end 0u32 into r25;
    lt block.height r6.end into r26;
    or r25 r26 into r27;
    assert.eq r27 true;
    assert.eq r3 r6.price;
    assert.eq r2 r6.treasury;
    sub r7 1u128 into r28;
    set r28 into mintLengths[r5];
    cast r28 r5.collection_number r5.mint_number into r29 as IndexCollectionMintId;
    get mintTokenNumbers[r29] into r30;
    set r30 into mintTokenNumbers[r29];
    remove mintTokenNumbers[r11];
    set true into tokenExists[r15];
    set r4 into publicTokenOwners[r15];
    cast r5.collection_number r12 r0.mint_number into r31 as TokenMintId;
    get tokenMintData[r31] into r32;
    set r32 into publicTokenData[r15];

function prove_collection_ownership:
    input r0 as Collection.record;
    input r1 as address.private;
    input r2 as u32.public;
    cast r1 self.caller r0.id true r2 into r3 as CollectionOwnerProof.record;
    cast r0.owner r0.id r0.data into r4 as Collection.record;
    async prove_collection_ownership r2 into r5;
    output r3 as CollectionOwnerProof.record;
    output r4 as Collection.record;
    output r5 as aleo_store_nft.aleo/prove_collection_ownership.future;
finalize prove_collection_ownership:
    input r0 as u32.public;
    sub block.height 50u32 into r1;
    gte r0 r1 into r2;
    assert.eq r2 true;

function prove_token_ownership:
    input r0 as Token.record;
    input r1 as address.private;
    input r2 as u32.public;
    cast r1 self.caller r0.id true r2 into r3 as TokenOwnerProof.record;
    cast r0.owner r0.id r0.data into r4 as Token.record;
    async prove_token_ownership r2 into r5;
    output r3 as TokenOwnerProof.record;
    output r4 as Token.record;
    output r5 as aleo_store_nft.aleo/prove_token_ownership.future;
finalize prove_token_ownership:
    input r0 as u32.public;
    sub block.height 50u32 into r1;
    gte r0 r1 into r2;
    assert.eq r2 true;

function prove_collection_holdership:
    input r0 as Token.record;
    input r1 as address.private;
    input r2 as u32.public;
    cast r0.id.collection_number into r3 as CollectionId;
    cast r1 self.caller r3 true r2 into r4 as CollectionHolderProof.record;
    cast r0.owner r0.id r0.data into r5 as Token.record;
    async prove_collection_holdership r2 into r6;
    output r4 as CollectionHolderProof.record;
    output r5 as Token.record;
    output r6 as aleo_store_nft.aleo/prove_collection_holdership.future;
finalize prove_collection_holdership:
    input r0 as u32.public;
    sub block.height 50u32 into r1;
    gte r0 r1 into r2;
    assert.eq r2 true;

function mint_alias:
    input r0 as u128.public;
    input r1 as address.private;
    input r2 as String64.private;
    cast r0 0u128 into r3 as TokenId;
    cast r2 true into r4 as TokenData;
    cast r1 r3 r4 into r5 as Token.record;
    async mint_alias r3 into r6;
    output r5 as Token.record;
    output r6 as aleo_store_nft.aleo/mint_alias.future;
finalize mint_alias:
    input r0 as TokenId.public;
    contains tokenExists[r0] into r1;
    not r1 into r2;
    assert.eq r2 true;
    set true into tokenExists[r0];

function update_alias_metadata_private:
    input r0 as Token.record;
    input r1 as String64.private;
    cast r1 true into r2 as TokenData;
    cast r0.owner r0.id r2 into r3 as Token.record;
    output r3 as Token.record;

function update_alias_metadata_public:
    input r0 as TokenId.public;
    input r1 as String64.public;
    async update_alias_metadata_public r0 r1 self.caller into r2;
    output r2 as aleo_store_nft.aleo/update_alias_metadata_public.future;
finalize update_alias_metadata_public:
    input r0 as TokenId.public;
    input r1 as String64.public;
    input r2 as address.public;
    get publicTokenOwners[r0] into r3;
    assert.eq r3 r2;
    cast r1 true into r4 as TokenData;
    set r4 into publicTokenData[r0];

function create_alias_collection:
    cast false into r0 as CollectionData;
    cast 0u128 into r1 as CollectionId;
    cast aleo1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq3ljyzc r1 r0 into r2 as Collection.record;
    async create_alias_collection  into r3;
    output r2 as Collection.record;
    output r3 as aleo_store_nft.aleo/create_alias_collection.future;
finalize create_alias_collection:
    cast 0u128 into r0 as CollectionId;
    contains collectionPublicData[r0] into r1;
    not r1 into r2;
    assert.eq r2 true;
    cast 0u128 into r3 as CollectionId;
    cast 0u128 0u128 0u128 0u128 into r4 as String64;
    cast 0u128 0u128 0u128 0u128 into r5 as String64;
    cast 0u64 aleo1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq3ljyzc r4 r5 true into r6 as CollectionPublicData;
    set r6 into collectionPublicData[r3];

function create_listing:
    input r0 as TokenId.public;
    input r1 as u64.public;
    async create_listing self.caller r0 r1 into r2;
    output r2 as aleo_store_nft.aleo/create_listing.future;
finalize create_listing:
    input r0 as address.public;
    input r1 as TokenId.public;
    input r2 as u64.public;
    get publicTokenOwners[r1] into r3;
    assert.eq r3 r0;
    get publicTokenData[r1] into r4;
    assert.eq r4.transferable true;
    cast r0 r2 into r5 as Listing;
    set r5 into listings[r1];
    remove publicTokenOwners[r1];

function update_listing:
    input r0 as TokenId.public;
    input r1 as u64.public;
    async update_listing self.caller r0 r1 into r2;
    output r2 as aleo_store_nft.aleo/update_listing.future;
finalize update_listing:
    input r0 as address.public;
    input r1 as TokenId.public;
    input r2 as u64.public;
    get listings[r1] into r3;
    assert.eq r0 r3.seller;
    cast r0 r2 into r4 as Listing;
    set r4 into listings[r1];

function cancel_listing:
    input r0 as TokenId.public;
    async cancel_listing self.caller r0 into r1;
    output r1 as aleo_store_nft.aleo/cancel_listing.future;
finalize cancel_listing:
    input r0 as address.public;
    input r1 as TokenId.public;
    get listings[r1] into r2;
    assert.eq r0 r2.seller;
    set r0 into publicTokenOwners[r1];
    remove listings[r1];

function accept_listing:
    input r0 as Listing.public;
    input r1 as credits.aleo/credits.record;
    input r2 as u64.public;
    input r3 as address.public;
    input r4 as TokenId.public;
    input r5 as TokenData.public;
    cast self.caller r4 r5 into r6 as Token.record;
    mul r2 r0.price into r7;
    div r7 10000u64 into r8;
    mul 250u64 r0.price into r9;
    div r9 10000u64 into r10;
    sub r0.price r8 into r11;
    sub r11 r10 into r12;
    call credits.aleo/transfer_private r1 aleo1xg4897p9ea8cd4cqpm2fzq9nthjr8caa377u3a3jqv9ff9u4f5gq3kut0m r10 into r13 r14;
    call credits.aleo/transfer_private r14 r3 r8 into r15 r16;
    call credits.aleo/transfer_private r16 r0.seller r12 into r17 r18;
    async accept_listing r0 r4 r5 r2 r3 into r19;
    output r6 as Token.record;
    output r13 as credits.aleo/credits.record;
    output r15 as credits.aleo/credits.record;
    output r18 as credits.aleo/credits.record;
    output r17 as credits.aleo/credits.record;
    output r19 as aleo_store_nft.aleo/accept_listing.future;
finalize accept_listing:
    input r0 as Listing.public;
    input r1 as TokenId.public;
    input r2 as TokenData.public;
    input r3 as u64.public;
    input r4 as address.public;
    get listings[r1] into r5;
    assert.eq r0 r5;
    get publicTokenData[r1] into r6;
    assert.eq r2 r6;
    cast r1.collection_number into r7 as CollectionId;
    get collectionPublicData[r7] into r8;
    assert.eq r8.royalty_fees r3;
    assert.eq r8.royalty_address r4;
    remove listings[r1];
    remove publicTokenData[r1];

Block heightTimestampTransition IDFunction callState
2,206,4982024-04-26 14:41:31au13jp0mjx5zaryt9k4acxexqzt6c4tfsvy07gjr6wpklchmgtu5sfqcc9shpcreate_collectionAccepted
2,206,4772024-04-26 14:39:30au10wpdl8qatzpwpcec6392fleq6eu272lr8mnk5mp09n68rgr5zgxslwrly6create_collectionAccepted
2,206,4332024-04-26 14:35:29au1gla82r2y3zk6xlkd6r4s0ych9wewat9xx5gsuwjm0hl3nn6hr5rs56t9zrcreate_collectionAccepted
2,206,4132024-04-26 14:33:30au1gfx07ud9hnfmzprz6xunq05pzmgsfyp5c77qcrtexdm4xwhuaqrq9gess0create_collectionAccepted
2,206,3682024-04-26 14:28:59au1k6wyka3pwkxpmr7n2r30tzzak0nnwzynqe36dnl464aakwhuvc8q6jd93vcreate_collectionAccepted
2,206,3492024-04-26 14:27:16au1pc54wz9yrlx38mfv0m9f3ws92qe20zdjtyn47m72a4cp6ye9zq8qrwudddcreate_collectionAccepted
2,206,3102024-04-26 14:23:37au169ee0zt2hma2gcclyv6zzzz4gcf97sezw74sucp9hyxfwsunlgys3ksn63create_collectionAccepted
2,206,2802024-04-26 14:20:31au1fwpzhy29gcwjr2q0jy96qfcn73fdervd8qdg3qkqltjhnrsn558swlahatcreate_collectionAccepted
2,206,2482024-04-26 14:17:01au1e5564c0e7ye9wch6rwlp9kgk63z6gq855k8hhzamksl9qunvucgs4dtw0rcreate_collectionAccepted
2,206,1782024-04-26 14:10:33au1j4dsk3fwv5qmevcpd8fqtjc5qf6vdl7qx368n3p6hx4tzmm69sqsvtzem9create_collectionAccepted
2,206,1652024-04-26 14:09:12au1f2egl5k4qgd4a4dt9wrkq6jktdkne987ad2zdpwd8dxx6rhccugqmr5zjlcreate_collectionAccepted
2,206,1222024-04-26 14:04:34au1r2pckh5gznw0dtcfkr698gfmkp8nm5asjc20089uety0u0avrupsljw4pccreate_collectionAccepted
2,206,0202024-04-26 13:54:23au19vuufvekncvph4lt9cynp542580kzxqnnxfjwk824hnt4qznyqzs6jehxfcreate_collectionAccepted
2,205,9612024-04-26 13:48:31au1wx8tzk9nyr90ks0psjj0xn8v8caska54dqqz3ddtes5gv8qghygql3k3jscreate_collectionAccepted
2,205,9092024-04-26 13:43:21au1wczhyrv6a7vrtztscfsf43tj7zxxad0qzhn68llr52yvcervscgsq7jftgcreate_collectionAccepted
2,205,7942024-04-26 13:32:22au1qjsxnzfnfg0cax4hhuf4820kp6tsdpcdn0czh32hpzyx3x3mcggs0vq9cycreate_collectionAccepted
2,205,7732024-04-26 13:30:08au1qs8q9pa65uzmgsqfek4fhmfzg0nunna46pg3y47uzl820hk4dcxqyau42dcreate_collectionAccepted
2,205,7092024-04-26 13:24:07au19tlcrf6g83anqva7kg0r0qcpf2zwnuczrmx8e5wjkfuvga8l8uzs4ldrhgcreate_collectionAccepted
2,205,5082024-04-26 13:03:55au14d368rtk7yanu3fwz9layc9fg0xc8c9u3wswss74jptwv5jxcqyqz4r6eucreate_collectionAccepted
2,205,3472024-04-26 12:48:01au13ngy8fmylvuzh07d0azwm52dtwyxtqavwl8qe0a864s4wryc6qpqpjjz7gcreate_collectionAccepted
2,205,3062024-04-26 12:44:14au1xue9s5583tq0l7hkfxmzu59hec5ny6t7t5kgadhnfclkhy9fvcxssqj8pjcreate_collectionAccepted
2,205,2902024-04-26 12:42:25au1fgmz2kst57avg5ceqj48u3ewvxaztlk9pnr7nudf569w4w8urygstnmtzgcreate_collectionAccepted
2,205,1372024-04-26 12:27:27au1en7q0wszflfj0nzldc4exlh42eyp70y0l7gnz693gyfke2fscc9ssjpt79create_collectionAccepted
2,205,0432024-04-26 12:18:14au1st3x6qd6687gzwe2kn5u0mft802lqh8nce26n5cxfp2hn6e3vcrqzlhe2zcreate_collectionAccepted
2,204,9502024-04-26 12:08:59au1yz959vzjuuhjsmff98qn3rvlcc5rg33xvjd80g4eejw7sar22gysw00yfccreate_collectionAccepted
2,204,9342024-04-26 12:06:59au14mnuyd0na9g0yv5ywshp6rdeldatnnnra0ptg5j0thwg6asvjcgqc8pmf3create_collectionAccepted
2,204,9022024-04-26 12:03:48au1vcfmpcs95p6m0v2xqhsytcddk5dwsd505hqwrkaumkwr2wmx6uzqn3jzuhcreate_collectionAccepted
2,204,8382024-04-26 11:57:24au1530hwd72tvgjj894nhlmp0pefr0nwj9nmhyfqgu7ctcfptm67u9qaau5w7create_collectionAccepted
2,204,7452024-04-26 11:48:26au1h7f040aes6m9f6ml5lzshhmt04tq4wv5gaqvefazvzghf285quzqpvm604create_collectionAccepted
2,204,7302024-04-26 11:46:44au1pg4q2a70kkdhh7a9mk0kskfnrdzly6t2z6nx9qsqp6lqh9yqeg9q5nmjhacreate_collectionAccepted




















Not implemented