
Hallo allerseits! In diesem Artikel werde ich Ihnen erklären, wie Sie in 5 Minuten einen intelligenten Geldsammelvertrag für Ihr ICO auf Ethereum und mehrere Befehle im Terminal abschließen können. Mit diesem Aufsatz sparen Sie möglicherweise Zehntausende US-Dollar, da jeder Programmierer - und nicht auch ein Programmierer - einen geprüften und sicheren Smart-Vertrag abschließen kann (anstatt 15.000 bis 75.000 US-Dollar für die Entwicklung zu zahlen). Kurz gesagt, Sie können Geld an diesen intelligenten Vertrag senden und ERC20-Token dafür erhalten. Man kann sagen, dass dieser Artikel eine Sammlung aller Erfahrungen ist, die ich durch die Einführung eines ICO für mein Projekt gesammelt habe.
Im Internet sind diese bereits voll von Artikeln über intelligente Verträge, aber sobald Sie anfangen, einen zu schreiben, stoßen Sie auf die Tatsache, dass die Informationen überall wiederholt werden und es einfach keine Tutorials gibt, wie Sie Ihren ERC20 zum Narren halten können, oder sie sind bereits veraltet. Übrigens, damit dieser Artikel relevant bleibt, werde ich versuchen, mögliche Stellen anzugeben, an denen er veraltet sein könnte (und wie man ihn behebt). Lass uns gehen!
Festigkeit
Dies ist der Name der Hauptsprache, die das Kefir-Team entwickelt hat, um intelligente Verträge abzuschließen. Wenn Sie ein Programmierer sind, gehen Sie einfach die
Dokumentation der Sprache durch - es ist unanständig einfach. Übrigens haben sie es einfach gemacht, so dass es schwieriger war, einen Fehler beim Schreiben eines intelligenten Vertrags zu machen. So kann
absolut jeder Programmierer, zumindest auf der Junior-Ebene, es herausfinden.
Es macht absolut keinen Sinn, Entwicklern, die sich mit Solidität auskennen, riesige Geldbeträge zu zahlen - es wird eine Größenordnung billiger sein, einen vorhandenen Entwickler auszubilden.
Intelligente Verträge
... und alles was Sie über sie wissen müssen. Überspringen Sie diesen Abschnitt, wenn Sie kein Programmierer sind. Ein intelligenter Vertrag ist ein Stück Code. Im Prinzip ist dies eine Klasse in Solidität (OOP, ja), die zwei Arten von Funktionen hat: Zustandsänderung und Nicht-Zustandsänderung. Nun, um Funktionen in einem intelligenten Vertrag auszuführen, indem Sie nur Kefir an ihn senden, müssen Sie diese Funktion als
payable
markieren.
State ist ein Data Warehouse, Blockchain, EPT. Verträge können die Blockchain (Status, Speicher) ändern. Um die Blockchain zu ändern, müssen Sie den Bergleuten Kefir zahlen. Wie sie Kefir teilen, wird im Rahmen dieses Artikels nicht analysiert. Die Zahlung an Bergleute für die Ausführung des Codes zur Änderung des Status wird als Gas bezeichnet. Wenn jemand von außerhalb Kefir an die Adresse eines Smart-Vertrags wirft und eine Funktion
payable
, die als
payable
aber nicht als
Constant
,
View
oder
Pure
, wird der für die Zahlung an Bergleute erforderliche Kefir-Betrag von dem gesendeten Betrag abgezogen. In ERC20-Token sind dies normalerweise Funktionen, die entweder den Token-Absender für Kefir ausgeben oder Token von einem Token-Inhaber auf einen anderen übertragen.
Und wenn Sie eine Funktion im Vertrag mit den Worten "
Constant
oder "
View
(sie bedeuten dasselbe, Sie können nur den Status lesen) oder "
Pure
(dasselbe, Sie lesen nicht einmal den Status) markieren, müssen Sie nicht einmal Kefir für diese Funktion ausgeben! Ich werde noch mehr sagen, dass diese Funktionen nicht durch Transaktionen aufgerufen werden müssen - schließlich kann jeder Joghurt-Client sie theoretisch zu Hause ausführen - und niemand muss mehr darüber Bescheid wissen (schließlich wird nichts in die Blockchain geschrieben).
Bei der Solidität gibt es zwei wichtige Dinge: Mehrfachvererbung und Funktionsmodifikatoren. Sie müssen auch über sie wissen.
Die ersten - nur Verträge können gleichzeitig von mehreren Klassen wie
TimedCrowdsale
,
CappedCrowdsale
,
MintedCrowdsale
,
Ownable
- gleichzeitig werden die Funktionen der Konstruktoren auch nacheinander gestartet - aber ich werde dies später als Beispiel erläutern.
Die zweite ist die Möglichkeit, Funktionen zu erstellen, die dann in andere Funktionen eingefügt werden. Es ist wie eine einfache Kapselung, nur ein bisschen flexibler - es ist buchstäblich
eine Funktionsvorlage. Wenn Sie einen Modifikator erstellen, schreiben Sie das Sonderzeichen
_
wobei Sie den Code einer Funktion mit diesem Modifikator meinen. Das heißt, Modifikatoren sind nicht nur gekapselte Funktionen, die einen Wert zurückgeben. Dies ist eine Funktionsvorlage, wenn Code aus einem Modifikator mit diesem Modifikator buchstäblich in eine Funktion eingefügt wird.
Lass uns weiter üben.
Kochumgebung
Wenn Sie nicht wissen, was Terminal ist, lesen Sie
diesen Artikel hier . Wenn Sie unter Windows arbeiten, richten Sie sich über WLS ein Terminal ein. Wenn Sie bereits mit dem Terminal vertraut sind, fahren wir fort. Stellen Sie sich auch sofort Node.js - es wird für die nächsten Schritte notwendig sein. Es ist besser, LTS zu installieren, aber tatsächlich macht es keinen Unterschied, welche der modernen Versionen des Knotens installiert werden soll.
Das erste, was wir sofort installieren und den Block-Synchronisationsprozess starten, ist
geth
. Kurz gesagt, dies ist ein in Go geschriebenes Dienstprogramm, mit dem wir den Ether-Knoten auf dem lokalen Computer ausführen und eine Verbindung zu den Test- und realen Netzwerken herstellen können. Sie können
über Installationsprogramme
installieren , ich empfehle jedoch dringend, dass Sie sofort im Terminal arbeiten, wie
hier beschrieben. Sie können überprüfen, ob Ihre
geth
Standards festgelegt sind
geth
den Befehl im Terminal
geth
:
geth version
Wenn Sie die Geth-Version ausgespuckt bekommen - alles ist in Openwork, fahren Sie mit dem Tutorial fort. Wenn nicht - schlecht, richtig; Es scheint, dass Sie mit dem Terminal und Ihrem Betriebssystem Liebesspiel machen müssen - aber dies ist nicht das erste Mal, dass Sie es herausfinden. So installieren Sie geth, führen Sie den Befehl im Terminal aus:
geth --testnet console
Dadurch wird der Prozess der Synchronisierung Ihres Knotens mit dem Testserver gestartet, dessen Blöcke
hier angezeigt werden können. Sie können überprüfen, ob Sie mit dem Netzwerk in der
geth
Konsole synchronisiert haben, indem Sie
geth
:
eth.blockNumber
Der Synchronisationsprozess dauerte 1 bis 4 Stunden - wann wie. Zusätzlich zur Blocksynchronisation müssen Sie auch auf die Statussynchronisation warten - diese ist häufig länger als die Blocksynchronisation. Sie können auch
geth
mit dem Flag
--light
verwenden. Die Synchronisierung dauert dann einige Sekunden bis eine Minute und Sie können weiterhin Verträge bereitstellen.
Okay, wir haben das erste Dienstprogramm installiert - setzen Sie das nächste. Wir müssen ein Analogon von
geth
, nur eine sehr lokale Blockchain-Simulation -
testrpc
. Ja, wir haben
3 Blockchains :
testrpc
- lokale Blockchain-Simulation; schnell, aber gefälscht und nur auf Ihrem Computer gespeichertgeth --testnet
ist bereits eine echte Blockchain, aber Sie werden kein Geld verlieren, wenn Sie Kefir bekommen und alle geth --testnet
kostenlos testen könnengeth
- mainnet, main, echte Blockchain, echter Kefir; Alles auf erwachsene Weise, die Fehler hier sind die Verluste von echtem Kefir
Dementsprechend werden wir den
testrpc
mit
testrpc
, ihn dann in
geth --testnet
installieren und dann direkt in
geth
.
Wir
testrpc
indem wir den folgenden Befehl
testrpc
:
npm install -g ethereumjs-testrpc
Nun, oder es steigt sofort mit einem Trüffel auf, da sich jetzt
testrpc
unter dem Trüffelflügel befindet und
ganache-cli
. Obwohl der Teufel weiß, hat mit Vanilla
testrpc
alles
testrpc
. Und wenn es funktioniert, fass es nicht an, da ich an der intergalaktischen Akademie unterrichtet wurde. Sie können es auch ausführen, um die Installation zu überprüfen, indem Sie
truffle
in der Konsole registrieren. Die Testblockchain ist jedoch bereits mit uns synchronisiert. Lassen Sie uns das nicht stören.
Nun, die Blockchains herausgefunden? Es gibt jetzt Knoten und der Test ist sogar synchronisiert? Mit dem folgenden Befehl haben wir ein praktisches Dienstprogramm für die Arbeit mit intelligenten Verträgen für Kefir-
truffle
bereitgestellt:
npm install -g truffle truffle version
Truffle ist ein Tool, mit dem Sie intelligente Verträge in verschiedenen Dateien speichern, andere Dateien importieren und Ihren intelligenten Vertragscode in einen großen Bytecode kompilieren können (von einer Person nicht lesbar). Es findet automatisch ein lokal laufendes
geth
(Test und Real) ) oder
testrpc
, stellen Sie Ihren Smart-Vertrag in diesem Netzwerk
testrpc
. Überprüfen Sie Ihren Smart-Vertragscode auf Fehler, und kürzlich abgeschlossene Transaktionen
helfen auch beim Debuggen . Kurz gesagt, Masthead.
Zu diesem Zeitpunkt sollten Sie
testrpc
installiert haben:
testrpc
,
geth
,
truffle
- wenn etwas davon fehlt oder die Version auf Anfrage nicht auf die Konsole spuckt, korrigieren Sie dies; Andernfalls werden Sie keinen Erfolg haben.
Außerdem habe ich ein einfaches Bash-Skript erstellt , das alles für Sie installiert. So genannt:
source <(curl -s https://raw.githubusercontent.com/backmeupplz/eth-installer/master/install.sh)
- aber ich habe es noch nie getestet, daher bin ich mir seiner Leistung nicht sicher. Gerne ziehe ich jedoch Anfragen zurück.
Figash Vertrag
Alles wurde bereits für Sie erfunden und geschrieben - das ist gut. Eine kleine Ammer wird egal sein - aber ich werde versuchen, sie für Sie zu minimieren. Wir werden
vorgefertigte ERC20-Verträge von OpenZeppelin verwenden - dies ist jetzt der Industriestandard, sie haben das Audit bestanden und tatsächlich verwenden alle ihren Code. Vielen Dank für Ihren Beitrag zu Open Source.
Machen Sie eine
cd
in einen sicheren Ordner und schreiben Sie dann:
mkdir contract && cd contract
In diesem Ordner werden wir arbeiten. Erstellen Sie hier einen Stub für unseren intelligenten Vertrag:
truffle init
Stolpern, klar. Wir haben jetzt zwei sehr wichtige Ordner, in die wir klettern werden:
contracts
und
migrations
. Der erste ist der Code für unsere Verträge, der zweite ist der Code für Trüffel, um zu wissen, was zu tun ist, wenn Verträge in der Blockchain bereitgestellt werden.
Als nächstes müssen wir den aktuellen Smart Contract Code von npm übernehmen und das Projekt selbst starten:
npm init -y
Nun, der Code für intelligente Verträge von OpenZeppelin befindet sich in unserer Tasche im Ordner
node_modules/openzeppelin-solidity/contracts
. Jetzt gehen wir zum Hauptvertragsordner, löschen dort alle Dateien und fügen die Dateien
MyToken.sol
und
MyCrowdsale.sol
- natürlich werden Sie Ihre Verträge anders benennen. Der erste ist ein Vertrag für unser ERC20-Token, und der zweite ist ein Vertrag unseres ICO, der Kefir akzeptiert und
MyToken
verteilt. Dieser Artikel ist möglicherweise veraltet, aber Sie können jederzeit überprüfen, wie OpenZeppelin vorschlägt, Verträge
in ihrem Repository zu erstellen. So sieht
MyToken.sol
:
pragma solidity ^0.4.23;
Schön - Sie haben einen intelligenten Vertrag mit Ihrem eigenen Token (ändern Sie einfach die Namen in den Konstanten)! Sie können sehen, welche
MintableToken
Vererbung es von
MintableToken
- aber dort ist alles so einfach wie möglich. Dies ist ein Token, das ausgegeben werden kann (von der englischen "Mint" - bis Mint), und nur der Eigentümer hat das Recht, es
MintableToken
, da das
MintableToken
auch von
Ownable
geerbt
Ownable
. Außerdem erbt
MintableToken
auch von Klassen von ERC20-Token, die von OpenZeppelin geschrieben wurden und in denen die ERC20-Schnittstelle implementiert ist:
contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); }
Ja, hier haben Sie die gesamte ERC20-Schnittstelle. Ist es schwierig Ich glaube nicht. Sie haben die Möglichkeit, die Anzahl der ausgegebenen Token zu überprüfen, den Adresssaldo zu überprüfen und Token an eine andere Adresse zu übertragen, indem Sie ein Übertragungsereignis für Light Kefir-Kunden im Netzwerk ausspucken. Und all das erhalten Sie dank der Arbeit von OpenZeppelin kostenlos in MyToken.sol - sie sind großartig.
Und jetzt kommen wir zum Hauptteil unseres ICO - wir müssen Kefir akzeptieren und
MyToken
! So
MyCrowdsale.sol
Ihre
MyCrowdsale.sol
aus:
pragma solidity ^0.4.23;
So lala, was ist mit uns? Was, Jungs, kluge Verträge? Unser öffentlicher Verkauf von Token erbt drei der beliebtesten Immobilien: Es hat eine Hard-Cap, die nicht mehr gesammelt werden kann; weiche Kappe, die nicht sammelt, welche Ester zurückgegeben werden; Zeitpunkt des Beginns und des Endes des Verkaufs von Token. Was braucht man eigentlich noch für das Glück?
Programmierer beachten, wie die Konstruktoren mehrerer Vererbungsklassen in einer Reihe angeordnet sind, und erhalten Argumente vom Hauptkonstruktor von
MyCrowdsale
. Außerdem überprüfen wir, ob der Hardkey höher ist als der Softkey - Ales Gut!
MyCrowdsale
Sie sich auch nicht
MyCrowdsale
Parametern im
MyCrowdsale
Konstruktor
MyCrowdsale
- wir werden sie in der Phase der Vertragsbereitstellung in der Trüffel übergeben.
Das ist alles - Sie haben vorgefertigte Verträge mit Ihrem eigenen ERC20-Token und sogar einen ICO-Smart-Vertrag, der nach Ihren Wünschen konfiguriert wird und Ihre Token für Kefir ausgibt. Außerdem wird es von allen ERC20-Geldbörsen unterstützt - ein Fehler! Fahren wir mit manuellen Tests und der Bereitstellung fort.
Migrationen
Wie ich bereits sagte, werden wir nacheinander in drei Blockchain-Netzwerken testen, aber der Testprozess mit Stiften wird immer der gleiche sein. Beginnen wir mit
testrpc
, fahren
testrpc
dann mit
geth --testnet
und fahren mit
geth
. Sou Scheinwerfer, wir haben gerade den Code geschrieben, versuchen wir es zu kompilieren. Schreiben Sie im Projektordner:
truffle compile
Wenn alles ohne Probleme kompiliert wurde, sehen Sie den
build
, der das Krakozyab für die Trüffel enthält, damit der Bytecode Ihrer Smart-Verträge in die Blockchain eingebettet werden kann. Bevor wir intelligente Verträge bereitstellen, müssen wir dem Trüffel mitteilen, was überhaupt zu tun ist. Die Trüffelbereitstellung intelligenter Verträge wird als Migration bezeichnet. Halten wir uns an diese Terminologie. Gehen Sie zu
migrations/1_initial_migration.js
und ändern Sie es folgendermaßen:
const token = artifacts.require("../contracts/MyToken.sol"); const crowdsale = artifacts.require("../contracts/MyCrowdsale.sol"); module.exports = function(deployer, network, accounts) { const openingTime = 1514764800;
Dies ist dieselbe Datei, die von der Trüffel zum Bereitstellen von Verträgen verwendet wird. Was machen wir hier? Zuerst haben wir
MyToken
und
MyCrowdsale
kompiliert
MyCrowdsale
. Danach setzen wir die Konstanten mit allen Argumenten unseres ICO - setzen die Start- und Endzeiten; Wie viele Token erhalten Personen für 1 Vey Kefir (0,000000000000000001 eth = 1 Wei; das Setzen von
decimals
gibt an, wie viele Wei-Bestellungen erforderlich sind, um 1 Ihrer neu hergestellten Token zu erhalten). Brieftasche, wo Kefir aus dem Verkauf kommen wird; harte Kappe und weiche Kappe. Bitte beachten Sie, dass die
openingTime
immer nach dem Zeitpunkt des aktuellen Blocks in der Blockchain liegen sollte. Andernfalls wird Ihr Smart-Vertrag nicht blockiert, da der Zustand in
TimedCrowdsale
. Ich bin auf diesen Rechen getreten, und fehlgeschlagene Transaktionen können überhaupt nicht belastet werden. Ändern Sie diese Konstanten nach Ihren Wünschen.
Der nächste Schritt ist genau die Bereitstellung intelligenter Verträge. Hier gibt es nichts Interessantes: Wir haben ein
deployer
Objekt, das intelligente Vertragsartefakte
deployer
und dort Argumente übergibt. Beachten Sie, dass MyToken zuerst und erst dann
MyCrowdsale
- und die Adresse des ersten als Argument im zweiten übergeben wird.
Das Interessanteste ist dann, worüber sie weder in der Dokumentation noch in den Büchern schreiben. Wenn Sie ein
MyToken
aus einer Brieftasche erstellen, wird diese Brieftasche Eigentümer von
MyToken
in der Superklasse
Ownable
- dasselbe passiert mit
MyCrowdsale
. Wenn Sie tief in das
MintableToken
, können Sie sehen, dass nur der
Owner
Münzen prägen kann! Und wer ist der Besitzer von
MyToken
? Das ist richtig: die Adresse, die ihn verärgerte. Und wer wird Anfragen zur Münzprägung senden? Richtig:
MyCrowdsale
Smart Contract. Ich
MyToken
Sie daran erinnern, dass die Adresse, die
MyToken
und
MyCrowdsale
zwei verschiedene Adressen sind.
MyToken
diesem
MyCrowdsale
MyToken
wir den nicht-orthodoxen dritten Bereitstellungsschritt hinzu, bei dem die Adresse, die sich den Verträgen widersetzt hat (
web3.eth.accounts[0]
), die Funktion
transferOwnership
für den
MyToken
Vertrag
MyToken
MyCrowdsale
besitzt und Münzen prägen kann. Und
MyCrowdsale
ist immer noch im Besitz von
web3.eth.accounts[0]
- also ist alles gebündelt.
Hinweis zu web3.eth.accounts[0]
: web3.eth.accounts[0]
beim Bereitstellen eines intelligenten Vertrags sicher, dass geth oder testrpc die richtige Brieftasche in web3.eth.accounts[0]
haben. Verlieren Sie nicht den privaten Schlüssel, obwohl dies Ihnen in keiner Weise schadet. aber plötzlich muss der Besitzer später etwas tun, aber der Schlüssel ist nicht mehr da?
In testrpc
werden Konten in der Regel sofort beim Start erstellt und sofort entsperrt. Bei einer Test- und Real Air-Blockchain lohnt es sich jedoch, ein Konto über personal.newAccount()
zu erstellen. Geben Sie diese Adresse dann über Faucet in der Test-Blockchain oder Real Kefir in der Real Blockchain wieder ein. Verlieren Sie nicht Ihr Passwort und Ihre privaten Schlüssel.
Sie können Ihren Konten auch eine vorhandene Brieftasche hinzufügen, indem Sie web3.personal.importRawKey('pvt_key', 'password')
aufrufen. geth
müssen Sie jedoch geth
mit dem zusätzlichen Parameter --rpcapi="db,eth,net,web3,personal,web3"
. Ich denke, Sie werden es herausfinden.
Testen und Bereitstellen
Ja, die Verträge sind fertig, die Migrationen sind geschrieben, es bleibt nur die Bereitstellung und Überprüfung. Sowohl
geth
(test und real) als auch
testrpc
auf die gleiche Weise über die
truffle console
verwaltet.
testrpc
werde ich die Überprüfungsmethode für
testrpc
und Ihnen nur
testrpc
, wie Sie
geth
nachher aktivieren
geth
. Und so starten wir die lokale Test-Kefir-Blockchain:
testrpc
Ähm ... das ist alles. Sie simulieren die Kefir-Blockchain lokal.
Und um diese in der geth --testnet --rpc
, erhalten Sie anstelle dieses Befehls geth --testnet --rpc
. Und um in der realen Blockchain von Ether geth --rpc
werden, geth --rpc
Sie einfach geth --rpc
. Das Flag --rpc
benötigt, damit die Trüffel eine Verbindung herstellen kann. Die folgenden Bereitstellungs- und Testschritte sind für alle drei Blockchain-Typen mehr oder weniger gleich. Das einzige ist, dass nach dem Ausführen des Tests oder der echten Blockchain über geth
die Synchronisierung der Blöcke beginnt - und dies kann bei einer guten Internetverbindung bis zu 4-5 Stunden dauern. Eine Bemerkung dazu war ganz am Anfang des Artikels. Ich empfehle, vor der Bereitstellung intelligenter Verträge auf die vollständige Synchronisierung zu warten. Außerdem wiegt die Blockchain im Bereich von 60 bis 100 Gigabyte. Bereiten Sie also den Speicherplatz dafür vor.
web3.eth.accounts[0]
außerdem sicher, dass web3.eth.accounts[0]
entsperrt ist. Normalerweise können Sie testrpc
in der Konsole registrieren, die sofort geöffnet wird, oder in einem separaten Terminalfenster in der Konsole, das über die geth console
: eth.unlockAccount(eth.accounts[0], ", ", 24*3600)
- Dadurch wird Ihr Konto freigeschaltet, wodurch ein intelligenter Vertrag erstellt werden sollte
Öffnen Sie nun ein neues Terminalfenster (
testrpc
schließen
testrpc
- es sollte funktionieren) und schreiben Sie es in den Projektordner:
truffle migrate --reset
Dieser magische Befehl kompiliert einen intelligenten Vertrag (dh Sie müssen nicht jedes Mal eine
truffle compile
schreiben) und stellt ihn auf dem lokal geöffneten Blockchain-Mikroserver bereit. Es ist erwähnenswert, dass, wenn
testrpc
dies sofort tut, der Test und die realen Blockchains die Transaktion in den nächsten Blöcken viel länger enthalten. Danach sollten Sie so etwas in der Konsole ausspucken:
Using network 'development'. Running migration: 1_initial_migration.js Running step... Replacing MyToken... ... 0x86a7090b0a279f8befc95b38fa8bee6918df30928dda0a3c48416454e2082b65 MyToken: 0x2dc35f255e56f06bd2935f5a49a0033548d85477 Replacing MyCrowdsale... ... 0xf0aab5d550f363478ac426dc2aff570302a576282c6c2c4e91205a7a3dea5d72 MyCrowdsale: 0xaac611907f12d5ebe89648d6459c1c81eca78151 ... 0x459303aa0b79be2dc2c8041dd48493f2d0e109fac19588f50c0ac664f34c7e30 Saving artifacts...
Ich denke, Sie haben bereits erkannt, dass die Konsole Ihnen die Adressen der Smart-Verträge
MyToken
und
MyCrowdsale
. Das ist alles! Der Smart-Vertrag ist in die Blockchain eingebettet, deren Mikroserver Sie geöffnet haben. Es bleibt nur zu überprüfen, ob die Token tatsächlich an Benutzer verteilt werden, die Kefir an den
MyCrowdsale
Smart-Vertrag senden. Wir schreiben Folgendes in das Terminal, um die Trüffelkonsole zu betreten:
truffle console
Wir schreiben folgendes in den jetzt Trüffel (nur kein Kommentar):
Im Fall von können testrpc
Sie den Kontostand unserer Brieftasche sofort erneut überprüfen. Im Fall des Tests und der echten Blockchain müssen Sie jedoch warten, bis unsere Transaktion im Block enthalten ist. In der Regel erhalten Sie in diesem Fall von der Trüffel die Transaktionsnummer. Hast du gewartet Überprüfen Sie noch einmal unser Guthaben in MyToken
:
Das ist alles!
Testen Sie zuerst Ihren Vertrag am testrpc
, dann am geth --testnet
und dann am geth
. Sie haben also Ihr eigenes ICO gestartet! Und Sie mussten nicht zehn Kilobaks für Audit und Start ausgeben. Es ist eigentlich sehr schwierig, mit dem, was uns die Jungs von OpenZeppelin zur Verfügung gestellt haben, durcheinander zu bringen. Und wenn Sie es benutzen truffle
- so wird Solidaritätsentwicklung im Allgemeinen zu einem Märchen. Nun, außer in Fällen, in denen Transaktionen während der Ausführung eines intelligenten Vertrags rückgängig gemacht werden - debütieren Sie ihre Hölle. Aber das Debuggen von intelligenten Verträgen verdient wirklich einen separaten Artikel.Fazit
Vielen Dank für das Lesen bis zum Ende dieses Artikels! Wenn ich Ihnen Zeit oder Geld gespart habe oder wenn Sie aus diesem Artikel etwas Neues gelernt haben, werde ich mich sehr darüber freuen. Ich wäre auch sehr dankbar, wenn Sie diesen Artikel mit Ihren Freunden oder Bekannten teilen würden, die einen ICO durchführen möchten - sparen Sie 75.000 US-Dollar für Unterprogrammierer, die wie Parasiten Geld aus dem Kryptomarkt heraussaugen und dieselben 25 Codezeilen kopieren .Viel Glück bei der Entwicklung intelligenter Verträge! Haben Sie noch Fragen? Ich frage Sie in Kommentaren - ich beantworte gerne alles und versuche, bei Problemen zu helfen.Bonus
Was aber, wenn Sie die Logik ändern möchten, nach der der Kaufpreis von Token berücksichtigt wird? Natürlich können Sie es richtig ändern rate
oder eine der Vertragsklassen von OpenZeppelin verwenden, aber was ist, wenn Sie etwas noch Perverseres wollen? In einem intelligenten Vertrag können Sie die Funktion getTokenAmount
wie folgt überschreiben : function _getTokenAmount(uint256 _weiAmount) internal view returns (uint256) { if (block.timestamp < 1533081600) {
Im Allgemeinen kann dies den Preis des Tokens vom Zeitpunkt des Kaufs abhängig machen - je weiter im Wald, desto teurer die Token. Haben Sie keine Angst, einige der Funktionen intelligenter Verträge zu experimentieren und neu zu schreiben - es macht Spaß!