Program arc721_example.aleo
Program ID
arc721_example.aleo
Deployment transaction
Owner signature
sign1mc64r5sp0zqhqymcngk242zwwdjqke270n92k5d8k8urql7yw5qavj6uj2yqf90czf2tjexz3hz5qgfn66a7nclac0tgyq6a4rppuqsh7y00jwagn9ae9ytnk5qj7za66k5nruz2ex0y87flnlkctk2eqq62xlryqk35v7q8k82fxepzes2rqz8rhsaz07yqr0p85g3mhrpsskpgzrs
Times called
0
Similar programs
0
Imports
-
Mappings
nft_owners (field -> address)
for_all_approvals (field -> boolean)
nft_approvals (field -> field)
nft_commits (field -> boolean)
for_all_approvals (field -> boolean)
nft_approvals (field -> field)
nft_commits (field -> boolean)
Structs
approval
data
data
Records
NFT
NFTView
NFTView
Functions
-
Transitions
transfer_private(NFT, address) -> NFT
transfer_private_to_public(NFT, public address) -> NFTView finalize(address, field)
transfer_public(data, scalar, public address) -> NFTView finalize(address, field, address)
transfer_public_to_private(data, scalar, address) -> NFT finalize(address, field)
set_for_all_approval(address, public boolean) -> () finalize(field, boolean)
approve_public(address, data, scalar) -> () finalize(address, field, field)
transfer_from_public(public address, public address, data, scalar) -> NFTView finalize(field, address, address, field)
update_edition_private(NFT, scalar) -> NFT finalize(field)
transfer_private_to_public(NFT, public address) -> NFTView finalize(address, field)
transfer_public(data, scalar, public address) -> NFTView finalize(address, field, address)
transfer_public_to_private(data, scalar, address) -> NFT finalize(address, field)
set_for_all_approval(address, public boolean) -> () finalize(field, boolean)
approve_public(address, data, scalar) -> () finalize(address, field, field)
transfer_from_public(public address, public address, data, scalar) -> NFTView finalize(field, address, address, field)
update_edition_private(NFT, scalar) -> NFT finalize(field)
Program Source Code (Aleo Instruction) Upload Leo source
program arc721_example.aleo; struct approval: approver as address; spender as address; struct data: metadata as [field; 4u32]; record NFT: owner as address.private; data as data.private; edition as scalar.private; record NFTView: owner as address.private; data as data.private; edition as scalar.private; mapping nft_owners: key as field.public; value as address.public; mapping for_all_approvals: key as field.public; value as boolean.public; mapping nft_approvals: key as field.public; value as field.public; mapping nft_commits: key as field.public; value as boolean.public; function transfer_private: input r0 as NFT.record; input r1 as address.private; cast r1 r0.data r0.edition into r2 as NFT.record; output r2 as NFT.record; function transfer_private_to_public: input r0 as NFT.record; input r1 as address.public; hash.bhp256 r0.data into r2 as field; commit.bhp256 r2 r0.edition into r3 as field; cast r1 r0.data r0.edition into r4 as NFTView.record; async transfer_private_to_public r1 r3 into r5; output r4 as NFTView.record; output r5 as arc721_example.aleo/transfer_private_to_public.future; finalize transfer_private_to_public: input r0 as address.public; input r1 as field.public; set r0 into nft_owners[r1]; function transfer_public: input r0 as data.private; input r1 as scalar.private; input r2 as address.public; hash.bhp256 r0 into r3 as field; commit.bhp256 r3 r1 into r4 as field; cast r2 r0 r1 into r5 as NFTView.record; async transfer_public r2 r4 self.caller into r6; output r5 as NFTView.record; output r6 as arc721_example.aleo/transfer_public.future; finalize transfer_public: input r0 as address.public; input r1 as field.public; input r2 as address.public; get nft_owners[r1] into r3; assert.eq r2 r3; remove nft_approvals[r1]; set r0 into nft_owners[r1]; function transfer_public_to_private: input r0 as data.private; input r1 as scalar.private; input r2 as address.private; hash.bhp256 r0 into r3 as field; commit.bhp256 r3 r1 into r4 as field; async transfer_public_to_private self.caller r4 into r5; cast r2 r0 r1 into r6 as NFT.record; output r6 as NFT.record; output r5 as arc721_example.aleo/transfer_public_to_private.future; finalize transfer_public_to_private: input r0 as address.public; input r1 as field.public; get nft_owners[r1] into r2; assert.eq r0 r2; remove nft_approvals[r1]; remove nft_owners[r1]; function set_for_all_approval: input r0 as address.private; input r1 as boolean.public; cast self.caller r0 into r2 as approval; hash.bhp256 r2 into r3 as field; async set_for_all_approval r3 r1 into r4; output r4 as arc721_example.aleo/set_for_all_approval.future; finalize set_for_all_approval: input r0 as field.public; input r1 as boolean.public; set r1 into for_all_approvals[r0]; function approve_public: input r0 as address.private; input r1 as data.private; input r2 as scalar.private; hash.bhp256 r1 into r3 as field; commit.bhp256 r3 r2 into r4 as field; cast self.caller r0 into r5 as approval; hash.bhp256 r5 into r6 as field; async approve_public self.caller r6 r4 into r7; output r7 as arc721_example.aleo/approve_public.future; finalize approve_public: input r0 as address.public; input r1 as field.public; input r2 as field.public; get nft_owners[r2] into r3; assert.eq r3 r0; set r1 into nft_approvals[r2]; function transfer_from_public: input r0 as address.public; input r1 as address.public; input r2 as data.private; input r3 as scalar.private; hash.bhp256 r2 into r4 as field; commit.bhp256 r4 r3 into r5 as field; cast r1 r2 r3 into r6 as NFTView.record; cast r0 self.caller into r7 as approval; hash.bhp256 r7 into r8 as field; async transfer_from_public r8 r0 r1 r5 into r9; output r6 as NFTView.record; output r9 as arc721_example.aleo/transfer_from_public.future; finalize transfer_from_public: input r0 as field.public; input r1 as address.public; input r2 as address.public; input r3 as field.public; contains nft_approvals[r3] into r4; get.or_use for_all_approvals[r0] false into r5; or r4 r5 into r6; assert.eq r6 true; get nft_owners[r3] into r7; assert.eq r1 r7; remove nft_approvals[r3]; set r2 into nft_owners[r3]; function update_edition_private: input r0 as NFT.record; input r1 as scalar.private; cast r0.owner r0.data r1 into r2 as NFT.record; hash.bhp256 r0.data into r3 as field; commit.bhp256 r3 r1 into r4 as field; async update_edition_private r4 into r5; output r2 as NFT.record; output r5 as arc721_example.aleo/update_edition_private.future; finalize update_edition_private: input r0 as field.public; contains nft_commits[r0] into r1; not r1 into r2; assert.eq r2 true; set true into nft_commits[r0];
Block height | Timestamp | Transition ID | Function call | State |