Contract Overview
Balance:
0 DEV
My Name Tag:
Not Available
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x3A9326430D47fAD27533F01Ceec5B85Ef2b3b91a
Contract Name:
CRMRouter
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.4; import "./interfaces/ICRMRouter.sol"; import "./CRMRouterAdmin.sol"; import "../interfaces/ICRM.sol"; contract CRMRouter is ICRMRouter, CRMRouterAdmin { constructor () { admin = msg.sender; } function getLoanMarketPremium( address masterLoanMarket, uint256 loanMarketUnderlyingChainId, address loanMarketUnderlying ) external override view returns (uint256 ratio, uint8 decimals) { return ICRM(routes[masterLoanMarket]).getLoanMarketPremium( masterLoanMarket, loanMarketUnderlyingChainId, loanMarketUnderlying ); } function getMaintenanceCollateralFactor( uint256 chainId, address asset ) external override view returns (uint256 ratio, uint8 decimals) { return (maintenanceLtvRatios[chainId][asset], COLLATERAL_FACTOR_DECIMALS); } function getCollateralFactor( uint256 chainId, address asset ) external override view returns (uint256 ratio, uint8 decimals) { return (absMaxLtvRatios[chainId][asset], COLLATERAL_FACTOR_DECIMALS); } }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.4; interface ICRMRouter { function getLoanMarketPremium( address masterLoanMarket, uint256 loanMarketUnderlyingChainId, address loanMarketUnderlying ) external view returns (uint256 ratio, uint8 decimals); function getMaintenanceCollateralFactor( uint256 chainId, address asset ) external view returns (uint256 ratio, uint8 decimals); function getCollateralFactor( uint256 chainId, address asset ) external view returns (uint256 ratio, uint8 decimals); }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.4; import "./CRMRouterModifiers.sol"; import "./CRMRouterEvents.sol"; abstract contract CRMRouterAdmin is CRMRouterModifiers, CRMRouterEvents { function setAbsMaxLtvRatio( uint256 chainId, address asset, uint256 maxLtvRatio ) external onlyAdmin() { absMaxLtvRatios[chainId][asset] = maxLtvRatio; emit AssetLtvRatioUpdated(chainId, asset, maxLtvRatio); } function setMaintenanceLtvRatio( uint256 chainId, address asset, uint256 maintenanceLtvRatio ) external onlyAdmin() { maintenanceLtvRatios[chainId][asset] = maintenanceLtvRatio; emit AssetMaintenanceLtvRatioUpdated(chainId, asset, maintenanceLtvRatio); } function addRoute( address masterLoanMarket, address newRoute ) external onlyAdmin() { if (routes[masterLoanMarket] != address(0)) revert RouteExists(); emit RouteChanged(masterLoanMarket, routes[masterLoanMarket], newRoute); routes[masterLoanMarket] = newRoute; } function removeRoute( address masterLoanMarket ) external onlyAdmin() { emit RouteChanged(masterLoanMarket, routes[masterLoanMarket], address(0)); routes[masterLoanMarket] = address(0); } function replaceRoute( address masterLoanMarket, address newRoute ) external onlyAdmin() { emit RouteChanged(masterLoanMarket, routes[masterLoanMarket], newRoute); routes[masterLoanMarket] = newRoute; } }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.4; interface ICRM { function getLoanMarketPremium( address loanMarketOverlying, uint256 loanMarketUnderlyingChainId, address loanMarketUnderlying ) external view returns (uint256 ratio, uint8 decimals); }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.4; import "./CRMRouterStorage.sol"; import "../../../util/CommonErrors.sol"; abstract contract CRMRouterModifiers is CRMRouterStorage, CommonErrors { modifier onlyAdmin() { if (msg.sender != admin) revert OnlyAdmin(); _; } }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.4; abstract contract CRMRouterEvents { event AssetLtvRatioUpdated( uint256 chainId, address asset, uint256 ltvRatio ); event AssetMaintenanceLtvRatioUpdated( uint256 chainId, address asset, uint256 maintenanceLtvRatio ); event RouteChanged( address masterLoanMarket, address oldRoute, address newRoute ); }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.4; abstract contract CRMRouterStorage { address internal admin; uint8 public constant COLLATERAL_FACTOR_DECIMALS = 8; mapping(address /* MasterLoanMarket */ => address /* CRM Contract */) internal routes; // slither-disable-next-line unused-state mapping(uint256 => mapping(address => uint256)) public maintenanceLtvRatios; // slither-disable-next-line unused-state mapping(uint256 => mapping(address => uint256)) public absMaxLtvRatios; }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.4; abstract contract CommonErrors { error AccountNoAssets(address account); error AddressExpected(); error AlreadyInitialized(); error EccMessageAlreadyProcessed(); error EccFailedToValidate(); error ExpectedMintAmount(); error ExpectedBridgeAmount(); error ExpectedBorrowAmount(); error ExpectedWithdrawAmount(); error ExpectedRepayAmount(); error ExpectedTradeAmount(); error ExpectedDepositAmount(); error ExpectedTransferAmount(); error InsufficientReserves(); error InvalidPayload(); error InvalidPrice(); error InvalidPrecision(); error InvalidSelector(); error MarketExists(); error LoanMarketIsListed(bool status); error MarketIsPaused(); error MarketNotListed(); error MsgDataExpected(); error NameExpected(); error NothingToWithdraw(); error NotInMarket(uint256 chainId, address token); error OnlyAdmin(); error OnlyAuth(); error OnlyGateway(); error OnlyMiddleLayer(); error OnlyMintAuth(); error OnlyRoute(); error OnlyRouter(); error OnlyMasterState(); error ParamOutOfBounds(); error RouteExists(); error Reentrancy(); error EnterLoanMarketFailed(); error EnterCollMarketFailed(); error ExitLoanMarketFailed(); error ExitCollMarketFailed(); error RepayTooMuch(uint256 repayAmount, uint256 maxAmount); error WithdrawTooMuch(); error NotEnoughBalance(address token, address who); error LiquidateDisallowed(); error SeizeTooMuch(); error SymbolExpected(); error RouteNotSupported(address route); error MiddleLayerPaused(); error PairNotSupported(address loanAsset, address tradeAsset); error TransferFailed(address from, address dest); error TransferPaused(); error UnknownRevert(); error UnexpectedValueDelta(); error ExpectedValue(); error UnexpectedDelta(); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AccountNoAssets","type":"error"},{"inputs":[],"name":"AddressExpected","type":"error"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"EccFailedToValidate","type":"error"},{"inputs":[],"name":"EccMessageAlreadyProcessed","type":"error"},{"inputs":[],"name":"EnterCollMarketFailed","type":"error"},{"inputs":[],"name":"EnterLoanMarketFailed","type":"error"},{"inputs":[],"name":"ExitCollMarketFailed","type":"error"},{"inputs":[],"name":"ExitLoanMarketFailed","type":"error"},{"inputs":[],"name":"ExpectedBorrowAmount","type":"error"},{"inputs":[],"name":"ExpectedBridgeAmount","type":"error"},{"inputs":[],"name":"ExpectedDepositAmount","type":"error"},{"inputs":[],"name":"ExpectedMintAmount","type":"error"},{"inputs":[],"name":"ExpectedRepayAmount","type":"error"},{"inputs":[],"name":"ExpectedTradeAmount","type":"error"},{"inputs":[],"name":"ExpectedTransferAmount","type":"error"},{"inputs":[],"name":"ExpectedValue","type":"error"},{"inputs":[],"name":"ExpectedWithdrawAmount","type":"error"},{"inputs":[],"name":"InsufficientReserves","type":"error"},{"inputs":[],"name":"InvalidPayload","type":"error"},{"inputs":[],"name":"InvalidPrecision","type":"error"},{"inputs":[],"name":"InvalidPrice","type":"error"},{"inputs":[],"name":"InvalidSelector","type":"error"},{"inputs":[],"name":"LiquidateDisallowed","type":"error"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"LoanMarketIsListed","type":"error"},{"inputs":[],"name":"MarketExists","type":"error"},{"inputs":[],"name":"MarketIsPaused","type":"error"},{"inputs":[],"name":"MarketNotListed","type":"error"},{"inputs":[],"name":"MiddleLayerPaused","type":"error"},{"inputs":[],"name":"MsgDataExpected","type":"error"},{"inputs":[],"name":"NameExpected","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"who","type":"address"}],"name":"NotEnoughBalance","type":"error"},{"inputs":[{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"token","type":"address"}],"name":"NotInMarket","type":"error"},{"inputs":[],"name":"NothingToWithdraw","type":"error"},{"inputs":[],"name":"OnlyAdmin","type":"error"},{"inputs":[],"name":"OnlyAuth","type":"error"},{"inputs":[],"name":"OnlyGateway","type":"error"},{"inputs":[],"name":"OnlyMasterState","type":"error"},{"inputs":[],"name":"OnlyMiddleLayer","type":"error"},{"inputs":[],"name":"OnlyMintAuth","type":"error"},{"inputs":[],"name":"OnlyRoute","type":"error"},{"inputs":[],"name":"OnlyRouter","type":"error"},{"inputs":[{"internalType":"address","name":"loanAsset","type":"address"},{"internalType":"address","name":"tradeAsset","type":"address"}],"name":"PairNotSupported","type":"error"},{"inputs":[],"name":"ParamOutOfBounds","type":"error"},{"inputs":[],"name":"Reentrancy","type":"error"},{"inputs":[{"internalType":"uint256","name":"repayAmount","type":"uint256"},{"internalType":"uint256","name":"maxAmount","type":"uint256"}],"name":"RepayTooMuch","type":"error"},{"inputs":[],"name":"RouteExists","type":"error"},{"inputs":[{"internalType":"address","name":"route","type":"address"}],"name":"RouteNotSupported","type":"error"},{"inputs":[],"name":"SeizeTooMuch","type":"error"},{"inputs":[],"name":"SymbolExpected","type":"error"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"dest","type":"address"}],"name":"TransferFailed","type":"error"},{"inputs":[],"name":"TransferPaused","type":"error"},{"inputs":[],"name":"UnexpectedDelta","type":"error"},{"inputs":[],"name":"UnexpectedValueDelta","type":"error"},{"inputs":[],"name":"UnknownRevert","type":"error"},{"inputs":[],"name":"WithdrawTooMuch","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"chainId","type":"uint256"},{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"ltvRatio","type":"uint256"}],"name":"AssetLtvRatioUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"chainId","type":"uint256"},{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"maintenanceLtvRatio","type":"uint256"}],"name":"AssetMaintenanceLtvRatioUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"masterLoanMarket","type":"address"},{"indexed":false,"internalType":"address","name":"oldRoute","type":"address"},{"indexed":false,"internalType":"address","name":"newRoute","type":"address"}],"name":"RouteChanged","type":"event"},{"inputs":[],"name":"COLLATERAL_FACTOR_DECIMALS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"absMaxLtvRatios","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"masterLoanMarket","type":"address"},{"internalType":"address","name":"newRoute","type":"address"}],"name":"addRoute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"asset","type":"address"}],"name":"getCollateralFactor","outputs":[{"internalType":"uint256","name":"ratio","type":"uint256"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"masterLoanMarket","type":"address"},{"internalType":"uint256","name":"loanMarketUnderlyingChainId","type":"uint256"},{"internalType":"address","name":"loanMarketUnderlying","type":"address"}],"name":"getLoanMarketPremium","outputs":[{"internalType":"uint256","name":"ratio","type":"uint256"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"asset","type":"address"}],"name":"getMaintenanceCollateralFactor","outputs":[{"internalType":"uint256","name":"ratio","type":"uint256"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"maintenanceLtvRatios","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"masterLoanMarket","type":"address"}],"name":"removeRoute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"masterLoanMarket","type":"address"},{"internalType":"address","name":"newRoute","type":"address"}],"name":"replaceRoute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"maxLtvRatio","type":"uint256"}],"name":"setAbsMaxLtvRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"maintenanceLtvRatio","type":"uint256"}],"name":"setMaintenanceLtvRatio","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50600080546001600160a01b03191633179055610733806100326000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637d6f1838116100715780637d6f18381461015857806396d64d1514610191578063bd993287146101ca578063c079c772146101dd578063c766ec0d14610208578063df640d791461021b57600080fd5b80632d0bec91146100ae5780632e37f9fb146100c35780633ebb2c391461011857806366e86a911461012b5780637109335914610145575b600080fd5b6100c16100bc3660046105de565b61022e565b005b6100fc6100d1366004610600565b60009182526002602090815260408084206001600160a01b0393909316845291905290205490600890565b6040805192835260ff9091166020830152015b60405180910390f35b6100c161012636600461062c565b6102d9565b610133600881565b60405160ff909116815260200161010f565b6100c161015336600461062c565b61038e565b6100fc610166366004610600565b60009182526003602090815260408084206001600160a01b0393909316845291905290205490600890565b6101bc61019f366004610600565b600260209081526000928352604080842090915290825290205481565b60405190815260200161010f565b6100c16101d8366004610656565b6103f2565b6101bc6101eb366004610600565b600360209081526000928352604080842090915290825290205481565b6100c1610216366004610656565b61048a565b6100fc61022936600461068b565b610519565b6000546001600160a01b0316331461025957604051634755657960e01b815260040160405180910390fd5b6001600160a01b038181166000818152600160209081526040808320548151948552909416908301528183015290517fd29ca1547222d7c1bc4cc9ffab58d96050e6cd0b42701be11f5c8a30609422ea9181900360600190a16001600160a01b0316600090815260016020526040902080546001600160a01b0319169055565b6000546001600160a01b0316331461030457604051634755657960e01b815260040160405180910390fd5b6001600160a01b038281166000818152600160209081526040918290205482519384528416908301529183168183015290517fd29ca1547222d7c1bc4cc9ffab58d96050e6cd0b42701be11f5c8a30609422ea9181900360600190a16001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6000546001600160a01b031633146103b957604051634755657960e01b815260040160405180910390fd5b6001600160a01b038281166000908152600160205260409020541615610304576040516337a922df60e11b815260040160405180910390fd5b6000546001600160a01b0316331461041d57604051634755657960e01b815260040160405180910390fd5b60008381526003602090815260408083206001600160a01b038616808552908352928190208490558051868152918201929092529081018290527f48237e6b7695db8f4b1be91f53d609985c63432fab5f8de1fe1ea1bd1f2e367c906060015b60405180910390a1505050565b6000546001600160a01b031633146104b557604051634755657960e01b815260040160405180910390fd5b60008381526002602090815260408083206001600160a01b038616808552908352928190208490558051868152918201929092529081018290527f5b14fd23b2fcec54fe204f83a4366df28bcdf42efd0e30a44316365012890ba09060600161047d565b6001600160a01b0383811660008181526001602052604080822054905163df640d7960e01b815260048101939093526024830186905284841660448401529092839291169063df640d7990606401604080518083038186803b15801561057e57600080fd5b505afa158015610592573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b691906106c7565b91509150935093915050565b80356001600160a01b03811681146105d957600080fd5b919050565b6000602082840312156105f057600080fd5b6105f9826105c2565b9392505050565b6000806040838503121561061357600080fd5b82359150610623602084016105c2565b90509250929050565b6000806040838503121561063f57600080fd5b610648836105c2565b9150610623602084016105c2565b60008060006060848603121561066b57600080fd5b8335925061067b602085016105c2565b9150604084013590509250925092565b6000806000606084860312156106a057600080fd5b6106a9846105c2565b9250602084013591506106be604085016105c2565b90509250925092565b600080604083850312156106da57600080fd5b82519150602083015160ff811681146106f257600080fd5b80915050925092905056fea26469706673582212207756676535f77d261a2b4ffb6d9d099ff43a0df5efa03a0abe92b1fa9ab80aa764736f6c63430008090033
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|