Source Code
Latest 25 from a total of 160 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Claim | 9067670 | 703 days ago | IN | 0 ETH | 0.00006934 | ||||
| Claim | 7533929 | 738 days ago | IN | 0 ETH | 0.00006619 | ||||
| Claim | 7533856 | 738 days ago | IN | 0 ETH | 0.00006341 | ||||
| Claim | 7449951 | 740 days ago | IN | 0 ETH | 0.00009739 | ||||
| Claim | 6378494 | 765 days ago | IN | 0 ETH | 0.00021637 | ||||
| Claim | 6300338 | 767 days ago | IN | 0 ETH | 0.00003922 | ||||
| Claim | 6041758 | 773 days ago | IN | 0 ETH | 0.00009667 | ||||
| Claim | 4850955 | 800 days ago | IN | 0 ETH | 0.00000967 | ||||
| Claim | 4842507 | 800 days ago | IN | 0 ETH | 0.00001832 | ||||
| Claim | 4791637 | 802 days ago | IN | 0 ETH | 0.00001289 | ||||
| Claim | 4721914 | 803 days ago | IN | 0 ETH | 0.00002675 | ||||
| Claim | 4713827 | 803 days ago | IN | 0 ETH | 0.00000952 | ||||
| Claim | 4626117 | 805 days ago | IN | 0 ETH | 0.00002138 | ||||
| Claim | 4534333 | 807 days ago | IN | 0 ETH | 0.00002328 | ||||
| Claim | 4534300 | 807 days ago | IN | 0 ETH | 0.00002277 | ||||
| Claim | 4416473 | 810 days ago | IN | 0 ETH | 0.00002205 | ||||
| Claim | 4334521 | 812 days ago | IN | 0 ETH | 0.00001235 | ||||
| Claim | 4231726 | 814 days ago | IN | 0 ETH | 0.00002633 | ||||
| Claim | 4197566 | 815 days ago | IN | 0 ETH | 0.00001329 | ||||
| Claim | 3945111 | 821 days ago | IN | 0 ETH | 0.00002702 | ||||
| Claim | 3917535 | 822 days ago | IN | 0 ETH | 0.00002249 | ||||
| Claim | 3886479 | 822 days ago | IN | 0 ETH | 0.00001159 | ||||
| Claim | 3886352 | 822 days ago | IN | 0 ETH | 0.00001314 | ||||
| Claim | 3789559 | 825 days ago | IN | 0 ETH | 0.00001838 | ||||
| Claim | 3691135 | 827 days ago | IN | 0 ETH | 0.00001985 |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
AirdropClaim
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/**
*Submitted for verification at basescan.org on 2023-08-07
*/
// SPDX-License-Identifier: MIT
pragma solidity 0.8.13;
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)
/**
* @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);
}
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/utils/SafeERC20.sol)
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/IERC20Permit.sol)
/**
* @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.
*/
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].
*/
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);
}
// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)
/**
* @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);
}
}
}
/**
* @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. Compatible with tokens that require the approval to be set to
* 0 before setting it to a non-zero value.
*/
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));
}
}
// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be _NOT_ENTERED
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
/**
* @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
* `nonReentrant` function in the call stack.
*/
function _reentrancyGuardEntered() internal view returns (bool) {
return _status == _ENTERED;
}
}
interface IOptionToken {
function mint(address _to, uint256 _amount) external;
function exercise(
uint256 _amount,
uint256 _maxPaymentAmount,
address _recipient
) external returns (uint256);
function paymentToken() external returns (address);
function underlyingToken() external returns (address);
function getDiscountedPrice(uint256 _amount) external view returns (uint256);
}
contract AirdropClaim is ReentrancyGuard {
using SafeERC20 for IERC20;
uint256 constant public PRECISION = 1000;
uint256 public totalAirdrop;
uint256 public totalToReceive;
uint256 public totalWalletsIncluded;
uint256 public totalWalletsClaimed;
uint256 public totalVeFLOWClaimed;
bool public seeded;
address public owner;
address public msig;
address public optionToken;
IERC20 public token;
uint public constant LOCK = 52 * 7 * 86400;
mapping(address => uint) public claimableAmount;
mapping(address => bool) public userClaimed;
modifier onlyOwner {
require(msg.sender == owner, 'not owner');
_;
}
event Deposit(uint256 amount);
event Withdraw(uint256 amount);
event Claimed(address _who, uint amount);
event AirdropSet(uint walletAdded, uint walletTotal, uint veCHRAdded, uint veCHRTotal);
constructor(address _token, address _optionToken, address _msig) {
owner = msg.sender;
token = IERC20(_token);
optionToken = _optionToken;
msig = _msig;
}
function deposit(uint256 amount) external {
require(msg.sender == owner);
token.safeTransferFrom(msg.sender, address(this), amount);
totalAirdrop += amount;
seeded = true;
emit Deposit(amount);
}
function withdraw(uint256 amount, address _token) external {
require(msg.sender == owner);
IERC20(_token).safeTransfer(msig, amount);
totalAirdrop -= amount;
emit Withdraw(amount);
}
/*
OWNER FUNCTIONS
*/
function setOwner(address _owner) external onlyOwner{
require(_owner != address(0));
owner = _owner;
}
/// @notice set user infromation for the airdrop claim
/// @param _who who can receive the airdrop
/// @param _amount the amount he can receive
function setAirdropReceivers(address[] memory _who, uint256[] memory _amount) external onlyOwner {
require(_who.length == _amount.length);
uint _totalToReceive;
for (uint i = 0; i < _who.length; i++) {
claimableAmount[_who[i]] += _amount[i];
_totalToReceive += _amount[i];
userClaimed[_who[i]] = false;
}
totalToReceive += _totalToReceive;
totalWalletsIncluded += _who.length;
emit AirdropSet(_who.length,totalWalletsIncluded, _totalToReceive, totalToReceive);
}
function claim() external nonReentrant returns(uint _tokenId){
// check user has airdrop available
require(claimableAmount[msg.sender] != 0, "No airdrop available");
uint amount = claimableAmount[msg.sender];
claimableAmount[msg.sender] = 0;
token.approve(optionToken, 0);
token.approve(optionToken, amount);
IOptionToken(optionToken).mint(msg.sender, amount);
userClaimed[msg.sender] = true;
totalWalletsClaimed += 1;
totalVeFLOWClaimed += amount;
emit Claimed(msg.sender, amount);
}
function claimable(address user) public view returns(uint _claimable){
_claimable = claimableAmount[user];
}
function emergencyWithdraw(address _token, uint amount) onlyOwner external{
IERC20(_token).safeTransfer(msig, amount);
totalAirdrop -= amount;
emit Withdraw(amount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_optionToken","type":"address"},{"internalType":"address","name":"_msig","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"walletAdded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"walletTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"veCHRAdded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"veCHRTotal","type":"uint256"}],"name":"AirdropSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_who","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"LOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"claimable","outputs":[{"internalType":"uint256","name":"_claimable","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimableAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"msig","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"optionToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"seeded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_who","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"setAirdropReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAirdrop","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalToReceive","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalVeFLOWClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWalletsClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWalletsIncluded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b5060405161113538038061113583398101604081905261002f916100aa565b600160005560068054610100600160a81b0319163361010002179055600980546001600160a01b03199081166001600160a01b0395861617909155600880548216938516939093179092556007805490921692169190911790556100ed565b80516001600160a01b03811681146100a557600080fd5b919050565b6000806000606084860312156100bf57600080fd5b6100c88461008e565b92506100d66020850161008e565b91506100e46040850161008e565b90509250925092565b611039806100fc6000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80637bb453bf116100b857806396b826cc1161007c57806396b826cc1461029e578063a4f0d7d0146102a7578063aaf5eb68146102b2578063ac9332e9146102bb578063b6b55f25146102c4578063fc0c546a146102d757600080fd5b80637bb453bf146102375780637dd980a21461024a57806389885049146102535780638da5cb5b1461027357806395ccea671461028b57600080fd5b8063402914f5116100ff578063402914f5146101d35780634534a63f1461020a57806345517f621461021d5780634e71d92d146102265780635ce97dbb1461022e57600080fd5b8062f714ce1461013b57806313af4035146101505780632bab754b14610163578063334041a6146101935780633b7fcdca146101b0575b600080fd5b61014e610149366004610ca8565b6102ea565b005b61014e61015e366004610cd4565b61036f565b600854610176906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6006546101a09060ff1681565b604051901515815260200161018a565b6101a06101be366004610cd4565b600b6020526000908152604090205460ff1681565b6101fc6101e1366004610cd4565b6001600160a01b03166000908152600a602052604090205490565b60405190815260200161018a565b61014e610218366004610dcc565b6103e2565b6101fc60035481565b6101fc6105a0565b6101fc60015481565b600754610176906001600160a01b031681565b6101fc60045481565b6101fc610261366004610cd4565b600a6020526000908152604090205481565b6006546101769061010090046001600160a01b031681565b61014e610299366004610e8c565b610803565b6101fc60055481565b6101fc6301dfe20081565b6101fc6103e881565b6101fc60025481565b61014e6102d2366004610eb6565b610893565b600954610176906001600160a01b031681565b60065461010090046001600160a01b0316331461030657600080fd5b600754610320906001600160a01b03838116911684610928565b81600160008282546103329190610ee5565b90915550506040518281527f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d906020015b60405180910390a15050565b60065461010090046001600160a01b031633146103a75760405162461bcd60e51b815260040161039e90610efc565b60405180910390fd5b6001600160a01b0381166103ba57600080fd5b600680546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60065461010090046001600160a01b031633146104115760405162461bcd60e51b815260040161039e90610efc565b805182511461041f57600080fd5b6000805b835181101561051d5782818151811061043e5761043e610f1f565b6020026020010151600a600086848151811061045c5761045c610f1f565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008282546104939190610f35565b925050819055508281815181106104ac576104ac610f1f565b6020026020010151826104bf9190610f35565b91506000600b60008684815181106104d9576104d9610f1f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061051581610f4d565b915050610423565b5080600260008282546105309190610f35565b9091555050825160038054600090610549908490610f35565b909155505082516003546002546040805193845260208401929092528282018490526060830152517fb55d98c9c0ed65c548455eba0235ab22f71e6f2acfe162a3b99cda0ff2fcd19f9181900360800190a1505050565b60006105aa610990565b336000908152600a602052604081205490036105ff5760405162461bcd60e51b81526020600482015260146024820152734e6f2061697264726f7020617661696c61626c6560601b604482015260640161039e565b336000908152600a6020526040808220805490839055600954600854925163095ea7b360e01b81526001600160a01b0393841660048201526024810194909452909291169063095ea7b3906044016020604051808303816000875af115801561066c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106909190610f66565b5060095460085460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905291169063095ea7b3906044016020604051808303816000875af11580156106e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070a9190610f66565b506008546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f1990604401600060405180830381600087803b15801561075757600080fd5b505af115801561076b573d6000803e3d6000fd5b5050336000908152600b60205260408120805460ff1916600190811790915560048054919450925061079e908490610f35565b9250508190555080600560008282546107b79190610f35565b909155505060408051338152602081018390527fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a910160405180910390a1506108006001600055565b90565b60065461010090046001600160a01b031633146108325760405162461bcd60e51b815260040161039e90610efc565b60075461084c906001600160a01b03848116911683610928565b806001600082825461085e9190610ee5565b90915550506040518181527f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d90602001610363565b60065461010090046001600160a01b031633146108af57600080fd5b6009546108c7906001600160a01b03163330846109e9565b80600160008282546108d99190610f35565b90915550506006805460ff191660011790556040517f4d6ce1e535dbade1c23defba91e23b8f791ce5edc0cc320257a2b364e4e384269061091d9083815260200190565b60405180910390a150565b6040516001600160a01b03831660248201526044810182905261098b90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a27565b505050565b6002600054036109e25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161039e565b6002600055565b6040516001600160a01b0380851660248301528316604482015260648101829052610a219085906323b872dd60e01b90608401610954565b50505050565b6000610a7c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610afc9092919063ffffffff16565b9050805160001480610a9d575080806020019051810190610a9d9190610f66565b61098b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161039e565b6060610b0b8484600085610b13565b949350505050565b606082471015610b745760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161039e565b600080866001600160a01b03168587604051610b909190610fb4565b60006040518083038185875af1925050503d8060008114610bcd576040519150601f19603f3d011682016040523d82523d6000602084013e610bd2565b606091505b5091509150610be387838387610bee565b979650505050505050565b60608315610c5d578251600003610c56576001600160a01b0385163b610c565760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161039e565b5081610b0b565b610b0b8383815115610c725781518083602001fd5b8060405162461bcd60e51b815260040161039e9190610fd0565b80356001600160a01b0381168114610ca357600080fd5b919050565b60008060408385031215610cbb57600080fd5b82359150610ccb60208401610c8c565b90509250929050565b600060208284031215610ce657600080fd5b610cef82610c8c565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610d3557610d35610cf6565b604052919050565b600067ffffffffffffffff821115610d5757610d57610cf6565b5060051b60200190565b600082601f830112610d7257600080fd5b81356020610d87610d8283610d3d565b610d0c565b82815260059290921b84018101918181019086841115610da657600080fd5b8286015b84811015610dc15780358352918301918301610daa565b509695505050505050565b60008060408385031215610ddf57600080fd5b823567ffffffffffffffff80821115610df757600080fd5b818501915085601f830112610e0b57600080fd5b81356020610e1b610d8283610d3d565b82815260059290921b84018101918181019089841115610e3a57600080fd5b948201945b83861015610e5f57610e5086610c8c565b82529482019490820190610e3f565b96505086013592505080821115610e7557600080fd5b50610e8285828601610d61565b9150509250929050565b60008060408385031215610e9f57600080fd5b610ea883610c8c565b946020939093013593505050565b600060208284031215610ec857600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610ef757610ef7610ecf565b500390565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60008219821115610f4857610f48610ecf565b500190565b600060018201610f5f57610f5f610ecf565b5060010190565b600060208284031215610f7857600080fd5b81518015158114610cef57600080fd5b60005b83811015610fa3578181015183820152602001610f8b565b83811115610a215750506000910152565b60008251610fc6818460208701610f88565b9190910192915050565b6020815260008251806020840152610fef816040850160208701610f88565b601f01601f1916919091016040019291505056fea26469706673582212206721686202854e1b800d70d2db61025dbaa3b667a49335c1315aad466f21f95364736f6c634300080d0033000000000000000000000000d386a121991e51eab5e3433bf5b1cf4c8884b47a000000000000000000000000762eb51d2e779eeec9b239ffb0b2ec8262848f3e000000000000000000000000fa89a4c7f79dc4111c116a0f01061f4a7d9fab73
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101365760003560e01c80637bb453bf116100b857806396b826cc1161007c57806396b826cc1461029e578063a4f0d7d0146102a7578063aaf5eb68146102b2578063ac9332e9146102bb578063b6b55f25146102c4578063fc0c546a146102d757600080fd5b80637bb453bf146102375780637dd980a21461024a57806389885049146102535780638da5cb5b1461027357806395ccea671461028b57600080fd5b8063402914f5116100ff578063402914f5146101d35780634534a63f1461020a57806345517f621461021d5780634e71d92d146102265780635ce97dbb1461022e57600080fd5b8062f714ce1461013b57806313af4035146101505780632bab754b14610163578063334041a6146101935780633b7fcdca146101b0575b600080fd5b61014e610149366004610ca8565b6102ea565b005b61014e61015e366004610cd4565b61036f565b600854610176906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6006546101a09060ff1681565b604051901515815260200161018a565b6101a06101be366004610cd4565b600b6020526000908152604090205460ff1681565b6101fc6101e1366004610cd4565b6001600160a01b03166000908152600a602052604090205490565b60405190815260200161018a565b61014e610218366004610dcc565b6103e2565b6101fc60035481565b6101fc6105a0565b6101fc60015481565b600754610176906001600160a01b031681565b6101fc60045481565b6101fc610261366004610cd4565b600a6020526000908152604090205481565b6006546101769061010090046001600160a01b031681565b61014e610299366004610e8c565b610803565b6101fc60055481565b6101fc6301dfe20081565b6101fc6103e881565b6101fc60025481565b61014e6102d2366004610eb6565b610893565b600954610176906001600160a01b031681565b60065461010090046001600160a01b0316331461030657600080fd5b600754610320906001600160a01b03838116911684610928565b81600160008282546103329190610ee5565b90915550506040518281527f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d906020015b60405180910390a15050565b60065461010090046001600160a01b031633146103a75760405162461bcd60e51b815260040161039e90610efc565b60405180910390fd5b6001600160a01b0381166103ba57600080fd5b600680546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60065461010090046001600160a01b031633146104115760405162461bcd60e51b815260040161039e90610efc565b805182511461041f57600080fd5b6000805b835181101561051d5782818151811061043e5761043e610f1f565b6020026020010151600a600086848151811061045c5761045c610f1f565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008282546104939190610f35565b925050819055508281815181106104ac576104ac610f1f565b6020026020010151826104bf9190610f35565b91506000600b60008684815181106104d9576104d9610f1f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061051581610f4d565b915050610423565b5080600260008282546105309190610f35565b9091555050825160038054600090610549908490610f35565b909155505082516003546002546040805193845260208401929092528282018490526060830152517fb55d98c9c0ed65c548455eba0235ab22f71e6f2acfe162a3b99cda0ff2fcd19f9181900360800190a1505050565b60006105aa610990565b336000908152600a602052604081205490036105ff5760405162461bcd60e51b81526020600482015260146024820152734e6f2061697264726f7020617661696c61626c6560601b604482015260640161039e565b336000908152600a6020526040808220805490839055600954600854925163095ea7b360e01b81526001600160a01b0393841660048201526024810194909452909291169063095ea7b3906044016020604051808303816000875af115801561066c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106909190610f66565b5060095460085460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905291169063095ea7b3906044016020604051808303816000875af11580156106e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070a9190610f66565b506008546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f1990604401600060405180830381600087803b15801561075757600080fd5b505af115801561076b573d6000803e3d6000fd5b5050336000908152600b60205260408120805460ff1916600190811790915560048054919450925061079e908490610f35565b9250508190555080600560008282546107b79190610f35565b909155505060408051338152602081018390527fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a910160405180910390a1506108006001600055565b90565b60065461010090046001600160a01b031633146108325760405162461bcd60e51b815260040161039e90610efc565b60075461084c906001600160a01b03848116911683610928565b806001600082825461085e9190610ee5565b90915550506040518181527f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d90602001610363565b60065461010090046001600160a01b031633146108af57600080fd5b6009546108c7906001600160a01b03163330846109e9565b80600160008282546108d99190610f35565b90915550506006805460ff191660011790556040517f4d6ce1e535dbade1c23defba91e23b8f791ce5edc0cc320257a2b364e4e384269061091d9083815260200190565b60405180910390a150565b6040516001600160a01b03831660248201526044810182905261098b90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a27565b505050565b6002600054036109e25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161039e565b6002600055565b6040516001600160a01b0380851660248301528316604482015260648101829052610a219085906323b872dd60e01b90608401610954565b50505050565b6000610a7c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610afc9092919063ffffffff16565b9050805160001480610a9d575080806020019051810190610a9d9190610f66565b61098b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161039e565b6060610b0b8484600085610b13565b949350505050565b606082471015610b745760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161039e565b600080866001600160a01b03168587604051610b909190610fb4565b60006040518083038185875af1925050503d8060008114610bcd576040519150601f19603f3d011682016040523d82523d6000602084013e610bd2565b606091505b5091509150610be387838387610bee565b979650505050505050565b60608315610c5d578251600003610c56576001600160a01b0385163b610c565760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161039e565b5081610b0b565b610b0b8383815115610c725781518083602001fd5b8060405162461bcd60e51b815260040161039e9190610fd0565b80356001600160a01b0381168114610ca357600080fd5b919050565b60008060408385031215610cbb57600080fd5b82359150610ccb60208401610c8c565b90509250929050565b600060208284031215610ce657600080fd5b610cef82610c8c565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610d3557610d35610cf6565b604052919050565b600067ffffffffffffffff821115610d5757610d57610cf6565b5060051b60200190565b600082601f830112610d7257600080fd5b81356020610d87610d8283610d3d565b610d0c565b82815260059290921b84018101918181019086841115610da657600080fd5b8286015b84811015610dc15780358352918301918301610daa565b509695505050505050565b60008060408385031215610ddf57600080fd5b823567ffffffffffffffff80821115610df757600080fd5b818501915085601f830112610e0b57600080fd5b81356020610e1b610d8283610d3d565b82815260059290921b84018101918181019089841115610e3a57600080fd5b948201945b83861015610e5f57610e5086610c8c565b82529482019490820190610e3f565b96505086013592505080821115610e7557600080fd5b50610e8285828601610d61565b9150509250929050565b60008060408385031215610e9f57600080fd5b610ea883610c8c565b946020939093013593505050565b600060208284031215610ec857600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610ef757610ef7610ecf565b500390565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60008219821115610f4857610f48610ecf565b500190565b600060018201610f5f57610f5f610ecf565b5060010190565b600060208284031215610f7857600080fd5b81518015158114610cef57600080fd5b60005b83811015610fa3578181015183820152602001610f8b565b83811115610a215750506000910152565b60008251610fc6818460208701610f88565b9190910192915050565b6020815260008251806020840152610fef816040850160208701610f88565b601f01601f1916919091016040019291505056fea26469706673582212206721686202854e1b800d70d2db61025dbaa3b667a49335c1315aad466f21f95364736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d386a121991e51eab5e3433bf5b1cf4c8884b47a000000000000000000000000762eb51d2e779eeec9b239ffb0b2ec8262848f3e000000000000000000000000fa89a4c7f79dc4111c116a0f01061f4a7d9fab73
-----Decoded View---------------
Arg [0] : _token (address): 0xd386a121991E51Eab5e3433Bf5B1cF4C8884b47a
Arg [1] : _optionToken (address): 0x762eb51D2e779EeEc9B239FFB0B2eC8262848f3E
Arg [2] : _msig (address): 0xfA89A4C7F79Dc4111c116a0f01061F4a7D9fAb73
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000d386a121991e51eab5e3433bf5b1cf4c8884b47a
Arg [1] : 000000000000000000000000762eb51d2e779eeec9b239ffb0b2ec8262848f3e
Arg [2] : 000000000000000000000000fa89a4c7f79dc4111c116a0f01061f4a7d9fab73
Deployed Bytecode Sourcemap
25152:3535:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26569:225;;;;;;:::i;:::-;;:::i;:::-;;26850:125;;;;;;:::i;:::-;;:::i;25565:26::-;;;;;-1:-1:-1;;;;;25565:26:0;;;;;;-1:-1:-1;;;;;806:32:1;;;788:51;;776:2;761:18;25565:26:0;;;;;;;;25481:18;;;;;;;;;;;;1015:14:1;;1008:22;990:41;;978:2;963:18;25481::0;850:187:1;25743:43:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28343:122;;;;;;:::i;:::-;-1:-1:-1;;;;;28436:21:0;28396:15;28436:21;;;:15;:21;;;;;;;28343:122;;;;1188:25:1;;;1176:2;1161:18;28343:122:0;1042:177:1;27142:581:0;;;;;;:::i;:::-;;:::i;25356:35::-;;;;;;27735:598;;;:::i;25286:27::-;;;;;;25539:19;;;;;-1:-1:-1;;;;;25539:19:0;;;25398:34;;;;;;25689:47;;;;;;:::i;:::-;;;;;;;;;;;;;;25512:20;;;;;;;;-1:-1:-1;;;;;25512:20:0;;;28483:201;;;;;;:::i;:::-;;:::i;25439:33::-;;;;;;25632:42;;25660:14;25632:42;;25239:40;;25275:4;25239:40;;25320:29;;;;;;26316:245;;;;;;:::i;:::-;;:::i;25598:19::-;;;;;-1:-1:-1;;;;;25598:19:0;;;26569:225;26661:5;;;;;-1:-1:-1;;;;;26661:5:0;26647:10;:19;26639:28;;;;;;26706:4;;26678:41;;-1:-1:-1;;;;;26678:27:0;;;;26706:4;26712:6;26678:27;:41::i;:::-;26746:6;26730:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;26770:16:0;;1188:25:1;;;26770:16:0;;1176:2:1;1161:18;26770:16:0;;;;;;;;26569:225;;:::o;26850:125::-;25847:5;;;;;-1:-1:-1;;;;;25847:5:0;25833:10;:19;25825:41;;;;-1:-1:-1;;;25825:41:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;26921:20:0;::::1;26913:29;;;::::0;::::1;;26953:5;:14:::0;;-1:-1:-1;;;;;26953:14:0;;::::1;;;-1:-1:-1::0;;;;;;26953:14:0;;::::1;::::0;;;::::1;::::0;;26850:125::o;27142:581::-;25847:5;;;;;-1:-1:-1;;;;;25847:5:0;25833:10;:19;25825:41;;;;-1:-1:-1;;;25825:41:0;;;;;;;:::i;:::-;27273:7:::1;:14;27258:4;:11;:29;27250:38;;;::::0;::::1;;27301:20;::::0;27332:191:::1;27353:4;:11;27349:1;:15;27332:191;;;27414:7;27422:1;27414:10;;;;;;;;:::i;:::-;;;;;;;27386:15;:24;27402:4;27407:1;27402:7;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;27386:24:0::1;-1:-1:-1::0;;;;;27386:24:0::1;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;27458:7;27466:1;27458:10;;;;;;;;:::i;:::-;;;;;;;27439:29;;;;;:::i;:::-;;;27506:5;27483:11;:20;27495:4;27500:1;27495:7;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;27483:20:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;27483:20:0;:28;;-1:-1:-1;;27483:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27366:3;::::1;::::0;::::1;:::i;:::-;;;;27332:191;;;;27551:15;27533:14;;:33;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;27601:11:0;;27577:20:::1;:35:::0;;:20:::1;::::0;:35:::1;::::0;27601:11;;27577:35:::1;:::i;:::-;::::0;;;-1:-1:-1;;27639:11:0;;27651:20:::1;::::0;27690:14:::1;::::0;27628:77:::1;::::0;;5542:25:1;;;5598:2;5583:18;;5576:34;;;;5626:18;;;5619:34;;;5684:2;5669:18;;5662:34;27628:77:0;::::1;::::0;;;;5529:3:1;27628:77:0;;::::1;27239:484;27142:581:::0;;:::o;27735:598::-;27782:13;23810:21;:19;:21::i;:::-;27878:10:::1;27862:27;::::0;;;:15:::1;:27;::::0;;;;;:32;;27854:65:::1;;;::::0;-1:-1:-1;;;27854:65:0;;5909:2:1;27854:65:0::1;::::0;::::1;5891:21:1::0;5948:2;5928:18;;;5921:30;-1:-1:-1;;;5967:18:1;;;5960:50;6027:18;;27854:65:0::1;5707:344:1::0;27854:65:0::1;27962:10;27932:11;27946:27:::0;;;:15:::1;:27;::::0;;;;;;;27984:31;;;;28026:5:::1;::::0;28040:11:::1;::::0;28026:29;;-1:-1:-1;;;28026:29:0;;-1:-1:-1;;;;;28040:11:0;;::::1;28026:29;::::0;::::1;6238:51:1::0;6305:18;;;6298:34;;;;27946:27:0;;28026:5;::::1;::::0;:13:::1;::::0;6211:18:1;;28026:29:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;28066:5:0::1;::::0;28080:11:::1;::::0;28066:34:::1;::::0;-1:-1:-1;;;28066:34:0;;-1:-1:-1;;;;;28080:11:0;;::::1;28066:34;::::0;::::1;6238:51:1::0;6305:18;;;6298:34;;;28066:5:0;::::1;::::0;:13:::1;::::0;6211:18:1;;28066:34:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;28126:11:0::1;::::0;28113:50:::1;::::0;-1:-1:-1;;;28113:50:0;;28144:10:::1;28113:50;::::0;::::1;6238:51:1::0;6305:18;;;6298:34;;;-1:-1:-1;;;;;28126:11:0;;::::1;::::0;28113:30:::1;::::0;6211:18:1;;28113:50:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;28188:10:0::1;28176:23;::::0;;;:11:::1;:23;::::0;;;;:30;;-1:-1:-1;;28176:30:0::1;28202:4;28176:30:::0;;::::1;::::0;;;28217:19:::1;:24:::0;;28202:4;;-1:-1:-1;28217:19:0;-1:-1:-1;28217:24:0::1;::::0;28202:4;;28217:24:::1;:::i;:::-;;;;;;;;28274:6;28252:18;;:28;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;28298:27:0::1;::::0;;28306:10:::1;6238:51:1::0;;6320:2;6305:18;;6298:34;;;28298:27:0::1;::::0;6211:18:1;28298:27:0::1;;;;;;;27796:537;23854:20:::0;23248:1;24374:7;:22;24191:213;23854:20;27735:598;:::o;28483:201::-;25847:5;;;;;-1:-1:-1;;;;;25847:5:0;25833:10;:19;25825:41;;;;-1:-1:-1;;;25825:41:0;;;;;;;:::i;:::-;28596:4:::1;::::0;28568:41:::1;::::0;-1:-1:-1;;;;;28568:27:0;;::::1;::::0;28596:4:::1;28602:6:::0;28568:27:::1;:41::i;:::-;28636:6;28620:12;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;28660:16:0::1;::::0;1188:25:1;;;28660:16:0::1;::::0;1176:2:1;1161:18;28660:16:0::1;1042:177:1::0;26316:245:0;26391:5;;;;;-1:-1:-1;;;;;26391:5:0;26377:10;:19;26369:28;;;;;;26408:5;;:57;;-1:-1:-1;;;;;26408:5:0;26431:10;26451:4;26458:6;26408:22;:57::i;:::-;26492:6;26476:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;26509:6:0;:13;;-1:-1:-1;;26509:13:0;26518:4;26509:13;;;26538:15;;;;;;26546:6;1188:25:1;;1176:2;1161:18;;1042:177;26538:15:0;;;;;;;;26316:245;:::o;15461:177::-;15571:58;;-1:-1:-1;;;;;6256:32:1;;15571:58:0;;;6238:51:1;6305:18;;;6298:34;;;15544:86:0;;15564:5;;-1:-1:-1;;;15594:23:0;6211:18:1;;15571:58:0;;;;-1:-1:-1;;15571:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;15571:58:0;-1:-1:-1;;;;;;15571:58:0;;;;;;;;;;15544:19;:86::i;:::-;15461:177;;;:::o;23890:293::-;23292:1;24024:7;;:19;24016:63;;;;-1:-1:-1;;;24016:63:0;;7106:2:1;24016:63:0;;;7088:21:1;7145:2;7125:18;;;7118:30;7184:33;7164:18;;;7157:61;7235:18;;24016:63:0;6904:355:1;24016:63:0;23292:1;24157:7;:18;23890:293::o;15883:205::-;16011:68;;-1:-1:-1;;;;;7522:15:1;;;16011:68:0;;;7504:34:1;7574:15;;7554:18;;;7547:43;7606:18;;;7599:34;;;15984:96:0;;16004:5;;-1:-1:-1;;;16034:27:0;7439:18:1;;16011:68:0;7264:375:1;15984:96:0;15883:205;;;;:::o;19784:649::-;20208:23;20234:69;20262:4;20234:69;;;;;;;;;;;;;;;;;20242:5;-1:-1:-1;;;;;20234:27:0;;;:69;;;;;:::i;:::-;20208:95;;20322:10;:17;20343:1;20322:22;:56;;;;20359:10;20348:30;;;;;;;;;;;;:::i;:::-;20314:111;;;;-1:-1:-1;;;20314:111:0;;7846:2:1;20314:111:0;;;7828:21:1;7885:2;7865:18;;;7858:30;7924:34;7904:18;;;7897:62;-1:-1:-1;;;7975:18:1;;;7968:40;8025:19;;20314:111:0;7644:406:1;9341:229:0;9478:12;9510:52;9532:6;9540:4;9546:1;9549:12;9510:21;:52::i;:::-;9503:59;9341:229;-1:-1:-1;;;;9341:229:0:o;10427:455::-;10597:12;10655:5;10630:21;:30;;10622:81;;;;-1:-1:-1;;;10622:81:0;;8257:2:1;10622:81:0;;;8239:21:1;8296:2;8276:18;;;8269:30;8335:34;8315:18;;;8308:62;-1:-1:-1;;;8386:18:1;;;8379:36;8432:19;;10622:81:0;8055:402:1;10622:81:0;10715:12;10729:23;10756:6;-1:-1:-1;;;;;10756:11:0;10775:5;10782:4;10756:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10714:73;;;;10805:69;10832:6;10840:7;10849:10;10861:12;10805:26;:69::i;:::-;10798:76;10427:455;-1:-1:-1;;;;;;;10427:455:0:o;13000:644::-;13185:12;13214:7;13210:427;;;13242:10;:17;13263:1;13242:22;13238:290;;-1:-1:-1;;;;;6881:19:0;;;13452:60;;;;-1:-1:-1;;;13452:60:0;;9206:2:1;13452:60:0;;;9188:21:1;9245:2;9225:18;;;9218:30;9284:31;9264:18;;;9257:59;9333:18;;13452:60:0;9004:353:1;13452:60:0;-1:-1:-1;13549:10:0;13542:17;;13210:427;13592:33;13600:10;13612:12;14347:17;;:21;14343:388;;14579:10;14573:17;14636:15;14623:10;14619:2;14615:19;14608:44;14343:388;14706:12;14699:20;;-1:-1:-1;;;14699:20:0;;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:254::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;373:9;360:23;350:33;;402:38;436:2;425:9;421:18;402:38;:::i;:::-;392:48;;192:254;;;;;:::o;451:186::-;510:6;563:2;551:9;542:7;538:23;534:32;531:52;;;579:1;576;569:12;531:52;602:29;621:9;602:29;:::i;:::-;592:39;451:186;-1:-1:-1;;;451:186:1:o;1224:127::-;1285:10;1280:3;1276:20;1273:1;1266:31;1316:4;1313:1;1306:15;1340:4;1337:1;1330:15;1356:275;1427:2;1421:9;1492:2;1473:13;;-1:-1:-1;;1469:27:1;1457:40;;1527:18;1512:34;;1548:22;;;1509:62;1506:88;;;1574:18;;:::i;:::-;1610:2;1603:22;1356:275;;-1:-1:-1;1356:275:1:o;1636:183::-;1696:4;1729:18;1721:6;1718:30;1715:56;;;1751:18;;:::i;:::-;-1:-1:-1;1796:1:1;1792:14;1808:4;1788:25;;1636:183::o;1824:662::-;1878:5;1931:3;1924:4;1916:6;1912:17;1908:27;1898:55;;1949:1;1946;1939:12;1898:55;1985:6;1972:20;2011:4;2035:60;2051:43;2091:2;2051:43;:::i;:::-;2035:60;:::i;:::-;2129:15;;;2215:1;2211:10;;;;2199:23;;2195:32;;;2160:12;;;;2239:15;;;2236:35;;;2267:1;2264;2257:12;2236:35;2303:2;2295:6;2291:15;2315:142;2331:6;2326:3;2323:15;2315:142;;;2397:17;;2385:30;;2435:12;;;;2348;;2315:142;;;-1:-1:-1;2475:5:1;1824:662;-1:-1:-1;;;;;;1824:662:1:o;2491:1146::-;2609:6;2617;2670:2;2658:9;2649:7;2645:23;2641:32;2638:52;;;2686:1;2683;2676:12;2638:52;2726:9;2713:23;2755:18;2796:2;2788:6;2785:14;2782:34;;;2812:1;2809;2802:12;2782:34;2850:6;2839:9;2835:22;2825:32;;2895:7;2888:4;2884:2;2880:13;2876:27;2866:55;;2917:1;2914;2907:12;2866:55;2953:2;2940:16;2975:4;2999:60;3015:43;3055:2;3015:43;:::i;2999:60::-;3093:15;;;3175:1;3171:10;;;;3163:19;;3159:28;;;3124:12;;;;3199:19;;;3196:39;;;3231:1;3228;3221:12;3196:39;3255:11;;;;3275:148;3291:6;3286:3;3283:15;3275:148;;;3357:23;3376:3;3357:23;:::i;:::-;3345:36;;3308:12;;;;3401;;;;3275:148;;;3442:5;-1:-1:-1;;3485:18:1;;3472:32;;-1:-1:-1;;3516:16:1;;;3513:36;;;3545:1;3542;3535:12;3513:36;;3568:63;3623:7;3612:8;3601:9;3597:24;3568:63;:::i;:::-;3558:73;;;2491:1146;;;;;:::o;3642:254::-;3710:6;3718;3771:2;3759:9;3750:7;3746:23;3742:32;3739:52;;;3787:1;3784;3777:12;3739:52;3810:29;3829:9;3810:29;:::i;:::-;3800:39;3886:2;3871:18;;;;3858:32;;-1:-1:-1;;;3642:254:1:o;3901:180::-;3960:6;4013:2;4001:9;3992:7;3988:23;3984:32;3981:52;;;4029:1;4026;4019:12;3981:52;-1:-1:-1;4052:23:1;;3901:180;-1:-1:-1;3901:180:1:o;4307:127::-;4368:10;4363:3;4359:20;4356:1;4349:31;4399:4;4396:1;4389:15;4423:4;4420:1;4413:15;4439:125;4479:4;4507:1;4504;4501:8;4498:34;;;4512:18;;:::i;:::-;-1:-1:-1;4549:9:1;;4439:125::o;4569:332::-;4771:2;4753:21;;;4810:1;4790:18;;;4783:29;-1:-1:-1;;;4843:2:1;4828:18;;4821:39;4892:2;4877:18;;4569:332::o;4906:127::-;4967:10;4962:3;4958:20;4955:1;4948:31;4998:4;4995:1;4988:15;5022:4;5019:1;5012:15;5038:128;5078:3;5109:1;5105:6;5102:1;5099:13;5096:39;;;5115:18;;:::i;:::-;-1:-1:-1;5151:9:1;;5038:128::o;5171:135::-;5210:3;5231:17;;;5228:43;;5251:18;;:::i;:::-;-1:-1:-1;5298:1:1;5287:13;;5171:135::o;6343:277::-;6410:6;6463:2;6451:9;6442:7;6438:23;6434:32;6431:52;;;6479:1;6476;6469:12;6431:52;6511:9;6505:16;6564:5;6557:13;6550:21;6543:5;6540:32;6530:60;;6586:1;6583;6576:12;8462:258;8534:1;8544:113;8558:6;8555:1;8552:13;8544:113;;;8634:11;;;8628:18;8615:11;;;8608:39;8580:2;8573:10;8544:113;;;8675:6;8672:1;8669:13;8666:48;;;-1:-1:-1;;8710:1:1;8692:16;;8685:27;8462:258::o;8725:274::-;8854:3;8892:6;8886:13;8908:53;8954:6;8949:3;8942:4;8934:6;8930:17;8908:53;:::i;:::-;8977:16;;;;;8725:274;-1:-1:-1;;8725:274:1:o;9362:383::-;9511:2;9500:9;9493:21;9474:4;9543:6;9537:13;9586:6;9581:2;9570:9;9566:18;9559:34;9602:66;9661:6;9656:2;9645:9;9641:18;9636:2;9628:6;9624:15;9602:66;:::i;:::-;9729:2;9708:15;-1:-1:-1;;9704:29:1;9689:45;;;;9736:2;9685:54;;9362:383;-1:-1:-1;;9362:383:1:o
Swarm Source
ipfs://6721686202854e1b800d70d2db61025dbaa3b667a49335c1315aad466f21f953
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.