michael-spengler / digitale-waehrungen-wwi19seb

6 stars 9 forks source link

Digitale Währungen

Bedeutungen des Geldes

Bevor Geld zu dem wurde was es heute ist wurde es durch viele kreative Ideen geformt bzw. weiterentwickelt. Im Laufe der Evolution wurde Geld in unterschiedlichen Kulturen vor allem aufgrund seiner Tauschmittelfunktion, Wertaufbewahrungsfunktion und Wertmaßstabfunktion genutzt.
Im Laufe der Geschichte finden sich viele Beispiele dafür, wie Machthaber ihre Machtposition auf ethisch fragwürdige Weise nutzten, um gesellschaftlich anerkannte Scams (z.B. die Aufhebung des Goldstandards im August 1971) zu gestalten. Wer die Währung lenkt, lenkt meist auch das Volk.

Differenzierung Digitaler Währungen

Digitale Währungen unterscheiden sich z.B. im Hinblick auf die ihnen zugrundeliegenden Technologien und durch das Maß an eingebauter Demokratie / das Maß an Verteiltheit voneinander.

Verteilte (meist Crypto-) Digitale Währungen

In dieser Kategorie sind nach allgemeiner Kenntnislage z.B. Bitcoin und Ether (die Hauptwährung der Ethereum Blockchain) zu nennen. Diese beiden Währungen sind sowohl im Hinblick auf die Ihnen zugrundeliegenden Infrastrukturen als auch im Hinblick auf die Menge der Coins weitgehend verteilt.

Zentral Gesteuerte Digitale Währungen

In dieser Kategorie finden wir hauptsächlich Scams. Diese Kategorie umfasst solche digitale Währungen, die keinen "Fair Launch" und keine "Built in Democracy" beweisen sondern den "Issuer" oder den Issuer beeinflussende Personengruppen auf meist unfaire Weise bevorteilen - z.B. XRP, Central Bank Digital Currencies (CBDCs), USDT etc.

Blockchain Technologie

Im Rahmen dieser Vorlesungsreihe konzentrieren wir uns weitgehend auf Bitcoin und Ether und erkunden anhand von diesen beiden die Blockchaintechnologie und einige weitere Anwendungsmöglichkeiten dieser Technologie.

1 Bekannte Anwendungsmöglichkeiten

1.1 Cryptowährungen

Cryptowährungen als Teilmenge digitaler Währungen...

1.2 Decentralized Finance

DeFi Pulse for Ethereum...
DeFi Station for BSC...

Payments / Borrowing / Lending (Yield Farming)

Compare this with classic business models of banks... Explore differences regarding capital efficiencies...

Algorithmic Decentralized Investment / Portfolio Management

Compare this with business models of investment banks...
Explore differences regarding capital efficiencies...
Long Term (Hoddle) vs. Short Term (Trade) Investments...
Explore Volatility Farming comparing the Hummingbot with VoFarm...

Insurance

Immutability... e.g. wertvoll für Versicherungspolicen...

1.3 Decentralized Code Registries

Vergleiche deno.land und nest.land

1.4 Distributed Apps (DApps)

Apps, die keinen zentralen web-server benötigen, sondern welche als Backend ein verteiltes System wie beispielsweise die Ethereum Blockchain oder das Interplanetary File System (IPFS), sowie verteilte Domain Name Services (DNS) wie z.B. ens.domains nutzen.

Manche Leute nenn ihre App schon DApp sobald sie metamask integriert haben und darüber die Interaktion mit Smart Contracts für Ihre Nutzer bereitstellen.

Please remember with great power comes great responsibility --> achtet & pflegt ethischen Kompass von Zeit zu Zeit. Governance Tokens ... Incentive Systeme

1.5 Web3Verse NFTs / Semi Fungible Token - Formerly Metaverse

ERC721 Tokens... && ERC1155 Tokens

Crypto Kitties... Kunst und das Web3verse (formerly Metaverse)

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);
    }
}

2 Technologische Grundlagen

2.1 Distributed Ledger Technologie

Von zentralen zu dezentralen Ledgers...
Challenge: Distributed Consensus...
Konsensalgorithmen Proof of Work, Proof of Stake, etc.

2.2 Das Bitcoin Whitepaper

Das Bitcoin Whitepaper...

2.3 Einwegfunktionen

Die Einwegfunktion SHA256 spielt im Bitcoin System an mehreren Stellen eine wesentliche Rolle. So wird diese genutzt um die durch den Proof of Work Konsensalgorithmus definierte Aufgabe zu lösen und um Bitcoin Wallets zu generieren.

2.4 Asymmetrische (Public Key) Verschlüsselung & Digitale Signaturen

Refresher: Im Gegensatz zu symmetrischen Verschlüsselungsverfahren entfällt bei asymmetrischen Verschlüsselungsverfahren (z.B. RSA, ECDSA, ...) die Herausforderung des Schlüsselaustausches, da Sender und Empfänger bei der asymmetrischen Verschlüsselung unterschiedliche Schlüssel nutzen.

Use Case 1 - Ziel Vertraulichkeit --> Verschlüsselung

Alice verschlüsselt die Nachricht welche sie an Bob senden möchte mit Bob's public key --> Nur Bob wird in der Lage sein diese Nachricht zu entschlüsseln.

Use Case 2 - Ziel Authentizität --> Digitale Signatur

Der Sender verschlüsselt seine Nachricht mit seinem private key und hat diese dadurch digital signiert. Im Bereich Cryptowährungen nutzen wir dieses Prinzip, um sicherzustellen, dass der Auftraggeber einer Transaktion auch tatsächlich der Eigentümer / Besitzer des private keys ist.

2.5 Data Structures

Merkle Trees... siehe auch Bitcoin Whitepaper
Bloomfilters... siehe auch Ethereum Yellow Paper chapter 4.3
Tries...
Merkle-PATRICIA-Tries

2.6 Die Ethereum Blockchain

Ethereum Yellow Paper...
Vitalik Buterin...

2.7 Smart Contracts

Als Smart Contracts bezeichnen wir Programme, welche auf einer verteilten Blockchain deployed und ausgeführt werden. Diese Verträge / Vereinbarungen bezeichnen wir als "smart", da sie ihre Erfüllung selbst algorithmisch sicherstellen - ganz ohne Anwälte oder Gerichte wie viele von uns das aus der off-chain Welt kennen.
Ein Beispiel aus der off-chain Welt, welches das Prinzip eines Smart Contracts recht gut wiederspiegelt ist ein Getränkeautomat am Bahnhof. Mit diesem Getränkeautomat haben dessen Nutzer typischerweise eine Smarte Vereinbarung, die technisch - ohne Anwälte etc. - eingefordert / erfüllt wird. Diese lautet z.B. "Wirf Du mir 2 Euro rein, dafür werfe ich Dir eine Wasserflasche raus."

2.8 Solidity

Solidity ist die Programmiersprache, welche wir für die Implementierung unserer Smart Contracts für die Ethereum Blockchain nutzen.

2.9 Remix.Ethereum.Org

remix.ethereum.org nutzen wir als online IDE für die Implementierung und das Deployment unserer Smart Contracts.

2.10 Weitere Smart Contract Entwicklungswerkzeuge

Truffle & Ganache...

2.11 Programmatic On-Chain / Off-Chain Connections

TypeScript <-> Solidity

The Deno module named web3...

Exkurs: Meilensteine in der Webentwicklung

  1. Web 1: statische Seiten mit Links (early & mid 90s)
  2. Web 2: dynamische Seiten ... dank JavaScript... (end 90s till 2020s)
  3. Web 3: dezentrale / distributed Applications inkl. decentralized DNS (taking off in early & mid 2020s ... )

2.12 Off-Chain / On-Chain Oracles

Chainlink basierte "oracles" erlauben es Off-Chain Daten zu On-Chain Smart Contracts zu bringen. Aus Sicht eines On-Chain Smart Contracts können wir uns eine solche Datenquelle, welche Informationen aus einer "anderen" Welt bereitstellt, wie ein Orakel vorstellen...

2.13 Wallets

Browserwallets

Als Browserwallet nutzen wir Metamask.io...

Paperwallets

2.14 Stable Coins

Algorithmic Stable Coins

DAI as an example...

Fiat (backed?) Stable Coins

USDT and other potential frauds...

3 Begriffe und weitere Anregungen

3.1 Fiat Money

Money which is only backed by political power - typically issued by governments - is also called fiat money. Examples: EUR, USD seit der Aufhebung des Goldstandards im August 1971

3.2 Airdrops

3.3. Decentralized Autonomous Organizations (DAOs)

Governance Tokens...

3.4 Tokenomics

Typische Challenge: Fair Launch / Initial Distribution ...

3.5 Incentive Engineering

3.6 Layer 2 Scaling Solutions

Um Gas Fees ... zu sparen arbeiten wir mit der Layer 2 Scaling Solution Arbitrum...
zk proofs / rollups ...

Network Name: Arbitrum  
New RPC URL: https://arb1.arbitrum.io/rpc  
Chain ID: 0xa4b1  
Symbol: ETH  
Block Explorer URL: https://arbiscan.io/  

Screenshot 2021-10-29 at 09 49 23

3.7 Erstellung von Cryptowährungen auf der Ethereum Blockchain als ERC20 Tokens

3.8 Collectibles / Unique / Non Fungible Tokens als ERC721 Tokens

3.9 Liquidity Pools für Dezentrale Exchanges

Im Rahmen dieser Vorlesungsreihe arbeiten wir mit uniswap.org als dezentrale Börse

3.10 Infrastructure Bots

Considering Aave Liquidation Bots as examples...

4 Hands On Demos

Im Folgenden definieren wir eine digitale Währung als ERC20 Token durch einen smart contract (per remix online IDE entwickelt), den wir auf der Ethereum Blockchain deployen. Aus Kostengründen deployen wir diesen jedoch nicht auf dem Ethereum Mainnet sondern auf dem Ropsten Test Net.

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

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.4/contracts/token/ERC20/ERC20.sol";

contract MannheimCoin is ERC20 { 

    constructor () ERC20("MannheimCoin", "MANN") { 
        _mint(msg.sender, 2000000 * (10 ** uint256(decimals())));

    }

}

Ergebnis bei etherscan

Screenshot 2021-10-29 at 10 31 57

Probleme

Diese digitale Währung basiert nun zwar auf einer verteilten Infrastruktur, gleichzeitig ist die gesamte verfügbare Menge an coins (2.000.000) im wallet des den smart contract deployenden (msg.sender) gelandet. Diese Währung hatte also keinen fair launch. Die Möglichkeiten eines Fair Launch (airdrops etc.) erkunden wir später.

Ein weiteres Problem ist, dass dieser Währung zunächst kein Wert beigemessen wird. Aus diesem Grund erstellen wir im Folgenden einen Liquidity Pool auf uniswap.org.

Lösungsansätze

Nach den folgenden Schritten bei uniswap (wichtig ropsten testnet) können Interessierte 1 Mannheim Coin für 1 Ether "kaufen" / swappen. Das wird nur weiterhin erstmal niemand tun, da bisher keine value proposition hinter dem Mannheim Coin steht...

Screenshot 2021-10-29 at 10 38 04

Screenshot 2021-10-29 at 10 43 54