1. Blockchain
Sekarang, ketika saya menulis artikel ini, nilai tukar Bitcoin telah turun lebih dari 5 kali relatif terhadap nilai maksimum dan ketika saya mengatakan bahwa saya melakukan sesuatu yang terkait dengan blockchain, hal pertama yang saya dengar adalah skeptisisme terbuka - “siapa yang butuh semua ini blockchain Anda sekarang” .
Ya, memang sensasi di sekitar blockchain telah berlalu. Tetapi teknologi yang mendasari tetap, mereka berkembang dan akan terus berkembang dan digunakan di ceruk tertentu.
Di Internet dan khususnya di Habré ada banyak bahan yang menggambarkan kedua area umum aplikasi teknologi (misalnya,
habr.com/company/bitfury/blog/353350 dan contoh-contoh lebih spesifik dari
habr.com/company/raiffeisenbank/blog/332756 ).
Seperti yang Anda ketahui, blockchain adalah registri terdistribusi, mis. database yang didistribusikan antara beberapa node sementara setiap node menyimpan salinan lengkap dari registri. Keunikan dari blockchain adalah bahwa catatan (transaksi) dikelompokkan ke dalam blok, dan blok digabungkan menjadi rantai blok. Namun, hanya operasi penambahan data yang tersedia. Semua ini mengarah pada fakta bahwa hampir tidak mungkin untuk melakukan perubahan pada transaksi yang sudah disimpan di blockchain.
Ada banyak materi tentang cara kerja blockchain (jika Anda belum pernah mendengar tentang blockchain sebelumnya, maka Anda bisa mulai dengan
video sederhana ini ).
Pada saat gelombang minat maksimum dalam teknologi blockchain, ada banyak panggilan untuk menggunakan blockchain di mana-mana. Namun, ada tanda-tanda proyek / tugas tertentu, yang implementasinya mungkin memerlukan blockchain.
Pertama, partisipasi sejumlah besar pemain (pengguna) yang merekam data, sementara itu perlu untuk mencegah inkonsistensi dan meningkatkan kepercayaan diri.
Kedua, tidak adanya pihak ketiga yang dipercaya semua orang.
Ketiga, perlunya mekanisme verifikasi data publik.
Jika semua kondisi di atas terpenuhi, Anda perlu berpikir tentang menggunakan blockchain.
Tugas-tugas seperti itu dapat muncul dalam industri apa pun. Proyek
www.101blockchains.com mengumpulkan informasi tentang proyek potensial dan yang diimplementasikan, serta tentang fitur-fitur menggunakan blockchain di berbagai bidang.
Misalnya, di sektor kesehatan, blockchain dapat digunakan:
- untuk manajemen data pasien yang aman;
- untuk memerangi narkoba palsu melalui transaksi tidak berubah-ubah di seluruh rantai pasokan;
- untuk meningkatkan pemantauan dan efektivitas uji klinis dengan menghilangkan penipuan dan manipulasi data.
Saat menggunakan blockchain di segmen korporat, mereka biasanya menggunakan blockchain pribadi dengan berbagai tingkat izin (Private Block diizinkan). Jaringan tersebut memiliki seperangkat simpul khusus untuk mengonfirmasi transaksi.
Namun, ketika mengembangkan adaptor IRIS InterSystems pertama untuk bekerja dengan blockchain, kami memilih
Ethereum , yang termasuk dalam kategori Blockchain Permissionless - platform terbuka tanpa badan pengatur. Pilihan ini dikaitkan dengan popularitas Ethereum dan infrastruktur yang cukup berkembang: kehadiran berbagai alat dan perpustakaan. Anda juga dapat memperhatikan bahwa menggunakan perangkat lunak Ethereum Anda dapat
membuat blockchain pribadi .
2. Adaptor
Sekarang saatnya beralih ke adaptor itu sendiri.
Adaptor dalam InterSystems IRIS (dan juga dalam Ensemble) adalah kelas atau paket kelas IRIS InterSystems yang menyediakan kemampuan untuk bekerja dengan sistem eksternal. InterSystems IRIS adapter dibagi menjadi yang masuk (untuk menerima data dari sistem eksternal ketika sistem eksternal adalah inisiator interaksi) dan keluar (untuk bekerja dengan sistem eksternal ketika inisiator interaksi adalah InterSystems IRIS).
Adaptor IRIS Ethereum adalah adaptor keluar, dan sedikit berbeda dari sebagian besar adaptor IRIS InterSystems lainnya, karena bagian dari adaptor ini adalah paket kelas IRIS InterSystems, tetapi adaptor juga mencakup modul NodeJS kecil. Arsitektur ditunjukkan pada Gambar 1.
Gambar 1Modul adaptor NodeJS menggunakan perpustakaan NodeJS yang ada untuk bekerja dengan Ethereum.
Adaptor menyediakan fitur berikut:
- Tempatkan kontrak cerdas di Ethereum (kami berencana untuk menyiapkan artikel lain di mana kami akan berbicara lebih banyak tentang kontrak pintar, alat pengembangan dan membahas contoh).
- Sebut metode kontrak pintar: kedua metode yang tidak mengubah status blockchain, dan metode yang mengubah status blockchain
- Menyimpan transaksi (mentransfer dana dari dompet ke dompet)
- Memanggil metode pembantu untuk mendapatkan status blockchain
- Mencatat semua permintaan (menjalankan modul NodeJS, berguna untuk debugging)
Adaptor tersedia dengan kode sumber OpenExchange .
3. Contoh sederhana
Contoh "Hello world" diinstal dengan adaptor.
Untuk mulai bekerja dengan Ethereum (termasuk untuk menjalankan contoh ini) Anda perlu:
- Pilih jaringan yang akan Anda gunakan. Untuk pengembangan, jaringan uji seperti Ropsten biasanya digunakan.
- Buat dompet di jaringan ini dan isi kembali
- Instal klien Ethereum lokal (misalnya, Geth) atau dapatkan kunci untuk bekerja dengan penyedia cloud (misalnya, Infura)
Saat mengatur transaksi bisnis, Anda harus menentukan (Gambar 2):
- Server dan port tempat modul NodeJS berjalan (port default adalah 3000)
- Pengaturan penyedia (dalam hal ini, akses ke Infura)
- Detail akses (dalam detail akses Anda perlu menunjukkan dompet Anda sebagai nama pengguna, kunci pribadi dari dompet sebagai kata sandi. Dalam InterSystems IRIS, detail akses disimpan dalam database terpisah, yang enkripsi harus diaktifkan)
Gambar 2Untuk bekerja dengan kontrak pintar, Anda harus membuat (untuk setiap kontrak pintar yang akan Anda hubungi) folder di sistem file dan menempatkan 2 file di sana:
* abi.txt
* bytecode.txt
File-file ini harus memiliki kontrak pintar dan Bytecode ABI. Kontrak pintar ABI - deskripsi formal tentang antarmuka kontrak pintar dalam format json. ABI dan Bytecode dibuat pada saat kontrak pintar dikompilasi.
Bytecode hanya diperlukan untuk menggunakan kontrak.
Dengan menggunakan layanan pengujian, Anda dapat memverifikasi operasi transaksi bisnis.
Pada Gambar 3, menggunakan layanan tes, kontrak pintar digunakan. Hasil memanggil operasi bisnis ini adalah pesan yang berisi hash transaksi.
Gambar 3Menggunakan browser ropsten.etherscan.io (https://etherscan.io/), Anda dapat menemukan transaksi ini dan mendapatkan alamat dari kontrak pintar yang ditempatkan.
Untuk menjalankan metode kontrak pintar menggunakan adaptor, Anda harus menentukan pengaturan dalam konfigurasi produk: ContractFolder dan ContractAddress.
Kode untuk memanggil metode kontrak pintar cukup sederhana:
set ..ContractABI = [].%FromJSON(..ContractFolder_"abi.txt") set contract = ..Adapter.GetContract( ##class(Ethereum.Address).%New(..ContractAddress), ..ContractABI) set result = contract.hello() set pResponse = ##class(Ens.StringContainer).%New(result.args)
Menggunakan metode adaptor GetContract, yang meneruskan alamat kontrak pintar dan ABI, objek kontrak pintar dibuat, yang kemudian digunakan untuk memanggil metode. Dalam hal ini, metode hello () harus didefinisikan dalam kontrak pintar, yang mengembalikan string.
Dalam contoh ini, metode hello () tidak mengubah status blockchain, sehingga dapat dipanggil secara serempak. Namun, metode yang mengubah status blockchain dapat memakan waktu lama (menunggu konfirmasi transaksi).
Untuk memanggil metode seperti itu, Anda dapat menggunakan mekanisme respons yang ditangguhkan di InterSystems IRIS. Adaptor perlu melewati token yang ditangguhkan dan kemudian, ketika transaksi NodeJS dikonfirmasi, modul akan mengirimkan hasil eksekusi ke IRIS InterSystems. Untuk melakukan ini, Anda harus mengonfigurasi aplikasi web dan menambahkan transaksi bisnis ke produk yang akan memproses respons yang diterima.
Kode untuk memanggil metode yang mengubah status blockchain:
Dalam hal ini, sebelum memanggil metode kontrak pintar setName (), Anda perlu menentukan sejumlah parameter, termasuk token respons tertunda.
Pada artikel kami berikutnya, kami akan berbicara lebih banyak tentang kontrak pintar dan memberikan contoh penyelesaian aplikasi menggunakan adaptor Interisystem IRIS Ethereum.