{"file_path":"src/v0.8/data-feeds/BundleAggregatorProxy.sol","creation_status":"success","source_code":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.26;\n\nimport {ConfirmedOwner} from \"../shared/access/ConfirmedOwner.sol\";\nimport {ITypeAndVersion} from \"../shared/interfaces/ITypeAndVersion.sol\";\nimport {IBundleAggregator} from \"./interfaces/IBundleAggregator.sol\";\nimport {IBundleAggregatorProxy} from \"./interfaces/IBundleAggregatorProxy.sol\";\n\n/// @title A trusted proxy for updating where current answers are read from\n/// @notice This contract provides a consistent address for the\n/// CurrentAnswerInterface but delegates where it reads from to the owner, who is\n/// trusted to update it.\ncontract BundleAggregatorProxy is IBundleAggregatorProxy, ITypeAndVersion, ConfirmedOwner {\n  string public constant override typeAndVersion = \"BundleAggregatorProxy 1.0.0\";\n\n  IBundleAggregator private s_currentAggregator;\n  IBundleAggregator private s_proposedAggregator;\n\n  event AggregatorProposed(address indexed current, address indexed proposed);\n  event AggregatorConfirmed(address indexed previous, address indexed latest);\n\n  error AggregatorNotProposed(address aggregator);\n\n  constructor(address aggregatorAddress, address owner) ConfirmedOwner(owner) {\n    s_currentAggregator = IBundleAggregator(aggregatorAddress);\n  }\n\n  function latestBundle() external view returns (bytes memory bundle) {\n    return s_currentAggregator.latestBundle();\n  }\n\n  function latestBundleTimestamp() external view returns (uint256 timestamp) {\n    return s_currentAggregator.latestBundleTimestamp();\n  }\n\n  /// @notice returns the current aggregator address.\n  function aggregator() external view returns (address) {\n    return address(s_currentAggregator);\n  }\n\n  /// @notice represents the number of decimals the aggregator responses represent.\n  function bundleDecimals() external view override returns (uint8[] memory decimals) {\n    return s_currentAggregator.bundleDecimals();\n  }\n\n  /// @notice the version number representing the type of aggregator the proxy\n  /// points to.\n  function version() external view override returns (uint256 aggregatorVersion) {\n    return s_currentAggregator.version();\n  }\n\n  /// @notice returns the description of the aggregator the proxy points to.\n  function description() external view returns (string memory aggregatorDescription) {\n    return s_currentAggregator.description();\n  }\n\n  /// @notice returns the current proposed aggregator\n  function proposedAggregator() external view returns (address proposedAggregatorAddress) {\n    return address(s_proposedAggregator);\n  }\n\n  /// @notice Allows the owner to propose a new address for the aggregator\n  /// @param aggregatorAddress The new address for the aggregator contract\n  function proposeAggregator(\n    address aggregatorAddress\n  ) external onlyOwner {\n    s_proposedAggregator = IBundleAggregator(aggregatorAddress);\n    emit AggregatorProposed(address(s_currentAggregator), aggregatorAddress);\n  }\n\n  /// @notice Allows the owner to confirm and change the address\n  /// to the proposed aggregator\n  /// @dev Reverts if the given address doesn't match what was previously proposed\n  /// @param aggregatorAddress The new address for the aggregator contract\n  function confirmAggregator(\n    address aggregatorAddress\n  ) external onlyOwner {\n    if (aggregatorAddress != address(s_proposedAggregator)) {\n      revert AggregatorNotProposed(aggregatorAddress);\n    }\n    address previousAggregator = address(s_currentAggregator);\n    delete s_proposedAggregator;\n    s_currentAggregator = IBundleAggregator(aggregatorAddress);\n    emit AggregatorConfirmed(previousAggregator, aggregatorAddress);\n  }\n}\n","deployed_bytecode":"0x608060405234801561001057600080fd5b50600436106100df5760003560e01c80639198274f1161008c578063a928c09611610066578063a928c096146101e0578063e8c4be30146101f3578063f2fde38b14610211578063f8a2abd31461022457600080fd5b80639198274f146101bb5780639d91348d146101c3578063a3d610cc146101d857600080fd5b80637284e416116100bd5780637284e4161461018b57806379ba5097146101935780638da5cb5b1461019d57600080fd5b8063181f5a77146100e4578063245a7bfc1461013657806354fd4d5014610175575b600080fd5b6101206040518060400160405280601b81526020017f42756e646c6541676772656761746f7250726f787920312e302e30000000000081525081565b60405161012d919061098e565b60405180910390f35b60025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161012d565b61017d610237565b60405190815260200161012d565b6101206102d0565b61019b610386565b005b60005473ffffffffffffffffffffffffffffffffffffffff16610150565b610120610488565b6101cb6104f8565b60405161012d91906109a8565b61017d6105ae565b61019b6101ee3660046109ee565b61061e565b60035473ffffffffffffffffffffffffffffffffffffffff16610150565b61019b61021f3660046109ee565b610715565b61019b6102323660046109ee565b610729565b600254604080517f54fd4d50000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916354fd4d509160048083019260209291908290030181865afa1580156102a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102cb9190610a24565b905090565b600254604080517f7284e416000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff1691637284e4169160048083019260009291908290030181865afa158015610340573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526102cb9190810190610b2c565b60015473ffffffffffffffffffffffffffffffffffffffff16331461040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b600254604080517f9198274f000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff1691639198274f9160048083019260009291908290030181865afa158015610340573d6000803e3d6000fd5b600254604080517f9d91348d000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff1691639d91348d9160048083019260009291908290030181865afa158015610568573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526102cb9190810190610b7d565b600254604080517fa3d610cc000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163a3d610cc9160048083019260209291908290030181865afa1580156102a7573d6000803e3d6000fd5b6106266107a8565b60035473ffffffffffffffffffffffffffffffffffffffff828116911614610692576040517feb61b92800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610403565b60028054600380547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff8481169183168217909355604051929091169182907f33745f67a407dcb785417f9c123dd3641479a102674b6e35c1f10975625b90e990600090a35050565b61071d6107a8565b6107268161082b565b50565b6107316107a8565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217909255600254604051919216907fc0f151710f03d713b71d9970cee0d5b11ddc9a7552abaa3f6ee818010f21600d90600090a350565b60005473ffffffffffffffffffffffffffffffffffffffff163314610829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610403565b565b3373ffffffffffffffffffffffffffffffffffffffff8216036108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610403565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60005b8381101561093b578181015183820152602001610923565b50506000910152565b6000815180845261095c816020860160208601610920565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006109a16020830184610944565b9392505050565b602080825282518282018190526000918401906040840190835b818110156109e357835160ff168352602093840193909201916001016109c2565b509095945050505050565b600060208284031215610a0057600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146109a157600080fd5b600060208284031215610a3657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610ab357610ab3610a3d565b604052919050565b60008067ffffffffffffffff841115610ad657610ad6610a3d565b50601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016602001610b0981610a6c565b915050828152838383011115610b1e57600080fd5b6109a1836020830184610920565b600060208284031215610b3e57600080fd5b815167ffffffffffffffff811115610b5557600080fd5b8201601f81018413610b6657600080fd5b610b7584825160208401610abb565b949350505050565b600060208284031215610b8f57600080fd5b815167ffffffffffffffff811115610ba657600080fd5b8201601f81018413610bb757600080fd5b805167ffffffffffffffff811115610bd157610bd1610a3d565b8060051b610be160208201610a6c565b91825260208184018101929081019087841115610bfd57600080fd5b6020850194505b83851015610c31578451925060ff83168314610c1f57600080fd5b82825260209485019490910190610c04565b97965050505050505056fea164736f6c634300081a000a","optimization_enabled":true,"verified_twin_address_hash":null,"is_verified":true,"compiler_settings":{"evmVersion":"paris","libraries":{},"metadata":{"appendCBOR":true,"bytecodeHash":"none","useLiteralContent":false},"optimizer":{"enabled":true,"runs":10000},"outputSelection":{"*":{"":["*"],"*":["*"]}},"remappings":["forge-std/=src/v0.8/vendor/forge-std/src/","@openzeppelin/=node_modules/@openzeppelin/","@arbitrum/=node_modules/@arbitrum/","hardhat/=node_modules/hardhat/","@eth-optimism/=node_modules/@eth-optimism/","@scroll-tech/=node_modules/@scroll-tech/","@zksync/=node_modules/@zksync/"],"viaIR":false},"optimization_runs":10000,"sourcify_repo_url":null,"decoded_constructor_args":[["0x16B53825C8ceAEA593507274D4C1AAEC9E261433",{"internalType":"address","name":"aggregatorAddress","type":"address"}],["0x0C67F08a8C97C08599A0A9BD01a1F22E8c637795",{"internalType":"address","name":"owner","type":"address"}]],"compiler_version":"v0.8.26+commit.8a97fa7a","is_verified_via_verifier_alliance":false,"verified_at":"2026-04-26T14:13:08.789435Z","implementations":[],"proxy_type":null,"external_libraries":[],"creation_bytecode":"0x608060405234801561001057600080fd5b50604051610e39380380610e3983398101604081905261002f916101ae565b808060006001600160a01b03821661008e5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b03848116919091179091558116156100be576100be816100e9565b5050600280546001600160a01b0319166001600160a01b039490941693909317909255506101e19050565b336001600160a01b038216036101415760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610085565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b03811681146101a957600080fd5b919050565b600080604083850312156101c157600080fd5b6101ca83610192565b91506101d860208401610192565b90509250929050565b610c49806101f06000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80639198274f1161008c578063a928c09611610066578063a928c096146101e0578063e8c4be30146101f3578063f2fde38b14610211578063f8a2abd31461022457600080fd5b80639198274f146101bb5780639d91348d146101c3578063a3d610cc146101d857600080fd5b80637284e416116100bd5780637284e4161461018b57806379ba5097146101935780638da5cb5b1461019d57600080fd5b8063181f5a77146100e4578063245a7bfc1461013657806354fd4d5014610175575b600080fd5b6101206040518060400160405280601b81526020017f42756e646c6541676772656761746f7250726f787920312e302e30000000000081525081565b60405161012d919061098e565b60405180910390f35b60025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161012d565b61017d610237565b60405190815260200161012d565b6101206102d0565b61019b610386565b005b60005473ffffffffffffffffffffffffffffffffffffffff16610150565b610120610488565b6101cb6104f8565b60405161012d91906109a8565b61017d6105ae565b61019b6101ee3660046109ee565b61061e565b60035473ffffffffffffffffffffffffffffffffffffffff16610150565b61019b61021f3660046109ee565b610715565b61019b6102323660046109ee565b610729565b600254604080517f54fd4d50000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916354fd4d509160048083019260209291908290030181865afa1580156102a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102cb9190610a24565b905090565b600254604080517f7284e416000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff1691637284e4169160048083019260009291908290030181865afa158015610340573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526102cb9190810190610b2c565b60015473ffffffffffffffffffffffffffffffffffffffff16331461040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b600254604080517f9198274f000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff1691639198274f9160048083019260009291908290030181865afa158015610340573d6000803e3d6000fd5b600254604080517f9d91348d000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff1691639d91348d9160048083019260009291908290030181865afa158015610568573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526102cb9190810190610b7d565b600254604080517fa3d610cc000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163a3d610cc9160048083019260209291908290030181865afa1580156102a7573d6000803e3d6000fd5b6106266107a8565b60035473ffffffffffffffffffffffffffffffffffffffff828116911614610692576040517feb61b92800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610403565b60028054600380547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff8481169183168217909355604051929091169182907f33745f67a407dcb785417f9c123dd3641479a102674b6e35c1f10975625b90e990600090a35050565b61071d6107a8565b6107268161082b565b50565b6107316107a8565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217909255600254604051919216907fc0f151710f03d713b71d9970cee0d5b11ddc9a7552abaa3f6ee818010f21600d90600090a350565b60005473ffffffffffffffffffffffffffffffffffffffff163314610829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610403565b565b3373ffffffffffffffffffffffffffffffffffffffff8216036108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610403565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60005b8381101561093b578181015183820152602001610923565b50506000910152565b6000815180845261095c816020860160208601610920565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006109a16020830184610944565b9392505050565b602080825282518282018190526000918401906040840190835b818110156109e357835160ff168352602093840193909201916001016109c2565b509095945050505050565b600060208284031215610a0057600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146109a157600080fd5b600060208284031215610a3657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610ab357610ab3610a3d565b604052919050565b60008067ffffffffffffffff841115610ad657610ad6610a3d565b50601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016602001610b0981610a6c565b915050828152838383011115610b1e57600080fd5b6109a1836020830184610920565b600060208284031215610b3e57600080fd5b815167ffffffffffffffff811115610b5557600080fd5b8201601f81018413610b6657600080fd5b610b7584825160208401610abb565b949350505050565b600060208284031215610b8f57600080fd5b815167ffffffffffffffff811115610ba657600080fd5b8201601f81018413610bb757600080fd5b805167ffffffffffffffff811115610bd157610bd1610a3d565b8060051b610be160208201610a6c565b91825260208184018101929081019087841115610bfd57600080fd5b6020850194505b83851015610c31578451925060ff83168314610c1f57600080fd5b82825260209485019490910190610c04565b97965050505050505056fea164736f6c634300081a000a00000000000000000000000016b53825c8ceaea593507274d4c1aaec9e2614330000000000000000000000000c67f08a8c97c08599a0a9bd01a1f22e8c637795","name":"BundleAggregatorProxy","is_blueprint":false,"license_type":"none","is_fully_verified":false,"is_verified_via_eth_bytecode_db":true,"language":"solidity","evm_version":"paris","can_be_visualized_via_sol2uml":true,"is_verified_via_sourcify":false,"additional_sources":[{"file_path":"src/v0.8/data-feeds/interfaces/IBundleAggregator.sol","source_code":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\nimport {IBundleBaseAggregator} from \"./IBundleBaseAggregator.sol\";\nimport {ICommonAggregator} from \"./ICommonAggregator.sol\";\n\ninterface IBundleAggregator is IBundleBaseAggregator, ICommonAggregator {}\n"},{"file_path":"src/v0.8/data-feeds/interfaces/IBundleAggregatorProxy.sol","source_code":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\nimport {IBundleBaseAggregator} from \"./IBundleBaseAggregator.sol\";\nimport {ICommonAggregator} from \"./ICommonAggregator.sol\";\n\ninterface IBundleAggregatorProxy is IBundleBaseAggregator, ICommonAggregator {\n  function proposedAggregator() external view returns (address);\n\n  function confirmAggregator(\n    address aggregatorAddress\n  ) external;\n\n  function aggregator() external view returns (address);\n}\n"},{"file_path":"src/v0.8/data-feeds/interfaces/IBundleBaseAggregator.sol","source_code":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\ninterface IBundleBaseAggregator {\n  function latestBundle() external view returns (bytes memory bundle);\n\n  function bundleDecimals() external view returns (uint8[] memory);\n\n  function latestBundleTimestamp() external view returns (uint256);\n}\n"},{"file_path":"src/v0.8/data-feeds/interfaces/ICommonAggregator.sol","source_code":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\ninterface ICommonAggregator {\n  function description() external view returns (string memory);\n\n  function version() external view returns (uint256);\n}\n"},{"file_path":"src/v0.8/shared/access/ConfirmedOwner.sol","source_code":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {ConfirmedOwnerWithProposal} from \"./ConfirmedOwnerWithProposal.sol\";\n\n/// @title The ConfirmedOwner contract\n/// @notice A contract with helpers for basic contract ownership.\ncontract ConfirmedOwner is ConfirmedOwnerWithProposal {\n  constructor(\n    address newOwner\n  ) ConfirmedOwnerWithProposal(newOwner, address(0)) {}\n}\n"},{"file_path":"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol","source_code":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IOwnable} from \"../interfaces/IOwnable.sol\";\n\n/// @title The ConfirmedOwner contract\n/// @notice A contract with helpers for basic contract ownership.\ncontract ConfirmedOwnerWithProposal is IOwnable {\n  address private s_owner;\n  address private s_pendingOwner;\n\n  event OwnershipTransferRequested(address indexed from, address indexed to);\n  event OwnershipTransferred(address indexed from, address indexed to);\n\n  constructor(address newOwner, address pendingOwner) {\n    // solhint-disable-next-line gas-custom-errors\n    require(newOwner != address(0), \"Cannot set owner to zero\");\n\n    s_owner = newOwner;\n    if (pendingOwner != address(0)) {\n      _transferOwnership(pendingOwner);\n    }\n  }\n\n  /// @notice Allows an owner to begin transferring ownership to a new address.\n  function transferOwnership(\n    address to\n  ) public override onlyOwner {\n    _transferOwnership(to);\n  }\n\n  /// @notice Allows an ownership transfer to be completed by the recipient.\n  function acceptOwnership() external override {\n    // solhint-disable-next-line gas-custom-errors\n    require(msg.sender == s_pendingOwner, \"Must be proposed owner\");\n\n    address oldOwner = s_owner;\n    s_owner = msg.sender;\n    s_pendingOwner = address(0);\n\n    emit OwnershipTransferred(oldOwner, msg.sender);\n  }\n\n  /// @notice Get the current owner\n  function owner() public view override returns (address) {\n    return s_owner;\n  }\n\n  /// @notice validate, transfer ownership, and emit relevant events\n  function _transferOwnership(\n    address to\n  ) private {\n    // solhint-disable-next-line gas-custom-errors\n    require(to != msg.sender, \"Cannot transfer to self\");\n\n    s_pendingOwner = to;\n\n    emit OwnershipTransferRequested(s_owner, to);\n  }\n\n  /// @notice validate access\n  function _validateOwnership() internal view {\n    // solhint-disable-next-line gas-custom-errors\n    require(msg.sender == s_owner, \"Only callable by owner\");\n  }\n\n  /// @notice Reverts if called by anyone other than the contract owner.\n  modifier onlyOwner() {\n    _validateOwnership();\n    _;\n  }\n}\n"},{"file_path":"src/v0.8/shared/interfaces/IOwnable.sol","source_code":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IOwnable {\n  function owner() external returns (address);\n\n  function transferOwnership(\n    address recipient\n  ) external;\n\n  function acceptOwnership() external;\n}\n"},{"file_path":"src/v0.8/shared/interfaces/ITypeAndVersion.sol","source_code":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface ITypeAndVersion {\n  function typeAndVersion() external pure returns (string memory);\n}\n"}],"certified":false,"conflicting_implementations":null,"abi":[{"inputs":[{"internalType":"address","name":"aggregatorAddress","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"aggregator","type":"address"}],"name":"AggregatorNotProposed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"latest","type":"address"}],"name":"AggregatorConfirmed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"current","type":"address"},{"indexed":true,"internalType":"address","name":"proposed","type":"address"}],"name":"AggregatorProposed","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":[],"name":"aggregator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bundleDecimals","outputs":[{"internalType":"uint8[]","name":"decimals","type":"uint8[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"aggregatorAddress","type":"address"}],"name":"confirmAggregator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"aggregatorDescription","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestBundle","outputs":[{"internalType":"bytes","name":"bundle","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestBundleTimestamp","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"aggregatorAddress","type":"address"}],"name":"proposeAggregator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposedAggregator","outputs":[{"internalType":"address","name":"proposedAggregatorAddress","type":"address"}],"stateMutability":"view","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"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"aggregatorVersion","type":"uint256"}],"stateMutability":"view","type":"function"}],"is_changed_bytecode":false,"is_partially_verified":true,"constructor_args":"00000000000000000000000016b53825c8ceaea593507274d4c1aaec9e2614330000000000000000000000000c67f08a8c97c08599a0a9bd01a1f22e8c637795"}