Source Code
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 6502971 | 549 days ago | Contract Creation | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
LinearDistributor
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8;
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import { BlastGasAndYield } from "./../commons/BlastGasAndYield.sol";
interface ILinearDistributor {
function processRewards() external;
function pendingRewards() external view returns (uint256);
}
abstract contract LinearDistributorUnsetPeriod is ILinearDistributor, BlastGasAndYield {
IERC20 public immutable token;
address public immutable recipient;
uint256 lastTimestamp;
uint256 allPaidOutTimestamp;
uint256 rewardBalance;
constructor(IERC20 _token, address _recipient) {
recipient = _recipient;
token = _token;
lastTimestamp = block.timestamp;
allPaidOutTimestamp = block.timestamp;
_transferOwnership(tx.origin);
}
function PAYOUT_PERIOD() public pure virtual returns (uint256);
function processRewards() external {
uint256 amountToPay = pendingRewards();
if (amountToPay > 0) {
token.transfer(recipient, amountToPay);
}
if (block.timestamp >= allPaidOutTimestamp) {
allPaidOutTimestamp = block.timestamp + PAYOUT_PERIOD();
rewardBalance = token.balanceOf(address(this));
}
lastTimestamp = block.timestamp;
}
function pendingRewards() public view returns (uint256 amountToPay) {
uint256 timestampNow = block.timestamp;
if (block.timestamp > allPaidOutTimestamp) {
timestampNow = allPaidOutTimestamp;
}
uint256 timePassed = timestampNow - lastTimestamp;
amountToPay = (rewardBalance * timePassed) / PAYOUT_PERIOD();
}
}
contract LinearDistributor is LinearDistributorUnsetPeriod {
constructor(IERC20 _token, address _recipient) LinearDistributorUnsetPeriod(_token, _recipient) {}
function PAYOUT_PERIOD() public pure override returns (uint256) {
return 1 weeks;
}
}
contract LinearDistributorForTest is LinearDistributorUnsetPeriod {
constructor(IERC20 _token, address _recipient) LinearDistributorUnsetPeriod(_token, _recipient) {}
function PAYOUT_PERIOD() public pure override returns (uint256) {
return 1 minutes;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8;
import { IBlastGasAndYield } from "../interfaces/IBlastGasAndYield.sol";
import { IBlast, IERC20Rebasing, YieldMode } from "../dependencies/IBlast.sol";
import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
interface IBlastPoints {
function configurePointsOperator(address operator) external;
}
abstract contract BlastGasAndYield is Ownable, IBlastGasAndYield {
// mainnet addresses
IERC20Rebasing internal constant USDB = IERC20Rebasing(0x4300000000000000000000000000000000000003);
IERC20Rebasing internal constant WETH = IERC20Rebasing(0x4300000000000000000000000000000000000004);
IBlast internal constant BLAST = IBlast(0x4300000000000000000000000000000000000002);
IBlastPoints internal constant BLAST_POINTS = IBlastPoints(0x2536FE9ab3F511540F2f9e2eC2A805005C3Dd800);
// dead code here : it is deployed on mainnet with it enabled, removed so foundry can simulate tests
constructor() Ownable(msg.sender) {
// BLAST.configureClaimableYield();
BLAST.configureClaimableGas();
USDB.configure(YieldMode.CLAIMABLE);
WETH.configure(YieldMode.CLAIMABLE);
BLAST_POINTS.configurePointsOperator(msg.sender);
}
function claimBlastYieldAndGas() external onlyOwner {
BLAST.claimMaxGas(address(this), msg.sender);
BLAST.claimAllYield(address(this), msg.sender);
USDB.claim(msg.sender, USDB.getClaimableAmount(address(this)));
WETH.claim(msg.sender, WETH.getClaimableAmount(address(this)));
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8;
interface IBlastGasAndYield {
function claimBlastYieldAndGas() external;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8;
enum YieldMode {
AUTOMATIC,
VOID,
CLAIMABLE
}
enum GasMode {
VOID,
CLAIMABLE
}
interface IBlast {
// configure
function configureContract(address contractAddress, YieldMode _yield, GasMode gasMode, address governor) external;
function configure(YieldMode _yield, GasMode gasMode, address governor) external;
// base configuration options
function configureClaimableYield() external;
function configureClaimableYieldOnBehalf(address contractAddress) external;
function configureAutomaticYield() external;
function configureAutomaticYieldOnBehalf(address contractAddress) external;
function configureVoidYield() external;
function configureVoidYieldOnBehalf(address contractAddress) external;
function configureClaimableGas() external;
function configureClaimableGasOnBehalf(address contractAddress) external;
function configureVoidGas() external;
function configureVoidGasOnBehalf(address contractAddress) external;
function configureGovernor(address _governor) external;
function configureGovernorOnBehalf(address _newGovernor, address contractAddress) external;
// claim yield
function claimYield(address contractAddress, address recipientOfYield, uint256 amount) external returns (uint256);
function claimAllYield(address contractAddress, address recipientOfYield) external returns (uint256);
// claim gas
function claimAllGas(address contractAddress, address recipientOfGas) external returns (uint256);
function claimGasAtMinClaimRate(
address contractAddress,
address recipientOfGas,
uint256 minClaimRateBips
) external returns (uint256);
function claimMaxGas(address contractAddress, address recipientOfGas) external returns (uint256);
function claimGas(
address contractAddress,
address recipientOfGas,
uint256 gasToClaim,
uint256 gasSecondsToConsume
) external returns (uint256);
// read functions
function readClaimableYield(address contractAddress) external view returns (uint256);
function readYieldConfiguration(address contractAddress) external view returns (uint8);
function readGasParams(
address contractAddress
) external view returns (uint256 etherSeconds, uint256 etherBalance, uint256 lastUpdated, GasMode);
}
interface IERC20Rebasing {
// changes the yield mode of the caller and update the balance
// to reflect the configuration
function configure(YieldMode) external returns (uint256);
// "claimable" yield mode accounts can call this this claim their yield
// to another address
function claim(address recipient, uint256 amount) external returns (uint256);
// read the claimable amount for an account
function getClaimableAmount(address account) external view returns (uint256);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. This can
* later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}{
"remappings": [
"@openzeppelin/=../../node_modules/@openzeppelin/",
"forge-std/=../../node_modules/forge-std/src/",
"ds-test/=../../node_modules/ds-test/src/",
"@kairos-loan-solidity-shared/=../../node_modules/@kairos-loan/solidity-shared/src/",
"tornado/=../../node_modules/solidity-tornado/src/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
},
"evmVersion": "shanghai",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"address","name":"_recipient","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"PAYOUT_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"claimBlastYieldAndGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingRewards","outputs":[{"internalType":"uint256","name":"amountToPay","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60c060405234801561000f575f80fd5b50604051610acf380380610acf83398101604081905261002e916102a6565b8181338061005557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005e81610240565b507343000000000000000000000000000000000000026001600160a01b0316634e606c476040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156100ab575f80fd5b505af11580156100bd573d5f803e3d5ffd5b5050604051631a33757d60e01b81527343000000000000000000000000000000000000039250631a33757d91506100f9906002906004016102de565b6020604051808303815f875af1158015610115573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101399190610304565b50604051631a33757d60e01b815273430000000000000000000000000000000000000490631a33757d90610172906002906004016102de565b6020604051808303815f875af115801561018e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101b29190610304565b506040516336b91f2b60e01b8152336004820152732536fe9ab3f511540f2f9e2ec2a805005c3dd800906336b91f2b906024015f604051808303815f87803b1580156101fc575f80fd5b505af115801561020e573d5f803e3d5ffd5b5050506001600160a01b0380831660a05283166080525042600181905560025561023732610240565b5050505061031b565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146102a3575f80fd5b50565b5f80604083850312156102b7575f80fd5b82516102c28161028f565b60208401519092506102d38161028f565b809150509250929050565b60208101600383106102fe57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f60208284031215610314575f80fd5b5051919050565b60805160a05161077f6103505f395f818160bb01526104b001525f8181610135015281816104df0152610579015261077f5ff3fe608060405234801561000f575f80fd5b5060043610610090575f3560e01c80638da5cb5b116100635780638da5cb5b146100fd578063eded3fda1461010d578063f2fde38b14610115578063f9fc0d0714610128578063fc0c546a14610130575f80fd5b80632bf52c3814610094578063431f5db4146100ac57806366d003ac146100b6578063715018a6146100f5575b5f80fd5b62093a805b6040519081526020015b60405180910390f35b6100b4610157565b005b6100dd7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100a3565b6100b46103ef565b5f546001600160a01b03166100dd565b610099610402565b6100b4610123366004610670565b610449565b6100b4610488565b6100dd7f000000000000000000000000000000000000000000000000000000000000000081565b61015f6105f5565b60405163662aa11d60e01b81523060048201523360248201526002604360981b019063662aa11d906044016020604051808303815f875af11580156101a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ca919061069d565b5060405163430021db60e11b81523060048201523360248201526002604360981b019063860043b6906044016020604051808303815f875af1158015610212573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610236919061069d565b5060405163e12f3a6160e01b81523060048201526003604360981b019063aad3ec96903390839063e12f3a6190602401602060405180830381865afa158015610281573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102a5919061069d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156102ed573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610311919061069d565b5060405163e12f3a6160e01b81523060048201526004604360981b019063aad3ec96903390839063e12f3a6190602401602060405180830381865afa15801561035c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610380919061069d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156103c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ec919061069d565b50565b6103f76105f5565b6104005f610621565b565b6002545f90429081111561041557506002545b5f6001548261042491906106c8565b905062093a808160035461043891906106e1565b61044291906106f8565b9250505090565b6104516105f5565b6001600160a01b03811661047f57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6103ec81610621565b5f610491610402565b9050801561054b5760405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015610525573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105499190610717565b505b60025442106105ee5761056162093a8042610736565b6002556040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156105c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ea919061069d565b6003555b5042600155565b5f546001600160a01b031633146104005760405163118cdaa760e01b8152336004820152602401610476565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610680575f80fd5b81356001600160a01b0381168114610696575f80fd5b9392505050565b5f602082840312156106ad575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106db576106db6106b4565b92915050565b80820281158282048414176106db576106db6106b4565b5f8261071257634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610727575f80fd5b81518015158114610696575f80fd5b808201808211156106db576106db6106b456fea2646970667358221220eac67c5f230545bc5528e47fd5a90d23cd04cbc1dfef84a4592364bf7475359464736f6c634300081a00330000000000000000000000009e92c0b2b84ddac571bde330c4b44096a7c99909000000000000000000000000b059cdafd48eec97b2cba722e4965d89cddb324f
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610090575f3560e01c80638da5cb5b116100635780638da5cb5b146100fd578063eded3fda1461010d578063f2fde38b14610115578063f9fc0d0714610128578063fc0c546a14610130575f80fd5b80632bf52c3814610094578063431f5db4146100ac57806366d003ac146100b6578063715018a6146100f5575b5f80fd5b62093a805b6040519081526020015b60405180910390f35b6100b4610157565b005b6100dd7f000000000000000000000000b059cdafd48eec97b2cba722e4965d89cddb324f81565b6040516001600160a01b0390911681526020016100a3565b6100b46103ef565b5f546001600160a01b03166100dd565b610099610402565b6100b4610123366004610670565b610449565b6100b4610488565b6100dd7f0000000000000000000000009e92c0b2b84ddac571bde330c4b44096a7c9990981565b61015f6105f5565b60405163662aa11d60e01b81523060048201523360248201526002604360981b019063662aa11d906044016020604051808303815f875af11580156101a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ca919061069d565b5060405163430021db60e11b81523060048201523360248201526002604360981b019063860043b6906044016020604051808303815f875af1158015610212573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610236919061069d565b5060405163e12f3a6160e01b81523060048201526003604360981b019063aad3ec96903390839063e12f3a6190602401602060405180830381865afa158015610281573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102a5919061069d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156102ed573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610311919061069d565b5060405163e12f3a6160e01b81523060048201526004604360981b019063aad3ec96903390839063e12f3a6190602401602060405180830381865afa15801561035c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610380919061069d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156103c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ec919061069d565b50565b6103f76105f5565b6104005f610621565b565b6002545f90429081111561041557506002545b5f6001548261042491906106c8565b905062093a808160035461043891906106e1565b61044291906106f8565b9250505090565b6104516105f5565b6001600160a01b03811661047f57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6103ec81610621565b5f610491610402565b9050801561054b5760405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000b059cdafd48eec97b2cba722e4965d89cddb324f81166004830152602482018390527f0000000000000000000000009e92c0b2b84ddac571bde330c4b44096a7c99909169063a9059cbb906044016020604051808303815f875af1158015610525573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105499190610717565b505b60025442106105ee5761056162093a8042610736565b6002556040516370a0823160e01b81523060048201527f0000000000000000000000009e92c0b2b84ddac571bde330c4b44096a7c999096001600160a01b0316906370a0823190602401602060405180830381865afa1580156105c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ea919061069d565b6003555b5042600155565b5f546001600160a01b031633146104005760405163118cdaa760e01b8152336004820152602401610476565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610680575f80fd5b81356001600160a01b0381168114610696575f80fd5b9392505050565b5f602082840312156106ad575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106db576106db6106b4565b92915050565b80820281158282048414176106db576106db6106b4565b5f8261071257634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610727575f80fd5b81518015158114610696575f80fd5b808201808211156106db576106db6106b456fea2646970667358221220eac67c5f230545bc5528e47fd5a90d23cd04cbc1dfef84a4592364bf7475359464736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000009e92c0b2b84ddac571bde330c4b44096a7c99909000000000000000000000000b059cdafd48eec97b2cba722e4965d89cddb324f
-----Decoded View---------------
Arg [0] : _token (address): 0x9E92C0B2b84DDac571BdE330C4b44096A7c99909
Arg [1] : _recipient (address): 0xB059CdAfD48EeC97b2cBa722e4965d89Cddb324F
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000009e92c0b2b84ddac571bde330c4b44096a7c99909
Arg [1] : 000000000000000000000000b059cdafd48eec97b2cba722e4965d89cddb324f
Deployed Bytecode Sourcemap
1694:266:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1863:95;1944:7;1863:95;;;160:25:7;;;148:2;133:18;1863:95:6;;;;;;;;1258:313:3;;;:::i;:::-;;464:34:6;;;;;;;;-1:-1:-1;;;;;360:32:7;;;342:51;;330:2;315:18;464:34:6;196:203:7;2315:101:0;;;:::i;1660:85::-;1706:7;1732:6;-1:-1:-1;;;;;1732:6:0;1660:85;;1327:363:6;;;:::i;2565:215:0:-;;;;;;:::i;:::-;;:::i;904:417:6:-;;;:::i;429:29::-;;;;;1258:313:3;1553:13:0;:11;:13::i;:::-;1320:44:3::1;::::0;-1:-1:-1;;;1320:44:3;;1346:4:::1;1320:44;::::0;::::1;1091:51:7::0;1353:10:3::1;1158:18:7::0;;;1151:60;-1:-1:-1;;;;;716:42:3;1320:17:::1;::::0;1064:18:7;;1320:44:3::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;1374:46:3::1;::::0;-1:-1:-1;;;1374:46:3;;1402:4:::1;1374:46;::::0;::::1;1091:51:7::0;1409:10:3::1;1158:18:7::0;;;1151:60;-1:-1:-1;;;;;716:42:3;1374:19:::1;::::0;1064:18:7;;1374:46:3::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;1453:38:3::1;::::0;-1:-1:-1;;;1453:38:3;;1485:4:::1;1453:38;::::0;::::1;342:51:7::0;-1:-1:-1;;;;;523:42:3;1430:10:::1;::::0;1441::::1;::::0;523:42;;1453:23:::1;::::0;315:18:7;;1453:38:3::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1430:62;::::0;-1:-1:-1;;;;;;1430:62:3::1;::::0;;;;;;-1:-1:-1;;;;;1603:32:7;;;1430:62:3::1;::::0;::::1;1585:51:7::0;1652:18;;;1645:34;1558:18;;1430:62:3::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;1525:38:3::1;::::0;-1:-1:-1;;;1525:38:3;;1557:4:::1;1525:38;::::0;::::1;342:51:7::0;-1:-1:-1;;;;;627:42:3;1502:10:::1;::::0;1513::::1;::::0;627:42;;1525:23:::1;::::0;315:18:7;;1525:38:3::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1502:62;::::0;-1:-1:-1;;;;;;1502:62:3::1;::::0;;;;;;-1:-1:-1;;;;;1603:32:7;;;1502:62:3::1;::::0;::::1;1585:51:7::0;1652:18;;;1645:34;1558:18;;1502:62:3::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1258:313::o:0;2315:101:0:-;1553:13;:11;:13::i;:::-;2379:30:::1;2406:1;2379:18;:30::i;:::-;2315:101::o:0;1327:363:6:-;1475:19;;1374;;1428:15;;1457:37;;1453:102;;;-1:-1:-1;1525:19:6;;1453:102;1564:18;1600:13;;1585:12;:28;;;;:::i;:::-;1564:49;-1:-1:-1;1944:7:6;1654:10;1638:13;;:26;;;;:::i;:::-;1637:46;;;;:::i;:::-;1623:60;;1395:295;;1327:363;:::o;2565:215:0:-;1553:13;:11;:13::i;:::-;-1:-1:-1;;;;;2649:22:0;::::1;2645:91;;2694:31;::::0;-1:-1:-1;;;2694:31:0;;2722:1:::1;2694:31;::::0;::::1;342:51:7::0;315:18;;2694:31:0::1;;;;;;;;2645:91;2745:28;2764:8;2745:18;:28::i;904:417:6:-:0;949:19;971:16;:14;:16::i;:::-;949:38;-1:-1:-1;1001:15:6;;997:84;;1032:38;;-1:-1:-1;;;1032:38:6;;-1:-1:-1;;;;;1047:9:6;1603:32:7;;1032:38:6;;;1585:51:7;1652:18;;;1645:34;;;1032:5:6;:14;;;;1558:18:7;;1032:38:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;997:84;1113:19;;1094:15;:38;1090:184;;1170:33;1944:7;1170:15;:33;:::i;:::-;1148:19;:55;1233:30;;-1:-1:-1;;;1233:30:6;;1257:4;1233:30;;;342:51:7;1233:5:6;-1:-1:-1;;;;;1233:15:6;;;;315:18:7;;1233:30:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1217:13;:46;1090:184;-1:-1:-1;1299:15:6;1283:13;:31;904:417::o;1818:162:0:-;1706:7;1732:6;-1:-1:-1;;;;;1732:6:0;735:10:2;1877:23:0;1873:101;;1923:40;;-1:-1:-1;;;1923:40:0;;735:10:2;1923:40:0;;;342:51:7;315:18;;1923:40:0;196:203:7;2934:187:0;3007:16;3026:6;;-1:-1:-1;;;;;3042:17:0;;;-1:-1:-1;;;;;;3042:17:0;;;;;;3074:40;;3026:6;;;;;;;3074:40;;3007:16;3074:40;2997:124;2934:187;:::o;404:286:7:-;463:6;516:2;504:9;495:7;491:23;487:32;484:52;;;532:1;529;522:12;484:52;558:23;;-1:-1:-1;;;;;610:31:7;;600:42;;590:70;;656:1;653;646:12;590:70;679:5;404:286;-1:-1:-1;;;404:286:7:o;1222:184::-;1292:6;1345:2;1333:9;1324:7;1320:23;1316:32;1313:52;;;1361:1;1358;1351:12;1313:52;-1:-1:-1;1384:16:7;;1222:184;-1:-1:-1;1222:184:7:o;1690:127::-;1751:10;1746:3;1742:20;1739:1;1732:31;1782:4;1779:1;1772:15;1806:4;1803:1;1796:15;1822:128;1889:9;;;1910:11;;;1907:37;;;1924:18;;:::i;:::-;1822:128;;;;:::o;1955:168::-;2028:9;;;2059;;2076:15;;;2070:22;;2056:37;2046:71;;2097:18;;:::i;2128:217::-;2168:1;2194;2184:132;;2238:10;2233:3;2229:20;2226:1;2219:31;2273:4;2270:1;2263:15;2301:4;2298:1;2291:15;2184:132;-1:-1:-1;2330:9:7;;2128:217::o;2350:277::-;2417:6;2470:2;2458:9;2449:7;2445:23;2441:32;2438:52;;;2486:1;2483;2476:12;2438:52;2518:9;2512:16;2571:5;2564:13;2557:21;2550:5;2547:32;2537:60;;2593:1;2590;2583:12;2632:125;2697:9;;;2718:10;;;2715:36;;;2731:18;;:::i
Swarm Source
ipfs://eac67c5f230545bc5528e47fd5a90d23cd04cbc1dfef84a4592364bf74753594
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 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.