diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e5d28a2ae..ee1ffe6b5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -49,7 +49,7 @@ jobs: target: 'contracts/tools/testing/slither/' solc-version: '0.8.21' slither-args: --checklist --markdown-root ${{ github.server_url }}/${{ github.repository }}/blob/${{ github.sha }}/ - fail-on: none # TODO set this to high or other + fail-on: high sarif: results.sarif - name: Upload SARIF file uses: github/codeql-action/upload-sarif@v3 diff --git a/abis/contracts/interfaces/IexecPoco1.json b/abis/contracts/interfaces/IexecPoco1.json index 2d95fce9e..cab83e88b 100644 --- a/abis/contracts/interfaces/IexecPoco1.json +++ b/abis/contracts/interfaces/IexecPoco1.json @@ -1,4 +1,15 @@ [ + { + "inputs": [ + { + "internalType": "string", + "name": "reason", + "type": "string" + } + ], + "name": "IncompatibleDatasetOrder", + "type": "error" + }, { "anonymous": false, "inputs": [ diff --git a/abis/contracts/interfaces/IexecPoco1Errors.json b/abis/contracts/interfaces/IexecPoco1Errors.json deleted file mode 100644 index 30b4bfd80..000000000 --- a/abis/contracts/interfaces/IexecPoco1Errors.json +++ /dev/null @@ -1,13 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "string", - "name": "reason", - "type": "string" - } - ], - "name": "IncompatibleDatasetOrder", - "type": "error" - } -] diff --git a/abis/human-readable-abis/contracts/interfaces/IexecPoco1.sol/IexecPoco1.json b/abis/human-readable-abis/contracts/interfaces/IexecPoco1.sol/IexecPoco1.json index 12527163f..d1ab87c0d 100644 --- a/abis/human-readable-abis/contracts/interfaces/IexecPoco1.sol/IexecPoco1.json +++ b/abis/human-readable-abis/contracts/interfaces/IexecPoco1.sol/IexecPoco1.json @@ -1,4 +1,5 @@ [ + "error IncompatibleDatasetOrder(string)", "event DealSponsored(bytes32,address)", "event OrdersMatched(bytes32,bytes32,bytes32,bytes32,bytes32,uint256)", "event SchedulerNotice(address indexed,bytes32)", diff --git a/abis/human-readable-abis/contracts/interfaces/IexecPoco1Errors.sol/IexecPoco1Errors.json b/abis/human-readable-abis/contracts/interfaces/IexecPoco1Errors.sol/IexecPoco1Errors.json deleted file mode 100644 index c18d4de38..000000000 --- a/abis/human-readable-abis/contracts/interfaces/IexecPoco1Errors.sol/IexecPoco1Errors.json +++ /dev/null @@ -1,3 +0,0 @@ -[ - "error IncompatibleDatasetOrder(string)" -] diff --git a/contracts/IexecInterface.sol b/contracts/IexecInterface.sol index daa6b5234..1bad1045e 100644 --- a/contracts/IexecInterface.sol +++ b/contracts/IexecInterface.sol @@ -11,16 +11,12 @@ import {IexecEscrow} from "./interfaces/IexecEscrow.sol"; import {IexecEscrowEvents} from "./interfaces/IexecEscrowEvents.sol"; import {IexecOrderManagement} from "./interfaces/IexecOrderManagement.sol"; import {IexecPoco1} from "./interfaces/IexecPoco1.sol"; -import {IexecPoco1Errors} from "./interfaces/IexecPoco1Errors.sol"; import {IexecPoco2} from "./interfaces/IexecPoco2.sol"; import {IexecPocoAccessors} from "./interfaces/IexecPocoAccessors.sol"; import {IexecRelay} from "./interfaces/IexecRelay.sol"; import {IexecTokenSpender} from "./interfaces/IexecTokenSpender.sol"; import {IOwnable} from "./interfaces/IOwnable.sol"; -// TODO see if Diamond interfaces should be added here ?? -// IDiamond, IDiamondLoupe, IDiamondCut, IERC165, IERC173 (ownership) - /** * A global interface that aggregates all the interfaces needed to interact with * the PoCo contracts. @@ -39,7 +35,6 @@ interface IexecInterface is IexecEscrowEvents, IexecOrderManagement, IexecPoco1, - IexecPoco1Errors, IexecPoco2, IexecPocoAccessors, IexecRelay, diff --git a/contracts/abstract/FacetBase.sol b/contracts/abstract/FacetBase.sol index 2cd15a438..84adc8211 100644 --- a/contracts/abstract/FacetBase.sol +++ b/contracts/abstract/FacetBase.sol @@ -3,20 +3,14 @@ pragma solidity ^0.8.0; +import {LibDiamond} from "@mudgen/diamond-1/contracts/libraries/LibDiamond.sol"; import {PocoStorageLib} from "../libs/PocoStorageLib.sol"; -import {IERC5313} from "@openzeppelin/contracts/interfaces/IERC5313.sol"; - -// TODO use LibDiamond.contractOwner() when migrating all contracts to v8. /** * @title Base contract of all Facet contracts. - * @dev Every facet must inherit from this contract. + * @dev Every facet should inherit from this contract. */ abstract contract FacetBase { - // TODO move these constants to a ConstantsLib library and reference them as - // ConstantsLib. in the next PR. - // CommonLib redeclares GROUPMEMBER_PURPOSE temporarily. - // Poco - Constants uint256 internal constant CONTRIBUTION_DEADLINE_RATIO = 7; uint256 internal constant REVEAL_DEADLINE_RATIO = 2; @@ -39,8 +33,7 @@ abstract contract FacetBase { } function owner() internal view returns (address) { - // TODO use LibDiamond.contractOwner() instead of an external call when migrating all contracts to v8. - return IERC5313(address(this)).owner(); + return LibDiamond.contractOwner(); } function _msgSender() internal view returns (address) { diff --git a/contracts/facets/IexecPoco1Facet.sol b/contracts/facets/IexecPoco1Facet.sol index 87917a36e..e18ecb65c 100644 --- a/contracts/facets/IexecPoco1Facet.sol +++ b/contracts/facets/IexecPoco1Facet.sol @@ -10,7 +10,6 @@ import {IexecLibOrders_v5} from "../libs/IexecLibOrders_v5.sol"; import {IWorkerpool} from "../registries/workerpools/IWorkerpool.v8.sol"; import {PocoStorageLib} from "../libs/PocoStorageLib.sol"; import {IexecPoco1} from "../interfaces/IexecPoco1.sol"; -import {IexecPoco1Errors} from "../interfaces/IexecPoco1Errors.sol"; import {FacetBase} from "../abstract/FacetBase.sol"; import {EscrowLib} from "../libs/EscrowLib.sol"; import {CommonLib} from "../libs/CommonLib.sol"; @@ -26,7 +25,7 @@ struct Matching { bool hasDataset; } -contract IexecPoco1Facet is IexecPoco1, IexecPoco1Errors, FacetBase { +contract IexecPoco1Facet is IexecPoco1, FacetBase { using Math for uint256; using IexecLibOrders_v5 for IexecLibOrders_v5.AppOrder; using IexecLibOrders_v5 for IexecLibOrders_v5.DatasetOrder; diff --git a/contracts/interfaces/IexecPoco1.sol b/contracts/interfaces/IexecPoco1.sol index 81e0289e0..8ff4cd2dd 100644 --- a/contracts/interfaces/IexecPoco1.sol +++ b/contracts/interfaces/IexecPoco1.sol @@ -5,6 +5,8 @@ pragma solidity ^0.8.0; import {IexecLibOrders_v5} from "../libs/IexecLibOrders_v5.sol"; interface IexecPoco1 { + error IncompatibleDatasetOrder(string reason); + event SchedulerNotice(address indexed workerpool, bytes32 dealid); event OrdersMatched( bytes32 dealid, diff --git a/contracts/interfaces/IexecPoco1Errors.sol b/contracts/interfaces/IexecPoco1Errors.sol deleted file mode 100644 index 76cd70ab0..000000000 --- a/contracts/interfaces/IexecPoco1Errors.sol +++ /dev/null @@ -1,9 +0,0 @@ -// SPDX-FileCopyrightText: 2020-2025 IEXEC BLOCKCHAIN TECH -// SPDX-License-Identifier: Apache-2.0 - -pragma solidity ^0.8.0; - -interface IexecPoco1Errors { - // TODO put this in `IexecPoco1` when it is migrated to Solidity v8. - error IncompatibleDatasetOrder(string reason); -} diff --git a/docs/solidity/index.md b/docs/solidity/index.md index 0c79d22d6..1aa6415fe 100644 --- a/docs/solidity/index.md +++ b/docs/solidity/index.md @@ -11,7 +11,7 @@ Changing the name or the path would cause a breaking change in the SDK._ ## FacetBase -_Every facet must inherit from this contract._ +_Every facet should inherit from this contract._ ## IexecCategoryManagerFacet diff --git a/docs/uml/class-uml-IexecEscrows.svg b/docs/uml/class-uml-IexecEscrows.svg index b4a3e3a10..56bfa6693 100644 --- a/docs/uml/class-uml-IexecEscrows.svg +++ b/docs/uml/class-uml-IexecEscrows.svg @@ -124,9 +124,9 @@ - + -33 +32 <<Interface>> IexecTokenSpender @@ -135,15 +135,15 @@ External:     receiveApproval(address, uint256, address, bytes): bool - + -8->33 +8->32 - + -50 +49 <<Library>> IexecLibOrders_v5 @@ -171,15 +171,15 @@    hash(_workerpoolorderoperation: WorkerpoolOrderOperation): bytes32    hash(_requestorderoperation: RequestOrderOperation): bytes32 - + -8->50 +8->49 - + -61 +60 <<Library>> PocoStorageLib @@ -191,15 +191,15 @@ Internal:    getPocoStorage(): ($: PocoStorage) - + -8->61 +8->60 - + -62 +61 <<Struct>> PocoStorage @@ -231,15 +231,15 @@ m_v3_scoreImported: mapping(address=>bool) m_dealsBoost: mapping(bytes32=>IexecLibCore_v5.DealBoost) - + -8->62 +8->61 - + -63 +62 <<Library>> StakedRlcLib @@ -254,9 +254,9 @@    <<event>> Transfer(from: address, to: address, value: uint256)    <<event>> Approval(owner: address, spender: address, value: uint256) - + -8->63 +8->62 @@ -271,15 +271,15 @@ External:     viewScore(worker: address): uint256 - + -26->50 +26->49 - + -53 +52 <<Struct>> AppOrder @@ -295,15 +295,15 @@ salt: bytes32 sign: bytes - + -26->53 +26->52 - + -54 +53 <<Struct>> DatasetOrder @@ -319,15 +319,15 @@ salt: bytes32 sign: bytes - + -26->54 +26->53 - + -55 +54 <<Struct>> WorkerpoolOrder @@ -345,15 +345,15 @@ salt: bytes32 sign: bytes - + -26->55 +26->54 - + -56 +55 <<Struct>> RequestOrder @@ -376,15 +376,15 @@ salt: bytes32 sign: bytes - + -26->56 +26->55 - + -35 +34 <<Library>> EscrowLib @@ -402,35 +402,35 @@    <<event>> Lock(owner: address, amount: uint256)    <<event>> Unlock(owner: address, amount: uint256) - + -35->61 +34->60 - + -35->62 +34->61 - + -35->63 +34->62 - + -36 +35 <<Library>> IexecLibCore_v5 contracts/libs/IexecLibCore_v5.sol - + -52 +51 <<Struct>> EIP712Domain @@ -441,39 +441,39 @@ chainId: uint256 verifyingContract: address - + -50->52 +49->51 - + -50->53 +49->52 - + -50->54 +49->53 - + -50->55 +49->54 - + -50->56 +49->55 - + -57 +56 <<Struct>> AppOrderOperation @@ -483,15 +483,15 @@ operation: OrderOperationEnum sign: bytes - + -50->57 +49->56 - + -58 +57 <<Struct>> DatasetOrderOperation @@ -501,15 +501,15 @@ operation: OrderOperationEnum sign: bytes - + -50->58 +49->57 - + -59 +58 <<Struct>> WorkerpoolOrderOperation @@ -519,15 +519,15 @@ operation: OrderOperationEnum sign: bytes - + -50->59 +49->58 - + -60 +59 <<Struct>> RequestOrderOperation @@ -537,15 +537,15 @@ operation: OrderOperationEnum sign: bytes - + -50->60 +49->59 - + -51 +50 <<Enum>> OrderOperationEnum @@ -554,141 +554,141 @@ SIGN: 0 CLOSE: 1 - + -51->50 +50->49 - + -52->50 +51->49 - + -53->50 +52->49 - + -54->50 +53->49 - + -55->50 +54->49 - + -56->50 +55->49 - + -57->50 +56->49 - + -57->51 +56->50 - + -57->53 +56->52 - + -58->50 +57->49 - + -58->51 +57->50 - + -58->54 +57->53 - + -59->50 +58->49 - + -59->51 +58->50 - + -59->55 +58->54 - + -60->50 +59->49 - + -60->51 +59->50 - + -60->56 +59->55 - + -61->62 +60->61 - + -62->24 +61->24 - + -62->36 +61->35 - + -62->61 +61->60 - + -64 +63 <<Interface>> IRegistry @@ -697,21 +697,21 @@ External:     isRegistered(_entry: address): bool - + -62->64 +61->63 - + -63->61 +62->60 - + -63->62 +62->61 diff --git a/docs/uml/class-uml-IexecPocoBoostFacet.svg b/docs/uml/class-uml-IexecPocoBoostFacet.svg index e5cf871b5..f46b0b721 100644 --- a/docs/uml/class-uml-IexecPocoBoostFacet.svg +++ b/docs/uml/class-uml-IexecPocoBoostFacet.svg @@ -33,9 +33,9 @@ Public:    <<modifier>> onlyOwner() - + -68 +67 <<Interface>> IOracleConsumer @@ -66,15 +66,15 @@ - + -15->68 +15->67 - + -30 +29 <<Interface>> IexecPocoBoost @@ -92,15 +92,15 @@    <<event>> TaskClaimed(taskid: bytes32)    <<event>> DealSponsoredBoost(dealId: bytes32, sponsor: address) - + -15->30 +15->29 - + -34 +33 <<Library>> CommonLib @@ -118,15 +118,15 @@    isAccountAuthorizedByRestriction(restriction: address, account: address): bool    computeDealVolume(appOrderVolume: uint256, appOrderTypedDataHash: bytes32, hasDataset: bool, datasetOrderVolume: uint256, datasetOrderTypedDataHash: bytes32, workerpoolOrderVolume: uint256, workerpoolOrderTypedDataHash: bytes32, requestOrderVolume: uint256, requestOrderTypedDataHash: bytes32): uint256 - + -15->34 +15->33 - + -35 +34 <<Library>> EscrowLib @@ -144,29 +144,29 @@    <<event>> Lock(owner: address, amount: uint256)    <<event>> Unlock(owner: address, amount: uint256) - + -15->35 +15->34 - + -36 +35 <<Library>> IexecLibCore_v5 contracts/libs/IexecLibCore_v5.sol - + -15->36 +15->35 - + -44 +43 <<Struct>> DealBoost @@ -187,15 +187,15 @@ shortTag: bytes3 sponsor: address - + -15->44 +15->43 - + -45 +44 <<Enum>> TaskStatusEnum @@ -207,15 +207,15 @@ COMPLETED: 3 FAILED: 4 - + -15->45 +15->44 - + -46 +45 <<Struct>> Task @@ -237,15 +237,15 @@ resultsTimestamp: uint256 resultsCallback: bytes - + -15->46 +15->45 - + -50 +49 <<Library>> IexecLibOrders_v5 @@ -273,15 +273,15 @@    hash(_workerpoolorderoperation: WorkerpoolOrderOperation): bytes32    hash(_requestorderoperation: RequestOrderOperation): bytes32 - + -15->50 +15->49 - + -53 +52 <<Struct>> AppOrder @@ -297,15 +297,15 @@ salt: bytes32 sign: bytes - + -15->53 +15->52 - + -54 +53 <<Struct>> DatasetOrder @@ -321,15 +321,15 @@ salt: bytes32 sign: bytes - + -15->54 +15->53 - + -55 +54 <<Struct>> WorkerpoolOrder @@ -347,15 +347,15 @@ salt: bytes32 sign: bytes - + -15->55 +15->54 - + -56 +55 <<Struct>> RequestOrder @@ -378,15 +378,15 @@ salt: bytes32 sign: bytes - + -15->56 +15->55 - + -61 +60 <<Library>> PocoStorageLib @@ -398,15 +398,15 @@ Internal:    getPocoStorage(): ($: PocoStorage) - + -15->61 +15->60 - + -62 +61 <<Struct>> PocoStorage @@ -438,15 +438,15 @@ m_v3_scoreImported: mapping(address=>bool) m_dealsBoost: mapping(bytes32=>IexecLibCore_v5.DealBoost) - + -15->62 +15->61 - + -79 +78 <<Interface>> IWorkerpool @@ -458,9 +458,9 @@     m_schedulerRewardRatioPolicy(): uint256     m_workerStakeRatioPolicy(): uint256 - + -15->79 +15->78 @@ -475,63 +475,63 @@ External:     viewScore(worker: address): uint256 - + -30->50 +29->49 - + -30->53 +29->52 - + -30->54 +29->53 - + -30->55 +29->54 - + -30->56 +29->55 - + -34->61 +33->60 - + -34->62 +33->61 - + -35->61 +34->60 - + -35->62 +34->61 - + -63 +62 <<Library>> StakedRlcLib @@ -546,39 +546,39 @@    <<event>> Transfer(from: address, to: address, value: uint256)    <<event>> Approval(owner: address, spender: address, value: uint256) - + -35->63 +34->62 - + -44->36 +43->35 - + -45->36 +44->35 - + -46->36 +45->35 - + -46->45 +45->44 - + -52 +51 <<Struct>> EIP712Domain @@ -589,39 +589,39 @@ chainId: uint256 verifyingContract: address - + -50->52 +49->51 - + -50->53 +49->52 - + -50->54 +49->53 - + -50->55 +49->54 - + -50->56 +49->55 - + -57 +56 <<Struct>> AppOrderOperation @@ -631,15 +631,15 @@ operation: OrderOperationEnum sign: bytes - + -50->57 +49->56 - + -58 +57 <<Struct>> DatasetOrderOperation @@ -649,15 +649,15 @@ operation: OrderOperationEnum sign: bytes - + -50->58 +49->57 - + -59 +58 <<Struct>> WorkerpoolOrderOperation @@ -667,15 +667,15 @@ operation: OrderOperationEnum sign: bytes - + -50->59 +49->58 - + -60 +59 <<Struct>> RequestOrderOperation @@ -685,15 +685,15 @@ operation: OrderOperationEnum sign: bytes - + -50->60 +49->59 - + -51 +50 <<Enum>> OrderOperationEnum @@ -702,141 +702,141 @@ SIGN: 0 CLOSE: 1 - + -51->50 +50->49 - + -52->50 +51->49 - + -53->50 +52->49 - + -54->50 +53->49 - + -55->50 +54->49 - + -56->50 +55->49 - + -57->50 +56->49 - + -57->51 +56->50 - + -57->53 +56->52 - + -58->50 +57->49 - + -58->51 +57->50 - + -58->54 +57->53 - + -59->50 +58->49 - + -59->51 +58->50 - + -59->55 +58->54 - + -60->50 +59->49 - + -60->51 +59->50 - + -60->56 +59->55 - + -61->62 +60->61 - + -62->24 +61->24 - + -62->36 +61->35 - + -62->61 +61->60 - + -64 +63 <<Interface>> IRegistry @@ -845,21 +845,21 @@ External:     isRegistered(_entry: address): bool - + -62->64 +61->63 - + -63->61 +62->60 - + -63->62 +62->61 diff --git a/docs/uml/class-uml-IexecPocoFacets.svg b/docs/uml/class-uml-IexecPocoFacets.svg index bca055427..e54dde0d1 100644 --- a/docs/uml/class-uml-IexecPocoFacets.svg +++ b/docs/uml/class-uml-IexecPocoFacets.svg @@ -4,1086 +4,1072 @@ - + UmlClassDiagram - + 3 - -<<Abstract>> -FacetBase -contracts/abstract/FacetBase.sol - -Internal: -   CONTRIBUTION_DEADLINE_RATIO: uint256 -   REVEAL_DEADLINE_RATIO: uint256 -   FINAL_DEADLINE_RATIO: uint256 -   WORKERPOOL_STAKE_RATIO: uint256 -   KITTY_RATIO: uint256 -   KITTY_MIN: uint256 -   KITTY_ADDRESS: address -   GROUPMEMBER_PURPOSE: uint256 - -Internal: -    owner(): address -    _msgSender(): address -Public: -    <<modifier>> onlyOwner() + +<<Abstract>> +FacetBase +contracts/abstract/FacetBase.sol + +Internal: +   CONTRIBUTION_DEADLINE_RATIO: uint256 +   REVEAL_DEADLINE_RATIO: uint256 +   FINAL_DEADLINE_RATIO: uint256 +   WORKERPOOL_STAKE_RATIO: uint256 +   KITTY_RATIO: uint256 +   KITTY_MIN: uint256 +   KITTY_ADDRESS: address +   GROUPMEMBER_PURPOSE: uint256 + +Internal: +    owner(): address +    _msgSender(): address +Public: +    <<modifier>> onlyOwner() 10 - -<<Struct>> -Matching -contracts/facets/IexecPoco1Facet.sol - -apporderHash: bytes32 -appOwner: address -datasetorderHash: bytes32 -datasetOwner: address -workerpoolorderHash: bytes32 -workerpoolOwner: address -requestorderHash: bytes32 -hasDataset: bool + +<<Struct>> +Matching +contracts/facets/IexecPoco1Facet.sol + +apporderHash: bytes32 +appOwner: address +datasetorderHash: bytes32 +datasetOwner: address +workerpoolorderHash: bytes32 +workerpoolOwner: address +requestorderHash: bytes32 +hasDataset: bool 11 - -IexecPoco1Facet -contracts/facets/IexecPoco1Facet.sol - -Private: -    _matchOrders(_apporder: IexecLibOrders_v5.AppOrder, _datasetorder: IexecLibOrders_v5.DatasetOrder, _workerpoolorder: IexecLibOrders_v5.WorkerpoolOrder, _requestorder: IexecLibOrders_v5.RequestOrder, _sponsor: address): bytes32 -    _ignoreTeeFramework(tag: bytes32): bytes32 -External: -    verifySignature(_identity: address, _hash: bytes32, _signature: bytes): bool -    verifyPresignature(_identity: address, _hash: bytes32): bool -    verifyPresignatureOrSignature(_identity: address, _hash: bytes32, _signature: bytes): bool -    assertDatasetDealCompatibility(datasetOrder: IexecLibOrders_v5.DatasetOrder, dealId: bytes32) -    matchOrders(_apporder: IexecLibOrders_v5.AppOrder, _datasetorder: IexecLibOrders_v5.DatasetOrder, _workerpoolorder: IexecLibOrders_v5.WorkerpoolOrder, _requestorder: IexecLibOrders_v5.RequestOrder): bytes32 -    sponsorMatchOrders(_apporder: IexecLibOrders_v5.AppOrder, _datasetorder: IexecLibOrders_v5.DatasetOrder, _workerpoolorder: IexecLibOrders_v5.WorkerpoolOrder, _requestorder: IexecLibOrders_v5.RequestOrder): bytes32 + +IexecPoco1Facet +contracts/facets/IexecPoco1Facet.sol + +Private: +    _matchOrders(_apporder: IexecLibOrders_v5.AppOrder, _datasetorder: IexecLibOrders_v5.DatasetOrder, _workerpoolorder: IexecLibOrders_v5.WorkerpoolOrder, _requestorder: IexecLibOrders_v5.RequestOrder, _sponsor: address): bytes32 +    _ignoreTeeFramework(tag: bytes32): bytes32 +External: +    verifySignature(_identity: address, _hash: bytes32, _signature: bytes): bool +    verifyPresignature(_identity: address, _hash: bytes32): bool +    verifyPresignatureOrSignature(_identity: address, _hash: bytes32, _signature: bytes): bool +    assertDatasetDealCompatibility(datasetOrder: IexecLibOrders_v5.DatasetOrder, dealId: bytes32) +    matchOrders(_apporder: IexecLibOrders_v5.AppOrder, _datasetorder: IexecLibOrders_v5.DatasetOrder, _workerpoolorder: IexecLibOrders_v5.WorkerpoolOrder, _requestorder: IexecLibOrders_v5.RequestOrder): bytes32 +    sponsorMatchOrders(_apporder: IexecLibOrders_v5.AppOrder, _datasetorder: IexecLibOrders_v5.DatasetOrder, _workerpoolorder: IexecLibOrders_v5.WorkerpoolOrder, _requestorder: IexecLibOrders_v5.RequestOrder): bytes32 - + 11->3 - - + + - + 11->10 - - + + 26 - -<<Interface>> -IexecPoco1 -contracts/interfaces/IexecPoco1.sol - -External: -     verifySignature(address, bytes32, bytes): bool -     verifyPresignature(address, bytes32): bool -     verifyPresignatureOrSignature(address, bytes32, bytes): bool -     assertDatasetDealCompatibility(datasetOrder: IexecLibOrders_v5.DatasetOrder, dealId: bytes32) -     matchOrders(IexecLibOrders_v5.AppOrder, IexecLibOrders_v5.DatasetOrder, IexecLibOrders_v5.WorkerpoolOrder, IexecLibOrders_v5.RequestOrder): bytes32 -     sponsorMatchOrders(IexecLibOrders_v5.AppOrder, IexecLibOrders_v5.DatasetOrder, IexecLibOrders_v5.WorkerpoolOrder, IexecLibOrders_v5.RequestOrder): bytes32 -Public: -    <<event>> SchedulerNotice(workerpool: address, dealid: bytes32) -    <<event>> OrdersMatched(dealid: bytes32, appHash: bytes32, datasetHash: bytes32, workerpoolHash: bytes32, requestHash: bytes32, volume: uint256) -    <<event>> DealSponsored(dealId: bytes32, sponsor: address) + +<<Interface>> +IexecPoco1 +contracts/interfaces/IexecPoco1.sol + +External: +     verifySignature(address, bytes32, bytes): bool +     verifyPresignature(address, bytes32): bool +     verifyPresignatureOrSignature(address, bytes32, bytes): bool +     assertDatasetDealCompatibility(datasetOrder: IexecLibOrders_v5.DatasetOrder, dealId: bytes32) +     matchOrders(IexecLibOrders_v5.AppOrder, IexecLibOrders_v5.DatasetOrder, IexecLibOrders_v5.WorkerpoolOrder, IexecLibOrders_v5.RequestOrder): bytes32 +     sponsorMatchOrders(IexecLibOrders_v5.AppOrder, IexecLibOrders_v5.DatasetOrder, IexecLibOrders_v5.WorkerpoolOrder, IexecLibOrders_v5.RequestOrder): bytes32 +Public: +    <<event>> SchedulerNotice(workerpool: address, dealid: bytes32) +    <<event>> OrdersMatched(dealid: bytes32, appHash: bytes32, datasetHash: bytes32, workerpoolHash: bytes32, requestHash: bytes32, volume: uint256) +    <<event>> DealSponsored(dealId: bytes32, sponsor: address) 11->26 - - - - - -27 - -<<Interface>> -IexecPoco1Errors -contracts/interfaces/IexecPoco1Errors.sol + + - - -11->27 - - + + +33 + +<<Library>> +CommonLib +contracts/libs/CommonLib.sol + +Private: +   GROUPMEMBER_PURPOSE: uint256 + +Internal: +    toTypedDataHash(structHash: bytes32): bytes32 +    verifySignatureOfEthSignedMessage(account: address, message: bytes, signature: bytes): bool +    verifySignature(account: address, messageHash: bytes32, signature: bytes): bool +    verifyPresignature(account: address, messageHash: bytes32): bool +    verifySignatureOrPresignature(account: address, messageHash: bytes32, signature: bytes): bool +    isAccountAuthorizedByRestriction(restriction: address, account: address): bool +    computeDealVolume(appOrderVolume: uint256, appOrderTypedDataHash: bytes32, hasDataset: bool, datasetOrderVolume: uint256, datasetOrderTypedDataHash: bytes32, workerpoolOrderVolume: uint256, workerpoolOrderTypedDataHash: bytes32, requestOrderVolume: uint256, requestOrderTypedDataHash: bytes32): uint256 + + + +11->33 + + 34 - -<<Library>> -CommonLib -contracts/libs/CommonLib.sol - -Private: -   GROUPMEMBER_PURPOSE: uint256 - -Internal: -    toTypedDataHash(structHash: bytes32): bytes32 -    verifySignatureOfEthSignedMessage(account: address, message: bytes, signature: bytes): bool -    verifySignature(account: address, messageHash: bytes32, signature: bytes): bool -    verifyPresignature(account: address, messageHash: bytes32): bool -    verifySignatureOrPresignature(account: address, messageHash: bytes32, signature: bytes): bool -    isAccountAuthorizedByRestriction(restriction: address, account: address): bool -    computeDealVolume(appOrderVolume: uint256, appOrderTypedDataHash: bytes32, hasDataset: bool, datasetOrderVolume: uint256, datasetOrderTypedDataHash: bytes32, workerpoolOrderVolume: uint256, workerpoolOrderTypedDataHash: bytes32, requestOrderVolume: uint256, requestOrderTypedDataHash: bytes32): uint256 + +<<Library>> +EscrowLib +contracts/libs/EscrowLib.sol + +Internal: +    lock(account: address, value: uint256) +    unlock(account: address, value: uint256) +    reward(account: address, value: uint256, ref: bytes32) +    seize(account: address, value: uint256, ref: bytes32) +    rewardAndLock(account: address, value: uint256, ref: bytes32) +Public: +    <<event>> Reward(owner: address, amount: uint256, ref: bytes32) +    <<event>> Seize(owner: address, amount: uint256, ref: bytes32) +    <<event>> Lock(owner: address, amount: uint256) +    <<event>> Unlock(owner: address, amount: uint256) - + 11->34 - - + + 35 - -<<Library>> -EscrowLib -contracts/libs/EscrowLib.sol - -Internal: -    lock(account: address, value: uint256) -    unlock(account: address, value: uint256) -    reward(account: address, value: uint256, ref: bytes32) -    seize(account: address, value: uint256, ref: bytes32) -    rewardAndLock(account: address, value: uint256, ref: bytes32) -Public: -    <<event>> Reward(owner: address, amount: uint256, ref: bytes32) -    <<event>> Seize(owner: address, amount: uint256, ref: bytes32) -    <<event>> Lock(owner: address, amount: uint256) -    <<event>> Unlock(owner: address, amount: uint256) + +<<Library>> +IexecLibCore_v5 +contracts/libs/IexecLibCore_v5.sol - + 11->35 - - - - - -36 - -<<Library>> -IexecLibCore_v5 -contracts/libs/IexecLibCore_v5.sol + + - + + +42 + +<<Struct>> +Deal +contracts/libs/IexecLibCore_v5.sol + +app: Resource +dataset: Resource +workerpool: Resource +trust: uint256 +category: uint256 +tag: bytes32 +requester: address +beneficiary: address +callback: address +params: string +startTime: uint256 +botFirst: uint256 +botSize: uint256 +workerStake: uint256 +schedulerRewardRatio: uint256 +sponsor: address + + -11->36 - - +11->42 + + - - -43 - -<<Struct>> -Deal -contracts/libs/IexecLibCore_v5.sol - -app: Resource -dataset: Resource -workerpool: Resource -trust: uint256 -category: uint256 -tag: bytes32 -requester: address -beneficiary: address -callback: address -params: string -startTime: uint256 -botFirst: uint256 -botSize: uint256 -workerStake: uint256 -schedulerRewardRatio: uint256 -sponsor: address - - - -11->43 - - + + +49 + +<<Library>> +IexecLibOrders_v5 +contracts/libs/IexecLibOrders_v5.sol + +Public: +   EIP712DOMAIN_TYPEHASH: bytes32 +   APPORDER_TYPEHASH: bytes32 +   DATASETORDER_TYPEHASH: bytes32 +   WORKERPOOLORDER_TYPEHASH: bytes32 +   REQUESTORDER_TYPEHASH: bytes32 +   APPORDEROPERATION_TYPEHASH: bytes32 +   DATASETORDEROPERATION_TYPEHASH: bytes32 +   WORKERPOOLORDEROPERATION_TYPEHASH: bytes32 +   REQUESTORDEROPERATION_TYPEHASH: bytes32 + +Public: +    hash(_domain: EIP712Domain): (domainhash: bytes32) +    hash(_apporder: AppOrder): (apphash: bytes32) +    hash(_datasetorder: DatasetOrder): (datasethash: bytes32) +    hash(_workerpoolorder: WorkerpoolOrder): (workerpoolhash: bytes32) +    hash(_requestorder: RequestOrder): (requesthash: bytes32) +    hash(_apporderoperation: AppOrderOperation): bytes32 +    hash(_datasetorderoperation: DatasetOrderOperation): bytes32 +    hash(_workerpoolorderoperation: WorkerpoolOrderOperation): bytes32 +    hash(_requestorderoperation: RequestOrderOperation): bytes32 + + + +11->49 + + - - -50 - -<<Library>> -IexecLibOrders_v5 -contracts/libs/IexecLibOrders_v5.sol - -Public: -   EIP712DOMAIN_TYPEHASH: bytes32 -   APPORDER_TYPEHASH: bytes32 -   DATASETORDER_TYPEHASH: bytes32 -   WORKERPOOLORDER_TYPEHASH: bytes32 -   REQUESTORDER_TYPEHASH: bytes32 -   APPORDEROPERATION_TYPEHASH: bytes32 -   DATASETORDEROPERATION_TYPEHASH: bytes32 -   WORKERPOOLORDEROPERATION_TYPEHASH: bytes32 -   REQUESTORDEROPERATION_TYPEHASH: bytes32 - -Public: -    hash(_domain: EIP712Domain): (domainhash: bytes32) -    hash(_apporder: AppOrder): (apphash: bytes32) -    hash(_datasetorder: DatasetOrder): (datasethash: bytes32) -    hash(_workerpoolorder: WorkerpoolOrder): (workerpoolhash: bytes32) -    hash(_requestorder: RequestOrder): (requesthash: bytes32) -    hash(_apporderoperation: AppOrderOperation): bytes32 -    hash(_datasetorderoperation: DatasetOrderOperation): bytes32 -    hash(_workerpoolorderoperation: WorkerpoolOrderOperation): bytes32 -    hash(_requestorderoperation: RequestOrderOperation): bytes32 - - - -11->50 - - + + +52 + +<<Struct>> +AppOrder +contracts/libs/IexecLibOrders_v5.sol + +app: address +appprice: uint256 +volume: uint256 +tag: bytes32 +datasetrestrict: address +workerpoolrestrict: address +requesterrestrict: address +salt: bytes32 +sign: bytes + + + +11->52 + + 53 - -<<Struct>> -AppOrder -contracts/libs/IexecLibOrders_v5.sol - -app: address -appprice: uint256 -volume: uint256 -tag: bytes32 -datasetrestrict: address -workerpoolrestrict: address -requesterrestrict: address -salt: bytes32 -sign: bytes + +<<Struct>> +DatasetOrder +contracts/libs/IexecLibOrders_v5.sol + +dataset: address +datasetprice: uint256 +volume: uint256 +tag: bytes32 +apprestrict: address +workerpoolrestrict: address +requesterrestrict: address +salt: bytes32 +sign: bytes - + 11->53 - - + + 54 - -<<Struct>> -DatasetOrder -contracts/libs/IexecLibOrders_v5.sol - -dataset: address -datasetprice: uint256 -volume: uint256 -tag: bytes32 -apprestrict: address -workerpoolrestrict: address -requesterrestrict: address -salt: bytes32 -sign: bytes + +<<Struct>> +WorkerpoolOrder +contracts/libs/IexecLibOrders_v5.sol + +workerpool: address +workerpoolprice: uint256 +volume: uint256 +tag: bytes32 +category: uint256 +trust: uint256 +apprestrict: address +datasetrestrict: address +requesterrestrict: address +salt: bytes32 +sign: bytes - + 11->54 - - + + 55 - -<<Struct>> -WorkerpoolOrder -contracts/libs/IexecLibOrders_v5.sol - -workerpool: address -workerpoolprice: uint256 -volume: uint256 -tag: bytes32 -category: uint256 -trust: uint256 -apprestrict: address -datasetrestrict: address -requesterrestrict: address -salt: bytes32 -sign: bytes + +<<Struct>> +RequestOrder +contracts/libs/IexecLibOrders_v5.sol + +app: address +appmaxprice: uint256 +dataset: address +datasetmaxprice: uint256 +workerpool: address +workerpoolmaxprice: uint256 +requester: address +volume: uint256 +tag: bytes32 +category: uint256 +trust: uint256 +beneficiary: address +callback: address +params: string +salt: bytes32 +sign: bytes 11->55 - - + + - - -56 - -<<Struct>> -RequestOrder -contracts/libs/IexecLibOrders_v5.sol - -app: address -appmaxprice: uint256 -dataset: address -datasetmaxprice: uint256 -workerpool: address -workerpoolmaxprice: uint256 -requester: address -volume: uint256 -tag: bytes32 -category: uint256 -trust: uint256 -beneficiary: address -callback: address -params: string -salt: bytes32 -sign: bytes - - - -11->56 - - + + +60 + +<<Library>> +PocoStorageLib +contracts/libs/PocoStorageLib.sol + +Private: +   POCO_STORAGE_LOCATION: bytes32 + +Internal: +    getPocoStorage(): ($: PocoStorage) + + + +11->60 + + 61 - -<<Library>> -PocoStorageLib -contracts/libs/PocoStorageLib.sol - -Private: -   POCO_STORAGE_LOCATION: bytes32 - -Internal: -    getPocoStorage(): ($: PocoStorage) + +<<Struct>> +PocoStorage +contracts/libs/PocoStorageLib.sol + +m_appregistry: IRegistry +m_datasetregistry: IRegistry +m_workerpoolregistry: IRegistry +m_baseToken: IERC20 +m_name: string +m_symbol: string +m_decimals: uint8 +m_totalSupply: uint256 +m_balances: mapping(address=>uint256) +m_frozens: mapping(address=>uint256) +m_allowances: mapping(address=>mapping(address=>uint256)) +m_eip712DomainSeparator: bytes32 +m_presigned: mapping(bytes32=>address) +m_consumed: mapping(bytes32=>uint256) +m_deals: mapping(bytes32=>IexecLibCore_v5.Deal) +m_tasks: mapping(bytes32=>IexecLibCore_v5.Task) +m_consensus: mapping(bytes32=>IexecLibCore_v5.Consensus) +m_contributions: mapping(bytes32=>mapping(address=>IexecLibCore_v5.Contribution)) +m_workerScores: mapping(address=>uint256) +m_teebroker: address +m_callbackgas: uint256 +m_categories: IexecLibCore_v5.Category[] +m_v3_iexecHub: IexecHubV3Interface +m_v3_scoreImported: mapping(address=>bool) +m_dealsBoost: mapping(bytes32=>IexecLibCore_v5.DealBoost) 11->61 - - + + - - -62 - -<<Struct>> -PocoStorage -contracts/libs/PocoStorageLib.sol - -m_appregistry: IRegistry -m_datasetregistry: IRegistry -m_workerpoolregistry: IRegistry -m_baseToken: IERC20 -m_name: string -m_symbol: string -m_decimals: uint8 -m_totalSupply: uint256 -m_balances: mapping(address=>uint256) -m_frozens: mapping(address=>uint256) -m_allowances: mapping(address=>mapping(address=>uint256)) -m_eip712DomainSeparator: bytes32 -m_presigned: mapping(bytes32=>address) -m_consumed: mapping(bytes32=>uint256) -m_deals: mapping(bytes32=>IexecLibCore_v5.Deal) -m_tasks: mapping(bytes32=>IexecLibCore_v5.Task) -m_consensus: mapping(bytes32=>IexecLibCore_v5.Consensus) -m_contributions: mapping(bytes32=>mapping(address=>IexecLibCore_v5.Contribution)) -m_workerScores: mapping(address=>uint256) -m_teebroker: address -m_callbackgas: uint256 -m_categories: IexecLibCore_v5.Category[] -m_v3_iexecHub: IexecHubV3Interface -m_v3_scoreImported: mapping(address=>bool) -m_dealsBoost: mapping(bytes32=>IexecLibCore_v5.DealBoost) - - - -11->62 - - - - - -79 - -<<Interface>> -IWorkerpool -contracts/registries/workerpools/IWorkerpool.v8.sol - -External: -     owner(): address -     m_workerpoolDescription(): string -     m_schedulerRewardRatioPolicy(): uint256 -     m_workerStakeRatioPolicy(): uint256 - - - -11->79 - - + + +78 + +<<Interface>> +IWorkerpool +contracts/registries/workerpools/IWorkerpool.v8.sol + +External: +     owner(): address +     m_workerpoolDescription(): string +     m_schedulerRewardRatioPolicy(): uint256 +     m_workerStakeRatioPolicy(): uint256 + + + +11->78 + + 12 - -IexecPoco2Facet -contracts/facets/IexecPoco2Facet.sol - -Internal: -    successWork(_dealid: bytes32, _taskid: bytes32) -    failedWork(_dealid: bytes32, _taskid: bytes32) -    checkConsensus(_taskid: bytes32, _consensus: bytes32) -    distributeRewards(_taskid: bytes32) -    distributeRewardsFast(_taskid: bytes32) -    executeCallback(_taskid: bytes32, _resultsCallback: bytes) -External: -    contribute(_taskid: bytes32, _resultHash: bytes32, _resultSeal: bytes32, _enclaveChallenge: address, _enclaveSign: bytes, _authorizationSign: bytes) -    contributeAndFinalize(_taskid: bytes32, _resultDigest: bytes32, _results: bytes, _resultsCallback: bytes, _enclaveChallenge: address, _enclaveSign: bytes, _authorizationSign: bytes) -    reveal(_taskid: bytes32, _resultDigest: bytes32) -    reopen(_taskid: bytes32) <<onlyScheduler>> -    finalize(_taskid: bytes32, _results: bytes, _resultsCallback: bytes) <<onlyScheduler>> -    initializeArray(_dealid: bytes32[], _idx: uint256[]): bool -    claimArray(_taskid: bytes32[]): bool -    initializeAndClaimArray(_dealid: bytes32[], _idx: uint256[]): bool -Public: -    <<modifier>> onlyScheduler(_taskId: bytes32) -    initialize(_dealid: bytes32, idx: uint256): bytes32 -    claim(_taskid: bytes32) + +IexecPoco2Facet +contracts/facets/IexecPoco2Facet.sol + +Internal: +    successWork(_dealid: bytes32, _taskid: bytes32) +    failedWork(_dealid: bytes32, _taskid: bytes32) +    checkConsensus(_taskid: bytes32, _consensus: bytes32) +    distributeRewards(_taskid: bytes32) +    distributeRewardsFast(_taskid: bytes32) +    executeCallback(_taskid: bytes32, _resultsCallback: bytes) +External: +    contribute(_taskid: bytes32, _resultHash: bytes32, _resultSeal: bytes32, _enclaveChallenge: address, _enclaveSign: bytes, _authorizationSign: bytes) +    contributeAndFinalize(_taskid: bytes32, _resultDigest: bytes32, _results: bytes, _resultsCallback: bytes, _enclaveChallenge: address, _enclaveSign: bytes, _authorizationSign: bytes) +    reveal(_taskid: bytes32, _resultDigest: bytes32) +    reopen(_taskid: bytes32) <<onlyScheduler>> +    finalize(_taskid: bytes32, _results: bytes, _resultsCallback: bytes) <<onlyScheduler>> +    initializeArray(_dealid: bytes32[], _idx: uint256[]): bool +    claimArray(_taskid: bytes32[]): bool +    initializeAndClaimArray(_dealid: bytes32[], _idx: uint256[]): bool +Public: +    <<modifier>> onlyScheduler(_taskId: bytes32) +    initialize(_dealid: bytes32, idx: uint256): bytes32 +    claim(_taskid: bytes32) - + 12->3 - - + + - - -28 - -<<Interface>> -IexecPoco2 -contracts/interfaces/IexecPoco2.sol - -External: -     initialize(dealId: bytes32, index: uint256): bytes32 -     claim(taskId: bytes32) -     contribute(taskId: bytes32, resultHash: bytes32, resultSeal: bytes32, enclaveChallenge: address, enclaveSign: bytes, authorizationSign: bytes) -     contributeAndFinalize(taskId: bytes32, resultDigest: bytes32, results: bytes, resultsCallback: bytes, enclaveChallenge: address, enclaveSign: bytes, authorizationSign: bytes) -     reveal(taskId: bytes32, resultDigest: bytes32) -     reopen(taskId: bytes32) -     finalize(taskId: bytes32, results: bytes, resultsCallback: bytes) -     initializeArray(dealIds: bytes32[], indexes: uint256[]): bool -     claimArray(taskIds: bytes32[]): bool -     initializeAndClaimArray(dealIds: bytes32[], indexes: uint256[]): bool -Public: -    <<event>> AccurateContribution(worker: address, taskid: bytes32) -    <<event>> FaultyContribution(worker: address, taskid: bytes32) -    <<event>> TaskInitialize(taskid: bytes32, workerpool: address) -    <<event>> TaskContribute(taskid: bytes32, worker: address, hash: bytes32) -    <<event>> TaskConsensus(taskid: bytes32, consensus: bytes32) -    <<event>> TaskReveal(taskid: bytes32, worker: address, digest: bytes32) -    <<event>> TaskReopen(taskid: bytes32) -    <<event>> TaskFinalize(taskid: bytes32, results: bytes) -    <<event>> TaskClaimed(taskid: bytes32) - - - -12->28 - - + + +27 + +<<Interface>> +IexecPoco2 +contracts/interfaces/IexecPoco2.sol + +External: +     initialize(dealId: bytes32, index: uint256): bytes32 +     claim(taskId: bytes32) +     contribute(taskId: bytes32, resultHash: bytes32, resultSeal: bytes32, enclaveChallenge: address, enclaveSign: bytes, authorizationSign: bytes) +     contributeAndFinalize(taskId: bytes32, resultDigest: bytes32, results: bytes, resultsCallback: bytes, enclaveChallenge: address, enclaveSign: bytes, authorizationSign: bytes) +     reveal(taskId: bytes32, resultDigest: bytes32) +     reopen(taskId: bytes32) +     finalize(taskId: bytes32, results: bytes, resultsCallback: bytes) +     initializeArray(dealIds: bytes32[], indexes: uint256[]): bool +     claimArray(taskIds: bytes32[]): bool +     initializeAndClaimArray(dealIds: bytes32[], indexes: uint256[]): bool +Public: +    <<event>> AccurateContribution(worker: address, taskid: bytes32) +    <<event>> FaultyContribution(worker: address, taskid: bytes32) +    <<event>> TaskInitialize(taskid: bytes32, workerpool: address) +    <<event>> TaskContribute(taskid: bytes32, worker: address, hash: bytes32) +    <<event>> TaskConsensus(taskid: bytes32, consensus: bytes32) +    <<event>> TaskReveal(taskid: bytes32, worker: address, digest: bytes32) +    <<event>> TaskReopen(taskid: bytes32) +    <<event>> TaskFinalize(taskid: bytes32, results: bytes) +    <<event>> TaskClaimed(taskid: bytes32) + + + +12->27 + + + + + +12->33 + + - + 12->34 - - + + - + 12->35 - - + + - + -12->36 - - +12->42 + + - - -12->43 - - + + +45 + +<<Struct>> +Task +contracts/libs/IexecLibCore_v5.sol + +status: TaskStatusEnum +dealid: bytes32 +idx: uint256 +timeref: uint256 +contributionDeadline: uint256 +revealDeadline: uint256 +finalDeadline: uint256 +consensusValue: bytes32 +revealCounter: uint256 +winnerCounter: uint256 +contributors: address[] +resultDigest: bytes32 +results: bytes +resultsTimestamp: uint256 +resultsCallback: bytes + + + +12->45 + + 46 - -<<Struct>> -Task -contracts/libs/IexecLibCore_v5.sol - -status: TaskStatusEnum -dealid: bytes32 -idx: uint256 -timeref: uint256 -contributionDeadline: uint256 -revealDeadline: uint256 -finalDeadline: uint256 -consensusValue: bytes32 -revealCounter: uint256 -winnerCounter: uint256 -contributors: address[] -resultDigest: bytes32 -results: bytes -resultsTimestamp: uint256 -resultsCallback: bytes + +<<Struct>> +Consensus +contracts/libs/IexecLibCore_v5.sol + +group: mapping(bytes32=>uint256) +total: uint256 - + 12->46 - - + + - - -47 - -<<Struct>> -Consensus -contracts/libs/IexecLibCore_v5.sol - -group: mapping(bytes32=>uint256) -total: uint256 - - - -12->47 - - + + +48 + +<<Struct>> +Contribution +contracts/libs/IexecLibCore_v5.sol + +status: ContributionStatusEnum +resultHash: bytes32 +resultSeal: bytes32 +enclaveChallenge: address +weight: uint256 + + + +12->48 + + - - -49 - -<<Struct>> -Contribution -contracts/libs/IexecLibCore_v5.sol - -status: ContributionStatusEnum -resultHash: bytes32 -resultSeal: bytes32 -enclaveChallenge: address -weight: uint256 - - - -12->49 - - + + +12->60 + + 12->61 - - - - - -12->62 - - + + 24 - -<<Interface>> -IexecHubV3Interface -contracts/interfaces/IexecHubV3Interface.sol - -External: -     viewScore(worker: address): uint256 - - - -26->50 - - + +<<Interface>> +IexecHubV3Interface +contracts/interfaces/IexecHubV3Interface.sol + +External: +     viewScore(worker: address): uint256 + + + +26->49 + + + + + +26->52 + + - + 26->53 - - + + - + 26->54 - - + + 26->55 - - + + - + -26->56 - - +33->60 + + - + -34->61 - - +33->61 + + - + -34->62 - - +34->60 + + - + -35->61 - - +34->61 + + + + + +62 + +<<Library>> +StakedRlcLib +contracts/libs/StakedRlcLib.sol + +Internal: +    transfer(from: address, to: address, value: uint256) +    mint(account: address, amount: uint256) +    burn(account: address, amount: uint256) +    approve(owner: address, spender: address, amount: uint256) +Public: +    <<event>> Transfer(from: address, to: address, value: uint256) +    <<event>> Approval(owner: address, spender: address, value: uint256) - + -35->62 - - +34->62 + + - - -63 - -<<Library>> -StakedRlcLib -contracts/libs/StakedRlcLib.sol - -Internal: -    transfer(from: address, to: address, value: uint256) -    mint(account: address, amount: uint256) -    burn(account: address, amount: uint256) -    approve(owner: address, spender: address, amount: uint256) -Public: -    <<event>> Transfer(from: address, to: address, value: uint256) -    <<event>> Approval(owner: address, spender: address, value: uint256) - - - -35->63 - - + + +41 + +<<Struct>> +Resource +contracts/libs/IexecLibCore_v5.sol + +pointer: address +owner: address +price: uint256 + + + +41->35 + + - - -42 - -<<Struct>> -Resource -contracts/libs/IexecLibCore_v5.sol - -pointer: address -owner: address -price: uint256 - - + -42->36 - - +42->35 + + + + + +42->41 + + - + + +44 + +<<Enum>> +TaskStatusEnum +contracts/libs/IexecLibCore_v5.sol + +UNSET: 0 +ACTIVE: 1 +REVEALING: 2 +COMPLETED: 3 +FAILED: 4 + + + +44->35 + + + + -43->36 - - +45->35 + + - + -43->42 - - +45->44 + + - - -45 - -<<Enum>> -TaskStatusEnum -contracts/libs/IexecLibCore_v5.sol - -UNSET: 0 -ACTIVE: 1 -REVEALING: 2 -COMPLETED: 3 -FAILED: 4 - - - -45->36 - - - - + -46->36 - - +46->35 + + - - -46->45 - - + + +47 + +<<Enum>> +ContributionStatusEnum +contracts/libs/IexecLibCore_v5.sol + +UNSET: 0 +CONTRIBUTED: 1 +PROVED: 2 +REJECTED: 3 + + + +47->35 + + - + -47->36 - - +48->35 + + - - -48 - -<<Enum>> -ContributionStatusEnum -contracts/libs/IexecLibCore_v5.sol - -UNSET: 0 -CONTRIBUTED: 1 -PROVED: 2 -REJECTED: 3 - - - -48->36 - - - - - -49->36 - - + + +48->47 + + - - -49->48 - - + + +51 + +<<Struct>> +EIP712Domain +contracts/libs/IexecLibOrders_v5.sol + +name: string +version: string +chainId: uint256 +verifyingContract: address + + + +49->51 + + - - -52 - -<<Struct>> -EIP712Domain -contracts/libs/IexecLibOrders_v5.sol - -name: string -version: string -chainId: uint256 -verifyingContract: address - - + -50->52 - - +49->52 + + - + -50->53 - - +49->53 + + - + -50->54 - - +49->54 + + - + -50->55 - - +49->55 + + - + + +56 + +<<Struct>> +AppOrderOperation +contracts/libs/IexecLibOrders_v5.sol + +order: AppOrder +operation: OrderOperationEnum +sign: bytes + + -50->56 - - +49->56 + + 57 - -<<Struct>> -AppOrderOperation -contracts/libs/IexecLibOrders_v5.sol - -order: AppOrder -operation: OrderOperationEnum -sign: bytes - - + +<<Struct>> +DatasetOrderOperation +contracts/libs/IexecLibOrders_v5.sol + +order: DatasetOrder +operation: OrderOperationEnum +sign: bytes + + -50->57 - - +49->57 + + 58 - -<<Struct>> -DatasetOrderOperation -contracts/libs/IexecLibOrders_v5.sol - -order: DatasetOrder -operation: OrderOperationEnum -sign: bytes - - + +<<Struct>> +WorkerpoolOrderOperation +contracts/libs/IexecLibOrders_v5.sol + +order: WorkerpoolOrder +operation: OrderOperationEnum +sign: bytes + + -50->58 - - +49->58 + + 59 - -<<Struct>> -WorkerpoolOrderOperation -contracts/libs/IexecLibOrders_v5.sol - -order: WorkerpoolOrder -operation: OrderOperationEnum -sign: bytes - - + +<<Struct>> +RequestOrderOperation +contracts/libs/IexecLibOrders_v5.sol + +order: RequestOrder +operation: OrderOperationEnum +sign: bytes + + -50->59 - - +49->59 + + - - -60 - -<<Struct>> -RequestOrderOperation -contracts/libs/IexecLibOrders_v5.sol - -order: RequestOrder -operation: OrderOperationEnum -sign: bytes - - - -50->60 - - + + +50 + +<<Enum>> +OrderOperationEnum +contracts/libs/IexecLibOrders_v5.sol + +SIGN: 0 +CLOSE: 1 + + + +50->49 + + - - -51 - -<<Enum>> -OrderOperationEnum -contracts/libs/IexecLibOrders_v5.sol - -SIGN: 0 -CLOSE: 1 - - + -51->50 - - +51->49 + + - + -52->50 - - +52->49 + + - + -53->50 - - +53->49 + + - + -54->50 - - +54->49 + + - + -55->50 - - +55->49 + + - + +56->49 + + + + + 56->50 - - + + - + + +56->52 + + + + -57->50 - - +57->49 + + - - -57->51 - - + + +57->50 + + - + 57->53 - - + + - + -58->50 - - +58->49 + + - - -58->51 - - + + +58->50 + + - + 58->54 - - + + - + -59->50 - - +59->49 + + - - -59->51 - - + + +59->50 + + - + 59->55 - - + + - - -60->50 - - + + +60->61 + + - - -60->51 - - + + +61->24 + + - - -60->56 - - + + +61->35 + + + + + +61->60 + + - + + +63 + +<<Interface>> +IRegistry +contracts/registries/IRegistry.sol + +External: +     isRegistered(_entry: address): bool + + -61->62 - - +61->63 + + - + -62->24 - - - - - -62->36 - - +62->60 + + - -62->61 - - - - - -64 - -<<Interface>> -IRegistry -contracts/registries/IRegistry.sol - -External: -     isRegistered(_entry: address): bool - - - -62->64 - - - - -63->61 - - - - - -63->62 - - +62->61 + + diff --git a/hardhat.config.ts b/hardhat.config.ts index 5ad7052ca..282776fec 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -92,7 +92,6 @@ const config: HardhatUserConfig = { : undefined, }, ...arbitrumSepoliaBaseConfig, - gasPrice: 100_000_000, // 0.1 Gwei }), ...(isArbitrumFork && { @@ -100,7 +99,6 @@ const config: HardhatUserConfig = { url: process.env.ARBITRUM_RPC_URL || 'https://arbitrum.gateway.tenderly.co', }, ...arbitrumBaseConfig, - gasPrice: 100_000_000, // 0.1 Gwei }), }, 'external-hardhat': { diff --git a/package.json b/package.json index 064f9277b..e6bd21423 100644 --- a/package.json +++ b/package.json @@ -32,13 +32,10 @@ "/contracts", "!/contracts/tools/testing/**/*", "!/contracts/tools/diagrams/**/*", - "/deployments", - "/artifacts/contracts", - "!/artifacts/contracts/**/*.dbg.json" + "/deployments" ], "__filesComment": [ - "!!! @dev Update `abiExporter` config if this is modified", - "TODO [Major] remove artifacts/ from NPM package when releasing a major version" + "!!! @dev Update `abiExporter` config if this is modified" ], "lint-staged": { "*.{js,ts,sol,json,yml}": [ diff --git a/scripts/upgrades/upgrade-helper.ts b/scripts/upgrades/upgrade-helper.ts deleted file mode 100644 index d835a957f..000000000 --- a/scripts/upgrades/upgrade-helper.ts +++ /dev/null @@ -1,41 +0,0 @@ -// SPDX-FileCopyrightText: 2024-2025 IEXEC BLOCKCHAIN TECH -// SPDX-License-Identifier: Apache-2.0 - -import { ContractFactory, ZeroAddress } from 'ethers'; -import { ethers } from 'hardhat'; -import { FacetCutAction } from 'hardhat-deploy/dist/types'; -import { DiamondCutFacet__factory } from '../../typechain'; -import { getFunctionSelectors } from '../../utils/proxy-tools'; - -// TODO remove this module. - -function encodeModuleProxyUpdate(contractFactory: ContractFactory, moduleAddress: string) { - // Get function selectors from the contract factory - const functionSelectors = getFunctionSelectors(contractFactory); - - // Create FacetCut for adding the module - const facetCut = { - facetAddress: moduleAddress, - action: FacetCutAction.Add, - functionSelectors: functionSelectors, - }; - - // Encode diamondCut call - const moduleProxyUpdateData = DiamondCutFacet__factory.createInterface().encodeFunctionData( - 'diamondCut', - [[facetCut], ZeroAddress, '0x'], - ); - return moduleProxyUpdateData; -} - -async function printBlockTime() { - const block = await ethers.provider.getBlock('latest'); - if (block) { - const blockTimestamp = block.timestamp; - console.log( - `Block#${block.number}: ${new Date(blockTimestamp * 1000)} (timestamp:${blockTimestamp})`, - ); - } -} - -export { encodeModuleProxyUpdate, printBlockTime }; diff --git a/scripts/upgrades/v0.0.0-template.md b/scripts/upgrades/v0.0.0-template.md index 053290b8c..6b8a0b862 100644 --- a/scripts/upgrades/v0.0.0-template.md +++ b/scripts/upgrades/v0.0.0-template.md @@ -18,11 +18,11 @@ ### Arbitrum Sepolia ``` -TODO +Logs here ``` ### Arbitrum Mainnet ``` -TODO +Logs here ``` diff --git a/scripts/upgrades/v6.1.0-bulk-processing.md b/scripts/upgrades/v6.1.0-bulk-processing.md index 9064f40be..bbb0c7bf5 100644 --- a/scripts/upgrades/v6.1.0-bulk-processing.md +++ b/scripts/upgrades/v6.1.0-bulk-processing.md @@ -3,7 +3,7 @@ - **Date**: 2025-10-24 - **Git tag**: [v6.1.0](https://github.com/iExecBlockchainComputing/PoCo/releases/tag/v6.1.0) - **Upgrade script**: `./v6.1.0-bulk-processing.ts` -- **Upgrade GitHub Action run**: // TODO +- **Upgrade GitHub Action run**: - **Testnet**: [run id](https://github.com/iExecBlockchainComputing/PoCo/actions/runs/18775709142) - **Mainnet**: [run id](https://github.com/iExecBlockchainComputing/PoCo/actions/runs/19333469855) diff --git a/scripts/upgrades/v6.2.0.ts b/scripts/upgrades/v6.2.0.ts index 3b5b2aec1..fc45ccb81 100644 --- a/scripts/upgrades/v6.2.0.ts +++ b/scripts/upgrades/v6.2.0.ts @@ -132,7 +132,7 @@ async function main() { { name: 'IexecAccessorsABILegacyFacet', address: null, - factory: new IexecAccessorsABILegacyFacet__factory(), // TODO: Check with middleware team if this facet is still needed. + factory: new IexecAccessorsABILegacyFacet__factory(), }, { name: 'IexecCategoryManagerFacet', diff --git a/scripts/upgrades/v7.0.0-native-mode-removal.md b/scripts/upgrades/v7.0.0-native-mode-removal.md new file mode 100644 index 000000000..129e1d7d0 --- /dev/null +++ b/scripts/upgrades/v7.0.0-native-mode-removal.md @@ -0,0 +1,106 @@ +# Upgrade v7.0.0 - Native token mode removal + +- **Date**: YYYY-MM-DD +- **Git tag**: [v7.0.0](https://github.com/iExecBlockchainComputing/PoCo/releases/tag/v7.0.0) +- **Upgrade script**: `./v7.0.0.ts` +- **Upgrade GitHub Action run**: + - **Testnet**: [run id (TODO)](https://github.com/iExecBlockchainComputing/PoCo/actions/runs/) + - **Mainnet**: [run id (TODO)](https://github.com/iExecBlockchainComputing/PoCo/actions/runs/) + +## Summary of changes + +Every PoCo facet whose runtime bytecode changed since v6.2.0 is replaced. The +diamond proxy, the core diamond facets (`DiamondCutFacet`, `DiamondLoupeFacet`, +`OwnershipFacet`), the registries and the already deployed `IexecLibOrders_v5` +library are left untouched. + +### Facet list changes + +| Facet | Runtime bytes on-chain -> built | Action | +| ------------------------------ | ------------------------------- | ----------------------------------- | +| `IexecAccessorsABILegacyFacet` | 4241 -> 4241 | Left in place, metadata hash only | +| `IexecCategoryManagerFacet` | 1915 -> 1738 | Replaced | +| `IexecConfigurationExtraFacet` | 716 -> 562 | Replaced | +| `IexecConfigurationFacet` | 3559 -> 3473 | Replaced | +| `IexecEscrowTokenFacet` | 6611 -> removed | Renamed to `IexecEscrowFacet` | +| `IexecEscrowFacet` | new | New name of `IexecEscrowTokenFacet` | +| `IexecOrderManagementFacet` | 6803 -> 6803 | Replaced | +| `IexecPoco1Facet` | 13583 -> 13525 | Replaced | +| `IexecPoco2Facet` | 15080 -> 15065 | Replaced | +| `IexecPocoAccessorsFacet` | 10789 -> 10793 | Replaced | +| `IexecRelayFacet` | 1774 -> 1774 | Left in place, metadata hash only | + +`IexecAccessorsABILegacyFacet` and `IexecRelayFacet` are byte-identical to what +is already deployed once the metadata hash is stripped, so they are neither +removed nor redeployed. + +No function selector is lost: the `receive` (`0x00000000`) and `fallback` +(`0xffffffff`) selectors move from `IexecEscrowTokenFacet` to +`IexecEscrowFacet`. + +### Breaking changes + +- Remove native mode contracts: `IexecEscrowNativeFacet`, `IexecEscrowNative`, + `IexecInterfaceNative`. Only the token mode remains. (#343) +- Remove the `token` suffix throughout: `IexecEscrowTokenFacet` becomes + `IexecEscrowFacet`, `IexecEscrowToken` becomes `IexecEscrow`, and + `IexecInterfaceToken.sol` becomes `IexecInterface.sol`. (#356) +- Remove `setName` from `Registry` and `RegistryEntry`, together with reverse + registration support. (#344) +- Remove Bellecour support. (#341) +- Merge `IexecPoco1Errors` into `IexecPoco1`. The `IexecPoco1Errors` interface + and its ABI are gone; `IncompatibleDatasetOrder` is now declared on + `IexecPoco1`. + +### Internal changes + +- Merge `IexecERC20Base` into the escrow facet. (#345) +- Convert abstract contracts to libs: + - `IexecEscrow` => `EscrowLib` and `StakedRlcLib` + - `SignatureVerifier` => `CommonLib`, +- `FacetBase.owner()` now reads the diamond storage through + `LibDiamond.contractOwner()` instead of an external `IERC5313` call. + +### Not shipped by this upgrade + +The `Registry` and `RegistryEntry` changes (`setName` removal, migration shim +removal) are **not** delivered here. `AppRegistry`, `DatasetRegistry` and +`WorkerpoolRegistry` are standalone contracts, not diamond facets, and the +`App` / `Dataset` / `Workerpool` masters are fixed at registry construction. A +`diamondCut` cannot reach them. + +Those changes take effect only on a fresh chain deployment, or through a +separate registry migration that deploys new registries chained to the current +ones via `initialize(_previous)` and repoints the proxy with `changeRegistries`. +That migration changes the registry addresses and is out of scope for v7.0.0. + +## Pre-upgrade checklist + +- [ ] Full test suite passes (`npm test`). +- [ ] Storage layout check passes (`npm run check-storage-layout`). +- [ ] Dry run on a fork of Arbitrum Sepolia (`./dry-run.sh`), deployment diff reviewed. +- [ ] Dry run on a fork of Arbitrum Mainnet, deployment diff reviewed. +- [ ] Deployer wallet funded with enough ETH on the target network. +- [ ] `UPGRADE_SCRIPT` in `.github/workflows/upgrade-facets.yml` set to `v7.0.0.ts`. +- [ ] Facet addresses in `v7.0.0.ts` match `deployments//` for the target chain. +- [ ] Re-check which facets actually changed if the branch moved since this report was written. + +## Post-upgrade checklist + +- [ ] Facet list refreshed on the block explorer ("Is this a proxy?"). +- [ ] Artifacts PR merged. +- [ ] SDK and subgraph notified of the breaking changes. + +## Deployment logs + +### Arbitrum Sepolia + +``` +Logs here +``` + +### Arbitrum Mainnet + +``` +Logs here +``` diff --git a/scripts/upgrades/v7.0.0.ts b/scripts/upgrades/v7.0.0.ts new file mode 100644 index 000000000..45b32bcb2 --- /dev/null +++ b/scripts/upgrades/v7.0.0.ts @@ -0,0 +1,178 @@ +// SPDX-FileCopyrightText: 2025 IEXEC BLOCKCHAIN TECH +// SPDX-License-Identifier: Apache-2.0 + +import { + IexecCategoryManagerFacet__factory, + IexecConfigurationExtraFacet__factory, + IexecConfigurationFacet__factory, + IexecEscrowFacet__factory, + IexecOrderManagementFacet__factory, + IexecPoco1Facet__factory, + IexecPoco2Facet__factory, + IexecPocoAccessorsFacet__factory, +} from '../../typechain'; +import { + FacetDetails, + deployFacets, + getUpgradeContext, + linkFacetsToDiamond, + printOnchainDiamondDescription, + removeDanglingFacetDeploymentArtifacts, + removeFacetsFromDiamond, + saveOnchainDiamondDescription, +} from '../../utils/proxy-tools'; +import { tryVerify } from '../verify'; + +async function main() { + console.log('Performing native mode removal and escrow consolidation upgrade (v7.0.0)...'); + const { chainId, networkName, deployer, proxyOwner, proxyAddress, iexecLibOrders } = + await getUpgradeContext(); + + /** + * Facets replaced by this upgrade, at the addresses the v6.2.0 upgrade left + * them on. Values are taken from `deployments//.json`. The v5 + * deployer uses CREATE2 with a constant salt, so both chains share the same + * addresses. + * + * `IexecAccessorsABILegacyFacet` and `IexecRelayFacet` are unchanged. + */ + const facetAddressesPerChain: { [key: string]: { [key: string]: string } } = { + // Arbitrum Sepolia + '421614': { + IexecCategoryManagerFacet: '0x1E18624655a680dF645EF4668D303d0e158c3A23', + IexecConfigurationExtraFacet: '0x704DD48dFd3123445eE7d71230D099ee5a7fF384', + IexecConfigurationFacet: '0x860e131a34FAA9D2c80B5E5608026cf0885C4DD8', + IexecEscrowTokenFacet: '0xCB012a87Df7106a155a2DbF63B32936625142319', // Renamed to IexecEscrowFacet + IexecOrderManagementFacet: '0xe5e071d9956D650C9DF2231B3C24c929Ae8a6698', + IexecPoco1Facet: '0x4F4fceE743Ff87a8e524F51B24FF33132e4d5F06', + IexecPoco2Facet: '0x8C75D9a503Cba140a34CB42dB7020B1295cbe39C', + IexecPocoAccessorsFacet: '0x4273B5c5f56416302a5FE0DDeB6d7272cDC7faeC', + }, + // Arbitrum Mainnet + '42161': { + IexecCategoryManagerFacet: '0x1E18624655a680dF645EF4668D303d0e158c3A23', + IexecConfigurationExtraFacet: '0x704DD48dFd3123445eE7d71230D099ee5a7fF384', + IexecConfigurationFacet: '0x860e131a34FAA9D2c80B5E5608026cf0885C4DD8', + IexecEscrowTokenFacet: '0xCB012a87Df7106a155a2DbF63B32936625142319', // Renamed to IexecEscrowFacet + IexecOrderManagementFacet: '0xe5e071d9956D650C9DF2231B3C24c929Ae8a6698', + IexecPoco1Facet: '0x4F4fceE743Ff87a8e524F51B24FF33132e4d5F06', + IexecPoco2Facet: '0x8C75D9a503Cba140a34CB42dB7020B1295cbe39C', + IexecPocoAccessorsFacet: '0x4273B5c5f56416302a5FE0DDeB6d7272cDC7faeC', + }, + }; + + const chainIdStr = chainId.toString(); + const addresses = facetAddressesPerChain[chainIdStr]; + if (!addresses) { + throw new Error(`No facet addresses defined for chain ID ${chainId}`); + } + + /** + * Every changed PoCo facet is replaced. `IexecEscrowTokenFacet` is the only + * one removed without a same-name replacement: the escrow is renamed to + * `IexecEscrowFacet`. + */ + const facetsToRemove: FacetDetails[] = [ + { + name: 'IexecCategoryManagerFacet', + address: addresses['IexecCategoryManagerFacet'], + factory: null, + }, + { + name: 'IexecConfigurationExtraFacet', + address: addresses['IexecConfigurationExtraFacet'], + factory: null, + }, + { + name: 'IexecConfigurationFacet', + address: addresses['IexecConfigurationFacet'], + factory: null, + }, + { + name: 'IexecEscrowTokenFacet', + address: addresses['IexecEscrowTokenFacet'], + factory: null, + }, + { + name: 'IexecOrderManagementFacet', + address: addresses['IexecOrderManagementFacet'], + factory: null, + }, + { + name: 'IexecPoco1Facet', + address: addresses['IexecPoco1Facet'], + factory: null, + }, + { + name: 'IexecPoco2Facet', + address: addresses['IexecPoco2Facet'], + factory: null, + }, + { + name: 'IexecPocoAccessorsFacet', + address: addresses['IexecPocoAccessorsFacet'], + factory: null, + }, + ]; + + const facetsToAdd: FacetDetails[] = [ + { + name: 'IexecCategoryManagerFacet', + address: null, + factory: new IexecCategoryManagerFacet__factory(), + }, + { + name: 'IexecConfigurationExtraFacet', + address: null, + factory: new IexecConfigurationExtraFacet__factory(), + }, + { + name: 'IexecConfigurationFacet', + address: null, + factory: new IexecConfigurationFacet__factory(iexecLibOrders), + }, + { + name: 'IexecEscrowFacet', + address: null, + factory: new IexecEscrowFacet__factory(), + }, + { + name: 'IexecOrderManagementFacet', + address: null, + factory: new IexecOrderManagementFacet__factory(iexecLibOrders), + }, + { + name: 'IexecPoco1Facet', + address: null, + factory: new IexecPoco1Facet__factory(iexecLibOrders), + }, + { + name: 'IexecPoco2Facet', + address: null, + factory: new IexecPoco2Facet__factory(), + }, + { + name: 'IexecPocoAccessorsFacet', + address: null, + factory: new IexecPocoAccessorsFacet__factory(iexecLibOrders), + }, + ]; + + await printOnchainDiamondDescription(proxyAddress); + await deployFacets(deployer, chainId, facetsToAdd); + await removeFacetsFromDiamond(proxyAddress, proxyOwner, facetsToRemove); + await printOnchainDiamondDescription(proxyAddress); + await linkFacetsToDiamond(proxyAddress, proxyOwner, facetsToAdd); + await printOnchainDiamondDescription(proxyAddress); + console.log('Upgrade performed successfully!'); + await saveOnchainDiamondDescription(proxyAddress, networkName); + await removeDanglingFacetDeploymentArtifacts(proxyAddress); + await tryVerify(facetsToAdd.map((facet) => facet.name)); +} + +if (require.main === module) { + main().catch((error) => { + console.error(error); + process.exitCode = 1; + }); +} diff --git a/test/utils/IexecWrapper.ts b/test/utils/IexecWrapper.ts index d261ad74e..7a8ded50f 100644 --- a/test/utils/IexecWrapper.ts +++ b/test/utils/IexecWrapper.ts @@ -94,7 +94,6 @@ export class IexecWrapper { .then((tx) => tx.wait()); } - // TODO rename to computeSchedulerStakePerDeal /** * Compute the amount of RLCs to be staked by the scheduler * for a deal. We first compute the percentage by task