-
Notifications
You must be signed in to change notification settings - Fork 24
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
15 changed files
with
4,295 additions
and
13 deletions.
There are no files selected for viewing
356 changes: 356 additions & 0 deletions
356
...lace-app-contracts/smart_contracts/artifacts/nft_marketplace/NftMarketplace.approval.teal
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,356 @@ | ||
#pragma version 10 | ||
|
||
smart_contracts.nft_marketplace.contract.NftMarketplace.approval_program: | ||
txn ApplicationID | ||
bnz main_entrypoint@2 | ||
callsub __init__ | ||
|
||
main_entrypoint@2: | ||
// smart_contracts/nft_marketplace/contract.py:20 | ||
// class NftMarketplace(arc4.ARC4Contract): | ||
txn NumAppArgs | ||
bz main_bare_routing@9 | ||
method "bootstrap(asset,uint64,pay)void" | ||
method "buy(pay,uint64)void" | ||
method "withdraw_and_delete()void" | ||
txna ApplicationArgs 0 | ||
match main_bootstrap_route@4 main_buy_route@5 main_withdraw_and_delete_route@6 | ||
err // reject transaction | ||
|
||
main_bootstrap_route@4: | ||
// smart_contracts/nft_marketplace/contract.py:96 | ||
// @arc4.abimethod | ||
txn OnCompletion | ||
! | ||
assert // OnCompletion is NoOp | ||
txn ApplicationID | ||
assert // is not creating | ||
// smart_contracts/nft_marketplace/contract.py:20 | ||
// class NftMarketplace(arc4.ARC4Contract): | ||
txna ApplicationArgs 1 | ||
btoi | ||
txnas Assets | ||
txna ApplicationArgs 2 | ||
btoi | ||
txn GroupIndex | ||
int 1 | ||
- | ||
dup | ||
gtxns TypeEnum | ||
int pay | ||
== | ||
assert // transaction type is pay | ||
// smart_contracts/nft_marketplace/contract.py:96 | ||
// @arc4.abimethod | ||
callsub bootstrap | ||
int 1 | ||
return | ||
|
||
main_buy_route@5: | ||
// smart_contracts/nft_marketplace/contract.py:147 | ||
// @arc4.abimethod | ||
txn OnCompletion | ||
! | ||
assert // OnCompletion is NoOp | ||
txn ApplicationID | ||
assert // is not creating | ||
// smart_contracts/nft_marketplace/contract.py:20 | ||
// class NftMarketplace(arc4.ARC4Contract): | ||
txn GroupIndex | ||
int 1 | ||
- | ||
dup | ||
gtxns TypeEnum | ||
int pay | ||
== | ||
assert // transaction type is pay | ||
txna ApplicationArgs 1 | ||
btoi | ||
// smart_contracts/nft_marketplace/contract.py:147 | ||
// @arc4.abimethod | ||
callsub buy | ||
int 1 | ||
return | ||
|
||
main_withdraw_and_delete_route@6: | ||
// smart_contracts/nft_marketplace/contract.py:210 | ||
// @arc4.abimethod(allow_actions=["DeleteApplication"]) | ||
txn OnCompletion | ||
int DeleteApplication | ||
== | ||
assert // OnCompletion is DeleteApplication | ||
txn ApplicationID | ||
assert // is not creating | ||
callsub withdraw_and_delete | ||
int 1 | ||
return | ||
|
||
main_bare_routing@9: | ||
// smart_contracts/nft_marketplace/contract.py:20 | ||
// class NftMarketplace(arc4.ARC4Contract): | ||
txn OnCompletion | ||
! | ||
assert // reject transaction | ||
txn ApplicationID | ||
! | ||
assert // is creating | ||
int 1 | ||
return | ||
|
||
|
||
// smart_contracts.nft_marketplace.contract.NftMarketplace.bootstrap(asset: uint64, unitary_price: uint64, mbr_pay: uint64) -> void: | ||
bootstrap: | ||
// smart_contracts/nft_marketplace/contract.py:96-99 | ||
// @arc4.abimethod | ||
// def bootstrap( | ||
// self, asset: Asset, unitary_price: UInt64, mbr_pay: gtxn.PaymentTransaction | ||
// ) -> None: | ||
proto 3 0 | ||
// smart_contracts/nft_marketplace/contract.py:100 | ||
// assert Txn.sender == Global.creator_address | ||
txn Sender | ||
global CreatorAddress | ||
== | ||
assert | ||
// smart_contracts/nft_marketplace/contract.py:101 | ||
// assert not self.bootstrapped | ||
int 0 | ||
byte "bootstrapped" | ||
app_global_get_ex | ||
assert // check bootstrapped exists | ||
! | ||
assert | ||
// smart_contracts/nft_marketplace/contract.py:102 | ||
// assert mbr_pay.receiver == Global.current_application_address | ||
frame_dig -1 | ||
gtxns Receiver | ||
global CurrentApplicationAddress | ||
== | ||
assert | ||
// smart_contracts/nft_marketplace/contract.py:103 | ||
// assert mbr_pay.amount == Global.min_balance + Global.asset_opt_in_min_balance | ||
frame_dig -1 | ||
gtxns Amount | ||
global MinBalance | ||
global AssetOptInMinBalance | ||
+ | ||
== | ||
assert | ||
// smart_contracts/nft_marketplace/contract.py:105 | ||
// self.asset_id = asset.id | ||
byte "asset_id" | ||
frame_dig -3 | ||
app_global_put | ||
// smart_contracts/nft_marketplace/contract.py:106 | ||
// self.unitary_price = unitary_price | ||
byte "unitary_price" | ||
frame_dig -2 | ||
app_global_put | ||
// smart_contracts/nft_marketplace/contract.py:107 | ||
// self.bootstrapped = True | ||
byte "bootstrapped" | ||
int 1 | ||
app_global_put | ||
// smart_contracts/nft_marketplace/contract.py:109-113 | ||
// itxn.AssetTransfer( | ||
// xfer_asset=asset, | ||
// asset_receiver=Global.current_application_address, | ||
// asset_amount=0, | ||
// ).submit() | ||
itxn_begin | ||
// smart_contracts/nft_marketplace/contract.py:111 | ||
// asset_receiver=Global.current_application_address, | ||
global CurrentApplicationAddress | ||
// smart_contracts/nft_marketplace/contract.py:112 | ||
// asset_amount=0, | ||
int 0 | ||
itxn_field AssetAmount | ||
itxn_field AssetReceiver | ||
frame_dig -3 | ||
itxn_field XferAsset | ||
// smart_contracts/nft_marketplace/contract.py:109 | ||
// itxn.AssetTransfer( | ||
int axfer | ||
itxn_field TypeEnum | ||
// smart_contracts/nft_marketplace/contract.py:109-113 | ||
// itxn.AssetTransfer( | ||
// xfer_asset=asset, | ||
// asset_receiver=Global.current_application_address, | ||
// asset_amount=0, | ||
// ).submit() | ||
itxn_submit | ||
retsub | ||
|
||
|
||
// smart_contracts.nft_marketplace.contract.NftMarketplace.buy(buyer_txn: uint64, quantity: uint64) -> void: | ||
buy: | ||
// smart_contracts/nft_marketplace/contract.py:147-152 | ||
// @arc4.abimethod | ||
// def buy( | ||
// self, | ||
// buyer_txn: gtxn.PaymentTransaction, | ||
// quantity: UInt64, | ||
// ) -> None: | ||
proto 2 0 | ||
// smart_contracts/nft_marketplace/contract.py:153 | ||
// assert self.bootstrapped == True | ||
int 0 | ||
byte "bootstrapped" | ||
app_global_get_ex | ||
assert // check bootstrapped exists | ||
int 1 | ||
== | ||
assert | ||
// smart_contracts/nft_marketplace/contract.py:154 | ||
// assert buyer_txn.sender == Txn.sender | ||
frame_dig -2 | ||
gtxns Sender | ||
txn Sender | ||
== | ||
assert | ||
// smart_contracts/nft_marketplace/contract.py:155 | ||
// assert buyer_txn.receiver == Global.current_application_address | ||
frame_dig -2 | ||
gtxns Receiver | ||
global CurrentApplicationAddress | ||
== | ||
assert | ||
// smart_contracts/nft_marketplace/contract.py:156 | ||
// assert buyer_txn.amount == self.unitary_price * quantity | ||
frame_dig -2 | ||
gtxns Amount | ||
int 0 | ||
byte "unitary_price" | ||
app_global_get_ex | ||
assert // check unitary_price exists | ||
frame_dig -1 | ||
* | ||
== | ||
assert | ||
// smart_contracts/nft_marketplace/contract.py:158-162 | ||
// itxn.AssetTransfer( | ||
// xfer_asset=self.asset_id, | ||
// asset_receiver=Txn.sender, | ||
// asset_amount=quantity, | ||
// ).submit() | ||
itxn_begin | ||
// smart_contracts/nft_marketplace/contract.py:159 | ||
// xfer_asset=self.asset_id, | ||
int 0 | ||
byte "asset_id" | ||
app_global_get_ex | ||
assert // check asset_id exists | ||
// smart_contracts/nft_marketplace/contract.py:160 | ||
// asset_receiver=Txn.sender, | ||
txn Sender | ||
frame_dig -1 | ||
itxn_field AssetAmount | ||
itxn_field AssetReceiver | ||
itxn_field XferAsset | ||
// smart_contracts/nft_marketplace/contract.py:158 | ||
// itxn.AssetTransfer( | ||
int axfer | ||
itxn_field TypeEnum | ||
// smart_contracts/nft_marketplace/contract.py:158-162 | ||
// itxn.AssetTransfer( | ||
// xfer_asset=self.asset_id, | ||
// asset_receiver=Txn.sender, | ||
// asset_amount=quantity, | ||
// ).submit() | ||
itxn_submit | ||
retsub | ||
|
||
|
||
// smart_contracts.nft_marketplace.contract.NftMarketplace.withdraw_and_delete() -> void: | ||
withdraw_and_delete: | ||
// smart_contracts/nft_marketplace/contract.py:210-211 | ||
// @arc4.abimethod(allow_actions=["DeleteApplication"]) | ||
// def withdraw_and_delete(self) -> None: | ||
proto 0 0 | ||
// smart_contracts/nft_marketplace/contract.py:212 | ||
// assert Txn.sender == Global.creator_address | ||
txn Sender | ||
global CreatorAddress | ||
== | ||
assert | ||
// smart_contracts/nft_marketplace/contract.py:214-218 | ||
// itxn.AssetTransfer( | ||
// xfer_asset=self.asset_id, | ||
// asset_receiver=Global.creator_address, | ||
// asset_close_to=Global.creator_address, | ||
// ).submit() | ||
itxn_begin | ||
// smart_contracts/nft_marketplace/contract.py:215 | ||
// xfer_asset=self.asset_id, | ||
int 0 | ||
byte "asset_id" | ||
app_global_get_ex | ||
assert // check asset_id exists | ||
// smart_contracts/nft_marketplace/contract.py:216 | ||
// asset_receiver=Global.creator_address, | ||
global CreatorAddress | ||
// smart_contracts/nft_marketplace/contract.py:217 | ||
// asset_close_to=Global.creator_address, | ||
dup | ||
itxn_field AssetCloseTo | ||
itxn_field AssetReceiver | ||
itxn_field XferAsset | ||
// smart_contracts/nft_marketplace/contract.py:214 | ||
// itxn.AssetTransfer( | ||
int axfer | ||
itxn_field TypeEnum | ||
// smart_contracts/nft_marketplace/contract.py:214-218 | ||
// itxn.AssetTransfer( | ||
// xfer_asset=self.asset_id, | ||
// asset_receiver=Global.creator_address, | ||
// asset_close_to=Global.creator_address, | ||
// ).submit() | ||
itxn_submit | ||
// smart_contracts/nft_marketplace/contract.py:220-223 | ||
// itxn.Payment( | ||
// receiver=Global.creator_address, | ||
// close_remainder_to=Global.creator_address, | ||
// ).submit() | ||
itxn_begin | ||
// smart_contracts/nft_marketplace/contract.py:221 | ||
// receiver=Global.creator_address, | ||
global CreatorAddress | ||
// smart_contracts/nft_marketplace/contract.py:222 | ||
// close_remainder_to=Global.creator_address, | ||
dup | ||
itxn_field CloseRemainderTo | ||
itxn_field Receiver | ||
// smart_contracts/nft_marketplace/contract.py:220 | ||
// itxn.Payment( | ||
int pay | ||
itxn_field TypeEnum | ||
// smart_contracts/nft_marketplace/contract.py:220-223 | ||
// itxn.Payment( | ||
// receiver=Global.creator_address, | ||
// close_remainder_to=Global.creator_address, | ||
// ).submit() | ||
itxn_submit | ||
retsub | ||
|
||
|
||
// smart_contracts.nft_marketplace.contract.NftMarketplace.__init__() -> void: | ||
__init__: | ||
// smart_contracts/nft_marketplace/contract.py:48 | ||
// def __init__(self) -> None: | ||
proto 0 0 | ||
// smart_contracts/nft_marketplace/contract.py:50 | ||
// self.asset_id = UInt64(0) | ||
byte "asset_id" | ||
int 0 | ||
app_global_put | ||
// smart_contracts/nft_marketplace/contract.py:51 | ||
// self.unitary_price = UInt64(0) | ||
byte "unitary_price" | ||
int 0 | ||
app_global_put | ||
// smart_contracts/nft_marketplace/contract.py:52 | ||
// self.bootstrapped = False | ||
byte "bootstrapped" | ||
int 0 | ||
app_global_put | ||
retsub |
Oops, something went wrong.