Skip to content

Capstone project is a Tokenized Real Estate experimental independent project to simulate how smart contract interact with blockchain technology.

Notifications You must be signed in to change notification settings

ezeblocks/Tokenized-RealEstate

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 

Repository files navigation

// SPDX-License-Identifier: MIT pragma solidity ^0.8.2;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol";

contract RealEstateToken is ERC20, Ownable { uint256 public INITIAL_SUPPLY; uint256 public issuanceFee; mapping(address => bool) public verifiedOwners; mapping(address => bool) public disputedOwners; bool public mintingFinished = false;

event MintFinished();
event OwnerVerified(address indexed owner);
event DisputeInitiated(address indexed owner);
event DisputeResolved(address indexed owner);
event RevenueShared(address indexed recipient, uint256 amount);

modifier onlyVerified(address account) {
    require(verifiedOwners[account], "Account is not verified");
    _;
}

constructor(uint256 _issuanceFee) ERC20("RealEstateToken", "RET") Ownable() {
    issuanceFee = _issuanceFee;
    INITIAL_SUPPLY = 100000 * (10 ** uint256(decimals()));
    _mint(msg.sender, INITIAL_SUPPLY);
}

function finishMinting() public onlyOwner returns (bool) {
    require(!mintingFinished, "Minting is already finished");
    mintingFinished = true;
    emit MintFinished();
    return true;
}

function burn(uint256 amount) public {
    _burn(msg.sender, amount);
}

function verifyKYC(address account) public onlyOwner {
    verifiedOwners[account] = true;
    emit OwnerVerified(account);
}

function createSmartToken(address to, uint256 amount) public payable onlyOwner {
    require(msg.value >= issuanceFee, "Issuance fee not paid");
    _mint(to, amount);
}

function shareRevenue(address recipient, uint256 amount) public onlyOwner {
    require(address(this).balance >= amount, "Insufficient balance");
    payable(recipient).transfer(amount);
    emit RevenueShared(recipient, amount);
}

function _payTransferFee(uint256 amount) internal {
    // Implement transfer fee logic here
}

function transfer(address recipient, uint256 amount) public override onlyVerified(msg.sender) onlyVerified(recipient) returns (bool) {
    _payTransferFee(amount);
    return super.transfer(recipient, amount);
}

function initiateDispute(address owner) public onlyVerified(msg.sender) {
    disputedOwners[owner] = true;
    emit DisputeInitiated(owner);
}

function resolveDispute(address owner) public onlyOwner {
    disputedOwners[owner] = false;
    emit DisputeResolved(owner);
}

}

About

Capstone project is a Tokenized Real Estate experimental independent project to simulate how smart contract interact with blockchain technology.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published