@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,246 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity ^0.8.0;
4
+
5
+ import "./ERC20Permit.sol";
6
+
7
+ import "../../../utils/math/Math.sol";
8
+ import "../../../governance/utils/IVotes.sol";
9
+ import "../../../utils/math/SafeCast.sol";
10
+
11
+ /**
12
+ * @dev Extension of ERC20 to support Compound-like voting and delegation. This version is more generic than Compound's,
13
+ * and supports token supply up to 2^224^ - 1, while COMP is limited to 2^96^ - 1.
14
+ *
15
+ * NOTE: If exact COMP compatibility is required, use the {ERC20VotesComp} variant of this module.
16
+ *
17
+ * This extension keeps a history (checkpoints) of each account's vote power. Vote power can be delegated either
18
+ * by calling the {delegate} function directly, or by providing a signature to be used with {delegateBySig}. Voting
19
+ * power can be queried through the public accessors {getVotes} and {getPastVotes}.
20
+ *
21
+ * By default, token balance does not account for voting power. This makes transfers cheaper. The downside is that it
22
+ * requires users to delegate to themselves in order to activate checkpoints and have their voting power tracked.
23
+ *
24
+ * _Available since v4.2._
25
+ */
26
+ abstract contract ERC20Votes is IVotes, ERC20Permit {
27
+ struct Checkpoint {
28
+ uint32 fromBlock;
29
+ uint224 votes;
30
+ }
31
+
32
+ bytes32 private constant _DELEGATION_TYPEHASH =
33
+ keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");
34
+
35
+ mapping(address => address) private _delegates;
36
+ mapping(address => Checkpoint[]) private _checkpoints;
37
+ Checkpoint[] private _totalSupplyCheckpoints;
38
+
39
+ /**
40
+ * @dev Get the `pos`-th checkpoint for `account`.
41
+ */
42
+ function checkpoints(address account, uint32 pos) public view virtual returns (Checkpoint memory) {
43
+ return _checkpoints[account][pos];
44
+ }
45
+
46
+ /**
47
+ * @dev Get number of checkpoints for `account`.
48
+ */
49
+ function numCheckpoints(address account) public view virtual returns (uint32) {
50
+ return SafeCast.toUint32(_checkpoints[account].length);
51
+ }
52
+
53
+ /**
54
+ * @dev Get the address `account` is currently delegating to.
55
+ */
56
+ function delegates(address account) public view virtual override returns (address) {
57
+ return _delegates[account];
58
+ }
59
+
60
+ /**
61
+ * @dev Gets the current votes balance for `account`
62
+ */
63
+ function getVotes(address account) public view virtual override returns (uint256) {
64
+ uint256 pos = _checkpoints[account].length;
65
+ return pos == 0 ? 0 : _checkpoints[account][pos - 1].votes;
66
+ }
67
+
68
+ /**
69
+ * @dev Retrieve the number of votes for `account` at the end of `blockNumber`.
70
+ *
71
+ * Requirements:
72
+ *
73
+ * - `blockNumber` must have been already mined
74
+ */
75
+ function getPastVotes(address account, uint256 blockNumber) public view virtual override returns (uint256) {
76
+ require(blockNumber < block.number, "ERC20Votes: block not yet mined");
77
+ return _checkpointsLookup(_checkpoints[account], blockNumber);
78
+ }
79
+
80
+ /**
81
+ * @dev Retrieve the `totalSupply` at the end of `blockNumber`. Note, this value is the sum of all balances.
82
+ * It is but NOT the sum of all the delegated votes!
83
+ *
84
+ * Requirements:
85
+ *
86
+ * - `blockNumber` must have been already mined
87
+ */
88
+ function getPastTotalSupply(uint256 blockNumber) public view virtual override returns (uint256) {
89
+ require(blockNumber < block.number, "ERC20Votes: block not yet mined");
90
+ return _checkpointsLookup(_totalSupplyCheckpoints, blockNumber);
91
+ }
92
+
93
+ /**
94
+ * @dev Lookup a value in a list of (sorted) checkpoints.
95
+ */
96
+ function _checkpointsLookup(Checkpoint[] storage ckpts, uint256 blockNumber) private view returns (uint256) {
97
+ // We run a binary search to look for the earliest checkpoint taken after `blockNumber`.
98
+ //
99
+ // During the loop, the index of the wanted checkpoint remains in the range [low-1, high).
100
+ // With each iteration, either `low` or `high` is moved towards the middle of the range to maintain the invariant.
101
+ // - If the middle checkpoint is after `blockNumber`, we look in [low, mid)
102
+ // - If the middle checkpoint is before or equal to `blockNumber`, we look in [mid+1, high)
103
+ // Once we reach a single value (when low == high), we've found the right checkpoint at the index high-1, if not
104
+ // out of bounds (in which case we're looking too far in the past and the result is 0).
105
+ // Note that if the latest checkpoint available is exactly for `blockNumber`, we end up with an index that is
106
+ // past the end of the array, so we technically don't find a checkpoint after `blockNumber`, but it works out
107
+ // the same.
108
+ uint256 high = ckpts.length;
109
+ uint256 low = 0;
110
+ while (low < high) {
111
+ uint256 mid = Math.average(low, high);
112
+ if (ckpts[mid].fromBlock > blockNumber) {
113
+ high = mid;
114
+ } else {
115
+ low = mid + 1;
116
+ }
117
+ }
118
+
119
+ return high == 0 ? 0 : ckpts[high - 1].votes;
120
+ }
121
+
122
+ /**
123
+ * @dev Delegate votes from the sender to `delegatee`.
124
+ */
125
+ function delegate(address delegatee) public virtual override {
126
+ // _delegate(_msgSender(), delegatee); //check
127
+ _delegate(_msgSender(), delegatee);
128
+ }
129
+
130
+ /*//////////////////////////////////////////////////////////////
131
+ Voting - delegation by signature
132
+ //////////////////////////////////////////////////////////////*/
133
+
134
+ /**
135
+ * @dev Delegates votes from signer to `delegatee`
136
+ */
137
+ function delegateBySig(
138
+ address delegatee,
139
+ uint256 nonce,
140
+ uint256 expiry,
141
+ uint8 v,
142
+ bytes32 r,
143
+ bytes32 s
144
+ ) public virtual override {
145
+ require(block.timestamp <= expiry, "ERC20Votes: signature expired");
146
+
147
+ bytes32 structHash = keccak256(abi.encode(_DELEGATION_TYPEHASH, delegatee, nonce, expiry));
148
+ bytes32 hash = ECDSA.toTypedDataHash(DOMAIN_SEPARATOR(), structHash);
149
+ address signer = ECDSA.recover(hash, v, r, s);
150
+
151
+ require(nonce == _useNonce(signer), "ERC20Votes: invalid nonce");
152
+ _delegate(signer, delegatee);
153
+ }
154
+
155
+ /**
156
+ * @dev Maximum token supply. Defaults to `type(uint224).max` (2^224^ - 1).
157
+ */
158
+ function _maxSupply() internal view virtual returns (uint224) {
159
+ return type(uint224).max;
160
+ }
161
+
162
+ /**
163
+ * @dev Snapshots the totalSupply after it has been increased.
164
+ */
165
+ function _mint(address account, uint256 amount) internal virtual override {
166
+ super._mint(account, amount);
167
+ require(totalSupply() <= _maxSupply(), "ERC20Votes: total supply risks overflowing votes");
168
+
169
+ _writeCheckpoint(_totalSupplyCheckpoints, _add, amount);
170
+ }
171
+
172
+ /**
173
+ * @dev Snapshots the totalSupply after it has been decreased.
174
+ */
175
+ function _burn(address account, uint256 amount) internal virtual override {
176
+ super._burn(account, amount);
177
+
178
+ _writeCheckpoint(_totalSupplyCheckpoints, _subtract, amount);
179
+ }
180
+
181
+ /**
182
+ * @dev Move voting power when tokens are transferred.
183
+ *
184
+ * Emits a {DelegateVotesChanged} event.
185
+ */
186
+ function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual override {
187
+ super._afterTokenTransfer(from, to, amount);
188
+
189
+ _moveVotingPower(delegates(from), delegates(to), amount);
190
+ }
191
+
192
+ /**
193
+ * @dev Change delegation for `delegator` to `delegatee`.
194
+ *
195
+ * Emits events {DelegateChanged} and {DelegateVotesChanged}.
196
+ */
197
+ function _delegate(address delegator, address delegatee) internal virtual {
198
+ address currentDelegate = delegates(delegator);
199
+ uint256 delegatorBalance = balanceOf(delegator);
200
+ _delegates[delegator] = delegatee;
201
+
202
+ emit DelegateChanged(delegator, currentDelegate, delegatee);
203
+
204
+ _moveVotingPower(currentDelegate, delegatee, delegatorBalance);
205
+ }
206
+
207
+ function _moveVotingPower(address src, address dst, uint256 amount) private {
208
+ if (src != dst && amount > 0) {
209
+ if (src != address(0)) {
210
+ (uint256 oldWeight, uint256 newWeight) = _writeCheckpoint(_checkpoints[src], _subtract, amount);
211
+ emit DelegateVotesChanged(src, oldWeight, newWeight);
212
+ }
213
+
214
+ if (dst != address(0)) {
215
+ (uint256 oldWeight, uint256 newWeight) = _writeCheckpoint(_checkpoints[dst], _add, amount);
216
+ emit DelegateVotesChanged(dst, oldWeight, newWeight);
217
+ }
218
+ }
219
+ }
220
+
221
+ function _writeCheckpoint(
222
+ Checkpoint[] storage ckpts,
223
+ function(uint256, uint256) view returns (uint256) op,
224
+ uint256 delta
225
+ ) private returns (uint256 oldWeight, uint256 newWeight) {
226
+ uint256 pos = ckpts.length;
227
+ oldWeight = pos == 0 ? 0 : ckpts[pos - 1].votes;
228
+ newWeight = op(oldWeight, delta);
229
+
230
+ if (pos > 0 && ckpts[pos - 1].fromBlock == block.number) {
231
+ ckpts[pos - 1].votes = SafeCast.toUint224(newWeight);
232
+ } else {
233
+ ckpts.push(
234
+ Checkpoint({ fromBlock: SafeCast.toUint32(block.number), votes: SafeCast.toUint224(newWeight) })
235
+ );
236
+ }
237
+ }
238
+
239
+ function _add(uint256 a, uint256 b) private pure returns (uint256) {
240
+ return a + b;
241
+ }
242
+
243
+ function _subtract(uint256 a, uint256 b) private pure returns (uint256) {
244
+ return a - b;
245
+ }
246
+ }
@@ -0,0 +1,78 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)
3
+
4
+ pragma solidity ^0.8.0;
5
+
6
+ import "../../../../../eip/interface/IERC20.sol";
7
+ import { Address } from "../../../../../lib/Address.sol";
8
+
9
+ /**
10
+ * @title SafeERC20
11
+ * @dev Wrappers around ERC20 operations that throw on failure (when the token
12
+ * contract returns false). Tokens that return no value (and instead revert or
13
+ * throw on failure) are also supported, non-reverting calls are assumed to be
14
+ * successful.
15
+ * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
16
+ * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
17
+ */
18
+ library SafeERC20 {
19
+ using Address for address;
20
+
21
+ function safeTransfer(IERC20 token, address to, uint256 value) internal {
22
+ _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
23
+ }
24
+
25
+ function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
26
+ _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
27
+ }
28
+
29
+ /**
30
+ * @dev Deprecated. This function has issues similar to the ones found in
31
+ * {IERC20-approve}, and its usage is discouraged.
32
+ *
33
+ * Whenever possible, use {safeIncreaseAllowance} and
34
+ * {safeDecreaseAllowance} instead.
35
+ */
36
+ function safeApprove(IERC20 token, address spender, uint256 value) internal {
37
+ // safeApprove should only be called when setting an initial allowance,
38
+ // or when resetting it to zero. To increase and decrease it, use
39
+ // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
40
+ require(
41
+ (value == 0) || (token.allowance(address(this), spender) == 0),
42
+ "SafeERC20: approve from non-zero to non-zero allowance"
43
+ );
44
+ _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
45
+ }
46
+
47
+ function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
48
+ uint256 newAllowance = token.allowance(address(this), spender) + value;
49
+ _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
50
+ }
51
+
52
+ function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
53
+ unchecked {
54
+ uint256 oldAllowance = token.allowance(address(this), spender);
55
+ require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
56
+ uint256 newAllowance = oldAllowance - value;
57
+ _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
58
+ }
59
+ }
60
+
61
+ /**
62
+ * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
63
+ * on the return value: the return value is optional (but if data is returned, it must not be false).
64
+ * @param token The token targeted by the call.
65
+ * @param data The call data (encoded using abi.encode or one of its variants).
66
+ */
67
+ function _callOptionalReturn(IERC20 token, bytes memory data) private {
68
+ // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
69
+ // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
70
+ // the target address contains contract code and also asserts for success in the low-level call.
71
+
72
+ bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
73
+ if (returndata.length > 0) {
74
+ // Return data is optional
75
+ require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
76
+ }
77
+ }
78
+ }
@@ -0,0 +1,27 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)
3
+
4
+ pragma solidity ^0.8.0;
5
+
6
+ /**
7
+ * @title ERC721 token receiver interface
8
+ * @dev Interface for any contract that wants to support safeTransfers
9
+ * from ERC721 asset contracts.
10
+ */
11
+ interface IERC721Receiver {
12
+ /**
13
+ * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
14
+ * by `operator` from `from`, this function is called.
15
+ *
16
+ * It must return its Solidity selector to confirm the token transfer.
17
+ * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
18
+ *
19
+ * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
20
+ */
21
+ function onERC721Received(
22
+ address operator,
23
+ address from,
24
+ uint256 tokenId,
25
+ bytes calldata data
26
+ ) external returns (bytes4);
27
+ }
@@ -0,0 +1,23 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts v4.4.1 (token/ERC721/utils/ERC721Holder.sol)
3
+
4
+ pragma solidity ^0.8.0;
5
+
6
+ import "../IERC721Receiver.sol";
7
+
8
+ /**
9
+ * @dev Implementation of the {IERC721Receiver} interface.
10
+ *
11
+ * Accepts all token transfers.
12
+ * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.
13
+ */
14
+ contract ERC721Holder is IERC721Receiver {
15
+ /**
16
+ * @dev See {IERC721Receiver-onERC721Received}.
17
+ *
18
+ * Always returns `IERC721Receiver.onERC721Received.selector`.
19
+ */
20
+ function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {
21
+ return this.onERC721Received.selector;
22
+ }
23
+ }
@@ -0,0 +1,92 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v4.7.0) (utils/Base64.sol)
3
+
4
+ pragma solidity ^0.8.0;
5
+
6
+ /**
7
+ * @dev Provides a set of functions to operate with Base64 strings.
8
+ *
9
+ * _Available since v4.5._
10
+ */
11
+ library Base64 {
12
+ /**
13
+ * @dev Base64 Encoding/Decoding Table
14
+ */
15
+ string internal constant _TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
16
+
17
+ /**
18
+ * @dev Converts a `bytes` to its Bytes64 `string` representation.
19
+ */
20
+ function encode(bytes memory data) internal pure returns (string memory) {
21
+ /**
22
+ * Inspired by Brecht Devos (Brechtpd) implementation - MIT licence
23
+ * https://github.com/Brechtpd/base64/blob/e78d9fd951e7b0977ddca77d92dc85183770daf4/base64.sol
24
+ */
25
+ if (data.length == 0) return "";
26
+
27
+ // Loads the table into memory
28
+ string memory table = _TABLE;
29
+
30
+ // Encoding takes 3 bytes chunks of binary data from `bytes` data parameter
31
+ // and split into 4 numbers of 6 bits.
32
+ // The final Base64 length should be `bytes` data length multiplied by 4/3 rounded up
33
+ // - `data.length + 2` -> Round up
34
+ // - `/ 3` -> Number of 3-bytes chunks
35
+ // - `4 *` -> 4 characters for each chunk
36
+ string memory result = new string(4 * ((data.length + 2) / 3));
37
+
38
+ /// @solidity memory-safe-assembly
39
+ assembly {
40
+ // Prepare the lookup table (skip the first "length" byte)
41
+ let tablePtr := add(table, 1)
42
+
43
+ // Prepare result pointer, jump over length
44
+ let resultPtr := add(result, 32)
45
+
46
+ // Run over the input, 3 bytes at a time
47
+ for {
48
+ let dataPtr := data
49
+ let endPtr := add(data, mload(data))
50
+ } lt(dataPtr, endPtr) {
51
+
52
+ } {
53
+ // Advance 3 bytes
54
+ dataPtr := add(dataPtr, 3)
55
+ let input := mload(dataPtr)
56
+
57
+ // To write each character, shift the 3 bytes (18 bits) chunk
58
+ // 4 times in blocks of 6 bits for each character (18, 12, 6, 0)
59
+ // and apply logical AND with 0x3F which is the number of
60
+ // the previous character in the ASCII table prior to the Base64 Table
61
+ // The result is then added to the table to get the character to write,
62
+ // and finally write it in the result pointer but with a left shift
63
+ // of 256 (1 byte) - 8 (1 ASCII char) = 248 bits
64
+
65
+ mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))
66
+ resultPtr := add(resultPtr, 1) // Advance
67
+
68
+ mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))
69
+ resultPtr := add(resultPtr, 1) // Advance
70
+
71
+ mstore8(resultPtr, mload(add(tablePtr, and(shr(6, input), 0x3F))))
72
+ resultPtr := add(resultPtr, 1) // Advance
73
+
74
+ mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))
75
+ resultPtr := add(resultPtr, 1) // Advance
76
+ }
77
+
78
+ // When data `bytes` is not exactly 3 bytes long
79
+ // it is padded with `=` characters at the end
80
+ switch mod(mload(data), 3)
81
+ case 1 {
82
+ mstore8(sub(resultPtr, 1), 0x3d)
83
+ mstore8(sub(resultPtr, 2), 0x3d)
84
+ }
85
+ case 2 {
86
+ mstore8(sub(resultPtr, 1), 0x3d)
87
+ }
88
+ }
89
+
90
+ return result;
91
+ }
92
+ }
@@ -0,0 +1,24 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
3
+
4
+ pragma solidity ^0.8.0;
5
+
6
+ /**
7
+ * @dev Provides information about the current execution context, including the
8
+ * sender of the transaction and its data. While these are generally available
9
+ * via msg.sender and msg.data, they should not be accessed in such a direct
10
+ * manner, since when dealing with meta-transactions the account sending and
11
+ * paying for execution may not be the actual sender (as far as an application
12
+ * is concerned).
13
+ *
14
+ * This contract is only required for intermediate, library-like contracts.
15
+ */
16
+ abstract contract Context {
17
+ function _msgSender() internal view virtual returns (address) {
18
+ return msg.sender;
19
+ }
20
+
21
+ function _msgData() internal view virtual returns (bytes calldata) {
22
+ return msg.data;
23
+ }
24
+ }
@@ -0,0 +1,43 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)
3
+
4
+ pragma solidity ^0.8.0;
5
+
6
+ /**
7
+ * @title Counters
8
+ * @author Matt Condon (@shrugs)
9
+ * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
10
+ * of elements in a mapping, issuing ERC721 ids, or counting request ids.
11
+ *
12
+ * Include with `using Counters for Counters.Counter;`
13
+ */
14
+ library Counters {
15
+ struct Counter {
16
+ // This variable should never be directly accessed by users of the library: interactions must be restricted to
17
+ // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
18
+ // this feature: see https://github.com/ethereum/solidity/issues/4637
19
+ uint256 _value; // default: 0
20
+ }
21
+
22
+ function current(Counter storage counter) internal view returns (uint256) {
23
+ return counter._value;
24
+ }
25
+
26
+ function increment(Counter storage counter) internal {
27
+ unchecked {
28
+ counter._value += 1;
29
+ }
30
+ }
31
+
32
+ function decrement(Counter storage counter) internal {
33
+ uint256 value = counter._value;
34
+ require(value > 0, "Counter: decrement overflow");
35
+ unchecked {
36
+ counter._value = value - 1;
37
+ }
38
+ }
39
+
40
+ function reset(Counter storage counter) internal {
41
+ counter._value = 0;
42
+ }
43
+ }
@@ -0,0 +1,58 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v4.7.0) (utils/Create2.sol)
3
+
4
+ pragma solidity ^0.8.0;
5
+
6
+ /**
7
+ * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.
8
+ * `CREATE2` can be used to compute in advance the address where a smart
9
+ * contract will be deployed, which allows for interesting new mechanisms known
10
+ * as 'counterfactual interactions'.
11
+ *
12
+ * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more
13
+ * information.
14
+ */
15
+ library Create2 {
16
+ /**
17
+ * @dev Deploys a contract using `CREATE2`. The address where the contract
18
+ * will be deployed can be known in advance via {computeAddress}.
19
+ *
20
+ * The bytecode for a contract can be obtained from Solidity with
21
+ * `type(contractName).creationCode`.
22
+ *
23
+ * Requirements:
24
+ *
25
+ * - `bytecode` must not be empty.
26
+ * - `salt` must have not been used for `bytecode` already.
27
+ * - the factory must have a balance of at least `amount`.
28
+ * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.
29
+ */
30
+ function deploy(uint256 amount, bytes32 salt, bytes memory bytecode) internal returns (address) {
31
+ address addr;
32
+ require(address(this).balance >= amount, "Create2: insufficient balance");
33
+ require(bytecode.length != 0, "Create2: bytecode length is zero");
34
+ /// @solidity memory-safe-assembly
35
+ assembly {
36
+ addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)
37
+ }
38
+ require(addr != address(0), "Create2: Failed on deploy");
39
+ return addr;
40
+ }
41
+
42
+ /**
43
+ * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the
44
+ * `bytecodeHash` or `salt` will result in a new destination address.
45
+ */
46
+ function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {
47
+ return computeAddress(salt, bytecodeHash, address(this));
48
+ }
49
+
50
+ /**
51
+ * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at
52
+ * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.
53
+ */
54
+ function computeAddress(bytes32 salt, bytes32 bytecodeHash, address deployer) internal pure returns (address) {
55
+ bytes32 _data = keccak256(abi.encodePacked(bytes1(0xff), deployer, salt, bytecodeHash));
56
+ return address(uint160(uint256(_data)));
57
+ }
58
+ }
@@ -0,0 +1,36 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/utils/ERC1155Holder.sol)
3
+
4
+ pragma solidity ^0.8.0;
5
+
6
+ import "./ERC1155Receiver.sol";
7
+
8
+ /**
9
+ * Simple implementation of `ERC1155Receiver` that will allow a contract to hold ERC1155 tokens.
10
+ *
11
+ * IMPORTANT: When inheriting this contract, you must include a way to use the received tokens, otherwise they will be
12
+ * stuck.
13
+ *
14
+ * @dev _Available since v3.1._
15
+ */
16
+ contract ERC1155Holder is ERC1155Receiver {
17
+ function onERC1155Received(
18
+ address,
19
+ address,
20
+ uint256,
21
+ uint256,
22
+ bytes memory
23
+ ) public virtual override returns (bytes4) {
24
+ return this.onERC1155Received.selector;
25
+ }
26
+
27
+ function onERC1155BatchReceived(
28
+ address,
29
+ address,
30
+ uint256[] memory,
31
+ uint256[] memory,
32
+ bytes memory
33
+ ) public virtual override returns (bytes4) {
34
+ return this.onERC1155BatchReceived.selector;
35
+ }
36
+ }
@@ -0,0 +1,19 @@
1
+ // SPDX-License-Identifier: Apache 2.0
2
+ // OpenZeppelin Contracts v4.4.1 (token/ERC1155/utils/ERC1155Receiver.sol)
3
+
4
+ pragma solidity ^0.8.0;
5
+
6
+ import "../../../../eip/interface/IERC1155Receiver.sol";
7
+ import "../../../../eip/ERC165.sol";
8
+
9
+ /**
10
+ * @dev _Available since v3.1._
11
+ */
12
+ abstract contract ERC1155Receiver is ERC165, IERC1155Receiver {
13
+ /**
14
+ * @dev See {IERC165-supportsInterface}.
15
+ */
16
+ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
17
+ return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId);
18
+ }
19
+ }
@@ -0,0 +1,23 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts v4.4.1 (token/ERC721/utils/ERC721Holder.sol)
3
+
4
+ pragma solidity ^0.8.0;
5
+
6
+ import "../../../../eip/interface/IERC721Receiver.sol";
7
+
8
+ /**
9
+ * @dev Implementation of the {IERC721Receiver} interface.
10
+ *
11
+ * Accepts all token transfers.
12
+ * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.
13
+ */
14
+ contract ERC721Holder is IERC721Receiver {
15
+ /**
16
+ * @dev See {IERC721Receiver-onERC721Received}.
17
+ *
18
+ * Always returns `IERC721Receiver.onERC721Received.selector`.
19
+ */
20
+ function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {
21
+ return this.onERC721Received.selector;
22
+ }
23
+ }