diff --git a/contracts/src/v0.8/ccip/capability/CCIPConfig.sol b/contracts/src/v0.8/ccip/capability/CCIPConfig.sol index 5ae82fe900..f2605826d2 100644 --- a/contracts/src/v0.8/ccip/capability/CCIPConfig.sol +++ b/contracts/src/v0.8/ccip/capability/CCIPConfig.sol @@ -7,6 +7,9 @@ import {ICapabilitiesRegistry} from "./interfaces/ICapabilitiesRegistry.sol"; import {OwnerIsCreator} from "../../shared/access/OwnerIsCreator.sol"; +import {Internal} from "../libraries/Internal.sol"; +import {Types} from "./libraries/Types.sol"; + import {IERC165} from "../../vendor/openzeppelin-solidity/v4.8.3/contracts/interfaces/IERC165.sol"; import {EnumerableSet} from "../../vendor/openzeppelin-solidity/v4.8.3/contracts/utils/structs/EnumerableSet.sol"; @@ -21,7 +24,7 @@ contract CCIPConfig is ITypeAndVersion, ICapabilityConfiguration, OwnerIsCreator /// @notice Emitted when a chain's configuration is set. /// @param chainSelector The chain selector. /// @param chainConfig The chain configuration. - event ChainConfigSet(uint64 chainSelector, ChainConfig chainConfig); + event ChainConfigSet(uint64 chainSelector, Types.ChainConfig chainConfig); /// @notice Emitted when a chain's configuration is removed. /// @param chainSelector The chain selector. @@ -44,70 +47,12 @@ contract CCIPConfig is ITypeAndVersion, ICapabilityConfiguration, OwnerIsCreator error InvalidPluginType(); error OfframpAddressCannotBeZero(); error InvalidConfigLength(uint256 length); - error InvalidConfigStateTransition(ConfigState currentState, ConfigState proposedState); + error InvalidConfigStateTransition(Types.ConfigState currentState, Types.ConfigState proposedState); error NonExistentConfigTransition(); error WrongConfigCount(uint64 got, uint64 expected); error WrongConfigDigest(bytes32 got, bytes32 expected); error WrongConfigDigestBlueGreen(bytes32 got, bytes32 expected); - /// @notice PluginType indicates the type of plugin that the configuration is for. - /// @param Commit The configuration is for the commit plugin. - /// @param Execution The configuration is for the execution plugin. - enum PluginType { - Commit, - Execution - } - - /// @notice ConfigState indicates the state of the configuration. - /// A DON's configuration always starts out in the "Init" state - this is the starting state. - /// The only valid transition from "Init" is to the "Running" state - this is the first ever configuration. - /// The only valid transition from "Running" is to the "Staging" state - this is a blue/green proposal. - /// The only valid transition from "Staging" is back to the "Running" state - this is a promotion. - /// TODO: explain rollbacks? - enum ConfigState { - Init, - Running, - Staging - } - - /// @notice Chain configuration. - /// Changes to chain configuration are detected out-of-band in plugins and decoded offchain. - struct ChainConfig { - bytes32[] readers; // The P2P IDs of the readers for the chain. These IDs must be registered in the capabilities registry. - uint8 fChain; // The fault tolerance parameter of the chain. - bytes config; // The chain configuration. This is kept intentionally opaque so as to add fields in the future if needed. - } - - /// @notice Chain configuration information struct used in applyChainConfigUpdates and getAllChainConfigs. - struct ChainConfigInfo { - uint64 chainSelector; - ChainConfig chainConfig; - } - - /// @notice OCR3 configuration. - struct OCR3Config { - PluginType pluginType; // ────────╮ The plugin that the configuration is for. - uint64 chainSelector; // | The (remote) chain that the configuration is for. - uint8 F; // | The "big F" parameter for the role DON. - uint64 offchainConfigVersion; // ─╯ The version of the offchain configuration. - bytes offrampAddress; // The remote chain offramp address. - bytes32[] bootstrapP2PIds; // The bootstrap P2P IDs of the oracles that are part of the role DON. - // len(p2pIds) == len(signers) == len(transmitters) == 3 * F + 1 - // NOTE: indexes matter here! The p2p ID at index i corresponds to the signer at index i and the transmitter at index i. - // This is crucial in order to build the oracle ID <-> peer ID mapping offchain. - bytes32[] p2pIds; // The P2P IDs of the oracles that are part of the role DON. - bytes[] signers; // The onchain signing keys of nodes in the don. - bytes[] transmitters; // The onchain transmitter keys of nodes in the don. - bytes offchainConfig; // The offchain configuration for the OCR3 protocol. Protobuf encoded. - } - - /// @notice OCR3 configuration with metadata, specifically the config count and the config digest. - struct OCR3ConfigWithMeta { - OCR3Config config; // The OCR3 configuration. - uint64 configCount; // The config count used to compute the config digest. - bytes32 configDigest; // The config digest of the OCR3 configuration. - } - /// @notice Type and version override. string public constant override typeAndVersion = "CCIPConfig 1.6.0-dev"; @@ -115,7 +60,7 @@ contract CCIPConfig is ITypeAndVersion, ICapabilityConfiguration, OwnerIsCreator address internal immutable i_capabilitiesRegistry; /// @notice chain configuration for each chain that CCIP is deployed on. - mapping(uint64 chainSelector => ChainConfig chainConfig) internal s_chainConfigurations; + mapping(uint64 chainSelector => Types.ChainConfig chainConfig) internal s_chainConfigurations; /// @notice All chains that are configured. EnumerableSet.UintSet internal s_remoteChainSelectors; @@ -123,7 +68,7 @@ contract CCIPConfig is ITypeAndVersion, ICapabilityConfiguration, OwnerIsCreator /// @notice OCR3 configurations for each DON. /// Each CR DON will have a commit and execution configuration. /// This means that a DON can have up to 4 configurations, since we are implementing blue/green deployments. - mapping(uint32 donId => mapping(PluginType pluginType => OCR3ConfigWithMeta[] ocr3Configs)) internal s_ocr3Configs; + mapping(uint32 donId => mapping(Internal.OCRPluginType pluginType => Types.OCR3ConfigWithMeta[] ocr3Configs)) internal s_ocr3Configs; /// @notice The DONs that have been configured. EnumerableSet.UintSet internal s_donIds; @@ -149,13 +94,13 @@ contract CCIPConfig is ITypeAndVersion, ICapabilityConfiguration, OwnerIsCreator /// @notice Returns all the chain configurations. /// @return The chain configurations. // TODO: will this eventually hit the RPC max response size limit? - function getAllChainConfigs() external view returns (ChainConfigInfo[] memory) { + function getAllChainConfigs() external view returns (Types.ChainConfigInfo[] memory) { uint256[] memory chainSelectors = s_remoteChainSelectors.values(); - ChainConfigInfo[] memory chainConfigs = new ChainConfigInfo[](s_remoteChainSelectors.length()); + Types.ChainConfigInfo[] memory chainConfigs = new Types.ChainConfigInfo[](s_remoteChainSelectors.length()); for (uint256 i = 0; i < chainSelectors.length; ++i) { uint64 chainSelector = uint64(chainSelectors[i]); chainConfigs[i] = - ChainConfigInfo({chainSelector: chainSelector, chainConfig: s_chainConfigurations[chainSelector]}); + Types.ChainConfigInfo({chainSelector: chainSelector, chainConfig: s_chainConfigurations[chainSelector]}); } return chainConfigs; } @@ -164,7 +109,7 @@ contract CCIPConfig is ITypeAndVersion, ICapabilityConfiguration, OwnerIsCreator /// @param donId The DON ID. /// @param pluginType The plugin type. /// @return The OCR3 configurations, up to 2 (blue and green). - function getOCRConfig(uint32 donId, PluginType pluginType) external view returns (OCR3ConfigWithMeta[] memory) { + function getOCRConfig(uint32 donId, Internal.OCRPluginType pluginType) external view returns (Types.OCR3ConfigWithMeta[] memory) { return s_ocr3Configs[donId][pluginType]; } @@ -190,27 +135,27 @@ contract CCIPConfig is ITypeAndVersion, ICapabilityConfiguration, OwnerIsCreator revert OnlyCapabilitiesRegistryCanCall(); } - OCR3Config[] memory ocr3Configs = abi.decode(config, (OCR3Config[])); - (OCR3Config[] memory commitConfigs, OCR3Config[] memory execConfigs) = _groupByPluginType(ocr3Configs); + Types.OCR3Config[] memory ocr3Configs = abi.decode(config, (Types.OCR3Config[])); + (Types.OCR3Config[] memory commitConfigs, Types.OCR3Config[] memory execConfigs) = _groupByPluginType(ocr3Configs); if (commitConfigs.length > 0) { - _updatePluginConfig(donId, PluginType.Commit, commitConfigs); + _updatePluginConfig(donId, Internal.OCRPluginType.Commit, commitConfigs); } if (execConfigs.length > 0) { - _updatePluginConfig(donId, PluginType.Execution, execConfigs); + _updatePluginConfig(donId, Internal.OCRPluginType.Execution, execConfigs); } } - function _updatePluginConfig(uint32 donId, PluginType pluginType, OCR3Config[] memory newConfig) internal { - OCR3ConfigWithMeta[] memory currentConfig = s_ocr3Configs[donId][pluginType]; + function _updatePluginConfig(uint32 donId, Internal.OCRPluginType pluginType, Types.OCR3Config[] memory newConfig) internal { + Types.OCR3ConfigWithMeta[] memory currentConfig = s_ocr3Configs[donId][pluginType]; // Validate the state transition being proposed, which is implicitly defined by the combination // of lengths of the current and new configurations. - ConfigState currentState = _stateFromConfigLength(currentConfig.length); - ConfigState proposedState = _stateFromConfigLength(newConfig.length); + Types.ConfigState currentState = _stateFromConfigLength(currentConfig.length); + Types.ConfigState proposedState = _stateFromConfigLength(newConfig.length); _validateConfigStateTransition(currentState, proposedState); // Build the new configuration with metadata and validate that the transition is valid. - OCR3ConfigWithMeta[] memory newConfigWithMeta = + Types.OCR3ConfigWithMeta[] memory newConfigWithMeta = _computeNewConfigWithMeta(donId, currentConfig, newConfig, currentState, proposedState); _validateConfigTransition(currentConfig, newConfigWithMeta); @@ -229,11 +174,11 @@ contract CCIPConfig is ITypeAndVersion, ICapabilityConfiguration, OwnerIsCreator /// @notice Determine the config state of the configuration from the length of the config. /// @param configLen The length of the configuration. /// @return The config state. - function _stateFromConfigLength(uint256 configLen) internal pure returns (ConfigState) { + function _stateFromConfigLength(uint256 configLen) internal pure returns (Types.ConfigState) { if (configLen > 2) { revert InvalidConfigLength(configLen); } - return ConfigState(configLen); + return Types.ConfigState(configLen); } // the only valid state transitions are the following: @@ -241,7 +186,7 @@ contract CCIPConfig is ITypeAndVersion, ICapabilityConfiguration, OwnerIsCreator // running -> staging (blue/green proposal) // staging -> running (promotion) // everything else is invalid and should revert. - function _validateConfigStateTransition(ConfigState currentState, ConfigState newState) internal pure { + function _validateConfigStateTransition(Types.ConfigState currentState, Types.ConfigState newState) internal pure { // Calculate the difference between the new state and the current state int256 stateDiff = int256(uint256(newState)) - int256(uint256(currentState)); @@ -250,15 +195,15 @@ contract CCIPConfig is ITypeAndVersion, ICapabilityConfiguration, OwnerIsCreator // 1. currentState -> newState (where stateDiff == 1) // e.g., init -> running or running -> staging // 2. staging -> running (where stateDiff == -1) - if (stateDiff == 1 || (stateDiff == -1 && currentState == ConfigState.Staging)) { + if (stateDiff == 1 || (stateDiff == -1 && currentState == Types.ConfigState.Staging)) { return; } revert InvalidConfigStateTransition(currentState, newState); } function _validateConfigTransition( - OCR3ConfigWithMeta[] memory currentConfig, - OCR3ConfigWithMeta[] memory newConfigWithMeta + Types.OCR3ConfigWithMeta[] memory currentConfig, + Types.OCR3ConfigWithMeta[] memory newConfigWithMeta ) internal pure { uint256 currentConfigLen = currentConfig.length; uint256 newConfigLen = newConfigWithMeta.length; @@ -303,35 +248,35 @@ contract CCIPConfig is ITypeAndVersion, ICapabilityConfiguration, OwnerIsCreator /// @return The new configuration with metadata. function _computeNewConfigWithMeta( uint32 donId, - OCR3ConfigWithMeta[] memory currentConfig, - OCR3Config[] memory newConfig, - ConfigState currentState, - ConfigState newState - ) internal view returns (OCR3ConfigWithMeta[] memory) { + Types.OCR3ConfigWithMeta[] memory currentConfig, + Types.OCR3Config[] memory newConfig, + Types.ConfigState currentState, + Types.ConfigState newState + ) internal view returns (Types.OCR3ConfigWithMeta[] memory) { uint64[] memory configCounts = new uint64[](newConfig.length); // Set config counts based on the only valid state transitions. // Init -> Running (first ever config) // Running -> Staging (blue/green proposal) // Staging -> Running (promotion) - if (currentState == ConfigState.Init && newState == ConfigState.Running) { + if (currentState == Types.ConfigState.Init && newState == Types.ConfigState.Running) { // First ever config starts with config count == 1. configCounts[0] = 1; - } else if (currentState == ConfigState.Running && newState == ConfigState.Staging) { + } else if (currentState == Types.ConfigState.Running && newState == Types.ConfigState.Staging) { // On a blue/green proposal, the config count of the green config is the blue config count + 1. configCounts[0] = currentConfig[0].configCount; configCounts[1] = currentConfig[0].configCount + 1; - } else if (currentState == ConfigState.Staging && newState == ConfigState.Running) { + } else if (currentState == Types.ConfigState.Staging && newState == Types.ConfigState.Running) { // On a promotion, the config count of the green config becomes the blue config count. configCounts[0] = currentConfig[1].configCount; } else { revert InvalidConfigStateTransition(currentState, newState); } - OCR3ConfigWithMeta[] memory newConfigWithMeta = new OCR3ConfigWithMeta[](newConfig.length); + Types.OCR3ConfigWithMeta[] memory newConfigWithMeta = new Types.OCR3ConfigWithMeta[](newConfig.length); for (uint256 i = 0; i < configCounts.length; ++i) { _validateConfig(newConfig[i]); - newConfigWithMeta[i] = OCR3ConfigWithMeta({ + newConfigWithMeta[i] = Types.OCR3ConfigWithMeta({ config: newConfig[i], configCount: configCounts[i], configDigest: _computeConfigDigest(donId, configCounts[i], newConfig[i]) @@ -343,10 +288,10 @@ contract CCIPConfig is ITypeAndVersion, ICapabilityConfiguration, OwnerIsCreator /// @notice Group the OCR3 configurations by plugin type for further processing. /// @param ocr3Configs The OCR3 configurations to group. - function _groupByPluginType(OCR3Config[] memory ocr3Configs) + function _groupByPluginType(Types.OCR3Config[] memory ocr3Configs) internal pure - returns (OCR3Config[] memory commitConfigs, OCR3Config[] memory execConfigs) + returns (Types.OCR3Config[] memory commitConfigs, Types.OCR3Config[] memory execConfigs) { if (ocr3Configs.length > MAX_OCR3_CONFIGS_PER_DON) { revert TooManyOCR3Configs(); @@ -356,12 +301,12 @@ contract CCIPConfig is ITypeAndVersion, ICapabilityConfiguration, OwnerIsCreator // If we have less we will adjust the length later using mstore. // If the caller provides more than 2 configs per plugin type, we will revert due to out of bounds // access in the for loop below. - commitConfigs = new OCR3Config[](MAX_OCR3_CONFIGS_PER_PLUGIN); - execConfigs = new OCR3Config[](MAX_OCR3_CONFIGS_PER_PLUGIN); + commitConfigs = new Types.OCR3Config[](MAX_OCR3_CONFIGS_PER_PLUGIN); + execConfigs = new Types.OCR3Config[](MAX_OCR3_CONFIGS_PER_PLUGIN); uint256 commitCount; uint256 execCount; for (uint256 i = 0; i < ocr3Configs.length; ++i) { - if (ocr3Configs[i].pluginType == PluginType.Commit) { + if (ocr3Configs[i].pluginType == Internal.OCRPluginType.Commit) { commitConfigs[commitCount] = ocr3Configs[i]; ++commitCount; } else { @@ -379,9 +324,9 @@ contract CCIPConfig is ITypeAndVersion, ICapabilityConfiguration, OwnerIsCreator return (commitConfigs, execConfigs); } - function _validateConfig(OCR3Config memory cfg) internal view { + function _validateConfig(Types.OCR3Config memory cfg) internal view { if (cfg.chainSelector == 0) revert ChainSelectorNotSet(); - if (cfg.pluginType != PluginType.Commit && cfg.pluginType != PluginType.Execution) revert InvalidPluginType(); + if (cfg.pluginType != Internal.OCRPluginType.Commit && cfg.pluginType != Internal.OCRPluginType.Execution) revert InvalidPluginType(); // TODO: can we do more sophisticated validation than this? if (cfg.offrampAddress.length == 0) revert OfframpAddressCannotBeZero(); if (!s_remoteChainSelectors.contains(cfg.chainSelector)) revert ChainSelectorNotFound(cfg.chainSelector); @@ -424,7 +369,7 @@ contract CCIPConfig is ITypeAndVersion, ICapabilityConfiguration, OwnerIsCreator function _computeConfigDigest( uint32 donId, uint64 configCount, - OCR3Config memory ocr3Config + Types.OCR3Config memory ocr3Config ) internal pure returns (bytes32) { uint256 h = uint256( keccak256( @@ -458,7 +403,7 @@ contract CCIPConfig is ITypeAndVersion, ICapabilityConfiguration, OwnerIsCreator /// @param chainConfigAdds The chain configurations to add. function applyChainConfigUpdates( uint64[] calldata chainSelectorRemoves, - ChainConfigInfo[] calldata chainConfigAdds + Types.ChainConfigInfo[] calldata chainConfigAdds ) external onlyOwner { // Process removals first. for (uint256 i = 0; i < chainSelectorRemoves.length; ++i) { @@ -475,7 +420,7 @@ contract CCIPConfig is ITypeAndVersion, ICapabilityConfiguration, OwnerIsCreator // Process additions next. for (uint256 i = 0; i < chainConfigAdds.length; ++i) { - ChainConfig memory chainConfig = chainConfigAdds[i].chainConfig; + Types.ChainConfig memory chainConfig = chainConfigAdds[i].chainConfig; bytes32[] memory readers = chainConfig.readers; uint64 chainSelector = chainConfigAdds[i].chainSelector; diff --git a/contracts/src/v0.8/ccip/capability/interfaces/IOCR3ConfigEncoder.sol b/contracts/src/v0.8/ccip/capability/interfaces/IOCR3ConfigEncoder.sol index 156ff89f3a..ac1a3e4e14 100644 --- a/contracts/src/v0.8/ccip/capability/interfaces/IOCR3ConfigEncoder.sol +++ b/contracts/src/v0.8/ccip/capability/interfaces/IOCR3ConfigEncoder.sol @@ -1,41 +1,11 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; +import {Types} from "../libraries/Types.sol"; + /// @dev This is so that we can generate gethwrappers and easily encode/decode OCR3Config /// in the offchain integration tests. interface IOCR3ConfigEncoder { - /// @notice PluginType indicates the type of plugin that the configuration is for. - /// @param Commit The configuration is for the commit plugin. - /// @param Execution The configuration is for the execution plugin. - enum PluginType { - Commit, - Execution - } - - /// @notice OCR3 configuration. - struct OCR3Config { - PluginType pluginType; // ────────╮ The plugin that the configuration is for. - uint64 chainSelector; // | The (remote) chain that the configuration is for. - uint8 F; // | The "big F" parameter for the role DON. - uint64 offchainConfigVersion; // ─╯ The version of the offchain configuration. - bytes offrampAddress; // The remote chain offramp address. - bytes32[] bootstrapP2PIds; // The bootstrap P2P IDs of the oracles that are part of the role DON. - // len(p2pIds) == len(signers) == len(transmitters) == 3 * F + 1 - // NOTE: indexes matter here! The p2p ID at index i corresponds to the signer at index i and the transmitter at index i. - // This is crucial in order to build the oracle ID <-> peer ID mapping offchain. - bytes32[] p2pIds; // The P2P IDs of the oracles that are part of the role DON. - bytes[] signers; // The onchain signing keys of nodes in the don. - bytes[] transmitters; // The onchain transmitter keys of nodes in the don. - bytes offchainConfig; // The offchain configuration for the OCR3 protocol. Protobuf encoded. - } - - /// @notice OCR3 configuration with metadata, specifically the config count and the config digest. - struct OCR3ConfigWithMeta { - OCR3Config config; // The OCR3 configuration. - uint64 configCount; // The config count used to compute the config digest. - bytes32 configDigest; // The config digest of the OCR3 configuration. - } - /// @dev Encodes an array of OCR3Config into a bytes array. For test usage only. - function exposeOCR3Config(OCR3Config[] calldata config) external view returns (bytes memory); + function exposeOCR3Config(Types.OCR3Config[] calldata config) external view returns (bytes memory); } diff --git a/contracts/src/v0.8/ccip/capability/libraries/Types.sol b/contracts/src/v0.8/ccip/capability/libraries/Types.sol new file mode 100644 index 0000000000..a5b92a0389 --- /dev/null +++ b/contracts/src/v0.8/ccip/capability/libraries/Types.sol @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.0; + +import {Internal} from "../../libraries/Internal.sol"; + +library Types { + /// @notice ConfigState indicates the state of the configuration. + /// A DON's configuration always starts out in the "Init" state - this is the starting state. + /// The only valid transition from "Init" is to the "Running" state - this is the first ever configuration. + /// The only valid transition from "Running" is to the "Staging" state - this is a blue/green proposal. + /// The only valid transition from "Staging" is back to the "Running" state - this is a promotion. + /// TODO: explain rollbacks? + enum ConfigState { + Init, + Running, + Staging + } + + /// @notice Chain configuration. + /// Changes to chain configuration are detected out-of-band in plugins and decoded offchain. + struct ChainConfig { + bytes32[] readers; // The P2P IDs of the readers for the chain. These IDs must be registered in the capabilities registry. + uint8 fChain; // The fault tolerance parameter of the chain. + bytes config; // The chain configuration. This is kept intentionally opaque so as to add fields in the future if needed. + } + + /// @notice Chain configuration information struct used in applyChainConfigUpdates and getAllChainConfigs. + struct ChainConfigInfo { + uint64 chainSelector; + ChainConfig chainConfig; + } + + /// @notice OCR3 configuration. + struct OCR3Config { + Internal.OCRPluginType pluginType; // ────────╮ The plugin that the configuration is for. + uint64 chainSelector; // | The (remote) chain that the configuration is for. + uint8 F; // | The "big F" parameter for the role DON. + uint64 offchainConfigVersion; // ─╯ The version of the offchain configuration. + bytes offrampAddress; // The remote chain offramp address. + bytes32[] bootstrapP2PIds; // The bootstrap P2P IDs of the oracles that are part of the role DON. + // len(p2pIds) == len(signers) == len(transmitters) == 3 * F + 1 + // NOTE: indexes matter here! The p2p ID at index i corresponds to the signer at index i and the transmitter at index i. + // This is crucial in order to build the oracle ID <-> peer ID mapping offchain. + bytes32[] p2pIds; // The P2P IDs of the oracles that are part of the role DON. + bytes[] signers; // The onchain signing keys of nodes in the don. + bytes[] transmitters; // The onchain transmitter keys of nodes in the don. + bytes offchainConfig; // The offchain configuration for the OCR3 protocol. Protobuf encoded. + } + + /// @notice OCR3 configuration with metadata, specifically the config count and the config digest. + struct OCR3ConfigWithMeta { + OCR3Config config; // The OCR3 configuration. + uint64 configCount; // The config count used to compute the config digest. + bytes32 configDigest; // The config digest of the OCR3 configuration. + } +} diff --git a/contracts/src/v0.8/ccip/test/capability/CCIPConfig.t.sol b/contracts/src/v0.8/ccip/test/capability/CCIPConfig.t.sol index f3e97c30f7..e4c0940b17 100644 --- a/contracts/src/v0.8/ccip/test/capability/CCIPConfig.t.sol +++ b/contracts/src/v0.8/ccip/test/capability/CCIPConfig.t.sol @@ -3,6 +3,8 @@ pragma solidity ^0.8.24; import {Test} from "forge-std/Test.sol"; +import {Types} from "../../capability/libraries/Types.sol"; +import {Internal} from "../../libraries/Internal.sol"; import {CCIPConfig} from "../../capability/CCIPConfig.sol"; import {ICapabilitiesRegistry} from "../../capability/interfaces/ICapabilitiesRegistry.sol"; import {CCIPConfigHelper} from "../helpers/CCIPConfigHelper.sol"; @@ -67,10 +69,10 @@ contract CCIPConfigSetup is Test { ); } // Add chain selector for chain 1. - CCIPConfig.ChainConfigInfo[] memory adds = new CCIPConfig.ChainConfigInfo[](1); - adds[0] = CCIPConfig.ChainConfigInfo({ + Types.ChainConfigInfo[] memory adds = new Types.ChainConfigInfo[](1); + adds[0] = Types.ChainConfigInfo({ chainSelector: 1, - chainConfig: CCIPConfig.ChainConfig({readers: p2pIds, fChain: 1, config: bytes("config1")}) + chainConfig: Types.ChainConfig({readers: p2pIds, fChain: 1, config: bytes("config1")}) }); vm.expectEmit(); @@ -92,14 +94,14 @@ contract CCIPConfig_chainConfig is CCIPConfigSetup { function test_applyChainConfigUpdates_addChainConfigs_Success() public { bytes32[] memory chainReaders = new bytes32[](1); chainReaders[0] = keccak256(abi.encode(1)); - CCIPConfig.ChainConfigInfo[] memory adds = new CCIPConfig.ChainConfigInfo[](2); - adds[0] = CCIPConfig.ChainConfigInfo({ + Types.ChainConfigInfo[] memory adds = new Types.ChainConfigInfo[](2); + adds[0] = Types.ChainConfigInfo({ chainSelector: 1, - chainConfig: CCIPConfig.ChainConfig({readers: chainReaders, fChain: 1, config: bytes("config1")}) + chainConfig: Types.ChainConfig({readers: chainReaders, fChain: 1, config: bytes("config1")}) }); - adds[1] = CCIPConfig.ChainConfigInfo({ + adds[1] = Types.ChainConfigInfo({ chainSelector: 2, - chainConfig: CCIPConfig.ChainConfig({readers: chainReaders, fChain: 1, config: bytes("config2")}) + chainConfig: Types.ChainConfig({readers: chainReaders, fChain: 1, config: bytes("config2")}) }); vm.mockCall( @@ -124,7 +126,7 @@ contract CCIPConfig_chainConfig is CCIPConfigSetup { emit CCIPConfig.ChainConfigSet(2, adds[1].chainConfig); s_ccipCC.applyChainConfigUpdates(new uint64[](0), adds); - CCIPConfig.ChainConfigInfo[] memory configs = s_ccipCC.getAllChainConfigs(); + Types.ChainConfigInfo[] memory configs = s_ccipCC.getAllChainConfigs(); assertEq(configs.length, 2, "chain configs length must be 2"); assertEq(configs[0].chainSelector, 1, "chain selector must match"); assertEq(configs[1].chainSelector, 2, "chain selector must match"); @@ -133,14 +135,14 @@ contract CCIPConfig_chainConfig is CCIPConfigSetup { function test_applyChainConfigUpdates_removeChainConfigs_Success() public { bytes32[] memory chainReaders = new bytes32[](1); chainReaders[0] = keccak256(abi.encode(1)); - CCIPConfig.ChainConfigInfo[] memory adds = new CCIPConfig.ChainConfigInfo[](2); - adds[0] = CCIPConfig.ChainConfigInfo({ + Types.ChainConfigInfo[] memory adds = new Types.ChainConfigInfo[](2); + adds[0] = Types.ChainConfigInfo({ chainSelector: 1, - chainConfig: CCIPConfig.ChainConfig({readers: chainReaders, fChain: 1, config: bytes("config1")}) + chainConfig: Types.ChainConfig({readers: chainReaders, fChain: 1, config: bytes("config1")}) }); - adds[1] = CCIPConfig.ChainConfigInfo({ + adds[1] = Types.ChainConfigInfo({ chainSelector: 2, - chainConfig: CCIPConfig.ChainConfig({readers: chainReaders, fChain: 1, config: bytes("config2")}) + chainConfig: Types.ChainConfig({readers: chainReaders, fChain: 1, config: bytes("config2")}) }); vm.mockCall( @@ -170,7 +172,7 @@ contract CCIPConfig_chainConfig is CCIPConfigSetup { vm.expectEmit(); emit CCIPConfig.ChainConfigRemoved(1); - s_ccipCC.applyChainConfigUpdates(removes, new CCIPConfig.ChainConfigInfo[](0)); + s_ccipCC.applyChainConfigUpdates(removes, new Types.ChainConfigInfo[](0)); } // Reverts. @@ -180,16 +182,16 @@ contract CCIPConfig_chainConfig is CCIPConfigSetup { removes[0] = uint64(1); vm.expectRevert(abi.encodeWithSelector(CCIPConfig.ChainSelectorNotFound.selector, 1)); - s_ccipCC.applyChainConfigUpdates(removes, new CCIPConfig.ChainConfigInfo[](0)); + s_ccipCC.applyChainConfigUpdates(removes, new Types.ChainConfigInfo[](0)); } function test_applyChainConfigUpdates_nodeNotInRegistry_Reverts() public { bytes32[] memory chainReaders = new bytes32[](1); chainReaders[0] = keccak256(abi.encode(1)); - CCIPConfig.ChainConfigInfo[] memory adds = new CCIPConfig.ChainConfigInfo[](1); - adds[0] = CCIPConfig.ChainConfigInfo({ + Types.ChainConfigInfo[] memory adds = new Types.ChainConfigInfo[](1); + adds[0] = Types.ChainConfigInfo({ chainSelector: 1, - chainConfig: CCIPConfig.ChainConfig({readers: chainReaders, fChain: 1, config: abi.encode(1, 2, 3)}) + chainConfig: Types.ChainConfig({readers: chainReaders, fChain: 1, config: abi.encode(1, 2, 3)}) }); vm.mockCall( @@ -215,14 +217,14 @@ contract CCIPConfig_chainConfig is CCIPConfigSetup { function test__applyChainConfigUpdates_FChainNotPositive_Reverts() public { bytes32[] memory chainReaders = new bytes32[](1); chainReaders[0] = keccak256(abi.encode(1)); - CCIPConfig.ChainConfigInfo[] memory adds = new CCIPConfig.ChainConfigInfo[](2); - adds[0] = CCIPConfig.ChainConfigInfo({ + Types.ChainConfigInfo[] memory adds = new Types.ChainConfigInfo[](2); + adds[0] = Types.ChainConfigInfo({ chainSelector: 1, - chainConfig: CCIPConfig.ChainConfig({readers: chainReaders, fChain: 1, config: bytes("config1")}) + chainConfig: Types.ChainConfig({readers: chainReaders, fChain: 1, config: bytes("config1")}) }); - adds[1] = CCIPConfig.ChainConfigInfo({ + adds[1] = Types.ChainConfigInfo({ chainSelector: 2, - chainConfig: CCIPConfig.ChainConfig({readers: chainReaders, fChain: 0, config: bytes("config2")}) // bad fChain + chainConfig: Types.ChainConfig({readers: chainReaders, fChain: 0, config: bytes("config2")}) // bad fChain }); vm.mockCall( @@ -253,8 +255,8 @@ contract CCIPConfig_validateConfig is CCIPConfigSetup { (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); // Config is for 4 nodes, so f == 1. - CCIPConfig.OCR3Config memory config = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory config = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -274,8 +276,8 @@ contract CCIPConfig_validateConfig is CCIPConfigSetup { (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); // Config is for 4 nodes, so f == 1. - CCIPConfig.OCR3Config memory config = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory config = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 0, // invalid bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -295,8 +297,8 @@ contract CCIPConfig_validateConfig is CCIPConfigSetup { (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); // Config is for 4 nodes, so f == 1. - CCIPConfig.OCR3Config memory config = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory config = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: bytes(""), // invalid chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -316,8 +318,8 @@ contract CCIPConfig_validateConfig is CCIPConfigSetup { (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); // Config is for 4 nodes, so f == 1. - CCIPConfig.OCR3Config memory config = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory config = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 2, // not set bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -337,8 +339,8 @@ contract CCIPConfig_validateConfig is CCIPConfigSetup { // 32 > 31 (max num oracles) (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(32); - CCIPConfig.OCR3Config memory config = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory config = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -363,8 +365,8 @@ contract CCIPConfig_validateConfig is CCIPConfigSetup { mstore(signers, 30) } - CCIPConfig.OCR3Config memory config = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory config = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -390,8 +392,8 @@ contract CCIPConfig_validateConfig is CCIPConfigSetup { mstore(transmitters, 3) } - CCIPConfig.OCR3Config memory config = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory config = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -411,8 +413,8 @@ contract CCIPConfig_validateConfig is CCIPConfigSetup { (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); // Config is for 4 nodes, so f == 1. - CCIPConfig.OCR3Config memory config = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory config = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -431,8 +433,8 @@ contract CCIPConfig_validateConfig is CCIPConfigSetup { function test__validateConfig_FTooHigh_Reverts() public { (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); - CCIPConfig.OCR3Config memory config = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory config = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -456,8 +458,8 @@ contract CCIPConfig_validateConfig is CCIPConfigSetup { } // Config is for 4 nodes, so f == 1. - CCIPConfig.OCR3Config memory config = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory config = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -479,8 +481,8 @@ contract CCIPConfig_validateConfig is CCIPConfigSetup { (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); // Config is for 4 nodes, so f == 1. - CCIPConfig.OCR3Config memory config = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory config = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _makeBytes32Array(5, 0), // too many bootstrap p2pIds, 5 > 4 @@ -518,8 +520,8 @@ contract CCIPConfig_validateConfig is CCIPConfigSetup { ); // Config is for 4 nodes, so f == 1. - CCIPConfig.OCR3Config memory config = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory config = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -541,24 +543,24 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { function test__stateFromConfigLength_Success() public { uint256 configLen = 0; - CCIPConfig.ConfigState state = s_ccipCC.stateFromConfigLength(configLen); - assertEq(uint256(state), uint256(CCIPConfig.ConfigState.Init)); + Types.ConfigState state = s_ccipCC.stateFromConfigLength(configLen); + assertEq(uint256(state), uint256(Types.ConfigState.Init)); configLen = 1; state = s_ccipCC.stateFromConfigLength(configLen); - assertEq(uint256(state), uint256(CCIPConfig.ConfigState.Running)); + assertEq(uint256(state), uint256(Types.ConfigState.Running)); configLen = 2; state = s_ccipCC.stateFromConfigLength(configLen); - assertEq(uint256(state), uint256(CCIPConfig.ConfigState.Staging)); + assertEq(uint256(state), uint256(Types.ConfigState.Staging)); } function test__validateConfigStateTransition_Success() public { - s_ccipCC.validateConfigStateTransition(CCIPConfig.ConfigState.Init, CCIPConfig.ConfigState.Running); + s_ccipCC.validateConfigStateTransition(Types.ConfigState.Init, Types.ConfigState.Running); - s_ccipCC.validateConfigStateTransition(CCIPConfig.ConfigState.Running, CCIPConfig.ConfigState.Staging); + s_ccipCC.validateConfigStateTransition(Types.ConfigState.Running, Types.ConfigState.Staging); - s_ccipCC.validateConfigStateTransition(CCIPConfig.ConfigState.Staging, CCIPConfig.ConfigState.Running); + s_ccipCC.validateConfigStateTransition(Types.ConfigState.Staging, Types.ConfigState.Running); } function test__computeConfigDigest_Success() public { @@ -569,8 +571,8 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { bytes32[] memory p2pIds = _makeBytes32Array(4, 0); bytes[] memory signers = _makeBytesArray(2, 10); bytes[] memory transmitters = _makeBytesArray(2, 20); - CCIPConfig.OCR3Config memory config = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory config = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -594,7 +596,7 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { bytes32 configDigest3 = s_ccipCC.computeConfigDigest(donId, configCount, config); configCount = 1; - config.pluginType = CCIPConfig.PluginType.Execution; + config.pluginType = Internal.OCRPluginType.Execution; bytes32 configDigest4 = s_ccipCC.computeConfigDigest(donId, configCount, config); assertNotEq(configDigest1, configDigest2, "config digests 1 and 2 must not match"); @@ -612,10 +614,10 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { bytes32[] memory p2pIds = _makeBytes32Array(4, 0); bytes[] memory signers = _makeBytesArray(4, 10); bytes[] memory transmitters = _makeBytesArray(4, 20); - CCIPConfig.OCR3Config[] memory cfgs = new CCIPConfig.OCR3Config[](numCommitCfgs + numExecCfgs); + Types.OCR3Config[] memory cfgs = new Types.OCR3Config[](numCommitCfgs + numExecCfgs); for (uint256 i = 0; i < numCommitCfgs; i++) { - cfgs[i] = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + cfgs[i] = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -628,8 +630,8 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { }); } for (uint256 i = 0; i < numExecCfgs; i++) { - cfgs[numCommitCfgs + i] = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Execution, + cfgs[numCommitCfgs + i] = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Execution, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -641,17 +643,17 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { offchainConfig: abi.encode("exec", numCommitCfgs + i) }); } - (CCIPConfig.OCR3Config[] memory commitCfgs, CCIPConfig.OCR3Config[] memory execCfgs) = + (Types.OCR3Config[] memory commitCfgs, Types.OCR3Config[] memory execCfgs) = s_ccipCC.groupByPluginType(cfgs); assertEq(commitCfgs.length, numCommitCfgs, "commitCfgs length must match"); assertEq(execCfgs.length, numExecCfgs, "execCfgs length must match"); for (uint256 i = 0; i < commitCfgs.length; i++) { - assertEq(uint8(commitCfgs[i].pluginType), uint8(CCIPConfig.PluginType.Commit), "plugin type must be commit"); + assertEq(uint8(commitCfgs[i].pluginType), uint8(Internal.OCRPluginType.Commit), "plugin type must be commit"); assertEq(commitCfgs[i].offchainConfig, abi.encode("commit", i), "offchain config must match"); } for (uint256 i = 0; i < execCfgs.length; i++) { - assertEq(uint8(execCfgs[i].pluginType), uint8(CCIPConfig.PluginType.Execution), "plugin type must be execution"); + assertEq(uint8(execCfgs[i].pluginType), uint8(Internal.OCRPluginType.Execution), "plugin type must be execution"); assertEq(execCfgs[i].offchainConfig, abi.encode("exec", numCommitCfgs + i), "offchain config must match"); } } @@ -659,10 +661,10 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { function test__computeNewConfigWithMeta_InitToRunning_Success() public { (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); uint32 donId = 1; - CCIPConfig.OCR3ConfigWithMeta[] memory currentConfig = new CCIPConfig.OCR3ConfigWithMeta[](0); - CCIPConfig.OCR3Config[] memory newConfig = new CCIPConfig.OCR3Config[](1); - newConfig[0] = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3ConfigWithMeta[] memory currentConfig = new Types.OCR3ConfigWithMeta[](0); + Types.OCR3Config[] memory newConfig = new Types.OCR3Config[](1); + newConfig[0] = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -673,9 +675,9 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { offchainConfigVersion: 30, offchainConfig: bytes("commit") }); - CCIPConfig.ConfigState currentState = CCIPConfig.ConfigState.Init; - CCIPConfig.ConfigState newState = CCIPConfig.ConfigState.Running; - CCIPConfig.OCR3ConfigWithMeta[] memory newConfigWithMeta = + Types.ConfigState currentState = Types.ConfigState.Init; + Types.ConfigState newState = Types.ConfigState.Running; + Types.OCR3ConfigWithMeta[] memory newConfigWithMeta = s_ccipCC.computeNewConfigWithMeta(donId, currentConfig, newConfig, currentState, newState); assertEq(newConfigWithMeta.length, 1, "new config with meta length must be 1"); assertEq(newConfigWithMeta[0].configCount, uint64(1), "config count must be 1"); @@ -694,8 +696,8 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { function test__computeNewConfigWithMeta_RunningToStaging_Success() public { (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); uint32 donId = 1; - CCIPConfig.OCR3Config memory blueConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory blueConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -706,8 +708,8 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { offchainConfigVersion: 30, offchainConfig: bytes("commit") }); - CCIPConfig.OCR3Config memory greenConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory greenConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -719,23 +721,23 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { offchainConfig: bytes("commit-new") }); - CCIPConfig.OCR3ConfigWithMeta[] memory currentConfig = new CCIPConfig.OCR3ConfigWithMeta[](1); - currentConfig[0] = CCIPConfig.OCR3ConfigWithMeta({ + Types.OCR3ConfigWithMeta[] memory currentConfig = new Types.OCR3ConfigWithMeta[](1); + currentConfig[0] = Types.OCR3ConfigWithMeta({ configCount: 1, config: blueConfig, configDigest: s_ccipCC.computeConfigDigest(donId, 1, blueConfig) }); - CCIPConfig.OCR3Config[] memory newConfig = new CCIPConfig.OCR3Config[](2); + Types.OCR3Config[] memory newConfig = new Types.OCR3Config[](2); // existing blue config first. newConfig[0] = blueConfig; // green config next. newConfig[1] = greenConfig; - CCIPConfig.ConfigState currentState = CCIPConfig.ConfigState.Running; - CCIPConfig.ConfigState newState = CCIPConfig.ConfigState.Staging; + Types.ConfigState currentState = Types.ConfigState.Running; + Types.ConfigState newState = Types.ConfigState.Staging; - CCIPConfig.OCR3ConfigWithMeta[] memory newConfigWithMeta = + Types.OCR3ConfigWithMeta[] memory newConfigWithMeta = s_ccipCC.computeNewConfigWithMeta(donId, currentConfig, newConfig, currentState, newState); assertEq(newConfigWithMeta.length, 2, "new config with meta length must be 2"); @@ -772,8 +774,8 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { function test__computeNewConfigWithMeta_StagingToRunning_Success() public { (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); uint32 donId = 1; - CCIPConfig.OCR3Config memory blueConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory blueConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -784,8 +786,8 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { offchainConfigVersion: 30, offchainConfig: bytes("commit") }); - CCIPConfig.OCR3Config memory greenConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory greenConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -797,24 +799,24 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { offchainConfig: bytes("commit-new") }); - CCIPConfig.OCR3ConfigWithMeta[] memory currentConfig = new CCIPConfig.OCR3ConfigWithMeta[](2); - currentConfig[0] = CCIPConfig.OCR3ConfigWithMeta({ + Types.OCR3ConfigWithMeta[] memory currentConfig = new Types.OCR3ConfigWithMeta[](2); + currentConfig[0] = Types.OCR3ConfigWithMeta({ configCount: 1, config: blueConfig, configDigest: s_ccipCC.computeConfigDigest(donId, 1, blueConfig) }); - currentConfig[1] = CCIPConfig.OCR3ConfigWithMeta({ + currentConfig[1] = Types.OCR3ConfigWithMeta({ configCount: 2, config: greenConfig, configDigest: s_ccipCC.computeConfigDigest(donId, 2, greenConfig) }); - CCIPConfig.OCR3Config[] memory newConfig = new CCIPConfig.OCR3Config[](1); + Types.OCR3Config[] memory newConfig = new Types.OCR3Config[](1); newConfig[0] = greenConfig; - CCIPConfig.ConfigState currentState = CCIPConfig.ConfigState.Staging; - CCIPConfig.ConfigState newState = CCIPConfig.ConfigState.Running; + Types.ConfigState currentState = Types.ConfigState.Staging; + Types.ConfigState newState = Types.ConfigState.Running; - CCIPConfig.OCR3ConfigWithMeta[] memory newConfigWithMeta = + Types.OCR3ConfigWithMeta[] memory newConfigWithMeta = s_ccipCC.computeNewConfigWithMeta(donId, currentConfig, newConfig, currentState, newState); assertEq(newConfigWithMeta.length, 1, "new config with meta length must be 1"); @@ -832,8 +834,8 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { function test__validateConfigTransition_InitToRunning_Success() public { (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); uint32 donId = 1; - CCIPConfig.OCR3Config memory blueConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory blueConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -845,13 +847,13 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { offchainConfig: bytes("commit") }); - CCIPConfig.OCR3ConfigWithMeta[] memory newConfig = new CCIPConfig.OCR3ConfigWithMeta[](1); - newConfig[0] = CCIPConfig.OCR3ConfigWithMeta({ + Types.OCR3ConfigWithMeta[] memory newConfig = new Types.OCR3ConfigWithMeta[](1); + newConfig[0] = Types.OCR3ConfigWithMeta({ configCount: 1, config: blueConfig, configDigest: s_ccipCC.computeConfigDigest(donId, 1, blueConfig) }); - CCIPConfig.OCR3ConfigWithMeta[] memory currentConfig = new CCIPConfig.OCR3ConfigWithMeta[](0); + Types.OCR3ConfigWithMeta[] memory currentConfig = new Types.OCR3ConfigWithMeta[](0); s_ccipCC.validateConfigTransition(currentConfig, newConfig); } @@ -859,8 +861,8 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { function test__validateConfigTransition_RunningToStaging_Success() public { (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); uint32 donId = 1; - CCIPConfig.OCR3Config memory blueConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory blueConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -871,8 +873,8 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { offchainConfigVersion: 30, offchainConfig: bytes("commit") }); - CCIPConfig.OCR3Config memory greenConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory greenConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -884,20 +886,20 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { offchainConfig: bytes("commit-new") }); - CCIPConfig.OCR3ConfigWithMeta[] memory newConfig = new CCIPConfig.OCR3ConfigWithMeta[](2); - newConfig[0] = CCIPConfig.OCR3ConfigWithMeta({ + Types.OCR3ConfigWithMeta[] memory newConfig = new Types.OCR3ConfigWithMeta[](2); + newConfig[0] = Types.OCR3ConfigWithMeta({ configCount: 1, config: blueConfig, configDigest: s_ccipCC.computeConfigDigest(donId, 1, blueConfig) }); - newConfig[1] = CCIPConfig.OCR3ConfigWithMeta({ + newConfig[1] = Types.OCR3ConfigWithMeta({ configCount: 2, config: greenConfig, configDigest: s_ccipCC.computeConfigDigest(donId, 2, greenConfig) }); - CCIPConfig.OCR3ConfigWithMeta[] memory currentConfig = new CCIPConfig.OCR3ConfigWithMeta[](1); - currentConfig[0] = CCIPConfig.OCR3ConfigWithMeta({ + Types.OCR3ConfigWithMeta[] memory currentConfig = new Types.OCR3ConfigWithMeta[](1); + currentConfig[0] = Types.OCR3ConfigWithMeta({ configCount: 1, config: blueConfig, configDigest: s_ccipCC.computeConfigDigest(donId, 1, blueConfig) @@ -909,8 +911,8 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { function test__validateConfigTransition_StagingToRunning_Success() public { (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); uint32 donId = 1; - CCIPConfig.OCR3Config memory blueConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory blueConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -921,8 +923,8 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { offchainConfigVersion: 30, offchainConfig: bytes("commit") }); - CCIPConfig.OCR3Config memory greenConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory greenConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -934,20 +936,20 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { offchainConfig: bytes("commit-new") }); - CCIPConfig.OCR3ConfigWithMeta[] memory currentConfig = new CCIPConfig.OCR3ConfigWithMeta[](2); - currentConfig[0] = CCIPConfig.OCR3ConfigWithMeta({ + Types.OCR3ConfigWithMeta[] memory currentConfig = new Types.OCR3ConfigWithMeta[](2); + currentConfig[0] = Types.OCR3ConfigWithMeta({ configCount: 1, config: blueConfig, configDigest: s_ccipCC.computeConfigDigest(donId, 1, blueConfig) }); - currentConfig[1] = CCIPConfig.OCR3ConfigWithMeta({ + currentConfig[1] = Types.OCR3ConfigWithMeta({ configCount: 2, config: greenConfig, configDigest: s_ccipCC.computeConfigDigest(donId, 2, greenConfig) }); - CCIPConfig.OCR3ConfigWithMeta[] memory newConfig = new CCIPConfig.OCR3ConfigWithMeta[](1); - newConfig[0] = CCIPConfig.OCR3ConfigWithMeta({ + Types.OCR3ConfigWithMeta[] memory newConfig = new Types.OCR3ConfigWithMeta[](1); + newConfig[0] = Types.OCR3ConfigWithMeta({ configCount: 2, config: greenConfig, configDigest: s_ccipCC.computeConfigDigest(donId, 2, greenConfig) @@ -968,10 +970,10 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { bytes32[] memory p2pIds = _makeBytes32Array(4, 0); bytes[] memory signers = _makeBytesArray(4, 10); bytes[] memory transmitters = _makeBytesArray(4, 20); - CCIPConfig.OCR3Config[] memory cfgs = new CCIPConfig.OCR3Config[](3); + Types.OCR3Config[] memory cfgs = new Types.OCR3Config[](3); for (uint256 i = 0; i < 3; i++) { - cfgs[i] = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + cfgs[i] = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -991,10 +993,10 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { bytes32[] memory p2pIds = _makeBytes32Array(4, 0); bytes[] memory signers = _makeBytesArray(4, 10); bytes[] memory transmitters = _makeBytesArray(4, 20); - CCIPConfig.OCR3Config[] memory cfgs = new CCIPConfig.OCR3Config[](3); + Types.OCR3Config[] memory cfgs = new Types.OCR3Config[](3); for (uint256 i = 0; i < 3; i++) { - cfgs[i] = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Execution, + cfgs[i] = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Execution, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -1011,15 +1013,15 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { } function test__groupByPluginType_TooManyOCR3Configs_Reverts() public { - CCIPConfig.OCR3Config[] memory cfgs = new CCIPConfig.OCR3Config[](5); + Types.OCR3Config[] memory cfgs = new Types.OCR3Config[](5); vm.expectRevert(CCIPConfig.TooManyOCR3Configs.selector); s_ccipCC.groupByPluginType(cfgs); } function test__validateConfigTransition_InitToRunning_WrongConfigCount_Reverts() public { uint32 donId = 1; - CCIPConfig.OCR3Config memory blueConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory blueConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(_makeBytes32Array(4, 0), 0, 1), @@ -1031,13 +1033,13 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { offchainConfig: bytes("commit") }); - CCIPConfig.OCR3ConfigWithMeta[] memory newConfig = new CCIPConfig.OCR3ConfigWithMeta[](1); - newConfig[0] = CCIPConfig.OCR3ConfigWithMeta({ + Types.OCR3ConfigWithMeta[] memory newConfig = new Types.OCR3ConfigWithMeta[](1); + newConfig[0] = Types.OCR3ConfigWithMeta({ configCount: 0, config: blueConfig, configDigest: s_ccipCC.computeConfigDigest(donId, 1, blueConfig) }); - CCIPConfig.OCR3ConfigWithMeta[] memory currentConfig = new CCIPConfig.OCR3ConfigWithMeta[](0); + Types.OCR3ConfigWithMeta[] memory currentConfig = new Types.OCR3ConfigWithMeta[](0); vm.expectRevert(abi.encodeWithSelector(CCIPConfig.WrongConfigCount.selector, 0, 1)); s_ccipCC.validateConfigTransition(currentConfig, newConfig); @@ -1045,8 +1047,8 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { function test__validateConfigTransition_RunningToStaging_WrongConfigDigestBlueGreen_Reverts() public { uint32 donId = 1; - CCIPConfig.OCR3Config memory blueConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory blueConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(_makeBytes32Array(4, 0), 0, 1), @@ -1057,8 +1059,8 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { offchainConfigVersion: 30, offchainConfig: bytes("commit") }); - CCIPConfig.OCR3Config memory greenConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory greenConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(_makeBytes32Array(4, 0), 0, 1), @@ -1070,20 +1072,20 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { offchainConfig: bytes("commit-new") }); - CCIPConfig.OCR3ConfigWithMeta[] memory currentConfig = new CCIPConfig.OCR3ConfigWithMeta[](1); - currentConfig[0] = CCIPConfig.OCR3ConfigWithMeta({ + Types.OCR3ConfigWithMeta[] memory currentConfig = new Types.OCR3ConfigWithMeta[](1); + currentConfig[0] = Types.OCR3ConfigWithMeta({ configCount: 1, config: blueConfig, configDigest: s_ccipCC.computeConfigDigest(donId, 1, blueConfig) }); - CCIPConfig.OCR3ConfigWithMeta[] memory newConfig = new CCIPConfig.OCR3ConfigWithMeta[](2); - newConfig[0] = CCIPConfig.OCR3ConfigWithMeta({ + Types.OCR3ConfigWithMeta[] memory newConfig = new Types.OCR3ConfigWithMeta[](2); + newConfig[0] = Types.OCR3ConfigWithMeta({ configCount: 1, config: blueConfig, configDigest: s_ccipCC.computeConfigDigest(donId, 3, blueConfig) // wrong config digest (due to diff config count) }); - newConfig[1] = CCIPConfig.OCR3ConfigWithMeta({ + newConfig[1] = Types.OCR3ConfigWithMeta({ configCount: 2, config: greenConfig, configDigest: s_ccipCC.computeConfigDigest(donId, 2, greenConfig) @@ -1101,8 +1103,8 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { function test__validateConfigTransition_RunningToStaging_WrongConfigCount_Reverts() public { uint32 donId = 1; - CCIPConfig.OCR3Config memory blueConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory blueConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(_makeBytes32Array(4, 0), 0, 1), @@ -1113,8 +1115,8 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { offchainConfigVersion: 30, offchainConfig: bytes("commit") }); - CCIPConfig.OCR3Config memory greenConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory greenConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(_makeBytes32Array(4, 0), 0, 1), @@ -1126,20 +1128,20 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { offchainConfig: bytes("commit-new") }); - CCIPConfig.OCR3ConfigWithMeta[] memory currentConfig = new CCIPConfig.OCR3ConfigWithMeta[](1); - currentConfig[0] = CCIPConfig.OCR3ConfigWithMeta({ + Types.OCR3ConfigWithMeta[] memory currentConfig = new Types.OCR3ConfigWithMeta[](1); + currentConfig[0] = Types.OCR3ConfigWithMeta({ configCount: 1, config: blueConfig, configDigest: s_ccipCC.computeConfigDigest(donId, 1, blueConfig) }); - CCIPConfig.OCR3ConfigWithMeta[] memory newConfig = new CCIPConfig.OCR3ConfigWithMeta[](2); - newConfig[0] = CCIPConfig.OCR3ConfigWithMeta({ + Types.OCR3ConfigWithMeta[] memory newConfig = new Types.OCR3ConfigWithMeta[](2); + newConfig[0] = Types.OCR3ConfigWithMeta({ configCount: 1, config: blueConfig, configDigest: s_ccipCC.computeConfigDigest(donId, 1, blueConfig) }); - newConfig[1] = CCIPConfig.OCR3ConfigWithMeta({ + newConfig[1] = Types.OCR3ConfigWithMeta({ configCount: 3, // wrong config count config: greenConfig, configDigest: s_ccipCC.computeConfigDigest(donId, 3, greenConfig) @@ -1151,8 +1153,8 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { function test__validateConfigTransition_StagingToRunning_WrongConfigDigest_Reverts() public { uint32 donId = 1; - CCIPConfig.OCR3Config memory blueConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory blueConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(_makeBytes32Array(4, 0), 0, 1), @@ -1163,8 +1165,8 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { offchainConfigVersion: 30, offchainConfig: bytes("commit") }); - CCIPConfig.OCR3Config memory greenConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory greenConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(_makeBytes32Array(4, 0), 0, 1), @@ -1176,20 +1178,20 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { offchainConfig: bytes("commit-new") }); - CCIPConfig.OCR3ConfigWithMeta[] memory currentConfig = new CCIPConfig.OCR3ConfigWithMeta[](2); - currentConfig[0] = CCIPConfig.OCR3ConfigWithMeta({ + Types.OCR3ConfigWithMeta[] memory currentConfig = new Types.OCR3ConfigWithMeta[](2); + currentConfig[0] = Types.OCR3ConfigWithMeta({ configCount: 1, config: blueConfig, configDigest: s_ccipCC.computeConfigDigest(donId, 1, blueConfig) }); - currentConfig[1] = CCIPConfig.OCR3ConfigWithMeta({ + currentConfig[1] = Types.OCR3ConfigWithMeta({ configCount: 2, config: greenConfig, configDigest: s_ccipCC.computeConfigDigest(donId, 2, greenConfig) }); - CCIPConfig.OCR3ConfigWithMeta[] memory newConfig = new CCIPConfig.OCR3ConfigWithMeta[](1); - newConfig[0] = CCIPConfig.OCR3ConfigWithMeta({ + Types.OCR3ConfigWithMeta[] memory newConfig = new Types.OCR3ConfigWithMeta[](1); + newConfig[0] = Types.OCR3ConfigWithMeta({ configCount: 2, config: greenConfig, configDigest: s_ccipCC.computeConfigDigest(donId, 3, greenConfig) // wrong config digest @@ -1206,8 +1208,8 @@ contract CCIPConfig_ConfigStateMachine is CCIPConfigSetup { } function test__validateConfigTransition_NonExistentConfigTransition_Reverts() public { - CCIPConfig.OCR3ConfigWithMeta[] memory currentConfig = new CCIPConfig.OCR3ConfigWithMeta[](3); - CCIPConfig.OCR3ConfigWithMeta[] memory newConfig = new CCIPConfig.OCR3ConfigWithMeta[](1); + Types.OCR3ConfigWithMeta[] memory currentConfig = new Types.OCR3ConfigWithMeta[](3); + Types.OCR3ConfigWithMeta[] memory newConfig = new Types.OCR3ConfigWithMeta[](1); vm.expectRevert(CCIPConfig.NonExistentConfigTransition.selector); s_ccipCC.validateConfigTransition(currentConfig, newConfig); } @@ -1219,8 +1221,8 @@ contract CCIPConfig__updatePluginConfig is CCIPConfigSetup { function test__updatePluginConfig_InitToRunning_Success() public { (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); uint32 donId = 1; - CCIPConfig.OCR3Config memory blueConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory blueConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -1231,13 +1233,13 @@ contract CCIPConfig__updatePluginConfig is CCIPConfigSetup { offchainConfigVersion: 30, offchainConfig: bytes("commit") }); - CCIPConfig.OCR3Config[] memory configs = new CCIPConfig.OCR3Config[](1); + Types.OCR3Config[] memory configs = new Types.OCR3Config[](1); configs[0] = blueConfig; - s_ccipCC.updatePluginConfig(donId, CCIPConfig.PluginType.Commit, configs); + s_ccipCC.updatePluginConfig(donId, Internal.OCRPluginType.Commit, configs); // should see the updated config in the contract state. - CCIPConfig.OCR3ConfigWithMeta[] memory storedConfig = s_ccipCC.getOCRConfig(donId, CCIPConfig.PluginType.Commit); + Types.OCR3ConfigWithMeta[] memory storedConfig = s_ccipCC.getOCRConfig(donId, Internal.OCRPluginType.Commit); assertEq(storedConfig.length, 1, "don config length must be 1"); assertEq(storedConfig[0].configCount, uint64(1), "config count must be 1"); assertEq(uint256(storedConfig[0].config.pluginType), uint256(blueConfig.pluginType), "plugin type must match"); @@ -1247,9 +1249,9 @@ contract CCIPConfig__updatePluginConfig is CCIPConfigSetup { (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); // add blue config. uint32 donId = 1; - CCIPConfig.PluginType pluginType = CCIPConfig.PluginType.Commit; - CCIPConfig.OCR3Config memory blueConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Internal.OCRPluginType pluginType = Internal.OCRPluginType.Commit; + Types.OCR3Config memory blueConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -1260,13 +1262,13 @@ contract CCIPConfig__updatePluginConfig is CCIPConfigSetup { offchainConfigVersion: 30, offchainConfig: bytes("commit") }); - CCIPConfig.OCR3Config[] memory startConfigs = new CCIPConfig.OCR3Config[](1); + Types.OCR3Config[] memory startConfigs = new Types.OCR3Config[](1); startConfigs[0] = blueConfig; // add blue AND green config to indicate an update. - s_ccipCC.updatePluginConfig(donId, CCIPConfig.PluginType.Commit, startConfigs); - CCIPConfig.OCR3Config memory greenConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + s_ccipCC.updatePluginConfig(donId, Internal.OCRPluginType.Commit, startConfigs); + Types.OCR3Config memory greenConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -1277,22 +1279,22 @@ contract CCIPConfig__updatePluginConfig is CCIPConfigSetup { offchainConfigVersion: 30, offchainConfig: bytes("commit-new") }); - CCIPConfig.OCR3Config[] memory blueAndGreen = new CCIPConfig.OCR3Config[](2); + Types.OCR3Config[] memory blueAndGreen = new Types.OCR3Config[](2); blueAndGreen[0] = blueConfig; blueAndGreen[1] = greenConfig; - s_ccipCC.updatePluginConfig(donId, CCIPConfig.PluginType.Commit, blueAndGreen); + s_ccipCC.updatePluginConfig(donId, Internal.OCRPluginType.Commit, blueAndGreen); // should see the updated config in the contract state. - CCIPConfig.OCR3ConfigWithMeta[] memory storedConfig = s_ccipCC.getOCRConfig(donId, CCIPConfig.PluginType.Commit); + Types.OCR3ConfigWithMeta[] memory storedConfig = s_ccipCC.getOCRConfig(donId, Internal.OCRPluginType.Commit); assertEq(storedConfig.length, 2, "don config length must be 2"); // 0 index is blue config, 1 index is green config. assertEq(storedConfig[1].configCount, uint64(2), "config count must be 2"); assertEq( - uint256(storedConfig[0].config.pluginType), uint256(CCIPConfig.PluginType.Commit), "plugin type must match" + uint256(storedConfig[0].config.pluginType), uint256(Internal.OCRPluginType.Commit), "plugin type must match" ); assertEq( - uint256(storedConfig[1].config.pluginType), uint256(CCIPConfig.PluginType.Commit), "plugin type must match" + uint256(storedConfig[1].config.pluginType), uint256(Internal.OCRPluginType.Commit), "plugin type must match" ); assertEq(storedConfig[0].config.offchainConfig, bytes("commit"), "blue offchain config must match"); assertEq(storedConfig[1].config.offchainConfig, bytes("commit-new"), "green offchain config must match"); @@ -1302,9 +1304,9 @@ contract CCIPConfig__updatePluginConfig is CCIPConfigSetup { (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); // add blue config. uint32 donId = 1; - CCIPConfig.PluginType pluginType = CCIPConfig.PluginType.Commit; - CCIPConfig.OCR3Config memory blueConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Internal.OCRPluginType pluginType = Internal.OCRPluginType.Commit; + Types.OCR3Config memory blueConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -1315,13 +1317,13 @@ contract CCIPConfig__updatePluginConfig is CCIPConfigSetup { offchainConfigVersion: 30, offchainConfig: bytes("commit") }); - CCIPConfig.OCR3Config[] memory startConfigs = new CCIPConfig.OCR3Config[](1); + Types.OCR3Config[] memory startConfigs = new Types.OCR3Config[](1); startConfigs[0] = blueConfig; // add blue AND green config to indicate an update. - s_ccipCC.updatePluginConfig(donId, CCIPConfig.PluginType.Commit, startConfigs); - CCIPConfig.OCR3Config memory greenConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + s_ccipCC.updatePluginConfig(donId, Internal.OCRPluginType.Commit, startConfigs); + Types.OCR3Config memory greenConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -1332,38 +1334,38 @@ contract CCIPConfig__updatePluginConfig is CCIPConfigSetup { offchainConfigVersion: 30, offchainConfig: bytes("commit-new") }); - CCIPConfig.OCR3Config[] memory blueAndGreen = new CCIPConfig.OCR3Config[](2); + Types.OCR3Config[] memory blueAndGreen = new Types.OCR3Config[](2); blueAndGreen[0] = blueConfig; blueAndGreen[1] = greenConfig; - s_ccipCC.updatePluginConfig(donId, CCIPConfig.PluginType.Commit, blueAndGreen); + s_ccipCC.updatePluginConfig(donId, Internal.OCRPluginType.Commit, blueAndGreen); // should see the updated config in the contract state. - CCIPConfig.OCR3ConfigWithMeta[] memory storedConfig = s_ccipCC.getOCRConfig(donId, CCIPConfig.PluginType.Commit); + Types.OCR3ConfigWithMeta[] memory storedConfig = s_ccipCC.getOCRConfig(donId, Internal.OCRPluginType.Commit); assertEq(storedConfig.length, 2, "don config length must be 2"); // 0 index is blue config, 1 index is green config. assertEq(storedConfig[1].configCount, uint64(2), "config count must be 2"); assertEq( - uint256(storedConfig[0].config.pluginType), uint256(CCIPConfig.PluginType.Commit), "plugin type must match" + uint256(storedConfig[0].config.pluginType), uint256(Internal.OCRPluginType.Commit), "plugin type must match" ); assertEq( - uint256(storedConfig[1].config.pluginType), uint256(CCIPConfig.PluginType.Commit), "plugin type must match" + uint256(storedConfig[1].config.pluginType), uint256(Internal.OCRPluginType.Commit), "plugin type must match" ); assertEq(storedConfig[0].config.offchainConfig, bytes("commit"), "blue offchain config must match"); assertEq(storedConfig[1].config.offchainConfig, bytes("commit-new"), "green offchain config must match"); // promote green to blue. - CCIPConfig.OCR3Config[] memory promote = new CCIPConfig.OCR3Config[](1); + Types.OCR3Config[] memory promote = new Types.OCR3Config[](1); promote[0] = greenConfig; - s_ccipCC.updatePluginConfig(donId, CCIPConfig.PluginType.Commit, promote); + s_ccipCC.updatePluginConfig(donId, Internal.OCRPluginType.Commit, promote); // should see the updated config in the contract state. - storedConfig = s_ccipCC.getOCRConfig(donId, CCIPConfig.PluginType.Commit); + storedConfig = s_ccipCC.getOCRConfig(donId, Internal.OCRPluginType.Commit); assertEq(storedConfig.length, 1, "don config length must be 1"); assertEq(storedConfig[0].configCount, uint64(2), "config count must be 2"); assertEq( - uint256(storedConfig[0].config.pluginType), uint256(CCIPConfig.PluginType.Commit), "plugin type must match" + uint256(storedConfig[0].config.pluginType), uint256(Internal.OCRPluginType.Commit), "plugin type must match" ); assertEq(storedConfig[0].config.offchainConfig, bytes("commit-new"), "green offchain config must match"); } @@ -1371,17 +1373,17 @@ contract CCIPConfig__updatePluginConfig is CCIPConfigSetup { // Reverts. function test__updatePluginConfig_InvalidConfigLength_Reverts() public { uint32 donId = 1; - CCIPConfig.OCR3Config[] memory newConfig = new CCIPConfig.OCR3Config[](3); + Types.OCR3Config[] memory newConfig = new Types.OCR3Config[](3); vm.expectRevert(abi.encodeWithSelector(CCIPConfig.InvalidConfigLength.selector, uint256(3))); - s_ccipCC.updatePluginConfig(donId, CCIPConfig.PluginType.Commit, newConfig); + s_ccipCC.updatePluginConfig(donId, Internal.OCRPluginType.Commit, newConfig); } function test__updatePluginConfig_InvalidConfigStateTransition_Reverts() public { uint32 donId = 1; - CCIPConfig.OCR3Config[] memory newConfig = new CCIPConfig.OCR3Config[](2); + Types.OCR3Config[] memory newConfig = new Types.OCR3Config[](2); // 0 -> 2 is an invalid state transition. vm.expectRevert(abi.encodeWithSelector(CCIPConfig.InvalidConfigStateTransition.selector, 0, 2)); - s_ccipCC.updatePluginConfig(donId, CCIPConfig.PluginType.Commit, newConfig); + s_ccipCC.updatePluginConfig(donId, Internal.OCRPluginType.Commit, newConfig); } } @@ -1390,7 +1392,7 @@ contract CCIPConfig_beforeCapabilityConfigSet is CCIPConfigSetup { function test_beforeCapabilityConfigSet_ZeroLengthConfig_Success() public { changePrank(CAPABILITIES_REGISTRY); - CCIPConfig.OCR3Config[] memory configs = new CCIPConfig.OCR3Config[](0); + Types.OCR3Config[] memory configs = new Types.OCR3Config[](0); bytes memory encodedConfigs = abi.encode(configs); s_ccipCC.beforeCapabilityConfigSet(new bytes32[](0), encodedConfigs, 1, 1); } @@ -1400,8 +1402,8 @@ contract CCIPConfig_beforeCapabilityConfigSet is CCIPConfigSetup { changePrank(CAPABILITIES_REGISTRY); uint32 donId = 1; - CCIPConfig.OCR3Config memory blueConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory blueConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -1412,17 +1414,17 @@ contract CCIPConfig_beforeCapabilityConfigSet is CCIPConfigSetup { offchainConfigVersion: 30, offchainConfig: bytes("commit") }); - CCIPConfig.OCR3Config[] memory configs = new CCIPConfig.OCR3Config[](1); + Types.OCR3Config[] memory configs = new Types.OCR3Config[](1); configs[0] = blueConfig; bytes memory encoded = abi.encode(configs); s_ccipCC.beforeCapabilityConfigSet(new bytes32[](0), encoded, 1, donId); - CCIPConfig.OCR3ConfigWithMeta[] memory storedConfigs = s_ccipCC.getOCRConfig(donId, CCIPConfig.PluginType.Commit); + Types.OCR3ConfigWithMeta[] memory storedConfigs = s_ccipCC.getOCRConfig(donId, Internal.OCRPluginType.Commit); assertEq(storedConfigs.length, 1, "config length must be 1"); assertEq(storedConfigs[0].configCount, uint64(1), "config count must be 1"); assertEq( - uint256(storedConfigs[0].config.pluginType), uint256(CCIPConfig.PluginType.Commit), "plugin type must be commit" + uint256(storedConfigs[0].config.pluginType), uint256(Internal.OCRPluginType.Commit), "plugin type must be commit" ); } @@ -1431,8 +1433,8 @@ contract CCIPConfig_beforeCapabilityConfigSet is CCIPConfigSetup { changePrank(CAPABILITIES_REGISTRY); uint32 donId = 1; - CCIPConfig.OCR3Config memory blueConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Execution, + Types.OCR3Config memory blueConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Execution, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -1443,18 +1445,18 @@ contract CCIPConfig_beforeCapabilityConfigSet is CCIPConfigSetup { offchainConfigVersion: 30, offchainConfig: bytes("exec") }); - CCIPConfig.OCR3Config[] memory configs = new CCIPConfig.OCR3Config[](1); + Types.OCR3Config[] memory configs = new Types.OCR3Config[](1); configs[0] = blueConfig; bytes memory encoded = abi.encode(configs); s_ccipCC.beforeCapabilityConfigSet(new bytes32[](0), encoded, 1, donId); - CCIPConfig.OCR3ConfigWithMeta[] memory storedConfigs = s_ccipCC.getOCRConfig(donId, CCIPConfig.PluginType.Execution); + Types.OCR3ConfigWithMeta[] memory storedConfigs = s_ccipCC.getOCRConfig(donId, Internal.OCRPluginType.Execution); assertEq(storedConfigs.length, 1, "config length must be 1"); assertEq(storedConfigs[0].configCount, uint64(1), "config count must be 1"); assertEq( uint256(storedConfigs[0].config.pluginType), - uint256(CCIPConfig.PluginType.Execution), + uint256(Internal.OCRPluginType.Execution), "plugin type must be execution" ); } @@ -1464,8 +1466,8 @@ contract CCIPConfig_beforeCapabilityConfigSet is CCIPConfigSetup { changePrank(CAPABILITIES_REGISTRY); uint32 donId = 1; - CCIPConfig.OCR3Config memory blueCommitConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Commit, + Types.OCR3Config memory blueCommitConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -1476,8 +1478,8 @@ contract CCIPConfig_beforeCapabilityConfigSet is CCIPConfigSetup { offchainConfigVersion: 30, offchainConfig: bytes("commit") }); - CCIPConfig.OCR3Config memory blueExecConfig = CCIPConfig.OCR3Config({ - pluginType: CCIPConfig.PluginType.Execution, + Types.OCR3Config memory blueExecConfig = Types.OCR3Config({ + pluginType: Internal.OCRPluginType.Execution, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, bootstrapP2PIds: _subset(p2pIds, 0, 1), @@ -1488,30 +1490,30 @@ contract CCIPConfig_beforeCapabilityConfigSet is CCIPConfigSetup { offchainConfigVersion: 30, offchainConfig: bytes("exec") }); - CCIPConfig.OCR3Config[] memory configs = new CCIPConfig.OCR3Config[](2); + Types.OCR3Config[] memory configs = new Types.OCR3Config[](2); configs[0] = blueExecConfig; configs[1] = blueCommitConfig; bytes memory encoded = abi.encode(configs); s_ccipCC.beforeCapabilityConfigSet(new bytes32[](0), encoded, 1, donId); - CCIPConfig.OCR3ConfigWithMeta[] memory storedExecConfigs = - s_ccipCC.getOCRConfig(donId, CCIPConfig.PluginType.Execution); + Types.OCR3ConfigWithMeta[] memory storedExecConfigs = + s_ccipCC.getOCRConfig(donId, Internal.OCRPluginType.Execution); assertEq(storedExecConfigs.length, 1, "config length must be 1"); assertEq(storedExecConfigs[0].configCount, uint64(1), "config count must be 1"); assertEq( uint256(storedExecConfigs[0].config.pluginType), - uint256(CCIPConfig.PluginType.Execution), + uint256(Internal.OCRPluginType.Execution), "plugin type must be execution" ); - CCIPConfig.OCR3ConfigWithMeta[] memory storedCommitConfigs = - s_ccipCC.getOCRConfig(donId, CCIPConfig.PluginType.Commit); + Types.OCR3ConfigWithMeta[] memory storedCommitConfigs = + s_ccipCC.getOCRConfig(donId, Internal.OCRPluginType.Commit); assertEq(storedCommitConfigs.length, 1, "config length must be 1"); assertEq(storedCommitConfigs[0].configCount, uint64(1), "config count must be 1"); assertEq( uint256(storedCommitConfigs[0].config.pluginType), - uint256(CCIPConfig.PluginType.Commit), + uint256(Internal.OCRPluginType.Commit), "plugin type must be commit" ); } diff --git a/contracts/src/v0.8/ccip/test/helpers/CCIPConfigHelper.sol b/contracts/src/v0.8/ccip/test/helpers/CCIPConfigHelper.sol index f321ea5d40..35502ed28e 100644 --- a/contracts/src/v0.8/ccip/test/helpers/CCIPConfigHelper.sol +++ b/contracts/src/v0.8/ccip/test/helpers/CCIPConfigHelper.sol @@ -1,40 +1,42 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.24; +import {Internal} from "../../libraries/Internal.sol"; +import {Types} from "../../capability/libraries/Types.sol"; import {CCIPConfig} from "../../capability/CCIPConfig.sol"; contract CCIPConfigHelper is CCIPConfig { constructor(address capabilitiesRegistry) CCIPConfig(capabilitiesRegistry) {} - function stateFromConfigLength(uint256 configLength) public pure returns (ConfigState) { + function stateFromConfigLength(uint256 configLength) public pure returns (Types.ConfigState) { return _stateFromConfigLength(configLength); } - function validateConfigStateTransition(ConfigState currentState, ConfigState newState) public pure { + function validateConfigStateTransition(Types.ConfigState currentState, Types.ConfigState newState) public pure { _validateConfigStateTransition(currentState, newState); } function validateConfigTransition( - OCR3ConfigWithMeta[] memory currentConfig, - OCR3ConfigWithMeta[] memory newConfigWithMeta + Types.OCR3ConfigWithMeta[] memory currentConfig, + Types.OCR3ConfigWithMeta[] memory newConfigWithMeta ) public pure { _validateConfigTransition(currentConfig, newConfigWithMeta); } function computeNewConfigWithMeta( uint32 donId, - OCR3ConfigWithMeta[] memory currentConfig, - OCR3Config[] memory newConfig, - ConfigState currentState, - ConfigState newState - ) public view returns (OCR3ConfigWithMeta[] memory) { + Types.OCR3ConfigWithMeta[] memory currentConfig, + Types.OCR3Config[] memory newConfig, + Types.ConfigState currentState, + Types.ConfigState newState + ) public view returns (Types.OCR3ConfigWithMeta[] memory) { return _computeNewConfigWithMeta(donId, currentConfig, newConfig, currentState, newState); } - function groupByPluginType(OCR3Config[] memory ocr3Configs) + function groupByPluginType(Types.OCR3Config[] memory ocr3Configs) public pure - returns (OCR3Config[] memory commitConfigs, OCR3Config[] memory execConfigs) + returns (Types.OCR3Config[] memory commitConfigs, Types.OCR3Config[] memory execConfigs) { return _groupByPluginType(ocr3Configs); } @@ -42,16 +44,16 @@ contract CCIPConfigHelper is CCIPConfig { function computeConfigDigest( uint32 donId, uint64 configCount, - OCR3Config memory ocr3Config + Types.OCR3Config memory ocr3Config ) public pure returns (bytes32) { return _computeConfigDigest(donId, configCount, ocr3Config); } - function validateConfig(OCR3Config memory cfg) public view { + function validateConfig(Types.OCR3Config memory cfg) public view { _validateConfig(cfg); } - function updatePluginConfig(uint32 donId, PluginType pluginType, OCR3Config[] memory newConfig) public { + function updatePluginConfig(uint32 donId, Internal.OCRPluginType pluginType, Types.OCR3Config[] memory newConfig) public { _updatePluginConfig(donId, pluginType, newConfig); } } diff --git a/core/gethwrappers/ccip/generated/ccip_config/ccip_config.go b/core/gethwrappers/ccip/generated/ccip_config/ccip_config.go index a50f757806..55e46dc012 100644 --- a/core/gethwrappers/ccip/generated/ccip_config/ccip_config.go +++ b/core/gethwrappers/ccip/generated/ccip_config/ccip_config.go @@ -30,18 +30,18 @@ var ( _ = abi.ConvertType ) -type CCIPConfigChainConfig struct { +type TypesChainConfig struct { Readers [][32]byte FChain uint8 Config []byte } -type CCIPConfigChainConfigInfo struct { +type TypesChainConfigInfo struct { ChainSelector uint64 - ChainConfig CCIPConfigChainConfig + ChainConfig TypesChainConfig } -type CCIPConfigOCR3Config struct { +type TypesOCR3Config struct { PluginType uint8 ChainSelector uint64 F uint8 @@ -54,14 +54,14 @@ type CCIPConfigOCR3Config struct { OffchainConfig []byte } -type CCIPConfigOCR3ConfigWithMeta struct { - Config CCIPConfigOCR3Config +type TypesOCR3ConfigWithMeta struct { + Config TypesOCR3Config ConfigCount uint64 ConfigDigest [32]byte } var CCIPConfigMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"capabilitiesRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainConfigNotSetForChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ChainSelectorNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FChainMustBePositive\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FMustBePositive\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidConfigLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumCCIPConfig.ConfigState\",\"name\":\"currentState\",\"type\":\"uint8\"},{\"internalType\":\"enumCCIPConfig.ConfigState\",\"name\":\"proposedState\",\"type\":\"uint8\"}],\"name\":\"InvalidConfigStateTransition\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPluginType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"NodeNotInRegistry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonExistentConfigTransition\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimum\",\"type\":\"uint256\"}],\"name\":\"NotEnoughTransmitters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OfframpAddressCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCapabilitiesRegistryCanCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"p2pIdsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signersLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"transmittersLength\",\"type\":\"uint256\"}],\"name\":\"P2PIdsLengthNotMatching\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyBootstrapP2PIds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyOCR3Configs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManySigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyTransmitters\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"got\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"expected\",\"type\":\"uint64\"}],\"name\":\"WrongConfigCount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"got\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"}],\"name\":\"WrongConfigDigest\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"got\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"}],\"name\":\"WrongConfigDigestBlueGreen\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"CapabilityConfigurationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainConfigRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structCCIPConfig.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigSet\",\"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\":[{\"internalType\":\"uint64[]\",\"name\":\"chainSelectorRemoves\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPConfig.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPConfig.ChainConfigInfo[]\",\"name\":\"chainConfigAdds\",\"type\":\"tuple[]\"}],\"name\":\"applyChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"beforeCapabilityConfigSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllChainConfigs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPConfig.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPConfig.ChainConfigInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"getCapabilityConfiguration\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"configuration\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumCCIPConfig.PluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"}],\"name\":\"getOCRConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"enumCCIPConfig.PluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"bootstrapP2PIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"p2pIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signers\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"transmitters\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPConfig.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"configCount\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"internalType\":\"structCCIPConfig.OCR3ConfigWithMeta[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"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\":\"view\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"capabilitiesRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainConfigNotSetForChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ChainSelectorNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FChainMustBePositive\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FMustBePositive\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidConfigLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumTypes.ConfigState\",\"name\":\"currentState\",\"type\":\"uint8\"},{\"internalType\":\"enumTypes.ConfigState\",\"name\":\"proposedState\",\"type\":\"uint8\"}],\"name\":\"InvalidConfigStateTransition\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPluginType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"NodeNotInRegistry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonExistentConfigTransition\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimum\",\"type\":\"uint256\"}],\"name\":\"NotEnoughTransmitters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OfframpAddressCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCapabilitiesRegistryCanCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"p2pIdsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signersLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"transmittersLength\",\"type\":\"uint256\"}],\"name\":\"P2PIdsLengthNotMatching\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyBootstrapP2PIds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyOCR3Configs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManySigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyTransmitters\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"got\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"expected\",\"type\":\"uint64\"}],\"name\":\"WrongConfigCount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"got\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"}],\"name\":\"WrongConfigDigest\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"got\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"}],\"name\":\"WrongConfigDigestBlueGreen\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"CapabilityConfigurationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainConfigRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTypes.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigSet\",\"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\":[{\"internalType\":\"uint64[]\",\"name\":\"chainSelectorRemoves\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structTypes.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structTypes.ChainConfigInfo[]\",\"name\":\"chainConfigAdds\",\"type\":\"tuple[]\"}],\"name\":\"applyChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"beforeCapabilityConfigSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllChainConfigs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structTypes.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structTypes.ChainConfigInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"getCapabilityConfiguration\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"configuration\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"}],\"name\":\"getOCRConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"bootstrapP2PIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"p2pIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signers\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"transmitters\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structTypes.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"configCount\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"internalType\":\"structTypes.OCR3ConfigWithMeta[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"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\":\"view\",\"type\":\"function\"}]", Bin: "0x60a06040523480156200001157600080fd5b506040516200417c3803806200417c83398101604081905262000034916200017e565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620000d3565b5050506001600160a01b0316608052620001b0565b336001600160a01b038216036200012d5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000602082840312156200019157600080fd5b81516001600160a01b0381168114620001a957600080fd5b9392505050565b608051613fa9620001d360003960008181610e4e01526110e30152613fa96000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80638da5cb5b11610076578063f2fde38b1161005b578063f2fde38b146101bc578063f442c89a146101cf578063fba64a7c146101e257600080fd5b80638da5cb5b1461017f578063ddc042a8146101a757600080fd5b80634bd0473f116100a75780634bd0473f1461013457806379ba5097146101545780638318ed5d1461015e57600080fd5b806301ffc9a7146100c3578063181f5a77146100eb575b600080fd5b6100d66100d1366004612d5f565b6101f5565b60405190151581526020015b60405180910390f35b6101276040518060400160405280601481526020017f43434950436f6e66696720312e362e302d64657600000000000000000000000081525081565b6040516100e29190612e05565b610147610142366004612e49565b61028e565b6040516100e29190612f75565b61015c61075e565b005b61012761016c366004613152565b5060408051602081019091526000815290565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e2565b6101af610860565b6040516100e291906131b3565b61015c6101ca366004613243565b610a52565b61015c6101dd3660046132c5565b610a66565b61015c6101f0366004613349565b610e36565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f78bea72100000000000000000000000000000000000000000000000000000000148061028857507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b63ffffffff821660009081526005602052604081206060918360018111156102b8576102b8612e7e565b60018111156102c9576102c9612e7e565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561075257600084815260209020604080516101a08101909152600984029091018054829060608201908390829060ff16600181111561033c5761033c612e7e565b600181111561034d5761034d612e7e565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a01000000000000000000009091041660608201526001820180546080909201916103a590613406565b80601f01602080910402602001604051908101604052809291908181526020018280546103d190613406565b801561041e5780601f106103f35761010080835404028352916020019161041e565b820191906000526020600020905b81548152906001019060200180831161040157829003601f168201915b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561047657602002820191906000526020600020905b815481526020019060010190808311610462575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156104ce57602002820191906000526020600020905b8154815260200190600101908083116104ba575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156105a857838290600052602060002001805461051b90613406565b80601f016020809104026020016040519081016040528092919081815260200182805461054790613406565b80156105945780601f1061056957610100808354040283529160200191610594565b820191906000526020600020905b81548152906001019060200180831161057757829003601f168201915b5050505050815260200190600101906104fc565b50505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b828210156106815783829060005260206000200180546105f490613406565b80601f016020809104026020016040519081016040528092919081815260200182805461062090613406565b801561066d5780601f106106425761010080835404028352916020019161066d565b820191906000526020600020905b81548152906001019060200180831161065057829003601f168201915b5050505050815260200190600101906105d5565b50505050815260200160068201805461069990613406565b80601f01602080910402602001604051908101604052809291908181526020018280546106c590613406565b80156107125780601f106106e757610100808354040283529160200191610712565b820191906000526020600020905b8154815290600101906020018083116106f557829003601f168201915b505050919092525050508152600782015467ffffffffffffffff1660208083019190915260089092015460409091015290825260019290920191016102f7565b50505050905092915050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146107e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6060600061086e6003610ef7565b9050600061087c6003610f0b565b67ffffffffffffffff81111561089457610894613459565b6040519080825280602002602001820160405280156108cd57816020015b6108ba612af0565b8152602001906001900390816108b25790505b50905060005b8251811015610a4b5760008382815181106108f0576108f0613488565b60209081029190910181015160408051808201825267ffffffffffffffff83168082526000908152600285528290208251815460808188028301810190955260608201818152959750929586019490939192849284919084018282801561097657602002820191906000526020600020905b815481526020019060010190808311610962575b5050509183525050600182015460ff1660208201526002820180546040909201916109a090613406565b80601f01602080910402602001604051908101604052809291908181526020018280546109cc90613406565b8015610a195780601f106109ee57610100808354040283529160200191610a19565b820191906000526020600020905b8154815290600101906020018083116109fc57829003601f168201915b505050505081525050815250838381518110610a3757610a37613488565b6020908102919091010152506001016108d3565b5092915050565b610a5a610f15565b610a6381610f98565b50565b610a6e610f15565b60005b83811015610c5457610ab5858583818110610a8e57610a8e613488565b9050602002016020810190610aa391906134b7565b60039067ffffffffffffffff1661108d565b610b1f57848482818110610acb57610acb613488565b9050602002016020810190610ae091906134b7565b6040517f1bd4d2d200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016107db565b60026000868684818110610b3557610b35613488565b9050602002016020810190610b4a91906134b7565b67ffffffffffffffff1681526020810191909152604001600090812090610b718282612b38565b6001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610ba9600283016000612b56565b5050610be7858583818110610bc057610bc0613488565b9050602002016020810190610bd591906134b7565b60039067ffffffffffffffff166110a5565b507f2a680691fef3b2d105196805935232c661ce703e92d464ef0b94a7bc62d714f0858583818110610c1b57610c1b613488565b9050602002016020810190610c3091906134b7565b60405167ffffffffffffffff909116815260200160405180910390a1600101610a71565b5060005b81811015610e2f576000838383818110610c7457610c74613488565b9050602002810190610c8691906134d2565b610c94906020810190613510565b610c9d90613712565b80519091506000858585818110610cb657610cb6613488565b9050602002810190610cc891906134d2565b610cd69060208101906134b7565b905060005b8251811015610d0e57610d06838281518110610cf957610cf9613488565b60200260200101516110b1565b600101610cdb565b50826020015160ff16600003610d50576040517fa9b3766e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff81166000908152600260209081526040909120845180518693610d80928492910190612b90565b5060208201516001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff90921691909117905560408201516002820190610dcd90826137f9565b50610de791506003905067ffffffffffffffff83166111ca565b507f05dd57854af2c291a94ea52e7c43d80bc3be7fa73022f98b735dea86642fa5e08184604051610e19929190613913565b60405180910390a1505050806001019050610c58565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610ea5576040517fac7a7efd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610eb3848601866139be565b9050600080610ec1836111d6565b8151919350915015610ed957610ed98460008461142f565b805115610eec57610eec8460018361142f565b505050505050505050565b60606000610f0483611c10565b9392505050565b6000610288825490565b60005473ffffffffffffffffffffffffffffffffffffffff163314610f96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107db565b565b3373ffffffffffffffffffffffffffffffffffffffff821603611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107db565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008181526001830160205260408120541515610f04565b6000610f048383611c6c565b6040517f50c946fe000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906350c946fe90602401600060405180830381865afa15801561113f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111859190810190613c2f565b60808101519091506111c6576040517f8907a4fa000000000000000000000000000000000000000000000000000000008152600481018390526024016107db565b5050565b6000610f048383611d5f565b606080600460ff1683511115611218576040517f8854586400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160028082526060820190925290816020015b61129c6040805161014081019091528060008152602001600067ffffffffffffffff168152602001600060ff168152602001600067ffffffffffffffff1681526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b81526020019060019003908161122e57505060408051600280825260608201909252919350602082015b6113346040805161014081019091528060008152602001600067ffffffffffffffff168152602001600060ff168152602001600067ffffffffffffffff1681526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b8152602001906001900390816112c657905050905060008060005b855181101561142257600086828151811061136c5761136c613488565b602002602001015160000151600181111561138957611389612e7e565b036113d6578581815181106113a0576113a0613488565b60200260200101518584815181106113ba576113ba613488565b6020026020010181905250826113cf90613d36565b925061141a565b8581815181106113e8576113e8613488565b602002602001015184838151811061140257611402613488565b60200260200101819052508161141790613d36565b91505b60010161134f565b5090835281529092909150565b63ffffffff831660009081526005602052604081208184600181111561145757611457612e7e565b600181111561146857611468612e7e565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156118f157600084815260209020604080516101a08101909152600984029091018054829060608201908390829060ff1660018111156114db576114db612e7e565b60018111156114ec576114ec612e7e565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a010000000000000000000090910416606082015260018201805460809092019161154490613406565b80601f016020809104026020016040519081016040528092919081815260200182805461157090613406565b80156115bd5780601f10611592576101008083540402835291602001916115bd565b820191906000526020600020905b8154815290600101906020018083116115a057829003601f168201915b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561161557602002820191906000526020600020905b815481526020019060010190808311611601575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561166d57602002820191906000526020600020905b815481526020019060010190808311611659575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156117475783829060005260206000200180546116ba90613406565b80601f01602080910402602001604051908101604052809291908181526020018280546116e690613406565b80156117335780601f1061170857610100808354040283529160200191611733565b820191906000526020600020905b81548152906001019060200180831161171657829003601f168201915b50505050508152602001906001019061169b565b50505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b8282101561182057838290600052602060002001805461179390613406565b80601f01602080910402602001604051908101604052809291908181526020018280546117bf90613406565b801561180c5780601f106117e15761010080835404028352916020019161180c565b820191906000526020600020905b8154815290600101906020018083116117ef57829003601f168201915b505050505081526020019060010190611774565b50505050815260200160068201805461183890613406565b80601f016020809104026020016040519081016040528092919081815260200182805461186490613406565b80156118b15780601f10611886576101008083540402835291602001916118b1565b820191906000526020600020905b81548152906001019060200180831161189457829003601f168201915b505050919092525050508152600782015467ffffffffffffffff166020808301919091526008909201546040909101529082526001929092019101611496565b50505050905060006119038251611dae565b905060006119118451611dae565b905061191d8282611e00565b600061192c8785878686611ebc565b905061193884826122a8565b63ffffffff871660009081526005602052604081209087600181111561196057611960612e7e565b600181111561197157611971612e7e565b8152602001908152602001600020600061198b9190612bdb565b60005b8151811015611c065763ffffffff88166000908152600560205260408120908860018111156119bf576119bf612e7e565b60018111156119d0576119d0612e7e565b81526020019081526020016000208282815181106119f0576119f0613488565b6020908102919091018101518254600181810185556000948552929093208151805160099095029091018054929490939192849283917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016908381811115611a5a57611a5a612e7e565b021790555060208201518154604084015160608501517fffffffffffffffffffffffffffffffffffffffffffff000000000000000000ff90921661010067ffffffffffffffff948516027fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff1617690100000000000000000060ff90921691909102177fffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffff166a0100000000000000000000929091169190910217815560808201516001820190611b2990826137f9565b5060a08201518051611b45916002840191602090910190612b90565b5060c08201518051611b61916003840191602090910190612b90565b5060e08201518051611b7d916004840191602090910190612bfc565b506101008201518051611b9a916005840191602090910190612bfc565b506101208201516006820190611bb090826137f9565b50505060208201516007820180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff90921691909117905560409091015160089091015560010161198e565b5050505050505050565b606081600001805480602002602001604051908101604052809291908181526020018280548015611c6057602002820191906000526020600020905b815481526020019060010190808311611c4c575b50505050509050919050565b60008181526001830160205260408120548015611d55576000611c90600183613d6e565b8554909150600090611ca490600190613d6e565b9050818114611d09576000866000018281548110611cc457611cc4613488565b9060005260206000200154905080876000018481548110611ce757611ce7613488565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611d1a57611d1a613d81565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610288565b6000915050610288565b6000818152600183016020526040812054611da657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610288565b506000610288565b60006002821115611dee576040517f3e478526000000000000000000000000000000000000000000000000000000008152600481018390526024016107db565b81600281111561028857610288612e7e565b6000826002811115611e1457611e14612e7e565b826002811115611e2657611e26612e7e565b611e309190613db0565b90508060011480611e7c5750807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff148015611e7c57506002836002811115611e7a57611e7a612e7e565b145b15611e8657505050565b82826040517f0a6b675b0000000000000000000000000000000000000000000000000000000081526004016107db929190613de0565b60606000845167ffffffffffffffff811115611eda57611eda613459565b604051908082528060200260200182016040528015611f03578160200160208202803683370190505b5090506000846002811115611f1a57611f1a612e7e565b148015611f3857506001836002811115611f3657611f36612e7e565b145b15611f7957600181600081518110611f5257611f52613488565b602002602001019067ffffffffffffffff16908167ffffffffffffffff16815250506120e1565b6001846002811115611f8d57611f8d612e7e565b148015611fab57506002836002811115611fa957611fa9612e7e565b145b156120425785600081518110611fc357611fc3613488565b60200260200101516020015181600081518110611fe257611fe2613488565b602002602001019067ffffffffffffffff16908167ffffffffffffffff16815250508560008151811061201757612017613488565b602002602001015160200151600161202f9190613dfb565b81600181518110611f5257611f52613488565b600284600281111561205657612056612e7e565b1480156120745750600183600281111561207257612072612e7e565b145b156120ab578560018151811061208c5761208c613488565b60200260200101516020015181600081518110611f5257611f52613488565b83836040517f0a6b675b0000000000000000000000000000000000000000000000000000000081526004016107db929190613de0565b6000855167ffffffffffffffff8111156120fd576120fd613459565b6040519080825280602002602001820160405280156121b357816020015b604080516101a081018252600060608083018281526080840183905260a0840183905260c0840183905260e084018290526101008401829052610120840182905261014084018290526101608401829052610180840191909152825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161211b5790505b50905060005b825181101561229c576121e48782815181106121d7576121d7613488565b6020026020010151612627565b604051806060016040528088838151811061220157612201613488565b6020026020010151815260200184838151811061222057612220613488565b602002602001015167ffffffffffffffff1681526020016122748b86858151811061224d5761224d613488565b60200260200101518b868151811061226757612267613488565b6020026020010151612a1b565b81525082828151811061228957612289613488565b60209081029190910101526001016121b9565b50979650505050505050565b81518151811580156122ba5750806001145b1561235c57826000815181106122d2576122d2613488565b60200260200101516020015167ffffffffffffffff16600114612356578260008151811061230257612302613488565b60209081029190910181015101516040517fc1658eb800000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152600160248201526044016107db565b50505050565b81600114801561236c5750806002145b15612522578360008151811061238457612384613488565b602002602001015160400151836000815181106123a3576123a3613488565b6020026020010151604001511461242f57826000815181106123c7576123c7613488565b602002602001015160400151846000815181106123e6576123e6613488565b6020026020010151604001516040517fc7ccdd7f0000000000000000000000000000000000000000000000000000000081526004016107db929190918252602082015260400190565b8360008151811061244257612442613488565b602002602001015160200151600161245a9190613dfb565b67ffffffffffffffff168360018151811061247757612477613488565b60200260200101516020015167ffffffffffffffff161461235657826001815181106124a5576124a5613488565b602002602001015160200151846000815181106124c4576124c4613488565b60200260200101516020015160016124dc9190613dfb565b6040517fc1658eb800000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9283166004820152911660248201526044016107db565b8160021480156125325750806001145b156125f5578360018151811061254a5761254a613488565b6020026020010151604001518360008151811061256957612569613488565b60200260200101516040015114612356578260008151811061258d5761258d613488565b602002602001015160400151846001815181106125ac576125ac613488565b6020026020010151604001516040517f9e9756700000000000000000000000000000000000000000000000000000000081526004016107db929190918252602082015260400190565b6040517f1f1b2bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806020015167ffffffffffffffff1660000361266f576040517f698cf8e000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008151600181111561268457612684612e7e565b141580156126a557506001815160018111156126a2576126a2612e7e565b14155b156126dc576040517f3302dbd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80608001515160000361271b576040517f358c192700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516127369060039067ffffffffffffffff1661108d565b61277e5760208101516040517f1bd4d2d200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016107db565b60e081015151601f10156127be576040517f1b925da600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010081015151601f10156127ff576040517f645960ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015167ffffffffffffffff1660009081526002909152604081206001015461282f9060ff166003613e1c565b61283a906001613e38565b60ff1690508082610100015151101561289157610100820151516040517f548dd21f0000000000000000000000000000000000000000000000000000000081526004810191909152602481018290526044016107db565b816040015160ff166000036128d2576040517f39d1a4d000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516128e2906003613e1c565b60ff168260e001515111612922576040517f4856694e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160e00151518260c00151511415806129465750816101000151518260c001515114155b156129a15760c08201515160e083015151610100840151516040517fba900f6d0000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915260448201526064016107db565b8160c00151518260a001515111156129e5576040517f8473d80700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8260e0015151811015612a1657612a0e8360c001518281518110610cf957610cf9613488565b6001016129e8565b505050565b60008082602001518584600001518560800151878760a001518860c001518960e001518a61010001518b604001518c606001518d6101200151604051602001612a6f9c9b9a99989796959493929190613ebc565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e0a000000000000000000000000000000000000000000000000000000000000179150509392505050565b6040518060400160405280600067ffffffffffffffff168152602001612b33604051806060016040528060608152602001600060ff168152602001606081525090565b905290565b5080546000825590600052602060002090810190610a639190612c4e565b508054612b6290613406565b6000825580601f10612b72575050565b601f016020900490600052602060002090810190610a639190612c4e565b828054828255906000526020600020908101928215612bcb579160200282015b82811115612bcb578251825591602001919060010190612bb0565b50612bd7929150612c4e565b5090565b5080546000825560090290600052602060002090810190610a639190612c63565b828054828255906000526020600020908101928215612c42579160200282015b82811115612c425782518290612c3290826137f9565b5091602001919060010190612c1c565b50612bd7929150612d24565b5b80821115612bd75760008155600101612c4f565b80821115612bd75780547fffffffffffffffffffffffffffff00000000000000000000000000000000000016815560008181612ca26001830182612b56565b612cb0600283016000612b38565b612cbe600383016000612b38565b612ccc600483016000612d41565b612cda600583016000612d41565b612ce8600683016000612b56565b5050506007810180547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016905560006008820155600901612c63565b80821115612bd7576000612d388282612b56565b50600101612d24565b5080546000825590600052602060002090810190610a639190612d24565b600060208284031215612d7157600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f0457600080fd5b6000815180845260005b81811015612dc757602081850181015186830182015201612dab565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610f046020830184612da1565b63ffffffff81168114610a6357600080fd5b8035612e3581612e18565b919050565b803560028110612e3557600080fd5b60008060408385031215612e5c57600080fd5b8235612e6781612e18565b9150612e7560208401612e3a565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028110612ebd57612ebd612e7e565b9052565b60008151808452602080850194506020840160005b83811015612ef257815187529582019590820190600101612ed6565b509495945050505050565b60008282518085526020808601955060208260051b8401016020860160005b84811015612f68577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952612f56838351612da1565b98840198925090830190600101612f1c565b5090979650505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015613144577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815160608151818652612fe38287018251612ead565b898101516080612ffe8189018367ffffffffffffffff169052565b8a830151915060a0613014818a018460ff169052565b938301519360c092506130328984018667ffffffffffffffff169052565b818401519450610140915060e082818b01526130526101a08b0187612da1565b95508185015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0610100818c890301818d01526130918885612ec1565b97508587015195506101209350818c890301848d01526130b18887612ec1565b9750828701519550818c890301858d01526130cc8887612efd565b975080870151955050808b8803016101608c01526130ea8786612efd565b9650828601519550808b8803016101808c0152505050505061310c8282612da1565b915050888201516131288a87018267ffffffffffffffff169052565b5090870151938701939093529386019390860190600101612f9e565b509098975050505050505050565b60006020828403121561316457600080fd5b8135610f0481612e18565b60008151606084526131846060850182612ec1565b905060ff6020840151166020850152604083015184820360408601526131aa8282612da1565b95945050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015613144578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805167ffffffffffffffff1684528701518784018790526132308785018261316f565b95880195935050908601906001016131dc565b60006020828403121561325557600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610f0457600080fd5b60008083601f84011261328b57600080fd5b50813567ffffffffffffffff8111156132a357600080fd5b6020830191508360208260051b85010111156132be57600080fd5b9250929050565b600080600080604085870312156132db57600080fd5b843567ffffffffffffffff808211156132f357600080fd5b6132ff88838901613279565b9096509450602087013591508082111561331857600080fd5b5061332587828801613279565b95989497509550505050565b803567ffffffffffffffff81168114612e3557600080fd5b6000806000806000806080878903121561336257600080fd5b863567ffffffffffffffff8082111561337a57600080fd5b6133868a838b01613279565b9098509650602089013591508082111561339f57600080fd5b818901915089601f8301126133b357600080fd5b8135818111156133c257600080fd5b8a60208285010111156133d457600080fd5b6020830196508095505050506133ec60408801613331565b91506133fa60608801612e2a565b90509295509295509295565b600181811c9082168061341a57607f821691505b602082108103613453577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156134c957600080fd5b610f0482613331565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261350657600080fd5b9190910192915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261350657600080fd5b604051610140810167ffffffffffffffff8111828210171561356857613568613459565b60405290565b60405160e0810167ffffffffffffffff8111828210171561356857613568613459565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156135d8576135d8613459565b604052919050565b600067ffffffffffffffff8211156135fa576135fa613459565b5060051b60200190565b600082601f83011261361557600080fd5b8135602061362a613625836135e0565b613591565b8083825260208201915060208460051b87010193508684111561364c57600080fd5b602086015b848110156136685780358352918301918301613651565b509695505050505050565b803560ff81168114612e3557600080fd5b600082601f83011261369557600080fd5b813567ffffffffffffffff8111156136af576136af613459565b6136e060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613591565b8181528460208386010111156136f557600080fd5b816020850160208301376000918101602001919091529392505050565b60006060823603121561372457600080fd5b6040516060810167ffffffffffffffff828210818311171561374857613748613459565b81604052843591508082111561375d57600080fd5b61376936838701613604565b835261377760208601613673565b6020840152604085013591508082111561379057600080fd5b5061379d36828601613684565b60408301525092915050565b601f821115612a16576000816000526020600020601f850160051c810160208610156137d25750805b601f850160051c820191505b818110156137f1578281556001016137de565b505050505050565b815167ffffffffffffffff81111561381357613813613459565b613827816138218454613406565b846137a9565b602080601f83116001811461387a57600084156138445750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556137f1565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156138c7578886015182559484019460019091019084016138a8565b508582101561390357878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff83168152604060208201526000613936604083018461316f565b949350505050565b600082601f83011261394f57600080fd5b8135602061395f613625836135e0565b82815260059290921b8401810191818101908684111561397e57600080fd5b8286015b8481101561366857803567ffffffffffffffff8111156139a25760008081fd5b6139b08986838b0101613684565b845250918301918301613982565b600060208083850312156139d157600080fd5b823567ffffffffffffffff808211156139e957600080fd5b818501915085601f8301126139fd57600080fd5b8135613a0b613625826135e0565b81815260059190911b83018401908481019088831115613a2a57600080fd5b8585015b83811015613bb857803585811115613a4557600080fd5b8601610140818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215613a7a57600080fd5b613a82613544565b613a8d898301612e3a565b8152613a9b60408301613331565b89820152613aab60608301613673565b6040820152613abc60808301613331565b606082015260a082013587811115613ad357600080fd5b613ae18d8b83860101613684565b60808301525060c082013587811115613af957600080fd5b613b078d8b83860101613604565b60a08301525060e082013587811115613b1f57600080fd5b613b2d8d8b83860101613604565b60c0830152506101008083013588811115613b4757600080fd5b613b558e8c8387010161393e565b60e0840152506101208084013589811115613b6f57600080fd5b613b7d8f8d8388010161393e565b8385015250610140840135915088821115613b9757600080fd5b613ba58e8c84870101613684565b9083015250845250918601918601613a2e565b5098975050505050505050565b8051612e3581612e18565b600082601f830112613be157600080fd5b81516020613bf1613625836135e0565b8083825260208201915060208460051b870101935086841115613c1357600080fd5b602086015b848110156136685780518352918301918301613c18565b600060208284031215613c4157600080fd5b815167ffffffffffffffff80821115613c5957600080fd5b9083019060e08286031215613c6d57600080fd5b613c7561356e565b613c7e83613bc5565b8152613c8c60208401613bc5565b6020820152613c9d60408401613bc5565b6040820152606083015160608201526080830151608082015260a083015182811115613cc857600080fd5b613cd487828601613bd0565b60a08301525060c083015182811115613cec57600080fd5b613cf887828601613bd0565b60c08301525095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d6757613d67613d07565b5060010190565b8181038181111561028857610288613d07565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b8181036000831280158383131683831282161715610a4b57610a4b613d07565b60038110612ebd57612ebd612e7e565b60408101613dee8285613dd0565b610f046020830184613dd0565b67ffffffffffffffff818116838216019080821115610a4b57610a4b613d07565b60ff8181168382160290811690818114610a4b57610a4b613d07565b60ff818116838216019081111561028857610288613d07565b60008282518085526020808601955060208260051b8401016020860160005b84811015612f68577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952613eaa838351612da1565b98840198925090830190600101613e70565b67ffffffffffffffff8d16815263ffffffff8c166020820152613ee2604082018c612ead565b61018060608201526000613efa61018083018c612da1565b67ffffffffffffffff8b16608084015282810360a0840152613f1c818b612ec1565b905082810360c0840152613f30818a612ec1565b905082810360e0840152613f448189613e51565b9050828103610100840152613f598188613e51565b60ff8716610120850152905067ffffffffffffffff8516610140840152828103610160840152613f898185612da1565b9f9e50505050505050505050505050505056fea164736f6c6343000818000a", } @@ -201,25 +201,25 @@ func (_CCIPConfig *CCIPConfigTransactorRaw) Transact(opts *bind.TransactOpts, me return _CCIPConfig.Contract.contract.Transact(opts, method, params...) } -func (_CCIPConfig *CCIPConfigCaller) GetAllChainConfigs(opts *bind.CallOpts) ([]CCIPConfigChainConfigInfo, error) { +func (_CCIPConfig *CCIPConfigCaller) GetAllChainConfigs(opts *bind.CallOpts) ([]TypesChainConfigInfo, error) { var out []interface{} err := _CCIPConfig.contract.Call(opts, &out, "getAllChainConfigs") if err != nil { - return *new([]CCIPConfigChainConfigInfo), err + return *new([]TypesChainConfigInfo), err } - out0 := *abi.ConvertType(out[0], new([]CCIPConfigChainConfigInfo)).(*[]CCIPConfigChainConfigInfo) + out0 := *abi.ConvertType(out[0], new([]TypesChainConfigInfo)).(*[]TypesChainConfigInfo) return out0, err } -func (_CCIPConfig *CCIPConfigSession) GetAllChainConfigs() ([]CCIPConfigChainConfigInfo, error) { +func (_CCIPConfig *CCIPConfigSession) GetAllChainConfigs() ([]TypesChainConfigInfo, error) { return _CCIPConfig.Contract.GetAllChainConfigs(&_CCIPConfig.CallOpts) } -func (_CCIPConfig *CCIPConfigCallerSession) GetAllChainConfigs() ([]CCIPConfigChainConfigInfo, error) { +func (_CCIPConfig *CCIPConfigCallerSession) GetAllChainConfigs() ([]TypesChainConfigInfo, error) { return _CCIPConfig.Contract.GetAllChainConfigs(&_CCIPConfig.CallOpts) } @@ -245,25 +245,25 @@ func (_CCIPConfig *CCIPConfigCallerSession) GetCapabilityConfiguration(arg0 uint return _CCIPConfig.Contract.GetCapabilityConfiguration(&_CCIPConfig.CallOpts, arg0) } -func (_CCIPConfig *CCIPConfigCaller) GetOCRConfig(opts *bind.CallOpts, donId uint32, pluginType uint8) ([]CCIPConfigOCR3ConfigWithMeta, error) { +func (_CCIPConfig *CCIPConfigCaller) GetOCRConfig(opts *bind.CallOpts, donId uint32, pluginType uint8) ([]TypesOCR3ConfigWithMeta, error) { var out []interface{} err := _CCIPConfig.contract.Call(opts, &out, "getOCRConfig", donId, pluginType) if err != nil { - return *new([]CCIPConfigOCR3ConfigWithMeta), err + return *new([]TypesOCR3ConfigWithMeta), err } - out0 := *abi.ConvertType(out[0], new([]CCIPConfigOCR3ConfigWithMeta)).(*[]CCIPConfigOCR3ConfigWithMeta) + out0 := *abi.ConvertType(out[0], new([]TypesOCR3ConfigWithMeta)).(*[]TypesOCR3ConfigWithMeta) return out0, err } -func (_CCIPConfig *CCIPConfigSession) GetOCRConfig(donId uint32, pluginType uint8) ([]CCIPConfigOCR3ConfigWithMeta, error) { +func (_CCIPConfig *CCIPConfigSession) GetOCRConfig(donId uint32, pluginType uint8) ([]TypesOCR3ConfigWithMeta, error) { return _CCIPConfig.Contract.GetOCRConfig(&_CCIPConfig.CallOpts, donId, pluginType) } -func (_CCIPConfig *CCIPConfigCallerSession) GetOCRConfig(donId uint32, pluginType uint8) ([]CCIPConfigOCR3ConfigWithMeta, error) { +func (_CCIPConfig *CCIPConfigCallerSession) GetOCRConfig(donId uint32, pluginType uint8) ([]TypesOCR3ConfigWithMeta, error) { return _CCIPConfig.Contract.GetOCRConfig(&_CCIPConfig.CallOpts, donId, pluginType) } @@ -345,15 +345,15 @@ func (_CCIPConfig *CCIPConfigTransactorSession) AcceptOwnership() (*types.Transa return _CCIPConfig.Contract.AcceptOwnership(&_CCIPConfig.TransactOpts) } -func (_CCIPConfig *CCIPConfigTransactor) ApplyChainConfigUpdates(opts *bind.TransactOpts, chainSelectorRemoves []uint64, chainConfigAdds []CCIPConfigChainConfigInfo) (*types.Transaction, error) { +func (_CCIPConfig *CCIPConfigTransactor) ApplyChainConfigUpdates(opts *bind.TransactOpts, chainSelectorRemoves []uint64, chainConfigAdds []TypesChainConfigInfo) (*types.Transaction, error) { return _CCIPConfig.contract.Transact(opts, "applyChainConfigUpdates", chainSelectorRemoves, chainConfigAdds) } -func (_CCIPConfig *CCIPConfigSession) ApplyChainConfigUpdates(chainSelectorRemoves []uint64, chainConfigAdds []CCIPConfigChainConfigInfo) (*types.Transaction, error) { +func (_CCIPConfig *CCIPConfigSession) ApplyChainConfigUpdates(chainSelectorRemoves []uint64, chainConfigAdds []TypesChainConfigInfo) (*types.Transaction, error) { return _CCIPConfig.Contract.ApplyChainConfigUpdates(&_CCIPConfig.TransactOpts, chainSelectorRemoves, chainConfigAdds) } -func (_CCIPConfig *CCIPConfigTransactorSession) ApplyChainConfigUpdates(chainSelectorRemoves []uint64, chainConfigAdds []CCIPConfigChainConfigInfo) (*types.Transaction, error) { +func (_CCIPConfig *CCIPConfigTransactorSession) ApplyChainConfigUpdates(chainSelectorRemoves []uint64, chainConfigAdds []TypesChainConfigInfo) (*types.Transaction, error) { return _CCIPConfig.Contract.ApplyChainConfigUpdates(&_CCIPConfig.TransactOpts, chainSelectorRemoves, chainConfigAdds) } @@ -676,7 +676,7 @@ func (it *CCIPConfigChainConfigSetIterator) Close() error { type CCIPConfigChainConfigSet struct { ChainSelector uint64 - ChainConfig CCIPConfigChainConfig + ChainConfig TypesChainConfig Raw types.Log } @@ -1047,11 +1047,11 @@ func (_CCIPConfig *CCIPConfig) Address() common.Address { } type CCIPConfigInterface interface { - GetAllChainConfigs(opts *bind.CallOpts) ([]CCIPConfigChainConfigInfo, error) + GetAllChainConfigs(opts *bind.CallOpts) ([]TypesChainConfigInfo, error) GetCapabilityConfiguration(opts *bind.CallOpts, arg0 uint32) ([]byte, error) - GetOCRConfig(opts *bind.CallOpts, donId uint32, pluginType uint8) ([]CCIPConfigOCR3ConfigWithMeta, error) + GetOCRConfig(opts *bind.CallOpts, donId uint32, pluginType uint8) ([]TypesOCR3ConfigWithMeta, error) Owner(opts *bind.CallOpts) (common.Address, error) @@ -1061,7 +1061,7 @@ type CCIPConfigInterface interface { AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) - ApplyChainConfigUpdates(opts *bind.TransactOpts, chainSelectorRemoves []uint64, chainConfigAdds []CCIPConfigChainConfigInfo) (*types.Transaction, error) + ApplyChainConfigUpdates(opts *bind.TransactOpts, chainSelectorRemoves []uint64, chainConfigAdds []TypesChainConfigInfo) (*types.Transaction, error) BeforeCapabilityConfigSet(opts *bind.TransactOpts, arg0 [][32]byte, config []byte, arg2 uint64, donId uint32) (*types.Transaction, error) diff --git a/core/gethwrappers/ccip/generated/ocr3_config_encoder/ocr3_config_encoder.go b/core/gethwrappers/ccip/generated/ocr3_config_encoder/ocr3_config_encoder.go index 6d20515a0f..49d9ae2cce 100644 --- a/core/gethwrappers/ccip/generated/ocr3_config_encoder/ocr3_config_encoder.go +++ b/core/gethwrappers/ccip/generated/ocr3_config_encoder/ocr3_config_encoder.go @@ -28,7 +28,7 @@ var ( _ = abi.ConvertType ) -type IOCR3ConfigEncoderOCR3Config struct { +type TypesOCR3Config struct { PluginType uint8 ChainSelector uint64 F uint8 @@ -42,7 +42,7 @@ type IOCR3ConfigEncoderOCR3Config struct { } var IOCR3ConfigEncoderMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"enumIOCR3ConfigEncoder.PluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"bootstrapP2PIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"p2pIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signers\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"transmitters\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structIOCR3ConfigEncoder.OCR3Config[]\",\"name\":\"config\",\"type\":\"tuple[]\"}],\"name\":\"exposeOCR3Config\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"bootstrapP2PIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"p2pIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signers\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"transmitters\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structTypes.OCR3Config[]\",\"name\":\"config\",\"type\":\"tuple[]\"}],\"name\":\"exposeOCR3Config\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", } var IOCR3ConfigEncoderABI = IOCR3ConfigEncoderMetaData.ABI @@ -163,7 +163,7 @@ func (_IOCR3ConfigEncoder *IOCR3ConfigEncoderTransactorRaw) Transact(opts *bind. return _IOCR3ConfigEncoder.Contract.contract.Transact(opts, method, params...) } -func (_IOCR3ConfigEncoder *IOCR3ConfigEncoderCaller) ExposeOCR3Config(opts *bind.CallOpts, config []IOCR3ConfigEncoderOCR3Config) ([]byte, error) { +func (_IOCR3ConfigEncoder *IOCR3ConfigEncoderCaller) ExposeOCR3Config(opts *bind.CallOpts, config []TypesOCR3Config) ([]byte, error) { var out []interface{} err := _IOCR3ConfigEncoder.contract.Call(opts, &out, "exposeOCR3Config", config) @@ -177,11 +177,11 @@ func (_IOCR3ConfigEncoder *IOCR3ConfigEncoderCaller) ExposeOCR3Config(opts *bind } -func (_IOCR3ConfigEncoder *IOCR3ConfigEncoderSession) ExposeOCR3Config(config []IOCR3ConfigEncoderOCR3Config) ([]byte, error) { +func (_IOCR3ConfigEncoder *IOCR3ConfigEncoderSession) ExposeOCR3Config(config []TypesOCR3Config) ([]byte, error) { return _IOCR3ConfigEncoder.Contract.ExposeOCR3Config(&_IOCR3ConfigEncoder.CallOpts, config) } -func (_IOCR3ConfigEncoder *IOCR3ConfigEncoderCallerSession) ExposeOCR3Config(config []IOCR3ConfigEncoderOCR3Config) ([]byte, error) { +func (_IOCR3ConfigEncoder *IOCR3ConfigEncoderCallerSession) ExposeOCR3Config(config []TypesOCR3Config) ([]byte, error) { return _IOCR3ConfigEncoder.Contract.ExposeOCR3Config(&_IOCR3ConfigEncoder.CallOpts, config) } @@ -190,7 +190,7 @@ func (_IOCR3ConfigEncoder *IOCR3ConfigEncoder) Address() common.Address { } type IOCR3ConfigEncoderInterface interface { - ExposeOCR3Config(opts *bind.CallOpts, config []IOCR3ConfigEncoderOCR3Config) ([]byte, error) + ExposeOCR3Config(opts *bind.CallOpts, config []TypesOCR3Config) ([]byte, error) Address() common.Address } diff --git a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt index 811484f047..f339da7cb7 100644 --- a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -5,7 +5,7 @@ burn_from_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnFromMintTokenPool burn_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnMintTokenPool/BurnMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnMintTokenPool/BurnMintTokenPool.bin fee3f82935ce7a26c65e12f19a472a4fccdae62755abdb42d8b0a01f0f06981a burn_mint_token_pool_and_proxy: ../../../contracts/solc/v0.8.24/BurnMintTokenPoolAndProxy/BurnMintTokenPoolAndProxy.abi ../../../contracts/solc/v0.8.24/BurnMintTokenPoolAndProxy/BurnMintTokenPoolAndProxy.bin c7efa00d2be62a97a814730c8e13aa70794ebfdd38a9f3b3c11554a5dfd70478 burn_with_from_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.bin a0728e186af74968101135a58a483320ced9ab79b22b1b24ac6994254ee79097 -ccip_config: ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.abi ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.bin ef9e1f61b288bc31dda1c4e9d0bb8885b7b0bf1fe35bf74af8b12568e7532010 +ccip_config: ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.abi ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.bin 6e61e622f1b084bb4a55eeb9f91cc2f6e35651d1c439aa934c70a9b6e0e9c899 commit_store: ../../../contracts/solc/v0.8.24/CommitStore/CommitStore.abi ../../../contracts/solc/v0.8.24/CommitStore/CommitStore.bin ddc26c10c2a52b59624faae9005827b09b98db4566887a736005e8cc37cf8a51 commit_store_helper: ../../../contracts/solc/v0.8.24/CommitStoreHelper/CommitStoreHelper.abi ../../../contracts/solc/v0.8.24/CommitStoreHelper/CommitStoreHelper.bin ebd8aac686fa28a71d4212bcd25a28f8f640d50dce5e50498b2f6b8534890b69 ether_sender_receiver: ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.abi ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.bin 09510a3f773f108a3c231e8d202835c845ded862d071ec54c4f89c12d868b8de @@ -22,7 +22,7 @@ mock_usdc_token_transmitter: ../../../contracts/solc/v0.8.24/MockE2EUSDCTransmit mock_v3_aggregator_contract: ../../../contracts/solc/v0.8.24/MockV3Aggregator/MockV3Aggregator.abi ../../../contracts/solc/v0.8.24/MockV3Aggregator/MockV3Aggregator.bin 518e19efa2ff52b0fefd8e597b05765317ee7638189bfe34ca43de2f6599faf4 multi_aggregate_rate_limiter: ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.abi ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.bin abb0ecb1ed8621f26e43b39f5fa25f3d0b6d6c184fa37c404c4389605ecb74e7 nonce_manager: ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.abi ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.bin cdc11c1ab4c1c3fd77f30215e9c579404a6e60eb9adc213d73ca0773c3bb5784 -ocr3_config_encoder: ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.abi ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.bin 2aaea8030cc441c22e10397d06660e6936a82a3f84812e9c638fc465e40c371a +ocr3_config_encoder: ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.abi ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.bin 76c15fb2277645b2c09d83dcc15dfaeeff64550764de769e929cb34233c7e164 ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin 1588313bb5e781d181a825247d30828f59007700f36b4b9b00391592b06ff4b4 price_registry: ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.abi ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.bin 0b3e253684d7085aa11f9179b71453b9db9d11cabea41605d5b4ac4128f85bfb registry_module_owner_custom: ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.abi ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.bin cbe7698bfd811b485ac3856daf073a7bdebeefdf2583403ca4a19d5b7e2d4ae8