Cara memulai pembayaran mikro di aplikasi Anda

Minggu lalu saya habiskan mengembangkan program publik pertama saya - bot Telegram yang berfungsi sebagai dompet Bitcoin dan memungkinkan Anda untuk "melempar koin" ke anggota lain dari obrolan grup dan juga melakukan pembayaran Bitcoin eksternal untuk Anda sendiri atau yang disebut lainnya "Aplikasi Petir". Maksud saya, secara umum pembaca mengenal Bitcoin dan Telegram Saya akan mencoba menulis secara singkat, tanpa merinci. Pilihan sumber daya tentang Bitcoin tersedia di tautan ini , tetapi Telegram adalah alat pengiriman pesan instan untuk perangkat seluler dan PC yang memungkinkan Anda membuat aplikasi kecil (chat chat) di platform mereka.

Apa saja fitur utama dari aplikasi ini?


  • Memungkinkan Anda untuk berterima kasih atau menghargai lawan bicara dengan nilai materi yang benar-benar, dan bukan hanya "seperti virtual" , ini membawa komunikasi elektronik ke tingkat yang sama sekali baru
  • Contoh dunia nyata dari aplikasi yang dapat berinteraksi secara finansial dengan aplikasi lain menggunakan protokol pembayaran terbuka
  • Semua komponen aplikasi adalah proyek sumber terbuka dan dimungkinkan untuk memodifikasi dan menerapkannya pada tugas Anda. Aplikasi ini tidak menggunakan solusi tertutup dan / atau komersial, meskipun faktanya sesuai dengan ruang lingkup perdagangan elektronik, yang saat ini cukup sulit untuk disebut terbuka.

Dan bagaimana cara menerapkannya dalam bisnis?


sesuatu seperti itu ...

gambar

atau lebih ...

gambar

Apa arti angka-angka ini? Ini adalah unit Bitcoin - Satoshi . Pada pertengahan harga pertukaran 2019, 1000 Satoshi adalah sekitar $ 0,06. Satoshi dapat dihabiskan secara online atau dengan mudah ditukar dengan mata uang nasional. Karena alasan ini (likuiditas) inilah ini bukan sekadar “entri lain ke dalam basis data” atau “poin yang dapat Anda belanjakan di toko mitra kami,” tetapi juga uang internet nyata .
* Saya ingin segera mencatat bahwa saya sengaja tidak mencoba menulis beberapa kata atau frasa dalam bahasa Rusia - entah saya tidak tahu terjemahan kontekstual itu sendiri dalam beberapa kasus, atau terjemahan semacam itu, menurut pendapat saya, terdengar lebih membingungkan daripada benar

Mungkin timbul pertanyaan, bagaimana cara menggunakan aplikasi semacam itu jika tidak ada bitcoin. Mereka dapat dengan mudah dibeli dalam jumlah kecil di salah satu dari banyak pertukaran atau penukar, atau Anda bisa mendapatkannya dari teman bitcoin atau bahkan mendapatkan koin dari pengguna bot saat ini. Banyak dompet di telepon menawarkan untuk membeli bitcoin secara langsung "tanpa meninggalkan meja kas."

gambargambargambar

Ketika kami mendapatkan bitcoin (melainkan Satoshi (?)) - jalankan @atomic_tipbot dan lakukan / setoran.

Bot sebagai respons akan menanyakan berapa banyak satoshi yang akan dikreditkan ke akun dan akan mengirimkan faktur pembayaran, yang dapat dibayar dengan dompet ponsel dengan memindai kode QR atau mengklik tombol ( “dompet terbuka” ) pada halaman faktur.

gambargambargambar

Setelah mengonfirmasi pembayaran di dompet Anda, segera konfirmasi pembayaran akan dikirim ke bot dan ini akan ditampilkan secara visual dalam bingkai akun.

Hingga saat ini, kami menyentuh dua komponen aplikasi - bot telegram back-end dan sistem pemrosesan pembayaran cryptocurrency (lebih tepatnya, front-end).

Untuk membuat bot Telegram, saya menggunakan Bot Python Telegram . Dan tentu saja, bot open source itu sendiri.

Sebagai sistem pemrosesan pembayaran dan penyelesaian masalah UX, pilihannya jatuh (pada kenyataannya, hampir tidak ada pilihan) di BTCPayServer , di mana dokumentasi tersedia di tautan ini .

Jika Anda mencari solusi untuk memproses acara pembayaran secara langsung, maka Anda harus memperhatikan halaman manual Electrum CLI untuk apa yang disebut pembayaran on-chain, dan untuk solusi pembayaran mikro instan (Lightning) seperti Lightning-charge atau Sparko .

Jadi itu host sendiri atau tidak !?


Ya itu. Dalam aplikasi saya, saya menggunakan BTCPayServer hosting gratis - BTCPayJungle , tetapi sangat mungkin dan tidak memerlukan banyak waktu untuk meluncurkan pusat pemrosesan saya sendiri. Namun, perlu diingat bahwa Anda akan membutuhkan ~ 500GB yang tersedia di kereta api untuk menyimpan blockchain Bitcoin (dan Litecoin). Ini juga akan membutuhkan sumber daya komputasi dan jaringan selama sinkronisasi dan, tergantung pada kebutuhan Anda, "pembungkus" yang diperlukan untuk blockchains, sehingga akan lebih mudah untuk berinteraksi dengan mereka. BTCPayServer tidak mengandung kunci pribadi by-design atau informasi lain yang memungkinkan Anda untuk mengontrol dompet Anda.

Untuk pembayaran on-chain (reguler), Anda perlu menambahkan apa yang disebut kunci xpub-wallet di BTCPayServer untuk menghasilkan alamat penerima (kunci publik). Ini memungkinkan dan aman untuk menggunakan BTCPayServer bahkan dalam bentuk "bersama". Semua kunci dan alamat xpub ini dapat dengan mudah diperoleh di dompet yang bagus seperti Electrum , untuk diproses lebih lanjut.

Setiap orang yang telah menemukan Bitcoin telah mendengar bahwa Bitcoin lambat dan transaksinya mahal, terutama ketika hype, jadi untuk pembayaran mikro instan Anda harus menggunakan transaksi Jaringan Petir (off-chain).

Apa ini Jaringan Petir?


Ini adalah sedikit plugin bitcoin yang membangun lapisan abstraksi tambahan dan memungkinkan Anda untuk melakukan transaksi instan dan hampir gratis di jaringan Bitcoin. Semua ini dimungkinkan berkat sihir kriptografi dengan multi-tanda tangan, sering disebut kontrak pintar . Ada beberapa implementasi protokol Lightning Network, saya menggunakan implementasi c-lightning di C.

Perbedaan utama antara pembayaran on-chain dan off-chain (Lightning) adalah bagaimana mereka disimpan. Semua transaksi on-chain diteruskan ke semua node jaringan sampai salah satu node Bitcoin mengumumkan blok ranjau baru dengan transaksi yang termasuk di dalamnya. (Bahkan ada BitFury di hub ; mereka hanya menghasilkan besi untuk ditambang). Untuk alasan inilah kami menyebutnya transaksi on-chain . Transaksi tersebut akan dicatat dalam blockchain umum dan disimpan di dalamnya sampai akhir keberadaannya. Transaksi tersebut juga berada dalam domain publik dan dapat dipantau, dilacak dan dianalisis.

Dalam kasus transaksi off-chain (Lightning), semuanya terjadi secara berbeda. Setiap node dari jaringan Lightning memiliki satu (atau lebih) alamat on-chain - ini adalah alamat Bitcoin yang biasa dari mana semuanya dimulai. Ketika bitcoin muncul di alamat seperti itu, dimungkinkan untuk membuka apa yang disebut. saluran petir ke node lain, yang berarti bahwa dengan bantuan teknik kriptografi, kedua node sepakat pada ketersediaan dana di antara mereka sendiri. Kemudian, semua transaksi (baik milik mereka sendiri maupun transaksi dari simpul asing) yang melewati saluran tersebut disimpan hanya pada simpul peserta transaksi (dan simpul perantara). Satu-satunya transaksi yang dicatat pada blockchain adalah transaksi tentang membuka atau menutup saluran. Pada skala yang lebih penuh, kami mendapatkan jaringan node yang saling berhubungan yang membangun di antara para peserta ribuan cara berbeda untuk "mentransfer" dana dari satu node ke node lain sesuai dengan aturan ketat tertentu. Hampir semua transaksi semacam itu hanya disimpan dalam file database dari node itu sendiri. Karena alasan inilah kami menyebutnya off-chain .

Diagram menunjukkan visualisasi semua komponen aplikasi


gambar

Singkatnya:

1) Pengguna mengirimkan perintah ke bot di Telegram

2) Telegram mengirim pesan acara python ke aplikasi bot

3) aplikasi python mengirimkan permintaan ke BTCPayServer

4) BTCPayServer menghasilkan alamat BTC dan LTC yang masuk, serta mengirimkan permintaan faktur ke biaya petir , yang selanjutnya berkomunikasi dengan daemon c-lightning . Di bagian keluaran, kami mendapatkan bentuk pemrosesan pembayaran HTML yang indah

5) Pengguna membayar faktur dan melihat konfirmasi

6) BTCPayServer mengirimkan pemberitahuan pembayaran faktur (IPN) ke callback_url yang ditentukan, dalam kasus kami callbacks.py (aplikasi python lain untuk menerima pemberitahuan)

7) Menurut data yang diterima, saldo pengguna berubah

... dan jika pengguna ingin menarik dana (koin yang ia terima dari orang lain) ...

8) Aplikasi Python bot sedang menunggu teks atau gambar kode QR, dan ketika data yang valid diterima, pembayaran oleh utilitas paylightning.py * dilakukan , yang menginisialisasi transaksi menggunakan c-lightning RPC.

gambar

* Dalam keadilan, perlu dicatat bahwa pembungkus paylightning.py saya belum sepenuhnya selesai dan dapat mengembalikan negatif palsu dalam skenario tertentu. Saya merekomendasikan untuk menggunakan pembungkus yang sudah disatukan dengan baik dalam kasus yang dekat dengan produksi

Apa yang kita miliki Pengguna bot kami dapat di dalam obrolan grup atau secara langsung dapat mentransfer nilai materi tanpa batasan. Dan ini belum semuanya - berkat protokol Lightning Network, yang dalam arti tertentu adalah jaringan pembayaran yang disatukan dan disederhanakan, dimungkinkan untuk mengirim uang yang sama yang diterima dalam obrolan ke aplikasi pihak ketiga yang sepenuhnya. Misalnya, Telegram sudah memiliki bot pertama untuk pembayaran bitcoin - @lntxbot. "Satu saldo" memungkinkan Anda untuk menggunakan bot apa pun tergantung pada preferensi obrolan grup tertentu (ya, masalahnya benar-benar dibuat dan solusinya sangat tidak berguna, tetapi intinya pada dasarnya). Mentransfer saldo dari satu bot ke bot lain tidak dikenakan biaya apa pun dan hanya membutuhkan waktu beberapa detik! Penting untuk dicatat bahwa pembuat bot ini bahkan tidak pernah terhubung satu sama lain.

gambargambar

Cukup kirimkan pesan permintaan setoran dari @lntxbot ke @atomic_tipbot dan voul'a!

Ini bukan hanya "mentransfer nomor ke database", tetapi pembayaran antara dua database yang berbeda dan tidak terkait. Dengan demikian, beberapa "LApps" sudah terintegrasi ke dalam bot, di antaranya: sat2.io dan lnsms.world .

Apa yang dimaksud dengan integrasi LApp ?

Setiap node Lightning Network pada dasarnya adalah dompet Bitcoin. Dia memiliki dua saldo: on-chain dan off-chain. Saldo on-chain diperlukan untuk membuka saluran baru dan menyimpan dana dari saluran tertutup. Tetapi keseimbangan off-chain adalah apa yang terjadi di antara node. Persyaratan utama untuk sebuah node adalah menerima dan mengirim pembayaran, sehingga setiap node sebagai perangkat lunak memiliki fungsi pembayaran dan faktur . Saya akan menunjukkan bagaimana ini terjadi:

user@ln-node:/ % lightning-cli invoice 1000000000 internal_description external_description { "payment_hash" : "64c0c8f5f8f708b08487ad1376f3d256f92ccb9606987ba395c2b4193efde5a0", "expires_at" : 1558709834, "bolt11" : "lnbc10m1pwdaj72pp5vnqv3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqdpqv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstcg76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkms2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd59r0g2mw4wzztwr6dcprxzej6" } 

Kami mendapatkan "faktur" dari spesifikasi BOLT11 dalam kasus ini, yang merupakan format pembayaran pada jaringan Bitcoin (dan omong-omong, Litecoin juga). Ini adalah baris yang berisi informasi tentang penerima, jumlah transaksi, waktu kedaluwarsa permintaan, dll., Informasi terperinci dapat diperoleh dengan menjalankan decodepay sehubungan dengan baris ini:

 user@ln-node:/ % lightning-cli decodepay lnbc10m1pwdaj72pp5vnqv3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqdpqv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstcg76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkms2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd59r0g2mw4wzztwr6dcprxzej6 { "currency" : "bc", "created_at" : 1558105034, "expiry" : 604800, "payee" : "025a14b8ed40583d67aec92da19453e0b2d1fbbf75f96f85d3dd0ff61a51ee0490", "msatoshi" : 1000000000, "amount_msat" : "1000000000msat", "description" : "external_description", "min_final_cltv_expiry" : 10, "routes" : [ [ { "pubkey" : "03a20c0c2ae4508b669a70e5f82f08f69a3da5da3bf0c973673c3fe977db0f61e3", "short_channel_id" : "574012x1255x1", "fee_base_msat" : 1000, "fee_proportional_millionths" : 1, "cltv_expiry_delta" : 144 } ] ], "payment_hash" : "64c0c8f5f8f708b08487ad1376f3d256f92ccb9606987ba395c2b4193efde5a0", "signature" : "304502210099f31dffd18b6db8296637db3e3a1ffbaf7b7db087a2ad1eedb7639f25e78b25022079038370073681aa1e1a7a05de6588e98ead078896d0a37a15b755c212dc3d37" } petir-cli decodepay lnbc10m1pwdaj72pp5vnqv3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqdpqv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstcg76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkms2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd59r0g2mw4wzztwr6dcprxzej6 user@ln-node:/ % lightning-cli decodepay lnbc10m1pwdaj72pp5vnqv3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqdpqv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstcg76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkms2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd59r0g2mw4wzztwr6dcprxzej6 { "currency" : "bc", "created_at" : 1558105034, "expiry" : 604800, "payee" : "025a14b8ed40583d67aec92da19453e0b2d1fbbf75f96f85d3dd0ff61a51ee0490", "msatoshi" : 1000000000, "amount_msat" : "1000000000msat", "description" : "external_description", "min_final_cltv_expiry" : 10, "routes" : [ [ { "pubkey" : "03a20c0c2ae4508b669a70e5f82f08f69a3da5da3bf0c973673c3fe977db0f61e3", "short_channel_id" : "574012x1255x1", "fee_base_msat" : 1000, "fee_proportional_millionths" : 1, "cltv_expiry_delta" : 144 } ] ], "payment_hash" : "64c0c8f5f8f708b08487ad1376f3d256f92ccb9606987ba395c2b4193efde5a0", "signature" : "304502210099f31dffd18b6db8296637db3e3a1ffbaf7b7db087a2ad1eedb7639f25e78b25022079038370073681aa1e1a7a05de6588e98ead078896d0a37a15b755c212dc3d37" } 

Tetapi untuk membayar “faktur” seperti itu kita membutuhkan fungsi pembayaran dari c-lightning:

 user@ln-node:/ % lightning-cli pay lnbc2u1pwdana3pp5c0nyfgq974hr8huflt9uutyalj4maaw3q5594xp89jkvw74jme3sdql2pshjgr5dus8q6r0dejjqampd3kx2aqcqzpgwjgn45gy80jwjhgm3tpsxg33j6h6pehdus0mnjerrad943cz3vs83g30lyhlhfjxtqvtl76vttkuhs5jekuxpsqmf98l8265pwmm76gp4e7z6j { "id" : 163, "payment_hash" : "c3e644a005f56e33df89facbce2c9dfcabbef5d105285a98272cacc77ab2de63", "destination" : "03021c5f5f57322740e4ee6936452add19dc7ea7ccf90635f95119ab82a62ae268", "msatoshi" : 200000, "amount_msat" : "200000msat", "msatoshi_sent" : 200003, "amount_sent_msat" : "200003msat", "created_at" : 1558106072, "status" : "complete", "payment_preimage" : "1a9552b9f4e9199e26839353f870b12cc85b7674a2fb134e78aa370032611019", "bolt11" : "lnbc2u1pwdana3pp5c0nyfgq974hr8huflt9uutyalj4maaw3q5594xp89jkvw74jme3sdql2pshjgr5dus8q6r0dejjqampd3kx2aqcqzpgwjgn45gy80jwjhgm3tpsxg33j6h6pehdus0mnjerrad943cz3vs83g30lyhlhfjxtqvtl76vttkuhs5jekuxpsqmf98l8265pwmm76gp4e7z6j" } petir-cli membayar lnbc2u1pwdana3pp5c0nyfgq974hr8huflt9uutyalj4maaw3q5594xp89jkvw74jme3sdql2pshjgr5dus8q6r0dejjqampd3kx2aqcqzpgwjgn45gy80jwjhgm3tpsxg33j6h6pehdus0mnjerrad943cz3vs83g30lyhlhfjxtqvtl76vttkuhs5jekuxpsqmf98l8265pwmm76gp4e7z6j user@ln-node:/ % lightning-cli pay lnbc2u1pwdana3pp5c0nyfgq974hr8huflt9uutyalj4maaw3q5594xp89jkvw74jme3sdql2pshjgr5dus8q6r0dejjqampd3kx2aqcqzpgwjgn45gy80jwjhgm3tpsxg33j6h6pehdus0mnjerrad943cz3vs83g30lyhlhfjxtqvtl76vttkuhs5jekuxpsqmf98l8265pwmm76gp4e7z6j { "id" : 163, "payment_hash" : "c3e644a005f56e33df89facbce2c9dfcabbef5d105285a98272cacc77ab2de63", "destination" : "03021c5f5f57322740e4ee6936452add19dc7ea7ccf90635f95119ab82a62ae268", "msatoshi" : 200000, "amount_msat" : "200000msat", "msatoshi_sent" : 200003, "amount_sent_msat" : "200003msat", "created_at" : 1558106072, "status" : "complete", "payment_preimage" : "1a9552b9f4e9199e26839353f870b12cc85b7674a2fb134e78aa370032611019", "bolt11" : "lnbc2u1pwdana3pp5c0nyfgq974hr8huflt9uutyalj4maaw3q5594xp89jkvw74jme3sdql2pshjgr5dus8q6r0dejjqampd3kx2aqcqzpgwjgn45gy80jwjhgm3tpsxg33j6h6pehdus0mnjerrad943cz3vs83g30lyhlhfjxtqvtl76vttkuhs5jekuxpsqmf98l8265pwmm76gp4e7z6j" } 

Semua status transaksi ditangani oleh seluruh jaringan dan simpul Anda sendiri secara khusus. Tidak perlu (tetapi ada kesempatan seperti itu) untuk berinteraksi dengan penulis aplikasi penerima pembayaran atau API mereka untuk mendapatkan informasi tentang status pembayaran. Tidak perlu memeriksa status pembayaran dalam sistem pemrosesan perantara. Tidak perlu mengharapkan persetujuan transaksi Anda dari bank atau lembaga pemerintah. Pada akhirnya, tidak ada serangan balik dan faktor eksternal lainnya yang dapat memengaruhi saldo di akun Anda. Ini adalah solusi untuk memindahkan nilai melalui Internet, tanpa perlu arbiter eksternal yang memutuskan apakah transaksi sesuai dengan aturan (kadang-kadang bahkan aturan internal, yang tidak semua peserta diberitahu sebelumnya) atau tidak. Tidak ada "aturan internal" dalam bitcoin. Satu-satunya aturan yang perlu Anda ikuti adalah aturan jaringan - terbuka dan terkenal.

Ini membuat transaksi uang langsung , praktis gratis dan instan antara orang atau program menjadi nyata.

Jika Anda memiliki kesempatan untuk menerima data pembayaran dari aplikasi pihak ketiga, maka dimungkinkan untuk berinteraksi secara finansial dengan aplikasi ini. Sebagai contoh, pertimbangkan layanan lnsms.world, yang memungkinkan Anda mengirim pesan SMS ke nomor sewenang-wenang dengan membayarnya dengan bitcoin. Untuk mengintegrasikan aplikasi ini, kita hanya perlu mentransfer data dari formulir web langsung ke skrip pengiriman SMS - untuk meniru tindakan pengguna di situs web:

 payload = { 'number': phone_number, 'text': text, 'force_unicode': 0 } send_req = requests.post('https://lnsms.world/invoice', data=payload) if send_req.status_code == 201: plain_invoice = str(send_req.text) 

Saya tidak tahu untuk alasan apa, tetapi lnsms merespons dengan 201 kode status HTTP dan mengembalikan faktur format BOLT11. Nah, ini cukup bagi pengguna bot untuk membayar mengirim SMS dari saldo mereka yang diterima di chat room. Pengguna bahkan tidak tahu apa yang terjadi di sana, ia hanya membayar beberapa sen untuk mengirim SMS. Dan saya, sebagai pengembang, tidak masuk ke rincian pekerjaan layanan SMS. Baru saja meneruskan pembayaran dan menerima layanan. Anda dapat membuat mark-up di atas, tetapi Anda tidak dapat melakukannya - ini adalah pilihan bebas saya. Tidak ada akun, perjanjian atau API lain untuk tugas sepele seperti mengirim SMS.

Dan sekarang mari kita bayangkan sejenak bahwa aplikasi kita adalah sesuatu yang lebih berguna daripada bot obrolan dan melakukan pembayaran bukan ke bot lain, tetapi ke aplikasi atau perangkat lain yang terhubung ke Internet. Atau lusinan atau bahkan ratusan pembayaran tidak penting setiap detik antara perangkat, layanan, toko, atau semacam penyedia layanan. Ini adalah kekuatan pembayaran mikro, jadi Internet seharusnya terlihat seperti itu. Sudah ada proyek seperti Althea yang menghidupkan ide-ide ini dan dalam waktu dekat kita akan melihat perubahan besar dalam area yang sekarang kita sebut e-commerce.

Jika Anda menyukai pos dan ingin mencoba bitcoin dalam aksi - kirimkan saya bir dan roti Prancis yang lembut .

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


All Articles