Program marketplace_example.aleo
Program ID
marketplace_example.aleo
Deployment transaction
Owner signature
sign1vl945r280k9da0f8j78e2s5mdy7p0krjnk6uz6hhfv7vk0z0tyq4klzxu77ahzywz3zhu20su934egcgg32zr707m32qzuhya7urjqgh7y00jwagn9ae9ytnk5qj7za66k5nruz2ex0y87flnlkctk2eqq62xlryqk35v7q8k82fxepzes2rqz8rhsaz07yqr0p85g3mhrpssppgkmj
Times called
0
Similar programs
0
Imports
Mappings
listings (field -> ListingData)
listings_buyer (field -> address)
listings_buyer (field -> address)
Structs
Proposal
Share
Custody
ValidatorShareData
data
ListingData
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)
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 height | Timestamp | Transition ID | Function call | State |