The scariest Dusk event for me is one I can pull from finalized history and still have no right to act on.
Boreas changed archive semantics so contract events from reverted execution can be preserved instead of disappearing. The important bit is the flag attached to them. An event can exist in the archive and still carry reverted: true.
That breaks a shortcut I would normally be tempted to use in an indexer: “event exists in finalized history, therefore the state transition happened.”
Dusk’s own Moonlight deposit pattern filters for event.reverted === false before accepting an inflow. I would apply the same discipline to any contract worker that releases something off-chain. If a redemption function emits an event and later panics, my backend cannot treat the event name alone as permission to mark the redemption complete.
The block may be final. The event record may be queryable. The contract state can still say the action rolled back.
So I would store the revert bit beside every indexed event and make it part of the business rule, not a debugging field.
On Dusk, final history tells me what was recorded. reverted tells me whether I am allowed to believe the event.
Saya bisa benar pada TermMax Alpha Long, meraih profit, dan tetap mengembalikan sebagian dari profit itu hanya karena memilih exit yang salah.
Pilihan tersembunyi adalah apa yang terjadi setelah posisi sudah bisa dieksekusi. Net Settle menghitung profit dan membayarkannya melalui likuiditas on-chain. Ini nyaman ketika likuiditas dalam. Namun jika tipis, TermMax memperingatkan bahwa slippage dan MEV dapat membuat profit yang benar-benar terealisasi menjadi lebih buruk, terutama pada posisi yang besar.
Jalur lainnya adalah Exercise - Delivery. Alih-alih memaksa seluruh exit melewati likuiditas tersebut, saya membayar USDT pada harga strike, menerima aset yang mendasarinya, lalu memutuskan di mana untuk melakukan unwind. Pengiriman sebagian juga dimungkinkan, jadi saya tidak perlu memindahkan seluruh posisi sekaligus.
Artinya, “ambil profit” bukan lagi satu tombol untuk saya. Pada token Alpha yang likuiditasnya tipis, saya perlu membandingkan kenyamanan Net Settle dengan biaya eksekusi yang tersembunyi di dalamnya.
Pilihan yang menguntungkan bisa tetap terlihat menguntungkan di atas kertas sementara jalur exit diam-diam menggerus keunggulannya.
Saya bisa menyetor ke brankas TermMax Dual Investment, melihat imbal hasilnya berjalan, dan tetap menyadari bahwa “penarikan” tidak berarti seluruh saldo saya tersedia.
Alasannya baru terlihat jelas ketika saya menelusuri ke mana uang itu pergi. Setoran tersebut mendanai posisi opsi TermMax Alpha. Jika tidak ada aset brankas yang dipinjam, saya bisa menarik semuanya. Jika semuanya dipinjam oleh pembeli Long atau Short, penarikan lebih awal tidak tersedia kecuali ada likuiditas baru yang masuk. Jika hanya sebagian yang dipinjam, saya hanya bisa menarik bagian yang masih menganggur.
Itu membuat pemanfaatan (utilization) menjadi angka yang saya perhatikan setelah menyetor.
APY yang tinggi bisa terlihat likuid sampai permintaan opsi menghabiskan inventaris di baliknya. Lalu, keputusan keluar saya tidak lagi sepenuhnya keputusan saya sendiri. Itu bergantung pada seberapa besar brankas masih menganggur, apakah ada setoran baru yang masuk, atau apakah saya menunggu sampai jatuh tempo.
Jadi saya tidak akan pernah membaca saldo TermMax Dual Investment seperti uang tunai dengan label imbal hasil di atasnya. Begitu modal itu sedang membiayai opsi milik orang lain, imbal hasil dan waktu keluarnya terikat pada pemanfaatan yang sama.
A finalized Dusk inflow can be real and still be the wrong thing for me to credit as a deposit. That is the scanner trap I would guard first. moonlightHistory(receiver) is not a “customer deposits” feed. It can return direct Moonlight transfers, contract payouts, refunds, staking withdrawals, and Phoenix-to-Moonlight conversions because all of them can increase the same public account.
So I cannot reduce ingestion to “receiver matches and value > 0.”
For a direct Moonlight deposit, I need the transfer-contract event itself: topic moonlight, reverted false, the expected receiver, and a positive value. Dusk even warns against guessing the transaction family by counting events because one transaction can emit extra contract events without changing what it actually is.
The consequence is nasty in custody accounting. If my scanner credits every finalized inflow, an internal refund or staking withdrawal can enter the same ledger path as fresh customer money. The chain balance is correct while my customer liabilities become wrong.
I would rather reject an unfamiliar inflow than silently call it a deposit.
On Dusk, finalized tells me the money moved. The event type tells me why.
Saya bisa melunasi pinjaman TermMax dengan benar dan tetap membayar lebih untuk mengambil kembali jaminan saya.
Perangkapnya ada di rute pelunasannya. GT saya membawa jaminan dan utang, sementara FT yang sesuai mewakili klaim utang tersebut. Sebelum jatuh tempo, TermMax memberi saya dua jalan keluar: melunasi dengan token utang pada nilai nominal, atau membeli FT yang sesuai di pasar dan menggunakan FT tersebut untuk membatalkan utang.
Jalur kedua itu mengubah matematikanya.
Jika saya berutang 100.000 USDC dan FT yang sesuai diperdagangkan pada 0,97, mengirim 100.000 USDC langsung adalah jalan keluar yang mudah. Tetapi memperoleh 100.000 FT biayanya sekitar 97.000 USDC sebelum biaya dan slippage, lalu FT tersebut bisa melunasi utang pokok dengan nilai nominal yang sama.
Jadi setelah saya mengunci suku bunga tetap, saya masih punya satu pekerjaan ketika saya ingin keluar lebih cepat. Saya perlu memberi harga token utang saya sendiri sebelum saya menekan tombol bayar lunas.
Dampak yang terlihat itu sederhana: mengabaikan pasar FT bisa mengubah penutupan lebih awal menjadi ribuan dolar pembayaran tambahan yang tidak perlu pada posisi besar.
Saya tidak lagi memaknai jatuh tempo TermMax sekadar sebagai batas waktu. Sampai tanggal itu, harga untuk membatalkan sisa tenor masih sesuatu yang bisa saya perdagangkan.
Kontrak DuskVM dapat bertahan dari failover node sementara aplikasi saya tiba-tiba lupa cara berbicara dengannya.
Penyebabnya berada di luar rantai (off-chain). Forge membangun dua artefak WASM dari sumber yang sama: kontrak yang berjalan di DuskVM dan sebuah data driver yang menangani JSON yang dapat dibaca hingga encoding serta decoding dengan rkyv. Driver itu tidak dideploy sebagai bagian dari kontrak on-chain.
Jika saya ingin Rusk memanfaatkan rute kontrak JSON untuk melakukan translasi itu, pemilik kontrak mendaftarkan driver tersebut ke node itu.
Jadi saya bisa deploy sekali, uji terhadap Node A, lihat panggilan yang rapi dan dapat dibaca, lalu failover ke Node B dan masuk ke kondisi yang aneh. Kontraknya ada. Rantaian (chain) sehat. Namun driver_available bisa saja bernilai false, sehingga aplikasi kehilangan permukaan decoding yang menjadi tempat ia dibangun.
Itulah jebakan produksi bagi saya. Konsensus tidak gagal. Kontrak tidak gagal. Failover saya mengubah dependensi off-chain yang saya anggap seolah ikut terbawa bersama kontrak.
Saya akan menjadikan ketersediaan driver sebagai bagian dari kesiapan node (node readiness) dan memverifikasikannya di setiap endpoint Rusk sebelum trafik sampai ke sana.
Di DuskVM, kontrak dapat bertahan dari failover sementara translatortnya tidak.
Saya bisa melihat tersedia 1,1M USDC di pasar TermMax PT-eUSDe dan tetap kehilangan 500K kapasitas itu karena seseorang meminjam lebih dulu terhadap wBTC.
Itu terdengar keliru sampai saya menelusuri bagaimana Atomic Orders sebenarnya menggunakan sebuah vault.
Di V1, kurator dengan 1,1M USDC harus memotongnya sebelum permintaan datang: 250K untuk PT-eUSDe, 600K untuk wBTC, 250K untuk wstETH. Uangnya nyata, tetapi setiap potongan terjebak di dalam pasar pilihannya masing-masing.
V2 memungkinkan 1,1M yang sama duduk di ketiga pasar sekaligus. Bukan tiga salinan uang. Satu inventaris bersama. Jika saya mengambil 500K di PT-eUSDe, likuiditas yang tersedia di PT-eUSDe, wBTC, dan wstETH semuanya turun menjadi 600K secara atomik.
Ini mengubah cara saya membaca angka di layar. Ukuran yang saya lihat di satu pasar tidak dipesan khusus untuk pasar tersebut. Ukuran itu bisa menyusut karena seorang peminjam dengan jaminan yang berbeda mencapai vault yang sama lebih dulu.
Jadi risiko eksekusi saya kini bukan hanya apakah pasar pilihan saya memiliki permintaan. Saya juga perlu memperhatikan siapa lagi yang bersaing memperebutkan likuiditas vault yang mendasarinya yang sama.
Suku bunga bisa dikunci sementara inventaris di belakangnya masih berlomba lintas pasar.
Transaksi Dusk pada waktu senja bisa menghilang dari mempool node saya tanpa pernah mencapai batas waktu kedaluwarsa di rantai (on-chain).
Itulah batas waktu yang tidak ingin saya hardcode ke dalam sebuah wallet. @Dusk transaksi tidak membawa field kedaluwarsa (expiry). Kedaluwarsa adalah kebijakan lokal Rusk. Default bawaan adalah tiga hari, sementara node yang diinstal dengan node-installer v0.5.22 menggunakan umur mempool 30 menit dengan pemeriksaan setiap lima menit.
Jadi dua node Dusk yang sehat bisa memberi saya jawaban yang sangat berbeda tentang berapa lama transaksi tertunda yang sama diperbolehkan untuk tetap menunggu.
Bagian yang paling menyebalkan adalah event “removed” yang dihapus. Itu hanya memberi tahu saya transaksi tersebut keluar dari mempool lokal node itu. Inklusi, penggantian (replacement), kedaluwarsa (expiry), pengusiran karena kapasitas (capacity eviction), atau pembelanjaan yang bertentangan (conflicting spend) semuanya dapat memicu keluarnya transaksi itu. Jika saya menerjemahkan “removed” langsung menjadi “failed”, logika pemulihan saya akan menebak.
Untuk layanan penarikan, tebakan itu bisa berdampak pada pengguna. Saya bisa menandai pembayaran sebagai mati (dead) karena node saya kedaluwarsa secara lokal, sementara node lain sudah menyebarkannya lebih jauh.
Saya akan memperlakukan timeout mempool sebagai konfigurasi node, lalu menanyakan status ledger sebelum memutuskan bahwa transaksi DUSK aman untuk dibangun ulang (rebuild).
Di Dusk, “hilang dari mempool saya” tidak sama dengan “hilang”.
Dompet W3sper dapat menurunkan profil Dusk yang nyata, tunjukkan kepada saya sebuah alamat, dan tetap saja tidak mampu membangun transfer pertama.
Pekerjaan tersembunyi adalah state Bookkeeper. W3sper memberi saya transaction builder, tetapi tidak mengubah Profile yang baru menjadi headless wallet yang lengkap. Jika saya membuat kunci lalu langsung lompat ke pengiriman, Profile itu belum memiliki entri Bookkeeper yang tersinkron, sehingga builder tidak bisa menarik saldo dan state nonce yang dibutuhkannya.
Phoenix membuat ini lebih sulit untuk dipalsukan. Layanan penandatanganan juga harus menjaga catatan (shielded notes) yang tersinkron, bukan hanya kunci rahasianya. Jadi penahanan kunci bisa benar, sementara state yang bisa dipakai untuk pengeluaran sudah tertinggal.
Bagian terburuknya adalah dompet bisa terlihat sudah selesai. Saya bisa membuat akunnya, mendanainya, melindungi kuncinya, lalu menekan Send dan menemukan bahwa backend saya tidak pernah membangun ulang state yang membuat DUSK itu bisa dibelanjakan.
Jika saya menjalankan treasury Dusk yang headless, saya akan menguji pemulihan dengan memulihkan kunci ke dalam basis data yang kosong dan membuat dompet melakukan resinkronisasi sebelum dompet itu menandatangani apa pun.
Di Dusk, mencadangkan kunci tidak sama dengan mencadangkan alur kerja (wallet workflow).
Sebuah node arsip Dusk bisa terkejar di ujung rantai (chain tip) tetapi tetap tidak memiliki riwayat yang saya butuhkan untuk mengkredit setoran lama.
Jerumusannya ada pada jalur bootstrap. Archive Rusk menyimpan indeks-final yang digunakan oleh moonlightHistory, fullMoonlightHistory, dan finalizedEvents. Namun jika saya menjalankan node dari snapshot download_state yang diunduh penginstal, saya memulihkan state eksekusi, bukan indeks arsip untuk blok-blok sebelum snapshot tersebut.
Jadi “synced” bukanlah pengecekan kesiapan yang saya pedulikan.
Untuk layanan setoran Moonlight, saya bisa melakukan kueri finalized history, mendapat respons yang bersih, dan tetap memiliki rentang yang buta di belakang batas snapshot. Kondisi state rantai saat ini sudah berjalan. Pengingesan historis saya tidak. Backfill melalui node tersebut bisa diam-diam melewatkan setoran yang lebih lama sementara setiap pemeriksaan kesehatan di dekat ujung rantai terlihat normal.
Jika saya butuh riwayat yang lengkap, arsip harus tersinkron dari genesis atau berasal dari backup tepercaya yang sudah berisi database arsip. Lalu saya perlu menguji rentang blok paling awal yang dijanjikan layanan saya untuk dicakup sebelum menyatakannya siap.
Saya lebih memilih gagal dengan jelas pada kesiapan daripada mengetahui adanya rentang yang hilang ketika pengguna menanyakan mengapa setoran DUSK yang sudah finalized tidak pernah mencapai saldo mereka.
Angka 91 itu masuk akal. Hal utama yang menahannya adalah urutan (sequencing). Dampak terbaik yang Anda tunjukkan muncul terlalu lambat.
Saya akan menyempitkannya seperti ini:
Saya menemukan detail staking Dusk yang membuat setoran berulang jadi lebih canggung daripada yang terlihat.
Jika provisioner saya sudah aktif dan saya menambahkan 4.000 DUSK, hanya 3.600 yang langsung masuk ke active stake. 400 lainnya menjadi terkunci.
400 itu masih milik saya, tapi bagian buruknya adalah mendapatkan kembali saldo terkunci terakhir. Saya mungkin pada akhirnya perlu membongkar sepenuhnya posisi yang tersisa hanya untuk mengambilnya.
Jadi, angka yang saya tambahkan dan angka yang benar-benar bekerja dalam konsensus langsung tidak sama.
Itu jadi makin terasa kalau saya terus melakukan compounding. Setoran tambahan menciptakan split 90/10 yang lain. Saya bisa terus membesarkan sisi aktif sekaligus membangun saldo terkunci yang berada di luar konsensus dan mengikuti saya menuju penarikan (exit) yang akan datang.
Dulu, saya memandang compounding terutama sebagai keputusan imbalan.
Di Dusk, saya juga akan melihat seberapa banyak cleanup yang diam-diam saya ciptakan setiap kali saya melakukan top up.
Saya memperhatikan bagian yang canggung dari Dusk karena tidak mengirim transfer privat. Itulah yang terjadi ketika transfer tersebut harus berubah menjadi kredit pertukaran tanpa operator menebak siapa pemiliknya.
Untuk setoran, Dusk tidak berpura-pura Phoenix dan Moonlight dapat saling dipertukarkan. Phoenix menggunakan catatan terselubung (shielded notes) dan nullifier, sedangkan integrasi pertukaran diarahkan ke Moonlight karena model kustodi dan pemindaian berbeda. Jadi operator masih harus memilih bagaimana atribusi bekerja: satu akun Moonlight per pelanggan, atau akun bersama di mana memo menjadi data perutean.
Lalu muncul kasus kegagalan yang buruk. Transfer yang valid bisa datang dengan metadata yang hilang, tidak terbentuk dengan benar, tidak dikenal, atau digunakan ulang. Rantai (chain) masih bisa melakukan penyelesaian dengan benar, tetapi kredit tetap harus dikarantina alih-alih diposting ke pengguna yang salah.
Detail yang terus saya benahi adalah checkpoint. Dusk mengharapkan kredit dan checkpoint blok hasil pemindaian ditulis secara atomik, dengan ID transaksi yang digunakan untuk idempotensi. Maju-kan checkpoint sebelum kredit benar-benar tahan lama (durable), dan sebuah crash bisa membuat setoran itu berada di luar jalur ingest operator.
Bagi Dusk, tes kustodi yang sesungguhnya adalah apakah setoran Moonlight yang sudah difinalisasi pernah bisa lenyap di antara checkpoint dan kredit.
Risiko Harga XRP Anjlok di Bawah $1 Saat RUU CLARITY Gagal: Polymarket
XRP milik Ripple berada di kondisi yang lebih tidak pasti karena RUU CLARITY tidak lolos sebelum masa reses Agustus. Data Polymarket menunjukkan bahwa harga XRP diperdagangkan terutama di sekitar $1, dengan satu kontrak yang memberi peluang 71% pada level harga $1 agar koin tersebut mencapai harga itu pada 10 Agustus.
Data pasar prediksi juga menunjukkan bahwa tidak ada harapan besar untuk reli signifikan dalam waktu dekat. Tingkat probabilitas 12% bahwa XRP akan mencapai $1,20 pada 10 Agustus berasal dari kontrak Polymarket yang terpisah.
Prospek Harga Pi Network Saat Bitcoin Menguat Melewati $65k
Bitcoin terus naik melewati angka harga $65.000, bersamaan dengan sentimen keseluruhan, dan harga Pi Network juga mengalami kenaikan yang sepadan. Koin PI naik 2,80% dalam 1 hari terakhir menjadi $0,0910, sementara Bitcoin berhasil mencatat kenaikan kecil. Aksi ini mengikuti protokol 26 dan perkembangan utilitas baru, serta akan dicantumkan di bursa-bursa mata uang kripto utama di masa mendatang. Kekuatan Bitcoin Mendukung Pemulihan Harga Pi Network. Harga Bitcoin sempat melonjak hingga $65.400 sebelum diperdagangkan di sekitar area penting di angka $65.000 pada hari Sabtu. Peningkatan tersebut terjadi setelah data ketenagakerjaan AS yang lebih lemah yang membantu meningkatkan selera aset berisiko.
Strategy Bermitra dengan Coinbase dan Morgan Stanley untuk Membiayai Akun Trump
Dalam pengumuman tunjangan karyawan yang baru, Strategy akan berkontribusi ke Akun Trump yang dikatakannya akan diberikan kepada karyawan AS untuk anak-anak mereka. Perusahaan perbendaharaan Bitcoin tersebut menyatakan bahwa peluncuran akan dilakukan setelah Departemen Keuangan AS merilis panduan final dan program kontribusi pemberi kerja ditawarkan. Akun Trump memperluas manfaat bagi para pemain. Manfaat para pemain diperluas dengan akun-akun Trump. Akun Trump ditetapkan sebesar $250 per tahun untuk setiap anak di bawah 18 tahun yang memenuhi syarat untuk program tersebut bagi seluruh karyawan AS di perusahaan tersebut. Perusahaan tersebut juga bermaksud memberikan kontribusi 1.000 yang mencocokkan kontribusi pemerintah AS untuk menyiapkan dana (seed) bagi anak-anak yang memenuhi syarat, sekali pembayaran.
Latihan pemulihanku lolos pemeriksaan kunci dan tetap tidak menghasilkan suara finalitas apa pun.
Tanda tangan finalitas Babylon memerlukan lebih dari kunci EOTS. Ia harus membawa bukti Merkle yang menunjukkan bahwa keacakan publiknya dikomitkan untuk tinggi (height) yang tepat itu. Bukti-bukti tersebut, ditambah tinggi terakhir yang dipilih oleh penyedia, ada di dalam finality-provider.db.
Memulihkan keyring ke mesin yang bersih bukanlah pemulihan yang berfungsi. Daemon dapat mengenali penyediaku, mengakses eotsd, dan memiliki cukup gas saat setiap pengiriman suara gagal karena bukti keacakan tidak tersedia. Penyedia terlihat sudah pulih di keyring dan tetap diam di tinggi Babylon berikutnya.
Perbaikannya spesifik. Aku harus menghentikan fpd dan menjalankan recover-rand-proof dari tinggi awal yang dipilih. Jika aku melewatkan tinggi itu, alat akan membangun ulang bukti dari komitmen keacakan pertama, mengubah seluruh riwayat operasi penyedia menjadi pekerjaan pemulihan.
Aku akan menguji cadangan dengan mengirimkan suara finalitas sungguhan, bukan dengan memeriksa apakah prosesnya bisa dimulai. Memulihkan identitas tanpa memulihkan bukti penandatanganan hanyalah setengah dari pemulihan.
Mesin bisa mengingat siapa dirinya, namun masih lupa cara membuktikan suara berikutnya.
Aku menangkap kegagalan saat penandatangan mengembalikan pra-tarik (pre-stake) Babylon sebagai sudah ditandatangani sepenuhnya.
Babylon tetap menampilkan delegasi sebagai TERTUNDA (PENDING).
Itulah masalahnya.
Pemilihan koin telah menarik satu UTXO legacy ke dalam stake dengan banyak input. Karena input itu membutuhkan tanda tangannya di dalam scriptSig, penandatangan saya menyelesaikan transaksi sebelum Babylon selesai memverifikasi covenant.
Hex transaksi itu sudah bukan lagi sekadar paket registrasi. Sebuah node Bitcoin bisa menerimanya dan meneruskannya.
Aku membuang transaksi yang sudah ditandatangani, membangun ulang pemilihan koin hanya dengan input SegWit, dan memulai alur pendaftaran lagi.
Tidak ada tanda tangan yang tidak valid. Tidak ada transaksi Bitcoin yang ditolak.
Hanya BTC yang menjadi bisa ditambang sementara Babylon masih menganggap delegasinya belum selesai.
Saya memiliki BABY yang duduk dalam delegasi yang diterima (accepted) sementara posisi lain meluncur menuju likuidasi pada $0.01188.
Saya mengira “accepted” berarti masa tunggu sudah dimulai. Jadi saya menghitung maju dari klik dan merencanakan pergerakan jaminannya berdasarkan itu.
Ternyata belum dimulai.
Permintaan itu masih harus lolos melewati epoch dan mencapai checkpoint Bitcoin sebelum 300 konfirmasi bahkan mulai. Saat saya menyadarinya, BABY masih terkunci dan posisi tersebut memiliki ruang lebih sedikit daripada yang saya rencanakan.
Rincian layar yang penting bukanlah permintaan yang diterima. Yang penting adalah jumlah konfirmasi Bitcoin belum dimulai.
Saya membutuhkan BABY itu sebagai jaminan sebelum $0.01188.
Namun, BABY malah terjebak dalam antrean keluar sementara risiko likuidasi terus mendekat.