diff --git a/.changeset/curly-crabs-doubt.md b/.changeset/curly-crabs-doubt.md new file mode 100644 index 00000000000..0408383bd03 --- /dev/null +++ b/.changeset/curly-crabs-doubt.md @@ -0,0 +1,5 @@ +--- +"chainlink": patch +--- + +#internal diff --git a/contracts/.changeset/red-wasps-behave.md b/contracts/.changeset/red-wasps-behave.md new file mode 100644 index 00000000000..93fba83b558 --- /dev/null +++ b/contracts/.changeset/red-wasps-behave.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 60af8a141a3..f641bcb065e 100644 --- a/contracts/gas-snapshots/keystone.gas-snapshot +++ b/contracts/gas-snapshots/keystone.gas-snapshot @@ -4,27 +4,28 @@ CapabilityRegistry_AddCapabilitiesTest:test_RevertWhen_CalledByNonAdmin() (gas: CapabilityRegistry_AddCapabilitiesTest:test_RevertWhen_CapabilityExists() (gas: 145769) CapabilityRegistry_AddCapabilitiesTest:test_RevertWhen_ConfigurationContractDoesNotMatchInterface() (gas: 94606) CapabilityRegistry_AddCapabilitiesTest:test_RevertWhen_ConfigurationContractNotDeployed() (gas: 92961) -CapabilityRegistry_AddDONTest:test_AddDON() (gas: 499005) -CapabilityRegistry_AddDONTest:test_RevertWhen_CalledByNonAdmin() (gas: 19247) -CapabilityRegistry_AddDONTest:test_RevertWhen_CapabilityDoesNotExist() (gas: 291948) -CapabilityRegistry_AddDONTest:test_RevertWhen_DeprecatedCapabilityAdded() (gas: 365161) -CapabilityRegistry_AddDONTest:test_RevertWhen_DuplicateCapabilityAdded() (gas: 375975) -CapabilityRegistry_AddDONTest:test_RevertWhen_DuplicateNodeAdded() (gas: 177964) -CapabilityRegistry_AddDONTest:test_RevertWhen_FaultToleranceIsZero() (gas: 43332) -CapabilityRegistry_AddDONTest:test_RevertWhen_NodeDoesNotSupportCapability() (gas: 306409) +CapabilityRegistry_AddDONTest:test_AddDON() (gas: 372909) +CapabilityRegistry_AddDONTest:test_RevertWhen_CalledByNonAdmin() (gas: 19269) +CapabilityRegistry_AddDONTest:test_RevertWhen_CapabilityDoesNotExist() (gas: 169874) +CapabilityRegistry_AddDONTest:test_RevertWhen_DeprecatedCapabilityAdded() (gas: 243042) +CapabilityRegistry_AddDONTest:test_RevertWhen_DuplicateCapabilityAdded() (gas: 249901) +CapabilityRegistry_AddDONTest:test_RevertWhen_DuplicateNodeAdded() (gas: 116949) +CapabilityRegistry_AddDONTest:test_RevertWhen_FaultToleranceIsZero() (gas: 43354) +CapabilityRegistry_AddDONTest:test_RevertWhen_NodeAlreadyBelongsToWorkflowDON() (gas: 344231) +CapabilityRegistry_AddDONTest:test_RevertWhen_NodeDoesNotSupportCapability() (gas: 180335) CapabilityRegistry_AddNodeOperatorsTest:test_AddNodeOperators() (gas: 184333) CapabilityRegistry_AddNodeOperatorsTest:test_RevertWhen_CalledByNonAdmin() (gas: 17602) CapabilityRegistry_AddNodeOperatorsTest:test_RevertWhen_NodeOperatorAdminAddressZero() (gas: 18498) -CapabilityRegistry_AddNodesTest:test_AddsNodeInfo() (gas: 355400) -CapabilityRegistry_AddNodesTest:test_OwnerCanAddNodes() (gas: 355388) +CapabilityRegistry_AddNodesTest:test_AddsNodeParams() (gas: 358667) +CapabilityRegistry_AddNodesTest:test_OwnerCanAddNodes() (gas: 358633) CapabilityRegistry_AddNodesTest:test_RevertWhen_AddingDuplicateP2PId() (gas: 301350) CapabilityRegistry_AddNodesTest:test_RevertWhen_AddingNodeWithInvalidCapability() (gas: 55207) -CapabilityRegistry_AddNodesTest:test_RevertWhen_AddingNodeWithInvalidNodeOperator() (gas: 24940) +CapabilityRegistry_AddNodesTest:test_RevertWhen_AddingNodeWithInvalidNodeOperator() (gas: 24895) CapabilityRegistry_AddNodesTest:test_RevertWhen_AddingNodeWithoutCapabilities() (gas: 27702) CapabilityRegistry_AddNodesTest:test_RevertWhen_CalledByNonNodeOperatorAdminAndNonOwner() (gas: 25108) CapabilityRegistry_AddNodesTest:test_RevertWhen_P2PIDEmpty() (gas: 27408) CapabilityRegistry_AddNodesTest:test_RevertWhen_SignerAddressEmpty() (gas: 27047) -CapabilityRegistry_AddNodesTest:test_RevertWhen_SignerAddressNotUnique() (gas: 309778) +CapabilityRegistry_AddNodesTest:test_RevertWhen_SignerAddressNotUnique() (gas: 309800) CapabilityRegistry_DeprecateCapabilitiesTest:test_DeprecatesCapability() (gas: 92938) CapabilityRegistry_DeprecateCapabilitiesTest:test_EmitsEvent() (gas: 93066) CapabilityRegistry_DeprecateCapabilitiesTest:test_RevertWhen_CalledByNonAdmin() (gas: 22944) @@ -33,51 +34,51 @@ CapabilityRegistry_DeprecateCapabilitiesTest:test_RevertWhen_CapabilityIsDepreca CapabilityRegistry_GetCapabilitiesTest:test_ExcludesDeprecatedCapabilities() (gas: 122114) CapabilityRegistry_GetCapabilitiesTest:test_ReturnsCapabilities() (gas: 58311) CapabilityRegistry_GetDONsTest:test_CorrectlyFetchesDONs() (gas: 65746) -CapabilityRegistry_GetDONsTest:test_DoesNotIncludeRemovedDONs() (gas: 88461) +CapabilityRegistry_GetDONsTest:test_DoesNotIncludeRemovedDONs() (gas: 65329) CapabilityRegistry_GetHashedCapabilityTest:test_CorrectlyGeneratesHashedCapabilityId() (gas: 11428) CapabilityRegistry_GetHashedCapabilityTest:test_DoesNotCauseIncorrectClashes() (gas: 13087) CapabilityRegistry_GetNodeOperatorsTest:test_CorrectlyFetchesNodeOperators() (gas: 36653) CapabilityRegistry_GetNodeOperatorsTest:test_DoesNotIncludeRemovedNodeOperators() (gas: 38938) -CapabilityRegistry_GetNodesTest:test_CorrectlyFetchesNodes() (gas: 59861) -CapabilityRegistry_GetNodesTest:test_DoesNotIncludeRemovedNodes() (gas: 71597) -CapabilityRegistry_RemoveDONsTest:test_RemovesDON() (gas: 60669) +CapabilityRegistry_GetNodesTest:test_CorrectlyFetchesNodes() (gas: 65482) +CapabilityRegistry_GetNodesTest:test_DoesNotIncludeRemovedNodes() (gas: 73664) +CapabilityRegistry_RemoveDONsTest:test_RemovesDON() (gas: 54946) CapabilityRegistry_RemoveDONsTest:test_RevertWhen_CalledByNonAdmin() (gas: 15647) -CapabilityRegistry_RemoveDONsTest:test_RevertWhen_DONDoesNotExist() (gas: 16518) +CapabilityRegistry_RemoveDONsTest:test_RevertWhen_DONDoesNotExist() (gas: 16550) CapabilityRegistry_RemoveNodeOperatorsTest:test_RemovesNodeOperator() (gas: 36122) CapabilityRegistry_RemoveNodeOperatorsTest:test_RevertWhen_CalledByNonOwner() (gas: 15816) -CapabilityRegistry_RemoveNodesTest:test_CanAddNodeWithSameSignerAddressAfterRemoving() (gas: 114054) -CapabilityRegistry_RemoveNodesTest:test_CanRemoveWhenDONDeleted() (gas: 371555) -CapabilityRegistry_RemoveNodesTest:test_CanRemoveWhenNodeNoLongerPartOfDON() (gas: 712587) -CapabilityRegistry_RemoveNodesTest:test_OwnerCanRemoveNodes() (gas: 72342) -CapabilityRegistry_RemoveNodesTest:test_RemovesNode() (gas: 74176) -CapabilityRegistry_RemoveNodesTest:test_RevertWhen_CalledByNonNodeOperatorAdminAndNonOwner() (gas: 24916) +CapabilityRegistry_RemoveNodesTest:test_CanAddNodeWithSameSignerAddressAfterRemoving() (gas: 115436) +CapabilityRegistry_RemoveNodesTest:test_CanRemoveWhenDONDeleted() (gas: 288312) +CapabilityRegistry_RemoveNodesTest:test_CanRemoveWhenNodeNoLongerPartOfDON() (gas: 562061) +CapabilityRegistry_RemoveNodesTest:test_OwnerCanRemoveNodes() (gas: 73457) +CapabilityRegistry_RemoveNodesTest:test_RemovesNode() (gas: 75292) +CapabilityRegistry_RemoveNodesTest:test_RevertWhen_CalledByNonNodeOperatorAdminAndNonOwner() (gas: 25053) CapabilityRegistry_RemoveNodesTest:test_RevertWhen_NodeDoesNotExist() (gas: 18418) -CapabilityRegistry_RemoveNodesTest:test_RevertWhen_NodePartOfDON() (gas: 385167) -CapabilityRegistry_RemoveNodesTest:test_RevertWhen_P2PIDEmpty() (gas: 18430) +CapabilityRegistry_RemoveNodesTest:test_RevertWhen_NodePartOfCapabilitiesDON() (gas: 385680) +CapabilityRegistry_RemoveNodesTest:test_RevertWhen_P2PIDEmpty() (gas: 18408) CapabilityRegistry_TypeAndVersionTest:test_TypeAndVersion() (gas: 9796) CapabilityRegistry_UpdateDONTest:test_RevertWhen_CalledByNonAdmin() (gas: 19411) -CapabilityRegistry_UpdateDONTest:test_RevertWhen_CapabilityDoesNotExist() (gas: 157904) +CapabilityRegistry_UpdateDONTest:test_RevertWhen_CapabilityDoesNotExist() (gas: 153162) CapabilityRegistry_UpdateDONTest:test_RevertWhen_DONDoesNotExist() (gas: 17831) -CapabilityRegistry_UpdateDONTest:test_RevertWhen_DeprecatedCapabilityAdded() (gas: 231117) -CapabilityRegistry_UpdateDONTest:test_RevertWhen_DuplicateCapabilityAdded() (gas: 241977) -CapabilityRegistry_UpdateDONTest:test_RevertWhen_DuplicateNodeAdded() (gas: 103722) -CapabilityRegistry_UpdateDONTest:test_RevertWhen_NodeDoesNotSupportCapability() (gas: 172410) -CapabilityRegistry_UpdateDONTest:test_UpdatesDON() (gas: 433641) +CapabilityRegistry_UpdateDONTest:test_RevertWhen_DeprecatedCapabilityAdded() (gas: 226375) +CapabilityRegistry_UpdateDONTest:test_RevertWhen_DuplicateCapabilityAdded() (gas: 233235) +CapabilityRegistry_UpdateDONTest:test_RevertWhen_DuplicateNodeAdded() (gas: 107828) +CapabilityRegistry_UpdateDONTest:test_RevertWhen_NodeDoesNotSupportCapability() (gas: 163668) +CapabilityRegistry_UpdateDONTest:test_UpdatesDON() (gas: 372699) CapabilityRegistry_UpdateNodeOperatorTest:test_RevertWhen_CalledByNonAdminAndNonOwner() (gas: 20627) CapabilityRegistry_UpdateNodeOperatorTest:test_RevertWhen_NodeOperatorAdminIsZeroAddress() (gas: 20048) CapabilityRegistry_UpdateNodeOperatorTest:test_RevertWhen_NodeOperatorDoesNotExist() (gas: 19786) CapabilityRegistry_UpdateNodeOperatorTest:test_RevertWhen_NodeOperatorIdAndParamLengthsMismatch() (gas: 15426) CapabilityRegistry_UpdateNodeOperatorTest:test_UpdatesNodeOperator() (gas: 36991) -CapabilityRegistry_UpdateNodesTest:test_CanUpdateParamsIfNodeSignerAddressNoLongerUsed() (gas: 250659) -CapabilityRegistry_UpdateNodesTest:test_OwnerCanUpdateNodes() (gas: 158814) -CapabilityRegistry_UpdateNodesTest:test_RevertWhen_AddingNodeWithInvalidCapability() (gas: 35963) +CapabilityRegistry_UpdateNodesTest:test_CanUpdateParamsIfNodeSignerAddressNoLongerUsed() (gas: 253325) +CapabilityRegistry_UpdateNodesTest:test_OwnerCanUpdateNodes() (gas: 161746) +CapabilityRegistry_UpdateNodesTest:test_RevertWhen_AddingNodeWithInvalidCapability() (gas: 35794) CapabilityRegistry_UpdateNodesTest:test_RevertWhen_CalledByNonNodeOperatorAdminAndNonOwner() (gas: 25064) CapabilityRegistry_UpdateNodesTest:test_RevertWhen_NodeDoesNotExist() (gas: 27303) -CapabilityRegistry_UpdateNodesTest:test_RevertWhen_NodeSignerAlreadyAssignedToAnotherNode() (gas: 29184) +CapabilityRegistry_UpdateNodesTest:test_RevertWhen_NodeSignerAlreadyAssignedToAnotherNode() (gas: 29214) CapabilityRegistry_UpdateNodesTest:test_RevertWhen_P2PIDEmpty() (gas: 27291) -CapabilityRegistry_UpdateNodesTest:test_RevertWhen_SignerAddressEmpty() (gas: 26974) -CapabilityRegistry_UpdateNodesTest:test_RevertWhen_UpdatingNodeWithoutCapabilities() (gas: 25538) -CapabilityRegistry_UpdateNodesTest:test_UpdatesNodeInfo() (gas: 158803) +CapabilityRegistry_UpdateNodesTest:test_RevertWhen_SignerAddressEmpty() (gas: 26951) +CapabilityRegistry_UpdateNodesTest:test_RevertWhen_UpdatingNodeWithoutCapabilities() (gas: 25508) +CapabilityRegistry_UpdateNodesTest:test_UpdatesNodeParams() (gas: 161800) KeystoneForwarder_ReportTest:test_Report_ConfigVersion() (gas: 1802140) KeystoneForwarder_ReportTest:test_Report_FailedDeliveryWhenReceiverInterfaceNotSupported() (gas: 126020) KeystoneForwarder_ReportTest:test_Report_FailedDeliveryWhenReceiverNotContract() (gas: 127513) diff --git a/contracts/src/v0.8/keystone/CapabilityRegistry.sol b/contracts/src/v0.8/keystone/CapabilityRegistry.sol index 9b59439e1b0..c6802608204 100644 --- a/contracts/src/v0.8/keystone/CapabilityRegistry.sol +++ b/contracts/src/v0.8/keystone/CapabilityRegistry.sol @@ -31,9 +31,27 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { string name; } + struct NodeParams { + /// @notice The id of the node operator that manages this node + uint32 nodeOperatorId; + /// @notice The signer address for application-layer message verification. + bytes32 signer; + /// @notice This is an Ed25519 public key that is used to identify a node. + /// This key is guaranteed to be unique in the CapabilityRegistry. It is + /// used to identify a node in the the P2P network. + bytes32 p2pId; + /// @notice The list of hashed capability IDs supported by the node + bytes32[] hashedCapabilityIds; + } + struct NodeInfo { /// @notice The id of the node operator that manages this node uint32 nodeOperatorId; + /// @notice The number of times the node's configuration has been updated + uint32 configCount; + /// @notice The ID of the Workflow DON that the node belongs to. A node can + /// only belong to one DON that accepts Workflows. + uint32 workflowDONId; /// @notice The signer address for application-layer message verification. bytes32 signer; /// @notice This is an Ed25519 public key that is used to identify a node. @@ -42,6 +60,10 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { bytes32 p2pId; /// @notice The list of hashed capability IDs supported by the node bytes32[] hashedCapabilityIds; + /// @notice The list of capabilities DON Ids supported by the node. A node + /// can belong to multiple capabilities DONs. This list does not include a + /// Workflow DON id if the node belongs to one. + uint256[] capabilitiesDONIds; } struct Node { @@ -50,6 +72,9 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { uint32 nodeOperatorId; /// @notice The number of times the node's configuration has been updated uint32 configCount; + /// @notice The ID of the Workflow DON that the node belongs to. A node can + /// only belong to one DON that accepts Workflows. + uint32 workflowDONId; /// @notice The signer address for application-layer message verification. /// @dev This key is guaranteed to be unique in the CapabilityRegistry /// as a signer address can only belong to one node. @@ -67,8 +92,10 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { /// new capabilities by incrementing the configCount and creating a /// new set of supported capability IDs mapping(uint32 configCount => EnumerableSet.Bytes32Set capabilityId) supportedHashedCapabilityIds; - /// @notice The list of DON Ids supported by the node. - EnumerableSet.UintSet supportedDONIds; + /// @notice The list of capabilities DON Ids supported by the node. A node + /// can belong to multiple capabilities DONs. This list does not include a + /// Workflow DON id if the node belongs to one. + EnumerableSet.UintSet capabilitiesDONIds; } /// @notice CapabilityResponseType indicates whether remote response requires @@ -163,7 +190,9 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { /// @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. + /// @notice True if the DON accepts Workflows. A DON that accepts Workflows + /// is called Workflow DON and it can process Workflow Specs. A Workflow + /// DON also support one or more capabilities as well. bool acceptsWorkflows; /// @notice Mapping of config counts to configurations mapping(uint32 configCount => DONCapabilityConfig donConfig) config; @@ -287,9 +316,17 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { error NodeOperatorDoesNotExist(uint32 nodeOperatorId); /// @notice This error is thrown when trying to remove a node that is still - /// part of a DON + /// part of a capabitlities DON + /// @param donId The Id of the DON the node belongs to /// @param nodeP2PId The P2P Id of the node being removed - error NodePartOfDON(bytes32 nodeP2PId); + error NodePartOfCapabilitiesDON(uint32 donId, bytes32 nodeP2PId); + + /// @notice This error is thrown when attempting to add a node to a second + /// Workflow DON or when trying to remove a node that belongs to a Workflow + /// DON + /// @param donId The Id of the DON the node belongs to + /// @param nodeP2PId The P2P Id of the node + error NodePartOfWorkflowDON(uint32 donId, bytes32 nodeP2PId); /// @notice This error is thrown when trying to add a capability with a /// configuration contract that does not implement the required interface. @@ -469,10 +506,10 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { /// @notice Adds nodes. Nodes can be added with deprecated capabilities to /// avoid breaking changes when deprecating capabilities. /// @param nodes The nodes to add - function addNodes(NodeInfo[] calldata nodes) external { + function addNodes(NodeParams[] calldata nodes) external { bool isOwner = msg.sender == owner(); for (uint256 i; i < nodes.length; ++i) { - NodeInfo memory node = nodes[i]; + NodeParams memory node = nodes[i]; NodeOperator memory nodeOperator = s_nodeOperators[node.nodeOperatorId]; if (nodeOperator.admin == address(0)) revert NodeOperatorDoesNotExist(node.nodeOperatorId); @@ -515,7 +552,9 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { Node storage node = s_nodes[p2pId]; if (node.signer == bytes32("")) revert NodeDoesNotExist(p2pId); - if (node.supportedDONIds.length() > 0) revert NodePartOfDON(p2pId); + if (node.capabilitiesDONIds.length() > 0) + revert NodePartOfCapabilitiesDON(uint32(node.capabilitiesDONIds.at(i)), p2pId); + if (node.workflowDONId != 0) revert NodePartOfWorkflowDON(node.workflowDONId, p2pId); if (!isOwner && msg.sender != s_nodeOperators[node.nodeOperatorId].admin) revert AccessForbidden(msg.sender); s_nodeSigners.remove(node.signer); @@ -528,10 +567,10 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { /// @notice Updates nodes. The node admin can update the node's signer address /// and reconfigure its supported capabilities /// @param nodes The nodes to update - function updateNodes(NodeInfo[] calldata nodes) external { + function updateNodes(NodeParams[] calldata nodes) external { bool isOwner = msg.sender == owner(); for (uint256 i; i < nodes.length; ++i) { - NodeInfo memory node = nodes[i]; + NodeParams memory node = nodes[i]; NodeOperator memory nodeOperator = s_nodeOperators[node.nodeOperatorId]; if (!isOwner && msg.sender != nodeOperator.admin) revert AccessForbidden(msg.sender); @@ -539,14 +578,20 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { Node storage storedNode = s_nodes[node.p2pId]; if (storedNode.signer == bytes32("")) revert NodeDoesNotExist(node.p2pId); - if (node.signer == bytes32("") || (storedNode.signer != node.signer && s_nodeSigners.contains(node.signer))) - revert InvalidNodeSigner(); + if (node.signer == bytes32("")) revert InvalidNodeSigner(); + + bytes32 previousSigner = storedNode.signer; + if (previousSigner != node.signer) { + if (s_nodeSigners.contains(node.signer)) revert InvalidNodeSigner(); + storedNode.signer = node.signer; + s_nodeSigners.remove(previousSigner); + s_nodeSigners.add(node.signer); + } bytes32[] memory supportedHashedCapabilityIds = node.hashedCapabilityIds; if (supportedHashedCapabilityIds.length == 0) revert InvalidNodeCapabilities(supportedHashedCapabilityIds); - storedNode.configCount++; - uint32 capabilityConfigCount = storedNode.configCount; + uint32 capabilityConfigCount = ++storedNode.configCount; for (uint256 j; j < supportedHashedCapabilityIds.length; ++j) { if (!s_hashedCapabilityIds.contains(supportedHashedCapabilityIds[j])) revert InvalidNodeCapabilities(supportedHashedCapabilityIds); @@ -556,45 +601,37 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { storedNode.nodeOperatorId = node.nodeOperatorId; storedNode.p2pId = node.p2pId; - bytes32 previousSigner = storedNode.signer; - - if (storedNode.signer != node.signer) { - s_nodeSigners.remove(previousSigner); - storedNode.signer = node.signer; - s_nodeSigners.add(node.signer); - } emit NodeUpdated(node.p2pId, node.nodeOperatorId, node.signer); } } /// @notice Gets a node's data /// @param p2pId The P2P ID of the node to query for - /// @return NodeInfo The node data - /// @return configCount The number of times the node has been configured - function getNode(bytes32 p2pId) public view returns (NodeInfo memory, uint32 configCount) { + /// @return nodeInfo NodeInfo The node data + function getNode(bytes32 p2pId) public view returns (NodeInfo memory nodeInfo) { return ( NodeInfo({ nodeOperatorId: s_nodes[p2pId].nodeOperatorId, p2pId: s_nodes[p2pId].p2pId, signer: s_nodes[p2pId].signer, - hashedCapabilityIds: s_nodes[p2pId].supportedHashedCapabilityIds[s_nodes[p2pId].configCount].values() - }), - s_nodes[p2pId].configCount + hashedCapabilityIds: s_nodes[p2pId].supportedHashedCapabilityIds[s_nodes[p2pId].configCount].values(), + configCount: s_nodes[p2pId].configCount, + workflowDONId: s_nodes[p2pId].workflowDONId, + capabilitiesDONIds: s_nodes[p2pId].capabilitiesDONIds.values() + }) ); } /// @notice Gets all nodes - /// @return nodeInfo NodeInfo[] All nodes in the capability registry - /// @return configCounts uint32[] All the config counts for the nodes in the capability registry - function getNodes() external view returns (NodeInfo[] memory nodeInfo, uint32[] memory configCounts) { + /// @return NodeInfo[] All nodes in the capability registry + function getNodes() external view returns (NodeInfo[] memory) { bytes32[] memory p2pIds = s_nodeP2PIds.values(); - nodeInfo = new NodeInfo[](p2pIds.length); - configCounts = new uint32[](p2pIds.length); + NodeInfo[] memory nodesInfo = new NodeInfo[](p2pIds.length); for (uint256 i; i < p2pIds.length; ++i) { - (nodeInfo[i], configCounts[i]) = getNode(p2pIds[i]); + nodesInfo[i] = getNode(p2pIds[i]); } - return (nodeInfo, configCounts); + return nodesInfo; } /// @notice Adds a new capability to the capability registry @@ -740,8 +777,13 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { uint32 configCount = don.configCount; EnumerableSet.Bytes32Set storage nodeP2PIds = don.config[configCount].nodes; + bool isWorkflowDON = don.acceptsWorkflows; for (uint256 j; j < nodeP2PIds.length(); ++j) { - s_nodes[nodeP2PIds.at(j)].supportedDONIds.remove(donId); + if (isWorkflowDON) { + delete s_nodes[nodeP2PIds.at(j)].workflowDONId; + } else { + s_nodes[nodeP2PIds.at(j)].capabilitiesDONIds.remove(donId); + } } // DON config count starts at index 1 @@ -827,16 +869,23 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { // needed as the previous config will be overwritten by storing the latest config // at configCount for (uint256 i; i < prevDONCapabilityConfig.nodes.length(); ++i) { - s_nodes[prevDONCapabilityConfig.nodes.at(i)].supportedDONIds.remove(donParams.id); + s_nodes[prevDONCapabilityConfig.nodes.at(i)].capabilitiesDONIds.remove(donParams.id); + delete s_nodes[prevDONCapabilityConfig.nodes.at(i)].workflowDONId; } } for (uint256 i; i < nodes.length; ++i) { if (!donCapabilityConfig.nodes.add(nodes[i])) revert DuplicateDONNode(donParams.id, nodes[i]); - /// Fine to add a duplicate DON ID to the set of supported DON IDs again as the set - /// will only store unique DON IDs - s_nodes[nodes[i]].supportedDONIds.add(donParams.id); + if (donParams.acceptsWorkflows) { + if (s_nodes[nodes[i]].workflowDONId != donParams.id && s_nodes[nodes[i]].workflowDONId != 0) + revert NodePartOfWorkflowDON(donParams.id, nodes[i]); + s_nodes[nodes[i]].workflowDONId = donParams.id; + } else { + /// Fine to add a duplicate DON ID to the set of supported DON IDs again as the set + /// will only store unique DON IDs + s_nodes[nodes[i]].capabilitiesDONIds.add(donParams.id); + } } for (uint256 i; i < capabilityConfigurations.length; ++i) { diff --git a/contracts/src/v0.8/keystone/KeystoneForwarder.sol b/contracts/src/v0.8/keystone/KeystoneForwarder.sol index fe0597ae8f0..07b4b34da79 100644 --- a/contracts/src/v0.8/keystone/KeystoneForwarder.sol +++ b/contracts/src/v0.8/keystone/KeystoneForwarder.sol @@ -91,7 +91,7 @@ contract KeystoneForwarder is OwnerIsCreator, ITypeAndVersion, IRouter { uint256 internal constant SIGNATURE_LENGTH = 65; // ================================================================ - // │ IRouter │ + // │ Router │ // ================================================================ mapping(address forwarder => bool) internal s_forwarders; 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 f9768f7105c..5335c0e2868 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddDONTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddDONTest.t.sol @@ -17,12 +17,12 @@ contract CapabilityRegistry_AddDONTest is BaseTest { s_capabilityRegistry.addNodeOperators(_getNodeOperators()); s_capabilityRegistry.addCapabilities(capabilities); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](3); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](3); bytes32[] memory capabilityIds = new bytes32[](2); capabilityIds[0] = s_basicHashedCapabilityId; capabilityIds[1] = s_capabilityWithConfigurationContractId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, @@ -32,14 +32,14 @@ contract CapabilityRegistry_AddDONTest is BaseTest { bytes32[] memory nodeTwoCapabilityIds = new bytes32[](1); nodeTwoCapabilityIds[0] = s_basicHashedCapabilityId; - nodes[1] = CapabilityRegistry.NodeInfo({ + nodes[1] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_TWO_ID, p2pId: P2P_ID_TWO, signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, hashedCapabilityIds: nodeTwoCapabilityIds }); - nodes[2] = CapabilityRegistry.NodeInfo({ + nodes[2] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_THREE_ID, p2pId: P2P_ID_THREE, signer: NODE_OPERATOR_THREE_SIGNER_ADDRESS, @@ -174,6 +174,24 @@ contract CapabilityRegistry_AddDONTest is BaseTest { s_capabilityRegistry.addDON(nodes, capabilityConfigs, true, true, F_VALUE); } + function test_RevertWhen_NodeAlreadyBelongsToWorkflowDON() public { + 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({ + capabilityId: s_basicHashedCapabilityId, + config: BASIC_CAPABILITY_CONFIG + }); + + s_capabilityRegistry.addDON(nodes, capabilityConfigs, true, true, F_VALUE); + + vm.expectRevert(abi.encodeWithSelector(CapabilityRegistry.NodePartOfWorkflowDON.selector, 2, P2P_ID)); + s_capabilityRegistry.addDON(nodes, capabilityConfigs, true, true, F_VALUE); + } + function test_AddDON() public { bytes32[] memory nodes = new bytes32[](2); nodes[0] = P2P_ID; 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 7bb4eb43c4d..9399e257e32 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddNodesTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddNodesTest.t.sol @@ -20,12 +20,12 @@ contract CapabilityRegistry_AddNodesTest is BaseTest { function test_RevertWhen_CalledByNonNodeOperatorAdminAndNonOwner() public { changePrank(STRANGER); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](1); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); bytes32[] memory hashedCapabilityIds = new bytes32[](1); hashedCapabilityIds[0] = s_basicHashedCapabilityId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, @@ -38,14 +38,14 @@ contract CapabilityRegistry_AddNodesTest is BaseTest { function test_RevertWhen_AddingNodeWithInvalidNodeOperator() public { changePrank(ADMIN); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](1); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); bytes32[] memory hashedCapabilityIds = new bytes32[](1); hashedCapabilityIds[0] = s_basicHashedCapabilityId; uint32 invalidNodeOperatorId = 10000; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: invalidNodeOperatorId, // Invalid NOP p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, @@ -60,12 +60,12 @@ contract CapabilityRegistry_AddNodesTest is BaseTest { function test_RevertWhen_SignerAddressEmpty() public { changePrank(NODE_OPERATOR_ONE_ADMIN); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](1); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); bytes32[] memory hashedCapabilityIds = new bytes32[](1); hashedCapabilityIds[0] = s_basicHashedCapabilityId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: bytes32(""), @@ -78,12 +78,12 @@ contract CapabilityRegistry_AddNodesTest is BaseTest { function test_RevertWhen_SignerAddressNotUnique() public { changePrank(NODE_OPERATOR_ONE_ADMIN); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](1); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); bytes32[] memory hashedCapabilityIds = new bytes32[](1); hashedCapabilityIds[0] = s_basicHashedCapabilityId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, @@ -95,7 +95,7 @@ contract CapabilityRegistry_AddNodesTest is BaseTest { changePrank(NODE_OPERATOR_TWO_ADMIN); // Try adding another node with the same signer address - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_TWO_ID, p2pId: P2P_ID_TWO, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, @@ -107,12 +107,12 @@ contract CapabilityRegistry_AddNodesTest is BaseTest { function test_RevertWhen_AddingDuplicateP2PId() public { changePrank(NODE_OPERATOR_ONE_ADMIN); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](1); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); bytes32[] memory hashedCapabilityIds = new bytes32[](1); hashedCapabilityIds[0] = s_basicHashedCapabilityId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, @@ -127,12 +127,12 @@ contract CapabilityRegistry_AddNodesTest is BaseTest { function test_RevertWhen_P2PIDEmpty() public { changePrank(NODE_OPERATOR_ONE_ADMIN); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](1); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); bytes32[] memory hashedCapabilityIds = new bytes32[](1); hashedCapabilityIds[0] = s_basicHashedCapabilityId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: bytes32(""), signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, @@ -145,11 +145,11 @@ contract CapabilityRegistry_AddNodesTest is BaseTest { function test_RevertWhen_AddingNodeWithoutCapabilities() public { changePrank(NODE_OPERATOR_ONE_ADMIN); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](1); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); bytes32[] memory hashedCapabilityIds = new bytes32[](0); - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, @@ -162,12 +162,12 @@ contract CapabilityRegistry_AddNodesTest is BaseTest { function test_RevertWhen_AddingNodeWithInvalidCapability() public { changePrank(NODE_OPERATOR_ONE_ADMIN); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](1); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); bytes32[] memory hashedCapabilityIds = new bytes32[](1); hashedCapabilityIds[0] = s_nonExistentHashedCapabilityId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, @@ -178,15 +178,15 @@ contract CapabilityRegistry_AddNodesTest is BaseTest { s_capabilityRegistry.addNodes(nodes); } - function test_AddsNodeInfo() public { + function test_AddsNodeParams() public { changePrank(NODE_OPERATOR_ONE_ADMIN); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](1); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); bytes32[] memory hashedCapabilityIds = new bytes32[](2); hashedCapabilityIds[0] = s_basicHashedCapabilityId; hashedCapabilityIds[1] = s_capabilityWithConfigurationContractId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, @@ -197,24 +197,24 @@ contract CapabilityRegistry_AddNodesTest is BaseTest { emit NodeAdded(P2P_ID, TEST_NODE_OPERATOR_ONE_ID, NODE_OPERATOR_ONE_SIGNER_ADDRESS); s_capabilityRegistry.addNodes(nodes); - (CapabilityRegistry.NodeInfo memory node, uint32 configCount) = s_capabilityRegistry.getNode(P2P_ID); + CapabilityRegistry.NodeInfo memory node = s_capabilityRegistry.getNode(P2P_ID); assertEq(node.nodeOperatorId, TEST_NODE_OPERATOR_ONE_ID); assertEq(node.p2pId, P2P_ID); assertEq(node.hashedCapabilityIds.length, 2); assertEq(node.hashedCapabilityIds[0], s_basicHashedCapabilityId); assertEq(node.hashedCapabilityIds[1], s_capabilityWithConfigurationContractId); - assertEq(configCount, 1); + assertEq(node.configCount, 1); } function test_OwnerCanAddNodes() public { changePrank(ADMIN); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](1); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); bytes32[] memory hashedCapabilityIds = new bytes32[](2); hashedCapabilityIds[0] = s_basicHashedCapabilityId; hashedCapabilityIds[1] = s_capabilityWithConfigurationContractId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, @@ -225,12 +225,12 @@ contract CapabilityRegistry_AddNodesTest is BaseTest { emit NodeAdded(P2P_ID, TEST_NODE_OPERATOR_ONE_ID, NODE_OPERATOR_ONE_SIGNER_ADDRESS); s_capabilityRegistry.addNodes(nodes); - (CapabilityRegistry.NodeInfo memory node, uint32 configCount) = s_capabilityRegistry.getNode(P2P_ID); + CapabilityRegistry.NodeInfo memory node = s_capabilityRegistry.getNode(P2P_ID); assertEq(node.nodeOperatorId, TEST_NODE_OPERATOR_ONE_ID); assertEq(node.p2pId, P2P_ID); assertEq(node.hashedCapabilityIds.length, 2); assertEq(node.hashedCapabilityIds[0], s_basicHashedCapabilityId); assertEq(node.hashedCapabilityIds[1], s_capabilityWithConfigurationContractId); - assertEq(configCount, 1); + assertEq(node.configCount, 1); } } 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 f53803c4041..d56dce6c271 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_GetDONsTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_GetDONsTest.t.sol @@ -20,12 +20,12 @@ contract CapabilityRegistry_GetDONsTest is BaseTest { s_capabilityRegistry.addNodeOperators(_getNodeOperators()); s_capabilityRegistry.addCapabilities(capabilities); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](2); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](2); bytes32[] memory capabilityIds = new bytes32[](2); capabilityIds[0] = s_basicHashedCapabilityId; capabilityIds[1] = s_capabilityWithConfigurationContractId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, @@ -35,7 +35,7 @@ contract CapabilityRegistry_GetDONsTest is BaseTest { bytes32[] memory nodeTwoCapabilityIds = new bytes32[](1); nodeTwoCapabilityIds[0] = s_basicHashedCapabilityId; - nodes[1] = CapabilityRegistry.NodeInfo({ + nodes[1] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID_TWO, signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, 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 28fc33ab1da..e7a498e08c0 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_GetNodesTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_GetNodesTest.t.sol @@ -16,19 +16,19 @@ contract CapabilityRegistry_GetNodesTest is BaseTest { s_capabilityRegistry.addNodeOperators(_getNodeOperators()); s_capabilityRegistry.addCapabilities(capabilities); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](2); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](2); bytes32[] memory hashedCapabilityIds = new bytes32[](2); hashedCapabilityIds[0] = s_basicHashedCapabilityId; hashedCapabilityIds[1] = s_capabilityWithConfigurationContractId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, hashedCapabilityIds: hashedCapabilityIds }); - nodes[1] = CapabilityRegistry.NodeInfo({ + nodes[1] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID_TWO, signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, @@ -41,7 +41,7 @@ contract CapabilityRegistry_GetNodesTest is BaseTest { } function test_CorrectlyFetchesNodes() public view { - (CapabilityRegistry.NodeInfo[] memory nodes, uint32[] memory configCounts) = s_capabilityRegistry.getNodes(); + CapabilityRegistry.NodeInfo[] memory nodes = s_capabilityRegistry.getNodes(); assertEq(nodes.length, 2); assertEq(nodes[0].nodeOperatorId, TEST_NODE_OPERATOR_ONE_ID); @@ -50,7 +50,7 @@ contract CapabilityRegistry_GetNodesTest is BaseTest { assertEq(nodes[0].hashedCapabilityIds.length, 2); assertEq(nodes[0].hashedCapabilityIds[0], s_basicHashedCapabilityId); assertEq(nodes[0].hashedCapabilityIds[1], s_capabilityWithConfigurationContractId); - assertEq(configCounts[0], 1); + assertEq(nodes[0].configCount, 1); assertEq(nodes[1].nodeOperatorId, TEST_NODE_OPERATOR_ONE_ID); assertEq(nodes[1].signer, NODE_OPERATOR_TWO_SIGNER_ADDRESS); @@ -58,7 +58,7 @@ contract CapabilityRegistry_GetNodesTest is BaseTest { assertEq(nodes[1].hashedCapabilityIds.length, 2); assertEq(nodes[1].hashedCapabilityIds[0], s_basicHashedCapabilityId); assertEq(nodes[1].hashedCapabilityIds[1], s_capabilityWithConfigurationContractId); - assertEq(configCounts[1], 1); + assertEq(nodes[1].configCount, 1); } function test_DoesNotIncludeRemovedNodes() public { @@ -67,7 +67,7 @@ contract CapabilityRegistry_GetNodesTest is BaseTest { nodesToRemove[0] = P2P_ID_TWO; s_capabilityRegistry.removeNodes(nodesToRemove); - (CapabilityRegistry.NodeInfo[] memory nodes, uint32[] memory configCounts) = s_capabilityRegistry.getNodes(); + CapabilityRegistry.NodeInfo[] memory nodes = s_capabilityRegistry.getNodes(); assertEq(nodes.length, 1); assertEq(nodes[0].nodeOperatorId, TEST_NODE_OPERATOR_ONE_ID); @@ -76,6 +76,6 @@ contract CapabilityRegistry_GetNodesTest is BaseTest { assertEq(nodes[0].hashedCapabilityIds.length, 2); assertEq(nodes[0].hashedCapabilityIds[0], s_basicHashedCapabilityId); assertEq(nodes[0].hashedCapabilityIds[1], s_capabilityWithConfigurationContractId); - assertEq(configCounts[0], 1); + assertEq(nodes[0].configCount, 1); } } 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 8d5bfdeea6b..fde382db6f3 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_RemoveDONsTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_RemoveDONsTest.t.sol @@ -18,12 +18,12 @@ contract CapabilityRegistry_RemoveDONsTest is BaseTest { s_capabilityRegistry.addNodeOperators(_getNodeOperators()); s_capabilityRegistry.addCapabilities(capabilities); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](2); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](2); bytes32[] memory capabilityIds = new bytes32[](2); capabilityIds[0] = s_basicHashedCapabilityId; capabilityIds[1] = s_capabilityWithConfigurationContractId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, @@ -33,7 +33,7 @@ contract CapabilityRegistry_RemoveDONsTest is BaseTest { bytes32[] memory nodeTwoCapabilityIds = new bytes32[](1); nodeTwoCapabilityIds[0] = s_basicHashedCapabilityId; - nodes[1] = CapabilityRegistry.NodeInfo({ + nodes[1] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID_TWO, signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, 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 ac59435e35a..14aa5922593 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_RemoveNodesTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_RemoveNodesTest.t.sol @@ -17,26 +17,26 @@ contract CapabilityRegistry_RemoveNodesTest is BaseTest { s_capabilityRegistry.addNodeOperators(_getNodeOperators()); s_capabilityRegistry.addCapabilities(capabilities); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](3); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](3); bytes32[] memory hashedCapabilityIds = new bytes32[](2); hashedCapabilityIds[0] = s_basicHashedCapabilityId; hashedCapabilityIds[1] = s_capabilityWithConfigurationContractId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, hashedCapabilityIds: hashedCapabilityIds }); - nodes[1] = CapabilityRegistry.NodeInfo({ + nodes[1] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_TWO_ID, p2pId: P2P_ID_TWO, signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, hashedCapabilityIds: hashedCapabilityIds }); - nodes[2] = CapabilityRegistry.NodeInfo({ + nodes[2] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_THREE_ID, p2pId: P2P_ID_THREE, signer: NODE_OPERATOR_THREE_SIGNER_ADDRESS, @@ -75,7 +75,7 @@ contract CapabilityRegistry_RemoveNodesTest is BaseTest { s_capabilityRegistry.removeNodes(nodes); } - function test_RevertWhen_NodePartOfDON() public { + function test_RevertWhen_NodePartOfCapabilitiesDON() public { changePrank(ADMIN); bytes32[] memory nodes = new bytes32[](2); nodes[0] = P2P_ID; @@ -88,9 +88,9 @@ contract CapabilityRegistry_RemoveNodesTest is BaseTest { config: BASIC_CAPABILITY_CONFIG }); - s_capabilityRegistry.addDON(nodes, capabilityConfigs, true, true, F_VALUE); + s_capabilityRegistry.addDON(nodes, capabilityConfigs, true, false, F_VALUE); - vm.expectRevert(abi.encodeWithSelector(CapabilityRegistry.NodePartOfDON.selector, P2P_ID)); + vm.expectRevert(abi.encodeWithSelector(CapabilityRegistry.NodePartOfCapabilitiesDON.selector, 1, P2P_ID)); s_capabilityRegistry.removeNodes(nodes); } @@ -114,7 +114,7 @@ contract CapabilityRegistry_RemoveNodesTest is BaseTest { // Try remove nodes bytes32[] memory removedNodes = new bytes32[](1); removedNodes[0] = P2P_ID; - vm.expectRevert(abi.encodeWithSelector(CapabilityRegistry.NodePartOfDON.selector, P2P_ID)); + vm.expectRevert(abi.encodeWithSelector(CapabilityRegistry.NodePartOfWorkflowDON.selector, 1, P2P_ID)); s_capabilityRegistry.removeNodes(removedNodes); // Remove DON @@ -124,12 +124,12 @@ contract CapabilityRegistry_RemoveNodesTest is BaseTest { // Remove node s_capabilityRegistry.removeNodes(removedNodes); - (CapabilityRegistry.NodeInfo memory node, uint32 configCount) = s_capabilityRegistry.getNode(P2P_ID); + CapabilityRegistry.NodeInfo memory node = s_capabilityRegistry.getNode(P2P_ID); assertEq(node.nodeOperatorId, 0); assertEq(node.p2pId, bytes32("")); assertEq(node.signer, bytes32("")); assertEq(node.hashedCapabilityIds.length, 0); - assertEq(configCount, 0); + assertEq(node.configCount, 0); } function test_CanRemoveWhenNodeNoLongerPartOfDON() public { @@ -153,7 +153,7 @@ contract CapabilityRegistry_RemoveNodesTest is BaseTest { // Try remove nodes bytes32[] memory removedNodes = new bytes32[](1); removedNodes[0] = P2P_ID_TWO; - vm.expectRevert(abi.encodeWithSelector(CapabilityRegistry.NodePartOfDON.selector, P2P_ID_TWO)); + vm.expectRevert(abi.encodeWithSelector(CapabilityRegistry.NodePartOfWorkflowDON.selector, 1, P2P_ID_TWO)); s_capabilityRegistry.removeNodes(removedNodes); // Update nodes in DON @@ -164,12 +164,12 @@ contract CapabilityRegistry_RemoveNodesTest is BaseTest { // Remove node s_capabilityRegistry.removeNodes(removedNodes); - (CapabilityRegistry.NodeInfo memory node, uint32 configCount) = s_capabilityRegistry.getNode(P2P_ID_TWO); + CapabilityRegistry.NodeInfo memory node = s_capabilityRegistry.getNode(P2P_ID_TWO); assertEq(node.nodeOperatorId, 0); assertEq(node.p2pId, bytes32("")); assertEq(node.signer, bytes32("")); assertEq(node.hashedCapabilityIds.length, 0); - assertEq(configCount, 0); + assertEq(node.configCount, 0); } function test_RemovesNode() public { @@ -182,12 +182,12 @@ contract CapabilityRegistry_RemoveNodesTest is BaseTest { emit NodeRemoved(P2P_ID); s_capabilityRegistry.removeNodes(nodes); - (CapabilityRegistry.NodeInfo memory node, uint32 configCount) = s_capabilityRegistry.getNode(P2P_ID); + CapabilityRegistry.NodeInfo memory node = s_capabilityRegistry.getNode(P2P_ID); assertEq(node.nodeOperatorId, 0); assertEq(node.p2pId, bytes32("")); assertEq(node.signer, bytes32("")); assertEq(node.hashedCapabilityIds.length, 0); - assertEq(configCount, 0); + assertEq(node.configCount, 0); } function test_CanAddNodeWithSameSignerAddressAfterRemoving() public { @@ -198,27 +198,27 @@ contract CapabilityRegistry_RemoveNodesTest is BaseTest { s_capabilityRegistry.removeNodes(nodes); - CapabilityRegistry.NodeInfo[] memory NodeInfo = new CapabilityRegistry.NodeInfo[](1); + CapabilityRegistry.NodeParams[] memory nodeParams = new CapabilityRegistry.NodeParams[](1); bytes32[] memory hashedCapabilityIds = new bytes32[](2); hashedCapabilityIds[0] = s_basicHashedCapabilityId; hashedCapabilityIds[1] = s_capabilityWithConfigurationContractId; - NodeInfo[0] = CapabilityRegistry.NodeInfo({ + nodeParams[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, hashedCapabilityIds: hashedCapabilityIds }); - s_capabilityRegistry.addNodes(NodeInfo); + s_capabilityRegistry.addNodes(nodeParams); - (CapabilityRegistry.NodeInfo memory node, uint32 configCount) = s_capabilityRegistry.getNode(P2P_ID); + CapabilityRegistry.NodeInfo memory node = s_capabilityRegistry.getNode(P2P_ID); assertEq(node.nodeOperatorId, TEST_NODE_OPERATOR_ONE_ID); assertEq(node.p2pId, P2P_ID); assertEq(node.hashedCapabilityIds.length, 2); assertEq(node.hashedCapabilityIds[0], s_basicHashedCapabilityId); assertEq(node.hashedCapabilityIds[1], s_capabilityWithConfigurationContractId); - assertEq(configCount, 1); + assertEq(node.configCount, 1); } function test_OwnerCanRemoveNodes() public { @@ -231,11 +231,11 @@ contract CapabilityRegistry_RemoveNodesTest is BaseTest { emit NodeRemoved(P2P_ID); s_capabilityRegistry.removeNodes(nodes); - (CapabilityRegistry.NodeInfo memory node, uint32 configCount) = s_capabilityRegistry.getNode(P2P_ID); + CapabilityRegistry.NodeInfo memory node = s_capabilityRegistry.getNode(P2P_ID); assertEq(node.nodeOperatorId, 0); assertEq(node.p2pId, bytes32("")); assertEq(node.signer, bytes32("")); assertEq(node.hashedCapabilityIds.length, 0); - assertEq(configCount, 0); + assertEq(node.configCount, 0); } } 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 1737c19d272..96f6a32bbc7 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_UpdateDONTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_UpdateDONTest.t.sol @@ -18,12 +18,12 @@ contract CapabilityRegistry_UpdateDONTest is BaseTest { s_capabilityRegistry.addNodeOperators(_getNodeOperators()); s_capabilityRegistry.addCapabilities(capabilities); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](3); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](3); bytes32[] memory capabilityIds = new bytes32[](2); capabilityIds[0] = s_basicHashedCapabilityId; capabilityIds[1] = s_capabilityWithConfigurationContractId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, @@ -33,14 +33,14 @@ contract CapabilityRegistry_UpdateDONTest is BaseTest { bytes32[] memory nodeTwoCapabilityIds = new bytes32[](1); nodeTwoCapabilityIds[0] = s_basicHashedCapabilityId; - nodes[1] = CapabilityRegistry.NodeInfo({ + nodes[1] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_TWO_ID, p2pId: P2P_ID_TWO, signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, hashedCapabilityIds: nodeTwoCapabilityIds }); - nodes[2] = CapabilityRegistry.NodeInfo({ + nodes[2] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_THREE_ID, p2pId: P2P_ID_THREE, signer: NODE_OPERATOR_THREE_SIGNER_ADDRESS, 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 da4e811c3ec..2f3f18d39a8 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_UpdateNodesTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_UpdateNodesTest.t.sol @@ -17,12 +17,12 @@ contract CapabilityRegistry_UpdateNodesTest is BaseTest { s_capabilityRegistry.addNodeOperators(_getNodeOperators()); s_capabilityRegistry.addCapabilities(capabilities); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](1); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); bytes32[] memory hashedCapabilityIds = new bytes32[](2); hashedCapabilityIds[0] = s_basicHashedCapabilityId; hashedCapabilityIds[1] = s_capabilityWithConfigurationContractId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, @@ -32,7 +32,7 @@ contract CapabilityRegistry_UpdateNodesTest is BaseTest { changePrank(NODE_OPERATOR_ONE_ADMIN); s_capabilityRegistry.addNodes(nodes); - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_TWO_ID, p2pId: P2P_ID_TWO, signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, @@ -45,12 +45,12 @@ contract CapabilityRegistry_UpdateNodesTest is BaseTest { function test_RevertWhen_CalledByNonNodeOperatorAdminAndNonOwner() public { changePrank(STRANGER); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](1); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); bytes32[] memory hashedCapabilityIds = new bytes32[](1); hashedCapabilityIds[0] = s_basicHashedCapabilityId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, @@ -63,12 +63,12 @@ contract CapabilityRegistry_UpdateNodesTest is BaseTest { function test_RevertWhen_NodeDoesNotExist() public { changePrank(NODE_OPERATOR_ONE_ADMIN); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](1); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); bytes32[] memory hashedCapabilityIds = new bytes32[](1); hashedCapabilityIds[0] = s_basicHashedCapabilityId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: INVALID_P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, @@ -81,12 +81,12 @@ contract CapabilityRegistry_UpdateNodesTest is BaseTest { function test_RevertWhen_P2PIDEmpty() public { changePrank(NODE_OPERATOR_ONE_ADMIN); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](1); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); bytes32[] memory hashedCapabilityIds = new bytes32[](1); hashedCapabilityIds[0] = s_basicHashedCapabilityId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: bytes32(""), signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, @@ -99,12 +99,12 @@ contract CapabilityRegistry_UpdateNodesTest is BaseTest { function test_RevertWhen_SignerAddressEmpty() public { changePrank(NODE_OPERATOR_ONE_ADMIN); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](1); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); bytes32[] memory hashedCapabilityIds = new bytes32[](1); hashedCapabilityIds[0] = s_basicHashedCapabilityId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: bytes32(""), @@ -117,12 +117,12 @@ contract CapabilityRegistry_UpdateNodesTest is BaseTest { function test_RevertWhen_NodeSignerAlreadyAssignedToAnotherNode() public { changePrank(NODE_OPERATOR_ONE_ADMIN); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](1); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); bytes32[] memory hashedCapabilityIds = new bytes32[](1); hashedCapabilityIds[0] = s_basicHashedCapabilityId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, @@ -135,11 +135,11 @@ contract CapabilityRegistry_UpdateNodesTest is BaseTest { function test_RevertWhen_UpdatingNodeWithoutCapabilities() public { changePrank(NODE_OPERATOR_ONE_ADMIN); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](1); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); bytes32[] memory hashedCapabilityIds = new bytes32[](0); - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, @@ -152,12 +152,12 @@ contract CapabilityRegistry_UpdateNodesTest is BaseTest { function test_RevertWhen_AddingNodeWithInvalidCapability() public { changePrank(NODE_OPERATOR_ONE_ADMIN); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](1); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); bytes32[] memory hashedCapabilityIds = new bytes32[](1); hashedCapabilityIds[0] = s_nonExistentHashedCapabilityId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, @@ -171,12 +171,12 @@ contract CapabilityRegistry_UpdateNodesTest is BaseTest { function test_CanUpdateParamsIfNodeSignerAddressNoLongerUsed() public { changePrank(NODE_OPERATOR_ONE_ADMIN); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](1); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); bytes32[] memory hashedCapabilityIds = new bytes32[](1); hashedCapabilityIds[0] = s_basicHashedCapabilityId; // Set node one's signer to another address - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: bytes32(abi.encodePacked(address(6666))), @@ -187,7 +187,7 @@ contract CapabilityRegistry_UpdateNodesTest is BaseTest { // Set node two's signer to node one's signer changePrank(NODE_OPERATOR_TWO_ADMIN); - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_TWO_ID, p2pId: P2P_ID_TWO, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, @@ -195,18 +195,18 @@ contract CapabilityRegistry_UpdateNodesTest is BaseTest { }); s_capabilityRegistry.updateNodes(nodes); - (CapabilityRegistry.NodeInfo memory node, ) = s_capabilityRegistry.getNode(P2P_ID_TWO); + CapabilityRegistry.NodeInfo memory node = s_capabilityRegistry.getNode(P2P_ID_TWO); assertEq(node.signer, NODE_OPERATOR_ONE_SIGNER_ADDRESS); } - function test_UpdatesNodeInfo() public { + function test_UpdatesNodeParams() public { changePrank(NODE_OPERATOR_ONE_ADMIN); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](1); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); bytes32[] memory hashedCapabilityIds = new bytes32[](1); hashedCapabilityIds[0] = s_basicHashedCapabilityId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NEW_NODE_SIGNER, @@ -217,23 +217,23 @@ contract CapabilityRegistry_UpdateNodesTest is BaseTest { emit NodeUpdated(P2P_ID, TEST_NODE_OPERATOR_ONE_ID, NEW_NODE_SIGNER); s_capabilityRegistry.updateNodes(nodes); - (CapabilityRegistry.NodeInfo memory node, uint32 configCount) = s_capabilityRegistry.getNode(P2P_ID); + CapabilityRegistry.NodeInfo memory node = s_capabilityRegistry.getNode(P2P_ID); assertEq(node.nodeOperatorId, TEST_NODE_OPERATOR_ONE_ID); assertEq(node.p2pId, P2P_ID); assertEq(node.signer, NEW_NODE_SIGNER); assertEq(node.hashedCapabilityIds.length, 1); assertEq(node.hashedCapabilityIds[0], s_basicHashedCapabilityId); - assertEq(configCount, 2); + assertEq(node.configCount, 2); } function test_OwnerCanUpdateNodes() public { changePrank(ADMIN); - CapabilityRegistry.NodeInfo[] memory nodes = new CapabilityRegistry.NodeInfo[](1); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); bytes32[] memory hashedCapabilityIds = new bytes32[](1); hashedCapabilityIds[0] = s_basicHashedCapabilityId; - nodes[0] = CapabilityRegistry.NodeInfo({ + nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NEW_NODE_SIGNER, @@ -244,12 +244,12 @@ contract CapabilityRegistry_UpdateNodesTest is BaseTest { emit NodeUpdated(P2P_ID, TEST_NODE_OPERATOR_ONE_ID, NEW_NODE_SIGNER); s_capabilityRegistry.updateNodes(nodes); - (CapabilityRegistry.NodeInfo memory node, uint32 configCount) = s_capabilityRegistry.getNode(P2P_ID); + CapabilityRegistry.NodeInfo memory node = s_capabilityRegistry.getNode(P2P_ID); assertEq(node.nodeOperatorId, TEST_NODE_OPERATOR_ONE_ID); assertEq(node.p2pId, P2P_ID); assertEq(node.signer, NEW_NODE_SIGNER); assertEq(node.hashedCapabilityIds.length, 1); assertEq(node.hashedCapabilityIds[0], s_basicHashedCapabilityId); - assertEq(configCount, 2); + assertEq(node.configCount, 2); } } diff --git a/core/capabilities/reader.go b/core/capabilities/reader.go index 0e664a73947..a3d55751a8e 100644 --- a/core/capabilities/reader.go +++ b/core/capabilities/reader.go @@ -91,14 +91,14 @@ func (r *remoteRegistryReader) state(ctx context.Context) (state, error) { idsToCapabilities[caps.HashedCapabilityIds[i]] = c } - nodes := &kcr.GetNodes{} + nodes := []kcr.CapabilityRegistryNodeInfo{} err = r.r.GetLatestValue(ctx, "capabilityRegistry", "getNodes", nil, &nodes) if err != nil { return state{}, err } idsToNodes := map[p2ptypes.PeerID]kcr.CapabilityRegistryNodeInfo{} - for _, node := range nodes.NodeInfo { + for _, node := range nodes { idsToNodes[node.P2pId] = node } diff --git a/core/capabilities/reader_test.go b/core/capabilities/reader_test.go index 395a08c1e19..ded525f6142 100644 --- a/core/capabilities/reader_test.go +++ b/core/capabilities/reader_test.go @@ -154,25 +154,31 @@ func TestReader_Integration(t *testing.T) { randomWord(), } - nodes := []kcr.CapabilityRegistryNodeInfo{ + signersSet := [][32]byte{ + randomWord(), + randomWord(), + randomWord(), + } + + nodes := []kcr.CapabilityRegistryNodeParams{ { // The first NodeOperatorId has id 1 since the id is auto-incrementing. NodeOperatorId: uint32(1), - Signer: randomWord(), + Signer: signersSet[0], P2pId: nodeSet[0], HashedCapabilityIds: [][32]byte{cid}, }, { // The first NodeOperatorId has id 1 since the id is auto-incrementing. NodeOperatorId: uint32(1), - Signer: randomWord(), + Signer: signersSet[1], P2pId: nodeSet[1], HashedCapabilityIds: [][32]byte{cid}, }, { // The first NodeOperatorId has id 1 since the id is auto-incrementing. NodeOperatorId: uint32(1), - Signer: randomWord(), + Signer: signersSet[2], P2pId: nodeSet[2], HashedCapabilityIds: [][32]byte{cid}, }, @@ -225,11 +231,44 @@ func TestReader_Integration(t *testing.T) { CapabilityConfigurations: cfgs, }, s.IDsToDONs[1]) + nodesInfo := []kcr.CapabilityRegistryNodeInfo{ + { + // The first NodeOperatorId has id 1 since the id is auto-incrementing. + NodeOperatorId: uint32(1), + ConfigCount: 1, + WorkflowDONId: 1, + Signer: signersSet[0], + P2pId: nodeSet[0], + HashedCapabilityIds: [][32]byte{cid}, + CapabilitiesDONIds: []*big.Int{}, + }, + { + // The first NodeOperatorId has id 1 since the id is auto-incrementing. + NodeOperatorId: uint32(1), + ConfigCount: 1, + WorkflowDONId: 1, + Signer: signersSet[1], + P2pId: nodeSet[1], + HashedCapabilityIds: [][32]byte{cid}, + CapabilitiesDONIds: []*big.Int{}, + }, + { + // The first NodeOperatorId has id 1 since the id is auto-incrementing. + NodeOperatorId: uint32(1), + ConfigCount: 1, + WorkflowDONId: 1, + Signer: signersSet[2], + P2pId: nodeSet[2], + HashedCapabilityIds: [][32]byte{cid}, + CapabilitiesDONIds: []*big.Int{}, + }, + } + assert.Len(t, s.IDsToNodes, 3) assert.Equal(t, map[p2ptypes.PeerID]kcr.CapabilityRegistryNodeInfo{ - nodeSet[0]: nodes[0], - nodeSet[1]: nodes[1], - nodeSet[2]: nodes[2], + nodeSet[0]: nodesInfo[0], + nodeSet[1]: nodesInfo[1], + nodeSet[2]: nodesInfo[2], }, s.IDsToNodes) node, err := reader.LocalNode(ctx) 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 6925beaed72..3b8f26b4983 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 @@ -55,9 +55,12 @@ type CapabilityRegistryDONInfo struct { type CapabilityRegistryNodeInfo struct { NodeOperatorId uint32 + ConfigCount uint32 + WorkflowDONId uint32 Signer [32]byte P2pId [32]byte HashedCapabilityIds [][32]byte + CapabilitiesDONIds []*big.Int } type CapabilityRegistryNodeOperator struct { @@ -65,9 +68,16 @@ type CapabilityRegistryNodeOperator struct { Name string } +type CapabilityRegistryNodeParams struct { + NodeOperatorId uint32 + Signer [32]byte + P2pId [32]byte + HashedCapabilityIds [][32]byte +} + var CapabilityRegistryMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AccessForbidden\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"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\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"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\"}],\"name\":\"NodeAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"NodeDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"NodeDoesNotSupportCapability\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"}],\"name\":\"NodeOperatorDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"NodePartOfDON\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityConfigured\",\"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\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"}],\"name\":\"NodeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NodeOperatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"}],\"name\":\"NodeOperatorRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"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\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"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\":\"capabilities\",\"type\":\"tuple[]\"}],\"name\":\"addCapabilities\",\"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\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"}],\"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\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"name\":\"deprecateCapabilities\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCapabilities\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"},{\"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\":\"capabilities\",\"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\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"getCapabilityConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"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\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"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\":[],\"name\":\"getDONs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"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\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"}],\"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\":\"nodeInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint32[]\",\"name\":\"configCounts\",\"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\":\"uint32[]\",\"name\":\"nodeOperatorIds\",\"type\":\"uint32[]\"}],\"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\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"}],\"name\":\"updateDON\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"nodeOperatorIds\",\"type\":\"uint32[]\"},{\"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: "0x6080604052600e80546001600160401b0319166401000000011790553480156200002857600080fd5b503380600081620000805760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000b357620000b381620000bc565b50505062000167565b336001600160a01b03821603620001165760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000077565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b614e4180620001776000396000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80635e65e309116100ee5780638da5cb5b11610097578063d8bc7b6811610071578063d8bc7b68146103f7578063ddbe4f821461040a578063e29581aa14610420578063f2fde38b1461043657600080fd5b80638da5cb5b1461039c5780639cb7c5f4146103c4578063d59a79f6146103e457600080fd5b806373ac22b4116100c857806373ac22b41461036e57806379ba50971461038157806386fa42461461038957600080fd5b80635e65e3091461033357806366acaa3314610346578063715f52951461035b57600080fd5b8063235374051161015b578063398f377311610135578063398f3773146102cb5780633f2a13c9146102de57806350c946fe146102ff5780635d83d9671461032057600080fd5b80632353740514610285578063275459f2146102a55780632c01a1e8146102b857600080fd5b80631d05394c1161018c5780631d05394c1461023b578063214502431461025057806322bdbcbc1461026557600080fd5b80630fe5800a146101b357806312570011146101d9578063181f5a77146101fc575b600080fd5b6101c66101c1366004613c55565b610449565b6040519081526020015b60405180910390f35b6101ec6101e7366004613cb9565b61047d565b60405190151581526020016101d0565b604080518082018252601881527f4361706162696c697479526567697374727920312e302e300000000000000000602082015290516101d09190613d40565b61024e610249366004613d98565b61048a565b005b610258610646565b6040516101d09190613ef8565b610278610273366004613f91565b6107ab565b6040516101d09190613fe9565b610298610293366004613f91565b610898565b6040516101d09190613ffc565b61024e6102b3366004613d98565b6108dc565b61024e6102c6366004613d98565b6109b3565b61024e6102d9366004613d98565b610bd6565b6102f16102ec36600461400f565b610d9e565b6040516101d0929190614039565b61031261030d366004613cb9565b610f8a565b6040516101d0929190614097565b61024e61032e366004613d98565b61102f565b61024e610341366004613d98565b61117d565b61034e6115ef565b6040516101d091906140bf565b61024e610369366004613d98565b6117da565b61024e61037c366004613d98565b611895565b61024e611d3a565b61024e610397366004614132565b611e37565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b6103d76103d2366004613cb9565b61217d565b6040516101d0919061425a565b61024e6103f236600461428c565b612382565b61024e610405366004614341565b61244b565b610412612515565b6040516101d09291906143e6565b610428612878565b6040516101d0929190614476565b61024e61044436600461454c565b6129e7565b6000828260405160200161045e929190614039565b6040516020818303038152906040528051906020012090505b92915050565b60006104776005836129fb565b610492612a16565b60005b818110156106415760008383838181106104b1576104b1614567565b90506020020160208101906104c69190613f91565b63ffffffff8082166000908152600d60209081526040808320805464010000000090049094168084526001850190925282209394509192905b61050882612a99565b8110156105605761054f8563ffffffff16600c60006105308587612aa390919063ffffffff16565b8152602001908152602001600020600401612aaf90919063ffffffff16565b50610559816145c5565b90506104ff565b508254640100000000900463ffffffff166000036105b7576040517f2b62be9b00000000000000000000000000000000000000000000000000000000815263ffffffff851660048201526024015b60405180910390fd5b63ffffffff84166000818152600d6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffff00000000000000000000001690558051938452908301919091527ff264aae70bf6a9d90e68e0f9b393f4e7fbea67b063b0f336e0b36c1581703651910160405180910390a1505050508061063a906145c5565b9050610495565b505050565b600e54606090640100000000900463ffffffff1660006106676001836145fd565b63ffffffff1667ffffffffffffffff81111561068557610685613aef565b60405190808252806020026020018201604052801561070c57816020015b6040805160e081018252600080825260208083018290529282018190526060808301829052608083019190915260a0820181905260c082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816106a35790505b509050600060015b8363ffffffff168163ffffffff1610156107885763ffffffff8082166000908152600d602052604090205416156107785761074e81612abb565b83838151811061076057610760614567565b602002602001018190525081610775906145c5565b91505b6107818161461a565b9050610714565b506107946001846145fd565b63ffffffff1681146107a4578082525b5092915050565b60408051808201909152600081526060602082015263ffffffff82166000908152600b60209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff168352600181018054919284019161080f9061463d565b80601f016020809104026020016040519081016040528092919081815260200182805461083b9061463d565b80156108885780601f1061085d57610100808354040283529160200191610888565b820191906000526020600020905b81548152906001019060200180831161086b57829003601f168201915b5050505050815250509050919050565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c081019190915261047782612abb565b6108e4612a16565b60005b63ffffffff811682111561064157600083838363ffffffff1681811061090f5761090f614567565b90506020020160208101906109249190613f91565b63ffffffff81166000908152600b6020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815591925061096f6001830182613a82565b505060405163ffffffff8216907fa59268ca81d40429e65ccea5385b59cf2d3fc6519371dee92f8eb1dae5107a7a90600090a2506109ac8161461a565b90506108e7565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b82811015610bd05760008484838181106109ed576109ed614567565b602090810292909201356000818152600c90935260409092206001810154929350919050610a4a576040517fd82f6adb000000000000000000000000000000000000000000000000000000008152600481018390526024016105ae565b6000610a5882600401612a99565b1115610a93576040517f34a4a3f6000000000000000000000000000000000000000000000000000000008152600481018390526024016105ae565b83158015610acd5750805463ffffffff166000908152600b602052604090205473ffffffffffffffffffffffffffffffffffffffff163314155b15610b06576040517f9473075d0000000000000000000000000000000000000000000000000000000081523360048201526024016105ae565b6001810154610b1790600790612aaf565b506002810154610b2990600990612aaf565b506000828152600c6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016815560018101829055600281018290559060048201818181610b7e8282613abc565b5050505050507f5254e609a97bab37b7cc79fe128f85c097bd6015c6e1624ae0ba392eb975320582604051610bb591815260200190565b60405180910390a1505080610bc9906145c5565b90506109d1565b50505050565b610bde612a16565b60005b81811015610641576000838383818110610bfd57610bfd614567565b9050602002810190610c0f9190614690565b610c18906146ce565b805190915073ffffffffffffffffffffffffffffffffffffffff16610c69576040517feeacd93900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e54604080518082018252835173ffffffffffffffffffffffffffffffffffffffff908116825260208086015181840190815263ffffffff9095166000818152600b909252939020825181547fffffffffffffffffffffffff00000000000000000000000000000000000000001692169190911781559251919290916001820190610cf59082614786565b5050600e8054909150600090610d109063ffffffff1661461a565b91906101000a81548163ffffffff021916908363ffffffff160217905550816000015173ffffffffffffffffffffffffffffffffffffffff168163ffffffff167f78e94ca80be2c30abc061b99e7eb8583b1254781734b1e3ce339abb57da2fe8e8460200151604051610d839190613d40565b60405180910390a3505080610d97906145c5565b9050610be1565b63ffffffff8083166000908152600d60209081526040808320805464010000000090049094168084526001909401825280832085845260030190915281208054606093849390929091610df09061463d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1c9061463d565b8015610e695780601f10610e3e57610100808354040283529160200191610e69565b820191906000526020600020905b815481529060010190602001808311610e4c57829003601f168201915b5050506000888152600260208190526040909120015492935060609262010000900473ffffffffffffffffffffffffffffffffffffffff16159150610f7c905057600086815260026020819052604091829020015490517f8318ed5d00000000000000000000000000000000000000000000000000000000815263ffffffff891660048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690638318ed5d90602401600060405180830381865afa158015610f33573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610f7991908101906148a0565b90505b9093509150505b9250929050565b6040805160808101825260008082526020820181905291810191909152606080820152604080516080810182526000848152600c6020908152838220805463ffffffff80821686526001830154848701526002830154868801526401000000009091041683526003019052918220606082019061100690612d8f565b90526000938452600c602052604090932054929364010000000090930463ffffffff1692915050565b611037612a16565b60005b8181101561064157600083838381811061105657611056614567565b9050602002013590506110738160036129fb90919063ffffffff16565b6110ac576040517fe181733f000000000000000000000000000000000000000000000000000000008152600481018290526024016105ae565b6110b7600582612d9c565b6110f0576040517ff7d7a294000000000000000000000000000000000000000000000000000000008152600481018290526024016105ae565b6000818152600260205260408120906111098282613a82565b611117600183016000613a82565b5060020180547fffffffffffffffffffff0000000000000000000000000000000000000000000016905560405181907fdcea1b78b6ddc31592a94607d537543fcaafda6cc52d6d5cc7bbfca1422baf2190600090a250611176816145c5565b905061103a565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b82811015610bd05760008484838181106111b7576111b7614567565b90506020028101906111c9919061490e565b6111d290614942565b805163ffffffff166000908152600b602090815260408083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff1682526001810180549596509394919390928401916112289061463d565b80601f01602080910402602001604051908101604052809291908181526020018280546112549061463d565b80156112a15780601f10611276576101008083540402835291602001916112a1565b820191906000526020600020905b81548152906001019060200180831161128457829003601f168201915b5050505050815250509050831580156112d15750805173ffffffffffffffffffffffffffffffffffffffff163314155b1561130a576040517f9473075d0000000000000000000000000000000000000000000000000000000081523360048201526024016105ae565b6040808301516000908152600c60205220600181015461135e5782604001516040517fd82f6adb0000000000000000000000000000000000000000000000000000000081526004016105ae91815260200190565b6020830151158061138e5750826020015181600101541415801561138e5750602083015161138e906007906129fb565b156113c5576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060830151805160000361140757806040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016105ae9190614a15565b8154640100000000900463ffffffff168260046114238361461a565b82546101009290920a63ffffffff8181021990931691831602179091558354640100000000900416905060005b825181101561151b5761148683828151811061146e5761146e614567565b602002602001015160036129fb90919063ffffffff16565b6114be57826040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016105ae9190614a15565b61150a8382815181106114d3576114d3614567565b60200260200101518560030160008563ffffffff1663ffffffff168152602001908152602001600020612d9c90919063ffffffff16565b50611514816145c5565b9050611450565b50845183547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff9091161783556040850151600284015560018301546020860151811461158d57611572600782612aaf565b5060208601516001850181905561158b90600790612d9c565b505b85516040808801516020808a015183519283529082015263ffffffff909216917f4b5b465e22eea0c3d40c30e936643245b80d19b2dcf75788c0699fe8d8db645b910160405180910390a2505050505050806115e8906145c5565b905061119b565b600e5460609063ffffffff1660006116086001836145fd565b63ffffffff1667ffffffffffffffff81111561162657611626613aef565b60405190808252806020026020018201604052801561166c57816020015b6040805180820190915260008152606060208201528152602001906001900390816116445790505b509050600060015b8363ffffffff168163ffffffff1610156117c45763ffffffff81166000908152600b602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117b45763ffffffff81166000908152600b60209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff16835260018101805491928401916117089061463d565b80601f01602080910402602001604051908101604052809291908181526020018280546117349061463d565b80156117815780601f1061175657610100808354040283529160200191611781565b820191906000526020600020905b81548152906001019060200180831161176457829003601f168201915b50505050508152505083838151811061179c5761179c614567565b6020026020010181905250816117b1906145c5565b91505b6117bd8161461a565b9050611674565b50600e546107949060019063ffffffff166145fd565b6117e2612a16565b60005b8181101561064157600083838381811061180157611801614567565b90506020028101906118139190614a28565b61181c90614a6b565b9050600061183282600001518360200151610449565b905061183f600382612d9c565b611878576040517febf52551000000000000000000000000000000000000000000000000000000008152600481018290526024016105ae565b6118828183612da8565b50508061188e906145c5565b90506117e5565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b82811015610bd05760008484838181106118cf576118cf614567565b90506020028101906118e1919061490e565b6118ea90614942565b805163ffffffff166000908152600b602090815260408083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff1682526001810180549596509394919390928401916119409061463d565b80601f016020809104026020016040519081016040528092919081815260200182805461196c9061463d565b80156119b95780601f1061198e576101008083540402835291602001916119b9565b820191906000526020600020905b81548152906001019060200180831161199c57829003601f168201915b50505091909252505081519192505073ffffffffffffffffffffffffffffffffffffffff16611a1f5781516040517fadd9ae1e00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024016105ae565b83158015611a445750805173ffffffffffffffffffffffffffffffffffffffff163314155b15611a7d576040517f9473075d0000000000000000000000000000000000000000000000000000000081523360048201526024016105ae565b6040808301516000908152600c60205220600181015415611ad25782604001516040517f546184830000000000000000000000000000000000000000000000000000000081526004016105ae91815260200190565b6040830151611b155782604001516040517f64e2ee920000000000000000000000000000000000000000000000000000000081526004016105ae91815260200190565b60208301511580611b3257506020830151611b32906007906129fb565b15611b69576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608301518051600003611bab57806040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016105ae9190614a15565b81548290600490611bc990640100000000900463ffffffff1661461a565b82546101009290920a63ffffffff818102199093169183160217909155825464010000000090041660005b8251811015611c7057611c1283828151811061146e5761146e614567565b611c4a57826040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016105ae9190614a15565b611c5f8382815181106114d3576114d3614567565b50611c69816145c5565b9050611bf4565b50845183547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff91821617845560408601516002850155602086015160018501819055611cc69160079190612d9c16565b506040850151611cd890600990612d9c565b50845160408087015160208089015183519283529082015263ffffffff909216917f74becb12a5e8fd0e98077d02dfba8f647c9670c9df177e42c2418cf17a636f05910160405180910390a2505050505080611d33906145c5565b90506118b3565b60015473ffffffffffffffffffffffffffffffffffffffff163314611dbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016105ae565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b828114611e7a576040517fab8b67c600000000000000000000000000000000000000000000000000000000815260048101849052602481018290526044016105ae565b6000805473ffffffffffffffffffffffffffffffffffffffff16905b84811015612175576000868683818110611eb257611eb2614567565b9050602002016020810190611ec79190613f91565b63ffffffff81166000908152600b6020526040902080549192509073ffffffffffffffffffffffffffffffffffffffff16611f36576040517fadd9ae1e00000000000000000000000000000000000000000000000000000000815263ffffffff831660048201526024016105ae565b6000868685818110611f4a57611f4a614567565b9050602002810190611f5c9190614690565b611f65906146ce565b805190915073ffffffffffffffffffffffffffffffffffffffff16611fb6576040517feeacd93900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805173ffffffffffffffffffffffffffffffffffffffff163314801590611ff357503373ffffffffffffffffffffffffffffffffffffffff861614155b1561202c576040517f9473075d0000000000000000000000000000000000000000000000000000000081523360048201526024016105ae565b8051825473ffffffffffffffffffffffffffffffffffffffff90811691161415806120a857506020808201516040516120659201613d40565b604051602081830303815290604052805190602001208260010160405160200161208f9190614b11565b6040516020818303038152906040528051906020012014155b1561216157805182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602081015160018301906121029082614786565b50806000015173ffffffffffffffffffffffffffffffffffffffff168363ffffffff167f86f41145bde5dd7f523305452e4aad3685508c181432ec733d5f345009358a2883602001516040516121589190613d40565b60405180910390a35b5050508061216e906145c5565b9050611e96565b505050505050565b6121ad6040805160a081018252606080825260208201529081016000815260200160008152600060209091015290565b60008281526002602052604090819020815160a081019092528054829082906121d59061463d565b80601f01602080910402602001604051908101604052809291908181526020018280546122019061463d565b801561224e5780601f106122235761010080835404028352916020019161224e565b820191906000526020600020905b81548152906001019060200180831161223157829003601f168201915b505050505081526020016001820180546122679061463d565b80601f01602080910402602001604051908101604052809291908181526020018280546122939061463d565b80156122e05780601f106122b5576101008083540402835291602001916122e0565b820191906000526020600020905b8154815290600101906020018083116122c357829003601f168201915b5050509183525050600282015460209091019060ff1660038111156123075761230761419e565b60038111156123185761231861419e565b81526020016002820160019054906101000a900460ff1660018111156123405761234061419e565b60018111156123515761235161419e565b81526002919091015462010000900473ffffffffffffffffffffffffffffffffffffffff1660209091015292915050565b61238a612a16565b63ffffffff8089166000908152600d60205260408120546401000000009004909116908190036123ee576040517f2b62be9b00000000000000000000000000000000000000000000000000000000815263ffffffff8a1660048201526024016105ae565b612440888888886040518060a001604052808f63ffffffff168152602001876124169061461a565b97508763ffffffff1681526020018a1515815260200189151581526020018860ff1681525061303c565b505050505050505050565b612453612a16565b600e805460009164010000000090910463ffffffff169060046124758361461a565b82546101009290920a63ffffffff81810219909316918316021790915581166000818152600d602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001684179055815160a08101835292835260019083015286151590820152841515606082015260ff8416608082015290915061250b90899089908990899061303c565b5050505050505050565b6060806125226003612d8f565b915060006125306005612a99565b835161253c9190614bba565b90508067ffffffffffffffff81111561255757612557613aef565b6040519080825280602002602001820160405280156125b857816020015b6125a56040805160a081018252606080825260208201529081016000815260200160008152600060209091015290565b8152602001906001900390816125755790505b50915060008167ffffffffffffffff8111156125d6576125d6613aef565b6040519080825280602002602001820160405280156125ff578160200160208202803683370190505b5090506000805b855181101561286e57600086828151811061262357612623614567565b602002602001015190506126418160056129fb90919063ffffffff16565b61285d5760008181526002602052604090819020815160a0810190925280548290829061266d9061463d565b80601f01602080910402602001604051908101604052809291908181526020018280546126999061463d565b80156126e65780601f106126bb576101008083540402835291602001916126e6565b820191906000526020600020905b8154815290600101906020018083116126c957829003601f168201915b505050505081526020016001820180546126ff9061463d565b80601f016020809104026020016040519081016040528092919081815260200182805461272b9061463d565b80156127785780601f1061274d57610100808354040283529160200191612778565b820191906000526020600020905b81548152906001019060200180831161275b57829003601f168201915b5050509183525050600282015460209091019060ff16600381111561279f5761279f61419e565b60038111156127b0576127b061419e565b81526020016002820160019054906101000a900460ff1660018111156127d8576127d861419e565b60018111156127e9576127e961419e565b81526002919091015462010000900473ffffffffffffffffffffffffffffffffffffffff16602090910152865187908590811061282857612828614567565b60200260200101819052508084848151811061284657612846614567565b602090810291909101015261285a836145c5565b92505b50612867816145c5565b9050612606565b5090949293505050565b60608060006128876009612d8f565b9050805167ffffffffffffffff8111156128a3576128a3613aef565b60405190808252806020026020018201604052801561291257816020015b60408051608081018252600080825260208083018290529282015260608082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816128c15790505b509250805167ffffffffffffffff81111561292f5761292f613aef565b604051908082528060200260200182016040528015612958578160200160208202803683370190505b50915060005b81518110156129e15761298982828151811061297c5761297c614567565b6020026020010151610f8a565b85838151811061299b5761299b614567565b602002602001018584815181106129b4576129b4614567565b602002602001018263ffffffff1663ffffffff168152508290525050806129da906145c5565b905061295e565b50509091565b6129ef612a16565b6129f8816136e4565b50565b600081815260018301602052604081205415155b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314612a97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016105ae565b565b6000610477825490565b6000612a0f83836137d9565b6000612a0f8383613803565b6040805160e0810182526000808252602080830182905282840182905260608084018390526080840183905260a0840181905260c084015263ffffffff8581168352600d8252848320805464010000000090049091168084526001909101825284832060028101805487518186028101860190985280885295969295919493909190830182828015612b6c57602002820191906000526020600020905b815481526020019060010190808311612b58575b505050505090506000815167ffffffffffffffff811115612b8f57612b8f613aef565b604051908082528060200260200182016040528015612bd557816020015b604080518082019091526000815260606020820152815260200190600190039081612bad5790505b50905060005b8151811015612cf6576040518060400160405280848381518110612c0157612c01614567565b60200260200101518152602001856003016000868581518110612c2657612c26614567565b602002602001015181526020019081526020016000208054612c479061463d565b80601f0160208091040260200160405190810160405280929190818152602001828054612c739061463d565b8015612cc05780601f10612c9557610100808354040283529160200191612cc0565b820191906000526020600020905b815481529060010190602001808311612ca357829003601f168201915b5050505050815250828281518110612cda57612cda614567565b602002602001018190525080612cef906145c5565b9050612bdb565b506040805160e08101825263ffffffff8089166000818152600d6020818152868320548086168752948b168187015260ff680100000000000000008604811697870197909752690100000000000000000085048716151560608701529290915290526a010000000000000000000090049091161515608082015260a08101612d7d85612d8f565b81526020019190915295945050505050565b60606000612a0f836138f6565b6000612a0f8383613952565b608081015173ffffffffffffffffffffffffffffffffffffffff1615612ef657608081015173ffffffffffffffffffffffffffffffffffffffff163b1580612ea1575060808101516040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f78bea72100000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116906301ffc9a790602401602060405180830381865afa158015612e7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9f9190614bcd565b155b15612ef65760808101516040517fabb5e3fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016105ae565b600082815260026020526040902081518291908190612f159082614786565b5060208201516001820190612f2a9082614786565b5060408201516002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001836003811115612f6c57612f6c61419e565b021790555060608201516002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100836001811115612fb357612fb361419e565b0217905550608091909101516002909101805473ffffffffffffffffffffffffffffffffffffffff90921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff90921691909117905560405182907f04f0a9bcf3f3a3b42a4d7ca081119755f82ebe43e0d30c8f7292c4fe0dc4a2ae90600090a25050565b805163ffffffff9081166000908152600d602090815260408083208286015190941683526001909301905220608082015160ff16158061308e575060808201518590613089906001614bea565b60ff16115b156130d75760808201516040517f25b4d61800000000000000000000000000000000000000000000000000000000815260ff9091166004820152602481018690526044016105ae565b6001826020015163ffffffff16111561318357815163ffffffff166000908152600d60209081526040822090840151600191820191839161311891906145fd565b63ffffffff1663ffffffff168152602001908152602001600020905060005b61314082612a99565b8110156131805761316f846000015163ffffffff16600c60006105308587600001612aa390919063ffffffff16565b50613179816145c5565b9050613137565b50505b60005b8581101561326d576131b38787838181106131a3576131a3614567565b8592602090910201359050612d9c565b6132145782518787838181106131cb576131cb614567565b6040517f636e405700000000000000000000000000000000000000000000000000000000815263ffffffff909416600485015260200291909101356024830152506044016105ae565b825161325c9063ffffffff16600c60008a8a8681811061323657613236614567565b905060200201358152602001908152602001600020600401612d9c90919063ffffffff16565b50613266816145c5565b9050613186565b5060005b83811015613559573685858381811061328c5761328c614567565b905060200281019061329e9190614690565b90506132ac600382356129fb565b6132e5576040517fe181733f000000000000000000000000000000000000000000000000000000008152813560048201526024016105ae565b6132f1600582356129fb565b1561332b576040517ff7d7a294000000000000000000000000000000000000000000000000000000008152813560048201526024016105ae565b80356000908152600384016020526040812080546133489061463d565b905011156133945783516040517f3927d08000000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152813560248201526044016105ae565b60005b878110156134a65761343b8235600c60008c8c868181106133ba576133ba614567565b9050602002013581526020019081526020016000206003016000600c60008e8e888181106133ea576133ea614567565b90506020020135815260200190815260200160002060000160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020019081526020016000206129fb90919063ffffffff16565b6134965788888281811061345157613451614567565b6040517fa7e7925000000000000000000000000000000000000000000000000000000000815260209091029290920135600483015250823560248201526044016105ae565b61349f816145c5565b9050613397565b50600283018054600181018255600091825260209182902083359101556134cf90820182614c03565b823560009081526003860160205260409020916134ed919083614c68565b50835160208086015161354892918435908c908c9061350e90880188614c03565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506139a192505050565b50613552816145c5565b9050613271565b50604080830151835163ffffffff9081166000908152600d602090815284822080549415156901000000000000000000027fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff90951694909417909355606086015186518316825284822080549115156a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff9092169190911790556080860151865183168252848220805460ff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff909216919091179055918501805186518316845292849020805493909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff9093169290921790558351905191517ff264aae70bf6a9d90e68e0f9b393f4e7fbea67b063b0f336e0b36c1581703651926136d4929163ffffffff92831681529116602082015260400190565b60405180910390a1505050505050565b3373ffffffffffffffffffffffffffffffffffffffff821603613763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016105ae565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008260000182815481106137f0576137f0614567565b9060005260206000200154905092915050565b600081815260018301602052604081205480156138ec576000613827600183614bba565b855490915060009061383b90600190614bba565b90508181146138a057600086600001828154811061385b5761385b614567565b906000526020600020015490508087600001848154811061387e5761387e614567565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806138b1576138b1614d83565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610477565b6000915050610477565b60608160000180548060200260200160405190810160405280929190818152602001828054801561394657602002820191906000526020600020905b815481526020019060010190808311613932575b50505050509050919050565b600081815260018301602052604081205461399957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610477565b506000610477565b6000848152600260208190526040909120015462010000900473ffffffffffffffffffffffffffffffffffffffff161561217557600084815260026020819052604091829020015490517ffba64a7c0000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff169063fba64a7c90613a48908690869086908b908d90600401614db2565b600060405180830381600087803b158015613a6257600080fd5b505af1158015613a76573d6000803e3d6000fd5b50505050505050505050565b508054613a8e9061463d565b6000825580601f10613a9e575050565b601f0160209004906000526020600020908101906129f89190613ad6565b50805460008255906000526020600020908101906129f891905b5b80821115613aeb5760008155600101613ad7565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613b4157613b41613aef565b60405290565b60405160a0810167ffffffffffffffff81118282101715613b4157613b41613aef565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613bb157613bb1613aef565b604052919050565b600067ffffffffffffffff821115613bd357613bd3613aef565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613c1057600080fd5b8135613c23613c1e82613bb9565b613b6a565b818152846020838601011115613c3857600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215613c6857600080fd5b823567ffffffffffffffff80821115613c8057600080fd5b613c8c86838701613bff565b93506020850135915080821115613ca257600080fd5b50613caf85828601613bff565b9150509250929050565b600060208284031215613ccb57600080fd5b5035919050565b60005b83811015613ced578181015183820152602001613cd5565b50506000910152565b60008151808452613d0e816020860160208601613cd2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a0f6020830184613cf6565b60008083601f840112613d6557600080fd5b50813567ffffffffffffffff811115613d7d57600080fd5b6020830191508360208260051b8501011115610f8357600080fd5b60008060208385031215613dab57600080fd5b823567ffffffffffffffff811115613dc257600080fd5b613dce85828601613d53565b90969095509350505050565b600081518084526020808501945080840160005b83811015613e0a57815187529582019590820190600101613dee565b509495945050505050565b600081518084526020808501808196508360051b8101915082860160005b85811015613e715782840389528151805185528501516040868601819052613e5d81870183613cf6565b9a87019a9550505090840190600101613e33565b5091979650505050505050565b600063ffffffff8083511684528060208401511660208501525060ff604083015116604084015260608201511515606084015260808201511515608084015260a082015160e060a0850152613ed660e0850182613dda565b905060c083015184820360c0860152613eef8282613e15565b95945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613f6b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452613f59858351613e7e565b94509285019290850190600101613f1f565b5092979650505050505050565b803563ffffffff81168114613f8c57600080fd5b919050565b600060208284031215613fa357600080fd5b612a0f82613f78565b73ffffffffffffffffffffffffffffffffffffffff81511682526000602082015160406020850152613fe16040850182613cf6565b949350505050565b602081526000612a0f6020830184613fac565b602081526000612a0f6020830184613e7e565b6000806040838503121561402257600080fd5b61402b83613f78565b946020939093013593505050565b60408152600061404c6040830185613cf6565b8281036020840152613eef8185613cf6565b63ffffffff815116825260208101516020830152604081015160408301526000606082015160806060850152613fe16080850182613dda565b6040815260006140aa604083018561405e565b905063ffffffff831660208301529392505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613f6b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452614120858351613fac565b945092850192908501906001016140e6565b6000806000806040858703121561414857600080fd5b843567ffffffffffffffff8082111561416057600080fd5b61416c88838901613d53565b9096509450602087013591508082111561418557600080fd5b5061419287828801613d53565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000815160a084526141e260a0850182613cf6565b9050602083015184820360208601526141fb8282613cf6565b9150506040830151600481106142135761421361419e565b604085015260608301516002811061422d5761422d61419e565b606085015260809283015173ffffffffffffffffffffffffffffffffffffffff1692909301919091525090565b602081526000612a0f60208301846141cd565b80151581146129f857600080fd5b803560ff81168114613f8c57600080fd5b60008060008060008060008060c0898b0312156142a857600080fd5b6142b189613f78565b9750602089013567ffffffffffffffff808211156142ce57600080fd5b6142da8c838d01613d53565b909950975060408b01359150808211156142f357600080fd5b506143008b828c01613d53565b90965094505060608901356143148161426d565b925060808901356143248161426d565b915061433260a08a0161427b565b90509295985092959890939650565b600080600080600080600060a0888a03121561435c57600080fd5b873567ffffffffffffffff8082111561437457600080fd5b6143808b838c01613d53565b909950975060208a013591508082111561439957600080fd5b506143a68a828b01613d53565b90965094505060408801356143ba8161426d565b925060608801356143ca8161426d565b91506143d86080890161427b565b905092959891949750929550565b6040815260006143f96040830185613dda565b6020838203818501528185518084528284019150828160051b85010183880160005b83811015614467577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08784030185526144558383516141cd565b9486019492509085019060010161441b565b50909998505050505050505050565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b838110156144eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08887030185526144d986835161405e565b9550938201939082019060010161449f565b50508584038187015286518085528782019482019350915060005b82811015613e7157845163ffffffff1684529381019392810192600101614506565b803573ffffffffffffffffffffffffffffffffffffffff81168114613f8c57600080fd5b60006020828403121561455e57600080fd5b612a0f82614528565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145f6576145f6614596565b5060010190565b63ffffffff8281168282160390808211156107a4576107a4614596565b600063ffffffff80831681810361463357614633614596565b6001019392505050565b600181811c9082168061465157607f821691505b60208210810361468a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18336030181126146c457600080fd5b9190910192915050565b6000604082360312156146e057600080fd5b6040516040810167ffffffffffffffff828210818311171561470457614704613aef565b8160405261471185614528565b8352602085013591508082111561472757600080fd5b5061473436828601613bff565b60208301525092915050565b601f82111561064157600081815260208120601f850160051c810160208610156147675750805b601f850160051c820191505b8181101561217557828155600101614773565b815167ffffffffffffffff8111156147a0576147a0613aef565b6147b4816147ae845461463d565b84614740565b602080601f83116001811461480757600084156147d15750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612175565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561485457888601518255948401946001909101908401614835565b508582101561489057878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156148b257600080fd5b815167ffffffffffffffff8111156148c957600080fd5b8201601f810184136148da57600080fd5b80516148e8613c1e82613bb9565b8181528560208385010111156148fd57600080fd5b613eef826020830160208601613cd2565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818336030181126146c457600080fd5b60006080823603121561495457600080fd5b61495c613b1e565b61496583613f78565b81526020808401358183015260408401356040830152606084013567ffffffffffffffff8082111561499657600080fd5b9085019036601f8301126149a957600080fd5b8135818111156149bb576149bb613aef565b8060051b91506149cc848301613b6a565b81815291830184019184810190368411156149e657600080fd5b938501935b83851015614a04578435825293850193908501906149eb565b606087015250939695505050505050565b602081526000612a0f6020830184613dda565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff618336030181126146c457600080fd5b803560028110613f8c57600080fd5b600060a08236031215614a7d57600080fd5b614a85613b47565b823567ffffffffffffffff80821115614a9d57600080fd5b614aa936838701613bff565b83526020850135915080821115614abf57600080fd5b50614acc36828601613bff565b602083015250604083013560048110614ae457600080fd5b6040820152614af560608401614a5c565b6060820152614b0660808401614528565b608082015292915050565b6000602080835260008454614b258161463d565b80848701526040600180841660008114614b465760018114614b7e57614bac565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838a01528284151560051b8a01019550614bac565b896000528660002060005b85811015614ba45781548b8201860152908301908801614b89565b8a0184019650505b509398975050505050505050565b8181038181111561047757610477614596565b600060208284031215614bdf57600080fd5b8151612a0f8161426d565b60ff818116838216019081111561047757610477614596565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614c3857600080fd5b83018035915067ffffffffffffffff821115614c5357600080fd5b602001915036819003821315610f8357600080fd5b67ffffffffffffffff831115614c8057614c80613aef565b614c9483614c8e835461463d565b83614740565b6000601f841160018114614ce65760008515614cb05750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355614d7c565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015614d355786850135825560209485019460019092019101614d15565b5086821015614d70577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6080815284608082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115614deb57600080fd5b8560051b808860a0850137820182810360a09081016020850152614e1190820187613cf6565b91505063ffffffff8085166040840152808416606084015250969550505050505056fea164736f6c6343000813000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AccessForbidden\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"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\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"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\"}],\"name\":\"NodeAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"NodeDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"NodeDoesNotSupportCapability\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"}],\"name\":\"NodeOperatorDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"NodePartOfCapabilitiesDON\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"NodePartOfWorkflowDON\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityConfigured\",\"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\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"}],\"name\":\"NodeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NodeOperatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"}],\"name\":\"NodeOperatorRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"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\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"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\":\"capabilities\",\"type\":\"tuple[]\"}],\"name\":\"addCapabilities\",\"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\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"}],\"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.NodeParams[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"}],\"name\":\"addNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"name\":\"deprecateCapabilities\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCapabilities\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"},{\"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\":\"capabilities\",\"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\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"getCapabilityConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"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\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"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\":[],\"name\":\"getDONs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"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\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"workflowDONId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"capabilitiesDONIds\",\"type\":\"uint256[]\"}],\"internalType\":\"structCapabilityRegistry.NodeInfo\",\"name\":\"nodeInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"}],\"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\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"workflowDONId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"capabilitiesDONIds\",\"type\":\"uint256[]\"}],\"internalType\":\"structCapabilityRegistry.NodeInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"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\":\"uint32[]\",\"name\":\"nodeOperatorIds\",\"type\":\"uint32[]\"}],\"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\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"}],\"name\":\"updateDON\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"nodeOperatorIds\",\"type\":\"uint32[]\"},{\"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.NodeParams[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"}],\"name\":\"updateNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x6080604052600e80546001600160401b0319166401000000011790553480156200002857600080fd5b503380600081620000805760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000b357620000b381620000bc565b50505062000167565b336001600160a01b03821603620001165760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000077565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6150bf80620001776000396000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80635e65e309116100ee5780638da5cb5b11610097578063d8bc7b6811610071578063d8bc7b68146103f6578063ddbe4f8214610409578063e29581aa1461041f578063f2fde38b1461043457600080fd5b80638da5cb5b1461039b5780639cb7c5f4146103c3578063d59a79f6146103e357600080fd5b806373ac22b4116100c857806373ac22b41461036d57806379ba50971461038057806386fa42461461038857600080fd5b80635e65e3091461033257806366acaa3314610345578063715f52951461035a57600080fd5b8063235374051161015b578063398f377311610135578063398f3773146102cb5780633f2a13c9146102de57806350c946fe146102ff5780635d83d9671461031f57600080fd5b80632353740514610285578063275459f2146102a55780632c01a1e8146102b857600080fd5b80631d05394c1161018c5780631d05394c1461023b578063214502431461025057806322bdbcbc1461026557600080fd5b80630fe5800a146101b357806312570011146101d9578063181f5a77146101fc575b600080fd5b6101c66101c1366004613ef4565b610447565b6040519081526020015b60405180910390f35b6101ec6101e7366004613f58565b61047b565b60405190151581526020016101d0565b604080518082018252601881527f4361706162696c697479526567697374727920312e302e300000000000000000602082015290516101d09190613fdf565b61024e610249366004614037565b610488565b005b6102586106ab565b6040516101d09190614197565b610278610273366004614230565b610810565b6040516101d09190614288565b610298610293366004614230565b6108fd565b6040516101d0919061429b565b61024e6102b3366004614037565b610941565b61024e6102c6366004614037565b610a18565b61024e6102d9366004614037565b610cbd565b6102f16102ec3660046142ae565b610e85565b6040516101d09291906142d8565b61031261030d366004613f58565b611071565b6040516101d09190614369565b61024e61032d366004614037565b61114b565b61024e610340366004614037565b611299565b61034d611718565b6040516101d0919061437c565b61024e610368366004614037565b611903565b61024e61037b366004614037565b6119be565b61024e611e9a565b61024e6103963660046143ef565b611f97565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b6103d66103d1366004613f58565b6122dd565b6040516101d09190614517565b61024e6103f1366004614549565b6124e2565b61024e6104043660046145fe565b6125ab565b610411612675565b6040516101d09291906146a3565b6104276129d8565b6040516101d09190614733565b61024e6104423660046147ca565b612aea565b6000828260405160200161045c9291906142d8565b6040516020818303038152906040528051906020012090505b92915050565b6000610475600583612afe565b610490612b19565b60005b818110156106a65760008383838181106104af576104af6147e5565b90506020020160208101906104c49190614230565b63ffffffff8181166000908152600d60209081526040808320805464010000000081049095168085526001820190935290832094955093909290916a010000000000000000000090910460ff16905b61051c83612b9c565b8110156105c457811561057257600c60006105378584612ba6565b8152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff1690556105b4565b6105b28663ffffffff16600c60006105938588612ba690919063ffffffff16565b8152602001908152602001600020600401612bb290919063ffffffff16565b505b6105bd81614843565b9050610513565b508354640100000000900463ffffffff1660000361061b576040517f2b62be9b00000000000000000000000000000000000000000000000000000000815263ffffffff861660048201526024015b60405180910390fd5b63ffffffff85166000818152600d6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffff00000000000000000000001690558051938452908301919091527ff264aae70bf6a9d90e68e0f9b393f4e7fbea67b063b0f336e0b36c1581703651910160405180910390a150505050508061069f90614843565b9050610493565b505050565b600e54606090640100000000900463ffffffff1660006106cc60018361487b565b63ffffffff1667ffffffffffffffff8111156106ea576106ea613d8e565b60405190808252806020026020018201604052801561077157816020015b6040805160e081018252600080825260208083018290529282018190526060808301829052608083019190915260a0820181905260c082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816107085790505b509050600060015b8363ffffffff168163ffffffff1610156107ed5763ffffffff8082166000908152600d602052604090205416156107dd576107b381612bbe565b8383815181106107c5576107c56147e5565b6020026020010181905250816107da90614843565b91505b6107e681614898565b9050610779565b506107f960018461487b565b63ffffffff168114610809578082525b5092915050565b60408051808201909152600081526060602082015263ffffffff82166000908152600b60209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff1683526001810180549192840191610874906148bb565b80601f01602080910402602001604051908101604052809291908181526020018280546108a0906148bb565b80156108ed5780601f106108c2576101008083540402835291602001916108ed565b820191906000526020600020905b8154815290600101906020018083116108d057829003601f168201915b5050505050815250509050919050565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c081019190915261047582612bbe565b610949612b19565b60005b63ffffffff81168211156106a657600083838363ffffffff16818110610974576109746147e5565b90506020020160208101906109899190614230565b63ffffffff81166000908152600b6020526040812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681559192506109d46001830182613d21565b505060405163ffffffff8216907fa59268ca81d40429e65ccea5385b59cf2d3fc6519371dee92f8eb1dae5107a7a90600090a250610a1181614898565b905061094c565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b82811015610cb7576000848483818110610a5257610a526147e5565b602090810292909201356000818152600c90935260409092206001810154929350919050610aaf576040517fd82f6adb00000000000000000000000000000000000000000000000000000000815260048101839052602401610612565b6000610abd82600401612b9c565b1115610b1257610ad06004820184612ba6565b6040517f60a6d89800000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260248101839052604401610612565b805468010000000000000000900463ffffffff1615610b7a5780546040517f60b9df730000000000000000000000000000000000000000000000000000000081526801000000000000000090910463ffffffff16600482015260248101839052604401610612565b83158015610bb45750805463ffffffff166000908152600b602052604090205473ffffffffffffffffffffffffffffffffffffffff163314155b15610bed576040517f9473075d000000000000000000000000000000000000000000000000000000008152336004820152602401610612565b6001810154610bfe90600790612bb2565b506002810154610c1090600990612bb2565b506000828152600c6020526040812080547fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815560018101829055600281018290559060048201818181610c658282613d5b565b5050505050507f5254e609a97bab37b7cc79fe128f85c097bd6015c6e1624ae0ba392eb975320582604051610c9c91815260200190565b60405180910390a1505080610cb090614843565b9050610a36565b50505050565b610cc5612b19565b60005b818110156106a6576000838383818110610ce457610ce46147e5565b9050602002810190610cf6919061490e565b610cff9061494c565b805190915073ffffffffffffffffffffffffffffffffffffffff16610d50576040517feeacd93900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e54604080518082018252835173ffffffffffffffffffffffffffffffffffffffff908116825260208086015181840190815263ffffffff9095166000818152600b909252939020825181547fffffffffffffffffffffffff00000000000000000000000000000000000000001692169190911781559251919290916001820190610ddc9082614a04565b5050600e8054909150600090610df79063ffffffff16614898565b91906101000a81548163ffffffff021916908363ffffffff160217905550816000015173ffffffffffffffffffffffffffffffffffffffff168163ffffffff167f78e94ca80be2c30abc061b99e7eb8583b1254781734b1e3ce339abb57da2fe8e8460200151604051610e6a9190613fdf565b60405180910390a3505080610e7e90614843565b9050610cc8565b63ffffffff8083166000908152600d60209081526040808320805464010000000090049094168084526001909401825280832085845260030190915281208054606093849390929091610ed7906148bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610f03906148bb565b8015610f505780601f10610f2557610100808354040283529160200191610f50565b820191906000526020600020905b815481529060010190602001808311610f3357829003601f168201915b5050506000888152600260208190526040909120015492935060609262010000900473ffffffffffffffffffffffffffffffffffffffff16159150611063905057600086815260026020819052604091829020015490517f8318ed5d00000000000000000000000000000000000000000000000000000000815263ffffffff891660048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690638318ed5d90602401600060405180830381865afa15801561101a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526110609190810190614b1e565b90505b9093509150505b9250929050565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c08101919091526040805160e0810182526000848152600c6020908152838220805463ffffffff8082168652640100000000820481168487018190526801000000000000000090920416858701526001820154606086015260028201546080860152835260030190529190912060a082019061112090612e92565b8152602001611143600c6000868152602001908152602001600020600401612e92565b905292915050565b611153612b19565b60005b818110156106a6576000838383818110611172576111726147e5565b90506020020135905061118f816003612afe90919063ffffffff16565b6111c8576040517fe181733f00000000000000000000000000000000000000000000000000000000815260048101829052602401610612565b6111d3600582612e9f565b61120c576040517ff7d7a29400000000000000000000000000000000000000000000000000000000815260048101829052602401610612565b6000818152600260205260408120906112258282613d21565b611233600183016000613d21565b5060020180547fffffffffffffffffffff0000000000000000000000000000000000000000000016905560405181907fdcea1b78b6ddc31592a94607d537543fcaafda6cc52d6d5cc7bbfca1422baf2190600090a25061129281614843565b9050611156565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b82811015610cb75760008484838181106112d3576112d36147e5565b90506020028101906112e59190614b8c565b6112ee90614bc0565b805163ffffffff166000908152600b602090815260408083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff168252600181018054959650939491939092840191611344906148bb565b80601f0160208091040260200160405190810160405280929190818152602001828054611370906148bb565b80156113bd5780601f10611392576101008083540402835291602001916113bd565b820191906000526020600020905b8154815290600101906020018083116113a057829003601f168201915b5050505050815250509050831580156113ed5750805173ffffffffffffffffffffffffffffffffffffffff163314155b15611426576040517f9473075d000000000000000000000000000000000000000000000000000000008152336004820152602401610612565b6040808301516000908152600c60205220600181015461147a5782604001516040517fd82f6adb00000000000000000000000000000000000000000000000000000000815260040161061291815260200190565b60208301516114b5576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001810154602084015181146115365760208401516114d690600790612afe565b1561150d576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208401516001830155611522600782612bb2565b50602084015161153490600790612e9f565b505b6060840151805160000361157857806040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016106129190614c93565b8254600090849060049061159990640100000000900463ffffffff16614898565b91906101000a81548163ffffffff021916908363ffffffff1602179055905060005b8251811015611686576115f18382815181106115d9576115d96147e5565b60200260200101516003612afe90919063ffffffff16565b61162957826040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016106129190614c93565b61167583828151811061163e5761163e6147e5565b60200260200101518660030160008563ffffffff1663ffffffff168152602001908152602001600020612e9f90919063ffffffff16565b5061167f81614843565b90506115bb565b50855184547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff9091169081178555604080880151600287018190556020808a01518351928352908201527f4b5b465e22eea0c3d40c30e936643245b80d19b2dcf75788c0699fe8d8db645b910160405180910390a25050505050508061171190614843565b90506112b7565b600e5460609063ffffffff16600061173160018361487b565b63ffffffff1667ffffffffffffffff81111561174f5761174f613d8e565b60405190808252806020026020018201604052801561179557816020015b60408051808201909152600081526060602082015281526020019060019003908161176d5790505b509050600060015b8363ffffffff168163ffffffff1610156118ed5763ffffffff81166000908152600b602052604090205473ffffffffffffffffffffffffffffffffffffffff16156118dd5763ffffffff81166000908152600b60209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff1683526001810180549192840191611831906148bb565b80601f016020809104026020016040519081016040528092919081815260200182805461185d906148bb565b80156118aa5780601f1061187f576101008083540402835291602001916118aa565b820191906000526020600020905b81548152906001019060200180831161188d57829003601f168201915b5050505050815250508383815181106118c5576118c56147e5565b6020026020010181905250816118da90614843565b91505b6118e681614898565b905061179d565b50600e546107f99060019063ffffffff1661487b565b61190b612b19565b60005b818110156106a657600083838381811061192a5761192a6147e5565b905060200281019061193c9190614ca6565b61194590614ce9565b9050600061195b82600001518360200151610447565b9050611968600382612e9f565b6119a1576040517febf5255100000000000000000000000000000000000000000000000000000000815260048101829052602401610612565b6119ab8183612eab565b5050806119b790614843565b905061190e565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b82811015610cb75760008484838181106119f8576119f86147e5565b9050602002810190611a0a9190614b8c565b611a1390614bc0565b805163ffffffff166000908152600b602090815260408083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff168252600181018054959650939491939092840191611a69906148bb565b80601f0160208091040260200160405190810160405280929190818152602001828054611a95906148bb565b8015611ae25780601f10611ab757610100808354040283529160200191611ae2565b820191906000526020600020905b815481529060010190602001808311611ac557829003601f168201915b50505091909252505081519192505073ffffffffffffffffffffffffffffffffffffffff16611b485781516040517fadd9ae1e00000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610612565b83158015611b6d5750805173ffffffffffffffffffffffffffffffffffffffff163314155b15611ba6576040517f9473075d000000000000000000000000000000000000000000000000000000008152336004820152602401610612565b6040808301516000908152600c60205220600181015415611bfb5782604001516040517f5461848300000000000000000000000000000000000000000000000000000000815260040161061291815260200190565b6040830151611c3e5782604001516040517f64e2ee9200000000000000000000000000000000000000000000000000000000815260040161061291815260200190565b60208301511580611c5b57506020830151611c5b90600790612afe565b15611c92576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608301518051600003611cd457806040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016106129190614c93565b81548290600490611cf290640100000000900463ffffffff16614898565b82546101009290920a63ffffffff818102199093169183160217909155825464010000000090041660005b8251811015611dd057611d3b8382815181106115d9576115d96147e5565b611d7357826040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016106129190614c93565b611dbf838281518110611d8857611d886147e5565b60200260200101518560030160008563ffffffff1663ffffffff168152602001908152602001600020612e9f90919063ffffffff16565b50611dc981614843565b9050611d1d565b50845183547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff91821617845560408601516002850155602086015160018501819055611e269160079190612e9f16565b506040850151611e3890600990612e9f565b50845160408087015160208089015183519283529082015263ffffffff909216917f74becb12a5e8fd0e98077d02dfba8f647c9670c9df177e42c2418cf17a636f05910160405180910390a2505050505080611e9390614843565b90506119dc565b60015473ffffffffffffffffffffffffffffffffffffffff163314611f1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610612565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b828114611fda576040517fab8b67c60000000000000000000000000000000000000000000000000000000081526004810184905260248101829052604401610612565b6000805473ffffffffffffffffffffffffffffffffffffffff16905b848110156122d5576000868683818110612012576120126147e5565b90506020020160208101906120279190614230565b63ffffffff81166000908152600b6020526040902080549192509073ffffffffffffffffffffffffffffffffffffffff16612096576040517fadd9ae1e00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610612565b60008686858181106120aa576120aa6147e5565b90506020028101906120bc919061490e565b6120c59061494c565b805190915073ffffffffffffffffffffffffffffffffffffffff16612116576040517feeacd93900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805173ffffffffffffffffffffffffffffffffffffffff16331480159061215357503373ffffffffffffffffffffffffffffffffffffffff861614155b1561218c576040517f9473075d000000000000000000000000000000000000000000000000000000008152336004820152602401610612565b8051825473ffffffffffffffffffffffffffffffffffffffff908116911614158061220857506020808201516040516121c59201613fdf565b60405160208183030381529060405280519060200120826001016040516020016121ef9190614d8f565b6040516020818303038152906040528051906020012014155b156122c157805182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602081015160018301906122629082614a04565b50806000015173ffffffffffffffffffffffffffffffffffffffff168363ffffffff167f86f41145bde5dd7f523305452e4aad3685508c181432ec733d5f345009358a2883602001516040516122b89190613fdf565b60405180910390a35b505050806122ce90614843565b9050611ff6565b505050505050565b61230d6040805160a081018252606080825260208201529081016000815260200160008152600060209091015290565b60008281526002602052604090819020815160a08101909252805482908290612335906148bb565b80601f0160208091040260200160405190810160405280929190818152602001828054612361906148bb565b80156123ae5780601f10612383576101008083540402835291602001916123ae565b820191906000526020600020905b81548152906001019060200180831161239157829003601f168201915b505050505081526020016001820180546123c7906148bb565b80601f01602080910402602001604051908101604052809291908181526020018280546123f3906148bb565b80156124405780601f1061241557610100808354040283529160200191612440565b820191906000526020600020905b81548152906001019060200180831161242357829003601f168201915b5050509183525050600282015460209091019060ff1660038111156124675761246761445b565b60038111156124785761247861445b565b81526020016002820160019054906101000a900460ff1660018111156124a0576124a061445b565b60018111156124b1576124b161445b565b81526002919091015462010000900473ffffffffffffffffffffffffffffffffffffffff1660209091015292915050565b6124ea612b19565b63ffffffff8089166000908152600d602052604081205464010000000090049091169081900361254e576040517f2b62be9b00000000000000000000000000000000000000000000000000000000815263ffffffff8a166004820152602401610612565b6125a0888888886040518060a001604052808f63ffffffff1681526020018761257690614898565b97508763ffffffff1681526020018a1515815260200189151581526020018860ff1681525061313f565b505050505050505050565b6125b3612b19565b600e805460009164010000000090910463ffffffff169060046125d583614898565b82546101009290920a63ffffffff81810219909316918316021790915581166000818152600d602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001684179055815160a08101835292835260019083015286151590820152841515606082015260ff8416608082015290915061266b90899089908990899061313f565b5050505050505050565b6060806126826003612e92565b915060006126906005612b9c565b835161269c9190614e38565b90508067ffffffffffffffff8111156126b7576126b7613d8e565b60405190808252806020026020018201604052801561271857816020015b6127056040805160a081018252606080825260208201529081016000815260200160008152600060209091015290565b8152602001906001900390816126d55790505b50915060008167ffffffffffffffff81111561273657612736613d8e565b60405190808252806020026020018201604052801561275f578160200160208202803683370190505b5090506000805b85518110156129ce576000868281518110612783576127836147e5565b602002602001015190506127a1816005612afe90919063ffffffff16565b6129bd5760008181526002602052604090819020815160a081019092528054829082906127cd906148bb565b80601f01602080910402602001604051908101604052809291908181526020018280546127f9906148bb565b80156128465780601f1061281b57610100808354040283529160200191612846565b820191906000526020600020905b81548152906001019060200180831161282957829003601f168201915b5050505050815260200160018201805461285f906148bb565b80601f016020809104026020016040519081016040528092919081815260200182805461288b906148bb565b80156128d85780601f106128ad576101008083540402835291602001916128d8565b820191906000526020600020905b8154815290600101906020018083116128bb57829003601f168201915b5050509183525050600282015460209091019060ff1660038111156128ff576128ff61445b565b60038111156129105761291061445b565b81526020016002820160019054906101000a900460ff1660018111156129385761293861445b565b60018111156129495761294961445b565b81526002919091015462010000900473ffffffffffffffffffffffffffffffffffffffff166020909101528651879085908110612988576129886147e5565b6020026020010181905250808484815181106129a6576129a66147e5565b60209081029190910101526129ba83614843565b92505b506129c781614843565b9050612766565b5090949293505050565b606060006129e66009612e92565b90506000815167ffffffffffffffff811115612a0457612a04613d8e565b604051908082528060200260200182016040528015612a8b57816020015b6040805160e081018252600080825260208083018290529282018190526060808301829052608083019190915260a0820181905260c082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181612a225790505b50905060005b825181101561080957612abc838281518110612aaf57612aaf6147e5565b6020026020010151611071565b828281518110612ace57612ace6147e5565b602002602001018190525080612ae390614843565b9050612a91565b612af2612b19565b612afb81613983565b50565b600081815260018301602052604081205415155b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314612b9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610612565b565b6000610475825490565b6000612b128383613a78565b6000612b128383613aa2565b6040805160e0810182526000808252602080830182905282840182905260608084018390526080840183905260a0840181905260c084015263ffffffff8581168352600d8252848320805464010000000090049091168084526001909101825284832060028101805487518186028101860190985280885295969295919493909190830182828015612c6f57602002820191906000526020600020905b815481526020019060010190808311612c5b575b505050505090506000815167ffffffffffffffff811115612c9257612c92613d8e565b604051908082528060200260200182016040528015612cd857816020015b604080518082019091526000815260606020820152815260200190600190039081612cb05790505b50905060005b8151811015612df9576040518060400160405280848381518110612d0457612d046147e5565b60200260200101518152602001856003016000868581518110612d2957612d296147e5565b602002602001015181526020019081526020016000208054612d4a906148bb565b80601f0160208091040260200160405190810160405280929190818152602001828054612d76906148bb565b8015612dc35780601f10612d9857610100808354040283529160200191612dc3565b820191906000526020600020905b815481529060010190602001808311612da657829003601f168201915b5050505050815250828281518110612ddd57612ddd6147e5565b602002602001018190525080612df290614843565b9050612cde565b506040805160e08101825263ffffffff8089166000818152600d6020818152868320548086168752948b168187015260ff680100000000000000008604811697870197909752690100000000000000000085048716151560608701529290915290526a010000000000000000000090049091161515608082015260a08101612e8085612e92565b81526020019190915295945050505050565b60606000612b1283613b95565b6000612b128383613bf1565b608081015173ffffffffffffffffffffffffffffffffffffffff1615612ff957608081015173ffffffffffffffffffffffffffffffffffffffff163b1580612fa4575060808101516040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f78bea72100000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116906301ffc9a790602401602060405180830381865afa158015612f7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa29190614e4b565b155b15612ff95760808101516040517fabb5e3fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610612565b6000828152600260205260409020815182919081906130189082614a04565b506020820151600182019061302d9082614a04565b5060408201516002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600183600381111561306f5761306f61445b565b021790555060608201516002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101008360018111156130b6576130b661445b565b0217905550608091909101516002909101805473ffffffffffffffffffffffffffffffffffffffff90921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff90921691909117905560405182907f04f0a9bcf3f3a3b42a4d7ca081119755f82ebe43e0d30c8f7292c4fe0dc4a2ae90600090a25050565b805163ffffffff9081166000908152600d602090815260408083208286015190941683526001909301905220608082015160ff16158061319157506080820151859061318c906001614e68565b60ff16115b156131da5760808201516040517f25b4d61800000000000000000000000000000000000000000000000000000000815260ff909116600482015260248101869052604401610612565b6001826020015163ffffffff1611156132ca57815163ffffffff166000908152600d60209081526040822090840151600191820191839161321b919061487b565b63ffffffff1663ffffffff168152602001908152602001600020905060005b61324382612b9c565b8110156132c757613272846000015163ffffffff16600c60006105938587600001612ba690919063ffffffff16565b50600c60006132818484612ba6565b8152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff1690556132c081614843565b905061323a565b50505b60005b8581101561350c576132fa8787838181106132ea576132ea6147e5565b8592602090910201359050612e9f565b61335b578251878783818110613312576133126147e5565b6040517f636e405700000000000000000000000000000000000000000000000000000000815263ffffffff90941660048501526020029190910135602483015250604401610612565b8260600151156134b257825163ffffffff16600c6000898985818110613383576133836147e5565b602090810292909201358352508101919091526040016000205468010000000000000000900463ffffffff16148015906133fd5750600c60008888848181106133ce576133ce6147e5565b602090810292909201358352508101919091526040016000205468010000000000000000900463ffffffff1615155b1561345f578251878783818110613416576134166147e5565b6040517f60b9df7300000000000000000000000000000000000000000000000000000000815263ffffffff90941660048501526020029190910135602483015250604401610612565b8251600c6000898985818110613477576134776147e5565b90506020020135815260200190815260200160002060000160086101000a81548163ffffffff021916908363ffffffff1602179055506134fc565b82516134fa9063ffffffff16600c60008a8a868181106134d4576134d46147e5565b905060200201358152602001908152602001600020600401612e9f90919063ffffffff16565b505b61350581614843565b90506132cd565b5060005b838110156137f8573685858381811061352b5761352b6147e5565b905060200281019061353d919061490e565b905061354b60038235612afe565b613584576040517fe181733f00000000000000000000000000000000000000000000000000000000815281356004820152602401610612565b61359060058235612afe565b156135ca576040517ff7d7a29400000000000000000000000000000000000000000000000000000000815281356004820152602401610612565b80356000908152600384016020526040812080546135e7906148bb565b905011156136335783516040517f3927d08000000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015281356024820152604401610612565b60005b87811015613745576136da8235600c60008c8c86818110613659576136596147e5565b9050602002013581526020019081526020016000206003016000600c60008e8e88818110613689576136896147e5565b90506020020135815260200190815260200160002060000160049054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001908152602001600020612afe90919063ffffffff16565b613735578888828181106136f0576136f06147e5565b6040517fa7e792500000000000000000000000000000000000000000000000000000000081526020909102929092013560048301525082356024820152604401610612565b61373e81614843565b9050613636565b506002830180546001810182556000918252602091829020833591015561376e90820182614e81565b8235600090815260038601602052604090209161378c919083614ee6565b5083516020808601516137e792918435908c908c906137ad90880188614e81565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613c4092505050565b506137f181614843565b9050613510565b50604080830151835163ffffffff9081166000908152600d602090815284822080549415156901000000000000000000027fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff90951694909417909355606086015186518316825284822080549115156a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff9092169190911790556080860151865183168252848220805460ff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff909216919091179055918501805186518316845292849020805493909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff9093169290921790558351905191517ff264aae70bf6a9d90e68e0f9b393f4e7fbea67b063b0f336e0b36c158170365192613973929163ffffffff92831681529116602082015260400190565b60405180910390a1505050505050565b3373ffffffffffffffffffffffffffffffffffffffff821603613a02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610612565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000826000018281548110613a8f57613a8f6147e5565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613b8b576000613ac6600183614e38565b8554909150600090613ada90600190614e38565b9050818114613b3f576000866000018281548110613afa57613afa6147e5565b9060005260206000200154905080876000018481548110613b1d57613b1d6147e5565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613b5057613b50615001565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610475565b6000915050610475565b606081600001805480602002602001604051908101604052809291908181526020018280548015613be557602002820191906000526020600020905b815481526020019060010190808311613bd1575b50505050509050919050565b6000818152600183016020526040812054613c3857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610475565b506000610475565b6000848152600260208190526040909120015462010000900473ffffffffffffffffffffffffffffffffffffffff16156122d557600084815260026020819052604091829020015490517ffba64a7c0000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff169063fba64a7c90613ce7908690869086908b908d90600401615030565b600060405180830381600087803b158015613d0157600080fd5b505af1158015613d15573d6000803e3d6000fd5b50505050505050505050565b508054613d2d906148bb565b6000825580601f10613d3d575050565b601f016020900490600052602060002090810190612afb9190613d75565b5080546000825590600052602060002090810190612afb91905b5b80821115613d8a5760008155600101613d76565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613de057613de0613d8e565b60405290565b60405160a0810167ffffffffffffffff81118282101715613de057613de0613d8e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613e5057613e50613d8e565b604052919050565b600067ffffffffffffffff821115613e7257613e72613d8e565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613eaf57600080fd5b8135613ec2613ebd82613e58565b613e09565b818152846020838601011115613ed757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215613f0757600080fd5b823567ffffffffffffffff80821115613f1f57600080fd5b613f2b86838701613e9e565b93506020850135915080821115613f4157600080fd5b50613f4e85828601613e9e565b9150509250929050565b600060208284031215613f6a57600080fd5b5035919050565b60005b83811015613f8c578181015183820152602001613f74565b50506000910152565b60008151808452613fad816020860160208601613f71565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612b126020830184613f95565b60008083601f84011261400457600080fd5b50813567ffffffffffffffff81111561401c57600080fd5b6020830191508360208260051b850101111561106a57600080fd5b6000806020838503121561404a57600080fd5b823567ffffffffffffffff81111561406157600080fd5b61406d85828601613ff2565b90969095509350505050565b600081518084526020808501945080840160005b838110156140a95781518752958201959082019060010161408d565b509495945050505050565b600081518084526020808501808196508360051b8101915082860160005b8581101561411057828403895281518051855285015160408686018190526140fc81870183613f95565b9a87019a95505050908401906001016140d2565b5091979650505050505050565b600063ffffffff8083511684528060208401511660208501525060ff604083015116604084015260608201511515606084015260808201511515608084015260a082015160e060a085015261417560e0850182614079565b905060c083015184820360c086015261418e82826140b4565b95945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561420a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526141f885835161411d565b945092850192908501906001016141be565b5092979650505050505050565b803563ffffffff8116811461422b57600080fd5b919050565b60006020828403121561424257600080fd5b612b1282614217565b73ffffffffffffffffffffffffffffffffffffffff815116825260006020820151604060208501526142806040850182613f95565b949350505050565b602081526000612b12602083018461424b565b602081526000612b12602083018461411d565b600080604083850312156142c157600080fd5b6142ca83614217565b946020939093013593505050565b6040815260006142eb6040830185613f95565b828103602084015261418e8185613f95565b600063ffffffff80835116845280602084015116602085015280604084015116604085015250606082015160608401526080820151608084015260a082015160e060a085015261435060e0850182614079565b905060c083015184820360c086015261418e8282614079565b602081526000612b1260208301846142fd565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561420a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526143dd85835161424b565b945092850192908501906001016143a3565b6000806000806040858703121561440557600080fd5b843567ffffffffffffffff8082111561441d57600080fd5b61442988838901613ff2565b9096509450602087013591508082111561444257600080fd5b5061444f87828801613ff2565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000815160a0845261449f60a0850182613f95565b9050602083015184820360208601526144b88282613f95565b9150506040830151600481106144d0576144d061445b565b60408501526060830151600281106144ea576144ea61445b565b606085015260809283015173ffffffffffffffffffffffffffffffffffffffff1692909301919091525090565b602081526000612b12602083018461448a565b8015158114612afb57600080fd5b803560ff8116811461422b57600080fd5b60008060008060008060008060c0898b03121561456557600080fd5b61456e89614217565b9750602089013567ffffffffffffffff8082111561458b57600080fd5b6145978c838d01613ff2565b909950975060408b01359150808211156145b057600080fd5b506145bd8b828c01613ff2565b90965094505060608901356145d18161452a565b925060808901356145e18161452a565b91506145ef60a08a01614538565b90509295985092959890939650565b600080600080600080600060a0888a03121561461957600080fd5b873567ffffffffffffffff8082111561463157600080fd5b61463d8b838c01613ff2565b909950975060208a013591508082111561465657600080fd5b506146638a828b01613ff2565b90965094505060408801356146778161452a565b925060608801356146878161452a565b915061469560808901614538565b905092959891949750929550565b6040815260006146b66040830185614079565b6020838203818501528185518084528284019150828160051b85010183880160005b83811015614724577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087840301855261471283835161448a565b948601949250908501906001016146d8565b50909998505050505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561420a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147948583516142fd565b9450928501929085019060010161475a565b803573ffffffffffffffffffffffffffffffffffffffff8116811461422b57600080fd5b6000602082840312156147dc57600080fd5b612b12826147a6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361487457614874614814565b5060010190565b63ffffffff82811682821603908082111561080957610809614814565b600063ffffffff8083168181036148b1576148b1614814565b6001019392505050565b600181811c908216806148cf57607f821691505b602082108103614908577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261494257600080fd5b9190910192915050565b60006040823603121561495e57600080fd5b6040516040810167ffffffffffffffff828210818311171561498257614982613d8e565b8160405261498f856147a6565b835260208501359150808211156149a557600080fd5b506149b236828601613e9e565b60208301525092915050565b601f8211156106a657600081815260208120601f850160051c810160208610156149e55750805b601f850160051c820191505b818110156122d5578281556001016149f1565b815167ffffffffffffffff811115614a1e57614a1e613d8e565b614a3281614a2c84546148bb565b846149be565b602080601f831160018114614a855760008415614a4f5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556122d5565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015614ad257888601518255948401946001909101908401614ab3565b5085821015614b0e57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215614b3057600080fd5b815167ffffffffffffffff811115614b4757600080fd5b8201601f81018413614b5857600080fd5b8051614b66613ebd82613e58565b818152856020838501011115614b7b57600080fd5b61418e826020830160208601613f71565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183360301811261494257600080fd5b600060808236031215614bd257600080fd5b614bda613dbd565b614be383614217565b81526020808401358183015260408401356040830152606084013567ffffffffffffffff80821115614c1457600080fd5b9085019036601f830112614c2757600080fd5b813581811115614c3957614c39613d8e565b8060051b9150614c4a848301613e09565b8181529183018401918481019036841115614c6457600080fd5b938501935b83851015614c8257843582529385019390850190614c69565b606087015250939695505050505050565b602081526000612b126020830184614079565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6183360301811261494257600080fd5b80356002811061422b57600080fd5b600060a08236031215614cfb57600080fd5b614d03613de6565b823567ffffffffffffffff80821115614d1b57600080fd5b614d2736838701613e9e565b83526020850135915080821115614d3d57600080fd5b50614d4a36828601613e9e565b602083015250604083013560048110614d6257600080fd5b6040820152614d7360608401614cda565b6060820152614d84608084016147a6565b608082015292915050565b6000602080835260008454614da3816148bb565b80848701526040600180841660008114614dc45760018114614dfc57614e2a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838a01528284151560051b8a01019550614e2a565b896000528660002060005b85811015614e225781548b8201860152908301908801614e07565b8a0184019650505b509398975050505050505050565b8181038181111561047557610475614814565b600060208284031215614e5d57600080fd5b8151612b128161452a565b60ff818116838216019081111561047557610475614814565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614eb657600080fd5b83018035915067ffffffffffffffff821115614ed157600080fd5b60200191503681900382131561106a57600080fd5b67ffffffffffffffff831115614efe57614efe613d8e565b614f1283614f0c83546148bb565b836149be565b6000601f841160018114614f645760008515614f2e5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355614ffa565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015614fb35786850135825560209485019460019092019101614f93565b5086821015614fee577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6080815284608082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561506957600080fd5b8560051b808860a0850137820182810360a0908101602085015261508f90820187613f95565b91505063ffffffff8085166040840152808416606084015250969550505050505056fea164736f6c6343000813000a", } var CapabilityRegistryABI = CapabilityRegistryMetaData.ABI @@ -347,26 +357,25 @@ func (_CapabilityRegistry *CapabilityRegistryCallerSession) GetHashedCapabilityI return _CapabilityRegistry.Contract.GetHashedCapabilityId(&_CapabilityRegistry.CallOpts, labelledName, version) } -func (_CapabilityRegistry *CapabilityRegistryCaller) GetNode(opts *bind.CallOpts, p2pId [32]byte) (CapabilityRegistryNodeInfo, uint32, error) { +func (_CapabilityRegistry *CapabilityRegistryCaller) GetNode(opts *bind.CallOpts, p2pId [32]byte) (CapabilityRegistryNodeInfo, error) { var out []interface{} err := _CapabilityRegistry.contract.Call(opts, &out, "getNode", p2pId) if err != nil { - return *new(CapabilityRegistryNodeInfo), *new(uint32), err + return *new(CapabilityRegistryNodeInfo), err } out0 := *abi.ConvertType(out[0], new(CapabilityRegistryNodeInfo)).(*CapabilityRegistryNodeInfo) - out1 := *abi.ConvertType(out[1], new(uint32)).(*uint32) - return out0, out1, err + return out0, err } -func (_CapabilityRegistry *CapabilityRegistrySession) GetNode(p2pId [32]byte) (CapabilityRegistryNodeInfo, uint32, error) { +func (_CapabilityRegistry *CapabilityRegistrySession) GetNode(p2pId [32]byte) (CapabilityRegistryNodeInfo, error) { return _CapabilityRegistry.Contract.GetNode(&_CapabilityRegistry.CallOpts, p2pId) } -func (_CapabilityRegistry *CapabilityRegistryCallerSession) GetNode(p2pId [32]byte) (CapabilityRegistryNodeInfo, uint32, error) { +func (_CapabilityRegistry *CapabilityRegistryCallerSession) GetNode(p2pId [32]byte) (CapabilityRegistryNodeInfo, error) { return _CapabilityRegistry.Contract.GetNode(&_CapabilityRegistry.CallOpts, p2pId) } @@ -414,33 +423,25 @@ func (_CapabilityRegistry *CapabilityRegistryCallerSession) GetNodeOperators() ( return _CapabilityRegistry.Contract.GetNodeOperators(&_CapabilityRegistry.CallOpts) } -func (_CapabilityRegistry *CapabilityRegistryCaller) GetNodes(opts *bind.CallOpts) (GetNodes, - - error) { +func (_CapabilityRegistry *CapabilityRegistryCaller) GetNodes(opts *bind.CallOpts) ([]CapabilityRegistryNodeInfo, error) { var out []interface{} err := _CapabilityRegistry.contract.Call(opts, &out, "getNodes") - outstruct := new(GetNodes) if err != nil { - return *outstruct, err + return *new([]CapabilityRegistryNodeInfo), err } - outstruct.NodeInfo = *abi.ConvertType(out[0], new([]CapabilityRegistryNodeInfo)).(*[]CapabilityRegistryNodeInfo) - outstruct.ConfigCounts = *abi.ConvertType(out[1], new([]uint32)).(*[]uint32) + out0 := *abi.ConvertType(out[0], new([]CapabilityRegistryNodeInfo)).(*[]CapabilityRegistryNodeInfo) - return *outstruct, err + return out0, err } -func (_CapabilityRegistry *CapabilityRegistrySession) GetNodes() (GetNodes, - - error) { +func (_CapabilityRegistry *CapabilityRegistrySession) GetNodes() ([]CapabilityRegistryNodeInfo, error) { return _CapabilityRegistry.Contract.GetNodes(&_CapabilityRegistry.CallOpts) } -func (_CapabilityRegistry *CapabilityRegistryCallerSession) GetNodes() (GetNodes, - - error) { +func (_CapabilityRegistry *CapabilityRegistryCallerSession) GetNodes() ([]CapabilityRegistryNodeInfo, error) { return _CapabilityRegistry.Contract.GetNodes(&_CapabilityRegistry.CallOpts) } @@ -558,15 +559,15 @@ func (_CapabilityRegistry *CapabilityRegistryTransactorSession) AddNodeOperators return _CapabilityRegistry.Contract.AddNodeOperators(&_CapabilityRegistry.TransactOpts, nodeOperators) } -func (_CapabilityRegistry *CapabilityRegistryTransactor) AddNodes(opts *bind.TransactOpts, nodes []CapabilityRegistryNodeInfo) (*types.Transaction, error) { +func (_CapabilityRegistry *CapabilityRegistryTransactor) AddNodes(opts *bind.TransactOpts, nodes []CapabilityRegistryNodeParams) (*types.Transaction, error) { return _CapabilityRegistry.contract.Transact(opts, "addNodes", nodes) } -func (_CapabilityRegistry *CapabilityRegistrySession) AddNodes(nodes []CapabilityRegistryNodeInfo) (*types.Transaction, error) { +func (_CapabilityRegistry *CapabilityRegistrySession) AddNodes(nodes []CapabilityRegistryNodeParams) (*types.Transaction, error) { return _CapabilityRegistry.Contract.AddNodes(&_CapabilityRegistry.TransactOpts, nodes) } -func (_CapabilityRegistry *CapabilityRegistryTransactorSession) AddNodes(nodes []CapabilityRegistryNodeInfo) (*types.Transaction, error) { +func (_CapabilityRegistry *CapabilityRegistryTransactorSession) AddNodes(nodes []CapabilityRegistryNodeParams) (*types.Transaction, error) { return _CapabilityRegistry.Contract.AddNodes(&_CapabilityRegistry.TransactOpts, nodes) } @@ -654,15 +655,15 @@ func (_CapabilityRegistry *CapabilityRegistryTransactorSession) UpdateNodeOperat return _CapabilityRegistry.Contract.UpdateNodeOperators(&_CapabilityRegistry.TransactOpts, nodeOperatorIds, nodeOperators) } -func (_CapabilityRegistry *CapabilityRegistryTransactor) UpdateNodes(opts *bind.TransactOpts, nodes []CapabilityRegistryNodeInfo) (*types.Transaction, error) { +func (_CapabilityRegistry *CapabilityRegistryTransactor) UpdateNodes(opts *bind.TransactOpts, nodes []CapabilityRegistryNodeParams) (*types.Transaction, error) { return _CapabilityRegistry.contract.Transact(opts, "updateNodes", nodes) } -func (_CapabilityRegistry *CapabilityRegistrySession) UpdateNodes(nodes []CapabilityRegistryNodeInfo) (*types.Transaction, error) { +func (_CapabilityRegistry *CapabilityRegistrySession) UpdateNodes(nodes []CapabilityRegistryNodeParams) (*types.Transaction, error) { return _CapabilityRegistry.Contract.UpdateNodes(&_CapabilityRegistry.TransactOpts, nodes) } -func (_CapabilityRegistry *CapabilityRegistryTransactorSession) UpdateNodes(nodes []CapabilityRegistryNodeInfo) (*types.Transaction, error) { +func (_CapabilityRegistry *CapabilityRegistryTransactorSession) UpdateNodes(nodes []CapabilityRegistryNodeParams) (*types.Transaction, error) { return _CapabilityRegistry.Contract.UpdateNodes(&_CapabilityRegistry.TransactOpts, nodes) } @@ -2090,10 +2091,6 @@ type GetCapabilities struct { HashedCapabilityIds [][32]byte Capabilities []CapabilityRegistryCapability } -type GetNodes struct { - NodeInfo []CapabilityRegistryNodeInfo - ConfigCounts []uint32 -} func (_CapabilityRegistry *CapabilityRegistry) ParseLog(log types.Log) (generated.AbigenLog, error) { switch log.Topics[0] { @@ -2188,15 +2185,13 @@ type CapabilityRegistryInterface interface { GetHashedCapabilityId(opts *bind.CallOpts, labelledName string, version string) ([32]byte, error) - GetNode(opts *bind.CallOpts, p2pId [32]byte) (CapabilityRegistryNodeInfo, uint32, error) + GetNode(opts *bind.CallOpts, p2pId [32]byte) (CapabilityRegistryNodeInfo, error) GetNodeOperator(opts *bind.CallOpts, nodeOperatorId uint32) (CapabilityRegistryNodeOperator, error) GetNodeOperators(opts *bind.CallOpts) ([]CapabilityRegistryNodeOperator, error) - GetNodes(opts *bind.CallOpts) (GetNodes, - - error) + GetNodes(opts *bind.CallOpts) ([]CapabilityRegistryNodeInfo, error) IsCapabilityDeprecated(opts *bind.CallOpts, hashedCapabilityId [32]byte) (bool, error) @@ -2212,7 +2207,7 @@ type CapabilityRegistryInterface interface { AddNodeOperators(opts *bind.TransactOpts, nodeOperators []CapabilityRegistryNodeOperator) (*types.Transaction, error) - AddNodes(opts *bind.TransactOpts, nodes []CapabilityRegistryNodeInfo) (*types.Transaction, error) + AddNodes(opts *bind.TransactOpts, nodes []CapabilityRegistryNodeParams) (*types.Transaction, error) DeprecateCapabilities(opts *bind.TransactOpts, hashedCapabilityIds [][32]byte) (*types.Transaction, error) @@ -2228,7 +2223,7 @@ type CapabilityRegistryInterface interface { UpdateNodeOperators(opts *bind.TransactOpts, nodeOperatorIds []uint32, nodeOperators []CapabilityRegistryNodeOperator) (*types.Transaction, error) - UpdateNodes(opts *bind.TransactOpts, nodes []CapabilityRegistryNodeInfo) (*types.Transaction, error) + UpdateNodes(opts *bind.TransactOpts, nodes []CapabilityRegistryNodeParams) (*types.Transaction, error) FilterCapabilityConfigured(opts *bind.FilterOpts, hashedCapabilityId [][32]byte) (*CapabilityRegistryCapabilityConfiguredIterator, 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 eca45db5753..e2a844c7b79 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 bd15b7c5cecc87d44cac0b8414627cfb2c0e1cdd554df60a50dcb682f9a05129 -keystone_capability_registry: ../../../contracts/solc/v0.8.19/CapabilityRegistry/CapabilityRegistry.abi ../../../contracts/solc/v0.8.19/CapabilityRegistry/CapabilityRegistry.bin cc978f3a11c405f0559cf1d371ed8a1553d9b9975e8b3915a142cc781d280823 +keystone_capability_registry: ../../../contracts/solc/v0.8.19/CapabilityRegistry/CapabilityRegistry.abi ../../../contracts/solc/v0.8.19/CapabilityRegistry/CapabilityRegistry.bin c1e609950ee768884ba5ecd0ad8b998570d46e1c7ac281294e677e908113a6b7 ocr3_capability: ../../../contracts/solc/v0.8.19/OCR3Capability/OCR3Capability.abi ../../../contracts/solc/v0.8.19/OCR3Capability/OCR3Capability.bin 144f23145878b95d1672e4919874eddeeaa38ce520d0edbe72c6677e39bb4741