Oleh: Brett McLain, Direktur Teknik – Crypto, Fiat, Staking
Jika Anda tertarik dengan cryptocurrency, pembayaran, atau mengintai dan ingin membantu membangun sistem keuangan masa depan, tim teknik pendanaan @ Kraken sedang merekrut!
Ketika Kraken diluncurkan satu dekade lalu, hanya tiga cryptocurrency yang didukung: BTC, LTC, dan XRP.
Hari ini, Kraken mendukung 82 aset di 33 blockchain, dan layanan staking untuk 8 cryptocurrency.
Untuk memfasilitasi jutaan deposit, penarikan, dan transaksi taruhan setahun di Kraken, tim teknik kripto mengoperasikan ratusan layanan untuk memastikan kelancaran aliran dana masuk dan keluar dari bursa. Perangkat lunak blockchain yang mendukung layanan ini sering diperbarui; untuk beberapa blockchain yang lebih aktif, fork keras dan lunak dapat bersifat bulanan sementara yang lain seperti Ethereum adalah acara dua kali setahun. Secara umum, setidaknya ada beberapa pembaruan perangkat lunak untuk infrastruktur blockchain kami setiap minggu.
Tantangan untuk mendukung dan memperbarui sejumlah besar layanan yang berbeda, sementara pada saat yang sama membangun yang baru dapat menjadi hal yang menakutkan.
Dalam 12 bulan terakhir, tim kami telah menambahkan dukungan untuk:
- 60 cryptocurrency baru:
- 39 x token ERC20
- Polkadot (saat peluncuran mainnet)
- Kusama
- Filecoin (saat peluncuran mainnet)
- Arus (saat peluncuran mainnet)
- Kava
- Token Web Energi (saat peluncuran mainnet)
- USDT (TRC20)
- 10 x Pinjaman Parachain
- beranda
- 1 x Token SPL (Serum)
- Mina
- 8 aset taruhan baru:
- Polkadot (saat peluncuran mainnet)
- Kusama
- Ethereum 2.0 (saat peluncuran mainnet)
- Arus (saat peluncuran mainnet)
- Cardano
- kosmos
- Kava
- beranda
Pencapaian ini dicapai bersamaan dengan pemeliharaan integrasi yang ada. Insinyur tim crypto bertanggung jawab tidak hanya untuk perangkat lunak gateway yang ditulis di rumah, tetapi juga untuk pemeliharaan dan penyebaran infrastruktur blockchain kami yang diandalkan oleh gateway kami. Irama pengembangan blockchain pada proyek-proyek ini bisa menjadi salah satu yang terik, dengan perubahan yang melanggar dan fitur baru yang sering datang dan terkadang dengan sedikit peringatan.
Jadi, bagaimana Kraken berhasil merilis lusinan produk baru setiap tahun sambil mengikuti perkembangan pesat blockchain?
Tes Ujung ke Ujung (E2E)!
Mengapa kami menghargai tes E2E dan menghindari ejekan
Sejak hari-hari awal di Kraken, penekanannya adalah bahwa tes E2E adalah jenis tes paling berharga yang dapat dibuat oleh seorang insinyur. Tes unit memiliki tempatnya, tetapi banyak pengembang yang tidak berpengalaman dengan integrasi kompleks cenderung menulis tes unit untuk setiap bagian kode yang mereka buat dengan keyakinan bahwa mereka meningkatkan kualitas keseluruhan perangkat lunak yang mereka kembangkan.
Jalan ini, meskipun penuh dengan niat baik, sering kali dapat menyebabkan banyak rasa sakit di jalan. Ketergantungan yang berlebihan pada pengujian unit cenderung memperkuat arsitektur Anda; itu seperti menuangkan lapisan epoksi di atas seluruh basis kode Anda. Anda menggabungkan kode dengan erat ke pengujiannya, membuat kode lebih kaku, tidak fleksibel, dan tahan terhadap pemfaktoran ulang. Jika Anda perlu membuat perubahan, Anda mungkin perlu membuat perubahan signifikan pada pengujian, dan dalam beberapa kasus, membuangnya sepenuhnya. Kode refactoring adalah kemampuan utama yang harus dimiliki oleh tim engineering dalam toolkit mereka dan apa pun yang menambah gesekan pada kemudahan refactoring harus dievaluasi dengan cermat sebelum diperkenalkan. Saat memfaktorkan ulang kode, pengujian E2E yang dirancang dengan baik seringkali tidak memerlukan banyak perubahan, dan memberikan fleksibilitas dalam menyesuaikan kemampuan internal aplikasi sambil memastikan bahwa aplikasi terus beroperasi seperti yang diharapkan.
Apakah ini berarti Anda tidak boleh menulis tes unit? Tidak semuanya! Ada banyak skenario di mana pengujian unit adalah solusi sempurna, namun kami menemukan bahwa untuk integrasi yang kompleks, pengujian E2E bekerja lebih baik. Secara umum, unit test paling efektif bila ditulis untuk kode yang memenuhi kriteria berikut:
- Kompleks secara algoritmik dengan banyak kasus tepi.
- Cakupan yang ketat dengan persyaratan yang terdefinisi dengan baik.
- Menyelesaikan satu unit pekerjaan.
- Tanpa kewarganegaraan.
Potongan-potongan kecil dari kode kompleks yang dibatasi dengan ketat ini sering kali merupakan blok bangunan dari aplikasi yang lebih besar dan bahkan jika refactor terjadi, fungsi-fungsi ini tidak mungkin berubah. Di dunia kita ini akan menjadi hal-hal seperti derivasi alamat, validasi alamat, penandatanganan transaksi, dll.
Kesimpulan utama di sini adalah bahwa sebagai tim teknik kecil, tidak mungkin kami dapat mempertahankan volume layanan yang saat ini kami dukung, dan membangun produk baru tanpa pengujian ujung ke ujung. Tes unit harus dianggap sebagai taruhan meja, tetapi secara terpisah, mereka tidak akan cukup bagi kita untuk mengikuti ruang yang berkembang ini. Sebagai gantinya, kami telah memilih untuk berinvestasi besar-besaran dalam rangkaian integrasi yang kuat dan pengujian E2E yang memvalidasi bahwa layanan kami akan berhasil beroperasi dalam mode operasi yang paling umum.
Tantangan tes E2E
Meskipun tes E2E bisa menjadi kuat, itu bukan obat mujarab. Saat berintegrasi dengan layanan pihak ketiga, jenis pengujian ini sering kali kehilangan banyak nilainya karena titik akhir atau antarmuka tertentu perlu diejek untuk sepenuhnya menguji aliran fungsi atau panggilan tertentu. Mengolok-olok hanya sebaik pemahaman Anda tentang layanan yang Anda olok-olok, dan sebagai hasilnya, mereka dapat rawan kesalahan ketika pembaruan sering dan bersifat besar. Mempertahankan kode Anda sendiri serta ejekan Anda adalah pelanggaran prinsip KERING (jangan ulangi diri Anda sendiri), sebuah istilah yang diciptakan oleh David Thomas dan Andrew Hunt dalam "The Pragmatic Programmer." Dalam buku mereka, mereka menyatakan bahwa "Setiap bagian dari pengetahuan harus memiliki representasi otoritatif tunggal, tidak ambigu, dalam suatu sistem." Membuat versi tiruan dari layanan apa pun berarti bahwa sekarang ada dua salinan yang berpotensi berbeda dari layanan tersebut: versi tiruan Anda dan versi sebenarnya. Kesalahan dalam menerjemahkan perilaku ketergantungan yang diejek sekarang menjadi perhatian lain yang harus diperhitungkan.
Regtest untuk menyelamatkan
Untungnya bagi kami, sebagian besar blockchain mendukung kemampuan untuk menjalankan jaringan pribadi sementara yang dapat diputar sebagai bagian dari proses continuous integration (CI) / continuous deployment (CD) kami. Contoh paling populer dari ini adalah mode uji regresi (regtest) Bitcoin. Saat Anda memulai bitcoind dengan opsi `-regtest`, itu menciptakan lingkungan blockchain lokal baru yang Anda kendalikan sepenuhnya. Fitur utama dari mode regtest adalah Anda dapat menambang sejumlah blok sesuka hati, memungkinkan pengujian E2E Anda untuk menyelesaikan perjalanan pulang pergi untuk deposit & penarikan semua jenis dan variasi, mensimulasikan ratusan skenario dalam hitungan detik. Kasus tepi dan skenario unik lainnya dapat dengan mudah disimulasikan dalam mode regtest, seperti transaksi multisig, re-orgs, replace by fee (RBF), child pays for parent (CPFP), dan banyak lagi! Tes ini tidak hanya memastikan bahwa kode kami tidak mengandung kesalahan, tetapi juga memvalidasi status akhir dari blockchain dan buku besar kami untuk memastikan bahwa semuanya beroperasi seperti yang diharapkan.
Sebagai bagian dari proses untuk menambahkan dukungan untuk cryptocurrency baru di Kraken, tim pendanaan membangun kerangka kerja regtest untuk semua daftar baru. Kode ini adalah dasar dari rezim pemeliharaan kami: setiap kali versi baru dirilis, itu hanya masalah memperbarui versi node blockchain dan menjalankan kembali pipa CI kami untuk memastikan bahwa tidak ada perubahan yang melanggar. Membaca catatan rilis dengan cermat dan kolaborasi dengan komunitas masih sangat diperlukan, tetapi pengujian ini memberi kami kepercayaan diri dalam merilis versi baru yang tidak akan kami miliki.
Solusi Kreatif
Sayangnya bagi kami, tidak semua blockchain diuji dalam pertempuran seperti Bitcoin. Blockchain baru sering kali memperkenalkan konsep baru, dan untuk menawarkan klien kami akses ke teknologi baru yang paling menarik, Kraken lebih memilih untuk meluncurkan dukungan untuk blockchain baru sedekat mungkin dengan awal mainnet. Untuk mendukung aset baru dengan aman pada atau mendekati tanggal peluncuran, Kraken terkadang perlu mengembangkan rangkaian uji kompleks untuk mendapatkan kepercayaan dalam integrasi dan untuk memastikan bahwa dana klien tidak berisiko.
Ilustrasi sempurna dari hal ini adalah ketika Kraken meluncurkan dukungan untuk Ethereum 2.0 hanya 3 hari setelah mainnet ditayangkan pada 1 Desember 2020. Meskipun ribuan individu dan perusahaan di seluruh dunia membantu menguji Ethereum 2.0 di beberapa testnet seperti Medalla dan Spadina, kami masih memutuskan untuk membawa konsep regtests ke tingkat yang lebih tinggi dengan integrasi ini. Kami tahu sejak awal bahwa Ethereum 2.0 akan menjadi perkembangan yang signifikan, dan keyakinan itu telah terbukti benar karena jutaan ETH sejauh ini telah dipertaruhkan di rantai suar, termasuk lebih dari 800,000 ETH yang telah dipertaruhkan oleh klien Kraken.
Di bawah ini Anda dapat melihat diagram kumpulan layanan yang terus menerus dikembangkan dan dirobohkan oleh pipa continuous integration (CI) kami setiap kali pengembang melakukan kode ke salah satu repositori kode ETH2 kami.
Pada tingkat tinggi, aliran uji adalah:
- Mulai node primer dan alternatif ETH1 (masing-masing bergiliran menambang untuk konsensus) dengan genesis yang berisi jumlah awal ETH untuk pengujian.
- Mulai node rantai suar ETH2 sebagai rantai pribadi menggunakan mode konfigurasi minimal khusus di mana hanya 16 validator yang diperlukan untuk mengaktifkan genesis.
- Terapkan kontrak pintar ETH2 ke blockchain ETH1.
- Setor ETH ke dalam kontrak setoran ETH2 tempat dana dibakar dan validator dibuat di node validator eksternal ETH2. Ini adalah validator yang hanya mengoperasikan jaringan ETH2 dan diperlakukan seolah-olah mereka berada di luar validator Kraken mana pun.
- Mulai penjelajah blok ETH1 & ETH2.
- Mulai Basis Data.
- Mulai Gateway dan Penandatangan.
- Masukkan permintaan klien untuk mempertaruhkan ETH -> ETH2.
- Gateway mengambil permintaan klien dan mengirimkan ETH ke kontrak deposit pada blockchain ETH1 dan membuat sejumlah validator yang sesuai pada node validator internal ETH2. Validator dipisahkan ke dalam set validator internal dan eksternal sehingga kami dapat menguji apa yang terjadi ketika validator kami turun (untuk menguji tebasan, penalti, hadiah yang hilang), dan untuk melihat apa yang terjadi ketika jaringan lain mati atau offline tetapi validator kami tetap bangun.
- Pantau hingga validator aktif di rantai ETH2, mulailah melacak hadiah, pembayaran, uji pemotongan dan penalti, deteksi hadiah yang hilang, dan bayar hadiah kepada klien.
- Jalankan proses rekonsiliasi keuangan kami yang terpisah pada semua transaksi untuk memastikan semua yang ada di semua buku besar kami cocok dengan benar.
Di atas hanya ringkasan tingkat tinggi dari apa yang terjadi dalam kerangka pengujian kami; ada sejumlah tes, pemeriksaan, dan validasi lain yang terjadi. Jika pengembang perlu men-debug sesuatu atau melihat status salah satu jaringan, mereka dapat berkonsultasi dengan penjelajah blok untuk melihat sekilas apa yang sebenarnya terjadi. Kami biasanya tidak menyertakan penjelajah blok dalam saluran CI kami, tetapi mengingat kompleksitas integrasi, sangat membantu selama fase pengembangan untuk memvisualisasikan apa yang terjadi secara on-chain.
Anda mungkin berpikir bahwa ini menambah penundaan yang sangat besar pada saluran CI kami, tetapi untungnya tidak demikian. Saat ini, pipeline CI lengkap untuk repo Ethereum 2.0 kami hanya membutuhkan waktu 14 menit untuk dijalankan. Ini termasuk mengaudit/membangun semua dependensi, memulai semua layanan, menyebarkan berbagai kontrak pintar ke blockchain, menambang blok, membuat validator, dan kemudian menjalankan semua 100+ skenario pengujian.
Final Thoughts
Mengembangkan tes E2E yang komprehensif untuk setiap integrasi blockchain tunggal di Kraken menghabiskan banyak sumber daya teknik. Ini adalah harga yang dengan senang hati kami bayar, karena perhatian utama kami adalah keamanan dana klien kami dan memastikan bahwa mereka memiliki pengalaman berkualitas di platform kami. Bisakah tim kami merilis lebih banyak produk jika kami menghabiskan lebih sedikit waktu untuk pengujian saat membangun integrasi baru? Tanpa pertanyaan. Namun, melakukan hal itu akan bertentangan dengan etos dan nilai-nilai tidak hanya tim teknik, tetapi juga perusahaan secara keseluruhan. Pengujian ini memastikan bahwa kami dapat dengan aman memperbarui ke versi baru perangkat lunak blockchain, meningkatkan kepercayaan diri selama hard/soft fork, dan mengurangi stres pengembang saat menerapkan perubahan.
Mengapa insinyur Kraken termasuk yang paling dihormati di industri ini? Pesan ini dari Steve Hunt, Wakil Presiden Teknik Kraken, menguraikan nilai dan dedikasi kami untuk membantu insinyur blockchain lainnya.
Sumber: https://blog.kraken.com/post/10227/testing-crypto-payments-staking-at-kraken/
- &
- 000
- 11
- 2020
- mengakses
- Akun
- aktif
- Semua
- Semua Transaksi
- Membiarkan
- Aplikasi
- arsitektur
- sekitar
- aset
- Aktiva
- Pertarungan
- rantai suar
- Bitcoin
- blockchain
- BTC
- membangun
- Bangunan
- panggilan
- kasus
- menantang
- perubahan
- Cek
- anak
- kode
- kolaborasi
- kedatangan
- Umum
- masyarakat
- Perusahaan
- perusahaan
- kepercayaan
- Konsensus
- terus
- kontrak
- kontrak
- membuat
- kripto
- cryptocurrencies
- cryptocurrency
- Basis Data
- transaksi
- menunda
- Deteksi
- mengembangkan
- Pengembang
- pengembang
- Pengembangan
- Kepala
- Awal
- Tepi
- Efektif
- insinyur
- Teknik
- Insinyur
- Lingkungan Hidup
- ERC20
- ETH
- ethereum
- Ethereum 2.0
- Jiwa khas suatu bangsa
- peristiwa
- Pasar Valas
- FAST
- Fitur
- Fitur
- Persetujuan
- keuangan
- keluwesan
- aliran
- Kerangka
- penuh
- fungsi
- pendanaan
- dana-dana
- masa depan
- Umum
- Asal
- baik
- besar
- di sini
- High
- Rumah
- Seterpercayaapakah Olymp Trade? Kesimpulan
- HTTPS
- Ratusan
- Termasuk
- Meningkatkan
- industri
- Infrastruktur
- integrasi
- integrasi
- isolasi
- IT
- pemeliharaan
- kunci
- pengetahuan
- Kraken
- besar
- jalankan
- memimpin
- Tingkat
- Daftar
- lokal
- LTC
- Membuat
- Pertambangan
- bulan
- Paling Populer
- banyak tanda
- jaringan
- Fitur Baru
- produk baru
- node
- menawarkan
- operasi
- pilihan
- urutan
- Lainnya
- Sakit
- Membayar
- pembayaran
- Platform
- Populer
- harga pompa cor beton mini
- swasta
- Produk
- memprojeksikan
- kualitas
- Bacaan
- menurunkan
- kepercayaan
- Persyaratan
- Sumber
- ISTIRAHAT
- Hadiah
- Risiko
- Run
- berjalan
- Safety/keselamatan
- Layar
- Layanan
- set
- kecil
- pintar
- kontrak pintar
- Kontrak Cerdas
- So
- Perangkat lunak
- Space
- taruhan
- Taruhan
- awal
- Negara
- tekanan
- mendukung
- Didukung
- Mendukung
- sistem
- Teknologi
- sementara
- uji
- pengujian
- tes
- waktu
- token
- puncak
- Pelacakan
- .
- Transaksi
- Memperbarui
- Pembaruan
- us
- nilai
- volume
- jaringan
- minggu
- dalam
- Kerja
- dunia
- X
- xrp
- tahun