Crowdsale-Vertrag und sichere Auszahlungen

Gemäß Crowdsale-Vertrag unter https://www.ethereum.org/crowdsale werden Token auf ein Benutzerkonto übertragen, wenn "function () payable" aufgerufen wird, indem die externe Funktion tokenReward.transfer (msg.sender, Betrag / Preis) verwendet wird. Wenn Benutzer jedoch ihre Ether bei safeWithdrawal() beanspruchen, weil fundingGoal nicht erreicht wurde, gibt es keinen Aufruf an die externe Funktion tokenReward.transfer(), daher scheint es mir, dass die gekauften Token nicht ordnungsgemäß abgehoben werden, obwohl Ether gesendet wird der Benutzer.

Hat jemand diesen Code verwendet, um Token zu verkaufen und als Benutzer eine Auszahlung durchzuführen? Verringert sich das Token-Guthaben beim Token-Vertrag ordnungsgemäß, wenn safeWithdrawal aufgerufen wird? Wie ist das möglich?

Ref.:

Pre-ico- und ico-Crowdsale-Verträge

ICO-Token kaufen?

Kauf und Verkauf meiner Token

Im Crowdsale-Beispiel verstehe ich nicht, warum Ethereum Alarm Clock verwendet wird. Hat jemand Lust zu erklären?

Antworten (1)

Hat jemand diesen Code verwendet, um Token zu verkaufen und als Benutzer eine Auszahlung durchzuführen?

Meiner Meinung nach ist dieser Code eher eine Skizze eines tatsächlichen ICO und nicht als sichere und ordnungsgemäße ICO-Referenzimplementierung gedacht. Es hat mindestens ein unten beschriebenes Problem. Außerdem ist mir niemand bekannt, der genau diesen Code verwendet, meistens scheint die Obergrenze (Cap) relevanter zu sein als die hier implementierte Untergrenze.

Verringert sich das Token-Guthaben beim Token-Vertrag ordnungsgemäß, wenn safeWithdrawal aufgerufen wird? Wie ist das möglich?

Dieser Vertrag verfolgt die gezahlten Beiträge (in Wei) zusätzlich zum separaten Token-Vertrag (siehe unten für einige Probleme bezüglich dieser Implementierung). Innerhalb der safeWithdrawalFunktion haben Sie die folgende Zeile, die dafür sorgt, dass der gezahlte Beitrag zurückgesetzt wird, wenn das Finanzierungslimit nicht erreicht wurde:

balanceOf[msg.sender] = 0;

Dieser Token-Verkaufsvertrag zielt darauf ab, mit jedem Token zu arbeiten. Daher müsste die „Vernichtung“ der erstatteten Token von Fall zu Fall in diesem Token-Vertrag geregelt werden. Konkret müssten Sie als Nutzer zunächst die approveFunktion eines Standard-Tokens aufrufen und nun könnte der Contract hier versuchen, die Tokens zu verbrennen, indem er sie an eine unverbrauchbare Adresse (z. B. 0x000...) schickt oder an sich selbst schickt.

Ihr Punkt, dass bei der Rückerstattung von Ether Token nicht zerstört/erstattet werden, ist richtig. Man könnte jedoch argumentieren, dass diese Token einfach bedeutungslos sind, wenn alle Ether zurückerstattet wurden. Man könnte sogar noch weiter gehen und sagen, dass man tatsächlich Gas für jeden einzelnen Investor spart, der seinen Ether zurückerstattet haben möchte – der Token ist ohnehin bedeutungslos, wenn das Projekt keinen Ether bekommen hat, also warum Token-Guthaben umverteilen?

Jetzt für

Das Thema:

Dieser Crowd-Sale-Vertrag überschreibt beigesteuerte Ether pro Adresse, anstatt das Guthaben zu erhöhen:

uint amount = msg.value;
balanceOf[msg.sender] = amount;

Dies ist ein Problem für Anleger, die mehrere Transaktionen senden und dann im Erstattungszeitraum Geld verlieren würden. Tatsächlich wären alle Ether außer denen, die bei der letzten Transaktion gesendet wurden, für immer im Smart Contract unentbehrlich.

Ich würde daher vorschlagen

Eine Lösung:

uint amount = msg.value;
balanceOf[msg.sender] += amount;

Natürlich wäre es eine gute Praxis, eine Bibliothek wie SafeMath zu verwenden, anstatt ein einfaches Inkrement durchzuführen.

Jetzt müssen Sie sich nicht mehr darum kümmern, Ether zurückzuerstatten oder zu vernichten, jeder Investor kann seinen eingebrachten Betrag jederzeit einfach zurückerhalten, wenn das Finanzierungslimit nicht erreicht wurde. Natürlich sollte sich jeder Token-Inhaber bewusst sein, dass er in diesem Fall einfach an einem weiteren völlig nutzlosen Ethereum-Token beteiligt ist .