Source Code
Overview
CELO Balance
More Info
ContractCreator
Multichain Info
N/A
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | Amount | ||
|---|---|---|---|---|---|---|
| 12007279 | 30 secs ago | 0 CELO | ||||
| 12007279 | 30 secs ago | 0 CELO | ||||
| 12007277 | 32 secs ago | 0 CELO | ||||
| 12007277 | 32 secs ago | 0 CELO | ||||
| 12007217 | 1 min ago | 0 CELO | ||||
| 12007217 | 1 min ago | 0 CELO | ||||
| 12007217 | 1 min ago | 0 CELO | ||||
| 12007217 | 1 min ago | 0 CELO | ||||
| 12007161 | 2 mins ago | 0 CELO | ||||
| 12007161 | 2 mins ago | 0 CELO | ||||
| 12007157 | 2 mins ago | 0 CELO | ||||
| 12007157 | 2 mins ago | 0 CELO | ||||
| 12007097 | 3 mins ago | 0 CELO | ||||
| 12007097 | 3 mins ago | 0 CELO | ||||
| 12007096 | 3 mins ago | 0 CELO | ||||
| 12007096 | 3 mins ago | 0 CELO | ||||
| 12007050 | 4 mins ago | 0 CELO | ||||
| 12007050 | 4 mins ago | 0 CELO | ||||
| 12007050 | 4 mins ago | 0 CELO | ||||
| 12007050 | 4 mins ago | 0 CELO | ||||
| 12006981 | 5 mins ago | 0 CELO | ||||
| 12006981 | 5 mins ago | 0 CELO | ||||
| 12006976 | 5 mins ago | 0 CELO | ||||
| 12006976 | 5 mins ago | 0 CELO | ||||
| 12006917 | 6 mins ago | 0 CELO |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
MockChainlinkAggregator
Compiler Version
v0.8.30+commit.73712a01
Optimization Enabled:
Yes with 200 runs
Other Settings:
prague EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8;
import {Ownable} from "lib/openzeppelin-contracts/contracts/access/Ownable.sol";
contract MockChainlinkAggregator is Ownable {
string public description;
uint8 public decimals;
int256 public savedAnswer;
uint256 public lastUpdated;
// An external address that can set the answer and lastUpdated of the aggregator
// Used to run an off-chain script that fetches mainnet chainlink data and relays it to Alfajores
address public externalProvider;
modifier onlyOwnerOrExternalProvider() {
require(
msg.sender == owner() || msg.sender == externalProvider,
"Only owner or external provider can call this function"
);
_;
}
constructor(
string memory _description,
uint8 _decimals,
address _initialOwner
) Ownable(_initialOwner) {
description = _description;
decimals = _decimals;
}
function setExternalProvider(address _externalProvider) external onlyOwner {
externalProvider = _externalProvider;
}
function setDecimals(uint8 _decimals) external onlyOwner {
decimals = _decimals;
}
function setAnswer(int256 _answer) external onlyOwnerOrExternalProvider {
savedAnswer = _answer;
}
function setLastUpdated(
uint256 _lastUpdated
) external onlyOwnerOrExternalProvider {
lastUpdated = _lastUpdated;
}
function report(
int256 _answer,
uint256 _lastUpdated
) external onlyOwnerOrExternalProvider {
savedAnswer = _answer;
lastUpdated = _lastUpdated;
}
function latestRoundData()
external
view
returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
)
{
return (
uint80(0),
savedAnswer,
uint256(0),
block.timestamp - 5,
uint80(0)
);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. This can
* later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}{
"remappings": [
"src/=src/",
"@celo/=lib/mento-core/node_modules/@celo/contracts/",
"@chainlink/contracts/=lib/mento-core/lib/foundry-chainlink-toolkit/lib/chainlink-brownie-contracts/contracts/src/",
"@ds/=lib/mento-router/lib/multicall/lib/ds-test/src/",
"@openzeppelin/=lib/mento-core/lib/foundry-chainlink-toolkit/lib/openzeppelin-contracts/",
"@prb/test/=lib/mento-core/lib/prb-math/lib/prb-test/src/",
"@std/=lib/mento-router/lib/multicall/lib/forge-std/src/",
"BokkyPooBahsDateTimeLibrary/=lib/mento-core/lib/BokkyPooBahsDateTimeLibrary/",
"celo/=lib/mento-core/node_modules/@celo/",
"chainlink-brownie-contracts/=lib/mento-core/lib/foundry-chainlink-toolkit/lib/chainlink-brownie-contracts/contracts/src/v0.6/vendor/@arbitrum/nitro-contracts/src/",
"contracts/=lib/mento-core/contracts/",
"createx-forge/=lib/treb-sol/lib/createx-forge/",
"ds-test/=lib/mento-router/lib/multicall/lib/ds-test/src/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"foundry-chainlink-toolkit/=lib/mento-core/lib/foundry-chainlink-toolkit/",
"halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
"mento-core/=lib/mento-core/contracts/",
"mento-router/=lib/mento-router/",
"mento-std/=lib/mento-std/src/",
"multicall/=lib/mento-router/lib/multicall/src/",
"openzeppelin-contracts-next/=lib/mento-core/lib/openzeppelin-contracts-next/",
"openzeppelin-contracts-upgradeable/=lib/mento-core/lib/openzeppelin-contracts-upgradeable/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"openzeppelin-solidity/=lib/mento-core/lib/openzeppelin-contracts/",
"prb-math/=lib/mento-core/lib/prb-math/src/",
"prb-test/=lib/mento-core/lib/prb-math/lib/prb-test/src/",
"prb/math/=lib/mento-core/lib/prb-math/src/",
"safe-contracts/=lib/mento-core/lib/safe-contracts/",
"safe-smart-account/=lib/treb-sol/lib/safe-utils/lib/safe-smart-account/",
"safe-utils/=lib/treb-sol/lib/safe-utils/src/",
"solidity-http/=lib/treb-sol/lib/safe-utils/lib/solidity-http/src/",
"solidity-stringutils/=lib/treb-sol/lib/safe-utils/lib/solidity-stringutils/",
"test/=lib/mento-core/test/",
"treb-sol/=lib/treb-sol/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "prague",
"viaIR": false
}Contract ABI
API[{"inputs":[{"internalType":"string","name":"_description","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"address","name":"_initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"externalProvider","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"_answer","type":"int256"},{"internalType":"uint256","name":"_lastUpdated","type":"uint256"}],"name":"report","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"savedAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"_answer","type":"int256"}],"name":"setAnswer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_decimals","type":"uint8"}],"name":"setDecimals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_externalProvider","type":"address"}],"name":"setExternalProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lastUpdated","type":"uint256"}],"name":"setLastUpdated","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561000f575f5ffd5b506040516109b03803806109b083398101604081905261002e9161011c565b806001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6100658161008e565b5060016100728482610270565b50506002805460ff191660ff929092169190911790555061032a565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b5f52604160045260245ffd5b805160ff81168114610101575f5ffd5b919050565b80516001600160a01b0381168114610101575f5ffd5b5f5f5f6060848603121561012e575f5ffd5b83516001600160401b03811115610143575f5ffd5b8401601f81018613610153575f5ffd5b80516001600160401b0381111561016c5761016c6100dd565b604051601f8201601f19908116603f011681016001600160401b038111828210171561019a5761019a6100dd565b6040528181528282016020018810156101b1575f5ffd5b8160208401602083015e5f602083830101528095505050506101d5602085016100f1565b91506101e360408501610106565b90509250925092565b600181811c9082168061020057607f821691505b60208210810361021e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561026b57805f5260205f20601f840160051c810160208510156102495750805b601f840160051c820191505b81811015610268575f8155600101610255565b50505b505050565b81516001600160401b03811115610289576102896100dd565b61029d8161029784546101ec565b84610224565b6020601f8211600181146102cf575f83156102b85750848201515b5f19600385901b1c1916600184901b178455610268565b5f84815260208120601f198516915b828110156102fe57878501518255602094850194600190920191016102de565b508482101561031b57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b610679806103375f395ff3fe608060405234801561000f575f5ffd5b50600436106100e5575f3560e01c80638da5cb5b11610088578063e1e244d811610063578063e1e244d8146101ca578063e3ac8226146101d3578063f2fde38b146101e6578063feaf968c146101f9575f5ffd5b80638da5cb5b1461019057806399213cd8146101a0578063d0b06f5d146101b3575f5ffd5b8063705b9154116100c3578063705b915414610135578063715018a6146101605780637284e416146101685780637a1395aa1461017d575f5ffd5b80630f3d249d146100e9578063313ce567146100fe578063368f186214610122575b5f5ffd5b6100fc6100f73660046104d7565b610238565b005b60025461010b9060ff1681565b60405160ff90911681526020015b60405180910390f35b6100fc6101303660046104f7565b61028a565b600554610148906001600160a01b031681565b6040516001600160a01b039091168152602001610119565b6100fc6102cd565b6101706102e0565b604051610119919061050e565b6100fc61018b366004610543565b61036c565b5f546001600160a01b0316610148565b6100fc6101ae3660046104f7565b61038a565b6101bc60045481565b604051908152602001610119565b6101bc60035481565b6100fc6101e136600461056a565b6103cd565b6100fc6101f436600461056a565b6103f7565b610201610434565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610119565b5f546001600160a01b031633148061025a57506005546001600160a01b031633145b61027f5760405162461bcd60e51b815260040161027690610590565b60405180910390fd5b600391909155600455565b5f546001600160a01b03163314806102ac57506005546001600160a01b031633145b6102c85760405162461bcd60e51b815260040161027690610590565b600455565b6102d561045c565b6102de5f610488565b565b600180546102ed906105e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906105e6565b80156103645780601f1061033b57610100808354040283529160200191610364565b820191905f5260205f20905b81548152906001019060200180831161034757829003601f168201915b505050505081565b61037461045c565b6002805460ff191660ff92909216919091179055565b5f546001600160a01b03163314806103ac57506005546001600160a01b031633145b6103c85760405162461bcd60e51b815260040161027690610590565b600355565b6103d561045c565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6103ff61045c565b6001600160a01b03811661042857604051631e4fbdf760e01b81525f6004820152602401610276565b61043181610488565b50565b5f5f5f5f5f5f6003545f60054261044b919061061e565b929891975095509093505f92509050565b5f546001600160a01b031633146102de5760405163118cdaa760e01b8152336004820152602401610276565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5f604083850312156104e8575f5ffd5b50508035926020909101359150565b5f60208284031215610507575f5ffd5b5035919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215610553575f5ffd5b813560ff81168114610563575f5ffd5b9392505050565b5f6020828403121561057a575f5ffd5b81356001600160a01b0381168114610563575f5ffd5b60208082526036908201527f4f6e6c79206f776e6572206f722065787465726e616c2070726f76696465722060408201527531b0b71031b0b636103a3434b990333ab731ba34b7b760511b606082015260800190565b600181811c908216806105fa57607f821691505b60208210810361061857634e487b7160e01b5f52602260045260245ffd5b50919050565b8181038181111561063d57634e487b7160e01b5f52601160045260245ffd5b9291505056fea2646970667358221220fa19a60dd9e63bbbb5d399bec11ca1c6b1bd44c06454d32f905c5ce9b5291c7864736f6c634300081e00330000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000800000000000000000000000056fd3f2bee130e9867942d0f463a16fbe49b8d810000000000000000000000000000000000000000000000000000000000000006434f505553440000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561000f575f5ffd5b50600436106100e5575f3560e01c80638da5cb5b11610088578063e1e244d811610063578063e1e244d8146101ca578063e3ac8226146101d3578063f2fde38b146101e6578063feaf968c146101f9575f5ffd5b80638da5cb5b1461019057806399213cd8146101a0578063d0b06f5d146101b3575f5ffd5b8063705b9154116100c3578063705b915414610135578063715018a6146101605780637284e416146101685780637a1395aa1461017d575f5ffd5b80630f3d249d146100e9578063313ce567146100fe578063368f186214610122575b5f5ffd5b6100fc6100f73660046104d7565b610238565b005b60025461010b9060ff1681565b60405160ff90911681526020015b60405180910390f35b6100fc6101303660046104f7565b61028a565b600554610148906001600160a01b031681565b6040516001600160a01b039091168152602001610119565b6100fc6102cd565b6101706102e0565b604051610119919061050e565b6100fc61018b366004610543565b61036c565b5f546001600160a01b0316610148565b6100fc6101ae3660046104f7565b61038a565b6101bc60045481565b604051908152602001610119565b6101bc60035481565b6100fc6101e136600461056a565b6103cd565b6100fc6101f436600461056a565b6103f7565b610201610434565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610119565b5f546001600160a01b031633148061025a57506005546001600160a01b031633145b61027f5760405162461bcd60e51b815260040161027690610590565b60405180910390fd5b600391909155600455565b5f546001600160a01b03163314806102ac57506005546001600160a01b031633145b6102c85760405162461bcd60e51b815260040161027690610590565b600455565b6102d561045c565b6102de5f610488565b565b600180546102ed906105e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906105e6565b80156103645780601f1061033b57610100808354040283529160200191610364565b820191905f5260205f20905b81548152906001019060200180831161034757829003601f168201915b505050505081565b61037461045c565b6002805460ff191660ff92909216919091179055565b5f546001600160a01b03163314806103ac57506005546001600160a01b031633145b6103c85760405162461bcd60e51b815260040161027690610590565b600355565b6103d561045c565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6103ff61045c565b6001600160a01b03811661042857604051631e4fbdf760e01b81525f6004820152602401610276565b61043181610488565b50565b5f5f5f5f5f5f6003545f60054261044b919061061e565b929891975095509093505f92509050565b5f546001600160a01b031633146102de5760405163118cdaa760e01b8152336004820152602401610276565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5f604083850312156104e8575f5ffd5b50508035926020909101359150565b5f60208284031215610507575f5ffd5b5035919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215610553575f5ffd5b813560ff81168114610563575f5ffd5b9392505050565b5f6020828403121561057a575f5ffd5b81356001600160a01b0381168114610563575f5ffd5b60208082526036908201527f4f6e6c79206f776e6572206f722065787465726e616c2070726f76696465722060408201527531b0b71031b0b636103a3434b990333ab731ba34b7b760511b606082015260800190565b600181811c908216806105fa57607f821691505b60208210810361061857634e487b7160e01b5f52602260045260245ffd5b50919050565b8181038181111561063d57634e487b7160e01b5f52601160045260245ffd5b9291505056fea2646970667358221220fa19a60dd9e63bbbb5d399bec11ca1c6b1bd44c06454d32f905c5ce9b5291c7864736f6c634300081e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000800000000000000000000000056fd3f2bee130e9867942d0f463a16fbe49b8d810000000000000000000000000000000000000000000000000000000000000006434f505553440000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _description (string): COPUSD
Arg [1] : _decimals (uint8): 8
Arg [2] : _initialOwner (address): 0x56fD3F2bEE130e9867942D0F463a16fBE49B8d81
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [2] : 00000000000000000000000056fd3f2bee130e9867942d0f463a16fbe49b8d81
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [4] : 434f505553440000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.