Source Code
Latest 25 from a total of 30 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Redeem | 23345284 | 175 days ago | IN | 0 ETH | 0.00001344 | ||||
| Redeem | 23345277 | 175 days ago | IN | 0 ETH | 0.00001403 | ||||
| Mint | 22129173 | 345 days ago | IN | 0 ETH | 0.00003647 | ||||
| Redeem | 22072772 | 353 days ago | IN | 0 ETH | 0.00003956 | ||||
| Mint | 22071660 | 353 days ago | IN | 0 ETH | 0.00004038 | ||||
| Earn | 21992796 | 364 days ago | IN | 0 ETH | 0.0001413 | ||||
| Earn | 21963730 | 368 days ago | IN | 0 ETH | 0.00015966 | ||||
| Earn | 21920796 | 374 days ago | IN | 0 ETH | 0.00015385 | ||||
| Set Gov | 21914626 | 375 days ago | IN | 0 ETH | 0.00001764 | ||||
| Earn | 21892154 | 378 days ago | IN | 0 ETH | 0.00015806 | ||||
| Deposit | 21878675 | 380 days ago | IN | 0 ETH | 0.00005176 | ||||
| Earn | 21878657 | 380 days ago | IN | 0 ETH | 0.00019299 | ||||
| Earn | 21878646 | 380 days ago | IN | 0 ETH | 0.0001828 | ||||
| Mint | 21871941 | 381 days ago | IN | 0 ETH | 0.00007821 | ||||
| Earn | 21871923 | 381 days ago | IN | 0 ETH | 0.0002071 | ||||
| Set Manager | 21863339 | 382 days ago | IN | 0 ETH | 0.0000222 | ||||
| Set Guard | 21863335 | 382 days ago | IN | 0 ETH | 0.0000204 | ||||
| Set Guard | 21863316 | 382 days ago | IN | 0 ETH | 0.00001961 | ||||
| Set Manager | 21863313 | 382 days ago | IN | 0 ETH | 0.000019 | ||||
| Set Treasury | 21863299 | 382 days ago | IN | 0 ETH | 0.00002211 | ||||
| Earn | 21863263 | 382 days ago | IN | 0 ETH | 0.00014912 | ||||
| Redeem | 21822205 | 388 days ago | IN | 0 ETH | 0.00008379 | ||||
| Deposit | 21820712 | 388 days ago | IN | 0 ETH | 0.00007825 | ||||
| Deposit | 21820392 | 388 days ago | IN | 0 ETH | 0.0000788 | ||||
| Mint | 21820360 | 388 days ago | IN | 0 ETH | 0.00011737 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
VaultManager
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "./ICash.sol";
import "./IVault.sol";
import "./IVaultManager.sol";
import "./GovGuard.sol";
contract VaultManager is GovGuard, IVaultManager {
using SafeERC20 for IERC20;
address public constant dai = 0x6B175474E89094C44Da98b954EedeAC495271d0F;
address public constant usds = 0xdC035D45d973E3EC169d2276DDab16f1e407384F;
address public constant usdc = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
address public constant cash = 0xB6736DcDa3AA3bDBb1E67b9F59B7c977D39b99B8;
address public constant sCash = 0xd19F146A772dF2D551F6F4fce561d6686308ADc1;
address public treasury;
address public manager;
address[] public allowedVaults;
mapping(address => bool) public isAllowedVaults;
uint256 public maxMintAmount;
uint256 public totalMintedCashAmount;
uint256 public lastEarnTs;
event Mint(
address user,
uint256 cashAmount,
address token,
uint256 tokenAmount
);
event Redeem(
address user,
uint256 cashAmount,
address token,
uint256 tokenAmount
);
event RedeemByVault(address user, uint256 amount, address vault);
constructor(
address treasury_,
address manager_,
address gov_,
address guard_
) GovGuard(gov_, guard_) {
treasury = treasury_;
manager = manager_;
}
function mint(address token, uint tokenAmount) external {
require(accept(token), "token not accepted");
uint cashAmount = tokenAmount;
if (token == usdc) {
cashAmount = tokenAmount * 1e12;
}
require(
totalMintedCashAmount + cashAmount <= maxMintAmount,
"exceed max amount"
);
IERC20(token).safeTransferFrom(msg.sender, address(this), tokenAmount);
ICash(cash).mint(msg.sender, cashAmount);
totalMintedCashAmount += cashAmount;
emit Mint(msg.sender, cashAmount, token, tokenAmount);
}
function redeem(address toToken, uint cashAmount) external {
ICash(cash).burn(msg.sender, cashAmount);
totalMintedCashAmount -= cashAmount;
uint tokenAmount = (cashAmount * 9995) / 10000; // 0.05% redeem fee
if (toToken == usdc) {
tokenAmount = tokenAmount / 1e12;
}
IERC20(toToken).safeTransfer(msg.sender, tokenAmount);
emit Redeem(msg.sender, cashAmount, toToken, tokenAmount);
}
function redeemByVault(address user, uint amount) external override {
require(isAllowedVaults[msg.sender], "not allowed vault");
ICash(cash).burn(user, amount);
totalMintedCashAmount -= amount;
emit RedeemByVault(user, amount, msg.sender);
}
function earn() external {
require(lastEarnTs + 3600 <= block.timestamp, "too often");
uint earnBal = tvl() - totalMintedCashAmount;
require(
earnBal * 2000 <= totalMintedCashAmount || msg.sender == guard,
"earn error"
);
if (earnBal > 0) {
uint toTreasury = earnBal / 5; // 20% for treasury
uint toManager = earnBal / 10; // 10% for manager
uint toSCash = earnBal - toTreasury - toManager; // 70% for staker
ICash(cash).mint(sCash, toSCash);
ICash(cash).mint(treasury, toTreasury);
ICash(cash).mint(manager, toManager);
totalMintedCashAmount += earnBal;
}
lastEarnTs = block.timestamp;
}
function setTreasury(address treasury_) external onlyGov {
treasury = treasury_;
}
function setManager(address manager_) external onlyGuard {
manager = manager_;
}
function setMaxMintAmount(uint256 amount_) external onlyGuard {
maxMintAmount = amount_;
}
function addVault(address vault) external onlyGov {
require(!isAllowedVaults[vault], "already added");
allowedVaults.push(vault);
isAllowedVaults[vault] = true;
}
function removeVault(address vault) external onlyGuard {
require(
isAllowedVaults[vault] && IVault(vault).tvl() == 0,
"remove vault error"
);
address lastVault = allowedVaults[allowedVaults.length - 1];
for (uint i = 0; i < allowedVaults.length - 1; i++) {
if (allowedVaults[i] == vault) {
allowedVaults[i] = lastVault;
break;
}
}
allowedVaults.pop();
isAllowedVaults[vault] = false;
}
function deposit(
address vault,
address token,
uint amount
) external onlyGuard {
require(
isAllowedVaults[vault] && IVault(vault).accept(token),
"deposit to vault error"
);
IERC20(token).safeTransfer(vault, amount);
}
function skim(address token, uint amount) external onlyGuard {
require(!accept(token), "skim error");
IERC20(token).safeTransfer(manager, amount);
}
function tvl() public view returns (uint256 v) {
v = IERC20(dai).balanceOf(address(this));
v += IERC20(usds).balanceOf(address(this));
v += IERC20(usdc).balanceOf(address(this)) * 1e12;
for (uint i = 0; i < allowedVaults.length; i++) {
v += IVault(allowedVaults[i]).tvl();
}
}
function accept(address token) public pure returns (bool) {
return token == dai || token == usds || token == usdc;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
*
* Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
* need to send a transaction, and thus is not required to hold Ether at all.
*
* ==== Security Considerations
*
* There are two important considerations concerning the use of `permit`. The first is that a valid permit signature
* expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be
* considered as an intention to spend the allowance in any specific way. The second is that because permits have
* built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should
* take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be
* generally recommended is:
*
* ```solidity
* function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {
* try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}
* doThing(..., value);
* }
*
* function doThing(..., uint256 value) public {
* token.safeTransferFrom(msg.sender, address(this), value);
* ...
* }
* ```
*
* Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of
* `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also
* {SafeERC20-safeTransferFrom}).
*
* Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so
* contracts should have entry points that don't rely on permit.
*/
interface IERC20Permit {
/**
* @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
* given ``owner``'s signed approval.
*
* IMPORTANT: The same issues {IERC20-approve} has related to transaction
* ordering also apply here.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `deadline` must be a timestamp in the future.
* - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
* over the EIP712-formatted function arguments.
* - the signature must use ``owner``'s current nonce (see {nonces}).
*
* For more information on the signature format, see the
* https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
* section].
*
* CAUTION: See Security Considerations above.
*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
/**
* @dev Returns the current nonce for `owner`. This value must be
* included whenever a signature is generated for {permit}.
*
* Every successful call to {permit} increases ``owner``'s nonce by one. This
* prevents a signature from being used multiple times.
*/
function nonces(address owner) external view returns (uint256);
/**
* @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
*/
// solhint-disable-next-line func-name-mixedcase
function DOMAIN_SEPARATOR() external view returns (bytes32);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @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 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 `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.0;
import "../IERC20.sol";
import "../extensions/IERC20Permit.sol";
import "../../../utils/Address.sol";
/**
* @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 Address for address;
/**
* @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*/
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
/**
* @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the
* calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.
*/
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'
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));
}
/**
* @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*/
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 oldAllowance = token.allowance(address(this), spender);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));
}
/**
* @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*/
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));
}
}
/**
* @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval
* to be set to zero before setting it to a non-zero value, such as USDT.
*/
function forceApprove(IERC20 token, address spender, uint256 value) internal {
bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);
if (!_callOptionalReturnBool(token, approvalCall)) {
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));
_callOptionalReturn(token, approvalCall);
}
}
/**
* @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.
* Revert on invalid signature.
*/
function safePermit(
IERC20Permit token,
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) internal {
uint256 nonceBefore = token.nonces(owner);
token.permit(owner, spender, value, deadline, v, r, s);
uint256 nonceAfter = token.nonces(owner);
require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
}
/**
* @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");
require(returndata.length == 0 || abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
/**
* @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).
*
* This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.
*/
function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
// 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 cannot use {Address-functionCall} here since this should return false
// and not revert is the subcall reverts.
(bool success, bytes memory returndata) = address(token).call(data);
return
success && (returndata.length == 0 || abi.decode(returndata, (bool))) && Address.isContract(address(token));
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @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
*
* Furthermore, `isContract` will also return true if the target contract within
* the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
* which only has an effect at the end of a transaction.
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 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://consensys.net/diligence/blog/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.8.0/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");
(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 functionCallWithValue(target, data, 0, "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");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, 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) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
* the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
*
* _Available since v4.8._
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
/**
* @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason or using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) private pure {
// 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
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
abstract contract GovGuard {
address public gov;
address public guard;
modifier onlyGov() {
require(msg.sender == gov, "not gov");
_;
}
modifier onlyGuard() {
require(msg.sender == guard || tx.origin == guard, "not guard");
_;
}
constructor(address gov_, address guard_) {
gov = gov_;
guard = guard_;
}
function setGuard(address guard_) external onlyGov {
guard = guard_;
}
function setGov(address newGov_) external onlyGov {
gov = newGov_;
}
}//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface ICash {
function mint(address to, uint amount) external;
function burn(address from, uint amount) external;
}//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IVault {
function accept(address token) external view returns (bool);
function tvl() external view returns (uint256);
}//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IVaultManager {
function redeemByVault(address user, uint amount) external;
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "shanghai",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"treasury_","type":"address"},{"internalType":"address","name":"manager_","type":"address"},{"internalType":"address","name":"gov_","type":"address"},{"internalType":"address","name":"guard_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"cashAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"cashAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"vault","type":"address"}],"name":"RedeemByVault","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"accept","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"}],"name":"addVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allowedVaults","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cash","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dai","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"guard","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAllowedVaults","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastEarnTs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toToken","type":"address"},{"internalType":"uint256","name":"cashAmount","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"redeemByVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"}],"name":"removeVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sCash","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newGov_","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"guard_","type":"address"}],"name":"setGuard","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager_","type":"address"}],"name":"setManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"treasury_","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"skim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalMintedCashAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tvl","outputs":[{"internalType":"uint256","name":"v","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usds","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608060405234801562000010575f80fd5b5060405162001a8c38038062001a8c83398101604081905262000033916200009f565b5f80546001600160a01b03199081166001600160a01b03948516179091556001805482169284169290921790915560028054821694831694909417909355600380549093169116179055620000f9565b80516001600160a01b03811681146200009a575f80fd5b919050565b5f805f8060808587031215620000b3575f80fd5b620000be8562000083565b9350620000ce6020860162000083565b9250620000de6040860162000083565b9150620000ee6060860162000083565b905092959194509250565b61198580620001075f395ff3fe608060405234801561000f575f80fd5b50600436106101c6575f3560e01c80637db65c8d116100fe578063ceb68c231161009e578063e19a9dd91161006e578063e19a9dd9146103e7578063e5328e06146103fa578063f0f4426014610402578063f4b9fa7514610415575f80fd5b8063ceb68c23146103a6578063cfad57a2146103b9578063d0ebdbe7146103cc578063d389800f146103df575f80fd5b80639644048b116100d95780639644048b1461036e5780639f00592014610377578063b10fbf921461038a578063c03a774c1461039d575f80fd5b80637db65c8d146103255780638340f54914610340578063961be39114610353575f80fd5b80632d28b74911610169578063481c6a7511610144578063481c6a75146102d15780634cf282fb146102e457806361d027b3146102ff5780637ceab3b114610312575f80fd5b80632d28b749146102905780633e413bee146102a357806340c10f19146102be575f80fd5b80631746a22b116101a45780631746a22b146102405780631e9a695014610253578063239c70ae14610266578063256b5a021461027d575f80fd5b8063088a4ed0146101ca5780630d5f4b38146101df57806312d43a5114610216575b5f80fd5b6101dd6101d8366004611703565b610430565b005b6102016101ed366004611735565b60056020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b5f54610228906001600160a01b031681565b6040516001600160a01b03909116815260200161020d565b61022861024e366004611703565b61047d565b6101dd610261366004611755565b6104a5565b61026f60065481565b60405190815260200161020d565b6101dd61028b366004611735565b6105e2565b6101dd61029e366004611755565b6106c9565b61022873a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6101dd6102cc366004611755565b610769565b600354610228906001600160a01b031681565b61022873dc035d45d973e3ec169d2276ddab16f1e407384f81565b600254610228906001600160a01b031681565b600154610228906001600160a01b031681565b61022873d19f146a772df2d551f6f4fce561d6686308adc181565b6101dd61034e36600461177d565b61091f565b61022873b6736dcda3aa3bdbb1e67b9f59b7c977d39b99b881565b61026f60075481565b610201610385366004611735565b610a46565b6101dd610398366004611755565b610abb565b61026f60085481565b6101dd6103b4366004611735565b610bde565b6101dd6103c7366004611735565b610e15565b6101dd6103da366004611735565b610e5f565b6101dd610ec0565b6101dd6103f5366004611735565b61113f565b61026f61118a565b6101dd610410366004611735565b6113ba565b610228736b175474e89094c44da98b954eedeac495271d0f81565b6001546001600160a01b031633148061045357506001546001600160a01b031632145b6104785760405162461bcd60e51b815260040161046f906117b6565b60405180910390fd5b600655565b6004818154811061048c575f80fd5b5f918252602090912001546001600160a01b0316905081565b604051632770a7eb60e21b81523360048201526024810182905273b6736dcda3aa3bdbb1e67b9f59b7c977d39b99b890639dc29fac906044015f604051808303815f87803b1580156104f5575f80fd5b505af1158015610507573d5f803e3d5ffd5b505050508060075f82825461051c91906117ed565b909155505f90506127106105328361270b611800565b61053c9190611817565b905073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb47196001600160a01b038416016105755761057264e8d4a5100082611817565b90505b6105896001600160a01b0384163383611405565b60408051338152602081018490526001600160a01b03851691810191909152606081018290527f5268f300fa85aecf81f5f7e646f56b851cb0527fe7521d2a859f71eb1f3483fd906080015b60405180910390a1505050565b5f546001600160a01b0316331461060b5760405162461bcd60e51b815260040161046f90611836565b6001600160a01b0381165f9081526005602052604090205460ff16156106635760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e481859191959609a1b604482015260640161046f565b6004805460018181019092557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b039093166001600160a01b0319909316831790555f91825260056020526040909120805460ff19169091179055565b6001546001600160a01b03163314806106ec57506001546001600160a01b031632145b6107085760405162461bcd60e51b815260040161046f906117b6565b61071182610a46565b1561074b5760405162461bcd60e51b815260206004820152600a60248201526939b5b4b69032b93937b960b11b604482015260640161046f565b600354610765906001600160a01b03848116911683611405565b5050565b61077282610a46565b6107b35760405162461bcd60e51b81526020600482015260126024820152711d1bdad95b881b9bdd081858d8d95c1d195960721b604482015260640161046f565b8073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb47196001600160a01b038416016107eb576107e88264e8d4a51000611800565b90505b600654816007546107fc9190611857565b111561083e5760405162461bcd60e51b8152602060048201526011602482015270195e18d95959081b585e08185b5bdd5b9d607a1b604482015260640161046f565b6108536001600160a01b038416333085611468565b6040516340c10f1960e01b81523360048201526024810182905273b6736dcda3aa3bdbb1e67b9f59b7c977d39b99b8906340c10f19906044015f604051808303815f87803b1580156108a3575f80fd5b505af11580156108b5573d5f803e3d5ffd5b505050508060075f8282546108ca9190611857565b909155505060408051338152602081018390526001600160a01b03851691810191909152606081018390527ff3f9b81b1aa7af42b83e33d01a22621ecf67d5ebeb4587a4d63e373727607681906080016105d5565b6001546001600160a01b031633148061094257506001546001600160a01b031632145b61095e5760405162461bcd60e51b815260040161046f906117b6565b6001600160a01b0383165f9081526005602052604090205460ff1680156109e857506040516304f802c960e51b81526001600160a01b038381166004830152841690639f00592090602401602060405180830381865afa1580156109c4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e8919061186a565b610a2d5760405162461bcd60e51b81526020600482015260166024820152753232b837b9b4ba103a37903b30bab63a1032b93937b960511b604482015260640161046f565b610a416001600160a01b0383168483611405565b505050565b5f6001600160a01b038216736b175474e89094c44da98b954eedeac495271d0f1480610a8e57506001600160a01b03821673dc035d45d973e3ec169d2276ddab16f1e407384f145b80610ab557506001600160a01b03821673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48145b92915050565b335f9081526005602052604090205460ff16610b0d5760405162461bcd60e51b81526020600482015260116024820152701b9bdd08185b1b1bddd959081d985d5b1d607a1b604482015260640161046f565b604051632770a7eb60e21b81526001600160a01b03831660048201526024810182905273b6736dcda3aa3bdbb1e67b9f59b7c977d39b99b890639dc29fac906044015f604051808303815f87803b158015610b66575f80fd5b505af1158015610b78573d5f803e3d5ffd5b505050508060075f828254610b8d91906117ed565b9091555050604080516001600160a01b038416815260208101839052338183015290517f5dfade3ec7d3fd576a407a4e77404775cdc8a5d90bdc2ad313703e2225781b3e9181900360600190a15050565b6001546001600160a01b0316331480610c0157506001546001600160a01b031632145b610c1d5760405162461bcd60e51b815260040161046f906117b6565b6001600160a01b0381165f9081526005602052604090205460ff168015610ca15750806001600160a01b031663e5328e066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9f9190611889565b155b610ce25760405162461bcd60e51b81526020600482015260126024820152713932b6b7bb32903b30bab63a1032b93937b960711b604482015260640161046f565b600480545f9190610cf5906001906117ed565b81548110610d0557610d056118a0565b5f9182526020822001546001600160a01b031691505b600454610d2a906001906117ed565b811015610dbd57826001600160a01b031660048281548110610d4e57610d4e6118a0565b5f918252602090912001546001600160a01b031603610dab578160048281548110610d7b57610d7b6118a0565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550610dbd565b80610db5816118b4565b915050610d1b565b506004805480610dcf57610dcf6118cc565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092556001600160a01b0393909316815260059092525060409020805460ff19169055565b5f546001600160a01b03163314610e3e5760405162461bcd60e51b815260040161046f90611836565b5f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316331480610e8257506001546001600160a01b031632145b610e9e5760405162461bcd60e51b815260040161046f906117b6565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b42600854610e10610ed19190611857565b1115610f0b5760405162461bcd60e51b81526020600482015260096024820152683a37b79037b33a32b760b91b604482015260640161046f565b5f600754610f1761118a565b610f2191906117ed565b600754909150610f33826107d0611800565b111580610f4a57506001546001600160a01b031633145b610f835760405162461bcd60e51b815260206004820152600a60248201526932b0b9371032b93937b960b11b604482015260640161046f565b8015611138575f610f95600583611817565b90505f610fa3600a84611817565b90505f81610fb184866117ed565b610fbb91906117ed565b6040516340c10f1960e01b815273d19f146a772df2d551f6f4fce561d6686308adc160048201526024810182905290915073b6736dcda3aa3bdbb1e67b9f59b7c977d39b99b8906340c10f19906044015f604051808303815f87803b158015611022575f80fd5b505af1158015611034573d5f803e3d5ffd5b50506002546040516340c10f1960e01b81526001600160a01b0390911660048201526024810186905273b6736dcda3aa3bdbb1e67b9f59b7c977d39b99b892506340c10f1991506044015f604051808303815f87803b158015611095575f80fd5b505af11580156110a7573d5f803e3d5ffd5b50506003546040516340c10f1960e01b81526001600160a01b0390911660048201526024810185905273b6736dcda3aa3bdbb1e67b9f59b7c977d39b99b892506340c10f1991506044015f604051808303815f87803b158015611108575f80fd5b505af115801561111a573d5f803e3d5ffd5b505050508360075f82825461112f9190611857565b90915550505050505b5042600855565b5f546001600160a01b031633146111685760405162461bcd60e51b815260040161046f90611836565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6040516370a0823160e01b81523060048201525f90736b175474e89094c44da98b954eedeac495271d0f906370a0823190602401602060405180830381865afa1580156111d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111fd9190611889565b6040516370a0823160e01b815230600482015290915073dc035d45d973e3ec169d2276ddab16f1e407384f906370a0823190602401602060405180830381865afa15801561124d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112719190611889565b61127b9082611857565b6040516370a0823160e01b815230600482015290915073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48906370a0823190602401602060405180830381865afa1580156112cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ef9190611889565b6112fe9064e8d4a51000611800565b6113089082611857565b90505f5b6004548110156113b65760048181548110611329576113296118a0565b5f918252602091829020015460408051637299470360e11b815290516001600160a01b039092169263e5328e06926004808401938290030181865afa158015611374573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113989190611889565b6113a29083611857565b9150806113ae816118b4565b91505061130c565b5090565b5f546001600160a01b031633146113e35760405162461bcd60e51b815260040161046f90611836565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6040516001600160a01b038316602482015260448101829052610a4190849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526114a6565b6040516001600160a01b03808516602483015283166044820152606481018290526114a09085906323b872dd60e01b90608401611431565b50505050565b5f6114fa826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115799092919063ffffffff16565b905080515f148061151a57508080602001905181019061151a919061186a565b610a415760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161046f565b606061158784845f8561158f565b949350505050565b6060824710156115f05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161046f565b5f80866001600160a01b0316858760405161160b9190611902565b5f6040518083038185875af1925050503d805f8114611645576040519150601f19603f3d011682016040523d82523d5f602084013e61164a565b606091505b509150915061165b87838387611666565b979650505050505050565b606083156116d45782515f036116cd576001600160a01b0385163b6116cd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161046f565b5081611587565b61158783838151156116e95781518083602001fd5b8060405162461bcd60e51b815260040161046f919061191d565b5f60208284031215611713575f80fd5b5035919050565b80356001600160a01b0381168114611730575f80fd5b919050565b5f60208284031215611745575f80fd5b61174e8261171a565b9392505050565b5f8060408385031215611766575f80fd5b61176f8361171a565b946020939093013593505050565b5f805f6060848603121561178f575f80fd5b6117988461171a565b92506117a66020850161171a565b9150604084013590509250925092565b6020808252600990820152681b9bdd0819dd585c9960ba1b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610ab557610ab56117d9565b8082028115828204841417610ab557610ab56117d9565b5f8261183157634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252600790820152663737ba1033b7bb60c91b604082015260600190565b80820180821115610ab557610ab56117d9565b5f6020828403121561187a575f80fd5b8151801515811461174e575f80fd5b5f60208284031215611899575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b5f600182016118c5576118c56117d9565b5060010190565b634e487b7160e01b5f52603160045260245ffd5b5f5b838110156118fa5781810151838201526020016118e2565b50505f910152565b5f82516119138184602087016118e0565b9190910192915050565b602081525f825180602084015261193b8160408501602087016118e0565b601f01601f1916919091016040019291505056fea2646970667358221220f9cdc46f63e8490ce31210bd4c3146ed18224a4f47130b4be060ee0046fef13264736f6c6343000814003300000000000000000000000007463f7eb923dae33bc49a1237630e590d336ecc00000000000000000000000007463f7eb923dae33bc49a1237630e590d336ecc00000000000000000000000007463f7eb923dae33bc49a1237630e590d336ecc00000000000000000000000007463f7eb923dae33bc49a1237630e590d336ecc
Deployed Bytecode
0x608060405234801561000f575f80fd5b50600436106101c6575f3560e01c80637db65c8d116100fe578063ceb68c231161009e578063e19a9dd91161006e578063e19a9dd9146103e7578063e5328e06146103fa578063f0f4426014610402578063f4b9fa7514610415575f80fd5b8063ceb68c23146103a6578063cfad57a2146103b9578063d0ebdbe7146103cc578063d389800f146103df575f80fd5b80639644048b116100d95780639644048b1461036e5780639f00592014610377578063b10fbf921461038a578063c03a774c1461039d575f80fd5b80637db65c8d146103255780638340f54914610340578063961be39114610353575f80fd5b80632d28b74911610169578063481c6a7511610144578063481c6a75146102d15780634cf282fb146102e457806361d027b3146102ff5780637ceab3b114610312575f80fd5b80632d28b749146102905780633e413bee146102a357806340c10f19146102be575f80fd5b80631746a22b116101a45780631746a22b146102405780631e9a695014610253578063239c70ae14610266578063256b5a021461027d575f80fd5b8063088a4ed0146101ca5780630d5f4b38146101df57806312d43a5114610216575b5f80fd5b6101dd6101d8366004611703565b610430565b005b6102016101ed366004611735565b60056020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b5f54610228906001600160a01b031681565b6040516001600160a01b03909116815260200161020d565b61022861024e366004611703565b61047d565b6101dd610261366004611755565b6104a5565b61026f60065481565b60405190815260200161020d565b6101dd61028b366004611735565b6105e2565b6101dd61029e366004611755565b6106c9565b61022873a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6101dd6102cc366004611755565b610769565b600354610228906001600160a01b031681565b61022873dc035d45d973e3ec169d2276ddab16f1e407384f81565b600254610228906001600160a01b031681565b600154610228906001600160a01b031681565b61022873d19f146a772df2d551f6f4fce561d6686308adc181565b6101dd61034e36600461177d565b61091f565b61022873b6736dcda3aa3bdbb1e67b9f59b7c977d39b99b881565b61026f60075481565b610201610385366004611735565b610a46565b6101dd610398366004611755565b610abb565b61026f60085481565b6101dd6103b4366004611735565b610bde565b6101dd6103c7366004611735565b610e15565b6101dd6103da366004611735565b610e5f565b6101dd610ec0565b6101dd6103f5366004611735565b61113f565b61026f61118a565b6101dd610410366004611735565b6113ba565b610228736b175474e89094c44da98b954eedeac495271d0f81565b6001546001600160a01b031633148061045357506001546001600160a01b031632145b6104785760405162461bcd60e51b815260040161046f906117b6565b60405180910390fd5b600655565b6004818154811061048c575f80fd5b5f918252602090912001546001600160a01b0316905081565b604051632770a7eb60e21b81523360048201526024810182905273b6736dcda3aa3bdbb1e67b9f59b7c977d39b99b890639dc29fac906044015f604051808303815f87803b1580156104f5575f80fd5b505af1158015610507573d5f803e3d5ffd5b505050508060075f82825461051c91906117ed565b909155505f90506127106105328361270b611800565b61053c9190611817565b905073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb47196001600160a01b038416016105755761057264e8d4a5100082611817565b90505b6105896001600160a01b0384163383611405565b60408051338152602081018490526001600160a01b03851691810191909152606081018290527f5268f300fa85aecf81f5f7e646f56b851cb0527fe7521d2a859f71eb1f3483fd906080015b60405180910390a1505050565b5f546001600160a01b0316331461060b5760405162461bcd60e51b815260040161046f90611836565b6001600160a01b0381165f9081526005602052604090205460ff16156106635760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e481859191959609a1b604482015260640161046f565b6004805460018181019092557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b039093166001600160a01b0319909316831790555f91825260056020526040909120805460ff19169091179055565b6001546001600160a01b03163314806106ec57506001546001600160a01b031632145b6107085760405162461bcd60e51b815260040161046f906117b6565b61071182610a46565b1561074b5760405162461bcd60e51b815260206004820152600a60248201526939b5b4b69032b93937b960b11b604482015260640161046f565b600354610765906001600160a01b03848116911683611405565b5050565b61077282610a46565b6107b35760405162461bcd60e51b81526020600482015260126024820152711d1bdad95b881b9bdd081858d8d95c1d195960721b604482015260640161046f565b8073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb47196001600160a01b038416016107eb576107e88264e8d4a51000611800565b90505b600654816007546107fc9190611857565b111561083e5760405162461bcd60e51b8152602060048201526011602482015270195e18d95959081b585e08185b5bdd5b9d607a1b604482015260640161046f565b6108536001600160a01b038416333085611468565b6040516340c10f1960e01b81523360048201526024810182905273b6736dcda3aa3bdbb1e67b9f59b7c977d39b99b8906340c10f19906044015f604051808303815f87803b1580156108a3575f80fd5b505af11580156108b5573d5f803e3d5ffd5b505050508060075f8282546108ca9190611857565b909155505060408051338152602081018390526001600160a01b03851691810191909152606081018390527ff3f9b81b1aa7af42b83e33d01a22621ecf67d5ebeb4587a4d63e373727607681906080016105d5565b6001546001600160a01b031633148061094257506001546001600160a01b031632145b61095e5760405162461bcd60e51b815260040161046f906117b6565b6001600160a01b0383165f9081526005602052604090205460ff1680156109e857506040516304f802c960e51b81526001600160a01b038381166004830152841690639f00592090602401602060405180830381865afa1580156109c4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e8919061186a565b610a2d5760405162461bcd60e51b81526020600482015260166024820152753232b837b9b4ba103a37903b30bab63a1032b93937b960511b604482015260640161046f565b610a416001600160a01b0383168483611405565b505050565b5f6001600160a01b038216736b175474e89094c44da98b954eedeac495271d0f1480610a8e57506001600160a01b03821673dc035d45d973e3ec169d2276ddab16f1e407384f145b80610ab557506001600160a01b03821673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48145b92915050565b335f9081526005602052604090205460ff16610b0d5760405162461bcd60e51b81526020600482015260116024820152701b9bdd08185b1b1bddd959081d985d5b1d607a1b604482015260640161046f565b604051632770a7eb60e21b81526001600160a01b03831660048201526024810182905273b6736dcda3aa3bdbb1e67b9f59b7c977d39b99b890639dc29fac906044015f604051808303815f87803b158015610b66575f80fd5b505af1158015610b78573d5f803e3d5ffd5b505050508060075f828254610b8d91906117ed565b9091555050604080516001600160a01b038416815260208101839052338183015290517f5dfade3ec7d3fd576a407a4e77404775cdc8a5d90bdc2ad313703e2225781b3e9181900360600190a15050565b6001546001600160a01b0316331480610c0157506001546001600160a01b031632145b610c1d5760405162461bcd60e51b815260040161046f906117b6565b6001600160a01b0381165f9081526005602052604090205460ff168015610ca15750806001600160a01b031663e5328e066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9f9190611889565b155b610ce25760405162461bcd60e51b81526020600482015260126024820152713932b6b7bb32903b30bab63a1032b93937b960711b604482015260640161046f565b600480545f9190610cf5906001906117ed565b81548110610d0557610d056118a0565b5f9182526020822001546001600160a01b031691505b600454610d2a906001906117ed565b811015610dbd57826001600160a01b031660048281548110610d4e57610d4e6118a0565b5f918252602090912001546001600160a01b031603610dab578160048281548110610d7b57610d7b6118a0565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550610dbd565b80610db5816118b4565b915050610d1b565b506004805480610dcf57610dcf6118cc565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092556001600160a01b0393909316815260059092525060409020805460ff19169055565b5f546001600160a01b03163314610e3e5760405162461bcd60e51b815260040161046f90611836565b5f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316331480610e8257506001546001600160a01b031632145b610e9e5760405162461bcd60e51b815260040161046f906117b6565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b42600854610e10610ed19190611857565b1115610f0b5760405162461bcd60e51b81526020600482015260096024820152683a37b79037b33a32b760b91b604482015260640161046f565b5f600754610f1761118a565b610f2191906117ed565b600754909150610f33826107d0611800565b111580610f4a57506001546001600160a01b031633145b610f835760405162461bcd60e51b815260206004820152600a60248201526932b0b9371032b93937b960b11b604482015260640161046f565b8015611138575f610f95600583611817565b90505f610fa3600a84611817565b90505f81610fb184866117ed565b610fbb91906117ed565b6040516340c10f1960e01b815273d19f146a772df2d551f6f4fce561d6686308adc160048201526024810182905290915073b6736dcda3aa3bdbb1e67b9f59b7c977d39b99b8906340c10f19906044015f604051808303815f87803b158015611022575f80fd5b505af1158015611034573d5f803e3d5ffd5b50506002546040516340c10f1960e01b81526001600160a01b0390911660048201526024810186905273b6736dcda3aa3bdbb1e67b9f59b7c977d39b99b892506340c10f1991506044015f604051808303815f87803b158015611095575f80fd5b505af11580156110a7573d5f803e3d5ffd5b50506003546040516340c10f1960e01b81526001600160a01b0390911660048201526024810185905273b6736dcda3aa3bdbb1e67b9f59b7c977d39b99b892506340c10f1991506044015f604051808303815f87803b158015611108575f80fd5b505af115801561111a573d5f803e3d5ffd5b505050508360075f82825461112f9190611857565b90915550505050505b5042600855565b5f546001600160a01b031633146111685760405162461bcd60e51b815260040161046f90611836565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6040516370a0823160e01b81523060048201525f90736b175474e89094c44da98b954eedeac495271d0f906370a0823190602401602060405180830381865afa1580156111d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111fd9190611889565b6040516370a0823160e01b815230600482015290915073dc035d45d973e3ec169d2276ddab16f1e407384f906370a0823190602401602060405180830381865afa15801561124d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112719190611889565b61127b9082611857565b6040516370a0823160e01b815230600482015290915073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48906370a0823190602401602060405180830381865afa1580156112cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ef9190611889565b6112fe9064e8d4a51000611800565b6113089082611857565b90505f5b6004548110156113b65760048181548110611329576113296118a0565b5f918252602091829020015460408051637299470360e11b815290516001600160a01b039092169263e5328e06926004808401938290030181865afa158015611374573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113989190611889565b6113a29083611857565b9150806113ae816118b4565b91505061130c565b5090565b5f546001600160a01b031633146113e35760405162461bcd60e51b815260040161046f90611836565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6040516001600160a01b038316602482015260448101829052610a4190849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526114a6565b6040516001600160a01b03808516602483015283166044820152606481018290526114a09085906323b872dd60e01b90608401611431565b50505050565b5f6114fa826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115799092919063ffffffff16565b905080515f148061151a57508080602001905181019061151a919061186a565b610a415760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161046f565b606061158784845f8561158f565b949350505050565b6060824710156115f05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161046f565b5f80866001600160a01b0316858760405161160b9190611902565b5f6040518083038185875af1925050503d805f8114611645576040519150601f19603f3d011682016040523d82523d5f602084013e61164a565b606091505b509150915061165b87838387611666565b979650505050505050565b606083156116d45782515f036116cd576001600160a01b0385163b6116cd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161046f565b5081611587565b61158783838151156116e95781518083602001fd5b8060405162461bcd60e51b815260040161046f919061191d565b5f60208284031215611713575f80fd5b5035919050565b80356001600160a01b0381168114611730575f80fd5b919050565b5f60208284031215611745575f80fd5b61174e8261171a565b9392505050565b5f8060408385031215611766575f80fd5b61176f8361171a565b946020939093013593505050565b5f805f6060848603121561178f575f80fd5b6117988461171a565b92506117a66020850161171a565b9150604084013590509250925092565b6020808252600990820152681b9bdd0819dd585c9960ba1b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610ab557610ab56117d9565b8082028115828204841417610ab557610ab56117d9565b5f8261183157634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252600790820152663737ba1033b7bb60c91b604082015260600190565b80820180821115610ab557610ab56117d9565b5f6020828403121561187a575f80fd5b8151801515811461174e575f80fd5b5f60208284031215611899575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b5f600182016118c5576118c56117d9565b5060010190565b634e487b7160e01b5f52603160045260245ffd5b5f5b838110156118fa5781810151838201526020016118e2565b50505f910152565b5f82516119138184602087016118e0565b9190910192915050565b602081525f825180602084015261193b8160408501602087016118e0565b601f01601f1916919091016040019291505056fea2646970667358221220f9cdc46f63e8490ce31210bd4c3146ed18224a4f47130b4be060ee0046fef13264736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000007463f7eb923dae33bc49a1237630e590d336ecc00000000000000000000000007463f7eb923dae33bc49a1237630e590d336ecc00000000000000000000000007463f7eb923dae33bc49a1237630e590d336ecc00000000000000000000000007463f7eb923dae33bc49a1237630e590d336ecc
-----Decoded View---------------
Arg [0] : treasury_ (address): 0x07463f7EB923DaE33bc49a1237630E590D336ECC
Arg [1] : manager_ (address): 0x07463f7EB923DaE33bc49a1237630E590D336ECC
Arg [2] : gov_ (address): 0x07463f7EB923DaE33bc49a1237630E590D336ECC
Arg [3] : guard_ (address): 0x07463f7EB923DaE33bc49a1237630E590D336ECC
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000007463f7eb923dae33bc49a1237630e590d336ecc
Arg [1] : 00000000000000000000000007463f7eb923dae33bc49a1237630e590d336ecc
Arg [2] : 00000000000000000000000007463f7eb923dae33bc49a1237630e590d336ecc
Arg [3] : 00000000000000000000000007463f7eb923dae33bc49a1237630e590d336ecc
Deployed Bytecode Sourcemap
283:5374:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3875:102;;;;;;:::i;:::-;;:::i;:::-;;862:47;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;733:14:9;;726:22;708:41;;696:2;681:18;862:47:8;;;;;;;;89:18:4;;;;;-1:-1:-1;;;;;89:18:4;;;;;;-1:-1:-1;;;;;924:32:9;;;906:51;;894:2;879:18;89::4;760:203:9;826:30:8;;;;;;:::i;:::-;;:::i;2169:454::-;;;;;;:::i;:::-;;:::i;916:28::-;;;;;;;;;1373:25:9;;;1361:2;1346:18;916:28:8;1227:177:9;3983:190:8;;;;;;:::i;:::-;;:::i;5015:168::-;;;;;;:::i;:::-;;:::i;528:73::-;;559:42;528:73;;1556:607;;;;;;:::i;:::-;;:::i;797:22::-;;;;;-1:-1:-1;;;;;797:22:8;;;449:73;;480:42;449:73;;768:23;;;;;-1:-1:-1;;;;;768:23:8;;;113:20:4;;;;;-1:-1:-1;;;;;113:20:4;;;687:74:8;;719:42;687:74;;4710:299;;;;;;:::i;:::-;;:::i;608:73::-;;639:42;608:73;;950:36;;;;;;5527:128;;;;;;:::i;:::-;;:::i;2629:277::-;;;;;;:::i;:::-;;:::i;992:25::-;;;;;;4179:525;;;;;;:::i;:::-;;:::i;535:80:4:-;;;;;;:::i;:::-;;:::i;3777:92:8:-;;;;;;:::i;:::-;;:::i;2912:759::-;;;:::i;447:82:4:-;;;;;;:::i;:::-;;:::i;5189:332:8:-;;;:::i;3677:94::-;;;;;;:::i;:::-;;:::i;371:72::-;;401:42;371:72;;3875:102;283:5:4;;-1:-1:-1;;;;;283:5:4;269:10;:19;;:41;;-1:-1:-1;305:5:4;;-1:-1:-1;;;;;305:5:4;292:9;:18;269:41;261:63;;;;-1:-1:-1;;;261:63:4;;;;;;;:::i;:::-;;;;;;;;;3947:13:8::1;:23:::0;3875:102::o;826:30::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;826:30:8;;-1:-1:-1;826:30:8;:::o;2169:454::-;2238:40;;-1:-1:-1;;;2238:40:8;;2255:10;2238:40;;;2253:51:9;2320:18;;;2313:34;;;639:42:8;;2238:16;;2226:18:9;;2238:40:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2313:10;2288:21;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;2333:16:8;;-1:-1:-1;2374:5:8;2353:17;:10;2366:4;2353:17;:::i;:::-;2352:27;;;;:::i;:::-;2333:46;-1:-1:-1;;;;;;;;2413:15:8;;;2409:78;;2458:18;2472:4;2458:11;:18;:::i;:::-;2444:32;;2409:78;2496:53;-1:-1:-1;;;;;2496:28:8;;2525:10;2537:11;2496:28;:53::i;:::-;2564:52;;;2571:10;3287:34:9;;3352:2;3337:18;;3330:34;;;-1:-1:-1;;;;;3400:15:9;;3380:18;;;3373:43;;;;3447:2;3432:18;;3425:34;;;2564:52:8;;3236:3:9;3221:19;2564:52:8;;;;;;;;2228:395;2169:454;;:::o;3983:190::-;191:3:4;;-1:-1:-1;;;;;191:3:4;177:10;:17;169:37;;;;-1:-1:-1;;;169:37:4;;;;;;;:::i;:::-;-1:-1:-1;;;;;4052:22:8;::::1;;::::0;;;:15:::1;:22;::::0;;;;;::::1;;4051:23;4043:49;;;::::0;-1:-1:-1;;;4043:49:8;;4007:2:9;4043:49:8::1;::::0;::::1;3989:21:9::0;4046:2;4026:18;;;4019:30;-1:-1:-1;;;4065:18:9;;;4058:43;4118:18;;4043:49:8::1;3805:337:9::0;4043:49:8::1;4102:13;:25:::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;-1:-1:-1;;;;;4102:25:8;;::::1;-1:-1:-1::0;;;;;;4102:25:8;;::::1;::::0;::::1;::::0;;-1:-1:-1;4137:22:8;;;:15:::1;4102:25;4137:22:::0;;;;;:29;;-1:-1:-1;;4137:29:8::1;::::0;;::::1;::::0;;3983:190::o;5015:168::-;283:5:4;;-1:-1:-1;;;;;283:5:4;269:10;:19;;:41;;-1:-1:-1;305:5:4;;-1:-1:-1;;;;;305:5:4;292:9;:18;269:41;261:63;;;;-1:-1:-1;;;261:63:4;;;;;;;:::i;:::-;5095:13:8::1;5102:5;5095:6;:13::i;:::-;5094:14;5086:37;;;::::0;-1:-1:-1;;;5086:37:8;;4349:2:9;5086:37:8::1;::::0;::::1;4331:21:9::0;4388:2;4368:18;;;4361:30;-1:-1:-1;;;4407:18:9;;;4400:40;4457:18;;5086:37:8::1;4147:334:9::0;5086:37:8::1;5160:7;::::0;5133:43:::1;::::0;-1:-1:-1;;;;;5133:26:8;;::::1;::::0;5160:7:::1;5169:6:::0;5133:26:::1;:43::i;:::-;5015:168:::0;;:::o;1556:607::-;1630:13;1637:5;1630:6;:13::i;:::-;1622:44;;;;-1:-1:-1;;;1622:44:8;;4688:2:9;1622:44:8;;;4670:21:9;4727:2;4707:18;;;4700:30;-1:-1:-1;;;4746:18:9;;;4739:48;4804:18;;1622:44:8;4486:342:9;1622:44:8;1695:11;-1:-1:-1;;;;;;;1720:13:8;;;1716:75;;1762:18;:11;1776:4;1762:18;:::i;:::-;1749:31;;1716:75;1860:13;;1846:10;1822:21;;:34;;;;:::i;:::-;:51;;1801:115;;;;-1:-1:-1;;;1801:115:8;;5165:2:9;1801:115:8;;;5147:21:9;5204:2;5184:18;;;5177:30;-1:-1:-1;;;5223:18:9;;;5216:47;5280:18;;1801:115:8;4963:341:9;1801:115:8;1926:70;-1:-1:-1;;;;;1926:30:8;;1957:10;1977:4;1984:11;1926:30;:70::i;:::-;2007:40;;-1:-1:-1;;;2007:40:8;;2024:10;2007:40;;;2253:51:9;2320:18;;;2313:34;;;639:42:8;;2007:16;;2226:18:9;;2007:40:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2082:10;2057:21;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;2108:48:8;;;2113:10;3287:34:9;;3352:2;3337:18;;3330:34;;;-1:-1:-1;;;;;3400:15:9;;3380:18;;;3373:43;;;;3447:2;3432:18;;3425:34;;;2108:48:8;;3236:3:9;3221:19;2108:48:8;3018:447:9;4710:299:8;283:5:4;;-1:-1:-1;;;;;283:5:4;269:10;:19;;:41;;-1:-1:-1;305:5:4;;-1:-1:-1;;;;;305:5:4;292:9;:18;269:41;261:63;;;;-1:-1:-1;;;261:63:4;;;;;;;:::i;:::-;-1:-1:-1;;;;;4850:22:8;::::1;;::::0;;;:15:::1;:22;::::0;;;;;::::1;;:53:::0;::::1;;;-1:-1:-1::0;4876:27:8::1;::::0;-1:-1:-1;;;4876:27:8;;-1:-1:-1;;;;;924:32:9;;;4876:27:8::1;::::0;::::1;906:51:9::0;4876:20:8;::::1;::::0;::::1;::::0;879:18:9;;4876:27:8::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4829:122;;;::::0;-1:-1:-1;;;4829:122:8;;5793:2:9;4829:122:8::1;::::0;::::1;5775:21:9::0;5832:2;5812:18;;;5805:30;-1:-1:-1;;;5851:18:9;;;5844:52;5913:18;;4829:122:8::1;5591:346:9::0;4829:122:8::1;4961:41;-1:-1:-1::0;;;;;4961:26:8;::::1;4988:5:::0;4995:6;4961:26:::1;:41::i;:::-;4710:299:::0;;;:::o;5527:128::-;5579:4;-1:-1:-1;;;;;5602:12:8;;401:42;5602:12;;:29;;-1:-1:-1;;;;;;5618:13:8;;480:42;5618:13;5602:29;:46;;;-1:-1:-1;;;;;;5635:13:8;;559:42;5635:13;5602:46;5595:53;5527:128;-1:-1:-1;;5527:128:8:o;2629:277::-;2731:10;2715:27;;;;:15;:27;;;;;;;;2707:57;;;;-1:-1:-1;;;2707:57:8;;6144:2:9;2707:57:8;;;6126:21:9;6183:2;6163:18;;;6156:30;-1:-1:-1;;;6202:18:9;;;6195:47;6259:18;;2707:57:8;5942:341:9;2707:57:8;2774:30;;-1:-1:-1;;;2774:30:8;;-1:-1:-1;;;;;2271:32:9;;2774:30:8;;;2253:51:9;2320:18;;;2313:34;;;639:42:8;;2774:16;;2226:18:9;;2774:30:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2839:6;2814:21;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;2860:39:8;;;-1:-1:-1;;;;;6546:15:9;;6528:34;;6593:2;6578:18;;6571:34;;;2888:10:8;6621:18:9;;;6614:43;2860:39:8;;;;;;;6478:2:9;2860:39:8;;;2629:277;;:::o;4179:525::-;283:5:4;;-1:-1:-1;;;;;283:5:4;269:10;:19;;:41;;-1:-1:-1;305:5:4;;-1:-1:-1;;;;;305:5:4;292:9;:18;269:41;261:63;;;;-1:-1:-1;;;261:63:4;;;;;;;:::i;:::-;-1:-1:-1;;;;;4265:22:8;::::1;;::::0;;;:15:::1;:22;::::0;;;;;::::1;;:50:::0;::::1;;;;4298:5;-1:-1:-1::0;;;;;4291:17:8::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:24:::0;4265:50:::1;4244:115;;;::::0;-1:-1:-1;;;4244:115:8;;7059:2:9;4244:115:8::1;::::0;::::1;7041:21:9::0;7098:2;7078:18;;;7071:30;-1:-1:-1;;;7117:18:9;;;7110:48;7175:18;;4244:115:8::1;6857:342:9::0;4244:115:8::1;4389:13;4403:20:::0;;4369:17:::1;::::0;4389:13;4403:24:::1;::::0;4426:1:::1;::::0;4403:24:::1;:::i;:::-;4389:39;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;4389:39:8::1;::::0;-1:-1:-1;4438:191:8::1;4459:13;:20:::0;:24:::1;::::0;4482:1:::1;::::0;4459:24:::1;:::i;:::-;4455:1;:28;4438:191;;;4528:5;-1:-1:-1::0;;;;;4508:25:8::1;:13;4522:1;4508:16;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;4508:16:8::1;:25:::0;4504:115:::1;;4572:9;4553:13;4567:1;4553:16;;;;;;;;:::i;:::-;;;;;;;;;:28;;;;;-1:-1:-1::0;;;;;4553:28:8::1;;;;;-1:-1:-1::0;;;;;4553:28:8::1;;;;;;4599:5;;4504:115;4485:3:::0;::::1;::::0;::::1;:::i;:::-;;;;4438:191;;;;4638:13;:19;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;-1:-1:-1;;4638:19:8;;;;;-1:-1:-1;;;;;;4638:19:8::1;::::0;;;;;;;;-1:-1:-1;;;;;4667:22:8;;;::::1;::::0;;:15:::1;:22:::0;;;-1:-1:-1;4667:22:8;;;:30;;-1:-1:-1;;4667:30:8::1;::::0;;4179:525::o;535:80:4:-;191:3;;-1:-1:-1;;;;;191:3:4;177:10;:17;169:37;;;;-1:-1:-1;;;169:37:4;;;;;;;:::i;:::-;595:3:::1;:13:::0;;-1:-1:-1;;;;;;595:13:4::1;-1:-1:-1::0;;;;;595:13:4;;;::::1;::::0;;;::::1;::::0;;535:80::o;3777:92:8:-;283:5:4;;-1:-1:-1;;;;;283:5:4;269:10;:19;;:41;;-1:-1:-1;305:5:4;;-1:-1:-1;;;;;305:5:4;292:9;:18;269:41;261:63;;;;-1:-1:-1;;;261:63:4;;;;;;;:::i;:::-;3844:7:8::1;:18:::0;;-1:-1:-1;;;;;;3844:18:8::1;-1:-1:-1::0;;;;;3844:18:8;;;::::1;::::0;;;::::1;::::0;;3777:92::o;2912:759::-;2976:15;2955:10;;2968:4;2955:17;;;;:::i;:::-;:36;;2947:58;;;;-1:-1:-1;;;2947:58:8;;7810:2:9;2947:58:8;;;7792:21:9;7849:1;7829:18;;;7822:29;-1:-1:-1;;;7867:18:9;;;7860:39;7916:18;;2947:58:8;7608:332:9;2947:58:8;3015:12;3038:21;;3030:5;:3;:5::i;:::-;:29;;;;:::i;:::-;3108:21;;3015:44;;-1:-1:-1;3090:14:8;3015:44;3100:4;3090:14;:::i;:::-;:39;;:62;;;-1:-1:-1;3147:5:8;;-1:-1:-1;;;;;3147:5:8;3133:10;:19;3090:62;3069:119;;;;-1:-1:-1;;;3069:119:8;;8147:2:9;3069:119:8;;;8129:21:9;8186:2;8166:18;;;8159:30;-1:-1:-1;;;8205:18:9;;;8198:40;8255:18;;3069:119:8;7945:334:9;3069:119:8;3203:11;;3199:428;;3230:15;3248:11;3258:1;3248:7;:11;:::i;:::-;3230:29;-1:-1:-1;3293:14:8;3310:12;3320:2;3310:7;:12;:::i;:::-;3293:29;-1:-1:-1;3355:12:8;3293:29;3370:20;3380:10;3370:7;:20;:::i;:::-;:32;;;;:::i;:::-;3435;;-1:-1:-1;;;3435:32:8;;719:42;3435:32;;;2253:51:9;2320:18;;;2313:34;;;3355:47:8;;-1:-1:-1;639:42:8;;3435:16;;2226:18:9;;3435:32:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3498:8:8;;3481:38;;-1:-1:-1;;;3481:38:8;;-1:-1:-1;;;;;3498:8:8;;;3481:38;;;2253:51:9;2320:18;;;2313:34;;;639:42:8;;-1:-1:-1;3481:16:8;;-1:-1:-1;2226:18:9;;3481:38:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3550:7:8;;3533:36;;-1:-1:-1;;;3533:36:8;;-1:-1:-1;;;;;3550:7:8;;;3533:36;;;2253:51:9;2320:18;;;2313:34;;;639:42:8;;-1:-1:-1;3533:16:8;;-1:-1:-1;2226:18:9;;3533:36:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3609:7;3584:21;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;3199:428:8;-1:-1:-1;3649:15:8;3636:10;:28;2912:759::o;447:82:4:-;191:3;;-1:-1:-1;;;;;191:3:4;177:10;:17;169:37;;;;-1:-1:-1;;;169:37:4;;;;;;;:::i;:::-;508:5:::1;:14:::0;;-1:-1:-1;;;;;;508:14:4::1;-1:-1:-1::0;;;;;508:14:4;;;::::1;::::0;;;::::1;::::0;;447:82::o;5189:332:8:-;5250:36;;-1:-1:-1;;;5250:36:8;;5280:4;5250:36;;;906:51:9;5225:9:8;;401:42;;5250:21;;879:18:9;;5250:36:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5301:37;;-1:-1:-1;;;5301:37:8;;5332:4;5301:37;;;906:51:9;5246:40:8;;-1:-1:-1;480:42:8;;5301:22;;879:18:9;;5301:37:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5296:42;;;;:::i;:::-;5353:37;;-1:-1:-1;;;5353:37:8;;5384:4;5353:37;;;906:51:9;5296:42:8;;-1:-1:-1;559:42:8;;5353:22;;879:18:9;;5353:37:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;5393:4;5353:44;:::i;:::-;5348:49;;;;:::i;:::-;;;5412:6;5407:108;5428:13;:20;5424:24;;5407:108;;;5481:13;5495:1;5481:16;;;;;;;;:::i;:::-;;;;;;;;;;;;5474:30;;;-1:-1:-1;;;5474:30:8;;;;-1:-1:-1;;;;;5481:16:8;;;;5474:28;;:30;;;;;;;;;;5481:16;5474:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5469:35;;;;:::i;:::-;;-1:-1:-1;5450:3:8;;;;:::i;:::-;;;;5407:108;;;;5189:332;:::o;3677:94::-;191:3:4;;-1:-1:-1;;;;;191:3:4;177:10;:17;169:37;;;;-1:-1:-1;;;169:37:4;;;;;;;:::i;:::-;3744:8:8::1;:20:::0;;-1:-1:-1;;;;;;3744:20:8::1;-1:-1:-1::0;;;;;3744:20:8;;;::::1;::::0;;;::::1;::::0;;3677:94::o;941:175:2:-;1050:58;;-1:-1:-1;;;;;2271:32:9;;1050:58:2;;;2253:51:9;2320:18;;;2313:34;;;1023:86:2;;1043:5;;-1:-1:-1;;;1073:23:2;2226:18:9;;1050:58:2;;;;-1:-1:-1;;1050:58:2;;;;;;;;;;;;;;-1:-1:-1;;;;;1050:58:2;-1:-1:-1;;;;;;1050:58:2;;;;;;;;;;1023:19;:86::i;1355:203::-;1482:68;;-1:-1:-1;;;;;8542:15:9;;;1482:68:2;;;8524:34:9;8594:15;;8574:18;;;8567:43;8626:18;;;8619:34;;;1455:96:2;;1475:5;;-1:-1:-1;;;1505:27:2;8459:18:9;;1482:68:2;8284:375:9;1455:96:2;1355:203;;;;:::o;5196:642::-;5615:23;5641:69;5669:4;5641:69;;;;;;;;;;;;;;;;;5649:5;-1:-1:-1;;;;;5641:27:2;;;:69;;;;;:::i;:::-;5615:95;;5728:10;:17;5749:1;5728:22;:56;;;;5765:10;5754:30;;;;;;;;;;;;:::i;:::-;5720:111;;;;-1:-1:-1;;;5720:111:2;;8866:2:9;5720:111:2;;;8848:21:9;8905:2;8885:18;;;8878:30;8944:34;8924:18;;;8917:62;-1:-1:-1;;;8995:18:9;;;8988:40;9045:19;;5720:111:2;8664:406:9;4108:223:3;4241:12;4272:52;4294:6;4302:4;4308:1;4311:12;4272:21;:52::i;:::-;4265:59;4108:223;-1:-1:-1;;;;4108:223:3:o;5165:446::-;5330:12;5387:5;5362:21;:30;;5354:81;;;;-1:-1:-1;;;5354:81:3;;9277:2:9;5354:81:3;;;9259:21:9;9316:2;9296:18;;;9289:30;9355:34;9335:18;;;9328:62;-1:-1:-1;;;9406:18:9;;;9399:36;9452:19;;5354:81:3;9075:402:9;5354:81:3;5446:12;5460:23;5487:6;-1:-1:-1;;;;;5487:11:3;5506:5;5513:4;5487:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5445:73;;;;5535:69;5562:6;5570:7;5579:10;5591:12;5535:26;:69::i;:::-;5528:76;5165:446;-1:-1:-1;;;;;;;5165:446:3:o;7671:628::-;7851:12;7879:7;7875:418;;;7906:10;:17;7927:1;7906:22;7902:286;;-1:-1:-1;;;;;1702:19:3;;;8113:60;;;;-1:-1:-1;;;8113:60:3;;10231:2:9;8113:60:3;;;10213:21:9;10270:2;10250:18;;;10243:30;10309:31;10289:18;;;10282:59;10358:18;;8113:60:3;10029:353:9;8113:60:3;-1:-1:-1;8208:10:3;8201:17;;7875:418;8249:33;8257:10;8269:12;8980:17;;:21;8976:379;;9208:10;9202:17;9264:15;9251:10;9247:2;9243:19;9236:44;8976:379;9331:12;9324:20;;-1:-1:-1;;;9324:20:3;;;;;;;;:::i;14:180:9:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:9;;14:180;-1:-1:-1;14:180:9:o;199:173::-;267:20;;-1:-1:-1;;;;;316:31:9;;306:42;;296:70;;362:1;359;352:12;296:70;199:173;;;:::o;377:186::-;436:6;489:2;477:9;468:7;464:23;460:32;457:52;;;505:1;502;495:12;457:52;528:29;547:9;528:29;:::i;:::-;518:39;377:186;-1:-1:-1;;;377:186:9:o;968:254::-;1036:6;1044;1097:2;1085:9;1076:7;1072:23;1068:32;1065:52;;;1113:1;1110;1103:12;1065:52;1136:29;1155:9;1136:29;:::i;:::-;1126:39;1212:2;1197:18;;;;1184:32;;-1:-1:-1;;;968:254:9:o;1409:328::-;1486:6;1494;1502;1555:2;1543:9;1534:7;1530:23;1526:32;1523:52;;;1571:1;1568;1561:12;1523:52;1594:29;1613:9;1594:29;:::i;:::-;1584:39;;1642:38;1676:2;1665:9;1661:18;1642:38;:::i;:::-;1632:48;;1727:2;1716:9;1712:18;1699:32;1689:42;;1409:328;;;;;:::o;1742:332::-;1944:2;1926:21;;;1983:1;1963:18;;;1956:29;-1:-1:-1;;;2016:2:9;2001:18;;1994:39;2065:2;2050:18;;1742:332::o;2358:127::-;2419:10;2414:3;2410:20;2407:1;2400:31;2450:4;2447:1;2440:15;2474:4;2471:1;2464:15;2490:128;2557:9;;;2578:11;;;2575:37;;;2592:18;;:::i;2623:168::-;2696:9;;;2727;;2744:15;;;2738:22;;2724:37;2714:71;;2765:18;;:::i;2796:217::-;2836:1;2862;2852:132;;2906:10;2901:3;2897:20;2894:1;2887:31;2941:4;2938:1;2931:15;2969:4;2966:1;2959:15;2852:132;-1:-1:-1;2998:9:9;;2796:217::o;3470:330::-;3672:2;3654:21;;;3711:1;3691:18;;;3684:29;-1:-1:-1;;;3744:2:9;3729:18;;3722:37;3791:2;3776:18;;3470:330::o;4833:125::-;4898:9;;;4919:10;;;4916:36;;;4932:18;;:::i;5309:277::-;5376:6;5429:2;5417:9;5408:7;5404:23;5400:32;5397:52;;;5445:1;5442;5435:12;5397:52;5477:9;5471:16;5530:5;5523:13;5516:21;5509:5;5506:32;5496:60;;5552:1;5549;5542:12;6668:184;6738:6;6791:2;6779:9;6770:7;6766:23;6762:32;6759:52;;;6807:1;6804;6797:12;6759:52;-1:-1:-1;6830:16:9;;6668:184;-1:-1:-1;6668:184:9:o;7204:127::-;7265:10;7260:3;7256:20;7253:1;7246:31;7296:4;7293:1;7286:15;7320:4;7317:1;7310:15;7336:135;7375:3;7396:17;;;7393:43;;7416:18;;:::i;:::-;-1:-1:-1;7463:1:9;7452:13;;7336:135::o;7476:127::-;7537:10;7532:3;7528:20;7525:1;7518:31;7568:4;7565:1;7558:15;7592:4;7589:1;7582:15;9482:250;9567:1;9577:113;9591:6;9588:1;9585:13;9577:113;;;9667:11;;;9661:18;9648:11;;;9641:39;9613:2;9606:10;9577:113;;;-1:-1:-1;;9724:1:9;9706:16;;9699:27;9482:250::o;9737:287::-;9866:3;9904:6;9898:13;9920:66;9979:6;9974:3;9967:4;9959:6;9955:17;9920:66;:::i;:::-;10002:16;;;;;9737:287;-1:-1:-1;;9737:287:9:o;10387:396::-;10536:2;10525:9;10518:21;10499:4;10568:6;10562:13;10611:6;10606:2;10595:9;10591:18;10584:34;10627:79;10699:6;10694:2;10683:9;10679:18;10674:2;10666:6;10662:15;10627:79;:::i;:::-;10767:2;10746:15;-1:-1:-1;;10742:29:9;10727:45;;;;10774:2;10723:54;;10387:396;-1:-1:-1;;10387:396:9:o
Swarm Source
ipfs://f9cdc46f63e8490ce31210bd4c3146ed18224a4f47130b4be060ee0046fef132
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.36
Net Worth in ETH
0.000181
Token Allocations
USDS
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $0.999914 | 0.3579 | $0.3578 |
Loading...
Loading
Loading...
Loading
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.