Legen Sie Ideen für Mindestkaufbedingungen fest :)

Ich bin ein ziemlicher Anfänger und versuche, mich mit Remix-Übungsbauverträgen zurechtzufinden.

Ich möchte einen Mindestbetrag für den Gesamtkauf festlegen (Anzahl Tokens). Ich verwende " https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/crowdsale/Crowdsale.sol " als Ausgangspunkt.

Jetzt möchte ich ein festgelegtes Minimum verlangen, um einen Bonus wie zu erhalten

// from BokkyPooBah MyToken example:

if (now <= BonusAdded) {   
            tokens = msg.value * 4500;
        } else {
            tokens = msg.value * 3000;
        }

Schätze jeden Rat

Was genau ist Ihr Problem?
wie man eine Mindestinvestition festlegt, die erforderlich ist, um den oben genannten Bonus zu erhalten.
Minimale Investition bedeutet? Mindestmenge an Token? Äther?
Mindestens mit Ether gekaufte Token, um den Bonus zu erhalten
EX. Sie müssen mindestens 30000 Tokens @ 3000\Eth kaufen, um einen Bonus von 50 % zu erhalten.

Antworten (1)

Überprüfen Sie, ob dies hilft

uint public minLimitToGetBonus = 1000 * (10 ** decimals)
function getToken() public {
    if(balances[msg.sender] > minLimitToGetBonus){
        // give bonus
    }
    else{
        // process normally
    }
}

Bearbeiten 1: Gemäß Diskussion in den Kommentaren:

contract BunusCoin{
    uint minLimitToGetBonus = 1000;
    bool InTime = true;
    uint rate = 3000;

    mapping(address => uint ) public balances;

    function NoMoreHoops() public payable{
        require(InTime);
        uint tokensPurchasing = msg.value * rate ; // no of tokens purchasing
        //  if you want to consider prev balances as well. Uncomment below line
        // totalTokens = balances[msg.sender].safeAdd(tokensPurchasing);
        // else
        uint totalTokens = tokensPurchasing ; 
        // check eligibility for Bonus
        if(totalTokens > minLimitToGetBonus){
             tokensPurchasing = tokensPurchasing .safeMul(1500).safeDiv(100); // 50% bonus
        }
        balances[msg.sender] = safeAdd(balances[msg.sender], tokensPurchasing); 
        _totalSupply = safeAdd(_totalSupply, tokensPurchasing); 
        Transfer(address(0), msg.sender, tokensPurchasing); 
        owner.transfer(msg.value);
    }
}
Danke, ich kann Ihre Idee sehen und werde damit spielen. Ich dachte, ich muss dieser Funktion im Solidity-Crowdsale-Vertrag eine Bedingung hinzufügen. ´ function _updatePurchasingState(address _beneficiary, uint256 _weiAmount) internal {´ Danke ps, wie bekomme ich diese Back-Ticks um Code lol
Es freut mich, dass ich Ihnen helfen konnte. Wenn Sie mehrere Rabattstrukturen haben, unterbrechen Sie die Rabattberechnung besser in einer anderen Funktion.
Ist es ein Durcheinander?function NoMoreHoops () public payable { require minLimitToGetBonus <= 1000; require InTime = true; uint tokens; if ( true) { tokens = msg.value * 4500; \\ +50% during first week if buying min 1000 } else { tokens = msg.value * 3000; \\ No Bonus sry } } balances[msg.sender] = safeAdd(balances[msg.sender], tokens); _totalSupply = safeAdd(_totalSupply, tokens); Transfer(address(0), msg.sender, tokens); owner.transfer(msg.value);
warum es gibt if (true). Der Code führt diese Bedingung immer aus und wechselt nie zu einer anderen. Überprüfen Sie die Bearbeitung in der Antwort.
@ Prashant <br/> was ist mit diesem Ansatz? Vorteile, Nachteile mit vielen Wenns?. <br/> ` function getRate ()view return (unit){ if (now > (startTime(1 week))){return 1000} if (jetzt > (startTime (2 wochen))){return 500} ` <br /> thx auf wahre Frage, ich lerne viel
Es hängt ganz von Ihrem Unternehmen ab, ob Sie einen zeitbasierten Bonus oder einen wertbasierten Bonus geben möchten. Beides ist möglich. Es gibt keine besonderen Vor- und Nachteile. Geben Sie einfach Ihren Code richtig ein. Verwenden von if und else if anstelle von if only. Und wenn Sie die Antwort auf Ihre Frage finden, akzeptieren Sie die Lösung.