diff --git a/CHANGELOG.md b/CHANGELOG.md index 49f837ac7..9f8f9173b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,9 +3,11 @@ ## vNEXT - Migrate proxy to Diamond pattern (ERC-2535): + - Remove ENS module (#225) - Add Diamond contract unit tests (#224) - Fix `fallback` and `receive` (#223) - Migrate contracts (#222) + - Add Github Action CI in order to publish NPM package ### Updated contracts diff --git a/contracts/Diamond.sol b/contracts/Diamond.sol index 45a5299f9..f581919cd 100644 --- a/contracts/Diamond.sol +++ b/contracts/Diamond.sol @@ -14,11 +14,11 @@ pragma solidity ^0.8.0; // `receive` and `fallback` calls to the implementations in facets. // See diff at: https://github.com/iExecBlockchainComputing/PoCo/pull/223/commits/0562f982 -import { LibDiamond } from "@mudgen/diamond-1/contracts/libraries/LibDiamond.sol"; -import { IDiamondCut } from "@mudgen/diamond-1/contracts/interfaces/IDiamondCut.sol"; -import { IDiamondLoupe } from "@mudgen/diamond-1/contracts/interfaces/IDiamondLoupe.sol"; -import { IERC173 } from "@mudgen/diamond-1/contracts/interfaces/IERC173.sol"; -import { IERC165} from "@mudgen/diamond-1/contracts/interfaces/IERC165.sol"; +import {LibDiamond} from "@mudgen/diamond-1/contracts/libraries/LibDiamond.sol"; +import {IDiamondCut} from "@mudgen/diamond-1/contracts/interfaces/IDiamondCut.sol"; +import {IDiamondLoupe} from "@mudgen/diamond-1/contracts/interfaces/IDiamondLoupe.sol"; +import {IERC173} from "@mudgen/diamond-1/contracts/interfaces/IERC173.sol"; +import {IERC165} from "@mudgen/diamond-1/contracts/interfaces/IERC165.sol"; // When no function exists for function called error FunctionNotFound(bytes4 _functionSelector); @@ -33,7 +33,6 @@ struct DiamondArgs { } contract Diamond { - constructor(IDiamondCut.FacetCut[] memory _diamondCut, DiamondArgs memory _args) payable { LibDiamond.setContractOwner(_args.owner); LibDiamond.diamondCut(_diamondCut, _args.init, _args.initCalldata); @@ -45,7 +44,7 @@ contract Diamond { * `fallback` function must be added to the diamond with selector `0xffffffff`. * The function is defined in IexecEscrow(Native/Token) facet. */ - fallback() external payable{ + fallback() external payable { _fallback(); } @@ -71,25 +70,25 @@ contract Diamond { if (facet == address(0)) { facet = ds.facetAddressAndSelectorPosition[0xffffffff].facetAddress; } - if(facet == address(0)) { + if (facet == address(0)) { revert FunctionNotFound(msg.sig); } // Execute external function from facet using delegatecall and return any value. assembly { // copy function selector and any arguments calldatacopy(0, 0, calldatasize()) - // execute function call using the facet + // execute function call using the facet let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0) // get any return value returndatacopy(0, 0, returndatasize()) // return any return value or error back to the caller switch result - case 0 { - revert(0, returndatasize()) - } - default { - return(0, returndatasize()) - } + case 0 { + revert(0, returndatasize()) + } + default { + return(0, returndatasize()) + } } } } diff --git a/contracts/IexecInterfaceNative.sol b/contracts/IexecInterfaceNative.sol index c7a3f35d2..8ed2d3d79 100644 --- a/contracts/IexecInterfaceNative.sol +++ b/contracts/IexecInterfaceNative.sol @@ -30,21 +30,17 @@ import "./modules/interfaces/IexecPoco1.sol"; import "./modules/interfaces/IexecPoco2.sol"; import "./modules/interfaces/IexecRelay.sol"; import "./modules/interfaces/IexecTokenSpender.sol"; -import "./modules/interfaces/ENSIntegration.sol"; - interface IexecInterfaceNative is - IOwnable, - IexecAccessors, - IexecCategoryManager, - IexecERC20, - IexecEscrowNative, - IexecMaintenance, - IexecOrderManagement, - IexecPoco1, - IexecPoco2, - IexecRelay, - IexecTokenSpender, - ENSIntegration -{ -} + IOwnable, + IexecAccessors, + IexecCategoryManager, + IexecERC20, + IexecEscrowNative, + IexecMaintenance, + IexecOrderManagement, + IexecPoco1, + IexecPoco2, + IexecRelay, + IexecTokenSpender +{} diff --git a/contracts/IexecInterfaceNativeABILegacy.sol b/contracts/IexecInterfaceNativeABILegacy.sol index 141068e9a..0a266ccaa 100644 --- a/contracts/IexecInterfaceNativeABILegacy.sol +++ b/contracts/IexecInterfaceNativeABILegacy.sol @@ -31,22 +31,18 @@ import "./modules/interfaces/IexecPoco1.sol"; import "./modules/interfaces/IexecPoco2.sol"; import "./modules/interfaces/IexecRelay.sol"; import "./modules/interfaces/IexecTokenSpender.sol"; -import "./modules/interfaces/ENSIntegration.sol"; - interface IexecInterfaceNativeABILegacy is - IOwnable, - IexecAccessors, - IexecAccessorsABILegacy, - IexecCategoryManager, - IexecERC20, - IexecEscrowNative, - IexecMaintenance, - IexecOrderManagement, - IexecPoco1, - IexecPoco2, - IexecRelay, - IexecTokenSpender, - ENSIntegration -{ -} + IOwnable, + IexecAccessors, + IexecAccessorsABILegacy, + IexecCategoryManager, + IexecERC20, + IexecEscrowNative, + IexecMaintenance, + IexecOrderManagement, + IexecPoco1, + IexecPoco2, + IexecRelay, + IexecTokenSpender +{} diff --git a/contracts/IexecInterfaceToken.sol b/contracts/IexecInterfaceToken.sol index 550c6bc86..59c2a99d2 100644 --- a/contracts/IexecInterfaceToken.sol +++ b/contracts/IexecInterfaceToken.sol @@ -31,24 +31,21 @@ import "./modules/interfaces/IexecPoco1.sol"; import "./modules/interfaces/IexecPoco2.sol"; import "./modules/interfaces/IexecRelay.sol"; import "./modules/interfaces/IexecTokenSpender.sol"; -import "./modules/interfaces/ENSIntegration.sol"; - interface IexecInterfaceToken is - IOwnable, - IexecAccessors, - IexecCategoryManager, - IexecERC20, - IexecEscrowToken, - IexecEscrowTokenSwap, - IexecMaintenance, - IexecOrderManagement, - IexecPoco1, - IexecPoco2, - IexecRelay, - IexecTokenSpender, - ENSIntegration + IOwnable, + IexecAccessors, + IexecCategoryManager, + IexecERC20, + IexecEscrowToken, + IexecEscrowTokenSwap, + IexecMaintenance, + IexecOrderManagement, + IexecPoco1, + IexecPoco2, + IexecRelay, + IexecTokenSpender { - receive() external override(IexecEscrowToken, IexecEscrowTokenSwap) payable; - fallback() external override(IexecEscrowToken, IexecEscrowTokenSwap) payable; + receive() external payable override(IexecEscrowToken, IexecEscrowTokenSwap); + fallback() external payable override(IexecEscrowToken, IexecEscrowTokenSwap); } diff --git a/contracts/IexecInterfaceTokenABILegacy.sol b/contracts/IexecInterfaceTokenABILegacy.sol index d1baf6275..d9dd25308 100644 --- a/contracts/IexecInterfaceTokenABILegacy.sol +++ b/contracts/IexecInterfaceTokenABILegacy.sol @@ -32,25 +32,22 @@ import "./modules/interfaces/IexecPoco1.sol"; import "./modules/interfaces/IexecPoco2.sol"; import "./modules/interfaces/IexecRelay.sol"; import "./modules/interfaces/IexecTokenSpender.sol"; -import "./modules/interfaces/ENSIntegration.sol"; - interface IexecInterfaceTokenABILegacy is - IOwnable, - IexecAccessors, - IexecAccessorsABILegacy, - IexecCategoryManager, - IexecERC20, - IexecEscrowToken, - IexecEscrowTokenSwap, - IexecMaintenance, - IexecOrderManagement, - IexecPoco1, - IexecPoco2, - IexecRelay, - IexecTokenSpender, - ENSIntegration + IOwnable, + IexecAccessors, + IexecAccessorsABILegacy, + IexecCategoryManager, + IexecERC20, + IexecEscrowToken, + IexecEscrowTokenSwap, + IexecMaintenance, + IexecOrderManagement, + IexecPoco1, + IexecPoco2, + IexecRelay, + IexecTokenSpender { - receive() external override(IexecEscrowToken, IexecEscrowTokenSwap) payable; - fallback() external override(IexecEscrowToken, IexecEscrowTokenSwap) payable; + receive() external payable override(IexecEscrowToken, IexecEscrowTokenSwap); + fallback() external payable override(IexecEscrowToken, IexecEscrowTokenSwap); } diff --git a/contracts/modules/delegates/ENSIntegrationDelegate.sol b/contracts/modules/delegates/ENSIntegrationDelegate.sol deleted file mode 100644 index 8f6a7ac5c..000000000 --- a/contracts/modules/delegates/ENSIntegrationDelegate.sol +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 - -/****************************************************************************** - * Copyright 2020 IEXEC BLOCKCHAIN TECH * - * * - * 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. * - ******************************************************************************/ - -pragma solidity ^0.6.0; -pragma experimental ABIEncoderV2; - -import "@iexec/solidity/contracts/ENStools/ENSReverseRegistration.sol"; -import "../DelegateBase.sol"; -import "../interfaces/ENSIntegration.sol"; - -// TODO don't deploy this as ENSReverseRegistration.ADDR_REVERSE_NODE is not defined on Arbitrum. -// TODO update this to use ENS on Arbitrum (update everywhere this is used). -contract ENSIntegrationDelegate is ENSIntegration, ENSReverseRegistration, DelegateBase -{ - function setName(address _ens, string calldata _name) - external override onlyOwner() - { - _setName(IENS(_ens), _name); - } -} diff --git a/contracts/modules/interfaces/ENSIntegration.sol b/contracts/modules/interfaces/ENSIntegration.sol deleted file mode 100644 index cafc1a579..000000000 --- a/contracts/modules/interfaces/ENSIntegration.sol +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 - -/****************************************************************************** - * Copyright 2020 IEXEC BLOCKCHAIN TECH * - * * - * 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. * - ******************************************************************************/ - -pragma solidity ^0.6.0; -pragma experimental ABIEncoderV2; - - -interface ENSIntegration -{ - function setName(address ens, string calldata name) external; -} diff --git a/contracts/registries/Registry.sol b/contracts/registries/Registry.sol index 9537a2a47..806e7c0f4 100644 --- a/contracts/registries/Registry.sol +++ b/contracts/registries/Registry.sol @@ -18,76 +18,62 @@ pragma solidity ^0.6.0; -import "@iexec/solidity/contracts/ENStools/ENSReverseRegistration.sol"; import "@iexec/solidity/contracts/Upgradeability/InitializableUpgradeabilityProxy.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/utils/Create2.sol"; import "./IRegistry.sol"; +abstract contract Registry is IRegistry, ERC721, Ownable { + address public master; + bytes public proxyCode; + bytes32 public proxyCodeHash; + IRegistry public previous; + bool public initialized; -abstract contract Registry is IRegistry, ERC721, ENSReverseRegistration, Ownable -{ - address public master; - bytes public proxyCode; - bytes32 public proxyCodeHash; - IRegistry public previous; - bool public initialized; + constructor( + address _master, + string memory _name, + string memory _symbol + ) public ERC721(_name, _symbol) { + master = _master; + proxyCode = type(InitializableUpgradeabilityProxy).creationCode; + proxyCodeHash = keccak256(proxyCode); + } - constructor(address _master, string memory _name, string memory _symbol) - public ERC721(_name, _symbol) - { - master = _master; - proxyCode = type(InitializableUpgradeabilityProxy).creationCode; - proxyCodeHash = keccak256(proxyCode); - } + function initialize(address _previous) external onlyOwner { + require(!initialized); + initialized = true; + previous = IRegistry(_previous); + } - function initialize(address _previous) - external onlyOwner() - { - require(!initialized); - initialized = true; - previous = IRegistry(_previous); - } + /* Factory */ + function _mintCreate(address _owner, bytes memory _args) internal returns (uint256) { + // Create entry (proxy) + address entry = Create2.deploy(0, keccak256(abi.encodePacked(_args, _owner)), proxyCode); + // Initialize entry (casting to address payable is a pain in ^0.5.0) + InitializableUpgradeabilityProxy(payable(entry)).initialize(master, _args); + // Mint corresponding token + _mint(_owner, uint256(entry)); + return uint256(entry); + } - /* Factory */ - function _mintCreate(address _owner, bytes memory _args) - internal returns (uint256) - { - // Create entry (proxy) - address entry = Create2.deploy(0, keccak256(abi.encodePacked(_args, _owner)), proxyCode); - // Initialize entry (casting to address payable is a pain in ^0.5.0) - InitializableUpgradeabilityProxy(payable(entry)).initialize(master, _args); - // Mint corresponding token - _mint(_owner, uint256(entry)); - return uint256(entry); - } + function _mintPredict(address _owner, bytes memory _args) internal view returns (uint256) { + address entry = Create2.computeAddress( + keccak256(abi.encodePacked(_args, _owner)), + proxyCodeHash + ); + return uint256(entry); + } - function _mintPredict(address _owner, bytes memory _args) - internal view returns (uint256) - { - address entry = Create2.computeAddress(keccak256(abi.encodePacked(_args, _owner)), proxyCodeHash); - return uint256(entry); - } + function setBaseURI(string calldata _baseURI) external onlyOwner { + _setBaseURI(_baseURI); + } - /* Administration */ - function setName(address _ens, string calldata _name) - external onlyOwner() - { - // TODO update this as ENSReverseRegistration.ADDR_REVERSE_NODE is not defined on Arbitrum. - _setName(IENS(_ens), _name); - } - - function setBaseURI(string calldata _baseURI) - external onlyOwner() - { - _setBaseURI(_baseURI); - } - - /* Interface */ - function isRegistered(address _entry) - external view override returns (bool) - { - return _exists(uint256(_entry)) || (address(previous) != address(0) && previous.isRegistered(_entry)); - } + /* Interface */ + function isRegistered(address _entry) external view override returns (bool) { + return + _exists(uint256(_entry)) || + (address(previous) != address(0) && previous.isRegistered(_entry)); + } } diff --git a/contracts/registries/RegistryEntry.sol b/contracts/registries/RegistryEntry.sol index 6e63c61dd..696d6d5d6 100644 --- a/contracts/registries/RegistryEntry.sol +++ b/contracts/registries/RegistryEntry.sol @@ -18,35 +18,22 @@ pragma solidity ^0.6.0; -import "@iexec/solidity/contracts/ENStools/ENSReverseRegistration.sol"; import "./Registry.sol"; +abstract contract RegistryEntry { + IRegistry public registry; -abstract contract RegistryEntry is ENSReverseRegistration -{ - IRegistry public registry; + function _initialize(address _registry) internal { + require(address(registry) == address(0), "already initialized"); + registry = IRegistry(_registry); + } - function _initialize(address _registry) internal - { - require(address(registry) == address(0), 'already initialized'); - registry = IRegistry(_registry); - } + function owner() public view returns (address) { + return registry.ownerOf(uint256(address(this))); + } - function owner() public view returns (address) - { - return registry.ownerOf(uint256(address(this))); - } - - modifier onlyOwner() - { - require(owner() == msg.sender, 'caller is not the owner'); - _; - } - - function setName(address _ens, string calldata _name) - external onlyOwner() - { - // TODO update this as ENSReverseRegistration.ADDR_REVERSE_NODE is not defined on Arbitrum. - _setName(IENS(_ens), _name); - } + modifier onlyOwner() { + require(owner() == msg.sender, "caller is not the owner"); + _; + } } diff --git a/deploy/0_deploy.ts b/deploy/0_deploy.ts index d6b0ddcfe..effa6ab6c 100644 --- a/deploy/0_deploy.ts +++ b/deploy/0_deploy.ts @@ -3,7 +3,7 @@ import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { ZeroAddress, ZeroHash } from 'ethers'; -import hre, { deployments, ethers } from 'hardhat'; +import { deployments, ethers } from 'hardhat'; import { FacetCut, FacetCutAction } from 'hardhat-deploy/dist/types'; import { AppRegistry__factory, @@ -13,7 +13,6 @@ import { DiamondLoupeFacet, DiamondLoupeFacet__factory, Diamond__factory, - ENSIntegrationDelegate__factory, IexecAccessorsABILegacyDelegate__factory, IexecAccessorsDelegate__factory, IexecAccessors__factory, @@ -32,16 +31,15 @@ import { IexecPocoBoostAccessorsDelegate__factory, IexecPocoBoostDelegate__factory, IexecRelayDelegate__factory, - LibDiamond__factory, OwnershipFacet__factory, RLC__factory, WorkerpoolRegistry__factory, } from '../typechain'; +import { DiamondArgsStruct } from '../typechain/@mudgen/diamond-1/contracts/Diamond'; import { Ownable__factory } from '../typechain/factories/@openzeppelin/contracts/access'; import { FactoryDeployer } from '../utils/FactoryDeployer'; import config from '../utils/config'; import { getFunctionSelectors, linkContractToProxy } from '../utils/proxy-tools'; -import { DiamondArgsStruct } from '../typechain/@mudgen/diamond-1/contracts/Diamond'; import { getLibDiamondConfigOrEmpty } from '../utils/tools'; let factoryDeployer: FactoryDeployer; @@ -98,7 +96,6 @@ export default async function deploy() { new IexecPoco1Delegate__factory(iexecLibOrders), new IexecPoco2Delegate__factory(), new IexecRelayDelegate__factory(), - new ENSIntegrationDelegate__factory(), new IexecMaintenanceExtraDelegate__factory(), new IexecPocoAccessorsDelegate__factory(iexecLibOrders), new IexecPocoBoostDelegate__factory(iexecLibOrders), diff --git a/deploy/1_deploy-ens.ts b/deploy/1_deploy-ens.ts deleted file mode 100644 index 4527fd95b..000000000 --- a/deploy/1_deploy-ens.ts +++ /dev/null @@ -1,144 +0,0 @@ -// SPDX-FileCopyrightText: 2024-2025 IEXEC BLOCKCHAIN TECH -// SPDX-License-Identifier: Apache-2.0 - -import { ZeroHash } from 'ethers'; -import { deployments, ethers } from 'hardhat'; -import { - ENS, - ENSIntegration__factory, - ENSRegistry__factory, - FIFSRegistrar, - FIFSRegistrar__factory, - IexecAccessors__factory, - PublicResolver, - PublicResolver__factory, - ReverseRegistrar, - ReverseRegistrar__factory, -} from '../typechain'; -import { deploy } from '../utils/deploy-tools'; - -export default async function deployEns() { - console.log('Deploying and configuring ENS..'); - const chainId = (await ethers.provider.getNetwork()).chainId; - if (chainId < 1000) { - // skip ENS setup for mainnet and testnet - console.log('Skipping ENS for public networks'); - return; - } - const [owner] = await ethers.getSigners(); - const erc1538ProxyAddress = (await deployments.get('Diamond')).address; - const iexecAccessorsInstance = IexecAccessors__factory.connect(erc1538ProxyAddress, owner); - const appRegistryAddress = await iexecAccessorsInstance.appregistry(); - const datasetRegistryAddress = await iexecAccessorsInstance.datasetregistry(); - const workerpoolRegistryAddress = await iexecAccessorsInstance.workerpoolregistry(); - const ens = (await deploy(new ENSRegistry__factory(), owner, [])) as ENS; - const ensAddress = await ens.getAddress(); - const resolver = (await deploy(new PublicResolver__factory(), owner, [ - ensAddress, - ])) as PublicResolver; - const resolverAddress = await resolver.getAddress(); - const reverseRegistrar = (await deploy(new ReverseRegistrar__factory(), owner, [ - ensAddress, - resolverAddress, - ])) as ReverseRegistrar; - const registrars: { [name: string]: FIFSRegistrar } = {}; - // root registrar - await registerDomain(''); - await registrars[''].register(labelhash('reverse'), owner.address).then((tx) => tx.wait()); - await ens - .setSubnodeOwner( - ethers.namehash('reverse'), - labelhash('addr'), - await reverseRegistrar.getAddress(), - ) - .then((tx) => tx.wait()); - await registerDomain('eth'); - await registerDomain('iexec', 'eth'); - await registerDomain('v5', 'iexec.eth'); - await registerDomain('users', 'iexec.eth'); - await registerDomain('apps', 'iexec.eth'); - await registerDomain('datasets', 'iexec.eth'); - await registerDomain('pools', 'iexec.eth'); - await registerAddress('admin', 'iexec.eth', owner.address); - await registerAddress('rlc', 'iexec.eth', await iexecAccessorsInstance.token()); - await registerAddress('core', 'v5.iexec.eth', erc1538ProxyAddress); - await registerAddress('apps', 'v5.iexec.eth', appRegistryAddress); - await registerAddress('datasets', 'v5.iexec.eth', datasetRegistryAddress); - await registerAddress('workerpools', 'v5.iexec.eth', workerpoolRegistryAddress); - await reverseRegistrar.setName('admin.iexec.eth').then((tx) => tx.wait()); - await setReverseName(erc1538ProxyAddress, 'core.v5.iexec.eth'); - await setReverseName(appRegistryAddress, 'apps.v5.iexec.eth'); - await setReverseName(datasetRegistryAddress, 'datasets.v5.iexec.eth'); - await setReverseName(workerpoolRegistryAddress, 'workerpools.v5.iexec.eth'); - - /** - * Register domain on ENS. - */ - async function registerDomain(label: string, domain: string = ''): Promise { - const name = domain ? `${label}.${domain}` : `${label}`; - const labelHash = label ? labelhash(label) : ZeroHash; - const nameHash = name ? ethers.namehash(name) : ZeroHash; - const existingRegistrarAddress = await ens.owner(nameHash); - let registrar; - let registrarAddress; - if ((await ethers.provider.getCode(existingRegistrarAddress)) == '0x') { - registrar = (await deploy(new FIFSRegistrar__factory(), owner, [ensAddress, nameHash], { - quiet: true, - })) as FIFSRegistrar; - registrarAddress = await registrar.getAddress(); - if (!!name) { - await registrars[domain] - .register(labelHash, registrarAddress) - .then((tx) => tx.wait()); - } else { - await ens.setOwner(nameHash, registrarAddress).then((tx) => tx.wait()); - } - } else { - registrar = FIFSRegistrar__factory.connect(existingRegistrarAddress, ethers.provider); - registrarAddress = await registrar.getAddress(); - } - registrars[name] = registrar; - console.log(`FIFSRegistrar for domain ${name}: ${registrarAddress}`); - return registrar; - } - - /** - * Register address on ENS. - */ - async function registerAddress(label: string, domain: string, address: string) { - const name = `${label}.${domain}`; - const labelHash = labelhash(label); - const nameHash = ethers.namehash(name); - // register as subdomain - await registrars[domain] - .connect(owner) - .register(labelHash, owner.address) - .then((tx) => tx.wait()); - // link to ens (resolver & addr) - await ens - .connect(owner) - .setResolver(nameHash, resolverAddress) - .then((tx) => tx.wait()); - await resolver - .connect(owner) - ['setAddr(bytes32,uint256,bytes)'](nameHash, 60, address) - .then((tx) => tx.wait()); - } - - /** - * Set ENS reverse name of contract. - */ - async function setReverseName(contractAddress: string, name: string) { - await ENSIntegration__factory.connect(contractAddress, owner) - .setName(ensAddress, name) - .then((tx) => tx.wait()); - } - - /** - * Hash a label for the ENS. - * See: https://docs.ens.domains/resolution/names#labelhash - */ - function labelhash(label: string) { - return ethers.id(label.toLowerCase()); - } -} diff --git a/docs/ENS-Addresses.md b/docs/ENS-Addresses.md deleted file mode 100644 index e99dcc0ce..000000000 --- a/docs/ENS-Addresses.md +++ /dev/null @@ -1,31 +0,0 @@ -# ENS Addresses in iExec PoCo - -This document describes the ENS (Ethereum Name Service) addresses used in the iExec Protocol. - -## Domain Structure - -The iExec protocol uses the following ENS domain hierarchy: -- Root domain: `iexec.eth` -- Protocol version domain: `v5.iexec.eth` -- User domain: `users.iexec.eth` -- Resource domains: - - `apps.iexec.eth` - - `datasets.iexec.eth` - - `pools.iexec.eth` - -## Core Protocol Addresses - -The following ENS names are registered for core protocol components: - -- `admin.iexec.eth` - Protocol administrator address -- `rlc.iexec.eth` - RLC token contract address -- `core.v5.iexec.eth` - Core protocol proxy (ERC1538Proxy) - - `0x3eca1B216A7DF1C7689aEb259fFB83ADFB894E7f` -- `apps.v5.iexec.eth` - App registry contract - - `0xB1C52075b276f87b1834919167312221d50c9D16` -- `datasets.v5.iexec.eth` - Dataset registry contract - - `0x799DAa22654128d0C64d5b79eac9283008158730` -- `workerpools.v5.iexec.eth` - Workerpool registry contract - - `0xC76A18c78B7e530A165c5683CB1aB134E21938B4` - -To get more details, see [1_deploy-ens.ts script](../deploy/1_deploy-ens.ts). diff --git a/docs/README.md b/docs/README.md index 20077ec3d..335d9efbc 100644 --- a/docs/README.md +++ b/docs/README.md @@ -24,6 +24,3 @@ * Nominal TEE [![Nominal TEE](https://tinyurl.com/2zubyfvw)](https://tinyurl.com/2zubyfvw) - -# ENS -Registered ENS names on Bellecour or Mainnet are documented in [./ENS-Addresses.md](./ENS-Addresses.md) \ No newline at end of file diff --git a/docs/solidity/index.md b/docs/solidity/index.md index 38b2e9b16..51f49fa2f 100644 --- a/docs/solidity/index.md +++ b/docs/solidity/index.md @@ -4,8 +4,6 @@ ### Account -Tools - ```solidity struct Account { uint256 stake; @@ -25,8 +23,6 @@ struct Category { ### Resource -Clerk - Deals - ```solidity struct Resource { address pointer; @@ -60,8 +56,6 @@ struct Deal { ### DealBoost -Simplified deals for PoCo Boost module. - ```solidity struct DealBoost { address appOwner; @@ -83,8 +77,6 @@ struct DealBoost { ### TaskStatusEnum -Tasks - ```solidity enum TaskStatusEnum { UNSET, @@ -119,8 +111,6 @@ struct Task { ### Consensus -Consensus - ```solidity struct Consensus { mapping(bytes32 => uint256) group; @@ -130,8 +120,6 @@ struct Consensus { ### ContributionStatusEnum -Consensus - ```solidity enum ContributionStatusEnum { UNSET, @@ -398,589 +386,499 @@ function hash(struct IexecLibOrders_v5.RequestOrderOperation _requestorderoperat ## DelegateBase -_Every module must inherit from this contract._ +### owner -## IexecEscrow +```solidity +function owner() public view returns (address) +``` -### Transfer +## IexecAccessorsDelegate + +### name ```solidity -event Transfer(address from, address to, uint256 value) +function name() external view returns (string) ``` -### Lock +### symbol ```solidity -event Lock(address owner, uint256 amount) +function symbol() external view returns (string) ``` -### Unlock +### decimals ```solidity -event Unlock(address owner, uint256 amount) +function decimals() external view returns (uint8) ``` -### Reward +### totalSupply ```solidity -event Reward(address owner, uint256 amount, bytes32 ref) +function totalSupply() external view returns (uint256) ``` -### Seize +### balanceOf ```solidity -event Seize(address owner, uint256 amount, bytes32 ref) +function balanceOf(address account) external view returns (uint256) ``` -## IexecOrderManagementDelegate - -### manageAppOrder +### frozenOf ```solidity -function manageAppOrder(struct IexecLibOrders_v5.AppOrderOperation _apporderoperation) external +function frozenOf(address account) external view returns (uint256) ``` -### manageDatasetOrder +### allowance ```solidity -function manageDatasetOrder(struct IexecLibOrders_v5.DatasetOrderOperation _datasetorderoperation) external +function allowance(address account, address spender) external view returns (uint256) ``` -### manageWorkerpoolOrder +### viewAccount ```solidity -function manageWorkerpoolOrder(struct IexecLibOrders_v5.WorkerpoolOrderOperation _workerpoolorderoperation) external +function viewAccount(address account) external view returns (struct IexecLibCore_v5.Account) ``` -### manageRequestOrder +### token ```solidity -function manageRequestOrder(struct IexecLibOrders_v5.RequestOrderOperation _requestorderoperation) external +function token() external view returns (address) ``` -## Matching +### viewDeal ```solidity -struct Matching { - bytes32 apporderHash; - address appOwner; - bytes32 datasetorderHash; - address datasetOwner; - bytes32 workerpoolorderHash; - address workerpoolOwner; - bytes32 requestorderHash; - bool hasDataset; -} +function viewDeal(bytes32 _id) external view returns (struct IexecLibCore_v5.Deal deal) ``` -## IexecPoco1Delegate - -### verifySignature +### viewConsumed ```solidity -function verifySignature(address _identity, bytes32 _hash, bytes _signature) external view returns (bool) +function viewConsumed(bytes32 _id) external view returns (uint256 consumed) ``` -### verifyPresignature +### viewPresigned ```solidity -function verifyPresignature(address _identity, bytes32 _hash) external view returns (bool) +function viewPresigned(bytes32 _id) external view returns (address signer) ``` -### verifyPresignatureOrSignature +### viewTask ```solidity -function verifyPresignatureOrSignature(address _identity, bytes32 _hash, bytes _signature) external view returns (bool) +function viewTask(bytes32 _taskid) external view returns (struct IexecLibCore_v5.Task) ``` -### matchOrders +### viewContribution ```solidity -function matchOrders(struct IexecLibOrders_v5.AppOrder _apporder, struct IexecLibOrders_v5.DatasetOrder _datasetorder, struct IexecLibOrders_v5.WorkerpoolOrder _workerpoolorder, struct IexecLibOrders_v5.RequestOrder _requestorder) external returns (bytes32) +function viewContribution(bytes32 _taskid, address _worker) external view returns (struct IexecLibCore_v5.Contribution) ``` -Match orders. The requester gets debited. - -#### Parameters +### viewScore -| Name | Type | Description | -| ---- | ---- | ----------- | -| _apporder | struct IexecLibOrders_v5.AppOrder | The app order. | -| _datasetorder | struct IexecLibOrders_v5.DatasetOrder | The dataset order. | -| _workerpoolorder | struct IexecLibOrders_v5.WorkerpoolOrder | The workerpool order. | -| _requestorder | struct IexecLibOrders_v5.RequestOrder | The requester order. | +```solidity +function viewScore(address _worker) external view returns (uint256) +``` -### sponsorMatchOrders +### resultFor ```solidity -function sponsorMatchOrders(struct IexecLibOrders_v5.AppOrder _apporder, struct IexecLibOrders_v5.DatasetOrder _datasetorder, struct IexecLibOrders_v5.WorkerpoolOrder _workerpoolorder, struct IexecLibOrders_v5.RequestOrder _requestorder) external returns (bytes32) +function resultFor(bytes32 id) external view returns (bytes) ``` -Sponsor match orders for a requester. -Unlike the standard `matchOrders(..)` hook where the requester pays for -the deal, this current hook makes it possible for any `msg.sender` to pay for -a third party requester. - -Be aware that anyone seeing a valid request order on the network -(via an off-chain public marketplace, via a `sponsorMatchOrders(..)` -pending transaction in the mempool or by any other means) might decide -to call the standard `matchOrders(..)` hook which will result in the -requester being debited instead. Therefore, such a front run would result -in a loss of some of the requester funds deposited in the iExec account -(a loss value equivalent to the price of the deal). +### viewCategory -#### Parameters +```solidity +function viewCategory(uint256 _catid) external view returns (struct IexecLibCore_v5.Category category) +``` -| Name | Type | Description | -| ---- | ---- | ----------- | -| _apporder | struct IexecLibOrders_v5.AppOrder | The app order. | -| _datasetorder | struct IexecLibOrders_v5.DatasetOrder | The dataset order. | -| _workerpoolorder | struct IexecLibOrders_v5.WorkerpoolOrder | The workerpool order. | -| _requestorder | struct IexecLibOrders_v5.RequestOrder | The requester order. | +### countCategory -## IexecPoco2Delegate +```solidity +function countCategory() external view returns (uint256 count) +``` -### initialize +### appregistry ```solidity -function initialize(bytes32 _dealid, uint256 idx) public returns (bytes32) +function appregistry() external view returns (contract IRegistry) ``` -### contribute +### datasetregistry ```solidity -function contribute(bytes32 _taskid, bytes32 _resultHash, bytes32 _resultSeal, address _enclaveChallenge, bytes _enclaveSign, bytes _authorizationSign) external +function datasetregistry() external view returns (contract IRegistry) ``` -### contributeAndFinalize +### workerpoolregistry ```solidity -function contributeAndFinalize(bytes32 _taskid, bytes32 _resultDigest, bytes _results, bytes _resultsCallback, address _enclaveChallenge, bytes _enclaveSign, bytes _authorizationSign) external +function workerpoolregistry() external view returns (contract IRegistry) ``` -### reveal +### teebroker ```solidity -function reveal(bytes32 _taskid, bytes32 _resultDigest) external +function teebroker() external view returns (address) ``` -### reopen +### callbackgas ```solidity -function reopen(bytes32 _taskid) external +function callbackgas() external view returns (uint256) ``` -### finalize +### contribution_deadline_ratio ```solidity -function finalize(bytes32 _taskid, bytes _results, bytes _resultsCallback) external +function contribution_deadline_ratio() external view returns (uint256) ``` -### claim +### reveal_deadline_ratio ```solidity -function claim(bytes32 _taskid) public +function reveal_deadline_ratio() external view returns (uint256) ``` -### initializeArray +### final_deadline_ratio ```solidity -function initializeArray(bytes32[] _dealid, uint256[] _idx) external returns (bool) +function final_deadline_ratio() external view returns (uint256) ``` -### claimArray +### workerpool_stake_ratio ```solidity -function claimArray(bytes32[] _taskid) external returns (bool) +function workerpool_stake_ratio() external view returns (uint256) ``` -### initializeAndClaimArray +### kitty_ratio ```solidity -function initializeAndClaimArray(bytes32[] _dealid, uint256[] _idx) external returns (bool) +function kitty_ratio() external view returns (uint256) ``` -## IexecPocoAccessorsDelegate - -### viewDeal +### kitty_min ```solidity -function viewDeal(bytes32 id) external view returns (struct IexecLibCore_v5.Deal deal) +function kitty_min() external view returns (uint256) ``` -Get a deal created by PoCo module. - -#### Parameters +### kitty_address -| Name | Type | Description | -| ---- | ---- | ----------- | -| id | bytes32 | The ID of the deal. | +```solidity +function kitty_address() external view returns (address) +``` -### viewTask +### groupmember_purpose ```solidity -function viewTask(bytes32 id) external view returns (struct IexecLibCore_v5.Task) +function groupmember_purpose() external view returns (uint256) ``` -Get task created in Classic mode. +### eip712domain_separator -#### Parameters +```solidity +function eip712domain_separator() external view returns (bytes32) +``` -| Name | Type | Description | -| ---- | ---- | ----------- | -| id | bytes32 | id of the task | +## IexecCategoryManagerDelegate -### computeDealVolume +### createCategory ```solidity -function computeDealVolume(struct IexecLibOrders_v5.AppOrder appOrder, struct IexecLibOrders_v5.DatasetOrder datasetOrder, struct IexecLibOrders_v5.WorkerpoolOrder workerpoolOrder, struct IexecLibOrders_v5.RequestOrder requestOrder) external view returns (uint256) +function createCategory(string name, string description, uint256 workClockTimeRef) external returns (uint256) ``` -Computes the volume of the "not yet created" deal based on the provided orders. -This function should only be used if the deal is not yet created. -For existing deals, use the deal accessors instead. +Methods -#### Parameters +## IexecERC20Core -| Name | Type | Description | -| ---- | ---- | ----------- | -| appOrder | struct IexecLibOrders_v5.AppOrder | The application order. | -| datasetOrder | struct IexecLibOrders_v5.DatasetOrder | The dataset order. | -| workerpoolOrder | struct IexecLibOrders_v5.WorkerpoolOrder | The workerpool order. | -| requestOrder | struct IexecLibOrders_v5.RequestOrder | The request order. | +### Transfer -#### Return Values +```solidity +event Transfer(address from, address to, uint256 value) +``` -| Name | Type | Description | -| ---- | ---- | ----------- | -| [0] | uint256 | The computed deal volume. | +### Approval -## IexecPocoBoostAccessorsDelegate +```solidity +event Approval(address owner, address spender, uint256 value) +``` -Access to PoCo Boost tasks must be done with PoCo Classic `IexecAccessors`. +## IexecERC20Delegate -### viewDealBoost +### transfer ```solidity -function viewDealBoost(bytes32 id) external view returns (struct IexecLibCore_v5.DealBoost deal) +function transfer(address recipient, uint256 amount) external returns (bool) ``` -Get a deal created by PoCo Boost module. - -#### Parameters +### approve -| Name | Type | Description | -| ---- | ---- | ----------- | -| id | bytes32 | The ID of the deal. | +```solidity +function approve(address spender, uint256 value) external returns (bool) +``` -## IexecPocoBoostDelegate +### approveAndCall -Works for deals with requested trust = 0. +```solidity +function approveAndCall(address spender, uint256 value, bytes extraData) external returns (bool) +``` -### matchOrdersBoost +### transferFrom ```solidity -function matchOrdersBoost(struct IexecLibOrders_v5.AppOrder appOrder, struct IexecLibOrders_v5.DatasetOrder datasetOrder, struct IexecLibOrders_v5.WorkerpoolOrder workerpoolOrder, struct IexecLibOrders_v5.RequestOrder requestOrder) external returns (bytes32) +function transferFrom(address sender, address recipient, uint256 amount) external returns (bool) ``` -This boost match orders is only compatible with trust <= 1. -The requester gets debited. - -#### Parameters - -| Name | Type | Description | -| ---- | ---- | ----------- | -| appOrder | struct IexecLibOrders_v5.AppOrder | The order signed by the application developer. | -| datasetOrder | struct IexecLibOrders_v5.DatasetOrder | The order signed by the dataset provider. | -| workerpoolOrder | struct IexecLibOrders_v5.WorkerpoolOrder | The order signed by the workerpool manager. | -| requestOrder | struct IexecLibOrders_v5.RequestOrder | The order signed by the requester. | - -#### Return Values - -| Name | Type | Description | -| ---- | ---- | ----------- | -| [0] | bytes32 | The ID of the deal. | - -### sponsorMatchOrdersBoost +### increaseAllowance ```solidity -function sponsorMatchOrdersBoost(struct IexecLibOrders_v5.AppOrder appOrder, struct IexecLibOrders_v5.DatasetOrder datasetOrder, struct IexecLibOrders_v5.WorkerpoolOrder workerpoolOrder, struct IexecLibOrders_v5.RequestOrder requestOrder) external returns (bytes32) +function increaseAllowance(address spender, uint256 addedValue) external returns (bool) ``` -Sponsor match orders boost for a requester. -Unlike the standard `matchOrdersBoost(..)` hook where the requester pays for -the deal, this current hook makes it possible for any `msg.sender` to pay for -a third party requester. - -Be aware that anyone seeing a valid request order on the network -(via an off-chain public marketplace, via a `sponsorMatchOrdersBoost(..)` -pending transaction in the mempool or by any other means) might decide -to call the standard `matchOrdersBoost(..)` hook which will result in the -requester being debited instead. Therefore, such a front run would result -in a loss of some of the requester funds deposited in the iExec account -(a loss value equivalent to the price of the deal). - -#### Parameters - -| Name | Type | Description | -| ---- | ---- | ----------- | -| appOrder | struct IexecLibOrders_v5.AppOrder | The app order. | -| datasetOrder | struct IexecLibOrders_v5.DatasetOrder | The dataset order. | -| workerpoolOrder | struct IexecLibOrders_v5.WorkerpoolOrder | The workerpool order. | -| requestOrder | struct IexecLibOrders_v5.RequestOrder | The requester order. | - -### pushResultBoost +### decreaseAllowance ```solidity -function pushResultBoost(bytes32 dealId, uint256 index, bytes results, bytes resultsCallback, bytes authorizationSign, address enclaveChallenge, bytes enclaveSign) external +function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) ``` -Accept results of a task computed by a worker during Boost workflow. - -#### Parameters - -| Name | Type | Description | -| ---- | ---- | ----------- | -| dealId | bytes32 | The id of the target deal. | -| index | uint256 | The index of the target task of the deal. | -| results | bytes | The results of the task computed by the worker. | -| resultsCallback | bytes | The results of the task computed by the worker that will be forwarded as call data to the callback address set by the requester. | -| authorizationSign | bytes | The authorization signed by the scheduler. authorizing the worker to push a result. | -| enclaveChallenge | address | The enclave address which can produce enclave signature. | -| enclaveSign | bytes | The signature generated from the enclave. | +## IexecEscrowNativeDelegate -### claimBoost +### receive ```solidity -function claimBoost(bytes32 dealId, uint256 index) external +receive() external payable ``` -Claim task to get a refund if task is not completed after deadline. - -#### Parameters - -| Name | Type | Description | -| ---- | ---- | ----------- | -| dealId | bytes32 | The ID of the deal. | -| index | uint256 | The index of the task. | - -## IexecPocoCommonDelegate - -## DelegateBase - -## ENSIntegrationDelegate - -### setName +### fallback ```solidity -function setName(address _ens, string _name) external +fallback() external payable ``` -## IexecAccessorsDelegate - -### name +### deposit ```solidity -function name() external view returns (string) +function deposit() external payable returns (bool) ``` -### symbol +### depositFor ```solidity -function symbol() external view returns (string) +function depositFor(address target) external payable returns (bool) ``` -### decimals +### depositForArray ```solidity -function decimals() external view returns (uint8) +function depositForArray(uint256[] amounts, address[] targets) external payable returns (bool) ``` -### totalSupply +### withdraw ```solidity -function totalSupply() external view returns (uint256) +function withdraw(uint256 amount) external returns (bool) ``` -### balanceOf +### withdrawTo ```solidity -function balanceOf(address account) external view returns (uint256) +function withdrawTo(uint256 amount, address target) external returns (bool) ``` -### frozenOf +### recover ```solidity -function frozenOf(address account) external view returns (uint256) +function recover() external returns (uint256) ``` -### allowance +## IexecEscrowTokenDelegate + +### receive ```solidity -function allowance(address account, address spender) external view returns (uint256) +receive() external payable ``` -### viewAccount +### fallback ```solidity -function viewAccount(address account) external view returns (struct IexecLibCore_v5.Account) +fallback() external payable ``` -### token +### deposit ```solidity -function token() external view returns (address) +function deposit(uint256 amount) external returns (bool) ``` -### viewDeal +### depositFor ```solidity -function viewDeal(bytes32 _id) external view returns (struct IexecLibCore_v5.Deal deal) +function depositFor(uint256 amount, address target) external returns (bool) ``` -### viewConsumed +### depositForArray ```solidity -function viewConsumed(bytes32 _id) external view returns (uint256 consumed) +function depositForArray(uint256[] amounts, address[] targets) external returns (bool) ``` -### viewPresigned +### withdraw ```solidity -function viewPresigned(bytes32 _id) external view returns (address signer) +function withdraw(uint256 amount) external returns (bool) ``` -### viewTask +### withdrawTo ```solidity -function viewTask(bytes32 _taskid) external view returns (struct IexecLibCore_v5.Task) +function withdrawTo(uint256 amount, address target) external returns (bool) ``` -### viewContribution +### recover ```solidity -function viewContribution(bytes32 _taskid, address _worker) external view returns (struct IexecLibCore_v5.Contribution) +function recover() external returns (uint256) ``` -### viewScore +### receiveApproval ```solidity -function viewScore(address _worker) external view returns (uint256) +function receiveApproval(address sender, uint256 amount, address token, bytes) external returns (bool) ``` -### resultFor +## IexecMaintenanceDelegate + +### configure ```solidity -function resultFor(bytes32 id) external view returns (bytes) +function configure(address _token, string _name, string _symbol, uint8 _decimal, address _appregistryAddress, address _datasetregistryAddress, address _workerpoolregistryAddress, address _v3_iexecHubAddress) external ``` -### viewCategory +### domain ```solidity -function viewCategory(uint256 _catid) external view returns (struct IexecLibCore_v5.Category category) +function domain() external view returns (struct IexecLibOrders_v5.EIP712Domain) ``` -### countCategory +### updateDomainSeparator ```solidity -function countCategory() external view returns (uint256 count) +function updateDomainSeparator() external ``` -### appregistry +### importScore ```solidity -function appregistry() external view returns (contract IRegistry) +function importScore(address _worker) external ``` -### datasetregistry +### setTeeBroker ```solidity -function datasetregistry() external view returns (contract IRegistry) +function setTeeBroker(address _teebroker) external ``` -### workerpoolregistry +### setCallbackGas ```solidity -function workerpoolregistry() external view returns (contract IRegistry) +function setCallbackGas(uint256 _callbackgas) external ``` -### teebroker +## IexecMaintenanceExtraDelegate + +### changeRegistries ```solidity -function teebroker() external view returns (address) +function changeRegistries(address _appregistryAddress, address _datasetregistryAddress, address _workerpoolregistryAddress) external ``` -### callbackgas +## IexecRelayDelegate + +### broadcastAppOrder ```solidity -function callbackgas() external view returns (uint256) +function broadcastAppOrder(struct IexecLibOrders_v5.AppOrder _apporder) external ``` -### contribution_deadline_ratio +### broadcastDatasetOrder ```solidity -function contribution_deadline_ratio() external view returns (uint256) +function broadcastDatasetOrder(struct IexecLibOrders_v5.DatasetOrder _datasetorder) external ``` -### reveal_deadline_ratio +### broadcastWorkerpoolOrder ```solidity -function reveal_deadline_ratio() external view returns (uint256) +function broadcastWorkerpoolOrder(struct IexecLibOrders_v5.WorkerpoolOrder _workerpoolorder) external ``` -### final_deadline_ratio +### broadcastRequestOrder ```solidity -function final_deadline_ratio() external view returns (uint256) +function broadcastRequestOrder(struct IexecLibOrders_v5.RequestOrder _requestorder) external ``` -### workerpool_stake_ratio +## FunctionNotFound ```solidity -function workerpool_stake_ratio() external view returns (uint256) +error FunctionNotFound(bytes4 _functionSelector) ``` -### kitty_ratio +## DiamondArgs ```solidity -function kitty_ratio() external view returns (uint256) +struct DiamondArgs { + address owner; + address init; + bytes initCalldata; +} ``` -### kitty_min +## Diamond + +### constructor ```solidity -function kitty_min() external view returns (uint256) +constructor(struct IDiamond.FacetCut[] _diamondCut, struct DiamondArgs _args) public payable ``` -### kitty_address +### fallback ```solidity -function kitty_address() external view returns (address) +fallback() external payable ``` -### groupmember_purpose +`fallback` function must be added to the diamond with selector `0xffffffff`. +The function is defined in IexecEscrow(Native/Token) facet. + +### receive ```solidity -function groupmember_purpose() external view returns (uint256) +receive() external payable ``` -### eip712domain_separator +`receive` function must be added to the diamond with selector `0x00000000`. +The function is defined in IexecEscrow(Native/Token) facet. -```solidity -function eip712domain_separator() external view returns (bytes32) -``` +## DelegateBase -## IexecCategoryManagerDelegate +_Every module must inherit from this contract._ -### createCategory +### owner ```solidity -function createCategory(string name, string description, uint256 workClockTimeRef) external returns (uint256) +function owner() public view returns (address) ``` -Methods - -## IexecERC20Core +## IexecEscrow ### Transfer @@ -988,225 +886,361 @@ Methods event Transfer(address from, address to, uint256 value) ``` -### Approval +### Lock ```solidity -event Approval(address owner, address spender, uint256 value) +event Lock(address owner, uint256 amount) ``` -## IexecERC20Delegate - -### transfer +### Unlock ```solidity -function transfer(address recipient, uint256 amount) external returns (bool) +event Unlock(address owner, uint256 amount) ``` -### approve +### Reward ```solidity -function approve(address spender, uint256 value) external returns (bool) +event Reward(address owner, uint256 amount, bytes32 ref) ``` -### approveAndCall +### Seize ```solidity -function approveAndCall(address spender, uint256 value, bytes extraData) external returns (bool) +event Seize(address owner, uint256 amount, bytes32 ref) ``` -### transferFrom +## IexecOrderManagementDelegate + +### manageAppOrder ```solidity -function transferFrom(address sender, address recipient, uint256 amount) external returns (bool) +function manageAppOrder(struct IexecLibOrders_v5.AppOrderOperation _apporderoperation) external ``` -### increaseAllowance +### manageDatasetOrder ```solidity -function increaseAllowance(address spender, uint256 addedValue) external returns (bool) +function manageDatasetOrder(struct IexecLibOrders_v5.DatasetOrderOperation _datasetorderoperation) external ``` -### decreaseAllowance +### manageWorkerpoolOrder ```solidity -function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) +function manageWorkerpoolOrder(struct IexecLibOrders_v5.WorkerpoolOrderOperation _workerpoolorderoperation) external ``` -## IexecEscrowNativeDelegate - -### receive +### manageRequestOrder ```solidity -receive() external payable +function manageRequestOrder(struct IexecLibOrders_v5.RequestOrderOperation _requestorderoperation) external ``` -### fallback +## Matching ```solidity -fallback() external payable +struct Matching { + bytes32 apporderHash; + address appOwner; + bytes32 datasetorderHash; + address datasetOwner; + bytes32 workerpoolorderHash; + address workerpoolOwner; + bytes32 requestorderHash; + bool hasDataset; +} ``` -### deposit +## IexecPoco1Delegate + +### verifySignature ```solidity -function deposit() external payable returns (bool) +function verifySignature(address _identity, bytes32 _hash, bytes _signature) external view returns (bool) ``` -### depositFor +### verifyPresignature ```solidity -function depositFor(address target) external payable returns (bool) +function verifyPresignature(address _identity, bytes32 _hash) external view returns (bool) ``` -### depositForArray +### verifyPresignatureOrSignature ```solidity -function depositForArray(uint256[] amounts, address[] targets) external payable returns (bool) +function verifyPresignatureOrSignature(address _identity, bytes32 _hash, bytes _signature) external view returns (bool) ``` -### withdraw +### matchOrders ```solidity -function withdraw(uint256 amount) external returns (bool) +function matchOrders(struct IexecLibOrders_v5.AppOrder _apporder, struct IexecLibOrders_v5.DatasetOrder _datasetorder, struct IexecLibOrders_v5.WorkerpoolOrder _workerpoolorder, struct IexecLibOrders_v5.RequestOrder _requestorder) external returns (bytes32) ``` -### withdrawTo +Match orders. The requester gets debited. -```solidity -function withdrawTo(uint256 amount, address target) external returns (bool) -``` +#### Parameters -### recover +| Name | Type | Description | +| ---- | ---- | ----------- | +| _apporder | struct IexecLibOrders_v5.AppOrder | The app order. | +| _datasetorder | struct IexecLibOrders_v5.DatasetOrder | The dataset order. | +| _workerpoolorder | struct IexecLibOrders_v5.WorkerpoolOrder | The workerpool order. | +| _requestorder | struct IexecLibOrders_v5.RequestOrder | The requester order. | + +### sponsorMatchOrders ```solidity -function recover() external returns (uint256) +function sponsorMatchOrders(struct IexecLibOrders_v5.AppOrder _apporder, struct IexecLibOrders_v5.DatasetOrder _datasetorder, struct IexecLibOrders_v5.WorkerpoolOrder _workerpoolorder, struct IexecLibOrders_v5.RequestOrder _requestorder) external returns (bytes32) ``` -## IexecEscrowTokenDelegate +Sponsor match orders for a requester. +Unlike the standard `matchOrders(..)` hook where the requester pays for +the deal, this current hook makes it possible for any `msg.sender` to pay for +a third party requester. -### receive +Be aware that anyone seeing a valid request order on the network +(via an off-chain public marketplace, via a `sponsorMatchOrders(..)` +pending transaction in the mempool or by any other means) might decide +to call the standard `matchOrders(..)` hook which will result in the +requester being debited instead. Therefore, such a front run would result +in a loss of some of the requester funds deposited in the iExec account +(a loss value equivalent to the price of the deal). -```solidity -receive() external payable -``` +#### Parameters -### fallback +| Name | Type | Description | +| ---- | ---- | ----------- | +| _apporder | struct IexecLibOrders_v5.AppOrder | The app order. | +| _datasetorder | struct IexecLibOrders_v5.DatasetOrder | The dataset order. | +| _workerpoolorder | struct IexecLibOrders_v5.WorkerpoolOrder | The workerpool order. | +| _requestorder | struct IexecLibOrders_v5.RequestOrder | The requester order. | -```solidity -fallback() external payable -``` +## IexecPoco2Delegate -### deposit +### initialize ```solidity -function deposit(uint256 amount) external returns (bool) +function initialize(bytes32 _dealid, uint256 idx) public returns (bytes32) ``` -### depositFor +### contribute ```solidity -function depositFor(uint256 amount, address target) external returns (bool) +function contribute(bytes32 _taskid, bytes32 _resultHash, bytes32 _resultSeal, address _enclaveChallenge, bytes _enclaveSign, bytes _authorizationSign) external ``` -### depositForArray +### contributeAndFinalize ```solidity -function depositForArray(uint256[] amounts, address[] targets) external returns (bool) +function contributeAndFinalize(bytes32 _taskid, bytes32 _resultDigest, bytes _results, bytes _resultsCallback, address _enclaveChallenge, bytes _enclaveSign, bytes _authorizationSign) external ``` -### withdraw +### reveal ```solidity -function withdraw(uint256 amount) external returns (bool) +function reveal(bytes32 _taskid, bytes32 _resultDigest) external ``` -### withdrawTo +### reopen ```solidity -function withdrawTo(uint256 amount, address target) external returns (bool) +function reopen(bytes32 _taskid) external ``` -### recover +### finalize ```solidity -function recover() external returns (uint256) +function finalize(bytes32 _taskid, bytes _results, bytes _resultsCallback) external ``` -### receiveApproval +### claim ```solidity -function receiveApproval(address sender, uint256 amount, address token, bytes) external returns (bool) +function claim(bytes32 _taskid) public ``` -## IexecMaintenanceDelegate - -### configure +### initializeArray ```solidity -function configure(address _token, string _name, string _symbol, uint8 _decimal, address _appregistryAddress, address _datasetregistryAddress, address _workerpoolregistryAddress, address _v3_iexecHubAddress) external +function initializeArray(bytes32[] _dealid, uint256[] _idx) external returns (bool) ``` -### domain +### claimArray ```solidity -function domain() external view returns (struct IexecLibOrders_v5.EIP712Domain) +function claimArray(bytes32[] _taskid) external returns (bool) ``` -### updateDomainSeparator +### initializeAndClaimArray ```solidity -function updateDomainSeparator() external +function initializeAndClaimArray(bytes32[] _dealid, uint256[] _idx) external returns (bool) ``` -### importScore +## IexecPocoAccessorsDelegate + +### viewDeal ```solidity -function importScore(address _worker) external +function viewDeal(bytes32 id) external view returns (struct IexecLibCore_v5.Deal deal) ``` -### setTeeBroker +Get a deal created by PoCo module. + +#### Parameters + +| Name | Type | Description | +| ---- | ---- | ----------- | +| id | bytes32 | The ID of the deal. | + +### viewTask ```solidity -function setTeeBroker(address _teebroker) external +function viewTask(bytes32 id) external view returns (struct IexecLibCore_v5.Task) ``` -### setCallbackGas +Get task created in Classic mode. + +#### Parameters + +| Name | Type | Description | +| ---- | ---- | ----------- | +| id | bytes32 | id of the task | + +### computeDealVolume ```solidity -function setCallbackGas(uint256 _callbackgas) external +function computeDealVolume(struct IexecLibOrders_v5.AppOrder appOrder, struct IexecLibOrders_v5.DatasetOrder datasetOrder, struct IexecLibOrders_v5.WorkerpoolOrder workerpoolOrder, struct IexecLibOrders_v5.RequestOrder requestOrder) external view returns (uint256) ``` -## IexecMaintenanceExtraDelegate +Computes the volume of the "not yet created" deal based on the provided orders. +This function should only be used if the deal is not yet created. +For existing deals, use the deal accessors instead. -### changeRegistries +#### Parameters + +| Name | Type | Description | +| ---- | ---- | ----------- | +| appOrder | struct IexecLibOrders_v5.AppOrder | The application order. | +| datasetOrder | struct IexecLibOrders_v5.DatasetOrder | The dataset order. | +| workerpoolOrder | struct IexecLibOrders_v5.WorkerpoolOrder | The workerpool order. | +| requestOrder | struct IexecLibOrders_v5.RequestOrder | The request order. | + +#### Return Values + +| Name | Type | Description | +| ---- | ---- | ----------- | +| [0] | uint256 | The computed deal volume. | + +## IexecPocoBoostAccessorsDelegate + +Access to PoCo Boost tasks must be done with PoCo Classic `IexecAccessors`. + +### viewDealBoost ```solidity -function changeRegistries(address _appregistryAddress, address _datasetregistryAddress, address _workerpoolregistryAddress) external +function viewDealBoost(bytes32 id) external view returns (struct IexecLibCore_v5.DealBoost deal) ``` -## IexecRelayDelegate +Get a deal created by PoCo Boost module. -### broadcastAppOrder +#### Parameters + +| Name | Type | Description | +| ---- | ---- | ----------- | +| id | bytes32 | The ID of the deal. | + +## IexecPocoBoostDelegate + +Works for deals with requested trust = 0. + +### matchOrdersBoost ```solidity -function broadcastAppOrder(struct IexecLibOrders_v5.AppOrder _apporder) external +function matchOrdersBoost(struct IexecLibOrders_v5.AppOrder appOrder, struct IexecLibOrders_v5.DatasetOrder datasetOrder, struct IexecLibOrders_v5.WorkerpoolOrder workerpoolOrder, struct IexecLibOrders_v5.RequestOrder requestOrder) external returns (bytes32) ``` -### broadcastDatasetOrder +This boost match orders is only compatible with trust <= 1. +The requester gets debited. + +#### Parameters + +| Name | Type | Description | +| ---- | ---- | ----------- | +| appOrder | struct IexecLibOrders_v5.AppOrder | The order signed by the application developer. | +| datasetOrder | struct IexecLibOrders_v5.DatasetOrder | The order signed by the dataset provider. | +| workerpoolOrder | struct IexecLibOrders_v5.WorkerpoolOrder | The order signed by the workerpool manager. | +| requestOrder | struct IexecLibOrders_v5.RequestOrder | The order signed by the requester. | + +#### Return Values + +| Name | Type | Description | +| ---- | ---- | ----------- | +| [0] | bytes32 | The ID of the deal. | + +### sponsorMatchOrdersBoost ```solidity -function broadcastDatasetOrder(struct IexecLibOrders_v5.DatasetOrder _datasetorder) external +function sponsorMatchOrdersBoost(struct IexecLibOrders_v5.AppOrder appOrder, struct IexecLibOrders_v5.DatasetOrder datasetOrder, struct IexecLibOrders_v5.WorkerpoolOrder workerpoolOrder, struct IexecLibOrders_v5.RequestOrder requestOrder) external returns (bytes32) ``` -### broadcastWorkerpoolOrder +Sponsor match orders boost for a requester. +Unlike the standard `matchOrdersBoost(..)` hook where the requester pays for +the deal, this current hook makes it possible for any `msg.sender` to pay for +a third party requester. + +Be aware that anyone seeing a valid request order on the network +(via an off-chain public marketplace, via a `sponsorMatchOrdersBoost(..)` +pending transaction in the mempool or by any other means) might decide +to call the standard `matchOrdersBoost(..)` hook which will result in the +requester being debited instead. Therefore, such a front run would result +in a loss of some of the requester funds deposited in the iExec account +(a loss value equivalent to the price of the deal). + +#### Parameters + +| Name | Type | Description | +| ---- | ---- | ----------- | +| appOrder | struct IexecLibOrders_v5.AppOrder | The app order. | +| datasetOrder | struct IexecLibOrders_v5.DatasetOrder | The dataset order. | +| workerpoolOrder | struct IexecLibOrders_v5.WorkerpoolOrder | The workerpool order. | +| requestOrder | struct IexecLibOrders_v5.RequestOrder | The requester order. | + +### pushResultBoost ```solidity -function broadcastWorkerpoolOrder(struct IexecLibOrders_v5.WorkerpoolOrder _workerpoolorder) external +function pushResultBoost(bytes32 dealId, uint256 index, bytes results, bytes resultsCallback, bytes authorizationSign, address enclaveChallenge, bytes enclaveSign) external ``` -### broadcastRequestOrder +Accept results of a task computed by a worker during Boost workflow. + +#### Parameters + +| Name | Type | Description | +| ---- | ---- | ----------- | +| dealId | bytes32 | The id of the target deal. | +| index | uint256 | The index of the target task of the deal. | +| results | bytes | The results of the task computed by the worker. | +| resultsCallback | bytes | The results of the task computed by the worker that will be forwarded as call data to the callback address set by the requester. | +| authorizationSign | bytes | The authorization signed by the scheduler. authorizing the worker to push a result. | +| enclaveChallenge | address | The enclave address which can produce enclave signature. | +| enclaveSign | bytes | The signature generated from the enclave. | + +### claimBoost ```solidity -function broadcastRequestOrder(struct IexecLibOrders_v5.RequestOrder _requestorder) external +function claimBoost(bytes32 dealId, uint256 index) external ``` +Claim task to get a refund if task is not completed after deadline. + +#### Parameters + +| Name | Type | Description | +| ---- | ---- | ----------- | +| dealId | bytes32 | The ID of the deal. | +| index | uint256 | The index of the task. | + +## IexecPocoCommonDelegate + diff --git a/hardhat.config.ts b/hardhat.config.ts index 87f985742..c82fbf221 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -83,7 +83,7 @@ const v8Settings = { const config: HardhatUserConfig = { solidity: { compilers: [ - { version: '0.8.21', settings: v8Settings }, // PoCo Boost (and ENS contracts >=0.8.4) + { version: '0.8.21', settings: v8Settings }, // PoCo Boost { version: '0.6.12', settings }, // PoCo contracts { version: '0.4.11', settings }, // RLC contracts ], @@ -259,11 +259,6 @@ const config: HardhatUserConfig = { '@mudgen/diamond-1/contracts/facets/OwnershipFacet.sol', '@mudgen/diamond-1/contracts/libraries/LibDiamond.sol', '@mudgen/diamond-1/contracts/upgradeInitializers/DiamondInit.sol', - // ENS - '@ensdomains/ens-contracts/contracts/registry/ENSRegistry.sol', - '@ensdomains/ens-contracts/contracts/registry/FIFSRegistrar.sol', - '@ensdomains/ens-contracts/contracts/registry/ReverseRegistrar.sol', - '@ensdomains/ens-contracts/contracts/resolvers/PublicResolver.sol', // Used as mock or fake in UTs '@openzeppelin/contracts-v5/interfaces/IERC1271.sol', // Used in deployment diff --git a/package-lock.json b/package-lock.json index 1d2e607a3..f63491fd3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,13 +15,11 @@ "@openzeppelin/contracts": "3.3.0", "@openzeppelin/contracts-v5": "npm:@openzeppelin/contracts@^5.0.2", "@uniswap/v2-periphery": "1.1.0-beta.0", - "contracts-starter": "github:mudgen/diamond-1-hardhat#3da037b", "createx": "github:pcaversaccio/createx#v1.0.0", "rlc-faucet-contract": "1.0.10" }, "devDependencies": { "@amxx/factory": "^1.0.0", - "@ensdomains/ens-contracts": "^0.0.3", "@nomicfoundation/hardhat-toolbox": "^5.0.0", "@openzeppelin/upgrades-core": "^1.37.1", "dotenv": "^16.5.0", @@ -84,28 +82,6 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@ensdomains/buffer": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/@ensdomains/buffer/-/buffer-0.0.10.tgz", - "integrity": "sha512-EOFqiWnN36EyyBAgHFTsabFcFICUALt41SiDm/4pAw4V36R4lD4wHcnZcqCYki9m1fMaeWGHrdqxmrMa8iiSTQ==", - "dev": true - }, - "node_modules/@ensdomains/ens-contracts": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@ensdomains/ens-contracts/-/ens-contracts-0.0.3.tgz", - "integrity": "sha512-da67JjAFjl8gLDDAqYQs5PSvth9usBcD7clXiXpfvJTMJnZnR+c/cG6xrkVgL4qEP7jmI+iEoj0y29qFtupy2w==", - "dev": true, - "dependencies": { - "@ensdomains/buffer": "^0.0.10", - "@openzeppelin/contracts": "^4.1.0" - } - }, - "node_modules/@ensdomains/ens-contracts/node_modules/@openzeppelin/contracts": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.3.tgz", - "integrity": "sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg==", - "dev": true - }, "node_modules/@ethersproject/abi": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", @@ -3865,11 +3841,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/contracts-starter": { - "version": "1.0.0", - "resolved": "git+ssh://git@github.com/mudgen/diamond-1-hardhat.git#3da037b378195b4108b977cf2014600eeddbf67d", - "license": "MIT" - }, "node_modules/convert-svg-core": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/convert-svg-core/-/convert-svg-core-0.6.4.tgz", @@ -12463,30 +12434,6 @@ } } }, - "@ensdomains/buffer": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/@ensdomains/buffer/-/buffer-0.0.10.tgz", - "integrity": "sha512-EOFqiWnN36EyyBAgHFTsabFcFICUALt41SiDm/4pAw4V36R4lD4wHcnZcqCYki9m1fMaeWGHrdqxmrMa8iiSTQ==", - "dev": true - }, - "@ensdomains/ens-contracts": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@ensdomains/ens-contracts/-/ens-contracts-0.0.3.tgz", - "integrity": "sha512-da67JjAFjl8gLDDAqYQs5PSvth9usBcD7clXiXpfvJTMJnZnR+c/cG6xrkVgL4qEP7jmI+iEoj0y29qFtupy2w==", - "dev": true, - "requires": { - "@ensdomains/buffer": "^0.0.10", - "@openzeppelin/contracts": "^4.1.0" - }, - "dependencies": { - "@openzeppelin/contracts": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.3.tgz", - "integrity": "sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg==", - "dev": true - } - } - }, "@ethersproject/abi": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", @@ -15221,10 +15168,6 @@ } } }, - "contracts-starter": { - "version": "git+ssh://git@github.com/mudgen/diamond-1-hardhat.git#3da037b378195b4108b977cf2014600eeddbf67d", - "from": "contracts-starter@github:mudgen/diamond-1-hardhat#3da037b" - }, "convert-svg-core": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/convert-svg-core/-/convert-svg-core-0.6.4.tgz", diff --git a/package.json b/package.json index fed23afc0..90adfc528 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,6 @@ }, "devDependencies": { "@amxx/factory": "^1.0.0", - "@ensdomains/ens-contracts": "^0.0.3", "@nomicfoundation/hardhat-toolbox": "^5.0.0", "@openzeppelin/upgrades-core": "^1.37.1", "dotenv": "^16.5.0", diff --git a/test/byContract/ENSIntegration/ENSIntegration.test.ts b/test/byContract/ENSIntegration/ENSIntegration.test.ts deleted file mode 100644 index d92eb3c3a..000000000 --- a/test/byContract/ENSIntegration/ENSIntegration.test.ts +++ /dev/null @@ -1,125 +0,0 @@ -// SPDX-FileCopyrightText: 2020-2025 IEXEC BLOCKCHAIN TECH -// SPDX-License-Identifier: Apache-2.0 - -import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; -import { loadFixture } from '@nomicfoundation/hardhat-network-helpers'; -import { expect } from 'chai'; -import { deployments, ethers } from 'hardhat'; -import { - ENSRegistry, - ENSRegistry__factory, - IexecInterfaceNative, - IexecInterfaceNative__factory, - PublicResolver__factory, - ReverseRegistrar__factory, -} from '../../../typechain'; -import config from '../../../utils/config'; -import { getIexecAccounts } from '../../../utils/poco-tools'; -import { loadHardhatFixtureDeployment } from '../../utils/hardhat-fixture-deployer'; - -describe('ENSIntegration', () => { - let proxyAddress: string; - let [iexecPoco, iexecPocoAsAdmin]: IexecInterfaceNative[] = []; - let [iexecAdmin, anyone]: SignerWithAddress[] = []; - let ensRegistry: ENSRegistry; - - beforeEach('Deploy', async () => { - // Deploy all contracts - proxyAddress = await loadHardhatFixtureDeployment(); - // Initialize test environment - await loadFixture(initFixture); - }); - - async function initFixture() { - ({ iexecAdmin, anyone } = await getIexecAccounts()); - const ensRegistryAddress = (await deployments.get('ENSRegistry')).address; - ensRegistry = ENSRegistry__factory.connect(ensRegistryAddress, anyone); - iexecPoco = IexecInterfaceNative__factory.connect(proxyAddress, anyone); - iexecPocoAsAdmin = iexecPoco.connect(iexecAdmin); - } - - describe('Forward resolution', () => { - it('Should resolve initial names', async () => { - if (!config.isNativeChain()) { - expect(await resolve('rlc.iexec.eth')).to.equal(await iexecPoco.token()); - } - expect(await resolve('admin.iexec.eth')).to.equal(iexecAdmin.address); - expect(await resolve('core.v5.iexec.eth')).to.equal(proxyAddress); - expect(await resolve('apps.v5.iexec.eth')).to.equal(await iexecPoco.appregistry()); - expect(await resolve('datasets.v5.iexec.eth')).to.equal( - await iexecPoco.datasetregistry(), - ); - expect(await resolve('workerpools.v5.iexec.eth')).to.equal( - await iexecPoco.workerpoolregistry(), - ); - }); - }); - - describe('Reverse resolution', () => { - it('Should lookup initial addresses', async () => { - expect(await lookup(iexecAdmin.address)).to.equal('admin.iexec.eth'); - expect(await lookup(proxyAddress)).to.equal('core.v5.iexec.eth'); - expect(await lookup(await iexecPoco.appregistry())).to.equal('apps.v5.iexec.eth'); - expect(await lookup(await iexecPoco.datasetregistry())).to.equal( - 'datasets.v5.iexec.eth', - ); - expect(await lookup(await iexecPoco.workerpoolregistry())).to.equal( - 'workerpools.v5.iexec.eth', - ); - }); - - it('Should register reverse resolution name', async () => { - const name = 'test.domain.eth'; - const reverseNameHash = ethers.namehash(`${proxyAddress.substring(2)}.addr.reverse`); - const reverseRootNameHash = ethers.namehash('addr.reverse'); - const reverseRegistrarAddress = await ensRegistry.owner(reverseRootNameHash); - const reverseResolverAddress = await ReverseRegistrar__factory.connect( - reverseRegistrarAddress, - anyone, - ).defaultResolver(); - const reverseResolver = PublicResolver__factory.connect(reverseResolverAddress, anyone); - await expect(iexecPocoAsAdmin.setName(await ensRegistry.getAddress(), name)) - .to.emit(reverseResolver, 'NameChanged') - .withArgs(reverseNameHash, name); - expect(await lookup(proxyAddress)).to.equal(name); - }); - - it('Should not register reverse resolution name when sender is not the owner', async () => { - await expect( - iexecPoco.setName(await ensRegistry.getAddress(), 'some.name.eth'), - ).to.be.revertedWith('Ownable: caller is not the owner'); - }); - }); - - /** - * Get the address associated to the given ENS name using forward resolution. - * @param domain ENS domain name - * @returns ETH address - */ - async function resolve(domain: string) { - const nameHash = ethers.namehash(domain); - const resolver = await getResolver(nameHash); - return await resolver['addr(bytes32)'](nameHash); - } - - /** - * Get the primary ENS name associated to the given address using reverse resolution. - * @param address - * @returns ENS name - */ - async function lookup(address: string) { - const nameHash = ethers.namehash(`${address.substring(2)}.addr.reverse`); - const reverseResolver = await getResolver(nameHash); - return await reverseResolver.name(nameHash); - } - - /** - * Get resolver contract of the given name hash. - * @param nameHash namehash of the domain name - * @returns PublicResolver instance - */ - async function getResolver(nameHash: string) { - const resolverAddress = await ensRegistry.resolver(nameHash); - return PublicResolver__factory.connect(resolverAddress, anyone); - } -}); diff --git a/test/byContract/registries/assets.test.ts b/test/byContract/registries/assets.test.ts index 2f0df71cc..638f66db2 100644 --- a/test/byContract/registries/assets.test.ts +++ b/test/byContract/registries/assets.test.ts @@ -5,7 +5,7 @@ import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { loadFixture } from '@nomicfoundation/hardhat-network-helpers'; import { expect } from 'chai'; import { BytesLike } from 'ethers'; -import { deployments, ethers } from 'hardhat'; +import { ethers } from 'hardhat'; import { App, AppRegistry, @@ -15,13 +15,8 @@ import { DatasetRegistry, DatasetRegistry__factory, Dataset__factory, - ENSRegistry, - ENSRegistry__factory, IexecInterfaceNative, IexecInterfaceNative__factory, - PublicResolver, - PublicResolver__factory, - ReverseRegistrar__factory, Workerpool, WorkerpoolRegistry, WorkerpoolRegistry__factory, @@ -36,9 +31,6 @@ describe('Assets', () => { let iexecPoco: IexecInterfaceNative; let [appProvider, datasetProvider, scheduler, anyone]: SignerWithAddress[] = []; - let ensRegistry: ENSRegistry; - let ensRegistryAddress: string; - let reverseResolver: PublicResolver; let appRegistry: AppRegistry; let datasetRegistry: DatasetRegistry; let workerpoolRegistry: WorkerpoolRegistry; @@ -54,7 +46,6 @@ describe('Assets', () => { async function initFixture() { ({ appProvider, datasetProvider, scheduler, anyone } = await getIexecAccounts()); - ensRegistryAddress = (await deployments.get('ENSRegistry')).address; iexecPoco = IexecInterfaceNative__factory.connect(proxyAddress, anyone); @@ -67,15 +58,6 @@ describe('Assets', () => { await iexecPoco.workerpoolregistry(), anyone, ); - - ensRegistry = ENSRegistry__factory.connect(ensRegistryAddress, anyone); - const reverseRootNameHash = ethers.namehash('addr.reverse'); - const reverseRegistrarAddress = await ensRegistry.owner(reverseRootNameHash); - const reverseResolverAddress = await ReverseRegistrar__factory.connect( - reverseRegistrarAddress, - anyone, - ).defaultResolver(); - reverseResolver = PublicResolver__factory.connect(reverseResolverAddress, anyone); } describe('App', () => { @@ -121,27 +103,6 @@ describe('Assets', () => { ); }); }); - - describe('setName', () => { - it('Should set name for the ENS reverse registration of the app', async () => { - const newENSName = 'myApp.eth'; - await app - .connect(appProvider) - .setName(ensRegistryAddress, newENSName) - .then((tx) => tx.wait()); - const appAddress = await app.getAddress(); - expect(await reverseResolver.name(computeNameHash(appAddress))).to.equal( - newENSName, - ); - }); - - it('Should not set name when send is not the owner', async () => { - const newENSName = 'unauthorized.eth'; - await expect(app.setName(ensRegistryAddress, newENSName)).to.be.revertedWith( - 'caller is not the owner', - ); - }); - }); }); describe('Dataset', () => { @@ -181,27 +142,6 @@ describe('Assets', () => { ); }); }); - - describe('setName', () => { - it('Should set name for the ENS reverse registration of the dataset', async () => { - const newENSName = 'myDataset.eth'; - await dataset - .connect(datasetProvider) - .setName(ensRegistryAddress, newENSName) - .then((tx) => tx.wait()); - const datasetAddress = await dataset.getAddress(); - expect(await reverseResolver.name(computeNameHash(datasetAddress))).to.equal( - newENSName, - ); - }); - - it('Should not set name when send is not the owner', async () => { - const newENSName = 'unauthorized.eth'; - await expect(dataset.setName(ensRegistryAddress, newENSName)).to.be.revertedWith( - 'caller is not the owner', - ); - }); - }); }); describe('Workerpool', () => { @@ -238,27 +178,6 @@ describe('Assets', () => { }); }); - describe('setName', () => { - it('Should set name for the ENS reverse registration of the workerpool', async () => { - const newENSName = 'myWorkerpool.eth'; - await workerpool - .connect(scheduler) - .setName(ensRegistryAddress, newENSName) - .then((tx) => tx.wait()); - const workerpoolAddress = await workerpool.getAddress(); - expect(await reverseResolver.name(computeNameHash(workerpoolAddress))).to.equal( - newENSName, - ); - }); - - it('Should not set name when send is not the owner', async () => { - const newENSName = 'unauthorized.eth'; - await expect(workerpool.setName(ensRegistryAddress, newENSName)).to.be.revertedWith( - 'caller is not the owner', - ); - }); - }); - describe('changePolicy', () => { it('Should update workerpool policy configuration', async () => { const previousWorkerStakeRatioPolicy = await workerpool.m_workerStakeRatioPolicy(); @@ -295,7 +214,4 @@ describe('Assets', () => { }); }); }); - - const computeNameHash = (address: string) => - ethers.namehash(`${address.substring(2)}.addr.reverse`); }); diff --git a/test/byContract/registries/registries.test.ts b/test/byContract/registries/registries.test.ts index 41b0fd97d..bcc3443bc 100644 --- a/test/byContract/registries/registries.test.ts +++ b/test/byContract/registries/registries.test.ts @@ -5,7 +5,7 @@ import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { loadFixture } from '@nomicfoundation/hardhat-network-helpers'; import { expect } from 'chai'; import { BytesLike, ZeroAddress } from 'ethers'; -import hre, { deployments, ethers } from 'hardhat'; +import hre, { ethers } from 'hardhat'; import { AppRegistry, AppRegistry__factory, @@ -13,14 +13,9 @@ import { DatasetRegistry, DatasetRegistry__factory, Dataset__factory, - ENSRegistry, - ENSRegistry__factory, IexecInterfaceNative, IexecInterfaceNative__factory, InitializableUpgradeabilityProxy__factory, - PublicResolver, - PublicResolver__factory, - ReverseRegistrar__factory, WorkerpoolRegistry, WorkerpoolRegistry__factory, Workerpool__factory, @@ -37,8 +32,6 @@ describe('Registries', () => { let iexecPoco: IexecInterfaceNative; let [iexecAdmin, appProvider, datasetProvider, scheduler, anyone]: SignerWithAddress[] = []; - let ensRegistry: ENSRegistry; - let ensRegistryAddress: string; let [appRegistry, appRegistryAsAdmin]: AppRegistry[] = []; let appRegistryAddress: string; let [datasetRegistry, datasetRegistryAsAdmin]: DatasetRegistry[] = []; @@ -54,8 +47,6 @@ describe('Registries', () => { async function initFixture() { ({ iexecAdmin, appProvider, datasetProvider, scheduler, anyone } = await getIexecAccounts()); - ensRegistryAddress = (await deployments.get('ENSRegistry')).address; - ensRegistry = ENSRegistry__factory.connect(ensRegistryAddress, anyone); iexecPoco = IexecInterfaceNative__factory.connect(proxyAddress, anyone); @@ -128,72 +119,6 @@ describe('Registries', () => { }); }); - describe('setName', () => { - let reverseResolver: PublicResolver; - let [appRegistryNameHash, datasetRegistryNameHash, workerpoolRegistryNameHash]: string[] = - []; - - beforeEach(async () => { - const reverseRootNameHash = ethers.namehash('addr.reverse'); - const reverseRegistrarAddress = await ensRegistry.owner(reverseRootNameHash); - const reverseResolverAddress = await ReverseRegistrar__factory.connect( - reverseRegistrarAddress, - anyone, - ).defaultResolver(); - reverseResolver = PublicResolver__factory.connect(reverseResolverAddress, anyone); - appRegistryNameHash = computeNameHash(appRegistryAddress); - datasetRegistryNameHash = computeNameHash(datasetRegistryAddress); - workerpoolRegistryNameHash = computeNameHash(workerpoolRegistryAddress); - }); - - it('Should retrieve the ENS name for registries', async () => { - expect(await reverseResolver.name(appRegistryNameHash)).to.equal('apps.v5.iexec.eth'); - expect(await reverseResolver.name(datasetRegistryNameHash)).to.equal( - 'datasets.v5.iexec.eth', - ); - expect(await reverseResolver.name(workerpoolRegistryNameHash)).to.equal( - 'workerpools.v5.iexec.eth', - ); - }); - - it('Should set name for the ENS reverse registration of registries', async () => { - const appRegistryEnsName = 'myAppRegistry.eth'; - const datasetRegistryEnsName = 'myDatasetRegistry.eth'; - const workerpoolRegistryEnsName = 'myWorkerpoolRegistry.eth'; - - await appRegistryAsAdmin - .setName(ensRegistryAddress, appRegistryEnsName) - .then((tx) => tx.wait()); - expect(await reverseResolver.name(appRegistryNameHash)).to.equal(appRegistryEnsName); - - await datasetRegistryAsAdmin - .setName(ensRegistryAddress, datasetRegistryEnsName) - .then((tx) => tx.wait()); - expect(await reverseResolver.name(datasetRegistryNameHash)).to.equal( - datasetRegistryEnsName, - ); - - await workerpoolRegistryAsAdmin - .setName(ensRegistryAddress, workerpoolRegistryEnsName) - .then((tx) => tx.wait()); - expect(await reverseResolver.name(workerpoolRegistryNameHash)).to.equal( - workerpoolRegistryEnsName, - ); - }); - - it('Should not set name when user is not the owner', async () => { - await expect( - appRegistry.setName(ensRegistryAddress, 'new.app.registry.eth'), - ).to.be.revertedWith('Ownable: caller is not the owner'); - await expect( - datasetRegistry.setName(ensRegistryAddress, 'new.dataset.registry.eth'), - ).to.be.revertedWith('Ownable: caller is not the owner'); - await expect( - workerpoolRegistry.setName(ensRegistryAddress, 'new.workerpool.registry.eth'), - ).to.be.revertedWith('Ownable: caller is not the owner'); - }); - }); - describe('setBaseURI', () => { it('Should retrieve base URI', async () => { const chainId = hre.network.config.chainId; @@ -547,7 +472,4 @@ describe('Registries', () => { ).to.be.revertedWith('Create2: Failed on deploy'); }); }); - - const computeNameHash = (address: string) => - ethers.namehash(`${address.substring(2)}.addr.reverse`); }); diff --git a/test/utils/hardhat-fixture-deployer.ts b/test/utils/hardhat-fixture-deployer.ts index fe1561c74..e20a4f3d8 100644 --- a/test/utils/hardhat-fixture-deployer.ts +++ b/test/utils/hardhat-fixture-deployer.ts @@ -4,7 +4,6 @@ import { loadFixture } from '@nomicfoundation/hardhat-network-helpers'; import { deployments, ethers } from 'hardhat'; import deploy from '../../deploy/0_deploy'; -import deployEns from '../../deploy/1_deploy-ens'; import { RLC__factory } from '../../typechain'; import config from '../../utils/config'; import { fundAccounts, saveToDeployments, transferAllOwnerships } from './fixture-helpers'; @@ -15,7 +14,6 @@ import { fundAccounts, saveToDeployments, transferAllOwnerships } from './fixtur */ async function deployAll() { await deploy(); - await deployEns(); return (await deployments.get('Diamond')).address; } @@ -58,7 +56,6 @@ async function setUpLocalForkInTokenMode() { console.log('No existing ERC1538Proxy found, deploying new contracts'); // Deploy all contracts await deploy(); - await deployEns(); const newProxyAddress = (await deployments.get('ERC1538Proxy')).address; console.log(`Deployed new ERC1538Proxy at ${newProxyAddress}`); return newProxyAddress;