From bd0ade74c0461e9c621e95590af22c102a4ae833 Mon Sep 17 00:00:00 2001 From: Alex Connolly Date: Thu, 16 Nov 2023 09:17:30 +1100 Subject: [PATCH 1/8] Consolidating IMX token contract from separate repository. --- contracts/token/erc20/specific/IMXToken.sol | 27 ++++++++++ test/token/specific/imx.test.ts | 60 +++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 contracts/token/erc20/specific/IMXToken.sol create mode 100644 test/token/specific/imx.test.ts diff --git a/contracts/token/erc20/specific/IMXToken.sol b/contracts/token/erc20/specific/IMXToken.sol new file mode 100644 index 00000000..fe456d94 --- /dev/null +++ b/contracts/token/erc20/specific/IMXToken.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import { ERC20Capped } from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Capped.sol"; +import { AccessControl } from "@openzeppelin/contracts/access/AccessControl.sol"; + +contract IMXToken is ERC20Capped, AccessControl { + bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); + + constructor(address minter) ERC20("Immutable X", "IMX") ERC20Capped(2000000000000000000000000000) { + _setupRole(MINTER_ROLE, minter); + } + + modifier checkRole( + bytes32 role, + address account, + string memory message + ) { + require(hasRole(role, account), message); + _; + } + + function mint(address to, uint256 amount) external checkRole(MINTER_ROLE, msg.sender, "Caller is not a minter") { + super._mint(to, amount); + } +} \ No newline at end of file diff --git a/test/token/specific/imx.test.ts b/test/token/specific/imx.test.ts new file mode 100644 index 00000000..a7a79c45 --- /dev/null +++ b/test/token/specific/imx.test.ts @@ -0,0 +1,60 @@ +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { expect } from 'chai'; +import { BigNumber, Contract } from 'ethers'; +import { ethers } from 'hardhat'; + +let token: Contract, ownerSigner: SignerWithAddress, addr1Signer: SignerWithAddress, ownerAddr: string, addr1: string; + +describe('IMX Token', function () { + beforeEach(async function () { + [ownerSigner, addr1Signer] = await ethers.getSigners(); + ownerAddr = ownerSigner.address; + addr1 = addr1Signer.address; + const Token = await ethers.getContractFactory('IMXToken'); + token = await Token.deploy(ownerAddr); + await token.deployed(); + }); + + describe('Given a function call from the owner address', function () { + describe('When minting tokens to any address', function () { + it('Then it should update total supply', async function () { + expect(await token.totalSupply.call({})).to.equal(0); + expect(await token.mint(ownerAddr, 1)); + expect(await token.totalSupply.call({})).to.equal(1); + expect(await token.mint(addr1, 10)); + expect(await token.totalSupply.call({})).to.equal(11); + }); + + it('Then it should update their respective token balances', async function () { + expect(await token.balanceOf(ownerAddr)).to.equal(0); + expect(await token.mint(ownerAddr, 1)); + expect(await token.balanceOf(ownerAddr)).to.equal(1); + expect(await token.mint(addr1, 2)); + expect(await token.balanceOf(addr1)).to.equal(2); + }); + }); + }); + + describe('Given a function call from a non-owner address', function () { + describe('When minting tokens to any address', function () { + it('Then it should revert the transaction (cannot sign)', async function () { + expect(await token.totalSupply.call({})).to.equal(0); + await expect(token.connect(addr1Signer).mint(ownerAddr, 1)).to.be.revertedWith('Caller is not a minter'); + expect(await token.totalSupply.call({})).to.equal(0); + }); + }); + }); + + describe('Given a 20mil cap on token supply', function () { + describe('When minting tokens that will exceed the supply cap', function () { + it('Then it should revert the transaction (cap exceeded)', async function () { + expect(await token.totalSupply.call({})).to.equal(0); + expect(await token.cap.call({})).to.equal(BigNumber.from('2000000000000000000000000000')); + await expect(token.mint(ownerAddr, BigNumber.from('2000000000000000000000000001'))).to.be.revertedWith( + 'cap exceeded', + ); + expect(await token.totalSupply.call({})).to.equal(0); + }); + }); + }); +}); \ No newline at end of file From 2ee93122758166ae03d19b63368894627b2f488b Mon Sep 17 00:00:00 2001 From: Alex Connolly Date: Mon, 11 Dec 2023 16:17:12 +1100 Subject: [PATCH 2/8] Submodules structure for forked repositories --- .gitmodules | 6 + contracts/passport/Factory.sol | 59 + contracts/passport/IWalletProxy.sol | 11 + contracts/passport/MultiCallDeploy.sol | 72 + contracts/passport/README.md | 1 + contracts/passport/Wallet.sol | 10 + contracts/passport/WalletProxy.yul | 81 + .../passport/interfaces/IERC1271Wallet.sol | 38 + contracts/passport/interfaces/IFactory.sol | 29 + .../interfaces/receivers/IERC1155Receiver.sol | 8 + .../interfaces/receivers/IERC223Receiver.sol | 7 + .../interfaces/receivers/IERC721Receiver.sol | 7 + contracts/passport/migrations/Migrations.sol | 26 + contracts/passport/mocks/AlwaysRevertMock.sol | 9 + contracts/passport/mocks/CallReceiverMock.sol | 23 + contracts/passport/mocks/CustomModule.sol | 13 + contracts/passport/mocks/DelegateCallMock.sol | 24 + .../passport/mocks/ERC165CheckerMock.sol | 56 + contracts/passport/mocks/ERC20Mock.sol | 9 + contracts/passport/mocks/GasBurnerMock.sol | 18 + contracts/passport/mocks/HookCallerMock.sol | 78 + contracts/passport/mocks/HookMock.sol | 9 + contracts/passport/mocks/LibBytesImpl.sol | 37 + contracts/passport/mocks/MainModule.sol | 7 + contracts/passport/mocks/MainModuleMockV1.sol | 12 + contracts/passport/mocks/MainModuleMockV2.sol | 15 + contracts/passport/mocks/MainModuleMockV3.sol | 15 + contracts/passport/mocks/ModuleMock.sol | 11 + contracts/passport/modules/GuestModule.sol | 117 + contracts/passport/modules/MainModule.sol | 54 + .../modules/MainModuleDynamicAuth.sol | 52 + .../modules/MainModuleGasEstimation.sol | 93 + .../passport/modules/MainModuleUpgradable.sol | 44 + .../passport/modules/commons/ImageHashKey.sol | 8 + .../modules/commons/Implementation.sol | 31 + .../passport/modules/commons/ModuleAuth.sol | 228 + .../modules/commons/ModuleAuthDynamic.sol | 57 + .../modules/commons/ModuleAuthFixed.sol | 45 + .../modules/commons/ModuleAuthUpgradable.sol | 68 + .../passport/modules/commons/ModuleCalls.sol | 192 + .../modules/commons/ModuleCreator.sol | 36 + .../passport/modules/commons/ModuleERC165.sol | 18 + .../passport/modules/commons/ModuleHooks.sol | 146 + .../commons/ModuleIgnoreAuthUpgradable.sol | 61 + .../commons/ModuleIgnoreNonceCalls.sol | 199 + .../modules/commons/ModuleReceivers.sol | 68 + .../modules/commons/ModuleSelfAuth.sol | 10 + .../modules/commons/ModuleStorage.sol | 23 + .../passport/modules/commons/ModuleUpdate.sol | 41 + .../passport/modules/commons/NonceKey.sol | 9 + .../commons/interfaces/IModuleAuth.sol | 25 + .../interfaces/IModuleAuthUpgradable.sol | 16 + .../commons/interfaces/IModuleCalls.sol | 55 + .../commons/interfaces/IModuleCreator.sol | 12 + .../commons/interfaces/IModuleHooks.sol | 25 + .../commons/interfaces/IModuleUpdate.sol | 12 + .../passport/modules/utils/GasEstimator.sol | 16 + .../passport/modules/utils/MultiCallUtils.sol | 99 + .../passport/modules/utils/RequireUtils.sol | 281 + .../passport/modules/utils/SequenceUtils.sol | 19 + .../modules/utils/libs/RequireFreshSigner.sol | 17 + contracts/passport/signer/ImmutableSigner.sol | 114 + .../startup/ILatestWalletImplLocator.sol | 15 + .../startup/LatestWalletImplLocator.sol | 38 + .../passport/startup/StartupWalletImpl.sol | 46 + contracts/passport/utils/LibAddress.sol | 18 + contracts/passport/utils/LibBytes.sol | 195 + .../passport/utils/SignatureValidator.sol | 143 + contracts/seaport/README.md | 1 + contracts/seaport/Seaport.sol | 121 + contracts/seaport/conduit/Conduit.sol | 18 + .../seaport/conduit/ConduitController.sol | 13 + contracts/seaport/helpers/ArrayHelpers.sol | 705 + contracts/seaport/helpers/SeaportRouter.sol | 256 + contracts/seaport/helpers/TransferHelper.sol | 348 + .../helpers/navigator/SeaportNavigator.sol | 131 + .../helpers/navigator/lib/CriteriaHelper.sol | 24 + .../navigator/lib/CriteriaHelperLib.sol | 131 + .../navigator/lib/ExecutionsHelper.sol | 18 + .../navigator/lib/FulfillmentsHelper.sol | 18 + .../helpers/navigator/lib/HelperInterface.sol | 10 + .../helpers/navigator/lib/HelperItemLib.sol | 145 + .../helpers/navigator/lib/MerkleLib.sol | 218 + .../lib/NavigatorAdvancedOrderLib.sol | 246 + .../navigator/lib/NavigatorContextLib.sol | 66 + .../lib/NavigatorCriteriaResolverLib.sol | 44 + .../navigator/lib/NavigatorDetailsLib.sol | 37 + .../navigator/lib/NavigatorExecutionsLib.sol | 118 + .../lib/NavigatorFulfillmentsLib.sol | 51 + .../lib/NavigatorRequestValidatorLib.sol | 43 + .../lib/NavigatorSeaportValidatorLib.sol | 37 + .../lib/NavigatorSuggestedActionLib.sol | 362 + .../navigator/lib/OrderAvailabilityLib.sol | 80 + .../navigator/lib/OrderDetailsHelper.sol | 18 + .../navigator/lib/OrderStructureLib.sol | 516 + .../navigator/lib/RequestValidator.sol | 23 + .../lib/SeaportNavigatorInterface.sol | 48 + .../navigator/lib/SeaportNavigatorTypes.sol | 171 + .../navigator/lib/SuggestedActionHelper.sol | 18 + .../helpers/navigator/lib/ValidatorHelper.sol | 26 + .../order-validator/SeaportValidator.sol | 1141 + .../lib/ConsiderationTypeHashes.sol | 270 + .../order-validator/lib/ErrorsAndWarnings.sol | 284 + .../helpers/order-validator/lib/Murky.sol | 400 + .../lib/ReadOnlyOrderValidator.sol | 722 + .../order-validator/lib/SafeStaticCall.sol | 77 + .../lib/SeaportValidatorHelper.sol | 958 + .../lib/SeaportValidatorInterface.sol | 289 + .../lib/SeaportValidatorTypes.sol | 508 + .../ImmutableCreate2FactoryInterface.sol | 96 + .../interfaces/ZoneInteractionErrors.sol | 29 + .../seaport/interfaces/ZoneInterface.sol | 46 + .../seaport/test/ConduitControllerMock.sol | 544 + contracts/seaport/test/ConduitMock.sol | 33 + .../seaport/test/ConduitMockInvalidMagic.sol | 32 + .../seaport/test/ConduitMockRevertBytes.sol | 34 + .../test/ConduitMockRevertNoReason.sol | 33 + contracts/seaport/test/EIP1271Wallet.sol | 116 + .../seaport/test/ERC1155BatchRecipient.sol | 19 + contracts/seaport/test/ERC2981.sol | 128 + contracts/seaport/test/ERC721ReceiverMock.sol | 47 + .../test/ExcessReturnDataRecipient.sol | 146 + .../test/HashCalldataContractOfferer.sol | 494 + .../test/HashValidationZoneOfferer.sol | 641 + .../seaport/test/InvalidERC721Recipient.sol | 22 + .../seaport/test/InvalidEthRecipient.sol | 10 + .../seaport/test/OffererZoneFailureReason.sol | 16 + contracts/seaport/test/Reenterer.sol | 50 + .../seaport/test/TestBadContractOfferer.sol | 151 + .../test/TestCalldataHashContractOfferer.sol | 495 + .../seaport/test/TestContractOfferer.sol | 341 + .../test/TestContractOffererNativeToken.sol | 282 + contracts/seaport/test/TestERC1155.sol | 20 + contracts/seaport/test/TestERC1155Revert.sol | 35 + contracts/seaport/test/TestERC1271.sol | 50 + contracts/seaport/test/TestERC20.sol | 68 + contracts/seaport/test/TestERC20NotOk.sol | 22 + contracts/seaport/test/TestERC20Panic.sol | 22 + contracts/seaport/test/TestERC20Revert.sol | 20 + contracts/seaport/test/TestERC721.sol | 16 + contracts/seaport/test/TestERC721Fee.sol | 59 + contracts/seaport/test/TestERC721Funky.sol | 25 + contracts/seaport/test/TestERC721Revert.sol | 16 + .../test/TestInvalidContractOfferer.sol | 29 + .../test/TestInvalidContractOfferer165.sol | 309 + .../TestInvalidContractOffererRatifyOrder.sol | 23 + contracts/seaport/test/TestInvalidZone.sol | 46 + contracts/seaport/test/TestPostExecution.sol | 82 + .../TestTransferValidationZoneOfferer.sol | 465 + contracts/seaport/test/TestZone.sol | 82 + contracts/seaport/test/TypehashDirectory.sol | 183 + contracts/seaport/zones/PausableZone.sol | 268 + .../seaport/zones/PausableZoneController.sol | 381 + .../PausableZoneControllerInterface.sol | 170 + .../PausableZoneEventsAndErrors.sol | 111 + .../interfaces/PausableZoneInterface.sol | 102 + forks/README.md | 10 + forks/forks.json | 18 + forks/passport/.eslintignore | 3 + forks/passport/.eslintrc.js | 38 + forks/passport/.gitattributes | 1 + forks/passport/.github/workflows/ci.yml | 158 + forks/passport/.gitignore | 26 + forks/passport/.prettierrc | 9 + forks/passport/.solcover.js | 3 + forks/passport/.solhint.json | 24 + forks/passport/CONTRIBUTING.md | 79 + forks/passport/LICENSE | 220 + forks/passport/README.md | 83 + .../address-retrieval.jpg | Bin 0 -> 37226 bytes .../data-flow.jpg | Bin 0 -> 107555 bytes .../factory-deployment.jpg | Bin 0 -> 148934 bytes .../high-level-diagram.jpg | Bin 0 -> 126100 bytes .../immutable-signer.png | Bin 0 -> 90964 bytes .../incremental-deployment.gif | Bin 0 -> 248405 bytes .../multicall-deploy.png | Bin 0 -> 123392 bytes .../startup-wallet.png | Bin 0 -> 95246 bytes .../wallet-deployment.jpg | Bin 0 -> 114395 bytes .../wallet-interactions.jpg | Bin 0 -> 56638 bytes .../passport/audits/202309_Halborn_Final.pdf | Bin 0 -> 2425698 bytes .../audits/202309_audit_background.md | 401 + forks/passport/audits/Consensys_Diligence.md | 7 + .../Quantstamp_Arcadeum_Report_Final.pdf | Bin 0 -> 399997 bytes .../sequence_quantstamp_audit_feb_2021.pdf | Bin 0 -> 376935 bytes forks/passport/cla.txt | 97 + forks/passport/compileWalletProxyYul.sh | 3 + forks/passport/config/PROD.env.sample | 3 + forks/passport/hardhat.config.ts | 98 + forks/passport/package-lock.json | 26271 ++++++++++++++++ forks/passport/package.json | 94 + .../passport/scripts/DeployWalletContracts.ts | 191 + forks/passport/scripts/deploy_output.json | 18 + forks/passport/security.md | 29 + forks/passport/src/.gitignore | 4 + forks/passport/src/.npmignore | 3 + forks/passport/src/contracts/Factory.sol | 59 + forks/passport/src/contracts/IWalletProxy.sol | 11 + .../src/contracts/MultiCallDeploy.sol | 72 + forks/passport/src/contracts/Wallet.sol | 10 + forks/passport/src/contracts/WalletProxy.yul | 81 + .../contracts/interfaces/IERC1271Wallet.sol | 38 + .../src/contracts/interfaces/IFactory.sol | 29 + .../interfaces/receivers/IERC1155Receiver.sol | 8 + .../interfaces/receivers/IERC223Receiver.sol | 7 + .../interfaces/receivers/IERC721Receiver.sol | 7 + .../src/contracts/migrations/Migrations.sol | 26 + .../src/contracts/mocks/AlwaysRevertMock.sol | 9 + .../src/contracts/mocks/CallReceiverMock.sol | 23 + .../src/contracts/mocks/CustomModule.sol | 13 + .../src/contracts/mocks/DelegateCallMock.sol | 24 + .../src/contracts/mocks/ERC165CheckerMock.sol | 56 + .../src/contracts/mocks/ERC20Mock.sol | 9 + .../src/contracts/mocks/GasBurnerMock.sol | 18 + .../src/contracts/mocks/HookCallerMock.sol | 78 + .../passport/src/contracts/mocks/HookMock.sol | 9 + .../src/contracts/mocks/LibBytesImpl.sol | 37 + .../src/contracts/mocks/MainModule.sol | 7 + .../src/contracts/mocks/MainModuleMockV1.sol | 12 + .../src/contracts/mocks/MainModuleMockV2.sol | 15 + .../src/contracts/mocks/MainModuleMockV3.sol | 15 + .../src/contracts/mocks/ModuleMock.sol | 11 + .../src/contracts/modules/GuestModule.sol | 117 + .../src/contracts/modules/MainModule.sol | 54 + .../modules/MainModuleDynamicAuth.sol | 52 + .../modules/MainModuleGasEstimation.sol | 93 + .../modules/MainModuleUpgradable.sol | 44 + .../modules/commons/ImageHashKey.sol | 8 + .../modules/commons/Implementation.sol | 31 + .../contracts/modules/commons/ModuleAuth.sol | 228 + .../modules/commons/ModuleAuthDynamic.sol | 57 + .../modules/commons/ModuleAuthFixed.sol | 45 + .../modules/commons/ModuleAuthUpgradable.sol | 68 + .../contracts/modules/commons/ModuleCalls.sol | 192 + .../modules/commons/ModuleCreator.sol | 36 + .../modules/commons/ModuleERC165.sol | 18 + .../contracts/modules/commons/ModuleHooks.sol | 146 + .../commons/ModuleIgnoreAuthUpgradable.sol | 61 + .../commons/ModuleIgnoreNonceCalls.sol | 199 + .../modules/commons/ModuleReceivers.sol | 68 + .../modules/commons/ModuleSelfAuth.sol | 10 + .../modules/commons/ModuleStorage.sol | 23 + .../modules/commons/ModuleUpdate.sol | 41 + .../contracts/modules/commons/NonceKey.sol | 9 + .../commons/interfaces/IModuleAuth.sol | 25 + .../interfaces/IModuleAuthUpgradable.sol | 16 + .../commons/interfaces/IModuleCalls.sol | 55 + .../commons/interfaces/IModuleCreator.sol | 12 + .../commons/interfaces/IModuleHooks.sol | 25 + .../commons/interfaces/IModuleUpdate.sol | 12 + .../contracts/modules/utils/GasEstimator.sol | 16 + .../modules/utils/MultiCallUtils.sol | 99 + .../contracts/modules/utils/RequireUtils.sol | 281 + .../contracts/modules/utils/SequenceUtils.sol | 19 + .../modules/utils/libs/RequireFreshSigner.sol | 17 + .../src/contracts/signer/ImmutableSigner.sol | 114 + .../startup/ILatestWalletImplLocator.sol | 15 + .../startup/LatestWalletImplLocator.sol | 38 + .../contracts/startup/StartupWalletImpl.sol | 46 + .../src/contracts/utils/LibAddress.sol | 18 + .../passport/src/contracts/utils/LibBytes.sol | 195 + .../contracts/utils/SignatureValidator.sol | 143 + .../src/networks/arbitrum-testnet.json | 22 + forks/passport/src/networks/arbitrum.json | 22 + forks/passport/src/networks/avalanche.json | 26 + .../src/networks/avalancheTestnet.json | 26 + forks/passport/src/networks/ganache.json | 22 + forks/passport/src/networks/goerli.json | 26 + forks/passport/src/networks/kovan.json | 26 + forks/passport/src/networks/mainnet.json | 22 + forks/passport/src/networks/matic.json | 26 + forks/passport/src/networks/mumbai.json | 26 + forks/passport/src/networks/nova.json | 26 + forks/passport/src/networks/optimism.json | 26 + forks/passport/src/networks/rinkeby.json | 26 + forks/passport/src/networks/ropsten.json | 26 + forks/passport/src/package.json | 29 + forks/passport/src/tsconfig.adapter.json | 36 + forks/passport/tests/ERC165.spec.ts | 187 + forks/passport/tests/Factory.spec.ts | 41 + forks/passport/tests/GasEstimation.spec.ts | 522 + forks/passport/tests/GuestModule.spec.ts | 140 + .../tests/ImmutableDeployment.spec.ts | 399 + forks/passport/tests/ImmutableFactory.spec.ts | 353 + .../tests/ImmutableMultiCallDeploy.spec.ts | 234 + forks/passport/tests/ImmutableSigner.spec.ts | 183 + forks/passport/tests/ImmutableStartup.spec.ts | 359 + forks/passport/tests/LibBytes.spec.ts | 268 + forks/passport/tests/MainModule.bench.ts | 241 + forks/passport/tests/MainModule.spec.ts | 4007 +++ forks/passport/tests/MultiCallUtils.spec.ts | 314 + forks/passport/tests/RequireUtils.spec.ts | 395 + forks/passport/tests/utils/contract.ts | 155 + forks/passport/tests/utils/helpers.ts | 453 + forks/passport/tests/utils/index.ts | 22 + forks/passport/tsconfig.json | 44 + forks/passport/typings/chai-bignumber.d.ts | 16 + forks/passport/typings/chai-bn.ts | 19 + forks/passport/typings/truffle.d.ts | 12 + forks/passport/utils/config-loader.ts | 151 + forks/passport/utils/deploy-contracts.ts | 106 + forks/passport/yarn.lock | 8426 +++++ forks/seaport | 1 + package.json | 17 +- scripts/build.ts | 51 + scripts/compile.sh | 5 + scripts/install.sh | 5 + scripts/test.sh | 5 + yarn.lock | 46 +- 308 files changed, 67456 insertions(+), 11 deletions(-) create mode 100644 contracts/passport/Factory.sol create mode 100644 contracts/passport/IWalletProxy.sol create mode 100644 contracts/passport/MultiCallDeploy.sol create mode 100644 contracts/passport/README.md create mode 100644 contracts/passport/Wallet.sol create mode 100644 contracts/passport/WalletProxy.yul create mode 100644 contracts/passport/interfaces/IERC1271Wallet.sol create mode 100644 contracts/passport/interfaces/IFactory.sol create mode 100644 contracts/passport/interfaces/receivers/IERC1155Receiver.sol create mode 100644 contracts/passport/interfaces/receivers/IERC223Receiver.sol create mode 100644 contracts/passport/interfaces/receivers/IERC721Receiver.sol create mode 100644 contracts/passport/migrations/Migrations.sol create mode 100644 contracts/passport/mocks/AlwaysRevertMock.sol create mode 100644 contracts/passport/mocks/CallReceiverMock.sol create mode 100644 contracts/passport/mocks/CustomModule.sol create mode 100644 contracts/passport/mocks/DelegateCallMock.sol create mode 100644 contracts/passport/mocks/ERC165CheckerMock.sol create mode 100644 contracts/passport/mocks/ERC20Mock.sol create mode 100644 contracts/passport/mocks/GasBurnerMock.sol create mode 100644 contracts/passport/mocks/HookCallerMock.sol create mode 100644 contracts/passport/mocks/HookMock.sol create mode 100644 contracts/passport/mocks/LibBytesImpl.sol create mode 100644 contracts/passport/mocks/MainModule.sol create mode 100644 contracts/passport/mocks/MainModuleMockV1.sol create mode 100644 contracts/passport/mocks/MainModuleMockV2.sol create mode 100644 contracts/passport/mocks/MainModuleMockV3.sol create mode 100644 contracts/passport/mocks/ModuleMock.sol create mode 100644 contracts/passport/modules/GuestModule.sol create mode 100644 contracts/passport/modules/MainModule.sol create mode 100644 contracts/passport/modules/MainModuleDynamicAuth.sol create mode 100644 contracts/passport/modules/MainModuleGasEstimation.sol create mode 100644 contracts/passport/modules/MainModuleUpgradable.sol create mode 100644 contracts/passport/modules/commons/ImageHashKey.sol create mode 100644 contracts/passport/modules/commons/Implementation.sol create mode 100644 contracts/passport/modules/commons/ModuleAuth.sol create mode 100644 contracts/passport/modules/commons/ModuleAuthDynamic.sol create mode 100644 contracts/passport/modules/commons/ModuleAuthFixed.sol create mode 100644 contracts/passport/modules/commons/ModuleAuthUpgradable.sol create mode 100644 contracts/passport/modules/commons/ModuleCalls.sol create mode 100644 contracts/passport/modules/commons/ModuleCreator.sol create mode 100644 contracts/passport/modules/commons/ModuleERC165.sol create mode 100644 contracts/passport/modules/commons/ModuleHooks.sol create mode 100644 contracts/passport/modules/commons/ModuleIgnoreAuthUpgradable.sol create mode 100644 contracts/passport/modules/commons/ModuleIgnoreNonceCalls.sol create mode 100644 contracts/passport/modules/commons/ModuleReceivers.sol create mode 100644 contracts/passport/modules/commons/ModuleSelfAuth.sol create mode 100644 contracts/passport/modules/commons/ModuleStorage.sol create mode 100644 contracts/passport/modules/commons/ModuleUpdate.sol create mode 100644 contracts/passport/modules/commons/NonceKey.sol create mode 100644 contracts/passport/modules/commons/interfaces/IModuleAuth.sol create mode 100644 contracts/passport/modules/commons/interfaces/IModuleAuthUpgradable.sol create mode 100644 contracts/passport/modules/commons/interfaces/IModuleCalls.sol create mode 100644 contracts/passport/modules/commons/interfaces/IModuleCreator.sol create mode 100644 contracts/passport/modules/commons/interfaces/IModuleHooks.sol create mode 100644 contracts/passport/modules/commons/interfaces/IModuleUpdate.sol create mode 100644 contracts/passport/modules/utils/GasEstimator.sol create mode 100644 contracts/passport/modules/utils/MultiCallUtils.sol create mode 100644 contracts/passport/modules/utils/RequireUtils.sol create mode 100644 contracts/passport/modules/utils/SequenceUtils.sol create mode 100644 contracts/passport/modules/utils/libs/RequireFreshSigner.sol create mode 100644 contracts/passport/signer/ImmutableSigner.sol create mode 100644 contracts/passport/startup/ILatestWalletImplLocator.sol create mode 100644 contracts/passport/startup/LatestWalletImplLocator.sol create mode 100644 contracts/passport/startup/StartupWalletImpl.sol create mode 100644 contracts/passport/utils/LibAddress.sol create mode 100644 contracts/passport/utils/LibBytes.sol create mode 100644 contracts/passport/utils/SignatureValidator.sol create mode 100644 contracts/seaport/README.md create mode 100644 contracts/seaport/Seaport.sol create mode 100644 contracts/seaport/conduit/Conduit.sol create mode 100644 contracts/seaport/conduit/ConduitController.sol create mode 100644 contracts/seaport/helpers/ArrayHelpers.sol create mode 100644 contracts/seaport/helpers/SeaportRouter.sol create mode 100644 contracts/seaport/helpers/TransferHelper.sol create mode 100644 contracts/seaport/helpers/navigator/SeaportNavigator.sol create mode 100644 contracts/seaport/helpers/navigator/lib/CriteriaHelper.sol create mode 100644 contracts/seaport/helpers/navigator/lib/CriteriaHelperLib.sol create mode 100644 contracts/seaport/helpers/navigator/lib/ExecutionsHelper.sol create mode 100644 contracts/seaport/helpers/navigator/lib/FulfillmentsHelper.sol create mode 100644 contracts/seaport/helpers/navigator/lib/HelperInterface.sol create mode 100644 contracts/seaport/helpers/navigator/lib/HelperItemLib.sol create mode 100644 contracts/seaport/helpers/navigator/lib/MerkleLib.sol create mode 100644 contracts/seaport/helpers/navigator/lib/NavigatorAdvancedOrderLib.sol create mode 100644 contracts/seaport/helpers/navigator/lib/NavigatorContextLib.sol create mode 100644 contracts/seaport/helpers/navigator/lib/NavigatorCriteriaResolverLib.sol create mode 100644 contracts/seaport/helpers/navigator/lib/NavigatorDetailsLib.sol create mode 100644 contracts/seaport/helpers/navigator/lib/NavigatorExecutionsLib.sol create mode 100644 contracts/seaport/helpers/navigator/lib/NavigatorFulfillmentsLib.sol create mode 100644 contracts/seaport/helpers/navigator/lib/NavigatorRequestValidatorLib.sol create mode 100644 contracts/seaport/helpers/navigator/lib/NavigatorSeaportValidatorLib.sol create mode 100644 contracts/seaport/helpers/navigator/lib/NavigatorSuggestedActionLib.sol create mode 100644 contracts/seaport/helpers/navigator/lib/OrderAvailabilityLib.sol create mode 100644 contracts/seaport/helpers/navigator/lib/OrderDetailsHelper.sol create mode 100644 contracts/seaport/helpers/navigator/lib/OrderStructureLib.sol create mode 100644 contracts/seaport/helpers/navigator/lib/RequestValidator.sol create mode 100644 contracts/seaport/helpers/navigator/lib/SeaportNavigatorInterface.sol create mode 100644 contracts/seaport/helpers/navigator/lib/SeaportNavigatorTypes.sol create mode 100644 contracts/seaport/helpers/navigator/lib/SuggestedActionHelper.sol create mode 100644 contracts/seaport/helpers/navigator/lib/ValidatorHelper.sol create mode 100644 contracts/seaport/helpers/order-validator/SeaportValidator.sol create mode 100644 contracts/seaport/helpers/order-validator/lib/ConsiderationTypeHashes.sol create mode 100644 contracts/seaport/helpers/order-validator/lib/ErrorsAndWarnings.sol create mode 100644 contracts/seaport/helpers/order-validator/lib/Murky.sol create mode 100644 contracts/seaport/helpers/order-validator/lib/ReadOnlyOrderValidator.sol create mode 100644 contracts/seaport/helpers/order-validator/lib/SafeStaticCall.sol create mode 100644 contracts/seaport/helpers/order-validator/lib/SeaportValidatorHelper.sol create mode 100644 contracts/seaport/helpers/order-validator/lib/SeaportValidatorInterface.sol create mode 100644 contracts/seaport/helpers/order-validator/lib/SeaportValidatorTypes.sol create mode 100644 contracts/seaport/interfaces/ImmutableCreate2FactoryInterface.sol create mode 100644 contracts/seaport/interfaces/ZoneInteractionErrors.sol create mode 100644 contracts/seaport/interfaces/ZoneInterface.sol create mode 100644 contracts/seaport/test/ConduitControllerMock.sol create mode 100644 contracts/seaport/test/ConduitMock.sol create mode 100644 contracts/seaport/test/ConduitMockInvalidMagic.sol create mode 100644 contracts/seaport/test/ConduitMockRevertBytes.sol create mode 100644 contracts/seaport/test/ConduitMockRevertNoReason.sol create mode 100644 contracts/seaport/test/EIP1271Wallet.sol create mode 100644 contracts/seaport/test/ERC1155BatchRecipient.sol create mode 100644 contracts/seaport/test/ERC2981.sol create mode 100644 contracts/seaport/test/ERC721ReceiverMock.sol create mode 100644 contracts/seaport/test/ExcessReturnDataRecipient.sol create mode 100644 contracts/seaport/test/HashCalldataContractOfferer.sol create mode 100644 contracts/seaport/test/HashValidationZoneOfferer.sol create mode 100644 contracts/seaport/test/InvalidERC721Recipient.sol create mode 100644 contracts/seaport/test/InvalidEthRecipient.sol create mode 100644 contracts/seaport/test/OffererZoneFailureReason.sol create mode 100644 contracts/seaport/test/Reenterer.sol create mode 100644 contracts/seaport/test/TestBadContractOfferer.sol create mode 100644 contracts/seaport/test/TestCalldataHashContractOfferer.sol create mode 100644 contracts/seaport/test/TestContractOfferer.sol create mode 100644 contracts/seaport/test/TestContractOffererNativeToken.sol create mode 100644 contracts/seaport/test/TestERC1155.sol create mode 100644 contracts/seaport/test/TestERC1155Revert.sol create mode 100644 contracts/seaport/test/TestERC1271.sol create mode 100644 contracts/seaport/test/TestERC20.sol create mode 100644 contracts/seaport/test/TestERC20NotOk.sol create mode 100644 contracts/seaport/test/TestERC20Panic.sol create mode 100644 contracts/seaport/test/TestERC20Revert.sol create mode 100644 contracts/seaport/test/TestERC721.sol create mode 100644 contracts/seaport/test/TestERC721Fee.sol create mode 100644 contracts/seaport/test/TestERC721Funky.sol create mode 100644 contracts/seaport/test/TestERC721Revert.sol create mode 100644 contracts/seaport/test/TestInvalidContractOfferer.sol create mode 100644 contracts/seaport/test/TestInvalidContractOfferer165.sol create mode 100644 contracts/seaport/test/TestInvalidContractOffererRatifyOrder.sol create mode 100644 contracts/seaport/test/TestInvalidZone.sol create mode 100644 contracts/seaport/test/TestPostExecution.sol create mode 100644 contracts/seaport/test/TestTransferValidationZoneOfferer.sol create mode 100644 contracts/seaport/test/TestZone.sol create mode 100644 contracts/seaport/test/TypehashDirectory.sol create mode 100644 contracts/seaport/zones/PausableZone.sol create mode 100644 contracts/seaport/zones/PausableZoneController.sol create mode 100644 contracts/seaport/zones/interfaces/PausableZoneControllerInterface.sol create mode 100644 contracts/seaport/zones/interfaces/PausableZoneEventsAndErrors.sol create mode 100644 contracts/seaport/zones/interfaces/PausableZoneInterface.sol create mode 100644 forks/README.md create mode 100644 forks/forks.json create mode 100644 forks/passport/.eslintignore create mode 100644 forks/passport/.eslintrc.js create mode 100644 forks/passport/.gitattributes create mode 100644 forks/passport/.github/workflows/ci.yml create mode 100644 forks/passport/.gitignore create mode 100644 forks/passport/.prettierrc create mode 100644 forks/passport/.solcover.js create mode 100644 forks/passport/.solhint.json create mode 100644 forks/passport/CONTRIBUTING.md create mode 100644 forks/passport/LICENSE create mode 100644 forks/passport/README.md create mode 100644 forks/passport/audits/202309-audit-background-diagrams/address-retrieval.jpg create mode 100644 forks/passport/audits/202309-audit-background-diagrams/data-flow.jpg create mode 100644 forks/passport/audits/202309-audit-background-diagrams/factory-deployment.jpg create mode 100644 forks/passport/audits/202309-audit-background-diagrams/high-level-diagram.jpg create mode 100644 forks/passport/audits/202309-audit-background-diagrams/immutable-signer.png create mode 100644 forks/passport/audits/202309-audit-background-diagrams/incremental-deployment.gif create mode 100644 forks/passport/audits/202309-audit-background-diagrams/multicall-deploy.png create mode 100644 forks/passport/audits/202309-audit-background-diagrams/startup-wallet.png create mode 100644 forks/passport/audits/202309-audit-background-diagrams/wallet-deployment.jpg create mode 100644 forks/passport/audits/202309-audit-background-diagrams/wallet-interactions.jpg create mode 100644 forks/passport/audits/202309_Halborn_Final.pdf create mode 100644 forks/passport/audits/202309_audit_background.md create mode 100644 forks/passport/audits/Consensys_Diligence.md create mode 100644 forks/passport/audits/Quantstamp_Arcadeum_Report_Final.pdf create mode 100644 forks/passport/audits/sequence_quantstamp_audit_feb_2021.pdf create mode 100644 forks/passport/cla.txt create mode 100644 forks/passport/compileWalletProxyYul.sh create mode 100644 forks/passport/config/PROD.env.sample create mode 100644 forks/passport/hardhat.config.ts create mode 100644 forks/passport/package-lock.json create mode 100644 forks/passport/package.json create mode 100644 forks/passport/scripts/DeployWalletContracts.ts create mode 100644 forks/passport/scripts/deploy_output.json create mode 100644 forks/passport/security.md create mode 100644 forks/passport/src/.gitignore create mode 100644 forks/passport/src/.npmignore create mode 100644 forks/passport/src/contracts/Factory.sol create mode 100644 forks/passport/src/contracts/IWalletProxy.sol create mode 100644 forks/passport/src/contracts/MultiCallDeploy.sol create mode 100644 forks/passport/src/contracts/Wallet.sol create mode 100644 forks/passport/src/contracts/WalletProxy.yul create mode 100644 forks/passport/src/contracts/interfaces/IERC1271Wallet.sol create mode 100644 forks/passport/src/contracts/interfaces/IFactory.sol create mode 100644 forks/passport/src/contracts/interfaces/receivers/IERC1155Receiver.sol create mode 100644 forks/passport/src/contracts/interfaces/receivers/IERC223Receiver.sol create mode 100644 forks/passport/src/contracts/interfaces/receivers/IERC721Receiver.sol create mode 100644 forks/passport/src/contracts/migrations/Migrations.sol create mode 100644 forks/passport/src/contracts/mocks/AlwaysRevertMock.sol create mode 100644 forks/passport/src/contracts/mocks/CallReceiverMock.sol create mode 100644 forks/passport/src/contracts/mocks/CustomModule.sol create mode 100644 forks/passport/src/contracts/mocks/DelegateCallMock.sol create mode 100644 forks/passport/src/contracts/mocks/ERC165CheckerMock.sol create mode 100644 forks/passport/src/contracts/mocks/ERC20Mock.sol create mode 100644 forks/passport/src/contracts/mocks/GasBurnerMock.sol create mode 100644 forks/passport/src/contracts/mocks/HookCallerMock.sol create mode 100644 forks/passport/src/contracts/mocks/HookMock.sol create mode 100644 forks/passport/src/contracts/mocks/LibBytesImpl.sol create mode 100644 forks/passport/src/contracts/mocks/MainModule.sol create mode 100644 forks/passport/src/contracts/mocks/MainModuleMockV1.sol create mode 100644 forks/passport/src/contracts/mocks/MainModuleMockV2.sol create mode 100644 forks/passport/src/contracts/mocks/MainModuleMockV3.sol create mode 100644 forks/passport/src/contracts/mocks/ModuleMock.sol create mode 100644 forks/passport/src/contracts/modules/GuestModule.sol create mode 100644 forks/passport/src/contracts/modules/MainModule.sol create mode 100644 forks/passport/src/contracts/modules/MainModuleDynamicAuth.sol create mode 100644 forks/passport/src/contracts/modules/MainModuleGasEstimation.sol create mode 100644 forks/passport/src/contracts/modules/MainModuleUpgradable.sol create mode 100644 forks/passport/src/contracts/modules/commons/ImageHashKey.sol create mode 100644 forks/passport/src/contracts/modules/commons/Implementation.sol create mode 100644 forks/passport/src/contracts/modules/commons/ModuleAuth.sol create mode 100644 forks/passport/src/contracts/modules/commons/ModuleAuthDynamic.sol create mode 100644 forks/passport/src/contracts/modules/commons/ModuleAuthFixed.sol create mode 100644 forks/passport/src/contracts/modules/commons/ModuleAuthUpgradable.sol create mode 100644 forks/passport/src/contracts/modules/commons/ModuleCalls.sol create mode 100644 forks/passport/src/contracts/modules/commons/ModuleCreator.sol create mode 100644 forks/passport/src/contracts/modules/commons/ModuleERC165.sol create mode 100644 forks/passport/src/contracts/modules/commons/ModuleHooks.sol create mode 100644 forks/passport/src/contracts/modules/commons/ModuleIgnoreAuthUpgradable.sol create mode 100644 forks/passport/src/contracts/modules/commons/ModuleIgnoreNonceCalls.sol create mode 100644 forks/passport/src/contracts/modules/commons/ModuleReceivers.sol create mode 100644 forks/passport/src/contracts/modules/commons/ModuleSelfAuth.sol create mode 100644 forks/passport/src/contracts/modules/commons/ModuleStorage.sol create mode 100644 forks/passport/src/contracts/modules/commons/ModuleUpdate.sol create mode 100644 forks/passport/src/contracts/modules/commons/NonceKey.sol create mode 100644 forks/passport/src/contracts/modules/commons/interfaces/IModuleAuth.sol create mode 100644 forks/passport/src/contracts/modules/commons/interfaces/IModuleAuthUpgradable.sol create mode 100644 forks/passport/src/contracts/modules/commons/interfaces/IModuleCalls.sol create mode 100644 forks/passport/src/contracts/modules/commons/interfaces/IModuleCreator.sol create mode 100644 forks/passport/src/contracts/modules/commons/interfaces/IModuleHooks.sol create mode 100644 forks/passport/src/contracts/modules/commons/interfaces/IModuleUpdate.sol create mode 100644 forks/passport/src/contracts/modules/utils/GasEstimator.sol create mode 100644 forks/passport/src/contracts/modules/utils/MultiCallUtils.sol create mode 100644 forks/passport/src/contracts/modules/utils/RequireUtils.sol create mode 100644 forks/passport/src/contracts/modules/utils/SequenceUtils.sol create mode 100644 forks/passport/src/contracts/modules/utils/libs/RequireFreshSigner.sol create mode 100644 forks/passport/src/contracts/signer/ImmutableSigner.sol create mode 100644 forks/passport/src/contracts/startup/ILatestWalletImplLocator.sol create mode 100644 forks/passport/src/contracts/startup/LatestWalletImplLocator.sol create mode 100644 forks/passport/src/contracts/startup/StartupWalletImpl.sol create mode 100644 forks/passport/src/contracts/utils/LibAddress.sol create mode 100644 forks/passport/src/contracts/utils/LibBytes.sol create mode 100644 forks/passport/src/contracts/utils/SignatureValidator.sol create mode 100644 forks/passport/src/networks/arbitrum-testnet.json create mode 100644 forks/passport/src/networks/arbitrum.json create mode 100644 forks/passport/src/networks/avalanche.json create mode 100644 forks/passport/src/networks/avalancheTestnet.json create mode 100644 forks/passport/src/networks/ganache.json create mode 100644 forks/passport/src/networks/goerli.json create mode 100644 forks/passport/src/networks/kovan.json create mode 100644 forks/passport/src/networks/mainnet.json create mode 100644 forks/passport/src/networks/matic.json create mode 100644 forks/passport/src/networks/mumbai.json create mode 100644 forks/passport/src/networks/nova.json create mode 100644 forks/passport/src/networks/optimism.json create mode 100644 forks/passport/src/networks/rinkeby.json create mode 100644 forks/passport/src/networks/ropsten.json create mode 100644 forks/passport/src/package.json create mode 100644 forks/passport/src/tsconfig.adapter.json create mode 100644 forks/passport/tests/ERC165.spec.ts create mode 100644 forks/passport/tests/Factory.spec.ts create mode 100644 forks/passport/tests/GasEstimation.spec.ts create mode 100644 forks/passport/tests/GuestModule.spec.ts create mode 100644 forks/passport/tests/ImmutableDeployment.spec.ts create mode 100644 forks/passport/tests/ImmutableFactory.spec.ts create mode 100644 forks/passport/tests/ImmutableMultiCallDeploy.spec.ts create mode 100644 forks/passport/tests/ImmutableSigner.spec.ts create mode 100644 forks/passport/tests/ImmutableStartup.spec.ts create mode 100644 forks/passport/tests/LibBytes.spec.ts create mode 100644 forks/passport/tests/MainModule.bench.ts create mode 100644 forks/passport/tests/MainModule.spec.ts create mode 100644 forks/passport/tests/MultiCallUtils.spec.ts create mode 100644 forks/passport/tests/RequireUtils.spec.ts create mode 100644 forks/passport/tests/utils/contract.ts create mode 100644 forks/passport/tests/utils/helpers.ts create mode 100644 forks/passport/tests/utils/index.ts create mode 100644 forks/passport/tsconfig.json create mode 100644 forks/passport/typings/chai-bignumber.d.ts create mode 100644 forks/passport/typings/chai-bn.ts create mode 100644 forks/passport/typings/truffle.d.ts create mode 100644 forks/passport/utils/config-loader.ts create mode 100644 forks/passport/utils/deploy-contracts.ts create mode 100644 forks/passport/yarn.lock create mode 160000 forks/seaport create mode 100644 scripts/build.ts create mode 100644 scripts/compile.sh create mode 100644 scripts/install.sh create mode 100644 scripts/test.sh diff --git a/.gitmodules b/.gitmodules index 888d42dc..ed35e1f7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,9 @@ [submodule "lib/forge-std"] path = lib/forge-std url = https://github.com/foundry-rs/forge-std +[submodule "passport"] + path = passport + url = https://github.com/immutable/wallet-contracts +[submodule "forks/seaport"] + path = forks/seaport + url = https://github.com/immutable/seaport diff --git a/contracts/passport/Factory.sol b/contracts/passport/Factory.sol new file mode 100644 index 00000000..40f5c6ae --- /dev/null +++ b/contracts/passport/Factory.sol @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; +import '@openzeppelin/contracts/access/AccessControl.sol'; +import "./Wallet.sol"; + +/** + * @title Factory + * @notice Factory contract to retrieve counterfactual wallet addresses and + * deploy new Sequence wallet instances to those addresses + */ +contract Factory is AccessControl { + // Role to deploy new wallets + bytes32 public constant DEPLOYER_ROLE = keccak256('DEPLOYER_ROLE'); + + event WalletDeployed(address indexed wallet, address indexed mainModule, bytes32 salt); + + constructor(address _admin, address _deployer) { + _grantRole(DEFAULT_ADMIN_ROLE, _admin); + _grantRole(DEPLOYER_ROLE, _deployer); + } + + /** + * @notice Returns a deterministic contract address given a salt + * @param _mainModule Address of the main module to be used by the wallet + * @param _salt Salt used to generate the address + * @return _address The deterministic address + */ + function getAddress(address _mainModule, bytes32 _salt) external view returns (address _address) { + bytes32 _hash = keccak256( + abi.encodePacked( + bytes1(0xff), + address(this), + _salt, + keccak256(abi.encodePacked(Wallet.creationCode, uint256(uint160(_mainModule)))) + ) + ); + return address(uint160(uint256(_hash))); + } + + /** + * @notice Will deploy a new wallet instance using create2 + * @param _mainModule Address of the main module to be used by the wallet + * @param _salt Salt used to generate the wallet, which is the imageHash + * of the wallet's configuration. + * @dev It is recommended to not have more than 200 signers as opcode repricing + * could make transactions impossible to execute as all the signers must be + * passed for each transaction. + */ + function deploy(address _mainModule, bytes32 _salt) external payable onlyRole(DEPLOYER_ROLE) returns (address _contract) { + bytes memory code = abi.encodePacked(Wallet.creationCode, uint256(uint160(_mainModule))); + assembly { + _contract := create2(callvalue(), add(code, 32), mload(code), _salt) + } + // check deployment success + require(_contract != address(0), 'WalletFactory: deployment failed'); + // emit event, increases gas cost by ~2k + emit WalletDeployed(_contract, _mainModule, _salt); + } +} diff --git a/contracts/passport/IWalletProxy.sol b/contracts/passport/IWalletProxy.sol new file mode 100644 index 00000000..02d88473 --- /dev/null +++ b/contracts/passport/IWalletProxy.sol @@ -0,0 +1,11 @@ +// Copyright Immutable Pty Ltd 2018 - 2023 +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.3; + +/** + * Interface that WalletProxy.yul implements. + */ +interface IWalletProxy { + /// @dev Retrieve current implementation contract used by proxy + function PROXY_getImplementation() external view returns (address implementation); +} \ No newline at end of file diff --git a/contracts/passport/MultiCallDeploy.sol b/contracts/passport/MultiCallDeploy.sol new file mode 100644 index 00000000..63a88450 --- /dev/null +++ b/contracts/passport/MultiCallDeploy.sol @@ -0,0 +1,72 @@ +// Copyright (c) Immutable Pty Ltd 2018 - 2023 +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "./modules/commons/interfaces/IModuleCalls.sol"; +import '@openzeppelin/contracts/access/AccessControl.sol'; +import "./interfaces/IFactory.sol"; + +/** + * @title MultiCallDeploy + * @notice This contract is bundles the wallet deployment and the users first write transaction into a single transaction. + * Contract usage is intended for the submitter inside the relayer service, which will call either of the functions. + */ +contract MultiCallDeploy is AccessControl { + // Role to execute functions + bytes32 public constant EXECUTOR_ROLE = keccak256('EXECUTOR_ROLE'); + + constructor(address _admin, address _executor) { + _grantRole(DEFAULT_ADMIN_ROLE, _admin); + _grantRole(EXECUTOR_ROLE, _executor); + } + + /* + * @dev Grants EXECUTOR_ROLE to an user. + * @param _executor Address that will be allowed to execute functions + */ + function grantExecutorRole(address _executor) external onlyRole(DEFAULT_ADMIN_ROLE) { + _grantRole(EXECUTOR_ROLE, _executor); + } + + /* + * @dev Deploy wallet and execute transaction. + * @param _mainModule Address of the main module to be used by the wallet + * @param _salt Salt used to generate the address + * @param factory address of the factory contract + * @param _txs transaction to execute + * @param _nonce nonce of the wallet + * @param _signature transaction signature from wallet + */ + function deployExecute(address _mainModule, bytes32 _salt, address factory, IModuleCalls.Transaction[] calldata _txs, uint256 _nonce, bytes calldata _signature) external onlyRole(EXECUTOR_ROLE) { + address ret = IFactory(factory).deploy(_mainModule, _salt); + IModuleCalls(ret).execute(_txs, _nonce, _signature); + } + + /* + * @dev Handles deployment of wallet and transaction execution for both cases + * @param cfa counter factual address of the wallet + * @param _mainModule Address of the main module to be used by the wallet + * @param _salt Salt used to generate the address + * @param factory address of the factory contract + * @param _txs transaction to execute + * @param _nonce nonce of the wallet + * @param _signature transaction signature from wallet + */ + function deployAndExecute(address cfa, address _mainModule, bytes32 _salt, address factory, IModuleCalls.Transaction[] calldata _txs, uint256 _nonce, bytes calldata _signature) external onlyRole(EXECUTOR_ROLE){ + // Get code size at CFA + uint32 size; + assembly { + size := extcodesize(cfa) + } + + // If size is 0, deploy the proxy and execute write tx + // Else, execute the users transaction + if (size == 0) { + address ret = IFactory(factory).deploy(_mainModule, _salt); + require(cfa == ret, "MultiCallDeploy: deployed address does not match CFA"); + IModuleCalls(ret).execute(_txs, _nonce, _signature); + } else { + IModuleCalls(cfa).execute(_txs, _nonce, _signature); + } + } +} \ No newline at end of file diff --git a/contracts/passport/README.md b/contracts/passport/README.md new file mode 100644 index 00000000..e74e141d --- /dev/null +++ b/contracts/passport/README.md @@ -0,0 +1 @@ +DO NOT MODIFY THESE CONTRACTS DIRECTLY. This folder has been automatically extracted from https://github.com/immutable/wallet-contracts via a submodule in this repository's forks directory. See the upstream repository for full context. \ No newline at end of file diff --git a/contracts/passport/Wallet.sol b/contracts/passport/Wallet.sol new file mode 100644 index 00000000..65532d0e --- /dev/null +++ b/contracts/passport/Wallet.sol @@ -0,0 +1,10 @@ +// Copyright Immutable Pty Ltd 2018 - 2023 +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +// Holds the creation code of the WalletProxy.yul used by smart contract wallet instances. +// Generate this bytecode using ./compileWalletProxyYul.sh +library Wallet { + // This bytecode must precisely match that in tests/utils/helpers.ts + bytes internal constant creationCode = hex"6054600f3d396034805130553df3fe63906111273d3560e01c14602b57363d3d373d3d3d3d369030545af43d82803e156027573d90f35b3d90fd5b30543d5260203df3"; +} diff --git a/contracts/passport/WalletProxy.yul b/contracts/passport/WalletProxy.yul new file mode 100644 index 00000000..2bf1f8e9 --- /dev/null +++ b/contracts/passport/WalletProxy.yul @@ -0,0 +1,81 @@ +// Copyright (c) Immutable Pty Ltd 2018 - 2023 +// SPDX-License-Identifier: Apache-2.0 +// +// This Yul code creates a minimalist transparent proxy with a function to fetch +// the address of the contract being proxied to using the interface described in +// IWalletProxy.sol . +// +object "ProxyGetImplYul" { + // This is the initcode of the contract. + code { + // Copy the runtime code plus the address of the implementation + // parameter (32 bytes) which is appended to the end to memory. + // copy s bytes from code at position f to mem at position t + // codecopy(t, f, s) + // This will turn into a memory->memory copy for Ewasm and + // a codecopy for EVM + // The constant 0x54 is datasize("runtime") + 32. The solc compiler is + // unable to do constant addition as part of the compilation process, hence + // the constant. + // If the runtime code is to be updated, uncomment the following line, and comment + // out the following line, so that datasize("runtime") can be determined. It will + // be the byte following the 0x60 push1 opcode. +// datacopy(returndatasize(), dataoffset("runtime"), add(datasize("runtime"), 32)) + datacopy(returndatasize(), dataoffset("runtime"), 0x54) + + // Store the implementation address at the storage slot which is + // equivalent to the deployed address of this contract. + let implAddress := mload(datasize("runtime")) + sstore(address(), implAddress) + + // now return the runtime object (the currently + // executing code is the constructor code) + return(returndatasize(), datasize("runtime")) + } + + + // Code for deployed contract + object "runtime" { + code { + // Load the function selector (the first four bytes of calldata) by shifting the + // word to the right. + let selector := shr(224, calldataload(returndatasize())) + + if eq(selector, 0x90611127) /* Function selector for "PROXY_getImplementation()" */ { + let impl := sload(address()) + mstore(returndatasize(), impl) + return(returndatasize(), 0x20) + } + + // Load calldata to memory location 0. + // Copy s bytes from calldata at position f to mem at position t + // calldatacopy(t, f, s) + calldatacopy(returndatasize(), returndatasize(), calldatasize()) + + // Use returndatasize to load zero. + let zero := returndatasize() + + // Execute delegate call. Have outsize set to zero, to indicate + // don't return any data automatically. + // Call contract at address a with input mem[in…(in+insize)) + // providing g gas and v wei and output area + // mem[out…(out+outsize)) returning 0 on error + // (eg. out of gas) and 1 on success + // delegatecall(g, a, in, insize, out, outsize) + // Use sload(address()) to load the implemntation address. + let success := delegatecall(gas(), sload(address()), returndatasize(), calldatasize(), returndatasize(), returndatasize()) + + // Copy the return result to memory location 0. + // Copy s bytes from returndata at position f to mem at position t + // returndatacopy(t, f, s) + returndatacopy(zero, zero, returndatasize()) + + // Return or revert: memory location 0 contains either the return value + // or the revert information. + if iszero(success) { + revert (zero,returndatasize()) + } + return (zero,returndatasize()) + } + } +} \ No newline at end of file diff --git a/contracts/passport/interfaces/IERC1271Wallet.sol b/contracts/passport/interfaces/IERC1271Wallet.sol new file mode 100644 index 00000000..794798d8 --- /dev/null +++ b/contracts/passport/interfaces/IERC1271Wallet.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +interface IERC1271Wallet { + + /** + * @notice Verifies whether the provided signature is valid with respect to the provided data + * @dev MUST return the correct magic value if the signature provided is valid for the provided data + * > The bytes4 magic value to return when signature is valid is 0x20c13b0b : bytes4(keccak256("isValidSignature(bytes,bytes)") + * > This function MAY modify Ethereum's state + * @param _data Arbitrary length data signed on the behalf of address(this) + * @param _signature Signature byte array associated with _data + * @return magicValue Magic value 0x20c13b0b if the signature is valid and 0x0 otherwise + */ + function isValidSignature( + bytes calldata _data, + bytes calldata _signature) + external + view + returns (bytes4 magicValue); + + /** + * @notice Verifies whether the provided signature is valid with respect to the provided hash + * @dev MUST return the correct magic value if the signature provided is valid for the provided hash + * > The bytes4 magic value to return when signature is valid is 0x20c13b0b : bytes4(keccak256("isValidSignature(bytes,bytes)") + * > This function MAY modify Ethereum's state + * @param _hash keccak256 hash that was signed + * @param _signature Signature byte array associated with _data + * @return magicValue Magic value 0x20c13b0b if the signature is valid and 0x0 otherwise + */ + function isValidSignature( + bytes32 _hash, + bytes calldata _signature) + external + view + returns (bytes4 magicValue); +} \ No newline at end of file diff --git a/contracts/passport/interfaces/IFactory.sol b/contracts/passport/interfaces/IFactory.sol new file mode 100644 index 00000000..94258ad0 --- /dev/null +++ b/contracts/passport/interfaces/IFactory.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +/** + * @title IFactory + * @notice Factory interface to interact with wallet factory + */ +interface IFactory { + event WalletDeployed(address indexed wallet, address indexed mainModule, bytes32 salt); + + /** + * @notice Returns a deterministic contract address given a salt + * @param _mainModule Address of the main module to be used by the wallet + * @param _salt Salt used to generate the address + * @return _address The deterministic address + */ + function getAddress(address _mainModule, bytes32 _salt) external view returns (address); + + /** + * @notice Will deploy a new wallet instance using create2 + * @param _mainModule Address of the main module to be used by the wallet + * @param _salt Salt used to generate the wallet, which is the imageHash + * of the wallet's configuration. + * @dev It is recommended to not have more than 200 signers as opcode repricing + * could make transactions impossible to execute as all the signers must be + * passed for each transaction. + */ + function deploy(address _mainModule, bytes32 _salt) external payable returns (address); +} diff --git a/contracts/passport/interfaces/receivers/IERC1155Receiver.sol b/contracts/passport/interfaces/receivers/IERC1155Receiver.sol new file mode 100644 index 00000000..f61d6466 --- /dev/null +++ b/contracts/passport/interfaces/receivers/IERC1155Receiver.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +interface IERC1155Receiver { + function onERC1155Received(address, address, uint256, uint256, bytes calldata) external returns (bytes4); + function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata) external returns (bytes4); +} diff --git a/contracts/passport/interfaces/receivers/IERC223Receiver.sol b/contracts/passport/interfaces/receivers/IERC223Receiver.sol new file mode 100644 index 00000000..dc092c69 --- /dev/null +++ b/contracts/passport/interfaces/receivers/IERC223Receiver.sol @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +interface IERC223Receiver { + function tokenFallback(address, uint256, bytes calldata) external; +} diff --git a/contracts/passport/interfaces/receivers/IERC721Receiver.sol b/contracts/passport/interfaces/receivers/IERC721Receiver.sol new file mode 100644 index 00000000..495be6b1 --- /dev/null +++ b/contracts/passport/interfaces/receivers/IERC721Receiver.sol @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +interface IERC721Receiver { + function onERC721Received(address, address, uint256, bytes calldata) external returns (bytes4); +} diff --git a/contracts/passport/migrations/Migrations.sol b/contracts/passport/migrations/Migrations.sol new file mode 100644 index 00000000..03215be8 --- /dev/null +++ b/contracts/passport/migrations/Migrations.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +contract Migrations { + address public owner; + uint public last_completed_migration; + + constructor() public { + owner = msg.sender; + } + + modifier restricted() { + if (msg.sender == owner) + _; + } + + function setCompleted(uint completed) public restricted { + last_completed_migration = completed; + } + + function upgrade(address new_address) public restricted { + Migrations upgraded = Migrations(new_address); + upgraded.setCompleted(last_completed_migration); + } +} diff --git a/contracts/passport/mocks/AlwaysRevertMock.sol b/contracts/passport/mocks/AlwaysRevertMock.sol new file mode 100644 index 00000000..77b1aa4b --- /dev/null +++ b/contracts/passport/mocks/AlwaysRevertMock.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +contract AlwaysRevertMock { + fallback() external payable { + revert("AlwaysRevertMock#fallback: ALWAYS_REVERT"); + } +} diff --git a/contracts/passport/mocks/CallReceiverMock.sol b/contracts/passport/mocks/CallReceiverMock.sol new file mode 100644 index 00000000..f0dda9cd --- /dev/null +++ b/contracts/passport/mocks/CallReceiverMock.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +contract CallReceiverMock { + uint256 public lastValA; + bytes public lastValB; + + bool revertFlag; + + constructor() public payable { } + + function setRevertFlag(bool _revertFlag) external { + revertFlag = _revertFlag; + } + + function testCall(uint256 _valA, bytes calldata _valB) external payable { + require(!revertFlag, "CallReceiverMock#testCall: REVERT_FLAG"); + + lastValA = _valA; + lastValB = _valB; + } +} diff --git a/contracts/passport/mocks/CustomModule.sol b/contracts/passport/mocks/CustomModule.sol new file mode 100644 index 00000000..12ccc619 --- /dev/null +++ b/contracts/passport/mocks/CustomModule.sol @@ -0,0 +1,13 @@ +pragma solidity 0.8.17; + +contract CustomModule { + string public str; + + function getStr() public view returns (string memory) { + return str; + } + + function setStr(string memory _str) public { + str = _str; + } +} diff --git a/contracts/passport/mocks/DelegateCallMock.sol b/contracts/passport/mocks/DelegateCallMock.sol new file mode 100644 index 00000000..cfd500ae --- /dev/null +++ b/contracts/passport/mocks/DelegateCallMock.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +contract DelegateCallMock { + event Readed(uint256 _val); + + uint256 private constant REVERT_SLOT = uint256(keccak256("revert-flag")); + + mapping(uint256 => uint256) private store; + + function setRevertFlag(bool _revertFlag) external { + store[REVERT_SLOT] = _revertFlag ? 1 : 0; + } + + function write(uint256 _key, uint256 _val) external { + require(store[REVERT_SLOT] == 0, "DelegateCallMock#write: REVERT_FLAG"); + store[_key] = _val; + } + + function read(uint256 _key) external { + emit Readed(store[_key]); + } +} diff --git a/contracts/passport/mocks/ERC165CheckerMock.sol b/contracts/passport/mocks/ERC165CheckerMock.sol new file mode 100644 index 00000000..2f453b92 --- /dev/null +++ b/contracts/passport/mocks/ERC165CheckerMock.sol @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +contract ERC165CheckerMock { + bytes4 constant InvalidID = 0xffffffff; + bytes4 constant ERC165ID = 0x01ffc9a7; + + function doesContractImplementInterface(address _contract, bytes4 _interfaceId) external view returns (bool) { + uint256 success; + uint256 result; + + (success, result) = noThrowCall(_contract, ERC165ID); + if (success == 0 || result == 0) { + return false; + } + + (success, result) = noThrowCall(_contract, InvalidID); + if (success == 0 || result != 0) { + return false; + } + + (success, result) = noThrowCall(_contract, _interfaceId); + if (success == 1 && result == 1) { + return true; + } + return false; + } + + function noThrowCall( + address _contract, + bytes4 _interfaceId + ) private view returns ( + uint256 success, + uint256 result + ) { + bytes4 erc165ID = ERC165ID; + + assembly { + let x := mload(0x40) // Find empty storage location using "free memory pointer" + mstore(x, erc165ID) // Place signature at beginning of empty storage + mstore(add(x, 0x04), _interfaceId) // Place first argument directly next to signature + + success := staticcall( + 30000, // 30k gas + _contract, // To addr + x, // Inputs are stored at location x + 0x24, // Inputs are 36 bytes long + x, // Store output over input (saves space) + 0x20 // Outputs are 32 bytes long + ) + + result := mload(x) // Load the result + } + } +} diff --git a/contracts/passport/mocks/ERC20Mock.sol b/contracts/passport/mocks/ERC20Mock.sol new file mode 100644 index 00000000..0ec14633 --- /dev/null +++ b/contracts/passport/mocks/ERC20Mock.sol @@ -0,0 +1,9 @@ +pragma solidity ^0.8.0; + +import '@openzeppelin/contracts/token/ERC20/ERC20.sol'; + +contract ERC20Mock is ERC20 { + constructor()ERC20("Mock", "M"){ + _mint(msg.sender, 100 ether); + } +} \ No newline at end of file diff --git a/contracts/passport/mocks/GasBurnerMock.sol b/contracts/passport/mocks/GasBurnerMock.sol new file mode 100644 index 00000000..5deb005b --- /dev/null +++ b/contracts/passport/mocks/GasBurnerMock.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +contract GasBurnerMock { + event ProvidedGas(uint256 _val); + + function burnGas(uint256 _burn) external { + emit ProvidedGas(gasleft()); + + bytes32 stub; + uint256 initial = gasleft(); + + while (initial - gasleft() < _burn) { + stub = keccak256(abi.encode(stub)); + } + } +} diff --git a/contracts/passport/mocks/HookCallerMock.sol b/contracts/passport/mocks/HookCallerMock.sol new file mode 100644 index 00000000..f5b0a933 --- /dev/null +++ b/contracts/passport/mocks/HookCallerMock.sol @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "../interfaces/receivers/IERC1155Receiver.sol"; +import "../interfaces/receivers/IERC721Receiver.sol"; +import "../interfaces/receivers/IERC223Receiver.sol"; + +import "../interfaces/IERC1271Wallet.sol"; + + +contract HookCallerMock { + function callERC1155Received(address _addr) external { + bytes4 result = IERC1155Receiver(_addr).onERC1155Received( + address(this), + msg.sender, + 1, + 2, + msg.data + ); + + require(result == 0xf23a6e61, "HookCallerMock#callERC1155Received: INVALID_RETURN"); + } + + function callERC1155BatchReceived(address _addr) external { + uint256[] memory ids = new uint256[](3); + ids[0] = 1; + ids[1] = 2; + ids[2] = 3; + + uint256[] memory values = new uint256[](3); + values[0] = 200; + values[1] = 300; + values[2] = 400; + + bytes4 result = IERC1155Receiver(_addr).onERC1155BatchReceived( + address(this), + msg.sender, + ids, + values, + msg.data + ); + + require(result == 0xbc197c81, "HookCallerMock#callERC1155BatchReceived: INVALID_RETURN"); + } + + function callERC721Received(address _addr) external { + bytes4 result = IERC721Receiver(_addr).onERC721Received( + address(this), + msg.sender, + 1, + msg.data + ); + + require(result == 0x150b7a02, "HookCallerMock#callERC721Received: INVALID_RETURN"); + } + + function callERC223Received(address _addr) external { + IERC223Receiver(_addr).tokenFallback(msg.sender, 1, msg.data); + } + + function callERC1271isValidSignatureData( + address _addr, + bytes calldata _data, + bytes calldata _signature + ) external view { + bytes4 result = IERC1271Wallet(_addr).isValidSignature(_data, _signature); + require(result == 0x20c13b0b, "HookCallerMock#callERC1271isValidSignatureData: INVALID_RETURN"); + } + + function callERC1271isValidSignatureHash( + address _addr, + bytes32 _hash, + bytes calldata _signature + ) external view { + bytes4 result = IERC1271Wallet(_addr).isValidSignature(_hash, _signature); + require(result == 0x1626ba7e, "HookCallerMock#callERC1271isValidSignatureHash: INVALID_RETURN"); + } +} diff --git a/contracts/passport/mocks/HookMock.sol b/contracts/passport/mocks/HookMock.sol new file mode 100644 index 00000000..d2be3583 --- /dev/null +++ b/contracts/passport/mocks/HookMock.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +contract HookMock { + function onHookMockCall(uint256 _num) external pure returns (uint256) { + return _num * 2; + } +} diff --git a/contracts/passport/mocks/LibBytesImpl.sol b/contracts/passport/mocks/LibBytesImpl.sol new file mode 100644 index 00000000..2ebfa07c --- /dev/null +++ b/contracts/passport/mocks/LibBytesImpl.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "../utils/LibBytes.sol"; + + +contract LibBytesImpl { + using LibBytes for bytes; + + function readFirstUint16(bytes calldata _data) external pure returns (uint16, uint256) { + return _data.readFirstUint16(); + } + + function readUint8Uint8(bytes calldata _data, uint256 _index) external pure returns (uint8, uint8, uint256) { + return _data.readUint8Uint8(_index); + } + + function readAddress(bytes calldata _data, uint256 _index) external pure returns (address, uint256) { + return _data.readAddress(_index); + } + + function readBytes66(bytes calldata _data, uint256 _index) external pure returns (bytes memory, uint256) { + return _data.readBytes66(_index); + } + + function readBytes32(bytes calldata _data, uint256 _index) external pure returns (bytes32) { + return _data.readBytes32(_index); + } + + function readUint16(bytes calldata _data, uint256 _index) external pure returns (uint16, uint256) { + return _data.readUint16(_index); + } + + function readBytes(bytes calldata _data, uint256 _index, uint256 _size) external view returns (bytes memory, uint256) { + return _data.readBytes(_index, _size); + } +} diff --git a/contracts/passport/mocks/MainModule.sol b/contracts/passport/mocks/MainModule.sol new file mode 100644 index 00000000..e792c012 --- /dev/null +++ b/contracts/passport/mocks/MainModule.sol @@ -0,0 +1,7 @@ +pragma solidity 0.8.17; +// installed under @sequence/wallet-contracts alias instead of @0xsequence/wallet-contracts as the '0x' has problems with typechain +import "../modules/MainModule.sol"; + +contract MainModuleMock is MainModule { + constructor(address _factory) MainModule(_factory) {} +} diff --git a/contracts/passport/mocks/MainModuleMockV1.sol b/contracts/passport/mocks/MainModuleMockV1.sol new file mode 100644 index 00000000..47807abc --- /dev/null +++ b/contracts/passport/mocks/MainModuleMockV1.sol @@ -0,0 +1,12 @@ +// Copyright Immutable Pty Ltd 2018 - 2023 +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "../modules/MainModuleDynamicAuth.sol"; + +contract MainModuleMockV1 is MainModuleDynamicAuth { + // solhint-disable-next-line no-empty-blocks + constructor(address _factory, address _startup) MainModuleDynamicAuth(_factory, _startup) {} + + +} diff --git a/contracts/passport/mocks/MainModuleMockV2.sol b/contracts/passport/mocks/MainModuleMockV2.sol new file mode 100644 index 00000000..d0ed7087 --- /dev/null +++ b/contracts/passport/mocks/MainModuleMockV2.sol @@ -0,0 +1,15 @@ +// Copyright Immutable Pty Ltd 2018 - 2023 +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "../modules/MainModuleDynamicAuth.sol"; + +contract MainModuleMockV2 is MainModuleDynamicAuth { + // solhint-disable-next-line no-empty-blocks + constructor(address _factory, address _startup) MainModuleDynamicAuth(_factory, _startup) {} + + function version() external pure override returns (uint256) { + return 2; + } + +} \ No newline at end of file diff --git a/contracts/passport/mocks/MainModuleMockV3.sol b/contracts/passport/mocks/MainModuleMockV3.sol new file mode 100644 index 00000000..1f590a7c --- /dev/null +++ b/contracts/passport/mocks/MainModuleMockV3.sol @@ -0,0 +1,15 @@ +// Copyright Immutable Pty Ltd 2018 - 2023 +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "../modules/MainModuleDynamicAuth.sol"; + +contract MainModuleMockV3 is MainModuleDynamicAuth { + // solhint-disable-next-line no-empty-blocks + constructor(address _factory, address _startup) MainModuleDynamicAuth(_factory, _startup) {} + + function version() external pure override returns (uint256) { + return 3; + } + +} \ No newline at end of file diff --git a/contracts/passport/mocks/ModuleMock.sol b/contracts/passport/mocks/ModuleMock.sol new file mode 100644 index 00000000..a0f1f840 --- /dev/null +++ b/contracts/passport/mocks/ModuleMock.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +contract ModuleMock { + event Pong(); + + function ping() external { + emit Pong(); + } +} diff --git a/contracts/passport/modules/GuestModule.sol b/contracts/passport/modules/GuestModule.sol new file mode 100644 index 00000000..972bf598 --- /dev/null +++ b/contracts/passport/modules/GuestModule.sol @@ -0,0 +1,117 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "../utils/SignatureValidator.sol"; + +import "./commons/Implementation.sol"; +import "./commons/ModuleAuth.sol"; +import "./commons/ModuleHooks.sol"; +import "./commons/ModuleCalls.sol"; +import "./commons/ModuleUpdate.sol"; +import "./commons/ModuleCreator.sol"; + +import "../interfaces/receivers/IERC1155Receiver.sol"; +import "../interfaces/receivers/IERC721Receiver.sol"; + +import "../interfaces/IERC1271Wallet.sol"; + + +/** + * GuestModule implements an Arcadeum wallet without signatures, nonce or replay protection. + * executing transactions using this wallet is not an authenticated process, and can be done by any address. + * + * @notice This contract is completely public with no security, designed to execute pre-signed transactions + * and use Arcadeum tools without using the wallets. + */ +contract GuestModule is + ModuleAuth, + ModuleCalls, + ModuleCreator +{ + /** + * @notice Allow any caller to execute an action + * @param _txs Transactions to process + */ + function execute( + Transaction[] memory _txs, + uint256, + bytes memory + ) public override { + // Hash transaction bundle + bytes32 txHash = _subDigest(keccak256(abi.encode('guest:', _txs))); + + // Execute the transactions + _executeGuest(txHash, _txs); + } + + /** + * @notice Allow any caller to execute an action + * @param _txs Transactions to process + */ + function selfExecute( + Transaction[] memory _txs + ) public override { + // Hash transaction bundle + bytes32 txHash = _subDigest(keccak256(abi.encode('self:', _txs))); + + // Execute the transactions + _executeGuest(txHash, _txs); + } + + /** + * @notice Executes a list of transactions + * @param _txHash Hash of the batch of transactions + * @param _txs Transactions to execute + */ + function _executeGuest( + bytes32 _txHash, + Transaction[] memory _txs + ) private { + // Execute transaction + for (uint256 i = 0; i < _txs.length; i++) { + Transaction memory transaction = _txs[i]; + + bool success; + bytes memory result; + + require(!transaction.delegateCall, 'GuestModule#_executeGuest: delegateCall not allowed'); + require(gasleft() >= transaction.gasLimit, "GuestModule#_executeGuest: NOT_ENOUGH_GAS"); + + // solhint-disable + (success, result) = transaction.target.call{ + value: transaction.value, + gas: transaction.gasLimit == 0 ? gasleft() : transaction.gasLimit + }(transaction.data); + // solhint-enable + + if (success) { + emit TxExecuted(_txHash); + } else { + _revertBytes(transaction, _txHash, result); + } + } + } + + /** + * @notice Validates any signature image, because the wallet is public and has now owner. + * @return true, all signatures are valid, false, no updates required + */ + function _isValidImage(bytes32) internal override view returns (bool, bool) { + return (true, false); + } + + /** + * @notice Query if a contract implements an interface + * @param _interfaceID The interface identifier, as specified in ERC-165 + * @return `true` if the contract implements `_interfaceID` + */ + function supportsInterface( + bytes4 _interfaceID + ) public override ( + ModuleAuth, + ModuleCalls, + ModuleCreator + ) pure returns (bool) { + return super.supportsInterface(_interfaceID); + } +} diff --git a/contracts/passport/modules/MainModule.sol b/contracts/passport/modules/MainModule.sol new file mode 100644 index 00000000..e1b6f4dd --- /dev/null +++ b/contracts/passport/modules/MainModule.sol @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "../utils/SignatureValidator.sol"; + +import "./commons/Implementation.sol"; +import "./commons/ModuleAuthFixed.sol"; +import "./commons/ModuleHooks.sol"; +import "./commons/ModuleCalls.sol"; +import "./commons/ModuleUpdate.sol"; +import "./commons/ModuleCreator.sol"; + +import "../interfaces/receivers/IERC1155Receiver.sol"; +import "../interfaces/receivers/IERC721Receiver.sol"; + +import "../interfaces/IERC1271Wallet.sol"; + + +/** + * @notice Contains the core functionality arcadeum wallets will inherit. + * @dev If using a new main module, developpers must ensure that all inherited + * contracts by the mainmodule don't conflict and are accounted for to be + * supported by the supportsInterface method. + */ +contract MainModule is + ModuleAuthFixed, + ModuleCalls, + ModuleUpdate, + ModuleHooks, + ModuleCreator +{ + constructor( + address _factory + ) public ModuleAuthFixed( + _factory + ) { } + + /** + * @notice Query if a contract implements an interface + * @param _interfaceID The interface identifier, as specified in ERC-165 + * @return `true` if the contract implements `_interfaceID` + */ + function supportsInterface( + bytes4 _interfaceID + ) public override( + ModuleAuth, + ModuleCalls, + ModuleUpdate, + ModuleHooks, + ModuleCreator + ) pure returns (bool) { + return super.supportsInterface(_interfaceID); + } +} diff --git a/contracts/passport/modules/MainModuleDynamicAuth.sol b/contracts/passport/modules/MainModuleDynamicAuth.sol new file mode 100644 index 00000000..149ce806 --- /dev/null +++ b/contracts/passport/modules/MainModuleDynamicAuth.sol @@ -0,0 +1,52 @@ +// Copyright Immutable Pty Ltd 2018 - 2023 +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "./commons/ModuleAuthDynamic.sol"; +import "./commons/ModuleReceivers.sol"; +import "./commons/ModuleCalls.sol"; +import "./commons/ModuleUpdate.sol"; + + +/** + * TODO Peter update docs + * @notice Contains the core functionality arcadeum wallets will inherit with + * the added functionality that the main-module can be changed. + * @dev If using a new main module, developpers must ensure that all inherited + * contracts by the mainmodule don't conflict and are accounted for to be + * supported by the supportsInterface method. + */ +contract MainModuleDynamicAuth is + ModuleAuthDynamic, + ModuleCalls, + ModuleReceivers, + ModuleUpdate +{ + + // solhint-disable-next-line no-empty-blocks + constructor(address _factory, address _startup) ModuleAuthDynamic (_factory, _startup) { } + + + /** + * @notice Query if a contract implements an interface + * @param _interfaceID The interface identifier, as specified in ERC-165 + * @dev If using a new main module, developpers must ensure that all inherited + * contracts by the mainmodule don't conflict and are accounted for to be + * supported by the supportsInterface method. + * @return `true` if the contract implements `_interfaceID` + */ + function supportsInterface( + bytes4 _interfaceID + ) public override( + ModuleAuthUpgradable, + ModuleCalls, + ModuleReceivers, + ModuleUpdate + ) pure returns (bool) { + return super.supportsInterface(_interfaceID); + } + + function version() external pure virtual returns (uint256) { + return 1; + } +} diff --git a/contracts/passport/modules/MainModuleGasEstimation.sol b/contracts/passport/modules/MainModuleGasEstimation.sol new file mode 100644 index 00000000..f1fddbab --- /dev/null +++ b/contracts/passport/modules/MainModuleGasEstimation.sol @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "./commons/ModuleIgnoreAuthUpgradable.sol"; +import "./commons/ModuleIgnoreNonceCalls.sol"; +import "./commons/ModuleHooks.sol"; +import "./commons/ModuleUpdate.sol"; +import "./commons/ModuleCreator.sol"; + + +/** + * @notice Contains an alternative implementation of the MainModules that skips validation of + * signatures, this implementation SHOULD NOT be used directly on a wallet. + * + * Intended to be used only for gas estimation, using eth_call and overrides. + */ +contract MainModuleGasEstimation is + ModuleIgnoreAuthUpgradable, + ModuleIgnoreNonceCalls, + ModuleUpdate, + ModuleHooks, + ModuleCreator +{ + struct SimulateResult { + bool executed; + bool succeeded; + bytes result; + uint256 gasUsed; + } + + /** + * @notice Simulate each transaction in a bundle for gas usage and execution result + * @param _txs Transactions to process + * @return The gas used and execution result for each transaction in the bundle + */ + function simulateExecute(Transaction[] calldata _txs) public virtual returns (SimulateResult[] memory) { + SimulateResult[] memory results = new SimulateResult[](_txs.length); + + // Execute transaction + for (uint256 i = 0; i < _txs.length; i++) { + Transaction memory transaction = _txs[i]; + + require(gasleft() >= transaction.gasLimit, "MainModuleGasEstimation#simulateExecute: NOT_ENOUGH_GAS"); + + results[i].executed = true; + + if (transaction.delegateCall) { + uint256 initialGas = gasleft(); + + (results[i].succeeded, results[i].result) = transaction.target.delegatecall{ + gas: transaction.gasLimit == 0 ? gasleft() : transaction.gasLimit + }(transaction.data); + + results[i].gasUsed = initialGas - gasleft(); + } else { + uint256 initialGas = gasleft(); + + (results[i].succeeded, results[i].result) = transaction.target.call{ + value: transaction.value, + gas: transaction.gasLimit == 0 ? gasleft() : transaction.gasLimit + }(transaction.data); + + results[i].gasUsed = initialGas - gasleft(); + } + + if (!results[i].succeeded && _txs[i].revertOnError) { + break; + } + } + + return results; + } + + /** + * @notice Query if a contract implements an interface + * @param _interfaceID The interface identifier, as specified in ERC-165 + * @dev If using a new main module, developpers must ensure that all inherited + * contracts by the mainmodule don't conflict and are accounted for to be + * supported by the supportsInterface method. + * @return `true` if the contract implements `_interfaceID` + */ + function supportsInterface( + bytes4 _interfaceID + ) public override( + ModuleIgnoreAuthUpgradable, + ModuleIgnoreNonceCalls, + ModuleUpdate, + ModuleHooks, + ModuleCreator + ) pure returns (bool) { + return super.supportsInterface(_interfaceID); + } +} diff --git a/contracts/passport/modules/MainModuleUpgradable.sol b/contracts/passport/modules/MainModuleUpgradable.sol new file mode 100644 index 00000000..588682da --- /dev/null +++ b/contracts/passport/modules/MainModuleUpgradable.sol @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "./commons/ModuleAuthUpgradable.sol"; +import "./commons/ModuleHooks.sol"; +import "./commons/ModuleCalls.sol"; +import "./commons/ModuleUpdate.sol"; +import "./commons/ModuleCreator.sol"; + + +/** + * @notice Contains the core functionality arcadeum wallets will inherit with + * the added functionality that the main-module can be changed. + * @dev If using a new main module, developpers must ensure that all inherited + * contracts by the mainmodule don't conflict and are accounted for to be + * supported by the supportsInterface method. + */ +contract MainModuleUpgradable is + ModuleAuthUpgradable, + ModuleCalls, + ModuleUpdate, + ModuleHooks, + ModuleCreator +{ + /** + * @notice Query if a contract implements an interface + * @param _interfaceID The interface identifier, as specified in ERC-165 + * @dev If using a new main module, developpers must ensure that all inherited + * contracts by the mainmodule don't conflict and are accounted for to be + * supported by the supportsInterface method. + * @return `true` if the contract implements `_interfaceID` + */ + function supportsInterface( + bytes4 _interfaceID + ) public override( + ModuleAuthUpgradable, + ModuleCalls, + ModuleUpdate, + ModuleHooks, + ModuleCreator + ) pure returns (bool) { + return super.supportsInterface(_interfaceID); + } +} diff --git a/contracts/passport/modules/commons/ImageHashKey.sol b/contracts/passport/modules/commons/ImageHashKey.sol new file mode 100644 index 00000000..e1d9ec44 --- /dev/null +++ b/contracts/passport/modules/commons/ImageHashKey.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +library ImageHashKey { + // Randomly generated to avoid collisions, with: + // xxd -len 32 -plain -cols 32 /dev/urandom + bytes32 internal constant IMAGE_HASH_KEY = bytes32(0xad348b32c79cd46ad46d61aede26d38affaee58f9a122f91eb271e08720464bf); +} diff --git a/contracts/passport/modules/commons/Implementation.sol b/contracts/passport/modules/commons/Implementation.sol new file mode 100644 index 00000000..a1c65df9 --- /dev/null +++ b/contracts/passport/modules/commons/Implementation.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +/** + * @dev Allows modules to access the implementation slot + */ +contract Implementation { + /** + * @notice Updates the Wallet implementation + * @param _imp New implementation address + * @dev The wallet implementation is stored on the storage slot + * defined by the address of the wallet itself + * WARNING updating this value may break the wallet and users + * must be confident that the new implementation is safe. + */ + function _setImplementation(address _imp) internal { + assembly { + sstore(address(), _imp) + } + } + + /** + * @notice Returns the Wallet implementation + * @return _imp The address of the current Wallet implementation + */ + function _getImplementation() internal view returns (address _imp) { + assembly { + _imp := sload(address()) + } + } +} diff --git a/contracts/passport/modules/commons/ModuleAuth.sol b/contracts/passport/modules/commons/ModuleAuth.sol new file mode 100644 index 00000000..25cdc1d9 --- /dev/null +++ b/contracts/passport/modules/commons/ModuleAuth.sol @@ -0,0 +1,228 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "../../utils/LibBytes.sol"; +import "../../utils/SignatureValidator.sol"; +import "../../interfaces/IERC1271Wallet.sol"; + +import "./interfaces/IModuleAuth.sol"; + +import "./ModuleERC165.sol"; + + +abstract contract ModuleAuth is IModuleAuth, ModuleERC165, SignatureValidator, IERC1271Wallet { + using LibBytes for bytes; + + uint256 private constant FLAG_SIGNATURE = 0; + uint256 private constant FLAG_ADDRESS = 1; + uint256 private constant FLAG_DYNAMIC_SIGNATURE = 2; + + bytes4 private constant SELECTOR_ERC1271_BYTES_BYTES = 0x20c13b0b; + bytes4 private constant SELECTOR_ERC1271_BYTES32_BYTES = 0x1626ba7e; + + /** + * @notice Verify if signer is default wallet owner + * @param _hash Hashed signed message + * @param _signature Array of signatures with signers ordered + * like the the keys in the multisig configs + * + * @dev The signature must be solidity packed and contain the total number of owners, + * the threshold, the weight and either the address or a signature for each owner. + * + * Each weight & (address or signature) pair is prefixed by a flag that signals if such pair + * contains an address or a signature. The aggregated weight of the signatures must surpass the threshold. + * + * Flag types: + * 0x00 - Signature + * 0x01 - Address + * + * E.g: + * abi.encodePacked( + * uint16 threshold, + * uint8 01, uint8 weight_1, address signer_1, + * uint8 00, uint8 weight_2, bytes signature_2, + * ... + * uint8 01, uint8 weight_5, address signer_5 + * ) + */ + function _signatureValidation( + bytes32 _hash, + bytes memory _signature + ) + internal override returns (bool) + { + (bool verified, bool needsUpdate, bytes32 imageHash) = _signatureValidationWithUpdateCheck(_hash, _signature); + if (needsUpdate) { + updateImageHashInternal(imageHash); + } + return verified; + } + + function _signatureValidationInternal( + bytes32 _hash, + bytes memory _signature + ) + internal view returns (bool) + { + (bool verified, , ) = _signatureValidationWithUpdateCheck(_hash, _signature); + return verified; + } + + + + function _signatureValidationWithUpdateCheck( + bytes32 _hash, + bytes memory _signature + ) + internal view returns (bool, bool, bytes32) + { + ( + uint16 threshold, // required threshold signature + uint256 rindex // read index + ) = _signature.readFirstUint16(); + + // Start image hash generation + bytes32 imageHash = bytes32(uint256(threshold)); + + // Acumulated weight of signatures + uint256 totalWeight; + + // Iterate until the image is completed + while (rindex < _signature.length) { + // Read next item type and addrWeight + uint256 flag; uint256 addrWeight; address addr; + (flag, addrWeight, rindex) = _signature.readUint8Uint8(rindex); + + if (flag == FLAG_ADDRESS) { + // Read plain address + (addr, rindex) = _signature.readAddress(rindex); + } else if (flag == FLAG_SIGNATURE) { + // Read single signature and recover signer + bytes memory signature; + (signature, rindex) = _signature.readBytes66(rindex); + addr = recoverSigner(_hash, signature); + + // Acumulate total weight of the signature + totalWeight += addrWeight; + } else if (flag == FLAG_DYNAMIC_SIGNATURE) { + // Read signer + (addr, rindex) = _signature.readAddress(rindex); + + // Read signature size + uint256 size; + (size, rindex) = _signature.readUint16(rindex); + + // Read dynamic size signature + bytes memory signature; + (signature, rindex) = _signature.readBytes(rindex, size); + require(isValidSignature(_hash, addr, signature), "ModuleAuth#_signatureValidation: INVALID_SIGNATURE"); + + // Acumulate total weight of the signature + totalWeight += addrWeight; + } else { + revert("ModuleAuth#_signatureValidation INVALID_FLAG"); + } + + // Write weight and address to image + imageHash = keccak256(abi.encode(imageHash, addrWeight, addr)); + } + + (bool verified, bool needsUpdate) = _isValidImage(imageHash); + return ((totalWeight >= threshold && verified), needsUpdate, imageHash); + } + + + /** + * @notice Validates the signature image + * @param _imageHash Hashed image of signature + * @return true if the signature image is valid, and true if the image hash should be updated. + */ + function _isValidImage(bytes32 _imageHash) internal view virtual returns (bool, bool); + + /** + * @notice Will hash _data to be signed (similar to EIP-712) + * @param _digest Pre-final digest + * @return hashed data for this wallet + */ + function _subDigest(bytes32 _digest) internal override view returns (bytes32) { + uint256 chainId; assembly { chainId := chainid() } + return keccak256( + abi.encodePacked( + "\x19\x01", + chainId, + address(this), + _digest + ) + ); + } + + /** + * @notice Updates the signers configuration of the wallet + * @param _imageHash New required image hash of the signature + * @dev It is recommended to not have more than 200 signers as opcode repricing + * could make transactions impossible to execute as all the signers must be + * passed for each transaction. + */ + // solhint-disable-next-line no-empty-blocks + function updateImageHashInternal(bytes32 _imageHash) internal virtual { + // Default implementation does nothing + } + + + + /** + * @notice Verifies whether the provided signature is valid with respect to the provided data + * @dev MUST return the correct magic value if the signature provided is valid for the provided data + * > The bytes4 magic value to return when signature is valid is 0x20c13b0b : bytes4(keccak256("isValidSignature(bytes,bytes)")) + * @param _data Arbitrary length data signed on the behalf of address(this) + * @param _signatures Signature byte array associated with _data. + * Encoded as abi.encode(Signature[], Configs) + * @return magicValue Magic value 0x20c13b0b if the signature is valid and 0x0 otherwise + */ + function isValidSignature( + bytes calldata _data, + bytes calldata _signatures + ) external override view returns (bytes4) { + // Validate signatures + if (_signatureValidationInternal(_subDigest(keccak256(_data)), _signatures)) { + return SELECTOR_ERC1271_BYTES_BYTES; + } + return 0; + } + + /** + * @notice Verifies whether the provided signature is valid with respect to the provided hash + * @dev MUST return the correct magic value if the signature provided is valid for the provided hash + * > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256("isValidSignature(bytes32,bytes)")) + * @param _hash keccak256 hash that was signed + * @param _signatures Signature byte array associated with _data. + * Encoded as abi.encode(Signature[], Configs) + * @return magicValue Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise + */ + function isValidSignature( + bytes32 _hash, + bytes calldata _signatures + ) external override view returns (bytes4) { + // Validate signatures + if (_signatureValidationInternal(_subDigest(_hash), _signatures)) { + return SELECTOR_ERC1271_BYTES32_BYTES; + } + return 0; + } + + /** + * @notice Query if a contract implements an interface + * @param _interfaceID The interface identifier, as specified in ERC-165 + * @return `true` if the contract implements `_interfaceID` + */ + function supportsInterface(bytes4 _interfaceID) public override virtual pure returns (bool) { + if ( + _interfaceID == type(IModuleAuth).interfaceId || + _interfaceID == type(IERC1271Wallet).interfaceId + ) { + return true; + } + + return super.supportsInterface(_interfaceID); + } +} diff --git a/contracts/passport/modules/commons/ModuleAuthDynamic.sol b/contracts/passport/modules/commons/ModuleAuthDynamic.sol new file mode 100644 index 00000000..505c4ed8 --- /dev/null +++ b/contracts/passport/modules/commons/ModuleAuthDynamic.sol @@ -0,0 +1,57 @@ +// Copyright Immutable Pty Ltd 2018 - 2023 +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "./ModuleAuthUpgradable.sol"; +import "./ImageHashKey.sol"; +import "../../Wallet.sol"; + + +abstract contract ModuleAuthDynamic is ModuleAuthUpgradable { + bytes32 public immutable INIT_CODE_HASH; + address public immutable FACTORY; + + constructor(address _factory, address _startupWalletImpl) { + // Build init code hash of the deployed wallets using that module + bytes32 initCodeHash = keccak256(abi.encodePacked(Wallet.creationCode, uint256(uint160(_startupWalletImpl)))); + + INIT_CODE_HASH = initCodeHash; + FACTORY = _factory; + } + + /** + * @notice Validates the signature image with the salt used to deploy the contract + * if there is no stored image hash. This will happen prior to the first meta + * transaction. Subsequently, validate the + * signature image with a valid image hash defined in the contract storage + * @param _imageHash Hash image of signature + * @return true if the signature image is valid, and true if the image hash needs to be updated + */ + function _isValidImage(bytes32 _imageHash) internal view override returns (bool, bool) { + bytes32 storedImageHash = ModuleStorage.readBytes32(ImageHashKey.IMAGE_HASH_KEY); + if (storedImageHash == 0) { + // No image hash stored. Check that the image hash was used as the salt when + // deploying the wallet proxy contract. + bool authenticated = address( + uint160(uint256( + keccak256( + abi.encodePacked( + bytes1(0xff), + FACTORY, + _imageHash, + INIT_CODE_HASH + ) + ) + )) + ) == address(this); + // Indicate need to update = true. This will trigger a call to store the image hash + return (authenticated, true); + } + + // Image hash has been stored. + return ((_imageHash != bytes32(0) && _imageHash == storedImageHash), false); + } +} + + + diff --git a/contracts/passport/modules/commons/ModuleAuthFixed.sol b/contracts/passport/modules/commons/ModuleAuthFixed.sol new file mode 100644 index 00000000..22cf41a4 --- /dev/null +++ b/contracts/passport/modules/commons/ModuleAuthFixed.sol @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "./ModuleAuth.sol"; +import "../../Wallet.sol"; + +/** + * Implements ModuleAuth by validating the signature image against + * the salt used to deploy the contract + * + * This module allows wallets to be deployed with a default configuration + * without using any aditional contract storage + */ +abstract contract ModuleAuthFixed is ModuleAuth { + bytes32 public immutable INIT_CODE_HASH; + address public immutable FACTORY; + + constructor(address _factory) { + // Build init code hash of the deployed wallets using that module + bytes32 initCodeHash = keccak256(abi.encodePacked(Wallet.creationCode, uint256(uint160(address(this))))); + + INIT_CODE_HASH = initCodeHash; + FACTORY = _factory; + } + + /** + * @notice Validates the signature image with the salt used to deploy the contract + * @param _imageHash Hash image of signature + * @return true if the signature image is valid, and always false, indicating no updates required + */ + function _isValidImage(bytes32 _imageHash) internal view override returns (bool, bool) { + return ((address( + uint160(uint256( + keccak256( + abi.encodePacked( + bytes1(0xff), + FACTORY, + _imageHash, + INIT_CODE_HASH + ) + ) + )) + ) == address(this)), false); + } +} diff --git a/contracts/passport/modules/commons/ModuleAuthUpgradable.sol b/contracts/passport/modules/commons/ModuleAuthUpgradable.sol new file mode 100644 index 00000000..c3a80e95 --- /dev/null +++ b/contracts/passport/modules/commons/ModuleAuthUpgradable.sol @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "./interfaces/IModuleAuthUpgradable.sol"; + +import "./ModuleSelfAuth.sol"; +import "./ModuleAuth.sol"; +import "./ModuleStorage.sol"; +import "./ImageHashKey.sol"; + + +abstract contract ModuleAuthUpgradable is IModuleAuthUpgradable, ModuleAuth, ModuleSelfAuth { + event ImageHashUpdated(bytes32 newImageHash); + + /** + * @notice Updates the signers configuration of the wallet + * @param _imageHash New required image hash of the signature + * @dev It is recommended to not have more than 200 signers as opcode repricing + * could make transactions impossible to execute as all the signers must be + * passed for each transaction. + */ + function updateImageHash(bytes32 _imageHash) external override onlySelf { + updateImageHashInternal(_imageHash); + } + + /** + * @notice Returns the current image hash of the wallet + */ + function imageHash() external override view returns (bytes32) { + return ModuleStorage.readBytes32(ImageHashKey.IMAGE_HASH_KEY); + } + + /** + * @notice Validates the signature image with a valid image hash defined + * in the contract storage + * @param _imageHash Hash image of signature + * @return true if the signature image is valid, and always false indicating no updates required + */ + function _isValidImage(bytes32 _imageHash) internal virtual view override returns (bool, bool) { + return ((_imageHash != bytes32(0) && _imageHash == ModuleStorage.readBytes32(ImageHashKey.IMAGE_HASH_KEY)), false); + } + + /** + * @notice Updates the signers configuration of the wallet + * @param _imageHash New required image hash of the signature + * @dev It is recommended to not have more than 200 signers as opcode repricing + * could make transactions impossible to execute as all the signers must be + * passed for each transaction. + */ + function updateImageHashInternal(bytes32 _imageHash) internal override { + require(_imageHash != bytes32(0), "ModuleAuthUpgradable#updateImageHash INVALID_IMAGE_HASH"); + ModuleStorage.writeBytes32(ImageHashKey.IMAGE_HASH_KEY, _imageHash); + emit ImageHashUpdated(_imageHash); + } + + /** + * @notice Query if a contract implements an interface + * @param _interfaceID The interface identifier, as specified in ERC-165 + * @return `true` if the contract implements `_interfaceID` + */ + function supportsInterface(bytes4 _interfaceID) public override virtual pure returns (bool) { + if (_interfaceID == type(IModuleAuthUpgradable).interfaceId) { + return true; + } + + return super.supportsInterface(_interfaceID); + } +} diff --git a/contracts/passport/modules/commons/ModuleCalls.sol b/contracts/passport/modules/commons/ModuleCalls.sol new file mode 100644 index 00000000..3574c99e --- /dev/null +++ b/contracts/passport/modules/commons/ModuleCalls.sol @@ -0,0 +1,192 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "./ModuleSelfAuth.sol"; +import "./ModuleStorage.sol"; +import "./ModuleERC165.sol"; +import "./NonceKey.sol"; + +import "./interfaces/IModuleCalls.sol"; +import "./interfaces/IModuleAuth.sol"; + + +abstract contract ModuleCalls is IModuleCalls, IModuleAuth, ModuleERC165, ModuleSelfAuth { + uint256 private constant NONCE_BITS = 96; + bytes32 private constant NONCE_MASK = bytes32((1 << NONCE_BITS) - 1); + + /** + * @notice Returns the next nonce of the default nonce space + * @dev The default nonce space is 0x00 + * @return The next nonce + */ + function nonce() external override virtual view returns (uint256) { + return readNonce(0); + } + + /** + * @notice Returns the next nonce of the given nonce space + * @param _space Nonce space, each space keeps an independent nonce count + * @return The next nonce + */ + function readNonce(uint256 _space) public override virtual view returns (uint256) { + return uint256(ModuleStorage.readBytes32Map(NonceKey.NONCE_KEY, bytes32(_space))); + } + + /** + * @notice Changes the next nonce of the given nonce space + * @param _space Nonce space, each space keeps an independent nonce count + * @param _nonce Nonce to write on the space + */ + function _writeNonce(uint256 _space, uint256 _nonce) private { + ModuleStorage.writeBytes32Map(NonceKey.NONCE_KEY, bytes32(_space), bytes32(_nonce)); + } + + /** + * @notice Allow wallet owner to execute an action + * @dev Relayers must ensure that the gasLimit specified for each transaction + * is acceptable to them. A user could specify large enough that it could + * consume all the gas available. + * @param _txs Transactions to process + * @param _nonce Signature nonce (may contain an encoded space) + * @param _signature Encoded signature + */ + function execute( + Transaction[] memory _txs, + uint256 _nonce, + bytes memory _signature + ) public override virtual { + // Validate and update nonce + _validateNonce(_nonce); + + // Hash transaction bundle + bytes32 txHash = _subDigest(keccak256(abi.encode(_nonce, _txs))); + + // Verify that signatures are valid + require( + _signatureValidation(txHash, _signature), + "ModuleCalls#execute: INVALID_SIGNATURE" + ); + + // Execute the transactions + _execute(txHash, _txs); + } + + /** + * @notice Allow wallet to execute an action + * without signing the message + * @param _txs Transactions to execute + */ + function selfExecute( + Transaction[] memory _txs + ) public override virtual onlySelf { + // Hash transaction bundle + bytes32 txHash = _subDigest(keccak256(abi.encode('self:', _txs))); + + // Execute the transactions + _execute(txHash, _txs); + } + + /** + * @notice Executes a list of transactions + * @param _txHash Hash of the batch of transactions + * @param _txs Transactions to execute + */ + function _execute( + bytes32 _txHash, + Transaction[] memory _txs + ) private { + // Execute transaction + for (uint256 i = 0; i < _txs.length; i++) { + Transaction memory transaction = _txs[i]; + + bool success; + bytes memory result; + + require(gasleft() >= transaction.gasLimit, "ModuleCalls#_execute: NOT_ENOUGH_GAS"); + + if (transaction.delegateCall) { + (success, result) = transaction.target.delegatecall{ + gas: transaction.gasLimit == 0 ? gasleft() : transaction.gasLimit + }(transaction.data); + } else { + (success, result) = transaction.target.call{ + value: transaction.value, + gas: transaction.gasLimit == 0 ? gasleft() : transaction.gasLimit + }(transaction.data); + } + + if (success) { + emit TxExecuted(_txHash); + } else { + _revertBytes(transaction, _txHash, result); + } + } + } + + /** + * @notice Verify if a nonce is valid + * @param _rawNonce Nonce to validate (may contain an encoded space) + * @dev A valid nonce must be above the last one used + * with a maximum delta of 100 + */ + function _validateNonce(uint256 _rawNonce) private { + // Retrieve current nonce for this wallet + (uint256 space, uint256 providedNonce) = _decodeNonce(_rawNonce); + uint256 currentNonce = readNonce(space); + + // Verify if nonce is valid + require( + providedNonce == currentNonce, + "MainModule#_auth: INVALID_NONCE" + ); + + // Update signature nonce + uint256 newNonce = providedNonce + 1; + _writeNonce(space, newNonce); + emit NonceChange(space, newNonce); + } + + /** + * @notice Logs a failed transaction, reverts if the transaction is not optional + * @param _tx Transaction that is reverting + * @param _txHash Hash of the transaction + * @param _reason Encoded revert message + */ + function _revertBytes( + Transaction memory _tx, + bytes32 _txHash, + bytes memory _reason + ) internal { + if (_tx.revertOnError) { + assembly { revert(add(_reason, 0x20), mload(_reason)) } + } else { + emit TxFailed(_txHash, _reason); + } + } + + /** + * @notice Decodes a raw nonce + * @dev A raw nonce is encoded using the first 160 bits for the space + * and the last 96 bits for the nonce + * @param _rawNonce Nonce to be decoded + * @return _space The nonce space of the raw nonce + * @return _nonce The nonce of the raw nonce + */ + function _decodeNonce(uint256 _rawNonce) private pure returns (uint256 _space, uint256 _nonce) { + _nonce = uint256(bytes32(_rawNonce) & NONCE_MASK); + _space = _rawNonce >> NONCE_BITS; + } + + /** + * @notice Query if a contract implements an interface + * @param _interfaceID The interface identifier, as specified in ERC-165 + * @return `true` if the contract implements `_interfaceID` + */ + function supportsInterface(bytes4 _interfaceID) public override virtual pure returns (bool) { + if (_interfaceID == type(IModuleCalls).interfaceId) { + return true; + } + + return super.supportsInterface(_interfaceID); + } +} diff --git a/contracts/passport/modules/commons/ModuleCreator.sol b/contracts/passport/modules/commons/ModuleCreator.sol new file mode 100644 index 00000000..28b21784 --- /dev/null +++ b/contracts/passport/modules/commons/ModuleCreator.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "./interfaces/IModuleCreator.sol"; + +import "./ModuleSelfAuth.sol"; +import "./ModuleERC165.sol"; + + +contract ModuleCreator is IModuleCreator, ModuleERC165, ModuleSelfAuth { + event CreatedContract(address _contract); + + /** + * @notice Creates a contract forwarding eth value + * @param _code Creation code of the contract + * @return addr The address of the created contract + */ + function createContract(bytes memory _code) public override payable onlySelf returns (address addr) { + assembly { addr := create(callvalue(), add(_code, 32), mload(_code)) } + require(addr != address(0), 'ModuleCreator: creation failed'); + emit CreatedContract(addr); + } + + /** + * @notice Query if a contract implements an interface + * @param _interfaceID The interface identifier, as specified in ERC-165 + * @return `true` if the contract implements `_interfaceID` + */ + function supportsInterface(bytes4 _interfaceID) public override virtual pure returns (bool) { + if (_interfaceID == type(IModuleCreator).interfaceId) { + return true; + } + + return super.supportsInterface(_interfaceID); + } +} diff --git a/contracts/passport/modules/commons/ModuleERC165.sol b/contracts/passport/modules/commons/ModuleERC165.sol new file mode 100644 index 00000000..af033f1c --- /dev/null +++ b/contracts/passport/modules/commons/ModuleERC165.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +abstract contract ModuleERC165 { + /** + * @notice Query if a contract implements an interface + * @param _interfaceID The interface identifier, as specified in ERC-165 + * @dev Adding new hooks will not lead to them being reported by this function + * without upgrading the wallet. In addition, developpers must ensure that + * all inherited contracts by the mainmodule don't conflict and are accounted + * to be supported by the supportsInterface method. + * @return `true` if the contract implements `_interfaceID` + */ + function supportsInterface(bytes4 _interfaceID) virtual public pure returns (bool) { + return _interfaceID == this.supportsInterface.selector; + } +} diff --git a/contracts/passport/modules/commons/ModuleHooks.sol b/contracts/passport/modules/commons/ModuleHooks.sol new file mode 100644 index 00000000..d3cb9859 --- /dev/null +++ b/contracts/passport/modules/commons/ModuleHooks.sol @@ -0,0 +1,146 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "./interfaces/IModuleHooks.sol"; + +import "./ModuleSelfAuth.sol"; +import "./ModuleStorage.sol"; +import "./ModuleERC165.sol"; + +import "../../interfaces/receivers/IERC1155Receiver.sol"; +import "../../interfaces/receivers/IERC721Receiver.sol"; +import "../../interfaces/receivers/IERC223Receiver.sol"; + + +contract ModuleHooks is IERC1155Receiver, IERC721Receiver, IModuleHooks, ModuleERC165, ModuleSelfAuth { + // Randomly generated to avoid collisions, with: + // xxd -len 32 -plain -cols 32 /dev/urandom + bytes32 private constant HOOKS_KEY = bytes32(0x5f198cb61cfcc209f357b4ede4ad2218c53e3b4cb7e8fa1e8b0ec5e3951acbaa); + + /** + * @notice Reads the implementation hook of a signature + * @param _signature Signature function + * @return The address of the implementation hook, address(0) if none + */ + function readHook(bytes4 _signature) external override view returns (address) { + return _readHook(_signature); + } + + /** + * @notice Adds a new hook to handle a given function selector + * @param _signature Signature function linked to the hook + * @param _implementation Hook implementation contract + * @dev Can't overwrite hooks that are part of the mainmodule (those defined below) + */ + function addHook(bytes4 _signature, address _implementation) external override onlySelf { + require(_readHook(_signature) == address(0), "ModuleHooks#addHook: HOOK_ALREADY_REGISTERED"); + _writeHook(_signature, _implementation); + } + + /** + * @notice Removes a registered hook + * @param _signature Signature function linked to the hook + * @dev Can't remove hooks that are part of the mainmodule (those defined below) + * without upgrading the wallet + */ + function removeHook(bytes4 _signature) external override onlySelf { + require(_readHook(_signature) != address(0), "ModuleHooks#removeHook: HOOK_NOT_REGISTERED"); + _writeHook(_signature, address(0)); + } + + /** + * @notice Reads the implementation hook of a signature + * @param _signature Signature function + * @return The address of the implementation hook, address(0) if none + */ + function _readHook(bytes4 _signature) private view returns (address) { + return address(uint160(uint256(ModuleStorage.readBytes32Map(HOOKS_KEY, _signature)))); + } + + /** + * @notice Writes the implementation hook of a signature + * @param _signature Signature function + * @param _implementation Hook implementation contract + */ + function _writeHook(bytes4 _signature, address _implementation) private { + ModuleStorage.writeBytes32Map(HOOKS_KEY, _signature, bytes32(uint256(uint160(_implementation)))); + } + + /** + * @notice Handle the receipt of a single ERC1155 token type. + * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` + */ + function onERC1155Received( + address, + address, + uint256, + uint256, + bytes calldata + ) external override returns (bytes4) { + return ModuleHooks.onERC1155Received.selector; + } + + /** + * @notice Handle the receipt of multiple ERC1155 token types. + * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` + */ + function onERC1155BatchReceived( + address, + address, + uint256[] calldata, + uint256[] calldata, + bytes calldata + ) external override returns (bytes4) { + return ModuleHooks.onERC1155BatchReceived.selector; + } + + /** + * @notice Handle the receipt of a single ERC721 token. + * @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` + */ + function onERC721Received(address, address, uint256, bytes calldata) external override returns (bytes4) { + return ModuleHooks.onERC721Received.selector; + } + + /** + * @notice Routes fallback calls through hooks + */ + fallback() external payable { + if (msg.data.length >= 4) { + address target = _readHook(msg.sig); + if (target != address(0)) { + (bool success, bytes memory result) = target.delegatecall(msg.data); + assembly { + if iszero(success) { + revert(add(result, 0x20), mload(result)) + } + + return(add(result, 0x20), mload(result)) + } + } + } + } + + /** + * @notice Allows the wallet to receive ETH + */ + receive() external payable { } + + /** + * @notice Query if a contract implements an interface + * @param _interfaceID The interface identifier, as specified in ERC-165 + * @return `true` if the contract implements `_interfaceID` + */ + function supportsInterface(bytes4 _interfaceID) public override virtual pure returns (bool) { + if ( + _interfaceID == type(IModuleHooks).interfaceId || + _interfaceID == type(IERC1155Receiver).interfaceId || + _interfaceID == type(IERC721Receiver).interfaceId || + _interfaceID == type(IERC223Receiver).interfaceId + ) { + return true; + } + + return super.supportsInterface(_interfaceID); + } +} diff --git a/contracts/passport/modules/commons/ModuleIgnoreAuthUpgradable.sol b/contracts/passport/modules/commons/ModuleIgnoreAuthUpgradable.sol new file mode 100644 index 00000000..7198e42e --- /dev/null +++ b/contracts/passport/modules/commons/ModuleIgnoreAuthUpgradable.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "./interfaces/IModuleAuthUpgradable.sol"; + +import "./ModuleSelfAuth.sol"; +import "./ModuleAuth.sol"; +import "./ImageHashKey.sol"; +import "./ModuleStorage.sol"; + + +/** + @notice Implements ModuleAuthUpgradable but ignores the validity of the signature + should only be used during gas estimation. +*/ +abstract contract ModuleIgnoreAuthUpgradable is IModuleAuthUpgradable, ModuleAuth, ModuleSelfAuth { + event ImageHashUpdated(bytes32 newImageHash); + + /** + * @notice Updates the signers configuration of the wallet + * @param _imageHash New required image hash of the signature + * @dev It is recommended to not have more than 200 signers as opcode repricing + * could make transactions impossible to execute as all the signers must be + * passed for each transaction. + */ + function updateImageHash(bytes32 _imageHash) external override virtual onlySelf { + require(_imageHash != bytes32(0), "ModuleAuthUpgradable#updateImageHash INVALID_IMAGE_HASH"); + ModuleStorage.writeBytes32(ImageHashKey.IMAGE_HASH_KEY, _imageHash); + emit ImageHashUpdated(_imageHash); + } + + /** + * @notice Returns the current image hash of the wallet + */ + function imageHash() external override virtual view returns (bytes32) { + return ModuleStorage.readBytes32(ImageHashKey.IMAGE_HASH_KEY); + } + + /** + * @notice Removes the signature validation from the module, by returning true for any _imageHash + * @param _imageHash Hash image of signature + * @return true always, hence always valid, and false always, indicating no update required + */ + function _isValidImage(bytes32 _imageHash) internal override view returns (bool, bool) { + // Still validates the imageHash using the original mechanism for a more acurate estimation + return (true, false); + } + + /** + * @notice Query if a contract implements an interface + * @param _interfaceID The interface identifier, as specified in ERC-165 + * @return `true` if the contract implements `_interfaceID` + */ + function supportsInterface(bytes4 _interfaceID) public override virtual pure returns (bool) { + if (_interfaceID == type(IModuleAuthUpgradable).interfaceId) { + return true; + } + + return super.supportsInterface(_interfaceID); + } +} diff --git a/contracts/passport/modules/commons/ModuleIgnoreNonceCalls.sol b/contracts/passport/modules/commons/ModuleIgnoreNonceCalls.sol new file mode 100644 index 00000000..e3cbdb07 --- /dev/null +++ b/contracts/passport/modules/commons/ModuleIgnoreNonceCalls.sol @@ -0,0 +1,199 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "./ModuleSelfAuth.sol"; +import "./ModuleStorage.sol"; +import "./ModuleERC165.sol"; +import "./NonceKey.sol"; + +import "./interfaces/IModuleCalls.sol"; +import "./interfaces/IModuleAuth.sol"; + +/** + @notice Implements ModuleCalls but ignores the validity of the nonce + should only be used during gas estimation. +*/ +abstract contract ModuleIgnoreNonceCalls is IModuleCalls, IModuleAuth, ModuleERC165, ModuleSelfAuth { + uint256 private constant NONCE_BITS = 96; + bytes32 private constant NONCE_MASK = bytes32((1 << NONCE_BITS) - 1); + + /** + * @notice Returns the next nonce of the default nonce space + * @dev The default nonce space is 0x00 + * @return The next nonce + */ + function nonce() external override virtual view returns (uint256) { + return readNonce(0); + } + + /** + * @notice Returns the next nonce of the given nonce space + * @param _space Nonce space, each space keeps an independent nonce count + * @return The next nonce + */ + function readNonce(uint256 _space) public override virtual view returns (uint256) { + return uint256(ModuleStorage.readBytes32Map(NonceKey.NONCE_KEY, bytes32(_space))); + } + + /** + * @notice Changes the next nonce of the given nonce space + * @param _space Nonce space, each space keeps an independent nonce count + * @param _nonce Nonce to write on the space + */ + function _writeNonce(uint256 _space, uint256 _nonce) private { + ModuleStorage.writeBytes32Map(NonceKey.NONCE_KEY, bytes32(_space), bytes32(_nonce)); + } + + /** + * @notice Allow wallet owner to execute an action + * @dev Relayers must ensure that the gasLimit specified for each transaction + * is acceptable to them. A user could specify large enough that it could + * consume all the gas available. + * @param _txs Transactions to process + * @param _nonce Signature nonce (may contain an encoded space) + * @param _signature Encoded signature + */ + function execute( + Transaction[] memory _txs, + uint256 _nonce, + bytes memory _signature + ) public override virtual { + // Validate and update nonce + _validateNonce(_nonce); + + // Hash transaction bundle + bytes32 txHash = _subDigest(keccak256(abi.encode(_nonce, _txs))); + + // Verify that signatures are valid + require( + _signatureValidation(txHash, _signature), + "ModuleCalls#execute: INVALID_SIGNATURE" + ); + + // Execute the transactions + _execute(txHash, _txs); + } + + /** + * @notice Allow wallet to execute an action + * without signing the message + * @param _txs Transactions to execute + */ + function selfExecute( + Transaction[] memory _txs + ) public override virtual onlySelf { + // Hash transaction bundle + bytes32 txHash = _subDigest(keccak256(abi.encode('self:', _txs))); + + // Execute the transactions + _execute(txHash, _txs); + } + + /** + * @notice Executes a list of transactions + * @param _txHash Hash of the batch of transactions + * @param _txs Transactions to execute + */ + function _execute( + bytes32 _txHash, + Transaction[] memory _txs + ) private { + // Execute transaction + for (uint256 i = 0; i < _txs.length; i++) { + Transaction memory transaction = _txs[i]; + + bool success; + bytes memory result; + + require(gasleft() >= transaction.gasLimit, "ModuleCalls#_execute: NOT_ENOUGH_GAS"); + + if (transaction.delegateCall) { + (success, result) = transaction.target.delegatecall{ + gas: transaction.gasLimit == 0 ? gasleft() : transaction.gasLimit + }(transaction.data); + } else { + (success, result) = transaction.target.call{ + value: transaction.value, + gas: transaction.gasLimit == 0 ? gasleft() : transaction.gasLimit + }(transaction.data); + } + + if (success) { + emit TxExecuted(_txHash); + } else { + _revertBytes(transaction, _txHash, result); + } + } + } + + /** + * @notice Verify if a nonce is valid + * @param _rawNonce Nonce to validate (may contain an encoded space) + * @dev A valid nonce must be above the last one used + * with a maximum delta of 100 + */ + function _validateNonce(uint256 _rawNonce) private { + // Retrieve current nonce for this wallet + (uint256 space, uint256 providedNonce) = _decodeNonce(_rawNonce); + uint256 currentNonce = readNonce(space); + + // Verify if nonce is valid + // + // Skip nonce validation for gas estimation, but keep the statement to + // arrive at a closer gas expenditure when compared with the version in + // ModuleCalls.sol + require( + (providedNonce == currentNonce) || true, + "MainModule#_auth: INVALID_NONCE" + ); + + // Update signature nonce + uint256 newNonce = providedNonce + 1; + _writeNonce(space, newNonce); + emit NonceChange(space, newNonce); + } + + /** + * @notice Logs a failed transaction, reverts if the transaction is not optional + * @param _tx Transaction that is reverting + * @param _txHash Hash of the transaction + * @param _reason Encoded revert message + */ + function _revertBytes( + Transaction memory _tx, + bytes32 _txHash, + bytes memory _reason + ) internal { + if (_tx.revertOnError) { + assembly { revert(add(_reason, 0x20), mload(_reason)) } + } else { + emit TxFailed(_txHash, _reason); + } + } + + /** + * @notice Decodes a raw nonce + * @dev A raw nonce is encoded using the first 160 bits for the space + * and the last 96 bits for the nonce + * @param _rawNonce Nonce to be decoded + * @return _space The nonce space of the raw nonce + * @return _nonce The nonce of the raw nonce + */ + function _decodeNonce(uint256 _rawNonce) private pure returns (uint256 _space, uint256 _nonce) { + _nonce = uint256(bytes32(_rawNonce) & NONCE_MASK); + _space = _rawNonce >> NONCE_BITS; + } + + /** + * @notice Query if a contract implements an interface + * @param _interfaceID The interface identifier, as specified in ERC-165 + * @return `true` if the contract implements `_interfaceID` + */ + function supportsInterface(bytes4 _interfaceID) public override virtual pure returns (bool) { + if (_interfaceID == type(IModuleCalls).interfaceId) { + return true; + } + + return super.supportsInterface(_interfaceID); + } +} diff --git a/contracts/passport/modules/commons/ModuleReceivers.sol b/contracts/passport/modules/commons/ModuleReceivers.sol new file mode 100644 index 00000000..27788146 --- /dev/null +++ b/contracts/passport/modules/commons/ModuleReceivers.sol @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "./ModuleERC165.sol"; + +import "../../interfaces/receivers/IERC1155Receiver.sol"; +import "../../interfaces/receivers/IERC721Receiver.sol"; +import "../../interfaces/receivers/IERC223Receiver.sol"; + +contract ModuleReceivers is IERC1155Receiver, IERC721Receiver, ModuleERC165 { + /** + * @notice Handle the receipt of a single ERC1155 token type. + * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` + */ + function onERC1155Received( + address, + address, + uint256, + uint256, + bytes calldata + ) external override returns (bytes4) { + return ModuleReceivers.onERC1155Received.selector; + } + + /** + * @notice Handle the receipt of multiple ERC1155 token types. + * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` + */ + function onERC1155BatchReceived( + address, + address, + uint256[] calldata, + uint256[] calldata, + bytes calldata + ) external override returns (bytes4) { + return ModuleReceivers.onERC1155BatchReceived.selector; + } + + /** + * @notice Handle the receipt of a single ERC721 token. + * @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` + */ + function onERC721Received(address, address, uint256, bytes calldata) external override returns (bytes4) { + return ModuleReceivers.onERC721Received.selector; + } + + /** + * @notice Allows the wallet to receive ETH + */ + receive() external payable { } + + /** + * @notice Query if a contract implements an interface + * @param _interfaceID The interface identifier, as specified in ERC-165 + * @return `true` if the contract implements `_interfaceID` + */ + function supportsInterface(bytes4 _interfaceID) public override virtual pure returns (bool) { + if ( + _interfaceID == type(IERC1155Receiver).interfaceId || + _interfaceID == type(IERC721Receiver).interfaceId || + _interfaceID == type(IERC223Receiver).interfaceId + ) { + return true; + } + + return super.supportsInterface(_interfaceID); + } +} diff --git a/contracts/passport/modules/commons/ModuleSelfAuth.sol b/contracts/passport/modules/commons/ModuleSelfAuth.sol new file mode 100644 index 00000000..9a59d7b2 --- /dev/null +++ b/contracts/passport/modules/commons/ModuleSelfAuth.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +contract ModuleSelfAuth { + modifier onlySelf() { + require(msg.sender == address(this), "ModuleSelfAuth#onlySelf: NOT_AUTHORIZED"); + _; + } +} diff --git a/contracts/passport/modules/commons/ModuleStorage.sol b/contracts/passport/modules/commons/ModuleStorage.sol new file mode 100644 index 00000000..ad98b9b4 --- /dev/null +++ b/contracts/passport/modules/commons/ModuleStorage.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +library ModuleStorage { + function writeBytes32(bytes32 _key, bytes32 _val) internal { + assembly { sstore(_key, _val) } + } + + function readBytes32(bytes32 _key) internal view returns (bytes32 val) { + assembly { val := sload(_key) } + } + + function writeBytes32Map(bytes32 _key, bytes32 _subKey, bytes32 _val) internal { + bytes32 key = keccak256(abi.encode(_key, _subKey)); + assembly { sstore(key, _val) } + } + + function readBytes32Map(bytes32 _key, bytes32 _subKey) internal view returns (bytes32 val) { + bytes32 key = keccak256(abi.encode(_key, _subKey)); + assembly { val := sload(key) } + } +} diff --git a/contracts/passport/modules/commons/ModuleUpdate.sol b/contracts/passport/modules/commons/ModuleUpdate.sol new file mode 100644 index 00000000..044e3ef4 --- /dev/null +++ b/contracts/passport/modules/commons/ModuleUpdate.sol @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "./interfaces/IModuleUpdate.sol"; + +import "./Implementation.sol"; +import "./ModuleSelfAuth.sol"; +import "./ModuleERC165.sol"; + +import "../../utils/LibAddress.sol"; + + +contract ModuleUpdate is IModuleUpdate, ModuleERC165, ModuleSelfAuth, Implementation { + using LibAddress for address; + + event ImplementationUpdated(address newImplementation); + + /** + * @notice Updates the implementation of the base wallet + * @param _implementation New main module implementation + * @dev WARNING Updating the implementation can brick the wallet + */ + function updateImplementation(address _implementation) external override onlySelf { + require(_implementation.isContract(), "ModuleUpdate#updateImplementation: INVALID_IMPLEMENTATION"); + _setImplementation(_implementation); + emit ImplementationUpdated(_implementation); + } + + /** + * @notice Query if a contract implements an interface + * @param _interfaceID The interface identifier, as specified in ERC-165 + * @return `true` if the contract implements `_interfaceID` + */ + function supportsInterface(bytes4 _interfaceID) public override virtual pure returns (bool) { + if (_interfaceID == type(IModuleUpdate).interfaceId) { + return true; + } + + return super.supportsInterface(_interfaceID); + } +} diff --git a/contracts/passport/modules/commons/NonceKey.sol b/contracts/passport/modules/commons/NonceKey.sol new file mode 100644 index 00000000..64539afe --- /dev/null +++ b/contracts/passport/modules/commons/NonceKey.sol @@ -0,0 +1,9 @@ + +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +library NonceKey { + // Randomly generated to avoid collisions, with: + // xxd -len 32 -plain -cols 32 /dev/urandom + bytes32 internal constant NONCE_KEY = bytes32(0xc40e2218089ef03fc40794d84d38778f688da53b98c9236b084936bfafc9a601); +} diff --git a/contracts/passport/modules/commons/interfaces/IModuleAuth.sol b/contracts/passport/modules/commons/interfaces/IModuleAuth.sol new file mode 100644 index 00000000..233ac2c7 --- /dev/null +++ b/contracts/passport/modules/commons/interfaces/IModuleAuth.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +abstract contract IModuleAuth { + /** + * @notice Hashed _data to be signed + * @param _digest Pre-final digest + * @return hashed data for this wallet + */ + function _subDigest( + bytes32 _digest + ) internal virtual view returns (bytes32); + + /** + * @notice Verify if signer is default wallet owner + * @param _hash Hashed signed message + * @param _signature Encoded signature + * @return True is the signature is valid + */ + function _signatureValidation( + bytes32 _hash, + bytes memory _signature + ) internal virtual returns (bool); +} diff --git a/contracts/passport/modules/commons/interfaces/IModuleAuthUpgradable.sol b/contracts/passport/modules/commons/interfaces/IModuleAuthUpgradable.sol new file mode 100644 index 00000000..f26ce97f --- /dev/null +++ b/contracts/passport/modules/commons/interfaces/IModuleAuthUpgradable.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +interface IModuleAuthUpgradable { + /** + * @notice Updates the signers configuration of the wallet + * @param _imageHash New required image hash of the signature + */ + function updateImageHash(bytes32 _imageHash) external; + + /** + * @notice Returns the current image hash of the wallet + */ + function imageHash() external view returns (bytes32); +} diff --git a/contracts/passport/modules/commons/interfaces/IModuleCalls.sol b/contracts/passport/modules/commons/interfaces/IModuleCalls.sol new file mode 100644 index 00000000..ad0e78f4 --- /dev/null +++ b/contracts/passport/modules/commons/interfaces/IModuleCalls.sol @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +interface IModuleCalls { + // Events + event NonceChange(uint256 _space, uint256 _newNonce); + event TxFailed(bytes32 _tx, bytes _reason); + event TxExecuted(bytes32 _tx) anonymous; + + // Transaction structure + struct Transaction { + bool delegateCall; // Performs delegatecall + bool revertOnError; // Reverts transaction bundle if tx fails + uint256 gasLimit; // Maximum gas to be forwarded + address target; // Address of the contract to call + uint256 value; // Amount of ETH to pass with the call + bytes data; // calldata to pass + } + + /** + * @notice Returns the next nonce of the default nonce space + * @dev The default nonce space is 0x00 + * @return The next nonce + */ + function nonce() external view returns (uint256); + + /** + * @notice Returns the next nonce of the given nonce space + * @param _space Nonce space, each space keeps an independent nonce count + * @return The next nonce + */ + function readNonce(uint256 _space) external view returns (uint256); + + /** + * @notice Allow wallet owner to execute an action + * @param _txs Transactions to process + * @param _nonce Signature nonce (may contain an encoded space) + * @param _signature Encoded signature + */ + function execute( + Transaction[] calldata _txs, + uint256 _nonce, + bytes calldata _signature + ) external; + + /** + * @notice Allow wallet to execute an action + * without signing the message + * @param _txs Transactions to execute + */ + function selfExecute( + Transaction[] calldata _txs + ) external; +} diff --git a/contracts/passport/modules/commons/interfaces/IModuleCreator.sol b/contracts/passport/modules/commons/interfaces/IModuleCreator.sol new file mode 100644 index 00000000..63c490ec --- /dev/null +++ b/contracts/passport/modules/commons/interfaces/IModuleCreator.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +interface IModuleCreator { + /** + * @notice Creates a contract forwarding eth value + * @param _code Creation code of the contract + * @return addr The address of the created contract + */ + function createContract(bytes calldata _code) external payable returns (address addr); +} diff --git a/contracts/passport/modules/commons/interfaces/IModuleHooks.sol b/contracts/passport/modules/commons/interfaces/IModuleHooks.sol new file mode 100644 index 00000000..5ab2ae56 --- /dev/null +++ b/contracts/passport/modules/commons/interfaces/IModuleHooks.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +interface IModuleHooks { + /** + * @notice Reads the implementation hook of a signature + * @param _signature Signature function + * @return The address of the implementation hook, address(0) if none + */ + function readHook(bytes4 _signature) external view returns (address); + + /** + * @notice Adds a new hook to handle a given function selector + * @param _signature Signature function linked to the hook + * @param _implementation Hook implementation contract + */ + function addHook(bytes4 _signature, address _implementation) external; + + /** + * @notice Removes a registered hook + * @param _signature Signature function linked to the hook + */ + function removeHook(bytes4 _signature) external; +} diff --git a/contracts/passport/modules/commons/interfaces/IModuleUpdate.sol b/contracts/passport/modules/commons/interfaces/IModuleUpdate.sol new file mode 100644 index 00000000..ed06243a --- /dev/null +++ b/contracts/passport/modules/commons/interfaces/IModuleUpdate.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +interface IModuleUpdate { + /** + * @notice Updates the implementation of the base wallet + * @param _implementation New main module implementation + * @dev WARNING Updating the implementation can brick the wallet + */ + function updateImplementation(address _implementation) external; +} diff --git a/contracts/passport/modules/utils/GasEstimator.sol b/contracts/passport/modules/utils/GasEstimator.sol new file mode 100644 index 00000000..4447868e --- /dev/null +++ b/contracts/passport/modules/utils/GasEstimator.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +contract GasEstimator { + function estimate( + address _to, + bytes calldata _data + ) external returns (bool success, bytes memory result, uint256 gas) { + // solhint-disable + uint256 initialGas = gasleft(); + (success, result) = _to.call(_data); + gas = initialGas - gasleft(); + // solhint-enable + } +} diff --git a/contracts/passport/modules/utils/MultiCallUtils.sol b/contracts/passport/modules/utils/MultiCallUtils.sol new file mode 100644 index 00000000..bb7d3174 --- /dev/null +++ b/contracts/passport/modules/utils/MultiCallUtils.sol @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "../commons/interfaces/IModuleCalls.sol"; + + +contract MultiCallUtils { + function multiCall( + IModuleCalls.Transaction[] memory _txs + ) public payable returns ( + bool[] memory _successes, + bytes[] memory _results + ) { + _successes = new bool[](_txs.length); + _results = new bytes[](_txs.length); + + for (uint256 i = 0; i < _txs.length; i++) { + IModuleCalls.Transaction memory transaction = _txs[i]; + + require(!transaction.delegateCall, 'MultiCallUtils#multiCall: delegateCall not allowed'); + require(gasleft() >= transaction.gasLimit, "MultiCallUtils#multiCall: NOT_ENOUGH_GAS"); + + // solhint-disable + (_successes[i], _results[i]) = transaction.target.call{ + value: transaction.value, + gas: transaction.gasLimit == 0 ? gasleft() : transaction.gasLimit + }(transaction.data); + // solhint-enable + + require(_successes[i] || !_txs[i].revertOnError, 'MultiCallUtils#multiCall: CALL_REVERTED'); + } + } + + // /// + // Globals + // /// + + function callBlockhash(uint256 _i) external view returns (bytes32) { + return blockhash(_i); + } + + function callCoinbase() external view returns (address) { + return block.coinbase; + } + + function callDifficulty() external view returns (uint256) { + return block.difficulty; + } + + function callGasLimit() external view returns (uint256) { + return block.gaslimit; + } + + function callBlockNumber() external view returns (uint256) { + return block.number; + } + + function callTimestamp() external view returns (uint256) { + return block.timestamp; + } + + function callGasLeft() external view returns (uint256) { + return gasleft(); + } + + function callGasPrice() external view returns (uint256) { + return tx.gasprice; + } + + function callOrigin() external view returns (address) { + return tx.origin; + } + + function callBalanceOf(address _addr) external view returns (uint256) { + return _addr.balance; + } + + function callCodeSize(address _addr) external view returns (uint256 size) { + assembly { size := extcodesize(_addr) } + } + + function callCode(address _addr) external view returns (bytes memory code) { + assembly { + let size := extcodesize(_addr) + code := mload(0x40) + mstore(0x40, add(code, and(add(add(size, 0x20), 0x1f), not(0x1f)))) + mstore(code, size) + extcodecopy(_addr, add(code, 0x20), 0, size) + } + } + + function callCodeHash(address _addr) external view returns (bytes32 codeHash) { + assembly { codeHash := extcodehash(_addr) } + } + + function callChainId() external view returns (uint256 id) { + assembly { id := chainid() } + } +} diff --git a/contracts/passport/modules/utils/RequireUtils.sol b/contracts/passport/modules/utils/RequireUtils.sol new file mode 100644 index 00000000..fa285d19 --- /dev/null +++ b/contracts/passport/modules/utils/RequireUtils.sol @@ -0,0 +1,281 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "../commons/interfaces/IModuleCalls.sol"; +import "../commons/interfaces/IModuleAuthUpgradable.sol"; +import "../../interfaces/IERC1271Wallet.sol"; +import "../../utils/SignatureValidator.sol"; +import "../../utils/LibBytes.sol"; +import "../../Wallet.sol"; + +contract RequireUtils is SignatureValidator { + using LibBytes for bytes; + + uint256 private constant NONCE_BITS = 96; + bytes32 private constant NONCE_MASK = bytes32((1 << NONCE_BITS) - 1); + + uint256 private constant FLAG_SIGNATURE = 0; + uint256 private constant FLAG_ADDRESS = 1; + uint256 private constant FLAG_DYNAMIC_SIGNATURE = 2; + + bytes32 private immutable INIT_CODE_HASH; + address private immutable FACTORY; + + struct Member { + uint256 weight; + address signer; + } + + event RequiredConfig( + address indexed _wallet, + bytes32 indexed _imageHash, + uint256 _threshold, + bytes _signers + ); + + event RequiredSigner( + address indexed _wallet, + address indexed _signer + ); + + mapping(address => uint256) public lastSignerUpdate; + mapping(address => uint256) public lastWalletUpdate; + mapping(address => bytes32) public knownImageHashes; + mapping(bytes32 => uint256) public lastImageHashUpdate; + + constructor(address _factory, address _mainModule) public { + FACTORY = _factory; + INIT_CODE_HASH = keccak256(abi.encodePacked(Wallet.creationCode, uint256(uint160(_mainModule)))); + } + + /** + * @notice Publishes the current configuration of a Sequence wallets using logs + * @dev Used for fast lookup of a wallet configuration based on its image-hash, compatible with updated and counter-factual wallets. + * + * @param _wallet Sequence wallet + * @param _threshold Thershold of the current configuration + * @param _members Members of the current configuration + * @param _index True if an index in contract-storage is desired + */ + function publishConfig( + address _wallet, + uint256 _threshold, + Member[] calldata _members, + bool _index + ) external { + // Compute expected imageHash + bytes32 imageHash = bytes32(uint256(_threshold)); + for (uint256 i = 0; i < _members.length; i++) { + imageHash = keccak256(abi.encode(imageHash, _members[i].weight, _members[i].signer)); + } + + // Check against wallet imageHash + (bool succeed, bytes memory data) = _wallet.call(abi.encodePacked(IModuleAuthUpgradable(_wallet).imageHash.selector)); + if (succeed && data.length == 32) { + // Check contract defined + bytes32 currentImageHash = abi.decode(data, (bytes32)); + require(currentImageHash == imageHash, "RequireUtils#publishConfig: UNEXPECTED_IMAGE_HASH"); + } else { + // Check counter-factual + require(address( + uint160(uint256( + keccak256( + abi.encodePacked( + bytes1(0xff), + FACTORY, + imageHash, + INIT_CODE_HASH + ) + ) + )) + ) == _wallet, "RequireUtils#publishConfig: UNEXPECTED_COUNTERFACTUAL_IMAGE_HASH"); + + // Register known image-hash for counter-factual wallet + if (_index) knownImageHashes[_wallet] = imageHash; + } + + // Emit event for easy config retrieval + emit RequiredConfig(_wallet, imageHash, _threshold, abi.encode(_members)); + + if (_index) { + // Register last event for given wallet + lastWalletUpdate[_wallet] = block.number; + + // Register last event for image-hash + lastImageHashUpdate[imageHash] = block.number; + } + } + + /** + * @notice Publishes the configuration and set of signers for a counter-factual Sequence wallets using logs + * @dev Used for fast lookup of a wallet based on its signer members, only signing members are included in the logs + * as a mechanism to avoid poisoning of the directory of wallets. + * + * Only the initial counter-factual configuration can be published, to publish updated configurations see `publishConfig`. + * + * @param _wallet Sequence wallet + * @param _hash Any hash signed by the wallet + * @param _sizeMembers Number of members on the counter-factual configuration + * @param _signature Signature for the given hash + * @param _index True if an index in contract-storage is desired + */ + function publishInitialSigners( + address _wallet, + bytes32 _hash, + uint256 _sizeMembers, + bytes memory _signature, + bool _index + ) external { + // Decode and index signature + ( + uint16 threshold, // required threshold signature + uint256 rindex // read index + ) = _signature.readFirstUint16(); + + // Generate sub-digest + bytes32 subDigest; { + uint256 chainId; assembly { chainId := chainid() } + subDigest = keccak256( + abi.encodePacked( + "\x19\x01", + chainId, + _wallet, + _hash + ) + ); + } + + // Recover signature + bytes32 imageHash = bytes32(uint256(threshold)); + + Member[] memory members = new Member[](_sizeMembers); + uint256 membersIndex = 0; + + while (rindex < _signature.length) { + // Read next item type and addrWeight + uint256 flag; uint256 addrWeight; address addr; + (flag, addrWeight, rindex) = _signature.readUint8Uint8(rindex); + + if (flag == FLAG_ADDRESS) { + // Read plain address + (addr, rindex) = _signature.readAddress(rindex); + } else if (flag == FLAG_SIGNATURE) { + // Read single signature and recover signer + bytes memory signature; + (signature, rindex) = _signature.readBytes66(rindex); + addr = recoverSigner(subDigest, signature); + + // Publish signer + _publishSigner(_wallet, addr, _index); + } else if (flag == FLAG_DYNAMIC_SIGNATURE) { + // Read signer + (addr, rindex) = _signature.readAddress(rindex); + + { + // Read signature size + uint256 size; + (size, rindex) = _signature.readUint16(rindex); + + // Read dynamic size signature + bytes memory signature; + (signature, rindex) = _signature.readBytes(rindex, size); + require(isValidSignature(subDigest, addr, signature), "ModuleAuth#_signatureValidation: INVALID_SIGNATURE"); + } + + // Publish signer + _publishSigner(_wallet, addr, _index); + } else { + revert("RequireUtils#publishInitialSigners: INVALID_SIGNATURE_FLAG"); + } + + // Store member on array + members[membersIndex] = Member(addrWeight, addr); + membersIndex++; + + // Write weight and address to image + imageHash = keccak256(abi.encode(imageHash, addrWeight, addr)); + } + + require(membersIndex == _sizeMembers, "RequireUtils#publishInitialSigners: INVALID_MEMBERS_COUNT"); + + // Check against counter-factual imageHash + require(address( + uint160(uint256( + keccak256( + abi.encodePacked( + bytes1(0xff), + FACTORY, + imageHash, + INIT_CODE_HASH + ) + ) + )) + ) == _wallet, "RequireUtils#publishInitialSigners: UNEXPECTED_COUNTERFACTUAL_IMAGE_HASH"); + + // Emit event for easy config retrieval + emit RequiredConfig(_wallet, imageHash, threshold, abi.encode(members)); + + if (_index) { + // Register last event for given wallet + lastWalletUpdate[_wallet] = block.number; + + // Register last event for image-hash + lastImageHashUpdate[imageHash] = block.number; + + // Register known image-hash for counter-factual wallet + knownImageHashes[_wallet] = imageHash; + } + } + + /** + * @notice Validates that a given expiration hasn't expired + * @dev Used as an optional transaction on a Sequence batch, to create expirable transactions. + * + * @param _expiration Expiration to check + */ + function requireNonExpired(uint256 _expiration) external view { + require(block.timestamp <= _expiration, "RequireUtils#requireNonExpired: EXPIRED"); + } + + /** + * @notice Validates that a given wallet has reached a given nonce + * @dev Used as an optional transaction on a Sequence batch, to define transaction execution order + * + * @param _wallet Sequence wallet + * @param _nonce Required nonce + */ + function requireMinNonce(address _wallet, uint256 _nonce) external view { + (uint256 space, uint256 nonce) = _decodeNonce(_nonce); + uint256 currentNonce = IModuleCalls(_wallet).readNonce(space); + require(currentNonce >= nonce, "RequireUtils#requireMinNonce: NONCE_BELOW_REQUIRED"); + } + + /** + * @notice Decodes a raw nonce + * @dev A raw nonce is encoded using the first 160 bits for the space + * and the last 96 bits for the nonce + * @param _rawNonce Nonce to be decoded + * @return _space The nonce space of the raw nonce + * @return _nonce The nonce of the raw nonce + */ + function _decodeNonce(uint256 _rawNonce) private pure returns (uint256 _space, uint256 _nonce) { + _nonce = uint256(bytes32(_rawNonce) & NONCE_MASK); + _space = _rawNonce >> NONCE_BITS; + } + + /** + * @notice Publishes a signer that was validated to sign for a particular wallet + * @param _wallet Address of the wallet + * @param _signer Address of the signer + * @param _index True if an index on contract storage is desired + */ + function _publishSigner(address _wallet, address _signer, bool _index) private { + // Required signer event + emit RequiredSigner(_wallet, _signer); + + if (_index) { + // Register last event for given signer + lastSignerUpdate[_signer] = block.number; + } + } +} diff --git a/contracts/passport/modules/utils/SequenceUtils.sol b/contracts/passport/modules/utils/SequenceUtils.sol new file mode 100644 index 00000000..5e2ec872 --- /dev/null +++ b/contracts/passport/modules/utils/SequenceUtils.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "./MultiCallUtils.sol"; +import "./RequireUtils.sol"; + + +contract SequenceUtils is + MultiCallUtils, + RequireUtils +{ + constructor( + address _factory, + address _mainModule + ) RequireUtils( + _factory, + _mainModule + ) {} +} diff --git a/contracts/passport/modules/utils/libs/RequireFreshSigner.sol b/contracts/passport/modules/utils/libs/RequireFreshSigner.sol new file mode 100644 index 00000000..e0df82a6 --- /dev/null +++ b/contracts/passport/modules/utils/libs/RequireFreshSigner.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "../RequireUtils.sol"; + + +contract RequireFreshSigner { + RequireUtils public immutable REQUIRE_UTILS; + + constructor (RequireUtils _requireUtils) { + REQUIRE_UTILS = _requireUtils; + } + + function requireFreshSigner(address _signer) external { + require(REQUIRE_UTILS.lastSignerUpdate(_signer) == 0, "RequireFreshSigner#requireFreshSigner: DUPLICATED_SIGNER"); + } +} diff --git a/contracts/passport/signer/ImmutableSigner.sol b/contracts/passport/signer/ImmutableSigner.sol new file mode 100644 index 00000000..b0e43700 --- /dev/null +++ b/contracts/passport/signer/ImmutableSigner.sol @@ -0,0 +1,114 @@ +// Copyright Immutable Pty Ltd 2023 +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import {SignatureValidator} from '../utils/SignatureValidator.sol'; +import {AccessControl} from '@openzeppelin/contracts/access/AccessControl.sol'; + +/** + * @title ImmutableSigner + * + * @notice ERC-1271 Wallet implementation. Verifies signatures using a public + * key in storage matching an offchain private key. The key can be upgraded by + * the role SIGNER_ADMIN_ROLE, set during initialization. + */ +contract ImmutableSigner is SignatureValidator, AccessControl { + // @dev A signer only valid until the validUntil unix timestmap + struct ExpirableSigner { + address signer; + uint256 validUntil; + } + + address public primarySigner; + ExpirableSigner public rolloverSigner; + + bytes32 public constant SIGNER_ADMIN_ROLE = keccak256('SIGNER_ADMIN_ROLE'); + + /* + * @notice Emitted whenever the main authorized signer is updated. + */ + event PrimarySignerUpdated(address indexed _previousSigner, address indexed _newSigner); + /* + * @notice Emitted whenever a temporary signer is enabled. + */ + event RolloverSignerEnabled(address indexed _signer, uint256 _validUntil); + + + constructor(address _rootAdmin, address _signerAdmin, address _signer) { + _grantRole(DEFAULT_ADMIN_ROLE, _rootAdmin); + _grantRole(SIGNER_ADMIN_ROLE, _signerAdmin); + + primarySigner = _signer; + + // We do not need a rollover signer initially as there's no rollover + // happening, so validUntil must be in the past. Luckily that aligns with + // its default initial value. + // + // rolloverSigner.validUntil = 0; + } + + /* + * @dev Grants SIGNER_ADMIN_ROLE to an user. + * @param _signerAdmin Address that will be allowed to update the wallet signer. + */ + function grantSignerRole(address _signerAdmin) external onlyRole(DEFAULT_ADMIN_ROLE) { + _grantRole(SIGNER_ADMIN_ROLE, _signerAdmin); + } + + /* + * @dev Updates the authorized public key address. Any old keys are expired effective immediately. + * @param _newSigner The address of the new authorized signer. + */ + function updateSigner(address _newSigner) public onlyRole(SIGNER_ADMIN_ROLE) { + address previousSigner = primarySigner; + primarySigner = _newSigner; + + // Make sure any rollover is immediately finished. + rolloverSigner.validUntil = 0; + + emit PrimarySignerUpdated(previousSigner, _newSigner); + } + + /* + * @dev Updates the authorized public key address. Allows the previous public + * key to remain valid for a specified rollover period. + * + * @param _newSigner The address of the new authorized signer. + * @param _rolloverPeriod Period for which the previous key will still be valid. + */ + function updateSignerWithRolloverPeriod( + address _newSigner, + uint256 _rolloverPeriod + ) public onlyRole(SIGNER_ADMIN_ROLE) { + address previousSigner = primarySigner; + primarySigner = _newSigner; + + rolloverSigner.signer = previousSigner; + rolloverSigner.validUntil = block.timestamp + _rolloverPeriod; + + emit PrimarySignerUpdated(previousSigner, _newSigner); + emit RolloverSignerEnabled(rolloverSigner.signer, rolloverSigner.validUntil); + } + + /** + * @notice Verifies whether the provided signature is valid with respect to the provided hash + * @dev MUST return the correct magic value if the signature provided is valid for the provided hash + * > The bytes4 magic value to return when signature is valid is 0x1626ba7e + * @param _hash keccak256 hash that was signed + * @param _signature Signature byte array associated with _data + * @return magicValue Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise + */ + function isValidSignature(bytes32 _hash, bytes memory _signature) external view returns (bytes4) { + if (recoverSigner(_hash, _signature) == primarySigner) { + return ERC1271_MAGICVALUE_BYTES32; + } + + if (block.timestamp <= rolloverSigner.validUntil) { + if (recoverSigner(_hash, _signature) == rolloverSigner.signer) { + return ERC1271_MAGICVALUE_BYTES32; + } + } + + return 0; + } +} diff --git a/contracts/passport/startup/ILatestWalletImplLocator.sol b/contracts/passport/startup/ILatestWalletImplLocator.sol new file mode 100644 index 00000000..6cb4985b --- /dev/null +++ b/contracts/passport/startup/ILatestWalletImplLocator.sol @@ -0,0 +1,15 @@ +// Copyright Immutable Pty Ltd 2018 - 2023 +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +/** + * @title ILatestWalletImplLocator + * @notice Interface for using the latest wallet implementation locator contract. + */ +interface ILatestWalletImplLocator { + /** + * Return the address of the latest wallet implementation contract. + */ + function latestWalletImplementation() external returns (address); +} \ No newline at end of file diff --git a/contracts/passport/startup/LatestWalletImplLocator.sol b/contracts/passport/startup/LatestWalletImplLocator.sol new file mode 100644 index 00000000..54644cca --- /dev/null +++ b/contracts/passport/startup/LatestWalletImplLocator.sol @@ -0,0 +1,38 @@ +// Copyright Immutable Pty Ltd 2018 - 2023 +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import '@openzeppelin/contracts/access/AccessControl.sol'; +import "./ILatestWalletImplLocator.sol"; + +/** + * @title LatestWalletImplLocator + * @notice Contract to return the address of the latest wallet implementation contract. + */ +contract LatestWalletImplLocator is ILatestWalletImplLocator, AccessControl { + // Role to change the implementation contract address. + bytes32 public constant IMPLCHANGER_ROLE = keccak256('IMPLCHANGER_ROLE'); + + address public latestWalletImplementation; + + event ImplChanged(address indexed _whoBy, address indexed _newImpl); + + /** + * @param _admin Role that can grant / revoke roles: DEFAULT_ADMIN and IMPLCHANGER. + * @param _implChanger Initial address that can change the latest wallet implementation address. + */ + constructor(address _admin, address _implChanger) { + _grantRole(DEFAULT_ADMIN_ROLE, _admin); + _grantRole(IMPLCHANGER_ROLE, _implChanger); + } + + + /** + * Change the address of the latest wallet implementation contract. + * @param _newImpl Address of the main module to be used by the wallet. + */ + function changeWalletImplementation(address _newImpl) external onlyRole(IMPLCHANGER_ROLE) { + latestWalletImplementation = _newImpl; + emit ImplChanged(msg.sender, _newImpl); + } +} \ No newline at end of file diff --git a/contracts/passport/startup/StartupWalletImpl.sol b/contracts/passport/startup/StartupWalletImpl.sol new file mode 100644 index 00000000..33b8b37e --- /dev/null +++ b/contracts/passport/startup/StartupWalletImpl.sol @@ -0,0 +1,46 @@ +// Copyright Immutable Pty Ltd 2018 - 2023 +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "./ILatestWalletImplLocator.sol"; + +/** + * @title StartupWalletImpl + * @notice Initial wallet implementation contract used to setup the proxy with the latest + * implementation contract and ensure that the minimal proxy deployment data never + * needs to change. + * Note that this code executed in the context of the WalletProxy.yul. As such, + * the address of the Latest Wallet Implementation Locator contract needs to be + * inserted directly into the code of the contract. This is achieved by using an + * immutable variable. + */ +contract StartupWalletImpl { + address public immutable walletImplementationLocator; + + constructor (address _walletImplementationLocator) { + walletImplementationLocator = _walletImplementationLocator; + } + + + fallback() external payable { + // Get the address of the latest version of the wallet implementation. + ILatestWalletImplLocator locator = ILatestWalletImplLocator(walletImplementationLocator); + address latestImplAddr = locator.latestWalletImplementation(); + + // solhint-disable-next-line no-inline-assembly + assembly{ + // Store the address of the implementation to use in the storage slot defined by the + // address of this contract. + sstore(address(), latestImplAddr) + + // Now do a standard delegate call to the wallet implementation and return the + // results / errors. + calldatacopy(0, 0, calldatasize()) + let result := delegatecall(gas(), latestImplAddr, 0, calldatasize(), 0, 0) + returndatacopy(0, 0, returndatasize()) + switch result + case 0 {revert(0, returndatasize())} + default {return (0, returndatasize())} + } + } +} diff --git a/contracts/passport/utils/LibAddress.sol b/contracts/passport/utils/LibAddress.sol new file mode 100644 index 00000000..7508365f --- /dev/null +++ b/contracts/passport/utils/LibAddress.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + + +library LibAddress { + /** + * @notice Will return true if provided address is a contract + * @param account Address to verify if contract or not + * @dev This contract will return false if called within the constructor of + * a contract's deployment, as the code is not yet stored on-chain. + */ + function isContract(address account) internal view returns (bool) { + uint256 csize; + // solhint-disable-next-line no-inline-assembly + assembly { csize := extcodesize(account) } + return csize != 0; + } +} diff --git a/contracts/passport/utils/LibBytes.sol b/contracts/passport/utils/LibBytes.sol new file mode 100644 index 00000000..b8ffc64c --- /dev/null +++ b/contracts/passport/utils/LibBytes.sol @@ -0,0 +1,195 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +library LibBytes { + using LibBytes for bytes; + + /***********************************| + | Read Bytes Functions | + |__________________________________*/ + + /** + * @dev Read firsts uint16 value. + * @param data Byte array to be read. + * @return a uint16 value of data at index zero. + * @return newIndex Updated index after reading the values. + */ + function readFirstUint16( + bytes memory data + ) internal pure returns ( + uint16 a, + uint256 newIndex + ) { + assembly { + let word := mload(add(32, data)) + a := shr(240, word) + newIndex := 2 + } + require(2 <= data.length, "LibBytes#readFirstUint16: OUT_OF_BOUNDS"); + } + + /** + * @dev Reads consecutive bool (8 bits) and uint8 values. + * @param data Byte array to be read. + * @param index Index in byte array of uint8 and uint8 values. + * @return a uint8 value of data at given index. + * @return b uint8 value of data at given index + 8. + * @return newIndex Updated index after reading the values. + */ + function readUint8Uint8( + bytes memory data, + uint256 index + ) internal pure returns ( + uint8 a, + uint8 b, + uint256 newIndex + ) { + assembly { + let word := mload(add(index, add(32, data))) + a := shr(248, word) + b := and(shr(240, word), 0xff) + newIndex := add(index, 2) + } + assert(newIndex > index); + require(newIndex <= data.length, "LibBytes#readUint8Uint8: OUT_OF_BOUNDS"); + } + + /** + * @dev Reads an address value from a position in a byte array. + * @param data Byte array to be read. + * @param index Index in byte array of address value. + * @return a address value of data at given index. + * @return newIndex Updated index after reading the value. + */ + function readAddress( + bytes memory data, + uint256 index + ) internal pure returns ( + address a, + uint256 newIndex + ) { + assembly { + let word := mload(add(index, add(32, data))) + a := and(shr(96, word), 0xffffffffffffffffffffffffffffffffffffffff) + newIndex := add(index, 20) + } + assert(newIndex > index); + require(newIndex <= data.length, "LibBytes#readAddress: OUT_OF_BOUNDS"); + } + + /** + * @dev Reads 66 bytes from a position in a byte array. + * @param data Byte array to be read. + * @param index Index in byte array of 66 bytes value. + * @return a 66 bytes bytes array value of data at given index. + * @return newIndex Updated index after reading the value. + */ + function readBytes66( + bytes memory data, + uint256 index + ) internal pure returns ( + bytes memory a, + uint256 newIndex + ) { + a = new bytes(66); + assembly { + let offset := add(32, add(data, index)) + mstore(add(a, 32), mload(offset)) + mstore(add(a, 64), mload(add(offset, 32))) + mstore(add(a, 66), mload(add(offset, 34))) + newIndex := add(index, 66) + } + assert(newIndex > index); + require(newIndex <= data.length, "LibBytes#readBytes66: OUT_OF_BOUNDS"); + } + + /** + * @dev Reads a bytes32 value from a position in a byte array. + * @param b Byte array containing a bytes32 value. + * @param index Index in byte array of bytes32 value. + * @return result bytes32 value from byte array. + */ + function readBytes32( + bytes memory b, + uint256 index + ) + internal + pure + returns (bytes32 result) + { + require( + b.length >= index + 32, + "LibBytes#readBytes32: GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED" + ); + + // Arrays are prefixed by a 256 bit length parameter + uint256 pos = index + 32; + + // Read the bytes32 from array memory + assembly { + result := mload(add(b, pos)) + } + return result; + } + + /** + * @dev Reads an uint16 value from a position in a byte array. + * @param data Byte array to be read. + * @param index Index in byte array of uint16 value. + * @return a uint16 value of data at given index. + * @return newIndex Updated index after reading the value. + */ + function readUint16( + bytes memory data, + uint256 index + ) internal pure returns (uint16 a, uint256 newIndex) { + assembly { + let word := mload(add(index, add(32, data))) + a := and(shr(240, word), 0xffff) + newIndex := add(index, 2) + } + assert(newIndex > index); + require(newIndex <= data.length, "LibBytes#readUint16: OUT_OF_BOUNDS"); + } + + /** + * @dev Reads bytes from a position in a byte array. + * @param data Byte array to be read. + * @param index Index in byte array of bytes value. + * @param size Number of bytes to read. + * @return a bytes bytes array value of data at given index. + * @return newIndex Updated index after reading the value. + */ + function readBytes( + bytes memory data, + uint256 index, + uint256 size + ) internal pure returns (bytes memory a, uint256 newIndex) { + a = new bytes(size); + + assembly { + let offset := add(32, add(data, index)) + + let i := 0 let n := 32 + // Copy each word, except last one + for { } lt(n, size) { i := n n := add(n, 32) } { + mstore(add(a, n), mload(add(offset, i))) + } + + // Load word after new array + let suffix := add(a, add(32, size)) + let suffixWord := mload(suffix) + + // Copy last word, overwrites after array + mstore(add(a, n), mload(add(offset, i))) + + // Restore after array + mstore(suffix, suffixWord) + + newIndex := add(index, size) + } + + assert(newIndex >= index); + require(newIndex <= data.length, "LibBytes#readBytes: OUT_OF_BOUNDS"); + } +} diff --git a/contracts/passport/utils/SignatureValidator.sol b/contracts/passport/utils/SignatureValidator.sol new file mode 100644 index 00000000..255b820a --- /dev/null +++ b/contracts/passport/utils/SignatureValidator.sol @@ -0,0 +1,143 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.17; + +import "../interfaces/IERC1271Wallet.sol"; + +import "./LibBytes.sol"; + +/** + * @dev Contains logic for signature validation. + * Signatures from wallet contracts assume ERC-1271 support (https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1271.md) + * Notes: Methods are strongly inspired by contracts in https://github.com/0xProject/0x-monorepo/blob/development/ + */ +contract SignatureValidator { + using LibBytes for bytes; + + /***********************************| + | Variables | + |__________________________________*/ + + // bytes4(keccak256("isValidSignature(bytes,bytes)")) + bytes4 constant internal ERC1271_MAGICVALUE = 0x20c13b0b; + + // bytes4(keccak256("isValidSignature(bytes32,bytes)")) + bytes4 constant internal ERC1271_MAGICVALUE_BYTES32 = 0x1626ba7e; + + // Allowed signature types. + uint256 private constant SIG_TYPE_EIP712 = 1; + uint256 private constant SIG_TYPE_ETH_SIGN = 2; + uint256 private constant SIG_TYPE_WALLET_BYTES32 = 3; + + /***********************************| + | Signature Functions | + |__________________________________*/ + + /** + * @notice Recover the signer of hash, assuming it's an EOA account + * @dev Only for SignatureType.EIP712 and SignatureType.EthSign signatures + * @param _hash Hash that was signed + * encoded as (bytes32 r, bytes32 s, uint8 v, ... , SignatureType sigType) + */ + function recoverSigner( + bytes32 _hash, + bytes memory _signature + ) internal pure returns (address signer) { + require(_signature.length == 66, "SignatureValidator#recoverSigner: invalid signature length"); + uint256 signatureType = uint8(_signature[_signature.length - 1]); + + // Variables are not scoped in Solidity. + uint8 v = uint8(_signature[64]); + bytes32 r = _signature.readBytes32(0); + bytes32 s = _signature.readBytes32(32); + + // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature + // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines + // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most + // signatures from current libraries generate a unique signature with an s-value in the lower half order. + // + // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value + // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or + // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept + // these malleable signatures as well. + // + // Source OpenZeppelin + // https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/cryptography/ECDSA.sol + + if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { + revert("SignatureValidator#recoverSigner: invalid signature 's' value"); + } + + if (v != 27 && v != 28) { + revert("SignatureValidator#recoverSigner: invalid signature 'v' value"); + } + + // Signature using EIP712 + if (signatureType == SIG_TYPE_EIP712) { + signer = ecrecover(_hash, v, r, s); + + // Signed using web3.eth_sign() or Ethers wallet.signMessage() + } else if (signatureType == SIG_TYPE_ETH_SIGN) { + signer = ecrecover( + keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", _hash)), + v, + r, + s + ); + + } else { + // Anything other signature types are illegal (We do not return false because + // the signature may actually be valid, just not in a format + // that we currently support. In this case returning false + // may lead the caller to incorrectly believe that the + // signature was invalid.) + revert("SignatureValidator#recoverSigner: UNSUPPORTED_SIGNATURE_TYPE"); + } + + // Prevent signer from being 0x0 + require( + signer != address(0x0), + "SignatureValidator#recoverSigner: INVALID_SIGNER" + ); + + return signer; + } + + /** + * @notice Returns true if the provided signature is valid for the given signer. + * @dev Supports SignatureType.EIP712, SignatureType.EthSign, and ERC1271 signatures + * @param _hash Hash that was signed + * @param _signer Address of the signer candidate + * @param _signature Signature byte array + */ + function isValidSignature( + bytes32 _hash, + address _signer, + bytes memory _signature + ) internal view returns (bool valid) { + // Check for valid signature length + if (_signature.length == 0) { + revert("SignatureValidator#isValidSignature: signature is empty"); + } + + uint256 signatureType = uint8(_signature[_signature.length - 1]); + + if (signatureType == SIG_TYPE_EIP712 || signatureType == SIG_TYPE_ETH_SIGN) { + // Recover signer and compare with provided + valid = recoverSigner(_hash, _signature) == _signer; + + } else if (signatureType == SIG_TYPE_WALLET_BYTES32) { + // Remove signature type before calling ERC1271, restore after call + uint256 prevSize; assembly { prevSize := mload(_signature) mstore(_signature, sub(prevSize, 1)) } + valid = ERC1271_MAGICVALUE_BYTES32 == IERC1271Wallet(_signer).isValidSignature(_hash, _signature); + assembly { mstore(_signature, prevSize) } + + } else { + // Anything other signature types are illegal (We do not return false because + // the signature may actually be valid, just not in a format + // that we currently support. In this case returning false + // may lead the caller to incorrectly believe that the + // signature was invalid.) + revert("SignatureValidator#isValidSignature: UNSUPPORTED_SIGNATURE_TYPE"); + } + } +} diff --git a/contracts/seaport/README.md b/contracts/seaport/README.md new file mode 100644 index 00000000..bc3ab72d --- /dev/null +++ b/contracts/seaport/README.md @@ -0,0 +1 @@ +DO NOT MODIFY THESE CONTRACTS DIRECTLY. This folder has been automatically extracted from https://github.com/immutable/seaport via a submodule in this repository's forks directory. See the upstream repository for full context. \ No newline at end of file diff --git a/contracts/seaport/Seaport.sol b/contracts/seaport/Seaport.sol new file mode 100644 index 00000000..bea2dc2a --- /dev/null +++ b/contracts/seaport/Seaport.sol @@ -0,0 +1,121 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.17; + +import { Consideration } from "seaport-core/src/lib/Consideration.sol"; + +/** + * @title Seaport + * @custom:version 1.5 + * @author 0age (0age.eth) + * @custom:coauthor d1ll0n (d1ll0n.eth) + * @custom:coauthor transmissions11 (t11s.eth) + * @custom:coauthor James Wenzel (emo.eth) + * @custom:contributor Kartik (slokh.eth) + * @custom:contributor LeFevre (lefevre.eth) + * @custom:contributor Joseph Schiarizzi (CupOJoseph.eth) + * @custom:contributor Aspyn Palatnick (stuckinaboot.eth) + * @custom:contributor Stephan Min (stephanm.eth) + * @custom:contributor Ryan Ghods (ralxz.eth) + * @custom:contributor Daniel Viau (snotrocket.eth) + * @custom:contributor hack3r-0m (hack3r-0m.eth) + * @custom:contributor Diego Estevez (antidiego.eth) + * @custom:contributor Chomtana (chomtana.eth) + * @custom:contributor Saw-mon and Natalie (sawmonandnatalie.eth) + * @custom:contributor 0xBeans (0xBeans.eth) + * @custom:contributor 0x4non (punkdev.eth) + * @custom:contributor Laurence E. Day (norsefire.eth) + * @custom:contributor vectorized.eth (vectorized.eth) + * @custom:contributor karmacoma (karmacoma.eth) + * @custom:contributor horsefacts (horsefacts.eth) + * @custom:contributor UncarvedBlock (uncarvedblock.eth) + * @custom:contributor Zoraiz Mahmood (zorz.eth) + * @custom:contributor William Poulin (wpoulin.eth) + * @custom:contributor Rajiv Patel-O'Connor (rajivpoc.eth) + * @custom:contributor tserg (tserg.eth) + * @custom:contributor cygaar (cygaar.eth) + * @custom:contributor Meta0xNull (meta0xnull.eth) + * @custom:contributor gpersoon (gpersoon.eth) + * @custom:contributor Matt Solomon (msolomon.eth) + * @custom:contributor Weikang Song (weikangs.eth) + * @custom:contributor zer0dot (zer0dot.eth) + * @custom:contributor Mudit Gupta (mudit.eth) + * @custom:contributor leonardoalt (leoalt.eth) + * @custom:contributor cmichel (cmichel.eth) + * @custom:contributor PraneshASP (pranesh.eth) + * @custom:contributor JasperAlexander (jasperalexander.eth) + * @custom:contributor Ellahi (ellahi.eth) + * @custom:contributor zaz (1zaz1.eth) + * @custom:contributor berndartmueller (berndartmueller.eth) + * @custom:contributor dmfxyz (dmfxyz.eth) + * @custom:contributor daltoncoder (dontkillrobots.eth) + * @custom:contributor 0xf4ce (0xf4ce.eth) + * @custom:contributor phaze (phaze.eth) + * @custom:contributor hrkrshnn (hrkrshnn.eth) + * @custom:contributor axic (axic.eth) + * @custom:contributor leastwood (leastwood.eth) + * @custom:contributor 0xsanson (sanson.eth) + * @custom:contributor blockdev (blockd3v.eth) + * @custom:contributor fiveoutofnine (fiveoutofnine.eth) + * @custom:contributor shuklaayush (shuklaayush.eth) + * @custom:contributor dravee (dravee.eth) + * @custom:contributor 0xPatissier + * @custom:contributor pcaversaccio + * @custom:contributor David Eiber + * @custom:contributor csanuragjain + * @custom:contributor sach1r0 + * @custom:contributor twojoy0 + * @custom:contributor ori_dabush + * @custom:contributor Daniel Gelfand + * @custom:contributor okkothejawa + * @custom:contributor FlameHorizon + * @custom:contributor vdrg + * @custom:contributor dmitriia + * @custom:contributor bokeh-eth + * @custom:contributor asutorufos + * @custom:contributor rfart(rfa) + * @custom:contributor Riley Holterhus + * @custom:contributor big-tech-sux + * @notice Seaport is a generalized native token/ERC20/ERC721/ERC1155 + * marketplace with lightweight methods for common routes as well as + * more flexible methods for composing advanced orders or groups of + * orders. Each order contains an arbitrary number of items that may be + * spent (the "offer") along with an arbitrary number of items that must + * be received back by the indicated recipients (the "consideration"). + */ +contract Seaport is Consideration { + /** + * @notice Derive and set hashes, reference chainId, and associated domain + * separator during deployment. + * + * @param conduitController A contract that deploys conduits, or proxies + * that may optionally be used to transfer approved + * ERC20/721/1155 tokens. + */ + constructor(address conduitController) Consideration(conduitController) {} + + /** + * @dev Internal pure function to retrieve and return the name of this + * contract. + * + * @return The name of this contract. + */ + function _name() internal pure override returns (string memory) { + // Return the name of the contract. + assembly { + mstore(0x20, 0x20) + mstore(0x47, 0x07536561706f7274) + return(0x20, 0x60) + } + } + + /** + * @dev Internal pure function to retrieve the name of this contract as a + * string that will be used to derive the name hash in the constructor. + * + * @return The name of this contract as a string. + */ + function _nameString() internal pure override returns (string memory) { + // Return the name of the contract. + return "Seaport"; + } +} diff --git a/contracts/seaport/conduit/Conduit.sol b/contracts/seaport/conduit/Conduit.sol new file mode 100644 index 00000000..75fc3ea0 --- /dev/null +++ b/contracts/seaport/conduit/Conduit.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { Conduit as CoreConduit } from "seaport-core/src/conduit/Conduit.sol"; + +/** + * @title Conduit + * @author 0age + * @notice This contract serves as an originator for "proxied" transfers. Each + * conduit is deployed and controlled by a "conduit controller" that can + * add and remove "channels" or contracts that can instruct the conduit + * to transfer approved ERC20/721/1155 tokens. *IMPORTANT NOTE: each + * conduit has an owner that can arbitrarily add or remove channels, and + * a malicious or negligent owner can add a channel that allows for any + * approved ERC20/721/1155 tokens to be taken immediately — be extremely + * cautious with what conduits you give token approvals to!* + */ +contract LocalConduit is CoreConduit {} diff --git a/contracts/seaport/conduit/ConduitController.sol b/contracts/seaport/conduit/ConduitController.sol new file mode 100644 index 00000000..27e2b60e --- /dev/null +++ b/contracts/seaport/conduit/ConduitController.sol @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { ConduitController as CoreConduitController } from "seaport-core/src/conduit/ConduitController.sol"; + +/** + * @title ConduitController + * @author 0age + * @notice ConduitController enables deploying and managing new conduits, or + * contracts that allow registered callers (or open "channels") to + * transfer approved ERC20/721/1155 tokens on their behalf. + */ +contract LocalConduitController is CoreConduitController {} diff --git a/contracts/seaport/helpers/ArrayHelpers.sol b/contracts/seaport/helpers/ArrayHelpers.sol new file mode 100644 index 00000000..99bb3bfa --- /dev/null +++ b/contracts/seaport/helpers/ArrayHelpers.sol @@ -0,0 +1,705 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import "seaport-types/src/helpers/PointerLibraries.sol"; + +/** + * @author d1ll0n + * @custom:coauthor Most of the natspec is cribbed from the TypeScript + * documentation + */ +library ArrayHelpers { + // Has to be out of place to silence a linter warning + function reduceWithArg( + MemoryPointer array, + /* function (uint256 currentResult, uint256 element, uint256 arg) */ + /* returns (uint256 newResult) */ + function(uint256, uint256, MemoryPointer) internal returns (uint256) fn, + uint256 initialValue, + MemoryPointer arg + ) internal returns (uint256 result) { + unchecked { + uint256 length = array.readUint256(); + + MemoryPointer srcPosition = array.next(); + MemoryPointer srcEnd = srcPosition.offset(length * 0x20); + + result = initialValue; + while (srcPosition.lt(srcEnd)) { + result = fn(result, srcPosition.readUint256(), arg); + srcPosition = srcPosition.next(); + } + } + } + + function flatten( + MemoryPointer array1, + MemoryPointer array2 + ) internal view returns (MemoryPointer newArray) { + unchecked { + uint256 arrayLength1 = array1.readUint256(); + uint256 arrayLength2 = array2.readUint256(); + uint256 array1HeadSize = arrayLength1 * 32; + uint256 array2HeadSize = arrayLength2 * 32; + + newArray = malloc(array1HeadSize + array2HeadSize + 32); + newArray.write(arrayLength1 + arrayLength2); + + MemoryPointer dst = newArray.next(); + if (arrayLength1 > 0) { + array1.next().copy(dst, array1HeadSize); + } + if (arrayLength2 > 0) { + array2.next().copy(dst.offset(array1HeadSize), array2HeadSize); + } + } + } + + function flattenThree( + MemoryPointer array1, + MemoryPointer array2, + MemoryPointer array3 + ) internal view returns (MemoryPointer newArray) { + unchecked { + uint256 arrayLength1 = array1.readUint256(); + uint256 arrayLength2 = array2.readUint256(); + uint256 arrayLength3 = array3.readUint256(); + uint256 array1HeadSize = arrayLength1 * 32; + uint256 array2HeadSize = arrayLength2 * 32; + uint256 array3HeadSize = arrayLength3 * 32; + + newArray = malloc( + array1HeadSize + array2HeadSize + array3HeadSize + 32 + ); + newArray.write(arrayLength1 + arrayLength2 + arrayLength3); + + MemoryPointer dst = newArray.next(); + if (arrayLength1 > 0) { + array1.next().copy(dst, array1HeadSize); + } + if (arrayLength2 > 0) { + array2.next().copy(dst.offset(array1HeadSize), array2HeadSize); + } + if (arrayLength3 > 0) { + array3.next().copy( + dst.offset(array1HeadSize + array2HeadSize), + array3HeadSize + ); + } + } + } + + // =====================================================================// + // map with (element) => (newElement) callback // + // =====================================================================// + + /** + * @dev map calls a defined callback function on each element of an array + * and returns an array that contains the results + * + * @param array the array to map + * @param fn a function that accepts each element in the array and + * returns a new value to put in its place in the new array + * + * @return newArray the new array created with the results from calling + * fn with each element + */ + function map( + MemoryPointer array, + /* function (uint256 value) returns (uint256 newValue) */ + function(uint256) internal pure returns (uint256) fn + ) internal pure returns (MemoryPointer newArray) { + unchecked { + uint256 length = array.readUint256(); + + newArray = malloc((length + 1) * 32); + newArray.write(length); + + MemoryPointer srcPosition = array.next(); + MemoryPointer srcEnd = srcPosition.offset(length * 0x20); + MemoryPointer dstPosition = newArray.next(); + + while (srcPosition.lt(srcEnd)) { + dstPosition.write(fn(srcPosition.readUint256())); + srcPosition = srcPosition.next(); + dstPosition = dstPosition.next(); + } + } + } + + // =====================================================================// + // filterMap with (element) => (newElement) callback // + // =====================================================================// + + /** + * @dev filterMap calls a defined callback function on each element of an + * array and returns an array that contains only the non-zero results + * + * @param array the array to map + * @param fn a function that accepts each element in the array and + * returns a new value to put in its place in the new array + * or a zero value to indicate that the element should not + * be included in the new array + * + * @return newArray the new array created with the results from calling + * fn with each element + */ + function filterMap( + MemoryPointer array, + /* function (uint256 value) returns (uint256 newValue) */ + function(MemoryPointer) internal pure returns (MemoryPointer) fn + ) internal pure returns (MemoryPointer newArray) { + unchecked { + uint256 length = array.readUint256(); + + newArray = malloc((length + 1) * 32); + + MemoryPointer srcPosition = array.next(); + MemoryPointer srcEnd = srcPosition.offset(length * 0x20); + MemoryPointer dstPosition = newArray.next(); + + length = 0; + + while (srcPosition.lt(srcEnd)) { + MemoryPointer result = fn(srcPosition.readMemoryPointer()); + if (!result.isNull()) { + dstPosition.write(result); + dstPosition = dstPosition.next(); + length += 1; + } + srcPosition = srcPosition.next(); + } + newArray.write(length); + } + } + + // =====================================================================// + // filterMap with (element, arg) => (newElement) callback // + // =====================================================================// + + /** + * @dev filterMap calls a defined callback function on each element of an + * array and returns an array that contains only the non-zero results + * + * filterMapWithArg = (arr, callback, arg) => arr.map( + * (element) => callback(element, arg) + * ).filter(result => result != 0) + * + * @param array the array to map + * @param fn a function that accepts each element in the array and + * returns a new value to put in its place in the new array + * or a zero value to indicate that the element should not + * be included in the new array + * @param arg an arbitrary value provided in each call to fn + * + * @return newArray the new array created with the results from calling + * fn with each element + */ + function filterMapWithArg( + MemoryPointer array, + /* function (MemoryPointer element, MemoryPointer arg) */ + /* returns (uint256 newValue) */ + function(MemoryPointer, MemoryPointer) + internal + pure + returns (MemoryPointer) fn, + MemoryPointer arg + ) internal pure returns (MemoryPointer newArray) { + unchecked { + uint256 length = array.readUint256(); + + newArray = malloc((length + 1) * 32); + + MemoryPointer srcPosition = array.next(); + MemoryPointer srcEnd = srcPosition.offset(length * 0x20); + MemoryPointer dstPosition = newArray.next(); + + length = 0; + + while (srcPosition.lt(srcEnd)) { + MemoryPointer result = fn(srcPosition.readMemoryPointer(), arg); + if (!result.isNull()) { + dstPosition.write(result); + dstPosition = dstPosition.next(); + length += 1; + } + srcPosition = srcPosition.next(); + } + newArray.write(length); + } + } + + // ====================================================================// + // filter with (element, arg) => (bool) predicate // + // ====================================================================// + + /** + * @dev filter calls a defined callback function on each element of an array + * and returns an array that contains only the elements which the + * callback returned true for + * + * @param array the array to map + * @param fn a function that accepts each element in the array and + * returns a boolean that indicates whether the element + * should be included in the new array + * @param arg an arbitrary value provided in each call to fn + * + * @return newArray the new array created with the elements which the + * callback returned true for + */ + function filterWithArg( + MemoryPointer array, + /* function (uint256 value, uint256 arg) returns (bool) */ + function(MemoryPointer, MemoryPointer) internal pure returns (bool) fn, + MemoryPointer arg + ) internal pure returns (MemoryPointer newArray) { + unchecked { + uint256 length = array.readUint256(); + + newArray = malloc((length + 1) * 32); + + MemoryPointer srcPosition = array.next(); + MemoryPointer srcEnd = srcPosition.offset(length * 0x20); + MemoryPointer dstPosition = newArray.next(); + + length = 0; + + while (srcPosition.lt(srcEnd)) { + MemoryPointer element = srcPosition.readMemoryPointer(); + if (fn(element, arg)) { + dstPosition.write(element); + dstPosition = dstPosition.next(); + length += 1; + } + srcPosition = srcPosition.next(); + } + newArray.write(length); + } + } + + // ====================================================================// + // filter with (element) => (bool) predicate // + // ====================================================================// + + /** + * @dev filter calls a defined callback function on each element of an array + * and returns an array that contains only the elements which the + * callback returned true for + * + * @param array the array to map + * @param fn a function that accepts each element in the array and + * returns a boolean that indicates whether the element + * should be included in the new array + * + * @return newArray the new array created with the elements which the + * callback returned true for + */ + function filter( + MemoryPointer array, + /* function (uint256 value) returns (bool) */ + function(MemoryPointer) internal pure returns (bool) fn + ) internal pure returns (MemoryPointer newArray) { + unchecked { + uint256 length = array.readUint256(); + + newArray = malloc((length + 1) * 32); + + MemoryPointer srcPosition = array.next(); + MemoryPointer srcEnd = srcPosition.offset(length * 0x20); + MemoryPointer dstPosition = newArray.next(); + + length = 0; + + while (srcPosition.lt(srcEnd)) { + MemoryPointer element = srcPosition.readMemoryPointer(); + if (fn(element)) { + dstPosition.write(element); + dstPosition = dstPosition.next(); + length += 1; + } + srcPosition = srcPosition.next(); + } + newArray.write(length); + } + } + + /** + * @dev mapWithIndex calls a defined callback function with each element of + * an array and its index and returns an array that contains the + * results + * + * @param array the array to map + * @param fn a function that accepts each element in the array and + * its index and returns a new value to put in its place + * in the new array + * + * @return newArray the new array created with the results from calling + * fn with each element + */ + function mapWithIndex( + MemoryPointer array, + /* function (uint256 value, uint256 index) returns (uint256 newValue) */ + function(uint256, uint256) internal pure returns (uint256) fn + ) internal pure returns (MemoryPointer newArray) { + unchecked { + uint256 length = array.readUint256(); + + newArray = malloc((length + 1) * 32); + newArray.write(length); + + MemoryPointer srcPosition = array.next(); + MemoryPointer srcEnd = srcPosition.offset(length * 0x20); + MemoryPointer dstPosition = newArray.next(); + + uint256 index; + while (srcPosition.lt(srcEnd)) { + dstPosition.write(fn(srcPosition.readUint256(), index++)); + srcPosition = srcPosition.next(); + dstPosition = dstPosition.next(); + } + } + } + + /** + * @dev map calls a defined callback function on each element of an array + * and returns an array that contains the results + * + * @param array the array to map + * @param fn a function that accepts each element in the array and + * the `arg` value provided in the call to map and returns + * a new value to put in its place in the new array + * @param arg an arbitrary value provided in each call to fn + * + * @return newArray the new array created with the results from calling + * fn with each element + */ + function mapWithArg( + MemoryPointer array, + /* function (uint256 value, uint256 arg) returns (uint256 newValue) */ + function(MemoryPointer, MemoryPointer) + internal + pure + returns (MemoryPointer) fn, + MemoryPointer arg + ) internal pure returns (MemoryPointer newArray) { + unchecked { + uint256 length = array.readUint256(); + + newArray = malloc((length + 1) * 32); + newArray.write(length); + + MemoryPointer srcPosition = array.next(); + MemoryPointer srcEnd = srcPosition.offset(length * 0x20); + MemoryPointer dstPosition = newArray.next(); + + while (srcPosition.lt(srcEnd)) { + dstPosition.write(fn(srcPosition.readMemoryPointer(), arg)); + srcPosition = srcPosition.next(); + dstPosition = dstPosition.next(); + } + } + } + + function mapWithIndex( + MemoryPointer array, + /* function (uint256 value, uint256 index, uint256 arg) */ + /* returns (uint256 newValue) */ + function(uint256, uint256, uint256) internal pure returns (uint256) fn, + uint256 arg + ) internal pure returns (MemoryPointer newArray) { + unchecked { + uint256 length = array.readUint256(); + + newArray = malloc((length + 1) * 32); + newArray.write(length); + + MemoryPointer srcPosition = array.next(); + MemoryPointer srcEnd = srcPosition.offset(length * 0x20); + MemoryPointer dstPosition = newArray.next(); + + uint256 index; + while (srcPosition.lt(srcEnd)) { + dstPosition.write(fn(srcPosition.readUint256(), index++, arg)); + srcPosition = srcPosition.next(); + dstPosition = dstPosition.next(); + } + } + } + + function reduce( + MemoryPointer array, + /* function (uint256 currentResult, uint256 element) */ + /* returns (uint256 newResult) */ + function(uint256, uint256) internal pure returns (uint256) fn, + uint256 initialValue + ) internal pure returns (uint256 result) { + unchecked { + uint256 length = array.readUint256(); + + MemoryPointer srcPosition = array.next(); + MemoryPointer srcEnd = srcPosition.offset(length * 0x20); + + result = initialValue; + while (srcPosition.lt(srcEnd)) { + result = fn(result, srcPosition.readUint256()); + srcPosition = srcPosition.next(); + } + } + } + + // This was the previous home of `reduceWithArg`. It can now be found near + // the top of this file. + + function forEach( + MemoryPointer array, + /* function (MemoryPointer element, MemoryPointer arg) */ + function(MemoryPointer, MemoryPointer) internal pure fn, + MemoryPointer arg + ) internal pure { + unchecked { + uint256 length = array.readUint256(); + + MemoryPointer srcPosition = array.next(); + MemoryPointer srcEnd = srcPosition.offset(length * 0x20); + + while (srcPosition.lt(srcEnd)) { + fn(srcPosition.readMemoryPointer(), arg); + srcPosition = srcPosition.next(); + } + } + } + + function forEach( + MemoryPointer array, + /* function (MemoryPointer element) */ + function(MemoryPointer) internal pure fn + ) internal pure { + unchecked { + uint256 length = array.readUint256(); + + MemoryPointer srcPosition = array.next(); + MemoryPointer srcEnd = srcPosition.offset(length * 0x20); + + while (srcPosition.lt(srcEnd)) { + fn(srcPosition.readMemoryPointer()); + srcPosition = srcPosition.next(); + } + } + } + + // =====================================================================// + // find with function(uint256 element, uint256 arg) predicate // + // =====================================================================// + + /** + * @dev calls `predicate` once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an + * element is found, find immediately returns that element value. + * Otherwise, find returns 0. + * + * @param array array to search + * @param predicate function that checks whether each element meets the + * search filter. + * @param arg second input to `predicate` + * + * @return the value of the first element in the array where + * predicate is true and 0 otherwise. + */ + function find( + MemoryPointer array, + function(uint256, uint256) internal pure returns (bool) predicate, + uint256 arg + ) internal pure returns (uint256) { + unchecked { + uint256 length = array.readUint256(); + MemoryPointer srcPosition = array.next(); + MemoryPointer srcEnd = srcPosition.offset(length * 0x20); + while (srcPosition.lt(srcEnd)) { + uint256 value = srcPosition.readUint256(); + if (predicate(value, arg)) return value; + srcPosition = srcPosition.next(); + } + return 0; + } + } + + // =====================================================================// + // find with function(uint256 element) predicate // + // =====================================================================// + + /** + * @dev calls `predicate` once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an + * element is found, find immediately returns that element value. + * Otherwise, find returns 0. + * + * @param array array to search + * @param predicate function that checks whether each element meets the + * search filter. + * @param fromIndex index to start search at + * + * @custom:return the value of the first element in the array where + * predicate is trueand 0 otherwise. + */ + function find( + MemoryPointer array, + function(uint256) internal pure returns (bool) predicate, + uint256 fromIndex + ) internal pure returns (uint256) { + unchecked { + uint256 length = array.readUint256(); + MemoryPointer srcPosition = array.next().offset(fromIndex * 0x20); + MemoryPointer srcEnd = srcPosition.offset(length * 0x20); + while (srcPosition.lt(srcEnd)) { + uint256 value = srcPosition.readUint256(); + if (predicate(value)) return value; + srcPosition = srcPosition.next(); + } + return 0; + } + } + + // =====================================================================// + // find with function(uint256 element) predicate // + // =====================================================================// + + /** + * @dev calls `predicate` once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an + * element is found, find immediately returns that element value. + * Otherwise, find returns 0. + * + * @param array array to search + * @param predicate function that checks whether each element meets the + * search filter. + * + * @return the value of the first element in the array where + * predicate is true and 0 otherwise. + */ + function find( + MemoryPointer array, + function(uint256) internal pure returns (bool) predicate + ) internal pure returns (uint256) { + unchecked { + uint256 length = array.readUint256(); + MemoryPointer srcPosition = array.next(); + MemoryPointer srcEnd = srcPosition.offset(length * 0x20); + while (srcPosition.lt(srcEnd)) { + uint256 value = srcPosition.readUint256(); + if (predicate(value)) return value; + srcPosition = srcPosition.next(); + } + return 0; + } + } + + // =====================================================================// + // indexOf // + // =====================================================================// + + /** + * @dev Returns the index of the first occurrence of a value in an array, + * or -1 if it is not present. + * + * @param array array to search + * @param searchElement the value to locate in the array. + */ + function indexOf( + MemoryPointer array, + uint256 searchElement + ) internal pure returns (int256 index) { + unchecked { + int256 length = array.readInt256(); + MemoryPointer src = array; + int256 reachedEnd; + while ( + ((reachedEnd = toInt(index == length)) | + toInt((src = src.next()).readUint256() == searchElement)) == + 0 + ) { + index += 1; + } + return (reachedEnd * -1) | index; + } + } + + function toInt(bool a) internal pure returns (int256 b) { + assembly { + b := a + } + } + + // =====================================================================// + // findIndex with one argument // + // =====================================================================// + + function findIndexWithArg( + MemoryPointer array, + function(uint256, uint256) internal pure returns (bool) predicate, + uint256 arg + ) internal pure returns (int256 index) { + unchecked { + int256 length = array.readInt256(); + MemoryPointer src = array; + while (index < length) { + if (predicate((src = src.next()).readUint256(), arg)) { + return index; + } + index += 1; + } + return -1; + } + } + + // =====================================================================// + // findIndex from start index // + // =====================================================================// + + function findIndexFrom( + MemoryPointer array, + function(MemoryPointer) internal pure returns (bool) predicate, + uint256 fromIndex + ) internal pure returns (int256 index) { + unchecked { + index = int256(fromIndex); + int256 length = array.readInt256(); + MemoryPointer src = array.offset(fromIndex * 0x20); + while (index < length) { + if (predicate((src = src.next()).readMemoryPointer())) { + return index; + } + index += 1; + } + return -1; + } + } + + function countFrom( + MemoryPointer array, + function(MemoryPointer) internal pure returns (bool) predicate, + uint256 fromIndex + ) internal pure returns (int256 count) { + unchecked { + uint256 index = fromIndex; + uint256 length = array.readUint256(); + MemoryPointer src = array.offset(fromIndex * 0x20); + while (index < length) { + if (predicate((src = src.next()).readMemoryPointer())) { + count += 1; + } + index += 1; + } + } + } + + // =====================================================================// + // includes with one argument // + // =====================================================================// + + function includes( + MemoryPointer array, + uint256 value + ) internal pure returns (bool) { + return indexOf(array, value) != -1; + } +} diff --git a/contracts/seaport/helpers/SeaportRouter.sol b/contracts/seaport/helpers/SeaportRouter.sol new file mode 100644 index 00000000..9b192069 --- /dev/null +++ b/contracts/seaport/helpers/SeaportRouter.sol @@ -0,0 +1,256 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { + SeaportRouterInterface +} from "seaport-types/src/interfaces/SeaportRouterInterface.sol"; + +import { + SeaportInterface +} from "seaport-types/src/interfaces/SeaportInterface.sol"; + +import { ReentrancyGuard } from "seaport-core/src/lib/ReentrancyGuard.sol"; + +import { + AdvancedOrder, + CriteriaResolver, + Execution, + FulfillmentComponent +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +/** + * @title SeaportRouter + * @author Ryan Ghods (ralxz.eth), 0age (0age.eth), James Wenzel (emo.eth) + * @notice A utility contract for fulfilling orders with multiple + * Seaport versions. DISCLAIMER: This contract only works when + * all consideration items across all listings are native tokens. + */ +contract SeaportRouter is SeaportRouterInterface, ReentrancyGuard { + /// @dev The allowed v1.4 contract usable through this router. + address private immutable _SEAPORT_V1_4; + /// @dev The allowed v1.5 contract usable through this router. + address private immutable _SEAPORT_V1_5; + + /** + * @dev Deploy contract with the supported Seaport contracts. + * + * @param seaportV1point4 The address of the Seaport v1.4 contract. + * @param seaportV1point5 The address of the Seaport v1.5 contract. + */ + constructor(address seaportV1point4, address seaportV1point5) { + _SEAPORT_V1_4 = seaportV1point4; + _SEAPORT_V1_5 = seaportV1point5; + } + + /** + * @dev Fallback function to receive excess ether, in case total amount of + * ether sent is more than the amount required to fulfill the order. + */ + receive() external payable override { + // Ensure we only receive ether from Seaport. + _assertSeaportAllowed(msg.sender); + } + + /** + * @notice Fulfill available advanced orders through multiple Seaport + * versions. + * See {SeaportInterface-fulfillAvailableAdvancedOrders} + * + * @param params The parameters for fulfilling available advanced orders. + */ + function fulfillAvailableAdvancedOrders( + FulfillAvailableAdvancedOrdersParams calldata params + ) + external + payable + override + returns ( + bool[][] memory availableOrders, + Execution[][] memory executions + ) + { + // Ensure this function cannot be triggered during a reentrant call. + _setReentrancyGuard(true); + + // Put the number of Seaport contracts on the stack. + uint256 seaportContractsLength = params.seaportContracts.length; + + // Set the availableOrders and executions arrays to the correct length. + availableOrders = new bool[][](seaportContractsLength); + executions = new Execution[][](seaportContractsLength); + + // Track the number of order fulfillments left. + uint256 fulfillmentsLeft = params.maximumFulfilled; + + // To help avoid stack too deep errors, we format the calldata + // params in a struct and put it on the stack. + AdvancedOrder[] memory emptyAdvancedOrders; + CriteriaResolver[] memory emptyCriteriaResolvers; + FulfillmentComponent[][] memory emptyFulfillmentComponents; + CalldataParams memory calldataParams = CalldataParams({ + advancedOrders: emptyAdvancedOrders, + criteriaResolvers: emptyCriteriaResolvers, + offerFulfillments: emptyFulfillmentComponents, + considerationFulfillments: emptyFulfillmentComponents, + fulfillerConduitKey: params.fulfillerConduitKey, + recipient: params.recipient, + maximumFulfilled: fulfillmentsLeft + }); + + // If recipient is not provided assign to msg.sender. + if (calldataParams.recipient == address(0)) { + calldataParams.recipient = msg.sender; + } + + // Iterate through the provided Seaport contracts. + for (uint256 i = 0; i < params.seaportContracts.length; ) { + // Ensure the provided Seaport contract is allowed. + _assertSeaportAllowed(params.seaportContracts[i]); + + // Put the order params on the stack. + AdvancedOrderParams calldata orderParams = params + .advancedOrderParams[i]; + + // Assign the variables to the calldata params. + calldataParams.advancedOrders = orderParams.advancedOrders; + calldataParams.criteriaResolvers = orderParams.criteriaResolvers; + calldataParams.offerFulfillments = orderParams.offerFulfillments; + calldataParams.considerationFulfillments = orderParams + .considerationFulfillments; + + // Execute the orders, collecting availableOrders and executions. + // This is wrapped in a try/catch in case a single order is + // executed that is no longer available, leading to a revert + // with `NoSpecifiedOrdersAvailable()` that can be ignored. + try + SeaportInterface(params.seaportContracts[i]) + .fulfillAvailableAdvancedOrders{ + value: orderParams.etherValue + }( + calldataParams.advancedOrders, + calldataParams.criteriaResolvers, + calldataParams.offerFulfillments, + calldataParams.considerationFulfillments, + calldataParams.fulfillerConduitKey, + calldataParams.recipient, + calldataParams.maximumFulfilled + ) + returns ( + bool[] memory newAvailableOrders, + Execution[] memory newExecutions + ) { + availableOrders[i] = newAvailableOrders; + executions[i] = newExecutions; + + // Subtract the number of orders fulfilled. + uint256 newAvailableOrdersLength = newAvailableOrders.length; + for (uint256 j = 0; j < newAvailableOrdersLength; ) { + if (newAvailableOrders[j]) { + unchecked { + --fulfillmentsLeft; + ++j; + } + } + } + + // Break if the maximum number of executions has been reached. + if (fulfillmentsLeft == 0) { + break; + } + } catch (bytes memory data) { + // Set initial value of first four bytes of revert data + // to the mask. + bytes4 customErrorSelector = bytes4(0xffffffff); + + // Utilize assembly to read first four bytes + // (if present) directly. + assembly { + // Combine original mask with first four bytes of + // revert data. + customErrorSelector := and( + // Data begins after length offset. + mload(add(data, 0x20)), + customErrorSelector + ) + } + + // Pass through the custom error if the error is + // not NoSpecifiedOrdersAvailable() + if ( + customErrorSelector != NoSpecifiedOrdersAvailable.selector + ) { + assembly { + revert(add(data, 32), mload(data)) + } + } + } + + // Update fulfillments left. + calldataParams.maximumFulfilled = fulfillmentsLeft; + + unchecked { + ++i; + } + } + + // Throw an error if no orders were fulfilled. + if (fulfillmentsLeft == params.maximumFulfilled) { + revert NoSpecifiedOrdersAvailable(); + } + + // Return excess ether that may not have been used or was sent back. + if (address(this).balance > 0) { + _returnExcessEther(); + } + + // Clear the reentrancy guard. + _clearReentrancyGuard(); + } + + /** + * @notice Returns the Seaport contracts allowed to be used through this + * router. + */ + function getAllowedSeaportContracts() + external + view + override + returns (address[] memory seaportContracts) + { + seaportContracts = new address[](2); + seaportContracts[0] = _SEAPORT_V1_4; + seaportContracts[1] = _SEAPORT_V1_5; + } + + /** + * @dev Reverts if the provided Seaport contract is not allowed. + */ + function _assertSeaportAllowed(address seaport) internal view { + if ( + _cast(seaport == _SEAPORT_V1_4) | _cast(seaport == _SEAPORT_V1_5) == + 0 + ) { + revert SeaportNotAllowed(seaport); + } + } + + /** + * @dev Function to return excess ether, in case total amount of + * ether sent is more than the amount required to fulfill the order. + */ + function _returnExcessEther() private { + // Send received funds back to msg.sender. + (bool success, bytes memory data) = payable(msg.sender).call{ + value: address(this).balance + }(""); + + // Revert with an error if the ether transfer failed. + if (!success) { + revert EtherReturnTransferFailed( + msg.sender, + address(this).balance, + data + ); + } + } +} diff --git a/contracts/seaport/helpers/TransferHelper.sol b/contracts/seaport/helpers/TransferHelper.sol new file mode 100644 index 00000000..dba38197 --- /dev/null +++ b/contracts/seaport/helpers/TransferHelper.sol @@ -0,0 +1,348 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { IERC721Receiver } from "seaport-types/src/interfaces/IERC721Receiver.sol"; + +import { + TransferHelperItem, + TransferHelperItemsWithRecipient +} from "seaport-types/src/helpers/TransferHelperStructs.sol"; + +import { ConduitItemType } from "seaport-types/src/conduit/lib/ConduitEnums.sol"; + +import { + ConduitInterface +} from "seaport-types/src/interfaces/ConduitInterface.sol"; + +import { + ConduitControllerInterface +} from "seaport-types/src/interfaces/ConduitControllerInterface.sol"; + +import { ConduitTransfer } from "seaport-types/src/conduit/lib/ConduitStructs.sol"; + +import { + TransferHelperInterface +} from "seaport-types/src/interfaces/TransferHelperInterface.sol"; + +import { + TransferHelperErrors +} from "seaport-types/src/interfaces/TransferHelperErrors.sol"; + +/** + * @title TransferHelper + * @author stephankmin, stuckinaboot, ryanio + * @notice TransferHelper is a utility contract for transferring + * ERC20/ERC721/ERC1155 items in bulk to specific recipients. + */ +contract TransferHelper is TransferHelperInterface, TransferHelperErrors { + // Allow for interaction with the conduit controller. + ConduitControllerInterface internal immutable _CONDUIT_CONTROLLER; + + // Set conduit creation code and runtime code hashes as immutable arguments. + bytes32 internal immutable _CONDUIT_CREATION_CODE_HASH; + bytes32 internal immutable _CONDUIT_RUNTIME_CODE_HASH; + + /** + * @dev Set the supplied conduit controller and retrieve its + * conduit creation code hash. + * + * + * @param conduitController A contract that deploys conduits, or proxies + * that may optionally be used to transfer approved + * ERC20/721/1155 tokens. + */ + constructor(address conduitController) { + // Get the conduit creation code and runtime code hashes from the + // supplied conduit controller and set them as an immutable. + ConduitControllerInterface controller = ConduitControllerInterface( + conduitController + ); + (_CONDUIT_CREATION_CODE_HASH, _CONDUIT_RUNTIME_CODE_HASH) = controller + .getConduitCodeHashes(); + + // Set the supplied conduit controller as an immutable. + _CONDUIT_CONTROLLER = controller; + } + + /** + * @notice Transfer multiple ERC20/ERC721/ERC1155 items to + * specified recipients. + * + * @param items The items to transfer to an intended recipient. + * @param conduitKey A mandatory conduit key referring to a conduit through + * which the bulk transfer should occur. + * + * @return magicValue A value indicating that the transfers were successful. + */ + function bulkTransfer( + TransferHelperItemsWithRecipient[] calldata items, + bytes32 conduitKey + ) external override returns (bytes4 magicValue) { + // Ensure that a conduit key has been supplied. + if (conduitKey == bytes32(0)) { + revert InvalidConduit(conduitKey, address(0)); + } + + // Use conduit derived from supplied conduit key to perform transfers. + _performTransfersWithConduit(items, conduitKey); + + // Return a magic value indicating that the transfers were performed. + magicValue = this.bulkTransfer.selector; + } + + /** + * @notice Perform multiple transfers to specified recipients via the + * conduit derived from the provided conduit key. + * + * @param transfers The items to transfer. + * @param conduitKey The conduit key referring to the conduit through + * which the bulk transfer should occur. + */ + function _performTransfersWithConduit( + TransferHelperItemsWithRecipient[] calldata transfers, + bytes32 conduitKey + ) internal { + // Retrieve total number of transfers and place on stack. + uint256 numTransfers = transfers.length; + + // Derive the conduit address from the deployer, conduit key + // and creation code hash. + address conduit = address( + uint160( + uint256( + keccak256( + abi.encodePacked( + bytes1(0xff), + address(_CONDUIT_CONTROLLER), + conduitKey, + _CONDUIT_CREATION_CODE_HASH + ) + ) + ) + ) + ); + + // Declare a variable to store the sum of all items across transfers. + uint256 sumOfItemsAcrossAllTransfers; + + // Skip overflow checks: all for loops are indexed starting at zero. + unchecked { + // Iterate over each transfer. + for (uint256 i = 0; i < numTransfers; ++i) { + // Retrieve the transfer in question. + TransferHelperItemsWithRecipient calldata transfer = transfers[ + i + ]; + + // Increment totalItems by the number of items in the transfer. + sumOfItemsAcrossAllTransfers += transfer.items.length; + } + } + + // Declare a new array in memory with length totalItems to populate with + // each conduit transfer. + ConduitTransfer[] memory conduitTransfers = new ConduitTransfer[]( + sumOfItemsAcrossAllTransfers + ); + + // Declare an index for storing ConduitTransfers in conduitTransfers. + uint256 itemIndex; + + // Skip overflow checks: all for loops are indexed starting at zero. + unchecked { + // Iterate over each transfer. + for (uint256 i = 0; i < numTransfers; ++i) { + // Retrieve the transfer in question. + TransferHelperItemsWithRecipient calldata transfer = transfers[ + i + ]; + + // Retrieve the items of the transfer in question. + TransferHelperItem[] calldata transferItems = transfer.items; + + // Ensure recipient is not the zero address. + _checkRecipientIsNotZeroAddress(transfer.recipient); + + // Create a boolean indicating whether validateERC721Receiver + // is true and recipient is a contract. + bool callERC721Receiver = transfer.validateERC721Receiver && + transfer.recipient.code.length != 0; + + // Retrieve the total number of items in the transfer and + // place on stack. + uint256 numItemsInTransfer = transferItems.length; + + // Iterate over each item in the transfer to create a + // corresponding ConduitTransfer. + for (uint256 j = 0; j < numItemsInTransfer; ++j) { + // Retrieve the item from the transfer. + TransferHelperItem calldata item = transferItems[j]; + + if (item.itemType == ConduitItemType.ERC20) { + // Ensure that the identifier of an ERC20 token is 0. + if (item.identifier != 0) { + revert InvalidERC20Identifier(); + } + } + + // If the item is an ERC721 token and + // callERC721Receiver is true... + if (item.itemType == ConduitItemType.ERC721) { + if (callERC721Receiver) { + // Check if the recipient implements + // onERC721Received for the given tokenId. + _checkERC721Receiver( + conduit, + transfer.recipient, + item.identifier + ); + } + } + + // Create a ConduitTransfer corresponding to each + // TransferHelperItem. + conduitTransfers[itemIndex] = ConduitTransfer( + item.itemType, + item.token, + msg.sender, + transfer.recipient, + item.identifier, + item.amount + ); + + // Increment the index for storing ConduitTransfers. + ++itemIndex; + } + } + } + + // Attempt the external call to transfer tokens via the derived conduit. + try ConduitInterface(conduit).execute(conduitTransfers) returns ( + bytes4 conduitMagicValue + ) { + // Check if the value returned from the external call matches + // the conduit `execute` selector. + if (conduitMagicValue != ConduitInterface.execute.selector) { + // If the external call fails, revert with the conduit key + // and conduit address. + revert InvalidConduit(conduitKey, conduit); + } + } catch Error(string memory reason) { + // Catch reverts with a provided reason string and + // revert with the reason, conduit key and conduit address. + revert ConduitErrorRevertString(reason, conduitKey, conduit); + } catch (bytes memory data) { + // Conduits will throw a custom error when attempting to transfer + // native token item types or an ERC721 item amount other than 1. + // Bubble up these custom errors when encountered. Note that the + // conduit itself will bubble up revert reasons from transfers as + // well, meaning that these errors are not necessarily indicative of + // an issue with the item type or amount in cases where the same + // custom error signature is encountered during a conduit transfer. + + // Set initial value of first four bytes of revert data to the mask. + bytes4 customErrorSelector = bytes4(0xffffffff); + + // Utilize assembly to read first four bytes (if present) directly. + assembly { + // Combine original mask with first four bytes of revert data. + customErrorSelector := and( + mload(add(data, 0x20)), // Data begins after length offset. + customErrorSelector + ) + } + + // Pass through the custom error in question if the revert data is + // the correct length and matches an expected custom error selector. + if ( + data.length == 4 && + customErrorSelector == InvalidItemType.selector + ) { + // "Bubble up" the revert reason. + assembly { + revert(add(data, 0x20), 0x04) + } + } else if ( + data.length == 36 && + customErrorSelector == InvalidERC721TransferAmount.selector + ) { + // "Bubble up" the revert reason. + assembly { + revert(add(data, 0x20), 0x24) + } + } + + // Catch all other reverts from the external call to the conduit and + // include the conduit's raw revert reason as a data argument to a + // new custom error. + revert ConduitErrorRevertBytes(data, conduitKey, conduit); + } + } + + /** + * @notice An internal function to check if a recipient address implements + * onERC721Received for a given tokenId. Note that this check does + * not adhere to the safe transfer specification and is only meant + * to provide an additional layer of assurance that the recipient + * can receive the tokens — any hooks or post-transfer checks will + * fail and the caller will be the transfer helper rather than the + * ERC721 contract. Note that the conduit is set as the operator, as + * it will be the caller once the transfer is performed. + * + * @param conduit The conduit to provide as the operator when calling + * onERC721Received. + * @param recipient The ERC721 recipient on which to call onERC721Received. + * @param tokenId The ERC721 tokenId of the token being transferred. + */ + function _checkERC721Receiver( + address conduit, + address recipient, + uint256 tokenId + ) internal { + // Check if recipient can receive ERC721 tokens. + try + IERC721Receiver(recipient).onERC721Received( + conduit, + msg.sender, + tokenId, + "" + ) + returns (bytes4 selector) { + // Check if onERC721Received selector is valid. + if (selector != IERC721Receiver.onERC721Received.selector) { + // Revert if recipient cannot accept + // ERC721 tokens. + revert InvalidERC721Recipient(recipient); + } + } catch (bytes memory data) { + // "Bubble up" recipient's revert reason. + revert ERC721ReceiverErrorRevertBytes( + data, + recipient, + msg.sender, + tokenId + ); + } catch Error(string memory reason) { + // "Bubble up" recipient's revert reason. + revert ERC721ReceiverErrorRevertString( + reason, + recipient, + msg.sender, + tokenId + ); + } + } + + /** + * @notice An internal function that reverts if the passed-in recipient + * is the zero address. + * + * @param recipient The recipient on which to perform the check. + */ + function _checkRecipientIsNotZeroAddress(address recipient) internal pure { + // Revert if the recipient is the zero address. + if (recipient == address(0x0)) { + revert RecipientCannotBeZeroAddress(); + } + } +} diff --git a/contracts/seaport/helpers/navigator/SeaportNavigator.sol b/contracts/seaport/helpers/navigator/SeaportNavigator.sol new file mode 100644 index 00000000..9997b33a --- /dev/null +++ b/contracts/seaport/helpers/navigator/SeaportNavigator.sol @@ -0,0 +1,131 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { + ConsiderationInterface +} from "seaport-types/src/interfaces/ConsiderationInterface.sol"; +import { + AdvancedOrder, + CriteriaResolver +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { + SeaportValidatorInterface +} from "../order-validator/SeaportValidator.sol"; + +import { NavigatorContextLib } from "./lib/NavigatorContextLib.sol"; + +import { CriteriaHelperLib } from "./lib/CriteriaHelperLib.sol"; + +import { + NavigatorContext, + NavigatorRequest, + NavigatorResponse +} from "./lib/SeaportNavigatorTypes.sol"; + +import { SeaportNavigatorInterface } from "./lib/SeaportNavigatorInterface.sol"; + +import { HelperInterface } from "./lib/HelperInterface.sol"; + +/** + * @notice SeaportNavigator is a helper contract that generates additional + * information useful for fulfilling Seaport orders. Given an array of + * orders and external parameters like caller, recipient, and native + * tokens supplied, SeaportNavigator will validate the orders and + * return associated errors and warnings, recommend a fulfillment + * method, suggest fulfillments, provide execution and order details, + * and optionally generate criteria resolvers from provided token IDs. + */ +contract SeaportNavigator is SeaportNavigatorInterface { + using NavigatorContextLib for NavigatorContext; + using CriteriaHelperLib for uint256[]; + + HelperInterface public immutable requestValidator; + HelperInterface public immutable criteriaHelper; + HelperInterface public immutable validatorHelper; + HelperInterface public immutable orderDetailsHelper; + HelperInterface public immutable fulfillmentsHelper; + HelperInterface public immutable suggestedActionHelper; + HelperInterface public immutable executionsHelper; + + HelperInterface[] public helpers; + + constructor( + address _requestValidator, + address _criteriaHelper, + address _validatorHelper, + address _orderDetailsHelper, + address _fulfillmentsHelper, + address _suggestedActionHelper, + address _executionsHelper + ) { + requestValidator = HelperInterface(_requestValidator); + helpers.push(requestValidator); + + criteriaHelper = HelperInterface(_criteriaHelper); + helpers.push(criteriaHelper); + + validatorHelper = HelperInterface(_validatorHelper); + helpers.push(validatorHelper); + + orderDetailsHelper = HelperInterface(_orderDetailsHelper); + helpers.push(orderDetailsHelper); + + fulfillmentsHelper = HelperInterface(_fulfillmentsHelper); + helpers.push(fulfillmentsHelper); + + suggestedActionHelper = HelperInterface(_suggestedActionHelper); + helpers.push(suggestedActionHelper); + + executionsHelper = HelperInterface(_executionsHelper); + helpers.push(executionsHelper); + } + + function prepare( + NavigatorRequest calldata request + ) public view returns (NavigatorResponse memory) { + NavigatorContext memory context = NavigatorContextLib + .from(request) + .withEmptyResponse(); + + for (uint256 i; i < helpers.length; i++) { + context = helpers[i].prepare(context); + } + + return context.response; + } + + /** + * @notice Generate a criteria merkle root from an array of `tokenIds`. Use + * this helper to construct an order item's `identifierOrCriteria`. + * + * @param tokenIds An array of integer token IDs to be converted to a merkle + * root. + * + * @return The bytes32 merkle root of a criteria tree containing the given + * token IDs. + */ + function criteriaRoot( + uint256[] memory tokenIds + ) external pure returns (bytes32) { + return tokenIds.criteriaRoot(); + } + + /** + * @notice Generate a criteria merkle proof that `id` is a member of + * `tokenIds`. Reverts if `id` is not a member of `tokenIds`. Use + * this helper to construct proof data for criteria resolvers. + * + * @param tokenIds An array of integer token IDs. + * @param id The integer token ID to generate a proof for. + * + * @return Merkle proof that the given token ID is amember of the criteria + * tree containing the given token IDs. + */ + function criteriaProof( + uint256[] memory tokenIds, + uint256 id + ) external pure returns (bytes32[] memory) { + return tokenIds.criteriaProof(id); + } +} diff --git a/contracts/seaport/helpers/navigator/lib/CriteriaHelper.sol b/contracts/seaport/helpers/navigator/lib/CriteriaHelper.sol new file mode 100644 index 00000000..d132a674 --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/CriteriaHelper.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { + CriteriaResolver +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { + NavigatorCriteriaResolverLib +} from "./NavigatorCriteriaResolverLib.sol"; + +import { NavigatorContext } from "./SeaportNavigatorTypes.sol"; + +import { HelperInterface } from "./HelperInterface.sol"; + +contract CriteriaHelper is HelperInterface { + using NavigatorCriteriaResolverLib for NavigatorContext; + + function prepare( + NavigatorContext memory context + ) public pure returns (NavigatorContext memory) { + return context.withCriteria(); + } +} diff --git a/contracts/seaport/helpers/navigator/lib/CriteriaHelperLib.sol b/contracts/seaport/helpers/navigator/lib/CriteriaHelperLib.sol new file mode 100644 index 00000000..a50a69ac --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/CriteriaHelperLib.sol @@ -0,0 +1,131 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { MerkleLib } from "./MerkleLib.sol"; + +error TokenIdNotFound(); + +struct HashAndIntTuple { + uint256 num; + bytes32 hash; +} + +/** + * @notice Helper library for calculating criteria resolver Merkle roots and + * proofs from integer token ids. + */ +library CriteriaHelperLib { + error CannotDeriveRootForSingleTokenId(); + error CannotDeriveProofForSingleTokenId(); + + /** + * @notice Calculate the Merkle root of a criteria tree containing the given + * integer token ids. + */ + function criteriaRoot( + uint256[] memory tokenIds + ) internal pure returns (bytes32) { + if (tokenIds.length == 0) { + return bytes32(0); + } else if (tokenIds.length == 1) { + revert CannotDeriveRootForSingleTokenId(); + } else { + return + MerkleLib.getRoot( + toSortedHashes(tokenIds), + MerkleLib.merkleHash + ); + } + } + + /** + * @notice Calculate the Merkle proof that the given token id is a member of + * the criteria tree containing the provided tokenIds. + */ + function criteriaProof( + uint256[] memory tokenIds, + uint256 id + ) internal pure returns (bytes32[] memory) { + if (tokenIds.length == 0) { + return new bytes32[](0); + } else if (tokenIds.length == 1) { + revert CannotDeriveProofForSingleTokenId(); + } else { + bytes32 idHash = keccak256(abi.encode(id)); + uint256 idx; + bool found; + bytes32[] memory idHashes = toSortedHashes(tokenIds); + for (; idx < idHashes.length; idx++) { + if (idHashes[idx] == idHash) { + found = true; + break; + } + } + if (!found) revert TokenIdNotFound(); + return MerkleLib.getProof(idHashes, idx, MerkleLib.merkleHash); + } + } + + /** + * @notice Sort an array of integer token ids by their hashed values. + */ + function sortByHash( + uint256[] memory tokenIds + ) internal pure returns (uint256[] memory sortedIds) { + HashAndIntTuple[] memory toSort = new HashAndIntTuple[]( + tokenIds.length + ); + for (uint256 i = 0; i < tokenIds.length; i++) { + toSort[i] = HashAndIntTuple( + tokenIds[i], + keccak256(abi.encode(tokenIds[i])) + ); + } + + _quickSort(toSort, 0, int256(toSort.length - 1)); + + sortedIds = new uint256[](tokenIds.length); + for (uint256 i = 0; i < tokenIds.length; i++) { + sortedIds[i] = toSort[i].num; + } + } + + /** + * @notice Convert an array of integer token ids to a sorted array of + * their hashed values. + */ + function toSortedHashes( + uint256[] memory tokenIds + ) internal pure returns (bytes32[] memory hashes) { + hashes = new bytes32[](tokenIds.length); + uint256[] memory ids = sortByHash(tokenIds); + for (uint256 i; i < ids.length; ++i) { + hashes[i] = keccak256(abi.encode(ids[i])); + } + } + + function _quickSort( + HashAndIntTuple[] memory arr, + int256 left, + int256 right + ) internal pure { + int256 i = left; + int256 j = right; + if (i == j) return; + bytes32 pivot = arr[uint256(left + (right - left) / 2)].hash; + while (i <= j) { + while (arr[uint256(i)].hash < pivot) i++; + while (pivot < arr[uint256(j)].hash) j--; + if (i <= j) { + (arr[uint256(i)], arr[uint256(j)]) = ( + arr[uint256(j)], + arr[uint256(i)] + ); + i++; + j--; + } + } + if (left < j) _quickSort(arr, left, j); + if (i < right) _quickSort(arr, i, right); + } +} diff --git a/contracts/seaport/helpers/navigator/lib/ExecutionsHelper.sol b/contracts/seaport/helpers/navigator/lib/ExecutionsHelper.sol new file mode 100644 index 00000000..cdfc8841 --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/ExecutionsHelper.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { NavigatorExecutionsLib } from "./NavigatorExecutionsLib.sol"; + +import { NavigatorContext } from "./SeaportNavigatorTypes.sol"; + +import { HelperInterface } from "./HelperInterface.sol"; + +contract ExecutionsHelper is HelperInterface { + using NavigatorExecutionsLib for NavigatorContext; + + function prepare( + NavigatorContext memory context + ) public pure returns (NavigatorContext memory) { + return context.withExecutions(); + } +} diff --git a/contracts/seaport/helpers/navigator/lib/FulfillmentsHelper.sol b/contracts/seaport/helpers/navigator/lib/FulfillmentsHelper.sol new file mode 100644 index 00000000..0109cdee --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/FulfillmentsHelper.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { NavigatorFulfillmentsLib } from "./NavigatorFulfillmentsLib.sol"; + +import { NavigatorContext } from "./SeaportNavigatorTypes.sol"; + +import { HelperInterface } from "./HelperInterface.sol"; + +contract FulfillmentsHelper is HelperInterface { + using NavigatorFulfillmentsLib for NavigatorContext; + + function prepare( + NavigatorContext memory context + ) public pure returns (NavigatorContext memory) { + return context.withFulfillments(); + } +} diff --git a/contracts/seaport/helpers/navigator/lib/HelperInterface.sol b/contracts/seaport/helpers/navigator/lib/HelperInterface.sol new file mode 100644 index 00000000..34f4f831 --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/HelperInterface.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { NavigatorContext } from "./SeaportNavigatorTypes.sol"; + +interface HelperInterface { + function prepare( + NavigatorContext memory context + ) external view returns (NavigatorContext memory); +} diff --git a/contracts/seaport/helpers/navigator/lib/HelperItemLib.sol b/contracts/seaport/helpers/navigator/lib/HelperItemLib.sol new file mode 100644 index 00000000..824057f8 --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/HelperItemLib.sol @@ -0,0 +1,145 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { ItemType } from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { + NavigatorOfferItem, + NavigatorConsiderationItem +} from "./SeaportNavigatorTypes.sol"; + +library HelperItemLib { + error InvalidIdentifier(uint256 identifier, uint256[] candidateIdentifiers); + error InvalidItemTypeForCandidateIdentifiers(); + + /** + * @dev Internal error: Could not convert item type. + */ + error UnknownItemType(); + + function normalizeType( + NavigatorOfferItem memory item + ) internal pure returns (ItemType) { + ItemType itemType = item.itemType; + if (hasCriteria(item)) { + if ( + itemType == ItemType.ERC721 || + itemType == ItemType.ERC721_WITH_CRITERIA + ) { + return ItemType.ERC721_WITH_CRITERIA; + } else if ( + itemType == ItemType.ERC1155 || + itemType == ItemType.ERC1155_WITH_CRITERIA + ) { + return ItemType.ERC1155_WITH_CRITERIA; + } else { + revert UnknownItemType(); + } + } else { + return itemType; + } + } + + function normalizeType( + NavigatorConsiderationItem memory item + ) internal pure returns (ItemType) { + ItemType itemType = item.itemType; + if (hasCriteria(item)) { + if ( + itemType == ItemType.ERC721 || + itemType == ItemType.ERC721_WITH_CRITERIA + ) { + return ItemType.ERC721_WITH_CRITERIA; + } else if ( + itemType == ItemType.ERC1155 || + itemType == ItemType.ERC1155_WITH_CRITERIA + ) { + return ItemType.ERC1155_WITH_CRITERIA; + } else { + revert UnknownItemType(); + } + } else { + return itemType; + } + } + + function hasCriteria( + NavigatorOfferItem memory item + ) internal pure returns (bool) { + return item.candidateIdentifiers.length > 0; + } + + function hasCriteria( + NavigatorConsiderationItem memory item + ) internal pure returns (bool) { + return item.candidateIdentifiers.length > 0; + } + + function validate(NavigatorOfferItem memory item) internal pure { + ItemType itemType = item.itemType; + if (itemType == ItemType.ERC20 || itemType == ItemType.NATIVE) { + if (item.candidateIdentifiers.length > 0) { + revert InvalidItemTypeForCandidateIdentifiers(); + } else { + return; + } + } + // If the item has candidate identifiers, the item identifier must be + // zero for wildcard or one of the candidates. + if (item.candidateIdentifiers.length == 0 && item.identifier == 0) { + revert InvalidIdentifier( + item.identifier, + item.candidateIdentifiers + ); + } + if (item.candidateIdentifiers.length > 0) { + bool identifierFound; + for (uint256 i; i < item.candidateIdentifiers.length; i++) { + if (item.candidateIdentifiers[i] == item.identifier) { + identifierFound = true; + break; + } + } + if (!identifierFound && item.identifier != 0) { + revert InvalidIdentifier( + item.identifier, + item.candidateIdentifiers + ); + } + } + } + + function validate(NavigatorConsiderationItem memory item) internal pure { + ItemType itemType = item.itemType; + if (itemType == ItemType.ERC20 || itemType == ItemType.NATIVE) { + if (item.candidateIdentifiers.length > 0) { + revert InvalidItemTypeForCandidateIdentifiers(); + } else { + return; + } + } + // If the item has candidate identifiers, the item identifier must be + // zero for wildcard or one of the candidates. + if (item.candidateIdentifiers.length == 0 && item.identifier == 0) { + revert InvalidIdentifier( + item.identifier, + item.candidateIdentifiers + ); + } + if (item.candidateIdentifiers.length > 0) { + bool identifierFound; + for (uint256 i; i < item.candidateIdentifiers.length; i++) { + if (item.candidateIdentifiers[i] == item.identifier) { + identifierFound = true; + break; + } + } + if (!identifierFound && item.identifier != 0) { + revert InvalidIdentifier( + item.identifier, + item.candidateIdentifiers + ); + } + } + } +} diff --git a/contracts/seaport/helpers/navigator/lib/MerkleLib.sol b/contracts/seaport/helpers/navigator/lib/MerkleLib.sol new file mode 100644 index 00000000..f0be29e0 --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/MerkleLib.sol @@ -0,0 +1,218 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +/** + * @notice A pure library for generating Merkle trees/proofs, adapted from + * Murky: https://github.com/dmfxyz/murky + */ +library MerkleLib { + function merkleHash( + bytes32 left, + bytes32 right + ) internal pure returns (bytes32 _hash) { + assembly { + switch lt(left, right) + case 0 { + mstore(0x0, right) + mstore(0x20, left) + } + default { + mstore(0x0, left) + mstore(0x20, right) + } + _hash := keccak256(0x0, 0x40) + } + } + + function xorkleHash( + bytes32 left, + bytes32 right + ) internal pure returns (bytes32 _hash) { + assembly { + mstore(0x0, xor(left, right)) + _hash := keccak256(0x0, 0x20) + } + } + + function verifyProof( + bytes32 root, + bytes32[] memory proof, + bytes32 valueToProve, + function(bytes32, bytes32) internal pure returns (bytes32) hashLeafPairs + ) internal pure returns (bool) { + // proof length must be less than max array size + bytes32 rollingHash = valueToProve; + uint256 length = proof.length; + unchecked { + for (uint i = 0; i < length; ++i) { + rollingHash = hashLeafPairs(rollingHash, proof[i]); + } + } + return root == rollingHash; + } + + function getRoot( + bytes32[] memory data, + function(bytes32, bytes32) internal pure returns (bytes32) hashLeafPairs + ) internal pure returns (bytes32) { + require(data.length > 1, "won't generate root for single leaf"); + while (data.length > 1) { + data = hashLevel(data, hashLeafPairs); + } + return data[0]; + } + + function getProof( + bytes32[] memory data, + uint256 node, + function(bytes32, bytes32) internal pure returns (bytes32) hashLeafPairs + ) internal pure returns (bytes32[] memory) { + require(data.length > 1, "won't generate proof for single leaf"); + // The size of the proof is equal to the ceiling of log2(numLeaves) + bytes32[] memory result = new bytes32[](log2ceilBitMagic(data.length)); + uint256 pos = 0; + + // Two overflow risks: node, pos + // node: max array size is 2**256-1. Largest index in the array will be 1 less than that. Also, + // for dynamic arrays, size is limited to 2**64-1 + // pos: pos is bounded by log2(data.length), which should be less than type(uint256).max + while (data.length > 1) { + unchecked { + if (node & 0x1 == 1) { + result[pos] = data[node - 1]; + } else if (node + 1 == data.length) { + result[pos] = bytes32(0); + } else { + result[pos] = data[node + 1]; + } + ++pos; + node /= 2; + } + data = hashLevel(data, hashLeafPairs); + } + return result; + } + + ///@dev function is private to prevent unsafe data from being passed + function hashLevel( + bytes32[] memory data, + function(bytes32, bytes32) internal pure returns (bytes32) hashLeafPairs + ) private pure returns (bytes32[] memory) { + bytes32[] memory result; + + // Function is private, and all internal callers check that data.length >=2. + // Underflow is not possible as lowest possible value for data/result index is 1 + // overflow should be safe as length is / 2 always. + unchecked { + uint256 length = data.length; + if (length & 0x1 == 1) { + result = new bytes32[](length / 2 + 1); + result[result.length - 1] = hashLeafPairs( + data[length - 1], + bytes32(0) + ); + } else { + result = new bytes32[](length / 2); + } + // pos is upper bounded by data.length / 2, so safe even if array is at max size + uint256 pos = 0; + for (uint256 i = 0; i < length - 1; i += 2) { + result[pos] = hashLeafPairs(data[i], data[i + 1]); + ++pos; + } + } + return result; + } + + /****************** + * MATH "LIBRARY" * + ******************/ + + /// @dev Note that x is assumed > 0 + function log2ceil(uint256 x) internal pure returns (uint256) { + uint256 ceil = 0; + uint pOf2; + // If x is a power of 2, then this function will return a ceiling + // that is 1 greater than the actual ceiling. So we need to check if + // x is a power of 2, and subtract one from ceil if so. + assembly { + // we check by seeing if x == (~x + 1) & x. This applies a mask + // to find the lowest set bit of x and then checks it for equality + // with x. If they are equal, then x is a power of 2. + + /* Example + x has single bit set + x := 0000_1000 + (~x + 1) = (1111_0111) + 1 = 1111_1000 + (1111_1000 & 0000_1000) = 0000_1000 == x + + x has multiple bits set + x := 1001_0010 + (~x + 1) = (0110_1101 + 1) = 0110_1110 + (0110_1110 & x) = 0000_0010 != x + */ + + // we do some assembly magic to treat the bool as an integer later on + pOf2 := eq(and(add(not(x), 1), x), x) + } + + // if x == type(uint256).max, than ceil is capped at 256 + // if x == 0, then pO2 == 0, so ceil won't underflow + unchecked { + while (x > 0) { + x >>= 1; + ceil++; + } + ceil -= pOf2; // see above + } + return ceil; + } + + /// Original bitmagic adapted from https://github.com/paulrberg/prb-math/blob/main/contracts/PRBMath.sol + /// @dev Note that x assumed > 1 + function log2ceilBitMagic(uint256 x) internal pure returns (uint256) { + if (x <= 1) { + return 0; + } + uint256 msb = 0; + uint256 _x = x; + if (x >= 2 ** 128) { + x >>= 128; + msb += 128; + } + if (x >= 2 ** 64) { + x >>= 64; + msb += 64; + } + if (x >= 2 ** 32) { + x >>= 32; + msb += 32; + } + if (x >= 2 ** 16) { + x >>= 16; + msb += 16; + } + if (x >= 2 ** 8) { + x >>= 8; + msb += 8; + } + if (x >= 2 ** 4) { + x >>= 4; + msb += 4; + } + if (x >= 2 ** 2) { + x >>= 2; + msb += 2; + } + if (x >= 2 ** 1) { + msb += 1; + } + + uint256 lsb = (~_x + 1) & _x; + if ((lsb == _x) && (msb > 0)) { + return msb; + } else { + return msb + 1; + } + } +} diff --git a/contracts/seaport/helpers/navigator/lib/NavigatorAdvancedOrderLib.sol b/contracts/seaport/helpers/navigator/lib/NavigatorAdvancedOrderLib.sol new file mode 100644 index 00000000..2f99fc17 --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/NavigatorAdvancedOrderLib.sol @@ -0,0 +1,246 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { + AdvancedOrder, + CriteriaResolver, + OfferItem, + ConsiderationItem, + OrderParameters +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { Side } from "seaport-types/src/lib/ConsiderationEnums.sol"; + +import { CriteriaHelperLib } from "./CriteriaHelperLib.sol"; +import { HelperItemLib } from "./HelperItemLib.sol"; +import { + NavigatorAdvancedOrder, + NavigatorOrderParameters, + NavigatorOfferItem, + NavigatorConsiderationItem +} from "./SeaportNavigatorTypes.sol"; + +library NavigatorAdvancedOrderLib { + using CriteriaHelperLib for uint256[]; + using HelperItemLib for NavigatorOfferItem; + using HelperItemLib for NavigatorConsiderationItem; + + function fromAdvancedOrders( + AdvancedOrder[] memory orders + ) internal pure returns (NavigatorAdvancedOrder[] memory) { + NavigatorAdvancedOrder[] + memory helperOrders = new NavigatorAdvancedOrder[](orders.length); + for (uint256 i; i < orders.length; i++) { + helperOrders[i] = fromAdvancedOrder(orders[i]); + } + return helperOrders; + } + + function fromAdvancedOrder( + AdvancedOrder memory order + ) internal pure returns (NavigatorAdvancedOrder memory) { + NavigatorOfferItem[] memory offerItems = new NavigatorOfferItem[]( + order.parameters.offer.length + ); + for (uint256 i; i < order.parameters.offer.length; i++) { + OfferItem memory item = order.parameters.offer[i]; + offerItems[i] = NavigatorOfferItem({ + itemType: item.itemType, + token: item.token, + identifier: item.identifierOrCriteria, + startAmount: item.startAmount, + endAmount: item.endAmount, + candidateIdentifiers: new uint256[](0) + }); + } + NavigatorConsiderationItem[] + memory considerationItems = new NavigatorConsiderationItem[]( + order.parameters.consideration.length + ); + for (uint256 i; i < order.parameters.consideration.length; i++) { + ConsiderationItem memory item = order.parameters.consideration[i]; + considerationItems[i] = NavigatorConsiderationItem({ + itemType: item.itemType, + token: item.token, + identifier: item.identifierOrCriteria, + startAmount: item.startAmount, + endAmount: item.endAmount, + recipient: item.recipient, + candidateIdentifiers: new uint256[](0) + }); + } + return + NavigatorAdvancedOrder({ + parameters: NavigatorOrderParameters({ + offerer: order.parameters.offerer, + zone: order.parameters.zone, + offer: offerItems, + consideration: considerationItems, + orderType: order.parameters.orderType, + startTime: order.parameters.startTime, + endTime: order.parameters.endTime, + zoneHash: order.parameters.zoneHash, + salt: order.parameters.salt, + conduitKey: order.parameters.conduitKey, + totalOriginalConsiderationItems: order + .parameters + .totalOriginalConsiderationItems + }), + numerator: order.numerator, + denominator: order.denominator, + signature: order.signature, + extraData: order.extraData + }); + } + + function toAdvancedOrder( + NavigatorAdvancedOrder memory order, + uint256 orderIndex + ) internal pure returns (AdvancedOrder memory, CriteriaResolver[] memory) { + CriteriaResolver[] memory criteriaResolvers = new CriteriaResolver[]( + order.parameters.offer.length + + order.parameters.consideration.length + ); + uint256 criteriaResolverLen; + OfferItem[] memory offer = new OfferItem[]( + order.parameters.offer.length + ); + for (uint256 i; i < order.parameters.offer.length; i++) { + NavigatorOfferItem memory item = order.parameters.offer[i]; + if (item.hasCriteria()) { + item.validate(); + offer[i] = OfferItem({ + itemType: item.normalizeType(), + token: item.token, + identifierOrCriteria: uint256( + item.candidateIdentifiers.criteriaRoot() + ), + startAmount: item.startAmount, + endAmount: item.endAmount + }); + criteriaResolvers[criteriaResolverLen] = CriteriaResolver({ + orderIndex: orderIndex, + side: Side.OFFER, + index: i, + identifier: item.identifier, + criteriaProof: item.candidateIdentifiers.criteriaProof( + item.identifier + ) + }); + criteriaResolverLen++; + } else { + offer[i] = OfferItem({ + itemType: item.itemType, + token: item.token, + identifierOrCriteria: item.identifier, + startAmount: item.startAmount, + endAmount: item.endAmount + }); + } + } + ConsiderationItem[] memory consideration = new ConsiderationItem[]( + order.parameters.consideration.length + ); + for (uint256 i; i < order.parameters.consideration.length; i++) { + NavigatorConsiderationItem memory item = order + .parameters + .consideration[i]; + if (item.hasCriteria()) { + item.validate(); + consideration[i] = ConsiderationItem({ + itemType: item.normalizeType(), + token: item.token, + identifierOrCriteria: uint256( + item.candidateIdentifiers.criteriaRoot() + ), + startAmount: item.startAmount, + endAmount: item.endAmount, + recipient: item.recipient + }); + criteriaResolvers[criteriaResolverLen] = CriteriaResolver({ + orderIndex: orderIndex, + side: Side.CONSIDERATION, + index: i, + identifier: item.identifier, + criteriaProof: item.candidateIdentifiers.criteriaProof( + item.identifier + ) + }); + criteriaResolverLen++; + } else { + consideration[i] = ConsiderationItem({ + itemType: item.itemType, + token: item.token, + identifierOrCriteria: item.identifier, + startAmount: item.startAmount, + endAmount: item.endAmount, + recipient: item.recipient + }); + } + } + assembly { + mstore(criteriaResolvers, criteriaResolverLen) + } + return ( + AdvancedOrder({ + parameters: OrderParameters({ + offerer: order.parameters.offerer, + zone: order.parameters.zone, + offer: offer, + consideration: consideration, + orderType: order.parameters.orderType, + startTime: order.parameters.startTime, + endTime: order.parameters.endTime, + zoneHash: order.parameters.zoneHash, + salt: order.parameters.salt, + conduitKey: order.parameters.conduitKey, + totalOriginalConsiderationItems: order + .parameters + .totalOriginalConsiderationItems + }), + numerator: order.numerator, + denominator: order.denominator, + signature: order.signature, + extraData: order.extraData + }), + criteriaResolvers + ); + } + + function toAdvancedOrders( + NavigatorAdvancedOrder[] memory orders + ) + internal + pure + returns (AdvancedOrder[] memory, CriteriaResolver[] memory) + { + AdvancedOrder[] memory advancedOrders = new AdvancedOrder[]( + orders.length + ); + uint256 maxCriteriaResolvers; + for (uint256 i; i < orders.length; i++) { + NavigatorOrderParameters memory parameters = orders[i].parameters; + maxCriteriaResolvers += (parameters.offer.length + + parameters.consideration.length); + } + uint256 criteriaResolverIndex; + CriteriaResolver[] memory criteriaResolvers = new CriteriaResolver[]( + maxCriteriaResolvers + ); + for (uint256 i = 0; i < orders.length; i++) { + ( + AdvancedOrder memory order, + CriteriaResolver[] memory orderResolvers + ) = toAdvancedOrder(orders[i], i); + advancedOrders[i] = order; + for (uint256 j; j < orderResolvers.length; j++) { + criteriaResolvers[criteriaResolverIndex] = orderResolvers[j]; + criteriaResolverIndex++; + } + } + assembly { + mstore(criteriaResolvers, criteriaResolverIndex) + } + return (advancedOrders, criteriaResolvers); + } +} diff --git a/contracts/seaport/helpers/navigator/lib/NavigatorContextLib.sol b/contracts/seaport/helpers/navigator/lib/NavigatorContextLib.sol new file mode 100644 index 00000000..a00ea9f0 --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/NavigatorContextLib.sol @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { + ConsiderationInterface +} from "seaport-types/src/interfaces/ConsiderationInterface.sol"; + +import { + MatchComponent +} from "seaport-sol/src/lib/types/MatchComponentType.sol"; +import { OrderDetails } from "seaport-sol/src/fulfillments/lib/Structs.sol"; + +import { + AdvancedOrder, + Execution, + Fulfillment, + FulfillmentComponent, + CriteriaResolver +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { + NavigatorRequest, + NavigatorResponse, + NavigatorContext, + NavigatorOfferItem, + NavigatorConsiderationItem, + NavigatorOrderParameters, + NavigatorAdvancedOrder +} from "./SeaportNavigatorTypes.sol"; + +import { + SeaportValidatorInterface, + ErrorsAndWarnings +} from "../../order-validator/SeaportValidator.sol"; + +library NavigatorContextLib { + function from( + NavigatorRequest memory request + ) internal pure returns (NavigatorContext memory context) { + context.request = request; + } + + function withEmptyResponse( + NavigatorContext memory context + ) internal pure returns (NavigatorContext memory) { + context.response = NavigatorResponse({ + orders: new AdvancedOrder[](0), + criteriaResolvers: new CriteriaResolver[](0), + suggestedActionName: "", + suggestedCallData: hex"", + validationErrors: new ErrorsAndWarnings[](0), + orderDetails: new OrderDetails[](0), + offerFulfillments: new FulfillmentComponent[][](0), + considerationFulfillments: new FulfillmentComponent[][](0), + fulfillments: new Fulfillment[](0), + unspentOfferComponents: new MatchComponent[](0), + unmetConsiderationComponents: new MatchComponent[](0), + explicitExecutions: new Execution[](0), + implicitExecutions: new Execution[](0), + implicitExecutionsPre: new Execution[](0), + implicitExecutionsPost: new Execution[](0), + nativeTokensReturned: 0 + }); + return context; + } +} diff --git a/contracts/seaport/helpers/navigator/lib/NavigatorCriteriaResolverLib.sol b/contracts/seaport/helpers/navigator/lib/NavigatorCriteriaResolverLib.sol new file mode 100644 index 00000000..4198760a --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/NavigatorCriteriaResolverLib.sol @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { + AdvancedOrder, + CriteriaResolver +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { + NavigatorAdvancedOrder, + NavigatorContext +} from "./SeaportNavigatorTypes.sol"; + +import { NavigatorAdvancedOrderLib } from "./NavigatorAdvancedOrderLib.sol"; + +library NavigatorCriteriaResolverLib { + using NavigatorAdvancedOrderLib for NavigatorAdvancedOrder[]; + + /** + * @dev Calculate criteria resolvers, merkle proofs, and criteria merkle + * roots for the provided orders and criteria constraints. Modifies + * orders in place to add criteria merkle roots to the appropriate + * offer/consdieration items. Adds calculated criteria resolvers to + * the NavigatorResponse. + */ + function withCriteria( + NavigatorContext memory context + ) internal pure returns (NavigatorContext memory) { + ( + AdvancedOrder[] memory orders, + CriteriaResolver[] memory resolvers + ) = context.request.orders.toAdvancedOrders(); + context.response.orders = orders; + if (context.request.criteriaResolvers.length > 0) { + context.response.criteriaResolvers = context + .request + .criteriaResolvers; + return context; + } else { + context.response.criteriaResolvers = resolvers; + return context; + } + } +} diff --git a/contracts/seaport/helpers/navigator/lib/NavigatorDetailsLib.sol b/contracts/seaport/helpers/navigator/lib/NavigatorDetailsLib.sol new file mode 100644 index 00000000..3047208c --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/NavigatorDetailsLib.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { UnavailableReason } from "seaport-sol/src/SpaceEnums.sol"; +import { AdvancedOrder } from "seaport-types/src/lib/ConsiderationStructs.sol"; +import { AdvancedOrderLib } from "seaport-sol/src/lib/AdvancedOrderLib.sol"; +import { NavigatorContext } from "./SeaportNavigatorTypes.sol"; +import { OrderAvailabilityLib } from "./OrderAvailabilityLib.sol"; + +library NavigatorDetailsLib { + using AdvancedOrderLib for AdvancedOrder[]; + using OrderAvailabilityLib for AdvancedOrder[]; + + /** + * @dev Calculate OrderDetails for each order and add them to the NavigatorResponse. + */ + function withDetails( + NavigatorContext memory context + ) internal view returns (NavigatorContext memory) { + UnavailableReason[] memory unavailableReasons = context + .response + .orders + .unavailableReasons( + context.request.maximumFulfilled, + context.request.seaport + ); + bytes32[] memory orderHashes = context.response.orders.getOrderHashes( + address(context.request.seaport) + ); + context.response.orderDetails = context.response.orders.getOrderDetails( + context.response.criteriaResolvers, + orderHashes, + unavailableReasons + ); + return context; + } +} diff --git a/contracts/seaport/helpers/navigator/lib/NavigatorExecutionsLib.sol b/contracts/seaport/helpers/navigator/lib/NavigatorExecutionsLib.sol new file mode 100644 index 00000000..5941f082 --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/NavigatorExecutionsLib.sol @@ -0,0 +1,118 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { + ConsiderationInterface +} from "seaport-types/src/interfaces/ConsiderationInterface.sol"; + +import { + AdvancedOrder, + Execution, + SpentItem, + ReceivedItem +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { ItemType } from "seaport-types/src/lib/ConsiderationEnums.sol"; + +import { + FulfillmentDetails +} from "seaport-sol/src/fulfillments/lib/Structs.sol"; + +import { + ExecutionHelper +} from "seaport-sol/src/executions/ExecutionHelper.sol"; + +import { UnavailableReason } from "seaport-sol/src/SpaceEnums.sol"; + +import { OrderDetails } from "seaport-sol/src/fulfillments/lib/Structs.sol"; + +import { NavigatorContext } from "./SeaportNavigatorTypes.sol"; + +library NavigatorExecutionsLib { + using ExecutionHelper for FulfillmentDetails; + + /** + * @dev Internal error: Could not select a fulfillment method for the provided + * orders. + */ + error UnknownAction(); + + /** + * @dev Calculate executions for the provided orders and add them to the + * NavigatorResponse. + */ + function withExecutions( + NavigatorContext memory context + ) internal pure returns (NavigatorContext memory) { + bytes memory callData = context.response.suggestedCallData; + bytes4 _suggestedAction = bytes4(callData); + FulfillmentDetails memory fulfillmentDetails = FulfillmentDetails({ + orders: context.response.orderDetails, + recipient: payable(context.request.recipient), + fulfiller: payable(context.request.caller), + nativeTokensSupplied: context.request.nativeTokensSupplied, + fulfillerConduitKey: context.request.fulfillerConduitKey, + seaport: address(context.request.seaport) + }); + + Execution[] memory explicitExecutions; + Execution[] memory implicitExecutions; + Execution[] memory implicitExecutionsPre; + Execution[] memory implicitExecutionsPost; + uint256 nativeTokensReturned; + + if ( + _suggestedAction == + ConsiderationInterface.fulfillAvailableOrders.selector || + _suggestedAction == + ConsiderationInterface.fulfillAvailableAdvancedOrders.selector + ) { + ( + explicitExecutions, + implicitExecutionsPre, + implicitExecutionsPost, + nativeTokensReturned + ) = fulfillmentDetails.getFulfillAvailableExecutions( + context.response.offerFulfillments, + context.response.considerationFulfillments, + context.response.orderDetails + ); + } else if ( + _suggestedAction == ConsiderationInterface.matchOrders.selector || + _suggestedAction == + ConsiderationInterface.matchAdvancedOrders.selector + ) { + ( + explicitExecutions, + implicitExecutionsPre, + implicitExecutionsPost, + nativeTokensReturned + ) = fulfillmentDetails.getMatchExecutions( + context.response.fulfillments + ); + } else if ( + _suggestedAction == ConsiderationInterface.fulfillOrder.selector || + _suggestedAction == + ConsiderationInterface.fulfillAdvancedOrder.selector + ) { + (implicitExecutions, nativeTokensReturned) = fulfillmentDetails + .getStandardExecutions(); + } else if ( + _suggestedAction == + ConsiderationInterface.fulfillBasicOrder.selector || + _suggestedAction == + ConsiderationInterface.fulfillBasicOrder_efficient_6GL6yc.selector + ) { + (implicitExecutions, nativeTokensReturned) = fulfillmentDetails + .getBasicExecutions(); + } else { + revert UnknownAction(); + } + context.response.explicitExecutions = explicitExecutions; + context.response.implicitExecutions = implicitExecutions; + context.response.implicitExecutionsPre = implicitExecutionsPre; + context.response.implicitExecutionsPost = implicitExecutionsPost; + context.response.nativeTokensReturned = nativeTokensReturned; + return context; + } +} diff --git a/contracts/seaport/helpers/navigator/lib/NavigatorFulfillmentsLib.sol b/contracts/seaport/helpers/navigator/lib/NavigatorFulfillmentsLib.sol new file mode 100644 index 00000000..1cc18a60 --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/NavigatorFulfillmentsLib.sol @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { Fulfillment } from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { + FulfillmentGeneratorLib +} from "seaport-sol/src/fulfillments/lib/FulfillmentLib.sol"; + +import { + FulfillmentComponent, + MatchComponent, + OrderDetails +} from "seaport-sol/src/fulfillments/lib/Structs.sol"; + +import { NavigatorContext } from "./SeaportNavigatorTypes.sol"; + +library NavigatorFulfillmentsLib { + using FulfillmentGeneratorLib for OrderDetails[]; + + /** + * @dev Calculate fulfillments and match components for the provided orders + * and add them to the NavigatorResponse. + */ + function withFulfillments( + NavigatorContext memory context + ) internal pure returns (NavigatorContext memory) { + ( + , + FulfillmentComponent[][] memory offerFulfillments, + FulfillmentComponent[][] memory considerationFulfillments, + Fulfillment[] memory fulfillments, + MatchComponent[] memory unspentOfferComponents, + MatchComponent[] memory unmetConsiderationComponents + ) = context.response.orderDetails.getFulfillments( + context.request.fulfillmentStrategy, + context.request.recipient, + context.request.caller, + context.request.seed + ); + + context.response.offerFulfillments = offerFulfillments; + context.response.considerationFulfillments = considerationFulfillments; + context.response.fulfillments = fulfillments; + context.response.unspentOfferComponents = unspentOfferComponents; + context + .response + .unmetConsiderationComponents = unmetConsiderationComponents; + return context; + } +} diff --git a/contracts/seaport/helpers/navigator/lib/NavigatorRequestValidatorLib.sol b/contracts/seaport/helpers/navigator/lib/NavigatorRequestValidatorLib.sol new file mode 100644 index 00000000..77922d9e --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/NavigatorRequestValidatorLib.sol @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { AdvancedOrder } from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { Type, OrderStructureLib } from "./OrderStructureLib.sol"; +import { NavigatorContext } from "./SeaportNavigatorTypes.sol"; + +library NavigatorRequestValidatorLib { + using OrderStructureLib for AdvancedOrder; + + /** + * @dev Bad request error: provided orders include at least one contract order. + * The order helper does not currently support contract orders. + */ + error ContractOrdersNotSupported(); + + /** + * @dev Validate the provided orders. Checks that none of the provided orders + * are contract orders and applies basic criteria constraint validations. + */ + function validate( + NavigatorContext memory context + ) internal pure returns (NavigatorContext memory) { + validateNoContractOrders(context); + return context; + } + + /** + * @dev Checks that none of the provided orders are contract orders. + */ + function validateNoContractOrders( + NavigatorContext memory context + ) internal pure returns (NavigatorContext memory) { + for (uint256 i; i < context.response.orders.length; i++) { + AdvancedOrder memory order = context.response.orders[i]; + if (order.getType() == Type.CONTRACT) { + revert ContractOrdersNotSupported(); + } + } + return context; + } +} diff --git a/contracts/seaport/helpers/navigator/lib/NavigatorSeaportValidatorLib.sol b/contracts/seaport/helpers/navigator/lib/NavigatorSeaportValidatorLib.sol new file mode 100644 index 00000000..5bbe7779 --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/NavigatorSeaportValidatorLib.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { AdvancedOrder } from "seaport-types/src/lib/ConsiderationStructs.sol"; +import { AdvancedOrderLib } from "seaport-sol/src/lib/AdvancedOrderLib.sol"; + +import { ErrorsAndWarnings } from "../../order-validator/SeaportValidator.sol"; + +import { NavigatorContext } from "./SeaportNavigatorTypes.sol"; + +library NavigatorSeaportValidatorLib { + using AdvancedOrderLib for AdvancedOrder; + + error ValidatorReverted(); + + /** + * @dev Validate each order using SeaportValidator and add the results to + * the NavigatorResponse. + */ + function withErrors( + NavigatorContext memory context + ) internal view returns (NavigatorContext memory) { + AdvancedOrder[] memory orders = context.response.orders; + + ErrorsAndWarnings[] memory errors = new ErrorsAndWarnings[]( + orders.length + ); + for (uint256 i; i < orders.length; i++) { + errors[i] = context.request.validator.isValidOrder( + orders[i].toOrder(), + address(context.request.seaport) + ); + } + context.response.validationErrors = errors; + return context; + } +} diff --git a/contracts/seaport/helpers/navigator/lib/NavigatorSuggestedActionLib.sol b/contracts/seaport/helpers/navigator/lib/NavigatorSuggestedActionLib.sol new file mode 100644 index 00000000..cd30c344 --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/NavigatorSuggestedActionLib.sol @@ -0,0 +1,362 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { + ConsiderationInterface +} from "seaport-types/src/interfaces/ConsiderationInterface.sol"; + +import { + AdvancedOrder, + Execution, + SpentItem, + ReceivedItem +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { ItemType } from "seaport-types/src/lib/ConsiderationEnums.sol"; + +import { UnavailableReason } from "seaport-sol/src/SpaceEnums.sol"; + +import { OrderDetails } from "seaport-sol/src/fulfillments/lib/Structs.sol"; + +import { AdvancedOrderLib } from "seaport-sol/src/lib/AdvancedOrderLib.sol"; + +import { Family, Structure, OrderStructureLib } from "./OrderStructureLib.sol"; + +import { NavigatorContext } from "./SeaportNavigatorTypes.sol"; + +library NavigatorSuggestedActionLib { + using OrderStructureLib for AdvancedOrder; + using OrderStructureLib for AdvancedOrder[]; + using AdvancedOrderLib for AdvancedOrder; + using AdvancedOrderLib for AdvancedOrder[]; + + /** + * @dev Bad request error: provided orders cannot be fulfilled. + */ + error CannotFulfillProvidedCombinedOrder(); + + /** + * @dev Bad request error: provided orders include an invalid combination of + * native tokens and unavailable orders. + */ + error InvalidNativeTokenUnavailableCombination(); + + /** + * @dev Internal error: Could not find selector for the suggested action. + */ + error UnknownSelector(); + + /** + * @dev Choose a suggested fulfillment method based on the structure of the + * orders and add it to the NavigatorResponse. + */ + function withSuggestedAction( + NavigatorContext memory context + ) internal view returns (NavigatorContext memory) { + bytes memory callData = suggestedCallData(context); + bytes4 selector = bytes4(callData); + context.response.suggestedActionName = actionName(selector); + context.response.suggestedCallData = callData; + return context; + } + + /** + * @dev Add the human-readable name of the selected fulfillment method to + * the NavigatorResponse. + */ + function actionName(bytes4 selector) internal pure returns (string memory) { + if (selector == 0xe7acab24) return "fulfillAdvancedOrder"; + if (selector == 0x87201b41) return "fulfillAvailableAdvancedOrders"; + if (selector == 0xed98a574) return "fulfillAvailableOrders"; + if (selector == 0xfb0f3ee1) return "fulfillBasicOrder"; + if (selector == 0x00000000) return "fulfillBasicOrder_efficient_6GL6yc"; + if (selector == 0xb3a34c4c) return "fulfillOrder"; + if (selector == 0xf2d12b12) return "matchAdvancedOrders"; + if (selector == 0xa8174404) return "matchOrders"; + + revert UnknownSelector(); + } + + /** + * @dev Choose a suggested fulfillment method based on the structure of the + * orders. + */ + function suggestedCallData( + NavigatorContext memory context + ) internal view returns (bytes memory) { + Family family = context.response.orders.getFamily(); + + bool invalidOfferItemsLocated = mustUseMatch(context); + + Structure structure = context.response.orders.getStructure( + address(context.request.seaport) + ); + + bool hasUnavailable = context.request.maximumFulfilled < + context.response.orders.length; + for (uint256 i = 0; i < context.response.orderDetails.length; ++i) { + if ( + context.response.orderDetails[i].unavailableReason != + UnavailableReason.AVAILABLE + ) { + hasUnavailable = true; + break; + } + } + + if (hasUnavailable) { + if (invalidOfferItemsLocated) { + revert InvalidNativeTokenUnavailableCombination(); + } + + if (structure == Structure.ADVANCED) { + return + abi.encodeCall( + ConsiderationInterface.fulfillAvailableAdvancedOrders, + ( + context.response.orders, + context.response.criteriaResolvers, + context.response.offerFulfillments, + context.response.considerationFulfillments, + context.request.fulfillerConduitKey, + context.request.recipient, + context.request.maximumFulfilled + ) + ); + } else { + return + abi.encodeCall( + ConsiderationInterface.fulfillAvailableOrders, + ( + context.response.orders.toOrders(), + context.response.offerFulfillments, + context.response.considerationFulfillments, + context.request.fulfillerConduitKey, + context.request.maximumFulfilled + ) + ); + } + } + + if (family == Family.SINGLE && !invalidOfferItemsLocated) { + if (structure == Structure.BASIC) { + AdvancedOrder memory order = context.response.orders[0]; + return + abi.encodeCall( + ConsiderationInterface + .fulfillBasicOrder_efficient_6GL6yc, + ( + order.toBasicOrderParameters( + order.getBasicOrderType() + ) + ) + ); + } + + if (structure == Structure.STANDARD) { + return + abi.encodeCall( + ConsiderationInterface.fulfillOrder, + ( + context.response.orders[0].toOrder(), + context.request.fulfillerConduitKey + ) + ); + } + + if (structure == Structure.ADVANCED) { + return + abi.encodeCall( + ConsiderationInterface.fulfillAdvancedOrder, + ( + context.response.orders[0], + context.response.criteriaResolvers, + context.request.fulfillerConduitKey, + context.request.recipient + ) + ); + } + } + + bool cannotMatch = (context + .response + .unmetConsiderationComponents + .length != + 0 || + hasUnavailable); + + if (cannotMatch && invalidOfferItemsLocated) { + revert CannotFulfillProvidedCombinedOrder(); + } + + if (cannotMatch) { + if (structure == Structure.ADVANCED) { + return + abi.encodeCall( + ConsiderationInterface.fulfillAvailableAdvancedOrders, + ( + context.response.orders, + context.response.criteriaResolvers, + context.response.offerFulfillments, + context.response.considerationFulfillments, + context.request.fulfillerConduitKey, + context.request.recipient, + context.request.maximumFulfilled + ) + ); + } else { + return + abi.encodeCall( + ConsiderationInterface.fulfillAvailableOrders, + ( + context.response.orders.toOrders(), + context.response.offerFulfillments, + context.response.considerationFulfillments, + context.request.fulfillerConduitKey, + context.request.maximumFulfilled + ) + ); + } + } else if (invalidOfferItemsLocated) { + if (structure == Structure.ADVANCED) { + return + abi.encodeCall( + ConsiderationInterface.fulfillAvailableAdvancedOrders, + ( + context.response.orders, + context.response.criteriaResolvers, + context.response.offerFulfillments, + context.response.considerationFulfillments, + context.request.fulfillerConduitKey, + context.request.recipient, + context.request.maximumFulfilled + ) + ); + } else { + return + abi.encodeCall( + ConsiderationInterface.matchOrders, + ( + context.response.orders.toOrders(), + context.response.fulfillments + ) + ); + } + } else { + if (structure == Structure.ADVANCED) { + if (context.request.preferMatch) { + return + abi.encodeCall( + ConsiderationInterface.matchAdvancedOrders, + ( + context.response.orders, + context.response.criteriaResolvers, + context.response.fulfillments, + context.request.recipient + ) + ); + } else { + return + abi.encodeCall( + ConsiderationInterface + .fulfillAvailableAdvancedOrders, + ( + context.response.orders, + context.response.criteriaResolvers, + context.response.offerFulfillments, + context.response.considerationFulfillments, + context.request.fulfillerConduitKey, + context.request.recipient, + context.request.maximumFulfilled + ) + ); + } + } else { + if (context.request.preferMatch) { + return + abi.encodeCall( + ConsiderationInterface.matchOrders, + ( + context.response.orders.toOrders(), + context.response.fulfillments + ) + ); + } else { + return + abi.encodeCall( + ConsiderationInterface.fulfillAvailableOrders, + ( + context.response.orders.toOrders(), + context.response.offerFulfillments, + context.response.considerationFulfillments, + context.request.fulfillerConduitKey, + context.request.maximumFulfilled + ) + ); + } + } + } + } + + /** + * @dev Return whether the provided orders must be matched using matchOrders + * or matchAdvancedOrders. + */ + function mustUseMatch( + NavigatorContext memory context + ) internal pure returns (bool) { + OrderDetails[] memory orders = context.response.orderDetails; + + for (uint256 i = 0; i < orders.length; ++i) { + OrderDetails memory order = orders[i]; + + if (order.isContract) { + continue; + } + + for (uint256 j = 0; j < order.offer.length; ++j) { + if (order.offer[j].itemType == ItemType.NATIVE) { + return true; + } + } + } + + if (context.request.caller == context.request.recipient) { + return false; + } + + for (uint256 i = 0; i < orders.length; ++i) { + OrderDetails memory order = orders[i]; + + for (uint256 j = 0; j < order.offer.length; ++j) { + SpentItem memory item = order.offer[j]; + + if (item.itemType != ItemType.ERC721) { + continue; + } + + for (uint256 k = 0; k < orders.length; ++k) { + OrderDetails memory comparisonOrder = orders[k]; + for ( + uint256 l = 0; + l < comparisonOrder.consideration.length; + ++l + ) { + ReceivedItem memory considerationItem = comparisonOrder + .consideration[l]; + + if ( + considerationItem.itemType == ItemType.ERC721 && + considerationItem.identifier == item.identifier && + considerationItem.token == item.token + ) { + return true; + } + } + } + } + } + + return false; + } +} diff --git a/contracts/seaport/helpers/navigator/lib/OrderAvailabilityLib.sol b/contracts/seaport/helpers/navigator/lib/OrderAvailabilityLib.sol new file mode 100644 index 00000000..02f9aebf --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/OrderAvailabilityLib.sol @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { + ConsiderationInterface +} from "seaport-types/src/interfaces/ConsiderationInterface.sol"; + +import { AdvancedOrder } from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { UnavailableReason } from "seaport-sol/src/SpaceEnums.sol"; + +import { OrderStructureLib, State } from "./OrderStructureLib.sol"; + +/** + * @notice Helper library for determining order availability. + */ +library OrderAvailabilityLib { + using OrderStructureLib for AdvancedOrder; + + /** + * @notice Returns true if the order is available for fulfillment. + */ + function isAvailable( + AdvancedOrder memory order, + ConsiderationInterface seaport + ) internal view returns (bool) { + return unavailableReason(order, seaport) == UnavailableReason.AVAILABLE; + } + + /** + * @notice Returns the order's UnavailableReason. Available orders will + * return UnavailableReason.AVAILABLE to indicate that they are + * available for fulfillment. + */ + function unavailableReason( + AdvancedOrder memory order, + ConsiderationInterface seaport + ) internal view returns (UnavailableReason) { + if (order.parameters.endTime <= block.timestamp) { + return UnavailableReason.EXPIRED; + } + if (order.parameters.startTime > block.timestamp) { + return UnavailableReason.STARTS_IN_FUTURE; + } + if (order.getState(seaport) == State.CANCELLED) { + return UnavailableReason.CANCELLED; + } + if (order.getState(seaport) == State.FULLY_FILLED) { + return UnavailableReason.ALREADY_FULFILLED; + } + return UnavailableReason.AVAILABLE; + } + + /** + * @notice Return an array of UnavailableReasons for the provided orders. + */ + function unavailableReasons( + AdvancedOrder[] memory orders, + uint256 maximumFulfilled, + ConsiderationInterface seaport + ) internal view returns (UnavailableReason[] memory) { + UnavailableReason[] memory reasons = new UnavailableReason[]( + orders.length + ); + uint256 totalAvailable; + UnavailableReason reason; + for (uint256 i = 0; i < orders.length; i++) { + if (totalAvailable < maximumFulfilled) { + reason = unavailableReason(orders[i], seaport); + } else { + reason = UnavailableReason.MAX_FULFILLED_SATISFIED; + } + reasons[i] = reason; + if (reason == UnavailableReason.AVAILABLE) { + totalAvailable++; + } + } + return reasons; + } +} diff --git a/contracts/seaport/helpers/navigator/lib/OrderDetailsHelper.sol b/contracts/seaport/helpers/navigator/lib/OrderDetailsHelper.sol new file mode 100644 index 00000000..b2c108dc --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/OrderDetailsHelper.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { NavigatorDetailsLib } from "./NavigatorDetailsLib.sol"; + +import { NavigatorContext } from "./SeaportNavigatorTypes.sol"; + +import { HelperInterface } from "./HelperInterface.sol"; + +contract OrderDetailsHelper is HelperInterface { + using NavigatorDetailsLib for NavigatorContext; + + function prepare( + NavigatorContext memory context + ) public view returns (NavigatorContext memory) { + return context.withDetails(); + } +} diff --git a/contracts/seaport/helpers/navigator/lib/OrderStructureLib.sol b/contracts/seaport/helpers/navigator/lib/OrderStructureLib.sol new file mode 100644 index 00000000..736bcd9d --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/OrderStructureLib.sol @@ -0,0 +1,516 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { + AdvancedOrderLib, + ConsiderationItemLib, + MatchComponent, + MatchComponentType, + OfferItemLib, + OrderComponentsLib, + OrderLib, + OrderParametersLib +} from "seaport-sol/src/SeaportSol.sol"; + +import { + AdvancedOrder, + CriteriaResolver, + Execution, + Order, + OrderComponents, + OrderParameters, + ConsiderationItem, + OfferItem, + ReceivedItem, + SpentItem, + Fulfillment, + FulfillmentComponent +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { + BasicOrderRouteType, + BasicOrderType, + ItemType, + OrderType, + Side +} from "seaport-types/src/lib/ConsiderationEnums.sol"; + +import { + ConsiderationInterface +} from "seaport-types/src/interfaces/ConsiderationInterface.sol"; + +error TypeNotFound(); + +/** + * @dev The "structure" of the order. + * - BASIC: adheres to basic construction rules. + * - STANDARD: does not adhere to basic construction rules. + * - ADVANCED: requires criteria resolution, partial fulfillment, and/or + * extraData. + */ +enum Structure { + BASIC, + STANDARD, + ADVANCED +} + +/** + * @dev The "type" of the order. + * - OPEN: FULL_OPEN or PARTIAL_OPEN orders. + * - RESTRICTED: FULL_RESTRICTED or PARTIAL_RESTRICTED orders. + * - CONTRACT: CONTRACT orders + */ +enum Type { + OPEN, + RESTRICTED, + CONTRACT +} + +/** + * @dev The "family" of method that can fulfill the order. + * - SINGLE: methods that accept a single order. + * (fulfillOrder, fulfillAdvancedOrder, fulfillBasicOrder, + * fulfillBasicOrder_efficient_6GL6yc) + * - COMBINED: methods that accept multiple orders. + * (fulfillAvailableOrders, fulfillAvailableAdvancedOrders, matchOrders, + * matchAdvancedOrders, cancel, validate) + */ +enum Family { + SINGLE, + COMBINED +} + +/** + * @dev The "state" of the order. + * - UNUSED: New, not validated, cancelled, or partially/fully filled. + * - VALIDATED: Order has been validated, but not cancelled or filled. + * - CANCELLED: Order has been cancelled. + * - PARTIALLY_FILLED: Order is partially filled. + * - FULLY_FILLED: Order is fully filled. + */ +enum State { + UNUSED, + VALIDATED, + CANCELLED, + PARTIALLY_FILLED, + FULLY_FILLED +} + +/** + * @notice Helper library for classifying an order's structure. This is helpful + * for determining which fulfillment method to use. + */ +library OrderStructureLib { + using OrderLib for Order; + using OrderComponentsLib for OrderComponents; + using OrderParametersLib for OrderParameters; + using OfferItemLib for OfferItem[]; + using ConsiderationItemLib for ConsiderationItem[]; + using AdvancedOrderLib for AdvancedOrder; + using AdvancedOrderLib for AdvancedOrder[]; + + function getQuantity( + AdvancedOrder[] memory orders + ) internal pure returns (uint256) { + return orders.length; + } + + function getFamily( + AdvancedOrder[] memory orders + ) internal pure returns (Family) { + uint256 quantity = getQuantity(orders); + if (quantity > 1) { + return Family.COMBINED; + } + return Family.SINGLE; + } + + function getState( + AdvancedOrder memory order, + ConsiderationInterface seaport + ) internal view returns (State) { + uint256 counter = seaport.getCounter(order.parameters.offerer); + bytes32 orderHash = seaport.getOrderHash( + order.parameters.toOrderComponents(counter) + ); + ( + bool isValidated, + bool isCancelled, + uint256 totalFilled, + uint256 totalSize + ) = seaport.getOrderStatus(orderHash); + + if (totalFilled != 0 && totalSize != 0 && totalFilled == totalSize) + return State.FULLY_FILLED; + if (totalFilled != 0 && totalSize != 0) return State.PARTIALLY_FILLED; + if (isCancelled) return State.CANCELLED; + if (isValidated) return State.VALIDATED; + return State.UNUSED; + } + + function getType(AdvancedOrder memory order) internal pure returns (Type) { + OrderType orderType = order.parameters.orderType; + if ( + orderType == OrderType.FULL_OPEN || + orderType == OrderType.PARTIAL_OPEN + ) { + return Type.OPEN; + } else if ( + orderType == OrderType.FULL_RESTRICTED || + orderType == OrderType.PARTIAL_RESTRICTED + ) { + return Type.RESTRICTED; + } else if (orderType == OrderType.CONTRACT) { + return Type.CONTRACT; + } else { + revert TypeNotFound(); + } + } + + function getStructure( + AdvancedOrder memory order, + address seaport + ) internal view returns (Structure) { + // If the order has extraData, it's advanced + if (order.extraData.length > 0) return Structure.ADVANCED; + + // If the order has numerator or denominator, it's advanced + if (order.numerator != 0 || order.denominator != 0) { + if (order.numerator < order.denominator) { + return Structure.ADVANCED; + } + } + + (bool hasCriteria, bool hasNonzeroCriteria) = _checkCriteria(order); + bool isContractOrder = order.parameters.orderType == OrderType.CONTRACT; + + // If any non-contract item has criteria, it's advanced, + if (hasCriteria) { + // Unless it's a contract order + if (isContractOrder) { + // And the contract order's critera are all zero + if (hasNonzeroCriteria) { + return Structure.ADVANCED; + } + } else { + return Structure.ADVANCED; + } + } + + if (getBasicOrderTypeEligibility(order, seaport)) { + return Structure.BASIC; + } + + return Structure.STANDARD; + } + + function getStructure( + AdvancedOrder[] memory orders, + address seaport + ) internal view returns (Structure) { + if (orders.length == 1) { + return getStructure(orders[0], seaport); + } + + for (uint256 i; i < orders.length; i++) { + Structure structure = getStructure(orders[i], seaport); + if (structure == Structure.ADVANCED) { + return Structure.ADVANCED; + } + } + + return Structure.STANDARD; + } + + function getBasicOrderTypeEligibility( + AdvancedOrder memory order, + address seaport + ) internal view returns (bool) { + uint256 i; + ConsiderationItem[] memory consideration = order + .parameters + .consideration; + OfferItem[] memory offer = order.parameters.offer; + + // Order must contain exactly one offer item and one or more + // consideration items. + if (offer.length != 1) { + return false; + } + if ( + consideration.length == 0 || + order.parameters.totalOriginalConsiderationItems == 0 + ) { + return false; + } + + // The order cannot have a contract order type. + if (order.parameters.orderType == OrderType.CONTRACT) { + return false; + + // Note: the order type is combined with the “route” into a single + // BasicOrderType with a value between 0 and 23; there are 4 + // supported order types (full open, partial open, full restricted, + // partial restricted) and 6 routes (ETH ⇒ ERC721, ETH ⇒ ERC1155, + // ERC20 ⇒ ERC721, ERC20 ⇒ ERC1155, ERC721 ⇒ ERC20, ERC1155 ⇒ ERC20) + } + + // Order cannot specify a partial fraction to fill. + if (order.denominator > 1 && (order.numerator < order.denominator)) { + return false; + } + + // Order cannot be partially filled. + ConsiderationInterface seaportInterface = ConsiderationInterface( + seaport + ); + uint256 counter = seaportInterface.getCounter(order.parameters.offerer); + OrderComponents memory orderComponents = order + .parameters + .toOrderComponents(counter); + bytes32 orderHash = seaportInterface.getOrderHash(orderComponents); + (, , uint256 totalFilled, uint256 totalSize) = seaportInterface + .getOrderStatus(orderHash); + + if (totalFilled != totalSize) { + return false; + } + + // Order cannot contain any criteria-based items. + for (i = 0; i < consideration.length; ++i) { + if ( + consideration[i].itemType == ItemType.ERC721_WITH_CRITERIA || + consideration[i].itemType == ItemType.ERC1155_WITH_CRITERIA + ) { + return false; + } + } + + if ( + offer[0].itemType == ItemType.ERC721_WITH_CRITERIA || + offer[0].itemType == ItemType.ERC1155_WITH_CRITERIA + ) { + return false; + } + + // Order cannot contain any extraData. + if (order.extraData.length != 0) { + return false; + } + + // Order must contain exactly one NFT item. + uint256 totalNFTs; + if ( + offer[0].itemType == ItemType.ERC721 || + offer[0].itemType == ItemType.ERC1155 + ) { + totalNFTs += 1; + } + for (i = 0; i < consideration.length; ++i) { + if ( + consideration[i].itemType == ItemType.ERC721 || + consideration[i].itemType == ItemType.ERC1155 + ) { + totalNFTs += 1; + } + } + + if (totalNFTs != 1) { + return false; + } + + // The one NFT must appear either as the offer item or as the first + // consideration item. + if ( + offer[0].itemType != ItemType.ERC721 && + offer[0].itemType != ItemType.ERC1155 && + consideration[0].itemType != ItemType.ERC721 && + consideration[0].itemType != ItemType.ERC1155 + ) { + return false; + } + + // All items that are not the NFT must share the same item type and + // token (and the identifier must be zero). + if ( + offer[0].itemType == ItemType.ERC721 || + offer[0].itemType == ItemType.ERC1155 + ) { + ItemType expectedItemType = consideration[0].itemType; + address expectedToken = consideration[0].token; + + for (i = 0; i < consideration.length; ++i) { + if (consideration[i].itemType != expectedItemType) { + return false; + } + + if (consideration[i].token != expectedToken) { + return false; + } + + if (consideration[i].identifierOrCriteria != 0) { + return false; + } + } + } + + if ( + consideration[0].itemType == ItemType.ERC721 || + consideration[0].itemType == ItemType.ERC1155 + ) { + if (consideration.length >= 2) { + ItemType expectedItemType = offer[0].itemType; + address expectedToken = offer[0].token; + for (i = 1; i < consideration.length; ++i) { + if (consideration[i].itemType != expectedItemType) { + return false; + } + + if (consideration[i].token != expectedToken) { + return false; + } + + if (consideration[i].identifierOrCriteria != 0) { + return false; + } + } + } + } + + // The offerer must be the recipient of the first consideration item. + if (consideration[0].recipient != order.parameters.offerer) { + return false; + } + + // If the NFT is the first consideration item, the sum of the amounts of + // all the other consideration items cannot exceed the amount of the + // offer item. + if ( + consideration[0].itemType == ItemType.ERC721 || + consideration[0].itemType == ItemType.ERC1155 + ) { + uint256 totalConsiderationAmount; + for (i = 1; i < consideration.length; ++i) { + totalConsiderationAmount += consideration[i].startAmount; + } + + if (totalConsiderationAmount > offer[0].startAmount) { + return false; + } + + // Note: these cases represent a “bid” for an NFT, and the non-NFT + // consideration items (i.e. the “payment tokens”) are sent directly + // from the offerer to each recipient; this means that the fulfiller + // accepting the bid does not need to have approval set for the + // payment tokens. + } + + // All items must have startAmount == endAmount + if (offer[0].startAmount != offer[0].endAmount) { + return false; + } + for (i = 0; i < consideration.length; ++i) { + if (consideration[i].startAmount != consideration[i].endAmount) { + return false; + } + } + + // The offer item cannot have a native token type. + if (offer[0].itemType == ItemType.NATIVE) { + return false; + } + + return true; + } + + function getBasicOrderType( + AdvancedOrder memory order + ) internal pure returns (BasicOrderType basicOrderType) { + // Get the route (ETH ⇒ ERC721, etc.) for the order. + BasicOrderRouteType route = getBasicOrderRouteType(order); + + // Get the order type (restricted, etc.) for the order. + OrderType orderType = order.parameters.orderType; + + // Multiply the route by 4 and add the order type to get the + // BasicOrderType. + assembly { + basicOrderType := add(orderType, mul(route, 4)) + } + } + + function getBasicOrderRouteType( + AdvancedOrder memory order + ) internal pure returns (BasicOrderRouteType route) { + // Get the route (ETH ⇒ ERC721, etc.) for the order. + ItemType providingItemType = order.parameters.consideration[0].itemType; + ItemType offeredItemType = order.parameters.offer[0].itemType; + + if (providingItemType == ItemType.NATIVE) { + if (offeredItemType == ItemType.ERC721) { + route = BasicOrderRouteType.ETH_TO_ERC721; + } else if (offeredItemType == ItemType.ERC1155) { + route = BasicOrderRouteType.ETH_TO_ERC1155; + } + } else if (providingItemType == ItemType.ERC20) { + if (offeredItemType == ItemType.ERC721) { + route = BasicOrderRouteType.ERC20_TO_ERC721; + } else if (offeredItemType == ItemType.ERC1155) { + route = BasicOrderRouteType.ERC20_TO_ERC1155; + } + } else if (providingItemType == ItemType.ERC721) { + if (offeredItemType == ItemType.ERC20) { + route = BasicOrderRouteType.ERC721_TO_ERC20; + } + } else if (providingItemType == ItemType.ERC1155) { + if (offeredItemType == ItemType.ERC20) { + route = BasicOrderRouteType.ERC1155_TO_ERC20; + } + } + } + + /** + * @dev Check all offer and consideration items for criteria. + * + * @param order The advanced order. + * + * @return hasCriteria Whether any offer or consideration item has + * criteria. + * @return hasNonzeroCriteria Whether any offer or consideration item has + * nonzero criteria. + */ + function _checkCriteria( + AdvancedOrder memory order + ) internal pure returns (bool hasCriteria, bool hasNonzeroCriteria) { + // Check if any offer item has criteria + OfferItem[] memory offer = order.parameters.offer; + for (uint256 i; i < offer.length; ++i) { + OfferItem memory offerItem = offer[i]; + ItemType itemType = offerItem.itemType; + hasCriteria = (itemType == ItemType.ERC721_WITH_CRITERIA || + itemType == ItemType.ERC1155_WITH_CRITERIA); + if (hasCriteria) { + return (hasCriteria, offerItem.identifierOrCriteria != 0); + } + } + + // Check if any consideration item has criteria + ConsiderationItem[] memory consideration = order + .parameters + .consideration; + for (uint256 i; i < consideration.length; ++i) { + ConsiderationItem memory considerationItem = consideration[i]; + ItemType itemType = considerationItem.itemType; + hasCriteria = (itemType == ItemType.ERC721_WITH_CRITERIA || + itemType == ItemType.ERC1155_WITH_CRITERIA); + if (hasCriteria) { + return ( + hasCriteria, + considerationItem.identifierOrCriteria != 0 + ); + } + } + + return (false, false); + } +} diff --git a/contracts/seaport/helpers/navigator/lib/RequestValidator.sol b/contracts/seaport/helpers/navigator/lib/RequestValidator.sol new file mode 100644 index 00000000..a72b0bf2 --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/RequestValidator.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { + NavigatorRequestValidatorLib +} from "./NavigatorRequestValidatorLib.sol"; + +import { + NavigatorContext, + NavigatorResponse +} from "./SeaportNavigatorTypes.sol"; + +import { HelperInterface } from "./HelperInterface.sol"; + +contract RequestValidator is HelperInterface { + using NavigatorRequestValidatorLib for NavigatorContext; + + function prepare( + NavigatorContext memory context + ) public pure returns (NavigatorContext memory) { + return context.validate(); + } +} diff --git a/contracts/seaport/helpers/navigator/lib/SeaportNavigatorInterface.sol b/contracts/seaport/helpers/navigator/lib/SeaportNavigatorInterface.sol new file mode 100644 index 00000000..013e2d5d --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/SeaportNavigatorInterface.sol @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { + AdvancedOrder, + CriteriaResolver +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { + NavigatorRequest, + NavigatorResponse +} from "./SeaportNavigatorTypes.sol"; + +interface SeaportNavigatorInterface { + function prepare( + NavigatorRequest memory request + ) external view returns (NavigatorResponse memory); + + /** + * @notice Generate a criteria merkle root from an array of `tokenIds`. Use + * this helper to construct an order item's `identifierOrCriteria`. + * + * @param tokenIds An array of integer token IDs to be converted to a merkle + * root. + * + * @return The bytes32 merkle root of a criteria tree containing the given + * token IDs. + */ + function criteriaRoot( + uint256[] memory tokenIds + ) external pure returns (bytes32); + + /** + * @notice Generate a criteria merkle proof that `id` is a member of + * `tokenIds`. Reverts if `id` is not a member of `tokenIds`. Use + * this helper to construct proof data for criteria resolvers. + * + * @param tokenIds An array of integer token IDs. + * @param id The integer token ID to generate a proof for. + * + * @return Merkle proof that the given token ID is amember of the criteria + * tree containing the given token IDs. + */ + function criteriaProof( + uint256[] memory tokenIds, + uint256 id + ) external pure returns (bytes32[] memory); +} diff --git a/contracts/seaport/helpers/navigator/lib/SeaportNavigatorTypes.sol b/contracts/seaport/helpers/navigator/lib/SeaportNavigatorTypes.sol new file mode 100644 index 00000000..2314f8e3 --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/SeaportNavigatorTypes.sol @@ -0,0 +1,171 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { + SeaportValidatorInterface, + ErrorsAndWarnings +} from "../../order-validator/SeaportValidator.sol"; + +import { + ConsiderationInterface +} from "seaport-types/src/interfaces/ConsiderationInterface.sol"; + +import { + AdvancedOrder, + CriteriaResolver, + Execution, + Order, + OrderComponents, + OrderParameters, + ConsiderationItem, + OfferItem, + ReceivedItem, + SpentItem, + Fulfillment, + FulfillmentComponent +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { + ItemType, + Side, + OrderType +} from "seaport-types/src/lib/ConsiderationEnums.sol"; + +import { + MatchComponent +} from "seaport-sol/src/lib/types/MatchComponentType.sol"; + +import { + FulfillmentDetails, + OrderDetails +} from "seaport-sol/src/fulfillments/lib/Structs.sol"; + +import { + FulfillmentStrategy +} from "seaport-sol/src/fulfillments/lib/FulfillmentLib.sol"; + +struct NavigatorAdvancedOrder { + NavigatorOrderParameters parameters; + uint120 numerator; + uint120 denominator; + bytes signature; + bytes extraData; +} + +struct NavigatorOrderParameters { + address offerer; + address zone; + NavigatorOfferItem[] offer; + NavigatorConsiderationItem[] consideration; + OrderType orderType; + uint256 startTime; + uint256 endTime; + bytes32 zoneHash; + uint256 salt; + bytes32 conduitKey; + uint256 totalOriginalConsiderationItems; +} + +struct NavigatorOfferItem { + ItemType itemType; + address token; + uint256 identifier; + uint256 startAmount; + uint256 endAmount; + uint256[] candidateIdentifiers; +} + +struct NavigatorConsiderationItem { + ItemType itemType; + address token; + uint256 identifier; + uint256 startAmount; + uint256 endAmount; + address payable recipient; + uint256[] candidateIdentifiers; +} + +/** + * @dev Context struct for NavigatorContextLib. Includes context information + * necessary for fulfillment, like the caller and recipient addresses, + * and Seaport and SeaportValidator interfaces. + */ +struct NavigatorContext { + NavigatorRequest request; + NavigatorResponse response; +} + +struct NavigatorRequest { + ConsiderationInterface seaport; + SeaportValidatorInterface validator; + NavigatorAdvancedOrder[] orders; + address caller; + address recipient; + uint256 nativeTokensSupplied; + uint256 maximumFulfilled; + bytes32 fulfillerConduitKey; + uint256 seed; + FulfillmentStrategy fulfillmentStrategy; + CriteriaResolver[] criteriaResolvers; + bool preferMatch; +} + +struct NavigatorResponse { + /** + * @dev The provided orders. If the caller provides explicit criteria + * resolvers, the orders will not be modified. If the caller provides + * criteria constraints, the returned offer/consideration items will be + * updated with calculated merkle roots as their `identifierOrCriteria` + */ + AdvancedOrder[] orders; + /** + * @dev The provided or calculated criteria resolvers. If the caller + * provides criteria constraints rather than explicit criteria + * resolvers, criteria resolvers and merkle proofs will be calculated + * based on provided criteria constraints. + */ + CriteriaResolver[] criteriaResolvers; + /** + * @dev Human-readable name of the suggested Seaport fulfillment method for + * the provided orders. + */ + string suggestedActionName; + /** + * @dev Encoded calldata for the suggested Seaport fulfillment method, + * provided orders, and context args. + */ + bytes suggestedCallData; + /** + * @dev Array of errors and warnings returned by SeaportValidator for the + * provided orders, by order index in the orders array. + */ + ErrorsAndWarnings[] validationErrors; + /** + * @dev Calculated OrderDetails structs for the provided orders, by order + * index. Includes offerer, conduit key, spent and received items, + * order hash, and unavailable reason. + */ + OrderDetails[] orderDetails; + /** + * @dev Calculated fulfillment components and combined Fullfiilments. + */ + FulfillmentComponent[][] offerFulfillments; + FulfillmentComponent[][] considerationFulfillments; + Fulfillment[] fulfillments; + /** + * @dev Calculated match components for matchable orders. + */ + MatchComponent[] unspentOfferComponents; + MatchComponent[] unmetConsiderationComponents; + /** + * @dev Calculated explicit and implicit executions. + */ + Execution[] explicitExecutions; + Execution[] implicitExecutions; + Execution[] implicitExecutionsPre; + Execution[] implicitExecutionsPost; + /** + * @dev Quantity of native tokens returned to caller. + */ + uint256 nativeTokensReturned; +} diff --git a/contracts/seaport/helpers/navigator/lib/SuggestedActionHelper.sol b/contracts/seaport/helpers/navigator/lib/SuggestedActionHelper.sol new file mode 100644 index 00000000..858ce6c3 --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/SuggestedActionHelper.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { NavigatorSuggestedActionLib } from "./NavigatorSuggestedActionLib.sol"; + +import { NavigatorContext } from "./SeaportNavigatorTypes.sol"; + +import { HelperInterface } from "./HelperInterface.sol"; + +contract SuggestedActionHelper is HelperInterface { + using NavigatorSuggestedActionLib for NavigatorContext; + + function prepare( + NavigatorContext memory context + ) public view returns (NavigatorContext memory) { + return context.withSuggestedAction(); + } +} diff --git a/contracts/seaport/helpers/navigator/lib/ValidatorHelper.sol b/contracts/seaport/helpers/navigator/lib/ValidatorHelper.sol new file mode 100644 index 00000000..5a3d813c --- /dev/null +++ b/contracts/seaport/helpers/navigator/lib/ValidatorHelper.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { + NavigatorSeaportValidatorLib +} from "./NavigatorSeaportValidatorLib.sol"; + +import { NavigatorContext } from "./SeaportNavigatorTypes.sol"; + +import { HelperInterface } from "./HelperInterface.sol"; + +import { Order } from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { + SeaportValidatorInterface +} from "../../order-validator/SeaportValidator.sol"; + +contract ValidatorHelper is HelperInterface { + using NavigatorSeaportValidatorLib for NavigatorContext; + + function prepare( + NavigatorContext memory context + ) public view returns (NavigatorContext memory) { + return context.withErrors(); + } +} diff --git a/contracts/seaport/helpers/order-validator/SeaportValidator.sol b/contracts/seaport/helpers/order-validator/SeaportValidator.sol new file mode 100644 index 00000000..a4c7910f --- /dev/null +++ b/contracts/seaport/helpers/order-validator/SeaportValidator.sol @@ -0,0 +1,1141 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { ItemType } from "seaport-types/src/lib/ConsiderationEnums.sol"; +import { + Order, + OrderParameters, + BasicOrderParameters, + OfferItem, + ConsiderationItem, + Schema, + ZoneParameters +} from "seaport-types/src/lib/ConsiderationStructs.sol"; +import { ConsiderationTypeHashes } from "./lib/ConsiderationTypeHashes.sol"; +import { + ConsiderationInterface +} from "seaport-types/src/interfaces/ConsiderationInterface.sol"; +import { + ConduitControllerInterface +} from "seaport-types/src/interfaces/ConduitControllerInterface.sol"; +import { + ContractOffererInterface +} from "seaport-types/src/interfaces/ContractOffererInterface.sol"; +import { ZoneInterface } from "seaport-types/src/interfaces/ZoneInterface.sol"; +import { + GettersAndDerivers +} from "seaport-core/src/lib/GettersAndDerivers.sol"; +import { SeaportValidatorInterface } from "./lib/SeaportValidatorInterface.sol"; +import { ZoneInterface } from "seaport-types/src/interfaces/ZoneInterface.sol"; +import { + ERC20Interface, + ERC721Interface, + ERC1155Interface +} from "seaport-types/src/interfaces/AbridgedTokenInterfaces.sol"; +import { IERC165 } from "@openzeppelin/contracts@seaport/interfaces/IERC165.sol"; +import { IERC2981 } from "@openzeppelin/contracts/interfaces/IERC2981.sol"; +import { + ErrorsAndWarnings, + ErrorsAndWarningsLib +} from "./lib/ErrorsAndWarnings.sol"; +import { SafeStaticCall } from "./lib/SafeStaticCall.sol"; +import { + IssueParser, + ValidationConfiguration, + TimeIssue, + StatusIssue, + OfferIssue, + ContractOffererIssue, + ConsiderationIssue, + PrimaryFeeIssue, + ERC721Issue, + ERC1155Issue, + ERC20Issue, + NativeIssue, + ZoneIssue, + ConduitIssue, + CreatorFeeIssue, + SignatureIssue, + GenericIssue, + ConsiderationItemConfiguration +} from "./lib/SeaportValidatorTypes.sol"; +import { Verifiers } from "seaport-core/src/lib/Verifiers.sol"; +import { ReadOnlyOrderValidator } from "./lib/ReadOnlyOrderValidator.sol"; +import { SeaportValidatorHelper } from "./lib/SeaportValidatorHelper.sol"; + +/** + * @title SeaportValidator + * @author OpenSea Protocol Team + * @notice SeaportValidator provides advanced validation to seaport orders. + */ +contract SeaportValidator is + SeaportValidatorInterface, + ConsiderationTypeHashes +{ + using ErrorsAndWarningsLib for ErrorsAndWarnings; + using SafeStaticCall for address; + using IssueParser for *; + + /// @notice Cross-chain conduit controller Address + ConduitControllerInterface private immutable _conduitController; + + SeaportValidatorHelper private immutable _helper; + + ReadOnlyOrderValidator private immutable _readOnlyOrderValidator; + + bytes4 public constant ERC20_INTERFACE_ID = 0x36372b07; + + bytes4 public constant ERC721_INTERFACE_ID = 0x80ac58cd; + + bytes4 public constant ERC1155_INTERFACE_ID = 0xd9b67a26; + + bytes4 public constant CONTRACT_OFFERER_INTERFACE_ID = 0x1be900b1; + + bytes4 public constant ZONE_INTERFACE_ID = 0x3839be19; + + constructor( + address readOnlyOrderValidatorAddress, + address seaportValidatorHelperAddress, + address conduitControllerAddress + ) { + _readOnlyOrderValidator = ReadOnlyOrderValidator( + readOnlyOrderValidatorAddress + ); + _helper = SeaportValidatorHelper(seaportValidatorHelperAddress); + _conduitController = ConduitControllerInterface( + conduitControllerAddress + ); + } + + /** + * @notice Conduct a comprehensive validation of the given order. + * `isValidOrder` validates simple orders that adhere to a set of rules defined below: + * - The order is either a listing or an offer order (one NFT to buy or one NFT to sell). + * - The first consideration is the primary consideration. + * - The order pays up to two fees in the fungible token currency. First fee is primary fee, second is creator fee. + * - In private orders, the last consideration specifies a recipient for the offer item. + * - Offer items must be owned and properly approved by the offerer. + * - There must be one offer item + * - Consideration items must exist. + * - The signature must be valid, or the order must be already validated on chain + * @param order The order to validate. + * @return errorsAndWarnings The errors and warnings found in the order. + */ + function isValidOrder( + Order calldata order, + address seaportAddress + ) external view returns (ErrorsAndWarnings memory errorsAndWarnings) { + return + isValidOrderWithConfiguration( + ValidationConfiguration( + seaportAddress, + address(0), + 0, + false, + false, + 30 minutes, + 26 weeks + ), + order + ); + } + + /** + * @notice Same as `isValidOrder` but allows for more configuration related to fee validation. + * If `skipStrictValidation` is set order logic validation is not carried out: fees are not + * checked and there may be more than one offer item as well as any number of consideration items. + */ + function isValidOrderWithConfiguration( + ValidationConfiguration memory validationConfiguration, + Order memory order + ) public view returns (ErrorsAndWarnings memory errorsAndWarnings) { + errorsAndWarnings = ErrorsAndWarnings(new uint16[](0), new uint16[](0)); + + // Concatenates errorsAndWarnings with the returned errorsAndWarnings + errorsAndWarnings.concat( + validateTime( + order.parameters, + validationConfiguration.shortOrderDuration, + validationConfiguration.distantOrderExpiration + ) + ); + errorsAndWarnings.concat( + validateOrderStatus( + order.parameters, + validationConfiguration.seaport + ) + ); + errorsAndWarnings.concat( + validateOfferItems( + order.parameters, + validationConfiguration.seaport + ) + ); + errorsAndWarnings.concat( + validateConsiderationItems( + order.parameters, + validationConfiguration.seaport + ) + ); + errorsAndWarnings.concat(isValidZone(order.parameters)); + errorsAndWarnings.concat( + validateSignature(order, validationConfiguration.seaport) + ); + + // Skip strict validation if requested + if (!validationConfiguration.skipStrictValidation) { + errorsAndWarnings.concat( + validateStrictLogic( + order.parameters, + validationConfiguration.primaryFeeRecipient, + validationConfiguration.primaryFeeBips, + validationConfiguration.checkCreatorFee + ) + ); + } + } + + /** + * @notice Strict validation operates under tight assumptions. It validates primary + * fee, creator fee, private sale consideration, and overall order format. + * @dev Only checks first fee recipient provided by CreatorFeeEngine. + * Order of consideration items must be as follows: + * 1. Primary consideration + * 2. Primary fee + * 3. Creator fee + * 4. Private sale consideration + * @param orderParameters The parameters for the order to validate. + * @param primaryFeeRecipient The primary fee recipient. Set to null address for no primary fee. + * @param primaryFeeBips The primary fee in BIPs. + * @param checkCreatorFee Should check for creator fee. If true, creator fee must be present as + * according to creator fee engine. If false, must not have creator fee. + * @return errorsAndWarnings The errors and warnings. + */ + function validateStrictLogic( + OrderParameters memory orderParameters, + address primaryFeeRecipient, + uint256 primaryFeeBips, + bool checkCreatorFee + ) public view returns (ErrorsAndWarnings memory errorsAndWarnings) { + return + _helper.validateStrictLogic( + orderParameters, + primaryFeeRecipient, + primaryFeeBips, + checkCreatorFee + ); + } + + /** + * @notice Checks if a conduit key is valid. + * @param conduitKey The conduit key to check. + * @return errorsAndWarnings The errors and warnings + */ + function isValidConduit( + bytes32 conduitKey, + address seaportAddress + ) external view returns (ErrorsAndWarnings memory errorsAndWarnings) { + (, errorsAndWarnings) = getApprovalAddress(conduitKey, seaportAddress); + } + + /** + * @notice Checks if the zone of an order is set and implements the EIP165 + * zone interface + * @dev To validate the zone call for an order, see validateOrderWithZone + * @param orderParameters The order parameters to check. + * @return errorsAndWarnings The errors and warnings + */ + function isValidZone( + OrderParameters memory orderParameters + ) public view returns (ErrorsAndWarnings memory errorsAndWarnings) { + errorsAndWarnings = ErrorsAndWarnings(new uint16[](0), new uint16[](0)); + + // If not restricted, zone isn't checked + if ( + uint8(orderParameters.orderType) < 2 || + uint8(orderParameters.orderType) == 4 + ) { + return errorsAndWarnings; + } + + if (orderParameters.zone == address(0)) { + // Zone is not set + errorsAndWarnings.addError(ZoneIssue.NotSet.parseInt()); + return errorsAndWarnings; + } + + // Warn if zone is an EOA + if (address(orderParameters.zone).code.length == 0) { + errorsAndWarnings.addWarning(ZoneIssue.EOAZone.parseInt()); + return errorsAndWarnings; + } + + // Check the EIP165 zone interface + if (!checkInterface(orderParameters.zone, ZONE_INTERFACE_ID)) { + errorsAndWarnings.addWarning(ZoneIssue.InvalidZone.parseInt()); + return errorsAndWarnings; + } + + // Check if the zone implements SIP-5 + try ZoneInterface(orderParameters.zone).getSeaportMetadata() {} catch { + errorsAndWarnings.addWarning(ZoneIssue.InvalidZone.parseInt()); + } + } + + /** + * @notice Gets the approval address for the given conduit key + * @param conduitKey Conduit key to get approval address for + * @param seaportAddress The Seaport address + * @return approvalAddress The address to use for approvals + * @return errorsAndWarnings An ErrorsAndWarnings structs with results + */ + function getApprovalAddress( + bytes32 conduitKey, + address seaportAddress + ) + public + view + returns (address, ErrorsAndWarnings memory errorsAndWarnings) + { + errorsAndWarnings = ErrorsAndWarnings(new uint16[](0), new uint16[](0)); + + // Zero conduit key corresponds to seaport + if (conduitKey == 0) return (seaportAddress, errorsAndWarnings); + + // Pull conduit info from conduitController + (address conduitAddress, bool exists) = _conduitController.getConduit( + conduitKey + ); + + // Conduit does not exist + if (!exists) { + errorsAndWarnings.addError(ConduitIssue.KeyInvalid.parseInt()); + conduitAddress = address(0); // Don't return invalid conduit + } + + // Approval address does not have Seaport added as a channel + if ( + exists && + !_conduitController.getChannelStatus(conduitAddress, seaportAddress) + ) { + errorsAndWarnings.addError( + ConduitIssue.MissingSeaportChannel.parseInt() + ); + } + + return (conduitAddress, errorsAndWarnings); + } + + /** + * @notice Validates the signature for the order using the offerer's current counter + * @dev Will also check if order is validated on chain. + */ + function validateSignature( + Order memory order, + address seaportAddress + ) public view returns (ErrorsAndWarnings memory errorsAndWarnings) { + // Pull current counter from seaport + uint256 currentCounter = ConsiderationInterface(seaportAddress) + .getCounter(order.parameters.offerer); + + return + validateSignatureWithCounter(order, currentCounter, seaportAddress); + } + + /** + * @notice Validates the signature for the order using the given counter + * @dev Will also check if order is validated on chain. + */ + function validateSignatureWithCounter( + Order memory order, + uint256 counter, + address seaportAddress + ) public view returns (ErrorsAndWarnings memory errorsAndWarnings) { + errorsAndWarnings = ErrorsAndWarnings(new uint16[](0), new uint16[](0)); + + // Typecast Seaport address to ConsiderationInterface + ConsiderationInterface seaport = ConsiderationInterface(seaportAddress); + + // Contract orders do not have signatures + if (uint8(order.parameters.orderType) == 4) { + errorsAndWarnings.addWarning( + SignatureIssue.ContractOrder.parseInt() + ); + } + + // Get current counter for context + uint256 currentCounter = seaport.getCounter(order.parameters.offerer); + + if (currentCounter > counter) { + // Counter strictly increases + errorsAndWarnings.addError(SignatureIssue.LowCounter.parseInt()); + return errorsAndWarnings; + } else if (currentCounter < counter) { + // Counter is incremented by random large number + errorsAndWarnings.addError(SignatureIssue.HighCounter.parseInt()); + return errorsAndWarnings; + } + + bytes32 orderHash = _deriveOrderHash(order.parameters, counter); + + // Check if order is validated on chain + (bool isValid, , , ) = seaport.getOrderStatus(orderHash); + + if (isValid) { + // Shortcut success, valid on chain + return errorsAndWarnings; + } + + // Create memory array to pass into validate + Order[] memory orderArray = new Order[](1); + + // Store order in array + orderArray[0] = order; + + try + // Call validate on Seaport + _readOnlyOrderValidator.canValidate(seaportAddress, orderArray) + returns (bool success) { + if (!success) { + // Call was unsuccessful, so signature is invalid + errorsAndWarnings.addError(SignatureIssue.Invalid.parseInt()); + } + } catch { + if ( + order.parameters.consideration.length != + order.parameters.totalOriginalConsiderationItems + ) { + // May help diagnose signature issues + errorsAndWarnings.addWarning( + SignatureIssue.OriginalConsiderationItems.parseInt() + ); + } + // Call reverted, so signature is invalid + errorsAndWarnings.addError(SignatureIssue.Invalid.parseInt()); + } + } + + /** + * @notice Check that a contract offerer implements the EIP165 + * contract offerer interface + * @param contractOfferer The address of the contract offerer + * @return errorsAndWarnings The errors and warnings + */ + function validateContractOfferer( + address contractOfferer + ) public view returns (ErrorsAndWarnings memory errorsAndWarnings) { + errorsAndWarnings = ErrorsAndWarnings(new uint16[](0), new uint16[](0)); + + // Check the EIP165 contract offerer interface + if (!checkInterface(contractOfferer, CONTRACT_OFFERER_INTERFACE_ID)) { + errorsAndWarnings.addWarning( + ContractOffererIssue.InvalidContractOfferer.parseInt() + ); + } + + // Check if the contract offerer implements SIP-5 + try + ContractOffererInterface(contractOfferer).getSeaportMetadata() + {} catch { + errorsAndWarnings.addWarning( + ContractOffererIssue.InvalidContractOfferer.parseInt() + ); + } + + return errorsAndWarnings; + } + + /** + * @notice Check the time validity of an order + * @param orderParameters The parameters for the order to validate + * @param shortOrderDuration The duration of which an order is considered short + * @param distantOrderExpiration Distant order expiration delta in seconds. + * @return errorsAndWarnings The errors and warnings + */ + function validateTime( + OrderParameters memory orderParameters, + uint256 shortOrderDuration, + uint256 distantOrderExpiration + ) public view returns (ErrorsAndWarnings memory errorsAndWarnings) { + errorsAndWarnings = ErrorsAndWarnings(new uint16[](0), new uint16[](0)); + + if (orderParameters.endTime <= orderParameters.startTime) { + // Order duration is zero + errorsAndWarnings.addError( + TimeIssue.EndTimeBeforeStartTime.parseInt() + ); + return errorsAndWarnings; + } + + if (orderParameters.endTime < block.timestamp) { + // Order is expired + errorsAndWarnings.addError(TimeIssue.Expired.parseInt()); + return errorsAndWarnings; + } else if ( + orderParameters.endTime > block.timestamp + distantOrderExpiration + ) { + // Order expires in a long time + errorsAndWarnings.addWarning( + TimeIssue.DistantExpiration.parseInt() + ); + } + + if (orderParameters.startTime > block.timestamp) { + // Order is not active + errorsAndWarnings.addWarning(TimeIssue.NotActive.parseInt()); + } + + if ( + orderParameters.endTime - + ( + orderParameters.startTime > block.timestamp + ? orderParameters.startTime + : block.timestamp + ) < + shortOrderDuration + ) { + // Order has a short duration + errorsAndWarnings.addWarning(TimeIssue.ShortOrder.parseInt()); + } + } + + /** + * @notice Validate the status of an order + * @param orderParameters The parameters for the order to validate + * @return errorsAndWarnings The errors and warnings + */ + function validateOrderStatus( + OrderParameters memory orderParameters, + address seaportAddress + ) public view returns (ErrorsAndWarnings memory errorsAndWarnings) { + errorsAndWarnings = ErrorsAndWarnings(new uint16[](0), new uint16[](0)); + + // Typecast Seaport address to ConsiderationInterface + ConsiderationInterface seaport = ConsiderationInterface(seaportAddress); + + // Cannot validate status of contract order + if (uint8(orderParameters.orderType) == 4) { + errorsAndWarnings.addWarning(StatusIssue.ContractOrder.parseInt()); + } + + // Pull current counter from seaport + uint256 currentOffererCounter = seaport.getCounter( + orderParameters.offerer + ); + // Derive order hash using orderParameters and currentOffererCounter + bytes32 orderHash = _deriveOrderHash( + orderParameters, + currentOffererCounter + ); + // Get order status from seaport + (, bool isCancelled, uint256 totalFilled, uint256 totalSize) = seaport + .getOrderStatus(orderHash); + + if (isCancelled) { + // Order is cancelled + errorsAndWarnings.addError(StatusIssue.Cancelled.parseInt()); + } + + if (totalSize > 0 && totalFilled == totalSize) { + // Order is fully filled + errorsAndWarnings.addError(StatusIssue.FullyFilled.parseInt()); + } + } + + /** + * @notice Validate all offer items for an order. Ensures that + * offerer has sufficient balance and approval for each item. + * @dev Amounts are not summed and verified, just the individual amounts. + * @param orderParameters The parameters for the order to validate + * @return errorsAndWarnings The errors and warnings + */ + function validateOfferItems( + OrderParameters memory orderParameters, + address seaportAddress + ) public view returns (ErrorsAndWarnings memory errorsAndWarnings) { + errorsAndWarnings = ErrorsAndWarnings(new uint16[](0), new uint16[](0)); + + // Iterate over each offer item and validate it + for (uint256 i = 0; i < orderParameters.offer.length; i++) { + errorsAndWarnings.concat( + validateOfferItem(orderParameters, i, seaportAddress) + ); + + // Check for duplicate offer item + OfferItem memory offerItem1 = orderParameters.offer[i]; + + for (uint256 j = i + 1; j < orderParameters.offer.length; j++) { + // Iterate over each remaining offer item + // (previous items already check with this item) + OfferItem memory offerItem2 = orderParameters.offer[j]; + + // Check if token and id are the same + if ( + offerItem1.token == offerItem2.token && + offerItem1.identifierOrCriteria == + offerItem2.identifierOrCriteria + ) { + errorsAndWarnings.addError( + OfferIssue.DuplicateItem.parseInt() + ); + } + } + } + + // You must have an offer item + if (orderParameters.offer.length == 0) { + errorsAndWarnings.addWarning(OfferIssue.ZeroItems.parseInt()); + } + + // Warning if there is more than one offer item + if (orderParameters.offer.length > 1) { + errorsAndWarnings.addWarning(OfferIssue.MoreThanOneItem.parseInt()); + } + } + + /** + * @notice Validates an offer item + * @param orderParameters The parameters for the order to validate + * @param offerItemIndex The index of the offerItem in offer array to validate + * @return errorsAndWarnings An ErrorsAndWarnings structs with results + */ + function validateOfferItem( + OrderParameters memory orderParameters, + uint256 offerItemIndex, + address seaportAddress + ) public view returns (ErrorsAndWarnings memory errorsAndWarnings) { + // First validate the parameters (correct amount, contract, etc) + errorsAndWarnings = validateOfferItemParameters( + orderParameters, + offerItemIndex, + seaportAddress + ); + if (errorsAndWarnings.hasErrors()) { + // Only validate approvals and balances if parameters are valid + return errorsAndWarnings; + } + + // Validate approvals and balances for the offer item + errorsAndWarnings.concat( + validateOfferItemApprovalAndBalance( + orderParameters, + offerItemIndex, + seaportAddress + ) + ); + } + + /** + * @notice Validates the OfferItem parameters. This includes token contract validation + * @dev OfferItems with criteria are currently not allowed + * @param orderParameters The parameters for the order to validate + * @param offerItemIndex The index of the offerItem in offer array to validate + * @return errorsAndWarnings An ErrorsAndWarnings structs with results + */ + function validateOfferItemParameters( + OrderParameters memory orderParameters, + uint256 offerItemIndex, + address seaportAddress + ) public view returns (ErrorsAndWarnings memory errorsAndWarnings) { + errorsAndWarnings = ErrorsAndWarnings(new uint16[](0), new uint16[](0)); + + // Get the offer item at offerItemIndex + OfferItem memory offerItem = orderParameters.offer[offerItemIndex]; + + // Check if start amount and end amount are zero + if (offerItem.startAmount == 0 && offerItem.endAmount == 0) { + errorsAndWarnings.addError(OfferIssue.AmountZero.parseInt()); + return errorsAndWarnings; + } + + // Check that amount velocity is not too high. + if ( + offerItem.startAmount != offerItem.endAmount && + orderParameters.endTime > orderParameters.startTime + ) { + // Assign larger and smaller amount values + (uint256 maxAmount, uint256 minAmount) = offerItem.startAmount > + offerItem.endAmount + ? (offerItem.startAmount, offerItem.endAmount) + : (offerItem.endAmount, offerItem.startAmount); + + uint256 amountDelta = maxAmount - minAmount; + // delta of time that order exists for + uint256 timeDelta = orderParameters.endTime - + orderParameters.startTime; + + // Velocity scaled by 1e10 for precision + uint256 velocity = (amountDelta * 1e10) / timeDelta; + // gives velocity percentage in hundredth of a basis points per second in terms of larger value + uint256 velocityPercentage = velocity / (maxAmount * 1e4); + + // 278 * 60 * 30 ~= 500,000 + if (velocityPercentage > 278) { + // Over 50% change per 30 min + errorsAndWarnings.addError( + OfferIssue.AmountVelocityHigh.parseInt() + ); + } + // Over 50% change per 30 min + else if (velocityPercentage > 28) { + // Over 5% change per 30 min + errorsAndWarnings.addWarning( + OfferIssue.AmountVelocityHigh.parseInt() + ); + } + + // Check for large amount steps + if (minAmount <= 1e15) { + errorsAndWarnings.addWarning( + OfferIssue.AmountStepLarge.parseInt() + ); + } + } + + if (offerItem.itemType == ItemType.ERC721) { + // ERC721 type requires amounts to be 1 + if (offerItem.startAmount != 1 || offerItem.endAmount != 1) { + errorsAndWarnings.addError(ERC721Issue.AmountNotOne.parseInt()); + } + + // Check the EIP165 token interface + if (!checkInterface(offerItem.token, ERC721_INTERFACE_ID)) { + errorsAndWarnings.addError(ERC721Issue.InvalidToken.parseInt()); + } + } else if (offerItem.itemType == ItemType.ERC721_WITH_CRITERIA) { + // Check the EIP165 token interface + if (!checkInterface(offerItem.token, ERC721_INTERFACE_ID)) { + errorsAndWarnings.addError(ERC721Issue.InvalidToken.parseInt()); + } + + if (offerItem.startAmount > 1 || offerItem.endAmount > 1) { + // Require partial fill enabled. Even orderTypes are full + if (uint8(orderParameters.orderType) % 2 == 0) { + errorsAndWarnings.addError( + ERC721Issue.CriteriaNotPartialFill.parseInt() + ); + } + } + } else if ( + offerItem.itemType == ItemType.ERC1155 || + offerItem.itemType == ItemType.ERC1155_WITH_CRITERIA + ) { + // Check the EIP165 token interface + if (!checkInterface(offerItem.token, ERC1155_INTERFACE_ID)) { + errorsAndWarnings.addError( + ERC1155Issue.InvalidToken.parseInt() + ); + } + } else if (offerItem.itemType == ItemType.ERC20) { + // ERC20 must have `identifierOrCriteria` be zero + if (offerItem.identifierOrCriteria != 0) { + errorsAndWarnings.addError( + ERC20Issue.IdentifierNonZero.parseInt() + ); + } + + // Validate contract, should return an uint256 if its an ERC20 + if ( + !offerItem.token.safeStaticCallUint256( + abi.encodeWithSelector( + ERC20Interface.allowance.selector, + seaportAddress, + seaportAddress + ), + 0 + ) + ) { + errorsAndWarnings.addError(ERC20Issue.InvalidToken.parseInt()); + } + } else { + // Must be native + // NATIVE must have `token` be zero address + if (offerItem.token != address(0)) { + errorsAndWarnings.addError(NativeIssue.TokenAddress.parseInt()); + } + + // NATIVE must have `identifierOrCriteria` be zero + if (offerItem.identifierOrCriteria != 0) { + errorsAndWarnings.addError( + NativeIssue.IdentifierNonZero.parseInt() + ); + } + } + } + + /** + * @notice Validates the OfferItem approvals and balances + * @param orderParameters The parameters for the order to validate + * @param offerItemIndex The index of the offerItem in offer array to validate + * @return errorsAndWarnings An ErrorsAndWarnings structs with results + */ + function validateOfferItemApprovalAndBalance( + OrderParameters memory orderParameters, + uint256 offerItemIndex, + address seaportAddress + ) public view returns (ErrorsAndWarnings memory errorsAndWarnings) { + // Note: If multiple items are of the same token, token amounts are not summed for validation + + errorsAndWarnings = ErrorsAndWarnings(new uint16[](0), new uint16[](0)); + + // Get the approval address for the given conduit key + ( + address approvalAddress, + ErrorsAndWarnings memory ew + ) = getApprovalAddress(orderParameters.conduitKey, seaportAddress); + errorsAndWarnings.concat(ew); + + if (ew.hasErrors()) { + // Approval address is invalid + return errorsAndWarnings; + } + + // Get the offer item at offerItemIndex + OfferItem memory offerItem = orderParameters.offer[offerItemIndex]; + + if (offerItem.itemType == ItemType.ERC721) { + ERC721Interface token = ERC721Interface(offerItem.token); + + // Check that offerer owns token + if ( + !address(token).safeStaticCallAddress( + abi.encodeWithSelector( + ERC721Interface.ownerOf.selector, + offerItem.identifierOrCriteria + ), + orderParameters.offerer + ) + ) { + errorsAndWarnings.addError(ERC721Issue.NotOwner.parseInt()); + } + + // Check for approval via `getApproved` + if ( + !address(token).safeStaticCallAddress( + abi.encodeWithSelector( + ERC721Interface.getApproved.selector, + offerItem.identifierOrCriteria + ), + approvalAddress + ) + ) { + // Fallback to `isApprovalForAll` + if ( + !address(token).safeStaticCallBool( + abi.encodeWithSelector( + ERC721Interface.isApprovedForAll.selector, + orderParameters.offerer, + approvalAddress + ), + true + ) + ) { + // Not approved + errorsAndWarnings.addError( + ERC721Issue.NotApproved.parseInt() + ); + } + } + } else if (offerItem.itemType == ItemType.ERC721_WITH_CRITERIA) { + ERC721Interface token = ERC721Interface(offerItem.token); + + // Check for approval + if ( + !address(token).safeStaticCallBool( + abi.encodeWithSelector( + ERC721Interface.isApprovedForAll.selector, + orderParameters.offerer, + approvalAddress + ), + true + ) + ) { + // Not approved + errorsAndWarnings.addError(ERC721Issue.NotApproved.parseInt()); + } + } else if (offerItem.itemType == ItemType.ERC1155) { + ERC1155Interface token = ERC1155Interface(offerItem.token); + + // Check for approval + if ( + !address(token).safeStaticCallBool( + abi.encodeWithSelector( + ERC1155Interface.isApprovedForAll.selector, + orderParameters.offerer, + approvalAddress + ), + true + ) + ) { + errorsAndWarnings.addError(ERC1155Issue.NotApproved.parseInt()); + } + + // Get min required balance (max(startAmount, endAmount)) + uint256 minBalance = offerItem.startAmount < offerItem.endAmount + ? offerItem.startAmount + : offerItem.endAmount; + + // Check for sufficient balance + if ( + !address(token).safeStaticCallUint256( + abi.encodeWithSelector( + ERC1155Interface.balanceOf.selector, + orderParameters.offerer, + offerItem.identifierOrCriteria + ), + minBalance + ) + ) { + // Insufficient balance + errorsAndWarnings.addError( + ERC1155Issue.InsufficientBalance.parseInt() + ); + } + } else if (offerItem.itemType == ItemType.ERC1155_WITH_CRITERIA) { + ERC1155Interface token = ERC1155Interface(offerItem.token); + + // Check for approval + if ( + !address(token).safeStaticCallBool( + abi.encodeWithSelector( + ERC1155Interface.isApprovedForAll.selector, + orderParameters.offerer, + approvalAddress + ), + true + ) + ) { + errorsAndWarnings.addError(ERC1155Issue.NotApproved.parseInt()); + } + } else if (offerItem.itemType == ItemType.ERC20) { + ERC20Interface token = ERC20Interface(offerItem.token); + + // Get min required balance and approval (max(startAmount, endAmount)) + uint256 minBalanceAndAllowance = offerItem.startAmount < + offerItem.endAmount + ? offerItem.startAmount + : offerItem.endAmount; + + // Check allowance + if ( + !address(token).safeStaticCallUint256( + abi.encodeWithSelector( + ERC20Interface.allowance.selector, + orderParameters.offerer, + approvalAddress + ), + minBalanceAndAllowance + ) + ) { + errorsAndWarnings.addError( + ERC20Issue.InsufficientAllowance.parseInt() + ); + } + + // Check balance + if ( + !address(token).safeStaticCallUint256( + abi.encodeWithSelector( + ERC20Interface.balanceOf.selector, + orderParameters.offerer + ), + minBalanceAndAllowance + ) + ) { + errorsAndWarnings.addError( + ERC20Issue.InsufficientBalance.parseInt() + ); + } + } else { + // Must be native + // Get min required balance (max(startAmount, endAmount)) + uint256 minBalance = offerItem.startAmount < offerItem.endAmount + ? offerItem.startAmount + : offerItem.endAmount; + + // Check for sufficient balance + if (orderParameters.offerer.balance < minBalance) { + errorsAndWarnings.addError( + NativeIssue.InsufficientBalance.parseInt() + ); + } + + // Native items can not be pulled so warn + errorsAndWarnings.addWarning(OfferIssue.NativeItem.parseInt()); + } + } + + /** + * @notice Validate all consideration items for an order + * @param orderParameters The parameters for the order to validate + * @return errorsAndWarnings The errors and warnings + */ + function validateConsiderationItems( + OrderParameters memory orderParameters, + address seaportAddress + ) public view returns (ErrorsAndWarnings memory errorsAndWarnings) { + return + _helper.validateConsiderationItems(orderParameters, seaportAddress); + } + + /** + * @notice Validate a consideration item + * @param orderParameters The parameters for the order to validate + * @param considerationItemIndex The index of the consideration item to validate + * @return errorsAndWarnings The errors and warnings + */ + function validateConsiderationItem( + OrderParameters memory orderParameters, + uint256 considerationItemIndex, + address seaportAddress + ) public view returns (ErrorsAndWarnings memory errorsAndWarnings) { + return + _helper.validateConsiderationItem( + orderParameters, + considerationItemIndex, + seaportAddress + ); + } + + /** + * @notice Validates the parameters of a consideration item including contract validation + * @param orderParameters The parameters for the order to validate + * @param considerationItemIndex The index of the consideration item to validate + * @return errorsAndWarnings The errors and warnings + */ + function validateConsiderationItemParameters( + OrderParameters memory orderParameters, + uint256 considerationItemIndex, + address seaportAddress + ) public view returns (ErrorsAndWarnings memory errorsAndWarnings) { + return + _helper.validateConsiderationItemParameters( + orderParameters, + considerationItemIndex, + seaportAddress + ); + } + + /** + * @notice Validates the zone call for an order + * @param orderParameters The order parameters for the order to validate + * @param zoneParameters The zone parameters for the order to validate + * @return errorsAndWarnings An ErrorsAndWarnings structs with results + */ + function validateOrderWithZone( + OrderParameters memory orderParameters, + ZoneParameters memory zoneParameters + ) public view returns (ErrorsAndWarnings memory errorsAndWarnings) { + errorsAndWarnings = ErrorsAndWarnings(new uint16[](0), new uint16[](0)); + + // Call isValidZone to check if zone is set and implements EIP165 + errorsAndWarnings.concat(isValidZone(orderParameters)); + + // Call zone function `validateOrder` with the supplied ZoneParameters + if ( + !orderParameters.zone.safeStaticCallBytes4( + abi.encodeWithSelector( + ZoneInterface.validateOrder.selector, + zoneParameters + ), + ZoneInterface.validateOrder.selector + ) + ) { + // Call to validateOrder reverted or returned invalid magic value + errorsAndWarnings.addWarning(ZoneIssue.RejectedOrder.parseInt()); + } + } + + /** + * @notice Safely check that a contract implements an interface + * @param token The token address to check + * @param interfaceHash The interface hash to check + */ + function checkInterface( + address token, + bytes4 interfaceHash + ) public view returns (bool) { + return + token.safeStaticCallBool( + abi.encodeWithSelector( + IERC165.supportsInterface.selector, + interfaceHash + ), + true + ); + } + + function isPaymentToken(ItemType itemType) public pure returns (bool) { + return itemType == ItemType.NATIVE || itemType == ItemType.ERC20; + } + + /*////////////////////////////////////////////////////////////// + Merkle Helpers + //////////////////////////////////////////////////////////////*/ + + /** + * @notice Sorts an array of token ids by the keccak256 hash of the id. Required ordering of ids + * for other merkle operations. + * @param includedTokens An array of included token ids. + * @return sortedTokens The sorted `includedTokens` array. + */ + function sortMerkleTokens( + uint256[] memory includedTokens + ) public view returns (uint256[] memory sortedTokens) { + // Sort token ids by the keccak256 hash of the id + return _helper.sortMerkleTokens(includedTokens); + } + + /** + * @notice Creates a merkle root for includedTokens. + * @dev `includedTokens` must be sorting in strictly ascending order according to the keccak256 hash of the value. + * @return merkleRoot The merkle root + * @return errorsAndWarnings Errors and warnings from the operation + */ + function getMerkleRoot( + uint256[] memory includedTokens + ) + public + view + returns (bytes32 merkleRoot, ErrorsAndWarnings memory errorsAndWarnings) + { + return _helper.getMerkleRoot(includedTokens); + } + + /** + * @notice Creates a merkle proof for the the targetIndex contained in includedTokens. + * @dev `targetIndex` is referring to the index of an element in `includedTokens`. + * `includedTokens` must be sorting in ascending order according to the keccak256 hash of the value. + * @return merkleProof The merkle proof + * @return errorsAndWarnings Errors and warnings from the operation + */ + function getMerkleProof( + uint256[] memory includedTokens, + uint256 targetIndex + ) + public + view + returns ( + bytes32[] memory merkleProof, + ErrorsAndWarnings memory errorsAndWarnings + ) + { + return _helper.getMerkleProof(includedTokens, targetIndex); + } + + /** + * @notice Verifies a merkle proof for the value to prove and given root and proof. + * @dev The `valueToProve` is hashed prior to executing the proof verification. + * @param merkleRoot The root of the merkle tree + * @param merkleProof The merkle proof + * @param valueToProve The value to prove + * @return whether proof is valid + */ + function verifyMerkleProof( + bytes32 merkleRoot, + bytes32[] memory merkleProof, + uint256 valueToProve + ) public view returns (bool) { + return _helper.verifyMerkleProof(merkleRoot, merkleProof, valueToProve); + } +} diff --git a/contracts/seaport/helpers/order-validator/lib/ConsiderationTypeHashes.sol b/contracts/seaport/helpers/order-validator/lib/ConsiderationTypeHashes.sol new file mode 100644 index 00000000..fc266232 --- /dev/null +++ b/contracts/seaport/helpers/order-validator/lib/ConsiderationTypeHashes.sol @@ -0,0 +1,270 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.10; + +import "seaport-types/src/lib/ConsiderationStructs.sol"; + +uint256 constant EIP712_Order_size = 0x180; +uint256 constant EIP712_OfferItem_size = 0xc0; +uint256 constant EIP712_ConsiderationItem_size = 0xe0; +uint256 constant EIP712_DomainSeparator_offset = 0x02; +uint256 constant EIP712_OrderHash_offset = 0x22; +uint256 constant EIP712_DigestPayload_size = 0x42; +uint256 constant EIP_712_PREFIX = ( + 0x1901000000000000000000000000000000000000000000000000000000000000 +); + +contract ConsiderationTypeHashes { + bytes32 internal immutable _NAME_HASH; + bytes32 internal immutable _VERSION_HASH; + bytes32 internal immutable _EIP_712_DOMAIN_TYPEHASH; + bytes32 internal immutable _OFFER_ITEM_TYPEHASH; + bytes32 internal immutable _CONSIDERATION_ITEM_TYPEHASH; + bytes32 internal immutable _ORDER_TYPEHASH; + bytes32 internal immutable _DOMAIN_SEPARATOR; + address internal constant seaportAddress = + address(0x00000000000006c7676171937C444f6BDe3D6282); + + constructor() { + // Derive hash of the name of the contract. + _NAME_HASH = keccak256(bytes("Seaport")); + + // Derive hash of the version string of the contract. + _VERSION_HASH = keccak256(bytes("1.2")); + + bytes memory offerItemTypeString = abi.encodePacked( + "OfferItem(", + "uint8 itemType,", + "address token,", + "uint256 identifierOrCriteria,", + "uint256 startAmount,", + "uint256 endAmount", + ")" + ); + + // Construct the ConsiderationItem type string. + // prettier-ignore + bytes memory considerationItemTypeString = abi.encodePacked( + "ConsiderationItem(", + "uint8 itemType,", + "address token,", + "uint256 identifierOrCriteria,", + "uint256 startAmount,", + "uint256 endAmount,", + "address recipient", + ")" + ); + + // Construct the OrderComponents type string, not including the above. + // prettier-ignore + bytes memory orderComponentsPartialTypeString = abi.encodePacked( + "OrderComponents(", + "address offerer,", + "address zone,", + "OfferItem[] offer,", + "ConsiderationItem[] consideration,", + "uint8 orderType,", + "uint256 startTime,", + "uint256 endTime,", + "bytes32 zoneHash,", + "uint256 salt,", + "bytes32 conduitKey,", + "uint256 counter", + ")" + ); + // Derive the OfferItem type hash using the corresponding type string. + bytes32 offerItemTypehash = keccak256(offerItemTypeString); + + // Derive ConsiderationItem type hash using corresponding type string. + bytes32 considerationItemTypehash = keccak256( + considerationItemTypeString + ); + + // Construct the primary EIP-712 domain type string. + // prettier-ignore + _EIP_712_DOMAIN_TYPEHASH = keccak256( + abi.encodePacked( + "EIP712Domain(", + "string name,", + "string version,", + "uint256 chainId,", + "address verifyingContract", + ")" + ) + ); + + _OFFER_ITEM_TYPEHASH = offerItemTypehash; + _CONSIDERATION_ITEM_TYPEHASH = considerationItemTypehash; + + // Derive OrderItem type hash via combination of relevant type strings. + _ORDER_TYPEHASH = keccak256( + abi.encodePacked( + orderComponentsPartialTypeString, + considerationItemTypeString, + offerItemTypeString + ) + ); + + _DOMAIN_SEPARATOR = _deriveDomainSeparator(); + } + + /** + * @dev Internal view function to derive the EIP-712 domain separator. + * + * @return The derived domain separator. + */ + function _deriveDomainSeparator() internal view returns (bytes32) { + // prettier-ignore + return keccak256( + abi.encode( + _EIP_712_DOMAIN_TYPEHASH, + _NAME_HASH, + _VERSION_HASH, + block.chainid, + seaportAddress + ) + ); + } + + /** + * @dev Internal pure function to efficiently derive an digest to sign for + * an order in accordance with EIP-712. + * + * @param orderHash The order hash. + * + * @return value The hash. + */ + function _deriveEIP712Digest( + bytes32 orderHash + ) internal view returns (bytes32 value) { + bytes32 domainSeparator = _DOMAIN_SEPARATOR; + // Leverage scratch space to perform an efficient hash. + assembly { + // Place the EIP-712 prefix at the start of scratch space. + mstore(0, EIP_712_PREFIX) + + // Place the domain separator in the next region of scratch space. + mstore(EIP712_DomainSeparator_offset, domainSeparator) + + // Place the order hash in scratch space, spilling into the first + // two bytes of the free memory pointer — this should never be set + // as memory cannot be expanded to that size, and will be zeroed out + // after the hash is performed. + mstore(EIP712_OrderHash_offset, orderHash) + + // Hash the relevant region (65 bytes). + value := keccak256(0, EIP712_DigestPayload_size) + + // Clear out the dirtied bits in the memory pointer. + mstore(EIP712_OrderHash_offset, 0) + } + } + + /** + * @dev Internal view function to derive the EIP-712 hash for an offer item. + * + * @param offerItem The offered item to hash. + * + * @return The hash. + */ + function _hashOfferItem( + OfferItem memory offerItem + ) internal view returns (bytes32) { + return + keccak256( + abi.encode( + _OFFER_ITEM_TYPEHASH, + offerItem.itemType, + offerItem.token, + offerItem.identifierOrCriteria, + offerItem.startAmount, + offerItem.endAmount + ) + ); + } + + /** + * @dev Internal view function to derive the EIP-712 hash for a consideration item. + * + * @param considerationItem The consideration item to hash. + * + * @return The hash. + */ + function _hashConsiderationItem( + ConsiderationItem memory considerationItem + ) internal view returns (bytes32) { + return + keccak256( + abi.encode( + _CONSIDERATION_ITEM_TYPEHASH, + considerationItem.itemType, + considerationItem.token, + considerationItem.identifierOrCriteria, + considerationItem.startAmount, + considerationItem.endAmount, + considerationItem.recipient + ) + ); + } + + /** + * @dev Internal view function to derive the order hash for a given order. + * Note that only the original consideration items are included in the + * order hash, as additional consideration items may be supplied by the + * caller. + * + * @param orderParameters The parameters of the order to hash. + * @param counter The counter of the order to hash. + * + * @return orderHash The hash. + */ + function _deriveOrderHash( + OrderParameters memory orderParameters, + uint256 counter + ) internal view returns (bytes32 orderHash) { + // Designate new memory regions for offer and consideration item hashes. + bytes32[] memory offerHashes = new bytes32[]( + orderParameters.offer.length + ); + bytes32[] memory considerationHashes = new bytes32[]( + orderParameters.totalOriginalConsiderationItems + ); + + // Iterate over each offer on the order. + for (uint256 i = 0; i < orderParameters.offer.length; ++i) { + // Hash the offer and place the result into memory. + offerHashes[i] = _hashOfferItem(orderParameters.offer[i]); + } + + // Iterate over each consideration on the order. + for ( + uint256 i = 0; + i < orderParameters.totalOriginalConsiderationItems; + ++i + ) { + // Hash the consideration and place the result into memory. + considerationHashes[i] = _hashConsiderationItem( + orderParameters.consideration[i] + ); + } + + // Derive and return the order hash as specified by EIP-712. + + return + keccak256( + abi.encode( + _ORDER_TYPEHASH, + orderParameters.offerer, + orderParameters.zone, + keccak256(abi.encodePacked(offerHashes)), + keccak256(abi.encodePacked(considerationHashes)), + orderParameters.orderType, + orderParameters.startTime, + orderParameters.endTime, + orderParameters.zoneHash, + orderParameters.salt, + orderParameters.conduitKey, + counter + ) + ); + } +} diff --git a/contracts/seaport/helpers/order-validator/lib/ErrorsAndWarnings.sol b/contracts/seaport/helpers/order-validator/lib/ErrorsAndWarnings.sol new file mode 100644 index 00000000..e9934f44 --- /dev/null +++ b/contracts/seaport/helpers/order-validator/lib/ErrorsAndWarnings.sol @@ -0,0 +1,284 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.10; + +import { + ConduitIssue, + ConsiderationIssue, + ERC20Issue, + ERC721Issue, + ERC1155Issue, + GenericIssue, + OfferIssue, + SignatureIssue, + StatusIssue, + TimeIssue, + NativeIssue, + IssueParser +} from "./SeaportValidatorTypes.sol"; + +struct ErrorsAndWarnings { + uint16[] errors; + uint16[] warnings; +} + +library ErrorsAndWarningsLib { + using IssueParser for ConduitIssue; + using IssueParser for ConsiderationIssue; + using IssueParser for ERC20Issue; + using IssueParser for ERC721Issue; + using IssueParser for ERC1155Issue; + using IssueParser for GenericIssue; + using IssueParser for OfferIssue; + using IssueParser for SignatureIssue; + using IssueParser for StatusIssue; + using IssueParser for TimeIssue; + using IssueParser for NativeIssue; + + function concat( + ErrorsAndWarnings memory ew1, + ErrorsAndWarnings memory ew2 + ) internal pure { + ew1.errors = concatMemory(ew1.errors, ew2.errors); + ew1.warnings = concatMemory(ew1.warnings, ew2.warnings); + } + + function empty() internal pure returns (ErrorsAndWarnings memory) { + return ErrorsAndWarnings(new uint16[](0), new uint16[](0)); + } + + function addError( + uint16 err + ) internal pure returns (ErrorsAndWarnings memory) { + ErrorsAndWarnings memory ew = ErrorsAndWarnings( + new uint16[](0), + new uint16[](0) + ); + ew.errors = pushMemory(ew.errors, err); + return ew; + } + + function addError( + ErrorsAndWarnings memory ew, + uint16 err + ) internal pure returns (ErrorsAndWarnings memory) { + ew.errors = pushMemory(ew.errors, err); + return ew; + } + + function addError( + ErrorsAndWarnings memory ew, + GenericIssue err + ) internal pure returns (ErrorsAndWarnings memory) { + return addError(ew, err.parseInt()); + } + + function addError( + ErrorsAndWarnings memory ew, + ERC20Issue err + ) internal pure returns (ErrorsAndWarnings memory) { + return addError(ew, err.parseInt()); + } + + function addError( + ErrorsAndWarnings memory ew, + ERC721Issue err + ) internal pure returns (ErrorsAndWarnings memory) { + return addError(ew, err.parseInt()); + } + + function addError( + ErrorsAndWarnings memory ew, + ERC1155Issue err + ) internal pure returns (ErrorsAndWarnings memory) { + return addError(ew, err.parseInt()); + } + + function addError( + ErrorsAndWarnings memory ew, + ConsiderationIssue err + ) internal pure returns (ErrorsAndWarnings memory) { + return addError(ew, err.parseInt()); + } + + function addError( + ErrorsAndWarnings memory ew, + OfferIssue err + ) internal pure returns (ErrorsAndWarnings memory) { + return addError(ew, err.parseInt()); + } + + function addError( + ErrorsAndWarnings memory ew, + SignatureIssue err + ) internal pure returns (ErrorsAndWarnings memory) { + return addError(ew, err.parseInt()); + } + + function addError( + ErrorsAndWarnings memory ew, + TimeIssue err + ) internal pure returns (ErrorsAndWarnings memory) { + return addError(ew, err.parseInt()); + } + + function addError( + ErrorsAndWarnings memory ew, + ConduitIssue err + ) internal pure returns (ErrorsAndWarnings memory) { + return addError(ew, err.parseInt()); + } + + function addError( + ErrorsAndWarnings memory ew, + StatusIssue err + ) internal pure returns (ErrorsAndWarnings memory) { + return addError(ew, err.parseInt()); + } + + function addWarning( + uint16 warn + ) internal pure returns (ErrorsAndWarnings memory) { + ErrorsAndWarnings memory ew = ErrorsAndWarnings( + new uint16[](0), + new uint16[](0) + ); + ew.warnings = pushMemory(ew.warnings, warn); + return ew; + } + + function addWarning( + ErrorsAndWarnings memory ew, + uint16 warn + ) internal pure returns (ErrorsAndWarnings memory) { + ew.warnings = pushMemory(ew.warnings, warn); + return ew; + } + + function addWarning( + ErrorsAndWarnings memory ew, + GenericIssue warn + ) internal pure returns (ErrorsAndWarnings memory) { + return addWarning(ew, warn.parseInt()); + } + + function addWarning( + ErrorsAndWarnings memory ew, + ERC20Issue warn + ) internal pure returns (ErrorsAndWarnings memory) { + return addWarning(ew, warn.parseInt()); + } + + function addWarning( + ErrorsAndWarnings memory ew, + ERC721Issue warn + ) internal pure returns (ErrorsAndWarnings memory) { + return addWarning(ew, warn.parseInt()); + } + + function addWarning( + ErrorsAndWarnings memory ew, + ERC1155Issue warn + ) internal pure returns (ErrorsAndWarnings memory) { + return addWarning(ew, warn.parseInt()); + } + + function addWarning( + ErrorsAndWarnings memory ew, + OfferIssue warn + ) internal pure returns (ErrorsAndWarnings memory) { + return addWarning(ew, warn.parseInt()); + } + + function addWarning( + ErrorsAndWarnings memory ew, + ConsiderationIssue warn + ) internal pure returns (ErrorsAndWarnings memory) { + return addWarning(ew, warn.parseInt()); + } + + function addWarning( + ErrorsAndWarnings memory ew, + SignatureIssue warn + ) internal pure returns (ErrorsAndWarnings memory) { + return addWarning(ew, warn.parseInt()); + } + + function addWarning( + ErrorsAndWarnings memory ew, + TimeIssue warn + ) internal pure returns (ErrorsAndWarnings memory) { + return addWarning(ew, warn.parseInt()); + } + + function addWarning( + ErrorsAndWarnings memory ew, + ConduitIssue warn + ) internal pure returns (ErrorsAndWarnings memory) { + return addWarning(ew, warn.parseInt()); + } + + function addWarning( + ErrorsAndWarnings memory ew, + StatusIssue warn + ) internal pure returns (ErrorsAndWarnings memory) { + return addWarning(ew, warn.parseInt()); + } + + function addWarning( + ErrorsAndWarnings memory ew, + NativeIssue warn + ) internal pure returns (ErrorsAndWarnings memory) { + return addWarning(ew, warn.parseInt()); + } + + function hasErrors( + ErrorsAndWarnings memory ew + ) internal pure returns (bool) { + return ew.errors.length != 0; + } + + function hasWarnings( + ErrorsAndWarnings memory ew + ) internal pure returns (bool) { + return ew.warnings.length != 0; + } + + // Helper Functions + function concatMemory( + uint16[] memory array1, + uint16[] memory array2 + ) private pure returns (uint16[] memory) { + if (array1.length == 0) { + return array2; + } else if (array2.length == 0) { + return array1; + } + + uint16[] memory returnValue = new uint16[]( + array1.length + array2.length + ); + + for (uint256 i = 0; i < array1.length; i++) { + returnValue[i] = array1[i]; + } + for (uint256 i = 0; i < array2.length; i++) { + returnValue[i + array1.length] = array2[i]; + } + + return returnValue; + } + + function pushMemory( + uint16[] memory uint16Array, + uint16 newValue + ) internal pure returns (uint16[] memory) { + uint16[] memory returnValue = new uint16[](uint16Array.length + 1); + + for (uint256 i = 0; i < uint16Array.length; i++) { + returnValue[i] = uint16Array[i]; + } + returnValue[uint16Array.length] = newValue; + + return returnValue; + } +} diff --git a/contracts/seaport/helpers/order-validator/lib/Murky.sol b/contracts/seaport/helpers/order-validator/lib/Murky.sol new file mode 100644 index 00000000..d49675a3 --- /dev/null +++ b/contracts/seaport/helpers/order-validator/lib/Murky.sol @@ -0,0 +1,400 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.10; + +import { + ErrorsAndWarnings, + ErrorsAndWarningsLib +} from "./ErrorsAndWarnings.sol"; + +import { IssueParser, MerkleIssue } from "./SeaportValidatorTypes.sol"; + +contract Murky { + using ErrorsAndWarningsLib for ErrorsAndWarnings; + using IssueParser for MerkleIssue; + + bool internal constant HASH_ODD_WITH_ZERO = false; + + function _verifyProof( + bytes32 root, + bytes32[] memory proof, + bytes32 valueToProve + ) internal pure returns (bool) { + // proof length must be less than max array size + bytes32 rollingHash = valueToProve; + uint256 length = proof.length; + unchecked { + for (uint256 i = 0; i < length; ++i) { + rollingHash = _hashLeafPairs(rollingHash, proof[i]); + } + } + return root == rollingHash; + } + + /******************** + * HASHING FUNCTION * + ********************/ + + /// ascending sort and concat prior to hashing + function _hashLeafPairs(bytes32 left, bytes32 right) + internal + pure + returns (bytes32 _hash) + { + assembly { + switch lt(left, right) + case 0 { + mstore(0x0, right) + mstore(0x20, left) + } + default { + mstore(0x0, left) + mstore(0x20, right) + } + _hash := keccak256(0x0, 0x40) + } + } + + /******************** + * PROOF GENERATION * + ********************/ + + function _getRoot(uint256[] memory data) + internal + pure + returns (bytes32 result, ErrorsAndWarnings memory errorsAndWarnings) + { + errorsAndWarnings = ErrorsAndWarnings(new uint16[](0), new uint16[](0)); + + if (data.length < 2) { + errorsAndWarnings.addError(MerkleIssue.SingleLeaf.parseInt()); + return (0, errorsAndWarnings); + } + + bool hashOddWithZero = HASH_ODD_WITH_ZERO; + + if (!_processInput(data)) { + errorsAndWarnings.addError(MerkleIssue.Unsorted.parseInt()); + return (0, errorsAndWarnings); + } + + assembly { + function hashLeafPairs(left, right) -> _hash { + switch lt(left, right) + case 0 { + mstore(0x0, right) + mstore(0x20, left) + } + default { + mstore(0x0, left) + mstore(0x20, right) + } + _hash := keccak256(0x0, 0x40) + } + function hashLevel(_data, length, _hashOddWithZero) -> newLength { + // we will be modifying data in-place, so set result pointer to data pointer + let _result := _data + // get length of original data array + // let length := mload(_data) + // bool to track if we need to hash the last element of an odd-length array with zero + let oddLength + + // if length is odd, we need to hash the last element with zero + switch and(length, 1) + case 1 { + // if length is odd, add 1 so division by 2 will round up + newLength := add(1, div(length, 2)) + oddLength := 1 + } + default { + newLength := div(length, 2) + } + // todo: necessary? + // mstore(_data, newLength) + let resultIndexPointer := add(0x20, _data) + let dataIndexPointer := resultIndexPointer + + // stop iterating over for loop at length-1 + let stopIteration := add(_data, mul(length, 0x20)) + // write result array in-place over data array + for { + + } lt(dataIndexPointer, stopIteration) { + + } { + // get next two elements from data, hash them together + let data1 := mload(dataIndexPointer) + let data2 := mload(add(dataIndexPointer, 0x20)) + let hashedPair := hashLeafPairs(data1, data2) + // overwrite an element of data array with + mstore(resultIndexPointer, hashedPair) + // increment result pointer by 1 slot + resultIndexPointer := add(0x20, resultIndexPointer) + // increment data pointer by 2 slot + dataIndexPointer := add(0x40, dataIndexPointer) + } + // we did not yet hash last index if odd-length + if oddLength { + let data1 := mload(dataIndexPointer) + let nextValue + switch _hashOddWithZero + case 0 { + nextValue := data1 + } + default { + nextValue := hashLeafPairs(data1, 0) + } + mstore(resultIndexPointer, nextValue) + } + } + + let dataLength := mload(data) + for { + + } gt(dataLength, 1) { + + } { + dataLength := hashLevel(data, dataLength, hashOddWithZero) + } + result := mload(add(0x20, data)) + } + } + + function _getProof(uint256[] memory data, uint256 node) + internal + pure + returns ( + bytes32[] memory result, + ErrorsAndWarnings memory errorsAndWarnings + ) + { + errorsAndWarnings = ErrorsAndWarnings(new uint16[](0), new uint16[](0)); + + if (data.length < 2) { + errorsAndWarnings.addError(MerkleIssue.SingleLeaf.parseInt()); + return (new bytes32[](0), errorsAndWarnings); + } + + bool hashOddWithZero = HASH_ODD_WITH_ZERO; + + if (!_processInput(data)) { + errorsAndWarnings.addError(MerkleIssue.Unsorted.parseInt()); + return (new bytes32[](0), errorsAndWarnings); + } + + // The size of the proof is equal to the ceiling of log2(numLeaves) + // Two overflow risks: node, pos + // node: max array size is 2**256-1. Largest index in the array will be 1 less than that. Also, + // for dynamic arrays, size is limited to 2**64-1 + // pos: pos is bounded by log2(data.length), which should be less than type(uint256).max + assembly { + function hashLeafPairs(left, right) -> _hash { + switch lt(left, right) + case 0 { + mstore(0x0, right) + mstore(0x20, left) + } + default { + mstore(0x0, left) + mstore(0x20, right) + } + _hash := keccak256(0x0, 0x40) + } + function hashLevel(_data, length, _hashOddWithZero) -> newLength { + // we will be modifying data in-place, so set result pointer to data pointer + let _result := _data + // get length of original data array + // let length := mload(_data) + // bool to track if we need to hash the last element of an odd-length array with zero + let oddLength + + // if length is odd, we'll need to hash the last element with zero + switch and(length, 1) + case 1 { + // if length is odd, add 1 so division by 2 will round up + newLength := add(1, div(length, 2)) + oddLength := 1 + } + default { + newLength := div(length, 2) + } + // todo: necessary? + // mstore(_data, newLength) + let resultIndexPointer := add(0x20, _data) + let dataIndexPointer := resultIndexPointer + + // stop iterating over for loop at length-1 + let stopIteration := add(_data, mul(length, 0x20)) + // write result array in-place over data array + for { + + } lt(dataIndexPointer, stopIteration) { + + } { + // get next two elements from data, hash them together + let data1 := mload(dataIndexPointer) + let data2 := mload(add(dataIndexPointer, 0x20)) + let hashedPair := hashLeafPairs(data1, data2) + // overwrite an element of data array with + mstore(resultIndexPointer, hashedPair) + // increment result pointer by 1 slot + resultIndexPointer := add(0x20, resultIndexPointer) + // increment data pointer by 2 slot + dataIndexPointer := add(0x40, dataIndexPointer) + } + // we did not yet hash last index if odd-length + if oddLength { + let data1 := mload(dataIndexPointer) + let nextValue + switch _hashOddWithZero + case 0 { + nextValue := data1 + } + default { + nextValue := hashLeafPairs(data1, 0) + } + mstore(resultIndexPointer, nextValue) + } + } + + // set result pointer to free memory + result := mload(0x40) + // get pointer to first index of result + let resultIndexPtr := add(0x20, result) + // declare so we can use later + let newLength + // put length of data onto stack + let dataLength := mload(data) + for { + // repeat until only one element is left + } gt(dataLength, 1) { + + } { + // bool if node is odd + let oddNodeIndex := and(node, 1) + // bool if node is last + let lastNodeIndex := eq(dataLength, add(1, node)) + // store both bools in one value so we can switch on it + let switchVal := or(shl(1, lastNodeIndex), oddNodeIndex) + switch switchVal + // 00 - neither odd nor last + case 0 { + // store data[node+1] at result[i] + // get pointer to result[node+1] by adding 2 to node and multiplying by 0x20 + // to account for the fact that result points to array length, not first index + mstore( + resultIndexPtr, + mload(add(data, mul(0x20, add(2, node)))) + ) + } + // 10 - node is last + case 2 { + // store 0 at result[i] + mstore(resultIndexPtr, 0) + } + // 01 or 11 - node is odd (and possibly also last) + default { + // store data[node-1] at result[i] + mstore(resultIndexPtr, mload(add(data, mul(0x20, node)))) + } + // increment result index + resultIndexPtr := add(0x20, resultIndexPtr) + + // get new node index + node := div(node, 2) + // keep track of how long result array is + newLength := add(1, newLength) + // compute the next hash level, overwriting data, and get the new length + dataLength := hashLevel(data, dataLength, hashOddWithZero) + } + // store length of result array at pointer + mstore(result, newLength) + // set free mem pointer to word after end of result array + mstore(0x40, resultIndexPtr) + } + } + + /** + * Hashes each element of the input array in place using keccak256 + */ + function _processInput(uint256[] memory data) + private + pure + returns (bool sorted) + { + sorted = true; + + // Hash inputs with keccak256 + for (uint256 i = 0; i < data.length; ++i) { + assembly { + mstore( + add(data, mul(0x20, add(1, i))), + keccak256(add(data, mul(0x20, add(1, i))), 0x20) + ) + // for every element after the first, hashed value must be greater than the last one + if and( + gt(i, 0), + iszero( + gt( + mload(add(data, mul(0x20, add(1, i)))), + mload(add(data, mul(0x20, add(1, sub(i, 1))))) + ) + ) + ) { + sorted := 0 // Elements not ordered by hash + } + } + } + } + + // Sort uint256 in order of the keccak256 hashes + struct HashAndIntTuple { + uint256 num; + bytes32 hash; + } + + function _sortUint256ByHash(uint256[] memory values) + internal + pure + returns (uint256[] memory sortedValues) + { + HashAndIntTuple[] memory toSort = new HashAndIntTuple[](values.length); + for (uint256 i = 0; i < values.length; i++) { + toSort[i] = HashAndIntTuple( + values[i], + keccak256(abi.encode(values[i])) + ); + } + + _quickSort(toSort, 0, int256(toSort.length - 1)); + + sortedValues = new uint256[](values.length); + for (uint256 i = 0; i < values.length; i++) { + sortedValues[i] = toSort[i].num; + } + } + + function _quickSort( + HashAndIntTuple[] memory arr, + int256 left, + int256 right + ) internal pure { + int256 i = left; + int256 j = right; + if (i == j) return; + bytes32 pivot = arr[uint256(left + (right - left) / 2)].hash; + while (i <= j) { + while (arr[uint256(i)].hash < pivot) i++; + while (pivot < arr[uint256(j)].hash) j--; + if (i <= j) { + (arr[uint256(i)], arr[uint256(j)]) = ( + arr[uint256(j)], + arr[uint256(i)] + ); + i++; + j--; + } + } + if (left < j) _quickSort(arr, left, j); + if (i < right) _quickSort(arr, i, right); + } +} diff --git a/contracts/seaport/helpers/order-validator/lib/ReadOnlyOrderValidator.sol b/contracts/seaport/helpers/order-validator/lib/ReadOnlyOrderValidator.sol new file mode 100644 index 00000000..c0d23124 --- /dev/null +++ b/contracts/seaport/helpers/order-validator/lib/ReadOnlyOrderValidator.sol @@ -0,0 +1,722 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.17; + +import { OrderType } from "seaport-types/src/lib/ConsiderationEnums.sol"; + +import { + Order, + OrderComponents, + OrderParameters, + OrderStatus +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { + _revertConsiderationLengthNotEqualToTotalOriginal, + _revertMissingOriginalConsiderationItems +} from "seaport-types/src/lib/ConsiderationErrors.sol"; + +import { + SignatureVerification +} from "seaport-core/src/lib/SignatureVerification.sol"; + +import { + _revertOrderIsCancelled, + _revertOrderPartiallyFilled, + _revertOrderAlreadyFilled +} from "seaport-types/src/lib/ConsiderationErrors.sol"; + +import { SeaportInterface } from "seaport-sol/src/SeaportInterface.sol"; + +import { + EIP_712_PREFIX, + EIP712_DigestPayload_size, + EIP712_DomainSeparator_offset, + EIP712_OrderHash_offset, + BulkOrderProof_keyShift, + BulkOrderProof_keySize, + BulkOrderProof_lengthAdjustmentBeforeMask, + BulkOrderProof_lengthRangeAfterMask, + BulkOrderProof_minSize, + BulkOrderProof_rangeSize, + ECDSA_MaxLength, + OneWordShift, + ThirtyOneBytes, + OneWord, + TwoWords, + BulkOrder_Typehash_Height_One, + BulkOrder_Typehash_Height_Two, + BulkOrder_Typehash_Height_Three, + BulkOrder_Typehash_Height_Four, + BulkOrder_Typehash_Height_Five, + BulkOrder_Typehash_Height_Six, + BulkOrder_Typehash_Height_Seven, + BulkOrder_Typehash_Height_Eight, + BulkOrder_Typehash_Height_Nine, + BulkOrder_Typehash_Height_Ten, + BulkOrder_Typehash_Height_Eleven, + BulkOrder_Typehash_Height_Twelve, + BulkOrder_Typehash_Height_Thirteen, + BulkOrder_Typehash_Height_Fourteen, + BulkOrder_Typehash_Height_Fifteen, + BulkOrder_Typehash_Height_Sixteen, + BulkOrder_Typehash_Height_Seventeen, + BulkOrder_Typehash_Height_Eighteen, + BulkOrder_Typehash_Height_Nineteen, + BulkOrder_Typehash_Height_Twenty, + BulkOrder_Typehash_Height_TwentyOne, + BulkOrder_Typehash_Height_TwentyTwo, + BulkOrder_Typehash_Height_TwentyThree, + BulkOrder_Typehash_Height_TwentyFour +} from "seaport-types/src/lib/ConsiderationConstants.sol"; + +contract ReadOnlyOrderValidator is SignatureVerification { + function canValidate( + address seaport, + Order[] memory orders + ) external view returns (bool) { + return _validate(orders, SeaportInterface(seaport)); + } + + /** + * @dev Internal function to validate an arbitrary number of orders, thereby + * registering their signatures as valid and allowing the fulfiller to + * skip signature verification on fulfillment. Note that validated + * orders may still be unfulfillable due to invalid item amounts or + * other factors; callers should determine whether validated orders are + * fulfillable by simulating the fulfillment call prior to execution. + * Also note that anyone can validate a signed order, but only the + * offerer can validate an order without supplying a signature. + * + * @param orders The orders to validate. + * + * @return validated A boolean indicating whether the supplied orders were + * successfully validated. + */ + function _validate( + Order[] memory orders, + SeaportInterface seaport + ) internal view returns (bool validated) { + (, bytes32 domainSeparator, ) = seaport.information(); + + // Declare variables outside of the loop. + OrderStatus memory orderStatus; + bytes32 orderHash; + address offerer; + + // Skip overflow check as for loop is indexed starting at zero. + unchecked { + // Read length of the orders array from memory and place on stack. + uint256 totalOrders = orders.length; + + // Iterate over each order. + for (uint256 i = 0; i < totalOrders; ++i) { + // Retrieve the order. + Order memory order = orders[i]; + + // Retrieve the order parameters. + OrderParameters memory orderParameters = order.parameters; + + // Skip contract orders. + if (orderParameters.orderType == OrderType.CONTRACT) { + continue; + } + + // Move offerer from memory to the stack. + offerer = orderParameters.offerer; + + // Get current counter & use it w/ params to derive order hash. + orderHash = _assertConsiderationLengthAndGetOrderHash( + orderParameters, + seaport + ); + + { + // Retrieve the order status using the derived order hash. + ( + bool isValidated, + bool isCancelled, + uint256 totalFilled, + uint256 totalSize + ) = seaport.getOrderStatus(orderHash); + orderStatus = OrderStatus( + isValidated, + isCancelled, + uint120(totalFilled), + uint120(totalSize) + ); + } + + // Ensure order is fillable and retrieve the filled amount. + _verifyOrderStatus( + orderHash, + orderStatus, + false, // Signifies that partially filled orders are valid. + true // Signifies to revert if the order is invalid. + ); + + // If the order has not already been validated... + if (!orderStatus.isValidated) { + // Ensure that consideration array length is equal to the + // total original consideration items value. + if ( + orderParameters.consideration.length != + orderParameters.totalOriginalConsiderationItems + ) { + _revertConsiderationLengthNotEqualToTotalOriginal(); + } + + // Verify the supplied signature. + _verifySignature( + offerer, + orderHash, + order.signature, + domainSeparator + ); + + // Update order status to mark the order as valid. + // orderStatus.isValidated = true; + + // Emit an event signifying the order has been validated. + // emit OrderValidated(orderHash, orderParameters); + } + } + } + + // Return a boolean indicating that orders were successfully validated. + validated = true; + } + + /** + * @dev Internal view function to validate that a given order is fillable + * and not cancelled based on the order status. + * + * @param orderHash The order hash. + * @param orderStatus The status of the order, including whether it has + * been cancelled and the fraction filled. + * @param onlyAllowUnused A boolean flag indicating whether partial fills + * are supported by the calling function. + * @param revertOnInvalid A boolean indicating whether to revert if the + * order has been cancelled or filled beyond the + * allowable amount. + * + * @return valid A boolean indicating whether the order is valid. + */ + function _verifyOrderStatus( + bytes32 orderHash, + OrderStatus memory orderStatus, + bool onlyAllowUnused, + bool revertOnInvalid + ) internal pure returns (bool valid) { + // Ensure that the order has not been cancelled. + if (orderStatus.isCancelled) { + // Only revert if revertOnInvalid has been supplied as true. + if (revertOnInvalid) { + _revertOrderIsCancelled(orderHash); + } + + // Return false as the order status is invalid. + return false; + } + + // Read order status numerator and place on stack. + uint256 orderStatusNumerator = orderStatus.numerator; + + // If the order is not entirely unused... + if (orderStatusNumerator != 0) { + // ensure the order has not been partially filled when not allowed. + if (onlyAllowUnused) { + // Always revert on partial fills when onlyAllowUnused is true. + _revertOrderPartiallyFilled(orderHash); + } + // Otherwise, ensure that order has not been entirely filled. + else if (orderStatusNumerator >= orderStatus.denominator) { + // Only revert if revertOnInvalid has been supplied as true. + if (revertOnInvalid) { + _revertOrderAlreadyFilled(orderHash); + } + + // Return false as the order status is invalid. + return false; + } + } + + // Return true as the order status is valid. + valid = true; + } + + /** + * @dev Internal view function to verify the signature of an order. An + * ERC-1271 fallback will be attempted if either the signature length + * is not 64 or 65 bytes or if the recovered signer does not match the + * supplied offerer. Note that in cases where a 64 or 65 byte signature + * is supplied, only standard ECDSA signatures that recover to a + * non-zero address are supported. + * + * @param offerer The offerer for the order. + * @param orderHash The order hash. + * @param signature A signature from the offerer indicating that the order + * has been approved. + */ + function _verifySignature( + address offerer, + bytes32 orderHash, + bytes memory signature, + bytes32 domainSeparator + ) internal view { + // Determine whether the offerer is the caller. + bool offererIsCaller; + assembly { + offererIsCaller := eq(offerer, caller()) + } + + // Skip signature verification if the offerer is the caller. + if (offererIsCaller) { + return; + } + + // Derive original EIP-712 digest using domain separator and order hash. + bytes32 originalDigest = _deriveEIP712Digest( + domainSeparator, + orderHash + ); + + // Read the length of the signature from memory and place on the stack. + uint256 originalSignatureLength = signature.length; + + // Determine effective digest if signature has a valid bulk order size. + bytes32 digest; + if (_isValidBulkOrderSize(originalSignatureLength)) { + // Rederive order hash and digest using bulk order proof. + (orderHash) = _computeBulkOrderProof(signature, orderHash); + digest = _deriveEIP712Digest(domainSeparator, orderHash); + } else { + // Supply the original digest as the effective digest. + digest = originalDigest; + } + + // Ensure that the signature for the digest is valid for the offerer. + _assertValidSignature( + offerer, + digest, + originalDigest, + originalSignatureLength, + signature + ); + } + + /** + * @dev Determines whether the specified bulk order size is valid. + * + * @param signatureLength The signature length of the bulk order to check. + * + * @return validLength True if bulk order size is valid, false otherwise. + */ + function _isValidBulkOrderSize( + uint256 signatureLength + ) internal pure returns (bool validLength) { + // Utilize assembly to validate the length; the equivalent logic is + // (64 + x) + 3 + 32y where (0 <= x <= 1) and (1 <= y <= 24). + assembly { + validLength := and( + lt( + sub(signatureLength, BulkOrderProof_minSize), + BulkOrderProof_rangeSize + ), + lt( + and( + add( + signatureLength, + BulkOrderProof_lengthAdjustmentBeforeMask + ), + ThirtyOneBytes + ), + BulkOrderProof_lengthRangeAfterMask + ) + ) + } + } + + /** + * @dev Computes the bulk order hash for the specified proof and leaf. Note + * that if an index that exceeds the number of orders in the bulk order + * payload will instead "wrap around" and refer to an earlier index. + * + * @param proofAndSignature The proof and signature of the bulk order. + * @param leaf The leaf of the bulk order tree. + * + * @return bulkOrderHash The bulk order hash. + */ + function _computeBulkOrderProof( + bytes memory proofAndSignature, + bytes32 leaf + ) internal pure returns (bytes32 bulkOrderHash) { + // Declare arguments for the root hash and the height of the proof. + bytes32 root; + uint256 height; + + // Utilize assembly to efficiently derive the root hash using the proof. + assembly { + // Retrieve the length of the proof, key, and signature combined. + let fullLength := mload(proofAndSignature) + + // If proofAndSignature has odd length, it is a compact signature + // with 64 bytes. + let signatureLength := sub(ECDSA_MaxLength, and(fullLength, 1)) + + // Derive height (or depth of tree) with signature and proof length. + height := shr(OneWordShift, sub(fullLength, signatureLength)) + + // Update the length in memory to only include the signature. + mstore(proofAndSignature, signatureLength) + + // Derive the pointer for the key using the signature length. + let keyPtr := add(proofAndSignature, add(OneWord, signatureLength)) + + // Retrieve the three-byte key using the derived pointer. + let key := shr(BulkOrderProof_keyShift, mload(keyPtr)) + + /// Retrieve pointer to first proof element by applying a constant + // for the key size to the derived key pointer. + let proof := add(keyPtr, BulkOrderProof_keySize) + + // Compute level 1. + let scratchPtr1 := shl(OneWordShift, and(key, 1)) + mstore(scratchPtr1, leaf) + mstore(xor(scratchPtr1, OneWord), mload(proof)) + + // Compute remaining proofs. + for { + let i := 1 + } lt(i, height) { + i := add(i, 1) + } { + proof := add(proof, OneWord) + let scratchPtr := shl(OneWordShift, and(shr(i, key), 1)) + mstore(scratchPtr, keccak256(0, TwoWords)) + mstore(xor(scratchPtr, OneWord), mload(proof)) + } + + // Compute root hash. + root := keccak256(0, TwoWords) + } + + // Retrieve appropriate typehash constant based on height. + bytes32 rootTypeHash = _lookupBulkOrderTypehash(height); + + // Use the typehash and the root hash to derive final bulk order hash. + assembly { + mstore(0, rootTypeHash) + mstore(OneWord, root) + bulkOrderHash := keccak256(0, TwoWords) + } + } + + /** + * @dev Internal pure function to look up one of twenty-four potential bulk + * order typehash constants based on the height of the bulk order tree. + * Note that values between one and twenty-four are supported, which is + * enforced by _isValidBulkOrderSize. + * + * @param _treeHeight The height of the bulk order tree. The value must be + * between one and twenty-four. + * + * @return _typeHash The EIP-712 typehash for the bulk order type with the + * given height. + */ + function _lookupBulkOrderTypehash( + uint256 _treeHeight + ) internal pure returns (bytes32 _typeHash) { + // Utilize assembly to efficiently retrieve correct bulk order typehash. + assembly { + // Use a Yul function to enable use of the `leave` keyword + // to stop searching once the appropriate type hash is found. + function lookupTypeHash(treeHeight) -> typeHash { + // Handle tree heights one through eight. + if lt(treeHeight, 9) { + // Handle tree heights one through four. + if lt(treeHeight, 5) { + // Handle tree heights one and two. + if lt(treeHeight, 3) { + // Utilize branchless logic to determine typehash. + typeHash := ternary( + eq(treeHeight, 1), + BulkOrder_Typehash_Height_One, + BulkOrder_Typehash_Height_Two + ) + + // Exit the function once typehash has been located. + leave + } + + // Handle height three and four via branchless logic. + typeHash := ternary( + eq(treeHeight, 3), + BulkOrder_Typehash_Height_Three, + BulkOrder_Typehash_Height_Four + ) + + // Exit the function once typehash has been located. + leave + } + + // Handle tree height five and six. + if lt(treeHeight, 7) { + // Utilize branchless logic to determine typehash. + typeHash := ternary( + eq(treeHeight, 5), + BulkOrder_Typehash_Height_Five, + BulkOrder_Typehash_Height_Six + ) + + // Exit the function once typehash has been located. + leave + } + + // Handle height seven and eight via branchless logic. + typeHash := ternary( + eq(treeHeight, 7), + BulkOrder_Typehash_Height_Seven, + BulkOrder_Typehash_Height_Eight + ) + + // Exit the function once typehash has been located. + leave + } + + // Handle tree height nine through sixteen. + if lt(treeHeight, 17) { + // Handle tree height nine through twelve. + if lt(treeHeight, 13) { + // Handle tree height nine and ten. + if lt(treeHeight, 11) { + // Utilize branchless logic to determine typehash. + typeHash := ternary( + eq(treeHeight, 9), + BulkOrder_Typehash_Height_Nine, + BulkOrder_Typehash_Height_Ten + ) + + // Exit the function once typehash has been located. + leave + } + + // Handle height eleven and twelve via branchless logic. + typeHash := ternary( + eq(treeHeight, 11), + BulkOrder_Typehash_Height_Eleven, + BulkOrder_Typehash_Height_Twelve + ) + + // Exit the function once typehash has been located. + leave + } + + // Handle tree height thirteen and fourteen. + if lt(treeHeight, 15) { + // Utilize branchless logic to determine typehash. + typeHash := ternary( + eq(treeHeight, 13), + BulkOrder_Typehash_Height_Thirteen, + BulkOrder_Typehash_Height_Fourteen + ) + + // Exit the function once typehash has been located. + leave + } + // Handle height fifteen and sixteen via branchless logic. + typeHash := ternary( + eq(treeHeight, 15), + BulkOrder_Typehash_Height_Fifteen, + BulkOrder_Typehash_Height_Sixteen + ) + + // Exit the function once typehash has been located. + leave + } + + // Handle tree height seventeen through twenty. + if lt(treeHeight, 21) { + // Handle tree height seventeen and eighteen. + if lt(treeHeight, 19) { + // Utilize branchless logic to determine typehash. + typeHash := ternary( + eq(treeHeight, 17), + BulkOrder_Typehash_Height_Seventeen, + BulkOrder_Typehash_Height_Eighteen + ) + + // Exit the function once typehash has been located. + leave + } + + // Handle height nineteen and twenty via branchless logic. + typeHash := ternary( + eq(treeHeight, 19), + BulkOrder_Typehash_Height_Nineteen, + BulkOrder_Typehash_Height_Twenty + ) + + // Exit the function once typehash has been located. + leave + } + + // Handle tree height twenty-one and twenty-two. + if lt(treeHeight, 23) { + // Utilize branchless logic to determine typehash. + typeHash := ternary( + eq(treeHeight, 21), + BulkOrder_Typehash_Height_TwentyOne, + BulkOrder_Typehash_Height_TwentyTwo + ) + + // Exit the function once typehash has been located. + leave + } + + // Handle height twenty-three & twenty-four w/ branchless logic. + typeHash := ternary( + eq(treeHeight, 23), + BulkOrder_Typehash_Height_TwentyThree, + BulkOrder_Typehash_Height_TwentyFour + ) + + // Exit the function once typehash has been located. + leave + } + + // Implement ternary conditional using branchless logic. + function ternary(cond, ifTrue, ifFalse) -> c { + c := xor(ifFalse, mul(cond, xor(ifFalse, ifTrue))) + } + + // Look up the typehash using the supplied tree height. + _typeHash := lookupTypeHash(_treeHeight) + } + } + + /** + * @dev Internal view function to ensure that the supplied consideration + * array length on a given set of order parameters is not less than the + * original consideration array length for that order and to retrieve + * the current counter for a given order's offerer and zone and use it + * to derive the order hash. + * + * @param orderParameters The parameters of the order to hash. + * + * @return The hash. + */ + function _assertConsiderationLengthAndGetOrderHash( + OrderParameters memory orderParameters, + SeaportInterface seaport + ) internal view returns (bytes32) { + // Ensure supplied consideration array length is not less than original. + _assertConsiderationLengthIsNotLessThanOriginalConsiderationLength( + orderParameters.consideration.length, + orderParameters.totalOriginalConsiderationItems + ); + + // Derive and return order hash using current counter for the offerer. + return + _deriveOrderHash( + orderParameters, + _getCounter(seaport, orderParameters.offerer), + seaport + ); + } + + function _getCounter( + SeaportInterface seaport, + address offerer + ) internal view returns (uint256) { + return seaport.getCounter(offerer); + } + + function _deriveOrderHash( + OrderParameters memory orderParameters, + uint256 counter, + SeaportInterface seaport + ) internal view returns (bytes32 orderHash) { + return + seaport.getOrderHash(_toOrderComponents(orderParameters, counter)); + } + + /** + * @dev Converts an OrderParameters struct into an OrderComponents struct. + * + * @param parameters the OrderParameters struct to convert + * @param counter the counter to use for the OrderComponents struct + * + * @return components the OrderComponents struct + */ + function _toOrderComponents( + OrderParameters memory parameters, + uint256 counter + ) internal pure returns (OrderComponents memory components) { + components.offerer = parameters.offerer; + components.zone = parameters.zone; + components.offer = parameters.offer; + components.consideration = parameters.consideration; + components.orderType = parameters.orderType; + components.startTime = parameters.startTime; + components.endTime = parameters.endTime; + components.zoneHash = parameters.zoneHash; + components.salt = parameters.salt; + components.conduitKey = parameters.conduitKey; + components.counter = counter; + } + + /** + * @dev Internal pure function to efficiently derive an digest to sign for + * an order in accordance with EIP-712. + * + * @param domainSeparator The domain separator. + * @param orderHash The order hash. + * + * @return value The hash. + */ + function _deriveEIP712Digest( + bytes32 domainSeparator, + bytes32 orderHash + ) internal pure returns (bytes32 value) { + // Leverage scratch space to perform an efficient hash. + assembly { + // Place the EIP-712 prefix at the start of scratch space. + mstore(0, EIP_712_PREFIX) + + // Place the domain separator in the next region of scratch space. + mstore(EIP712_DomainSeparator_offset, domainSeparator) + + // Place the order hash in scratch space, spilling into the first + // two bytes of the free memory pointer — this should never be set + // as memory cannot be expanded to that size, and will be zeroed out + // after the hash is performed. + mstore(EIP712_OrderHash_offset, orderHash) + + // Hash the relevant region (65 bytes). + value := keccak256(0, EIP712_DigestPayload_size) + + // Clear out the dirtied bits in the memory pointer. + mstore(EIP712_OrderHash_offset, 0) + } + } + + /** + * @dev Internal pure function to ensure that the supplied consideration + * array length for an order to be fulfilled is not less than the + * original consideration array length for that order. + * + * @param suppliedConsiderationItemTotal The number of consideration items + * supplied when fulfilling the order. + * @param originalConsiderationItemTotal The number of consideration items + * supplied on initial order creation. + */ + function _assertConsiderationLengthIsNotLessThanOriginalConsiderationLength( + uint256 suppliedConsiderationItemTotal, + uint256 originalConsiderationItemTotal + ) internal pure { + // Ensure supplied consideration array length is not less than original. + if (suppliedConsiderationItemTotal < originalConsiderationItemTotal) { + _revertMissingOriginalConsiderationItems(); + } + } +} diff --git a/contracts/seaport/helpers/order-validator/lib/SafeStaticCall.sol b/contracts/seaport/helpers/order-validator/lib/SafeStaticCall.sol new file mode 100644 index 00000000..1963e01a --- /dev/null +++ b/contracts/seaport/helpers/order-validator/lib/SafeStaticCall.sol @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.10; + +library SafeStaticCall { + function safeStaticCallBool( + address target, + bytes memory callData, + bool expectedReturn + ) internal view returns (bool) { + (bool success, bytes memory res) = target.staticcall(callData); + if (!success) return false; + if (res.length != 32) return false; + + if ( + bytes32(res) & + 0x0000000000000000000000000000000000000000000000000000000000000001 != + bytes32(res) + ) { + return false; + } + + return expectedReturn ? res[31] == 0x01 : res[31] == 0; + } + + function safeStaticCallAddress( + address target, + bytes memory callData, + address expectedReturn + ) internal view returns (bool) { + (bool success, bytes memory res) = target.staticcall(callData); + if (!success) return false; + if (res.length != 32) return false; + + if ( + bytes32(res) & + 0x000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF != + bytes32(res) + ) { + // Ensure only 20 bytes used + return false; + } + + return abi.decode(res, (address)) == expectedReturn; + } + + function safeStaticCallUint256( + address target, + bytes memory callData, + uint256 minExpectedReturn + ) internal view returns (bool) { + (bool success, bytes memory res) = target.staticcall(callData); + if (!success) return false; + if (res.length != 32) return false; + + return abi.decode(res, (uint256)) >= minExpectedReturn; + } + + function safeStaticCallBytes4( + address target, + bytes memory callData, + bytes4 expectedReturn + ) internal view returns (bool) { + (bool success, bytes memory res) = target.staticcall(callData); + if (!success) return false; + if (res.length != 32) return false; + if ( + bytes32(res) & + 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 != + bytes32(res) + ) { + // Ensure only 4 bytes used + return false; + } + + return abi.decode(res, (bytes4)) == expectedReturn; + } +} diff --git a/contracts/seaport/helpers/order-validator/lib/SeaportValidatorHelper.sol b/contracts/seaport/helpers/order-validator/lib/SeaportValidatorHelper.sol new file mode 100644 index 00000000..9a47d27a --- /dev/null +++ b/contracts/seaport/helpers/order-validator/lib/SeaportValidatorHelper.sol @@ -0,0 +1,958 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { ItemType } from "seaport-types/src/lib/ConsiderationEnums.sol"; +import { + Order, + OrderParameters, + BasicOrderParameters, + OfferItem, + ConsiderationItem, + Schema, + ZoneParameters +} from "seaport-types/src/lib/ConsiderationStructs.sol"; +import { ConsiderationTypeHashes } from "./ConsiderationTypeHashes.sol"; +import { + ConsiderationInterface +} from "seaport-types/src/interfaces/ConsiderationInterface.sol"; +import { + ConduitControllerInterface +} from "seaport-types/src/interfaces/ConduitControllerInterface.sol"; +import { + ContractOffererInterface +} from "seaport-types/src/interfaces/ContractOffererInterface.sol"; +import { ZoneInterface } from "seaport-types/src/interfaces/ZoneInterface.sol"; +import { GettersAndDerivers } from "seaport-core/src/lib/GettersAndDerivers.sol"; +import { + SeaportValidatorInterface +} from "../lib/SeaportValidatorInterface.sol"; +import { ZoneInterface } from "seaport-types/src/interfaces/ZoneInterface.sol"; +import { + ERC20Interface, + ERC721Interface, + ERC1155Interface +} from "seaport-types/src/interfaces/AbridgedTokenInterfaces.sol"; +import { IERC165 } from "@openzeppelin/contracts@seaport/interfaces/IERC165.sol"; +import { IERC2981 } from "@openzeppelin/contracts/interfaces/IERC2981.sol"; +import { + ErrorsAndWarnings, + ErrorsAndWarningsLib +} from "../lib/ErrorsAndWarnings.sol"; +import { SafeStaticCall } from "../lib/SafeStaticCall.sol"; +import { Murky } from "../lib/Murky.sol"; +import { + IssueParser, + ValidationConfiguration, + TimeIssue, + StatusIssue, + OfferIssue, + ContractOffererIssue, + ConsiderationIssue, + PrimaryFeeIssue, + ERC721Issue, + ERC1155Issue, + ERC20Issue, + NativeIssue, + ZoneIssue, + ConduitIssue, + CreatorFeeIssue, + SignatureIssue, + GenericIssue, + ConsiderationItemConfiguration +} from "./SeaportValidatorTypes.sol"; +import { Verifiers } from "seaport-core/src/lib/Verifiers.sol"; + +/** + * @title SeaportValidator + * @author OpenSea Protocol Team + * @notice SeaportValidatorHelper assists in advanced validation to seaport orders. + */ +contract SeaportValidatorHelper is Murky { + using ErrorsAndWarningsLib for ErrorsAndWarnings; + using SafeStaticCall for address; + using IssueParser for *; + + /// @notice Ethereum creator fee engine address + CreatorFeeEngineInterface public immutable creatorFeeEngine; + + bytes4 public constant ERC20_INTERFACE_ID = 0x36372b07; + + bytes4 public constant ERC721_INTERFACE_ID = 0x80ac58cd; + + bytes4 public constant ERC1155_INTERFACE_ID = 0xd9b67a26; + + constructor() { + address creatorFeeEngineAddress; + if (block.chainid == 1 || block.chainid == 31337) { + creatorFeeEngineAddress = 0x0385603ab55642cb4Dd5De3aE9e306809991804f; + } else if (block.chainid == 3) { + // Ropsten + creatorFeeEngineAddress = 0xFf5A6F7f36764aAD301B7C9E85A5277614Df5E26; + } else if (block.chainid == 4) { + // Rinkeby + creatorFeeEngineAddress = 0x8d17687ea9a6bb6efA24ec11DcFab01661b2ddcd; + } else if (block.chainid == 5) { + // Goerli + creatorFeeEngineAddress = 0xe7c9Cb6D966f76f3B5142167088927Bf34966a1f; + } else if (block.chainid == 42) { + // Kovan + creatorFeeEngineAddress = 0x54D88324cBedfFe1e62c9A59eBb310A11C295198; + } else if (block.chainid == 137) { + // Polygon + creatorFeeEngineAddress = 0x28EdFcF0Be7E86b07493466e7631a213bDe8eEF2; + } else if (block.chainid == 80001) { + // Mumbai + creatorFeeEngineAddress = 0x0a01E11887f727D1b1Cd81251eeEE9BEE4262D07; + } else { + // No creator fee engine for this chain + creatorFeeEngineAddress = address(0); + } + + creatorFeeEngine = CreatorFeeEngineInterface(creatorFeeEngineAddress); + } + + /** + * @notice Strict validation operates under tight assumptions. It validates primary + * fee, creator fee, private sale consideration, and overall order format. + * @dev Only checks first fee recipient provided by CreatorFeeEngine. + * Order of consideration items must be as follows: + * 1. Primary consideration + * 2. Primary fee + * 3. Creator fee + * 4. Private sale consideration + * @param orderParameters The parameters for the order to validate. + * @param primaryFeeRecipient The primary fee recipient. Set to null address for no primary fee. + * @param primaryFeeBips The primary fee in BIPs. + * @param checkCreatorFee Should check for creator fee. If true, creator fee must be present as + * according to creator fee engine. If false, must not have creator fee. + * @return errorsAndWarnings The errors and warnings. + */ + function validateStrictLogic( + OrderParameters memory orderParameters, + address primaryFeeRecipient, + uint256 primaryFeeBips, + bool checkCreatorFee + ) public view returns (ErrorsAndWarnings memory errorsAndWarnings) { + errorsAndWarnings = ErrorsAndWarnings(new uint16[](0), new uint16[](0)); + + // Check that order matches the required format (listing or offer) + { + bool canCheckFee = true; + // Single offer item and at least one consideration + if ( + orderParameters.offer.length != 1 || + orderParameters.consideration.length == 0 + ) { + // Not listing or offer, can't check fees + canCheckFee = false; + } else if ( + // Can't have both items be fungible + isPaymentToken(orderParameters.offer[0].itemType) && + isPaymentToken(orderParameters.consideration[0].itemType) + ) { + // Not listing or offer, can't check fees + canCheckFee = false; + } else if ( + // Can't have both items be non-fungible + !isPaymentToken(orderParameters.offer[0].itemType) && + !isPaymentToken(orderParameters.consideration[0].itemType) + ) { + // Not listing or offer, can't check fees + canCheckFee = false; + } + if (!canCheckFee) { + // Does not match required format + errorsAndWarnings.addError( + GenericIssue.InvalidOrderFormat.parseInt() + ); + return errorsAndWarnings; + } + } + + // Validate secondary consideration items (fees) + ( + uint256 tertiaryConsiderationIndex, + ErrorsAndWarnings memory errorsAndWarningsLocal + ) = _validateSecondaryConsiderationItems( + orderParameters, + ConsiderationItemConfiguration({ + primaryFeeRecipient: primaryFeeRecipient, + primaryFeeBips: primaryFeeBips, + checkCreatorFee: checkCreatorFee + }) + ); + + errorsAndWarnings.concat(errorsAndWarningsLocal); + + // Validate tertiary consideration items if not 0 (0 indicates error). + // Only if no prior errors + if (tertiaryConsiderationIndex != 0) { + errorsAndWarnings.concat( + _validateTertiaryConsiderationItems( + orderParameters, + tertiaryConsiderationIndex + ) + ); + } + } + + /** + * @notice Validate all consideration items for an order + * @param orderParameters The parameters for the order to validate + * @return errorsAndWarnings The errors and warnings + */ + function validateConsiderationItems( + OrderParameters memory orderParameters, + address seaportAddress + ) public view returns (ErrorsAndWarnings memory errorsAndWarnings) { + errorsAndWarnings = ErrorsAndWarnings(new uint16[](0), new uint16[](0)); + + // You must have a consideration item + if (orderParameters.consideration.length == 0) { + errorsAndWarnings.addWarning( + ConsiderationIssue.ZeroItems.parseInt() + ); + return errorsAndWarnings; + } + + // Declare a boolean to check if offerer is receiving at least + // one consideration item + bool offererReceivingAtLeastOneItem = false; + + // Iterate over each consideration item + for (uint256 i = 0; i < orderParameters.consideration.length; i++) { + // Validate consideration item + errorsAndWarnings.concat( + validateConsiderationItem(orderParameters, i, seaportAddress) + ); + + ConsiderationItem memory considerationItem1 = orderParameters + .consideration[i]; + + // Check if the offerer is the recipient + if (!offererReceivingAtLeastOneItem) { + if (considerationItem1.recipient == orderParameters.offerer) { + offererReceivingAtLeastOneItem = true; + } + } + + // Check for duplicate consideration items + for ( + uint256 j = i + 1; + j < orderParameters.consideration.length; + j++ + ) { + // Iterate over each remaining consideration item + // (previous items already check with this item) + ConsiderationItem memory considerationItem2 = orderParameters + .consideration[j]; + + // Check if itemType, token, id, and recipient are the same + if ( + considerationItem2.itemType == + considerationItem1.itemType && + considerationItem2.token == considerationItem1.token && + considerationItem2.identifierOrCriteria == + considerationItem1.identifierOrCriteria && + considerationItem2.recipient == considerationItem1.recipient + ) { + errorsAndWarnings.addWarning( + // Duplicate consideration item, warning + ConsiderationIssue.DuplicateItem.parseInt() + ); + } + } + } + + if (!offererReceivingAtLeastOneItem) { + // Offerer is not receiving at least one consideration item + errorsAndWarnings.addWarning( + ConsiderationIssue.OffererNotReceivingAtLeastOneItem.parseInt() + ); + } + } + + /** + * @notice Validate a consideration item + * @param orderParameters The parameters for the order to validate + * @param considerationItemIndex The index of the consideration item to validate + * @return errorsAndWarnings The errors and warnings + */ + function validateConsiderationItem( + OrderParameters memory orderParameters, + uint256 considerationItemIndex, + address seaportAddress + ) public view returns (ErrorsAndWarnings memory errorsAndWarnings) { + errorsAndWarnings = ErrorsAndWarnings(new uint16[](0), new uint16[](0)); + + // Validate the consideration item at considerationItemIndex + errorsAndWarnings.concat( + validateConsiderationItemParameters( + orderParameters, + considerationItemIndex, + seaportAddress + ) + ); + } + + /** + * @notice Validates the parameters of a consideration item including contract validation + * @param orderParameters The parameters for the order to validate + * @param considerationItemIndex The index of the consideration item to validate + * @return errorsAndWarnings The errors and warnings + */ + function validateConsiderationItemParameters( + OrderParameters memory orderParameters, + uint256 considerationItemIndex, + address seaportAddress + ) public view returns (ErrorsAndWarnings memory errorsAndWarnings) { + errorsAndWarnings = ErrorsAndWarnings(new uint16[](0), new uint16[](0)); + + ConsiderationItem memory considerationItem = orderParameters + .consideration[considerationItemIndex]; + + // Check if startAmount and endAmount are zero + if ( + considerationItem.startAmount == 0 && + considerationItem.endAmount == 0 + ) { + errorsAndWarnings.addError( + ConsiderationIssue.AmountZero.parseInt() + ); + return errorsAndWarnings; + } + + // Check if the recipient is the null address + if (considerationItem.recipient == address(0)) { + errorsAndWarnings.addError( + ConsiderationIssue.NullRecipient.parseInt() + ); + } + + if ( + considerationItem.startAmount != considerationItem.endAmount && + orderParameters.endTime > orderParameters.startTime + ) { + // Check that amount velocity is not too high. + // Assign larger and smaller amount values + (uint256 maxAmount, uint256 minAmount) = considerationItem + .startAmount > considerationItem.endAmount + ? (considerationItem.startAmount, considerationItem.endAmount) + : (considerationItem.endAmount, considerationItem.startAmount); + + uint256 amountDelta = maxAmount - minAmount; + // delta of time that order exists for + uint256 timeDelta = orderParameters.endTime - + orderParameters.startTime; + + // Velocity scaled by 1e10 for precision + uint256 velocity = (amountDelta * 1e10) / timeDelta; + // gives velocity percentage in hundredth of a basis points per second in terms of larger value + uint256 velocityPercentage = velocity / (maxAmount * 1e4); + + // 278 * 60 * 30 ~= 500,000 + if (velocityPercentage > 278) { + // Over 50% change per 30 min + errorsAndWarnings.addError( + ConsiderationIssue.AmountVelocityHigh.parseInt() + ); + } + // 28 * 60 * 30 ~= 50,000 + else if (velocityPercentage > 28) { + // Over 5% change per 30 min + errorsAndWarnings.addWarning( + ConsiderationIssue.AmountVelocityHigh.parseInt() + ); + } + + // Check for large amount steps + if (minAmount <= 1e15) { + errorsAndWarnings.addWarning( + ConsiderationIssue.AmountStepLarge.parseInt() + ); + } + } + + if (considerationItem.itemType == ItemType.ERC721) { + // ERC721 type requires amounts to be 1 + if ( + considerationItem.startAmount != 1 || + considerationItem.endAmount != 1 + ) { + errorsAndWarnings.addError(ERC721Issue.AmountNotOne.parseInt()); + } + + // Check EIP165 interface + if (!checkInterface(considerationItem.token, ERC721_INTERFACE_ID)) { + errorsAndWarnings.addError(ERC721Issue.InvalidToken.parseInt()); + return errorsAndWarnings; + } + + // Check that token exists + if ( + !considerationItem.token.safeStaticCallUint256( + abi.encodeWithSelector( + ERC721Interface.ownerOf.selector, + considerationItem.identifierOrCriteria + ), + 1 + ) + ) { + // Token does not exist + errorsAndWarnings.addError( + ERC721Issue.IdentifierDNE.parseInt() + ); + } + } else if ( + considerationItem.itemType == ItemType.ERC721_WITH_CRITERIA + ) { + // Check EIP165 interface + if (!checkInterface(considerationItem.token, ERC721_INTERFACE_ID)) { + // Does not implement required interface + errorsAndWarnings.addError(ERC721Issue.InvalidToken.parseInt()); + } + } else if ( + considerationItem.itemType == ItemType.ERC1155 || + considerationItem.itemType == ItemType.ERC1155_WITH_CRITERIA + ) { + // Check EIP165 interface + if ( + !checkInterface(considerationItem.token, ERC1155_INTERFACE_ID) + ) { + // Does not implement required interface + errorsAndWarnings.addError( + ERC1155Issue.InvalidToken.parseInt() + ); + } + } else if (considerationItem.itemType == ItemType.ERC20) { + // ERC20 must have `identifierOrCriteria` be zero + if (considerationItem.identifierOrCriteria != 0) { + errorsAndWarnings.addError( + ERC20Issue.IdentifierNonZero.parseInt() + ); + } + + // Check that it is an ERC20 token. ERC20 will return a uint256 + if ( + !considerationItem.token.safeStaticCallUint256( + abi.encodeWithSelector( + ERC20Interface.allowance.selector, + seaportAddress, + seaportAddress + ), + 0 + ) + ) { + // Not an ERC20 token + errorsAndWarnings.addError(ERC20Issue.InvalidToken.parseInt()); + } + } else { + // Must be native + // NATIVE must have `token` be zero address + if (considerationItem.token != address(0)) { + errorsAndWarnings.addError(NativeIssue.TokenAddress.parseInt()); + } + // NATIVE must have `identifierOrCriteria` be zero + if (considerationItem.identifierOrCriteria != 0) { + errorsAndWarnings.addError( + NativeIssue.IdentifierNonZero.parseInt() + ); + } + } + } + + function _validateSecondaryConsiderationItems( + OrderParameters memory orderParameters, + ConsiderationItemConfiguration memory config + ) + internal + view + returns ( + uint256 /* tertiaryConsiderationIndex */, + ErrorsAndWarnings memory /* errorsAndWarnings */ + ) + { + ErrorsAndWarnings memory errorsAndWarnings = ErrorsAndWarnings( + new uint16[](0), + new uint16[](0) + ); + + // Consideration item to hold expected creator fee info + ConsiderationItem memory creatorFeeConsideration; + + bool primaryFeePresent; + + { + // non-fungible item address + address itemAddress; + // non-fungible item identifier + uint256 itemIdentifier; + // fungible item start amount + uint256 transactionAmountStart; + // fungible item end amount + uint256 transactionAmountEnd; + + if (isPaymentToken(orderParameters.offer[0].itemType)) { + // Offer is an offer. Offer item is fungible and used for fees + creatorFeeConsideration.itemType = orderParameters + .offer[0] + .itemType; + creatorFeeConsideration.token = orderParameters.offer[0].token; + transactionAmountStart = orderParameters.offer[0].startAmount; + transactionAmountEnd = orderParameters.offer[0].endAmount; + + // Set non-fungible information for calculating creator fee + itemAddress = orderParameters.consideration[0].token; + itemIdentifier = orderParameters + .consideration[0] + .identifierOrCriteria; + } else { + // Offer is an offer. Consideration item is fungible and used for fees + creatorFeeConsideration.itemType = orderParameters + .consideration[0] + .itemType; + creatorFeeConsideration.token = orderParameters + .consideration[0] + .token; + transactionAmountStart = orderParameters + .consideration[0] + .startAmount; + transactionAmountEnd = orderParameters + .consideration[0] + .endAmount; + + // Set non-fungible information for calculating creator fees + itemAddress = orderParameters.offer[0].token; + itemIdentifier = orderParameters.offer[0].identifierOrCriteria; + } + + // Store flag if primary fee is present + primaryFeePresent = false; + { + // Calculate primary fee start and end amounts + uint256 primaryFeeStartAmount = (transactionAmountStart * + config.primaryFeeBips) / 10000; + uint256 primaryFeeEndAmount = (transactionAmountEnd * + config.primaryFeeBips) / 10000; + + // Check if primary fee check is desired. Skip if calculated amount is zero. + if ( + config.primaryFeeRecipient != address(0) && + (primaryFeeStartAmount > 0 || primaryFeeEndAmount > 0) + ) { + // Ensure primary fee is present + if (orderParameters.consideration.length < 2) { + errorsAndWarnings.addError( + PrimaryFeeIssue.Missing.parseInt() + ); + return (0, errorsAndWarnings); + } + primaryFeePresent = true; + + ConsiderationItem memory primaryFeeItem = orderParameters + .consideration[1]; + + // Check item type + if ( + primaryFeeItem.itemType != + creatorFeeConsideration.itemType + ) { + errorsAndWarnings.addError( + PrimaryFeeIssue.ItemType.parseInt() + ); + return (0, errorsAndWarnings); + } + // Check token + if (primaryFeeItem.token != creatorFeeConsideration.token) { + errorsAndWarnings.addError( + PrimaryFeeIssue.Token.parseInt() + ); + } + // Check start amount + if (primaryFeeItem.startAmount < primaryFeeStartAmount) { + errorsAndWarnings.addError( + PrimaryFeeIssue.StartAmount.parseInt() + ); + } + // Check end amount + if (primaryFeeItem.endAmount < primaryFeeEndAmount) { + errorsAndWarnings.addError( + PrimaryFeeIssue.EndAmount.parseInt() + ); + } + // Check recipient + if ( + primaryFeeItem.recipient != config.primaryFeeRecipient + ) { + errorsAndWarnings.addError( + PrimaryFeeIssue.Recipient.parseInt() + ); + } + } + } + + // Check creator fee + ( + creatorFeeConsideration.recipient, + creatorFeeConsideration.startAmount, + creatorFeeConsideration.endAmount + ) = getCreatorFeeInfo( + itemAddress, + itemIdentifier, + transactionAmountStart, + transactionAmountEnd + ); + } + + // Flag indicating if creator fee is present in considerations + bool creatorFeePresent = false; + + // Determine if should check for creator fee + if ( + creatorFeeConsideration.recipient != address(0) && + config.checkCreatorFee && + (creatorFeeConsideration.startAmount > 0 || + creatorFeeConsideration.endAmount > 0) + ) { + // Calculate index of creator fee consideration item + uint16 creatorFeeConsiderationIndex = primaryFeePresent ? 2 : 1; // 2 if primary fee, ow 1 + + // Check that creator fee consideration item exists + if ( + orderParameters.consideration.length - 1 < + creatorFeeConsiderationIndex + ) { + errorsAndWarnings.addError(CreatorFeeIssue.Missing.parseInt()); + return (0, errorsAndWarnings); + } + + ConsiderationItem memory creatorFeeItem = orderParameters + .consideration[creatorFeeConsiderationIndex]; + + creatorFeePresent = true; + + // Check type + if (creatorFeeItem.itemType != creatorFeeConsideration.itemType) { + errorsAndWarnings.addError(CreatorFeeIssue.ItemType.parseInt()); + return (0, errorsAndWarnings); + } + // Check token + if (creatorFeeItem.token != creatorFeeConsideration.token) { + errorsAndWarnings.addError(CreatorFeeIssue.Token.parseInt()); + } + // Check start amount + if ( + creatorFeeItem.startAmount < creatorFeeConsideration.startAmount + ) { + errorsAndWarnings.addError( + CreatorFeeIssue.StartAmount.parseInt() + ); + } + // Check end amount + if (creatorFeeItem.endAmount < creatorFeeConsideration.endAmount) { + errorsAndWarnings.addError( + CreatorFeeIssue.EndAmount.parseInt() + ); + } + // Check recipient + if (creatorFeeItem.recipient != creatorFeeConsideration.recipient) { + errorsAndWarnings.addError( + CreatorFeeIssue.Recipient.parseInt() + ); + } + } + + // Calculate index of first tertiary consideration item + uint256 tertiaryConsiderationIndex = 1 + + (primaryFeePresent ? 1 : 0) + + (creatorFeePresent ? 1 : 0); + + return (tertiaryConsiderationIndex, errorsAndWarnings); + } + + /** + * @notice Internal function for validating all consideration items after the fee items. + * Only additional acceptable consideration is private sale. + */ + function _validateTertiaryConsiderationItems( + OrderParameters memory orderParameters, + uint256 considerationItemIndex + ) internal pure returns (ErrorsAndWarnings memory errorsAndWarnings) { + errorsAndWarnings = ErrorsAndWarnings(new uint16[](0), new uint16[](0)); + + if (orderParameters.consideration.length <= considerationItemIndex) { + // No more consideration items + return errorsAndWarnings; + } + + ConsiderationItem memory privateSaleConsideration = orderParameters + .consideration[considerationItemIndex]; + + // Check if offer is payment token. Private sale not possible if so. + if (isPaymentToken(orderParameters.offer[0].itemType)) { + errorsAndWarnings.addError( + ConsiderationIssue.ExtraItems.parseInt() + ); + return errorsAndWarnings; + } + + // Check if private sale to self + if (privateSaleConsideration.recipient == orderParameters.offerer) { + errorsAndWarnings.addError( + ConsiderationIssue.PrivateSaleToSelf.parseInt() + ); + return errorsAndWarnings; + } + + // Ensure that private sale parameters match offer item. + if ( + privateSaleConsideration.itemType != + orderParameters.offer[0].itemType || + privateSaleConsideration.token != orderParameters.offer[0].token || + orderParameters.offer[0].startAmount != + privateSaleConsideration.startAmount || + orderParameters.offer[0].endAmount != + privateSaleConsideration.endAmount || + orderParameters.offer[0].identifierOrCriteria != + privateSaleConsideration.identifierOrCriteria + ) { + // Invalid private sale, say extra consideration item + errorsAndWarnings.addError( + ConsiderationIssue.ExtraItems.parseInt() + ); + return errorsAndWarnings; + } + + errorsAndWarnings.addWarning(ConsiderationIssue.PrivateSale.parseInt()); + + // Should not be any additional consideration items + if (orderParameters.consideration.length - 1 > considerationItemIndex) { + // Extra consideration items + errorsAndWarnings.addError( + ConsiderationIssue.ExtraItems.parseInt() + ); + return errorsAndWarnings; + } + } + + /** + * @notice Fetches the on chain creator fees. + * @dev Uses the creatorFeeEngine when available, otherwise fallback to `IERC2981`. + * @param token The token address + * @param tokenId The token identifier + * @param transactionAmountStart The transaction start amount + * @param transactionAmountEnd The transaction end amount + * @return recipient creator fee recipient + * @return creatorFeeAmountStart creator fee start amount + * @return creatorFeeAmountEnd creator fee end amount + */ + function getCreatorFeeInfo( + address token, + uint256 tokenId, + uint256 transactionAmountStart, + uint256 transactionAmountEnd + ) + public + view + returns ( + address payable recipient, + uint256 creatorFeeAmountStart, + uint256 creatorFeeAmountEnd + ) + { + // Check if creator fee engine is on this chain + if (address(creatorFeeEngine) != address(0)) { + // Creator fee engine may revert if no creator fees are present. + try + creatorFeeEngine.getRoyaltyView( + token, + tokenId, + transactionAmountStart + ) + returns ( + address payable[] memory creatorFeeRecipients, + uint256[] memory creatorFeeAmountsStart + ) { + if (creatorFeeRecipients.length != 0) { + // Use first recipient and amount + recipient = creatorFeeRecipients[0]; + creatorFeeAmountStart = creatorFeeAmountsStart[0]; + } + } catch { + // Creator fee not found + } + + // If fees found for start amount, check end amount + if (recipient != address(0)) { + // Creator fee engine may revert if no creator fees are present. + try + creatorFeeEngine.getRoyaltyView( + token, + tokenId, + transactionAmountEnd + ) + returns ( + address payable[] memory, + uint256[] memory creatorFeeAmountsEnd + ) { + creatorFeeAmountEnd = creatorFeeAmountsEnd[0]; + } catch {} + } + } else { + // Fallback to ERC2981 + { + // Static call to token using ERC2981 + (bool success, bytes memory res) = token.staticcall( + abi.encodeWithSelector( + IERC2981.royaltyInfo.selector, + tokenId, + transactionAmountStart + ) + ); + // Check if call succeeded + if (success) { + // Ensure 64 bytes returned + if (res.length == 64) { + // Decode result and assign recipient and start amount + (recipient, creatorFeeAmountStart) = abi.decode( + res, + (address, uint256) + ); + } + } + } + + // Only check end amount if start amount found + if (recipient != address(0)) { + // Static call to token using ERC2981 + (bool success, bytes memory res) = token.staticcall( + abi.encodeWithSelector( + IERC2981.royaltyInfo.selector, + tokenId, + transactionAmountEnd + ) + ); + // Check if call succeeded + if (success) { + // Ensure 64 bytes returned + if (res.length == 64) { + // Decode result and assign end amount + (, creatorFeeAmountEnd) = abi.decode( + res, + (address, uint256) + ); + } + } + } + } + } + + /** + * @notice Safely check that a contract implements an interface + * @param token The token address to check + * @param interfaceHash The interface hash to check + */ + function checkInterface( + address token, + bytes4 interfaceHash + ) public view returns (bool) { + return + token.safeStaticCallBool( + abi.encodeWithSelector( + IERC165.supportsInterface.selector, + interfaceHash + ), + true + ); + } + + /*////////////////////////////////////////////////////////////// + Merkle Helpers + //////////////////////////////////////////////////////////////*/ + + /** + * @notice Sorts an array of token ids by the keccak256 hash of the id. Required ordering of ids + * for other merkle operations. + * @param includedTokens An array of included token ids. + * @return sortedTokens The sorted `includedTokens` array. + */ + function sortMerkleTokens( + uint256[] memory includedTokens + ) public pure returns (uint256[] memory sortedTokens) { + // Sort token ids by the keccak256 hash of the id + return _sortUint256ByHash(includedTokens); + } + + /** + * @notice Creates a merkle root for includedTokens. + * @dev `includedTokens` must be sorting in strictly ascending order according to the keccak256 hash of the value. + * @return merkleRoot The merkle root + * @return errorsAndWarnings Errors and warnings from the operation + */ + function getMerkleRoot( + uint256[] memory includedTokens + ) + public + pure + returns (bytes32 merkleRoot, ErrorsAndWarnings memory errorsAndWarnings) + { + (merkleRoot, errorsAndWarnings) = _getRoot(includedTokens); + } + + /** + * @notice Creates a merkle proof for the the targetIndex contained in includedTokens. + * @dev `targetIndex` is referring to the index of an element in `includedTokens`. + * `includedTokens` must be sorting in ascending order according to the keccak256 hash of the value. + * @return merkleProof The merkle proof + * @return errorsAndWarnings Errors and warnings from the operation + */ + function getMerkleProof( + uint256[] memory includedTokens, + uint256 targetIndex + ) + public + pure + returns ( + bytes32[] memory merkleProof, + ErrorsAndWarnings memory errorsAndWarnings + ) + { + (merkleProof, errorsAndWarnings) = _getProof( + includedTokens, + targetIndex + ); + } + + /** + * @notice Verifies a merkle proof for the value to prove and given root and proof. + * @dev The `valueToProve` is hashed prior to executing the proof verification. + * @param merkleRoot The root of the merkle tree + * @param merkleProof The merkle proof + * @param valueToProve The value to prove + * @return whether proof is valid + */ + function verifyMerkleProof( + bytes32 merkleRoot, + bytes32[] memory merkleProof, + uint256 valueToProve + ) public pure returns (bool) { + bytes32 hashedValue = keccak256(abi.encode(valueToProve)); + + return _verifyProof(merkleRoot, merkleProof, hashedValue); + } + + function isPaymentToken(ItemType itemType) public pure returns (bool) { + return itemType == ItemType.NATIVE || itemType == ItemType.ERC20; + } +} + +interface CreatorFeeEngineInterface { + function getRoyaltyView( + address tokenAddress, + uint256 tokenId, + uint256 value + ) + external + view + returns (address payable[] memory recipients, uint256[] memory amounts); +} diff --git a/contracts/seaport/helpers/order-validator/lib/SeaportValidatorInterface.sol b/contracts/seaport/helpers/order-validator/lib/SeaportValidatorInterface.sol new file mode 100644 index 00000000..3d0abd32 --- /dev/null +++ b/contracts/seaport/helpers/order-validator/lib/SeaportValidatorInterface.sol @@ -0,0 +1,289 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.10; + +import { ItemType } from "seaport-types/src/lib/ConsiderationEnums.sol"; +import { + Order, + OrderParameters, + ZoneParameters +} from "seaport-types/src/lib/ConsiderationStructs.sol"; +import { ErrorsAndWarnings } from "./ErrorsAndWarnings.sol"; +import { ValidationConfiguration } from "./SeaportValidatorTypes.sol"; + +/** + * @title SeaportValidator + * @notice SeaportValidator validates simple orders that adhere to a set of rules defined below: + * - The order is either a listing or an offer order (one NFT to buy or one NFT to sell). + * - The first consideration is the primary consideration. + * - The order pays up to two fees in the fungible token currency. First fee is primary fee, second is creator fee. + * - In private orders, the last consideration specifies a recipient for the offer item. + * - Offer items must be owned and properly approved by the offerer. + * - Consideration items must exist. + */ +interface SeaportValidatorInterface { + /** + * @notice Conduct a comprehensive validation of the given order. + * @param order The order to validate. + * @return errorsAndWarnings The errors and warnings found in the order. + */ + function isValidOrder( + Order calldata order, + address seaportAddress + ) external view returns (ErrorsAndWarnings memory errorsAndWarnings); + + /** + * @notice Same as `isValidOrder` but allows for more configuration related to fee validation. + */ + function isValidOrderWithConfiguration( + ValidationConfiguration memory validationConfiguration, + Order memory order + ) external view returns (ErrorsAndWarnings memory errorsAndWarnings); + + /** + * @notice Checks if a conduit key is valid. + * @param conduitKey The conduit key to check. + * @return errorsAndWarnings The errors and warnings + */ + function isValidConduit( + bytes32 conduitKey, + address seaportAddress + ) external view returns (ErrorsAndWarnings memory errorsAndWarnings); + + // TODO: Need to add support for order with extra data + /** + * @notice Checks that the zone of an order implements the required interface + * @param orderParameters The parameters for the order to validate + * @return errorsAndWarnings An ErrorsAndWarnings structs with results + */ + function isValidZone( + OrderParameters memory orderParameters + ) external view returns (ErrorsAndWarnings memory errorsAndWarnings); + + function validateSignature( + Order memory order, + address seaportAddress + ) external returns (ErrorsAndWarnings memory errorsAndWarnings); + + function validateSignatureWithCounter( + Order memory order, + uint256 counter, + address seaportAddress + ) external returns (ErrorsAndWarnings memory errorsAndWarnings); + + /** + * @notice Check the time validity of an order + * @param orderParameters The parameters for the order to validate + * @param shortOrderDuration The duration of which an order is considered short + * @param distantOrderExpiration Distant order expiration delta in seconds. + * @return errorsAndWarnings The Issues and warnings + */ + function validateTime( + OrderParameters memory orderParameters, + uint256 shortOrderDuration, + uint256 distantOrderExpiration + ) external view returns (ErrorsAndWarnings memory errorsAndWarnings); + + /** + * @notice Validate the status of an order + * @param orderParameters The parameters for the order to validate + * @return errorsAndWarnings The errors and warnings + */ + function validateOrderStatus( + OrderParameters memory orderParameters, + address seaportAddress + ) external view returns (ErrorsAndWarnings memory errorsAndWarnings); + + /** + * @notice Validate all offer items for an order + * @param orderParameters The parameters for the order to validate + * @return errorsAndWarnings The errors and warnings + */ + function validateOfferItems( + OrderParameters memory orderParameters, + address seaportAddress + ) external view returns (ErrorsAndWarnings memory errorsAndWarnings); + + /** + * @notice Validate all consideration items for an order + * @param orderParameters The parameters for the order to validate + * @return errorsAndWarnings The errors and warnings + */ + function validateConsiderationItems( + OrderParameters memory orderParameters, + address seaportAddress + ) external view returns (ErrorsAndWarnings memory errorsAndWarnings); + + /** + * @notice Strict validation operates under tight assumptions. It validates primary + * fee, creator fee, private sale consideration, and overall order format. + * @dev Only checks first fee recipient provided by CreatorFeeRegistry. + * Order of consideration items must be as follows: + * 1. Primary consideration + * 2. Primary fee + * 3. Creator Fee + * 4. Private sale consideration + * @param orderParameters The parameters for the order to validate. + * @param primaryFeeRecipient The primary fee recipient. Set to null address for no primary fee. + * @param primaryFeeBips The primary fee in BIPs. + * @param checkCreatorFee Should check for creator fee. If true, creator fee must be present as + * according to creator fee engine. If false, must not have creator fee. + * @return errorsAndWarnings The errors and warnings. + */ + function validateStrictLogic( + OrderParameters memory orderParameters, + address primaryFeeRecipient, + uint256 primaryFeeBips, + bool checkCreatorFee + ) external view returns (ErrorsAndWarnings memory errorsAndWarnings); + + /** + * @notice Validate a consideration item + * @param orderParameters The parameters for the order to validate + * @param considerationItemIndex The index of the consideration item to validate + * @return errorsAndWarnings The errors and warnings + */ + function validateConsiderationItem( + OrderParameters memory orderParameters, + uint256 considerationItemIndex, + address seaportAddress + ) external view returns (ErrorsAndWarnings memory errorsAndWarnings); + + /** + * @notice Validates the parameters of a consideration item including contract validation + * @param orderParameters The parameters for the order to validate + * @param considerationItemIndex The index of the consideration item to validate + * @return errorsAndWarnings The errors and warnings + */ + function validateConsiderationItemParameters( + OrderParameters memory orderParameters, + uint256 considerationItemIndex, + address seaportAddress + ) external view returns (ErrorsAndWarnings memory errorsAndWarnings); + + /** + * @notice Validates an offer item + * @param orderParameters The parameters for the order to validate + * @param offerItemIndex The index of the offerItem in offer array to validate + * @return errorsAndWarnings An ErrorsAndWarnings structs with results + */ + function validateOfferItem( + OrderParameters memory orderParameters, + uint256 offerItemIndex, + address seaportAddress + ) external view returns (ErrorsAndWarnings memory errorsAndWarnings); + + /** + * @notice Validates the OfferItem parameters. This includes token contract validation + * @dev OfferItems with criteria are currently not allowed + * @param orderParameters The parameters for the order to validate + * @param offerItemIndex The index of the offerItem in offer array to validate + * @return errorsAndWarnings An ErrorsAndWarnings structs with results + */ + function validateOfferItemParameters( + OrderParameters memory orderParameters, + uint256 offerItemIndex, + address seaportAddress + ) external view returns (ErrorsAndWarnings memory errorsAndWarnings); + + /** + * @notice Validates the OfferItem approvals and balances + * @param orderParameters The parameters for the order to validate + * @param offerItemIndex The index of the offerItem in offer array to validate + * @return errorsAndWarnings An ErrorsAndWarnings structs with results + */ + function validateOfferItemApprovalAndBalance( + OrderParameters memory orderParameters, + uint256 offerItemIndex, + address seaportAddress + ) external view returns (ErrorsAndWarnings memory errorsAndWarnings); + + /** + * @notice Calls validateOrder on the order's zone with the given zoneParameters + * @param orderParameters The parameters for the order to validate + * @param zoneParameters The parameters for the zone to validate + * @return errorsAndWarnings An ErrorsAndWarnings structs with results + */ + function validateOrderWithZone( + OrderParameters memory orderParameters, + ZoneParameters memory zoneParameters + ) external view returns (ErrorsAndWarnings memory errorsAndWarnings); + + /** + * @notice Gets the approval address for the given conduit key + * @param conduitKey Conduit key to get approval address for + * @return errorsAndWarnings An ErrorsAndWarnings structs with results + */ + function getApprovalAddress( + bytes32 conduitKey, + address seaportAddress + ) + external + view + returns (address, ErrorsAndWarnings memory errorsAndWarnings); + + /** + * @notice Safely check that a contract implements an interface + * @param token The token address to check + * @param interfaceHash The interface hash to check + */ + function checkInterface( + address token, + bytes4 interfaceHash + ) external view returns (bool); + + function isPaymentToken(ItemType itemType) external pure returns (bool); + + /*////////////////////////////////////////////////////////////// + Merkle Helpers + //////////////////////////////////////////////////////////////*/ + + /** + * @notice Sorts an array of token ids by the keccak256 hash of the id. Required ordering of ids + * for other merkle operations. + * @param includedTokens An array of included token ids. + * @return sortedTokens The sorted `includedTokens` array. + */ + function sortMerkleTokens( + uint256[] memory includedTokens + ) external view returns (uint256[] memory sortedTokens); + + /** + * @notice Creates a merkle root for includedTokens. + * @dev `includedTokens` must be sorting in strictly ascending order according to the keccak256 hash of the value. + * @return merkleRoot The merkle root + * @return errorsAndWarnings Errors and warnings from the operation + */ + function getMerkleRoot( + uint256[] memory includedTokens + ) + external + view + returns ( + bytes32 merkleRoot, + ErrorsAndWarnings memory errorsAndWarnings + ); + + /** + * @notice Creates a merkle proof for the the targetIndex contained in includedTokens. + * @dev `targetIndex` is referring to the index of an element in `includedTokens`. + * `includedTokens` must be sorting in ascending order according to the keccak256 hash of the value. + * @return merkleProof The merkle proof + * @return errorsAndWarnings Errors and warnings from the operation + */ + function getMerkleProof( + uint256[] memory includedTokens, + uint256 targetIndex + ) + external + view + returns ( + bytes32[] memory merkleProof, + ErrorsAndWarnings memory errorsAndWarnings + ); + + function verifyMerkleProof( + bytes32 merkleRoot, + bytes32[] memory merkleProof, + uint256 valueToProve + ) external view returns (bool); +} diff --git a/contracts/seaport/helpers/order-validator/lib/SeaportValidatorTypes.sol b/contracts/seaport/helpers/order-validator/lib/SeaportValidatorTypes.sol new file mode 100644 index 00000000..065e8933 --- /dev/null +++ b/contracts/seaport/helpers/order-validator/lib/SeaportValidatorTypes.sol @@ -0,0 +1,508 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.10; + +struct ValidationConfiguration { + /// @notice The seaport address. + address seaport; + /// @notice Recipient for primary fee payments. + address primaryFeeRecipient; + /// @notice Bips for primary fee payments. + uint256 primaryFeeBips; + /// @notice Should creator fees be checked? + bool checkCreatorFee; + /// @notice Should strict validation be skipped? + bool skipStrictValidation; + /// @notice Short order duration in seconds + uint256 shortOrderDuration; + /// @notice Distant order expiration delta in seconds. Warning if order expires in longer than this. + uint256 distantOrderExpiration; +} + +struct ConsiderationItemConfiguration { + address primaryFeeRecipient; + uint256 primaryFeeBips; + bool checkCreatorFee; +} + +enum GenericIssue { + InvalidOrderFormat // 100 +} + +enum ERC20Issue { + IdentifierNonZero, // 200 + InvalidToken, // 201 + InsufficientAllowance, // 202 + InsufficientBalance // 203 +} + +enum ERC721Issue { + AmountNotOne, // 300 + InvalidToken, // 301 + IdentifierDNE, // 302 + NotOwner, // 303 + NotApproved, // 304 + CriteriaNotPartialFill // 305 +} + +enum ERC1155Issue { + InvalidToken, // 400 + NotApproved, // 401 + InsufficientBalance // 402 +} + +enum ConsiderationIssue { + AmountZero, // 500 + NullRecipient, // 501 + ExtraItems, // 502 + PrivateSaleToSelf, // 503 + ZeroItems, // 504 + DuplicateItem, // 505 + OffererNotReceivingAtLeastOneItem, // 506 + PrivateSale, // 507 + AmountVelocityHigh, // 508 + AmountStepLarge // 509 +} + +enum OfferIssue { + ZeroItems, // 600 + AmountZero, // 601 + MoreThanOneItem, // 602 + NativeItem, // 603 + DuplicateItem, // 604 + AmountVelocityHigh, // 605 + AmountStepLarge // 606 +} + +enum PrimaryFeeIssue { + Missing, // 700 + ItemType, // 701 + Token, // 702 + StartAmount, // 703 + EndAmount, // 704 + Recipient // 705 +} + +enum StatusIssue { + Cancelled, // 800 + FullyFilled, // 801 + ContractOrder // 802 +} + +enum TimeIssue { + EndTimeBeforeStartTime, // 900 + Expired, // 901 + DistantExpiration, // 902 + NotActive, // 903 + ShortOrder // 904 +} + +enum ConduitIssue { + KeyInvalid, // 1000 + MissingSeaportChannel // 1001 +} + +enum SignatureIssue { + Invalid, // 1100 + ContractOrder, // 1101 + LowCounter, // 1102 + HighCounter, // 1103 + OriginalConsiderationItems // 1104 +} + +enum CreatorFeeIssue { + Missing, // 1200 + ItemType, // 1201 + Token, // 1202 + StartAmount, // 1203 + EndAmount, // 1204 + Recipient // 1205 +} + +enum NativeIssue { + TokenAddress, // 1300 + IdentifierNonZero, // 1301 + InsufficientBalance // 1302 +} + +enum ZoneIssue { + InvalidZone, // 1400 + RejectedOrder, // 1401 + NotSet, // 1402 + EOAZone // 1403 +} + +enum MerkleIssue { + SingleLeaf, // 1500 + Unsorted // 1501 +} + +enum ContractOffererIssue { + InvalidContractOfferer // 1600 +} + +/** + * @title IssueParser - parse issues into integers + * @notice Implements a `parseInt` function for each issue type. + * offsets the enum value to place within the issue range. + */ +library IssueParser { + function parseInt(GenericIssue err) internal pure returns (uint16) { + return uint16(err) + 100; + } + + function parseInt(ERC20Issue err) internal pure returns (uint16) { + return uint16(err) + 200; + } + + function parseInt(ERC721Issue err) internal pure returns (uint16) { + return uint16(err) + 300; + } + + function parseInt(ERC1155Issue err) internal pure returns (uint16) { + return uint16(err) + 400; + } + + function parseInt(ConsiderationIssue err) internal pure returns (uint16) { + return uint16(err) + 500; + } + + function parseInt(OfferIssue err) internal pure returns (uint16) { + return uint16(err) + 600; + } + + function parseInt(PrimaryFeeIssue err) internal pure returns (uint16) { + return uint16(err) + 700; + } + + function parseInt(StatusIssue err) internal pure returns (uint16) { + return uint16(err) + 800; + } + + function parseInt(TimeIssue err) internal pure returns (uint16) { + return uint16(err) + 900; + } + + function parseInt(ConduitIssue err) internal pure returns (uint16) { + return uint16(err) + 1000; + } + + function parseInt(SignatureIssue err) internal pure returns (uint16) { + return uint16(err) + 1100; + } + + function parseInt(CreatorFeeIssue err) internal pure returns (uint16) { + return uint16(err) + 1200; + } + + function parseInt(NativeIssue err) internal pure returns (uint16) { + return uint16(err) + 1300; + } + + function parseInt(ZoneIssue err) internal pure returns (uint16) { + return uint16(err) + 1400; + } + + function parseInt(MerkleIssue err) internal pure returns (uint16) { + return uint16(err) + 1500; + } + + function parseInt(ContractOffererIssue err) internal pure returns (uint16) { + return uint16(err) + 1600; + } +} + +library IssueStringHelpers { + function toString(GenericIssue id) internal pure returns (string memory) { + string memory code; + if (id == GenericIssue.InvalidOrderFormat) { + code = "InvalidOrderFormat"; + } + return string.concat("GenericIssue: ", code); + } + + function toString(ERC20Issue id) internal pure returns (string memory) { + string memory code; + if (id == ERC20Issue.IdentifierNonZero) { + code = "IdentifierNonZero"; + } else if (id == ERC20Issue.InvalidToken) { + code = "InvalidToken"; + } else if (id == ERC20Issue.InsufficientAllowance) { + code = "InsufficientAllowance"; + } else if (id == ERC20Issue.InsufficientBalance) { + code = "InsufficientBalance"; + } + return string.concat("ERC20Issue: ", code); + } + + function toString(ERC721Issue id) internal pure returns (string memory) { + string memory code; + if (id == ERC721Issue.AmountNotOne) { + code = "AmountNotOne"; + } else if (id == ERC721Issue.InvalidToken) { + code = "InvalidToken"; + } else if (id == ERC721Issue.IdentifierDNE) { + code = "IdentifierDNE"; + } else if (id == ERC721Issue.NotOwner) { + code = "NotOwner"; + } else if (id == ERC721Issue.NotApproved) { + code = "NotApproved"; + } else if (id == ERC721Issue.CriteriaNotPartialFill) { + code = "CriteriaNotPartialFill"; + } + return string.concat("ERC721Issue: ", code); + } + + function toString(ERC1155Issue id) internal pure returns (string memory) { + string memory code; + if (id == ERC1155Issue.InvalidToken) { + code = "InvalidToken"; + } else if (id == ERC1155Issue.NotApproved) { + code = "NotApproved"; + } else if (id == ERC1155Issue.InsufficientBalance) { + code = "InsufficientBalance"; + } + return string.concat("ERC1155Issue: ", code); + } + + function toString( + ConsiderationIssue id + ) internal pure returns (string memory) { + string memory code; + if (id == ConsiderationIssue.AmountZero) { + code = "AmountZero"; + } else if (id == ConsiderationIssue.NullRecipient) { + code = "NullRecipient"; + } else if (id == ConsiderationIssue.ExtraItems) { + code = "ExtraItems"; + } else if (id == ConsiderationIssue.PrivateSaleToSelf) { + code = "PrivateSaleToSelf"; + } else if (id == ConsiderationIssue.ZeroItems) { + code = "ZeroItems"; + } else if (id == ConsiderationIssue.DuplicateItem) { + code = "DuplicateItem"; + } else if (id == ConsiderationIssue.OffererNotReceivingAtLeastOneItem) { + code = "OffererNotReceivingAtLeastOneItem"; + } else if (id == ConsiderationIssue.PrivateSale) { + code = "PrivateSale"; + } else if (id == ConsiderationIssue.AmountVelocityHigh) { + code = "AmountVelocityHigh"; + } else if (id == ConsiderationIssue.AmountStepLarge) { + code = "AmountStepLarge"; + } + return string.concat("ConsiderationIssue: ", code); + } + + function toString(OfferIssue id) internal pure returns (string memory) { + string memory code; + if (id == OfferIssue.ZeroItems) { + code = "ZeroItems"; + } else if (id == OfferIssue.AmountZero) { + code = "AmountZero"; + } else if (id == OfferIssue.MoreThanOneItem) { + code = "MoreThanOneItem"; + } else if (id == OfferIssue.NativeItem) { + code = "NativeItem"; + } else if (id == OfferIssue.DuplicateItem) { + code = "DuplicateItem"; + } else if (id == OfferIssue.AmountVelocityHigh) { + code = "AmountVelocityHigh"; + } else if (id == OfferIssue.AmountStepLarge) { + code = "AmountStepLarge"; + } + return string.concat("OfferIssue: ", code); + } + + function toString( + PrimaryFeeIssue id + ) internal pure returns (string memory) { + string memory code; + if (id == PrimaryFeeIssue.Missing) { + code = "Missing"; + } else if (id == PrimaryFeeIssue.ItemType) { + code = "ItemType"; + } else if (id == PrimaryFeeIssue.Token) { + code = "Token"; + } else if (id == PrimaryFeeIssue.StartAmount) { + code = "StartAmount"; + } else if (id == PrimaryFeeIssue.EndAmount) { + code = "EndAmount"; + } else if (id == PrimaryFeeIssue.Recipient) { + code = "Recipient"; + } + return string.concat("PrimaryFeeIssue: ", code); + } + + function toString(StatusIssue id) internal pure returns (string memory) { + string memory code; + if (id == StatusIssue.Cancelled) { + code = "Cancelled"; + } else if (id == StatusIssue.FullyFilled) { + code = "FullyFilled"; + } else if (id == StatusIssue.ContractOrder) { + code = "ContractOrder"; + } + return string.concat("StatusIssue: ", code); + } + + function toString(TimeIssue id) internal pure returns (string memory) { + string memory code; + if (id == TimeIssue.EndTimeBeforeStartTime) { + code = "EndTimeBeforeStartTime"; + } else if (id == TimeIssue.Expired) { + code = "Expired"; + } else if (id == TimeIssue.DistantExpiration) { + code = "DistantExpiration"; + } else if (id == TimeIssue.NotActive) { + code = "NotActive"; + } else if (id == TimeIssue.ShortOrder) { + code = "ShortOrder"; + } + return string.concat("TimeIssue: ", code); + } + + function toString(ConduitIssue id) internal pure returns (string memory) { + string memory code; + if (id == ConduitIssue.KeyInvalid) { + code = "KeyInvalid"; + } else if (id == ConduitIssue.MissingSeaportChannel) { + code = "MissingSeaportChannel"; + } + return string.concat("ConduitIssue: ", code); + } + + function toString(SignatureIssue id) internal pure returns (string memory) { + string memory code; + if (id == SignatureIssue.Invalid) { + code = "Invalid"; + } else if (id == SignatureIssue.ContractOrder) { + code = "ContractOrder"; + } else if (id == SignatureIssue.LowCounter) { + code = "LowCounter"; + } else if (id == SignatureIssue.HighCounter) { + code = "HighCounter"; + } else if (id == SignatureIssue.OriginalConsiderationItems) { + code = "OriginalConsiderationItems"; + } + return string.concat("SignatureIssue: ", code); + } + + function toString( + CreatorFeeIssue id + ) internal pure returns (string memory) { + string memory code; + if (id == CreatorFeeIssue.Missing) { + code = "Missing"; + } else if (id == CreatorFeeIssue.ItemType) { + code = "ItemType"; + } else if (id == CreatorFeeIssue.Token) { + code = "Token"; + } else if (id == CreatorFeeIssue.StartAmount) { + code = "StartAmount"; + } else if (id == CreatorFeeIssue.EndAmount) { + code = "EndAmount"; + } else if (id == CreatorFeeIssue.Recipient) { + code = "Recipient"; + } + return string.concat("CreatorFeeIssue: ", code); + } + + function toString(NativeIssue id) internal pure returns (string memory) { + string memory code; + if (id == NativeIssue.TokenAddress) { + code = "TokenAddress"; + } else if (id == NativeIssue.IdentifierNonZero) { + code = "IdentifierNonZero"; + } else if (id == NativeIssue.InsufficientBalance) { + code = "InsufficientBalance"; + } + return string.concat("NativeIssue: ", code); + } + + function toString(ZoneIssue id) internal pure returns (string memory) { + string memory code; + if (id == ZoneIssue.InvalidZone) { + code = "InvalidZone"; + } else if (id == ZoneIssue.RejectedOrder) { + code = "RejectedOrder"; + } else if (id == ZoneIssue.NotSet) { + code = "NotSet"; + } else if (id == ZoneIssue.EOAZone) { + code = "EOAZone"; + } + return string.concat("ZoneIssue: ", code); + } + + function toString(MerkleIssue id) internal pure returns (string memory) { + string memory code; + if (id == MerkleIssue.SingleLeaf) { + code = "SingleLeaf"; + } else if (id == MerkleIssue.Unsorted) { + code = "Unsorted"; + } + return string.concat("MerkleIssue: ", code); + } + + function toString( + ContractOffererIssue id + ) internal pure returns (string memory) { + string memory code; + if (id == ContractOffererIssue.InvalidContractOfferer) { + code = "InvalidContractOfferer"; + } + return string.concat("ContractOffererIssue: ", code); + } + + function toIssueString( + uint16 issueCode + ) internal pure returns (string memory issueString) { + uint16 issue = (issueCode / 100) * 100; + uint8 id = uint8(issueCode % 100); + if (issue == 100) { + return toString(GenericIssue(id)); + } else if (issue == 200) { + return toString(ERC20Issue(id)); + } else if (issue == 300) { + return toString(ERC721Issue(id)); + } else if (issue == 400) { + return toString(ERC1155Issue(id)); + } else if (issue == 500) { + return toString(ConsiderationIssue(id)); + } else if (issue == 600) { + return toString(OfferIssue(id)); + } else if (issue == 700) { + return toString(PrimaryFeeIssue(id)); + } else if (issue == 800) { + return toString(StatusIssue(id)); + } else if (issue == 900) { + return toString(TimeIssue(id)); + } else if (issue == 1000) { + return toString(ConduitIssue(id)); + } else if (issue == 1100) { + return toString(SignatureIssue(id)); + } else if (issue == 1200) { + return toString(CreatorFeeIssue(id)); + } else if (issue == 1300) { + return toString(NativeIssue(id)); + } else if (issue == 1400) { + return toString(ZoneIssue(id)); + } else if (issue == 1500) { + return toString(MerkleIssue(id)); + } else if (issue == 1600) { + return toString(ContractOffererIssue(id)); + } else { + revert("IssueStringHelpers: Unknown issue code"); + } + } + + function toIssueString( + uint16[] memory issueCodes + ) internal pure returns (string memory issueString) { + for (uint256 i; i < issueCodes.length; i++) { + issueString = string.concat( + issueString, + "\n ", + toIssueString(issueCodes[i]) + ); + } + } +} diff --git a/contracts/seaport/interfaces/ImmutableCreate2FactoryInterface.sol b/contracts/seaport/interfaces/ImmutableCreate2FactoryInterface.sol new file mode 100644 index 00000000..73fc22d7 --- /dev/null +++ b/contracts/seaport/interfaces/ImmutableCreate2FactoryInterface.sol @@ -0,0 +1,96 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +/** + * @title ImmutableCreate2FactoryInterface + * @author 0age + * @notice This contract provides a safeCreate2 function that takes a salt value + * and a block of initialization code as arguments and passes them into + * inline assembly. The contract prevents redeploys by maintaining a + * mapping of all contracts that have already been deployed, and + * prevents frontrunning or other collisions by requiring that the first + * 20 bytes of the salt are equal to the address of the caller (this can + * be bypassed by setting the first 20 bytes to the null address). There + * is also a view function that computes the address of the contract + * that will be created when submitting a given salt or nonce along with + * a given block of initialization code. + */ +interface ImmutableCreate2FactoryInterface { + /** + * @dev Create a contract using CREATE2 by submitting a given salt or nonce + * along with the initialization code for the contract. Note that the + * first 20 bytes of the salt must match those of the calling address, + * which prevents contract creation events from being submitted by + * unintended parties. + * + * @param salt The nonce that will be passed into the CREATE2 + * call. + * @param initializationCode The initialization code that will be passed + * into the CREATE2 call. + * + * @return deploymentAddress Address of the contract that will be created. + */ + function safeCreate2( + bytes32 salt, + bytes calldata initializationCode + ) external payable returns (address deploymentAddress); + + /** + * @dev Compute the address of the contract that will be created when + * submitting a given salt or nonce to the contract along with the + * contract's initialization code. The CREATE2 address is computed in + * accordance with EIP-1014, and adheres to the formula therein of + * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` + * when performing the computation. The computed address is then + * checked for any existing contract code - if so, the null address + * will be returned instead. + * + * @param salt The nonce passed into the CREATE2 address calculation. + * @param initCode The contract initialization code to be used that will be + * passed into the CREATE2 address calculation. + * + * @return deploymentAddress Address of the contract that will be created, + * or the null address if a contract already + * exists at that address. + */ + function findCreate2Address( + bytes32 salt, + bytes calldata initCode + ) external view returns (address deploymentAddress); + + /** + * @dev Compute the address of the contract that will be created when + * submitting a given salt or nonce to the contract along with the + * keccak256 hash of the contract's initialization code. The CREATE2 + * address is computed in accordance with EIP-1014, and adheres to the + * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` + * formula when performing the computation. The computed address is + * then checked for any existing contract code - if so, the null + * address will be returned instead. + * + * @param salt The nonce passed into the CREATE2 address + * calculation. + * @param initCodeHash The keccak256 hash of the initialization code that + * will be passed into the CREATE2 address calculation. + * + * @return deploymentAddress Address of the contract that will be created, + * or the null address if a contract already + * exists at that address. + */ + function findCreate2AddressViaHash( + bytes32 salt, + bytes32 initCodeHash + ) external view returns (address deploymentAddress); + + /** + * @dev Determine if a contract has already been deployed by the factory to + * a given address. + * + * @param deploymentAddress The contract address to check. + * + * @return True if the contract has been deployed, false otherwise. + */ + function hasBeenDeployed( + address deploymentAddress + ) external view returns (bool); +} \ No newline at end of file diff --git a/contracts/seaport/interfaces/ZoneInteractionErrors.sol b/contracts/seaport/interfaces/ZoneInteractionErrors.sol new file mode 100644 index 00000000..786a2ca2 --- /dev/null +++ b/contracts/seaport/interfaces/ZoneInteractionErrors.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +/** + * @title ZoneInteractionErrors + * @author 0age + * @notice ZoneInteractionErrors contains errors related to zone interaction. + */ +interface ZoneInteractionErrors { + /** + * @dev Revert with an error when attempting to fill an order that specifies + * a restricted submitter as its order type when not submitted by + * either the offerer or the order's zone or approved as valid by the + * zone in question via a call to `isValidOrder`. + * + * @param orderHash The order hash for the invalid restricted order. + */ + error InvalidRestrictedOrder(bytes32 orderHash); + + /** + * @dev Revert with an error when attempting to fill a contract order that + * fails to generate an order successfully, that does not adhere to the + * requirements for minimum spent or maximum received supplied by the + * fulfiller, or that fails the post-execution `ratifyOrder` check.. + * + * @param orderHash The order hash for the invalid contract order. + */ + error InvalidContractOrder(bytes32 orderHash); +} diff --git a/contracts/seaport/interfaces/ZoneInterface.sol b/contracts/seaport/interfaces/ZoneInterface.sol new file mode 100644 index 00000000..048b1e1a --- /dev/null +++ b/contracts/seaport/interfaces/ZoneInterface.sol @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { + ZoneParameters, + Schema +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { IERC165 } from "seaport-types/src/interfaces/IERC165.sol"; + +/** + * @title ZoneInterface + * @notice Contains functions exposed by a zone. + */ +interface ZoneInterface is IERC165 { + /** + * @dev Validates an order. + * + * @param zoneParameters The context about the order fulfillment and any + * supplied extraData. + * + * @return validOrderMagicValue The magic value that indicates a valid + * order. + */ + function validateOrder( + ZoneParameters calldata zoneParameters + ) external returns (bytes4 validOrderMagicValue); + + /** + * @dev Returns the metadata for this zone. + * + * @return name The name of the zone. + * @return schemas The schemas that the zone implements. + */ + function getSeaportMetadata() + external + view + returns ( + string memory name, + Schema[] memory schemas // map to Seaport Improvement Proposal IDs + ); + + function supportsInterface( + bytes4 interfaceId + ) external view override returns (bool); +} diff --git a/contracts/seaport/test/ConduitControllerMock.sol b/contracts/seaport/test/ConduitControllerMock.sol new file mode 100644 index 00000000..bd7f8d4d --- /dev/null +++ b/contracts/seaport/test/ConduitControllerMock.sol @@ -0,0 +1,544 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { + ConduitControllerInterface +} from "seaport-types/src/interfaces/ConduitControllerInterface.sol"; + +import { + ConduitInterface +} from "seaport-types/src/interfaces/ConduitInterface.sol"; + +import { ConduitMock } from "../test/ConduitMock.sol"; + +import { ConduitMockInvalidMagic } from "../test/ConduitMockInvalidMagic.sol"; + +import { + ConduitMockRevertNoReason +} from "../test/ConduitMockRevertNoReason.sol"; + +import { ConduitMockRevertBytes } from "../test/ConduitMockRevertBytes.sol"; + +contract ConduitControllerMock is ConduitControllerInterface { + // Register keys, owners, new potential owners, and channels by conduit. + mapping(address => ConduitProperties) internal _conduits; + + // Set conduit creation code and runtime code hashes as immutable arguments. + bytes32 internal immutable _CONDUIT_CREATION_CODE_HASH; + bytes32 internal immutable _CONDUIT_RUNTIME_CODE_HASH; + + uint256 private conduitNum; + + /** + * @dev Initialize contract by deploying a conduit and setting the creation + * code and runtime code hashes as immutable arguments. + */ + constructor(uint256 _conduitNum) { + conduitNum = _conduitNum; + + bytes32 creationCodeHash; + bytes32 runtimeCodeHash; + + if (conduitNum == 0) { + creationCodeHash = keccak256(type(ConduitMock).creationCode); + ConduitMock zeroConduit = new ConduitMock{ salt: bytes32(0) }(); + runtimeCodeHash = address(zeroConduit).codehash; + } else if (conduitNum == 1) { + creationCodeHash = keccak256( + type(ConduitMockRevertNoReason).creationCode + ); + ConduitMockRevertNoReason zeroConduit = new ConduitMockRevertNoReason{ + salt: bytes32(0) + }(); + runtimeCodeHash = address(zeroConduit).codehash; + } else if (conduitNum == 2) { + creationCodeHash = keccak256( + type(ConduitMockInvalidMagic).creationCode + ); + ConduitMockInvalidMagic zeroConduit = new ConduitMockInvalidMagic{ + salt: bytes32(0) + }(); + runtimeCodeHash = address(zeroConduit).codehash; + } else if (conduitNum == 3) { + creationCodeHash = keccak256( + type(ConduitMockRevertBytes).creationCode + ); + ConduitMockRevertBytes zeroConduit = new ConduitMockRevertBytes{ + salt: bytes32(0) + }(); + runtimeCodeHash = address(zeroConduit).codehash; + } + _CONDUIT_CREATION_CODE_HASH = creationCodeHash; + _CONDUIT_RUNTIME_CODE_HASH = runtimeCodeHash; + } + + /** + * @notice Deploy a new conduit using a supplied conduit key and assigning + * an initial owner for the deployed conduit. Note that the first + * twenty bytes of the supplied conduit key must match the caller + * and that a new conduit cannot be created if one has already been + * deployed using the same conduit key. + * + * @param conduitKey The conduit key used to deploy the conduit. Note that + * the first twenty bytes of the conduit key must match + * the caller of this contract. + * @param initialOwner The initial owner to set for the new conduit. + * + * @return conduit The address of the newly deployed conduit. + */ + function createConduit( + bytes32 conduitKey, + address initialOwner + ) external override returns (address conduit) { + // Ensure that an initial owner has been supplied. + if (initialOwner == address(0)) { + revert InvalidInitialOwner(); + } + + // If the first 20 bytes of the conduit key do not match the caller... + if (address(uint160(bytes20(conduitKey))) != msg.sender) { + // Revert with an error indicating that the creator is invalid. + revert InvalidCreator(); + } + + // Derive address from deployer, conduit key and creation code hash. + conduit = address( + uint160( + uint256( + keccak256( + abi.encodePacked( + bytes1(0xff), + address(this), + conduitKey, + _CONDUIT_CREATION_CODE_HASH + ) + ) + ) + ) + ); + + // If derived conduit exists, as evidenced by comparing runtime code... + if (conduit.codehash == _CONDUIT_RUNTIME_CODE_HASH) { + // Revert with an error indicating that the conduit already exists. + revert ConduitAlreadyExists(conduit); + } + + // Deploy the conduit via CREATE2 using the conduit key as the salt. + if (conduitNum == 0) { + new ConduitMock{ salt: conduitKey }(); + } else if (conduitNum == 1) { + new ConduitMockRevertNoReason{ salt: conduitKey }(); + } else if (conduitNum == 2) { + new ConduitMockInvalidMagic{ salt: conduitKey }(); + } else if (conduitNum == 3) { + new ConduitMockRevertBytes{ salt: conduitKey }(); + } + // Initialize storage variable referencing conduit properties. + ConduitProperties storage conduitProperties = _conduits[conduit]; + + // Set the supplied initial owner as the owner of the conduit. + conduitProperties.owner = initialOwner; + + // Set conduit key used to deploy the conduit to enable reverse lookup. + conduitProperties.key = conduitKey; + + // Emit an event indicating that the conduit has been deployed. + emit NewConduit(conduit, conduitKey); + + // Emit an event indicating that conduit ownership has been assigned. + emit OwnershipTransferred(conduit, address(0), initialOwner); + } + + /** + * @notice Open or close a channel on a given conduit, thereby allowing the + * specified account to execute transfers against that conduit. + * Extreme care must be taken when updating channels, as malicious + * or vulnerable channels can transfer any ERC20, ERC721 and ERC1155 + * tokens where the token holder has granted the conduit approval. + * Only the owner of the conduit in question may call this function. + * + * @param conduit The conduit for which to open or close the channel. + * @param channel The channel to open or close on the conduit. + * @param isOpen A boolean indicating whether to open or close the channel. + */ + function updateChannel( + address conduit, + address channel, + bool isOpen + ) external override { + // Ensure the caller is the current owner of the conduit in question. + _assertCallerIsConduitOwner(conduit); + + // Call the conduit, updating the channel. + ConduitInterface(conduit).updateChannel(channel, isOpen); + + // Retrieve storage region where channels for the conduit are tracked. + ConduitProperties storage conduitProperties = _conduits[conduit]; + + // Retrieve the index, if one currently exists, for the updated channel. + uint256 channelIndexPlusOne = ( + conduitProperties.channelIndexesPlusOne[channel] + ); + + // Determine whether the updated channel is already tracked as open. + bool channelPreviouslyOpen = channelIndexPlusOne != 0; + + // If the channel has been set to open and was previously closed... + if (isOpen && !channelPreviouslyOpen) { + // Add the channel to the channels array for the conduit. + conduitProperties.channels.push(channel); + + // Add new open channel length to associated mapping as index + 1. + conduitProperties.channelIndexesPlusOne[channel] = ( + conduitProperties.channels.length + ); + } else if (!isOpen && channelPreviouslyOpen) { + // Set a previously open channel as closed via "swap & pop" method. + // Decrement located index to get the index of the closed channel. + uint256 removedChannelIndex; + + // Skip underflow check as channelPreviouslyOpen being true ensures + // that channelIndexPlusOne is nonzero. + unchecked { + removedChannelIndex = channelIndexPlusOne - 1; + } + + // Use length of channels array to determine index of last channel. + uint256 finalChannelIndex = conduitProperties.channels.length - 1; + + // If closed channel is not last channel in the channels array... + if (finalChannelIndex != removedChannelIndex) { + // Retrieve the final channel and place the value on the stack. + address finalChannel = ( + conduitProperties.channels[finalChannelIndex] + ); + + // Overwrite the removed channel using the final channel value. + conduitProperties.channels[removedChannelIndex] = finalChannel; + + // Update final index in associated mapping to removed index. + conduitProperties.channelIndexesPlusOne[finalChannel] = ( + channelIndexPlusOne + ); + } + + // Remove the last channel from the channels array for the conduit. + conduitProperties.channels.pop(); + + // Remove the closed channel from associated mapping of indexes. + delete conduitProperties.channelIndexesPlusOne[channel]; + } + } + + /** + * @notice Initiate conduit ownership transfer by assigning a new potential + * owner for the given conduit. Once set, the new potential owner + * may call `acceptOwnership` to claim ownership of the conduit. + * Only the owner of the conduit in question may call this function. + * + * @param conduit The conduit for which to initiate ownership transfer. + * @param newPotentialOwner The new potential owner of the conduit. + */ + function transferOwnership( + address conduit, + address newPotentialOwner + ) external override { + // Ensure the caller is the current owner of the conduit in question. + _assertCallerIsConduitOwner(conduit); + + // Ensure the new potential owner is not an invalid address. + if (newPotentialOwner == address(0)) { + revert NewPotentialOwnerIsZeroAddress(conduit); + } + + // Ensure the new potential owner is not already set. + if (newPotentialOwner == _conduits[conduit].potentialOwner) { + revert NewPotentialOwnerAlreadySet(conduit, newPotentialOwner); + } + + // Emit an event indicating that the potential owner has been updated. + emit PotentialOwnerUpdated(newPotentialOwner); + + // Set the new potential owner as the potential owner of the conduit. + _conduits[conduit].potentialOwner = newPotentialOwner; + } + + /** + * @notice Clear the currently set potential owner, if any, from a conduit. + * Only the owner of the conduit in question may call this function. + * + * @param conduit The conduit for which to cancel ownership transfer. + */ + function cancelOwnershipTransfer(address conduit) external override { + // Ensure the caller is the current owner of the conduit in question. + _assertCallerIsConduitOwner(conduit); + + // Ensure that ownership transfer is currently possible. + if (_conduits[conduit].potentialOwner == address(0)) { + revert NoPotentialOwnerCurrentlySet(conduit); + } + + // Emit an event indicating that the potential owner has been cleared. + emit PotentialOwnerUpdated(address(0)); + + // Clear the current new potential owner from the conduit. + _conduits[conduit].potentialOwner = address(0); + } + + /** + * @notice Accept ownership of a supplied conduit. Only accounts that the + * current owner has set as the new potential owner may call this + * function. + * + * @param conduit The conduit for which to accept ownership. + */ + function acceptOwnership(address conduit) external override { + // Ensure that the conduit in question exists. + _assertConduitExists(conduit); + + // If caller does not match current potential owner of the conduit... + if (msg.sender != _conduits[conduit].potentialOwner) { + // Revert, indicating that caller is not current potential owner. + revert CallerIsNotNewPotentialOwner(conduit); + } + + // Emit an event indicating that the potential owner has been cleared. + emit PotentialOwnerUpdated(address(0)); + + // Clear the current new potential owner from the conduit. + _conduits[conduit].potentialOwner = address(0); + + // Emit an event indicating conduit ownership has been transferred. + emit OwnershipTransferred( + conduit, + _conduits[conduit].owner, + msg.sender + ); + + // Set the caller as the owner of the conduit. + _conduits[conduit].owner = msg.sender; + } + + /** + * @notice Retrieve the current owner of a deployed conduit. + * + * @param conduit The conduit for which to retrieve the associated owner. + * + * @return owner The owner of the supplied conduit. + */ + function ownerOf( + address conduit + ) external view override returns (address owner) { + // Ensure that the conduit in question exists. + _assertConduitExists(conduit); + + // Retrieve the current owner of the conduit in question. + owner = _conduits[conduit].owner; + } + + /** + * @notice Retrieve the conduit key for a deployed conduit via reverse + * lookup. + * + * @param conduit The conduit for which to retrieve the associated conduit + * key. + * + * @return conduitKey The conduit key used to deploy the supplied conduit. + */ + function getKey( + address conduit + ) external view override returns (bytes32 conduitKey) { + // Attempt to retrieve a conduit key for the conduit in question. + conduitKey = _conduits[conduit].key; + + // Revert if no conduit key was located. + if (conduitKey == bytes32(0)) { + revert NoConduit(); + } + } + + /** + * @notice Derive the conduit associated with a given conduit key and + * determine whether that conduit exists (i.e. whether it has been + * deployed). + * + * @param conduitKey The conduit key used to derive the conduit. + * + * @return conduit The derived address of the conduit. + * @return exists A boolean indicating whether the derived conduit has been + * deployed or not. + */ + function getConduit( + bytes32 conduitKey + ) external view override returns (address conduit, bool exists) { + // Derive address from deployer, conduit key and creation code hash. + conduit = address( + uint160( + uint256( + keccak256( + abi.encodePacked( + bytes1(0xff), + address(this), + conduitKey, + _CONDUIT_CREATION_CODE_HASH + ) + ) + ) + ) + ); + + // Determine whether conduit exists by retrieving its runtime code. + exists = (conduit.codehash == _CONDUIT_RUNTIME_CODE_HASH); + } + + /** + * @notice Retrieve the potential owner, if any, for a given conduit. The + * current owner may set a new potential owner via + * `transferOwnership` and that owner may then accept ownership of + * the conduit in question via `acceptOwnership`. + * + * @param conduit The conduit for which to retrieve the potential owner. + * + * @return potentialOwner The potential owner, if any, for the conduit. + */ + function getPotentialOwner( + address conduit + ) external view override returns (address potentialOwner) { + // Ensure that the conduit in question exists. + _assertConduitExists(conduit); + + // Retrieve the current potential owner of the conduit in question. + potentialOwner = _conduits[conduit].potentialOwner; + } + + /** + * @notice Retrieve the status (either open or closed) of a given channel on + * a conduit. + * + * @param conduit The conduit for which to retrieve the channel status. + * @param channel The channel for which to retrieve the status. + * + * @return isOpen The status of the channel on the given conduit. + */ + function getChannelStatus( + address conduit, + address channel + ) external view override returns (bool isOpen) { + // Ensure that the conduit in question exists. + _assertConduitExists(conduit); + + // Retrieve the current channel status for the conduit in question. + isOpen = _conduits[conduit].channelIndexesPlusOne[channel] != 0; + } + + /** + * @notice Retrieve the total number of open channels for a given conduit. + * + * @param conduit The conduit for which to retrieve the total channel count. + * + * @return totalChannels The total number of open channels for the conduit. + */ + function getTotalChannels( + address conduit + ) external view override returns (uint256 totalChannels) { + // Ensure that the conduit in question exists. + _assertConduitExists(conduit); + + // Retrieve the total open channel count for the conduit in question. + totalChannels = _conduits[conduit].channels.length; + } + + /** + * @notice Retrieve an open channel at a specific index for a given conduit. + * Note that the index of a channel can change as a result of other + * channels being closed on the conduit. + * + * @param conduit The conduit for which to retrieve the open channel. + * @param channelIndex The index of the channel in question. + * + * @return channel The open channel, if any, at the specified channel index. + */ + function getChannel( + address conduit, + uint256 channelIndex + ) external view override returns (address channel) { + // Ensure that the conduit in question exists. + _assertConduitExists(conduit); + + // Retrieve the total open channel count for the conduit in question. + uint256 totalChannels = _conduits[conduit].channels.length; + + // Ensure that the supplied index is within range. + if (channelIndex >= totalChannels) { + revert ChannelOutOfRange(conduit); + } + + // Retrieve the channel at the given index. + channel = _conduits[conduit].channels[channelIndex]; + } + + /** + * @notice Retrieve all open channels for a given conduit. Note that calling + * this function for a conduit with many channels will revert with + * an out-of-gas error. + * + * @param conduit The conduit for which to retrieve open channels. + * + * @return channels An array of open channels on the given conduit. + */ + function getChannels( + address conduit + ) external view override returns (address[] memory channels) { + // Ensure that the conduit in question exists. + _assertConduitExists(conduit); + + // Retrieve all of the open channels on the conduit in question. + channels = _conduits[conduit].channels; + } + + /** + * @dev Retrieve the conduit creation code and runtime code hashes. + */ + function getConduitCodeHashes() + external + view + override + returns (bytes32 creationCodeHash, bytes32 runtimeCodeHash) + { + // Retrieve the conduit creation code hash from runtime. + creationCodeHash = _CONDUIT_CREATION_CODE_HASH; + + // Retrieve the conduit runtime code hash from runtime. + runtimeCodeHash = _CONDUIT_RUNTIME_CODE_HASH; + } + + /** + * @dev Private view function to revert if the caller is not the owner of a + * given conduit. + * + * @param conduit The conduit for which to assert ownership. + */ + function _assertCallerIsConduitOwner(address conduit) private view { + // Ensure that the conduit in question exists. + _assertConduitExists(conduit); + + // If the caller does not match the current owner of the conduit... + if (msg.sender != _conduits[conduit].owner) { + // Revert, indicating that the caller is not the owner. + revert CallerIsNotOwner(conduit); + } + } + + /** + * @dev Private view function to revert if a given conduit does not exist. + * + * @param conduit The conduit for which to assert existence. + */ + function _assertConduitExists(address conduit) private view { + // Attempt to retrieve a conduit key for the conduit in question. + if (_conduits[conduit].key == bytes32(0)) { + // Revert if no conduit key was located. + revert NoConduit(); + } + } +} diff --git a/contracts/seaport/test/ConduitMock.sol b/contracts/seaport/test/ConduitMock.sol new file mode 100644 index 00000000..dbba5089 --- /dev/null +++ b/contracts/seaport/test/ConduitMock.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { + ConduitInterface +} from "seaport-types/src/interfaces/ConduitInterface.sol"; + +import { + ConduitBatch1155Transfer, + ConduitTransfer +} from "seaport-types/src/conduit/lib/ConduitStructs.sol"; + +contract ConduitMock is ConduitInterface { + constructor() {} + + function execute( + ConduitTransfer[] calldata /* transfers */ + ) external pure override returns (bytes4) { + // Return the valid magic value. + return 0x4ce34aa2; + } + + function executeBatch1155( + ConduitBatch1155Transfer[] calldata /* batch1155Transfers */ + ) external view override returns (bytes4 magicValue) {} + + function executeWithBatch1155( + ConduitTransfer[] calldata /* standardTransfers */, + ConduitBatch1155Transfer[] calldata /* batch1155Transfers */ + ) external view override returns (bytes4 magicValue) {} + + function updateChannel(address channel, bool isOpen) external override {} +} diff --git a/contracts/seaport/test/ConduitMockInvalidMagic.sol b/contracts/seaport/test/ConduitMockInvalidMagic.sol new file mode 100644 index 00000000..2dd94cf3 --- /dev/null +++ b/contracts/seaport/test/ConduitMockInvalidMagic.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { + ConduitInterface +} from "seaport-types/src/interfaces/ConduitInterface.sol"; + +import { + ConduitBatch1155Transfer, + ConduitTransfer +} from "seaport-types/src/conduit/lib/ConduitStructs.sol"; + +contract ConduitMockInvalidMagic is ConduitInterface { + constructor() {} + + function execute( + ConduitTransfer[] calldata /* transfers */ + ) external pure override returns (bytes4) { + return 0xabcd0000; + } + + function executeBatch1155( + ConduitBatch1155Transfer[] calldata /* batch1155Transfers */ + ) external view override returns (bytes4 magicValue) {} + + function executeWithBatch1155( + ConduitTransfer[] calldata /* standardTransfers */, + ConduitBatch1155Transfer[] calldata /* batch1155Transfers */ + ) external view override returns (bytes4 magicValue) {} + + function updateChannel(address channel, bool isOpen) external override {} +} diff --git a/contracts/seaport/test/ConduitMockRevertBytes.sol b/contracts/seaport/test/ConduitMockRevertBytes.sol new file mode 100644 index 00000000..045b62ce --- /dev/null +++ b/contracts/seaport/test/ConduitMockRevertBytes.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { + ConduitInterface +} from "seaport-types/src/interfaces/ConduitInterface.sol"; + +import { + ConduitBatch1155Transfer, + ConduitTransfer +} from "seaport-types/src/conduit/lib/ConduitStructs.sol"; + +contract ConduitMockRevertBytes is ConduitInterface { + constructor() {} + + error CustomError(); + + function execute( + ConduitTransfer[] calldata /* transfers */ + ) external pure override returns (bytes4) { + revert CustomError(); + } + + function executeBatch1155( + ConduitBatch1155Transfer[] calldata /* batch1155Transfers */ + ) external view override returns (bytes4 magicValue) {} + + function executeWithBatch1155( + ConduitTransfer[] calldata /* standardTransfers */, + ConduitBatch1155Transfer[] calldata /* batch1155Transfers */ + ) external view override returns (bytes4 magicValue) {} + + function updateChannel(address channel, bool isOpen) external override {} +} diff --git a/contracts/seaport/test/ConduitMockRevertNoReason.sol b/contracts/seaport/test/ConduitMockRevertNoReason.sol new file mode 100644 index 00000000..492facfd --- /dev/null +++ b/contracts/seaport/test/ConduitMockRevertNoReason.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { + ConduitInterface +} from "seaport-types/src/interfaces/ConduitInterface.sol"; + +import { + ConduitBatch1155Transfer, + ConduitTransfer +} from "seaport-types/src/conduit/lib/ConduitStructs.sol"; + +contract ConduitMockRevertNoReason is ConduitInterface { + constructor() {} + + function execute( + ConduitTransfer[] calldata /* transfers */ + ) external pure override returns (bytes4) { + // Revert without reason string. + revert(); + } + + function executeBatch1155( + ConduitBatch1155Transfer[] calldata /* batch1155Transfers */ + ) external view override returns (bytes4 magicValue) {} + + function executeWithBatch1155( + ConduitTransfer[] calldata /* standardTransfers */, + ConduitBatch1155Transfer[] calldata /* batch1155Transfers */ + ) external view override returns (bytes4 magicValue) {} + + function updateChannel(address channel, bool isOpen) external override {} +} diff --git a/contracts/seaport/test/EIP1271Wallet.sol b/contracts/seaport/test/EIP1271Wallet.sol new file mode 100644 index 00000000..997e6768 --- /dev/null +++ b/contracts/seaport/test/EIP1271Wallet.sol @@ -0,0 +1,116 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +interface ERC20ApprovalInterface { + function approve(address, uint256) external returns (bool); +} + +interface NFTApprovalInterface { + function setApprovalForAll(address, bool) external; +} + +contract EIP1271Wallet { + bytes4 private constant _EIP_1271_MAGIC_VALUE = 0x1626ba7e; + + address public immutable owner; + + bool public showRevertMessage; + + mapping(bytes32 => bool) public digestApproved; + + bool public isValid; + + constructor(address _owner) { + owner = _owner; + showRevertMessage = true; + isValid = true; + } + + function setValid(bool valid) external { + isValid = valid; + } + + function revertWithMessage(bool showMessage) external { + showRevertMessage = showMessage; + } + + function registerDigest(bytes32 digest, bool approved) external { + digestApproved[digest] = approved; + } + + function approveERC20( + ERC20ApprovalInterface token, + address operator, + uint256 amount + ) external { + if (msg.sender != owner) { + revert("Only owner"); + } + + token.approve(operator, amount); + } + + function approveNFT(NFTApprovalInterface token, address operator) external { + if (msg.sender != owner) { + revert("Only owner"); + } + + token.setApprovalForAll(operator, true); + } + + function isValidSignature( + bytes32 digest, + bytes memory signature + ) external view returns (bytes4) { + if (digestApproved[digest]) { + return _EIP_1271_MAGIC_VALUE; + } + + // NOTE: this is obviously not secure, do not use outside of testing. + if (signature.length == 64) { + // All signatures of length 64 are OK as long as valid is true + return isValid ? _EIP_1271_MAGIC_VALUE : bytes4(0xffffffff); + } + + if (signature.length != 65) { + revert(); + } + + bytes32 r; + bytes32 s; + uint8 v; + + assembly { + r := mload(add(signature, 0x20)) + s := mload(add(signature, 0x40)) + v := byte(0, mload(add(signature, 0x60))) + } + + if ( + uint256(s) > + 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 + ) { + revert(); + } + + if (v != 27 && v != 28) { + revert(); + } + + address signer = ecrecover(digest, v, r, s); + + if (signer == address(0)) { + revert(); + } + + if (signer != owner) { + if (showRevertMessage) { + revert("BAD SIGNER"); + } + + revert(); + } + + return isValid ? _EIP_1271_MAGIC_VALUE : bytes4(0xffffffff); + } +} diff --git a/contracts/seaport/test/ERC1155BatchRecipient.sol b/contracts/seaport/test/ERC1155BatchRecipient.sol new file mode 100644 index 00000000..360ad9d1 --- /dev/null +++ b/contracts/seaport/test/ERC1155BatchRecipient.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +contract ERC1155BatchRecipient { + error UnexpectedBatchData(); + + function onERC1155BatchReceived( + address, + address, + uint256[] calldata, + uint256[] calldata, + bytes memory data + ) external pure returns (bytes4) { + if (data.length != 0) { + revert UnexpectedBatchData(); + } + return ERC1155BatchRecipient.onERC1155BatchReceived.selector; + } +} diff --git a/contracts/seaport/test/ERC2981.sol b/contracts/seaport/test/ERC2981.sol new file mode 100644 index 00000000..9823f7e5 --- /dev/null +++ b/contracts/seaport/test/ERC2981.sol @@ -0,0 +1,128 @@ +// SPDX-License-Identifier: MIT +// OpenZeppelin Contracts (last updated v4.7.0) (token/common/ERC2981.sol) + +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts@seaport/interfaces/IERC2981.sol"; +import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; + +/** + * @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information. + * + * Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for + * specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first. + * + * Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the + * fee is specified in basis points by default. + * + * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See + * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to + * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported. + * + * _Available since v4.5._ + */ +abstract contract ERC2981 is IERC2981, ERC165 { + struct RoyaltyInfo { + address receiver; + uint96 royaltyFraction; + } + + RoyaltyInfo private _defaultRoyaltyInfo; + mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo; + + /** + * @dev See {IERC165-supportsInterface}. + */ + function supportsInterface( + bytes4 interfaceId + ) public view virtual override(IERC165, ERC165) returns (bool) { + return + interfaceId == type(IERC2981).interfaceId || + super.supportsInterface(interfaceId); + } + + /** + * @inheritdoc IERC2981 + */ + function royaltyInfo( + uint256 _tokenId, + uint256 _salePrice + ) public view virtual override returns (address, uint256) { + RoyaltyInfo memory royalty = _tokenRoyaltyInfo[_tokenId]; + + if (royalty.receiver == address(0)) { + royalty = _defaultRoyaltyInfo; + } + + uint256 royaltyAmount = (_salePrice * royalty.royaltyFraction) / + _feeDenominator(); + + return (royalty.receiver, royaltyAmount); + } + + /** + * @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a + * fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an + * override. + */ + function _feeDenominator() internal pure virtual returns (uint96) { + return 10000; + } + + /** + * @dev Sets the royalty information that all ids in this contract will default to. + * + * Requirements: + * + * - `receiver` cannot be the zero address. + * - `feeNumerator` cannot be greater than the fee denominator. + */ + function _setDefaultRoyalty( + address receiver, + uint96 feeNumerator + ) internal virtual { + require( + feeNumerator <= _feeDenominator(), + "ERC2981: royalty fee will exceed salePrice" + ); + require(receiver != address(0), "ERC2981: invalid receiver"); + + _defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator); + } + + /** + * @dev Removes default royalty information. + */ + function _deleteDefaultRoyalty() internal virtual { + delete _defaultRoyaltyInfo; + } + + /** + * @dev Sets the royalty information for a specific token id, overriding the global default. + * + * Requirements: + * + * - `receiver` cannot be the zero address. + * - `feeNumerator` cannot be greater than the fee denominator. + */ + function _setTokenRoyalty( + uint256 tokenId, + address receiver, + uint96 feeNumerator + ) internal virtual { + require( + feeNumerator <= _feeDenominator(), + "ERC2981: royalty fee will exceed salePrice" + ); + require(receiver != address(0), "ERC2981: Invalid parameters"); + + _tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator); + } + + /** + * @dev Resets royalty information for the token id back to the global default. + */ + function _resetTokenRoyalty(uint256 tokenId) internal virtual { + delete _tokenRoyaltyInfo[tokenId]; + } +} diff --git a/contracts/seaport/test/ERC721ReceiverMock.sol b/contracts/seaport/test/ERC721ReceiverMock.sol new file mode 100644 index 00000000..5b528dd0 --- /dev/null +++ b/contracts/seaport/test/ERC721ReceiverMock.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { IERC721Receiver } from "seaport-types/src/interfaces/IERC721Receiver.sol"; + +contract ERC721ReceiverMock is IERC721Receiver { + enum Error { + None, + RevertWithMessage, + RevertWithoutMessage, + Panic + } + + bytes4 private immutable _retval; + Error private immutable _error; + + event Received( + address operator, + address from, + uint256 tokenId, + bytes data, + uint256 gas + ); + + constructor(bytes4 retval, Error error) { + _retval = retval; + _error = error; + } + + function onERC721Received( + address operator, + address from, + uint256 tokenId, + bytes memory data + ) public override returns (bytes4) { + if (_error == Error.RevertWithMessage) { + revert("ERC721ReceiverMock: reverting"); + } else if (_error == Error.RevertWithoutMessage) { + revert(); + } else if (_error == Error.Panic) { + uint256 a = uint256(0) / uint256(0); + a; + } + emit Received(operator, from, tokenId, data, gasleft()); + return _retval; + } +} diff --git a/contracts/seaport/test/ExcessReturnDataRecipient.sol b/contracts/seaport/test/ExcessReturnDataRecipient.sol new file mode 100644 index 00000000..8d7fd336 --- /dev/null +++ b/contracts/seaport/test/ExcessReturnDataRecipient.sol @@ -0,0 +1,146 @@ +// SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.13; + +contract ExcessReturnDataRecipient { + uint256 private revertDataSize; + + function setRevertDataSize(uint256 size) external { + revertDataSize = size; + } + + // Code created with the help of Stack Exchange question + // https://ethereum.stackexchange.com/questions/8086 + // Question by Doug King: + // https://ethereum.stackexchange.com/users/2041/doug-king + // Answer by Tjaden Hess: + // https://ethereum.stackexchange.com/users/131/tjaden-hess + // Modified to use Yul instead of Solidity and added change of + // base to convert to natural logarithm + function ln(uint256 x) internal pure returns (uint256 y) { + assembly { + let arg := x + x := sub(x, 1) + x := or(x, div(x, 0x02)) + x := or(x, div(x, 0x04)) + x := or(x, div(x, 0x10)) + x := or(x, div(x, 0x100)) + x := or(x, div(x, 0x10000)) + x := or(x, div(x, 0x100000000)) + x := or(x, div(x, 0x10000000000000000)) + x := or(x, div(x, 0x100000000000000000000000000000000)) + x := add(x, 1) + let m := mload(0x40) + mstore( + m, + 0xf8f9cbfae6cc78fbefe7cdc3a1793dfcf4f0e8bbd8cec470b6a28a7a5a3e1efd + ) + mstore( + add(m, 0x20), + 0xf5ecf1b3e9debc68e1d9cfabc5997135bfb7a7a3938b7b606b5b4b3f2f1f0ffe + ) + mstore( + add(m, 0x40), + 0xf6e4ed9ff2d6b458eadcdf97bd91692de2d4da8fd2d0ac50c6ae9a8272523616 + ) + mstore( + add(m, 0x60), + 0xc8c0b887b0a8a4489c948c7f847c6125746c645c544c444038302820181008ff + ) + mstore( + add(m, 0x80), + 0xf7cae577eec2a03cf3bad76fb589591debb2dd67e0aa9834bea6925f6a4a2e0e + ) + mstore( + add(m, 0xa0), + 0xe39ed557db96902cd38ed14fad815115c786af479b7e83247363534337271707 + ) + mstore( + add(m, 0xc0), + 0xc976c13bb96e881cb166a933a55e490d9d56952b8d4e801485467d2362422606 + ) + mstore( + add(m, 0xe0), + 0x753a6d1b65325d0c552a4d1345224105391a310b29122104190a110309020100 + ) + mstore(0x40, add(m, 0x100)) + let + magic + := 0x818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff + let + shift + := 0x100000000000000000000000000000000000000000000000000000000000000 + let a := div(mul(x, magic), shift) + y := div(mload(add(m, sub(255, a))), shift) + y := add( + y, + mul( + 256, + gt( + arg, + 0x8000000000000000000000000000000000000000000000000000000000000000 + ) + ) + ) + y := mul(y, 10000000000000000) + y := div(y, 14426950408889632) + } + } + + function sqrt(uint256 y) internal pure returns (uint256 z) { + assembly { + switch gt(y, 3) + case 1 { + z := y + let x := div(add(y, 1), 2) + for { + + } lt(x, z) { + + } { + z := x + x := div(add(div(y, x), x), 2) + } + } + case 0 { + z := 1 + } + } + } + + function onERC1155Received( + address, + address, + uint256, + uint256, + bytes calldata + ) external view returns (bytes4 magic) { + magic = this.onERC1155Received.selector; + if (revertDataSize > 0) { + uint256 gasToCalculateSqrt = (54 * ln(gasleft())) + 1200; + uint256 w = (sqrt( + 2048 * (gasleft() - gasToCalculateSqrt) + 9431040 + ) - 3072) / 4; + + assembly { + let size := mul(w, 32) + calldatacopy(0, 0, mul(w, 32)) + revert(0, size) + } + } + } + + receive() external payable { + if (revertDataSize > 0) { + uint256 gasToCalculateSqrt = (54 * ln(gasleft())) + 1200; + uint256 w = (sqrt( + 2048 * (gasleft() - gasToCalculateSqrt) + 9431040 + ) - 3072) / 2; + + assembly { + let size := mul(w, 32) + calldatacopy(0, 0, mul(w, 32)) + revert(0, size) + } + } + } +} diff --git a/contracts/seaport/test/HashCalldataContractOfferer.sol b/contracts/seaport/test/HashCalldataContractOfferer.sol new file mode 100644 index 00000000..4bd4fafb --- /dev/null +++ b/contracts/seaport/test/HashCalldataContractOfferer.sol @@ -0,0 +1,494 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { + ERC20Interface, + ERC721Interface, + ERC1155Interface +} from "seaport-types/src/interfaces/AbridgedTokenInterfaces.sol"; + +import { ItemType } from "seaport-types/src/lib/ConsiderationEnums.sol"; + +import { + ReceivedItem, + Schema, + SpentItem, + ZoneParameters +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { ItemType, Side } from "seaport-types/src/lib/ConsiderationEnums.sol"; + +import { + ConsiderationInterface +} from "seaport-types/src/interfaces/ConsiderationInterface.sol"; + +import { + ContractOffererInterface +} from "seaport-types/src/interfaces/ContractOffererInterface.sol"; +import { OffererZoneFailureReason } from "./OffererZoneFailureReason.sol"; + +contract HashCalldataContractOfferer is ContractOffererInterface { + error HashCalldataContractOffererGenerateOrderReverts(); + error HashCalldataContractOffererRatifyOrderReverts(); + + error NativeTokenTransferFailed(); + + event GenerateOrderDataHash(bytes32 orderHash, bytes32 dataHash); + event RatifyOrderDataHash(bytes32 orderHash, bytes32 dataHash); + + struct ItemAmountMutation { + Side side; + uint256 index; + uint256 newAmount; + bytes32 orderHash; + } + + struct DropItemMutation { + Side side; + uint256 index; + bytes32 orderHash; + } + + struct ExtraItemMutation { + Side side; + ReceivedItem item; + bytes32 orderHash; + } + + ItemAmountMutation[] public itemAmountMutations; + DropItemMutation[] public dropItemMutations; + ExtraItemMutation[] public extraItemMutations; + + mapping(bytes32 => OffererZoneFailureReason) public failureReasons; + + address private _SEAPORT; + address internal _expectedOfferRecipient; + + mapping(bytes32 => bytes32) public orderHashToGenerateOrderDataHash; + mapping(bytes32 => bytes32) public orderHashToRatifyOrderDataHash; + + function setFailureReason( + bytes32 orderHash, + OffererZoneFailureReason newFailureReason + ) external { + failureReasons[orderHash] = newFailureReason; + } + + function addItemAmountMutation( + Side side, + uint256 index, + uint256 newAmount, + bytes32 orderHash + ) external { + // TODO: add safety checks to ensure that item is in range + // and that any failure-inducing mutations have the correct + // failure reason appropriately set + + itemAmountMutations.push( + ItemAmountMutation(side, index, newAmount, orderHash) + ); + } + + function addDropItemMutation( + Side side, + uint256 index, + bytes32 orderHash + ) external { + // TODO: add safety checks to ensure that item is in range + // and that any failure-inducing mutations have the correct + // failure reason appropriately set; also should consider + // modifying existing indices in other mutations + + dropItemMutations.push(DropItemMutation(side, index, orderHash)); + } + + function addExtraItemMutation( + Side side, + ReceivedItem calldata item, + bytes32 orderHash + ) external { + // TODO: add safety checks to ensure that a failure-inducing + // mutation has the correct failure reason appropriately set + + extraItemMutations.push(ExtraItemMutation(side, item, orderHash)); + } + + function applyItemAmountMutation( + SpentItem[] memory offer, + ReceivedItem[] memory consideration, + ItemAmountMutation memory mutation + ) internal pure returns (SpentItem[] memory, ReceivedItem[] memory) { + if (mutation.side == Side.OFFER && offer.length > mutation.index) { + offer[mutation.index].amount = mutation.newAmount; + } else if (consideration.length > mutation.index) { + consideration[mutation.index].amount = mutation.newAmount; + } + return (offer, consideration); + } + + function applyDropItemMutation( + SpentItem[] memory offer, + ReceivedItem[] memory consideration, + DropItemMutation memory mutation + ) + internal + pure + returns ( + SpentItem[] memory _offer, + ReceivedItem[] memory _consideration + ) + { + if (mutation.side == Side.OFFER) { + _offer = dropIndex(offer, mutation.index); + _consideration = consideration; + } else { + _offer = offer; + _consideration = _cast( + dropIndex(_cast(consideration), mutation.index) + ); + } + } + + function dropIndex( + SpentItem[] memory items, + uint256 index + ) internal pure returns (SpentItem[] memory newItems) { + newItems = new SpentItem[](items.length - 1); + uint256 newIndex = 0; + uint256 originalLength = items.length; + for (uint256 i = 0; i < originalLength; i++) { + if (i != index) { + newItems[newIndex] = items[i]; + newIndex++; + } + } + } + + function _cast( + ReceivedItem[] memory items + ) internal pure returns (SpentItem[] memory _items) { + assembly { + _items := items + } + } + + function _cast( + SpentItem[] memory items + ) internal pure returns (ReceivedItem[] memory _items) { + assembly { + _items := items + } + } + + function applyExtraItemMutation( + SpentItem[] memory offer, + ReceivedItem[] memory consideration, + ExtraItemMutation memory mutation + ) + internal + pure + returns ( + SpentItem[] memory _offer, + ReceivedItem[] memory _consideration + ) + { + if (mutation.side == Side.OFFER) { + _offer = _cast(appendItem(_cast(offer), mutation.item)); + _consideration = consideration; + } else { + _offer = offer; + _consideration = appendItem(consideration, mutation.item); + } + } + + function appendItem( + ReceivedItem[] memory items, + ReceivedItem memory item + ) internal pure returns (ReceivedItem[] memory newItems) { + newItems = new ReceivedItem[](items.length + 1); + for (uint256 i = 0; i < items.length; i++) { + newItems[i] = items[i]; + } + newItems[items.length] = item; + } + + receive() external payable {} + + constructor(address seaport) { + _SEAPORT = seaport; + } + + /** + * @dev Generates an order with the specified minimum and maximum spent + * items. Validates data hash set in activate. + */ + function generateOrder( + address fulfiller, + SpentItem[] calldata a, + SpentItem[] calldata b, + bytes calldata c + ) + external + virtual + override + returns (SpentItem[] memory offer, ReceivedItem[] memory consideration) + { + uint256 contractOffererNonce = ConsiderationInterface(_SEAPORT) + .getContractOffererNonce(address(this)); + + bytes32 orderHash = bytes32( + contractOffererNonce ^ (uint256(uint160(address(this))) << 96) + ); + + if ( + failureReasons[orderHash] == + OffererZoneFailureReason.ContractOfferer_generateReverts + ) { + revert HashCalldataContractOffererGenerateOrderReverts(); + } else if ( + failureReasons[orderHash] == + OffererZoneFailureReason + .ContractOfferer_generateReturnsInvalidEncoding + ) { + assembly { + mstore(0, 0x12345678) + return(0, 0x20) + } + } + + { + // Create a variable to store msg.data in memory + bytes memory data = new bytes(msg.data.length); + + // Copy msg.data to memory + assembly { + calldatacopy(add(data, 0x20), 0, calldatasize()) + } + + bytes32 calldataHash = keccak256(data); + + // Store the hash of msg.data + orderHashToGenerateOrderDataHash[orderHash] = calldataHash; + + emit GenerateOrderDataHash(orderHash, calldataHash); + } + + (offer, consideration) = previewOrder(msg.sender, fulfiller, a, b, c); + + (bool success, ) = payable(_SEAPORT).call{ + value: _getOfferedNativeTokens(offer) + }(""); + + if (!success) { + revert NativeTokenTransferFailed(); + } + } + + /** + * @dev View function to preview an order generated in response to a minimum + * set of received items, maximum set of spent items, and context + * (supplied as extraData). + */ + function previewOrder( + address caller, + address, + SpentItem[] calldata a, + SpentItem[] calldata b, + bytes calldata + ) + public + view + override + returns (SpentItem[] memory offer, ReceivedItem[] memory consideration) + { + require( + caller == _SEAPORT, + "HashCalldataContractOfferer: caller not seaport" + ); + + uint256 contractOffererNonce = ConsiderationInterface(_SEAPORT) + .getContractOffererNonce(address(this)); + + bytes32 orderHash = bytes32( + contractOffererNonce ^ (uint256(uint160(address(this))) << 96) + ); + + (offer, consideration) = (a, _convertSpentToReceived(b)); + + for (uint256 i; i < itemAmountMutations.length; i++) { + if (itemAmountMutations[i].orderHash == orderHash) { + (offer, consideration) = applyItemAmountMutation( + offer, + consideration, + itemAmountMutations[i] + ); + } + } + for (uint256 i; i < extraItemMutations.length; i++) { + if (extraItemMutations[i].orderHash == orderHash) { + (offer, consideration) = applyExtraItemMutation( + offer, + consideration, + extraItemMutations[i] + ); + } + } + for (uint256 i; i < dropItemMutations.length; i++) { + if (dropItemMutations[i].orderHash == orderHash) { + (offer, consideration) = applyDropItemMutation( + offer, + consideration, + dropItemMutations[i] + ); + } + } + + return (offer, consideration); + } + + /** + * @dev Ratifies that the parties have received the correct items. + * + * @custom:param minimumReceived The minimum items that the caller was + * willing to receive. + * @custom:param maximumSpent The maximum items that the caller was + * willing to spend. + * @custom:param context The context of the order. + * @custom:param orderHashes The order hashes, unused here. + * @custom:param contractNonce The contract nonce, unused here. + * + * @return ratifyOrderMagicValue The magic value to indicate things are OK. + */ + function ratifyOrder( + SpentItem[] calldata /* minimumReceived */, + ReceivedItem[] calldata /* maximumSpent */, + bytes calldata /* context */, + bytes32[] calldata /* orderHashes */, + uint256 contractNonce + ) external override returns (bytes4 /* ratifyOrderMagicValue */) { + require( + msg.sender == _SEAPORT, + "HashCalldataContractOfferer: ratify caller not seaport" + ); + + bytes32 orderHash = bytes32( + contractNonce ^ (uint256(uint160(address(this))) << 96) + ); + + if ( + failureReasons[orderHash] == + OffererZoneFailureReason.ContractOfferer_ratifyReverts + ) { + revert HashCalldataContractOffererRatifyOrderReverts(); + } + + // Ratify the order. + { + // Create a variable to store msg.data in memory + bytes memory data = new bytes(msg.data.length); + + // Copy msg.data to memory + assembly { + calldatacopy(add(data, 0x20), 0, calldatasize()) + } + + bytes32 calldataHash = keccak256(data); + + // Store the hash of msg.data + orderHashToRatifyOrderDataHash[orderHash] = calldataHash; + + emit RatifyOrderDataHash(orderHash, calldataHash); + } + + if ( + failureReasons[orderHash] == + OffererZoneFailureReason.ContractOfferer_InvalidMagicValue + ) { + return bytes4(0x12345678); + } else { + // Return the selector of ratifyOrder as the magic value. + return this.ratifyOrder.selector; + } + } + + /** + * @dev Allows us to set Seaport address following deployment. + * + * @param seaportAddress The Seaport address. + */ + function setSeaportAddress(address seaportAddress) external { + _SEAPORT = seaportAddress; + } + + function getSeaportMetadata() + external + pure + override(ContractOffererInterface) + returns (string memory name, Schema[] memory schemas) + { + // Return the metadata. + name = "TestCalldataHashContractOfferer"; + schemas = new Schema[](1); + schemas[0].id = 1337; + schemas[0].metadata = new bytes(0); + } + + function _convertSpentToReceived( + SpentItem[] calldata spentItems + ) internal view returns (ReceivedItem[] memory) { + ReceivedItem[] memory receivedItems = new ReceivedItem[]( + spentItems.length + ); + for (uint256 i = 0; i < spentItems.length; ++i) { + receivedItems[i] = _convertSpentToReceived(spentItems[i]); + } + return receivedItems; + } + + function _convertSpentToReceived( + SpentItem calldata spentItem + ) internal view returns (ReceivedItem memory) { + return + ReceivedItem({ + itemType: spentItem.itemType, + token: spentItem.token, + identifier: spentItem.identifier, + amount: spentItem.amount, + recipient: payable(address(this)) + }); + } + + function _getOfferedNativeTokens( + SpentItem[] memory offer + ) internal pure returns (uint256 amount) { + for (uint256 i = 0; i < offer.length; ++i) { + SpentItem memory item = offer[i]; + if (item.itemType == ItemType.NATIVE) { + amount += item.amount; + } + } + } + + /** + * @dev Enable accepting ERC1155 tokens via safeTransfer. + */ + function onERC1155Received( + address, + address, + uint256, + uint256, + bytes calldata + ) external pure returns (bytes4) { + return this.onERC1155Received.selector; + } + + function supportsInterface( + bytes4 interfaceId + ) public view virtual override(ContractOffererInterface) returns (bool) { + return interfaceId == type(ContractOffererInterface).interfaceId; + } + + function setExpectedOfferRecipient(address expectedOfferRecipient) public { + _expectedOfferRecipient = expectedOfferRecipient; + } +} diff --git a/contracts/seaport/test/HashValidationZoneOfferer.sol b/contracts/seaport/test/HashValidationZoneOfferer.sol new file mode 100644 index 00000000..d1926140 --- /dev/null +++ b/contracts/seaport/test/HashValidationZoneOfferer.sol @@ -0,0 +1,641 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { + ERC20Interface, + ERC721Interface, + ERC1155Interface +} from "seaport-types/src/interfaces/AbridgedTokenInterfaces.sol"; + +import { + ReceivedItem, + Schema, + SpentItem, + ZoneParameters +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { ItemType, Side } from "seaport-types/src/lib/ConsiderationEnums.sol"; + +import { + ContractOffererInterface +} from "seaport-types/src/interfaces/ContractOffererInterface.sol"; + +import { ZoneInterface } from "seaport-types/src/interfaces/ZoneInterface.sol"; +import { OffererZoneFailureReason } from "./OffererZoneFailureReason.sol"; + +/** + * @dev This contract is used to validate hashes. Use the + * TestTransferValidationZoneOfferer to validate transfers within the + * zone/offerer. + */ +contract HashValidationZoneOfferer is ContractOffererInterface, ZoneInterface { + error InvalidNativeTokenBalance( + uint256 expectedBalance, + uint256 actualBalance, + address checkedAddress + ); + error InvalidERC20Balance( + uint256 expectedBalance, + uint256 actualBalance, + address checkedAddress, + address checkedToken + ); + error InvalidERC1155Balance( + uint256 expectedBalance, + uint256 actualBalance, + address checkedAddress, + address checkedToken + ); + // 0x38fb386a + error InvalidOwner( + address expectedOwner, + address actualOwner, + address checkedToken, + uint256 checkedTokenId + ); + error IncorrectSeaportBalance( + uint256 expectedBalance, + uint256 actualBalance + ); + error HashValidationZoneOffererValidateOrderReverts(); + error HashValidationZoneOffererRatifyOrderReverts(); + event ValidateOrderDataHash(bytes32 dataHash); + + struct ItemAmountMutation { + Side side; + uint256 index; + uint256 newAmount; + } + + struct DropItemMutation { + Side side; + uint256 index; + } + + struct ExtraItemMutation { + Side side; + ReceivedItem item; + } + + ItemAmountMutation[] public itemAmountMutations; + DropItemMutation[] public dropItemMutations; + ExtraItemMutation[] public extraItemMutations; + + function addItemAmountMutation( + Side side, + uint256 index, + uint256 newAmount + ) external { + itemAmountMutations.push(ItemAmountMutation(side, index, newAmount)); + } + + function addDropItemMutation(Side side, uint256 index) external { + dropItemMutations.push(DropItemMutation(side, index)); + } + + function addExtraItemMutation( + Side side, + ReceivedItem calldata item + ) external { + extraItemMutations.push(ExtraItemMutation(side, item)); + } + + function applyItemAmountMutation( + SpentItem[] memory offer, + ReceivedItem[] memory consideration, + ItemAmountMutation memory mutation + ) internal pure returns (SpentItem[] memory, ReceivedItem[] memory) { + if (mutation.side == Side.OFFER) { + offer[mutation.index].amount = mutation.newAmount; + } else { + consideration[mutation.index].amount = mutation.newAmount; + } + return (offer, consideration); + } + + function applyDropItemMutation( + SpentItem[] memory offer, + ReceivedItem[] memory consideration, + DropItemMutation memory mutation + ) + internal + pure + returns ( + SpentItem[] memory _offer, + ReceivedItem[] memory _consideration + ) + { + if (mutation.side == Side.OFFER) { + _offer = dropIndex(offer, mutation.index); + _consideration = consideration; + } else { + _offer = offer; + _consideration = _cast( + dropIndex(_cast(consideration), mutation.index) + ); + } + } + + function dropIndex( + SpentItem[] memory items, + uint256 index + ) internal pure returns (SpentItem[] memory newItems) { + newItems = new SpentItem[](items.length - 1); + uint256 newIndex = 0; + uint256 originalLength = items.length; + for (uint256 i = 0; i < originalLength; i++) { + if (i != index) { + newItems[newIndex] = items[i]; + newIndex++; + } + } + } + + function _cast( + ReceivedItem[] memory items + ) internal pure returns (SpentItem[] memory _items) { + assembly { + _items := items + } + } + + function _cast( + SpentItem[] memory items + ) internal pure returns (ReceivedItem[] memory _items) { + assembly { + _items := items + } + } + + function applyExtraItemMutation( + SpentItem[] memory offer, + ReceivedItem[] memory consideration, + ExtraItemMutation memory mutation + ) + internal + pure + returns ( + SpentItem[] memory _offer, + ReceivedItem[] memory _consideration + ) + { + if (mutation.side == Side.OFFER) { + _offer = _cast(appendItem(_cast(offer), mutation.item)); + _consideration = consideration; + } else { + _offer = offer; + _consideration = appendItem(consideration, mutation.item); + } + } + + function appendItem( + ReceivedItem[] memory items, + ReceivedItem memory item + ) internal pure returns (ReceivedItem[] memory newItems) { + newItems = new ReceivedItem[](items.length + 1); + for (uint256 i = 0; i < items.length; i++) { + newItems[i] = items[i]; + } + newItems[items.length] = item; + } + + receive() external payable {} + + address internal _expectedOfferRecipient; + + mapping(bytes32 => bytes32) public orderHashToValidateOrderDataHash; + + // Pass in the null address to expect the fulfiller. + constructor(address expectedOfferRecipient) { + _expectedOfferRecipient = expectedOfferRecipient; + } + + bool public called = false; + uint public callCount = 0; + + mapping(bytes32 => OffererZoneFailureReason) public failureReasons; + + function setFailureReason( + bytes32 orderHash, + OffererZoneFailureReason newFailureReason + ) external { + failureReasons[orderHash] = newFailureReason; + } + + /** + * @dev Validates that the parties have received the correct items. + * + * @param zoneParameters The zone parameters, including the SpentItem and + * ReceivedItem arrays. + * + * @return validOrderMagicValue The magic value to indicate things are OK. + */ + function validateOrder( + ZoneParameters calldata zoneParameters + ) external override returns (bytes4 validOrderMagicValue) { + // Get the orderHash from zoneParameters + bytes32 orderHash = zoneParameters.orderHash; + + if ( + failureReasons[orderHash] == OffererZoneFailureReason.Zone_reverts + ) { + revert HashValidationZoneOffererValidateOrderReverts(); + } + // Validate the order. + + // Currently assumes that the balances of all tokens of addresses are + // zero at the start of the transaction. Accordingly, take care to + // use an address in tests that is not pre-populated with tokens. + + // Get the length of msg.data + uint256 dataLength = msg.data.length; + + // Create a variable to store msg.data in memory + bytes memory data; + + // Copy msg.data to memory + assembly { + let ptr := mload(0x40) + calldatacopy(add(ptr, 0x20), 0, dataLength) + mstore(ptr, dataLength) + data := ptr + } + + // Get the hash of msg.data + bytes32 calldataHash = keccak256(data); + + // Store callDataHash in orderHashToValidateOrderDataHash + orderHashToValidateOrderDataHash[orderHash] = calldataHash; + + // Emit a DataHash event with the hash of msg.data + emit ValidateOrderDataHash(calldataHash); + + // Check if Seaport is empty. This makes sure that we've transferred + // all native token balance out of Seaport before we do the validation. + uint256 seaportBalance = address(msg.sender).balance; + + if (seaportBalance > 0) { + revert IncorrectSeaportBalance(0, seaportBalance); + } + + // Set the global called flag to true. + called = true; + callCount++; + + if ( + failureReasons[orderHash] == + OffererZoneFailureReason.Zone_InvalidMagicValue + ) { + validOrderMagicValue = bytes4(0x12345678); + } else { + // Return the selector of validateOrder as the magic value. + validOrderMagicValue = this.validateOrder.selector; + } + } + + /** + * @dev Generates an order with the specified minimum and maximum spent + * items. + */ + function generateOrder( + address, + SpentItem[] calldata a, + SpentItem[] calldata b, + bytes calldata c + ) + external + virtual + override + returns (SpentItem[] memory offer, ReceivedItem[] memory consideration) + { + (offer, consideration) = previewOrder( + address(this), + address(this), + a, + b, + c + ); + + for (uint256 i; i < itemAmountMutations.length; i++) { + (offer, consideration) = applyItemAmountMutation( + offer, + consideration, + itemAmountMutations[i] + ); + } + for (uint256 i; i < extraItemMutations.length; i++) { + (offer, consideration) = applyExtraItemMutation( + offer, + consideration, + extraItemMutations[i] + ); + } + for (uint256 i; i < dropItemMutations.length; i++) { + (offer, consideration) = applyDropItemMutation( + offer, + consideration, + dropItemMutations[i] + ); + } + + return (offer, consideration); + } + + /** + * @dev View function to preview an order generated in response to a minimum + * set of received items, maximum set of spent items, and context + * (supplied as extraData). + */ + function previewOrder( + address, + address, + SpentItem[] calldata a, + SpentItem[] calldata b, + bytes calldata + ) + public + view + override + returns (SpentItem[] memory offer, ReceivedItem[] memory consideration) + { + return (a, _convertSpentToReceived(b)); + } + + /** + * @dev Ratifies that the parties have received the correct items. + * + * @param minimumReceived The minimum items that the caller was willing to + * receive. + * @param maximumSpent The maximum items that the caller was willing to + * spend. + * @param context The context of the order. + * @ param orderHashes The order hashes, unused here. + * @ param contractNonce The contract nonce, unused here. + * + * @return ratifyOrderMagicValue The magic value to indicate things are OK. + */ + function ratifyOrder( + SpentItem[] calldata minimumReceived /* offer */, + ReceivedItem[] calldata maximumSpent /* consideration */, + bytes calldata context /* context */, + bytes32[] calldata /* orderHashes */, + uint256 /* contractNonce */ + ) external override returns (bytes4 /* ratifyOrderMagicValue */) { + // Ratify the order. + // Check if Seaport is empty. This makes sure that we've transferred + // all native token balance out of Seaport before we do the validation. + uint256 seaportBalance = address(msg.sender).balance; + + if (seaportBalance > 0) { + revert IncorrectSeaportBalance(0, seaportBalance); + } + + // Ensure that the offerer or recipient has received all consideration + // items. + _assertValidReceivedItems(maximumSpent); + + // It's necessary to pass in either an expected offerer or an address + // in the context. If neither is provided, this ternary will revert + // with a generic, hard-to-debug revert when it tries to slice bytes + // from the context. + address expectedOfferRecipient = _expectedOfferRecipient == address(0) + ? address(bytes20(context[0:20])) + : _expectedOfferRecipient; + + // Ensure that the expected recipient has received all offer items. + _assertValidSpentItems(expectedOfferRecipient, minimumReceived); + + // Set the global called flag to true. + called = true; + callCount++; + + return this.ratifyOrder.selector; + } + + function getSeaportMetadata() + external + pure + override(ContractOffererInterface, ZoneInterface) + returns (string memory name, Schema[] memory schemas) + { + // Return the metadata. + name = "TestTransferValidationZoneOfferer"; + schemas = new Schema[](1); + schemas[0].id = 1337; + schemas[0].metadata = new bytes(0); + } + + function _convertSpentToReceived( + SpentItem[] calldata spentItems + ) internal view returns (ReceivedItem[] memory) { + ReceivedItem[] memory receivedItems = new ReceivedItem[]( + spentItems.length + ); + for (uint256 i = 0; i < spentItems.length; ++i) { + receivedItems[i] = _convertSpentToReceived(spentItems[i]); + } + return receivedItems; + } + + function _convertSpentToReceived( + SpentItem calldata spentItem + ) internal view returns (ReceivedItem memory) { + return + ReceivedItem({ + itemType: spentItem.itemType, + token: spentItem.token, + identifier: spentItem.identifier, + amount: spentItem.amount, + recipient: payable(address(this)) + }); + } + + function _assertValidReceivedItems( + ReceivedItem[] calldata receivedItems + ) internal view { + address recipient; + ItemType itemType; + ReceivedItem memory receivedItem; + + // Iterate over all received items. + for (uint256 i = 0; i < receivedItems.length; i++) { + // Check if the consideration item has been received. + receivedItem = receivedItems[i]; + // Get the recipient of the consideration item. + recipient = receivedItem.recipient; + // Get item type. + itemType = receivedItem.itemType; + + // Check balance/ownerOf depending on item type. + if (itemType == ItemType.NATIVE) { + // NATIVE Token + _assertNativeTokenTransfer(receivedItem.amount, recipient); + } else if (itemType == ItemType.ERC20) { + // ERC20 Token + _assertERC20Transfer( + receivedItem.amount, + receivedItem.token, + recipient + ); + } else if (itemType == ItemType.ERC721) { + // ERC721 Token + _assertERC721Transfer( + receivedItem.identifier, + receivedItem.token, + recipient + ); + } else if (itemType == ItemType.ERC1155) { + // ERC1155 Token + _assertERC1155Transfer( + receivedItem.amount, + receivedItem.identifier, + receivedItem.token, + recipient + ); + } + } + } + + function _assertValidSpentItems( + address expectedRecipient, + SpentItem[] calldata spentItems + ) internal view { + SpentItem memory spentItem; + ItemType itemType; + + // Iterate over all spent items. + for (uint256 i = 0; i < spentItems.length; i++) { + // Check if the offer item has been spent. + spentItem = spentItems[i]; + // Get item type. + itemType = spentItem.itemType; + + // Check balance/ownerOf depending on item type. + if (itemType == ItemType.NATIVE) { + // NATIVE Token + _assertNativeTokenTransfer(spentItem.amount, expectedRecipient); + } else if (itemType == ItemType.ERC20) { + // ERC20 Token + _assertERC20Transfer( + spentItem.amount, + spentItem.token, + expectedRecipient + ); + } else if (itemType == ItemType.ERC721) { + // ERC721 Token + _assertERC721Transfer( + spentItem.identifier, + spentItem.token, + expectedRecipient + ); + } else if (itemType == ItemType.ERC1155) { + // ERC1155 Token + _assertERC1155Transfer( + spentItem.amount, + spentItem.identifier, + spentItem.token, + expectedRecipient + ); + } + } + } + + function _assertNativeTokenTransfer( + uint256 expectedAmount, + address expectedRecipient + ) internal view { + // If the amount we read from the spent item or received item (the + // expected transfer value) is greater than the balance of the expected + // recipient then revert, because that means the recipient did not + // receive the expected amount at the time the order was ratified or + // validated. + if (expectedAmount > address(expectedRecipient).balance) { + revert InvalidNativeTokenBalance( + expectedAmount, + address(expectedRecipient).balance, + expectedRecipient + ); + } + } + + function _assertERC20Transfer( + uint256 expectedAmount, + address token, + address expectedRecipient + ) internal view { + // If the amount we read from the spent item or received item (the + // expected transfer value) is greater than the balance of the expected + // recipient, revert. + if ( + expectedAmount > ERC20Interface(token).balanceOf(expectedRecipient) + ) { + revert InvalidERC20Balance( + expectedAmount, + ERC20Interface(token).balanceOf(expectedRecipient), + expectedRecipient, + token + ); + } + } + + function _assertERC721Transfer( + uint256 checkedTokenId, + address token, + address expectedRecipient + ) internal view { + // If the actual owner of the token is not the expected recipient, + // revert. + address actualOwner = ERC721Interface(token).ownerOf(checkedTokenId); + if (expectedRecipient != actualOwner) { + revert InvalidOwner( + expectedRecipient, + actualOwner, + token, + checkedTokenId + ); + } + } + + function _assertERC1155Transfer( + uint256 expectedAmount, + uint256 identifier, + address token, + address expectedRecipient + ) internal view { + // If the amount we read from the spent item or received item (the + // expected transfer value) is greater than the balance of the expected + // recipient, revert. + if ( + expectedAmount > + ERC1155Interface(token).balanceOf(expectedRecipient, identifier) + ) { + revert InvalidERC1155Balance( + expectedAmount, + ERC1155Interface(token).balanceOf( + expectedRecipient, + identifier + ), + expectedRecipient, + token + ); + } + } + + function setExpectedOfferRecipient(address expectedOfferRecipient) public { + _expectedOfferRecipient = expectedOfferRecipient; + } + + function supportsInterface( + bytes4 interfaceId + ) + public + view + virtual + override(ContractOffererInterface, ZoneInterface) + returns (bool) + { + return + interfaceId == type(ContractOffererInterface).interfaceId || + interfaceId == type(ZoneInterface).interfaceId; + } +} diff --git a/contracts/seaport/test/InvalidERC721Recipient.sol b/contracts/seaport/test/InvalidERC721Recipient.sol new file mode 100644 index 00000000..66a4b2d4 --- /dev/null +++ b/contracts/seaport/test/InvalidERC721Recipient.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +interface IERC721Receiver { + function onERC721Received( + address, + address, + uint256, + bytes calldata + ) external returns (bytes4); +} + +contract InvalidERC721Recipient is IERC721Receiver { + function onERC721Received( + address /* operator */, + address /* from */, + uint256 /* tokenId */, + bytes calldata /* data */ + ) external pure override returns (bytes4) { + return 0xabcd0000; + } +} diff --git a/contracts/seaport/test/InvalidEthRecipient.sol b/contracts/seaport/test/InvalidEthRecipient.sol new file mode 100644 index 00000000..831fc9a0 --- /dev/null +++ b/contracts/seaport/test/InvalidEthRecipient.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +contract InvalidEthRecipient { + receive() external payable { + revert( + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + ); + } +} diff --git a/contracts/seaport/test/OffererZoneFailureReason.sol b/contracts/seaport/test/OffererZoneFailureReason.sol new file mode 100644 index 00000000..c4ce07d7 --- /dev/null +++ b/contracts/seaport/test/OffererZoneFailureReason.sol @@ -0,0 +1,16 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +enum OffererZoneFailureReason { + None, + ContractOfferer_generateReverts, // Offerer generateOrder reverts + ContractOfferer_generateReturnsInvalidEncoding, // Bad encoding + ContractOfferer_ratifyReverts, // Offerer ratifyOrder reverts + ContractOfferer_InsufficientMinimumReceived, // too few minimum received items + ContractOfferer_IncorrectMinimumReceived, // incorrect (insufficient amount, wrong token, etc.) minimum received items + ContractOfferer_ExcessMaximumSpent, // too many maximum spent items + ContractOfferer_IncorrectMaximumSpent, // incorrect (too many, wrong token, etc.) maximum spent items + ContractOfferer_InvalidMagicValue, // Offerer did not return correct magic value + Zone_reverts, // Zone validateOrder call reverts + Zone_InvalidMagicValue // Zone validateOrder call returns invalid magic value +} diff --git a/contracts/seaport/test/Reenterer.sol b/contracts/seaport/test/Reenterer.sol new file mode 100644 index 00000000..625c6cc8 --- /dev/null +++ b/contracts/seaport/test/Reenterer.sol @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +contract Reenterer { + bool public isPrepared; + address public target; + uint256 public msgValue; + bytes public callData; + + event Reentered(bytes returnData); + + function prepare( + address targetToUse, + uint256 msgValueToUse, + bytes calldata callDataToUse + ) external { + target = targetToUse; + msgValue = msgValueToUse; + callData = callDataToUse; + isPrepared = true; + } + + receive() external payable { + if (isPrepared) { + (bool success, bytes memory returnData) = target.call{ + value: msgValue + }(callData); + + if (!success) { + assembly { + returndatacopy(0, 0, returndatasize()) + revert(0, returndatasize()) + } + } + emit Reentered(returnData); + + isPrepared = false; + } + } + + function execute(address to, uint256 value, bytes memory data) external { + (bool success, ) = payable(to).call{ value: value }(data); + if (!success) { + assembly { + returndatacopy(0, 0, returndatasize()) + revert(0, returndatasize()) + } + } + } +} diff --git a/contracts/seaport/test/TestBadContractOfferer.sol b/contracts/seaport/test/TestBadContractOfferer.sol new file mode 100644 index 00000000..4ae23228 --- /dev/null +++ b/contracts/seaport/test/TestBadContractOfferer.sol @@ -0,0 +1,151 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { + ERC721Interface +} from "seaport-types/src/interfaces/AbridgedTokenInterfaces.sol"; + +import { + ContractOffererInterface +} from "seaport-types/src/interfaces/ContractOffererInterface.sol"; + +import { ItemType } from "seaport-types/src/lib/ConsiderationEnums.sol"; + +import { + ReceivedItem, + Schema, + SpentItem +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +contract TestBadContractOfferer is ContractOffererInterface { + error IntentionalRevert(); + + address private immutable seaport; + ERC721Interface token; + + constructor(address _seaport, ERC721Interface _token) { + seaport = _seaport; + token = _token; + ERC721Interface(token).setApprovalForAll(seaport, true); + } + + receive() external payable {} + + /** + * @dev Generates an order with the specified minimum and maximum spent items, + * and the optional extra data. + * + * @param a Fulfiller, unused here. + * @param b The minimum items that the caller is willing to + * receive. + * @param c maximumSent, unused here. + * @param d context, unused here. + * + * @return offer A tuple containing the offer items. + * @return consideration A tuple containing the consideration items. + */ + function generateOrder( + address a, + SpentItem[] calldata b, + SpentItem[] calldata c, + bytes calldata d + ) + external + virtual + override + returns (SpentItem[] memory offer, ReceivedItem[] memory consideration) + { + return previewOrder(a, a, b, c, d); + } + + /** + * @dev View function to preview an order generated in response to a minimum + * set of received items, maximum set of spent items, and context + * (supplied as extraData). + * + * @param - caller, unused here. + * @param - fulfiller, unused here. + * @param minimumReceived The minimum received set. + * @param - maximumSpent, unused here. + * @param - context, unused here. + * + * @return offer The offer for the order. + * @return consideration The consideration for the order. + */ + function previewOrder( + address, + address, + SpentItem[] calldata minimumReceived, + SpentItem[] calldata maximumSpent, + bytes calldata + ) + public + view + override + returns (SpentItem[] memory offer, ReceivedItem[] memory consideration) + { + if (minimumReceived[0].identifier == 1) { + offer = minimumReceived; + consideration = new ReceivedItem[](1); + consideration[0] = ReceivedItem({ + itemType: ItemType.NATIVE, + token: address(0), + identifier: 0, + amount: 100, + recipient: payable(address(this)) + }); + return (offer, consideration); + } else if (minimumReceived[0].identifier == 2) { + // return nothing + assembly { + return(0, 0) + } + } else if (minimumReceived[0].identifier == 3) { + revert IntentionalRevert(); + } else { + // return garbage + bytes32 h1 = keccak256(abi.encode(minimumReceived)); + bytes32 h2 = keccak256(abi.encode(maximumSpent)); + assembly { + mstore(0x00, h1) + mstore(0x20, h2) + return(0, 0x100) + } + } + } + + function ratifyOrder( + SpentItem[] calldata /* offer */, + ReceivedItem[] calldata /* consideration */, + bytes calldata /* context */, + bytes32[] calldata /* orderHashes */, + uint256 /* contractNonce */ + ) external pure override returns (bytes4 /* ratifyOrderMagicValue */) { + return TestBadContractOfferer.ratifyOrder.selector; + } + + function supportsInterface( + bytes4 interfaceId + ) public view virtual override(ContractOffererInterface) returns (bool) { + return interfaceId == type(ContractOffererInterface).interfaceId; + } + + /** + * @dev Returns the metadata for this contract offerer. + */ + function getSeaportMetadata() + external + pure + override + returns ( + string memory name, + Schema[] memory schemas // map to Seaport Improvement Proposal IDs + ) + { + schemas = new Schema[](1); + schemas[0].id = 1337; + schemas[0].metadata = new bytes(0); + + return ("TestBadContractOfferer", schemas); + } +} diff --git a/contracts/seaport/test/TestCalldataHashContractOfferer.sol b/contracts/seaport/test/TestCalldataHashContractOfferer.sol new file mode 100644 index 00000000..54a5fa1a --- /dev/null +++ b/contracts/seaport/test/TestCalldataHashContractOfferer.sol @@ -0,0 +1,495 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { + ERC20Interface, + ERC721Interface, + ERC1155Interface +} from "seaport-types/src/interfaces/AbridgedTokenInterfaces.sol"; + +import { + ReceivedItem, + Schema, + SpentItem, + ZoneParameters +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { ItemType } from "seaport-types/src/lib/ConsiderationEnums.sol"; + +import { + ConsiderationInterface +} from "seaport-types/src/interfaces/ConsiderationInterface.sol"; + +import { + ContractOffererInterface +} from "seaport-types/src/interfaces/ContractOffererInterface.sol"; + +contract TestCalldataHashContractOfferer is ContractOffererInterface { + error InvalidNativeTokenBalance( + uint256 expectedBalance, + uint256 actualBalance, + address checkedAddress + ); + error InvalidERC20Balance( + uint256 expectedBalance, + uint256 actualBalance, + address checkedAddress, + address checkedToken + ); + error InvalidERC1155Balance( + uint256 expectedBalance, + uint256 actualBalance, + address checkedAddress, + address checkedToken + ); + // 0x38fb386a + error InvalidOwner( + address expectedOwner, + address actualOwner, + address checkedToken, + uint256 checkedTokenId + ); + error IncorrectSeaportBalance( + uint256 expectedBalance, + uint256 actualBalance + ); + error InvalidDataHash(bytes32 expectedDataHash, bytes32 actualDataHash); + error InvalidEthBalance(uint256 expectedBalance, uint256 actualBalance); + error NativeTokenTransferFailed(); + + event GenerateOrderDataHash(bytes32 orderHash, bytes32 dataHash); + event RatifyOrderDataHash(bytes32 orderHash, bytes32 dataHash); + + address private immutable _SEAPORT; + address internal _expectedOfferRecipient; + + mapping(bytes32 => bytes32) public orderHashToGenerateOrderDataHash; + mapping(bytes32 => bytes32) public orderHashToRatifyOrderDataHash; + + receive() external payable {} + + constructor(address seaport) { + _SEAPORT = seaport; + } + + /** + * @dev Sets approvals and transfers minimumReceived tokens to contract. + * Also stores the expected hash of msg.data to be sent in subsequent + * call to generateOrder. + */ + function activate( + address, + SpentItem[] memory minimumReceived, + SpentItem[] memory /* maximumSpent */, + bytes calldata /* context */ + ) public payable { + uint256 requiredEthBalance; + uint256 minimumReceivedLength = minimumReceived.length; + + for (uint256 i = 0; i < minimumReceivedLength; i++) { + SpentItem memory item = minimumReceived[i]; + + if (item.itemType == ItemType.ERC721) { + ERC721Interface token = ERC721Interface(item.token); + + token.transferFrom(msg.sender, address(this), item.identifier); + + token.setApprovalForAll(_SEAPORT, true); + } else if (item.itemType == ItemType.ERC1155) { + ERC1155Interface token = ERC1155Interface(item.token); + + token.safeTransferFrom( + msg.sender, + address(this), + item.identifier, + item.amount, + "" + ); + + token.setApprovalForAll(_SEAPORT, true); + } else if (item.itemType == ItemType.ERC20) { + ERC20Interface token = ERC20Interface(item.token); + + token.transferFrom(msg.sender, address(this), item.amount); + + token.approve(_SEAPORT, item.amount); + } else if (item.itemType == ItemType.NATIVE) { + requiredEthBalance += item.amount; + } + } + + if (msg.value != requiredEthBalance) { + revert InvalidEthBalance(requiredEthBalance, msg.value); + } + } + + /** + * @dev Generates an order with the specified minimum and maximum spent + * items. Validates data hash set in activate. + */ + function generateOrder( + address, + SpentItem[] calldata a, + SpentItem[] calldata b, + bytes calldata c + ) + external + virtual + override + returns (SpentItem[] memory offer, ReceivedItem[] memory consideration) + { + { + (bool success, ) = payable(_SEAPORT).call{ + value: address(this).balance + }(""); + + if (!success) { + revert NativeTokenTransferFailed(); + } + + // Get the length of msg.data + uint256 dataLength = msg.data.length; + + // Create a variable to store msg.data in memory + bytes memory data; + + // Copy msg.data to memory + assembly { + let ptr := mload(0x40) + calldatacopy(add(ptr, 0x20), 0, dataLength) + mstore(ptr, dataLength) + data := ptr + } + + bytes32 calldataHash = keccak256(data); + + uint256 contractOffererNonce = ConsiderationInterface(_SEAPORT) + .getContractOffererNonce(address(this)); + + bytes32 orderHash = bytes32( + contractOffererNonce ^ (uint256(uint160(address(this))) << 96) + ); + + // Store the hash of msg.data + orderHashToGenerateOrderDataHash[orderHash] = calldataHash; + + emit GenerateOrderDataHash(orderHash, calldataHash); + } + + return previewOrder(address(this), address(this), a, b, c); + } + + /** + * @dev View function to preview an order generated in response to a minimum + * set of received items, maximum set of spent items, and context + * (supplied as extraData). + */ + function previewOrder( + address, + address, + SpentItem[] calldata a, + SpentItem[] calldata b, + bytes calldata + ) + public + view + override + returns (SpentItem[] memory offer, ReceivedItem[] memory consideration) + { + return (a, _convertSpentToReceived(b)); + } + + /** + * @dev Ratifies that the parties have received the correct items. + * + * @param minimumReceived The minimum items that the caller was willing to + * receive. + * @param maximumSpent The maximum items that the caller was willing to + * spend. + * @param context The context of the order. + * @ param orderHashes The order hashes, unused here. + * @ param contractNonce The contract nonce, unused here. + * + * @return ratifyOrderMagicValue The magic value to indicate things are OK. + */ + function ratifyOrder( + SpentItem[] calldata minimumReceived /* offer */, + ReceivedItem[] calldata maximumSpent /* consideration */, + bytes calldata context /* context */, + bytes32[] calldata /* orderHashes */, + uint256 /* contractNonce */ + ) external override returns (bytes4 /* ratifyOrderMagicValue */) { + // Ratify the order. + { + // Get the length of msg.data + uint256 dataLength = msg.data.length; + + // Create a variable to store msg.data in memory + bytes memory data; + + // Copy msg.data to memory + assembly { + let ptr := mload(0x40) + calldatacopy(add(ptr, 0x20), 0, dataLength) + mstore(ptr, dataLength) + data := ptr + } + + bytes32 calldataHash = keccak256(data); + + uint256 contractOffererNonce = ConsiderationInterface(_SEAPORT) + .getContractOffererNonce(address(this)); + + bytes32 orderHash = bytes32( + contractOffererNonce ^ (uint256(uint160(address(this))) << 96) + ); + + // Store the hash of msg.data + orderHashToRatifyOrderDataHash[orderHash] = calldataHash; + + emit RatifyOrderDataHash(orderHash, calldataHash); + // Check if Seaport is empty. This makes sure that we've transferred + // all native token balance out of Seaport before we do the validation. + uint256 seaportBalance = address(msg.sender).balance; + + if (seaportBalance > 0) { + revert IncorrectSeaportBalance(0, seaportBalance); + } + // Ensure that the offerer or recipient has received all consideration + // items. + _assertValidReceivedItems(maximumSpent); + } + + // It's necessary to pass in either an expected offerer or an address + // in the context. If neither is provided, this ternary will revert + // with a generic, hard-to-debug revert when it tries to slice bytes + // from the context. + address expectedOfferRecipient = _expectedOfferRecipient == address(0) + ? address(bytes20(context[0:20])) + : _expectedOfferRecipient; + + // Ensure that the expected recipient has received all offer items. + _assertValidSpentItems(expectedOfferRecipient, minimumReceived); + + return this.ratifyOrder.selector; + } + + function getSeaportMetadata() + external + pure + override(ContractOffererInterface) + returns (string memory name, Schema[] memory schemas) + { + // Return the metadata. + name = "TestCalldataHashContractOfferer"; + schemas = new Schema[](1); + schemas[0].id = 1337; + schemas[0].metadata = new bytes(0); + } + + function _convertSpentToReceived( + SpentItem[] calldata spentItems + ) internal view returns (ReceivedItem[] memory) { + ReceivedItem[] memory receivedItems = new ReceivedItem[]( + spentItems.length + ); + for (uint256 i = 0; i < spentItems.length; ++i) { + receivedItems[i] = _convertSpentToReceived(spentItems[i]); + } + return receivedItems; + } + + function _convertSpentToReceived( + SpentItem calldata spentItem + ) internal view returns (ReceivedItem memory) { + return + ReceivedItem({ + itemType: spentItem.itemType, + token: spentItem.token, + identifier: spentItem.identifier, + amount: spentItem.amount, + recipient: payable(address(this)) + }); + } + + function _assertValidReceivedItems( + ReceivedItem[] calldata receivedItems + ) internal view { + address recipient; + ItemType itemType; + ReceivedItem memory receivedItem; + + // Iterate over all received items. + for (uint256 i = 0; i < receivedItems.length; i++) { + // Check if the consideration item has been received. + receivedItem = receivedItems[i]; + // Get the recipient of the consideration item. + recipient = receivedItem.recipient; + // Get item type. + itemType = receivedItem.itemType; + + // Check balance/ownerOf depending on item type. + if (itemType == ItemType.NATIVE) { + // NATIVE Token + _assertNativeTokenTransfer(receivedItem.amount, recipient); + } else if (itemType == ItemType.ERC20) { + // ERC20 Token + _assertERC20Transfer( + receivedItem.amount, + receivedItem.token, + recipient + ); + } else if (itemType == ItemType.ERC721) { + // ERC721 Token + _assertERC721Transfer( + receivedItem.identifier, + receivedItem.token, + recipient + ); + } else if (itemType == ItemType.ERC1155) { + // ERC1155 Token + _assertERC1155Transfer( + receivedItem.amount, + receivedItem.identifier, + receivedItem.token, + recipient + ); + } + } + } + + function _assertValidSpentItems( + address expectedRecipient, + SpentItem[] calldata spentItems + ) internal view { + SpentItem memory spentItem; + ItemType itemType; + + // Iterate over all spent items. + for (uint256 i = 0; i < spentItems.length; i++) { + // Check if the offer item has been spent. + spentItem = spentItems[i]; + // Get item type. + itemType = spentItem.itemType; + + // Check balance/ownerOf depending on item type. + if (itemType == ItemType.NATIVE) { + // NATIVE Token + _assertNativeTokenTransfer(spentItem.amount, expectedRecipient); + } else if (itemType == ItemType.ERC20) { + // ERC20 Token + _assertERC20Transfer( + spentItem.amount, + spentItem.token, + expectedRecipient + ); + } else if (itemType == ItemType.ERC721) { + // ERC721 Token + _assertERC721Transfer( + spentItem.identifier, + spentItem.token, + expectedRecipient + ); + } else if (itemType == ItemType.ERC1155) { + // ERC1155 Token + _assertERC1155Transfer( + spentItem.amount, + spentItem.identifier, + spentItem.token, + expectedRecipient + ); + } + } + } + + function _assertNativeTokenTransfer( + uint256 expectedAmount, + address expectedRecipient + ) internal view { + // If the amount we read from the spent item or received item (the + // expected transfer value) is greater than the balance of the expected + // recipient then revert, because that means the recipient did not + // receive the expected amount at the time the order was ratified or + // validated. + if (expectedAmount > address(expectedRecipient).balance) { + revert InvalidNativeTokenBalance( + expectedAmount, + address(expectedRecipient).balance, + expectedRecipient + ); + } + } + + function _assertERC20Transfer( + uint256 expectedAmount, + address token, + address expectedRecipient + ) internal view { + // If the amount we read from the spent item or received item (the + // expected transfer value) is greater than the balance of the expected + // recipient, revert. + if ( + expectedAmount > ERC20Interface(token).balanceOf(expectedRecipient) + ) { + revert InvalidERC20Balance( + expectedAmount, + ERC20Interface(token).balanceOf(expectedRecipient), + expectedRecipient, + token + ); + } + } + + function _assertERC721Transfer( + uint256 checkedTokenId, + address token, + address expectedRecipient + ) internal view { + // If the actual owner of the token is not the expected recipient, + // revert. + address actualOwner = ERC721Interface(token).ownerOf(checkedTokenId); + if (expectedRecipient != actualOwner) { + revert InvalidOwner( + expectedRecipient, + actualOwner, + token, + checkedTokenId + ); + } + } + + function _assertERC1155Transfer( + uint256 expectedAmount, + uint256 identifier, + address token, + address expectedRecipient + ) internal view { + // If the amount we read from the spent item or received item (the + // expected transfer value) is greater than the balance of the expected + // recipient, revert. + if ( + expectedAmount > + ERC1155Interface(token).balanceOf(expectedRecipient, identifier) + ) { + revert InvalidERC1155Balance( + expectedAmount, + ERC1155Interface(token).balanceOf( + expectedRecipient, + identifier + ), + expectedRecipient, + token + ); + } + } + + function setExpectedOfferRecipient(address expectedOfferRecipient) public { + _expectedOfferRecipient = expectedOfferRecipient; + } + + function supportsInterface( + bytes4 interfaceId + ) public view virtual override(ContractOffererInterface) returns (bool) { + return interfaceId == type(ContractOffererInterface).interfaceId; + } +} diff --git a/contracts/seaport/test/TestContractOfferer.sol b/contracts/seaport/test/TestContractOfferer.sol new file mode 100644 index 00000000..5741ea9e --- /dev/null +++ b/contracts/seaport/test/TestContractOfferer.sol @@ -0,0 +1,341 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { + ERC20Interface, + ERC721Interface, + ERC1155Interface +} from "seaport-types/src/interfaces/AbridgedTokenInterfaces.sol"; + +import { + ContractOffererInterface +} from "seaport-types/src/interfaces/ContractOffererInterface.sol"; + +import { ERC165 } from "@openzeppelin/contracts@seaport/utils/introspection/ERC165.sol"; +import { ItemType } from "seaport-types/src/lib/ConsiderationEnums.sol"; + +import { + ReceivedItem, + Schema, + SpentItem +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +/** + * @title TestContractOfferer + * @author 0age + * @notice TestContractOfferer is a maximally simple contract offerer. It offers + * a single item and expects to receive back another single item, and + * ignores all parameters supplied to it when previewing or generating + * an order. The offered item is placed into this contract as part of + * deployment and the corresponding token approvals are set for Seaport. + */ +contract TestContractOfferer is ERC165, ContractOffererInterface { + error OrderUnavailable(); + + address private immutable _SEAPORT; + + SpentItem private _available; + SpentItem private _required; + + bool public ready; + bool public fulfilled; + + uint256 public extraAvailable; + uint256 public extraRequired; + + constructor(address seaport) { + // Set immutable values and storage variables. + _SEAPORT = seaport; + fulfilled = false; + ready = false; + extraAvailable = 0; + extraRequired = 0; + } + + receive() external payable {} + + function supportsInterface( + bytes4 interfaceId + ) + public + view + virtual + override(ERC165, ContractOffererInterface) + returns (bool) + { + return + interfaceId == type(ContractOffererInterface).interfaceId || + super.supportsInterface(interfaceId); + } + + /// In case of criteria based orders and non-wildcard items, the member + /// `available.identifier` would correspond to the `identifierOrCriteria` + /// i.e., the merkle-root. + /// @param identifier corresponds to the actual token-id that gets transferred. + function activateWithCriteria( + SpentItem memory available, + SpentItem memory required, + uint256 identifier + ) public { + if (ready || fulfilled) { + revert OrderUnavailable(); + } + + if (available.itemType == ItemType.ERC721_WITH_CRITERIA) { + ERC721Interface token = ERC721Interface(available.token); + + token.transferFrom(msg.sender, address(this), identifier); + + token.setApprovalForAll(_SEAPORT, true); + } else if (available.itemType == ItemType.ERC1155_WITH_CRITERIA) { + ERC1155Interface token = ERC1155Interface(available.token); + + token.safeTransferFrom( + msg.sender, + address(this), + identifier, + available.amount, + "" + ); + + token.setApprovalForAll(_SEAPORT, true); + } + + // Set storage variables. + _available = available; + _required = required; + ready = true; + } + + function activate( + SpentItem memory available, + SpentItem memory required + ) public payable { + if (ready || fulfilled) { + revert OrderUnavailable(); + } + + // Retrieve the offered item and set associated approvals. + if (available.itemType == ItemType.NATIVE) { + available.amount = address(this).balance; + } else if (available.itemType == ItemType.ERC20) { + ERC20Interface token = ERC20Interface(available.token); + + token.transferFrom(msg.sender, address(this), available.amount); + + token.approve(_SEAPORT, available.amount); + } else if (available.itemType == ItemType.ERC721) { + ERC721Interface token = ERC721Interface(available.token); + + token.transferFrom(msg.sender, address(this), available.identifier); + + token.setApprovalForAll(_SEAPORT, true); + } else if (available.itemType == ItemType.ERC1155) { + ERC1155Interface token = ERC1155Interface(available.token); + + token.safeTransferFrom( + msg.sender, + address(this), + available.identifier, + available.amount, + "" + ); + + token.setApprovalForAll(_SEAPORT, true); + } + + // Set storage variables. + _available = available; + _required = required; + ready = true; + } + + function extendAvailable() public { + if (!ready || fulfilled) { + revert OrderUnavailable(); + } + + extraAvailable++; + + _available.amount /= 2; + } + + function extendRequired() public { + if (!ready || fulfilled) { + revert OrderUnavailable(); + } + + extraRequired++; + } + + function generateOrder( + address, + SpentItem[] calldata, + SpentItem[] calldata, + bytes calldata context + ) + external + virtual + override + returns (SpentItem[] memory offer, ReceivedItem[] memory consideration) + { + // Ensure the caller is Seaport & the order has not yet been fulfilled. + if ( + !ready || + fulfilled || + msg.sender != _SEAPORT || + context.length % 32 != 0 + ) { + revert OrderUnavailable(); + } + + // Set the offer and consideration that were supplied during deployment. + offer = new SpentItem[](1 + extraAvailable); + consideration = new ReceivedItem[](1 + extraRequired); + + for (uint256 i = 0; i < 1 + extraAvailable; ++i) { + offer[i] = _available; + } + + for (uint256 i = 0; i < 1 + extraRequired; ++i) { + consideration[i] = ReceivedItem({ + itemType: _required.itemType, + token: _required.token, + identifier: _required.identifier, + amount: _required.amount, + recipient: payable(address(this)) + }); + } + + // Update storage to reflect that the order has been fulfilled. + fulfilled = true; + } + + function previewOrder( + address caller, + address, + SpentItem[] calldata, + SpentItem[] calldata, + bytes calldata context + ) + external + view + override + returns (SpentItem[] memory offer, ReceivedItem[] memory consideration) + { + // Ensure the caller is Seaport & the order has not yet been fulfilled. + if ( + !ready || + fulfilled || + caller != _SEAPORT || + context.length % 32 != 0 + ) { + revert OrderUnavailable(); + } + + // Set the offer and consideration that were supplied during deployment. + offer = new SpentItem[](1 + extraAvailable); + consideration = new ReceivedItem[](1 + extraRequired); + + for (uint256 i = 0; i < 1 + extraAvailable; ++i) { + offer[i] = _available; + } + + for (uint256 i = 0; i < 1 + extraRequired; ++i) { + consideration[i] = ReceivedItem({ + itemType: _required.itemType, + token: _required.token, + identifier: _required.identifier, + amount: _required.amount, + recipient: payable(address(this)) + }); + } + } + + function getInventory() + external + view + returns (SpentItem[] memory offerable, SpentItem[] memory receivable) + { + // Set offerable and receivable supplied at deployment if unfulfilled. + if (!ready || fulfilled) { + offerable = new SpentItem[](0); + + receivable = new SpentItem[](0); + } else { + offerable = new SpentItem[](1 + extraAvailable); + for (uint256 i = 0; i < 1 + extraAvailable; ++i) { + offerable[i] = _available; + } + + receivable = new SpentItem[](1 + extraRequired); + for (uint256 i = 0; i < 1 + extraRequired; ++i) { + receivable[i] = _required; + } + } + } + + function ratifyOrder( + SpentItem[] calldata /* offer */, + ReceivedItem[] calldata /* consideration */, + bytes calldata context, + bytes32[] calldata orderHashes, + uint256 /* contractNonce */ + ) + external + pure + virtual + override + returns (bytes4 /* ratifyOrderMagicValue */) + { + if (context.length > 32 && context.length % 32 == 0) { + bytes32[] memory expectedOrderHashes = abi.decode( + context, + (bytes32[]) + ); + + uint256 expectedLength = expectedOrderHashes.length; + + if (expectedLength != orderHashes.length) { + revert("Revert on unexpected order hashes length"); + } + + for (uint256 i = 0; i < expectedLength; ++i) { + if (expectedOrderHashes[i] != orderHashes[i]) { + revert("Revert on unexpected order hash"); + } + } + } + + return ContractOffererInterface.ratifyOrder.selector; + } + + function onERC1155Received( + address, + address, + uint256, + uint256, + bytes calldata + ) external pure returns (bytes4) { + return bytes4(0xf23a6e61); + } + + /** + * @dev Returns the metadata for this contract offerer. + */ + function getSeaportMetadata() + external + pure + override + returns ( + string memory name, + Schema[] memory schemas // map to Seaport Improvement Proposal IDs + ) + { + schemas = new Schema[](1); + schemas[0].id = 1337; + schemas[0].metadata = new bytes(0); + + return ("TestContractOfferer", schemas); + } +} diff --git a/contracts/seaport/test/TestContractOffererNativeToken.sol b/contracts/seaport/test/TestContractOffererNativeToken.sol new file mode 100644 index 00000000..e5d990c0 --- /dev/null +++ b/contracts/seaport/test/TestContractOffererNativeToken.sol @@ -0,0 +1,282 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { + ERC721Interface, + ERC1155Interface +} from "seaport-types/src/interfaces/AbridgedTokenInterfaces.sol"; + +import { + ContractOffererInterface +} from "seaport-types/src/interfaces/ContractOffererInterface.sol"; + +import { ERC165 } from "@openzeppelin/contracts@seaport/utils/introspection/ERC165.sol"; +import { ItemType } from "seaport-types/src/lib/ConsiderationEnums.sol"; + +import { + ReceivedItem, + Schema, + SpentItem +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +/** + * @title TestContractOffererNativeToken + */ +contract TestContractOffererNativeToken is ContractOffererInterface, ERC165 { + error OrderUnavailable(); + + address private immutable _SEAPORT; + + SpentItem private _available; + SpentItem private _required; + + bool public ready; + bool public fulfilled; + + uint256 public extraAvailable; + uint256 public extraRequired; + + constructor(address seaport) { + // Set immutable values and storage variables. + _SEAPORT = seaport; + fulfilled = false; + ready = false; + extraAvailable = 0; + extraRequired = 0; + } + + receive() external payable {} + + function activate( + SpentItem memory available, + SpentItem memory required + ) public payable { + if (ready || fulfilled) { + revert OrderUnavailable(); + } + + // Set storage variables. + _available = available; + _required = required; + ready = true; + } + + /// In case of criteria based orders and non-wildcard items, the member + /// `available.identifier` would correspond to the `identifierOrCriteria` + /// i.e., the merkle-root. + /// @param identifier corresponds to the actual token-id that gets transferred. + function activateWithCriteria( + SpentItem memory available, + SpentItem memory required, + uint256 identifier + ) public { + if (ready || fulfilled) { + revert OrderUnavailable(); + } + + if (available.itemType == ItemType.ERC721_WITH_CRITERIA) { + ERC721Interface token = ERC721Interface(available.token); + + token.transferFrom(msg.sender, address(this), identifier); + + token.setApprovalForAll(_SEAPORT, true); + } else if (available.itemType == ItemType.ERC1155_WITH_CRITERIA) { + ERC1155Interface token = ERC1155Interface(available.token); + + token.safeTransferFrom( + msg.sender, + address(this), + identifier, + available.amount, + "" + ); + + token.setApprovalForAll(_SEAPORT, true); + } + + // Set storage variables. + _available = available; + _required = required; + ready = true; + } + + function extendAvailable() public { + if (!ready || fulfilled) { + revert OrderUnavailable(); + } + + extraAvailable++; + + _available.amount /= 2; + } + + function extendRequired() public { + if (!ready || fulfilled) { + revert OrderUnavailable(); + } + + extraRequired++; + } + + function generateOrder( + address, + SpentItem[] calldata minimumReceived, + SpentItem[] calldata maximumSpent, + bytes calldata /* context */ + ) + external + virtual + override + returns (SpentItem[] memory offer, ReceivedItem[] memory consideration) + { + // Set the offer and consideration that were supplied during deployment. + offer = new SpentItem[](1); + consideration = new ReceivedItem[](1); + + // Send eth to Seaport. + (bool success, ) = _SEAPORT.call{ value: minimumReceived[0].amount }( + "" + ); + + // Revert if transaction fails. + if (!success) { + assembly { + returndatacopy(0, 0, returndatasize()) + revert(0, returndatasize()) + } + } + + // Set the offer item as the _available item in storage. + offer[0] = minimumReceived[0]; + + // Set the erc721 consideration item. + consideration[0] = ReceivedItem({ + itemType: ItemType.ERC721, + token: maximumSpent[0].token, + identifier: maximumSpent[0].identifier, + amount: maximumSpent[0].amount, + recipient: payable(address(this)) + }); + + // Update storage to reflect that the order has been fulfilled. + fulfilled = true; + } + + function previewOrder( + address caller, + address, + SpentItem[] calldata, + SpentItem[] calldata, + bytes calldata context + ) + external + view + override + returns (SpentItem[] memory offer, ReceivedItem[] memory consideration) + { + // Ensure the caller is Seaport & the order has not yet been fulfilled. + if (!ready || fulfilled || caller != _SEAPORT || context.length != 0) { + revert OrderUnavailable(); + } + + // Set the offer and consideration that were supplied during deployment. + offer = new SpentItem[](1 + extraAvailable); + consideration = new ReceivedItem[](1 + extraRequired); + + for (uint256 i = 0; i < 1 + extraAvailable; ++i) { + offer[i] = _available; + } + + for (uint256 i = 0; i < 1 + extraRequired; ++i) { + consideration[i] = ReceivedItem({ + itemType: _required.itemType, + token: _required.token, + identifier: _required.identifier, + amount: _required.amount, + recipient: payable(address(this)) + }); + } + } + + function getInventory() + external + view + returns (SpentItem[] memory offerable, SpentItem[] memory receivable) + { + // Set offerable and receivable supplied at deployment if unfulfilled. + if (!ready || fulfilled) { + offerable = new SpentItem[](0); + + receivable = new SpentItem[](0); + } else { + offerable = new SpentItem[](1 + extraAvailable); + for (uint256 i = 0; i < 1 + extraAvailable; ++i) { + offerable[i] = _available; + } + + receivable = new SpentItem[](1 + extraRequired); + for (uint256 i = 0; i < 1 + extraRequired; ++i) { + receivable[i] = _required; + } + } + } + + function ratifyOrder( + SpentItem[] calldata /* offer */, + ReceivedItem[] calldata /* consideration */, + bytes calldata /* context */, + bytes32[] calldata /* orderHashes */, + uint256 /* contractNonce */ + ) + external + pure + virtual + override + returns (bytes4 /* ratifyOrderMagicValue */) + { + return ContractOffererInterface.ratifyOrder.selector; + } + + function onERC1155Received( + address, + address, + uint256, + uint256, + bytes calldata + ) external pure returns (bytes4) { + return bytes4(0xf23a6e61); + } + + function supportsInterface( + bytes4 interfaceId + ) + public + view + virtual + override(ERC165, ContractOffererInterface) + returns (bool) + { + return + interfaceId == type(ContractOffererInterface).interfaceId || + super.supportsInterface(interfaceId); + } + + /** + * @dev Returns the metadata for this contract offerer. + */ + function getSeaportMetadata() + external + pure + override + returns ( + string memory name, + Schema[] memory schemas // map to Seaport Improvement Proposal IDs + ) + { + schemas = new Schema[](1); + schemas[0].id = 1337; + schemas[0].metadata = new bytes(0); + + return ("TestContractOffererNativeToken", schemas); + } +} diff --git a/contracts/seaport/test/TestERC1155.sol b/contracts/seaport/test/TestERC1155.sol new file mode 100644 index 00000000..ff967bec --- /dev/null +++ b/contracts/seaport/test/TestERC1155.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.13; + +import { ERC1155 } from "@rari-capital/solmate/src/tokens/ERC1155.sol"; + +// Used for minting test ERC1155s in our tests +contract TestERC1155 is ERC1155 { + function mint( + address to, + uint256 tokenId, + uint256 amount + ) public returns (bool) { + _mint(to, tokenId, amount, ""); + return true; + } + + function uri(uint256) public pure override returns (string memory) { + return "uri"; + } +} diff --git a/contracts/seaport/test/TestERC1155Revert.sol b/contracts/seaport/test/TestERC1155Revert.sol new file mode 100644 index 00000000..ac574248 --- /dev/null +++ b/contracts/seaport/test/TestERC1155Revert.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.0; + +contract TestERC1155Revert { + function safeTransferFrom( + address /* from */, + address /* to */, + uint256 /* id */, + uint256 /* amount */, + bytes calldata /* data */ + ) public pure { + revert( + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + ); + } + + function safeBatchTransferFrom( + address /* from */, + address /* to */, + uint256[] memory /* ids */, + uint256[] memory /* values */, + bytes memory /* data */ + ) public pure { + revert("Some ERC1155 revert message for batch transfers"); + } + + function getRevertData() public pure returns (bytes memory) { + assembly { + mstore(0x40, 0) + mstore(0, shl(20, 1)) + mstore(add(0x20, shl(20, 1)), 1) + return(0, add(0x20, shl(20, 1))) + } + } +} diff --git a/contracts/seaport/test/TestERC1271.sol b/contracts/seaport/test/TestERC1271.sol new file mode 100644 index 00000000..4e0756bf --- /dev/null +++ b/contracts/seaport/test/TestERC1271.sol @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.10; + +import { IERC1271 } from "@openzeppelin/contracts@seaport/interfaces/IERC1271.sol"; + +contract TestERC1271 is IERC1271 { + address public immutable owner; + + constructor(address owner_) { + owner = owner_; + } + + function isValidSignature( + bytes32 digest, + bytes memory signature + ) external view returns (bytes4) { + bytes32 r; + bytes32 s; + uint8 v; + + assembly { + r := mload(add(signature, 0x20)) + s := mload(add(signature, 0x40)) + v := byte(0, mload(add(signature, 0x60))) + } + + if ( + uint256(s) > + 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 + ) { + revert(); + } + + if (v != 27 && v != 28) { + revert(); + } + + address signer = ecrecover(digest, v, r, s); + + if (signer == address(0)) { + revert(); + } + + if (signer != owner) { + revert(); + } + + return IERC1271.isValidSignature.selector; + } +} diff --git a/contracts/seaport/test/TestERC20.sol b/contracts/seaport/test/TestERC20.sol new file mode 100644 index 00000000..fc3e5f0e --- /dev/null +++ b/contracts/seaport/test/TestERC20.sol @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.13; + +import { ERC20 } from "@rari-capital/solmate/src/tokens/ERC20.sol"; + +// Used for minting test ERC20s in our tests +contract TestERC20 is ERC20("Test20", "TST20", 18) { + bool public blocked; + + bool public noReturnData; + + constructor() { + blocked = false; + noReturnData = false; + } + + function blockTransfer(bool blocking) external { + blocked = blocking; + } + + function setNoReturnData(bool noReturn) external { + noReturnData = noReturn; + } + + function mint(address to, uint256 amount) external returns (bool) { + _mint(to, amount); + return true; + } + + function transferFrom( + address from, + address to, + uint256 amount + ) public override returns (bool ok) { + if (blocked) { + return false; + } + + uint256 allowed = allowance[from][msg.sender]; + + if (amount > allowed) { + revert("NOT_AUTHORIZED"); + } + + super.transferFrom(from, to, amount); + + if (noReturnData) { + assembly { + return(0, 0) + } + } + + ok = true; + } + + function increaseAllowance( + address spender, + uint256 amount + ) external returns (bool) { + uint256 current = allowance[msg.sender][spender]; + uint256 remaining = type(uint256).max - current; + if (amount > remaining) { + amount = remaining; + } + approve(spender, current + amount); + return true; + } +} diff --git a/contracts/seaport/test/TestERC20NotOk.sol b/contracts/seaport/test/TestERC20NotOk.sol new file mode 100644 index 00000000..5d794f4d --- /dev/null +++ b/contracts/seaport/test/TestERC20NotOk.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.13; + +import { ERC20 } from "@rari-capital/solmate/src/tokens/ERC20.sol"; + +// Used for minting test ERC20s in our tests. +contract TestERC20NotOk is ERC20("Test20NotOk", "TST20NO", 18) { + bool public notOk; + + function mint(address to, uint256 amount) external returns (bool) { + _mint(to, amount); + return true; + } + + function transferFrom( + address /* from */, + address /* to */, + uint256 /* amount */ + ) public pure override returns (bool) { + return false; + } +} diff --git a/contracts/seaport/test/TestERC20Panic.sol b/contracts/seaport/test/TestERC20Panic.sol new file mode 100644 index 00000000..1b204b25 --- /dev/null +++ b/contracts/seaport/test/TestERC20Panic.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { ERC20 } from "@rari-capital/solmate/src/tokens/ERC20.sol"; + +contract TestERC20Panic is ERC20("TestPanic", "PANIC", 18) { + function mint(address to, uint256 amount) external returns (bool) { + _mint(to, amount); + return true; + } + + function transferFrom( + address /* from */, + address /* to */, + uint256 /* amount */ + ) public pure override returns (bool) { + uint256 a = uint256(0) / uint256(0); + a; + + return true; + } +} diff --git a/contracts/seaport/test/TestERC20Revert.sol b/contracts/seaport/test/TestERC20Revert.sol new file mode 100644 index 00000000..37a01b13 --- /dev/null +++ b/contracts/seaport/test/TestERC20Revert.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { ERC20 } from "@rari-capital/solmate/src/tokens/ERC20.sol"; + +contract TestERC20Revert is ERC20("TestRevert", "REVERT", 18) { + function mint(address to, uint256 amount) external { + _mint(to, amount); + } + + function transferFrom( + address /* from */, + address /* to */, + uint256 /* amount */ + ) public pure override returns (bool) { + revert( + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + ); + } +} diff --git a/contracts/seaport/test/TestERC721.sol b/contracts/seaport/test/TestERC721.sol new file mode 100644 index 00000000..e207d9ae --- /dev/null +++ b/contracts/seaport/test/TestERC721.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.13; + +import { ERC721 } from "@rari-capital/solmate/src/tokens/ERC721.sol"; + +// Used for minting test ERC721s in our tests +contract TestERC721 is ERC721("Test721", "TST721") { + function mint(address to, uint256 tokenId) public returns (bool) { + _mint(to, tokenId); + return true; + } + + function tokenURI(uint256) public pure override returns (string memory) { + return "tokenURI"; + } +} diff --git a/contracts/seaport/test/TestERC721Fee.sol b/contracts/seaport/test/TestERC721Fee.sol new file mode 100644 index 00000000..952e9e48 --- /dev/null +++ b/contracts/seaport/test/TestERC721Fee.sol @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.10; + +import { ERC721 } from "@rari-capital/solmate/src/tokens/ERC721.sol"; +import { ERC2981 } from "./ERC2981.sol"; + +contract TestERC721Fee is ERC721, ERC2981 { + /// @notice When set to false, `royaltyInfo` reverts + bool creatorFeeEnabled = false; + /// @notice Below the min transaction price, `royaltyInfo` reverts + uint256 minTransactionPrice = 0; + + constructor() ERC721("Fee", "FEE") {} + + function supportsInterface( + bytes4 interfaceId + ) public view override(ERC721, ERC2981) returns (bool) { + return + ERC721.supportsInterface(interfaceId) || + ERC2981.supportsInterface(interfaceId); + } + + function mint(address to, uint256 id) external { + _mint(to, id); + } + + function burn(uint256 id) external { + _burn(id); + } + + function tokenURI(uint256) public pure override returns (string memory) { + return "tokenURI"; + } + + function royaltyInfo( + uint256, + uint256 _salePrice + ) public view override returns (address, uint256) { + if (!creatorFeeEnabled) { + revert("creator fee disabled"); + } + if (_salePrice < minTransactionPrice) { + revert("sale price too low"); + } + + return ( + 0x000000000000000000000000000000000000fEE2, + (_salePrice * (creatorFeeEnabled ? 250 : 0)) / 10000 + ); // 2.5% fee to 0xFEE2 + } + + function setCreatorFeeEnabled(bool enabled) public { + creatorFeeEnabled = enabled; + } + + function setMinTransactionPrice(uint256 minTransactionPrice_) public { + minTransactionPrice = minTransactionPrice_; + } +} diff --git a/contracts/seaport/test/TestERC721Funky.sol b/contracts/seaport/test/TestERC721Funky.sol new file mode 100644 index 00000000..ea2b082b --- /dev/null +++ b/contracts/seaport/test/TestERC721Funky.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.10; + +import { ERC721 } from "@rari-capital/solmate/src/tokens/ERC721.sol"; + +/** + * @notice TestERC721Funky is an ERC721 that implements ERC2981 with an incorrect return type. + */ +contract TestERC721Funky is ERC721("TestERC721Funky", "TST721FUNKY") { + function mint(address to, uint256 id) external { + _mint(to, id); + } + + function burn(uint256 id) external { + _burn(id); + } + + function tokenURI(uint256) public pure override returns (string memory) { + return "tokenURI"; + } + + function royaltyInfo(uint256, uint256) public pure returns (address) { + return (0x000000000000000000000000000000000000fEE2); // 2.5% fee to 0xFEE2 + } +} diff --git a/contracts/seaport/test/TestERC721Revert.sol b/contracts/seaport/test/TestERC721Revert.sol new file mode 100644 index 00000000..e0e89718 --- /dev/null +++ b/contracts/seaport/test/TestERC721Revert.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.0; + +import { TestERC721 } from "./TestERC721.sol"; + +contract TestERC721Revert is TestERC721 { + function transferFrom( + address /* from */, + address /* to */, + uint256 /* amount */ + ) public pure override { + revert( + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + ); + } +} diff --git a/contracts/seaport/test/TestInvalidContractOfferer.sol b/contracts/seaport/test/TestInvalidContractOfferer.sol new file mode 100644 index 00000000..d704ae68 --- /dev/null +++ b/contracts/seaport/test/TestInvalidContractOfferer.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { + ReceivedItem, + SpentItem +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { TestContractOfferer } from "./TestContractOfferer.sol"; + +contract TestInvalidContractOfferer is TestContractOfferer { + error RevertWithData(bytes revertData); + + constructor(address seaport) TestContractOfferer(seaport) {} + + function generateOrder( + address, + SpentItem[] calldata, + SpentItem[] calldata, + bytes calldata context + ) + external + pure + override + returns (SpentItem[] memory, ReceivedItem[] memory) + { + revert RevertWithData(context); + } +} diff --git a/contracts/seaport/test/TestInvalidContractOfferer165.sol b/contracts/seaport/test/TestInvalidContractOfferer165.sol new file mode 100644 index 00000000..a1dd8ac3 --- /dev/null +++ b/contracts/seaport/test/TestInvalidContractOfferer165.sol @@ -0,0 +1,309 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { + ERC20Interface, + ERC721Interface, + ERC1155Interface +} from "seaport-types/src/interfaces/AbridgedTokenInterfaces.sol"; + +import { + ContractOffererInterface +} from "seaport-types/src/interfaces/ContractOffererInterface.sol"; + +import { ERC165 } from "@openzeppelin/contracts@seaport/utils/introspection/ERC165.sol"; +import { ItemType } from "seaport-types/src/lib/ConsiderationEnums.sol"; + +import { + ReceivedItem, + Schema, + SpentItem +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +contract TestInvalidContractOfferer165 { + error OrderUnavailable(); + + address private immutable _SEAPORT; + + SpentItem private _available; + SpentItem private _required; + + bool public ready; + bool public fulfilled; + + uint256 public extraAvailable; + uint256 public extraRequired; + + constructor(address seaport) { + // Set immutable values and storage variables. + _SEAPORT = seaport; + fulfilled = false; + ready = false; + extraAvailable = 0; + extraRequired = 0; + } + + receive() external payable {} + + /// In case of criteria based orders and non-wildcard items, the member + /// `available.identifier` would correspond to the `identifierOrCriteria` + /// i.e., the merkle-root. + /// @param identifier corresponds to the actual token-id that gets transferred. + function activateWithCriteria( + SpentItem memory available, + SpentItem memory required, + uint256 identifier + ) public { + if (ready || fulfilled) { + revert OrderUnavailable(); + } + + if (available.itemType == ItemType.ERC721_WITH_CRITERIA) { + ERC721Interface token = ERC721Interface(available.token); + + token.transferFrom(msg.sender, address(this), identifier); + + token.setApprovalForAll(_SEAPORT, true); + } else if (available.itemType == ItemType.ERC1155_WITH_CRITERIA) { + ERC1155Interface token = ERC1155Interface(available.token); + + token.safeTransferFrom( + msg.sender, + address(this), + identifier, + available.amount, + "" + ); + + token.setApprovalForAll(_SEAPORT, true); + } + + // Set storage variables. + _available = available; + _required = required; + ready = true; + } + + function activate( + SpentItem memory available, + SpentItem memory required + ) public payable { + if (ready || fulfilled) { + revert OrderUnavailable(); + } + + // Retrieve the offered item and set associated approvals. + if (available.itemType == ItemType.NATIVE) { + available.amount = address(this).balance; + } else if (available.itemType == ItemType.ERC20) { + ERC20Interface token = ERC20Interface(available.token); + + token.transferFrom(msg.sender, address(this), available.amount); + + token.approve(_SEAPORT, available.amount); + } else if (available.itemType == ItemType.ERC721) { + ERC721Interface token = ERC721Interface(available.token); + + token.transferFrom(msg.sender, address(this), available.identifier); + + token.setApprovalForAll(_SEAPORT, true); + } else if (available.itemType == ItemType.ERC1155) { + ERC1155Interface token = ERC1155Interface(available.token); + + token.safeTransferFrom( + msg.sender, + address(this), + available.identifier, + available.amount, + "" + ); + + token.setApprovalForAll(_SEAPORT, true); + } + + // Set storage variables. + _available = available; + _required = required; + ready = true; + } + + function extendAvailable() public { + if (!ready || fulfilled) { + revert OrderUnavailable(); + } + + extraAvailable++; + + _available.amount /= 2; + } + + function extendRequired() public { + if (!ready || fulfilled) { + revert OrderUnavailable(); + } + + extraRequired++; + } + + function generateOrder( + address, + SpentItem[] calldata, + SpentItem[] calldata, + bytes calldata context + ) + external + virtual + returns (SpentItem[] memory offer, ReceivedItem[] memory consideration) + { + // Ensure the caller is Seaport & the order has not yet been fulfilled. + if ( + !ready || + fulfilled || + msg.sender != _SEAPORT || + context.length % 32 != 0 + ) { + revert OrderUnavailable(); + } + + // Set the offer and consideration that were supplied during deployment. + offer = new SpentItem[](1 + extraAvailable); + consideration = new ReceivedItem[](1 + extraRequired); + + for (uint256 i = 0; i < 1 + extraAvailable; ++i) { + offer[i] = _available; + } + + for (uint256 i = 0; i < 1 + extraRequired; ++i) { + consideration[i] = ReceivedItem({ + itemType: _required.itemType, + token: _required.token, + identifier: _required.identifier, + amount: _required.amount, + recipient: payable(address(this)) + }); + } + + // Update storage to reflect that the order has been fulfilled. + fulfilled = true; + } + + function previewOrder( + address caller, + address, + SpentItem[] calldata, + SpentItem[] calldata, + bytes calldata context + ) + external + view + returns (SpentItem[] memory offer, ReceivedItem[] memory consideration) + { + // Ensure the caller is Seaport & the order has not yet been fulfilled. + if ( + !ready || + fulfilled || + caller != _SEAPORT || + context.length % 32 != 0 + ) { + revert OrderUnavailable(); + } + + // Set the offer and consideration that were supplied during deployment. + offer = new SpentItem[](1 + extraAvailable); + consideration = new ReceivedItem[](1 + extraRequired); + + for (uint256 i = 0; i < 1 + extraAvailable; ++i) { + offer[i] = _available; + } + + for (uint256 i = 0; i < 1 + extraRequired; ++i) { + consideration[i] = ReceivedItem({ + itemType: _required.itemType, + token: _required.token, + identifier: _required.identifier, + amount: _required.amount, + recipient: payable(address(this)) + }); + } + } + + function getInventory() + external + view + returns (SpentItem[] memory offerable, SpentItem[] memory receivable) + { + // Set offerable and receivable supplied at deployment if unfulfilled. + if (!ready || fulfilled) { + offerable = new SpentItem[](0); + + receivable = new SpentItem[](0); + } else { + offerable = new SpentItem[](1 + extraAvailable); + for (uint256 i = 0; i < 1 + extraAvailable; ++i) { + offerable[i] = _available; + } + + receivable = new SpentItem[](1 + extraRequired); + for (uint256 i = 0; i < 1 + extraRequired; ++i) { + receivable[i] = _required; + } + } + } + + function ratifyOrder( + SpentItem[] calldata /* offer */, + ReceivedItem[] calldata /* consideration */, + bytes calldata context, + bytes32[] calldata orderHashes, + uint256 /* contractNonce */ + ) external pure virtual returns (bytes4 /* ratifyOrderMagicValue */) { + if (context.length > 32 && context.length % 32 == 0) { + bytes32[] memory expectedOrderHashes = abi.decode( + context, + (bytes32[]) + ); + + uint256 expectedLength = expectedOrderHashes.length; + + if (expectedLength != orderHashes.length) { + revert("Revert on unexpected order hashes length"); + } + + for (uint256 i = 0; i < expectedLength; ++i) { + if (expectedOrderHashes[i] != orderHashes[i]) { + revert("Revert on unexpected order hash"); + } + } + } + + return ContractOffererInterface.ratifyOrder.selector; + } + + function onERC1155Received( + address, + address, + uint256, + uint256, + bytes calldata + ) external pure returns (bytes4) { + return bytes4(0xf23a6e61); + } + + /** + * @dev Returns the metadata for this contract offerer. + */ + function getSeaportMetadata() + external + pure + returns ( + string memory name, + Schema[] memory schemas // map to Seaport Improvement Proposal IDs + ) + { + schemas = new Schema[](1); + schemas[0].id = 1337; + schemas[0].metadata = new bytes(0); + + return ("TestContractOfferer", schemas); + } +} diff --git a/contracts/seaport/test/TestInvalidContractOffererRatifyOrder.sol b/contracts/seaport/test/TestInvalidContractOffererRatifyOrder.sol new file mode 100644 index 00000000..0c578c64 --- /dev/null +++ b/contracts/seaport/test/TestInvalidContractOffererRatifyOrder.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { + ReceivedItem, + SpentItem +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { TestContractOfferer } from "./TestContractOfferer.sol"; + +contract TestInvalidContractOffererRatifyOrder is TestContractOfferer { + constructor(address seaport) TestContractOfferer(seaport) {} + + function ratifyOrder( + SpentItem[] calldata, + ReceivedItem[] calldata, + bytes calldata, + bytes32[] calldata, + uint256 + ) external pure override returns (bytes4) { + return bytes4(keccak256("throw")); + } +} diff --git a/contracts/seaport/test/TestInvalidZone.sol b/contracts/seaport/test/TestInvalidZone.sol new file mode 100644 index 00000000..b547c374 --- /dev/null +++ b/contracts/seaport/test/TestInvalidZone.sol @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { + ZoneParameters, + Schema +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { ERC165 } from "@openzeppelin/contracts@seaport/utils/introspection/ERC165.sol"; +import { ZoneInterface } from "seaport-types/src/interfaces/ZoneInterface.sol"; + +contract TestInvalidZone is ERC165, ZoneInterface { + // Returns invalid magic value + function validateOrder( + ZoneParameters calldata + ) external pure returns (bytes4 validOrderMagicValue) { + return ZoneInterface.getSeaportMetadata.selector; + } + + /** + * @dev Returns the metadata for this zone. + */ + function getSeaportMetadata() + external + pure + override + returns ( + string memory name, + Schema[] memory schemas // map to Seaport Improvement Proposal IDs + ) + { + schemas = new Schema[](1); + schemas[0].id = 3003; + schemas[0].metadata = new bytes(0); + + return ("TestZone", schemas); + } + + function supportsInterface( + bytes4 interfaceId + ) public view override(ERC165, ZoneInterface) returns (bool) { + return + interfaceId == type(ZoneInterface).interfaceId || + super.supportsInterface(interfaceId); + } +} diff --git a/contracts/seaport/test/TestPostExecution.sol b/contracts/seaport/test/TestPostExecution.sol new file mode 100644 index 00000000..d3cd2741 --- /dev/null +++ b/contracts/seaport/test/TestPostExecution.sol @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { ZoneInterface } from "seaport-types/src/interfaces/ZoneInterface.sol"; + +import { ERC165 } from "@openzeppelin/contracts@seaport/utils/introspection/ERC165.sol"; +import { + ERC721Interface +} from "seaport-types/src/interfaces/AbridgedTokenInterfaces.sol"; + +import { ItemType } from "seaport-types/src/lib/ConsiderationEnums.sol"; + +import { + ReceivedItem, + Schema, + ZoneParameters +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +contract TestPostExecution is ERC165, ZoneInterface { + function validateOrder( + ZoneParameters calldata zoneParameters + ) external view override returns (bytes4 validOrderMagicValue) { + if (zoneParameters.consideration.length == 0) { + revert("No consideration items supplied"); + } + + ReceivedItem memory receivedItem = zoneParameters.consideration[0]; + + address currentOwner; + try + ERC721Interface(receivedItem.token).ownerOf(receivedItem.identifier) + returns (address owner) { + currentOwner = owner; + } catch { + revert("Unsupported consideration token type (must implement 721)"); + } + + if (receivedItem.itemType != ItemType.ERC721) { + revert("Validity check performed with unsupported item type"); + } + + // Note that endAmount has been repurposed as recipient; this interface + // still needs to be modified to return spent / received items. + if (receivedItem.amount != 1) { + // Note that this is currently failing in the matchOrder case. + revert("Returned item amount incorrectly modified"); + } + + if (currentOwner != receivedItem.recipient) { + revert("Validity check performed prior to execution"); + } + + validOrderMagicValue = ZoneInterface.validateOrder.selector; + } + + /** + * @dev Returns the metadata for this zone. + */ + function getSeaportMetadata() + external + pure + override + returns ( + string memory name, + Schema[] memory schemas // map to Seaport Improvement Proposal IDs + ) + { + schemas = new Schema[](1); + schemas[0].id = 3003; + schemas[0].metadata = new bytes(0); + + return ("TestPostExecution", schemas); + } + + function supportsInterface( + bytes4 interfaceId + ) public view override(ERC165, ZoneInterface) returns (bool) { + return + interfaceId == type(ZoneInterface).interfaceId || + super.supportsInterface(interfaceId); + } +} diff --git a/contracts/seaport/test/TestTransferValidationZoneOfferer.sol b/contracts/seaport/test/TestTransferValidationZoneOfferer.sol new file mode 100644 index 00000000..7e5a255a --- /dev/null +++ b/contracts/seaport/test/TestTransferValidationZoneOfferer.sol @@ -0,0 +1,465 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { + ERC20Interface, + ERC721Interface, + ERC1155Interface +} from "seaport-types/src/interfaces/AbridgedTokenInterfaces.sol"; + +import { ERC165 } from "@openzeppelin/contracts@seaport/utils/introspection/ERC165.sol"; +import { + ReceivedItem, + Schema, + SpentItem, + ZoneParameters +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { ItemType } from "seaport-types/src/lib/ConsiderationEnums.sol"; + +import { + ContractOffererInterface +} from "seaport-types/src/interfaces/ContractOffererInterface.sol"; + +import { ZoneInterface } from "seaport-types/src/interfaces/ZoneInterface.sol"; + +/** + * @dev This contract is used to validate transfer within the zone/offerer. Use + * the HashValidationZoneOfferer to validate calldata via hashes. + */ +contract TestTransferValidationZoneOfferer is + ContractOffererInterface, + ZoneInterface, + ERC165 +{ + error InvalidNativeTokenBalance( + uint256 expectedBalance, + uint256 actualBalance, + address checkedAddress + ); + error InvalidERC20Balance( + uint256 expectedBalance, + uint256 actualBalance, + address checkedAddress, + address checkedToken + ); + error InvalidERC1155Balance( + uint256 expectedBalance, + uint256 actualBalance, + address checkedAddress, + address checkedToken + ); + // 0x38fb386a + error InvalidOwner( + address expectedOwner, + address actualOwner, + address checkedToken, + uint256 checkedTokenId + ); + error IncorrectSeaportBalance( + uint256 expectedBalance, + uint256 actualBalance + ); + event ValidateOrderDataHash(bytes32 dataHash); + + receive() external payable {} + + address internal _expectedOfferRecipient; + + mapping(bytes32 => bytes32) public orderHashToValidateOrderDataHash; + + // Pass in the null address to expect the fulfiller. + constructor(address expectedOfferRecipient) { + _expectedOfferRecipient = expectedOfferRecipient; + } + + bool public called = false; + uint public callCount = 0; + + /** + * @dev Validates that the parties have received the correct items. + * + * @param zoneParameters The zone parameters, including the SpentItem and + * ReceivedItem arrays. + * + * @return validOrderMagicValue The magic value to indicate things are OK. + */ + function validateOrder( + ZoneParameters calldata zoneParameters + ) external override returns (bytes4 validOrderMagicValue) { + // Validate the order. + + // Currently assumes that the balances of all tokens of addresses are + // zero at the start of the transaction. Accordingly, take care to + // use an address in tests that is not pre-populated with tokens. + + // Get the length of msg.data + uint256 dataLength = msg.data.length; + + // Create a variable to store msg.data in memory + bytes memory data; + + // Copy msg.data to memory + assembly { + let ptr := mload(0x40) + calldatacopy(add(ptr, 0x20), 0, dataLength) + mstore(ptr, dataLength) + data := ptr + } + + // Get the hash of msg.data + bytes32 calldataHash = keccak256(data); + + // Get the orderHash from zoneParameters + bytes32 orderHash = zoneParameters.orderHash; + + // Store callDataHash in orderHashToValidateOrderDataHash + orderHashToValidateOrderDataHash[orderHash] = calldataHash; + + // Emit a DataHash event with the hash of msg.data + emit ValidateOrderDataHash(calldataHash); + + // Check if Seaport is empty. This makes sure that we've transferred + // all native token balance out of Seaport before we do the validation. + uint256 seaportBalance = address(msg.sender).balance; + + if (seaportBalance > 0) { + revert IncorrectSeaportBalance(0, seaportBalance); + } + + // Ensure that the offerer or recipient has received all consideration + // items. + _assertValidReceivedItems(zoneParameters.consideration); + + address expectedOfferRecipient = _expectedOfferRecipient == address(0) + ? zoneParameters.fulfiller + : _expectedOfferRecipient; + + // Ensure that the expected recipient has received all offer items. + _assertValidSpentItems(expectedOfferRecipient, zoneParameters.offer); + + // Set the global called flag to true. + called = true; + callCount++; + + // Return the selector of validateOrder as the magic value. + validOrderMagicValue = this.validateOrder.selector; + } + + /** + * @dev Generates an order with the specified minimum and maximum spent + * items. + */ + function generateOrder( + address, + SpentItem[] calldata a, + SpentItem[] calldata b, + bytes calldata c + ) + external + virtual + override + returns (SpentItem[] memory offer, ReceivedItem[] memory consideration) + { + return previewOrder(address(this), address(this), a, b, c); + } + + /** + * @dev View function to preview an order generated in response to a minimum + * set of received items, maximum set of spent items, and context + * (supplied as extraData). + */ + function previewOrder( + address, + address, + SpentItem[] calldata a, + SpentItem[] calldata b, + bytes calldata + ) + public + view + override + returns (SpentItem[] memory offer, ReceivedItem[] memory consideration) + { + return (a, _convertSpentToReceived(b)); + } + + /** + * @dev Ratifies that the parties have received the correct items. + * + * @param minimumReceived The minimum items that the caller was willing to + * receive. + * @param maximumSpent The maximum items that the caller was willing to + * spend. + * @param context The context of the order. + * @ param orderHashes The order hashes, unused here. + * @ param contractNonce The contract nonce, unused here. + * + * @return ratifyOrderMagicValue The magic value to indicate things are OK. + */ + function ratifyOrder( + SpentItem[] calldata minimumReceived /* offer */, + ReceivedItem[] calldata maximumSpent /* consideration */, + bytes calldata context /* context */, + bytes32[] calldata /* orderHashes */, + uint256 /* contractNonce */ + ) external override returns (bytes4 /* ratifyOrderMagicValue */) { + // Ratify the order. + // Check if Seaport is empty. This makes sure that we've transferred + // all native token balance out of Seaport before we do the validation. + uint256 seaportBalance = address(msg.sender).balance; + + if (seaportBalance > 0) { + revert IncorrectSeaportBalance(0, seaportBalance); + } + + // Ensure that the offerer or recipient has received all consideration + // items. + _assertValidReceivedItems(maximumSpent); + + // It's necessary to pass in either an expected offerer or an address + // in the context. If neither is provided, this ternary will revert + // with a generic, hard-to-debug revert when it tries to slice bytes + // from the context. + address expectedOfferRecipient = _expectedOfferRecipient == address(0) + ? address(bytes20(context[0:20])) + : _expectedOfferRecipient; + + // Ensure that the expected recipient has received all offer items. + _assertValidSpentItems(expectedOfferRecipient, minimumReceived); + + // Set the global called flag to true. + called = true; + callCount++; + + return this.ratifyOrder.selector; + } + + function getSeaportMetadata() + external + pure + override(ContractOffererInterface, ZoneInterface) + returns (string memory name, Schema[] memory schemas) + { + // Return the metadata. + name = "TestTransferValidationZoneOfferer"; + schemas = new Schema[](1); + schemas[0].id = 1337; + schemas[0].metadata = new bytes(0); + } + + function _convertSpentToReceived( + SpentItem[] calldata spentItems + ) internal view returns (ReceivedItem[] memory) { + ReceivedItem[] memory receivedItems = new ReceivedItem[]( + spentItems.length + ); + for (uint256 i = 0; i < spentItems.length; ++i) { + receivedItems[i] = _convertSpentToReceived(spentItems[i]); + } + return receivedItems; + } + + function _convertSpentToReceived( + SpentItem calldata spentItem + ) internal view returns (ReceivedItem memory) { + return + ReceivedItem({ + itemType: spentItem.itemType, + token: spentItem.token, + identifier: spentItem.identifier, + amount: spentItem.amount, + recipient: payable(address(this)) + }); + } + + function _assertValidReceivedItems( + ReceivedItem[] calldata receivedItems + ) internal view { + address recipient; + ItemType itemType; + ReceivedItem memory receivedItem; + + // Iterate over all received items. + for (uint256 i = 0; i < receivedItems.length; i++) { + // Check if the consideration item has been received. + receivedItem = receivedItems[i]; + // Get the recipient of the consideration item. + recipient = receivedItem.recipient; + // Get item type. + itemType = receivedItem.itemType; + + // Check balance/ownerOf depending on item type. + if (itemType == ItemType.NATIVE) { + // NATIVE Token + _assertNativeTokenTransfer(receivedItem.amount, recipient); + } else if (itemType == ItemType.ERC20) { + // ERC20 Token + _assertERC20Transfer( + receivedItem.amount, + receivedItem.token, + recipient + ); + } else if (itemType == ItemType.ERC721) { + // ERC721 Token + _assertERC721Transfer( + receivedItem.identifier, + receivedItem.token, + recipient + ); + } else if (itemType == ItemType.ERC1155) { + // ERC1155 Token + _assertERC1155Transfer( + receivedItem.amount, + receivedItem.identifier, + receivedItem.token, + recipient + ); + } + } + } + + function _assertValidSpentItems( + address expectedRecipient, + SpentItem[] calldata spentItems + ) internal view { + SpentItem memory spentItem; + ItemType itemType; + + // Iterate over all spent items. + for (uint256 i = 0; i < spentItems.length; i++) { + // Check if the offer item has been spent. + spentItem = spentItems[i]; + // Get item type. + itemType = spentItem.itemType; + + // Check balance/ownerOf depending on item type. + if (itemType == ItemType.NATIVE) { + // NATIVE Token + _assertNativeTokenTransfer(spentItem.amount, expectedRecipient); + } else if (itemType == ItemType.ERC20) { + // ERC20 Token + _assertERC20Transfer( + spentItem.amount, + spentItem.token, + expectedRecipient + ); + } else if (itemType == ItemType.ERC721) { + // ERC721 Token + _assertERC721Transfer( + spentItem.identifier, + spentItem.token, + expectedRecipient + ); + } else if (itemType == ItemType.ERC1155) { + // ERC1155 Token + _assertERC1155Transfer( + spentItem.amount, + spentItem.identifier, + spentItem.token, + expectedRecipient + ); + } + } + } + + function _assertNativeTokenTransfer( + uint256 expectedAmount, + address expectedRecipient + ) internal view { + // If the amount we read from the spent item or received item (the + // expected transfer value) is greater than the balance of the expected + // recipient then revert, because that means the recipient did not + // receive the expected amount at the time the order was ratified or + // validated. + if (expectedAmount > address(expectedRecipient).balance) { + revert InvalidNativeTokenBalance( + expectedAmount, + address(expectedRecipient).balance, + expectedRecipient + ); + } + } + + function _assertERC20Transfer( + uint256 expectedAmount, + address token, + address expectedRecipient + ) internal view { + // If the amount we read from the spent item or received item (the + // expected transfer value) is greater than the balance of the expected + // recipient, revert. + if ( + expectedAmount > ERC20Interface(token).balanceOf(expectedRecipient) + ) { + revert InvalidERC20Balance( + expectedAmount, + ERC20Interface(token).balanceOf(expectedRecipient), + expectedRecipient, + token + ); + } + } + + function _assertERC721Transfer( + uint256 checkedTokenId, + address token, + address expectedRecipient + ) internal view { + // If the actual owner of the token is not the expected recipient, + // revert. + address actualOwner = ERC721Interface(token).ownerOf(checkedTokenId); + if (expectedRecipient != actualOwner) { + revert InvalidOwner( + expectedRecipient, + actualOwner, + token, + checkedTokenId + ); + } + } + + function _assertERC1155Transfer( + uint256 expectedAmount, + uint256 identifier, + address token, + address expectedRecipient + ) internal view { + // If the amount we read from the spent item or received item (the + // expected transfer value) is greater than the balance of the expected + // recipient, revert. + if ( + expectedAmount > + ERC1155Interface(token).balanceOf(expectedRecipient, identifier) + ) { + revert InvalidERC1155Balance( + expectedAmount, + ERC1155Interface(token).balanceOf( + expectedRecipient, + identifier + ), + expectedRecipient, + token + ); + } + } + + function setExpectedOfferRecipient(address expectedOfferRecipient) public { + _expectedOfferRecipient = expectedOfferRecipient; + } + + function supportsInterface( + bytes4 interfaceId + ) + public + view + virtual + override(ERC165, ContractOffererInterface, ZoneInterface) + returns (bool) + { + return + interfaceId == type(ContractOffererInterface).interfaceId || + interfaceId == type(ZoneInterface).interfaceId || + super.supportsInterface(interfaceId); + } +} diff --git a/contracts/seaport/test/TestZone.sol b/contracts/seaport/test/TestZone.sol new file mode 100644 index 00000000..02c3aa9e --- /dev/null +++ b/contracts/seaport/test/TestZone.sol @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { ZoneInterface } from "seaport-types/src/interfaces/ZoneInterface.sol"; +import { ERC165 } from "@openzeppelin/contracts@seaport/utils/introspection/ERC165.sol"; +import { + Schema, + ZoneParameters +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +contract TestZone is ERC165, ZoneInterface { + function validateOrder( + ZoneParameters calldata zoneParameters + ) external pure override returns (bytes4 validOrderMagicValue) { + if (zoneParameters.extraData.length == 0) { + if (zoneParameters.zoneHash == bytes32(uint256(1))) { + revert("Revert on zone hash 1"); + } else if (zoneParameters.zoneHash == bytes32(uint256(2))) { + assembly { + revert(0, 0) + } + } + } else if (zoneParameters.extraData.length == 4) { + revert("Revert on extraData length 4"); + } else if (zoneParameters.extraData.length == 5) { + assembly { + revert(0, 0) + } + } else if ( + zoneParameters.extraData.length > 32 && + zoneParameters.extraData.length % 32 == 0 + ) { + bytes32[] memory expectedOrderHashes = abi.decode( + zoneParameters.extraData, + (bytes32[]) + ); + + uint256 expectedLength = expectedOrderHashes.length; + + if (expectedLength != zoneParameters.orderHashes.length) { + revert("Revert on unexpected order hashes length"); + } + + for (uint256 i = 0; i < expectedLength; ++i) { + if (expectedOrderHashes[i] != zoneParameters.orderHashes[i]) { + revert("Revert on unexpected order hash"); + } + } + } + + validOrderMagicValue = zoneParameters.zoneHash != bytes32(uint256(3)) + ? ZoneInterface.validateOrder.selector + : bytes4(0xffffffff); + } + + /** + * @dev Returns the metadata for this zone. + */ + function getSeaportMetadata() + external + pure + override + returns ( + string memory name, + Schema[] memory schemas // map to Seaport Improvement Proposal IDs + ) + { + schemas = new Schema[](1); + schemas[0].id = 3003; + schemas[0].metadata = new bytes(0); + + return ("TestZone", schemas); + } + + function supportsInterface( + bytes4 interfaceId + ) public view override(ERC165, ZoneInterface) returns (bool) { + return + interfaceId == type(ZoneInterface).interfaceId || + super.supportsInterface(interfaceId); + } +} diff --git a/contracts/seaport/test/TypehashDirectory.sol b/contracts/seaport/test/TypehashDirectory.sol new file mode 100644 index 00000000..e23dffcb --- /dev/null +++ b/contracts/seaport/test/TypehashDirectory.sol @@ -0,0 +1,183 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.17; + +import { + FreeMemoryPointerSlot, + OneWord, + OneWordShift, + ThirtyOneBytes +} from "seaport-types/src/lib/ConsiderationConstants.sol"; + +/** + * @title TypehashDirectory + * @notice The typehash directory contains 24 bulk order EIP-712 typehashes, + * depending on the height of the tree in each bulk order payload, as + * its runtime code (with an invalid opcode prefix so that the contract + * cannot be called normally). This runtime code is designed to be read + * from by Seaport using `extcodecopy` while verifying bulk signatures. + */ +contract TypehashDirectory { + // Encodes "[2]" for use in deriving typehashes. + bytes3 internal constant twoSubstring = 0x5B325D; + uint256 internal constant twoSubstringLength = 0x3; + + // Dictates maximum bulk order group size; 24 => 2^24 => 16,777,216 orders. + uint256 internal constant MaxTreeHeight = 0x18; + + uint256 internal constant InvalidOpcode = 0xfe; + + /** + * @dev Derive 24 bulk order EIP-712 typehashes, one for each supported + * tree height from 1 to 24, and write them to runtime code. + */ + constructor() { + // Declare an array where each type hash will be written. + bytes32[] memory typeHashes = new bytes32[](MaxTreeHeight); + + // Derive a string of 24 "[2]" substrings. + bytes memory brackets = getMaxTreeBrackets(MaxTreeHeight); + + // Derive a string of subtypes for the order parameters. + bytes memory subTypes = getTreeSubTypes(); + + // Cache memory pointer before each loop so memory doesn't expand by the + // full string size on each loop. + uint256 freeMemoryPointer; + assembly { + freeMemoryPointer := mload(FreeMemoryPointerSlot) + } + + // Iterate over each tree height. + for (uint256 i = 0; i < MaxTreeHeight; ) { + // The actual height is one greater than its respective index. + uint256 height = i + 1; + + // Slice brackets length to size needed for `height`. + assembly { + mstore(brackets, mul(twoSubstringLength, height)) + } + + // Encode the type string for the BulkOrder struct. + bytes memory bulkOrderTypeString = bytes.concat( + "BulkOrder(OrderComponents", + brackets, + " tree)", + subTypes + ); + + // Derive EIP712 type hash. + bytes32 typeHash = keccak256(bulkOrderTypeString); + typeHashes[i] = typeHash; + + // Reset the free memory pointer. + assembly { + mstore(FreeMemoryPointerSlot, freeMemoryPointer) + } + + unchecked { + ++i; + } + } + + assembly { + // Overwrite length with zero to give the contract an INVALID prefix + // and deploy the type hashes array as a contract. + mstore(typeHashes, InvalidOpcode) + + return( + add(typeHashes, ThirtyOneBytes), + add(shl(OneWordShift, MaxTreeHeight), 1) + ) + } + } + + /** + * @dev Internal pure function that returns a string of "[2]" substrings, + * with a number of substrings equal to the provided height. + * + * @param maxHeight The number of "[2]" substrings to include. + * + * @return A bytes array representing the string. + */ + function getMaxTreeBrackets( + uint256 maxHeight + ) internal pure returns (bytes memory) { + bytes memory suffixes = new bytes(twoSubstringLength * maxHeight); + assembly { + // Retrieve the pointer to the array head. + let ptr := add(suffixes, OneWord) + + // Derive the terminal pointer. + let endPtr := add(ptr, mul(maxHeight, twoSubstringLength)) + + // Iterate over each pointer until terminal pointer is reached. + for { + + } lt(ptr, endPtr) { + ptr := add(ptr, twoSubstringLength) + } { + // Insert "[2]" substring directly at current pointer location. + mstore(ptr, twoSubstring) + } + } + + // Return the fully populated array of substrings. + return suffixes; + } + + /** + * @dev Internal pure function that returns a string of subtypes used in + * generating bulk order EIP-712 typehashes. + * + * @return A bytes array representing the string. + */ + function getTreeSubTypes() internal pure returns (bytes memory) { + // Construct the OfferItem type string. + bytes memory offerItemTypeString = bytes( + "OfferItem(" + "uint8 itemType," + "address token," + "uint256 identifierOrCriteria," + "uint256 startAmount," + "uint256 endAmount" + ")" + ); + + // Construct the ConsiderationItem type string. + bytes memory considerationItemTypeString = bytes( + "ConsiderationItem(" + "uint8 itemType," + "address token," + "uint256 identifierOrCriteria," + "uint256 startAmount," + "uint256 endAmount," + "address recipient" + ")" + ); + + // Construct the OrderComponents type string, not including the above. + bytes memory orderComponentsPartialTypeString = bytes( + "OrderComponents(" + "address offerer," + "address zone," + "OfferItem[] offer," + "ConsiderationItem[] consideration," + "uint8 orderType," + "uint256 startTime," + "uint256 endTime," + "bytes32 zoneHash," + "uint256 salt," + "bytes32 conduitKey," + "uint256 counter" + ")" + ); + + // Return the combined string. + return + bytes.concat( + considerationItemTypeString, + offerItemTypeString, + orderComponentsPartialTypeString + ); + } +} diff --git a/contracts/seaport/zones/PausableZone.sol b/contracts/seaport/zones/PausableZone.sol new file mode 100644 index 00000000..4eedf1b1 --- /dev/null +++ b/contracts/seaport/zones/PausableZone.sol @@ -0,0 +1,268 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { ZoneInterface } from "seaport-types/src/interfaces/ZoneInterface.sol"; + +import { + PausableZoneEventsAndErrors +} from "./interfaces/PausableZoneEventsAndErrors.sol"; + +import { ERC165 } from "@openzeppelin/contracts@seaport/utils/introspection/ERC165.sol"; + +import { + SeaportInterface +} from "seaport-types/src/interfaces/SeaportInterface.sol"; + +import { + AdvancedOrder, + CriteriaResolver, + Execution, + Fulfillment, + Order, + OrderComponents, + Schema, + ZoneParameters +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { PausableZoneInterface } from "./interfaces/PausableZoneInterface.sol"; + +/** + * @title PausableZone + * @author cupOJoseph, BCLeFevre, ryanio + * @notice PausableZone is a simple zone implementation that approves every + * order. It can be self-destructed by its controller to pause + * restricted orders that have it set as their zone. Note that this zone + * cannot execute orders that return native tokens to the fulfiller. + */ +contract PausableZone is + ERC165, + PausableZoneEventsAndErrors, + ZoneInterface, + PausableZoneInterface +{ + // Set an immutable controller that can pause the zone & update an operator. + address internal immutable _controller; + + // Set an operator that can instruct the zone to cancel or execute orders. + address public operator; + + /** + * @dev Ensure that the caller is either the operator or controller. + */ + modifier isOperator() { + // Ensure that the caller is either the operator or the controller. + if (msg.sender != operator && msg.sender != _controller) { + revert InvalidOperator(); + } + + // Continue with function execution. + _; + } + + /** + * @dev Ensure that the caller is the controller. + */ + modifier isController() { + // Ensure that the caller is the controller. + if (msg.sender != _controller) { + revert InvalidController(); + } + + // Continue with function execution. + _; + } + + /** + * @notice Set the deployer as the controller of the zone. + */ + constructor() { + // Set the controller to the deployer. + _controller = msg.sender; + + // Emit an event signifying that the zone is unpaused. + emit Unpaused(); + } + + /** + * @notice Cancel an arbitrary number of orders that have agreed to use the + * contract as their zone. + * + * @param seaport The Seaport address. + * @param orders The orders to cancel. + * + * @return cancelled A boolean indicating whether the supplied orders have + * been successfully cancelled. + */ + function cancelOrders( + SeaportInterface seaport, + OrderComponents[] calldata orders + ) external override isOperator returns (bool cancelled) { + // Call cancel on Seaport and return its boolean value. + cancelled = seaport.cancel(orders); + } + + /** + * @notice Pause this contract, safely stopping orders from using + * the contract as a zone. Restricted orders with this address as a + * zone will not be fulfillable unless the zone is redeployed to the + * same address. + */ + function pause(address payee) external override isController { + // Emit an event signifying that the zone is paused. + emit Paused(); + + // Destroy the zone, sending any native tokens to the transaction + // submitter. + selfdestruct(payable(payee)); + } + + /** + * @notice Assign the given address with the ability to operate the zone. + * + * @param operatorToAssign The address to assign as the operator. + */ + function assignOperator( + address operatorToAssign + ) external override isController { + // Ensure the operator being assigned is not the null address. + if (operatorToAssign == address(0)) { + revert PauserCanNotBeSetAsZero(); + } + + // Set the given address as the new operator. + operator = operatorToAssign; + + // Emit an event indicating the operator has been updated. + emit OperatorUpdated(operatorToAssign); + } + + /** + * @notice Execute an arbitrary number of matched orders, each with + * an arbitrary number of items for offer and consideration + * along with a set of fulfillments allocating offer components + * to consideration components. Note that this call will revert if + * excess native tokens are returned by Seaport. + * + * @param seaport The Seaport address. + * @param orders The orders to match. + * @param fulfillments An array of elements allocating offer components + * to consideration components. + * + * @return executions An array of elements indicating the sequence of + * transfers performed as part of matching the given + * orders. + */ + function executeMatchOrders( + SeaportInterface seaport, + Order[] calldata orders, + Fulfillment[] calldata fulfillments + ) + external + payable + override + isOperator + returns (Execution[] memory executions) + { + // Call matchOrders on Seaport and return the sequence of transfers + // performed as part of matching the given orders. + executions = seaport.matchOrders{ value: msg.value }( + orders, + fulfillments + ); + } + + /** + * @notice Execute an arbitrary number of matched advanced orders, + * each with an arbitrary number of items for offer and + * consideration along with a set of fulfillments allocating + * offer components to consideration components. Note that this call + * will revert if excess native tokens are returned by Seaport. + * + * @param seaport The Seaport address. + * @param orders The orders to match. + * @param criteriaResolvers An array where each element contains a reference + * to a specific order as well as that order's + * offer or consideration, a token identifier, and + * a proof that the supplied token identifier is + * contained in the order's merkle root. + * @param fulfillments An array of elements allocating offer components + * to consideration components. + * + * @return executions An array of elements indicating the sequence of + * transfers performed as part of matching the given + * orders. + */ + function executeMatchAdvancedOrders( + SeaportInterface seaport, + AdvancedOrder[] calldata orders, + CriteriaResolver[] calldata criteriaResolvers, + Fulfillment[] calldata fulfillments + ) + external + payable + override + isOperator + returns (Execution[] memory executions) + { + // Call matchAdvancedOrders on Seaport and return the sequence of + // transfers performed as part of matching the given orders. + executions = seaport.matchAdvancedOrders{ value: msg.value }( + orders, + criteriaResolvers, + fulfillments, + msg.sender + ); + } + + /** + * @notice Check if a given order including extraData is currently valid. + * + * @dev This function is called by Seaport whenever any extraData is + * provided by the caller. + * + * @custom:param zoneParameters A struct that provides context about the + * order fulfillment and any supplied + * extraData, as well as all order hashes + * fulfilled in a call to a match or + * fulfillAvailable method. + * + * @return validOrderMagicValue A magic value indicating if the order is + * currently valid. + */ + function validateOrder( + /** + * @custom:name zoneParameters + */ + ZoneParameters calldata + ) external pure override returns (bytes4 validOrderMagicValue) { + // Return the selector of isValidOrder as the magic value. + validOrderMagicValue = ZoneInterface.validateOrder.selector; + } + + /** + * @dev Returns the metadata for this zone. + */ + function getSeaportMetadata() + external + pure + override + returns ( + string memory name, + Schema[] memory schemas // map to Seaport Improvement Proposal IDs + ) + { + schemas = new Schema[](1); + schemas[0].id = 3003; + schemas[0].metadata = new bytes(0); + + return ("PausableZone", schemas); + } + + function supportsInterface( + bytes4 interfaceId + ) public view override(ERC165, ZoneInterface) returns (bool) { + return + interfaceId == type(ZoneInterface).interfaceId || + super.supportsInterface(interfaceId); + } +} diff --git a/contracts/seaport/zones/PausableZoneController.sol b/contracts/seaport/zones/PausableZoneController.sol new file mode 100644 index 00000000..d506404d --- /dev/null +++ b/contracts/seaport/zones/PausableZoneController.sol @@ -0,0 +1,381 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { PausableZone } from "./PausableZone.sol"; + +import { + PausableZoneControllerInterface +} from "./interfaces/PausableZoneControllerInterface.sol"; + +import { + PausableZoneEventsAndErrors +} from "./interfaces/PausableZoneEventsAndErrors.sol"; + +import { + AdvancedOrder, + CriteriaResolver, + Execution, + Fulfillment, + Order, + OrderComponents +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { + SeaportInterface +} from "seaport-types/src/interfaces/SeaportInterface.sol"; + +/** + * @title PausableZoneController + * @author cupOJoseph, BCLeFevre, stuckinaboot, stephankmin + * @notice PausableZoneController enables deploying, pausing and executing + * orders on PausableZones. This deployer is designed to be owned + * by a gnosis safe, DAO, or trusted party. + */ +contract PausableZoneController is + PausableZoneControllerInterface, + PausableZoneEventsAndErrors +{ + // Set the owner that can deploy, pause and execute orders on PausableZones. + address internal _owner; + + // Set the address of the new potential owner of the zone. + address private _potentialOwner; + + // Set the address with the ability to pause the zone. + address internal _pauser; + + // Set the immutable zone creation code hash. + bytes32 public immutable zoneCreationCode; + + /** + * @dev Throws if called by any account other than the owner or pauser. + */ + modifier isPauser() { + if (msg.sender != _pauser && msg.sender != _owner) { + revert InvalidPauser(); + } + _; + } + + /** + * @notice Set the owner of the controller and store + * the zone creation code. + * + * @param ownerAddress The deployer to be set as the owner. + */ + constructor(address ownerAddress) { + // Set the owner address as the owner. + _owner = ownerAddress; + + // Hash and store the zone creation code. + zoneCreationCode = keccak256(type(PausableZone).creationCode); + } + + /** + * @notice Deploy a PausableZone to a precomputed address. + * + * @param salt The salt to be used to derive the zone address + * + * @return derivedAddress The derived address for the zone. + */ + function createZone( + bytes32 salt + ) external override returns (address derivedAddress) { + // Ensure the caller is the owner. + if (msg.sender != _owner) { + revert CallerIsNotOwner(); + } + + // Derive the PausableZone address. + // This expression demonstrates address computation but is not required. + derivedAddress = address( + uint160( + uint256( + keccak256( + abi.encodePacked( + bytes1(0xff), + address(this), + salt, + zoneCreationCode + ) + ) + ) + ) + ); + + // Revert if a zone is currently deployed to the derived address. + if (derivedAddress.code.length != 0) { + revert ZoneAlreadyExists(derivedAddress); + } + + // Deploy the zone using the supplied salt. + new PausableZone{ salt: salt }(); + + // Emit an event signifying that the zone was created. + emit ZoneCreated(derivedAddress, salt); + } + + /** + * @notice Pause orders on a given zone. + * + * @param zone The address of the zone to be paused. + * + * @return success A boolean indicating the zone has been paused. + */ + function pause( + address zone + ) external override isPauser returns (bool success) { + // Call pause on the given zone. + PausableZone(zone).pause(msg.sender); + + // Return a boolean indicating the pause was successful. + success = true; + } + + /** + * @notice Cancel Seaport orders on a given zone. + * + * @param pausableZoneAddress The zone that manages the + * orders to be cancelled. + * @param seaportAddress The Seaport address. + * @param orders The orders to cancel. + */ + function cancelOrders( + address pausableZoneAddress, + SeaportInterface seaportAddress, + OrderComponents[] calldata orders + ) external override { + // Ensure the caller is the owner. + if (msg.sender != _owner) { + revert CallerIsNotOwner(); + } + + // Create a zone object from the zone address. + PausableZone zone = PausableZone(pausableZoneAddress); + + // Call cancelOrders on the given zone. + zone.cancelOrders(seaportAddress, orders); + } + + /** + * @notice Execute an arbitrary number of matched orders on a given zone. + * + * @param pausableZoneAddress The zone that manages the orders + * to be cancelled. + * @param seaportAddress The Seaport address. + * @param orders The orders to match. + * @param fulfillments An array of elements allocating offer + * components to consideration components. + * + * @return executions An array of elements indicating the sequence of + * transfers performed as part of matching the given + * orders. + */ + function executeMatchOrders( + address pausableZoneAddress, + SeaportInterface seaportAddress, + Order[] calldata orders, + Fulfillment[] calldata fulfillments + ) external payable override returns (Execution[] memory executions) { + // Ensure the caller is the owner. + if (msg.sender != _owner) { + revert CallerIsNotOwner(); + } + + // Create a zone object from the zone address. + PausableZone zone = PausableZone(pausableZoneAddress); + + // Call executeMatchOrders on the given zone and return the sequence + // of transfers performed as part of matching the given orders. + executions = zone.executeMatchOrders{ value: msg.value }( + seaportAddress, + orders, + fulfillments + ); + } + + /** + * @notice Execute an arbitrary number of matched advanced orders on a given + * zone. + * + * @param pausableZoneAddress The zone that manages the orders to be + * cancelled. + * @param seaportAddress The Seaport address. + * @param orders The orders to match. + * @param criteriaResolvers An array where each element contains a + * reference to a specific order as well as that + * order's offer or consideration, a token + * identifier, and a proof that the supplied + * token identifier is contained in the + * order's merkle root. + * @param fulfillments An array of elements allocating offer + * components to consideration components. + * + * @return executions An array of elements indicating the sequence of + * transfers performed as part of matching the given + * orders. + */ + function executeMatchAdvancedOrders( + address pausableZoneAddress, + SeaportInterface seaportAddress, + AdvancedOrder[] calldata orders, + CriteriaResolver[] calldata criteriaResolvers, + Fulfillment[] calldata fulfillments + ) external payable override returns (Execution[] memory executions) { + // Ensure the caller is the owner. + if (msg.sender != _owner) { + revert CallerIsNotOwner(); + } + + // Create a zone object from the zone address. + PausableZone zone = PausableZone(pausableZoneAddress); + + // Call executeMatchOrders on the given zone and return the sequence + // of transfers performed as part of matching the given orders. + executions = zone.executeMatchAdvancedOrders{ value: msg.value }( + seaportAddress, + orders, + criteriaResolvers, + fulfillments + ); + } + + /** + * @notice Initiate Zone ownership transfer by assigning a new potential + * owner of this contract. Once set, the new potential owner + * may call `acceptOwnership` to claim ownership. + * Only the owner in question may call this function. + * + * @param newPotentialOwner The address for which to initiate ownership + * transfer to. + */ + function transferOwnership(address newPotentialOwner) external override { + // Ensure the caller is the owner. + if (msg.sender != _owner) { + revert CallerIsNotOwner(); + } + // Ensure the new potential owner is not an invalid address. + if (newPotentialOwner == address(0)) { + revert OwnerCanNotBeSetAsZero(); + } + + // Emit an event indicating that the potential owner has been updated. + emit PotentialOwnerUpdated(newPotentialOwner); + + // Set the new potential owner as the potential owner. + _potentialOwner = newPotentialOwner; + } + + /** + * @notice Clear the currently set potential owner, if any. + * Only the owner of this contract may call this function. + */ + function cancelOwnershipTransfer() external override { + // Ensure the caller is the current owner. + if (msg.sender != _owner) { + revert CallerIsNotOwner(); + } + + // Emit an event indicating that the potential owner has been cleared. + emit PotentialOwnerUpdated(address(0)); + + // Clear the current new potential owner. + delete _potentialOwner; + } + + /** + * @notice Accept ownership of this contract. Only the account that the + * current owner has set as the new potential owner may call this + * function. + */ + function acceptOwnership() external override { + // Ensure the caller is the potential owner. + if (msg.sender != _potentialOwner) { + revert CallerIsNotPotentialOwner(); + } + + // Emit an event indicating that the potential owner has been cleared. + emit PotentialOwnerUpdated(address(0)); + + // Clear the current new potential owner + delete _potentialOwner; + + // Emit an event indicating ownership has been transferred. + emit OwnershipTransferred(_owner, msg.sender); + + // Set the caller as the owner of this contract. + _owner = msg.sender; + } + + /** + * @notice Assign the given address with the ability to pause the zone. + * + * @param pauserToAssign The address to assign the pauser role. + */ + function assignPauser(address pauserToAssign) external override { + // Ensure the caller is the owner. + if (msg.sender != _owner) { + revert CallerIsNotOwner(); + } + // Ensure the pauser to assign is not an invalid address. + if (pauserToAssign == address(0)) { + revert PauserCanNotBeSetAsZero(); + } + + // Set the given account as the pauser. + _pauser = pauserToAssign; + + // Emit an event indicating the pauser has been assigned. + emit PauserUpdated(pauserToAssign); + } + + /** + * @notice Assign the given address with the ability to operate the + * given zone. + * + * @param pausableZoneAddress The zone address to assign operator role. + * @param operatorToAssign The address to assign as operator. + */ + function assignOperator( + address pausableZoneAddress, + address operatorToAssign + ) external override { + // Ensure the caller is the owner. + if (msg.sender != _owner) { + revert CallerIsNotOwner(); + } + // Create a zone object from the zone address. + PausableZone zone = PausableZone(pausableZoneAddress); + + // Call assignOperator on the zone by passing in the given + // operator address. + zone.assignOperator(operatorToAssign); + } + + /** + * @notice An external view function that returns the owner. + * + * @return The address of the owner. + */ + function owner() external view override returns (address) { + return _owner; + } + + /** + * @notice An external view function that returns the potential owner. + * + * @return The address of the potential owner. + */ + function potentialOwner() external view override returns (address) { + return _potentialOwner; + } + + /** + * @notice An external view function that returns the pauser. + * + * @return The address of the pauser. + */ + function pauser() external view override returns (address) { + return _pauser; + } +} diff --git a/contracts/seaport/zones/interfaces/PausableZoneControllerInterface.sol b/contracts/seaport/zones/interfaces/PausableZoneControllerInterface.sol new file mode 100644 index 00000000..ab48d922 --- /dev/null +++ b/contracts/seaport/zones/interfaces/PausableZoneControllerInterface.sol @@ -0,0 +1,170 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { + AdvancedOrder, + CriteriaResolver, + Execution, + Fulfillment, + Order, + OrderComponents +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +import { + SeaportInterface +} from "seaport-types/src/interfaces/SeaportInterface.sol"; + +/** + * @title PausableZoneController + * @author cupOJoseph, BCLeFevre, stuckinaboot + * @notice PausableZoneController enables deploying, pausing and executing + * orders on PausableZones. This deployer is designed to be owned + * by a gnosis safe, DAO, or trusted party. + */ +interface PausableZoneControllerInterface { + /** + * @notice Deploy a PausableZone to a precomputed address. + * + * @param salt The salt to be used to derive the zone address + * + * @return derivedAddress The derived address for the zone. + */ + function createZone(bytes32 salt) external returns (address derivedAddress); + + /** + * @notice Pause orders on a given zone. + * + * @param zone The address of the zone to be paused. + * + * @return success A boolean indicating the zone has been paused. + */ + function pause(address zone) external returns (bool success); + + /** + * @notice Cancel Seaport offers on a given zone. + * + * @param pausableZoneAddress The zone that manages the orders to be + * cancelled. + * @param seaportAddress The Seaport address. + * @param orders The orders to cancel. + */ + function cancelOrders( + address pausableZoneAddress, + SeaportInterface seaportAddress, + OrderComponents[] calldata orders + ) external; + + /** + * @notice Execute an arbitrary number of matched orders on a given zone. + * + * @param pausableZoneAddress The zone that manages the orders to be + * cancelled. + * @param seaportAddress The Seaport address. + * @param orders The orders to match. + * @param fulfillments An array of elements allocating offer + * components to consideration components. + * + * @return executions An array of elements indicating the sequence of + * transfers performed as part of matching the given + * orders. + */ + function executeMatchOrders( + address pausableZoneAddress, + SeaportInterface seaportAddress, + Order[] calldata orders, + Fulfillment[] calldata fulfillments + ) external payable returns (Execution[] memory executions); + + /** + * @notice Execute an arbitrary number of matched advanced orders on a + * given zone. + * + * @param pausableZoneAddress The zone that manages the orders to be + * cancelled. + * @param seaportAddress The Seaport address. + * @param orders The orders to match. + * @param criteriaResolvers An array where each element contains a + * reference to a specific order as well as + * that order's offer or consideration, + * a token identifier, and a proof that + * the supplied token identifier is + * contained in the order's merkle root. + * @param fulfillments An array of elements allocating offer + * components to consideration components. + * + * @return executions An array of elements indicating the sequence of + * transfers performed as part of matching the given + * orders. + */ + function executeMatchAdvancedOrders( + address pausableZoneAddress, + SeaportInterface seaportAddress, + AdvancedOrder[] calldata orders, + CriteriaResolver[] calldata criteriaResolvers, + Fulfillment[] calldata fulfillments + ) external payable returns (Execution[] memory executions); + + /** + * @notice Initiate Zone ownership transfer by assigning a new potential + * owner of this contract. Once set, the new potential owner + * may call `acceptOwnership` to claim ownership. + * Only the owner in question may call this function. + * + * @param newPotentialOwner The address for which to initiate ownership + * transfer to. + */ + function transferOwnership(address newPotentialOwner) external; + + /** + * @notice Clear the currently set potential owner, if any. + * Only the owner of this contract may call this function. + */ + function cancelOwnershipTransfer() external; + + /** + * @notice Accept ownership of this contract. Only the account that the + * current owner has set as the new potential owner may call this + * function. + */ + function acceptOwnership() external; + + /** + * @notice Assign the given address with the ability to pause the zone. + * + * @param pauserToAssign The address to assign the pauser role. + */ + function assignPauser(address pauserToAssign) external; + + /** + * @notice Assign the given address with the ability to operate the + * given zone. + * + * @param pausableZoneAddress The zone address to assign operator role. + * @param operatorToAssign The address to assign as operator. + */ + function assignOperator( + address pausableZoneAddress, + address operatorToAssign + ) external; + + /** + * @notice An external view function that returns the owner. + * + * @return The address of the owner. + */ + function owner() external view returns (address); + + /** + * @notice An external view function that returns the potential owner. + * + * @return The address of the potential owner. + */ + function potentialOwner() external view returns (address); + + /** + * @notice An external view function that returns the pauser. + * + * @return The address of the pauser. + */ + function pauser() external view returns (address); +} diff --git a/contracts/seaport/zones/interfaces/PausableZoneEventsAndErrors.sol b/contracts/seaport/zones/interfaces/PausableZoneEventsAndErrors.sol new file mode 100644 index 00000000..bb80f940 --- /dev/null +++ b/contracts/seaport/zones/interfaces/PausableZoneEventsAndErrors.sol @@ -0,0 +1,111 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +/** + * @notice PausableZoneEventsAndErrors contains errors and events + * related to zone interaction. + */ +interface PausableZoneEventsAndErrors { + /** + * @dev Emit an event whenever a zone is successfully paused. + */ + event Paused(); + + /** + * @dev Emit an event whenever a zone is successfully unpaused (created). + */ + event Unpaused(); + + /** + * @dev Emit an event whenever a zone owner registers a new potential + * owner for that zone. + * + * @param newPotentialOwner The new potential owner of the zone. + */ + event PotentialOwnerUpdated(address newPotentialOwner); + + /** + * @dev Emit an event whenever zone ownership is transferred. + * + * @param previousOwner The previous owner of the zone. + * @param newOwner The new owner of the zone. + */ + event OwnershipTransferred(address previousOwner, address newOwner); + + /** + * @dev Emit an event whenever a new zone is created. + * + * @param zone The address of the zone. + * @param salt The salt used to deploy the zone. + */ + event ZoneCreated(address zone, bytes32 salt); + + /** + * @dev Emit an event whenever a zone owner assigns a new pauser + * + * @param newPauser The new pauser of the zone. + */ + event PauserUpdated(address newPauser); + + /** + * @dev Emit an event whenever a zone owner assigns a new operator + * + * @param newOperator The new operator of the zone. + */ + event OperatorUpdated(address newOperator); + + /** + * @dev Revert with an error when attempting to pause the zone + * while the caller is not the owner or pauser of the zone. + */ + error InvalidPauser(); + + /** + * @dev Revert with an error when attempting to call an operation + * while the caller is not the controller or operator of the zone. + */ + error InvalidOperator(); + + /** + * @dev Revert with an error when attempting to pause the zone or update the + * operator while the caller is not the controller of the zone. + */ + error InvalidController(); + /** + * @dev Revert with an error when attempting to deploy a zone that is + * currently deployed. + */ + error ZoneAlreadyExists(address zone); + + /** + * @dev Revert with an error when the caller does not have the _owner role + * + */ + error CallerIsNotOwner(); + + /** + * @dev Revert with an error when the caller does not have the operator role + * + */ + error CallerIsNotOperator(); + + /** + * @dev Revert with an error when attempting to set the new potential owner + * as the 0 address. + * + */ + error OwnerCanNotBeSetAsZero(); + + /** + * @dev Revert with an error when attempting to set the new potential pauser + * as the 0 address. + * + */ + error PauserCanNotBeSetAsZero(); + + /** + * @dev Revert with an error when the caller does not have + * the potentialOwner role. + */ + error CallerIsNotPotentialOwner(); +} diff --git a/contracts/seaport/zones/interfaces/PausableZoneInterface.sol b/contracts/seaport/zones/interfaces/PausableZoneInterface.sol new file mode 100644 index 00000000..19d5d76d --- /dev/null +++ b/contracts/seaport/zones/interfaces/PausableZoneInterface.sol @@ -0,0 +1,102 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import { + SeaportInterface +} from "seaport-types/src/interfaces/SeaportInterface.sol"; + +import { + AdvancedOrder, + CriteriaResolver, + Execution, + Fulfillment, + Order, + OrderComponents +} from "seaport-types/src/lib/ConsiderationStructs.sol"; + +/** + * @title PausableZone + * @author cupOJoseph, BCLeFevre, ryanio + * @notice PausableZone is a simple zone implementation that approves every + * order. It can be self-destructed by its controller to pause + * restricted orders that have it set as their zone. + */ +interface PausableZoneInterface { + /** + * @notice Cancel an arbitrary number of orders that have agreed to use the + * contract as their zone. + * + * @param seaport The Seaport address. + * @param orders The orders to cancel. + * + * @return cancelled A boolean indicating whether the supplied orders have + * been successfully cancelled. + */ + function cancelOrders( + SeaportInterface seaport, + OrderComponents[] calldata orders + ) external returns (bool cancelled); + + /** + * @notice Execute an arbitrary number of matched orders, each with + * an arbitrary number of items for offer and consideration + * along with a set of fulfillments allocating offer components + * to consideration components. + * + * @param seaport The Seaport address. + * @param orders The orders to match. + * @param fulfillments An array of elements allocating offer components + * to consideration components. + * + * @return executions An array of elements indicating the sequence of + * transfers performed as part of matching the given + * orders. + */ + function executeMatchOrders( + SeaportInterface seaport, + Order[] calldata orders, + Fulfillment[] calldata fulfillments + ) external payable returns (Execution[] memory executions); + + /** + * @notice Execute an arbitrary number of matched advanced orders, + * each with an arbitrary number of items for offer and + * consideration along with a set of fulfillments allocating + * offer components to consideration components. + * + * @param seaport The Seaport address. + * @param orders The orders to match. + * @param criteriaResolvers An array where each element contains a reference + * to a specific order as well as that order's + * offer or consideration, a token identifier, and + * a proof that the supplied token identifier is + * contained in the order's merkle root. + * @param fulfillments An array of elements allocating offer components + * to consideration components. + * + * @return executions An array of elements indicating the sequence of + * transfers performed as part of matching the given + * orders. + */ + function executeMatchAdvancedOrders( + SeaportInterface seaport, + AdvancedOrder[] calldata orders, + CriteriaResolver[] calldata criteriaResolvers, + Fulfillment[] calldata fulfillments + ) external payable returns (Execution[] memory executions); + + /** + * @notice Pause this contract, safely stopping orders from using + * the contract as a zone. Restricted orders with this address as a + * zone will not be fulfillable unless the zone is redeployed to the + * same address. + */ + function pause(address payee) external; + + /** + * @notice Assign the given address with the ability to operate the zone. + * + * @param operatorToAssign The address to assign as the operator. + */ + function assignOperator(address operatorToAssign) external; +} diff --git a/forks/README.md b/forks/README.md new file mode 100644 index 00000000..84b22140 --- /dev/null +++ b/forks/README.md @@ -0,0 +1,10 @@ + +# Forks + +This directory contains submodules pointing at repositories maintained by Immutable as forks of other smart contract projects. The `contracts` folders of these projects will be extracted by `yarn build` and merged into the main `contracts` folder. + +To add a new fork, first add it into the `forks` folder as a git submodule. Then, add the configuration for the fork into `forks.json` file. + +## Dependency Management + +If the forked repository has dependencies for their smart contracts, add them to the `dependencies` array. \ No newline at end of file diff --git a/forks/forks.json b/forks/forks.json new file mode 100644 index 00000000..af460e7e --- /dev/null +++ b/forks/forks.json @@ -0,0 +1,18 @@ +[ + { + "name": "passport", + "contracts": "passport/src/contracts", + "upstream": "https://github.com/immutable/wallet-contracts" + }, + { + "name": "seaport", + "upstream": "https://github.com/immutable/seaport", + "contracts": "seaport/contracts", + "dependencies": [ + "@openzeppelin/contracts", + "seaport-core", + "seaport-sol", + "seaport-types" + ] + } +] \ No newline at end of file diff --git a/forks/passport/.eslintignore b/forks/passport/.eslintignore new file mode 100644 index 00000000..f0a62d69 --- /dev/null +++ b/forks/passport/.eslintignore @@ -0,0 +1,3 @@ +.eslintrc.js +node_modules +src/gen diff --git a/forks/passport/.eslintrc.js b/forks/passport/.eslintrc.js new file mode 100644 index 00000000..284d5a52 --- /dev/null +++ b/forks/passport/.eslintrc.js @@ -0,0 +1,38 @@ +const { off } = require("process") + +module.exports = { + parser: '@typescript-eslint/parser', + parserOptions: { + ecmaVersion: 2018, + sourceType: 'module' + }, + + extends: [ + 'plugin:@typescript-eslint/recommended', + 'plugin:import/errors', + 'plugin:import/warnings', + 'plugin:import/typescript', + 'prettier' + ], + + rules: { + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/ban-types': 'off', + '@typescript-eslint/ban-ts-comment': 'off', + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/no-inferrable-types': 'off', + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/no-non-null-asserted-optional-chain': 'off', + + 'prefer-spread': 'off', + 'prefer-const': 'off', + + 'import/no-unresolved': 'off', + // 'import/no-default-export': 2, + 'import/no-named-as-default-member': 'off', + + } +} diff --git a/forks/passport/.gitattributes b/forks/passport/.gitattributes new file mode 100644 index 00000000..52031de5 --- /dev/null +++ b/forks/passport/.gitattributes @@ -0,0 +1 @@ +*.sol linguist-language=Solidity diff --git a/forks/passport/.github/workflows/ci.yml b/forks/passport/.github/workflows/ci.yml new file mode 100644 index 00000000..55a6692c --- /dev/null +++ b/forks/passport/.github/workflows/ci.yml @@ -0,0 +1,158 @@ + +on: [push] + +name: ci + +jobs: + install: + name: Install dependencies + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-node@v1 + with: + node-version: 18.15 + - uses: actions/cache@master + id: yarn-cache + with: + path: | + node_modules + */*/node_modules + key: ${{ runner.os }}-lerna-${{ hashFiles('**/package.json', '**/yarn.lock') }} + - run: yarn install --network-concurrency 1 + if: ${{ steps.yarn-cache.outputs.cache-hit != 'true' }} + + benchmark: + name: Benchmark + runs-on: ubuntu-latest + needs: [install] + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-node@v1 + with: + node-version: 18.15 + - uses: actions/cache@master + id: yarn-cache + with: + path: | + node_modules + */*/node_modules + key: ${{ runner.os }}-lerna-${{ hashFiles('**/package.json', '**/yarn.lock') }} + - run: yarn benchmark + + lint-ts: + name: Typescript lint + runs-on: ubuntu-latest + needs: [install] + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-node@v1 + with: + node-version: 18.15 + - uses: actions/cache@master + id: yarn-cache + with: + path: | + node_modules + */*/node_modules + key: ${{ runner.os }}-lerna-${{ hashFiles('**/package.json', '**/yarn.lock') }} + - run: yarn lint:ts + + lint-sol: + name: Solidity lint + runs-on: ubuntu-latest + needs: [install] + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-node@v1 + with: + node-version: 18.15 + - uses: actions/cache@master + id: yarn-cache + with: + path: | + node_modules + */*/node_modules + key: ${{ runner.os }}-lerna-${{ hashFiles('**/package.json', '**/yarn.lock') }} + - run: yarn lint:sol + + test: + name: Test contracts + runs-on: ubuntu-latest + needs: [install] + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-node@v1 + with: + node-version: 18.15 + - uses: actions/cache@master + id: yarn-cache + with: + path: | + node_modules + */*/node_modules + key: ${{ runner.os }}-lerna-${{ hashFiles('**/package.json', '**/yarn.lock') }} + - run: yarn test + + slither: + name: Slither test + runs-on: ubuntu-latest + needs: [install] + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v1 + with: + node-version: 18.15 + - uses: actions/cache@master + id: yarn-cache + with: + path: | + node_modules + */*/node_modules + key: ${{ runner.os }}-lerna-${{ hashFiles('**/package.json', '**/yarn.lock') }} + - run: | + npx hardhat compile + cp -r ./src/artifacts/ ./artifacts/ + cp -r ./src/contracts/ ./contracts/ + - uses: crytic/slither-action@v0.3.0 + + # coverage: + # name: Coverage + # runs-on: ubuntu-latest + # needs: [install] + # steps: + # - uses: actions/checkout@v1 + # - uses: actions/setup-node@v1 + # with: + # node-version: 18 + # - uses: actions/cache@master + # id: yarn-cache + # with: + # path: | + # node_modules + # */*/node_modules + # key: ${{ runner.os }}-lerna-${{ hashFiles('**/package.json', '**/yarn.lock') }} + # - run: yarn coverage || true + # - name: Coveralls + # uses: coverallsapp/github-action@master + # with: + # github-token: ${{ secrets.GITHUB_TOKEN }} + + build: + name: Is latest build commited? + runs-on: ubuntu-latest + needs: [install] + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-node@v1 + with: + node-version: 18.15 + - uses: actions/cache@master + id: yarn-cache + with: + path: | + node_modules + */*/node_modules + key: ${{ runner.os }}-lerna-${{ hashFiles('**/package.json', '**/yarn.lock') }} + - run: yarn test + - run: git diff --exit-code diff --git a/forks/passport/.gitignore b/forks/passport/.gitignore new file mode 100644 index 00000000..c4c15775 --- /dev/null +++ b/forks/passport/.gitignore @@ -0,0 +1,26 @@ +.vscode +node_modules/ + +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +*.js.map +build +coverage +coverage.json + +config/*.env + +src/gen +src/artifacts + +# MAC OS custom directory attributes file. +.DS_Store + +# IntelliJ IDE directory +.idea +*.iml + +.env \ No newline at end of file diff --git a/forks/passport/.prettierrc b/forks/passport/.prettierrc new file mode 100644 index 00000000..421afa97 --- /dev/null +++ b/forks/passport/.prettierrc @@ -0,0 +1,9 @@ +{ + "tabWidth": 2, + "useTabs": false, + "semi": false, + "singleQuote": true, + "trailingComma": "none", + "arrowParens": "avoid", + "printWidth": 130 +} diff --git a/forks/passport/.solcover.js b/forks/passport/.solcover.js new file mode 100644 index 00000000..fab8bc0e --- /dev/null +++ b/forks/passport/.solcover.js @@ -0,0 +1,3 @@ +module.exports = { + skipFiles: ['mocks', 'migrations'] +} diff --git a/forks/passport/.solhint.json b/forks/passport/.solhint.json new file mode 100644 index 00000000..efa775ff --- /dev/null +++ b/forks/passport/.solhint.json @@ -0,0 +1,24 @@ +{ + "extends": "solhint:recommended", + "rules": { + "quotes": "off", + "const-name-snakecase": "off", + "contract-name-camelcase": "off", + "event-name-camelcase": "off", + "func-name-mixedcase": "off", + "func-param-name-mixedcase": "off", + "modifier-name-mixedcase": "off", + "private-vars-leading-underscore": "off", + "use-forbidden-name": "off", + "var-name-mixedcase": "off", + "func-order": "off", + "imports-on-top": "off", + "ordering": "off", + "no-unused-vars": "off", + "no-inline-assembly": "off", + "visibility-modifier-order": "off", + "compiler-version": ["warn", "0.8.17"], + "func-visibility": ["warn", {"ignoreConstructors":true}], + "reason-string": ["warn", {"maxLength": 96}] + } +} diff --git a/forks/passport/CONTRIBUTING.md b/forks/passport/CONTRIBUTING.md new file mode 100644 index 00000000..b7ea09fa --- /dev/null +++ b/forks/passport/CONTRIBUTING.md @@ -0,0 +1,79 @@ +# Contributing to Immutable Wallet Contracts + +We greatly appreciate all community feedback and contributions to this repository. This guide will walk you through the different ways you can contribute, including opening GitHub issues, pull requests, requesting features, and providing general feedback. For any security disclosures, please email security@immutable.com. + +## Opening an issue + +GitHub issues are a great way to discuss and coordinate new features, changes, bugs, etc. + +You should create an issue to open discussions when: + +- **Before starting development on a significant pull request** - Use GitHub issues as a way to collaboratively propose, design, and discuss any development work you plan to do. +- **Proposing new features or ideas** - If you just have an idea or feature you'd like to see, drop the details into a GitHub issue for us to keep track of. Be specific with any requests, and include descriptions of what you would like to be added and what problems it would solve. +- **Reporting a bug or minor security vulnerability** - As above, opening an issue helps us keep track of and prioritize any bugs or minor security vulnerabilities. Make sure to include all the relevant information, e.g. code snippets, error messages, stack traces, environment, reproduction steps, etc, to help us effectively diagnose and address the issue. Please also reach out to security@immutable.com. + +There is usually no need to create an issue when: + +- **An issue or open PR for the topic already exists** - Please continue or reopen the existing thread to keep all the discussion in one place. +- **The PR is relatively small and obvious (e.g. small fixes, typos, etc)** - If the changes do not require a discussion, simply filling out the PR description template will suffice. +- **Providing comments or general feedback** - Please use GitHub issues for actionable feedback or tasks (e.g. feature requests or bugs). + +## Opening a Pull Request + +If you'd like to contribute to the code and open a pull request (PR), here are some general guidelines to follow: + +- Most PRs should have an accompanying GitHub issue (see above on opening issues). When submitting your PR for review, please link the corresponding issue in the PR description. +- Alongside every PR there should be a brief summary of what changes have been made and why, as per the PR template we provide. Be sure to fill this out to help share context with the reviewers and others. +- Please follow existing code styles to keep formatting in this repository consistent. + +### Contributor workflow + +To start contributing to this repository, have a look at this guide to contributing to open source projects. + +You should fork the repository and make your changes in your local repository under a new branch, before opening a pull request for your branch back upstream to the original repository. This is a helpful guide that walks through all of these steps in detail. + +1. Fork the repository (Fork button in the top right of the repository GitHub UI). +2. Clone your fork to your local machine. + +``` +git clone https://GitHub.com//.git +``` + +3. Add the original repository as the upstream remote. + +``` +cd +git remote add upstream https://GitHub.com/immutable/.git +``` + +4. Make sure your fork is up to date with the original repository (if necessary). + +``` +git pull upstream main +``` + +5. Create a new branch and make your changes. + +``` +git checkout -b +``` + +6. Be sure to run the tests and set up the relevant linters to ensure all GitHub checks pass (see GitHub issues: https://docs.github.com/en/issues/tracking-your-work-with-issues/about-issues for more information). + +``` +npm test +``` + +7. Add and commit your changes, including a comprehensive commit message summarising your changes, then push changes to your fork. (e.g. Fixed formatting issue with ImmutableERC721PermissionedMintable.sol) + +``` +git add * +git commit -m "fix typos" +git push origin +``` + +8. Open a pull request into the original repository through GitHub in your web browser. Remember to fill out the PR template to the best of your ability to share any context with reviewers. + +**IMPORTANT**: Please make sure to read through the [cla](cla.txt) file as part of opening a pull request. + +9. We will review the pull requests and request any necessary changes. If all the checks (linting, compilation, tests) pass and everything looks good, your code will be merged into the original repository. Congratulations, and thank you for your contribution! diff --git a/forks/passport/LICENSE b/forks/passport/LICENSE new file mode 100644 index 00000000..a4b287cb --- /dev/null +++ b/forks/passport/LICENSE @@ -0,0 +1,220 @@ + Copyright (c) 2023-present Immutable Pty Ltd. + Copyright (c) 2017-present Horizon Blockchain Games Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + ------------------------------------------------------------------------ + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/forks/passport/README.md b/forks/passport/README.md new file mode 100644 index 00000000..64b57ee1 --- /dev/null +++ b/forks/passport/README.md @@ -0,0 +1,83 @@ +# Immutable Wallet Contracts + +This is a fork of of Sequence's [wallet-contracts repo](https://github.com/0xsequence/wallet-contracts). + +## Immutable Changes + +The following changes have been made: + +- The minimal wallet proxy contract (bytecode of which is in + src/contracts/Wallet.sol) now supports a function `PROXY_getImplementation` to + return the address of the implementation contract pointed to by the proxy + contract. +- The interface for the `PROXY_getImplementation` function is defined in + src/contracts/IWalletProxy.sol. +- The source code for the new bytecode is in `src/contracts/WalletProxy.yul`. +- All references to the bytecode of the proxy now use the definition in + `src/contracts/Wallet.sol` (rather than having their own definition). +- `StartupWalletImpl.sol` is a minimal initial implementation that updates the + implementation address and then delegate calls to the wallet implementation. + This contract determines the latest wallet implementation contract to use by + contacting the new contract `LatestWalletImplLocator.sol`. +- `MainModuleDynamicAuth.sol` which uses `ModuleAuth.sol` is a type of wallet + implementation that initially does authentication by checking that the + contract address matches being generated using the image hash, the factory + contract, and the proxy start-up bytes (which include the address of the + wallet implementation contract: the instance of `StartupWalletImpl`). The + image hash is stored and subsequence transactions verify by comparing the + calculated image hash with the stored image hash. +- Tests for the new wallet factory features have been included in + `ImmutableFactory.spec.ts`. +- Tests for the startup and dynamic authentication have been included in + `ImmutableStartup.spec.ts`. +- Tests for the Immutable deployment have been included in + `ImmutableDeployment.spec.ts`. + +## Security Review + +`@imtbl/wallet-contracts` has been audited by three independant parties + +- [Consensys Diligence](./audits/Consensys_Diligence.md) - May 2020 +- [Quantstamp - initial audit](./audits/Quantstamp_Arcadeum_Report_Final.pdf) - July 2020 +- [Quantstamp - audit of new capability, nested Sequence signers](./audits/sequence_quantstamp_audit_feb_2021.pdf) - Feb 2021 +- [Halborm - audit of security improvements and customisations for Immutable environment](./audits/202309_Halborn_Final.pdf) - Sept 2023. +See [background information for this audit](./audits/202309_audit_background.md). + +## Dev env & release + +This repository is configured as a yarn workspace, and has multiple pacakge.json +files. Specifically, we have the root ./package.json for the development +environment, contract compilation and testing. Contract source code and +distribution files are packaged in "src/package.json". + +To release a new version, make sure to bump the version, tag it, and run `yarn +release`. The `release` command will publish the `@imtbl/wallet-contracts` +package in the "src/" folder, separate from the root package. + +## Contribution + +We aim to build robust and feature-rich standards to help all developers onboard +and build their projects on Immuable zkEVM, and we welcome any and all feedback +and contributions to this repository! See our [contribution +guideline](CONTRIBUTING.md) for more details on opening Github issues, pull +requests requesting features, minor security vulnerabilities and providing +general feedback. + +## Disclaimers + +These contracts are in an experimental stage and are subject to change without +notice. The code must still be formally audited or reviewed and may have +security vulnerabilities. Do not use it in production. We take no responsibility +for your implementation decisions and any security problems you might +experience. + +We will audit these contracts before our mainnet launch. + +## Security + +Please see our [security.md](security.md) page for information on how to report security issues. + +## License + +Immutable zkEVM Contracts are released under the Apache-2.0 license. See +[LICENSE.md](LICENSE.md) for more details. diff --git a/forks/passport/audits/202309-audit-background-diagrams/address-retrieval.jpg b/forks/passport/audits/202309-audit-background-diagrams/address-retrieval.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6220d9b66e3a06b7a73e98ab850c87a496bea47 GIT binary patch literal 37226 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 esP0IYqq%VuA4h(0w@(EeGQKPI{IHAY+@Gx literal 0 HcmV?d00001 diff --git a/forks/passport/audits/202309-audit-background-diagrams/data-flow.jpg b/forks/passport/audits/202309-audit-background-diagrams/data-flow.jpg new file mode 100644 index 0000000000000000000000000000000000000000..006bf55d8fe3da69e12d8eaac36e6666eb9411c2 GIT binary patch literal 107555 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 literal 0 HcmV?d00001 diff --git a/forks/passport/audits/202309-audit-background-diagrams/factory-deployment.jpg b/forks/passport/audits/202309-audit-background-diagrams/factory-deployment.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f0a3192e74cc6ebc5eb6e7ea9b8dfaf4fd8ecca3 GIT binary patch literal 148934 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ϡ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≺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 literal 0 HcmV?d00001 diff --git a/forks/passport/audits/202309-audit-background-diagrams/immutable-signer.png b/forks/passport/audits/202309-audit-background-diagrams/immutable-signer.png new file mode 100644 index 0000000000000000000000000000000000000000..87bdfd22bc56ceb2c413e2044bef63aab89a7638 GIT binary patch literal 90964 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 z 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

lUUT>QJC&>lQ>E$C~Gm>fyYNk1p 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

d3@HKB3=dO^SWnS~ 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 IAP}JaKkWq!AOHXW literal 0 HcmV?d00001 diff --git a/forks/passport/audits/202309-audit-background-diagrams/multicall-deploy.png b/forks/passport/audits/202309-audit-background-diagrams/multicall-deploy.png new file mode 100644 index 0000000000000000000000000000000000000000..1221aea78c1c0b0e82a8d8f9edee1176fa6858ee GIT binary patch literal 123392 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

btBBg+RR@oP#5&`B)IGO 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

%}_ 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%0A&rSq(6GZFydFvV?vFGZo3d0Ng!GrA{+#+lr`^Rf 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 z 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 literal 0 HcmV?d00001 diff --git a/forks/passport/audits/202309-audit-background-diagrams/startup-wallet.png b/forks/passport/audits/202309-audit-background-diagrams/startup-wallet.png new file mode 100644 index 0000000000000000000000000000000000000000..0097b896844286b866dff4a991f47117069c372b GIT binary patch literal 95246 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 z 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 literal 0 HcmV?d00001 diff --git a/forks/passport/audits/202309-audit-background-diagrams/wallet-deployment.jpg b/forks/passport/audits/202309-audit-background-diagrams/wallet-deployment.jpg new file mode 100644 index 0000000000000000000000000000000000000000..14c1d527e3e386ee054763a56665c87b44d47188 GIT binary patch literal 114395 zcmeFZ2{_bi_&@v|gFzU(5ThtcQ4*D9EG;C_MwC<%5>rXUG&3b@mZ&JIQ79!z_Q+%} z5|v#sGn73uVtg};_i^@f>YQKaoPPiJz5ef+uGBSV?(ehQ%jf>w_w&rO&rl(WO&hE> zKnMf`A;2GKrVFxwkbJYR*`G-8;uqwfeF+H)3J3}diHHab2@8veqD4jKh|dug7Lybc zM@vXZN{EO`NlQscga1p+3PH?%6Ui?Gz9=zAcn)~?Z@y-pLXtv!dqvPlge1f#i9kvs zW~v|z7^eW@hZpqI3&Drv7Z5}V35(1DAIO)0_`tLI_>lqv{QTh4r@`+ben|nT`76u> zrMK=!EjT8ldnWFtkeYc;x$L%A4E2=S{DQ)w;>Q)0Rn;}M&z{%4e$(92+ScCDNu&4nz5mcZFgU~<|1>elnu0%1 z&&~@0A%C0}`1#|+{xC1F2narYu%xKjc_H}x!C#~#zrg$zf>LH%QTvZcFVHy+f(>R zB9JEZ-#`B?!GButpCSC`3;uJ5|3!rVqTzqh@V{vIUo`x`D;gp+5gz}0cD)I5`v0TC zm^jQpXOmazjQG-7_NwQfXvNJyE=^6Sa&m4qNBUwdCU0ZKX)StL9MgK!t5H8kp99v0 z$yRA`Mpthvu-1Z(+mUNX#yY%tqf9N{dBPbWj2+8cLPEp7g;m+p+KMRNoR3)e9%TFD z8_TADe#7ODZ(wOJd!#4>g##E^r)UPEXFxMhm?3`C40MZ@LZp`U&OnhV$e*4RI{T#I z-#rQa)02LYgZ)BI&lhrj81e7r{5-&45E<#@i7^FOc8x6SK^egC?KedqCfn;!mQUSHX-U*#bCv7K5h zXC`LkF4LewMW(IP%`^LXmb$~>vNRp3np?f~ofgs;$NQNn=y!GB!55)xTsp03d+##q zc_PO2*mIp*O5`s3W)Cf2ul#nPao&2pqW9|eu3Za%)?1u{24?n?vGt_PK!32dKg=@w z+qCjaE%;*hzR=2FSL?5=|BLZxD}G`9|41vpBIir1{S$BWmsZ=3=(kh* z-5Pznps$VSTNe9^HTqJ}7kc#7UHd13zEvTA*?#;KdpEDvWHC3M$|#+lfnt~9O^vop zMM&hHwJas)hFiTWy4L@4Ztau}L}K;V*QbyJ4J0Td&_K)h?j#@3hvc(P3u2>PPIXRhvPNn=UL>>GG zr1v)+;_s08Upo4~cC0_k`DYIL%Yg9(g8im>eJO|VKd#R|3}9c3r^w@fip;}bNwyyJ zD1D2g{nD+;i~XY4KY8rm+5XS2|Bp`OOV|GoP4>?O{pzv58biMHk6*gAFGuuEQ~MS{ z-{g(HoZ63z{p-}e2u6N0P{^++<7Z>|6*x=(kN{_Mw0{joz7&QHPP97!!|GPH5$_NH_fYOg?4$DJXQ1}^*ooo{5GN?dDU6AGmzE66!bYFH5xOnjo&^4WshnAT=cdHHNgGX zPesr%1wEW3|7tWFvf;Fnj8^i5g=e5ejdV0yIh!~UT0=6Se_yU2-GGCa_HcrEQZrDS zx9<#O_9zA2gbAUHZ!T4vf%Yk(xf+|Gp}$QoH!@KilAq4>MDh$|s)zV|eFoxppMfp_ zIO#Gy@ftf}cn{*5ec!o!SqI`|bHlOk)q7+q!<0zk#D`0W>6?ERjq%w4?5&=GF0N)0 zxdcy_X=gEjXg3o-uZ$HUwsmLDKs)srY(<> zN9M}=nqpEX{!PO3!*Zd*30=f-&mI}<2*Ti#6U1nQ)ipTD*l_HK{}ZrWN{SFW@;msD z-!RSCRTOG2aU2a>%|OoijaNC)T&K_Q{n<*v*JBQeJHDDv}sXbWIFmY zG~_bbZ@?pYAU_%Mgc@g{`D2lk$^JCrfd3A}bny3`#@DwFl+2Oyi*>BUKAC+#_ z(yrAK--5t%6s-22M#g`pH1qsxaG%w9Yi6Jv9KcDh9W{|OG^~c@oF{{o9%cjI`pRDq zF>UtmH#s0|v=Hpeb*2UHsWfp_3R)Dn5Od=5TsW9l>(#@ZpOb2^0;-xu_!q(5+x4fQqk4YyY-)T*(1Ml&Z2d@5v${R16}x z6U!B5pgv=!1Mi7mELVJpgthx$tc(5t^{~Jq4xm3<8B`Oe$LM74nskVe@n;tP*U7}x z|EXjm|GOp=ja-5MP26NQi<>5Y#7z=FTUX9NKLV!{KLV$;e`a*Qb#Z?IoKF6~1DuZh zOW^eK{{z4Yq_7Woi)WxWNq>P#5aSe%OfN{L0rsApN+%AU(1VEOy0iKAd;kUlvw4X& zrkEXnW>CM~#Xm{lzw(h;cq5z0+k&PMxo4$kAZsTQcE{gN+`jUKS!d9{qGt*u?QdoO z!Vi39Oy4kilrl4sXN8I(jyN^XKobd@AlTvuD6pU(095X4;)F9OpIrF&Yc*Rw0SN65 z-VTH$0`5Z|f<|Uo+J4q2N)X$}f@YvJeLcjK?7z<9f0ywPyolu>PwK-k5_u(F)WmdkqSO8E$Kl%gfy36TA2d*X(@I-Gd)JOCu} z?*d%9^b&#*#*s|rt#6DZPO{TLVYnm-;;Q~x>h|q0(8z+-1?Yz@@J&EJ2vd@pP@%-~ z`PjaWSs3D)KgPSz-h_I)<9AB^g)V%9ng8}9h|fS}1g-%(h*)7eJ^Fw+pbzjTl2ORB zN<2p#5!erGanMwG{omDK1s;H77sS(NpuN7t0YMUWC50N*Gp+(>f_IWO^1}Q~F&TQ_ zbt+#9!+<(z4vLeOOs8=D0TpuX^(QzADdR_pb7r6s3G%d4^Y_93h|kV5(3%)v6BHg5;IR$gcigMT zz;RD-3s+Ojv40d zv=?w|55>ZG7t~GHsa~pY+#`9D0=_#PJc-#^p>q8KF9o@q@8pc{_m_!O#PoO zO`thPlIext7$t7cKtF|vC%=RVfc1U|6YQ^s3DM7`W+`1mi~)JYcjuha>rP$hFs@rx zb-wXM&c&kG%f(38HXZW#gAWrVq|(Ju8;kQEwd9w~(KCT&$VK=?bN-HUSoM?C;LeMc>LE}slpB0tQ0~rjPv8_0B;Xzh-nG)RE$s2E5SZGo-2%S_U!L41t0A|CX6n{7ZxX6(#bK=9iY{y&2V@P#%YNc6RC~ zdEP!6SFIS8yHZ8gls`TIvJ-Sa$MK|&sSIMfx&@hsqUp<4zVHBTX+72cs4GQpZyelQ zUv%)GyV?ShzQ<2c8X*ixZGnb7_+nzS2lg%~3~EFV+bdp^ERJ}eTWl5Q0*x*dhN!`@ z$4uo1zJ|VkLxekhNrXTC9z-~L1x#UE;pf59L1}|M()e9^CD*-tcdtvx-LpJ;i=u<1 zmh9#Wx`EevSFeV~j11|vXqd7-pD7=bpSf(e^%Gm&?vF3s5*9l&>&6?0j|Au;(oO#| zI~@JX>`-P^G|`+f`e<)Ju+zggs&Q3T%ih&~X(04-5&2W{?~BO)#!)vCB|KIP3)2Qy zl?b#fv|X{(rfyE?9_gZu*Q@qPUpuJ>9pz!z=hZDI*@gb7M$jj#*0W zeT}fR))Dy~myN1&3^cVBj&7l;_)C(u9BXe944KV-eoe9gSN|?Z0HG^71}Y)fh8S zosMJk6JBBF=3!z?#NL?b;5Rd|5k{++wwp_G-)zahzh`f?_i5Rx2$h~ST}MKwNIE)pa!k(IbMHdAqt1t?FHJ?o-B+8hc<8`A+tn(0 z2-dqF)~DQMF82L042n3i6@dSBL(PbZjiV84Q)fa08R_Q|KE0~!y5EEI=e?8{wAnd$ zXcWbp6|GH8mB`V*Mxcy;J-E5fx)|a@9n*%Z3Rc)T4o5@y*v}Hpx&ziIxuW& zTtG3w1j1A~L z)wV($S@={I-kSNO*DP(|;i*Ub&~v?WAu)5yYnbOE7?q>%-NXQ0B^(T4tj zu8JFL!l;dvR)+%e+Vbq#J6~tYE{#dCS-~&SSf*LeCv$KfbfOL9mbIe|)GL$%f)e3v zU|YDK=Ef@pH|Dc9J?-<&JN5eAeAZi1Af05=#mIUA>(g#o&6%5N<23JMDH z-p2Z15EFF%;k|p>sgn2R9EG4LgCoZg!_$Q$=h-LlYYV;oY1q-MEI8M$KyclgQp-o- zA8HK|MF}5tZOw{z1YTH^f;Q#G5|4O$^{PC%&yj;)(K0y8nA!<+Y*K?uLi7d zCm;bqXEiXC-?b|JNp%641jpTl8`m>bO73wCo3bXer8+yTv=jFqWvdlkLtozYaj$Wq zcHlvGJ%j;i6-MrGw@_0)R>k9?r^WEHpKnE;j4rLQSU|mX^gg0i^^>Uz z@RWa+t05ZjR*VhTnOaX(R2ky;j(KH!e%e(cp5bgMZrn`e$sl0ctic=0;H|y&T!oL> zdeOwn#PQC&)^R=E>ZL~QfrmsDhp-+YlocTCB3i$?ioALWx`Epug8+rA(`J;oTj|Xrtg~W2PA3 zoIYI{W1pXaK8pN?DM602D^$c`F58;d;xf+&eT&dalqeOx6JX);#LIH&q*7Nn|Az5h zuQlnrGZGfsr9uZ?qeP&|F?b)kb0aTai)qOFOqqe+UxrR!q+Xw6$Djo3VMK>`s>N-% zylCClis7Bb@A_TpWj4hgTlC@3JGI5W39boiG_oM?9}zL47JmRf@5)G|xkQ$!_gvW& z;BQq-iCMEn&NEIpQad&AbjBLsZX(#L@SEGpbn$Z-#Humr&RtGJH&k;B9G16l81#w# zu$Cs<(Jrbv1P;yVet}~9%Cw2kHJNv~=R0G07p+V&D}d5z68oClcr`W_pcgBWWb*vy zm@P6L#tGO1SPl)|29k*)$l*-@oBbppmse{T%blN_f-dvd}t3x6EsEG6%P`yRPo{=`GHAw%)gsWYo*jVdzw4SyN@Ym%(qC($$@{;bn`e zrqjv@xySEp%Duk(SXoyy+V`+651`e=_AYvVl@1Djh&eXm&n&DCObpL& z6x(BcH^6syi?)hamU($WS#8{NcauGFbt&blI44@y!l`^ z*Y&Kf2Xf#SI`lJeRy*PJUP{E;vFc&0q8FueIqXtv&}kA+aSO%dcGQeW8P!C(K`~NilOwXP1HCrQjl>v4Rpk z?49EEX*~@qXUWGsJHBt(N0)h@rRNDYV%7GS{6>=pyHtGmZ1#iOCiN&#!iQT|ce zCFmi>r#RB+t#C4Z?5tB`6*+>pmZ=e;jbH!ZMbfF3$u%Eam3GO@A3t}0-M$xZ_~em& zE@mWj4oHg7=P1;NF5@^A&|Z-9x@QKm#AzajurZWzAB+TL#Il7lan=c9+QJJPIZ1NC zGtho#pnaPZNhbNg#uk*66y)S5u~_ug%SL-W-4Zs4#NCR@U10=4>PevKti7KV+Dh?^ z4I`++XEHq>`(2VNTS9rA_iTh7XRxd0Lg_N?sUvmvE?1)O9jl0hK;7Z&IXJV5H-~%C z$c=6*2w&XMY$rqnQ*|DmS`pb$|oSWmKzo z4o(H0Qoy#6L3s3eoZa&e5||ZvaaYwY66>C(29gM&zXr!Ys`D(|EO*IGm-!W*-sH8Xy}}Axoq>RRsE!ebz-GZ!G$;LxkTGwasz~PUwj2Qe*yG z{V(P3;&SEH-aDU}>eFc;p)`!3z*Rp$#A^c-g^73mz1iUe;a#3LKQOw(yfXJ5=IdXb zWo>XETQbu39Sq&pF5oe6KS9W7aBYHg*s zSULsyz;$WQ4giwP7;or>u{?=@c#JH^h`FpgjwsE?+kI$pGm$@soUp!+@pQ5m1YN?8POK?Ur^AIc1bfrH7qBac1G@p7l}1 zS=5S(L8r}_{q&H+a$<0qHhg_`;VC^aZLeg@I~w&jhJD%>9FaKs`qK8`YtoUB`^XH$ zL^;A)jP2z_DWmn?Zn(Q}tYxs>yc)v8V^ z9O>`vW9WqYotAca^y+={eI32z=iWXE)<<%^L@f%s||7O35S+H7goO(?}0o6tRn%xlL^}SOXpK{ zLdZfKi_Ae2UGPTu>+aXii&)mXZ-*|IsCl%(Li_WBWwm=G=K3~3{uqX>OO(@{8kde_ zi)N11{db3Ns5bfdoUpO~`0-@Ysq~28nsGy^7c~m|>!qyL=pmjF%WX}TgXB4^Tv>iS zOr#q-tY>OOPQu>HKI&x_FMH71z0gyAye}$DfjD0Xb)nC{9GWK53eIE#CovX^UzI&H zmGt0l`k;P7V%t=r&N1Vbx^*1J#GMs(Z#0UHFOZ={md%J+mhO z1y0N!Yhv{CYG|PH0)SiK53VF2@we$#r|~zWTjbevD|63R(k&A`?mggN*_AzoI!|?k zU}6nV^^Kmf8&xsps{7prvGk8V9k$m+mRqgv{eX(mM2^<|vca=X%0z^lhJCL=Mi55? zDbogaDd;CZL!uvl&GhG_x0Pd9n!t~x88puV{aLT~OC>w|+mdWh$^JRX{~E+IZUg5}%MN~B)fD+V{x%$WhPG>0giRbF1< zH3wrlt@-!3xLG>AK^Wo$3FDFV>lXqNL zi}3@&(mrAaQkVrIs?C$Ryo)p}DGArUkEcm?I9_+$aP{Te{j(KFT?+NW3l~~#RhVmh z_u_5Dv5F?-1MGVpeF|#{hHLNyI{nEM!w=9Wme@B$Jlx1u0^Z?GOseS|W-t%jZy3a@ zR=`ed$ugbS#*s~?CI*j`O5>O`pUJzWR;M4d4}4fNiHd(Y$JI;UelA+F?`hPrmh&pN zNyeGfM2>V1%O56Y!W-$7u=^a-$E;-KvUH@)J^Ap>ulSB9pTex@)kE}uk;hx}MB45j zPP%=WagnBc`HcmR{*FNR%xNlJAavl_M?|S_tevp{bow2QC^pb7&gf30VZ}QZ-cC$) ztlaO;C$1K%E_5CSx$QQRu90)HHK7{FjLos1 zmr(KwxzYNR>FsyzP(3FQpWm_fcWz`<@QYN84^GRbuDLZ;xy6~-Sjz3*vU#vR{adA=d~-Q``q$MzSAlCD05 za@Y#^oiLfI6H}(oJzu5^-y=%DgPkyiu>bDI2i`Pz@cS${dB8DOlxdj~zx~MhB2p3b ziPDu?|+<>7dNV`wfQkY3DqmOpW9<#m)2( z^u2&4I_p`<)Tt~Wtm59`EytU-a*k!1C;D&g96FZfWhx=S}CKmwS7yi*=XoM@pR>iMI?6sd8H+&i8Nu zNgXbc=YURgj*NRbS&j?8h9J3+rd1JKl z=Hb2Stq<&bY+rjXDl57Ac%!JLb30eoiUV45De$7$ut}ZpG7UJ3y&J4DG5YD9sY2ie?(5|-wbgU@W z2lEQVhm=$O_L+7{JT!elP4GEOGC4bo68T}qopRfVKtLrb;@#ko{pp^$d2Q1IH7P1x zc1m-X9yuUMI#ZY9;P6%^X5|H_r>mD0$?U1fQmSwf=7}%24aZ2YLXR}8r9yjOE*Mle z@zOM|@3Q2s7(vz$FcKwD9xK=42;cXN8=8S+2zs3LZKdA2!rJ-at5&zjQKK%-O<1G8 z1bq^J&HeoVq{RafK&oshuMwNq4AOOmIZg0RFIZ{hwL;NE4O7Ufu?DXCRBIcpPb+c2`>Q0tc8_?;LpHJMZvhYyfm` z21oLL|Cn!(5ri7aWe4;SUd=$#2jQS&j5;xd^k%Xh+v#vk-$kVjCHix>Kj0OQz9tz5 zu|U_t#X~TlVh?cJc)_MBX1%eWH#iq^!xe3LXK<#Hcr|WZ>0&0CrgN^;pUDQ7qeSLE zab1`DI6szc@8#vJ+d|uplPz5#yK{kY$oYf034o9>V0ks=i&<=inQZld`l`U#aQq6| z^94Dt`Da0vfO{TV^Pmk+~B#qbGuUgu-Zt3jJtZ zc^V&<3oG0tP7zxdu-9oK=TM7dd*w$@F%5gudxiBdVNGa(0o_8)g`1O$CD<5)8^g!f zPNs;vP-`oda9wA6oZ%j3qhp&6-q0`e?Jn50g4KDhpuqm*F$w;doC{9dwg^9aZob9L zE=5VsX+t_&h0w&~V;F>RZ0;Y%h!Ql7rVn^bU+)4W&cUG-Bkc^sZT<95J!ur-&P^$s)A# z^m5=)=92PJ!dwpr?QS7PDXeC9dG6h2oXkO$9U&HRH6{a#>_lxl=g`H2nFcHn+d@w> z`>U@Q2{6VgI@bl>DBHa&*5>r#al2^QJJ&{Z&n%2Ch^eq>+ixe1q6_9QRk)J^S2xF(s_R1R?EgT~X zf0mD6BJtS4g(j+QpZJgK`qXy3Tv@pKd5UNw9ORP;iULdC%s?WGKojO+aI4Db<7}=( zrY%Pk)Rf|WxN@psh%#ZGg=O5r@iu_oE0wN$;ADbG-V9U`LHVo*PCR{+l)}S*SITD{ zRuoLR%?W@b464{V{MEGc*Eh+8PPb|`=G}j@F6C5LX1R1iP!PQJ$EoPq4VgON)%z0(XEu|LF6Q+0x zQrE`w$j+X6hdp}x4@9RONL%R>jTC*TDr?J;@~4I8Id8&76Qvxg_u;%uj`KF4*LgEOGrj*@rvbU-eWO${vnTLDC@T+j1x9gAHt9!MlE_R-`?=dAQ z^{eIT#cTQ%=%m%y4hx>}7~7Cz4J%M>BX4NrGLc@7vr@{6JXTrE+pzO0sluCzPmO9q zWfHoHd6+6&KI~Z@k|R+h*KGnP2QH4N#n5~|h9>KKdi&Zo#k09elM zXX4Kr%UQxfmO6hqaw);ZPqzu&4;Z7%4lY=pNKACJ; z&T-~Jo>o-nDiHK0*|%zf!sS+KMqG_Jv|Z}i(HGS!@}`cPs7NKANOZ4ZY?z4w_ePnj zQ~RokG9~815BCf1v2DuF?p83mPwhSVuDE>oHAycO3?&c_W`#a-2?r~c2pZt!t?8rt z1zrzyE^VsZe={{I>y~=XGx2g#m%doX`G~{I&UqaHj?Y8M4XNR& zlsHmt3HRQLiQRP&JDDyYeIh$dg`bIvovf)23p>#jz3JFBxm~F`dBnW-PSo-B5S|E7 zMlnM_Gl)u2KaG^22n~MX8+C9T2%I=0XqJL+2q5cY&UB! z>`uo<^yC^;qvcg!P1Ik_ZxkK&_wv7U__2S&`e*GCDs8*YKlHJ!4_R_5MZBITYym1~ zw<#>$!7EA z)^ei^R1kBRwT7uPa*Vcy=%Lf$O3yw&>c)5x_s(nWmh_VsYkiOG(K3;gJh)R`K4$$s z2VX$}Q&o%)UJA~3W7bps!w5^-yOup<3ML%7A)tO=e(~cqz5L_mvt!BtZpINP)E^2R zqGOSOUCLs+5t@_6MxHZzYafT5h?Fv@gJs7xLGZDE2J?Mbzs-?E_Si{ zK6odjNLUDj?ei!Td-cG`nr#G7=oygKDetOr&nYTtab5oIMe2ezqFZa87m*AOp1H9z zOa_s|P@{`YjlO5A!~Haus*L@?HIEN&^H`gjXTIF01z&GiLE5j>5aqMA2HrzTAwfFC z^5rHPE+8A)IaNWCIu#cXMoYM>9qWr*%pE!T@&)7LL?=CfG%{ZX5esy0BeNjOkBSx~ zG@3{*at@*sC;|@)x4%eWJWIAa^X%QRg=J{&O57&s6S=FhykPBN-iw}`+Auf2S0DY9 zysSx-#TUK0I;vOHGBIlhBPI`k*4Mz!&hENSEkny~b5++zYQ8#}5xHCj(FCn9#X!6+ z3!bdOXbIbdSgZn$0{j4Q7tlG|2`jlAGtb-yekh{ka=E+<*{+o)rP`3l~iDk&R$xuQo8G3dfzjs6aPQoaKo z1(^2tLcfM-eOiJze=CNA%0$KES4@qN38LhxqQbT5Ax{Rw^=X)^ie+!9?n*h=03R%l z7HMF+@m^sh^Kjv7S@+3eWpnp#yxHj?XAtWx%jG${C7d*$ui>Fl1_*A7>7ofJCS#YgTQGomDUAZSA`NhiJdFM)lQoTa_-kMdYR6>p3+(MIO z!zNN;PbtD2*0QRnw>pYk66ZTe9%}cu`9T$J@+S!|?`b+boty#w0 zn;ZcuPBb8SSF_1n&el^CRj(!u3yOKqn_WBJmx{l=mlMAthFW%f=TXER_S#wi5e-?% z@Kv_qW}|57s)GSN6&Zvbl65EFt_$YI^PL$yQbR(Yk0Vx$ar2B2jH{^YDV!C#xVgjk zOlYMCC~ncU=4Rtc%B>DlDQNwciLnrh6xNd*PLSZ{a2)Opj(QU!s97L?+>yNHwfY-z zYJAl|UFZhH$^?Z2l^^z*lTPns*iz9Xo{)A1NbB-rC2Vhd9YDp@vF(FOtaqBW>ksw# zpX6CB-O^IdN75!VQRLiU1x8R6MuysS(ebpXQ{2HRL4;1SuM8HiXj>b=$&%YG4Qe2l_ecd)z7Xti(vic#C-Q3Pt0S;l)MUJ#U&6aqVbAw?Oe7= za&P!{^X7SsY<-)wsM=Sq#rZg#jvk_oSiT*F{pE&W6e~~KW9&+Ht=gd zaNx~APf|Fb6O?=3XyJbL63zi`QrRjGwP&wNbz}?AuJU}^X;Lk9MBs^I)`wCfa0HtG zsg!__U<{u#l4WapDLR+Z4YTEk-j2#KFupP;?M$VG#j!#dC z=x%A8@9lw;Gtd#c<@O(Ue)7SN>&4rlNY4QpYGf2fKX|YzHin{Nq7HxBal_$6yp5S^ zsEqpMof{o3mn=82-`N|2Bq93A!V_bPgqog0`7nyRm|^X7&urr=sE-Df%(1a2t{Ne` zm7A{!apW(kwpwrZTvc5v6;jsV$j#x|^j45rYXQSEDE1yYZN=>3*;LZyxen}{P?cfqGD>`<3%bgD3*<)}7W5!P>`%jME^&Qiob5_1ooU!Pn@b}H^3 zEXtu3UgXKl5zNBFW|_MKF7A9Yc~v_< zs6pS%NKSK9V&6gY9anl|9M#J|n`aC^1$j2CbtG1P1B2;RPk-DWc9w ztR2idqt$6$94~GnKA{xe8@BmP&lMH>1cQwU>*haipLx7 zD(exPnZRXL#mP@>BP~W7>_c1ORqpgXQ z-T>^wDZrx2Y4h5)8e%j?f@9Hp{z_G0()EIj^D++n2g6GT(&9+!(Jy-RSBAWV1awH< zSU88RO=t$x_9HaN3zYT-)K+wB@_zn{N@4K7LieVRgx38 zz(gV74%NTvI)*g>YaQ5a_ewpc2VgKq;f!6^HXJ%?C{uNO-n;{gApwO9q!%lNn|mZ* z=PW_`6~*1F!w)wP?;f(u2rG6MVf=R7Q*6m)mlIm?`p=Ye*{PZ zM4d5lKi@h{P#@P1wh1>@d&ytocnI6Pr=_jL(+ATJ3;C}FOTqt7fZBH`cSW)8<$1kdx zKmQ<%KO{vC4%B;z28D5r zRf-!RM=r?Q`T)i2ImVvzmN-~(7-ENk-5Ou)MP!KsLw*HLE-L|YVLtd+hhGm{8AqIm ztRv|X-E}@&0Sc4QL}6(b36? z#PZG!Y1-tSUI)q!u0QE5X>#m+{~G1MW6w}xf1m3_v~VV{1aHUO9P|NZr zm~xr8+sXNDPTQf&6=NNJV(l-F#gUyLb_FPq1M6=j=@V6WlHC9oNqQyTka*=+(j|te zOzKtI+MBt%%InSV<8Hh_x?;-I-goGIyPb z-Z1z;@M?xRLJVo3D#eK1rtaMpc^6W`$R1?Mk1Db4-tror)1T}%W#|N-u*{E@x_$ZR zzM>YNMdL5*M^*ba7I?huzP4ugVTK^Orl+HRGdBS*>C5b4d9~(K#D{Lk#4A17xG8yC z(om&CuI`e$iyPIXEX7LJ)FAf>0#?A4HO$;ejv*e<!1hM5A90o91Pv%RCT8=M(=?6{B008W`G;HsN7bQO)6UsTQG0%K2@>0=Q54^ zLp~J6vjPs4<`=H8ntLkM?-DHn6Lbl&WrGpXp8c*W}rid?U&({&w4%D z>*;fUsN&$Z-M-ORM0b%C9_spy5wNw)`FbvXO|z{s5S%`NA^?7qwJ?R zDP9LzmZvyeCg{~DKCpH}^6CAai?U8XUi={xb@|0D+^TxL7{W&!q4~(XY*VlUiVGj;z@Mq zjfG6YncmER%>^dviX)@P7QT+k+`KX`Q{TW_SXOZcVsJT?8KAA>mP(N2Oy8%TnhNFpl+t~Pk;a&B#7^;|vvRp0+Be4r=a-zajDRREtz!*biCs`0CF>c)j+~0%MoLuYi#y@a`MJi=*wLgOc=~q+kP{C zTJMx%&&R7GFR2t1Vk09G>chHa!y1&4Q4ns=5yc7GUUCH0wOrP9xBGRkhC=qUE$5F* z_5RI+Qv; zbO#CFM#sPlZ7W)u9!#PI@wRZVSMM&G=aKy62KzNDPYCXKCbiHz0ja$L zWKe^o_g7}0MT^~uC{x|#*}3-co8w7FbKKnY+Rp9kOWXQPzN~-GL8=7$7Egv)zNSnC zug`2DR~uW?6Jxd&WfAKhIq$Z@sXsGUNIjan#$GoEg<3>1u`A}rnxK1# z<>rfEMBu97*f|Y1uiM)vZgVdU3ibx)O2VJl&l}f7PN1m{BTpE)EcaI&3s**k*f!1l z8Ay9~W8q$$yht~)#%4Bel5#+DZy zL((EV?HP9mJpkAd1q0q?5bH!iE-L_MGlzG>iHz+V;n;ftIAZ=b1OLMBlLNB`J?5CVXOj$N;beEjAZZO4{;L-OW|Q_=Ejh$o}EPnrOi@X zPxEV)*@+&jO>9>vSnY>D(z!ATn!d=ggsGIgJ5QCRYdfpc9}oH7e|)IW=R7+*zv`r= zIm=Pz{+UxxFU|v4^)N64FDrwJp7Ypwz^i!;?n0xzHg0{hHC9JtQ|q{O<00Fe3#Y{( z=N4gj3@GQOhi}@rYU^N~l+(BD){~ng+Kf z`F@?z)|=}B)|*$D%_H1-USdidZlAUj(CIvlrJV##3uU5sMcavJgYpa7l#HA2x7jrK zEm%I`G3uSj>pVa*sfF99Xeo{@eC#f)Re_cCb3quKKX?5s zw*H~(2i(NsjP1LMUjypCdBj1(CR8g0L(ul5@Db1fsq})oKHA&O9(__RT$ZumSEe!STDj0P}scZM(EI^{=CQ@gOSF8Th|w({N1aMqTasRMyKJG-0)SzD~aLr(bF z)ramhU7l_&ci<>=L%EpQKZ0i4!8+8*#wum^YN8Nt(c=!!IIoqbatHlw7F6jMij=6w zD_5JRsuyb&o27`jFzj(>P0)`RHk4Yw($?F|g{%_S)GPhXD%Pu)Mc?n(wGX@W;1$W3 zwK=ZMO{jdl6wrns-pd~JBuTTG*W8nQzV%PEy^n9jEre=n%>14XYg7 z|96)65;N8XaxrkVUf~xlDE+Y=ZLGaa+tDBfw!%c0n^Lwo;NF``xuiXc*ihg}-!02} z?AVb~Aa9`5!g=oIaWyxpmtX(2tf|oyU7yS>n&j%L#;OHPIxJnx#VfbK+>Tn zn%BLv-(P&Tp%aRI5#tb1c~5g+mx85&s>)Ol*nSFw9F^Dm0KW|$WGcBZ-&YZiboQ{$ z5!U&uyRR^3<_eV$l^K=U^ z>bMziJYub@_4IyngsOEEZ3l$b;pR*>Mob%UWHvt4C!%o6?sIl#2k7@$Jx zrBk&}Trbhq-G4H7(P*EF&|UyCqGlj>N_#A=XLLJ*yb6P6cj{OSDc9=oyM~D33Xd}4Ufx8ryZ($6atdXn^QuSv6ih5qT)QO z9iw9S;*<>W!AGNoL^c{0K}>X~FCAB%9n+In9X7I?vAss#L^3Bg*V&?G?PRj<+l|s2 z9?fmJ6e^?^KR?8+N4FZlpXg=p&&)uendFw@4mOBI4?gK}5m_Yk` zVCU0RmyYhPnld#hD^OXIe*}~5ZtQ2b#cV&1zd@}r>bXB^sJ!4Qbk&0!S!ZP8as##5>-S6- zDOW?M3jw;THNn7%)a%lsossMNW6F-*@yuv1a=~-SPWtL${$9kk$gaoy=lz z@8CDG_3?VI-!oLmI6r!i++oz_*PZVTs*mt}jQ75-9J+OjiS6FfT-tVsKT-Wb9=XcKi zIOlQS_wWA8qh{31=kxx&->=v6^;{C6yXPRt>h;Bi8ABP+1li~#7Mf8Qf|`UyDblqh z(xXpwU~}Kw-~R~LyCc+D?RDlif5sx9Dqw~FgTEK}U-S1;z#{t32z=Q8K;ZjKqF!#I z7k4f^$8#|xDW=Ae{=`pL)P6rA$YqN!U^niTs4qdxg7`NT?zEqSsL_NSEm~SY4Z`JysFN*Oud_jktmKvP69%Z1y5K~%Gqr>n62%5MnX4@VT zKs!i}sWKEm-HKUiN;K3*Vh44XLvx(Z<0cMUR0%I`=cBe%nsHBW@gZ$Nm3^FE-oUM@ z!Qk>DvaQ$#n`6&6G}#SioOEfOUV_?ez-L%E*M0 zeGw0-;){rCA*QfDjGzZG;Jmp4%)QEg9Dq_(^zS(N{sm#D*@R1KrM*Btv+vM(|1D3+ z7G2JR&jRb#y+AV2jxc{Y@5p6cU8#yA;w=0VpqXF-x9Z}fkRVCM2t!~jF~_x?bnK(Q z#N9*j1)okWHLj>+*p&eeQVfIZ1Tlnh4E+K3jr=GO0k*6R0l)Q_mDvN>dS&^dYkp!( zU$T^$`@yDzd$9r@Wa0%p_YIuuunnO)nLA+7Kk?~zhqp<|_{@^Wr{i*D@{g<)K&X=B zaEfC9!05|j7-C(Cik~%ymfAe2wQh!<&9~Rb^<(ex8_6UY!H%PX>G#nxw2P!zKxlv= z>s$aFaKKTcvEiwu!|4?RuRKLBy^+wg(I&+v!2-xH7#Av%{u1MbO+_E1s8TP@t#)Vv z(6(CCdbG{O`{{9kGpiDN5AElLOH)2Lx-J+lY_f5%!e))*6R7vl9~p|1H8L5RWb$n* zC5|TU$oSLxJmL!qWKbXi?kF@0?ldX_MT^)Ps@Xfi0eAb zHzTy}jj~o#j#huA0IM6*vSX+h7uj$s8}u>fIu%U~heo zY*XI@aEh6}0T3Rl>iq>_x9Fh2PD zMZk93Nk0l9!DogUHr(V)aH#CV7>U_YIvAYjKt8+{vB6J(Cr3nRMj-mt*jxw2xT!S+ zZso4~5Bb!MQ|~=`Jj&jNeuv@gT)cuFk&z-+RWkG1I5Y$}I^h{LRaFDKjs`PA&;QV@ zbs?mT88`tGi}7yPa062U?KN_T;H3Vkin*(PVG$*fMdO#pUj)3o7Xcc>#1@10#4o2*Wem>DT6~c;FLC`jMAeXD&OCWGHZ>LniQp&M&;;u?aDh)e zN>I`r9bW<$>S~+DX?i{($8z2;%DdK_>A&-V%>@#6D9XTw;4^@UVu(zME++Jk2>Ch) z{=`Mhr>F+Xk*x~7v&O%Ni@t+v25i@im?T5?uD>(nry$5RlyE4BIy7Hl%r#>ff&og# zt^QA>gMV{VSGrHgLl8_Cn2%mNB9COBf522U4;yt&=}0Q8JMr%D45!jmDMX1TUj&Yb zVv#3+R#narf?#@1FK+EK`Qa&C*hN6N{QvM}j(Hj4&m-QWJEO&(IRP>d+Dm4VKe>xi z<4+1(s%o$F9Ttj^d89;kc#!#GLj8>SNr=vH$L`2enFmbY4f%*>DIKzFZ;(FShBEDw zAyzqw8@2YNlw-q8-Uq5O{T*g#q-aWFm zT_sxdB1+%KYHa5tl)*&}DEWblY)^~Jd;Z47#idU^S!~L<=h@K(Wym!qBUr`de}cXD ziBNJR#e`~vp261#=9BLBz-K30OgqDG`@m*5D^cY#3@?wu@Pmy;QUd27kv1S)YL=b? z|B;eGQw~8eEQ@(;W-;U}Pz8ntK~UlpSdfosT8BL1_!IZY(CD*oGCm}Wy|0KaowvBm zcJ2LBsa%Crh{gqaGFts-!0bsPX*0T2{(_VcidpHg9PnDD-ea)6 zSZziIFvgFdmp=-&p&SY7g7W*HJ)9f%Vs>?M8_p4!_Jsi9T+*vj{p$}u12f9r1(T8n z%>d;nzMBpQV*Pfd-kK*ygOlnd7a!%e!-Ic@uP@=E{=nK#&VkK~AMPV|*ogFw&>9;e zFL%GF>mcBKgT>Fz;0hqtQv1PnTudokEG7XqKzfNxtDnBfZuw0ohb6y_`otGXz>WMD zX4Zrp-%M$u9zv-Rx9<16tEL6F)HI0PYLb5+Og%6Ao3P$1`gYC;Fm_akZ282B#m@K+ zDc@pA8$Q3h{Ro|_;gw(~<)^O%e2N54f%Zl)EI3ikz`Dq>b0uCqOk|nLX_<5V|w;q=j8o3=xpu+kNZ1L^Ar?Xb_lBYDJY%o zC}hurtVzeV1(19O5TcsW^5k?x5$&tQee<8qwRJ#ZLV&J zeQbY(CfG^vN!+QZ?>V28<5TNDg1@}H3c4VjEb;X=VOTqVlm zuEG%XW5fD})(Ntn7!)KxMG8_8Hwpr?{t&cUzqkr;>MNBym!peTCT%CknHca)hw zbS@N5YB$1b9OIlxPUnVijCWPyH16rJ|1eh~6+^)wBH9r1ui|c=EsE0Y@g%Avdb~qy z@=d`6j_Nu9&S0U=w)v$m7Da+sa^64A{Dnv9EuG-rjj(5yM@vfy9d^G-fJ zv|;$}5SmZ5Vqzunjy_^XJrKXX}?vv+^=UKIG(# z(f1FS_Cf3f7E8Q5riSvT8vbzTJoOu&xS1*&0&B0ixK{`L6RYs!@9NV3-86^|(=EAC zxe44J9OgGUz9((fr@cEAe<`+EUX}#vle2(xDn;C-L+ZC^tTseI+~psEVn(?yfM@eE zI0ymN_y50_I}&SNp0#~d0%3|`FNL5yh~tBXQuO>kL$wq%52fkl;38d~aQJ1%5hA$` z$>sFP(@(}XwKK%rFO)V78JK~eTxNa0xQFY%Glvw(YclfwgIhO>8#_!%=J z3ji2&mv-J={EqeVSS(y~71_0ne*eMwOyfAh#WK#FtHaG?bGBY8C#wLm+9AxC!m`Ly z+@GtZ)9$^Xxb#WL6tWgIl-#Ha*ix-}ntCkx%^SR|qJ`c4T8^zu$Z5oMkMt#iQeQ?2 zw!UrO^-FrvQko^V8Z_l0*`WW)OE7%Bckqz7RG<^v1?2;X>AZQB_Iu>$h9_ZW+I>$P zv}InocK;D$*-)^Hu$k)fQ=Q(`Y5Vl**xwnvH+CH*T<2fned@nxt`^?05&9VWt?99V zjx0}Rx6xrzSjr9pS3xeLcs!>aZDHVuojtAPZN}C9lRvB+p-FPm^( zqvj2e+|S@HGq^e^_ox?qNjfc*psI5+RUVgGtR*&L9U)6OX3Y;Q#PHg#y~&6W(-`s>VQW2{bjaFg5yaxag(*jW zMzWEYY}#r_oGyN!dXJ+6id-UVChLv(-6>Lg6u@G!+{0iW1l;J@&xkhfyh z?&`3@^ysk5eBl zFtzoOjidz8lhOM9KhS6S_N2LzAv8CIY>U%}qYRoB*w>RtVdR)rs|@I>nH7<8)20eh zqS%stQeN6CFhWh{xh*>mAp-Zn$71U6>lq|9+tHow3Q8_Y?^dmU6RF}V@2m-jnfc{( z^|nlNh3`>pw&+K~p*xDhyfQPQiWdK@)YacuweZRy*U9#<$E^28V7& zpnq@7!q;uti>^>gG5%_^ON**ImWrSCSr_g>MO}MNU#Z$u9b0voP6~W&4BPnt>?H6+ z+l+Vw5gKK&y5xlR7iYK>F( zN%kc1r7rL3;jFrtf$#dG?CEQ8p5uo6p!K!@8`p&`!bmC&qp{ladkb~xmE>AQ0AcSe z*UIJ#c|OrE@3xF&z`4x|0ID1$v5cM$^d|cz;YKh!R0#O1Ta-93UpECa*yjSH>`CCC zJdRl&t%p&$eq#1*CzwdP>vB{**(wC?g?vI zi<05MWcy`U>tvK+;S^@!34)(?>A5Qs(}!<@_6H!WI&6;r9ANysml8gH8b@k>=O7Nu z>HsdVyExLrjfm>3L(q=8NQXvx^D>)FWT|<_p50Dz4sSLx7yA|Z8<-7t0a9AlbJ$Fb z{YqJCQ0GqGSd<=?as)$rl%I}SYs>*Y*D5z4#H}a{@jPM%Pf+W|GtoE4)`Mqp@tX?sm2a8w&e~K{ zy1L?TEq6>*Ryw8O4%2`y^GXIqC7)KvmJ3?)v-CYxc~ns#o$nke3mVzq!3bm5RHNvp+h3)R_)JF;P8h z{ozdj&BPb`E*qA6g!p5E%ZF9pbj;t~sO20P*JS#=HMo^D&q6UFX7m+lQ!<3KofR7% zWLmk)Ixs$mUw(!=+Qj3j6v)xVlGAlK3Vs~!k(fgcpsX#xlL6;m#_Sozg^(8a)lJ}w zQf`5PcxfTW%pJ>eQ|{)y?J5!LX*DBQjV2S(Z2cEA`Xj7qtIsAXz0;dG(l>jFfZ!Ya z%u@0Fyu9&@z4bDhamJR3s%Qd6aop4!w5#;8zyzG84RuVn)1~*nJPbN-3!Z@O z>>9xU8kNGB#Ra(1$G+wj$*1Cn`Ie zPT4v_$rZ&4M|-L7VEN#ws0wEK1um!M8T407{rZJl8?U~qUz*5h8Xoxx*M(3$2**qP zN`TjiVGZVJe}G4c+t&~4w?s7W&m|DHv& zTixp_YSv1*y{MPce)y9g!gzdFKU4lhfBiMjtfB`@0LA#9G_25+GouSx-Z7>%>1X9~ z$L5$W{p66cW&H`Ea5FgR)H5gpN*M8%0}E3o|*$ zB6C+xoWmO8OPO`9rx(I+&i(~Snb)Vw$R8`=(m=YZo1Md(AFc0%!JaAR(S`KZ{^F~d>|z}5t+b5Qpl?k>Yj-?L=c7{Q!@ zl^y<#HZ8_b{V&Lj^%npOiM?dbpeHd@Q92asVk8yF0`Ow1Xi?JPM@wm@4s~AwMP^>4 z8w(uCKr??UagTd9F#b6Xa&NE?k&3O8-fXU*!6?lHESKtBR9toN2>(D5n?jOjTJFk4 zN$Dy+`&#JJVkm?Hz#0yC0>*!prb<1IOkcC3_=OZ(-6N#v`9C@yTp_vf;gGuda@zXY zNY2H_2aJvu!*1EK4>We@5wYDP-~tjr8`(E^XR5a#EET2k;@xxnPXUgA7wY{iH#_V=73&SBeFkqz2Tt-uvmm(f6*TlUpa1zWP+YCLHe_~@XmnCRO zXRlialF2kjsUy$QAGg65?q!Is!Uc9B?<~xU9}BJ!PnrMv!EBSD?t$`bWI8US76GZG z@}N$Vw0mJuS|W^-b=ku%B$20gtLL39Tiw2n)F09zG!?1=00^+f3f#lY%T`r#S6(_@A( zYU39knA3Z7|D?{* z-f2+%;OVVk)HlL~eh(w2GA0mp55_3+E{#)*Z(7FJOWpmBWS{or$;#O--?jt|{>`*q zQ@#c0v%esLX?|@MR5oO9pX$wk*~?>^DdU`L;@RZSWQJsoku-k&x-mW1@Q;Z6Lxa!X zyatjP;|Lg9i&99=A#SZ>s0M3|XpxEEDkmZ z-N%eX_Z8`BRfZFSW;2!^e@}DwUb}SdaRLgJ>lorWF{`Y()SlNq;4|xy~PD zzxTKf^K9_lt|nwFw#H0}CR|5YYhm+kQ<8itzlp6|HIXMO04J#3eh5lP2lT?NQoF=_ z7zON@NY@I3*T7NC;~Hf1_TM7bWS-b`1&Iy54Md2Vn{P7JH4bjWb0PPz8^6n){V=uA zzVa=_E0eBTDxU8KJoCOQ*c!ZZH{zx;W8M{`G{6+k6TfeN3WB17$y)iuu|gNhTB%BL zTSi~rE>H7b>djqC=v!8oUx3x$ggy+~`XnO0KjKsEk311w#or&t;dA^7d?Sy^UBHS1 zP7^pfKprQ1P6i&&%~QdPyL}8ON)xNEOU>G7mqN2eo$gF((!xV93uR#56BDL1qX|oL zlggI1yr$l9-H0T-E4OhIPzgJW>Y2a|XX*MJL~|@dU7|ln88f+B5!8~sw^OzqIA%%% z%BU}_^3G$%`F{YjgN>&_O5ONb=z{hJ%#%keBJKyVvEeAOg8xoo;l#t^D}(e~GSN}8 z^ptCu6ij2rAV3D#euPi91k3=}43#@FaP46S#2MMz6vJpl1Y{F)6TCr>FcQm9L~@gF zP&iMe7cQy69^_ejZ!6~BR4sBy5*Lm+epl+l2m8b;412}<5Rr9I*};>wiHd`%@IbXR zZQT@}5Br8yxR8!b>UExJSQ;c;jV7@9E_fsrR*!yM@O!hdvEbWd=1U!gpPD*FZ`)oF?euHc4|@1U#}|W=7 z0fRBd2fDu+1PtFQjb!FPeGI->&M8V3$fTHr?cZuF=F1?fp3NZJQJh~EGcOK1EKNk) z`~*dy+Uyhi&H(7lO?4JbP#1>(B@U2kcbJHd>wssg)J(O-OkYRP)rz8yph72()sIk) z?sgYGG5&lA!`mNNnjz!aiMu^uSUP94dk6q6FPVSsc8v`ZzyPi~ZA3yX&+$!r z`^Pp?Lb~r0%UazcadU-(NFc%(Fa-LRXygqB^OTzYZ7K}qH)SYsW4z{3z28dsPV;oI z$(LxK`V{pY<~Qud)WcvS6Q((m%=$X(v^S&|D-84qN^v(CxF)jfF^ROdC%!$poXh9n zyXpYy;5SZ9n7+^;q99zOWzE~$*mzj^){QZ+nP-Ne;kg2fWuMA-yDwqjjsHU z^bYL*o9P{*gbO(@{r})Nm!A4*F(S#O&+yL9{q2q)^30_#hMj7i{WD3vQ*mx=qXHXXFo;^Wlt>IP^0Rs;UW|Ipj=(5igg{grNTzbBU`UTwiurlsm^9Q0beM?3g0a3*2Tvd!cfQRI!uBh30D3!At6F%-ElabO>f+?U}}`{ zfHd?26$Yt>5)&(JO?fUgQ#i|N7PB{Zkm+jSpe~ zC%4nF070e5y`pK?Ocam*cGuTU&$)XGnw@`Ju->9xKsfgaCnT#=N2eRItp*@505L`< zBHea-;5-ZklrqtSVq@wb35KqHmF4}46M6iQ)?E4KVXGP=p6lWZS&s{V>Rf)orr#CA z;F2azEfwV~2En`b*%RD)FMctcyV-H}yTQ3L;i|Han%^emo-stXNkJmjNbFsP!jzJQ zb_76(((3CcG_3>59B14UjZo1PiW1jq2R}Cxi4KNI{q;K=2N@K)$4O%@K+thNq3Y^P6r4mS-M8 zy+XC0Vx+(=A-`>At;jBu7{8I&0=J}RYmF_KRMe^9g1o|z(_YbjsP@{v4<*X5cplOC zb4x6v?1jE=f1dwW^L}qATGT~MZ-CaSt&4VwTF|qcRF4t$-dlTU(3gg;Q1onBF;Vau zd>?o_rcn}Q^(91QMEFNRQ=CtvPrqoGy2@AoocEO{Ikfj)J%8c&?WoZGR63-yvY(JV2I(SDn}=4&{}j$8M{H#!MF-;;enP#^p@aMIMsK#%;9 z61D_O{tHqEPXiNqW;4db)NiD!z^CyIe&g>C+M-P*zj>YOk(ap=Jb0B0@|FIOCP}bK zz}D?Xq4<}0wW)BI&%svr^wto%r%{g{xaXs84o&~IGi!&SjEU8YO*A1G`8Fki1b3!5 zQsI=lF5|SjRqeY^D%Kp#b}x?H8Ld5vFm=51RltOYsC(B)db0)$kXT(Poq_Yxoi)H9 zyHK)pdsFS^@gK-wsY>X<4sLqBrvF-DfMpOrviB-8)dSIz z;s0JcaQm5^MY;k0#IQ&xq-OC<6o88B@#|~AlQ(EFWU9AQ;HyDek7ZMfL#YJ&J;^?n zV}*CL%X!`pXXScCbMQb6eTZWKg}KzhwW^Nfwj_o{btwB4T<7+eb|cdTFp8!JH4Hx1 zH3~sHUgI}p>X|k=>tf-J=u$$O4Y+glAE#o2+a+9}@)wBYMByUIl0$+TZ}DA5@7W*Y z?-c_ZLp8=6mT!vCx$zB{=mN(g1JeW3y{GA4vyWwLXQI#Dfb802;92yQs3xf6UpmB)ZSQ#7 zDNX@FhituSTTC978AartX1U$$ln-$C?WR~wJmpAr7cbxJVn%$MG%$D2<;xLk7z?@A z`a2p~`QW zCNvILK8|w4JiluE{OfCmmBKgVtP-v6`blO|ede7LfSv-M_UVGjbV$+!F;K?ne*4^3 zqRW-HZ|l>yE=k0a^NwY)B&|5y!nZj+hJ1`#@OcCIWt9PdlkSU#u%AsW_GP_)K@vIz zHEV9m)lKj&Yvt@IX5>}2_}|Wa%YGs!Yd6D=3HuEF2{=WVZHSZdyRpJ>f4RjBZeJL5 zbD-oo#ls~3Q+S|BNsN3#R%l-Gp}wIR&IbE1kz!~t{WZp0m6`mMa;He7ZKBX@D!4GC z>4$U6;U&MjslwMd4r`0?FtN*Bxl?S*9=D1<^k-|LD4oyfwkD1&;?vwdvbGs2VK1gR z+cO`q5c=BlX?n%bF6XP@iIePa1nyWR1TmbjR_p1Y#+nW_Y-2v@m1jMThg~>kvU3Ki`EZeZLdyilYUBxmpqMHL;iL(lx&DU?-9XiAKj=k z^gT)&*evxMG85tH*OI3O=6OfkjCok28gGqISv0Ggn0u;_YP6T{=H z8=B!RuBdub)oxx`shlH9nfCI4UNtAhncAo2cD$W9nR~lxwMJjW`Eldz_PP2%j^Om` z+RrjSaIi4v6xBmUgphhYhC1Vprljh)V9dcQ3KhDzpLr)-dlVp1iwbtFQP-IU!VT-0 z?oiFfLJUsr1Xx+sw~l`^7R1>cc*iaKqf|^-{{Db6a}f~~RBEvdfeE(CMMS)ez~}1w zL(StmF8<-he?cM-!X~3MQ5P3LnKaL_(dM_X0Y$_g+q?a<0HtmDXzl)?Ol2m0)dd@7 ziVUY}oAAOMw3qn7INLz&Lj32e>5uqd#ZX4sHvaCk@V~5hnfg#c<0zlkC|Oc`7LjzB zl1?>iZXCaVEB5^l$9R3VZXKmmLKIvR4e+6E9rSUO$wW2)d(zr~`xEWLu=3+06H2mt zhf*?&SGGEIZ%IVKEe-imd=wv|UhnGSRsvcwy5I8t?a&2-FS8J~J+FZ)kD1ejLJvgg z;UNE29yCmj@g6V<7%DVvdU=N)&5TqQhpB7RTQazCFHPXr#^iWpl~#M65$f%-pZuQq z1?kJb(%Wp=ryekE<2O2~$0#F9Z8A_w3^B*GVXO^9B=6w;OjjGv-O?VEb*0F8TF9B6 z>Gd0C8@K~GEeSh_>9*6q?Og<&=z!65h)hq;f^au&i@V1xK9|OeZF*jCi#2E677bFh;<%Cz#C zf@g5`O|C9ZQce>;Dl)$hh}@FfYYp$X(!PeLUx3dPLrZC9#9?Pj3DsbPSVqXJ4m#Xg zjdU|mbD6kV0*Ky%fzMnL^KTq@cFWcAMk+*I*OvVqj7|RpIO`PXk5MPsyMwrCCy20= zw$r6w-)nvh{AF+S#zY}*I)HlCt~Sv78qd9W!bwvIWM7T^mY%nhfxFk$7;!bC7gSut zjqXkξCN;qg*%P!sRBj)`}dnw|LLLpNk)RNVgg-9&Sc6?I=1s3U*H4WB2zx5ciVj9uzCke<>4s{Y zB>8m5=OFmvG4K378Nn~l`Fn3`H12vG8+!eE5A!>#MMK@rJ~@gFnE`5^4Jy^{M;%I^ z^3ENgY_SZkR%WV`=Dqu2FK?JXSHJJ%{m5QCdgc2C4bYv+$^e1@3xxtFNiJa4X&oGt zl12Qw>rMZ#e5@Dsswlkqw#)#Yx#ey>=`lD(bg=1&TBQLfAIh(p{-V=UO~h|sJGtSk zyxVAlVB`2DCCM2JR=(|5A2RBLB)@!l$*ey!!4uh$*NpF3~oJ9hCHt}*$s;=T-??;m^LkK0n zt9)RxX`kNsJlj&vy@6JlFWBN`v3z)O<^eF^Fh_srtQ(B$^hU(xVfgg5@9d60a^Af> z@!TjQ61iydu1V=e)T>v`I`-lU%b8F~P^J_h^{>)6#~JE=VYi%se^6+vN9Ah1z(G#D z{%uXmNUMjQgLdu^TUKD*S>3CGXJd?ilN{glwDIw36a{{ z$*&KWjfD3(2TR1tYMn=4Kk&JUYB^)4CwwT%P==BzNd^E`bRp8DN5XOc!hPb6F$1&9 zxoF?9O;M`x$_vzPePYHHJg~L@Ven5kA;g}7%xR#y^1lR>3r?VGg;GFnaSB!lL;_Pm z<^MSh*d81I!;tP@4#g}2f&*zakSA|N%81)Z3w`H;Y?@eq){>}Q^-d_2N{G@RP!Pm1 zUI8^;W8zltiPeKwOV^zv{6q*iz1VMxSE2*>^whGxp-vos3XgBoDD^veW6Js-nyhuPYbuQA&bXy5^u$Q$&73u(gUGTj zG&|`7zcXdFyG1lnE-EkC!0|%-hHX*l+2k%@3vkz%xRTJOQg%3FF^&Dg=XH67(#p73 zEXISd}_pX)KyZ7HuZReF6Nvs;&zqj_hbuuv~0iD z6vWJG1ql;oVP4B%qc~a+)ne;|*nBUBN1zkj*|0aus`CX{SoU*LbG`xrs74=xgCT_M zq5TADF&>Ksfjdjuy6GtacaIF(6rEK9j+rs$pX)KuRg#}BU#`!K>8=yP4bQoGE@qrN z2Z46kvi^J9?mz0CMFd58rMo)4Q?$)&A;l&EE!;j8%zec>{cJ->pJ>&RnzBLw;+QfY zQtX=f(9i*(Cm>qGcqx~0l)9z%4-(|pu`Rw1A6t50n|sw!pPN7BW(}ycXC1Y!Wf)QR8^EMg`Yi5-;q?(+d1PV zH;L|lapmmpFtptdS10ID~3r`=;*8&EvuCrgKUSZE+hbNdpe% zbC$K(>zqPNd%vl?=)O)7G$-S8!B(1~;tx|8A0^DDV_g481TL=r`?A&DxLl8PQ{?^F z4}H4jALcZ&j9^ZT2|QCJ#t#~eo9fv+r7#{8nCci2uvG3Dy?J;}{MPAd{7J3TT+6AM z%FN%f365~$Wt(_6p>ed3GfJ5fUN!S0^z&)~Cb7D~e8>ekq2Tr9xSbhSG32~)BJ(Ye z$5EF*173nnhOX$wMPl_5KBeK;QkwINg3@hTqs5X{A?T=nJF(0~e)6j!={k3hyrq}H!#RqCg)ihyD--7QuV$5Pf z?0KyGjjeDY5P#8=@{U42p$(e5b|N~5psdgQ%olMmL?zP4EyJv_eo9TwsK(7T(LPYo zo~u};gA6%JjNp5~M9k<_i^eoLuKQOa3%fB)Z9p}XSj0TpATn_bYd3MdDSIY4mhb1U zo*om4fhxA&hR(V21;Ei8SF!lVb_H7l7$Wxx#LBp-zJTlF=6SnTZ(5Tjy;{?M&bvHF zwpiw@3AIT3bVoGWLLBlNHZ$8(0N#&grWq1_l3yG4zW#xh8edo2Xq(7?SEM8Cs{PdS zrn>x5bAvQUgdzmh3<^|XiW*66si`Xs-i_sIJ4J7P-A%BvK4TTs=rVhqC3;bO_tTHZ znu#YK{~C`mf|()h-mh5`8#Bt>`oDbza#-T|!uz;2iFk1-se=)>jbuEim(d^5;`En> zV#5orH-6WDv>bDfEV)rGL#}PHmlbH1EV*V`yX<+;l&c&9ga0TPqzRiXcI1lQ7X*0F z7OXV(I&P}3NjLjg_Mudj_Y&XPGo#oK%MMnEfNX>*#s_SzV;_ueTJ^@kI{z;huww#u&BTYsy@&5c#TaA)dfOffGz~U(ic;q+tYj-1EsI1AeK9dD`8^wUV#k)Z`*5nb zffHqJrq4|d-Txe}{9d<2U2Gu=P!qK?$g!W%LdL*;MXg7`uLU13e)HHVlXB;|G>0J` z({=aUY4fO?*B7mL(}qR6{)Dezs^=czMtXE%>K$W$>+FmOQuLg3uU-n|`ehs<+4y-b zS<^ZW)~k@v0J-P0E>BEg2#u`2Ta@P7oErMl@DSeg+tyTaL)1veLHg05g9DLE#eB?5 zHa#{td>_0qC<^pnyZvE#c%Gf{Yaz-dlV?Rfn@IInAIclQrJ-4#DJCEJjiqYTh<$2@ zX-|ou7Ufuwzp)!eRbLIeII;k=sv^cqYjnetJfWlXha<-V*}uMjPgI8YkcxJg_GiHI zhf(^eCm5gcyl`K-4Y`P(U8QMYxz_h4+<7bhx08dylOY=o)*0a}oMtA2B#qEfyZ~XX z0Cg{V9$UYW0thB^Wk@TKVo+^a)zTvUe(pv=Zilfya?bk^KSE4NW#Dd`7YDls_=Qyp zFeYArb@TdkBZT$!H6xvu`W+);52g$qKb!Y4z+YlWLNr9&_wlvNUa9+8M&ejjGz-n1 zn7@H11ubbOqEyK?>`1JI7S5rRyyj>4`8ZXh>AeL{dEd!9L+rzwCz*ct|D!oa`(wI& z;L9*#4x`l{yU&{oK}XS4|HNS|!l;mG%qnQ;F8-rzfx$4{a2kkwl0bjd)^$upop`?1 zXhnEp5!YDeB|Txp*m{zEM4SeqiST?BmtMnzZJL6@k z+eSPj(O7+@C0^BFxCjMdKDo1;rRZW{`d;NBbM@S{>?2oGA4_@Kvb96Jd}RcQO>rV5 zebvQE6*E`U)vX{ltdI2D=C`Q80_&)t%muG>i>~ic8X+Tq?Z*S0ulosV0w_J=KxKtV z({N|UnCi+~>&~#7>2dLT*GNWuB%5BF1R0%NB~mrO3VA8f=2JHe%S(+z-y1MxNgeW*ifPkl0o+h!MyKF0L_C^fQ zh^;B-h$ZJH6OuGB0PU&y60;Z0m_65+yb`wC)^9Yk3n)$hv^3i8qzRcU?)FzFA=raQ z_-MyRt4<|OT}fZEuWRToGS3w=i&Oe;yUxj+6=%Ry4CSUj#wPcey?aVqJYL%?>{G&+(iiNbc(HEpl#=#qx2^iJ_Ehwi?1dn_z^}G zZv830IbH?z^o`B?ub~FY%uB5{z?Q4qnRcjiCWod*xxEym_Kop5`#VlhiF(DQ)g92z z2FIe5-%(WPA@(_vbkAEub579&0a86%7v9DHNPnd?-_I^95S*vc>ePB}+ zWEr7uQZBs!R;$K@pxCLf13h@ec)=&}Z2c5JM_%rYB{_w&ddML$5HFBr$o>OMv{Q>J zf{k@>UqKxwDkY&bO0GUsJw>gwhu`%b%ey9Y)lB8p=Jlt~c-W-?V7Ugrkuj676fiP~ zfTF)(>ZBQYj1yz3thtP=a`T!&WOB8bmyeueu$|bPQx21TZcH#F+FFpoB~CS-(FV&c z*;y^7gCA*f5h3r|@p&_E>vC&Dpknmb*S{3*O{wJ6N7*QCX7XXl%yg`N7*&^YmjH{U zc|DVqbmehuI&EIJr$sXVIguV(%R|&Tp6?4J){_HfPn1yFB0Ylvz^CH{& z&}vG^G0lxj8))u?7(l8n*ydP`eqVryZ}VTk zh`JUIjGl6Net(1S`_ay}JXvw(T9xMsca|cSc_7v#j|H2JZmI)?-MNW^>yRL(#pk%+ zj(ked>upjV`-!VPi}x1QhN=v_6eCgRn&stgw?QJcsfUo<{aA2b_&}MF+=I?GWbf9J z>36&vWmuv4OOKYXY4?3d+kOLA0du9jRjM@VBxUg>C5C|L2Po8FKP~{9s&7DWNz?ju zcJjd!ZKpT61;&!X-xM5EGw)~=iJ$(;w1MZRiG$TAPk*U-msmDfBt*37g>fQ=QeGpb z@z1wid&C4DrW1TrGWojXznY3S<`}^|X_Ayni`Zy5&kihZ{-7D-<7j1DZr=Iue1SUA zJfA_yBGWLP1(B{U5DEl3jEms2)Dg@EtJx_UjuiM)=}Y}+(JwE!1>CxQ37?R4@=1q- zFD1#ve4E2QTnH(K-l0E43l9?=7eu2CCFWh8i|${@m%O3;`nAZuop&?SgUl`~g(zUy z$^}{K48-2=kfl(m20x1giQbRZP?yRO&NucI4kH)wcLg_YDP-kde(3q|z!jdXj}RYp z7v_Mz3sG=EXOtng>S06jZhq}{W51q_pc0=pomj$V{wS+X%KR^gij+7MHOg*4^<@lW z1Q^Q5-fo19A@iDp7UCd^t@~P2`>m|`GqvI#TpzgN9sQUbds>FNveJ#z7XWA$T}ZR9 zm*E2VO&c@u#lUY=nn_cYZHd z^SKuduCJU&@ceWX&HH5)$#VEdtL{L5R{kfWuveZrQRg66NHBmFHUaeHVg@$~Sx;;P zGn3U0>Fk~rduqs=?G>&3i?Q41i*E0grh3Z3w68KpF*CT-z%ajh5OaW{VhV0u(8lmb z`MxuZZ8!iJ!)?QlxBk*kl+0#hQo=d5E1PpB^+KqGq;NKp!I52H6$3>W2$$I%#Z>8LAjBb0t(D zTu#wbArDuYSPZqIxZDGaO_EgIX8^UOG?XCOyWIF{S_E%2O5A(C>o^*P34X26+^yuN zppRl6xz4nTY1mq)fiY=QH?QMjdwMAwwt{nUBDk_2tf0(nR?RA6b zyDap`ei=AYdUiYbfnZ#I(JThm6QSXtECwXT{vxA^ z&}e;kV7KA37I8c&$S2Z&#Y`>dWa`PSv`3OMugn2C4kRHNf=!Q-L%l#_p(HF+a{*|L zg6WQEb9DZ;GF$nSs&HnTllx}&xp2d?9dHf}w>H?${j|I%No zZaF3^!W0XNDO%TiD%KeW}U2r^pf65 zjk3qgqRhba{Brdo#&eD_g6C~0&slc0KV|+5K((_-2JZPjv0_JvX@W5fuY>j5a04Qi z&Bh7pIb_cH3A7xtYSfQ3z3QRW5>ma%aGi!UPG2_?m9xL#G@K0>IbX1~h!o%_I|YtV zSO+t*5#Q4(tba6GN9nCt2y2cH(h#FmbERX&BVHG`2=lAaGJ13e~V`kZ^mL+ zZ#Ad&o%neh!Ty(L2V_loYKog5RD_LWPp_A}VQ&CVq_y)IR5c{mnpwcrwIXE_YY!e7 zbHz)3LnA75;L&inUo+9=yW(8Bb^t^soB+QM7Y6LQg%TMN3dwIVfWbPB(o>B4R6$;I z|Mn^1cnRn7BmJdcR$@bE30r_s7j84sJ`tf*RYH%11lGbD4YrpIPoVogv`DgOKOQZX@U;VFt z0G^j0bkAa?%ZAES%}AR7ny{1<@IZa)@CEhA%JOK;rlON6MR1D2K+*HVke`U6R;LP8o^%u%@6*6 z0kZ$5_5Ppz_(QGx&yt@1{r~?je=<~~%z!-?Mx2U2g%F}CQk;nRfr8z>cHR9gliJ3B z6TD5hrO?C+T6*t}-HZQb`{;I5=!z_J3q2a+<9c@i+Pzms!oeukG@po&N@Qz7wun5x zOI=3Wdv1-8y>FSGQ6R5U^&f2;_;O5uG_@!28$>Ix&S8GM0N%WRq(E5Uh0{b&*T(N# z`53_hM*l4im|c<-LnupNaG_358Y)p<4PI&+t3MZ4J^!@2gK2xkbW` zTE093-2CsFe%`@DeaX6PX})=l5&`uNp>LGtlEo$t$&$GsH01-GNwiZ>DI>iF*w{Af zvU8Z{Ya-b*ZnKt#PVQNjE!gwX;Zo_(fEz9OE}-l?Qct6FNzh(vC}C)_zIih+u?lJ(2#E$%>!D_n z4WqLjOBV(E{`3FmONu=a{U-*wQwY9}DBP=rAph>`UDyXB>&^eMqfUcF_W#TM{ckQ; znY*N=rRrF?59UBdqMOe6@4|MqjhZWO$13x}FFxlnsjYiCttIt%SIU;XuVn>9zkoHW zO8LC-QKNUBWh&Sv+Kr=)G4Unnw=W9lG#N|Cr?a&tLwp_5mjB zf2%S5uWvkz71OPP{tGg&MU~6}(FuU={EvqF|Nh>A++s2KH&qxrX8j`g#j_xn{qND9 z|H)?tfo;@-nD-Wp|BJmZkB4&a`@b|85);bKBt#(K=c zTM=lf<3a0b^qm4?X8T_({V&b+oE>ZVSuhcF7PJfI8Lfor5-|uvx&a809i_m&&V2_w zgBh?D5B}C&{PH4y{CEFGX7~?13?c>w&O!xc~R1scxTM~ z#-RX=$sb>lzi|vd-4SXf6C@CWZ8!yd7eV8T70~F0W#s|CPdH}W_vIor93V2f^1avk z_kBM`oj}S@`;3A?FTv&Bc8E3iM0ns#xsKi!LdsY zz#RDdUgXagV3F)Rz-!%o&*DN3_JiGck z@AQ9``L|xduYdQ4YUAJY9KZZ-PJB3K5RrrLyhWS`)zi0Au#5&Htb7Bo*tg^UDtZ3P zkNx`Y{>0t`yKUS6Fm%epxj#Y`nxOuZDzx4owhq6vd;gP@{FfC3$UIn4g>efFiWm#* z@~kBFAGCpSz!Egt6DC!@LeDq+Mr!o)qx5@!;?o{bVZ<*IuyqyY03WObdZA$q{xp_h z(-r&-GYd=}0pJRA%^$U;zg{h!9rRu>aAgi>fO#?o@tqT*8bi7YqWb6{#fqz^SAKppBNn==555k!jR>e=Q}ae;$R8c7G-c{8$h?1?J4k2-syaI{-{}B z0hBrLuaNsd;Gs#F2J?_NiBu!cITRM8pt-s-U!ff(>8N(GANwr7GO;MI>AHX}xCPCQ zRSIVVw4L*BS9LW&=S%J$NnKs9{W;3t`?y9rFL57TWJM z6Tf}l7xPW(A-lP47|@BLb6GGqy8NJR{5_!TkGXFkyY}}2rT(Zv^b4CP2C;1lZ3nA% zj*#5E*nXDA40e|R!)O0;iggvx&U`rVN3Z&uM)$wOKz>1EFpr=Xg8|RW_;JJu;HF0P zB@O?mml9=x<9wCxE|{wH!jEtUU{ndDDB@=+_#yb8i^i-lAAR(FwIBK@zrNT%WP0!q z8;M_AqrW}D-(>d8_~U8vuQvNnO4ynJNcWt;B7vB7`yVxKzkT1^rlJU+O?13~74HBh zCo9hqS%sz=;pYH69M}~)$ouY0f|5zlpZ{7Ks@Iccu0aW7Mt;Gor=x(?4cd->o$nXS zs=q{JNLEhi|o znzjaLUHPM?U6ldO@)}7qR@o4^C@+L_#8-+E26btNS!L6)Ouj|+45uIZEWf_k;+8uJ zDxIKNF+T;eK+U_q5u>2NA6M?d03L3;uaI5xVOG)(FaR!y2H8dxdS>nc2o}8C*=GK* zf%w&a{n_zdjCLxI;s;4A;H0{wG1D)8&<_pZ8<-pOspth@sOSdjq^K(5+&Wu+FrUr~*Z}TAKELPof3|9la4<_>D~WmG z9k`?z!~pYWL8|yymngZ+3!~_H$@dU0{Z}Qk-+R-)^U?qH?T2rep`RVy#V98z4v=50r|IErzOgJr=CU z7wIU#efqav@$dNwQG;j+$-{6w_-&Xtg-3;oTC#*Eg2rd@@F3;Wb zD`b$Dj%r4S5I*lN1JVC+aTHU27c}uv0(?~FzoY;fZ#A~LR1lt@2JzHv zt=;^WR?M{a1Bhwx=X0^&US&ouGaT~~RHRpfc>ux{{PYl@5dCgsf(6@?1CYZcY@^|s zIA^M4$Btt)i)x?e^=>~%eH(`xvp}oum!bq7P2&$G@{6s0rTf88TZ}Fq%ve?rW$$G^->3cxHP9xhfxG{@F z>RXB9z~~qbR1shS{Gw#Q(w!`=$-iu$AcygcRhNLcokiqVNCGG60W*gzHgbWHHQ+OU-+BJE<@)RA*yfZ6P$KXm(+gwugV{PMwT_8`XyHBY z4^B>bSi4zUr)QUiRigXiGaJXWzk^>dy@?uTln|J&!9e7T2 z?;Af+i)O>9(0Fzh!FTV)Y-9>Z%7 z+YL;}*F2B@T`hE;^MA2E#5DEJs} z0&o2TYv+j5ovo_`Z}gL%+wz@#={2*8Z639>W4}U6asE>7^BynT{eyEEy#Vb2A{qo3#)z8O3} z(U_v?{;`DB^&;qGG}oC@o%{B6*t$lqW_!sB-6ww@Tk^47fuYsRQfBCOmW#phLv*4U zjW_eCjoGP@ghy@$a-#3ANonVRX?VhtYhDUzmO{aQuQ1g=JKd?HT(Y@f3e|0@*gKkd zwY#eIs!hBa*WGYPFhsNhp?iNB^N$7-EBmeLFFEU8yBl=OsAaQl`liZyf*KnQy%g3j zr9(@p+ER-9C(;C|lm%T}1%dM`bUIgxP-Dji2iFNFUrWaJoQ*yBvM3R?!N|zINZYUX zy!|oBu1~d)zv2(*W&ScX`kk1#--O;QU2|!9{-|U9Yj=HV_blz6rQNf19+sTjk}v-A zlh#Y;Xz3g+ouj35v=mh?MU_iY<&rmC@`g*^@ITEPa-w2%E|8`|%f(;N!eVuHINot8 zau;j5bbi4;s`RqHMd_wR)o$OVA(VgF5XurL8i3;dZ6T(JJIunbki+_qCMV!el)$KowqplK~Yj~o0Rr^n!KE>wIhd<=e1($%)iyPp1{pp+(gOVwcQtu0z= zf!6~`L0c4-Wi!;$#z(x4KR0O&x3vD>MrYFK%)?9xCi3ic2$-rW28;n(hcM(UKq751uR`F%P#*wb=Rg5lCV46vpj;U?kF4QKRe0gD)sJ0@FO@|~ zYTFgOc%I~v=pI)ueY)!5<_glXOO{A?ef}n$tHrvYeTZgh>!ZTx(ahUV^3@7BFYehdK<;QdO$wQyU|5vChwWv&!d0zt)_*e1I=2q1h4%Ms%x9 zS&eDab~p(<`5-_u*E=m5>0j*+q;KXYE#q+SQg=`N_ii(~TJ+88g?+a^sR`Cy+@dA$ z2z7s3I?pw>*M9kwsj65um%StXns6Ffg^$><{6oF#L)Swc2|9*1cLx5~R_Llb5K|Yh z8UKyvdPzoKNn4?}#>T>)gb8N})8uL&ojgizRgb(>AHiL5`bg@PC|W|D6Cx*l#RR^_ z7EQeucb0-$^{E6Gd$$Mb6fOyAweGFr;oulNxB8rk#Oj$*uFqg=#;x~jtHG%kye~AJ zI+?7zWxhlEjP#3mxt=`hQbZx=x%ykvqxw?sm(bu#DEcLY|37Ck0&bwUGjHgjSq*8z z3?4E*tmGcS-}#YMEnfSR@XB{aR+z;U%Q4EA%T^{SUnddB(PoK-vd{(z+9;rgCI#YpuqJWs@1HfO{ znv%p2$gRYz(gUJ`6y>Q}_j7OX0xrH{w-Q^9ZhtMf>*JN63u_!-LgxVSZ#{ zEXY6~eFW^H{M!i&o3I*bq7<*Z;*P^Y~!ogNNI&> z<2N%{@8{PA-f_LHOlVFpC`}yGC4rNz!b4TOy zR@rNH#T~8Is`p=8jvbcyl8$O3z+Pbin2|g<_$vgh0nK9}_ zKasg{Tm!jo6GjYztAG9&%lg5XHhTb7DB(f(SOhK1F7DB!%q{6>mpM073`_$?C6`4> z+T2Jq)eOY}G+(b%EFy%7tJO=zWBJEaT?DKR9e8BTWlr6fkLQ5S;eU4X=)<@MbpH9c zg^gIPGT8SH9RI~S=*!`hLmC=;l{_BHTGs97se>*{EF?p8Er=T1(?H+b3>J&XH)1Q* zsdLmn!#Jb=^~HEA{diFx<9uh{W)Oql#FHDPK%jM}fr4T{K>@l5k~~9DyOPMpQW`<8 zo^FaLY0U9TFKd#_qQ}Xeo4abt|Jv4w{W5D68$B92)IOfHug#-i_*|q9Pt}nX*H>gY z&VYA~|6krU=5iWJSx*qFMkQ9eN*Y-&;Q4?ojIq}Sjtd7lHCArp4A2^b<}BzBm;nrx zg?)^j&)|^9eqW&j&BM=H$SocH9UYqdiJJGWX(~6G-ipHKDIn?yzj%;N`W|MOj>f`z zzocWdbrA!pW;O}d&&-6cO!jQ6IdKa0eD#%Xzr zHb!BvG)Ubyvf-v2J11$d4mqHY76LKqEgg`c7$()AVKxrPB75=dGY}{6?pT6I;q2DW zSsCV+x5=4o12Z_&8@`L_M|{M?>+6BW3*Z3x^ko;IdKy^_c7s6F3xr^Hu>RvHo&VVx z`G5BJvCa8|3>w(6xD>Jl^WqqBeoIFHW;a$B@M-dDu*%4QPm=?3`muFiR3u0+p0&MSe-Fs*+h&TmvAsQ~S;f{l7;P{*6=e+Z2dPANbR( zoIkT&j3=-(&~R|0sW3x)rkFB`KrzJWXMge66<;!&Kh~A~hqZ)}Z!twG6Zxp|>pAe@ zJxSzzIGZKl_v9mA$@9Dg%+;0^_OBDpV~K9=Q-HF`+M;y9KcsLrDSu*RR;gEN=`{&Q zf)(`ayG6k7n7rR!BZ-gM)%dU;d_)%QZfxMRIDX}>#?LNs&MnHl`9Tslw@=9i84O=_ zLS%lAne`tcTlm{i08pjN{YUWz|MqJAv&#?v_TPt20wQmiIni<;a@P6e@mDBQ84xGc zR}()&ZTL@(XeMOI8S-P@{r3Zv|6{c7-|->;+u8W5xB36;FHvD2CCS9(B>{5d9%C!2 zVSVx$$Mv%`Y3Qsaom8Elg;poOfZT&`@QP! zH+nk|zH&1dT5i+TjUnaUp&oipL9Cnq`I?<4l% zPee=9?Vs3Gb_v%qEHTk{YtDXK{VKK@hwp?NOLp{!dbj_ui!lfwV|cw;Y8|{k$asF^ zUn14&|Ex%rtNx+CPQ&*TQ|8aH<6F3F ziadI{8dVDhexK-#gWtoNWXE8v$|FC5^#$QQ&Ep%@6^o)Zo`;I`7;kvl__q)9sJ$#kFDo(`oG@6{p~Tzj>z z5qWD19?I@hd5{;+HM@%KbO1($K+3~^R>iIdJp&scRB2=dbfaR!2!m{(b>4XkGY_Tn zekY!JO+!aw6-l4a6BuE?6w~JM*S+-UU36`y{Lzx_$WQtr<)UycHL|Wa)12yAi{WzZ z4BJ-Rrruzk!>7e~_Ck%V%aYSKyv#5IHZ~y8FcF2;{u-vO6a8bKC&_f<6((EW);F{1 zqvZ`jKV~;GW#de3tM^Os`ks)iVl!u<9M6o5f_S6jtDx413$n*Ws=ZnRblV2%CnTwv zbWds@Awo~VHP=aH(CLxV;|x`seyxBb#v$g@S5}&YOCAIP7^J>(h>Lw02GT zG9bC7)<--%IzxyeC~X}c$$#6uFBp>rhC*m-S_RbDda%g zoj_(pA)OuGziDXHXen0tBmgSV4Z^=lHW&n6!a`q*-@=gP+vu+e6L+FAyYXNdU>>q^0|#vW-O z$E`Lb-zdmM)pc}!?m1@r=&AMx9+QES@tZXulULk^mL{)2OP*Ny6^bUV(9?xohU?JW zWfsiRtfNG|6!rS9C(7rKWu1NXI?t~qM&L-Je*L?sK?%s7agcc*2QdU*+Ne_SwY)M$ z?V>x=PB1^dYt0Z{(X5}lHn{6LL{CRz6`0w2%dnm$2^O#&P2031H*<${o|MDO7K8Vf z1vi)+@Rc?JR=-)tFn3gM6_u4uNySZ#m)OQSZq2xaNo@LPARrt^Pgm+XD8HP08%a=K z%3ozdmnzgtK9ow!o2BeYbtb*D$ui^JHKv)au_s=~Bd%g(oiDF=bcSk(yvR_1CU~8m zm~JBrUTeSCxb;t4HqIEgoGf=o?mtrA^DHY`P|));BVNYg>2vwCYa|3Q5a3(cr3_ZF z4HH-6Fj!ew{z5uHw+QMSWhVGiQo;&a*O>97yx910U*Ppa{Tebi?M2tDc)E&h{bJZd-^7sxo#boNA9GMtfQv1uukbMi48$}_&6ZHMu1!8;9|!3nCm+y z62%J!Zxr=)YWd8R9R+$pdE1{25YHm9k=QJm=YsM$hv zfO*ZPdogo#R?~dRQ=#fAtKm zsrw2EOy>$PlxU%ksh$)<5TURjMU?$wLGt4Qx|Vz0hlj_WE5%V!M3G4Y(N%1%Sf!Vp zGw4v3XuHn-+)=HeT(7&fXm86hlH8$a!iBMddZ@8Ac45SoLZb}iKrYHJ&TSV@W|qrUTP~jA z)1Y0I;xX|!YCwCBmL=zT0xgp?6{0SxhF`@vLiLEnbJrx6guZn3+=AX7Lk|0>FQl`c zW=HmnRr%OjhN8(=m9KpnBzRW2DB)3W-v1Cxw+VW$l%a7olgAv~U8dYz4J` zz*7>wR6TW0b@^CHmQbj{E$khmV_!z~#kD-{X1fY)8cR0HaQAmSS4w_fbRF2!nM3;w zq)5%2SezQwJI{4xE#;l)AeFZF;T>Ylo?AzK+0JO-hBt7F(<d?T6{>!WD!>V4%U?VB;#Swfl+$NyRu?U zN#koztYt>^#m>QmDoej)G)EI9dM#$<2kVqq-bpXRZC^vOqKB6CzHzV~LZH_V2kVPz zBqb*MXU)#eTJ~D?8ns#IGzx6X+?#mbzUn>{ZvicbveW&Ns>_vHNHkPPAyeaM>l5D# z8a@8)zCxcTPChQ$DQCUn5g&@3zb9bxbnca}5RXrv8|=ChP9WRtILw~YHsOawRTWFJI>G&dyvDS4Z+Ugggu%j;fB@9}7EBkg#V{N}ykU zPCyN(*%Z>_gV(JA03<}C2ySVixb<)nO}sk!D^z2FaAHYP-@T815{&nGSnbwx8@|=I z?SfqQ2BinfZd8cK$PQW}n-i1H7t@~-k9?^0a`zHzSkbc0J5I#m=#eu9>?@7g#h~v7 z7C**D{MoA@Xp!_GSOs9jJO}!7g;JddM{siTR&AR$J&?5@s?o%pGp`;wv^ZT8fG_l{ z&F!ADw15rOgD>6Do_x`wa^vNrOielCBPqYnvtznGX^6+I30t28C4oK@;F&avqd7q_y1lMTC;WHJ{xs_&P+q=Qa`Ovwo zLPPWWi)6PAJALex7>|C|sDK#6bbq0v3Cw#1krq9w^h%lsfud|yyEk$|)zGY{_zI7_ z_MMIUuN~eex;FgIgS^3b6HC-S8j&H;Nk2~GjFr`6Z=FeF|FrqZg1J%s!51a`Z#573 zP0IRL%gC;&X5F@`9dS zea+wVR%Gz3zEt4C7F-8DkAo0^6{R|Y;E3OQ!F58h`hkb?=~hqWHBmj?g|&mNO-hPf z6<3@kyQwDj@fK^)n;AaL#X%RM6pjcoYR1`IzoDjsup{Z6(&IkL(PPJY4RJw}2iB@b zC)*Ll4PLBH`e=J58$xHKA#pm4waj$2(y5gUS=z2o9mxkP@=DSc^oH7NWfc5xJdYL` zJU+Ng0ii-kn>e_ji(TE0e^xHXIMAw=YNBxZnStENLD6mRX0#>m*dn0qxXF?EF{#(osp66H}bHcee!+C}y}OJ>3rMZjYJg zbuXBio@#a{uImstuz!(`^b`L$S2s>e08ax{)Ix~VXE=Em3{sBfy$LQgZH+0ua6-MT zC2On9>C>utTxSqDYxGE4&IX)e8=8-uSXe+iUuA4iUuz5_l_a_^n z88=7s)BRkhoJA2qLF-R(oVj$>t0zFU%#Mnu>r(O2g?14Hfiey1=LS34s)t@a{*((7 zuj1aX)~HJ||5#_TH~tE@Yyxnk*!>IMwybxo)ilqluTT^||L_$Z1UgbJm%lEl8Q!rs z-*bzcqU^bMy!ppZ#9e)cIFsNi7yu!=zCy*mb-J#ku<h!eR-I>j7rUup7mP`+%zt~_+)bKLcw>>-cf z7Xa;?tEUEM8!~T~v-=V2%LS>do7s|ryPuaA6%`hmoQR*fX3XuQ&(?4wP!|~LA&V{~ z-3G=FphB*)nu%gMn)U;+qA-2((_Yt99LGy*znx8DaS{RdW))h6>&}dELYhz{ox!}p z;3c6#K~J&O4pG3PvJ7sjINXs`=g-MeU=}WRDm-D;@paSAt7q-6^F4mfAAmYffMakf zxa#E2nitY0jx_cEp|uN5>FxzeE;Z)!QT>71#IrX~Q<6ON<1eaT?I z>j~{x*nxGTevFOLaUAF^eQfx|2Ns%fCkyJh>^!$D zPkeFo5zE)CRK_!aVY9Qc6P*?jYT3BPIezW#y#XmLS%>>#4rmpTj3C{fuMkBOe!0Ns zY9}xlBAr%);hhn0xY0IQf5v-m=NrO!1R`*p13E*bnx)ODDI)=>%23PHYRcd$|5PV&_+S0l$?U1Fjuw+A)tmVJhFGwXVXfSM;C5*ka%<2;1 zItzqL2|jod*U7x=g$XTx6;afBI&#Z|xYvd{tuMF0BwaQO<7Zc`w*fYwJlC-x_o*I^ zsWv8*7nm)WObYdXRCeH2J5kxacG7KArRX-DW@HSjDvbvxdJK>rpvumkr4CmMz){9N z+d9xD#jfPF{d*p;E?B6Zv4k{Vfr`uQzq=cMCYjTO3F5Zxjc&x4b~DlrrF){heS7}D8JLd7MLHJ$uN4WBt& zHCnZKW}8SlN()YV2rhtrZ4P^6DMi#eMN<&x4aAF>m} zxY@->Nz$%QysHoLerIgnUMMM`nXFK#*urgXw=HKyOStCezbKI89o(D)Ez;Liwwkwbcom=h+ehfK@7U+7!m%rZ(-P={AL_p(H;k3y05WA3UF|yzWCS{jz1ivk&t71NhEQXs$4T zXv8bG0T?mJ!v()w-5g1N`7tz_;;&UXOl4)B$Z)Z=eazTp#XHNnvgyV912;veHG?a; zpiY`+GU%cIduQ zJ2pI7kczDuJ_e^;awSJgpTOQs9Esf&<#Q-Zmpo8i zF5KxM1GE?)S{V&_j+Yv6l}g)lM8swD=_Ai_Sb&=+u{QYCv$$X6FcjXap+jdA#WW(O zKOxhq=c7YIattmO)7Cp_d=S~8H+*p4Df?={tNLpYEjU@MK?iO~M&9ZGUyeV!DBozEPVi)XBJeQea*m9YuPX{RFDh+OzIWx# zT90#AGo|@+ddd_Kfus6p=N>DoE~{#Ld-v5Z3(H(rZK??rP}>`FaBl?!K@uPnX*CX!y=-|l{Hi*H;)U;yf&(>KR? z5MLHpJpB0cY20OqETyQ#BwN||3;5DICVUB9ZO3hAOtRp+ z`<5k{Z+hBhBlKA*@k$=2`wQvoH@033T?0zpu{dczmC9y(%q@*)~d4 z|CA5oZyy*J8RLG6VpJ+m6X#nRsGIma#Dq_-?>9WYg(wS!07WEUacOx{Ac_4 z>TgOTZw0=pgqo3kTG``i3+iM2t5YhA(FlgHP^uE=ie9JY9XiLOJWX46M#}q>iydz@ zBj2H^yZVd|wGfpXgXP+m#b6mxCy?L9b`1FdwwO0b12<0fiIoLob@`zhl0q4_k zv;($$G*o4;g^*Lny4jstoEi6aU>&1EKkq$${4>(>^+!_7IZhC>5(y`A1;_d~F%xj& zt{3~-lQh!0%}=+!s=e9Ke__pb)4|j@75T>y_A3b0*dH%^g~SQt9u~}8eW|mwFJ!-; z!a==a*zrg9N3=8Zxw5>I)v!fqbCcW)hcy#dYr^sUphdZGWq@wRyy=16#9E0D z)LU+&N#2B3F%H=X)oJhqlsn<+vy))BbuO009k?-rj9QKLgN2!Qb^D`9_*F_5ov!B{ zxcOw_qo;dShk*WoCP-AKT>b)X{CU@&@fKDmsYrC=EBEUdQW}Vyu0`__$+wF}a~iUD zCq_MXR@k>r@oA6=;>%mM1>}Uqm9YzA4lK)NB+;9#7VAz6 zeMns(4aZ=8GxYOaY^A7^nK?Z&8$YV<@c1l!qHl+S>_vn=S`b%>&zGG}FGXHJP1%+C4mX)Bewse2zW zitj~M%;(m4b|+9&E_*9p*r?9)SjcoDJ<4Gyp7Usjx@32hwf@Z703E<7RY*f^r`3;V zlHKL^yo{JpS$<*ODBDfMGq9$SCZI*8cptwg_#Drj&V?b}C9a%S;lRDIm1~}wI%#83 zn`iB8{65uB$=G1D~90Hz*VNza%h*Q;zT5 z)utTD`$Z#7BL1o5`9~&$w*#&rrUQ*(p* zwKg?3?JYN#r=4*^pjq6YIkYY${VUXUct4;>3Qb2n{*^mLz4;2kiYkm-Xi$+^V3%hl zse@kozdPLkTgbpWf#I5dPMUC-(oMs6J~MWA_1QJ-&m?kWWY`0|@hdPNrSYQp@x!h7 zY4f|#Mc;|V^?OH?XVrenWpV~=1O41jVx3@K_PD$J5$gDP0hdEW-ihRHmCL6&y-uZb z9@R7YR8_p<43}mtgsrAJQUH^yYc-A^Pz6PnDV?Sre0+`ffmx2T@ZnvZr3TldTuTJX zPq?RVTs9#>3DBFNhSl1!V@+VZ*FbCtZf%=-s+P#QBd1oJh|$d49X@n;dGo*qljB+I zkr|u;7@cw+zghaqVrrF(T>&bjwyEZ5p<=^h_cXKA2`v5jIU$jW*sE)~^Op;Y_SJ(i z*|2K6@H7NVm!aKWhM{KLwoR$6%5z^k^ro@zu~eO?{VDE2t(@rdlRTd%wD+h6>!Y<8 zE8(HEXPqHLlJJChx@+=oDao=IV#47Q-lH46nY$W~T3PN$m)$ySA0@GDbgQ0?q(%F&zspocbXG`~oRH;{ercO_uVCPn@+^L_w&v;D< z)k_~R%eC2w5FFEbTr1y^n=VVOde1mP+wT0hb7yH=fq3MlhurM<+YpM0hWsoh5~#iPR?M`( zauw|6mR>8GO4Wp$E5Gyl)LD9zWs?9~gXU-ZIb%6r_lDyuS1j1U3ceNcMKQcay|r{L z8f2ROI(<)Pj*1_Zv&yT!pK%}2QMNb3nNWbL=w%A-ZJC-*!HYRLIy}ko{AhDj=hk)AyEd(2_`xr!v!L92nbyl{vPD17ZHKAw8crVaLlY|@YTAJMzVdM6K zyYIdGw$R)P6?9S_o|!FrD{$oV`E5-y@|*#>56SY3_%u#@*UN1DsG2t$36mGgxRpHt zP?Yw3NnfG#zGkE_+3rd|;0pwAIyMTlxJ4%lZDdSolbOzsMyv{~ygP+vH?ZH$MDOGLL_BOP0Z_$-WgscO)Ar7(eqfSnxC^Al8_*aJP&w!u5 z9prp7^7)6cH2|aM1zYbb{o-xGp6Psb!YwQ5RPb4O_TW%9)vwTQ<_My) zT$Hg64yFay?DexJ4~KfpxOU3C-TY*2plRLQDa;0i8Tn$-bX2QdcQuQryv_H%-}%>*g%%vd`rNF|(#~>4JN+hC8yB1twYVP!7|^ECT?_P3YW)Nc)qZ=Y zo4S)MjW5N4BPm>IMQ~G5+0NyS`!zogZm<#0;EkF*1R=U-%n$Ewp6*Sxw`zBPq@;Am zdD7#F!;w3o>Y|RmCzl0i0Z#8Py>xsDzNebCoR?zJqitAxoxww;zbkmR_Or<=vzxnl zJw=Xvg)Y5)ktTUS7rw_o<0GTAST?a*OT5 z^}wgv&78&z!CuO`-~qrrZBc3ItntkB0=aZY#@L}Z)&6D8n-8wg_Ka;fJBDr-gXXsf z=q;zFG4A%(;pywaxK!5G18lP(cUTQl2T(SSzq??D@9IOcu8pa&)nQerdtw)yaXogz z#uIG57aoofcyqJcrd3wx4qolea`us3Ub{E2Vr8g*md6DniZMF^JfFK~U|L>rWo~yu zEo;qF*qk&Wek8fYn<+$5W7%Y^-<%k0x^trVpR2}P~^0L~*b={zjO#ZDiLs==cOPs3_#Tt3wmTY&&0 z$FJAs@|f=|ZkI`#V`bd(ojbDzE@&Q9vU4FJ#?5zFJbV9Wqxa)|jpC)+uWb7%{ije8 zEn3%4Ip}P;YO;n3@XS#@p76Q{ex5a2q4^71tQJ7KzSs4E$*JdUZnBAfY~v5?ZwqhG z<`#Vg>Ilb~$%NCAJ4kYq1PV%kahhgVV}q~RYhCH(|M*Rfv4q^4@b~@3>^J$mq$T)} zXZWn?Va(71&nSX`8%qrqq?|7WKCY-mR$y%Yz-a@mJL88Oj>?=N>zP;SFNe6crK2pF zX)FP_fs71MDZof#9XeUEV~2Z!ZGjp8#CAPnhuE4>HD}qLfDAXzv2lPCR;CHFxId-4 zNNE$`n^bYi)D=CHYfq`_7-EM~hgZJj+nwuWcbDFXKa6`jy;q-y`iaFoN`9wNUxXGc z*J4=FENTG+-&rX)`zz#;ubicny)MvEd0Y z5WgVx71G+ifF*3%ZNIH?Ak77uc>pm0Rxjv2EWevZtW^oN6`($fDc7Z`6^khxAzZ0C zddK8#*146YvRxCw8$k_ZL?x(9F3XRna$Y`2jSKr&L%(fey4P@WZRn=Rw0+wLZx5@n zk;KsB81g$odTA;1;Q*~8L+MM|>}IFaE!&N~)E`>E8uFhz)ib%>O+*%3vtlJLx<`e+ zBViymTCFJpCj_@p0E;kgL+kYWR{NJNr`KvKcN~?od=o96*r)he7K%FCAD~k=z~b&5 zz)OgD6JpYeag8=7(D#HGWh z{q>z3k{i$4zX%VJjY#qm*frIC`-%b^P7+_KtD|`jrdLyZ>+K?K*TVz~uiW)%FhJGe zP!MwMqiMw8^%U3RAu9R02bz(s#FY&BuMqcCfQ~uIvzQsi5>S?!HC;G-eP|Bt6iE59 z)xp=Dm|7ZoHVVw~RpT1c*f8W|*2*J`JH7UZq@Udf6oloq- z$sWD)yk8;3xK~|XSBHa)TG<3}?~^mTc;!u)aX5AHirf2+e(*c3?YgF`u1)jmeGC7W z0CO1of%S$U4se8yb`hhlS)=plD>%Roff3NS?3TOwc<5_c6*^koBud*umK37B^3*93 z;{7zL2RBvSBbOVth8a`7#rd$%)ki$pqvgWU({Q**x5THl83t|VTk2gPyY754KK3wW zss`PIs@LN#qHdzy+FEoGA4*A;OWbznVBgs@_H*npd-otU9bZYBAX|SmK=&P-_cy`c z|JwiLGBOaY2UTrv82D00igr`DZ%JCMXZU#yJu&P0RHGZGTqg|8JeXu}9yZOn@GTO9 zeDCzpz6?#+o@8;kU#ys#R6WJp<23JH5}3ET;SG@(*Jx#=iBT1}kj{7KPYiyq45)Yr z8IXee1N02w6yVf5;S&@U;U*dn85yHvOiioN*w|{iE>K!1qwC|%wTFx&<>7sXdv5I2 zm*@tT(8-mhk}U2SgD&i>iIsAqKF5#GWhJV+t<--zD-3y$twL{CKzzy#C9J^mP=l+4 zY}sKia<99v;WK1IahPmr+DqA(nu3_V?g;r9zg29NtPXU3F$0h)RHea(Fw`6PDv%)v zD*78w5W&~E0a|Jax6h2O`KeE(QQlxGnI+InAPZ5SM3d7B{U0vKSQJ0~LU;Ruz5iZg z;&pH8i@H6k?ajz&zgYSaU=xDrrPShygTST`0TP3&F=1U2Gnkn~09k8kI=nm8EQ*X#6X%E?qV zPRv+oV?_L(s`1P_AtDf>94PIadWIeYNbo7o~%tb@@>VM zm537o$QQUKG#7@v9VWbf2s6g*E-465idA!@4HPJ)o9l>u{bm|I3 zAvkz;JF-M?z#qVy_W|!mp0UpA`Fs4JFddU;j|a(rr|FPCi=eXS8iek4#1wWhAK=Ma zqgi+d{BaQBeTCXkir@vN!UGNTCNNS`0#Plxr|3rkFakx>rWDuU;XQ<64A~Kkuk;Y? zSq%#sbo{*G+kU&7!x&&a(b`^xdP8R$A+WH2(5n1!+8e;6U*P!v+Pn66DAT@wOEu0@ zvSP$UNu?;q97jp0G+Ns#%5-wdB56a$+@j%8G+|R@O)5*PvdLj(nH+LxQbHz%9H!(n z&5XminSU)S&c9j@Q^`~986`BUVFGED17nLwuh z)yDD+|I2$yUlgeJG$yW{c2W25L#?N+(7Ogk$`}hQNl$PXQ|bkCLa{sB8_sED$=pfG zI+N}HuF!L6<0bE>Ull6;I5vNe?||c}!*$WN^&hL+epRnZv_bwsEBGim=`;L@H6V4+ z?wRxy-_7l_*=CrqrY{)Trc?g68~zKY*jkZWL#dWFKaW+6mzRKkM1^JRC?={nAr#w(Zk7A z=KMF%A{kZ;(B^;esn!4gb=@Dj!I2)LiRI|CkRFOl6IX%cKLCQqw-K_vOCnuUw!$}gkvOiQ@{GpHSS3%{kR5kH>D1_qRYIMf~j>A2K zns>~sWn{=YZA(jIu7b{L>?!oJh9aqvlG2S{p7vp~t1MXi7A40P$2pE)ll{CG%F^{j zoIsDL%B`=`k%b_^82H0&PhD!U%lP#A<(gOFQ$cB_-eIHl5H}$7kBBwXvTn88bk4+M!4#e8R@k zLM4CwP3`Xz7j02egb4p&TN$pmdx``_zU>^40(D6jR&vbhMw;=Z*eg(9>g140bH-nerU?1~g4t zEc~P=w@GYJ66yb(TmmacG!mtdjKT?gaXZb=#&cJzd(~9w%$-^{-Ql7~dZi~R8(Av` z4pD&)#9fJ5O3dKx| zkA&1kxj>`@zg=U4r%$F>ghe{-OTXZ(yU_WXeA~zV@8``C|7QhBditMP(f{6@@Q;Wj z|K2rzTXj?w^EhV;h<4&7g}figA$PYvrTpNKS3Py?vC+e7jqv63@PHSp@u^SXqcinT zbod@asDcMFP9iR9Gvdj@D}}dnzHWJ2k>-DruCZ@@L&ku!dw}!t#9a*a#}`5wcc4gj zp$&)cGYe(ozzA~rb?~$iAcaQuj5f_eTi{x%P!)8^#=JqbHbv{WDh4%F0uEVs4^)V2hS`KuLLZQ!g^4B&2drVE5uKFCiH~Pz$tiB z0B~qdf(9KaN~aCtkyOw%q+`W90gqK{N?;5(Q+c4tzaR}KOb6mMlE;(m-hZs^NwW-@ zZhR^N3w8?$T*Gs=T0^HrNk32mzBoH{+p|U?N&A7}rNujz>&Iz2S+MP}#S?#4O#ElW z*?-Uf8D7s`AkY=+igGw6R-A;3$5M9mO=MZ&?s=&}%HJ85OH(HUW|~p=JUktJ0~9kY z#(I;E?99wuJvVlBd={$1G68E0QD^1T;=OP$io;E>uFlT*s;b^7|d?i32JibFH$>}pdL+NxEY_d;WQ_lMTzqSM z=n-_f8#+!?uQW!my@oN~01GTPJlx|L*RSsz84zmBx!6bA%`};N5TT7ee>=cc1H}NC zyK5F=*wcLxqC*?Hax+l zDy_p`q2p=jZx47y9qyM6+HG)hfNZv{{OW*SOSJ8oYYH@#@bf#l@o~k$ssX!(atBM? zhL^fvf(|J-9ca*e`oh{3MaO+`7=|D29o7x;t;GbNCz|Jk=Wh#(RP?D+-16f4Q}^Qh z+PAJeWwkd1=u=9KbLw!+8@;H9)MfjL)<|srF>ZirvqOlEr+<^t{NymhC+HmLH~?LL zaQqx_`j>(D=vvbnZnZRNKM*6DpF(5&H)}6wvZDmbje3{c(hNpwVCV~NwQ?SIiK2- zp^hOV}(m-NHeM#x3JPEdX9k9&wEFu!k49cm zFsw9=o5oi_VJ1?qVJv(Mcedxg$6yimV2vGILBDE#K67Ld^U=x1 zz+98YHx06cD_Xx`AjF>U#(PTU>5Jt;B3aMmn@k>TD-XN#s-x)nmG0{S7RR?|#dk*I zJO@9~G*iGX3rAP=0BO+B-dRX1{PZ)==fN1WtjBC~M{P%?vlJg!SPmNFAcyfCR^q?m z$S_xJ&beT@wba5e(IQw5BxyiN1_N@r1l&>1%yKdC2oI0Ee{*G0W6#89AwVog*9-kX z5*N2plu8?nMcij0DGJgIGB^cifgb!E#Vrs^V|gHbQ%mIo$8sIrM-VQ=u|V>+QEwDL zX|`gkX@~+`2Qo{^gGhGdFJU7n2Z0LdvFr9!d#-*puTf*6qvxpwPOle*0rn&FbKmIx zcbC_{Eqy;#GNYA{T!D(X3C36-31x8-u;`mFzGXJ_p9@I7P4JA{+qPCQd1u~+Yhd)p z2^^P=ds!n+SlNTP4#UD^JFOh98$S>+6<9mocHo|`#$Px15!s=)p)ZS9IQm2*h0QdZeuia8zR~DI8xlmb!`5zy~|2 zNvWp3r166h-F}1^!EJr0>~Gn%h#ss-KQ>hgIqI-O3jNb9G zx3c1!pp)HREdlZk_Jt7_x05x))+m&Hy<&Nc6$YBF7i;DU)ZphU0iak;6Aw5`tAV&! zCwwnnr0h)NX1C2k(?B8k0#_WHgLrOkC2q`SYDAek-H)q&syr&*zj(P5BUHJG>}uq! zw=4r{zJ^|ez zCE^BCKZ ziaL4-#JrSX;p%U3VyA10Xf#Obt#L>3@&TP;2}L+^A#>Q$rOUlNRWouoY~Yt^Y1W>3 z>%F}I%rynHI&DLEfc{J8I{==ZDNbdiN8Y=vZSs6$v3y5dMP6>Y^-1>Fa)MVby0TRMcPv0%9)qVI|pilvO@#jL@=$NO)9S%opzqOpBR#u z0gVB|_ix`%iPlFLbr+Zkzu+a&D3uyS+f--9dYv@2AkV#(Kg*?PJ8I~rUwq@djFJOI z0_$cJ*%;S$YGwB|9qa1ypSg3p#61LcbX+@G&hp)tYTnN3bCWl0!S(Tn9|7(|i%H`4 z#1~Oykg)CC+<3N2$>r-En{)Ts9rYc%)0gOo2|B#*rymzOuVeuZ;Pz9Po>hPPIAO~(KUr&@#sSy6OwI5YOi7)i` zV4vHuY^fu7Cz-c?G>d+*8~9rh;->H1Ox=6By>=!ga8sCQK}7uK)?h8Qk4z~2?huy zGz%q^fRq5CDjlQ<(v7BQ1?1%P7AGo@24}fhi`<{L5 zdvOVQ11r^&1 z^2+lUI7kPNH%(;NZXK;|3Mv`ptfWs66^4@%l#oWe-@Hn!2;bWIz?Loi#I3lOA9NCQ=|>cIzEOO`I_psP^wx7o4LL)&Rg?&=?-RO zTW8EQ6F^KHQbR}}>7FIgi=5*j#!w7YFeDX8sp6Iz_t{r(Hl_K`+Bhnhm*<0Ru{L8c zudSIdN`6_6-jm#tT9VFim4NbHrb9lC9%H*<^UB>px@k>hGdK0Zxtq|(Il1!cIWDlX z2V*1+M0$%kHY^pyuZjg`B7=1gYWzIz{gKT;j* zJ~}JRydd-jbYF;|<~$xxaL?c*MEnw`-Zxb;WZ_+m?|Fq;Z0UHJ+O?UGUY1&$+SGLx z_$%~1JENE606$jn%Ru|v4G*&_;e1CYe9?RKq>Na}QHL**S`!d0m;P^_$rbn4hU-d4 z2S!)4)jbW7K09n5T9Sv8s>cEJmMPzYGm9Q6tCV%W=FU2rrGP5_i+)7dg16NQ+~Z>RJTZqa!;uPO;ARGbrU_t3c4;Lrl3cad zjTxcm5w+bqd=~Yg-8!e_2E|+{4$Brn8nIpSxz@Op=I2J3EbHpewmFZ5%q~H2A6}#0 zVB4iz+}B(-($fv@iyv7(7f@k01@ws@^m&OUZp~zJOYJW@8_7NA*6){{hn(%1yMw@1 zRBg<7nj02-T_q(ZvakZ;Ki229Sb}T9!Hu^LztWv?ra-9??hH)a{k};Em041UB5!;E zXs^{5iZrjCM1YX#d9(U=@=9hf6ShgTxt8h?uTlHjlq`)ASFRC8`$rzJksz~IwoKjI zc&h@Es>Q&7sTSFb5+Y23X7u;YVNL73wm^cdJ8bQT=I#8t?@8RP@Fct-&yzOqqO0=y z3%4&T1_A32TC})QaGC=5y=^};do9fa)V@RFxD%q?t%abI#51ln3GCcOwYm}|OfMNF z&Lq$`Kzgau;%fRFYmt-N=w5*UzB{ooLCm4?1LsZA3w&a+5O9!KPqi>%+#=JT$R34* zDmjjY0H~0S#n0Yz4K_XNdfqEnuE=$9&zOS|Jq^93hO@|X`OMW**H_k+?Ax$UBOjCbK07iytL}o}Eh0Z<;T&5(*ycNbo6<;P4wG+WQMB#MJ)9&IQZ3gY9w6 z1wP=Rc6BA7gE_)yrOF9|b%HG+5cOLFk%dy`T8mcE*CdsT83E#UsmWxYm*LayODja7 zLc6yDxiPfH6T(BRAUGycagIxc*^!| zi#TB-8!5_PRAe$K)*$-eUAIh<%S;E+zOe=Wozt=_eF+G$e#2$`EYKtiAKHDf38&SM z{DLGJx8m>#u$GB*B~%P4bTejAEtzcCaK5nOTw5fiTgHRPb zUGKTAuJU{aH91#wrQb)?s^3lgasf_|tm82x-DkzXa8dnSTa{wrv0NDMB zVvu%&u}#&QoFw__-4}OhP$?`UHpIu*p6Aw;v~-EV*1Ja%boqu&?kurSZnU>WtB|9k zWUWa2dClUmHssl%i5y_oV|m9Co${kb>BXE9@Z-doJbM8HvQN@}i-cb!eR@#kKn!n} zPdwG!gBf6U^8WuhLzVXl(q+5`WKQ#7hhu$>GPX}R9r^fgOl`346sZNAR%6U`L-0aY zaCJfDm<#&r>TD+h*VRBG>2EL=5(B;_z zODD`HCG0)d6C?mEeU3CC8;L)nHybL)3)eRq@cAFIn-(v*Utm(jEq4NErwed0>NC&4 zPt!5$or7n+SHxXG?K zQ6-#iJqyU{r!U&!4MprKBPzb6_miRkkQ!Ed41xg6j$bzz*mG1$YtwP@JBaI*kML|J zg%Mi?bFvAI_@sToElF7V1IGy>lk%~ol3jL%LKfmYJX*5 zk84hq&ijdSD>~7bWa&Rab--Dk4|)-?RH&4$D^NM>cn^?zZaMJrTo=8k3j20EU{Jib zG%BvrtK60_sdM}#iCJ!C7BTOW;s34&+_DVEz;W_BY|2R)E!^HzG0Q4kVx3AuEGjFso@LRUWVkOE4&W+R1&s1( zrGP*weYgErEJzVCeZu6XrsSvzO9hmoK6Kd!?T(Z(X>^vGs|as1ONqo~IMS6xGQIUx z72O6SM4jB2D_;vQ+SNMRO=cPcFKo3u;w;LDQ!3N%J^N$*?l8%duQRjCW8-9H%tDfh zMM~jHT$XPPwu9c2UKKoU`eyA4{=NTq8-q&u2$AR%g6*`#bDBagJOJP$-4=bLeM4Ra zDyrBp8))shk+6?=JyDxJ3WmVFsTfFqf-y-uolK9Q&5dcztsSzz(4J^1q;V;`i#lT@ zhf~jlQnpO_#PJJZ7c=X1kym>B+#g70jCwf=wnCR$RUQHY7qo3|_WGCI7{SG<<9dRn znORV)hBnB9*G0#c{GzRoA!iEk!nzMqal)8@zG^vJ&T~Ogeih|5^)9Q5faYS+3VF2= zC|FqEoP&I!8_aV7k)DB~K-Ftw3syZNJzZ-&wKcDAVs+81ot42wJ3Dfa& zSpG3`-(rKB?x#Sh8{ImnE~p?&a0Rmn$guu$cRS|AbXQ|HynD7SPB#cjx5VSdE~)En z&2=knncl`YMiyR4FW^6B%LJ?%O}s$yJ>nhy1h$mhC?1_CEL$5Spoj`fC~_WZf``*SvIG$GHkz|e2<_A2yBOb`(iXK`JZU7!s&1|uTWbCI7Ng~E%-dy<*rlbN9xQBFyFL2+WU5J|(+`D3>5itU71G_$ zz6BO9i$@_C^f*-BymI4#b)naKWH%dmi@VH{DBWp;%xDAW-o~9x(#5{-g%)Fcx^<)^ z*nNDc7Ab@Z#Cqh3T&F!ZR&sQLfz627;uSpXg>$*;3nDGk(+{?QpAX|ibRo(eFjjSl za@6>+pYREcs$jR7RI@@_*S$#!IYZbR8eIYKk)T=dH`;12cKe7$tVza8JsF8mdD3^lMck?&`%|$Rk*-)NrMAtINoS=n*||T#_+jS zj^9)4z*_!utd?pik#Pc>DVhBqcQ_})EZ^DBIWQY^v7FrH?4tcedP#{rcbQOUkW4}i zDhAt@&Rqf|utBzQHvHZ3OUGUr&D^+rr8bMhi+BNfbF$Zc+)`x1?*URrx?R!JYfV*m zyxmt(CmN`UjOvlcyZZtv?DUx(nI3+G7JPIn2g1w?)O=c54kZKf@uIf0xHTM+WO z;}ib!?9KD!LE_@`Qr&F<*v+T%d^tYS)89uE=1YaK3QiQ>QWpyQ$L5mORqNG|2Z|5H zOqTDCJbT3%bV4I7KHi9le}1)bxW~eYz2w0e$_0GBRzN33eVR^Q6pg8U_L?p1hryJ< zwdZ+uk}B~rMuX0+g|$msEZlwNJU%ASmZL(-VnQP*c0MpD%hN7u)9BksL0ZGI%#Vkv z$M;22kAu8zQ!d#@=ie;9bH<4xYZW0J9^MTA4$@{ZUNN;{2_3T9E(N2ss1v#`RbK^a zEmMJ~p_vB5`L3V_5U9p?hYi&@dfkNWR>6T_(eI1qA4h-ic;DB3Tw~3reJm?`tdL@^ zJyg=2!RKNI8Jy~JWM?<^TI2O(JG2m!Xey54Q45q@{an}OtUrY9NniOtHawXTh8UOl;_~8J^;UwIF&qRkvWj56;4O5gUXM0^?~q!s8-7;UVG=)1_Mh$Y8w|YrV$`_O z9$PqgDCiu$W7Q$wX31aq23(^8$s4sT57aGpxGBco#<#u|-O2n!#RXE{sg*!N?}UCU zcfoR6pu2;bq(B=NW`%ELg0;*RL4cgK7a_E^wOIDAiSgUx{b_5*cG%Kt)~~Akdl}gS zk@Z88nvd%Sn=R1p@_F?Q&78g%SATUVc=oh;11~}Rdwjy&s#t|*#rZ1EHX3iuluOzs zPN-k}k@UTSaBpWy*=F)F9B6G?6Lvrkqif0EqC+hN@~;BhIoXX15P*fg?5^uuM}zX* zyqOgnNiiSVKfD!Uvu`(R!4KaW z=*g2?_UkG&(?vl)*SMQg@%I{cv;ACSj{ZMY;~#OX_ydlAt8wdha#a6@?yr?|f8r48 z`7_G?h{qo&+vUJtDEk{ZyN&;2jlc2dSEBzyf1%+2SV--6jDBVC%3Jx6Pcu7ge<1lE zO6_v)x2Ar@=pT{)iI9Il@E_XxyO4et=3gZAGwc6bB>zFqej|a|c~- z*z9&qKCCBV-aR=cVT#ZVkS5y>7S6H86tBFZ0dgXYIW^L*Zv1<_LR3jQ+2R9Xdfi{% z`6rXK+w5A5dmlT2bpW~?Bp<=>F&%&sAv`y7z0IuaN>LrC%*L-WWr%Xo%+dbN9fxL+ z{F00?l)}l`uQXlb73sIM=gsY}_qx%bmCtCBg(KYW(_;nAW9(D~xOW||e3YZ9lQtzc zJXN#Wy;7y;p0ij7ojGZRg4MYc(uZ`pE?UJnlvfmp;|XZeAX4Gn{?qdnL6e;|$J~M& z?^k903>|Hb+4j_!>Hi^yJW;Ljy=;e#=rxtr`!DhK)`^idYW}PDx*8v(op;#84tk^d zx{W>yzxw?0jnwy0ncGKH2Jdb(hOZmw@30}}Mz=q|T2@@X^|6fg_NM3Sg8eqh2!mg^ zSTGK>+c_T>3^%rEipgoLXzx( z&9b4mVu;IrHlc2Lg9V&@rT~TeA`ZG7^d9-C7>89Q_Br#xnafZU`|&Fk0T6}#?N1*C@Wpo(#T>0+8r1xe_Ew9w(aka=60 z(7m=Fd^>DU_r3X_E{T7s0oZ`vh`cJ8Pl<1d6c_}hc00pOS}D{e1%(3hqr&(h#+=dZ z1~{5f0k~L@=sI1_m`D;Dn$f$h%gf?vVS>j4tj3no z1*eZLOWH5%>jw&^ZKxc6y+^BpJp5pJ;RCOIp`Dc5&(Pkb(H*v=m>(tEXn`jMe^ooo-RCk~85T9m!8kgK6hma@w~L(B0WXjSzV|(dDd^1f5U!&i240HZLo{W8~(D zm=E>K;K&*ekeam|y`u1dv>nOLnWd;Oe|+(b8qzHxuCuN4qYQ`d85Lkm)$nO?ESIpe z${D33Mbx({US_|?+WDc$AY>yKfwnSP<7MS+>;0u4Ab}L(_g)xvKU=E>cPp|=nvLi? zn31QfI}<43j?%~x_mALBAEJiQl{eR?N>`yGB)Q8{_abAgl4w~VI`&@J2dC9sRcNmzcn68A=UR5e^?5jfe$nP$b zP>l5+4SXLt=IhJn(T8_Ri;R_Iwyt>=b`fDHouF};y_Xqo#+lscPogn2O zh1IEgb2v0<*WV=o3jsFTg$*Xk4YWG-lf#n9tGbLD5qjlRo{Ld4Nip|ce6gL0yVaB9 z_7>v{&3SxnctW!r!dowPlt>l9cV5RkqCt#j&SS7D63hq0UG&6%ixzKaLhGRsm+r@9 zg+3Z;O?g(w?1g(RW~3*joF#-4!kH|^y;iD&I=Q#=>;j<9&M^Gvz-|{To&FiEKpa{t z4`3(3KzUhT_dQilb0CbWtah7Mbvs)t3UwQa+KNw%Lzbk`EAD(_Fj3g*^GV;5(f+KQ z2(quYRpThEA4(|o|27bTqaf$T1I+QrwX3`CdolSF9w{r?%d?0($&(k{zY~d=m22Sy zOe*#6NUCSrCV}KzNrn=+@s<6;G4GF~@#o@gZ# zos5*-g&cVj1~un%3+q{4d{L$9OQWhE$it3=%*eu1WL>~#0@!WFc3n*bK;DUaYgwhi z?sPR@gDOKgF#anP3_-kJRW^MJm0g@|JwAkGWItAV-6fTH0!1k>OS5IbTfpP~^<-P@ zR3&-NAl_L;t1{A;*2g9(odEKh#X?k2y+@78KtjHz zqW;SM#?q@!8OR{77!v=i7NRz`vxc{-#g+xqsj;Rn`#>y`avTI*Z=^zDH5I$Z>ShYCT~RH9-lSUD#&wRc@I4XjZRxXo#7IJadp61`W@dQQ zu>=7pfsO1iD1bq#Yx@ciUxv7h^&5D**fBm?LtyuhVQ|VRlteKORGi`a7 z*J^H&Jfex!e8aZaE9x`?{HjcH3cn~J2Ms6p`JO;GGHj*4->eIqb1ih6v2Gd9o8SR* zDOQ!_S*MWk$*nLoOTNzt4JZGMitArJoz`IZ6V z776!2&ClbiB=IX7U$ZKMvVjus3vhDy+=;3)siKA2vlCR*u1QFhb&{X+D*%mxjQp1w zdD<1m-6Fx8SYT>zyKNz8mW&XMY&xibZl_Y1p!OW0fc88qYM(yrrYX#aS_4x6ITipLg*%0YXf&4CbR>GG}L#TjaXn^+ml7o>J^4?k{mzB~BA z@f=BAmJ_ioE_@=P1JKN27}J~4hYlY%v#Yy4_pr*vgkCYoTNVDr~v{hSDwaiPR z8K?rgSVVvqY1ikIzbGZv+Bv%m*39Rfa*}g#yy1disTwMH=wuZkUxkQAXXo3H#f6uL ztj$KTjD<3I1!V;bnT0qM?Z%Zkl~rcEID*Mn)|~u?pQ!)jJK@TX=(5#Huo*OWm~n7S z;KW%tN+1|6_Y(<}hGRyCelP+-o_;^j?$a^qJu64ek=Lan>T|uHTJ6z1alF0j0>ck@ z;1-zZu*$Vea~To6d|i7WwgRzgYa90V?(?sFhq|t@a1f_<&BCyrQ5~1*sIgFDkJ_icw=;)$1^eZ z934Y|lS~;JwRFGn9?#)8Puf%ZavVpr8xYe9r__lncgq(7g)z}uC_E<_<(hf$;JLOD zDTf?HZT~F-Sk@E;O^Iy#WzGmxCvG)YnH$*`S(q96#%%AayVcmln8O?vgV(YPS=O9= z&)>zpWg<;d_0A@CIW5)Ma>0s}6m+!L+xaKT8w)`I@4NXEI%>qP-=Dr6|5}!e#R znTz?gcnPbR#G(RG(LlyAlX8ImG0z2jh#a}rAgfC$ zkU_`S5mrn)SHPvIXfrK|10QaS>-dJ~Syg4o;@zN>=M|t)S|alfjuG)drZ_W1SXzEb z1E-)gKMq@>kP)-tggEh2bvM$$VDJqKbYyRCZtY_FYI@G7O2zSqL;)$^I6eMsd{@~I zS(k)INq~Vk^>pBZ1rb}oAr(jD4DOfoi%B`>;L}71M|Tb1kI#-SW580Buo)4Z35m?U zHw^!qn8VY3Z=Tax3DyE&#zM2KGE}<&d;W$sw=!^Ghwb*O*Q&cc{at5(USBaoXo%`z zyAb3TNpTauCLc<&#m`f|wP2;caIlxp>a=WIuv(H^J;yRSBH1M|@_DxlIO5=p92u;6 z7?-kTPMn^p%#{&L_+%q+Ah(;6OZLIDvqN-M9M72=XugGqZtc%@?|$@gMnYZXU~r1Q z7&X(nZ0a?(YfP6`oo>k){p>;cX(djj@4Mln3lqw^<4eA?j?>dN<2MHrJGv2LAd&=x zN7$kE`|xwDf5c~pa+|K)k_%Xcam-+aRrM{>Uh=YIdC1YU#S_7z=e>Z?7rF|P*b9NU z^d=0J?|9ZTR(*p+iZ!0>ujrCapmIq}?+Z4t7SQWuNGH|JaM=>oR3~(}FP*1^fH*A4oBUXczI6qro!bqJPoQ_{NNwsx6c(%%c&#N*DEuD% z`?D!(-rn^q{C#$M+y2{un_?U&+Q;Es9=dhp!8g+=-e zi9NO|X{num@hJ4zP+W5A1bMnzZc#Cn4f@)hyv@fQ2hR+2R}}()tfIuq7B6=Qcm089 zA4~h<;?~tPe|0GoOdUUI&!d;Bo?+AEOK7kn+N@w1XpxMw(E(Mlc;4`&0$38;f8W&n z70>U8Jt-~twv07SugM~wFZn4B9c5p{!|SeggG)@tj#kY+8S_;`LHO|aFPXCWGC}37 zu=0rF7$QyEZ8NZy6rdQ{&<_L9_!PfflQl+ZL7Z^%^rZA0*!}jPy1iPz=yvQgrOzHu zvY4F{P@O~-5hvhlm0jXgkLx`?5(6JWhD<94Vxef{KXx%RmHM0d^GC*(opV#*?HgIs+RB0|hgeZX@}T3!XxhMnoAva6sV`??Ne=#rOoM?7%GtF>0d)F%d{4X9&)Q>W{+0XKQc-PYt+8znQ* zUfKYiVWtFuW7Ui1x}9^Uvl{RCwwGAUD78Am%h6*#x6P?7x)65s1i_0YCb$l4LEVTt z_E9po=t^VWg=~m5`ylzpw2Kxvn%2bPjF4?-jK?G;^k>s6(#l|x26oA(SyWZCnd^0d z-`aoNQ|Ha$yj;(Uuc@wqpyo7@+qP^p!jQ@54%gz>sg=J8aP5cFjL}?!HpHjX#=H z$!a8rVImxtHm-aQ=-*-U)f~KXsS6$z=%wZB<@j>7AcBE_kJ(Ry&Gu4JS1uoW0{)c5 z?VxL=JCN6xC%n`s-cuUf6%bDeI8#?b57!D*sV&mgM5bnR+T|L@??zH5qVWnYKzf4< z>PF94ns#$A4^}YBUzhK*p~1^F5&8|=wh9^Jj29iN5bM~^a-~mRmZkEET$wm{P<{HP zW{!MwS(mN%4Ndb9+ZcbFXQ%x0+-Y%m3J~93xE45e2jhq!nwXEqUBufq<&q<$sAS}H zORc>FFSmhsS>6>N#7$9u|L|#P!`CmY>dmw-A>vgWqvc@I)>0NRF?h05_-Z-t7(z6y z6Pg?}oheG!{=y3-BVP2y$vI{{63;>jpB{+Ft@04d&-Y4HRM1vB!;+>yyHqsgZ6=m!?-f+=!qErRmBiq0+MDwCQ3aZW#Gu)tej}L z)VTIEiFA1C7Ui_T41u~>F5TJ0eAMDtKFOMOhwyGa(V9M)`=)%B92se-9_B7(ZqiLb z!UN8ia`FQml4@9p`w7CQWLz@%_+`sueEMhEIkP)Eb-*7`8Xsn4GLj78u#aX znxK{Zv&A!K;F^n>(wr7zHObz< z?nHkVud8Hu`kRuK;+!tYXEZU>T)J8DHj0WVVrT$DA&Xj!egfAceP$M)wxzu6<|Djqz&SK~7`$MWDn@@0*a+lDjr+p$$d zC-3~M03vj&{9@mYAH-wYb8SQ4loVJEl-%43(GdfT3c6C}iBxT0mj`h;%JXs9U|;w+oJWonS4?;B z)1EDa>bk<)p7=&XBJu<58q}hPZQma^c-A&4b46hUaX)|TIg4rzR70D7EaxzOUl4Zp z{2Scv>}672kwUD2VtkbByFJ>!nyh{IWN3|(Uk)!xN}qt;m|tILGlTXKbQ+txR)UhZ zTon~vrCuEW0=ajP-HR{a^o%@lv_NZug)Wxv1|ul>aK=nu7rY(F(^teDmh26ZUVWVp41t)YK37QhtV5mrKF}yz|3bK!g2@r7RB!l61Z4I$k;Ea4Y z^)kXdFSx(|mr}SIV@0_*ve}{bm?Olwuopk553%U-&%g&9`e5gK1$|6gF1picgOF z7@ImlL4eW$GtFmd^S0lnZKWm9WNcr6V2lsmW|Anb-HKA`CzMa^2BHPR2-PM^)1~CO zBE7Z8@A&+<(q=AG^E838T5;skxV{FEb`Pz}e_A!=>$*jFgpi7(d4}#XOp;p zhwZY{+fxO4!5HZof4_^3Fg-~U7CoY_pa2d?*FjK>heQbEnY@11sEGd}g331!5Uow( z@qN}I_HP#OC>JdEHND!08+FF*o2JRELA0BAc~nX`iw7X#iN#3^wA60o4kUT?W`FgQ zNx1tO)4>3q3r+HA1Y)CHX2O%oo5GU_>Bs`i)vx!hKTLUFnGKey7>}bKxy5|+P25&? z^ig;{4eV%9=b!FL=$5Wn#~#o8@{z71&LeCDr>Nyl4K)B?t`a<>e;tVIMzCD$Wi!6? zrF1Ar-4wBF1N3{3CKG{Cn5w-TlM(^aSnro+ATeSD{C&i+uobbaM!y~cTwgT`irAKtdk z_epgQNn>AZO$OZrglv!KS7OFexhbuPjH+0y%k%y2T`AlMmWwhu#H8{0hbrEbz01E$wZQkm98&@lJqe&F5S0QRLWUF>PQJo8{M zmYuz65N~{@l%lX!^7~xwuU(g8Us=VRyXaS((bpEskfxt|@X_r%H(%ZoTk}h3o)G~$ zn+=sW{XdTk4-)bUol(#86j5i#^E~zGdyxt>0iR&U%~djmG{KO ze4sI;2?M*&gs`7!9JTxKf*ka56)?rnLMP?;Yi>B-lhBe$PX~dNICmoi2RT*I=oIv; zkBC!$9Cix~2Bq+YzEx|&ILZgVr+<>#C~{7^c};{1VMI@KU$eMUm7 zF@Zn4rzjUzB#n*~r8vzK+I0PgCWzcIUGEL**x;)@Dw& z#7~@deIk;w7RxhrZ}Z)!#+;zBdVhY6%ZJ)}&bOy-UHgvPeD~$~R9o=t&Bow6BKKw7 zh95|$K0DbWcq|b$bkjBM!#B35ErbBiLYGj2REyw$s{IcW{?ilwcdJ8Z&$+)T?|Yv4 z%ZeU~FTji0S$OW|zLzal7vX_CatoC&+ccj|@VP{OUg7sefUjo-2FmF7=ry&=aOr|5 z*p+B)0Ps~KA5TkFWj^eF;zPIy2YoNimo+u%WimR|l_$qJMv8kpI;f!`o^V8^R}stk zAepecSZuKA97Ymkz#bUqzB&y@u>GS^|L?p`_Z`W;dGUKYNxr_c+5I>;^qngUO~iOS za6tRN*xmKod@Q&w#_ysFB0sqm5-?b@tyZFSvi;$$f;Z-zm0#1QBZ5ziX5OtH8L3I-P&@EyH|F!!Uy5x0r^x>g9Fs1;zWvU|{M-9y zuRDLd!T4(xobeqJ>9!jpk{qb0_YFGxK?3e6s`;Vl7cCw&ta~y@IYlPL*}dzsKDVIZ^(f%Tfda-pAPkyYfVcDmG>$Xmq2KOpcM zP(N`KBouFRq^nZ9YdVgC>H6A1(vf$0X6}ODk6a|EC8Gxdm{wSN{rsAbI5wnG!}!tl z>ffar^th~GGW6uNoZV36E)MZo&bkm)G5_Nl#Dl%!=Lsu=1}?#PLhCbzP}zBq}{o7tXJa~-Rc1M{sV@_3wht~9-;o-jCyP*R*_1>Djw z__-6@(UWW+-O6@D5edX0kY{bo|Of z|ChM+TwCU_8;@6$_i$;?-iCVt3)(^(fSB2Kz6ZI#0>Hll|K#rXy_Kk|vsH;Ix71<+ zjXZ8Vuxk((93J=UM3xiKk%jB+`X{snE|lqupbp|{>r_DcNG|QhOvg+oo7g%K@nw&E zGfk(|AqVza&|K5{L~v~9$$;dw3Zr(PfpK%CrZ>_M8zPNBSZ4<4K5xIm`JrLta&NK? zuB7(mriXt_0tPDM{8*vBz}<#G(($NnB4n@rDgFQT&3CbEjxU*-FG=kbCu7?ZnMFaWuAFgF?uL(b783$jWJ_C5U2TcTU?Tu=q9APbo*|#n{z;BoH^}) zcam3^wBs$c2Bh;h%9iusa4Ktz9kS#I=n|GrgY|)`iRZk#6=d1a|jL0l(t~ zfQiwzOm^PL8qe+PZKjxAgSD7p6}ct$OjP>Ctv??M?c0B5-XJ7*rXVan#MGuL^k?X3 z-_Nc8k7;AOsfA%Xp-s@U)(EX6F1fh5v*I0} z^^@w8FH8N`c686rQncTJv`TBAtIVKEzVhnQmMQ1%76)Rvv2Ce1cing|z6JhENc-AVee}D}l-P2d zMOq{Y>e@i7U;A*zVp7^BypoW|qMbkY^3S>ZU$nma=zYTF*O2NdQT{@UV=l_Amt3F} zbx*2g^14Hcz_Hvh1kl+X%k2x+5%s#`I$aJSLFORtkdUfV1cCO}(@x*6#oypdHZlSR&CYD@2i2xGvTdf^AJ{3%MuIE>2W zw=)RUytZ2gh}EB=ds27*w8(Ea_xvpPDlq4K^w!Gf9k%zmA$orl?y-wtnrcWf!{en!{d#b1)|Akov6p_iiDsIEA%O=E(f3T z_9Z2yQip;FQ-Al5Ut$y%yAaIJo#mBXA>%G?Ti>pO778jz&_%OWi(OIJJ~0Rn>OxZ|8U#qJlaz#%n>a=Mz|cGTRy)J4)@)yWi*Ngv`Tn$= zujR)rFYx#$V+e)j#3+)Ym)v1b)E4dT2A4LN51Y(b)vHKHEgR`i(6-=q?(EMy68NHh zyoug-D4OS1Gw=>!f)x`1mIX}AYC#Yg=FBPmjN55h_fEa-mL}JIP$krAuXGv? zl~@XtVip4MkidXMlyA;2EV(d~CJ@+1;DSV$dQer0HRpmkYq0=R;OmK#vp+4qssDy6 z)OLq$_schHKMnyO2}tHm7Cy*_pVGJOWog7RfTb=bTy1KW@TaXovLx8-F;Z`bJ!Jf0Lw&=|Bq-8ZV9>MTt zD2@wSEB#XK#)LA5YfuN9C)3_{-Lj{jj{XAhdV;=c4shO@KbycF1+jGQuZ`9;Gw5+{~ys(bUBa}vif7Z3dHS)>eIGfN=D7C zyrm2XZnTGQ(=#^Yw1=*5s*I9PlT~=ETJ8CuT~`RlQxB7S(06TS?x~S*iu7m)qF_V1 z5<7$p`+lo8P`G%l=H;swpdGfAy*j^mf4-1YwOPBFX1>Fg`xVzYwCxali@3wqb(o*M z;b~mz+P5=Hq4wK3H5uy}7M2D`52{&(5=#O zi*+EB0?j#kxhNzE5$lJ}8j>C5M1G6}h20c#Vtyv?j&{ofF0A|*3*SH_)ae?9^ zOMKvQ#azNvgQ%JquK@GF!8zc|5^l0%`=B`pxKZiYY;f$y#rSh+$gw^w)(G?gP?%qx zGw9!&9*q|`R#Ai{$CCRLtCS!R{*SNT?YHcCkQ`?!rNgP9!DoNE?`yMUpU-gII8j<+ zsQwD60}e@ZkXI@n_iYVmS575907@w89$U6DZ1wLLogZ^-(zL|GI#Y`^+?#Y_O7{t= zO>?1cR(S>VK_1JQYp+Dm(a}dAD~d;#kBDS^D9P5|SX5Xv9m_Q#|b<5jrVF@C^9yG{H{f8T1x8&tKGoY-7qRmzRXlN{@vYSeM#jDh}GTQVNAp- z;Jod+U&oN5X&1sSHB8$;9x%(Kq_mhnRzf(o@myiPdI4yW3@&&`6AR=qvxl5Z3Nz23(__eOUx*Ja3t?u|4Q` z_gX~hHT--(QEkYV8kOb!RlOKGLmcil0@CKIMGDpPs%(g@V@FRNY5p)TJQG!ckpF}P zp7A-3ixqfIQL|P$Bm+(0a|M&^REl3gFRi8$2MP^Tl7w;E;j8s5`_}n5ugIH4vM$Ba zPVwhOF1phi%=MXKg{K{beP+vRVCk%pz=f2SiRdDm6_+W}-lo0T)2T0tuHot+)Wl9& zbhXJ$2kZ{^4mI-48-}V^LNwiOA+c@7{zwysoR4)}J@Ew@Q~q9sheZ`3{6FlycUY5I zyFTj7sAEC>Pywkbp$MT2-Oy}6=txNdp(zO<34}2;>7z3!Ex`mrFG?pN!2|<_Iw~~~ zloB8m9U-9?=_2U-^6mZG-}vq8yY@NzT<84$IM@Cstaq)q@RqgKv!3UE?iX4Qe2)oQ@wi&tx{=apxYYANzyP%38aIxXA~+Bh|%&pk?+FK+)bD zTD@+jx5T&@LvPDnbzRTx@B;s+3Vn%#*3&hUU3*Js*$_z_WY%3@TTf6oB;fM{A=6BUP^?<= zYy%q`$jSZcD|mbFc4znJ0<#={7ox|(su7PT_#oQ^e`ox-GG4jcXpsdfI{qPa5Zhp~ zJAuEdOznMqMMOKd;sP6_Qr?E3*Nw{-ISrGlR$n^#ZM5;Uk49Z~8iCH3S}00@rMdlp z_iQ4q?DvD5o}8f`C5ybpmz7iaCHoScBDKI0cLGUabu-AK)C1=d3I!FW39~4&E8o^` z(X{p_($Kpe)CeG9g61F%^YzRxbnzMjCAXGbZa)k>MbS>HI2cq`xgLL~na2ZwUhg7PX0kCHh)<0UZ; zq4t3|#&#D^VwCP$d2sC1DJVMG1rS(I9eH}ZFf}mK4}WB0%iINJ2-f>Ms;+KtDH#=a z8Xo<=*MTh-|M|Yc_m{t&LGD=vtj23yxdi$1z{0`QQb=20`lzkRLiRpsc%UAmQ73m# z;3|1uCmUb*+V$D*Y0+}S)o=W@nU2PfDBh(?LM+4Goc8AUFZC3oKM$NfyVn3KyMvq? z>TzO1xf9U^Cmz1`0m-VXaK&PO^=j%lSUFO>PA)mGtvvZ%yy_TwY=q7s;O)j{$RL_S zm@qQuFn8f=zEmCe1TeqeI#Olw;dA>3_X>K{?A>o_K`4x+CR#|0XJb*e$$3Lh!RE%; zs8U$3PtEwUQVf3fKsNV>umF) zAcO>gSlz-k=+B|g^&UPY8zeQJK^H^2q2-8L4B^sf6Fo@pZqQ&CUbp%;yWqd~^W86p zt@{V-OO?QO(|6oE%3yC0I$ovS7)j-{DpJi1R3YSdYLu#8B&jc06$FZQ<^Fo}X-CyfR%et2$6CK!CA^gR z_Qgm1G;!~hTjph;V685Yz2bU1c{$QIXB^0KlU9J4Oi&@bN(w`D_rSYeQDw`P%eBW3 zsTaVFB9G5o=dJXT=7zn`2N5S5nw5jyr0a)B#ovr7 zJ3-s5eY9uxyc&vQY(Z5Fx33|SEfkW|OV^gRnFZbq*mL!Z59siDMM6UQhq4C}i)9T9 zFFv`+6nwxo(O|E0EUFVXpB{oNs?q(y`uB=F6=p*`qCAlEClsZbKhybl&s7tr0nPD> zq;1{Xcq{LNwht;|xuF}bnMb#A>a~>!_zrM4yE7qWq8t7RJWvOkETo1HUjb;GPL<$y z`JCrid~xIHG^g4KQv&={E<~UIezX9DOqiG7V9}RkblIqsZg>4i@FanSLG!lwDt=E-jqrEH{SMhwNC zI`wU+Hh0Y%_MEc!D>*}wUW%B6s!e5yX@~zDbIrBsjq9BVGU+Ig;Y2iJ22Wv+je6@HDZ!SP~o4_Yl%tPF~ z%upr%r1OPo&O4djE`Q|JqFfril~ZuWHz7UkBerc0XWSQ3G=cDf#DYeQ0CN1`33u1K z&XQ@NwylrL@I=4nx7yrnbc0_9H4u+uG?TaKUTxU=P*ii{a&O)z)4#s?`+x`kG}`Sw zDusU6Qyb!1q4^?fq2{aN4~^|BKfQhF6n8@rNEtxV&1gucQ35h&u4`=cDT0rskW2*> zMtF^n%KV*^07o{=w<)%=1`-u5DIcLNzr8YIK<|yxn5&Kg5S)VujyIE|ZgeNU`JjDy z21#EjMD>L!?+l#^gif2s`qKuKeXMcj%ML!|IJ1w7$&$8;WrYbj^x@I1z_k)WzvYZ3 zu!JtYlI&MppB0a6PGR$xZeEG`yASfu1CCtp6B=L3S@ccp3LdeJc~}mSe$?Fz@8Uze zJ~9DWBq<(jH;WZ+h8&kCFO9J5f>|2Nb10Jikf(o`V@z_&q1ddw-jVdkJ0 zp(z?uQ027A^u*-nz%y35cuwb?KQQIZ-&^AmpNDXLs4&ZFSn!S&y%{};5H}?C43hPm z4T+;9NThS7IA|exnIzpZj;XB7Tjc}#vWDHAq zhb9vEInAB{ODyqY_P?g*RTB@{9QhjOWzT7JZ*qJ^roLQ^8CIzp^4WM1#Y;tpBY>}i z=$c=I?ezHnr;=4wnnh@O#$vjy!BRmrb)^xsN3_29gWP;8U479bl8P z*0z*S6O{a2Ab4Tf7J0T2;)BzA+t75zT&^oQy&X_$*Wc$UByK)=uQtTsbqeVC3bOwF z!|sC?ShaRf`u!Mf5%+2DGSRFPfCL*URJDIxV(6>oMHJG zKpU+&o=pTqasgIcNA?g5TRxY!?PfTzp+}j5pfo%3ii$jy<45sK#hiYG!j?)K%xt zN|aN@Ecq1U=2*Wrs-;Gx(Q?WN0Kx$SU>V1|2ImIvdA`>7c|tt0f@G-2EUI>AwE8RG zPOe6PB=xeImy$#i`8Wz2A2M0Dily=YF*Sedl=mu5-T}vb7BcyKaJf?U&z|?gXNxE0 zu8jGy_LI{VrZufI+)Fz5Y)7sT9KU$n@_O=b=lcQQnH2vt{$s_(gsWGs7%FTQcHFA+ zy~B4SJRDfaZ+}>4487hXD>6(%MEgE$9OYw`=4&&U4MvHh9A|tN*uBNmZkdQHt#xWw z5%o1|U&}d`Um~9dbN&tdjU_^ceW%$;)m7Vt~Q1%!fB9oyv}hy*HowZ5sit z#G(=))!m+6y+PaBujR@0ezXO=x#>L)RWL%hQL(10t#!-45$*}jY_^Vx4R@g!1@2J2 zb_1O_J^{CrL~o=0eN1_ds@|J zRVnF&zJ&`gw|J-kMHwAYe$3PB3@Nd4t-v1pgbJnFKwTGkX;k#0^^7W5UemP|`-S9; z8JaXMD}-i4?>l@79%$&hVgcz!YGthm=!2a}?12Ze%XOT{)3v40<(@98MRzY3N;YY3 z>8d~1(~P{^&7S+*HTo4?p+?wX%CfhG!J^4+tY(tq&7~#%?^&U5-$n=?oyh8d##w(Y z;=CrVp4(nr7we}z?7b;Z4zV3YhNj{qa?SmLj(t%2JLH$Q9$=Sd&lA^7Z;%|bXKt+@ z#aIyQvqeL!Bg$(R8C^JBl>0tTCD$a=R;VOb)jC(|^u*zfu#N=}XQD@L@M z?G6iPCnWv#8EJ+*nZ08W5twYYA2#(4FGNHLIs`L)dNsD_g%4Pg4rytr+1uF|!ULM} z>UBJJ%)a*dwLWXUG-&jl&E=ezOYoyY!Y<`l~$+ zD~;rxFF^&8tG4ge{7o53eWzmQ+TxLpUvdG#-!r1d4Rzk-w7B-gB2E6TC9x4 z=emCz?5kTcH*gB;cr}h%jG(DeX|-x9`wR}=%;${|MUWL2H@S@&ApCN{UeC0hrBs5j zfa{OqvV?e0Eu~#}49Y6a2#Lhh}xzh!2_jl^^ z^7>>IJ=_}k9+z0_8tUv}{UubaVF*!?M^X$i@~ZOR6?O;R5xt`5o4!<+HbF>+v~`Pq zz{ki-KPN8!Y#7Em(LK{O?HO+AuHXn(k5pLot_O3Zx#Q8f_uaAv!|9g;T|O<|tFBX` zrkXXciaa+=xwp4sUt0qoV5+dx!U&`3)Mbn6G%uJ{m)e`51PVVnuRL{~FH7)m7 za<`wE5Rc&&FB|!`!QKT{_hY+sQSVp#2%%QRi@UGJUc8v`#nf4;@xtz|U4;4vOuj{R$3C|`yZEjXR*~@}9r|D*xJscv? z28mIvCT5lPO40Q5i&b0Z`zI!pD>W#D^pl_QUDW-UY*ryb0TT-?!+!}WT@JNl+SeMG zgBx_mqoGupU+&46cD6{J`{Wx8({%xw10&EZ1-!W4@+5ht21sxYCo{vBAiAbvcTym= z@P>(gwJ>dvap>qSXd3H^7tt^+r3n!EpLW%*sYP24tFCXz10gbu*-N8G;(w8nn^f7d zS-$>E`zwte^nHMlxb|Vr^Wdo3NOW(Xl_)WgBTU%khWa~{)L8^w{)`%}nn9y_ z@&4z=Pa;XBSbr*CrS8=$hWs^5Q)*yhURQ@TAIe;YmQ{~p?~B}_B8Y{(q7G$>?K*k8 zcHKc!iq!L};ndJ7KQtCtz^JXR`SIDLCzmCfGW8+!tAj-42Gpm+CZogO|Eb|vjbFY^ zN+$F2CEM|zc!fv3B^2+?Ajpi@Tu-3KFt)bvcWjQ}`;ve-8DtfYZSHRmF6#2=9?xxw zYx~3{3+XhAoTQKHQiu-?1HCG$YV4tyd=A7-0UHkd2n33!wIRljEA>t>?k#>n&9;2LqAw%`4M2zVhjp}s zn{&GnO=Xz}eX6ZTa}L%?_-|YxyYP*_8V01|eHkNuq}=k`$=g26Q}I62Dbh-Nofyzl z)&kj_A>Yy(rD`{RW^`_XrXKe?<5+W>mmFW71Aa_TjC=lcK@Y{fg?ushKDqfg-yKSn zDad^muZG0g*C{tZw@@4cncTE*_=jxOm7XJ5v0I%keRbl)$&`{%y{Ry{tr+)Ok|#js zU8D@1PM#M#SA!N^^kdm#?|=U>4YF{Ij-bPy>DYeme`(+0bNt17XXWI>`lkDqo&h=^$5p%$;;ixreU=T9Lg2QCS){ByxJLg{vh*pXJG!G%p^C%)uNNzsR5= zK7{1Gdo~Kz;w+m(EZ*#wgRWMGMwz;^e&b&5Ir3s$Qe^x3u(rRNGr)1)ldFzx2MlIW z)8eT640*i>AI#+LW!%@Bvv)WCsCZ>`>OFUFL_H&HLI3XBOL;&L&Gd3b?7T05JTtON z4$Ga~eb1oNyZu16>-SHNe-J!eh_M@e`sV>XmjRaQsk}myl0tNL6|kL4`OKY3uI`&f zizRh4SYjM7cA`IX1Tx&EaO}l!Kpx~gqEG|s7CXjZ$Wf7tByVZCui$|EZ2WAM@o80n7hmXu5ial=m4DB7yr2>sx!pFLNi6e=!%r@2Jo}nk770DS>{w=xz?I% z3A8OTFQoe1Ch<#;2qF^J;^$hCYe7LIO*A&r&jZecLT+sKTh|PfJk?>EI-JMYrdK&p z?Y0C7kL#=kb0Gw8&s7L6EqzpPQ30#eZ&6v0cPY;C&hnX%i$yCO>Pu))V36Oi-}^uU1WCUgKb7l`*_COUS8?xppln*`+O?rv-S@2 zGj}RBG7|ok+E*)rYN82o?rGTYij1Q*AqwvO!BE%M3f(W`SZYe$v*)u+)e?BEje=Up zJ1PP`1Oq|B(T-=j60NWPyE*XR`*p_5uOv0bpGrx_0V7r1D^Vzq)cJ1YS@kRd{nj zbl*sk;_uvI|1uQh>iSZ5%7Zg?irmBlzjOP>gfN*r@%D=KGzQx0Agy3P?iuEicxuew zk`_jE^2qck*McQ4K5va>6l1o3;E|#E$2tzb-Sf%gp7huJ#%*e}1{B)T`BEJ%hK$mi zgm=p{^>?%RNO}i(L}@Pej%UE*!cZ$=a74{EX_Xi){%jre#zIp8GHxNL0IkGz(Q&c&qs3v_Q-lI{ zo~jy(SM8uucvD`)Prt(_6IwQ*v&k0^pxz<6&AmZ+F&T9*ljn-`5 zpO**jdxAdO;&=F+{CLyAqq%vHkt3TD~Q=6#^p9d;Z-=7STnQ73c zNDoJThCN`ppDPHn-gk6rEGSaQc*m30^9`CnhD{U5oelOh6)^Y6md@fp zLmM|=erA(?C~+VwCkeCQ(bkRkDXwr+jI%k}3W&iZDU_WV5h{-i<=4qPfwdgbX<{lp z>+DMGe8+M&0*C#1z?EvEI^+-C4x}7vpjn9;K=n}z%MHUhf8^T)J1y+zMXXx1N+*zo z$N@DC!^R56wnkSGni(Fo!t1m9V7^X1qv3p=o6AKr%u=GNoz3B)5Fzc%ZK-sykY3Q0 z&qt8(lR{mQx)}rnq#Kt)Nu#l!e+WYL#-v&3#PJjf13iF=M%KCw@I8PZMJe0?vB_le z;iL{s$_tb0p9g&B8I2N8<<3ifL-k(tYG4V)P#>5o6hH~-Z${*wtE z(>=lMPcDio51zJdLC5d$Ay<~%-X6L%RT1+3#`N7ChQ7)Ko@t03&B{_ChU63I9;qn9 z*Iciizz(J;#DnjkvK#LgmTL~}sGL8){lXPbaBoEb{JLlacw*|(WFJqWgVMVE#@hav zU8UBU=?it)y9$Lz#lc!ax6IkZE!;9XSAect*Tnse`xz9f+!nyM%H?(mAXUSj3|vSK zgS(4B?1v-)G?!YAu5J2+a{{72n#AK!+j=jCqdf@Wp zZ%-4-EFS(K{{{T6Iyok|a=3(vP~;X{FJ>vzMsr8(8aPqC-O|!Rf~rdH_-aXJW-aU? zOw|p?X+9BjL!?*W1EE#s2-pt-+RrM4thk;g)hE>^SApWH%V9Y^QrRigh~^dP54dYT3}SC$0w(jgExl zv2ac*_I~-#l$4>`pKN@R`{v|}Dx=;&+YQu`WUw_rwazo|h5~W+;l;H%GLt(9f`Rjq zzi_i>VSfQGFZB$43)TC6>)Yw<)wk{&-~Wun{T9df?NR@`{O!UxbMssL<-Y@Q|2Ovb zzYoOyL72yR1W_(=k}B97M#!4uGPlTUj7AwgjusMlLw;pz2?cPa2)?fS3sr|NQ?|)prTn2Wnz<8mxGOXH`6? z@Z&YLqz8FCqf&$`kMNE|ky@dlio-R1%D>9TQ#EzqEsKtEx)bHiLpXKRJL$7*Wdls`#BmE`hw9G!)nBX_XhJw9-5RPw;BZ~J=Ivv0S)?fL)e zzK;PXW%m|^#Nr7zzh?L@T&f9;SgkqrRqV!R$NN#gd~?LNz-^lLX4SWtzJEgUesj!! z6#omS3gU&yPKoFj0(kolu4(A!AN{M)KzNVPUe_n?nojZ@+O77Qh5~VnxO{xU@9$a4FM?t~u%f9tV4 zRc>JA_PqHR>|&MNwPEbDflzGk+-dz@{GJbp-X)B&JAxph`Vh}OQSnHs(lY8(Jxb%< z%=`-(S*OPGdqoJICd2+#oI*-qc{~?T<89;)%>jqkk zznCZWVH?bX+(l}JRVf8S7{Lro^v7di=J^k6OS0T%Y%xydPgBl#Q`4LIojwX}5Nb%( zj4Nrox+m`53`*183Euaf2XwwYf2DYRi|W+;YmFb;tqBSD|LGYRkR{j6M-BB_RwEjU zoTc^nZeEF;SscRY6LRpEq!SbNqS~B z(p-(^hbUPh;&ei@yW9symolZ428prY8?pr7yi*T2(rP`|pix1gKXGJIiGHTl8_b0y zFK~-)P9z+C;*WCRne@K$2YXJpQQ$nhI@q5=o_iDIo-DwJfDF5up?rg^yM>=}N5Z=&ej_C{La? zb>MnCGCqwx*W{#RUBqSL<~0YHvXO2gYgP(F^Bj?W(>r3_Lm+ZDoElA%8@}TaHJphJ zdzN{tqB5r<)|HT(Nrk%^hlg#A!@Y#*I2NPWf`zQi2KE9D+@LR{YYD01e|&v#J`AJ% z#n{wA`d2%HOd&UwmRE8lRlVAWY;3^B$|@5Ue>=;oRcn3Osz>EnT2+jiWrd!liHP=6;x(9LcD zBe&2t({RZ}?M+JN^U(#zRrOCLv8XqAYb?EglxQGC^Xo-*1T!|T4Q>N{mOK59lC2x^ zuINbWI^6&i=c!{{ebEYN4|>m;JcVF0XtNMiMov!tv4}A5FD5?op_?0K+oIiTTV)}k zw%XSoWluSyVFIaMjNbPABN`&A%8~s|$Z;&Ir8_sCiKM`7o^?8H{DEG+CW0?iT?ZM2 z+L3y31K3!0Gs15nWy!hCg%k2>iT0$WA@`g@$Hd^UZyNY!g89`Z%Fba?2;umGi*+i{y} z>5wnbN)JTW$cs>d8hP^BvRIu?brRB+0Pwq^}#+ z$(FCXRmYV#`_fHNjCcB_TLP-?Tsz)?<0oQL=>r2yEYy-$`x2jCnr7OjkhQ}~YFeC3 zWUsRgZMLPa!#J36=^vvN?D2AL@?K~hZo|+(uPHH=H&$U!Pe!R0cgw2o_Hq+~Oy zLO);o6jA(557!W?wG>?f29Av|*@?-?XjyTr&f5oHzkhc{*=sX0Q1H+dE}kXf)7)66 z@lwID^U)#nAvsz$)@krOq}fbhs+y4!iQDy-=8G}A&YDPk*a1@ zKGqOP>wBJ3>!1r^d10PLxikS1lkBEGdy?5EX?T_)MuJku2yVaT=tn42gX=?g93_HR zpZ-#?QHerEj{)Rzn3hgQCV1>l z;UY&zv^?@_yxO8+KPwL1PzdWE@p?o0{R0+CNWyF@Q7K2yKnM!y!g=K!H-to;6jFl= z%+_mC30ME?i~g(DbIuopvJ`&7yXm65ma*K-y-3s5HO-7h7t?=Nr>ue67AJ4o3C|&R|Uydnom-`A`X`*634VM}5VxNRRSgdy zWe^HmZQQuwh+0S=sGW$UX1mlXaAOY_800S`kz1` zFC?D-tEco=-T(c#_Wm$up?6rwL|CEXZI28I)6{5X`M=(|8JUv(NtmzF6n)~ClEU*1zxH}`cJBZ1KMnsMK9Yk* z1B0c9i-$&m+2L~&%@VG}#sPmlq(wy2QW3_*3^Kd08?heTis@X?czsI`a~2YMugO_% z1Pst};Q@rAXIh*ZDG<$k8La2%=osyI^FNVR{q+U?=hD?l!%%KYu7eT0^t5}u`kg$H zpP1fi5eggycG1Xmq$7O-D8b!PQvYUhth_V>L z;GYN7rdx;ytN-U(|MLw0@of;V4;qrGqkvlbUWoezm4Twt(kPz-8zLljhS$|@b*{5c4^a*d+=AU3OP(a1sjp|-Zt*8Y zV~5N?4Pqbfz$Nzop|tdN?_vDg_xl%QAAC2zv25TRkL>;&s5~V%AN`cd-|UMxZz0Bv z8#Y;kB%GIt4NRUADnF+6&+V!&eT**e zcow<|0#l?*_>ISr$ds{m-1v&r_|?fQqY`ST+ko>^adVam(Nby*t#9I!l2b!sSQ2fX z2MlR@k|H925!mnzsngTUSef)&*lEC^IN1hKsDM^$;bR$!IHVQHQwr3z-9|4T2ab`4 zZZ3WdPTDo_(;ii8jdW#M;H0-`HvIkf_=*4{OE zMeT4MyvHUjg|t;ECU4WMbYtNre!&1m+(aMlT;mcRVs6%XKv$L><#SB@Nm$IUC{M%_ zSlbr5Ec10qu(6Y=A`CFrSel&FiYo7UX2G&IMS=e~106||I4t>Mn?E9IEUwVSNedoV zAZTli``)V{(zXGQn#xd`Kv|6y7+7ugUj6MH4k#^&uBb*+R>88HX`xGDSDc}TJ2s=V zs4gt!D>`yCfggJ^D^^>$Fc1PBiX$3m!TS#}2F+1j5vxNTig6{>MZ>h&*hg-|Td{c? z%VXh}sZZA*PYmql>Sh5olnNSz{GcJQ2ffd{lXFe2*Lj&zJ&KW49b_S!V-0Q~P=M8= zooI!v=?}qEL=%%PTGu~gp|Q) z9T4iwEV-mWJRj_PmGc5Oszt$Pj0SwW4GkYNsVR4gyx2=4Q`$YO`6F?X(E;s-DV!4J)H-XMu?$^TM$COA+)2QMLb}?4yc@8{(@JH zV6b{XQjzzR%ie9ep~O`?QBA{$7mU}p(@=_01N7cdn}*o>$416TZUa6YD}nYJT%tG< zIo{Gf%&hT7nM*YblhNEGk_QLrO;!8JejNgHFXoYrQh!loqr{2zQ1sTI*HD<6(*u~A zEo!pO6RNf%faza~8X|f@Szp}Gvqy~lXsu=U0O@Ix(PBzj4+6hrH1rr|PNv2t*B9tA zwjyL!Si7*UF1ev(%A&cntn_WGTS?OLfuD;W?6$xDxS$$Vf^j(Hmyn+iRZaptYW`_k zKC_8PU!C;NamuyxtUGOBOI&Xzyg0GEZ_($YeJ**IMb9w~_nLZJ_CWS4N1yKjlX_Varbg6(O1n-Ko(cytAh`|<<@v+?}d+zmc&qe+yd25 z6d5~&EC*0BP3hm}bYD(_j(gf?J}o?a^V!I&Euz@#kqQMW!ed8=Qjiv`){AP)3Plqf zUF0dv#{N}KBF)u(>9s!;z-`8&3d*~4I$!#()j=8K!R(&8Ieqh(XFBJPS#hn0uY}iE zH{Z0!qdkhSGbQPt#SE_3&DnkpZxXvRIS_!^6iI%*tGc~*q8+}_Pp7t71%e;r7+Qv% zH{NN4$dTI?rIG;Esnrml;%Eu1s?vL*1aMyb_50tgl|U9$?Ybr@@eb|K($jCe&-*cR z)F+Xm)im6Q)4tk+fZP$S%8ZIY3=e`dcL{b+nv`EPzhO1eKJ;*iwZw$uYi{@9s`0~y z%Y_)0#Jz!|=#Jg<++M+bVu?@mq?E#q(igHBDH8EwrnwJRo-oDcmQg9rh;qtfA;#1^ zY_D&>xNEdD80N^GPFA)UbyvHqM^q?qPjD0K{CQiEJmZkWb}7=7>iJRc9PeQ_B#Py( zlcUOr7PYAQVFofYWADf8ySiC6Wf3oy`O3M6lhQrC0rjsq_*{k8`R4irgwH(h%3Jje zO7z96z-v&iWAHb|NJJO&gqH_6Nc(d@Hv4m3K zjydNLsVW!(XG8J%ImVk2s8VO`dj+TNK~wx#ls8QnoKJ+CjCBoyR7r)hh7XFIClyFs zuBp^5(Ft?55@1ssE7iU5Pz$#Z{3HUcEH?XywU{k)ZLUM$uEwX1E??R8Evm|Lt@o-YJ}=keki?! z1Q7+n+qSKnn~S!;n2mP){{Mv2=|8Vf{>8SaztvZDy9d7uw7FBs?a4RkYwZSx=JGA~ zid}>xyL*9K-ad^hNz-d;<*=3_SDxR1Dl$LQ*L&o5hK|>|cCc223#%n_ zPlC%)>0e@QWU2r5nm>d5`Axh8e4@Xd!|m8DMo$cfPzu<|jmkQt@b#+JzwO*$pEfTG z9de?7Y^K9&wblUK19KvfznuthIQm^SA9O_SeRA#{uBC(5V+8PM|y-BT^zfRC$Oy_1pigE zaXmneW3D9akb_Cu@9pINDyrZ5zUuQxgYvto7MGq_-Kf8c%wLXGEPBleu>!l!>YM$4 z6$ge7s22To?*F;W|DPY4W@pPRl<@SoUQY@x6G*xn?q9vtjpSPjl9f&HP^+NcxIQy4 z7?b0zs-m(3GAX}xMImBQ&QezO3l(*K$)>e3^88=bhe$$xYgt>oyoxY5bGL8Eb4-{b zDX-a($agW{kJG73G?P_~vKk%~Q=MSKIbBQd@p;njRkKK935gc(sbJOJ7zu&X!WRni zFjX2iH0Fd(J9E4J*s2#Y5B0TC`_@w?wst^C=>fxIdV~}s-q||2AtLlTr}#e6ddp40 zC$PgPXvdQvc9qwExbq;C08cZYB)4HTCL2{T1%+26(mT-m22M`Y8o*q z^O)T7d>xttQbZ`&yA?-AK#PsCLLuhnH+kHWjIJMK%0(;Q{vcD5(M?6+FK{bNO_`5a z>HHu==HXH&OJZ*q^4Sb)37vCV!O>)YfFji-6nrEnKBWuODgM@VZZr`2-ERTu4<_sA zwCIUcgcMDvs_<{JA>MaI4KCjW-I+~R`4H__qZ>q&JlE8lX~2}}WIEH~!eFIpaD(c1 z69Sp?tLKCu>(~QY^vC~VsQW)tbPuUs3vSba1#nBMPis~zizVIqq7ZQJ zz_$ZiKxDGcz=n`-`9wUe^|Si-8~?rgN^TG`A`D#_&5FOdeq{w4ZTowiPDp#(1{`2$rbc3xsPF`n5*tCRBC9Qgyl%lRE@|JEcot|Uu=3s40f#vS!3Whycfg^Eb3xVGGHB3>lICa52>{FP>;;r$l zxKB2?PU>&|bgL|>7BJ9b`CVhav2rcG{btAfo*ungbF zQSGF3I{Pbk#vFU;j`5Kp*X-$TUZ-!ZnG{V+7kS(MX@LmheZ-Zv!}PXE zhwS?Fw_DS>!{2v!OGfHwX`90wzupjIjSm4c8<$^wfv z_5^}`wuTk(@$Q61gkk_>9K)pttlM`E>%(|PE?lPO5vAI!K_1x6f45w^_gQ;V zq}m%H*>nB0V0StDrqjhn zIm?S^qZO9tuzdI@mnhY`Cb)Jp8nYUt={q3b+ZS1*7vSI=G+G^K|1K;&4yMGhC|25g z0&aM)?}jKjb&2Y}PX+nbBt=0X<_=||{IP?c#kx7bH^ieItSa47 zSoOHiH$*buH&ric>BYW{PamSRd;Ec|*#?aCaZ6%e-BKy9PzYpTZ_O-O{TB2)>im%qLzQo#hf(z2nys$>{^=H*zX3? z+0@+L@#m~1JL3$4V2=O!$G-xint_)xWcXEfbLnAp!_u2u4k-EPA5GH68m`XXb@HgO zf9EbVPJa$dxp82h;=hL=0qA!}UA_I3K#~A?8|}^?xHT^5{C4Q-MA!%Sjk8b5-Fc9H z0X>T~(N2)b-h1oex^0f>QN6(}sdqs&=J^M)8=%qm-Qc^anchbUC3d^;p{ed0#HXg_ zm7h(bZxL&sv|9B?OP>y*F9KwmC~U4d?BK-;rU=gjNKVo0 zUT}}r#eX=FB4zv7I(^SbEiDo>U~ay-C70@9|7ex%Cejn+T2cY=*6;@ya%Y;a)dZO` z*gN^b$eN@jDwnyY3FU`4O4%A~&HbK1UVvxT*rfZ#ZEjO-xAj%}hv%<(u{D+Ym*z_{ zE%T%SNG;RL@FB}w%G-|6&~ArcnHB3i)w;Qe1XOm9?!1-#7vD;1sJL2-P53Rk&iNA& zU&zOLVOo1k$GOy#?`@5jwl=ve%4lK1Z>y$m6pni2ILGH~gxXsc(I7_*zFe5!MNVl@ z&3!M$?{ek7F!uEzRr>nR1{*<OKW zC|V4QVld!o&vz^6CjOeyeeF3bF)@R5O4sNZ&nBfwtWeM(=@B$MRXZe~+oWT2Dt3_R z#HJ4p)w@?GyurOm2Ejj-J%pMh)ow#>w3a-dd1B$Y1y)YW4Y*~2*n2IlXjx@byOXnA z8@@P;rQ|G$ThK-GuzQL(FPuDN=iWl^7hoGo#3+#^?xET|>7bH~XSkU{)yF0LSFXuk zFxIoT(5|jVr_07!7b{`at>16(Kw3*2!QGJQdE`9b$rz&=1+8{{Y8-wGz2w&QF7W3D z%R#E8JRWR7uep7jaG>kIH!c6aw)fvP_be$TVaMcEYocy2gbuGi4*+YX%*-M0+eck% zrN0viRo^Zv`+Dl;mxABk3RN+VeQQlorD7E-9`W)9(rMISMEJ#Ml48vo~kFSOm?3OWw{c|ce2=K+Rh97hEn zC9~#k_qy!)5|lROQ`c*Dq9EP0!M3wlV{S8o0gi6mzJKR(e4Fr1RyX2nWj||!mhtx> zp3;-jq%;e1aWH!mTH}usGk%y;69o%s@>rq7>!p?5%?o>M`da)>{hC6mzfK8cZD|v= z%vc_~^F{sBM0WE>j9Z(wk?Red%JPnJbHGOwCX{QR~4UR(7Dul2S&Vi}wHR>5j{SrK3G}WP_d2F=9 zi;_+o!8UJ|BfF(rKME#+s2ZwB4YS6VWD37lgf)Qc7B3bR=Wv=%2r~hrj zUWJtjXM?>jQ8Xd%#AJ8EMIp{%C`@xDe`(xz@&JhwzWTQ+aFh&sNs9$qH04C~aE5yh zVgy35dF(oUTz;jBL5{9!d6f()i2U0BeD$SB#q!Pj0jZ?)WRpvbFg?v(P+I%Tj9SwZ z^>++yPF8l_bqzGS4C`OTi2b>Kob5a zdp(v39c^m!VH9M#CW(vp^sWky%qj%=un<_)^+OGZoQ6#RVfvz*YO_Cms{5dh1UfO5 z4EHzOJ4`324<+SzPY`NaHCVvzX+3YH$;8HBYfL(JzWe7RY&6l&Sy@ry#(Cc=rO;Dw z!U)WS0GMG8y`qsK;hmI5(A8%Ls$^{EO{zjSZz4BF1JR)y)XtOFZG+~QJ=^Lcw(i<) z_Z+lkbTq>|x9kw4H^HjmOCbv@kKwOGVt6l}ZyO9HQmAbu`qy8FIFu5qo8AP5c^-ro z$g!D@wP6@Yurc{PQv7$Z)zktNXd$Vl>h4=ckGg@F;+^UZz0<~|Zj~kk0J=dElHZ^KOPy*_}8-Wa{=Kk1bcN&2=4E*VYoz zM&-~wR5$7n@uWpJVAiXOhW6Ulk`Z_X``{u%o}g>vp3Jx9XjwhjIxSb`;~rOq-HH!b z6zzUD!EOx8r_`rq9CwMa{6c^Ug`0%@MaR(U4wT`^?6uJ*;N3M1ZnamJTj)r0iYI62 zrCXI}Be~Y!N_BX#r}k%v)|vx;YVX z#rX4&ccrgr98&pXEu-{dCQPZPo{{PMKr+xSDq8(Pz8Ft|Sa(?|0a*y{z!4Uuv?lOa z-n;KM@6!oPLYv@Dt!U*MF4+b$l@rLVhsO>8NlKx2S#K%1Gay>9Zm@8KoH73)@8De0hKhjIR{Je^O_IVr>#=20OjR|R=$~o;CH@-{k(D;#-YmDR>4Vt5W8e4CXcq8-k^|{3x3aLW+ z`55wcu}Nek>!!NaEb7Fy6P8M~J{B+GM+(%|8{=F{d@!>{!hu%Q!1FP_;quyw$u;YM zy~$6Do2xcyJ^h4R#|7!2cquE^7zO~(*cBhS| z=4xZwO{k5cs7_{z28o$AhLR8^hMKDFZq<}%C~9m=5sA=5V+y)=OT-jKgdnuU9F!Vs z=$D>z_BrQU>%8kd=UwZp^R4y0`RB=ca_7$dT)Ch7xvuN}UBBO8mhRKp#%aF}xf+jH zEya0s#*lSm0--*>mT=lMLPU>sjpX9ZXm=~@zB4qTsh?;gjWG`ad)`CNA;M!7@jK~%?wZA5=MY+l8_#~_#Z&gz)?3C!* zvGZvLD$uIHO88r&g-D4DAfjOTuW^eb#J>es84Xqh+bv0{nMa&PLYt8;6{-2k*3g&LUt#H_iN+l- z;!To?vP~q`(9Runrzg5Av{a_k*|G2Axi7qHwy#rQWcg&Hsu?2NjC3iNQ8L^n$FGqA zE>OrWCHzY5v-=j)0hUO(xu%c7X66wB}ErA!GAK zG6{e=Pm)Rv*fefJ*U_W&Ni(pD>VT_}tQQFI<`tWxR4kI4r+rcIse!5|y>}2=NUKTb z#}aTBOg?I*koU+ls}u(YrgG>c{ zmo+x)H&7uTXgY3O43-cHQclswW0#a~lFn}srzSqH`<6_vxV-lZdqi(bSqMolbq)St znp4-sAfu)>X!7Gh!1?T-oqvO&G=hs59-8|!_SlQJ*XN`IR*~{SwMU(kG8fC;H8wK$ z?o-1?rK|**XUhpH8CTzYso0iVIeB9EwB|ll@gZYdg?*YTqjQ`rCo$!MuMe{%UK*w- z)#T)QxJm-cW-A$ej|lsIVhG!tzePGd-V|AwIcc)ZwDx^=tVQN)bISgIc>2EAHHlw- z@NGstaoE;#I^+n*JVg#n69~u$GiL==;6Q3UKCx9$ofS}3Yo=ya3oMR@04~)PY_ntP z{*rnb7o=Xcj|fsPyO@7?ivsuUK%YY}qK9*ki&zyCyF1t={H4Fp%{MQ8bRx39%=NA0 zX2VQ2``E6%4w-v>3P^5R1@Ht#t@8zla7lW;rs&t7mjCGMKX}}&KQDJA2LO*v} zbOvl`?g*Z3Q*Y{;B&NgXz6r&??Q`EgaX3Zrqki*TVc-<<_YR$lX+0HA zO*fUDQ;)g!wCPKVSc7}(%WzAE<>-voGALB#?k!=NxS|KJl_!>mK4sEs>J}Nj9)mQf zGO`&q-#SObwd19 zdfjcu#y+Anhrj|jvJfeciKl3nMu1jPsN9ng24m=Ft?b!OXkhIUzJ{zE&cd<_$VKxePh)f5sIfL)AhX&S z9K?Ik4O&Mxp&+fp4#6KrK`s1p!Wt{f6nT9_cKI{&>GmKjaI~(79z|JC!rNQ>a0DwoF>Xg?VwlH9_Q0{f#5!6Iw>~q2Q1FtDa>l$ z9#_}zmdo0>6_q0AvI1+?;9(k?gz-s;Q|29@;ks`^J_BJNV{KRQ7N&6s&QWnlhMc?d zx(=ncM8Fq`t@NBBGFKY}VGZt7m_}A&`+Cmupl1+}u*>xZT=lpsr(sAx&2~|h5Zn{I zGj6x@NdIJ-U}l@15Br?nxgN#i4+B12D<+7-M%jYHd$ZC|-{V-|;dY9yQ%( zD=JX_X^?PD_rpHJf?xx2w3e;jRyyW6>z!O*B&Znfx8#(!b&HuL!#p?Tq8XCn*gv%mtynK*{GA8Eq!&~fvlLds(1hu&Gpt*h) zI)eYh_YQ3t}9lrg0nCI(`J~na$ z9?@H5f`0YdF3%VAyPPy(;^NN^6RJok;fF&X;1wB^BmNH)XH5c2`@{knkDcT}>1Lu43ATLdl_*2`P)98cf>g%;x43pG1te)}CpBA~;D zhP1%trt$#EIOhxGcdh&&wN8i8@dPdH^b_>n!Ayt?fdD|(gg1hMrZ=W59XLT)wEQ4M zr^7QLbs(kDrT_|YmEs7VGlM9fR{@&|kuKVGZCi#+7d$U3?TCu4OwgU}r&ctT!dz<2 z&NvgRSen>MY^x2ZQV&q{jF9xryg_p9e`cdwic5PgUHO749n?C_OK$j-n?52n5jhSs z)5vCyyH?p;{?vSkyq?froK(C|HyZ#YUuMFH8T2*6{Km-!`+8>32J~{tw%Bc(0s12F z&7n4Uv{y;~qcGP&IbK?+-C$L8?-Bc#CI=R4RP+t9b?|{3Kl-I$VGo^>!)ZgkgvOCG;ruH8kqM-ovpmbk1Yj=Jc@9ylD-a;_XV3v8U~WlVzjB-^U)n1Syx%g9WQ z-v#wg7qyQ#*DVIWpxe%#us7PHV`JvRR_kVrbC=8~=yc^29RXEYd_xC9se*8>T@2Z2 z(;gk-{8O!z@E4t2&j2G6?JRAzIj)$$fH^lDAXIq4>0ReOOjkrg0dy_6K@OcPIW zpw~XV?fDW>(~baLQHnzAL$%8AaRi<=Hi@HnixQCtqecwaRIn`1kE2?LqE)yE*g{2W z!vc6%K?L~%k>W-as?+fUu&}%)0Nra8do`y3Xd5Z1^b%LAbH<5TF#^@#{OmYnM0^2?7c8G@-V&g$cloG z6UBjiqWr-=B}9vI`CDm!!^Qc@8qv*`>=!%L#fr&2$zIO@Pi`Ww+>Bu78>rmrKJ#q5 zub(LIk%e#gr1E+4(Q+Vw)+w_;!fqkHc;+j|d(%H&<{Wb(&&-|AL+5_KpH~r@!oqT; z$yYHdDw+P5jyRLDpy}@=H-%YbVA*^W%TdGEyv(gHB#qnNpuctb*QXv z#SeK<*2#M9)+4ZC|HLhtbUV@uzTvQ1{&almk_gSzGb^5!p@Q!cgX&Z`po;~vl3&XKRk_zdA{+N4eU;h3B!m0F?Tn(tCLlaDX_QV?G@^K4zOyP&l5 zrpK&8<_V;_uH*BL3n`a4jPWp#9*)LmAwqZU57Ykgxh;Qr)I{#&L~ou_Rj`ScDT#v| zAi3t&f}v5aq*b$85NMry)Lq13^vBMY;T9ra1zVLtFin-UFP+t?PgYXg8sg^A7C1F$ zeeWjp|L6#4Wzm~$MfEaq5a zI$A6X&B$~7qSiXCY;@P`rGIz?V=^kql=rAa>ZOOXNL9>@I_40#sPd!wN04)i@3ona z`GS*I7%a zC_Q3|w#D8)kY;OK8GO4300B6Vlm_a5IF~KmyCNw@?-P&@I*Z+Um5^8)159t5@qfEX z++DROV)D}+9ZYMpF?hwM{rncjFIFFuf|w(r^7X0XR%(goB^6VLc&RE9=uy zTZK&e1iCUXj<2U2k&11!fVUscV?|%9wsql~K9owe@Q*$T5X&eB9$@Uacl6mNs{_$pp<`3HJ1AQqe5zT3>&o zBDf*l2`pFF{-iuxIh&tF+L1T=CZe;&*FTyHZ&tn^WX6?Hs&WqPA*6m2YOK>9{ZJ)1 zibt;*>@0uUk-QOuRLZ`fn!oi_;_;P^j0X>&-lU|o=cIYz6jII>%FoDj0Oe}9Qm+Ey zrQ`df1CPZX59%`5yRJ8L0M%D>D1wvEtAK8Mil7bTQEn!yOFB^OqE4CBZ(7f`%(f3i ziz6g-fA67Xq zK!Svly(Lh`q1VrcAdnx*X`=*GAy5zF53LyrRKJ16YpeJFC#qrp#-Q-Fb5S4FX|>W= z6(gW8AW{|v68r1x8{~4j?({WP|KdQaL8@88N$2}F3d(S$3ns0M`Ue*B5JEm9p{`q- zEJmlDk|ITPzy&Jbbf6!bD*UHliUN$e(u$~48I^YQ3%#VYM?Qi2_4?rbR5=@O6Aj@x zzqn@oxMf7qR9}tuQVI3Hiv$09`MMj2`0>dpCh~zMQm@kHU9+Xc6DD=qc*azK{o*N^ zdp<6J(Jh?;VIJ{{cfG`jQh05Tgy`J6W}<`_j=F%pnT@*hm1zbbBuuD99$CE1IHzya z#F+I8e3k*FDRX}Iw*cT@IR4ygo@7!}S!A?nQD`)vKR`lPA_(AT*x|0rf47^oA5#<( zjU?e#Zedx0j#+QY(3O<|?zMnZ1RqG>|25{^+aX0(SRP+OANpBmo_olIx_(%w>3 ztZ}oJes-QDNF#?fD{ZL;t2YCcwvGv;R95Z@3GLP!6_X-*sKU=UWAAX%^UPWEbCTU& zm1IvZ#~g}0uI*;r_~SW5Gf{w1#m7-jeK(B^^4WxGwkh45yJi>(nM$1J^X!J!3*!>> zzg8C{#>mP^c6<{mP7_5}3%xu29g_2}f=_NRc4NaFcb4E6MQy$b4bg)CQq0JzF8;j^ zg%Bt5X0`Y~_4~&;OzPuXo+V%+z|y^3VS7{$8hg&r@H_oi%+)*hzJ4F<|2r@6^I)}0 zA36*+rK_~GqM%0vyR3dJ9xwgUhXDN=#ABCb~_;F`O6h4QE$rmXBbaEgkKz6Q&^Pz z)55*~CfD(YU4Eo;trj9`q&^Vqu#hNn)5%SSGnhmnIC-rYWRqgGwYU@LfX0_>C&@GZ_ zd%C38KQ4G-o9=p-59Dpa0P$_@DXWC`I-}7tJ=x??pd-O2R+Ov@> z)-iTGamQ`ytUqoxfpwwf?Jey{d#K^u+@k8*X_??uR`pk1wuGNI-{)3a(U@b_Q+4vbE?u5zWSQoHg6Wai3uo@5uRyS)PyZQ~OY;lR21vu%s2)h|NcFsqq2 zs4%5HsjX*==rcc7@#vg%QbZWJVvJZA?~z^ad|dR3yuX`?mR7wi5LndpMekSWqUf2_ zUI}F>jk&Is#TBBNx%jMI_URlm4sA}|xjp>{l2jjIX7qkHx{5kIkhs>pH)iYVr*huc zf~_;w9?33{59xE3Nvt49@@W$2ATbzEOGj=n}lrvZvMKp{r;>9Cwo}c zK1CL_2%*M|gGda98ZZviC0K+7i`HXQjl;fD8NCN8?8Zq6_hEhia^lgaNdHpSh3I{Q93Z!Qjq^YCi_ zm2x;0_XP}?BkmDT@}PO)pgN&eST%K5`$l})NJzj>9ASV?R`N@5*qUwdi2rtHqy2Dl zzl_|y(yfzk8sSruXB=NMC_2(EHc+PBtjm;gUp=c$DuVz6HYt-bMFTwgS6?d!nCz(V z(84p<_744ey7QBA(;mutr9m5tlpeyGZ#vGea62;|pX^BnU1JPm?d-V1wa3t#v0=|K z3$HrIf#oNPT31+7C)9dTr8);ijIvBVM89%2PuQp>3g_$0&wPEw5kXINqAeU_S1>9z zxd>(&b*{e{6RHaq_>raKXkwo;q?vsw9VR!*oga^^3Ou|lH)f?F1?bR!@}@oXC5q5e zse3|79;RG4Se{bx5&0}0tbpu-wA%xf5CkP3(OY8Y+}xTfTTb9DwG&LUk{U<7 ziAIt=q2orV&6l)bO@H^LX4pmSnQCd5Y8S(219L^~VNvYh^l*QYvAX83eqMtq%~?nm5mpX+rS!+A^uDjDQc-6bEmjfp-gBjIvlD8s^|Kuv#(9R3 z$%pRc+-&yc&%dEhlxhp3b_f|tNek%>=LJ=KMy}+w(z?1-(>{J5y%~&Sa)etsI-!UK zqtS}A3l{H>4~|#fuf0_bEg{}SQOXLQgYj~?Dj)KibT#vH$!ZDJ9FN$OhOuqgz>tIPiW$ZTsERIzCO`~_U_ z`~;aMN73L3-({qI!~m!-vkapn?J@_I6cvap)5g#*hKayU#j;Pj%fp{0qkXpCSSWW7 z78q5PaJZ#!GSoJ$k9S1*N}7O2B=c+KF~TQ#R(3X!kFeTM+k=l7^}>|l_uW+*&I4=< zeIH($fN-={%R~oHQ;NgZ!UNB~k<`x8GNBBTx;T2^siwy=mg`Epb5;EP><58o=B_`h7gL+yXN{ySMc zCVdP$syWM7UoV9BpdC3H6{P9JTU150^*0!Cto?RL-Ij{g3Una!)6%ok{IyB}w}KHZ z^7y6!ni4W+Ihfqk+FUP|HZ$yr)E>87tpqBbs>$13+XP|A!^EDR5z|b zSj-3=w#X-B=Y#I7Egq-*_7xt>IzY!WoGSQnK!Wg1g7ttWa*{ZRj@p1Kgw;Qsd9YIvW>H=fj z&|W*3BLH+*ZqfW}nr;b;_JuV`aVrOFFhTr0c`n4h;;YriJ=g=n_&Am^^@1tO&~WFW zRio%ttdWr+8meVyXJllw1X4}n2?ZLtO2)DCHSyU3-eI6pbzD3Jc!&1WM!99Fk+Ei} z5fo~iuc_@Wxhha_p^fSMCM|4>gffk(WuZeeadG8?P3`#X^0kshq?B|vn%<(dh}J9{ z{HlWs)w_K3#}&!OaikM{Ll}=S+~FA-VAiX9hi0Xbic@tnbYhon6Tfn#qGgb?j_u!5 z>;aJK3p0`8^6b^hf|OFd?4UZ?5WJwU8NVV>MFq;Gi8dxQ=%)_p+>@~oXAI*fo27>G z6ws36)>BYRrq!1K?MvVY0rh`$YIa6*TSw*A+r((>?fq^MmSLb8QUo>pSs4OEZ5c&} z8F6AHWrO-mfCV_|UjBDuSO?lR7XQ3kYRp|oOxxp-bPq-PsP2+`)fHTgOe%GEjGSLG za)91jwh~`5E`^;D0(p>TTb>ZA~b*ft+?#vzZ>0u{_Xzw(l@Tx9{H9Gmjebg3T*Bu zA}*eRlp_bQh*gkWe_xFG>A9@8BIhyI!sc|7(;#*;8|mt8m*C6Rs-MFUdw*;33SEe_ z?N=KNs9go(PnKo%K&Sg2kQ_3d3h!hCd_1fiKE=mZh&L{2mh{K-40YhKAoetwYW99jtRvh=z(}Y$Sj7pbY%KWUk7;r5 zZ`wEi#1Q}eO~A#$8Ux-hw^C#WX493~)rs#3;RskD=KyV17I6;SeqqUotts7?AA-B6 zBaWY-hItIs=lvqb{JT`aF;T;*f&Q5^AKPSnfz_Lk86)O~E*_3h*Fv{WGIn730(N1+ zE(KJu>KjM6ZvFxPEt~*NT3E%2X&yB=f-6X0IXVmiA1MdloGmm{LW|`lwzCk_QrLRN zU9a6;53qMm%wD>LiqMF;^I3&`_wLZL_s(Zk@t-H}qbk0vP8MjdCGY0mnw;x24p`W| z_`l8n|FMj6jCuKAaZ=pB;-qkj0WZ=?6^E&OWHtDTCFA7s*ua{o`1XmSoteB10lYu2NAno($qvWmV4v9xVU1{C12gU~ z_C8_h1Pf?Uwo%eJ$zA0Kfj}q80_RYG^>6qy*8g7_$6wn1E@14@@AfEg^|!Vm>B0PL zu$5QANztD1ZflKLV=^~5NJ(*?8xE2A?!D%>^^S3bFT};gZ?}-yZ=Yi2jna*;_PS}t4*SiBoqBe z7lHEpguBG+r-X$NgCkPIO?2;Ghcz|mn;a4pnMT0lX`r)%`Nf!nkp+(}2)bDofh^+P z0z$JC&-sb+fn}UaeDA`Vc@D8*Sfz)%J9Mb!v+cE!5UFEs;U7b_&#nD_;Yoe_t4TFx z{5+iKl1QOKY55zrH_oCa%s0Avib9T9AR?$BPmtN(;7mbv+YOJbavmpvNXtp6Zx}ss z@G=9muVy|2{E@-= zFbnC`S=|F^{Cb=2 zhkfQ$I(F)$#=(?|B(ez@9z&p|MzelVXt&Ht6mF7ceRN*m2C zEpfc{INc2e`vTnV4l0|fZ%_?B1oFgh>CEHcl(6ZsPtD_>vWBJ)2U$blj}q|2y5t}} zhQE{Mn%e3dva5Qitp0SZ|JX9OA3s=}Qg!Z4rf+$%V^1U7Ou0+Wg~vB3co9U5ZbEEW z?!OjheS3Az4&RRQN^z>$>%&#hR@b`NSQ=jznS;l8xGdYNRws__<~GT#f007vSDy5BxHMITpf3bT3LV{ur8?wz&aja4L0 z>m(r<%W!ZGK@fnH%@9W|+j1p0qFH;UTJ|rePrF-OJF9;dT91C4()xb*y7IPr#M;|S z4so=q>;}g+&S2}p!b8vb@|zGqv;{L%aWgD2b!P_uTrz)G*tHyhazTG{zQC`<8oEo$ z;Q-oO(XXt#HD0AzYB*7|L*@ptO@(Fjp2TuonJHIEBP$^xiIb4iBA|fU`9)#wcQYBT z%e&3KoMo|{C7!R}7k?PZ3xk$`zp*8k8=6olWPw^;yrAzO;Lb1lzZm77{(8B$CpfuAfvSVgn3go zjH@lc2jdQW!WBajNKIQkC%~C3kB>rNe45`&6uT&5^ zfW`^za0npGl?KsvKP4i8X|f}}tumQ8hZ?49eG{r1Us8H{1pm8PbV!|QeR$`Um<45ble~*;RNqc|>k+`(L`;J-=ISYPwsusF0*jNSk9}56M_?f)pN@=;37B*=3tmUWOyw zks*2h1oXAR1%Yhs=~y#2%p5vf3NRCwHsrd;5~Vif;2!Ju{J-bY^LG5Vu4gnsM7e~Ew@h_*1oT#JWOC_6<8h(a5iHih%O{9 z;k%Pi3%c`LZ8nCXR1o&3)fD%q)zsuKt7)1GYi4beRAV25uHaq`vD-8CuH;%pF3Uwf zeDZ$(P|x$d@i!wg&6pm!qC-tE9WgHiG0ezX($CCQruNo#R^=_CP2Sa4PwdU|X4BaF z1gznf&&phf=C+~}ez?N*vHqec_eoQAyRFJ#UgDdOL5$G>WTCxrEFuDWrlAL~;Fn}C z%*RklvGFpkg1TOyCR8xXA`ccFsBvN~@>$l?9IZY7Ij(|#_{jYI$$m&6B&IF-i_|98 z)K~3o5W6Bq77Wo|#~r=BPfNEgF>%NFlG@wqIid5XUeU|ukk0c4@jhxqnghLT5QQ;xt?%d(ea#oz?{v)%K_JjUb_v7cj{=J z!}+ zCVFm(l(21M9fto+h&&*4^x(AGNHF_tfS3kkFvg5$8(BXD z`SDDYs__ZWMRM*PEiO^}%l~oblW{%}s43bgXdM$IeeYO2+(fZ8j^{2Z;O*UR4cY!% zm(qb(F_u|ztTka_(NP1{cmMz(42klo$G`2)ljHAVtthH)1nzjm1a=+?rD`D|B@LT` z4da-39U)m&xGH=#zo=E9kRDS1cRgN*A|oZ)f*O&0V9cNgu49O?r{u4ONSDL}3{gu* znp;_xJMudB#C03~X2lyv5BO4POMm_t^-V}bx;6H)47BOHne_!2{DAq3pI*^dsU*Zk cxD&>G(+_>`A5PByJ^8;D_zzp)(l^fk0iL}EA^-pY literal 0 HcmV?d00001 diff --git a/forks/passport/audits/202309_Halborn_Final.pdf b/forks/passport/audits/202309_Halborn_Final.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6fabd33276e08ae5ecdae682030d0abfb81226ab GIT binary patch literal 2425698 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

Yc;UM(kDN( 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�qnzw}+Y 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�&^r$0ykPnMlTifSr*M$cbxwcC)`i>-3 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%0D%S#YJBdSi$z2*KxC-ewaF~C2Z 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%0A6WhQS$4g9jFz%>d~s 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%0D0R@j8dH^uDzC)kc^s24K_B&3;k7V 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%0D#QUoQ{$el>w{gw{>iJg*f0M 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