Contract Overview
Balance:
0 CELO
CELO Value:
$0.00
My Name Tag:
Not Available, login to update
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0xe50f5ca841d3d8a0a9eda073f7fda159a895c55b477b27c4d878a3e693b7414c | Transfer Ownersh... | 18226873 | 83 days 5 hrs ago | 0xdbb0219d26dc9a1251e563114bcd5f647b173662 | IN | 0x6ff6a0982c68f49586360f5bef302ef8ca837734 | 0 CELO | 0.00072295 | |
0x886843778578d69a99cdcfef89cde9aea7ed10d966a5ef906ed74f6f01f9d844 | 0x60806040 | 18226870 | 83 days 5 hrs ago | 0xdbb0219d26dc9a1251e563114bcd5f647b173662 | IN | Contract Creation | 0 CELO | 0.00424861 |
[ Download CSV Export ]
Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x3b870ec4319d122e38a0079f9b5aae3184b9b97d
Contract Name:
NoExternalStrategy
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at celoscan.io on 2023-04-28 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // 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); } // File: contracts/strategies/IStrategy.sol pragma solidity 0.8.7; interface IStrategy { function invest(address _inboundCurrency, uint256 _minAmount) external payable; function earlyWithdraw(address _inboundCurrency, uint256 _amount, uint256 _minAmount) external; function redeem( address _inboundCurrency, uint256 _amount, uint256 _minAmount, bool disableRewardTokenClaim ) external; function getTotalAmount() external view returns (uint256); function getLPTokenAmount(uint256 _amount) external view returns (uint256); function getFee() external view returns (uint256); function getNetDepositAmount(uint256 _amount) external view returns (uint256); function getAccumulatedRewardTokenAmounts(bool disableRewardTokenClaim) external returns (uint256[] memory); function getRewardTokens() external view returns (IERC20[] memory); function getUnderlyingAsset() external view returns (address); function strategyOwner() external view returns (address); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @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; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @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. * * By default, the owner account will be the one that deploys the contract. 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; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @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 { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing 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 { require(newOwner != address(0), "Ownable: new owner is the zero address"); _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); } } // File: contracts/strategies/NoExternalStrategy.sol pragma solidity 0.8.7; //*********************************************************************// // --------------------------- custom errors ------------------------- // //*********************************************************************// error INVALID_REWARD_TOKEN(); error TOKEN_TRANSFER_FAILURE(); error TRANSACTIONAL_TOKEN_TRANSFER_FAILURE(); /** @notice This strategy holds the deposited funds without transferring them to an external protocol. @author Francis Odisi & Viraz Malhotra. */ contract NoExternalStrategy is Ownable, IStrategy { /// @notice inbound token (deposit token) address IERC20 public inboundToken; /// @notice reward token address IERC20[] public rewardTokens; //*********************************************************************// // ------------------------- external views -------------------------- // //*********************************************************************// /** @notice Get strategy owner address. @return Strategy owner. */ function strategyOwner() external view override returns (address) { return super.owner(); } /** @notice Returns the total accumulated amount (i.e., principal + interest) stored in curve. Intended for usage by external clients and in case of variable deposit pools. @return Total accumulated amount. */ function getTotalAmount() external view override returns (uint256) { return address(inboundToken) == address(0) ? address(this).balance : inboundToken.balanceOf(address(this)); } /** @notice Get the expected net deposit amount (amount minus slippage) for a given amount. Used only for AMM strategies. @return net amount. */ function getNetDepositAmount(uint256 _amount) external pure override returns (uint256) { return _amount; } /** @notice Returns the underlying token address. @return Returns the underlying inbound (deposit) token address. */ function getUnderlyingAsset() external view override returns (address) { return address(inboundToken); } /** @notice Returns the instances of the reward tokens */ function getRewardTokens() external view override returns (IERC20[] memory) { return rewardTokens; } /** @notice Returns the lp token amount received (for amm strategies) */ function getLPTokenAmount(uint256 _amount) external pure override returns (uint256) { return _amount; } /** @notice Returns the fee (for amm strategies) */ function getFee() external pure override returns (uint256) { return 0; } //*********************************************************************// // -------------------------- constructor ---------------------------- // //*********************************************************************// /** @param _inboundCurrency inbound currency address. */ constructor(address _inboundCurrency, IERC20[] memory _rewardTokens) { inboundToken = IERC20(_inboundCurrency); uint256 numRewards = _rewardTokens.length; for (uint256 i = 0; i < numRewards; ) { if (address(_rewardTokens[i]) == address(0)) { revert INVALID_REWARD_TOKEN(); } unchecked { ++i; } } rewardTokens = _rewardTokens; } //*********************************************************************// // ------------------------- internal method -------------------------- // //*********************************************************************// /** @notice Transfers inbound token amount back to pool. @param _inboundCurrency Address of the inbound token. @param _amount transfer amount */ function _transferInboundTokenToPool(address _inboundCurrency, uint256 _amount) internal { if (_inboundCurrency == address(0)) { (bool success, ) = msg.sender.call{ value: _amount }(""); if (!success) { revert TRANSACTIONAL_TOKEN_TRANSFER_FAILURE(); } } else { bool success = IERC20(_inboundCurrency).transfer(msg.sender, _amount); if (!success) { revert TOKEN_TRANSFER_FAILURE(); } } } /** @notice Deposits funds into this contract. @param _inboundCurrency Address of the inbound token. @param _minAmount Used for aam strategies, since every strategy overrides from the same strategy interface hence it is defined here. _minAmount isn't needed in this strategy but since all strategies override from the same interface and the amm strategies need it hence it is used here. */ function invest(address _inboundCurrency, uint256 _minAmount) external payable override onlyOwner {} /** @notice Withdraws funds from this strategy in case of an early withdrawal. @param _inboundCurrency Address of the inbound token. @param _amount Amount to withdraw. @param _minAmount Used for aam strategies, since every strategy overrides from the same strategy interface hence it is defined here. _minAmount isn't needed in this strategy but since all strategies override from the same interface and the amm strategies need it hence it is used here. */ function earlyWithdraw(address _inboundCurrency, uint256 _amount, uint256 _minAmount) external override onlyOwner { _transferInboundTokenToPool(_inboundCurrency, _amount); } /** @notice Redeems funds from this strategy when the waiting round for the good ghosting pool is over. @param _inboundCurrency Address of the inbound token. @param _amount Amount to withdraw. @param _minAmount Used for aam strategies, since every strategy overrides from the same strategy interface hence it is defined here. _minAmount isn't needed in this strategy but since all strategies override from the same interface and the amm strategies need it hence it is used here. @param disableRewardTokenClaim Reward claim disable flag. */ function redeem( address _inboundCurrency, uint256 _amount, uint256 _minAmount, bool disableRewardTokenClaim ) external override onlyOwner { uint256 _balance = _inboundCurrency == address(0) ? address(this).balance : IERC20(_inboundCurrency).balanceOf(address(this)); // safety check since funds don't get transferred to a extrnal protocol if (_amount > _balance) { _amount = _balance; } _transferInboundTokenToPool(_inboundCurrency, _amount); if (!disableRewardTokenClaim) { // avoid multiple SLOADS IERC20[] memory _rewardTokens = rewardTokens; uint256 numRewards = _rewardTokens.length; for (uint256 i = 0; i < numRewards; ) { // safety check since funds don't get transferred to a extrnal protocol if (_rewardTokens[i].balanceOf(address(this)) != 0) { bool success = _rewardTokens[i].transfer(msg.sender, _rewardTokens[i].balanceOf(address(this))); if (!success) { revert TOKEN_TRANSFER_FAILURE(); } } unchecked { ++i; } } } } /** @notice Returns total accumulated reward token amount. @param disableRewardTokenClaim Reward claim disable flag. */ function getAccumulatedRewardTokenAmounts( bool disableRewardTokenClaim ) external view override returns (uint256[] memory) { // avoid multiple SLOADS IERC20[] memory _rewardTokens = rewardTokens; uint256 numRewards = _rewardTokens.length; uint256[] memory amounts = new uint256[](numRewards); for (uint256 i = 0; i < numRewards; ) { amounts[i] = _rewardTokens[i].balanceOf(address(this)); unchecked { ++i; } } return amounts; } }
[{"inputs":[{"internalType":"address","name":"_inboundCurrency","type":"address"},{"internalType":"contract IERC20[]","name":"_rewardTokens","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"INVALID_REWARD_TOKEN","type":"error"},{"inputs":[],"name":"TOKEN_TRANSFER_FAILURE","type":"error"},{"inputs":[],"name":"TRANSACTIONAL_TOKEN_TRANSFER_FAILURE","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":[{"internalType":"address","name":"_inboundCurrency","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_minAmount","type":"uint256"}],"name":"earlyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"disableRewardTokenClaim","type":"bool"}],"name":"getAccumulatedRewardTokenAmounts","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"getLPTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"getNetDepositAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getRewardTokens","outputs":[{"internalType":"contract IERC20[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnderlyingAsset","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inboundToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_inboundCurrency","type":"address"},{"internalType":"uint256","name":"_minAmount","type":"uint256"}],"name":"invest","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_inboundCurrency","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_minAmount","type":"uint256"},{"internalType":"bool","name":"disableRewardTokenClaim","type":"bool"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardTokens","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"strategyOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200106e3803806200106e8339810160408190526200003491620001c5565b6200003f33620000e2565b600180546001600160a01b0319166001600160a01b038416179055805160005b81811015620000c25760006001600160a01b0316838281518110620000885762000088620002b7565b60200260200101516001600160a01b03161415620000b957604051631a26e5dd60e31b815260040160405180910390fd5b6001016200005f565b508151620000d890600290602085019062000132565b50505050620002fc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280548282559060005260206000209081019282156200018a579160200282015b828111156200018a57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000153565b50620001989291506200019c565b5090565b5b808211156200019857600081556001016200019d565b8051620001c081620002e3565b919050565b60008060408385031215620001d957600080fd5b8251620001e681620002e3565b602084810151919350906001600160401b03808211156200020657600080fd5b818601915086601f8301126200021b57600080fd5b815181811115620002305762000230620002cd565b8060051b604051601f19603f83011681018181108582111715620002585762000258620002cd565b604052828152858101935084860182860187018b10156200027857600080fd5b600095505b83861015620002a6576200029181620001b3565b8552600195909501949386019386016200027d565b508096505050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114620002f957600080fd5b50565b610d62806200030c6000396000f3fe6080604052600436106100c35760003560e01c80631b206b73146100c85780634281b1fb146100f85780634bfd65711461011857806365237abb1461013a57806365ac43411461016657806365e0d7311461017b578063715018a61461019b5780637bb7bed1146101b05780638da5cb5b146101d0578063a522f7d01461013a578063b9b8c246146101e5578063c4f59f9b146101f8578063ca63279b1461021a578063ced72f8714610247578063e3daf4561461025b578063f2fde38b14610270575b600080fd5b3480156100d457600080fd5b506001546001600160a01b03165b6040516100ef9190610c40565b60405180910390f35b34801561010457600080fd5b506001546100e2906001600160a01b031681565b34801561012457600080fd5b50610138610133366004610b59565b610290565b005b34801561014657600080fd5b50610158610155366004610c0e565b90565b6040519081526020016100ef565b34801561017257600080fd5b506101586102a7565b34801561018757600080fd5b50610138610196366004610b8c565b610345565b3480156101a757600080fd5b5061013861066a565b3480156101bc57600080fd5b506100e26101cb366004610c0e565b61067e565b3480156101dc57600080fd5b506100e26106a8565b6101386101f3366004610b2f565b6106b7565b34801561020457600080fd5b5061020d6106c3565b6040516100ef9190610c6d565b34801561022657600080fd5b5061023a610235366004610bd4565b610725565b6040516100ef9190610cba565b34801561025357600080fd5b506000610158565b34801561026757600080fd5b506100e26108a0565b34801561027c57600080fd5b5061013861028b366004610b0d565b6108aa565b610298610928565b6102a28383610987565b505050565b6001546000906001600160a01b031615610340576001546040516370a0823160e01b81526001600160a01b03909116906370a08231906102eb903090600401610c40565b60206040518083038186803b15801561030357600080fd5b505afa158015610317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033b9190610c27565b905090565b504790565b61034d610928565b60006001600160a01b038516156103df576040516370a0823160e01b81526001600160a01b038616906370a082319061038a903090600401610c40565b60206040518083038186803b1580156103a257600080fd5b505afa1580156103b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103da9190610c27565b6103e1565b475b9050808411156103ef578093505b6103f98585610987565b81610663576000600280548060200260200160405190810160405280929190818152602001828054801561045657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610438575b505083519394506000925050505b8181101561065f5782818151811061047e5761047e610cf2565b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016104b19190610c40565b60206040518083038186803b1580156104c957600080fd5b505afa1580156104dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105019190610c27565b1561065757600083828151811061051a5761051a610cf2565b60200260200101516001600160a01b031663a9059cbb3386858151811061054357610543610cf2565b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016105769190610c40565b60206040518083038186803b15801561058e57600080fd5b505afa1580156105a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c69190610c27565b6040518363ffffffff1660e01b81526004016105e3929190610c54565b602060405180830381600087803b1580156105fd57600080fd5b505af1158015610611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106359190610bf1565b90508061065557604051638dc18fdb60e01b815260040160405180910390fd5b505b600101610464565b5050505b5050505050565b610672610928565b61067c6000610aa1565b565b6002818154811061068e57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031690565b6106bf610928565b5050565b6060600280548060200260200160405190810160405280929190818152602001828054801561071b57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116106fd575b5050505050905090565b60606000600280548060200260200160405190810160405280929190818152602001828054801561077f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610761575b505050505090506000815190506000816001600160401b038111156107a6576107a6610d08565b6040519080825280602002602001820160405280156107cf578160200160208202803683370190505b50905060005b82811015610897578381815181106107ef576107ef610cf2565b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016108229190610c40565b60206040518083038186803b15801561083a57600080fd5b505afa15801561084e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108729190610c27565b82828151811061088457610884610cf2565b60209081029190910101526001016107d5565b50949350505050565b600061033b6106a8565b6108b2610928565b6001600160a01b03811661091c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61092581610aa1565b50565b336109316106a8565b6001600160a01b03161461067c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610913565b6001600160a01b0382166109fe57604051600090339083908381818185875af1925050503d80600081146109d7576040519150601f19603f3d011682016040523d82523d6000602084013e6109dc565b606091505b50509050806102a257604051634d4c5bd160e11b815260040160405180910390fd5b60405163a9059cbb60e01b81526000906001600160a01b0384169063a9059cbb90610a2f9033908690600401610c54565b602060405180830381600087803b158015610a4957600080fd5b505af1158015610a5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a819190610bf1565b9050806102a257604051638dc18fdb60e01b815260040160405180910390fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b0381168114610b0857600080fd5b919050565b600060208284031215610b1f57600080fd5b610b2882610af1565b9392505050565b60008060408385031215610b4257600080fd5b610b4b83610af1565b946020939093013593505050565b600080600060608486031215610b6e57600080fd5b610b7784610af1565b95602085013595506040909401359392505050565b60008060008060808587031215610ba257600080fd5b610bab85610af1565b935060208501359250604085013591506060850135610bc981610d1e565b939692955090935050565b600060208284031215610be657600080fd5b8135610b2881610d1e565b600060208284031215610c0357600080fd5b8151610b2881610d1e565b600060208284031215610c2057600080fd5b5035919050565b600060208284031215610c3957600080fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015610cae5783516001600160a01b031683529284019291840191600101610c89565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610cae57835183529284019291840191600101610cd6565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461092557600080fdfea2646970667358221220b22a727b154e4e8b229205c5c8bfd2818630b548d99c3d74bd041b653362dbc364736f6c6343000807003300000000000000000000000062b8b11039fcfe5ab0c56e502b1c372a3d2a9c7a00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000
Deployed ByteCode Sourcemap
8132:7871:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9682:118;;;;;;;;;;-1:-1:-1;9779:12:0;;-1:-1:-1;;;;;9779:12:0;9682:118;;;;;;;:::i;:::-;;;;;;;;8244:26;;;;;;;;;;-1:-1:-1;8244:26:0;;;;-1:-1:-1;;;;;8244:26:0;;;13160:187;;;;;;;;;;-1:-1:-1;13160:187:0;;;;;:::i;:::-;;:::i;:::-;;9411:120;;;;;;;;;;-1:-1:-1;9411:120:0;;;;;:::i;:::-;9516:7;9411:120;;;;5441:25:1;;;5429:2;5414:18;9411:120:0;5295:177:1;9040:192:0;;;;;;;;;;;;;:::i;13940:1341::-;;;;;;;;;;-1:-1:-1;13940:1341:0;;;;;:::i;:::-;;:::i;6730:103::-;;;;;;;;;;;;;:::i;8317:28::-;;;;;;;;;;-1:-1:-1;8317:28:0;;;;;:::i;:::-;;:::i;6082:87::-;;;;;;;;;;;;;:::i;12555:100::-;;;;;;:::i;:::-;;:::i;9887:114::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;15434:566::-;;;;;;;;;;-1:-1:-1;15434:566:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;10301:86::-;;;;;;;;;;-1:-1:-1;10351:7:0;10301:86;;8686:105;;;;;;;;;;;;;:::i;6988:201::-;;;;;;;;;;-1:-1:-1;6988:201:0;;;;;:::i;:::-;;:::i;13160:187::-;5968:13;:11;:13::i;:::-;13285:54:::1;13313:16;13331:7;13285:27;:54::i;:::-;13160:187:::0;;;:::o;9040:192::-;9133:12;;9098:7;;-1:-1:-1;;;;;9133:12:0;9125:35;:99;;9187:12;;:37;;-1:-1:-1;;;9187:37:0;;-1:-1:-1;;;;;9187:12:0;;;;:22;;:37;;9218:4;;9187:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9118:106;;9040:192;:::o;9125:99::-;-1:-1:-1;9163:21:0;;9040:192::o;13940:1341::-;5968:13;:11;:13::i;:::-;14131:16:::1;-1:-1:-1::0;;;;;14150:30:0;::::1;::::0;:132:::1;;14233:49;::::0;-1:-1:-1;;;14233:49:0;;-1:-1:-1;;;;;14233:34:0;::::1;::::0;::::1;::::0;:49:::1;::::0;14276:4:::1;::::0;14233:49:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14150:132;;;14196:21;14150:132;14131:151;;14388:8;14378:7;:18;14374:69;;;14423:8;14413:18;;14374:69;14455:54;14483:16;14501:7;14455:27;:54::i;:::-;14527:23;14522:752;;14605:29;14637:12;14605:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;14605:44:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;-1:-1:-1::0;;14685:20:0;;14605:44;;-1:-1:-1;14664:18:0::1;::::0;-1:-1:-1;;;14720:543:0::1;14744:10;14740:1;:14;14720:543;;;14870:13;14884:1;14870:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;14870:26:0::1;;14905:4;14870:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46:::0;14866:308:::1;;14941:12;14956:13;14970:1;14956:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;14956:25:0::1;;14982:10;14994:13;15008:1;14994:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;14994:26:0::1;;15029:4;14994:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14956:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14941:95;;15064:7;15059:96;;15107:24;;-1:-1:-1::0;;;15107:24:0::1;;;;;;;;;;;15059:96;14918:256;14866:308;15225:3;;14720:543;;;;14552:722;;14522:752;14120:1161;13940:1341:::0;;;;:::o;6730:103::-;5968:13;:11;:13::i;:::-;6795:30:::1;6822:1;6795:18;:30::i;:::-;6730:103::o:0;8317:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8317:28:0;;-1:-1:-1;8317:28:0;:::o;6082:87::-;6128:7;6155:6;-1:-1:-1;;;;;6155:6:0;;6082:87::o;12555:100::-;5968:13;:11;:13::i;:::-;12555:100;;:::o;9887:114::-;9946:15;9981:12;9974:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9974:19:0;;;;;;;;;;;;;;;;;;;;;;;9887:114;:::o;15434:566::-;15554:16;15617:29;15649:12;15617:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15617:44:0;;;;;;;;;;;;;;;;;;;;;;;15672:18;15693:13;:20;15672:41;;15724:24;15765:10;-1:-1:-1;;;;;15751:25:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15751:25:0;;15724:52;;15792:9;15787:181;15811:10;15807:1;:14;15787:181;;;15853:13;15867:1;15853:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;15853:26:0;;15888:4;15853:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15840:7;15848:1;15840:10;;;;;;;;:::i;:::-;;;;;;;;;;:54;15938:3;;15787:181;;;-1:-1:-1;15985:7:0;15434:566;-1:-1:-1;;;;15434:566:0:o;8686:105::-;8743:7;8770:13;:11;:13::i;6988:201::-;5968:13;:11;:13::i;:::-;-1:-1:-1;;;;;7077:22:0;::::1;7069:73;;;::::0;-1:-1:-1;;;7069:73:0;;4729:2:1;7069:73:0::1;::::0;::::1;4711:21:1::0;4768:2;4748:18;;;4741:30;4807:34;4787:18;;;4780:62;-1:-1:-1;;;4858:18:1;;;4851:36;4904:19;;7069:73:0::1;;;;;;;;;7153:28;7172:8;7153:18;:28::i;:::-;6988:201:::0;:::o;6247:132::-;4715:10;6311:7;:5;:7::i;:::-;-1:-1:-1;;;;;6311:23:0;;6303:68;;;;-1:-1:-1;;;6303:68:0;;5136:2:1;6303:68:0;;;5118:21:1;;;5155:18;;;5148:30;5214:34;5194:18;;;5187:62;5266:18;;6303:68:0;4934:356:1;11592:530:0;-1:-1:-1;;;;;11696:30:0;;11692:423;;11762:37;;11744:12;;11762:10;;11786:7;;11744:12;11762:37;11744:12;11762:37;11786:7;11762:10;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11743:56;;;11819:7;11814:94;;11854:38;;-1:-1:-1;;;11854:38:0;;;;;;;;;;;11692:423;11955:54;;-1:-1:-1;;;11955:54:0;;11940:12;;-1:-1:-1;;;;;11955:33:0;;;;;:54;;11989:10;;12001:7;;11955:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11940:69;;12029:7;12024:80;;12064:24;;-1:-1:-1;;;12064:24:0;;;;;;;;;;;7349:191;7423:16;7442:6;;-1:-1:-1;;;;;7459:17:0;;;-1:-1:-1;;;;;;7459:17:0;;;;;;7492:40;;7442:6;;;;;;;7492:40;;7423:16;7492:40;7412:128;7349:191;:::o;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:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:1:o;383:254::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;627:2;612:18;;;;599:32;;-1:-1:-1;;;383:254:1:o;642:322::-;719:6;727;735;788:2;776:9;767:7;763:23;759:32;756:52;;;804:1;801;794:12;756:52;827:29;846:9;827:29;:::i;:::-;817:39;903:2;888:18;;875:32;;-1:-1:-1;954:2:1;939:18;;;926:32;;642:322;-1:-1:-1;;;642:322:1:o;969:452::-;1052:6;1060;1068;1076;1129:3;1117:9;1108:7;1104:23;1100:33;1097:53;;;1146:1;1143;1136:12;1097:53;1169:29;1188:9;1169:29;:::i;:::-;1159:39;;1245:2;1234:9;1230:18;1217:32;1207:42;;1296:2;1285:9;1281:18;1268:32;1258:42;;1350:2;1339:9;1335:18;1322:32;1363:28;1385:5;1363:28;:::i;:::-;969:452;;;;-1:-1:-1;969:452:1;;-1:-1:-1;;969:452:1:o;1426:241::-;1482:6;1535:2;1523:9;1514:7;1510:23;1506:32;1503:52;;;1551:1;1548;1541:12;1503:52;1590:9;1577:23;1609:28;1631:5;1609:28;:::i;1672:245::-;1739:6;1792:2;1780:9;1771:7;1767:23;1763:32;1760:52;;;1808:1;1805;1798:12;1760:52;1840:9;1834:16;1859:28;1881:5;1859:28;:::i;1922:180::-;1981:6;2034:2;2022:9;2013:7;2009:23;2005:32;2002:52;;;2050:1;2047;2040:12;2002:52;-1:-1:-1;2073:23:1;;1922:180;-1:-1:-1;1922:180:1:o;2107:184::-;2177:6;2230:2;2218:9;2209:7;2205:23;2201:32;2198:52;;;2246:1;2243;2236:12;2198:52;-1:-1:-1;2269:16:1;;2107:184;-1:-1:-1;2107:184:1:o;2506:203::-;-1:-1:-1;;;;;2670:32:1;;;;2652:51;;2640:2;2625:18;;2506:203::o;2714:274::-;-1:-1:-1;;;;;2906:32:1;;;;2888:51;;2970:2;2955:18;;2948:34;2876:2;2861:18;;2714:274::o;2993:671::-;3177:2;3229:21;;;3299:13;;3202:18;;;3321:22;;;3148:4;;3177:2;3400:15;;;;3374:2;3359:18;;;3148:4;3443:195;3457:6;3454:1;3451:13;3443:195;;;3522:13;;-1:-1:-1;;;;;3518:39:1;3506:52;;3613:15;;;;3578:12;;;;3554:1;3472:9;3443:195;;;-1:-1:-1;3655:3:1;;2993:671;-1:-1:-1;;;;;;2993:671:1:o;3669:632::-;3840:2;3892:21;;;3962:13;;3865:18;;;3984:22;;;3811:4;;3840:2;4063:15;;;;4037:2;4022:18;;;3811:4;4106:169;4120:6;4117:1;4114:13;4106:169;;;4181:13;;4169:26;;4250:15;;;;4215:12;;;;4142:1;4135:9;4106:169;;5477:127;5538:10;5533:3;5529:20;5526:1;5519:31;5569:4;5566:1;5559:15;5593:4;5590:1;5583:15;5609:127;5670:10;5665:3;5661:20;5658:1;5651:31;5701:4;5698:1;5691:15;5725:4;5722:1;5715:15;5741:118;5827:5;5820:13;5813:21;5806:5;5803:32;5793:60;;5849:1;5846;5839:12
Swarm Source
ipfs://b22a727b154e4e8b229205c5c8bfd2818630b548d99c3d74bd041b653362dbc3
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.