Platzierung von Adressen im Crowdsale-Vertrag

Ich stecke mit einem Crowdsale fest, der morgen bereitgestellt werden muss! Token bereits erstellt und wollen jetzt nur noch Crowdsale machen. Also mehrere Beispiele ausprobiert – ethereum.org, Zeppelin, Github und alle, aber sie scheinen keine wirkliche Hilfe zu geben, wo sie für die Adresssyntax von 3 Adresstypen benötigt wird Token-Adresse, Vertragsadresse und Empfängeradresse von eth-Spenden. Insbesondere möchte ich nur wissen, WO im Code (oder Compiler) meine Token-Adresse eingefügt werden soll und WO die Vertragsadresse mit Solidity Compiler und wo für die Empfängeradresse platziert werden soll.

Zweitens glaube ich, dass ich durch die letzten beiden Adressen verwirrt bin. Werden diese Adressen generiert oder muss ich sie manuell eingeben? Hier ist ein Link zu der Münze, die ich forken möchte. Ich möchte es so einfach wie möglich halten.

Vielen Dank im Voraus

pragma solidity ^0.4.13;

contract ECToken {
    function balanceOf(address _owner) constant returns (uint256);
    function transfer(address _to, uint256 _value) returns (bool);
}

library SafeMath {
  function mul(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a / b;
    return c;
  }

  function sub(uint256 a, uint256 b) internal constant returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

interface Token { 
    function transfer(address _to, uint256 _value) returns (bool);
    function totalSupply() constant returns (uint256 supply);
    function balanceOf(address _owner) constant returns (uint256 balance);
}

contract TokenCrowdsale {

    using SafeMath for uint256;

    // Crowdsale details
    address public beneficiary;      //<---? Do I place a key string here 0x..... ?             
    address public creator;          //<---? Do I place a key string here 0x..... ?        
    address public confirmedBy;      //<---? Do I place a key string here 0x..... ?          
    uint256 public maxSupply = 15000;    
    bool public purchasingAllowed = false;
    uint256 public totalSupplied = 0;

    // Eth to token rate
    uint256 public rate = 1200;

    enum Stages {
        PreSale, //0
        InProgress, //1
        Ended, //2 
        Withdrawn //3
    }

    Stages public stage = Stages.PreSale;

    // deployed token
    Token public deplToken;

    // Invested balances
    mapping (address => uint256) balances;

    /**
    * Throw if at stage other than current stage
    * 
    * @param _stage expected stage to test for
    */
    modifier atStage(Stages _stage) {
        require(stage == _stage);
        _;
    }

    /**
    * Throw if sender is not beneficiary
    */
    modifier onlyBeneficiary() {
        require(beneficiary == msg.sender);
        _;
    }

    /** 
    * Get balance of `_investor` 
    * 
    * @param _investor The address from which the balance will be retrieved
    * @return The balance
    */
    function balanceOf(address _investor) constant returns (uint256 balance) {
        return balances[_investor];
    }


    function enablePurchasing() onlyBeneficiary atStage(Stages.PreSale) {
        purchasingAllowed = true;
        stage = Stages.InProgress;
    }

    function disablePurchasing() onlyBeneficiary atStage(Stages.InProgress) {
        purchasingAllowed = false;
        stage = Stages.Ended;
    }

    function enableNewPurchasing() onlyBeneficiary atStage(Stages.Withdrawn) {
        purchasingAllowed = true;
        stage = Stages.InProgress;
    }

    /**
    * Constructor
    *
    * @param _tokenAddress The address of the token contact
    * @param _beneficiary  The address of the wallet for the beneficiary  
    * @param _creator      The address of the wallet for the creator 
    */
    // Do I uncomment and define these parameters above in constructor area???

    function TokenCrowdsale(address _tokenAddress, address _beneficiary, address _creator) {
        deplToken = Token(_tokenAddress);
        beneficiary = _beneficiary;
        creator = _creator;
    }

    /**
    * For testing purposes
    *
    * @return The beneficiary address
    */
    function confirmBeneficiary() onlyBeneficiary {
        confirmedBy = msg.sender;
    }


    event sendTokens(address indexed to, uint256 value);


    /**
    * Transfer raised amount to the beneficiary address
    */
    function withdraw() onlyBeneficiary atStage(Stages.Ended) {
        uint256 ethBalance = this.balance;
        beneficiary.transfer(ethBalance);
        stage = Stages.Withdrawn;
    }

    /**
    * Receives Eth and issue tokens to the sender
    */
    function () payable atStage(Stages.InProgress) {

        require(purchasingAllowed);
        if (msg.value == 0) { return; }
        uint256 weiAmount = msg.value;
        address investor = msg.sender;
        uint256 received = weiAmount.div(10e7);
        uint256 tokens = (received).mul(rate);
        }

        sendTokens(msg.sender, tokens);
        deplToken.transfer(investor, tokens);
        totalSupplied = (totalSupplied).add(tokens);

        if (totalSupplied >= maxSupply) {
            purchasingAllowed = false;
            stage = Stages.Ended;
        }

    }


    function tokensAvailable() constant returns (uint256) {
        return deplToken.balanceOf(this);
    }


    function withdrawForeignTokens(address _tokenContract) onlyBeneficiary public returns (bool) {
        ECToken token = ECToken(_tokenContract);
        uint256 amount = token.balanceOf(address(this));
        return token.transfer(beneficiary, amount);
    }
}

Antworten (1)

HINWEIS : Ich habe versucht, Ihre Fragen unten zu beantworten, aber es hört sich so an, als wären Sie neu im Lesen und Schreiben von Solidity-Code. Ich würde dringend davor warnen, einen Token-Verkauf durchzuführen, ohne den Vertrag zu verstehen, den Sie bereitstellen.


In diesem Vertrag werden drei Adressen als Konstruktorparameter übergeben, sodass Sie diese zum Zeitpunkt der Bereitstellung des Vertrags bereitstellen. (Wie Sie die Konstruktorparameter angeben, hängt davon ab, welches Tool Sie verwenden.)

Das tokenAddressist die Adresse des Tokens, das Sie verkaufen (der von Ihnen bereitgestellte Token-Vertrag).

Das beneficiaryist die Adresse des Kontos, das den Ether erhalten wird.

Die creatorAdresse scheint unbenutzt zu sein, also spielt es keine Rolle, was Sie dort eingeben. Sie haben auch einen Kommentar hinzugefügt confirmedBy. Auch das scheint in sinnvoller Weise ungenutzt zu sein.

Danke, ich verwende den Solidity-Compiler und ja, ich bin relativ neu, habe aber vor ein paar Monaten ein Token bereitgestellt und dachte, der Crowdsale-Code wäre auch ein Kinderspiel, aber es ist 11. Stunde und schwitzende Kugeln. Es ist sowieso eine Community-Gruppe ... nichts Kritisches. Nur um das klarzustellen, die tokenAddress ist nicht die gleiche wie die _tokenAddress innerhalb des Konstruktorbereichs. Beachten Sie, dass ich auch einen Kommentar im Konstruktorbereich habe, der fragt, ob diese Variablen manipuliert werden. Wie wird das an den Konstruktor übergeben?
Entschuldigung, sollte sein _tokenAddress.
Ich bin hier immer noch ahnungslos. Ich bekomme die Definitionen der Variablen, bin mir aber immer noch nicht sicher, WO ich die tatsächlichen Adressen platzieren soll. Ich benutze Solidity Online Compiler, wenn jemand mit diesem Typen vertraut ist. Es ist ein 2-minütiges Kopieren / Einfügen des oben Gesagten, um es für diejenigen herauszufinden, die mit dem Solidity-Compiler vertraut sind.
Das sind Parameter, die Sie an den Konstruktor übergeben. Sie würden sie zum Zeitpunkt der Bereitstellung des Vertrags bereitstellen, nicht während der Kompilierung.