What it does:
Automates payments for autonomous vehicles (rides, tolls, charging) based on usage, distance, or service agreements using smart contracts.
Why it matters:
Eliminates intermediaries, ensures timely and transparent payments, reduces disputes, and enables programmable mobility services.
How it works:
Vehicles or mobility services register with metadata, pricing, and service terms
Users initiate payments per ride, per km, or per service usage
Smart contract automatically releases payments to vehicle owners, charging stations, or service providers
Supports subscription-based rides, tolls, or charging plans
Integrates with AI Agent Payment Contract, Tokenized Wallets, or Play-to-Earn Reward Engine for mobility incentives
Dashboards display trip history, usage costs, and payment confirmations
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/access/Ownable.sol";
/**
* @title AutonomousVehiclePayment
* @author Nam
* @notice Automates payments for autonomous vehicle services on-chain
*/
contract AutonomousVehiclePayment is Ownable {
struct Vehicle {
string name;
address payable owner;
uint256 pricePerKm; // in wei
bool active;
}
mapping(uint256 => Vehicle) public vehicles;
uint256 public vehicleCount;
// -------------------- EVENTS --------------------
event VehicleRegistered(uint256 indexed vehicleId, string name, address owner, uint256 pricePerKm);
event VehicleDeactivated(uint256 indexed vehicleId);
event PaymentMade(uint256 indexed vehicleId, address user, uint256 distance, uint256 amount);
// -------------------- VEHICLE MANAGEMENT --------------------
function registerVehicle(string calldata _name, uint256 _pricePerKm) external {
require(_pricePerKm > 0, "Price must be >0");
vehicleCount += 1;
vehicles[vehicleCount] = Vehicle({
name: _name,
owner: payable(msg.sender),
pricePerKm: _pricePerKm,
active: true
});
emit VehicleRegistered(vehicleCount, _name, msg.sender, _pricePerKm);
}
function deactivateVehicle(uint256 _vehicleId) external {
Vehicle storage v = vehicles[_vehicleId];
require(msg.sender == v.owner, "Not vehicle owner");
v.active = false;
emit VehicleDeactivated(_vehicleId);
}
// -------------------- PAYMENT MANAGEMENT --------------------
function payForRide(uint256 _vehicleId, uint256 _distanceInKm) external payable {
Vehicle storage v = vehicles[_vehicleId];
require(v.active, "Vehicle inactive");
uint256 totalAmount = v.pricePerKm * _distanceInKm;
require(msg.value == totalAmount, "Incorrect payment");
v.owner.transfer(msg.value);
emit PaymentMade(_vehicleId, msg.sender, _distanceInKm, msg.value);
}
// -------------------- VIEW FUNCTIONS --------------------
function isVehicleActive(uint256 _vehicleId) external view returns (bool) {
return vehicles[_vehicleId].active;
}
function getVehiclePrice(uint256 _vehicleId) external view returns (uint256) {
return vehicles[_vehicleId].pricePerKm;
}
}
Build and Grow By Nam Le Thanh