Transaction Hash:
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:
| 26 |
EasySmartolution.ParticipantRemoved( _sender=[Sender] 0xfaf90c017015ee7d194dd804b3c2f8fb4abf43d1 )
|
Account State Difference:
| Address | Before | After | State Difference | ||
|---|---|---|---|---|---|
|
0x829BD824...93333A830
Miner
| (F2Pool Old) | 3,080.36589377195265146 Eth | 3,080.36618480795265146 Eth | 0.000291036 | |
| 0xB2D5468c...BDb9D2656 | 8.90787870427272744 Eth | 7.77575648093939413 Eth | 1.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( )
[EasySmartolution (ln:50)]
addParticipant[EasySmartolution (ln:52)]processPayment[EasySmartolution (ln:69)]value[EasySmartolution (ln:93)]daily[EasySmartolution (ln:93)]ParticipantRemoved[EasySmartolution (ln:97)]
send[EasySmartolution (ln:71)]send[EasySmartolution (ln:73)]ParticipantAdded[EasySmartolution (ln:76)]
processPayment[EasySmartolution (ln:55)]value[EasySmartolution (ln:93)]daily[EasySmartolution (ln:93)]ParticipantRemoved[EasySmartolution (ln:97)]
getOut[EasySmartolution (ln:57)]users[EasySmartolution (ln:106)]ParticipantRemoved[EasySmartolution (ln:113)]transfer[EasySmartolution (ln:115)]
revert[EasySmartolution (ln:59)]
File 1 of 2: EasySmartolution
File 2 of 2: Smartolution
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);
}
}
}