Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- DapiProxy
- Optimization enabled
- true
- Compiler version
- v0.8.17+commit.8df45f5f
- Optimization runs
- 1000
- EVM Version
- default
- Verified at
- 2024-05-27T14:42:35.757586Z
Constructor Arguments
0x0000000000000000000000001b127098d19a3d6a0417560fd7df2b927fafd9339e6138f8f57d7b493a8364edb0a0ac92399dfd890eecb9121050836a1749ba42
Arg [0] (address) : 0x1b127098d19a3d6a0417560fd7df2b927fafd933
Arg [1] (bytes32) : 9e6138f8f57d7b493a8364edb0a0ac92399dfd890eecb9121050836a1749ba42
contracts/api3-server-v1/proxies/DapiProxy.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./interfaces/IDapiProxy.sol"; import "../interfaces/IApi3ServerV1.sol"; /// @title An immutable proxy contract that is used to read a specific dAPI of /// a specific Api3ServerV1 contract /// @notice In an effort to reduce the bytecode of this contract, its /// constructor arguments are validated by ProxyFactory, rather than /// internally. If you intend to deploy this contract without using /// ProxyFactory, you are recommended to implement an equivalent validation. /// @dev The proxy contracts are generalized to support most types of numerical /// data feeds. This means that the user of this proxy is expected to validate /// the read values according to the specific use-case. For example, `value` is /// a signed integer, yet it being negative may not make sense in the case that /// the data feed represents the spot price of an asset. In that case, the user /// is responsible with ensuring that `value` is not negative. /// In the case that the data feed is from a single source, `timestamp` is the /// system time of the Airnode when it signed the data. In the case that the /// data feed is from multiple sources, `timestamp` is the median of system /// times of the Airnodes when they signed the respective data. There are two /// points to consider while using `timestamp` in your contract logic: (1) It /// is based on the system time of the Airnodes, and not the block timestamp. /// This may be relevant when either of them drifts. (2) `timestamp` is an /// off-chain value that is being reported, similar to `value`. Both should /// only be trusted as much as the Airnode(s) that report them. contract DapiProxy is IDapiProxy { /// @notice Api3ServerV1 address address public immutable override api3ServerV1; /// @notice Hash of the dAPI name bytes32 public immutable override dapiNameHash; /// @param _api3ServerV1 Api3ServerV1 address /// @param _dapiNameHash Hash of the dAPI name constructor(address _api3ServerV1, bytes32 _dapiNameHash) { api3ServerV1 = _api3ServerV1; dapiNameHash = _dapiNameHash; } /// @notice Reads the dAPI that this proxy maps to /// @return value dAPI value /// @return timestamp dAPI timestamp function read() external view virtual override returns (int224 value, uint32 timestamp) { (value, timestamp) = IApi3ServerV1(api3ServerV1) .readDataFeedWithDapiNameHash(dapiNameHash); } }
contracts/access/interfaces/IAccessControlRegistryAdminned.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../../utils/interfaces/ISelfMulticall.sol"; interface IAccessControlRegistryAdminned is ISelfMulticall { function accessControlRegistry() external view returns (address); function adminRoleDescription() external view returns (string memory); }
contracts/access/interfaces/IAccessControlRegistryAdminnedWithManager.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IAccessControlRegistryAdminned.sol"; interface IAccessControlRegistryAdminnedWithManager is IAccessControlRegistryAdminned { function manager() external view returns (address); function adminRole() external view returns (bytes32); }
contracts/api3-server-v1/interfaces/IApi3ServerV1.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IOevDapiServer.sol"; import "./IBeaconUpdatesWithSignedData.sol"; interface IApi3ServerV1 is IOevDapiServer, IBeaconUpdatesWithSignedData { function readDataFeedWithId( bytes32 dataFeedId ) external view returns (int224 value, uint32 timestamp); function readDataFeedWithDapiNameHash( bytes32 dapiNameHash ) external view returns (int224 value, uint32 timestamp); function readDataFeedWithIdAsOevProxy( bytes32 dataFeedId ) external view returns (int224 value, uint32 timestamp); function readDataFeedWithDapiNameHashAsOevProxy( bytes32 dapiNameHash ) external view returns (int224 value, uint32 timestamp); function dataFeeds( bytes32 dataFeedId ) external view returns (int224 value, uint32 timestamp); function oevProxyToIdToDataFeed( address proxy, bytes32 dataFeedId ) external view returns (int224 value, uint32 timestamp); }
contracts/api3-server-v1/interfaces/IBeaconUpdatesWithSignedData.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IDataFeedServer.sol"; interface IBeaconUpdatesWithSignedData is IDataFeedServer { function updateBeaconWithSignedData( address airnode, bytes32 templateId, uint256 timestamp, bytes calldata data, bytes calldata signature ) external returns (bytes32 beaconId); }
contracts/api3-server-v1/interfaces/IDapiServer.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../../access/interfaces/IAccessControlRegistryAdminnedWithManager.sol"; import "./IDataFeedServer.sol"; interface IDapiServer is IAccessControlRegistryAdminnedWithManager, IDataFeedServer { event SetDapiName( bytes32 indexed dataFeedId, bytes32 indexed dapiName, address sender ); function setDapiName(bytes32 dapiName, bytes32 dataFeedId) external; function dapiNameToDataFeedId( bytes32 dapiName ) external view returns (bytes32); // solhint-disable-next-line func-name-mixedcase function DAPI_NAME_SETTER_ROLE_DESCRIPTION() external view returns (string memory); function dapiNameSetterRole() external view returns (bytes32); function dapiNameHashToDataFeedId( bytes32 dapiNameHash ) external view returns (bytes32 dataFeedId); }
contracts/api3-server-v1/interfaces/IDataFeedServer.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../../utils/interfaces/IExtendedSelfMulticall.sol"; interface IDataFeedServer is IExtendedSelfMulticall { event UpdatedBeaconWithSignedData( bytes32 indexed beaconId, int224 value, uint32 timestamp ); event UpdatedBeaconSetWithBeacons( bytes32 indexed beaconSetId, int224 value, uint32 timestamp ); function updateBeaconSetWithBeacons( bytes32[] memory beaconIds ) external returns (bytes32 beaconSetId); }
contracts/api3-server-v1/interfaces/IOevDapiServer.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IOevDataFeedServer.sol"; import "./IDapiServer.sol"; interface IOevDapiServer is IOevDataFeedServer, IDapiServer {}
contracts/api3-server-v1/interfaces/IOevDataFeedServer.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IDataFeedServer.sol"; interface IOevDataFeedServer is IDataFeedServer { event UpdatedOevProxyBeaconWithSignedData( bytes32 indexed beaconId, address indexed proxy, bytes32 indexed updateId, int224 value, uint32 timestamp ); event UpdatedOevProxyBeaconSetWithSignedData( bytes32 indexed beaconSetId, address indexed proxy, bytes32 indexed updateId, int224 value, uint32 timestamp ); event Withdrew( address indexed oevProxy, address oevBeneficiary, uint256 amount ); function updateOevProxyDataFeedWithSignedData( address oevProxy, bytes32 dataFeedId, bytes32 updateId, uint256 timestamp, bytes calldata data, bytes[] calldata packedOevUpdateSignatures ) external payable; function withdraw(address oevProxy) external; function oevProxyToBalance( address oevProxy ) external view returns (uint256 balance); }
contracts/api3-server-v1/proxies/interfaces/IDapiProxy.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IProxy.sol"; interface IDapiProxy is IProxy { function dapiNameHash() external view returns (bytes32); }
contracts/api3-server-v1/proxies/interfaces/IProxy.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /// @dev See DapiProxy.sol for comments about usage interface IProxy { function read() external view returns (int224 value, uint32 timestamp); function api3ServerV1() external view returns (address); }
contracts/utils/interfaces/IExtendedSelfMulticall.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ISelfMulticall.sol"; interface IExtendedSelfMulticall is ISelfMulticall { function getChainId() external view returns (uint256); function getBalance(address account) external view returns (uint256); function containsBytecode(address account) external view returns (bool); function getBlockNumber() external view returns (uint256); function getBlockTimestamp() external view returns (uint256); function getBlockBasefee() external view returns (uint256); }
contracts/utils/interfaces/ISelfMulticall.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface ISelfMulticall { function multicall( bytes[] calldata data ) external returns (bytes[] memory returndata); function tryMulticall( bytes[] calldata data ) external returns (bool[] memory successes, bytes[] memory returndata); }
Compiler Settings
{"outputSelection":{"*":{"*":["*"],"":["*"]}},"optimizer":{"runs":1000,"enabled":true},"metadata":{"useLiteralContent":true},"libraries":{}}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_api3ServerV1","internalType":"address"},{"type":"bytes32","name":"_dapiNameHash","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"api3ServerV1","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"dapiNameHash","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"int224","name":"value","internalType":"int224"},{"type":"uint32","name":"timestamp","internalType":"uint32"}],"name":"read","inputs":[]}]
Contract Creation Code
0x60c060405234801561001057600080fd5b506040516102fd3803806102fd83398101604081905261002f91610045565b6001600160a01b0390911660805260a05261007f565b6000806040838503121561005857600080fd5b82516001600160a01b038116811461006f57600080fd5b6020939093015192949293505050565b60805160a05161024d6100b06000396000818160c3015261011b015260008181604b015261015b015261024d6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80632d6a744e1461004657806357de26a414610097578063dcf8da92146100be575b600080fd5b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61009f6100f3565b60408051601b9390930b835263ffffffff90911660208301520161008e565b6100e57f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161008e565b6040517fb62408a30000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b62408a3906024016040805180830381865afa1580156101a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c591906101ce565b90939092509050565b600080604083850312156101e157600080fd5b825180601b0b81146101f257600080fd5b602084015190925063ffffffff8116811461020c57600080fd5b80915050925092905056fea26469706673582212201d061d50f160b049953a990ae61794869544bc65e5a0d25812e444c431cb90f964736f6c634300081100330000000000000000000000001b127098d19a3d6a0417560fd7df2b927fafd9339e6138f8f57d7b493a8364edb0a0ac92399dfd890eecb9121050836a1749ba42
Deployed ByteCode
0x608060405234801561001057600080fd5b50600436106100415760003560e01c80632d6a744e1461004657806357de26a414610097578063dcf8da92146100be575b600080fd5b61006d7f0000000000000000000000001b127098d19a3d6a0417560fd7df2b927fafd93381565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61009f6100f3565b60408051601b9390930b835263ffffffff90911660208301520161008e565b6100e57f9e6138f8f57d7b493a8364edb0a0ac92399dfd890eecb9121050836a1749ba4281565b60405190815260200161008e565b6040517fb62408a30000000000000000000000000000000000000000000000000000000081527f9e6138f8f57d7b493a8364edb0a0ac92399dfd890eecb9121050836a1749ba426004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001b127098d19a3d6a0417560fd7df2b927fafd933169063b62408a3906024016040805180830381865afa1580156101a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c591906101ce565b90939092509050565b600080604083850312156101e157600080fd5b825180601b0b81146101f257600080fd5b602084015190925063ffffffff8116811461020c57600080fd5b80915050925092905056fea26469706673582212201d061d50f160b049953a990ae61794869544bc65e5a0d25812e444c431cb90f964736f6c63430008110033