Jump to content

Ethereum-2.0-Staking auf Raspberry Pi


Cookies statt Coins^^
 Share

Recommended Posts

vor 2 Stunden schrieb Muesli2k:

das Finanzamt wird sicher keine 365 Tage einzeln betrachtet anerkennen

Ja, natürlich gibt man in der Steuererklärung nur einen einzigen Wert an: den aufsummierten Jahresgewinn. Aber falls der ETH-Preis in Zukunft noch weiter steigt und die Summen größer werden, dann wird evtl. schon mal das Finanzamt nachfragen und im Einzelfall eine detaillierte Auflistung der Erträge sehen wollen. Und auch, wenn man mal in ein paar Jahren eine Handvoll gestakte ETHs verkauft, wird dann vermutlich auch mal die Bank nachfragen, woher plötzlich die hohen Summen auf dem Konto kommen (vorausgesetzt der Preis steigt wie erhofft weiter stark an). Da ist es immer gut, über die Jahre hinweg eine sehr detaillierte Auflistung für den Nachweis zu haben.

Streng genommen müsste man immer sofort, sobald man seine Staking Erträge bekommen, den aktuellen Euro-Preis berechnen und dieses dann fürs Steuerjahr aufsummieren. Also im Falle von ETH müsste man alle 6 Minuten bei jeder Attestation den Preis berechnen. Aber ich denke, für die Steuer sollte es reichen, wenn man es auf den einzelnen Tag mittelt. Aber auf keinen Fall würde ich es auf das Jahr mitteln, sonst zahlt man im Bullenmarkt zu viel (und im Bärenmarkt zahlt man zu wenig). Z.B. lag der ETH-Preis am 01.01.2021 bei 615€. D.h in den ersten Wochen musste ich noch deutlich weniger Steuer bezahlen im Vergleich zu heute, obwohl ich dieselbe Menge an ETH bekomme (bzw zu Beginn des Jahres gab es sogar noch mehr ETH pro Attestation, da die Anzahl der Validatoren niedriger war). D.h. wenn ich die ersten ETH vom Jahresanfang mit dem aktuellen EHT-Kurs verrechnen würde, dann würde ich zu viel Steuer bezahlen.

 

vor 2 Stunden schrieb Muesli2k:

Mir erschließt sich das nicht, was es bringen soll wenn ich angebe am 31.05 stand der ETH bei 1000$ und ich habe bis dahin 1ETH verdient, verkaufe aber die 1ETH am 31.12 zu 2000$ dann zählt doch sowieso der Tag der Veräußerung.  

Die genaue Besteuerung ist meines Wissens noch nicht zu 100% final, aber meines Wissens verhalten sich die gestakten Coins anders als die gekauften Coins:
- Bei den gekauften Coins zahlt man die Steuer auf die Differenz von Anschaffungspreis minus Veräußerungspreis. z.B. 1 ETH für 300€ gekauft und für 2.000€ verkauft -> Steuer ist auf 1.700€ Gewinn fällig. Und auch nur, wenn Kauf und Verkauf innerhalb von 365 Tagen geschieht. Danach ist es steuerfrei.
- Beim Staking zahlt man einmalig die Steuer auf den gesamten Gegenwert, sobald man die Coins durch das Staking bekommt. Dann beim Verkauf fallen keine Steuern mehr an (da ich ja bereits die Steuer bezahlt habe). z.B ich erhalte durch Staking 1 ETH zu einem aktuellen Kurs von 300€. Später verkaufe ich das gestakte 1 ETH zu einem Kurs von 2.000€ -> Steuer ist nur auf die 300€ beim Staking fällig und zwar sofort in dem Steuerjahr, in dem man dies erwirtschaftet hat.
=> Im Bullenmarkt ist das Staking sehr vorteilhaft, es kann aber z.B. im Bärenmarkt auch sehr schnell zur Steuerfalle werden. Oder auch z.B. wenn ich 1.000 Scam-Coins zum Preis von je 5€ durch angebliches Staking erhalte (d.h. müsste beim Erhalt 5.000€ Steuer bezahlen). Der Verkauf ist dafür steuerfrei, aber da es sich um einen Scam-Coin handelt, kann ich diesen nicht verkaufen bzw er ist dann in einem Jahr nur noch 0 Euro Wert, dann habe ich ein ziemliches Verlustgeschäft gemacht...

Nachtrag:
Jedoch die 32 ETH, die ich für das Staking einsetze, diese muss ich nun 10 Jahre halten bevor ich diese wieder verkaufe, denn sonst muss ich darauf beim Verkauf auch wieder Steuern bezahlen.
So habe ich zumindest bisher die Steuer bei Staking verstanden. Falls hier noch ein gravierender Fehler in meiner Betrachtung ist, dann bitte melden 😄

Edited by Cookies statt Coins^^
Link to comment
Share on other sites

vor 1 Stunde schrieb Cookies statt Coins^^:

Streng genommen müsste man immer sofort, sobald man seine Staking Erträge bekommen, den aktuellen Euro-Preis berechnen und dieses dann fürs Steuerjahr aufsummieren. Also im Falle von ETH müsste man alle 6 Minuten bei jeder Attestation den Preis berechnen.

Kann man machen. Würde gegenüber Tagessummen aber vermutlich nichts ändern. Ich würde darauf tippen, dass die gängigen Steuertools mit Tageskursen arbeiten und all den 6 Minuten Buchungen eines Tages den gleichen Kurs zugrunde legen.

Zur Sicherheit würde ich aber immer eine CSV Datei mit der maximal möglichen Menge an Daten vorhalten. Ich habe in der Vergangenheit in anderen Fällen mit Monatssummen gearbeitet. Hätte das Finanzamt das in Frage gestellt hätte ich ihnen die Einzelbuchungen zur Überprüfung geben können.

vor 1 Stunde schrieb Cookies statt Coins^^:

Beim Staking zahlt man einmalig die Steuer auf den gesamten Gegenwert, sobald man die Coins durch das Staking bekommt. Dann beim Verkauf fallen keine Steuern mehr an (da ich ja bereits die Steuer bezahlt habe).

Kleiner Schönheitsfehler. In anderen Fällen wären die Trading Gewinne zu versteuern. Die Begründung "weil bereits Steuern bezahlt" greift hier nicht. Der eigentliche Knackpunkt ist, dass der erhaltene Staking Reward keine Anschaffung ist. Ohne Anschaffung gibt es dann auch keine Steuern bei der späteren Veräußerung.

Edited by skunk
  • Love it 1
  • Up 1
Link to comment
Share on other sites

vor 1 Stunde schrieb Cookies statt Coins^^:

Nachtrag:
Jedoch die 32 ETH, die ich für das Staking einsetze, diese muss ich nun 10 Jahre halten bevor ich diese wieder verkaufe, denn sonst muss ich darauf beim Verkauf auch wieder Steuern bezahlen.

und genau das halte ich für Verfassungswidrig, wenn die 32ETH bereits 1 Jahr gehalten wurden und somit bei Veräußerung Steuerfrei wären, das ich diese nun komplett versteuern muss, nur weil ich sie im Staking einsetze.. Den daraus erzielten Gewinn der OnTop kommt zu versteuern, ja ok, aber doch nicht die bisher Steuerfreien ETH erneut versteuern, ich denke das ist Quatsch....

Link to comment
Share on other sites

vor einer Stunde schrieb Muesli2k:

und genau das halte ich für Verfassungswidrig, wenn die 32ETH bereits 1 Jahr gehalten wurden und somit bei Veräußerung Steuerfrei wären, das ich diese nun komplett versteuern muss, nur weil ich sie im Staking einsetze.. Den daraus erzielten Gewinn der OnTop kommt zu versteuern, ja ok, aber doch nicht die bisher Steuerfreien ETH erneut versteuern, ich denke das ist Quatsch....

Ich bin mir nicht ganz sicher ob das hier in diesem Thread überhaupt eine Rolle spielt. Möchtest du beim ETH2 Staking einsteigen? Falls nein dann würde ich vorschlagen du machst einen eigenen Thread dafür auf und besprichst das dort. Beim ETH2 Staking ist das mit der 10 Jahresfrist eher weniger ein Problem weil von uns hier vermutlich keiner vor hat in naher Zukunft das Staking zu beenden. Ich habe so oder so nicht vor meine ETH in den nächsten Jahren zu verkaufen. Da stört mich die 10 Jahresfrist erstmal weniger.

Link to comment
Share on other sites

Am 3.7.2021 um 16:54 schrieb Cookies statt Coins^^:

Deine CSV-Datei aus Beacconcha.in ist auch sehr praktisch:

Was mich an der CSV Datei vielleicht noch ein klein wenig stört ist das Format. Es ist durchaus brauchbar aber für eine Automatisierung nicht die beste Datenquelle. Das Problem ist, dass die Seite das Format jederzeit ändern könnte und dann müssen wir unsere Skripte immer wieder anpassen. Ist jetzt natürlich kein Weltuntergang und bei den Rewards würde ich diese Skript Anpassungen auch jährlich machen. Man muss es aber nicht unbedingt so kompliziert machen wenn es vielleicht auch einfacher geht. Meine bevorzugte Datenquelle wäre eigentlich die Node selber. Es gibt ja eine API. So eine API hat den Vorteil, dass das Format sich eher nicht ändert sodass ein einmal geschriebenes Skript immer funktionieren würde. Auch macht man sich nicht abhängig von irgendwelchen Diensten, die dann später eventuell auf die Idee kommen eine Paywall hinzuzufügen.

Lange Rede kurzer Sinn: Bevor du dich zu sehr in die CSV Datei verliebst vielleicht kurz nochmal prüfen ob die Node die Daten inzwischen per API rausgibt. Vor 6 Monaten hat sie das noch nicht getan aber ich vermute mal mit den neusten Versionen sieht das jetzt anders aus.

  • Thanks 1
Link to comment
Share on other sites

vor 18 Minuten schrieb skunk:

Ich bin mir nicht ganz sicher ob das hier in diesem Thread überhaupt eine Rolle spielt. Möchtest du beim ETH2 Staking einsteigen? Falls nein dann würde ich vorschlagen du machst einen eigenen Thread dafür auf und besprichst das dort. Beim ETH2 Staking ist das mit der 10 Jahresfrist eher weniger ein Problem weil von uns hier vermutlich keiner vor hat in naher Zukunft das Staking zu beenden. Ich habe so oder so nicht vor meine ETH in den nächsten Jahren zu verkaufen. Da stört mich die 10 Jahresfrist erstmal weniger.

Steuerthema habe nicht ich angefangen, und Danke nein ich will nicht einsteigen, mein Validator läuft erfolgreich seit 6 Monaten.

Link to comment
Share on other sites

vor 13 Stunden schrieb Muesli2k:

Steuerthema habe nicht ich angefangen, und Danke nein ich will nicht einsteigen, mein Validator läuft erfolgreich seit 6 Monaten.

6 Monate hast du noch bevor du dir um die Steuern sorgen machen musst. Vor einer Situation musst du dich in Acht nehmen. Wenn der ETH Preis stark steigt dann läufst du Gefahr eine hohe Steuer bezahlen zu müssen ohne die ETH verkaufen zu können. Im Zweifel den Validator besser abschalten weil andernfalls eine Privatsinsolvenz droht. Du musst voraussichtlich die Steuern für die 3,6 ETH Jahresgewinn aus eigener Tasche bezahlen. Die daraus resultierende Steuerschuld besser rechtzeitig beiseite legen. Ich fange normalerweise im Dezember mit den erste Proberechnungen an damit ich weiß auf welchen Betrag ich mich einstellen muss.

Link to comment
Share on other sites

vor 18 Stunden schrieb Cookies statt Coins^^:

Jedoch die 32 ETH, die ich für das Staking einsetze, diese muss ich nun 10 Jahre halten bevor ich diese wieder verkaufe, denn sonst muss ich darauf beim Verkauf auch wieder Steuern bezahlen.
So habe ich zumindest bisher die Steuer bei Staking verstanden. Falls hier noch ein gravierender Fehler in meiner Betrachtung ist, dann bitte melden 😄

Das ist ja bisher nur ein Gesetzentwurf, sprich aktuell musst du deine ETH für Steuerfreiheit noch keine 10 Jahre halten...

Link to comment
Share on other sites

vor einer Stunde schrieb skunk:

Im Zweifel den Validator besser abschalten weil andernfalls eine Privatsinsolvenz droht.

lass mal die Katze im Sack, wer sich einen Validator mit 32ETH leisten kann, wird auch die Steuern aufbringen, wie @user2748 schon richtig sagt, ist es zudem alles noch ein Gesetzesentwurf. Ich zahle meine Steuern auf den Gewinn, soweit schreibt es das Gesetz vor, alles andere was du hier betreibst ist Schwarzmalerei... 

Link to comment
Share on other sites

vor 2 Stunden schrieb Muesli2k:

lass mal die Katze im Sack, wer sich einen Validator mit 32ETH leisten kann, wird auch die Steuern aufbringen

Nein. Ich habe meine 32 ETH bei einem Preis von 200€ gekauft. Das heißt noch lange nicht, dass ich auch die Steuern bezahlen kann, die die Rewards bei dem 100er Fachen Preis verursachen. Verkaufen kann ich die 32 ETH nicht sobald sie eingelockt wurden. Das hier ist ein One Way Trip daher die Warnung. Erinnere dich einfach an die Warnung falls der ETH soweit steigt, dass die Steuerzahlung für dich schmerzhaft werden würde.

vor 2 Stunden schrieb Muesli2k:

wie @user2748 schon richtig sagt, ist es zudem alles noch ein Gesetzesentwurf.

Der Gesetzesentwurf ändert nur etwas an der 10 Jahres Frist und es ist fraglich ob das überhaupt Bestand hat. Nehmen wir mal an der Gesetzesentwurf wird komplett gekippt und wir versteuern so wie letztes Jahr. Dann gilt meine Warnung weiterhin weil die sowohl nach der alten als auch nach der neuen Regelung zutreffend ist.

vor 2 Stunden schrieb Muesli2k:

Ich zahle meine Steuern auf den Gewinn, soweit schreibt es das Gesetz vor, alles andere was du hier betreibst ist Schwarzmalerei...

Es ist nur eine Warnung in welchen Situationen die Steuerzahlung auf Staking Rewards unangenehm werden. Das hat nichts mit Schwarzmalerei zu tun. Wir sind alle erwachsen und sollten genau wissen welche Steuern wir am Ende zu zahlen haben und wo die Staking Rewards in der Steuererklärung eingetragen werden. Ich bin einfach nur darauf vorbereitet bei extremen Kurssteigerungen die Reisleine zu ziehen bevor ich die Steuern auf die Staking Rewards nicht mehr aus eigener Tasche bezahlen kann. Was hat es mit Schwarmalerei zu tun wenn man sich schon im Laufe des Jahres Gedanken darüber macht welche Summe man am Jahresende wird bezahlen müssen?

Edited by skunk
Link to comment
Share on other sites

Am 4.7.2021 um 21:16 schrieb skunk:

Lange Rede kurzer Sinn: Bevor du dich zu sehr in die CSV Datei verliebst vielleicht kurz nochmal prüfen ob die Node die Daten inzwischen per API rausgibt. Vor 6 Monaten hat sie das noch nicht getan aber ich vermute mal mit den neusten Versionen sieht das jetzt anders aus.

Wie gesagt habe ich das Prysm-Projekt die letzten Monate nur noch sehr wenig beobachtet. Was ich aber raus gefunden habe ist, dass die API scheinbar noch in der Entwicklung ist: https://docs.prylabs.network/docs/how-prysm-works/ethereum-2-public-api

Die einzige Abfrage, die bisher auf dem Beacon-Node funktioniert, ist scheinbar folgende: http://127.0.0.1:3500/eth/v1alpha1/beacon/chainhead
Hier bekommt man aber nur die letzten Daten zur Beacon-Chain. Keine Daten vom eigenen Validator. Ist also aktuell noch nicht wirklich hilfreich.

Du könntest hingegen die Api von BeaconCha.in nutzen: https://beaconcha.in/api/v1/docs/index.html
Jedoch ist man dann wieder sehr abhängig von diesem Anbieter. Aber so könntest du dir hier am Beispiel vom Validator #1234 die Änderung des Guthabens für die letzten 100 Epochen ausgeben (d.h. die letzten 10 Stunden): https://beaconcha.in/api/v1/validator/1234/balancehistory

 

Aber an deiner Stelle, wenn dir die Tageswerte reichen, würde ich folgendes machen:
1.) Nimm die CSV-Datei mit den täglichen Staking-Erträge, die du auf BeaconCha.in bekommst: https://beaconcha.in/validator/1234/stats
2a.) Schreibe dir ein Skript, welches täglich den ETH-Euro-Preis ermittelt (siehe mein Beispiel unten)
2b.) Alternativ: Finde eine Seite, welche die historischen ETH-Euro-Kurse bereitstellt, z.B. hier für die letzten 31 Tage: Ethereum - Euro historische Kurse | finanzen.net
3.) Öffne die CSV-Datei (aus 1.) mit Excel und füge zum passenden Tag in einer neuen Spalte den ETH-Euro-Preis (aus 2a. oder 2b.) hinzu.
4.) Dann muss man in Excel nur noch die Spalte mit dem Einkommen ("Income") als deutsche Kommazahl umformatieren, und schon kannst du in einer neuen Spalte die Summe berechnen
5.) Zum Schluss berechnet dir Excel die Jahres-Gesamtsumme über die einzelnen Tageswerte und fertig ist der Eintrag für die Steuererklärung!

Würde dann in etwa so aussehen:
SteuerMitCsv2.thumb.png.0c2a7444b3aa9fb9f388595ed999c63b.png

 

Und mit nachfolgendem Python-Skript kannst du dir aus Coinmarketcap den jeweils aktuellen ETH-Euro-Wert holen. Wenn du dieses Skript zeitgesteuert einmal täglich ausführst, bist du etwas unabhängiger und hast am Jahresende deine eigenen Daten für die Steuererklärung.

Das Hauptskript: (Die Wiederholung muss natürlich individuell angepasst werden, aktuell würden die Daten alle 10 Minuten abgegriffen werden)

#!/usr/bin/python
# -*- coding: utf-8 -*-

#
# Creation:    02.01.2021  
# Last Update: 
#


from time import sleep		#Für die Sleeps
from datetime import datetime, timedelta
import sys, traceback		#Zur detaillierten Fehlerauswertung/ Verarbeitung im Exception-Block
import os

import ApiCoinMarketCap

def main():
    Logdatei = "ETH-Kurs.csv"

    try:
        print datetime.now(), 'Programmstart:'
        while True:

            Preis = ApiCoinMarketCap.GetEthPrice()
            Timestamp = time.localtime()
            Jahr, Monat, Tag, Stunden, Minuten, Sekunden = Timestamp[0:6]
            Zeitpunkt = "%04i-%02i-%02i %02i:%02i:%02i" % (Jahr, Monat, Tag, Stunden, Minuten, Sekunden)

            #print ("Logdatei öffnen um neue Zeile anzuhängen")
            Datei = open (Logdatei, "a")
            Datei.write (Zeitpunkt + " ; " + str(Preis) + "\n")
            Datei.close()
            #print ("Eintrag in Logdatei geschrieben")

            print 'Warte 10 Minuten bis um..', (datetime.now() + timedelta(seconds=600))
            sleep(600)		#10 Minuten warten


    except KeyboardInterrupt:     # Mit STRG+C beendet
        print("Programm vom User mit STRG+C gestoppt")
        return(0)

    except Exception as e:
        print(e)
        print("Unbekannter Fehler.")
        return("Error#03: Unknown error in Main")



if __name__ == "__main__":
    main()

 

Und hier das dazugehörige Skript "ApiCoinMarketCap.py" zum eigentlichen Abruf der Daten aus Coinmarketcap:

#!/usr/bin/env python
# -*- coding: utf-8 -*- 

#
# Creation:    02.01.2021  
# Last Update: 14.01.2021  Error-Handling "except" erweitert und stabilisiert
#


#This example uses Python 2.7 and the python-request library.
#https://coinmarketcap.com/api/documentation/v1/#section/Quick-Start-Guide

from requests import Request, Session
from requests.exceptions import ConnectionError, Timeout, TooManyRedirects
import json

def GetEthPrice():

  url = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest'
  parameters = {
    'slug':'ethereum',
    'convert':'EUR'
  }
  headers = {
    'Accepts': 'application/json',
    'X-CMC_PRO_API_KEY': 'XXXXXXX-XXXX-XXXX-XXX-XXXXXXX',
  }

  session = Session()
  session.headers.update(headers)

  try:
    response = session.get(url, params=parameters)
    data = json.loads(response.text)
    #print(data)
    Preis = str(data.get('data').get('1027').get('quote').get('EUR').get('price'))
    print ("Preis = " + Preis)
    #for key,value in data.items():
    #  print str(key) + " => " + str(value)
    return(Preis)

  except (ConnectionError, Timeout, TooManyRedirects) as e:
    print(e)
    print("Vermutung: Keine Verbindung zu Coinmarketcap-Api möglich.")
    return("Error#01: Connection lost")

  except (AttributeError) as e:
    print(e)
    print("Vermutung: Leerer Inhalt abgerufen.")
    return("Error#02: Empty values")

  except Exception as e:
    print(e)
    print("Unbekannter Fehler.")
    return("Error#03: Unknown error")


if __name__ == "__main__":
    GetEthPrice()

Achja, eine wichtige Info zu obigem Skript:
Den Api-Key habe ich hier durch "XXXXX" ersetzt. Jeder muss sich natürlich selbst bei Coinmarketcap anmelden um einen individuellen Api-Key zu erhalten.
Ich habe festgestellt, dass mit dem kostenlosen Konto ein Abruf alle 10 Minuten möglich ist, ohne das tägliche und monatliche Limit zu überschreiten.

 

Edited by Cookies statt Coins^^
  • Thanks 1
Link to comment
Share on other sites

wieso macht ihr euch das Leben so unnötig kompliziert ?

mit einem klick auf https://beaconcha.in/rewards gibt es eine komplette Auswertung 😆 zur Wahl stehen PDF und CSV Export...

Man kann sich aber natürlich auch Wochen und Monate mit Scripts und API`s beschäftigen um am Ende des Tages aufs selbe Ergebniss zu kommen.... 

https://i.ibb.co/3k2TrsG/income.jpg

 

 

 

  • Love it 1
Link to comment
Share on other sites

vor 48 Minuten schrieb Muesli2k:

mit einem klick auf https://beaconcha.in/rewards gibt es eine komplette Auswertung 😆 zur Wahl stehen PDF und CSV Export...

Das hatten wir denke ich bereits erklärt.

1. Den Service gibt es erst sein ein paar Wochen. Anfang des Jahres war der CSV Export noch nicht vorhanden.

2. Würden wir es gern vermeiden uns Abhängig zu machen von einem Service, der am Jahresende plötzlich Geld verlangen könnte.

3. Die gängigen Steuertools können die CSV Datei aktuell noch nicht importieren. Wir benötigen so oder so ein Skript um die Datei in ein Format umzuwandeln was das Steuertool auch importieren kann.

4. CSV Datei ist nicht die beste Datenquelle. Das Format der CSV Datei könnte sich ändern. Ein Skript was über eine API geht sollte stabiler und damit besser sein.

5. Für den Anfang sind Tagessummen ausreichend. Ich hätte aber gern die Möglichkeit dem Finanzamt im Notfalls auch Einzelbuchungen auf den Tisch zu klatschen. Man weiß nie wie weit das Finanzamt das Spiel treiben möchte daher bin ich gern vorbereitet.

Link to comment
Share on other sites

  • 2 weeks later...
Am 7.7.2021 um 09:42 schrieb Muesli2k:

mit einem klick auf https://beaconcha.in/rewards gibt es eine komplette Auswertung 😆 zur Wahl stehen PDF und CSV Export...

Sehr schön, diese Auswertung ist neu, die kannte ich auch noch gar nicht. Damit vereinfacht sich die Steuerauswertung enorm. Per Knopfdruck hat man alle Infos, die man benötigt.

 

Am 7.7.2021 um 10:37 schrieb skunk:

3. Die gängigen Steuertools können die CSV Datei aktuell noch nicht importieren.

Ich würde das Staking separat von den anderen Krypto-Geschäfte für die Steuer abrechnen. Einfach das Staking-Endergebnis fürs komplette Jahr ermitteln und dies dann in die Steuererklärung eintragen. So spart man sich auch noch das Einlesen in ein Steuer-Tool. Außerdem stehen in der Steuererklärung die Staking-Erträge eh an einer anderen Stelle als die Trading-Eträge, somit kann man beides unabhängig voneinander abrechnen.

 

Am 7.7.2021 um 10:37 schrieb skunk:

2. Würden wir es gern vermeiden uns Abhängig zu machen von einem Service, der am Jahresende plötzlich Geld verlangen könnte.

Genau, das ist der wichtigste Punkt. Ich möchte mich nächstes Jahr auch nicht darauf verlassen müssen, dass es dann diesen Service noch kostenlos gibt. Daher sammle ich alle nötigen Daten selbst. Aber diese Auswertung von beaconcha.in/rewards werde ich dann zusätzlich als Backup nutzen bzw. dann am Jahresende vergleichen, ob meine Berechnung zum selben Ergebnis kommt.

In meiner letzten Nachricht vom 06. Juli habe ich das Python-Skript gepostet, mit dem ich alle 10 Minuten den aktuellen ETH-EUR-Kurs ermittle und in eine Datei schreibe.
Und darauf aufbauen durchlaufe ich mit nachfolgendem Skript zuerst Zeile für Zeile die zuvor erstellte Datei mit den Kursen und suche mir für jeden Eintrag (Datum&Kurs) in einer weiteren Schleife aus der Logdatei des Validators ein dazu zeitlich passende Änderung des Staking-Guthabens. Falls es fürs jeweilige Zeitintervall eine Guthabensänderung in der Logdatei des Validators gibt, dann multipliziere ich die dazugewonnen (oder verlorenen) ETH mit dem zuletzt eingelesenen ETH-EUR-Kurs, um somit den jeweiligen Euro-Wert zu erhalten, welcher dann in eine weitere CSV-Datei geschrieben wird. Summiert man dann am Ende in Excel sämtliche Euro-Werte für das gewünschte Jahr, so erhält man den Gesamt-Staking-Ertrag in Euro, den ich dann in der Steuererklärung angeben werde.
So sieht dann mein zweites Skript aus:

#!/usr/bin/python
# -*- coding: utf-8 -*-

#
# Creation:    16.01.2021  
# Last Update: 
#

import linecache
import re

def main():

    sLogdateiValidator = "LogValidator.txt"	#Dies ist die Datei, die vom Prysm-Validator geeriert wird und protokolliert u.a. die Balance-Änderung im Validator
    sLogdateiKurswert = "Logging.log"	#Diese Datei wurde mit dem vorherigem Skript erzeugt und enthält alle 10 Minuten den aktuellen ETH-Wert
    sCsvDateiOutput = "Ergebnis.csv"	#In diese Datei wird die Auswertung dieses Skriptes geschrieben.

    print ("Finde Startwert ('oldBalance') in Validator.log")
    iZeilennummerValidatorLog = 0
    rDateiLogValidator = open (sLogdateiValidator, "r")
    for line in rDateiLogValidator:
        iZeilennummerValidatorLog = iZeilennummerValidatorLog + 1
        items = re.findall("oldBalance=[0-9]+\.[0-9]+", line)	#z.b: oldBalance=33.097292113
        #print items[0]
        if len(items) > 0:		#d.h. wenn der RegEx einen Treffer findet, dann werden diese Ergebnisse nach "Items" geschrieben. Aber nur der erste Inhalt (Index 0) ist relevant und wird erneut aufgeteilt..
            data = items[0].split("=" , 2)
            print data[0] + "=" + data[1] + " in Zeile: " + str(iZeilennummerValidatorLog)
            OldBalanceWert = float(data[1].strip())
            break
    rDateiLogValidator.close()

    print ("Erstelle CSV-Datei für Ergebnisse: " + sCsvDateiOutput)
    wDateiCsvOutput = open (sCsvDateiOutput, "a")
    wDateiCsvOutput.write ("ZeitpunktKurswert;KursWert[Euro/ETH];ZeitpunktValidatorNewBalance;ValidatorOldBalance[ETH];ValidatorNewBalance[ETH];ZuwachsValidator[ETH];ZuwachsValidator[Euro];\n")	#Schreibt die Überschrift der CSV-Datei

    print ("Logdatei mit Kurswerten öffnen")
    rDateiKursWert = open (sLogdateiKurswert, "r")
  
    for line in rDateiKursWert:
        #print(line.strip())  #Die Funktion  'strip' entfernt Leerzeichen am Anfang und Ende
        data = line.split(";" , 2)
        if len(data) > 1:	#d.h. es existieren mindestens zwei Elemente: Datum + Kurswert
            if data[1].find("None") == -1 \
            and data[1].find("Error") == -1:	#d.h keiner der Begriffe darf in der Zeile enthalten sein
                KursZeitpunkt = data[0].strip()
                KursWert = float(data[1].strip())
                sKursWertString = data[1].strip().replace(".",",")	#Ersetzt Punkt durch Komma, also: 1000.99 -> 1000,99

                print (KursZeitpunkt + " => Kurswert=" + sKursWertString)

                #Suche im Validator-Log nach passendem Wert (anhand des Datums), in dem "newBalance" enthalten ist:
                print "Find next 'NewBalance' in Validator.log:"
                Weiter = False

                while (Weiter == False):
                    sZeileninhaltValidatorLog = linecache.getline(sLogdateiValidator, iZeilennummerValidatorLog).strip()
                    items = re.findall("newBalance=[0-9]+\.[0-9]+", sZeileninhaltValidatorLog)
                    #print items[0]
                    if len(items) > 0:		#d.h. wenn der RegEx einen Treffer findet, dann werden diese Ergebnisse nach "Items" geschrieben. Aber nur der erste Inhalt (Index 0) ist relevant und wird erneut aufgeteilt..
                        data = items[0].split("=" , 2)
                        #print data[0] + "=" + data[1] 
                        NewBalanceWert = float(data[1])
                        #print "Zeile=" + str(iZeilennummerValidatorLog)
                        NewBalanceZeitpunkt = sZeileninhaltValidatorLog[6:25]
                        print NewBalanceZeitpunkt + " -> NewBalance=" + str(NewBalanceWert) 
                        if NewBalanceZeitpunkt > KursZeitpunkt:
                            Weiter = True
                        else:
                            #Berechnung der Balance durchführen bzw in CSV schreiben: KursZeitpunkt;NewBalanceZeitpunkt;KursWert;(OldBalanceWert - NewBalance);KursWert*(NewBalanceOld - NewBalance);
                            wDateiCsvOutput.write (KursZeitpunkt+";"+sKursWertString+";"+NewBalanceZeitpunkt+";"+"{:.10f}".format(OldBalanceWert).replace(".",",")+";"+"{:.10f}".format(NewBalanceWert).replace(".",",")+";"+"{:.10f}".format(NewBalanceWert-OldBalanceWert).replace(".",",")+";"+"{:.15f}".format(KursWert*(NewBalanceWert-OldBalanceWert)).replace(".",",") +";\n")
                            OldBalanceWert = NewBalanceWert
                    if Weiter == False:
                        iZeilennummerValidatorLog = iZeilennummerValidatorLog + 1

    rDateiKursWert.close()
    wDateiCsvOutput.close()

    return 0



if __name__ == "__main__":
    main()

Damit dieses obige Skript hier funktioniert, braucht man die Logdatei des Validators. Die erhält man, wenn man den Validator mit entsprechendem Parameter aufruft (z.B.: "log-file: /mnt/ssd/Logging/LogValidator.txt") oder wenn der Dienst als Service läuft und dabei die Consolen-Ausgabe in eine Textdatei umleitet (z.B: "StandardOutput=append:/mnt/ssd/Logging/LogValidator.txt").

Naja, jetzt wenn ich das nach einem halben Jahres alles nochmal beschreibe, klingt es rückblickend schon etwas kompliziert. Aber damals hatte ich noch mehr Zeit als heute und das Skripten muss einem auch Spaß machen. Ansonsten einfach die vorgeschlagene Lösung von @Muesli2k nehmen (siehe oben) und hoffen, dass der Service dauerhaft verfügbar bleibt.

Link to comment
Share on other sites

  • 1 month later...

Ich hab jetzt seit geraumer Zeit das Problem das mir auf dem Validator der Speicherplatz auszugehen scheint, habt ihr vielleicht eine Idee

woran das liegen könnte ? Eigtl. hab ich 1TB als ausreichend groß empfunden.. aber meine Belegung selbst nach kleineren Aufräumarbeiten

liegt schon wieder bei 99% der Platte...

OS ist ein Ubuntu Desktop auf einem Intel NUC i7 /16GB RAM, 1TB Samsung nvme SSD

 

 

Edited by Muesli2k
Link to comment
Share on other sites

vor 11 Minuten schrieb Muesli2k:

Ich hab jetzt seit geraumer Zeit das Problem das mir auf dem Validator der Speicherplatz auszugehen scheint, habt ihr vielleicht eine Idee

woran das liegen könnte ? Eigtl. hab ich 1TB als ausreichend groß empfunden.. aber meine Belegung selbst nach kleineren Aufräumarbeiten

liegt schon wieder bei 99% der Platte...

OS ist ein Ubuntu Desktop auf einem Intel NUC i7 /16GB RAM, 1TB Samsung nvme SSD

Hier mal meine Werte:

# du -h -d 1
484G    ./geth
2,0G    ./prometheus
37G     ./geth-testnet
3,8M    ./grafana
128G    ./beacon-testnet
241G    ./beacon
96K     ./validator
236K    ./validator-testnet

Der Mainnet Validator ist bei mir praktisch leer weil ich auch weiterhin noch zurückhaltend bin. Interessant sind hier noch die beacon nodes. Da ist jeweils 100GB slasher Datenbank dabei, die man durchaus einsparen könnte. Ansonsten irgendwann eine Runde Geth prunen: https://gist.github.com/yorickdowne/3323759b4cbf2022e191ab058a4276b2

  • Thanks 1
Link to comment
Share on other sites

Danke, dann muss ich wohl in den sauren Apfel beißen und die Downtime in kauf nehmen, bevor geth noch größer wird.

man braucht so wie ich das sehe ja auch mind 25GB freien Speicher, das bekomme ich gewaltsam gerade noch so hin. hab alles gelöscht was auf dem Validator nichts zu suchen hat...

Vielen Dank @skunk für den Tipp, ich werde mal berichten wie es ausging.. ich hoffe ich kann das heute Abend gleich anstoßen... 

Link to comment
Share on other sites

vor einer Stunde schrieb Muesli2k:

Danke, dann muss ich wohl in den sauren Apfel beißen und die Downtime in kauf nehmen, bevor geth noch größer wird.

Downtime hast du nicht mal. Die ETH1 Node wird nur für die Deposits benötigt und es gibt einen zeitlichen Versatz von mehreren Stunden zwischen Deposit und Aktivierung neuer Validatoren. Wenn du deine ETH1 Node offline nimmst, wird dein Validator für ein paar Stunden weiter arbeiten wie bisher. Erst mit einigen Stunden Verzögerung würde dein Validator in eine unangenehme Situation kommen in der er nicht mehr sagen kann ob ein Block mangels Deposit eventuell ungültig ist.

Davon unabhängig kannst du einfach Infura als Backup nehmen. Ich habe mein Setup soweit getrieben, dass nur mein Validator laufen muss. Sowohl die ETH1 Node als auch die Beacon Node können bei mir dauerhaft ausfallen und der Validator würde einfach mit Infura weiter machen.

  • Like 1
Link to comment
Share on other sites

Du hast Recht, ich habs auch gerade gemerkt.. der Validator läuft Problemlos weiter.. Ich kenn mich leider nicht mit allen Prozessen so gut aus,

ich habe nur immer Gedacht das wenn ich Geth stoppe, der Rest auch nimmer funktioniert.. wieder was gelernt.. 👍

Link to comment
Share on other sites

@skunk Mega, habs hinbekommen, vielen Dank!!!!  😁

1000 GB — 489 GB frei (51,1% belegt)

Iterated snapshot                        accounts=145,437,019 slots=516,073,956 elapsed=1h3m36.400s

Pruned state data                        nodes=1,257,456,615 size=356.46GiB elapsed=2h2m31.075s

Database compaction finished             elapsed=2h31m32.167s

State pruning successful                 pruned=356.46GiB elapsed=5h39m17.399s
 

 

 

 

Link to comment
Share on other sites

Gerade eben schrieb Muesli2k:

@skunk Mega, habs hinbekommen, vielen Dank!!!!  😁

1000 GB — 489 GB frei (51,1% belegt)

Iterated snapshot                        accounts=145,437,019 slots=516,073,956 elapsed=1h3m36.400s

Pruned state data                        nodes=1,257,456,615 size=356.46GiB elapsed=2h2m31.075s

Database compaction finished             elapsed=2h31m32.167s

State pruning successful                 pruned=356.46GiB elapsed=5h39m17.399s
 

 

 

 

Darfst du dann in ein paar Monaten wiederholen :D 

Link to comment
Share on other sites

Fällt die Geth Geschichte nicht weg wenn auf ETH 2.0 umgestellt wird?

Im Dezember soll ja der Merge kommen, aber danach ??

...ansonsten wäre tatsächlich die Überlegung ob man nicht auf eine größere Platte gehen sollte? 2TB, 4TB...?

Edited by Muesli2k
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.