
Dateien auf Shadow Drive in Solana hochladen
Überblick
Die hohen Kosten und die begrenzte Speicherkapazität von Solana machen das Speichern großer Datenmengen unerschwinglich. Off-Chain-Speicherlösungen wie das von GenesysGo entwickelte Shadow Drive setzen sich zunehmend durch, um diese Einschränkungen zu überwinden.
Shadow Drive bietet eine kosteneffiziente und leistungsstarke Möglichkeit, große Datenmengen in Solana zu speichern. Dafür benötigst du jedoch einen Mainnet-Token, den du über einen SOL → SHDW-Swap erhältst.
In diesem Tutorial zeigen wir dir, wie du mit TypeScript Dateien auf Shadow Drive hochlädst.
Dieser Test kann nur im Mainnet ausgeführt werden, da SHDW derzeit keine Devnet-Option bietet.
Voraussetzungen
Bevor du beginnst, stelle sicher, dass du die Backpack-Wallet-Erweiterung und die folgenden Voraussetzungen installiert hast:
sh -c "$(curl -sSfL https://release.solana.com/v1.14.18/install)"npm install -g ts-nodeUmgebung einrichten
Projekt erstellen
- Erstelle über dein Terminal einen neuen Ordner namens Shadow.
- Erstelle im Ordner Shadow eine neue Datei namens upload.ts.
- Installiere die erforderlichen Pakete:
npm install @shadow-drive/sdk @project-serum/anchor4. Erstelle mit dem folgenden Befehl eine Wallet:
solana-keygen grind --starts-with N:15. Erstelle im Ordner "Shadow" eine Datei namens "helius.txt" und füge ihr Inhalt hinzu. In diesem Beispiel verwenden wir einfach Folgendes:
Nachdem du diese Schritte abgeschlossen hast, sollte deine Verzeichnisstruktur wie folgt aussehen:
- Öffne die Datei
[walletAddress].jsonund kopiere den geheimen Schlüssel. Für dieses Beispiel müssen wir die Wallet mit Guthaben aufladen. - Installiere die Backpack-Wallet-Erweiterung für deinen Browser aus dem Chrome Web Store.
- Öffne die Backpack-Wallet-Erweiterung und gehe zu "Einstellungen".
4. Wähle im Einstellungsmenü "Wallets" aus.
5. Klicke oben rechts auf die Schaltfläche "+", um eine neue Wallet hinzuzufügen.
6. Wähle Solana als Wallet-Typ aus. Wähle "Über privaten Schlüssel importieren" aus.
7. Füge den Inhalt der Wallet-Datei in das Importfeld ein und klicke auf "Importieren".
Kopiere nach dem Import den öffentlichen Schlüssel aus der Wallet. Du kannst diese Test-Wallet von einer anderen Solana-Wallet mit weniger als 0,03 SOL aufladen.
SHDW-Token beziehen
SHDW Drive benötigt einen Token namens SHDW (SHDWyBxihqiCj6YekG2GUr7wqKLeLAMK1gHZck9pL6y), um Speicherkonten zu erstellen. Du kannst SHDW-Token über einen Swap mit Jupiter auf Solana beziehen.
- Öffne Jupiter, um den Token-Swap von SOL zu SHDW durchzuführen.
- Gib die gewünschte Menge SOL ein, die du gegen SHDW tauschen möchtest, und klicke auf "Swap". Für diesen Test benötigen wir weniger als 1 SHDW, was 0,01 SOL entspricht.
3. Bestätige die Transaktion. Nachdem die Transaktion genehmigt wurde, erscheint der SHDW-Token in deiner Wallet.
Implementierungsschritte
1. Verbindung zu SHDW einrichten
In deiner Datei upload.ts importieren wir die erforderlichen Module und stellen eine Verbindung zum SHDW-Netzwerk her. Wir erstellen eine asynchrone Funktion namens main, die unseren Code enthält:
const anchor = require("@project-serum/anchor");
const { Connection, clusterApiUrl, Keypair } = require("@solana/web3.js");
const { ShdwDrive, ShadowFile } = require("@shadow-drive/sdk");
const key = require('./{wallet_address}.json');
const fs = require('fs');
const rpc = "https://rpc.helius.xyz/?api-key="
async function main() {
let secretKey = Uint8Array.from(key);
let keypair = Keypair.fromSecretKey(secretKey);
const connection = new Connection(
rpc , "confirmed"
);
const wallet = new anchor.Wallet(keypair);
const drive = await new ShdwDrive(connection, wallet).init();
console.log(drive)
}
main();Ersetze api-key in der Variable rpc durch einen gültigen API-Schlüssel, den du im Helius-Developer-Portal erhältst. Ersetze außerdem const key durch den korrekten Dateinamen der zuvor erstellten Wallet.
Wenn du die Datei jetzt mit ts-node upload.ts ausführst, siehst du in deinem Terminal folgende Ausgabe:
ShdwDrive {
connection: Connection {
_commitment: 'confirmed',
_confirmTransactionInitialTimeout: undefined,
_rpcEndpoint: 'https://rpc.helius.xyz/?api-key=',
...2. Speicherkonto erstellen
Füge den folgenden Code in die Funktion main ein, um ein Speicherkonto zu erstellen:
const newAccount = await drive.createStorageAccount("heliusDemo", "1MB", "v2");
console.log(newAccount);Wenn du hier den Befehl ts-node upload.ts ausführst, werden die ID des neu erstellten Speicherkontos und die Transaktionssignatur ausgegeben.
{
shdw_bucket: '5pzNpvGk3VK4XsqoCoJpqfXE7vioKkr7t4UEqbHkqnz1',
transaction_signature: '4EFw2R7KNw45Rngg6MASqfhGDpeZvcaoQHApADhopD9WQxB6XMYBcshd7neyLFa6QtKZC5H9U5iTnggUuhdNDLfE'
}In diesem Schritt kann ein Fehler auftreten, wenn die Wallet nicht mit mindestens 0,01 SOL und 1 SHDW-Token aufgeladen ist.
3. Datei hochladen
Sobald wir ein Speicherkonto haben, können wir eine Datei darauf hochladen. Füge den folgenden Code in die Funktion main ein:
const accts = await drive.getStorageAccounts("v2");
const fileBuff = fs.readFileSync("./helius.txt");
let acctPubKey = new anchor.web3.PublicKey(accts[0].publicKey);
const fileToUpload: ShadowFile = {
name: "helius.txt",
file: fileBuff,
};
const uploadFile = await drive.uploadFile(acctPubKey, fileToUpload);
console.log(uploadFile);Der obige Code führt vier zentrale Aktionen aus:
- Er liest die lokale Datei helius.txt als Buffer ein.
- Er findet das von uns erstellte Speicherkonto und definiert es als öffentlichen Schlüssel unseres Kontos.
- Er erstellt ein
ShadowFile-Objekt mit dem Namen und den Daten der Datei. - Er lädt die Datei mit der Funktion
uploadFilein das angegebene Speicherkonto hoch.
Jetzt können wir den Upload mit folgendem Befehl starten:
ts-node upload.tsDadurch erhalten wir folgende Konsolenausgabe:
{
finalized_locations: [
'https://shdw-drive.genesysgo.net/5pzNpvGk3VK4XsqoCoJpqfXE7vioKkr7t4UEqbHkqnz1/helius.txt'
],
message: '3UNhH2UMys8GxqSouVPtKLAd3rcP7m3oP8LwvwH8HSp3yChaYPSaAhjub5iV2i1LDvSU3JZ9ck322kt7QhRdbMhY',
upload_errors: []
}Die Datei ist jetzt hochgeladen! Öffne den erzeugten Link finalized_location und prüfe, ob die Datei korrekt hochgeladen wurde.
Die URL der Datei lautet https://shdw-drive.genesysgo.net/[storage_account_address]/[file_name]
Das bedeutet, dass alle in dieses Speicherkonto hochgeladenen Dateien dieselbe ursprüngliche URL verwenden. Nur der Dateiname ändert sich. Du kannst auch separate Speicherkonten für deine Dateien erstellen.
Wenn du anschließend deine Wallet überprüfst, siehst du außerdem: Dieser Vorgang hat nur 0,00244 SHDW gekostet.
Vollständiger Code
const anchor = require("@project-serum/anchor");
const { Connection, clusterApiUrl, Keypair } = require("@solana/web3.js");
const { ShdwDrive, ShadowFile } = require("@shadow-drive/sdk");
const key = require('./wallet.json');
const fs = require('fs');
async function main() {
let secretKey = Uint8Array.from(key);
let keypair = Keypair.fromSecretKey(secretKey);
const connection = new Connection(
"https://rpc.helius.xyz/?api-key=", "confirmed"
); const wallet = new anchor.Wallet(keypair);
const drive = await new ShdwDrive(connection, wallet).init();
const newAccount = await drive.createStorageAccount("heliusDemo", "1MB", "v2");
console.log(newAccount);
const accts = await drive.getStorageAccounts("v2");
const fileBuff = fs.readFileSync("./helius.txt");
let acctPubKey = new anchor.web3.PublicKey(accts[0].publicKey);
const fileToUpload: typeof ShadowFile = {
name: "helius.txt",
file: fileBuff,
};
const uploadFile = await drive.uploadFile(acctPubKey, fileToUpload);
console.log(uploadFile);
}
main();Fazit
Das war's! Du hast erfolgreich eine Datei mit TypeScript auf Shadow Drive hochgeladen. Mit diesem Grundlagenwissen kannst du die dezentralen Funktionen von SHDW nutzen und komplexere Anwendungsfälle umsetzen. Du könntest dieses Tutorial beispielsweise erweitern, indem du den Datei-Upload in eine Webanwendung integrierst oder einen Dienst für die dezentrale Dateispeicherung erstellst. Weitere Möglichkeiten findest du in der offiziellen Dokumentation zum Shadow Drive SDK.
Ähnliche Artikel
Helius abonnieren
Bleib bei der Solana-Entwicklung auf dem Laufenden und erhalte Updates, wenn wir neue Beiträge veröffentlichen


