BARU: Coba Parsed Events Scan API
Gaming: Bagaimana Solana Mengubah Arena Permainan
Blog/Riset

Gaming: Bagaimana Solana Mengubah Arena Permainan

Developer Experience Engineer0xIchigo di X0xIchigo di LinkedIn0xIchigo di GitHub
Bacaan 28 menit

Apa yang dibahas dalam artikel ini?

Bukan kunci Anda, bukan kripto Anda. Pepatah yang menjadi inti etos kripto ini juga relevan bagi video game. Integrasi blockchain ke dalam dunia gaming bukan sekadar inovasi. Ini merupakan pergeseran paradigma yang memungkinkan kepemilikan aset dan otonomi terdesentralisasi. Solana berada di garis depan pergeseran ini. Solana menawarkan platform smart contract tercepat untuk memanfaatkan keunggulan Web3. Dengan memanfaatkan kecepatan tinggi, biaya rendah dan terprediksi, serta latensi rendah Solana, developer dapat menciptakan pengalaman gaming unik yang tidak mungkin diwujudkan di tempat lain.

Artikel ini membahas potensi blockchain dalam gaming—menelaah argumen yang mendukung gaming Web3 dan alasan developer game perlu mempertimbangkan untuk membangun di Solana. Artikel ini juga membahas cara menginstal, mengonfigurasi, dan menggunakan framework serta platform populer untuk membuat game yang terintegrasi dengan Solana.

Mengapa gaming Web3?

Untuk Gamer

Tidak ada koleksi video game lain yang mendekati Counter-Strike. Bergantung pada kelangkaan dan float-nya, beberapa skin Counter Strike 2 paling langka (yaitu kosmetik senjata dalam game) dapat bernilai ribuan dolar. Neon, trader ternama di komunitas Counter-Strike, memiliki inventaris skin senilai lebih dari $100 ribu. Pada 13 Oktober 2023, ia keliru diblokir oleh Sistem Anti-Cheat Valve (VAC) setelah mengaktifkan fitur Anti-lag+ AMD. Pemblokiran VAC membuat inventaris pemain tidak dapat diperdagangkan, yang berarti inventaris Neon senilai $100 ribu terikat secara permanen pada akunnya. Valve telah menanggapi masalah tersebut secara resmi, dan untungnya, Neon berhasil membuat pemblokirannya dicabut. Counter-Strike 2 masih mengalami masalah pemblokiran game yang keliru.

Pada platform gaming tradisional seperti Steam, selalu ada risiko kehilangan akses ke game atau barang koleksi yang telah dibeli. Tidak ada yang menghalangi Valve untuk mengambil aset Anda. Hal ini tampaknya tidak mungkin terjadi karena dapat menyebabkan kerusakan reputasi yang parah dan menghancurkan seluruh basis pemain. Namun, mereka dapat meningkatkan drop rate item langka sehingga nilainya berkurang. Inilah yang terjadi pada Team Fortress 2. Terlepas dari nilainya, setiap game yang Anda beli dan setiap item dalam game yang Anda kumpulkan dikelola oleh entitas terpusat. Gamer bergantung pada kebijakan perusahaan gaming. Bahkan Ethereum diciptakan karena patch 3.10 World of Warcraft. Vitalik Buterin telah banyak membahas “kengerian sentralisasi” setelah Blizzard melemahkan mantra siphon life karakternya dan menyia-nyiakan waktu bermainnya selama bertahun-tahun. Gamer lelah bergantung pada entitas terpusat. Gaming Web3 menawarkan jalan keluar.

Gaming Web3 adalah pergeseran paradigma. Model ini memanfaatkan teknologi blockchain untuk mendesentralisasi kepemilikan aset dan proses pengambilan keputusan. Model ini memastikan transparansi dan keamanan, sehingga pemain benar-benar memiliki aset dalam game mereka di berbagai platform. Hasilnya adalah ekonomi virtual seperti pasar skin Counter-Strike, tetapi dengan manfaat transparansi, keamanan, dan komposabilitas. Ekonomi ini memfasilitasi model gaming baru yang berpusat pada pengguna, seperti Play-to-earn (P2E), yang memberi pemain imbalan bernilai nyata dari aktivitas bermain mereka.

Ini sama sekali bukan konsep khusus untuk segelintir orang. Potensi gaming Web3 untuk merevolusi industri terlihat dari sejumlah game yang sukses dan berpengaruh. Misalnya, Decentraland menawarkan dunia virtual tempat pemain dapat membeli, menjual, dan mengembangkan properti sebagai NFT. Tokens.com membayar lebih dari $2 juta untuk properti di pusat kota Decentraland. Hal ini menunjukkan berbagai kemungkinan untuk ekonomi virtual, pengalaman digital, dan ruang personal dalam ekosistem Web3. Demikian pula, game Play-to-earn seperti Axie Infinity dan aplikasi gaya hidup seperti STEPN (platform move-to-earn) telah menarik perhatian internasional dengan menunjukkan bagaimana pemain dapat memperoleh penghasilan melalui gameplay. Game seperti Star Atlas dan Aurory meraih kesuksesan serupa di Solana. Ini bukan contoh yang berdiri sendiri. Semuanya merupakan bagian dari tren yang lebih luas, yaitu gaming melampaui hiburan dan menyatu dengan sistem ekonomi serta sosial di dunia nyata.

Untuk Developer

Kemunculan gaming Web3 membuka peluang baru bagi developer game, jauh melampaui batas paradigma gaming saat ini:

  • Pasar yang Lebih Dalam dan Jaminan Kepercayaan: Gaming Web3 menciptakan pasar yang lebih dalam dan tangguh. Developer game dapat menjangkau audiens global yang para pesertanya berinteraksi dengan tingkat kepercayaan lebih tinggi. Semua kepemilikan dan transaksi dalam game dapat diverifikasi serta tidak dapat diubah. Ini berkat transparansi dan keamanan bawaan blockchain.
  • Memanfaatkan Program On-chain yang Sudah Ada: Developer dapat dengan mudah mengintegrasikan program yang sudah ada beserta aset terkait ke dalam game mereka. Hal ini mempercepat waktu masuk pasar sekaligus memungkinkan developer game berfokus pada kreativitas dan inovasi melalui kolaborasi ekosistem
  • Inovasi Ekonomi dan Gameplay: Developer game dapat merancang siklus game dan ekonomi yang rumit dengan memanfaatkan aplikasi atau pengalaman on-chain lainnya. Keterhubungan ini memungkinkan terciptanya dunia game yang kaya dan dinamis, tempat tindakan dalam satu game dapat menimbulkan efek berantai pada game lain
  • Mendorong Modding: Keterbukaan blockchain memberi developer game peluang untuk membangun game dengan cara yang mendukung modding. Keterbukaan ini dapat memicu inovasi berbasis komunitas, dengan pemain turut berkontribusi terhadap evolusi game. Ini merupakan peralihan dari lingkungan sumber tertutup ke model pengembangan kolaboratif yang berpusat pada komunitas

Blockchain tidak hanya menawarkan platform untuk membuat game. Blockchain menjadi sarana untuk memelopori bentuk baru pengalaman digital interaktif. Blockchain membuka jalan menuju ekosistem gaming yang lebih dinamis dan partisipatif.

Mengapa membangun di Solana?

Biaya transaksi yang rendah dan terprediksi sangat penting bagi gaming Web3. Gamer tidak ingin membayar biaya selangit untuk memainkan game. Solana memiliki biaya transaksi rendah, sering kali di bawah $0,001 USD, dengan rata-rata biaya non-voting berkisar antara 0,000005 hingga 0,00007 SOL. Biaya ini juga dapat diprediksi berkat pasar biaya yang dilokalkan. Pasar tersebut mengisolasi kemacetan sehingga hanya transaksi yang mencoba mengakses area state dengan permintaan tinggi yang mengalami kenaikan biaya. Ini berbeda dari jaringan berbasis gas seperti Ethereum, yang biaya transaksinya tidak terprediksi dan dapat mencapai lebih dari seratus dolar untuk satu transaksi sederhana saat terjadi kemacetan tinggi.

Arsitektur Solana menawarkan komposabilitas yang tiada tanding. Bagi pemain, ini berarti pengalaman pengguna yang efisien dengan satu wallet. Pemain tidak perlu mencemaskan kerumitan bridging ke platform lain. Semuanya dapat diakses dan saling terhubung dalam ekosistem Solana. Bagi developer game, komposabilitas menghadirkan banyak peluang. Developer dapat mengintegrasikan dan memanfaatkan program on-chain yang sudah ada dengan mudah (misalnya, kemitraan The Remnants dan Magic Eden). Hal ini memastikan likuiditas aset game tidak terfragmentasi di berbagai L2 atau shard lain. Solana mengembangkan ekosistem yang dapat dikomposisikan, yang memfasilitasi kolaborasi tanpa hambatan antara game, komunitas, dan aplikasi lain di jaringan.

Kecepatan tinggi dan latensi rendah sangat penting untuk gaming. Transaksi lambat dapat menghambat pembaruan state game, menyebabkan lag yang tidak tertahankan, dan memperpanjang waktu tunggu. Hal ini akan menghasilkan pengalaman pengguna yang lebih buruk daripada gaming tradisional. Solana dirancang untuk throughput transaksi tinggi. Rata-ratanya mencapai 400 transaksi buatan pengguna per detik (TPS) dan lebih dari 2.000 TPS saat permintaan tinggi. Dengan hadirnya inovasi seperti Firedancer, Solana berpotensi untuk diskalakan agar dapat mendukung aplikasi konsumen tradisional apa pun. Solana juga memiliki target waktu slot sebesar 400 milidetik (yaitu waktu yang diperlukan setiap ledger untuk menyerap transaksi dan menghasilkan blok). Waktu ini dapat bervariasi antara 500–600 milidetik berdasarkan permintaan jaringan, menjadikannya blockchain tercepat yang tersedia. Hal ini menjadikannya database real-time yang sempurna untuk genre seperti game strategi, game berbasis giliran, game pembangunan kota, dan game idle.

Forever Games adalah game yang sepenuhnya on-chain. Ini merupakan kasus integrasi blockchain paling ekstrem, ketika state dan logika game berjalan sepenuhnya di blockchain. Hasilnya adalah game persisten yang terhubung ke sistem protokol, dApp, dan program yang kaya dengan hambatan masuk rendah. Contohnya di Solana meliputi:

Sebagai gamer, waktu respons 400 milidetik terdengar buruk untuk game balap atau tembak-menembak real-time. Namun, tidak semuanya harus ditempatkan langsung secara on-chain. Misalnya, integrasi lebih kecil yang menggunakan NFT untuk merepresentasikan item dalam game, token untuk pembelian dalam aplikasi, dan wallet pemain untuk autentikasi dapat dilakukan dengan cepat. Saat ini tersedia banyak alat yang dapat Anda gunakan untuk mulai berintegrasi dengan Solana.

Alat untuk Membuat Game Solana

Artikel ini membahas sejumlah framework dan platform populer untuk membuat game yang terintegrasi dengan Solana. Agar tetap ringkas, ada beberapa alat yang tidak kami bahas, tetapi telah kami tautkan di bagian sumber daya tambahan di bawah. Alat tersebut mencakup Godot Solana SDK atau Template Pemula Phaser 3 TypeScript. Dalam artikel ini, kami membahas cara menginstal, mengonfigurasi, dan menggunakan alat berikut:

Anchor

Pengembangan game secara on-chain menjadi jauh lebih mudah dengan framework seperti Anchor. Anchor adalah framework tangguh untuk membuat program yang aman dengan cepat. Framework ini menyederhanakan proses pengembangan dengan mengurangi boilerplate, menangani berbagai pemeriksaan keamanan, mengotomatiskan pembuatan library klien, dan menawarkan penyiapan pengujian yang lengkap. Cara termudah untuk mengembangkan game yang sepenuhnya on-chain adalah dengan menyimpan logika dan state game dalam program Anchor. Anchor membantu dengan mengabstraksikan kompleksitas model pemrograman tingkat rendah Solana. Kini, developer dapat lebih berfokus pada pengembangan game daripada berkutat dengan SVM.

Instalasi

Rust diperlukan untuk menggunakan Anchor. Rust dapat diinstal di sini atau dengan perintah berikut:

Kode
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Anchor juga menyarankan pengguna baru Rust untuk membaca sembilan bab pertama buku Rust. Bagian ini membahas dasar-dasarnya karena pada umumnya pengetahuan Rust tingkat lanjut tidak diperlukan untuk menulis program Anchor.

Anchor juga memerlukan Solana Tool Suite:

Kode
# macOS and Linux
sh -c "$(curl -sSfL https://release.solana.com/v1.17.7/install)"

# Windows
cmd /c "curl https://release.solana.com/v1.17.7/solana-install-init-x86_64-pc-windows-msvc.exe --output C:\solana-install-tmp\solana-install-init.exe --create-dirs"

Anda dapat memastikan versi solana yang diinginkan telah terinstal dengan menjalankan perintah solana --version.

Yarn juga diperlukan dan dapat diinstal menggunakan pengelola paket npm: npm install --global yarn.

Sebaiknya instal Anchor menggunakan pengelola versi Anchor (avm). Alat ini dapat diinstal menggunakan cargo: cargo install --git <https://github.com/coral-xyz/anchor> avm --locked --force. Setelah itu, kita dapat menginstal dan menggunakan versi terbaru:

Kode
avm install latest
avm use latest

# Verify the installation
avm --version

Dokumentasi Anchor juga menyediakan panduan instalasi mendalam.

Penggunaan dan Contoh

SolanaCiv dikembangkan sepenuhnya secara on-chain menggunakan Anchor. Pengelolaan sumber daya, perekrutan unit, penelitian teknologi baru, pertempuran melawan kaum barbar, dan perdagangan berlangsung secara on-chain. Kode sumbernya juga terbuka! Artinya, Anda dapat menggunakannya sebagai referensi untuk menguraikan logika dan state game guna melihat bagaimana semuanya disimpan secara on-chain.

Clockwork adalah engine otomatisasi sumber terbuka untuk Solana. Alat ini sangat berguna bagi pengembangan game karena memfasilitasi penjadwalan transaksi dan pembuatan program otomatis berbasis peristiwa. Alat ini dapat diinstal dengan perintah berikut: cargo install -f --locked clockwork-cli dan terintegrasi dengan baik bersama Anchor. Daftar contoh penggunaan Clockwork dapat ditemukan di sini.

Solana Playground adalah lingkungan pengembangan kode berbasis browser untuk menguji dan menerapkan program. Integrated development environment (IDE) miliknya menjadikannya pilihan ideal bagi developer yang baru mengenal Anchor dan ingin mempelajari pengembangan game Solana. Platform ini memiliki beberapa tutorial Anchor yang relevan dengan gaming on-chain. Misalnya, Tiny Adventure adalah tutorial game on-chain yang ramah bagi pemula. Tutorial tersebut mengajarkan cara menggunakan Anchor untuk menggerakkan karakter game ke kiri dan kanan serta menggunakan Program Derived Address (PDA) untuk menyimpan data game. Tutorial ini juga menunjukkan cara menyiapkan front end di Next.js menggunakan adapter wallet Solana. Kode akhirnya dapat ditemukan di sini.

Untuk membuat program Anchor dengan klien TypeScript secara cepat, gunakan perintah npx create-solana-game yang diikuti nama game Anda. Perintah ini menyederhanakan proses pengembangan Anchor dan TypeScript sekaligus menyusun proyek baru. Alat ini dikembangkan oleh Jonas Hahn dan Beeman, serta dapat ditemukan di repositori GitHub solana-developers.

Turbo

Turbo adalah engine dan marketplace game 2D generasi berikutnya yang dirancang untuk memberdayakan developer indie. Turbo mencakup sejumlah fitur inovatif:

  • Game melakukan hot-reload setiap kali kode, shader, atau sprite diubah
  • Game berjalan secara headless sehingga Anda dapat memverifikasi state game di server jarak jauh
  • Engine berjalan di WebAssembly dan WebGPU sehingga dapat beroperasi di platform apa pun
  • API bawaan engine ramah bagi pemula

Turbo sedang dibuat oleh Jozanza dengan Rust. Karena dibuat dengan Rust, developer dapat dengan mudah menggunakan kembali struct Anchor dalam program mereka tanpa memerlukan SDK atau plugin. Proyek ini masih berada pada tahap awal pengembangan. Namun, situs webnya memuat beberapa contoh yang dapat dijalankan di browser, yang menunjukkan kemampuan Turbo dan pengalaman developer yang intuitif. Selain itu, panduan langkah demi langkah “Halo, dunia!” dapat ditemukan di sini.

Instalasi

Untuk mulai menggunakan Turbo, kita harus menginstal semua dependensi Rust yang relevan terlebih dahulu:

Kode
# Download and run the rust installer
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Add wasm targets
rustup target add wasm32-unknown-unknown wasm32-wasi

# Install cargo-watch
cargo install cargo-watch

Setelah itu, kita perlu mengunduh dan menjalankan penginstal untuk command line interface (CLI) Turbo:

Kode
sh -c "$(curl -sSfL https://turbo.computer/install.sh)"

Setelah instalasi selesai, kita dapat menggunakan perintah turbo-cli -h untuk memastikan Turbo CLI telah terinstal dengan benar. Dengan perintah ini, Anda akan melihat informasi penggunaan Turbo:

Kode
Run Turbo games natively on desktop

Usage: turbo-cli

Commands:
  init  Initializes a new Turbo project in Rust
  run   Runs a Rust Turbo project
  help  Print this message or the help of the given subcommand(s)

Options:
  -v, --version  Print version
  -h, --help     Print help
  -V, --version  Print version

Proses Pengembangan

Turbo memiliki sejumlah macro untuk menyederhanakan proses pengembangan. Sebagai catatan, macro Rust adalah alat metapemrograman yang efektif untuk pembuatan kode (yaitu kode yang menulis kode lain). Macro bermanfaat untuk mengurangi boilerplate dan memungkinkan pola kode yang lebih ekspresif.

Macro println adalah implementasi khusus dari macro standar println. Macro ini memformat string, lalu meneruskannya ke sistem logging engine game:

Kode
macro_rules! println {
    ($fmt:expr $(, $($arg:tt)*)?) => {
        $crate::sys::log(&format!($fmt, $($($arg)*)?))
    };
}

Macro cfg digunakan untuk keperluan konfigurasi. Macro ini mengekspos fungsi config, yang mengembalikan integer 64-bit dengan menggabungkan pointer ke string konfigurasi dan panjangnya. Ini berguna untuk meneruskan data konfigurasi dari Rust ke lingkungan lain seperti WebAssembly:

Kode
macro_rules! cfg {
    ($toml:expr) => {
        #[no_mangle]
        pub unsafe extern "C" fn config() -> u64 {
            let ptr = $toml.as_ptr() as u64;
            let len = $toml.len() as u64;
            (len << 32 | ptr)
        }
    };
}

Macro init berguna untuk pengelolaan state game. Macro ini menentukan struct dan menyediakan method untuk memuat serta menyimpan state-nya. Macro ini mengimplementasikan method load dan save untuk struct tersebut, dengan menggunakan Borsh untuk persistensi state:

Kode
macro_rules! init {
    (struct $StructName:ident { $($fields:tt)* } = $default:expr) => {
        ...
    };
}

Macro go digunakan untuk menentukan logika utama game. Macro ini membungkus blok kode dalam fungsi yang dapat dipanggil dari lingkungan eksternal seperti WebAssembly. Macro ini juga menentukan titik masuk untuk logika game dan fungsi run_snapshot untuk menjalankan game dengan snapshot state-nya:

Kode
macro_rules! go {
    ($($body:tt)*) => {
        use $crate::prelude::*;

        #[no_mangle]
        #[allow(overflowing_literals, non_upper_case_globals)]
        pub unsafe extern "C" fn run() {
            use std::f32::consts::PI;
            $($body)*
        }
        pub fn run_snapshot(snapshot_data: &[u8]) -> Vec {
            $crate::run_snapshot(snapshot_data, || unsafe { run() })
        }
    };
}

Turbo juga menggunakan macro strike dari crate struckstruck untuk meningkatkan kemampuan definisi struct Rust. Biasanya, struct bertingkat harus ditentukan secara terpisah. Macro strike memungkinkan penentuan struct beserta struct bertingkatnya secara inline. Fitur ini menyederhanakan kode sehingga struktur data yang kompleks lebih mudah dibaca dan lebih ringkas. Fitur ini juga secara otomatis menerapkan serialisasi Borsch ke seluruh struktur. Selain itu, fitur ini menyebarkan macro derive milik struct tingkat teratas ke semua struct bertingkat.

Dengan demikian, keseluruhan alur kerja developer untuk proyek Turbo adalah sebagai berikut:

Kode
// Defne the game configuration using the turbo::cfg! macro
turbo::cfg! {r#"
    name = "Grand Theft Auto VI"
    version = "1.0.0"
    author = "Ichigo"
    description = "Vice City but pixelated"
    [settings]
    resolution = [256, 144]
    tile_size = [32, 32]
"#}

// Define the game state initialization using the turbo::init! macro
turbo::init! {
	...
}

// Implement the game loop using the turbo::go! macro
turbo::go! {
	// Load the game state
	let mut state = GameState::load();
	...
}

Dukungan Solana

Turbo berbeda dari engine pengembangan game berbasis Rust lainnya karena akan memiliki dukungan penuh untuk Solana. Misalnya, Turbo dapat mengambil data account dari RPC dan mendekodenya hanya dalam dua baris kode. Turbo juga otomatis berlangganan pembaruan account melalui WebSockets sehingga data Anda selalu mutakhir:

Kode
// Get the Solana account data
let response = solana::get_account("pubkey");

// Decode the account data
let decoded = response.decode_anchor::();

// And now we can work with on-chain data!
if let Ok(data) = decoded {
	...
}

Magicblock

Magicblock adalah framework sumber terbuka serbaguna untuk membuat game on-chain. Framework ini memungkinkan siapa pun membuat dan memainkan game di Solana atau SVM. Magicblock menyediakan rangkaian alat lengkap yang memungkinkan developer mengembangkan game yang sepenuhnya on-chain atau mengintegrasikan Solana ke dalam game yang sudah ada. Framework ini mencakup fitur berikut:

Dengan semua fitur ini, Magicblock bertujuan mengabstraksikan kompleksitas agar developer dapat berfokus untuk menciptakan pengalaman pengguna terbaik. Framework berlisensi MIT ini dikelola oleh Magicblock Labs (yaitu Andrea dan Peak).

Solana Unity SDK

Solana Unity SDK adalah paket sumber terbuka dengan alat yang memungkinkan developer game mengintegrasikan NFT berbasis Solana, token, dan program on-chain ke dalam game Unity mereka. SDK ini memanfaatkan Solana Unity Core, framework yang kompatibel dengan .NET standard 2.0 dan mengintegrasikan Solana dengan ekosistem .NET. Framework ini memiliki banyak fitur, seperti cakupan penuh JSON RPC API, dekompilasi instruction, dukungan Solana Mobile Stack, dan operasi DEX native.

Daftar contoh game yang dibuat di Unity dengan Solana Unity SDK dapat ditemukan di sini.

Instalasi, Konfigurasi, dan Penggunaan

Untuk membuat game dengan Unity, unduh Unity Hub di sini. Unity Hub mengelola beberapa instalasi Unity Editor sehingga Anda dapat mengerjakan dan membuat proyek baru di berbagai versi. Sebelum melanjutkan, pastikan sistem Anda memenuhi persyaratan berikut:

  • OS: Windows 7 SP1+, 8, 10, hanya versi 64-bit; Mac OS X 10.13+; Ubuntu 16.04, 18.04, dan CentOS 7
  • GPU: Kartu grafis dengan kemampuan DX10 (shader model 4.0)

Setelah Unity terinstal, kita dapat membuat dan membuka proyek baru.

Setelah proyek baru terbuka, buka jendela Package Manager. Anda dapat mengaksesnya dari menu atas Unity melalui Window > Package Manager.

Setelah jendela terbuka, klik tombol tambah (+) di bilah status. Opsi untuk menambahkan paket akan muncul. Kemudian, pilih “Add package from git URL” dari menu.

Masukkan URL Git https://github.com/magicblock-labs/Solana.Unity-SDK.git di kotak teks, lalu klik “Add.” Anda dapat menginstal versi paket tertentu dengan memasukkan https://github.com/magicblock-labs/Solana.Unity-SDK.git#X.Y.Z dan mengganti X.Y.Z dengan versi yang diinginkan. Semua rilis yang tersedia dapat ditemukan di sini.

Setelah Solana Unity SDK terinstal, impor Samples menggunakan inspector Package Manager. Ini mencakup contoh scene yang dapat Anda jadikan referensi atau modifikasi untuk diintegrasikan ke dalam proyek Unity Anda. Scene ini berada di folder Scenes dan berisi contoh autentikasi wallet serta pertukaran token melalui Orca. Folder Scripts berisi berbagai contoh script, termasuk script untuk swap Orca. Script Web3.cs dapat dilampirkan ke objek apa pun dalam proyek Anda. Script ini merupakan titik masuk utama untuk Solana Unity SDK. Script ini adalah singleton yang mengelola koneksi ke Solana serta memfasilitasi login wallet, penandatanganan transaksi, dan banyak lagi. Folder Prefabs berisi template yang menyimpan konfigurasi Object. Template ini dapat digunakan untuk membuat instance dari aset yang sama dan digunakan kembali di seluruh proyek Anda.

Channel YouTube Magicblock berisi tutorial tentang menghubungkan wallet Solana ke Unity, mengambil public key dan saldo wallet, melakukan pengujian dengan wallet dalam game, dan membuat engine catur secara on-chain.

Repositori GitHub Solana Unity SDK juga berisi sejumlah contoh script, mulai dari decoding instruction hingga pembuatan transaksi.

Contoh Implementasi Jupiter

Selain Orca, Jupiter didukung secara native di Solana Unity SDK. SDK ini menawarkan method utilitas untuk memfasilitasi quote swap serta membuat dan mengirim transaksi swap.

Untuk melakukan swap, pertama-tama kita harus membuat instance IDexAggregator dengan menyediakan account default. Instance ini akan digunakan untuk berinteraksi dengan Jupiter:

Kode
IDexAggregator dex = new JupiterDexAg(Web3.Account);

Kemudian, kita menentukan token yang ingin ditukar. Dalam contoh ini, kita akan menukar SOL dengan BONK:

Kode
TokenData tokenA = await dex.GetTokenBySymbol("SOL");
TokenData tokenB = await dex.GetTokenBySymbol("BONK");

Selanjutnya, kita memperoleh quote untuk swap tersebut. Berikut tampilan quote untuk menukar 1 SOL:

Kode
SwapQuoteAg swapQuote = await dex.GetSwapQuote(
    tokenA.MintAddress,
    tokenB.MintAddress,
    DecimalUtil.ToUlong(1, tokenA.Decimals)
);

var quote = DecimalUtil.FromBigInteger(swapQuote.OutputAmount, tokenB.Decimals);

// Logs the expected amount of BONK
Debug.Log(quote);

Kita juga dapat menampilkan jalur rute swap agar lebih transparan:

Kode
Debug.Log(string.Join(" -> ", swapQuote.RoutePlan.Select(p => p.SwapInfo.Label)));

Sekarang kita dapat membuat transaksi swap, menandatanganinya dengan wallet, dan mengirimkannya:

Kode
Transaction tx = await dex.Swap(swapQuote);
await Web3.Wallet.SignAndSendTransaction(tx);

Memindahkan Program ke Unity

Developer dapat menggunakan paket Solana Unity Anchor untuk mengintegrasikan program Anchor ke Unity. Paket ini berisi Konverter IDL ke C#. Konverter tersebut menyederhanakan konversi IDL Anchor (yaitu representasi JSON dari program Solana) menjadi kode C# untuk proyek Unity. Proses integrasi mengikuti dua langkah utama:

  • Instalasi: perintah dotnet tool install -g Solana.Unity.Anchor.Tool digunakan untuk menginstal Solana Unity Anchor Tool. Flag -g memastikan paket diinstal secara global sehingga Anda tidak perlu menginstal alat ini pada setiap proyek baru
  • Pembuatan Kode: perintah dotnet anchorgen -i idl/file.json -o src/ProgramCode.cs digunakan untuk membuat representasi C# dari program. Perintah ini mengonversi IDL yang ditentukan menjadi file C# yang siap digunakan di Unity.

Developer dapat memindahkan program Solana secara efisien ke lingkungan Unity mereka dengan mengikuti langkah-langkah ini. Panduan video langkah demi langkah untuk proses ini yang dibuat oleh Jonas Hahn dapat ditemukan di sini.

SOAR

Solana On-Chain Achievement and Ranking (SOAR) adalah program yang dirancang untuk menyediakan solusi lancar dalam mengelola papan peringkat, pencapaian, profil pemain, dan distribusi hadiah otomatis di Solana. Program ini mendukung beberapa fitur, termasuk:

  • Pembuatan papan peringkat
  • Pengelolaan pencapaian
  • Dukungan klien TypeScript
  • Berinteraksi dengan program SOAR melalui panggilan Cross-Program Invocation (CPI)

Dukungan untuk Solana Unity SDK sedang dikembangkan dan diperkirakan akan segera tersedia.

SOAR dapat diintegrasikan dengan mudah ke dalam proyek menggunakan beberapa baris kode. Contohnya:

Kode
import { SoarProgram, GameType, Genre } from "@magicblock-labs/soar-sdk";

const provider = anchor.AnchorProvider.env();
anchor.setProvider(provider);

const client = SoarProgram.get(provider);

let game = Keypair.generate();
let title = "Game1";
let description = "Description";
let genre = Genre.Action;
let gameType = GameType.Web;
let nftMeta = Keypair.generate().publicKey;
let _auths = auths.map((keypair) => keypair.publicKey);

// Retrieve the bundled transaction.
let { newGame, transaction } = await client.initializeNewGame(game.publicKey, title, description, genre, gameType, nftMeta, _auths);

// Send and confirm the transaction with the game keypair as signer.
await client.sendAndConfirmTransaction(transaction, [game]);

Kode di atas diambil langsung dari dokumentasi Magicblocks tentang SOAR. Cuplikan tersebut dimulai dengan mengimpor modul yang diperlukan dari @magicblock-labs/soar-sdk, termasuk SoarProgram, GameType, dan Genre.

Class SoarProgram memberi klien akses ke setiap instruksi dalam program on-chain SOAR. Class ini juga mencakup fungsi untuk menurunkan PDA dan mengambil beberapa akun.

Kemudian, cuplikan tersebut menginisialisasi penyedia Anchor (anchor.AnchorProvider.env()) dan menetapkannya sebagai penyedia default untuk operasi berikutnya (anchor.setProvider(provider)). Selanjutnya, klien SoarProgram dibuat dengan penyedia yang telah ditetapkan sebelumnya.

Cuplikan tersebut mulai menginisialisasi game baru. Keypair game baru dibuat, lalu detail penting game seperti judul, deskripsi, genre (misalnya, Genre.Action), dan jenis game (misalnya, GameType.Web) ditentukan. Keypair metadata NFT juga dibuat untuk game tersebut. Kemudian, daftar otorisasi (_auths) disiapkan untuk menentukan kontrol akses di dalam game.

Metode initializeNewGame dipanggil pada klien SOAR dengan meneruskan public key, judul, deskripsi, genre, jenis game, metadata NFT, dan otorisasi game. Metode ini mengembalikan objek newGame dan menyiapkan transaksi game baru untuk dikirim. Transaksi dikirim dan dikonfirmasi menggunakan metode sendAndConfirmTransaction yang tersedia pada klien SOAR. Keypair game digunakan sebagai penanda tangan transaksi, sehingga memastikan transaksi diotorisasi oleh pembuat game.

Menginisialisasi klien dan menyiapkan game on-chain baru dengan SOAR sangatlah mudah. Sekarang, kita dapat menggunakan GameClient untuk mendaftarkan game, membuat papan peringkat, dan mengakses status game. Kemungkinannya tidak terbatas.

Alamat program SOAR adalah SoarNNzwQHMwcfdkdLc6kvbkoMSxcHy89gTHrjhJYkk, dan dokumentasi TypeScript-nya dapat ditemukan di sini.

Solana Unreal SDK

Solana Unreal SDK adalah plugin dan toolkit yang memungkinkan pengembang membuat game blockchain di Solana dengan Unreal Engine 5. Toolkit ini berisi templat awal untuk game Massive Multiplayer Online (MMO) yang terintegrasi dengan Solana, termasuk templat untuk server game. Toolkit ini juga mencakup fitur seperti:

Plugin ini memanfaatkan Solnet dan kekuatan runtime .NET agar pengembang dapat berkomunikasi langsung dengan Solana tanpa membuat seluruh pustaka C++ dari awal. LinkStream dapat mengirim pesan transaksi dari game ke dompet, seperti Tranquility, melalui server TCP dan protokol klien. Tim Star Atlas awalnya membuat SDK tersebut, dan Bifrost baru-baru ini melakukan fork dan memperbarui kodenya. Untuk tujuan kita, bagian instalasi berikutnya akan merujuk pada build dari tim Star Atlas. Prosesnya sama untuk Bifrost.

Instalasi

Pertama, kita harus menginstal Epic Games Launcher untuk menggunakan Unreal Engine. Selanjutnya, kita perlu membuat akun Epic Games dan masuk. Setelah masuk, buka tab Unreal Engine, lalu klik tombol Install untuk mengunduh versi terbaru. Panduan terperinci untuk proses ini tersedia di sini. Perhatikan persyaratan sistem yang direkomendasikan untuk Unreal Engine 5:

  • Windows 10 64-bit, Intel atau AMD quad-core, 2,5 GHz atau lebih cepat, RAM 8 GB
  • macOS Big Sur, Intel quad-core, 2,5 GHz atau lebih cepat, RAM 8 GB
  • Linux Ubuntu 18.04, Intel atau AMD quad-core, 2,5 GHz atau lebih cepat, RAM 32 GB

Buka Epic Games Launcher dan jalankan versi Unreal yang telah Anda instal:

Buat proyek baru dan pilih C++ sebagai templat proyek:

Sekarang, tutup editor dan buka folder Project Location yang ditetapkan saat membuat proyek. Kemudian, buat folder Plugins baru di direktori root:

Salin plugin ke direktori Plugins. Klik kanan file .uproject di direktori root, lalu pilih Generate Visual Studio project files. Klik dua kali file .sln dan buka proyek dengan IDE C++ Anda. Kemudian, buka file di Source/<ProjectName>/<ProjectName>.build.cs. Tambahkan nama plugin ke PublicDependencyModuleNames. Dalam kasus ini, kita perlu memasukkan Foundation:

Tambahkan nama plugin ke file .uproject kita:

Tutup IDE Anda dan buat ulang file proyek. Setelah itu, buka solusi proyek Anda (yaitu file .sln), dan proses instalasi selesai.

Penggunaan

Semua konten terkait plugin dapat ditemukan di Plugins > Solana SDK dalam browser konten. Blueprint LinkStream dapat ditemukan di Plugins > Solana SDK Content > Blueprints. Blueprint ini memungkinkan pengembang berkomunikasi dengan Solnet. Peta sandbox yang terdapat dalam folder Maps dapat digunakan sebagai referensi untuk menyiapkan Solana SDK dengan benar. Penjelasan mengenai penggunaan umum, cara menyesuaikan wrapper LinkStream Anda, atau cara berinteraksi dengan REST API untuk autentikasi server tersedia di GitHub Solana Unreal SDK. Penjelasan yang lebih terperinci tentang cara berinteraksi dengan Solana menggunakan Unreal SDK dapat ditemukan di sini.

Fokus Unreal pada pengoptimalan dan efek pascapemrosesan dalam 3D memungkinkan pembuatan game fotorealistis dibandingkan editor lain seperti Unity. Contoh populer hiperrealisme ini adalah Star Atlas. Star Atlas adalah game strategi imersif yang membawa Anda menjelajahi kedalaman ruang angkasa. Game ini dipenuhi peluang, penaklukan wilayah, dan intrik politik. Game lain, seperti Yaku Corp, memanfaatkan fotorealisme Unreal Engine untuk menciptakan MMORPG yang imersif.

Honeycomb

Honeycomb adalah protokol yang dikembangkan oleh Tumi Labs untuk menyederhanakan proses pengembangan game Web3. Honeycomb merupakan rangkaian program on-chain dan alat kompresi status yang menangani fungsi penting dalam siklus hidup game. Semua program dirancang agar interoperabel dan modular. Program-program ini juga dapat disesuaikan dengan kebutuhan masing-masing pengembang. Toolkit pengembangan infrastrukturnya berfokus pada fungsi inti berikut:

  • Hadiah pemain idle (staking)
  • Quest (misi)
  • Loot Box atau Hadiah RNG (undian)
  • Guild / Party
  • Token Game (kustodial dan nonkustodial)
  • Aset Digital yang Dapat Diubah
  • Pembuatan dan Pengelolaan Aset Digital
  • Profil Pemain
  • Struktur Biaya

Alat mereka dapat dibagi ke dalam kategori berikut:

  • Hive Control: program utama yang mengelola semua izin dan delegasi otoritas program di seluruh Honeycomb
  • Asset Hub: rangkaian alat untuk membuat dan mengelola aset dalam game
  • Nectar Utility: rangkaian alat utilitas yang dirancang agar NFT dapat menyediakan fitur game unik, seperti hadiah token idle (staking), quest, dan loot box
  • Buzz Kit: rangkaian alat untuk memfasilitasi guild dalam game. Tumi Labs juga berencana mengembangkan program pencocokan pemain dan pengelolaan status game dalam rangkaian alat ini

Instalasi

Pengembang dapat berinteraksi dengan Honeycomb menggunakan JavaScript SDK dan @solana/web3.js:

Kode
# Using npm
npm install @solana/web3.js @honeycomb-protocol/hive-control

# Using yarn
yarn add @solana/web3.js @honeycomb-protocol/hive-control

Contoh Penggunaan

Setelah diinstal, pengembang dapat menginisialisasi objek Honeycomb dengan objek Connection Solana:

Kode
import * as web3 from "@solana/web3.js";
import { Honeycomb } from "@honeycomb-protocol/hive-control";

const honeycomb = new Honeycomb(
  new web3.Connection("https://api.mainnet-beta.solana.com")
);

Dari sini, pilihannya tidak terbatas. Misalnya, pengembang dapat berinteraksi dengan IdentityClient untuk mengelola identitas dan profil pengguna. guestIdentity adalah identitas default yang digunakan sebagai placeholder hingga keypair atau dompet didaftarkan pada instance Honeycomb. Keypair dapat ditautkan sebagai identitas dengan perintah berikut: honeycomb.use(keypairIdentity(<keypair>);. Demikian pula, objek dompet (Solana Wallet Adapter) dapat didaftarkan sebagai identitas menggunakan fungsi walletIdentity yang tersedia pada instance Honeycomb. Identitas dapat digunakan untuk autentikasi, seperti menandatangani pesan atau transaksi.

Contoh menarik lainnya adalah HttpClient. Modul ini memfasilitasi permintaan HTTP menggunakan Axios atau Fetch, serta menyediakan fungsi terkait HTTP. Modul ini memungkinkan penyesuaian header permintaan dan menyediakan metode untuk membuat permintaan GET, POST, PUT, dan DELETE:

Kode
// Make a GET request
honeycomb
  .http()
  .get("/users", { authToken: "myAuthToken" })
  .then((response) => {
    console.log("GET Response:", response);
  })
  .catch((error) => {
    console.error("GET Error:", error);
  });

// Make a POST request
const userData = { name: "John Doe", email: "john@example.com" };
honeycomb
  .http()
  .post("/users", { data: userData })
  .then((response) => {
    console.log("POST Response:", response);
  })
  .catch((error) => {
    console.error("POST Error:", error);
  });

Hal ini sangat menarik karena pengembang dapat mengakses API pihak ketiga, seperti Digital Asset Standard (DAS) API, untuk membuat kueri terhadap aset digital on-chain lain di luar game.

Cuplikan kode ini diadaptasi dari dokumentasi Honeycomb Protocol. Dokumentasi SDK dapat ditemukan di sini.

GameShift

GameShift adalah platform yang diluncurkan oleh Solana Labs agar pengembang game dapat mengintegrasikan elemen Web3 dengan mudah melalui satu API. Platform ini bertujuan memfasilitasi pembuatan pengalaman Web2 yang ramah pengguna sekaligus memanfaatkan manfaat gaming di Solana. GameShift memberikan pengalaman pengguna yang lancar dalam ekosistem Web3 dengan menangani semua biaya gas, interaksi blockchain, dan dompet. GameShift API memiliki empat vertikal:

  • Pembuatan Aset: mencetak aset game dengan metadata terstruktur
  • Perdagangan Aset: membeli dan menjual aset dalam USD di marketplace bermerek yang diperkirakan akan segera diluncurkan
  • Pembayaran: pembayaran kartu kredit dan integrasi pemrosesan pembayaran yang didukung di lebih dari 170 negara, dengan perlindungan chargeback 100%
  • Kustodi Mandiri Aset Dompet: memungkinkan pemain menyimpan dan memperdagangkan aset mereka dalam dompet nonkustodial (yaitu, tanpa kata sandi atau seed phrase!)

Pengembang dapat mulai menggunakan GameShift dengan membuat akun di konsol GameShift, menyiapkan organisasi, menambahkan pengembang ke organisasi, menambahkan game, dan mengelola API key pengembang. Seluruh prosesnya dijelaskan di sini.

Akun merchant diperlukan untuk transaksi fiat. Akun dapat dibuat dalam dua langkah:

  • Know Your Business (KYB): mengharuskan pengembang memberikan informasi tentang bisnis mereka untuk mematuhi undang-undang pengiriman uang. Saat ini, GameShift hanya mendukung penyelesaian fiat ke rekening bank yang berdomisili di AS
  • Menyiapkan Akun Penyelesaian Fiat: pengembang harus menghubungi GameShift untuk mendapatkan tautan ke formulir onboarding merchant setelah siap mengaktifkan pembayaran fiat dalam produksi. Informasi KYB ditetapkan melalui formulir ini. Validasi dapat memerlukan waktu beberapa menit, tetapi beberapa kasus mungkin memerlukan peninjauan manual

Semua aktivitas GameShift diatur dalam organisasi:

Onboarding Pengguna

Setelah semuanya disiapkan, pengembang dapat berinteraksi dengan REST API. Pengembang dapat mendaftarkan pengguna untuk memberi mereka akses ke fitur marketplace, aset on-chain, dan alur pembayaran. Hal ini dilakukan dengan membuat permintaan POST HTTP ke https://api.gameshift.dev/users menggunakan API key, alamat email pengguna, dan referenceId (nilai unik, seperti UUID) dalam isi permintaan:

Kode
curl --request POST \
     --url https://api.gameshift.dev/users \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --header 'x-api-key: ' \
     --data '
{
  "referenceId": "exampleReferenceId",
  "email": "user@example.com"
}

Informasi dan aset pengguna dapat diambil kapan saja setelah pengguna terdaftar. Untuk mengambil informasi dan aset pengguna, permintaan GET HTTP dapat dibuat ke https://api.gameshift.dev/users/{the-user-id-you-used-to-register}/assets:

Kode
curl --request GET \
     --url https://api.gameshift.dev/users/exampleReferenceId/assets \
     --header 'accept: application/json' \
     --header 'x-api-key:

Jika berhasil, daftar aset pengguna yang diberi nomor halaman akan dikembalikan:

Kode
{
  "data": [
    {
      "id": "dcde5bc8-b30b-46b6-b4da-0763953b2484",
      "collectionId": "36c97125-04a5-4dc3-b92a-029d74a42287",
      "attributes": [],
      "name": "Example Asset",
      "description": "Example Description",
      "imageUrl": "https://solana.com/src/img/branding/solanaLogoMark.png",
      "status": "Committed",
      "owner": {
        "address": "",
        "referenceId": "exampleReferenceId"
      }
    }
  ],
  "meta": {
    "page": 1,
    "perPage": 50,
    "totalPages": 1
  }
}

Semua cuplikan kode untuk proses onboarding dapat ditemukan di sini.

Membuat Aset

Sebagai contoh, pengembang dapat membuat aset game on-chain secara terprogram dengan mengirimkan permintaan POST HTTP ke https://api.gameshift.dev/assets:

Kode
curl --request POST \
     --url https://api.gameshift.dev/assets \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --header 'x-api-key: ' \
     --data '
{
  "details": {
    "description": "Example description",
    "imageUrl": "https://solana.com/src/img/branding/solanaLogoMark.png",
    "name": "Example Asset",
    "attributes": [
      {
        "displayType": "Formatted Attribute Name",
        "traitType": "attribute-name",
        "value": "attribute-value"
      }
    ]
  },
  "destinationUserReferenceId": "exampleUserId"
}
'

Aset memerlukan detail berikut:

  • description - string 64 karakter yang memberikan informasi tentang aset
  • name - string 32 karakter untuk mengidentifikasi aset
  • imageUrl - tautan langsung ke gambar yang merepresentasikan aset
  • displayType - judul berformat opsional
  • traitType - nama opsional untuk karakteristik
  • value - kolom opsional yang merepresentasikan nilai atribut

Permintaan POST HTTP juga memerlukan referenceId pengguna yang diberikan oleh kolom destinationUserReferenceId. Penjelasan lebih terperinci tentang cara bekerja dengan aset game dapat ditemukan di sini.

Kesimpulan

Mengintegrasikan teknologi blockchain dalam gaming, terutama melalui Solana, merupakan lompatan besar dalam cara kita memandang dan berinteraksi dengan dunia digital. Alat seperti Anchor, Turbo, Magicblock, serta Solana Unity dan Unreal SDK memungkinkan pengembang menciptakan cara baru untuk bermain game. Kini, lebih mudah dari sebelumnya bagi pemain untuk mengembangkan ekonomi virtual dan berinteraksi dalam matriks sosial yang belum pernah ada, secara sepenuhnya transparan dan mudah diakses. Platform seperti Honeycomb dan GameShift semakin menunjukkan potensi gaming Web3 dengan menyederhanakan proses pengembangan dan meningkatkan keterlibatan pemain.

Solana berada di garis depan revolusi gaming ini. Komunitas gaming Solana terus berkembang, dengan hackathon khusus dan game baru yang terus bermunculan. Solana Labs dan Solana Foundation memimpin berbagai inisiatif dengan membuat tutorial, alat, dan platform untuk membantu mengembangkan komunitas yang sedang tumbuh ini. Kemungkinan perkembangan gaming tidak terbatas ketika dibangun di atas blockchain tercepat yang tersedia.

Jika Anda sudah membaca sejauh ini, anon, terima kasih! Pastikan Anda memasukkan alamat email di bawah agar tidak pernah melewatkan kabar terbaru tentang Solana. Siap mempelajari lebih dalam? Bergabunglah dengan Discord kami untuk mulai membangun masa depan gaming di blockchain berperforma tertinggi hari ini.

Sumber Daya Tambahan / Bacaan Lebih Lanjut

Berlangganan Helius

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

Gambar diperbesar