Dapp泰山眾籌互助矩陣系統技術開發原理分析

I76搭2o72建9II9發表於2023-04-20

Dapp泰山眾籌互助矩陣隨著區塊鏈技術的發展,越來越多的Dapp應運而生。泰山眾籌互助矩陣是其中一種比較常見的Dapp,

它的特點是參與者可以透過互助來獲取收益。本文將會介紹泰山眾籌互助矩陣的實現原理和程式設計程式碼。


實現原理


泰山眾籌互助矩陣的實現原理基於智慧合約技術。在這個Dapp中,有一個矩陣,每個矩陣中有若干個位置,每個位置需要一

定數量的代幣進行啟用。當一個位置被啟用後,該位置會開始接收其他人的投入,並依次將這些投入分配給該位置下方的所有

位置,以此實現利益分配。當一個位置的收益達到一定數量時,該位置會自動退出,並釋放出一定比例的收益給矩陣中其他位置。


下面是泰山眾籌互助矩陣的程式設計程式碼示例:

scssCopy codepragma solidity ^0.4.25;
contract TaiShanCrowdFunding {
    mapping (address => uint) public balances;
    mapping (address => uint) public joinedBlock;
    uint public totalParticipants;
    uint public totalInvested;
    uint public activationAmount = 1 ether;
    uint public maxDepth = 6;
    event NewParticipant(address indexed addr);
    event NewInvestment(address indexed addr, uint amount);    function() public payable {
        if (msg.value == 0) {            withdraw();
            return;
        }
        if (balances[msg.sender] == 0) {
            joinedBlock[msg.sender] = block.number;
            totalParticipants++;
            emit NewParticipant(msg.sender);
        }
        balances[msg.sender] += msg.value;
        totalInvested += msg.value;
        emit NewInvestment(msg.sender, msg.value);
    }
    function withdraw() public {        require(balances[msg.sender] > 0);
        uint payout = getMyDividends();
        balances[msg.sender] -= payout;
        msg.sender.transfer(payout);
    }
    function getMyDividends() public view returns (uint) {
        uint dividends = 0;
        uint investmentBlock = joinedBlock[msg.sender];
        for (uint i = 0; i < maxDepth; i++) {
            if (block.number >= investmentBlock) {
                uint depthAmount = getDepthAmount(i + 1);
                uint myInvestment = getMyInvestmentInDepth(i + 1);
                if (myInvestment > 0) {
                    uint profit = depthAmount * (block.number - investmentBlock) / 86400 / 10000;
                    uint maxProfit = depthAmount / 10;
                    if (profit > maxProfit) {
                        profit = maxProfit;
                    }
                    dividends += myInvestment * profit / 100;
                }
            }
        }
        return dividends;
    }
    function getDepthAmount(uint depth) public view returns (uint) {
        return totalInvested


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

相關文章