
Solana Dev 101 — So überträgst du Solana-Token mit TypeScript
Inhaltsverzeichnis
- 1. Projekt einrichten
- 2. Bibliotheken importieren
- 3. Verbindung zum Solana-Netzwerk herstellen
- 4. Schlüsselpaare des Gebührenzahlers und des vorherigen Eigentümers definieren
- 5. Öffentlichen Mint-Schlüssel und Wallet-Adresse des Empfängers angeben
- 6. Associated Token Address (ATA) für den Empfänger generieren
- 7. Öffentliche Schlüssel für das Quell-Token-Konto und das Zielkonto angeben
- 8. Neue Transaktion erstellen und Transfer-Anweisung hinzufügen
- 9. Transaktion an das Solana-Netzwerk senden
- Vollständiger Code
Auf Solana dienen Token-Konten dazu, Token einschließlich Non-Fungible Tokens (NFTs) zu verwahren und zu verwalten. Deshalb kann es für Entwickler, die neu bei Solana sind, etwas schwierig sein, Token per Code zu übertragen. In diesem Tutorial erfährst du, wie du NFTs auf der Solana-Blockchain von einer Wallet an eine andere überträgst. Dazu erstellen wir ein neues Associated Token Account (ATA) für den Empfänger und übertragen das NFT auf dieses Konto.
Vereinfache die Entwicklung von Solana-Programmen mit Kite.
Unterschiede zwischen NFT- und SOL-Transfers
Bei einem Token-Transfer muss ein neues Associated Token Account (ATA) erstellt werden, um die Übertragung vom vorherigen an den neuen Eigentümer durchzuführen. Der Transfer erfolgt nicht direkt von Wallet zu Wallet.
Das unterscheidet sich von einem regulären SOL-Transfer. Hier übernimmt das Systemprogramm die Übertragung, und für die in der Transaktion enthaltenen SOL muss kein neues ATA erstellt werden.
Die folgende Grafik veranschaulicht den Prozess kurz:
Zusammengefasst wird das Asset bei einem NFT-/Token-Transfer vom aktuellen ATA an ein neu erstelltes ATA übertragen, das dem Empfänger gehört. Es wird nicht direkt an die Wallet gesendet.
Voraussetzungen
Bevor du mit diesem Tutorial beginnst, müssen folgende Voraussetzungen erfüllt sein:
- Grundkenntnisse in TypeScript.
- Node.js ist auf deinem Rechner installiert.
- Der Paketmanager npm oder yarn ist installiert.
Implementierungsschritte
Führe nun die folgenden Schritte aus, um den Code zu erstellen:
1. Projekt einrichten
- Erstelle ein neues Verzeichnis namens „Transfer“ für dein Projekt.
- Öffne ein Terminal und navigiere zum Projektordner.
- Initialisiere mit folgendem Befehl ein neues Node.js-Projekt:
npm init -yoderyarn init -y. - Installiere die erforderlichen Abhängigkeiten mit folgendem Befehl:
npm install @solana/web3.js @solana/spl-token bs58- Erstelle eine neue TypeScript-Datei, z. B. transferNFT.ts, und öffne sie in einem Code-Editor.
2. Bibliotheken importieren
Importiere die erforderlichen Bibliotheken und definiere die Transferfunktion in einer neuen Datei namens transferNFT.ts:
import { Keypair, Transaction, Connection, PublicKey } from "@solana/web3.js";
import { createTransferCheckedInstruction, getAssociatedTokenAddress } from "@solana/spl-token";
import * as bs58 from "bs58";
async function transfer() {
// Code for transferring NFTs goes here
}
transfer();Im obigen Code importieren wir die erforderlichen Pakete und erstellen unsere Transferfunktion.
3. Verbindung zum Solana-Netzwerk herstellen
const connection = new Connection("https://rpc.helius.xyz/?api-key=");Im obigen Code stellen wir über unseren Helius RPC eine Verbindung zur Solana-Blockchain her.
4. Schlüsselpaare des Gebührenzahlers und des vorherigen Eigentümers definieren
const feePayer = Keypair.fromSecretKey(bs58.decode("privateKey"));
const prevOwner = Keypair.fromSecretKey(bs58.decode("privateKey"));5. Öffentlichen Mint-Schlüssel und Wallet-Adresse des Empfängers angeben
Der öffentliche Mint-Schlüssel ist die Token-Adresse des NFT, das du übertragen möchtest:
const mintPubkey = new PublicKey("4umMdShNxbdnoV2EZjUp6h5GYYneZFLH9otBEU2K3ZYP");
const receiveAddress = new PublicKey("2xSHLfiPs3aEhzbLnYbyzWYMEaYnwSwJwAnVh5CwHWwX");6. Associated Token Address (ATA) für den Empfänger generieren
const ata = await getAssociatedTokenAddress(mintPubkey, receiveAddress);In diesem Code legen wir als neuen Eigentümer des ATA den öffentlichen Schlüssel einer anderen Adresse fest. Diese Adresse muss nicht der Gebührenzahler der Transaktion sein.
Setze receiveAddress auf die Adresse, an die das Asset übertragen werden soll.
7. Öffentliche Schlüssel für das Quell-Token-Konto und das Zielkonto angeben
const tokenAccount1Pubkey = new PublicKey("CE2uTSeVbBhy2Q8qVEnp8qAJYBQkVxMC4uGzchiAn6gG");
const tokenAccount2Pubkey = new PublicKey(ata);8. Neue Transaktion erstellen und Transfer-Anweisung hinzufügen
const tx = new Transaction();
tx.add(
createTransferCheckedInstruction(
tokenAccount1Pubkey,
mintPubkey,
tokenAccount2Pubkey,
prevOwner.publicKey,
1, // Amount you are transferring.
0 // Decimals, since this is an NFT you can leave 0.
)
);Im obigen Code führen wir folgende Schritte aus:
- Wir definieren das vorherige und das aktuelle Token-Konto.
- Wir setzen die zu übertragende Menge auf 1, da für die Mint-Adresse nur ein Exemplar vorhanden ist.
- Wir setzen die Dezimalstellen auf 0, da dies dem Standard für Non-Fungible Tokens entspricht. Bei einem fungiblen Token kannst du die Dezimalstellen passend für den Transfer festlegen.
9. Transaktion an das Solana-Netzwerk senden
const txhash = await connection.sendTransaction(tx, [feePayer, prevOwner]);
console.log(`Transaction hash: ${txhash}`);Jetzt schließen wir die Transaktion mit der Methode sendTransaction ab und geben den Gebührenzahler sowie den vorherigen Eigentümer des Assets als Unterzeichner an.
Vollständiger Code
import { Keypair, Transaction, Connection, PublicKey } from "@solana/web3.js";
import { createTransferCheckedInstruction, getAssociatedTokenAddress } from "@solana/spl-token";
import * as bs58 from "bs58";
async function transfer() {
// connection to Solana.
const connection = new Connection("https://rpc.helius.xyz/?api-key=");
// Payer of new ATA.
const feePayer = Keypair.fromSecretKey(
bs58.decode("privateKey")
);
// Previous owner of Token or NFT
const prevOwner = Keypair.fromSecretKey(
bs58.decode("privateKey")
);
// Mint address of the NFT.
const mintPubkey = new PublicKey("4umMdShNxbdnoV2EZjUp6h5GYYneZFLH9otBEU2K3ZYP");
// Recipient of the NFT.
const receiveAdress = new PublicKey('2xSHLfiPs3aEhzbLnYbyzWYMEaYnwSwJwAnVh5CwHWwX')
// Original Token Account
const tokenAccount1Pubkey = new PublicKey("CE2uTSeVbBhy2Q8qVEnp8qAJYBQkVxMC4uGzchiAn6gG");
let ata = await getAssociatedTokenAddress(
mintPubkey, // mint
receiveAdress // owner
);
// Create transfer instruction to from the previous ATA owned by old wallet, to new ATA.
const tokenAccount2Pubkey = new PublicKey(ata);
let tx = new Transaction();
tx.add(
createTransferCheckedInstruction(
tokenAccount1Pubkey, // from
mintPubkey, // mint
tokenAccount2Pubkey, // to
prevOwner.publicKey, // from's owner
1, // amount
0 // decimals
)
);
// Send Transaction here.
console.log(`txhash: ${await connection.sendTransaction(tx, [feePayer, prevOwner])}`);
}
transfer()Ersetze die Platzhalterwerte im Code durch deine tatsächlichen Werte, etwa die RPC-URL, geheimen Schlüssel und öffentlichen Schlüssel für den Transfer.
Fazit
Glückwunsch! Du hast erfolgreich Code erstellt, der NFTs auf Solana überträgt. Dazu hast du ein neues Associated Token Account (ATA) erstellt und das NFT auf das Konto des Empfängers übertragen. In diesem Tutorial hast du gelernt, wie du eine Verbindung herstellst, ATAs generierst und Transaktionen an die Solana-Blockchain sendest. Dieses Wissen kannst du jetzt auf jede dApp anwenden, die du entwickelst.
Ähnliche Artikel
Helius abonnieren
Bleib bei der Solana-Entwicklung auf dem Laufenden und erhalte Updates, wenn wir neue Beiträge veröffentlichen


