ETH Price: $3,037.77 (+2.12%)

Transaction Decoder

Block:
6985529 at Dec-31-2018 11:27:24 AM +UTC
Transaction Fee:
0.000291036 ETH $0.88
Gas Used:
24,253 Gas / 12 Gwei

Emitted Events:

Account State Difference:

  Address   Before After State Difference Code
(F2Pool Old)
3,080.36589377195265146 Eth3,080.36618480795265146 Eth0.000291036
0xB2D5468c...BDb9D2656 8.90787870427272744 Eth7.77575648093939413 Eth1.13212222333333331
0xfaf90C01...b4abf43d1
0.006762426086781836 Eth
Nonce: 140
1.138593613420115146 Eth
Nonce: 141
1.13183118733333331

Execution Trace

ETH 0.00001111 EasySmartolution.CALL( )
  • Smartolution.users( 0xe813DA03053471BcCC5eD506288597b7c9130fA3 ) => ( value=26955555555555555, index=3, atBlock=6966002 )
  • ETH 1.13213333333333331 0xfaf90c017015ee7d194dd804b3c2f8fb4abf43d1.CALL( )
    File 1 of 2: EasySmartolution
    pragma solidity ^0.4.25;
    
    /*
     * Website: smartolution.org
     *
     * Easiest way to participate in original Smartolution!
     * This is not a separate project, all ether goes to the original contract!
     * 0xe0ae35fe7Df8b86eF08557b535B89bB6cb036C23
     * 
     * Smartolution.org (0xe0ae35fe7Df8b86eF08557b535B89bB6cb036C23)
     * requires you to send daily transactions for 44 days!
     *
     * This contract DOES IT FOR YOU!
     *
     * ONE transaction and AUTOMATIC PAYOUTS for 44 days! 
     * 
     * How it works?
     * Easy! 
     * Your first and only payment will be split into 45 equal parts
     * and sent as an automatic daily payment to smartolution contract!
     * Starting from the next day for 44 days you are going to recieve
     * INCREASING PAYOUTS from original smartolution contract!
     *
     * NO NEED to send 0 ether transactions, FULLY AUTOMATED PAYROLL!
     *
     * Send any amount inbetween 0.45 and 225 ether!
     *
     * Minimum: 0.45 ether (0.01 ether daily) ~170% payout @ 45th day
     * Maximum: 225 ehter (5 ether daily) ~155% payout @ 45th day
     * Gas limit: 500 000
     * Recommended gas price: https://ethgasstation.info/
     * 
     */
    contract EasySmartolution {
        address constant smartolution = 0xe0ae35fe7Df8b86eF08557b535B89bB6cb036C23;
        
        event ParticipantAdded(address _sender);
        event ParticipantRemoved(address _sender);
        event ReferrerAdded(address _contract, address _sender);
    
        mapping (address => address) public participants; 
        mapping (address => bool) public referrers;
        
        address private processing;
     
        constructor(address _processing) public {
            processing = _processing;
        }
        
        function () external payable {
            if (participants[msg.sender] == address(0)) {
                addParticipant(msg.sender, address(0));
            } else {
                if (msg.value == 0) {
                    processPayment(msg.sender);
                } else if (msg.value == 0.00001111 ether) {
                    getOut();
                } else {
                    revert();
                }
            }
        }
        
        function addParticipant(address _address, address _referrer) payable public {
            require(participants[_address] == address(0), "This participant is already registered");
            require(msg.value >= 0.45 ether && msg.value <= 225 ether, "Deposit should be between 0.45 ether and 225 ether (45 days)");
            
            participants[_address] = address(new Participant(_address, msg.value / 45));
            processPayment(_address);
            
            processing.send(msg.value / 33);
            if (_referrer != address(0) && referrers[_referrer]) {
                _referrer.send(msg.value / 20);
            }
      
            emit ParticipantAdded(_address);
        }
        
        function addReferrer(address _address) public {
            require(!referrers[_address], "This address is already a referrer");
            
            referrers[_address] = true;
            EasySmartolutionRef refContract = new EasySmartolutionRef();
            refContract.setReferrer(_address);
            refContract.setSmartolution(address(this));
            
            emit ReferrerAdded(address(refContract), _address);
        }
    
        function processPayment(address _address) public {
            Participant participant = Participant(participants[_address]);
    
            bool done = participant.processPayment.value(participant.daily())();
            
            if (done) {
                participants[_address] = address(0);
                emit ParticipantRemoved(_address);
            }
        }
        
        function getOut() public {
            require(participants[msg.sender] != address(0), "You are not a participant");
            Participant participant = Participant(participants[msg.sender]);
            uint index;
            uint value;
            (value, index, ) = SmartolutionInterface(smartolution).users(address(participant));
            uint paymentsLeft = (45 - index) * value;
            if (paymentsLeft > address(this).balance) {
                paymentsLeft = address(this).balance;
            }
            
            participants[msg.sender] = address(0);
            emit ParticipantRemoved(msg.sender);
            
            msg.sender.transfer(paymentsLeft);
        }
    }
    
    contract EasySmartolutionRef {
        address public referrer;
        address public smartolution;
        
        constructor () public {
        }
    
        function setReferrer(address _referrer) external {
            require(referrer == address(0), "referrer can only be set once");
            referrer = _referrer;
        }
    
        function setSmartolution(address _smartolution) external {
            require(smartolution == address(0), "smartolution can only be set once");
            smartolution = _smartolution;
        }
    
        function () external payable {
            if (msg.value > 0) {
                EasySmartolution(smartolution).addParticipant.value(msg.value)(msg.sender, referrer);
            } else {
                EasySmartolution(smartolution).processPayment(msg.sender);
            }
        }
    }
    
    contract Participant {
        address constant smartolution = 0xe0ae35fe7Df8b86eF08557b535B89bB6cb036C23;
    
        address public owner;
        uint public daily;
        
        constructor(address _owner, uint _daily) public {
            owner = _owner;
            daily = _daily;
        }
        
        function () external payable {}
        
        function processPayment() external payable returns (bool) {
            require(msg.value == daily, "Invalid value");
            
            uint indexBefore;
            uint index;
            (,indexBefore,) = SmartolutionInterface(smartolution).users(address(this));
            smartolution.call.value(msg.value)();
            (,index,) = SmartolutionInterface(smartolution).users(address(this));
    
            require(index != indexBefore, "Smartolution rejected that payment, too soon or not enough ether");
        
            owner.send(address(this).balance);
    
            return index == 45;
        }
    }
    
    contract SmartolutionInterface {
        struct User {
            uint value;
            uint index;
            uint atBlock;
        }
    
        mapping (address => User) public users; 
    }

    File 2 of 2: Smartolution
    pragma solidity ^0.4.25;
    
    /**
     * Smartolution.org!
     *
     * Hey, 
     * 
     * You know the rules of ponzi already,
     * but let me briefly explain how this one works ;)
     * 
     * This is your personal 45 days magic piggy bank!
     * 
     * 1. Send fixed amount of ether every 24 hours (5900 blocks).
     * 2. With every new transaction collect exponentially greater return!
     * 3. Keep sending the same amount of ether! (can't trick the code, bro)
     * 4. Don't send too often (early transactions will be rejected, uh oh)
     * 5. Don't be late, you won't loose your %, but who wants to be the last?
     *  
     * Play by the rules and save up to 170%!
     *
     * Gas limit: 150 000 (only the first time, average ~ 50 000)
     * Gas price: https://ethgasstation.info/
     *
     */
    contract Smartolution {
    
        struct User {
            uint value;
            uint index;
            uint atBlock;
        }
    
        mapping (address => User) public users;
        
        uint public total;
        uint public advertisement;
        uint public team;
       
        address public teamAddress;
        address public advertisementAddress;
    
        constructor(address _advertisementAddress, address _teamAddress) public {
            advertisementAddress = _advertisementAddress;
            teamAddress = _teamAddress;
        }
    
        function () public payable {
            require(msg.value == 0.00001111 ether || (msg.value >= 0.01 ether && msg.value <= 5 ether), "Min: 0.01 ether, Max: 5 ether, Exit: 0.00001111 eth");
    
            User storage user = users[msg.sender]; // this is you
    
            if (msg.value != 0.00001111 ether) {
                total += msg.value;                 // total 
                advertisement += msg.value / 30;    // 3.3% advertisement
                team += msg.value / 200;            // 0.5% team
                
                if (user.value == 0) { 
                    user.value = msg.value;
                    user.atBlock = block.number;
                    user.index = 1;     
                } else {
                    require(msg.value == user.value, "Amount should be the same");
                    require(block.number - user.atBlock >= 5900, "Too soon, try again later");
    
                    uint idx = ++user.index;
                    
                    if (idx == 45) {
                        user.value = 0; // game over for you, my friend!
                    } else {
                        // if you are late for more than 4 hours (984 blocks)
                        // then next deposit/payment will be delayed accordingly
                        if (block.number - user.atBlock - 5900 < 984) { 
                            user.atBlock += 5900;
                        } else {
                            user.atBlock = block.number - 984;
                        }
                    }
    
                    // sprinkle that with some magic numbers and voila
                    msg.sender.transfer(msg.value * idx * idx * (24400 - 500 * msg.value / 1 ether) / 10000000);
                }
            } else {
                require(user.index <= 10, "It's too late to request a refund at this point");
    
                msg.sender.transfer(user.index * user.value * 70 / 100);
                user.value = 0;
            }
            
        }
    
        /**
         * This one is easy, claim reserved ether for the team or advertisement
         */ 
        function claim(uint amount) public {
            if (msg.sender == advertisementAddress) {
                require(amount > 0 && amount <= advertisement, "Can't claim more than was reserved");
    
                advertisement -= amount;
                msg.sender.transfer(amount);
            } else 
            if (msg.sender == teamAddress) {
                require(amount > 0 && amount <= team, "Can't claim more than was reserved");
    
                team -= amount;
                msg.sender.transfer(amount);
            }
        }
    }