in_sync

Program marketplace_example.aleo

Program ID
marketplace_example.aleo
Owner signature
sign1vl945r280k9da0f8j78e2s5mdy7p0krjnk6uz6hhfv7vk0z0tyq4klzxu77ahzywz3zhu20su934egcgg32zr707m32qzuhya7urjqgh7y00jwagn9ae9ytnk5qj7za66k5nruz2ex0y87flnlkctk2eqq62xlryqk35v7q8k82fxepzes2rqz8rhsaz07yqr0p85g3mhrpssppgkmj
Times called
0
Similar programs
0
Mappings
listings (field -> ListingData)
listings_buyer (field -> address)
Structs
Proposal
Share
Custody
ValidatorShareData
data
ListingData
Records
NFTView
Functions
-
Transitions
list(arc721_example.aleo/NFT, public u64, scalar, [field; 15u32], [address; 16u32]) -> NFTView finalize(field, u64, address, field, address)
accept_listing(public field, ListingData, public [address; 16u32], public u64, credits.aleo/credits) -> credits.aleo/credits finalize(address, field, ListingData)
withdraw_nft(data, scalar, ListingData) -> arc721_example.aleo/NFT finalize(address, field, ListingData)
Program Source Code (Aleo Instruction) Upload Leo source

import credits.aleo;
import protocol_core.aleo;
import protocol_transfers.aleo;
import secret_custody_protocol.aleo;
import arc721_example.aleo;

program marketplace_example.aleo;

struct Proposal:
    validators as [address; 16u32];
    threshold as u8;
    current_validator_set_index as u64;

struct Share:
    share_val as field;
    index as field;

struct Custody:
    initiator as address;
    data_address as address;
    threshold as u8;

struct ValidatorShareData:
    validator as address;
    share as Share;

struct data:
    metadata as [field; 4u32];

record NFTView:
    owner as address.private;
    data as data.private;
    edition as scalar.private;

struct ListingData:
    price as u64;
    seller as address;
    data_custody_hash as field;
    nft_data_address as address;

mapping listings:
    key as field.public;
    value as ListingData.public;

mapping listings_buyer:
    key as field.public;
    value as address.public;

function list:
    input r0 as arc721_example.aleo/NFT.record;
    input r1 as u64.public;
    input r2 as scalar.private;
    input r3 as [field; 15u32].private;
    input r4 as [address; 16u32].private;
    call arc721_example.aleo/transfer_private_to_public r0 marketplace_example.aleo into r5 r6;
    mul r2 1540945439182663264862696551825005342995406165131907382295858612069623286213group into r7;
    cast r7 into r8 as address;
    cast r8 r0.data r0.edition into r9 as NFTView.record;
    hash.bhp256 r0.data into r10 as field;
    commit.bhp256 r10 r0.edition into r11 as field;
    cast self.caller r8 8u8 into r12 as Custody;
    hash.bhp256 r12 into r13 as field;
    call secret_custody_protocol.aleo/custody_data_as_program r2 r3 r4 8u8 into r14;
    async list r11 r1 self.caller r13 r8 r6 r14 into r15;
    output r9 as NFTView.record;
    output r15 as marketplace_example.aleo/list.future;
finalize list:
    input r0 as field.public;
    input r1 as u64.public;
    input r2 as address.public;
    input r3 as field.public;
    input r4 as address.public;
    input r5 as arc721_example.aleo/transfer_private_to_public.future;
    input r6 as secret_custody_protocol.aleo/custody_data_as_program.future;
    await r5;
    await r6;
    cast r1 r2 r3 r4 into r7 as ListingData;
    set r7 into listings[r0];

function accept_listing:
    input r0 as field.public;
    input r1 as ListingData.private;
    input r2 as [address; 16u32].public;
    input r3 as u64.public;
    input r4 as credits.aleo/credits.record;
    call credits.aleo/transfer_public r1.seller r1.price into r5;
    call secret_custody_protocol.aleo/request_data_as_program r1.nft_data_address self.signer 8u8 r2 r3 r4 into r6 r7;
    async accept_listing self.caller r0 r1 r5 r7 into r8;
    output r6 as credits.aleo/credits.record;
    output r8 as marketplace_example.aleo/accept_listing.future;
finalize accept_listing:
    input r0 as address.public;
    input r1 as field.public;
    input r2 as ListingData.public;
    input r3 as credits.aleo/transfer_public.future;
    input r4 as secret_custody_protocol.aleo/request_data_as_program.future;
    get listings[r1] into r5;
    assert.eq r5 r2;
    contains listings_buyer[r1] into r6;
    not r6 into r7;
    assert.eq r7 true;
    set r0 into listings_buyer[r1];
    await r3;
    await r4;

function withdraw_nft:
    input r0 as data.private;
    input r1 as scalar.private;
    input r2 as ListingData.private;
    hash.bhp256 r0 into r3 as field;
    commit.bhp256 r3 r1 into r4 as field;
    call arc721_example.aleo/transfer_public_to_private r0 r1 self.caller into r5 r6;
    async withdraw_nft self.caller r4 r2 r6 into r7;
    output r5 as arc721_example.aleo/NFT.record;
    output r7 as marketplace_example.aleo/withdraw_nft.future;
finalize withdraw_nft:
    input r0 as address.public;
    input r1 as field.public;
    input r2 as ListingData.public;
    input r3 as arc721_example.aleo/transfer_public_to_private.future;
    get listings[r1] into r4;
    assert.eq r4 r2;
    get listings_buyer[r1] into r5;
    assert.eq r5 r0;
    remove listings_buyer[r1];
    remove listings[r1];
    await r3;

Block heightTimestampTransition IDFunction callState




Not implemented