Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 175 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Update Oracle | 22264601 | 2 days ago | IN | 0 ETH | 0.00070966 | ||||
Swap Exact Input | 22237494 | 6 days ago | IN | 0 ETH | 0.00039289 | ||||
Update Oracle | 22204122 | 11 days ago | IN | 0 ETH | 0.00071096 | ||||
Swap Exact Input | 22168845 | 16 days ago | IN | 0 ETH | 0.00108142 | ||||
Swap Exact Input | 22161380 | 17 days ago | IN | 0 ETH | 0.0009999 | ||||
Update Oracle | 22112938 | 23 days ago | IN | 0 ETH | 0.00069312 | ||||
Swap Exact Input | 22088985 | 27 days ago | IN | 0 ETH | 0.00119491 | ||||
Swap Exact Input | 22088836 | 27 days ago | IN | 0 ETH | 0.00120182 | ||||
Update Oracle | 22057417 | 31 days ago | IN | 0 ETH | 0.00071836 | ||||
Swap Exact Input | 22039305 | 34 days ago | IN | 0 ETH | 0.00111657 | ||||
Swap Exact Input | 22031548 | 35 days ago | IN | 0 ETH | 0.00052635 | ||||
Swap Exact Input | 22030950 | 35 days ago | IN | 0 ETH | 0.00048358 | ||||
Update Oracle | 21987911 | 41 days ago | IN | 0 ETH | 0.00095494 | ||||
Swap Exact Input | 21923055 | 50 days ago | IN | 0 ETH | 0.00157332 | ||||
Update Oracle | 21912668 | 51 days ago | IN | 0 ETH | 0.00079068 | ||||
Swap Exact Input | 21866706 | 58 days ago | IN | 0 ETH | 0.04104172 | ||||
Update Oracle | 21862595 | 58 days ago | IN | 0 ETH | 0.00078571 | ||||
Swap Exact Input | 21861055 | 59 days ago | IN | 0 ETH | 0.00110557 | ||||
Swap Exact Input | 21858081 | 59 days ago | IN | 0 ETH | 0.00103349 | ||||
Swap Exact Input | 21852729 | 60 days ago | IN | 0 ETH | 0.00106829 | ||||
Swap Exact Input | 21847682 | 60 days ago | IN | 0 ETH | 0.00112335 | ||||
Swap Exact Input | 21822250 | 64 days ago | IN | 0 ETH | 0.00110213 | ||||
Swap Exact Input | 21795093 | 68 days ago | IN | 0 ETH | 0.00080822 | ||||
Swap Exact Input | 21794494 | 68 days ago | IN | 0 ETH | 0.00043274 | ||||
Swap Exact Input | 21793900 | 68 days ago | IN | 0 ETH | 0.00048951 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
0x60806040 | 18976170 | 462 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
DiamondProxy
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 1000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.19; import { LibDiamond } from "./libraries/LibDiamond.sol"; import { LibStorage as s } from "./libraries/LibStorage.sol"; import "../utils/Errors.sol"; import "./Storage.sol"; /// @title DiamondProxy /// @author Angle Labs, Inc. /// @notice Implementation of a Diamond Proxy /// @dev Reference: EIP-2535 Diamonds /// @dev Forked from https://github.com/mudgen/diamond-3/blob/master/contracts/Diamond.sol by mudgen contract DiamondProxy { constructor(FacetCut[] memory _diamondCut, address _init, bytes memory _calldata) payable { LibDiamond.diamondCut(_diamondCut, _init, _calldata); } /*////////////////////////////////////////////////////////////////////////////////////////////////////////////////// FALLBACK //////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/ /// @dev 1. Find the facet for the function that is called. /// @dev 2. Delegate the execution to the found facet via `delegatecall`. fallback() external payable { DiamondStorage storage ds = s.diamondStorage(); // Get facet from function selector address facetAddress = ds.selectorInfo[msg.sig].facetAddress; if (facetAddress == address(0)) { revert FunctionNotFound(msg.sig); } assembly { // The pointer to the free memory slot let ptr := mload(0x40) // Copy function signature and arguments from calldata at zero position into memory at pointer position calldatacopy(ptr, 0, calldatasize()) // Delegatecall method of the implementation contract returns 0 on error let result := delegatecall(gas(), facetAddress, ptr, calldatasize(), 0, 0) // Get the size of the last return data let size := returndatasize() // Copy the size length of bytes from return data at zero position to pointer position returndatacopy(ptr, 0, size) // Depending on the result value switch result case 0 { // End execution and revert state changes revert(ptr, size) } default { // Return data with length of size at pointers position return(ptr, size) } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import { LibStorage as s } from "./LibStorage.sol"; import "../../utils/Errors.sol"; import "../Storage.sol"; /// @title LibDiamond /// @author Angle Labs, Inc. /// @notice Helper library to deal with diamond proxies. /// @dev Reference: EIP-2535 Diamonds /// @dev Forked from https://github.com/mudgen/diamond-3/blob/master/contracts/libraries/LibDiamond.sol by mudgen library LibDiamond { event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata); /*////////////////////////////////////////////////////////////////////////////////////////////////////////////////// INTERNAL FUNCTIONS //////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/ /// @notice Checks whether `admin` has the governor role function isGovernor(address admin) internal view returns (bool) { return s.diamondStorage().accessControlManager.isGovernor(admin); } /// @notice Checks whether `admin` has the guardian role function isGovernorOrGuardian(address admin) internal view returns (bool) { return s.diamondStorage().accessControlManager.isGovernorOrGuardian(admin); } /// @notice Internal function version of `diamondCut` function diamondCut(FacetCut[] memory _diamondCut, address _init, bytes memory _calldata) internal { uint256 diamondCutLength = _diamondCut.length; for (uint256 facetIndex; facetIndex < diamondCutLength; facetIndex++) { bytes4[] memory functionSelectors = _diamondCut[facetIndex].functionSelectors; address facetAddress = _diamondCut[facetIndex].facetAddress; if (functionSelectors.length == 0) { revert NoSelectorsProvidedForFacetForCut(facetAddress); } FacetCutAction action = _diamondCut[facetIndex].action; if (action == FacetCutAction.Add) { _addFunctions(facetAddress, functionSelectors); } else if (action == FacetCutAction.Replace) { _replaceFunctions(facetAddress, functionSelectors); } else if (action == FacetCutAction.Remove) { _removeFunctions(facetAddress, functionSelectors); } } emit DiamondCut(_diamondCut, _init, _calldata); _initializeDiamondCut(_init, _calldata); } /*////////////////////////////////////////////////////////////////////////////////////////////////////////////////// PRIVATE FUNCTIONS //////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/ /// @notice Does a delegate call on `_init` with `_calldata` function _initializeDiamondCut(address _init, bytes memory _calldata) private { if (_init == address(0)) { return; } _enforceHasContractCode(_init); (bool success, bytes memory error) = _init.delegatecall(_calldata); if (!success) { if (error.length > 0) { assembly { let returndata_size := mload(error) revert(add(32, error), returndata_size) } } else { revert InitializationFunctionReverted(_init, _calldata); } } } /// @notice Adds a new function to the diamond proxy /// @dev Reverts if selectors are already existing function _addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) private { if (_facetAddress == address(0)) { revert CannotAddSelectorsToZeroAddress(_functionSelectors); } DiamondStorage storage ds = s.diamondStorage(); uint16 selectorCount = uint16(ds.selectors.length); _enforceHasContractCode(_facetAddress); uint256 functionSelectorsLength = _functionSelectors.length; for (uint256 selectorIndex; selectorIndex < functionSelectorsLength; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorInfo[selector].facetAddress; if (oldFacetAddress != address(0)) { revert CannotAddFunctionToDiamondThatAlreadyExists(selector); } ds.selectorInfo[selector] = FacetInfo(_facetAddress, selectorCount); ds.selectors.push(selector); selectorCount++; } } /// @notice Upgrades a function in the diamond proxy /// @dev Reverts if selectors do not already exist function _replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) private { DiamondStorage storage ds = s.diamondStorage(); if (_facetAddress == address(0)) { revert CannotReplaceFunctionsFromFacetWithZeroAddress(_functionSelectors); } _enforceHasContractCode(_facetAddress); uint256 functionSelectorsLength = _functionSelectors.length; for (uint256 selectorIndex; selectorIndex < functionSelectorsLength; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorInfo[selector].facetAddress; // Can't replace immutable functions -- functions defined directly in the diamond in this case if (oldFacetAddress == address(this)) { revert CannotReplaceImmutableFunction(selector); } if (oldFacetAddress == _facetAddress) { revert CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet(selector); } if (oldFacetAddress == address(0)) { revert CannotReplaceFunctionThatDoesNotExists(selector); } // Replace old facet address ds.selectorInfo[selector].facetAddress = _facetAddress; } } /// @notice Removes a function in the diamond proxy /// @dev Reverts if selectors do not already exist function _removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) private { DiamondStorage storage ds = s.diamondStorage(); uint256 selectorCount = ds.selectors.length; if (_facetAddress != address(0)) { revert RemoveFacetAddressMustBeZeroAddress(_facetAddress); } uint256 functionSelectorsLength = _functionSelectors.length; for (uint256 selectorIndex; selectorIndex < functionSelectorsLength; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; FacetInfo memory oldFacetAddressAndSelectorPosition = ds.selectorInfo[selector]; if (oldFacetAddressAndSelectorPosition.facetAddress == address(0)) { revert CannotRemoveFunctionThatDoesNotExist(selector); } // Can't remove immutable functions -- functions defined directly in the diamond if (oldFacetAddressAndSelectorPosition.facetAddress == address(this)) { revert CannotRemoveImmutableFunction(selector); } // Replace selector with last selector selectorCount--; if (oldFacetAddressAndSelectorPosition.selectorPosition != selectorCount) { bytes4 lastSelector = ds.selectors[selectorCount]; ds.selectors[oldFacetAddressAndSelectorPosition.selectorPosition] = lastSelector; ds.selectorInfo[lastSelector].selectorPosition = oldFacetAddressAndSelectorPosition.selectorPosition; } // Delete last selector ds.selectors.pop(); delete ds.selectorInfo[selector]; } } /// @notice Checks that an address has a non void bytecode function _enforceHasContractCode(address _contract) private view { uint256 contractSize; assembly { contractSize := extcodesize(_contract) } if (contractSize == 0) { revert ContractHasNoCode(); } } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.19; import "../../utils/Constants.sol"; import { DiamondStorage, ImplementationStorage, TransmuterStorage } from "../Storage.sol"; /// @title LibStorage /// @author Angle Labs, Inc. library LibStorage { /// @notice Returns the storage struct stored at the `DIAMOND_STORAGE_POSITION` slot /// @dev This struct handles the logic of the different facets used in the diamond proxy function diamondStorage() internal pure returns (DiamondStorage storage ds) { bytes32 position = DIAMOND_STORAGE_POSITION; assembly { ds.slot := position } } /// @notice Returns the storage struct stored at the `TRANSMUTER_STORAGE_POSITION` slot /// @dev This struct handles the particular logic of the Transmuter system function transmuterStorage() internal pure returns (TransmuterStorage storage ts) { bytes32 position = TRANSMUTER_STORAGE_POSITION; assembly { ts.slot := position } } /// @notice Returns the storage struct stored at the `IMPLEMENTATION_STORAGE_POSITION` slot /// @dev This struct handles the logic for making the contract easily usable on Etherscan function implementationStorage() internal pure returns (ImplementationStorage storage ims) { bytes32 position = IMPLEMENTATION_STORAGE_POSITION; assembly { ims.slot := position } } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.19; error AlreadyAdded(); error CannotAddFunctionToDiamondThatAlreadyExists(bytes4 _selector); error CannotAddSelectorsToZeroAddress(bytes4[] _selectors); error CannotRemoveFunctionThatDoesNotExist(bytes4 _selector); error CannotRemoveImmutableFunction(bytes4 _selector); error CannotReplaceFunctionsFromFacetWithZeroAddress(bytes4[] _selectors); error CannotReplaceFunctionThatDoesNotExists(bytes4 _selector); error CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet(bytes4 _selector); error CannotReplaceImmutableFunction(bytes4 _selector); error ContractHasNoCode(); error FunctionNotFound(bytes4 _functionSelector); error IncorrectFacetCutAction(uint8 _action); error InitializationFunctionReverted(address _initializationContractAddress, bytes _calldata); error InvalidChainlinkRate(); error InvalidLengths(); error InvalidNegativeFees(); error InvalidOracleType(); error InvalidParam(); error InvalidParams(); error InvalidRate(); error InvalidSwap(); error InvalidTokens(); error ManagerHasAssets(); error NoSelectorsProvidedForFacetForCut(address _facetAddress); error NotAllowed(); error NotCollateral(); error NotGovernor(); error NotGovernorOrGuardian(); error NotTrusted(); error NotWhitelisted(); error OneInchSwapFailed(); error Paused(); error ReentrantCall(); error RemoveFacetAddressMustBeZeroAddress(address _facetAddress); error TooBigAmountIn(); error TooLate(); error TooSmallAmountOut(); error ZeroAddress(); error ZeroAmount();
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.19; import { IERC20 } from "oz/token/ERC20/IERC20.sol"; import { IAccessControlManager } from "interfaces/IAccessControlManager.sol"; import { IAgToken } from "interfaces/IAgToken.sol"; /*////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ENUMS //////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/ enum FacetCutAction { Add, Replace, Remove } enum ManagerType { EXTERNAL } enum ActionType { Mint, Burn, Redeem } enum TrustedType { Updater, Seller } enum QuoteType { MintExactInput, MintExactOutput, BurnExactInput, BurnExactOutput } enum OracleReadType { CHAINLINK_FEEDS, EXTERNAL, NO_ORACLE, STABLE, WSTETH, CBETH, RETH, SFRXETH, PYTH } enum OracleQuoteType { UNIT, TARGET } enum WhitelistType { BACKED } /*////////////////////////////////////////////////////////////////////////////////////////////////////////////////// STRUCTS //////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/ struct Permit2Details { address to; // Address that will receive the funds uint256 nonce; // Nonce of the transaction bytes signature; // Permit signature of the user } struct FacetCut { address facetAddress; // Facet contract address FacetCutAction action; // Can be add, remove or replace bytes4[] functionSelectors; // Ex. bytes4(keccak256("transfer(address,uint256)")) } struct Facet { address facetAddress; // Facet contract address bytes4[] functionSelectors; // Ex. bytes4(keccak256("transfer(address,uint256)")) } struct FacetInfo { address facetAddress; // Facet contract address uint16 selectorPosition; // Position in the list of all selectors } struct DiamondStorage { bytes4[] selectors; // List of all available selectors mapping(bytes4 => FacetInfo) selectorInfo; // Selector to (address, position in list) IAccessControlManager accessControlManager; // Contract handling access control } struct ImplementationStorage { address implementation; // Dummy implementation address for Etherscan usability } struct ManagerStorage { IERC20[] subCollaterals; // Subtokens handled by the manager or strategies bytes config; // Additional configuration data } struct Collateral { uint8 isManaged; // If the collateral is managed through external strategies uint8 isMintLive; // If minting from this asset is unpaused uint8 isBurnLive; // If burning to this asset is unpaused uint8 decimals; // IERC20Metadata(collateral).decimals() uint8 onlyWhitelisted; // If only whitelisted addresses can burn or redeem for this token uint216 normalizedStables; // Normalized amount of stablecoins issued from this collateral uint64[] xFeeMint; // Increasing exposures in [0,BASE_9[ int64[] yFeeMint; // Mint fees at the exposures specified in `xFeeMint` uint64[] xFeeBurn; // Decreasing exposures in ]0,BASE_9] int64[] yFeeBurn; // Burn fees at the exposures specified in `xFeeBurn` bytes oracleConfig; // Data about the oracle used for the collateral bytes whitelistData; // For whitelisted collateral, data used to verify whitelists ManagerStorage managerData; // For managed collateral, data used to handle the strategies } struct TransmuterStorage { IAgToken agToken; // agToken handled by the system uint8 isRedemptionLive; // If redemption is unpaused uint8 statusReentrant; // If call is reentrant or not uint128 normalizedStables; // Normalized amount of stablecoins issued by the system uint128 normalizer; // To reconcile `normalizedStables` values with the actual amount address[] collateralList; // List of collateral assets supported by the system uint64[] xRedemptionCurve; // Increasing collateral ratios > 0 int64[] yRedemptionCurve; // Value of the redemption fees at `xRedemptionCurve` mapping(address => Collateral) collaterals; // Maps a collateral asset to its parameters mapping(address => uint256) isTrusted; // If an address is trusted to update the normalizer value mapping(address => uint256) isSellerTrusted; // If an address is trusted to sell accruing reward tokens mapping(WhitelistType => mapping(address => uint256)) isWhitelistedForType; // Whether an address is whitelisted for a specific whitelist type }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity >=0.5.0; import { ICbETH } from "interfaces/external/coinbase/ICbETH.sol"; import { ISfrxETH } from "interfaces/external/frax/ISfrxETH.sol"; import { IStETH } from "interfaces/external/lido/IStETH.sol"; import { IRETH } from "interfaces/external/rocketPool/IRETH.sol"; /*////////////////////////////////////////////////////////////////////////////////////////////////////////////////// STORAGE SLOTS //////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/ /// @dev Storage position of `DiamondStorage` structure /// @dev Equals `keccak256("diamond.standard.diamond.storage") - 1` bytes32 constant DIAMOND_STORAGE_POSITION = 0xc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131b; /// @dev Storage position of `TransmuterStorage` structure /// @dev Equals `keccak256("diamond.standard.transmuter.storage") - 1` bytes32 constant TRANSMUTER_STORAGE_POSITION = 0xc1f2f38dde3351ac0a64934139e816326caa800303a1235dc53707d0de05d8bd; /// @dev Storage position of `ImplementationStorage` structure /// @dev Equals `keccak256("eip1967.proxy.implementation") - 1` bytes32 constant IMPLEMENTATION_STORAGE_POSITION = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; /*////////////////////////////////////////////////////////////////////////////////////////////////////////////////// MATHS //////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/ uint256 constant BASE_6 = 1e6; uint256 constant BASE_8 = 1e8; uint256 constant BASE_9 = 1e9; uint256 constant BASE_12 = 1e12; uint256 constant BASE_18 = 1e18; uint256 constant HALF_BASE_27 = 1e27 / 2; uint256 constant BASE_27 = 1e27; uint256 constant BASE_36 = 1e36; uint256 constant MAX_BURN_FEE = 999_000_000; uint256 constant MAX_MINT_FEE = BASE_12 - 1; /*////////////////////////////////////////////////////////////////////////////////////////////////////////////////// REENTRANT //////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/ // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint8 constant NOT_ENTERED = 1; uint8 constant ENTERED = 2; /*////////////////////////////////////////////////////////////////////////////////////////////////////////////////// COMMON ADDRESSES //////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/ address constant PERMIT_2 = 0x000000000022D473030F116dDEE9F6B43aC78BA3; address constant ONE_INCH_ROUTER = 0x1111111254EEB25477B68fb85Ed929f73A960582; address constant AGEUR = 0x1a7e4e63778B4f12a199C062f3eFdD288afCBce8; ICbETH constant CBETH = ICbETH(0xBe9895146f7AF43049ca1c1AE358B0541Ea49704); IRETH constant RETH = IRETH(0xae78736Cd615f374D3085123A210448E74Fc6393); IStETH constant STETH = IStETH(0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84); ISfrxETH constant SFRXETH = ISfrxETH(0xac3E018457B222d93114458476f3E3416Abbe38F);
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0; /// @title IAccessControlManager /// @author Angle Labs, Inc. interface IAccessControlManager { /// @notice Checks whether an address is governor of the Angle Protocol or not /// @param admin Address to check /// @return Whether the address has the `GOVERNOR_ROLE` or not function isGovernor(address admin) external view returns (bool); /// @notice Checks whether an address is governor or a guardian of the Angle Protocol or not /// @param admin Address to check /// @return Whether the address has the `GUARDIAN_ROLE` or not /// @dev Governance should make sure when adding a governor to also give this governor the guardian /// role by calling the `addGovernor` function function isGovernorOrGuardian(address admin) external view returns (bool); }
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0; import { IERC20 } from "oz/token/ERC20/IERC20.sol"; /// @title IAgToken /// @author Angle Labs, Inc. /// @notice Interface for the stablecoins `AgToken` contracts interface IAgToken is IERC20 { /*////////////////////////////////////////////////////////////////////////////////////////////////////////////////// MINTER ROLE ONLY FUNCTIONS //////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/ /// @notice Lets a whitelisted contract mint agTokens /// @param account Address to mint to /// @param amount Amount to mint function mint(address account, uint256 amount) external; /// @notice Burns `amount` tokens from a `burner` address after being asked to by `sender` /// @param amount Amount of tokens to burn /// @param burner Address to burn from /// @param sender Address which requested the burn from `burner` /// @dev This method is to be called by a contract with the minter right after being requested /// to do so by a `sender` address willing to burn tokens from another `burner` address /// @dev The method checks the allowance between the `sender` and the `burner` function burnFrom(uint256 amount, address burner, address sender) external; /// @notice Burns `amount` tokens from a `burner` address /// @param amount Amount of tokens to burn /// @param burner Address to burn from /// @dev This method is to be called by a contract with a minter right on the AgToken after being /// requested to do so by an address willing to burn tokens from its address function burnSelf(uint256 amount, address burner) external; /*////////////////////////////////////////////////////////////////////////////////////////////////////////////////// TREASURY ONLY FUNCTIONS //////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/ /// @notice Adds a minter in the contract /// @param minter Minter address to add /// @dev Zero address checks are performed directly in the `Treasury` contract function addMinter(address minter) external; /// @notice Removes a minter from the contract /// @param minter Minter address to remove /// @dev This function can also be called by a minter wishing to revoke itself function removeMinter(address minter) external; /// @notice Sets a new treasury contract /// @param _treasury New treasury address function setTreasury(address _treasury) external; /*////////////////////////////////////////////////////////////////////////////////////////////////////////////////// EXTERNAL FUNCTIONS //////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/ /// @notice Checks whether an address has the right to mint agTokens /// @param minter Address for which the minting right should be checked /// @return Whether the address has the right to mint agTokens or not function isMinter(address minter) external view returns (bool); /// @notice Amount of decimals of the stablecoin function decimals() external view returns (uint8); }
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0; /// @title ICbETH /// @notice Interface for the `cbETH` contract interface ICbETH { function exchangeRate() external view returns (uint256); }
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0; /// @title ISfrxETH /// @notice Interface for the `sfrxETH` contract interface ISfrxETH { function pricePerShare() external view returns (uint256); }
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0; /// @title IStETH /// @notice Interface for the `StETH` contract interface IStETH { function getPooledEthByShares(uint256 _sharesAmount) external view returns (uint256); function submit(address) external payable returns (uint256); function getSharesByPooledEth(uint256 _ethAmount) external view returns (uint256); }
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0; /// @title IRETH /// @notice Interface for the `rETH` contract interface IRETH { function getExchangeRate() external view returns (uint256); }
{ "remappings": [ "ds-test/=lib/forge-std/lib/ds-test/src/", "forge-std/=lib/forge-std/src/", "stringutils/=lib/solidity-stringutils/", "contracts/=contracts/", "test/=test/", "interfaces/=contracts/interfaces/", "oz/=lib/openzeppelin-contracts/contracts/", "oz-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "mock/=test/mock/", "prb/math/=lib/prb-math/src/", "borrow/=lib/borrow-contracts/contracts/", "@chainlink/=lib/borrow-contracts/node_modules/@chainlink/", "@ensdomains/=lib/borrow-contracts/node_modules/@ensdomains/", "@prb/test/=lib/prb-math/lib/prb-test/src/", "@uniswap/=lib/borrow-contracts/node_modules/@uniswap/", "borrow-contracts/=lib/borrow-contracts/", "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "prb-math/=lib/prb-math/src/", "prb-test/=lib/prb-math/lib/prb-test/src/", "solidity-stringutils/=lib/solidity-stringutils/", "src/=lib/prb-math/src/" ], "optimizer": { "enabled": true, "runs": 1000 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "viaIR": true, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"internalType":"address","name":"_init","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotAddFunctionToDiamondThatAlreadyExists","type":"error"},{"inputs":[{"internalType":"bytes4[]","name":"_selectors","type":"bytes4[]"}],"name":"CannotAddSelectorsToZeroAddress","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotRemoveFunctionThatDoesNotExist","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotRemoveImmutableFunction","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotReplaceFunctionThatDoesNotExists","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet","type":"error"},{"inputs":[{"internalType":"bytes4[]","name":"_selectors","type":"bytes4[]"}],"name":"CannotReplaceFunctionsFromFacetWithZeroAddress","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotReplaceImmutableFunction","type":"error"},{"inputs":[],"name":"ContractHasNoCode","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_functionSelector","type":"bytes4"}],"name":"FunctionNotFound","type":"error"},{"inputs":[{"internalType":"address","name":"_initializationContractAddress","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"InitializationFunctionReverted","type":"error"},{"inputs":[{"internalType":"address","name":"_facetAddress","type":"address"}],"name":"NoSelectorsProvidedForFacetForCut","type":"error"},{"inputs":[{"internalType":"address","name":"_facetAddress","type":"address"}],"name":"RemoveFacetAddressMustBeZeroAddress","type":"error"},{"stateMutability":"payable","type":"fallback"}]
Contract Creation Code
6080604052610de5803803806100148161021e565b928339606090818382810103126100da578251916001600160401b0383116100da57818401601f8486010112156100da578284015161005a61005582610243565b61021e565b93602085838152019084870160208460051b838a010101116100da57602081880101915b60208460051b838a01010183106100df5787878761009e6020840161025a565b6040840151939091906001600160401b0385116100da576100cc946100c692820191016102ac565b9161049e565b60405160f19081610cb48239f35b600080fd5b82516001600160401b0381116100da578289010185601f1982898c010301126100da5761010a6101db565b906101176020820161025a565b8252604081015160038110156100da57602083015280870151906001600160401b0382116100da5701878a01603f820112156100da5760208101519061015f61005583610243565b91602083828152018a8d0160408360051b850101116100da5760408301905b60408360051b85010182106101a45750505050604082015281526020928301920161007e565b81516001600160e01b0319811681036100da5781526020918201910161017e565b634e487b7160e01b600052604160045260246000fd5b60405190606082016001600160401b038111838210176101fa57604052565b6101c5565b60408051919082016001600160401b038111838210176101fa57604052565b6040519190601f01601f191682016001600160401b038111838210176101fa57604052565b6001600160401b0381116101fa5760051b60200190565b51906001600160a01b03821682036100da57565b6001600160401b0381116101fa57601f01601f191660200190565b60005b83811061029c5750506000910152565b818101518382015260200161028c565b81601f820112156100da5780516102c56100558261026e565b92818452602082840101116100da576102e49160208085019101610289565b90565b634e487b7160e01b600052601160045260246000fd5b600019811461030c5760010190565b6102e7565b634e487b7160e01b600052603260045260246000fd5b805182101561033b5760209160051b010190565b610311565b6003111561034a57565b634e487b7160e01b600052602160045260246000fd5b51600381101561034a5790565b90815180825260208080930193019160005b82811061038d575050505090565b83516001600160e01b0319168552938101939281019260010161037f565b906020916103c481518092818552858086019101610289565b601f01601f1916010190565b93929091936060928382019380835281518095526080830160808660051b85010195602080940192600080915b83831061042f575050505050506102e494956104229183019060018060a01b03169052565b60408184039101526103ab565b909192939498607f1988820301865289519060018060a01b03825116815287820151600381101561048a5761047c60019385848c959486809601528160408094015193820152019061036d565b9b01960194930191906103fd565b634e487b7160e01b85526021600452602485fd5b929190835160005b8181106104f05750507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673816104ee94956104e685604051938493846103d0565b0390a16105eb565b565b6040806104fd8389610327565b51015161051b61050d848a610327565b51516001600160a01b031690565b918151156105a65750908291610540602061053961055d968c610327565b5101610360565b61054981610340565b80610562575061055891610751565b6102fd565b6104a6565b61056b81610340565b6001810361057d5750610558916108a9565b80610589600292610340565b14610596575b50506102fd565b61059f91610a81565b388061058f565b5163e767f91f60e01b81526001600160a01b0383166004820152602490fd5b0390fd5b6001600160a01b0390911681526040602082018190526102e4929101906103ab565b906001600160a01b0382161561066e5761060482610c99565b600080825160208401855af4913d15610666573d926106256100558561026e565b9384523d6000602086013e5b1561063b57505050565b82511561064a57825160208401fd5b6105c560405192839263192105d760e01b8452600484016105c9565b606092610631565b5050565b9060206102e492818152019061036d565b8151815460209093015161ffff60a01b60a09190911b166001600160b01b03199093166001600160a01b0390911617919091179055565b90600080516020610dc5833981519152805483101561033b57600052601c60206000208360031c019260021b1690565b600080516020610dc583398151915290815491680100000000000000008310156101fa57826107219160016104ee950190556106ba565b90919063ffffffff83549160031b9260e01c831b921b1916179055565b61ffff80911690811461030c5760010190565b906001600160a01b0382161561088c57600080516020610dc58339815191525461ffff1661077e83610c99565b8151916000915b838310610793575050505050565b6107ae6107a08484610327565b516001600160e01b03191690565b6107f76107eb6107de8363ffffffff60e01b16600052600080516020610da5833981519152602052604060002090565b546001600160a01b031690565b6001600160a01b031690565b610868576108629161085761085c926108526108116101ff565b6001600160a01b038b16815261ffff851660208201526001600160e01b031983166000908152600080516020610da583398151915260205260409020610683565b6106ea565b61073e565b926102fd565b91610785565b60405163ebbf5d0760e01b81526001600160e01b0319919091166004820152602490fd5b6040516302b8da0760e21b81529081906105c59060048301610672565b6001600160a01b038116919082156109e6576108c481610c99565b81519160005b8381106108d8575050505050565b6108e56107a08284610327565b6109156107eb6107de8363ffffffff60e01b16600052600080516020610da5833981519152602052604060002090565b3081146109c4578681146109a2571561097e57906105588461095a6109799463ffffffff60e01b16600052600080516020610da5833981519152602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b6108ca565b604051637479f93960e01b81526001600160e01b0319919091166004820152602490fd5b604051631ac6ce8d60e11b81526001600160e01b031983166004820152602490fd5b604051632901806d60e11b81526001600160e01b031983166004820152602490fd5b60405163cd98a96f60e01b8152806105c58460048301610672565b9061ffff610a0d6101ff565b92546001600160a01b038116845260a01c166020830152565b801561030c576000190190565b600080516020610dc583398151915280548015610a6b576000190190610a58826106ba565b63ffffffff82549160031b1b1916905555565b634e487b7160e01b600052603160045260246000fd5b600080516020610dc58339815191525491906001600160a01b038116610c765750809291925190600090815b838110610abc57505050509050565b610ac96107a08284610327565b95610afc610af78863ffffffff60e01b16600052600080516020610da5833981519152602052604060002090565b610a01565b8051909190610b13906001600160a01b03166107eb565b15610c545781513090610b2e906001600160a01b03166107eb565b14610c3257610b9460209798610b9a9493610b498894610a26565b998a91018161ffff610b5d835161ffff1690565b1603610ba2575b5050610b6e610a33565b63ffffffff60e01b16600052600080516020610da5833981519152602052604060002090565b556102fd565b949394610aad565b610c0c610be5610bc4610bb7610c2b956106ba565b90549060031b1c60e01b90565b92610bdd84610721610bd8845161ffff1690565b6106ba565b5161ffff1690565b9163ffffffff60e01b16600052600080516020610da5833981519152602052604060002090565b805461ffff60a01b191660a09290921b61ffff60a01b16919091179055565b8838610b64565b604051630df5fd6160e31b81526001600160e01b031989166004820152602490fd5b604051637a08a22d60e01b81526001600160e01b031989166004820152602490fd5b60405163d091bc8160e01b81526001600160a01b03919091166004820152602490fd5b3b15610ca157565b60405163c1df45cf60e01b8152600490fdfe60007fffffffff000000000000000000000000000000000000000000000000000000008135168082527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c60205273ffffffffffffffffffffffffffffffffffffffff604083205416908115608e57508180913682608037608036915af43d809260803e15608a576080f35b6080fd5b7f5416eb980000000000000000000000000000000000000000000000000000000060805260845260246080fdfea2646970667358221220f7555e579d1647bd1a1a6ec8c28b11a5e145ccb1b2ed6f6b2426d5c9f004de4364736f6c63430008130033c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131cc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000009c70c6c8efd84084f9e6ded91790318b8edff4b40000000000000000000000000000000000000000000000000000000000000ce00000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000006c0000000000000000000000000000000000000000000000000000000000000076000000000000000000000000000000000000000000000000000000000000009200000000000000000000000000000000000000000000000000000000000000a200000000000000000000000000000000000000000000000000000000000000b6000000000000000000000000053b7d70013dec21a97f216e80eefcf45f25c29000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000011f931c1c00000000000000000000000000000000000000000000000000000000000000000000000000000000fa94cd9d711de75695693c877beca5473462cf120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000025c60da1b00000000000000000000000000000000000000000000000000000000c39aa07d0000000000000000000000000000000000000000000000000000000000000000000000000000000065ddeedf8e68f26d787b678e28af13fde0249967000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000004cdffacc60000000000000000000000000000000000000000000000000000000052ef6b2c00000000000000000000000000000000000000000000000000000000adfca15e000000000000000000000000000000000000000000000000000000007a0ed62700000000000000000000000000000000000000000000000000000000000000000000000000000000d1b575ed715e4630340bfdc4fb8a37df3383c84a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000016b4a0bdf300000000000000000000000000000000000000000000000000000000ee565a6300000000000000000000000000000000000000000000000000000000847da7be00000000000000000000000000000000000000000000000000000000eb7aac5f000000000000000000000000000000000000000000000000000000003335221000000000000000000000000000000000000000000000000000000000b718136100000000000000000000000000000000000000000000000000000000b85780bc00000000000000000000000000000000000000000000000000000000cd377c5300000000000000000000000000000000000000000000000000000000782513bd0000000000000000000000000000000000000000000000000000000094e35d9e000000000000000000000000000000000000000000000000000000004ea3e3430000000000000000000000000000000000000000000000000000000010d3d22e0000000000000000000000000000000000000000000000000000000038c269eb00000000000000000000000000000000000000000000000000000000adc9d1f7000000000000000000000000000000000000000000000000000000008db9653f000000000000000000000000000000000000000000000000000000000d1266270000000000000000000000000000000000000000000000000000000096d6487900000000000000000000000000000000000000000000000000000000fe7d0c540000000000000000000000000000000000000000000000000000000077dc342900000000000000000000000000000000000000000000000000000000f9839d8900000000000000000000000000000000000000000000000000000000a52aefd40000000000000000000000000000000000000000000000000000000099eeca4900000000000000000000000000000000000000000000000000000000000000000000000000000000770756e43b9ac742538850003791def3020211f300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000105b41934000000000000000000000000000000000000000000000000000000000000000000000000000000001f37f93c6aa7d987ae04786145d3066eab8eeb4300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000af0d2d5a800000000000000000000000000000000000000000000000000000000c1cdee7e0000000000000000000000000000000000000000000000000000000087c8ab7a000000000000000000000000000000000000000000000000000000005c3eebda000000000000000000000000000000000000000000000000000000001f0ec8ee000000000000000000000000000000000000000000000000000000000e32cb860000000000000000000000000000000000000000000000000000000081ee2deb00000000000000000000000000000000000000000000000000000000b13b0847000000000000000000000000000000000000000000000000000000001b0c7182000000000000000000000000000000000000000000000000000000007c0343a100000000000000000000000000000000000000000000000000000000000000000000000000000000dda8f002925a0dfb151c0eacb48d7136ce6a999f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000004629feb62000000000000000000000000000000000000000000000000000000004eec47b900000000000000000000000000000000000000000000000000000000a9e6a1a400000000000000000000000000000000000000000000000000000000b607d0990000000000000000000000000000000000000000000000000000000000000000000000000000000006c33a0c80c3970cbedde641c7a6419d703d93d70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000064583aea6000000000000000000000000000000000000000000000000000000009525f3ab000000000000000000000000000000000000000000000000000000003b6a1fe000000000000000000000000000000000000000000000000000000000d92c6cb200000000000000000000000000000000000000000000000000000000b92567fa00000000000000000000000000000000000000000000000000000000c10a6287000000000000000000000000000000000000000000000000000000000000000000000000000000001e45b65cdd3712fef0024d063d6574a609985e59000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000004d703a0cd00000000000000000000000000000000000000000000000000000000815822c1000000000000000000000000000000000000000000000000000000002e7639bc00000000000000000000000000000000000000000000000000000000fd7daaf8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000003fc5a1bd4d0a435c55374208a6a81535a19230390000000000000000000000000000206329b97db379d5e1bf586bbdb969c632740000000000000000000000005d34839a3d4051f630d36e26698d53c58dd3907200000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60007fffffffff000000000000000000000000000000000000000000000000000000008135168082527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c60205273ffffffffffffffffffffffffffffffffffffffff604083205416908115608e57508180913682608037608036915af43d809260803e15608a576080f35b6080fd5b7f5416eb980000000000000000000000000000000000000000000000000000000060805260845260246080fdfea2646970667358221220f7555e579d1647bd1a1a6ec8c28b11a5e145ccb1b2ed6f6b2426d5c9f004de4364736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000600000000000000000000000009c70c6c8efd84084f9e6ded91790318b8edff4b40000000000000000000000000000000000000000000000000000000000000ce00000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000006c0000000000000000000000000000000000000000000000000000000000000076000000000000000000000000000000000000000000000000000000000000009200000000000000000000000000000000000000000000000000000000000000a200000000000000000000000000000000000000000000000000000000000000b6000000000000000000000000053b7d70013dec21a97f216e80eefcf45f25c29000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000011f931c1c00000000000000000000000000000000000000000000000000000000000000000000000000000000fa94cd9d711de75695693c877beca5473462cf120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000025c60da1b00000000000000000000000000000000000000000000000000000000c39aa07d0000000000000000000000000000000000000000000000000000000000000000000000000000000065ddeedf8e68f26d787b678e28af13fde0249967000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000004cdffacc60000000000000000000000000000000000000000000000000000000052ef6b2c00000000000000000000000000000000000000000000000000000000adfca15e000000000000000000000000000000000000000000000000000000007a0ed62700000000000000000000000000000000000000000000000000000000000000000000000000000000d1b575ed715e4630340bfdc4fb8a37df3383c84a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000016b4a0bdf300000000000000000000000000000000000000000000000000000000ee565a6300000000000000000000000000000000000000000000000000000000847da7be00000000000000000000000000000000000000000000000000000000eb7aac5f000000000000000000000000000000000000000000000000000000003335221000000000000000000000000000000000000000000000000000000000b718136100000000000000000000000000000000000000000000000000000000b85780bc00000000000000000000000000000000000000000000000000000000cd377c5300000000000000000000000000000000000000000000000000000000782513bd0000000000000000000000000000000000000000000000000000000094e35d9e000000000000000000000000000000000000000000000000000000004ea3e3430000000000000000000000000000000000000000000000000000000010d3d22e0000000000000000000000000000000000000000000000000000000038c269eb00000000000000000000000000000000000000000000000000000000adc9d1f7000000000000000000000000000000000000000000000000000000008db9653f000000000000000000000000000000000000000000000000000000000d1266270000000000000000000000000000000000000000000000000000000096d6487900000000000000000000000000000000000000000000000000000000fe7d0c540000000000000000000000000000000000000000000000000000000077dc342900000000000000000000000000000000000000000000000000000000f9839d8900000000000000000000000000000000000000000000000000000000a52aefd40000000000000000000000000000000000000000000000000000000099eeca4900000000000000000000000000000000000000000000000000000000000000000000000000000000770756e43b9ac742538850003791def3020211f300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000105b41934000000000000000000000000000000000000000000000000000000000000000000000000000000001f37f93c6aa7d987ae04786145d3066eab8eeb4300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000af0d2d5a800000000000000000000000000000000000000000000000000000000c1cdee7e0000000000000000000000000000000000000000000000000000000087c8ab7a000000000000000000000000000000000000000000000000000000005c3eebda000000000000000000000000000000000000000000000000000000001f0ec8ee000000000000000000000000000000000000000000000000000000000e32cb860000000000000000000000000000000000000000000000000000000081ee2deb00000000000000000000000000000000000000000000000000000000b13b0847000000000000000000000000000000000000000000000000000000001b0c7182000000000000000000000000000000000000000000000000000000007c0343a100000000000000000000000000000000000000000000000000000000000000000000000000000000dda8f002925a0dfb151c0eacb48d7136ce6a999f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000004629feb62000000000000000000000000000000000000000000000000000000004eec47b900000000000000000000000000000000000000000000000000000000a9e6a1a400000000000000000000000000000000000000000000000000000000b607d0990000000000000000000000000000000000000000000000000000000000000000000000000000000006c33a0c80c3970cbedde641c7a6419d703d93d70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000064583aea6000000000000000000000000000000000000000000000000000000009525f3ab000000000000000000000000000000000000000000000000000000003b6a1fe000000000000000000000000000000000000000000000000000000000d92c6cb200000000000000000000000000000000000000000000000000000000b92567fa00000000000000000000000000000000000000000000000000000000c10a6287000000000000000000000000000000000000000000000000000000000000000000000000000000001e45b65cdd3712fef0024d063d6574a609985e59000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000004d703a0cd00000000000000000000000000000000000000000000000000000000815822c1000000000000000000000000000000000000000000000000000000002e7639bc00000000000000000000000000000000000000000000000000000000fd7daaf8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000003fc5a1bd4d0a435c55374208a6a81535a19230390000000000000000000000000000206329b97db379d5e1bf586bbdb969c632740000000000000000000000005d34839a3d4051f630d36e26698d53c58dd3907200000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _diamondCut (tuple[]): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
Arg [1] : _init (address): 0x9C70c6c8EFD84084F9E6DeD91790318B8eDfF4B4
Arg [2] : _calldata (bytes): 0xc0c53b8b0000000000000000000000003fc5a1bd4d0a435c55374208a6a81535a19230390000000000000000000000000000206329b97db379d5e1bf586bbdb969c632740000000000000000000000005d34839a3d4051f630d36e26698d53c58dd39072
-----Encoded View---------------
108 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 0000000000000000000000009c70c6c8efd84084f9e6ded91790318b8edff4b4
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000ce0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [5] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000280
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000380
Arg [8] : 00000000000000000000000000000000000000000000000000000000000006c0
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000760
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000920
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000a20
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000b60
Arg [13] : 00000000000000000000000053b7d70013dec21a97f216e80eefcf45f25c2900
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [17] : 1f931c1c00000000000000000000000000000000000000000000000000000000
Arg [18] : 000000000000000000000000fa94cd9d711de75695693c877beca5473462cf12
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [20] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [21] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [22] : 5c60da1b00000000000000000000000000000000000000000000000000000000
Arg [23] : c39aa07d00000000000000000000000000000000000000000000000000000000
Arg [24] : 00000000000000000000000065ddeedf8e68f26d787b678e28af13fde0249967
Arg [25] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [26] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [27] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [28] : cdffacc600000000000000000000000000000000000000000000000000000000
Arg [29] : 52ef6b2c00000000000000000000000000000000000000000000000000000000
Arg [30] : adfca15e00000000000000000000000000000000000000000000000000000000
Arg [31] : 7a0ed62700000000000000000000000000000000000000000000000000000000
Arg [32] : 000000000000000000000000d1b575ed715e4630340bfdc4fb8a37df3383c84a
Arg [33] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [34] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [35] : 0000000000000000000000000000000000000000000000000000000000000016
Arg [36] : b4a0bdf300000000000000000000000000000000000000000000000000000000
Arg [37] : ee565a6300000000000000000000000000000000000000000000000000000000
Arg [38] : 847da7be00000000000000000000000000000000000000000000000000000000
Arg [39] : eb7aac5f00000000000000000000000000000000000000000000000000000000
Arg [40] : 3335221000000000000000000000000000000000000000000000000000000000
Arg [41] : b718136100000000000000000000000000000000000000000000000000000000
Arg [42] : b85780bc00000000000000000000000000000000000000000000000000000000
Arg [43] : cd377c5300000000000000000000000000000000000000000000000000000000
Arg [44] : 782513bd00000000000000000000000000000000000000000000000000000000
Arg [45] : 94e35d9e00000000000000000000000000000000000000000000000000000000
Arg [46] : 4ea3e34300000000000000000000000000000000000000000000000000000000
Arg [47] : 10d3d22e00000000000000000000000000000000000000000000000000000000
Arg [48] : 38c269eb00000000000000000000000000000000000000000000000000000000
Arg [49] : adc9d1f700000000000000000000000000000000000000000000000000000000
Arg [50] : 8db9653f00000000000000000000000000000000000000000000000000000000
Arg [51] : 0d12662700000000000000000000000000000000000000000000000000000000
Arg [52] : 96d6487900000000000000000000000000000000000000000000000000000000
Arg [53] : fe7d0c5400000000000000000000000000000000000000000000000000000000
Arg [54] : 77dc342900000000000000000000000000000000000000000000000000000000
Arg [55] : f9839d8900000000000000000000000000000000000000000000000000000000
Arg [56] : a52aefd400000000000000000000000000000000000000000000000000000000
Arg [57] : 99eeca4900000000000000000000000000000000000000000000000000000000
Arg [58] : 000000000000000000000000770756e43b9ac742538850003791def3020211f3
Arg [59] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [60] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [61] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [62] : 05b4193400000000000000000000000000000000000000000000000000000000
Arg [63] : 0000000000000000000000001f37f93c6aa7d987ae04786145d3066eab8eeb43
Arg [64] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [65] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [66] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [67] : f0d2d5a800000000000000000000000000000000000000000000000000000000
Arg [68] : c1cdee7e00000000000000000000000000000000000000000000000000000000
Arg [69] : 87c8ab7a00000000000000000000000000000000000000000000000000000000
Arg [70] : 5c3eebda00000000000000000000000000000000000000000000000000000000
Arg [71] : 1f0ec8ee00000000000000000000000000000000000000000000000000000000
Arg [72] : 0e32cb8600000000000000000000000000000000000000000000000000000000
Arg [73] : 81ee2deb00000000000000000000000000000000000000000000000000000000
Arg [74] : b13b084700000000000000000000000000000000000000000000000000000000
Arg [75] : 1b0c718200000000000000000000000000000000000000000000000000000000
Arg [76] : 7c0343a100000000000000000000000000000000000000000000000000000000
Arg [77] : 000000000000000000000000dda8f002925a0dfb151c0eacb48d7136ce6a999f
Arg [78] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [79] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [80] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [81] : 629feb6200000000000000000000000000000000000000000000000000000000
Arg [82] : 4eec47b900000000000000000000000000000000000000000000000000000000
Arg [83] : a9e6a1a400000000000000000000000000000000000000000000000000000000
Arg [84] : b607d09900000000000000000000000000000000000000000000000000000000
Arg [85] : 00000000000000000000000006c33a0c80c3970cbedde641c7a6419d703d93d7
Arg [86] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [87] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [88] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [89] : 4583aea600000000000000000000000000000000000000000000000000000000
Arg [90] : 9525f3ab00000000000000000000000000000000000000000000000000000000
Arg [91] : 3b6a1fe000000000000000000000000000000000000000000000000000000000
Arg [92] : d92c6cb200000000000000000000000000000000000000000000000000000000
Arg [93] : b92567fa00000000000000000000000000000000000000000000000000000000
Arg [94] : c10a628700000000000000000000000000000000000000000000000000000000
Arg [95] : 0000000000000000000000001e45b65cdd3712fef0024d063d6574a609985e59
Arg [96] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [97] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [98] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [99] : d703a0cd00000000000000000000000000000000000000000000000000000000
Arg [100] : 815822c100000000000000000000000000000000000000000000000000000000
Arg [101] : 2e7639bc00000000000000000000000000000000000000000000000000000000
Arg [102] : fd7daaf800000000000000000000000000000000000000000000000000000000
Arg [103] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [104] : c0c53b8b0000000000000000000000003fc5a1bd4d0a435c55374208a6a81535
Arg [105] : a19230390000000000000000000000000000206329b97db379d5e1bf586bbdb9
Arg [106] : 69c632740000000000000000000000005d34839a3d4051f630d36e26698d53c5
Arg [107] : 8dd3907200000000000000000000000000000000000000000000000000000000
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.