Overview
POL Balance
0 POL
POL Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 5 internal transactions
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
52747335 | 314 days ago | Contract Creation | 0 POL | |||
52100973 | 331 days ago | Contract Creation | 0 POL | |||
52100945 | 331 days ago | Contract Creation | 0 POL | |||
52100618 | 331 days ago | Contract Creation | 0 POL | |||
44670492 | 520 days ago | Contract Creation | 0 POL |
Loading...
Loading
Contract Name:
AssignmentStakingModuleFactory
Compiler Version
v0.8.18+commit.87f61d96
Optimization Enabled:
Yes with 10000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
/* AssignmentStakingModuleFactory https://github.com/gysr-io/core SPDX-License-Identifier: MIT */ pragma solidity 0.8.18; import "./interfaces/IModuleFactory.sol"; import "./AssignmentStakingModule.sol"; /** * @title Assignment staking module factory * * @notice this factory contract handles deployment for the * AssignmentStakingModule contract * * @dev it is called by the parent PoolFactory and is responsible * for parsing constructor arguments before creating a new contract */ contract AssignmentStakingModuleFactory is IModuleFactory { /** * @inheritdoc IModuleFactory */ function createModule(address, bytes calldata) external override returns (address) { // create module AssignmentStakingModule module = new AssignmentStakingModule(address(this)); module.transferOwnership(msg.sender); // output emit ModuleCreated(msg.sender, address(module)); return address(module); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.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); }
/* ERC20StakingModule https://github.com/gysr-io/core SPDX-License-Identifier: MIT */ pragma solidity 0.8.18; import "./interfaces/IStakingModule.sol"; import "./OwnerController.sol"; /** * @title Assignment staking module * * @notice this staking module allows an administrator to set a fixed rate of * earnings for a specific user. */ contract AssignmentStakingModule is IStakingModule, OwnerController { // constant uint256 public constant SHARES_COEFF = 1e6; // members address private immutable _factory; uint256 public totalRate; mapping(address => uint256) public rates; /** * @param factory_ address of module factory */ constructor(address factory_) { _factory = factory_; } /** * @inheritdoc IStakingModule */ function tokens() external pure override returns (address[] memory tokens_) { tokens_ = new address[](1); tokens_[0] = address(0x0); } /** * @inheritdoc IStakingModule */ function balances( address user ) external view override returns (uint256[] memory balances_) { balances_ = new uint256[](1); balances_[0] = rates[user]; } /** * @inheritdoc IStakingModule */ function factory() external view override returns (address) { return _factory; } /** * @inheritdoc IStakingModule */ function totals() external view override returns (uint256[] memory totals_) { totals_ = new uint256[](1); totals_[0] = totalRate; } /** * @inheritdoc IStakingModule */ function stake( address sender, uint256 amount, bytes calldata data ) external override onlyOwner returns (bytes32, uint256) { // validate require(amount > 0, "asm1"); require(sender == controller(), "asm2"); require(data.length == 32, "asm3"); address assignee; assembly { assignee := calldataload(132) } // increase rate rates[assignee] += amount; totalRate += amount; // emit bytes32 account = bytes32(uint256(uint160(assignee))); uint256 shares = amount * SHARES_COEFF; emit Staked(account, sender, address(0x0), amount, shares); return (account, shares); } /** * @inheritdoc IStakingModule */ function unstake( address sender, uint256 amount, bytes calldata data ) external override onlyOwner returns (bytes32, address, uint256) { // validate require(amount > 0, "asm4"); require(sender == controller(), "asm5"); require(data.length == 32, "asm6"); address assignee; assembly { assignee := calldataload(132) } uint256 r = rates[assignee]; require(amount <= r, "asm7"); // decrease rate rates[assignee] = r - amount; totalRate -= amount; // emit bytes32 account = bytes32(uint256(uint160(assignee))); uint256 shares = amount * SHARES_COEFF; emit Unstaked(account, sender, address(0x0), amount, shares); return (account, assignee, shares); } /** * @inheritdoc IStakingModule */ function claim( address sender, uint256 amount, bytes calldata ) external override onlyOwner returns (bytes32, address, uint256) { require(amount > 0, "asm8"); require(amount <= rates[sender], "asm9"); bytes32 account = bytes32(uint256(uint160(sender))); uint256 shares = amount * SHARES_COEFF; emit Claimed(account, sender, address(0x0), amount, shares); return (account, sender, shares); } /** * @inheritdoc IStakingModule */ function update( address sender, bytes calldata ) external pure override returns (bytes32) { return (bytes32(uint256(uint160(sender)))); } /** * @inheritdoc IStakingModule */ function clean(bytes calldata) external override {} }
/* IEvents https://github.com/gysr-io/core SPDX-License-Identifier: MIT */ pragma solidity 0.8.18; /** * @title GYSR event system * * @notice common interface to define GYSR event system */ interface IEvents { // staking event Staked( bytes32 indexed account, address indexed user, address indexed token, uint256 amount, uint256 shares ); event Unstaked( bytes32 indexed account, address indexed user, address indexed token, uint256 amount, uint256 shares ); event Claimed( bytes32 indexed account, address indexed user, address indexed token, uint256 amount, uint256 shares ); event Updated(bytes32 indexed account, address indexed user); // rewards event RewardsDistributed( address indexed user, address indexed token, uint256 amount, uint256 shares ); event RewardsFunded( address indexed token, uint256 amount, uint256 shares, uint256 timestamp ); event RewardsExpired( address indexed token, uint256 amount, uint256 shares, uint256 timestamp ); event RewardsWithdrawn( address indexed token, uint256 amount, uint256 shares, uint256 timestamp ); event RewardsUpdated(bytes32 indexed account); // gysr event GysrSpent(address indexed user, uint256 amount); event GysrVested(address indexed user, uint256 amount); event GysrWithdrawn(uint256 amount); event Fee(address indexed receiver, address indexed token, uint256 amount); }
/* IModuleFactory https://github.com/gysr-io/core SPDX-License-Identifier: MIT */ pragma solidity 0.8.18; /** * @title Module factory interface * * @notice this defines the common module factory interface used by the * main factory to create the staking and reward modules for a new Pool. */ interface IModuleFactory { // events event ModuleCreated(address indexed user, address module); /** * @notice create a new Pool module * @param config address for configuration contract * @param data binary encoded construction parameters * @return address of newly created module */ function createModule(address config, bytes calldata data) external returns (address); }
/* IOwnerController https://github.com/gysr-io/core SPDX-License-Identifier: MIT */ pragma solidity 0.8.18; /** * @title Owner controller interface * * @notice this defines the interface for any contracts that use the * owner controller access pattern */ interface IOwnerController { /** * @dev Returns the address of the current owner. */ function owner() external view returns (address); /** * @dev Returns the address of the current controller. */ function controller() external view returns (address); /** * @dev Transfers ownership of the contract to a new account (`newOwner`). This can * include renouncing ownership by transferring to the zero address. * Can only be called by the current owner. */ function transferOwnership(address newOwner) external; /** * @dev Transfers control of the contract to a new account (`newController`). * Can only be called by the owner. */ function transferControl(address newController) external; }
/* IStakingModule https://github.com/gysr-io/core SPDX-License-Identifier: MIT */ pragma solidity 0.8.18; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "./IEvents.sol"; import "./IOwnerController.sol"; /** * @title Staking module interface * * @notice this contract defines the common interface that any staking module * must implement to be compatible with the modular Pool architecture. */ interface IStakingModule is IOwnerController, IEvents { /** * @return array of staking tokens */ function tokens() external view returns (address[] memory); /** * @notice get balance of user * @param user address of user * @return balances of each staking token */ function balances(address user) external view returns (uint256[] memory); /** * @return address of module factory */ function factory() external view returns (address); /** * @notice get total staked amount * @return totals for each staking token */ function totals() external view returns (uint256[] memory); /** * @notice stake an amount of tokens for user * @param sender address of sender * @param amount number of tokens to stake * @param data additional data * @return bytes32 id of staking account * @return number of shares minted for stake */ function stake( address sender, uint256 amount, bytes calldata data ) external returns (bytes32, uint256); /** * @notice unstake an amount of tokens for user * @param sender address of sender * @param amount number of tokens to unstake * @param data additional data * @return bytes32 id of staking account * @return address of reward receiver * @return number of shares burned for unstake */ function unstake( address sender, uint256 amount, bytes calldata data ) external returns (bytes32, address, uint256); /** * @notice quote the share value for an amount of tokens without unstaking * @param sender address of sender * @param amount number of tokens to claim with * @param data additional data * @return bytes32 id of staking account * @return address of reward receiver * @return number of shares that the claim amount is worth */ function claim( address sender, uint256 amount, bytes calldata data ) external returns (bytes32, address, uint256); /** * @notice method called by anyone to update accounting * @dev will only be called ad hoc and should not contain essential logic * @param sender address of user for update * @param data additional data * @return bytes32 id of staking account */ function update( address sender, bytes calldata data ) external returns (bytes32); /** * @notice method called by owner to clean up and perform additional accounting * @dev will only be called ad hoc and should not contain any essential logic * @param data additional data */ function clean(bytes calldata data) external; }
/* OwnerController https://github.com/gysr-io/core SPDX-License-Identifier: MIT */ pragma solidity 0.8.18; import "./interfaces/IOwnerController.sol"; /** * @title Owner controller * * @notice this base contract implements an owner-controller access model. * * @dev the contract is an adapted version of the OpenZeppelin Ownable contract. * It allows the owner to designate an additional account as the controller to * perform restricted operations. * * Other changes include supporting role verification with a require method * in addition to the modifier option, and removing some unneeded functionality. * * Original contract here: * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol */ contract OwnerController is IOwnerController { address private _owner; address private _controller; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); event ControlTransferred( address indexed previousController, address indexed newController ); constructor() { _owner = msg.sender; _controller = msg.sender; emit OwnershipTransferred(address(0), _owner); emit ControlTransferred(address(0), _owner); } /** * @dev Returns the address of the current owner. */ function owner() public view override returns (address) { return _owner; } /** * @dev Returns the address of the current controller. */ function controller() public view override returns (address) { return _controller; } /** * @dev Modifier that throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == msg.sender, "oc1"); _; } /** * @dev Modifier that throws if called by any account other than the controller. */ modifier onlyController() { require(_controller == msg.sender, "oc2"); _; } /** * @dev Throws if called by any account other than the owner. */ function requireOwner() internal view { require(_owner == msg.sender, "oc1"); } /** * @dev Throws if called by any account other than the controller. */ function requireController() internal view { require(_controller == msg.sender, "oc2"); } /** * @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 override { requireOwner(); require(newOwner != address(0), "oc3"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } /** * @dev Transfers control of the contract to a new account (`newController`). * Can only be called by the owner. */ function transferControl(address newController) public virtual override { requireOwner(); require(newController != address(0), "oc4"); emit ControlTransferred(_controller, newController); _controller = newController; } }
{ "optimizer": { "enabled": true, "runs": 10000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"module","type":"address"}],"name":"ModuleCreated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"createModule","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506113c8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806320868d1814610030575b600080fd5b61004361003e366004610198565b61006c565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000803060405161007c9061018b565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f0801580156100b5573d6000803e3d6000fd5b506040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff82169063f2fde38b90602401600060405180830381600087803b15801561012057600080fd5b505af1158015610134573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681523392507ff708942ec477396a151a5285651961dcab8e8a82ea4f5b31a5236f92f6c92710915060200160405180910390a2949350505050565b61115c8061023783390190565b6000806000604084860312156101ad57600080fd5b833573ffffffffffffffffffffffffffffffffffffffff811681146101d157600080fd5b9250602084013567ffffffffffffffff808211156101ee57600080fd5b818601915086601f83011261020257600080fd5b81358181111561021157600080fd5b87602082850101111561022357600080fd5b602083019450809350505050925092509256fe60a060405234801561001057600080fd5b5060405161115c38038061115c83398101604081905261002f916100c5565b60008054336001600160a01b0319918216811783556001805490921681179091556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600080546040516001600160a01b0390911691907fa06677f7b64342b4bcbde423684dbdb5356acfe41ad0285b6ecbe6dc4bf427f2908290a36001600160a01b03166080526100f5565b6000602082840312156100d757600080fd5b81516001600160a01b03811681146100ee57600080fd5b9392505050565b60805161104c6101106000396000610297015261104c6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638f0bc15211610097578063c4113b8811610066578063c4113b8814610282578063c45a015514610295578063f2fde38b146102bb578063f77c4791146102ce57600080fd5b80638f0bc152146102025780639d63848a14610245578063a8734f0b1461025a578063c038a38e1461027a57600080fd5b80636c83ecca116100d35780636c83ecca146101925780636d16fa411461019c5780636fd366b8146101b15780638da5cb5b146101c357600080fd5b806302a688ed1461010557806327e235e3146101415780633e12170f1461016157806342a66f6814610189575b600080fd5b61012e610113366004610dd2565b505073ffffffffffffffffffffffffffffffffffffffff1690565b6040519081526020015b60405180910390f35b61015461014f366004610e25565b6102ec565b6040516101389190610e47565b61017461016f366004610e8b565b610357565b60408051928352602083019190915201610138565b61012e60025481565b61012e620f424081565b6101af6101aa366004610e25565b6105b9565b005b6101af6101bf366004610ee5565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610138565b610215610210366004610e8b565b6106b2565b6040805193845273ffffffffffffffffffffffffffffffffffffffff909216602084015290820152606001610138565b61024d610873565b6040516101389190610f27565b61012e610268366004610e25565b60036020526000908152604090205481565b6101546108e7565b610215610290366004610e8b565b61092e565b7f00000000000000000000000000000000000000000000000000000000000000006101dd565b6101af6102c9366004610e25565b610bff565b60015473ffffffffffffffffffffffffffffffffffffffff166101dd565b6040805160018082528183019092526060916020808301908036833750505073ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482519293509183919061034657610346610f75565b602002602001018181525050919050565b60008054819073ffffffffffffffffffffffffffffffffffffffff1633146103c65760405162461bcd60e51b815260206004820152600360248201527f6f6331000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600085116104185760405162461bcd60e51b81526004016103bd9060208082526004908201527f61736d3100000000000000000000000000000000000000000000000000000000604082015260600190565b60015473ffffffffffffffffffffffffffffffffffffffff8781169116146104845760405162461bcd60e51b81526004016103bd9060208082526004908201527f61736d3200000000000000000000000000000000000000000000000000000000604082015260600190565b602083146104d65760405162461bcd60e51b81526004016103bd9060208082526004908201527f61736d3300000000000000000000000000000000000000000000000000000000604082015260600190565b60843573ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260408120805488929061050e908490610fd3565b9250508190555085600260008282546105279190610fd3565b909155505073ffffffffffffffffffffffffffffffffffffffff81166000610552620f424089610fec565b604080518a81526020810183905291925060009173ffffffffffffffffffffffffffffffffffffffff8c169185917f020c82fffaa7f476edc4d209bc47371cb11635b2077978c27e7c39360146d2ed910160405180910390a4909890975095505050505050565b6105c1610cf7565b73ffffffffffffffffffffffffffffffffffffffff81166106245760405162461bcd60e51b815260206004820152600360248201527f6f6334000000000000000000000000000000000000000000000000000000000060448201526064016103bd565b60015460405173ffffffffffffffffffffffffffffffffffffffff8084169216907fa06677f7b64342b4bcbde423684dbdb5356acfe41ad0285b6ecbe6dc4bf427f290600090a3600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600080548190819073ffffffffffffffffffffffffffffffffffffffff16331461071e5760405162461bcd60e51b815260206004820152600360248201527f6f6331000000000000000000000000000000000000000000000000000000000060448201526064016103bd565b600086116107705760405162461bcd60e51b81526004016103bd9060208082526004908201527f61736d3800000000000000000000000000000000000000000000000000000000604082015260600190565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600360205260409020548611156107e75760405162461bcd60e51b81526004016103bd9060208082526004908201527f61736d3900000000000000000000000000000000000000000000000000000000604082015260600190565b73ffffffffffffffffffffffffffffffffffffffff8716600061080d620f424089610fec565b604080518a81526020810183905291925060009173ffffffffffffffffffffffffffffffffffffffff8c169185917f636cc28d1dc3c5f8610bbd1cabdf6585ab2ef79f4b9ae78e840c1b8fd5ac887a910160405180910390a49098909650945050505050565b604080516001808252818301909252606091602080830190803683370190505090506000816000815181106108aa576108aa610f75565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505090565b604080516001808252818301909252606091602080830190803683370190505090506002548160008151811061091f5761091f610f75565b60200260200101818152505090565b600080548190819073ffffffffffffffffffffffffffffffffffffffff16331461099a5760405162461bcd60e51b815260206004820152600360248201527f6f6331000000000000000000000000000000000000000000000000000000000060448201526064016103bd565b600086116109ec5760405162461bcd60e51b81526004016103bd9060208082526004908201527f61736d3400000000000000000000000000000000000000000000000000000000604082015260600190565b60015473ffffffffffffffffffffffffffffffffffffffff888116911614610a585760405162461bcd60e51b81526004016103bd9060208082526004908201527f61736d3500000000000000000000000000000000000000000000000000000000604082015260600190565b60208414610aaa5760405162461bcd60e51b81526004016103bd9060208082526004908201527f61736d3600000000000000000000000000000000000000000000000000000000604082015260600190565b60843573ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604090205480881115610b255760405162461bcd60e51b81526004016103bd9060208082526004908201527f61736d3700000000000000000000000000000000000000000000000000000000604082015260600190565b610b2f8882611003565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812091909155600280548a9290610b6a908490611003565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000610b95620f42408b610fec565b604080518c81526020810183905291925060009173ffffffffffffffffffffffffffffffffffffffff8e169185917f31d5ceefd9ae9f1d896ec09a203f74a59524f36c970d3ede03478bb30c550a21910160405180910390a4909a92995097509095505050505050565b610c07610cf7565b73ffffffffffffffffffffffffffffffffffffffff8116610c6a5760405162461bcd60e51b815260206004820152600360248201527f6f6333000000000000000000000000000000000000000000000000000000000060448201526064016103bd565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d5e5760405162461bcd60e51b815260206004820152600360248201527f6f6331000000000000000000000000000000000000000000000000000000000060448201526064016103bd565b565b803573ffffffffffffffffffffffffffffffffffffffff81168114610d8457600080fd5b919050565b60008083601f840112610d9b57600080fd5b50813567ffffffffffffffff811115610db357600080fd5b602083019150836020828501011115610dcb57600080fd5b9250929050565b600080600060408486031215610de757600080fd5b610df084610d60565b9250602084013567ffffffffffffffff811115610e0c57600080fd5b610e1886828701610d89565b9497909650939450505050565b600060208284031215610e3757600080fd5b610e4082610d60565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610e7f57835183529284019291840191600101610e63565b50909695505050505050565b60008060008060608587031215610ea157600080fd5b610eaa85610d60565b935060208501359250604085013567ffffffffffffffff811115610ecd57600080fd5b610ed987828801610d89565b95989497509550505050565b60008060208385031215610ef857600080fd5b823567ffffffffffffffff811115610f0f57600080fd5b610f1b85828601610d89565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015610e7f57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610f43565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610fe657610fe6610fa4565b92915050565b8082028115828204841417610fe657610fe6610fa4565b81810381811115610fe657610fe6610fa456fea264697066735822122067b264f99da1add812ba4e5e3d9adab1b670d8e654ebfc819b41feffad522dd664736f6c63430008120033a26469706673582212209cbad4cdc410eebd471112e6e0d8e00f6bf536ac9ab602ad697e58e6cd6dd01e64736f6c63430008120033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061002b5760003560e01c806320868d1814610030575b600080fd5b61004361003e366004610198565b61006c565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000803060405161007c9061018b565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f0801580156100b5573d6000803e3d6000fd5b506040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff82169063f2fde38b90602401600060405180830381600087803b15801561012057600080fd5b505af1158015610134573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681523392507ff708942ec477396a151a5285651961dcab8e8a82ea4f5b31a5236f92f6c92710915060200160405180910390a2949350505050565b61115c8061023783390190565b6000806000604084860312156101ad57600080fd5b833573ffffffffffffffffffffffffffffffffffffffff811681146101d157600080fd5b9250602084013567ffffffffffffffff808211156101ee57600080fd5b818601915086601f83011261020257600080fd5b81358181111561021157600080fd5b87602082850101111561022357600080fd5b602083019450809350505050925092509256fe60a060405234801561001057600080fd5b5060405161115c38038061115c83398101604081905261002f916100c5565b60008054336001600160a01b0319918216811783556001805490921681179091556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600080546040516001600160a01b0390911691907fa06677f7b64342b4bcbde423684dbdb5356acfe41ad0285b6ecbe6dc4bf427f2908290a36001600160a01b03166080526100f5565b6000602082840312156100d757600080fd5b81516001600160a01b03811681146100ee57600080fd5b9392505050565b60805161104c6101106000396000610297015261104c6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638f0bc15211610097578063c4113b8811610066578063c4113b8814610282578063c45a015514610295578063f2fde38b146102bb578063f77c4791146102ce57600080fd5b80638f0bc152146102025780639d63848a14610245578063a8734f0b1461025a578063c038a38e1461027a57600080fd5b80636c83ecca116100d35780636c83ecca146101925780636d16fa411461019c5780636fd366b8146101b15780638da5cb5b146101c357600080fd5b806302a688ed1461010557806327e235e3146101415780633e12170f1461016157806342a66f6814610189575b600080fd5b61012e610113366004610dd2565b505073ffffffffffffffffffffffffffffffffffffffff1690565b6040519081526020015b60405180910390f35b61015461014f366004610e25565b6102ec565b6040516101389190610e47565b61017461016f366004610e8b565b610357565b60408051928352602083019190915201610138565b61012e60025481565b61012e620f424081565b6101af6101aa366004610e25565b6105b9565b005b6101af6101bf366004610ee5565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610138565b610215610210366004610e8b565b6106b2565b6040805193845273ffffffffffffffffffffffffffffffffffffffff909216602084015290820152606001610138565b61024d610873565b6040516101389190610f27565b61012e610268366004610e25565b60036020526000908152604090205481565b6101546108e7565b610215610290366004610e8b565b61092e565b7f00000000000000000000000000000000000000000000000000000000000000006101dd565b6101af6102c9366004610e25565b610bff565b60015473ffffffffffffffffffffffffffffffffffffffff166101dd565b6040805160018082528183019092526060916020808301908036833750505073ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482519293509183919061034657610346610f75565b602002602001018181525050919050565b60008054819073ffffffffffffffffffffffffffffffffffffffff1633146103c65760405162461bcd60e51b815260206004820152600360248201527f6f6331000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600085116104185760405162461bcd60e51b81526004016103bd9060208082526004908201527f61736d3100000000000000000000000000000000000000000000000000000000604082015260600190565b60015473ffffffffffffffffffffffffffffffffffffffff8781169116146104845760405162461bcd60e51b81526004016103bd9060208082526004908201527f61736d3200000000000000000000000000000000000000000000000000000000604082015260600190565b602083146104d65760405162461bcd60e51b81526004016103bd9060208082526004908201527f61736d3300000000000000000000000000000000000000000000000000000000604082015260600190565b60843573ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260408120805488929061050e908490610fd3565b9250508190555085600260008282546105279190610fd3565b909155505073ffffffffffffffffffffffffffffffffffffffff81166000610552620f424089610fec565b604080518a81526020810183905291925060009173ffffffffffffffffffffffffffffffffffffffff8c169185917f020c82fffaa7f476edc4d209bc47371cb11635b2077978c27e7c39360146d2ed910160405180910390a4909890975095505050505050565b6105c1610cf7565b73ffffffffffffffffffffffffffffffffffffffff81166106245760405162461bcd60e51b815260206004820152600360248201527f6f6334000000000000000000000000000000000000000000000000000000000060448201526064016103bd565b60015460405173ffffffffffffffffffffffffffffffffffffffff8084169216907fa06677f7b64342b4bcbde423684dbdb5356acfe41ad0285b6ecbe6dc4bf427f290600090a3600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600080548190819073ffffffffffffffffffffffffffffffffffffffff16331461071e5760405162461bcd60e51b815260206004820152600360248201527f6f6331000000000000000000000000000000000000000000000000000000000060448201526064016103bd565b600086116107705760405162461bcd60e51b81526004016103bd9060208082526004908201527f61736d3800000000000000000000000000000000000000000000000000000000604082015260600190565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600360205260409020548611156107e75760405162461bcd60e51b81526004016103bd9060208082526004908201527f61736d3900000000000000000000000000000000000000000000000000000000604082015260600190565b73ffffffffffffffffffffffffffffffffffffffff8716600061080d620f424089610fec565b604080518a81526020810183905291925060009173ffffffffffffffffffffffffffffffffffffffff8c169185917f636cc28d1dc3c5f8610bbd1cabdf6585ab2ef79f4b9ae78e840c1b8fd5ac887a910160405180910390a49098909650945050505050565b604080516001808252818301909252606091602080830190803683370190505090506000816000815181106108aa576108aa610f75565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505090565b604080516001808252818301909252606091602080830190803683370190505090506002548160008151811061091f5761091f610f75565b60200260200101818152505090565b600080548190819073ffffffffffffffffffffffffffffffffffffffff16331461099a5760405162461bcd60e51b815260206004820152600360248201527f6f6331000000000000000000000000000000000000000000000000000000000060448201526064016103bd565b600086116109ec5760405162461bcd60e51b81526004016103bd9060208082526004908201527f61736d3400000000000000000000000000000000000000000000000000000000604082015260600190565b60015473ffffffffffffffffffffffffffffffffffffffff888116911614610a585760405162461bcd60e51b81526004016103bd9060208082526004908201527f61736d3500000000000000000000000000000000000000000000000000000000604082015260600190565b60208414610aaa5760405162461bcd60e51b81526004016103bd9060208082526004908201527f61736d3600000000000000000000000000000000000000000000000000000000604082015260600190565b60843573ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604090205480881115610b255760405162461bcd60e51b81526004016103bd9060208082526004908201527f61736d3700000000000000000000000000000000000000000000000000000000604082015260600190565b610b2f8882611003565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812091909155600280548a9290610b6a908490611003565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000610b95620f42408b610fec565b604080518c81526020810183905291925060009173ffffffffffffffffffffffffffffffffffffffff8e169185917f31d5ceefd9ae9f1d896ec09a203f74a59524f36c970d3ede03478bb30c550a21910160405180910390a4909a92995097509095505050505050565b610c07610cf7565b73ffffffffffffffffffffffffffffffffffffffff8116610c6a5760405162461bcd60e51b815260206004820152600360248201527f6f6333000000000000000000000000000000000000000000000000000000000060448201526064016103bd565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d5e5760405162461bcd60e51b815260206004820152600360248201527f6f6331000000000000000000000000000000000000000000000000000000000060448201526064016103bd565b565b803573ffffffffffffffffffffffffffffffffffffffff81168114610d8457600080fd5b919050565b60008083601f840112610d9b57600080fd5b50813567ffffffffffffffff811115610db357600080fd5b602083019150836020828501011115610dcb57600080fd5b9250929050565b600080600060408486031215610de757600080fd5b610df084610d60565b9250602084013567ffffffffffffffff811115610e0c57600080fd5b610e1886828701610d89565b9497909650939450505050565b600060208284031215610e3757600080fd5b610e4082610d60565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610e7f57835183529284019291840191600101610e63565b50909695505050505050565b60008060008060608587031215610ea157600080fd5b610eaa85610d60565b935060208501359250604085013567ffffffffffffffff811115610ecd57600080fd5b610ed987828801610d89565b95989497509550505050565b60008060208385031215610ef857600080fd5b823567ffffffffffffffff811115610f0f57600080fd5b610f1b85828601610d89565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015610e7f57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610f43565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610fe657610fe6610fa4565b92915050565b8082028115828204841417610fe657610fe6610fa4565b81810381811115610fe657610fe6610fa456fea264697066735822122067b264f99da1add812ba4e5e3d9adab1b670d8e654ebfc819b41feffad522dd664736f6c63430008120033a26469706673582212209cbad4cdc410eebd471112e6e0d8e00f6bf536ac9ab602ad697e58e6cd6dd01e64736f6c63430008120033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.