From 251d23fa7dabaf6740afb0e9a74f7738ce78c00a Mon Sep 17 00:00:00 2001 From: Christopher Dimitri Sastropranoto Date: Fri, 17 May 2024 17:00:01 +0700 Subject: [PATCH] implement modify DON --- .../src/v0.8/keystone/CapabilityRegistry.sol | 128 +++++--- .../test/CapabilityRegistry_AddDONTest.t.sol | 18 +- .../CapabilityRegistry_RemoveDONsTest.t.sol | 2 + .../CapabilityRegistry_UpdateDONTest.t.sol | 218 +++++++++++++ .../keystone_capability_registry.go | 297 +++++++++++++++++- ...rapper-dependency-versions-do-not-edit.txt | 2 +- 6 files changed, 610 insertions(+), 55 deletions(-) create mode 100644 contracts/src/v0.8/keystone/test/CapabilityRegistry_UpdateDONTest.t.sol diff --git a/contracts/src/v0.8/keystone/CapabilityRegistry.sol b/contracts/src/v0.8/keystone/CapabilityRegistry.sol index cb7b5408045..a05a23e650e 100644 --- a/contracts/src/v0.8/keystone/CapabilityRegistry.sol +++ b/contracts/src/v0.8/keystone/CapabilityRegistry.sol @@ -177,6 +177,12 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { /// @param signer The node's signer address event NodeUpdated(bytes32 p2pId, uint256 nodeOperatorId, bytes32 signer); + /// @notice This event is emitted when a DON's config is set + /// @param donId The ID of the DON the config was set for + /// @param configCount The number of times the DON has been + /// configured + event ConfigSet(uint32 donId, uint32 configCount); + /// @notice This event is emitted when a new DON is created /// @param donId The ID of the newly created DON /// @param isPublic True if the newly created DON is public @@ -186,6 +192,11 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { /// @param donId The ID of the removed DON event DONRemoved(uint32 donId); + /// @notice This event is emitted when a new DON is created + /// @param donId The ID of the updated DON + /// @param isPublic True if the updated DON is public + event DONUpdated(uint256 donId, bool isPublic); + /// @notice This error is emitted when a DON does not exist /// @param donId The ID of the nonexistent DON error DONDoesNotExist(uint32 donId); @@ -550,46 +561,34 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { bool isPublic ) external onlyOwner { uint32 id = s_donId; - s_dons[id].id = id; - s_dons[id].isPublic = isPublic; - - uint32 configCount = 1; - - DONCapabilityConfig storage donCapabilityConfig = s_dons[id].config[configCount]; - - for (uint256 i; i < nodes.length; ++i) { - bytes32 nodeP2PId = nodes[i]; - if (donCapabilityConfig.nodes.contains(nodeP2PId)) revert DuplicateDONNode(id, nodeP2PId); - - donCapabilityConfig.nodes.add(nodeP2PId); - } - - for (uint256 i; i < capabilityConfigurations.length; ++i) { - CapabilityConfiguration calldata configuration = capabilityConfigurations[i]; - bytes32 capabilityId = configuration.capabilityId; - - if (!s_hashedCapabilityIds.contains(capabilityId)) revert CapabilityDoesNotExist(capabilityId); - if (s_deprecatedHashedCapabilityIds.contains(capabilityId)) revert CapabilityIsDeprecated(capabilityId); - - if (donCapabilityConfig.capabilityConfigs[capabilityId].length > 0) - revert DuplicateDONCapability(id, capabilityId); - - for (uint256 j; j < nodes.length; ++j) { - bytes32 nodeP2PId = nodes[j]; - if (!s_nodes[nodeP2PId].supportedCapabilityIds[s_nodes[nodeP2PId].configCount].contains(capabilityId)) - revert NodeDoesNotSupportCapability(nodeP2PId, capabilityId); - } - - donCapabilityConfig.capabilityIds.push(capabilityId); - donCapabilityConfig.capabilityConfigs[capabilityId] = configuration.config; - } - - s_dons[id].configCount = configCount; + uint32 configCount = 1; // Initialize config count to start at 1 + _setDONConfig(id, configCount, nodes, capabilityConfigurations, isPublic); ++s_donId; emit DONAdded(id, isPublic); } + /// @notice Updates a DON's configuration. This allows + /// the admin to reconfigure the list of capabilities supported + /// by the DON, the list of nodes that make up the DON as well + /// as whether or not the DON can accept external workflows + /// @param nodes The nodes making up the DON + /// @param capabilityConfigurations The list of configurations for the + /// capabilities supported by the DON + /// @param isPublic True if the DON is can accept external workflows + function updateDON( + uint32 donId, + bytes32[] calldata nodes, + CapabilityConfiguration[] calldata capabilityConfigurations, + bool isPublic + ) external onlyOwner { + uint32 configCount = s_dons[donId].configCount; + if (configCount == 0) revert DONDoesNotExist(donId); + _setDONConfig(donId, ++configCount, nodes, capabilityConfigurations, isPublic); + ++s_donId; + emit DONUpdated(donId, isPublic); + } + /// @notice Removes DONs from the Capability Registry /// @param donIds The IDs of the DON to be removed function removeDONs(uint32[] calldata donIds) external onlyOwner { @@ -607,12 +606,13 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { /// @notice Gets DON's data /// @param donId The DON ID /// @return uint32 The DON ID + /// @return uint32 The DON's config count /// @return bool True if the DON is public /// @return bytes32[] The list of node P2P IDs that are in the DON /// @return CapabilityConfiguration[] The list of capability configurations supported by the DON function getDON( uint32 donId - ) external view returns (uint32, bool, bytes32[] memory, CapabilityConfiguration[] memory) { + ) external view returns (uint32, uint32, bool, bytes32[] memory, CapabilityConfiguration[] memory) { uint32 configCount = s_dons[donId].configCount; DONCapabilityConfig storage donCapabilityConfig = s_dons[donId].config[configCount]; @@ -627,7 +627,13 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { }); } - return (s_dons[donId].id, s_dons[donId].isPublic, donCapabilityConfig.nodes.values(), capabilityConfigurations); + return ( + s_dons[donId].id, + configCount, + s_dons[donId].isPublic, + donCapabilityConfig.nodes.values(), + capabilityConfigurations + ); } /// @notice Returns the DON specific configuration for a capability @@ -638,4 +644,52 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { uint32 configCount = s_dons[donId].configCount; return s_dons[donId].config[configCount].capabilityConfigs[capabilityId]; } + + /// @notice Sets the configuration for a DON + /// @param donId The ID of the DON to set the configuration for + /// @param configCount The number of times the DON has been configured + /// @param nodes The nodes making up the DON + /// @param capabilityConfigurations The list of configurations for the + /// capabilities supported by the DON + /// @param isPublic True if the DON is can accept external workflows + function _setDONConfig( + uint32 donId, + uint32 configCount, + bytes32[] calldata nodes, + CapabilityConfiguration[] calldata capabilityConfigurations, + bool isPublic + ) internal { + s_dons[donId].isPublic = isPublic; + + DONCapabilityConfig storage donCapabilityConfig = s_dons[donId].config[configCount]; + for (uint256 i; i < nodes.length; ++i) { + bytes32 nodeP2PId = nodes[i]; + if (donCapabilityConfig.nodes.contains(nodeP2PId)) revert DuplicateDONNode(donId, nodeP2PId); + + donCapabilityConfig.nodes.add(nodeP2PId); + } + + for (uint256 i; i < capabilityConfigurations.length; ++i) { + CapabilityConfiguration calldata configuration = capabilityConfigurations[i]; + bytes32 capabilityId = configuration.capabilityId; + + if (!s_hashedCapabilityIds.contains(capabilityId)) revert CapabilityDoesNotExist(capabilityId); + if (s_deprecatedHashedCapabilityIds.contains(capabilityId)) revert CapabilityIsDeprecated(capabilityId); + + if (donCapabilityConfig.capabilityConfigs[capabilityId].length > 0) + revert DuplicateDONCapability(donId, capabilityId); + + for (uint256 j; j < nodes.length; ++j) { + bytes32 nodeP2PId = nodes[j]; + if (!s_nodes[nodeP2PId].supportedCapabilityIds[s_nodes[nodeP2PId].configCount].contains(capabilityId)) + revert NodeDoesNotSupportCapability(nodeP2PId, capabilityId); + } + + donCapabilityConfig.capabilityIds.push(capabilityId); + donCapabilityConfig.capabilityConfigs[capabilityId] = configuration.config; + } + + s_dons[donId].configCount = configCount; + emit ConfigSet(donId, configCount); + } } 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 9b215edccdc..497d26870b9 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddDONTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddDONTest.t.sol @@ -7,7 +7,9 @@ import {CapabilityRegistry} from "../CapabilityRegistry.sol"; contract CapabilityRegistry_AddDONTest is BaseTest { event DONAdded(uint256 donId, bool isPublic); + event ConfigSet(uint32 donId, uint32 configCount); + uint32 private constant DON_ID = 1; uint32 private constant TEST_NODE_OPERATOR_ONE_ID = 0; uint256 private constant TEST_NODE_OPERATOR_TWO_ID = 1; bytes32 private constant INVALID_P2P_ID = bytes32("fake-p2p"); @@ -158,22 +160,26 @@ contract CapabilityRegistry_AddDONTest is BaseTest { }); vm.expectEmit(true, true, true, true, address(s_capabilityRegistry)); - emit DONAdded(1, true); + emit ConfigSet(DON_ID, 1); + vm.expectEmit(true, true, true, true, address(s_capabilityRegistry)); + emit DONAdded(DON_ID, true); s_capabilityRegistry.addDON(nodes, capabilityConfigs, true); ( uint32 id, + uint32 configCount, bool isPublic, bytes32[] memory donNodes, CapabilityRegistry.CapabilityConfiguration[] memory donCapabilityConfigs - ) = s_capabilityRegistry.getDON(1); - assertEq(id, 1); + ) = s_capabilityRegistry.getDON(DON_ID); + assertEq(id, DON_ID); + assertEq(configCount, 1); assertEq(isPublic, true); - assertEq(donCapabilityConfigs.length, 1); + assertEq(donCapabilityConfigs.length, capabilityConfigs.length); assertEq(donCapabilityConfigs[0].capabilityId, s_basicHashedCapabilityId); - assertEq(s_capabilityRegistry.getDONCapabilityConfig(1, s_basicHashedCapabilityId), CONFIG); + assertEq(s_capabilityRegistry.getDONCapabilityConfig(DON_ID, s_basicHashedCapabilityId), CONFIG); - assertEq(donNodes.length, 1); + assertEq(donNodes.length, nodes.length); assertEq(donNodes[0], P2P_ID); } } 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 36d29b0a107..c0fcb42d286 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_RemoveDONsTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_RemoveDONsTest.t.sol @@ -86,11 +86,13 @@ contract CapabilityRegistry_RemoveDONsTest is BaseTest { ( uint32 id, + uint32 configCount, bool isPublic, bytes32[] memory donNodes, CapabilityRegistry.CapabilityConfiguration[] memory donCapabilityConfigs ) = s_capabilityRegistry.getDON(DON_ID); assertEq(id, 0); + assertEq(configCount, 0); assertEq(isPublic, false); assertEq(donCapabilityConfigs.length, 0); assertEq(s_capabilityRegistry.getDONCapabilityConfig(DON_ID, s_basicHashedCapabilityId), bytes("")); diff --git a/contracts/src/v0.8/keystone/test/CapabilityRegistry_UpdateDONTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilityRegistry_UpdateDONTest.t.sol new file mode 100644 index 00000000000..db7522f5699 --- /dev/null +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_UpdateDONTest.t.sol @@ -0,0 +1,218 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import {BaseTest} from "./BaseTest.t.sol"; + +import {CapabilityRegistry} from "../CapabilityRegistry.sol"; + +contract CapabilityRegistry_UpdateDONTest is BaseTest { + event DONUpdated(uint256 donId, bool isPublic); + event ConfigSet(uint32 donId, uint32 configCount); + + uint32 private constant DON_ID = 1; + uint32 private constant TEST_NODE_OPERATOR_ONE_ID = 0; + uint256 private constant TEST_NODE_OPERATOR_TWO_ID = 1; + bytes32 private constant INVALID_P2P_ID = bytes32("fake-p2p"); + bytes private constant CONFIG = bytes("onchain-config"); + + function setUp() public override { + BaseTest.setUp(); + + s_capabilityRegistry.addNodeOperators(_getNodeOperators()); + s_capabilityRegistry.addCapability(s_basicCapability); + s_capabilityRegistry.addCapability(s_capabilityWithConfigurationContract); + + 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.NodeParams({ + nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, + p2pId: P2P_ID, + signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + hashedCapabilityIds: capabilityIds + }); + + bytes32[] memory nodeTwoCapabilityIds = new bytes32[](1); + nodeTwoCapabilityIds[0] = s_basicHashedCapabilityId; + + nodes[1] = CapabilityRegistry.NodeParams({ + nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, + p2pId: P2P_ID_TWO, + signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, + hashedCapabilityIds: nodeTwoCapabilityIds + }); + + changePrank(NODE_OPERATOR_ONE_ADMIN); + s_capabilityRegistry.addNodes(nodes); + + changePrank(ADMIN); + + bytes32[] memory donNodes = new bytes32[](1); + donNodes[0] = P2P_ID; + + CapabilityRegistry.CapabilityConfiguration[] + memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](1); + capabilityConfigs[0] = CapabilityRegistry.CapabilityConfiguration({ + capabilityId: s_basicHashedCapabilityId, + config: CONFIG + }); + s_capabilityRegistry.addDON(donNodes, capabilityConfigs, true); + } + + function test_RevertWhen_CalledByNonAdmin() public { + changePrank(STRANGER); + vm.expectRevert("Only callable by owner"); + bytes32[] memory nodes = new bytes32[](1); + CapabilityRegistry.CapabilityConfiguration[] + memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](1); + + capabilityConfigs[0] = CapabilityRegistry.CapabilityConfiguration({ + capabilityId: s_basicHashedCapabilityId, + config: CONFIG + }); + s_capabilityRegistry.updateDON(DON_ID, nodes, capabilityConfigs, true); + } + + function test_RevertWhen_NodeDoesNotSupportCapability() public { + bytes32[] memory nodes = new bytes32[](1); + nodes[0] = P2P_ID_TWO; + CapabilityRegistry.CapabilityConfiguration[] + memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](1); + capabilityConfigs[0] = CapabilityRegistry.CapabilityConfiguration({ + capabilityId: s_capabilityWithConfigurationContractId, + config: CONFIG + }); + vm.expectRevert( + abi.encodeWithSelector( + CapabilityRegistry.NodeDoesNotSupportCapability.selector, + P2P_ID_TWO, + s_capabilityWithConfigurationContractId + ) + ); + s_capabilityRegistry.updateDON(DON_ID, nodes, capabilityConfigs, true); + } + + function test_RevertWhen_DONDoesNotExist() public { + uint32 nonExistentDONId = 10; + bytes32[] memory nodes = new bytes32[](1); + CapabilityRegistry.CapabilityConfiguration[] + memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](1); + capabilityConfigs[0] = CapabilityRegistry.CapabilityConfiguration({ + capabilityId: s_basicHashedCapabilityId, + config: CONFIG + }); + vm.expectRevert(abi.encodeWithSelector(CapabilityRegistry.DONDoesNotExist.selector, nonExistentDONId)); + s_capabilityRegistry.updateDON(nonExistentDONId, nodes, capabilityConfigs, true); + } + + function test_RevertWhen_CapabilityDoesNotExist() public { + bytes32[] memory nodes = new bytes32[](1); + CapabilityRegistry.CapabilityConfiguration[] + memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](1); + capabilityConfigs[0] = CapabilityRegistry.CapabilityConfiguration({ + capabilityId: s_nonExistentHashedCapabilityId, + config: CONFIG + }); + vm.expectRevert( + abi.encodeWithSelector(CapabilityRegistry.CapabilityDoesNotExist.selector, s_nonExistentHashedCapabilityId) + ); + s_capabilityRegistry.updateDON(DON_ID, nodes, capabilityConfigs, true); + } + + function test_RevertWhen_DuplicateCapabilityAdded() public { + bytes32[] memory nodes = new bytes32[](1); + nodes[0] = P2P_ID; + + CapabilityRegistry.CapabilityConfiguration[] + memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](2); + capabilityConfigs[0] = CapabilityRegistry.CapabilityConfiguration({ + capabilityId: s_basicHashedCapabilityId, + config: CONFIG + }); + capabilityConfigs[1] = CapabilityRegistry.CapabilityConfiguration({ + capabilityId: s_basicHashedCapabilityId, + config: CONFIG + }); + + vm.expectRevert( + abi.encodeWithSelector(CapabilityRegistry.DuplicateDONCapability.selector, 1, s_basicHashedCapabilityId) + ); + s_capabilityRegistry.updateDON(DON_ID, nodes, capabilityConfigs, true); + } + + function test_RevertWhen_DeprecatedCapabilityAdded() public { + bytes32 capabilityId = s_basicHashedCapabilityId; + s_capabilityRegistry.deprecateCapability(capabilityId); + + bytes32[] memory nodes = new bytes32[](1); + nodes[0] = P2P_ID; + + CapabilityRegistry.CapabilityConfiguration[] + memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](1); + capabilityConfigs[0] = CapabilityRegistry.CapabilityConfiguration({capabilityId: capabilityId, config: CONFIG}); + + vm.expectRevert(abi.encodeWithSelector(CapabilityRegistry.CapabilityIsDeprecated.selector, capabilityId)); + s_capabilityRegistry.updateDON(DON_ID, nodes, capabilityConfigs, true); + } + + function test_RevertWhen_DuplicateNodeAdded() public { + bytes32[] memory nodes = new bytes32[](2); + nodes[0] = P2P_ID; + nodes[1] = P2P_ID; + + CapabilityRegistry.CapabilityConfiguration[] + memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](1); + capabilityConfigs[0] = CapabilityRegistry.CapabilityConfiguration({ + capabilityId: s_basicHashedCapabilityId, + config: CONFIG + }); + vm.expectRevert(abi.encodeWithSelector(CapabilityRegistry.DuplicateDONNode.selector, 1, P2P_ID)); + s_capabilityRegistry.updateDON(DON_ID, nodes, capabilityConfigs, true); + } + + function test_UpdatesDON() public { + bytes32[] memory nodes = new bytes32[](1); + nodes[0] = P2P_ID; + + CapabilityRegistry.CapabilityConfiguration[] + memory capabilityConfigs = new CapabilityRegistry.CapabilityConfiguration[](2); + capabilityConfigs[0] = CapabilityRegistry.CapabilityConfiguration({ + capabilityId: s_basicHashedCapabilityId, + config: CONFIG + }); + capabilityConfigs[1] = CapabilityRegistry.CapabilityConfiguration({ + capabilityId: s_capabilityWithConfigurationContractId, + config: CONFIG + }); + + (, uint32 oldConfigCount, , , ) = s_capabilityRegistry.getDON(DON_ID); + + bool expectedDONIsPublic = false; + uint32 expectedConfigCount = oldConfigCount + 1; + + vm.expectEmit(true, true, true, true, address(s_capabilityRegistry)); + emit ConfigSet(DON_ID, expectedConfigCount); + vm.expectEmit(true, true, true, true, address(s_capabilityRegistry)); + emit DONUpdated(DON_ID, expectedDONIsPublic); + s_capabilityRegistry.updateDON(DON_ID, nodes, capabilityConfigs, expectedDONIsPublic); + + ( + uint32 id, + uint32 configCount, + bool isPublic, + bytes32[] memory donNodes, + CapabilityRegistry.CapabilityConfiguration[] memory donCapabilityConfigs + ) = s_capabilityRegistry.getDON(DON_ID); + assertEq(id, DON_ID); + assertEq(configCount, expectedConfigCount); + assertEq(isPublic, false); + assertEq(donCapabilityConfigs.length, capabilityConfigs.length); + assertEq(donCapabilityConfigs[0].capabilityId, s_basicHashedCapabilityId); + assertEq(s_capabilityRegistry.getDONCapabilityConfig(DON_ID, s_basicHashedCapabilityId), CONFIG); + + assertEq(donNodes.length, nodes.length); + assertEq(donNodes[0], P2P_ID); + } +} 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 3b267be57e1..2dc7f35083c 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,8 +55,8 @@ type CapabilityRegistryNodeParams struct { } var CapabilityRegistryMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"AccessForbidden\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CapabilityAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityIsDeprecated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"DONDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"DuplicateDONCapability\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"DuplicateDONNode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"proposedConfigurationContract\",\"type\":\"address\"}],\"name\":\"InvalidCapabilityConfigurationContractInterface\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"name\":\"InvalidNodeCapabilities\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidNodeOperatorAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"InvalidNodeP2PId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidNodeSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"lengthOne\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lengthTwo\",\"type\":\"uint256\"}],\"name\":\"LengthMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"NodeDoesNotSupportCapability\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityDeprecated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"donId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"}],\"name\":\"DONAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"DONRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"}],\"name\":\"NodeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NodeOperatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"}],\"name\":\"NodeOperatorRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NodeOperatorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"NodeRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"}],\"name\":\"NodeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"labelledName\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"enumCapabilityRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"}],\"internalType\":\"structCapabilityRegistry.Capability\",\"name\":\"capability\",\"type\":\"tuple\"}],\"name\":\"addCapability\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"nodes\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilityRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"}],\"name\":\"addDON\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilityRegistry.NodeOperator[]\",\"name\":\"nodeOperators\",\"type\":\"tuple[]\"}],\"name\":\"addNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"internalType\":\"structCapabilityRegistry.NodeParams[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"}],\"name\":\"addNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"deprecateCapability\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCapabilities\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"labelledName\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"enumCapabilityRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"}],\"internalType\":\"structCapabilityRegistry.Capability[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedId\",\"type\":\"bytes32\"}],\"name\":\"getCapability\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"labelledName\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"enumCapabilityRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"}],\"internalType\":\"structCapabilityRegistry.Capability\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"getDON\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilityRegistry.CapabilityConfiguration[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"getDONCapabilityConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"labelledName\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"}],\"name\":\"getHashedCapabilityId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"getNode\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"internalType\":\"structCapabilityRegistry.NodeParams\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"}],\"name\":\"getNodeOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilityRegistry.NodeOperator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"isCapabilityDeprecated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"donIds\",\"type\":\"uint32[]\"}],\"name\":\"removeDONs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"nodeOperatorIds\",\"type\":\"uint256[]\"}],\"name\":\"removeNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"removedNodeP2PIds\",\"type\":\"bytes32[]\"}],\"name\":\"removeNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"nodeOperatorIds\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilityRegistry.NodeOperator[]\",\"name\":\"nodeOperators\",\"type\":\"tuple[]\"}],\"name\":\"updateNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"internalType\":\"structCapabilityRegistry.NodeParams[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"}],\"name\":\"updateNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6080604052600d805463ffffffff191660011790553480156200002157600080fd5b503380600081620000795760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000ac57620000ac81620000b5565b50505062000160565b336001600160a01b038216036200010f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000070565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61371680620001706000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c80635e65e309116100d85780638da5cb5b1161008c578063b06e07a711610066578063b06e07a7146103ad578063ddbe4f82146103c0578063f2fde38b146103d557600080fd5b80638da5cb5b146103525780639cb7c5f41461037a578063ae3c241c1461039a57600080fd5b80636ae5c591116100bd5780636ae5c5911461032457806373ac22b41461033757806379ba50971461034a57600080fd5b80635e65e309146102f157806365c14dc71461030457600080fd5b80631d05394c1161013a57806336b402fb1161011457806336b402fb14610275578063398f3773146102bd57806350c946fe146102d057600080fd5b80631d05394c1461022c578063235374051461023f5780632c01a1e81461026257600080fd5b8063125700111161016b57806312570011146101af578063181f5a77146101d75780631cdf63431461021957600080fd5b80630c5801e314610187578063117392ce1461019c575b600080fd5b61019a61019536600461292e565b6103e8565b005b61019a6101aa36600461299a565b6106f9565b6101c26101bd3660046129b2565b610944565b60405190151581526020015b60405180910390f35b60408051808201909152601881527f4361706162696c697479526567697374727920312e302e30000000000000000060208201525b6040516101ce9190612a2f565b61019a610227366004612a42565b610957565b61019a61023a366004612a42565b610a1a565b61025261024d366004612a9d565b610b3f565b6040516101ce9493929190612af3565b61019a610270366004612a42565b610d98565b6102af610283366004612bab565b604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b6040519081526020016101ce565b61019a6102cb366004612a42565b61101d565b6102e36102de3660046129b2565b6111b6565b6040516101ce929190612bcd565b61019a6102ff366004612a42565b61125b565b6103176103123660046129b2565b61175e565b6040516101ce9190612c59565b61019a610332366004612caa565b611844565b61019a610345366004612a42565b611c40565b61019a612094565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ce565b61038d6103883660046129b2565b612191565b6040516101ce9190612dcd565b61019a6103a83660046129b2565b61223b565b61020c6103bb366004612ddb565b612306565b6103c86123db565b6040516101ce9190612e05565b61019a6103e3366004612e75565b612520565b828114610430576040517fab8b67c600000000000000000000000000000000000000000000000000000000815260048101849052602481018290526044015b60405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff16905b848110156106f157600086868381811061046857610468612e92565b905060200201359050600085858481811061048557610485612e92565b90506020028101906104979190612ec1565b6104a090612fc9565b805190915073ffffffffffffffffffffffffffffffffffffffff166104f1576040517feeacd93900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805173ffffffffffffffffffffffffffffffffffffffff16331480159061052e57503373ffffffffffffffffffffffffffffffffffffffff851614155b15610565576040517fef67f5d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160008381526009602052604090205473ffffffffffffffffffffffffffffffffffffffff908116911614158061061757506020808201516040516105ab9201612a2f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000868152600983529290922091926105fe9260010191016130e2565b6040516020818303038152906040528051906020012014155b156106de578051600083815260096020908152604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90931692909217825582015160019091019061068490826131d1565b50806000015173ffffffffffffffffffffffffffffffffffffffff167f14c8f513e8a6d86d2d16b0cb64976de4e72386c4f8068eca3b7354373f8fe97a8383602001516040516106d59291906132eb565b60405180910390a25b5050806106ea90613333565b905061044c565b505050505050565b610701612534565b6040805182356020828101919091528084013582840152825180830384018152606090920190925280519101206107396003826125b7565b15610770576040517fe288638f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107826080840160608501612e75565b73ffffffffffffffffffffffffffffffffffffffff16146108ed576107ad6080830160608401612e75565b73ffffffffffffffffffffffffffffffffffffffff163b158061088d57506107db6080830160608401612e75565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f884efe6100000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff91909116906301ffc9a790602401602060405180830381865afa158015610867573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088b919061336b565b155b156108ed576108a26080830160608401612e75565b6040517fabb5e3fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610427565b6108f86003826125d2565b50600081815260026020526040902082906109138282613388565b505060405181907f65610e5677eedff94555572640e442f89848a109ef8593fa927ac30b2565ff0690600090a25050565b60006109516005836125b7565b92915050565b61095f612534565b60005b81811015610a1557600083838381811061097e5761097e612e92565b60209081029290920135600081815260099093526040832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681559093509190506109cf6001830182612894565b50506040518181527f1e5877d7b3001d1569bf733b76c7eceda58bd6c031e5b8d0b7042308ba2e9d4f9060200160405180910390a150610a0e81613333565b9050610962565b505050565b610a22612534565b60005b81811015610a15576000838383818110610a4157610a41612e92565b9050602002016020810190610a569190612a9d565b63ffffffff8082166000908152600b6020526040812080549394509264010000000090049091169003610abd576040517f2b62be9b00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610427565b63ffffffff82166000818152600b602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000016905590519182527f7c551c5f33df1b67ff1dee6d812a4a2ea076c2a5bea7d3da390a75619df1553e910160405180910390a1505080610b3890613333565b9050610a25565b63ffffffff8082166000908152600b6020908152604080832080546401000000009004909416808452600190940182528083206002810180548351818602810186019094528084529495869560609586959294938893929091830182828015610bc757602002820191906000526020600020905b815481526020019060010190808311610bb3575b505050505090506000815167ffffffffffffffff811115610bea57610bea612eff565b604051908082528060200260200182016040528015610c3057816020015b604080518082019091526000815260606020820152815260200190600190039081610c085790505b50905060005b8151811015610d51576040518060400160405280848381518110610c5c57610c5c612e92565b60200260200101518152602001856003016000868581518110610c8157610c81612e92565b602002602001015181526020019081526020016000208054610ca290613095565b80601f0160208091040260200160405190810160405280929190818152602001828054610cce90613095565b8015610d1b5780601f10610cf057610100808354040283529160200191610d1b565b820191906000526020600020905b815481529060010190602001808311610cfe57829003601f168201915b5050505050815250828281518110610d3557610d35612e92565b602002602001018190525080610d4a90613333565b9050610c36565b5063ffffffff8981166000908152600b60205260409020549081169068010000000000000000900460ff16610d85856125de565b9199509750955093505050509193509193565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b82811015611017576000848483818110610dd257610dd2612e92565b602090810292909201356000818152600a90935260409092206001015491925050151580610e2f576040517f64e2ee9200000000000000000000000000000000000000000000000000000000815260048101839052602401610427565b6000828152600a602090815260408083205463ffffffff168352600982528083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff1682526001810180549293919291840191610e8990613095565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb590613095565b8015610f025780601f10610ed757610100808354040283529160200191610f02565b820191906000526020600020905b815481529060010190602001808311610ee557829003601f168201915b505050505081525050905084158015610f325750805173ffffffffffffffffffffffffffffffffffffffff163314155b15610f69576040517fef67f5d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600a6020526040902060010154610f87906007906125eb565b506000838152600a602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001681556001810183905560020191909155517f5254e609a97bab37b7cc79fe128f85c097bd6015c6e1624ae0ba392eb975320590610ffb9085815260200190565b60405180910390a15050508061101090613333565b9050610db6565b50505050565b611025612534565b60005b81811015610a1557600083838381811061104457611044612e92565b90506020028101906110569190612ec1565b61105f90612fc9565b805190915073ffffffffffffffffffffffffffffffffffffffff166110b0576040517feeacd93900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c54604080518082018252835173ffffffffffffffffffffffffffffffffffffffff908116825260208086015181840190815260008681526009909252939020825181547fffffffffffffffffffffffff00000000000000000000000000000000000000001692169190911781559151909190600182019061113390826131d1565b50905050600c6000815461114690613333565b909155508151602083015160405173ffffffffffffffffffffffffffffffffffffffff909216917fda6697b182650034bd205cdc2dbfabb06bdb3a0a83a2b45bfefa3c4881284e0b9161119b918591906132eb565b60405180910390a25050806111af90613333565b9050611028565b6040805160808101825260008082526020820181905291810191909152606080820152604080516080810182526000848152600a6020908152838220805463ffffffff808216865260018301548487015260028301548688015264010000000090910416835260030190529182206060820190611232906125de565b90526000938452600a602052604090932054929364010000000090930463ffffffff1692915050565b60005b81811015610a1557600083838381811061127a5761127a612e92565b905060200281019061128c919061340a565b6112959061343e565b905060006112b860005473ffffffffffffffffffffffffffffffffffffffff1690565b825163ffffffff1660009081526009602090815260408083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff9081168352600182018054969091163314965093949193909284019161131590613095565b80601f016020809104026020016040519081016040528092919081815260200182805461134190613095565b801561138e5780601f106113635761010080835404028352916020019161138e565b820191906000526020600020905b81548152906001019060200180831161137157829003601f168201915b5050505050815250509050811580156113be5750805173ffffffffffffffffffffffffffffffffffffffff163314155b156113f5576040517fef67f5d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040808401516000908152600a602052206001015415158061144b5783604001516040517f64e2ee9200000000000000000000000000000000000000000000000000000000815260040161042791815260200190565b6020840151158061149157508360200151600a600086604001518152602001908152602001600020600101541415801561149157506020840151611491906007906125b7565b156114c8576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060840151805160000361150a57806040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016104279190613511565b6040858101516000908152600a602052208054640100000000900463ffffffff1690600461153783613524565b82546101009290920a63ffffffff8181021990931691831602179091556040878101516000908152600a60205290812054640100000000900490911691505b8251811015611642576115ac83828151811061159457611594612e92565b602002602001015160036125b790919063ffffffff16565b6115e457826040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016104279190613511565b6116318382815181106115f9576115f9612e92565b6020908102919091018101516040808b01516000908152600a845281812063ffffffff8089168352600390910190945220916125d216565b5061163b81613333565b9050611576565b508551604080880180516000908152600a602090815283822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff9096169590951790945581518082528382206002015581518152828120600190810154948b01519251825292902090910154146116f7576116c66007826125eb565b50602080880180516040808b01516000908152600a90945290922060010191909155516116f5906007906125d2565b505b60408781015188516020808b0151845193845263ffffffff909216908301528183015290517ff101cfc54994c31624d25789378d71ec4dbdc533e26a4ecc6b7648f4798d09169181900360600190a1505050505050508061175790613333565b905061125e565b6040805180820190915260008152606060208201526000828152600960209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff16835260018101805491928401916117bb90613095565b80601f01602080910402602001604051908101604052809291908181526020018280546117e790613095565b80156118345780601f1061180957610100808354040283529160200191611834565b820191906000526020600020905b81548152906001019060200180831161181757829003601f168201915b5050505050815250509050919050565b61184c612534565b600d5463ffffffff166000818152600b6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffff0000000016851768010000000000000000871515021781556001808552908101909252822090915b878110156119425760008989838181106118c9576118c9612e92565b602002919091013591506118df905083826125b7565b15611925576040517f636e405700000000000000000000000000000000000000000000000000000000815263ffffffff8616600482015260248101829052604401610427565b61192f83826125d2565b50508061193b90613333565b90506118ad565b5060005b85811015611b74573687878381811061196157611961612e92565b90506020028101906119739190612ec1565b905080356119826003826125b7565b6119bb576040517fe181733f00000000000000000000000000000000000000000000000000000000815260048101829052602401610427565b6119c66005826125b7565b15611a00576040517ff7d7a29400000000000000000000000000000000000000000000000000000000815260048101829052602401610427565b600081815260038501602052604081208054611a1b90613095565b90501115611a64576040517f3927d08000000000000000000000000000000000000000000000000000000000815263ffffffff8716600482015260248101829052604401610427565b60005b8a811015611b1c5760008c8c83818110611a8357611a83612e92565b602090810292909201356000818152600a84526040808220805463ffffffff6401000000009091048116845260039091019095529020909350611acb9290915085906125b716565b611b0b576040517fa7e792500000000000000000000000000000000000000000000000000000000081526004810182905260248101849052604401610427565b50611b1581613333565b9050611a67565b50600284018054600181018255600091825260209182902001829055611b4490830183613547565b6000838152600387016020526040902091611b609190836135ac565b50505080611b6d90613333565b9050611946565b5063ffffffff8381166000908152600b6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff1664010000000086851602179055600d80549092611bcc9116613524565b91906101000a81548163ffffffff021916908363ffffffff1602179055507fab55f4c8fb4335a586285ae209d1f1e17a7ccb22e1131963624434d98c8546a58385604051611c2e92919063ffffffff9290921682521515602082015260400190565b60405180910390a15050505050505050565b60005b81811015610a15576000838383818110611c5f57611c5f612e92565b9050602002810190611c71919061340a565b611c7a9061343e565b90506000611c9d60005473ffffffffffffffffffffffffffffffffffffffff1690565b825163ffffffff1660009081526009602090815260408083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff90811683526001820180549690911633149650939491939092840191611cfa90613095565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2690613095565b8015611d735780601f10611d4857610100808354040283529160200191611d73565b820191906000526020600020905b815481529060010190602001808311611d5657829003601f168201915b505050505081525050905081158015611da35750805173ffffffffffffffffffffffffffffffffffffffff163314155b15611dda576040517fef67f5d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040808401516000908152600a602052206001015415158080611dff57506040840151155b15611e3e5783604001516040517f64e2ee9200000000000000000000000000000000000000000000000000000000815260040161042791815260200190565b60208401511580611e5b57506020840151611e5b906007906125b7565b15611e92576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608401518051600003611ed457806040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016104279190613511565b6040858101516000908152600a602052208054600490611f0190640100000000900463ffffffff16613524565b82546101009290920a63ffffffff8181021990931691831602179091556040868101516000908152600a602052908120546401000000009004909116905b8251811015611fbb57611f5d83828151811061159457611594612e92565b611f9557826040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016104279190613511565b611faa8382815181106115f9576115f9612e92565b50611fb481613333565b9050611f3f565b508551604080880180516000908152600a602090815283822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff9687161790558251808352848320600201558a01805192518252929020600101555161202d91600791906125d216565b5060408681015187516020808a0151845193845263ffffffff909216908301528183015290517fc9296aa9b0951d8000e8ed7f2b5be30c5106de8df3dbedf9a57c93f5f9e4d7da9181900360600190a15050505050508061208d90613333565b9050611c43565b60015473ffffffffffffffffffffffffffffffffffffffff163314612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610427565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b604080516080808201835260008083526020808401829052838501829052606084018290528582526002808252918590208551938401865280548452600180820154928501929092529182015493949293919284019160ff16908111156121fa576121fa612d2e565b600181111561220b5761220b612d2e565b815260029190910154610100900473ffffffffffffffffffffffffffffffffffffffff1660209091015292915050565b612243612534565b61224e6003826125b7565b612287576040517fe181733f00000000000000000000000000000000000000000000000000000000815260048101829052602401610427565b6122926005826125b7565b156122cc576040517ff7d7a29400000000000000000000000000000000000000000000000000000000815260048101829052602401610427565b6122d76005826125d2565b5060405181907fdcea1b78b6ddc31592a94607d537543fcaafda6cc52d6d5cc7bbfca1422baf2190600090a250565b63ffffffff8083166000908152600b60209081526040808320805464010000000090049094168084526001909401825280832085845260030190915290208054606092919061235490613095565b80601f016020809104026020016040519081016040528092919081815260200182805461238090613095565b80156123cd5780601f106123a2576101008083540402835291602001916123cd565b820191906000526020600020905b8154815290600101906020018083116123b057829003601f168201915b505050505091505092915050565b606060006123e960036125de565b905060006123f760056125f7565b825161240391906136c7565b67ffffffffffffffff81111561241b5761241b612eff565b60405190808252806020026020018201604052801561248b57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124395790505b5090506000805b83518110156125175760008482815181106124af576124af612e92565b602002602001015190506124cd8160056125b790919063ffffffff16565b612506576124da81612191565b8484815181106124ec576124ec612e92565b6020026020010181905250828061250290613333565b9350505b5061251081613333565b9050612492565b50909392505050565b612528612534565b61253181612601565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146125b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610427565b565b600081815260018301602052604081205415155b9392505050565b60006125cb83836126f6565b606060006125cb83612745565b60006125cb83836127a1565b6000610951825490565b3373ffffffffffffffffffffffffffffffffffffffff821603612680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610427565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600081815260018301602052604081205461273d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610951565b506000610951565b60608160000180548060200260200160405190810160405280929190818152602001828054801561279557602002820191906000526020600020905b815481526020019060010190808311612781575b50505050509050919050565b6000818152600183016020526040812054801561288a5760006127c56001836136c7565b85549091506000906127d9906001906136c7565b905081811461283e5760008660000182815481106127f9576127f9612e92565b906000526020600020015490508087600001848154811061281c5761281c612e92565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061284f5761284f6136da565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610951565b6000915050610951565b5080546128a090613095565b6000825580601f106128b0575050565b601f01602090049060005260206000209081019061253191905b808211156128de57600081556001016128ca565b5090565b60008083601f8401126128f457600080fd5b50813567ffffffffffffffff81111561290c57600080fd5b6020830191508360208260051b850101111561292757600080fd5b9250929050565b6000806000806040858703121561294457600080fd5b843567ffffffffffffffff8082111561295c57600080fd5b612968888389016128e2565b9096509450602087013591508082111561298157600080fd5b5061298e878288016128e2565b95989497509550505050565b6000608082840312156129ac57600080fd5b50919050565b6000602082840312156129c457600080fd5b5035919050565b6000815180845260005b818110156129f1576020818501810151868301820152016129d5565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006125cb60208301846129cb565b60008060208385031215612a5557600080fd5b823567ffffffffffffffff811115612a6c57600080fd5b612a78858286016128e2565b90969095509350505050565b803563ffffffff81168114612a9857600080fd5b919050565b600060208284031215612aaf57600080fd5b6125cb82612a84565b600081518084526020808501945080840160005b83811015612ae857815187529582019590820190600101612acc565b509495945050505050565b63ffffffff8516815260006020851515818401526040608081850152612b1c6080850187612ab8565b8481036060860152855180825283820190600581901b8301850185890160005b83811015612b99578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018552815180518452880151888401889052612b86888501826129cb565b9589019593505090870190600101612b3c565b50909c9b505050505050505050505050565b60008060408385031215612bbe57600080fd5b50508035926020909101359150565b60408152600060c0820163ffffffff85511660408401526020808601516060850152604086015160808501526060860151608060a086015282815180855260e0870191508383019450600092505b80831015612c3b5784518252938301936001929092019190830190612c1b565b5063ffffffff8716838701529350612c509050565b50509392505050565b6020815273ffffffffffffffffffffffffffffffffffffffff825116602082015260006020830151604080840152612c9460608401826129cb565b949350505050565b801515811461253157600080fd5b600080600080600060608688031215612cc257600080fd5b853567ffffffffffffffff80821115612cda57600080fd5b612ce689838a016128e2565b90975095506020880135915080821115612cff57600080fd5b50612d0c888289016128e2565b9094509250506040860135612d2081612c9c565b809150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8051825260208101516020830152604081015160028110612da7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b604083015260609081015173ffffffffffffffffffffffffffffffffffffffff16910152565b608081016109518284612d5d565b60008060408385031215612dee57600080fd5b612df783612a84565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b81811015612e4757612e34838551612d5d565b9284019260809290920191600101612e21565b50909695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461253157600080fd5b600060208284031215612e8757600080fd5b81356125cb81612e53565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112612ef557600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715612f5157612f51612eff565b60405290565b6040516080810167ffffffffffffffff81118282101715612f5157612f51612eff565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612fc157612fc1612eff565b604052919050565b600060408236031215612fdb57600080fd5b612fe3612f2e565b8235612fee81612e53565b815260208381013567ffffffffffffffff8082111561300c57600080fd5b9085019036601f83011261301f57600080fd5b81358181111561303157613031612eff565b613061847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612f7a565b9150808252368482850101111561307757600080fd5b80848401858401376000908201840152918301919091525092915050565b600181811c908216806130a957607f821691505b6020821081036129ac577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020808352600084546130f681613095565b80848701526040600180841660008114613117576001811461314f5761317d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838a01528284151560051b8a0101955061317d565b896000528660002060005b858110156131755781548b820186015290830190880161315a565b8a0184019650505b509398975050505050505050565b601f821115610a1557600081815260208120601f850160051c810160208610156131b25750805b601f850160051c820191505b818110156106f1578281556001016131be565b815167ffffffffffffffff8111156131eb576131eb612eff565b6131ff816131f98454613095565b8461318b565b602080601f831160018114613252576000841561321c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556106f1565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561329f57888601518255948401946001909101908401613280565b50858210156132db57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b828152604060208201526000612c9460408301846129cb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361336457613364613304565b5060010190565b60006020828403121561337d57600080fd5b81516125cb81612c9c565b8135815560208201356001820155600281016040830135600281106133ac57600080fd5b815460608501356133bc81612e53565b74ffffffffffffffffffffffffffffffffffffffff008160081b1660ff84167fffffffffffffffffffffff000000000000000000000000000000000000000000841617178455505050505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112612ef557600080fd5b60006080823603121561345057600080fd5b613458612f57565b61346183612a84565b81526020808401358183015260408401356040830152606084013567ffffffffffffffff8082111561349257600080fd5b9085019036601f8301126134a557600080fd5b8135818111156134b7576134b7612eff565b8060051b91506134c8848301612f7a565b81815291830184019184810190368411156134e257600080fd5b938501935b83851015613500578435825293850193908501906134e7565b606087015250939695505050505050565b6020815260006125cb6020830184612ab8565b600063ffffffff80831681810361353d5761353d613304565b6001019392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261357c57600080fd5b83018035915067ffffffffffffffff82111561359757600080fd5b60200191503681900382131561292757600080fd5b67ffffffffffffffff8311156135c4576135c4612eff565b6135d8836135d28354613095565b8361318b565b6000601f84116001811461362a57600085156135f45750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556136c0565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156136795786850135825560209485019460019092019101613659565b50868210156136b4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8181038181111561095157610951613304565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000813000a", + ABI: "[{\"inputs\":[],\"name\":\"AccessForbidden\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CapabilityAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityIsDeprecated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"DONDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"DuplicateDONCapability\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"DuplicateDONNode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"proposedConfigurationContract\",\"type\":\"address\"}],\"name\":\"InvalidCapabilityConfigurationContractInterface\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"name\":\"InvalidNodeCapabilities\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidNodeOperatorAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"InvalidNodeP2PId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidNodeSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"lengthOne\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lengthTwo\",\"type\":\"uint256\"}],\"name\":\"LengthMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"NodeDoesNotSupportCapability\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityDeprecated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"donId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"}],\"name\":\"DONAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"DONRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"donId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"}],\"name\":\"DONUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"}],\"name\":\"NodeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NodeOperatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"}],\"name\":\"NodeOperatorRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NodeOperatorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"NodeRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"}],\"name\":\"NodeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"labelledName\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"enumCapabilityRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"}],\"internalType\":\"structCapabilityRegistry.Capability\",\"name\":\"capability\",\"type\":\"tuple\"}],\"name\":\"addCapability\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"nodes\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilityRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"}],\"name\":\"addDON\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilityRegistry.NodeOperator[]\",\"name\":\"nodeOperators\",\"type\":\"tuple[]\"}],\"name\":\"addNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"internalType\":\"structCapabilityRegistry.NodeParams[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"}],\"name\":\"addNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"deprecateCapability\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCapabilities\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"labelledName\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"enumCapabilityRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"}],\"internalType\":\"structCapabilityRegistry.Capability[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedId\",\"type\":\"bytes32\"}],\"name\":\"getCapability\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"labelledName\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"enumCapabilityRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"}],\"internalType\":\"structCapabilityRegistry.Capability\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"getDON\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilityRegistry.CapabilityConfiguration[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"getDONCapabilityConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"labelledName\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"}],\"name\":\"getHashedCapabilityId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"getNode\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"internalType\":\"structCapabilityRegistry.NodeParams\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeOperatorId\",\"type\":\"uint256\"}],\"name\":\"getNodeOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilityRegistry.NodeOperator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"isCapabilityDeprecated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"donIds\",\"type\":\"uint32[]\"}],\"name\":\"removeDONs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"nodeOperatorIds\",\"type\":\"uint256[]\"}],\"name\":\"removeNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"removedNodeP2PIds\",\"type\":\"bytes32[]\"}],\"name\":\"removeNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[]\",\"name\":\"nodes\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilityRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"}],\"name\":\"updateDON\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"nodeOperatorIds\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilityRegistry.NodeOperator[]\",\"name\":\"nodeOperators\",\"type\":\"tuple[]\"}],\"name\":\"updateNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"internalType\":\"structCapabilityRegistry.NodeParams[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"}],\"name\":\"updateNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x6080604052600d805463ffffffff191660011790553480156200002157600080fd5b503380600081620000795760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000ac57620000ac81620000b5565b50505062000160565b336001600160a01b038216036200010f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000070565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61397280620001706000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c80635e65e309116100e35780639cb7c5f41161008c578063c63239c511610066578063c63239c5146103cc578063ddbe4f82146103df578063f2fde38b146103f457600080fd5b80639cb7c5f414610386578063ae3c241c146103a6578063b06e07a7146103b957600080fd5b806373ac22b4116100bd57806373ac22b41461034357806379ba5097146103565780638da5cb5b1461035e57600080fd5b80635e65e309146102fd57806365c14dc7146103105780636ae5c5911461033057600080fd5b80631d05394c1161014557806336b402fb1161011f57806336b402fb14610281578063398f3773146102c957806350c946fe146102dc57600080fd5b80631d05394c14610237578063235374051461024a5780632c01a1e81461026e57600080fd5b8063125700111161017657806312570011146101ba578063181f5a77146101e25780631cdf63431461022457600080fd5b80630c5801e314610192578063117392ce146101a7575b600080fd5b6101a56101a0366004612aeb565b610407565b005b6101a56101b5366004612b57565b610718565b6101cd6101c8366004612b6f565b610963565b60405190151581526020015b60405180910390f35b60408051808201909152601881527f4361706162696c697479526567697374727920312e302e30000000000000000060208201525b6040516101d99190612bec565b6101a5610232366004612bff565b610976565b6101a5610245366004612bff565b610a39565b61025d610258366004612c5a565b610b5e565b6040516101d9959493929190612cb0565b6101a561027c366004612bff565b610dbe565b6102bb61028f366004612d74565b604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b6040519081526020016101d9565b6101a56102d7366004612bff565b611043565b6102ef6102ea366004612b6f565b6111dc565b6040516101d9929190612d96565b6101a561030b366004612bff565b611281565b61032361031e366004612b6f565b611784565b6040516101d99190612e22565b6101a561033e366004612e73565b61186a565b6101a5610351366004612bff565b61194b565b6101a5611d9f565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d9565b610399610394366004612b6f565b611e9c565b6040516101d99190612f96565b6101a56103b4366004612b6f565b611f46565b6102176103c7366004612fa4565b612011565b6101a56103da366004612fce565b6120e6565b6103e76121e4565b6040516101d99190613061565b6101a56104023660046130d1565b612329565b82811461044f576040517fab8b67c600000000000000000000000000000000000000000000000000000000815260048101849052602481018290526044015b60405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff16905b84811015610710576000868683818110610487576104876130ee565b90506020020135905060008585848181106104a4576104a46130ee565b90506020028101906104b6919061311d565b6104bf90613225565b805190915073ffffffffffffffffffffffffffffffffffffffff16610510576040517feeacd93900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805173ffffffffffffffffffffffffffffffffffffffff16331480159061054d57503373ffffffffffffffffffffffffffffffffffffffff851614155b15610584576040517fef67f5d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160008381526009602052604090205473ffffffffffffffffffffffffffffffffffffffff908116911614158061063657506020808201516040516105ca9201612bec565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060008681526009835292909220919261061d92600101910161333e565b6040516020818303038152906040528051906020012014155b156106fd578051600083815260096020908152604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921782558201516001909101906106a3908261342d565b50806000015173ffffffffffffffffffffffffffffffffffffffff167f14c8f513e8a6d86d2d16b0cb64976de4e72386c4f8068eca3b7354373f8fe97a8383602001516040516106f4929190613547565b60405180910390a25b5050806107099061358f565b905061046b565b505050505050565b61072061233d565b6040805182356020828101919091528084013582840152825180830384018152606090920190925280519101206107586003826123c0565b1561078f576040517fe288638f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107a160808401606085016130d1565b73ffffffffffffffffffffffffffffffffffffffff161461090c576107cc60808301606084016130d1565b73ffffffffffffffffffffffffffffffffffffffff163b15806108ac57506107fa60808301606084016130d1565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f884efe6100000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff91909116906301ffc9a790602401602060405180830381865afa158015610886573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108aa91906135c7565b155b1561090c576108c160808301606084016130d1565b6040517fabb5e3fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610446565b6109176003826123db565b506000818152600260205260409020829061093282826135e4565b505060405181907f65610e5677eedff94555572640e442f89848a109ef8593fa927ac30b2565ff0690600090a25050565b60006109706005836123c0565b92915050565b61097e61233d565b60005b81811015610a3457600083838381811061099d5761099d6130ee565b60209081029290920135600081815260099093526040832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681559093509190506109ee6001830182612a51565b50506040518181527f1e5877d7b3001d1569bf733b76c7eceda58bd6c031e5b8d0b7042308ba2e9d4f9060200160405180910390a150610a2d8161358f565b9050610981565b505050565b610a4161233d565b60005b81811015610a34576000838383818110610a6057610a606130ee565b9050602002016020810190610a759190612c5a565b63ffffffff8082166000908152600b6020526040812080549394509264010000000090049091169003610adc576040517f2b62be9b00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610446565b63ffffffff82166000818152600b602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000016905590519182527f7c551c5f33df1b67ff1dee6d812a4a2ea076c2a5bea7d3da390a75619df1553e910160405180910390a1505080610b579061358f565b9050610a44565b63ffffffff8082166000908152600b6020908152604080832080546401000000009004909416808452600190940182528083206002810180548351818602810186019094528084529495869586956060958695939488939192909190830182828015610be957602002820191906000526020600020905b815481526020019060010190808311610bd5575b505050505090506000815167ffffffffffffffff811115610c0c57610c0c61315b565b604051908082528060200260200182016040528015610c5257816020015b604080518082019091526000815260606020820152815260200190600190039081610c2a5790505b50905060005b8151811015610d73576040518060400160405280848381518110610c7e57610c7e6130ee565b60200260200101518152602001856003016000868581518110610ca357610ca36130ee565b602002602001015181526020019081526020016000208054610cc4906132f1565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf0906132f1565b8015610d3d5780601f10610d1257610100808354040283529160200191610d3d565b820191906000526020600020905b815481529060010190602001808311610d2057829003601f168201915b5050505050815250828281518110610d5757610d576130ee565b602002602001018190525080610d6c9061358f565b9050610c58565b5063ffffffff8a81166000908152600b602052604090205490811690859068010000000000000000900460ff16610da9866123e7565b929d919c509a50909850909650945050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b8281101561103d576000848483818110610df857610df86130ee565b602090810292909201356000818152600a90935260409092206001015491925050151580610e55576040517f64e2ee9200000000000000000000000000000000000000000000000000000000815260048101839052602401610446565b6000828152600a602090815260408083205463ffffffff168352600982528083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff1682526001810180549293919291840191610eaf906132f1565b80601f0160208091040260200160405190810160405280929190818152602001828054610edb906132f1565b8015610f285780601f10610efd57610100808354040283529160200191610f28565b820191906000526020600020905b815481529060010190602001808311610f0b57829003601f168201915b505050505081525050905084158015610f585750805173ffffffffffffffffffffffffffffffffffffffff163314155b15610f8f576040517fef67f5d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600a6020526040902060010154610fad906007906123f4565b506000838152600a602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001681556001810183905560020191909155517f5254e609a97bab37b7cc79fe128f85c097bd6015c6e1624ae0ba392eb9753205906110219085815260200190565b60405180910390a1505050806110369061358f565b9050610ddc565b50505050565b61104b61233d565b60005b81811015610a3457600083838381811061106a5761106a6130ee565b905060200281019061107c919061311d565b61108590613225565b805190915073ffffffffffffffffffffffffffffffffffffffff166110d6576040517feeacd93900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c54604080518082018252835173ffffffffffffffffffffffffffffffffffffffff908116825260208086015181840190815260008681526009909252939020825181547fffffffffffffffffffffffff000000000000000000000000000000000000000016921691909117815591519091906001820190611159908261342d565b50905050600c6000815461116c9061358f565b909155508151602083015160405173ffffffffffffffffffffffffffffffffffffffff909216917fda6697b182650034bd205cdc2dbfabb06bdb3a0a83a2b45bfefa3c4881284e0b916111c191859190613547565b60405180910390a25050806111d59061358f565b905061104e565b6040805160808101825260008082526020820181905291810191909152606080820152604080516080810182526000848152600a6020908152838220805463ffffffff808216865260018301548487015260028301548688015264010000000090910416835260030190529182206060820190611258906123e7565b90526000938452600a602052604090932054929364010000000090930463ffffffff1692915050565b60005b81811015610a345760008383838181106112a0576112a06130ee565b90506020028101906112b29190613666565b6112bb9061369a565b905060006112de60005473ffffffffffffffffffffffffffffffffffffffff1690565b825163ffffffff1660009081526009602090815260408083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff9081168352600182018054969091163314965093949193909284019161133b906132f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611367906132f1565b80156113b45780601f10611389576101008083540402835291602001916113b4565b820191906000526020600020905b81548152906001019060200180831161139757829003601f168201915b5050505050815250509050811580156113e45750805173ffffffffffffffffffffffffffffffffffffffff163314155b1561141b576040517fef67f5d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040808401516000908152600a60205220600101541515806114715783604001516040517f64e2ee9200000000000000000000000000000000000000000000000000000000815260040161044691815260200190565b602084015115806114b757508360200151600a60008660400151815260200190815260200160002060010154141580156114b7575060208401516114b7906007906123c0565b156114ee576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060840151805160000361153057806040517f3748d4c6000000000000000000000000000000000000000000000000000000008152600401610446919061376d565b6040858101516000908152600a602052208054640100000000900463ffffffff1690600461155d83613780565b82546101009290920a63ffffffff8181021990931691831602179091556040878101516000908152600a60205290812054640100000000900490911691505b8251811015611668576115d28382815181106115ba576115ba6130ee565b602002602001015160036123c090919063ffffffff16565b61160a57826040517f3748d4c6000000000000000000000000000000000000000000000000000000008152600401610446919061376d565b61165783828151811061161f5761161f6130ee565b6020908102919091018101516040808b01516000908152600a845281812063ffffffff8089168352600390910190945220916123db16565b506116618161358f565b905061159c565b508551604080880180516000908152600a602090815283822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff9096169590951790945581518082528382206002015581518152828120600190810154948b015192518252929020909101541461171d576116ec6007826123f4565b50602080880180516040808b01516000908152600a909452909220600101919091555161171b906007906123db565b505b60408781015188516020808b0151845193845263ffffffff909216908301528183015290517ff101cfc54994c31624d25789378d71ec4dbdc533e26a4ecc6b7648f4798d09169181900360600190a1505050505050508061177d9061358f565b9050611284565b6040805180820190915260008152606060208201526000828152600960209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff16835260018101805491928401916117e1906132f1565b80601f016020809104026020016040519081016040528092919081815260200182805461180d906132f1565b801561185a5780601f1061182f5761010080835404028352916020019161185a565b820191906000526020600020905b81548152906001019060200180831161183d57829003601f168201915b5050505050815250509050919050565b61187261233d565b600d5463ffffffff166000818152600b6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000168217905560016118c282828989898989612400565b600d80546000906118d89063ffffffff16613780565b91906101000a81548163ffffffff021916908363ffffffff1602179055507fab55f4c8fb4335a586285ae209d1f1e17a7ccb22e1131963624434d98c8546a5828460405161193a92919063ffffffff9290921682521515602082015260400190565b60405180910390a150505050505050565b60005b81811015610a3457600083838381811061196a5761196a6130ee565b905060200281019061197c9190613666565b6119859061369a565b905060006119a860005473ffffffffffffffffffffffffffffffffffffffff1690565b825163ffffffff1660009081526009602090815260408083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff90811683526001820180549690911633149650939491939092840191611a05906132f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611a31906132f1565b8015611a7e5780601f10611a5357610100808354040283529160200191611a7e565b820191906000526020600020905b815481529060010190602001808311611a6157829003601f168201915b505050505081525050905081158015611aae5750805173ffffffffffffffffffffffffffffffffffffffff163314155b15611ae5576040517fef67f5d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040808401516000908152600a602052206001015415158080611b0a57506040840151155b15611b495783604001516040517f64e2ee9200000000000000000000000000000000000000000000000000000000815260040161044691815260200190565b60208401511580611b6657506020840151611b66906007906123c0565b15611b9d576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608401518051600003611bdf57806040517f3748d4c6000000000000000000000000000000000000000000000000000000008152600401610446919061376d565b6040858101516000908152600a602052208054600490611c0c90640100000000900463ffffffff16613780565b82546101009290920a63ffffffff8181021990931691831602179091556040868101516000908152600a602052908120546401000000009004909116905b8251811015611cc657611c688382815181106115ba576115ba6130ee565b611ca057826040517f3748d4c6000000000000000000000000000000000000000000000000000000008152600401610446919061376d565b611cb583828151811061161f5761161f6130ee565b50611cbf8161358f565b9050611c4a565b508551604080880180516000908152600a602090815283822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff9687161790558251808352848320600201558a018051925182529290206001015551611d3891600791906123db16565b5060408681015187516020808a0151845193845263ffffffff909216908301528183015290517fc9296aa9b0951d8000e8ed7f2b5be30c5106de8df3dbedf9a57c93f5f9e4d7da9181900360600190a150505050505080611d989061358f565b905061194e565b60015473ffffffffffffffffffffffffffffffffffffffff163314611e20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610446565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b604080516080808201835260008083526020808401829052838501829052606084018290528582526002808252918590208551938401865280548452600180820154928501929092529182015493949293919284019160ff1690811115611f0557611f05612ef7565b6001811115611f1657611f16612ef7565b815260029190910154610100900473ffffffffffffffffffffffffffffffffffffffff1660209091015292915050565b611f4e61233d565b611f596003826123c0565b611f92576040517fe181733f00000000000000000000000000000000000000000000000000000000815260048101829052602401610446565b611f9d6005826123c0565b15611fd7576040517ff7d7a29400000000000000000000000000000000000000000000000000000000815260048101829052602401610446565b611fe26005826123db565b5060405181907fdcea1b78b6ddc31592a94607d537543fcaafda6cc52d6d5cc7bbfca1422baf2190600090a250565b63ffffffff8083166000908152600b60209081526040808320805464010000000090049094168084526001909401825280832085845260030190915290208054606092919061205f906132f1565b80601f016020809104026020016040519081016040528092919081815260200182805461208b906132f1565b80156120d85780601f106120ad576101008083540402835291602001916120d8565b820191906000526020600020905b8154815290600101906020018083116120bb57829003601f168201915b505050505091505092915050565b6120ee61233d565b63ffffffff8087166000908152600b6020526040812054640100000000900490911690819003612152576040517f2b62be9b00000000000000000000000000000000000000000000000000000000815263ffffffff88166004820152602401610446565b61216c8761215f83613780565b9250828888888888612400565b600d80546000906121829063ffffffff16613780565b91906101000a81548163ffffffff021916908363ffffffff1602179055507f5dce85cddb7818888e0d91ad9cacfeb0082a155fb8497ad810b4d43d51ba17af878360405161193a92919063ffffffff9290921682521515602082015260400190565b606060006121f260036123e7565b9050600061220060056127b4565b825161220c91906137a3565b67ffffffffffffffff8111156122245761222461315b565b60405190808252806020026020018201604052801561229457816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816122425790505b5090506000805b83518110156123205760008482815181106122b8576122b86130ee565b602002602001015190506122d68160056123c090919063ffffffff16565b61230f576122e381611e9c565b8484815181106122f5576122f56130ee565b6020026020010181905250828061230b9061358f565b9350505b506123198161358f565b905061229b565b50909392505050565b61233161233d565b61233a816127be565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146123be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610446565b565b600081815260018301602052604081205415155b9392505050565b60006123d483836128b3565b606060006123d483612902565b60006123d4838361295e565b63ffffffff8781166000908152600b6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff166801000000000000000087151502178155938a16835260019093019052908120905b858110156124f457600087878381811061247b5761247b6130ee565b60200291909101359150612491905083826123c0565b156124d7576040517f636e405700000000000000000000000000000000000000000000000000000000815263ffffffff8b16600482015260248101829052604401610446565b6124e183826123db565b5050806124ed9061358f565b905061245f565b5060005b838110156127265736858583818110612513576125136130ee565b9050602002810190612525919061311d565b905080356125346003826123c0565b61256d576040517fe181733f00000000000000000000000000000000000000000000000000000000815260048101829052602401610446565b6125786005826123c0565b156125b2576040517ff7d7a29400000000000000000000000000000000000000000000000000000000815260048101829052602401610446565b6000818152600385016020526040812080546125cd906132f1565b90501115612616576040517f3927d08000000000000000000000000000000000000000000000000000000000815263ffffffff8c16600482015260248101829052604401610446565b60005b888110156126ce5760008a8a83818110612635576126356130ee565b602090810292909201356000818152600a84526040808220805463ffffffff640100000000909104811684526003909101909552902090935061267d9290915085906123c016565b6126bd576040517fa7e792500000000000000000000000000000000000000000000000000000000081526004810182905260248101849052604401610446565b506126c78161358f565b9050612619565b506002840180546001810182556000918252602091829020018290556126f6908301836137b6565b600083815260038701602052604090209161271291908361381b565b5050508061271f9061358f565b90506124f8565b5063ffffffff8881166000818152600b602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000958d1695860217905581519283528201929092527ff264aae70bf6a9d90e68e0f9b393f4e7fbea67b063b0f336e0b36c1581703651910160405180910390a15050505050505050565b6000610970825490565b3373ffffffffffffffffffffffffffffffffffffffff82160361283d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610446565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008181526001830160205260408120546128fa57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610970565b506000610970565b60608160000180548060200260200160405190810160405280929190818152602001828054801561295257602002820191906000526020600020905b81548152602001906001019080831161293e575b50505050509050919050565b60008181526001830160205260408120548015612a475760006129826001836137a3565b8554909150600090612996906001906137a3565b90508181146129fb5760008660000182815481106129b6576129b66130ee565b90600052602060002001549050808760000184815481106129d9576129d96130ee565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612a0c57612a0c613936565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610970565b6000915050610970565b508054612a5d906132f1565b6000825580601f10612a6d575050565b601f01602090049060005260206000209081019061233a91905b80821115612a9b5760008155600101612a87565b5090565b60008083601f840112612ab157600080fd5b50813567ffffffffffffffff811115612ac957600080fd5b6020830191508360208260051b8501011115612ae457600080fd5b9250929050565b60008060008060408587031215612b0157600080fd5b843567ffffffffffffffff80821115612b1957600080fd5b612b2588838901612a9f565b90965094506020870135915080821115612b3e57600080fd5b50612b4b87828801612a9f565b95989497509550505050565b600060808284031215612b6957600080fd5b50919050565b600060208284031215612b8157600080fd5b5035919050565b6000815180845260005b81811015612bae57602081850181015186830182015201612b92565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006123d46020830184612b88565b60008060208385031215612c1257600080fd5b823567ffffffffffffffff811115612c2957600080fd5b612c3585828601612a9f565b90969095509350505050565b803563ffffffff81168114612c5557600080fd5b919050565b600060208284031215612c6c57600080fd5b6123d482612c41565b600081518084526020808501945080840160005b83811015612ca557815187529582019590820190600101612c89565b509495945050505050565b600063ffffffff8088168352602081881681850152604091508615158285015260a06060850152612ce460a0850187612c75565b8481036080860152855180825282820190600581901b8301840184890160005b83811015612d61578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018552815180518452870151878401899052612d4e89850182612b88565b9588019593505090860190600101612d04565b50909d9c50505050505050505050505050565b60008060408385031215612d8757600080fd5b50508035926020909101359150565b60408152600060c0820163ffffffff85511660408401526020808601516060850152604086015160808501526060860151608060a086015282815180855260e0870191508383019450600092505b80831015612e045784518252938301936001929092019190830190612de4565b5063ffffffff8716838701529350612e199050565b50509392505050565b6020815273ffffffffffffffffffffffffffffffffffffffff825116602082015260006020830151604080840152612e5d6060840182612b88565b949350505050565b801515811461233a57600080fd5b600080600080600060608688031215612e8b57600080fd5b853567ffffffffffffffff80821115612ea357600080fd5b612eaf89838a01612a9f565b90975095506020880135915080821115612ec857600080fd5b50612ed588828901612a9f565b9094509250506040860135612ee981612e65565b809150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8051825260208101516020830152604081015160028110612f70577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b604083015260609081015173ffffffffffffffffffffffffffffffffffffffff16910152565b608081016109708284612f26565b60008060408385031215612fb757600080fd5b612fc083612c41565b946020939093013593505050565b60008060008060008060808789031215612fe757600080fd5b612ff087612c41565b9550602087013567ffffffffffffffff8082111561300d57600080fd5b6130198a838b01612a9f565b9097509550604089013591508082111561303257600080fd5b5061303f89828a01612a9f565b909450925050606087013561305381612e65565b809150509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156130a357613090838551612f26565b928401926080929092019160010161307d565b50909695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461233a57600080fd5b6000602082840312156130e357600080fd5b81356123d4816130af565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261315157600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156131ad576131ad61315b565b60405290565b6040516080810167ffffffffffffffff811182821017156131ad576131ad61315b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561321d5761321d61315b565b604052919050565b60006040823603121561323757600080fd5b61323f61318a565b823561324a816130af565b815260208381013567ffffffffffffffff8082111561326857600080fd5b9085019036601f83011261327b57600080fd5b81358181111561328d5761328d61315b565b6132bd847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016131d6565b915080825236848285010111156132d357600080fd5b80848401858401376000908201840152918301919091525092915050565b600181811c9082168061330557607f821691505b602082108103612b69577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000602080835260008454613352816132f1565b8084870152604060018084166000811461337357600181146133ab576133d9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838a01528284151560051b8a010195506133d9565b896000528660002060005b858110156133d15781548b82018601529083019088016133b6565b8a0184019650505b509398975050505050505050565b601f821115610a3457600081815260208120601f850160051c8101602086101561340e5750805b601f850160051c820191505b818110156107105782815560010161341a565b815167ffffffffffffffff8111156134475761344761315b565b61345b8161345584546132f1565b846133e7565b602080601f8311600181146134ae57600084156134785750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610710565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156134fb578886015182559484019460019091019084016134dc565b508582101561353757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b828152604060208201526000612e5d6040830184612b88565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135c0576135c0613560565b5060010190565b6000602082840312156135d957600080fd5b81516123d481612e65565b81358155602082013560018201556002810160408301356002811061360857600080fd5b81546060850135613618816130af565b74ffffffffffffffffffffffffffffffffffffffff008160081b1660ff84167fffffffffffffffffffffff000000000000000000000000000000000000000000841617178455505050505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183360301811261315157600080fd5b6000608082360312156136ac57600080fd5b6136b46131b3565b6136bd83612c41565b81526020808401358183015260408401356040830152606084013567ffffffffffffffff808211156136ee57600080fd5b9085019036601f83011261370157600080fd5b8135818111156137135761371361315b565b8060051b91506137248483016131d6565b818152918301840191848101903684111561373e57600080fd5b938501935b8385101561375c57843582529385019390850190613743565b606087015250939695505050505050565b6020815260006123d46020830184612c75565b600063ffffffff80831681810361379957613799613560565b6001019392505050565b8181038181111561097057610970613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126137eb57600080fd5b83018035915067ffffffffffffffff82111561380657600080fd5b602001915036819003821315612ae457600080fd5b67ffffffffffffffff8311156138335761383361315b565b6138478361384183546132f1565b836133e7565b6000601f84116001811461389957600085156138635750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b17835561392f565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156138e857868501358255602094850194600190920191016138c8565b5086821015613923577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000813000a", } var CapabilityRegistryABI = CapabilityRegistryMetaData.ABI @@ -239,28 +239,29 @@ func (_CapabilityRegistry *CapabilityRegistryCallerSession) GetCapability(hashed return _CapabilityRegistry.Contract.GetCapability(&_CapabilityRegistry.CallOpts, hashedId) } -func (_CapabilityRegistry *CapabilityRegistryCaller) GetDON(opts *bind.CallOpts, donId uint32) (uint32, bool, [][32]byte, []CapabilityRegistryCapabilityConfiguration, error) { +func (_CapabilityRegistry *CapabilityRegistryCaller) GetDON(opts *bind.CallOpts, donId uint32) (uint32, uint32, bool, [][32]byte, []CapabilityRegistryCapabilityConfiguration, error) { var out []interface{} err := _CapabilityRegistry.contract.Call(opts, &out, "getDON", donId) if err != nil { - return *new(uint32), *new(bool), *new([][32]byte), *new([]CapabilityRegistryCapabilityConfiguration), err + return *new(uint32), *new(uint32), *new(bool), *new([][32]byte), *new([]CapabilityRegistryCapabilityConfiguration), err } out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) - out1 := *abi.ConvertType(out[1], new(bool)).(*bool) - out2 := *abi.ConvertType(out[2], new([][32]byte)).(*[][32]byte) - out3 := *abi.ConvertType(out[3], new([]CapabilityRegistryCapabilityConfiguration)).(*[]CapabilityRegistryCapabilityConfiguration) + out1 := *abi.ConvertType(out[1], new(uint32)).(*uint32) + out2 := *abi.ConvertType(out[2], new(bool)).(*bool) + out3 := *abi.ConvertType(out[3], new([][32]byte)).(*[][32]byte) + out4 := *abi.ConvertType(out[4], new([]CapabilityRegistryCapabilityConfiguration)).(*[]CapabilityRegistryCapabilityConfiguration) - return out0, out1, out2, out3, err + return out0, out1, out2, out3, out4, err } -func (_CapabilityRegistry *CapabilityRegistrySession) GetDON(donId uint32) (uint32, bool, [][32]byte, []CapabilityRegistryCapabilityConfiguration, error) { +func (_CapabilityRegistry *CapabilityRegistrySession) GetDON(donId uint32) (uint32, uint32, bool, [][32]byte, []CapabilityRegistryCapabilityConfiguration, error) { return _CapabilityRegistry.Contract.GetDON(&_CapabilityRegistry.CallOpts, donId) } -func (_CapabilityRegistry *CapabilityRegistryCallerSession) GetDON(donId uint32) (uint32, bool, [][32]byte, []CapabilityRegistryCapabilityConfiguration, error) { +func (_CapabilityRegistry *CapabilityRegistryCallerSession) GetDON(donId uint32) (uint32, uint32, bool, [][32]byte, []CapabilityRegistryCapabilityConfiguration, error) { return _CapabilityRegistry.Contract.GetDON(&_CapabilityRegistry.CallOpts, donId) } @@ -539,6 +540,18 @@ func (_CapabilityRegistry *CapabilityRegistryTransactorSession) TransferOwnershi return _CapabilityRegistry.Contract.TransferOwnership(&_CapabilityRegistry.TransactOpts, to) } +func (_CapabilityRegistry *CapabilityRegistryTransactor) UpdateDON(opts *bind.TransactOpts, donId uint32, nodes [][32]byte, capabilityConfigurations []CapabilityRegistryCapabilityConfiguration, isPublic bool) (*types.Transaction, error) { + return _CapabilityRegistry.contract.Transact(opts, "updateDON", donId, nodes, capabilityConfigurations, isPublic) +} + +func (_CapabilityRegistry *CapabilityRegistrySession) UpdateDON(donId uint32, nodes [][32]byte, capabilityConfigurations []CapabilityRegistryCapabilityConfiguration, isPublic bool) (*types.Transaction, error) { + return _CapabilityRegistry.Contract.UpdateDON(&_CapabilityRegistry.TransactOpts, donId, nodes, capabilityConfigurations, isPublic) +} + +func (_CapabilityRegistry *CapabilityRegistryTransactorSession) UpdateDON(donId uint32, nodes [][32]byte, capabilityConfigurations []CapabilityRegistryCapabilityConfiguration, isPublic bool) (*types.Transaction, error) { + return _CapabilityRegistry.Contract.UpdateDON(&_CapabilityRegistry.TransactOpts, donId, nodes, capabilityConfigurations, isPublic) +} + func (_CapabilityRegistry *CapabilityRegistryTransactor) UpdateNodeOperators(opts *bind.TransactOpts, nodeOperatorIds []*big.Int, nodeOperators []CapabilityRegistryNodeOperator) (*types.Transaction, error) { return _CapabilityRegistry.contract.Transact(opts, "updateNodeOperators", nodeOperatorIds, nodeOperators) } @@ -817,6 +830,124 @@ func (_CapabilityRegistry *CapabilityRegistryFilterer) ParseCapabilityDeprecated return event, nil } +type CapabilityRegistryConfigSetIterator struct { + Event *CapabilityRegistryConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CapabilityRegistryConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CapabilityRegistryConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(CapabilityRegistryConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *CapabilityRegistryConfigSetIterator) Error() error { + return it.fail +} + +func (it *CapabilityRegistryConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CapabilityRegistryConfigSet struct { + DonId uint32 + ConfigCount uint32 + Raw types.Log +} + +func (_CapabilityRegistry *CapabilityRegistryFilterer) FilterConfigSet(opts *bind.FilterOpts) (*CapabilityRegistryConfigSetIterator, error) { + + logs, sub, err := _CapabilityRegistry.contract.FilterLogs(opts, "ConfigSet") + if err != nil { + return nil, err + } + return &CapabilityRegistryConfigSetIterator{contract: _CapabilityRegistry.contract, event: "ConfigSet", logs: logs, sub: sub}, nil +} + +func (_CapabilityRegistry *CapabilityRegistryFilterer) WatchConfigSet(opts *bind.WatchOpts, sink chan<- *CapabilityRegistryConfigSet) (event.Subscription, error) { + + logs, sub, err := _CapabilityRegistry.contract.WatchLogs(opts, "ConfigSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CapabilityRegistryConfigSet) + if err := _CapabilityRegistry.contract.UnpackLog(event, "ConfigSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_CapabilityRegistry *CapabilityRegistryFilterer) ParseConfigSet(log types.Log) (*CapabilityRegistryConfigSet, error) { + event := new(CapabilityRegistryConfigSet) + if err := _CapabilityRegistry.contract.UnpackLog(event, "ConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + type CapabilityRegistryDONAddedIterator struct { Event *CapabilityRegistryDONAdded @@ -1052,6 +1183,124 @@ func (_CapabilityRegistry *CapabilityRegistryFilterer) ParseDONRemoved(log types return event, nil } +type CapabilityRegistryDONUpdatedIterator struct { + Event *CapabilityRegistryDONUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CapabilityRegistryDONUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CapabilityRegistryDONUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(CapabilityRegistryDONUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *CapabilityRegistryDONUpdatedIterator) Error() error { + return it.fail +} + +func (it *CapabilityRegistryDONUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CapabilityRegistryDONUpdated struct { + DonId *big.Int + IsPublic bool + Raw types.Log +} + +func (_CapabilityRegistry *CapabilityRegistryFilterer) FilterDONUpdated(opts *bind.FilterOpts) (*CapabilityRegistryDONUpdatedIterator, error) { + + logs, sub, err := _CapabilityRegistry.contract.FilterLogs(opts, "DONUpdated") + if err != nil { + return nil, err + } + return &CapabilityRegistryDONUpdatedIterator{contract: _CapabilityRegistry.contract, event: "DONUpdated", logs: logs, sub: sub}, nil +} + +func (_CapabilityRegistry *CapabilityRegistryFilterer) WatchDONUpdated(opts *bind.WatchOpts, sink chan<- *CapabilityRegistryDONUpdated) (event.Subscription, error) { + + logs, sub, err := _CapabilityRegistry.contract.WatchLogs(opts, "DONUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CapabilityRegistryDONUpdated) + if err := _CapabilityRegistry.contract.UnpackLog(event, "DONUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_CapabilityRegistry *CapabilityRegistryFilterer) ParseDONUpdated(log types.Log) (*CapabilityRegistryDONUpdated, error) { + event := new(CapabilityRegistryDONUpdated) + if err := _CapabilityRegistry.contract.UnpackLog(event, "DONUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + type CapabilityRegistryNodeAddedIterator struct { Event *CapabilityRegistryNodeAdded @@ -2060,10 +2309,14 @@ func (_CapabilityRegistry *CapabilityRegistry) ParseLog(log types.Log) (generate return _CapabilityRegistry.ParseCapabilityAdded(log) case _CapabilityRegistry.abi.Events["CapabilityDeprecated"].ID: return _CapabilityRegistry.ParseCapabilityDeprecated(log) + case _CapabilityRegistry.abi.Events["ConfigSet"].ID: + return _CapabilityRegistry.ParseConfigSet(log) case _CapabilityRegistry.abi.Events["DONAdded"].ID: return _CapabilityRegistry.ParseDONAdded(log) case _CapabilityRegistry.abi.Events["DONRemoved"].ID: return _CapabilityRegistry.ParseDONRemoved(log) + case _CapabilityRegistry.abi.Events["DONUpdated"].ID: + return _CapabilityRegistry.ParseDONUpdated(log) case _CapabilityRegistry.abi.Events["NodeAdded"].ID: return _CapabilityRegistry.ParseNodeAdded(log) case _CapabilityRegistry.abi.Events["NodeOperatorAdded"].ID: @@ -2094,6 +2347,10 @@ func (CapabilityRegistryCapabilityDeprecated) Topic() common.Hash { return common.HexToHash("0xdcea1b78b6ddc31592a94607d537543fcaafda6cc52d6d5cc7bbfca1422baf21") } +func (CapabilityRegistryConfigSet) Topic() common.Hash { + return common.HexToHash("0xf264aae70bf6a9d90e68e0f9b393f4e7fbea67b063b0f336e0b36c1581703651") +} + func (CapabilityRegistryDONAdded) Topic() common.Hash { return common.HexToHash("0xab55f4c8fb4335a586285ae209d1f1e17a7ccb22e1131963624434d98c8546a5") } @@ -2102,6 +2359,10 @@ func (CapabilityRegistryDONRemoved) Topic() common.Hash { return common.HexToHash("0x7c551c5f33df1b67ff1dee6d812a4a2ea076c2a5bea7d3da390a75619df1553e") } +func (CapabilityRegistryDONUpdated) Topic() common.Hash { + return common.HexToHash("0x5dce85cddb7818888e0d91ad9cacfeb0082a155fb8497ad810b4d43d51ba17af") +} + func (CapabilityRegistryNodeAdded) Topic() common.Hash { return common.HexToHash("0xc9296aa9b0951d8000e8ed7f2b5be30c5106de8df3dbedf9a57c93f5f9e4d7da") } @@ -2143,7 +2404,7 @@ type CapabilityRegistryInterface interface { GetCapability(opts *bind.CallOpts, hashedId [32]byte) (CapabilityRegistryCapability, error) - GetDON(opts *bind.CallOpts, donId uint32) (uint32, bool, [][32]byte, []CapabilityRegistryCapabilityConfiguration, error) + GetDON(opts *bind.CallOpts, donId uint32) (uint32, uint32, bool, [][32]byte, []CapabilityRegistryCapabilityConfiguration, error) GetDONCapabilityConfig(opts *bind.CallOpts, donId uint32, capabilityId [32]byte) ([]byte, error) @@ -2179,6 +2440,8 @@ type CapabilityRegistryInterface interface { TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + UpdateDON(opts *bind.TransactOpts, donId uint32, nodes [][32]byte, capabilityConfigurations []CapabilityRegistryCapabilityConfiguration, isPublic bool) (*types.Transaction, error) + UpdateNodeOperators(opts *bind.TransactOpts, nodeOperatorIds []*big.Int, nodeOperators []CapabilityRegistryNodeOperator) (*types.Transaction, error) UpdateNodes(opts *bind.TransactOpts, nodes []CapabilityRegistryNodeParams) (*types.Transaction, error) @@ -2195,6 +2458,12 @@ type CapabilityRegistryInterface interface { ParseCapabilityDeprecated(log types.Log) (*CapabilityRegistryCapabilityDeprecated, error) + FilterConfigSet(opts *bind.FilterOpts) (*CapabilityRegistryConfigSetIterator, error) + + WatchConfigSet(opts *bind.WatchOpts, sink chan<- *CapabilityRegistryConfigSet) (event.Subscription, error) + + ParseConfigSet(log types.Log) (*CapabilityRegistryConfigSet, error) + FilterDONAdded(opts *bind.FilterOpts) (*CapabilityRegistryDONAddedIterator, error) WatchDONAdded(opts *bind.WatchOpts, sink chan<- *CapabilityRegistryDONAdded) (event.Subscription, error) @@ -2207,6 +2476,12 @@ type CapabilityRegistryInterface interface { ParseDONRemoved(log types.Log) (*CapabilityRegistryDONRemoved, error) + FilterDONUpdated(opts *bind.FilterOpts) (*CapabilityRegistryDONUpdatedIterator, error) + + WatchDONUpdated(opts *bind.WatchOpts, sink chan<- *CapabilityRegistryDONUpdated) (event.Subscription, error) + + ParseDONUpdated(log types.Log) (*CapabilityRegistryDONUpdated, error) + FilterNodeAdded(opts *bind.FilterOpts) (*CapabilityRegistryNodeAddedIterator, error) WatchNodeAdded(opts *bind.WatchOpts, sink chan<- *CapabilityRegistryNodeAdded) (event.Subscription, 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 42a476c06f9..16031996c77 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 b4c900aae9e022f01abbac7993d41f93912247613ac6270b0c4da4ef6f2016e3 -keystone_capability_registry: ../../../contracts/solc/v0.8.19/CapabilityRegistry/CapabilityRegistry.abi ../../../contracts/solc/v0.8.19/CapabilityRegistry/CapabilityRegistry.bin 7ba965f4538c0be63c94335c602916e423e2437680e47281db28a8e521a8db68 +keystone_capability_registry: ../../../contracts/solc/v0.8.19/CapabilityRegistry/CapabilityRegistry.abi ../../../contracts/solc/v0.8.19/CapabilityRegistry/CapabilityRegistry.bin 0f3be7185a134d687c284e01453ab0534c85d89b8ffb4fb3e8d3f19d41b6b555 ocr3_capability: ../../../contracts/solc/v0.8.19/OCR3Capability/OCR3Capability.abi ../../../contracts/solc/v0.8.19/OCR3Capability/OCR3Capability.bin 9dcbdf55bd5729ba266148da3f17733eb592c871c2108ccca546618628fd9ad2