Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 19675982 | 92 days ago | IN | Create: DoughDsa | 0 ETH | 0.03130921 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
DoughDsa
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: BUSL-1.1 pragma solidity =0.8.24; import { IDoughIndex, CustomError } from "./Interfaces.sol"; /** * $$$$$$$\ $$\ $$$$$$$$\ $$\ * $$ __$$\ $$ | $$ _____|\__| * $$ | $$ | $$$$$$\ $$\ $$\ $$$$$$\ $$$$$$$\ $$ | $$\ $$$$$$$\ $$$$$$\ $$$$$$$\ $$$$$$$\ $$$$$$\ * $$ | $$ |$$ __$$\ $$ | $$ |$$ __$$\ $$ __$$\ $$$$$\ $$ |$$ __$$\ \____$$\ $$ __$$\ $$ _____|$$ __$$\ * $$ | $$ |$$ / $$ |$$ | $$ |$$ / $$ |$$ | $$ | $$ __| $$ |$$ | $$ | $$$$$$$ |$$ | $$ |$$ / $$$$$$$$ | * $$ | $$ |$$ | $$ |$$ | $$ |$$ | $$ |$$ | $$ | $$ | $$ |$$ | $$ |$$ __$$ |$$ | $$ |$$ | $$ ____| * $$$$$$$ |\$$$$$$ |\$$$$$$ |\$$$$$$$ |$$ | $$ | $$ | $$ |$$ | $$ |\$$$$$$$ |$$ | $$ |\$$$$$$$\ \$$$$$$$\ * \_______/ \______/ \______/ \____$$ |\__| \__| \__| \__|\__| \__| \_______|\__| \__| \_______| \_______| * $$\ $$ | * \$$$$$$ | * \______/ * * @title DoughDsa * @notice This contract is used to delegate the call to the respective connectors * @custom:version 1.0 - Initial release * @author Liberalite https://github.com/liberalite * @custom:coauthor 0xboga https://github.com/0xboga */ contract DoughDsa { /* ========== LAYOUT ========== */ address public dsaOwner; address public doughIndex; /** * @notice Initializes the DoughDsa contract * @param _dsaOwner: The DSA owner address of the DSA contract * @param _doughIndex: The DoughIndex contract address */ function initialize(address _dsaOwner, address _doughIndex) external { if (dsaOwner != address(0) || _dsaOwner == address(0)) revert CustomError("invalid dsaOwner"); if (doughIndex != address(0) || _doughIndex == address(0)) revert CustomError("invalid doughIndex"); doughIndex = _doughIndex; dsaOwner = _dsaOwner; } /** * @notice Delegates the call to the respective connector * @param _connectorId: The connector ID to call * @param _actionId: The action ID to call * @param _token: The token address to call * @param _amount: The amount to call * @param _opt: The optional boolean value * @param _swapData: The swap data to call */ function doughCall(uint256 _connectorId, uint256 _actionId, address _token, uint256 _amount, bool _opt, bytes[] calldata _swapData) external payable { // _connectorId: 0-dsa 1-aave 2-paraswap 3-uniV3 4-deleveraging-uniV3 4-deleveraging-paraswap 5-shield 6-vault address _contract = IDoughIndex(doughIndex).getDoughConnector(_connectorId); if (_contract == address(0)) revert CustomError("Unregistered Connector"); if (_connectorId < 21) { // only the DSA Owner can run supply, withdraw, repay, swap, loop, deloop, etc if (msg.sender != dsaOwner) revert CustomError("Caller not dsaOwner"); } else if (_connectorId == 21 || _connectorId == 22) { if (msg.sender != IDoughIndex(doughIndex).deleverageAutomation()) revert CustomError("Only Deleveraging Automation"); } else if (_connectorId == 23) { if (msg.sender != IDoughIndex(doughIndex).shieldAutomation()) revert CustomError("Only Shield Automation"); } else if (_connectorId == 24) { if (msg.sender != IDoughIndex(doughIndex).vaultAutomation()) revert CustomError("Only Vault Automation"); } else { // future connectors will only be available to the DSA Owner if (msg.sender != dsaOwner) revert CustomError("Caller not dsaOwner"); } (bool success, bytes memory data) = _contract.delegatecall(abi.encodeWithSignature("delegateDoughCall(uint256,address,uint256,bool,bytes[])", _actionId, _token, _amount, _opt, _swapData)); if (!success) { if (data.length == 0) revert CustomError("Invalid doughcall error length"); if (data.length > 0) { assembly { revert(add(32, data), mload(data)) } } } } /** * @notice Executes an action from and to the Flashloan Connector * @param _connectorId: The connector ID * @param _tokenIn: The token address to get in * @param _inAmount: The amount to get in * @param _tokenOut: The token address to get out * @param _outAmount: The amount to get out * @param _actionId: The action ID to call */ function executeAction(uint256 _connectorId, address _tokenIn, uint256 _inAmount, address _tokenOut, uint256 _outAmount, uint256 _actionId) external payable { address _connector = IDoughIndex(doughIndex).getDoughConnector(_connectorId); if(msg.sender != address(this) && msg.sender != _connector) revert CustomError("Caller not owner or DSA"); address aaveActions = IDoughIndex(doughIndex).aaveActionsAddress(); (bool success, bytes memory data) = aaveActions.delegatecall(abi.encodeWithSignature("executeAaveAction(uint256,address,uint256,address,uint256,uint256)", _connectorId, _tokenIn, _inAmount, _tokenOut, _outAmount, _actionId)); if (!success) { if (data.length == 0) revert CustomError("Invalid Aave error length"); if (data.length > 0) { assembly { revert(add(32, data), mload(data)) } } } } /** * @notice allows DSA Owner to deposit and withdraw ETH */ receive() external payable {} fallback() external payable {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @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 value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` 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 value) external returns (bool); }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.10; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; error CustomError(string errorMsg); interface IWETH is IERC20 { function deposit() external payable; function withdraw(uint amount) external; } interface AaveActionsConnector { function executeAaveAction(address _dsaAddress, uint256 _connectorId, address _tokenIn, uint256 _inAmount, address _tokenOut, uint256 _outAmount, uint256 _actionId) external payable; } interface IDoughDsa { function doughCall(uint256 _connectorId, uint256 _actionId, address _token, uint256 _amount, bool _opt, bytes[] calldata _swapData) external payable; function executeAction(uint256 _connectorId, address tokenIn, uint256 inAmount, address tokenOut, uint256 outAmount, uint256 actionId) external payable; function dsaOwner() external view returns (address); function doughIndex() external view returns (address); } interface IDoughIndex { function aaveActionsAddress() external view returns (address); function setDsaMasterClone(address _dsaMasterCopy) external; function setNewBorrowFormula(address _newBorrowFormula) external; function setNewAaveActions(address _newAaveActions) external; function apyFee() external view returns (uint256); function getFlashBorrowers(address _flashBorrower) external view returns (bool); function deleverageAutomation() external view returns (address); function shieldAutomation() external view returns (address); function vaultAutomation() external view returns (address); function getWhitelistedTokenList() external view returns (address[] memory); function multisig() external view returns (address); function treasury() external view returns (address); function deleverageAsset() external view returns (address); function getDoughConnector (uint256 _connectorId) external view returns (address); function getOwnerOfDoughDsa(address dsaAddress) external view returns (address); function getDoughDsa(address dsaAddress) external view returns (address); function getTokenDecimals(address _token) external view returns (uint8); function getTokenMinInterest(address _token) external view returns (uint256); function getTokenIndex(address _token) external view returns (uint256); function borrowFormula (address _token, address _dsaAddress) external returns (uint256, uint256, uint256, uint256); function borrowFormulaInterest (address _token, address _dsaAddress) external returns (uint256); function getDsaBorrowStartDate (address _dsaAddress, address _token) external view returns (uint256); function updateBorrowDate(uint256 _connectorID, uint256 _time, address _dsaAddress, address _token) external; function minDeleveragingRatio() external view returns (uint256); function minHealthFactor() external view returns (uint256); } interface IBorrowManagementConnector { function borrowFormula(address _token, address _dsaAddress) external view returns (uint256, uint256, uint256, uint256); function borrowFormulaInterest(address _token, address _dsaAddress) external view returns (uint256); } interface IConnectorMultiFlashloan { function flashloanReq(address[] memory flashloanTokens, uint256[] memory flashloanAmounts, uint256[] memory flashLoanInterestRateModes, bytes[] memory swapData) external; } interface IConnectorMultiFlashloanOnchain { function flashloanReq(address[] memory flashloanTokens, uint256[] memory flashloanAmount, uint256[] memory flashLoanInterestRateModes, address[] memory flashLoanTokensCollateral, uint256[] memory flashLoanAmountsCollateral) external; } interface IConnectorFlashloan { function flashloanReq(address dsaOwnerAddress, address flashloanToken, uint256 flashloanAmount, uint256 flashActionId, bytes calldata _swapData) external; }
{ "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"errorMsg","type":"string"}],"name":"CustomError","type":"error"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"uint256","name":"_connectorId","type":"uint256"},{"internalType":"uint256","name":"_actionId","type":"uint256"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_opt","type":"bool"},{"internalType":"bytes[]","name":"_swapData","type":"bytes[]"}],"name":"doughCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"doughIndex","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dsaOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_connectorId","type":"uint256"},{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"uint256","name":"_inAmount","type":"uint256"},{"internalType":"address","name":"_tokenOut","type":"address"},{"internalType":"uint256","name":"_outAmount","type":"uint256"},{"internalType":"uint256","name":"_actionId","type":"uint256"}],"name":"executeAction","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_dsaOwner","type":"address"},{"internalType":"address","name":"_doughIndex","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b50610c51806100206000396000f3fe60806040526004361061004b5760003560e01c8063485cc955146100545780636092eae51461007457806375b4b22d14610087578063b82ca2161461009a578063c140e3fe146100d657005b3661005257005b005b34801561006057600080fd5b5061005261006f366004610985565b6100f6565b6100526100823660046109be565b6101f0565b610052610095366004610a7b565b610711565b3480156100a657600080fd5b506001546100ba906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e257600080fd5b506000546100ba906001600160a01b031681565b6000546001600160a01b031615158061011657506001600160a01b038216155b1561015c576040516346b7545f60e11b815260206004820152601060248201526f34b73b30b634b2103239b0a7bbb732b960811b60448201526064015b60405180910390fd5b6001546001600160a01b031615158061017c57506001600160a01b038116155b156101bf576040516346b7545f60e11b81526020600482015260126024820152710d2dcecc2d8d2c840c8deeaced092dcc8caf60731b6044820152606401610153565b600180546001600160a01b039283166001600160a01b03199182161790915560008054939092169216919091179055565b600154604051639e12a4db60e01b8152600481018990526000916001600160a01b031690639e12a4db90602401602060405180830381865afa15801561023a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025e9190610ad7565b90506001600160a01b0381166102b0576040516346b7545f60e11b81526020600482015260166024820152752ab73932b3b4b9ba32b932b21021b7b73732b1ba37b960511b6044820152606401610153565b601588101561030f576000546001600160a01b0316331461030a576040516346b7545f60e11b815260206004820152601360248201527221b0b63632b9103737ba103239b0a7bbb732b960691b6044820152606401610153565b6105fd565b876015148061031e5750876016145b156103fb57600160009054906101000a90046001600160a01b03166001600160a01b0316637a6cefac6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610376573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039a9190610ad7565b6001600160a01b0316336001600160a01b03161461030a576040516346b7545f60e11b815260206004820152601c60248201527f4f6e6c792044656c657665726167696e67204175746f6d6174696f6e000000006044820152606401610153565b876017036104d457600160009054906101000a90046001600160a01b03166001600160a01b031663fd4360166040518163ffffffff1660e01b8152600401602060405180830381865afa158015610456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047a9190610ad7565b6001600160a01b0316336001600160a01b03161461030a576040516346b7545f60e11b815260206004820152601660248201527527b7363c9029b434b2b6321020baba37b6b0ba34b7b760511b6044820152606401610153565b876018036105ac57600160009054906101000a90046001600160a01b03166001600160a01b031663afacacdc6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561052f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105539190610ad7565b6001600160a01b0316336001600160a01b03161461030a576040516346b7545f60e11b815260206004820152601560248201527427b7363c902b30bab63a1020baba37b6b0ba34b7b760591b6044820152606401610153565b6000546001600160a01b031633146105fd576040516346b7545f60e11b815260206004820152601360248201527221b0b63632b9103737ba103239b0a7bbb732b960691b6044820152606401610153565b600080826001600160a01b031689898989898960405160240161062596959493929190610b24565b60408051601f198184030181529181526020820180516001600160e01b0316631eb8603960e31b1790525161065a9190610bec565b600060405180830381855af49150503d8060008114610695576040519150601f19603f3d011682016040523d82523d6000602084013e61069a565b606091505b5091509150816107055780516000036106f6576040516346b7545f60e11b815260206004820152601e60248201527f496e76616c696420646f75676863616c6c206572726f72206c656e67746800006044820152606401610153565b80511561070557805181602001fd5b50505050505050505050565b600154604051639e12a4db60e01b8152600481018890526000916001600160a01b031690639e12a4db90602401602060405180830381865afa15801561075b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077f9190610ad7565b905033301480159061079a5750336001600160a01b03821614155b156107e8576040516346b7545f60e11b815260206004820152601760248201527f43616c6c6572206e6f74206f776e6572206f72204453410000000000000000006044820152606401610153565b6001546040805163de2fb6b360e01b815290516000926001600160a01b03169163de2fb6b39160048083019260209291908290030181865afa158015610832573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108569190610ad7565b604051602481018a90526001600160a01b03898116604483015260648201899052878116608483015260a4820187905260c4820186905291925060009182919084169060e40160408051601f198184030181529181526020820180516001600160e01b0316637a6847d160e01b179052516108d19190610bec565b600060405180830381855af49150503d806000811461090c576040519150601f19603f3d011682016040523d82523d6000602084013e610911565b606091505b5091509150816107055780516000036106f6576040516346b7545f60e11b815260206004820152601960248201527f496e76616c69642041617665206572726f72206c656e677468000000000000006044820152606401610153565b6001600160a01b038116811461098257600080fd5b50565b6000806040838503121561099857600080fd5b82356109a38161096d565b915060208301356109b38161096d565b809150509250929050565b600080600080600080600060c0888a0312156109d957600080fd5b873596506020880135955060408801356109f28161096d565b94506060880135935060808801358015158114610a0e57600080fd5b925060a088013567ffffffffffffffff80821115610a2b57600080fd5b818a0191508a601f830112610a3f57600080fd5b813581811115610a4e57600080fd5b8b60208260051b8501011115610a6357600080fd5b60208301945080935050505092959891949750929550565b60008060008060008060c08789031215610a9457600080fd5b863595506020870135610aa68161096d565b9450604087013593506060870135610abd8161096d565b9598949750929560808101359460a0909101359350915050565b600060208284031215610ae957600080fd5b8151610af48161096d565b9392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600060a08201888352602060018060a01b0389166020850152876040850152861515606085015260a060808501528185835260c08501905060c08660051b86010192508660005b87811015610bdb5786850360bf190183528135368a9003601e19018112610b9157600080fd5b8901848101903567ffffffffffffffff811115610bad57600080fd5b803603821315610bbc57600080fd5b610bc7878284610afb565b965050509183019190830190600101610b6b565b50929b9a5050505050505050505050565b6000825160005b81811015610c0d5760208186018101518583015201610bf3565b50600092019182525091905056fea2646970667358221220f0fcf2ca4c665b15e086e9b09f419fcb7d395d8a6bb4f49c0f2016e50a47a6e764736f6c63430008180033
Deployed Bytecode
0x60806040526004361061004b5760003560e01c8063485cc955146100545780636092eae51461007457806375b4b22d14610087578063b82ca2161461009a578063c140e3fe146100d657005b3661005257005b005b34801561006057600080fd5b5061005261006f366004610985565b6100f6565b6100526100823660046109be565b6101f0565b610052610095366004610a7b565b610711565b3480156100a657600080fd5b506001546100ba906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e257600080fd5b506000546100ba906001600160a01b031681565b6000546001600160a01b031615158061011657506001600160a01b038216155b1561015c576040516346b7545f60e11b815260206004820152601060248201526f34b73b30b634b2103239b0a7bbb732b960811b60448201526064015b60405180910390fd5b6001546001600160a01b031615158061017c57506001600160a01b038116155b156101bf576040516346b7545f60e11b81526020600482015260126024820152710d2dcecc2d8d2c840c8deeaced092dcc8caf60731b6044820152606401610153565b600180546001600160a01b039283166001600160a01b03199182161790915560008054939092169216919091179055565b600154604051639e12a4db60e01b8152600481018990526000916001600160a01b031690639e12a4db90602401602060405180830381865afa15801561023a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025e9190610ad7565b90506001600160a01b0381166102b0576040516346b7545f60e11b81526020600482015260166024820152752ab73932b3b4b9ba32b932b21021b7b73732b1ba37b960511b6044820152606401610153565b601588101561030f576000546001600160a01b0316331461030a576040516346b7545f60e11b815260206004820152601360248201527221b0b63632b9103737ba103239b0a7bbb732b960691b6044820152606401610153565b6105fd565b876015148061031e5750876016145b156103fb57600160009054906101000a90046001600160a01b03166001600160a01b0316637a6cefac6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610376573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039a9190610ad7565b6001600160a01b0316336001600160a01b03161461030a576040516346b7545f60e11b815260206004820152601c60248201527f4f6e6c792044656c657665726167696e67204175746f6d6174696f6e000000006044820152606401610153565b876017036104d457600160009054906101000a90046001600160a01b03166001600160a01b031663fd4360166040518163ffffffff1660e01b8152600401602060405180830381865afa158015610456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047a9190610ad7565b6001600160a01b0316336001600160a01b03161461030a576040516346b7545f60e11b815260206004820152601660248201527527b7363c9029b434b2b6321020baba37b6b0ba34b7b760511b6044820152606401610153565b876018036105ac57600160009054906101000a90046001600160a01b03166001600160a01b031663afacacdc6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561052f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105539190610ad7565b6001600160a01b0316336001600160a01b03161461030a576040516346b7545f60e11b815260206004820152601560248201527427b7363c902b30bab63a1020baba37b6b0ba34b7b760591b6044820152606401610153565b6000546001600160a01b031633146105fd576040516346b7545f60e11b815260206004820152601360248201527221b0b63632b9103737ba103239b0a7bbb732b960691b6044820152606401610153565b600080826001600160a01b031689898989898960405160240161062596959493929190610b24565b60408051601f198184030181529181526020820180516001600160e01b0316631eb8603960e31b1790525161065a9190610bec565b600060405180830381855af49150503d8060008114610695576040519150601f19603f3d011682016040523d82523d6000602084013e61069a565b606091505b5091509150816107055780516000036106f6576040516346b7545f60e11b815260206004820152601e60248201527f496e76616c696420646f75676863616c6c206572726f72206c656e67746800006044820152606401610153565b80511561070557805181602001fd5b50505050505050505050565b600154604051639e12a4db60e01b8152600481018890526000916001600160a01b031690639e12a4db90602401602060405180830381865afa15801561075b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077f9190610ad7565b905033301480159061079a5750336001600160a01b03821614155b156107e8576040516346b7545f60e11b815260206004820152601760248201527f43616c6c6572206e6f74206f776e6572206f72204453410000000000000000006044820152606401610153565b6001546040805163de2fb6b360e01b815290516000926001600160a01b03169163de2fb6b39160048083019260209291908290030181865afa158015610832573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108569190610ad7565b604051602481018a90526001600160a01b03898116604483015260648201899052878116608483015260a4820187905260c4820186905291925060009182919084169060e40160408051601f198184030181529181526020820180516001600160e01b0316637a6847d160e01b179052516108d19190610bec565b600060405180830381855af49150503d806000811461090c576040519150601f19603f3d011682016040523d82523d6000602084013e610911565b606091505b5091509150816107055780516000036106f6576040516346b7545f60e11b815260206004820152601960248201527f496e76616c69642041617665206572726f72206c656e677468000000000000006044820152606401610153565b6001600160a01b038116811461098257600080fd5b50565b6000806040838503121561099857600080fd5b82356109a38161096d565b915060208301356109b38161096d565b809150509250929050565b600080600080600080600060c0888a0312156109d957600080fd5b873596506020880135955060408801356109f28161096d565b94506060880135935060808801358015158114610a0e57600080fd5b925060a088013567ffffffffffffffff80821115610a2b57600080fd5b818a0191508a601f830112610a3f57600080fd5b813581811115610a4e57600080fd5b8b60208260051b8501011115610a6357600080fd5b60208301945080935050505092959891949750929550565b60008060008060008060c08789031215610a9457600080fd5b863595506020870135610aa68161096d565b9450604087013593506060870135610abd8161096d565b9598949750929560808101359460a0909101359350915050565b600060208284031215610ae957600080fd5b8151610af48161096d565b9392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600060a08201888352602060018060a01b0389166020850152876040850152861515606085015260a060808501528185835260c08501905060c08660051b86010192508660005b87811015610bdb5786850360bf190183528135368a9003601e19018112610b9157600080fd5b8901848101903567ffffffffffffffff811115610bad57600080fd5b803603821315610bbc57600080fd5b610bc7878284610afb565b965050509183019190830190600101610b6b565b50929b9a5050505050505050505050565b6000825160005b81811015610c0d5760208186018101518583015201610bf3565b50600092019182525091905056fea2646970667358221220f0fcf2ca4c665b15e086e9b09f419fcb7d395d8a6bb4f49c0f2016e50a47a6e764736f6c63430008180033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.