
Cara Membangun Aplikasi Solana dengan Gill
Daftar Isi
- Apa Itu Gill?
- Menginstal Gill
- Gill vs. @solana/kit
- Contoh Kode Gill vs. Kit
- Apa saja yang dilakukan dalam proses migrasi dari Kit ke Gill?
- Komponen Apa Saja yang Disertakan dalam Gill?
- Fungsi Helper Node.js
- Builder Transaksi
- Mode Debug
- Tool Developer Pelengkap untuk Membangun dengan Gill
- @gillsdk/react
- Codama
- Masa Depan Gill
- Cara Berkontribusi pada Gill
- Referensi Tambahan
Gill adalah library tooling developer Solana berbasis JavaScript/TypeScript terbaru. Awalnya dikembangkan oleh Nick Frostbutter, salah satu pendiri Decal, saat bergabung dengan tim Developer Relations Solana Foundation, Gill bertujuan meningkatkan pengalaman developer secara signifikan untuk aplikasi berbasis JavaScript.
Gill mencakup abstraksi dengan opini ringan untuk mempercepat produktivitas developer serta primitive tingkat rendah, sehingga developer bebas memilih pendekatan mereka sendiri.
Abstraksi yang ringan mengurangi berbagai kompleksitas dan boilerplate yang diperlukan untuk melakukan interaksi umum dengan Solana. Sementara itu, primitive tingkat rendah menyediakan "jalur keluar" ketika developer memerlukan (atau menginginkan) kontrol yang lebih mendetail atas logika aplikasi mereka.
Artikel ini akan membahas dasar-dasar "library Gill", apa saja yang tersedia di dalamnya, cara memulai dengan gill, dan perbedaannya dengan @solana/kit (sebelumnya dikenal sebagai "web3.js v2").
Apa Itu Gill?
Gill adalah library TypeScript modern untuk mengembangkan aplikasi Solana di lingkungan berbasis JavaScript apa pun, mulai dari browser hingga server dan perangkat seluler.
Library Gill ditujukan bagi developer Solana dari semua tingkat pengalaman, mulai dari pemula hingga mahir. Dengan menyediakan abstraksi tingkat tinggi dan primitive tingkat rendah dalam satu paket, developer dapat dengan mudah menggunakan fungsionalitas yang lebih canggih saat diperlukan atau ketika belum didukung oleh abstraksi.
Bagian terbaiknya?
Gill sepenuhnya mendukung tree-shaking, sehingga bundler Anda akan otomatis menghapus primitive atau abstraksi yang tidak digunakan dalam codebase Anda.
Tujuan utama Gill adalah meningkatkan pengalaman developer dengan menyederhanakan tugas pengembangan Solana yang umum dan menghapus boilerplate, tanpa mengorbankan kemampuan untuk bekerja pada tingkat yang lebih rendah jika developer menginginkan atau memerlukannya. Developer tidak semestinya dibatasi hanya pada abstraksi tingkat tinggi atau primitive tingkat rendah. Developer semestinya dapat dengan mudah memilih salah satunya sesuai kebutuhan.
Menginstal Gill
Gill dapat diinstal di proyek berbasis JavaScript atau TypeScript apa pun, termasuk NodeJS/Bun, browser, React Native, atau hampir semua lingkungan JavaScript lainnya.
npm install gillLibrary Gill memiliki dukungan TypeScript yang kuat dan semestinya langsung berfungsi di sebagian besar aplikasi. Namun, konfigurasi proyek Anda mungkin perlu disesuaikan agar bekerja lebih baik dengan Gill. Lihat dokumentasi untuk informasi selengkapnya tentang dukungan TypeScript di Gill.
Gill vs. @solana/kit
Library Gill dibangun langsung di atas @solana/kit, primitive JavaScript tingkat rendah baru yang dikembangkan oleh Anza sebagai pengganti @solana/web3.js lama dengan performa lebih tinggi.
Karena Kit hanya menyediakan primitive tingkat rendah ini, developer terpaksa menggunakan satu pendekatan dengan merangkai semuanya secara manual. Akibatnya, ukuran aplikasi membengkak dengan boilerplate yang bertele-tele.
Hadir Gill.
Gill menyediakan primitive tingkat rendah yang sama seperti Kit sekaligus abstraksi dengan opini ringan untuk menyederhanakan tugas umum, semuanya melalui satu antarmuka yang kompatibel. Dengan penyederhanaan menyeluruh dari Gill, developer dapat lebih berfokus pada logika bisnis aplikasi dan menghabiskan lebih sedikit waktu untuk boilerplate yang bertele-tele.
@solana/kit sebelumnya dikenal sebagai "web3.js v2" karena awalnya dipublikasikan sebagai lini rilis versi 2.x dari @solana/web3.js. Engineer Anza menilai hal ini mempersulit dan membingungkan jalur upgrade untuk teknologi baru tersebut, sehingga mereka memutuskan untuk memublikasikannya dengan nama paket baru @solana/kit.
Contoh Kode Gill vs. Kit
Cuplikan kode berikut menunjukkan bagaimana kode Anda dapat disederhanakan sambil mempertahankan fungsionalitas yang sama (dan berpotensi menambahkan lebih banyak fungsi). Hampir semua aplikasi perlu melakukan dua tugas: membuat koneksi ke blockchain dan membuat transaksi.
Koneksi ke blockchain dengan @solana/kit dibuat sebagai berikut:
import {
devnet,
createSolanaRpc,
createSolanaRpcSubscriptions,
sendAndConfirmTransactionFactory,
} from "@solana/kit";
const rpc = createSolanaRpc(devnet("https://api.devnet.solana.com"));
const rpcSubscriptions = createSolanaRpcSubscriptions(
devnet("wss://api.devnet.solana.com"),
);
const sendAndConfirmTransaction = sendAndConfirmTransactionFactory({
rpc,
rpcSubscriptions,
});Logika yang sama dapat diterapkan dan disederhanakan dengan fungsi createSolanaClient milik Gill:
import { createSolanaClient } from "gill";
const { rpc, rpcSubscriptions, sendAndConfirmTransaction } = createSolanaClient({
urlOrMoniker: "devnet",
});Kini Anda dapat membuat permintaan RPC sederhana menggunakan objek rpc yang dibuat dengan salah satu library dalam contoh di atas:
// get the latest blockhash from your RPC provider
const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();Pembuatan transaksi sederhana yang menyertakan instruksi memo dengan pengoptimalan dasar (menggunakan instruksi compute budget) dalam @solana/kit dilakukan sebagai berikut:
import {
pipe,
createTransactionMessage,
setTransactionMessageFeePayerSigner,
appendTransactionMessageInstructions,
setTransactionMessageLifetimeUsingBlockhash,
} from "@solana/kit";
import { getAddMemoInstruction } from "@solana-program/memo";
import {
getSetComputeUnitLimitInstruction,
getSetComputeUnitPriceInstruction,
} from "@solana-program/compute-budget";
const transaction = pipe(
createTransactionMessage({ version: "legacy" }),
(tx) => setTransactionMessageFeePayerSigner(signer, tx),
(tx) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),
(tx) =>
appendTransactionMessageInstructions(
[
getAddMemoInstruction({
memo: "gm world!",
}),
getSetComputeUnitLimitInstruction({ units: 5000 }),
getSetComputeUnitPriceInstruction({ microLamports: 1000 }),
],
tx,
),
);Contoh berbasis Kit di atas mengharuskan Anda menginstal dua paket tambahan secara manual: @solana-program/compute-budget dan @solana-program/memo.
Logika yang sama dapat sangat disederhanakan menggunakan gill sebagai berikut:
import { createTransaction } from "gill";
import { getAddMemoInstruction } from "gill/programs";
const transaction = createTransaction({
version: "legacy",
feePayer: signer,
instructions: [
getAddMemoInstruction({
memo: "gm world!",
}),
],
latestBlockhash,
computeUnitLimit: 5000,
computeUnitPrice: 1000,
});Untuk perbandingan yang lebih menyeluruh antara kedua library ini, lihat dokumentasi Gill tentang Gill vs. @solana/kit.
Apa saja yang dilakukan dalam proses migrasi dari Kit ke Gill?
Untuk aplikasi apa pun yang menggunakan library @solana/kit, proses migrasi ke paket gill sangat mudah:
- Instal
gill - Ganti semua impor
@solana/kitdengangill - Hapus instalasi
@solana/kit
Karena Gill juga secara langsung menyertakan klien Solana Program Library (SPL) yang paling umum, Anda juga dapat mengganti impor paket tersebut dengan Gill. Gill secara langsung menyertakan klien SPL berikut, yang dapat diakses melalui jalur impor gill/programs:
@solana-program/system@solana-program/memo@solana-program/compute-budget@solana-program/address-lookup-table@solana-program/token-2022(lihat catatan di bawah tentang klien program token)
Untuk menggunakan satu paket gill bagi klien program SPL ini:
- Ganti impor paket
@solana-program/*yang tercantum di atas dengangill/programs - Hapus instalasi paket
@solana-program/*yang tercantum di atas.
Meskipun klien @solana-program/token (Legacy Token Program) tidak disertakan, klien @solana-program/token-2022 (Token Extension Program, juga dikenal sebagai Token22) disertakan dan sepenuhnya kompatibel dengan versi sebelumnya dari klien Legacy Token Program. Untuk menggunakan instruksi Legacy Token dan fungsionalitas lainnya, Anda harus secara eksplisit menggunakan TOKEN_PROGRAM_ADDRESS sebagai ID program untuk instruksi dan alamat turunan program.
Setelah memperbarui impor, aplikasi Anda langsung siap menggunakan library "Gill core". Kini Anda dapat dengan mudah merefaktor dan menghilangkan boilerplate Kit yang bertele-tele (seperti membuat koneksi blockchain dan transaksi) menggunakan abstraksi gill yang tersedia.
Komponen Apa Saja yang Disertakan dalam Gill?
Library Gill dapat dibagi menjadi beberapa komponen utama:
- Fungsionalitas inti (alias "Gill core")
- Helper khusus runtime server (yaitu NodeJS dan Bun)
- Klien program
- Builder transaksi
- Mode debug
Fungsi Helper Node.js
Paket gill menyertakan beberapa utilitas khusus runtime server JavaScript. Meskipun disertakan dalam paket gill, utilitas tersebut memiliki jalur impor terpisah untuk meningkatkan tree-shaking. Utilitas ini mencakup kemampuan untuk memuat dan menyimpan keypair ke file atau variabel ENV dengan mudah.
import { ... } from "gill/node"Untuk memuat file keypair dari filesystem lokal Anda dengan mudah (seperti keypair Solana CLI):
import { loadKeypairSignerFromFile } from "gill/node";
// default file path: ~/.config/solana/id.json
const signer = await loadKeypairSignerFromFile();
console.log("address:", signer.address);Anda juga dapat memuat keypair yang dienkode dengan base58 dari variabel ENV:
import { loadKeypairSignerFromEnvironmentBase58 } from "gill/node";
// loads signer from base58 keypair stored at `process.env[variableName]`
const signer = await loadKeypairSignerFromEnvironmentBase58(variableName);
console.log("address:", signer.address);Builder Transaksi
Untuk menyederhanakan pembuatan transaksi umum yang sering berinteraksi dengan beberapa program sekaligus, Gill menyertakan berbagai "builder transaksi" yang membantu merangkai transaksi siap tanda tangan dengan mudah untuk tugas-tugas ini.
Karena setiap builder transaksi memiliki cakupan pada satu tugas, builder tersebut dapat dengan mudah mengabstraksikan berbagai boilerplate sekaligus membantu membuat transaksi yang optimal.
Beberapa builder transaksi yang disediakan Gill meliputi:
buildCreateTokenTransaction- membuat token dengan metadatabuildMintTokensTransaction- mencetak token ke wallet tujuanbuildTransferTokensTransaction- mentransfer token ke wallet tujuan
Setiap builder transaksi dilengkapi dengan "builder instruksi" untuk meningkatkan fleksibilitas developer dalam menggunakan abstraksi Gill ini.
Mode Debug
Di dalam Gill, Anda dapat mengaktifkan "mode debug" untuk secara otomatis mencatat informasi tambahan yang akan membantu mengatasi masalah pada transaksi Anda.
Mode debug dinonaktifkan secara default untuk meminimalkan log tambahan dari aplikasi Anda. Dengan pengontrolnya yang fleksibel, Anda dapat mengaktifkan mode debug dari tempat-tempat paling umum tempat kode Anda dijalankan, termasuk kode itu sendiri, backend NodeJS, fungsi serverless, dan bahkan konsol browser web.
Untuk mengaktifkan mode debug, atur salah satu dari berikut ini menjadi true atau 1:
process.env.GILL_DEBUGglobal.__GILL_DEBUG__window.__GILL_DEBUG__(yaitu di konsol browser web Anda)- atau atur level log debug secara manual (lihat dokumentasi)
Lihat dokumentasi Mode Debug Gill untuk informasi selengkapnya.
Tool Developer Pelengkap untuk Membangun dengan Gill
@gillsdk/react
Di dalam library Gill terdapat paket lain, @gillsdk/react, yang merupakan kumpulan hook React yang dirancang untuk meningkatkan pengalaman developer secara radikal bagi aplikasi frontend berbasis React. Paket ini juga dibangun di atas TanStack Query, library reaktivitas populer, sehingga dapat lebih mudah digunakan oleh aplikasi yang sudah ada.
Paket @gillsdk/react masih dalam tahap awal dan sedang dikembangkan secara aktif. Saat ini, paket tersebut menyediakan beberapa hook React yang berguna untuk aplikasi Solana:
useAccount- mendapatkan informasi account untuk suatu alamatuseBalance- mendapatkan saldo account (dalam lamport)useLatestBlockhash- mendapatkan blockhash terbaruuseSignatureStatuses- mendapatkan status tanda tanganuseProgramAccounts- mendapatkan account program (GPA)useTokenMint- mendapatkan account Mint milik token yang telah didekodeuseTokenAccount- mendapatkan account token untuk Mint dan pemilik tertentu (atau ATA)
Codama
Codama adalah tool yang memungkinkan developer menggunakan IDL program Solana untuk menghasilkan library klien (misalnya JavaScript dan Rust) yang dapat digunakan oleh aplikasi lain. Codama menangani seluruh kompleksitas dalam merangkai instruksi Solana menjadi IDL, file konfigurasi, dan impor fungsi.
Gill dan Codama dapat diintegrasikan dengan mudah melalui fungsi createCodamaConfig milik Gill. Pengelola Gill juga sedang aktif meningkatkan integrasi Gill<>Codama lebih jauh, termasuk dukungan langsung dalam Codama CLI!
Secara default, klien program TypeScript yang dihasilkan Codama akan menggunakan @solana/kit, tetapi hal ini dapat diperbarui dengan mudah dalam file konfigurasi Codama milik program Solana Anda. Upgrade untuk menggunakan gill dalam konfigurasi Codama Anda menjadi sangat mudah berkat fungsi createCodamaConfig.
Berikut adalah contoh file codama.js yang akan menghasilkan klien TypeScript untuk program Solana yang menggunakan gill:
import { createCodamaConfig } from "gill";
export default createCodamaConfig({
idl: "program/idl.json",
clientJs: "clients/js/src/generated",
});Anda dapat menemukan panduan lengkap dalam dokumentasi Gill untuk menghasilkan klien program Solana dengan Codama.
Masa Depan Gill
Masa depan library Gill terlihat cerah, dan masih banyak yang dapat dikerjakan. Situs dokumentasi resmi Gill baru saja diluncurkan, dan library ini mendekati 20.000 unduhan per bulan.
Anda dapat menemukan informasi lebih lanjut tentang roadmap Gill saat ini di halaman GitHub Projects. Saat ini, daftar singkatnya mencakup:
- Dukungan langsung untuk spesifikasi Solana Pay
- Integrasi native untuk spesifikasi Digital Assets Standard (DAS) API
- Dukungan yang lebih baik untuk token berbasis Token Extension
- Dukungan yang lebih baik untuk Address Lookup Tables
- Dokumentasi yang lebih menyeluruh
Paket @gillsdk/react yang disertakan dalam library Gill masih berada pada tahap awal (dengan sembilan hook React yang berbeda). Paket ini terus dikembangkan agar developer dapat dengan mudah menambahkan reaktivitas ke dalam aplikasi berbasis React mereka, termasuk dukungan untuk semua metode RPC Solana yang umum dan integrasi yang lebih erat dengan wallet-ui.
Fakta menarik: Ada rencana untuk mengintegrasikan Gill secara langsung ke dalam framework Anchor agar developer dapat lebih mudah memanfaatkan pengoptimalan dan peningkatan pengalaman developer dari Gill dalam aplikasi mereka. Siapa tahu, mungkin Gill akan menjadi pilihan default di Anchor v2. :shhh:
Cara Berkontribusi pada Gill
Library Gill bersifat open-source (lisensi MIT), dan kontribusi sangat diterima! Jika Anda tertarik untuk berkontribusi pada library ini, lihat issue yang masih terbuka dan pertimbangkan untuk menangani salah satunya.
Jika Anda ingin merekomendasikan fitur baru atau peningkatan untuk library ini, buka issue terlebih dahulu untuk memulai diskusi dengan para pengelola sebelum mengerjakan kode untuk PR.
Referensi Tambahan
Temukan informasi dan referensi lebih lanjut tentang Gill melalui tautan berikut:
Artikel Terkait
Berlangganan Helius
Ikuti perkembangan terbaru dalam pengembangan Solana dan dapatkan pembaruan saat kami memublikasikan postingan


