Skip to main content
. 2026 Jan 14;26(2):571. doi: 10.3390/s26020571
Algorithm 1: Vehicle KPI Payment & Penalty Contract
Data: Deposit amounts, KPI reports, and user/driver info
Result: Settlement of payments and penalties
initialize owner, oracleRelayer, platformFeeBps, trips, reports, withdrawable;
   Function createTrip(tripId, user, driver) external onlyOwner:
       requires trip with tripId does not exist;
       creates trip with user, driver, deposits = 0, settled = false;
       emits TripCreated;
   Function depositForTrip(tripId) external payable:
       requires trip exists and not settled;
       if sender == user: depositUser += msg.value;
       if sender == owner: depositCompany += msg.value;
       emits TripDeposited;
   Function subMitKpiReport(report) external onlyRelayer:
       requires trip exists and not settled;
       stores report and emit KpiReported;
       compute fees and penalties:
       calculate platformFee = userDeposit * platformFeeBps/10000;
       assign remaining user deposit to company;
       assign company funds proportionally to combinedScore;
       if combinedScore < lowThreshold:
           compute penalty to driver; adjust driver payment and penalty to user;
       if serviceFail:
           refund 80% of user deposit, reduce company payout, add penalty to user;
       update withdrawable balances for owner, driver, user, and platform;
       set trip as settled and emit Settled;
   Function withdraw() external:
       requires withdrawable balance > 0;
       transfer balance to caller;
       set withdrawable balance to zero;
       emit Withdrawn;
   Function receive() external payable:
       add msg.value to owner’s withdrawable balance;