Overview
ETH Balance
ETH Value
$0.00Latest 5 from a total of 5 transactions
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 72086089 | 1041 days ago | 0 ETH | ||||
| 72086089 | 1041 days ago | 0 ETH | ||||
| 72086089 | 1041 days ago | 0 ETH | ||||
| 72086089 | 1041 days ago | 0 ETH | ||||
| 72086089 | 1041 days ago | 0 ETH | ||||
| 72086089 | 1041 days ago | 0 ETH | ||||
| 72086089 | 1041 days ago | 0 ETH | ||||
| 72086067 | 1041 days ago | 0 ETH | ||||
| 72086067 | 1041 days ago | 0 ETH | ||||
| 72086067 | 1041 days ago | 0 ETH | ||||
| 72086067 | 1041 days ago | 0 ETH | ||||
| 72086067 | 1041 days ago | 0 ETH | ||||
| 72085994 | 1041 days ago | 0 ETH | ||||
| 72085994 | 1041 days ago | 0 ETH | ||||
| 72085994 | 1041 days ago | 0 ETH | ||||
| 72085994 | 1041 days ago | 0 ETH | ||||
| 72085994 | 1041 days ago | 0 ETH | ||||
| 72085994 | 1041 days ago | 0 ETH | ||||
| 72085994 | 1041 days ago | 0 ETH | ||||
| 72085994 | 1041 days ago | 0 ETH | ||||
| 72085994 | 1041 days ago | 0 ETH | ||||
| 72084644 | 1041 days ago | 0 ETH | ||||
| 72084644 | 1041 days ago | 0 ETH | ||||
| 72084644 | 1041 days ago | 0 ETH | ||||
| 72084644 | 1041 days ago | 0 ETH |
Cross-Chain Transactions
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
import {Errors} from "../utils/Errors.sol";
import {Helpers} from "../utils/Helpers.sol";
import {IAccount} from "../interface/core/IAccount.sol";
import {IERC20} from "../interface/tokens/IERC20.sol";
/**
@title Sentiment Account
@notice Contract that acts as a dynamic and distributed asset reserve
which holds a user’s collateral and loaned assets
*/
contract Account is IAccount {
using Helpers for address;
/* -------------------------------------------------------------------------- */
/* STATE VARIABLES */
/* -------------------------------------------------------------------------- */
/// @notice Block number for when the account is activated
uint public activationBlock;
/**
@notice Address of account manager
@dev If the value is 0x0 the contract is not initialized
*/
address public accountManager;
/// @notice A list of ERC-20 assets (Collaterals + Borrows) present in the account
address[] public assets;
/// @notice A list of borrowed ERC-20 assets present in the account
address[] public borrows;
/// @notice A mapping of ERC-20 assets present in the account
mapping(address => bool) public hasAsset;
/* -------------------------------------------------------------------------- */
/* CUSTOM MODIFIERS */
/* -------------------------------------------------------------------------- */
modifier accountManagerOnly() {
if (msg.sender != accountManager) revert Errors.AccountManagerOnly();
_;
}
/* -------------------------------------------------------------------------- */
/* EXTERNAL FUNCTIONS */
/* -------------------------------------------------------------------------- */
/**
@notice Initializes the account by setting the address of the account
manager
@dev Can only be called as long as the address of the accountManager is
0x0
@param _accountManager address of the account manager
*/
function init(address _accountManager) external {
if (accountManager != address(0))
revert Errors.ContractAlreadyInitialized();
accountManager = _accountManager;
}
/**
@notice Activates an account by setting the activationBlock to the
current block number
*/
function activate() external accountManagerOnly {
activationBlock = block.number;
}
/**
@notice Deactivates an account by setting the activationBlock to 0
*/
function deactivate() external accountManagerOnly {
activationBlock = 0;
}
/**
@notice Returns a list of ERC-20 assets deposited and borrowed by the owner
@return assets List of addresses
*/
function getAssets() external view returns (address[] memory) {
return assets;
}
/**
@notice Returns a list of ERC-20 assets borrowed by the owner
@return borrows List of addresses
*/
function getBorrows() external view returns (address[] memory) {
return borrows;
}
/**
@notice Adds a given ERC-20 token to the assets list
@param token Address of the ERC-20 token to add
*/
function addAsset(address token) external accountManagerOnly {
assets.push(token);
hasAsset[token] = true;
}
/**
@notice Adds a given ERC-20 token to the borrows list
@param token Address of the ERC-20 token to add
*/
function addBorrow(address token) external accountManagerOnly {
borrows.push(token);
}
/**
@notice Removes a given ERC-20 token from the assets list
@param token Address of the ERC-20 token to remove
*/
function removeAsset(address token) external accountManagerOnly {
_remove(assets, token);
hasAsset[token] = false;
}
/**
@notice Removes a given ERC-20 token from the borrows list
@param token Address of the ERC-20 token to remove
*/
function removeBorrow(address token) external accountManagerOnly {
_remove(borrows, token);
}
/**
@notice Returns whether the account has debt or not by checking the length
of the borrows list
@return hasNoDebt bool
*/
function hasNoDebt() external view returns (bool) {
return borrows.length == 0;
}
/**
@notice Generalized utility function to transact with a given contract
@param target Address of contract to transact with
@param amt Amount of Eth to send to the target contract
@param data Encoded sig + params of the function to transact with in the
target contract
@return success True if transaction was successful, false otherwise
@return retData Data returned by given target contract after
the transaction
*/
function exec(address target, uint amt, bytes calldata data)
external
accountManagerOnly
returns (bool, bytes memory)
{
(bool success, bytes memory retData) = target.call{value: amt}(data);
return (success, retData);
}
/**
@notice Utility function to transfer all assets to a specified account
and delete all assets
@param toAddress address of the account to send the assets to
*/
function sweepTo(address toAddress) external accountManagerOnly {
uint assetsLen = assets.length;
for(uint i; i < assetsLen; ++i) {
try IERC20(assets[i]).transfer(
toAddress, assets[i].balanceOf(address(this))
) {} catch {}
if (assets[i].balanceOf(address(this)) == 0)
hasAsset[assets[i]] = false;
}
delete assets;
toAddress.safeTransferEth(address(this).balance);
}
/* -------------------------------------------------------------------------- */
/* INTERNAL FUNCTIONS */
/* -------------------------------------------------------------------------- */
/**
@dev Utility function to remove a given address from a list of addresses
@param arr A list of addresses
@param token Address to remove
*/
function _remove(address[] storage arr, address token) internal {
uint len = arr.length;
for(uint i; i < len; ++i) {
if (arr[i] == token) {
arr[i] = arr[arr.length - 1];
arr.pop();
break;
}
}
}
receive() external payable {}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
interface IAccount {
function activate() external;
function deactivate() external;
function addAsset(address token) external;
function addBorrow(address token) external;
function removeAsset(address token) external;
function sweepTo(address toAddress) external;
function removeBorrow(address token) external;
function init(address accountManager) external;
function hasAsset(address) external returns (bool);
function assets(uint) external returns (address);
function hasNoDebt() external view returns (bool);
function activationBlock() external view returns (uint);
function accountManager() external view returns (address);
function getAssets() external view returns (address[] memory);
function getBorrows() external view returns (address[] memory);
function exec(
address target,
uint amt,
bytes calldata data
) external returns (bool, bytes memory);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
interface IERC20 {
function decimals() external view returns (uint8);
function balanceOf(address _owner) external view returns (uint256 balance);
function transfer(address _to, uint256 _value)
external returns (bool success);
function approve(address _spender, uint256 _value)
external returns (bool success);
function allowance(address _owner, address _spender)
external view returns (uint256 remaining);
function transferFrom(address _from, address _to, uint256 _value)
external returns (bool success);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
library Errors {
error AdminOnly();
error MaxSupply();
error ZeroShares();
error ZeroAssets();
error ZeroAddress();
error MinimumShares();
error ContractPaused();
error OutstandingDebt();
error AccountOwnerOnly();
error TokenNotContract();
error AddressNotContract();
error ContractNotPaused();
error LTokenUnavailable();
error LiquidationFailed();
error EthTransferFailure();
error AccountManagerOnly();
error RiskThresholdBreached();
error FunctionCallRestricted();
error AccountNotLiquidatable();
error CollateralTypeRestricted();
error IncorrectConstructorArgs();
error ContractAlreadyInitialized();
error AccountDeactivationFailure();
error AccountInteractionFailure(address, address, uint, bytes);
}// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity ^0.8.17;
import {Errors} from "./Errors.sol";
import {IERC20} from "../interface/tokens/IERC20.sol";
import {IAccount} from "../interface/core/IAccount.sol";
/// @author Modified from Rari-Capital/Solmate
library Helpers {
function safeTransferFrom(
address token,
address from,
address to,
uint256 amt
) internal {
if (!isContract(token)) revert Errors.TokenNotContract();
(bool success, bytes memory data) = address(token).call(
abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, amt)
);
require(success && (data.length == 0 || abi.decode(data, (bool))), "TRANSFER_FROM_FAILED");
}
function safeTransfer(
address token,
address to,
uint256 amt
) internal {
if (!isContract(token)) revert Errors.TokenNotContract();
(bool success, bytes memory data) = address(token).call(
abi.encodeWithSelector(IERC20.transfer.selector, to, amt)
);
require(success && (data.length == 0 || abi.decode(data, (bool))), "TRANSFER_FAILED");
}
function safeTransferEth(address to, uint256 amt) internal {
(bool success, ) = to.call{value: amt}(new bytes(0));
if(!success) revert Errors.EthTransferFailure();
}
function balanceOf(address token, address owner) internal view returns (uint) {
return IERC20(token).balanceOf(owner);
}
function withdrawEth(address account, address to, uint amt) internal {
(bool success, ) = IAccount(account).exec(to, amt, new bytes(0));
if(!success) revert Errors.EthTransferFailure();
}
function withdraw(address account, address to, address token, uint amt) internal {
if (!isContract(token)) revert Errors.TokenNotContract();
(bool success, bytes memory data) = IAccount(account).exec(token, 0,
abi.encodeWithSelector(IERC20.transfer.selector, to, amt));
require(success && (data.length == 0 || abi.decode(data, (bool))), "TRANSFER_FAILED");
}
function safeApprove(address account, address token, address spender, uint amt) internal {
(bool success, bytes memory data) = IAccount(account).exec(token, 0,
abi.encodeWithSelector(IERC20.approve.selector, spender, amt));
require(success && (data.length == 0 || abi.decode(data, (bool))), "APPROVE_FAILED");
}
function isContract(address token) internal view returns (bool) {
return token.code.length > 0;
}
function functionDelegateCall(
address target,
bytes calldata data
) internal {
if (!isContract(target)) revert Errors.AddressNotContract();
(bool success, ) = target.delegatecall(data);
require(success, "CALL_FAILED");
}
}{
"remappings": [
"controller/=lib/controller/src/",
"ds-test/=lib/solmate/lib/ds-test/src/",
"forge-std/=lib/forge-std/src/",
"oracle/=lib/oracle/src/",
"solidity-bytes-utils/=lib/controller/lib/solidity-bytes-utils/contracts/",
"solmate/=lib/solmate/src/",
"v3-core/=lib/oracle/lib/v3-core/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"bytecodeHash": "ipfs"
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "london",
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"name":"AccountManagerOnly","type":"error"},{"inputs":[],"name":"ContractAlreadyInitialized","type":"error"},{"inputs":[],"name":"EthTransferFailure","type":"error"},{"inputs":[],"name":"accountManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activationBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"addAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"addBorrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"assets","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"borrows","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"exec","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAssets","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBorrows","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasAsset","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasNoDebt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_accountManager","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"removeAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"removeBorrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toAddress","type":"address"}],"name":"sweepTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
608060405234801561001057600080fd5b50610dd9806100206000396000f3fe6080604052600436106101025760003560e01c806367e4ac2c11610095578063c982e27a11610064578063c982e27a146102c1578063cbbf7280146102e1578063cf35bdd014610301578063e30cbfa514610321578063eae93e7e1461034157600080fd5b806367e4ac2c1461022b57806380faa3d21461024d57806391c2c46914610271578063a567fb471461029157600080fd5b8063298410e5116100d1578063298410e5146101b45780634a5e42b1146101d457806351b42b00146101f45780635205c9b61461020957600080fd5b80630565bb671461010e5780630f15f4c014610145578063191e9d7c1461015c57806319ab453c1461019457600080fd5b3661010957005b600080fd5b34801561011a57600080fd5b5061012e610129366004610b5f565b610356565b60405161013c929190610c0a565b60405180910390f35b34801561015157600080fd5b5061015a6103f7565b005b34801561016857600080fd5b5061017c610177366004610c46565b610428565b6040516001600160a01b03909116815260200161013c565b3480156101a057600080fd5b5061015a6101af366004610c5f565b610452565b3480156101c057600080fd5b5061015a6101cf366004610c5f565b61049e565b3480156101e057600080fd5b5061015a6101ef366004610c5f565b610530565b34801561020057600080fd5b5061015a610587565b34801561021557600080fd5b50600354155b604051901515815260200161013c565b34801561023757600080fd5b506102406105b8565b60405161013c9190610c7a565b34801561025957600080fd5b5061026360005481565b60405190815260200161013c565b34801561027d57600080fd5b5060015461017c906001600160a01b031681565b34801561029d57600080fd5b5061021b6102ac366004610c5f565b60046020526000908152604090205460ff1681565b3480156102cd57600080fd5b5061015a6102dc366004610c5f565b61061a565b3480156102ed57600080fd5b5061015a6102fc366004610c5f565b610653565b34801561030d57600080fd5b5061017c61031c366004610c46565b61080c565b34801561032d57600080fd5b5061015a61033c366004610c5f565b61081c565b34801561034d57600080fd5b50610240610899565b6001546000906060906001600160a01b031633146103875760405163fae067e560e01b815260040160405180910390fd5b600080876001600160a01b03168787876040516103a5929190610cc7565b60006040518083038185875af1925050503d80600081146103e2576040519150601f19603f3d011682016040523d82523d6000602084013e6103e7565b606091505b5090999098509650505050505050565b6001546001600160a01b031633146104225760405163fae067e560e01b815260040160405180910390fd5b43600055565b6003818154811061043857600080fd5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b03161561047c57604051631ee1e30360e21b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146104c95760405163fae067e560e01b815260040160405180910390fd5b6002805460018181019092557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b039093166001600160a01b031990931683179055600091825260046020526040909120805460ff19169091179055565b6001546001600160a01b0316331461055b5760405163fae067e560e01b815260040160405180910390fd5b6105666002826108f9565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6001546001600160a01b031633146105b25760405163fae067e560e01b815260040160405180910390fd5b60008055565b6060600280548060200260200160405190810160405280929190818152602001828054801561061057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105f2575b5050505050905090565b6001546001600160a01b031633146106455760405163fae067e560e01b815260040160405180910390fd5b6106506003826108f9565b50565b6001546001600160a01b0316331461067e5760405163fae067e560e01b815260040160405180910390fd5b60025460005b818110156107e8576002818154811061069f5761069f610cd7565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b031663a9059cbb846106fe30600286815481106106e3576106e3610cd7565b6000918252602090912001546001600160a01b031690610a07565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1925050508015610765575060408051601f3d908101601f1916820190925261076291810190610ced565b60015b1561076c57505b61078330600283815481106106e3576106e3610cd7565b6000036107d857600060046000600284815481106107a3576107a3610cd7565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff19169115159190911790555b6107e181610d2c565b9050610684565b506107f560026000610b11565b6108086001600160a01b03831647610a7e565b5050565b6002818154811061043857600080fd5b6001546001600160a01b031633146108475760405163fae067e560e01b815260040160405180910390fd5b600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0392909216919091179055565b60606003805480602002602001604051908101604052809291908181526020018280548015610610576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116105f2575050505050905090565b815460005b81811015610a0157826001600160a01b031684828154811061092257610922610cd7565b6000918252602090912001546001600160a01b0316036109f1578354849061094c90600190610d45565b8154811061095c5761095c610cd7565b9060005260206000200160009054906101000a90046001600160a01b031684828154811061098c5761098c610cd7565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550838054806109ca576109ca610d58565b600082815260209020810160001990810180546001600160a01b0319169055019055610a01565b6109fa81610d2c565b90506108fe565b50505050565b6040516370a0823160e01b81526001600160a01b038281166004830152600091908416906370a0823190602401602060405180830381865afa158015610a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a759190610d6e565b90505b92915050565b604080516000808252602082019092526001600160a01b038416908390604051610aa89190610d87565b60006040518083038185875af1925050503d8060008114610ae5576040519150601f19603f3d011682016040523d82523d6000602084013e610aea565b606091505b5050905080610b0c5760405163af2349ad60e01b815260040160405180910390fd5b505050565b508054600082559060005260206000209081019061065091905b80821115610b3f5760008155600101610b2b565b5090565b80356001600160a01b0381168114610b5a57600080fd5b919050565b60008060008060608587031215610b7557600080fd5b610b7e85610b43565b935060208501359250604085013567ffffffffffffffff80821115610ba257600080fd5b818701915087601f830112610bb657600080fd5b813581811115610bc557600080fd5b886020828501011115610bd757600080fd5b95989497505060200194505050565b60005b83811015610c01578181015183820152602001610be9565b50506000910152565b82151581526040602082015260008251806040840152610c31816060850160208701610be6565b601f01601f1916919091016060019392505050565b600060208284031215610c5857600080fd5b5035919050565b600060208284031215610c7157600080fd5b610a7582610b43565b6020808252825182820181905260009190848201906040850190845b81811015610cbb5783516001600160a01b031683529284019291840191600101610c96565b50909695505050505050565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610cff57600080fd5b81518015158114610d0f57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600060018201610d3e57610d3e610d16565b5060010190565b81810381811115610a7857610a78610d16565b634e487b7160e01b600052603160045260246000fd5b600060208284031215610d8057600080fd5b5051919050565b60008251610d99818460208701610be6565b919091019291505056fea264697066735822122019e0d717d713217ed6d2d4342b47a883b7fffc3a90cc5fa71620fa03d364a1df64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106101025760003560e01c806367e4ac2c11610095578063c982e27a11610064578063c982e27a146102c1578063cbbf7280146102e1578063cf35bdd014610301578063e30cbfa514610321578063eae93e7e1461034157600080fd5b806367e4ac2c1461022b57806380faa3d21461024d57806391c2c46914610271578063a567fb471461029157600080fd5b8063298410e5116100d1578063298410e5146101b45780634a5e42b1146101d457806351b42b00146101f45780635205c9b61461020957600080fd5b80630565bb671461010e5780630f15f4c014610145578063191e9d7c1461015c57806319ab453c1461019457600080fd5b3661010957005b600080fd5b34801561011a57600080fd5b5061012e610129366004610b5f565b610356565b60405161013c929190610c0a565b60405180910390f35b34801561015157600080fd5b5061015a6103f7565b005b34801561016857600080fd5b5061017c610177366004610c46565b610428565b6040516001600160a01b03909116815260200161013c565b3480156101a057600080fd5b5061015a6101af366004610c5f565b610452565b3480156101c057600080fd5b5061015a6101cf366004610c5f565b61049e565b3480156101e057600080fd5b5061015a6101ef366004610c5f565b610530565b34801561020057600080fd5b5061015a610587565b34801561021557600080fd5b50600354155b604051901515815260200161013c565b34801561023757600080fd5b506102406105b8565b60405161013c9190610c7a565b34801561025957600080fd5b5061026360005481565b60405190815260200161013c565b34801561027d57600080fd5b5060015461017c906001600160a01b031681565b34801561029d57600080fd5b5061021b6102ac366004610c5f565b60046020526000908152604090205460ff1681565b3480156102cd57600080fd5b5061015a6102dc366004610c5f565b61061a565b3480156102ed57600080fd5b5061015a6102fc366004610c5f565b610653565b34801561030d57600080fd5b5061017c61031c366004610c46565b61080c565b34801561032d57600080fd5b5061015a61033c366004610c5f565b61081c565b34801561034d57600080fd5b50610240610899565b6001546000906060906001600160a01b031633146103875760405163fae067e560e01b815260040160405180910390fd5b600080876001600160a01b03168787876040516103a5929190610cc7565b60006040518083038185875af1925050503d80600081146103e2576040519150601f19603f3d011682016040523d82523d6000602084013e6103e7565b606091505b5090999098509650505050505050565b6001546001600160a01b031633146104225760405163fae067e560e01b815260040160405180910390fd5b43600055565b6003818154811061043857600080fd5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b03161561047c57604051631ee1e30360e21b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146104c95760405163fae067e560e01b815260040160405180910390fd5b6002805460018181019092557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b039093166001600160a01b031990931683179055600091825260046020526040909120805460ff19169091179055565b6001546001600160a01b0316331461055b5760405163fae067e560e01b815260040160405180910390fd5b6105666002826108f9565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6001546001600160a01b031633146105b25760405163fae067e560e01b815260040160405180910390fd5b60008055565b6060600280548060200260200160405190810160405280929190818152602001828054801561061057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105f2575b5050505050905090565b6001546001600160a01b031633146106455760405163fae067e560e01b815260040160405180910390fd5b6106506003826108f9565b50565b6001546001600160a01b0316331461067e5760405163fae067e560e01b815260040160405180910390fd5b60025460005b818110156107e8576002818154811061069f5761069f610cd7565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b031663a9059cbb846106fe30600286815481106106e3576106e3610cd7565b6000918252602090912001546001600160a01b031690610a07565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1925050508015610765575060408051601f3d908101601f1916820190925261076291810190610ced565b60015b1561076c57505b61078330600283815481106106e3576106e3610cd7565b6000036107d857600060046000600284815481106107a3576107a3610cd7565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff19169115159190911790555b6107e181610d2c565b9050610684565b506107f560026000610b11565b6108086001600160a01b03831647610a7e565b5050565b6002818154811061043857600080fd5b6001546001600160a01b031633146108475760405163fae067e560e01b815260040160405180910390fd5b600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0392909216919091179055565b60606003805480602002602001604051908101604052809291908181526020018280548015610610576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116105f2575050505050905090565b815460005b81811015610a0157826001600160a01b031684828154811061092257610922610cd7565b6000918252602090912001546001600160a01b0316036109f1578354849061094c90600190610d45565b8154811061095c5761095c610cd7565b9060005260206000200160009054906101000a90046001600160a01b031684828154811061098c5761098c610cd7565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550838054806109ca576109ca610d58565b600082815260209020810160001990810180546001600160a01b0319169055019055610a01565b6109fa81610d2c565b90506108fe565b50505050565b6040516370a0823160e01b81526001600160a01b038281166004830152600091908416906370a0823190602401602060405180830381865afa158015610a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a759190610d6e565b90505b92915050565b604080516000808252602082019092526001600160a01b038416908390604051610aa89190610d87565b60006040518083038185875af1925050503d8060008114610ae5576040519150601f19603f3d011682016040523d82523d6000602084013e610aea565b606091505b5050905080610b0c5760405163af2349ad60e01b815260040160405180910390fd5b505050565b508054600082559060005260206000209081019061065091905b80821115610b3f5760008155600101610b2b565b5090565b80356001600160a01b0381168114610b5a57600080fd5b919050565b60008060008060608587031215610b7557600080fd5b610b7e85610b43565b935060208501359250604085013567ffffffffffffffff80821115610ba257600080fd5b818701915087601f830112610bb657600080fd5b813581811115610bc557600080fd5b886020828501011115610bd757600080fd5b95989497505060200194505050565b60005b83811015610c01578181015183820152602001610be9565b50506000910152565b82151581526040602082015260008251806040840152610c31816060850160208701610be6565b601f01601f1916919091016060019392505050565b600060208284031215610c5857600080fd5b5035919050565b600060208284031215610c7157600080fd5b610a7582610b43565b6020808252825182820181905260009190848201906040850190845b81811015610cbb5783516001600160a01b031683529284019291840191600101610c96565b50909695505050505050565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610cff57600080fd5b81518015158114610d0f57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600060018201610d3e57610d3e610d16565b5060010190565b81810381811115610a7857610a78610d16565b634e487b7160e01b600052603160045260246000fd5b600060208284031215610d8057600080fd5b5051919050565b60008251610d99818460208701610be6565b919091019291505056fea264697066735822122019e0d717d713217ed6d2d4342b47a883b7fffc3a90cc5fa71620fa03d364a1df64736f6c63430008110033
Net Worth in USD
Net Worth in ETH
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.