ETH Price: $2,050.73 (+0.70%)

Contract

0x1ca39F6EeCD536b8A67eF3C2aE3A65Bda7cD21B0
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw ETH185596112023-11-13 1:09:23849 days ago1699837763IN
0x1ca39F6E...da7cD21B0
0 ETH0.0009891232.29269532
Withdraw ETH185595992023-11-13 1:06:59849 days ago1699837619IN
0x1ca39F6E...da7cD21B0
0 ETH0.0009963232.54061108
Claim185009252023-11-04 20:02:59858 days ago1699128179IN
0x1ca39F6E...da7cD21B0
0 ETH0.0008030516.56159162
Claim183076862023-10-08 18:56:59885 days ago1696791419IN
0x1ca39F6E...da7cD21B0
0 ETH0.000315316.50281115
Claim181113272023-09-11 6:28:47912 days ago1694413727IN
0x1ca39F6E...da7cD21B0
0 ETH0.000325038.39641778
Stake178511742023-08-05 20:31:47949 days ago1691267507IN
0x1ca39F6E...da7cD21B0
0 ETH0.0019178916.10107376
Claim178440162023-08-04 20:31:47950 days ago1691181107IN
0x1ca39F6E...da7cD21B0
0 ETH0.0009992920.60864904
Claim177923772023-07-28 15:14:47957 days ago1690557287IN
0x1ca39F6E...da7cD21B0
0 ETH0.0018106646.77391021
Claim177089902023-07-16 23:02:47969 days ago1689548567IN
0x1ca39F6E...da7cD21B0
0 ETH0.0005265813.60305817
Stake176058272023-07-02 10:47:59983 days ago1688294879IN
0x1ca39F6E...da7cD21B0
0 ETH0.001808115.17321245
Claim176057852023-07-02 10:39:23983 days ago1688294363IN
0x1ca39F6E...da7cD21B0
0 ETH0.0004896812.64967222
Claim175997182023-07-01 14:12:11984 days ago1688220731IN
0x1ca39F6E...da7cD21B0
0 ETH0.0020748442.79006688
Claim175933692023-06-30 16:46:35985 days ago1688143595IN
0x1ca39F6E...da7cD21B0
0 ETH0.0013660935.28957927
Modify Rewards175660962023-06-26 20:54:59989 days ago1687812899IN
0x1ca39F6E...da7cD21B0
0 ETH0.0025305912.96883711
Modify Rewards175660812023-06-26 20:51:59989 days ago1687812719IN
0x1ca39F6E...da7cD21B0
0 ETH0.0018089913.93365563
Stake175659232023-06-26 20:19:47989 days ago1687810787IN
0x1ca39F6E...da7cD21B0
0 ETH0.0020831712.62803046
Claim175214432023-06-20 14:15:59995 days ago1687270559IN
0x1ca39F6E...da7cD21B0
0 ETH0.0008772322.66110407
Withdraw175088402023-06-18 19:47:59997 days ago1687117679IN
0x1ca39F6E...da7cD21B0
0 ETH0.0003350614.0171645
Withdraw175068052023-06-18 12:57:23997 days ago1687093043IN
0x1ca39F6E...da7cD21B0
0 ETH0.0003124914.20428122
Claim175066222023-06-18 12:20:11997 days ago1687090811IN
0x1ca39F6E...da7cD21B0
0 ETH0.0006688917.27925154
Emergency Withdr...175007952023-06-17 16:43:23998 days ago1687020203IN
0x1ca39F6E...da7cD21B0
0 ETH0.004644338.93256965
Claim175007942023-06-17 16:43:11998 days ago1687020191IN
0x1ca39F6E...da7cD21B0
0 ETH0.0014478637.40196258
Stake174875022023-06-15 19:58:471000 days ago1686859127IN
0x1ca39F6E...da7cD21B0
0 ETH0.0016707117.32175314
Stake174874982023-06-15 19:57:591000 days ago1686859079IN
0x1ca39F6E...da7cD21B0
0 ETH0.0017361817.99377951
Stake174377032023-06-08 19:40:231007 days ago1686253223IN
0x1ca39F6E...da7cD21B0
0 ETH0.0030125935.64400553
View all transactions

Latest 14 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer185596112023-11-13 1:09:23849 days ago1699837763
0x1ca39F6E...da7cD21B0
0.59419194 ETH
Transfer185595992023-11-13 1:06:59849 days ago1699837619
0x1ca39F6E...da7cD21B0
0.00059478 ETH
Transfer185009252023-11-04 20:02:59858 days ago1699128179
0x1ca39F6E...da7cD21B0
0.05072523 ETH
Transfer183076862023-10-08 18:56:59885 days ago1696791419
0x1ca39F6E...da7cD21B0
0.05154423 ETH
Transfer181113272023-09-11 6:28:47912 days ago1694413727
0x1ca39F6E...da7cD21B0
0.07204811 ETH
Transfer178440162023-08-04 20:31:47950 days ago1691181107
0x1ca39F6E...da7cD21B0
0.07088865 ETH
Transfer177923772023-07-28 15:14:47957 days ago1690557287
0x1ca39F6E...da7cD21B0
0.00000339 ETH
Transfer177089902023-07-16 23:02:47969 days ago1689548567
0x1ca39F6E...da7cD21B0
0.05419207 ETH
Transfer176057852023-07-02 10:39:23983 days ago1688294363
0x1ca39F6E...da7cD21B0
0.0297705 ETH
Transfer175997182023-07-01 14:12:11984 days ago1688220731
0x1ca39F6E...da7cD21B0
0.01365082 ETH
Transfer175933692023-06-30 16:46:35985 days ago1688143595
0x1ca39F6E...da7cD21B0
0.05864972 ETH
Transfer175214432023-06-20 14:15:59995 days ago1687270559
0x1ca39F6E...da7cD21B0
0 ETH
Transfer175066222023-06-18 12:20:11997 days ago1687090811
0x1ca39F6E...da7cD21B0
0.00219268 ETH
Transfer175007942023-06-17 16:43:11998 days ago1687020191
0x1ca39F6E...da7cD21B0
0.00154782 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Pool1

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2023-05-29
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

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) {
        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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(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);
}

contract Pool1 {
    using SafeMath for uint256;

    address internal owner;

    modifier onlyOwner() {
        require(isOwner(msg.sender), "Call not allowed."); _;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function getRewardsEarned(address staker) public view returns (uint256) {
        return stakersRewards[staker] + (balance[staker] * rewardsPerBUBLSPerBlock * (block.number - lastUpdate[staker])) / 1e18;
    }

    function getLastUpdate(address staker) public view returns (uint256) {
        return lastUpdate[staker];
    }

    function getStakerBalance(address staker) public view returns (uint256) {
        return balance[staker];
    }

    function receiveEther() external payable {
        ethBalances[msg.sender] += msg.value;
    }

    address public penaltyWallet = (0x81207769EC7a4F20A242912d6590ec3d9C44C1e6);

    function emergencyWithdraw() public {
    require(balance[msg.sender] > 0, "You do not have any staked tokens to withdraw!");

    uint256 _lastUpdate = lastUpdate[msg.sender];
    lastUpdate[msg.sender] = block.number;
    stakersRewards[msg.sender] += (balance[msg.sender] * rewardsPerBUBLSPerBlock * (block.number - _lastUpdate)) / 1e18;

    uint256 penaltyAmount = balance[msg.sender] / 2;
    uint256 withdrawalAmount = balance[msg.sender] - penaltyAmount;

    balance[msg.sender] = 0;
    totalLocked -= withdrawalAmount;

    if (balance[msg.sender] == 0) {
        removeStaker(msg.sender);
    }

    // Transfer the withdrawalAmount to the user
    BUBLS.transfer(msg.sender, withdrawalAmount);

    // Transfer the penaltyAmount to the penaltyWallet
    BUBLS.transfer(penaltyWallet, penaltyAmount);
}

    function withdrawETH(uint256 amount) external onlyOwner{
        payable(msg.sender).transfer(amount);
    }

	IERC20 BUBLS = IERC20(0x67e989f78a32A1547443f1706eC050EEc725547e); //Main Net

    uint256 public maximumLocked = 9999999999999999999999 * 1e18;
	uint256 public totalLocked;
    uint256 public rewardsPerBUBLSPerBlock;
    uint256 public stackingStartTime;
    uint256 public launchTime;

 	mapping (address => uint256) stakersRewards;
	mapping (address => uint256) lastUpdate;
	mapping (address => uint256) balance;
    mapping (address => uint256) public ethBalances;

	address[] stakers;
    mapping (address => uint256) stakerIndexes;

    constructor() {
        owner = msg.sender;
        launchTime = block.timestamp;
    }

    function stake(uint256 amount) public {
		require(amount > 0 && totalLocked + amount <= maximumLocked, "The maximum amount of BUBLSs has been staked in this pool.");
		BUBLS.transferFrom(msg.sender, address(this), amount);

		totalLocked += amount;

		uint256 _lastUpdate = lastUpdate[msg.sender];
		lastUpdate[msg.sender] = block.number;

		if (balance[msg.sender] > 0) {
			stakersRewards[msg.sender] += (balance[msg.sender] * rewardsPerBUBLSPerBlock * (block.number - _lastUpdate)) / 1e18;
		} else {
            stackingStartTime = block.timestamp;
			addStaker(msg.sender);
		}

		balance[msg.sender] += amount;

        if (block.timestamp > launchTime + 24 hours) {
            rewardsPerBUBLSPerBlock = rewardsPerBUBLSPerBlock.div(2);
        } 
    }

    function withdraw(uint256 amount) public {
        require(block.timestamp >= stackingStartTime + 15 days, "You can only withdraw after 15 Days of staking.");
		require(amount > 0 && amount <= balance[msg.sender], "You cannot withdraw more than what you have!");
		uint256 _lastUpdate = lastUpdate[msg.sender];
		lastUpdate[msg.sender] = block.number;
		stakersRewards[msg.sender] += (balance[msg.sender] * rewardsPerBUBLSPerBlock * (block.number - _lastUpdate)) / 1e18;
		balance[msg.sender] -= amount;

		if (balance[msg.sender] == 0) {
			removeStaker(msg.sender);
		}

		BUBLS.transfer(msg.sender, amount);

        totalLocked -= amount;
    }

    function claim() public {
        uint256 _lastUpdate = lastUpdate[msg.sender];
        lastUpdate[msg.sender] = block.number;
        stakersRewards[msg.sender] += (balance[msg.sender] * rewardsPerBUBLSPerBlock * (block.number - _lastUpdate)) / 1e18;
        require(stakersRewards[msg.sender] > 0, "No rewards to claim!");
        uint256 rewards = stakersRewards[msg.sender];
        stakersRewards[msg.sender] = 0;

      
        require(address(this).balance >= rewards, "Not enough Ether to pay out rewards!");

       
        payable(msg.sender).transfer(rewards);
    }

    
	function modifyRewards(uint256 amount) public onlyOwner {

		for (uint256 i = 0; i < stakers.length; i++) {
			uint256 _lastUpdate = lastUpdate[stakers[i]];
			lastUpdate[stakers[i]] = block.number;
			stakersRewards[stakers[i]] += (balance[stakers[i]] * rewardsPerBUBLSPerBlock * (block.number - _lastUpdate)) / 1e18;
		}

		rewardsPerBUBLSPerBlock = amount;

	}

	function addStaker(address staker) internal {
        stakerIndexes[staker] = stakers.length;
        stakers.push(staker);
    }

    function removeStaker(address staker) internal {
        stakers[stakerIndexes[staker]] = stakers[stakers.length-1];
        stakerIndexes[stakers[stakers.length-1]] = stakerIndexes[staker];
        stakers.pop();
    }

}

contract Pool2 {
    using SafeMath for uint256;

    address internal owner;

    modifier onlyOwner() {
        require(isOwner(msg.sender), "Call not allowed."); _;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function getRewardsEarned(address staker) public view returns (uint256) {
        return stakersRewards[staker] + (balance[staker] * rewardsPerBUBLSPerBlock * (block.number - lastUpdate[staker])) / 1e18;
    }

    function getLastUpdate(address staker) public view returns (uint256) {
        return lastUpdate[staker];
    }

    function getStakerBalance(address staker) public view returns (uint256) {
        return balance[staker];
    }
    function receiveEther() external payable {
        ethBalances[msg.sender] += msg.value;
    }
    address public penaltyWallet = (0x81207769EC7a4F20A242912d6590ec3d9C44C1e6);
    function emergencyWithdraw() public {
    require(balance[msg.sender] > 0, "You do not have any staked tokens to withdraw!");

    uint256 _lastUpdate = lastUpdate[msg.sender];
    lastUpdate[msg.sender] = block.number;
    stakersRewards[msg.sender] += (balance[msg.sender] * rewardsPerBUBLSPerBlock * (block.number - _lastUpdate)) / 1e18;

    uint256 penaltyAmount = balance[msg.sender] / 2;
    uint256 withdrawalAmount = balance[msg.sender] - penaltyAmount;

    balance[msg.sender] = 0;
    totalLocked -= withdrawalAmount;

    if (balance[msg.sender] == 0) {
        removeStaker(msg.sender);
    }

    // Transfer the withdrawalAmount to the user
    BUBLS.transfer(msg.sender, withdrawalAmount);

    // Transfer the penaltyAmount to the penaltyWallet
    BUBLS.transfer(penaltyWallet, penaltyAmount);
}

    function withdrawETH(uint256 amount) external onlyOwner{
        payable(msg.sender).transfer(amount);
    }

	IERC20 BUBLS = IERC20(0x67e989f78a32A1547443f1706eC050EEc725547e); //Main Net

    uint256 public maximumLocked = 9999999999999999999999 * 1e18;
	uint256 public totalLocked;
    uint256 public rewardsPerBUBLSPerBlock;
    uint256 public stackingStartTime;
    uint256 public launchTime;

 	mapping (address => uint256) stakersRewards;
	mapping (address => uint256) lastUpdate;
	mapping (address => uint256) balance;
    mapping (address => uint256) public ethBalances;

	address[] stakers;
    mapping (address => uint256) stakerIndexes;

    constructor() {
        owner = msg.sender;
        launchTime = block.timestamp;
    }

    function stake(uint256 amount) public {
		require(amount > 0 && totalLocked + amount <= maximumLocked, "The maximum amount of BUBLSs has been staked in this pool.");
		BUBLS.transferFrom(msg.sender, address(this), amount);

		totalLocked += amount;

		uint256 _lastUpdate = lastUpdate[msg.sender];
		lastUpdate[msg.sender] = block.number;

		if (balance[msg.sender] > 0) {
			stakersRewards[msg.sender] += (balance[msg.sender] * rewardsPerBUBLSPerBlock * (block.number - _lastUpdate)) / 1e18;
		} else {
            stackingStartTime = block.timestamp;
			addStaker(msg.sender);
		}

		balance[msg.sender] += amount;

        if (block.timestamp > launchTime + 24 hours) {
            rewardsPerBUBLSPerBlock = rewardsPerBUBLSPerBlock.div(2);
        } 
    }

    function withdraw(uint256 amount) public {
        require(block.timestamp >= stackingStartTime + 30 days, "You can only withdraw after 30 days of staking.");
		require(amount > 0 && amount <= balance[msg.sender], "You cannot withdraw more than what you have!");
		uint256 _lastUpdate = lastUpdate[msg.sender];
		lastUpdate[msg.sender] = block.number;
		stakersRewards[msg.sender] += (balance[msg.sender] * rewardsPerBUBLSPerBlock * (block.number - _lastUpdate)) / 1e18;
		balance[msg.sender] -= amount;

		if (balance[msg.sender] == 0) {
			removeStaker(msg.sender);
		}

		BUBLS.transfer(msg.sender, amount);

        totalLocked -= amount;
    }

    function claim() public {
        uint256 _lastUpdate = lastUpdate[msg.sender];
        lastUpdate[msg.sender] = block.number;
        stakersRewards[msg.sender] += (balance[msg.sender] * rewardsPerBUBLSPerBlock * (block.number - _lastUpdate)) / 1e18;
        require(stakersRewards[msg.sender] > 0, "No rewards to claim!");
        uint256 rewards = stakersRewards[msg.sender];
        stakersRewards[msg.sender] = 0;

      
        require(address(this).balance >= rewards, "Not enough Ether to pay out rewards!");

       
        payable(msg.sender).transfer(rewards);
    }

    
	function modifyRewards(uint256 amount) public onlyOwner {

		for (uint256 i = 0; i < stakers.length; i++) {
			uint256 _lastUpdate = lastUpdate[stakers[i]];
			lastUpdate[stakers[i]] = block.number;
			stakersRewards[stakers[i]] += (balance[stakers[i]] * rewardsPerBUBLSPerBlock * (block.number - _lastUpdate)) / 1e18;
		}

		rewardsPerBUBLSPerBlock = amount;

	}

	function addStaker(address staker) internal {
        stakerIndexes[staker] = stakers.length;
        stakers.push(staker);
    }

    function removeStaker(address staker) internal {
        stakers[stakerIndexes[staker]] = stakers[stakers.length-1];
        stakerIndexes[stakers[stakers.length-1]] = stakerIndexes[staker];
        stakers.pop();
    }

}

contract Pool3 {
    using SafeMath for uint256;

    address internal owner;

    modifier onlyOwner() {
        require(isOwner(msg.sender), "Call not allowed."); _;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function getRewardsEarned(address staker) public view returns (uint256) {
        return stakersRewards[staker] + (balance[staker] * rewardsPerBUBLSPerBlock * (block.number - lastUpdate[staker])) / 1e18;
    }

    function getLastUpdate(address staker) public view returns (uint256) {
        return lastUpdate[staker];
    }

    function getStakerBalance(address staker) public view returns (uint256) {
        return balance[staker];
    }

    function receiveEther() external payable {
        ethBalances[msg.sender] += msg.value;
    }

    address public penaltyWallet = (0x81207769EC7a4F20A242912d6590ec3d9C44C1e6);

    function emergencyWithdraw() public {
    require(balance[msg.sender] > 0, "You do not have any staked tokens to withdraw!");

    uint256 _lastUpdate = lastUpdate[msg.sender];
    lastUpdate[msg.sender] = block.number;
    stakersRewards[msg.sender] += (balance[msg.sender] * rewardsPerBUBLSPerBlock * (block.number - _lastUpdate)) / 1e18;

    uint256 penaltyAmount = balance[msg.sender] / 2;
    uint256 withdrawalAmount = balance[msg.sender] - penaltyAmount;

    balance[msg.sender] = 0;
    totalLocked -= withdrawalAmount;

    if (balance[msg.sender] == 0) {
        removeStaker(msg.sender);
    }

    // Transfer the withdrawalAmount to the user
    BUBLS.transfer(msg.sender, withdrawalAmount);

    // Transfer the penaltyAmount to the penaltyWallet
    BUBLS.transfer(penaltyWallet, penaltyAmount);
}

    function withdrawETH(uint256 amount) external onlyOwner{
        payable(msg.sender).transfer(amount);
    }

	IERC20 BUBLS = IERC20(0x67e989f78a32A1547443f1706eC050EEc725547e); //Main Net

    uint256 public maximumLocked = 9999999999999999999999 * 1e18;
	uint256 public totalLocked;
    uint256 public rewardsPerBUBLSPerBlock;
    uint256 public stackingStartTime;
    uint256 public launchTime;

 	mapping (address => uint256) stakersRewards;
	mapping (address => uint256) lastUpdate;
	mapping (address => uint256) balance;
    mapping (address => uint256) public ethBalances;

	address[] stakers;
    mapping (address => uint256) stakerIndexes;

    constructor() {
        owner = msg.sender;
        launchTime = block.timestamp;
    }

    function stake(uint256 amount) public {
		require(amount > 0 && totalLocked + amount <= maximumLocked, "The maximum amount of BUBLSs has been staked in this pool.");
		BUBLS.transferFrom(msg.sender, address(this), amount);

		totalLocked += amount;

		uint256 _lastUpdate = lastUpdate[msg.sender];
		lastUpdate[msg.sender] = block.number;

		if (balance[msg.sender] > 0) {
			stakersRewards[msg.sender] += (balance[msg.sender] * rewardsPerBUBLSPerBlock * (block.number - _lastUpdate)) / 1e18;
		} else {
            stackingStartTime = block.timestamp;
			addStaker(msg.sender);
		}

		balance[msg.sender] += amount;

        if (block.timestamp > launchTime + 24 hours) {
            rewardsPerBUBLSPerBlock = rewardsPerBUBLSPerBlock.div(2);
        } 
    }

    function withdraw(uint256 amount) public {
        require(block.timestamp >= stackingStartTime + 45 days, "You can only withdraw after 45 Days of staking.");
		require(amount > 0 && amount <= balance[msg.sender], "You cannot withdraw more than what you have!");
		uint256 _lastUpdate = lastUpdate[msg.sender];
		lastUpdate[msg.sender] = block.number;
		stakersRewards[msg.sender] += (balance[msg.sender] * rewardsPerBUBLSPerBlock * (block.number - _lastUpdate)) / 1e18;
		balance[msg.sender] -= amount;

		if (balance[msg.sender] == 0) {
			removeStaker(msg.sender);
		}

		BUBLS.transfer(msg.sender, amount);

        totalLocked -= amount;
    }

    function claim() public {
        uint256 _lastUpdate = lastUpdate[msg.sender];
        lastUpdate[msg.sender] = block.number;
        stakersRewards[msg.sender] += (balance[msg.sender] * rewardsPerBUBLSPerBlock * (block.number - _lastUpdate)) / 1e18;
        require(stakersRewards[msg.sender] > 0, "No rewards to claim!");
        uint256 rewards = stakersRewards[msg.sender];
        stakersRewards[msg.sender] = 0;

      
        require(address(this).balance >= rewards, "Not enough Ether to pay out rewards!");

       
        payable(msg.sender).transfer(rewards);
    }

    
	function modifyRewards(uint256 amount) public onlyOwner {

		for (uint256 i = 0; i < stakers.length; i++) {
			uint256 _lastUpdate = lastUpdate[stakers[i]];
			lastUpdate[stakers[i]] = block.number;
			stakersRewards[stakers[i]] += (balance[stakers[i]] * rewardsPerBUBLSPerBlock * (block.number - _lastUpdate)) / 1e18;
		}

		rewardsPerBUBLSPerBlock = amount;

	}

	function addStaker(address staker) internal {
        stakerIndexes[staker] = stakers.length;
        stakers.push(staker);
    }

    function removeStaker(address staker) internal {
        stakers[stakerIndexes[staker]] = stakers[stakers.length-1];
        stakerIndexes[stakers[stakers.length-1]] = stakerIndexes[staker];
        stakers.pop();
    }

}
contract Pool4 {
    using SafeMath for uint256;

    address internal owner;

    modifier onlyOwner() {
        require(isOwner(msg.sender), "Call not allowed."); _;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function getRewardsEarned(address staker) public view returns (uint256) {
        return stakersRewards[staker] + (balance[staker] * rewardsPerBUBLSPerBlock * (block.number - lastUpdate[staker])) / 1e18;
    }

    function getLastUpdate(address staker) public view returns (uint256) {
        return lastUpdate[staker];
    }

    function getStakerBalance(address staker) public view returns (uint256) {
        return balance[staker];
    }

    function receiveEther() external payable {
        ethBalances[msg.sender] += msg.value;
    }

    address public penaltyWallet = (0x81207769EC7a4F20A242912d6590ec3d9C44C1e6);

    function emergencyWithdraw() public {
    require(balance[msg.sender] > 0, "You do not have any staked tokens to withdraw!");

    uint256 _lastUpdate = lastUpdate[msg.sender];
    lastUpdate[msg.sender] = block.number;
    stakersRewards[msg.sender] += (balance[msg.sender] * rewardsPerBUBLSPerBlock * (block.number - _lastUpdate)) / 1e18;

    uint256 penaltyAmount = balance[msg.sender] / 2;
    uint256 withdrawalAmount = balance[msg.sender] - penaltyAmount;

    balance[msg.sender] = 0;
    totalLocked -= withdrawalAmount;

    if (balance[msg.sender] == 0) {
        removeStaker(msg.sender);
    }

    // Transfer the withdrawalAmount to the user
    BUBLS.transfer(msg.sender, withdrawalAmount);

    // Transfer the penaltyAmount to the penaltyWallet
    BUBLS.transfer(penaltyWallet, penaltyAmount);
}

    function withdrawETH(uint256 amount) external onlyOwner{
        payable(msg.sender).transfer(amount);
    }

	IERC20 BUBLS = IERC20(0x67e989f78a32A1547443f1706eC050EEc725547e); //Main Net

    uint256 public maximumLocked = 9999999999999999999999 * 1e18;
	uint256 public totalLocked;
    uint256 public rewardsPerBUBLSPerBlock;
    uint256 public stackingStartTime;
    uint256 public launchTime;

 	mapping (address => uint256) stakersRewards;
	mapping (address => uint256) lastUpdate;
	mapping (address => uint256) balance;
    mapping (address => uint256) public ethBalances;

	address[] stakers;
    mapping (address => uint256) stakerIndexes;

    constructor() {
        owner = msg.sender;
        launchTime = block.timestamp;
    }

    function stake(uint256 amount) public {
		require(amount > 0 && totalLocked + amount <= maximumLocked, "The maximum amount of BUBLSs has been staked in this pool.");
		BUBLS.transferFrom(msg.sender, address(this), amount);

		totalLocked += amount;

		uint256 _lastUpdate = lastUpdate[msg.sender];
		lastUpdate[msg.sender] = block.number;

		if (balance[msg.sender] > 0) {
			stakersRewards[msg.sender] += (balance[msg.sender] * rewardsPerBUBLSPerBlock * (block.number - _lastUpdate)) / 1e18;
		} else {
            stackingStartTime = block.timestamp;
			addStaker(msg.sender);
		}

		balance[msg.sender] += amount;

        if (block.timestamp > launchTime + 24 hours) {
            rewardsPerBUBLSPerBlock = rewardsPerBUBLSPerBlock.div(2);
        } 
    }

    function withdraw(uint256 amount) public {
        require(block.timestamp >= stackingStartTime + 60 days, "You can only withdraw after 60 Days of staking.");
		require(amount > 0 && amount <= balance[msg.sender], "You cannot withdraw more than what you have!");
		uint256 _lastUpdate = lastUpdate[msg.sender];
		lastUpdate[msg.sender] = block.number;
		stakersRewards[msg.sender] += (balance[msg.sender] * rewardsPerBUBLSPerBlock * (block.number - _lastUpdate)) / 1e18;
		balance[msg.sender] -= amount;

		if (balance[msg.sender] == 0) {
			removeStaker(msg.sender);
		}

		BUBLS.transfer(msg.sender, amount);

        totalLocked -= amount;
    }

    function claim() public {
        uint256 _lastUpdate = lastUpdate[msg.sender];
        lastUpdate[msg.sender] = block.number;
        stakersRewards[msg.sender] += (balance[msg.sender] * rewardsPerBUBLSPerBlock * (block.number - _lastUpdate)) / 1e18;
        require(stakersRewards[msg.sender] > 0, "No rewards to claim!");
        uint256 rewards = stakersRewards[msg.sender];
        stakersRewards[msg.sender] = 0;

      
        require(address(this).balance >= rewards, "Not enough Ether to pay out rewards!");

       
        payable(msg.sender).transfer(rewards);
    }

    
	function modifyRewards(uint256 amount) public onlyOwner {

		for (uint256 i = 0; i < stakers.length; i++) {
			uint256 _lastUpdate = lastUpdate[stakers[i]];
			lastUpdate[stakers[i]] = block.number;
			stakersRewards[stakers[i]] += (balance[stakers[i]] * rewardsPerBUBLSPerBlock * (block.number - _lastUpdate)) / 1e18;
		}

		rewardsPerBUBLSPerBlock = amount;

	}

	function addStaker(address staker) internal {
        stakerIndexes[staker] = stakers.length;
        stakers.push(staker);
    }

    function removeStaker(address staker) internal {
        stakers[stakerIndexes[staker]] = stakers[stakers.length-1];
        stakerIndexes[stakers[stakers.length-1]] = stakerIndexes[staker];
        stakers.pop();
    }

}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ethBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getLastUpdate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getRewardsEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getStakerBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumLocked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"modifyRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"penaltyWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"receiveEther","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"rewardsPerBUBLSPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stackingStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalLocked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600180546001600160a01b03199081167381207769ec7a4f20a242912d6590ec3d9c44c1e617909155600280549091167367e989f78a32a1547443f1706ec050eec725547e179055701d6329f1c35ca4bfabac14aa4c589c000060035534801561006d57600080fd5b50600080546001600160a01b0319163317905542600755611293806100936000396000f3fe6080604052600436106101095760003560e01c8063722e7ec811610095578063a3912ec811610064578063a3912ec8146102f6578063a694fc3a146102fe578063db2e21bc1461031e578063f14210a614610333578063fe7b25601461035357600080fd5b8063722e7ec814610272578063790ca413146102885780637a34a19e1461029e5780638b752677146102be57600080fd5b80632fa4f085116100dc5780632fa4f085146101ce5780633cfba0e3146101e45780634e71d92d1461021157806356891412146102265780635a7e19891461023c57600080fd5b80631560aace1461010e5780632640d9db146101375780632e1a7d4d1461016d5780632f54bf6e1461018f575b600080fd5b34801561011a57600080fd5b5061012460065481565b6040519081526020015b60405180910390f35b34801561014357600080fd5b506101246101523660046110d7565b6001600160a01b03166000908152600a602052604090205490565b34801561017957600080fd5b5061018d610188366004611100565b610373565b005b34801561019b57600080fd5b506101be6101aa3660046110d7565b6000546001600160a01b0391821691161490565b604051901515815260200161012e565b3480156101da57600080fd5b5061012460035481565b3480156101f057600080fd5b506101246101ff3660046110d7565b600b6020526000908152604090205481565b34801561021d57600080fd5b5061018d6105d1565b34801561023257600080fd5b5061012460045481565b34801561024857600080fd5b506101246102573660046110d7565b6001600160a01b031660009081526009602052604090205490565b34801561027e57600080fd5b5061012460055481565b34801561029457600080fd5b5061012460075481565b3480156102aa57600080fd5b5061018d6102b9366004611100565b610747565b3480156102ca57600080fd5b506001546102de906001600160a01b031681565b6040516001600160a01b03909116815260200161012e565b61018d610914565b34801561030a57600080fd5b5061018d610319366004611100565b61093a565b34801561032a57600080fd5b5061018d610baa565b34801561033f57600080fd5b5061018d61034e366004611100565b610e37565b34801561035f57600080fd5b5061012461036e3660046110d7565b610eb2565b600654610383906213c68061112f565b4210156103ef5760405162461bcd60e51b815260206004820152602f60248201527f596f752063616e206f6e6c79207769746864726177206166746572203135204460448201526e30bcb99037b31039ba30b5b4b7339760891b60648201526084015b60405180910390fd5b60008111801561040e5750336000908152600a60205260409020548111155b61046f5760405162461bcd60e51b815260206004820152602c60248201527f596f752063616e6e6f74207769746864726177206d6f7265207468616e20776860448201526b617420796f7520686176652160a01b60648201526084016103e6565b3360009081526009602052604090208054439182905590670de0b6b3a76400009061049b908390611147565b600554336000908152600a60205260409020546104b8919061115e565b6104c2919061115e565b6104cc919061117d565b33600090815260086020526040812080549091906104eb90849061112f565b9091555050336000908152600a60205260408120805484929061050f908490611147565b9091555050336000908152600a60205260409020546105315761053133610f42565b60025460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561057d57600080fd5b505af1158015610591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b5919061119f565b5081600460008282546105c89190611147565b90915550505050565b3360009081526009602052604090208054439182905590670de0b6b3a7640000906105fd908390611147565b600554336000908152600a602052604090205461061a919061115e565b610624919061115e565b61062e919061117d565b336000908152600860205260408120805490919061064d90849061112f565b9091555050336000908152600860205260409020546106a55760405162461bcd60e51b81526020600482015260146024820152734e6f207265776172647320746f20636c61696d2160601b60448201526064016103e6565b3360009081526008602052604081208054919055478111156107155760405162461bcd60e51b8152602060048201526024808201527f4e6f7420656e6f75676820457468657220746f20706179206f757420726577616044820152637264732160e01b60648201526084016103e6565b604051339082156108fc029083906000818181858888f19350505050158015610742573d6000803e3d6000fd5b505050565b6000546001600160a01b031633146107955760405162461bcd60e51b815260206004820152601160248201527021b0b636103737ba1030b63637bbb2b21760791b60448201526064016103e6565b60005b600c5481101561090e57600060096000600c84815481106107bb576107bb6111c1565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000205490504360096000600c8581548110610814576108146111c1565b60009182526020808320909101546001600160a01b03168352820192909252604001902055670de0b6b3a764000061084c8243611147565b600554600a6000600c8781548110610866576108666111c1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054610895919061115e565b61089f919061115e565b6108a9919061117d565b60086000600c85815481106108c0576108c06111c1565b60009182526020808320909101546001600160a01b03168352820192909252604001812080549091906108f490849061112f565b909155508291506109069050816111d7565b915050610798565b50600555565b336000908152600b60205260408120805434929061093390849061112f565b9091555050565b600081118015610959575060035481600454610956919061112f565b11155b6109cb5760405162461bcd60e51b815260206004820152603a60248201527f546865206d6178696d756d20616d6f756e74206f66204255424c53732068617360448201527f206265656e207374616b656420696e207468697320706f6f6c2e00000000000060648201526084016103e6565b6002546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015610a1d57600080fd5b505af1158015610a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a55919061119f565b508060046000828254610a68919061112f565b9091555050336000908152600960209081526040808320805443909155600a9092529091205415610b0157670de0b6b3a7640000610aa68243611147565b600554336000908152600a6020526040902054610ac3919061115e565b610acd919061115e565b610ad7919061117d565b3360009081526008602052604081208054909190610af690849061112f565b90915550610b599050565b42600655600c8054336000818152600d60205260408120839055600183018455929092527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b03191690911790555b336000908152600a602052604081208054849290610b7890849061112f565b9091555050600754610b8d906201518061112f565b421115610ba657600554610ba2906002611057565b6005555b5050565b336000908152600a6020526040902054610c1d5760405162461bcd60e51b815260206004820152602e60248201527f596f7520646f206e6f74206861766520616e79207374616b656420746f6b656e60448201526d7320746f2077697468647261772160901b60648201526084016103e6565b3360009081526009602052604090208054439182905590670de0b6b3a764000090610c49908390611147565b600554336000908152600a6020526040902054610c66919061115e565b610c70919061115e565b610c7a919061117d565b3360009081526008602052604081208054909190610c9990849061112f565b9091555050336000908152600a6020526040812054610cba9060029061117d565b336000908152600a602052604081205491925090610cd9908390611147565b336000908152600a60205260408120819055600480549293508392909190610d02908490611147565b9091555050336000908152600a6020526040902054610d2457610d2433610f42565b60025460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b158015610d7057600080fd5b505af1158015610d84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da8919061119f565b5060025460015460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905291169063a9059cbb90604401602060405180830381600087803b158015610df957600080fd5b505af1158015610e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e31919061119f565b50505050565b6000546001600160a01b03163314610e855760405162461bcd60e51b815260206004820152601160248201527021b0b636103737ba1030b63637bbb2b21760791b60448201526064016103e6565b604051339082156108fc029083906000818181858888f19350505050158015610ba6573d6000803e3d6000fd5b6001600160a01b038116600090815260096020526040812054670de0b6b3a764000090610edf9043611147565b6005546001600160a01b0385166000908152600a6020526040902054610f05919061115e565b610f0f919061115e565b610f19919061117d565b6001600160a01b038316600090815260086020526040902054610f3c919061112f565b92915050565b600c8054610f5290600190611147565b81548110610f6257610f626111c1565b60009182526020808320909101546001600160a01b038481168452600d909252604090922054600c80549290931692918110610fa057610fa06111c1565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600d918290526040812054600c805491939291610fec90600190611147565b81548110610ffc57610ffc6111c1565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600c805480611032576110326111f2565b600082815260209020810160001990810180546001600160a01b031916905501905550565b600061109983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506110a0565b9392505050565b600081836110c15760405162461bcd60e51b81526004016103e69190611208565b5060006110ce848661117d565b95945050505050565b6000602082840312156110e957600080fd5b81356001600160a01b038116811461109957600080fd5b60006020828403121561111257600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561114257611142611119565b500190565b60008282101561115957611159611119565b500390565b600081600019048311821515161561117857611178611119565b500290565b60008261119a57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156111b157600080fd5b8151801515811461109957600080fd5b634e487b7160e01b600052603260045260246000fd5b60006000198214156111eb576111eb611119565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600060208083528351808285015260005b8181101561123557858101830151858201604001528201611219565b81811115611247576000604083870101525b50601f01601f191692909201604001939250505056fea2646970667358221220e81dfb93862a103d93a4b0a94b9e06e4f2816ce7017a7797c9846fd57c1e09f764736f6c63430008090033

Deployed Bytecode

0x6080604052600436106101095760003560e01c8063722e7ec811610095578063a3912ec811610064578063a3912ec8146102f6578063a694fc3a146102fe578063db2e21bc1461031e578063f14210a614610333578063fe7b25601461035357600080fd5b8063722e7ec814610272578063790ca413146102885780637a34a19e1461029e5780638b752677146102be57600080fd5b80632fa4f085116100dc5780632fa4f085146101ce5780633cfba0e3146101e45780634e71d92d1461021157806356891412146102265780635a7e19891461023c57600080fd5b80631560aace1461010e5780632640d9db146101375780632e1a7d4d1461016d5780632f54bf6e1461018f575b600080fd5b34801561011a57600080fd5b5061012460065481565b6040519081526020015b60405180910390f35b34801561014357600080fd5b506101246101523660046110d7565b6001600160a01b03166000908152600a602052604090205490565b34801561017957600080fd5b5061018d610188366004611100565b610373565b005b34801561019b57600080fd5b506101be6101aa3660046110d7565b6000546001600160a01b0391821691161490565b604051901515815260200161012e565b3480156101da57600080fd5b5061012460035481565b3480156101f057600080fd5b506101246101ff3660046110d7565b600b6020526000908152604090205481565b34801561021d57600080fd5b5061018d6105d1565b34801561023257600080fd5b5061012460045481565b34801561024857600080fd5b506101246102573660046110d7565b6001600160a01b031660009081526009602052604090205490565b34801561027e57600080fd5b5061012460055481565b34801561029457600080fd5b5061012460075481565b3480156102aa57600080fd5b5061018d6102b9366004611100565b610747565b3480156102ca57600080fd5b506001546102de906001600160a01b031681565b6040516001600160a01b03909116815260200161012e565b61018d610914565b34801561030a57600080fd5b5061018d610319366004611100565b61093a565b34801561032a57600080fd5b5061018d610baa565b34801561033f57600080fd5b5061018d61034e366004611100565b610e37565b34801561035f57600080fd5b5061012461036e3660046110d7565b610eb2565b600654610383906213c68061112f565b4210156103ef5760405162461bcd60e51b815260206004820152602f60248201527f596f752063616e206f6e6c79207769746864726177206166746572203135204460448201526e30bcb99037b31039ba30b5b4b7339760891b60648201526084015b60405180910390fd5b60008111801561040e5750336000908152600a60205260409020548111155b61046f5760405162461bcd60e51b815260206004820152602c60248201527f596f752063616e6e6f74207769746864726177206d6f7265207468616e20776860448201526b617420796f7520686176652160a01b60648201526084016103e6565b3360009081526009602052604090208054439182905590670de0b6b3a76400009061049b908390611147565b600554336000908152600a60205260409020546104b8919061115e565b6104c2919061115e565b6104cc919061117d565b33600090815260086020526040812080549091906104eb90849061112f565b9091555050336000908152600a60205260408120805484929061050f908490611147565b9091555050336000908152600a60205260409020546105315761053133610f42565b60025460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561057d57600080fd5b505af1158015610591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b5919061119f565b5081600460008282546105c89190611147565b90915550505050565b3360009081526009602052604090208054439182905590670de0b6b3a7640000906105fd908390611147565b600554336000908152600a602052604090205461061a919061115e565b610624919061115e565b61062e919061117d565b336000908152600860205260408120805490919061064d90849061112f565b9091555050336000908152600860205260409020546106a55760405162461bcd60e51b81526020600482015260146024820152734e6f207265776172647320746f20636c61696d2160601b60448201526064016103e6565b3360009081526008602052604081208054919055478111156107155760405162461bcd60e51b8152602060048201526024808201527f4e6f7420656e6f75676820457468657220746f20706179206f757420726577616044820152637264732160e01b60648201526084016103e6565b604051339082156108fc029083906000818181858888f19350505050158015610742573d6000803e3d6000fd5b505050565b6000546001600160a01b031633146107955760405162461bcd60e51b815260206004820152601160248201527021b0b636103737ba1030b63637bbb2b21760791b60448201526064016103e6565b60005b600c5481101561090e57600060096000600c84815481106107bb576107bb6111c1565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000205490504360096000600c8581548110610814576108146111c1565b60009182526020808320909101546001600160a01b03168352820192909252604001902055670de0b6b3a764000061084c8243611147565b600554600a6000600c8781548110610866576108666111c1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054610895919061115e565b61089f919061115e565b6108a9919061117d565b60086000600c85815481106108c0576108c06111c1565b60009182526020808320909101546001600160a01b03168352820192909252604001812080549091906108f490849061112f565b909155508291506109069050816111d7565b915050610798565b50600555565b336000908152600b60205260408120805434929061093390849061112f565b9091555050565b600081118015610959575060035481600454610956919061112f565b11155b6109cb5760405162461bcd60e51b815260206004820152603a60248201527f546865206d6178696d756d20616d6f756e74206f66204255424c53732068617360448201527f206265656e207374616b656420696e207468697320706f6f6c2e00000000000060648201526084016103e6565b6002546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015610a1d57600080fd5b505af1158015610a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a55919061119f565b508060046000828254610a68919061112f565b9091555050336000908152600960209081526040808320805443909155600a9092529091205415610b0157670de0b6b3a7640000610aa68243611147565b600554336000908152600a6020526040902054610ac3919061115e565b610acd919061115e565b610ad7919061117d565b3360009081526008602052604081208054909190610af690849061112f565b90915550610b599050565b42600655600c8054336000818152600d60205260408120839055600183018455929092527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b03191690911790555b336000908152600a602052604081208054849290610b7890849061112f565b9091555050600754610b8d906201518061112f565b421115610ba657600554610ba2906002611057565b6005555b5050565b336000908152600a6020526040902054610c1d5760405162461bcd60e51b815260206004820152602e60248201527f596f7520646f206e6f74206861766520616e79207374616b656420746f6b656e60448201526d7320746f2077697468647261772160901b60648201526084016103e6565b3360009081526009602052604090208054439182905590670de0b6b3a764000090610c49908390611147565b600554336000908152600a6020526040902054610c66919061115e565b610c70919061115e565b610c7a919061117d565b3360009081526008602052604081208054909190610c9990849061112f565b9091555050336000908152600a6020526040812054610cba9060029061117d565b336000908152600a602052604081205491925090610cd9908390611147565b336000908152600a60205260408120819055600480549293508392909190610d02908490611147565b9091555050336000908152600a6020526040902054610d2457610d2433610f42565b60025460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b158015610d7057600080fd5b505af1158015610d84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da8919061119f565b5060025460015460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905291169063a9059cbb90604401602060405180830381600087803b158015610df957600080fd5b505af1158015610e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e31919061119f565b50505050565b6000546001600160a01b03163314610e855760405162461bcd60e51b815260206004820152601160248201527021b0b636103737ba1030b63637bbb2b21760791b60448201526064016103e6565b604051339082156108fc029083906000818181858888f19350505050158015610ba6573d6000803e3d6000fd5b6001600160a01b038116600090815260096020526040812054670de0b6b3a764000090610edf9043611147565b6005546001600160a01b0385166000908152600a6020526040902054610f05919061115e565b610f0f919061115e565b610f19919061117d565b6001600160a01b038316600090815260086020526040902054610f3c919061112f565b92915050565b600c8054610f5290600190611147565b81548110610f6257610f626111c1565b60009182526020808320909101546001600160a01b038481168452600d909252604090922054600c80549290931692918110610fa057610fa06111c1565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600d918290526040812054600c805491939291610fec90600190611147565b81548110610ffc57610ffc6111c1565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600c805480611032576110326111f2565b600082815260209020810160001990810180546001600160a01b031916905501905550565b600061109983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506110a0565b9392505050565b600081836110c15760405162461bcd60e51b81526004016103e69190611208565b5060006110ce848661117d565b95945050505050565b6000602082840312156110e957600080fd5b81356001600160a01b038116811461109957600080fd5b60006020828403121561111257600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561114257611142611119565b500190565b60008282101561115957611159611119565b500390565b600081600019048311821515161561117857611178611119565b500290565b60008261119a57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156111b157600080fd5b8151801515811461109957600080fd5b634e487b7160e01b600052603260045260246000fd5b60006000198214156111eb576111eb611119565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600060208083528351808285015260005b8181101561123557858101830151858201604001528201611219565b81811115611247576000604083870101525b50601f01601f191692909201604001939250505056fea2646970667358221220e81dfb93862a103d93a4b0a94b9e06e4f2816ce7017a7797c9846fd57c1e09f764736f6c63430008090033

Deployed Bytecode Sourcemap

2115:5372:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4249:32;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;4249:32:0;;;;;;;;2754:113;;;;;;;;;;-1:-1:-1;2754:113:0;;;;;:::i;:::-;-1:-1:-1;;;;;2844:15:0;2817:7;2844:15;;;:7;:15;;;;;;;2754:113;5467:663;;;;;;;;;;-1:-1:-1;5467:663:0;;;;;:::i;:::-;;:::i;:::-;;2303:103;;;;;;;;;;-1:-1:-1;2303:103:0;;;;;:::i;:::-;2358:4;2393:5;-1:-1:-1;;;;;2382:16:0;;;2393:5;;2382:16;;2303:103;;;;837:14:1;;830:22;812:41;;800:2;785:18;2303:103:0;672:187:1;4107:60:0;;;;;;;;;;;;;;;;4453:47;;;;;;;;;;-1:-1:-1;4453:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;6138:592;;;;;;;;;;;;;:::i;4171:26::-;;;;;;;;;;;;;;;;2633:113;;;;;;;;;;-1:-1:-1;2633:113:0;;;;;:::i;:::-;-1:-1:-1;;;;;2720:18:0;2693:7;2720:18;;;:10;:18;;;;;;;2633:113;4204:38;;;;;;;;;;;;;;;;4288:25;;;;;;;;;;;;;;;;6741:373;;;;;;;;;;-1:-1:-1;6741:373:0;;;;;:::i;:::-;;:::i;2979:75::-;;;;;;;;;;-1:-1:-1;2979:75:0;;;;-1:-1:-1;;;;;2979:75:0;;;;;;-1:-1:-1;;;;;1028:32:1;;;1010:51;;998:2;983:18;2979:75:0;864:203:1;2875:96:0;;;:::i;4679:780::-;;;;;;;;;;-1:-1:-1;4679:780:0;;;;;:::i;:::-;;:::i;3063:836::-;;;;;;;;;;;;;:::i;3907:110::-;;;;;;;;;;-1:-1:-1;3907:110:0;;;;;:::i;:::-;;:::i;2414:211::-;;;;;;;;;;-1:-1:-1;2414:211:0;;;;;:::i;:::-;;:::i;5467:663::-;5546:17;;:27;;5566:7;5546:27;:::i;:::-;5527:15;:46;;5519:106;;;;-1:-1:-1;;;5519:106:0;;1539:2:1;5519:106:0;;;1521:21:1;1578:2;1558:18;;;1551:30;1617:34;1597:18;;;1590:62;-1:-1:-1;;;1668:18:1;;;1661:45;1723:19;;5519:106:0;;;;;;;;;5647:1;5638:6;:10;:43;;;;-1:-1:-1;5670:10:0;5662:19;;;;:7;:19;;;;;;5652:29;;;5638:43;5630:100;;;;-1:-1:-1;;;5630:100:0;;1955:2:1;5630:100:0;;;1937:21:1;1994:2;1974:18;;;1967:30;2033:34;2013:18;;;2006:62;-1:-1:-1;;;2084:18:1;;;2077:42;2136:19;;5630:100:0;1753:408:1;5630:100:0;5768:10;5735:19;5757:22;;;:10;:22;;;;;;;5809:12;5784:37;;;;5757:22;5937:4;;5906:26;;5757:22;;5906:26;:::i;:::-;5879:23;;5865:10;5857:19;;;;:7;:19;;;;;;:45;;5879:23;5857:45;:::i;:::-;:76;;;;:::i;:::-;5856:85;;;;:::i;:::-;5841:10;5826:26;;;;:14;:26;;;;;:115;;:26;;;:115;;;;;:::i;:::-;;;;-1:-1:-1;;5954:10:0;5946:19;;;;:7;:19;;;;;:29;;5969:6;;5946:19;:29;;5969:6;;5946:29;:::i;:::-;;;;-1:-1:-1;;5994:10:0;5986:19;;;;:7;:19;;;;;;5982:66;;6018:24;6031:10;6018:12;:24::i;:::-;6054:5;;:34;;-1:-1:-1;;;6054:34:0;;6069:10;6054:34;;;2865:51:1;2932:18;;;2925:34;;;-1:-1:-1;;;;;6054:5:0;;;;:14;;2838:18:1;;6054:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6116:6;6101:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;5467:663:0:o;6138:592::-;6206:10;6173:19;6195:22;;;:10;:22;;;;;;;6253:12;6228:37;;;;6195:22;6387:4;;6356:26;;6195:22;;6356:26;:::i;:::-;6329:23;;6315:10;6307:19;;;;:7;:19;;;;;;:45;;6329:23;6307:45;:::i;:::-;:76;;;;:::i;:::-;6306:85;;;;:::i;:::-;6291:10;6276:26;;;;:14;:26;;;;;:115;;:26;;;:115;;;;;:::i;:::-;;;;-1:-1:-1;;6425:10:0;6439:1;6410:26;;;:14;:26;;;;;;6402:63;;;;-1:-1:-1;;;6402:63:0;;3454:2:1;6402:63:0;;;3436:21:1;3493:2;3473:18;;;3466:30;-1:-1:-1;;;3512:18:1;;;3505:50;3572:18;;6402:63:0;3252:344:1;6402:63:0;6509:10;6476:15;6494:26;;;:14;:26;;;;;;;6531:30;;;6590:21;:32;-1:-1:-1;6590:32:0;6582:81;;;;-1:-1:-1;;;6582:81:0;;3803:2:1;6582:81:0;;;3785:21:1;3842:2;3822:18;;;3815:30;3881:34;3861:18;;;3854:62;-1:-1:-1;;;3932:18:1;;;3925:34;3976:19;;6582:81:0;3601:400:1;6582:81:0;6685:37;;6693:10;;6685:37;;;;;6714:7;;6685:37;;;;6714:7;6693:10;6685:37;;;;;;;;;;;;;;;;;;;;;6162:568;;6138:592::o;6741:373::-;2358:4;2393:5;-1:-1:-1;;;;;2393:5:0;2251:10;2382:16;2235:49;;;;-1:-1:-1;;;2235:49:0;;4208:2:1;2235:49:0;;;4190:21:1;4247:2;4227:18;;;4220:30;-1:-1:-1;;;4266:18:1;;;4259:47;4323:18;;2235:49:0;4006:341:1;2235:49:0;6809:9:::1;6804:265;6828:7;:14:::0;6824:18;::::1;6804:265;;;6855:19;6877:10;:22;6888:7;6896:1;6888:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;6888:10:0::1;-1:-1:-1::0;;;;;6877:22:0::1;-1:-1:-1::0;;;;;6877:22:0::1;;;;;;;;;;;;;6855:44;;6930:12;6905:10;:22;6916:7;6924:1;6916:10;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;6916:10:0::1;6905:22:::0;;;::::1;::::0;;;;;;;;:37;7059:4:::1;7028:26;7043:11:::0;7028:12:::1;:26;:::i;:::-;7001:23;;6979:7;:19;6987:7;6995:1;6987:10;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;6987:10:0::1;6979:19:::0;;;::::1;::::0;;;;;;;;;:45:::1;::::0;;::::1;:::i;:::-;:76;;;;:::i;:::-;6978:85;;;;:::i;:::-;6948:14;:26;6963:7;6971:1;6963:10;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;6963:10:0::1;6948:26:::0;;;::::1;::::0;;;;;;;;:115;;:26;;6963:10;6948:115:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;6844:3:0;;-1:-1:-1;6844:3:0::1;::::0;-1:-1:-1;6844:3:0;::::1;:::i;:::-;;;;6804:265;;;-1:-1:-1::0;7075:23:0::1;:32:::0;6741:373::o;2875:96::-;2939:10;2927:23;;;;:11;:23;;;;;:36;;2954:9;;2927:23;:36;;2954:9;;2927:36;:::i;:::-;;;;-1:-1:-1;;2875:96:0:o;4679:780::-;4739:1;4730:6;:10;:51;;;;;4768:13;;4758:6;4744:11;;:20;;;;:::i;:::-;:37;;4730:51;4722:122;;;;-1:-1:-1;;;4722:122:0;;4826:2:1;4722:122:0;;;4808:21:1;4865:2;4845:18;;;4838:30;4904:34;4884:18;;;4877:62;4975:28;4955:18;;;4948:56;5021:19;;4722:122:0;4624:422:1;4722:122:0;4849:5;;:53;;-1:-1:-1;;;4849:53:0;;4868:10;4849:53;;;5291:34:1;4888:4:0;5341:18:1;;;5334:43;5393:18;;;5386:34;;;-1:-1:-1;;;;;4849:5:0;;;;:18;;5226::1;;4849:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4924:6;4909:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;4970:10:0;4937:19;4959:22;;;:10;:22;;;;;;;;;;5011:12;4986:37;;;5034:7;:19;;;;;;;:23;5030:245;;5176:4;5145:26;5160:11;5145:12;:26;:::i;:::-;5118:23;;5104:10;5096:19;;;;:7;:19;;;;;;:45;;5118:23;5096:45;:::i;:::-;:76;;;;:::i;:::-;5095:85;;;;:::i;:::-;5080:10;5065:26;;;;:14;:26;;;;;:115;;:26;;;:115;;;;;:::i;:::-;;;;-1:-1:-1;5030:245:0;;-1:-1:-1;5030:245:0;;5227:15;5207:17;:35;7198:7;:14;;5258:10;7174:21;;;;:13;:21;;;;;:38;;;7223:20;;;;;;;;;;;;;-1:-1:-1;;;;;;7223:20:0;;;;;;5248:21;5289:10;5281:19;;;;:7;:19;;;;;:29;;5304:6;;5281:19;:29;;5304:6;;5281:29;:::i;:::-;;;;-1:-1:-1;;5345:10:0;;:21;;5358:8;5345:21;:::i;:::-;5327:15;:39;5323:128;;;5409:23;;:30;;5437:1;5409:27;:30::i;:::-;5383:23;:56;5323:128;4717:742;4679:780;:::o;3063:836::-;3122:10;3136:1;3114:19;;;:7;:19;;;;;;3106:82;;;;-1:-1:-1;;;3106:82:0;;5633:2:1;3106:82:0;;;5615:21:1;5672:2;5652:18;;;5645:30;5711:34;5691:18;;;5684:62;-1:-1:-1;;;5762:18:1;;;5755:44;5816:19;;3106:82:0;5431:410:1;3106:82:0;3230:10;3197:19;3219:22;;;:10;:22;;;;;;;3273:12;3248:37;;;;3219:22;3403:4;;3372:26;;3219:22;;3372:26;:::i;:::-;3345:23;;3331:10;3323:19;;;;:7;:19;;;;;;:45;;3345:23;3323:45;:::i;:::-;:76;;;;:::i;:::-;3322:85;;;;:::i;:::-;3307:10;3292:26;;;;:14;:26;;;;;:115;;:26;;;:115;;;;;:::i;:::-;;;;-1:-1:-1;;3448:10:0;3416:21;3440:19;;;:7;:19;;;;;;:23;;3462:1;;3440:23;:::i;:::-;3505:10;3470:24;3497:19;;;:7;:19;;;;;;3416:47;;-1:-1:-1;3470:24:0;3497:35;;3416:47;;3497:35;:::i;:::-;3549:10;3563:1;3541:19;;;:7;:19;;;;;:23;;;3571:11;:31;;3470:62;;-1:-1:-1;3470:62:0;;3571:11;;3563:1;3571:31;;3470:62;;3571:31;:::i;:::-;;;;-1:-1:-1;;3623:10:0;3615:19;;;;:7;:19;;;;;;3611:73;;3652:24;3665:10;3652:12;:24::i;:::-;3742:5;;:44;;-1:-1:-1;;;3742:44:0;;3757:10;3742:44;;;2865:51:1;2932:18;;;2925:34;;;-1:-1:-1;;;;;3742:5:0;;;;:14;;2838:18:1;;3742:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3851:5:0;;;3866:13;3851:44;;-1:-1:-1;;;3851:44:0;;-1:-1:-1;;;;;3866:13:0;;;3851:44;;;2865:51:1;2932:18;;;2925:34;;;3851:5:0;;;:14;;2838:18:1;;3851:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3099:800;;;3063:836::o;3907:110::-;2358:4;2393:5;-1:-1:-1;;;;;2393:5:0;2251:10;2382:16;2235:49;;;;-1:-1:-1;;;2235:49:0;;4208:2:1;2235:49:0;;;4190:21:1;4247:2;4227:18;;;4220:30;-1:-1:-1;;;4266:18:1;;;4259:47;4323:18;;2235:49:0;4006:341:1;2235:49:0;3973:36:::1;::::0;3981:10:::1;::::0;3973:36;::::1;;;::::0;4002:6;;3973:36:::1;::::0;;;4002:6;3981:10;3973:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;2414:211:::0;-1:-1:-1;;;;;2590:18:0;;2477:7;2590:18;;;:10;:18;;;;;;2613:4;;2575:33;;:12;:33;:::i;:::-;2548:23;;-1:-1:-1;;;;;2530:15:0;;;;;;:7;:15;;;;;;:41;;2548:23;2530:41;:::i;:::-;:79;;;;:::i;:::-;2529:88;;;;:::i;:::-;-1:-1:-1;;;;;2504:22:0;;;;;;:14;:22;;;;;;:113;;;;:::i;:::-;2497:120;2414:211;-1:-1:-1;;2414:211:0:o;7259:223::-;7350:7;7358:14;;:16;;7373:1;;7358:16;:::i;:::-;7350:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;7325:21:0;;;;;:13;:21;;;;;;;;7317:7;:30;;7350:25;;;;;7317:7;:30;;;;;;:::i;:::-;;;;;;;;;;;;;:58;;-1:-1:-1;;;;;;7317:58:0;-1:-1:-1;;;;;7317:58:0;;;;;;7429:21;;;;;:13;:21;;;;;;;;7400:7;7408:14;;7429:21;;:13;7317:30;7408:16;;-1:-1:-1;;7408:16:0;:::i;:::-;7400:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;7400:25:0;7386:40;;;;;;;;;;;;:64;7461:7;:13;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;7461:13:0;;;;;-1:-1:-1;;;;;;7461:13:0;;;;;;-1:-1:-1;7259:223:0:o;867:132::-;925:7;952:39;956:1;959;952:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;945:46;867:132;-1:-1:-1;;;867:132:0:o;1005:189::-;1091:7;1126:12;1119:5;1111:28;;;;-1:-1:-1;;;1111:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1150:9:0;1162:5;1166:1;1162;:5;:::i;:::-;1150:17;1005:189;-1:-1:-1;;;;;1005:189:0:o;196:286:1:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;350:23;;-1:-1:-1;;;;;402:31:1;;392:42;;382:70;;448:1;445;438:12;487:180;546:6;599:2;587:9;578:7;574:23;570:32;567:52;;;615:1;612;605:12;567:52;-1:-1:-1;638:23:1;;487:180;-1:-1:-1;487:180:1:o;1072:127::-;1133:10;1128:3;1124:20;1121:1;1114:31;1164:4;1161:1;1154:15;1188:4;1185:1;1178:15;1204:128;1244:3;1275:1;1271:6;1268:1;1265:13;1262:39;;;1281:18;;:::i;:::-;-1:-1:-1;1317:9:1;;1204:128::o;2166:125::-;2206:4;2234:1;2231;2228:8;2225:34;;;2239:18;;:::i;:::-;-1:-1:-1;2276:9:1;;2166:125::o;2296:168::-;2336:7;2402:1;2398;2394:6;2390:14;2387:1;2384:21;2379:1;2372:9;2365:17;2361:45;2358:71;;;2409:18;;:::i;:::-;-1:-1:-1;2449:9:1;;2296:168::o;2469:217::-;2509:1;2535;2525:132;;2579:10;2574:3;2570:20;2567:1;2560:31;2614:4;2611:1;2604:15;2642:4;2639:1;2632:15;2525:132;-1:-1:-1;2671:9:1;;2469:217::o;2970:277::-;3037:6;3090:2;3078:9;3069:7;3065:23;3061:32;3058:52;;;3106:1;3103;3096:12;3058:52;3138:9;3132:16;3191:5;3184:13;3177:21;3170:5;3167:32;3157:60;;3213:1;3210;3203:12;4352:127;4413:10;4408:3;4404:20;4401:1;4394:31;4444:4;4441:1;4434:15;4468:4;4465:1;4458:15;4484:135;4523:3;-1:-1:-1;;4544:17:1;;4541:43;;;4564:18;;:::i;:::-;-1:-1:-1;4611:1:1;4600:13;;4484:135::o;5846:127::-;5907:10;5902:3;5898:20;5895:1;5888:31;5938:4;5935:1;5928:15;5962:4;5959:1;5952:15;5978:597;6090:4;6119:2;6148;6137:9;6130:21;6180:6;6174:13;6223:6;6218:2;6207:9;6203:18;6196:34;6248:1;6258:140;6272:6;6269:1;6266:13;6258:140;;;6367:14;;;6363:23;;6357:30;6333:17;;;6352:2;6329:26;6322:66;6287:10;;6258:140;;;6416:6;6413:1;6410:13;6407:91;;;6486:1;6481:2;6472:6;6461:9;6457:22;6453:31;6446:42;6407:91;-1:-1:-1;6559:2:1;6538:15;-1:-1:-1;;6534:29:1;6519:45;;;;6566:2;6515:54;;5978:597;-1:-1:-1;;;5978:597:1:o

Swarm Source

ipfs://e81dfb93862a103d93a4b0a94b9e06e4f2816ce7017a7797c9846fd57c1e09f7

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ 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.