Forsage佛萨奇2.0和魔豹联盟2.0是一种采用矩阵模式,让用户可以通过参与质押挖矿获取收益。
以下是原创代码示例:
solidityCopy codepragma solidity ^0.8.0;
User memory newUser = User({
id: userId,
referrerId: referrerId,
partnersCount: 0,
balance: 0
});
users[userAddress] = newUser;
idToAddress[userId] = userAddress;
mapping(address => mapping(uint => address)) public downline;
mapping(address => uint[]) public userMatrixIds;
uint public lastUserId = 2;
address public owner;
event Registration(address indexed user, address indexed referrer, uint indexed userId, uint referrerId);
event NewUserPlace(address indexed user, address indexed referrer, uint matrix, uint place,
uint indexed userId, uint referrerId);
users[referrerAddress].partnersCount++;
userMatrixIds[userAddress] = new uint[](1);
userMatrixIds[userAddress][0] = 1;
downline[referrerAddress][users[referrerAddress].partnersCount] = userAddress;
uint constant public PERCENTAGE = 50;
mapping(address => User) public users;
mapping(uint => address) public idToAddress;
event Upgrade(address indexed user, uint indexed fromMatrix, uint indexed toMatrix);
payForMatrix(1, userAddress);
emit Registration(userAddress, referrerAddress, userId, referrerId);
}
function payForMatrix(uint matrix, address userAddress) private {
uint entryCost = matrix * ENTRY_FEE;
address referrerAddress = idToAddress[users[userAddress].referrerId];
uint referrerIncome = entryCost * PERCENTAGE / 100;
users[referrerAddress].balance += referrerIncome;
users[userAddress].balance += entryCost - referrerIncome;
emit BalanceUpdate(referrerAddress, users[referrerAddress].balance)
contract Forsage {
struct User {
uint id;
uint referrerId;
uint partnersCount;
uint balance;
}
uint constant public ENTRY_FEE = 0.05 ether;
event BalanceUpdate(address indexed user, uint balance);
constructor(address _owner) {
owner = _owner;
users[owner].id = 1;
idToAddress[1] = owner;
}
function registrationExt(address referrerAddress) external payable {
registration(msg.sender, referrerAddress);
}
function registration(address userAddress, address referrerAddress) private {
require(msg.value == ENTRY_FEE, "Incorrect entry fee");
require(users[userAddress].id == 0, "User already registered");
require(users[referrerAddress].id != 0, "Referrer does not exist");
uint referrerId = users[referrerAddress].id;
uint userId = lastUserId;
lastUserId++;
;
emit BalanceUpdate(userAddress, users[userAddress].balance