BARU: Helius mengakuisisi Light Protocol
cara mentransfer token Solana menggunakan TypeScript
Blog/Pengembangan

Solana Dev 101 — Cara Mentransfer Token Solana dengan TypeScript

Kepala Hubungan DeveloperHunter Davis di LinkedIn
Bacaan 4 menit

Di Solana, akun token digunakan untuk menyimpan dan mengelola token, termasuk non-fungible token (NFT). Hal ini dapat menyulitkan developer pemula di Solana saat mentransfer token melalui kode. Dalam tutorial ini, kita akan mempelajari cara mentransfer NFT dari satu dompet ke dompet lain di blockchain Solana. Kita akan melakukannya dengan membuat Associated Token Account (ATA) baru untuk penerima dan mentransfer NFT ke akun tersebut.

Perbedaan Transfer NFT dan SOL

Dalam transfer token, Associated Token Account (ATA) baru harus dibuat untuk memulai transfer dari pemilik sebelumnya ke pemilik baru. Proses ini tidak dilakukan melalui transfer dompet → dompet.

Proses ini berbeda dari transfer SOL biasa karena system program akan menangani transfer tersebut, dan ATA baru tidak perlu dibuat untuk menyimpan SOL yang terlibat dalam transaksi.

Untuk melihat representasi visual singkat dari proses ini, lihat ilustrasi berikut:

Singkatnya, dalam transfer NFT/token, aset dikirim dari ATA saat ini ke ATA baru milik penerima, bukan ditransfer langsung ke dompet.

Prasyarat

Sebelum melanjutkan tutorial ini, pastikan Anda memenuhi prasyarat berikut:

  1. Pengetahuan dasar tentang TypeScript.
  2. Node.js telah terinstal di perangkat Anda.
  3. Package manager npm atau yarn telah terinstal.

Langkah-Langkah Pembuatan

Sekarang, ikuti langkah-langkah berikut untuk membuat kodenya:

1. Siapkan proyek

  • Buat direktori baru bernama “Transfer” untuk proyek Anda.
  • Buka terminal dan navigasikan ke folder proyek.
  • Inisialisasi proyek Node.js baru menggunakan perintah: npm init -y atau yarn init -y.
  • Instal dependensi yang diperlukan dengan menjalankan perintah:
Kode
npm install @solana/web3.js @solana/spl-token bs58
  • Buat file TypeScript baru, misalnya transferNFT.ts, lalu buka di editor kode.

2. Impor library

Impor library yang diperlukan dan definisikan fungsi transfer dalam file transferNFT.ts baru:

Kode
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();

Dalam kode di atas, kita mengimpor package yang diperlukan sekaligus membuat fungsi transfer.

3. Buat koneksi ke jaringan Solana

Kode
const connection = new Connection("https://rpc.helius.xyz/?api-key=");

Dalam kode di atas, kita menggunakan Helius RPC untuk membuat koneksi dengan blockchain Solana.

4. Tentukan keypair pembayar biaya dan pemilik sebelumnya

Kode
const feePayer = Keypair.fromSecretKey(bs58.decode("privateKey"));
const prevOwner = Keypair.fromSecretKey(bs58.decode("privateKey"));

5. Tentukan public key mint dan alamat dompet penerima

Public key mint adalah alamat token dari NFT yang ingin Anda transfer:

Kode
const mintPubkey = new PublicKey("4umMdShNxbdnoV2EZjUp6h5GYYneZFLH9otBEU2K3ZYP");
const receiveAddress = new PublicKey("2xSHLfiPs3aEhzbLnYbyzWYMEaYnwSwJwAnVh5CwHWwX");

6. Buat associated token address (ATA) untuk penerima

Kode
const ata = await getAssociatedTokenAddress(mintPubkey, receiveAddress);

Dalam kode ini, kita menetapkan pemilik ATA baru sebagai public key dari alamat lain. Pemilik tersebut tidak harus menjadi pembayar transaksi.

Pastikan untuk mengatur receiveAddress ke alamat tujuan transfer aset.

7. Tentukan public key untuk akun token sumber dan akun tujuan

Kode
const tokenAccount1Pubkey = new PublicKey("CE2uTSeVbBhy2Q8qVEnp8qAJYBQkVxMC4uGzchiAn6gG");
const tokenAccount2Pubkey = new PublicKey(ata);

8. Buat transaksi baru dan tambahkan instruksi transfer

Kode
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.
  )
);

Dalam kode di atas, kita:

  • Menentukan akun token sebelumnya dan saat ini.
  • Mengatur jumlah yang akan ditransfer menjadi 1 (karena alamat mint hanya memiliki suplai sebanyak 1).
  • Mengatur desimal menjadi 0 karena mengikuti standar non-fungible token. Untuk fungible token, Anda dapat mengatur desimal dengan benar untuk transfer.

9. Kirim transaksi ke jaringan Solana

Kode
const txhash = await connection.sendTransaction(tx, [feePayer, prevOwner]);
console.log(`Transaction hash: ${txhash}`);

Sekarang kita menggunakan metode sendTransaction untuk menyelesaikan transaksi serta menentukan pembayar biaya dan pemilik aset sebelumnya sebagai penanda tangan.

Kode Lengkap

Kode
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()

Ingatlah untuk mengganti nilai placeholder dalam kode dengan nilai Anda yang sebenarnya, seperti URL RPC, secret key, dan public key untuk transfer.

Kesimpulan

Selamat! Anda telah berhasil membuat kode untuk mentransfer NFT di Solana dengan membuat Associated Token Account (ATA) baru dan mentransfer NFT ke akun penerima. Dengan mengikuti tutorial ini, Anda telah mempelajari cara membuat koneksi, menghasilkan ATA, dan mengirim transaksi di blockchain Solana. Kini Anda dapat menerapkan informasi yang dipelajari di sini pada contoh dApp apa pun yang Anda buat.

‍

Berlangganan Helius

Ikuti perkembangan terbaru dalam pengembangan Solana dan dapatkan pembaruan saat kami memublikasikan postingan

Gambar diperbesar