Skip to content

Commit 4f25210

Browse files
authored
MarketplaceV3 updates and design doc (#334)
* thirdweb stamp on marketplace-v3 contracts * ascii art * slither action * remove ascii, add author * docs * fix bid amounts * v3.4.2-0 * design doc * fix doc * Update marketplace-v3.md
1 parent aa0d58c commit 4f25210

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+913
-36
lines changed

contracts/extension/plugin/ContractMetadataLogic.sol

+4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
// SPDX-License-Identifier: Apache-2.0
2+
// thirdweb Contract
3+
24
pragma solidity ^0.8.0;
35

46
import "./ContractMetadataStorage.sol";
57
import "../../extension/interface/IContractMetadata.sol";
68

79
/**
10+
* @author thirdweb.com
11+
*
812
* @title Contract Metadata
913
* @notice Thirdweb's `ContractMetadata` is a contract extension for any base contracts. It lets you set a metadata URI
1014
* for you contract.

contracts/extension/plugin/ContractMetadataStorage.sol

+5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
// SPDX-License-Identifier: Apache-2.0
2+
// thirdweb Contract
3+
24
pragma solidity ^0.8.0;
35

6+
/**
7+
* @author thirdweb.com
8+
*/
49
library ContractMetadataStorage {
510
bytes32 public constant CONTRACT_METADATA_STORAGE_POSITION = keccak256("contract.metadata.storage");
611

contracts/extension/plugin/PermissionsEnumerableLogic.sol

+4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
// SPDX-License-Identifier: Apache-2.0
2+
// thirdweb Contract
3+
24
pragma solidity ^0.8.0;
35

46
import "./PermissionsEnumerableStorage.sol";
57
import "./PermissionsLogic.sol";
68

79
/**
10+
* @author thirdweb.com
11+
*
812
* @title PermissionsEnumerable
913
* @dev This contracts provides extending-contracts with role-based access control mechanisms.
1014
* Also provides interfaces to view all members with a given role, and total count of members.

contracts/extension/plugin/PermissionsEnumerableStorage.sol

+5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
// SPDX-License-Identifier: Apache-2.0
2+
// thirdweb Contract
3+
24
pragma solidity ^0.8.0;
35

46
import "../../extension/interface/IPermissionsEnumerable.sol";
57

8+
/**
9+
* @author thirdweb.com
10+
*/
611
library PermissionsEnumerableStorage {
712
bytes32 public constant PERMISSIONS_ENUMERABLE_STORAGE_POSITION = keccak256("permissions.enumerable.storage");
813

contracts/extension/plugin/PermissionsLogic.sol

+4
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
// SPDX-License-Identifier: Apache-2.0
2+
// thirdweb Contract
3+
24
pragma solidity ^0.8.0;
35

46
import "../../extension/interface/IPermissions.sol";
57
import "./PermissionsStorage.sol";
68
import "../../lib/TWStrings.sol";
79

810
/**
11+
* @author thirdweb.com
12+
*
913
* @title Permissions
1014
* @dev This contracts provides extending-contracts with role-based access control mechanisms
1115
*/

contracts/extension/plugin/PermissionsStorage.sol

+5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
// SPDX-License-Identifier: Apache-2.0
2+
// thirdweb Contract
3+
24
pragma solidity ^0.8.0;
35

6+
/**
7+
* @author thirdweb.com
8+
*/
49
library PermissionsStorage {
510
bytes32 public constant PERMISSIONS_STORAGE_POSITION = keccak256("permissions.storage");
611

contracts/extension/plugin/PlatformFeeLogic.sol

+4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
// SPDX-License-Identifier: Apache-2.0
2+
// thirdweb Contract
3+
24
pragma solidity ^0.8.0;
35

46
import "./PlatformFeeStorage.sol";
57
import "../../extension/interface/IPlatformFee.sol";
68

79
/**
10+
* @author thirdweb.com
11+
*
812
* @title Platform Fee
913
* @notice Thirdweb's `PlatformFee` is a contract extension to be used with any base contract. It exposes functions for setting and reading
1014
* the recipient of platform fee and the platform fee basis points, and lets the inheriting contract perform conditional logic

contracts/extension/plugin/PlatformFeeStorage.sol

+5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
// SPDX-License-Identifier: Apache-2.0
2+
// thirdweb Contract
3+
24
pragma solidity ^0.8.0;
35

6+
/**
7+
* @author thirdweb.com
8+
*/
49
library PlatformFeeStorage {
510
bytes32 public constant PLATFORM_FEE_STORAGE_POSITION = keccak256("platform.fee.storage");
611

contracts/extension/plugin/PluginMap.sol

+5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
// SPDX-License-Identifier: Apache-2.0
2+
// thirdweb Contract
3+
24
pragma solidity ^0.8.0;
35

46
import "../interface/plugin/IPluginMap.sol";
57
import "../../openzeppelin-presets/utils/EnumerableSet.sol";
68

9+
/**
10+
* @author thirdweb.com
11+
*/
712
contract PluginMap is IPluginMap {
813
using EnumerableSet for EnumerableSet.Bytes32Set;
914

contracts/extension/plugin/Router.sol

+5
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
// SPDX-License-Identifier: Apache-2.0
2+
// thirdweb Contract
3+
24
pragma solidity ^0.8.0;
35

46
import "../interface/plugin/IRouter.sol";
57
import "../../extension/Multicall.sol";
68
import "../../eip/ERC165.sol";
79
import "../../openzeppelin-presets/utils/EnumerableSet.sol";
810

11+
/**
12+
* @author thirdweb.com
13+
*/
914
library RouterStorage {
1015
bytes32 public constant ROUTER_STORAGE_POSITION = keccak256("router.storage");
1116

contracts/extension/plugin/RouterImmutable.sol

+5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
// SPDX-License-Identifier: Apache-2.0
2+
// thirdweb Contract
3+
24
pragma solidity ^0.8.0;
35

46
import "./Router.sol";
57

8+
/**
9+
* @author thirdweb.com
10+
*/
611
contract RouterImmutable is Router {
712
/*///////////////////////////////////////////////////////////////
813
Constructor + initializer logic

contracts/marketplace/IMarketplace.sol

+4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
// SPDX-License-Identifier: Apache-2.0
2+
// thirdweb Contract
3+
24
pragma solidity ^0.8.11;
35

46
/**
7+
* @author thirdweb.com
8+
*
59
* The `DirectListings` extension smart contract lets you buy and sell NFTs (ERC-721 or ERC-1155) for a fixed price.
610
*/
711
interface IDirectListings {

contracts/marketplace/direct-listings/DirectListingsLogic.sol

+5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
// SPDX-License-Identifier: Apache-2.0
2+
// thirdweb Contract
3+
24
pragma solidity ^0.8.11;
35

46
import "./DirectListingsStorage.sol";
@@ -17,6 +19,9 @@ import "../../extension/plugin/ReentrancyGuardLogic.sol";
1719
import "../../extension/plugin/PermissionsEnumerableLogic.sol";
1820
import { CurrencyTransferLib } from "../../lib/CurrencyTransferLib.sol";
1921

22+
/**
23+
* @author thirdweb.com
24+
*/
2025
contract DirectListingsLogic is IDirectListings, ReentrancyGuardLogic, ERC2771ContextConsumer {
2126
/*///////////////////////////////////////////////////////////////
2227
Constants / Immutables

contracts/marketplace/direct-listings/DirectListingsStorage.sol

+5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
// SPDX-License-Identifier: Apache-2.0
2+
// thirdweb Contract
3+
24
pragma solidity ^0.8.11;
35

46
import { IDirectListings } from "../IMarketplace.sol";
57

8+
/**
9+
* @author thirdweb.com
10+
*/
611
library DirectListingsStorage {
712
bytes32 public constant DIRECT_LISTINGS_STORAGE_POSITION = keccak256("direct.listings.storage");
813

contracts/marketplace/english-auctions/EnglishAuctionsLogic.sol

+10-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
// SPDX-License-Identifier: Apache-2.0
2+
// thirdweb Contract
3+
24
pragma solidity ^0.8.11;
35

46
import "./EnglishAuctionsStorage.sol";
@@ -21,6 +23,9 @@ import "../../extension/plugin/ReentrancyGuardLogic.sol";
2123
import "../../extension/plugin/PermissionsEnumerableLogic.sol";
2224
import { CurrencyTransferLib } from "../../lib/CurrencyTransferLib.sol";
2325

26+
/**
27+
* @author thirdweb.com
28+
*/
2429
contract EnglishAuctionsLogic is IEnglishAuctions, ReentrancyGuardLogic, ERC2771ContextConsumer {
2530
/*///////////////////////////////////////////////////////////////
2631
Constants / Immutables
@@ -129,6 +134,7 @@ contract EnglishAuctionsLogic is IEnglishAuctions, ReentrancyGuardLogic, ERC2771
129134
_targetAuction.endTimestamp > block.timestamp && _targetAuction.startTimestamp <= block.timestamp,
130135
"Marketplace: inactive auction."
131136
);
137+
require(_bidAmount != 0, "Marketplace: Bidding with zero amount.");
132138

133139
Bid memory newBid = Bid({ auctionId: _auctionId, bidder: _msgSender(), bidAmount: _bidAmount });
134140

@@ -325,7 +331,10 @@ contract EnglishAuctionsLogic is IEnglishAuctions, ReentrancyGuardLogic, ERC2771
325331
_params.startTimestamp + 60 minutes >= block.timestamp && _params.startTimestamp < _params.endTimestamp,
326332
"Marketplace: invalid timestamps."
327333
);
328-
require(_params.buyoutBidAmount >= _params.minimumBidAmount, "Marketplace: invalid bid amounts.");
334+
require(
335+
_params.buyoutBidAmount == 0 || _params.buyoutBidAmount >= _params.minimumBidAmount,
336+
"Marketplace: invalid bid amounts."
337+
);
329338
}
330339

331340
/// @dev Processes an incoming bid in an auction.

contracts/marketplace/english-auctions/EnglishAuctionsStorage.sol

+5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
// SPDX-License-Identifier: Apache-2.0
2+
// thirdweb Contract
3+
24
pragma solidity ^0.8.11;
35

46
import { IEnglishAuctions } from "../IMarketplace.sol";
57

8+
/**
9+
* @author thirdweb.com
10+
*/
611
library EnglishAuctionsStorage {
712
bytes32 public constant ENGLISH_AUCTIONS_STORAGE_POSITION = keccak256("english.auctions.storage");
813

contracts/marketplace/entrypoint/InitStorage.sol

+5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
// SPDX-License-Identifier: Apache-2.0
2+
// thirdweb Contract
3+
24
pragma solidity ^0.8.11;
35

6+
/**
7+
* @author thirdweb.com
8+
*/
49
library InitStorage {
510
/// @dev The location of the storage of the entrypoint contract's data.
611
bytes32 constant INIT_STORAGE_POSITION = keccak256("init.storage");

contracts/marketplace/entrypoint/MarketplaceV3.sol

+3-14
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
// SPDX-License-Identifier: Apache-2.0
2+
// thirdweb Contract
3+
24
pragma solidity ^0.8.0;
35

46
// ====== External imports ======
@@ -16,21 +18,8 @@ import "../../extension/plugin/ReentrancyGuardLogic.sol";
1618
import "../../extension/plugin/ERC2771ContextUpgradeableLogic.sol";
1719

1820
/**
19-
*
20-
* "Inherited by entrypoint" extensions.
21-
* - ContractMetadata
22-
* - PlatformFee
23-
* - PermissionsEnumerable
24-
* - ReentrancyGuard
25-
* - ERC2771Context
26-
* - Multicall
27-
*
28-
* "NOT inherited by entrypoint" extensions.
29-
* - DirectListings
30-
* - EnglishAuctions
31-
* - Offers
21+
* @author thirdweb.com
3222
*/
33-
3423
contract MarketplaceV3 is
3524
ContractMetadataLogic,
3625
PlatformFeeLogic,

0 commit comments

Comments
 (0)