Address Details
contract

0xe97966c831Ff716cC86B115f55aF3dDab0078Ab3

Contract Name
SmartRentFactory
Creator
0x022cba–2ddf2f at 0x579673–e26552
Balance
0 CELO ( )
Tokens
Fetching tokens...
Transactions
Fetching transactions...
Transfers
Fetching transfers...
Gas Used
Fetching gas used...
Last Balance Update
4935289
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-30T12:47:34.589807Z

/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;
    uint public rentAmount;
    uint public rentDeposit;
    uint256 public startDate;
    uint256 public endDate;
    string public roomAddress;

    uint public depositInContract = 0;
    uint 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, rentDeposit);
    }

    function payRent() external payable tenantOnly {
        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 landlordOnly {
        require(rentDeposit != totalRentLeft, "Tenant has not paid any rent yet");
        uint fee = rentDeposit - totalRentLeft;
        landlordAddress.transfer(fee);
        emit RentWithdrawn(msg.sender, fee);
    }

}
          

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

0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063b9b392e614610030575b600080fd5b6101e9600480360361010081101561004757600080fd5b810190808035906020019064010000000081111561006457600080fd5b82018360208201111561007657600080fd5b8035906020019184600183028401116401000000008311171561009857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561011b57600080fd5b82018360208201111561012d57600080fd5b8035906020019184600183028401116401000000008311171561014f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506101eb565b005b6000888888888888888860405161020190610419565b80806020018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018881526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183810383528b818151815260200191508051906020019080838360005b838110156102be5780820151818401526020810190506102a3565b50505050905090810190601f1680156102eb5780820380516001836020036101000a031916815260200191505b50838103825289818151815260200191508051906020019080838360005b83811015610324578082015181840152602081019050610309565b50505050905090810190601f1680156103515780820380516001836020036101000a031916815260200191505b509a5050505050505050505050604051809103906000f08015801561037a573d6000803e3d6000fd5b5090508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f6a5e83232efe4dca9454d60fbe19e482e52f973d7fa4123b439c1f9c338a8b7983604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a3505050505050505050565b6115f9806104278339019056fe60806040526000600260006101000a81548160ff0219169083151502179055506000600260016101000a81548160ff0219169083151502179055506000600a553480156200004c57600080fd5b50604051620015f9380380620015f983398181016040526101008110156200007357600080fd5b81019080805160405193929190846401000000008211156200009457600080fd5b83820191506020820185811115620000ab57600080fd5b8251866001820283011164010000000082111715620000c957600080fd5b8083526020830192505050908051906020019080838360005b83811015620000ff578082015181840152602081019050620000e2565b50505050905090810190601f1680156200012d5780820380516001836020036101000a031916815260200191505b5060405260200180519060200190929190805160405193929190846401000000008211156200015b57600080fd5b838201915060208201858111156200017257600080fd5b82518660018202830111640100000000821117156200019057600080fd5b8083526020830192505050908051906020019080838360005b83811015620001c6578082015181840152602081019050620001a9565b50505050905090810190601f168015620001f45780820380516001836020036101000a031916815260200191505b50604052602001805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505087600190805190602001906200024892919062000314565b50866000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508560099080519060200190620002a192919062000314565b508460078190555083600881905550826006819055508160058190555081600b8190555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505050620003c3565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200035757805160ff191683800117855562000388565b8280016001018555821562000388579182015b82811115620003875782518255916020019190600101906200036a565b5b5090506200039791906200039b565b5090565b620003c091905b80821115620003bc576000816000905550600101620003a2565b5090565b90565b61122680620003d36000396000f3fe6080604052600436106101145760003560e01c8063a709c4fe116100a0578063d1aac17111610064578063d1aac1711461039c578063d964f29e146103ed578063e1746af91461047d578063e66a6b22146104e6578063f8ef1e131461051557610114565b8063a709c4fe146102ce578063aca1feea146102d8578063b8b4f1a01461032f578063bf8c0efc14610346578063c24a0f8b1461037157610114565b80635c274b86116100e75780635c274b86146101d45780635f696ec3146101de5780636322182e14610209578063906b7fc7146102135780639419bc291461023e57610114565b806302d8db08146101195780630b97bc8614610170578063117df0881461019b57806332dd81f6146101a5575b600080fd5b34801561012557600080fd5b5061012e610540565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561017c57600080fd5b50610185610565565b6040518082815260200191505060405180910390f35b6101a361056b565b005b3480156101b157600080fd5b506101ba610840565b604051808215151515815260200191505060405180910390f35b6101dc610853565b005b3480156101ea57600080fd5b506101f3610952565b6040518082815260200191505060405180910390f35b610211610958565b005b34801561021f57600080fd5b50610228610b0c565b6040518082815260200191505060405180910390f35b34801561024a57600080fd5b50610253610b12565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610293578082015181840152602081019050610278565b50505050905090810190601f1680156102c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102d6610bb0565b005b3480156102e457600080fd5b506102ed610d39565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561033b57600080fd5b50610344610d5f565b005b34801561035257600080fd5b5061035b610e57565b6040518082815260200191505060405180910390f35b34801561037d57600080fd5b50610386610e5d565b6040518082815260200191505060405180910390f35b3480156103a857600080fd5b506103eb600480360360208110156103bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e63565b005b3480156103f957600080fd5b50610402611028565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610442578082015181840152602081019050610427565b50505050905090810190601f16801561046f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561048957600080fd5b506104cc600480360360208110156104a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110c6565b604051808215151515815260200191505060405180910390f35b3480156104f257600080fd5b506104fb6110e6565b604051808215151515815260200191505060405180910390f35b34801561052157600080fd5b5061052a6110f9565b6040518082815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105c557600080fd5b60011515600260019054906101000a900460ff1615151461064e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f54656e616e74206e65656420746f20706179206465706f73697420666972737481525060200191505060405180910390fd5b60085442116106a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806111696031913960400191505060405180910390fd5b6000600a5411610703576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061119a6023913960400191505060405180910390fd5b6000600b541461075e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d81526020018061112c603d913960400191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a549081150290604051600060405180830381858888f193505050501580156107c8573d6000803e3d6000fd5b506000600a819055507f4482101800a5c2e900f4156e57e05e19ffd7b366cde579553d723fd3abb2180e33600654604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1565b600260019054906101000a900460ff1681565b60001515600260019054906101000a900460ff161515146108bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180611100602c913960400191505060405180910390fd5b6001600260016101000a81548160ff02191690831515021790555034600a5401600a819055507ff1953715a33b9e021c0f2cf12911e8ac25fdb177bf6fc92d1331ae05201fe9f63334604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1565b600b5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109b157600080fd5b600b546006541415610a2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f54656e616e7420686173206e6f74207061696420616e792072656e742079657481525060200191505060405180910390fd5b6000600b546006540390506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610a9d573d6000803e3d6000fd5b507ffeb9f3b8586fb3823735104fd243164bdb90fcd9e989f902e96eb5b26bed4e383382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b600a5481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ba85780601f10610b7d57610100808354040283529160200191610ba8565b820191906000526020600020905b815481529060010190602001808311610b8b57829003601f168201915b505050505081565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c0a57600080fd5b60011515600260009054906101000a900460ff16151514610c2a57600080fd5b60011515600260019054906101000a900460ff16151514610cb3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f54656e616e74206e65656420746f20706179206465706f73697420666972737481525060200191505060405180910390fd5b6008544210610cc157600080fd5b34600b5403600b819055507f03b5033869479e8a98af42b272f05933f60489fe9fb43d63e11a6c31f3fa74743334604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60001515600260009054906101000a900460ff16151514610d7f57600080fd5b6001600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600260006101000a81548160ff0219169083151502179055507fe653009d32c7245a6ff858fa3a804f5beb3b19b4bbe48178446e966401d8389433604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b60065481565b60085481565b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f3074682061646472657373206973206e6f7420616c6c6f77656421000000000081525060200191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806111bd6035913960400191505060405180910390fd5b7ff32dc6bb034b9afc20d4c7daa180b08e89cac33817a6836595b1021c4347620482600554600654604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15050565b60098054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110be5780601f10611093576101008083540402835291602001916110be565b820191906000526020600020905b8154815290600101906020018083116110a157829003601f168201915b505050505081565b60036020528060005260406000206000915054906101000a900460ff1681565b600260009054906101000a900460ff1681565b6005548156fe54656e616e742063616e6e6f7420706179206465706f736974206d6f7265207468616e206f6e652074696d6554656e616e742063616e206f6e6c79207769746864726177206465706f73697420616674657220636c656172656420616c6c2072656e74616c2066656554656e616e742063616e206f6e6c79207769746864726177206465706f73697420616674657220706572696f6420656e644465706f73697420696e20636f6e74726163742063616e6e6f7420626520656d7074794c616e646c6f7264206973206e6f7420616c6c6f77656420746f2062652074656e616e74206174207468652073616d652074696d65a265627a7a72315820a7d49f892172d8d9fee4c5a5163b1c697c2efc97d5dc6e3a256c62ef1c71759264736f6c63430005100032a265627a7a723158206b6af55bf5f7924072fdfd8556deaea01d2d1a7a1b0feae4a70b1db118b86dfd64736f6c63430005100032