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

in Steem SEA22 days ago

1000042999.png

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.

1000042998.png

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.

1000042932.png
1000042934.png
1000042935.png

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.

Posting terkait: https://steemit.com/steem-sea/@mpu.gandring/kembangkan-dua-kontrak-pintar-untuk-mengelola-transfer-dana-dengan-persetujuan-petugas-kepatuhan-untuk-transaksi-yang-melebihi

Proyek Percontohan


Proyek percontohan sistem manajemen kontrak pemerintah desa Steem SEA yang memanfaatkan blockchain Steem untuk mencatat informasi kontrak penting secara permanen, dengan fokus pada integritas dan transparansi data


Proyek percontohan pengeluaran pemerintah di blockchain tentang “Pembelian bangku taman kota Steem SEA” menggunakan blockchain Steem

Sort:  

Upvoted! Thank you for supporting witness @jswit.