EtherChain智能合约源码分析、Solidity学习

项目名: EtherChain

玩法: 通过将ETH存入合约地址,您将被激活并获得合约中310%的ETH返还,分发将基于智能合约算法进行。

合约地址: 0xfa85069e3d1ca1b09945cf11d2365386b1e4430a

浏览器地址: https://etherscan.io/address/0xfa85069e3d1ca1b09945cf11d2365386b1e4430a

智能合约源码: https://etherscan.io/address/0xfa85069e3d1ca1b09945cf11d2365386b1e4430a#code

当前合约余额: 18,292.077997768458695804 Ether

游戏规则

至少存入0.1 ETH或0.1ETH的倍数到智能合约,您现在有资格获得310%的投资回报(例如:投入10 ETH, 回报310 ETH),在1至310天内将您的资金增加三倍。

累积310%将以4种方式(1种被动和3种主动)返回310%的投资回报率

通过4种方式中的任何一种,当收到310%的款项时,必须进行新的存款以继续通过4种方式中的任何一种来赚钱/接收

1、每日1%的投资回报率(最多310天),100%被动。

2、10%直接推荐奖金分享和发展社区基金。

3、高达135%的匹配合作伙伴赠金,每日ROI收入

4、每日最高4名推荐人,享受所有存款的5%

接佣金

直推合作伙伴进行投资或重新投资时授予推荐人,投资金额的10%

投资回报率匹配奖金

每日ROI匹配奖金是基于您合作伙伴的每日存款回报,并在任何合作伙伴收到和提取每日收入时获得奖励。在这里我们

有15个等级的匹配奖励。

直推1级30% ,2-5级10%,6-10级8%,11-15级5% ,每个直接合作伙伴激活1个新级别,最多15个级别

EtherChain 核心数据结构体

struct User { //会员结构体

        uint256 cycle;  //投资循环次数

        address upline;  //推荐地址

        uint256 referrals;  //直推人数

        uint256 payouts; //已产生收益

        uint256 direct_bonus;  //直推收益

        uint256 pool_bonus;  //奖池收益

        uint256 match_bonus;  //匹配收益

        uint256 deposit_amount;  //充值数量

        uint256 deposit_payouts;  //充值收益

        uint40 deposit_time;  //充值时间

        uint256 total_deposits;  //累计充值

        uint256 total_payouts;  //累计产生收益

        uint256 total_structure;  //累计产生收益

    }    mapping(address => User) public users;  地址用户结构体映射

    uint256[] public cycles;                        // ether  循环投资最大投资数量

    uint8[] public ref_bonuses;                    // 1 => 1% // 匹配奖励,等级对应比例

    uint8[] public pool_bonuses;                    // 1 => 1%  //奖池奖励,等级对应比例

    uint40 public pool_last_draw = uint40(block.timestamp);  //最后提现时间

    uint256 public pool_cycle;  //池当前轮

    uint256 public pool_balance;  //池余额 

    mapping(uint256 => mapping(address => uint256)) public pool_users_refs_deposits_sum;      //用户投资数量

    mapping(uint8 => address) public pool_top;    //当前投资最多地址

    uint256 public total_withdraw;   

    event Upline(address indexed addr, address indexed upline);  //推荐人事件

    event NewDeposit(address indexed addr, uint256 amount);  //充值事件

    event DirectPayout(address indexed addr, address indexed from, uint256 amount);  //直推事件

    event MatchPayout(address indexed addr, address indexed from, uint256 amount);  //匹配事件

    event PoolPayout(address indexed addr, uint256 amount);  //池支付事件

    event Withdraw(address indexed addr, uint256 amount);  //提现事件

    event LimitReached(address indexed addr, uint256 amount);  //到达收益极限事件


//充值加入游戏

  function deposit(address _upline) payable external whenNotPaused {        _setUpline(msg.sender, _upline);  //设置上线

        _deposit(msg.sender, msg.value);  //充值

    }  //设置上线 、设置团队人数

  function _setUpline(address _addr, address _upline) private {        if(users[_addr].upline == address(0) && _upline != _addr && (users[_upline].deposit_time > 0 || _upline == owner())) {            users[_addr].upline = _upline;  //设置上线

            users[_upline].referrals++;    //设置直推人数 +1

            emit Upline(_addr, _upline);            for(uint8 i = 0; i < ref_bonuses.length; i++) {                if(_upline == address(0)) break;                users[_upline].total_structure++;  //设置团队人数 +1

                _upline = users[_upline].upline;            }        }    }    //充值

    function _deposit(address _addr, uint256 _amount) private {        require(users[_addr].upline != address(0) || _addr == owner(), "No upline");  //推荐地址不能为空或推荐人是合约所有者

        if(users[_addr].deposit_time > 0) {  //最近一轮充值时间

            users[_addr].cycle++;      //循环次数


            require(users[_addr].payouts >= this.maxPayoutOf(users[_addr].deposit_amount), "Deposit already exists");  //提现收益数量大于本轮最大可获取收益

            require(_amount >= users[_addr].deposit_amount && _amount <= cycles[users[_addr].cycle > cycles.length - 1 ? cycles.length - 1 : users[_addr].cycle], "Bad amount");  //投资数量要大于上轮同时要少于本轮最大可投数量

        }        else require(_amount >= 0.1 ether && _amount <= cycles[0], "Bad amount");  //投资数量不有少于 0.1 ether 或大于本轮最大可投数量


        users[_addr].payouts = 0;        users[_addr].deposit_amount = _amount;  //充值数量

        users[_addr].deposit_payouts = 0;        users[_addr].deposit_time = uint40(block.timestamp);  //充值时间

        users[_addr].total_deposits += _amount;  //累计投资


        emit NewDeposit(_addr, _amount);        if(users[_addr].upline != address(0)) {  //如果上线不是空

            users[users[_addr].upline].direct_bonus += _amount / 10;    //直推10%

            emit DirectPayout(users[_addr].upline, _addr, _amount / 10);

        }        _pollDeposits(_addr, _amount);        if(pool_last_draw + 1 days < block.timestamp) {  //奖励池

            _drawPool();        }        payable(owner()).transfer(_amount / 100);  //合约开发者1%收益

    }

//匹配奖励发放

function _refPayout(address _addr, uint256 _amount) private {        address up = users[_addr].upline;  //直推

        for(uint8 i = 0; i < ref_bonuses.length; i++) {            if(up == address(0)) break;  //如果没有直推退出


            if(users[up].referrals >= i + 1) {  //判断直推人数是否能熟悉等级奖励

                uint256 bonus = _amount * ref_bonuses[i] / 100;  //计算资金


                users[up].match_bonus += bonus;  //累计匹配奖励

                emit MatchPayout(up, _addr, bonus);            }            up = users[up].upline;  //查找上一线

        }    }

//发放最佳推荐人奖励

    function _drawPool() private {        pool_last_draw = uint40(block.timestamp);  //当前区块链时间

        pool_cycle++;    //轮数

        uint256 draw_amount = pool_balance / 10;    //奖励池的10%

        for(uint8 i = 0; i < pool_bonuses.length; i++) {    //奖励池

            if(pool_top[i] == address(0)) break;  //如果地址不存在

            uint256 win = draw_amount * pool_bonuses[i] / 100;  //奖励池的10%按比例分

            users[pool_top[i]].pool_bonus += win;  //累加奖励池数量

            pool_balance -= win;  //奖励数量减少

            emit PoolPayout(pool_top[i], win);        }       

        for(uint8 i = 0; i < pool_bonuses.length; i++) {            pool_top[i] = address(0);  //清空最佳推荐人

        }    }


//会员提现

  function withdraw() external whenNotPaused {        (uint256 to_payout, uint256 max_payout) = this.payoutOf(msg.sender);    //投资可获取最大收益


        require(users[msg.sender].payouts < max_payout, "Full payouts");  //超过投资可获取最大收益

        // Deposit payout

        if(to_payout > 0) {  //当前可获取收益大于0 

            if(users[msg.sender].payouts + to_payout > max_payout) {  累计收益加当前可获取收益 大于最大可获收益

                to_payout = max_payout - users[msg.sender].payouts;  最大收益 - 已经获取收益 = 本次还可以领取收益

            }            users[msg.sender].deposit_payouts += to_payout;    //充值收益

            users[msg.sender].payouts += to_payout;  //累计收益

            _refPayout(msg.sender, to_payout);  //发放匹配奖励

        }       

        // Direct payout  //直推收益

        if(users[msg.sender].payouts < max_payout && users[msg.sender].direct_bonus > 0) {            uint256 direct_bonus = users[msg.sender].direct_bonus;            if(users[msg.sender].payouts + direct_bonus > max_payout) {                direct_bonus = max_payout - users[msg.sender].payouts;            }            users[msg.sender].direct_bonus -= direct_bonus;            users[msg.sender].payouts += direct_bonus;            to_payout += direct_bonus;        }       

        // Pool payout  //最佳推荐人

        if(users[msg.sender].payouts < max_payout && users[msg.sender].pool_bonus > 0) {            uint256 pool_bonus = users[msg.sender].pool_bonus;            if(users[msg.sender].payouts + pool_bonus > max_payout) {                pool_bonus = max_payout - users[msg.sender].payouts;            }            users[msg.sender].pool_bonus -= pool_bonus;            users[msg.sender].payouts += pool_bonus;            to_payout += pool_bonus;        }        // Match payout  //匹配奖励

        if(users[msg.sender].payouts < max_payout && users[msg.sender].match_bonus > 0) {            uint256 match_bonus = users[msg.sender].match_bonus;            if(users[msg.sender].payouts + match_bonus > max_payout) {                match_bonus = max_payout - users[msg.sender].payouts;            }            users[msg.sender].match_bonus -= match_bonus;            users[msg.sender].payouts += match_bonus;            to_payout += match_bonus;        }        require(to_payout > 0, "Zero payout");       

        users[msg.sender].total_payouts += to_payout;  //累计提现

        total_withdraw += to_payout;  //系统累计提现

        payable(msg.sender).transfer(to_payout);  //转帐

        emit Withdraw(msg.sender, to_payout);

        if(users[msg.sender].payouts >= max_payout) {  //超过可获取最大收益

            emit LimitReached(msg.sender, users[msg.sender].payouts);        }    }

以太分析是覆盖数字货币相关日常工作的网络社区,这里有权威的分析师提供ETH 、TRX、EOS、BSV等主链智能合约游戏分析资讯,也提供各种智能合约游戏仿盘开发,游戏制度分析、游戏安全等交流平台

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容