Jika Anda mampu berdonasi dan berkontribusi pada proyek Haven, silakan klik disini. Terima kasih.
Penyelaman Mendalam Haven: Memecahkan Kode xUSD
Neac (Pimpinan Protokol Haven) dan saya telah menghabiskan beberapa bulan terakhir mempersiapkan peluncuran mainnet xUSD. Sepanjang pengujian kami, kami berfokus pada cara memverifikasi pertukaran xUSD dengan paling aman untuk memastikan peluncuran yang lancar dan kesuksesan jangka panjang untuk stablecoin pribadi pertama ini.
Pekerjaan ini telah menghasilkan perancangan ulang basis kode Haven secara ekstensif. Seperti yang kami pelajari di testnet kami, struktur Monero terbukti sangat menantang untuk menandatangani dan memverifikasi transaksi xUSD. Ini membosankan, lambat, dan terkadang benar-benar membuat frustrasi. Namun kami bangga mengatakan bahwa kami telah mengembangkan solusi inovatif yang akan memastikan keakuratan, keandalan, dan privasi transaksi xUSD sekarang dan di masa depan. Di bawah ini adalah penjelasan mendalam tentang proses yang membawa kami pada solusi ini.
Haven testnet pertama menghitung perkiraan nilai untuk memberi tahu pengguna berapa banyak xUSD yang akan mereka terima untuk XHV yang mereka minta untuk ditukar. Hal ini karena di Monero (dan Cryptonote), ketika pengguna mengirimkan transaksi, mereka mengirimkan a komitmen ke sejumlah koin: baik input maupun output. Input dan output ini harus sama atau transaksi akan selalu gagal.
Struktur Monero ini menjadi masalah bagi Haven ketika kami mulai menerapkan pertukaran xUSD. Awalnya, kami tidak dapat menjamin hal tersebut terakhir jumlah xUSD yang ditukarkan akan sama dengan perkiraan jumlah xUSD yang dikutip sebelum transaksi dikirimkan. Hal ini karena harga XHV berubah secara dinamis. Harga XHV (dan dengan demikian, nilai tukar xUSD) dapat berubah antara saat pengguna mengirimkan transaksi dan saat transaksi dikonfirmasi.
Cara pertama yang kami lakukan untuk mengatasi tantangan ini adalah dengan tidak lagi mencari kesetaraan input dan output. Namun untuk mencegah manipulasi, kami mengharuskan pengirim tidak dapat menentukan jumlah yang salah. Jadi kami memutuskan untuk mengambil langkah ini sepenuhnya dari tangan pengirim dan menyerahkan tanggung jawab tersebut kepada penambang.
Solusi ini, diterapkan di a testnet berikutnya, menambahkan penundaan dalam memberikan nilai tukar xUSD yang tepat. Pengirim harus menunggu satu blok ditambang, dan penambang harus memasukkan harga pertukaran di header blok. Namun, ada celah dalam solusi ini – yang buruk.
Bayangkan seorang penyerang musuh yang memiliki uang dan pengetahuan tentang bagian kode Haven ini. Setelah menyiapkan infrastruktur untuk mendapatkan 51% dari hash Haven, mereka dapat menjadi penambang sekaligus pengirim dan dengan demikian menetapkan nilai tukar xUSD mereka sendiri. Kemungkinan ini, bisa dikatakan, kurang optimal!
Jadi di tesnet berikutnya, kami memutuskan untuk memindahkan tanggung jawab kembali ke pengirim, tetapi hanya agar mereka dapat mengambil catatan harga terverifikasi terakhir yang sudah ada di rantai Haven (catatan harga dari blok teratas) dan menentukan blok mana yang mereka gunakan dalam transaksi. Hal ini dapat diperiksa dan diverifikasi oleh penambang dan daemon, yang juga dapat memeriksa bahwa input vs. output setara bukan dalam koin, namun dalam nilai dolar (penting untuk xUSD).
Ini bukti nilai menjadi kunci keberhasilan Haven. Namun model yang dijelaskan di atas juga terbukti rentan terhadap serangan. Beberapa pembelajaran diperoleh dari beberapa testnet xUSD berikutnya yang dilakukan bersama tim dan komunitas kami. Pertama, kami mengetahui bahwa rantai yang lebih pendek dapat mempermainkan sistem. Kedua, kami mengetahui bahwa kami memerlukan cara untuk menunjukkan pasokan xUSD yang beredar (dan xAssets di masa depan) atau kami tidak akan pernah dapat menentukan kesehatan jaringan Haven.
Tahap perkembangan selanjutnya membawa kami ke jalur yang berbeda. Seperti yang dinyatakan di atas, membuktikan nilai transaksi adalah kuncinya, dan kami perlu mengganti bukti input = output Monero dengan bukti nilai dolar untuk pertukaran xUSD.
Kami mencoba lebih dari selusin bukti, pemeriksaan, dan validasi yang berbeda. Namun kami menemukan bahwa kecuali Anda benar-benar mengirim XHV dan tidak ada jenis aset lainnya, yang dalam pengujian pribadi adalah apa yang kami lakukan, seluruh sistem menjadi bingung setelah beberapa transaksi maju dan mundur. Semakin kompleks pertukarannya, semakin sulit memverifikasi nilai dolar suatu transaksi. Kemudian lakukan beberapa transaksi, yang memerlukan input dalam jumlah besar, dan segalanya menjadi sangat rumit.
Semua tantangan ini terkait dengan cara kerja tanda tangan komitmen, yang merupakan persyaratan mutlak di Monero. Kecuali komitmen Anda valid, Anda tidak akan pernah bisa memverifikasi bahwa uang tersebut tidak tercipta entah dari mana.
Pada titik ini, kami memutuskan untuk meninjau model lama “koin berwarna” yang sebelumnya ditempatkan di atas Bitcoin, menciptakan serangkaian informasi baru tentang koin yang dipertukarkan. Dengan menggunakan koin berwarna, transaksi dapat “diwarnai” dengan atribut tertentu. Ini secara efektif mengubah koin berwarna menjadi token, yang dapat digunakan untuk mewakili apa pun. Namun — dan ini sangat penting — koin berwarna hanya dapat berfungsi jika Anda tidak terikat dengan struktur komitmen Monero.
Jadi itulah tantangan yang kami lakukan: memodifikasi struktur komitmen Monero untuk memungkinkan penggunaan “koin berwarna” yang dapat membedakan antara XHV, xUSD, dan xAssets masa depan pada satu rantai berbasis Monero. Dan saya bangga untuk menyampaikan bahwa untuk pertama kalinya, kami telah melakukan hal tersebut.
Kami harus mengganti Monero kelompok anonim spontan yang dapat ditautkan berlapis-lapis (MLSAG) tanda tangan dengan yang lebih baru grup anonim spontan yang dapat ditautkan secara kompak (CLSAG) tanda tangan untuk mencapai hal ini. Namun dengan sedikit bantuan dari salah satu pengembang top Monero, Sarang Noether, solusinya sekarang berfungsi sebagaimana mestinya. Kami ingin mengucapkan terima kasih kepada Sarang atas bantuannya dalam membantu kami menavigasi skema enkripsi baru ini.
Jadi hasil dari semua pengujian dan penyesuaian ini adalah sebagai berikut: kami telah membuat struktur transaksi baru dengan masukan asli sebagai XHV dan keluaran asli sebagai xUSD. Untuk mengkonversi dari XHV ke xUSD, sebenarnya kami memberikan XHV sebagai input dan xUSD sebagai output. Daemon kemudian memeriksa apakah jumlah keluaran sama berdasarkan nilai tukar yang diberikan dalam blok yang ditentukan pengirim sebagai catatan harga. Hal ini dilakukan semata-mata dengan menjumlahkan masker komitmen dan nilai tukar yang diambil secara independen oleh verifikator.
Logikanya, seorang verifikator akan selalu mendapatkan nilai tukarnya sendiri. Jadi satu-satunya cara pengirim dapat melakukan transaksi adalah dengan mengetahui nilai tukar yang tepat dan jumlah input yang tepat (yang hanya dapat diketahui oleh mereka karena ada di dompet mereka dan tidak dapat dibaca di tempat lain). Verifikator kemudian menjumlahkan komitmen keluaran, dan dengan mempertimbangkan nilai tukar yang diperoleh secara independen, membandingkannya dengan masukan. Mereka harus sama untuk lulus. Tentu saja, semua nilai dienkripsi sehingga tidak ada yang bisa melihat atau mengubah jumlahnya.
Catatan: pengirim hanya dapat menggunakan catatan harga yang sudah terverifikasi, yang semuanya saat ini dibuat melalui Peramal XHV Chainlink. Daemon membaca nomor catatan harga dalam transaksi dan mendapatkan catatan (harga sebenarnya) dari header blok. Ini berarti harga sudah tidak dapat diubah pada saat digunakan.
Ini adalah jenis solusi yang kami cari setelah memikirkan bagaimana mengatasi tantangan yang terkait dengan verifikasi pertukaran xUSD di testnet pertama. Solusi ini bekerja dengan baik dalam pengujian pribadi kami dan akan dibagikan di stagenet publik berikutnya dalam beberapa hari mendatang.
Dengan asumsi tidak ada masalah lain yang teridentifikasi dalam pengujian, ini adalah solusi yang akan kami gunakan untuk meluncurkan xUSD secara langsung di mainnet Haven. Sebagai bagian dari proses peluncuran, kami berharap dapat membagikan secara publik kode pertukaran xUSD yang telah kami kembangkan secara pribadi selama setahun terakhir untuk menciptakan stablecoin pribadi yang pertama.
Sementara itu, bergabunglah dengan komunitas Haven dan jadilah bagian dari masa depan privasi finansial. Anda dapat bergabung dengan kami Discord dan ikuti kami Twitter.