@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,140 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.11;
3
+
4
+ /// @author thirdweb
5
+
6
+ // $$\ $$\ $$\ $$\ $$\
7
+ // $$ | $$ | \__| $$ | $$ |
8
+ // $$$$$$\ $$$$$$$\ $$\ $$$$$$\ $$$$$$$ |$$\ $$\ $$\ $$$$$$\ $$$$$$$\
9
+ // \_$$ _| $$ __$$\ $$ |$$ __$$\ $$ __$$ |$$ | $$ | $$ |$$ __$$\ $$ __$$\
10
+ // $$ | $$ | $$ |$$ |$$ | \__|$$ / $$ |$$ | $$ | $$ |$$$$$$$$ |$$ | $$ |
11
+ // $$ |$$\ $$ | $$ |$$ |$$ | $$ | $$ |$$ | $$ | $$ |$$ ____|$$ | $$ |
12
+ // \$$$$ |$$ | $$ |$$ |$$ | \$$$$$$$ |\$$$$$\$$$$ |\$$$$$$$\ $$$$$$$ |
13
+ // \____/ \__| \__|\__|\__| \_______| \_____\____/ \_______|\_______/
14
+
15
+ import { TWRegistry } from "./TWRegistry.sol";
16
+ import "./interface/IThirdwebContract.sol";
17
+ import "../extension/interface/IContractFactory.sol";
18
+
19
+ import { AccessControlEnumerable, Context } from "@openzeppelin/contracts/access/AccessControlEnumerable.sol";
20
+ import { ERC2771Context } from "../external-deps/openzeppelin/metatx/ERC2771Context.sol";
21
+ import { Create2 } from "@openzeppelin/contracts/utils/Create2.sol";
22
+ import { Multicall } from "../extension/Multicall.sol";
23
+ import "@openzeppelin/contracts/utils/Address.sol";
24
+ import { Clones } from "@openzeppelin/contracts/proxy/Clones.sol";
25
+
26
+ contract TWFactory is Multicall, ERC2771Context, AccessControlEnumerable, IContractFactory {
27
+ /// @dev Only FACTORY_ROLE holders can approve/unapprove implementations for proxies to point to.
28
+ bytes32 public constant FACTORY_ROLE = keccak256("FACTORY_ROLE");
29
+
30
+ TWRegistry public immutable registry;
31
+
32
+ /// @dev Emitted when a proxy is deployed.
33
+ event ProxyDeployed(address indexed implementation, address proxy, address indexed deployer);
34
+ event ImplementationAdded(address implementation, bytes32 indexed contractType, uint256 version);
35
+ event ImplementationApproved(address implementation, bool isApproved);
36
+
37
+ /// @dev mapping of implementation address to deployment approval
38
+ mapping(address => bool) public approval;
39
+
40
+ /// @dev mapping of implementation address to implementation added version
41
+ mapping(bytes32 => uint256) public currentVersion;
42
+
43
+ /// @dev mapping of contract type to module version to implementation address
44
+ mapping(bytes32 => mapping(uint256 => address)) public implementation;
45
+
46
+ /// @dev mapping of proxy address to deployer address
47
+ mapping(address => address) public deployer;
48
+
49
+ constructor(address[] memory _trustedForwarders, address _registry) ERC2771Context(_trustedForwarders) {
50
+ _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
51
+ _setupRole(FACTORY_ROLE, _msgSender());
52
+
53
+ registry = TWRegistry(_registry);
54
+ }
55
+
56
+ /// @dev Deploys a proxy that points to the latest version of the given contract type.
57
+ function deployProxy(bytes32 _type, bytes memory _data) external returns (address) {
58
+ bytes32 salt = bytes32(registry.count(_msgSender()));
59
+ return deployProxyDeterministic(_type, _data, salt);
60
+ }
61
+
62
+ /**
63
+ * @dev Deploys a proxy at a deterministic address by taking in `salt` as a parameter.
64
+ * Proxy points to the latest version of the given contract type.
65
+ */
66
+ function deployProxyDeterministic(bytes32 _type, bytes memory _data, bytes32 _salt) public returns (address) {
67
+ address _implementation = implementation[_type][currentVersion[_type]];
68
+ return deployProxyByImplementation(_implementation, _data, _salt);
69
+ }
70
+
71
+ /// @dev Deploys a proxy that points to the given implementation.
72
+ function deployProxyByImplementation(
73
+ address _implementation,
74
+ bytes memory _data,
75
+ bytes32 _salt
76
+ ) public override returns (address deployedProxy) {
77
+ require(approval[_implementation], "implementation not approved");
78
+
79
+ bytes32 salthash = keccak256(abi.encodePacked(_msgSender(), _salt));
80
+ deployedProxy = Clones.cloneDeterministic(_implementation, salthash);
81
+
82
+ deployer[deployedProxy] = _msgSender();
83
+
84
+ emit ProxyDeployed(_implementation, deployedProxy, _msgSender());
85
+
86
+ registry.add(_msgSender(), deployedProxy);
87
+
88
+ if (_data.length > 0) {
89
+ // slither-disable-next-line unused-return
90
+ Address.functionCall(deployedProxy, _data);
91
+ }
92
+ }
93
+
94
+ /// @dev Lets a contract admin set the address of a contract type x version.
95
+ function addImplementation(address _implementation) external {
96
+ require(hasRole(FACTORY_ROLE, _msgSender()), "not admin.");
97
+
98
+ IThirdwebContract module = IThirdwebContract(_implementation);
99
+
100
+ bytes32 ctype = module.contractType();
101
+ require(ctype.length > 0, "invalid module");
102
+
103
+ uint8 version = module.contractVersion();
104
+ uint8 currentVersionOfType = uint8(currentVersion[ctype]);
105
+ require(version >= currentVersionOfType, "wrong module version");
106
+
107
+ currentVersion[ctype] = version;
108
+ implementation[ctype][version] = _implementation;
109
+ approval[_implementation] = true;
110
+
111
+ emit ImplementationAdded(_implementation, ctype, version);
112
+ }
113
+
114
+ /// @dev Lets a contract admin approve a specific contract for deployment.
115
+ function approveImplementation(address _implementation, bool _toApprove) external {
116
+ require(hasRole(FACTORY_ROLE, _msgSender()), "not admin.");
117
+
118
+ approval[_implementation] = _toApprove;
119
+
120
+ emit ImplementationApproved(_implementation, _toApprove);
121
+ }
122
+
123
+ /// @dev Returns the implementation given a contract type and version.
124
+ function getImplementation(bytes32 _type, uint256 _version) external view returns (address) {
125
+ return implementation[_type][_version];
126
+ }
127
+
128
+ /// @dev Returns the latest implementation given a contract type.
129
+ function getLatestImplementation(bytes32 _type) external view returns (address) {
130
+ return implementation[_type][currentVersion[_type]];
131
+ }
132
+
133
+ function _msgSender() internal view virtual override(Context, ERC2771Context, Multicall) returns (address sender) {
134
+ return ERC2771Context._msgSender();
135
+ }
136
+
137
+ function _msgData() internal view virtual override(Context, ERC2771Context) returns (bytes calldata) {
138
+ return ERC2771Context._msgData();
139
+ }
140
+ }
@@ -0,0 +1,162 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.11;
3
+
4
+ /// @author thirdweb
5
+
6
+ import "./TWFactory.sol";
7
+ import "./interface/ITWFee.sol";
8
+
9
+ import "@openzeppelin/contracts/access/AccessControlEnumerable.sol";
10
+ import { Multicall } from "../extension/Multicall.sol";
11
+ import "../external-deps/openzeppelin/metatx/ERC2771Context.sol";
12
+
13
+ interface IFeeTierPlacementExtension {
14
+ /// @dev Returns the fee tier for a given proxy contract address and proxy deployer address.
15
+ function getFeeTier(
16
+ address deployer,
17
+ address proxy
18
+ ) external view returns (uint128 tierId, uint128 validUntilTimestamp);
19
+ }
20
+
21
+ contract TWFee is ITWFee, Multicall, ERC2771Context, AccessControlEnumerable, IFeeTierPlacementExtension {
22
+ /// @dev The factory for deploying contracts.
23
+ TWFactory public immutable factory;
24
+
25
+ /// @dev The maximum threshold for fees. 1%
26
+ uint256 public constant MAX_FEE_BPS = 100;
27
+
28
+ /// @dev TIER_FEE_ROLE holders can create tiers.
29
+ bytes32 private constant TIER_FEE_ROLE = keccak256("TIER_FEE_ROLE");
30
+
31
+ /// @dev TIER_CONTROLLER_ROLE holders can assign tiers to deployer or proxy.
32
+ bytes32 private constant TIER_CONTROLLER_ROLE = keccak256("TIER_CONTROLLER_ROLE");
33
+
34
+ /// @dev Mapping from proxy contract or proxy deployer address => pricing tier.
35
+ mapping(address => Tier) private tier;
36
+
37
+ /// @dev Mapping from pricing tier id => Fee Type (lib/FeeType.sol) => FeeInfo
38
+ mapping(uint256 => mapping(uint256 => FeeInfo)) public feeInfo;
39
+
40
+ /// @dev If we want to extend the logic for fee tier placement, we
41
+ /// could easily points it to a different extension implementation.
42
+ IFeeTierPlacementExtension public tierPlacementExtension;
43
+
44
+ struct Tier {
45
+ uint128 id;
46
+ uint128 validUntilTimestamp;
47
+ }
48
+
49
+ struct FeeInfo {
50
+ uint256 bps;
51
+ address recipient;
52
+ }
53
+
54
+ /// @dev Events
55
+ event TierUpdated(address indexed proxyOrDeployer, uint256 tierId, uint256 validUntilTimestamp);
56
+ event FeeTierUpdated(uint256 indexed tierId, uint256 indexed feeType, address recipient, uint256 bps);
57
+
58
+ constructor(address[] memory _trustedForwarders, address _factory) ERC2771Context(_trustedForwarders) {
59
+ factory = TWFactory(_factory);
60
+
61
+ _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
62
+ _setupRole(TIER_FEE_ROLE, _msgSender());
63
+ _setupRole(TIER_CONTROLLER_ROLE, _msgSender());
64
+ }
65
+
66
+ function setFeeTierPlacementExtension(address _extension) public onlyRole(DEFAULT_ADMIN_ROLE) {
67
+ tierPlacementExtension = IFeeTierPlacementExtension(_extension);
68
+ }
69
+
70
+ /// @dev Returns the fee tier for a proxy deployer wallet or contract address.
71
+ function getFeeTier(
72
+ address _deployer,
73
+ address _proxy
74
+ ) public view override returns (uint128 tierId, uint128 validUntilTimestamp) {
75
+ Tier memory targetTier = tier[_proxy];
76
+ if (block.timestamp <= targetTier.validUntilTimestamp) {
77
+ tierId = targetTier.id;
78
+ validUntilTimestamp = targetTier.validUntilTimestamp;
79
+ } else {
80
+ tierId = 0;
81
+ validUntilTimestamp = 0;
82
+ }
83
+
84
+ // if the proxy doesn't have a tier, then look up the deployer's tier
85
+ if (tierId == 0 && validUntilTimestamp == 0) {
86
+ targetTier = tier[_deployer];
87
+ if (block.timestamp <= targetTier.validUntilTimestamp) {
88
+ tierId = targetTier.id;
89
+ validUntilTimestamp = targetTier.validUntilTimestamp;
90
+ } else {
91
+ tierId = 0;
92
+ validUntilTimestamp = 0;
93
+ }
94
+ }
95
+ }
96
+
97
+ /// @dev Returns the fee info for a given module and fee type.
98
+ function getFeeInfo(address _proxy, uint256 _feeType) external view returns (address recipient, uint256 bps) {
99
+ address deployer = factory.deployer(_proxy);
100
+ uint128 tierId = 0;
101
+ uint128 validUntilTimestamp = 0;
102
+
103
+ if (address(tierPlacementExtension) != address(0)) {
104
+ // https://github.com/crytic/slither/issues/982
105
+ // slither-disable-next-line unused-return
106
+ try tierPlacementExtension.getFeeTier(deployer, _proxy) returns (
107
+ // slither-disable-next-line uninitialized-local,variable-scope
108
+ uint128 retTierId,
109
+ // slither-disable-next-line uninitialized-local,variable-scope
110
+ uint128 retValidUntilTimestamp
111
+ ) {
112
+ tierId = retTierId;
113
+ validUntilTimestamp = retValidUntilTimestamp;
114
+ // solhint-disable-next-line no-empty-blocks
115
+ } catch {}
116
+ }
117
+
118
+ // if extension doesn't return a tier, then we fetch the local states
119
+ if (tierId == 0 && validUntilTimestamp == 0) {
120
+ (tierId, ) = getFeeTier(deployer, _proxy);
121
+ }
122
+
123
+ FeeInfo memory targetFeeInfo = feeInfo[tierId][_feeType];
124
+ (recipient, bps) = (targetFeeInfo.recipient, targetFeeInfo.bps);
125
+ }
126
+
127
+ /// @dev Lets a TIER_CONTROLLER_ROLE holder assign a tier to a proxy deployer.
128
+ function setTier(
129
+ address _proxyOrDeployer,
130
+ uint128 _tierId,
131
+ uint128 _validUntilTimestamp
132
+ ) external onlyRole(TIER_CONTROLLER_ROLE) {
133
+ tier[_proxyOrDeployer] = Tier({ id: _tierId, validUntilTimestamp: _validUntilTimestamp });
134
+
135
+ emit TierUpdated(_proxyOrDeployer, _tierId, _validUntilTimestamp);
136
+ }
137
+
138
+ /// @dev Lets the admin set fee bps and recipient for the given pricing tier and fee type.
139
+ function setFeeInfoForTier(
140
+ uint256 _tierId,
141
+ uint256 _feeBps,
142
+ address _feeRecipient,
143
+ uint256 _feeType
144
+ ) external onlyRole(TIER_FEE_ROLE) {
145
+ require(_feeBps <= MAX_FEE_BPS, "fee too high.");
146
+
147
+ FeeInfo memory feeInfoToSet = FeeInfo({ bps: _feeBps, recipient: _feeRecipient });
148
+ feeInfo[_tierId][_feeType] = feeInfoToSet;
149
+
150
+ emit FeeTierUpdated(_tierId, _feeType, _feeRecipient, _feeBps);
151
+ }
152
+
153
+ // ===== Getters =====
154
+
155
+ function _msgSender() internal view virtual override(Context, ERC2771Context, Multicall) returns (address sender) {
156
+ return ERC2771Context._msgSender();
157
+ }
158
+
159
+ function _msgData() internal view virtual override(Context, ERC2771Context) returns (bytes calldata) {
160
+ return ERC2771Context._msgData();
161
+ }
162
+ }
@@ -0,0 +1,47 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.11;
3
+
4
+ /// @author thirdweb
5
+
6
+ // $$\ $$\ $$\ $$\ $$\
7
+ // $$ | $$ | \__| $$ | $$ |
8
+ // $$$$$$\ $$$$$$$\ $$\ $$$$$$\ $$$$$$$ |$$\ $$\ $$\ $$$$$$\ $$$$$$$\
9
+ // \_$$ _| $$ __$$\ $$ |$$ __$$\ $$ __$$ |$$ | $$ | $$ |$$ __$$\ $$ __$$\
10
+ // $$ | $$ | $$ |$$ |$$ | \__|$$ / $$ |$$ | $$ | $$ |$$$$$$$$ |$$ | $$ |
11
+ // $$ |$$\ $$ | $$ |$$ |$$ | $$ | $$ |$$ | $$ | $$ |$$ ____|$$ | $$ |
12
+ // \$$$$ |$$ | $$ |$$ |$$ | \$$$$$$$ |\$$$$$\$$$$ |\$$$$$$$\ $$$$$$$ |
13
+ // \____/ \__| \__|\__|\__| \_______| \_____\____/ \_______|\_______/
14
+
15
+ import "@openzeppelin/contracts/utils/Address.sol";
16
+ import "@openzeppelin/contracts/proxy/Clones.sol";
17
+
18
+ contract TWMinimalFactory {
19
+ /// @dev Deploys a proxy that points to the given implementation.
20
+ constructor(address _implementation, bytes memory _data, bytes32 _salt) payable {
21
+ address instance;
22
+ bytes32 salthash = keccak256(abi.encodePacked(msg.sender, _salt));
23
+ assembly {
24
+ let ptr := mload(0x40)
25
+ mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
26
+ mstore(add(ptr, 0x14), shl(0x60, _implementation))
27
+ mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
28
+ instance := create2(0, ptr, 0x37, salthash)
29
+ }
30
+
31
+ if (_data.length > 0) {
32
+ // instance.call{ value: msg.value }(_data);
33
+
34
+ // solhint-disable-next-line avoid-low-level-calls
35
+ (bool success, bytes memory result) = instance.call{ value: msg.value }(_data);
36
+
37
+ if (!success) {
38
+ // Next 5 lines from https://ethereum.stackexchange.com/a/83577
39
+ if (result.length < 68) revert("Transaction reverted silently");
40
+ assembly {
41
+ result := add(result, 0x04)
42
+ }
43
+ revert(abi.decode(result, (string)));
44
+ }
45
+ }
46
+ }
47
+ }
@@ -0,0 +1,116 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.11;
3
+
4
+ /// @author thirdweb
5
+
6
+ // $$\ $$\ $$\ $$\ $$\
7
+ // $$ | $$ | \__| $$ | $$ |
8
+ // $$$$$$\ $$$$$$$\ $$\ $$$$$$\ $$$$$$$ |$$\ $$\ $$\ $$$$$$\ $$$$$$$\
9
+ // \_$$ _| $$ __$$\ $$ |$$ __$$\ $$ __$$ |$$ | $$ | $$ |$$ __$$\ $$ __$$\
10
+ // $$ | $$ | $$ |$$ |$$ | \__|$$ / $$ |$$ | $$ | $$ |$$$$$$$$ |$$ | $$ |
11
+ // $$ |$$\ $$ | $$ |$$ |$$ | $$ | $$ |$$ | $$ | $$ |$$ ____|$$ | $$ |
12
+ // \$$$$ |$$ | $$ |$$ |$$ | \$$$$$$$ |\$$$$$\$$$$ |\$$$$$$$\ $$$$$$$ |
13
+ // \____/ \__| \__|\__|\__| \_______| \_____\____/ \_______|\_______/
14
+
15
+ import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
16
+ import "@openzeppelin/contracts/access/AccessControlEnumerable.sol";
17
+ import "../extension/Multicall.sol";
18
+ import "../external-deps/openzeppelin/metatx/ERC2771Context.sol";
19
+
20
+ import "./interface/ITWMultichainRegistry.sol";
21
+
22
+ contract TWMultichainRegistry is ITWMultichainRegistry, Multicall, ERC2771Context, AccessControlEnumerable {
23
+ bytes32 public constant OPERATOR_ROLE = keccak256("OPERATOR_ROLE");
24
+
25
+ using EnumerableSet for EnumerableSet.AddressSet;
26
+ using EnumerableSet for EnumerableSet.UintSet;
27
+
28
+ /// @dev wallet address => [contract addresses]
29
+ mapping(address => mapping(uint256 => EnumerableSet.AddressSet)) private deployments;
30
+ /// @dev contract address deployed => imported metadata uri
31
+ mapping(uint256 => mapping(address => string)) private addressToMetadataUri;
32
+
33
+ EnumerableSet.UintSet private chainIds;
34
+
35
+ constructor(address[] memory _trustedForwarders) ERC2771Context(_trustedForwarders) {
36
+ _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
37
+ }
38
+
39
+ // slither-disable-next-line similar-names
40
+ function add(address _deployer, address _deployment, uint256 _chainId, string memory metadataUri) external {
41
+ require(hasRole(OPERATOR_ROLE, _msgSender()) || _deployer == _msgSender(), "not operator or deployer.");
42
+
43
+ bool added = deployments[_deployer][_chainId].add(_deployment);
44
+ require(added, "failed to add");
45
+
46
+ chainIds.add(_chainId);
47
+
48
+ if (bytes(metadataUri).length > 0) {
49
+ addressToMetadataUri[_chainId][_deployment] = metadataUri;
50
+ }
51
+
52
+ emit Added(_deployer, _deployment, _chainId, metadataUri);
53
+ }
54
+
55
+ // slither-disable-next-line similar-names
56
+ function remove(address _deployer, address _deployment, uint256 _chainId) external {
57
+ require(hasRole(OPERATOR_ROLE, _msgSender()) || _deployer == _msgSender(), "not operator or deployer.");
58
+
59
+ bool removed = deployments[_deployer][_chainId].remove(_deployment);
60
+ require(removed, "failed to remove");
61
+
62
+ emit Deleted(_deployer, _deployment, _chainId);
63
+ }
64
+
65
+ function getAll(address _deployer) external view returns (Deployment[] memory allDeployments) {
66
+ uint256 totalDeployments;
67
+ uint256 chainIdsLen = chainIds.length();
68
+
69
+ for (uint256 i = 0; i < chainIdsLen; i += 1) {
70
+ uint256 chainId = chainIds.at(i);
71
+
72
+ totalDeployments += deployments[_deployer][chainId].length();
73
+ }
74
+
75
+ allDeployments = new Deployment[](totalDeployments);
76
+ uint256 idx;
77
+
78
+ for (uint256 j = 0; j < chainIdsLen; j += 1) {
79
+ uint256 chainId = chainIds.at(j);
80
+
81
+ uint256 len = deployments[_deployer][chainId].length();
82
+ address[] memory deploymentAddrs = deployments[_deployer][chainId].values();
83
+
84
+ for (uint256 k = 0; k < len; k += 1) {
85
+ allDeployments[idx] = Deployment({
86
+ deploymentAddress: deploymentAddrs[k],
87
+ chainId: chainId,
88
+ metadataURI: addressToMetadataUri[chainId][deploymentAddrs[k]]
89
+ });
90
+ idx += 1;
91
+ }
92
+ }
93
+ }
94
+
95
+ function count(address _deployer) external view returns (uint256 deploymentCount) {
96
+ uint256 chainIdsLen = chainIds.length();
97
+
98
+ for (uint256 i = 0; i < chainIdsLen; i += 1) {
99
+ uint256 chainId = chainIds.at(i);
100
+
101
+ deploymentCount += deployments[_deployer][chainId].length();
102
+ }
103
+ }
104
+
105
+ function getMetadataUri(uint256 _chainId, address _deployment) external view returns (string memory metadataUri) {
106
+ metadataUri = addressToMetadataUri[_chainId][_deployment];
107
+ }
108
+
109
+ function _msgSender() internal view virtual override(Context, ERC2771Context, Multicall) returns (address sender) {
110
+ return ERC2771Context._msgSender();
111
+ }
112
+
113
+ function _msgData() internal view virtual override(Context, ERC2771Context) returns (bytes calldata) {
114
+ return ERC2771Context._msgData();
115
+ }
116
+ }
@@ -0,0 +1,42 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.11;
3
+
4
+ /// @author thirdweb
5
+
6
+ // $$\ $$\ $$\ $$\ $$\
7
+ // $$ | $$ | \__| $$ | $$ |
8
+ // $$$$$$\ $$$$$$$\ $$\ $$$$$$\ $$$$$$$ |$$\ $$\ $$\ $$$$$$\ $$$$$$$\
9
+ // \_$$ _| $$ __$$\ $$ |$$ __$$\ $$ __$$ |$$ | $$ | $$ |$$ __$$\ $$ __$$\
10
+ // $$ | $$ | $$ |$$ |$$ | \__|$$ / $$ |$$ | $$ | $$ |$$$$$$$$ |$$ | $$ |
11
+ // $$ |$$\ $$ | $$ |$$ |$$ | $$ | $$ |$$ | $$ | $$ |$$ ____|$$ | $$ |
12
+ // \$$$$ |$$ | $$ |$$ |$$ | \$$$$$$$ |\$$$$$\$$$$ |\$$$$$$$\ $$$$$$$ |
13
+ // \____/ \__| \__|\__|\__| \_______| \_____\____/ \_______|\_______/
14
+
15
+ import "@openzeppelin/contracts/proxy/Proxy.sol";
16
+ import "@openzeppelin/contracts/utils/Address.sol";
17
+ import "@openzeppelin/contracts/utils/StorageSlot.sol";
18
+
19
+ contract TWProxy is Proxy {
20
+ /**
21
+ * @dev Storage slot with the address of the current implementation.
22
+ * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is
23
+ * validated in the constructor.
24
+ */
25
+ bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
26
+
27
+ constructor(address _logic, bytes memory _data) payable {
28
+ assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1));
29
+ StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = _logic;
30
+ if (_data.length > 0) {
31
+ // slither-disable-next-line unused-return
32
+ Address.functionDelegateCall(_logic, _data);
33
+ }
34
+ }
35
+
36
+ /**
37
+ * @dev Returns the current implementation address.
38
+ */
39
+ function _implementation() internal view override returns (address impl) {
40
+ return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
41
+ }
42
+ }
@@ -0,0 +1,70 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.11;
3
+
4
+ /// @author thirdweb
5
+
6
+ // $$\ $$\ $$\ $$\ $$\
7
+ // $$ | $$ | \__| $$ | $$ |
8
+ // $$$$$$\ $$$$$$$\ $$\ $$$$$$\ $$$$$$$ |$$\ $$\ $$\ $$$$$$\ $$$$$$$\
9
+ // \_$$ _| $$ __$$\ $$ |$$ __$$\ $$ __$$ |$$ | $$ | $$ |$$ __$$\ $$ __$$\
10
+ // $$ | $$ | $$ |$$ |$$ | \__|$$ / $$ |$$ | $$ | $$ |$$$$$$$$ |$$ | $$ |
11
+ // $$ |$$\ $$ | $$ |$$ |$$ | $$ | $$ |$$ | $$ | $$ |$$ ____|$$ | $$ |
12
+ // \$$$$ |$$ | $$ |$$ |$$ | \$$$$$$$ |\$$$$$\$$$$ |\$$$$$$$\ $$$$$$$ |
13
+ // \____/ \__| \__|\__|\__| \_______| \_____\____/ \_______|\_______/
14
+
15
+ import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
16
+ import "@openzeppelin/contracts/access/AccessControlEnumerable.sol";
17
+ import "../extension/Multicall.sol";
18
+ import "../external-deps/openzeppelin/metatx/ERC2771Context.sol";
19
+
20
+ contract TWRegistry is Multicall, ERC2771Context, AccessControlEnumerable {
21
+ bytes32 public constant OPERATOR_ROLE = keccak256("OPERATOR_ROLE");
22
+
23
+ using EnumerableSet for EnumerableSet.AddressSet;
24
+
25
+ /// @dev wallet address => [contract addresses]
26
+ mapping(address => EnumerableSet.AddressSet) private deployments;
27
+
28
+ event Added(address indexed deployer, address indexed deployment);
29
+ event Deleted(address indexed deployer, address indexed deployment);
30
+
31
+ constructor(address[] memory _trustedForwarders) ERC2771Context(_trustedForwarders) {
32
+ _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
33
+ }
34
+
35
+ // slither-disable-next-line similar-names
36
+ function add(address _deployer, address _deployment) external {
37
+ require(hasRole(OPERATOR_ROLE, _msgSender()) || _deployer == _msgSender(), "not operator or deployer.");
38
+
39
+ bool added = deployments[_deployer].add(_deployment);
40
+ require(added, "failed to add");
41
+
42
+ emit Added(_deployer, _deployment);
43
+ }
44
+
45
+ // slither-disable-next-line similar-names
46
+ function remove(address _deployer, address _deployment) external {
47
+ require(hasRole(OPERATOR_ROLE, _msgSender()) || _deployer == _msgSender(), "not operator or deployer.");
48
+
49
+ bool removed = deployments[_deployer].remove(_deployment);
50
+ require(removed, "failed to remove");
51
+
52
+ emit Deleted(_deployer, _deployment);
53
+ }
54
+
55
+ function getAll(address _deployer) external view returns (address[] memory) {
56
+ return deployments[_deployer].values();
57
+ }
58
+
59
+ function count(address _deployer) external view returns (uint256) {
60
+ return deployments[_deployer].length();
61
+ }
62
+
63
+ function _msgSender() internal view virtual override(Context, ERC2771Context, Multicall) returns (address sender) {
64
+ return ERC2771Context._msgSender();
65
+ }
66
+
67
+ function _msgData() internal view virtual override(Context, ERC2771Context) returns (bytes calldata) {
68
+ return ERC2771Context._msgData();
69
+ }
70
+ }
@@ -0,0 +1,47 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.11;
3
+
4
+ /// @author thirdweb
5
+
6
+ // $$\ $$\ $$\ $$\ $$\
7
+ // $$ | $$ | \__| $$ | $$ |
8
+ // $$$$$$\ $$$$$$$\ $$\ $$$$$$\ $$$$$$$ |$$\ $$\ $$\ $$$$$$\ $$$$$$$\
9
+ // \_$$ _| $$ __$$\ $$ |$$ __$$\ $$ __$$ |$$ | $$ | $$ |$$ __$$\ $$ __$$\
10
+ // $$ | $$ | $$ |$$ |$$ | \__|$$ / $$ |$$ | $$ | $$ |$$$$$$$$ |$$ | $$ |
11
+ // $$ |$$\ $$ | $$ |$$ |$$ | $$ | $$ |$$ | $$ | $$ |$$ ____|$$ | $$ |
12
+ // \$$$$ |$$ | $$ |$$ |$$ | \$$$$$$$ |\$$$$$\$$$$ |\$$$$$$$\ $$$$$$$ |
13
+ // \____/ \__| \__|\__|\__| \_______| \_____\____/ \_______|\_______/
14
+
15
+ import "../extension/interface/IContractFactory.sol";
16
+
17
+ import "../external-deps/openzeppelin/metatx/ERC2771Context.sol";
18
+ import "../extension/Multicall.sol";
19
+ import "@openzeppelin/contracts/proxy/Clones.sol";
20
+
21
+ contract TWStatelessFactory is Multicall, ERC2771Context, IContractFactory {
22
+ /// @dev Emitted when a proxy is deployed.
23
+ event ProxyDeployed(address indexed implementation, address proxy, address indexed deployer);
24
+
25
+ constructor(address[] memory _trustedForwarders) ERC2771Context(_trustedForwarders) {}
26
+
27
+ /// @dev Deploys a proxy that points to the given implementation.
28
+ function deployProxyByImplementation(
29
+ address _implementation,
30
+ bytes memory _data,
31
+ bytes32 _salt
32
+ ) public override returns (address deployedProxy) {
33
+ bytes32 salthash = keccak256(abi.encodePacked(_msgSender(), _salt));
34
+ deployedProxy = Clones.cloneDeterministic(_implementation, salthash);
35
+
36
+ emit ProxyDeployed(_implementation, deployedProxy, _msgSender());
37
+
38
+ if (_data.length > 0) {
39
+ // slither-disable-next-line unused-return
40
+ Address.functionCall(deployedProxy, _data);
41
+ }
42
+ }
43
+
44
+ function _msgSender() internal view virtual override(Multicall, ERC2771Context) returns (address sender) {
45
+ return ERC2771Context._msgSender();
46
+ }
47
+ }