Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 2 internal transactions
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
6522841 | 6 days ago | Contract Creation | 0 S | |||
6522501 | 6 days ago | Contract Creation | 0 S |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
EulerKinkIRMFactory
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 20000 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; import {BaseFactory} from "../BaseFactory/BaseFactory.sol"; import {IRMLinearKink} from "evk/InterestRateModels/IRMLinearKink.sol"; /// @title EulerKinkIRMFactory /// @custom:security-contact [email protected] /// @author Euler Labs (https://www.eulerlabs.com/) /// @notice A minimal factory for Kink IRMs. contract EulerKinkIRMFactory is BaseFactory { // corresponds to 1000% APY uint256 internal constant MAX_ALLOWED_INTEREST_RATE = 75986279153383989049; /// @notice Error thrown when the computed interest rate exceeds the maximum allowed limit. error IRMFactory_ExcessiveInterestRate(); /// @notice Deploys a new IRMLinearKink. /// @param baseRate Base interest rate applied when utilization is equal zero /// @param slope1 Slope of the function before the kink /// @param slope2 Slope of the function after the kink /// @param kink Utilization at which the slope of the interest rate function changes. In type(uint32).max scale /// @return The deployment address. function deploy(uint256 baseRate, uint256 slope1, uint256 slope2, uint32 kink) external returns (address) { IRMLinearKink irm = new IRMLinearKink(baseRate, slope1, slope2, kink); // verify if the IRM is functional irm.computeInterestRateView(address(0), type(uint32).max, 0); irm.computeInterestRateView(address(0), type(uint32).max - kink, kink); uint256 maxInterestRate = irm.computeInterestRateView(address(0), 0, type(uint32).max); if (maxInterestRate > MAX_ALLOWED_INTEREST_RATE) revert IRMFactory_ExcessiveInterestRate(); deploymentInfo[address(irm)] = DeploymentInfo(msg.sender, uint96(block.timestamp)); deployments.push(address(irm)); emit ContractDeployed(address(irm), msg.sender, block.timestamp); return address(irm); } }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; import {IFactory} from "./interfaces/IFactory.sol"; /// @title BaseFactory /// @custom:security-contact [email protected] /// @author Euler Labs (https://www.eulerlabs.com/) /// @notice A minimal factory for deploying various contracts. abstract contract BaseFactory is IFactory { /// @notice Contracts deployed by the factory. mapping(address => DeploymentInfo) internal deploymentInfo; /// @notice An array of addresses of all the contracts deployed by the factory address[] public deployments; /// @inheritdoc IFactory function getDeploymentInfo(address contractAddress) external view returns (address deployer, uint96 deployedAt) { DeploymentInfo memory info = deploymentInfo[contractAddress]; return (info.deployer, info.deployedAt); } /// @inheritdoc IFactory function isValidDeployment(address contractAddress) external view returns (bool) { return deploymentInfo[contractAddress].deployedAt != 0; } /// @inheritdoc IFactory function getDeploymentsListLength() external view returns (uint256) { return deployments.length; } /// @inheritdoc IFactory function getDeploymentsListSlice(uint256 start, uint256 end) external view returns (address[] memory list) { if (end == type(uint256).max) end = deployments.length; if (end < start || end > deployments.length) revert Factory_BadQuery(); list = new address[](end - start); for (uint256 i; i < end - start; ++i) { list[i] = deployments[start + i]; } } }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; import "./IIRM.sol"; /// @title IRMLinearKink /// @custom:security-contact [email protected] /// @author Euler Labs (https://www.eulerlabs.com/) /// @notice Implementation of an interest rate model, where interest rate grows linearly with utilization, and spikes /// after reaching kink contract IRMLinearKink is IIRM { /// @notice Base interest rate applied when utilization is equal zero uint256 public immutable baseRate; /// @notice Slope of the function before the kink uint256 public immutable slope1; /// @notice Slope of the function after the kink uint256 public immutable slope2; /// @notice Utilization at which the slope of the interest rate function changes. In type(uint32).max scale. uint256 public immutable kink; constructor(uint256 baseRate_, uint256 slope1_, uint256 slope2_, uint32 kink_) { baseRate = baseRate_; slope1 = slope1_; slope2 = slope2_; kink = kink_; } /// @inheritdoc IIRM function computeInterestRate(address vault, uint256 cash, uint256 borrows) external view override returns (uint256) { if (msg.sender != vault) revert E_IRMUpdateUnauthorized(); return computeInterestRateInternal(vault, cash, borrows); } /// @inheritdoc IIRM function computeInterestRateView(address vault, uint256 cash, uint256 borrows) external view override returns (uint256) { return computeInterestRateInternal(vault, cash, borrows); } function computeInterestRateInternal(address, uint256 cash, uint256 borrows) internal view returns (uint256) { uint256 totalAssets = cash + borrows; uint32 utilization = totalAssets == 0 ? 0 // empty pool arbitrarily given utilization of 0 : uint32(borrows * type(uint32).max / totalAssets); uint256 ir = baseRate; if (utilization <= kink) { ir += utilization * slope1; } else { ir += kink * slope1; uint256 utilizationOverKink; unchecked { utilizationOverKink = utilization - kink; } ir += slope2 * utilizationOverKink; } return ir; } }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.8.0; /// @title IFactory /// @custom:security-contact [email protected] /// @author Euler Labs (https://www.eulerlabs.com/) /// @notice A minimal factory interface for deploying contracts. interface IFactory { struct DeploymentInfo { /// @notice The sender of the deployment call. address deployer; /// @notice The timestamp when the contract was deployed. uint96 deployedAt; } /// @notice An instance of a contract was deployed. /// @param deployedContract The deployment address of the contract. /// @param deployer The sender of the deployment call. /// @param deployedAt The deployment timestamp of the contract. event ContractDeployed(address indexed deployedContract, address indexed deployer, uint256 deployedAt); /// @notice Error thrown when the query is incorrect. error Factory_BadQuery(); /// @notice Contracts deployed by the factory. function getDeploymentInfo(address contractAddress) external view returns (address deployer, uint96 deployedAt); /// @notice Checks if the deployment at the given address is valid. /// @param contractAddress The address of the contract to check. /// @return True if the deployment is valid, false otherwise. function isValidDeployment(address contractAddress) external view returns (bool); /// @notice Returns the number of contracts deployed by the factory. /// @return The number of deployed contracts. function getDeploymentsListLength() external view returns (uint256); /// @notice Returns a slice of the list of deployments. /// @param start The starting index of the slice. /// @param end The ending index of the slice (exclusive). /// @return list An array of addresses of the deployed contracts in the specified range. function getDeploymentsListSlice(uint256 start, uint256 end) external view returns (address[] memory list); }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.8.0; /// @title IIRM /// @custom:security-contact [email protected] /// @author Euler Labs (https://www.eulerlabs.com/) /// @notice Interface of the interest rate model contracts used by EVault interface IIRM { error E_IRMUpdateUnauthorized(); /// @notice Perform potentially state mutating computation of the new interest rate /// @param vault Address of the vault to compute the new interest rate for /// @param cash Amount of assets held directly by the vault /// @param borrows Amount of assets lent out to borrowers by the vault /// @return Then new interest rate in second percent yield (SPY), scaled by 1e27 function computeInterestRate(address vault, uint256 cash, uint256 borrows) external returns (uint256); /// @notice Perform computation of the new interest rate without mutating state /// @param vault Address of the vault to compute the new interest rate for /// @param cash Amount of assets held directly by the vault /// @param borrows Amount of assets lent out to borrowers by the vault /// @return Then new interest rate in second percent yield (SPY), scaled by 1e27 function computeInterestRateView(address vault, uint256 cash, uint256 borrows) external view returns (uint256); }
{ "remappings": [ "lib/euler-price-oracle:@openzeppelin/contracts/=lib/euler-price-oracle/lib/openzeppelin-contracts/contracts/", "lib/native-token-transfers/evm:openzeppelin-contracts/contracts/=lib/native-token-transfers/evm/lib/openzeppelin-contracts/contracts/", "lib/euler-earn:@openzeppelin/=lib/euler-earn/lib/openzeppelin-contracts/", "lib/euler-earn:@openzeppelin-upgradeable/=lib/euler-earn/lib/openzeppelin-contracts-upgradeable/contracts/", "lib/euler-earn:ethereum-vault-connector/=lib/euler-earn/lib/ethereum-vault-connector/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/", "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "ethereum-vault-connector/=lib/ethereum-vault-connector/src/", "evc/=lib/ethereum-vault-connector/src/", "evk/=lib/euler-vault-kit/src/", "evk-test/=lib/euler-vault-kit/test/", "euler-price-oracle/=lib/euler-price-oracle/src/", "euler-price-oracle-test/=lib/euler-price-oracle/test/", "fee-flow/=lib/fee-flow/src/", "reward-streams/=lib/reward-streams/src/", "@openzeppelin/=lib/openzeppelin-contracts/contracts/", "euler-earn/=lib/euler-earn/src/", "native-token-transfers/=lib/native-token-transfers/evm/src/", "@openzeppelin-upgradeable/=lib/euler-earn/lib/openzeppelin-contracts-upgradeable/contracts/", "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "@pendle/core-v2/=lib/euler-price-oracle/lib/pendle-core-v2-public/contracts/", "@pyth/=lib/euler-price-oracle/lib/pyth-sdk-solidity/", "@redstone/evm-connector/=lib/euler-price-oracle/lib/redstone-oracles-monorepo/packages/evm-connector/contracts/", "@solady/=lib/euler-price-oracle/lib/solady/src/", "@uniswap/v3-core/=lib/euler-price-oracle/lib/v3-core/", "@uniswap/v3-periphery/=lib/euler-price-oracle/lib/v3-periphery/", "ERC4626/=lib/euler-earn/lib/properties/lib/ERC4626/contracts/", "crytic-properties/=lib/euler-earn/lib/properties/contracts/", "ds-test/=lib/ethereum-vault-connector/lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/", "euler-vault-kit/=lib/euler-vault-kit/", "forge-gas-snapshot/=lib/euler-vault-kit/lib/permit2/lib/forge-gas-snapshot/src/", "forge-std/=lib/forge-std/src/", "halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/", "layerzero-devtools/=lib/layerzero-devtools/packages/toolbox-foundry/src/", "layerzero-v2/=lib/layerzero-v2/", "openzeppelin/=lib/ethereum-vault-connector/lib/openzeppelin-contracts/contracts/", "pendle-core-v2-public/=lib/euler-price-oracle/lib/pendle-core-v2-public/contracts/", "permit2/=lib/euler-vault-kit/lib/permit2/", "properties/=lib/euler-earn/lib/properties/contracts/", "pyth-sdk-solidity/=lib/euler-price-oracle/lib/pyth-sdk-solidity/", "redstone-oracles-monorepo/=lib/euler-price-oracle/lib/", "solady/=lib/euler-price-oracle/lib/solady/src/", "solidity-bytes-utils/=lib/native-token-transfers/evm/lib/solidity-bytes-utils/contracts/", "solmate/=lib/fee-flow/lib/solmate/src/", "v3-core/=lib/euler-price-oracle/lib/v3-core/contracts/", "v3-periphery/=lib/euler-price-oracle/lib/v3-periphery/contracts/", "wormhole-solidity-sdk/=lib/native-token-transfers/evm/lib/wormhole-solidity-sdk/src/" ], "optimizer": { "enabled": true, "runs": 20000 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "cancun", "viaIR": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"name":"Factory_BadQuery","type":"error"},{"inputs":[],"name":"IRMFactory_ExcessiveInterestRate","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"deployedContract","type":"address"},{"indexed":true,"internalType":"address","name":"deployer","type":"address"},{"indexed":false,"internalType":"uint256","name":"deployedAt","type":"uint256"}],"name":"ContractDeployed","type":"event"},{"inputs":[{"internalType":"uint256","name":"baseRate","type":"uint256"},{"internalType":"uint256","name":"slope1","type":"uint256"},{"internalType":"uint256","name":"slope2","type":"uint256"},{"internalType":"uint32","name":"kink","type":"uint32"}],"name":"deploy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"deployments","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"getDeploymentInfo","outputs":[{"internalType":"address","name":"deployer","type":"address"},{"internalType":"uint96","name":"deployedAt","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDeploymentsListLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getDeploymentsListSlice","outputs":[{"internalType":"address[]","name":"list","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"isValidDeployment","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561000f575f80fd5b50610ec58061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061006f575f3560e01c80636aebd5831161004d5780636aebd583146101705780636ee0787a14610181578063e536913d146101ee575f80fd5b806306609bbe146100735780633fc756f8146100b057806342b7bf311461015d575b5f80fd5b610086610081366004610757565b61020e565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101246100be36600461076e565b73ffffffffffffffffffffffffffffffffffffffff9081165f9081526020818152604091829020825180840190935254928316808352740100000000000000000000000000000000000000009093046bffffffffffffffffffffffff1691018190529091565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526bffffffffffffffffffffffff9091166020830152016100a7565b61008661016b3660046107a8565b610243565b6001546040519081526020016100a7565b6101de61018f36600461076e565b73ffffffffffffffffffffffffffffffffffffffff165f908152602081905260409020547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff16151590565b60405190151581526020016100a7565b6102016101fc3660046107ee565b6105ea565b6040516100a7919061080e565b6001818154811061021d575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b5f80858585856040516102559061074a565b9384526020840192909252604083015263ffffffff166060820152608001604051809103905ff08015801561028c573d5f803e3d5ffd5b506040517f2e34c8720000000000000000000000000000000000000000000000000000000081525f6004820181905263ffffffff6024830152604482015290915073ffffffffffffffffffffffffffffffffffffffff821690632e34c87290606401602060405180830381865afa158015610309573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061032d9190610867565b5073ffffffffffffffffffffffffffffffffffffffff8116632e34c8725f6103598663ffffffff6108ab565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015263ffffffff908116602483015286166044820152606401602060405180830381865afa1580156103d4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103f89190610867565b506040517f2e34c8720000000000000000000000000000000000000000000000000000000081525f600482018190526024820181905263ffffffff60448301529073ffffffffffffffffffffffffffffffffffffffff831690632e34c87290606401602060405180830381865afa158015610475573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104999190610867565b905068041e857e4c251f5f398111156104de576040517fe2f8a31a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082018252338082526bffffffffffffffffffffffff42818116602080860191825273ffffffffffffffffffffffffffffffffffffffff8981165f8181529283905288832097519351909516740100000000000000000000000000000000000000000292169190911790945560018054808201825594527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690930180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168217905592519092917fac4ce915ef22753b636e57aac5ae5fdd9d13d782ae5bf6dbcda15e29f95386c1916105d891815260200190565b60405180910390a35095945050505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036106195760015491505b82821080610628575060015482115b1561065f576040517f4e32a13200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066983836108c8565b67ffffffffffffffff811115610681576106816108e1565b6040519080825280602002602001820160405280156106aa578160200160208202803683370190505b5090505f5b6106b984846108c8565b8110156107435760016106cc828661090e565b815481106106dc576106dc610921565b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682828151811061071657610716610921565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526001016106af565b5092915050565b6105418061094f83390190565b5f60208284031215610767575f80fd5b5035919050565b5f6020828403121561077e575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146107a1575f80fd5b9392505050565b5f805f80608085870312156107bb575f80fd5b843593506020850135925060408501359150606085013563ffffffff811681146107e3575f80fd5b939692955090935050565b5f80604083850312156107ff575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b8181101561085b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610829565b50909695505050505050565b5f60208284031215610877575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b63ffffffff8281168282160390808211156107435761074361087e565b818103818111156108db576108db61087e565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b808201808211156108db576108db61087e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfe610100604052348015610010575f80fd5b5060405161054138038061054183398101604081905261002f9161004c565b60809390935260a09190915260c05263ffffffff1660e052610092565b5f805f806080858703121561005f575f80fd5b845193506020850151925060408501519150606085015163ffffffff81168114610087575f80fd5b939692955090935050565b60805160a05160c05160e05161044e6100f35f395f81816101250152818161020c0152818161029e01526102d001525f818160fe01526102fd01525f818160c40152818161023c015261027d01525f8181607801526101eb015261044e5ff3fe608060405234801561000f575f80fd5b506004361061006f575f3560e01c8063bca02c131161004d578063bca02c13146100e6578063d0134cb7146100f9578063fd2da33914610120575f80fd5b80631f68f20a146100735780632e34c872146100ac578063a62b75a8146100bf575b5f80fd5b61009a7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200160405180910390f35b61009a6100ba366004610339565b610147565b61009a7f000000000000000000000000000000000000000000000000000000000000000081565b61009a6100f4366004610339565b61015b565b61009a7f000000000000000000000000000000000000000000000000000000000000000081565b61009a7f000000000000000000000000000000000000000000000000000000000000000081565b5f6101538484846101b2565b949350505050565b5f3373ffffffffffffffffffffffffffffffffffffffff8516146101ab576040517f35a4399400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101538484845b5f806101be83856103b0565b90505f81156101e557816101d663ffffffff866103c9565b6101e091906103e0565b6101e7565b5f5b90507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000063ffffffff831611610278576102677f000000000000000000000000000000000000000000000000000000000000000063ffffffff84166103c9565b61027190826103b0565b905061032f565b6102c27f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006103c9565b6102cc90826103b0565b90507f000000000000000000000000000000000000000000000000000000000000000063ffffffff831603610321817f00000000000000000000000000000000000000000000000000000000000000006103c9565b61032b90836103b0565b9150505b9695505050505050565b5f805f6060848603121561034b575f80fd5b833573ffffffffffffffffffffffffffffffffffffffff8116811461036e575f80fd5b95602085013595506040909401359392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156103c3576103c3610383565b92915050565b80820281158282048414176103c3576103c3610383565b5f82610413577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50049056fea26469706673582212200a90280274da8cd18c07634e0fdf16178c2e141735d63b0576bc9d8bceb2957d64736f6c63430008180033a26469706673582212200f019bd38697ba385259546442da245b51edb82c439aada391cab7945c4c24b264736f6c63430008180033
Deployed Bytecode
0x608060405234801561000f575f80fd5b506004361061006f575f3560e01c80636aebd5831161004d5780636aebd583146101705780636ee0787a14610181578063e536913d146101ee575f80fd5b806306609bbe146100735780633fc756f8146100b057806342b7bf311461015d575b5f80fd5b610086610081366004610757565b61020e565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101246100be36600461076e565b73ffffffffffffffffffffffffffffffffffffffff9081165f9081526020818152604091829020825180840190935254928316808352740100000000000000000000000000000000000000009093046bffffffffffffffffffffffff1691018190529091565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526bffffffffffffffffffffffff9091166020830152016100a7565b61008661016b3660046107a8565b610243565b6001546040519081526020016100a7565b6101de61018f36600461076e565b73ffffffffffffffffffffffffffffffffffffffff165f908152602081905260409020547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff16151590565b60405190151581526020016100a7565b6102016101fc3660046107ee565b6105ea565b6040516100a7919061080e565b6001818154811061021d575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b5f80858585856040516102559061074a565b9384526020840192909252604083015263ffffffff166060820152608001604051809103905ff08015801561028c573d5f803e3d5ffd5b506040517f2e34c8720000000000000000000000000000000000000000000000000000000081525f6004820181905263ffffffff6024830152604482015290915073ffffffffffffffffffffffffffffffffffffffff821690632e34c87290606401602060405180830381865afa158015610309573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061032d9190610867565b5073ffffffffffffffffffffffffffffffffffffffff8116632e34c8725f6103598663ffffffff6108ab565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015263ffffffff908116602483015286166044820152606401602060405180830381865afa1580156103d4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103f89190610867565b506040517f2e34c8720000000000000000000000000000000000000000000000000000000081525f600482018190526024820181905263ffffffff60448301529073ffffffffffffffffffffffffffffffffffffffff831690632e34c87290606401602060405180830381865afa158015610475573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104999190610867565b905068041e857e4c251f5f398111156104de576040517fe2f8a31a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082018252338082526bffffffffffffffffffffffff42818116602080860191825273ffffffffffffffffffffffffffffffffffffffff8981165f8181529283905288832097519351909516740100000000000000000000000000000000000000000292169190911790945560018054808201825594527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690930180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168217905592519092917fac4ce915ef22753b636e57aac5ae5fdd9d13d782ae5bf6dbcda15e29f95386c1916105d891815260200190565b60405180910390a35095945050505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036106195760015491505b82821080610628575060015482115b1561065f576040517f4e32a13200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066983836108c8565b67ffffffffffffffff811115610681576106816108e1565b6040519080825280602002602001820160405280156106aa578160200160208202803683370190505b5090505f5b6106b984846108c8565b8110156107435760016106cc828661090e565b815481106106dc576106dc610921565b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682828151811061071657610716610921565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526001016106af565b5092915050565b6105418061094f83390190565b5f60208284031215610767575f80fd5b5035919050565b5f6020828403121561077e575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146107a1575f80fd5b9392505050565b5f805f80608085870312156107bb575f80fd5b843593506020850135925060408501359150606085013563ffffffff811681146107e3575f80fd5b939692955090935050565b5f80604083850312156107ff575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b8181101561085b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610829565b50909695505050505050565b5f60208284031215610877575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b63ffffffff8281168282160390808211156107435761074361087e565b818103818111156108db576108db61087e565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b808201808211156108db576108db61087e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfe610100604052348015610010575f80fd5b5060405161054138038061054183398101604081905261002f9161004c565b60809390935260a09190915260c05263ffffffff1660e052610092565b5f805f806080858703121561005f575f80fd5b845193506020850151925060408501519150606085015163ffffffff81168114610087575f80fd5b939692955090935050565b60805160a05160c05160e05161044e6100f35f395f81816101250152818161020c0152818161029e01526102d001525f818160fe01526102fd01525f818160c40152818161023c015261027d01525f8181607801526101eb015261044e5ff3fe608060405234801561000f575f80fd5b506004361061006f575f3560e01c8063bca02c131161004d578063bca02c13146100e6578063d0134cb7146100f9578063fd2da33914610120575f80fd5b80631f68f20a146100735780632e34c872146100ac578063a62b75a8146100bf575b5f80fd5b61009a7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200160405180910390f35b61009a6100ba366004610339565b610147565b61009a7f000000000000000000000000000000000000000000000000000000000000000081565b61009a6100f4366004610339565b61015b565b61009a7f000000000000000000000000000000000000000000000000000000000000000081565b61009a7f000000000000000000000000000000000000000000000000000000000000000081565b5f6101538484846101b2565b949350505050565b5f3373ffffffffffffffffffffffffffffffffffffffff8516146101ab576040517f35a4399400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101538484845b5f806101be83856103b0565b90505f81156101e557816101d663ffffffff866103c9565b6101e091906103e0565b6101e7565b5f5b90507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000063ffffffff831611610278576102677f000000000000000000000000000000000000000000000000000000000000000063ffffffff84166103c9565b61027190826103b0565b905061032f565b6102c27f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006103c9565b6102cc90826103b0565b90507f000000000000000000000000000000000000000000000000000000000000000063ffffffff831603610321817f00000000000000000000000000000000000000000000000000000000000000006103c9565b61032b90836103b0565b9150505b9695505050505050565b5f805f6060848603121561034b575f80fd5b833573ffffffffffffffffffffffffffffffffffffffff8116811461036e575f80fd5b95602085013595506040909401359392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156103c3576103c3610383565b92915050565b80820281158282048414176103c3576103c3610383565b5f82610413577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50049056fea26469706673582212200a90280274da8cd18c07634e0fdf16178c2e141735d63b0576bc9d8bceb2957d64736f6c63430008180033a26469706673582212200f019bd38697ba385259546442da245b51edb82c439aada391cab7945c4c24b264736f6c63430008180033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.