@artblocks/contracts 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/.env.example +8 -1
  2. package/README.md +42 -157
  3. package/artifacts/contracts/AdminACLV1.sol/AdminACLV1.json +2 -2
  4. package/artifacts/contracts/DependencyRegistryV0.sol/DependencyRegistryV0.json +2 -2
  5. package/artifacts/contracts/GenArt721CoreV3.sol/GenArt721CoreV3.json +2 -2
  6. package/artifacts/contracts/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +2 -2
  7. package/artifacts/contracts/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +2229 -0
  8. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol/MinterDAExpV2.json +2 -2
  9. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol/MinterDAExpV3.json +2 -2
  10. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol/MinterDAExpSettlementV0.json +2 -2
  11. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol/MinterDAExpSettlementV1.json +2 -2
  12. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol/MinterDALinV2.json +2 -2
  13. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol/MinterDALinV3.json +2 -2
  14. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol/MinterHolderV1.json +2 -2
  15. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol/MinterHolderV2.json +2 -2
  16. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol/MinterHolderV3.json +2 -2
  17. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol/MinterMerkleV1.json +2 -2
  18. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol/MinterMerkleV2.json +2 -2
  19. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol/MinterMerkleV3.json +2 -2
  20. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol/MinterMerkleV4.json +2 -2
  21. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol/MinterSetPriceV2.json +2 -2
  22. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol/MinterSetPriceV3.json +2 -2
  23. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol/MinterSetPriceERC20V2.json +2 -2
  24. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol/MinterSetPriceERC20V3.json +2 -2
  25. package/artifacts/contracts/explorations/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +2 -2
  26. package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterSEAV0.sol/IFilteredMinterSEAV0.json +1032 -0
  27. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +149 -0
  28. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +149 -0
  29. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +130 -0
  30. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +1066 -0
  31. package/artifacts/contracts/interfaces/0.8.x/IWETH.sol/IWETH.json +55 -0
  32. package/artifacts/contracts/libs/integration-refs/weth9/weth9.sol/WETH9_.json +295 -0
  33. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
  34. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +2 -2
  35. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV4.sol/MinterDAExpV4.json +2 -2
  36. package/artifacts/contracts/minter-suite/Minters/MinterDALinV4.sol/MinterDALinV4.json +2 -2
  37. package/artifacts/contracts/minter-suite/Minters/MinterHolderV4.sol/MinterHolderV4.json +2 -2
  38. package/artifacts/contracts/minter-suite/Minters/MinterMerkleV5.sol/MinterMerkleV5.json +2 -2
  39. package/artifacts/contracts/minter-suite/Minters/MinterPolyptychV0.sol/IGenArt721CoreContractV3WithRandomizer.json +130 -0
  40. package/artifacts/contracts/minter-suite/Minters/MinterPolyptychV0.sol/MinterPolyptychV0.json +2 -2
  41. package/artifacts/contracts/minter-suite/Minters/MinterSEAV0.sol/MinterSEAV0.json +1310 -0
  42. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +2 -2
  43. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV4.sol/MinterSetPriceV4.json +2 -2
  44. package/artifacts/contracts/mock/DeadReceiverBidderMock.sol/DeadReceiverBidderMock.json +33 -0
  45. package/artifacts/contracts/mock/GasLimitReceiverBidderMock.sol/GasLimitReceiverBidderMock.json +46 -0
  46. package/artifacts/contracts/mock/GasLimitReceiverMock.sol/GasLimitReceiverMock.json +28 -0
  47. package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +2 -2
  48. package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +2 -2
  49. package/artifacts/contracts/mock/ReentrancySEAMock.sol/ReentrancySEAAutoBidderMock.json +51 -0
  50. package/artifacts/contracts/{BasicRandomizer.sol → randomizer/BasicRandomizer.sol}/BasicRandomizer.json +3 -3
  51. package/artifacts/contracts/randomizer/BasicRandomizerBase_v0_0_0.sol/RandomizerBase.json +10 -0
  52. package/artifacts/contracts/randomizer/PolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +229 -0
  53. package/artifacts/contracts/randomizer/RandomizerV2.sol/BasicRandomizerV2.json +102 -0
  54. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride.sol/GenArt721RoyaltyOverride.json +2 -2
  55. package/contracts/DependencyRegistryV0.sol +74 -113
  56. package/contracts/GenArt721CoreV3.sol +124 -171
  57. package/contracts/GenArt721CoreV3_Engine.sol +136 -198
  58. package/contracts/GenArt721CoreV3_Engine_Flex.sol +2274 -0
  59. package/contracts/explorations/GenArt721CoreV3_Explorations.sol +147 -176
  60. package/contracts/interfaces/0.8.x/IFilteredMinterSEAV0.sol +145 -0
  61. package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Base.sol +39 -0
  62. package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine.sol +0 -3
  63. package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol +132 -0
  64. package/contracts/interfaces/0.8.x/IWETH.sol +11 -0
  65. package/contracts/libs/integration-refs/weth9/weth9.sol +763 -0
  66. package/contracts/minter-suite/MinterFilter/MinterFilterV1.sol +35 -47
  67. package/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol +26 -34
  68. package/contracts/minter-suite/Minters/MinterDAExpV4.sol +16 -21
  69. package/contracts/minter-suite/Minters/MinterDALinV4.sol +15 -17
  70. package/contracts/minter-suite/Minters/MinterHolderV4.sol +19 -19
  71. package/contracts/minter-suite/Minters/MinterMerkleV5.sol +13 -15
  72. package/contracts/minter-suite/Minters/MinterPolyptychV0.sol +23 -23
  73. package/contracts/minter-suite/Minters/MinterSEAV0.sol +1224 -0
  74. package/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol +11 -11
  75. package/contracts/minter-suite/Minters/MinterSetPriceV4.sol +9 -10
  76. package/contracts/mock/DeadReceiverBidderMock.sol +23 -0
  77. package/contracts/mock/GasLimitReceiverBidderMock.sol +23 -0
  78. package/contracts/mock/GasLimitReceiverMock.sol +19 -0
  79. package/contracts/mock/RandomizerV2_NoAssignMock.sol +2 -11
  80. package/contracts/mock/ReentrancySEAMock.sol +36 -0
  81. package/contracts/{BasicRandomizer.sol → randomizer/BasicRandomizer.sol} +1 -1
  82. package/contracts/randomizer/BasicRandomizerBase_v0_0_0.sol +23 -0
  83. package/contracts/{BasicPolyptychRandomizerV0.sol → randomizer/PolyptychRandomizerV0.sol} +19 -28
  84. package/contracts/{BasicRandomizerV2.sol → randomizer/RandomizerV2.sol} +5 -13
  85. package/package.json +27 -14
  86. package/artifacts/contracts/BasicPolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +0 -229
  87. package/artifacts/contracts/BasicRandomizerV2.sol/BasicRandomizerV2.json +0 -102
@@ -0,0 +1,145 @@
1
+ // SPDX-License-Identifier: GPL-3.0
2
+ // Created By: Art Blocks Inc.
3
+
4
+ import "./IFilteredMinterV2.sol";
5
+
6
+ pragma solidity ^0.8.0;
7
+
8
+ /**
9
+ * @title Interface for MinterSEA, inspired by nouns.wtf.
10
+ * This interface combines the set of interfaces that add support for
11
+ * a Serial English Auction Minter.
12
+ * @author Art Blocks Inc.
13
+ */
14
+ interface IFilteredMinterSEAV0 is IFilteredMinterV2 {
15
+ /// Struct that defines a single token English auction
16
+ struct Auction {
17
+ // token number of NFT being auctioned
18
+ uint256 tokenId;
19
+ // The current highest bid amount (in wei)
20
+ uint256 currentBid;
21
+ // The address of the current highest bidder
22
+ address payable currentBidder;
23
+ // The time that the auction is scheduled to end
24
+ // max uint64 ~= 1.8e19 sec ~= 570 billion years
25
+ uint64 endTime;
26
+ // Whether or not the auction has been settled
27
+ bool settled;
28
+ // Whether or not the auction has been initialized (used to determine
29
+ // if auction is the default struct)
30
+ bool initialized;
31
+ }
32
+
33
+ /// Admin-controlled range of allowed auction durations updated
34
+ event AuctionDurationSecondsRangeUpdated(
35
+ uint32 minAuctionDurationSeconds,
36
+ uint32 maxAuctionDurationSeconds
37
+ );
38
+
39
+ /// Admin-controlled minimum bid increment percentage updated
40
+ event MinterMinBidIncrementPercentageUpdated(
41
+ uint8 minterMinBidIncrementPercentage
42
+ );
43
+
44
+ /// Admin-controlled time buffer updated
45
+ event MinterTimeBufferUpdated(uint32 minterTimeBufferSeconds);
46
+
47
+ // Admin-controlled refund gas limit updated
48
+ event MinterRefundGasLimitUpdated(uint16 refundGasLimit);
49
+
50
+ /// Artist configured future auction details
51
+ event ConfiguredFutureAuctions(
52
+ uint256 indexed projectId,
53
+ uint64 timestampStart,
54
+ uint32 auctionDurationSeconds,
55
+ uint256 basePrice
56
+ );
57
+
58
+ /// Future auction details for project `projectId` reset
59
+ event ResetAuctionDetails(uint256 indexed projectId);
60
+
61
+ /// New token auction created, token created and sent to minter
62
+ event AuctionInitialized(
63
+ uint256 indexed tokenId,
64
+ address indexed bidder,
65
+ uint256 bidAmount,
66
+ uint64 endTime
67
+ );
68
+
69
+ /// Successful bid placed on token auction
70
+ event AuctionBid(
71
+ uint256 indexed tokenId,
72
+ address indexed bidder,
73
+ uint256 bidAmount
74
+ );
75
+
76
+ /// Token auction was settled (token distributed to winner)
77
+ event AuctionSettled(
78
+ uint256 indexed tokenId,
79
+ address indexed winner,
80
+ uint256 price
81
+ );
82
+
83
+ // Next token ID for project `projectId` updated
84
+ event ProjectNextTokenUpdated(uint256 indexed projectId, uint256 tokenId);
85
+
86
+ // Next token ID for project `projectId` was ejected from the minter
87
+ // and is no longer populated
88
+ event ProjectNextTokenEjected(uint256 indexed projectId);
89
+
90
+ function configureFutureAuctions(
91
+ uint256 _projectId,
92
+ uint256 _timestampStart,
93
+ uint256 _auctionDurationSeconds,
94
+ uint256 _basePrice
95
+ ) external;
96
+
97
+ function resetAuctionDetails(uint256 _projectId) external;
98
+
99
+ // artist-only function that populates the next token ID to be auctioned
100
+ // for project `projectId`
101
+ function tryPopulateNextToken(uint256 _projectId) external;
102
+
103
+ function settleAuctionAndCreateBid(
104
+ uint256 _settleTokenId,
105
+ uint256 _bidTokenId
106
+ ) external payable;
107
+
108
+ function settleAuction(uint256 _tokenId) external;
109
+
110
+ function createBid(uint256 _tokenId) external payable;
111
+
112
+ function createBid_l34(uint256 _tokenId) external payable;
113
+
114
+ function minterConfigurationDetails()
115
+ external
116
+ view
117
+ returns (
118
+ uint32 minAuctionDurationSeconds_,
119
+ uint32 maxAuctionDurationSeconds_,
120
+ uint8 minterMinBidIncrementPercentage_,
121
+ uint32 minterTimeBufferSeconds_,
122
+ uint16 minterRefundGasLimit_
123
+ );
124
+
125
+ function projectConfigurationDetails(
126
+ uint256 _projectId
127
+ )
128
+ external
129
+ view
130
+ returns (
131
+ uint24 maxInvocations,
132
+ uint64 timestampStart,
133
+ uint32 auctionDurationSeconds,
134
+ uint256 basePrice,
135
+ bool nextTokenNumberIsPopulated,
136
+ uint24 nextTokenNumber,
137
+ Auction memory auction
138
+ );
139
+
140
+ function projectActiveAuctionDetails(
141
+ uint256 _projectId
142
+ ) external view returns (Auction memory);
143
+
144
+ function getTokenToBid(uint256 _projectId) external view returns (uint256);
145
+ }
@@ -100,6 +100,14 @@ interface IGenArt721CoreContractV3_Base is IManifold {
100
100
  uint256 _projectId
101
101
  ) external view returns (uint256);
102
102
 
103
+ function projectIdToSecondaryMarketRoyaltyPercentage(
104
+ uint256 _projectId
105
+ ) external view returns (uint256);
106
+
107
+ function projectURIInfo(
108
+ uint256 _projectId
109
+ ) external view returns (string memory projectBaseURI);
110
+
103
111
  // @dev new function in V3
104
112
  function projectStateData(
105
113
  uint256 _projectId
@@ -115,6 +123,37 @@ interface IGenArt721CoreContractV3_Base is IManifold {
115
123
  bool locked
116
124
  );
117
125
 
126
+ function projectDetails(
127
+ uint256 _projectId
128
+ )
129
+ external
130
+ view
131
+ returns (
132
+ string memory projectName,
133
+ string memory artist,
134
+ string memory description,
135
+ string memory website,
136
+ string memory license
137
+ );
138
+
139
+ function projectScriptDetails(
140
+ uint256 _projectId
141
+ )
142
+ external
143
+ view
144
+ returns (
145
+ string memory scriptTypeAndVersion,
146
+ string memory aspectRatio,
147
+ uint256 scriptCount
148
+ );
149
+
150
+ function projectScriptByIndex(
151
+ uint256 _projectId,
152
+ uint256 _index
153
+ ) external view returns (string memory);
154
+
155
+ function tokenIdToHash(uint256 _tokenId) external view returns (bytes32);
156
+
118
157
  // function to set a token's hash (must be guarded)
119
158
  function setTokenHash_8PT(uint256 _tokenId, bytes32 _hash) external;
120
159
 
@@ -70,9 +70,6 @@ interface IGenArt721CoreContractV3_Engine is IGenArt721CoreContractV3_Base {
70
70
  view
71
71
  returns (uint256);
72
72
 
73
- // function to read the hash for a given tokenId
74
- function tokenIdToHash(uint256 _tokenId) external view returns (bytes32);
75
-
76
73
  // function to read the hash-seed for a given tokenId
77
74
  function tokenIdToHashSeed(
78
75
  uint256 _tokenId
@@ -0,0 +1,132 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ pragma solidity ^0.8.0;
5
+
6
+ import "./IAdminACLV0.sol";
7
+ import "./IGenArt721CoreContractV3_Engine.sol";
8
+
9
+ /**
10
+ * @title This interface is intended to house interface items that are common
11
+ * across all GenArt721CoreContractV3 Engine Flex and derivative implementations.
12
+ * @author Art Blocks Inc.
13
+ */
14
+ interface IGenArt721CoreContractV3_Engine_Flex is
15
+ IGenArt721CoreContractV3_Engine
16
+ {
17
+ /**
18
+ * @notice When an external asset dependency is updated or added, this event is emitted.
19
+ * @param _projectId The project ID of the project that was updated.
20
+ * @param _index The index of the external asset dependency that was updated.
21
+ * @param _cid The content ID of the external asset dependency. This is an empty string
22
+ * if the dependency type is ONCHAIN.
23
+ * @param _dependencyType The type of the external asset dependency.
24
+ * @param _externalAssetDependencyCount The number of external asset dependencies.
25
+ */
26
+ event ExternalAssetDependencyUpdated(
27
+ uint256 indexed _projectId,
28
+ uint256 indexed _index,
29
+ string _cid,
30
+ ExternalAssetDependencyType _dependencyType,
31
+ uint24 _externalAssetDependencyCount
32
+ );
33
+
34
+ /**
35
+ * @notice The project id `_projectId` has had an external asset dependency removed at index `_index`.
36
+ */
37
+ event ExternalAssetDependencyRemoved(
38
+ uint256 indexed _projectId,
39
+ uint256 indexed _index
40
+ );
41
+
42
+ /**
43
+ * @notice The preferred gateway for dependency type `_dependencyType` has been updated to `_gatewayAddress`.
44
+ */
45
+ event GatewayUpdated(
46
+ ExternalAssetDependencyType indexed _dependencyType,
47
+ string _gatewayAddress
48
+ );
49
+
50
+ /**
51
+ * @notice The project id `_projectId` has had all external asset dependencies locked.
52
+ * @dev This is a one-way operation. Once locked, the external asset dependencies cannot be updated.
53
+ */
54
+ event ProjectExternalAssetDependenciesLocked(uint256 indexed _projectId);
55
+
56
+ /**
57
+ * @notice An external asset dependency type. Can be one of IPFS, ARWEAVE, or ONCHAIN.
58
+ */
59
+ enum ExternalAssetDependencyType {
60
+ IPFS,
61
+ ARWEAVE,
62
+ ONCHAIN
63
+ }
64
+
65
+ /**
66
+ * @notice An external asset dependency. This is a struct that contains the CID of the dependency,
67
+ * the type of the dependency, and the address of the bytecode for this dependency.
68
+ */
69
+ struct ExternalAssetDependency {
70
+ string cid;
71
+ ExternalAssetDependencyType dependencyType;
72
+ address bytecodeAddress;
73
+ }
74
+
75
+ /**
76
+ * @notice An external asset dependency with data. This is a convenience struct that contains the CID of the dependency,
77
+ * the type of the dependency, the address of the bytecode for this dependency, and the data retrieved from this bytecode address.
78
+ */
79
+ struct ExternalAssetDependencyWithData {
80
+ string cid;
81
+ ExternalAssetDependencyType dependencyType;
82
+ address bytecodeAddress;
83
+ string data;
84
+ }
85
+
86
+ // preferredIPFSGateway is a url string
87
+ function preferredIPFSGateway() external view returns (string memory);
88
+
89
+ // preferredArweaveGateway is a url string
90
+ function preferredArweaveGateway() external view returns (string memory);
91
+
92
+ // updates the preferred IPFS gateway
93
+ function updateIPFSGateway(string calldata _gateway) external;
94
+
95
+ // updates the preferred Arweave gateway
96
+ function updateArweaveGateway(string calldata _gateway) external;
97
+
98
+ // locks the external asset dependencies for a project
99
+ function lockProjectExternalAssetDependencies(uint256 _projectId) external;
100
+
101
+ // updates the external asset dependency for a project at a given index
102
+ function updateProjectExternalAssetDependency(
103
+ uint256 _projectId,
104
+ uint256 _index,
105
+ string memory _cidOrData,
106
+ ExternalAssetDependencyType _dependencyType
107
+ ) external;
108
+
109
+ // adds an external asset dependency for a project
110
+ function addProjectExternalAssetDependency(
111
+ uint256 _projectId,
112
+ string memory _cidOrData,
113
+ ExternalAssetDependencyType _dependencyType
114
+ ) external;
115
+
116
+ // removes an external asset dependency for a project at a given index
117
+ function removeProjectExternalAssetDependency(
118
+ uint256 _projectId,
119
+ uint256 _index
120
+ ) external;
121
+
122
+ // getter function for project external asset dependencies
123
+ function projectExternalAssetDependencyByIndex(
124
+ uint256 _projectId,
125
+ uint256 _index
126
+ ) external view returns (ExternalAssetDependencyWithData memory);
127
+
128
+ // getter function project external asset dependency count
129
+ function projectExternalAssetDependencyCount(
130
+ uint256 _projectId
131
+ ) external view returns (uint256);
132
+ }
@@ -0,0 +1,11 @@
1
+ // SPDX-License-Identifier: GPL-3.0
2
+
3
+ pragma solidity ^0.8.0;
4
+
5
+ interface IWETH {
6
+ function deposit() external payable;
7
+
8
+ function withdraw(uint256 wad) external;
9
+
10
+ function transfer(address to, uint256 value) external returns (bool);
11
+ }