Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers.
Latest 15 internal transactions
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
|||
|---|---|---|---|---|---|---|---|---|
| Claim Comp | 12314853 | 1665 days ago | 0 ETH | |||||
| Claim Comp | 12231057 | 1678 days ago | 0 ETH | |||||
| Claim Comp | 12171479 | 1687 days ago | 0 ETH | |||||
| Claim Comp | 11961502 | 1720 days ago | 0 ETH | |||||
| Claim Comp | 11958887 | 1720 days ago | 0 ETH | |||||
| Claim Comp | 11874300 | 1733 days ago | 0 ETH | |||||
| Claim Comp | 11870278 | 1734 days ago | 0 ETH | |||||
| Claim Comp | 11842305 | 1738 days ago | 0 ETH | |||||
| Claim Comp | 11832999 | 1740 days ago | 0 ETH | |||||
| Claim Comp | 11749007 | 1752 days ago | 0 ETH | |||||
| Claim Comp | 11736185 | 1754 days ago | 0 ETH | |||||
| Claim Comp | 11734068 | 1755 days ago | 0 ETH | |||||
| Claim Comp | 11732165 | 1755 days ago | 0 ETH | |||||
| Claim Comp | 11669010 | 1765 days ago | 0 ETH | |||||
| Claim Comp | 11654139 | 1767 days ago | 0 ETH |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
HComptroller
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-01-09
*/
// File: localhost/contracts/handlers/compound/IComptroller.sol
pragma solidity ^0.6.0;
interface IComptroller {
function enterMarkets (address[] calldata cTokens) external virtual returns (uint[] memory);
function exitMarket(address cToken) external virtual returns (uint);
function checkMembership(address account, address cToken) external view virtual returns (bool);
function claimComp(address holder) external virtual;
function getCompAddress() external virtual returns(address);
}
// File: localhost/contracts/lib/LibStack.sol
pragma solidity ^0.6.0;
library LibStack {
function setAddress(bytes32[] storage _stack, address _input) internal {
_stack.push(bytes32(uint256(uint160(_input))));
}
function set(bytes32[] storage _stack, bytes32 _input) internal {
_stack.push(_input);
}
function setHandlerType(bytes32[] storage _stack, uint256 _input) internal {
require(_input < uint96(-1), "Invalid Handler Type");
_stack.push(bytes12(uint96(_input)));
}
function getAddress(bytes32[] storage _stack)
internal
returns (address ret)
{
ret = address(uint160(uint256(peek(_stack))));
_stack.pop();
}
function getSig(bytes32[] storage _stack) internal returns (bytes4 ret) {
ret = bytes4(peek(_stack));
_stack.pop();
}
function get(bytes32[] storage _stack) internal returns (bytes32 ret) {
ret = peek(_stack);
_stack.pop();
}
function peek(bytes32[] storage _stack)
internal
view
returns (bytes32 ret)
{
require(_stack.length > 0, "stack empty");
ret = _stack[_stack.length - 1];
}
}
// File: localhost/contracts/lib/LibCache.sol
pragma solidity ^0.6.0;
library LibCache {
function set(
mapping(bytes32 => bytes32) storage _cache,
bytes32 _key,
bytes32 _value
) internal {
_cache[_key] = _value;
}
function setAddress(
mapping(bytes32 => bytes32) storage _cache,
bytes32 _key,
address _value
) internal {
_cache[_key] = bytes32(uint256(uint160(_value)));
}
function setUint256(
mapping(bytes32 => bytes32) storage _cache,
bytes32 _key,
uint256 _value
) internal {
_cache[_key] = bytes32(_value);
}
function getAddress(
mapping(bytes32 => bytes32) storage _cache,
bytes32 _key
) internal view returns (address ret) {
ret = address(uint160(uint256(_cache[_key])));
}
function getUint256(
mapping(bytes32 => bytes32) storage _cache,
bytes32 _key
) internal view returns (uint256 ret) {
ret = uint256(_cache[_key]);
}
function get(mapping(bytes32 => bytes32) storage _cache, bytes32 _key)
internal
view
returns (bytes32 ret)
{
ret = _cache[_key];
}
}
// File: localhost/contracts/Storage.sol
pragma solidity ^0.6.0;
/// @notice A cache structure composed by a bytes32 array
contract Storage {
using LibCache for mapping(bytes32 => bytes32);
using LibStack for bytes32[];
bytes32[] public stack;
mapping(bytes32 => bytes32) public cache;
// keccak256 hash of "msg.sender"
// prettier-ignore
bytes32 public constant MSG_SENDER_KEY = 0xb2f2618cecbbb6e7468cc0f2aa43858ad8d153e0280b22285e28e853bb9d453a;
// keccak256 hash of "cube.counter"
// prettier-ignore
bytes32 public constant CUBE_COUNTER_KEY = 0xf9543f11459ccccd21306c8881aaab675ff49d988c1162fd1dd9bbcdbe4446be;
modifier isStackEmpty() {
require(stack.length == 0, "Stack not empty");
_;
}
modifier isCubeCounterZero() {
require(_getCubeCounter() == 0, "Cube counter not zero");
_;
}
function _setSender() internal {
if (_getSender() == address(0))
cache.setAddress(MSG_SENDER_KEY, msg.sender);
}
function _resetSender() internal {
cache.setAddress(MSG_SENDER_KEY, address(0));
}
function _getSender() internal view returns (address) {
return cache.getAddress(MSG_SENDER_KEY);
}
function _addCubeCounter() internal {
cache.setUint256(CUBE_COUNTER_KEY, _getCubeCounter() + 1);
}
function _resetCubeCounter() internal {
cache.setUint256(CUBE_COUNTER_KEY, 0);
}
function _getCubeCounter() internal view returns (uint256) {
return cache.getUint256(CUBE_COUNTER_KEY);
}
}
// File: localhost/contracts/Config.sol
pragma solidity ^0.6.0;
contract Config {
// function signature of "postProcess()"
bytes4 public constant POSTPROCESS_SIG = 0xc2722916;
// The base amount of percentage function
uint256 public constant PERCENTAGE_BASE = 1 ether;
// Handler post-process type. Others should not happen now.
enum HandlerType {Token, Custom, Others}
}
// File: @openzeppelin/contracts/utils/Address.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.2 <0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
// solhint-disable-next-line no-inline-assembly
assembly { size := extcodesize(account) }
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: value }(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.staticcall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/math/SafeMath.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @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);
}
// File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// File: localhost/contracts/handlers/HandlerBase.sol
pragma solidity ^0.6.0;
abstract contract HandlerBase is Storage, Config {
using SafeERC20 for IERC20;
function postProcess() external payable virtual {
revert("Invalid post process");
/* Implementation template
bytes4 sig = stack.getSig();
if (sig == bytes4(keccak256(bytes("handlerFunction_1()")))) {
// Do something
} else if (sig == bytes4(keccak256(bytes("handlerFunction_2()")))) {
bytes32 temp = stack.get();
// Do something
} else revert("Invalid post process");
*/
}
function _updateToken(address token) internal {
stack.setAddress(token);
// Ignore token type to fit old handlers
// stack.setHandlerType(uint256(HandlerType.Token));
}
function _updatePostProcess(bytes32[] memory params) internal {
for (uint256 i = params.length; i > 0; i--) {
stack.set(params[i - 1]);
}
stack.set(msg.sig);
stack.setHandlerType(uint256(HandlerType.Custom));
}
function getContractName() public pure virtual returns (string memory);
function _revertMsg(string memory functionName, string memory reason)
internal
view
{
revert(
string(
abi.encodePacked(
_uint2String(_getCubeCounter()),
"_",
getContractName(),
"_",
functionName,
": ",
reason
)
)
);
}
function _revertMsg(string memory functionName) internal view {
_revertMsg(functionName, "Unspecified");
}
function _uint2String(uint256 n) internal pure returns (string memory) {
if (n == 0) {
return "0";
} else {
uint256 len = 0;
for (uint256 temp = n; temp > 0; temp /= 10) {
len++;
}
bytes memory str = new bytes(len);
for (uint256 i = len; i > 0; i--) {
str[i - 1] = bytes1(uint8(48 + (n % 10)));
n /= 10;
}
return string(str);
}
}
function _getBalance(address token, uint256 amount)
internal
view
returns (uint256)
{
if (amount != uint256(-1)) {
return amount;
}
// ETH case
if (
token == address(0) ||
token == address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)
) {
return address(this).balance;
}
// ERC20 token case
return IERC20(token).balanceOf(address(this));
}
}
// File: localhost/contracts/handlers/compound/HComptroller.sol
pragma solidity ^0.6.0;
contract HComptroller is HandlerBase {
using SafeERC20 for IERC20;
using SafeMath for uint256;
// prettier-ignore
address public constant COMPTROLLER = 0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B;
function getContractName() public pure override returns (string memory) {
return "HComptroller";
}
function claimComp() external payable returns (uint256) {
IComptroller comptroller = IComptroller(COMPTROLLER);
address comp = comptroller.getCompAddress();
address sender = _getSender();
uint256 beforeCompBalance = IERC20(comp).balanceOf(sender);
try comptroller.claimComp(sender) {} catch Error(string memory reason) {
_revertMsg("claimComp", reason);
} catch {
_revertMsg("claimComp");
}
uint256 afterCompBalance = IERC20(comp).balanceOf(sender);
return afterCompBalance.sub(beforeCompBalance);
}
function claimComp(address holder) external payable returns (uint256) {
IComptroller comptroller = IComptroller(COMPTROLLER);
address comp = comptroller.getCompAddress();
uint256 beforeCompBalance = IERC20(comp).balanceOf(holder);
try comptroller.claimComp(holder) {} catch Error(string memory reason) {
_revertMsg("claimComp", reason);
} catch {
_revertMsg("claimComp");
}
uint256 afterCompBalance = IERC20(comp).balanceOf(holder);
return afterCompBalance.sub(beforeCompBalance);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"name":"COMPTROLLER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CUBE_COUNTER_KEY","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MSG_SENDER_KEY","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERCENTAGE_BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POSTPROCESS_SIG","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"cache","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimComp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"claimComp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getContractName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"postProcess","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stack","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b50610d5b806100206000396000f3fe60806040526004361061009c5760003560e01c806399eb59b91161006457806399eb59b91461012b578063c272291614610155578063dc9031c41461015f578063e9af029214610189578063f5f5ba72146101af578063fa2901a5146102395761009c565b80630f532d18146100a15780631413dc7d146100c85780631bd85bdb146100dd5780635f82c67e146100e557806387c1394314610116575b600080fd5b3480156100ad57600080fd5b506100b661026b565b60408051918252519081900360200190f35b3480156100d457600080fd5b506100b661028f565b6100b66102b3565b3480156100f157600080fd5b506100fa610522565b604080516001600160a01b039092168252519081900360200190f35b34801561012257600080fd5b506100b661053a565b34801561013757600080fd5b506100b66004803603602081101561014e57600080fd5b5035610546565b61015d610558565b005b34801561016b57600080fd5b506100b66004803603602081101561018257600080fd5b503561059c565b6100b66004803603602081101561019f57600080fd5b50356001600160a01b03166105ba565b3480156101bb57600080fd5b506101c461081d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101fe5781810151838201526020016101e6565b50505050905090810190601f16801561022b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561024557600080fd5b5061024e610843565b604080516001600160e01b03199092168252519081900360200190f35b7fb2f2618cecbbb6e7468cc0f2aa43858ad8d153e0280b22285e28e853bb9d453a81565b7ff9543f11459ccccd21306c8881aaab675ff49d988c1162fd1dd9bbcdbe4446be81565b600080733d9819210a31b4961b30ef54be2aed79b9c9cd3b90506000816001600160a01b0316639d1b5a0a6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561030a57600080fd5b505af115801561031e573d6000803e3d6000fd5b505050506040513d602081101561033457600080fd5b50519050600061034261084e565b90506000826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561039357600080fd5b505afa1580156103a7573d6000803e3d6000fd5b505050506040513d60208110156103bd57600080fd5b5051604080516374d7814960e11b81526001600160a01b03858116600483015291519293509086169163e9af02929160248082019260009290919082900301818387803b15801561040d57600080fd5b505af192505050801561041e575060015b6104905761042a610c80565b806104355750610466565b610460604051806040016040528060098152602001680636c61696d436f6d760bc1b81525082610880565b50610490565b610490604051806040016040528060098152602001680636c61696d436f6d760bc1b815250610a8f565b6000836001600160a01b03166370a08231846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156104df57600080fd5b505afa1580156104f3573d6000803e3d6000fd5b505050506040513d602081101561050957600080fd5b505190506105178183610abf565b955050505050505b90565b733d9819210a31b4961b30ef54be2aed79b9c9cd3b81565b670de0b6b3a764000081565b60016020526000908152604090205481565b6040805162461bcd60e51b8152602060048201526014602482015273496e76616c696420706f73742070726f6365737360601b604482015290519081900360640190fd5b600081815481106105a957fe5b600091825260209091200154905081565b600080733d9819210a31b4961b30ef54be2aed79b9c9cd3b90506000816001600160a01b0316639d1b5a0a6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561061157600080fd5b505af1158015610625573d6000803e3d6000fd5b505050506040513d602081101561063b57600080fd5b5051604080516370a0823160e01b81526001600160a01b0387811660048301529151929350600092918416916370a0823191602480820192602092909190829003018186803b15801561068d57600080fd5b505afa1580156106a1573d6000803e3d6000fd5b505050506040513d60208110156106b757600080fd5b5051604080516374d7814960e11b81526001600160a01b03888116600483015291519293509085169163e9af02929160248082019260009290919082900301818387803b15801561070757600080fd5b505af1925050508015610718575060015b61078a57610724610c80565b8061072f5750610760565b61075a604051806040016040528060098152602001680636c61696d436f6d760bc1b81525082610880565b5061078a565b61078a604051806040016040528060098152602001680636c61696d436f6d760bc1b815250610a8f565b6000826001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156107d957600080fd5b505afa1580156107ed573d6000803e3d6000fd5b505050506040513d602081101561080357600080fd5b505190506108118183610abf565b9450505050505b919050565b60408051808201909152600c81526b2421b7b6b83a3937b63632b960a11b602082015290565b636139148b60e11b81565b600061087b60017fb2f2618cecbbb6e7468cc0f2aa43858ad8d153e0280b22285e28e853bb9d453a610b08565b905090565b61089061088b610b1b565b610b48565b61089861081d565b83836040516020018085805190602001908083835b602083106108cc5780518252601f1990920191602091820191016108ad565b6001836020036101000a03801982511681845116808217855250505050505090500180605f60f81b81525060010184805190602001908083835b602083106109255780518252601f199092019160209182019101610906565b6001836020036101000a03801982511681845116808217855250505050505090500180605f60f81b81525060010183805190602001908083835b6020831061097e5780518252601f19909201916020918201910161095f565b51815160209384036101000a60001901801990921691161790526101d160f51b919093019081528451600290910192850191508083835b602083106109d45780518252601f1990920191602091820191016109b5565b6001836020036101000a03801982511681845116808217855250505050505090500194505050505060405160208183030381529060405260405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610a54578181015183820152602001610a3c565b50505050905090810190601f168015610a815780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b610abc816040518060400160405280600b81526020016a155b9cdc1958da599a595960aa1b815250610880565b50565b6000610b0183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c20565b9392505050565b6000908152602091909152604090205490565b600061087b60017ff9543f11459ccccd21306c8881aaab675ff49d988c1162fd1dd9bbcdbe4446be610b08565b606081610b6d57506040805180820190915260018152600360fc1b6020820152610818565b6000825b8015610b875760019190910190600a9004610b71565b5060608167ffffffffffffffff81118015610ba157600080fd5b506040519080825280601f01601f191660200182016040528015610bcc576020820181803683370190505b509050815b8015610c1657600a850660300160f81b826001830381518110610bf057fe5b60200101906001600160f81b031916908160001a905350600a8504945060001901610bd1565b5091506108189050565b60008184841115610c725760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610a54578181015183820152602001610a3c565b505050900390565b60e01c90565b600060443d1015610c905761051f565b600481823e6308c379a0610ca48251610c7a565b14610cae5761051f565b6040513d600319016004823e80513d67ffffffffffffffff8160248401118184111715610cde575050505061051f565b82840192508251915080821115610cf8575050505061051f565b503d83016020828401011115610d105750505061051f565b601f01601f191681016020016040529150509056fea2646970667358221220469a822c05f5d922250c9f16485c60262f098ac3e32b938c5d5252177851f8e964736f6c634300060c0033
Deployed Bytecode
0x60806040526004361061009c5760003560e01c806399eb59b91161006457806399eb59b91461012b578063c272291614610155578063dc9031c41461015f578063e9af029214610189578063f5f5ba72146101af578063fa2901a5146102395761009c565b80630f532d18146100a15780631413dc7d146100c85780631bd85bdb146100dd5780635f82c67e146100e557806387c1394314610116575b600080fd5b3480156100ad57600080fd5b506100b661026b565b60408051918252519081900360200190f35b3480156100d457600080fd5b506100b661028f565b6100b66102b3565b3480156100f157600080fd5b506100fa610522565b604080516001600160a01b039092168252519081900360200190f35b34801561012257600080fd5b506100b661053a565b34801561013757600080fd5b506100b66004803603602081101561014e57600080fd5b5035610546565b61015d610558565b005b34801561016b57600080fd5b506100b66004803603602081101561018257600080fd5b503561059c565b6100b66004803603602081101561019f57600080fd5b50356001600160a01b03166105ba565b3480156101bb57600080fd5b506101c461081d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101fe5781810151838201526020016101e6565b50505050905090810190601f16801561022b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561024557600080fd5b5061024e610843565b604080516001600160e01b03199092168252519081900360200190f35b7fb2f2618cecbbb6e7468cc0f2aa43858ad8d153e0280b22285e28e853bb9d453a81565b7ff9543f11459ccccd21306c8881aaab675ff49d988c1162fd1dd9bbcdbe4446be81565b600080733d9819210a31b4961b30ef54be2aed79b9c9cd3b90506000816001600160a01b0316639d1b5a0a6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561030a57600080fd5b505af115801561031e573d6000803e3d6000fd5b505050506040513d602081101561033457600080fd5b50519050600061034261084e565b90506000826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561039357600080fd5b505afa1580156103a7573d6000803e3d6000fd5b505050506040513d60208110156103bd57600080fd5b5051604080516374d7814960e11b81526001600160a01b03858116600483015291519293509086169163e9af02929160248082019260009290919082900301818387803b15801561040d57600080fd5b505af192505050801561041e575060015b6104905761042a610c80565b806104355750610466565b610460604051806040016040528060098152602001680636c61696d436f6d760bc1b81525082610880565b50610490565b610490604051806040016040528060098152602001680636c61696d436f6d760bc1b815250610a8f565b6000836001600160a01b03166370a08231846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156104df57600080fd5b505afa1580156104f3573d6000803e3d6000fd5b505050506040513d602081101561050957600080fd5b505190506105178183610abf565b955050505050505b90565b733d9819210a31b4961b30ef54be2aed79b9c9cd3b81565b670de0b6b3a764000081565b60016020526000908152604090205481565b6040805162461bcd60e51b8152602060048201526014602482015273496e76616c696420706f73742070726f6365737360601b604482015290519081900360640190fd5b600081815481106105a957fe5b600091825260209091200154905081565b600080733d9819210a31b4961b30ef54be2aed79b9c9cd3b90506000816001600160a01b0316639d1b5a0a6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561061157600080fd5b505af1158015610625573d6000803e3d6000fd5b505050506040513d602081101561063b57600080fd5b5051604080516370a0823160e01b81526001600160a01b0387811660048301529151929350600092918416916370a0823191602480820192602092909190829003018186803b15801561068d57600080fd5b505afa1580156106a1573d6000803e3d6000fd5b505050506040513d60208110156106b757600080fd5b5051604080516374d7814960e11b81526001600160a01b03888116600483015291519293509085169163e9af02929160248082019260009290919082900301818387803b15801561070757600080fd5b505af1925050508015610718575060015b61078a57610724610c80565b8061072f5750610760565b61075a604051806040016040528060098152602001680636c61696d436f6d760bc1b81525082610880565b5061078a565b61078a604051806040016040528060098152602001680636c61696d436f6d760bc1b815250610a8f565b6000826001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156107d957600080fd5b505afa1580156107ed573d6000803e3d6000fd5b505050506040513d602081101561080357600080fd5b505190506108118183610abf565b9450505050505b919050565b60408051808201909152600c81526b2421b7b6b83a3937b63632b960a11b602082015290565b636139148b60e11b81565b600061087b60017fb2f2618cecbbb6e7468cc0f2aa43858ad8d153e0280b22285e28e853bb9d453a610b08565b905090565b61089061088b610b1b565b610b48565b61089861081d565b83836040516020018085805190602001908083835b602083106108cc5780518252601f1990920191602091820191016108ad565b6001836020036101000a03801982511681845116808217855250505050505090500180605f60f81b81525060010184805190602001908083835b602083106109255780518252601f199092019160209182019101610906565b6001836020036101000a03801982511681845116808217855250505050505090500180605f60f81b81525060010183805190602001908083835b6020831061097e5780518252601f19909201916020918201910161095f565b51815160209384036101000a60001901801990921691161790526101d160f51b919093019081528451600290910192850191508083835b602083106109d45780518252601f1990920191602091820191016109b5565b6001836020036101000a03801982511681845116808217855250505050505090500194505050505060405160208183030381529060405260405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610a54578181015183820152602001610a3c565b50505050905090810190601f168015610a815780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b610abc816040518060400160405280600b81526020016a155b9cdc1958da599a595960aa1b815250610880565b50565b6000610b0183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c20565b9392505050565b6000908152602091909152604090205490565b600061087b60017ff9543f11459ccccd21306c8881aaab675ff49d988c1162fd1dd9bbcdbe4446be610b08565b606081610b6d57506040805180820190915260018152600360fc1b6020820152610818565b6000825b8015610b875760019190910190600a9004610b71565b5060608167ffffffffffffffff81118015610ba157600080fd5b506040519080825280601f01601f191660200182016040528015610bcc576020820181803683370190505b509050815b8015610c1657600a850660300160f81b826001830381518110610bf057fe5b60200101906001600160f81b031916908160001a905350600a8504945060001901610bd1565b5091506108189050565b60008184841115610c725760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610a54578181015183820152602001610a3c565b505050900390565b60e01c90565b600060443d1015610c905761051f565b600481823e6308c379a0610ca48251610c7a565b14610cae5761051f565b6040513d600319016004823e80513d67ffffffffffffffff8160248401118184111715610cde575050505061051f565b82840192508251915080821115610cf8575050505061051f565b503d83016020828401011115610d105750505061051f565b601f01601f191681016020016040529150509056fea2646970667358221220469a822c05f5d922250c9f16485c60262f098ac3e32b938c5d5252177851f8e964736f6c634300060c0033
Deployed Bytecode Sourcemap
27061:1560:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3436:107;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3617:109;;;;;;;;;;;;;:::i;27406:615::-;;;:::i;27197:80::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;27197:80:0;;;;;;;;;;;;;;4932:49;;;;;;;;;;;;;:::i;3324:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3324:40:0;;:::i;24276:479::-;;;:::i;:::-;;3295:22;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3295:22:0;;:::i;28029:589::-;;;;;;;;;;;;;;;;-1:-1:-1;28029:589:0;-1:-1:-1;;;;;28029:589:0;;:::i;27286:112::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4825:51;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;4825:51:0;;;;;;;;;;;;;;3436:107;3477:66;3436:107;:::o;3617:109::-;3660:66;3617:109;:::o;27406:615::-;27453:7;27473:24;27235:42;27473:52;;27536:12;27551:11;-1:-1:-1;;;;;27551:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27551:28:0;;-1:-1:-1;27590:14:0;27607:12;:10;:12::i;:::-;27590:29;;27632:25;27667:4;-1:-1:-1;;;;;27660:22:0;;27683:6;27660:30;;;;;;;;;;;;;-1:-1:-1;;;;;27660:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27660:30:0;27705:29;;;-1:-1:-1;;;27705:29:0;;-1:-1:-1;;;;;27705:29:0;;;;;;;;;27660:30;;-1:-1:-1;27705:21:0;;;;;;:29;;;;;-1:-1:-1;;27705:29:0;;;;;;;;-1:-1:-1;27705:21:0;:29;;;;;;;;;;;;;;;;;;;;;;;;;27701:186;;;;:::i;:::-;;;;;;;;27787:31;;;;;;;;;;;;;;-1:-1:-1;;;27787:31:0;;;27811:6;27787:10;:31::i;:::-;27738:92;27701:186;;;27852:23;;;;;;;;;;;;;;-1:-1:-1;;;27852:23:0;;;:10;:23::i;:::-;27897:24;27931:4;-1:-1:-1;;;;;27924:22:0;;27947:6;27924:30;;;;;;;;;;;;;-1:-1:-1;;;;;27924:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27924:30:0;;-1:-1:-1;27974:39:0;27924:30;27995:17;27974:20;:39::i;:::-;27967:46;;;;;;;27406:615;;:::o;27197:80::-;27235:42;27197:80;:::o;4932:49::-;4974:7;4932:49;:::o;3324:40::-;;;;;;;;;;;;;:::o;24276:479::-;24335:30;;;-1:-1:-1;;;24335:30:0;;;;;;;;;;;;-1:-1:-1;;;24335:30:0;;;;;;;;;;;;;;3295:22;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3295:22:0;:::o;28029:589::-;28090:7;28110:24;27235:42;28110:52;;28173:12;28188:11;-1:-1:-1;;;;;28188:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28188:28:0;28257:30;;;-1:-1:-1;;;28257:30:0;;-1:-1:-1;;;;;28257:30:0;;;;;;;;;28188:28;;-1:-1:-1;28229:25:0;;28257:22;;;;;;:30;;;;;28188:28;;28257:30;;;;;;;;:22;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28257:30:0;28302:29;;;-1:-1:-1;;;28302:29:0;;-1:-1:-1;;;;;28302:29:0;;;;;;;;;28257:30;;-1:-1:-1;28302:21:0;;;;;;:29;;;;;-1:-1:-1;;28302:29:0;;;;;;;;-1:-1:-1;28302:21:0;:29;;;;;;;;;;;;;;;;;;;;;;;;;28298:186;;;;:::i;:::-;;;;;;;;28384:31;;;;;;;;;;;;;;-1:-1:-1;;;28384:31:0;;;28408:6;28384:10;:31::i;:::-;28335:92;28298:186;;;28449:23;;;;;;;;;;;;;;-1:-1:-1;;;28449:23:0;;;:10;:23::i;:::-;28494:24;28528:4;-1:-1:-1;;;;;28521:22:0;;28544:6;28521:30;;;;;;;;;;;;;-1:-1:-1;;;;;28521:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28521:30:0;;-1:-1:-1;28571:39:0;28521:30;28592:17;28571:20;:39::i;:::-;28564:46;;;;;;28029:589;;;;:::o;27286:112::-;27369:21;;;;;;;;;;;;-1:-1:-1;;;27369:21:0;;;;27286:112;:::o;4825:51::-;-1:-1:-1;;;4825:51:0;:::o;4218:112::-;4263:7;4290:32;:5;3477:66;4290:16;:32::i;:::-;4283:39;;4218:112;:::o;25322:470::-;25525:31;25538:17;:15;:17::i;:::-;25525:12;:31::i;:::-;25605:17;:15;:17::i;:::-;25671:12;25733:6;25486:272;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25486:272:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25486:272:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25486:272:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25486:272:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25486:272:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25486:272:0;;;;;;;;;;;-1:-1:-1;;;25486:272:0;;;;;;;;;;;;;;;;;-1:-1:-1;25486:272:0;;;;;;;;;;;;;-1:-1:-1;;25486:272:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25440:344;;-1:-1:-1;;;25440:344:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25800:120;25873:39;25884:12;25873:39;;;;;;;;;;;;;-1:-1:-1;;;25873:39:0;;;:10;:39::i;:::-;25800:120;:::o;13557:136::-;13615:7;13642:43;13646:1;13649;13642:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;13635:50;13557:136;-1:-1:-1;;;13557:136:0:o;2460:203::-;2586:11;2640:12;;;;;;;;;;;;;2460:203::o;4560:119::-;4610:7;4637:34;:5;3660:66;4637:16;:34::i;25928:516::-;25984:13;26014:6;26010:427;;-1:-1:-1;26037:10:0;;;;;;;;;;;;-1:-1:-1;;;26037:10:0;;;;;;26010:427;26080:11;26130:1;26110:85;26133:8;;26110:85;;26174:5;;;;;;26151:2;26143:10;;26110:85;;;;26209:16;26238:3;26228:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26228:14:0;-1:-1:-1;26209:33:0;-1:-1:-1;26274:3:0;26257:136;26279:5;;26257:136;;26346:2;26342:1;:6;26336:2;:13;26323:28;;26310:3;26318:1;26314;:5;26310:10;;;;;;;;;;;:41;-1:-1:-1;;;;;26310:41:0;;;;;;;;-1:-1:-1;26375:2:0;26370:7;;;-1:-1:-1;;;26286:3:0;26257:136;;;-1:-1:-1;26421:3:0;-1:-1:-1;26407:18:0;;-1:-1:-1;26407:18:0;13996:192;14082:7;14118:12;14110:6;;;;14102:29;;;;-1:-1:-1;;;14102:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14154:5:0;;;13996:192::o;110:106:-1:-;195:3;191:15;;163:53::o;224:739::-;;297:4;279:16;276:26;273:2;;;305:5;;273:2;339:1;-1:-1;;318:23;414:10;357:34;-1:-1;382:8;357:34;:::i;:::-;406:19;396:2;;429:5;;396:2;460;454:9;496:16;-1:-1;;492:24;339:1;454:9;468:49;543:4;537:11;624:16;576:18;624:16;617:4;609:6;605:17;602:39;576:18;568:6;565:30;556:91;553:2;;;655:5;;;;;;553:2;693:6;687:4;683:17;672:28;;725:3;719:10;705:24;;576:18;740:6;737:30;734:2;;;770:5;;;;;;734:2;;847:16;841:4;837:27;807:4;814:6;802:3;794:27;;829:36;826:2;;;868:5;;;;;826:2;89:7;73:14;-1:-1;;69:28;892:50;;807:4;892:50;460:2;881:62;900:3;-1:-1;;267:696;:::o
Swarm Source
ipfs://469a822c05f5d922250c9f16485c60262f098ac3e32b938c5d5252177851f8e9
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.