Bagaimana kami membuat sistem pembayaran cryptocurrency: lima masalah utama

Halo, Habr! Yang berhubungan adalah B2Broker, penyedia solusi likuiditas dan teknologi untuk industri pialang dan pertukaran. Salah satu produk kami adalah platform perdagangan B2BX.exchange. Ketika kami meluncurkan platform pada musim panas 2017, kami memikirkan cara menerima cryptocurrency dan pemrosesan apa yang digunakan. Sayangnya, tidak ada seorang pun pada saat itu yang siap untuk memberikan setidaknya jaminan pada kerentanan kontrak, dan kisah serangan terhadap platform DAO masih dalam sidang. Kami tidak ingin mengikuti jejak DAO. Selain itu, kami memiliki beberapa pengalaman dalam menerima pembayaran melalui blockchain. Jadi kami memutuskan untuk secara mandiri menghitung seluruh siklus pembayaran blockchain. Dalam posting ini kita akan berbicara tentang apa yang kita lakukan, dan, yang paling menarik, tentang masalah apa yang harus kita selesaikan dalam proses.


Sumber: ripplecoinnews.com

Dalam proses mengerjakan sistem pembayaran, kami menyadari bahwa kami dapat membuat layanan tidak hanya untuk platform B2BX.exchange kami, tetapi juga produk yang sepenuhnya independen. Kami menyebutnya B2BinPay.

Terdiri dari apa B2BinPay


Sistem pembayaran dibagi menjadi beberapa bagian dasar. Semuanya ditulis dalam PHP.

Bagian pertama dari sistem bertanggung jawab untuk berinteraksi dengan blockchains, yaitu untuk menerima, mengirim, dan melacak pembayaran.

Bagian kedua adalah API. Ia terlibat dalam interaksi dengan konsumen layanan dan pertukaran: memberi tahu penerimaan dana, melakukan pertukaran mata uang digital. API ditulis menggunakan kerangka Laravel.

Bagian ketiga adalah kantor untuk konsumen. Ini mencerminkan keadaan sistem secara keseluruhan, dompet yang terhubung dan saldo mereka, transaksi dan akun aktif. Mungkin sebentar lagi kita akan menghubungkan perolehan fiat klasik. Untuk membuat kantor, kami menggunakan Yii2.

Blok terpisah adalah sistem untuk bekerja dengan proyek ICO. Hal ini memungkinkan Anda untuk mendistribusikan token di semua tahap penjualan. Selain itu, ada kemungkinan mengembangkan kontrak (ERC-20) dan akun pribadi. Dengan menggunakan alat-alat ini, kami menyediakan layanan ICO turnkey.



Untuk alasan keamanan, semua data tentang dompet disimpan dalam basis data dalam bentuk terenkripsi, sehingga meskipun penyerang mendapatkan akses ke mereka, ia tidak akan dapat menarik dana dari dompet. Otentikasi pengguna dua faktor terhubung. Akhirnya, pedagang dapat membuat daftar putih alamat IP yang dapat bekerja dengan API.

Kami menyediakan toleransi kesalahan sistem dengan sejumlah besar server, termasuk yang cadangan. Setiap node blockchain terletak di server terpisah dengan akses terbatas dari luar.

Masalah apa yang kita temui?


Blockchain berbeda. Beberapa didokumentasikan dengan buruk dan tidak memiliki komunitas aktif. Ini adalah alasan utama masalah utama kami.

1. API Ethereum tidak memiliki kemampuan untuk mengembalikan daftar transaksi akun masuk

Saat membuat akun, sistem pembayaran kami menghasilkan alamat unik di mana pengguna harus mentransfer jumlah tertentu dalam mata uang yang dipilih. Dengan frekuensi yang diberikan, kami mendapatkan daftar transaksi masuk dan memverifikasi alamat dompet mereka. Kemudian kami memverifikasi alamat dompet dengan alamat tagihan yang belum dibayar. Ternyata, siaran tidak memungkinkan menerima informasi tentang transaksi masuk.

Apa yang harus dilakukan Kami memutuskan untuk menerima transaksi menggunakan layanan pihak ketiga - etherscan.io . Tetapi dia mengungkapkan beberapa masalah, jadi kami beralih ke explorer, layanan yang ditulis oleh programmer kami.

2. Beberapa blockchain memiliki dokumentasi yang sangat langka

Berikut ini adalah kasus yang khas: entah bagaimana kami menggunakan node ke salah satu cryptocurrency yang kurang dikenal, dan setelah beberapa hari berhenti menerima transaksi tanpa melaporkan kesalahan. Kami memulainya lagi, tetapi beberapa hari kemudian situasinya berulang.

Apa yang harus dilakukan Ketika mereka mulai mencari tahu, mereka menemukan bahwa masalahnya ada di salah satu parameter dalam file konfigurasi. Tidak ada kata dalam dokumentasi tentang parameter ini, jadi saya harus mengkonfigurasi semuanya dengan coba-coba.



3. Blockchain pribadi untuk menguji fungsionalitas sulit atau tidak mungkin diterapkan

Suatu kali kami harus menggunakan blockchain untuk cryptocurrency NEO. Kami menemukan gambar buruh pelabuhan yang siap, melakukan segalanya sesuai dengan instruksi dan mendapat kesalahan. Analisis cepat dari skrip tidak mengarah pada apa pun, Google juga tidak meminta apa pun.

Apa yang harus dilakukan Kami membuat masalah pada github, menghabiskan sekitar satu bulan untuk membahasnya, dan akhirnya memutuskan untuk menggunakan testnet. Tetapi tidak semua cryptocurrency memiliki testnet. Dan jika ya, maka paling sering Anda perlu mengirim aplikasi untuk koin tes dan tunggu sebentar. Pengembangan blockchain pribadi di situs resmi dalam banyak kasus bahkan tidak dipertimbangkan, jadi Anda harus menggunakan solusi pihak ketiga.

Dalam keadilan, perlu dikatakan bahwa dalam kebanyakan kasus, Anda bisa mendapatkan jawaban atas pertanyaan terkait dengan infrastruktur mata uang digital tertentu. Sumber daya yang paling berguna dalam hal ini adalah Github, maka Anda harus pergi ke forum resmi dan Reddit.

4. Penggunaan kembali kode yang tidak pantas

Bitcoin akhirnya memiliki banyak salinan dengan blokir dan blok individual - jangan bingung dengan garpu. Dalam kebanyakan kasus, cryptocurrency seperti ini memiliki API Bitcoin yang benar-benar identik. Agar tidak memperbanyak kode yang sama, untuk bekerja dengan salinan seperti itu kami menggunakan kelas yang sama untuk bekerja dengan mata uang Satoshi Nakamoto.

Tetapi mungkin tidak sesederhana itu. Ketika kami perlu mengintegrasikan Dogecoin, kami mengikuti skenario yang dijelaskan, mengonfigurasi, dan menggunakan testnet. Akibatnya, beberapa tes jatuh dan ada masalah dengan membuat transaksi.

Apa yang harus dilakukan Pertama, kami menjalankan tes melalui debugger. Ternyata Dogecoin dalam permintaan untuk melakukan transaksi tidak memungkinkan mentransfer jumlah dalam bentuk string, seperti halnya Bitcoin. Karena itu, kami harus mendefinisikan kembali metode di kelas anak. Omong-omong, ini adalah satu-satunya perbedaan yang diidentifikasi dalam Dogecoin dan Bitcoin API. Apa artinya itu tidak bisa dimengerti.

5. Tidak semua cryptocurrency memungkinkan menghasilkan alamat unik yang jumlahnya tidak terbatas

Semuanya sederhana di sini: tanpa generasi ini, kami tidak dapat menggunakan identifikasi pembayaran di alamat.

Apa yang harus dilakukan Dalam situasi seperti itu, kami menggunakan pesan unik yang terlampir pada transaksi saat mengirim pembayaran. Sayangnya, beberapa pelanggan lupa untuk menunjukkan pesan-pesan ini dan kemudian bertanya-tanya mengapa pembayaran tidak dikreditkan secara otomatis.

Bagaimana cara mengintegrasikan ke dalam CMS?


Kami membuat plugin B2BinPay untuk WordPress, Woocommerce, Magento, PrestaShop. Di sini nafsu makan datang dengan makan - awalnya kami tidak berencana untuk mempromosikan sistem melalui plugin untuk CMS. Untuk setiap plugin kami melakukan review di sistem. Hal paling serius terjadi untuk plugin Magento, kami akan memberi tahu Anda lebih banyak tentang ulasan ini.

Ulasan ini dibagi menjadi dua bagian - Teknis dan Pemasaran. Inspeksi teknis terdiri dari empat tahap:

  • Sniffer kode
  • Instalasi & Uji Pernis
  • Salin detektor pasta tempel
  • QA manual

Tiga tahap pertama sepenuhnya otomatis, jadi lebih baik untuk mempertimbangkan beberapa hal pada tahap pengembangan. Untuk menyederhanakan hidup Anda selama tes, pertama-tama, Anda harus mengingat aturan untuk Code Sniffer.

Aturan Magento untuk Code Sniffer mematuhi standar PSR-1 dan PSR-2, ini adalah satu dari sedikit CMS yang pengembangnya mematuhi pendekatan modern untuk pengembangan dalam PHP. Selain itu, orang-orang dari Magento menerbitkan seperangkat aturan terpisah yang membantu menemukan kesalahan dalam konfigurasi xml dari struktur ekstensi dan melengkapi cek yang diterima secara umum. Sebuah skrip untuk memeriksa konten paket jadi juga diterbitkan di akun github mereka, yang juga harus digunakan sebelum mengirimkan pengembangan Anda untuk verifikasi otomatis.

Instalasi Magento dasar berisi kelas bootstrap untuk phpunit: Anda dapat menggunakannya untuk menulis tes untuk plugin Anda. Jujur, kami masih belum tahu apakah ketersediaan tes berkontribusi pada penyelesaian cepat Tinjauan Teknis.



Tiga tahap pertama dari inspeksi teknis adalah otomatis. Untuk tahap keempat dan Tinjauan Pemasaran, Anda harus bersabar: kedua proses dilakukan oleh orang-orang dan karena itu, antrian terbentuk.

Kami menunggu hasil QA Manual selama sekitar 5 hari, yang pada dasarnya normal. Tetapi setiap aplikasi kami untuk Tinjauan Pemasaran telah diproses selama lebih dari seminggu. Di sini, penting bagi penguji bahwa pada paragraf pertama kami menuliskan integrasi dengan layanan yang kami sediakan dan apa model penetapan harganya, dan baru kemudian menunjukkan keunggulan plugin kami.

Rencana masa depan


Kami percaya bahwa B2BinPay ternyata cukup sederhana dalam hal interaksi dengan pengguna dan oleh karena itu akan nyaman bagi kedua perusahaan baru di pasar crypto dan bisnis maju - misalnya, dalam bidang penjualan online - di mana produk yang stabil dan aman diperlukan.

Di awal peredaran awal koin, kami menerima Bitcoin, CASH Bitcoin, Litecoin, DASH, Ethereum, Monero, dan lainnya. Sekarang kami menawarkan layanan untuk pedagang dan dompet untuk klien perusahaan di bawah perusahaan Estonia kami, di mana kami menerima dua lisensi - untuk bertukar cryptocurrency dan dompet.

Saat menjadi klien, kami membuat KYC lengkap untuk setiap pedagang, setelah itu pedagang dapat mulai menerima cryptocurrency, yang secara otomatis dikonversi menjadi dolar, euro atau pound dan dibayarkan ke rekening bank pedagang.

Kami akan dengan senang hati menjawab pertanyaan Anda tentang penciptaan B2BinPay dan pada produk itu sendiri pada prinsipnya. Selain itu, kami sekarang secara aktif mencari orang-orang yang berpikiran sama yang memiliki keterampilan pemrograman Python dan siap untuk bergabung dengan tim kami. Sekarang di St. Petersburg kami telah membuka lowongan untuk pemimpin tim dan pengembang senior . Kami menantikan resume Anda!

Source: https://habr.com/ru/post/id441338/


All Articles