More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 1,248 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Deposit | 19658993 | 217 days ago | IN | 0 ETH | 0.00169117 | ||||
Active Pool | 19658987 | 217 days ago | IN | 0 ETH | 0.00026712 | ||||
Add | 19658985 | 217 days ago | IN | 0 ETH | 0.00204577 | ||||
Stop Pool | 19658925 | 217 days ago | IN | 0 ETH | 0.00038594 | ||||
Claim Reward | 19384278 | 256 days ago | IN | 0 ETH | 0.00647096 | ||||
Withdraw | 17859335 | 470 days ago | IN | 0 ETH | 0.00255274 | ||||
Claim Reward | 17544846 | 514 days ago | IN | 0 ETH | 0.00283586 | ||||
Deposit | 17159782 | 568 days ago | IN | 0 ETH | 0.00831046 | ||||
Claim Reward | 16963831 | 596 days ago | IN | 0 ETH | 0.00277121 | ||||
Claim Reward | 16830163 | 615 days ago | IN | 0 ETH | 0.00341587 | ||||
Withdraw | 16708090 | 632 days ago | IN | 0 ETH | 0.00225792 | ||||
Claim Reward | 16708085 | 632 days ago | IN | 0 ETH | 0.00312549 | ||||
Withdraw | 16705790 | 632 days ago | IN | 0 ETH | 0.00254483 | ||||
Deposit | 16700043 | 633 days ago | IN | 0 ETH | 0.00428237 | ||||
Withdraw | 16690533 | 634 days ago | IN | 0 ETH | 0.00496632 | ||||
Withdraw | 16669971 | 637 days ago | IN | 0 ETH | 0.00499482 | ||||
Claim Reward | 16669964 | 637 days ago | IN | 0 ETH | 0.00695132 | ||||
Deposit | 16667921 | 637 days ago | IN | 0 ETH | 0.00388754 | ||||
Withdraw | 16637960 | 642 days ago | IN | 0 ETH | 0.00418741 | ||||
Deposit | 16610655 | 645 days ago | IN | 0 ETH | 0.00220973 | ||||
Claim Reward | 16609129 | 646 days ago | IN | 0 ETH | 0.00208617 | ||||
Withdraw | 16556036 | 653 days ago | IN | 0 ETH | 0.00321148 | ||||
Claim Reward | 16514863 | 659 days ago | IN | 0 ETH | 0.00249287 | ||||
Withdraw | 16511954 | 659 days ago | IN | 0 ETH | 0.00277582 | ||||
Deposit | 16506398 | 660 days ago | IN | 0 ETH | 0.00208037 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
PolkaBridgeMasterFarm
Compiler Version
v0.6.2+commit.bacdbe57
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion, Audited
Contract Source Code (Solidity Standard Json-Input format)Audit Report
pragma solidity >=0.6.0; import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; import "@openzeppelin/contracts/math/SafeMath.sol"; import "@openzeppelin/contracts/ownership/Ownable.sol"; import "./PolkaBridge.sol"; // import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol"; //import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; //import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol"; contract PolkaBridgeMasterFarm is Ownable { string public name = "PolkaBridge: Deflationary Farming"; using SafeMath for uint256; using SafeERC20 for IERC20; struct UserInfo { uint256 amountLP; uint256 rewardDebt; uint256 rewardDebtAtBlock; uint256 rewardClaimed; } struct PoolInfo { IERC20 lpToken; IERC20 tokenA; IERC20 tokenB; uint256 multiplier; uint256 lastPoolReward; //history pool reward uint256 lastRewardBlock; uint256 lastLPBalance; uint256 accPBRPerShare; uint256 startBlock; uint256 stopBlock; uint256 totalRewardClaimed; bool isActived; } PolkaBridge public polkaBridge; uint256 public START_BLOCK; //pool Info PoolInfo[] public poolInfo; mapping(address => uint256) public poolId1; // Info of each user that stakes LP tokens. pid => user address => info mapping(uint256 => mapping(address => UserInfo)) public userInfo; constructor(PolkaBridge _polkaBridge, uint256 _startBlock) public { polkaBridge = _polkaBridge; START_BLOCK = _startBlock; } function poolBalance() public view returns (uint256) { return polkaBridge.balanceOf(address(this)); } // Add a new lp to the pool. Can only be called by the owner. function add(IERC20 _lpToken,IERC20 _tokenA, IERC20 _tokenB, uint256 _multiplier, uint256 _startBlock) public onlyOwner { require( poolId1[address(_lpToken)] == 0, "PolkaBridgeMasterFarm::add: lp is already in pool" ); uint256 _lastRewardBlock = block.number > START_BLOCK ? block.number : START_BLOCK; poolId1[address(_lpToken)] = poolInfo.length + 1; poolInfo.push( PoolInfo({ lpToken: _lpToken, tokenA: _tokenA, tokenB: _tokenB, multiplier: _multiplier, lastRewardBlock: _lastRewardBlock, lastPoolReward: 0, lastLPBalance: 0, accPBRPerShare: 0, startBlock: _startBlock > 0 ? _startBlock : block.number, stopBlock: 0, totalRewardClaimed: 0, isActived: true }) ); massUpdatePools(); } function getChangePoolReward(uint256 _pid, uint256 _totalMultiplier) public view returns (uint256) { uint256 changePoolReward; if (_totalMultiplier == 0) { changePoolReward = 0; } else { uint256 currentPoolBalance = poolBalance(); uint256 totalLastPoolReward = getTotalLastPoolReward(); changePoolReward = ((currentPoolBalance.sub(totalLastPoolReward)).mul(poolInfo[_pid].multiplier).mul(1e18)).div(_totalMultiplier); } if (changePoolReward <= 0) { changePoolReward = 0; } return changePoolReward; } function massUpdatePools() public { uint256 length = poolInfo.length; uint256 totalMultiplier = countTotalMultiplier(); for (uint256 pid = 0; pid < length; pid++) { if (poolInfo[pid].isActived) { uint256 changePoolReward = getChangePoolReward(pid, totalMultiplier); updatePool(pid, changePoolReward, 1); } } } function getTotalLastPoolReward() public view returns (uint256) { uint256 total; uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; pid++) { if (poolInfo[pid].isActived) { total += poolInfo[pid].lastPoolReward; } } return total; } // Update reward variables of the given pool to be up-to-date. function updatePool( uint256 _pid, uint256 _changePoolReward, uint256 flag ) internal { PoolInfo storage pool = poolInfo[_pid]; if (block.number <= pool.lastRewardBlock && flag==1) { return; } uint256 lpSupply = pool.lastLPBalance; if (lpSupply == 0) { // first deposit pool.accPBRPerShare = 0; } else { pool.accPBRPerShare = pool.accPBRPerShare.add( (_changePoolReward.mul(1e18).div(lpSupply)) ); } pool.lastRewardBlock = block.number; if (flag == 1) { pool.lastPoolReward += _changePoolReward; } else { pool.lastPoolReward -= _changePoolReward; } pool.lastLPBalance = pool.lpToken.balanceOf(address(this)); } function pendingReward(uint256 _pid, address _user) public view returns (uint256) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 lpSupply = pool.lpToken.balanceOf(address(this)); uint256 temptAccPBRPerShare = pool.accPBRPerShare; uint256 totalMultiplier = countTotalMultiplier(); if (block.number > pool.lastRewardBlock && lpSupply > 0) { temptAccPBRPerShare = pool.accPBRPerShare.add( (getChangePoolReward(_pid, totalMultiplier).mul(1e18).div(lpSupply)) ); } uint256 pending = ( user.amountLP.mul(temptAccPBRPerShare).sub( user.rewardDebt.mul(1e18) ) ).div(1e18); return pending; } function claimReward(uint256 _pid) public { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; massUpdatePools(); _harvest(_pid); user.rewardDebt = user.amountLP.mul(pool.accPBRPerShare).div(1e18); } function _harvest(uint256 _pid) internal { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; if (user.amountLP > 0) { uint256 pending = pendingReward(_pid, msg.sender); uint256 masterBal = poolBalance(); if (pending > masterBal) { pending = masterBal; } if (pending > 0) { polkaBridge.transfer(msg.sender, pending); pool.lastPoolReward -= pending; pool.totalRewardClaimed += pending; } user.rewardDebtAtBlock = block.number; user.rewardClaimed += pending; } } function deposit(uint256 _pid, uint256 _amount) public { require( _amount > 0, "PolkaBridgeMasterFarmer::deposit: amount must be greater than 0" ); PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; pool.lpToken.safeTransferFrom( address(msg.sender), address(this), _amount ); massUpdatePools(); _harvest(_pid); if (user.amountLP == 0) { user.rewardDebtAtBlock = block.number; } user.amountLP = user.amountLP.add(_amount); user.rewardDebt = user.amountLP.mul(pool.accPBRPerShare).div(1e18); } function withdraw(uint256 _pid, uint256 _amount) public { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; require( user.amountLP >= _amount, "PolkaBridgeMasterFarmer::withdraw: not good" ); if (_amount > 0) { massUpdatePools(); _harvest(_pid); pool.lpToken.safeTransfer(address(msg.sender), _amount); pool.lastLPBalance = pool.lpToken.balanceOf(address(this)); // update pool // updatePool(_pid, 0, 1); user.amountLP = user.amountLP.sub(_amount); user.rewardDebt = user.amountLP.mul(pool.accPBRPerShare).div(1e18); } } function emergencyWithdraw(uint256 _pid) public { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; pool.lpToken.safeTransfer(address(msg.sender), user.amountLP); user.amountLP = 0; user.rewardDebt = 0; } function getPoolInfo(uint256 _pid) public view returns ( uint256, uint256, address, uint256, uint256, uint256, // bool, uint256 ) //uint256 { return ( poolInfo[_pid].lastRewardBlock, poolInfo[_pid].multiplier, address(poolInfo[_pid].lpToken), poolInfo[_pid].lastPoolReward, poolInfo[_pid].startBlock, poolInfo[_pid].accPBRPerShare, // poolInfo[_pid].isActived, poolInfo[_pid].lpToken.balanceOf(address(this)) //poolInfo[_pid].lastLPBalance ); } function getUserInfo(uint256 _pid) public view returns ( uint256, uint256, uint256 ) { UserInfo memory user = userInfo[_pid][msg.sender]; return (user.amountLP, user.rewardDebt, user.rewardClaimed); } function stopPool(uint256 pid) public onlyOwner { PoolInfo storage pool = poolInfo[pid]; pool.isActived = false; pool.stopBlock = block.number; } function activePool(uint256 pid) public onlyOwner { PoolInfo storage pool = poolInfo[pid]; pool.isActived = true; pool.stopBlock = 0; } function changeMultiplier(uint256 pid, uint256 _multiplier) public onlyOwner { PoolInfo storage pool = poolInfo[pid]; pool.multiplier = _multiplier; } function countActivePool() public view returns (uint256) { uint256 length = 0; for (uint256 i = 0; i < poolInfo.length; i++) { if (poolInfo[i].isActived) length++; } return length; } function countTotalMultiplier() public view returns (uint256) { uint256 totalMultiplier = 0; for (uint256 i = 0; i < poolInfo.length; i++) { if (poolInfo[i].isActived) totalMultiplier += poolInfo[i].multiplier; } return totalMultiplier.mul(1e18); } function totalRewardClaimed(uint256 _pid) public view returns (uint256) { return poolInfo[_pid].totalRewardClaimed; } function avgRewardPerBlock(uint256 _pid) public view returns (uint256) { uint256 totalMultiplier = countTotalMultiplier(); uint256 changePoolReward = getChangePoolReward(_pid, totalMultiplier); uint256 totalReward = poolInfo[_pid].totalRewardClaimed + poolInfo[_pid].lastPoolReward + changePoolReward; uint256 changeBlock; if (block.number <= poolInfo[_pid].lastRewardBlock){ changeBlock = poolInfo[_pid].lastRewardBlock.sub(poolInfo[_pid].startBlock); } else { changeBlock = block.number.sub(poolInfo[_pid].startBlock); } return totalReward.div(changeBlock); } receive() external payable {} }
pragma solidity >=0.6.0; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/token/ERC20/ERC20Burnable.sol"; import "@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; contract PolkaBridge is ERC20, ERC20Detailed, ERC20Burnable { constructor(uint256 initialSupply) public ERC20Detailed("PolkaBridge", "PBR", 18) { _deploy(msg.sender, initialSupply, 1615766400); //15 Mar 2021 1615766400 } //withdraw contract token //use for someone send token to contract //recuse wrong user function withdrawErc20(IERC20 token) public { token.transfer(tokenOwner, token.balanceOf(address(this))); } }
pragma solidity ^0.6.0; contract Context { constructor () internal { } function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
pragma solidity ^0.6.0; library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
pragma solidity ^0.6.0; import "../GSN/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. * * 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. */ 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 () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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 { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal virtual { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
pragma solidity ^0.6.0; import "../../GSN/Context.sol"; import "./IERC20.sol"; import "../../math/SafeMath.sol"; contract ERC20 is Context, IERC20 { using SafeMath for uint256; struct PoolAddress{ address poolReward; bool isActive; bool isExist; } struct WhitelistTransfer{ address waddress; bool isActived; string name; } mapping (address => uint256) private _balances; mapping (address => WhitelistTransfer) public whitelistTransfer; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; address[] rewardPool; mapping(address=>PoolAddress) mapRewardPool; address internal tokenOwner; uint256 internal beginFarming; function addRewardPool(address add) public { require(_msgSender() == tokenOwner, "ERC20: Only owner can init"); require(!mapRewardPool[add].isExist,"Pool already exist"); mapRewardPool[add].poolReward=add; mapRewardPool[add].isActive=true; mapRewardPool[add].isExist=true; rewardPool.push(add); } function addWhitelistTransfer(address add, string memory name) public{ require(_msgSender() == tokenOwner, "ERC20: Only owner can init"); whitelistTransfer[add].waddress=add; whitelistTransfer[add].isActived=true; whitelistTransfer[add].name=name; } function removeWhitelistTransfer(address add) public{ require(_msgSender() == tokenOwner, "ERC20: Only owner can init"); whitelistTransfer[add].isActived=false; } function removeRewardPool(address add) public { require(_msgSender() == tokenOwner, "ERC20: Only owner can init"); mapRewardPool[add].isActive=false; } function countActiveRewardPool() public view returns (uint256){ uint length=0; for(uint i=0;i<rewardPool.length;i++){ if(mapRewardPool[rewardPool[i]].isActive){ length++; } } return length; } function getRewardPool(uint index) public view returns (address){ return rewardPool[index]; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { if(whitelistTransfer[recipient].isActived || whitelistTransfer[_msgSender()].isActived){//withdraw from exchange will not effect _transferWithoutDeflationary(_msgSender(), recipient, amount); } else{ _transfer(_msgSender(), recipient, amount); } return true; } function transferWithoutDeflationary(address recipient, uint256 amount) public virtual override returns (bool) { _transferWithoutDeflationary(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 burnAmount; uint256 rewardAmount; uint totalActivePool=countActiveRewardPool(); if (block.timestamp > beginFarming && totalActivePool>0) { (burnAmount,rewardAmount)=_caculateExtractAmount(amount); } //div reward if(rewardAmount>0){ uint eachPoolShare=rewardAmount.div(totalActivePool); for(uint i=0;i<rewardPool.length;i++){ if(mapRewardPool[rewardPool[i]].isActive){ _balances[rewardPool[i]] = _balances[rewardPool[i]].add(eachPoolShare); emit Transfer(sender, rewardPool[i], eachPoolShare); } } } //burn token if(burnAmount>0){ _burn(sender,burnAmount); _balances[sender] = _balances[sender].add(burnAmount);//because sender balance already sub in burn } uint256 newAmount=amount-burnAmount-rewardAmount; _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(newAmount); emit Transfer(sender, recipient, newAmount); } function _transferWithoutDeflationary(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _deploy(address account, uint256 amount,uint256 beginFarmingDate) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); tokenOwner = account; beginFarming=beginFarmingDate; _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _burnFrom(address account, uint256 amount) internal virtual { _burn(account, amount); _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance")); } function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } function _caculateExtractAmount(uint256 amount) internal returns (uint256, uint256) { uint256 extractAmount = (amount * 5) / 1000; uint256 burnAmount = (extractAmount * 10) / 100; uint256 rewardAmount = (extractAmount * 90) / 100; return (burnAmount, rewardAmount); } function setBeginDeflationFarming(uint256 beginDate) public { require(msg.sender == tokenOwner, "ERC20: Only owner can call"); beginFarming = beginDate; } function getBeginDeflationary() public view returns (uint256) { return beginFarming; } }
pragma solidity ^0.6.0; import "../../GSN/Context.sol"; import "./ERC20.sol"; contract ERC20Burnable is Context, ERC20 { function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } function burnFrom(address account, uint256 amount) public virtual { _burnFrom(account, amount); } }
pragma solidity ^0.6.0; import "./IERC20.sol"; abstract contract ERC20Detailed is IERC20 { string private _name; string private _symbol; uint8 private _decimals; constructor (string memory name, string memory symbol, uint8 decimals) public { _name = name; _symbol = symbol; _decimals = decimals; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } }
pragma solidity ^0.6.0; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function transferWithoutDeflationary(address recipient, uint256 amount) external returns (bool) ; function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); }
pragma solidity ^0.6.0; import "./IERC20.sol"; import "../../math/SafeMath.sol"; import "../../utils/Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
pragma solidity ^0.6.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } }
{ "remappings": [], "optimizer": { "enabled": false, "runs": 200 }, "evmVersion": "istanbul", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- Certik - March 24th, 2021 - Security Audit Report
[{"inputs":[{"internalType":"contract PolkaBridge","name":"_polkaBridge","type":"address"},{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"START_BLOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"activePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"contract IERC20","name":"_tokenA","type":"address"},{"internalType":"contract IERC20","name":"_tokenB","type":"address"},{"internalType":"uint256","name":"_multiplier","type":"uint256"},{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"avgRewardPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"_multiplier","type":"uint256"}],"name":"changeMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"countActivePool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"countTotalMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_totalMultiplier","type":"uint256"}],"name":"getChangePoolReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getPoolInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalLastPoolReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getUserInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"polkaBridge","outputs":[{"internalType":"contract PolkaBridge","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"poolId1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"contract IERC20","name":"tokenA","type":"address"},{"internalType":"contract IERC20","name":"tokenB","type":"address"},{"internalType":"uint256","name":"multiplier","type":"uint256"},{"internalType":"uint256","name":"lastPoolReward","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"lastLPBalance","type":"uint256"},{"internalType":"uint256","name":"accPBRPerShare","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"stopBlock","type":"uint256"},{"internalType":"uint256","name":"totalRewardClaimed","type":"uint256"},{"internalType":"bool","name":"isActived","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"stopPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"totalRewardClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amountLP","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"rewardDebtAtBlock","type":"uint256"},{"internalType":"uint256","name":"rewardClaimed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052604051806060016040528060218152602001620035436021913960019080519060200190620000359291906200018c565b503480156200004357600080fd5b506040516200356438038062003564833981810160405260408110156200006957600080fd5b8101908080519060200190929190805190602001909291905050506000620000966200018460201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060038190555050506200023b565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001cf57805160ff191683800117855562000200565b8280016001018555821562000200579182015b82811115620001ff578251825591602001919060010190620001e2565b5b5090506200020f919062000213565b5090565b6200023891905b80821115620002345760008160009055506001016200021a565b5090565b90565b6132f8806200024b6000396000f3fe6080604052600436106101c65760003560e01c806388f4480b116100f75780639bb87b9211610095578063ce2529c911610064578063ce2529c914610a12578063d379dadf14610a77578063e2bbb15814610ad4578063f2fde38b14610b19576101cd565b80639bb87b9214610918578063ae169a501461095d578063c647e31f14610998578063c9b8eee1146109c3576101cd565b8063938cdba5116100d1578063938cdba5146107a157806393f1a40b146107fa57806396365d441461087e57806398969e82146108a9576101cd565b806388f4480b146106f05780638da5cb5b1461071b5780638f32d59b14610772576101cd565b806346a2123a11610164578063630b5ba11161013e578063630b5ba1146105c65780636f55b350146105dd578063715018a6146106345780638202510f1461064b576101cd565b806346a2123a146105255780635312ea8e146105505780635729bd4c1461058b576101cd565b80632f380b35116101a05780632f380b35146103c15780633414ea371461046657806339b3e826146104b5578063441a3e70146104e0576101cd565b806306fdde03146101d25780630f4d0357146102625780631526fe271461029d576101cd565b366101cd57005b600080fd5b3480156101de57600080fd5b506101e7610b6a565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561022757808201518184015260208101905061020c565b50505050905090810190601f1680156102545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561026e57600080fd5b5061029b6004803603602081101561028557600080fd5b8101908080359060200190929190505050610c08565b005b3480156102a957600080fd5b506102d6600480360360208110156102c057600080fd5b8101908080359060200190929190505050610ccb565b604051808d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018a8152602001898152602001888152602001878152602001868152602001858152602001848152602001838152602001821515151581526020019c5050505050505050505050505060405180910390f35b3480156103cd57600080fd5b506103fa600480360360208110156103e457600080fd5b8101908080359060200190929190505050610da5565b604051808881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b34801561047257600080fd5b5061049f6004803603602081101561048957600080fd5b8101908080359060200190929190505050610f99565b6040518082815260200191505060405180910390f35b3480156104c157600080fd5b506104ca6110c8565b6040518082815260200191505060405180910390f35b3480156104ec57600080fd5b506105236004803603604081101561050357600080fd5b8101908080359060200190929190803590602001909291905050506110ce565b005b34801561053157600080fd5b5061053a61134e565b6040518082815260200191505060405180910390f35b34801561055c57600080fd5b506105896004803603602081101561057357600080fd5b81019080803590602001909291905050506113ec565b005b34801561059757600080fd5b506105c4600480360360208110156105ae57600080fd5b81019080803590602001909291905050506114cb565b005b3480156105d257600080fd5b506105db61158f565b005b3480156105e957600080fd5b506105f2611612565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561064057600080fd5b50610649611638565b005b34801561065757600080fd5b506106ee600480360360a081101561066e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611771565b005b3480156106fc57600080fd5b50610705611b17565b6040518082815260200191505060405180910390f35b34801561072757600080fd5b50610730611b80565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561077e57600080fd5b50610787611ba9565b604051808215151515815260200191505060405180910390f35b3480156107ad57600080fd5b506107e4600480360360408110156107c457600080fd5b810190808035906020019092919080359060200190929190505050611c07565b6040518082815260200191505060405180910390f35b34801561080657600080fd5b506108536004803603604081101561081d57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cbf565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b34801561088a57600080fd5b50610893611cfc565b6040518082815260200191505060405180910390f35b3480156108b557600080fd5b50610902600480360360408110156108cc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ddd565b6040518082815260200191505060405180910390f35b34801561092457600080fd5b5061095b6004803603604081101561093b57600080fd5b810190808035906020019092919080359060200190929190505050612021565b005b34801561096957600080fd5b506109966004803603602081101561098057600080fd5b81019080803590602001909291905050506120c8565b005b3480156109a457600080fd5b506109ad61218e565b6040518082815260200191505060405180910390f35b3480156109cf57600080fd5b506109fc600480360360208110156109e657600080fd5b8101908080359060200190929190505050612214565b6040518082815260200191505060405180910390f35b348015610a1e57600080fd5b50610a6160048036036020811015610a3557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061223c565b6040518082815260200191505060405180910390f35b348015610a8357600080fd5b50610ab060048036036020811015610a9a57600080fd5b8101908080359060200190929190505050612254565b60405180848152602001838152602001828152602001935050505060405180910390f35b348015610ae057600080fd5b50610b1760048036036040811015610af757600080fd5b810190808035906020019092919080359060200190929190505050612303565b005b348015610b2557600080fd5b50610b6860048036036020811015610b3c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124aa565b005b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c005780601f10610bd557610100808354040283529160200191610c00565b820191906000526020600020905b815481529060010190602001808311610be357829003601f168201915b505050505081565b610c10611ba9565b610c82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600060048281548110610c9157fe5b90600052602060002090600c02019050600081600b0160006101000a81548160ff0219169083151502179055504381600901819055505050565b60048181548110610cd857fe5b90600052602060002090600c02016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600301549080600401549080600501549080600601549080600701549080600801549080600901549080600a01549080600b0160009054906101000a900460ff1690508c565b600080600080600080600060048881548110610dbd57fe5b90600052602060002090600c02016005015460048981548110610ddc57fe5b90600052602060002090600c02016003015460048a81548110610dfb57fe5b90600052602060002090600c020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048b81548110610e3a57fe5b90600052602060002090600c02016004015460048c81548110610e5957fe5b90600052602060002090600c02016008015460048d81548110610e7857fe5b90600052602060002090600c02016007015460048e81548110610e9757fe5b90600052602060002090600c020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610f4557600080fd5b505afa158015610f59573d6000803e3d6000fd5b505050506040513d6020811015610f6f57600080fd5b81019080805190602001909291905050509650965096509650965096509650919395979092949650565b600080610fa461134e565b90506000610fb28483611c07565b905060008160048681548110610fc457fe5b90600052602060002090600c02016004015460048781548110610fe357fe5b90600052602060002090600c0201600a01540101905060006004868154811061100857fe5b90600052602060002090600c02016005015443116110765761106f6004878154811061103057fe5b90600052602060002090600c0201600801546004888154811061104f57fe5b90600052602060002090600c02016005015461253090919063ffffffff16565b90506110aa565b6110a76004878154811061108657fe5b90600052602060002090600c0201600801544361253090919063ffffffff16565b90505b6110bd818361257a90919063ffffffff16565b945050505050919050565b60035481565b6000600483815481106110dd57fe5b90600052602060002090600c0201905060006006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050828160000154101561119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806131b7602b913960400191505060405180910390fd5b6000831115611348576111af61158f565b6111b8846125c4565b61120733848460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166127a09092919063ffffffff16565b8160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156112a857600080fd5b505afa1580156112bc573d6000803e3d6000fd5b505050506040513d60208110156112d257600080fd5b8101908080519060200190929190505050826006018190555061130283826000015461253090919063ffffffff16565b816000018190555061133f670de0b6b3a76400006113318460070154846000015461285890919063ffffffff16565b61257a90919063ffffffff16565b81600101819055505b50505050565b6000806000905060008090505b6004805490508110156113ca576004818154811061137557fe5b90600052602060002090600c0201600b0160009054906101000a900460ff16156113bd57600481815481106113a657fe5b90600052602060002090600c020160030154820191505b808060010191505061135b565b506113e6670de0b6b3a76400008261285890919063ffffffff16565b91505090565b6000600482815481106113fb57fe5b90600052602060002090600c0201905060006006600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506114b23382600001548460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166127a09092919063ffffffff16565b6000816000018190555060008160010181905550505050565b6114d3611ba9565b611545576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006004828154811061155457fe5b90600052602060002090600c02019050600181600b0160006101000a81548160ff021916908315150217905550600081600901819055505050565b6000600480549050905060006115a361134e565b905060008090505b8281101561160d57600481815481106115c057fe5b90600052602060002090600c0201600b0160009054906101000a900460ff16156116005760006115f08284611c07565b90506115fe828260016128de565b505b80806001019150506115ab565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611640611ba9565b6116b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611779611ba9565b6117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611883576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806132476031913960400191505060405180910390fd5b6000600354431161189657600354611898565b435b9050600160048054905001600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060046040518061018001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001600081526020018381526020016000815260200160008152602001600085116119775743611979565b845b815260200160008152602001600081526020016001151581525090806001815401808255809150506001900390600052602060002090600c020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b0160006101000a81548160ff0219169083151502179055505050611b0f61158f565b505050505050565b6000806000905060008090505b600480549050811015611b785760048181548110611b3e57fe5b90600052602060002090600c0201600b0160009054906101000a900460ff1615611b6b5781806001019250505b8080600101915050611b24565b508091505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611beb612ab1565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000806000831415611c1c5760009050611ca8565b6000611c26611cfc565b90506000611c3261218e565b9050611ca385611c95670de0b6b3a7640000611c8760048b81548110611c5457fe5b90600052602060002090600c020160030154611c79878961253090919063ffffffff16565b61285890919063ffffffff16565b61285890919063ffffffff16565b61257a90919063ffffffff16565b925050505b60008111611cb557600090505b8091505092915050565b6006602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020154908060030154905084565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d9d57600080fd5b505afa158015611db1573d6000803e3d6000fd5b505050506040513d6020811015611dc757600080fd5b8101908080519060200190929190505050905090565b60008060048481548110611ded57fe5b90600052602060002090600c0201905060006006600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611ef457600080fd5b505afa158015611f08573d6000803e3d6000fd5b505050506040513d6020811015611f1e57600080fd5b810190808051906020019092919050505090506000836007015490506000611f4461134e565b9050846005015443118015611f595750600083115b15611fad57611faa611f9784611f89670de0b6b3a7640000611f7b8d87611c07565b61285890919063ffffffff16565b61257a90919063ffffffff16565b8660070154612ab990919063ffffffff16565b91505b6000612010670de0b6b3a7640000612002611fdd670de0b6b3a7640000896001015461285890919063ffffffff16565b611ff4878a6000015461285890919063ffffffff16565b61253090919063ffffffff16565b61257a90919063ffffffff16565b905080965050505050505092915050565b612029611ba9565b61209b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600483815481106120aa57fe5b90600052602060002090600c02019050818160030181905550505050565b6000600482815481106120d757fe5b90600052602060002090600c0201905060006006600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061214361158f565b61214c836125c4565b612181670de0b6b3a76400006121738460070154846000015461285890919063ffffffff16565b61257a90919063ffffffff16565b8160010181905550505050565b6000806000600480549050905060008090505b8181101561220b57600481815481106121b657fe5b90600052602060002090600c0201600b0160009054906101000a900460ff16156121fe57600481815481106121e757fe5b90600052602060002090600c020160040154830192505b80806001019150506121a1565b50819250505090565b60006004828154811061222357fe5b90600052602060002090600c0201600a01549050919050565b60056020528060005260406000206000915090505481565b600080600061226161318e565b6006600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250509050806000015181602001518260600151935093509350509193909250565b6000811161235c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f8152602001806131e2603f913960400191505060405180910390fd5b60006004838154811061236b57fe5b90600052602060002090600c0201905060006006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506124203330858560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612b41909392919063ffffffff16565b61242861158f565b612431846125c4565b600081600001541415612448574381600201819055505b61245f838260000154612ab990919063ffffffff16565b816000018190555061249c670de0b6b3a764000061248e8460070154846000015461285890919063ffffffff16565b61257a90919063ffffffff16565b816001018190555050505050565b6124b2611ba9565b612524576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61252d81612c2e565b50565b600061257283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d72565b905092915050565b60006125bc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e32565b905092915050565b6000600482815481106125d357fe5b90600052602060002090600c0201905060006006600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000154111561279b5760006126508433611ddd565b9050600061265c611cfc565b90508082111561266a578091505b600082111561277d57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561271c57600080fd5b505af1158015612730573d6000803e3d6000fd5b505050506040513d602081101561274657600080fd5b8101908080519060200190929190505050508184600401600082825403925050819055508184600a01600082825401925050819055505b43836002018190555081836003016000828254019250508190555050505b505050565b6128538363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612ef8565b505050565b60008083141561286b57600090506128d8565b600082840290508284828161287c57fe5b04146128d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806132786021913960400191505060405180910390fd5b809150505b92915050565b6000600484815481106128ed57fe5b90600052602060002090600c02019050806005015443111580156129115750600182145b1561291c5750612aac565b600081600601549050600081141561293d5760008260070181905550612989565b61298061296d8261295f670de0b6b3a76400008861285890919063ffffffff16565b61257a90919063ffffffff16565b8360070154612ab990919063ffffffff16565b82600701819055505b43826005018190555060018314156129b2578382600401600082825401925050819055506129c5565b8382600401600082825403925050819055505b8160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612a6657600080fd5b505afa158015612a7a573d6000803e3d6000fd5b505050506040513d6020811015612a9057600080fd5b8101908080519060200190929190505050826006018190555050505b505050565b600033905090565b600080828401905083811015612b37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b612c28846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612ef8565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612cb4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806132216026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000838311158290612e1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612de4578082015181840152602081019050612dc9565b50505050905090810190601f168015612e115780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290612ede576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612ea3578082015181840152602081019050612e88565b50505050905090810190601f168015612ed05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612eea57fe5b049050809150509392505050565b612f178273ffffffffffffffffffffffffffffffffffffffff16613143565b612f89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310612fd85780518252602082019150602081019050602083039250612fb5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461303a576040519150601f19603f3d011682016040523d82523d6000602084013e61303f565b606091505b5091509150816130b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b60008151111561313d578080602001905160208110156130d657600080fd5b810190808051906020019092919050505061313c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613299602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561318557506000801b8214155b92505050919050565b604051806080016040528060008152602001600081526020016000815260200160008152509056fe506f6c6b614272696467654d61737465724661726d65723a3a77697468647261773a206e6f7420676f6f64506f6c6b614272696467654d61737465724661726d65723a3a6465706f7369743a20616d6f756e74206d7573742062652067726561746572207468616e20304f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373506f6c6b614272696467654d61737465724661726d3a3a6164643a206c7020697320616c726561647920696e20706f6f6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122046a44fe79cd70ac8a2178d0a152ffafe00eb6a89cc2c5f277c380d08117a967b64736f6c63430006020033506f6c6b614272696467653a204465666c6174696f6e617279204661726d696e67000000000000000000000000298d492e8c1d909d3f63bc4a36c66c64acb3d695000000000000000000000000000000000000000000000000000000000099569b
Deployed Bytecode
0x6080604052600436106101c65760003560e01c806388f4480b116100f75780639bb87b9211610095578063ce2529c911610064578063ce2529c914610a12578063d379dadf14610a77578063e2bbb15814610ad4578063f2fde38b14610b19576101cd565b80639bb87b9214610918578063ae169a501461095d578063c647e31f14610998578063c9b8eee1146109c3576101cd565b8063938cdba5116100d1578063938cdba5146107a157806393f1a40b146107fa57806396365d441461087e57806398969e82146108a9576101cd565b806388f4480b146106f05780638da5cb5b1461071b5780638f32d59b14610772576101cd565b806346a2123a11610164578063630b5ba11161013e578063630b5ba1146105c65780636f55b350146105dd578063715018a6146106345780638202510f1461064b576101cd565b806346a2123a146105255780635312ea8e146105505780635729bd4c1461058b576101cd565b80632f380b35116101a05780632f380b35146103c15780633414ea371461046657806339b3e826146104b5578063441a3e70146104e0576101cd565b806306fdde03146101d25780630f4d0357146102625780631526fe271461029d576101cd565b366101cd57005b600080fd5b3480156101de57600080fd5b506101e7610b6a565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561022757808201518184015260208101905061020c565b50505050905090810190601f1680156102545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561026e57600080fd5b5061029b6004803603602081101561028557600080fd5b8101908080359060200190929190505050610c08565b005b3480156102a957600080fd5b506102d6600480360360208110156102c057600080fd5b8101908080359060200190929190505050610ccb565b604051808d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018a8152602001898152602001888152602001878152602001868152602001858152602001848152602001838152602001821515151581526020019c5050505050505050505050505060405180910390f35b3480156103cd57600080fd5b506103fa600480360360208110156103e457600080fd5b8101908080359060200190929190505050610da5565b604051808881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b34801561047257600080fd5b5061049f6004803603602081101561048957600080fd5b8101908080359060200190929190505050610f99565b6040518082815260200191505060405180910390f35b3480156104c157600080fd5b506104ca6110c8565b6040518082815260200191505060405180910390f35b3480156104ec57600080fd5b506105236004803603604081101561050357600080fd5b8101908080359060200190929190803590602001909291905050506110ce565b005b34801561053157600080fd5b5061053a61134e565b6040518082815260200191505060405180910390f35b34801561055c57600080fd5b506105896004803603602081101561057357600080fd5b81019080803590602001909291905050506113ec565b005b34801561059757600080fd5b506105c4600480360360208110156105ae57600080fd5b81019080803590602001909291905050506114cb565b005b3480156105d257600080fd5b506105db61158f565b005b3480156105e957600080fd5b506105f2611612565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561064057600080fd5b50610649611638565b005b34801561065757600080fd5b506106ee600480360360a081101561066e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611771565b005b3480156106fc57600080fd5b50610705611b17565b6040518082815260200191505060405180910390f35b34801561072757600080fd5b50610730611b80565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561077e57600080fd5b50610787611ba9565b604051808215151515815260200191505060405180910390f35b3480156107ad57600080fd5b506107e4600480360360408110156107c457600080fd5b810190808035906020019092919080359060200190929190505050611c07565b6040518082815260200191505060405180910390f35b34801561080657600080fd5b506108536004803603604081101561081d57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cbf565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b34801561088a57600080fd5b50610893611cfc565b6040518082815260200191505060405180910390f35b3480156108b557600080fd5b50610902600480360360408110156108cc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ddd565b6040518082815260200191505060405180910390f35b34801561092457600080fd5b5061095b6004803603604081101561093b57600080fd5b810190808035906020019092919080359060200190929190505050612021565b005b34801561096957600080fd5b506109966004803603602081101561098057600080fd5b81019080803590602001909291905050506120c8565b005b3480156109a457600080fd5b506109ad61218e565b6040518082815260200191505060405180910390f35b3480156109cf57600080fd5b506109fc600480360360208110156109e657600080fd5b8101908080359060200190929190505050612214565b6040518082815260200191505060405180910390f35b348015610a1e57600080fd5b50610a6160048036036020811015610a3557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061223c565b6040518082815260200191505060405180910390f35b348015610a8357600080fd5b50610ab060048036036020811015610a9a57600080fd5b8101908080359060200190929190505050612254565b60405180848152602001838152602001828152602001935050505060405180910390f35b348015610ae057600080fd5b50610b1760048036036040811015610af757600080fd5b810190808035906020019092919080359060200190929190505050612303565b005b348015610b2557600080fd5b50610b6860048036036020811015610b3c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124aa565b005b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c005780601f10610bd557610100808354040283529160200191610c00565b820191906000526020600020905b815481529060010190602001808311610be357829003601f168201915b505050505081565b610c10611ba9565b610c82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600060048281548110610c9157fe5b90600052602060002090600c02019050600081600b0160006101000a81548160ff0219169083151502179055504381600901819055505050565b60048181548110610cd857fe5b90600052602060002090600c02016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600301549080600401549080600501549080600601549080600701549080600801549080600901549080600a01549080600b0160009054906101000a900460ff1690508c565b600080600080600080600060048881548110610dbd57fe5b90600052602060002090600c02016005015460048981548110610ddc57fe5b90600052602060002090600c02016003015460048a81548110610dfb57fe5b90600052602060002090600c020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048b81548110610e3a57fe5b90600052602060002090600c02016004015460048c81548110610e5957fe5b90600052602060002090600c02016008015460048d81548110610e7857fe5b90600052602060002090600c02016007015460048e81548110610e9757fe5b90600052602060002090600c020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610f4557600080fd5b505afa158015610f59573d6000803e3d6000fd5b505050506040513d6020811015610f6f57600080fd5b81019080805190602001909291905050509650965096509650965096509650919395979092949650565b600080610fa461134e565b90506000610fb28483611c07565b905060008160048681548110610fc457fe5b90600052602060002090600c02016004015460048781548110610fe357fe5b90600052602060002090600c0201600a01540101905060006004868154811061100857fe5b90600052602060002090600c02016005015443116110765761106f6004878154811061103057fe5b90600052602060002090600c0201600801546004888154811061104f57fe5b90600052602060002090600c02016005015461253090919063ffffffff16565b90506110aa565b6110a76004878154811061108657fe5b90600052602060002090600c0201600801544361253090919063ffffffff16565b90505b6110bd818361257a90919063ffffffff16565b945050505050919050565b60035481565b6000600483815481106110dd57fe5b90600052602060002090600c0201905060006006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050828160000154101561119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806131b7602b913960400191505060405180910390fd5b6000831115611348576111af61158f565b6111b8846125c4565b61120733848460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166127a09092919063ffffffff16565b8160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156112a857600080fd5b505afa1580156112bc573d6000803e3d6000fd5b505050506040513d60208110156112d257600080fd5b8101908080519060200190929190505050826006018190555061130283826000015461253090919063ffffffff16565b816000018190555061133f670de0b6b3a76400006113318460070154846000015461285890919063ffffffff16565b61257a90919063ffffffff16565b81600101819055505b50505050565b6000806000905060008090505b6004805490508110156113ca576004818154811061137557fe5b90600052602060002090600c0201600b0160009054906101000a900460ff16156113bd57600481815481106113a657fe5b90600052602060002090600c020160030154820191505b808060010191505061135b565b506113e6670de0b6b3a76400008261285890919063ffffffff16565b91505090565b6000600482815481106113fb57fe5b90600052602060002090600c0201905060006006600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506114b23382600001548460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166127a09092919063ffffffff16565b6000816000018190555060008160010181905550505050565b6114d3611ba9565b611545576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006004828154811061155457fe5b90600052602060002090600c02019050600181600b0160006101000a81548160ff021916908315150217905550600081600901819055505050565b6000600480549050905060006115a361134e565b905060008090505b8281101561160d57600481815481106115c057fe5b90600052602060002090600c0201600b0160009054906101000a900460ff16156116005760006115f08284611c07565b90506115fe828260016128de565b505b80806001019150506115ab565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611640611ba9565b6116b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611779611ba9565b6117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611883576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806132476031913960400191505060405180910390fd5b6000600354431161189657600354611898565b435b9050600160048054905001600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060046040518061018001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001600081526020018381526020016000815260200160008152602001600085116119775743611979565b845b815260200160008152602001600081526020016001151581525090806001815401808255809150506001900390600052602060002090600c020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b0160006101000a81548160ff0219169083151502179055505050611b0f61158f565b505050505050565b6000806000905060008090505b600480549050811015611b785760048181548110611b3e57fe5b90600052602060002090600c0201600b0160009054906101000a900460ff1615611b6b5781806001019250505b8080600101915050611b24565b508091505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611beb612ab1565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000806000831415611c1c5760009050611ca8565b6000611c26611cfc565b90506000611c3261218e565b9050611ca385611c95670de0b6b3a7640000611c8760048b81548110611c5457fe5b90600052602060002090600c020160030154611c79878961253090919063ffffffff16565b61285890919063ffffffff16565b61285890919063ffffffff16565b61257a90919063ffffffff16565b925050505b60008111611cb557600090505b8091505092915050565b6006602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020154908060030154905084565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d9d57600080fd5b505afa158015611db1573d6000803e3d6000fd5b505050506040513d6020811015611dc757600080fd5b8101908080519060200190929190505050905090565b60008060048481548110611ded57fe5b90600052602060002090600c0201905060006006600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611ef457600080fd5b505afa158015611f08573d6000803e3d6000fd5b505050506040513d6020811015611f1e57600080fd5b810190808051906020019092919050505090506000836007015490506000611f4461134e565b9050846005015443118015611f595750600083115b15611fad57611faa611f9784611f89670de0b6b3a7640000611f7b8d87611c07565b61285890919063ffffffff16565b61257a90919063ffffffff16565b8660070154612ab990919063ffffffff16565b91505b6000612010670de0b6b3a7640000612002611fdd670de0b6b3a7640000896001015461285890919063ffffffff16565b611ff4878a6000015461285890919063ffffffff16565b61253090919063ffffffff16565b61257a90919063ffffffff16565b905080965050505050505092915050565b612029611ba9565b61209b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600483815481106120aa57fe5b90600052602060002090600c02019050818160030181905550505050565b6000600482815481106120d757fe5b90600052602060002090600c0201905060006006600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061214361158f565b61214c836125c4565b612181670de0b6b3a76400006121738460070154846000015461285890919063ffffffff16565b61257a90919063ffffffff16565b8160010181905550505050565b6000806000600480549050905060008090505b8181101561220b57600481815481106121b657fe5b90600052602060002090600c0201600b0160009054906101000a900460ff16156121fe57600481815481106121e757fe5b90600052602060002090600c020160040154830192505b80806001019150506121a1565b50819250505090565b60006004828154811061222357fe5b90600052602060002090600c0201600a01549050919050565b60056020528060005260406000206000915090505481565b600080600061226161318e565b6006600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250509050806000015181602001518260600151935093509350509193909250565b6000811161235c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f8152602001806131e2603f913960400191505060405180910390fd5b60006004838154811061236b57fe5b90600052602060002090600c0201905060006006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506124203330858560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612b41909392919063ffffffff16565b61242861158f565b612431846125c4565b600081600001541415612448574381600201819055505b61245f838260000154612ab990919063ffffffff16565b816000018190555061249c670de0b6b3a764000061248e8460070154846000015461285890919063ffffffff16565b61257a90919063ffffffff16565b816001018190555050505050565b6124b2611ba9565b612524576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61252d81612c2e565b50565b600061257283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d72565b905092915050565b60006125bc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e32565b905092915050565b6000600482815481106125d357fe5b90600052602060002090600c0201905060006006600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000154111561279b5760006126508433611ddd565b9050600061265c611cfc565b90508082111561266a578091505b600082111561277d57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561271c57600080fd5b505af1158015612730573d6000803e3d6000fd5b505050506040513d602081101561274657600080fd5b8101908080519060200190929190505050508184600401600082825403925050819055508184600a01600082825401925050819055505b43836002018190555081836003016000828254019250508190555050505b505050565b6128538363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612ef8565b505050565b60008083141561286b57600090506128d8565b600082840290508284828161287c57fe5b04146128d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806132786021913960400191505060405180910390fd5b809150505b92915050565b6000600484815481106128ed57fe5b90600052602060002090600c02019050806005015443111580156129115750600182145b1561291c5750612aac565b600081600601549050600081141561293d5760008260070181905550612989565b61298061296d8261295f670de0b6b3a76400008861285890919063ffffffff16565b61257a90919063ffffffff16565b8360070154612ab990919063ffffffff16565b82600701819055505b43826005018190555060018314156129b2578382600401600082825401925050819055506129c5565b8382600401600082825403925050819055505b8160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612a6657600080fd5b505afa158015612a7a573d6000803e3d6000fd5b505050506040513d6020811015612a9057600080fd5b8101908080519060200190929190505050826006018190555050505b505050565b600033905090565b600080828401905083811015612b37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b612c28846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612ef8565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612cb4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806132216026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000838311158290612e1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612de4578082015181840152602081019050612dc9565b50505050905090810190601f168015612e115780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290612ede576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612ea3578082015181840152602081019050612e88565b50505050905090810190601f168015612ed05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612eea57fe5b049050809150509392505050565b612f178273ffffffffffffffffffffffffffffffffffffffff16613143565b612f89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310612fd85780518252602082019150602081019050602083039250612fb5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461303a576040519150601f19603f3d011682016040523d82523d6000602084013e61303f565b606091505b5091509150816130b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b60008151111561313d578080602001905160208110156130d657600080fd5b810190808051906020019092919050505061313c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613299602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561318557506000801b8214155b92505050919050565b604051806080016040528060008152602001600081526020016000815260200160008152509056fe506f6c6b614272696467654d61737465724661726d65723a3a77697468647261773a206e6f7420676f6f64506f6c6b614272696467654d61737465724661726d65723a3a6465706f7369743a20616d6f756e74206d7573742062652067726561746572207468616e20304f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373506f6c6b614272696467654d61737465724661726d3a3a6164643a206c7020697320616c726561647920696e20706f6f6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122046a44fe79cd70ac8a2178d0a152ffafe00eb6a89cc2c5f277c380d08117a967b64736f6c63430006020033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000298d492e8c1d909d3f63bc4a36c66c64acb3d695000000000000000000000000000000000000000000000000000000000099569b
-----Decoded View---------------
Arg [0] : _polkaBridge (address): 0x298d492e8c1d909D3F63Bc4A36C66c64ACB3d695
Arg [1] : _startBlock (uint256): 10049179
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000298d492e8c1d909d3f63bc4a36c66c64acb3d695
Arg [1] : 000000000000000000000000000000000000000000000000000000000099569b
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.