blockchain

Blockchain: Stellar, Arsitektur Anchor

Anchor adalah entitas yang dapat dipercaya oleh masyarakat untuk menyimpan deposit dan mengeluarkan credit kedalam Stellar network atas deposit tersebut. Semua transaksi keuangan pada Stellar network (kecuali lumens) terjadi dalam bentuk credit yang dikluarkan oleh anchor, sehingga anchors bertindak sebagai jembatan antara existing currencies dan Stellar network. Kebanyakan anchors adalah organisasi seperti bank, institusi tabungan, koperasi, bank central, dan perusahaan remittance.

Sebelum mulai, kita harus sudah menguasai tentang:

Struktur Account

Sebagai  anchor, kita mesti mengelola minimal 2 accounts:

  • Issuing account yang digunakan hanya pada saat meng-issue dan men-destroy assets.
  • Base account yang digunakan untuk bertransaksi dengan Stellar accounts lain. Account ini memegang saldo asset yang di-issue oleh issuing account.

Buatlah kedua account tersebut pada test network menggunakan aplikasi laboratory atau langkah-langkah yang dijelaskan pada artikel sebelumnya.

Untuk tutorial ini, kita gunakan key berikut ini:

Issuing Account ID
GAIUIQNMSXTTR4TGZETSQCGBTIF32G2L5P4AML4LFTMTHKM44UHIN6XQ
Issuing Seed
SBILUHQVXKTLPYXHHBL4IQ7ISJ3AKDTI2ZC56VQ6C2BDMNF463EON65U
Base Account ID
GAIGZHHWK3REZQPLQX5DNUN4A32CSEONTU6CMDBO7GDWLPSXZDSYA4BU
Base Seed
SAV75E2NK7Q5JZZLBBBNUPCIAKABN64HNHMDLD62SZWM6EBJ4R7CUNTZ

Customer Accounts

Ada 2 cara sederhana untuk membuat account customer:

  1. Gunakan sebuah Stellar account untuk setiap customer. Ketika customer mend-deposit money ke kita, kita harus membayarkan sejumlah custom asset yang sama kepada customer dari base account. Ketika customer ingin mencairkan uangnya, kurangkan sejumlah custom asset yang sama dari Stellar account mereka. Pendekatan ini mempermudah bookkeeping dengan memanfaatkan Stellar network dan bukan dengan internal systems kita. Cara ini juga memungkinkan customer  punya sedikit kontrol terhadap account mereka di Stellar.
  2. Gunakan federation dan field memo pada transaksi pengiriman dan penerimaan payment atas nama customers. Pada pendekatan ini, transaksi  yang ditujukan kepada customers semuanya menggunakan base account. Fiel memo pada transaction digunakan untuk meng-identifikasi  payment sebenarnya ditujukan ke customer mana. Dengan hanya 1 account kita perlu bookkeeping tambahan, tapi kita hanya perlu mengelola lebih sedikit key dan punya kontrol lebih terhadap account. Jika kita sudah punya banking systems, ini adalah cara integrasi ke Stellar yang paling sederhana.

Pada tutorial ini kita gunakan pendekatan nomor 2.

Data Flow

Agar berfungsi sebagai anchor, infrastructure kita perlu melakukan:

  • Transaksi payments.
  • Monitoring Stellar account dan meng-update customer account ketika diterima payment.
  • Look up dan me-respon request untuk federated addresses.
  • Comply dengan regulasi Anti-Money Laundering (AML) .

Stellar menyediakan federation server dan regulatory compliance server yang sudah ready dan didesain untuk siap di-install dan di-integrate dengan infrastructure yang ada. Bridge server mengkordinasikan semuanya dan menyederhanakan interaksi dengan Stellar network. Tutorial ini mendemokan bagaimana meng-integrate semua nya dengan infrastructure kita, namun kita bisa juga buat versi customized kita sendiri.

Transaksi Payment

Menggunakan services tersebut di atas, proses payment yang kompleks menggunakan federation dan compliance terjadi seperti ini:

Diagram of sending a payment
  1. Customer mengirim uang menggunakan app atau web site.
  2. Internal system kita mengirim payment menggunakan bridge server.
  3. Bridge server menentukan apakah  compliance checks diperlukan atau tidak dan mem-forward informasi transaksi ke compliance server.
  4. Compliance server mencari account ID penerima berdasarkan federation address.
  5. Compliance server meng-kontak system internal untuk mendapat information mengenai customer yang mengirim payment agar dapat memberikan informasi itu kepada system compliance di sisi penerima.
  6. Jika berhasil,  bridge server membentuk transaction, sign, dan mengirimnya ke Stellar network.
  7. Setelah transaksi dikonfirmasi pada network, bridge server mengeluarkan hasilnya ke system internal , supaya kita bisa update account customer.

Menerima Payment

Ketika ada seseorang mengirim transaksi kepada kita, flownya seperti ini:

Diagram of receiving a payment
  1. Pengirim mencari  Stellar account ID tujuan berdasarkan federated address customer dari  federation server kita.
  2. Pengirim meng-kontak compliance server kita dengan informasi tentang orang yang mengirim payment.
  3. Compliance server men-kontak 3 service yang kita implement:
    1. Sanctions callback untuk menentukan apakah pengirim diijinkan untuk membayar customer kita.
    2. Jika pengirim mau mengecek informasi customer kita, digunakan sebuah callback untuk menentukan apakah kita bersedia memberitahu informasi customer kita.
    3. Callback yang sama dengan yang digunakan ketika mengirim payment diatas (above) digunakan juga untuk mengambil informasi customer.
  4. Pengirim men-submit  transaksi ke Stellar network.
  5. Bridge server memonitor  Stellar network akan adanya transaksi dan mengirimkannya ke compliance server untuk mem-verifikasi bahwa itu adalah transaksi yang sama dengan yang sudah di-approve pada step 3.1.
  6. Bridge server mengkontak service yang kita implement untuk mengirim notifikasi kepada kita tentang transaksi tersebut. Kita bisa gunakan notifikasi ini untuk meng-update saldo pada account customer.

Langkah diatas tampak sangkat kompleks, tapi bridge, federation, dan compliance server akan mengerjakan hampir semuanya. Kita hanya perlu meng-implement 4 callback dan membuat file stellar.toml agar server lain bisa menemukan URL dari services kita.

Akhmad D. Sembiring
Blockchain Expert Indonesia