BTC ETH Node API?

Hallo Leute,

ich verstehe etwas nicht und finde keine vernünftigen Infos. Und zwar habe ich bereits ein wenig mit IOTA rumgespielt. Um dort Anwendungen zu entwickeln, kann ich einfach die API jeglicher öffentlicher Node aufrufen und Requests hinschicken wie „getBalance“ um mir beispielsweise das Guthaben einer bestimmten Adresse zu holen. Nun bin ich davon ausgegangen, dass dies Standard bei allen Public Ledgers ist, allerdings scheint weder Bitcoin noch Ethereum oder Dash so eine API zu besitzen. Bei Bitcoin scheint es über RPC mit einer eigenen Node zu gehen, wenn diese im selben lokalen Netzwerk wie die zu entwickelnde Anwendung ist. Warum ist das so? Aus Sicherheitsgründen? Warum aber hat IOTA dann so eine API? Das ist doch unwahrscheinlich praktisch. Ich kann eine Anwendung entwickeln, die jeder benutzen kann, indem er einfach eine Node einträgt, welcher er vertraut. Die einzige Möglichkeit, die ich gefunden habe, ist über Drittanbieter wie blockchain.com. Solche APIs müsste ich aber fest einprogrammieren und könnte diese nicht einfach wechseln, weil andere Anbieter sicherlich eine andere Datenstruktur haben. Oder ist sowas doch bei Bitcoin etc. möglich und ich bin nur zu doof es zu finden?

Viele Grüße
Morten

Willkommen im Forum!

Ich will hier schon einmal im Vorhinein antworten, obwohl ich möglicherweise nicht das notwendige Wissen was IOTA und Dash betrifft habe.

Wie gesagt, ich weiß nicht wie so ein API query bei IOTA funktioniert, ich kann dir aber sagen wie es bei BTC funktioniert. Da die Blockchain keine wirklichen Wallet Balances speichert sondern nur Transaktionen, musst du die gesamten Transaktionen in der eine bestimmte Adresse involviert war abklappern. Ich vermute das ist schon einmal ein entscheidener Unterschied und der Grund warum es kein „öffentliche Node“ aufrufen und Requests schicken funktioniert. Bitte korrigiert mich wenn ich hier falsch liege.

Nehmen wir mal an dein Ziel ist es einfach Balances von BTC Adressen abzufragen. Dazu hast du zwei Möglichkeiten:

  1. Wie du bereits gesagt hast gibt es unzählige Drittanbieter mit kinderleichten APIs. Diese Queries laufen dann natürlich über deren Server und auch deren Node. Deinen Zweifel am „fest einprogrammieren“ verstehe ich nicht ganz. Vielleicht kannst du das noch einmal genauer erläutern. Eigentlich funktionieren diese APIs über Monate lang (wenn nicht sogar Jahre) genau gleich. Die bringen nicht von 1 auf 2 ein Update und werfen das gesamte Konzept über Board. Ich glaub dann hätten wir viel größere Probleme auf unzähligen Exchanges, Wallets und sonstigen Websites. Wieso willst du unterschiedliche Anbieter in einem Programm nutzen?

  2. Bei der zweiten Variante wirst du um deine eigene Node nicht herumkommen bzw. finde ich, dass wenn man auf Drittanbieter verzichten möchte auch wirklich alles selbst macht anstatt die Queries dann über irgendwelche schmierigen Nodes laufen zu lassen. :smirk: Deine erste Anlaufstelle ist daher eine eigene Bitcoin Node, deine zweite ist Bitcoin CLI. Dann kannst du die heruntergeladene Blockchain analysieren, Wallets erstellen, Transaktionen ausführen und vieles mehr. Sorry, dass die Anwendung im gleichen lokalen Netzwerk sein muss ist nicht ganz richtig. Wenn du z.B. Bitcoin Core laufen hast, kannst du mit dem RPC interface alles auch über HTTP JSON-RPC steuern. Das hilft dir auch mit Sicherheit dabei: https://en.bitcoin.it/wiki/API_reference_(JSON-RPC)

Fazit: Was ist die einfachere Variante?
Variante 1 ist deutlich einfacher zu nutzen und zu integrieren. Des Weiteren ersparst du dir einen riesen Aufwand, da bereits bestehende Explorer mit seperaten Datenbanken (die auf solche Abfragen ausgelegt sind) arbeiten. So dauert eine Balance-Abfrage ca. 2 Sekunden statt einer Minute. Aber wenn du Zeit und Lust hast dir das alles selbst aufzusetzen - Viel Spaß!
Tipp: Benutze nicht blockchain.com :wink:

Wozu willst du das Ganze auf Ethereum anwenden? Hast du schon einmal einen Smart Contract programmiert?

2 Like

Hallo Morten,

ich beschäftige mich momentan auch damit und kann dir diese Projekte empfehlen:

Lokal:


Microsoft Azure:

Und evtl. noch eine lokale Wallet:

1 Like

Wow vielen Dank für die ausführlichen Antworten!

" Deinen Zweifel am „fest einprogrammieren“ verstehe ich nicht ganz. Vielleicht kannst du das noch einmal genauer erläutern"

Mir geht es weniger darum, dass die Drittanbieter-API ihre Struktur ändert, sondern darum, dass der Benutzer meiner Anwendung in der Lage sein soll die URL einer Node einzutragen, welcher er vertraut. Egal ob das seine eigene oder eine externe ist. Das ist bei IOTA total simpel. Wenn ich nun aber meinetwegen Blockchain.com einbaue, ist der Benutzer meiner Anwendung daran gebunden und kann weder auf seine eigene Node noch auf eine andere API umstellen.

" Sorry, dass die Anwendung im gleichen lokalen Netzwerk sein muss ist nicht ganz richtig. Wenn du z.B. Bitcoin Core laufen hast, kannst du mit dem RPC interface alles auch über HTTP JSON-RPC steuern"

Wenn ich das richtig verstehe, scheint es ja doch möglich zu sein. Hatte irgendwo gelesen, dass die Node im gleichen Netzwerk sein muss. Kennt jemand gute Anleitungen dafür? Finde es erstaunlich schwierig ausführliche Erklärungen diesbezüglich zu finden.

„Wozu willst du das Ganze auf Ethereum anwenden? Hast du schon einmal einen Smart Contract programmiert?“

Ich habe schon einmal einen sehr simplen Smart Contract geschrieben, aber darum geht es mir nicht. Meine Anwendung soll in der Lage sein mehrere gängige Blockchains auf eingehende Zahlungen zu prüfen, darunter auch Ethereum.

„Des Weiteren ersparst du dir einen riesen Aufwand, da bereits bestehende Explorer mit seperaten Datenbanken (die auf solche Abfragen ausgelegt sind) arbeiten.“

Das ist ein sehr gutes Argument. Dennoch gefällt es mir nicht per Code an eine (oder auch mehrere) bestimmte APIs gebunden zu sein, weil ich denen ja wieder vertrauen muss. Das gilt natürlich auch für externe Nodes, aber der Benutzer könnte halt selbst entscheiden, ob er die Anwendung mit einer eigenen oder einer externen Node nutzt und diese nach Belieben wechseln.

@DocBrown danke, das schaue ich mir mal in Ruhe an!