@artblocks/contracts 0.0.1

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 (196) hide show
  1. package/.env.example +10 -0
  2. package/LICENSE +165 -0
  3. package/README.md +286 -0
  4. package/artifacts/contracts/AdminACLV0.sol/AdminACLV0.json +164 -0
  5. package/artifacts/contracts/AdminACLV1.sol/AdminACLV1.json +248 -0
  6. package/artifacts/contracts/BasicRandomizer.sol/BasicRandomizer.json +24 -0
  7. package/artifacts/contracts/BasicRandomizerV2.sol/BasicRandomizerV2.json +102 -0
  8. package/artifacts/contracts/DependencyRegistryV0.sol/DependencyRegistryV0.json +1020 -0
  9. package/artifacts/contracts/GenArt721CoreV3.sol/GenArt721CoreV3.json +1928 -0
  10. package/artifacts/contracts/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +1942 -0
  11. package/artifacts/contracts/engine/GenArt721CoreV2_ENGINE_FLEX.sol/GenArt721CoreV2_ENGINE_FLEX.json +1708 -0
  12. package/artifacts/contracts/engine/GenArt721CoreV2_PBAB.sol/GenArt721CoreV2_PBAB.json +1410 -0
  13. package/artifacts/contracts/engine/GenArt721CoreV2_PRTNR.sol/GenArt721CoreV2_PRTNR.json +1436 -0
  14. package/artifacts/contracts/engine/GenArt721MinterBurner_PBAB.sol/GenArt721MinterBurner_PBAB.json +437 -0
  15. package/artifacts/contracts/engine/GenArt721MinterDAExp_PBAB.sol/GenArt721MinterDAExp_PBAB.json +508 -0
  16. package/artifacts/contracts/engine/GenArt721Minter_PBAB.sol/GenArt721Minter_PBAB.json +381 -0
  17. package/artifacts/contracts/engine-registry/EngineRegistryV0.sol/EngineRegistryV0.json +109 -0
  18. package/artifacts/contracts/engine-registry/future/EngineRegistryV1.sol/EngineRegistryV1.json +109 -0
  19. package/artifacts/contracts/explorations/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +1902 -0
  20. package/artifacts/contracts/interfaces/0.5.x/IBonusContract.sol/IBonusContract.json +47 -0
  21. package/artifacts/contracts/interfaces/0.5.x/IGenArt721CoreContractV1.sol/IGenArt721CoreContractV1.json +413 -0
  22. package/artifacts/contracts/interfaces/0.5.x/IGenArt721CoreV2_PBAB.sol/IGenArt721CoreV2_PBAB.json +392 -0
  23. package/artifacts/contracts/interfaces/0.5.x/IRandomizer.sol/IRandomizer.json +26 -0
  24. package/artifacts/contracts/interfaces/0.8.x/IAdminACLV0.sol/IAdminACLV0.json +122 -0
  25. package/artifacts/contracts/interfaces/0.8.x/IArtblocksRoyaltyOverride.sol/IArtblocksRoyaltyOverride.json +59 -0
  26. package/artifacts/contracts/interfaces/0.8.x/IBonusContract.sol/IBonusContract.json +43 -0
  27. package/artifacts/contracts/interfaces/0.8.x/IDelegationRegistry.sol/IDelegationRegistry.json +510 -0
  28. package/artifacts/contracts/interfaces/0.8.x/IDependencyRegistryCompatibleV0.sol/IDependencyRegistryCompatibleV0.json +53 -0
  29. package/artifacts/contracts/interfaces/0.8.x/IDependencyRegistryV0.sol/IDependencyRegistryV0.json +350 -0
  30. package/artifacts/contracts/interfaces/0.8.x/IEngineRegistryV0.sol/IEngineRegistryV0.json +85 -0
  31. package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterDAExpSettlementV0.sol/IFilteredMinterDAExpSettlementV0.json +730 -0
  32. package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterDAExpV0.sol/IFilteredMinterDAExpV0.json +311 -0
  33. package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterDAExpV1.sol/IFilteredMinterDAExpV1.json +617 -0
  34. package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterDALinV0.sol/IFilteredMinterDALinV0.json +292 -0
  35. package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterDALinV1.sol/IFilteredMinterDALinV1.json +598 -0
  36. package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterHolderV0.sol/IFilteredMinterHolderV0.json +355 -0
  37. package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterHolderV1.sol/IFilteredMinterHolderV1.json +368 -0
  38. package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterHolderV2.sol/IFilteredMinterHolderV2.json +674 -0
  39. package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterMerkleV0.sol/IFilteredMinterMerkleV0.json +551 -0
  40. package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterMerkleV1.sol/IFilteredMinterMerkleV1.json +564 -0
  41. package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterMerkleV2.sol/IFilteredMinterMerkleV2.json +601 -0
  42. package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterV0.sol/IFilteredMinterV0.json +216 -0
  43. package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterV1.sol/IFilteredMinterV1.json +485 -0
  44. package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterV2.sol/IFilteredMinterV2.json +522 -0
  45. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV1.sol/IGenArt721CoreContractV1.json +299 -0
  46. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +609 -0
  47. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +448 -0
  48. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +649 -0
  49. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreV2_PBAB.sol/IGenArt721CoreV2_PBAB.json +362 -0
  50. package/artifacts/contracts/interfaces/0.8.x/IManifold.sol/IManifold.json +35 -0
  51. package/artifacts/contracts/interfaces/0.8.x/IMinterFilterV0.sol/IMinterFilterV0.json +192 -0
  52. package/artifacts/contracts/interfaces/0.8.x/IRandomizer.sol/IRandomizer.json +24 -0
  53. package/artifacts/contracts/interfaces/0.8.x/IRandomizerV2.sol/IRandomizerV2.json +37 -0
  54. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/Address.json +10 -0
  55. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/Counters.json +10 -0
  56. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/CustomERC721Metadata.json +425 -0
  57. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/ERC165.json +38 -0
  58. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/ERC721.json +322 -0
  59. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/ERC721Enumerable.json +384 -0
  60. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/GenArt721CoreV1.json +1773 -0
  61. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/IERC165.json +32 -0
  62. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/IERC721.json +316 -0
  63. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/IERC721Enumerable.json +378 -0
  64. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/IERC721Receiver.json +47 -0
  65. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/SafeMath.json +10 -0
  66. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/Strings.json +10 -0
  67. package/artifacts/contracts/legacy/GenArt721LegacyMinter.sol/GenArt721LegacyMinter.json +338 -0
  68. package/artifacts/contracts/libs/0.5.x/CustomERC721Metadata.sol/CustomERC721Metadata.json +425 -0
  69. package/artifacts/contracts/libs/0.5.x/IERC20.sol/IERC20.json +206 -0
  70. package/artifacts/contracts/libs/0.5.x/SafeMath.sol/SafeMath.json +10 -0
  71. package/artifacts/contracts/libs/0.5.x/Strings.sol/Strings.json +10 -0
  72. package/artifacts/contracts/libs/0.8.x/BytecodeStorage.sol/BytecodeStorage.json +10 -0
  73. package/artifacts/contracts/libs/0.8.x/Bytes32Strings.sol/Bytes32Strings.json +10 -0
  74. package/artifacts/contracts/libs/0.8.x/ERC721_PackedHashSeed.sol/ERC721_PackedHashSeed.json +357 -0
  75. package/artifacts/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol/DelegationRegistry.json +529 -0
  76. package/artifacts/contracts/libs/integration-refs/gnosis-safe/GnosisSafeMock.sol/GnosisSafeMock.json +1037 -0
  77. package/artifacts/contracts/libs/integration-refs/gnosis-safe/GnosisSafeProxyFactoryMock.sol/GnosisSafeProxyFactoryMock.json +172 -0
  78. package/artifacts/contracts/libs/integration-refs/gnosis-safe/MultiSendMock.sol/MultiSendMock.json +24 -0
  79. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV0.sol/MinterFilterV0.json +342 -0
  80. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +322 -0
  81. package/artifacts/contracts/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol/MinterDAExpV2.json +550 -0
  82. package/artifacts/contracts/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol/MinterDAExpV3.json +856 -0
  83. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol/MinterDAExpSettlementV0.json +1053 -0
  84. package/artifacts/contracts/minter-suite/Minters/MinterDALin/MinterDALinV2.sol/MinterDALinV2.json +526 -0
  85. package/artifacts/contracts/minter-suite/Minters/MinterDALin/MinterDALinV3.sol/MinterDALinV3.json +832 -0
  86. package/artifacts/contracts/minter-suite/Minters/MinterHolder/MinterHolderV2.sol/MinterHolderV2.json +794 -0
  87. package/artifacts/contracts/minter-suite/Minters/MinterHolder/MinterHolderV3.sol/MinterHolderV3.json +1100 -0
  88. package/artifacts/contracts/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol/MinterMerkleV3.json +1002 -0
  89. package/artifacts/contracts/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol/MinterMerkleV4.json +1039 -0
  90. package/artifacts/contracts/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol/MinterSetPriceV2.json +365 -0
  91. package/artifacts/contracts/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol/MinterSetPriceV3.json +671 -0
  92. package/artifacts/contracts/minter-suite/Minters/MinterSetPrice/deprecated/MinterSetPriceV1.sol/MinterSetPriceV1.json +288 -0
  93. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol/MinterSetPriceERC20V2.json +436 -0
  94. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol/MinterSetPriceERC20V3.json +742 -0
  95. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20/deprecated/MinterSetPriceERC20V0.sol/MinterSetPriceERC20V0.json +461 -0
  96. package/artifacts/contracts/mock/BytecodeTextCR_DMock.sol/BytecodeTextCR_DMock.json +194 -0
  97. package/artifacts/contracts/mock/DeadReceiverMock.sol/DeadReceiverMock.json +15 -0
  98. package/artifacts/contracts/mock/ERC20Mock.sol/ERC20Mock.json +292 -0
  99. package/artifacts/contracts/mock/MockAdminACLV0.sol/MockAdminACLV0Events.json +165 -0
  100. package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +128 -0
  101. package/artifacts/contracts/mock/ReentrancyHolderMock.sol/ReentrancyHolderMock.json +118 -0
  102. package/artifacts/contracts/mock/ReentrancyMerkleMock.sol/ReentrancyMerkleMock.json +87 -0
  103. package/artifacts/contracts/mock/ReentrancyMock.sol/ReentrancyMock.json +82 -0
  104. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride.sol/GenArt721RoyaltyOverride.json +208 -0
  105. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol/GenArt721RoyaltyOverride_PBAB.json +301 -0
  106. package/contracts/AdminACLV0.sol +103 -0
  107. package/contracts/AdminACLV1.sol +193 -0
  108. package/contracts/BasicRandomizer.sol +23 -0
  109. package/contracts/BasicRandomizerV2.sol +36 -0
  110. package/contracts/DependencyRegistryV0.sol +893 -0
  111. package/contracts/GenArt721CoreV3.sol +2001 -0
  112. package/contracts/GenArt721CoreV3_Engine.sol +2061 -0
  113. package/contracts/engine/GenArt721CoreV2_ENGINE_FLEX.sol +887 -0
  114. package/contracts/engine/GenArt721CoreV2_PBAB.sol +695 -0
  115. package/contracts/engine/GenArt721CoreV2_PRTNR.sol +749 -0
  116. package/contracts/engine/GenArt721MinterBurner_PBAB.sol +467 -0
  117. package/contracts/engine/GenArt721MinterDAExp_PBAB.sol +614 -0
  118. package/contracts/engine/GenArt721Minter_PBAB.sol +420 -0
  119. package/contracts/engine-registry/EngineRegistryV0.sol +72 -0
  120. package/contracts/engine-registry/future/EngineRegistryV1.sol +86 -0
  121. package/contracts/explorations/GenArt721CoreV3_Explorations.sol +1989 -0
  122. package/contracts/interfaces/0.5.x/IBonusContract.sol +10 -0
  123. package/contracts/interfaces/0.5.x/IGenArt721CoreContractV1.sol +91 -0
  124. package/contracts/interfaces/0.5.x/IGenArt721CoreV2_PBAB.sol +92 -0
  125. package/contracts/interfaces/0.5.x/IRandomizer.sol +8 -0
  126. package/contracts/interfaces/0.8.x/IAdminACLV0.sol +51 -0
  127. package/contracts/interfaces/0.8.x/IArtblocksRoyaltyOverride.sol +34 -0
  128. package/contracts/interfaces/0.8.x/IBonusContract.sol +10 -0
  129. package/contracts/interfaces/0.8.x/IDelegationRegistry.sol +221 -0
  130. package/contracts/interfaces/0.8.x/IDependencyRegistryCompatibleV0.sol +31 -0
  131. package/contracts/interfaces/0.8.x/IDependencyRegistryV0.sol +95 -0
  132. package/contracts/interfaces/0.8.x/IEngineRegistryV0.sol +38 -0
  133. package/contracts/interfaces/0.8.x/IFilteredMinterDAExpSettlementV0.sol +70 -0
  134. package/contracts/interfaces/0.8.x/IFilteredMinterDAExpV0.sol +35 -0
  135. package/contracts/interfaces/0.8.x/IFilteredMinterDAExpV1.sol +16 -0
  136. package/contracts/interfaces/0.8.x/IFilteredMinterDALinV0.sol +32 -0
  137. package/contracts/interfaces/0.8.x/IFilteredMinterDALinV1.sol +16 -0
  138. package/contracts/interfaces/0.8.x/IFilteredMinterHolderV0.sol +68 -0
  139. package/contracts/interfaces/0.8.x/IFilteredMinterHolderV1.sol +19 -0
  140. package/contracts/interfaces/0.8.x/IFilteredMinterHolderV2.sol +19 -0
  141. package/contracts/interfaces/0.8.x/IFilteredMinterMerkleV0.sol +37 -0
  142. package/contracts/interfaces/0.8.x/IFilteredMinterMerkleV1.sol +19 -0
  143. package/contracts/interfaces/0.8.x/IFilteredMinterMerkleV2.sol +19 -0
  144. package/contracts/interfaces/0.8.x/IFilteredMinterV0.sol +74 -0
  145. package/contracts/interfaces/0.8.x/IFilteredMinterV1.sol +127 -0
  146. package/contracts/interfaces/0.8.x/IFilteredMinterV2.sol +30 -0
  147. package/contracts/interfaces/0.8.x/IGenArt721CoreContractV1.sol +73 -0
  148. package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3.sol +79 -0
  149. package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Base.sol +127 -0
  150. package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine.sol +80 -0
  151. package/contracts/interfaces/0.8.x/IGenArt721CoreV2_PBAB.sol +91 -0
  152. package/contracts/interfaces/0.8.x/IManifold.sol +24 -0
  153. package/contracts/interfaces/0.8.x/IMinterFilterV0.sol +47 -0
  154. package/contracts/interfaces/0.8.x/IRandomizer.sol +8 -0
  155. package/contracts/interfaces/0.8.x/IRandomizerV2.sol +15 -0
  156. package/contracts/legacy/GenArt721CoreV1.sol +1593 -0
  157. package/contracts/legacy/GenArt721LegacyMinter.sol +275 -0
  158. package/contracts/libs/0.5.x/CustomERC721Metadata.sol +52 -0
  159. package/contracts/libs/0.5.x/IERC20.sol +96 -0
  160. package/contracts/libs/0.5.x/SafeMath.sol +98 -0
  161. package/contracts/libs/0.5.x/Strings.sol +92 -0
  162. package/contracts/libs/0.8.x/BytecodeStorage.sol +314 -0
  163. package/contracts/libs/0.8.x/Bytes32Strings.sol +66 -0
  164. package/contracts/libs/0.8.x/ERC721_PackedHashSeed.sol +514 -0
  165. package/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol +663 -0
  166. package/contracts/libs/integration-refs/gnosis-safe/GnosisSafeMock.sol +6 -0
  167. package/contracts/libs/integration-refs/gnosis-safe/GnosisSafeProxyFactoryMock.sol +6 -0
  168. package/contracts/libs/integration-refs/gnosis-safe/MultiSendMock.sol +6 -0
  169. package/contracts/minter-suite/MinterFilter/MinterFilterV0.sol +291 -0
  170. package/contracts/minter-suite/MinterFilter/MinterFilterV1.sol +320 -0
  171. package/contracts/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol +571 -0
  172. package/contracts/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol +622 -0
  173. package/contracts/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol +1066 -0
  174. package/contracts/minter-suite/Minters/MinterDALin/MinterDALinV2.sol +527 -0
  175. package/contracts/minter-suite/Minters/MinterDALin/MinterDALinV3.sol +576 -0
  176. package/contracts/minter-suite/Minters/MinterHolder/MinterHolderV2.sol +749 -0
  177. package/contracts/minter-suite/Minters/MinterHolder/MinterHolderV3.sol +798 -0
  178. package/contracts/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol +682 -0
  179. package/contracts/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol +733 -0
  180. package/contracts/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol +350 -0
  181. package/contracts/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol +401 -0
  182. package/contracts/minter-suite/Minters/MinterSetPrice/deprecated/MinterSetPriceV1.sol +274 -0
  183. package/contracts/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol +491 -0
  184. package/contracts/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol +542 -0
  185. package/contracts/minter-suite/Minters/MinterSetPriceERC20/deprecated/MinterSetPriceERC20V0.sol +470 -0
  186. package/contracts/mock/BytecodeTextCR_DMock.sol +184 -0
  187. package/contracts/mock/DeadReceiverMock.sol +13 -0
  188. package/contracts/mock/ERC20Mock.sol +11 -0
  189. package/contracts/mock/MockAdminACLV0.sol +65 -0
  190. package/contracts/mock/RandomizerV2_NoAssignMock.sol +43 -0
  191. package/contracts/mock/ReentrancyHolderMock.sol +50 -0
  192. package/contracts/mock/ReentrancyMerkleMock.sol +64 -0
  193. package/contracts/mock/ReentrancyMock.sol +44 -0
  194. package/contracts/royalty-registry/GenArt721RoyaltyOverride.sol +168 -0
  195. package/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol +221 -0
  196. package/package.json +83 -0
@@ -0,0 +1,275 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Creatd By: Art Blocks Inc.
3
+
4
+ import "../libs/0.5.x/SafeMath.sol";
5
+ import "../libs/0.5.x/Strings.sol";
6
+ import "../libs/0.5.x/IERC20.sol";
7
+
8
+ import "../interfaces/0.5.x/IGenArt721CoreContractV1.sol";
9
+ import "../interfaces/0.5.x/IBonusContract.sol";
10
+
11
+ pragma solidity ^0.5.0;
12
+
13
+ contract GenArt721LegacyMinter {
14
+ using SafeMath for uint256;
15
+
16
+ IGenArt721CoreContractV1 public artblocksContract;
17
+
18
+ uint256 constant ONE_MILLION = 1_000_000;
19
+
20
+ mapping(uint256 => bool) public projectIdToBonus;
21
+ mapping(uint256 => address) public projectIdToBonusContractAddress;
22
+ mapping(uint256 => bool) public contractFilterProject;
23
+ mapping(address => mapping(uint256 => uint256)) public projectMintCounter;
24
+ mapping(uint256 => uint256) public projectMintLimit;
25
+ mapping(uint256 => bool) public projectMaxHasBeenInvoked;
26
+ mapping(uint256 => uint256) public projectMaxInvocations;
27
+
28
+ constructor(address _genArt721Address) public {
29
+ artblocksContract = IGenArt721CoreContractV1(_genArt721Address);
30
+ }
31
+
32
+ function getYourBalanceOfProjectERC20(
33
+ uint256 _projectId
34
+ ) public view returns (uint256) {
35
+ uint256 balance = IERC20(
36
+ artblocksContract.projectIdToCurrencyAddress(_projectId)
37
+ ).balanceOf(msg.sender);
38
+ return balance;
39
+ }
40
+
41
+ function checkYourAllowanceOfProjectERC20(
42
+ uint256 _projectId
43
+ ) public view returns (uint256) {
44
+ uint256 remaining = IERC20(
45
+ artblocksContract.projectIdToCurrencyAddress(_projectId)
46
+ ).allowance(msg.sender, address(this));
47
+ return remaining;
48
+ }
49
+
50
+ function setProjectMintLimit(uint256 _projectId, uint8 _limit) public {
51
+ require(
52
+ artblocksContract.isWhitelisted(msg.sender),
53
+ "can only be set by admin"
54
+ );
55
+ projectMintLimit[_projectId] = _limit;
56
+ }
57
+
58
+ function setProjectMaxInvocations(uint256 _projectId) public {
59
+ require(
60
+ artblocksContract.isWhitelisted(msg.sender),
61
+ "can only be set by admin"
62
+ );
63
+ uint256 maxInvocations;
64
+ uint256 invocations;
65
+ (, , invocations, maxInvocations, , , , , ) = artblocksContract
66
+ .projectTokenInfo(_projectId);
67
+ projectMaxInvocations[_projectId] = maxInvocations;
68
+ if (invocations < maxInvocations) {
69
+ projectMaxHasBeenInvoked[_projectId] = false;
70
+ }
71
+ }
72
+
73
+ function toggleContractFilter(uint256 _projectId) public {
74
+ require(
75
+ artblocksContract.isWhitelisted(msg.sender),
76
+ "can only be set by admin"
77
+ );
78
+ contractFilterProject[_projectId] = !contractFilterProject[_projectId];
79
+ }
80
+
81
+ function artistToggleBonus(uint256 _projectId) public {
82
+ require(
83
+ msg.sender ==
84
+ artblocksContract.projectIdToArtistAddress(_projectId),
85
+ "can only be set by artist"
86
+ );
87
+ projectIdToBonus[_projectId] = !projectIdToBonus[_projectId];
88
+ }
89
+
90
+ function artistSetBonusContractAddress(
91
+ uint256 _projectId,
92
+ address _bonusContractAddress
93
+ ) public {
94
+ require(
95
+ msg.sender ==
96
+ artblocksContract.projectIdToArtistAddress(_projectId),
97
+ "can only be set by artist"
98
+ );
99
+ projectIdToBonusContractAddress[_projectId] = _bonusContractAddress;
100
+ }
101
+
102
+ function purchase(
103
+ uint256 _projectId
104
+ ) public payable returns (uint256 _tokenId) {
105
+ return purchaseTo(msg.sender, _projectId);
106
+ }
107
+
108
+ //removed public and payable
109
+ function purchaseTo(
110
+ address _to,
111
+ uint256 _projectId
112
+ ) private returns (uint256 _tokenId) {
113
+ require(
114
+ !projectMaxHasBeenInvoked[_projectId],
115
+ "Maximum number of invocations reached"
116
+ );
117
+ if (
118
+ keccak256(
119
+ abi.encodePacked(
120
+ artblocksContract.projectIdToCurrencySymbol(_projectId)
121
+ )
122
+ ) != keccak256(abi.encodePacked("ETH"))
123
+ ) {
124
+ require(
125
+ msg.value == 0,
126
+ "this project accepts a different currency and cannot accept ETH"
127
+ );
128
+ require(
129
+ IERC20(artblocksContract.projectIdToCurrencyAddress(_projectId))
130
+ .allowance(msg.sender, address(this)) >=
131
+ artblocksContract.projectIdToPricePerTokenInWei(_projectId),
132
+ "Insufficient Funds Approved for TX"
133
+ );
134
+ require(
135
+ IERC20(artblocksContract.projectIdToCurrencyAddress(_projectId))
136
+ .balanceOf(msg.sender) >=
137
+ artblocksContract.projectIdToPricePerTokenInWei(_projectId),
138
+ "Insufficient balance."
139
+ );
140
+ _splitFundsERC20(_projectId);
141
+ } else {
142
+ require(
143
+ msg.value >=
144
+ artblocksContract.projectIdToPricePerTokenInWei(_projectId),
145
+ "Must send minimum value to mint!"
146
+ );
147
+ _splitFundsETH(_projectId);
148
+ }
149
+
150
+ // if contract filter is active prevent calls from another contract
151
+ if (contractFilterProject[_projectId])
152
+ require(msg.sender == tx.origin, "No Contract Buys");
153
+
154
+ // limit mints per address by project
155
+ if (projectMintLimit[_projectId] > 0) {
156
+ require(
157
+ projectMintCounter[msg.sender][_projectId] <
158
+ projectMintLimit[_projectId],
159
+ "Reached minting limit"
160
+ );
161
+ projectMintCounter[msg.sender][_projectId]++;
162
+ }
163
+
164
+ uint256 tokenId = artblocksContract.mint(_to, _projectId, msg.sender);
165
+ // What if this overflows, since default value of uint256 is 0?
166
+ // that is intended, so that by default the minter allows infinite transactions,
167
+ // allowing the artblocks contract to stop minting
168
+ // uint256 tokenInvocation = tokenId % ONE_MILLION;
169
+ if (tokenId % ONE_MILLION == projectMaxInvocations[_projectId] - 1) {
170
+ projectMaxHasBeenInvoked[_projectId] = true;
171
+ }
172
+
173
+ if (projectIdToBonus[_projectId]) {
174
+ require(
175
+ IBonusContract(projectIdToBonusContractAddress[_projectId])
176
+ .bonusIsActive(),
177
+ "bonus must be active"
178
+ );
179
+ IBonusContract(projectIdToBonusContractAddress[_projectId])
180
+ .triggerBonus(msg.sender);
181
+ }
182
+
183
+ return tokenId;
184
+ }
185
+
186
+ function _splitFundsETH(uint256 _projectId) internal {
187
+ if (msg.value > 0) {
188
+ uint256 pricePerTokenInWei = artblocksContract
189
+ .projectIdToPricePerTokenInWei(_projectId);
190
+ uint256 refund = msg.value.sub(
191
+ artblocksContract.projectIdToPricePerTokenInWei(_projectId)
192
+ );
193
+ if (refund > 0) {
194
+ msg.sender.transfer(refund);
195
+ }
196
+ uint256 foundationAmount = pricePerTokenInWei.div(100).mul(
197
+ artblocksContract.artblocksPercentage()
198
+ );
199
+ if (foundationAmount > 0) {
200
+ artblocksContract.artblocksAddress().transfer(foundationAmount);
201
+ }
202
+ uint256 projectFunds = pricePerTokenInWei.sub(foundationAmount);
203
+ uint256 additionalPayeeAmount;
204
+ if (
205
+ artblocksContract.projectIdToAdditionalPayeePercentage(
206
+ _projectId
207
+ ) > 0
208
+ ) {
209
+ additionalPayeeAmount = projectFunds.div(100).mul(
210
+ artblocksContract.projectIdToAdditionalPayeePercentage(
211
+ _projectId
212
+ )
213
+ );
214
+ if (additionalPayeeAmount > 0) {
215
+ artblocksContract
216
+ .projectIdToAdditionalPayee(_projectId)
217
+ .transfer(additionalPayeeAmount);
218
+ }
219
+ }
220
+ uint256 creatorFunds = projectFunds.sub(additionalPayeeAmount);
221
+ if (creatorFunds > 0) {
222
+ artblocksContract.projectIdToArtistAddress(_projectId).transfer(
223
+ creatorFunds
224
+ );
225
+ }
226
+ }
227
+ }
228
+
229
+ function _splitFundsERC20(uint256 _projectId) internal {
230
+ uint256 pricePerTokenInWei = artblocksContract
231
+ .projectIdToPricePerTokenInWei(_projectId);
232
+ uint256 foundationAmount = pricePerTokenInWei.div(100).mul(
233
+ artblocksContract.artblocksPercentage()
234
+ );
235
+ if (foundationAmount > 0) {
236
+ IERC20(artblocksContract.projectIdToCurrencyAddress(_projectId))
237
+ .transferFrom(
238
+ msg.sender,
239
+ artblocksContract.artblocksAddress(),
240
+ foundationAmount
241
+ );
242
+ }
243
+ uint256 projectFunds = pricePerTokenInWei.sub(foundationAmount);
244
+ uint256 additionalPayeeAmount;
245
+ if (
246
+ artblocksContract.projectIdToAdditionalPayeePercentage(_projectId) >
247
+ 0
248
+ ) {
249
+ additionalPayeeAmount = projectFunds.div(100).mul(
250
+ artblocksContract.projectIdToAdditionalPayeePercentage(
251
+ _projectId
252
+ )
253
+ );
254
+ if (additionalPayeeAmount > 0) {
255
+ IERC20(artblocksContract.projectIdToCurrencyAddress(_projectId))
256
+ .transferFrom(
257
+ msg.sender,
258
+ artblocksContract.projectIdToAdditionalPayee(
259
+ _projectId
260
+ ),
261
+ additionalPayeeAmount
262
+ );
263
+ }
264
+ }
265
+ uint256 creatorFunds = projectFunds.sub(additionalPayeeAmount);
266
+ if (creatorFunds > 0) {
267
+ IERC20(artblocksContract.projectIdToCurrencyAddress(_projectId))
268
+ .transferFrom(
269
+ msg.sender,
270
+ artblocksContract.projectIdToArtistAddress(_projectId),
271
+ creatorFunds
272
+ );
273
+ }
274
+ }
275
+ }
@@ -0,0 +1,52 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ // **Please Note**: This library is not necessary for ^0.8.0 contracts and thus
5
+ // only exists for posterity reasons for compatibility with
6
+ // existing already-deployed ^0.5.0 PBAB contracts.
7
+
8
+ pragma solidity ^0.5.0;
9
+
10
+ import "@openzeppelin-0.5/contracts/introspection/ERC165.sol";
11
+ import "@openzeppelin-0.5/contracts/token/ERC721/ERC721.sol";
12
+ import "@openzeppelin-0.5/contracts/token/ERC721/ERC721Enumerable.sol";
13
+
14
+ /**
15
+ * ERC721 base contract without the concept of tokenUri as this is managed by the parent
16
+ */
17
+ contract CustomERC721Metadata is ERC165, ERC721, ERC721Enumerable {
18
+ // Token name
19
+ string private _name;
20
+
21
+ // Token symbol
22
+ string private _symbol;
23
+
24
+ bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;
25
+
26
+ /**
27
+ * @dev Constructor function
28
+ */
29
+ constructor(string memory name, string memory symbol) public {
30
+ _name = name;
31
+ _symbol = symbol;
32
+
33
+ // register the supported interfaces to conform to ERC721 via ERC165
34
+ _registerInterface(_INTERFACE_ID_ERC721_METADATA);
35
+ }
36
+
37
+ /**
38
+ * @dev Gets the token name
39
+ * @return string representing the token name
40
+ */
41
+ function name() external view returns (string memory) {
42
+ return _name;
43
+ }
44
+
45
+ /**
46
+ * @dev Gets the token symbol
47
+ * @return string representing the token symbol
48
+ */
49
+ function symbol() external view returns (string memory) {
50
+ return _symbol;
51
+ }
52
+ }
@@ -0,0 +1,96 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)
3
+
4
+ // **Please Note**: This library is not necessary for ^0.8.0 contracts and thus
5
+ // only exists for posterity reasons for compatibility with
6
+ // existing already-deployed ^0.5.0 PBAB contracts.
7
+
8
+ pragma solidity ^0.5.0;
9
+
10
+ /**
11
+ * @dev Interface of the ERC20 standard as defined in the EIP.
12
+ */
13
+ interface IERC20 {
14
+ /**
15
+ * @dev Returns the amount of tokens in existence.
16
+ */
17
+ function totalSupply() external view returns (uint256);
18
+
19
+ /**
20
+ * @dev Returns the amount of tokens owned by `account`.
21
+ */
22
+ function balanceOf(address account) external view returns (uint256);
23
+
24
+ /**
25
+ * @dev Moves `amount` tokens from the caller's account to `recipient`.
26
+ *
27
+ * Returns a boolean value indicating whether the operation succeeded.
28
+ *
29
+ * Emits a {Transfer} event.
30
+ */
31
+ function transfer(
32
+ address recipient,
33
+ uint256 amount
34
+ ) external returns (bool);
35
+
36
+ /**
37
+ * @dev Returns the remaining number of tokens that `spender` will be
38
+ * allowed to spend on behalf of `owner` through {transferFrom}. This is
39
+ * zero by default.
40
+ *
41
+ * This value changes when {approve} or {transferFrom} are called.
42
+ */
43
+ function allowance(
44
+ address owner,
45
+ address spender
46
+ ) external view returns (uint256);
47
+
48
+ /**
49
+ * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
50
+ *
51
+ * Returns a boolean value indicating whether the operation succeeded.
52
+ *
53
+ * IMPORTANT: Beware that changing an allowance with this method brings the risk
54
+ * that someone may use both the old and the new allowance by unfortunate
55
+ * transaction ordering. One possible solution to mitigate this race
56
+ * condition is to first reduce the spender's allowance to 0 and set the
57
+ * desired value afterwards:
58
+ * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
59
+ *
60
+ * Emits an {Approval} event.
61
+ */
62
+ function approve(address spender, uint256 amount) external returns (bool);
63
+
64
+ /**
65
+ * @dev Moves `amount` tokens from `sender` to `recipient` using the
66
+ * allowance mechanism. `amount` is then deducted from the caller's
67
+ * allowance.
68
+ *
69
+ * Returns a boolean value indicating whether the operation succeeded.
70
+ *
71
+ * Emits a {Transfer} event.
72
+ */
73
+ function transferFrom(
74
+ address sender,
75
+ address recipient,
76
+ uint256 amount
77
+ ) external returns (bool);
78
+
79
+ /**
80
+ * @dev Emitted when `value` tokens are moved from one account (`from`) to
81
+ * another (`to`).
82
+ *
83
+ * Note that `value` may be zero.
84
+ */
85
+ event Transfer(address indexed from, address indexed to, uint256 value);
86
+
87
+ /**
88
+ * @dev Emitted when the allowance of a `spender` for an `owner` is set by
89
+ * a call to {approve}. `value` is the new allowance.
90
+ */
91
+ event Approval(
92
+ address indexed owner,
93
+ address indexed spender,
94
+ uint256 value
95
+ );
96
+ }
@@ -0,0 +1,98 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // File: openzeppelin-solidity/contracts/math/SafeMath.sol
3
+
4
+ // **Please Note**: This library is not necessary for ^0.8.0 contracts and thus
5
+ // only exists for posterity reasons for compatibility with
6
+ // existing already-deployed ^0.5.0 PBAB contracts.
7
+
8
+ pragma solidity ^0.5.0;
9
+
10
+ /**
11
+ * @dev Wrappers over Solidity's arithmetic operations with added overflow
12
+ * checks.
13
+ *
14
+ * Arithmetic operations in Solidity wrap on overflow. This can easily result
15
+ * in bugs, because programmers usually assume that an overflow raises an
16
+ * error, which is the standard behavior in high level programming languages.
17
+ * `SafeMath` restores this intuition by reverting the transaction when an
18
+ * operation overflows.
19
+ *
20
+ * Using this library instead of the unchecked operations eliminates an entire
21
+ * class of bugs, so it's recommended to use it always.
22
+ */
23
+ library SafeMath {
24
+ /**
25
+ * @dev Returns the addition of two unsigned integers, reverting on
26
+ * overflow.
27
+ *
28
+ * Counterpart to Solidity's `+` operator.
29
+ *
30
+ * Requirements:
31
+ * - Addition cannot overflow.
32
+ */
33
+ function add(uint256 a, uint256 b) internal pure returns (uint256) {
34
+ uint256 c = a + b;
35
+ require(c >= a, "SafeMath: addition overflow");
36
+
37
+ return c;
38
+ }
39
+
40
+ /**
41
+ * @dev Returns the subtraction of two unsigned integers, reverting on
42
+ * overflow (when the result is negative).
43
+ *
44
+ * Counterpart to Solidity's `-` operator.
45
+ *
46
+ * Requirements:
47
+ * - Subtraction cannot overflow.
48
+ */
49
+ function sub(uint256 a, uint256 b) internal pure returns (uint256) {
50
+ require(b <= a, "SafeMath: subtraction overflow");
51
+ uint256 c = a - b;
52
+
53
+ return c;
54
+ }
55
+
56
+ /**
57
+ * @dev Returns the multiplication of two unsigned integers, reverting on
58
+ * overflow.
59
+ *
60
+ * Counterpart to Solidity's `*` operator.
61
+ *
62
+ * Requirements:
63
+ * - Multiplication cannot overflow.
64
+ */
65
+ function mul(uint256 a, uint256 b) internal pure returns (uint256) {
66
+ // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
67
+ // benefit is lost if 'b' is also tested.
68
+ // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
69
+ if (a == 0) {
70
+ return 0;
71
+ }
72
+
73
+ uint256 c = a * b;
74
+ require(c / a == b, "SafeMath: multiplication overflow");
75
+
76
+ return c;
77
+ }
78
+
79
+ /**
80
+ * @dev Returns the integer division of two unsigned integers. Reverts on
81
+ * division by zero. The result is rounded towards zero.
82
+ *
83
+ * Counterpart to Solidity's `/` operator. Note: this function uses a
84
+ * `revert` opcode (which leaves remaining gas untouched) while Solidity
85
+ * uses an invalid opcode to revert (consuming all remaining gas).
86
+ *
87
+ * Requirements:
88
+ * - The divisor cannot be zero.
89
+ */
90
+ function div(uint256 a, uint256 b) internal pure returns (uint256) {
91
+ // Solidity only automatically asserts when dividing by 0
92
+ require(b > 0, "SafeMath: division by zero");
93
+ uint256 c = a / b;
94
+ // assert(a == b * c + a % b); // There is no case in which this doesn't hold
95
+
96
+ return c;
97
+ }
98
+ }
@@ -0,0 +1,92 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // File: contracts/Strings.sol
3
+ // Source: https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.5.sol
4
+
5
+ // **Please Note**: This library is not necessary for ^0.8.0 contracts and thus
6
+ // only exists for posterity reasons for compatibility with
7
+ // existing already-deployed ^0.5.0 PBAB contracts.
8
+
9
+ pragma solidity ^0.5.0;
10
+
11
+ library Strings {
12
+ function strConcat(
13
+ string memory _a,
14
+ string memory _b
15
+ ) internal pure returns (string memory _concatenatedString) {
16
+ return strConcat(_a, _b, "", "", "");
17
+ }
18
+
19
+ function strConcat(
20
+ string memory _a,
21
+ string memory _b,
22
+ string memory _c
23
+ ) internal pure returns (string memory _concatenatedString) {
24
+ return strConcat(_a, _b, _c, "", "");
25
+ }
26
+
27
+ function strConcat(
28
+ string memory _a,
29
+ string memory _b,
30
+ string memory _c,
31
+ string memory _d
32
+ ) internal pure returns (string memory _concatenatedString) {
33
+ return strConcat(_a, _b, _c, _d, "");
34
+ }
35
+
36
+ function strConcat(
37
+ string memory _a,
38
+ string memory _b,
39
+ string memory _c,
40
+ string memory _d,
41
+ string memory _e
42
+ ) internal pure returns (string memory _concatenatedString) {
43
+ bytes memory _ba = bytes(_a);
44
+ bytes memory _bb = bytes(_b);
45
+ bytes memory _bc = bytes(_c);
46
+ bytes memory _bd = bytes(_d);
47
+ bytes memory _be = bytes(_e);
48
+ string memory abcde = new string(
49
+ _ba.length + _bb.length + _bc.length + _bd.length + _be.length
50
+ );
51
+ bytes memory babcde = bytes(abcde);
52
+ uint256 k = 0;
53
+ uint256 i = 0;
54
+ for (i = 0; i < _ba.length; i++) {
55
+ babcde[k++] = _ba[i];
56
+ }
57
+ for (i = 0; i < _bb.length; i++) {
58
+ babcde[k++] = _bb[i];
59
+ }
60
+ for (i = 0; i < _bc.length; i++) {
61
+ babcde[k++] = _bc[i];
62
+ }
63
+ for (i = 0; i < _bd.length; i++) {
64
+ babcde[k++] = _bd[i];
65
+ }
66
+ for (i = 0; i < _be.length; i++) {
67
+ babcde[k++] = _be[i];
68
+ }
69
+ return string(babcde);
70
+ }
71
+
72
+ function uint2str(
73
+ uint256 _i
74
+ ) internal pure returns (string memory _uintAsString) {
75
+ if (_i == 0) {
76
+ return "0";
77
+ }
78
+ uint256 j = _i;
79
+ uint256 len;
80
+ while (j != 0) {
81
+ len++;
82
+ j /= 10;
83
+ }
84
+ bytes memory bstr = new bytes(len);
85
+ uint256 k = len - 1;
86
+ while (_i != 0) {
87
+ bstr[k--] = bytes1(uint8(48 + (_i % 10)));
88
+ _i /= 10;
89
+ }
90
+ return string(bstr);
91
+ }
92
+ }