Skip to content

Commit

Permalink
finished questions
Browse files Browse the repository at this point in the history
  • Loading branch information
iskysun96 committed May 31, 2024
1 parent db3a253 commit 33353e1
Show file tree
Hide file tree
Showing 15 changed files with 4,295 additions and 13 deletions.
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
Loading

0 comments on commit 33353e1

Please sign in to comment.