From eeb363f1230415dde573607a095b177c612d3bef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Deividas=20Kar=C5=BEinauskas?= Date: Thu, 6 Jun 2024 12:56:21 +0300 Subject: [PATCH] Add additional capability and DON metadata (#13425) * Add metadata and validate fault tolerance * Validate node count is more than F * Refactor test constants * Update snapshot * Check capability type is returned * Update getters and add tests * Make capability name and version a string * Gen wrappers and snapshots * Add changesets --- .changeset/four-dragons-deny.md | 5 + contracts/.changeset/long-cups-perform.md | 5 + contracts/gas-snapshots/keystone.gas-snapshot | 155 ++++++++++-------- .../src/v0.8/keystone/CapabilityRegistry.sol | 118 +++++++++---- .../src/v0.8/keystone/test/BaseTest.t.sol | 6 +- ...tyRegistry_GetHashedCapabilityIdTest.t.sol | 10 +- ...CapabilityRegistry_AddCapabilityTest.t.sol | 9 +- .../test/CapabilityRegistry_AddDONTest.t.sol | 67 +++++--- ...abilityRegistry_AddNodeOperatorsTest.t.sol | 3 - .../CapabilityRegistry_AddNodesTest.t.sol | 3 - ...pabilityRegistry_GetCapabilitiesTest.t.sol | 2 + .../test/CapabilityRegistry_GetDONsTest.t.sol | 23 +-- ...abilityRegistry_GetNodeOperatorsTest.t.sol | 3 - .../CapabilityRegistry_GetNodesTest.t.sol | 3 - .../CapabilityRegistry_RemoveDONsTest.t.sol | 10 +- ...lityRegistry_RemoveNodeOperatorsTest.t.sol | 3 - .../CapabilityRegistry_RemoveNodesTest.t.sol | 4 - .../CapabilityRegistry_UpdateDONTest.t.sol | 65 ++++---- .../CapabilityRegistry_UpdateNodesTest.t.sol | 5 - .../src/v0.8/keystone/test/Constants.t.sol | 39 +++-- .../keystone_capability_registry.go | 47 +++--- ...rapper-dependency-versions-do-not-edit.txt | 2 +- 22 files changed, 353 insertions(+), 234 deletions(-) create mode 100644 .changeset/four-dragons-deny.md create mode 100644 contracts/.changeset/long-cups-perform.md diff --git a/.changeset/four-dragons-deny.md b/.changeset/four-dragons-deny.md new file mode 100644 index 00000000000..0408383bd03 --- /dev/null +++ b/.changeset/four-dragons-deny.md @@ -0,0 +1,5 @@ +--- +"chainlink": patch +--- + +#internal diff --git a/contracts/.changeset/long-cups-perform.md b/contracts/.changeset/long-cups-perform.md new file mode 100644 index 00000000000..93fba83b558 --- /dev/null +++ b/contracts/.changeset/long-cups-perform.md @@ -0,0 +1,5 @@ +--- +'@chainlink/contracts': patch +--- + +#internal diff --git a/contracts/gas-snapshots/keystone.gas-snapshot b/contracts/gas-snapshots/keystone.gas-snapshot index 51970c046bd..47c59a149a6 100644 --- a/contracts/gas-snapshots/keystone.gas-snapshot +++ b/contracts/gas-snapshots/keystone.gas-snapshot @@ -1,65 +1,90 @@ -CapabilityRegistry_AddCapabilityTest:test_AddCapability_NoConfigurationContract() (gas: 136922) -CapabilityRegistry_AddCapabilityTest:test_AddCapability_WithConfiguration() (gas: 160688) -CapabilityRegistry_AddCapabilityTest:test_DeprecatesCapability() (gas: 87158) -CapabilityRegistry_AddCapabilityTest:test_EmitsEvent() (gas: 87332) -CapabilityRegistry_AddCapabilityTest:test_RevertWhen_CalledByNonAdmin() (gas: 22371) -CapabilityRegistry_AddCapabilityTest:test_RevertWhen_CalledByNonAdmin() (gas: 23590) -CapabilityRegistry_AddCapabilityTest:test_RevertWhen_CapabilityDoesNotExist() (gas: 15513) -CapabilityRegistry_AddCapabilityTest:test_RevertWhen_CapabilityExists() (gas: 133959) -CapabilityRegistry_AddCapabilityTest:test_RevertWhen_CapabilityIsDeprecated() (gas: 88022) -CapabilityRegistry_AddCapabilityTest:test_RevertWhen_ConfigurationContractDoesNotMatchInterface() (gas: 2725761) -CapabilityRegistry_AddCapabilityTest:test_RevertWhen_ConfigurationContractNotDeployed() (gas: 23513) -CapabilityRegistry_AddDONTest:test_AddDON() (gas: 227135) -CapabilityRegistry_AddDONTest:test_RevertWhen_CalledByNonAdmin() (gas: 21160) -CapabilityRegistry_AddDONTest:test_RevertWhen_CapabilityDoesNotExist() (gas: 89373) -CapabilityRegistry_AddDONTest:test_RevertWhen_DeprecatedCapabilityAdded() (gas: 180895) -CapabilityRegistry_AddDONTest:test_RevertWhen_DuplicateCapabilityAdded() (gas: 210428) -CapabilityRegistry_AddDONTest:test_RevertWhen_DuplicateNodeAdded() (gas: 109784) -CapabilityRegistry_AddDONTest:test_RevertWhen_NodeDoesNotSupportCapability() (gas: 120851) -CapabilityRegistry_AddNodeOperatorsTest:test_AddNodeOperators() (gas: 164127) -CapabilityRegistry_AddNodeOperatorsTest:test_RevertWhen_CalledByNonAdmin() (gas: 28654) -CapabilityRegistry_AddNodeOperatorsTest:test_RevertWhen_NodeOperatorAdminAddressZero() (gas: 29520) -CapabilityRegistry_AddNodesTest:test_AddsNodeParams() (gas: 205953) -CapabilityRegistry_AddNodesTest:test_OwnerCanAddNodes() (gas: 205953) -CapabilityRegistry_AddNodesTest:test_RevertWhen_AddingDuplicateP2PId() (gas: 152430) -CapabilityRegistry_AddNodesTest:test_RevertWhen_AddingNodeWithInvalidCapability() (gas: 57467) -CapabilityRegistry_AddNodesTest:test_RevertWhen_AddingNodeWithoutCapabilities() (gas: 31747) -CapabilityRegistry_AddNodesTest:test_RevertWhen_CalledByNonNodeOperatorAdminAndNonOwner() (gas: 30923) -CapabilityRegistry_AddNodesTest:test_RevertWhen_P2PIDEmpty() (gas: 31612) -CapabilityRegistry_AddNodesTest:test_RevertWhen_SignerAddressEmpty() (gas: 31449) -CapabilityRegistry_GetCapabilitiesTest:test_ExcludesDeprecatedCapabilities() (gas: 109143) -CapabilityRegistry_GetCapabilitiesTest:test_ReturnsCapabilities() (gas: 44169) -CapabilityRegistry_RemoveNodeOperatorsTest:test_RemovesNodeOperator() (gas: 36837) -CapabilityRegistry_RemoveNodeOperatorsTest:test_RevertWhen_CalledByNonOwner() (gas: 17912) -CapabilityRegistry_RemoveNodesTest:test_OwnerCanRemoveNodes() (gas: 35545) -CapabilityRegistry_RemoveNodesTest:test_RemovesNode() (gas: 35556) -CapabilityRegistry_RemoveNodesTest:test_RevertWhen_CalledByNonNodeOperatorAdminAndNonOwner() (gas: 27298) -CapabilityRegistry_RemoveNodesTest:test_RevertWhen_NodeDoesNotExist() (gas: 20508) -CapabilityRegistry_RemoveNodesTest:test_RevertWhen_P2PIDEmpty() (gas: 20498) -CapabilityRegistry_UpdateNodeOperatorTest:test_RevertWhen_CalledByNonAdminAndNonOwner() (gas: 19819) -CapabilityRegistry_UpdateNodeOperatorTest:test_RevertWhen_NodeOperatorAdminIsZeroAddress() (gas: 19754) -CapabilityRegistry_UpdateNodeOperatorTest:test_UpdatesNodeOperator() (gas: 38439) -CapabilityRegistry_UpdateNodesTest:test_OwnerCanUpdateNodes() (gas: 119396) -CapabilityRegistry_UpdateNodesTest:test_RevertWhen_AddingNodeWithInvalidCapability() (gas: 40310) -CapabilityRegistry_UpdateNodesTest:test_RevertWhen_CalledByNonNodeOperatorAdminAndNonOwner() (gas: 30901) -CapabilityRegistry_UpdateNodesTest:test_RevertWhen_NodeDoesNotExist() (gas: 31576) -CapabilityRegistry_UpdateNodesTest:test_RevertWhen_P2PIDEmpty() (gas: 31575) -CapabilityRegistry_UpdateNodesTest:test_RevertWhen_SignerAddressEmpty() (gas: 31390) -CapabilityRegistry_UpdateNodesTest:test_RevertWhen_UpdatingNodeWithoutCapabilities() (gas: 31667) -CapabilityRegistry_UpdateNodesTest:test_UpdatesNodeParams() (gas: 119439) -KeystoneForwarder_ReportTest:test_Report_SuccessfulDelivery() (gas: 133714) -KeystoneForwarder_ReportTest:test_RevertWhen_AnySignatureIsInvalid() (gas: 97790) -KeystoneForwarder_ReportTest:test_RevertWhen_AnySignerIsInvalid() (gas: 110159) -KeystoneForwarder_ReportTest:test_RevertWhen_ReportAlreadyProcessed() (gas: 141632) -KeystoneForwarder_ReportTest:test_RevertWhen_ReportHasDuplicateSignatures() (gas: 110451) -KeystoneForwarder_ReportTest:test_RevertWhen_ReportHasIncorrectDON() (gas: 84208) -KeystoneForwarder_ReportTest:test_RevertWhen_ReportIsMalformed() (gas: 58504) -KeystoneForwarder_ReportTest:test_RevertWhen_TooFewSignatures() (gas: 68813) -KeystoneForwarder_ReportTest:test_RevertWhen_TooManySignatures() (gas: 69493) -KeystoneForwarder_SetConfigTest:test_RevertWhen_ExcessSigners() (gas: 40038) -KeystoneForwarder_SetConfigTest:test_RevertWhen_FaultToleranceIsZero() (gas: 109995) -KeystoneForwarder_SetConfigTest:test_RevertWhen_InsufficientSigners() (gas: 34399) -KeystoneForwarder_SetConfigTest:test_RevertWhen_ProvidingDuplicateSigners() (gas: 867400) -KeystoneForwarder_SetConfigTest:test_SetConfig_FirstTime() (gas: 2224742) -KeystoneForwarder_SetConfigTest:test_SetConfig_WhenSignersAreRemoved() (gas: 2399768) -KeystoneForwarder_TypeAndVersionTest:test_TypeAndVersion() (gas: 9641) \ No newline at end of file +CapabilityRegistry_AddCapabilityTest:test_AddCapability_NoConfigurationContract() (gas: 146887) +CapabilityRegistry_AddCapabilityTest:test_AddCapability_WithConfiguration() (gas: 171153) +CapabilityRegistry_AddCapabilityTest:test_DeprecatesCapability() (gas: 88700) +CapabilityRegistry_AddCapabilityTest:test_EmitsEvent() (gas: 88821) +CapabilityRegistry_AddCapabilityTest:test_RevertWhen_CalledByNonAdmin() (gas: 21734) +CapabilityRegistry_AddCapabilityTest:test_RevertWhen_CalledByNonAdmin() (gas: 22208) +CapabilityRegistry_AddCapabilityTest:test_RevertWhen_CapabilityDoesNotExist() (gas: 15521) +CapabilityRegistry_AddCapabilityTest:test_RevertWhen_CapabilityExists() (gas: 138709) +CapabilityRegistry_AddCapabilityTest:test_RevertWhen_CapabilityIsDeprecated() (gas: 89502) +CapabilityRegistry_AddCapabilityTest:test_RevertWhen_ConfigurationContractDoesNotMatchInterface() (gas: 3889776) +CapabilityRegistry_AddCapabilityTest:test_RevertWhen_ConfigurationContractNotDeployed() (gas: 25007) +CapabilityRegistry_AddDONTest:test_AddDON() (gas: 332981) +CapabilityRegistry_AddDONTest:test_RevertWhen_CalledByNonAdmin() (gas: 19294) +CapabilityRegistry_AddDONTest:test_RevertWhen_CapabilityDoesNotExist() (gas: 155475) +CapabilityRegistry_AddDONTest:test_RevertWhen_DeprecatedCapabilityAdded() (gas: 224972) +CapabilityRegistry_AddDONTest:test_RevertWhen_DuplicateCapabilityAdded() (gas: 239517) +CapabilityRegistry_AddDONTest:test_RevertWhen_DuplicateNodeAdded() (gas: 108063) +CapabilityRegistry_AddDONTest:test_RevertWhen_FaultToleranceIsZero() (gas: 40167) +CapabilityRegistry_AddDONTest:test_RevertWhen_NodeDoesNotSupportCapability() (gas: 169939) +CapabilityRegistry_AddNodeOperatorsTest:test_AddNodeOperators() (gas: 134000) +CapabilityRegistry_AddNodeOperatorsTest:test_RevertWhen_CalledByNonAdmin() (gas: 16961) +CapabilityRegistry_AddNodeOperatorsTest:test_RevertWhen_NodeOperatorAdminAddressZero() (gas: 17813) +CapabilityRegistry_AddNodesTest:test_AddsNodeInfo() (gas: 355902) +CapabilityRegistry_AddNodesTest:test_OwnerCanAddNodes() (gas: 355890) +CapabilityRegistry_AddNodesTest:test_RevertWhen_AddingDuplicateP2PId() (gas: 301737) +CapabilityRegistry_AddNodesTest:test_RevertWhen_AddingNodeWithInvalidCapability() (gas: 55394) +CapabilityRegistry_AddNodesTest:test_RevertWhen_AddingNodeWithoutCapabilities() (gas: 27730) +CapabilityRegistry_AddNodesTest:test_RevertWhen_CalledByNonNodeOperatorAdminAndNonOwner() (gas: 24597) +CapabilityRegistry_AddNodesTest:test_RevertWhen_P2PIDEmpty() (gas: 27436) +CapabilityRegistry_AddNodesTest:test_RevertWhen_SignerAddressEmpty() (gas: 27069) +CapabilityRegistry_AddNodesTest:test_RevertWhen_SignerAddressNotUnique() (gas: 310150) +CapabilityRegistry_GetCapabilitiesTest:test_ExcludesDeprecatedCapabilities() (gas: 115108) +CapabilityRegistry_GetCapabilitiesTest:test_ReturnsCapabilities() (gas: 54030) +CapabilityRegistry_GetDONsTest:test_CorrectlyFetchesDONs() (gas: 72024) +CapabilityRegistry_GetDONsTest:test_DoesNotIncludeRemovedDONs() (gas: 116236) +CapabilityRegistry_GetHashedCapabilityTest:test_CorrectlyGeneratesHashedCapabilityId() (gas: 10848) +CapabilityRegistry_GetHashedCapabilityTest:test_DoesNotCauseIncorrectClashes() (gas: 11927) +CapabilityRegistry_GetNodeOperatorsTest:test_CorrectlyFetchesNodeOperators() (gas: 34409) +CapabilityRegistry_GetNodeOperatorsTest:test_DoesNotIncludeRemovedNodeOperators() (gas: 99043) +CapabilityRegistry_GetNodesTest:test_CorrectlyFetchesNodes() (gas: 60003) +CapabilityRegistry_GetNodesTest:test_DoesNotIncludeRemovedNodes() (gas: 73840) +CapabilityRegistry_RemoveDONsTest:test_RemovesDON() (gas: 99917) +CapabilityRegistry_RemoveDONsTest:test_RevertWhen_CalledByNonAdmin() (gas: 15675) +CapabilityRegistry_RemoveDONsTest:test_RevertWhen_DONDoesNotExist() (gas: 14166) +CapabilityRegistry_RemoveNodeOperatorsTest:test_RemovesNodeOperator() (gas: 141827) +CapabilityRegistry_RemoveNodeOperatorsTest:test_RevertWhen_CalledByNonOwner() (gas: 15767) +CapabilityRegistry_RemoveNodesTest:test_CanAddNodeWithSameSignerAddressAfterRemoving() (gas: 80925) +CapabilityRegistry_RemoveNodesTest:test_OwnerCanRemoveNodes() (gas: 57877) +CapabilityRegistry_RemoveNodesTest:test_RemovesNode() (gas: 57876) +CapabilityRegistry_RemoveNodesTest:test_RevertWhen_CalledByNonNodeOperatorAdminAndNonOwner() (gas: 25091) +CapabilityRegistry_RemoveNodesTest:test_RevertWhen_NodeDoesNotExist() (gas: 18407) +CapabilityRegistry_RemoveNodesTest:test_RevertWhen_P2PIDEmpty() (gas: 18397) +CapabilityRegistry_UpdateDONTest:test_RevertWhen_CalledByNonAdmin() (gas: 19379) +CapabilityRegistry_UpdateDONTest:test_RevertWhen_CapabilityDoesNotExist() (gas: 133511) +CapabilityRegistry_UpdateDONTest:test_RevertWhen_DONDoesNotExist() (gas: 17799) +CapabilityRegistry_UpdateDONTest:test_RevertWhen_DeprecatedCapabilityAdded() (gas: 203008) +CapabilityRegistry_UpdateDONTest:test_RevertWhen_DuplicateCapabilityAdded() (gas: 217599) +CapabilityRegistry_UpdateDONTest:test_RevertWhen_DuplicateNodeAdded() (gas: 86101) +CapabilityRegistry_UpdateDONTest:test_RevertWhen_NodeDoesNotSupportCapability() (gas: 148020) +CapabilityRegistry_UpdateDONTest:test_UpdatesDON() (gas: 331007) +CapabilityRegistry_UpdateNodeOperatorTest:test_RevertWhen_CalledByNonAdminAndNonOwner() (gas: 17727) +CapabilityRegistry_UpdateNodeOperatorTest:test_RevertWhen_NodeOperatorAdminIsZeroAddress() (gas: 17651) +CapabilityRegistry_UpdateNodeOperatorTest:test_UpdatesNodeOperator() (gas: 72390) +CapabilityRegistry_UpdateNodesTest:test_CanUpdateParamsIfNodeSignerAddressNoLongerUsed() (gas: 252355) +CapabilityRegistry_UpdateNodesTest:test_OwnerCanUpdateNodes() (gas: 159643) +CapabilityRegistry_UpdateNodesTest:test_RevertWhen_AddingNodeWithInvalidCapability() (gas: 36277) +CapabilityRegistry_UpdateNodesTest:test_RevertWhen_CalledByNonNodeOperatorAdminAndNonOwner() (gas: 24598) +CapabilityRegistry_UpdateNodesTest:test_RevertWhen_NodeDoesNotExist() (gas: 27368) +CapabilityRegistry_UpdateNodesTest:test_RevertWhen_NodeSignerAlreadyAssignedToAnotherNode() (gas: 29330) +CapabilityRegistry_UpdateNodesTest:test_RevertWhen_P2PIDEmpty() (gas: 27356) +CapabilityRegistry_UpdateNodesTest:test_RevertWhen_SignerAddressEmpty() (gas: 27033) +CapabilityRegistry_UpdateNodesTest:test_RevertWhen_UpdatingNodeWithoutCapabilities() (gas: 25690) +CapabilityRegistry_UpdateNodesTest:test_UpdatesNodeInfo() (gas: 159632) +KeystoneForwarder_ReportTest:test_Report_SuccessfulDelivery() (gas: 143626) +KeystoneForwarder_ReportTest:test_RevertWhen_AnySignatureIsInvalid() (gas: 109344) +KeystoneForwarder_ReportTest:test_RevertWhen_AnySignerIsInvalid() (gas: 140918) +KeystoneForwarder_ReportTest:test_RevertWhen_ReportAlreadyProcessed() (gas: 152819) +KeystoneForwarder_ReportTest:test_RevertWhen_ReportHasDuplicateSignatures() (gas: 117273) +KeystoneForwarder_ReportTest:test_RevertWhen_ReportHasIncorrectDON() (gas: 93443) +KeystoneForwarder_ReportTest:test_RevertWhen_ReportIsMalformed() (gas: 67749) +KeystoneForwarder_ReportTest:test_RevertWhen_TooFewSignatures() (gas: 78061) +KeystoneForwarder_ReportTest:test_RevertWhen_TooManySignatures() (gas: 78741) +KeystoneForwarder_SetConfigTest:test_RevertWhen_ExcessSigners() (gas: 19965) +KeystoneForwarder_SetConfigTest:test_RevertWhen_FaultToleranceIsZero() (gas: 89956) +KeystoneForwarder_SetConfigTest:test_RevertWhen_InsufficientSigners() (gas: 14315) +KeystoneForwarder_SetConfigTest:test_RevertWhen_NotOwner() (gas: 90678) +KeystoneForwarder_SetConfigTest:test_RevertWhen_ProvidingDuplicateSigners() (gas: 847316) +KeystoneForwarder_SetConfigTest:test_SetConfig_FirstTime() (gas: 2224343) +KeystoneForwarder_SetConfigTest:test_SetConfig_WhenSignersAreRemoved() (gas: 2367289) +KeystoneForwarder_TypeAndVersionTest:test_TypeAndVersion() (gas: 9663) \ No newline at end of file diff --git a/contracts/src/v0.8/keystone/CapabilityRegistry.sol b/contracts/src/v0.8/keystone/CapabilityRegistry.sol index 9fe91ebf467..76e56c44416 100644 --- a/contracts/src/v0.8/keystone/CapabilityRegistry.sol +++ b/contracts/src/v0.8/keystone/CapabilityRegistry.sol @@ -71,23 +71,34 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { OBSERVATION_IDENTICAL } + /// @notice CapabilityType indicates the type of capability which determines + /// where the capability can be used in a Workflow Spec. + enum CapabilityType { + TRIGGER, + ACTION, + CONSENSUS, + TARGET + } + struct Capability { /// @notice The partially qualified ID for the capability. - /// /// @dev Given the following capability ID: {name}:{label1_key}_{label1_value}:{label2_key}_{label2_value}@{version} // Then we denote the `labelledName` as the `{name}:{label1_key}_{label1_value}:{label2_key}_{label2_value}` portion of the ID. /// /// Ex. id = "data-streams-reports:chain:ethereum@1.0.0" /// labelledName = "data-streams-reports:chain:ethereum" /// - /// bytes32(string); validation regex: ^[a-z0-9_\-:]{1,32}$ - bytes32 labelledName; + /// validation regex: ^[a-z0-9_\-:]{1,32}$ + string labelledName; /// @notice Semver, e.g., "1.2.3" - /// @dev must be valid Semver + max 32 characters. - bytes32 version; - /// @notice Indicates whether remote response requires - // aggregation or is an OCR report. There are multiple possible - // ways to aggregate. + /// @dev must be valid Semver + max 32 characters. + string version; + /// @notice CapabilityType indicates the type of capability which determines + /// where the capability can be used in a Workflow Spec. + CapabilityType capabilityType; + /// @notice CapabilityResponseType indicates whether remote response requires + // aggregation or is an already aggregated report. There are multiple + // possible ways to aggregate. CapabilityResponseType responseType; /// @notice An address to the capability configuration contract. Having this defined // on a capability enforces consistent configuration across DON instances @@ -131,9 +142,15 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { uint32 id; /// @notice The number of times the DON was configured uint32 configCount; - /// @notice True if the DON is public. A public DON means that it accepts + /// @notice The f value for the DON. This is the number of faulty nodes + /// that the DON can tolerate. This can be different from the f value of + /// the OCR instances that capabilities spawn. + uint32 f; + /// @notice True if the DON is public. A public DON means that it accepts /// external capability requests bool isPublic; + /// @notice True if the DON accepts Workflows. + bool acceptsWorkflows; /// @notice Mapping of config counts to configurations mapping(uint32 configCount => DONCapabilityConfig donConfig) config; } @@ -143,15 +160,31 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { uint32 id; /// @notice The number of times the DON was configured uint32 configCount; + /// @notice The f value for the DON. This is the number of faulty nodes + /// that the DON can tolerate. This can be different from the f value of + /// the OCR instances that capabilities spawn. + uint32 f; /// @notice True if the DON is public. A public DON means that it accepts /// external capability requests bool isPublic; + /// @notice True if the DON accepts Workflows. + bool acceptsWorkflows; /// @notice List of member node P2P Ids bytes32[] nodeP2PIds; /// @notice List of capability configurations CapabilityConfiguration[] capabilityConfigurations; } + /// @notice DONParams is a struct that holds the parameters for a DON. + /// @dev This is needed to avoid "stack too deep" errors in _setDONConfig. + struct DONParams { + uint32 id; + uint32 configCount; + bool isPublic; + bool acceptsWorkflows; + uint32 f; + } + /// @notice This error is thrown when a caller is not allowed /// to execute the transaction error AccessForbidden(); @@ -228,6 +261,12 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { /// @param nodeP2PId The P2P ID of the node error DuplicateDONNode(uint32 donId, bytes32 nodeP2PId); + /// @notice This error is thrown when trying to configure a DON with invalid + /// fault tolerance value. + /// @param f The proposed fault tolerance value + /// @param nodeCount The proposed number of nodes in the DON + error InvalidFaultTolerance(uint32 f, uint256 nodeCount); + /// @notice This error is thrown when a capability with the provided hashed ID is /// not found. /// @param hashedCapabilityId The hashed ID used for the lookup. @@ -584,8 +623,8 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { /// @param version The capability's version number /// @return bytes32 A unique identifier for the capability /// @dev The hash of the encoded labelledName and version - function getHashedCapabilityId(bytes32 labelledName, bytes32 version) public pure returns (bytes32) { - return keccak256(abi.encodePacked(labelledName, version)); + function getHashedCapabilityId(string calldata labelledName, string calldata version) public pure returns (bytes32) { + return keccak256(abi.encode(labelledName, version)); } /// @notice Returns whether a capability is deprecated @@ -604,11 +643,18 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { function addDON( bytes32[] calldata nodes, CapabilityConfiguration[] calldata capabilityConfigurations, - bool isPublic + bool isPublic, + bool acceptsWorkflows, + uint32 f ) external onlyOwner { uint32 id = s_donId; s_dons[id].id = id; - _setDONConfig(id, 1, nodes, capabilityConfigurations, isPublic); + + _setDONConfig( + nodes, + capabilityConfigurations, + DONParams({id: id, configCount: 1, isPublic: isPublic, acceptsWorkflows: acceptsWorkflows, f: f}) + ); ++s_donId; } @@ -624,11 +670,17 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { uint32 donId, bytes32[] calldata nodes, CapabilityConfiguration[] calldata capabilityConfigurations, - bool isPublic + bool isPublic, + bool acceptsWorkflows, + uint32 f ) external onlyOwner { uint32 configCount = s_dons[donId].configCount; if (configCount == 0) revert DONDoesNotExist(donId); - _setDONConfig(donId, ++configCount, nodes, capabilityConfigurations, isPublic); + _setDONConfig( + nodes, + capabilityConfigurations, + DONParams({id: donId, configCount: ++configCount, isPublic: isPublic, acceptsWorkflows: acceptsWorkflows, f: f}) + ); } /// @notice Removes DONs from the Capability Registry @@ -680,23 +732,23 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { } /// @notice Sets the configuration for a DON - /// @param donId The ID of the DON to set the configuration for - /// @param configCount The number of times the DON has been configured /// @param nodes The nodes making up the DON /// @param capabilityConfigurations The list of configurations for the /// capabilities supported by the DON - /// @param isPublic True if the DON is can accept external workflows + /// @param donParams The DON's parameters function _setDONConfig( - uint32 donId, - uint32 configCount, bytes32[] calldata nodes, CapabilityConfiguration[] calldata capabilityConfigurations, - bool isPublic + DONParams memory donParams ) internal { - DONCapabilityConfig storage donCapabilityConfig = s_dons[donId].config[configCount]; + DONCapabilityConfig storage donCapabilityConfig = s_dons[donParams.id].config[donParams.configCount]; + + // Validate the f value. We are intentionally relaxing the 3f+1 requirement + // as not all DONs will run OCR instances. + if (donParams.f == 0 || donParams.f + 1 > nodes.length) revert InvalidFaultTolerance(donParams.f, nodes.length); for (uint256 i; i < nodes.length; ++i) { - if (donCapabilityConfig.nodes.contains(nodes[i])) revert DuplicateDONNode(donId, nodes[i]); + if (donCapabilityConfig.nodes.contains(nodes[i])) revert DuplicateDONNode(donParams.id, nodes[i]); donCapabilityConfig.nodes.add(nodes[i]); } @@ -709,7 +761,7 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { revert CapabilityIsDeprecated(configuration.capabilityId); if (donCapabilityConfig.capabilityConfigs[configuration.capabilityId].length > 0) - revert DuplicateDONCapability(donId, configuration.capabilityId); + revert DuplicateDONCapability(donParams.id, configuration.capabilityId); for (uint256 j; j < nodes.length; ++j) { if ( @@ -720,11 +772,19 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { donCapabilityConfig.capabilityIds.push(configuration.capabilityId); donCapabilityConfig.capabilityConfigs[configuration.capabilityId] = configuration.config; - _setDONCapabilityConfig(donId, configCount, configuration.capabilityId, nodes, configuration.config); + _setDONCapabilityConfig( + donParams.id, + donParams.configCount, + configuration.capabilityId, + nodes, + configuration.config + ); } - s_dons[donId].isPublic = isPublic; - s_dons[donId].configCount = configCount; - emit ConfigSet(donId, configCount); + s_dons[donParams.id].isPublic = donParams.isPublic; + s_dons[donParams.id].acceptsWorkflows = donParams.acceptsWorkflows; + s_dons[donParams.id].f = donParams.f; + s_dons[donParams.id].configCount = donParams.configCount; + emit ConfigSet(donParams.id, donParams.configCount); } /// @notice Sets the capability's config on the config contract @@ -789,7 +849,9 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { DONInfo({ id: s_dons[donId].id, configCount: configCount, + f: s_dons[donId].f, isPublic: s_dons[donId].isPublic, + acceptsWorkflows: s_dons[donId].acceptsWorkflows, nodeP2PIds: donCapabilityConfig.nodes.values(), capabilityConfigurations: capabilityConfigurations }); diff --git a/contracts/src/v0.8/keystone/test/BaseTest.t.sol b/contracts/src/v0.8/keystone/test/BaseTest.t.sol index b4d12f7ba73..84cce57dc34 100644 --- a/contracts/src/v0.8/keystone/test/BaseTest.t.sol +++ b/contracts/src/v0.8/keystone/test/BaseTest.t.sol @@ -24,13 +24,15 @@ contract BaseTest is Test, Constants { labelledName: "data-streams-reports", version: "1.0.0", responseType: CapabilityRegistry.CapabilityResponseType.REPORT, - configurationContract: address(0) + configurationContract: address(0), + capabilityType: CapabilityRegistry.CapabilityType.TRIGGER }); s_capabilityWithConfigurationContract = CapabilityRegistry.Capability({ labelledName: "read-ethereum-mainnet-gas-price", version: "1.0.2", responseType: CapabilityRegistry.CapabilityResponseType.OBSERVATION_IDENTICAL, - configurationContract: address(s_capabilityConfigurationContract) + configurationContract: address(s_capabilityConfigurationContract), + capabilityType: CapabilityRegistry.CapabilityType.ACTION }); s_basicHashedCapabilityId = s_capabilityRegistry.getHashedCapabilityId( diff --git a/contracts/src/v0.8/keystone/test/CapabiityRegistry_GetHashedCapabilityIdTest.t.sol b/contracts/src/v0.8/keystone/test/CapabiityRegistry_GetHashedCapabilityIdTest.t.sol index 9f8c0644e89..435138c80e9 100644 --- a/contracts/src/v0.8/keystone/test/CapabiityRegistry_GetHashedCapabilityIdTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabiityRegistry_GetHashedCapabilityIdTest.t.sol @@ -7,10 +7,10 @@ import {CapabilityConfigurationContract} from "./mocks/CapabilityConfigurationCo import {CapabilityRegistry} from "../CapabilityRegistry.sol"; contract CapabilityRegistry_GetHashedCapabilityTest is BaseTest { - bytes32 constant CAPABILITY_LABELLED_NAME = bytes32("ccip1"); - bytes32 constant CAPABILITY_VERSION = bytes32("1.0.0"); + string constant CAPABILITY_LABELLED_NAME = "ccip1"; + string constant CAPABILITY_VERSION = "1.0.0"; - function test_CorrectlyGeneratesHashedCapabilityId() public { + function test_CorrectlyGeneratesHashedCapabilityId() public view { bytes32 expectedHashedCapabilityId = keccak256(abi.encode(CAPABILITY_LABELLED_NAME, CAPABILITY_VERSION)); assertEq( @@ -19,10 +19,10 @@ contract CapabilityRegistry_GetHashedCapabilityTest is BaseTest { ); } - function test_DoesNotCauseIncorrectClashes() public { + function test_DoesNotCauseIncorrectClashes() public view { assertNotEq( s_capabilityRegistry.getHashedCapabilityId(CAPABILITY_LABELLED_NAME, CAPABILITY_VERSION), - s_capabilityRegistry.getHashedCapabilityId(bytes32("ccip"), bytes32("11.0.0")) + s_capabilityRegistry.getHashedCapabilityId("ccip", "11.0.0") ); } } diff --git a/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddCapabilityTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddCapabilityTest.t.sol index dbcc0ae1712..aeb6cc69b11 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddCapabilityTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddCapabilityTest.t.sol @@ -47,10 +47,7 @@ contract CapabilityRegistry_AddCapabilityTest is BaseTest { function test_AddCapability_NoConfigurationContract() public { s_capabilityRegistry.addCapability(s_basicCapability); - bytes32 hashedCapabilityId = s_capabilityRegistry.getHashedCapabilityId( - bytes32("data-streams-reports"), - bytes32("1.0.0") - ); + bytes32 hashedCapabilityId = s_capabilityRegistry.getHashedCapabilityId("data-streams-reports", "1.0.0"); CapabilityRegistry.Capability memory storedCapability = s_capabilityRegistry.getCapability(hashedCapabilityId); assertEq(storedCapability.labelledName, s_basicCapability.labelledName); @@ -63,8 +60,8 @@ contract CapabilityRegistry_AddCapabilityTest is BaseTest { s_capabilityRegistry.addCapability(s_capabilityWithConfigurationContract); bytes32 hashedCapabilityId = s_capabilityRegistry.getHashedCapabilityId( - bytes32(s_capabilityWithConfigurationContract.labelledName), - bytes32(s_capabilityWithConfigurationContract.version) + s_capabilityWithConfigurationContract.labelledName, + s_capabilityWithConfigurationContract.version ); CapabilityRegistry.Capability memory storedCapability = s_capabilityRegistry.getCapability(hashedCapabilityId); diff --git a/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddDONTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddDONTest.t.sol index 259332f0de7..ad101131a93 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddDONTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddDONTest.t.sol @@ -8,13 +8,6 @@ import {CapabilityRegistry} from "../CapabilityRegistry.sol"; contract CapabilityRegistry_AddDONTest is BaseTest { event ConfigSet(uint32 donId, uint32 configCount); - uint32 private constant DON_ID = 1; - uint32 private constant TEST_NODE_OPERATOR_ONE_ID = 1; - uint256 private constant TEST_NODE_OPERATOR_TWO_ID = 2; - bytes32 private constant INVALID_P2P_ID = bytes32("fake-p2p"); - bytes private constant BASIC_CAPABILITY_CONFIG = bytes("basic-capability-config"); - bytes private constant CONFIG_CAPABILITY_CONFIG = bytes("config-capability-config"); - function setUp() public override { BaseTest.setUp(); @@ -22,7 +15,7 @@ contract CapabilityRegistry_AddDONTest is BaseTest { s_capabilityRegistry.addCapability(s_basicCapability); s_capabilityRegistry.addCapability(s_capabilityWithConfigurationContract); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](2); + CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](3); bytes32[] memory capabilityIds = new bytes32[](2); capabilityIds[0] = s_basicHashedCapabilityId; capabilityIds[1] = s_capabilityWithConfigurationContractId; @@ -38,13 +31,19 @@ contract CapabilityRegistry_AddDONTest is BaseTest { nodeTwoCapabilityIds[0] = s_basicHashedCapabilityId; nodes[1] = CapabilityRegistry.NodeInfo({ - nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, + nodeOperatorId: TEST_NODE_OPERATOR_TWO_ID, p2pId: P2P_ID_TWO, signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, hashedCapabilityIds: nodeTwoCapabilityIds }); - changePrank(NODE_OPERATOR_ONE_ADMIN); + nodes[2] = CapabilityRegistry.NodeInfo({ + nodeOperatorId: TEST_NODE_OPERATOR_THREE_ID, + p2pId: P2P_ID_THREE, + signer: NODE_OPERATOR_THREE_SIGNER_ADDRESS, + hashedCapabilityIds: capabilityIds + }); + s_capabilityRegistry.addNodes(nodes); changePrank(ADMIN); @@ -61,12 +60,13 @@ contract CapabilityRegistry_AddDONTest is BaseTest { capabilityId: s_basicHashedCapabilityId, config: BASIC_CAPABILITY_CONFIG }); - s_capabilityRegistry.addDON(nodes, capabilityConfigs, true); + s_capabilityRegistry.addDON(nodes, capabilityConfigs, true, true, F_VALUE); } function test_RevertWhen_NodeDoesNotSupportCapability() public { - bytes32[] memory nodes = new bytes32[](1); - nodes[0] = P2P_ID_TWO; + bytes32[] memory nodes = new bytes32[](2); + nodes[0] = P2P_ID; + nodes[1] = P2P_ID_TWO; CapabilityRegistry.CapabilityConfiguration[] memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](1); capabilityConfigs[0] = CapabilityRegistry.CapabilityConfiguration({ @@ -80,11 +80,13 @@ contract CapabilityRegistry_AddDONTest is BaseTest { s_capabilityWithConfigurationContractId ) ); - s_capabilityRegistry.addDON(nodes, capabilityConfigs, true); + s_capabilityRegistry.addDON(nodes, capabilityConfigs, true, true, F_VALUE); } function test_RevertWhen_CapabilityDoesNotExist() public { - bytes32[] memory nodes = new bytes32[](1); + bytes32[] memory nodes = new bytes32[](2); + nodes[0] = P2P_ID; + nodes[1] = P2P_ID_TWO; CapabilityRegistry.CapabilityConfiguration[] memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](1); capabilityConfigs[0] = CapabilityRegistry.CapabilityConfiguration({ @@ -94,13 +96,29 @@ contract CapabilityRegistry_AddDONTest is BaseTest { vm.expectRevert( abi.encodeWithSelector(CapabilityRegistry.CapabilityDoesNotExist.selector, s_nonExistentHashedCapabilityId) ); - s_capabilityRegistry.addDON(nodes, capabilityConfigs, true); + s_capabilityRegistry.addDON(nodes, capabilityConfigs, true, true, F_VALUE); } - function test_RevertWhen_DuplicateCapabilityAdded() public { + function test_RevertWhen_FaultToleranceIsZero() public { bytes32[] memory nodes = new bytes32[](1); nodes[0] = P2P_ID; + CapabilityRegistry.CapabilityConfiguration[] + memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](1); + capabilityConfigs[0] = CapabilityRegistry.CapabilityConfiguration({ + capabilityId: s_basicHashedCapabilityId, + config: BASIC_CAPABILITY_CONFIG + }); + + vm.expectRevert(abi.encodeWithSelector(CapabilityRegistry.InvalidFaultTolerance.selector, 0, 1)); + s_capabilityRegistry.addDON(nodes, capabilityConfigs, true, true, 0); + } + + function test_RevertWhen_DuplicateCapabilityAdded() public { + bytes32[] memory nodes = new bytes32[](2); + nodes[0] = P2P_ID; + nodes[1] = P2P_ID_TWO; + CapabilityRegistry.CapabilityConfiguration[] memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](2); capabilityConfigs[0] = CapabilityRegistry.CapabilityConfiguration({ @@ -115,15 +133,16 @@ contract CapabilityRegistry_AddDONTest is BaseTest { vm.expectRevert( abi.encodeWithSelector(CapabilityRegistry.DuplicateDONCapability.selector, 1, s_basicHashedCapabilityId) ); - s_capabilityRegistry.addDON(nodes, capabilityConfigs, true); + s_capabilityRegistry.addDON(nodes, capabilityConfigs, true, true, F_VALUE); } function test_RevertWhen_DeprecatedCapabilityAdded() public { bytes32 capabilityId = s_basicHashedCapabilityId; s_capabilityRegistry.deprecateCapability(capabilityId); - bytes32[] memory nodes = new bytes32[](1); + bytes32[] memory nodes = new bytes32[](2); nodes[0] = P2P_ID; + nodes[1] = P2P_ID_TWO; CapabilityRegistry.CapabilityConfiguration[] memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](1); @@ -133,7 +152,7 @@ contract CapabilityRegistry_AddDONTest is BaseTest { }); vm.expectRevert(abi.encodeWithSelector(CapabilityRegistry.CapabilityIsDeprecated.selector, capabilityId)); - s_capabilityRegistry.addDON(nodes, capabilityConfigs, true); + s_capabilityRegistry.addDON(nodes, capabilityConfigs, true, true, F_VALUE); } function test_RevertWhen_DuplicateNodeAdded() public { @@ -148,12 +167,13 @@ contract CapabilityRegistry_AddDONTest is BaseTest { config: BASIC_CAPABILITY_CONFIG }); vm.expectRevert(abi.encodeWithSelector(CapabilityRegistry.DuplicateDONNode.selector, 1, P2P_ID)); - s_capabilityRegistry.addDON(nodes, capabilityConfigs, true); + s_capabilityRegistry.addDON(nodes, capabilityConfigs, true, true, F_VALUE); } function test_AddDON() public { - bytes32[] memory nodes = new bytes32[](1); + bytes32[] memory nodes = new bytes32[](2); nodes[0] = P2P_ID; + nodes[1] = P2P_ID_THREE; CapabilityRegistry.CapabilityConfiguration[] memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](2); @@ -179,7 +199,7 @@ contract CapabilityRegistry_AddDONTest is BaseTest { ), 1 ); - s_capabilityRegistry.addDON(nodes, capabilityConfigs, true); + s_capabilityRegistry.addDON(nodes, capabilityConfigs, true, true, F_VALUE); CapabilityRegistry.DONInfo memory donInfo = s_capabilityRegistry.getDON(DON_ID); assertEq(donInfo.id, DON_ID); @@ -191,5 +211,6 @@ contract CapabilityRegistry_AddDONTest is BaseTest { assertEq(donInfo.nodeP2PIds.length, nodes.length); assertEq(donInfo.nodeP2PIds[0], P2P_ID); + assertEq(donInfo.nodeP2PIds[1], P2P_ID_THREE); } } diff --git a/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddNodeOperatorsTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddNodeOperatorsTest.t.sol index b2f2d7bef38..d9daaaa4c2b 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddNodeOperatorsTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddNodeOperatorsTest.t.sol @@ -7,9 +7,6 @@ import {CapabilityRegistry} from "../CapabilityRegistry.sol"; contract CapabilityRegistry_AddNodeOperatorsTest is BaseTest { event NodeOperatorAdded(uint256 nodeOperatorId, address indexed admin, string name); - uint32 private constant TEST_NODE_OPERATOR_ONE_ID = 1; - uint256 private constant TEST_NODE_OPERATOR_TWO_ID = 2; - function test_RevertWhen_CalledByNonAdmin() public { changePrank(STRANGER); vm.expectRevert("Only callable by owner"); diff --git a/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddNodesTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddNodesTest.t.sol index d5253e1cce4..5899dfa7b84 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddNodesTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddNodesTest.t.sol @@ -7,9 +7,6 @@ import {CapabilityRegistry} from "../CapabilityRegistry.sol"; contract CapabilityRegistry_AddNodesTest is BaseTest { event NodeAdded(bytes32 p2pId, uint256 nodeOperatorId, bytes32 signer); - uint32 private constant TEST_NODE_OPERATOR_ONE_ID = 1; - uint32 private constant TEST_NODE_OPERATOR_TWO_ID = 2; - function setUp() public override { BaseTest.setUp(); changePrank(ADMIN); diff --git a/contracts/src/v0.8/keystone/test/CapabilityRegistry_GetCapabilitiesTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilityRegistry_GetCapabilitiesTest.t.sol index 010fb619ba8..51f43be1dde 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_GetCapabilitiesTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_GetCapabilitiesTest.t.sol @@ -20,6 +20,7 @@ contract CapabilityRegistry_GetCapabilitiesTest is BaseTest { assertEq(capabilities[0].labelledName, "data-streams-reports"); assertEq(capabilities[0].version, "1.0.0"); assertEq(uint256(capabilities[0].responseType), uint256(CapabilityRegistry.CapabilityResponseType.REPORT)); + assertEq(uint256(capabilities[0].capabilityType), uint256(CapabilityRegistry.CapabilityType.TRIGGER)); assertEq(capabilities[0].configurationContract, address(0)); assertEq(capabilities[1].labelledName, "read-ethereum-mainnet-gas-price"); @@ -28,6 +29,7 @@ contract CapabilityRegistry_GetCapabilitiesTest is BaseTest { uint256(capabilities[1].responseType), uint256(CapabilityRegistry.CapabilityResponseType.OBSERVATION_IDENTICAL) ); + assertEq(uint256(capabilities[1].capabilityType), uint256(CapabilityRegistry.CapabilityType.ACTION)); assertEq(capabilities[1].configurationContract, address(s_capabilityConfigurationContract)); } diff --git a/contracts/src/v0.8/keystone/test/CapabilityRegistry_GetDONsTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilityRegistry_GetDONsTest.t.sol index ccaa7076a4c..3b5c874ca80 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_GetDONsTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_GetDONsTest.t.sol @@ -8,12 +8,6 @@ import {CapabilityRegistry} from "../CapabilityRegistry.sol"; contract CapabilityRegistry_GetDONsTest is BaseTest { event ConfigSet(uint32 donId, uint32 configCount); - uint32 private constant DON_ID_ONE = 1; - uint32 private constant DON_ID_TWO = 2; - uint32 private constant TEST_NODE_OPERATOR_ONE_ID = 1; - uint256 private constant TEST_NODE_OPERATOR_TWO_ID = 2; - bytes32 private constant INVALID_P2P_ID = bytes32("fake-p2p"); - bytes private constant CONFIG = bytes("onchain-config"); CapabilityRegistry.CapabilityConfiguration[] private s_capabilityConfigs; function setUp() public override { @@ -49,7 +43,10 @@ contract CapabilityRegistry_GetDONsTest is BaseTest { s_capabilityRegistry.addNodes(nodes); s_capabilityConfigs.push( - CapabilityRegistry.CapabilityConfiguration({capabilityId: s_basicHashedCapabilityId, config: CONFIG}) + CapabilityRegistry.CapabilityConfiguration({ + capabilityId: s_basicHashedCapabilityId, + config: BASIC_CAPABILITY_CONFIG + }) ); bytes32[] memory nodeIds = new bytes32[](2); @@ -57,16 +54,18 @@ contract CapabilityRegistry_GetDONsTest is BaseTest { nodeIds[1] = P2P_ID_TWO; changePrank(ADMIN); - s_capabilityRegistry.addDON(nodeIds, s_capabilityConfigs, true); - s_capabilityRegistry.addDON(nodeIds, s_capabilityConfigs, false); + s_capabilityRegistry.addDON(nodeIds, s_capabilityConfigs, true, true, 1); + s_capabilityRegistry.addDON(nodeIds, s_capabilityConfigs, false, false, 1); } function test_CorrectlyFetchesDONs() public view { CapabilityRegistry.DONInfo[] memory dons = s_capabilityRegistry.getDONs(); assertEq(dons.length, 2); - assertEq(dons[0].id, DON_ID_ONE); + assertEq(dons[0].id, DON_ID); assertEq(dons[0].configCount, 1); assertEq(dons[0].isPublic, true); + assertEq(dons[0].acceptsWorkflows, true); + assertEq(dons[0].f, 1); assertEq(dons[0].capabilityConfigurations.length, s_capabilityConfigs.length); assertEq(dons[0].capabilityConfigurations[0].capabilityId, s_basicHashedCapabilityId); @@ -79,7 +78,7 @@ contract CapabilityRegistry_GetDONsTest is BaseTest { function test_DoesNotIncludeRemovedDONs() public { uint32[] memory removedDONIDs = new uint32[](1); - removedDONIDs[0] = DON_ID_ONE; + removedDONIDs[0] = DON_ID; s_capabilityRegistry.removeDONs(removedDONIDs); CapabilityRegistry.DONInfo[] memory dons = s_capabilityRegistry.getDONs(); @@ -87,6 +86,8 @@ contract CapabilityRegistry_GetDONsTest is BaseTest { assertEq(dons[0].id, DON_ID_TWO); assertEq(dons[0].configCount, 1); assertEq(dons[0].isPublic, false); + assertEq(dons[0].acceptsWorkflows, false); + assertEq(dons[0].f, 1); assertEq(dons[0].capabilityConfigurations.length, s_capabilityConfigs.length); assertEq(dons[0].capabilityConfigurations[0].capabilityId, s_basicHashedCapabilityId); } diff --git a/contracts/src/v0.8/keystone/test/CapabilityRegistry_GetNodeOperatorsTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilityRegistry_GetNodeOperatorsTest.t.sol index 95d3084caae..2fbf67c4392 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_GetNodeOperatorsTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_GetNodeOperatorsTest.t.sol @@ -5,9 +5,6 @@ import {BaseTest} from "./BaseTest.t.sol"; import {CapabilityRegistry} from "../CapabilityRegistry.sol"; contract CapabilityRegistry_GetNodeOperatorsTest is BaseTest { - uint32 private constant TEST_NODE_OPERATOR_ONE_ID = 1; - uint256 private constant TEST_NODE_OPERATOR_TWO_ID = 2; - function setUp() public override { BaseTest.setUp(); changePrank(ADMIN); diff --git a/contracts/src/v0.8/keystone/test/CapabilityRegistry_GetNodesTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilityRegistry_GetNodesTest.t.sol index 02dace7d0e9..530af0365b7 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_GetNodesTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_GetNodesTest.t.sol @@ -5,9 +5,6 @@ import {BaseTest} from "./BaseTest.t.sol"; import {CapabilityRegistry} from "../CapabilityRegistry.sol"; contract CapabilityRegistry_GetNodesTest is BaseTest { - uint32 private constant TEST_NODE_OPERATOR_ONE_ID = 1; - uint256 private constant TEST_NODE_OPERATOR_TWO_ID = 2; - function setUp() public override { BaseTest.setUp(); changePrank(ADMIN); diff --git a/contracts/src/v0.8/keystone/test/CapabilityRegistry_RemoveDONsTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilityRegistry_RemoveDONsTest.t.sol index 53f602c9da2..3aaeb5a0723 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_RemoveDONsTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_RemoveDONsTest.t.sol @@ -8,12 +8,6 @@ import {CapabilityRegistry} from "../CapabilityRegistry.sol"; contract CapabilityRegistry_RemoveDONsTest is BaseTest { event ConfigSet(uint32 donId, uint32 configCount); - uint32 private constant DON_ID = 1; - uint32 private constant TEST_NODE_OPERATOR_ONE_ID = 1; - uint256 private constant TEST_NODE_OPERATOR_TWO_ID = 2; - bytes32 private constant INVALID_P2P_ID = bytes32("fake-p2p"); - bytes private constant CONFIG = bytes("onchain-config"); - function setUp() public override { BaseTest.setUp(); @@ -50,7 +44,7 @@ contract CapabilityRegistry_RemoveDONsTest is BaseTest { memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](1); capabilityConfigs[0] = CapabilityRegistry.CapabilityConfiguration({ capabilityId: s_basicHashedCapabilityId, - config: CONFIG + config: BASIC_CAPABILITY_CONFIG }); bytes32[] memory nodeIds = new bytes32[](2); @@ -58,7 +52,7 @@ contract CapabilityRegistry_RemoveDONsTest is BaseTest { nodeIds[1] = P2P_ID_TWO; changePrank(ADMIN); - s_capabilityRegistry.addDON(nodeIds, capabilityConfigs, true); + s_capabilityRegistry.addDON(nodeIds, capabilityConfigs, true, true, 1); } function test_RevertWhen_CalledByNonAdmin() public { diff --git a/contracts/src/v0.8/keystone/test/CapabilityRegistry_RemoveNodeOperatorsTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilityRegistry_RemoveNodeOperatorsTest.t.sol index 99106692c3b..8295544422e 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_RemoveNodeOperatorsTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_RemoveNodeOperatorsTest.t.sol @@ -7,9 +7,6 @@ import {CapabilityRegistry} from "../CapabilityRegistry.sol"; contract CapabilityRegistry_RemoveNodeOperatorsTest is BaseTest { event NodeOperatorRemoved(uint256 nodeOperatorId); - uint32 private constant TEST_NODE_OPERATOR_ONE_ID = 1; - uint256 private constant TEST_NODE_OPERATOR_TWO_ID = 2; - function setUp() public override { BaseTest.setUp(); changePrank(ADMIN); diff --git a/contracts/src/v0.8/keystone/test/CapabilityRegistry_RemoveNodesTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilityRegistry_RemoveNodesTest.t.sol index d0feff53dac..f05d1929f66 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_RemoveNodesTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_RemoveNodesTest.t.sol @@ -7,10 +7,6 @@ import {CapabilityRegistry} from "../CapabilityRegistry.sol"; contract CapabilityRegistry_RemoveNodesTest is BaseTest { event NodeRemoved(bytes32 p2pId); - uint32 private constant TEST_NODE_OPERATOR_ONE_ID = 1; - uint256 private constant TEST_NODE_OPERATOR_TWO_ID = 2; - bytes32 private constant INVALID_P2P_ID = bytes32("fake-p2p"); - function setUp() public override { BaseTest.setUp(); changePrank(ADMIN); diff --git a/contracts/src/v0.8/keystone/test/CapabilityRegistry_UpdateDONTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilityRegistry_UpdateDONTest.t.sol index 6473839cd43..cbf697677cf 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_UpdateDONTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_UpdateDONTest.t.sol @@ -8,13 +8,6 @@ import {CapabilityRegistry} from "../CapabilityRegistry.sol"; contract CapabilityRegistry_UpdateDONTest is BaseTest { event ConfigSet(uint32 donId, uint32 configCount); - uint32 private constant DON_ID = 1; - uint32 private constant TEST_NODE_OPERATOR_ONE_ID = 1; - uint256 private constant TEST_NODE_OPERATOR_TWO_ID = 2; - bytes32 private constant INVALID_P2P_ID = bytes32("fake-p2p"); - bytes private constant BASIC_CAPABILITY_CONFIG = bytes("basic-capability-config"); - bytes private constant CONFIG_CAPABILITY_CONFIG = bytes("config-capability-config"); - function setUp() public override { BaseTest.setUp(); @@ -22,7 +15,7 @@ contract CapabilityRegistry_UpdateDONTest is BaseTest { s_capabilityRegistry.addCapability(s_basicCapability); s_capabilityRegistry.addCapability(s_capabilityWithConfigurationContract); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](2); + CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](3); bytes32[] memory capabilityIds = new bytes32[](2); capabilityIds[0] = s_basicHashedCapabilityId; capabilityIds[1] = s_capabilityWithConfigurationContractId; @@ -38,19 +31,24 @@ contract CapabilityRegistry_UpdateDONTest is BaseTest { nodeTwoCapabilityIds[0] = s_basicHashedCapabilityId; nodes[1] = CapabilityRegistry.NodeInfo({ - nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, + nodeOperatorId: TEST_NODE_OPERATOR_TWO_ID, p2pId: P2P_ID_TWO, signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, hashedCapabilityIds: nodeTwoCapabilityIds }); - changePrank(NODE_OPERATOR_ONE_ADMIN); - s_capabilityRegistry.addNodes(nodes); + nodes[2] = CapabilityRegistry.NodeInfo({ + nodeOperatorId: TEST_NODE_OPERATOR_THREE_ID, + p2pId: P2P_ID_THREE, + signer: NODE_OPERATOR_THREE_SIGNER_ADDRESS, + hashedCapabilityIds: capabilityIds + }); - changePrank(ADMIN); + s_capabilityRegistry.addNodes(nodes); - bytes32[] memory donNodes = new bytes32[](1); + bytes32[] memory donNodes = new bytes32[](2); donNodes[0] = P2P_ID; + donNodes[1] = P2P_ID_TWO; CapabilityRegistry.CapabilityConfiguration[] memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](1); @@ -58,7 +56,7 @@ contract CapabilityRegistry_UpdateDONTest is BaseTest { capabilityId: s_basicHashedCapabilityId, config: BASIC_CAPABILITY_CONFIG }); - s_capabilityRegistry.addDON(donNodes, capabilityConfigs, true); + s_capabilityRegistry.addDON(donNodes, capabilityConfigs, true, true, F_VALUE); } function test_RevertWhen_CalledByNonAdmin() public { @@ -72,12 +70,13 @@ contract CapabilityRegistry_UpdateDONTest is BaseTest { capabilityId: s_basicHashedCapabilityId, config: BASIC_CAPABILITY_CONFIG }); - s_capabilityRegistry.updateDON(DON_ID, nodes, capabilityConfigs, true); + s_capabilityRegistry.updateDON(DON_ID, nodes, capabilityConfigs, true, true, F_VALUE); } function test_RevertWhen_NodeDoesNotSupportCapability() public { - bytes32[] memory nodes = new bytes32[](1); - nodes[0] = P2P_ID_TWO; + bytes32[] memory nodes = new bytes32[](2); + nodes[0] = P2P_ID; + nodes[1] = P2P_ID_TWO; CapabilityRegistry.CapabilityConfiguration[] memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](1); capabilityConfigs[0] = CapabilityRegistry.CapabilityConfiguration({ @@ -91,12 +90,14 @@ contract CapabilityRegistry_UpdateDONTest is BaseTest { s_capabilityWithConfigurationContractId ) ); - s_capabilityRegistry.updateDON(DON_ID, nodes, capabilityConfigs, true); + s_capabilityRegistry.updateDON(DON_ID, nodes, capabilityConfigs, true, true, F_VALUE); } function test_RevertWhen_DONDoesNotExist() public { uint32 nonExistentDONId = 10; - bytes32[] memory nodes = new bytes32[](1); + bytes32[] memory nodes = new bytes32[](2); + nodes[0] = P2P_ID; + nodes[1] = P2P_ID_TWO; CapabilityRegistry.CapabilityConfiguration[] memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](1); capabilityConfigs[0] = CapabilityRegistry.CapabilityConfiguration({ @@ -104,11 +105,13 @@ contract CapabilityRegistry_UpdateDONTest is BaseTest { config: BASIC_CAPABILITY_CONFIG }); vm.expectRevert(abi.encodeWithSelector(CapabilityRegistry.DONDoesNotExist.selector, nonExistentDONId)); - s_capabilityRegistry.updateDON(nonExistentDONId, nodes, capabilityConfigs, true); + s_capabilityRegistry.updateDON(nonExistentDONId, nodes, capabilityConfigs, true, true, F_VALUE); } function test_RevertWhen_CapabilityDoesNotExist() public { - bytes32[] memory nodes = new bytes32[](1); + bytes32[] memory nodes = new bytes32[](2); + nodes[0] = P2P_ID; + nodes[1] = P2P_ID_TWO; CapabilityRegistry.CapabilityConfiguration[] memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](1); capabilityConfigs[0] = CapabilityRegistry.CapabilityConfiguration({ @@ -118,12 +121,13 @@ contract CapabilityRegistry_UpdateDONTest is BaseTest { vm.expectRevert( abi.encodeWithSelector(CapabilityRegistry.CapabilityDoesNotExist.selector, s_nonExistentHashedCapabilityId) ); - s_capabilityRegistry.updateDON(DON_ID, nodes, capabilityConfigs, true); + s_capabilityRegistry.updateDON(DON_ID, nodes, capabilityConfigs, true, true, F_VALUE); } function test_RevertWhen_DuplicateCapabilityAdded() public { - bytes32[] memory nodes = new bytes32[](1); + bytes32[] memory nodes = new bytes32[](2); nodes[0] = P2P_ID; + nodes[1] = P2P_ID_TWO; CapabilityRegistry.CapabilityConfiguration[] memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](2); @@ -139,15 +143,16 @@ contract CapabilityRegistry_UpdateDONTest is BaseTest { vm.expectRevert( abi.encodeWithSelector(CapabilityRegistry.DuplicateDONCapability.selector, 1, s_basicHashedCapabilityId) ); - s_capabilityRegistry.updateDON(DON_ID, nodes, capabilityConfigs, true); + s_capabilityRegistry.updateDON(DON_ID, nodes, capabilityConfigs, true, true, F_VALUE); } function test_RevertWhen_DeprecatedCapabilityAdded() public { bytes32 capabilityId = s_basicHashedCapabilityId; s_capabilityRegistry.deprecateCapability(capabilityId); - bytes32[] memory nodes = new bytes32[](1); + bytes32[] memory nodes = new bytes32[](2); nodes[0] = P2P_ID; + nodes[1] = P2P_ID_TWO; CapabilityRegistry.CapabilityConfiguration[] memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](1); @@ -157,7 +162,7 @@ contract CapabilityRegistry_UpdateDONTest is BaseTest { }); vm.expectRevert(abi.encodeWithSelector(CapabilityRegistry.CapabilityIsDeprecated.selector, capabilityId)); - s_capabilityRegistry.updateDON(DON_ID, nodes, capabilityConfigs, true); + s_capabilityRegistry.updateDON(DON_ID, nodes, capabilityConfigs, true, true, F_VALUE); } function test_RevertWhen_DuplicateNodeAdded() public { @@ -172,12 +177,13 @@ contract CapabilityRegistry_UpdateDONTest is BaseTest { config: BASIC_CAPABILITY_CONFIG }); vm.expectRevert(abi.encodeWithSelector(CapabilityRegistry.DuplicateDONNode.selector, 1, P2P_ID)); - s_capabilityRegistry.updateDON(DON_ID, nodes, capabilityConfigs, true); + s_capabilityRegistry.updateDON(DON_ID, nodes, capabilityConfigs, true, true, F_VALUE); } function test_UpdatesDON() public { - bytes32[] memory nodes = new bytes32[](1); + bytes32[] memory nodes = new bytes32[](2); nodes[0] = P2P_ID; + nodes[1] = P2P_ID_THREE; CapabilityRegistry.CapabilityConfiguration[] memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](2); @@ -208,7 +214,7 @@ contract CapabilityRegistry_UpdateDONTest is BaseTest { ), 1 ); - s_capabilityRegistry.updateDON(DON_ID, nodes, capabilityConfigs, expectedDONIsPublic); + s_capabilityRegistry.updateDON(DON_ID, nodes, capabilityConfigs, expectedDONIsPublic, true, F_VALUE); CapabilityRegistry.DONInfo memory donInfo = s_capabilityRegistry.getDON(DON_ID); assertEq(donInfo.id, DON_ID); @@ -220,5 +226,6 @@ contract CapabilityRegistry_UpdateDONTest is BaseTest { assertEq(donInfo.nodeP2PIds.length, nodes.length); assertEq(donInfo.nodeP2PIds[0], P2P_ID); + assertEq(donInfo.nodeP2PIds[1], P2P_ID_THREE); } } diff --git a/contracts/src/v0.8/keystone/test/CapabilityRegistry_UpdateNodesTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilityRegistry_UpdateNodesTest.t.sol index 3b099606a70..c97a9c339c4 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_UpdateNodesTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_UpdateNodesTest.t.sol @@ -7,11 +7,6 @@ import {CapabilityRegistry} from "../CapabilityRegistry.sol"; contract CapabilityRegistry_UpdateNodesTest is BaseTest { event NodeUpdated(bytes32 p2pId, uint256 nodeOperatorId, bytes32 signer); - uint32 private constant TEST_NODE_OPERATOR_ONE_ID = 1; - uint32 private constant TEST_NODE_OPERATOR_TWO_ID = 2; - bytes32 private constant INVALID_P2P_ID = bytes32("fake-p2p"); - bytes32 private constant NEW_NODE_SIGNER = bytes32("new-signer"); - function setUp() public override { BaseTest.setUp(); changePrank(ADMIN); diff --git a/contracts/src/v0.8/keystone/test/Constants.t.sol b/contracts/src/v0.8/keystone/test/Constants.t.sol index 54cd58e8541..9b13bd91f58 100644 --- a/contracts/src/v0.8/keystone/test/Constants.t.sol +++ b/contracts/src/v0.8/keystone/test/Constants.t.sol @@ -2,15 +2,34 @@ pragma solidity ^0.8.19; contract Constants { - address internal ADMIN = address(1); - address internal STRANGER = address(2); - address internal NODE_OPERATOR_ONE_ADMIN = address(3); - string internal NODE_OPERATOR_ONE_NAME = "node-operator-one"; - bytes32 internal NODE_OPERATOR_ONE_SIGNER_ADDRESS = bytes32(abi.encodePacked(address(3333))); - address internal NODE_OPERATOR_TWO_ADMIN = address(4); - string internal NODE_OPERATOR_TWO_NAME = "node-operator-two"; - bytes32 internal NODE_OPERATOR_TWO_SIGNER_ADDRESS = bytes32(abi.encodePacked(address(4444))); + address internal constant ADMIN = address(1); + address internal constant STRANGER = address(2); - bytes32 internal P2P_ID = hex"e42415859707d90ed4dc534ad730f187a17b0c368e1beec2e9b995587c4b0a05"; - bytes32 internal P2P_ID_TWO = hex"f53415859707d90ed4dc534ad730f187a17b0c368e1beec2e9b995587c4b0a05"; + uint32 internal constant TEST_NODE_OPERATOR_ONE_ID = 1; + address internal constant NODE_OPERATOR_ONE_ADMIN = address(3); + string internal constant NODE_OPERATOR_ONE_NAME = "node-operator-one"; + bytes32 internal constant NODE_OPERATOR_ONE_SIGNER_ADDRESS = bytes32(abi.encodePacked(address(3333))); + bytes32 internal constant P2P_ID = hex"e42415859707d90ed4dc534ad730f187a17b0c368e1beec2e9b995587c4b0a05"; + + uint32 internal constant TEST_NODE_OPERATOR_TWO_ID = 2; + address internal constant NODE_OPERATOR_TWO_ADMIN = address(4); + string internal constant NODE_OPERATOR_TWO_NAME = "node-operator-two"; + bytes32 internal constant NODE_OPERATOR_TWO_SIGNER_ADDRESS = bytes32(abi.encodePacked(address(4444))); + bytes32 internal constant P2P_ID_TWO = hex"f53415859707d90ed4dc534ad730f187a17b0c368e1beec2e9b995587c4b0a05"; + + uint32 internal constant TEST_NODE_OPERATOR_THREE_ID = 3; + address internal constant NODE_OPERATOR_THREE = address(4); + string internal constant NODE_OPERATOR_THREE_NAME = "node-operator-three"; + bytes32 internal constant NODE_OPERATOR_THREE_SIGNER_ADDRESS = bytes32(abi.encodePacked(address(5555))); + bytes32 internal constant P2P_ID_THREE = hex"f53415859707d90ed4dc534ad730f187a17b0c368e1beec2e9b995587c4b0a06"; + + uint32 internal constant F_VALUE = 1; + uint32 internal constant DON_ID = 1; + uint32 internal constant DON_ID_TWO = 2; + + bytes32 internal constant INVALID_P2P_ID = bytes32("fake-p2p"); + bytes32 internal constant NEW_NODE_SIGNER = hex"f53415859707d90ed4dc534ad730f187a17b0c368e1beec2e9b995587c4b0a07"; + + bytes internal constant BASIC_CAPABILITY_CONFIG = bytes("basic-capability-config"); + bytes internal constant CONFIG_CAPABILITY_CONFIG = bytes("config-capability-config"); } diff --git a/core/gethwrappers/keystone/generated/keystone_capability_registry/keystone_capability_registry.go b/core/gethwrappers/keystone/generated/keystone_capability_registry/keystone_capability_registry.go index 1725189ced6..40dfc10d6c2 100644 --- a/core/gethwrappers/keystone/generated/keystone_capability_registry/keystone_capability_registry.go +++ b/core/gethwrappers/keystone/generated/keystone_capability_registry/keystone_capability_registry.go @@ -31,8 +31,9 @@ var ( ) type CapabilityRegistryCapability struct { - LabelledName [32]byte - Version [32]byte + LabelledName string + Version string + CapabilityType uint8 ResponseType uint8 ConfigurationContract common.Address } @@ -45,7 +46,9 @@ type CapabilityRegistryCapabilityConfiguration struct { type CapabilityRegistryDONInfo struct { Id uint32 ConfigCount uint32 + F uint32 IsPublic bool + AcceptsWorkflows bool NodeP2PIds [][32]byte CapabilityConfigurations []CapabilityRegistryCapabilityConfiguration } @@ -63,8 +66,8 @@ type CapabilityRegistryNodeOperator struct { } var CapabilityRegistryMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"AccessForbidden\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CapabilityAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityIsDeprecated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"DONDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"DuplicateDONCapability\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"DuplicateDONNode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"proposedConfigurationContract\",\"type\":\"address\"}],\"name\":\"InvalidCapabilityConfigurationContractInterface\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"name\":\"InvalidNodeCapabilities\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidNodeOperatorAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"InvalidNodeP2PId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidNodeSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"lengthOne\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lengthTwo\",\"type\":\"uint256\"}],\"name\":\"LengthMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"NodeDoesNotSupportCapability\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityDeprecated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"}],\"name\":\"NodeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NodeOperatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"}],\"name\":\"NodeOperatorRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NodeOperatorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"NodeRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"}],\"name\":\"NodeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"labelledName\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"enumCapabilityRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"}],\"internalType\":\"structCapabilityRegistry.Capability\",\"name\":\"capability\",\"type\":\"tuple\"}],\"name\":\"addCapability\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"nodes\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilityRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"}],\"name\":\"addDON\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilityRegistry.NodeOperator[]\",\"name\":\"nodeOperators\",\"type\":\"tuple[]\"}],\"name\":\"addNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"internalType\":\"structCapabilityRegistry.NodeInfo[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"}],\"name\":\"addNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"deprecateCapability\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCapabilities\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"labelledName\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"enumCapabilityRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"}],\"internalType\":\"structCapabilityRegistry.Capability[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedId\",\"type\":\"bytes32\"}],\"name\":\"getCapability\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"labelledName\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"enumCapabilityRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"}],\"internalType\":\"structCapabilityRegistry.Capability\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"getDON\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"bytes32[]\",\"name\":\"nodeP2PIds\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilityRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"}],\"internalType\":\"structCapabilityRegistry.DONInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"getDONCapabilityConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDONs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"bytes32[]\",\"name\":\"nodeP2PIds\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilityRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"}],\"internalType\":\"structCapabilityRegistry.DONInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"labelledName\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"}],\"name\":\"getHashedCapabilityId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"getNode\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"internalType\":\"structCapabilityRegistry.NodeInfo\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"}],\"name\":\"getNodeOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilityRegistry.NodeOperator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodeOperators\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilityRegistry.NodeOperator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodes\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"internalType\":\"structCapabilityRegistry.NodeInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"internalType\":\"uint32[]\",\"name\":\"\",\"type\":\"uint32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"isCapabilityDeprecated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"donIds\",\"type\":\"uint32[]\"}],\"name\":\"removeDONs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"nodeOperatorIds\",\"type\":\"uint256[]\"}],\"name\":\"removeNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"removedNodeP2PIds\",\"type\":\"bytes32[]\"}],\"name\":\"removeNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[]\",\"name\":\"nodes\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilityRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"}],\"name\":\"updateDON\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"nodeOperatorIds\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilityRegistry.NodeOperator[]\",\"name\":\"nodeOperators\",\"type\":\"tuple[]\"}],\"name\":\"updateNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"internalType\":\"structCapabilityRegistry.NodeInfo[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"}],\"name\":\"updateNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6080604052601280546001600160401b0319166401000000011790553480156200002857600080fd5b503380600081620000805760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000b357620000b381620000bc565b50505062000167565b336001600160a01b03821603620001165760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000077565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61437580620001776000396000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c806365c14dc7116100ee5780639cb7c5f411610097578063c63239c511610071578063c63239c514610413578063ddbe4f8214610426578063e29581aa1461043b578063f2fde38b1461045157600080fd5b80639cb7c5f4146103cd578063ae3c241c146103ed578063b06e07a71461040057600080fd5b806373ac22b4116100c857806373ac22b41461038a57806379ba50971461039d5780638da5cb5b146103a557600080fd5b806365c14dc71461034257806366acaa33146103625780636ae5c5911461037757600080fd5b8063214502431161015b57806336b402fb1161013557806336b402fb146102b3578063398f3773146102fb57806350c946fe1461030e5780635e65e3091461032f57600080fd5b8063214502431461026b57806323537405146102805780632c01a1e8146102a057600080fd5b8063181f5a771161018c578063181f5a77146102035780631cdf6343146102455780631d05394c1461025857600080fd5b80630c5801e3146101b3578063117392ce146101c857806312570011146101db575b600080fd5b6101c66101c136600461328f565b610464565b005b6101c66101d63660046132fb565b610775565b6101ee6101e9366004613313565b6109c0565b60405190151581526020015b60405180910390f35b60408051808201909152601881527f4361706162696c697479526567697374727920312e302e30000000000000000060208201525b6040516101fa9190613390565b6101c66102533660046133a3565b6109d3565b6101c66102663660046133a3565b610aa3565b610273610be3565b6040516101fa91906134f5565b61029361028e36600461358e565b610d32565b6040516101fa91906135a9565b6101c66102ae3660046133a3565b610d65565b6102ed6102c13660046135bc565b604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b6040519081526020016101fa565b6101c66103093660046133a3565b611009565b61032161031c366004613313565b6111cc565b6040516101fa92919061361f565b6101c661033d3660046133a3565b611201565b610355610350366004613313565b611704565b6040516101fa919061367c565b61036a6117ea565b6040516101fa919061368f565b6101c6610385366004613710565b6119a8565b6101c66103983660046133a3565b611a4b565b6101c6611eb1565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fa565b6103e06103db366004613313565b611fae565b6040516101fa9190613833565b6101c66103fb366004613313565b612058565b61023861040e366004613841565b612123565b6101c661042136600461386b565b6121f8565b61042e612287565b6040516101fa91906138fe565b61044361244d565b6040516101fa92919061394c565b6101c661045f366004613a2d565b6125d8565b8281146104ac576040517fab8b67c600000000000000000000000000000000000000000000000000000000815260048101849052602481018290526044015b60405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff16905b8481101561076d5760008686838181106104e4576104e4613a4a565b905060200201359050600085858481811061050157610501613a4a565b90506020028101906105139190613a79565b61051c90613b81565b805190915073ffffffffffffffffffffffffffffffffffffffff1661056d576040517feeacd93900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805173ffffffffffffffffffffffffffffffffffffffff1633148015906105aa57503373ffffffffffffffffffffffffffffffffffffffff851614155b156105e1576040517fef67f5d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516000838152600f602052604090205473ffffffffffffffffffffffffffffffffffffffff908116911614158061069357506020808201516040516106279201613390565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000868152600f835292909220919261067a926001019101613c9a565b6040516020818303038152906040528051906020012014155b1561075a5780516000838152600f6020908152604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921782558201516001909101906107009082613d89565b50806000015173ffffffffffffffffffffffffffffffffffffffff167f14c8f513e8a6d86d2d16b0cb64976de4e72386c4f8068eca3b7354373f8fe97a838360200151604051610751929190613ea3565b60405180910390a25b50508061076690613eeb565b90506104c8565b505050505050565b61077d6125ec565b6040805182356020828101919091528084013582840152825180830384018152606090920190925280519101206107b560038261266f565b156107ec576040517fe288638f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107fe6080840160608501613a2d565b73ffffffffffffffffffffffffffffffffffffffff1614610969576108296080830160608401613a2d565b73ffffffffffffffffffffffffffffffffffffffff163b158061090957506108576080830160608401613a2d565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f73e8b41d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff91909116906301ffc9a790602401602060405180830381865afa1580156108e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109079190613f23565b155b156109695761091e6080830160608401613a2d565b6040517fabb5e3fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016104a3565b61097460038261268a565b506000818152600260205260409020829061098f8282613f40565b505060405181907f65610e5677eedff94555572640e442f89848a109ef8593fa927ac30b2565ff0690600090a25050565b60006109cd60058361266f565b92915050565b6109db6125ec565b60005b81811015610a9e5760008383838181106109fa576109fa613a4a565b602090810292909201356000818152600f9093526040832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155909350919050610a4b60018301826131f5565b50610a59905060078261268a565b506040518181527f1e5877d7b3001d1569bf733b76c7eceda58bd6c031e5b8d0b7042308ba2e9d4f9060200160405180910390a150610a9781613eeb565b90506109de565b505050565b610aab6125ec565b60005b81811015610a9e576000838383818110610aca57610aca613a4a565b9050602002016020810190610adf919061358e565b63ffffffff808216600090815260116020526040812080549394509264010000000090049091169003610b46576040517f2b62be9b00000000000000000000000000000000000000000000000000000000815263ffffffff831660048201526024016104a3565b63ffffffff808316600081815260116020526040902080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055610b90916009919061268a16565b506040805163ffffffff84168152600060208201527ff264aae70bf6a9d90e68e0f9b393f4e7fbea67b063b0f336e0b36c1581703651910160405180910390a1505080610bdc90613eeb565b9050610aae565b601254606090640100000000900463ffffffff1660006001610c056009612696565b601254610c209190640100000000900463ffffffff16613fc2565b610c2a9190613fc2565b67ffffffffffffffff811115610c4257610c42613ab7565b604051908082528060200260200182016040528015610cb857816020015b6040805160a08101825260008082526020808301829052928201526060808201819052608082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610c605790505b509050600060015b838163ffffffff161015610d2957610ce2600963ffffffff8084169061266f16565b610d1957610cef816126a0565b838381518110610d0157610d01613a4a565b602002602001018190525081610d1690613eeb565b91505b610d2281613fd5565b9050610cc0565b50909392505050565b6040805160a08101825260008082526020820181905291810191909152606080820181905260808201526109cd826126a0565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b82811015611003576000848483818110610d9f57610d9f613a4a565b602090810292909201356000818152601090935260409092206001015491925050151580610dfc576040517f64e2ee92000000000000000000000000000000000000000000000000000000008152600481018390526024016104a3565b60008281526010602090815260408083205463ffffffff168352600f82528083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff1682526001810180549293919291840191610e5690613c4d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8290613c4d565b8015610ecf5780601f10610ea457610100808354040283529160200191610ecf565b820191906000526020600020905b815481529060010190602001808311610eb257829003601f168201915b505050505081525050905084158015610eff5750805173ffffffffffffffffffffffffffffffffffffffff163314155b15610f36576040517fef67f5d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083815260106020526040902060010154610f5490600b90612939565b50600083815260106020526040902060020154610f7390600d90612939565b5060008381526010602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001681556001810183905560020191909155517f5254e609a97bab37b7cc79fe128f85c097bd6015c6e1624ae0ba392eb975320590610fe79085815260200190565b60405180910390a150505080610ffc90613eeb565b9050610d83565b50505050565b6110116125ec565b60005b81811015610a9e57600083838381811061103057611030613a4a565b90506020028101906110429190613a79565b61104b90613b81565b805190915073ffffffffffffffffffffffffffffffffffffffff1661109c576040517feeacd93900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601254604080518082018252835173ffffffffffffffffffffffffffffffffffffffff908116825260208086015181840190815263ffffffff9095166000818152600f909252939020825181547fffffffffffffffffffffffff000000000000000000000000000000000000000016921691909117815592519192909160018201906111289082613d89565b5050601280549091506000906111439063ffffffff16613fd5565b91906101000a81548163ffffffff021916908363ffffffff160217905550816000015173ffffffffffffffffffffffffffffffffffffffff167fda6697b182650034bd205cdc2dbfabb06bdb3a0a83a2b45bfefa3c4881284e0b8284602001516040516111b1929190613ea3565b60405180910390a25050806111c590613eeb565b9050611014565b60408051608081018252600080825260208201819052918101829052606080820152906111f883612945565b91509150915091565b60005b81811015610a9e57600083838381811061122057611220613a4a565b90506020028101906112329190613ff8565b61123b9061402c565b9050600061125e60005473ffffffffffffffffffffffffffffffffffffffff1690565b825163ffffffff166000908152600f602090815260408083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff908116835260018201805496909116331496509394919390928401916112bb90613c4d565b80601f01602080910402602001604051908101604052809291908181526020018280546112e790613c4d565b80156113345780601f1061130957610100808354040283529160200191611334565b820191906000526020600020905b81548152906001019060200180831161131757829003601f168201915b5050505050815250509050811580156113645750805173ffffffffffffffffffffffffffffffffffffffff163314155b1561139b576040517fef67f5d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040808401516000908152601060205220600101541515806113f15783604001516040517f64e2ee920000000000000000000000000000000000000000000000000000000081526004016104a391815260200190565b6020840151158061143757508360200151601060008660400151815260200190815260200160002060010154141580156114375750602084015161143790600b9061266f565b1561146e576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606084015180516000036114b057806040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016104a391906140ff565b60408581015160009081526010602052208054640100000000900463ffffffff169060046114dd83613fd5565b82546101009290920a63ffffffff8181021990931691831602179091556040878101516000908152601060205290812054640100000000900490911691505b82518110156115e85761155283828151811061153a5761153a613a4a565b6020026020010151600361266f90919063ffffffff16565b61158a57826040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016104a391906140ff565b6115d783828151811061159f5761159f613a4a565b6020908102919091018101516040808b015160009081526010845281812063ffffffff80891683526003909101909452209161268a16565b506115e181613eeb565b905061151c565b5085516040808801805160009081526010602090815283822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff9096169590951790945581518082528382206002015581518152828120600190810154948b015192518252929020909101541461169d5761166c600b82612939565b50602080880180516040808b015160009081526010909452909220600101919091555161169b90600b9061268a565b505b60408781015188516020808b0151845193845263ffffffff909216908301528183015290517ff101cfc54994c31624d25789378d71ec4dbdc533e26a4ecc6b7648f4798d09169181900360600190a150505050505050806116fd90613eeb565b9050611204565b6040805180820190915260008152606060208201526000828152600f60209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff168352600181018054919284019161176190613c4d565b80601f016020809104026020016040519081016040528092919081815260200182805461178d90613c4d565b80156117da5780601f106117af576101008083540402835291602001916117da565b820191906000526020600020905b8154815290600101906020018083116117bd57829003601f168201915b5050505050815250509050919050565b60125460609063ffffffff16600060016118046007612696565b601254611817919063ffffffff16613fc2565b6118219190613fc2565b67ffffffffffffffff81111561183957611839613ab7565b60405190808252806020026020018201604052801561187f57816020015b6040805180820190915260008152606060208201528152602001906001900390816118575790505b509050600060015b8363ffffffff16811015610d29576118a060078261266f565b611998576000818152600f60209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff16835260018101805491928401916118ec90613c4d565b80601f016020809104026020016040519081016040528092919081815260200182805461191890613c4d565b80156119655780601f1061193a57610100808354040283529160200191611965565b820191906000526020600020905b81548152906001019060200180831161194857829003601f168201915b50505050508152505083838151811061198057611980613a4a565b60200260200101819052508161199590613eeb565b91505b6119a181613eeb565b9050611887565b6119b06125ec565b601254640100000000900463ffffffff16600081815260116020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001682179055611a0781600188888888886129ea565b60128054600490611a2590640100000000900463ffffffff16613fd5565b91906101000a81548163ffffffff021916908363ffffffff160217905550505050505050565b60005b81811015610a9e576000838383818110611a6a57611a6a613a4a565b9050602002810190611a7c9190613ff8565b611a859061402c565b90506000611aa860005473ffffffffffffffffffffffffffffffffffffffff1690565b825163ffffffff166000908152600f602090815260408083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff90811683526001820180549690911633149650939491939092840191611b0590613c4d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3190613c4d565b8015611b7e5780601f10611b5357610100808354040283529160200191611b7e565b820191906000526020600020905b815481529060010190602001808311611b6157829003601f168201915b505050505081525050905081158015611bae5750805173ffffffffffffffffffffffffffffffffffffffff163314155b15611be5576040517fef67f5d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408084015160009081526010602052206001015415158080611c0a57506040840151155b15611c495783604001516040517f64e2ee920000000000000000000000000000000000000000000000000000000081526004016104a391815260200190565b60208401511580611c6657506020840151611c6690600b9061266f565b15611c9d576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608401518051600003611cdf57806040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016104a391906140ff565b60408581015160009081526010602052208054600490611d0c90640100000000900463ffffffff16613fd5565b82546101009290920a63ffffffff81810219909316918316021790915560408681015160009081526010602052908120546401000000009004909116905b8251811015611dc657611d6883828151811061153a5761153a613a4a565b611da057826040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016104a391906140ff565b611db583828151811061159f5761159f613a4a565b50611dbf81613eeb565b9050611d4a565b5085516040808801805160009081526010602090815283822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff9687161790558251808352848320600201558a018051925182529290206001015551611e3891600b919061268a16565b506040860151611e4a90600d9061268a565b5060408681015187516020808a0151845193845263ffffffff909216908301528183015290517fc9296aa9b0951d8000e8ed7f2b5be30c5106de8df3dbedf9a57c93f5f9e4d7da9181900360600190a150505050505080611eaa90613eeb565b9050611a4e565b60015473ffffffffffffffffffffffffffffffffffffffff163314611f32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016104a3565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b604080516080808201835260008083526020808401829052838501829052606084018290528582526002808252918590208551938401865280548452600180820154928501929092529182015493949293919284019160ff169081111561201757612017613794565b600181111561202857612028613794565b815260029190910154610100900473ffffffffffffffffffffffffffffffffffffffff1660209091015292915050565b6120606125ec565b61206b60038261266f565b6120a4576040517fe181733f000000000000000000000000000000000000000000000000000000008152600481018290526024016104a3565b6120af60058261266f565b156120e9576040517ff7d7a294000000000000000000000000000000000000000000000000000000008152600481018290526024016104a3565b6120f460058261268a565b5060405181907fdcea1b78b6ddc31592a94607d537543fcaafda6cc52d6d5cc7bbfca1422baf2190600090a250565b63ffffffff8083166000908152601160209081526040808320805464010000000090049094168084526001909401825280832085845260030190915290208054606092919061217190613c4d565b80601f016020809104026020016040519081016040528092919081815260200182805461219d90613c4d565b80156121ea5780601f106121bf576101008083540402835291602001916121ea565b820191906000526020600020905b8154815290600101906020018083116121cd57829003601f168201915b505050505091505092915050565b6122006125ec565b63ffffffff808716600090815260116020526040812054640100000000900490911690819003612264576040517f2b62be9b00000000000000000000000000000000000000000000000000000000815263ffffffff881660048201526024016104a3565b61227e8761227183613fd5565b92508288888888886129ea565b50505050505050565b606060006122956003612e76565b905060006122a36005612696565b82516122af9190613fc2565b67ffffffffffffffff8111156122c7576122c7613ab7565b60405190808252806020026020018201604052801561233757816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816122e55790505b5090506000805b8351811015610d2957600084828151811061235b5761235b613a4a565b6020026020010151905061237981600561266f90919063ffffffff16565b61243c576002600082815260200190815260200160002060405180608001604052908160008201548152602001600182015481526020016002820160009054906101000a900460ff1660018111156123d3576123d3613794565b60018111156123e4576123e4613794565b815260029190910154610100900473ffffffffffffffffffffffffffffffffffffffff16602090910152845185908590811061242257612422613a4a565b6020026020010181905250828061243890613eeb565b9350505b5061244681613eeb565b905061233e565b606080600061245c600d612e76565b90506000815167ffffffffffffffff81111561247a5761247a613ab7565b6040519080825280602002602001820160405280156124e957816020015b60408051608081018252600080825260208083018290529282015260608082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124985790505b5090506000825167ffffffffffffffff81111561250857612508613ab7565b604051908082528060200260200182016040528015612531578160200160208202803683370190505b50905060005b83518110156125cd57600084828151811061255457612554613a4a565b6020026020010151905060008061256a83612945565b915091508186858151811061258157612581613a4a565b60200260200101819052508085858151811061259f5761259f613a4a565b602002602001019063ffffffff16908163ffffffff1681525050505050806125c690613eeb565b9050612537565b509094909350915050565b6125e06125ec565b6125e981612e83565b50565b60005473ffffffffffffffffffffffffffffffffffffffff16331461266d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016104a3565b565b600081815260018301602052604081205415155b9392505050565b60006126838383612f78565b60006109cd825490565b6040805160a081018252600080825260208083018290528284018290526060808401819052608084015263ffffffff85811683526011825284832080546401000000009004909116808452600190910182528483206002810180548751818602810186019098528088529596929591949390919083018282801561274357602002820191906000526020600020905b81548152602001906001019080831161272f575b505050505090506000815167ffffffffffffffff81111561276657612766613ab7565b6040519080825280602002602001820160405280156127ac57816020015b6040805180820190915260008152606060208201528152602001906001900390816127845790505b50905060005b81518110156128cd5760405180604001604052808483815181106127d8576127d8613a4a565b602002602001015181526020018560030160008685815181106127fd576127fd613a4a565b60200260200101518152602001908152602001600020805461281e90613c4d565b80601f016020809104026020016040519081016040528092919081815260200182805461284a90613c4d565b80156128975780601f1061286c57610100808354040283529160200191612897565b820191906000526020600020905b81548152906001019060200180831161287a57829003601f168201915b50505050508152508282815181106128b1576128b1613a4a565b6020026020010181905250806128c690613eeb565b90506127b2565b506040805160a08101825263ffffffff888116600081815260116020818152868320548086168752948b168187015292909152905268010000000000000000900460ff161515918101919091526060810161292785612e76565b81526020019190915295945050505050565b60006126838383612fc7565b604080516080810182526000808252602082018190529181019190915260608082015260408051608081018252600084815260106020908152838220805463ffffffff8082168652600183015484870152600283015486880152640100000000909104168352600301905291822060608201906129c190612e76565b905260009384526010602052604090932054929364010000000090930463ffffffff1692915050565b63ffffffff8088166000908152601160209081526040808320938a16835260019093019052908120905b85811015612ad857612a41878783818110612a3157612a31613a4a565b859260209091020135905061266f565b15612aa25788878783818110612a5957612a59613a4a565b6040517f636e405700000000000000000000000000000000000000000000000000000000815263ffffffff909416600485015260200291909101356024830152506044016104a3565b612ac7878783818110612ab757612ab7613a4a565b859260209091020135905061268a565b50612ad181613eeb565b9050612a14565b5060005b83811015612db75736858583818110612af757612af7613a4a565b9050602002810190612b099190613a79565b9050612b176003823561266f565b612b50576040517fe181733f000000000000000000000000000000000000000000000000000000008152813560048201526024016104a3565b612b5c6005823561266f565b15612b96576040517ff7d7a294000000000000000000000000000000000000000000000000000000008152813560048201526024016104a3565b8035600090815260038401602052604081208054612bb390613c4d565b90501115612bfc576040517f3927d08000000000000000000000000000000000000000000000000000000000815263ffffffff8b166004820152813560248201526044016104a3565b60005b87811015612d0e57612ca38235601060008c8c86818110612c2257612c22613a4a565b9050602002013581526020019081526020016000206003016000601060008e8e88818110612c5257612c52613a4a565b90506020020135815260200190815260200160002060000160049054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200190815260200160002061266f90919063ffffffff16565b612cfe57888882818110612cb957612cb9613a4a565b6040517fa7e7925000000000000000000000000000000000000000000000000000000000815260209091029290920135600483015250823560248201526044016104a3565b612d0781613eeb565b9050612bff565b5060028301805460018101825560009182526020918290208335910155612d3790820182614137565b82356000908152600386016020526040902091612d5591908361419c565b50612da68a8a83358b8b612d6c6020880188614137565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506130ba92505050565b50612db081613eeb565b9050612adc565b5063ffffffff88811660008181526011602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffff1668010000000000000000881515027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff1617640100000000958d1695860217905581519283528201929092527ff264aae70bf6a9d90e68e0f9b393f4e7fbea67b063b0f336e0b36c1581703651910160405180910390a15050505050505050565b6060600061268383613199565b3373ffffffffffffffffffffffffffffffffffffffff821603612f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016104a3565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000818152600183016020526040812054612fbf575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556109cd565b5060006109cd565b600081815260018301602052604081205480156130b0576000612feb600183613fc2565b8554909150600090612fff90600190613fc2565b905081811461306457600086600001828154811061301f5761301f613a4a565b906000526020600020015490508087600001848154811061304257613042613a4a565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613075576130756142b7565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506109cd565b60009150506109cd565b60008481526002602081905260409091200154610100900473ffffffffffffffffffffffffffffffffffffffff161561076d57600084815260026020819052604091829020015490517ffba64a7c00000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063fba64a7c9061315f908690869086908b908d906004016142e6565b600060405180830381600087803b15801561317957600080fd5b505af115801561318d573d6000803e3d6000fd5b50505050505050505050565b6060816000018054806020026020016040519081016040528092919081815260200182805480156131e957602002820191906000526020600020905b8154815260200190600101908083116131d5575b50505050509050919050565b50805461320190613c4d565b6000825580601f10613211575050565b601f0160209004906000526020600020908101906125e991905b8082111561323f576000815560010161322b565b5090565b60008083601f84011261325557600080fd5b50813567ffffffffffffffff81111561326d57600080fd5b6020830191508360208260051b850101111561328857600080fd5b9250929050565b600080600080604085870312156132a557600080fd5b843567ffffffffffffffff808211156132bd57600080fd5b6132c988838901613243565b909650945060208701359150808211156132e257600080fd5b506132ef87828801613243565b95989497509550505050565b60006080828403121561330d57600080fd5b50919050565b60006020828403121561332557600080fd5b5035919050565b6000815180845260005b8181101561335257602081850181015186830182015201613336565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000612683602083018461332c565b600080602083850312156133b657600080fd5b823567ffffffffffffffff8111156133cd57600080fd5b6133d985828601613243565b90969095509350505050565b600081518084526020808501945080840160005b83811015613415578151875295820195908201906001016133f9565b509495945050505050565b600063ffffffff8083511684526020818185015116818601526040915081840151151582860152606084015160a0606087015261346060a08701826133e5565b9050608085015186820360808801528181518084528484019150848160051b850101858401935060005b828110156134e7578582037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00184528451805183528701518783018990526134d48984018261332c565b958801959488019492505060010161348a565b509998505050505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613568577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452613556858351613420565b9450928501929085019060010161351c565b5092979650505050505050565b803563ffffffff8116811461358957600080fd5b919050565b6000602082840312156135a057600080fd5b61268382613575565b6020815260006126836020830184613420565b600080604083850312156135cf57600080fd5b50508035926020909101359150565b63ffffffff81511682526020810151602083015260408101516040830152600060608201516080606085015261361760808501826133e5565b949350505050565b60408152600061363260408301856135de565b905063ffffffff831660208301529392505050565b73ffffffffffffffffffffffffffffffffffffffff81511682526000602082015160406020850152613617604085018261332c565b6020815260006126836020830184613647565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613568577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526136f0858351613647565b945092850192908501906001016136b6565b80151581146125e957600080fd5b60008060008060006060868803121561372857600080fd5b853567ffffffffffffffff8082111561374057600080fd5b61374c89838a01613243565b9097509550602088013591508082111561376557600080fd5b5061377288828901613243565b909450925050604086013561378681613702565b809150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b805182526020810151602083015260408101516002811061380d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b604083015260609081015173ffffffffffffffffffffffffffffffffffffffff16910152565b608081016109cd82846137c3565b6000806040838503121561385457600080fd5b61385d83613575565b946020939093013593505050565b6000806000806000806080878903121561388457600080fd5b61388d87613575565b9550602087013567ffffffffffffffff808211156138aa57600080fd5b6138b68a838b01613243565b909750955060408901359150808211156138cf57600080fd5b506138dc89828a01613243565b90945092505060608701356138f081613702565b809150509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156139405761392d8385516137c3565b928401926080929092019160010161391a565b50909695505050505050565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b838110156139c1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08887030185526139af8683516135de565b95509382019390820190600101613975565b50508584038187015286518085528782019482019350915060005b828110156139fe57845163ffffffff16845293810193928101926001016139dc565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146125e957600080fd5b600060208284031215613a3f57600080fd5b813561268381613a0b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613aad57600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715613b0957613b09613ab7565b60405290565b6040516080810167ffffffffffffffff81118282101715613b0957613b09613ab7565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613b7957613b79613ab7565b604052919050565b600060408236031215613b9357600080fd5b613b9b613ae6565b8235613ba681613a0b565b815260208381013567ffffffffffffffff80821115613bc457600080fd5b9085019036601f830112613bd757600080fd5b813581811115613be957613be9613ab7565b613c19847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613b32565b91508082523684828501011115613c2f57600080fd5b80848401858401376000908201840152918301919091525092915050565b600181811c90821680613c6157607f821691505b60208210810361330d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000602080835260008454613cae81613c4d565b80848701526040600180841660008114613ccf5760018114613d0757613d35565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838a01528284151560051b8a01019550613d35565b896000528660002060005b85811015613d2d5781548b8201860152908301908801613d12565b8a0184019650505b509398975050505050505050565b601f821115610a9e57600081815260208120601f850160051c81016020861015613d6a5750805b601f850160051c820191505b8181101561076d57828155600101613d76565b815167ffffffffffffffff811115613da357613da3613ab7565b613db781613db18454613c4d565b84613d43565b602080601f831160018114613e0a5760008415613dd45750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561076d565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613e5757888601518255948401946001909101908401613e38565b5085821015613e9357878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b828152604060208201526000613617604083018461332c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f1c57613f1c613ebc565b5060010190565b600060208284031215613f3557600080fd5b815161268381613702565b813581556020820135600182015560028101604083013560028110613f6457600080fd5b81546060850135613f7481613a0b565b74ffffffffffffffffffffffffffffffffffffffff008160081b1660ff84167fffffffffffffffffffffff000000000000000000000000000000000000000000841617178455505050505050565b818103818111156109cd576109cd613ebc565b600063ffffffff808316818103613fee57613fee613ebc565b6001019392505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112613aad57600080fd5b60006080823603121561403e57600080fd5b614046613b0f565b61404f83613575565b81526020808401358183015260408401356040830152606084013567ffffffffffffffff8082111561408057600080fd5b9085019036601f83011261409357600080fd5b8135818111156140a5576140a5613ab7565b8060051b91506140b6848301613b32565b81815291830184019184810190368411156140d057600080fd5b938501935b838510156140ee578435825293850193908501906140d5565b606087015250939695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156139405783518352928401929184019160010161411b565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261416c57600080fd5b83018035915067ffffffffffffffff82111561418757600080fd5b60200191503681900382131561328857600080fd5b67ffffffffffffffff8311156141b4576141b4613ab7565b6141c8836141c28354613c4d565b83613d43565b6000601f84116001811461421a57600085156141e45750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556142b0565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156142695786850135825560209485019460019092019101614249565b50868210156142a4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6080815284608082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561431f57600080fd5b8560051b808860a0850137820182810360a090810160208501526143459082018761332c565b91505063ffffffff8085166040840152808416606084015250969550505050505056fea164736f6c6343000813000a", + ABI: "[{\"inputs\":[],\"name\":\"AccessForbidden\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CapabilityAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityIsDeprecated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"DONDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"DuplicateDONCapability\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"DuplicateDONNode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"proposedConfigurationContract\",\"type\":\"address\"}],\"name\":\"InvalidCapabilityConfigurationContractInterface\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"f\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"nodeCount\",\"type\":\"uint256\"}],\"name\":\"InvalidFaultTolerance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"name\":\"InvalidNodeCapabilities\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidNodeOperatorAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"InvalidNodeP2PId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidNodeSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"lengthOne\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lengthTwo\",\"type\":\"uint256\"}],\"name\":\"LengthMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"NodeDoesNotSupportCapability\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityDeprecated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"}],\"name\":\"NodeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NodeOperatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"}],\"name\":\"NodeOperatorRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NodeOperatorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"NodeRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"}],\"name\":\"NodeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"labelledName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"enumCapabilityRegistry.CapabilityType\",\"name\":\"capabilityType\",\"type\":\"uint8\"},{\"internalType\":\"enumCapabilityRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"}],\"internalType\":\"structCapabilityRegistry.Capability\",\"name\":\"capability\",\"type\":\"tuple\"}],\"name\":\"addCapability\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"nodes\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilityRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"acceptsWorkflows\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"f\",\"type\":\"uint32\"}],\"name\":\"addDON\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilityRegistry.NodeOperator[]\",\"name\":\"nodeOperators\",\"type\":\"tuple[]\"}],\"name\":\"addNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"internalType\":\"structCapabilityRegistry.NodeInfo[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"}],\"name\":\"addNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"deprecateCapability\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCapabilities\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"labelledName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"enumCapabilityRegistry.CapabilityType\",\"name\":\"capabilityType\",\"type\":\"uint8\"},{\"internalType\":\"enumCapabilityRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"}],\"internalType\":\"structCapabilityRegistry.Capability[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedId\",\"type\":\"bytes32\"}],\"name\":\"getCapability\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"labelledName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"enumCapabilityRegistry.CapabilityType\",\"name\":\"capabilityType\",\"type\":\"uint8\"},{\"internalType\":\"enumCapabilityRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"}],\"internalType\":\"structCapabilityRegistry.Capability\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"getDON\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"f\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"acceptsWorkflows\",\"type\":\"bool\"},{\"internalType\":\"bytes32[]\",\"name\":\"nodeP2PIds\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilityRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"}],\"internalType\":\"structCapabilityRegistry.DONInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"getDONCapabilityConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDONs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"f\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"acceptsWorkflows\",\"type\":\"bool\"},{\"internalType\":\"bytes32[]\",\"name\":\"nodeP2PIds\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilityRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"}],\"internalType\":\"structCapabilityRegistry.DONInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"labelledName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"name\":\"getHashedCapabilityId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"getNode\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"internalType\":\"structCapabilityRegistry.NodeInfo\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"}],\"name\":\"getNodeOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilityRegistry.NodeOperator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodeOperators\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilityRegistry.NodeOperator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodes\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"internalType\":\"structCapabilityRegistry.NodeInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"internalType\":\"uint32[]\",\"name\":\"\",\"type\":\"uint32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"isCapabilityDeprecated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"donIds\",\"type\":\"uint32[]\"}],\"name\":\"removeDONs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"nodeOperatorIds\",\"type\":\"uint256[]\"}],\"name\":\"removeNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"removedNodeP2PIds\",\"type\":\"bytes32[]\"}],\"name\":\"removeNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[]\",\"name\":\"nodes\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilityRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"acceptsWorkflows\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"f\",\"type\":\"uint32\"}],\"name\":\"updateDON\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"nodeOperatorIds\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilityRegistry.NodeOperator[]\",\"name\":\"nodeOperators\",\"type\":\"tuple[]\"}],\"name\":\"updateNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"internalType\":\"structCapabilityRegistry.NodeInfo[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"}],\"name\":\"updateNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x6080604052601280546001600160401b0319166401000000011790553480156200002857600080fd5b503380600081620000805760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000b357620000b381620000bc565b50505062000167565b336001600160a01b03821603620001165760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000077565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b614bef80620001776000396000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80635e65e309116100ee57806395864d1f11610097578063b06e07a711610071578063b06e07a7146103ec578063ddbe4f82146103ff578063e29581aa14610414578063f2fde38b1461042a57600080fd5b806395864d1f146103a65780639cb7c5f4146103b9578063ae3c241c146103d957600080fd5b806373ac22b4116100c857806373ac22b41461036357806379ba5097146103765780638da5cb5b1461037e57600080fd5b80635e65e3091461031b57806365c14dc71461032e57806366acaa331461034e57600080fd5b80631cdf63431161015b578063235374051161013557806323537405146102b45780632c01a1e8146102d4578063398f3773146102e757806350c946fe146102fa57600080fd5b80631cdf6343146102795780631d05394c1461028c578063214502431461029f57600080fd5b8063178962481161018c5780631789624814610211578063181f5a7714610224578063193ec0061461026657600080fd5b80630c5801e3146101b35780630fe5800a146101c857806312570011146101ee575b600080fd5b6101c66101c1366004613755565b61043d565b005b6101db6101d6366004613803565b61074e565b6040519081526020015b60405180910390f35b6102016101fc366004613863565b610787565b60405190151581526020016101e5565b6101c661021f36600461387c565b61079a565b60408051808201909152601881527f4361706162696c697479526567697374727920312e302e30000000000000000060208201525b6040516101e5919061391b565b6101c6610274366004613955565b6109d6565b6101c66102873660046139fa565b610ab1565b6101c661029a3660046139fa565b610b81565b6102a7610cc1565b6040516101e59190613b64565b6102c76102c2366004613be4565b610e21565b6040516101e59190613bff565b6101c66102e23660046139fa565b610e65565b6101c66102f53660046139fa565b611109565b61030d610308366004613863565b6112cc565b6040516101e5929190613c53565b6101c66103293660046139fa565b611301565b61034161033c366004613863565b611804565b6040516101e59190613cb0565b6103566118ea565b6040516101e59190613cc3565b6101c66103713660046139fa565b611aa8565b6101c6611f0e565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e5565b6101c66103b4366004613d36565b61200b565b6103cc6103c7366004613863565b6120d7565b6040516101e59190613ea7565b6101c66103e7366004613863565b6122dc565b6102596103fa366004613eba565b6123a7565b61040761247c565b6040516101e59190613ee4565b61041c612771565b6040516101e5929190613f57565b6101c6610438366004614038565b6128fc565b828114610485576040517fab8b67c600000000000000000000000000000000000000000000000000000000815260048101849052602481018290526044015b60405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff16905b848110156107465760008686838181106104bd576104bd614055565b90506020020135905060008585848181106104da576104da614055565b90506020028101906104ec9190614084565b6104f59061418c565b805190915073ffffffffffffffffffffffffffffffffffffffff16610546576040517feeacd93900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805173ffffffffffffffffffffffffffffffffffffffff16331480159061058357503373ffffffffffffffffffffffffffffffffffffffff851614155b156105ba576040517fef67f5d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516000838152600f602052604090205473ffffffffffffffffffffffffffffffffffffffff908116911614158061066c5750602080820151604051610600920161391b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000868152600f83529290922091926106539260010191016142ab565b6040516020818303038152906040528051906020012014155b156107335780516000838152600f6020908152604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921782558201516001909101906106d9908261439a565b50806000015173ffffffffffffffffffffffffffffffffffffffff167f14c8f513e8a6d86d2d16b0cb64976de4e72386c4f8068eca3b7354373f8fe97a83836020015160405161072a9291906144b4565b60405180910390a25b50508061073f906144fc565b90506104a1565b505050505050565b600084848484604051602001610767949392919061457d565b604051602081830303815290604052805190602001209050949350505050565b6000610794600583612910565b92915050565b6107a261292b565b60006107be6107b183806145af565b6101d660208601866145af565b90506107cb600382612910565b15610802576040517fe288638f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061081460a0840160808501614038565b73ffffffffffffffffffffffffffffffffffffffff161461097f5761083f60a0830160808401614038565b73ffffffffffffffffffffffffffffffffffffffff163b158061091f575061086d60a0830160808401614038565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f73e8b41d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff91909116906301ffc9a790602401602060405180830381865afa1580156108f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091d9190614614565b155b1561097f5761093460a0830160808401614038565b6040517fabb5e3fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240161047c565b61098a6003826129ae565b50600081815260026020526040902082906109a58282614801565b505060405181907f65610e5677eedff94555572640e442f89848a109ef8593fa927ac30b2565ff0690600090a25050565b6109de61292b565b60125463ffffffff640100000000909104811660008181526011602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001684179055815160a081018352838152600191810191909152861515918101919091528415156060820152918316608083015290610a6b9089908990899089906129ba565b60128054600490610a8990640100000000900463ffffffff166149c4565b91906101000a81548163ffffffff021916908363ffffffff1602179055505050505050505050565b610ab961292b565b60005b81811015610b7c576000838383818110610ad857610ad8614055565b602090810292909201356000818152600f9093526040832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155909350919050610b2960018301826136bb565b50610b3790506007826129ae565b506040518181527f1e5877d7b3001d1569bf733b76c7eceda58bd6c031e5b8d0b7042308ba2e9d4f9060200160405180910390a150610b75816144fc565b9050610abc565b505050565b610b8961292b565b60005b81811015610b7c576000838383818110610ba857610ba8614055565b9050602002016020810190610bbd9190613be4565b63ffffffff808216600090815260116020526040812080549394509264010000000090049091169003610c24576040517f2b62be9b00000000000000000000000000000000000000000000000000000000815263ffffffff8316600482015260240161047c565b63ffffffff808316600081815260116020526040902080547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169055610c6e91600991906129ae16565b506040805163ffffffff84168152600060208201527ff264aae70bf6a9d90e68e0f9b393f4e7fbea67b063b0f336e0b36c1581703651910160405180910390a1505080610cba906144fc565b9050610b8c565b601254606090640100000000900463ffffffff1660006001610ce36009612f9c565b601254610cfe9190640100000000900463ffffffff166149e7565b610d0891906149e7565b67ffffffffffffffff811115610d2057610d206140c2565b604051908082528060200260200182016040528015610da757816020015b6040805160e081018252600080825260208083018290529282018190526060808301829052608083019190915260a0820181905260c082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610d3e5790505b509050600060015b838163ffffffff161015610e1857610dd1600963ffffffff8084169061291016565b610e0857610dde81612fa6565b838381518110610df057610df0614055565b602002602001018190525081610e05906144fc565b91505b610e11816149c4565b9050610daf565b50909392505050565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c081019190915261079482612fa6565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b82811015611103576000848483818110610e9f57610e9f614055565b602090810292909201356000818152601090935260409092206001015491925050151580610efc576040517f64e2ee920000000000000000000000000000000000000000000000000000000081526004810183905260240161047c565b60008281526010602090815260408083205463ffffffff168352600f82528083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff1682526001810180549293919291840191610f5690614258565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8290614258565b8015610fcf5780601f10610fa457610100808354040283529160200191610fcf565b820191906000526020600020905b815481529060010190602001808311610fb257829003601f168201915b505050505081525050905084158015610fff5750805173ffffffffffffffffffffffffffffffffffffffff163314155b15611036576040517fef67f5d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526010602052604090206001015461105490600b90613282565b5060008381526010602052604090206002015461107390600d90613282565b5060008381526010602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001681556001810183905560020191909155517f5254e609a97bab37b7cc79fe128f85c097bd6015c6e1624ae0ba392eb9753205906110e79085815260200190565b60405180910390a1505050806110fc906144fc565b9050610e83565b50505050565b61111161292b565b60005b81811015610b7c57600083838381811061113057611130614055565b90506020028101906111429190614084565b61114b9061418c565b805190915073ffffffffffffffffffffffffffffffffffffffff1661119c576040517feeacd93900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601254604080518082018252835173ffffffffffffffffffffffffffffffffffffffff908116825260208086015181840190815263ffffffff9095166000818152600f909252939020825181547fffffffffffffffffffffffff00000000000000000000000000000000000000001692169190911781559251919290916001820190611228908261439a565b5050601280549091506000906112439063ffffffff166149c4565b91906101000a81548163ffffffff021916908363ffffffff160217905550816000015173ffffffffffffffffffffffffffffffffffffffff167fda6697b182650034bd205cdc2dbfabb06bdb3a0a83a2b45bfefa3c4881284e0b8284602001516040516112b19291906144b4565b60405180910390a25050806112c5906144fc565b9050611114565b60408051608081018252600080825260208201819052918101829052606080820152906112f88361328e565b91509150915091565b60005b81811015610b7c57600083838381811061132057611320614055565b905060200281019061133291906149fa565b61133b90614a2e565b9050600061135e60005473ffffffffffffffffffffffffffffffffffffffff1690565b825163ffffffff166000908152600f602090815260408083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff908116835260018201805496909116331496509394919390928401916113bb90614258565b80601f01602080910402602001604051908101604052809291908181526020018280546113e790614258565b80156114345780601f1061140957610100808354040283529160200191611434565b820191906000526020600020905b81548152906001019060200180831161141757829003601f168201915b5050505050815250509050811580156114645750805173ffffffffffffffffffffffffffffffffffffffff163314155b1561149b576040517fef67f5d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040808401516000908152601060205220600101541515806114f15783604001516040517f64e2ee9200000000000000000000000000000000000000000000000000000000815260040161047c91815260200190565b6020840151158061153757508360200151601060008660400151815260200190815260200160002060010154141580156115375750602084015161153790600b90612910565b1561156e576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606084015180516000036115b057806040517f3748d4c600000000000000000000000000000000000000000000000000000000815260040161047c9190614b01565b60408581015160009081526010602052208054640100000000900463ffffffff169060046115dd836149c4565b82546101009290920a63ffffffff8181021990931691831602179091556040878101516000908152601060205290812054640100000000900490911691505b82518110156116e85761165283828151811061163a5761163a614055565b6020026020010151600361291090919063ffffffff16565b61168a57826040517f3748d4c600000000000000000000000000000000000000000000000000000000815260040161047c9190614b01565b6116d783828151811061169f5761169f614055565b6020908102919091018101516040808b015160009081526010845281812063ffffffff8089168352600390910190945220916129ae16565b506116e1816144fc565b905061161c565b5085516040808801805160009081526010602090815283822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff9096169590951790945581518082528382206002015581518152828120600190810154948b015192518252929020909101541461179d5761176c600b82613282565b50602080880180516040808b015160009081526010909452909220600101919091555161179b90600b906129ae565b505b60408781015188516020808b0151845193845263ffffffff909216908301528183015290517ff101cfc54994c31624d25789378d71ec4dbdc533e26a4ecc6b7648f4798d09169181900360600190a150505050505050806117fd906144fc565b9050611304565b6040805180820190915260008152606060208201526000828152600f60209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff168352600181018054919284019161186190614258565b80601f016020809104026020016040519081016040528092919081815260200182805461188d90614258565b80156118da5780601f106118af576101008083540402835291602001916118da565b820191906000526020600020905b8154815290600101906020018083116118bd57829003601f168201915b5050505050815250509050919050565b60125460609063ffffffff16600060016119046007612f9c565b601254611917919063ffffffff166149e7565b61192191906149e7565b67ffffffffffffffff811115611939576119396140c2565b60405190808252806020026020018201604052801561197f57816020015b6040805180820190915260008152606060208201528152602001906001900390816119575790505b509050600060015b8363ffffffff16811015610e18576119a0600782612910565b611a98576000818152600f60209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff16835260018101805491928401916119ec90614258565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1890614258565b8015611a655780601f10611a3a57610100808354040283529160200191611a65565b820191906000526020600020905b815481529060010190602001808311611a4857829003601f168201915b505050505081525050838381518110611a8057611a80614055565b602002602001018190525081611a95906144fc565b91505b611aa1816144fc565b9050611987565b60005b81811015610b7c576000838383818110611ac757611ac7614055565b9050602002810190611ad991906149fa565b611ae290614a2e565b90506000611b0560005473ffffffffffffffffffffffffffffffffffffffff1690565b825163ffffffff166000908152600f602090815260408083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff90811683526001820180549690911633149650939491939092840191611b6290614258565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8e90614258565b8015611bdb5780601f10611bb057610100808354040283529160200191611bdb565b820191906000526020600020905b815481529060010190602001808311611bbe57829003601f168201915b505050505081525050905081158015611c0b5750805173ffffffffffffffffffffffffffffffffffffffff163314155b15611c42576040517fef67f5d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408084015160009081526010602052206001015415158080611c6757506040840151155b15611ca65783604001516040517f64e2ee9200000000000000000000000000000000000000000000000000000000815260040161047c91815260200190565b60208401511580611cc357506020840151611cc390600b90612910565b15611cfa576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608401518051600003611d3c57806040517f3748d4c600000000000000000000000000000000000000000000000000000000815260040161047c9190614b01565b60408581015160009081526010602052208054600490611d6990640100000000900463ffffffff166149c4565b82546101009290920a63ffffffff81810219909316918316021790915560408681015160009081526010602052908120546401000000009004909116905b8251811015611e2357611dc583828151811061163a5761163a614055565b611dfd57826040517f3748d4c600000000000000000000000000000000000000000000000000000000815260040161047c9190614b01565b611e1283828151811061169f5761169f614055565b50611e1c816144fc565b9050611da7565b5085516040808801805160009081526010602090815283822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff9687161790558251808352848320600201558a018051925182529290206001015551611e9591600b91906129ae16565b506040860151611ea790600d906129ae565b5060408681015187516020808a0151845193845263ffffffff909216908301528183015290517fc9296aa9b0951d8000e8ed7f2b5be30c5106de8df3dbedf9a57c93f5f9e4d7da9181900360600190a150505050505080611f07906144fc565b9050611aab565b60015473ffffffffffffffffffffffffffffffffffffffff163314611f8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161047c565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b61201361292b565b63ffffffff808916600090815260116020526040812054640100000000900490911690819003612077576040517f2b62be9b00000000000000000000000000000000000000000000000000000000815263ffffffff8a16600482015260240161047c565b6120cc888888886040518060a001604052808f63ffffffff1681526020018761209f906149c4565b97508763ffffffff1681526020018a1515815260200189151581526020018863ffffffff168152506129ba565b505050505050505050565b6121076040805160a081018252606080825260208201529081016000815260200160008152600060209091015290565b60008281526002602052604090819020815160a0810190925280548290829061212f90614258565b80601f016020809104026020016040519081016040528092919081815260200182805461215b90614258565b80156121a85780601f1061217d576101008083540402835291602001916121a8565b820191906000526020600020905b81548152906001019060200180831161218b57829003601f168201915b505050505081526020016001820180546121c190614258565b80601f01602080910402602001604051908101604052809291908181526020018280546121ed90614258565b801561223a5780601f1061220f5761010080835404028352916020019161223a565b820191906000526020600020905b81548152906001019060200180831161221d57829003601f168201915b5050509183525050600282015460209091019060ff16600381111561226157612261613deb565b600381111561227257612272613deb565b81526020016002820160019054906101000a900460ff16600181111561229a5761229a613deb565b60018111156122ab576122ab613deb565b81526002919091015462010000900473ffffffffffffffffffffffffffffffffffffffff1660209091015292915050565b6122e461292b565b6122ef600382612910565b612328576040517fe181733f0000000000000000000000000000000000000000000000000000000081526004810182905260240161047c565b612333600582612910565b1561236d576040517ff7d7a2940000000000000000000000000000000000000000000000000000000081526004810182905260240161047c565b6123786005826129ae565b5060405181907fdcea1b78b6ddc31592a94607d537543fcaafda6cc52d6d5cc7bbfca1422baf2190600090a250565b63ffffffff808316600090815260116020908152604080832080546401000000009004909416808452600190940182528083208584526003019091529020805460609291906123f590614258565b80601f016020809104026020016040519081016040528092919081815260200182805461242190614258565b801561246e5780601f106124435761010080835404028352916020019161246e565b820191906000526020600020905b81548152906001019060200180831161245157829003601f168201915b505050505091505092915050565b6060600061248a6003613333565b905060006124986005612f9c565b82516124a491906149e7565b67ffffffffffffffff8111156124bc576124bc6140c2565b60405190808252806020026020018201604052801561251d57816020015b61250a6040805160a081018252606080825260208201529081016000815260200160008152600060209091015290565b8152602001906001900390816124da5790505b5090506000805b8351811015610e1857600084828151811061254157612541614055565b6020026020010151905061255f81600561291090919063ffffffff16565b6127605760008181526002602052604090819020815160a0810190925280548290829061258b90614258565b80601f01602080910402602001604051908101604052809291908181526020018280546125b790614258565b80156126045780601f106125d957610100808354040283529160200191612604565b820191906000526020600020905b8154815290600101906020018083116125e757829003601f168201915b5050505050815260200160018201805461261d90614258565b80601f016020809104026020016040519081016040528092919081815260200182805461264990614258565b80156126965780601f1061266b57610100808354040283529160200191612696565b820191906000526020600020905b81548152906001019060200180831161267957829003601f168201915b5050509183525050600282015460209091019060ff1660038111156126bd576126bd613deb565b60038111156126ce576126ce613deb565b81526020016002820160019054906101000a900460ff1660018111156126f6576126f6613deb565b600181111561270757612707613deb565b81526002919091015462010000900473ffffffffffffffffffffffffffffffffffffffff16602090910152845185908590811061274657612746614055565b6020026020010181905250828061275c906144fc565b9350505b5061276a816144fc565b9050612524565b6060806000612780600d613333565b90506000815167ffffffffffffffff81111561279e5761279e6140c2565b60405190808252806020026020018201604052801561280d57816020015b60408051608081018252600080825260208083018290529282015260608082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816127bc5790505b5090506000825167ffffffffffffffff81111561282c5761282c6140c2565b604051908082528060200260200182016040528015612855578160200160208202803683370190505b50905060005b83518110156128f157600084828151811061287857612878614055565b6020026020010151905060008061288e8361328e565b91509150818685815181106128a5576128a5614055565b6020026020010181905250808585815181106128c3576128c3614055565b602002602001019063ffffffff16908163ffffffff1681525050505050806128ea906144fc565b905061285b565b509094909350915050565b61290461292b565b61290d81613340565b50565b600081815260018301602052604081205415155b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146129ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161047c565b565b60006129248383613435565b805163ffffffff90811660009081526011602090815260408083208286015185168452600101909152902060808301519091161580612a0e575060808201518590612a06906001614b14565b63ffffffff16115b15612a5a5760808201516040517fd5f5269100000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024810186905260440161047c565b60005b85811015612b2257612a8a878783818110612a7a57612a7a614055565b8592602090910201359050612910565b15612aec578251878783818110612aa357612aa3614055565b6040517f636e405700000000000000000000000000000000000000000000000000000000815263ffffffff9094166004850152602002919091013560248301525060440161047c565b612b11878783818110612b0157612b01614055565b85926020909102013590506129ae565b50612b1b816144fc565b9050612a5d565b5060005b83811015612e0e5736858583818110612b4157612b41614055565b9050602002810190612b539190614084565b9050612b6160038235612910565b612b9a576040517fe181733f0000000000000000000000000000000000000000000000000000000081528135600482015260240161047c565b612ba660058235612910565b15612be0576040517ff7d7a2940000000000000000000000000000000000000000000000000000000081528135600482015260240161047c565b8035600090815260038401602052604081208054612bfd90614258565b90501115612c495783516040517f3927d08000000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201528135602482015260440161047c565b60005b87811015612d5b57612cf08235601060008c8c86818110612c6f57612c6f614055565b9050602002013581526020019081526020016000206003016000601060008e8e88818110612c9f57612c9f614055565b90506020020135815260200190815260200160002060000160049054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200190815260200160002061291090919063ffffffff16565b612d4b57888882818110612d0657612d06614055565b6040517fa7e79250000000000000000000000000000000000000000000000000000000008152602090910292909201356004830152508235602482015260440161047c565b612d54816144fc565b9050612c4c565b5060028301805460018101825560009182526020918290208335910155612d84908201826145af565b82356000908152600386016020526040902091612da2919083614631565b508351602080860151612dfd92918435908c908c90612dc3908801886145af565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348492505050565b50612e07816144fc565b9050612b26565b50604080830151835163ffffffff90811660009081526011602090815284822080549415156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff90951694909417909355606086015186518316825284822080549115156d0100000000000000000000000000027fffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffff9092169190911790556080860151865183168252848220805491841668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff909216919091179055918501805186518316845292849020805493909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff9093169290921790558351905191517ff264aae70bf6a9d90e68e0f9b393f4e7fbea67b063b0f336e0b36c158170365192612f8c929163ffffffff92831681529116602082015260400190565b60405180910390a1505050505050565b6000610794825490565b6040805160e0810182526000808252602080830182905282840182905260608084018390526080840183905260a0840181905260c084015263ffffffff85811683526011825284832080546401000000009004909116808452600190910182528483206002810180548751818602810186019098528088529596929591949390919083018282801561305757602002820191906000526020600020905b815481526020019060010190808311613043575b505050505090506000815167ffffffffffffffff81111561307a5761307a6140c2565b6040519080825280602002602001820160405280156130c057816020015b6040805180820190915260008152606060208201528152602001906001900390816130985790505b50905060005b81518110156131e15760405180604001604052808483815181106130ec576130ec614055565b6020026020010151815260200185600301600086858151811061311157613111614055565b60200260200101518152602001908152602001600020805461313290614258565b80601f016020809104026020016040519081016040528092919081815260200182805461315e90614258565b80156131ab5780601f10613180576101008083540402835291602001916131ab565b820191906000526020600020905b81548152906001019060200180831161318e57829003601f168201915b50505050508152508282815181106131c5576131c5614055565b6020026020010181905250806131da906144fc565b90506130c6565b506040805160e08101825263ffffffff8089166000818152601160208181528683205480861687528b8616828801526801000000000000000081049095169686019690965260ff6c010000000000000000000000008504811615156060870152929091529093526d010000000000000000000000000090049091161515608082015260a0810161327085613333565b81526020019190915295945050505050565b60006129248383613565565b604080516080810182526000808252602082018190529181019190915260608082015260408051608081018252600084815260106020908152838220805463ffffffff80821686526001830154848701526002830154868801526401000000009091041683526003019052918220606082019061330a90613333565b905260009384526010602052604090932054929364010000000090930463ffffffff1692915050565b606060006129248361365f565b3373ffffffffffffffffffffffffffffffffffffffff8216036133bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161047c565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600081815260018301602052604081205461347c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610794565b506000610794565b6000848152600260208190526040909120015462010000900473ffffffffffffffffffffffffffffffffffffffff161561074657600084815260026020819052604091829020015490517ffba64a7c0000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff169063fba64a7c9061352b908690869086908b908d90600401614b31565b600060405180830381600087803b15801561354557600080fd5b505af1158015613559573d6000803e3d6000fd5b50505050505050505050565b6000818152600183016020526040812054801561364e5760006135896001836149e7565b855490915060009061359d906001906149e7565b90508181146136025760008660000182815481106135bd576135bd614055565b90600052602060002001549050808760000184815481106135e0576135e0614055565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061361357613613614bb3565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610794565b6000915050610794565b5092915050565b6060816000018054806020026020016040519081016040528092919081815260200182805480156136af57602002820191906000526020600020905b81548152602001906001019080831161369b575b50505050509050919050565b5080546136c790614258565b6000825580601f106136d7575050565b601f01602090049060005260206000209081019061290d91905b8082111561370557600081556001016136f1565b5090565b60008083601f84011261371b57600080fd5b50813567ffffffffffffffff81111561373357600080fd5b6020830191508360208260051b850101111561374e57600080fd5b9250929050565b6000806000806040858703121561376b57600080fd5b843567ffffffffffffffff8082111561378357600080fd5b61378f88838901613709565b909650945060208701359150808211156137a857600080fd5b506137b587828801613709565b95989497509550505050565b60008083601f8401126137d357600080fd5b50813567ffffffffffffffff8111156137eb57600080fd5b60208301915083602082850101111561374e57600080fd5b6000806000806040858703121561381957600080fd5b843567ffffffffffffffff8082111561383157600080fd5b61383d888389016137c1565b9096509450602087013591508082111561385657600080fd5b506137b5878288016137c1565b60006020828403121561387557600080fd5b5035919050565b60006020828403121561388e57600080fd5b813567ffffffffffffffff8111156138a557600080fd5b820160a0818503121561292457600080fd5b6000815180845260005b818110156138dd576020818501810151868301820152016138c1565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061292460208301846138b7565b801515811461290d57600080fd5b803563ffffffff8116811461395057600080fd5b919050565b600080600080600080600060a0888a03121561397057600080fd5b873567ffffffffffffffff8082111561398857600080fd5b6139948b838c01613709565b909950975060208a01359150808211156139ad57600080fd5b506139ba8a828b01613709565b90965094505060408801356139ce8161392e565b925060608801356139de8161392e565b91506139ec6080890161393c565b905092959891949750929550565b60008060208385031215613a0d57600080fd5b823567ffffffffffffffff811115613a2457600080fd5b613a3085828601613709565b90969095509350505050565b600081518084526020808501945080840160005b83811015613a6c57815187529582019590820190600101613a50565b509495945050505050565b600063ffffffff80835116845260208181850151168186015260408281860151168187015260608501511515606087015260808501511515608087015260a0850151925060e060a0870152613acf60e0870184613a3c565b925060c085015186840360c08801528381518086528486019150848160051b870101858401935060005b82811015613b56578782037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018452845180518352870151878301879052613b43878401826138b7565b9588019594880194925050600101613af9565b509998505050505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613bd7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452613bc5858351613a77565b94509285019290850190600101613b8b565b5092979650505050505050565b600060208284031215613bf657600080fd5b6129248261393c565b6020815260006129246020830184613a77565b63ffffffff815116825260208101516020830152604081015160408301526000606082015160806060850152613c4b6080850182613a3c565b949350505050565b604081526000613c666040830185613c12565b905063ffffffff831660208301529392505050565b73ffffffffffffffffffffffffffffffffffffffff81511682526000602082015160406020850152613c4b60408501826138b7565b6020815260006129246020830184613c7b565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613bd7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452613d24858351613c7b565b94509285019290850190600101613cea565b60008060008060008060008060c0898b031215613d5257600080fd5b613d5b8961393c565b9750602089013567ffffffffffffffff80821115613d7857600080fd5b613d848c838d01613709565b909950975060408b0135915080821115613d9d57600080fd5b50613daa8b828c01613709565b9096509450506060890135613dbe8161392e565b92506080890135613dce8161392e565b9150613ddc60a08a0161393c565b90509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000815160a08452613e2f60a08501826138b7565b905060208301518482036020860152613e4882826138b7565b915050604083015160048110613e6057613e60613deb565b6040850152606083015160028110613e7a57613e7a613deb565b606085015260809283015173ffffffffffffffffffffffffffffffffffffffff1692909301919091525090565b6020815260006129246020830184613e1a565b60008060408385031215613ecd57600080fd5b613ed68361393c565b946020939093013593505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613bd7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452613f45858351613e1a565b94509285019290850190600101613f0b565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b83811015613fcc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552613fba868351613c12565b95509382019390820190600101613f80565b50508584038187015286518085528782019482019350915060005b8281101561400957845163ffffffff1684529381019392810192600101613fe7565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461290d57600080fd5b60006020828403121561404a57600080fd5b813561292481614016565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18336030181126140b857600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715614114576141146140c2565b60405290565b6040516080810167ffffffffffffffff81118282101715614114576141146140c2565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614184576141846140c2565b604052919050565b60006040823603121561419e57600080fd5b6141a66140f1565b82356141b181614016565b815260208381013567ffffffffffffffff808211156141cf57600080fd5b9085019036601f8301126141e257600080fd5b8135818111156141f4576141f46140c2565b614224847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161413d565b9150808252368482850101111561423a57600080fd5b80848401858401376000908201840152918301919091525092915050565b600181811c9082168061426c57607f821691505b6020821081036142a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60006020808352600084546142bf81614258565b808487015260406001808416600081146142e0576001811461431857614346565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838a01528284151560051b8a01019550614346565b896000528660002060005b8581101561433e5781548b8201860152908301908801614323565b8a0184019650505b509398975050505050505050565b601f821115610b7c57600081815260208120601f850160051c8101602086101561437b5750805b601f850160051c820191505b8181101561074657828155600101614387565b815167ffffffffffffffff8111156143b4576143b46140c2565b6143c8816143c28454614258565b84614354565b602080601f83116001811461441b57600084156143e55750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610746565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561446857888601518255948401946001909101908401614449565b50858210156144a457878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b828152604060208201526000613c4b60408301846138b7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361452d5761452d6144cd565b5060010190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000614591604083018688614534565b82810360208401526145a4818587614534565b979650505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126145e457600080fd5b83018035915067ffffffffffffffff8211156145ff57600080fd5b60200191503681900382131561374e57600080fd5b60006020828403121561462657600080fd5b81516129248161392e565b67ffffffffffffffff831115614649576146496140c2565b61465d836146578354614258565b83614354565b6000601f8411600181146146af57600085156146795750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355614745565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156146fe57868501358255602094850194600190920191016146de565b5086821015614739577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b600081356004811061079457600080fd5b6004821061476d5761476d613deb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff831681178255505050565b600081356002811061079457600080fd5b600282106147bf576147bf613deb565b805461ff008360081b167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff8216178255505050565b6000813561079481614016565b61480b82836145af565b67ffffffffffffffff811115614823576148236140c2565b614837816148318554614258565b85614354565b6000601f82116001811461488957600083156148535750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b17855561491f565b6000858152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0841690835b828110156148d857868501358255602094850194600190920191016148b8565b5084821015614913577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88660031b161c19848701351681555b505060018360011b0185555b5050505061493060208301836145af565b61493e818360018601614631565b5050600281016149596149536040850161474c565b8261475d565b61496e6149686060850161479e565b826147af565b610b7c61497d608085016147f4565b82547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1660109190911b75ffffffffffffffffffffffffffffffffffffffff000016178255565b600063ffffffff8083168181036149dd576149dd6144cd565b6001019392505050565b81810381811115610794576107946144cd565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818336030181126140b857600080fd5b600060808236031215614a4057600080fd5b614a4861411a565b614a518361393c565b81526020808401358183015260408401356040830152606084013567ffffffffffffffff80821115614a8257600080fd5b9085019036601f830112614a9557600080fd5b813581811115614aa757614aa76140c2565b8060051b9150614ab884830161413d565b8181529183018401918481019036841115614ad257600080fd5b938501935b83851015614af057843582529385019390850190614ad7565b606087015250939695505050505050565b6020815260006129246020830184613a3c565b63ffffffff818116838216019080821115613658576136586144cd565b6080815284608082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115614b6a57600080fd5b8560051b808860a0850137820182810360a09081016020850152614b90908201876138b7565b91505063ffffffff80851660408401528084166060840152509695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000813000a", } var CapabilityRegistryABI = CapabilityRegistryMetaData.ABI @@ -313,7 +316,7 @@ func (_CapabilityRegistry *CapabilityRegistryCallerSession) GetDONs() ([]Capabil return _CapabilityRegistry.Contract.GetDONs(&_CapabilityRegistry.CallOpts) } -func (_CapabilityRegistry *CapabilityRegistryCaller) GetHashedCapabilityId(opts *bind.CallOpts, labelledName [32]byte, version [32]byte) ([32]byte, error) { +func (_CapabilityRegistry *CapabilityRegistryCaller) GetHashedCapabilityId(opts *bind.CallOpts, labelledName string, version string) ([32]byte, error) { var out []interface{} err := _CapabilityRegistry.contract.Call(opts, &out, "getHashedCapabilityId", labelledName, version) @@ -327,11 +330,11 @@ func (_CapabilityRegistry *CapabilityRegistryCaller) GetHashedCapabilityId(opts } -func (_CapabilityRegistry *CapabilityRegistrySession) GetHashedCapabilityId(labelledName [32]byte, version [32]byte) ([32]byte, error) { +func (_CapabilityRegistry *CapabilityRegistrySession) GetHashedCapabilityId(labelledName string, version string) ([32]byte, error) { return _CapabilityRegistry.Contract.GetHashedCapabilityId(&_CapabilityRegistry.CallOpts, labelledName, version) } -func (_CapabilityRegistry *CapabilityRegistryCallerSession) GetHashedCapabilityId(labelledName [32]byte, version [32]byte) ([32]byte, error) { +func (_CapabilityRegistry *CapabilityRegistryCallerSession) GetHashedCapabilityId(labelledName string, version string) ([32]byte, error) { return _CapabilityRegistry.Contract.GetHashedCapabilityId(&_CapabilityRegistry.CallOpts, labelledName, version) } @@ -515,16 +518,16 @@ func (_CapabilityRegistry *CapabilityRegistryTransactorSession) AddCapability(ca return _CapabilityRegistry.Contract.AddCapability(&_CapabilityRegistry.TransactOpts, capability) } -func (_CapabilityRegistry *CapabilityRegistryTransactor) AddDON(opts *bind.TransactOpts, nodes [][32]byte, capabilityConfigurations []CapabilityRegistryCapabilityConfiguration, isPublic bool) (*types.Transaction, error) { - return _CapabilityRegistry.contract.Transact(opts, "addDON", nodes, capabilityConfigurations, isPublic) +func (_CapabilityRegistry *CapabilityRegistryTransactor) AddDON(opts *bind.TransactOpts, nodes [][32]byte, capabilityConfigurations []CapabilityRegistryCapabilityConfiguration, isPublic bool, acceptsWorkflows bool, f uint32) (*types.Transaction, error) { + return _CapabilityRegistry.contract.Transact(opts, "addDON", nodes, capabilityConfigurations, isPublic, acceptsWorkflows, f) } -func (_CapabilityRegistry *CapabilityRegistrySession) AddDON(nodes [][32]byte, capabilityConfigurations []CapabilityRegistryCapabilityConfiguration, isPublic bool) (*types.Transaction, error) { - return _CapabilityRegistry.Contract.AddDON(&_CapabilityRegistry.TransactOpts, nodes, capabilityConfigurations, isPublic) +func (_CapabilityRegistry *CapabilityRegistrySession) AddDON(nodes [][32]byte, capabilityConfigurations []CapabilityRegistryCapabilityConfiguration, isPublic bool, acceptsWorkflows bool, f uint32) (*types.Transaction, error) { + return _CapabilityRegistry.Contract.AddDON(&_CapabilityRegistry.TransactOpts, nodes, capabilityConfigurations, isPublic, acceptsWorkflows, f) } -func (_CapabilityRegistry *CapabilityRegistryTransactorSession) AddDON(nodes [][32]byte, capabilityConfigurations []CapabilityRegistryCapabilityConfiguration, isPublic bool) (*types.Transaction, error) { - return _CapabilityRegistry.Contract.AddDON(&_CapabilityRegistry.TransactOpts, nodes, capabilityConfigurations, isPublic) +func (_CapabilityRegistry *CapabilityRegistryTransactorSession) AddDON(nodes [][32]byte, capabilityConfigurations []CapabilityRegistryCapabilityConfiguration, isPublic bool, acceptsWorkflows bool, f uint32) (*types.Transaction, error) { + return _CapabilityRegistry.Contract.AddDON(&_CapabilityRegistry.TransactOpts, nodes, capabilityConfigurations, isPublic, acceptsWorkflows, f) } func (_CapabilityRegistry *CapabilityRegistryTransactor) AddNodeOperators(opts *bind.TransactOpts, nodeOperators []CapabilityRegistryNodeOperator) (*types.Transaction, error) { @@ -611,16 +614,16 @@ func (_CapabilityRegistry *CapabilityRegistryTransactorSession) TransferOwnershi return _CapabilityRegistry.Contract.TransferOwnership(&_CapabilityRegistry.TransactOpts, to) } -func (_CapabilityRegistry *CapabilityRegistryTransactor) UpdateDON(opts *bind.TransactOpts, donId uint32, nodes [][32]byte, capabilityConfigurations []CapabilityRegistryCapabilityConfiguration, isPublic bool) (*types.Transaction, error) { - return _CapabilityRegistry.contract.Transact(opts, "updateDON", donId, nodes, capabilityConfigurations, isPublic) +func (_CapabilityRegistry *CapabilityRegistryTransactor) UpdateDON(opts *bind.TransactOpts, donId uint32, nodes [][32]byte, capabilityConfigurations []CapabilityRegistryCapabilityConfiguration, isPublic bool, acceptsWorkflows bool, f uint32) (*types.Transaction, error) { + return _CapabilityRegistry.contract.Transact(opts, "updateDON", donId, nodes, capabilityConfigurations, isPublic, acceptsWorkflows, f) } -func (_CapabilityRegistry *CapabilityRegistrySession) UpdateDON(donId uint32, nodes [][32]byte, capabilityConfigurations []CapabilityRegistryCapabilityConfiguration, isPublic bool) (*types.Transaction, error) { - return _CapabilityRegistry.Contract.UpdateDON(&_CapabilityRegistry.TransactOpts, donId, nodes, capabilityConfigurations, isPublic) +func (_CapabilityRegistry *CapabilityRegistrySession) UpdateDON(donId uint32, nodes [][32]byte, capabilityConfigurations []CapabilityRegistryCapabilityConfiguration, isPublic bool, acceptsWorkflows bool, f uint32) (*types.Transaction, error) { + return _CapabilityRegistry.Contract.UpdateDON(&_CapabilityRegistry.TransactOpts, donId, nodes, capabilityConfigurations, isPublic, acceptsWorkflows, f) } -func (_CapabilityRegistry *CapabilityRegistryTransactorSession) UpdateDON(donId uint32, nodes [][32]byte, capabilityConfigurations []CapabilityRegistryCapabilityConfiguration, isPublic bool) (*types.Transaction, error) { - return _CapabilityRegistry.Contract.UpdateDON(&_CapabilityRegistry.TransactOpts, donId, nodes, capabilityConfigurations, isPublic) +func (_CapabilityRegistry *CapabilityRegistryTransactorSession) UpdateDON(donId uint32, nodes [][32]byte, capabilityConfigurations []CapabilityRegistryCapabilityConfiguration, isPublic bool, acceptsWorkflows bool, f uint32) (*types.Transaction, error) { + return _CapabilityRegistry.Contract.UpdateDON(&_CapabilityRegistry.TransactOpts, donId, nodes, capabilityConfigurations, isPublic, acceptsWorkflows, f) } func (_CapabilityRegistry *CapabilityRegistryTransactor) UpdateNodeOperators(opts *bind.TransactOpts, nodeOperatorIds []*big.Int, nodeOperators []CapabilityRegistryNodeOperator) (*types.Transaction, error) { @@ -2110,7 +2113,7 @@ type CapabilityRegistryInterface interface { GetDONs(opts *bind.CallOpts) ([]CapabilityRegistryDONInfo, error) - GetHashedCapabilityId(opts *bind.CallOpts, labelledName [32]byte, version [32]byte) ([32]byte, error) + GetHashedCapabilityId(opts *bind.CallOpts, labelledName string, version string) ([32]byte, error) GetNode(opts *bind.CallOpts, p2pId [32]byte) (CapabilityRegistryNodeInfo, uint32, error) @@ -2130,7 +2133,7 @@ type CapabilityRegistryInterface interface { AddCapability(opts *bind.TransactOpts, capability CapabilityRegistryCapability) (*types.Transaction, error) - AddDON(opts *bind.TransactOpts, nodes [][32]byte, capabilityConfigurations []CapabilityRegistryCapabilityConfiguration, isPublic bool) (*types.Transaction, error) + AddDON(opts *bind.TransactOpts, nodes [][32]byte, capabilityConfigurations []CapabilityRegistryCapabilityConfiguration, isPublic bool, acceptsWorkflows bool, f uint32) (*types.Transaction, error) AddNodeOperators(opts *bind.TransactOpts, nodeOperators []CapabilityRegistryNodeOperator) (*types.Transaction, error) @@ -2146,7 +2149,7 @@ type CapabilityRegistryInterface interface { TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) - UpdateDON(opts *bind.TransactOpts, donId uint32, nodes [][32]byte, capabilityConfigurations []CapabilityRegistryCapabilityConfiguration, isPublic bool) (*types.Transaction, error) + UpdateDON(opts *bind.TransactOpts, donId uint32, nodes [][32]byte, capabilityConfigurations []CapabilityRegistryCapabilityConfiguration, isPublic bool, acceptsWorkflows bool, f uint32) (*types.Transaction, error) UpdateNodeOperators(opts *bind.TransactOpts, nodeOperatorIds []*big.Int, nodeOperators []CapabilityRegistryNodeOperator) (*types.Transaction, error) diff --git a/core/gethwrappers/keystone/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/keystone/generation/generated-wrapper-dependency-versions-do-not-edit.txt index 9167c638fbb..ee15b49b181 100644 --- a/core/gethwrappers/keystone/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/core/gethwrappers/keystone/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -1,4 +1,4 @@ GETH_VERSION: 1.13.8 forwarder: ../../../contracts/solc/v0.8.19/KeystoneForwarder/KeystoneForwarder.abi ../../../contracts/solc/v0.8.19/KeystoneForwarder/KeystoneForwarder.bin 892c6ced16576bebd887eb581147c02139853d5143a0c9b77704efefd4ab7ec7 -keystone_capability_registry: ../../../contracts/solc/v0.8.19/CapabilityRegistry/CapabilityRegistry.abi ../../../contracts/solc/v0.8.19/CapabilityRegistry/CapabilityRegistry.bin 0a79d0eba13fd4a4b83d7618bb181c21c42222f3cc6c5a90a09302f685555033 +keystone_capability_registry: ../../../contracts/solc/v0.8.19/CapabilityRegistry/CapabilityRegistry.abi ../../../contracts/solc/v0.8.19/CapabilityRegistry/CapabilityRegistry.bin 462c8a4c5cba9c429320f6ed041a8ea64749ec7c8cec7938c10767d07e3053e3 ocr3_capability: ../../../contracts/solc/v0.8.19/OCR3Capability/OCR3Capability.abi ../../../contracts/solc/v0.8.19/OCR3Capability/OCR3Capability.bin 9dcbdf55bd5729ba266148da3f17733eb592c871c2108ccca546618628fd9ad2