Ich möchte den zeitgesteuerten Aspekt dieses Crowdsale-Vertrags entfernen und ihn manuell abschließen lassen [geschlossen]

Welche Zeilen entferne ich und womit ersetze ich sie, um dies von einem zeitgesteuerten Crowdsale-Vertrag in einen Vertrag zu ändern, den ich manuell beenden kann?

pragma solidity ^0.4.18;

interface token {
    function transfer(address receiver, uint amount) external;
}

contract Crowdsale {
    address public beneficiary;
    uint public fundingGoal;
    uint public amountRaised;
    uint public deadline;
    uint public price;
    token public tokenReward;
    mapping(address => uint256) public balanceOf;
    bool fundingGoalReached = false;
    bool crowdsaleClosed = false;

    event GoalReached(address recipient, uint totalAmountRaised);
    event FundTransfer(address backer, uint amount, bool isContribution);

    /**
     * Constructor function
     *
     * Setup the owner
     */
    function Crowdsale(
        address ifSuccessfulSendTo,
        uint fundingGoalInEthers,
        uint durationInMinutes,
        uint etherCostOfEachToken,
        address addressOfTokenUsedAsReward
    ) public {
        beneficiary = ifSuccessfulSendTo;
        fundingGoal = fundingGoalInEthers * 1 ether;
        deadline = now + durationInMinutes * 1 minutes;
        price = etherCostOfEachToken * 1 ether;
        tokenReward = token(addressOfTokenUsedAsReward);
    }

    /**
     * Fallback function
     *
     * The function without name is the default function that is called whenever anyone sends funds to a contract
     */
    function () payable public {
        require(!crowdsaleClosed);
        uint amount = msg.value;
        balanceOf[msg.sender] += amount;
        amountRaised += amount;
        tokenReward.transfer(msg.sender, amount / price);
       emit FundTransfer(msg.sender, amount, true);
    }

    modifier afterDeadline() { if (now >= deadline) _; }

    /**
     * Check if goal was reached
     *
     * Checks if the goal or time limit has been reached and ends the campaign
     */
    function checkGoalReached() public afterDeadline {
        if (amountRaised >= fundingGoal){
            fundingGoalReached = true;
            emit GoalReached(beneficiary, amountRaised);
        }
        crowdsaleClosed = true;
    }


    /**
     * Withdraw the funds
     *
     * Checks to see if goal or time limit has been reached, and if so, and the funding goal was reached,
     * sends the entire amount to the beneficiary. If goal was not reached, each contributor can withdraw
     * the amount they contributed.
     */
    function safeWithdrawal() public afterDeadline {
        if (!fundingGoalReached) {
            uint amount = balanceOf[msg.sender];
            balanceOf[msg.sender] = 0;
            if (amount > 0) {
                if (msg.sender.send(amount)) {
                   emit FundTransfer(msg.sender, amount, false);
                } else {
                    balanceOf[msg.sender] = amount;
                }
            }
        }

        if (fundingGoalReached && beneficiary == msg.sender) {
            if (beneficiary.send(amountRaised)) {
               emit FundTransfer(beneficiary, amountRaised, false);
            } else {
                //If we fail to send the funds to beneficiary, unlock funders balance
                fundingGoalReached = false;
            }
        }
    }
}
Was hast du versucht? Was an dem Vertrag verstehst du / verwirrt dich?
Ich habe versucht, alles zu entfernen, was mit Finanzierungszielen, Zeitbeginn usw. zusammenhängt, aber dann hat es nicht funktioniert, also entferne ich offensichtlich zu viel oder nicht genug, und hier verliere ich mich.
Was haben Sie dann hinzugefügt, um die "manuelle Finalisierung" zu aktivieren? Haben Sie sich Open-Source-Crowd-Sale-Verträge wie openzeppelin angeschaut ?
Ich habe es nicht getan, weil es nach dem Entfernen der oben genannten Dinge nicht funktionieren würde, also habe ich es nicht einmal versucht. Ich habe mir Openzeppelin-Verträge angesehen, aber auch hier keinen gefunden, der über eine manuelle Finalisierungsfunktion verfügt, zumindest nicht, die ich sehen konnte. Vielen Dank für Ihre Hilfe und wenn Sie weitere Vorschläge haben, würde ich sie schätzen.
Ich denke, Ihre Frage ist nicht sehr spezifisch. Ihr Smart Contract ist nicht trivial und Ihre Anforderung, eine Funktion zu entfernen, ist kompliziert. Eine gute Antwort impliziert eine fast vollständige Neufassung Ihres Vertrags.

Antworten (1)

Sie können einfach jede Instanz des afterDeadlineModifikators entfernen und der Vertrag ist nicht mehr auf eine Timing-Funktion angewiesen.

Ich rate Ihnen, mehr über den Vertrag zu erfahren und ihn möglicherweise neu zu schreiben, um den bewährten Verfahren zu folgen. Werfen Sie einen Blick auf die Crowdsale-Verträge von OpenZeppelin .