Minggu ini saya menghabiskan waktu mengkodekan aplikasi hewan peliharaan publik pertama saya yang didasarkan pada bot obrolan Telegram yang bertindak sebagai dompet Bitcoin dan memungkinkan untuk mengirim dan menerima kiat antara pengguna Telegram dan apa yang disebut "Aplikasi Petir". Saya berasumsi bahwa Anda terbiasa dengan Bitcoin & Telegram secara umum, saya akan mencoba memposting pendek dan tanpa lompatan mendalam ke detail. Lebih banyak sumber daya tentang Bitcoin dapat ditemukan di sini dan Telegram hanyalah sebuah messenger instan yang memungkinkan Anda untuk membuat aplikasi khusus Anda (chat-bot) menggunakan platform mereka.
Apa poin utama dari aplikasi tersebut?
- Memungkinkan untuk menilai ide dan jawaban pengguna lain dengan nilai sebenarnya
'suka virtual'. Ini membawa percakapan online ke tingkat yang sama sekali baru - Contoh nyata dari aplikasi pembayaran mikro yang bekerja dengan entitas lain
melalui internet menggunakan protokol terbuka - Semua modul adalah proyek open-source dan dapat dengan mudah digunakan kembali dan disesuaikan
untuk proyek Anda sendiri. Aplikasi tidak menyampaikan pada layanan komersial pihak ketiga.
Bahkan itu jatuh di bawah bidang e-commerce, yang saat ini hampir ditutup, aplikasi
didasarkan pada solusi terbuka.
Apa gunanya?
sesuatu seperti ini ...
atau seperti itu ..
Apa arti angka? Ini adalah unit bitcoin - satoshi . Sedangkan untuk pertengahan 2019 1000 satoshi memiliki nilai $ 0,06. Anda dapat membelanjakannya secara online atau menukar dengan mata uang lokal Anda menggunakan banyak layanan yang tersedia. Jadi ini bukan sekadar "nomor dalam basis data" atau "kupon yang dapat Anda belanjakan di toko mitra kami" , tetapi juga uang internet nyata .
Anda dapat bertanya apa yang harus dilakukan, jika Anda tidak memiliki bitcoin untuk digunakan dalam aplikasi. Anda hanya dapat menerima tip dari pengguna aplikasi yang ada atau membeli sejumlah kecil bitcoin di berbagai bursa atau dompet bitcoin untuk ponsel atau komputer.



Ketika Anda mendapat bitcoin, Anda dapat memulai @atomic_tipbot dan melakukan deposit.
Anda akan melihat faktur, Anda dapat memilih metode pembayaran pilihan dan mengirim uang hanya memindai kode QR atau dengan menekan tombol ( "buka di dompet" ) pada faktur.



Konfirmasikan pembayaran di dompet ponsel Anda, dan Anda akan melihat layar konfirmasi hampir secara instan di Telegram.
Sejauh ini kami menyentuh dua bagian aplikasi yang terpisah: telegram bot back-end dan sistem pemrosesan pembayaran (sebenarnya lebih mirip front-end).
Untuk membuat bot Telegram ini saya telah menggunakan Python Telegram Bot . Dan tentu saja, bot adalah open-source .
Sebagai sistem pemrosesan pembayaran untuk menghasilkan faktur, periksa status, kirim pemberitahuan, dan urus UX digunakan BTCPayServer yang dokumentasinya dapat ditemukan di sini .
Jika Anda mencari cara untuk memproses acara pembayaran secara langsung, Anda dapat melihat halaman manual Electrum CLI untuk pembayaran on-chain dan memeriksa solusi untuk pembayaran off-chain (Lightning) seperti Lightning-charge atau Sparko .
Anda bilang 'tidak ada pihak ketiga' dan 'tidak ada layanan cloud'!?
Ya itu benar. Dalam aplikasi saya, saya menggunakan hosting bersama gratis BTCPayServer misalnya - BTCPayJungle , tetapi dimungkinkan untuk berputar bahkan di server khusus Anda sendiri. Ingatlah bahwa Anda membutuhkan sekitar ~ 500GB ruang untuk menyimpan Bitcoin dan Litecoin blockchain. BTCPayServer tidak memiliki kunci pribadi atau informasi sensitif apa pun yang dapat memungkinkan peretas untuk mengontrol dana di dompet Anda. Untuk pembayaran on-chain (standar), Anda harus memberikan kunci xpub dari dompet Anda ke BTCPayServer sehingga dapat menghasilkan alamat publik. Dengan cara ini, arsitektur BTCPay memungkinkan untuk memproses pembayaran dengan cara yang tidak dapat dipercaya bahkan di lingkungan bersama. Sangat mudah untuk mengkonfigurasi jika Anda menggunakan dompet yang sudah terbukti seperti Electrum .
Apa itu Jaringan Petir?
Ini adalah sesuatu seperti add-on untuk Bitcoin yang menambahkan lapisan abstraksi tambahan dan memungkinkan untuk melakukan transaksi bitcoin instan dan hampir gratis. Semua hal ini dimungkinkan berkat sihir multi-tanda tangan kriptografis, yang sering disebut kontrak pintar . Ada beberapa implementasi protokol LN. Saya menggunakan implementasi c-lightning C.
Perbedaan utama antara pembayaran on-chain dan off-chain (Lightning) adalah bagaimana transaksi disimpan. Semua transaksi on-chain disiarkan ke seluruh jaringan sehingga setiap node bitcoin yang berjalan akan mencatat transaksi ini ke dalam blockchain, jika blok yang mengandung transaksi ini akan ditambang . Hei, BitFury , apa aku benar? ;) Itu sebabnya kami menyebut transaksi tersebut on-chain . Transaksi tersebut akan disimpan dalam blockchain sampai akhir keberadaannya. Dimungkinkan secara publik untuk melacak, menganalisis, dan memantau setiap transaksi semacam itu melalui jaringan.
Dalam hal transaksi off-chain (Petir) hal-hal terjadi dengan cara lain. Setiap node petir memiliki (mungkin banyak) alamat on-chain, dari mana semua dimulai. Ketika dana diterima pada alamat tersebut, menggunakan teknik kriptografi node dapat membuka apa yang disebut saluran kilat ke node lain, yang berarti bahwa kedua node membuat perjanjian tentang ketersediaan dana di antara mereka. Kemudian, semua transaksi yang dilakukan melalui saluran (memiliki transaksi sendiri, atau mungkin merupakan transaksi yang dirutekan dari node lain) disimpan hanya pada dua node tersebut (dan simpul perantara jika ada). Satu-satunya transaksi yang disimpan dalam jaringan blockchain adalah pembukaan dan penutupan transaksi saluran. Inilah sebabnya mengapa transaksi Lightning kita sebut off-chain . Kebanyakan mereka hanya ada di file database node.
Semuanya divisualisasikan pada diagram

Cerita pendek:
1) Pengguna mengirim pesan dan meminta setoran ke bot di Telegram
2) Telegram memicu aplikasi python bot
3) aplikasi python mengirimkan permintaan ke BTCPayServer
4) BTCPayServer menghasilkan alamat masuk untuk BTC dan LTC, juga menghubungi petir-biaya , yang mana mendapatkan data dari c-lightning daemon. Hasilnya, kami mendapatkan bingkai HTML yang ditangani dengan baik untuk pemrosesan pembayaran
5) Pengguna membayar faktur dan akan melihat konfirmasi
6) BTCPayServer mengirimkan pemberitahuan pembayaran faktur (IPN) ke url panggilan balik yang ditentukan, dalam hal ini kami
akan masuk ke callbacks.py (aplikasi python lain untuk mendengarkan panggilan balik)
7) Menurut detail pembayaran, saldo pengguna diubah dan pengguna mendapat notifikasi
... jika pengguna memutuskan untuk menarik dana (kiat yang diterimanya) ...
8) Aplikasi python Bot mendengarkan teks atau gambar QR, ketika mendapat data faktur (string panjang karakter) kemudian mengirimkan permintaan untuk membayar faktur itu ke aplikasi python lain paylightning.py * , yang menginisialisasi pembayaran menggunakan c-lightning RPC

* Agar adil, saya perlu menyebutkan bahwa paylightning.py pay-wrapper saya tidak lengkap dan dapat mengembalikan false-negative dalam beberapa kasus tertentu. Anda harus menggunakan pembungkus pembayaran yang teruji dengan baik untuk c-petir jika digunakan seperti produksi.
Pengguna dapat saling mengirim tip tentang obrolan grup dan mengirim / menerima nilai tanpa batas. Tapi itu belum semuanya. Berkat protokol Lightning Network, yang ada dalam semacam jaringan pembayaran yang disatukan dan disederhanakan Anda dapat mengirim koin saldo yang sama ke aplikasi yang sama sekali berbeda. Ada tip-bot bitcoin lain di telegram - @lntxbot. Pengguna dapat meminta setoran ke bot ini


Cukup meneruskan data dari @lntxbot ke @atomic_tipbot dan voul'a!
Ini bukan lagi 'pertukaran nomor dalam basis data' tetapi pembayaran antara dua 'basis data' yang terpisah dan tidak terkait. Bot sudah memiliki beberapa 'LApps' terintegrasi: sat2.io dan lnsms.world .
Anda mungkin bertanya, apa sebenarnya arti integrasi LApp ?
Setiap node Lightning Network bertindak sebagai dompet bitcoin. Ini memiliki keseimbangan on-chain dan off-chain. Saldo on-chain biasanya digunakan untuk membuka saluran dan menyimpan dana dari saluran tertutup, dalam tugas pemeliharaan simpul pendek. Saldo off-chain adalah apa yang sebenarnya digunakan untuk bertukar dana antar node. Fungsi inti dari setiap node adalah kemampuan untuk mengirim atau menerima dana, sehingga simpul sebagai perangkat lunak menyediakan metode pembayaran dan faktur . Saya akan menunjukkan secara singkat bagaimana ini terjadi:
user@ln-node:/ % lightning-cli invoice 1000000000 internal_description external_description { "payment_hash" : "64c0c8f5f8f708b08487ad1376f3d256f92ccb9606987ba395c2b4193efde5a0", "expires_at" : 1558709834, "bolt11" : "lnbc10m1pwdaj72pp5vnqv3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqdpqv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstcg76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkms2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd59r0g2mw4wzztwr6dcprxzej6" }
Faktur BOLT11 dibuat dalam kasus ini, yang merupakan format terpadu untuk permintaan pembayaran dalam jaringan Bitcoin (dan juga Litecoin). String ini mencakup data tentang penerima faktur, jumlah, cap waktu, kedaluwarsa, dll. Untuk memecahkan kode string ini c-lightning menyediakan metode decodepay:
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" }
Jika kita perlu membayar faktur, kita harus menggunakan metode pembayaran 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 pembayaran ditangani oleh seluruh jaringan dan simpul Anda sendiri. Anda tidak perlu (tetapi memiliki kemungkinan untuk melakukannya) untuk berkomunikasi sama sekali dengan pengembang aplikasi sisi penerima atau API mereka, beberapa penyedia pemrosesan kartu atau bank apa pun untuk mendapatkan konfirmasi tentang pembayaran Anda atau untuk mengeluarkan dana dari Anda sendiri akun. Tidak ada pengembalian biaya atau jenis pengaruh eksternal lain pada saldo akun Anda. Yang Anda butuhkan hanyalah perangkat lunak yang bertindak berdasarkan aturan jaringan yang didesentralisasi. Ini adalah solusi untuk menukar nilai melalui internet, tanpa perlu arbiter apa pun di tengah yang memutuskan tentang kompatibilitas pembayaran Anda dengan beberapa aturan, terkadang bahkan sebelumnya tidak diketahui oleh semua pihak. Tidak ada aturan "internal" dalam bitcoin, semua aturan yang harus dipenuhi aplikasi Anda terbuka dan diketahui.
Hal ini memungkinkan pertukaran nilai langsung , hampir gratis dan instan melalui internet antara orang atau bahkan perangkat lunak itu sendiri dengan cara yang benar-benar otonom.
Jika ada cara untuk mendapatkan data pembayaran dari aplikasi lain, maka Anda dapat bertindak dengan itu dalam arti finansial. Seperti dalam contoh kami, lnsms.world adalah aplikasi web yang memungkinkan Anda mengirim sms ke nomor apa pun dan membayarnya dengan bitcoin. Untuk mengintegrasikan opsi seperti itu di aplikasi kami, kami hanya perlu mengirimkan data yang diperlukan dari formulir web ke lnsms.world:
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 BOLT11. Ya, itu cukup untuk membayar faktur ini dan pengguna kami akan mengirim sms segera setelah pembayaran diterima. Kami dapat membebankan biaya atas atau tidak, itu adalah pilihan gratis kami.
Sekarang, bayangkan, bahwa bot Anda sebenarnya adalah aplikasi yang lebih berguna dan tidak membayar bot lain, tetapi beberapa entitas lain, yang terhubung ke Internet. Atau, itu mungkin pembayaran antara perangkat lunak, mesin, toko, penyedia layanan secara teratur berulang setiap beberapa detik? Apakah Anda merasakan kekuatan pembayaran mikro? Seperti itulah tampilan Internet of Things. Sudah sekarang ada proyek seperti https://althea.org/ dan dalam waktu dekat kami akan menghadapi perubahan besar di bidang yang kita sebut e-commerce.
Jika Anda menyukai posting ini dan akan mencoba pembayaran bitcoin sendiri, Anda dapat meninggalkan saya tip di halaman tip saya .