diff --git a/.changeset/two-papayas-begin.md b/.changeset/two-papayas-begin.md new file mode 100644 index 00000000000..3487a1b6b82 --- /dev/null +++ b/.changeset/two-papayas-begin.md @@ -0,0 +1,5 @@ +--- +"chainlink": patch +--- + +#internal update node signer type diff --git a/contracts/.changeset/sour-parents-explode.md b/contracts/.changeset/sour-parents-explode.md new file mode 100644 index 00000000000..ff5b52b98fe --- /dev/null +++ b/contracts/.changeset/sour-parents-explode.md @@ -0,0 +1,5 @@ +--- +"@chainlink/contracts": patch +--- + +update node signer type diff --git a/contracts/src/v0.8/keystone/CapabilityRegistry.sol b/contracts/src/v0.8/keystone/CapabilityRegistry.sol index 41a6a71b5d1..cb7b5408045 100644 --- a/contracts/src/v0.8/keystone/CapabilityRegistry.sol +++ b/contracts/src/v0.8/keystone/CapabilityRegistry.sol @@ -26,7 +26,7 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { /// @notice The id of the node operator that manages this node uint32 nodeOperatorId; /// @notice The signer address for application-layer message verification. - address signer; + bytes32 signer; /// @notice This is an Ed25519 public key that is used to identify a node. /// This key is guaranteed to be unique in the CapabilityRegistry. It is /// used to identify a node in the the P2P network. @@ -42,7 +42,13 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { /// @notice The number of times the node's capability has been updated uint32 configCount; /// @notice The signer address for application-layer message verification. - address signer; + /// @dev This key is guaranteed to be unique in the CapabilityRegistry + /// as a signer address can only belong to one node. + /// @dev This should be the ABI encoded version of the node's address. + /// I.e 0x0000address. The Capability Registry does not store it as an address so that + /// non EVM chains with addresses greater than 20 bytes can be supported + /// in the future. + bytes32 signer; /// @notice This is an Ed25519 public key that is used to identify a node. /// This key is guaranteed to be unique in the CapabilityRegistry. It is /// used to identify a node in the the P2P network. @@ -158,7 +164,8 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { /// @notice This event is emitted when a new node is added /// @param p2pId The P2P ID of the node /// @param nodeOperatorId The ID of the node operator that manages this node - event NodeAdded(bytes32 p2pId, uint256 nodeOperatorId); + /// @param signer The encoded node's signer address + event NodeAdded(bytes32 p2pId, uint256 nodeOperatorId, bytes32 signer); /// @notice This event is emitted when a node is removed /// @param p2pId The P2P ID of the node that was removed @@ -168,7 +175,7 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { /// @param p2pId The P2P ID of the node /// @param nodeOperatorId The ID of the node operator that manages this node /// @param signer The node's signer address - event NodeUpdated(bytes32 p2pId, uint256 nodeOperatorId, address signer); + event NodeUpdated(bytes32 p2pId, uint256 nodeOperatorId, bytes32 signer); /// @notice This event is emitted when a new DON is created /// @param donId The ID of the newly created DON @@ -184,7 +191,8 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { error DONDoesNotExist(uint32 donId); /// @notice This error is thrown when trying to set the node's - /// signer address to zero + /// signer address to zero or if the signer address has already + /// been used by another node error InvalidNodeSigner(); /// @notice This error is thrown when trying add a capability that already @@ -259,6 +267,9 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { /// Deprecated capabilities are skipped by the `getCapabilities` function. EnumerableSet.Bytes32Set private s_deprecatedHashedCapabilityIds; + /// @notice Encoded node signer addresses + EnumerableSet.Bytes32Set private s_nodeSigners; + /// @notice Mapping of node operators mapping(uint256 nodeOperatorId => NodeOperator nodeOperator) private s_nodeOperators; @@ -346,10 +357,10 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { NodeOperator memory nodeOperator = s_nodeOperators[node.nodeOperatorId]; if (!isOwner && msg.sender != nodeOperator.admin) revert AccessForbidden(); - bool nodeExists = s_nodes[node.p2pId].signer != address(0); + bool nodeExists = s_nodes[node.p2pId].signer != bytes32(""); if (nodeExists || bytes32(node.p2pId) == bytes32("")) revert InvalidNodeP2PId(node.p2pId); - if (node.signer == address(0)) revert InvalidNodeSigner(); + if (bytes32(node.signer) == bytes32("") || s_nodeSigners.contains(node.signer)) revert InvalidNodeSigner(); bytes32[] memory capabilityIds = node.hashedCapabilityIds; if (capabilityIds.length == 0) revert InvalidNodeCapabilities(capabilityIds); @@ -365,7 +376,8 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { s_nodes[node.p2pId].nodeOperatorId = node.nodeOperatorId; s_nodes[node.p2pId].p2pId = node.p2pId; s_nodes[node.p2pId].signer = node.signer; - emit NodeAdded(node.p2pId, node.nodeOperatorId); + s_nodeSigners.add(node.signer); + emit NodeAdded(node.p2pId, node.nodeOperatorId, node.signer); } } @@ -377,12 +389,13 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { for (uint256 i; i < removedNodeP2PIds.length; ++i) { bytes32 p2pId = removedNodeP2PIds[i]; - bool nodeExists = s_nodes[p2pId].signer != address(0); + bool nodeExists = bytes32(s_nodes[p2pId].signer) != bytes32(""); if (!nodeExists) revert InvalidNodeP2PId(p2pId); NodeOperator memory nodeOperator = s_nodeOperators[s_nodes[p2pId].nodeOperatorId]; if (!isOwner && msg.sender != nodeOperator.admin) revert AccessForbidden(); + s_nodeSigners.remove(s_nodes[p2pId].signer); delete s_nodes[p2pId]; emit NodeRemoved(p2pId); } @@ -400,10 +413,13 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { NodeOperator memory nodeOperator = s_nodeOperators[node.nodeOperatorId]; if (!isOwner && msg.sender != nodeOperator.admin) revert AccessForbidden(); - bool nodeExists = s_nodes[node.p2pId].signer != address(0); + bool nodeExists = s_nodes[node.p2pId].signer != bytes32(""); if (!nodeExists) revert InvalidNodeP2PId(node.p2pId); - if (node.signer == address(0)) revert InvalidNodeSigner(); + if ( + bytes32(node.signer) == bytes32("") || + (s_nodes[node.p2pId].signer != node.signer && s_nodeSigners.contains(node.signer)) + ) revert InvalidNodeSigner(); bytes32[] memory supportedCapabilityIds = node.hashedCapabilityIds; if (supportedCapabilityIds.length == 0) revert InvalidNodeCapabilities(supportedCapabilityIds); @@ -418,7 +434,14 @@ contract CapabilityRegistry is OwnerIsCreator, TypeAndVersionInterface { s_nodes[node.p2pId].nodeOperatorId = node.nodeOperatorId; s_nodes[node.p2pId].p2pId = node.p2pId; - s_nodes[node.p2pId].signer = node.signer; + + bytes32 previousSigner = s_nodes[node.p2pId].signer; + + if (s_nodes[node.p2pId].signer != node.signer) { + s_nodeSigners.remove(previousSigner); + s_nodes[node.p2pId].signer = node.signer; + s_nodeSigners.add(node.signer); + } emit NodeUpdated(node.p2pId, node.nodeOperatorId, node.signer); } } diff --git a/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddNodesTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddNodesTest.t.sol index 116f97e441e..1e4d1234c04 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddNodesTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_AddNodesTest.t.sol @@ -5,10 +5,10 @@ import {BaseTest} from "./BaseTest.t.sol"; import {CapabilityRegistry} from "../CapabilityRegistry.sol"; contract CapabilityRegistry_AddNodesTest is BaseTest { - event NodeAdded(bytes32 p2pId, uint256 nodeOperatorId); + event NodeAdded(bytes32 p2pId, uint256 nodeOperatorId, bytes32 signer); uint32 private constant TEST_NODE_OPERATOR_ONE_ID = 0; - uint256 private constant TEST_NODE_OPERATOR_TWO_ID = 1; + uint32 private constant TEST_NODE_OPERATOR_TWO_ID = 1; function setUp() public override { BaseTest.setUp(); @@ -46,7 +46,7 @@ contract CapabilityRegistry_AddNodesTest is BaseTest { nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, - signer: address(0), + signer: bytes32(""), hashedCapabilityIds: hashedCapabilityIds }); @@ -54,6 +54,35 @@ contract CapabilityRegistry_AddNodesTest is BaseTest { s_capabilityRegistry.addNodes(nodes); } + function test_RevertWhen_SignerAddressNotUnique() public { + changePrank(NODE_OPERATOR_ONE_ADMIN); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); + + bytes32[] memory hashedCapabilityIds = new bytes32[](1); + hashedCapabilityIds[0] = s_basicHashedCapabilityId; + + nodes[0] = CapabilityRegistry.NodeParams({ + nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, + p2pId: P2P_ID, + signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + hashedCapabilityIds: hashedCapabilityIds + }); + + s_capabilityRegistry.addNodes(nodes); + + changePrank(NODE_OPERATOR_TWO_ADMIN); + + // Try adding another node with the same signer address + nodes[0] = CapabilityRegistry.NodeParams({ + nodeOperatorId: TEST_NODE_OPERATOR_TWO_ID, + p2pId: P2P_ID_TWO, + signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + hashedCapabilityIds: hashedCapabilityIds + }); + vm.expectRevert(abi.encodeWithSelector(CapabilityRegistry.InvalidNodeSigner.selector)); + s_capabilityRegistry.addNodes(nodes); + } + function test_RevertWhen_AddingDuplicateP2PId() public { changePrank(NODE_OPERATOR_ONE_ADMIN); CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); @@ -143,7 +172,7 @@ contract CapabilityRegistry_AddNodesTest is BaseTest { }); vm.expectEmit(address(s_capabilityRegistry)); - emit NodeAdded(P2P_ID, TEST_NODE_OPERATOR_ONE_ID); + emit NodeAdded(P2P_ID, TEST_NODE_OPERATOR_ONE_ID, NODE_OPERATOR_ONE_SIGNER_ADDRESS); s_capabilityRegistry.addNodes(nodes); (CapabilityRegistry.NodeParams memory node, uint32 configCount) = s_capabilityRegistry.getNode(P2P_ID); @@ -171,7 +200,7 @@ contract CapabilityRegistry_AddNodesTest is BaseTest { }); vm.expectEmit(address(s_capabilityRegistry)); - emit NodeAdded(P2P_ID, TEST_NODE_OPERATOR_ONE_ID); + emit NodeAdded(P2P_ID, TEST_NODE_OPERATOR_ONE_ID, NODE_OPERATOR_ONE_SIGNER_ADDRESS); s_capabilityRegistry.addNodes(nodes); (CapabilityRegistry.NodeParams memory node, uint32 configCount) = s_capabilityRegistry.getNode(P2P_ID); diff --git a/contracts/src/v0.8/keystone/test/CapabilityRegistry_RemoveNodesTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilityRegistry_RemoveNodesTest.t.sol index 8e3542c8825..85aeab956f8 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_RemoveNodesTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_RemoveNodesTest.t.sol @@ -75,11 +75,42 @@ contract CapabilityRegistry_RemoveNodesTest is BaseTest { (CapabilityRegistry.NodeParams memory node, uint32 configCount) = s_capabilityRegistry.getNode(P2P_ID); assertEq(node.nodeOperatorId, 0); assertEq(node.p2pId, bytes32("")); - assertEq(node.signer, address(0)); + assertEq(node.signer, bytes32("")); assertEq(node.hashedCapabilityIds.length, 0); assertEq(configCount, 0); } + function test_CanAddNodeWithSameSignerAddressAfterRemoving() public { + changePrank(NODE_OPERATOR_ONE_ADMIN); + + bytes32[] memory nodes = new bytes32[](1); + nodes[0] = P2P_ID; + + s_capabilityRegistry.removeNodes(nodes); + + CapabilityRegistry.NodeParams[] memory nodeParams = new CapabilityRegistry.NodeParams[](1); + bytes32[] memory hashedCapabilityIds = new bytes32[](2); + hashedCapabilityIds[0] = s_basicHashedCapabilityId; + hashedCapabilityIds[1] = s_capabilityWithConfigurationContractId; + + nodeParams[0] = CapabilityRegistry.NodeParams({ + nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, + p2pId: P2P_ID, + signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + hashedCapabilityIds: hashedCapabilityIds + }); + + s_capabilityRegistry.addNodes(nodeParams); + + (CapabilityRegistry.NodeParams memory node, uint32 configCount) = s_capabilityRegistry.getNode(P2P_ID); + assertEq(node.nodeOperatorId, TEST_NODE_OPERATOR_ONE_ID); + assertEq(node.p2pId, P2P_ID); + assertEq(node.hashedCapabilityIds.length, 2); + assertEq(node.hashedCapabilityIds[0], s_basicHashedCapabilityId); + assertEq(node.hashedCapabilityIds[1], s_capabilityWithConfigurationContractId); + assertEq(configCount, 1); + } + function test_OwnerCanRemoveNodes() public { changePrank(ADMIN); @@ -93,7 +124,7 @@ contract CapabilityRegistry_RemoveNodesTest is BaseTest { (CapabilityRegistry.NodeParams memory node, uint32 configCount) = s_capabilityRegistry.getNode(P2P_ID); assertEq(node.nodeOperatorId, 0); assertEq(node.p2pId, bytes32("")); - assertEq(node.signer, address(0)); + assertEq(node.signer, bytes32("")); assertEq(node.hashedCapabilityIds.length, 0); assertEq(configCount, 0); } diff --git a/contracts/src/v0.8/keystone/test/CapabilityRegistry_UpdateNodesTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilityRegistry_UpdateNodesTest.t.sol index e97fde01209..13c58c0c373 100644 --- a/contracts/src/v0.8/keystone/test/CapabilityRegistry_UpdateNodesTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilityRegistry_UpdateNodesTest.t.sol @@ -5,11 +5,12 @@ import {BaseTest} from "./BaseTest.t.sol"; import {CapabilityRegistry} from "../CapabilityRegistry.sol"; contract CapabilityRegistry_UpdateNodesTest is BaseTest { - event NodeUpdated(bytes32 p2pId, uint256 nodeOperatorId, address signer); + event NodeUpdated(bytes32 p2pId, uint256 nodeOperatorId, bytes32 signer); uint32 private constant TEST_NODE_OPERATOR_ONE_ID = 0; - uint256 private constant TEST_NODE_OPERATOR_TWO_ID = 1; + uint32 private constant TEST_NODE_OPERATOR_TWO_ID = 1; bytes32 private constant INVALID_P2P_ID = bytes32("fake-p2p"); + bytes32 private constant NEW_NODE_SIGNER = bytes32("new-signer"); function setUp() public override { BaseTest.setUp(); @@ -31,7 +32,16 @@ contract CapabilityRegistry_UpdateNodesTest is BaseTest { }); changePrank(NODE_OPERATOR_ONE_ADMIN); + s_capabilityRegistry.addNodes(nodes); + + nodes[0] = CapabilityRegistry.NodeParams({ + nodeOperatorId: TEST_NODE_OPERATOR_TWO_ID, + p2pId: P2P_ID_TWO, + signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, + hashedCapabilityIds: hashedCapabilityIds + }); + changePrank(NODE_OPERATOR_TWO_ADMIN); s_capabilityRegistry.addNodes(nodes); } @@ -99,7 +109,7 @@ contract CapabilityRegistry_UpdateNodesTest is BaseTest { nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, - signer: address(0), + signer: bytes32(""), hashedCapabilityIds: hashedCapabilityIds }); @@ -107,6 +117,24 @@ contract CapabilityRegistry_UpdateNodesTest is BaseTest { s_capabilityRegistry.updateNodes(nodes); } + function test_RevertWhen_NodeSignerAlreadyAssignedToAnotherNode() public { + changePrank(NODE_OPERATOR_ONE_ADMIN); + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); + + bytes32[] memory hashedCapabilityIds = new bytes32[](1); + hashedCapabilityIds[0] = s_basicHashedCapabilityId; + + nodes[0] = CapabilityRegistry.NodeParams({ + nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, + p2pId: P2P_ID, + signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, + hashedCapabilityIds: hashedCapabilityIds + }); + + vm.expectRevert(CapabilityRegistry.InvalidNodeSigner.selector); + s_capabilityRegistry.updateNodes(nodes); + } + function test_RevertWhen_UpdatingNodeWithoutCapabilities() public { changePrank(NODE_OPERATOR_ONE_ADMIN); CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); @@ -142,6 +170,37 @@ contract CapabilityRegistry_UpdateNodesTest is BaseTest { s_capabilityRegistry.updateNodes(nodes); } + function test_CanUpdateParamsIfNodeSignerAddressNoLongerUsed() public { + changePrank(NODE_OPERATOR_ONE_ADMIN); + + CapabilityRegistry.NodeParams[] memory nodes = new CapabilityRegistry.NodeParams[](1); + bytes32[] memory hashedCapabilityIds = new bytes32[](1); + hashedCapabilityIds[0] = s_basicHashedCapabilityId; + + // Set node one's signer to another address + nodes[0] = CapabilityRegistry.NodeParams({ + nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, + p2pId: P2P_ID, + signer: bytes32(abi.encodePacked(address(6666))), + hashedCapabilityIds: hashedCapabilityIds + }); + + s_capabilityRegistry.updateNodes(nodes); + + // Set node two's signer to node one's signer + changePrank(NODE_OPERATOR_TWO_ADMIN); + nodes[0] = CapabilityRegistry.NodeParams({ + nodeOperatorId: TEST_NODE_OPERATOR_TWO_ID, + p2pId: P2P_ID_TWO, + signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + hashedCapabilityIds: hashedCapabilityIds + }); + s_capabilityRegistry.updateNodes(nodes); + + (CapabilityRegistry.NodeParams memory node, ) = s_capabilityRegistry.getNode(P2P_ID_TWO); + assertEq(node.signer, NODE_OPERATOR_ONE_SIGNER_ADDRESS); + } + function test_UpdatesNodeParams() public { changePrank(NODE_OPERATOR_ONE_ADMIN); @@ -152,18 +211,18 @@ contract CapabilityRegistry_UpdateNodesTest is BaseTest { nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, - signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, + signer: NEW_NODE_SIGNER, hashedCapabilityIds: hashedCapabilityIds }); vm.expectEmit(address(s_capabilityRegistry)); - emit NodeUpdated(P2P_ID, TEST_NODE_OPERATOR_ONE_ID, NODE_OPERATOR_TWO_SIGNER_ADDRESS); + emit NodeUpdated(P2P_ID, TEST_NODE_OPERATOR_ONE_ID, NEW_NODE_SIGNER); s_capabilityRegistry.updateNodes(nodes); (CapabilityRegistry.NodeParams memory node, uint32 configCount) = s_capabilityRegistry.getNode(P2P_ID); assertEq(node.nodeOperatorId, TEST_NODE_OPERATOR_ONE_ID); assertEq(node.p2pId, P2P_ID); - assertEq(node.signer, NODE_OPERATOR_TWO_SIGNER_ADDRESS); + assertEq(node.signer, NEW_NODE_SIGNER); assertEq(node.hashedCapabilityIds.length, 1); assertEq(node.hashedCapabilityIds[0], s_basicHashedCapabilityId); assertEq(configCount, 2); @@ -179,18 +238,18 @@ contract CapabilityRegistry_UpdateNodesTest is BaseTest { nodes[0] = CapabilityRegistry.NodeParams({ nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, - signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, + signer: NEW_NODE_SIGNER, hashedCapabilityIds: hashedCapabilityIds }); vm.expectEmit(address(s_capabilityRegistry)); - emit NodeUpdated(P2P_ID, TEST_NODE_OPERATOR_ONE_ID, NODE_OPERATOR_TWO_SIGNER_ADDRESS); + emit NodeUpdated(P2P_ID, TEST_NODE_OPERATOR_ONE_ID, NEW_NODE_SIGNER); s_capabilityRegistry.updateNodes(nodes); (CapabilityRegistry.NodeParams memory node, uint32 configCount) = s_capabilityRegistry.getNode(P2P_ID); assertEq(node.nodeOperatorId, TEST_NODE_OPERATOR_ONE_ID); assertEq(node.p2pId, P2P_ID); - assertEq(node.signer, NODE_OPERATOR_TWO_SIGNER_ADDRESS); + assertEq(node.signer, NEW_NODE_SIGNER); assertEq(node.hashedCapabilityIds.length, 1); assertEq(node.hashedCapabilityIds[0], s_basicHashedCapabilityId); assertEq(configCount, 2); diff --git a/contracts/src/v0.8/keystone/test/Constants.t.sol b/contracts/src/v0.8/keystone/test/Constants.t.sol index 48308c6fbf5..54cd58e8541 100644 --- a/contracts/src/v0.8/keystone/test/Constants.t.sol +++ b/contracts/src/v0.8/keystone/test/Constants.t.sol @@ -6,10 +6,10 @@ contract Constants { address internal STRANGER = address(2); address internal NODE_OPERATOR_ONE_ADMIN = address(3); string internal NODE_OPERATOR_ONE_NAME = "node-operator-one"; - address internal NODE_OPERATOR_ONE_SIGNER_ADDRESS = address(3333); + bytes32 internal NODE_OPERATOR_ONE_SIGNER_ADDRESS = bytes32(abi.encodePacked(address(3333))); address internal NODE_OPERATOR_TWO_ADMIN = address(4); string internal NODE_OPERATOR_TWO_NAME = "node-operator-two"; - address internal NODE_OPERATOR_TWO_SIGNER_ADDRESS = address(4444); + bytes32 internal NODE_OPERATOR_TWO_SIGNER_ADDRESS = bytes32(abi.encodePacked(address(4444))); bytes32 internal P2P_ID = hex"e42415859707d90ed4dc534ad730f187a17b0c368e1beec2e9b995587c4b0a05"; bytes32 internal P2P_ID_TWO = hex"f53415859707d90ed4dc534ad730f187a17b0c368e1beec2e9b995587c4b0a05"; 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 b3b5f3f7be7..3b267be57e1 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 @@ -49,14 +49,14 @@ type CapabilityRegistryNodeOperator struct { type CapabilityRegistryNodeParams struct { NodeOperatorId uint32 - Signer common.Address + Signer [32]byte P2pId [32]byte HashedCapabilityIds [][32]byte } 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\"}],\"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\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"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\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"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\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"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\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"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: "0x6080604052600b805463ffffffff191660011790553480156200002157600080fd5b503380600081620000795760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000ac57620000ac81620000b5565b50505062000160565b336001600160a01b038216036200010f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000070565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61364180620001706000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c806350e03b16116100d85780638da5cb5b1161008c578063b06e07a711610066578063b06e07a7146103ad578063ddbe4f82146103c0578063f2fde38b146103d557600080fd5b80638da5cb5b146103525780639cb7c5f41461037a578063ae3c241c1461039a57600080fd5b806365c14dc7116100bd57806365c14dc7146103175780636ae5c5911461033757806379ba50971461034a57600080fd5b806350e03b16146102f15780635840cd451461030457600080fd5b80631d05394c1161013a57806336b402fb1161011457806336b402fb14610275578063398f3773146102bd57806350c946fe146102d057600080fd5b80631d05394c1461022c578063235374051461023f5780632c01a1e81461026257600080fd5b8063125700111161016b57806312570011146101af578063181f5a77146101d75780631cdf63431461021957600080fd5b80630c5801e314610187578063117392ce1461019c575b600080fd5b61019a610195366004612869565b6103e8565b005b61019a6101aa3660046128d5565b6106f9565b6101c26101bd3660046128ed565b610944565b60405190151581526020015b60405180910390f35b60408051808201909152601881527f4361706162696c697479526567697374727920312e302e30000000000000000060208201525b6040516101ce919061296a565b61019a61022736600461297d565b610957565b61019a61023a36600461297d565b610a1a565b61025261024d3660046129d8565b610b3f565b6040516101ce9493929190612a2e565b61019a61027036600461297d565b610d98565b6102af610283366004612ae6565b604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b6040519081526020016101ce565b61019a6102cb36600461297d565b611016565b6102e36102de3660046128ed565b6111af565b6040516101ce929190612b08565b61019a6102ff36600461297d565b611271565b61019a61031236600461297d565b611752565b61032a6103253660046128ed565b611bec565b6040516101ce9190612baa565b61019a610345366004612bfb565b611cd2565b61019a6120ce565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ce565b61038d6103883660046128ed565b6121cb565b6040516101ce9190612d1e565b61019a6103a83660046128ed565b612275565b61020c6103bb366004612d2c565b612340565b6103c8612415565b6040516101ce9190612d56565b61019a6103e3366004612dc6565b61255a565b828114610430576040517fab8b67c600000000000000000000000000000000000000000000000000000000815260048101849052602481018290526044015b60405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff16905b848110156106f157600086868381811061046857610468612de3565b905060200201359050600085858481811061048557610485612de3565b90506020028101906104979190612e12565b6104a090612f1a565b805190915073ffffffffffffffffffffffffffffffffffffffff166104f1576040517feeacd93900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805173ffffffffffffffffffffffffffffffffffffffff16331480159061052e57503373ffffffffffffffffffffffffffffffffffffffff851614155b15610565576040517fef67f5d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160008381526007602052604090205473ffffffffffffffffffffffffffffffffffffffff908116911614158061061757506020808201516040516105ab920161296a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000868152600783529290922091926105fe926001019101613033565b6040516020818303038152906040528051906020012014155b156106de578051600083815260076020908152604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921782558201516001909101906106849082613122565b50806000015173ffffffffffffffffffffffffffffffffffffffff167f14c8f513e8a6d86d2d16b0cb64976de4e72386c4f8068eca3b7354373f8fe97a8383602001516040516106d592919061323c565b60405180910390a25b5050806106ea90613284565b905061044c565b505050505050565b61070161256e565b6040805182356020828101919091528084013582840152825180830384018152606090920190925280519101206107396003826125f1565b15610770576040517fe288638f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107826080840160608501612dc6565b73ffffffffffffffffffffffffffffffffffffffff16146108ed576107ad6080830160608401612dc6565b73ffffffffffffffffffffffffffffffffffffffff163b158061088d57506107db6080830160608401612dc6565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f884efe6100000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff91909116906301ffc9a790602401602060405180830381865afa158015610867573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088b91906132bc565b155b156108ed576108a26080830160608401612dc6565b6040517fabb5e3fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610427565b6108f860038261260c565b506000818152600260205260409020829061091382826132d9565b505060405181907f65610e5677eedff94555572640e442f89848a109ef8593fa927ac30b2565ff0690600090a25050565b60006109516005836125f1565b92915050565b61095f61256e565b60005b81811015610a1557600083838381811061097e5761097e612de3565b60209081029290920135600081815260079093526040832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681559093509190506109cf60018301826127cf565b50506040518181527f1e5877d7b3001d1569bf733b76c7eceda58bd6c031e5b8d0b7042308ba2e9d4f9060200160405180910390a150610a0e81613284565b9050610962565b505050565b610a2261256e565b60005b81811015610a15576000838383818110610a4157610a41612de3565b9050602002016020810190610a5691906129d8565b63ffffffff808216600090815260096020526040812080549394509264010000000090049091169003610abd576040517f2b62be9b00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610427565b63ffffffff821660008181526009602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000016905590519182527f7c551c5f33df1b67ff1dee6d812a4a2ea076c2a5bea7d3da390a75619df1553e910160405180910390a1505080610b3890613284565b9050610a25565b63ffffffff808216600090815260096020908152604080832080546401000000009004909416808452600190940182528083206002810180548351818602810186019094528084529495869560609586959294938893929091830182828015610bc757602002820191906000526020600020905b815481526020019060010190808311610bb3575b505050505090506000815167ffffffffffffffff811115610bea57610bea612e50565b604051908082528060200260200182016040528015610c3057816020015b604080518082019091526000815260606020820152815260200190600190039081610c085790505b50905060005b8151811015610d51576040518060400160405280848381518110610c5c57610c5c612de3565b60200260200101518152602001856003016000868581518110610c8157610c81612de3565b602002602001015181526020019081526020016000208054610ca290612fe6565b80601f0160208091040260200160405190810160405280929190818152602001828054610cce90612fe6565b8015610d1b5780601f10610cf057610100808354040283529160200191610d1b565b820191906000526020600020905b815481529060010190602001808311610cfe57829003601f168201915b5050505050815250828281518110610d3557610d35612de3565b602002602001018190525080610d4a90613284565b9050610c36565b5063ffffffff8981166000908152600960205260409020549081169068010000000000000000900460ff16610d8585612618565b9199509750955093505050509193509193565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b82811015611010576000848483818110610dd257610dd2612de3565b60209081029290920135600081815260089093526040909220549192505068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16151580610e4e576040517f64e2ee9200000000000000000000000000000000000000000000000000000000815260048101839052602401610427565b60008281526008602090815260408083205463ffffffff168352600782528083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff1682526001810180549293919291840191610ea890612fe6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed490612fe6565b8015610f215780601f10610ef657610100808354040283529160200191610f21565b820191906000526020600020905b815481529060010190602001808311610f0457829003601f168201915b505050505081525050905084158015610f515750805173ffffffffffffffffffffffffffffffffffffffff163314155b15610f88576040517fef67f5d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526008602052604080822080547fffffffff0000000000000000000000000000000000000000000000000000000016815560010191909155517f5254e609a97bab37b7cc79fe128f85c097bd6015c6e1624ae0ba392eb975320590610ff49085815260200190565b60405180910390a15050508061100990613284565b9050610db6565b50505050565b61101e61256e565b60005b81811015610a1557600083838381811061103d5761103d612de3565b905060200281019061104f9190612e12565b61105890612f1a565b805190915073ffffffffffffffffffffffffffffffffffffffff166110a9576040517feeacd93900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a54604080518082018252835173ffffffffffffffffffffffffffffffffffffffff908116825260208086015181840190815260008681526007909252939020825181547fffffffffffffffffffffffff00000000000000000000000000000000000000001692169190911781559151909190600182019061112c9082613122565b50905050600a6000815461113f90613284565b909155508151602083015160405173ffffffffffffffffffffffffffffffffffffffff909216917fda6697b182650034bd205cdc2dbfabb06bdb3a0a83a2b45bfefa3c4881284e0b916111949185919061323c565b60405180910390a25050806111a890613284565b9050611021565b604080516080810182526000808252602082018190529181019190915260608082015260408051608081018252600084815260086020908152838220805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff68010000000000000000830416848701526001830154868801526401000000009091041683526002019052918220606082019061124890612618565b905260009384526008602052604090932054929364010000000090930463ffffffff1692915050565b60005b81811015610a1557600083838381811061129057611290612de3565b90506020028101906112a2919061335b565b6112ab9061338f565b905060006112ce60005473ffffffffffffffffffffffffffffffffffffffff1690565b825163ffffffff1660009081526007602090815260408083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff9081168352600182018054969091163314965093949193909284019161132b90612fe6565b80601f016020809104026020016040519081016040528092919081815260200182805461135790612fe6565b80156113a45780601f10611379576101008083540402835291602001916113a4565b820191906000526020600020905b81548152906001019060200180831161138757829003601f168201915b5050505050815250509050811580156113d45750805173ffffffffffffffffffffffffffffffffffffffff163314155b1561140b576040517fef67f5d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408084015160009081526008602052205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff161515806114805783604001516040517f64e2ee9200000000000000000000000000000000000000000000000000000000815260040161042791815260200190565b602084015173ffffffffffffffffffffffffffffffffffffffff166114d1576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060840151805160000361151357806040517f3748d4c6000000000000000000000000000000000000000000000000000000008152600401610427919061346b565b60408581015160009081526008602052208054640100000000900463ffffffff169060046115408361347e565b82546101009290920a63ffffffff8181021990931691831602179091556040878101516000908152600860205290812054640100000000900490911691505b825181101561164b576115b583828151811061159d5761159d612de3565b602002602001015160036125f190919063ffffffff16565b6115ed57826040517f3748d4c6000000000000000000000000000000000000000000000000000000008152600401610427919061346b565b61163a83828151811061160257611602612de3565b6020908102919091018101516040808b015160009081526008845281812063ffffffff80891683526002909101909452209161260c16565b5061164481613284565b905061157f565b5085516040808801805160009081526008602090815283822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff968716179055825180835284832060010155808b018051845184529285902080547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff9586160217905592518b5193518551918252939095169085015216908201527f6bbba867c646be512c2f3241e65fdffdefd5528d7e7939649e06e10ee5addc3e9060600160405180910390a15050505050508061174b90613284565b9050611274565b60005b81811015610a1557600083838381811061177157611771612de3565b9050602002810190611783919061335b565b61178c9061338f565b905060006117af60005473ffffffffffffffffffffffffffffffffffffffff1690565b825163ffffffff1660009081526007602090815260408083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff9081168352600182018054969091163314965093949193909284019161180c90612fe6565b80601f016020809104026020016040519081016040528092919081815260200182805461183890612fe6565b80156118855780601f1061185a57610100808354040283529160200191611885565b820191906000526020600020905b81548152906001019060200180831161186857829003601f168201915b5050505050815250509050811580156118b55750805173ffffffffffffffffffffffffffffffffffffffff163314155b156118ec576040517fef67f5d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408084015160009081526008602052205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff161515808061193057506040840151155b1561196f5783604001516040517f64e2ee9200000000000000000000000000000000000000000000000000000000815260040161042791815260200190565b602084015173ffffffffffffffffffffffffffffffffffffffff166119c0576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608401518051600003611a0257806040517f3748d4c6000000000000000000000000000000000000000000000000000000008152600401610427919061346b565b60408581015160009081526008602052208054600490611a2f90640100000000900463ffffffff1661347e565b82546101009290920a63ffffffff81810219909316918316021790915560408681015160009081526008602052908120546401000000009004909116905b8251811015611ae957611a8b83828151811061159d5761159d612de3565b611ac357826040517f3748d4c6000000000000000000000000000000000000000000000000000000008152600401610427919061346b565b611ad883828151811061160257611602612de3565b50611ae281613284565b9050611a6d565b5085516040808801805160009081526008602090815283822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff968716179055825180835284832060010155808b0151835183529184902080547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff9094169390930292909217909155905189518351918252909316908301527f5bfe8a52ad26ac6ee7b0cd46d2fd92be04735a31c45ef8aa3d4b7ea1b61bbc1f910160405180910390a150505050505080611be590613284565b9050611755565b6040805180820190915260008152606060208201526000828152600760209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff1683526001810180549192840191611c4990612fe6565b80601f0160208091040260200160405190810160405280929190818152602001828054611c7590612fe6565b8015611cc25780601f10611c9757610100808354040283529160200191611cc2565b820191906000526020600020905b815481529060010190602001808311611ca557829003601f168201915b5050505050815250509050919050565b611cda61256e565b600b5463ffffffff16600081815260096020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffff0000000016851768010000000000000000871515021781556001808552908101909252822090915b87811015611dd0576000898983818110611d5757611d57612de3565b60200291909101359150611d6d905083826125f1565b15611db3576040517f636e405700000000000000000000000000000000000000000000000000000000815263ffffffff8616600482015260248101829052604401610427565b611dbd838261260c565b505080611dc990613284565b9050611d3b565b5060005b858110156120025736878783818110611def57611def612de3565b9050602002810190611e019190612e12565b90508035611e106003826125f1565b611e49576040517fe181733f00000000000000000000000000000000000000000000000000000000815260048101829052602401610427565b611e546005826125f1565b15611e8e576040517ff7d7a29400000000000000000000000000000000000000000000000000000000815260048101829052602401610427565b600081815260038501602052604081208054611ea990612fe6565b90501115611ef2576040517f3927d08000000000000000000000000000000000000000000000000000000000815263ffffffff8716600482015260248101829052604401610427565b60005b8a811015611faa5760008c8c83818110611f1157611f11612de3565b602090810292909201356000818152600884526040808220805463ffffffff6401000000009091048116845260029091019095529020909350611f599290915085906125f116565b611f99576040517fa7e792500000000000000000000000000000000000000000000000000000000081526004810182905260248101849052604401610427565b50611fa381613284565b9050611ef5565b50600284018054600181018255600091825260209182902001829055611fd2908301836134a1565b6000838152600387016020526040902091611fee919083613506565b50505080611ffb90613284565b9050611dd4565b5063ffffffff838116600090815260096020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff1664010000000086851602179055600b8054909261205a911661347e565b91906101000a81548163ffffffff021916908363ffffffff1602179055507fab55f4c8fb4335a586285ae209d1f1e17a7ccb22e1131963624434d98c8546a583856040516120bc92919063ffffffff9290921682521515602082015260400190565b60405180910390a15050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461214f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610427565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b604080516080808201835260008083526020808401829052838501829052606084018290528582526002808252918590208551938401865280548452600180820154928501929092529182015493949293919284019160ff169081111561223457612234612c7f565b600181111561224557612245612c7f565b815260029190910154610100900473ffffffffffffffffffffffffffffffffffffffff1660209091015292915050565b61227d61256e565b6122886003826125f1565b6122c1576040517fe181733f00000000000000000000000000000000000000000000000000000000815260048101829052602401610427565b6122cc6005826125f1565b15612306576040517ff7d7a29400000000000000000000000000000000000000000000000000000000815260048101829052602401610427565b61231160058261260c565b5060405181907fdcea1b78b6ddc31592a94607d537543fcaafda6cc52d6d5cc7bbfca1422baf2190600090a250565b63ffffffff8083166000908152600960209081526040808320805464010000000090049094168084526001909401825280832085845260030190915290208054606092919061238e90612fe6565b80601f01602080910402602001604051908101604052809291908181526020018280546123ba90612fe6565b80156124075780601f106123dc57610100808354040283529160200191612407565b820191906000526020600020905b8154815290600101906020018083116123ea57829003601f168201915b505050505091505092915050565b606060006124236003612618565b905060006124316005612625565b825161243d9190613621565b67ffffffffffffffff81111561245557612455612e50565b6040519080825280602002602001820160405280156124c557816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124735790505b5090506000805b83518110156125515760008482815181106124e9576124e9612de3565b602002602001015190506125078160056125f190919063ffffffff16565b61254057612514816121cb565b84848151811061252657612526612de3565b6020026020010181905250828061253c90613284565b9350505b5061254a81613284565b90506124cc565b50909392505050565b61256261256e565b61256b8161262f565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146125ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610427565b565b600081815260018301602052604081205415155b9392505050565b60006126058383612724565b6060600061260583612773565b6000610951825490565b3373ffffffffffffffffffffffffffffffffffffffff8216036126ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610427565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600081815260018301602052604081205461276b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610951565b506000610951565b6060816000018054806020026020016040519081016040528092919081815260200182805480156127c357602002820191906000526020600020905b8154815260200190600101908083116127af575b50505050509050919050565b5080546127db90612fe6565b6000825580601f106127eb575050565b601f01602090049060005260206000209081019061256b91905b808211156128195760008155600101612805565b5090565b60008083601f84011261282f57600080fd5b50813567ffffffffffffffff81111561284757600080fd5b6020830191508360208260051b850101111561286257600080fd5b9250929050565b6000806000806040858703121561287f57600080fd5b843567ffffffffffffffff8082111561289757600080fd5b6128a38883890161281d565b909650945060208701359150808211156128bc57600080fd5b506128c98782880161281d565b95989497509550505050565b6000608082840312156128e757600080fd5b50919050565b6000602082840312156128ff57600080fd5b5035919050565b6000815180845260005b8181101561292c57602081850181015186830182015201612910565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006126056020830184612906565b6000806020838503121561299057600080fd5b823567ffffffffffffffff8111156129a757600080fd5b6129b38582860161281d565b90969095509350505050565b803563ffffffff811681146129d357600080fd5b919050565b6000602082840312156129ea57600080fd5b612605826129bf565b600081518084526020808501945080840160005b83811015612a2357815187529582019590820190600101612a07565b509495945050505050565b63ffffffff8516815260006020851515818401526040608081850152612a5760808501876129f3565b8481036060860152855180825283820190600581901b8301850185890160005b83811015612ad4578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018552815180518452880151888401889052612ac188850182612906565b9589019593505090870190600101612a77565b50909c9b505050505050505050505050565b60008060408385031215612af957600080fd5b50508035926020909101359150565b60408152600060c0820163ffffffff8551166040840152602073ffffffffffffffffffffffffffffffffffffffff81870151166060850152604086015160808501526060860151608060a086015282815180855260e0870191508383019450600092505b80831015612b8c5784518252938301936001929092019190830190612b6c565b5063ffffffff8716838701529350612ba19050565b50509392505050565b6020815273ffffffffffffffffffffffffffffffffffffffff825116602082015260006020830151604080840152612be56060840182612906565b949350505050565b801515811461256b57600080fd5b600080600080600060608688031215612c1357600080fd5b853567ffffffffffffffff80821115612c2b57600080fd5b612c3789838a0161281d565b90975095506020880135915080821115612c5057600080fd5b50612c5d8882890161281d565b9094509250506040860135612c7181612bed565b809150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8051825260208101516020830152604081015160028110612cf8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b604083015260609081015173ffffffffffffffffffffffffffffffffffffffff16910152565b608081016109518284612cae565b60008060408385031215612d3f57600080fd5b612d48836129bf565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b81811015612d9857612d85838551612cae565b9284019260809290920191600101612d72565b50909695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461256b57600080fd5b600060208284031215612dd857600080fd5b813561260581612da4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112612e4657600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715612ea257612ea2612e50565b60405290565b6040516080810167ffffffffffffffff81118282101715612ea257612ea2612e50565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612f1257612f12612e50565b604052919050565b600060408236031215612f2c57600080fd5b612f34612e7f565b8235612f3f81612da4565b815260208381013567ffffffffffffffff80821115612f5d57600080fd5b9085019036601f830112612f7057600080fd5b813581811115612f8257612f82612e50565b612fb2847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612ecb565b91508082523684828501011115612fc857600080fd5b80848401858401376000908201840152918301919091525092915050565b600181811c90821680612ffa57607f821691505b6020821081036128e7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208083526000845461304781612fe6565b8084870152604060018084166000811461306857600181146130a0576130ce565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838a01528284151560051b8a010195506130ce565b896000528660002060005b858110156130c65781548b82018601529083019088016130ab565b8a0184019650505b509398975050505050505050565b601f821115610a1557600081815260208120601f850160051c810160208610156131035750805b601f850160051c820191505b818110156106f15782815560010161310f565b815167ffffffffffffffff81111561313c5761313c612e50565b6131508161314a8454612fe6565b846130dc565b602080601f8311600181146131a3576000841561316d5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556106f1565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156131f0578886015182559484019460019091019084016131d1565b508582101561322c57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b828152604060208201526000612be56040830184612906565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036132b5576132b5613255565b5060010190565b6000602082840312156132ce57600080fd5b815161260581612bed565b8135815560208201356001820155600281016040830135600281106132fd57600080fd5b8154606085013561330d81612da4565b74ffffffffffffffffffffffffffffffffffffffff008160081b1660ff84167fffffffffffffffffffffff000000000000000000000000000000000000000000841617178455505050505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112612e4657600080fd5b6000608082360312156133a157600080fd5b6133a9612ea8565b6133b2836129bf565b81526020808401356133c381612da4565b8282015260408481013590830152606084013567ffffffffffffffff808211156133ec57600080fd5b9085019036601f8301126133ff57600080fd5b81358181111561341157613411612e50565b8060051b9150613422848301612ecb565b818152918301840191848101903684111561343c57600080fd5b938501935b8385101561345a57843582529385019390850190613441565b606087015250939695505050505050565b60208152600061260560208301846129f3565b600063ffffffff80831681810361349757613497613255565b6001019392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126134d657600080fd5b83018035915067ffffffffffffffff8211156134f157600080fd5b60200191503681900382131561286257600080fd5b67ffffffffffffffff83111561351e5761351e612e50565b6135328361352c8354612fe6565b836130dc565b6000601f841160018114613584576000851561354e5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b17835561361a565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156135d357868501358255602094850194600190920191016135b3565b508682101561360e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b818103818111156109515761095161325556fea164736f6c6343000813000a", + 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", } var CapabilityRegistryABI = CapabilityRegistryMetaData.ABI @@ -1115,6 +1115,7 @@ func (it *CapabilityRegistryNodeAddedIterator) Close() error { type CapabilityRegistryNodeAdded struct { P2pId [32]byte NodeOperatorId *big.Int + Signer [32]byte Raw types.Log } @@ -1725,7 +1726,7 @@ func (it *CapabilityRegistryNodeUpdatedIterator) Close() error { type CapabilityRegistryNodeUpdated struct { P2pId [32]byte NodeOperatorId *big.Int - Signer common.Address + Signer [32]byte Raw types.Log } @@ -2102,7 +2103,7 @@ func (CapabilityRegistryDONRemoved) Topic() common.Hash { } func (CapabilityRegistryNodeAdded) Topic() common.Hash { - return common.HexToHash("0x5bfe8a52ad26ac6ee7b0cd46d2fd92be04735a31c45ef8aa3d4b7ea1b61bbc1f") + return common.HexToHash("0xc9296aa9b0951d8000e8ed7f2b5be30c5106de8df3dbedf9a57c93f5f9e4d7da") } func (CapabilityRegistryNodeOperatorAdded) Topic() common.Hash { @@ -2122,7 +2123,7 @@ func (CapabilityRegistryNodeRemoved) Topic() common.Hash { } func (CapabilityRegistryNodeUpdated) Topic() common.Hash { - return common.HexToHash("0x6bbba867c646be512c2f3241e65fdffdefd5528d7e7939649e06e10ee5addc3e") + return common.HexToHash("0xf101cfc54994c31624d25789378d71ec4dbdc533e26a4ecc6b7648f4798d0916") } func (CapabilityRegistryOwnershipTransferRequested) Topic() common.Hash { 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 d8e11a9d186..42a476c06f9 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 f44b8bf19bb83bb51c2291fc1967b5c6084b19b7fd6aa5ab3352d0f0c1bd3754 +keystone_capability_registry: ../../../contracts/solc/v0.8.19/CapabilityRegistry/CapabilityRegistry.abi ../../../contracts/solc/v0.8.19/CapabilityRegistry/CapabilityRegistry.bin 7ba965f4538c0be63c94335c602916e423e2437680e47281db28a8e521a8db68 ocr3_capability: ../../../contracts/solc/v0.8.19/OCR3Capability/OCR3Capability.abi ../../../contracts/solc/v0.8.19/OCR3Capability/OCR3Capability.bin 9dcbdf55bd5729ba266148da3f17733eb592c871c2108ccca546618628fd9ad2