Commit d3950e1c authored by Christoph Gross's avatar Christoph Gross 🤖

Verbesserte Ordnerstruktur

parent 945752ea
# Aufgabe 1: Einstieg
Wir verwenden für den Großteil der folgenden Truffle, eine Entwicklungsumgebung für Smart Contracts.
Wir haben Truffle bereits für euch vorinstalliert. Für den Einstieg verwenden wir nun ein Demoprojekt für Truffle namens "Metacoin"
1. Öffnet ein Terminal und führt den folgenden Befehlt aus um das Projekt zu initalisieren und herunterzuladen:
```
mkdir metacoin
cd metacoin
truffle unbox metacoin
```
Ihr solltet dann eine Ausgabe wie die folgenden bekommen:
```
Downloading...
Unpacking...
Setting up...
Unbox successful. Sweet!
Commands:
Compile contracts: truffle compile
Migrate contracts: truffle migrate
Test contracts: truffle test
```
## Projektstruktur von Truffle
Eure Ordnerstruktur sollte dann wie folgend aussehen:
```
.
├── contracts
│ ├── ConvertLib.sol
│ ├── MetaCoin.sol
│ └── Migrations.sol
├── migrations
│ ├── 1_initial_migration.js
│ └── 2_deploy_contracts.js
├── test
│ ├── TestMetacoin.sol
│ └── metacoin.js
├── truffle-config.js
└── truffle.js
```
### Contracts-Ordner
Das ist der Ordner, in welchem ihr all eure Smart Contracts speichern werdet.
Im Contracts-Ordner befindet sich auch die Datei `Migrations.sol`, welche eine spezielle Datei ist. Mehr dazu aber in einem später Abschnitt.
Beim Kompilieren des Projekts geht Truffle durch den Contracts-Ordner und kompiliert alle kompatible Dateien. Das meist verwendete Format für Smart Contracts ist aktuell Solidity für Ethereum. In Zukunft könnte sich das aber in Richtung Vyper oder SolidityX verändern, da beide per default sicherer sein sollen als Solidity.
### Migrations-Ordner
Was ist eine Truffle-Migration?
- Im Grunde ist es ein Skript, welches definiert, wie die Smart Contracts auf der Blockchain eingesetzt/verteilt werden. (Deployment)
Warum sind diese Migrationen notwendig?
- Mit der Komplexität des Projekts steigt zugleich auch die Schwierigkeit des Deployments auf der Blockchain.
Ein kleines Beispiel:
Wir haben die Smart Contracts A, B und C.
Der Smart Contract C beinhaltet eine Referenz auf den Smart Contract A und benötigt die Adresse des Smart Contracts B in seinem Konstruktor.
Bei diesem Beispiel müssen die Smart Contracts nicht nur sequenziell angwendet werden, sondern sie haben auch gegenseitige Querverweise. Zusammengefasst gesagt: Migrationen erlauben uns diesen Prozess zu automatisieren.
Eine Beispielmigration für das obige Beispiel könnte wie folgend aussehen:
```javascript
var One = artifacts.require("One");
var Two = artifacts.require("Two");
var Three = artifacts.require("Three");
module.exports = function(deployer) {
deployer.deploy(One).then(function() {
deployer.deploy(Two).then(function() {
deployer.deploy(Three, One.address);
})
});
};
```
Zusätzlich erlauben Migrationen weitere Dinge wie:
- Max Gas für Deployments festlegen
- Herkunftsadresse (`from address`) von Deployments verändern
- Librarys installieren/anwenden
- Aufrufen beliebiger Smart Contract Funktionen
Wie ihr vielleicht bereits gesehen habt, beinhaltet das MetaCoin-Projekt eine Datei namens `1_initial_migration.js`. Diese Datei verteilt den `Migrations.sol` Smart Contract auf der Blockchain.
Normalerweise muss diese Datei nicht geändert werden nachdem das Projekt einmal initialisiert wurde.
### Test-Ordner
Smart Contracts MÜSSEN getestet werden. Es geht schließlich um viel Geld und es gab bereits genügend Vorfälle bei denen Smart Contracts Lücken und Fehler aufwiesen.
Um diesen Prozess zu automatisieren liefert Truffle ein eingebautes Testframework mit. Es erlaubt Tests entweder in Solidity oder Javascript zu schreiben.
Schaut euch die Beispiele am besten etwas genauer an, da ihr in einer späteren Aufgabe auch noch Tests schreiben müsst.
Falls ihr Tests in Solidity schreibt, könnt ihr eure Smart Contracts mit der folgenden Zeile importieren:
`import "../contracts/MetaCoin.sol";`
Beim Schreiben von Tests in Javascript importiert ihr diese mit der `artifacts.require()` Hilfsfunktion:
`var MetaCoin = artifacts.require("./MetaCoin.sol");`
### Konfigurationsdatei
Die Konfigurationsdatei heißt entweder `truffle.js` oder `truffle-config.js`.
In der Konfigurationsdatei können verschiedene Dinge festgelegt und verändert werden:
- Umgebungsvariablen für Entwicklung, Testnetz und Produktion wie Netzwerkadressen, Netzwerk-IDs, Max Gas,...
- Kompilerversion und -parameter (für solc)
- Packetmanagment (für EthPM)
- Projektbeschreibung (Projektname, -autor)
## Ausführen des Codes
- Zum Kompilieren der Smart Contracts:
`truffle compile`
- Zum Durchführen der Migrationen:
`truffle migrate`
Es können aber auch spezifische Umgebungen angegeben werden:
`truffle migrate --network live`
Zum Rekompilieren und Migrieren aller Smart Contracts (nicht nur von Änderungen) kann folgender Befehl verwendet werden:
`truffle migrate --reset --compile-all`
- Zum Testen der Smart Contracts:
`truffle test`
Oder um spezifische Tests laufen zu lassen:
`truffle test ./path/to/TestFile.sol`
Testet alle drei Kommandos, wobei die Migration einen Fehler ausgeben sollte, da wir aktuell noch kein Ethereum Testnetz gestartet haben.
......@@ -2,10 +2,10 @@
## Smart Contracts
- [Aufgabe 1](../Aufgabe_01/): Einstieg in Truffle
- [Aufgabe 2](../Aufgabe_02/): Erster eigener Smart Contract
- [Aufgabe 3](../Aufgabe_03/): Testen von Smart Contracts
- [Aufgabe 4](../Aufgabe_04/): Komplexeres Beispiel anhand eines Tierladens
- [Aufgabe 1](../Aufgabe_01.md): Einstieg in Truffle
- [Aufgabe 2](../Aufgabe_02.md): Erster eigener Smart Contract
- [Aufgabe 3](../Aufgabe_03.md): Testen von Smart Contracts
- [Aufgabe 4](../Aufgabe_04.md): Komplexeres Beispiel anhand eines Tierladens
## Quellen:
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment