Question: I am developing a ridesharing Dapp. The ridesharing Dapp is going to have a social media - like features such as friendship, ride posting, transaction

I am developing a ridesharing Dapp. The ridesharing Dapp is going to have a social media-like features such as friendship, ride posting, transaction history, and receipt issuance. So i need human expert to assist writing and adding the following sections to your existing RideSharing smart contract:
* Friendship: Users can send, accept, and reject friend requests.
* Transaction History and Receipt: Drivers and riders will have their ride history recorded, and receipts can be generated.
* Ride Posting: Drivers can post rides, and riders can search/browse for rides based on destination, time, and price.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract RideSharing {
struct User {
string name;
bool isDriver;
uint rating;
uint rideCount;
}
struct Ride {
address rider;
address driver;
uint fare;
bool isCompleted;
}
mapping(address => User) public users;
mapping(uint => Ride) public rides;
event UserRegistered(address user, string name, bool isDriver);
event RideRequested(address rider, uint rideId);
event RideOffered(address driver, uint rideId);
event RideCompleted(uint rideId, address rider, address driver);
event PaymentProcessed(uint rideId, address rider, address driver, uint fare);
event RatingSubmitted(address user, uint rating);
uint public rideCounter =0;
function registerUser(string memory _name, bool _isDriver) public {
require(bytes(_name).length >0, "Name is required");
require(users[msg.sender].rideCount ==0, "User already registered");
users[msg.sender]= User({
name: _name,
isDriver: _isDriver,
rating: 0,
rideCount: 0
});
emit UserRegistered(msg.sender,_name, _isDriver);
}
function confirmRide(uint _rideId) public {
require(rides[_rideId].rider == msg.sender || rides[_rideId].driver == msg.sender, "Only participants can confirm");
require(rides[_rideId].driver != address(0), "Ride not yet offered");
rides[_rideId].isCompleted = true;
emit RideCompleted(_rideId, rides[_rideId].rider, rides[_rideId].driver);
}
function processPayment(uint _rideId) public payable {
require(rides[_rideId].rider == msg.sender, "Only rider can make payment");
require(rides[_rideId].isCompleted == true, "Ride not completed");
address payable driver = payable(rides[_rideId].driver);
driver.transfer(msg.value);
emit PaymentProcessed(_rideId, msg.sender, driver, msg.value);
}
function submitRating(address _user, uint _rating) public {
require(_rating >0 && _rating <=5, "Rating should be between 1 and 5");
require(users[_user].rideCount >0, "User must have completed at least one ride");
users[_user].rating =(users[_user].rating * users[_user].rideCount +_rating)/(users[_user].rideCount +1);
users[_user].rideCount++;
emit RatingSubmitted(_user, _rating);
}
}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!