Panduan Pemula untuk TON: Akun, Token, dan Keamanan

Latar Belakang

TON (The Open Network) adalah platform blockchain terdesentralisasi yang awalnya dirancang dan dikembangkan oleh tim Telegram. TON bertujuan untuk menyediakan platform blockchain berkinerja tinggi dan terukur untuk mendukung aplikasi terdesentralisasi skala besar (DApps) dan kontrak pintar.

TON unik karena mudah digunakan, sangat terintegrasi dengan Telegram, sehingga memungkinkan orang awam untuk menggunakan token dengan mudah. Pada saat yang sama, TON juga kompleks, dengan arsitektur yang berbeda dari blockchain lainnya, dan menggunakan bahasa kontrak pintar non-mainstream yang disebut FunC.

Hari ini, kita akan membahas karakteristik TON dan keamanan aset pengguna dari perspektif akun, token, dan transaksi.

Karakteristik TON

Pembuatan Akun

Metode pembuatan alamat akun di TON berbeda dengan kebanyakan blockchain lainnya; TON merupakan sebuah alamat kontrak pintar. Pertama, semuanya dimulai dengan kunci pribadi. TON menggunakan algoritma Ed25519 untuk menghasilkan kunci publik, dengan proses sebagai berikut:

Ada dua bentuk kunci publik: satu adalah kunci publik mentah yang dihitung dari kunci pribadi, yang terlihat seperti ini:

E39ECDA0A7B0C60A7107EC43967829DBE8BC356A49B9DFC6186B3EAC74B5477D

Yang lainnya adalah kunci publik yang “dipercantik”, yang menyertakan beberapa informasi dan bit-bit pemeriksaan, dan sepertinya:

Pubjns2gp7DGCnEH7EOWeCnb6Lw1akm538YYaz6sdLVHfRB2

Jika Anda berpikir bahwa hanya dengan mendapatkan kunci publik akan memungkinkan Anda untuk mendapatkan alamat akun seperti di Ethereum, Anda salah. Hanya dengan memiliki kunci publik pengguna saja tidak cukup untuk menghitung alamat akun pengguna.

Seperti yang telah disebutkan, alamat akun pengguna adalah alamat smart contract, tetapi bagaimana Anda dapat menggunakan smart contract tanpa memiliki akun?

Urutan yang benar adalah pertama-tama menghitung alamat, menerima sejumlah token awal, dan kemudian menggunakan kontrak. Proses penghitungan alamat akun ditunjukkan pada diagram berikut:

Alamat pengguna juga hadir dalam beberapa bentuk. Pertama, ada bentuk mentah, yang terlihat seperti:

0:b4c1b2ede12aa76f4a44353944258bcc8f99e9c7c474711a152c78b43218e296

Kemudian ada formulir yang mudah digunakan, yang terlihat seperti:

Mainnet:

  • Dapat dipantulkan: EQC0wbLt4Sqnb0pENTlEJYvMj5npx8R0cRoVLHi0MhjilkPX
  • Tidak dapat dipantulkan: UQC0wbLt4Sqnb0pENTlEJYvMj5npx8R0cRoVLHi0Mhjilh4S

Testnet:

  • Dapat dipantulkan: kQC0wbLt4Sqnb0pENTlEJYvMj5npx8R0cRoVLHi0Mhjilvhd
  • Tidak dapat dipantulkan: 0QC0wbLt4Sqnb0pENTlEJYvMj5npx8R0cRoVLHi0MhjilqWY

Dengan mengamati alamat-alamat ini dengan cermat, Anda dapat melihat bahwa alamat-alamat ini hanya berbeda pada beberapa karakter pertama dan terakhir, dengan account_id di tengah yang sama.

Namun, kita masih belum dapat melihat hubungan antara kunci publik dan alamat akun.

Rahasianya terletak pada initial data di awal, yang berisi kunci publik pengguna, yang memungkinkan pengguna untuk mengontrol kontrak dompet. workchainId mudah dimengerti; TON bukan hanya sebuah rantai tunggal tetapi terdiri dari banyak pecahan.

Setiap pecahan adalah bagian dari keseluruhan jaringan, menangani akun dan transaksi tertentu. Untuk menemukan dan mengelola smart contract, Anda harus menentukan di pecahan mana mereka berada. Apa perbedaan antara Bounceable dan Non-bounceable?

Hal ini berkaitan dengan cara kontrak pintar bekerja, tetapi mari kita lihat lebih jauh.

Kontrak Dompet

Di bawah ini adalah cuplikan dari kode sumber kontrak dompet pengguna. Ini menunjukkan bahwa ketika menerima pesan dari pengguna, ia membaca empat parameter: stored_seqno, stored_subwallet, public_key, dan plugins:

wallet-v4-code.fc



() recv_external(slice in_msg) impure {

var signature = in_msg~load_bits(512);

var cs = in_msg;

var (subwallet_id, valid_until, msg_seqno) = (cs~load_uint(32), cs~load_uint(32), cs~load_uint(32));

throw_if(36, valid_until <= now());

var ds = get_data().begin_parse();

var (stored_seqno, stored_subwallet, public_key, plugins) = (ds~load_uint(32), ds~load_uint(32), ds~load_uint(256), ds~load_dict()); ;;##The Initial Data

ds.end_parse();

throw_unless(33, msg_seqno == stored_seqno);

throw_unless(34, subwallet_id == stored_subwallet);

throw_unless(35, check_signature(slice_hash(in_msg), signature, public_key));

//...

}

Memang, ketika kontrak dompet pengguna ini digunakan, ia membutuhkan beberapa parameter awal, termasuk 256-bit public_key. Hal ini memastikan bahwa setiap pengguna memiliki alamat kontrak yang unik bahkan ketika menggunakan kode kontrak yang sama.

Setiap transaksi yang dimulai oleh pengguna harus ditandatangani dengan in_msg, kemudian diverifikasi oleh kontrak dompet (check_signature), setelah itu kontrak tersebut akan melakukan operasi pada blockchain. Dari sini, kita dapat menyimpulkan bahwa kunci publik pengguna dapat berhubungan dengan banyak alamat dompet.

Menerapkan kontrak dompet yang berbeda atau menggunakan data inisialisasi yang berbeda akan menghasilkan alamat kontrak yang sama sekali berbeda.

Token Jetton

Token mewakili sebuah aset di blockchain, menjadikannya elemen fundamental yang perlu kita pahami. Jetton adalah bentuk standar token TON dan terdiri dari dua kontrak: Jetton-minter dan Jetton-wallet.

Ketika sebuah token diterbitkan, sebuah kontrak penambang Jetton dibuat. Inisialisasi kontrak ini mencatat informasi seperti total pasokan token, administrator, kode dompet, dan detail lainnya.

Ketika token didistribusikan kepada pengguna, kontrak Minter menyebarkan kontrak dompet untuk setiap pengguna. Selama inisialisasi kontrak, kontrak ini mencatat saldo pengguna, kepemilikan, alamat kontrak Minter token, kode dompet pengguna, dan informasi relevan lainnya. Setiap pengguna memiliki kontrak yang digunakan secara individual.

Penting untuk dicatat bahwa kontrak yang dibuat di sini adalah kontrak dompet untuk mengelola token Jetton tertentu, yang berbeda dengan kontrak dompet akun pengguna. owner_address yang dicatat di sini adalah alamat dompet akun pengguna.

Ketika Pengguna Alice mentransfer token ke Pengguna Bob, hubungan pemanggilan adalah sebagai berikut:

Alice menandatangani transaksi melalui aplikasi off-chain dan mengirimkan perintah operasional melalui kontrak dompetnya. Perintah ini selanjutnya akan memanggil dompet tokennya untuk melakukan transfer. Ketika dompet token Bob menerima token, ia akan memberitahukan kontrak dompet Bob (alamat pemilik Jetton-wallet Bob).

Jika ada sisa gas selama transaksi, maka akan dikembalikan ke alamat yang sesuai, biasanya kontrak akun Alice.

Di bawah ini adalah contoh transfer token Jetton yang diuraikan oleh peramban Tonviewer:

Sementara transfer ERC20 hanya membutuhkan satu pemanggilan kontrak, transfer token Jetton membutuhkan setidaknya empat pemanggilan kontrak. Metode ini dirancang untuk memungkinkan konkurensi on-chain, meningkatkan efisiensi transaksi.

Transaksi

Ketika peristiwa tertentu terjadi di akun TON, peristiwa tersebut akan memicu transaksi. Peristiwa yang paling umum adalah “menerima pesan.” Sebuah transaksi mencakup elemen-elemen berikut:

  • Pesan masuk yang pada awalnya memicu kontrak (dengan metode pemicu khusus yang tersedia).
  • Tindakan kontrak yang dihasilkan dari pesan yang masuk, seperti memperbarui penyimpanan kontrak (opsional).
  • Pesan keluar yang dikirim ke peserta lain (opsional).

Ada beberapa fitur utama yang perlu diperhatikan terkait transaksi:

  1. Asinkron: Transaksi TON tidak selesai dalam satu panggilan; mereka mungkin memerlukan pengiriman pesan ke beberapa kontrak pintar yang berbeda untuk mengeksekusi serangkaian panggilan. Karena perutean yang berbeda dalam rantai yang terpecah, TON tidak dapat menjamin urutan pengiriman pesan antara beberapa smart contract.
  2. Biaya: Sifat transaksi yang tidak sinkron menimbulkan sebuah tantangan dalam memperkirakan biaya yang dikonsumsi. Oleh karena itu, dompet sering kali mengirimkan sedikit token tambahan sebagai biaya ketika memulai sebuah transaksi. Jika kontrak yang digunakan memiliki mekanisme penanganan biaya yang baik, sisa biaya akan dikembalikan ke dompet pengguna. Pengguna mungkin akan melihat token dompet mereka tiba-tiba berkurang dan kemudian bertambah lagi setelah beberapa menit, yang disebabkan oleh mekanisme ini.
  3. Bounce: Bounce adalah mekanisme penanganan kesalahan dalam kontrak. Jika kontrak yang dipanggil tidak ada atau terjadi kesalahan, dan transaksi diatur sebagai bounceable, pesan yang dipantulkan akan dikembalikan ke kontrak yang memanggil. Sebagai contoh, jika pengguna melakukan transfer dan terjadi kesalahan selama proses tersebut, pesan yang dipantulkan diperlukan agar kontrak dompet pengguna dapat mengembalikan saldonya. Hampir semua pesan internal yang dikirim antara smart contract harus dapat dipantulkan, yang berarti pesan tersebut harus memiliki bit “bounce”.

Keamanan Aset

TON memiliki banyak fitur yang bisa menimbulkan masalah keamanan, jadi pengguna perlu menyadari beberapa jebakan umum.

Serangan Pemotongan Biaya

Seperti yang telah disebutkan, dompet sering kali perlu mengirimkan sedikit biaya tambahan untuk mencegah kegagalan transaksi, yang memberikan peluang bagi penyerang. Jika Anda adalah pengguna dompet TON, Anda mungkin pernah mengalami situasi di mana dompet Anda sering menerima berbagai NFT atau token.

Awalnya, ini mungkin tampak seperti airdrop token sampah, tetapi setelah memeriksa detail transaksi, Anda menemukan bahwa token tersebut dapat dijual dengan harga yang cukup tinggi. Namun, ketika Anda mencoba melakukan transaksi, Anda akan melihat bahwa biaya yang diperlukan sangat tinggi (1 TON). Pada titik ini, Anda harus berhati-hati, karena ini bisa jadi merupakan penipuan.

Penyerang membuat kontrak token yang dibuat dengan hati-hati yang menyebabkan dompet memperkirakan biaya transfer yang terlalu tinggi, tetapi pada kenyataannya, hanya biaya yang ditahan, dan tidak ada pesan transfer yang dikirim.

Phishing Digit Pertama dan Terakhir

Phishing digit pertama dan terakhir tidak hanya terjadi pada TON; serangan phishing ini terjadi pada banyak blockchain utama. Penyerang membuat akun palsu untuk setiap alamat pengguna di jaringan dengan digit pertama dan terakhir yang sama.

Ketika pengguna memulai transfer, penyerang juga mengirimkan transfer kecil, mengikuti transaksi pengguna, untuk meninggalkan catatan dalam riwayat transaksi pengguna. Ketika pengguna penerima ingin mengirimkan token kembali, mereka mungkin menyalin alamat dari riwayat transaksi mereka, yang mungkin merupakan alamat penyerang, yang menyebabkan transfer ke alamat yang salah. Penyerang telah mengeksploitasi perilaku pengguna secara akurat.

Komentar Phishing

Ketika mentransfer token di TON, pengguna dapat menambahkan komentar untuk memberi keterangan pada transaksi tersebut. Fitur ini sering digunakan ketika melakukan deposit di bursa, di mana bursa biasanya mengharuskan pengguna untuk menyertakan ID pengguna mereka dalam komentar deposit. Namun, fitur ini sering kali dimanfaatkan oleh pelaku kejahatan, yang menulis informasi palsu di komentar untuk mencuri aset pengguna. Sebagai contoh:

Pengguna harus sangat berhati-hati dengan NFT “Nomor Telegram Anonim”. Jika pengguna mengaktifkan akun Telegram mereka dengan Nomor Telegram Anonim tetapi tidak mengaktifkan Verifikasi Dua Langkah, dan NFT ini terkena phishing, peretas dapat langsung masuk ke akun Telegram target dan melanjutkan pencurian aset dan aktivitas penipuan berikutnya.

Kerentanan Kontrak Cerdas

Kerentanan keamanan dalam smart contract dapat menyebabkan hilangnya dana yang tersimpan dalam kontrak. Pengguna harus memilih proyek yang telah menjalani audit menyeluruh. Kontrak pintar TON terutama diprogram menggunakan bahasa FunC, meskipun beberapa menggunakan Tact yang lebih canggih atau Fift yang lebih rendah.

Semua bahasa ini sangat orisinal. Bahasa pemrograman baru membawa risiko keamanan baru, terutama bagi para pengembang, yang perlu mempraktikkan kebiasaan pengkodean yang aman, menguasai praktik keamanan terbaik, dan menjalani audit keamanan yang ketat sebelum menerapkannya ke lingkungan produksi. Karena keterbatasan ruang, artikel ini tidak akan membahas keamanan kontrak secara mendetail.

Serangan Setoran Palsu

Pengguna dompet atau bursa harus mewaspadai serangan setoran palsu, yang biasanya datang dalam dua bentuk:

  1. Token Palsu: Seorang penyerang mengeluarkan token dengan metadata yang identik dengan token target. Jika program setoran otomatis tidak memeriksa apakah token tersebut berasal dari kontrak penambang yang benar, hal ini dapat menyebabkan setoran yang salah.
  2. Bounce: Proses transfer TON membutuhkan hubungan pemanggilan antara kontrak dompet dua pengguna. Jika kontrak dompet penerima tidak ada dan transaksi ditetapkan sebagai bounceable, pesan akan dipantulkan kembali, dan dana asli, dikurangi biaya, akan dikembalikan ke pengirim. Bagi Anda yang tertarik dengan detailnya, Anda bisa membaca artikel kami sebelumnya mengenai deposito palsu.

Kesimpulan

Artikel ini memperkenalkan beberapa prinsip teknis dasar TON dari perspektif pembuatan kunci dan dompet, bentuk token, dan karakteristik transaksi. Artikel ini juga mengeksplorasi potensi masalah keamanan ketika menggunakan TON, dengan harapan dapat menginspirasi perjalanan belajar Anda.