Forsage佛薩奇合約矩陣(Solidity程式語言)系統開發程式碼詳情

I76搭2o72開發9II9發表於2023-03-24

Forsage佛薩奇合約是一種基於以太坊智過程能合約的去中心化自動化收益平臺,旨在透過使用智慧合約技術為使用者提供安全、透明、無法篡改的收益機會。Forsage佛薩奇合約矩陣模式是Forsage佛薩奇合約的一種收益方式。


scssCopy codepragma solidity ^0.8.0;
contract Forsage {
    uint256 constant private MATRIX_SIZE = 3;
    uint256 constant private LEVELS_COUNT = 12;
    uint256 constant private MAX_PERCENT = 333;
    uint256 constant private LEVEL_PERCENT = 30;
    uint256 constant private REINVEST_PERCENT = 100;
    uint256 constant private WITHDRAW_PERCENT = 70;
    
    struct User {
        uint256 id;
        uint256 invested;
        uint256[] matrix;
                address[] referrals;
    }
    
    mapping (address => User) public users;
    mapping (uint256 => address) public idToAddress;
    uint256 public lastUserId = 1;
        address public owner;    
    constructor() {
        owner = msg.sender;
        users[owner].id = lastUserId;
        idToAddress[lastUserId] = owner;
        lastUserId++;
    }
    
    function register(address referral) public payable {
            require(msg.value == 0.05 ether, "Registration fee is 0.05 ether");
                    require(users[msg.sender].id == 0, "User already registered");
                            require(users[referral].id != 0, "Referral does not exist");
        
        users[msg.sender].id = lastUserId;
        idToAddress[lastUserId] = msg.sender;
        lastUserId++;
        
        users[referral].referrals.push(msg.sender);
    }
    
    function invest() public payable {
            require(users[msg.sender].id != 0, "User does not exist");
       require(msg.value > 0, "Investment amount must be greater than 0");
        
        users[msg.sender].invested += msg.value;
        
        if (users[msg.sender].matrix.length == 0) {
            users[msg.sender].matrix.push(1);
        } else {
            uint256 matrixIndex = users[msg.sender].matrix.length - 1;
            uint256 matrixId = users[msg.sender].matrix[matrixIndex];
            
            if (matrixId < MATRIX_SIZE ** LEVELS_COUNT) {
                uint256 position = findMatrixPosition(matrixId);
                uint256 parentId = findMatrixParent(matrixId, position);
                
                if (users[idToAddress[parentId]].referrals.length < MATRIX_SIZE) {
                    users[idToAddress[parentId]].referrals.push(msg.sender);
                    users[msg.sender].matrix.push(parentId * MATRIX_SIZE + users[idToAddress[parentId]].
                    referrals.length);
                } else {
                    users[msg.sender].matrix.push(matrixId + 1);
                }
            } else {
                users[msg.sender].matrix.push(1);
            }
        }
    }
    
    function reinvest(uint256 matrixIndex) public {
            require(users[msg.sender].id != 0, "User does not exist");
     require(matrixIndex < users[msg.sender].matrix.length,


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70028031/viewspace-2941484/,如需轉載,請註明出處,否則將追究法律責任。

相關文章