@rarible/external-contracts 3.11.4

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 (439) hide show
  1. package/LICENSE.md +201 -0
  2. package/README.md +144 -0
  3. package/contracts/base/ERC1155Base.sol +282 -0
  4. package/contracts/base/ERC1155DelayedReveal.sol +117 -0
  5. package/contracts/base/ERC1155Drop.sol +368 -0
  6. package/contracts/base/ERC1155LazyMint.sol +286 -0
  7. package/contracts/base/ERC1155SignatureMint.sol +132 -0
  8. package/contracts/base/ERC20Base.sol +111 -0
  9. package/contracts/base/ERC20Drop.sol +157 -0
  10. package/contracts/base/ERC20DropVote.sol +135 -0
  11. package/contracts/base/ERC20SignatureMint.sol +100 -0
  12. package/contracts/base/ERC20SignatureMintVote.sol +107 -0
  13. package/contracts/base/ERC20Vote.sol +111 -0
  14. package/contracts/base/ERC721Base.sol +210 -0
  15. package/contracts/base/ERC721DelayedReveal.sol +118 -0
  16. package/contracts/base/ERC721Drop.sol +312 -0
  17. package/contracts/base/ERC721LazyMint.sol +219 -0
  18. package/contracts/base/ERC721Multiwrap.sol +262 -0
  19. package/contracts/base/ERC721SignatureMint.sol +120 -0
  20. package/contracts/base/Staking1155Base.sol +189 -0
  21. package/contracts/base/Staking20Base.sol +179 -0
  22. package/contracts/base/Staking721Base.sol +186 -0
  23. package/contracts/eip/ERC1155.sol +294 -0
  24. package/contracts/eip/ERC1271.sol +18 -0
  25. package/contracts/eip/ERC165.sol +29 -0
  26. package/contracts/eip/ERC721A.sol +580 -0
  27. package/contracts/eip/ERC721AUpgradeable.sol +625 -0
  28. package/contracts/eip/ERC721AVirtualApprove.sol +582 -0
  29. package/contracts/eip/ERC721AVirtualApproveUpgradeable.sol +598 -0
  30. package/contracts/eip/interface/IERC1155.sol +132 -0
  31. package/contracts/eip/interface/IERC1155Enumerable.sol +11 -0
  32. package/contracts/eip/interface/IERC1155Metadata.sol +15 -0
  33. package/contracts/eip/interface/IERC1155Receiver.sol +58 -0
  34. package/contracts/eip/interface/IERC1155Supply.sol +11 -0
  35. package/contracts/eip/interface/IERC165.sol +25 -0
  36. package/contracts/eip/interface/IERC20.sol +24 -0
  37. package/contracts/eip/interface/IERC20Metadata.sol +14 -0
  38. package/contracts/eip/interface/IERC20Permit.sol +60 -0
  39. package/contracts/eip/interface/IERC2981.sol +23 -0
  40. package/contracts/eip/interface/IERC4906.sol +17 -0
  41. package/contracts/eip/interface/IERC721.sol +128 -0
  42. package/contracts/eip/interface/IERC721A.sol +109 -0
  43. package/contracts/eip/interface/IERC721Enumerable.sol +24 -0
  44. package/contracts/eip/interface/IERC721Metadata.sol +20 -0
  45. package/contracts/eip/interface/IERC721Receiver.sol +27 -0
  46. package/contracts/eip/interface/IERC721Supply.sol +13 -0
  47. package/contracts/eip/queryable/ERC721AQueryable.sol +168 -0
  48. package/contracts/eip/queryable/ERC721AQueryableUpgradeable.sol +193 -0
  49. package/contracts/eip/queryable/ERC721AStorage.sol +57 -0
  50. package/contracts/eip/queryable/ERC721AUpgradeable.sol +1075 -0
  51. package/contracts/eip/queryable/ERC721A__Initializable.sol +75 -0
  52. package/contracts/eip/queryable/ERC721A__InitializableStorage.sol +29 -0
  53. package/contracts/eip/queryable/IERC721AQueryable.sol +69 -0
  54. package/contracts/eip/queryable/IERC721AQueryableUpgradeable.sol +69 -0
  55. package/contracts/eip/queryable/IERC721AUpgradeable.sol +269 -0
  56. package/contracts/extension/AppURI.sol +37 -0
  57. package/contracts/extension/BatchMintMetadata.sol +143 -0
  58. package/contracts/extension/BurnToClaim.sol +60 -0
  59. package/contracts/extension/ContractMetadata.sol +48 -0
  60. package/contracts/extension/DelayedReveal.sol +111 -0
  61. package/contracts/extension/Drop.sol +284 -0
  62. package/contracts/extension/Drop1155.sol +300 -0
  63. package/contracts/extension/DropSinglePhase.sol +237 -0
  64. package/contracts/extension/DropSinglePhase1155.sol +215 -0
  65. package/contracts/extension/Initializable.sol +136 -0
  66. package/contracts/extension/LazyMint.sol +56 -0
  67. package/contracts/extension/LazyMintWithTier.sol +112 -0
  68. package/contracts/extension/Multicall.sol +40 -0
  69. package/contracts/extension/NFTMetadata.sol +58 -0
  70. package/contracts/extension/OperatorFilterToggle.sol +22 -0
  71. package/contracts/extension/OperatorFilterer.sol +73 -0
  72. package/contracts/extension/OperatorFiltererUpgradeable.sol +69 -0
  73. package/contracts/extension/Ownable.sol +58 -0
  74. package/contracts/extension/Permissions.sol +159 -0
  75. package/contracts/extension/PermissionsEnumerable.sol +111 -0
  76. package/contracts/extension/PlatformFee.sol +117 -0
  77. package/contracts/extension/PrimarySale.sol +57 -0
  78. package/contracts/extension/Proxy.sol +84 -0
  79. package/contracts/extension/ProxyForUpgradeable.sol +32 -0
  80. package/contracts/extension/Royalty.sol +134 -0
  81. package/contracts/extension/SeaportEIP1271.sol +88 -0
  82. package/contracts/extension/SeaportOrderParser.sol +550 -0
  83. package/contracts/extension/SharedMetadata.sol +63 -0
  84. package/contracts/extension/SignatureAction.sol +67 -0
  85. package/contracts/extension/SignatureActionUpgradeable.sol +71 -0
  86. package/contracts/extension/SignatureMintERC1155.sol +78 -0
  87. package/contracts/extension/SignatureMintERC1155Upgradeable.sol +84 -0
  88. package/contracts/extension/SignatureMintERC20.sol +70 -0
  89. package/contracts/extension/SignatureMintERC20Upgradeable.sol +77 -0
  90. package/contracts/extension/SignatureMintERC721.sol +96 -0
  91. package/contracts/extension/SignatureMintERC721Upgradeable.sol +102 -0
  92. package/contracts/extension/SoulboundERC721A.sol +51 -0
  93. package/contracts/extension/Staking1155.sol +516 -0
  94. package/contracts/extension/Staking1155Upgradeable.sol +516 -0
  95. package/contracts/extension/Staking20.sol +376 -0
  96. package/contracts/extension/Staking20Upgradeable.sol +383 -0
  97. package/contracts/extension/Staking721.sol +362 -0
  98. package/contracts/extension/Staking721Upgradeable.sol +364 -0
  99. package/contracts/extension/TokenBundle.sol +130 -0
  100. package/contracts/extension/TokenStore.sol +97 -0
  101. package/contracts/extension/Upgradeable.sol +95 -0
  102. package/contracts/extension/interface/IAccountPermissions.sol +114 -0
  103. package/contracts/extension/interface/IAppURI.sol +24 -0
  104. package/contracts/extension/interface/IBurnToClaim.sol +43 -0
  105. package/contracts/extension/interface/IBurnableERC1155.sol +16 -0
  106. package/contracts/extension/interface/IBurnableERC20.sol +26 -0
  107. package/contracts/extension/interface/IBurnableERC721.sol +15 -0
  108. package/contracts/extension/interface/IClaimCondition.sol +48 -0
  109. package/contracts/extension/interface/IClaimConditionMultiPhase.sol +39 -0
  110. package/contracts/extension/interface/IClaimConditionsSinglePhase.sol +31 -0
  111. package/contracts/extension/interface/IClaimableERC1155.sol +39 -0
  112. package/contracts/extension/interface/IClaimableERC721.sol +37 -0
  113. package/contracts/extension/interface/IContractFactory.sol +20 -0
  114. package/contracts/extension/interface/IContractMetadata.sol +25 -0
  115. package/contracts/extension/interface/IDelayedReveal.sol +33 -0
  116. package/contracts/extension/interface/IDelayedRevealDeprecated.sol +38 -0
  117. package/contracts/extension/interface/IDrop.sol +72 -0
  118. package/contracts/extension/interface/IDrop1155.sol +75 -0
  119. package/contracts/extension/interface/IDropSinglePhase.sol +70 -0
  120. package/contracts/extension/interface/IDropSinglePhase1155.sol +74 -0
  121. package/contracts/extension/interface/IERC2771Context.sol +6 -0
  122. package/contracts/extension/interface/ILazyMint.sol +33 -0
  123. package/contracts/extension/interface/ILazyMintWithTier.sol +43 -0
  124. package/contracts/extension/interface/IMintableERC1155.sol +24 -0
  125. package/contracts/extension/interface/IMintableERC20.sol +20 -0
  126. package/contracts/extension/interface/IMintableERC721.sol +19 -0
  127. package/contracts/extension/interface/IMulticall.sol +16 -0
  128. package/contracts/extension/interface/INFTMetadata.sol +17 -0
  129. package/contracts/extension/interface/IOperatorFilterRegistry.sol +54 -0
  130. package/contracts/extension/interface/IOperatorFilterToggle.sol +12 -0
  131. package/contracts/extension/interface/IOwnable.sol +21 -0
  132. package/contracts/extension/interface/IPermissions.sol +88 -0
  133. package/contracts/extension/interface/IPermissionsEnumerable.sol +31 -0
  134. package/contracts/extension/interface/IPlatformFee.sol +33 -0
  135. package/contracts/extension/interface/IPrimarySale.sol +21 -0
  136. package/contracts/extension/interface/IRoyalty.sol +39 -0
  137. package/contracts/extension/interface/IRoyaltyEngineV1.sol +42 -0
  138. package/contracts/extension/interface/IRoyaltyPayments.sol +37 -0
  139. package/contracts/extension/interface/IRulesEngine.sol +58 -0
  140. package/contracts/extension/interface/ISharedMetadata.sol +30 -0
  141. package/contracts/extension/interface/ISharedMetadataBatch.sol +57 -0
  142. package/contracts/extension/interface/ISignatureAction.sol +44 -0
  143. package/contracts/extension/interface/ISignatureMintERC1155.sol +77 -0
  144. package/contracts/extension/interface/ISignatureMintERC20.sol +64 -0
  145. package/contracts/extension/interface/ISignatureMintERC721.sol +75 -0
  146. package/contracts/extension/interface/IStaking1155.sol +110 -0
  147. package/contracts/extension/interface/IStaking20.sol +97 -0
  148. package/contracts/extension/interface/IStaking721.sol +83 -0
  149. package/contracts/extension/interface/ITokenBundle.sol +52 -0
  150. package/contracts/extension/interface/plugin/IContext.sol +10 -0
  151. package/contracts/extension/interface/plugin/IPluginMap.sol +31 -0
  152. package/contracts/extension/interface/plugin/IRouter.sol +30 -0
  153. package/contracts/extension/plugin/ContractMetadataLogic.sol +52 -0
  154. package/contracts/extension/plugin/ContractMetadataStorage.sol +25 -0
  155. package/contracts/extension/plugin/ERC2771ContextConsumer.sol +34 -0
  156. package/contracts/extension/plugin/ERC2771ContextLogic.sol +43 -0
  157. package/contracts/extension/plugin/ERC2771ContextStorage.sol +22 -0
  158. package/contracts/extension/plugin/ERC2771ContextUpgradeableLogic.sol +47 -0
  159. package/contracts/extension/plugin/ERC2771ContextUpgradeableStorage.sol +20 -0
  160. package/contracts/extension/plugin/PermissionsEnumerableLogic.sol +101 -0
  161. package/contracts/extension/plugin/PermissionsEnumerableStorage.sol +41 -0
  162. package/contracts/extension/plugin/PermissionsLogic.sol +182 -0
  163. package/contracts/extension/plugin/PermissionsStorage.sol +28 -0
  164. package/contracts/extension/plugin/PlatformFeeLogic.sol +56 -0
  165. package/contracts/extension/plugin/PlatformFeeStorage.sol +28 -0
  166. package/contracts/extension/plugin/PluginMap.sol +81 -0
  167. package/contracts/extension/plugin/ReentrancyGuardLogic.sol +69 -0
  168. package/contracts/extension/plugin/ReentrancyGuardStorage.sol +22 -0
  169. package/contracts/extension/plugin/Router.sol +270 -0
  170. package/contracts/extension/plugin/RouterImmutable.sol +26 -0
  171. package/contracts/extension/plugin/RoyaltyPayments.sol +121 -0
  172. package/contracts/extension/upgradeable/AccountPermissions.sol +253 -0
  173. package/contracts/extension/upgradeable/BatchMintMetadata.sol +144 -0
  174. package/contracts/extension/upgradeable/BurnToClaim.sol +83 -0
  175. package/contracts/extension/upgradeable/ContractMetadata.sol +73 -0
  176. package/contracts/extension/upgradeable/DelayedReveal.sol +126 -0
  177. package/contracts/extension/upgradeable/Drop.sol +278 -0
  178. package/contracts/extension/upgradeable/ERC2771Context.sol +64 -0
  179. package/contracts/extension/upgradeable/ERC2771ContextConsumer.sol +32 -0
  180. package/contracts/extension/upgradeable/ERC2771ContextUpgradeable.sol +72 -0
  181. package/contracts/extension/upgradeable/Initializable.sol +110 -0
  182. package/contracts/extension/upgradeable/LazyMint.sol +77 -0
  183. package/contracts/extension/upgradeable/OperatorFilterToggle.sol +47 -0
  184. package/contracts/extension/upgradeable/OperatorFiltererUpgradeable.sol +58 -0
  185. package/contracts/extension/upgradeable/Ownable.sol +75 -0
  186. package/contracts/extension/upgradeable/Permissions.sol +197 -0
  187. package/contracts/extension/upgradeable/PermissionsEnumerable.sol +134 -0
  188. package/contracts/extension/upgradeable/PlatformFee.sol +131 -0
  189. package/contracts/extension/upgradeable/PrimarySale.sol +69 -0
  190. package/contracts/extension/upgradeable/ReentrancyGuard.sol +53 -0
  191. package/contracts/extension/upgradeable/Royalty.sol +144 -0
  192. package/contracts/extension/upgradeable/RoyaltyPayments.sol +121 -0
  193. package/contracts/extension/upgradeable/RulesEngine.sol +163 -0
  194. package/contracts/extension/upgradeable/SharedMetadataBatch.sol +98 -0
  195. package/contracts/extension/upgradeable/impl/ContractMetadataImpl.sol +34 -0
  196. package/contracts/extension/upgradeable/impl/MetaTx.sol +8 -0
  197. package/contracts/extension/upgradeable/impl/PermissionsEnumerableImpl.sol +28 -0
  198. package/contracts/extension/upgradeable/impl/PlatformFeeImpl.sol +34 -0
  199. package/contracts/extension/upgradeable/init/ContractMetadataInit.sol +17 -0
  200. package/contracts/extension/upgradeable/init/ERC2771ContextInit.sol +19 -0
  201. package/contracts/extension/upgradeable/init/ERC721AInit.sol +23 -0
  202. package/contracts/extension/upgradeable/init/ERC721AQueryableInit.sol +21 -0
  203. package/contracts/extension/upgradeable/init/OwnableInit.sol +18 -0
  204. package/contracts/extension/upgradeable/init/PermissionsEnumerableInit.sol +23 -0
  205. package/contracts/extension/upgradeable/init/PermissionsInit.sol +27 -0
  206. package/contracts/extension/upgradeable/init/PlatformFeeInit.sol +25 -0
  207. package/contracts/extension/upgradeable/init/PrimarySaleInit.sol +19 -0
  208. package/contracts/extension/upgradeable/init/ReentrancyGuardInit.sol +18 -0
  209. package/contracts/extension/upgradeable/init/RoyaltyInit.sol +22 -0
  210. package/contracts/external-deps/chainlink/LinkTokenInterface.sol +28 -0
  211. package/contracts/external-deps/chainlink/VRFV2WrapperConsumerBase.sol +83 -0
  212. package/contracts/external-deps/chainlink/VRFV2WrapperInterface.sol +35 -0
  213. package/contracts/external-deps/openzeppelin/ERC1155PresetUpgradeable.sol +160 -0
  214. package/contracts/external-deps/openzeppelin/cryptography/EIP712ChainlessDomain.sol +100 -0
  215. package/contracts/external-deps/openzeppelin/finance/PaymentSplitterUpgradeable.sol +231 -0
  216. package/contracts/external-deps/openzeppelin/governance/utils/IVotes.sol +54 -0
  217. package/contracts/external-deps/openzeppelin/metatx/ERC2771Context.sol +44 -0
  218. package/contracts/external-deps/openzeppelin/metatx/ERC2771ContextUpgradeable.sol +50 -0
  219. package/contracts/external-deps/openzeppelin/metatx/MinimalForwarderEOAOnly.sol +67 -0
  220. package/contracts/external-deps/openzeppelin/proxy/Clones.sol +88 -0
  221. package/contracts/external-deps/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol +32 -0
  222. package/contracts/external-deps/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol +173 -0
  223. package/contracts/external-deps/openzeppelin/proxy/IERC1822Proxiable.sol +20 -0
  224. package/contracts/external-deps/openzeppelin/proxy/Proxy.sol +86 -0
  225. package/contracts/external-deps/openzeppelin/proxy/beacon/IBeacon.sol +16 -0
  226. package/contracts/external-deps/openzeppelin/proxy/utils/Initializable.sol +138 -0
  227. package/contracts/external-deps/openzeppelin/security/ReentrancyGuard.sol +32 -0
  228. package/contracts/external-deps/openzeppelin/security/ReentrancyGuardUpgradeable.sol +44 -0
  229. package/contracts/external-deps/openzeppelin/token/ERC1155/IERC1155Receiver.sol +58 -0
  230. package/contracts/external-deps/openzeppelin/token/ERC1155/utils/ERC1155Holder.sol +36 -0
  231. package/contracts/external-deps/openzeppelin/token/ERC1155/utils/ERC1155Receiver.sol +19 -0
  232. package/contracts/external-deps/openzeppelin/token/ERC20/ERC20.sol +359 -0
  233. package/contracts/external-deps/openzeppelin/token/ERC20/extensions/ERC20Permit.sol +117 -0
  234. package/contracts/external-deps/openzeppelin/token/ERC20/extensions/ERC20Votes.sol +246 -0
  235. package/contracts/external-deps/openzeppelin/token/ERC20/utils/SafeERC20.sol +78 -0
  236. package/contracts/external-deps/openzeppelin/token/ERC721/IERC721Receiver.sol +27 -0
  237. package/contracts/external-deps/openzeppelin/token/ERC721/utils/ERC721Holder.sol +23 -0
  238. package/contracts/external-deps/openzeppelin/utils/Base64.sol +92 -0
  239. package/contracts/external-deps/openzeppelin/utils/Context.sol +24 -0
  240. package/contracts/external-deps/openzeppelin/utils/Counters.sol +43 -0
  241. package/contracts/external-deps/openzeppelin/utils/Create2.sol +58 -0
  242. package/contracts/external-deps/openzeppelin/utils/ERC1155/ERC1155Holder.sol +36 -0
  243. package/contracts/external-deps/openzeppelin/utils/ERC1155/ERC1155Receiver.sol +19 -0
  244. package/contracts/external-deps/openzeppelin/utils/ERC721/ERC721Holder.sol +23 -0
  245. package/contracts/external-deps/openzeppelin/utils/EnumerableSet.sol +367 -0
  246. package/contracts/external-deps/openzeppelin/utils/cryptography/ECDSA.sol +217 -0
  247. package/contracts/external-deps/openzeppelin/utils/cryptography/EIP712.sol +104 -0
  248. package/contracts/external-deps/openzeppelin/utils/math/Math.sol +43 -0
  249. package/contracts/external-deps/openzeppelin/utils/math/SafeCast.sol +241 -0
  250. package/contracts/external-deps/openzeppelin/utils/math/SafeMath.sol +215 -0
  251. package/contracts/external-deps/openzeppelin/utils/structs/EnumerableSet.sol +367 -0
  252. package/contracts/infra/ContractPublisher.sol +268 -0
  253. package/contracts/infra/TWFactory.sol +140 -0
  254. package/contracts/infra/TWFee.sol +162 -0
  255. package/contracts/infra/TWMinimalFactory.sol +47 -0
  256. package/contracts/infra/TWMultichainRegistry.sol +116 -0
  257. package/contracts/infra/TWProxy.sol +42 -0
  258. package/contracts/infra/TWRegistry.sol +70 -0
  259. package/contracts/infra/TWStatelessFactory.sol +47 -0
  260. package/contracts/infra/forwarder/Forwarder.sol +76 -0
  261. package/contracts/infra/forwarder/ForwarderChainlessDomain.sol +90 -0
  262. package/contracts/infra/forwarder/ForwarderConsumer.sol +25 -0
  263. package/contracts/infra/forwarder/ForwarderEOAOnly.sol +23 -0
  264. package/contracts/infra/interface/IContractDeployer.sol +54 -0
  265. package/contracts/infra/interface/IContractPublisher.sol +128 -0
  266. package/contracts/infra/interface/ITWFee.sol +6 -0
  267. package/contracts/infra/interface/ITWMultichainRegistry.sol +28 -0
  268. package/contracts/infra/interface/ITWRegistry.sol +24 -0
  269. package/contracts/infra/interface/IThirdwebContract.sol +19 -0
  270. package/contracts/infra/interface/IWETH.sol +10 -0
  271. package/contracts/infra/registry/entrypoint/TWMultichainRegistryRouter.sol +61 -0
  272. package/contracts/infra/registry/registry-extension/TWMultichainRegistryLogic.sol +120 -0
  273. package/contracts/infra/registry/registry-extension/TWMultichainRegistryStorage.sol +30 -0
  274. package/contracts/legacy-contracts/extension/BatchMintMetadata_V1.sol +89 -0
  275. package/contracts/legacy-contracts/extension/DropSinglePhase1155_V1.sol +268 -0
  276. package/contracts/legacy-contracts/extension/DropSinglePhase_V1.sol +252 -0
  277. package/contracts/legacy-contracts/extension/LazyMintWithTier_V1.sol +112 -0
  278. package/contracts/legacy-contracts/extension/LazyMint_V1.sol +52 -0
  279. package/contracts/legacy-contracts/extension/PlatformFee_V1.sol +69 -0
  280. package/contracts/legacy-contracts/extension/PrimarySale_V1.sol +53 -0
  281. package/contracts/legacy-contracts/extension/interface/IClaimCondition_V1.sol +54 -0
  282. package/contracts/legacy-contracts/extension/interface/IDropSinglePhase1155_V1.sol +58 -0
  283. package/contracts/legacy-contracts/extension/interface/IDropSinglePhase_V1.sol +54 -0
  284. package/contracts/legacy-contracts/extension/interface/IPlatformFee_V1.sol +21 -0
  285. package/contracts/legacy-contracts/extension/interface/IPrimarySale_V1.sol +21 -0
  286. package/contracts/legacy-contracts/interface/ISignatureMintERC721_V1.sol +18 -0
  287. package/contracts/legacy-contracts/interface/drop/IDropClaimCondition_V2.sol +82 -0
  288. package/contracts/legacy-contracts/interface/drop/IDropERC1155_V2.sol +96 -0
  289. package/contracts/legacy-contracts/interface/drop/IDropERC20_V2.sol +73 -0
  290. package/contracts/legacy-contracts/interface/drop/IDropERC721_V3.sol +98 -0
  291. package/contracts/legacy-contracts/pre-builts/DropERC1155_V2.sol +731 -0
  292. package/contracts/legacy-contracts/pre-builts/DropERC20_V2.sol +521 -0
  293. package/contracts/legacy-contracts/pre-builts/DropERC721_V3.sol +745 -0
  294. package/contracts/legacy-contracts/pre-builts/SignatureDrop_V4.sol +360 -0
  295. package/contracts/legacy-contracts/smart-wallet/interface/IAccountPermissions_V1.sol +115 -0
  296. package/contracts/lib/Address.sol +244 -0
  297. package/contracts/lib/BitMaps.sol +52 -0
  298. package/contracts/lib/BytesLib.sol +18 -0
  299. package/contracts/lib/CurrencyTransferLib.sol +96 -0
  300. package/contracts/lib/FeeType.sol +10 -0
  301. package/contracts/lib/MerkleProof.sol +40 -0
  302. package/contracts/lib/NFTMetadataRenderer.sol +91 -0
  303. package/contracts/lib/StorageSlot.sol +54 -0
  304. package/contracts/lib/StringSet.sol +107 -0
  305. package/contracts/lib/Strings.sol +195 -0
  306. package/contracts/prebuilts/account/dynamic/DynamicAccount.sol +48 -0
  307. package/contracts/prebuilts/account/dynamic/DynamicAccountFactory.sol +61 -0
  308. package/contracts/prebuilts/account/interfaces/IAccount.sol +39 -0
  309. package/contracts/prebuilts/account/interfaces/IAccountCore.sol +11 -0
  310. package/contracts/prebuilts/account/interfaces/IAccountExecute.sol +17 -0
  311. package/contracts/prebuilts/account/interfaces/IAccountFactory.sol +16 -0
  312. package/contracts/prebuilts/account/interfaces/IAccountFactoryCore.sol +40 -0
  313. package/contracts/prebuilts/account/interfaces/IAggregator.sol +41 -0
  314. package/contracts/prebuilts/account/interfaces/IEntryPoint.sol +204 -0
  315. package/contracts/prebuilts/account/interfaces/INonceManager.sol +25 -0
  316. package/contracts/prebuilts/account/interfaces/IOracle.sol +10 -0
  317. package/contracts/prebuilts/account/interfaces/IPaymaster.sol +63 -0
  318. package/contracts/prebuilts/account/interfaces/IStakeManager.sol +94 -0
  319. package/contracts/prebuilts/account/interfaces/PackedUserOperation.sol +28 -0
  320. package/contracts/prebuilts/account/managed/ManagedAccount.sol +33 -0
  321. package/contracts/prebuilts/account/managed/ManagedAccountFactory.sol +68 -0
  322. package/contracts/prebuilts/account/non-upgradeable/Account.sol +169 -0
  323. package/contracts/prebuilts/account/non-upgradeable/AccountFactory.sol +54 -0
  324. package/contracts/prebuilts/account/token-bound-account/TokenBoundAccount.sol +252 -0
  325. package/contracts/prebuilts/account/token-bound-account/erc6551-utils/ERC6551AccountLib.sol +44 -0
  326. package/contracts/prebuilts/account/token-bound-account/erc6551-utils/ERC6551BytecodeLib.sol +20 -0
  327. package/contracts/prebuilts/account/token-bound-account/erc6551-utils/IERC6551Account.sol +51 -0
  328. package/contracts/prebuilts/account/token-paymaster/BasePaymaster.sol +151 -0
  329. package/contracts/prebuilts/account/token-paymaster/TokenPaymaster.sol +212 -0
  330. package/contracts/prebuilts/account/utils/AccountCore.sol +245 -0
  331. package/contracts/prebuilts/account/utils/AccountCoreStorage.sol +21 -0
  332. package/contracts/prebuilts/account/utils/AccountExtension.sol +172 -0
  333. package/contracts/prebuilts/account/utils/AccountSeaportBulkSigSupport.sol +40 -0
  334. package/contracts/prebuilts/account/utils/BaseAccount.sol +106 -0
  335. package/contracts/prebuilts/account/utils/BaseAccountFactory.sol +168 -0
  336. package/contracts/prebuilts/account/utils/EntryPoint.sol +725 -0
  337. package/contracts/prebuilts/account/utils/Exec.sol +56 -0
  338. package/contracts/prebuilts/account/utils/Helpers.sol +88 -0
  339. package/contracts/prebuilts/account/utils/NonceManager.sol +39 -0
  340. package/contracts/prebuilts/account/utils/OracleHelper.sol +154 -0
  341. package/contracts/prebuilts/account/utils/SenderCreator.sol +28 -0
  342. package/contracts/prebuilts/account/utils/StakeManager.sol +126 -0
  343. package/contracts/prebuilts/account/utils/TokenCallbackHandler.sol +55 -0
  344. package/contracts/prebuilts/account/utils/UniswapHelper.sol +119 -0
  345. package/contracts/prebuilts/account/utils/UserOperationLib.sol +127 -0
  346. package/contracts/prebuilts/airdrop/Airdrop.sol +616 -0
  347. package/contracts/prebuilts/drop/DropERC1155.sol +388 -0
  348. package/contracts/prebuilts/drop/DropERC20.sol +262 -0
  349. package/contracts/prebuilts/drop/DropERC721.sol +397 -0
  350. package/contracts/prebuilts/evolving-nfts/EvolvingNFT.sol +101 -0
  351. package/contracts/prebuilts/evolving-nfts/EvolvingNFTLogic.sol +251 -0
  352. package/contracts/prebuilts/evolving-nfts/extension/RulesEngineExtension.sol +26 -0
  353. package/contracts/prebuilts/interface/ILoyaltyCard.sol +27 -0
  354. package/contracts/prebuilts/interface/ILoyaltyPoints.sol +24 -0
  355. package/contracts/prebuilts/interface/IMultiwrap.sol +49 -0
  356. package/contracts/prebuilts/interface/IPack.sol +69 -0
  357. package/contracts/prebuilts/interface/IPackVRFDirect.sol +85 -0
  358. package/contracts/prebuilts/interface/airdrop/IAirdropERC1155.sol +45 -0
  359. package/contracts/prebuilts/interface/airdrop/IAirdropERC1155Claimable.sol +40 -0
  360. package/contracts/prebuilts/interface/airdrop/IAirdropERC20.sol +46 -0
  361. package/contracts/prebuilts/interface/airdrop/IAirdropERC20Claimable.sol +33 -0
  362. package/contracts/prebuilts/interface/airdrop/IAirdropERC721.sol +42 -0
  363. package/contracts/prebuilts/interface/airdrop/IAirdropERC721Claimable.sol +33 -0
  364. package/contracts/prebuilts/interface/drop/IDropClaimCondition.sol +82 -0
  365. package/contracts/prebuilts/interface/drop/IDropERC1155.sol +92 -0
  366. package/contracts/prebuilts/interface/drop/IDropERC20.sol +68 -0
  367. package/contracts/prebuilts/interface/drop/IDropERC721.sol +94 -0
  368. package/contracts/prebuilts/interface/marketplace/IMarketplace.sol +329 -0
  369. package/contracts/prebuilts/interface/staking/IEditionStake.sol +45 -0
  370. package/contracts/prebuilts/interface/staking/INFTStake.sol +45 -0
  371. package/contracts/prebuilts/interface/staking/ITokenStake.sol +46 -0
  372. package/contracts/prebuilts/interface/token/ITokenERC1155.sol +84 -0
  373. package/contracts/prebuilts/interface/token/ITokenERC20.sol +68 -0
  374. package/contracts/prebuilts/interface/token/ITokenERC721.sol +77 -0
  375. package/contracts/prebuilts/loyalty/LoyaltyCard.sol +339 -0
  376. package/contracts/prebuilts/marketplace/IMarketplace.sol +512 -0
  377. package/contracts/prebuilts/marketplace/direct-listings/DirectListingsLogic.sol +579 -0
  378. package/contracts/prebuilts/marketplace/direct-listings/DirectListingsStorage.sol +30 -0
  379. package/contracts/prebuilts/marketplace/english-auctions/EnglishAuctionsLogic.sol +546 -0
  380. package/contracts/prebuilts/marketplace/english-auctions/EnglishAuctionsStorage.sol +30 -0
  381. package/contracts/prebuilts/marketplace/entrypoint/MarketplaceV3.sol +184 -0
  382. package/contracts/prebuilts/marketplace/offers/OffersLogic.sol +358 -0
  383. package/contracts/prebuilts/marketplace/offers/OffersStorage.sol +28 -0
  384. package/contracts/prebuilts/marketplace-legacy/Marketplace.sol +907 -0
  385. package/contracts/prebuilts/multiwrap/Multiwrap.sol +264 -0
  386. package/contracts/prebuilts/open-edition/OpenEditionERC721.sol +268 -0
  387. package/contracts/prebuilts/open-edition/OpenEditionERC721FlatFee.sol +298 -0
  388. package/contracts/prebuilts/pack/Pack.sol +463 -0
  389. package/contracts/prebuilts/pack/PackVRFDirect.sol +516 -0
  390. package/contracts/prebuilts/signature-drop/SignatureDrop.sol +371 -0
  391. package/contracts/prebuilts/split/Split.sol +182 -0
  392. package/contracts/prebuilts/staking/EditionStake.sol +211 -0
  393. package/contracts/prebuilts/staking/NFTStake.sol +201 -0
  394. package/contracts/prebuilts/staking/TokenStake.sol +197 -0
  395. package/contracts/prebuilts/tiered-drop/TieredDrop.sol +607 -0
  396. package/contracts/prebuilts/token/TokenERC1155.sol +576 -0
  397. package/contracts/prebuilts/token/TokenERC20.sol +312 -0
  398. package/contracts/prebuilts/token/TokenERC721.sol +469 -0
  399. package/contracts/prebuilts/unaudited/airdrop/AirdropERC1155.sol +154 -0
  400. package/contracts/prebuilts/unaudited/airdrop/AirdropERC1155Claimable.sol +199 -0
  401. package/contracts/prebuilts/unaudited/airdrop/AirdropERC20.sol +194 -0
  402. package/contracts/prebuilts/unaudited/airdrop/AirdropERC20Claimable.sol +180 -0
  403. package/contracts/prebuilts/unaudited/airdrop/AirdropERC721.sol +143 -0
  404. package/contracts/prebuilts/unaudited/airdrop/AirdropERC721Claimable.sol +197 -0
  405. package/contracts/prebuilts/unaudited/burn-to-claim-drop/BurnToClaimDropERC721.sol +137 -0
  406. package/contracts/prebuilts/unaudited/burn-to-claim-drop/extension/BurnToClaimDrop721Logic.sol +362 -0
  407. package/contracts/prebuilts/unaudited/burn-to-claim-drop/extension/BurnToClaimDrop721Storage.sol +21 -0
  408. package/contracts/prebuilts/unaudited/contract-builder/CoreRouter.sol +60 -0
  409. package/contracts/prebuilts/unaudited/contract-builder/extension/PermissionOverride.sol +52 -0
  410. package/contracts/prebuilts/unaudited/loyalty/LoyaltyPoints.sol +249 -0
  411. package/contracts/prebuilts/vote/VoteERC20.sol +167 -0
  412. package/js/DropERC1155.d.ts +1198 -0
  413. package/js/DropERC1155.js +2 -0
  414. package/js/DropERC1155.js.map +1 -0
  415. package/js/DropERC721.d.ts +1247 -0
  416. package/js/DropERC721.js +2 -0
  417. package/js/DropERC721.js.map +1 -0
  418. package/js/OpenEditionERC721FlatFee.d.ts +1207 -0
  419. package/js/OpenEditionERC721FlatFee.js +2 -0
  420. package/js/OpenEditionERC721FlatFee.js.map +1 -0
  421. package/js/common.d.ts +22 -0
  422. package/js/common.js +2 -0
  423. package/js/common.js.map +1 -0
  424. package/js/factories/DropERC1155__factory.d.ts +1751 -0
  425. package/js/factories/DropERC1155__factory.js +2279 -0
  426. package/js/factories/DropERC1155__factory.js.map +1 -0
  427. package/js/factories/DropERC721__factory.d.ts +1826 -0
  428. package/js/factories/DropERC721__factory.js +2380 -0
  429. package/js/factories/DropERC721__factory.js.map +1 -0
  430. package/js/factories/OpenEditionERC721FlatFee__factory.d.ts +1707 -0
  431. package/js/factories/OpenEditionERC721FlatFee__factory.js +2219 -0
  432. package/js/factories/OpenEditionERC721FlatFee__factory.js.map +1 -0
  433. package/js/factories/index.d.ts +1 -0
  434. package/js/factories/index.js +5 -0
  435. package/js/factories/index.js.map +1 -0
  436. package/js/index.d.ts +3 -0
  437. package/js/index.js +3 -0
  438. package/js/index.js.map +1 -0
  439. package/package.json +74 -0
@@ -0,0 +1,73 @@
1
+ // SPDX-License-Identifier: Apache 2.0
2
+ pragma solidity ^0.8.0;
3
+
4
+ /// @author thirdweb
5
+
6
+ import "./interface/IOperatorFilterRegistry.sol";
7
+ import "./OperatorFilterToggle.sol";
8
+
9
+ /**
10
+ * @title OperatorFilterer
11
+ * @notice Abstract contract whose constructor automatically registers and optionally subscribes to or copies another
12
+ * registrant's entries in the OperatorFilterRegistry.
13
+ * @dev This smart contract is meant to be inherited by token contracts so they can use the following:
14
+ * - `onlyAllowedOperator` modifier for `transferFrom` and `safeTransferFrom` methods.
15
+ * - `onlyAllowedOperatorApproval` modifier for `approve` and `setApprovalForAll` methods.
16
+ */
17
+
18
+ abstract contract OperatorFilterer is OperatorFilterToggle {
19
+ error OperatorNotAllowed(address operator);
20
+
21
+ IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY =
22
+ IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);
23
+
24
+ constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {
25
+ // If an inheriting token contract is deployed to a network without the registry deployed, the modifier
26
+ // will not revert, but the contract will need to be registered with the registry once it is deployed in
27
+ // order for the modifier to filter addresses.
28
+ _register(subscriptionOrRegistrantToCopy, subscribe);
29
+ }
30
+
31
+ modifier onlyAllowedOperator(address from) virtual {
32
+ // Allow spending tokens from addresses with balance
33
+ // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred
34
+ // from an EOA.
35
+ if (from != msg.sender) {
36
+ _checkFilterOperator(msg.sender);
37
+ }
38
+ _;
39
+ }
40
+
41
+ modifier onlyAllowedOperatorApproval(address operator) virtual {
42
+ _checkFilterOperator(operator);
43
+ _;
44
+ }
45
+
46
+ function _checkFilterOperator(address operator) internal view virtual {
47
+ // Check registry code length to facilitate testing in environments without a deployed registry.
48
+ if (operatorRestriction) {
49
+ if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
50
+ if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), operator)) {
51
+ revert OperatorNotAllowed(operator);
52
+ }
53
+ }
54
+ }
55
+ }
56
+
57
+ function _register(address subscriptionOrRegistrantToCopy, bool subscribe) internal {
58
+ // Is the registry deployed?
59
+ if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
60
+ // Is the subscription contract deployed?
61
+ if (address(subscriptionOrRegistrantToCopy).code.length > 0) {
62
+ // Do we want to subscribe?
63
+ if (subscribe) {
64
+ OPERATOR_FILTER_REGISTRY.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy);
65
+ } else {
66
+ OPERATOR_FILTER_REGISTRY.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy);
67
+ }
68
+ } else {
69
+ OPERATOR_FILTER_REGISTRY.register(address(this));
70
+ }
71
+ }
72
+ }
73
+ }
@@ -0,0 +1,69 @@
1
+ // SPDX-License-Identifier: Apache 2.0
2
+ pragma solidity ^0.8.0;
3
+
4
+ /// @author thirdweb
5
+
6
+ import "./interface/IOperatorFilterRegistry.sol";
7
+ import "./OperatorFilterToggle.sol";
8
+
9
+ abstract contract OperatorFiltererUpgradeable is OperatorFilterToggle {
10
+ error OperatorNotAllowed(address operator);
11
+
12
+ IOperatorFilterRegistry constant OPERATOR_FILTER_REGISTRY =
13
+ IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);
14
+
15
+ function __OperatorFilterer_init(address subscriptionOrRegistrantToCopy, bool subscribe) internal {
16
+ // If an inheriting token contract is deployed to a network without the registry deployed, the modifier
17
+ // will not revert, but the contract will need to be registered with the registry once it is deployed in
18
+ // order for the modifier to filter addresses.
19
+ _register(subscriptionOrRegistrantToCopy, subscribe);
20
+ }
21
+
22
+ modifier onlyAllowedOperator(address from) virtual {
23
+ // Check registry code length to facilitate testing in environments without a deployed registry.
24
+ if (operatorRestriction) {
25
+ if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
26
+ // Allow spending tokens from addresses with balance
27
+ // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred
28
+ // from an EOA.
29
+ if (from == msg.sender) {
30
+ _;
31
+ return;
32
+ }
33
+ if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), msg.sender)) {
34
+ revert OperatorNotAllowed(msg.sender);
35
+ }
36
+ }
37
+ }
38
+ _;
39
+ }
40
+
41
+ modifier onlyAllowedOperatorApproval(address operator) virtual {
42
+ // Check registry code length to facilitate testing in environments without a deployed registry.
43
+ if (operatorRestriction) {
44
+ if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
45
+ if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), operator)) {
46
+ revert OperatorNotAllowed(operator);
47
+ }
48
+ }
49
+ }
50
+ _;
51
+ }
52
+
53
+ function _register(address subscriptionOrRegistrantToCopy, bool subscribe) internal {
54
+ // Is the registry deployed?
55
+ if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
56
+ // Is the subscription contract deployed?
57
+ if (address(subscriptionOrRegistrantToCopy).code.length > 0) {
58
+ // Do we want to subscribe?
59
+ if (subscribe) {
60
+ OPERATOR_FILTER_REGISTRY.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy);
61
+ } else {
62
+ OPERATOR_FILTER_REGISTRY.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy);
63
+ }
64
+ } else {
65
+ OPERATOR_FILTER_REGISTRY.register(address(this));
66
+ }
67
+ }
68
+ }
69
+ }
@@ -0,0 +1,58 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.0;
3
+
4
+ /// @author thirdweb
5
+
6
+ import "./interface/IOwnable.sol";
7
+
8
+ /**
9
+ * @title Ownable
10
+ * @notice Thirdweb's `Ownable` is a contract extension to be used with any base contract. It exposes functions for setting and reading
11
+ * who the 'owner' of the inheriting smart contract is, and lets the inheriting contract perform conditional logic that uses
12
+ * information about who the contract's owner is.
13
+ */
14
+
15
+ abstract contract Ownable is IOwnable {
16
+ /// @dev The sender is not authorized to perform the action
17
+ error OwnableUnauthorized();
18
+
19
+ /// @dev Owner of the contract (purpose: OpenSea compatibility)
20
+ address private _owner;
21
+
22
+ /// @dev Reverts if caller is not the owner.
23
+ modifier onlyOwner() {
24
+ if (msg.sender != _owner) {
25
+ revert OwnableUnauthorized();
26
+ }
27
+ _;
28
+ }
29
+
30
+ /**
31
+ * @notice Returns the owner of the contract.
32
+ */
33
+ function owner() public view override returns (address) {
34
+ return _owner;
35
+ }
36
+
37
+ /**
38
+ * @notice Lets an authorized wallet set a new owner for the contract.
39
+ * @param _newOwner The address to set as the new owner of the contract.
40
+ */
41
+ function setOwner(address _newOwner) external override {
42
+ if (!_canSetOwner()) {
43
+ revert OwnableUnauthorized();
44
+ }
45
+ _setupOwner(_newOwner);
46
+ }
47
+
48
+ /// @dev Lets a contract admin set a new owner for the contract. The new owner must be a contract admin.
49
+ function _setupOwner(address _newOwner) internal {
50
+ address _prevOwner = _owner;
51
+ _owner = _newOwner;
52
+
53
+ emit OwnerUpdated(_prevOwner, _newOwner);
54
+ }
55
+
56
+ /// @dev Returns whether owner can be set in the given execution context.
57
+ function _canSetOwner() internal view virtual returns (bool);
58
+ }
@@ -0,0 +1,159 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.0;
3
+
4
+ /// @author thirdweb
5
+
6
+ import "./interface/IPermissions.sol";
7
+ import "../lib/Strings.sol";
8
+
9
+ /**
10
+ * @title Permissions
11
+ * @dev This contracts provides extending-contracts with role-based access control mechanisms
12
+ */
13
+ contract Permissions is IPermissions {
14
+ /// @dev The `account` is missing a role.
15
+ error PermissionsUnauthorizedAccount(address account, bytes32 neededRole);
16
+
17
+ /// @dev The `account` already is a holder of `role`
18
+ error PermissionsAlreadyGranted(address account, bytes32 role);
19
+
20
+ /// @dev Invalid priviledge to revoke
21
+ error PermissionsInvalidPermission(address expected, address actual);
22
+
23
+ /// @dev Map from keccak256 hash of a role => a map from address => whether address has role.
24
+ mapping(bytes32 => mapping(address => bool)) private _hasRole;
25
+
26
+ /// @dev Map from keccak256 hash of a role to role admin. See {getRoleAdmin}.
27
+ mapping(bytes32 => bytes32) private _getRoleAdmin;
28
+
29
+ /// @dev Default admin role for all roles. Only accounts with this role can grant/revoke other roles.
30
+ bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
31
+
32
+ /// @dev Modifier that checks if an account has the specified role; reverts otherwise.
33
+ modifier onlyRole(bytes32 role) {
34
+ _checkRole(role, msg.sender);
35
+ _;
36
+ }
37
+
38
+ /**
39
+ * @notice Checks whether an account has a particular role.
40
+ * @dev Returns `true` if `account` has been granted `role`.
41
+ *
42
+ * @param role keccak256 hash of the role. e.g. keccak256("TRANSFER_ROLE")
43
+ * @param account Address of the account for which the role is being checked.
44
+ */
45
+ function hasRole(bytes32 role, address account) public view override returns (bool) {
46
+ return _hasRole[role][account];
47
+ }
48
+
49
+ /**
50
+ * @notice Checks whether an account has a particular role;
51
+ * role restrictions can be swtiched on and off.
52
+ *
53
+ * @dev Returns `true` if `account` has been granted `role`.
54
+ * Role restrictions can be swtiched on and off:
55
+ * - If address(0) has ROLE, then the ROLE restrictions
56
+ * don't apply.
57
+ * - If address(0) does not have ROLE, then the ROLE
58
+ * restrictions will apply.
59
+ *
60
+ * @param role keccak256 hash of the role. e.g. keccak256("TRANSFER_ROLE")
61
+ * @param account Address of the account for which the role is being checked.
62
+ */
63
+ function hasRoleWithSwitch(bytes32 role, address account) public view returns (bool) {
64
+ if (!_hasRole[role][address(0)]) {
65
+ return _hasRole[role][account];
66
+ }
67
+
68
+ return true;
69
+ }
70
+
71
+ /**
72
+ * @notice Returns the admin role that controls the specified role.
73
+ * @dev See {grantRole} and {revokeRole}.
74
+ * To change a role's admin, use {_setRoleAdmin}.
75
+ *
76
+ * @param role keccak256 hash of the role. e.g. keccak256("TRANSFER_ROLE")
77
+ */
78
+ function getRoleAdmin(bytes32 role) external view override returns (bytes32) {
79
+ return _getRoleAdmin[role];
80
+ }
81
+
82
+ /**
83
+ * @notice Grants a role to an account, if not previously granted.
84
+ * @dev Caller must have admin role for the `role`.
85
+ * Emits {RoleGranted Event}.
86
+ *
87
+ * @param role keccak256 hash of the role. e.g. keccak256("TRANSFER_ROLE")
88
+ * @param account Address of the account to which the role is being granted.
89
+ */
90
+ function grantRole(bytes32 role, address account) public virtual override {
91
+ _checkRole(_getRoleAdmin[role], msg.sender);
92
+ if (_hasRole[role][account]) {
93
+ revert PermissionsAlreadyGranted(account, role);
94
+ }
95
+ _setupRole(role, account);
96
+ }
97
+
98
+ /**
99
+ * @notice Revokes role from an account.
100
+ * @dev Caller must have admin role for the `role`.
101
+ * Emits {RoleRevoked Event}.
102
+ *
103
+ * @param role keccak256 hash of the role. e.g. keccak256("TRANSFER_ROLE")
104
+ * @param account Address of the account from which the role is being revoked.
105
+ */
106
+ function revokeRole(bytes32 role, address account) public virtual override {
107
+ _checkRole(_getRoleAdmin[role], msg.sender);
108
+ _revokeRole(role, account);
109
+ }
110
+
111
+ /**
112
+ * @notice Revokes role from the account.
113
+ * @dev Caller must have the `role`, with caller being the same as `account`.
114
+ * Emits {RoleRevoked Event}.
115
+ *
116
+ * @param role keccak256 hash of the role. e.g. keccak256("TRANSFER_ROLE")
117
+ * @param account Address of the account from which the role is being revoked.
118
+ */
119
+ function renounceRole(bytes32 role, address account) public virtual override {
120
+ if (msg.sender != account) {
121
+ revert PermissionsInvalidPermission(msg.sender, account);
122
+ }
123
+ _revokeRole(role, account);
124
+ }
125
+
126
+ /// @dev Sets `adminRole` as `role`'s admin role.
127
+ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
128
+ bytes32 previousAdminRole = _getRoleAdmin[role];
129
+ _getRoleAdmin[role] = adminRole;
130
+ emit RoleAdminChanged(role, previousAdminRole, adminRole);
131
+ }
132
+
133
+ /// @dev Sets up `role` for `account`
134
+ function _setupRole(bytes32 role, address account) internal virtual {
135
+ _hasRole[role][account] = true;
136
+ emit RoleGranted(role, account, msg.sender);
137
+ }
138
+
139
+ /// @dev Revokes `role` from `account`
140
+ function _revokeRole(bytes32 role, address account) internal virtual {
141
+ _checkRole(role, account);
142
+ delete _hasRole[role][account];
143
+ emit RoleRevoked(role, account, msg.sender);
144
+ }
145
+
146
+ /// @dev Checks `role` for `account`. Reverts with a message including the required role.
147
+ function _checkRole(bytes32 role, address account) internal view virtual {
148
+ if (!_hasRole[role][account]) {
149
+ revert PermissionsUnauthorizedAccount(account, role);
150
+ }
151
+ }
152
+
153
+ /// @dev Checks `role` for `account`. Reverts with a message including the required role.
154
+ function _checkRoleWithSwitch(bytes32 role, address account) internal view virtual {
155
+ if (!hasRoleWithSwitch(role, account)) {
156
+ revert PermissionsUnauthorizedAccount(account, role);
157
+ }
158
+ }
159
+ }
@@ -0,0 +1,111 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.0;
3
+
4
+ /// @author thirdweb
5
+
6
+ import "./interface/IPermissionsEnumerable.sol";
7
+ import "./Permissions.sol";
8
+
9
+ /**
10
+ * @title PermissionsEnumerable
11
+ * @dev This contracts provides extending-contracts with role-based access control mechanisms.
12
+ * Also provides interfaces to view all members with a given role, and total count of members.
13
+ */
14
+ contract PermissionsEnumerable is IPermissionsEnumerable, Permissions {
15
+ /**
16
+ * @notice A data structure to store data of members for a given role.
17
+ *
18
+ * @param index Current index in the list of accounts that have a role.
19
+ * @param members map from index => address of account that has a role
20
+ * @param indexOf map from address => index which the account has.
21
+ */
22
+ struct RoleMembers {
23
+ uint256 index;
24
+ mapping(uint256 => address) members;
25
+ mapping(address => uint256) indexOf;
26
+ }
27
+
28
+ /// @dev map from keccak256 hash of a role to its members' data. See {RoleMembers}.
29
+ mapping(bytes32 => RoleMembers) private roleMembers;
30
+
31
+ /**
32
+ * @notice Returns the role-member from a list of members for a role,
33
+ * at a given index.
34
+ * @dev Returns `member` who has `role`, at `index` of role-members list.
35
+ * See struct {RoleMembers}, and mapping {roleMembers}
36
+ *
37
+ * @param role keccak256 hash of the role. e.g. keccak256("TRANSFER_ROLE")
38
+ * @param index Index in list of current members for the role.
39
+ *
40
+ * @return member Address of account that has `role`
41
+ */
42
+ function getRoleMember(bytes32 role, uint256 index) external view override returns (address member) {
43
+ uint256 currentIndex = roleMembers[role].index;
44
+ uint256 check;
45
+
46
+ for (uint256 i = 0; i < currentIndex; i += 1) {
47
+ if (roleMembers[role].members[i] != address(0)) {
48
+ if (check == index) {
49
+ member = roleMembers[role].members[i];
50
+ return member;
51
+ }
52
+ check += 1;
53
+ } else if (hasRole(role, address(0)) && i == roleMembers[role].indexOf[address(0)]) {
54
+ check += 1;
55
+ }
56
+ }
57
+ }
58
+
59
+ /**
60
+ * @notice Returns total number of accounts that have a role.
61
+ * @dev Returns `count` of accounts that have `role`.
62
+ * See struct {RoleMembers}, and mapping {roleMembers}
63
+ *
64
+ * @param role keccak256 hash of the role. e.g. keccak256("TRANSFER_ROLE")
65
+ *
66
+ * @return count Total number of accounts that have `role`
67
+ */
68
+ function getRoleMemberCount(bytes32 role) external view override returns (uint256 count) {
69
+ uint256 currentIndex = roleMembers[role].index;
70
+
71
+ for (uint256 i = 0; i < currentIndex; i += 1) {
72
+ if (roleMembers[role].members[i] != address(0)) {
73
+ count += 1;
74
+ }
75
+ }
76
+ if (hasRole(role, address(0))) {
77
+ count += 1;
78
+ }
79
+ }
80
+
81
+ /// @dev Revokes `role` from `account`, and removes `account` from {roleMembers}
82
+ /// See {_removeMember}
83
+ function _revokeRole(bytes32 role, address account) internal override {
84
+ super._revokeRole(role, account);
85
+ _removeMember(role, account);
86
+ }
87
+
88
+ /// @dev Grants `role` to `account`, and adds `account` to {roleMembers}
89
+ /// See {_addMember}
90
+ function _setupRole(bytes32 role, address account) internal override {
91
+ super._setupRole(role, account);
92
+ _addMember(role, account);
93
+ }
94
+
95
+ /// @dev adds `account` to {roleMembers}, for `role`
96
+ function _addMember(bytes32 role, address account) internal {
97
+ uint256 idx = roleMembers[role].index;
98
+ roleMembers[role].index += 1;
99
+
100
+ roleMembers[role].members[idx] = account;
101
+ roleMembers[role].indexOf[account] = idx;
102
+ }
103
+
104
+ /// @dev removes `account` from {roleMembers}, for `role`
105
+ function _removeMember(bytes32 role, address account) internal {
106
+ uint256 idx = roleMembers[role].indexOf[account];
107
+
108
+ delete roleMembers[role].members[idx];
109
+ delete roleMembers[role].indexOf[account];
110
+ }
111
+ }
@@ -0,0 +1,117 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.0;
3
+
4
+ /// @author thirdweb
5
+
6
+ import "./interface/IPlatformFee.sol";
7
+
8
+ /**
9
+ * @title Platform Fee
10
+ * @notice Thirdweb's `PlatformFee` is a contract extension to be used with any base contract. It exposes functions for setting and reading
11
+ * the recipient of platform fee and the platform fee basis points, and lets the inheriting contract perform conditional logic
12
+ * that uses information about platform fees, if desired.
13
+ */
14
+
15
+ abstract contract PlatformFee is IPlatformFee {
16
+ /// @dev The sender is not authorized to perform the action
17
+ error PlatformFeeUnauthorized();
18
+
19
+ /// @dev The recipient is invalid
20
+ error PlatformFeeInvalidRecipient(address recipient);
21
+
22
+ /// @dev The fee bps exceeded the max value
23
+ error PlatformFeeExceededMaxFeeBps(uint256 max, uint256 actual);
24
+
25
+ /// @dev The address that receives all platform fees from all sales.
26
+ address private platformFeeRecipient;
27
+
28
+ /// @dev The % of primary sales collected as platform fees.
29
+ uint16 private platformFeeBps;
30
+
31
+ /// @dev Fee type variants: percentage fee and flat fee
32
+ PlatformFeeType private platformFeeType;
33
+
34
+ /// @dev The flat amount collected by the contract as fees on primary sales.
35
+ uint256 private flatPlatformFee;
36
+
37
+ /// @dev Returns the platform fee recipient and bps.
38
+ function getPlatformFeeInfo() public view override returns (address, uint16) {
39
+ return (platformFeeRecipient, uint16(platformFeeBps));
40
+ }
41
+
42
+ /// @dev Returns the platform fee bps and recipient.
43
+ function getFlatPlatformFeeInfo() public view returns (address, uint256) {
44
+ return (platformFeeRecipient, flatPlatformFee);
45
+ }
46
+
47
+ /// @dev Returns the platform fee type.
48
+ function getPlatformFeeType() public view returns (PlatformFeeType) {
49
+ return platformFeeType;
50
+ }
51
+
52
+ /**
53
+ * @notice Updates the platform fee recipient and bps.
54
+ * @dev Caller should be authorized to set platform fee info.
55
+ * See {_canSetPlatformFeeInfo}.
56
+ * Emits {PlatformFeeInfoUpdated Event}; See {_setupPlatformFeeInfo}.
57
+ *
58
+ * @param _platformFeeRecipient Address to be set as new platformFeeRecipient.
59
+ * @param _platformFeeBps Updated platformFeeBps.
60
+ */
61
+ function setPlatformFeeInfo(address _platformFeeRecipient, uint256 _platformFeeBps) external override {
62
+ if (!_canSetPlatformFeeInfo()) {
63
+ revert PlatformFeeUnauthorized();
64
+ }
65
+ _setupPlatformFeeInfo(_platformFeeRecipient, _platformFeeBps);
66
+ }
67
+
68
+ /// @dev Sets the platform fee recipient and bps
69
+ function _setupPlatformFeeInfo(address _platformFeeRecipient, uint256 _platformFeeBps) internal {
70
+ if (_platformFeeBps > 10_000) {
71
+ revert PlatformFeeExceededMaxFeeBps(10_000, _platformFeeBps);
72
+ }
73
+ if (_platformFeeRecipient == address(0)) {
74
+ revert PlatformFeeInvalidRecipient(_platformFeeRecipient);
75
+ }
76
+
77
+ platformFeeBps = uint16(_platformFeeBps);
78
+ platformFeeRecipient = _platformFeeRecipient;
79
+
80
+ emit PlatformFeeInfoUpdated(_platformFeeRecipient, _platformFeeBps);
81
+ }
82
+
83
+ /// @notice Lets a module admin set a flat fee on primary sales.
84
+ function setFlatPlatformFeeInfo(address _platformFeeRecipient, uint256 _flatFee) external {
85
+ if (!_canSetPlatformFeeInfo()) {
86
+ revert PlatformFeeUnauthorized();
87
+ }
88
+
89
+ _setupFlatPlatformFeeInfo(_platformFeeRecipient, _flatFee);
90
+ }
91
+
92
+ /// @dev Sets a flat fee on primary sales.
93
+ function _setupFlatPlatformFeeInfo(address _platformFeeRecipient, uint256 _flatFee) internal {
94
+ flatPlatformFee = _flatFee;
95
+ platformFeeRecipient = _platformFeeRecipient;
96
+
97
+ emit FlatPlatformFeeUpdated(_platformFeeRecipient, _flatFee);
98
+ }
99
+
100
+ /// @notice Lets a module admin set platform fee type.
101
+ function setPlatformFeeType(PlatformFeeType _feeType) external {
102
+ if (!_canSetPlatformFeeInfo()) {
103
+ revert PlatformFeeUnauthorized();
104
+ }
105
+ _setupPlatformFeeType(_feeType);
106
+ }
107
+
108
+ /// @dev Sets platform fee type.
109
+ function _setupPlatformFeeType(PlatformFeeType _feeType) internal {
110
+ platformFeeType = _feeType;
111
+
112
+ emit PlatformFeeTypeUpdated(_feeType);
113
+ }
114
+
115
+ /// @dev Returns whether platform fee info can be set in the given execution context.
116
+ function _canSetPlatformFeeInfo() internal view virtual returns (bool);
117
+ }
@@ -0,0 +1,57 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.0;
3
+
4
+ /// @author thirdweb
5
+
6
+ import "./interface/IPrimarySale.sol";
7
+
8
+ /**
9
+ * @title Primary Sale
10
+ * @notice Thirdweb's `PrimarySale` is a contract extension to be used with any base contract. It exposes functions for setting and reading
11
+ * the recipient of primary sales, and lets the inheriting contract perform conditional logic that uses information about
12
+ * primary sales, if desired.
13
+ */
14
+
15
+ abstract contract PrimarySale is IPrimarySale {
16
+ /// @dev The sender is not authorized to perform the action
17
+ error PrimarySaleUnauthorized();
18
+
19
+ /// @dev The recipient is invalid
20
+ error PrimarySaleInvalidRecipient(address recipient);
21
+
22
+ /// @dev The address that receives all primary sales value.
23
+ address private recipient;
24
+
25
+ /// @dev Returns primary sale recipient address.
26
+ function primarySaleRecipient() public view override returns (address) {
27
+ return recipient;
28
+ }
29
+
30
+ /**
31
+ * @notice Updates primary sale recipient.
32
+ * @dev Caller should be authorized to set primary sales info.
33
+ * See {_canSetPrimarySaleRecipient}.
34
+ * Emits {PrimarySaleRecipientUpdated Event}; See {_setupPrimarySaleRecipient}.
35
+ *
36
+ * @param _saleRecipient Address to be set as new recipient of primary sales.
37
+ */
38
+ function setPrimarySaleRecipient(address _saleRecipient) external override {
39
+ if (!_canSetPrimarySaleRecipient()) {
40
+ revert PrimarySaleUnauthorized();
41
+ }
42
+ _setupPrimarySaleRecipient(_saleRecipient);
43
+ }
44
+
45
+ /// @dev Lets a contract admin set the recipient for all primary sales.
46
+ function _setupPrimarySaleRecipient(address _saleRecipient) internal {
47
+ if (_saleRecipient == address(0)) {
48
+ revert PrimarySaleInvalidRecipient(_saleRecipient);
49
+ }
50
+
51
+ recipient = _saleRecipient;
52
+ emit PrimarySaleRecipientUpdated(_saleRecipient);
53
+ }
54
+
55
+ /// @dev Returns whether primary sale recipient can be set in the given execution context.
56
+ function _canSetPrimarySaleRecipient() internal view virtual returns (bool);
57
+ }