Skip to content

Commit

Permalink
add tests for marketplace operator fee
Browse files Browse the repository at this point in the history
  • Loading branch information
olgaklimenko committed Sep 24, 2021
1 parent 639ccde commit 700be3f
Show file tree
Hide file tree
Showing 9 changed files with 163 additions and 98 deletions.
56 changes: 29 additions & 27 deletions MetaLamp/nft-marketplace/generate-purs/MarketplaceTypes.hs
Expand Up @@ -11,33 +11,35 @@

module MarketplaceTypes where

import Control.Monad.Reader (MonadReader)
import Data.Proxy (Proxy (Proxy))
import qualified Ext.Plutus.Contracts.Auction as Auction
import Language.PureScript.Bridge (BridgePart,
Language (Haskell),
PSType, SumType,
TypeInfo (TypeInfo),
buildBridge,
equal,
genericShow,
haskType,
mkSumType, order,
psTypeParameters,
typeModule,
typeName,
writePSTypesWith,
(^==))
import Language.PureScript.Bridge.Builder (BridgeData)
import Language.PureScript.Bridge.TypeParameters (A, E)
import Plutus.Abstract.ContractResponse (ContractResponse)
import Plutus.Contract.StateMachine.ThreadToken (ThreadToken)
import qualified Plutus.Contracts.NftMarketplace.Endpoints as Marketplace
import qualified Plutus.Contracts.NftMarketplace.OnChain.Core as Marketplace
import qualified Plutus.Contracts.Services.Sale as Sale
import Plutus.PAB.Simulation (MarketplaceContracts (..))
import Plutus.Contracts.NftMarketplace.OnChain.Core.Marketplace as Marketplace
import Plutus.V1.Ledger.Time (DiffMilliSeconds)
import Control.Monad.Reader (MonadReader)
import Data.Proxy (Proxy (Proxy))
import qualified Ext.Plutus.Contracts.Auction as Auction
import Language.PureScript.Bridge (BridgePart,
Language (Haskell),
PSType,
SumType,
TypeInfo (TypeInfo),
buildBridge,
equal,
genericShow,
haskType,
mkSumType,
order,
psTypeParameters,
typeModule,
typeName,
writePSTypesWith,
(^==))
import Language.PureScript.Bridge.Builder (BridgeData)
import Language.PureScript.Bridge.TypeParameters (A, E)
import Plutus.Abstract.ContractResponse (ContractResponse)
import Plutus.Contract.StateMachine.ThreadToken (ThreadToken)
import qualified Plutus.Contracts.NftMarketplace.Endpoints as Marketplace
import qualified Plutus.Contracts.NftMarketplace.OnChain.Core as Marketplace
import Plutus.Contracts.NftMarketplace.OnChain.Core.Marketplace as Marketplace
import qualified Plutus.Contracts.Services.Sale as Sale
import Plutus.PAB.Simulation (MarketplaceContracts (..))
import Plutus.V1.Ledger.Time (DiffMilliSeconds)

ratioBridge :: BridgePart
ratioBridge = do
Expand Down
Expand Up @@ -15,43 +15,43 @@

module Plutus.Contracts.NftMarketplace.OffChain.User where

import Control.Lens (_2,
_Left,
_Right,
(^.),
(^?))
import qualified Control.Lens as Lens
import Control.Monad hiding
(fmap)
import qualified Data.Aeson as J
import Data.Proxy (Proxy (..))
import Data.Text (Text)
import qualified Data.Text as T
import qualified Ext.Plutus.Contracts.Auction as Auction
import Ext.Plutus.Ledger.Value (utxoValue)
import qualified GHC.Generics as Haskell
import Control.Lens (_2,
_Left,
_Right,
(^.),
(^?))
import qualified Control.Lens as Lens
import Control.Monad hiding
(fmap)
import qualified Data.Aeson as J
import Data.Proxy (Proxy (..))
import Data.Text (Text)
import qualified Data.Text as T
import qualified Ext.Plutus.Contracts.Auction as Auction
import Ext.Plutus.Ledger.Value (utxoValue)
import qualified GHC.Generics as Haskell
import Ledger
import qualified Ledger.Typed.Scripts as Scripts
import qualified Ledger.Typed.Scripts as Scripts
import Ledger.Typed.Tx
import qualified Ledger.Value as V
import qualified Ledger.Value as V
import Plutus.Abstract.ContractResponse
import Plutus.Contract
import Plutus.Contract.StateMachine
import Plutus.Contracts.Currency as Currency
import Plutus.Contracts.Currency as Currency
import Plutus.Contracts.NftMarketplace.OffChain.ID
import Plutus.Contracts.NftMarketplace.OffChain.Info
import Plutus.Contracts.NftMarketplace.OffChain.Serialization (deserializeByteString)
import qualified Plutus.Contracts.NftMarketplace.OnChain.Core as Core
import qualified Plutus.Contracts.Services.Sale as Sale
import qualified Plutus.Contracts.NftMarketplace.OnChain.Core.Marketplace as Marketplace
import Plutus.Contracts.NftMarketplace.OffChain.Serialization (deserializeByteString)
import qualified Plutus.Contracts.NftMarketplace.OnChain.Core as Core
import qualified Plutus.Contracts.NftMarketplace.OnChain.Core.Marketplace as Marketplace
import qualified Plutus.Contracts.Services.Sale as Sale
import qualified PlutusTx
import qualified PlutusTx.AssocMap as AssocMap
import PlutusTx.Prelude hiding
(Semigroup (..))
import Prelude (Semigroup (..))
import qualified Prelude as Haskell
import qualified PlutusTx.AssocMap as AssocMap
import PlutusTx.Prelude hiding
(Semigroup (..))
import Prelude (Semigroup (..))
import qualified Prelude as Haskell
import qualified Schema
import Text.Printf (printf)
import Text.Printf (printf)

getOwnPubKey :: Contract w s Text PubKeyHash
getOwnPubKey = pubKeyHash <$> ownPubKey
Expand Down
Expand Up @@ -15,9 +15,9 @@ import Ledger.Value
import Plutus.Contract
import Plutus.Contract.StateMachine
import Plutus.Contracts.NftMarketplace.OnChain.Core.ID as Export
import Plutus.Contracts.NftMarketplace.OnChain.Core.Marketplace as Export
import Plutus.Contracts.NftMarketplace.OnChain.Core.NFT as Export
import Plutus.Contracts.NftMarketplace.OnChain.Core.StateMachine as Export
import Plutus.Contracts.NftMarketplace.OnChain.Core.Marketplace as Export
import qualified PlutusTx
import qualified PlutusTx.AssocMap as AssocMap
import PlutusTx.Prelude hiding
Expand Down
Expand Up @@ -12,30 +12,32 @@

module Plutus.Contracts.NftMarketplace.OnChain.Core.StateMachine where

import Control.Lens ((&), (.~),
(?~), (^.))
import qualified Control.Lens as Lens
import qualified Data.Aeson as J
import qualified Data.Text as T
import qualified Ext.Plutus.Contracts.Auction as Auction
import qualified GHC.Generics as Haskell
import Control.Lens ((&),
(.~),
(?~),
(^.))
import qualified Control.Lens as Lens
import qualified Data.Aeson as J
import qualified Data.Text as T
import qualified Ext.Plutus.Contracts.Auction as Auction
import qualified GHC.Generics as Haskell
import Ledger
import qualified Ledger.Constraints as Constraints
import qualified Ledger.Typed.Scripts as Scripts
import qualified Ledger.Value as V
import qualified Ledger.Constraints as Constraints
import qualified Ledger.Typed.Scripts as Scripts
import qualified Ledger.Value as V
import Plutus.Contract
import Plutus.Contract.StateMachine
import Plutus.Contracts.NftMarketplace.OnChain.Core.ID
import Plutus.Contracts.NftMarketplace.OnChain.Core.NFT
import qualified Plutus.Contracts.Services.Sale as Sale
import Plutus.Contracts.NftMarketplace.OnChain.Core.Marketplace
import Plutus.Types.Percentage (Percentage)
import Plutus.Contracts.NftMarketplace.OnChain.Core.NFT
import qualified Plutus.Contracts.Services.Sale as Sale
import Plutus.Types.Percentage (Percentage)
import qualified PlutusTx
import qualified PlutusTx.AssocMap as AssocMap
import PlutusTx.Prelude hiding
(Semigroup (..))
import Prelude (Semigroup (..))
import qualified Prelude as Haskell
import qualified PlutusTx.AssocMap as AssocMap
import PlutusTx.Prelude hiding
(Semigroup (..))
import Prelude (Semigroup (..))
import qualified Prelude as Haskell

data MarketplaceRedeemer
= CreateNftRedeemer IpfsCidHash NftInfo
Expand Down
Expand Up @@ -13,33 +13,34 @@

module Plutus.Contracts.Services.Sale.Endpoints where

import Control.Monad hiding (fmap)
import qualified Data.Aeson as J
import Data.Proxy (Proxy (..))
import Data.Text (Text)
import qualified Data.Text as T
import qualified GHC.Generics as Haskell
import Control.Monad hiding
(fmap)
import qualified Data.Aeson as J
import Data.Proxy (Proxy (..))
import Data.Text (Text)
import qualified Data.Text as T
import qualified GHC.Generics as Haskell
import Ledger
import qualified Ledger.Typed.Scripts as Scripts
import qualified Ledger.Typed.Scripts as Scripts
import Ledger.Value
import Plutus.Abstract.ContractResponse (ContractResponse,
withContractResponse)
import Plutus.Abstract.ContractResponse (ContractResponse,
withContractResponse)
import Plutus.Contract
import Plutus.Contract.StateMachine
import Plutus.Contracts.Currency as Currency
import qualified Plutus.Contracts.Services.Sale.Core as Core
import qualified Plutus.Contracts.Services.Sale.StateMachine as Core
import qualified Plutus.Contracts.NftMarketplace.OnChain.Core.Marketplace as Marketplace
import qualified Plutus.Types.Percentage as Percentage
import Plutus.Contracts.Currency as Currency
import qualified Plutus.Contracts.NftMarketplace.OnChain.Core.Marketplace as Marketplace
import qualified Plutus.Contracts.Services.Sale.Core as Core
import qualified Plutus.Contracts.Services.Sale.StateMachine as Core
import qualified Plutus.Types.Percentage as Percentage

import qualified PlutusTx
import qualified PlutusTx.AssocMap as AssocMap
import PlutusTx.Prelude hiding
(Semigroup (..))
import Prelude (Semigroup (..))
import qualified Prelude as Haskell
import qualified PlutusTx.AssocMap as AssocMap
import PlutusTx.Prelude hiding
(Semigroup (..))
import Prelude (Semigroup (..))
import qualified Prelude as Haskell
import qualified Schema
import Text.Printf (printf)
import Text.Printf (printf)

data OpenSaleParams =
OpenSaleParams {
Expand Down
24 changes: 24 additions & 0 deletions MetaLamp/nft-marketplace/test/Marketplace/Spec/Auction.hs
Expand Up @@ -73,6 +73,11 @@ tests =
Fixtures.options
"Should close auction and pay locked NFT to the highest bidder"
(buyOnAuctionValueCheck .&&. completeAuctionDatumsCheck)
buyOnAuctionTrace,
checkPredicateOptions
Fixtures.options
"Should close auction and pay pay marketplace operator a saleFee"
marketplaceOperatorFeeCheck
buyOnAuctionTrace
],
testGroup
Expand Down Expand Up @@ -102,6 +107,11 @@ tests =
Fixtures.options
"Should close auction and pay locked bundle value to the highest bidder"
(buyOnAuctionValueCheckB .&&. completeAuctionDatumsCheckB)
buyOnAuctionTraceB,
checkPredicateOptions
Fixtures.options
"Should close bundle auction and pay marketplace operator a saleFee"
marketplaceOperatorFeeCheckB
buyOnAuctionTraceB
]]

Expand Down Expand Up @@ -354,3 +364,17 @@ buyOnAuctionValueCheckB =
where
hasCatToken v = (v ^. _2 & V.unTokenName) == Fixtures.catTokenIpfsCidBs
hasPhotoToken v = (v ^. _2 & V.unTokenName) == Fixtures.photoTokenIpfsCidBs

marketplaceOperatorFeeCheck :: TracePredicate
marketplaceOperatorFeeCheck =
walletFundsChange Fixtures.ownerWallet $ lovelaceValueOf 725000
-- 25000000 * 2.5 /100 = 625000 - fee by complete auction
-- 100000 - fee by minting token

marketplaceOperatorFeeCheckB :: TracePredicate
marketplaceOperatorFeeCheckB =
walletFundsChange Fixtures.ownerWallet $ lovelaceValueOf 1175000
-- 35000000 * 2.5 /100 = 875000 - fee by complete auction
-- 100000 * 2 = 200000 - fee by minting 2 tokens
-- 100000 - fee by bundling

0 comments on commit 700be3f

Please sign in to comment.