Zum Inhalt springen

Eigenen Miner programmieren.


Roal

Empfohlene Beiträge

Guten Abend, 

ich programmiere selber schon länger in verschiedenen Programmiersprachen und wollte nun selber einen eigenen Programmieren.

Das ganze sehr einfach gehalten, sodass kein Pool support bei ist (eventuell brauche ich aber doch einen, da ich nicht die bitcoin chain geladen habe, oder ich weiche auf einen altcoin aus). Das ganze würde als test für mich dienen und mich würde es interessieren, ob ich an die Geschwindigkeit von bekannten minern komme. 

 

Wenn ich es richtig verstehe muss ich doch  nur die JSON Daten anfordern, konvertieren und diese hashen. Dementsprechend immer die nounce erhöhen und schauen, ob ich genug Nullen am Anfang von dem sha256 string habe. Sonst das ganze wieder.

Weiter unten sind zwei links, bei denen ich mich ein bisschen erkundigt habe. Dort ist sogar ein stratum support mit bei, aber alles in python und ich weiß nicht, ob dies die beste Lösung ist, da die meisten miner in C/C++ laufen. Dies sollte auch schneller sein als python.

 

Vielleicht ist ja ein Dev oder Leute, die sich mit dem mining/programmieren auskenne da die mir helfen können.

 

Danke schonmal.

http://www.righto.com/2014/02/bitcoin-mining-hard-way-algorithms.html

https://github.com/philipperemy/my-first-bitcoin-miner

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 40 Minuten schrieb Roal:

Vielleicht ist ja ein Dev oder Leute, die sich mit dem mining/programmieren auskenne da die mir helfen können.

Wo bei denn? Du hast keine Frage gestellt.

Mach es doch einfach so, wie du geschrieben hast, das schaut ja erst mal gut aus.

Beim programmieren kann ich dir nur in Java helfen.  Die Syntax beim BTC Mining ist gut dokumentiert und nicht all zu komplex.

Bearbeitet von MixMax
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 46 Minuten schrieb PeWi:

Ich bin einfach neugierig: Warum?

Die Akzeptanz und Verbreitung ist nicht mer so doll. Viele API's und Treiber haben gar keine Java Schnittstelle mehr. Zu dem hat Java üble Einschränkungen um die sich keiner mehr kümmert. Z.B. gibt es keine 64bit Integer und damit nur sehr kurze und eingeschränkte 32bit Arrays.

  • Thanks 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

29 minutes ago, MixMax said:

Die Akzeptanz und Verbreitung ist nicht mer so doll. Viele API's und Treiber haben gar keine Java Schnittstelle mehr.

Vor knapp 20 Jahren hatte ich beruflich ein paar Jahre mit Java zu tun, ich war auch nicht ganz glücklich damit. Vor allem hatte ich das Gefühl, dass Java und sein Umfeld in rasendem Tempo komplizierter und komplexer wurden. Bei den EJBs hat mich dann endgültig die Begeisterung verlassen, und ich war nicht unglücklich, dass sich unsere Wege trennten.

Dass Akzeptanz und Verbreitung von Java sinken, hätte ich nicht gedacht. Kann man mal sehen, auch "große Namen" sind nicht gefeit ...

34 minutes ago, MixMax said:

Zu dem hat Java üble Einschränkungen um die sich keiner mehr kümmert. Z.B. gibt es keine 64bit Integer und damit nur sehr kurze und eingeschränkte 32bit Arrays.

Oops, das ist heutzutage natürlich übel.

Spielst du mit dem Gedanken, auf eine andere Sprache zu wechseln?

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 7 Minuten schrieb PeWi:

Spielst du mit dem Gedanken, auf eine andere Sprache zu wechseln?

Oh ja,  und ich hab schon damit begonnen.

Je nach dem wie tief ma da drinn steckt, ist das ne Menge Arbei. Es gibt unglaublich viele Bibliotheken mit nen Haufen Methoden die man alle gelernt hat, ist echt nen Trauerspiel 😞

 

Bearbeitet von MixMax
  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

1 hour ago, Adriana Monk said:

Und wenn Du Python nimmst, weisst Du, dass da hinten und vorne nichts zusammenpasst. 

Das Problem hatte ich nie.

Kann es sein, dass deine Erfahrungen mit unzusammenpassendem Python noch aus der Umbruchzeit von Python2 nach Python 3 stammen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hier geht ja gut was ab :D

Also das von mir war eine indirekte Frage, wenn daran was falsch ist gerne korrigieren.

 

Und ja ich muss zustimmen, dass meiner Meinung nach Java nix mehr Wert ist und nun aussterben wird. Nur leider will das mein Professor nicht verstehen und Unterrichtet das 😕

 

Von Matlab bin ich auch nicht überzeugt.. Arrays die bei 1 starten, alles ist eine Matrix, komische Syntax. Ist nicht so meins, muss ich aber wegen meinem Studium auch durch.

Python ist sehr interessant, da es alles kann und das sehr performant.

 

Ich bleibe aber bei meinen C Sprachen sowie Javascript + die ganzen Frameworks, da es immer gefragt ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

1 hour ago, MixMax said:

Ich werde meine C Kentnisse ausbauen und mich danach an C++ ganz gescheidig ranpirschen.

Heutzutage noch mit C? 😉

Ich habe viele Jahre in C programmiert und hätte auch bei der Entwicklung meines ersten Bots zum vertrauten C greifen wollen. Was mich davon abgebracht hat, war, dass ich auf die Schnelle keine einfache Lib finden konnte, mit der ich unaufwändig HTTPS-Abfragen hätte machen können. Bei "heutigen" Sprachen gehört das dagegen zur Grundausstattung, weswegen ich dann letztlich bei Python gelandet bin.

Was mich inzwischen an Python nervt, ist zum einen die schwache Geschwindigkeit bei eigener Arithmetik und die aufwändige Weitergabe von Programmen (ganz extrem, wenn man den Source nicht offenbaren will).

Deswegen liebäugle ich seit Monaten mit Go als Mittelding zwischen C und Python, aber voller Performance und einfachster Weitergabe (ein Exe - fertig). Nachteil ist, dass es bei Go weniger Libs für Gebiete außerhalb der Standardumgebung gibt als für Python (z.B. Statistik).

Rust scheint auch interessant zu sein. Vor allem das Prinzip des Besitzens von Variablen, wodurch bereits der Compiler nahezu alle Speicherfehler entdecken können soll - das hat mir bei C schon öfter schmerzlich gefehlt ... 😂

Nochmal zu C und C++ - ich habe schon öfter gelesen, dass eine C-Vorprägung hinderlich für gutes, modernes C++ sein soll. (Mangels eigener C++-Erfahrungen kann ich das nicht beurteilen.)

Link zu diesem Kommentar
Auf anderen Seiten teilen

3 minutes ago, Roal said:

Python ist sehr interessant, da es alles kann und das sehr performant.

Dem ersten Teil stimme ich gerne zu.

Bei zweiten nur, wenn du die Aufgaben an Libs o.ä. delegieren kannst - wenn du die selber in Python ausprogrammieren musst, ist die Geschwindigkeit oft nicht so toll bis mau verglichen mit echten Compilersprachen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 32 Minuten schrieb Roal:

Von Matlab bin ich auch nicht überzeugt.. Arrays die bei 1 starten,

 Um Himmels willen, was ist das denn für den Blödsinn 😂

vor 28 Minuten schrieb PeWi:

Heutzutage noch mit C? 😉

Ich habe viele Jahre in C programmiert und hätte auch bei der Entwicklung meines ersten Bots zum vertrauten C greifen wollen. Was mich davon abgebracht hat, war, dass ich auf die Schnelle keine einfache Lib finden konnte, mit der ich unaufwändig HTTPS-Abfragen hätte machen können. Bei "heutigen" Sprachen gehört das dagegen zur Grundausstattung, weswegen ich dann letztlich bei Python gelandet bin.

Oh ja, du glaubst nicht wie viele Projekte noch in C sind und wenn man da mal reinschauen will, oder was anpassen will, ist das schon nützlich wenn man bissle C lesen kann. C ist auch für ganz grundlegende Hardware nahe Berechnungen nützlich. Z.B. wenn man ne extrem schnelle Hashfunktion schreiben möchte, SHA256 zB. (Hm wer wollte so was hier haben? :D) Also immer wenn es um Performance geht, würde ich mich für C entscheiden. Viele Treiber sind auch noch in C und wenn man die einbinden will, kann man da einfacher mit C ran.

Und natürlich ist mir klar, wo C endet, komplexe Objektorientierte Projekte würde ich damit auch nicht beginnen.

vor 28 Minuten schrieb PeWi:

Nochmal zu C und C++ - ich habe schon öfter gelesen, dass eine C-Vorprägung hinderlich für gutes, modernes C++ sein soll. (Mangels eigener C++-Erfahrungen kann ich das nicht beurteilen.)

Kann ich auch nicht beurteilen, glaub ich auch nicht und geht mir am A.... vorbei. :D

 

Bearbeitet von MixMax
  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb Adriana Monk:

Das muss jeder selber entscheiden. Im Bereich Trading ist Matlab das Tool der Wahl, besonders wenn man viel Research macht. Die Sprache ist dazu gemacht, Matrix schnell zu verwalten. Auch sind die Toolboxen unschlagbar.

Für mich ist es halt im ersten moment eine komische Syntax und viel zu viel, als Student haben wir alles, was es dafür gibt

Link zu diesem Kommentar
Auf anderen Seiten teilen

11 hours ago, MixMax said:

Oh ja, du glaubst nicht wie viele Projekte noch in C sind

Im wissenschaftlichen Umfeld sollen noch diverse Fortran-Programme herumgeistern, so wie viele wesentliche Teile bei Banken immer noch in Cobol sind.

Insofern glaube ich das mit C sofort.

11 hours ago, Roal said:

Wenn man einen Atmega vor sich liegen hat, wirst du C benutzen.

Natürlich.

Mich - als Laien - wundert sowieso, dass man so kleine Dinger wie einen Arduino heutzutage mit Python programmiert/programmieren kann.

Bearbeitet von PeWi
Tippfehler
Link zu diesem Kommentar
Auf anderen Seiten teilen

30 minutes ago, MixMax said:

Selbst Teile von Bitcoin-Core sind in C programmiert.

C gefällt mir nach wie vor.

Ich mag es nur nicht mehr für Aufgaben verwenden, bei denen ich nach diversen Libs suchen müssten, deren "Tätigkeitsfeld" bei moderneren Sprachen bereits in der Standard-Runtime mitgeliefert wird.

  • Love it 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 4 Minuten schrieb PeWi:

C gefällt mir nach wie vor.

Ich mag es nur nicht mehr für Aufgaben verwenden, bei denen ich nach diversen Libs suchen müssten, deren "Tätigkeitsfeld" bei moderneren Sprachen bereits in der Standard-Runtime mitgeliefert wird.

Ganz genau so sehe ich es auch. :)

  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Es bezog sich eher auf "ich kenne" und die 10M Euro.

Das mit den High Frequency Trading ist mir bekannt. Wie viel Geld, da für wirklich ausgegeben wird, weis niemand.

 

Mich stört eigenlich nur diese ständige Angeberrei ab und an.

Bearbeitet von MixMax
Link zu diesem Kommentar
Auf anderen Seiten teilen

@Roal

Um mal was zum Thema beizutragen.  Hier ist nen Block Nr: 125552

Raw Block:  0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0f1fc122bc7f5d74df2b9441a42a146950401000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0804f2b9441a022a01ffffffff014034152a01000000434104d879d5ef8b70cf0a33925101b64429ad7eb370da8ad0b05c9cd60922c363a1eada85bcc2843b7378e226735048786c790b30b28438d22acfade24ef047b5f865ac000000000100000001ad6279669bcc8e3003267d97c9e364a9835ea7a5b53871d057783ef96f468d73000000008c4930460221009805aa00cb6f80ca984584d4ca40f637fc948e3dbe159ea5c4eb6941bf4eb763022100e1cc0852d3f6eb87839edca1f90169088ed3502d8cde2f495840acac69eefc9801410486477e6a23cb25c9a99f0c467c6fc86197e718ebfd41d1aef7cc3cbd75197c1f1aaba985b22b366a0729ccb8aa38277809d6d218cf4077ac9f29a953b5435222ffffffff0280f0fa02000000001976a9146f31097e564b9d54ebad662d5c4b5621c18ff52388ac007ddaac000000001976a9147228033b48b380900501c39c61da4ab453ca88e888ac0000000001000000035a19f341c42071f9cec7df37c4853c95d6aecc95e3bf19e3181d30d99552b8c9000000008a473044022025bca5dc0fe42aca5f07c9b3fe1b3f72113ffbc3522f8d3ebb2457f5bdf8f9b2022030ff687c00a63e810b21e447d3a57b2749ebea553cab763eb9b99e1b9839653b014104469f7eb54b90d90106b1a5412b41a23516028e81ad35e0418a4460707ae39a4bf0101b632260fb08979aba0ceea576b5400c7cf30b539b055ec4c0b96ab00984ffffffff5b72d3f4b6b72b3511bddd9994f28a91cc03212f200f71b91df13e711d58c1da000000008c493046022100fbef2589b7c52a3be0fd8dd3624445da9c8930f0e51f6a33d76dc0ca0304473d0221009ec433ca6a9f16184db46468ff39cafaa9643021e0c66a1de1e6f9a612092790014104b27f4de096ac6431eec4b807a0d3db3e9f9be48faab692d5559624acb1faf4334dd440ebf32a81506b7c49d8cf40e4b3f5c6b6e99fcb6d3e8a298174bd2b348dffffffff292e94738851718433a3168e43cab1c6a811e9a0f35b06b6cec60fea9abe0f43010000008a4730440220582813f2c2d7cbb84521f81d6c2a1147e5296e90bee05f583b3df108fdac72010220232b43a2e596cef59f82c8bfff1a310d85e7beb3e607076ff8966d6d374dc12b014104a8514ca51137c6d8a4befa476a7521197b886fceafa9f5c2830bea6df62792a6dd46f2b26812b250f13fad473e5cab6dcceaa2d53cf2c82e8e03d95a0e70836bffffffff0240420f00000000001976a914429e6bd3c9a9ca4be00a4b2b02fd4f5895c1405988ac4083e81c000000001976a914e55756cb5395a4b39369d0f1f0a640c12fd867b288ac000000000100000002c8a8356402b9271ae73116b3a613d0a489aa3441a72d4b53a98eb7837584e17a010000008a4730440220771ae3ed7f2507f5682d6f63f59fa17187f1c4bdb33aa96373e73d42795d23b702206545376155d36db49560cf9c959d009f8e8ea668d93f47a4c8e9b27dc6b330230141048a976a8aa3f805749bf62df59168e49c163abafde1d2b596d685985807a221cbddf5fb72687678c41e35de46db82b49a48a2b9accea3648407c9ce2430724829ffffffffa4f0111c9248f7360b6e3fed4856563eb0aa82b10303c14befae96ed4818c7fe010000008c49304602210087fc57bd3ce0a03f0f7a3300a84dde8d5eba23dfdc64b8f2c17950c5213158d102210098141fbd22da33629cfc25b84d49b397144e1ec6287e0edd53dbb426aa6a72ed014104dee3ef362ae99b46422c8028f900a138c872776b2fcffed3f9cd02ee4b068a6df516a50249ae6d8f420f9ce19cdfc4663961296a71cd62b04a2c8a14ff89b1d0ffffffff01c0e1e400000000001976a914e43f7c61b3ef143b0fe4461c7d26f67377fd207588ac00000000

Der Blockhash ist: 00000000000000001e8d6829a8a21adc5d38d0a473b144b6765798e61f98bd1d

Und so geht es :

  >>> hashlib importieren
 >>> header_hex = ("01000000" +
  "81cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a3080000000000" +
  "e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0f1fc122b" +
  "c7f5d74d" +
  "f2b9441a" +
  "42a14695")
 >>> header_bin = header_hex.decode ('hex')
 >>> hash = hashlib.sha256 (hashlib.sha256 (header_bin) .digest ()). digest ()
 >>> hash.encode ('hex_codec')
 "1dbd981fe6985776b644b173a4d0385ddc1aa2a829688d1e00000000000000"
 >>> Hash [:: - 1] .encode ('hex_codec')
 "00000000000000001e8d6829a8a21adc5d38d0a473b144b6765798e61f98bd1d" 

Ist hier genau beschrieben für diese Beispiel: https://translate.google.com/translate?hl=de&sl=en&u=https://en.bitcoin.it/wiki/Block_hashing_algorithm&prev=search

 

In Java sind das übrigens nur die paar Zeilen hier:

public byte[] getBlockHash()
{   
    byte[] h = new byte[80];
    System.arraycopy(blk, 0, h, 0, 80);   
    h = Calc.getHashSHA256(Calc.getHashSHA256(h));
    Convert.swapBytes(h);
    return h;
}

 

 

Und die Kurzversion ist:

Hash einfach 2 mal die ersten 80Bytes mit SHA256 und mach danach nen ByteSwap. Fertig. :)

Bearbeitet von MixMax
  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...

Wichtige Information

Wir haben Cookies auf Deinem Gerät platziert. Das hilft uns diese Webseite zu verbessern. Du kannst die Cookie-Einstellungen anpassen, andernfalls gehen wir davon aus, dass Du damit einverstanden bist, weiterzumachen.