7 Minuten Lesezeit
Übersicht
Private Schlüssel gehören zu den sensibelsten Daten im Bereich der Kryptografie und der Blockchain. Allerdings gab es schon immer Diskussionen und Unklarheiten hinsichtlich der Wahl zwischen verwahrenden Wallets (bei denen der Wallet-Anbieter die Verwahrung des privaten Schlüssels des Nutzers übernimmt) und nicht-verwahrenden Wallets (bei denen der Wallet-Nutzer selbst die Verwahrung des privaten Schlüssels übernimmt). Dieser Leitfaden befasst sich eingehend mit dem Unterschied zwischen verwahrenden und nicht-verwahrenden Wallets und erklärt, wie man mit Quicknode eine nicht-verwahrende Transaktion durchführt.
Voraussetzungen
- Node.js ist auf Ihrem System installiert.
- Texteditor.
- Terminal, auch bekannt als Befehlszeile.
Was ist eine nicht-verwahrende Wallet?
Eine nicht-verwahrende Wallet ist eine Blockchain-Wallet, bei der der Wallet-Besitzer die vollständige Kontrolle hat und den privaten Schlüssel selbst verwahrt. Eine nicht-verwahrende Wallet kann auf zwei Arten erstellt und genutzt werden: entweder mithilfe des privaten Schlüssels (einer alphanumerischen Zeichenfolge) oder mithilfe einer mnemonischen Seed-Phrase, einer aus 12 bis 24 Wörtern bestehenden Phrase, die beim Wallet-Besitzer gespeichert wird (in der Regel wird sie aufgeschrieben und an einem sicheren Ort aufbewahrt, fernab vom Internet und vom Computer).
Im Folgenden sind einige Vorteile einer nicht-verwahrenden Wallet aufgeführt:
- Autonomie – Die Nutzer haben die vollständige Kontrolle über ihre Gelder, da sie die einzigen sind, die die vollständige Kontrolle über ihre Gelder haben. Sie sind bei der Verwaltung oder Sicherung ihrer Wallet nicht auf Dritte angewiesen.
- Sicherheit – Da die Nutzer ihre privaten Schlüssel nicht im Internet oder auf einem Computer speichern, ist das Risiko einer Sicherheitsverletzung nahezu vernachlässigbar.
- Sofortige Auszahlung – Bei Non-Custodial-Wallets sind Nutzer bei der Bestätigung ihrer Auszahlungsanforderung nicht auf Dritte angewiesen. Dies vereinfacht den gesamten Prozess und ermöglicht sofortige Auszahlungen.
Non-Custodial-Wallet vs. Custodial-Wallet
- Verwahrer des privaten Schlüssels – Der wichtigste Faktor, der beim Vergleich von Krypto-Wallets zu berücksichtigen ist, ist der Besitz des privaten Schlüssels. Bei einer nicht-verwahrenden Wallet hat der Nutzer die Verwahrung des privaten Schlüssels inne. Bei verwahrenden Wallets kontrolliert ein Dritter (in der Regel ein Wallet-Anbieter oder eine Börse) den privaten Schlüssel.
- Transaktionsart – Transaktionen, die über nicht-verwahrende Wallets durchgeführt werden, sind sofort in der Blockchain sichtbar. Im Gegensatz dazu müssen Transaktionen, die über verwahrende Wallets durchgeführt werden, verschiedene Prüfungen durch Dritte durchlaufen und sind daher anfällig für Verzögerungen.
- Sicherheit – Bei nicht-verwahrenden Wallets speichert der Nutzer den privaten Schlüssel lokal. Die Wallet ist sehr sicher, solange der Nutzer den privaten Schlüssel nicht weitergibt oder das Gerät gestohlen wird. Bei verwahrenden Wallets werden alle sensiblen Nutzerdaten wie private Schlüssel auf einem „Hot Storage“ (der sofort aktualisiert wird) und einem „Cold Storage“ (der von Zeit zu Zeit aktualisiert wird) gespeichert, die in der Regel anfällig für Hackerangriffe sind.
- Offline-Verfügbarkeit – Bei nicht-verwahrenden Wallets ist keine aktive Internetverbindung erforderlich. Verwahrende Wallets benötigen eine Internetverbindung, da die Daten in der Regel auf einem zentralisierten Server gespeichert werden.
- Sicherung und Wiederherstellung – Der einzige Nachteil von nicht-verwahrenden Wallets besteht darin, dass die Wallet nicht wiederhergestellt werden kann, sobald der private Schlüssel bzw. der mnemonische Seed verloren gegangen ist. Im Gegensatz dazu können Nutzer von verwahrenden Wallets die Wiederherstellung durch einen Dritten beantragen.
Verwendung eines Non-Custodial-Knotens
Bei Quicknode betreiben wir weltweit zahlreiche Knoten. Alle diese Knoten sind ständig mit dem Internet verbunden und dynamisch. Die Quicknode-API ist mit einem globalen Netzwerk leistungsstarker Knoten verbunden. Diese Knoten sind nicht immer mit einer einzigen Infrastrukturkomponente verbunden. Die API ist so konzipiert, dass sie dynamisch zwischen einzelnen Infrastrukturkomponenten wechselt, um eine bessere Stabilität und Verfügbarkeit zu gewährleisten. Daher ist die Speicherung sensibler Daten auf einem Knoten nicht ideal, da diese sich ständig ändern. Hinzu kommt ein Sicherheitsaspekt, da diese Knoten dem Internet ausgesetzt sind. Aus Sicherheitsgründen für die Daten unserer Nutzer erlauben wir ihnen nicht, private Schlüssel zu speichern. Da sie dynamisch sind, ändern sie häufig ihren Status, um eine bessere Leistung zu erzielen. Das bedeutet, dass die Schlüssel verloren gehen können, was zum Verlust der Nutzerdaten führen würde. Dies waren die Gründe dafür, nicht-verwahrende Knoten zu betreiben und unseren Nutzern die alleinige Kontrolle über ihre Wallets zu überlassen. In den folgenden Abschnitten werden wir sehen, wie man mithilfe einer Bibliothek eine Wallet erstellt, eine nicht-verwahrende Transaktion durchführt und diese über Quicknode versendet.
Richten Sie Ihren Quicknode-Ethereum-Endpunkt ein
Für unsere heutigen Zwecke könnten wir so gut wie jeden Ethereum-Client verwenden, beispielsweise Geth oder OpenEthereum (früher Parity). Da dies für das Senden von Transaktionen jedoch etwas zu aufwendig ist, erstellen wir hier einfach ein kostenloses Quicknode-Konto und generieren ganz unkompliziert einen Ethereum-Endpunkt. Für die Überweisungen nutzen wir die Kovan-Testkette. Nachdem Sie Ihren kostenlosen Ethereum-Endpunkt erstellt haben, kopieren Sie die URL Ihres HTTP-Providers:

Das wirst du später noch brauchen, also kopiere es und speichere es ab.
Eine Wallet erstellen und etwas Test-ETH erhalten
Wir könnten eine der vielen verfügbaren Web3-Bibliotheken verwenden, um eine Wallet zu erstellen. Heute nutzen wir „ethers.js“, eine JavaScript-Bibliothek, um eine Wallet zu erstellen, mit der Transaktionen signiert und gesendet werden können. Sie können auch unsere Anleitungen zum Erstellen einer Ethereum-Wallet in Go, Python, Ruby und PHP zu Rate ziehen.
Wir werden Ethers mithilfe von npm (Node Package Manager) installieren, das im Lieferumfang von Node.js enthalten ist. Öffnen Sie Ihr Kommandofenster/Terminal und geben Sie Folgendes ein, um zu überprüfen, ob Node.js installiert ist:
node -v
Dadurch sollte die installierte Version von Node.js angezeigt werden; falls Node.js nicht installiert ist, laden Sie bitte die LTS-Version von Node.js von der offiziellen Website herunter.
Lassen Sie uns ein neues Verzeichnis für unser Projekt erstellen und dieses Verzeichnis im cmd/Terminal als aktuelles Arbeitsverzeichnis festlegen:
mkdir noncusTransaction
cd noncusTransaction
Installieren Sie nun „ethers“, indem Sie Folgendes eingeben:
npm i ethers@5.7
Stellen Sie sicher, dass Sie Ethers.js Version 5.7 installieren.
Das häufigste Problem in diesem Schritt ist ein interner Fehler bei `node-gyp`. Die Installationsanleitung für node-gyp finden Sie hier.
Hinweis: Falls das „node-gyp“-Problem auftritt, muss Ihre Python-Version mit einer der in der obigen Anleitung aufgeführten kompatiblen Versionen übereinstimmen.
Ein weiteres häufiges Problem ist ein veralteter Cache; leeren Sie Ihren npm-Cache, indem Sie einfach den folgenden Befehl in Ihr CMD/Terminal eingeben:
npm cache clean
Wenn alles gut läuft, wird ethers.js auf Ihrem System installiert.
Öffnen Sie nun einen Texteditor und erstellen Sie eine neue JavaScript-Datei mit dem Namen „transaction.js“. Kopieren Sie den folgenden Code und fügen Sie ihn in die Datei ein.
var Ether = require('ethers');
var privateKey = "0x0111111111111111111122222222222222222223333333333333333333344445";
var wallet = new ethers.Wallet(privateKey);
Konsole.log("Adresse: " + Wallet.Adresse);
Erläuterung zum obigen Code:
Zeile 1: Einbinden der „ethers“-Bibliothek.
Zeile 2: Speichern Sie einen privaten Schlüssel in der Variablen „privateKey“ – achten Sie darauf, dass Sie Ihren eigenen privaten Schlüssel verwenden. Wie Sie einen solchen Schlüssel generieren, erfahren Sie in dieser Anleitung zur Erstellung eines privaten Schlüssels mit JavaScript.
Hinweis: Wenn Sie Ihren Code im Internet veröffentlichen (z. B. in einem öffentlichen GitHub-Repo), empfiehlt es sich immer, den privaten Schlüssel in einer .env-Datei zu speichern und ihn über eine Umgebungsvariable in Ihren Hauptcode zu importieren.
Zeile 3: Erstellen einer neuen Wallet-Adresse mithilfe des privaten Schlüssels und Speichern dieser Adresse in der Variablen „wallet“.
Zeile 4: Ausgabe der Wallet-Adresse zusammen mit einer Zeichenkette.
Speichern Sie nun die Datei und führen Sie das Skript aus.
Knoten-Transaktion
Es sollte so aussehen.
Nun besorgen wir uns etwas Test-ETH, das wir im Rahmen der Transaktion versenden und zur Begleichung der Gasgebühr verwenden können. Kopieren Sie die Adresse aus der Ausgabe, melden Sie sich bei Kovan Faucet mit GitHub oder GitLab an, fügen Sie die Wallet-Adresse in das Textfeld des Faucets ein und klicken Sie dann auf „Send me KETH!“.

Sie können überprüfen, ob Sie die Test-ETH erhalten haben, indem Sie die Adresse in den Kovan-Etherscan einfügen; dort wird Ihnen der ETH-Stand angezeigt.

Eine Transaktion ohne Verwahrung senden
Lassen Sie uns mit der zuvor erstellten Wallet eine Token-Übertragungstransaktion erstellen und diese Transaktion über Quicknode an die Blockchain senden.
Passen Sie Ihre Datei „transaction.js“ wie folgt an:
var ethers = require('ethers');
var url = ''ADD_YOUR_ETHEREUM_NODE_URL'';
var customHttpProvider = new ethers.providers.JsonRpcProvider(url);
var privateKey = "0x0111111111111111111122222222222222222223333333333333333333344445";
var wallet = new ethers.Wallet(privateKey);
console.log("Address: " + wallet.address);
tx = {
to: "0x6E0d01A76C3Cf4288372a29124A26D4353EE51BE",
value: ethers.utils.parseEther("0.05"),
chainId: 42,
nonce: 11
}
customHttpProvider.estimateGas(tx).then(function(estimate) {
tx.gasLimit = estimate;
tx.gasPrice = ethers.utils.parseUnits("3.14085197", "gwei");
wallet.signTransaction(tx).then((signedTX)=>{
customHttpProvider.sendTransaction(signedTX).then(console.log);
});
});
Ersetzen Sie also `ADD_YOUR_ETHEREUM_NODE_URL` durch den HTTP-Anbieter aus dem obigen Abschnitt.
Erläuterung des obigen Codes.
Zeile 1: Einbinden der Ethers-Bibliothek.
Zeile 2: Speichern unserer Quicknode-URL in der Variablen „url“.
Zeile 3: Instanziierung eines neuen Ethers-Providers und Speicherung in der Variablen „customHttpProvider“.
Zeile 4: Speichern des privaten Schlüssels in der Variablen „privateKey“ (Sie müssen Ihren privaten Schlüssel selbst generieren).
Zeile 5: Erstellen einer neuen Wallet anhand des privaten Schlüssels.
Zeile 6: Ausgabe der Wallet-Adresse zusammen mit einer Zeichenkette.
Zeilen 7–12: Initialisierung unseres Transaktionsobjekts und Übergabe von Parametern wie „to“, das die Adresse des Empfängers enthält (jede beliebige Adresse, an die die Transaktion gesendet werden soll). Zweitens „value“, das den zu übertragenden ETH-Betrag enthält. Drittens ist „chainId“ die Netzwerk-ID der Chain (hier 42, da wir das Kovan-Testnetz verwenden). Zuletzt „nonce“, also die Anzahl der Transaktionen, die ein Absender bereits gesendet hat. Der Wert sollte hier immer der Anzahl der vorherigen Transaktionen plus 1 entsprechen.
Wir können den Nonce für eine bestimmte Adresse auch mithilfe der Methode `getTransactionCount()` von ethers.js abrufen.
Zeilen 13–14: Schätzung des Gasbedarfs mithilfe des Providers und anschließende Speicherung in der Variablen „gasLimit“ des Transaktionsobjekts.
Zeile 15: Festlegen des Gaspreises und Speichern in der Variablen „gasPrice“ der Transaktion.
Zeile 16: Signieren der Transaktion mit der Wallet.
Zeile 17: Senden der signierten Transaktion über den Provider und Ausgeben der Transaktionsdetails auf der Konsole.
Speichern Sie die Datei und führen Sie sie mit folgendem Befehl aus:
Knoten-Transaktion
Die Ausgabe sieht in etwa so aus:

Kopieren Sie den Transaktions-Hash und fügen Sie ihn in die Suchleiste von Kovan Etherscan ein, um zu überprüfen, ob die Transaktion bestätigt wurde oder nicht.
Fazit
Herzlichen Glückwunsch zur Durchführung einer Non-Custodial-Transaktion und dazu, dass Sie nun alleiniger Verwalter Ihrer Gelder sind. Geben Sie Ihren privaten Schlüssel niemals an Dritte weiter; bewahren Sie ihn stets an einem sicheren Ort auf, um die Sicherheit Ihrer Wallet und Ihrer Gelder zu gewährleisten.
Abonnieren Sie unseren Newsletter, um weitere Artikel und Anleitungen zu Ethereum zu erhalten. Sie können uns außerdem jederzeit auf Twitter und unserem Discord-Community-Server erreichen, wo Sie einige der coolsten Entwickler treffen werden, die Sie je kennengelernt haben :)
Wir ❤️ Feedback!
Teilen Sie uns gerne mit, wenn Sie Feedback oder Vorschläge für neue Themen haben. Wir freuen uns auf Ihre Rückmeldung.
