Address Details
contract

0x12ab7D23Dce3619323a5d1B6097bC77C19d34B74

Contract Name
SmartRentFactory
Creator
0x022cba–2ddf2f at 0xafef1d–b79915
Balance
0 CELO ( )
Tokens
Fetching tokens...
Transactions
Fetching transactions...
Transfers
Fetching transfers...
Gas Used
Fetching gas used...
Last Balance Update
4926041
This contract has been verified via Sourcify. View contract in Sourcify repository
Contract name:
SmartRentFactory




Optimization enabled
false
Compiler version
v0.5.16+commit.9c3226ce




EVM Version
istanbul




Verified at
2022-09-30T08:25:22.233659Z

/C/Users/User/Desktop/fyp/contracts/SmartRentFactory.sol

pragma solidity >=0.5.0;

import './SmartRentContract.sol';

contract SmartRentFactory {

    event NewLease(address contractAddress, address indexed landlord, address indexed tenant);

    string name = "Connected ";

    function createRent(
        string memory _landlord,
        address payable _landlordAddress,
        string memory _roomAddress,
        uint _startDate,
        uint _endDate,
        uint _deposit,
        uint _rent,
        address payable _tenantAddress
    ) public 
    {
        address newContract = address(new SmartRentContract(_landlord, _landlordAddress, _roomAddress, _startDate, _endDate, _deposit, _rent, _tenantAddress));
        emit NewLease(newContract, _landlordAddress, _tenantAddress);
    }
}
        

/C/Users/User/Desktop/fyp/contracts/SmartRentContract.sol

// Learn more about Solidity here: https://solidity.readthedocs.io

// This statement specifies the compatible compiler versions
pragma solidity >=0.5.0;

// Declare a contract called HelloWorld
contract SmartRentContract {
    
    event TenantAssigned(address tenantAddress, uint rentAmount, uint rentDeposit);
    event TenantSigned(address tenantAddress);
    event DepositPaid(address tenantAddress, uint rentDeposit);
    event DepositWithdrawn(address tenantAddress, uint rentDeposit);
    event RentPaid(address tenantAddress, uint amount);
    event RentWithdrawn(address landlordAddress, uint amount);
    event ApprovedSmartRent(address tenant);

    address payable public landlordAddress;
    string public landlordName;
    
    bool public isSigned = false;
    bool public hasPaidDeposit = false;
    
    mapping (address => bool) public tenantToSigned;
    address payable public tenantAddress;
    uint256 public rentAmount;
    uint256 public rentDeposit;
    uint256 public startDate;
    uint256 public endDate;
    string public roomAddress;

    uint256 public depositInContract = 0;
    uint256 public totalRentLeft;

    constructor(string memory _landlord,
            address payable _landlordAddress,
            string memory _roomAddress,
            uint _startDate,
            uint _endDate,
            uint _deposit,
            uint _rent,
            address payable _tenantAddress)
        public {
            landlordName = _landlord;
            landlordAddress = _landlordAddress;
            roomAddress = _roomAddress;
            startDate = _startDate;
            endDate = _endDate;
            rentDeposit = _deposit;
            rentAmount = _rent;
            totalRentLeft = _rent;
            tenantAddress = _tenantAddress;
    }

    modifier landlordOnly() {
        require(msg.sender == landlordAddress);
        _;
    }

    modifier tenantOnly() {
        require(msg.sender == tenantAddress);
        _;
    }

    modifier hasSigned() {
        require(isSigned == true, "Tenant must sign the contract before invoking this functionality");
        _;
    }

    modifier notZeroAddres(address addr){
        require(addr != address(0), "0th address is not allowed!");
        _;
    }

    function assignTenant(address _tenantAddress)
      external notZeroAddres(_tenantAddress) {
        require(_tenantAddress != landlordAddress, "Landlord is not allowed to be tenant at the same time");
        emit TenantAssigned(_tenantAddress, rentAmount, rentDeposit);
    }

    function signContract() public {
        require(isSigned == false);
        tenantToSigned[msg.sender] = true;
        isSigned = true;
        emit TenantSigned(msg.sender);
    }

    function payDeposit() external payable {
        require(hasPaidDeposit == false, "Tenant cannot pay deposit more than one time");
        hasPaidDeposit = true;
        depositInContract = depositInContract + msg.value;
        emit DepositPaid(msg.sender, msg.value);
    }

    function withdrawDeposit() external payable tenantOnly {
        require(hasPaidDeposit == true, "Tenant need to pay deposit first");
        require(block.timestamp > endDate, "Tenant can only withdraw deposit after period end");
        require(depositInContract > 0, "Deposit in contract cannot be empty");
        require(totalRentLeft == 0, "Tenant can only withdraw deposit after cleared all rental fee");
        tenantAddress.transfer(depositInContract);
        depositInContract = 0;
        emit DepositWithdrawn(msg.sender, msg.value);
    }

    function payRent() external payable {
        require(isSigned == true);
        require(hasPaidDeposit == true, "Tenant need to pay deposit first");
        require(block.timestamp < endDate);
        totalRentLeft = totalRentLeft - msg.value;
        emit RentPaid(msg.sender, msg.value);
    }

    function withdrawRent() external payable {
        uint256 fee = rentDeposit - totalRentLeft;
        landlordAddress.transfer(fee);
        emit RentWithdrawn(msg.sender, msg.value);
    }

}
          

Contract ABI

[{"type":"event","name":"NewLease","inputs":[{"type":"address","name":"contractAddress","internalType":"address","indexed":false},{"type":"address","name":"landlord","internalType":"address","indexed":true},{"type":"address","name":"tenant","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"createRent","inputs":[{"type":"string","name":"_landlord","internalType":"string"},{"type":"address","name":"_landlordAddress","internalType":"address payable"},{"type":"string","name":"_roomAddress","internalType":"string"},{"type":"uint256","name":"_startDate","internalType":"uint256"},{"type":"uint256","name":"_endDate","internalType":"uint256"},{"type":"uint256","name":"_deposit","internalType":"uint256"},{"type":"uint256","name":"_rent","internalType":"uint256"},{"type":"address","name":"_tenantAddress","internalType":"address payable"}],"constant":false}]
            

Deployed ByteCode

0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063b9b392e614610030575b600080fd5b6101e9600480360361010081101561004757600080fd5b810190808035906020019064010000000081111561006457600080fd5b82018360208201111561007657600080fd5b8035906020019184600183028401116401000000008311171561009857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561011b57600080fd5b82018360208201111561012d57600080fd5b8035906020019184600183028401116401000000008311171561014f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506101eb565b005b6000888888888888888860405161020190610419565b80806020018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018881526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183810383528b818151815260200191508051906020019080838360005b838110156102be5780820151818401526020810190506102a3565b50505050905090810190601f1680156102eb5780820380516001836020036101000a031916815260200191505b50838103825289818151815260200191508051906020019080838360005b83811015610324578082015181840152602081019050610309565b50505050905090810190601f1680156103515780820380516001836020036101000a031916815260200191505b509a5050505050505050505050604051809103906000f08015801561037a573d6000803e3d6000fd5b5090508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f6a5e83232efe4dca9454d60fbe19e482e52f973d7fa4123b439c1f9c338a8b7983604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a3505050505050505050565b6114ca806104278339019056fe60806040526000600260006101000a81548160ff0219169083151502179055506000600260016101000a81548160ff0219169083151502179055506000600a553480156200004c57600080fd5b50604051620014ca380380620014ca83398181016040526101008110156200007357600080fd5b81019080805160405193929190846401000000008211156200009457600080fd5b83820191506020820185811115620000ab57600080fd5b8251866001820283011164010000000082111715620000c957600080fd5b8083526020830192505050908051906020019080838360005b83811015620000ff578082015181840152602081019050620000e2565b50505050905090810190601f1680156200012d5780820380516001836020036101000a031916815260200191505b5060405260200180519060200190929190805160405193929190846401000000008211156200015b57600080fd5b838201915060208201858111156200017257600080fd5b82518660018202830111640100000000821117156200019057600080fd5b8083526020830192505050908051906020019080838360005b83811015620001c6578082015181840152602081019050620001a9565b50505050905090810190601f168015620001f45780820380516001836020036101000a031916815260200191505b50604052602001805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505087600190805190602001906200024892919062000314565b50866000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508560099080519060200190620002a192919062000314565b508460078190555083600881905550826006819055508160058190555081600b8190555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505050620003c3565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200035757805160ff191683800117855562000388565b8280016001018555821562000388579182015b82811115620003875782518255916020019190600101906200036a565b5b5090506200039791906200039b565b5090565b620003c091905b80821115620003bc576000816000905550600101620003a2565b5090565b90565b6110f780620003d36000396000f3fe6080604052600436106101145760003560e01c8063a709c4fe116100a0578063d1aac17111610064578063d1aac1711461039c578063d964f29e146103ed578063e1746af91461047d578063e66a6b22146104e6578063f8ef1e131461051557610114565b8063a709c4fe146102ce578063aca1feea146102d8578063b8b4f1a01461032f578063bf8c0efc14610346578063c24a0f8b1461037157610114565b80635c274b86116100e75780635c274b86146101d45780635f696ec3146101de5780636322182e14610209578063906b7fc7146102135780639419bc291461023e57610114565b806302d8db08146101195780630b97bc8614610170578063117df0881461019b57806332dd81f6146101a5575b600080fd5b34801561012557600080fd5b5061012e610540565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561017c57600080fd5b50610185610565565b6040518082815260200191505060405180910390f35b6101a361056b565b005b3480156101b157600080fd5b506101ba61083e565b604051808215151515815260200191505060405180910390f35b6101dc610851565b005b3480156101ea57600080fd5b506101f3610950565b6040518082815260200191505060405180910390f35b610211610956565b005b34801561021f57600080fd5b50610228610a37565b6040518082815260200191505060405180910390f35b34801561024a57600080fd5b50610253610a3d565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610293578082015181840152602081019050610278565b50505050905090810190601f1680156102c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102d6610adb565b005b3480156102e457600080fd5b506102ed610c0a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561033b57600080fd5b50610344610c30565b005b34801561035257600080fd5b5061035b610d28565b6040518082815260200191505060405180910390f35b34801561037d57600080fd5b50610386610d2e565b6040518082815260200191505060405180910390f35b3480156103a857600080fd5b506103eb600480360360208110156103bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d34565b005b3480156103f957600080fd5b50610402610ef9565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610442578082015181840152602081019050610427565b50505050905090810190601f16801561046f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561048957600080fd5b506104cc600480360360208110156104a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f97565b604051808215151515815260200191505060405180910390f35b3480156104f257600080fd5b506104fb610fb7565b604051808215151515815260200191505060405180910390f35b34801561052157600080fd5b5061052a610fca565b6040518082815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105c557600080fd5b60011515600260019054906101000a900460ff1615151461064e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f54656e616e74206e65656420746f20706179206465706f73697420666972737481525060200191505060405180910390fd5b60085442116106a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061103a6031913960400191505060405180910390fd5b6000600a5411610703576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061106b6023913960400191505060405180910390fd5b6000600b541461075e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180610ffd603d913960400191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a549081150290604051600060405180830381858888f193505050501580156107c8573d6000803e3d6000fd5b506000600a819055507f4482101800a5c2e900f4156e57e05e19ffd7b366cde579553d723fd3abb2180e3334604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1565b600260019054906101000a900460ff1681565b60001515600260019054906101000a900460ff161515146108bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180610fd1602c913960400191505060405180910390fd5b6001600260016101000a81548160ff02191690831515021790555034600a5401600a819055507ff1953715a33b9e021c0f2cf12911e8ac25fdb177bf6fc92d1331ae05201fe9f63334604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1565b600b5481565b6000600b546006540390506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156109c8573d6000803e3d6000fd5b507ffeb9f3b8586fb3823735104fd243164bdb90fcd9e989f902e96eb5b26bed4e383334604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b600a5481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ad35780601f10610aa857610100808354040283529160200191610ad3565b820191906000526020600020905b815481529060010190602001808311610ab657829003601f168201915b505050505081565b60011515600260009054906101000a900460ff16151514610afb57600080fd5b60011515600260019054906101000a900460ff16151514610b84576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f54656e616e74206e65656420746f20706179206465706f73697420666972737481525060200191505060405180910390fd5b6008544210610b9257600080fd5b34600b5403600b819055507f03b5033869479e8a98af42b272f05933f60489fe9fb43d63e11a6c31f3fa74743334604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60001515600260009054906101000a900460ff16151514610c5057600080fd5b6001600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600260006101000a81548160ff0219169083151502179055507fe653009d32c7245a6ff858fa3a804f5beb3b19b4bbe48178446e966401d8389433604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b60065481565b60085481565b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f3074682061646472657373206973206e6f7420616c6c6f77656421000000000081525060200191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603581526020018061108e6035913960400191505060405180910390fd5b7ff32dc6bb034b9afc20d4c7daa180b08e89cac33817a6836595b1021c4347620482600554600654604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15050565b60098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f8f5780601f10610f6457610100808354040283529160200191610f8f565b820191906000526020600020905b815481529060010190602001808311610f7257829003601f168201915b505050505081565b60036020528060005260406000206000915054906101000a900460ff1681565b600260009054906101000a900460ff1681565b6005548156fe54656e616e742063616e6e6f7420706179206465706f736974206d6f7265207468616e206f6e652074696d6554656e616e742063616e206f6e6c79207769746864726177206465706f73697420616674657220636c656172656420616c6c2072656e74616c2066656554656e616e742063616e206f6e6c79207769746864726177206465706f73697420616674657220706572696f6420656e644465706f73697420696e20636f6e74726163742063616e6e6f7420626520656d7074794c616e646c6f7264206973206e6f7420616c6c6f77656420746f2062652074656e616e74206174207468652073616d652074696d65a265627a7a723158208f97c756fd7611b115aa1bb7f9e3059d3a150eaf00d841ab700eb220a42b397f64736f6c63430005100032a265627a7a72315820f8da28428d6b78b723e2d42b33db7fc125b601e55fb8103d4f35dded24837ff064736f6c63430005100032