michael-spengler / blockchain-technologie-und-anwendungsgebiete-vorlesungsreihe

Blockchain Technologie Vorlesungsreihe
11 stars 4 forks source link
blockchain-technology distributed-ledger-technology ethereum smart-contracts

Blockchain Technologie Vorlesungsreihe 2022

Allgemeine Empfehlungen

Um sich die theoretischen Inhalte effizient anzueignen empfehle ich die Nutzung der Fancy Flashcard App. Sie können hier ihre eigenen Decks erstellen und per Pull Request hinzufügen. Diese können Sie dann mit dem entsprechenden Raw Link (Beispiel) in der Fancy Flashcard App importieren. Die Fancy Flashcard App ist dann auch im offline- / Flugzeugmodus nutzbar.

Je nach Lerntyp können Sie zusätzlich Videos wie dieses produzieren, um die Zusammenhänge in einem gediegenen Flow zu erkunden und sich diese einzuprägen.

Um sich die praktischen Inhalte effizient anzueignen empfehle ich "just do it" - soll heißen: ausprobieren, ausprobieren, ausprobieren :) --> Im Rahmen der Vorlesungsreihe entwickeln wir z.B. Smart Contracts in Solidity unter Nutzung der Online IDE Remix und Deno Module in TypeScript. Da auch Deno für viele eine neue RTE / Technologie ist, empfehle ich diese Module zum Einstieg in das Thema auszuprobieren.

Geplante Vorlesungsgestaltung

  1. Erkundung der Workbooks innerhalb dieses Repositories
  2. Viel Zeit für Gruppenarbeiten / Team Programming und Pair Programming - siehe auch issues tab
  3. Sofern jemand an einer Stelle nicht weiterkommt empfehle ich die Challenge zunächst in Stackoverflow und oder in https://ethereum.stackexchange.com/ zu beschreiben und den Link zum Post mit uns allen per Telegram Chat zu teilen
  4. Sofern wir gemeinsam keine zügige Lösung finden, wenden wir uns mit dem Link bei...:
    4.1. Deno Themen an https://discord.com/invite/deno
    4.2. Ethereum Themen an https://discord.gg/hZEMRfVC
    4.3. Uniswap Themen an https://discord.gg/kWAdfKqX2j
    4.4. Metamask Themen an consensys.net

Im Rahmen der Vorlesungsreihe können Sie mich als Potentialerweiterungscoach betrachten, dessen Aufgabe es ist Ihnen ein möglichst effizientes, lehrreiches und erfolgreiches Arbeiten zu ermöglichen.

Mir ist wichtig, dass Sie sich engagieren, interagieren und häufig - wirklich häufig! Feedback geben - z.B. up- or downvotes bei allen Stackoverflow Beiträgen von Kommilitonen, Stars auf den jeweiligen GitHub Repos. Wenn kein Star, dann ein Issue... Damit möchte ich eine Feedback Kultur prägen innerhalb derer wir uns gegenseitig auf dem gemeinsamen Pfad der Erkundung & Gestaltung unterstützen können.

Prüfungsleistung

Portfolio Gruppenarbeiten im Kontext der Themen siehe Issues Tab

Bewertungskriterien

Jeder einzelne weist ein track record von wertvollen contributions nach - contributions.md (stackoverflow posts, deno module, smart contracts, svelte reusables, ...)
Die Gruppen haben viele wertvolle Open Source Module entwickelt (Deno TypeScript, EVM Solidity Smart Contract Modules, ...) und diese auf wertvolle Art orchestriert.
High Cohesion, Loose Coupling, Separation of Concerns im Code
100 prozentige Testabdeckung / Exkurs Executable Specifications: Automatisierte Tests sind ausführbare Spezifikationen. Sofern Sie keine 100 prozentige Testabdeckung haben, haben Sie entweder unvollständige Spezifikationen oder unnötigen Code im System. (Vgl. Double Entry Book Keeping - Zwei Teile eines Systems, die sich gegenseitig valideren). Tests haben auch eine Dokumentationsfunktion.
Gute Doku / Usage Examples für die Open Source Module

Empfohlener Technologie Stack

On Chain: Smart Contracts in Solidity deployed via remix.ethereum.org
Off Chain Backend: TypeScript in Deno RTE - Beispiel für Interaktion mit einem SC von einem TypeScript Programm aus - Falls zentrale API erforderlich: Opine
Frontend: Svelte unter Nutzung von Snel connecting to Chain via Metamask --> https://svelte.dev - Beispiel für Interaktion mit einem SC von einer eigenen Webseite aus
UI Provisioning: ENS Domains unter Nutzung des IPFS oder https://argoapp.net/

Exkurs Laufzeitumgebungen / Runtime Environments (RTEs)
Brendan Eich erfand und entwickelte Javascript, damit Webentwickler Webseiten einfach für Ihre Besucher interaktiv gestalten konnten. --> Javascript wurde in dieser Hinsicht lediglich im Browser / in der Browser Laufzeitumgebung beim Client / User ausgeführt. Ryan Dahl erfand und entwickelte einige Zeit später NodeJS und ermöglichte es so Javascript Programme auch serverseitig (in der NodeJS Laufzeitumgebung) ausführen zu lassen. Daraufhin haben sehr viele Entwickler sehr viele Node Packages z.B. in der Registry npmjs.com veröffentlicht. Vor kurzem begann Ryan Dahl damit eine neue Laufzeitumgebung namens Deno zu entwickeln. Deno hat im Vergleich zu NodeJS viele Vorteile - so ist Deno z.B. sicherer als NodeJS und die Art und Weise wie Reuse gestaltet werden kann ist typischerweise bei Deno einfacher und feingranularer.

Starthilfe

Ich empfehle Ihnen zunächst relativ einfache Deno Module zu implementieren und diese zu veröffentlichen. Zu diesem Zweck habe ich die Deno Microfunctions Org angelegt. Hier können wir die entwickelten Artefakte sammeln. Vielleicht möchte der ein oder andere z.B. ein RSA Key Generierungsmodul, oder ein Modul um Bitcoin Wallet Adressen oder Ethereum Adressen zu erstellen entwickeln. Falls Sie Hilfe brauchen melden Sie sich gerne per Telegram.

Häufig Genutzte Smart Contracts

TINF Coin On Ropsten (ERC20)


// SPDX-License-Identifier: GNU GPL
pragma solidity >=0.8.0 < 0.9.0;

import "https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-contracts/v4.5.0/contracts/token/ERC20/ERC20.sol";

contract TINFCoin is ERC20 { 

    constructor () ERC20("TINFCoin", "TINF") { 
        _mint(msg.sender, 42 * 10 ** 18 );
    }

}

Individualisierung siehe auch: https://wizard.openzeppelin.com/

Unique Collectible On Ropsten (ERC721)


// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";

contract MyToken is ERC721, ERC721URIStorage {
    constructor() ERC721("MyToken", "MTK") {}

    // The following functions are overrides required by Solidity.

    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }

    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721, ERC721URIStorage)
        returns (string memory)
    {
        return super.tokenURI(tokenId);
    }
}

Challenge: Which wallet to use for interaction

Semi Unique Collectible On Ropsten (ERC1155)

https://ropsten.etherscan.io/address/0xdcfba45751726c7dfaf9950e96eef7026d5afb73

Storing NFT Data Using IPFS


// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;

import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol";

contract OurFancyERC1155Token is ERC1155, Ownable, ERC1155Supply {
    constructor() ERC1155("") {}

    function setURI(string memory newuri) public onlyOwner {
        _setURI(newuri);
    }

    // The following functions are overrides required by Solidity.

    function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        internal
        override(ERC1155, ERC1155Supply)
    {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }
}

Ideen für den weiteren Verlauf der Vorlesungsreihe

  1. Debating Club mit Rollenwechsel (CBDCs vs. Ether)
  2. Umfrage - wer lässt sich prüfen - wer nicht - wer weiß es noch nicht
  3. Walt Disney Methode & Vernetzung, Erregung Bewertung in den Gruppen
  4. Give and Take Matrix
  5. Multisensorisches Lernen noch ausdrücklicher fördern - Häufige Zwischenpräsentationen als Lernerfahrung...
  6. Grundlagen und Modelle ....
  7. Race Conditions --> PoW Longest Chain...
  8. Double Spending Problem erläutern
  9. 51% Attacks bei PoW & PoS
  10. Datenlookup für sehr alte Transaktionen
  11. Umfragen (Verständnischeck)
  12. Schaubilder!! (Informationsdichte...)
  13. Fragestellungen

Ausblick für Vertiefungen

Hackathons

Erkundung neuer Technologien + Open Source Beiträge
DHBW Kurs Team
Vorbereitung Samstags ... / Robotics (Tiger Team...)

DHBW Blockchain Hackathon Team - bereitet sich stets auch diverse challenges im Blockchainspace vor...

--> Blockchain Kursteilnehmer + stets die neuen Kurse
Goodie für Studenten: Pizza delivery for contributors...

Recommended Youtube Channels

Eat The Blocks
Bankless
Coin Bureau

Telegram

Aufgrund der Integrationsmöglichkeiten DApps <-> Telegram empfehle ich die Installation von telegram.org auf dem PC / Desktop. Die entsprechenden Hilfestellungen fasse ich in dieser Gruppe zusammen. Bitte treten Sie nach Möglichkeit alle dieser Gruppe bei.