Alur transaksi pada CompanyContract memproses permintaan karyawan, mengeksekusi transfer jika jumlahnya aman, atau mengirim ke ComplianceOfficerContract untuk ditinjau dan disetujui/ditolak jika mencurigakan, sebelum dilakukan eksekusi akhir
Implementasi alur kerja transaksi melibatkan dua kontrak pintar: CompanyContract
dan ComplianceOfficerContract
. Alur kerja ini dimulai dengan seorang karyawan yang memulai transaksi dan berlanjut melalui serangkaian pemeriksaan dan persetujuan sebelum dana ditransfer atau transaksi ditolak.
Pertama, seorang karyawan memulai transfer dengan memanggil fungsi initiateTransfer
pada CompanyContract
, yang menyediakan alamat penerima dan jumlah transfer. Kontrak kemudian melakukan beberapa pemeriksaan untuk memastikan alamat penerima valid, jumlahnya positif, saldo yang cukup tersedia dalam kontrak, dan alamat kontrak petugas kepatuhan telah ditetapkan. Jika pemeriksaan ini lolos, ID transfer unik dibuat, dan detail transfer disimpan dalam pemetaan companyTransfers
dengan status awal PendingApproval
.
Selanjutnya, CompanyContract
membandingkan jumlah transfer dengan ambang batas yang telah ditetapkan yang disimpan dalam variabel transferThreshold
. Jika jumlahnya melebihi ambang batas ini, transaksi ditandai sebagai mencurigakan. Kontrak menetapkan statusnya ke PendingApproval
dan memancarkan peristiwa TransferInitiated
yang menyertakan detail transaksi yang relevan dan tanda yang menunjukkan kecurigaan.
Saat transaksi ditandai sebagai mencurigakan, CompanyContract
meneruskannya ke ComplianceOfficerContract
dengan memanggil fungsi requestApproval
. Panggilan ini menyertakan ID transfer, penerima, jumlah, dan alamat pemrakarsa. Hanya CompanyContract
yang sah yang dapat memanggil fungsi ini karena pembatasan onlyCompanyContract
. Setelah menerima permintaan, kontrak kepatuhan menyimpan transaksi dalam pemetaan suspiciousTransactions
dan menandai statusnya sebagai Pending
.
ComplianceOfficerContract
memancarkan peristiwa ApprovalRequested
untuk memberi tahu sistem di luar jaringan tentang transaksi yang tertunda. Aplikasi di luar rantai, seperti dasbor atau sistem peringatan, dapat mendeteksi kejadian ini dan memberi tahu petugas kepatuhan yang ditunjuk. Petugas diberikan ID transfer, penerima, jumlah, dan detail pemrakarsa untuk ditinjau.
Untuk menindaklanjuti transaksi, petugas kepatuhan menggunakan salah satu dari dua fungsi: approveTransaction
atau rejectTransaction
, keduanya dibatasi oleh pengubah onlyComplianceOfficer
. Setiap fungsi mengharuskan petugas untuk menyertakan nilai hash dari dokumentasi pendukung di luar rantai menggunakan parameter _offChainInfoHash
, yang memastikan tautan yang aman dan dapat dilacak antara keputusan di dalam rantai dan data di luar rantai.
Jika petugas menyetujui transaksi, status dalam pemetaan suspiciousTransactions
diperbarui menjadi Disetujui
, stempel waktu dicatat, dan _offChainInfoHash
disimpan. Kontrak kemudian memanggil kembali CompanyContract
menggunakan executeApprovedTransfer
. Hal ini memicu emisi peristiwa TransactionApproved
.
Jika petugas menolak transaksi, status diperbarui menjadi Ditolak
, stempel waktu dan hash dicatat, dan fungsi rejectSuspiciousTransfer
dalam CompanyContract
dipanggil. Tindakan ini memancarkan peristiwa TransactionRejected
.
Setelah CompanyContract
menerima persetujuan, ia memverifikasi bahwa status transfer masih PendingApproval
, memperbaruinya menjadi Disetujui
, memancarkan peristiwa TransferApprovedByCompliance
, dan memanggil fungsi internal _executeTransfer
untuk memproses pembayaran.
Jika jumlah transfer tidak melebihi ambang batas sejak awal, fungsi initiateTransfer
segera menandai transaksi sebagai Disetujui
dan langsung melanjutkan ke _executeTransfer
.
Fungsi _executeTransfer
bertanggung jawab untuk mengirim dana. Ia mencoba mentransfer sejumlah Ether yang ditentukan kepada penerima menggunakan metode .call
. Jika transfer berhasil, status diperbarui menjadi Executed
dan peristiwa TransferExecuted
dipancarkan. Jika transfer gagal, status berubah menjadi Failed
, dan peristiwa TransferFailed
dipancarkan.
Bersama-sama, CompanyContract
dan ComplianceOfficerContract
berkoordinasi untuk menerapkan alur kerja transaksi yang aman dan transparan. Hal ini memastikan bahwa setiap transaksi yang melampaui ambang batas yang ditentukan menjalani tinjauan kepatuhan sebelum dieksekusi, yang memberikan akuntabilitas dan keamanan dalam sistem.
Mpu Gandring ingin memberantas korupsi di Indonesia dengan teknologi blockchain! Anda ingin mendukung?
- Follow akun Mpu.
- Upvote dan resteem postingan Mpu.
- Share di Instagram, Facebook, X/Twitter dll.
- Biar pemerintah mendengar dan menerapkannya.
Upvoted! Thank you for supporting witness @jswit.