pragma solidity ^0.4.25;
//This smart-contract was developed exclusively for kassa.network
//if you need smart-contracts like this, more complicated or more simple, please contact vijaya108@pm.me
contract Ownable
{
address public laxmi;
address public newLaxmi;
constructor() public
{
laxmi = msg.sender;
}
modifier onlyLaxmi()
{
require(msg.sender == laxmi, "Can used only by owner");
_;
}
function changeLaxmi(address _laxmi) onlyLaxmi public
{
require(_laxmi != 0, "Please provide new owner address");
newLaxmi = _laxmi;
}
function confirmLaxmi() public
{
require(newLaxmi == msg.sender, "Please call from new owner");
laxmi = newLaxmi;
delete newLaxmi;
}
}
library SafeMath
{
function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c)
{
if (_a == 0) { return 0; }
c = _a * _b;
assert(c / _a == _b);
return c;
}
function div(uint256 _a, uint256 _b) internal pure returns (uint256)
{
return _a / _b;
}
function sub(uint256 _a, uint256 _b) internal pure returns (uint256)
{
assert(_b <= _a);
return _a - _b;
}
function add(uint256 _a, uint256 _b) internal pure returns (uint256 c)
{
c = _a + _b;
assert(c >= _a);
return c;
}
}
contract KassaNetwork is Ownable
{
using SafeMath for uint;
string public constant name = 'Kassa 400/100';
uint public startTimestamp = now;
uint public constant procKoef = 10000;
uint public constant perDay = 50;
uint public constant ownerFee = 500;
uint[5] public bonusReferrer = [500, 100, 100, 100, 200];
uint public constant procReturn = 9000;
uint public constant maxDepositDays = 400;
uint public constant minimalDeposit = 1 ether;
uint public constant maximalDepositStart = 50 ether;
uint public constant maximalDepositFinish = 100 ether;
uint public constant minimalDepositForBonusReferrer = 0.015 ether;
uint public constant dayLimitStart = 50 ether;
uint public constant progressProcKoef = 100;
uint public constant dayLimitProgressProc = 2;
uint public constant maxDepositProgressProc = 1;
uint public countInvestors = 0;
uint public totalInvest = 0;
uint public totalPenalty = 0;
uint public totalSelfInvest = 0;
uint public totalPaid = 0;
event LogInvestment(address _addr, uint _value, bytes _refData);
event LogTransfer(address _addr, uint _amount, uint _contactBalance);
event LogSelfInvestment(uint _value);
event LogPreparePayment(address _addr, uint _totalInteres, uint _paidInteres, uint _amount);
event LogSkipPreparePayment(address _addr, uint _totalInteres, uint _paidInteres);
event LogPreparePaymentReferrer(address _addr, uint _totalReferrals, uint _paidReferrals, uint _amount);
event LogSkipPreparePaymentReferrer(address _addr, uint _totalReferrals, uint _paidReferrals);
event LogMinimalDepositPayment(address _addr, uint _money, uint _totalPenalty);
event LogPenaltyPayment(address _addr, uint currentSenderDeposit, uint referrerAdressLength, address _referrer, uint currentReferrerDeposit, uint _money, uint _sendBackAmount, uint _totalPenalty);
event LogExceededRestDepositPerDay(address _addr, address _referrer, uint _money, uint _nDay, uint _restDepositPerDay, uint _badDeposit, uint _sendBackAmount, uint _totalPenalty, uint _willDeposit);
event LogUsedRestDepositPerDay(address _addr, address _referrer, uint _money, uint _nDay, uint _restDepositPerDay, uint _realDeposit, uint _usedDepositPerDay);
event LogCalcBonusReferrer(address _referrer, uint _money, uint _index, uint _bonusReferrer, uint _amountReferrer, address _nextReferrer);
struct User
{
uint balance;
uint paidInteres;
uint timestamp;
uint countReferrals;
uint[5] countReferralsByLevel;
uint earnOnReferrals;
uint paidReferrals;
address referrer;
}
mapping (address => User) private user;
mapping (uint => uint) private usedDeposit;
function getInteres(address addr) private view returns(uint interes)
{
uint diffDays = getNDay(user[addr].timestamp);
if( diffDays > maxDepositDays ) diffDays = maxDepositDays;
interes = user[addr].balance.mul(perDay).mul(diffDays).div(procKoef);
}
function getUser(address addr) public view returns(uint balance, uint timestamp, uint paidInteres, uint totalInteres, uint countReferrals, uint[5] countReferralsByLevel, uint earnOnReferrals, uint paidReferrals, address referrer)
{
address a = addr;
return (
user[a].balance,
user[a].timestamp,
user[a].paidInteres,
getInteres(a),
user[a].countReferrals,
user[a].countReferralsByLevel,
user[a].earnOnReferrals,
user[a].paidReferrals,
user[a].referrer
);
}
function getCurrentDay() public view returns(uint nday)
{
nday = getNDay(startTimestamp);
}
function getNDay(uint date) public view returns(uint nday)
{
uint diffTime = date > 0 ? now.sub(date) : 0;
nday = diffTime.div(24 hours);
}
function getCurrentDayDepositLimit() public view returns(uint limit)
{
uint nDay = getCurrentDay();
uint dayDepositLimit = getDayDepositLimit(nDay);
if (dayDepositLimit <= maximalDepositFinish)
{
limit = getDayDepositLimit(nDay);
}
else
{
limit = maximalDepositFinish;
}
}
function calcProgress(uint start, uint proc, uint nDay) public pure returns(uint res)
{
uint s = start;
for (uint i = 0; i < nDay; i++)
{
s = s.mul(progressProcKoef + proc).div(progressProcKoef);
}
return s;
}
function getDayDepositLimit(uint nDay) public pure returns(uint limit)
{
return calcProgress(dayLimitStart, dayLimitProgressProc, nDay );
}
function getMaximalDeposit(uint nDay) public pure returns(uint limit)
{
return calcProgress(maximalDepositStart, maxDepositProgressProc, nDay );
}
function getCurrentDayRestDepositLimit() public view returns(uint restLimit)
{
uint nDay = getCurrentDay();
restLimit = getDayRestDepositLimit(nDay);
}
function getDayRestDepositLimit(uint nDay) public view returns(uint restLimit)
{
restLimit = getCurrentDayDepositLimit().sub(usedDeposit[nDay]);
}
function getCurrentMaximalDeposit() public view returns(uint maximalDeposit)
{
uint nDay = getCurrentDay();
maximalDeposit = getMaximalDeposit(nDay);
if (totalInvest > 3000 ether)
{
maximalDeposit = 0;
}
}
function() external payable
{
emit LogInvestment(msg.sender, msg.value, msg.data);
processPayment(msg.value, msg.data);
}
function processPayment(uint moneyValue, bytes refData) private
{
if (msg.sender == laxmi)
{
totalSelfInvest = totalSelfInvest.add(moneyValue);
emit LogSelfInvestment(moneyValue);
return;
}
if (moneyValue == 0)
{
preparePayment();
return;
}
if (moneyValue < minimalDeposit)
{
totalPenalty = totalPenalty.add(moneyValue);
emit LogMinimalDepositPayment(msg.sender, moneyValue, totalPenalty);
return;
}
address referrer = bytesToAddress(refData);
if (user[msg.sender].balance > 0 ||
refData.length != 20 ||
moneyValue > getCurrentMaximalDeposit() ||
referrer != laxmi &&
(
user[referrer].balance <= 0 ||
referrer == msg.sender)
)
{
uint amount = moneyValue.mul(procReturn).div(procKoef);
totalPenalty = totalPenalty.add(moneyValue.sub(amount));
emit LogPenaltyPayment(msg.sender, user[msg.sender].balance, refData.length, referrer, user[referrer].balance, moneyValue, amount, totalPenalty);
msg.sender.transfer(amount);
return;
}
uint nDay = getCurrentDay();
uint restDepositPerDay = getDayRestDepositLimit(nDay);
uint addDeposit = moneyValue;
if (moneyValue > restDepositPerDay)
{
uint returnDeposit = moneyValue.sub(restDepositPerDay);
uint returnAmount = returnDeposit.mul(procReturn).div(procKoef);
addDeposit = addDeposit.sub(returnDeposit);
totalPenalty = totalPenalty.add(returnDeposit.sub(returnAmount));
emit LogExceededRestDepositPerDay(msg.sender, referrer, moneyValue, nDay, restDepositPerDay, returnDeposit, returnAmount, totalPenalty, addDeposit);
msg.sender.transfer(returnAmount);
}
usedDeposit[nDay] = usedDeposit[nDay].add(addDeposit);
emit LogUsedRestDepositPerDay(msg.sender, referrer, moneyValue, nDay, restDepositPerDay, addDeposit, usedDeposit[nDay]);
registerInvestor(referrer);
sendOwnerFee(addDeposit);
calcBonusReferrers(referrer, addDeposit);
updateInvestBalance(addDeposit);
}
function registerInvestor(address referrer) private
{
user[msg.sender].timestamp = now;
countInvestors++;
user[msg.sender].referrer = referrer;
//user[referrer].countReferrals++;
countReferralsByLevel(referrer, 0);
}
function countReferralsByLevel(address referrer, uint level) private
{
if (level > 5)
{
return;
}
user[referrer].countReferralsByLevel[level]++;
address _nextReferrer = user[referrer].referrer;
if (_nextReferrer != 0)
{
level++;
countReferralsByLevel(_nextReferrer, level);
}
return;
}
function sendOwnerFee(uint addDeposit) private
{
transfer(laxmi, addDeposit.mul(ownerFee).div(procKoef));
}
function calcBonusReferrers(address referrer, uint addDeposit) private
{
for (uint i = 0; i < bonusReferrer.length && referrer != 0; i++)
{
uint amountReferrer = addDeposit.mul(bonusReferrer[i]).div(procKoef);
address nextReferrer = user[referrer].referrer;
emit LogCalcBonusReferrer(referrer, addDeposit, i, bonusReferrer[i], amountReferrer, nextReferrer);
preparePaymentReferrer(referrer, amountReferrer);
referrer = nextReferrer;
}
}
function preparePaymentReferrer(address referrer, uint amountReferrer) private
{
user[referrer].earnOnReferrals = user[referrer].earnOnReferrals.add(amountReferrer);
uint totalReferrals = user[referrer].earnOnReferrals;
uint paidReferrals = user[referrer].paidReferrals;
if (totalReferrals >= paidReferrals.add(minimalDepositForBonusReferrer))
{
uint amount = totalReferrals.sub(paidReferrals);
user[referrer].paidReferrals = user[referrer].paidReferrals.add(amount);
emit LogPreparePaymentReferrer(referrer, totalReferrals, paidReferrals, amount);
transfer(referrer, amount);
}
else
{
emit LogSkipPreparePaymentReferrer(referrer, totalReferrals, paidReferrals);
}
}
function preparePayment() public
{
uint totalInteres = getInteres(msg.sender);
uint paidInteres = user[msg.sender].paidInteres;
if (totalInteres > paidInteres)
{
uint amount = totalInteres.sub(paidInteres);
emit LogPreparePayment(msg.sender, totalInteres, paidInteres, amount);
user[msg.sender].paidInteres = user[msg.sender].paidInteres.add(amount);
transfer(msg.sender, amount);
}
else
{
emit LogSkipPreparePayment(msg.sender, totalInteres, paidInteres);
}
}
function updateInvestBalance(uint addDeposit) private
{
user[msg.sender].balance = user[msg.sender].balance.add(addDeposit);
totalInvest = totalInvest.add(addDeposit);
}
function transfer(address receiver, uint amount) private
{
if (amount > 0)
{
if (receiver != laxmi) { totalPaid = totalPaid.add(amount); }
uint balance = address(this).balance;
emit LogTransfer(receiver, amount, balance);
require(amount < balance, "Not enough balance. Please retry later.");
receiver.transfer(amount);
}
}
function bytesToAddress(bytes source) private pure returns(address addr)
{
assembly { addr := mload(add(source,0x14)) }
return addr;
}
function getTotals() public view returns(uint _maxDepositDays,
uint _perDay,
uint _startTimestamp,
uint _minimalDeposit,
uint _maximalDeposit,
uint[5] _bonusReferrer,
uint _minimalDepositForBonusReferrer,
uint _ownerFee,
uint _countInvestors,
uint _totalInvest,
uint _totalPenalty,
// uint _totalSelfInvest,
uint _totalPaid,
uint _currentDayDepositLimit,
uint _currentDayRestDepositLimit)
{
return (
maxDepositDays,
perDay,
startTimestamp,
minimalDeposit,
getCurrentMaximalDeposit(),
bonusReferrer,
minimalDepositForBonusReferrer,
ownerFee,
countInvestors,
totalInvest,
totalPenalty,
// totalSelfInvest,
totalPaid,
getCurrentDayDepositLimit(),
getCurrentDayRestDepositLimit()
);
}
}
{
"compilationTarget": {
"KassaNetwork.sol": "KassaNetwork"
},
"evmVersion": "byzantium",
"libraries": {},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
}
[{"constant":true,"inputs":[{"name":"nDay","type":"uint256"}],"name":"getDayRestDepositLimit","outputs":[{"name":"restLimit","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"confirmLaxmi","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_laxmi","type":"address"}],"name":"changeLaxmi","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentDayDepositLimit","outputs":[{"name":"limit","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"bonusReferrer","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxDepositDays","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"procReturn","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"countInvestors","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentDay","outputs":[{"name":"nday","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxDepositProgressProc","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"progressProcKoef","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"preparePayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"laxmi","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalInvest","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maximalDepositStart","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"getUser","outputs":[{"name":"balance","type":"uint256"},{"name":"timestamp","type":"uint256"},{"name":"paidInteres","type":"uint256"},{"name":"totalInteres","type":"uint256"},{"name":"countReferrals","type":"uint256"},{"name":"countReferralsByLevel","type":"uint256[5]"},{"name":"earnOnReferrals","type":"uint256"},{"name":"paidReferrals","type":"uint256"},{"name":"referrer","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minimalDeposit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"procKoef","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newLaxmi","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTotals","outputs":[{"name":"_maxDepositDays","type":"uint256"},{"name":"_perDay","type":"uint256"},{"name":"_startTimestamp","type":"uint256"},{"name":"_minimalDeposit","type":"uint256"},{"name":"_maximalDeposit","type":"uint256"},{"name":"_bonusReferrer","type":"uint256[5]"},{"name":"_minimalDepositForBonusReferrer","type":"uint256"},{"name":"_ownerFee","type":"uint256"},{"name":"_countInvestors","type":"uint256"},{"name":"_totalInvest","type":"uint256"},{"name":"_totalPenalty","type":"uint256"},{"name":"_totalPaid","type":"uint256"},{"name":"_currentDayDepositLimit","type":"uint256"},{"name":"_currentDayRestDepositLimit","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentDayRestDepositLimit","outputs":[{"name":"restLimit","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"nDay","type":"uint256"}],"name":"getDayDepositLimit","outputs":[{"name":"limit","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"totalSelfInvest","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"perDay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"start","type":"uint256"},{"name":"proc","type":"uint256"},{"name":"nDay","type":"uint256"}],"name":"calcProgress","outputs":[{"name":"res","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"dayLimitStart","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minimalDepositForBonusReferrer","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ownerFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dayLimitProgressProc","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalPenalty","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startTimestamp","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalPaid","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentMaximalDeposit","outputs":[{"name":"maximalDeposit","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"nDay","type":"uint256"}],"name":"getMaximalDeposit","outputs":[{"name":"limit","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"maximalDepositFinish","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"date","type":"uint256"}],"name":"getNDay","outputs":[{"name":"nday","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_addr","type":"address"},{"indexed":false,"name":"_value","type":"uint256"},{"indexed":false,"name":"_refData","type":"bytes"}],"name":"LogInvestment","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_addr","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"_contactBalance","type":"uint256"}],"name":"LogTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_value","type":"uint256"}],"name":"LogSelfInvestment","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_addr","type":"address"},{"indexed":false,"name":"_totalInteres","type":"uint256"},{"indexed":false,"name":"_paidInteres","type":"uint256"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"LogPreparePayment","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_addr","type":"address"},{"indexed":false,"name":"_totalInteres","type":"uint256"},{"indexed":false,"name":"_paidInteres","type":"uint256"}],"name":"LogSkipPreparePayment","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_addr","type":"address"},{"indexed":false,"name":"_totalReferrals","type":"uint256"},{"indexed":false,"name":"_paidReferrals","type":"uint256"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"LogPreparePaymentReferrer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_addr","type":"address"},{"indexed":false,"name":"_totalReferrals","type":"uint256"},{"indexed":false,"name":"_paidReferrals","type":"uint256"}],"name":"LogSkipPreparePaymentReferrer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_addr","type":"address"},{"indexed":false,"name":"_money","type":"uint256"},{"indexed":false,"name":"_totalPenalty","type":"uint256"}],"name":"LogMinimalDepositPayment","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_addr","type":"address"},{"indexed":false,"name":"currentSenderDeposit","type":"uint256"},{"indexed":false,"name":"referrerAdressLength","type":"uint256"},{"indexed":false,"name":"_referrer","type":"address"},{"indexed":false,"name":"currentReferrerDeposit","type":"uint256"},{"indexed":false,"name":"_money","type":"uint256"},{"indexed":false,"name":"_sendBackAmount","type":"uint256"},{"indexed":false,"name":"_totalPenalty","type":"uint256"}],"name":"LogPenaltyPayment","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_addr","type":"address"},{"indexed":false,"name":"_referrer","type":"address"},{"indexed":false,"name":"_money","type":"uint256"},{"indexed":false,"name":"_nDay","type":"uint256"},{"indexed":false,"name":"_restDepositPerDay","type":"uint256"},{"indexed":false,"name":"_badDeposit","type":"uint256"},{"indexed":false,"name":"_sendBackAmount","type":"uint256"},{"indexed":false,"name":"_totalPenalty","type":"uint256"},{"indexed":false,"name":"_willDeposit","type":"uint256"}],"name":"LogExceededRestDepositPerDay","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_addr","type":"address"},{"indexed":false,"name":"_referrer","type":"address"},{"indexed":false,"name":"_money","type":"uint256"},{"indexed":false,"name":"_nDay","type":"uint256"},{"indexed":false,"name":"_restDepositPerDay","type":"uint256"},{"indexed":false,"name":"_realDeposit","type":"uint256"},{"indexed":false,"name":"_usedDepositPerDay","type":"uint256"}],"name":"LogUsedRestDepositPerDay","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_referrer","type":"address"},{"indexed":false,"name":"_money","type":"uint256"},{"indexed":false,"name":"_index","type":"uint256"},{"indexed":false,"name":"_bonusReferrer","type":"uint256"},{"indexed":false,"name":"_amountReferrer","type":"uint256"},{"indexed":false,"name":"_nextReferrer","type":"address"}],"name":"LogCalcBonusReferrer","type":"event"}]