diff --git a/contracts/domain/BosonConstants.sol b/contracts/domain/BosonConstants.sol index f8de52e6b..3847e5edd 100644 --- a/contracts/domain/BosonConstants.sol +++ b/contracts/domain/BosonConstants.sol @@ -55,6 +55,7 @@ string constant NO_SUCH_DISPUTE_RESOLVER = "No such dispute resolver"; string constant INVALID_ESCALATION_PERIOD = "Invalid escalation period"; string constant INVALID_AMOUNT_DISPUTE_RESOLVER_FEES = "Dispute resolver fees are not present or exceed maximum dispute resolver fees in a single transaction"; string constant DUPLICATE_DISPUTE_RESOLVER_FEES = "Duplicate dispute resolver fee"; +string constant FEE_AMOUNT_NOT_YET_SUPPORTED = "Non-zero dispute resolver fees not yet supported"; string constant DISPUTE_RESOLVER_FEE_NOT_FOUND = "Dispute resolver fee not found"; string constant SELLER_ALREADY_APPROVED = "Seller id is approved already"; string constant SELLER_NOT_APPROVED = "Seller id is not approved"; diff --git a/contracts/interfaces/events/IBosonAccountEvents.sol b/contracts/interfaces/events/IBosonAccountEvents.sol index 7f2e46df4..29dc19c65 100644 --- a/contracts/interfaces/events/IBosonAccountEvents.sol +++ b/contracts/interfaces/events/IBosonAccountEvents.sol @@ -67,11 +67,5 @@ interface IBosonAccountEvents { uint256[] removedSellers, address indexed executedBy ); - event DisputeResolverActivated( - uint256 indexed disputeResolverId, - BosonTypes.DisputeResolver disputeResolver, - address indexed executedBy - ); - event AgentCreated(uint256 indexed agentId, BosonTypes.Agent agent, address indexed executedBy); } diff --git a/contracts/interfaces/handlers/IBosonAccountHandler.sol b/contracts/interfaces/handlers/IBosonAccountHandler.sol index cd3782c73..d2c34a2f6 100644 --- a/contracts/interfaces/handlers/IBosonAccountHandler.sol +++ b/contracts/interfaces/handlers/IBosonAccountHandler.sol @@ -9,7 +9,7 @@ import { IBosonAccountEvents } from "../events/IBosonAccountEvents.sol"; * * @notice Handles creation, update, retrieval of accounts within the protocol. * - * The ERC-165 identifier for this interface is: 0xb8667cfd + * The ERC-165 identifier for this interface is: 0x1f891681 */ interface IBosonAccountHandler is IBosonAccountEvents { /** @@ -54,7 +54,7 @@ interface IBosonAccountHandler is IBosonAccountEvents { function createBuyer(BosonTypes.Buyer memory _buyer) external; /** - * @notice Creates a dispute resolver. Dispute resolver must be activated before it can participate in the protocol. + * @notice Creates a dispute resolver. * * Emits a DisputeResolverCreated event if successful. * @@ -63,15 +63,16 @@ interface IBosonAccountHandler is IBosonAccountEvents { * - The dispute resolvers region of protocol is paused * - Any address is zero address * - Any address is not unique to this dispute resolver - * - Number of DisputeResolverFee structs in array exceeds max - * - DisputeResolverFee array contains duplicates * - EscalationResponsePeriod is invalid * - Number of seller ids in _sellerAllowList array exceeds max * - Some seller does not exist * - Some seller id is duplicated + * - DisputeResolver is not active (if active == false) + * - Fee amount is a non-zero value. Protocol doesn't yet support fees for dispute resolvers * * @param _disputeResolver - the fully populated struct with dispute resolver id set to 0x0 - * @param _disputeResolverFees - array of fees dispute resolver charges per token type. Zero address is native currency. Can be empty. + * @param _disputeResolverFees - list of fees dispute resolver charges per token type. Zero address is native currency. See {BosonTypes.DisputeResolverFee} + * feeAmount will be ignored because protocol doesn't yet support fees yet but DR still needs to provide array of fees to choose supported tokens * @param _sellerAllowList - list of ids of sellers that can choose this dispute resolver. If empty, there are no restrictions on which seller can chose it. */ function createDisputeResolver( @@ -234,9 +235,11 @@ interface IBosonAccountHandler is IBosonAccountEvents { * - Number of DisputeResolverFee structs in array exceeds max * - Number of DisputeResolverFee structs in array is zero * - DisputeResolverFee array contains duplicates + * - Fee amount is a non-zero value. Protocol doesn't yet support fees for dispute resolvers * * @param _disputeResolverId - id of the dispute resolver * @param _disputeResolverFees - list of fees dispute resolver charges per token type. Zero address is native currency. See {BosonTypes.DisputeResolverFee} + * feeAmount will be ignored because protocol doesn't yet support fees yet but DR still needs to provide array of fees to choose supported tokens */ function addFeesToDisputeResolver( uint256 _disputeResolverId, @@ -298,22 +301,6 @@ interface IBosonAccountHandler is IBosonAccountEvents { */ function removeSellersFromAllowList(uint256 _disputeResolverId, uint256[] calldata _sellerAllowList) external; - /** - * @notice Sets the active flag for this dispute resolver to true. - * - * @dev Only callable by the protocol ADMIN role. - * - * Emits a DisputeResolverActivated event if successful. - * - * Reverts if: - * - The dispute resolvers region of protocol is paused - * - Caller does not have the ADMIN role - * - Dispute resolver does not exist - * - * @param _disputeResolverId - id of the dispute resolver - */ - function activateDisputeResolver(uint256 _disputeResolverId) external; - /** * @notice Gets the details about a seller. * diff --git a/contracts/protocol/facets/DisputeResolverHandlerFacet.sol b/contracts/protocol/facets/DisputeResolverHandlerFacet.sol index 434643ac4..839ae2fbf 100644 --- a/contracts/protocol/facets/DisputeResolverHandlerFacet.sol +++ b/contracts/protocol/facets/DisputeResolverHandlerFacet.sol @@ -23,7 +23,7 @@ contract DisputeResolverHandlerFacet is IBosonAccountEvents, ProtocolBase { } /** - * @notice Creates a dispute resolver. Dispute resolver must be activated before it can participate in the protocol. + * @notice Creates a dispute resolver. * * Emits a DisputeResolverCreated event if successful. * @@ -32,15 +32,16 @@ contract DisputeResolverHandlerFacet is IBosonAccountEvents, ProtocolBase { * - The dispute resolvers region of protocol is paused * - Any address is zero address * - Any address is not unique to this dispute resolver - * - Number of DisputeResolverFee structs in array exceeds max - * - DisputeResolverFee array contains duplicates * - EscalationResponsePeriod is invalid * - Number of seller ids in _sellerAllowList array exceeds max * - Some seller does not exist * - Some seller id is duplicated + * - DisputeResolver is not active (if active == false) + * - Fee amount is a non-zero value. Protocol doesn't yet support fees for dispute resolvers * * @param _disputeResolver - the fully populated struct with dispute resolver id set to 0x0 - * @param _disputeResolverFees - array of fees dispute resolver charges per token type. Zero address is native currency. Can be empty. + * @param _disputeResolverFees - list of fees dispute resolver charges per token type. Zero address is native currency. See {BosonTypes.DisputeResolverFee} + * feeAmount will be ignored because protocol doesn't yet support fees yet but DR still needs to provide array of fees to choose supported tokens * @param _sellerAllowList - list of ids of sellers that can choose this dispute resolver. If empty, there are no restrictions on which seller can chose it. */ function createDisputeResolver( @@ -60,6 +61,9 @@ contract DisputeResolverHandlerFacet is IBosonAccountEvents, ProtocolBase { INVALID_ADDRESS ); + // Check active is not set to false + require(_disputeResolver.active, MUST_BE_ACTIVE); + // Scope to avoid stack too deep errors { // Get message sender @@ -125,20 +129,22 @@ contract DisputeResolverHandlerFacet is IBosonAccountEvents, ProtocolBase { mapping(address => uint256) storage disputeResolverFeeTokens = lookups.disputeResolverFeeTokenIndex[ _disputeResolver.id ]; + for (uint256 i = 0; i < _disputeResolverFees.length; i++) { require( disputeResolverFeeTokens[_disputeResolverFees[i].tokenAddress] == 0, DUPLICATE_DISPUTE_RESOLVER_FEES ); + + // Protocol doesn't yet support DR fees + require(_disputeResolverFees[i].feeAmount == 0, FEE_AMOUNT_NOT_YET_SUPPORTED); + disputeResolverFees.push(_disputeResolverFees[i]); // Set index mapping. Should be index in disputeResolverFees array + 1 disputeResolverFeeTokens[_disputeResolverFees[i].tokenAddress] = disputeResolverFees.length; } - // Ignore supplied active flag and set to false. Dispute resolver must be activated by protocol. - _disputeResolver.active = false; - storeDisputeResolver(_disputeResolver); storeSellerAllowList(disputeResolverId, _sellerAllowList); @@ -409,9 +415,11 @@ contract DisputeResolverHandlerFacet is IBosonAccountEvents, ProtocolBase { * - Number of DisputeResolverFee structs in array exceeds max * - Number of DisputeResolverFee structs in array is zero * - DisputeResolverFee array contains duplicates + * - Fee amount is a non-zero value. Protocol doesn't yet support fees for dispute resolvers * * @param _disputeResolverId - id of the dispute resolver * @param _disputeResolverFees - list of fees dispute resolver charges per token type. Zero address is native currency. See {BosonTypes.DisputeResolverFee} + * feeAmount will be ignored because protocol doesn't yet support fees yet but DR still needs to provide array of fees to choose supported tokens */ function addFeesToDisputeResolver(uint256 _disputeResolverId, DisputeResolverFee[] calldata _disputeResolverFees) external @@ -450,6 +458,9 @@ contract DisputeResolverHandlerFacet is IBosonAccountEvents, ProtocolBase { lookups.disputeResolverFeeTokenIndex[_disputeResolverId][_disputeResolverFees[i].tokenAddress] == 0, DUPLICATE_DISPUTE_RESOLVER_FEES ); + // Protocol doesn't yet support DR fees + require(_disputeResolverFees[i].feeAmount == 0, FEE_AMOUNT_NOT_YET_SUPPORTED); + disputeResolverFees.push(_disputeResolverFees[i]); lookups.disputeResolverFeeTokenIndex[_disputeResolverId][ _disputeResolverFees[i].tokenAddress @@ -650,40 +661,6 @@ contract DisputeResolverHandlerFacet is IBosonAccountEvents, ProtocolBase { emit AllowedSellersRemoved(_disputeResolverId, _sellerAllowList, sender); } - /** - * @notice Sets the active flag for this dispute resolver to true. - * - * @dev Only callable by the protocol ADMIN role. - * - * Emits a DisputeResolverActivated event if successful. - * - * Reverts if: - * - The dispute resolvers region of protocol is paused - * - Caller does not have the ADMIN role - * - Dispute resolver does not exist - * - * @param _disputeResolverId - id of the dispute resolver - */ - function activateDisputeResolver(uint256 _disputeResolverId) - external - disputeResolversNotPaused - onlyRole(ADMIN) - nonReentrant - { - bool exists; - DisputeResolver storage disputeResolver; - - // Check dispute resolver and dispute resolver fees from disputeResolvers and disputeResolverFees mappings - (exists, disputeResolver, ) = fetchDisputeResolver(_disputeResolverId); - - // Dispute resolver must already exist - require(exists, NO_SUCH_DISPUTE_RESOLVER); - - disputeResolver.active = true; - - emit DisputeResolverActivated(_disputeResolverId, disputeResolver, msgSender()); - } - /** * @notice Gets the details about a dispute resolver. * diff --git a/docs/local-development.md b/docs/local-development.md index aba5bb96b..45a071090 100644 --- a/docs/local-development.md +++ b/docs/local-development.md @@ -78,7 +78,7 @@ This deploys all contract on the local node and prints out all the information a ### [Optional] Manage roles If you want to perform any of the following: - change any of protocol configuration parameters -- use dispute resolver, which needs to be activated by the admin +- use dispute resolver - set up other roles, needed for some functionalities of the protocol (e.g. PAUSE, FEE_COLLECTOR) you need to set up the admin account. To do it @@ -111,4 +111,4 @@ To perform the upgrade you then You can find the examples how to use all functions of the protocol in our test files in folder `test/protocol`. ### Using other npm scripts -We provide some scripts to perform other tasks in this repo (e.g. just building the contracts, testing, sizing etc.). You can find more info about it on separate page [Tasks](tasks.md). \ No newline at end of file +We provide some scripts to perform other tasks in this repo (e.g. just building the contracts, testing, sizing etc.). You can find more info about it on separate page [Tasks](tasks.md). diff --git a/docs/tasks.md b/docs/tasks.md index 8a8ed88a3..9439d974b 100644 --- a/docs/tasks.md +++ b/docs/tasks.md @@ -132,9 +132,9 @@ It outputs the list of files with errors of two types: Script will try to automatically fix the wrong interfaces if you run it with ```npm run natspec-interface-id:fix```, however this cannot fix the missing interface ids. -### Create and/or activate dispute resolver +### Create dispute resolver -Script will create and/or activate a dispute resolver +Script will create a dispute resolver **Arguments**: - `path`: Required argument with path for a JSON file containing the following @@ -148,7 +148,7 @@ Script will create and/or activate a dispute resolver "clerk": string, "treasury": string, "metadataUri": string, - "active": boolean // ignored + "active": boolean }, "disputeResolverFees": [ { @@ -162,19 +162,17 @@ Script will create and/or activate a dispute resolver } ``` - `network`: Network to run the script -- `activate-only (optional)`: Optional flag to only activate the Dispute Resolver -- `create-only (optional)`: Optional flag to only create the Dispute Resolver Note about the field `privateKey` in JSON file: -- `privateKey` represents the hex encoded private key that will create a dispute resolver. If it is not specified, the protocol admin account will be used (same account that later activate the dispute resolver and is specified in `.env`). -- If all `operator`, `admin` and `clerk` match the address, corresponding to `privateKey`, dispute resolver is simply created and activated. +- `privateKey` represents the hex encoded private key that will create a dispute resolver. If it is not specified, the protocol admin account will be used (specified in `.env`). +- If all `operator`, `admin` and `clerk` match the address, corresponding to `privateKey`, dispute resolver is simply created. - If any of `operator`, `admin` or `clerk` differs from the address, corresponding to `privateKey`, dispute resolver is created in two steps. Firstly, a dispute resolver with `operator`, `admin` and `clerk` set to address, corresponding to `privateKey` is created and then in the second step dispute resolver is updated with addresses from JSON file. Example: ``` -npx hardhat create-dispute-resolver --path "path/to/dispute_resolver.json" --network localhost --create-only +npx hardhat create-dispute-resolver --path "path/to/dispute_resolver.json" --network localhost ``` diff --git a/hardhat.config.js b/hardhat.config.js index d0992ba42..d50b01b2f 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -24,13 +24,11 @@ task("estimate-limits", "Estimates the maximum values for limits in protocol con await estimateLimits(); }); -task("create-dispute-resolver", "Creates and activates a dispute resolver") +task("create-dispute-resolver", "Creates a dispute resolver") .addParam("path", "The path to the dispute resolver json file") - .addFlag("createOnly", "Only create the dispute resolver") - .addFlag("activateOnly", "Only activate the dispute resolver") - .setAction(async ({ path, createOnly, activateOnly }) => { - const { createAndActivateDR } = await lazyImport("./scripts/util/create-and-activate-DR"); - await createAndActivateDR(path, createOnly, activateOnly); + .setAction(async ({ path }) => { + const { createDisputeResolver } = await lazyImport("./scripts/util/create-dispute-resolver"); + await createDisputeResolver(path); }); task("verify-suite", "Verify contracts on the block explorer") diff --git a/scripts/config/revert-reasons.js b/scripts/config/revert-reasons.js index f1010962f..2ef566e14 100644 --- a/scripts/config/revert-reasons.js +++ b/scripts/config/revert-reasons.js @@ -75,6 +75,7 @@ exports.RevertReasons = { "Dispute resolver fees are not present or exceed maximum dispute resolver fees in a single transaction", DUPLICATE_DISPUTE_RESOLVER_FEES: "Duplicate dispute resolver fee", DISPUTE_RESOLVER_FEE_NOT_FOUND: "Dispute resolver fee not found", + FEE_AMOUNT_NOT_YET_SUPPORTED: "Non-zero dispute resolver fees not yet supported", INVALID_AUTH_TOKEN_TYPE: "Invalid AuthTokenType", ADMIN_OR_AUTH_TOKEN: "An admin address or an auth token is required", AUTH_TOKEN_MUST_BE_UNIQUE: "Auth token cannot be assigned to another entity of the same type", diff --git a/scripts/util/create-and-activate-DR.js b/scripts/util/create-dispute-resolver.js similarity index 52% rename from scripts/util/create-and-activate-DR.js rename to scripts/util/create-dispute-resolver.js index 9fd34de8d..815882418 100644 --- a/scripts/util/create-and-activate-DR.js +++ b/scripts/util/create-dispute-resolver.js @@ -5,10 +5,9 @@ const environments = require("../../environments"); const network = hre.network.name; const confirmations = hre.network.name == "hardhat" ? 1 : environments.confirmations; const DisputeResolver = require("../../scripts/domain/DisputeResolver"); -const Role = require("../domain/Role"); /** -Create and activate a dispute resolver +Create a dispute resolver To use this script on the local network make sure to run `npm deploy-suite:local` first Usage: npx hardhat create-dispute-resolver --path path/to/json --network Path should contain a JSON file with the following: @@ -21,7 +20,7 @@ Path should contain a JSON file with the following: "clerk": string, "treasury": string, "metadataUri": string, - "active": boolean // ignored + "active": boolean }, "disputeResolverFees": [ { @@ -44,7 +43,7 @@ const addressNotFound = (address) => { process.exit(1); }; -const createAndActivateDR = async (path, createOnly, activateOnly) => { +const createDisputeResolver = async (path) => { const file = await fs.readFile(path, "utf8"); let { disputeResolver, disputeResolverFees, sellerAllowList, privateKey } = await JSON.parse(file.toString()); @@ -73,71 +72,51 @@ const createAndActivateDR = async (path, createOnly, activateOnly) => { // Cast protocol diamond to IBosonAccountHandler const accountHandler = await ethers.getContractAt("IBosonAccountHandler", protocolAddress); - // Get AccessController abstraction - const accessController = await ethers.getContractAt("AccessController", accessControllerAddress); - - const hasRole = await accessController.hasRole(Role.ADMIN, adminAddress); - - if (!hasRole) { - console.log("Admin address does not have admin role"); - process.exit(1); - } // Get signer for admin address const protocolAdminSigner = await ethers.getSigner(adminAddress); let tx, receipt; // Create dispute resolver - if (!activateOnly) { - // privateKey - let disputeResolverSigner; - - if (!privateKey) { - disputeResolverSigner = protocolAdminSigner; - } else { - disputeResolverSigner = new ethers.Wallet(privateKey, protocolAdminSigner.provider); - } + let disputeResolverSigner; - // create dispute resolver with callers account - let initialDisputeResolver = { ...disputeResolver }; - initialDisputeResolver.admin = disputeResolverSigner.address; - initialDisputeResolver.operator = disputeResolverSigner.address; - initialDisputeResolver.clerk = disputeResolverSigner.address; - - tx = await accountHandler - .connect(disputeResolverSigner) - .createDisputeResolver(initialDisputeResolver, disputeResolverFees, sellerAllowList); - receipt = await tx.wait(confirmations); - initialDisputeResolver = getDisputeResolverFromEvent(receipt.events, "DisputeResolverCreated", 1); - - // if caller does not match supplied dispute resolver, update it. - // this is primary used when one does not have access to private key of dispute resolver or it does not exist (i.e. DR is a smart contract) - if ( - initialDisputeResolver.admin.toLowerCase() != disputeResolver.admin.toLowerCase() || - initialDisputeResolver.operator.toLowerCase() != disputeResolver.operator.toLowerCase() || - initialDisputeResolver.clerk.toLowerCase() != disputeResolver.clerk.toLowerCase() - ) { - disputeResolver.id = initialDisputeResolver.id; - tx = await accountHandler.connect(disputeResolverSigner).updateDisputeResolver(disputeResolver); - receipt = await tx.wait(confirmations); - disputeResolver = getDisputeResolverFromEvent(receipt.events, "DisputeResolverUpdated", 1); - } else { - // no need to update on chain - disputeResolver = initialDisputeResolver; - } - - console.log(`Dispute resolver created with id ${disputeResolver.id}`); + if (!privateKey) { + disputeResolverSigner = protocolAdminSigner; + } else { + disputeResolverSigner = new ethers.Wallet(privateKey, protocolAdminSigner.provider); } - // Activate dispute resolver - if (!createOnly) { - tx = await accountHandler.connect(protocolAdminSigner).activateDisputeResolver(disputeResolver.id); + // create dispute resolver with callers account + let initialDisputeResolver = { ...disputeResolver }; + initialDisputeResolver.admin = disputeResolverSigner.address; + initialDisputeResolver.operator = disputeResolverSigner.address; + initialDisputeResolver.clerk = disputeResolverSigner.address; + + tx = await accountHandler + .connect(disputeResolverSigner) + .createDisputeResolver(initialDisputeResolver, disputeResolverFees, sellerAllowList); + receipt = await tx.wait(confirmations); + initialDisputeResolver = getDisputeResolverFromEvent(receipt.events, "DisputeResolverCreated", 1); + + // if caller does not match supplied dispute resolver, update it. + // this is primarily used when one does not have access to private key of dispute resolver or it does not exist (i.e. DR is a smart contract) + if ( + initialDisputeResolver.admin.toLowerCase() != disputeResolver.admin.toLowerCase() || + initialDisputeResolver.operator.toLowerCase() != disputeResolver.operator.toLowerCase() || + initialDisputeResolver.clerk.toLowerCase() != disputeResolver.clerk.toLowerCase() + ) { + disputeResolver.id = initialDisputeResolver.id; + tx = await accountHandler.connect(disputeResolverSigner).updateDisputeResolver(disputeResolver); receipt = await tx.wait(confirmations); - disputeResolver = getDisputeResolverFromEvent(receipt.events, "DisputeResolverActivated", 1); - console.log(`Dispute resolver activated`); + disputeResolver = getDisputeResolverFromEvent(receipt.events, "DisputeResolverUpdated", 1); + } else { + // no need to update on chain + disputeResolver = initialDisputeResolver; } + console.log(`Dispute resolver created with id ${disputeResolver.id}`); + console.log(disputeResolver); }; -exports.createAndActivateDR = createAndActivateDR; +exports.createDisputeResolver = createDisputeResolver; diff --git a/scripts/util/estimate-limits.js b/scripts/util/estimate-limits.js index 32eeae6bc..3ade683bc 100644 --- a/scripts/util/estimate-limits.js +++ b/scripts/util/estimate-limits.js @@ -105,9 +105,9 @@ setupEnvironment["maxAllowedSellers"] = async function (sellerCount = 10) { //Create DisputeResolverFee array const disputeResolverFees = [ - new DisputeResolverFee(other1.address, "MockToken1", "100"), - new DisputeResolverFee(other2.address, "MockToken2", "200"), - new DisputeResolverFee(other3.address, "MockToken3", "300"), + new DisputeResolverFee(other1.address, "MockToken1", "0"), + new DisputeResolverFee(other2.address, "MockToken2", "0"), + new DisputeResolverFee(other3.address, "MockToken3", "0"), ]; const sellerAllowList = [...Array(sellerCount + 1).keys()].slice(1); @@ -146,7 +146,7 @@ setupEnvironment["maxFeesPerDisputeResolver"] = async function (feesCount = 10) let disputeResolverFees = []; for (let i = 0; i < feesCount; i++) { const wallet = ethers.Wallet.createRandom(); - disputeResolverFees.push(new DisputeResolverFee(wallet.address, `MockToken${i}`, "100")); + disputeResolverFees.push(new DisputeResolverFee(wallet.address, `MockToken${i}`, "0")); } // Dispute resolver 2 - used in "addFeesToDisputeResolver" @@ -213,15 +213,10 @@ setupEnvironment["maxOffersPerBatch"] = async function (offerCount = 10) { ); await accountHandler.connect(sellerWallet3).createSeller(seller3, emptyAuthToken, voucherInitValues); - const disputeResolver = mockDisputeResolver(dr1.address, dr1.address, dr1.address, dr1.address); + const disputeResolver = mockDisputeResolver(dr1.address, dr1.address, dr1.address, dr1.address, true); await accountHandler .connect(dr1) - .createDisputeResolver( - disputeResolver, - [new DisputeResolverFee(ethers.constants.AddressZero, "Native", "100")], - [] - ); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); + .createDisputeResolver(disputeResolver, [new DisputeResolverFee(ethers.constants.AddressZero, "Native", "0")], []); const { offer, offerDates, offerDurations } = await mockOffer(); const offers = new Array(offerCount).fill(offer); @@ -302,15 +297,10 @@ setupEnvironment["maxOffersPerGroup"] = async function (offerCount = 10) { ); await accountHandler.connect(sellerWallet3).createSeller(seller3, emptyAuthToken, voucherInitValues); - const disputeResolver = mockDisputeResolver(dr1.address, dr1.address, dr1.address, dr1.address); + const disputeResolver = mockDisputeResolver(dr1.address, dr1.address, dr1.address, dr1.address, true); await accountHandler .connect(dr1) - .createDisputeResolver( - disputeResolver, - [new DisputeResolverFee(ethers.constants.AddressZero, "Native", "100")], - [] - ); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); + .createDisputeResolver(disputeResolver, [new DisputeResolverFee(ethers.constants.AddressZero, "Native", "0")], []); // Mock offer, offerDates and offerDurations const { offer, offerDates, offerDurations } = await mockOffer(); @@ -378,15 +368,10 @@ setupEnvironment["maxOffersPerBundle"] = async function (offerCount = 10) { await accountHandler.connect(sellerWallet1).createSeller(seller1, emptyAuthToken, voucherInitValues); - const disputeResolver = mockDisputeResolver(dr1.address, dr1.address, dr1.address, dr1.address); + const disputeResolver = mockDisputeResolver(dr1.address, dr1.address, dr1.address, dr1.address, true); await accountHandler .connect(dr1) - .createDisputeResolver( - disputeResolver, - [new DisputeResolverFee(ethers.constants.AddressZero, "Native", "100")], - [] - ); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); + .createDisputeResolver(disputeResolver, [new DisputeResolverFee(ethers.constants.AddressZero, "Native", "0")], []); // Mock offer, offerDates and offerDurations const { offer, offerDates, offerDurations } = await mockOffer(); @@ -443,15 +428,10 @@ setupEnvironment["maxTwinsPerBundle"] = async function (twinCount = 10) { await accountHandler.connect(sellerWallet1).createSeller(seller1, emptyAuthToken, voucherInitValues); - const disputeResolver = mockDisputeResolver(dr1.address, dr1.address, dr1.address, dr1.address); + const disputeResolver = mockDisputeResolver(dr1.address, dr1.address, dr1.address, dr1.address, true); await accountHandler .connect(dr1) - .createDisputeResolver( - disputeResolver, - [new DisputeResolverFee(ethers.constants.AddressZero, "Native", "100")], - [] - ); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); + .createDisputeResolver(disputeResolver, [new DisputeResolverFee(ethers.constants.AddressZero, "Native", "0")], []); for (let i = 0; i < twinCount; i++) { const [twinContract] = await deployMockTokens(["Foreign20"]); @@ -505,15 +485,10 @@ setupEnvironment["maxExchangesPerBatch"] = async function (exchangesCount = 10) await accountHandler.connect(sellerWallet1).createSeller(seller1, emptyAuthToken, voucherInitValues); - const disputeResolver = mockDisputeResolver(dr1.address, dr1.address, dr1.address, dr1.address); + const disputeResolver = mockDisputeResolver(dr1.address, dr1.address, dr1.address, dr1.address, true); await accountHandler .connect(dr1) - .createDisputeResolver( - disputeResolver, - [new DisputeResolverFee(ethers.constants.AddressZero, "Native", "100")], - [] - ); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); + .createDisputeResolver(disputeResolver, [new DisputeResolverFee(ethers.constants.AddressZero, "Native", "0")], []); // Create an offer with big enough quantity const { offer, offerDates, offerDurations } = await mockOffer(); @@ -572,15 +547,10 @@ setupEnvironment["maxDisputesPerBatch"] = async function (exchangesCount = 10) { await accountHandler.connect(sellerWallet1).createSeller(seller1, emptyAuthToken, voucherInitValues); - const disputeResolver = mockDisputeResolver(dr1.address, dr1.address, dr1.address, dr1.address); + const disputeResolver = mockDisputeResolver(dr1.address, dr1.address, dr1.address, dr1.address, true); await accountHandler .connect(dr1) - .createDisputeResolver( - disputeResolver, - [new DisputeResolverFee(ethers.constants.AddressZero, "Native", "100")], - [] - ); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); + .createDisputeResolver(disputeResolver, [new DisputeResolverFee(ethers.constants.AddressZero, "Native", "0")], []); // Create an offer with big enough quantity const { offer, offerDates, offerDurations } = await mockOffer(); @@ -642,15 +612,10 @@ setupEnvironment["maxTokensPerWithdrawal"] = async function (tokenCount = 10) { await accountHandler.connect(sellerWallet1).createSeller(seller1, emptyAuthToken, voucherInitValues); - const disputeResolver = mockDisputeResolver(dr1.address, dr1.address, dr1.address, dr1.address); + const disputeResolver = mockDisputeResolver(dr1.address, dr1.address, dr1.address, dr1.address, true); await accountHandler .connect(dr1) - .createDisputeResolver( - disputeResolver, - [new DisputeResolverFee(ethers.constants.AddressZero, "Native", "100")], - [] - ); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); + .createDisputeResolver(disputeResolver, [new DisputeResolverFee(ethers.constants.AddressZero, "Native", "0")], []); const { offer, offerDates, offerDurations } = await mockOffer(); offerDates.voucherRedeemableFrom = offerDates.validFrom; @@ -670,7 +635,7 @@ setupEnvironment["maxTokensPerWithdrawal"] = async function (tokenCount = 10) { // add token to DR accepted tokens await accountHandler .connect(dr1) - .addFeesToDisputeResolver(disputeResolver.id, [new DisputeResolverFee(tokenContract.address, `Token${i}`, "1")]); + .addFeesToDisputeResolver(disputeResolver.id, [new DisputeResolverFee(tokenContract.address, `Token${i}`, "0")]); // create the offer await offerHandler diff --git a/test/example/SnapshotGateTest.js b/test/example/SnapshotGateTest.js index 396d29e35..ac31f7148 100644 --- a/test/example/SnapshotGateTest.js +++ b/test/example/SnapshotGateTest.js @@ -213,7 +213,7 @@ describe("SnapshotGate", function () { adminDR.address, clerkDR.address, treasuryDR.address, - false + true ); expect(disputeResolver.isValid()).is.true; @@ -226,9 +226,8 @@ describe("SnapshotGate", function () { // Make empty seller list, so every seller is allowed const sellerAllowList = []; - // Register and activate the dispute resolver + // Register the dispute resolver await accountHandler.connect(adminDR).createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); // Manufacture snapshot for upload snapshot = []; // { owner : string; tokenId: string; amount: string }[] diff --git a/test/integration/01-update-account-roles-addresses.js b/test/integration/01-update-account-roles-addresses.js index b4d779f39..4a3bd3750 100644 --- a/test/integration/01-update-account-roles-addresses.js +++ b/test/integration/01-update-account-roles-addresses.js @@ -179,7 +179,7 @@ describe("[@skip-on-coverage] Update account roles addresses", function () { expect(disputeResolver.isValid()).is.true; //Create DisputeResolverFee array so offer creation will succeed - disputeResolverFeeNative = ethers.utils.parseUnits("1", "ether").toString(); + disputeResolverFeeNative = "0"; const disputeResolverFees = [ new DisputeResolverFee(ethers.constants.AddressZero, "Native", disputeResolverFeeNative), ]; @@ -187,11 +187,10 @@ describe("[@skip-on-coverage] Update account roles addresses", function () { // Make empty seller list, so every seller is allowed const sellerAllowList = []; - // Register and activate the dispute resolver + // Register the dispute resolver await accountHandler .connect(adminDR) .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); agentAccount = mockAgent(agent.address); expect(agentAccount.isValid()).is.true; diff --git a/test/integration/02-Upgraded-facet.js b/test/integration/02-Upgraded-facet.js index fa47ca3cd..ffd536b4a 100644 --- a/test/integration/02-Upgraded-facet.js +++ b/test/integration/02-Upgraded-facet.js @@ -240,7 +240,7 @@ describe("[@skip-on-coverage] After facet upgrade, everything is still operation adminDR.address, clerkDR.address, treasuryDR.address, - false + true ); expect(disputeResolver.isValid()).is.true; @@ -250,11 +250,10 @@ describe("[@skip-on-coverage] After facet upgrade, everything is still operation // Make empty seller list, so every seller is allowed const sellerAllowList = []; - // Register and activate the dispute resolver + // Register the dispute resolver await accountHandler .connect(adminDR) .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); // Create the offer const mo = await mockOffer(); @@ -465,21 +464,26 @@ describe("[@skip-on-coverage] After facet upgrade, everything is still operation context("📋 Dispute Handler Methods", async function () { beforeEach(async function () { // Create a valid dispute resolver - disputeResolver = mockDisputeResolver(operatorDR.address, adminDR.address, clerkDR.address, treasuryDR.address); + disputeResolver = mockDisputeResolver( + operatorDR.address, + adminDR.address, + clerkDR.address, + treasuryDR.address, + true + ); expect(disputeResolver.isValid()).is.true; //Create DisputeResolverFee array so offer creation will succeed - const DRFeeNative = ethers.utils.parseUnits("1", "ether").toString(); + const DRFeeNative = "0"; const disputeResolverFees = [new DisputeResolverFee(ethers.constants.AddressZero, "Native", DRFeeNative)]; // Make empty seller list, so every seller is allowed const sellerAllowList = []; - // Register and activate the dispute resolver + // Register the dispute resolver await accountHandler .connect(adminDR) .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); // buyer escalation deposit used in multiple tests buyerEscalationDepositNative = applyPercentage(DRFeeNative, buyerEscalationDepositPercentage); @@ -753,7 +757,7 @@ describe("[@skip-on-coverage] After facet upgrade, everything is still operation adminDR.address, clerkDR.address, treasuryDR.address, - false + true ); expect(disputeResolver.isValid()).is.true; @@ -766,11 +770,10 @@ describe("[@skip-on-coverage] After facet upgrade, everything is still operation // Make empty seller list, so every seller is allowed const sellerAllowList = []; - // Register and activate the dispute resolver + // Register the dispute resolver await accountHandler .connect(adminDR) .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); // Mock offer const { offer, offerDates, offerDurations, disputeResolverId } = await mockOffer(); diff --git a/test/integration/03-DR-removes-the-seller-from-allowed-list.js b/test/integration/03-DR-removes-the-seller-from-allowed-list.js index 95eef8fbd..6b66b79b6 100644 --- a/test/integration/03-DR-removes-the-seller-from-allowed-list.js +++ b/test/integration/03-DR-removes-the-seller-from-allowed-list.js @@ -179,21 +179,26 @@ describe("[@skip-on-coverage] DR removes sellers from the approved seller list", await accountHandler.connect(other1).createSeller(seller2, emptyAuthToken, voucherInitValues); // Create a valid dispute resolver - disputeResolver = mockDisputeResolver(operatorDR.address, adminDR.address, clerkDR.address, treasuryDR.address); + disputeResolver = mockDisputeResolver( + operatorDR.address, + adminDR.address, + clerkDR.address, + treasuryDR.address, + true + ); expect(disputeResolver.isValid()).is.true; // Create DisputeResolverFee array so offer creation will succeed - const DRFeeNative = ethers.utils.parseUnits("1", "ether").toString(); + const DRFeeNative = "0"; const disputeResolverFees = [new DisputeResolverFee(ethers.constants.AddressZero, "Native", DRFeeNative)]; // Make a sellerAllowList const sellerAllowList = ["2", "1"]; - // Register and activate the dispute resolver + // Register the dispute resolver await accountHandler .connect(adminDR) .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); // Buyer escalation deposit used in multiple tests buyerEscalationDepositNative = applyPercentage(DRFeeNative, buyerEscalationDepositPercentage); diff --git a/test/integration/04-DR-removes-fees.js b/test/integration/04-DR-removes-fees.js index 5d7cb1998..9ae4737b3 100644 --- a/test/integration/04-DR-removes-fees.js +++ b/test/integration/04-DR-removes-fees.js @@ -161,12 +161,12 @@ describe("[@skip-on-coverage] DR removes fee", function () { adminDR.address, clerkDR.address, treasuryDR.address, - false + true ); expect(disputeResolver.isValid()).is.true; //Create DisputeResolverFee array so offer creation will succeed - disputeResolverFeeNative = ethers.utils.parseUnits("1", "ether").toString(); + disputeResolverFeeNative = "0"; const disputeResolverFees = [ new DisputeResolverFee(ethers.constants.AddressZero, "Native", disputeResolverFeeNative), ]; @@ -174,9 +174,8 @@ describe("[@skip-on-coverage] DR removes fee", function () { // Make empty seller list, so every seller is allowed const sellerAllowList = []; - // Register and activate the dispute resolver + // Register the dispute resolver await accountHandler.connect(adminDR).createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); // Create a seller account ({ offer, offerDates, offerDurations, disputeResolverId } = await mockOffer()); diff --git a/test/protocol/AccountHandlerTest.js b/test/protocol/AccountHandlerTest.js index 5a5057226..e56df3403 100644 --- a/test/protocol/AccountHandlerTest.js +++ b/test/protocol/AccountHandlerTest.js @@ -172,9 +172,9 @@ describe("IBosonAccountHandler", function () { //Create DisputeResolverFee array disputeResolverFees = [ - new DisputeResolverFee(other1.address, "MockToken1", "100"), - new DisputeResolverFee(other2.address, "MockToken2", "200"), - new DisputeResolverFee(other3.address, "MockToken3", "300"), + new DisputeResolverFee(other1.address, "MockToken1", "0"), + new DisputeResolverFee(other2.address, "MockToken2", "0"), + new DisputeResolverFee(other3.address, "MockToken3", "0"), ]; // Make a sellerAllowList diff --git a/test/protocol/BundleHandlerTest.js b/test/protocol/BundleHandlerTest.js index 89572c9c7..d82ab5af0 100644 --- a/test/protocol/BundleHandlerTest.js +++ b/test/protocol/BundleHandlerTest.js @@ -236,7 +236,7 @@ describe("IBosonBundleHandler", function () { adminDR.address, clerkDR.address, treasuryDR.address, - false + true ); expect(disputeResolver.isValid()).is.true; @@ -246,11 +246,10 @@ describe("IBosonBundleHandler", function () { // Make empty seller list, so every seller is allowed const sellerAllowList = []; - // Register and activate the dispute resolver + // Register the dispute resolver await accountHandler .connect(adminDR) .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); // create 5 twins for (let i = 0; i < 5; i++) { diff --git a/test/protocol/BuyerHandlerTest.js b/test/protocol/BuyerHandlerTest.js index 4790634ce..cef835b37 100644 --- a/test/protocol/BuyerHandlerTest.js +++ b/test/protocol/BuyerHandlerTest.js @@ -430,15 +430,15 @@ describe("BuyerHandler", function () { expect(exists).is.true; // Create a valid dispute resolver - disputeResolver = mockDisputeResolver(operator.address, admin.address, clerk.address, treasury.address); + disputeResolver = mockDisputeResolver(operator.address, admin.address, clerk.address, treasury.address, true); disputeResolver.id = id.add(1).toString(); expect(disputeResolver.isValid()).is.true; //Create DisputeResolverFee array disputeResolverFees = [ - new DisputeResolverFee(other1.address, "MockToken1", "100"), - new DisputeResolverFee(other2.address, "MockToken2", "200"), - new DisputeResolverFee(other3.address, "MockToken3", "300"), + new DisputeResolverFee(other1.address, "MockToken1", "0"), + new DisputeResolverFee(other2.address, "MockToken2", "0"), + new DisputeResolverFee(other3.address, "MockToken3", "0"), new DisputeResolverFee(ethers.constants.AddressZero, "Native", "0"), ]; @@ -450,8 +450,6 @@ describe("BuyerHandler", function () { .connect(admin) .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver(++id); - // Mock the offer let { offer, offerDates, offerDurations } = await mockOffer(); diff --git a/test/protocol/DisputeHandlerTest.js b/test/protocol/DisputeHandlerTest.js index bd75d5633..0cdc45c61 100644 --- a/test/protocol/DisputeHandlerTest.js +++ b/test/protocol/DisputeHandlerTest.js @@ -235,21 +235,26 @@ describe("IBosonDisputeHandler", function () { await accountHandler.connect(admin).createSeller(seller, emptyAuthToken, voucherInitValues); // Create a valid dispute resolver - disputeResolver = mockDisputeResolver(operatorDR.address, adminDR.address, clerkDR.address, treasuryDR.address); + disputeResolver = mockDisputeResolver( + operatorDR.address, + adminDR.address, + clerkDR.address, + treasuryDR.address, + true + ); expect(disputeResolver.isValid()).is.true; //Create DisputeResolverFee array so offer creation will succeed - DRFeeNative = ethers.utils.parseUnits("1", "ether").toString(); + DRFeeNative = "0"; disputeResolverFees = [new DisputeResolverFee(ethers.constants.AddressZero, "Native", DRFeeNative)]; // Make empty seller list, so every seller is allowed const sellerAllowList = []; - // Register and activate the dispute resolver + // Register the dispute resolver await accountHandler .connect(adminDR) .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); // buyer escalation deposit used in multiple tests buyerEscalationDepositNative = applyPercentage(DRFeeNative, buyerEscalationDepositPercentage); @@ -1278,7 +1283,7 @@ describe("IBosonDisputeHandler", function () { const [mockToken] = await deployMockTokens(["Foreign20"]); // add to DR fees - DRFeeToken = ethers.utils.parseUnits("2", "ether").toString(); + DRFeeToken = "0"; await accountHandler .connect(adminDR) .addFeesToDisputeResolver(disputeResolverId, [ @@ -1475,7 +1480,7 @@ describe("IBosonDisputeHandler", function () { ); }); - it("Insufficient native currency sent", async function () { + it.skip("Insufficient native currency sent", async function () { // Attempt to escalate the dispute, expecting revert await expect( disputeHandler.connect(buyer).escalateDispute(exchangeId, { @@ -1490,12 +1495,12 @@ describe("IBosonDisputeHandler", function () { // Attempt to escalate the dispute, expecting revert await expect( disputeHandler.connect(buyer).escalateDispute(exchangeId, { - value: ethers.BigNumber.from(buyerEscalationDepositNative).sub("1").toString(), + value: ethers.BigNumber.from("1").toString(), }) ).to.revertedWith(RevertReasons.NATIVE_NOT_ALLOWED); }); - it("Token address is not a contract", async function () { + it.skip("Token address is not a contract", async function () { // prepare a disputed exchange const mockToken = await createDisputeExchangeWithToken(); @@ -1508,12 +1513,12 @@ describe("IBosonDisputeHandler", function () { ); }); - it("Token contract reverts for another reason", async function () { + it.skip("Token contract reverts for another reason", async function () { // prepare a disputed exchange const mockToken = await createDisputeExchangeWithToken(); // get rid of some tokens, so buyer has insufficient funds - await mockToken.connect(buyer).transfer(other1.address, buyerEscalationDepositNative); + await mockToken.connect(buyer).transfer(other1.address, buyerEscalationDepositToken); // Attempt to commit to an offer, expecting revert await expect(disputeHandler.connect(buyer).escalateDispute(exchangeId)).to.revertedWith( @@ -1524,13 +1529,14 @@ describe("IBosonDisputeHandler", function () { await mockToken .connect(buyer) .approve(protocolDiamond.address, ethers.BigNumber.from(buyerEscalationDepositToken).sub("1").toString()); + // Attempt to commit to an offer, expecting revert await expect(disputeHandler.connect(buyer).escalateDispute(exchangeId)).to.revertedWith( RevertReasons.ERC20_INSUFFICIENT_ALLOWANCE ); }); - it("Received ERC20 token amount differs from the expected value", async function () { + it.skip("Received ERC20 token amount differs from the expected value", async function () { // Deploy ERC20 with fees const [Foreign20WithFee] = await deployMockTokens(["Foreign20WithFee"]); @@ -1539,7 +1545,7 @@ describe("IBosonDisputeHandler", function () { await accountHandler .connect(adminDR) .addFeesToDisputeResolver(disputeResolverId, [ - new DisputeResolverFee(Foreign20WithFee.address, "Foreign20WithFee", DRFeeToken), + new DisputeResolverFee(Foreign20WithFee.address, "Foreign20WithFee", "0"), ]); // Create an offer with ERC20 with fees diff --git a/test/protocol/DisputeResolverHandlerTest.js b/test/protocol/DisputeResolverHandlerTest.js index 2acd2d9a4..dbae4dd7a 100644 --- a/test/protocol/DisputeResolverHandlerTest.js +++ b/test/protocol/DisputeResolverHandlerTest.js @@ -255,9 +255,9 @@ describe("DisputeResolverHandler", function () { //Create DisputeResolverFee array disputeResolverFees = [ - new DisputeResolverFee(other1.address, "MockToken1", "100"), - new DisputeResolverFee(other2.address, "MockToken2", "200"), - new DisputeResolverFee(other3.address, "MockToken3", "300"), + new DisputeResolverFee(other1.address, "MockToken1", "0"), + new DisputeResolverFee(other2.address, "MockToken2", "0"), + new DisputeResolverFee(other3.address, "MockToken3", "0"), ]; disputeResolverFeeList = new DisputeResolverFeeList(disputeResolverFees); @@ -271,7 +271,7 @@ describe("DisputeResolverHandler", function () { context("👉 createDisputeResolver()", async function () { beforeEach(async function () { expectedDisputeResolver = disputeResolver.clone(); - expectedDisputeResolver.active = false; + expectedDisputeResolver.active = true; expectedDisputeResolverStruct = expectedDisputeResolver.toStruct(); }); @@ -420,7 +420,7 @@ describe("DisputeResolverHandler", function () { ); // Create a dispute resolver 2 - disputeResolver2 = mockDisputeResolver(other1.address, other1.address, other1.address, other1.address, false); + disputeResolver2 = mockDisputeResolver(other1.address, other1.address, other1.address, other1.address, true); expect(disputeResolver2.isValid()).is.true; await accountHandler @@ -498,7 +498,7 @@ describe("DisputeResolverHandler", function () { expect(valid).is.true; // Create a valid dispute resolver, then set fields in tests directly - disputeResolver2 = mockDisputeResolver(other1.address, other1.address, other1.address, treasury.address, false); + disputeResolver2 = mockDisputeResolver(other1.address, other1.address, other1.address, treasury.address, true); expect(disputeResolver2.isValid()).is.true; expectedDisputeResolverStruct = disputeResolver2.toStruct(); @@ -609,10 +609,10 @@ describe("DisputeResolverHandler", function () { it("Duplicate dispute resolver fees", async function () { //Create new DisputeResolverFee array disputeResolverFees2 = [ - new DisputeResolverFee(other1.address, "MockToken1", "100"), - new DisputeResolverFee(other2.address, "MockToken2", "200"), - new DisputeResolverFee(other3.address, "MockToken3", "300"), - new DisputeResolverFee(other2.address, "MockToken2", "200"), + new DisputeResolverFee(other1.address, "MockToken1", "0"), + new DisputeResolverFee(other3.address, "MockToken3", "0"), + new DisputeResolverFee(other2.address, "MockToken2", "0"), + new DisputeResolverFee(other2.address, "MockToken2", "0"), ]; // Create a dispute resolver @@ -679,6 +679,24 @@ describe("DisputeResolverHandler", function () { accountHandler.connect(rando).createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList) ).to.revertedWith(RevertReasons.NOT_ADMIN_OPERATOR_AND_CLERK); }); + + it("Active is false", async function () { + disputeResolver.active = false; + + // Attempt to Create a DR, expecting revert + await expect( + accountHandler.connect(rando).createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList) + ).to.revertedWith(RevertReasons.MUST_BE_ACTIVE); + }); + + it("Fee amount is not 0", async function () { + disputeResolverFees[0].feeAmount = "200"; + + // Attempt to Create a DR, expecting revert + await expect( + accountHandler.connect(admin).createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList) + ).to.revertedWith(RevertReasons.FEE_AMOUNT_NOT_YET_SUPPORTED); + }); }); }); @@ -686,9 +704,9 @@ describe("DisputeResolverHandler", function () { beforeEach(async function () { //Create DisputeResolverFee array disputeResolverFees = [ - new DisputeResolverFee(other1.address, "MockToken1", "100"), - new DisputeResolverFee(other2.address, "MockToken2", "200"), - new DisputeResolverFee(other3.address, "MockToken3", "300"), + new DisputeResolverFee(other1.address, "MockToken1", "0"), + new DisputeResolverFee(other2.address, "MockToken2", "0"), + new DisputeResolverFee(other3.address, "MockToken3", "0"), ]; sellerAllowList = ["1"]; @@ -743,7 +761,7 @@ describe("DisputeResolverHandler", function () { context("👉 areSellersAllowed()", async function () { beforeEach(async function () { //Create DisputeResolverFee array - disputeResolverFees = [new DisputeResolverFee(other1.address, "MockToken1", "100")]; + disputeResolverFees = [new DisputeResolverFee(other1.address, "MockToken1", "0")]; }); it("Dispute resolver allows all sellers", async function () { @@ -804,7 +822,6 @@ describe("DisputeResolverHandler", function () { .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); expectedDisputeResolver = disputeResolver.clone(); - expectedDisputeResolver.active = false; expectedDisputeResolverStruct = expectedDisputeResolver.toStruct(); }); @@ -822,7 +839,7 @@ describe("DisputeResolverHandler", function () { disputeResolverPendingUpdateStruct = disputeResolverPendingUpdate.toStruct(); expectedDisputeResolver = disputeResolver.clone(); - expectedDisputeResolver.active = false; + expectedDisputeResolver.active = true; // Update a dispute resolver const tx = await accountHandler.connect(admin).updateDisputeResolver(disputeResolver); @@ -870,7 +887,6 @@ describe("DisputeResolverHandler", function () { expect(disputeResolver.isValid()).is.true; expectedDisputeResolver = disputeResolver.clone(); - expectedDisputeResolver.active = false; // Update dispute resolver await accountHandler.connect(admin).updateDisputeResolver(disputeResolver); @@ -975,14 +991,11 @@ describe("DisputeResolverHandler", function () { expect(JSON.stringify(returnedDisputeResolver[key]) === JSON.stringify(value)).is.true; } - //ADMIN role activates Dispute Resolver - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); - - disputeResolver.active = false; - expect(disputeResolver.isValid()).is.true; expectedDisputeResolver.active = true; expect(expectedDisputeResolver.isValid()).is.true; + disputeResolver.active = false; + // Update disupte resolver await accountHandler.connect(admin).updateDisputeResolver(disputeResolver); @@ -1003,8 +1016,6 @@ describe("DisputeResolverHandler", function () { expect(disputeResolver.isValid()).is.true; expectedDisputeResolver = disputeResolver.clone(); - expectedDisputeResolver.active = false; - disputeResolverStruct = disputeResolver.toStruct(); // Update disupte resolver @@ -1033,11 +1044,10 @@ describe("DisputeResolverHandler", function () { expect(disputeResolver2.isValid()).is.true; const expectedDisputeResolver2 = disputeResolver2.clone(); - expectedDisputeResolver2.active = false; const expectedDisputeResolverStruct2 = expectedDisputeResolver2.toStruct(); //Create DisputeResolverFee array - disputeResolverFees2 = [new DisputeResolverFee(rando.address, "RandomToken", "250")]; + disputeResolverFees2 = [new DisputeResolverFee(rando.address, "RandomToken", "0")]; const disputeResolverFeeList2 = new DisputeResolverFeeList(disputeResolverFees2); @@ -1066,7 +1076,6 @@ describe("DisputeResolverHandler", function () { disputeResolver.clerk = rando.address; disputeResolver.treasury = rando.address; disputeResolver.metadataUri = "https://ipfs.io/ipfs/updatedUri"; - disputeResolver.active = false; expect(disputeResolver.isValid()).is.true; expectedDisputeResolver = disputeResolver.clone(); @@ -1131,7 +1140,6 @@ describe("DisputeResolverHandler", function () { it("should be able to only update second time with new admin address", async function () { disputeResolver.admin = other2.address; expectedDisputeResolver = disputeResolver.clone(); - expectedDisputeResolver.active = false; expectedDisputeResolverStruct = expectedDisputeResolver.toStruct(); disputeResolverPendingUpdate.admin = other2.address; @@ -1161,7 +1169,6 @@ describe("DisputeResolverHandler", function () { disputeResolver.admin = other3.address; expectedDisputeResolver = disputeResolver.clone(); - expectedDisputeResolver.active = false; expectedDisputeResolverStruct = expectedDisputeResolver.toStruct(); disputeResolverPendingUpdate.admin = other3.address; @@ -1200,7 +1207,7 @@ describe("DisputeResolverHandler", function () { disputeResolver.operator = other1.address; disputeResolver.admin = other2.address; disputeResolver.clerk = other3.address; - disputeResolver.active = false; + disputeResolver.active = true; expect(disputeResolver.isValid()).is.true; expectedDisputeResolverStruct = disputeResolver.toStruct(); @@ -1240,7 +1247,6 @@ describe("DisputeResolverHandler", function () { .createDisputeResolver(disputeResolver2, disputeResolverFees, sellerAllowList); disputeResolver2.treasury = treasury.address; - disputeResolver2.active = false; disputeResolver2Struct = disputeResolver2.toStruct(); disputeResolverPendingUpdate.admin = ethers.constants.AddressZero; @@ -1260,7 +1266,6 @@ describe("DisputeResolverHandler", function () { disputeResolver.admin = other1.address; disputeResolver.clerk = other1.address; disputeResolver.treasury = other1.address; - disputeResolver.active = false; expect(disputeResolver.isValid()).is.true; // Treasury is the only address that doesn't need owner opt-in @@ -1489,14 +1494,13 @@ describe("DisputeResolverHandler", function () { disputeResolverStruct = disputeResolver.toStruct(); expectedDisputeResolver = disputeResolver.clone(); - expectedDisputeResolver.active = false; expectedDisputeResolverStruct = expectedDisputeResolver.toStruct(); }); it("should emit a DisputeResolverFeesAdded event", async function () { const disputeResolverFeesToAdd = [ - new DisputeResolverFee(other4.address, "MockToken4", "400"), - new DisputeResolverFee(other5.address, "MockToken5", "500"), + new DisputeResolverFee(other4.address, "MockToken4", "0"), + new DisputeResolverFee(other5.address, "MockToken5", "0"), ]; const addedDisputeResolverFeeList = new DisputeResolverFeeList(disputeResolverFeesToAdd); @@ -1521,16 +1525,16 @@ describe("DisputeResolverHandler", function () { it("should update DisputeResolverFee state only", async function () { const disputeResolverFeesToAdd = [ - new DisputeResolverFee(other4.address, "MockToken4", "400"), - new DisputeResolverFee(other5.address, "MockToken5", "500"), + new DisputeResolverFee(other4.address, "MockToken4", "0"), + new DisputeResolverFee(other5.address, "MockToken5", "0"), ]; const expectedDisputeResovlerFees = (disputeResolverFees = [ - new DisputeResolverFee(other1.address, "MockToken1", "100"), - new DisputeResolverFee(other2.address, "MockToken2", "200"), - new DisputeResolverFee(other3.address, "MockToken3", "300"), - new DisputeResolverFee(other4.address, "MockToken4", "400"), - new DisputeResolverFee(other5.address, "MockToken5", "500"), + new DisputeResolverFee(other1.address, "MockToken1", "0"), + new DisputeResolverFee(other2.address, "MockToken2", "0"), + new DisputeResolverFee(other3.address, "MockToken3", "0"), + new DisputeResolverFee(other4.address, "MockToken4", "0"), + new DisputeResolverFee(other5.address, "MockToken5", "0"), ]); const expectedDisputeResolverFeeList = new DisputeResolverFeeList(expectedDisputeResovlerFees); @@ -1623,8 +1627,8 @@ describe("DisputeResolverHandler", function () { it("Duplicate dispute resolver fees", async function () { //Add to DisputeResolverFee array - disputeResolverFees.push(new DisputeResolverFee(other4.address, "MockToken4", "400")); - disputeResolverFees.push(new DisputeResolverFee(other5.address, "MockToken5", "500")); + disputeResolverFees.push(new DisputeResolverFee(other4.address, "MockToken4", "0")); + disputeResolverFees.push(new DisputeResolverFee(other5.address, "MockToken5", "0")); disputeResolverFeeList = new DisputeResolverFeeList(disputeResolverFees); // Attempt to add fees to the dispute resolver, expecting revert @@ -1632,6 +1636,15 @@ describe("DisputeResolverHandler", function () { accountHandler.connect(admin).addFeesToDisputeResolver(disputeResolver.id, disputeResolverFees) ).to.revertedWith(RevertReasons.DUPLICATE_DISPUTE_RESOLVER_FEES); }); + + it("Fee amount is not 0", async function () { + disputeResolverFees = [new DisputeResolverFee(other4.address, "MockToken4", "200")]; + + // Attempt to Create a DR, expecting revert + await expect( + accountHandler.connect(admin).addFeesToDisputeResolver(disputeResolver.id, disputeResolverFees) + ).to.revertedWith(RevertReasons.FEE_AMOUNT_NOT_YET_SUPPORTED); + }); }); }); @@ -1645,7 +1658,6 @@ describe("DisputeResolverHandler", function () { disputeResolverStruct = disputeResolver.toStruct(); expectedDisputeResolver = disputeResolver.clone(); - expectedDisputeResolver.active = false; expectedDisputeResolverStruct = expectedDisputeResolver.toStruct(); }); @@ -1684,8 +1696,8 @@ describe("DisputeResolverHandler", function () { } const expectedDisputeResolverFees = [ - new DisputeResolverFee(other3.address, "MockToken3", "300"), - new DisputeResolverFee(other2.address, "MockToken2", "200"), + new DisputeResolverFee(other3.address, "MockToken3", "0"), + new DisputeResolverFee(other2.address, "MockToken2", "0"), ]; const expectedDisputeResolverFeeList = new DisputeResolverFeeList(expectedDisputeResolverFees); @@ -1721,8 +1733,8 @@ describe("DisputeResolverHandler", function () { } const expectedDisputeResolverFees = [ - new DisputeResolverFee(other1.address, "MockToken1", "100"), - new DisputeResolverFee(other2.address, "MockToken2", "200"), + new DisputeResolverFee(other1.address, "MockToken1", "0"), + new DisputeResolverFee(other2.address, "MockToken2", "0"), ]; const expectedDisputeResolverFeeList = new DisputeResolverFeeList(expectedDisputeResolverFees); @@ -1757,7 +1769,7 @@ describe("DisputeResolverHandler", function () { expect(JSON.stringify(returnedDisputeResolver[key]) === JSON.stringify(value)).is.true; } - const expectedisputeResolverFees = [new DisputeResolverFee(other2.address, "MockToken2", "200")]; + const expectedisputeResolverFees = [new DisputeResolverFee(other2.address, "MockToken2", "0")]; const expectedDisputeResolverFeeList = new DisputeResolverFeeList(expectedisputeResolverFees); assert.equal( @@ -1896,7 +1908,6 @@ describe("DisputeResolverHandler", function () { disputeResolverStruct = disputeResolver.toStruct(); expectedDisputeResolver = disputeResolver.clone(); - expectedDisputeResolver.active = false; expectedDisputeResolverStruct = expectedDisputeResolver.toStruct(); }); @@ -2038,7 +2049,6 @@ describe("DisputeResolverHandler", function () { disputeResolverStruct = disputeResolver.toStruct(); expectedDisputeResolver = disputeResolver.clone(); - expectedDisputeResolver.active = false; expectedDisputeResolverStruct = expectedDisputeResolver.toStruct(); await accountHandler @@ -2228,92 +2238,9 @@ describe("DisputeResolverHandler", function () { }); }); - context("👉 activateDisputeResolver()", async function () { - beforeEach(async function () { - await accountHandler - .connect(admin) - .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - - // How that dispute resolver looks as a returned struct - disputeResolverStruct = disputeResolver.toStruct(); - }); - - it("should emit a DisputeResolverActivated event", async function () { - await expect(accountHandler.connect(protocolAdmin).activateDisputeResolver(disputeResolver.id)) - .to.emit(accountHandler, "DisputeResolverActivated") - .withArgs(disputeResolver.id, disputeResolverStruct, protocolAdmin.address); - }); - - it("should update only active flag state", async function () { - // Activate disupte resolver - await accountHandler.connect(protocolAdmin).activateDisputeResolver(disputeResolver.id); - - [, disputeResolverStruct, disputeResolverFeeListStruct] = await accountHandler - .connect(rando) - .getDisputeResolver(disputeResolver.id); - - // Parse into entity - let returnedDisputeResolver = DisputeResolver.fromStruct(disputeResolverStruct); - let returnedDisputeResolverFeeList = DisputeResolverFeeList.fromStruct(disputeResolverFeeListStruct); - expect(returnedDisputeResolver.isValid()).is.true; - expect(returnedDisputeResolverFeeList.isValid()).is.true; - expect(returnedDisputeResolver.isValid()).is.true; - - // Returned values should match the input in activateDisputeResolver - for ([key, value] of Object.entries(disputeResolver)) { - expect(JSON.stringify(returnedDisputeResolver[key]) === JSON.stringify(value)).is.true; - } - assert.equal( - returnedDisputeResolverFeeList.toString(), - disputeResolverFeeList.toString(), - "Dispute Resolver Fee List is incorrect" - ); - }); - - context("💔 Revert Reasons", async function () { - it("The dispute resolvers region of protocol is paused", async function () { - // Pause the dispute resolvers region of the protocol - await pauseHandler.connect(pauser).pause([PausableRegion.DisputeResolvers]); - - // Attempt to activate a dispute resolver, expecting revert - await expect( - accountHandler.connect(protocolAdmin).activateDisputeResolver(disputeResolver.id) - ).to.revertedWith(RevertReasons.REGION_PAUSED); - }); - - it("Dispute resolver does not exist", async function () { - // Set invalid id - disputeResolver.id = "444"; - - // Attempt to activate the dispute resolver, expecting revert - await expect( - accountHandler.connect(protocolAdmin).activateDisputeResolver(disputeResolver.id) - ).to.revertedWith(RevertReasons.NO_SUCH_DISPUTE_RESOLVER); - - // Set invalid id - disputeResolver.id = "0"; - - // Attempt to activate the dispute resolver, expecting revert - await expect( - accountHandler.connect(protocolAdmin).activateDisputeResolver(disputeResolver.id) - ).to.revertedWith(RevertReasons.NO_SUCH_DISPUTE_RESOLVER); - }); - - it("Caller does not have ADMIN role", async function () { - //ADMIN role is not the same as DR's admin address - - // Attempt to activate the dispute resolver, expecting revert - await expect(accountHandler.connect(admin).activateDisputeResolver(disputeResolver.id)).to.revertedWith( - RevertReasons.ACCESS_DENIED - ); - }); - }); - }); - context("👉 optInToDisputeResolverUpdate()", function () { beforeEach(async function () { expectedDisputeResolver = disputeResolver.clone(); - expectedDisputeResolver.active = false; expectedDisputeResolverStruct = expectedDisputeResolver.toStruct(); await accountHandler @@ -2481,7 +2408,7 @@ describe("DisputeResolverHandler", function () { disputeResolver.admin = other1.address; disputeResolver.operator = other1.address; expectedDisputeResolver = disputeResolver.clone(); - expectedDisputeResolver.active = false; + expectedDisputeResolver.active = true; expectedDisputeResolverStruct = expectedDisputeResolver.toStruct(); // No pending update auth token diff --git a/test/protocol/ExchangeHandlerTest.js b/test/protocol/ExchangeHandlerTest.js index 7d933186f..2dd44747f 100644 --- a/test/protocol/ExchangeHandlerTest.js +++ b/test/protocol/ExchangeHandlerTest.js @@ -338,7 +338,7 @@ describe("IBosonExchangeHandler", function () { adminDR.address, clerkDR.address, treasuryDR.address, - false + true ); expect(disputeResolver.isValid()).is.true; @@ -348,11 +348,10 @@ describe("IBosonExchangeHandler", function () { // Make empty seller list, so every seller is allowed const sellerAllowList = []; - // Register and activate the dispute resolver + // Register the dispute resolver await accountHandler .connect(adminDR) .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); // Create the offer const mo = await mockOffer(); diff --git a/test/protocol/FundsHandlerTest.js b/test/protocol/FundsHandlerTest.js index d7f809250..e8125ee0e 100644 --- a/test/protocol/FundsHandlerTest.js +++ b/test/protocol/FundsHandlerTest.js @@ -437,7 +437,7 @@ describe("IBosonFundsHandler", function () { adminDR.address, clerkDR.address, treasuryDR.address, - false + true ); expect(disputeResolver.isValid()).is.true; @@ -450,11 +450,10 @@ describe("IBosonFundsHandler", function () { // Make empty seller list, so every seller is allowed const sellerAllowList = []; - // Register and activate the dispute resolver + // Register the dispute resolver await accountHandler .connect(adminDR) .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); // Mock offer const { offer, offerDates, offerDurations, disputeResolverId, offerFees } = await mockOffer(); @@ -1532,12 +1531,12 @@ describe("IBosonFundsHandler", function () { adminDR.address, clerkDR.address, treasuryDR.address, - false + true ); expect(disputeResolver.isValid()).is.true; //Create DisputeResolverFee array so offer creation will succeed - DRFee = ethers.utils.parseUnits("1", "ether").toString(); + DRFee = ethers.utils.parseUnits("0", "ether").toString(); disputeResolverFees = [ new DisputeResolverFee(ethers.constants.AddressZero, "Native", "0"), new DisputeResolverFee(mockToken.address, "mockToken", DRFee), @@ -1547,11 +1546,10 @@ describe("IBosonFundsHandler", function () { const sellerAllowList = []; buyerEscalationDeposit = applyPercentage(DRFee, buyerEscalationDepositPercentage); - // Register and activate the dispute resolver + // Register the dispute resolver await accountHandler .connect(adminDR) .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); const { offer, ...mo } = await mockOffer(); offer.quantityAvailable = "2"; @@ -1962,7 +1960,7 @@ describe("IBosonFundsHandler", function () { const [Foreign20WithFee] = await deployMockTokens(["Foreign20WithFee"]); // add to DR fees - DRFee = ethers.utils.parseUnits("2", "ether").toString(); + DRFee = ethers.utils.parseUnits("0", "ether").toString(); await accountHandler .connect(adminDR) .addFeesToDisputeResolver(disputeResolverId, [ diff --git a/test/protocol/GroupHandlerTest.js b/test/protocol/GroupHandlerTest.js index 73a153c5c..e358383d0 100644 --- a/test/protocol/GroupHandlerTest.js +++ b/test/protocol/GroupHandlerTest.js @@ -202,7 +202,7 @@ describe("IBosonGroupHandler", function () { adminDR.address, clerkDR.address, treasuryDR.address, - false + true ); expect(disputeResolver.isValid()).is.true; @@ -212,11 +212,10 @@ describe("IBosonGroupHandler", function () { // Make empty seller list, so every seller is allowed const sellerAllowList = []; - // Register and activate the dispute resolver + // Register the dispute resolver await accountHandler .connect(adminDR) .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); // The first group id groupId = "1"; diff --git a/test/protocol/MetaTransactionsHandlerTest.js b/test/protocol/MetaTransactionsHandlerTest.js index ad8aa6b3a..e8d37e9f9 100644 --- a/test/protocol/MetaTransactionsHandlerTest.js +++ b/test/protocol/MetaTransactionsHandlerTest.js @@ -1299,7 +1299,7 @@ describe("IBosonMetaTransactionsHandler", function () { adminDR.address, clerkDR.address, treasuryDR.address, - false + true ); expect(disputeResolver.isValid()).is.true; @@ -1311,11 +1311,10 @@ describe("IBosonMetaTransactionsHandler", function () { // Make empty seller list, so every seller is allowed sellerAllowList = []; - // Register and activate the dispute resolver + // Register the dispute resolver await accountHandler .connect(adminDR) .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); const { offer, ...mo } = await mockOffer(); ({ offerDates, offerDurations } = mo); @@ -1518,7 +1517,7 @@ describe("IBosonMetaTransactionsHandler", function () { adminDR.address, clerkDR.address, treasuryDR.address, - false + true ); expect(disputeResolver.isValid()).is.true; @@ -1531,11 +1530,10 @@ describe("IBosonMetaTransactionsHandler", function () { // Make empty seller list, so every seller is allowed sellerAllowList = []; - // Register and activate the dispute resolver + // Register the dispute resolver await accountHandler .connect(adminDR) .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); buyerId = accountId.next().value; @@ -3079,7 +3077,7 @@ describe("IBosonMetaTransactionsHandler", function () { adminDR.address, clerkDR.address, treasuryDR.address, - false + true ); expect(disputeResolver.isValid()).is.true; @@ -3089,11 +3087,10 @@ describe("IBosonMetaTransactionsHandler", function () { // Make empty seller list, so every seller is allowed sellerAllowList = []; - // Register and activate the dispute resolver + // Register the dispute resolver await accountHandler .connect(adminDR) .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); // Valid offer domains ({ offer, offerDates, offerDurations } = await mockOffer()); @@ -3317,7 +3314,7 @@ describe("IBosonMetaTransactionsHandler", function () { adminDR.address, clerkDR.address, treasuryDR.address, - false + true ); expect(disputeResolver.isValid()).is.true; @@ -3332,11 +3329,10 @@ describe("IBosonMetaTransactionsHandler", function () { // Make empty seller list, so every seller is allowed sellerAllowList = []; - // Register and activate the dispute resolver + // Register the dispute resolver await accountHandler .connect(adminDR) .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); const { offer, ...mo } = await mockOffer(); ({ offerDates, offerDurations } = mo); diff --git a/test/protocol/OfferHandlerTest.js b/test/protocol/OfferHandlerTest.js index 6a8e70a34..344326ad1 100644 --- a/test/protocol/OfferHandlerTest.js +++ b/test/protocol/OfferHandlerTest.js @@ -244,13 +244,13 @@ describe("IBosonOfferHandler", function () { adminDR.address, clerkDR.address, treasuryDR.address, - false + true ); expect(disputeResolver.isValid()).is.true; //Create DisputeResolverFee array so offer creation will succeed - DRFeeNative = "100"; - DRFeeToken = "200"; + DRFeeNative = "0"; + DRFeeToken = "0"; disputeResolverFees = [ new DisputeResolverFee(ethers.constants.AddressZero, "Native", DRFeeNative), new DisputeResolverFee(bosonToken.address, "Boson", DRFeeToken), @@ -259,11 +259,10 @@ describe("IBosonOfferHandler", function () { // Make empty seller list, so every seller is allowed sellerAllowList = []; - // Register and activate the dispute resolver + // Register the dispute resolver await accountHandler .connect(adminDR) .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); // The first offer id nextOfferId = "1"; @@ -756,7 +755,8 @@ describe("IBosonOfferHandler", function () { ).to.revertedWith(RevertReasons.INVALID_DISPUTE_RESOLVER); }); - it("Dispute resolver is not active", async function () { + // TODO - revisit when account deactivations are supported + it.skip("Dispute resolver is not active", async function () { // create another dispute resolver, but don't activate it disputeResolver = mockDisputeResolver(rando.address, rando.address, rando.address, rando.address, false); await accountHandler @@ -788,7 +788,8 @@ describe("IBosonOfferHandler", function () { ).to.revertedWith(RevertReasons.INVALID_DISPUTE_RESOLVER); }); - it("For absolute zero offer, specified dispute resolver is not active", async function () { + // TODO - revisit when account deactivations are supported + it.skip("For absolute zero offer, specified dispute resolver is not active", async function () { // create another dispute resolver, but don't activate it disputeResolver = mockDisputeResolver(rando.address, rando.address, rando.address, rando.address, false); await accountHandler @@ -1446,7 +1447,7 @@ describe("IBosonOfferHandler", function () { adminDR.address, clerkDR.address, treasuryDR.address, - false + true ); expect(disputeResolver.isValid()).is.true; @@ -1454,18 +1455,17 @@ describe("IBosonOfferHandler", function () { sellerAllowList = []; //Create DisputeResolverFee array so offer creation will succeed - DRFeeNative = "100"; - DRFeeToken = "200"; + DRFeeNative = "0"; + DRFeeToken = "0"; disputeResolverFees = [ new DisputeResolverFee(ethers.constants.AddressZero, "Native", DRFeeNative), new DisputeResolverFee(bosonToken.address, "Boson", DRFeeToken), ]; - // Register and activate the dispute resolver + // Register the dispute resolver await accountHandler .connect(adminDR) .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver(++nextAccountId); // Necessary to cover all offers resolution periods await configHandler.setMaxResolutionPeriod(oneWeek * 5); @@ -2102,7 +2102,8 @@ describe("IBosonOfferHandler", function () { ).to.revertedWith(RevertReasons.INVALID_DISPUTE_RESOLVER); }); - it("For some offer, dispute resolver is not active", async function () { + // TODO - revisit when account deactivations are supported + it.skip("For some offer, dispute resolver is not active", async function () { // create another dispute resolver, but don't activate it disputeResolver = mockDisputeResolver(rando.address, rando.address, rando.address, rando.address, false); await accountHandler @@ -2143,7 +2144,8 @@ describe("IBosonOfferHandler", function () { ).to.revertedWith(RevertReasons.INVALID_DISPUTE_RESOLVER); }); - it("For some absolute zero offer, specified dispute resolver is not active", async function () { + // TODO - revisit when account deactivations are supported + it.skip("For some absolute zero offer, specified dispute resolver is not active", async function () { // create another dispute resolver, but don't activate it disputeResolver = mockDisputeResolver(rando.address, rando.address, rando.address, rando.address, false); await accountHandler diff --git a/test/protocol/OrchestrationHandlerTest.js b/test/protocol/OrchestrationHandlerTest.js index aa01dc3bb..b7cf0c757 100644 --- a/test/protocol/OrchestrationHandlerTest.js +++ b/test/protocol/OrchestrationHandlerTest.js @@ -253,13 +253,13 @@ describe("IBosonOrchestrationHandler", function () { adminDR.address, clerkDR.address, treasuryDR.address, - false + true ); expect(disputeResolver.isValid()).is.true; - //Create DisputeResolverFee array so offer creation will succeed - DRFeeNative = "100"; - DRFeeToken = "200"; + // Create DisputeResolverFee array so offer creation will succeed + DRFeeNative = "0"; + DRFeeToken = "0"; disputeResolverFees = [ new DisputeResolverFee(ethers.constants.AddressZero, "Native", DRFeeNative), new DisputeResolverFee(bosonToken.address, "Boson", DRFeeToken), @@ -268,11 +268,10 @@ describe("IBosonOrchestrationHandler", function () { // Make empty seller list, so every seller is allowed sellerAllowList = []; - // Register and activate the dispute resolver + // Register the dispute resolver await accountHandler .connect(adminDR) .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver(disputeResolver.id); // Create a valid seller, then set fields in tests directly seller = mockSeller(operator.address, operator.address, clerk.address, treasury.address); @@ -1451,7 +1450,8 @@ describe("IBosonOrchestrationHandler", function () { ).to.revertedWith(RevertReasons.INVALID_DISPUTE_RESOLVER); }); - it("Dispute resolver is not active", async function () { + // TODO - revisit when account deactivations are supported + it.skip("Dispute resolver is not active", async function () { // create another dispute resolver, but don't activate it disputeResolver = mockDisputeResolver(rando.address, rando.address, rando.address, rando.address, false); disputeResolver.id = "2"; // mock id is 3 because seller was mocked first but here we are creating dispute resolver first @@ -1499,7 +1499,8 @@ describe("IBosonOrchestrationHandler", function () { ).to.revertedWith(RevertReasons.INVALID_DISPUTE_RESOLVER); }); - it("For absolute zero offer, specified dispute resolver is not active", async function () { + // TODO - revisit when account deactivations are supported + it.skip("For absolute zero offer, specified dispute resolver is not active", async function () { // create another dispute resolver, but don't activate it disputeResolver = mockDisputeResolver(rando.address, rando.address, rando.address, rando.address, false); disputeResolver.id = "2"; // mock id is 3 because seller was mocked first but here we are creating dispute resolver first diff --git a/test/protocol/clients/BosonVoucher.js b/test/protocol/clients/BosonVoucher.js index 712f47134..e44da94db 100644 --- a/test/protocol/clients/BosonVoucher.js +++ b/test/protocol/clients/BosonVoucher.js @@ -260,7 +260,7 @@ describe("IBosonVoucher", function () { adminDR.address, clerkDR.address, treasuryDR.address, - false + true ); expect(disputeResolver.isValid()).is.true; @@ -270,11 +270,10 @@ describe("IBosonVoucher", function () { // Make empty seller list, so every seller is allowed const sellerAllowList = []; - // Register and activate the dispute resolver + // Register the dispute resolver await accountHandler .connect(adminDR) .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver("2"); const { offer, offerDates, offerDurations, disputeResolverId } = await mockOffer(); await offerHandler @@ -399,7 +398,7 @@ describe("IBosonVoucher", function () { adminDR.address, clerkDR.address, treasuryDR.address, - false + true ); expect(disputeResolver.isValid()).is.true; @@ -409,11 +408,10 @@ describe("IBosonVoucher", function () { // Make empty seller list, so every seller is allowed const sellerAllowList = []; - // Register and activate the dispute resolver + // Register the dispute resolver await accountHandler .connect(adminDR) .createDisputeResolver(disputeResolver, disputeResolverFees, sellerAllowList); - await accountHandler.connect(deployer).activateDisputeResolver("2"); const { offer, offerDates, offerDurations, disputeResolverId } = await mockOffer(); await offerHandler